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] rawhide: Based on openssh-10.3p1-4.fc45 Date: Thu, 02 Jul 2026 09:47:30 GMT Message-ID: <178298565038.1.11270936194523347193.rpms-gsi-openssh-b9b571582909@fedoraproject.org> List-ID: X-Git-Repo: rpms/gsi-openssh X-Git-Branch: rawhide X-Git-Rev: b9b571582909108deb6f9035214c79d9aa55d0b7 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZ3NpLW9wZW5zc2gK QnJhbmNoIDogcmF3aGlkZQpDb21taXQgOiBiOWI1NzE1ODI5MDkxMDhkZWI2ZjkwMzUyMTRjNzlk OWFhNTVkMGI3CkF1dGhvciA6IE1hdHRpYXMgRWxsZXJ0IDxtYXR0aWFzLmVsbGVydEBwaHlzaWNz LnV1LnNlPgpEYXRlICAgOiAyMDI2LTA3LTAyVDExOjQ2OjMzKzAyOjAwClN0YXRzICA6ICszNjY4 MS8tMzYwMzIgaW4gMTE1IGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVj dC5vcmcvcnBtcy9nc2ktb3BlbnNzaC9jL2I5YjU3MTU4MjkwOTEwOGRlYjZmOTAzNTIxNGM3OWQ5 YWE1NWQwYjc/YnJhbmNoPXJhd2hpZGUKCkxvZzoKQmFzZWQgb24gb3BlbnNzaC0xMC4zcDEtNC5m YzQ1CgotLS0KZGlmZiAtLWdpdCBhLzAwMDEtQWRkLVNFTGludXgtcm9sZS1hbmQtTUxTLU11bHRp LUxldmVsLVNlY3VyaXR5LXN1cHBvci5wYXRjaCBiLzAwMDEtQWRkLVNFTGludXgtcm9sZS1hbmQt TUxTLU11bHRpLUxldmVsLVNlY3VyaXR5LXN1cHBvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5iYjY0ZWRiCi0tLSAvZGV2L251bGwKKysrIGIvMDAwMS1BZGQtU0VM aW51eC1yb2xlLWFuZC1NTFMtTXVsdGktTGV2ZWwtU2VjdXJpdHktc3VwcG9yLnBhdGNoCkBAIC0w LDAgKzEsNDE2IEBACitGcm9tIGNkYjIxZTU0NWZmZGU5YjIzN2ZhOWFiN2JlOGUzMmI3OGZmYzAw YmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVs ZG1pdEBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDI2IDE0OjA2OjMyICswMjAwCitT dWJqZWN0OiBbUEFUQ0ggMDEvNTRdIEFkZCBTRUxpbnV4IHJvbGUgYW5kIE1MUyAoTXVsdGktTGV2 ZWwgU2VjdXJpdHkpIHN1cHBvcnQKKworb3BlbnNzaC03LjhwMS1yb2xlLW1scworCitBZGQgc3Vw cG9ydCBmb3IgU0VMaW51eCByb2xlLWJhc2VkIGFjY2VzcyBjb250cm9sIGFuZCBNdWx0aS1MZXZl bAorU2VjdXJpdHkgKE1MUykgYnkgYWxsb3dpbmcgdXNlcnMgdG8gc3BlY2lmeSB0aGVpciByb2xl IGFzIHBhcnQgb2YgdGhlCit1c2VybmFtZSBpbiB0aGUgZm9ybWF0IHVzZXIvcm9sZS4KKworQ2hh bmdlczoKKy0gYXV0aC5oOiBBZGQgcm9sZSBmaWVsZCB0byBBdXRoY3R4dCBzdHJ1Y3R1cmUKKy0g YXV0aDIuYzogUGFyc2Ugcm9sZSBmcm9tIHVzZXJuYW1lIGFuZCBpbmZvcm0gbW9uaXRvciBwcm9j ZXNzCistIGF1dGgyLWdzcy5jOiBJbmNsdWRlIHJvbGUgaW4gR1NTQVBJIE1JQyBhdXRoZW50aWNh dGlvbgorLSBhdXRoMi1ob3N0YmFzZWQuYzogSW5jbHVkZSByb2xlIGluIGhvc3RiYXNlZCBhdXRo ZW50aWNhdGlvbiBzaWduYXR1cmUKKy0gYXV0aDItcHVia2V5LmM6IEluY2x1ZGUgcm9sZSBpbiBw dWJrZXkgYXV0aGVudGljYXRpb24gdXNlcnN0eWxlCistIG1vbml0b3IuYzogQWRkIG1tX2Fuc3dl cl9hdXRocm9sZSgpIGFuZCBoYW5kbGUgcm9sZSBpbiBhdXRoZW50aWNhdGlvbgorICBibG9iIHZh bGlkYXRpb24KKy0gbW9uaXRvcl93cmFwLmM6IEFkZCBtbV9pbmZvcm1fYXV0aHJvbGUoKSBmb3Ig cHJpdmlsZWdlIHNlcGFyYXRpb24KKy0gbWlzYy5jOiBVcGRhdGUgY29sb24oKSB0byBoYW5kbGUg L3JvbGUgc3ludGF4IGluIGZpbGUgcGF0aHMKKworQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBTb25u ZXQgNC41IDxub3JlcGx5QGFudGhyb3BpYy5jb20+CistLS0KKyBhdXRoLmggICAgICAgICAgICB8 ICAzICsrKworIGF1dGgyLWdzcy5jICAgICAgIHwgMTEgKysrKysrKysrKy0KKyBhdXRoMi1ob3N0 YmFzZWQuYyB8ICA5ICsrKysrKysrKworIGF1dGgyLXB1YmtleS5jICAgIHwgMTkgKysrKysrKysr KysrKysrLS0tLQorIGF1dGgyLmMgICAgICAgICAgIHwgMTQgKysrKysrKysrKysrKysKKyBtaXNj LmMgICAgICAgICAgICB8IDE4ICsrKysrKysrKysrKysrKysrLQorIG1vbml0b3IuYyAgICAgICAg IHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIG1vbml0b3IuaCAg ICAgICAgIHwgIDQgKysrKworIG1vbml0b3Jfd3JhcC5jICAgIHwgMjEgKysrKysrKysrKysrKysr KysrKysrCisgbW9uaXRvcl93cmFwLmggICAgfCAgMyArKysKKyAxMCBmaWxlcyBjaGFuZ2VkLCAx MzEgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2F1dGguaCBi L2F1dGguaAoraW5kZXggNjM0YTg0YWE4Li4zMmVlM2NiZjQgMTAwNjQ0CistLS0gYS9hdXRoLmgK KysrKyBiL2F1dGguaAorQEAgLTY1LDYgKzY1LDkgQEAgc3RydWN0IEF1dGhjdHh0IHsKKyAJY2hh cgkJKnNlcnZpY2U7CisgCXN0cnVjdCBwYXNzd2QJKnB3OwkJLyogc2V0IGlmICd2YWxpZCcgKi8K KyAJY2hhcgkJKnN0eWxlOworKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJY2hhcgkJKnJvbGU7Cisr I2VuZGlmCisgCisgCS8qIE1ldGhvZCBsaXN0cyBmb3IgbXVsdGlwbGUgYXV0aGVudGljYXRpb24g Ki8KKyAJY2hhcgkJKiphdXRoX21ldGhvZHM7CS8qIG1vZGlmaWVkIGZyb20gc2VydmVyIGNvbmZp ZyAqLworZGlmZiAtLWdpdCBhL2F1dGgyLWdzcy5jIGIvYXV0aDItZ3NzLmMKK2luZGV4IDA1MzU0 ODUyNy4uYjM4MGRjMTE3IDEwMDY0NAorLS0tIGEvYXV0aDItZ3NzLmMKKysrKyBiL2F1dGgyLWdz cy5jCitAQCAtMjg0LDYgKzI4NCw3IEBAIGlucHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQz Ml90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkKKyAJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5h dXRoY3R4dDsKKyAJR3NzY3R4dCAqZ3NzY3R4dDsKKyAJaW50IHIsIGF1dGhlbnRpY2F0ZWQgPSAw OworKwljaGFyICptaWN1c2VyOworIAlzdHJ1Y3Qgc3NoYnVmICpiOworIAlnc3NfYnVmZmVyX2Rl c2MgbWljLCBnc3NidWY7CisgCXVfY2hhciAqcDsKK0BAIC0zMDAsNyArMzAxLDEzIEBAIGlucHV0 X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkKKyAJ CWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7CisgCW1pYy52YWx1ZSA9IHA7CisgCW1pYy5s ZW5ndGggPSBsZW47CistCXNzaF9nc3NhcGlfYnVpbGRtaWMoYiwgYXV0aGN0eHQtPnVzZXIsIGF1 dGhjdHh0LT5zZXJ2aWNlLAorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJaWYgKGF1dGhjdHh0LT5y b2xlICYmIGF1dGhjdHh0LT5yb2xlWzBdICE9IDApCisrCQl4YXNwcmludGYoJm1pY3VzZXIsICIl cy8lcyIsIGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4dC0+cm9sZSk7CisrCWVsc2UKKysjZW5kaWYK KysJCW1pY3VzZXIgPSBhdXRoY3R4dC0+dXNlcjsKKysJc3NoX2dzc2FwaV9idWlsZG1pYyhiLCBt aWN1c2VyLCBhdXRoY3R4dC0+c2VydmljZSwKKyAJICAgICJnc3NhcGktd2l0aC1taWMiLCBzc2gt PmtleC0+c2Vzc2lvbl9pZCk7CisgCisgCWlmICgoZ3NzYnVmLnZhbHVlID0gc3NoYnVmX211dGFi bGVfcHRyKGIpKSA9PSBOVUxMKQorQEAgLTMxMyw2ICszMjAsOCBAQCBpbnB1dF9nc3NhcGlfbWlj KGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCisgCQlsb2dpdCgiR1NT QVBJIE1JQyBjaGVjayBmYWlsZWQiKTsKKyAKKyAJc3NoYnVmX2ZyZWUoYik7CisrCWlmIChtaWN1 c2VyICE9IGF1dGhjdHh0LT51c2VyKQorKwkJZnJlZShtaWN1c2VyKTsKKyAJZnJlZShtaWMudmFs dWUpOworIAorIAlhdXRoY3R4dC0+cG9zdHBvbmVkID0gMDsKK2RpZmYgLS1naXQgYS9hdXRoMi1o b3N0YmFzZWQuYyBiL2F1dGgyLWhvc3RiYXNlZC5jCitpbmRleCA4YTFhY2RlYzMuLmEyODcwOTFl YyAxMDA2NDQKKy0tLSBhL2F1dGgyLWhvc3RiYXNlZC5jCisrKysgYi9hdXRoMi1ob3N0YmFzZWQu YworQEAgLTEzMCw3ICsxMzAsMTYgQEAgdXNlcmF1dGhfaG9zdGJhc2VkKHN0cnVjdCBzc2ggKnNz aCwgY29uc3QgY2hhciAqbWV0aG9kKQorIAkvKiByZWNvbnN0cnVjdCBwYWNrZXQgKi8KKyAJaWYg KChyID0gc3NoYnVmX3B1dF9zdHJpbmdiKGIsIHNzaC0+a2V4LT5zZXNzaW9uX2lkKSkgIT0gMCB8 fAorIAkgICAgKHIgPSBzc2hidWZfcHV0X3U4KGIsIFNTSDJfTVNHX1VTRVJBVVRIX1JFUVVFU1Qp KSAhPSAwIHx8CisrI2lmZGVmIFdJVEhfU0VMSU5VWAorKwkgICAgKGF1dGhjdHh0LT5yb2xlCisr CSAgICA/ICggKHIgPSBzc2hidWZfcHV0X3UzMihiLCBzdHJsZW4oYXV0aGN0eHQtPnVzZXIpK3N0 cmxlbihhdXRoY3R4dC0+cm9sZSkrMSkpICE9IDAgfHwKKysJICAgICAgICAociA9IHNzaGJ1Zl9w dXQoYiwgYXV0aGN0eHQtPnVzZXIsIHN0cmxlbihhdXRoY3R4dC0+dXNlcikpKSAhPSAwIHx8Cisr CSAgICAgICAgKHIgPSBzc2hidWZfcHV0X3U4KGIsICcvJykgIT0gMCkgfHwKKysJICAgICAgICAo ciA9IHNzaGJ1Zl9wdXQoYiwgYXV0aGN0eHQtPnJvbGUsIHN0cmxlbihhdXRoY3R4dC0+cm9sZSkp KSAhPSAwKQorKwkgICAgOiAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCBhdXRoY3R4dC0+dXNl cikpICE9IDApIHx8CisrI2Vsc2UKKyAJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKGIsIGF1 dGhjdHh0LT51c2VyKSkgIT0gMCB8fAorKyNlbmRpZgorIAkgICAgKHIgPSBzc2hidWZfcHV0X2Nz dHJpbmcoYiwgYXV0aGN0eHQtPnNlcnZpY2UpKSAhPSAwIHx8CisgCSAgICAociA9IHNzaGJ1Zl9w dXRfY3N0cmluZyhiLCBtZXRob2QpKSAhPSAwIHx8CisgCSAgICAociA9IHNzaGJ1Zl9wdXRfc3Ry aW5nKGIsIHBrYWxnLCBhbGVuKSkgIT0gMCB8fAorZGlmZiAtLWdpdCBhL2F1dGgyLXB1YmtleS5j IGIvYXV0aDItcHVia2V5LmMKK2luZGV4IGU0NDZlZjQxMi4uMzE5ZTQyYjJiIDEwMDY0NAorLS0t IGEvYXV0aDItcHVia2V5LmMKKysrKyBiL2F1dGgyLXB1YmtleS5jCitAQCAtNzEsNiArNzEsOCBA QAorIAorIC8qIGltcG9ydCAqLworIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisrZXh0 ZXJuIGludCBpbmV0ZF9mbGFnOworK2V4dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OworIGV4 dGVybiBzdHJ1Y3QgYXV0aG1ldGhvZF9jZmcgbWV0aG9kY2ZnX3B1YmtleTsKKyAKKyBzdGF0aWMg Y2hhciAqCitAQCAtMjAxLDkgKzIwMywxNiBAQCB1c2VyYXV0aF9wdWJrZXkoc3RydWN0IHNzaCAq c3NoLCBjb25zdCBjaGFyICptZXRob2QpCisgCQkJZ290byBkb25lOworIAkJfQorIAkJLyogcmVj b25zdHJ1Y3QgcGFja2V0ICovCistCQl4YXNwcmludGYoJnVzZXJzdHlsZSwgIiVzJXMlcyIsIGF1 dGhjdHh0LT51c2VyLAorKwkJeGFzcHJpbnRmKCZ1c2Vyc3R5bGUsICIlcyVzJXMlcyVzIiwgYXV0 aGN0eHQtPnVzZXIsCisgCQkgICAgYXV0aGN0eHQtPnN0eWxlID8gIjoiIDogIiIsCistCQkgICAg YXV0aGN0eHQtPnN0eWxlID8gYXV0aGN0eHQtPnN0eWxlIDogIiIpOworKwkJICAgIGF1dGhjdHh0 LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHlsZSA6ICIiLAorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJ CSAgICBhdXRoY3R4dC0+cm9sZSA/ICIvIiA6ICIiLAorKwkJICAgIGF1dGhjdHh0LT5yb2xlID8g YXV0aGN0eHQtPnJvbGUgOiAiIgorKyNlbHNlCisrCQkgICAgIiIsICIiCisrI2VuZGlmCisrCQkg ICAgKTsKKyAJCWlmICgociA9IHNzaGJ1Zl9wdXRfdTgoYiwgU1NIMl9NU0dfVVNFUkFVVEhfUkVR VUVTVCkpICE9IDAgfHwKKyAJCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCB1c2Vyc3R5 bGUpKSAhPSAwIHx8CisgCQkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgYXV0aGN0eHQt PnNlcnZpY2UpKSAhPSAwIHx8CitAQCAtNDczLDcgKzQ4Miw4IEBAIG1hdGNoX3ByaW5jaXBhbHNf Y29tbWFuZChzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXks CisgCWlmICgocGlkID0gc3VicHJvY2VzcygiQXV0aG9yaXplZFByaW5jaXBhbHNDb21tYW5kIiwg Y29tbWFuZCwKKyAJICAgIGFjLCBhdiwgJmYsCisgCSAgICBTU0hfU1VCUFJPQ0VTU19TVERPVVRf Q0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19TVERFUlJfRElTQ0FSRCwKKy0JICAgIHJ1bmFzX3B3LCB0 ZW1wb3JhcmlseV91c2VfdWlkLCByZXN0b3JlX3VpZCkpID09IDApCisrCSAgICBydW5hc19wdywg dGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91aWQsCisrCSAgICBpbmV0ZF9mbGFnLCB0aGVf YXV0aGN0eHQpKSA9PSAwKQorIAkJZ290byBvdXQ7CisgCisgCXVpZF9zd2FwcGVkID0gMTsKK0BA IC03NDksNyArNzU5LDggQEAgdXNlcl9rZXlfY29tbWFuZF9hbGxvd2VkMihzdHJ1Y3QgcGFzc3dk ICp1c2VyX3B3LCBzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCWlmICgocGlkID0gc3VicHJvY2Vzcygi QXV0aG9yaXplZEtleXNDb21tYW5kIiwgY29tbWFuZCwKKyAJICAgIGFjLCBhdiwgJmYsCisgCSAg ICBTU0hfU1VCUFJPQ0VTU19TVERPVVRfQ0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19TVERFUlJfRElT Q0FSRCwKKy0JICAgIHJ1bmFzX3B3LCB0ZW1wb3JhcmlseV91c2VfdWlkLCByZXN0b3JlX3VpZCkp ID09IDApCisrCSAgICBydW5hc19wdywgdGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91aWQs CisrCSAgICBpbmV0ZF9mbGFnLCB0aGVfYXV0aGN0eHQpKSA9PSAwKQorIAkJZ290byBvdXQ7Cisg CisgCXVpZF9zd2FwcGVkID0gMTsKK2RpZmYgLS1naXQgYS9hdXRoMi5jIGIvYXV0aDIuYworaW5k ZXggM2ExNjgyNzQ2Li5iZmQ0MjVlYWIgMTAwNjQ0CistLS0gYS9hdXRoMi5jCisrKysgYi9hdXRo Mi5jCitAQCAtMjcxLDYgKzI3MSw5IEBAIGlucHV0X3VzZXJhdXRoX3JlcXVlc3QoaW50IHR5cGUs IHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorIAlBdXRoY3R4dCAqYXV0aGN0eHQgPSBz c2gtPmF1dGhjdHh0OworIAlBdXRobWV0aG9kICptID0gTlVMTDsKKyAJY2hhciAqdXNlciA9IE5V TEwsICpzZXJ2aWNlID0gTlVMTCwgKm1ldGhvZCA9IE5VTEwsICpzdHlsZSA9IE5VTEw7CisrI2lm ZGVmIFdJVEhfU0VMSU5VWAorKwljaGFyICpyb2xlID0gTlVMTDsKKysjZW5kaWYKKyAJaW50IHIs IGF1dGhlbnRpY2F0ZWQgPSAwOworIAlkb3VibGUgdHN0YXJ0ID0gbW9ub3RpbWVfZG91YmxlKCk7 CisgCitAQCAtMjg0LDYgKzI4NywxMSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBl LCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKKyAJZGVidWcoInVzZXJhdXRoLXJlcXVl c3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2QgJXMiLCB1c2VyLCBzZXJ2aWNlLCBtZXRo b2QpOworIAlkZWJ1ZygiYXR0ZW1wdCAlZCBmYWlsdXJlcyAlZCIsIGF1dGhjdHh0LT5hdHRlbXB0 LCBhdXRoY3R4dC0+ZmFpbHVyZXMpOworIAorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJaWYgKChy b2xlID0gc3RyY2hyKHVzZXIsICcvJykpICE9IE5VTEwpCisrCQkqcm9sZSsrID0gMDsKKysjZW5k aWYKKysKKyAJaWYgKChzdHlsZSA9IHN0cmNocih1c2VyLCAnOicpKSAhPSBOVUxMKQorIAkJKnN0 eWxlKysgPSAwOworIAorQEAgLTI5NSw2ICszMDMsOSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0 KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKKyAJCWF1dGhjdHh0LT51 c2VyID0geHN0cmR1cCh1c2VyKTsKKyAJCWF1dGhjdHh0LT5zZXJ2aWNlID0geHN0cmR1cChzZXJ2 aWNlKTsKKyAJCWF1dGhjdHh0LT5zdHlsZSA9IHN0eWxlID8geHN0cmR1cChzdHlsZSkgOiBOVUxM OworKyNpZmRlZiBXSVRIX1NFTElOVVgKKysJCWF1dGhjdHh0LT5yb2xlID0gcm9sZSA/IHhzdHJk dXAocm9sZSkgOiBOVUxMOworKyNlbmRpZgorIAkJaWYgKGF1dGhjdHh0LT5wdyAmJiBzdHJjbXAo c2VydmljZSwgInNzaC1jb25uZWN0aW9uIik9PTApIHsKKyAJCQlhdXRoY3R4dC0+dmFsaWQgPSAx OworIAkJCWRlYnVnMl9mKCJzZXR0aW5nIHVwIGF1dGhjdHh0IGZvciAlcyIsIHVzZXIpOworQEAg LTMxNCw2ICszMjUsOSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBlLCB1aW50MzJf dCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKKyAJCSAgICBhdXRoY3R4dC0+dmFsaWQgPyAiYXV0aGVu dGljYXRpbmcgIiA6ICJpbnZhbGlkICIsIHVzZXIpOworIAkJc2V0cHJvY3RpdGxlKCIlcyBbbmV0 XSIsIGF1dGhjdHh0LT52YWxpZCA/IHVzZXIgOiAidW5rbm93biIpOworIAkJbW1faW5mb3JtX2F1 dGhzZXJ2KHNlcnZpY2UsIHN0eWxlKTsKKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrICAgICAgICAg CW1tX2luZm9ybV9hdXRocm9sZShyb2xlKTsKKysjZW5kaWYKKyAJCXVzZXJhdXRoX2Jhbm5lcihz c2gpOworIAkJaWYgKChyID0ga2V4X3NlcnZlcl91cGRhdGVfZXh0X2luZm8oc3NoKSkgIT0gMCkK KyAJCQlmYXRhbF9mcihyLCAia2V4X3NlcnZlcl91cGRhdGVfZXh0X2luZm8gZmFpbGVkIik7Citk aWZmIC0tZ2l0IGEvbWlzYy5jIGIvbWlzYy5jCitpbmRleCBlZDNlOWQzMTQuLmU5NmZhOGQ2MSAx MDA2NDQKKy0tLSBhL21pc2MuYworKysrIGIvbWlzYy5jCitAQCAtODY5LDYgKzg2OSw3IEBAIGNo YXIgKgorIGNvbG9uKGNoYXIgKmNwKQorIHsKKyAJaW50IGZsYWcgPSAwOworKwlpbnQgc3RhcnQg PSAxOworIAorIAlpZiAoKmNwID09ICc6JykJCS8qIExlYWRpbmcgY29sb24gaXMgcGFydCBvZiBm aWxlIG5hbWUuICovCisgCQlyZXR1cm4gTlVMTDsKK0BAIC04ODQsNiArODg1LDEzIEBAIGNvbG9u KGNoYXIgKmNwKQorIAkJCXJldHVybiAoY3ApOworIAkJaWYgKCpjcCA9PSAnLycpCisgCQkJcmV0 dXJuIE5VTEw7CisrCQlpZiAoc3RhcnQpIHsKKysJCS8qIFNsYXNoIG9uIGJlZ2lubmluZyBvciBh ZnRlciBkb3RzIG9ubHkgZGVub3RlcyBmaWxlIG5hbWUuICovCisrCQkJaWYgKCpjcCA9PSAnLycp CisrCQkJCXJldHVybiAoMCk7CisrCQkJaWYgKCpjcCAhPSAnLicpCisrCQkJCXN0YXJ0ID0gMDsK KysJCX0KKyAJfQorIAlyZXR1cm4gTlVMTDsKKyB9CitAQCAtMjgyOCw3ICsyODM2LDggQEAgc3Rk ZmRfZGV2bnVsbChpbnQgZG9fc3RkaW4sIGludCBkb19zdGRvdXQsIGludCBkb19zdGRlcnIpCisg cGlkX3QKKyBzdWJwcm9jZXNzKGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqY29tbWFuZCwK KyAgICAgaW50IGFjLCBjaGFyICoqYXYsIEZJTEUgKipjaGlsZCwgdV9pbnQgZmxhZ3MsCistICAg IHN0cnVjdCBwYXNzd2QgKnB3LCBwcml2ZHJvcF9mbiAqZHJvcF9wcml2cywgcHJpdnJlc3RvcmVf Zm4gKnJlc3RvcmVfcHJpdnMpCisrICAgIHN0cnVjdCBwYXNzd2QgKnB3LCBwcml2ZHJvcF9mbiAq ZHJvcF9wcml2cywKKysgICAgcHJpdnJlc3RvcmVfZm4gKnJlc3RvcmVfcHJpdnMsIGludCBpbmV0 ZCwgdm9pZCAqdGhlX2F1dGhjdHh0KQorIHsKKyAJRklMRSAqZiA9IE5VTEw7CisgCXN0cnVjdCBz dGF0IHN0OworQEAgLTI5NjEsNiArMjk3MCwxMyBAQCBzdWJwcm9jZXNzKGNvbnN0IGNoYXIgKnRh ZywgY29uc3QgY2hhciAqY29tbWFuZCwKKyAJCQllcnJvcigiJXM6IGR1cDI6ICVzIiwgdGFnLCBz dHJlcnJvcihlcnJubykpOworIAkJCV9leGl0KDEpOworIAkJfQorKyNpZmRlZiBXSVRIX1NFTElO VVgKKysJCWlmIChzc2hkX3NlbGludXhfc2V0dXBfZW52X3ZhcmlhYmxlcyhpbmV0ZCwgdGhlX2F1 dGhjdHh0KSA8IDApIHsKKysJCQllcnJvciAoImZhaWxlZCB0byBjb3B5IGVudmlyb25tZW50OiAg JXMiLAorKwkJCSAgICBzdHJlcnJvcihlcnJubykpOworKwkJCV9leGl0KDEyNyk7CisrCQl9Cisr I2VuZGlmCisgCQlpZiAoZW52ICE9IE5VTEwpCisgCQkJZXhlY3ZlKGF2WzBdLCBhdiwgZW52KTsK KyAJCWVsc2UKK2RpZmYgLS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9yLmMKK2luZGV4IDlkNjY3 MmJiNi4uMWU0MWRmYTUzIDEwMDY0NAorLS0tIGEvbW9uaXRvci5jCisrKysgYi9tb25pdG9yLmMK K0BAIC0xMTEsNiArMTExLDkgQEAgaW50IG1tX2Fuc3dlcl9zaWduKHN0cnVjdCBzc2ggKiwgaW50 LCBzdHJ1Y3Qgc3NoYnVmICopOworIGludCBtbV9hbnN3ZXJfcHduYW1hbGxvdyhzdHJ1Y3Qgc3No ICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKyBpbnQgbW1fYW5zd2VyX2F1dGgyX3JlYWRfYmFu bmVyKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOworIGludCBtbV9hbnN3ZXJf YXV0aHNlcnYoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisrI2lmZGVmIFdJ VEhfU0VMSU5VWAorK2ludCBtbV9hbnN3ZXJfYXV0aHJvbGUoc3RydWN0IHNzaCAqLCBpbnQsIHN0 cnVjdCBzc2hidWYgKik7CisrI2VuZGlmCisgaW50IG1tX2Fuc3dlcl9hdXRocGFzc3dvcmQoc3Ry dWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisgaW50IG1tX2Fuc3dlcl9ic2RhdXRo cXVlcnkoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisgaW50IG1tX2Fuc3dl cl9ic2RhdXRocmVzcG9uZChzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKK0BA IC0xODgsNiArMTkxLDkgQEAgc3RydWN0IG1vbl90YWJsZSBtb25fZGlzcGF0Y2hfcHJvdG8yMFtd ID0geworICAgICB7TU9OSVRPUl9SRVFfU0lHTiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zaWdufSwK KyAgICAge01PTklUT1JfUkVRX1BXTkFNLCBNT05fT05DRSwgbW1fYW5zd2VyX3B3bmFtYWxsb3d9 LAorICAgICB7TU9OSVRPUl9SRVFfQVVUSFNFUlYsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfYXV0aHNl cnZ9LAorKyNpZmRlZiBXSVRIX1NFTElOVVgKKysgICAge01PTklUT1JfUkVRX0FVVEhST0xFLCBN T05fT05DRSwgbW1fYW5zd2VyX2F1dGhyb2xlfSwKKysjZW5kaWYKKyAgICAge01PTklUT1JfUkVR X0FVVEgyX1JFQURfQkFOTkVSLCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGgyX3JlYWRfYmFubmVy fSwKKyAgICAge01PTklUT1JfUkVRX0FVVEhQQVNTV09SRCwgTU9OX0FVVEgsIG1tX2Fuc3dlcl9h dXRocGFzc3dvcmR9LAorICNpZmRlZiBVU0VfUEFNCitAQCAtOTQ2LDYgKzk1Miw5IEBAIG1tX2Fu c3dlcl9wd25hbWFsbG93KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYg Km0pCisgCisgCS8qIEFsbG93IHNlcnZpY2Uvc3R5bGUgaW5mb3JtYXRpb24gb24gdGhlIGF1dGgg Y29udGV4dCAqLworIAltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0FV VEhTRVJWLCAxKTsKKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrCW1vbml0b3JfcGVybWl0KG1vbl9k aXNwYXRjaCwgTU9OSVRPUl9SRVFfQVVUSFJPTEUsIDEpOworKyNlbmRpZgorIAltb25pdG9yX3Bl cm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0FVVEgyX1JFQURfQkFOTkVSLCAxKTsKKyAK KyAjaWZkZWYgVVNFX1BBTQorQEAgLTEwMjAsNiArMTAyOSwyNiBAQCBrZXlfYmFzZV90eXBlX21h dGNoKGNvbnN0IGNoYXIgKm1ldGhvZCwgY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAorIAlyZXR1 cm4gZm91bmQ7CisgfQorIAorKyNpZmRlZiBXSVRIX1NFTElOVVgKKytpbnQKKyttbV9hbnN3ZXJf YXV0aHJvbGUoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKKyt7 CisrCWludCByOworKwltb25pdG9yX3Blcm1pdF9hdXRoZW50aWNhdGlvbnMoMSk7CisrCisrCWlm ICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhtLCAmYXV0aGN0eHQtPnJvbGUsIE5VTEwpKSAhPSAw KQorKwkJZmF0YWxfZigiYnVmZmVyIGVycm9yOiAlcyIsIHNzaF9lcnIocikpOworKwlkZWJ1ZzNf Zigicm9sZT0lcyIsIGF1dGhjdHh0LT5yb2xlKTsKKysKKysJaWYgKHN0cmxlbihhdXRoY3R4dC0+ cm9sZSkgPT0gMCkgeworKwkJZnJlZShhdXRoY3R4dC0+cm9sZSk7CisrCQlhdXRoY3R4dC0+cm9s ZSA9IE5VTEw7CisrCX0KKysKKysJcmV0dXJuICgwKTsKKyt9CisrI2VuZGlmCisrCisgaW50Cisg bW1fYW5zd2VyX2F1dGhwYXNzd29yZChzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qg c3NoYnVmICptKQorIHsKK0BAIC0xMzkyLDcgKzE0MjEsNyBAQCBtb25pdG9yX3ZhbGlkX3VzZXJi bG9iKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgdV9jaGFyICpkYXRhLCB1X2ludCBkYXRhbGVuKQor IAlzdHJ1Y3Qgc3NoYnVmICpiOworIAlzdHJ1Y3Qgc3Noa2V5ICpob3N0a2V5ID0gTlVMTDsKKyAJ Y29uc3QgdV9jaGFyICpwOworLQljaGFyICp1c2Vyc3R5bGUsICpjcDsKKysJY2hhciAqdXNlcnN0 eWxlLCAqcywgKmNwOworIAlzaXplX3QgbGVuOworIAl1X2NoYXIgdHlwZTsKKyAJaW50IGhvc3Ri b3VuZCA9IDAsIHIsIGZhaWwgPSAwOworQEAgLTE0MjMsNiArMTQ1Miw4IEBAIG1vbml0b3JfdmFs aWRfdXNlcmJsb2Ioc3RydWN0IHNzaCAqc3NoLCBjb25zdCB1X2NoYXIgKmRhdGEsIHVfaW50IGRh dGFsZW4pCisgCQlmYWlsKys7CisgCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhiLCAmY3As IE5VTEwpKSAhPSAwKQorIAkJZmF0YWxfZnIociwgInBhcnNlIHVzZXJzdHlsZSIpOworKwlpZiAo KHMgPSBzdHJjaHIoY3AsICcvJykpICE9IE5VTEwpCisrCQkqcyA9ICdcMCc7CisgCXhhc3ByaW50 ZigmdXNlcnN0eWxlLCAiJXMlcyVzIiwgYXV0aGN0eHQtPnVzZXIsCisgCSAgICBhdXRoY3R4dC0+ c3R5bGUgPyAiOiIgOiAiIiwKKyAJICAgIGF1dGhjdHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHls ZSA6ICIiKTsKK0BAIC0xNDczLDcgKzE1MDQsNyBAQCBtb25pdG9yX3ZhbGlkX2hvc3RiYXNlZGJs b2IoY29uc3QgdV9jaGFyICpkYXRhLCB1X2ludCBkYXRhbGVuLAorIHsKKyAJc3RydWN0IHNzaGJ1 ZiAqYjsKKyAJY29uc3QgdV9jaGFyICpwOworLQljaGFyICpjcCwgKnVzZXJzdHlsZTsKKysJY2hh ciAqY3AsICpzLCAqdXNlcnN0eWxlOworIAlzaXplX3QgbGVuOworIAlpbnQgciwgZmFpbCA9IDA7 CisgCXVfY2hhciB0eXBlOworQEAgLTE0OTQsNiArMTUyNSw4IEBAIG1vbml0b3JfdmFsaWRfaG9z dGJhc2VkYmxvYihjb25zdCB1X2NoYXIgKmRhdGEsIHVfaW50IGRhdGFsZW4sCisgCQlmYWlsKys7 CisgCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhiLCAmY3AsIE5VTEwpKSAhPSAwKQorIAkJ ZmF0YWxfZnIociwgInBhcnNlIHVzZXJzdHlsZSIpOworKwlpZiAoKHMgPSBzdHJjaHIoY3AsICcv JykpICE9IE5VTEwpCisrCQkqcyA9ICdcMCc7CisgCXhhc3ByaW50ZigmdXNlcnN0eWxlLCAiJXMl cyVzIiwgYXV0aGN0eHQtPnVzZXIsCisgCSAgICBhdXRoY3R4dC0+c3R5bGUgPyAiOiIgOiAiIiwK KyAJICAgIGF1dGhjdHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHlsZSA6ICIiKTsKK2RpZmYgLS1n aXQgYS9tb25pdG9yLmggYi9tb25pdG9yLmgKK2luZGV4IGZlMGIwMGIyZS4uMWI0NmU3OTRlIDEw MDY0NAorLS0tIGEvbW9uaXRvci5oCisrKysgYi9tb25pdG9yLmgKK0BAIC01Nyw2ICs1NywxMCBA QCBlbnVtIG1vbml0b3JfcmVxdHlwZSB7CisgCU1PTklUT1JfUkVRX1RFUk0gPSA1MCwKKyAJTU9O SVRPUl9SRVFfU1RBVEUgPSA1MSwgTU9OSVRPUl9BTlNfU1RBVEUgPSA1MiwKKyAKKysjaWZkZWYg V0lUSF9TRUxJTlVYCisrCU1PTklUT1JfUkVRX0FVVEhST0xFID0gODAsCisrI2VuZGlmCisrCisg CU1PTklUT1JfUkVRX1BBTV9TVEFSVCA9IDEwMCwKKyAJTU9OSVRPUl9SRVFfUEFNX0FDQ09VTlQg PSAxMDIsIE1PTklUT1JfQU5TX1BBTV9BQ0NPVU5UID0gMTAzLAorIAlNT05JVE9SX1JFUV9QQU1f SU5JVF9DVFggPSAxMDQsIE1PTklUT1JfQU5TX1BBTV9JTklUX0NUWCA9IDEwNSwKK2RpZmYgLS1n aXQgYS9tb25pdG9yX3dyYXAuYyBiL21vbml0b3Jfd3JhcC5jCitpbmRleCA4MTU5NmE0Y2MuLmYz YzM0MWJjNyAxMDA2NDQKKy0tLSBhL21vbml0b3Jfd3JhcC5jCisrKysgYi9tb25pdG9yX3dyYXAu YworQEAgLTQ3Myw2ICs0NzMsMjcgQEAgbW1faW5mb3JtX2F1dGhzZXJ2KGNoYXIgKnNlcnZpY2Us IGNoYXIgKnN0eWxlKQorIAlzc2hidWZfZnJlZShtKTsKKyB9CisgCisrLyogSW5mb3JtIHRoZSBw cml2aWxlZ2VkIHByb2Nlc3MgYWJvdXQgcm9sZSAqLworKworKyNpZmRlZiBXSVRIX1NFTElOVVgK Kyt2b2lkCisrbW1faW5mb3JtX2F1dGhyb2xlKGNoYXIgKnJvbGUpCisreworKwlpbnQgcjsKKysJ c3RydWN0IHNzaGJ1ZiAqbTsKKysKKysJZGVidWczX2YoImVudGVyaW5nIik7CisrCisrCWlmICgo bSA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKysJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVk Iik7CisrCWlmICgociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCByb2xlID8gcm9sZSA6ICIiKSkg IT0gMCkKKysJCWZhdGFsX2YoImJ1ZmZlciBlcnJvcjogJXMiLCBzc2hfZXJyKHIpKTsKKysJbW1f cmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9SRVFfQVVUSFJPTEUsIG0p OworKworKwlzc2hidWZfZnJlZShtKTsKKyt9CisrI2VuZGlmCisrCisgLyogRG8gdGhlIHBhc3N3 b3JkIGF1dGhlbnRpY2F0aW9uICovCisgaW50CisgbW1fYXV0aF9wYXNzd29yZChzdHJ1Y3Qgc3No ICpzc2gsIGNoYXIgKnBhc3N3b3JkKQorZGlmZiAtLWdpdCBhL21vbml0b3Jfd3JhcC5oIGIvbW9u aXRvcl93cmFwLmgKK2luZGV4IGMyZjdmOTdkOS4uM2UwOGRkZDc4IDEwMDY0NAorLS0tIGEvbW9u aXRvcl93cmFwLmgKKysrKyBiL21vbml0b3Jfd3JhcC5oCitAQCAtNTEsNiArNTEsOSBAQCBpbnQg bW1fc3Noa2V5X3NpZ24oc3RydWN0IHNzaCAqLCBzdHJ1Y3Qgc3Noa2V5ICosIHVfY2hhciAqKiwg c2l6ZV90ICosCisgICAgIGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqLAorICAgICBjb25zdCBjaGFyICosIHVfaW50IGNvbXBhdCk7Cisgdm9pZCBtbV9p bmZvcm1fYXV0aHNlcnYoY2hhciAqLCBjaGFyICopOworKyNpZmRlZiBXSVRIX1NFTElOVVgKKyt2 b2lkIG1tX2luZm9ybV9hdXRocm9sZShjaGFyICopOworKyNlbmRpZgorIHN0cnVjdCBwYXNzd2Qg Km1tX2dldHB3bmFtYWxsb3coc3RydWN0IHNzaCAqLCBjb25zdCBjaGFyICopOworIGNoYXIgKm1t X2F1dGgyX3JlYWRfYmFubmVyKHZvaWQpOworIGludCBtbV9hdXRoX3Bhc3N3b3JkKHN0cnVjdCBz c2ggKiwgY2hhciAqKTsKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDAxLW9wZW5zc2gt Ny44cDEtcm9sZS1tbHMucGF0Y2ggYi8wMDAxLW9wZW5zc2gtNy44cDEtcm9sZS1tbHMucGF0Y2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNzdlOGMuLjAwMDAwMDAKLS0tIGEvMDAw MS1vcGVuc3NoLTcuOHAxLXJvbGUtbWxzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsOTEyICsw LDAgQEAKLUZyb20gYjY4NzVjZWFjYTRiZTllMGRlMGQ2ZDI2MGQ4ZmNmZjE3NzJmNWZiNSBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdt YWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6 IFtQQVRDSCAwMS81M10gb3BlbnNzaC03LjhwMS1yb2xlLW1scwotCi0tLS0KLSBhdXRoLXBhbS5j ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQotIGF1dGgtcGFtLmggICAgICAgICAgICAg ICAgICAgICAgIHwgICAyICstCi0gYXV0aC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDMgKwotIGF1dGgyLWdzcy5jICAgICAgICAgICAgICAgICAgICAgIHwgIDExICstCi0gYXV0aDIt aG9zdGJhc2VkLmMgICAgICAgICAgICAgICAgfCAgIDkgKwotIGF1dGgyLXB1YmtleS5jICAgICAg ICAgICAgICAgICAgIHwgIDExICstCi0gYXV0aDIuYyAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMTQgKysKLSBtaXNjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArCi0gbW9u aXRvci5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKystCi0gbW9uaXRvci5oICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDQgKwotIG1vbml0b3Jfd3JhcC5jICAgICAgICAgICAgICAg ICAgIHwgIDIxICsrCi0gbW9uaXRvcl93cmFwLmggICAgICAgICAgICAgICAgICAgfCAgIDMgKwot IG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluICAgICAgIHwgICAzICstCi0gb3BlbmJzZC1jb21w YXQvcG9ydC1saW51eC1zc2hkLmMgfCA0MjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwotIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYyAgICAgIHwgIDM3ICstLQotIG9wZW5ic2Qt Y29tcGF0L3BvcnQtbGludXguaCAgICAgIHwgICAzICstCi0gcGxhdGZvcm0uYyAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKy0KLSBzc2hkLXNlc3Npb24uYyAgICAgICAgICAgICAgICAgICB8 ICAgMyArCi0gMTggZmlsZXMgY2hhbmdlZCwgNTUxIGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9u cygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQu YwotCi1kaWZmIC0tZ2l0IGEvYXV0aC1wYW0uYyBiL2F1dGgtcGFtLmMKLWluZGV4IDU1OTFmMDk0 ZS4uNzBiY2FlODNhIDEwMDY0NAotLS0tIGEvYXV0aC1wYW0uYwotKysrIGIvYXV0aC1wYW0uYwot QEAgLTEyNjEsNyArMTI2MSw3IEBAIGlzX3BhbV9zZXNzaW9uX29wZW4odm9pZCkKLSAgKiBkdXJp bmcgdGhlIHNzaCBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLgotICAqLwotIGludAotLWRvX3BhbV9w dXRlbnYoY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCi0rZG9fcGFtX3B1dGVudihjaGFyICpuYW1l LCBjb25zdCBjaGFyICp2YWx1ZSkKLSB7Ci0gCWludCByZXQgPSAxOwotIAljaGFyICpjb21wb3Vu ZDsKLWRpZmYgLS1naXQgYS9hdXRoLXBhbS5oIGIvYXV0aC1wYW0uaAotaW5kZXggOGQ4MDFjNjg5 Li45ZGQ3YWUwNzggMTAwNjQ0Ci0tLS0gYS9hdXRoLXBhbS5oCi0rKysgYi9hdXRoLXBhbS5oCi1A QCAtMzMsNyArMzMsNyBAQCB1X2ludCBkb19wYW1fYWNjb3VudCh2b2lkKTsKLSB2b2lkIGRvX3Bh bV9zZXNzaW9uKHN0cnVjdCBzc2ggKik7Ci0gdm9pZCBkb19wYW1fc2V0Y3JlZCh2b2lkKTsKLSB2 b2lkIGRvX3BhbV9jaGF1dGh0b2sodm9pZCk7Ci0taW50IGRvX3BhbV9wdXRlbnYoY2hhciAqLCBj aGFyICopOwotK2ludCBkb19wYW1fcHV0ZW52KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLSBjaGFy ICoqIGZldGNoX3BhbV9lbnZpcm9ubWVudCh2b2lkKTsKLSBjaGFyICoqIGZldGNoX3BhbV9jaGls ZF9lbnZpcm9ubWVudCh2b2lkKTsKLSB2b2lkIGZyZWVfcGFtX2Vudmlyb25tZW50KGNoYXIgKiop OwotZGlmZiAtLWdpdCBhL2F1dGguaCBiL2F1dGguaAotaW5kZXggOThiYjIzZDRjLi44M2QwN2Fl OGIgMTAwNjQ0Ci0tLS0gYS9hdXRoLmgKLSsrKyBiL2F1dGguaAotQEAgLTY1LDYgKzY1LDkgQEAg c3RydWN0IEF1dGhjdHh0IHsKLSAJY2hhcgkJKnNlcnZpY2U7Ci0gCXN0cnVjdCBwYXNzd2QJKnB3 OwkJLyogc2V0IGlmICd2YWxpZCcgKi8KLSAJY2hhcgkJKnN0eWxlOwotKyNpZmRlZiBXSVRIX1NF TElOVVgKLSsJY2hhcgkJKnJvbGU7Ci0rI2VuZGlmCi0gCi0gCS8qIE1ldGhvZCBsaXN0cyBmb3Ig bXVsdGlwbGUgYXV0aGVudGljYXRpb24gKi8KLSAJY2hhcgkJKiphdXRoX21ldGhvZHM7CS8qIG1v ZGlmaWVkIGZyb20gc2VydmVyIGNvbmZpZyAqLwotZGlmZiAtLWdpdCBhL2F1dGgyLWdzcy5jIGIv YXV0aDItZ3NzLmMKLWluZGV4IDc1ZWI0ZTNhMy4uZjc4OThhYjNlIDEwMDY0NAotLS0tIGEvYXV0 aDItZ3NzLmMKLSsrKyBiL2F1dGgyLWdzcy5jCi1AQCAtMjg0LDYgKzI4NCw3IEBAIGlucHV0X2dz c2FwaV9taWMoaW50IHR5cGUsIHVfaW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCUF1 dGhjdHh0ICphdXRoY3R4dCA9IHNzaC0+YXV0aGN0eHQ7Ci0gCUdzc2N0eHQgKmdzc2N0eHQ7Ci0g CWludCByLCBhdXRoZW50aWNhdGVkID0gMDsKLSsJY2hhciAqbWljdXNlcjsKLSAJc3RydWN0IHNz aGJ1ZiAqYjsKLSAJZ3NzX2J1ZmZlcl9kZXNjIG1pYywgZ3NzYnVmOwotIAl1X2NoYXIgKnA7Ci1A QCAtMzAwLDcgKzMwMSwxMyBAQCBpbnB1dF9nc3NhcGlfbWljKGludCB0eXBlLCB1X2ludDMyX3Qg cGxlbiwgc3RydWN0IHNzaCAqc3NoKQotIAkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsK LSAJbWljLnZhbHVlID0gcDsKLSAJbWljLmxlbmd0aCA9IGxlbjsKLS0Jc3NoX2dzc2FwaV9idWls ZG1pYyhiLCBhdXRoY3R4dC0+dXNlciwgYXV0aGN0eHQtPnNlcnZpY2UsCi0rI2lmZGVmIFdJVEhf U0VMSU5VWAotKwlpZiAoYXV0aGN0eHQtPnJvbGUgJiYgYXV0aGN0eHQtPnJvbGVbMF0gIT0gMCkK LSsJCXhhc3ByaW50ZigmbWljdXNlciwgIiVzLyVzIiwgYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0 LT5yb2xlKTsKLSsJZWxzZQotKyNlbmRpZgotKwkJbWljdXNlciA9IGF1dGhjdHh0LT51c2VyOwot Kwlzc2hfZ3NzYXBpX2J1aWxkbWljKGIsIG1pY3VzZXIsIGF1dGhjdHh0LT5zZXJ2aWNlLAotIAkg ICAgImdzc2FwaS13aXRoLW1pYyIsIHNzaC0+a2V4LT5zZXNzaW9uX2lkKTsKLSAKLSAJaWYgKChn c3NidWYudmFsdWUgPSBzc2hidWZfbXV0YWJsZV9wdHIoYikpID09IE5VTEwpCi1AQCAtMzEzLDYg KzMyMCw4IEBAIGlucHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVfaW50MzJfdCBwbGVuLCBzdHJ1 Y3Qgc3NoICpzc2gpCi0gCQlsb2dpdCgiR1NTQVBJIE1JQyBjaGVjayBmYWlsZWQiKTsKLSAKLSAJ c3NoYnVmX2ZyZWUoYik7Ci0rCWlmIChtaWN1c2VyICE9IGF1dGhjdHh0LT51c2VyKQotKwkJZnJl ZShtaWN1c2VyKTsKLSAJZnJlZShtaWMudmFsdWUpOwotIAotIAlhdXRoY3R4dC0+cG9zdHBvbmVk ID0gMDsKLWRpZmYgLS1naXQgYS9hdXRoMi1ob3N0YmFzZWQuYyBiL2F1dGgyLWhvc3RiYXNlZC5j Ci1pbmRleCA5ZDhiODYwZWIuLjk3NjQ4NGZjNSAxMDA2NDQKLS0tLSBhL2F1dGgyLWhvc3RiYXNl ZC5jCi0rKysgYi9hdXRoMi1ob3N0YmFzZWQuYwotQEAgLTEyOSw3ICsxMjksMTYgQEAgdXNlcmF1 dGhfaG9zdGJhc2VkKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQotIAkvKiBy ZWNvbnN0cnVjdCBwYWNrZXQgKi8KLSAJaWYgKChyID0gc3NoYnVmX3B1dF9zdHJpbmdiKGIsIHNz aC0+a2V4LT5zZXNzaW9uX2lkKSkgIT0gMCB8fAotIAkgICAgKHIgPSBzc2hidWZfcHV0X3U4KGIs IFNTSDJfTVNHX1VTRVJBVVRIX1JFUVVFU1QpKSAhPSAwIHx8Ci0rI2lmZGVmIFdJVEhfU0VMSU5V WAotKwkgICAgKGF1dGhjdHh0LT5yb2xlCi0rCSAgICA/ICggKHIgPSBzc2hidWZfcHV0X3UzMihi LCBzdHJsZW4oYXV0aGN0eHQtPnVzZXIpK3N0cmxlbihhdXRoY3R4dC0+cm9sZSkrMSkpICE9IDAg fHwKLSsJICAgICAgICAociA9IHNzaGJ1Zl9wdXQoYiwgYXV0aGN0eHQtPnVzZXIsIHN0cmxlbihh dXRoY3R4dC0+dXNlcikpKSAhPSAwIHx8Ci0rCSAgICAgICAgKHIgPSBzc2hidWZfcHV0X3U4KGIs ICcvJykgIT0gMCkgfHwKLSsJICAgICAgICAociA9IHNzaGJ1Zl9wdXQoYiwgYXV0aGN0eHQtPnJv bGUsIHN0cmxlbihhdXRoY3R4dC0+cm9sZSkpKSAhPSAwKQotKwkgICAgOiAociA9IHNzaGJ1Zl9w dXRfY3N0cmluZyhiLCBhdXRoY3R4dC0+dXNlcikpICE9IDApIHx8Ci0rI2Vsc2UKLSAJICAgIChy ID0gc3NoYnVmX3B1dF9jc3RyaW5nKGIsIGF1dGhjdHh0LT51c2VyKSkgIT0gMCB8fAotKyNlbmRp ZgotIAkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgYXV0aGN0eHQtPnNlcnZpY2UpKSAh PSAwIHx8Ci0gCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCBtZXRob2QpKSAhPSAwIHx8 Ci0gCSAgICAociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKGIsIHBrYWxnLCBhbGVuKSkgIT0gMCB8fAot ZGlmZiAtLWdpdCBhL2F1dGgyLXB1YmtleS5jIGIvYXV0aDItcHVia2V5LmMKLWluZGV4IDE1YWQz MDAwYy4uYzMyNmE2OWJhIDEwMDY0NAotLS0tIGEvYXV0aDItcHVia2V5LmMKLSsrKyBiL2F1dGgy LXB1YmtleS5jCi1AQCAtMjA0LDkgKzIwNCwxNiBAQCB1c2VyYXV0aF9wdWJrZXkoc3RydWN0IHNz aCAqc3NoLCBjb25zdCBjaGFyICptZXRob2QpCi0gCQkJZ290byBkb25lOwotIAkJfQotIAkJLyog cmVjb25zdHJ1Y3QgcGFja2V0ICovCi0tCQl4YXNwcmludGYoJnVzZXJzdHlsZSwgIiVzJXMlcyIs IGF1dGhjdHh0LT51c2VyLAotKwkJeGFzcHJpbnRmKCZ1c2Vyc3R5bGUsICIlcyVzJXMlcyVzIiwg YXV0aGN0eHQtPnVzZXIsCi0gCQkgICAgYXV0aGN0eHQtPnN0eWxlID8gIjoiIDogIiIsCi0tCQkg ICAgYXV0aGN0eHQtPnN0eWxlID8gYXV0aGN0eHQtPnN0eWxlIDogIiIpOwotKwkJICAgIGF1dGhj dHh0LT5zdHlsZSA/IGF1dGhjdHh0LT5zdHlsZSA6ICIiLAotKyNpZmRlZiBXSVRIX1NFTElOVVgK LSsJCSAgICBhdXRoY3R4dC0+cm9sZSA/ICIvIiA6ICIiLAotKwkJICAgIGF1dGhjdHh0LT5yb2xl ID8gYXV0aGN0eHQtPnJvbGUgOiAiIgotKyNlbHNlCi0rCQkgICAgIiIsICIiCi0rI2VuZGlmCi0r CQkgICAgKTsKLSAJCWlmICgociA9IHNzaGJ1Zl9wdXRfdTgoYiwgU1NIMl9NU0dfVVNFUkFVVEhf UkVRVUVTVCkpICE9IDAgfHwKLSAJCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhiLCB1c2Vy c3R5bGUpKSAhPSAwIHx8Ci0gCQkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoYiwgYXV0aGN0 eHQtPnNlcnZpY2UpKSAhPSAwIHx8Ci1kaWZmIC0tZ2l0IGEvYXV0aDIuYyBiL2F1dGgyLmMKLWlu ZGV4IGI5YmI0NmY1OS4uMTM0NWQzMjU3IDEwMDY0NAotLS0tIGEvYXV0aDIuYwotKysrIGIvYXV0 aDIuYwotQEAgLTI3MSw2ICsyNzEsOSBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGludCB0eXBl LCB1X2ludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCUF1dGhjdHh0ICphdXRoY3R4dCA9 IHNzaC0+YXV0aGN0eHQ7Ci0gCUF1dGhtZXRob2QgKm0gPSBOVUxMOwotIAljaGFyICp1c2VyID0g TlVMTCwgKnNlcnZpY2UgPSBOVUxMLCAqbWV0aG9kID0gTlVMTCwgKnN0eWxlID0gTlVMTDsKLSsj aWZkZWYgV0lUSF9TRUxJTlVYCi0rCWNoYXIgKnJvbGUgPSBOVUxMOwotKyNlbmRpZgotIAlpbnQg ciwgYXV0aGVudGljYXRlZCA9IDA7Ci0gCWRvdWJsZSB0c3RhcnQgPSBtb25vdGltZV9kb3VibGUo KTsKLSAKLUBAIC0yODQsNiArMjg3LDExIEBAIGlucHV0X3VzZXJhdXRoX3JlcXVlc3QoaW50IHR5 cGUsIHVfaW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKLSAJZGVidWcoInVzZXJhdXRoLXJl cXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2QgJXMiLCB1c2VyLCBzZXJ2aWNlLCBt ZXRob2QpOwotIAlkZWJ1ZygiYXR0ZW1wdCAlZCBmYWlsdXJlcyAlZCIsIGF1dGhjdHh0LT5hdHRl bXB0LCBhdXRoY3R4dC0+ZmFpbHVyZXMpOwotIAotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsJaWYg KChyb2xlID0gc3RyY2hyKHVzZXIsICcvJykpICE9IE5VTEwpCi0rCQkqcm9sZSsrID0gMDsKLSsj ZW5kaWYKLSsKLSAJaWYgKChzdHlsZSA9IHN0cmNocih1c2VyLCAnOicpKSAhPSBOVUxMKQotIAkJ KnN0eWxlKysgPSAwOwotIAotQEAgLTMxMyw3ICszMjEsMTMgQEAgaW5wdXRfdXNlcmF1dGhfcmVx dWVzdChpbnQgdHlwZSwgdV9pbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQotIAkJc2V0cHJv Y3RpdGxlKCIlcyBbbmV0XSIsIGF1dGhjdHh0LT52YWxpZCA/IHVzZXIgOiAidW5rbm93biIpOwot IAkJYXV0aGN0eHQtPnNlcnZpY2UgPSB4c3RyZHVwKHNlcnZpY2UpOwotIAkJYXV0aGN0eHQtPnN0 eWxlID0gc3R5bGUgPyB4c3RyZHVwKHN0eWxlKSA6IE5VTEw7Ci0rI2lmZGVmIFdJVEhfU0VMSU5V WAotKwkJYXV0aGN0eHQtPnJvbGUgPSByb2xlID8geHN0cmR1cChyb2xlKSA6IE5VTEw7Ci0rI2Vu ZGlmCi0gCQltbV9pbmZvcm1fYXV0aHNlcnYoc2VydmljZSwgc3R5bGUpOwotKyNpZmRlZiBXSVRI X1NFTElOVVgKLSsgICAgICAgICAJbW1faW5mb3JtX2F1dGhyb2xlKHJvbGUpOwotKyNlbmRpZgot IAkJdXNlcmF1dGhfYmFubmVyKHNzaCk7Ci0gCQlpZiAoKHIgPSBrZXhfc2VydmVyX3VwZGF0ZV9l eHRfaW5mbyhzc2gpKSAhPSAwKQotIAkJCWZhdGFsX2ZyKHIsICJrZXhfc2VydmVyX3VwZGF0ZV9l eHRfaW5mbyBmYWlsZWQiKTsKLWRpZmYgLS1naXQgYS9taXNjLmMgYi9taXNjLmMKLWluZGV4IGNl NzdlYzk0My4uNWJlZDM0NzM1IDEwMDY0NAotLS0tIGEvbWlzYy5jCi0rKysgYi9taXNjLmMKLUBA IC04MjIsNiArODIyLDcgQEAgY2hhciAqCi0gY29sb24oY2hhciAqY3ApCi0gewotIAlpbnQgZmxh ZyA9IDA7Ci0rCWludCBzdGFydCA9IDE7Ci0gCi0gCWlmICgqY3AgPT0gJzonKQkJLyogTGVhZGlu ZyBjb2xvbiBpcyBwYXJ0IG9mIGZpbGUgbmFtZS4gKi8KLSAJCXJldHVybiBOVUxMOwotQEAgLTgz Nyw2ICs4MzgsMTMgQEAgY29sb24oY2hhciAqY3ApCi0gCQkJcmV0dXJuIChjcCk7Ci0gCQlpZiAo KmNwID09ICcvJykKLSAJCQlyZXR1cm4gTlVMTDsKLSsJCWlmIChzdGFydCkgewotKwkJLyogU2xh c2ggb24gYmVnaW5uaW5nIG9yIGFmdGVyIGRvdHMgb25seSBkZW5vdGVzIGZpbGUgbmFtZS4gKi8K LSsJCQlpZiAoKmNwID09ICcvJykKLSsJCQkJcmV0dXJuICgwKTsKLSsJCQlpZiAoKmNwICE9ICcu JykKLSsJCQkJc3RhcnQgPSAwOwotKwkJfQotIAl9Ci0gCXJldHVybiBOVUxMOwotIH0KLWRpZmYg LS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9yLmMKLWluZGV4IGE5ZTg1NGJlYy4uODVkYzFiMWI3 IDEwMDY0NAotLS0tIGEvbW9uaXRvci5jCi0rKysgYi9tb25pdG9yLmMKLUBAIC0xMTAsNiArMTEw LDkgQEAgaW50IG1tX2Fuc3dlcl9zaWduKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVm ICopOwotIGludCBtbV9hbnN3ZXJfcHduYW1hbGxvdyhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0 IHNzaGJ1ZiAqKTsKLSBpbnQgbW1fYW5zd2VyX2F1dGgyX3JlYWRfYmFubmVyKHN0cnVjdCBzc2gg KiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3ZXJfYXV0aHNlcnYoc3RydWN0 IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0rI2lmZGVmIFdJVEhfU0VMSU5VWAotK2lu dCBtbV9hbnN3ZXJfYXV0aHJvbGUoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7 Ci0rI2VuZGlmCi0gaW50IG1tX2Fuc3dlcl9hdXRocGFzc3dvcmQoc3RydWN0IHNzaCAqLCBpbnQs IHN0cnVjdCBzc2hidWYgKik7Ci0gaW50IG1tX2Fuc3dlcl9ic2RhdXRocXVlcnkoc3RydWN0IHNz aCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7Ci0gaW50IG1tX2Fuc3dlcl9ic2RhdXRocmVzcG9u ZChzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKLUBAIC0xODQsNiArMTg3LDkg QEAgc3RydWN0IG1vbl90YWJsZSBtb25fZGlzcGF0Y2hfcHJvdG8yMFtdID0gewotICAgICB7TU9O SVRPUl9SRVFfU0lHTiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zaWdufSwKLSAgICAge01PTklUT1Jf UkVRX1BXTkFNLCBNT05fT05DRSwgbW1fYW5zd2VyX3B3bmFtYWxsb3d9LAotICAgICB7TU9OSVRP Ul9SRVFfQVVUSFNFUlYsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfYXV0aHNlcnZ9LAotKyNpZmRlZiBX SVRIX1NFTElOVVgKLSsgICAge01PTklUT1JfUkVRX0FVVEhST0xFLCBNT05fT05DRSwgbW1fYW5z d2VyX2F1dGhyb2xlfSwKLSsjZW5kaWYKLSAgICAge01PTklUT1JfUkVRX0FVVEgyX1JFQURfQkFO TkVSLCBNT05fT05DRSwgbW1fYW5zd2VyX2F1dGgyX3JlYWRfYmFubmVyfSwKLSAgICAge01PTklU T1JfUkVRX0FVVEhQQVNTV09SRCwgTU9OX0FVVEgsIG1tX2Fuc3dlcl9hdXRocGFzc3dvcmR9LAot ICNpZmRlZiBVU0VfUEFNCi1AQCAtOTE5LDYgKzkyNSw5IEBAIG1tX2Fuc3dlcl9wd25hbWFsbG93 KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCi0gCi0gCS8qIEFs bG93IHNlcnZpY2Uvc3R5bGUgaW5mb3JtYXRpb24gb24gdGhlIGF1dGggY29udGV4dCAqLwotIAlt b25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0FVVEhTRVJWLCAxKTsKLSsj aWZkZWYgV0lUSF9TRUxJTlVYCi0rCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRP Ul9SRVFfQVVUSFJPTEUsIDEpOwotKyNlbmRpZgotIAltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0 Y2gsIE1PTklUT1JfUkVRX0FVVEgyX1JFQURfQkFOTkVSLCAxKTsKLSAKLSAjaWZkZWYgVVNFX1BB TQotQEAgLTk5Myw2ICsxMDAyLDI2IEBAIGtleV9iYXNlX3R5cGVfbWF0Y2goY29uc3QgY2hhciAq bWV0aG9kLCBjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksCi0gCXJldHVybiBmb3VuZDsKLSB9Ci0g Ci0rI2lmZGVmIFdJVEhfU0VMSU5VWAotK2ludAotK21tX2Fuc3dlcl9hdXRocm9sZShzdHJ1Y3Qg c3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQotK3sKLSsJaW50IHI7Ci0rCW1v bml0b3JfcGVybWl0X2F1dGhlbnRpY2F0aW9ucygxKTsKLSsKLSsJaWYgKChyID0gc3NoYnVmX2dl dF9jc3RyaW5nKG0sICZhdXRoY3R4dC0+cm9sZSwgTlVMTCkpICE9IDApCi0rCQlmYXRhbF9mKCJi dWZmZXIgZXJyb3I6ICVzIiwgc3NoX2VycihyKSk7Ci0rCWRlYnVnM19mKCJyb2xlPSVzIiwgYXV0 aGN0eHQtPnJvbGUpOwotKwotKwlpZiAoc3RybGVuKGF1dGhjdHh0LT5yb2xlKSA9PSAwKSB7Ci0r CQlmcmVlKGF1dGhjdHh0LT5yb2xlKTsKLSsJCWF1dGhjdHh0LT5yb2xlID0gTlVMTDsKLSsJfQot KwotKwlyZXR1cm4gKDApOwotK30KLSsjZW5kaWYKLSsKLSBpbnQKLSBtbV9hbnN3ZXJfYXV0aHBh c3N3b3JkKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCi0gewot QEAgLTEzNjQsNyArMTM5Myw3IEBAIG1vbml0b3JfdmFsaWRfdXNlcmJsb2Ioc3RydWN0IHNzaCAq c3NoLCBjb25zdCB1X2NoYXIgKmRhdGEsIHVfaW50IGRhdGFsZW4pCi0gCXN0cnVjdCBzc2hidWYg KmI7Ci0gCXN0cnVjdCBzc2hrZXkgKmhvc3RrZXkgPSBOVUxMOwotIAljb25zdCB1X2NoYXIgKnA7 Ci0tCWNoYXIgKnVzZXJzdHlsZSwgKmNwOwotKwljaGFyICp1c2Vyc3R5bGUsICpzLCAqY3A7Ci0g CXNpemVfdCBsZW47Ci0gCXVfY2hhciB0eXBlOwotIAlpbnQgaG9zdGJvdW5kID0gMCwgciwgZmFp bCA9IDA7Ci1AQCAtMTM5NSw2ICsxNDI0LDggQEAgbW9uaXRvcl92YWxpZF91c2VyYmxvYihzdHJ1 Y3Qgc3NoICpzc2gsIGNvbnN0IHVfY2hhciAqZGF0YSwgdV9pbnQgZGF0YWxlbikKLSAJCWZhaWwr KzsKLSAJaWYgKChyID0gc3NoYnVmX2dldF9jc3RyaW5nKGIsICZjcCwgTlVMTCkpICE9IDApCi0g CQlmYXRhbF9mcihyLCAicGFyc2UgdXNlcnN0eWxlIik7Ci0rCWlmICgocyA9IHN0cmNocihjcCwg Jy8nKSkgIT0gTlVMTCkKLSsJCSpzID0gJ1wwJzsKLSAJeGFzcHJpbnRmKCZ1c2Vyc3R5bGUsICIl cyVzJXMiLCBhdXRoY3R4dC0+dXNlciwKLSAJICAgIGF1dGhjdHh0LT5zdHlsZSA/ICI6IiA6ICIi LAotIAkgICAgYXV0aGN0eHQtPnN0eWxlID8gYXV0aGN0eHQtPnN0eWxlIDogIiIpOwotQEAgLTE0 NDUsNyArMTQ3Niw3IEBAIG1vbml0b3JfdmFsaWRfaG9zdGJhc2VkYmxvYihjb25zdCB1X2NoYXIg KmRhdGEsIHVfaW50IGRhdGFsZW4sCi0gewotIAlzdHJ1Y3Qgc3NoYnVmICpiOwotIAljb25zdCB1 X2NoYXIgKnA7Ci0tCWNoYXIgKmNwLCAqdXNlcnN0eWxlOwotKwljaGFyICpjcCwgKnMsICp1c2Vy c3R5bGU7Ci0gCXNpemVfdCBsZW47Ci0gCWludCByLCBmYWlsID0gMDsKLSAJdV9jaGFyIHR5cGU7 Ci1AQCAtMTQ2Niw2ICsxNDk3LDggQEAgbW9uaXRvcl92YWxpZF9ob3N0YmFzZWRibG9iKGNvbnN0 IHVfY2hhciAqZGF0YSwgdV9pbnQgZGF0YWxlbiwKLSAJCWZhaWwrKzsKLSAJaWYgKChyID0gc3No YnVmX2dldF9jc3RyaW5nKGIsICZjcCwgTlVMTCkpICE9IDApCi0gCQlmYXRhbF9mcihyLCAicGFy c2UgdXNlcnN0eWxlIik7Ci0rCWlmICgocyA9IHN0cmNocihjcCwgJy8nKSkgIT0gTlVMTCkKLSsJ CSpzID0gJ1wwJzsKLSAJeGFzcHJpbnRmKCZ1c2Vyc3R5bGUsICIlcyVzJXMiLCBhdXRoY3R4dC0+ dXNlciwKLSAJICAgIGF1dGhjdHh0LT5zdHlsZSA/ICI6IiA6ICIiLAotIAkgICAgYXV0aGN0eHQt PnN0eWxlID8gYXV0aGN0eHQtPnN0eWxlIDogIiIpOwotZGlmZiAtLWdpdCBhL21vbml0b3IuaCBi L21vbml0b3IuaAotaW5kZXggM2Y4YTliZWEzLi45ZGNkOWMyOTMgMTAwNjQ0Ci0tLS0gYS9tb25p dG9yLmgKLSsrKyBiL21vbml0b3IuaAotQEAgLTU2LDYgKzU2LDEwIEBAIGVudW0gbW9uaXRvcl9y ZXF0eXBlIHsKLSAJTU9OSVRPUl9SRVFfVEVSTSA9IDUwLAotIAlNT05JVE9SX1JFUV9TVEFURSA9 IDUxLCBNT05JVE9SX0FOU19TVEFURSA9IDUyLAotIAotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsJ TU9OSVRPUl9SRVFfQVVUSFJPTEUgPSA4MCwKLSsjZW5kaWYKLSsKLSAJTU9OSVRPUl9SRVFfUEFN X1NUQVJUID0gMTAwLAotIAlNT05JVE9SX1JFUV9QQU1fQUNDT1VOVCA9IDEwMiwgTU9OSVRPUl9B TlNfUEFNX0FDQ09VTlQgPSAxMDMsCi0gCU1PTklUT1JfUkVRX1BBTV9JTklUX0NUWCA9IDEwNCwg TU9OSVRPUl9BTlNfUEFNX0lOSVRfQ1RYID0gMTA1LAotZGlmZiAtLWdpdCBhL21vbml0b3Jfd3Jh cC5jIGIvbW9uaXRvcl93cmFwLmMKLWluZGV4IDMzNDk0YjczZi4uMzQ3ZWI2ODcwIDEwMDY0NAot LS0tIGEvbW9uaXRvcl93cmFwLmMKLSsrKyBiL21vbml0b3Jfd3JhcC5jCi1AQCAtNDUzLDYgKzQ1 MywyNyBAQCBtbV9pbmZvcm1fYXV0aHNlcnYoY2hhciAqc2VydmljZSwgY2hhciAqc3R5bGUpCi0g CXNzaGJ1Zl9mcmVlKG0pOwotIH0KLSAKLSsvKiBJbmZvcm0gdGhlIHByaXZpbGVnZWQgcHJvY2Vz cyBhYm91dCByb2xlICovCi0rCi0rI2lmZGVmIFdJVEhfU0VMSU5VWAotK3ZvaWQKLSttbV9pbmZv cm1fYXV0aHJvbGUoY2hhciAqcm9sZSkKLSt7Ci0rCWludCByOwotKwlzdHJ1Y3Qgc3NoYnVmICpt OwotKwotKwlkZWJ1ZzNfZigiZW50ZXJpbmciKTsKLSsKLSsJaWYgKChtID0gc3NoYnVmX25ldygp KSA9PSBOVUxMKQotKwkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKLSsJaWYgKChyID0g c3NoYnVmX3B1dF9jc3RyaW5nKG0sIHJvbGUgPyByb2xlIDogIiIpKSAhPSAwKQotKwkJZmF0YWxf ZigiYnVmZmVyIGVycm9yOiAlcyIsIHNzaF9lcnIocikpOwotKwltbV9yZXF1ZXN0X3NlbmQocG1v bml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9BVVRIUk9MRSwgbSk7Ci0rCi0rCXNzaGJ1Zl9m cmVlKG0pOwotK30KLSsjZW5kaWYKLSsKLSAvKiBEbyB0aGUgcGFzc3dvcmQgYXV0aGVudGljYXRp b24gKi8KLSBpbnQKLSBtbV9hdXRoX3Bhc3N3b3JkKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqcGFz c3dvcmQpCi1kaWZmIC0tZ2l0IGEvbW9uaXRvcl93cmFwLmggYi9tb25pdG9yX3dyYXAuaAotaW5k ZXggYzg3Mjk1Mzg4Li45YjQyZGRiY2IgMTAwNjQ0Ci0tLS0gYS9tb25pdG9yX3dyYXAuaAotKysr IGIvbW9uaXRvcl93cmFwLmgKLUBAIC01MCw2ICs1MCw5IEBAIGludCBtbV9zc2hrZXlfc2lnbihz dHJ1Y3Qgc3NoICosIHN0cnVjdCBzc2hrZXkgKiwgdV9jaGFyICoqLCBzaXplX3QgKiwKLSAgICAg Y29uc3QgdV9jaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCi0gICAg IGNvbnN0IGNoYXIgKiwgdV9pbnQgY29tcGF0KTsKLSB2b2lkIG1tX2luZm9ybV9hdXRoc2Vydihj aGFyICosIGNoYXIgKik7Ci0rI2lmZGVmIFdJVEhfU0VMSU5VWAotK3ZvaWQgbW1faW5mb3JtX2F1 dGhyb2xlKGNoYXIgKik7Ci0rI2VuZGlmCi0gc3RydWN0IHBhc3N3ZCAqbW1fZ2V0cHduYW1hbGxv dyhzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7Ci0gY2hhciAqbW1fYXV0aDJfcmVhZF9iYW5u ZXIodm9pZCk7Ci0gaW50IG1tX2F1dGhfcGFzc3dvcmQoc3RydWN0IHNzaCAqLCBjaGFyICopOwot ZGlmZiAtLWdpdCBhL29wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIGIvb3BlbmJzZC1jb21wYXQv TWFrZWZpbGUuaW4KLWluZGV4IDUzYzg3ZGI2ZC4uMzk1MzFhZTc3IDEwMDY0NAotLS0tIGEvb3Bl bmJzZC1jb21wYXQvTWFrZWZpbGUuaW4KLSsrKyBiL29wZW5ic2QtY29tcGF0L01ha2VmaWxlLmlu Ci1AQCAtMTAyLDcgKzEwMiw4IEBAIFBPUlRTPQlwb3J0LWFpeC5vIFwKLSAJcG9ydC1wcm5nZC5v IFwKLSAJcG9ydC1zb2xhcmlzLm8gXAotIAlwb3J0LW5ldC5vIFwKLS0JcG9ydC11dy5vCi0rCXBv cnQtdXcubyBcCi0rCXBvcnQtbGludXgtc3NoZC5vCi0gCi0gLmMubzoKLSAJJChDQykgJChDRkxB R1NfTk9QSUUpICQoUElDRkxBRykgJChDUFBGTEFHUykgLWMgJDwKLWRpZmYgLS1naXQgYS9vcGVu YnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgt c3NoZC5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwLi5iOWZiZTM4YjcK LS0tLSAvZGV2L251bGwKLSsrKyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jCi1A QCAtMCwwICsxLDQyMCBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDA1IERhbmllbCBXYWxz aCA8ZHdhbHNoQHJlZGhhdC5jb20+Ci0rICogQ29weXJpZ2h0IChjKSAyMDE0IFBldHIgTGF1dHJi YWNoIDxwbGF1dHJiYUByZWRoYXQuY29tPgotKyAqCi0rICogUGVybWlzc2lvbiB0byB1c2UsIGNv cHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0rICogcHVy cG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0 IHRoZSBhYm92ZQotKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0rICoKLSsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSsgKiBX SVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5U SUVTIE9GCi0rICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSsgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJ UkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0rICogV0hBVFNP RVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS IElOIEFOCi0rICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJ T1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSsgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotKyAqLwotKwotKy8qCi0rICog TGludXgtc3BlY2lmaWMgcG9ydGFiaWxpdHkgY29kZSAtIGp1c3QgU0VMaW51eCBzdXBwb3J0IGZv ciBzc2hkIGF0IHByZXNlbnQKLSsgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsKLSsj aWYgZGVmaW5lZChXSVRIX1NFTElOVVgpIHx8IGRlZmluZWQoTElOVVhfT09NX0FESlVTVCkKLSsj aW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsKLSsjaW5j bHVkZSAibG9nLmgiCi0rI2luY2x1ZGUgInhtYWxsb2MuaCIKLSsjaW5jbHVkZSAibWlzYy5oIiAg ICAgIC8qIHNlcnZjb25mLmggbmVlZHMgbWlzYy5oIGZvciBzdHJ1Y3QgRm9yd2FyZE9wdGlvbnMg Ki8KLSsjaW5jbHVkZSAic2VydmNvbmYuaCIKLSsjaW5jbHVkZSAicG9ydC1saW51eC5oIgotKyNp bmNsdWRlICJzc2hrZXkuaCIKLSsjaW5jbHVkZSAiaG9zdGZpbGUuaCIKLSsjaW5jbHVkZSAiYXV0 aC5oIgotKwotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsjaW5jbHVkZSA8c2VsaW51eC9zZWxpbnV4 Lmg+Ci0rI2luY2x1ZGUgPHNlbGludXgvY29udGV4dC5oPgotKyNpbmNsdWRlIDxzZWxpbnV4L2dl dF9jb250ZXh0X2xpc3QuaD4KLSsjaW5jbHVkZSA8c2VsaW51eC9nZXRfZGVmYXVsdF90eXBlLmg+ Ci0rCi0rI2lmZGVmIEhBVkVfTElOVVhfQVVESVQKLSsjaW5jbHVkZSA8bGliYXVkaXQuaD4KLSsj aW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2VuZGlmCi0rCi0rZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0 aW9uczsKLStleHRlcm4gQXV0aGN0eHQgKnRoZV9hdXRoY3R4dDsKLStleHRlcm4gaW50IGluZXRk X2ZsYWc7Ci0rCi0rLyogU2VuZCBhdWRpdCBtZXNzYWdlICovCi0rc3RhdGljIGludAotK3NzaGRf c2VsaW51eF9zZW5kX2F1ZGl0X21lc3NhZ2UoaW50IHN1Y2Nlc3MsIHNlY3VyaXR5X2NvbnRleHRf dCBkZWZhdWx0X2NvbnRleHQsCi0rCQkgICAgICAgc2VjdXJpdHlfY29udGV4dF90IHNlbGVjdGVk X2NvbnRleHQpCi0rewotKwlpbnQgcmM9MDsKLSsjaWZkZWYgSEFWRV9MSU5VWF9BVURJVAotKwlj aGFyICptc2cgPSBOVUxMOwotKwlpbnQgYXVkaXRfZmQgPSBhdWRpdF9vcGVuKCk7Ci0rCXNlY3Vy aXR5X2NvbnRleHRfdCBkZWZhdWx0X3Jhdz1OVUxMOwotKwlzZWN1cml0eV9jb250ZXh0X3Qgc2Vs ZWN0ZWRfcmF3PU5VTEw7Ci0rCXJjID0gLTE7Ci0rCWlmIChhdWRpdF9mZCA8IDApIHsKLSsJCWlm IChlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRVBST1RPTk9TVVBQT1JUIHx8Ci0rCQkJCQll cnJubyA9PSBFQUZOT1NVUFBPUlQpCi0rCQkJCXJldHVybiAwOyAvKiBObyBhdWRpdCBzdXBwb3J0 IGluIGtlcm5lbCAqLwotKwkJZXJyb3IoIkVycm9yIGNvbm5lY3RpbmcgdG8gYXVkaXQgc3lzdGVt LiIpOwotKwkJcmV0dXJuIHJjOwotKwl9Ci0rCWlmIChzZWxpbnV4X3RyYW5zX3RvX3Jhd19jb250 ZXh0KGRlZmF1bHRfY29udGV4dCwgJmRlZmF1bHRfcmF3KSA8IDApIHsKLSsJCWVycm9yKCJFcnJv ciB0cmFuc2xhdGluZyBkZWZhdWx0IGNvbnRleHQuIik7Ci0rCQlkZWZhdWx0X3JhdyA9IE5VTEw7 Ci0rCX0KLSsJaWYgKHNlbGludXhfdHJhbnNfdG9fcmF3X2NvbnRleHQoc2VsZWN0ZWRfY29udGV4 dCwgJnNlbGVjdGVkX3JhdykgPCAwKSB7Ci0rCQllcnJvcigiRXJyb3IgdHJhbnNsYXRpbmcgc2Vs ZWN0ZWQgY29udGV4dC4iKTsKLSsJCXNlbGVjdGVkX3JhdyA9IE5VTEw7Ci0rCX0KLSsJaWYgKGFz cHJpbnRmKCZtc2csICJzc2hkOiBkZWZhdWx0LWNvbnRleHQ9JXMgc2VsZWN0ZWQtY29udGV4dD0l cyIsCi0rCQkgICAgIGRlZmF1bHRfcmF3ID8gZGVmYXVsdF9yYXcgOiAoZGVmYXVsdF9jb250ZXh0 ID8gZGVmYXVsdF9jb250ZXh0OiAiPyIpLAotKwkJICAgICBzZWxlY3RlZF9jb250ZXh0ID8gc2Vs ZWN0ZWRfcmF3IDogKHNlbGVjdGVkX2NvbnRleHQgPyBzZWxlY3RlZF9jb250ZXh0IDoiPyIpKSA8 IDApIHsKLSsJCWVycm9yKCJFcnJvciBhbGxvY2F0aW5nIG1lbW9yeS4iKTsKLSsJCWdvdG8gb3V0 OwotKwl9Ci0rCWlmIChhdWRpdF9sb2dfdXNlcl9tZXNzYWdlKGF1ZGl0X2ZkLCBBVURJVF9VU0VS X1JPTEVfQ0hBTkdFLAotKwkJCQkgICBtc2csIE5VTEwsIE5VTEwsIE5VTEwsIHN1Y2Nlc3MpIDw9 IDApIHsKLSsJCWVycm9yKCJFcnJvciBzZW5kaW5nIGF1ZGl0IG1lc3NhZ2UuIik7Ci0rCQlnb3Rv IG91dDsKLSsJfQotKwlyYyA9IDA7Ci0rICAgICAgb3V0OgotKwlmcmVlKG1zZyk7Ci0rCWZyZWVj b24oZGVmYXVsdF9yYXcpOwotKwlmcmVlY29uKHNlbGVjdGVkX3Jhdyk7Ci0rCWNsb3NlKGF1ZGl0 X2ZkKTsKLSsjZW5kaWYKLSsJcmV0dXJuIHJjOwotK30KLSsKLStzdGF0aWMgaW50Ci0rbWxzX3Jh bmdlX2FsbG93ZWQoc2VjdXJpdHlfY29udGV4dF90IHNyYywgc2VjdXJpdHlfY29udGV4dF90IGRz dCkKLSt7Ci0rCXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7Ci0rCWludCByZXR2YWw7Ci0rCWFjY2Vz c192ZWN0b3JfdCBiaXQ7Ci0rCXNlY3VyaXR5X2NsYXNzX3QgY2xhc3M7Ci0rCi0rCWRlYnVnX2Yo InNyYzolcyBkc3Q6JXMiLCBzcmMsIGRzdCk7Ci0rCWNsYXNzID0gc3RyaW5nX3RvX3NlY3VyaXR5 X2NsYXNzKCJjb250ZXh0Iik7Ci0rCWlmICghY2xhc3MpIHsKLSsJCWVycm9yKCJzdHJpbmdfdG9f c2VjdXJpdHlfY2xhc3MgZmFpbGVkIHRvIHRyYW5zbGF0ZSBzZWN1cml0eSBjbGFzcyBjb250ZXh0 Iik7Ci0rCQlyZXR1cm4gMTsKLSsJfQotKwliaXQgPSBzdHJpbmdfdG9fYXZfcGVybShjbGFzcywg ImNvbnRhaW5zIik7Ci0rCWlmICghYml0KSB7Ci0rCQllcnJvcigic3RyaW5nX3RvX2F2X3Blcm0g ZmFpbGVkIHRvIHRyYW5zbGF0ZSBhdiBwZXJtIGNvbnRhaW5zIik7Ci0rCQlyZXR1cm4gMTsKLSsJ fQotKwlyZXR2YWwgPSBzZWN1cml0eV9jb21wdXRlX2F2KHNyYywgZHN0LCBjbGFzcywgYml0LCAm YXZkKTsKLSsJaWYgKHJldHZhbCB8fCAoKGJpdCAmIGF2ZC5hbGxvd2VkKSAhPSBiaXQpKQotKwkJ cmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50Ci0rZ2V0X3VzZXJf Y29udGV4dChjb25zdCBjaGFyICpzZW5hbWUsIGNvbnN0IGNoYXIgKnJvbGUsIGNvbnN0IGNoYXIg Kmx2bCwKLSsJc2VjdXJpdHlfY29udGV4dF90ICpzYykgewotKyNpZmRlZiBIQVZFX0dFVF9ERUZB VUxUX0NPTlRFWFRfV0lUSF9MRVZFTAotKwlpZiAobHZsID09IE5VTEwgfHwgbHZsWzBdID09ICdc MCcgfHwgZ2V0X2RlZmF1bHRfY29udGV4dF93aXRoX2xldmVsKHNlbmFtZSwgbHZsLCBOVUxMLCBz YykgIT0gMCkgewotKwkgICAgICAgIC8qIFVzZXIgbWF5IGhhdmUgcmVxdWVzdGVkIGEgbGV2ZWwg Y29tcGxldGVseSBvdXRzaWRlIG9mIGhpcyAKLSsJICAgICAgICAgICBhbGxvd2VkIHJhbmdlLiBX ZSBnZXQgYSBjb250ZXh0IGp1c3QgZm9yIGF1ZGl0aW5nIGFzIHRoZQotKwkgICAgICAgICAgIHJh bmdlIGNoZWNrIGJlbG93IHdpbGwgY2VydGFpbmx5IGZhaWwgZm9yIGRlZmF1bHQgY29udGV4dC4g Ki8KLSsjZW5kaWYKLSsJCWlmIChnZXRfZGVmYXVsdF9jb250ZXh0KHNlbmFtZSwgTlVMTCwgc2Mp ICE9IDApIHsKLSsJCQkqc2MgPSBOVUxMOwotKwkJCXJldHVybiAtMTsKLSsJCX0KLSsjaWZkZWYg SEFWRV9HRVRfREVGQVVMVF9DT05URVhUX1dJVEhfTEVWRUwKLSsJfQotKyNlbmRpZgotKwlpZiAo cm9sZSAhPSBOVUxMICYmIHJvbGVbMF0pIHsKLSsJCWNvbnRleHRfdCBjb247Ci0rCQljaGFyICp0 eXBlPU5VTEw7Ci0rCQlpZiAoZ2V0X2RlZmF1bHRfdHlwZShyb2xlLCAmdHlwZSkgIT0gMCkgewot KwkJCWVycm9yKCJnZXRfZGVmYXVsdF90eXBlOiBmYWlsZWQgdG8gZ2V0IGRlZmF1bHQgdHlwZSBm b3IgJyVzJyIsCi0rCQkJCXJvbGUpOwotKwkJCWdvdG8gb3V0OwotKwkJfQotKwkJY29uID0gY29u dGV4dF9uZXcoKnNjKTsKLSsJCWlmICghY29uKSB7Ci0rCQkJZ290byBvdXQ7Ci0rCQl9Ci0rCQlj b250ZXh0X3JvbGVfc2V0KGNvbiwgcm9sZSk7Ci0rCQljb250ZXh0X3R5cGVfc2V0KGNvbiwgdHlw ZSk7Ci0rCQlmcmVlY29uKCpzYyk7Ci0rCQkqc2MgPSBzdHJkdXAoY29udGV4dF9zdHIoY29uKSk7 Ci0rCQljb250ZXh0X2ZyZWUoY29uKTsKLSsJCWlmICghKnNjKQotKwkJCXJldHVybiAtMTsKLSsJ fQotKyNpZmRlZiBIQVZFX0dFVF9ERUZBVUxUX0NPTlRFWFRfV0lUSF9MRVZFTAotKwlpZiAobHZs ICE9IE5VTEwgJiYgbHZsWzBdKSB7Ci0rCQkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdGVkIHJh bmdlIGlzIG9idGFpbmVkICovCi0rCQljb250ZXh0X3QgY29uOwotKwkJc2VjdXJpdHlfY29udGV4 dF90IG9idGFpbmVkX3JhdzsKLSsJCXNlY3VyaXR5X2NvbnRleHRfdCByZXF1ZXN0ZWRfcmF3Owot KwkJY29uID0gY29udGV4dF9uZXcoKnNjKTsKLSsJCWlmICghY29uKSB7Ci0rCQkJZ290byBvdXQ7 Ci0rCQl9Ci0rCQljb250ZXh0X3JhbmdlX3NldChjb24sIGx2bCk7Ci0rCQlpZiAoc2VsaW51eF90 cmFuc190b19yYXdfY29udGV4dCgqc2MsICZvYnRhaW5lZF9yYXcpIDwgMCkgewotKwkJCWNvbnRl eHRfZnJlZShjb24pOwotKwkJCWdvdG8gb3V0OwotKwkJfQotKwkJaWYgKHNlbGludXhfdHJhbnNf dG9fcmF3X2NvbnRleHQoY29udGV4dF9zdHIoY29uKSwgJnJlcXVlc3RlZF9yYXcpIDwgMCkgewot KwkJCWZyZWVjb24ob2J0YWluZWRfcmF3KTsKLSsJCQljb250ZXh0X2ZyZWUoY29uKTsKLSsJCQln b3RvIG91dDsKLSsJCX0KLSsKLSsJCWRlYnVnKCJnZXRfdXNlcl9jb250ZXh0OiBvYnRhaW5lZCBj b250ZXh0ICclcycgcmVxdWVzdGVkIGNvbnRleHQgJyVzJyIsCi0rCQkJb2J0YWluZWRfcmF3LCBy ZXF1ZXN0ZWRfcmF3KTsKLSsJCWlmIChzdHJjbXAob2J0YWluZWRfcmF3LCByZXF1ZXN0ZWRfcmF3 KSkgewotKwkJCS8qIHNldCB0aGUgY29udGV4dCB0byB0aGUgcmVhbCByZXF1ZXN0ZWQgb25lIGJ1 dCBmYWlsICovCi0rCQkJZnJlZWNvbihyZXF1ZXN0ZWRfcmF3KTsKLSsJCQlmcmVlY29uKG9idGFp bmVkX3Jhdyk7Ci0rCQkJZnJlZWNvbigqc2MpOwotKwkJCSpzYyA9IHN0cmR1cChjb250ZXh0X3N0 cihjb24pKTsKLSsJCQljb250ZXh0X2ZyZWUoY29uKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQl9Ci0r CQlmcmVlY29uKHJlcXVlc3RlZF9yYXcpOwotKwkJZnJlZWNvbihvYnRhaW5lZF9yYXcpOwotKwkJ Y29udGV4dF9mcmVlKGNvbik7Ci0rCX0KLSsjZW5kaWYKLSsJcmV0dXJuIDA7Ci0rICAgICAgb3V0 OgotKwlmcmVlY29uKCpzYyk7Ci0rCSpzYyA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSt9Ci0rCi0r c3RhdGljIHZvaWQKLStzc2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbChjaGFyICoqcm9sZSwgY29u c3QgY2hhciAqKmxldmVsKQotK3sKLSsJKnJvbGUgPSBOVUxMOwotKwkqbGV2ZWwgPSBOVUxMOwot KwlpZiAodGhlX2F1dGhjdHh0KSB7Ci0rCQlpZiAodGhlX2F1dGhjdHh0LT5yb2xlICE9IE5VTEwp IHsKLSsJCQljaGFyICpzbGFzaDsKLSsJCQkqcm9sZSA9IHhzdHJkdXAodGhlX2F1dGhjdHh0LT5y b2xlKTsKLSsJCQlpZiAoKHNsYXNoID0gc3RyY2hyKCpyb2xlLCAnLycpKSAhPSBOVUxMKSB7Ci0r CQkJCSpzbGFzaCA9ICdcMCc7Ci0rCQkJCSpsZXZlbCA9IHNsYXNoICsgMTsKLSsJCQl9Ci0rCQl9 Ci0rCX0KLSt9Ci0rCi0rLyogUmV0dXJuIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGNvbnRleHQgZm9y IHRoZSBnaXZlbiB1c2VybmFtZSAqLwotK3N0YXRpYyBpbnQKLStzc2hkX3NlbGludXhfZ2V0Y3R4 YnluYW1lKGNoYXIgKnB3bmFtZSwKLSsJc2VjdXJpdHlfY29udGV4dF90ICpkZWZhdWx0X3NjLCBz ZWN1cml0eV9jb250ZXh0X3QgKnVzZXJfc2MpCi0rewotKwljaGFyICpzZW5hbWUsICpsdmw7Ci0r CWNoYXIgKnJvbGU7Ci0rCWNvbnN0IGNoYXIgKnJlcWx2bDsKLSsJaW50IHIgPSAwOwotKwljb250 ZXh0X3QgY29uID0gTlVMTDsKLSsKLSsJc3NoX3NlbGludXhfZ2V0X3JvbGVfbGV2ZWwoJnJvbGUs ICZyZXFsdmwpOwotKwotKyNpZmRlZiBIQVZFX0dFVFNFVVNFUkJZTkFNRQotKwlpZiAoKHI9Z2V0 c2V1c2VyYnluYW1lKHB3bmFtZSwgJnNlbmFtZSwgJmx2bCkpICE9IDApIHsKLSsJCXNlbmFtZSA9 IE5VTEw7Ci0rCQlsdmwgPSBOVUxMOwotKwl9Ci0rI2Vsc2UKLSsJc2VuYW1lID0gcHduYW1lOwot KwlsdmwgPSAiIjsKLSsjZW5kaWYKLSsKLSsJaWYgKHIgPT0gMCkgewotKyNpZmRlZiBIQVZFX0dF VF9ERUZBVUxUX0NPTlRFWFRfV0lUSF9MRVZFTAotKwkJciA9IGdldF9kZWZhdWx0X2NvbnRleHRf d2l0aF9sZXZlbChzZW5hbWUsIGx2bCwgTlVMTCwgZGVmYXVsdF9zYyk7Ci0rI2Vsc2UKLSsJCXIg PSBnZXRfZGVmYXVsdF9jb250ZXh0KHNlbmFtZSwgTlVMTCwgZGVmYXVsdF9zYyk7Ci0rI2VuZGlm Ci0rCX0KLSsKLSsJaWYgKHIgPT0gMCkgewotKwkJLyogSWYgbGF1bmNoZWQgZnJvbSB4aW5ldGQs IHdlIG11c3QgdXNlIGN1cnJlbnQgbGV2ZWwgKi8KLSsJCWlmIChpbmV0ZF9mbGFnKSB7Ci0rCQkJ c2VjdXJpdHlfY29udGV4dF90IHNzaGRzYz1OVUxMOwotKwotKwkJCWlmIChnZXRjb25fcmF3KCZz c2hkc2MpIDwgMCkKLSsJCQkJZmF0YWwoImZhaWxlZCB0byBhbGxvY2F0ZSBzZWN1cml0eSBjb250 ZXh0Iik7Ci0rCi0rCQkJaWYgKChjb249Y29udGV4dF9uZXcoc3NoZHNjKSkgPT0gTlVMTCkKLSsJ CQkJZmF0YWwoImZhaWxlZCB0byBhbGxvY2F0ZSBzZWxpbnV4IGNvbnRleHQiKTsKLSsJCQlyZXFs dmwgPSBjb250ZXh0X3JhbmdlX2dldChjb24pOwotKwkJCWZyZWVjb24oc3NoZHNjKTsKLSsJCQlp ZiAocmVxbHZsICE9TlVMTCAmJiBsdmwgIT0gTlVMTCAmJiBzdHJjbXAocmVxbHZsLCBsdmwpID09 IDApCi0rCQkJICAgIC8qIHdlIGFjdHVhbGx5IGRvbid0IGNoYW5nZSBsZXZlbCAqLwotKwkJCSAg ICByZXFsdmwgPSAiIjsKLSsKLSsJCQlkZWJ1Z19mKCJjdXJyZW50IGNvbm5lY3Rpb24gbGV2ZWwg JyVzJyIsIHJlcWx2bCk7Ci0rCi0rCQl9Ci0rCi0rCQlpZiAoKHJlcWx2bCAhPSBOVUxMICYmIHJl cWx2bFswXSkgfHwgKHJvbGUgIT0gTlVMTCAmJiByb2xlWzBdKSkgewotKwkJCXIgPSBnZXRfdXNl cl9jb250ZXh0KHNlbmFtZSwgcm9sZSwgcmVxbHZsLCB1c2VyX3NjKTsKLSsKLSsJCQlpZiAociA9 PSAwICYmIHJlcWx2bCAhPSBOVUxMICYmIHJlcWx2bFswXSkgewotKwkJCQlzZWN1cml0eV9jb250 ZXh0X3QgZGVmYXVsdF9sZXZlbF9zYyA9ICpkZWZhdWx0X3NjOwotKwkJCQlpZiAocm9sZSAhPSBO VUxMICYmIHJvbGVbMF0pIHsKLSsJCQkJCWlmIChnZXRfdXNlcl9jb250ZXh0KHNlbmFtZSwgcm9s ZSwgbHZsLCAmZGVmYXVsdF9sZXZlbF9zYykgPCAwKQotKwkJCQkJCWRlZmF1bHRfbGV2ZWxfc2Mg PSAqZGVmYXVsdF9zYzsKLSsJCQkJfQotKwkJCQkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdGVk IHJhbmdlIGlzIGNvbnRhaW5lZCBpbiB0aGUgdXNlciByYW5nZSAqLwotKwkJCQlpZiAobWxzX3Jh bmdlX2FsbG93ZWQoZGVmYXVsdF9sZXZlbF9zYywgKnVzZXJfc2MpKSB7Ci0rCQkJCQlsb2dpdCgi cGVybWl0IE1MUyBsZXZlbCAlcyAodXNlciByYW5nZSAlcykiLCByZXFsdmwsIGx2bCk7Ci0rCQkJ CX0gZWxzZSB7Ci0rCQkJCQlyID0gLTE7Ci0rCQkJCQllcnJvcigiZGVueSBNTFMgbGV2ZWwgJXMg KHVzZXIgcmFuZ2UgJXMpIiwgcmVxbHZsLCBsdmwpOwotKwkJCQl9Ci0rCQkJCWlmIChkZWZhdWx0 X2xldmVsX3NjICE9ICpkZWZhdWx0X3NjKQotKwkJCQkJZnJlZWNvbihkZWZhdWx0X2xldmVsX3Nj KTsKLSsJCQl9Ci0rCQl9IGVsc2UgewotKwkJCSp1c2VyX3NjID0gKmRlZmF1bHRfc2M7Ci0rCQl9 Ci0rCX0KLSsJaWYgKHIgIT0gMCkgewotKwkJZXJyb3JfZigiRmFpbGVkIHRvIGdldCBkZWZhdWx0 IFNFTGludXggc2VjdXJpdHkgIgotKwkJICAgICJjb250ZXh0IGZvciAlcyIsIHB3bmFtZSk7Ci0r CX0KLSsKLSsjaWZkZWYgSEFWRV9HRVRTRVVTRVJCWU5BTUUKLSsJZnJlZShzZW5hbWUpOwotKwlm cmVlKGx2bCk7Ci0rI2VuZGlmCi0rCi0rCWlmIChyb2xlICE9IE5VTEwpCi0rCQlmcmVlKHJvbGUp OwotKwlpZiAoY29uKQotKwkJY29udGV4dF9mcmVlKGNvbik7Ci0rCi0rCXJldHVybiAocik7Ci0r fQotKwotKy8qIFNldHVwIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgcGFtX3NlbGludXggKi8K LStzdGF0aWMgaW50Ci0rc3NoZF9zZWxpbnV4X3NldHVwX3BhbV92YXJpYWJsZXModm9pZCkKLSt7 Ci0rCWNvbnN0IGNoYXIgKnJlcWx2bDsKLSsJY2hhciAqcm9sZTsKLSsJY2hhciAqdXNlX2N1cnJl bnQ7Ci0rCWludCBydjsKLSsKLSsJZGVidWczX2YoInNldHRpbmcgZXhlY3V0aW9uIGNvbnRleHQi KTsKLSsKLSsJc3NoX3NlbGludXhfZ2V0X3JvbGVfbGV2ZWwoJnJvbGUsICZyZXFsdmwpOwotKwot KwlydiA9IGRvX3BhbV9wdXRlbnYoIlNFTElOVVhfUk9MRV9SRVFVRVNURUQiLCByb2xlID8gcm9s ZSA6ICIiKTsKLSsKLSsJaWYgKGluZXRkX2ZsYWcpIHsKLSsJCXVzZV9jdXJyZW50ID0gIjEiOwot Kwl9IGVsc2UgewotKwkJdXNlX2N1cnJlbnQgPSAiIjsKLSsJCXJ2ID0gcnYgfHwgZG9fcGFtX3B1 dGVudigiU0VMSU5VWF9MRVZFTF9SRVFVRVNURUQiLCByZXFsdmwgPyByZXFsdmw6ICIiKTsKLSsJ fQotKwotKwlydiA9IHJ2IHx8IGRvX3BhbV9wdXRlbnYoIlNFTElOVVhfVVNFX0NVUlJFTlRfUkFO R0UiLCB1c2VfY3VycmVudCk7Ci0rCi0rCWlmIChyb2xlICE9IE5VTEwpCi0rCQlmcmVlKHJvbGUp OwotKwotKwlyZXR1cm4gcnY7Ci0rfQotKwotKy8qIFNldCB0aGUgZXhlY3V0aW9uIGNvbnRleHQg dG8gdGhlIGRlZmF1bHQgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciAqLwotK3ZvaWQKLStzc2hkX3Nl bGludXhfc2V0dXBfZXhlY19jb250ZXh0KGNoYXIgKnB3bmFtZSkKLSt7Ci0rCXNlY3VyaXR5X2Nv bnRleHRfdCB1c2VyX2N0eCA9IE5VTEw7Ci0rCWludCByID0gMDsKLSsJc2VjdXJpdHlfY29udGV4 dF90IGRlZmF1bHRfY3R4ID0gTlVMTDsKLSsKLSsJaWYgKCFzc2hfc2VsaW51eF9lbmFibGVkKCkp Ci0rCQlyZXR1cm47Ci0rCi0rCWlmIChvcHRpb25zLnVzZV9wYW0pIHsKLSsJCS8qIGRvIG5vdCBj b21wdXRlIGNvbnRleHQsIGp1c3Qgc2V0dXAgZW52aXJvbm1lbnQgZm9yIHBhbV9zZWxpbnV4ICov Ci0rCQlpZiAoc3NoZF9zZWxpbnV4X3NldHVwX3BhbV92YXJpYWJsZXMoKSkgewotKwkJCXN3aXRj aCAoc2VjdXJpdHlfZ2V0ZW5mb3JjZSgpKSB7Ci0rCQkJY2FzZSAtMToKLSsJCQkJZmF0YWxfZigi c2VjdXJpdHlfZ2V0ZW5mb3JjZSgpIGZhaWxlZCIpOwotKwkJCWNhc2UgMDoKLSsJCQkJZXJyb3Jf ZigiU0VMaW51eCBQQU0gdmFyaWFibGUgc2V0dXAgZmFpbHVyZS4gQ29udGludWluZyBpbiBwZXJt aXNzaXZlIG1vZGUuIik7Ci0rCQkJYnJlYWs7Ci0rCQkJZGVmYXVsdDoKLSsJCQkJZmF0YWxfZigi U0VMaW51eCBQQU0gdmFyaWFibGUgc2V0dXAgZmFpbHVyZS4gQWJvcnRpbmcgY29ubmVjdGlvbi4i KTsKLSsJCQl9Ci0rCQl9Ci0rCQlyZXR1cm47Ci0rCX0KLSsKLSsJZGVidWczX2YoInNldHRpbmcg ZXhlY3V0aW9uIGNvbnRleHQiKTsKLSsKLSsJciA9IHNzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUo cHduYW1lLCAmZGVmYXVsdF9jdHgsICZ1c2VyX2N0eCk7Ci0rCWlmIChyID49IDApIHsKLSsJCXIg PSBzZXRleGVjY29uKHVzZXJfY3R4KTsKLSsJCWlmIChyIDwgMCkgewotKwkJCWVycm9yX2YoIkZh aWxlZCB0byBzZXQgU0VMaW51eCBleGVjdXRpb24gY29udGV4dCAlcyBmb3IgJXMiLAotKwkJCSAg ICB1c2VyX2N0eCwgcHduYW1lKTsKLSsJCX0KLSsjaWZkZWYgSEFWRV9TRVRLRVlDUkVBVEVDT04K LSsJCWVsc2UgaWYgKHNldGtleWNyZWF0ZWNvbih1c2VyX2N0eCkgPCAwKSB7Ci0rCQkJZXJyb3Jf ZigiRmFpbGVkIHRvIHNldCBTRUxpbnV4IGtleXJpbmcgY3JlYXRpb24gY29udGV4dCAlcyBmb3Ig JXMiLAotKwkJCSAgICB1c2VyX2N0eCwgcHduYW1lKTsKLSsJCX0KLSsjZW5kaWYKLSsJfQotKwlp ZiAodXNlcl9jdHggPT0gTlVMTCkgewotKwkJdXNlcl9jdHggPSBkZWZhdWx0X2N0eDsKLSsJfQot KwlpZiAociA8IDAgfHwgdXNlcl9jdHggIT0gZGVmYXVsdF9jdHgpIHsKLSsJCS8qIGF1ZGl0IGp1 c3QgdGhlIGNhc2Ugd2hlbiB1c2VyIGNoYW5nZWQgYSByb2xlIG9yIHRoZXJlIHdhcwotKwkJICAg YSBmYWlsdXJlICovCi0rCQlzc2hkX3NlbGludXhfc2VuZF9hdWRpdF9tZXNzYWdlKHIgPj0gMCwg ZGVmYXVsdF9jdHgsIHVzZXJfY3R4KTsKLSsJfQotKwlpZiAociA8IDApIHsKLSsJCXN3aXRjaCAo c2VjdXJpdHlfZ2V0ZW5mb3JjZSgpKSB7Ci0rCQljYXNlIC0xOgotKwkJCWZhdGFsX2YoInNlY3Vy aXR5X2dldGVuZm9yY2UoKSBmYWlsZWQiKTsKLSsJCWNhc2UgMDoKLSsJCQllcnJvcl9mKCJFTGlu dXggZmFpbHVyZS4gQ29udGludWluZyBpbiBwZXJtaXNzaXZlIG1vZGUuIik7Ci0rCQkJYnJlYWs7 Ci0rCQlkZWZhdWx0OgotKwkJCWZhdGFsX2YoIlNFTGludXggZmFpbHVyZS4gQWJvcnRpbmcgY29u bmVjdGlvbi4iKTsKLSsJCX0KLSsJfQotKwlpZiAodXNlcl9jdHggIT0gTlVMTCAmJiB1c2VyX2N0 eCAhPSBkZWZhdWx0X2N0eCkKLSsJCWZyZWVjb24odXNlcl9jdHgpOwotKwlpZiAoZGVmYXVsdF9j dHggIT0gTlVMTCkKLSsJCWZyZWVjb24oZGVmYXVsdF9jdHgpOwotKwotKwlkZWJ1ZzNfZigiZG9u ZSIpOwotK30KLSsKLSsjZW5kaWYKLSsjZW5kaWYKLSsKLWRpZmYgLS1naXQgYS9vcGVuYnNkLWNv bXBhdC9wb3J0LWxpbnV4LmMgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmMKLWluZGV4IGMx ZDU0ZjM4ZC4uNzQyNmY2Zjc5IDEwMDY0NAotLS0tIGEvb3BlbmJzZC1jb21wYXQvcG9ydC1saW51 eC5jCi0rKysgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmMKLUBAIC0xMDksMzcgKzEwOSw2 IEBAIHNzaF9zZWxpbnV4X2dldGN0eGJ5bmFtZShjaGFyICpwd25hbWUpCi0gCXJldHVybiBzYzsK LSB9Ci0gCi0tLyogU2V0IHRoZSBleGVjdXRpb24gY29udGV4dCB0byB0aGUgZGVmYXVsdCBmb3Ig dGhlIHNwZWNpZmllZCB1c2VyICovCi0tdm9pZAotLXNzaF9zZWxpbnV4X3NldHVwX2V4ZWNfY29u dGV4dChjaGFyICpwd25hbWUpCi0tewotLQljaGFyICp1c2VyX2N0eCA9IE5VTEw7Ci0tCi0tCWlm ICghc3NoX3NlbGludXhfZW5hYmxlZCgpKQotLQkJcmV0dXJuOwotLQotLQlkZWJ1ZzMoIiVzOiBz ZXR0aW5nIGV4ZWN1dGlvbiBjb250ZXh0IiwgX19mdW5jX18pOwotLQotLQl1c2VyX2N0eCA9IHNz aF9zZWxpbnV4X2dldGN0eGJ5bmFtZShwd25hbWUpOwotLQlpZiAoc2V0ZXhlY2Nvbih1c2VyX2N0 eCkgIT0gMCkgewotLQkJc3dpdGNoIChzZWN1cml0eV9nZXRlbmZvcmNlKCkpIHsKLS0JCWNhc2Ug LTE6Ci0tCQkJZmF0YWwoIiVzOiBzZWN1cml0eV9nZXRlbmZvcmNlKCkgZmFpbGVkIiwgX19mdW5j X18pOwotLQkJY2FzZSAwOgotLQkJCWVycm9yKCIlczogRmFpbGVkIHRvIHNldCBTRUxpbnV4IGV4 ZWN1dGlvbiAiCi0tCQkJICAgICJjb250ZXh0IGZvciAlcyIsIF9fZnVuY19fLCBwd25hbWUpOwot LQkJCWJyZWFrOwotLQkJZGVmYXVsdDoKLS0JCQlmYXRhbCgiJXM6IEZhaWxlZCB0byBzZXQgU0VM aW51eCBleGVjdXRpb24gY29udGV4dCAiCi0tCQkJICAgICJmb3IgJXMgKGluIGVuZm9yY2luZyBt b2RlKSIsIF9fZnVuY19fLCBwd25hbWUpOwotLQkJfQotLQl9Ci0tCWlmICh1c2VyX2N0eCAhPSBO VUxMKQotLQkJZnJlZWNvbih1c2VyX2N0eCk7Ci0tCi0tCWRlYnVnMygiJXM6IGRvbmUiLCBfX2Z1 bmNfXyk7Ci0tfQotLQotIC8qIFNldCB0aGUgVFRZIGNvbnRleHQgZm9yIHRoZSBzcGVjaWZpZWQg dXNlciAqLwotIHZvaWQKLSBzc2hfc2VsaW51eF9zZXR1cF9wdHkoY2hhciAqcHduYW1lLCBjb25z dCBjaGFyICp0dHkpCi1AQCAtMTUyLDcgKzEyMSwxMSBAQCBzc2hfc2VsaW51eF9zZXR1cF9wdHko Y2hhciAqcHduYW1lLCBjb25zdCBjaGFyICp0dHkpCi0gCi0gCWRlYnVnMygiJXM6IHNldHRpbmcg VFRZIGNvbnRleHQgb24gJXMiLCBfX2Z1bmNfXywgdHR5KTsKLSAKLS0JdXNlcl9jdHggPSBzc2hf c2VsaW51eF9nZXRjdHhieW5hbWUocHduYW1lKTsKLSsJaWYgKGdldGV4ZWNjb24oJnVzZXJfY3R4 KSAhPSAwKSB7Ci0rCQllcnJvcl9mKCJnZXRleGVjY29uOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7 Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotIAotIAkvKiBYWFg6IHNob3VsZCB0aGVzZSBjYWxscyBm YXRhbCgpIHVwb24gZmFpbHVyZSBpbiBlbmZvcmNpbmcgbW9kZT8gKi8KLSAKLWRpZmYgLS1naXQg YS9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmggYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4 LmgKLWluZGV4IDk1OTQzMGRlMS4uMDU1YzgyNWU0IDEwMDY0NAotLS0tIGEvb3BlbmJzZC1jb21w YXQvcG9ydC1saW51eC5oCi0rKysgYi9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmgKLUBAIC0y MCw5ICsyMCwxMCBAQAotICNpZmRlZiBXSVRIX1NFTElOVVgKLSBpbnQgc3NoX3NlbGludXhfZW5h YmxlZCh2b2lkKTsKLSB2b2lkIHNzaF9zZWxpbnV4X3NldHVwX3B0eShjaGFyICosIGNvbnN0IGNo YXIgKik7Ci0tdm9pZCBzc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAqKTsKLSB2 b2lkIHNzaF9zZWxpbnV4X2NoYW5nZV9jb250ZXh0KGNvbnN0IGNoYXIgKik7Ci0gdm9pZCBzc2hf c2VsaW51eF9zZXRmc2NyZWF0ZWNvbihjb25zdCBjaGFyICopOwotKwotK3ZvaWQgc3NoZF9zZWxp bnV4X3NldHVwX2V4ZWNfY29udGV4dChjaGFyICopOwotICNlbmRpZgotIAotICNpZmRlZiBMSU5V WF9PT01fQURKVVNUCi1kaWZmIC0tZ2l0IGEvcGxhdGZvcm0uYyBiL3BsYXRmb3JtLmMKLWluZGV4 IGZkMWE3YTdjMi4uYmNmMWIwNDkxIDEwMDY0NAotLS0tIGEvcGxhdGZvcm0uYwotKysrIGIvcGxh dGZvcm0uYwotQEAgLTE0MCw3ICsxNDAsNyBAQCBwbGF0Zm9ybV9zZXR1c2VyY29udGV4dF9wb3N0 X2dyb3VwcyhzdHJ1Y3QgcGFzc3dkICpwdykKLSAJfQotICNlbmRpZiAvKiBIQVZFX1NFVFBDUkVE ICovCi0gI2lmZGVmIFdJVEhfU0VMSU5VWAotLQlzc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRl eHQocHctPnB3X25hbWUpOwotKwlzc2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KHB3LT5w d19uYW1lKTsKLSAjZW5kaWYKLSB9Ci0gCi1kaWZmIC0tZ2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9z c2hkLXNlc3Npb24uYwotaW5kZXggODk3OWY3NDNiLi5jYjRiMDUyM2QgMTAwNjQ0Ci0tLS0gYS9z c2hkLXNlc3Npb24uYwotKysrIGIvc3NoZC1zZXNzaW9uLmMKLUBAIC0xMzA2LDYgKzEzMDYsOSBA QCBtYWluKGludCBhYywgY2hhciAqKmF2KQotIAkJcmVzdG9yZV91aWQoKTsKLSAJfQotICNlbmRp ZgotKyNpZmRlZiBXSVRIX1NFTElOVVgKLSsJc3NoZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4 dChhdXRoY3R4dC0+cHctPnB3X25hbWUpOwotKyNlbmRpZgotICNpZmRlZiBVU0VfUEFNCi0gCWlm IChvcHRpb25zLnVzZV9wYW0pIHsKLSAJCWRvX3BhbV9zZXRjcmVkKCk7Ci0tLSAKLTIuNTIuMAot CgpkaWZmIC0tZ2l0IGEvMDAwMi1JbXBsZW1lbnQtU0VMaW51eC1lbnZpcm9ubWVudC12YXJpYWJs ZS1zZXR1cC1mb3Itc3ViLnBhdGNoIGIvMDAwMi1JbXBsZW1lbnQtU0VMaW51eC1lbnZpcm9ubWVu dC12YXJpYWJsZS1zZXR1cC1mb3Itc3ViLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmU1NGZmMDMKLS0tIC9kZXYvbnVsbAorKysgYi8wMDAyLUltcGxlbWVudC1TRUxp bnV4LWVudmlyb25tZW50LXZhcmlhYmxlLXNldHVwLWZvci1zdWIucGF0Y2gKQEAgLTAsMCArMSw2 NzcgQEAKK0Zyb20gOGIyNTYxNDEzMmM3ODExNjQ5OGEyYjk0NjM0YjJiOGJhY2Y4MmY1ZiBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdt YWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMjYgMTQ6MDY6NDcgKzAyMDAKK1N1YmplY3Q6 IFtQQVRDSCAwMi81NF0gSW1wbGVtZW50IFNFTGludXggZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0 dXAgZm9yCisgc3VicHJvY2VzcyBleGVjdXRpb24KKworb3BlbnNzaC02LjZwMS1zZWxpbnV4LWVu di1zZXR1cAorCitJbXBsZW1lbnQgY29tcHJlaGVuc2l2ZSBTRUxpbnV4IGNvbnRleHQgbWFuYWdl bWVudCBmb3Igc3NoZCwgaW5jbHVkaW5nCityb2xlIHNlbGVjdGlvbiwgTUxTIGxldmVsIHZhbGlk YXRpb24sIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR1cCBmb3IKK3BhbV9zZWxpbnV4IGlu dGVncmF0aW9uLgorCitDaGFuZ2VzOgorLSBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQu YzogTmV3IGZpbGUgd2l0aCBTRUxpbnV4IGNvbnRleHQKKyAgbWFuYWdlbWVudCBmdW5jdGlvbnMg aW5jbHVkaW5nIHNzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUoKSwKKyAgc3NoZF9zZWxpbnV4X3Nl dHVwX2V4ZWNfY29udGV4dCgpLCBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0dXAKKy0gb3Bl bmJzZC1jb21wYXQvTWFrZWZpbGUuaW46IEFkZCBwb3J0LWxpbnV4LXNzaGQubyB0byBidWlsZAor LSBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmM6IFJlbW92ZSBvbGQgc3NoX3NlbGludXhfc2V0 dXBfZXhlY19jb250ZXh0KCksCisgIHVwZGF0ZSBzc2hfc2VsaW51eF9zZXR1cF9wdHkoKSB0byB1 c2UgZ2V0ZXhlY2NvbigpCistIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaDogVXBkYXRlIGZ1 bmN0aW9uIGRlY2xhcmF0aW9ucyBmb3IKKyAgc3NoZC1zcGVjaWZpYyBTRUxpbnV4IGZ1bmN0aW9u cworLSBwbGF0Zm9ybS5jOiBSZXBsYWNlIHNzaF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dCgp IHdpdGgKKyAgc3NoZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dCgpIGFuZCBwYXNzIGFkZGl0 aW9uYWwgcGFyYW1ldGVycworICAoaW5ldGRfZmxhZywgZG9fcGFtX3B1dGVudiwgdGhlX2F1dGhj dHh0LCBvcHRpb25zLnVzZV9wYW0pCistIHNzaGQtc2Vzc2lvbi5jOiBBZGQgU0VMaW51eCBleGVj dXRpb24gY29udGV4dCBzZXR1cCBjYWxsIGluIG1haW4oKQorLSBhdXRoLXBhbS5jOiBDaGFuZ2Ug ZG9fcGFtX3B1dGVudigpIHZhbHVlIHBhcmFtZXRlciB0byBjb25zdCBjaGFyICoKKy0gYXV0aC1w YW0uaDogVXBkYXRlIGRvX3BhbV9wdXRlbnYoKSBzaWduYXR1cmUgYW5kIGFkZCBkb19wYW1fY2hh dXRodG9rKCkKKyAgZGVjbGFyYXRpb24KKworQ28tQXV0aG9yZWQtQnk6IENsYXVkZSBTb25uZXQg NC41IDxub3JlcGx5QGFudGhyb3BpYy5jb20+CistLS0KKyBhdXRoLXBhbS5jICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMiArLQorIGF1dGgtcGFtLmggICAgICAgICAgICAgICAgICAgICAgIHwg ICAzICstCisgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4gICAgICAgfCAgIDMgKy0KKyBvcGVu YnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYyB8IDQ1NCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCisgb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5jICAgICAgfCAgMzcgKy0tCisg b3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oICAgICAgfCAgIDUgKy0KKyBwbGF0Zm9ybS5jICAg ICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQorIHNzaGQtc2Vzc2lvbi5jICAgICAgICAgICAg ICAgICAgIHwgICA3ICstCisgOCBmaWxlcyBjaGFuZ2VkLCA0ODAgaW5zZXJ0aW9ucygrKSwgMzkg ZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wZW5ic2QtY29tcGF0L3BvcnQtbGlu dXgtc3NoZC5jCisKK2RpZmYgLS1naXQgYS9hdXRoLXBhbS5jIGIvYXV0aC1wYW0uYworaW5kZXgg Mjk2MDdlMDQxLi4zZjM0MmY5ZTEgMTAwNjQ0CistLS0gYS9hdXRoLXBhbS5jCisrKysgYi9hdXRo LXBhbS5jCitAQCAtMTE0NSw3ICsxMTQ1LDcgQEAgaXNfcGFtX3Nlc3Npb25fb3Blbih2b2lkKQor ICAqIGR1cmluZyB0aGUgc3NoIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuCisgICovCisgaW50Cist ZG9fcGFtX3B1dGVudihjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKKytkb19wYW1fcHV0ZW52KGNo YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHsKKyAJaW50IHJldCA9IDE7CisgCWNoYXIg KmNvbXBvdW5kOworZGlmZiAtLWdpdCBhL2F1dGgtcGFtLmggYi9hdXRoLXBhbS5oCitpbmRleCA0 OTEzMzY3MDEuLmY5MTY3Y2ZjOCAxMDA2NDQKKy0tLSBhL2F1dGgtcGFtLmgKKysrKyBiL2F1dGgt cGFtLmgKK0BAIC0zMiw3ICszMiw4IEBAIHZvaWQgZmluaXNoX3BhbSh2b2lkKTsKKyB1X2ludCBk b19wYW1fYWNjb3VudCh2b2lkKTsKKyB2b2lkIGRvX3BhbV9zZXNzaW9uKHN0cnVjdCBzc2ggKik7 Cisgdm9pZCBkb19wYW1fc2V0Y3JlZCh2b2lkKTsKKy1pbnQgZG9fcGFtX3B1dGVudihjaGFyICos IGNoYXIgKik7Cisrdm9pZCBkb19wYW1fY2hhdXRodG9rKHZvaWQpOworK2ludCBkb19wYW1fcHV0 ZW52KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKyBjaGFyICoqIGZldGNoX3BhbV9lbnZpcm9ubWVu dCh2b2lkKTsKKyBjaGFyICoqIGZldGNoX3BhbV9jaGlsZF9lbnZpcm9ubWVudCh2b2lkKTsKKyB2 b2lkIGZyZWVfcGFtX2Vudmlyb25tZW50KGNoYXIgKiopOworZGlmZiAtLWdpdCBhL29wZW5ic2Qt Y29tcGF0L01ha2VmaWxlLmluIGIvb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4KK2luZGV4IDUz Yzg3ZGI2ZC4uMzk1MzFhZTc3IDEwMDY0NAorLS0tIGEvb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUu aW4KKysrKyBiL29wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluCitAQCAtMTAyLDcgKzEwMiw4IEBA IFBPUlRTPQlwb3J0LWFpeC5vIFwKKyAJcG9ydC1wcm5nZC5vIFwKKyAJcG9ydC1zb2xhcmlzLm8g XAorIAlwb3J0LW5ldC5vIFwKKy0JcG9ydC11dy5vCisrCXBvcnQtdXcubyBcCisrCXBvcnQtbGlu dXgtc3NoZC5vCisgCisgLmMubzoKKyAJJChDQykgJChDRkxBR1NfTk9QSUUpICQoUElDRkxBRykg JChDUFBGTEFHUykgLWMgJDwKK2RpZmYgLS1naXQgYS9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4 LXNzaGQuYyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jCituZXcgZmlsZSBtb2Rl IDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi5hYjA4M2E2MzcKKy0tLSAvZGV2L251bGwKKysrKyBi L29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jCitAQCAtMCwwICsxLDQ1NCBAQAorKy8q CisrICogQ29weXJpZ2h0IChjKSAyMDA1IERhbmllbCBXYWxzaCA8ZHdhbHNoQHJlZGhhdC5jb20+ CisrICogQ29weXJpZ2h0IChjKSAyMDE0IFBldHIgTGF1dHJiYWNoIDxwbGF1dHJiYUByZWRoYXQu Y29tPgorKyAqCisrICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3Ry aWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisrICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQg ZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorKyAqIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3Bp ZXMuCisrICoKKysgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFV VEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKysgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNP RlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrICogTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJM RSBGT1IKKysgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisrICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBM T1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisrICogQUNUSU9OIE9G IENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBP VVQgT0YKKysgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBP RiBUSElTIFNPRlRXQVJFLgorKyAqLworKworKy8qCisrICogTGludXgtc3BlY2lmaWMgcG9ydGFi aWxpdHkgY29kZSAtIGp1c3QgU0VMaW51eCBzdXBwb3J0IGZvciBzc2hkIGF0IHByZXNlbnQKKysg Ki8KKysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKysKKysjaWYgZGVmaW5lZChXSVRIX1NFTElO VVgpIHx8IGRlZmluZWQoTElOVVhfT09NX0FESlVTVCkKKysjaW5jbHVkZSA8ZXJybm8uaD4KKysj aW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRp by5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysjaW5jbHVkZSAibG9nLmgiCisrI2luY2x1 ZGUgInhtYWxsb2MuaCIKKysjaW5jbHVkZSAibWlzYy5oIiAgICAgIC8qIHNlcnZjb25mLmggbmVl ZHMgbWlzYy5oIGZvciBzdHJ1Y3QgRm9yd2FyZE9wdGlvbnMgKi8KKysjaW5jbHVkZSAic2VydmNv bmYuaCIKKysjaW5jbHVkZSAicG9ydC1saW51eC5oIgorKyNpbmNsdWRlICJzc2hrZXkuaCIKKysj aW5jbHVkZSAiaG9zdGZpbGUuaCIKKysjaW5jbHVkZSAiYXV0aC5oIgorKworKyNpZmRlZiBXSVRI X1NFTElOVVgKKysjaW5jbHVkZSA8c2VsaW51eC9zZWxpbnV4Lmg+CisrI2luY2x1ZGUgPHNlbGlu dXgvY29udGV4dC5oPgorKyNpbmNsdWRlIDxzZWxpbnV4L2dldF9jb250ZXh0X2xpc3QuaD4KKysj aW5jbHVkZSA8c2VsaW51eC9nZXRfZGVmYXVsdF90eXBlLmg+CisrCisrI2lmZGVmIEhBVkVfTElO VVhfQVVESVQKKysjaW5jbHVkZSA8bGliYXVkaXQuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+Cisr I2VuZGlmCisrCisrLyogV3JhcHBlciBhcm91bmQgaXNfc2VsaW51eF9lbmFibGVkKCkgdG8gbG9n IGl0cyByZXR1cm4gdmFsdWUgb25jZSBvbmx5ICovCisraW50Cisrc3NoZF9zZWxpbnV4X2VuYWJs ZWQodm9pZCkKKyt7CisrCXN0YXRpYyBpbnQgZW5hYmxlZCA9IC0xOworKworKwlpZiAoZW5hYmxl ZCA9PSAtMSkgeworKwkJZW5hYmxlZCA9IChpc19zZWxpbnV4X2VuYWJsZWQoKSA9PSAxKTsKKysJ CWRlYnVnKCJTRUxpbnV4IHN1cHBvcnQgJXMiLCBlbmFibGVkID8gImVuYWJsZWQiIDogImRpc2Fi bGVkIik7CisrCX0KKysKKysJcmV0dXJuIChlbmFibGVkKTsKKyt9CisrCisrLyogU2VuZCBhdWRp dCBtZXNzYWdlICovCisrc3RhdGljIGludAorK3NzaGRfc2VsaW51eF9zZW5kX2F1ZGl0X21lc3Nh Z2UoaW50IHN1Y2Nlc3MsIHNlY3VyaXR5X2NvbnRleHRfdCBkZWZhdWx0X2NvbnRleHQsCisrCQkg ICAgICAgc2VjdXJpdHlfY29udGV4dF90IHNlbGVjdGVkX2NvbnRleHQpCisreworKwlpbnQgcmM9 MDsKKysjaWZkZWYgSEFWRV9MSU5VWF9BVURJVAorKwljaGFyICptc2cgPSBOVUxMOworKwlpbnQg YXVkaXRfZmQgPSBhdWRpdF9vcGVuKCk7CisrCXNlY3VyaXR5X2NvbnRleHRfdCBkZWZhdWx0X3Jh dz1OVUxMOworKwlzZWN1cml0eV9jb250ZXh0X3Qgc2VsZWN0ZWRfcmF3PU5VTEw7CisrCXJjID0g LTE7CisrCWlmIChhdWRpdF9mZCA8IDApIHsKKysJCWlmIChlcnJubyA9PSBFSU5WQUwgfHwgZXJy bm8gPT0gRVBST1RPTk9TVVBQT1JUIHx8CisrCQkJCQllcnJubyA9PSBFQUZOT1NVUFBPUlQpCisr CQkJCXJldHVybiAwOyAvKiBObyBhdWRpdCBzdXBwb3J0IGluIGtlcm5lbCAqLworKwkJZXJyb3Io IkVycm9yIGNvbm5lY3RpbmcgdG8gYXVkaXQgc3lzdGVtLiIpOworKwkJcmV0dXJuIHJjOworKwl9 CisrCWlmIChzZWxpbnV4X3RyYW5zX3RvX3Jhd19jb250ZXh0KGRlZmF1bHRfY29udGV4dCwgJmRl ZmF1bHRfcmF3KSA8IDApIHsKKysJCWVycm9yKCJFcnJvciB0cmFuc2xhdGluZyBkZWZhdWx0IGNv bnRleHQuIik7CisrCQlkZWZhdWx0X3JhdyA9IE5VTEw7CisrCX0KKysJaWYgKHNlbGludXhfdHJh bnNfdG9fcmF3X2NvbnRleHQoc2VsZWN0ZWRfY29udGV4dCwgJnNlbGVjdGVkX3JhdykgPCAwKSB7 CisrCQllcnJvcigiRXJyb3IgdHJhbnNsYXRpbmcgc2VsZWN0ZWQgY29udGV4dC4iKTsKKysJCXNl bGVjdGVkX3JhdyA9IE5VTEw7CisrCX0KKysJaWYgKGFzcHJpbnRmKCZtc2csICJzc2hkOiBkZWZh dWx0LWNvbnRleHQ9JXMgc2VsZWN0ZWQtY29udGV4dD0lcyIsCisrCQkgICAgIGRlZmF1bHRfcmF3 ID8gZGVmYXVsdF9yYXcgOiAoZGVmYXVsdF9jb250ZXh0ID8gZGVmYXVsdF9jb250ZXh0OiAiPyIp LAorKwkJICAgICBzZWxlY3RlZF9jb250ZXh0ID8gc2VsZWN0ZWRfcmF3IDogKHNlbGVjdGVkX2Nv bnRleHQgPyBzZWxlY3RlZF9jb250ZXh0IDoiPyIpKSA8IDApIHsKKysJCWVycm9yKCJFcnJvciBh bGxvY2F0aW5nIG1lbW9yeS4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCWlmIChhdWRpdF9sb2df dXNlcl9tZXNzYWdlKGF1ZGl0X2ZkLCBBVURJVF9VU0VSX1JPTEVfQ0hBTkdFLAorKwkJCQkgICBt c2csIE5VTEwsIE5VTEwsIE5VTEwsIHN1Y2Nlc3MpIDw9IDApIHsKKysJCWVycm9yKCJFcnJvciBz ZW5kaW5nIGF1ZGl0IG1lc3NhZ2UuIik7CisrCQlnb3RvIG91dDsKKysJfQorKwlyYyA9IDA7Cisr ICAgICAgb3V0OgorKwlmcmVlKG1zZyk7CisrCWZyZWVjb24oZGVmYXVsdF9yYXcpOworKwlmcmVl Y29uKHNlbGVjdGVkX3Jhdyk7CisrCWNsb3NlKGF1ZGl0X2ZkKTsKKysjZW5kaWYKKysJcmV0dXJu IHJjOworK30KKysKKytzdGF0aWMgaW50CisrbWxzX3JhbmdlX2FsbG93ZWQoc2VjdXJpdHlfY29u dGV4dF90IHNyYywgc2VjdXJpdHlfY29udGV4dF90IGRzdCkKKyt7CisrCXN0cnVjdCBhdl9kZWNp c2lvbiBhdmQ7CisrCWludCByZXR2YWw7CisrCWFjY2Vzc192ZWN0b3JfdCBiaXQ7CisrCXNlY3Vy aXR5X2NsYXNzX3QgY2xhc3M7CisrCisrCWRlYnVnX2YoInNyYzolcyBkc3Q6JXMiLCBzcmMsIGRz dCk7CisrCWNsYXNzID0gc3RyaW5nX3RvX3NlY3VyaXR5X2NsYXNzKCJjb250ZXh0Iik7CisrCWlm ICghY2xhc3MpIHsKKysJCWVycm9yKCJzdHJpbmdfdG9fc2VjdXJpdHlfY2xhc3MgZmFpbGVkIHRv IHRyYW5zbGF0ZSBzZWN1cml0eSBjbGFzcyBjb250ZXh0Iik7CisrCQlyZXR1cm4gMTsKKysJfQor KwliaXQgPSBzdHJpbmdfdG9fYXZfcGVybShjbGFzcywgImNvbnRhaW5zIik7CisrCWlmICghYml0 KSB7CisrCQllcnJvcigic3RyaW5nX3RvX2F2X3Blcm0gZmFpbGVkIHRvIHRyYW5zbGF0ZSBhdiBw ZXJtIGNvbnRhaW5zIik7CisrCQlyZXR1cm4gMTsKKysJfQorKwlyZXR2YWwgPSBzZWN1cml0eV9j b21wdXRlX2F2KHNyYywgZHN0LCBjbGFzcywgYml0LCAmYXZkKTsKKysJaWYgKHJldHZhbCB8fCAo KGJpdCAmIGF2ZC5hbGxvd2VkKSAhPSBiaXQpKQorKwkJcmV0dXJuIDA7CisrCisrCXJldHVybiAx OworK30KKysKKytzdGF0aWMgaW50CisrZ2V0X3VzZXJfY29udGV4dChjb25zdCBjaGFyICpzZW5h bWUsIGNvbnN0IGNoYXIgKnJvbGUsIGNvbnN0IGNoYXIgKmx2bCwKKysJc2VjdXJpdHlfY29udGV4 dF90ICpzYykgeworKyNpZmRlZiBIQVZFX0dFVF9ERUZBVUxUX0NPTlRFWFRfV0lUSF9MRVZFTAor KwlpZiAobHZsID09IE5VTEwgfHwgbHZsWzBdID09ICdcMCcgfHwgZ2V0X2RlZmF1bHRfY29udGV4 dF93aXRoX2xldmVsKHNlbmFtZSwgbHZsLCBOVUxMLCBzYykgIT0gMCkgeworKwkgICAgICAgIC8q IFVzZXIgbWF5IGhhdmUgcmVxdWVzdGVkIGEgbGV2ZWwgY29tcGxldGVseSBvdXRzaWRlIG9mIGhp cyAKKysJICAgICAgICAgICBhbGxvd2VkIHJhbmdlLiBXZSBnZXQgYSBjb250ZXh0IGp1c3QgZm9y IGF1ZGl0aW5nIGFzIHRoZQorKwkgICAgICAgICAgIHJhbmdlIGNoZWNrIGJlbG93IHdpbGwgY2Vy dGFpbmx5IGZhaWwgZm9yIGRlZmF1bHQgY29udGV4dC4gKi8KKysjZW5kaWYKKysJCWlmIChnZXRf ZGVmYXVsdF9jb250ZXh0KHNlbmFtZSwgTlVMTCwgc2MpICE9IDApIHsKKysJCQkqc2MgPSBOVUxM OworKwkJCXJldHVybiAtMTsKKysJCX0KKysjaWZkZWYgSEFWRV9HRVRfREVGQVVMVF9DT05URVhU X1dJVEhfTEVWRUwKKysJfQorKyNlbmRpZgorKwlpZiAocm9sZSAhPSBOVUxMICYmIHJvbGVbMF0p IHsKKysJCWNvbnRleHRfdCBjb247CisrCQljaGFyICp0eXBlPU5VTEw7CisrCQlpZiAoZ2V0X2Rl ZmF1bHRfdHlwZShyb2xlLCAmdHlwZSkgIT0gMCkgeworKwkJCWVycm9yKCJnZXRfZGVmYXVsdF90 eXBlOiBmYWlsZWQgdG8gZ2V0IGRlZmF1bHQgdHlwZSBmb3IgJyVzJyIsCisrCQkJCXJvbGUpOwor KwkJCWdvdG8gb3V0OworKwkJfQorKwkJY29uID0gY29udGV4dF9uZXcoKnNjKTsKKysJCWlmICgh Y29uKSB7CisrCQkJZ290byBvdXQ7CisrCQl9CisrCQljb250ZXh0X3JvbGVfc2V0KGNvbiwgcm9s ZSk7CisrCQljb250ZXh0X3R5cGVfc2V0KGNvbiwgdHlwZSk7CisrCQlmcmVlY29uKCpzYyk7Cisr CQkqc2MgPSBzdHJkdXAoY29udGV4dF9zdHIoY29uKSk7CisrCQljb250ZXh0X2ZyZWUoY29uKTsK KysJCWlmICghKnNjKQorKwkJCXJldHVybiAtMTsKKysJfQorKyNpZmRlZiBIQVZFX0dFVF9ERUZB VUxUX0NPTlRFWFRfV0lUSF9MRVZFTAorKwlpZiAobHZsICE9IE5VTEwgJiYgbHZsWzBdKSB7Cisr CQkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVxdWVzdGVkIHJhbmdlIGlzIG9idGFpbmVkICovCisrCQlj b250ZXh0X3QgY29uOworKwkJc2VjdXJpdHlfY29udGV4dF90IG9idGFpbmVkX3JhdzsKKysJCXNl Y3VyaXR5X2NvbnRleHRfdCByZXF1ZXN0ZWRfcmF3OworKwkJY29uID0gY29udGV4dF9uZXcoKnNj KTsKKysJCWlmICghY29uKSB7CisrCQkJZ290byBvdXQ7CisrCQl9CisrCQljb250ZXh0X3Jhbmdl X3NldChjb24sIGx2bCk7CisrCQlpZiAoc2VsaW51eF90cmFuc190b19yYXdfY29udGV4dCgqc2Ms ICZvYnRhaW5lZF9yYXcpIDwgMCkgeworKwkJCWNvbnRleHRfZnJlZShjb24pOworKwkJCWdvdG8g b3V0OworKwkJfQorKwkJaWYgKHNlbGludXhfdHJhbnNfdG9fcmF3X2NvbnRleHQoY29udGV4dF9z dHIoY29uKSwgJnJlcXVlc3RlZF9yYXcpIDwgMCkgeworKwkJCWZyZWVjb24ob2J0YWluZWRfcmF3 KTsKKysJCQljb250ZXh0X2ZyZWUoY29uKTsKKysJCQlnb3RvIG91dDsKKysJCX0KKysKKysJCWRl YnVnKCJnZXRfdXNlcl9jb250ZXh0OiBvYnRhaW5lZCBjb250ZXh0ICclcycgcmVxdWVzdGVkIGNv bnRleHQgJyVzJyIsCisrCQkJb2J0YWluZWRfcmF3LCByZXF1ZXN0ZWRfcmF3KTsKKysJCWlmIChz dHJjbXAob2J0YWluZWRfcmF3LCByZXF1ZXN0ZWRfcmF3KSkgeworKwkJCS8qIHNldCB0aGUgY29u dGV4dCB0byB0aGUgcmVhbCByZXF1ZXN0ZWQgb25lIGJ1dCBmYWlsICovCisrCQkJZnJlZWNvbihy ZXF1ZXN0ZWRfcmF3KTsKKysJCQlmcmVlY29uKG9idGFpbmVkX3Jhdyk7CisrCQkJZnJlZWNvbigq c2MpOworKwkJCSpzYyA9IHN0cmR1cChjb250ZXh0X3N0cihjb24pKTsKKysJCQljb250ZXh0X2Zy ZWUoY29uKTsKKysJCQlyZXR1cm4gLTE7CisrCQl9CisrCQlmcmVlY29uKHJlcXVlc3RlZF9yYXcp OworKwkJZnJlZWNvbihvYnRhaW5lZF9yYXcpOworKwkJY29udGV4dF9mcmVlKGNvbik7CisrCX0K KysjZW5kaWYKKysJcmV0dXJuIDA7CisrICAgICAgb3V0OgorKwlmcmVlY29uKCpzYyk7CisrCSpz YyA9IE5VTEw7CisrCXJldHVybiAtMTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytzc2hfc2VsaW51 eF9nZXRfcm9sZV9sZXZlbChjaGFyICoqcm9sZSwgY29uc3QgY2hhciAqKmxldmVsLAorKyAgICBB dXRoY3R4dCAqdGhlX2F1dGhjdHh0KQorK3sKKysJKnJvbGUgPSBOVUxMOworKwkqbGV2ZWwgPSBO VUxMOworKwlpZiAodGhlX2F1dGhjdHh0KSB7CisrCQlpZiAodGhlX2F1dGhjdHh0LT5yb2xlICE9 IE5VTEwpIHsKKysJCQljaGFyICpzbGFzaDsKKysJCQkqcm9sZSA9IHhzdHJkdXAodGhlX2F1dGhj dHh0LT5yb2xlKTsKKysJCQlpZiAoKHNsYXNoID0gc3RyY2hyKCpyb2xlLCAnLycpKSAhPSBOVUxM KSB7CisrCQkJCSpzbGFzaCA9ICdcMCc7CisrCQkJCSpsZXZlbCA9IHNsYXNoICsgMTsKKysJCQl9 CisrCQl9CisrCX0KKyt9CisrCisrLyogUmV0dXJuIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGNvbnRl eHQgZm9yIHRoZSBnaXZlbiB1c2VybmFtZSAqLworK3N0YXRpYyBpbnQKKytzc2hkX3NlbGludXhf Z2V0Y3R4YnluYW1lKGNoYXIgKnB3bmFtZSwgc2VjdXJpdHlfY29udGV4dF90ICpkZWZhdWx0X3Nj LAorKyAgICBzZWN1cml0eV9jb250ZXh0X3QgKnVzZXJfc2MsIGludCBpbmV0ZCwgQXV0aGN0eHQg KnRoZV9hdXRoY3R4dCkKKyt7CisrCWNoYXIgKnNlbmFtZSwgKmx2bDsKKysJY2hhciAqcm9sZTsK KysJY29uc3QgY2hhciAqcmVxbHZsOworKwlpbnQgciA9IDA7CisrCWNvbnRleHRfdCBjb24gPSBO VUxMOworKworKwlzc2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbCgmcm9sZSwgJnJlcWx2bCwgdGhl X2F1dGhjdHh0KTsKKysKKysjaWZkZWYgSEFWRV9HRVRTRVVTRVJCWU5BTUUKKysJaWYgKChyPWdl dHNldXNlcmJ5bmFtZShwd25hbWUsICZzZW5hbWUsICZsdmwpKSAhPSAwKSB7CisrCQlzZW5hbWUg PSBOVUxMOworKwkJbHZsID0gTlVMTDsKKysJfQorKyNlbHNlCisrCXNlbmFtZSA9IHB3bmFtZTsK KysJbHZsID0gIiI7CisrI2VuZGlmCisrCisrCWlmIChyID09IDApIHsKKysjaWZkZWYgSEFWRV9H RVRfREVGQVVMVF9DT05URVhUX1dJVEhfTEVWRUwKKysJCXIgPSBnZXRfZGVmYXVsdF9jb250ZXh0 X3dpdGhfbGV2ZWwoc2VuYW1lLCBsdmwsIE5VTEwsIGRlZmF1bHRfc2MpOworKyNlbHNlCisrCQly ID0gZ2V0X2RlZmF1bHRfY29udGV4dChzZW5hbWUsIE5VTEwsIGRlZmF1bHRfc2MpOworKyNlbmRp ZgorKwl9CisrCisrCWlmIChyID09IDApIHsKKysJCS8qIElmIGxhdW5jaGVkIGZyb20geGluZXRk LCB3ZSBtdXN0IHVzZSBjdXJyZW50IGxldmVsICovCisrCQlpZiAoaW5ldGQpIHsKKysJCQlzZWN1 cml0eV9jb250ZXh0X3Qgc3NoZHNjPU5VTEw7CisrCisrCQkJaWYgKGdldGNvbl9yYXcoJnNzaGRz YykgPCAwKQorKwkJCQlmYXRhbCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNlY3VyaXR5IGNvbnRleHQi KTsKKysKKysJCQlpZiAoKGNvbj1jb250ZXh0X25ldyhzc2hkc2MpKSA9PSBOVUxMKQorKwkJCQlm YXRhbCgiZmFpbGVkIHRvIGFsbG9jYXRlIHNlbGludXggY29udGV4dCIpOworKwkJCXJlcWx2bCA9 IGNvbnRleHRfcmFuZ2VfZ2V0KGNvbik7CisrCQkJZnJlZWNvbihzc2hkc2MpOworKwkJCWlmIChy ZXFsdmwgIT1OVUxMICYmIGx2bCAhPSBOVUxMICYmIHN0cmNtcChyZXFsdmwsIGx2bCkgPT0gMCkK KysJCQkgICAgLyogd2UgYWN0dWFsbHkgZG9uJ3QgY2hhbmdlIGxldmVsICovCisrCQkJICAgIHJl cWx2bCA9ICIiOworKworKwkJCWRlYnVnX2YoImN1cnJlbnQgY29ubmVjdGlvbiBsZXZlbCAnJXMn IiwgcmVxbHZsKTsKKysKKysJCX0KKysKKysJCWlmICgocmVxbHZsICE9IE5VTEwgJiYgcmVxbHZs WzBdKSB8fCAocm9sZSAhPSBOVUxMICYmIHJvbGVbMF0pKSB7CisrCQkJciA9IGdldF91c2VyX2Nv bnRleHQoc2VuYW1lLCByb2xlLCByZXFsdmwsIHVzZXJfc2MpOworKworKwkJCWlmIChyID09IDAg JiYgcmVxbHZsICE9IE5VTEwgJiYgcmVxbHZsWzBdKSB7CisrCQkJCXNlY3VyaXR5X2NvbnRleHRf dCBkZWZhdWx0X2xldmVsX3NjID0gKmRlZmF1bHRfc2M7CisrCQkJCWlmIChyb2xlICE9IE5VTEwg JiYgcm9sZVswXSkgeworKwkJCQkJaWYgKGdldF91c2VyX2NvbnRleHQoc2VuYW1lLCByb2xlLCBs dmwsICZkZWZhdWx0X2xldmVsX3NjKSA8IDApCisrCQkJCQkJZGVmYXVsdF9sZXZlbF9zYyA9ICpk ZWZhdWx0X3NjOworKwkJCQl9CisrCQkJCS8qIHZlcmlmeSB0aGF0IHRoZSByZXF1ZXN0ZWQgcmFu Z2UgaXMgY29udGFpbmVkIGluIHRoZSB1c2VyIHJhbmdlICovCisrCQkJCWlmIChtbHNfcmFuZ2Vf YWxsb3dlZChkZWZhdWx0X2xldmVsX3NjLCAqdXNlcl9zYykpIHsKKysJCQkJCWxvZ2l0KCJwZXJt aXQgTUxTIGxldmVsICVzICh1c2VyIHJhbmdlICVzKSIsIHJlcWx2bCwgbHZsKTsKKysJCQkJfSBl bHNlIHsKKysJCQkJCXIgPSAtMTsKKysJCQkJCWVycm9yKCJkZW55IE1MUyBsZXZlbCAlcyAodXNl ciByYW5nZSAlcykiLCByZXFsdmwsIGx2bCk7CisrCQkJCX0KKysJCQkJaWYgKGRlZmF1bHRfbGV2 ZWxfc2MgIT0gKmRlZmF1bHRfc2MpCisrCQkJCQlmcmVlY29uKGRlZmF1bHRfbGV2ZWxfc2MpOwor KwkJCX0KKysJCX0gZWxzZSB7CisrCQkJKnVzZXJfc2MgPSAqZGVmYXVsdF9zYzsKKysJCX0KKysJ fQorKwlpZiAociAhPSAwKSB7CisrCQllcnJvcl9mKCJGYWlsZWQgdG8gZ2V0IGRlZmF1bHQgU0VM aW51eCBzZWN1cml0eSAiCisrCQkgICAgImNvbnRleHQgZm9yICVzIiwgcHduYW1lKTsKKysJfQor KworKyNpZmRlZiBIQVZFX0dFVFNFVVNFUkJZTkFNRQorKwlmcmVlKHNlbmFtZSk7CisrCWZyZWUo bHZsKTsKKysjZW5kaWYKKysKKysJaWYgKHJvbGUgIT0gTlVMTCkKKysJCWZyZWUocm9sZSk7Cisr CWlmIChjb24pCisrCQljb250ZXh0X2ZyZWUoY29uKTsKKysKKysJcmV0dXJuIChyKTsKKyt9Cisr CisrLyogU2V0dXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBwYW1fc2VsaW51eCAqLworK3N0 YXRpYyBpbnQKKytzc2hkX3NlbGludXhfc2V0dXBfdmFyaWFibGVzKGludCgqc2V0X2l0KShjaGFy ICosIGNvbnN0IGNoYXIgKiksIGludCBpbmV0ZCwKKysgICAgQXV0aGN0eHQgKnRoZV9hdXRoY3R4 dCkKKyt7CisrCWNvbnN0IGNoYXIgKnJlcWx2bDsKKysJY2hhciAqcm9sZTsKKysJY2hhciAqdXNl X2N1cnJlbnQ7CisrCWludCBydjsKKysKKysJZGVidWczX2YoInNldHRpbmcgZXhlY3V0aW9uIGNv bnRleHQiKTsKKysKKysJc3NoX3NlbGludXhfZ2V0X3JvbGVfbGV2ZWwoJnJvbGUsICZyZXFsdmws IHRoZV9hdXRoY3R4dCk7CisrCisrCXJ2ID0gc2V0X2l0KCJTRUxJTlVYX1JPTEVfUkVRVUVTVEVE Iiwgcm9sZSA/IHJvbGUgOiAiIik7CisrCisrCWlmIChpbmV0ZCkgeworKwkJdXNlX2N1cnJlbnQg PSAiMSI7CisrCX0gZWxzZSB7CisrCQl1c2VfY3VycmVudCA9ICIiOworKwkJcnYgPSBydiB8fCBz ZXRfaXQoIlNFTElOVVhfTEVWRUxfUkVRVUVTVEVEIiwgcmVxbHZsID8gcmVxbHZsOiAiIik7Cisr CX0KKysKKysJcnYgPSBydiB8fCBzZXRfaXQoIlNFTElOVVhfVVNFX0NVUlJFTlRfUkFOR0UiLCB1 c2VfY3VycmVudCk7CisrCisrCWlmIChyb2xlICE9IE5VTEwpCisrCQlmcmVlKHJvbGUpOworKwor KwlyZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyBpbnQKKytzc2hkX3NlbGludXhfc2V0dXBfcGFt X3ZhcmlhYmxlcyhpbnQgaW5ldGQsCisrICAgIGludChwYW1fc2V0ZW52KShjaGFyICosIGNvbnN0 IGNoYXIgKiksIEF1dGhjdHh0ICp0aGVfYXV0aGN0eHQpCisreworKwlyZXR1cm4gc3NoZF9zZWxp bnV4X3NldHVwX3ZhcmlhYmxlcyhwYW1fc2V0ZW52LCBpbmV0ZCwgdGhlX2F1dGhjdHh0KTsKKyt9 CisrCisrc3RhdGljIGludAorK2RvX3NldGVudihjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1 ZSkKKyt7CisrCXJldHVybiBzZXRlbnYobmFtZSwgdmFsdWUsIDEpOworK30KKysKKytpbnQKKytz c2hkX3NlbGludXhfc2V0dXBfZW52X3ZhcmlhYmxlcyhpbnQgaW5ldGQsIHZvaWQgKnRoZV9hdXRo Y3R4dCkKKyt7CisrCUF1dGhjdHh0ICphdXRoY3R4dCA9IChBdXRoY3R4dCAqKSB0aGVfYXV0aGN0 eHQ7CisrCXJldHVybiBzc2hkX3NlbGludXhfc2V0dXBfdmFyaWFibGVzKGRvX3NldGVudiwgaW5l dGQsIGF1dGhjdHh0KTsKKyt9CisrCisrLyogU2V0IHRoZSBleGVjdXRpb24gY29udGV4dCB0byB0 aGUgZGVmYXVsdCBmb3IgdGhlIHNwZWNpZmllZCB1c2VyICovCisrdm9pZAorK3NzaGRfc2VsaW51 eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAqcHduYW1lLCBpbnQgaW5ldGQsCisrICAgIGludChw YW1fc2V0ZW52KShjaGFyICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKnRoZV9hdXRoY3R4dCwgaW50 IHVzZV9wYW0pCisreworKwlzZWN1cml0eV9jb250ZXh0X3QgdXNlcl9jdHggPSBOVUxMOworKwlp bnQgciA9IDA7CisrCXNlY3VyaXR5X2NvbnRleHRfdCBkZWZhdWx0X2N0eCA9IE5VTEw7CisrCUF1 dGhjdHh0ICphdXRoY3R4dCA9IChBdXRoY3R4dCAqKSB0aGVfYXV0aGN0eHQ7CisrCisrCWlmICgh c3NoZF9zZWxpbnV4X2VuYWJsZWQoKSkKKysJCXJldHVybjsKKysKKysJaWYgKHVzZV9wYW0pIHsK KysJCS8qIGRvIG5vdCBjb21wdXRlIGNvbnRleHQsIGp1c3Qgc2V0dXAgZW52aXJvbm1lbnQgZm9y IHBhbV9zZWxpbnV4ICovCisrCQlpZiAoc3NoZF9zZWxpbnV4X3NldHVwX3BhbV92YXJpYWJsZXMo aW5ldGQsIHBhbV9zZXRlbnYsIGF1dGhjdHh0KSkgeworKwkJCXN3aXRjaCAoc2VjdXJpdHlfZ2V0 ZW5mb3JjZSgpKSB7CisrCQkJY2FzZSAtMToKKysJCQkJZmF0YWxfZigic2VjdXJpdHlfZ2V0ZW5m b3JjZSgpIGZhaWxlZCIpOworKwkJCWNhc2UgMDoKKysJCQkJZXJyb3JfZigiU0VMaW51eCBQQU0g dmFyaWFibGUgc2V0dXAgZmFpbHVyZS4gQ29udGludWluZyBpbiBwZXJtaXNzaXZlIG1vZGUuIik7 CisrCQkJYnJlYWs7CisrCQkJZGVmYXVsdDoKKysJCQkJZmF0YWxfZigiU0VMaW51eCBQQU0gdmFy aWFibGUgc2V0dXAgZmFpbHVyZS4gQWJvcnRpbmcgY29ubmVjdGlvbi4iKTsKKysJCQl9CisrCQl9 CisrCQlyZXR1cm47CisrCX0KKysKKysJZGVidWczX2YoInNldHRpbmcgZXhlY3V0aW9uIGNvbnRl eHQiKTsKKysKKysJciA9IHNzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUocHduYW1lLCAmZGVmYXVs dF9jdHgsICZ1c2VyX2N0eCwgaW5ldGQsIGF1dGhjdHh0KTsKKysJaWYgKHIgPj0gMCkgeworKwkJ ciA9IHNldGV4ZWNjb24odXNlcl9jdHgpOworKwkJaWYgKHIgPCAwKSB7CisrCQkJZXJyb3JfZigi RmFpbGVkIHRvIHNldCBTRUxpbnV4IGV4ZWN1dGlvbiBjb250ZXh0ICVzIGZvciAlcyIsCisrCQkJ ICAgIHVzZXJfY3R4LCBwd25hbWUpOworKwkJfQorKyNpZmRlZiBIQVZFX1NFVEtFWUNSRUFURUNP TgorKwkJZWxzZSBpZiAoc2V0a2V5Y3JlYXRlY29uKHVzZXJfY3R4KSA8IDApIHsKKysJCQllcnJv cl9mKCJGYWlsZWQgdG8gc2V0IFNFTGludXgga2V5cmluZyBjcmVhdGlvbiBjb250ZXh0ICVzIGZv ciAlcyIsCisrCQkJICAgIHVzZXJfY3R4LCBwd25hbWUpOworKwkJfQorKyNlbmRpZgorKwl9Cisr CWlmICh1c2VyX2N0eCA9PSBOVUxMKSB7CisrCQl1c2VyX2N0eCA9IGRlZmF1bHRfY3R4OworKwl9 CisrCWlmIChyIDwgMCB8fCB1c2VyX2N0eCAhPSBkZWZhdWx0X2N0eCkgeworKwkJLyogYXVkaXQg anVzdCB0aGUgY2FzZSB3aGVuIHVzZXIgY2hhbmdlZCBhIHJvbGUgb3IgdGhlcmUgd2FzCisrCQkg ICBhIGZhaWx1cmUgKi8KKysJCXNzaGRfc2VsaW51eF9zZW5kX2F1ZGl0X21lc3NhZ2UociA+PSAw LCBkZWZhdWx0X2N0eCwgdXNlcl9jdHgpOworKwl9CisrCWlmIChyIDwgMCkgeworKwkJc3dpdGNo IChzZWN1cml0eV9nZXRlbmZvcmNlKCkpIHsKKysJCWNhc2UgLTE6CisrCQkJZmF0YWxfZigic2Vj dXJpdHlfZ2V0ZW5mb3JjZSgpIGZhaWxlZCIpOworKwkJY2FzZSAwOgorKwkJCWVycm9yX2YoIkVM aW51eCBmYWlsdXJlLiBDb250aW51aW5nIGluIHBlcm1pc3NpdmUgbW9kZS4iKTsKKysJCQlicmVh azsKKysJCWRlZmF1bHQ6CisrCQkJZmF0YWxfZigiU0VMaW51eCBmYWlsdXJlLiBBYm9ydGluZyBj b25uZWN0aW9uLiIpOworKwkJfQorKwl9CisrCWlmICh1c2VyX2N0eCAhPSBOVUxMICYmIHVzZXJf Y3R4ICE9IGRlZmF1bHRfY3R4KQorKwkJZnJlZWNvbih1c2VyX2N0eCk7CisrCWlmIChkZWZhdWx0 X2N0eCAhPSBOVUxMKQorKwkJZnJlZWNvbihkZWZhdWx0X2N0eCk7CisrCisrCWRlYnVnM19mKCJk b25lIik7CisrfQorKworKyNlbmRpZgorKyNlbmRpZgorKworZGlmZiAtLWdpdCBhL29wZW5ic2Qt Y29tcGF0L3BvcnQtbGludXguYyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYworaW5kZXgg YzFkNTRmMzhkLi43NDI2ZjZmNzkgMTAwNjQ0CistLS0gYS9vcGVuYnNkLWNvbXBhdC9wb3J0LWxp bnV4LmMKKysrKyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYworQEAgLTEwOSwzNyArMTA5 LDYgQEAgc3NoX3NlbGludXhfZ2V0Y3R4YnluYW1lKGNoYXIgKnB3bmFtZSkKKyAJcmV0dXJuIHNj OworIH0KKyAKKy0vKiBTZXQgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHRoZSBkZWZhdWx0IGZv ciB0aGUgc3BlY2lmaWVkIHVzZXIgKi8KKy12b2lkCistc3NoX3NlbGludXhfc2V0dXBfZXhlY19j b250ZXh0KGNoYXIgKnB3bmFtZSkKKy17CistCWNoYXIgKnVzZXJfY3R4ID0gTlVMTDsKKy0KKy0J aWYgKCFzc2hfc2VsaW51eF9lbmFibGVkKCkpCistCQlyZXR1cm47CistCistCWRlYnVnMygiJXM6 IHNldHRpbmcgZXhlY3V0aW9uIGNvbnRleHQiLCBfX2Z1bmNfXyk7CistCistCXVzZXJfY3R4ID0g c3NoX3NlbGludXhfZ2V0Y3R4YnluYW1lKHB3bmFtZSk7CistCWlmIChzZXRleGVjY29uKHVzZXJf Y3R4KSAhPSAwKSB7CistCQlzd2l0Y2ggKHNlY3VyaXR5X2dldGVuZm9yY2UoKSkgeworLQkJY2Fz ZSAtMToKKy0JCQlmYXRhbCgiJXM6IHNlY3VyaXR5X2dldGVuZm9yY2UoKSBmYWlsZWQiLCBfX2Z1 bmNfXyk7CistCQljYXNlIDA6CistCQkJZXJyb3IoIiVzOiBGYWlsZWQgdG8gc2V0IFNFTGludXgg ZXhlY3V0aW9uICIKKy0JCQkgICAgImNvbnRleHQgZm9yICVzIiwgX19mdW5jX18sIHB3bmFtZSk7 CistCQkJYnJlYWs7CistCQlkZWZhdWx0OgorLQkJCWZhdGFsKCIlczogRmFpbGVkIHRvIHNldCBT RUxpbnV4IGV4ZWN1dGlvbiBjb250ZXh0ICIKKy0JCQkgICAgImZvciAlcyAoaW4gZW5mb3JjaW5n IG1vZGUpIiwgX19mdW5jX18sIHB3bmFtZSk7CistCQl9CistCX0KKy0JaWYgKHVzZXJfY3R4ICE9 IE5VTEwpCistCQlmcmVlY29uKHVzZXJfY3R4KTsKKy0KKy0JZGVidWczKCIlczogZG9uZSIsIF9f ZnVuY19fKTsKKy19CistCisgLyogU2V0IHRoZSBUVFkgY29udGV4dCBmb3IgdGhlIHNwZWNpZmll ZCB1c2VyICovCisgdm9pZAorIHNzaF9zZWxpbnV4X3NldHVwX3B0eShjaGFyICpwd25hbWUsIGNv bnN0IGNoYXIgKnR0eSkKK0BAIC0xNTIsNyArMTIxLDExIEBAIHNzaF9zZWxpbnV4X3NldHVwX3B0 eShjaGFyICpwd25hbWUsIGNvbnN0IGNoYXIgKnR0eSkKKyAKKyAJZGVidWczKCIlczogc2V0dGlu ZyBUVFkgY29udGV4dCBvbiAlcyIsIF9fZnVuY19fLCB0dHkpOworIAorLQl1c2VyX2N0eCA9IHNz aF9zZWxpbnV4X2dldGN0eGJ5bmFtZShwd25hbWUpOworKwlpZiAoZ2V0ZXhlY2NvbigmdXNlcl9j dHgpICE9IDApIHsKKysJCWVycm9yX2YoImdldGV4ZWNjb246ICVzIiwgc3RyZXJyb3IoZXJybm8p KTsKKysJCWdvdG8gb3V0OworKwl9CisrCisgCisgCS8qIFhYWDogc2hvdWxkIHRoZXNlIGNhbGxz IGZhdGFsKCkgdXBvbiBmYWlsdXJlIGluIGVuZm9yY2luZyBtb2RlPyAqLworIAorZGlmZiAtLWdp dCBhL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGlu dXguaAoraW5kZXggOTU5NDMwZGUxLi4yNmM1Zjc3M2IgMTAwNjQ0CistLS0gYS9vcGVuYnNkLWNv bXBhdC9wb3J0LWxpbnV4LmgKKysrKyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaAorQEAg LTIwLDkgKzIwLDEyIEBACisgI2lmZGVmIFdJVEhfU0VMSU5VWAorIGludCBzc2hfc2VsaW51eF9l bmFibGVkKHZvaWQpOworIHZvaWQgc3NoX3NlbGludXhfc2V0dXBfcHR5KGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKKy12b2lkIHNzaF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dChjaGFyICopOwor IHZvaWQgc3NoX3NlbGludXhfY2hhbmdlX2NvbnRleHQoY29uc3QgY2hhciAqKTsKKyB2b2lkIHNz aF9zZWxpbnV4X3NldGZzY3JlYXRlY29uKGNvbnN0IGNoYXIgKik7CisrCisraW50IHNzaGRfc2Vs aW51eF9lbmFibGVkKHZvaWQpOworK3ZvaWQgc3NoZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4 dChjaGFyICosIGludCwgaW50KGNoYXIgKiwgY29uc3QgY2hhciAqKSwgdm9pZCAqLCBpbnQpOwor K2ludCBzc2hkX3NlbGludXhfc2V0dXBfZW52X3ZhcmlhYmxlcyhpbnQgaW5ldGQsIHZvaWQgKik7 CisgI2VuZGlmCisgCisgI2lmZGVmIExJTlVYX09PTV9BREpVU1QKK2RpZmYgLS1naXQgYS9wbGF0 Zm9ybS5jIGIvcGxhdGZvcm0uYworaW5kZXggZmQxYTdhN2MyLi42NmQwYzJhNmIgMTAwNjQ0Cist LS0gYS9wbGF0Zm9ybS5jCisrKysgYi9wbGF0Zm9ybS5jCitAQCAtMzMsNiArMzMsOCBAQAorICNp bmNsdWRlICJvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIgorIAorIGV4dGVybiBTZXJ2 ZXJPcHRpb25zIG9wdGlvbnM7CisrZXh0ZXJuIGludCBpbmV0ZF9mbGFnOworK2V4dGVybiBBdXRo Y3R4dCAqdGhlX2F1dGhjdHh0OworIAorIC8qIHJldHVybiAxIGlmIHdlIGFyZSBydW5uaW5nIHdp dGggcHJpdmlsZWdlIHRvIHN3YXAgVUlEcywgMCBvdGhlcndpc2UgKi8KKyBpbnQKK0BAIC01NSw3 ICs1Nyw3IEBAIHBsYXRmb3JtX3NldHVzZXJjb250ZXh0KHN0cnVjdCBwYXNzd2QgKnB3KQorIHsK KyAjaWZkZWYgV0lUSF9TRUxJTlVYCisgCS8qIENhY2hlIHNlbGludXggc3RhdHVzIGZvciBsYXRl ciB1c2UgKi8KKy0JKHZvaWQpc3NoX3NlbGludXhfZW5hYmxlZCgpOworKwkodm9pZClzc2hkX3Nl bGludXhfZW5hYmxlZCgpOworICNlbmRpZgorIAorICNpZmRlZiBVU0VfU09MQVJJU19QUk9KRUNU UworQEAgLTE0MCw3ICsxNDIsOSBAQCBwbGF0Zm9ybV9zZXR1c2VyY29udGV4dF9wb3N0X2dyb3Vw cyhzdHJ1Y3QgcGFzc3dkICpwdykKKyAJfQorICNlbmRpZiAvKiBIQVZFX1NFVFBDUkVEICovCisg I2lmZGVmIFdJVEhfU0VMSU5VWAorLQlzc2hfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQocHct PnB3X25hbWUpOworKwlzc2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KHB3LT5wd19uYW1l LAorKwkgICAgaW5ldGRfZmxhZywgZG9fcGFtX3B1dGVudiwgdGhlX2F1dGhjdHh0LAorKwkgICAg b3B0aW9ucy51c2VfcGFtKTsKKyAjZW5kaWYKKyB9CisgCitkaWZmIC0tZ2l0IGEvc3NoZC1zZXNz aW9uLmMgYi9zc2hkLXNlc3Npb24uYworaW5kZXggZTlhNDg4ZDA4Li45Njc3MzdjNWIgMTAwNjQ0 CistLS0gYS9zc2hkLXNlc3Npb24uYworKysrIGIvc3NoZC1zZXNzaW9uLmMKK0BAIC0xMjMsNyAr MTIzLDcgQEAgY2hhciAqY29uZmlnX2ZpbGVfbmFtZSA9IF9QQVRIX1NFUlZFUl9DT05GSUdfRklM RTsKKyBpbnQgZGVidWdfZmxhZyA9IDA7CisgCisgLyogRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhl IGRhZW1vbiBpcyBiZWluZyBzdGFydGVkIGZyb20gaW5ldGQuICovCistc3RhdGljIGludCBpbmV0 ZF9mbGFnID0gMDsKKytpbnQgaW5ldGRfZmxhZyA9IDA7CisgCisgLyogZGVidWcgZ29lcyB0byBz dGRlcnIgdW5sZXNzIGluZXRkX2ZsYWcgaXMgc2V0ICovCisgc3RhdGljIGludCBsb2dfc3RkZXJy ID0gMDsKK0BAIC0xMjc0LDYgKzEyNzQsMTEgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKKyAJ CXJlc3RvcmVfdWlkKCk7CisgCX0KKyAjZW5kaWYKKysjaWZkZWYgV0lUSF9TRUxJTlVYCisrCXNz aGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoYXV0aGN0eHQtPnB3LT5wd19uYW1lLAorKwkg ICAgaW5ldGRfZmxhZywgZG9fcGFtX3B1dGVudiwgdGhlX2F1dGhjdHh0LAorKwkgICAgb3B0aW9u cy51c2VfcGFtKTsKKysjZW5kaWYKKyAjaWZkZWYgVVNFX1BBTQorIAlpZiAob3B0aW9ucy51c2Vf cGFtKSB7CisgCQlkb19wYW1fc2V0Y3JlZCgpOworLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBh LzAwMDItb3BlbnNzaC02LjZwMS1rZXljYXQucGF0Y2ggYi8wMDAyLW9wZW5zc2gtNi42cDEta2V5 Y2F0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTk2NjM2Li4wMDAwMDAw Ci0tLSBhLzAwMDItb3BlbnNzaC02LjZwMS1rZXljYXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAt MSw1MDIgKzAsMCBAQAotRnJvbSA1ZjE2ZmZmOTE1NjQzYTUxNWFkYmJkMmUwY2QxMjcxNzkzOGUz NTcwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJl bGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAot U3ViamVjdDogW1BBVENIIDAyLzUzXSBvcGVuc3NoLTYuNnAxLWtleWNhdAotCi0tLS0KLSBIT1dU Ty5zc2gta2V5Y2F0ICAgICAgICAgICAgICAgICB8ICAxMiArKwotIE1ha2VmaWxlLmluICAgICAg ICAgICAgICAgICAgICAgIHwgICA4ICstCi0gY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAg ICAgfCAgIDYgKwotIG1pc2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKLSBv cGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYyB8ICA0MiArKysrKy0KLSBvcGVuYnNkLWNv bXBhdC9wb3J0LWxpbnV4LmggICAgICB8ICAgMSArCi0gcGxhdGZvcm0uYyAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDIgKy0KLSBzc2gta2V5Y2F0LmMgICAgICAgICAgICAgICAgICAgICB8IDI0 MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0gOCBmaWxlcyBjaGFuZ2VkLCAzMTIg aW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKLSBjcmVhdGUgbW9kZSAxMDA2NDQgSE9XVE8u c3NoLWtleWNhdAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzc2gta2V5Y2F0LmMKLQotZGlmZiAtLWdp dCBhL0hPV1RPLnNzaC1rZXljYXQgYi9IT1dUTy5zc2gta2V5Y2F0Ci1uZXcgZmlsZSBtb2RlIDEw MDY0NAotaW5kZXggMDAwMDAwMDAwLi42MzBlYzYyOGMKLS0tLSAvZGV2L251bGwKLSsrKyBiL0hP V1RPLnNzaC1rZXljYXQKLUBAIC0wLDAgKzEsMTIgQEAKLStUaGUgc3NoLWtleWNhdCByZXRyaWV2 ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIH4vLnNzaC9hdXRob3JpemVkX2tleXMKLStvZiBhbiB1c2Vy IGluIGFueSBlbnZpcm9ubWVudC4gVGhpcyBpbmNsdWRlcyBlbnZpcm9ubWVudHMgd2l0aAotK3Bv bHlpbnN0YW50aWF0aW9uIG9mIGhvbWUgZGlyZWN0b3JpZXMgYW5kIFNFTGludXggTUxTIHBvbGlj eSBlbmFibGVkLgotKwotK1RvIHVzZSBzc2gta2V5Y2F0LCBzZXQgdGhlc2Ugb3B0aW9ucyBpbiAv ZXRjL3NzaC9zc2hkX2NvbmZpZyBmaWxlOgotKyAgICAgICAgQXV0aG9yaXplZEtleXNDb21tYW5k IC91c3IvbGliZXhlYy9vcGVuc3NoL3NzaC1rZXljYXQKLSsgICAgICAgIEF1dGhvcml6ZWRLZXlz Q29tbWFuZFVzZXIgcm9vdAotKwotK0RvIG5vdCBmb3JnZXQgdG8gZW5hYmxlIHB1YmxpYyBrZXkg YXV0aGVudGljYXRpb246Ci0rICAgICAgICBQdWJrZXlBdXRoZW50aWNhdGlvbiB5ZXMKLSsKLSsK LWRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCi1pbmRleCBiYTE3YTc5ZjAu LmEzYTQ5NWMxYiAxMDA2NDQKLS0tLSBhL01ha2VmaWxlLmluCi0rKysgYi9NYWtlZmlsZS5pbgot QEAgLTIzLDYgKzIzLDcgQEAgU1NIX1BST0dSQU09QGJpbmRpckAvc3NoCi0gQVNLUEFTU19QUk9H UkFNPSQobGliZXhlY2Rpcikvc3NoLWFza3Bhc3MKLSBTRlRQX1NFUlZFUj0kKGxpYmV4ZWNkaXIp L3NmdHAtc2VydmVyCi0gU1NIX0tFWVNJR049JChsaWJleGVjZGlyKS9zc2gta2V5c2lnbgotK1NT SF9LRVlDQVQ9JChsaWJleGVjZGlyKS9zc2gta2V5Y2F0Ci0gU1NIRF9TRVNTSU9OPSQobGliZXhl Y2Rpcikvc3NoZC1zZXNzaW9uCi0gU1NIRF9BVVRIPSQobGliZXhlY2Rpcikvc3NoZC1hdXRoCi0g U1NIX1BLQ1MxMV9IRUxQRVI9JChsaWJleGVjZGlyKS9zc2gtcGtjczExLWhlbHBlcgotQEAgLTU4 LDYgKzU5LDcgQEAgQ0hBTk5FTExJQlM9QENIQU5ORUxMSUJTQAotIEs1TElCUz1ASzVMSUJTQAot IEdTU0xJQlM9QEdTU0xJQlNACi0gU1NIRExJQlM9QFNTSERMSUJTQAotK0tFWUNBVExJQlM9QEtF WUNBVExJQlNACi0gTElCRURJVD1ATElCRURJVEAKLSBMSUJGSURPMj1ATElCRklETzJACi0gTElC V1RNUERCPUBMSUJXVE1QREJACi1AQCAtNzUsNyArNzcsNyBAQCBNS0RJUl9QPUBNS0RJUl9QQAot IAotIC5TVUZGSVhFUzogLmxvCi0gCi0tVEFSR0VUUz1zc2gkKEVYRUVYVCkgc3NoZCQoRVhFRVhU KSBzc2hkLXNlc3Npb24kKEVYRUVYVCkgc3NoZC1hdXRoJChFWEVFWFQpIHNzaC1hZGQkKEVYRUVY VCkgc3NoLWtleWdlbiQoRVhFRVhUKSBzc2gta2V5c2NhbiR7RVhFRVhUfSBzc2gta2V5c2lnbiR7 RVhFRVhUfSBzc2gtcGtjczExLWhlbHBlciQoRVhFRVhUKSBzc2gtYWdlbnQkKEVYRUVYVCkgc2Nw JChFWEVFWFQpIHNmdHAtc2VydmVyJChFWEVFWFQpIHNmdHAkKEVYRUVYVCkgc3NoLXNrLWhlbHBl ciQoRVhFRVhUKSAkKFNLX1NUQU5EQUxPTkUpCi0rVEFSR0VUUz1zc2gkKEVYRUVYVCkgc3NoZCQo RVhFRVhUKSBzc2hkLXNlc3Npb24kKEVYRUVYVCkgc3NoZC1hdXRoJChFWEVFWFQpIHNzaC1hZGQk KEVYRUVYVCkgc3NoLWtleWdlbiQoRVhFRVhUKSBzc2gta2V5c2NhbiR7RVhFRVhUfSBzc2gta2V5 c2lnbiR7RVhFRVhUfSBzc2gtcGtjczExLWhlbHBlciQoRVhFRVhUKSBzc2gtYWdlbnQkKEVYRUVY VCkgc2NwJChFWEVFWFQpIHNmdHAtc2VydmVyJChFWEVFWFQpIHNmdHAkKEVYRUVYVCkgc3NoLXNr LWhlbHBlciQoRVhFRVhUKSBzc2gta2V5Y2F0JChFWEVFWFQpICQoU0tfU1RBTkRBTE9ORSkKLSAK LSBMSUJPUEVOU1NIX09CSlM9XAotIAlzc2hfYXBpLm8gXAotQEAgLTI1Miw2ICsyNTQsOSBAQCBz c2gtcGtjczExLWhlbHBlciQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5hICQoUDExSEVM UEVSX09CSlMpCi0gc3NoLXNrLWhlbHBlciQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5h ICQoU0tIRUxQRVJfT0JKUykKLSAJJChMRCkgLW8gJEAgJChTS0hFTFBFUl9PQkpTKSAkKExERkxB R1MpIC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAkKExJQlMp ICQoTElCRklETzIpICQoQ0hBTk5FTExJQlMpCi0gCi0rc3NoLWtleWNhdCQoRVhFRVhUKTogJChM SUJDT01QQVQpICQoU1NIRE9CSlMpIGxpYnNzaC5hIHNzaC1rZXljYXQubyB1aWRzd2FwLm8KLSsJ JChMRCkgLW8gJEAgc3NoLWtleWNhdC5vIHVpZHN3YXAubyAkKExERkxBR1MpIC1sc3NoIC1sb3Bl bmJzZC1jb21wYXQgJChLRVlDQVRMSUJTKSAkKExJQlMpCi0rCi0gc3NoLWtleXNjYW4kKEVYRUVY VCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFNTSEtFWVNDQU5fT0JKUykKLSAJJChMRCkgLW8g JEAgJChTU0hLRVlTQ0FOX09CSlMpICQoTERGTEFHUykgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAt bHNzaCAkKExJQlMpICQoQ0hBTk5FTExJQlMpCi0gCi1AQCAtNDM5LDYgKzQ0NCw3IEBAIGluc3Rh bGwtZmlsZXM6Ci0gCSQoSU5TVEFMTCkgLW0gNDcxMSAkKFNUUklQX09QVCkgc3NoLWtleXNpZ24k KEVYRUVYVCkgJChERVNURElSKSQoU1NIX0tFWVNJR04pJChFWEVFWFQpCi0gCSQoSU5TVEFMTCkg LW0gMDc1NSAkKFNUUklQX09QVCkgc3NoLXBrY3MxMS1oZWxwZXIkKEVYRUVYVCkgJChERVNURElS KSQoU1NIX1BLQ1MxMV9IRUxQRVIpJChFWEVFWFQpCi0gCSQoSU5TVEFMTCkgLW0gMDc1NSAkKFNU UklQX09QVCkgc3NoLXNrLWhlbHBlciQoRVhFRVhUKSAkKERFU1RESVIpJChTU0hfU0tfSEVMUEVS KSQoRVhFRVhUKQotKwkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNzaC1rZXljYXQk KEVYRUVYVCkgJChERVNURElSKSQobGliZXhlY2Rpcikvc3NoLWtleWNhdCQoRVhFRVhUKQotIAkk KElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNmdHAkKEVYRUVYVCkgJChERVNURElSKSQo YmluZGlyKS9zZnRwJChFWEVFWFQpCi0gCSQoSU5TVEFMTCkgLW0gMDc1NSAkKFNUUklQX09QVCkg c2Z0cC1zZXJ2ZXIkKEVYRUVYVCkgJChERVNURElSKSQoU0ZUUF9TRVJWRVIpJChFWEVFWFQpCi0g CSQoSU5TVEFMTCkgLW0gNjQ0IHNzaC4xLm91dCAkKERFU1RESVIpJChtYW5kaXIpLyQobWFuc3Vi ZGlyKTEvc3NoLjEKLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWlu ZGV4IGRiNTIxMTAxMy4uZmQ2MzJhNWE4IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysg Yi9jb25maWd1cmUuYWMKLUBAIC0zNjQ4LDYgKzM2NDgsNyBAQCBBQ19BUkdfV0lUSChbcGFtXSwK LSAJCQlQQU1fTVNHPSJ5ZXMiCi0gCi0gCQkJU1NIRExJQlM9IiRTU0hETElCUyAtbHBhbSIKLSsJ CQlLRVlDQVRMSUJTPSIkS0VZQ0FUTElCUyAtbHBhbSIKLSAJCQlBQ19ERUZJTkUoW1VTRV9QQU1d LCBbMV0sCi0gCQkJCVtEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFBBTSBzdXBwb3J0XSkK LSAKLUBAIC0zNjU4LDYgKzM2NTksNyBAQCBBQ19BUkdfV0lUSChbcGFtXSwKLSAJCQkJCTs7Ci0g CQkJCSopCi0gCQkJCQlTU0hETElCUz0iJFNTSERMSUJTIC1sZGwiCi0rCQkJCQlLRVlDQVRMSUJT PSIkS0VZQ0FUTElCUyAtbGRsIgotIAkJCQkJOzsKLSAJCQkJZXNhYwotIAkJCWZpCi1AQCAtNDg4 Myw2ICs0ODg1LDcgQEAgQUNfQVJHX1dJVEgoW3NlbGludXhdLAotIAlmaSBdCi0gKQotIEFDX1NV QlNUKFtTU0hETElCU10pCi0rQUNfU1VCU1QoW0tFWUNBVExJQlNdKQotIAotICMgQ2hlY2sgd2hl dGhlciB1c2VyIHdhbnRzIEtlcmJlcm9zIDUgc3VwcG9ydAotIEtSQjVfTVNHPSJubyIKLUBAIC01 ODk0LDYgKzU4OTcsOSBAQCBmaQotIGlmIHRlc3QgISAteiAiJHtTU0hETElCU30iOyB0aGVuCi0g ZWNobyAiICAgICAgICAgK2ZvciBzc2hkOiAke1NTSERMSUJTfSIKLSBmaQotK2lmIHRlc3QgISAt eiAiJHtLRVlDQVRMSUJTfSI7IHRoZW4KLStlY2hvICIgICArZm9yIHNzaC1rZXljYXQ6ICR7S0VZ Q0FUTElCU30iCi0rZmkKLSAKLSBlY2hvICIiCi0gCi1kaWZmIC0tZ2l0IGEvbWlzYy5jIGIvbWlz Yy5jCi1pbmRleCA1YmVkMzQ3MzUuLjdlMjdhMzhkMSAxMDA2NDQKLS0tLSBhL21pc2MuYwotKysr IGIvbWlzYy5jCi1AQCAtMjkyMSw2ICsyOTIxLDEzIEBAIHN1YnByb2Nlc3MoY29uc3QgY2hhciAq dGFnLCBjb25zdCBjaGFyICpjb21tYW5kLAotIAkJCWVycm9yKCIlczogZHVwMjogJXMiLCB0YWcs IHN0cmVycm9yKGVycm5vKSk7Ci0gCQkJX2V4aXQoMSk7Ci0gCQl9Ci0rI2lmZGVmIFdJVEhfU0VM SU5VWAotKwkJaWYgKHNzaGRfc2VsaW51eF9zZXR1cF9lbnZfdmFyaWFibGVzKCkgPCAwKSB7Ci0r CQkJZXJyb3IgKCJmYWlsZWQgdG8gY29weSBlbnZpcm9ubWVudDogICVzIiwKLSsJCQkgICAgc3Ry ZXJyb3IoZXJybm8pKTsKLSsJCQlfZXhpdCgxMjcpOwotKwkJfQotKyNlbmRpZgotIAkJaWYgKGVu diAhPSBOVUxMKQotIAkJCWV4ZWN2ZShhdlswXSwgYXYsIGVudik7Ci0gCQllbHNlCi1kaWZmIC0t Z2l0IGEvb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC1zc2hkLmMgYi9vcGVuYnNkLWNvbXBhdC9w b3J0LWxpbnV4LXNzaGQuYwotaW5kZXggYjlmYmUzOGI3Li40ZDU2NzQ1ZjcgMTAwNjQ0Ci0tLS0g YS9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYwotKysrIGIvb3BlbmJzZC1jb21wYXQv cG9ydC1saW51eC1zc2hkLmMKLUBAIC01Miw2ICs1MiwyMCBAQCBleHRlcm4gU2VydmVyT3B0aW9u cyBvcHRpb25zOwotIGV4dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OwotIGV4dGVybiBpbnQg aW5ldGRfZmxhZzsKLSAKLSsvKiBXcmFwcGVyIGFyb3VuZCBpc19zZWxpbnV4X2VuYWJsZWQoKSB0 byBsb2cgaXRzIHJldHVybiB2YWx1ZSBvbmNlIG9ubHkgKi8KLStpbnQKLStzc2hkX3NlbGludXhf ZW5hYmxlZCh2b2lkKQotK3sKLSsJc3RhdGljIGludCBlbmFibGVkID0gLTE7Ci0rCi0rCWlmIChl bmFibGVkID09IC0xKSB7Ci0rCQllbmFibGVkID0gKGlzX3NlbGludXhfZW5hYmxlZCgpID09IDEp OwotKwkJZGVidWcoIlNFTGludXggc3VwcG9ydCAlcyIsIGVuYWJsZWQgPyAiZW5hYmxlZCIgOiAi ZGlzYWJsZWQiKTsKLSsJfQotKwotKwlyZXR1cm4gKGVuYWJsZWQpOwotK30KLSsKLSAvKiBTZW5k IGF1ZGl0IG1lc3NhZ2UgKi8KLSBzdGF0aWMgaW50Ci0gc3NoZF9zZWxpbnV4X3NlbmRfYXVkaXRf bWVzc2FnZShpbnQgc3VjY2Vzcywgc2VjdXJpdHlfY29udGV4dF90IGRlZmF1bHRfY29udGV4dCwK LUBAIC0zMTcsNyArMzMxLDcgQEAgc3NoZF9zZWxpbnV4X2dldGN0eGJ5bmFtZShjaGFyICpwd25h bWUsCi0gCi0gLyogU2V0dXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBwYW1fc2VsaW51eCAq LwotIHN0YXRpYyBpbnQKLS1zc2hkX3NlbGludXhfc2V0dXBfcGFtX3ZhcmlhYmxlcyh2b2lkKQot K3NzaGRfc2VsaW51eF9zZXR1cF92YXJpYWJsZXMoaW50KCpzZXRfaXQpKGNoYXIgKiwgY29uc3Qg Y2hhciAqKSkKLSB7Ci0gCWNvbnN0IGNoYXIgKnJlcWx2bDsKLSAJY2hhciAqcm9sZTsKLUBAIC0z MjgsMTYgKzM0MiwxNiBAQCBzc2hkX3NlbGludXhfc2V0dXBfcGFtX3ZhcmlhYmxlcyh2b2lkKQot IAotIAlzc2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbCgmcm9sZSwgJnJlcWx2bCk7Ci0gCi0tCXJ2 ID0gZG9fcGFtX3B1dGVudigiU0VMSU5VWF9ST0xFX1JFUVVFU1RFRCIsIHJvbGUgPyByb2xlIDog IiIpOwotKwlydiA9IHNldF9pdCgiU0VMSU5VWF9ST0xFX1JFUVVFU1RFRCIsIHJvbGUgPyByb2xl IDogIiIpOwotIAotIAlpZiAoaW5ldGRfZmxhZykgewotIAkJdXNlX2N1cnJlbnQgPSAiMSI7Ci0g CX0gZWxzZSB7Ci0gCQl1c2VfY3VycmVudCA9ICIiOwotLQkJcnYgPSBydiB8fCBkb19wYW1fcHV0 ZW52KCJTRUxJTlVYX0xFVkVMX1JFUVVFU1RFRCIsIHJlcWx2bCA/IHJlcWx2bDogIiIpOwotKwkJ cnYgPSBydiB8fCBzZXRfaXQoIlNFTElOVVhfTEVWRUxfUkVRVUVTVEVEIiwgcmVxbHZsID8gcmVx bHZsOiAiIik7Ci0gCX0KLSAKLS0JcnYgPSBydiB8fCBkb19wYW1fcHV0ZW52KCJTRUxJTlVYX1VT RV9DVVJSRU5UX1JBTkdFIiwgdXNlX2N1cnJlbnQpOwotKwlydiA9IHJ2IHx8IHNldF9pdCgiU0VM SU5VWF9VU0VfQ1VSUkVOVF9SQU5HRSIsIHVzZV9jdXJyZW50KTsKLSAKLSAJaWYgKHJvbGUgIT0g TlVMTCkKLSAJCWZyZWUocm9sZSk7Ci1AQCAtMzQ1LDYgKzM1OSwyNCBAQCBzc2hkX3NlbGludXhf c2V0dXBfcGFtX3ZhcmlhYmxlcyh2b2lkKQotIAlyZXR1cm4gcnY7Ci0gfQotIAotK3N0YXRpYyBp bnQKLStzc2hkX3NlbGludXhfc2V0dXBfcGFtX3ZhcmlhYmxlcyh2b2lkKQotK3sKLSsJcmV0dXJu IHNzaGRfc2VsaW51eF9zZXR1cF92YXJpYWJsZXMoZG9fcGFtX3B1dGVudik7Ci0rfQotKwotK3N0 YXRpYyBpbnQKLStkb19zZXRlbnYoY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCi0rewot KwlyZXR1cm4gc2V0ZW52KG5hbWUsIHZhbHVlLCAxKTsKLSt9Ci0rCi0raW50Ci0rc3NoZF9zZWxp bnV4X3NldHVwX2Vudl92YXJpYWJsZXModm9pZCkKLSt7Ci0rCXJldHVybiBzc2hkX3NlbGludXhf c2V0dXBfdmFyaWFibGVzKGRvX3NldGVudik7Ci0rfQotKwotIC8qIFNldCB0aGUgZXhlY3V0aW9u IGNvbnRleHQgdG8gdGhlIGRlZmF1bHQgZm9yIHRoZSBzcGVjaWZpZWQgdXNlciAqLwotIHZvaWQK LSBzc2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KGNoYXIgKnB3bmFtZSkKLUBAIC0zNTMs NyArMzg1LDcgQEAgc3NoZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dChjaGFyICpwd25hbWUp Ci0gCWludCByID0gMDsKLSAJc2VjdXJpdHlfY29udGV4dF90IGRlZmF1bHRfY3R4ID0gTlVMTDsK LSAKLS0JaWYgKCFzc2hfc2VsaW51eF9lbmFibGVkKCkpCi0rCWlmICghc3NoZF9zZWxpbnV4X2Vu YWJsZWQoKSkKLSAJCXJldHVybjsKLSAKLSAJaWYgKG9wdGlvbnMudXNlX3BhbSkgewotZGlmZiAt LWdpdCBhL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBiL29wZW5ic2QtY29tcGF0L3BvcnQt bGludXguaAotaW5kZXggMDU1YzgyNWU0Li5jMDA0MDcxZDEgMTAwNjQ0Ci0tLS0gYS9vcGVuYnNk LWNvbXBhdC9wb3J0LWxpbnV4LmgKLSsrKyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaAot QEAgLTI0LDYgKzI0LDcgQEAgdm9pZCBzc2hfc2VsaW51eF9jaGFuZ2VfY29udGV4dChjb25zdCBj aGFyICopOwotIHZvaWQgc3NoX3NlbGludXhfc2V0ZnNjcmVhdGVjb24oY29uc3QgY2hhciAqKTsK LSAKLSB2b2lkIHNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAqKTsKLStpbnQg c3NoZF9zZWxpbnV4X3NldHVwX2Vudl92YXJpYWJsZXModm9pZCk7Ci0gI2VuZGlmCi0gCi0gI2lm ZGVmIExJTlVYX09PTV9BREpVU1QKLWRpZmYgLS1naXQgYS9wbGF0Zm9ybS5jIGIvcGxhdGZvcm0u YwotaW5kZXggYmNmMWIwNDkxLi5jOTJhMGNiYTYgMTAwNjQ0Ci0tLS0gYS9wbGF0Zm9ybS5jCi0r KysgYi9wbGF0Zm9ybS5jCi1AQCAtNTUsNyArNTUsNyBAQCBwbGF0Zm9ybV9zZXR1c2VyY29udGV4 dChzdHJ1Y3QgcGFzc3dkICpwdykKLSB7Ci0gI2lmZGVmIFdJVEhfU0VMSU5VWAotIAkvKiBDYWNo ZSBzZWxpbnV4IHN0YXR1cyBmb3IgbGF0ZXIgdXNlICovCi0tCSh2b2lkKXNzaF9zZWxpbnV4X2Vu YWJsZWQoKTsKLSsJKHZvaWQpc3NoZF9zZWxpbnV4X2VuYWJsZWQoKTsKLSAjZW5kaWYKLSAKLSAj aWZkZWYgVVNFX1NPTEFSSVNfUFJPSkVDVFMKLWRpZmYgLS1naXQgYS9zc2gta2V5Y2F0LmMgYi9z c2gta2V5Y2F0LmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAuLjU2Nzhi ZTA3OQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3NoLWtleWNhdC5jCi1AQCAtMCwwICsxLDI0MSBA QAotKy8qCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2Ug aW4gaXRzIGVudGlyZXR5LAotKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJy YW50aWVzLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCi0rICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8g ZW5kb3JzZSBvciBwcm9tb3RlCi0rICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4K LSsgKgotKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgcHJvZHVjdCBtYXkgYmUgZGlzdHJpYnV0ZWQg dW5kZXIgdGhlIHRlcm1zIG9mCi0rICogdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgaW4gd2hpY2gg Y2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZQotKyAqIHJlcXVpcmVkIElOU1RFQUQg T0YgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy4gIChUaGlzIGNsYXVzZSBpcwotKyAqIG5lY2Vzc2Fy eSBkdWUgdG8gYSBwb3RlbnRpYWwgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEdQTCBhbmQK LSsgKiB0aGUgcmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiBhIEJTRC1zdHlsZSBjb3B5cmlnaHQu KQotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBF WFBSRVNTIE9SIElNUExJRUQKLSsgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0rICogRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAot KyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUwotKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KLSsgKi8KLSsKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAxMSBSZWQgSGF0 LCBJbmMuCi0rICogV3JpdHRlbiBieSBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQuY29tPgotKyov Ci0rCi0rI2RlZmluZSBfR05VX1NPVVJDRQotKwotKyNpbmNsdWRlICJjb25maWcuaCIKLSsjaW5j bHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjaW5j bHVkZSA8cHdkLmg+Ci0rI2luY2x1ZGUgPGZjbnRsLmg+Ci0rI2luY2x1ZGUgPHVuaXN0ZC5oPgot KyNpZmRlZiBIQVZFX1NURElOVF9ICi0rI2luY2x1ZGUgPHN0ZGludC5oPgotKyNlbmRpZgotKwot KyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fYXBwbC5oPgotKwotKyNpbmNsdWRlICJ1aWRzd2FwLmgi Ci0rI2luY2x1ZGUgIm1pc2MuaCIKLSsKLSsjZGVmaW5lIEVSUl9VU0FHRSAxCi0rI2RlZmluZSBF UlJfUEFNX1NUQVJUIDIKLSsjZGVmaW5lIEVSUl9PUEVOX1NFU1NJT04gMwotKyNkZWZpbmUgRVJS X0NMT1NFX1NFU1NJT04gNAotKyNkZWZpbmUgRVJSX1BBTV9FTkQgNQotKyNkZWZpbmUgRVJSX0dF VFBXTkFNIDYKLSsjZGVmaW5lIEVSUl9NRU1PUlkgNwotKyNkZWZpbmUgRVJSX09QRU4gOAotKyNk ZWZpbmUgRVJSX0ZJTEVfTU9ERSA5Ci0rI2RlZmluZSBFUlJfRkRPUEVOIDEwCi0rI2RlZmluZSBF UlJfU1RBVCAxMQotKyNkZWZpbmUgRVJSX1dSSVRFIDEyCi0rI2RlZmluZSBFUlJfUEFNX1BVVEVO ViAxMwotKyNkZWZpbmUgQlVGTEVOIDQwOTYKLSsKLSsvKiBKdXN0IGlnbm9yZSB0aGUgbWVzc2Fn ZXMgaW4gdGhlIGNvbnZlcnNhdGlvbiBmdW5jdGlvbiAqLwotK3N0YXRpYyBpbnQKLStkdW1teV9j b252KGludCBudW1fbXNnLCBjb25zdCBzdHJ1Y3QgcGFtX21lc3NhZ2UgKiptc2dtLAotKwkgICBz dHJ1Y3QgcGFtX3Jlc3BvbnNlICoqcmVzcG9uc2UsIHZvaWQgKmFwcGRhdGFfcHRyKQotK3sKLSsJ c3RydWN0IHBhbV9yZXNwb25zZSAqcnNwOwotKwotKwkodm9pZCltc2dtOwotKwkodm9pZClhcHBk YXRhX3B0cjsKLSsKLSsJaWYgKG51bV9tc2cgPD0gMCkKLSsJCXJldHVybiBQQU1fQ09OVl9FUlI7 Ci0rCi0rCS8qIEp1c3QgYWxsb2NhdGUgdGhlIGFycmF5IGFzIGVtcHR5IHJlc3BvbnNlcyAqLwot Kwlyc3AgPSBjYWxsb2MgKG51bV9tc2csIHNpemVvZiAoc3RydWN0IHBhbV9yZXNwb25zZSkpOwot KwlpZiAocnNwID09IE5VTEwpCi0rCQlyZXR1cm4gUEFNX0NPTlZfRVJSOwotKwotKwkqcmVzcG9u c2UgPSByc3A7Ci0rCXJldHVybiBQQU1fU1VDQ0VTUzsKLSt9Ci0rCi0rc3RhdGljIHN0cnVjdCBw YW1fY29udiBjb252ID0gewotKwlkdW1teV9jb252LAotKwlOVUxMCi0rfTsKLSsKLStjaGFyICoK LSttYWtlX2F1dGhfa2V5c19uYW1lKGNvbnN0IHN0cnVjdCBwYXNzd2QgKnB3ZCkKLSt7Ci0rCWNo YXIgKmZuYW1lOwotKwotKwlpZiAoYXNwcmludGYoJmZuYW1lLCAiJXMvLnNzaC9hdXRob3JpemVk X2tleXMiLCBwd2QtPnB3X2RpcikgPCAwKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCXJldHVybiBm bmFtZTsKLSt9Ci0rCi0raW50Ci0rZHVtcF9rZXlzKGNvbnN0IGNoYXIgKnVzZXIpCi0rewotKwlz dHJ1Y3QgcGFzc3dkICpwd2Q7Ci0rCWludCBmZCA9IC0xOwotKwlGSUxFICpmID0gTlVMTDsKLSsJ Y2hhciAqZm5hbWUgPSBOVUxMOwotKwlpbnQgcnYgPSAwOwotKwljaGFyIGJ1ZltCVUZMRU5dOwot KwlzaXplX3QgbGVuOwotKwlzdHJ1Y3Qgc3RhdCBzdDsKLSsKLSsJaWYgKChwd2QgPSBnZXRwd25h bSh1c2VyKSkgPT0gTlVMTCkgewotKwkJcmV0dXJuIEVSUl9HRVRQV05BTTsKLSsJfQotKwotKwlp ZiAoKGZuYW1lID0gbWFrZV9hdXRoX2tleXNfbmFtZShwd2QpKSA9PSBOVUxMKSB7Ci0rCQlyZXR1 cm4gRVJSX01FTU9SWTsKLSsJfQotKwotKwl0ZW1wb3JhcmlseV91c2VfdWlkKHB3ZCk7Ci0rCi0r CWlmICgoZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWXxPX05PTkJMT0NLfE9fTk9GT0xMT1csIDAp KSA8IDApIHsKLSsJCXJ2ID0gRVJSX09QRU47Ci0rCQlnb3RvIGZhaWw7Ci0rCX0KLSsKLSsJaWYg KGZzdGF0KGZkLCAmc3QpIDwgMCkgewotKwkJcnYgPSBFUlJfU1RBVDsKLSsJCWdvdG8gZmFpbDsK LSsJfQotKwotKwlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkgfHwgCi0rCQkoc3Quc3RfdWlkICE9 IHB3ZC0+cHdfdWlkICYmIHN0LnN0X3VpZCAhPSAwKSkgewotKwkJcnYgPSBFUlJfRklMRV9NT0RF OwotKwkJZ290byBmYWlsOwotKwl9Ci0rCi0rCXVuc2V0X25vbmJsb2NrKGZkKTsKLSsKLSsJaWYg KChmID0gZmRvcGVuKGZkLCAiciIpKSA9PSBOVUxMKSB7Ci0rCQlydiA9IEVSUl9GRE9QRU47Ci0r CQlnb3RvIGZhaWw7Ci0rCX0KLSsKLSsJZmQgPSAtMTsKLSsKLSsJd2hpbGUgKChsZW4gPSBmcmVh ZChidWYsIDEsIHNpemVvZihidWYpLCBmKSkgPiAwKSB7Ci0rCQlydiA9IGZ3cml0ZShidWYsIDEs IGxlbiwgc3Rkb3V0KSAhPSBsZW4gPyBFUlJfV1JJVEUgOiAwOwotKwl9Ci0rCi0rZmFpbDoKLSsJ aWYgKGZkICE9IC0xKQotKwkJY2xvc2UoZmQpOwotKwlpZiAoZiAhPSBOVUxMKQotKwkJZmNsb3Nl KGYpOwotKwlmcmVlKGZuYW1lKTsKLSsJcmVzdG9yZV91aWQoKTsKLSsJcmV0dXJuIHJ2OwotK30K LSsKLStzdGF0aWMgY29uc3QgY2hhciAqZW52X25hbWVzW10gPSB7ICJTRUxJTlVYX1JPTEVfUkVR VUVTVEVEIiwKLSsJIlNFTElOVVhfTEVWRUxfUkVRVUVTVEVEIiwKLSsJIlNFTElOVVhfVVNFX0NV UlJFTlRfUkFOR0UiCi0rfTsKLSsKLStleHRlcm4gY2hhciAqKmVudmlyb247Ci0rCi0raW50Ci0r c2V0X3BhbV9lbnZpcm9ubWVudChwYW1faGFuZGxlX3QgKnBhbWgpCi0rewotKwlpbnQgaTsKLSsJ c2l6ZV90IGo7Ci0rCi0rCWZvciAoaiA9IDA7IGogPCBzaXplb2YoZW52X25hbWVzKS9zaXplb2Yo ZW52X25hbWVzWzBdKTsgKytqKSB7Ci0rCQlpbnQgbGVuID0gc3RybGVuKGVudl9uYW1lc1tqXSk7 Ci0rCi0rCQlmb3IgKGkgPSAwOyBlbnZpcm9uW2ldICE9IE5VTEw7ICsraSkgewotKwkJCWlmIChz dHJuY21wKGVudl9uYW1lc1tqXSwgZW52aXJvbltpXSwgbGVuKSA9PSAwICYmCi0rCQkJICAgIGVu dmlyb25baV1bbGVuXSA9PSAnPScpIHsKLSsJCQkJaWYgKHBhbV9wdXRlbnYocGFtaCwgZW52aXJv bltpXSkgIT0gUEFNX1NVQ0NFU1MpCi0rCQkJCQlyZXR1cm4gRVJSX1BBTV9QVVRFTlY7Ci0rCQkJ fQotKwkJfQotKwl9Ci0rCi0rCXJldHVybiAwOwotK30KLSsKLStpbnQKLSttYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCi0rewotKwlwYW1faGFuZGxlX3QgKnBhbWggPSBOVUxMOwotKwlpbnQg cmV0dmFsOwotKwlpbnQgZXYgPSAwOwotKwotKwlpZiAoYXJnYyAhPSAyKSB7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIlVzYWdlOiAlcyA8dXNlci1uYW1lPlxuIiwgYXJndlswXSk7Ci0rCQlyZXR1cm4g RVJSX1VTQUdFOwotKwl9Ci0rCi0rCXJldHZhbCA9IHBhbV9zdGFydCgic3NoLWtleWNhdCIsIGFy Z3ZbMV0sICZjb252LCAmcGFtaCk7Ci0rCWlmIChyZXR2YWwgIT0gUEFNX1NVQ0NFU1MpIHsKLSsJ CXJldHVybiBFUlJfUEFNX1NUQVJUOwotKwl9Ci0rCi0rCWV2ID0gc2V0X3BhbV9lbnZpcm9ubWVu dChwYW1oKTsKLSsJaWYgKGV2ICE9IDApCi0rCQlnb3RvIGZpbmlzaDsKLSsKLSsJcmV0dmFsID0g cGFtX29wZW5fc2Vzc2lvbihwYW1oLCBQQU1fU0lMRU5UKTsKLSsJaWYgKHJldHZhbCAhPSBQQU1f U1VDQ0VTUykgewotKwkJZXYgPSBFUlJfT1BFTl9TRVNTSU9OOwotKwkJZ290byBmaW5pc2g7Ci0r CX0KLSsKLSsJZXYgPSBkdW1wX2tleXMoYXJndlsxXSk7Ci0rCi0rCXJldHZhbCA9IHBhbV9jbG9z ZV9zZXNzaW9uKHBhbWgsIFBBTV9TSUxFTlQpOwotKwlpZiAocmV0dmFsICE9IFBBTV9TVUNDRVNT KSB7Ci0rCQlldiA9IEVSUl9DTE9TRV9TRVNTSU9OOwotKwl9Ci0rCi0rZmluaXNoOgotKwlyZXR2 YWwgPSBwYW1fZW5kIChwYW1oLHJldHZhbCk7Ci0rCWlmIChyZXR2YWwgIT0gUEFNX1NVQ0NFU1Mp IHsKLSsJCWV2ID0gRVJSX1BBTV9FTkQ7Ci0rCX0KLSsJcmV0dXJuIGV2OwotK30KLS0tIAotMi41 Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDAzLVBhc3MtaW5ldGQtZmxhZ3MtYW5kLWF1dGgtY29udGV4 dC10by1zdWJwcm9jZXNzLWNhbGwucGF0Y2ggYi8wMDAzLVBhc3MtaW5ldGQtZmxhZ3MtYW5kLWF1 dGgtY29udGV4dC10by1zdWJwcm9jZXNzLWNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNzc5YTZlZgotLS0gL2Rldi9udWxsCisrKyBiLzAwMDMtUGFzcy1pbmV0 ZC1mbGFncy1hbmQtYXV0aC1jb250ZXh0LXRvLXN1YnByb2Nlc3MtY2FsbC5wYXRjaApAQCAtMCww ICsxLDc0IEBACitGcm9tIDg0MjNlODkyZDc1MzI1ODljMmRmMDU5ODQ3MGUwMWVhYTM4M2ZiNmIg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDI2IDE0OjA3OjAyICswMjAwCitTdWJq ZWN0OiBbUEFUQ0ggMDMvNTRdIFBhc3MgaW5ldGQgZmxhZ3MgYW5kIGF1dGggY29udGV4dCB0byBz dWJwcm9jZXNzIGNhbGxzCisgZm9yIFNFTGludXgKKworb3BlbnNzaC03LjZwMS1zdWJwcm9jZXNz LXNlbGludXgKKworUGFzcyBpbmV0ZCBmbGFncyBhbmQgYXV0aGVudGljYXRpb24gY29udGV4dCBk b3duIHRvIHN1YnByb2Nlc3MgY2FsbHMKK2ZvciBTRUxpbnV4IGVudmlyb25tZW50IHNldHVwLiBU aGlzIGVuc3VyZXMgdGhhdCBBdXRob3JpemVkS2V5c0NvbW1hbmQKK2FuZCBBdXRob3JpemVkUHJp bmNpcGFsc0NvbW1hbmQgc3VicHJvY2Vzc2VzIHJ1biB3aXRoIHRoZSBjb3JyZWN0CitTRUxpbnV4 IGNvbnRleHQgYmFzZWQgb24gdGhlIGF1dGhlbnRpY2F0ZWQgdXNlcidzIHJvbGUgYW5kIGxldmVs LgorCitDaGFuZ2VzOgorLSBtaXNjLmM6IFVwZGF0ZSBzdWJwcm9jZXNzKCkgZnVuY3Rpb24gc2ln bmF0dXJlIHRvIGFjY2VwdCBpbmV0ZCBhbmQKKyAgdGhlX2F1dGhjdHh0IHBhcmFtZXRlcnM7IGFk ZCBzc2hkX3NlbGludXhfc2V0dXBfZW52X3ZhcmlhYmxlcygpIGNhbGwKKyAgaW4gY2hpbGQgcHJv Y2VzcyBiZWZvcmUgZXhlY3ZlCistIG1pc2MuaDogVXBkYXRlIHN1YnByb2Nlc3MoKSBmdW5jdGlv biBkZWNsYXJhdGlvbgorLSBhdXRoMi1wdWJrZXkuYzogQWRkIGV4dGVybiBkZWNsYXJhdGlvbnMg Zm9yIGluZXRkX2ZsYWcgYW5kCisgIHRoZV9hdXRoY3R4dDsgcGFzcyB0aGVtIHRvIHN1YnByb2Nl c3MoKSBjYWxscyBmb3IKKyAgQXV0aG9yaXplZEtleXNDb21tYW5kIGFuZCBBdXRob3JpemVkUHJp bmNpcGFsc0NvbW1hbmQKKy0gc3NoY29ubmVjdC5jOiBVcGRhdGUgc3VicHJvY2VzcygpIGNhbGwg d2l0aCBuZXcgcGFyYW1ldGVycyAoMCwgTlVMTCkKKy0gc3NoZC1hdXRoLmM6IE1ha2UgaW5ldGRf ZmxhZyBub24tc3RhdGljIChleHRlcm4pCistIHNzaGQtc2Vzc2lvbi5jOiBNYWtlIGluZXRkX2Zs YWcgbm9uLXN0YXRpYyAoZXh0ZXJuKQorCitDby1BdXRob3JlZC1CeTogQ2xhdWRlIFNvbm5ldCA0 LjUgPG5vcmVwbHlAYW50aHJvcGljLmNvbT4KKy0tLQorIG1pc2MuaCAgICAgICB8IDIgKy0KKyBz c2hjb25uZWN0LmMgfCAyICstCisgc3NoZC1hdXRoLmMgIHwgMiArLQorIDMgZmlsZXMgY2hhbmdl ZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWlzYy5o IGIvbWlzYy5oCitpbmRleCA3OTE4NzZjMWUuLmZlMTFmOWQ4YSAxMDA2NDQKKy0tLSBhL21pc2Mu aAorKysrIGIvbWlzYy5oCitAQCAtMTI5LDcgKzEyOSw3IEBAIHR5cGVkZWYgdm9pZCBwcml2cmVz dG9yZV9mbih2b2lkKTsKKyAjZGVmaW5lCVNTSF9TVUJQUk9DRVNTX1VOU0FGRV9QQVRICSgxPDwz KQkvKiBEb24ndCBjaGVjayBmb3Igc2FmZSBjbWQgKi8KKyAjZGVmaW5lCVNTSF9TVUJQUk9DRVNT X1BSRVNFUlZFX0VOVgkoMTw8NCkJLyogS2VlcCBwYXJlbnQgZW52aXJvbm1lbnQgKi8KKyBwaWRf dCBzdWJwcm9jZXNzKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIGNoYXIgKiosIEZJ TEUgKiosIHVfaW50LAorLSAgICBzdHJ1Y3QgcGFzc3dkICosIHByaXZkcm9wX2ZuICosIHByaXZy ZXN0b3JlX2ZuICopOworKyAgICBzdHJ1Y3QgcGFzc3dkICosIHByaXZkcm9wX2ZuICosIHByaXZy ZXN0b3JlX2ZuICosIGludCwgdm9pZCAqKTsKKyAKKyB0eXBlZGVmIHN0cnVjdCBhcmdsaXN0IGFy Z2xpc3Q7Cisgc3RydWN0IGFyZ2xpc3QgeworZGlmZiAtLWdpdCBhL3NzaGNvbm5lY3QuYyBiL3Nz aGNvbm5lY3QuYworaW5kZXggNDM4NDI3N2E2Li41ZTc2MTU2MWQgMTAwNjQ0CistLS0gYS9zc2hj b25uZWN0LmMKKysrKyBiL3NzaGNvbm5lY3QuYworQEAgLTkxMSw3ICs5MTEsNyBAQCBsb2FkX2hv c3RrZXlzX2NvbW1hbmQoc3RydWN0IGhvc3RrZXlzICpob3N0a2V5cywgY29uc3QgY2hhciAqY29t bWFuZF90ZW1wbGF0ZSwKKyAKKyAJaWYgKChwaWQgPSBzdWJwcm9jZXNzKHRhZywgY29tbWFuZCwg YWMsIGF2LCAmZiwKKyAJICAgIFNTSF9TVUJQUk9DRVNTX1NURE9VVF9DQVBUVVJFfFNTSF9TVUJQ Uk9DRVNTX1VOU0FGRV9QQVRIfAorLQkgICAgU1NIX1NVQlBST0NFU1NfUFJFU0VSVkVfRU5WLCBO VUxMLCBOVUxMLCBOVUxMKSkgPT0gMCkKKysJICAgIFNTSF9TVUJQUk9DRVNTX1BSRVNFUlZFX0VO ViwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpID09IDApCisgCQlnb3RvIG91dDsKKyAKKyAJ bG9hZF9ob3N0a2V5c19maWxlKGhvc3RrZXlzLCBob3N0ZmlsZV9ob3N0bmFtZSwgdGFnLCBmLCAx KTsKK2RpZmYgLS1naXQgYS9zc2hkLWF1dGguYyBiL3NzaGQtYXV0aC5jCitpbmRleCA3NjM1MGEy YTMuLjczYWNiMGRiZSAxMDA2NDQKKy0tLSBhL3NzaGQtYXV0aC5jCisrKysgYi9zc2hkLWF1dGgu YworQEAgLTExOSw3ICsxMTksNyBAQCBjaGFyICpjb25maWdfZmlsZV9uYW1lID0gX1BBVEhfU0VS VkVSX0NPTkZJR19GSUxFOworIGludCBkZWJ1Z19mbGFnID0gMDsKKyAKKyAvKiBGbGFnIGluZGlj YXRpbmcgdGhhdCB0aGUgZGFlbW9uIGlzIGJlaW5nIHN0YXJ0ZWQgZnJvbSBpbmV0ZC4gKi8KKy1z dGF0aWMgaW50IGluZXRkX2ZsYWcgPSAwOworK2ludCBpbmV0ZF9mbGFnID0gMDsKKyAKKyAvKiBT YXZlZCBhcmd1bWVudHMgdG8gbWFpbigpLiAqLworIHN0YXRpYyBjaGFyICoqc2F2ZWRfYXJndjsK Ky0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDAzLW9wZW5zc2gtNi42cDEtYWxsb3ctaXAt b3B0cy5wYXRjaCBiLzAwMDMtb3BlbnNzaC02LjZwMS1hbGxvdy1pcC1vcHRzLnBhdGNoCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTExYjZjLi4wMDAwMDAwCi0tLSBhLzAwMDMtb3Bl bnNzaC02LjZwMS1hbGxvdy1pcC1vcHRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAs MCBAQAotRnJvbSA3ZmZlZWY3ZTgyMThjNTQ0YjZmNGEwOWM1ZDQzZTliNzQ4ZGU1YTVmIE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21h aWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDog W1BBVENIIDAzLzUzXSBvcGVuc3NoLTYuNnAxLWFsbG93LWlwLW9wdHMKLQotLS0tCi0gc3NoZC1z ZXNzaW9uLmMgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQotIDEgZmlsZSBj aGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEv c3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNlc3Npb24uYwotaW5kZXggY2I0YjA1MjNkLi4xYzcyZTY2 NGEgMTAwNjQ0Ci0tLS0gYS9zc2hkLXNlc3Npb24uYwotKysrIGIvc3NoZC1zZXNzaW9uLmMKLUBA IC03NTQsMTIgKzc1NCwzMiBAQCBjaGVja19pcF9vcHRpb25zKHN0cnVjdCBzc2ggKnNzaCkKLSAK LSAJaWYgKGdldHNvY2tvcHQoc29ja19pbiwgSVBQUk9UT19JUCwgSVBfT1BUSU9OUywgb3B0cywK LSAJICAgICZvcHRpb25fc2l6ZSkgPj0gMCAmJiBvcHRpb25fc2l6ZSAhPSAwKSB7Ci0tCQl0ZXh0 WzBdID0gJ1wwJzsKLS0JCWZvciAoaSA9IDA7IGkgPCBvcHRpb25fc2l6ZTsgaSsrKQotLQkJCXNu cHJpbnRmKHRleHQgKyBpKjMsIHNpemVvZih0ZXh0KSAtIGkqMywKLS0JCQkgICAgIiAlMi4yeCIs IG9wdHNbaV0pOwotLQkJZmF0YWwoIkNvbm5lY3Rpb24gZnJvbSAlLjEwMHMgcG9ydCAlZCB3aXRo IElQIG9wdHM6ICUuODAwcyIsCi0tCQkgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3Jl bW90ZV9wb3J0KHNzaCksIHRleHQpOwotKwkJaSA9IDA7Ci0rCQlkbyB7Ci0rCQkJc3dpdGNoIChv cHRzW2ldKSB7Ci0rCQkJCWNhc2UgMDoKLSsJCQkJY2FzZSAxOgotKwkJCQkJKytpOwotKwkJCQkJ YnJlYWs7Ci0rCQkJCWNhc2UgMTMwOgotKwkJCQljYXNlIDEzMzoKLSsJCQkJY2FzZSAxMzQ6Ci0r CQkJCQlpZiAoaSArIDEgPCBvcHRpb25fc2l6ZSAmJiBvcHRzW2kgKyAxXSA+PSAyKSB7Ci0rCQkJ CQkJaSArPSBvcHRzW2kgKyAxXTsKLSsJCQkJCQlicmVhazsKLSsJCQkJCX0KLSsJCQkJCS8qIEZB TExUSFJPVUdIICovCi0rCQkJCWRlZmF1bHQ6Ci0rCQkJCS8qIEZhaWwsIGZhdGFsbHksIGlmIHdl IGRldGVjdCBlaXRoZXIgbG9vc2Ugb3Igc3RyaWN0Ci0rCQkJIAkgKiBvciBpbmNvcnJlY3Qgc291 cmNlIHJvdXRpbmcgb3B0aW9ucy4gKi8KLSsJCQkJCXRleHRbMF0gPSAnXDAnOwotKwkJCQkJZm9y IChpID0gMDsgaSA8IG9wdGlvbl9zaXplOyBpKyspCi0rCQkJCQkJc25wcmludGYodGV4dCArIGkq Mywgc2l6ZW9mKHRleHQpIC0gaSozLAotKwkJCQkJCQkiICUyLjJ4Iiwgb3B0c1tpXSk7Ci0rCQkJ CQlmYXRhbCgiQ29ubmVjdGlvbiBmcm9tICUuMTAwcyBwb3J0ICVkIHdpdGggSVAgb3B0aW9uczol LjgwMHMiLAotKwkJCQkJCXNzaF9yZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChz c2gpLCB0ZXh0KTsKLSsJCQl9Ci0rCQl9IHdoaWxlIChpIDwgb3B0aW9uX3NpemUpOwotIAl9Ci0g I2VuZGlmIC8qIElQX09QVElPTlMgKi8KLSB9Ci0tLSAKLTIuNTIuMAotCgpkaWZmIC0tZ2l0IGEv MDAwNC1vcGVuc3NoLTUuOXAxLWlwdjZtYW4ucGF0Y2ggYi8wMDA0LW9wZW5zc2gtNS45cDEtaXB2 Nm1hbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjOGFmYy4uMDAwMDAw MAotLS0gYS8wMDA0LW9wZW5zc2gtNS45cDEtaXB2Nm1hbi5wYXRjaAorKysgL2Rldi9udWxsCkBA IC0xLDM5ICswLDAgQEAKLUZyb20gZjY1M2VlZDQwZTE1YzRjNTIxY2U2ODNhNjA0YjQ2ZWQ4MWNh ZGU2YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxi ZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAK LVN1YmplY3Q6IFtQQVRDSCAwNC81M10gb3BlbnNzaC01LjlwMS1pcHY2bWFuCi0KLS0tLQotIHNz aC4xICB8IDIgKysKLSBzc2hkLjggfCAyICsrCi0gMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlv bnMoKykKLQotZGlmZiAtLWdpdCBhL3NzaC4xIGIvc3NoLjEKLWluZGV4IDY5N2Y0ZTQyYS4uZGI5 MmFjOWFmIDEwMDY0NAotLS0tIGEvc3NoLjEKLSsrKyBiL3NzaC4xCi1AQCAtMTY2Myw2ICsxNjYz LDggQEAgbWFudWFsIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gLk5tCi0gZXhpdHMgd2l0 aCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHJlbW90ZSBjb21tYW5kIG9yIHdpdGggMjU1Ci0gaWYg YW4gZXJyb3Igb2NjdXJyZWQuCi0rLlNoIElQVjYKLStJUHY2IGFkZHJlc3MgY2FuIGJlIHVzZWQg ZXZlcnl3aGVyZSB3aGVyZSBJUHY0IGFkZHJlc3MuIEluIGFsbCBlbnRyaWVzIG11c3QgYmUgdGhl IElQdjYgYWRkcmVzcyBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMuIE5vdGU6IFRoZSBzcXVh cmUgYnJhY2tldHMgYXJlIG1ldGFjaGFyYWN0ZXJzIGZvciB0aGUgc2hlbGwgYW5kIG11c3QgYmUg ZXNjYXBlZCBpbiBzaGVsbC4KLSAuU2ggU0VFIEFMU08KLSAuWHIgc2NwIDEgLAotIC5YciBzZnRw IDEgLAotZGlmZiAtLWdpdCBhL3NzaGQuOCBiL3NzaGQuOAotaW5kZXggN2ZiY2E3NzZhLi4wMjI2 YTgzMDMgMTAwNjQ0Ci0tLS0gYS9zc2hkLjgKLSsrKyBiL3NzaGQuOAotQEAgLTEwMTgsNiArMTAx OCw4IEBAIGNvbmN1cnJlbnRseSBmb3IgZGlmZmVyZW50IHBvcnRzLCB0aGlzIGNvbnRhaW5zIHRo ZSBwcm9jZXNzIElEIG9mIHRoZSBvbmUKLSBzdGFydGVkIGxhc3QpLgotIFRoZSBjb250ZW50IG9m IHRoaXMgZmlsZSBpcyBub3Qgc2Vuc2l0aXZlOyBpdCBjYW4gYmUgd29ybGQtcmVhZGFibGUuCi0g LkVsCi0rLlNoIElQVjYKLStJUHY2IGFkZHJlc3MgY2FuIGJlIHVzZWQgZXZlcnl3aGVyZSB3aGVy ZSBJUHY0IGFkZHJlc3MuIEluIGFsbCBlbnRyaWVzIG11c3QgYmUgdGhlIElQdjYgYWRkcmVzcyBl bmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMuIE5vdGU6IFRoZSBzcXVhcmUgYnJhY2tldHMgYXJl IG1ldGFjaGFyYWN0ZXJzIGZvciB0aGUgc2hlbGwgYW5kIG11c3QgYmUgZXNjYXBlZCBpbiBzaGVs bC4KLSAuU2ggU0VFIEFMU08KLSAuWHIgc2NwIDEgLAotIC5YciBzZnRwIDEgLAotLS0gCi0yLjUy LjAKLQoKZGlmZiAtLWdpdCBhLzAwMDQtb3BlbnNzaC02LjZwMS1rZXljYXQucGF0Y2ggYi8wMDA0 LW9wZW5zc2gtNi42cDEta2V5Y2F0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjMyOTA4NWMKLS0tIC9kZXYvbnVsbAorKysgYi8wMDA0LW9wZW5zc2gtNi42cDEta2V5 Y2F0LnBhdGNoCkBAIC0wLDAgKzEsMzgwIEBACitGcm9tIDVjYzFiMTBjOGNkNWRlOTFlYzgxOWE5 Mzk3YWJkMjRhZWY5ZjA5OWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkg QmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEz OjQzOjI4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvNTRdIG9wZW5zc2gtNi42cDEta2V5Y2F0 CisKKy0tLQorIC5naXRpZ25vcmUgICAgICAgfCAgIDEgKworIEhPV1RPLnNzaC1rZXljYXQgfCAg MTIgKysrCisgTWFrZWZpbGUuaW4gICAgICB8ICAgOCArLQorIGNvbmZpZ3VyZS5hYyAgICAgfCAg IDYgKysKKyBzc2gta2V5Y2F0LmMgICAgIHwgMjQxICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCisgNSBmaWxlcyBjaGFuZ2VkLCAyNjcgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBIT1dUTy5zc2gta2V5Y2F0Cisg Y3JlYXRlIG1vZGUgMTAwNjQ0IHNzaC1rZXljYXQuYworCitkaWZmIC0tZ2l0IGEvLmdpdGlnbm9y ZSBiLy5naXRpZ25vcmUKK2luZGV4IDkwNzUzMzA2Ny4uN2I0NjY4ZDcxIDEwMDY0NAorLS0tIGEv LmdpdGlnbm9yZQorKysrIGIvLmdpdGlnbm9yZQorQEAgLTI4LDYgKzI4LDcgQEAgc3NoLWFnZW50 Cisgc3NoLWtleWdlbgorIHNzaC1rZXlzY2FuCisgc3NoLWtleXNpZ24KKytzc2gta2V5Y2F0Cisg c3NoLXBrY3MxMS1oZWxwZXIKKyBzc2gtc2staGVscGVyCisgc3NoZAorZGlmZiAtLWdpdCBhL0hP V1RPLnNzaC1rZXljYXQgYi9IT1dUTy5zc2gta2V5Y2F0CituZXcgZmlsZSBtb2RlIDEwMDY0NAor aW5kZXggMDAwMDAwMDAwLi42MzBlYzYyOGMKKy0tLSAvZGV2L251bGwKKysrKyBiL0hPV1RPLnNz aC1rZXljYXQKK0BAIC0wLDAgKzEsMTIgQEAKKytUaGUgc3NoLWtleWNhdCByZXRyaWV2ZXMgdGhl IGNvbnRlbnQgb2YgdGhlIH4vLnNzaC9hdXRob3JpemVkX2tleXMKKytvZiBhbiB1c2VyIGluIGFu eSBlbnZpcm9ubWVudC4gVGhpcyBpbmNsdWRlcyBlbnZpcm9ubWVudHMgd2l0aAorK3BvbHlpbnN0 YW50aWF0aW9uIG9mIGhvbWUgZGlyZWN0b3JpZXMgYW5kIFNFTGludXggTUxTIHBvbGljeSBlbmFi bGVkLgorKworK1RvIHVzZSBzc2gta2V5Y2F0LCBzZXQgdGhlc2Ugb3B0aW9ucyBpbiAvZXRjL3Nz aC9zc2hkX2NvbmZpZyBmaWxlOgorKyAgICAgICAgQXV0aG9yaXplZEtleXNDb21tYW5kIC91c3Iv bGliZXhlYy9vcGVuc3NoL3NzaC1rZXljYXQKKysgICAgICAgIEF1dGhvcml6ZWRLZXlzQ29tbWFu ZFVzZXIgcm9vdAorKworK0RvIG5vdCBmb3JnZXQgdG8gZW5hYmxlIHB1YmxpYyBrZXkgYXV0aGVu dGljYXRpb246CisrICAgICAgICBQdWJrZXlBdXRoZW50aWNhdGlvbiB5ZXMKKysKKysKK2RpZmYg LS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAyYWFjODc5YzEuLjQyYjQ1 ZDMzZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTIz LDYgKzIzLDcgQEAgU1NIX1BST0dSQU09QGJpbmRpckAvc3NoCisgQVNLUEFTU19QUk9HUkFNPSQo bGliZXhlY2Rpcikvc3NoLWFza3Bhc3MKKyBTRlRQX1NFUlZFUj0kKGxpYmV4ZWNkaXIpL3NmdHAt c2VydmVyCisgU1NIX0tFWVNJR049JChsaWJleGVjZGlyKS9zc2gta2V5c2lnbgorK1NTSF9LRVlD QVQ9JChsaWJleGVjZGlyKS9zc2gta2V5Y2F0CisgU1NIRF9TRVNTSU9OPSQobGliZXhlY2Rpcikv c3NoZC1zZXNzaW9uCisgU1NIRF9BVVRIPSQobGliZXhlY2Rpcikvc3NoZC1hdXRoCisgU1NIX1BL Q1MxMV9IRUxQRVI9JChsaWJleGVjZGlyKS9zc2gtcGtjczExLWhlbHBlcgorQEAgLTU4LDYgKzU5 LDcgQEAgQ0hBTk5FTExJQlM9QENIQU5ORUxMSUJTQAorIEs1TElCUz1ASzVMSUJTQAorIEdTU0xJ QlM9QEdTU0xJQlNACisgU1NIRExJQlM9QFNTSERMSUJTQAorK0tFWUNBVExJQlM9QEtFWUNBVExJ QlNACisgTElCRURJVD1ATElCRURJVEAKKyBMSUJGSURPMj1ATElCRklETzJACisgTElCV1RNUERC PUBMSUJXVE1QREJACitAQCAtNzUsNyArNzcsNyBAQCBNS0RJUl9QPUBNS0RJUl9QQAorIAorIC5T VUZGSVhFUzogLmxvCisgCistVEFSR0VUUz1zc2gkKEVYRUVYVCkgc3NoZCQoRVhFRVhUKSBzc2hk LXNlc3Npb24kKEVYRUVYVCkgc3NoZC1hdXRoJChFWEVFWFQpIHNzaC1hZGQkKEVYRUVYVCkgc3No LWtleWdlbiQoRVhFRVhUKSBzc2gta2V5c2NhbiR7RVhFRVhUfSBzc2gta2V5c2lnbiR7RVhFRVhU fSBzc2gtcGtjczExLWhlbHBlciQoRVhFRVhUKSBzc2gtYWdlbnQkKEVYRUVYVCkgc2NwJChFWEVF WFQpIHNmdHAtc2VydmVyJChFWEVFWFQpIHNmdHAkKEVYRUVYVCkgc3NoLXNrLWhlbHBlciQoRVhF RVhUKSAkKFNLX1NUQU5EQUxPTkUpCisrVEFSR0VUUz1zc2gkKEVYRUVYVCkgc3NoZCQoRVhFRVhU KSBzc2hkLXNlc3Npb24kKEVYRUVYVCkgc3NoZC1hdXRoJChFWEVFWFQpIHNzaC1hZGQkKEVYRUVY VCkgc3NoLWtleWdlbiQoRVhFRVhUKSBzc2gta2V5c2NhbiR7RVhFRVhUfSBzc2gta2V5c2lnbiR7 RVhFRVhUfSBzc2gtcGtjczExLWhlbHBlciQoRVhFRVhUKSBzc2gtYWdlbnQkKEVYRUVYVCkgc2Nw JChFWEVFWFQpIHNmdHAtc2VydmVyJChFWEVFWFQpIHNmdHAkKEVYRUVYVCkgc3NoLXNrLWhlbHBl ciQoRVhFRVhUKSBzc2gta2V5Y2F0JChFWEVFWFQpICQoU0tfU1RBTkRBTE9ORSkKKyAKKyBMSUJP UEVOU1NIX09CSlM9XAorIAlzc2hfYXBpLm8gXAorQEAgLTI1Miw2ICsyNTQsOSBAQCBzc2gtcGtj czExLWhlbHBlciQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5hICQoUDExSEVMUEVSX09C SlMpCisgc3NoLXNrLWhlbHBlciQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5hICQoU0tI RUxQRVJfT0JKUykKKyAJJChMRCkgLW8gJEAgJChTS0hFTFBFUl9PQkpTKSAkKExERkxBR1MpIC1s c3NoIC1sb3BlbmJzZC1jb21wYXQgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAkKExJQlMpICQoTElC RklETzIpICQoQ0hBTk5FTExJQlMpCisgCisrc3NoLWtleWNhdCQoRVhFRVhUKTogJChMSUJDT01Q QVQpICQoU1NIRE9CSlMpIGxpYnNzaC5hIHNzaC1rZXljYXQubyB1aWRzd2FwLm8KKysJJChMRCkg LW8gJEAgc3NoLWtleWNhdC5vIHVpZHN3YXAubyAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJzZC1j b21wYXQgJChLRVlDQVRMSUJTKSAkKENIQU5ORUxMSUJTKSAkKExJQlMpCisrCisgc3NoLWtleXNj YW4kKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFNTSEtFWVNDQU5fT0JKUykKKyAJ JChMRCkgLW8gJEAgJChTU0hLRVlTQ0FOX09CSlMpICQoTERGTEFHUykgLWxzc2ggLWxvcGVuYnNk LWNvbXBhdCAtbHNzaCAkKExJQlMpICQoQ0hBTk5FTExJQlMpCisgCitAQCAtNDQwLDYgKzQ0NSw3 IEBAIGluc3RhbGwtZmlsZXM6CisgCSQoSU5TVEFMTCkgLW0gNDcxMSAkKFNUUklQX09QVCkgc3No LWtleXNpZ24kKEVYRUVYVCkgJChERVNURElSKSQoU1NIX0tFWVNJR04pJChFWEVFWFQpCisgCSQo SU5TVEFMTCkgLW0gMDc1NSAkKFNUUklQX09QVCkgc3NoLXBrY3MxMS1oZWxwZXIkKEVYRUVYVCkg JChERVNURElSKSQoU1NIX1BLQ1MxMV9IRUxQRVIpJChFWEVFWFQpCisgCSQoSU5TVEFMTCkgLW0g MDc1NSAkKFNUUklQX09QVCkgc3NoLXNrLWhlbHBlciQoRVhFRVhUKSAkKERFU1RESVIpJChTU0hf U0tfSEVMUEVSKSQoRVhFRVhUKQorKwkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNz aC1rZXljYXQkKEVYRUVYVCkgJChERVNURElSKSQobGliZXhlY2Rpcikvc3NoLWtleWNhdCQoRVhF RVhUKQorIAkkKElOU1RBTEwpIC1tIDA3NTUgJChTVFJJUF9PUFQpIHNmdHAkKEVYRUVYVCkgJChE RVNURElSKSQoYmluZGlyKS9zZnRwJChFWEVFWFQpCisgCSQoSU5TVEFMTCkgLW0gMDc1NSAkKFNU UklQX09QVCkgc2Z0cC1zZXJ2ZXIkKEVYRUVYVCkgJChERVNURElSKSQoU0ZUUF9TRVJWRVIpJChF WEVFWFQpCisgCSQoSU5TVEFMTCkgLW0gNjQ0IHNzaC4xLm91dCAkKERFU1RESVIpJChtYW5kaXIp LyQobWFuc3ViZGlyKTEvc3NoLjEKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1 cmUuYWMKK2luZGV4IGE4ZTlkZjY2Yi4uOGY4Mjc2Yzc4IDEwMDY0NAorLS0tIGEvY29uZmlndXJl LmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zNzA5LDYgKzM3MDksNyBAQCBBQ19BUkdfV0lU SChbcGFtXSwKKyAJCQlQQU1fTVNHPSJ5ZXMiCisgCisgCQkJU1NIRExJQlM9IiRTU0hETElCUyAt bHBhbSIKKysJCQlLRVlDQVRMSUJTPSIkS0VZQ0FUTElCUyAtbHBhbSIKKyAJCQlBQ19ERUZJTkUo W1VTRV9QQU1dLCBbMV0sCisgCQkJCVtEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFBBTSBz dXBwb3J0XSkKKyAKK0BAIC0zNzE5LDYgKzM3MjAsNyBAQCBBQ19BUkdfV0lUSChbcGFtXSwKKyAJ CQkJCTs7CisgCQkJCSopCisgCQkJCQlTU0hETElCUz0iJFNTSERMSUJTIC1sZGwiCisrCQkJCQlL RVlDQVRMSUJTPSIkS0VZQ0FUTElCUyAtbGRsIgorIAkJCQkJOzsKKyAJCQkJZXNhYworIAkJCWZp CitAQCAtNDk2Miw2ICs0OTY0LDcgQEAgQUNfQVJHX1dJVEgoW3NlbGludXhdLAorIAlmaSBdCisg KQorIEFDX1NVQlNUKFtTU0hETElCU10pCisrQUNfU1VCU1QoW0tFWUNBVExJQlNdKQorIAorICMg Q2hlY2sgd2hldGhlciB1c2VyIHdhbnRzIEtlcmJlcm9zIDUgc3VwcG9ydAorIEtSQjVfTVNHPSJu byIKK0BAIC01OTc1LDYgKzU5NzgsOSBAQCBmaQorIGlmIHRlc3QgISAteiAiJHtTU0hETElCU30i OyB0aGVuCisgZWNobyAiICAgICAgICAgK2ZvciBzc2hkOiAke1NTSERMSUJTfSIKKyBmaQorK2lm IHRlc3QgISAteiAiJHtLRVlDQVRMSUJTfSI7IHRoZW4KKytlY2hvICIgICArZm9yIHNzaC1rZXlj YXQ6ICR7S0VZQ0FUTElCU30iCisrZmkKKyAKKyBlY2hvICIiCisgCitkaWZmIC0tZ2l0IGEvc3No LWtleWNhdC5jIGIvc3NoLWtleWNhdC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw MDAwMDAwLi44YmIxN2M3M2UKKy0tLSAvZGV2L251bGwKKysrKyBiL3NzaC1rZXljYXQuYworQEAg LTAsMCArMSwyNDEgQEAKKysvKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFy ZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1p c3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKysgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2Ns YWltZXIgb2Ygd2FycmFudGllcy4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK KysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5v dCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKysgKiAgICB3cml0dGVu IHBlcm1pc3Npb24uCisrICoKKysgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5IGJl IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorKyAqIHRoZSBHTlUgUHVibGljIExpY2Vu c2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKysgKiByZXF1 aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2UgaXMK KysgKiBuZWNlc3NhcnkgZHVlIHRvIGEgcG90ZW50aWFsIGJhZCBpbnRlcmFjdGlvbiBiZXR3ZWVu IHRoZSBHUEwgYW5kCisrICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5 bGUgY29weXJpZ2h0LikKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJ UycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisrICogV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKysgKiBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKyAq IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwKKysgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKysgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKysgKiBTRVJWSUNFUzsg TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICovCisrCisrLyoKKysgKiBDb3B5cmlnaHQgKGMp IDIwMTEgUmVkIEhhdCwgSW5jLgorKyAqIFdyaXR0ZW4gYnkgVG9tYXMgTXJheiA8dG1yYXpAcmVk aGF0LmNvbT4KKysqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSAiY29u ZmlnLmgiCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9z dGF0Lmg+CisrI2luY2x1ZGUgPHB3ZC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRl IDx1bmlzdGQuaD4KKysjaWZkZWYgSEFWRV9TVERJTlRfSAorKyNpbmNsdWRlIDxzdGRpbnQuaD4K KysjZW5kaWYKKysKKysjaW5jbHVkZSA8c2VjdXJpdHkvcGFtX2FwcGwuaD4KKysKKysjaW5jbHVk ZSAidWlkc3dhcC5oIgorKyNpbmNsdWRlICJtaXNjLmgiCisrCisrI2RlZmluZSBFUlJfVVNBR0Ug MQorKyNkZWZpbmUgRVJSX1BBTV9TVEFSVCAyCisrI2RlZmluZSBFUlJfT1BFTl9TRVNTSU9OIDMK KysjZGVmaW5lIEVSUl9DTE9TRV9TRVNTSU9OIDQKKysjZGVmaW5lIEVSUl9QQU1fRU5EIDUKKysj ZGVmaW5lIEVSUl9HRVRQV05BTSA2CisrI2RlZmluZSBFUlJfTUVNT1JZIDcKKysjZGVmaW5lIEVS Ul9PUEVOIDgKKysjZGVmaW5lIEVSUl9GSUxFX01PREUgOQorKyNkZWZpbmUgRVJSX0ZET1BFTiAx MAorKyNkZWZpbmUgRVJSX1NUQVQgMTEKKysjZGVmaW5lIEVSUl9XUklURSAxMgorKyNkZWZpbmUg RVJSX1BBTV9QVVRFTlYgMTMKKysjZGVmaW5lIEJVRkxFTiA0MDk2CisrCisrLyogSnVzdCBpZ25v cmUgdGhlIG1lc3NhZ2VzIGluIHRoZSBjb252ZXJzYXRpb24gZnVuY3Rpb24gKi8KKytzdGF0aWMg aW50CisrZHVtbXlfY29udihpbnQgbnVtX21zZywgY29uc3Qgc3RydWN0IHBhbV9tZXNzYWdlICoq bXNnbSwKKysJICAgc3RydWN0IHBhbV9yZXNwb25zZSAqKnJlc3BvbnNlLCB2b2lkICphcHBkYXRh X3B0cikKKyt7CisrCXN0cnVjdCBwYW1fcmVzcG9uc2UgKnJzcDsKKysKKysJKHZvaWQpbXNnbTsK KysJKHZvaWQpYXBwZGF0YV9wdHI7CisrCisrCWlmIChudW1fbXNnIDw9IDApCisrCQlyZXR1cm4g UEFNX0NPTlZfRVJSOworKworKwkvKiBKdXN0IGFsbG9jYXRlIHRoZSBhcnJheSBhcyBlbXB0eSBy ZXNwb25zZXMgKi8KKysJcnNwID0gY2FsbG9jIChudW1fbXNnLCBzaXplb2YgKHN0cnVjdCBwYW1f cmVzcG9uc2UpKTsKKysJaWYgKHJzcCA9PSBOVUxMKQorKwkJcmV0dXJuIFBBTV9DT05WX0VSUjsK KysKKysJKnJlc3BvbnNlID0gcnNwOworKwlyZXR1cm4gUEFNX1NVQ0NFU1M7CisrfQorKworK3N0 YXRpYyBzdHJ1Y3QgcGFtX2NvbnYgY29udiA9IHsKKysJZHVtbXlfY29udiwKKysJTlVMTAorK307 CisrCisrY2hhciAqCisrbWFrZV9hdXRoX2tleXNfbmFtZShjb25zdCBzdHJ1Y3QgcGFzc3dkICpw d2QpCisreworKwljaGFyICpmbmFtZTsKKysKKysJaWYgKGFzcHJpbnRmKCZmbmFtZSwgIiVzLy5z c2gvYXV0aG9yaXplZF9rZXlzIiwgcHdkLT5wd19kaXIpIDwgMCkKKysJCXJldHVybiBOVUxMOwor KworKwlyZXR1cm4gZm5hbWU7CisrfQorKworK2ludAorK2R1bXBfa2V5cyhjb25zdCBjaGFyICp1 c2VyKQorK3sKKysJc3RydWN0IHBhc3N3ZCAqcHdkOworKwlpbnQgZmQgPSAtMTsKKysJRklMRSAq ZiA9IE5VTEw7CisrCWNoYXIgKmZuYW1lID0gTlVMTDsKKysJaW50IHJ2ID0gMDsKKysJY2hhciBi dWZbQlVGTEVOXTsKKysJc2l6ZV90IGxlbjsKKysJc3RydWN0IHN0YXQgc3Q7CisrCisrCWlmICgo cHdkID0gZ2V0cHduYW0odXNlcikpID09IE5VTEwpIHsKKysJCXJldHVybiBFUlJfR0VUUFdOQU07 CisrCX0KKysKKysJaWYgKChmbmFtZSA9IG1ha2VfYXV0aF9rZXlzX25hbWUocHdkKSkgPT0gTlVM TCkgeworKwkJcmV0dXJuIEVSUl9NRU1PUlk7CisrCX0KKysKKysJdGVtcG9yYXJpbHlfdXNlX3Vp ZChwd2QpOworKworKwlpZiAoKGZkID0gb3BlbihmbmFtZSwgT19SRE9OTFl8T19OT05CTE9DS3xP X05PRk9MTE9XLCAwKSkgPCAwKSB7CisrCQlydiA9IEVSUl9PUEVOOworKwkJZ290byBmYWlsOwor Kwl9CisrCisrCWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsKKysJCXJ2ID0gRVJSX1NUQVQ7Cisr CQlnb3RvIGZhaWw7CisrCX0KKysKKysJaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpIHx8CisrCQko c3Quc3RfdWlkICE9IHB3ZC0+cHdfdWlkICYmIHN0LnN0X3VpZCAhPSAwKSkgeworKwkJcnYgPSBF UlJfRklMRV9NT0RFOworKwkJZ290byBmYWlsOworKwl9CisrCisrCXVuc2V0X25vbmJsb2NrKGZk KTsKKysKKysJaWYgKChmID0gZmRvcGVuKGZkLCAiciIpKSA9PSBOVUxMKSB7CisrCQlydiA9IEVS Ul9GRE9QRU47CisrCQlnb3RvIGZhaWw7CisrCX0KKysKKysJZmQgPSAtMTsKKysKKysJd2hpbGUg KChsZW4gPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBmKSkgPiAwKSB7CisrCQlydiA9IGZ3 cml0ZShidWYsIDEsIGxlbiwgc3Rkb3V0KSAhPSBsZW4gPyBFUlJfV1JJVEUgOiAwOworKwl9Cisr CisrZmFpbDoKKysJaWYgKGZkICE9IC0xKQorKwkJY2xvc2UoZmQpOworKwlpZiAoZiAhPSBOVUxM KQorKwkJZmNsb3NlKGYpOworKwlmcmVlKGZuYW1lKTsKKysJcmVzdG9yZV91aWQoKTsKKysJcmV0 dXJuIHJ2OworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciAqZW52X25hbWVzW10gPSB7ICJTRUxJ TlVYX1JPTEVfUkVRVUVTVEVEIiwKKysJIlNFTElOVVhfTEVWRUxfUkVRVUVTVEVEIiwKKysJIlNF TElOVVhfVVNFX0NVUlJFTlRfUkFOR0UiCisrfTsKKysKKytleHRlcm4gY2hhciAqKmVudmlyb247 CisrCisraW50Cisrc2V0X3BhbV9lbnZpcm9ubWVudChwYW1faGFuZGxlX3QgKnBhbWgpCisrewor KwlpbnQgaTsKKysJc2l6ZV90IGo7CisrCisrCWZvciAoaiA9IDA7IGogPCBzaXplb2YoZW52X25h bWVzKS9zaXplb2YoZW52X25hbWVzWzBdKTsgKytqKSB7CisrCQlpbnQgbGVuID0gc3RybGVuKGVu dl9uYW1lc1tqXSk7CisrCisrCQlmb3IgKGkgPSAwOyBlbnZpcm9uW2ldICE9IE5VTEw7ICsraSkg eworKwkJCWlmIChzdHJuY21wKGVudl9uYW1lc1tqXSwgZW52aXJvbltpXSwgbGVuKSA9PSAwICYm CisrCQkJICAgIGVudmlyb25baV1bbGVuXSA9PSAnPScpIHsKKysJCQkJaWYgKHBhbV9wdXRlbnYo cGFtaCwgZW52aXJvbltpXSkgIT0gUEFNX1NVQ0NFU1MpCisrCQkJCQlyZXR1cm4gRVJSX1BBTV9Q VVRFTlY7CisrCQkJfQorKwkJfQorKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytpbnQKKytt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKwlwYW1faGFuZGxlX3QgKnBhbWggPSBO VUxMOworKwlpbnQgcmV0dmFsOworKwlpbnQgZXYgPSAwOworKworKwlpZiAoYXJnYyAhPSAyKSB7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8dXNlci1uYW1lPlxuIiwgYXJndlswXSk7 CisrCQlyZXR1cm4gRVJSX1VTQUdFOworKwl9CisrCisrCXJldHZhbCA9IHBhbV9zdGFydCgic3No LWtleWNhdCIsIGFyZ3ZbMV0sICZjb252LCAmcGFtaCk7CisrCWlmIChyZXR2YWwgIT0gUEFNX1NV Q0NFU1MpIHsKKysJCXJldHVybiBFUlJfUEFNX1NUQVJUOworKwl9CisrCisrCWV2ID0gc2V0X3Bh bV9lbnZpcm9ubWVudChwYW1oKTsKKysJaWYgKGV2ICE9IDApCisrCQlnb3RvIGZpbmlzaDsKKysK KysJcmV0dmFsID0gcGFtX29wZW5fc2Vzc2lvbihwYW1oLCBQQU1fU0lMRU5UKTsKKysJaWYgKHJl dHZhbCAhPSBQQU1fU1VDQ0VTUykgeworKwkJZXYgPSBFUlJfT1BFTl9TRVNTSU9OOworKwkJZ290 byBmaW5pc2g7CisrCX0KKysKKysJZXYgPSBkdW1wX2tleXMoYXJndlsxXSk7CisrCisrCXJldHZh bCA9IHBhbV9jbG9zZV9zZXNzaW9uKHBhbWgsIFBBTV9TSUxFTlQpOworKwlpZiAocmV0dmFsICE9 IFBBTV9TVUNDRVNTKSB7CisrCQlldiA9IEVSUl9DTE9TRV9TRVNTSU9OOworKwl9CisrCisrZmlu aXNoOgorKwlyZXR2YWwgPSBwYW1fZW5kIChwYW1oLHJldHZhbCk7CisrCWlmIChyZXR2YWwgIT0g UEFNX1NVQ0NFU1MpIHsKKysJCWV2ID0gRVJSX1BBTV9FTkQ7CisrCX0KKysJcmV0dXJuIGV2Owor K30KKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDA1LW9wZW5zc2gtNS44cDItc2lncGlw ZS5wYXRjaCBiLzAwMDUtb3BlbnNzaC01LjhwMi1zaWdwaXBlLnBhdGNoCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBhMmEzNzE0Li4wMDAwMDAwCi0tLSBhLzAwMDUtb3BlbnNzaC01Ljhw Mi1zaWdwaXBlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotRnJvbSA2YWMx NGZiOTJjZjBkMDY3NmYxOTI4MmYzMGI5ZTQyNzAyNWJlMzFiIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTog VGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDA1LzUzXSBv cGVuc3NoLTUuOHAyLXNpZ3BpcGUKLQotLS0tCi0gc3NoLWtleXNjYW4uYyB8IDMgKysrCi0gMSBm aWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3NoLWtleXNjYW4u YyBiL3NzaC1rZXlzY2FuLmMKLWluZGV4IGY5Nzg4MTE0ZC4uMTE2MThhZThhIDEwMDY0NAotLS0t IGEvc3NoLWtleXNjYW4uYwotKysrIGIvc3NoLWtleXNjYW4uYwotQEAgLTc3Niw2ICs3NzYsOSBA QCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJaWYgKG1heGZkID4gZmRsaW1fZ2V0KDAp KQotIAkJZmRsaW1fc2V0KG1heGZkKTsKLSAJZmRjb24gPSB4Y2FsbG9jKG1heGZkLCBzaXplb2Yo Y29uKSk7Ci0rIAotKwlzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7Ci0rCi0gCXJlYWRfd2FpdCA9 IHhjYWxsb2MobWF4ZmQsIHNpemVvZihzdHJ1Y3QgcG9sbGZkKSk7Ci0gCWZvciAoaiA9IDA7IGog PCBtYXhmZDsgaisrKQotIAkJcmVhZF93YWl0W2pdLmZkID0gLTE7Ci0tLSAKLTIuNTIuMAotCgpk aWZmIC0tZ2l0IGEvMDAwNS1vcGVuc3NoLTYuNnAxLWFsbG93LWlwLW9wdHMucGF0Y2ggYi8wMDA1 LW9wZW5zc2gtNi42cDEtYWxsb3ctaXAtb3B0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4wMjQzZTgxCi0tLSAvZGV2L251bGwKKysrIGIvMDAwNS1vcGVuc3NoLTYu NnAxLWFsbG93LWlwLW9wdHMucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSAxMzViYjY5MDNi NzE1MDEyYThhZTMwMjAyMmJiN2EzMWQxODc5YzZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQor RnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAx NSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDA1LzU0XSBvcGVuc3No LTYuNnAxLWFsbG93LWlwLW9wdHMKKworI2h0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hv d19idWcuY2dpP2lkPTE2NDQKKy0tLQorIHNzaGQtc2Vzc2lvbi5jIHwgMzIgKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwg NiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNz aW9uLmMKK2luZGV4IDk2NzczN2M1Yi4uMDBkMDBlMjkzIDEwMDY0NAorLS0tIGEvc3NoZC1zZXNz aW9uLmMKKysrKyBiL3NzaGQtc2Vzc2lvbi5jCitAQCAtNzI2LDEyICs3MjYsMzIgQEAgY2hlY2tf aXBfb3B0aW9ucyhzdHJ1Y3Qgc3NoICpzc2gpCisgCisgCWlmIChnZXRzb2Nrb3B0KHNvY2tfaW4s IElQUFJPVE9fSVAsIElQX09QVElPTlMsIG9wdHMsCisgCSAgICAmb3B0aW9uX3NpemUpID49IDAg JiYgb3B0aW9uX3NpemUgIT0gMCkgeworLQkJdGV4dFswXSA9ICdcMCc7CistCQlmb3IgKGkgPSAw OyBpIDwgb3B0aW9uX3NpemU7IGkrKykKKy0JCQlzbnByaW50Zih0ZXh0ICsgaSozLCBzaXplb2Yo dGV4dCkgLSBpKjMsCistCQkJICAgICIgJTIuMngiLCBvcHRzW2ldKTsKKy0JCWZhdGFsKCJDb25u ZWN0aW9uIGZyb20gJS4xMDBzIHBvcnQgJWQgd2l0aCBJUCBvcHRzOiAlLjgwMHMiLAorLQkJICAg IHNzaF9yZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gpLCB0ZXh0KTsKKysJ CWkgPSAwOworKwkJZG8geworKwkJCXN3aXRjaCAob3B0c1tpXSkgeworKwkJCQljYXNlIDA6Cisr CQkJCWNhc2UgMToKKysJCQkJCSsraTsKKysJCQkJCWJyZWFrOworKwkJCQljYXNlIDEzMDoKKysJ CQkJY2FzZSAxMzM6CisrCQkJCWNhc2UgMTM0OgorKwkJCQkJaWYgKGkgKyAxIDwgb3B0aW9uX3Np emUgJiYgb3B0c1tpICsgMV0gPj0gMikgeworKwkJCQkJCWkgKz0gb3B0c1tpICsgMV07CisrCQkJ CQkJYnJlYWs7CisrCQkJCQl9CisrCQkJCQkvKiBGQUxMVEhST1VHSCAqLworKwkJCQlkZWZhdWx0 OgorKwkJCQkvKiBGYWlsLCBmYXRhbGx5LCBpZiB3ZSBkZXRlY3QgZWl0aGVyIGxvb3NlIG9yIHN0 cmljdAorKwkJCSAJICogb3IgaW5jb3JyZWN0IHNvdXJjZSByb3V0aW5nIG9wdGlvbnMuICovCisr CQkJCQl0ZXh0WzBdID0gJ1wwJzsKKysJCQkJCWZvciAoaSA9IDA7IGkgPCBvcHRpb25fc2l6ZTsg aSsrKQorKwkJCQkJCXNucHJpbnRmKHRleHQgKyBpKjMsIHNpemVvZih0ZXh0KSAtIGkqMywKKysJ CQkJCQkJIiAlMi4yeCIsIG9wdHNbaV0pOworKwkJCQkJZmF0YWwoIkNvbm5lY3Rpb24gZnJvbSAl LjEwMHMgcG9ydCAlZCB3aXRoIElQIG9wdGlvbnM6JS44MDBzIiwKKysJCQkJCQlzc2hfcmVtb3Rl X2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSwgdGV4dCk7CisrCQkJfQorKwkJfSB3 aGlsZSAoaSA8IG9wdGlvbl9zaXplKTsKKyAJfQorICNlbmRpZiAvKiBJUF9PUFRJT05TICovCisg fQorLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwMDYtb3BlbnNzaC01LjlwMS1pcHY2bWFu LnBhdGNoIGIvMDAwNi1vcGVuc3NoLTUuOXAxLWlwdjZtYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMmJiN2FlOAotLS0gL2Rldi9udWxsCisrKyBiLzAwMDYtb3Bl bnNzaC01LjlwMS1pcHY2bWFuLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gYmEyMGMyMzgw YjMxMDhiMWY4ZTJjMDA2ODlhOGVmYzY2MjNjZDQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK K0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwg MTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi81NF0gb3BlbnNz aC01LjlwMS1pcHY2bWFuCisKKyMoZHJvcD8pIGh0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcv c2hvd19idWcuY2dpP2lkPTE5MjUKKy0tLQorIHNzaC4xICB8IDIgKysKKyBzc2hkLjggfCAyICsr CisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NzaC4x IGIvc3NoLjEKK2luZGV4IDgyYWU1NDgwYy4uYzJjOGY1MGYxIDEwMDY0NAorLS0tIGEvc3NoLjEK KysrKyBiL3NzaC4xCitAQCAtMTY2OSw2ICsxNjY5LDggQEAgbWFudWFsIHBhZ2UgZm9yIG1vcmUg aW5mb3JtYXRpb24uCisgLk5tCisgZXhpdHMgd2l0aCB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHJl bW90ZSBjb21tYW5kIG9yIHdpdGggMjU1CisgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisrLlNoIElQ VjYKKytJUHY2IGFkZHJlc3MgY2FuIGJlIHVzZWQgZXZlcnl3aGVyZSB3aGVyZSBJUHY0IGFkZHJl c3MuIEluIGFsbCBlbnRyaWVzIG11c3QgYmUgdGhlIElQdjYgYWRkcmVzcyBlbmNsb3NlZCBpbiBz cXVhcmUgYnJhY2tldHMuIE5vdGU6IFRoZSBzcXVhcmUgYnJhY2tldHMgYXJlIG1ldGFjaGFyYWN0 ZXJzIGZvciB0aGUgc2hlbGwgYW5kIG11c3QgYmUgZXNjYXBlZCBpbiBzaGVsbC4KKyAuU2ggU0VF IEFMU08KKyAuWHIgc2NwIDEgLAorIC5YciBzZnRwIDEgLAorZGlmZiAtLWdpdCBhL3NzaGQuOCBi L3NzaGQuOAoraW5kZXggN2ZiY2E3NzZhLi4wMjI2YTgzMDMgMTAwNjQ0CistLS0gYS9zc2hkLjgK KysrKyBiL3NzaGQuOAorQEAgLTEwMTgsNiArMTAxOCw4IEBAIGNvbmN1cnJlbnRseSBmb3IgZGlm ZmVyZW50IHBvcnRzLCB0aGlzIGNvbnRhaW5zIHRoZSBwcm9jZXNzIElEIG9mIHRoZSBvbmUKKyBz dGFydGVkIGxhc3QpLgorIFRoZSBjb250ZW50IG9mIHRoaXMgZmlsZSBpcyBub3Qgc2Vuc2l0aXZl OyBpdCBjYW4gYmUgd29ybGQtcmVhZGFibGUuCisgLkVsCisrLlNoIElQVjYKKytJUHY2IGFkZHJl c3MgY2FuIGJlIHVzZWQgZXZlcnl3aGVyZSB3aGVyZSBJUHY0IGFkZHJlc3MuIEluIGFsbCBlbnRy aWVzIG11c3QgYmUgdGhlIElQdjYgYWRkcmVzcyBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMu IE5vdGU6IFRoZSBzcXVhcmUgYnJhY2tldHMgYXJlIG1ldGFjaGFyYWN0ZXJzIGZvciB0aGUgc2hl bGwgYW5kIG11c3QgYmUgZXNjYXBlZCBpbiBzaGVsbC4KKyAuU2ggU0VFIEFMU08KKyAuWHIgc2Nw IDEgLAorIC5YciBzZnRwIDEgLAorLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwMDYtb3Bl bnNzaC03LjJwMi14MTEucGF0Y2ggYi8wMDA2LW9wZW5zc2gtNy4ycDIteDExLnBhdGNoCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2VlZjdiLi4wMDAwMDAwCi0tLSBhLzAwMDYtb3Bl bnNzaC03LjJwMi14MTEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1Gcm9t IGQ2ZGM1YmU2ZTk2OWVjZmZlMzBiOTk3MjcwNmIzYzkyZDkzMGQ4MWYgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1E YXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMDYv NTNdIG9wZW5zc2gtNy4ycDIteDExCi0KLS0tLQotIGNoYW5uZWxzLmMgfCAyNSArKysrKysrKysr KysrKysrKysrLS0tLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDYgZGVs ZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9jaGFubmVscy5jIGIvY2hhbm5lbHMuYwotaW5kZXgg ODAwMTRmZjM0Li41Y2U2YmQ0MDAgMTAwNjQ0Ci0tLS0gYS9jaGFubmVscy5jCi0rKysgYi9jaGFu bmVscy5jCi1AQCAtNTE2OSwxMSArNTE2OSwxMyBAQCB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChz dHJ1Y3Qgc3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQsCi0gfQotIAotIHN0YXRpYyBp bnQKLS1jb25uZWN0X2xvY2FsX3hzb2NrZXRfcGF0aChjb25zdCBjaGFyICpwYXRobmFtZSkKLStj b25uZWN0X2xvY2FsX3hzb2NrZXRfcGF0aChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGxlbikK LSB7Ci0gCWludCBzb2NrOwotIAlzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKLSAKLSsJaWYgKGxl biA8PSAwKQotKwkJcmV0dXJuIC0xOwotIAlzb2NrID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RS RUFNLCAwKTsKLSAJaWYgKHNvY2sgPT0gLTEpIHsKLSAJCWVycm9yKCJzb2NrZXQ6ICUuMTAwcyIs IHN0cmVycm9yKGVycm5vKSk7Ci1AQCAtNTE4MSwxMSArNTE4MywxMiBAQCBjb25uZWN0X2xvY2Fs X3hzb2NrZXRfcGF0aChjb25zdCBjaGFyICpwYXRobmFtZSkKLSAJfQotIAltZW1zZXQoJmFkZHIs IDAsIHNpemVvZihhZGRyKSk7Ci0gCWFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0tCXN0cmxj cHkoYWRkci5zdW5fcGF0aCwgcGF0aG5hbWUsIHNpemVvZiBhZGRyLnN1bl9wYXRoKTsKLS0JaWYg KGNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpID09 IDApCi0rCWlmIChsZW4gPiBzaXplb2YgYWRkci5zdW5fcGF0aCkKLSsJCWxlbiA9IHNpemVvZiBh ZGRyLnN1bl9wYXRoOwotKwltZW1jcHkoYWRkci5zdW5fcGF0aCwgcGF0aG5hbWUsIGxlbik7Ci0r CWlmIChjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mIGFkZHIg LSAoc2l6ZW9mIGFkZHIuc3VuX3BhdGggLSBsZW4pICkgPT0gMCkKLSAJCXJldHVybiBzb2NrOwot IAljbG9zZShzb2NrKTsKLS0JZXJyb3IoImNvbm5lY3QgJS4xMDBzOiAlLjEwMHMiLCBhZGRyLnN1 bl9wYXRoLCBzdHJlcnJvcihlcnJubykpOwotIAlyZXR1cm4gLTE7Ci0gfQotIAotQEAgLTUxOTMs OCArNTE5NiwxOCBAQCBzdGF0aWMgaW50Ci0gY29ubmVjdF9sb2NhbF94c29ja2V0KHVfaW50IGRu cikKLSB7Ci0gCWNoYXIgYnVmWzEwMjRdOwotLQlzbnByaW50ZihidWYsIHNpemVvZiBidWYsIF9Q QVRIX1VOSVhfWCwgZG5yKTsKLS0JcmV0dXJuIGNvbm5lY3RfbG9jYWxfeHNvY2tldF9wYXRoKGJ1 Zik7Ci0rCWludCBsZW4sIHJldDsKLSsJbGVuID0gc25wcmludGYoYnVmICsgMSwgc2l6ZW9mIChi dWYpIC0gMSwgX1BBVEhfVU5JWF9YLCBkbnIpOwotKyNpZmRlZiBsaW51eAotKwkvKiB0cnkgYWJz dHJhY3Qgc29ja2V0IGZpcnN0ICovCi0rCWJ1ZlswXSA9ICdcMCc7Ci0rCWlmICgocmV0ID0gY29u bmVjdF9sb2NhbF94c29ja2V0X3BhdGgoYnVmLCBsZW4gKyAxKSkgPj0gMCkKLSsJCXJldHVybiBy ZXQ7Ci0rI2VuZGlmCi0rCWlmICgocmV0ID0gY29ubmVjdF9sb2NhbF94c29ja2V0X3BhdGgoYnVm ICsgMSwgbGVuKSkgPj0gMCkKLSsJCXJldHVybiByZXQ7Ci0rCWVycm9yKCJjb25uZWN0ICUuMTAw czogJS4xMDBzIiwgYnVmICsgMSwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotIH0K LSAKLSAjaWZkZWYgX19BUFBMRV9fCi0tLSAKLTIuNTIuMAotCgpkaWZmIC0tZ2l0IGEvMDAwNy1v cGVuc3NoLTUuMXAxLWFza3Bhc3MtcHJvZ3Jlc3MucGF0Y2ggYi8wMDA3LW9wZW5zc2gtNS4xcDEt YXNrcGFzcy1wcm9ncmVzcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjZi MzUxZS4uMDAwMDAwMAotLS0gYS8wMDA3LW9wZW5zc2gtNS4xcDEtYXNrcGFzcy1wcm9ncmVzcy5w YXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLUZyb20gYzYyY2Q3Y2UyNTM5YzFl YWM2ZDAxMzNjMDc0NDFjNjE3Y2JjN2JjMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206 IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5 IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAwNy81M10gb3BlbnNzaC01LjFw MS1hc2twYXNzLXByb2dyZXNzCi0KLS0tLQotIGNvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3MyLmMg fCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KLSAxIGZpbGUgY2hhbmdl ZCwgMzYgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbnRy aWIvZ25vbWUtc3NoLWFza3Bhc3MyLmMgYi9jb250cmliL2dub21lLXNzaC1hc2twYXNzMi5jCi1p bmRleCBhNjJmOTgxNTIuLmNiNzE1MmRjOCAxMDA2NDQKLS0tLSBhL2NvbnRyaWIvZ25vbWUtc3No LWFza3Bhc3MyLmMKLSsrKyBiL2NvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3MyLmMKLUBAIC01OCw2 ICs1OCw3IEBACi0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotIAotICNpbmNsdWRlIDxYMTEvWGxpYi5o PgotKyNpbmNsdWRlIDxnbGliLmg+Ci0gI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSAjaW5jbHVkZSA8 Z2RrL2dka3guaD4KLSAjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KLUBAIC0xNDYsNiArMTQ3 LDE3IEBAIHBhcnNlX2Vudl9oZXhfY29sb3IoY29uc3QgY2hhciAqZW52LCBHZGtDb2xvciAqYykK LSAJcmV0dXJuIDE7Ci0gfQotIAotK3N0YXRpYyB2b2lkCi0rbW92ZV9wcm9ncmVzcyhHdGtXaWRn ZXQgKmVudHJ5LCBncG9pbnRlciBwcm9ncmVzcykKLSt7Ci0rCWdkb3VibGUgc3RlcDsKLSsJZ19y ZXR1cm5faWZfZmFpbChHVEtfSVNfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSk7Ci0rCQotKwlzdGVw ID0gZ19yYW5kb21fZG91YmxlX3JhbmdlKDAuMDMsIDAuMSk7Ci0rCWd0a19wcm9ncmVzc19iYXJf c2V0X3B1bHNlX3N0ZXAoR1RLX1BST0dSRVNTX0JBUihwcm9ncmVzcyksIHN0ZXApOwotKwlndGtf cHJvZ3Jlc3NfYmFyX3B1bHNlKEdUS19QUk9HUkVTU19CQVIocHJvZ3Jlc3MpKTsKLSt9Ci0rCi0g c3RhdGljIGludAotIHBhc3NwaHJhc2VfZGlhbG9nKGNoYXIgKm1lc3NhZ2UsIGludCBwcm9tcHRf dHlwZSkKLSB7Ci1AQCAtMTUzLDcgKzE2NSw3IEBAIHBhc3NwaHJhc2VfZGlhbG9nKGNoYXIgKm1l c3NhZ2UsIGludCBwcm9tcHRfdHlwZSkKLSAJY2hhciAqcGFzc3BocmFzZSwgKmxvY2FsOwotIAlp bnQgcmVzdWx0LCBncmFiX3RyaWVzLCBncmFiX3NlcnZlciwgZ3JhYl9wb2ludGVyOwotIAlpbnQg YnV0dG9ucywgZGVmYXVsdF9yZXNwb25zZTsKLS0JR3RrV2lkZ2V0ICpwYXJlbnRfd2luZG93LCAq ZGlhbG9nLCAqZW50cnk7Ci0rCUd0a1dpZGdldCAqcGFyZW50X3dpbmRvdywgKmRpYWxvZywgKmVu dHJ5LCAqcHJvZ3Jlc3MsICpoYm94OwotIAlHZGtHcmFiU3RhdHVzIHN0YXR1czsKLSAJR2RrQ29s b3IgZmcsIGJnOwotIAlpbnQgZmdfc2V0ID0gMCwgYmdfc2V0ID0gMDsKLUBAIC0xOTksMTQgKzIx MSwxOSBAQCBwYXNzcGhyYXNlX2RpYWxvZyhjaGFyICptZXNzYWdlLCBpbnQgcHJvbXB0X3R5cGUp Ci0gCQlndGtfd2lkZ2V0X21vZGlmeV9iZyhkaWFsb2csIEdUS19TVEFURV9OT1JNQUwsICZiZyk7 Ci0gCi0gCWlmIChwcm9tcHRfdHlwZSA9PSBQUk9NUFRfRU5UUlkgfHwgcHJvbXB0X3R5cGUgPT0g UFJPTVBUX05PTkUpIHsKLSsJCWhib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOwotKwkJZ3Rr X2JveF9wYWNrX3N0YXJ0KEdUS19CT1goR1RLX0RJQUxPRyhkaWFsb2cpLT52Ym94KSwgaGJveCwg RkFMU0UsCi0rCQkgICAgRkFMU0UsIDApOwotKwkJZ3RrX3dpZGdldF9zaG93KGhib3gpOwotKwot IAkJZW50cnkgPSBndGtfZW50cnlfbmV3KCk7Ci0gCQlpZiAoZmdfc2V0KQotIAkJCWd0a193aWRn ZXRfbW9kaWZ5X2ZnKGVudHJ5LCBHVEtfU1RBVEVfTk9STUFMLCAmZmcpOwotIAkJaWYgKGJnX3Nl dCkKLSAJCQlndGtfd2lkZ2V0X21vZGlmeV9iZyhlbnRyeSwgR1RLX1NUQVRFX05PUk1BTCwgJmJn KTsKLSAJCWd0a19ib3hfcGFja19zdGFydCgKLS0JCSAgICBHVEtfQk9YKGd0a19kaWFsb2dfZ2V0 X2NvbnRlbnRfYXJlYShHVEtfRElBTE9HKGRpYWxvZykpKSwKLS0JCSAgICBlbnRyeSwgRkFMU0Us IEZBTFNFLCAwKTsKLSsJCSAgICBHVEtfQk9YKGhib3gpLCBlbnRyeSwgVFJVRSwgRkFMU0UsIDAp OwotKwkJZ3RrX2VudHJ5X3NldF93aWR0aF9jaGFycyhHVEtfRU5UUlkoZW50cnkpLCAyKTsKLSAJ CWd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkoZW50cnkpLCBGQUxTRSk7Ci0gCQln dGtfd2lkZ2V0X2dyYWJfZm9jdXMoZW50cnkpOwotIAkJaWYgKHByb21wdF90eXBlID09IFBST01Q VF9FTlRSWSkgewotQEAgLTIyNSw2ICsyNDIsMjIgQEAgcGFzc3BocmFzZV9kaWFsb2coY2hhciAq bWVzc2FnZSwgaW50IHByb21wdF90eXBlKQotIAkJCWdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1Qo ZW50cnkpLCAia2V5X3ByZXNzX2V2ZW50IiwKLSAJCQkgICAgR19DQUxMQkFDSyhjaGVja19ub25l KSwgZGlhbG9nKTsKLSAJCX0KLSsKLSsJCWhib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOwot KwkJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goR1RLX0RJQUxPRyhkaWFsb2cpLT52Ym94KSwK LSsJCSAgICBoYm94LCBGQUxTRSwgRkFMU0UsIDgpOwotKwkJZ3RrX3dpZGdldF9zaG93KGhib3gp OwotKwotKwkJcHJvZ3Jlc3MgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOwotKwotKwkJZ3RrX3By b2dyZXNzX2Jhcl9zZXRfdGV4dChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNzKSwKLSsJCSAgICAi UGFzc3BocmFzZSBsZW5ndGggaGlkZGVuIGludGVudGlvbmFsbHkiKTsKLSsJCWd0a19ib3hfcGFj a19zdGFydChHVEtfQk9YKGhib3gpLCBwcm9ncmVzcywgVFJVRSwKLSsJCSAgICBUUlVFLCA1KTsK LSsJCWd0a193aWRnZXRfc2hvdyhwcm9ncmVzcyk7Ci0rCQlnX3NpZ25hbF9jb25uZWN0KEdfT0JK RUNUKGVudHJ5KSwgImNoYW5nZWQiLAotKwkJCQkgR19DQUxMQkFDSyhtb3ZlX3Byb2dyZXNzKSwg cHJvZ3Jlc3MpOwotKwotIAl9Ci0gCi0gCS8qIEdyYWIgZm9jdXMgKi8KLS0tIAotMi41Mi4wCi0K CmRpZmYgLS1naXQgYS8wMDA3LW9wZW5zc2gtNS44cDItc2lncGlwZS5wYXRjaCBiLzAwMDctb3Bl bnNzaC01LjhwMi1zaWdwaXBlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjFkYjJkODYKLS0tIC9kZXYvbnVsbAorKysgYi8wMDA3LW9wZW5zc2gtNS44cDItc2lncGlw ZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitGcm9tIGUxNWNjNzNjMWEyNmRjZmFiM2ZkMDA3N2Vl MDU2MTcyNGFkNGY4YjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVs eWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQz OjI4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvNTRdIG9wZW5zc2gtNS44cDItc2lncGlwZQor CistLS0KKyBzc2gta2V5c2Nhbi5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRp b25zKCspCisKK2RpZmYgLS1naXQgYS9zc2gta2V5c2Nhbi5jIGIvc3NoLWtleXNjYW4uYworaW5k ZXggOWJkM2U3OGViLi5iYjNlZTQ2MmQgMTAwNjQ0CistLS0gYS9zc2gta2V5c2Nhbi5jCisrKysg Yi9zc2gta2V5c2Nhbi5jCitAQCAtNzc3LDYgKzc3Nyw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQorIAlpZiAobWF4ZmQgPiBmZGxpbV9nZXQoMCkpCisgCQlmZGxpbV9zZXQobWF4ZmQp OworIAlmZGNvbiA9IHhjYWxsb2MobWF4ZmQsIHNpemVvZihjb24pKTsKKysgCisrCXNpZ25hbChT SUdQSVBFLCBTSUdfSUdOKTsKKysKKyAJcmVhZF93YWl0ID0geGNhbGxvYyhtYXhmZCwgc2l6ZW9m KHN0cnVjdCBwb2xsZmQpKTsKKyAJZm9yIChqID0gMDsgaiA8IG1heGZkOyBqKyspCisgCQlyZWFk X3dhaXRbal0uZmQgPSAtMTsKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDA4LW9wZW5z c2gtNC4zcDItYXNrcGFzcy1ncmFiLWluZm8ucGF0Y2ggYi8wMDA4LW9wZW5zc2gtNC4zcDItYXNr cGFzcy1ncmFiLWluZm8ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMDg0 ODIuLjAwMDAwMDAKLS0tIGEvMDAwOC1vcGVuc3NoLTQuM3AyLWFza3Bhc3MtZ3JhYi1pbmZvLnBh dGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotRnJvbSBkMTI0YWIwZjZlZWE5MTBk YzVmMDNjZGQ4MDhmNmZhNzkyYmYyYjdhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTog RG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkg MjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDA4LzUzXSBvcGVuc3NoLTQuM3Ay LWFza3Bhc3MtZ3JhYi1pbmZvCi0KLS0tLQotIGNvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3MyLmMg fCA4ICsrKysrKy0tCi0gMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv bnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3MyLmMgYi9jb250 cmliL2dub21lLXNzaC1hc2twYXNzMi5jCi1pbmRleCBjYjcxNTJkYzguLmJiZTkzZDgzOCAxMDA2 NDQKLS0tLSBhL2NvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3MyLmMKLSsrKyBiL2NvbnRyaWIvZ25v bWUtc3NoLWFza3Bhc3MyLmMKLUBAIC03MCw4ICs3MCwxMiBAQCByZXBvcnRfZmFpbGVkX2dyYWIg KEd0a1dpZGdldCAqcGFyZW50X3dpbmRvdywgY29uc3QgY2hhciAqd2hhdCkKLSAKLSAJZXJyID0g Z3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKHBhcmVudF93aW5kb3cpLCAwLAotIAkg ICAgR1RLX01FU1NBR0VfRVJST1IsIEdUS19CVVRUT05TX0NMT1NFLAotLQkgICAgIkNvdWxkIG5v dCBncmFiICVzLiBBIG1hbGljaW91cyBjbGllbnQgbWF5IGJlIGVhdmVzZHJvcHBpbmcgIgotLQkg ICAgIm9uIHlvdXIgc2Vzc2lvbi4iLCB3aGF0KTsKLSsJICAgICJTU0ggcGFzc3dvcmQgZGlhbG9n IGNvdWxkIG5vdCBncmFiIHRoZSAlcyBpbnB1dC5cbiIKLSsJICAgICJUaGlzIG1pZ2h0IGJlIGNh dXNlZCBieSBhcHBsaWNhdGlvbiBzdWNoIGFzIHNjcmVlbnNhdmVyLCAiCi0rCSAgICAiaG93ZXZl ciBpdCBjb3VsZCBhbHNvIG1lYW4gdGhhdCBzb21lb25lIG1heSBiZSBlYXZlc2Ryb3BwaW5nICIK LSsJICAgICJvbiB5b3VyIHNlc3Npb24uXG4iCi0rCSAgICAiRWl0aGVyIGNsb3NlIHRoZSBhcHBs aWNhdGlvbiB3aGljaCBncmFicyB0aGUgJXMgb3IgIgotKwkgICAgImxvZyBvdXQgYW5kIGxvZyBp biBhZ2FpbiB0byBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcuIiwgd2hhdCwgd2hhdCk7Ci0g CWd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1coZXJyKSwgR1RLX1dJTl9QT1NfQ0VO VEVSKTsKLSAKLSAJZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhlcnIpKTsKLS0tIAotMi41Mi4w Ci0KCmRpZmYgLS1naXQgYS8wMDA4LW9wZW5zc2gtNy4ycDIteDExLnBhdGNoIGIvMDAwOC1vcGVu c3NoLTcuMnAyLXgxMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44 ZjkyMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvMDAwOC1vcGVuc3NoLTcuMnAyLXgxMS5wYXRjaApA QCAtMCwwICsxLDY4IEBACitGcm9tIDdjM2NhNTQ3MGMwMGQ5Njk5NmU0MGY0NDljYjBhMDQ2NWU4 MWRhOTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8 YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAw CitTdWJqZWN0OiBbUEFUQ0ggMDgvNTRdIG9wZW5zc2gtNy4ycDIteDExCisKKy0tLQorIGNoYW5u ZWxzLmMgfCAyNSArKysrKysrKysrKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5 IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jaGFubmVscy5j IGIvY2hhbm5lbHMuYworaW5kZXggZDdjNTVmYzg5Li43MWNjNjdkMTcgMTAwNjQ0CistLS0gYS9j aGFubmVscy5jCisrKysgYi9jaGFubmVscy5jCitAQCAtNTE3OCwxMSArNTE3OCwxMyBAQCB4MTFf Y3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZz ZXQsCisgfQorIAorIHN0YXRpYyBpbnQKKy1jb25uZWN0X2xvY2FsX3hzb2NrZXRfcGF0aChjb25z dCBjaGFyICpwYXRobmFtZSkKKytjb25uZWN0X2xvY2FsX3hzb2NrZXRfcGF0aChjb25zdCBjaGFy ICpwYXRobmFtZSwgaW50IGxlbikKKyB7CisgCWludCBzb2NrOworIAlzdHJ1Y3Qgc29ja2FkZHJf dW4gYWRkcjsKKyAKKysJaWYgKGxlbiA8PSAwKQorKwkJcmV0dXJuIC0xOworIAlzb2NrID0gc29j a2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKyAJaWYgKHNvY2sgPT0gLTEpIHsKKyAJCWVy cm9yKCJzb2NrZXQ6ICUuMTAwcyIsIHN0cmVycm9yKGVycm5vKSk7CitAQCAtNTE5MCwxMSArNTE5 MiwxMiBAQCBjb25uZWN0X2xvY2FsX3hzb2NrZXRfcGF0aChjb25zdCBjaGFyICpwYXRobmFtZSkK KyAJfQorIAltZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgCWFkZHIuc3VuX2ZhbWls eSA9IEFGX1VOSVg7CistCXN0cmxjcHkoYWRkci5zdW5fcGF0aCwgcGF0aG5hbWUsIHNpemVvZiBh ZGRyLnN1bl9wYXRoKTsKKy0JaWYgKGNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZh ZGRyLCBzaXplb2YoYWRkcikpID09IDApCisrCWlmIChsZW4gPiBzaXplb2YgYWRkci5zdW5fcGF0 aCkKKysJCWxlbiA9IHNpemVvZiBhZGRyLnN1bl9wYXRoOworKwltZW1jcHkoYWRkci5zdW5fcGF0 aCwgcGF0aG5hbWUsIGxlbik7CisrCWlmIChjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIg KikmYWRkciwgc2l6ZW9mIGFkZHIgLSAoc2l6ZW9mIGFkZHIuc3VuX3BhdGggLSBsZW4pICkgPT0g MCkKKyAJCXJldHVybiBzb2NrOworIAljbG9zZShzb2NrKTsKKy0JZXJyb3IoImNvbm5lY3QgJS4x MDBzOiAlLjEwMHMiLCBhZGRyLnN1bl9wYXRoLCBzdHJlcnJvcihlcnJubykpOworIAlyZXR1cm4g LTE7CisgfQorIAorQEAgLTUyMDIsOCArNTIwNSwxOCBAQCBzdGF0aWMgaW50CisgY29ubmVjdF9s b2NhbF94c29ja2V0KHVfaW50IGRucikKKyB7CisgCWNoYXIgYnVmWzEwMjRdOworLQlzbnByaW50 ZihidWYsIHNpemVvZiBidWYsIF9QQVRIX1VOSVhfWCwgZG5yKTsKKy0JcmV0dXJuIGNvbm5lY3Rf bG9jYWxfeHNvY2tldF9wYXRoKGJ1Zik7CisrCWludCBsZW4sIHJldDsKKysJbGVuID0gc25wcmlu dGYoYnVmICsgMSwgc2l6ZW9mIChidWYpIC0gMSwgX1BBVEhfVU5JWF9YLCBkbnIpOworKyNpZmRl ZiBsaW51eAorKwkvKiB0cnkgYWJzdHJhY3Qgc29ja2V0IGZpcnN0ICovCisrCWJ1ZlswXSA9ICdc MCc7CisrCWlmICgocmV0ID0gY29ubmVjdF9sb2NhbF94c29ja2V0X3BhdGgoYnVmLCBsZW4gKyAx KSkgPj0gMCkKKysJCXJldHVybiByZXQ7CisrI2VuZGlmCisrCWlmICgocmV0ID0gY29ubmVjdF9s b2NhbF94c29ja2V0X3BhdGgoYnVmICsgMSwgbGVuKSkgPj0gMCkKKysJCXJldHVybiByZXQ7Cisr CWVycm9yKCJjb25uZWN0ICUuMTAwczogJS4xMDBzIiwgYnVmICsgMSwgc3RyZXJyb3IoZXJybm8p KTsKKysJcmV0dXJuIC0xOworIH0KKyAKKyAjaWZkZWYgX19BUFBMRV9fCistLSAKKzIuNTMuMAor CgpkaWZmIC0tZ2l0IGEvMDAwOS1vcGVuc3NoLTUuMXAxLWFza3Bhc3MtcHJvZ3Jlc3MucGF0Y2gg Yi8wMDA5LW9wZW5zc2gtNS4xcDEtYXNrcGFzcy1wcm9ncmVzcy5wYXRjaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM2NzRiCi0tLSAvZGV2L251bGwKKysrIGIvMDAwOS1v cGVuc3NoLTUuMXAxLWFza3Bhc3MtcHJvZ3Jlc3MucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJv bSA0MzE0ZDI4OGRiMmE4MTRhZDU4ZTkxZGEyMWQyYTY5ZTQ5ODNkM2MxIE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgor RGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDA5 LzU0XSBvcGVuc3NoLTUuMXAxLWFza3Bhc3MtcHJvZ3Jlc3MKKworLS0tCisgY29udHJpYi9nbm9t ZS1zc2gtYXNrcGFzczIuYyB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LQorIDEgZmlsZSBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitk aWZmIC0tZ2l0IGEvY29udHJpYi9nbm9tZS1zc2gtYXNrcGFzczIuYyBiL2NvbnRyaWIvZ25vbWUt c3NoLWFza3Bhc3MyLmMKK2luZGV4IGE2MmY5ODE1Mi4uY2I3MTUyZGM4IDEwMDY0NAorLS0tIGEv Y29udHJpYi9nbm9tZS1zc2gtYXNrcGFzczIuYworKysrIGIvY29udHJpYi9nbm9tZS1zc2gtYXNr cGFzczIuYworQEAgLTU4LDYgKzU4LDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisgI2lu Y2x1ZGUgPFgxMS9YbGliLmg+CisrI2luY2x1ZGUgPGdsaWIuaD4KKyAjaW5jbHVkZSA8Z3RrL2d0 ay5oPgorICNpbmNsdWRlIDxnZGsvZ2RreC5oPgorICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5o PgorQEAgLTE0Niw2ICsxNDcsMTcgQEAgcGFyc2VfZW52X2hleF9jb2xvcihjb25zdCBjaGFyICpl bnYsIEdka0NvbG9yICpjKQorIAlyZXR1cm4gMTsKKyB9CisgCisrc3RhdGljIHZvaWQKKyttb3Zl X3Byb2dyZXNzKEd0a1dpZGdldCAqZW50cnksIGdwb2ludGVyIHByb2dyZXNzKQorK3sKKysJZ2Rv dWJsZSBzdGVwOworKwlnX3JldHVybl9pZl9mYWlsKEdUS19JU19QUk9HUkVTU19CQVIocHJvZ3Jl c3MpKTsKKysJCisrCXN0ZXAgPSBnX3JhbmRvbV9kb3VibGVfcmFuZ2UoMC4wMywgMC4xKTsKKysJ Z3RrX3Byb2dyZXNzX2Jhcl9zZXRfcHVsc2Vfc3RlcChHVEtfUFJPR1JFU1NfQkFSKHByb2dyZXNz KSwgc3RlcCk7CisrCWd0a19wcm9ncmVzc19iYXJfcHVsc2UoR1RLX1BST0dSRVNTX0JBUihwcm9n cmVzcykpOworK30KKysKKyBzdGF0aWMgaW50CisgcGFzc3BocmFzZV9kaWFsb2coY2hhciAqbWVz c2FnZSwgaW50IHByb21wdF90eXBlKQorIHsKK0BAIC0xNTMsNyArMTY1LDcgQEAgcGFzc3BocmFz ZV9kaWFsb2coY2hhciAqbWVzc2FnZSwgaW50IHByb21wdF90eXBlKQorIAljaGFyICpwYXNzcGhy YXNlLCAqbG9jYWw7CisgCWludCByZXN1bHQsIGdyYWJfdHJpZXMsIGdyYWJfc2VydmVyLCBncmFi X3BvaW50ZXI7CisgCWludCBidXR0b25zLCBkZWZhdWx0X3Jlc3BvbnNlOworLQlHdGtXaWRnZXQg KnBhcmVudF93aW5kb3csICpkaWFsb2csICplbnRyeTsKKysJR3RrV2lkZ2V0ICpwYXJlbnRfd2lu ZG93LCAqZGlhbG9nLCAqZW50cnksICpwcm9ncmVzcywgKmhib3g7CisgCUdka0dyYWJTdGF0dXMg c3RhdHVzOworIAlHZGtDb2xvciBmZywgYmc7CisgCWludCBmZ19zZXQgPSAwLCBiZ19zZXQgPSAw OworQEAgLTE5OSwxNCArMjExLDE5IEBAIHBhc3NwaHJhc2VfZGlhbG9nKGNoYXIgKm1lc3NhZ2Us IGludCBwcm9tcHRfdHlwZSkKKyAJCWd0a193aWRnZXRfbW9kaWZ5X2JnKGRpYWxvZywgR1RLX1NU QVRFX05PUk1BTCwgJmJnKTsKKyAKKyAJaWYgKHByb21wdF90eXBlID09IFBST01QVF9FTlRSWSB8 fCBwcm9tcHRfdHlwZSA9PSBQUk9NUFRfTk9ORSkgeworKwkJaGJveCA9IGd0a19oYm94X25ldyhG QUxTRSwgMCk7CisrCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChHVEtfRElBTE9HKGRpYWxv ZyktPnZib3gpLCBoYm94LCBGQUxTRSwKKysJCSAgICBGQUxTRSwgMCk7CisrCQlndGtfd2lkZ2V0 X3Nob3coaGJveCk7CisrCisgCQllbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAJCWlmIChmZ19z ZXQpCisgCQkJZ3RrX3dpZGdldF9tb2RpZnlfZmcoZW50cnksIEdUS19TVEFURV9OT1JNQUwsICZm Zyk7CisgCQlpZiAoYmdfc2V0KQorIAkJCWd0a193aWRnZXRfbW9kaWZ5X2JnKGVudHJ5LCBHVEtf U1RBVEVfTk9STUFMLCAmYmcpOworIAkJZ3RrX2JveF9wYWNrX3N0YXJ0KAorLQkJICAgIEdUS19C T1goZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKEdUS19ESUFMT0coZGlhbG9nKSkpLAorLQkJ ICAgIGVudHJ5LCBGQUxTRSwgRkFMU0UsIDApOworKwkJICAgIEdUS19CT1goaGJveCksIGVudHJ5 LCBUUlVFLCBGQUxTRSwgMCk7CisrCQlndGtfZW50cnlfc2V0X3dpZHRoX2NoYXJzKEdUS19FTlRS WShlbnRyeSksIDIpOworIAkJZ3RrX2VudHJ5X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShlbnRy eSksIEZBTFNFKTsKKyAJCWd0a193aWRnZXRfZ3JhYl9mb2N1cyhlbnRyeSk7CisgCQlpZiAocHJv bXB0X3R5cGUgPT0gUFJPTVBUX0VOVFJZKSB7CitAQCAtMjI1LDYgKzI0MiwyMiBAQCBwYXNzcGhy YXNlX2RpYWxvZyhjaGFyICptZXNzYWdlLCBpbnQgcHJvbXB0X3R5cGUpCisgCQkJZ19zaWduYWxf Y29ubmVjdChHX09CSkVDVChlbnRyeSksICJrZXlfcHJlc3NfZXZlbnQiLAorIAkJCSAgICBHX0NB TExCQUNLKGNoZWNrX25vbmUpLCBkaWFsb2cpOworIAkJfQorKworKwkJaGJveCA9IGd0a19oYm94 X25ldyhGQUxTRSwgMCk7CisrCQlndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChHVEtfRElBTE9H KGRpYWxvZyktPnZib3gpLAorKwkJICAgIGhib3gsIEZBTFNFLCBGQUxTRSwgOCk7CisrCQlndGtf d2lkZ2V0X3Nob3coaGJveCk7CisrCisrCQlwcm9ncmVzcyA9IGd0a19wcm9ncmVzc19iYXJfbmV3 KCk7CisrCisrCQlndGtfcHJvZ3Jlc3NfYmFyX3NldF90ZXh0KEdUS19QUk9HUkVTU19CQVIocHJv Z3Jlc3MpLAorKwkJICAgICJQYXNzcGhyYXNlIGxlbmd0aCBoaWRkZW4gaW50ZW50aW9uYWxseSIp OworKwkJZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIHByb2dyZXNzLCBUUlVFLAor KwkJICAgIFRSVUUsIDUpOworKwkJZ3RrX3dpZGdldF9zaG93KHByb2dyZXNzKTsKKysJCWdfc2ln bmFsX2Nvbm5lY3QoR19PQkpFQ1QoZW50cnkpLCAiY2hhbmdlZCIsCisrCQkJCSBHX0NBTExCQUNL KG1vdmVfcHJvZ3Jlc3MpLCBwcm9ncmVzcyk7CisrCisgCX0KKyAKKyAJLyogR3JhYiBmb2N1cyAq LworLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwMDktb3BlbnNzaC04LjdwMS1yZWRoYXQu cGF0Y2ggYi8wMDA5LW9wZW5zc2gtOC43cDEtcmVkaGF0LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA4ZTc1YWE1Li4wMDAwMDAwCi0tLSBhLzAwMDktb3BlbnNzaC04LjdwMS1y ZWRoYXQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotRnJvbSBjNzY2MDcz ODRmZjA3N2JhMWM0NTc1OWU3NDk1NjJjY2NhZWFhMzM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1 LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDA5LzUzXSBvcGVu c3NoLTguN3AxLXJlZGhhdAotCi0tLS0KLSBzc2hfY29uZmlnICAgICAgICAgICAgfCAgNyArKysr KysrCi0gc3NoX2NvbmZpZ19yZWRoYXQgICAgIHwgMTggKysrKysrKysrKysrKysrKysrCi0gc3No ZF9jb25maWcgICAgICAgICAgIHwgIDggKysrKysrKysKLSBzc2hkX2NvbmZpZy4wICAgICAgICAg fCAgNiArKystLS0KLSBzc2hkX2NvbmZpZy41ICAgICAgICAgfCAgMiArLQotIHNzaGRfY29uZmln X3JlZGhhdCAgICB8IDE4ICsrKysrKysrKysrKysrKysrKwotIHNzaGRfY29uZmlnX3JlZGhhdF9j cCB8ICA3ICsrKysrKysKLSA3IGZpbGVzIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKyksIDQgZGVs ZXRpb25zKC0pCi0gY3JlYXRlIG1vZGUgMTAwNjQ0IHNzaF9jb25maWdfcmVkaGF0Ci0gY3JlYXRl IG1vZGUgMTAwNjQ0IHNzaGRfY29uZmlnX3JlZGhhdAotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzc2hk X2NvbmZpZ19yZWRoYXRfY3AKLQotZGlmZiAtLWdpdCBhL3NzaF9jb25maWcgYi9zc2hfY29uZmln Ci1pbmRleCAyMzhhMGM1ZTMuLmQ5MzI0Yzk1NyAxMDA2NDQKLS0tLSBhL3NzaF9jb25maWcKLSsr KyBiL3NzaF9jb25maWcKLUBAIC00MywzICs0MywxMCBAQAotICMgICBQcm94eUNvbW1hbmQgc3No IC1xIC1XICVoOiVwIGdhdGV3YXkuZXhhbXBsZS5jb20KLSAjICAgUmVrZXlMaW1pdCAxRyAxaAot ICMgICBVc2VyS25vd25Ib3N0c0ZpbGUgfi8uc3NoL2tub3duX2hvc3RzLmQvJWsKLSsjCi0rIyBU aGlzIHN5c3RlbSBpcyBmb2xsb3dpbmcgc3lzdGVtLXdpZGUgY3J5cHRvIHBvbGljeS4KLSsjIFRv IG1vZGlmeSB0aGUgY3J5cHRvIHByb3BlcnRpZXMgKENpcGhlcnMsIE1BQ3MsIC4uLiksIGNyZWF0 ZSBhICAqLmNvbmYKLSsjICBmaWxlIHVuZGVyICAvZXRjL3NzaC9zc2hfY29uZmlnLmQvICB3aGlj aCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKLSsjIGluY2x1ZGVkIGJlbG93LiBGb3IgbW9yZSBpbmZv cm1hdGlvbiwgc2VlIG1hbnVhbCBwYWdlIGZvcgotKyMgIHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMo OCkgIGFuZCAgc3NoX2NvbmZpZyg1KS4KLStJbmNsdWRlIC9ldGMvc3NoL3NzaF9jb25maWcuZC8q LmNvbmYKLWRpZmYgLS1naXQgYS9zc2hfY29uZmlnX3JlZGhhdCBiL3NzaF9jb25maWdfcmVkaGF0 Ci1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwLi44YjFiNTkwMjEKLS0tLSAv ZGV2L251bGwKLSsrKyBiL3NzaF9jb25maWdfcmVkaGF0Ci1AQCAtMCwwICsxLDE4IEBACi0rIyBU aGUgb3B0aW9ucyBoZXJlIGFyZSBpbiB0aGUgIk1hdGNoIGZpbmFsIGJsb2NrIiB0byBiZSBhcHBs aWVkIGFzIHRoZSBsYXN0Ci0rIyBvcHRpb25zIGFuZCBjb3VsZCBiZSBwb3RlbnRpYWxseSBvdmVy d3JpdHRlbiBieSB0aGUgdXNlciBjb25maWd1cmF0aW9uCi0rTWF0Y2ggZmluYWwgYWxsCi0rCSMg Rm9sbG93IHN5c3RlbS13aWRlIENyeXB0byBQb2xpY3ksIGlmIGRlZmluZWQ6Ci0rCUluY2x1ZGUg L2V0Yy9jcnlwdG8tcG9saWNpZXMvYmFjay1lbmRzL29wZW5zc2guY29uZmlnCi0rCi0rCUdTU0FQ SUF1dGhlbnRpY2F0aW9uIHllcwotKwotKyMgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHllcyB0 aGVuIHJlbW90ZSBYMTEgY2xpZW50cyB3aWxsIGhhdmUgZnVsbCBhY2Nlc3MKLSsjIHRvIHRoZSBv cmlnaW5hbCBYMTEgZGlzcGxheS4gQXMgdmlydHVhbGx5IG5vIFgxMSBjbGllbnQgc3VwcG9ydHMg dGhlIHVudHJ1c3RlZAotKyMgbW9kZSBjb3JyZWN0bHkgd2Ugc2V0IHRoaXMgdG8geWVzLgotKwlG b3J3YXJkWDExVHJ1c3RlZCB5ZXMKLSsKLSsjIHJoYnojMjM1MjY1MyAtIGV4cG9ydCBDT0xPUlRF Uk0KLSsJU2VuZEVudiBDT0xPUlRFUk0KLSsKLSsjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50 IHRvIHVzZSAubG9jYWwgZG9tYWluCi0rIyBIb3N0ICoubG9jYWwKLWRpZmYgLS1naXQgYS9zc2hk X2NvbmZpZyBiL3NzaGRfY29uZmlnCi1pbmRleCAwZjRhM2E3MjQuLjYwODIwM2U0YiAxMDA2NDQK LS0tLSBhL3NzaGRfY29uZmlnCi0rKysgYi9zc2hkX2NvbmZpZwotQEAgLTEwLDYgKzEwLDE0IEBA Ci0gIyBwb3NzaWJsZSwgYnV0IGxlYXZlIHRoZW0gY29tbWVudGVkLiAgVW5jb21tZW50ZWQgb3B0 aW9ucyBvdmVycmlkZSB0aGUKLSAjIGRlZmF1bHQgdmFsdWUuCi0gCi0rIyBUbyBtb2RpZnkgdGhl IHN5c3RlbS13aWRlIHNzaGQgY29uZmlndXJhdGlvbiwgY3JlYXRlIGEgICouY29uZiAgZmlsZSB1 bmRlcgotKyMgIC9ldGMvc3NoL3NzaGRfY29uZmlnLmQvICB3aGljaCB3aWxsIGJlIGF1dG9tYXRp Y2FsbHkgaW5jbHVkZWQgYmVsb3cKLStJbmNsdWRlIC9ldGMvc3NoL3NzaGRfY29uZmlnLmQvKi5j b25mCi0rCi0rIyBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHBvcnQgb24gYSBTRUxpbnV4IHN5 c3RlbSwgeW91IGhhdmUgdG8gdGVsbAotKyMgU0VMaW51eCBhYm91dCB0aGlzIGNoYW5nZS4KLSsj IHNlbWFuYWdlIHBvcnQgLWEgLXQgc3NoX3BvcnRfdCAtcCB0Y3AgI1BPUlROVU1CRVIKLSsjCi0g I1BvcnQgMjIKLSAjQWRkcmVzc0ZhbWlseSBhbnkKLSAjTGlzdGVuQWRkcmVzcyAwLjAuMC4wCi1k aWZmIC0tZ2l0IGEvc3NoZF9jb25maWcuMCBiL3NzaGRfY29uZmlnLjAKLWluZGV4IGM2M2Q3Mjlh OS4uOGM1MjE3YzBiIDEwMDY0NAotLS0tIGEvc3NoZF9jb25maWcuMAotKysrIGIvc3NoZF9jb25m aWcuMAotQEAgLTEyMTksOSArMTIxOSw5IEBAIERFU0NSSVBUSU9OCi0gCi0gICAgICBTeXNsb2dG YWNpbGl0eQotICAgICAgICAgICAgICBHaXZlcyB0aGUgZmFjaWxpdHkgY29kZSB0aGF0IGlzIHVz ZWQgd2hlbiBsb2dnaW5nIG1lc3NhZ2VzIGZyb20KLS0gICAgICAgICAgICAgc3NoZCg4KS4gIFRo ZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBEQUVNT04sIFVTRVIsIEFVVEgsIExPQ0FMMCwKLS0gICAg ICAgICAgICAgTE9DQUwxLCBMT0NBTDIsIExPQ0FMMywgTE9DQUw0LCBMT0NBTDUsIExPQ0FMNiwg TE9DQUw3LiAgVGhlCi0tICAgICAgICAgICAgIGRlZmF1bHQgaXMgQVVUSC4KLSsgICAgICAgICAg ICAgc3NoZCg4KS4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBEQUVNT04sIFVTRVIsIEFVVEgs IEFVVEhQUklWLAotKyAgICAgICAgICAgICBMT0NBTDAsIExPQ0FMMSwgTE9DQUwyLCBMT0NBTDMs IExPQ0FMNCwgTE9DQUw1LCBMT0NBTDYsIExPQ0FMNy4KLSsgICAgICAgICAgICAgVGhlIGRlZmF1 bHQgaXMgQVVUSC4KLSAKLSAgICAgIFRDUEtlZXBBbGl2ZQotICAgICAgICAgICAgICBTcGVjaWZp ZXMgd2hldGhlciB0aGUgc3lzdGVtIHNob3VsZCBzZW5kIFRDUCBrZWVwYWxpdmUgbWVzc2FnZXMK LWRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggNmFlNjA2 ZjFlLi5hYTlmMGFmNzYgMTAwNjQ0Ci0tLS0gYS9zc2hkX2NvbmZpZy41Ci0rKysgYi9zc2hkX2Nv bmZpZy41Ci1AQCAtMTk0MSw3ICsxOTQxLDcgQEAgQnkgZGVmYXVsdCBubyBzdWJzeXN0ZW1zIGFy ZSBkZWZpbmVkLgotIC5JdCBDbSBTeXNsb2dGYWNpbGl0eQotIEdpdmVzIHRoZSBmYWNpbGl0eSBj b2RlIHRoYXQgaXMgdXNlZCB3aGVuIGxvZ2dpbmcgbWVzc2FnZXMgZnJvbQotIC5YciBzc2hkIDgg LgotLVRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBEQUVNT04sIFVTRVIsIEFVVEgsIExPQ0FMMCwg TE9DQUwxLCBMT0NBTDIsCi0rVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6IERBRU1PTiwgVVNFUiwg QVVUSCwgQVVUSFBSSVYsIExPQ0FMMCwgTE9DQUwxLCBMT0NBTDIsCi0gTE9DQUwzLCBMT0NBTDQs IExPQ0FMNSwgTE9DQUw2LCBMT0NBTDcuCi0gVGhlIGRlZmF1bHQgaXMgQVVUSC4KLSAuSXQgQ20g VENQS2VlcEFsaXZlCi1kaWZmIC0tZ2l0IGEvc3NoZF9jb25maWdfcmVkaGF0IGIvc3NoZF9jb25m aWdfcmVkaGF0Ci1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMDAwLi45OTNhMjhk NTIKLS0tLSAvZGV2L251bGwKLSsrKyBiL3NzaGRfY29uZmlnX3JlZGhhdAotQEAgLTAsMCArMSwx OCBAQAotK1N5c2xvZ0ZhY2lsaXR5IEFVVEhQUklWCi0rCi0rS2JkSW50ZXJhY3RpdmVBdXRoZW50 aWNhdGlvbiBubwotKwotK0dTU0FQSUF1dGhlbnRpY2F0aW9uIHllcwotK0dTU0FQSUNsZWFudXBD cmVkZW50aWFscyBubwotKwotK1VzZVBBTSB5ZXMKLSsKLStYMTFGb3J3YXJkaW5nIHllcwotKwot KyMgcmhieiMyMzUyNjUzIC0gYWNjZXB0IENPTE9SVEVSTQotKwlBY2NlcHRFbnYgQ09MT1JURVJN Ci0rCi0rIyBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgcGFtX21vdGQgaW4gL2V0Yy9wYW0uZC9z c2hkIGluc3RlYWQgb2YgUHJpbnRNb3RkLAotKyMgYXMgaXQgaXMgbW9yZSBjb25maWd1cmFibGUg YW5kIHZlcnNhdGlsZSB0aGFuIHRoZSBidWlsdC1pbiB2ZXJzaW9uLgotK1ByaW50TW90ZCBubwot KwotZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnX3JlZGhhdF9jcCBiL3NzaGRfY29uZmlnX3JlZGhh dF9jcAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAwMC4uMWQ1OTJkMTNmCi0t LS0gL2Rldi9udWxsCi0rKysgYi9zc2hkX2NvbmZpZ19yZWRoYXRfY3AKLUBAIC0wLDAgKzEsNyBA QAotKyMgVGhpcyBzeXN0ZW0gaXMgZm9sbG93aW5nIHN5c3RlbS13aWRlIGNyeXB0byBwb2xpY3ku IFRoZSBjaGFuZ2VzIHRvCi0rIyBjcnlwdG8gcHJvcGVydGllcyAoQ2lwaGVycywgTUFDcywgLi4u KSB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3QgaW4KLSsjIHRoaXMgb3IgZm9sbG93aW5nIGluY2x1 ZGVkIGZpbGVzLiBUbyBvdmVycmlkZSBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLAotKyMgd3Jp dGUgaXQgYmVmb3JlIHRoaXMgYmxvY2sgb3IgaW5jbHVkZSBpdCBiZWZvcmUgdGhpcyBmaWxlLgot KyMgUGxlYXNlLCBzZWUgbWFudWFsIHBhZ2VzIGZvciB1cGRhdGUtY3J5cHRvLXBvbGljaWVzKDgp IGFuZCBzc2hkX2NvbmZpZyg1KS4KLStJbmNsdWRlIC9ldGMvY3J5cHRvLXBvbGljaWVzL2JhY2st ZW5kcy9vcGVuc3Noc2VydmVyLmNvbmZpZwotKwotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBh LzAwMTAtb3BlbnNzaC00LjNwMi1hc2twYXNzLWdyYWItaW5mby5wYXRjaCBiLzAwMTAtb3BlbnNz aC00LjNwMi1hc2twYXNzLWdyYWItaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42MTIyM2FlCi0tLSAvZGV2L251bGwKKysrIGIvMDAxMC1vcGVuc3NoLTQuM3Ay LWFza3Bhc3MtZ3JhYi1pbmZvLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZGI0Y2EzMzZl NGJkZGZjNGM1Y2U2NTFmYmRmMWY0MDM0OGQ5M2I4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK K0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwg MTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMC81NF0gb3BlbnNz aC00LjNwMi1hc2twYXNzLWdyYWItaW5mbworCisjaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29t L3Nob3dfYnVnLmNnaT9pZD0xOTgzMzIKKy0tLQorIGNvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3My LmMgfCA4ICsrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxl dGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3MyLmMgYi9j b250cmliL2dub21lLXNzaC1hc2twYXNzMi5jCitpbmRleCBjYjcxNTJkYzguLmJiZTkzZDgzOCAx MDA2NDQKKy0tLSBhL2NvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3MyLmMKKysrKyBiL2NvbnRyaWIv Z25vbWUtc3NoLWFza3Bhc3MyLmMKK0BAIC03MCw4ICs3MCwxMiBAQCByZXBvcnRfZmFpbGVkX2dy YWIgKEd0a1dpZGdldCAqcGFyZW50X3dpbmRvdywgY29uc3QgY2hhciAqd2hhdCkKKyAKKyAJZXJy ID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKHBhcmVudF93aW5kb3cpLCAwLAor IAkgICAgR1RLX01FU1NBR0VfRVJST1IsIEdUS19CVVRUT05TX0NMT1NFLAorLQkgICAgIkNvdWxk IG5vdCBncmFiICVzLiBBIG1hbGljaW91cyBjbGllbnQgbWF5IGJlIGVhdmVzZHJvcHBpbmcgIgor LQkgICAgIm9uIHlvdXIgc2Vzc2lvbi4iLCB3aGF0KTsKKysJICAgICJTU0ggcGFzc3dvcmQgZGlh bG9nIGNvdWxkIG5vdCBncmFiIHRoZSAlcyBpbnB1dC5cbiIKKysJICAgICJUaGlzIG1pZ2h0IGJl IGNhdXNlZCBieSBhcHBsaWNhdGlvbiBzdWNoIGFzIHNjcmVlbnNhdmVyLCAiCisrCSAgICAiaG93 ZXZlciBpdCBjb3VsZCBhbHNvIG1lYW4gdGhhdCBzb21lb25lIG1heSBiZSBlYXZlc2Ryb3BwaW5n ICIKKysJICAgICJvbiB5b3VyIHNlc3Npb24uXG4iCisrCSAgICAiRWl0aGVyIGNsb3NlIHRoZSBh cHBsaWNhdGlvbiB3aGljaCBncmFicyB0aGUgJXMgb3IgIgorKwkgICAgImxvZyBvdXQgYW5kIGxv ZyBpbiBhZ2FpbiB0byBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcuIiwgd2hhdCwgd2hhdCk7 CisgCWd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1coZXJyKSwgR1RLX1dJTl9QT1Nf Q0VOVEVSKTsKKyAKKyAJZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhlcnIpKTsKKy0tIAorMi41 My4wCisKCmRpZmYgLS1naXQgYS8wMDEwLW9wZW5zc2gtNy44cDEtVXNlUEFNLXdhcm5pbmcucGF0 Y2ggYi8wMDEwLW9wZW5zc2gtNy44cDEtVXNlUEFNLXdhcm5pbmcucGF0Y2gKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDUyMWFiZTQuLjAwMDAwMDAKLS0tIGEvMDAxMC1vcGVuc3NoLTcu OHAxLVVzZVBBTS13YXJuaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAot RnJvbSA1ZjZkYmM5OGExODRjZTQ4NWFlZjkwMzIxYWU5ZmMxYmE0NTI5M2Y4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29t PgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENI IDEwLzUzXSBvcGVuc3NoLTcuOHAxLVVzZVBBTS13YXJuaW5nCi0KLS0tLQotIHNzaGQtc2Vzc2lv bi5jIHwgNCArKysrCi0gc3NoZF9jb25maWcgICAgfCAyICsrCi0gMiBmaWxlcyBjaGFuZ2VkLCA2 IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNz aW9uLmMKLWluZGV4IDFjNzJlNjY0YS4uOTgwNGRjMzM0IDEwMDY0NAotLS0tIGEvc3NoZC1zZXNz aW9uLmMKLSsrKyBiL3NzaGQtc2Vzc2lvbi5jCi1AQCAtMTEwMyw2ICsxMTAzLDEwIEBAIG1haW4o aW50IGFjLCBjaGFyICoqYXYpCi0gCQkJICAgICJlbmFibGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhv ZHMiKTsKLSAJfQotIAotKwkvKiAnVXNlUEFNIG5vJyBpcyBub3Qgc3VwcG9ydGVkIGluIG91ciBi dWlsZHMgKi8KLSsJaWYgKCEgb3B0aW9ucy51c2VfcGFtKQotKwkJbG9naXQoIldBUk5JTkc6ICdV c2VQQU0gbm8nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCBhbmQgbWF5IGNhdXNlIHNl dmVyYWwgcHJvYmxlbXMuIik7Ci0rCi0gI2lmZGVmIFdJVEhfT1BFTlNTTAotIAlpZiAob3B0aW9u cy5tb2R1bGlfZmlsZSAhPSBOVUxMKQotIAkJZGhfc2V0X21vZHVsaV9maWxlKG9wdGlvbnMubW9k dWxpX2ZpbGUpOwotZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnIGIvc3NoZF9jb25maWcKLWluZGV4 IDYwODIwM2U0Yi4uNDhhZjYzMjFiIDEwMDY0NAotLS0tIGEvc3NoZF9jb25maWcKLSsrKyBiL3Nz aGRfY29uZmlnCi1AQCAtODksNiArODksOCBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRo b3JpemVkX2tleXMKLSAjIElmIHlvdSBqdXN0IHdhbnQgdGhlIFBBTSBhY2NvdW50IGFuZCBzZXNz aW9uIGNoZWNrcyB0byBydW4gd2l0aG91dAotICMgUEFNIGF1dGhlbnRpY2F0aW9uLCB0aGVuIGVu YWJsZSB0aGlzIGJ1dCBzZXQgUGFzc3dvcmRBdXRoZW50aWNhdGlvbgotICMgYW5kIEtiZEludGVy YWN0aXZlQXV0aGVudGljYXRpb24gdG8gJ25vJy4KLSsjIFdBUk5JTkc6ICdVc2VQQU0gbm8nIGlz IG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZCBhbmQgbWF5IGNhdXNlIHNldmVyYWwKLSsjIHBy b2JsZW1zLgotICNVc2VQQU0gbm8KLSAKLSAjQWxsb3dBZ2VudEZvcndhcmRpbmcgeWVzCi0tLSAK LTIuNTIuMAotCgpkaWZmIC0tZ2l0IGEvMDAxMS1vcGVuc3NoLTguN3AxLXJlZGhhdC5wYXRjaCBi LzAwMTEtb3BlbnNzaC04LjdwMS1yZWRoYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNWFiMjQ4NQotLS0gL2Rldi9udWxsCisrKyBiLzAwMTEtb3BlbnNzaC04Ljdw MS1yZWRoYXQucGF0Y2gKQEAgLTAsMCArMSwxNDcgQEAKK0Zyb20gZWM2Mzg1NmYyYzQyNzZkYTNh YTIyYzc4ZmVhY2ZlYmZiZmI1OTRkYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERt aXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTUgTWF5IDIw MjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMS81NF0gb3BlbnNzaC04LjdwMS1y ZWRoYXQKKworI2h0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2 MzUgKFdPTlRGSVgpCistLS0KKyBzc2hfY29uZmlnICAgICAgICAgICAgfCAgNyArKysrKysrCisg c3NoX2NvbmZpZ19yZWRoYXQgICAgIHwgMTggKysrKysrKysrKysrKysrKysrCisgc3NoZF9jb25m aWcgICAgICAgICAgIHwgIDggKysrKysrKysKKyBzc2hkX2NvbmZpZy4wICAgICAgICAgfCAgNiAr KystLS0KKyBzc2hkX2NvbmZpZy41ICAgICAgICAgfCAgMiArLQorIHNzaGRfY29uZmlnX3JlZGhh dCAgICB8IDE4ICsrKysrKysrKysrKysrKysrKworIHNzaGRfY29uZmlnX3JlZGhhdF9jcCB8ICA3 ICsrKysrKysKKyA3IGZpbGVzIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25z KC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNzaF9jb25maWdfcmVkaGF0CisgY3JlYXRlIG1vZGUg MTAwNjQ0IHNzaGRfY29uZmlnX3JlZGhhdAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzc2hkX2NvbmZp Z19yZWRoYXRfY3AKKworZGlmZiAtLWdpdCBhL3NzaF9jb25maWcgYi9zc2hfY29uZmlnCitpbmRl eCAyMzhhMGM1ZTMuLmQ5MzI0Yzk1NyAxMDA2NDQKKy0tLSBhL3NzaF9jb25maWcKKysrKyBiL3Nz aF9jb25maWcKK0BAIC00MywzICs0MywxMCBAQAorICMgICBQcm94eUNvbW1hbmQgc3NoIC1xIC1X ICVoOiVwIGdhdGV3YXkuZXhhbXBsZS5jb20KKyAjICAgUmVrZXlMaW1pdCAxRyAxaAorICMgICBV c2VyS25vd25Ib3N0c0ZpbGUgfi8uc3NoL2tub3duX2hvc3RzLmQvJWsKKysjCisrIyBUaGlzIHN5 c3RlbSBpcyBmb2xsb3dpbmcgc3lzdGVtLXdpZGUgY3J5cHRvIHBvbGljeS4KKysjIFRvIG1vZGlm eSB0aGUgY3J5cHRvIHByb3BlcnRpZXMgKENpcGhlcnMsIE1BQ3MsIC4uLiksIGNyZWF0ZSBhICAq LmNvbmYKKysjICBmaWxlIHVuZGVyICAvZXRjL3NzaC9zc2hfY29uZmlnLmQvICB3aGljaCB3aWxs IGJlIGF1dG9tYXRpY2FsbHkKKysjIGluY2x1ZGVkIGJlbG93LiBGb3IgbW9yZSBpbmZvcm1hdGlv biwgc2VlIG1hbnVhbCBwYWdlIGZvcgorKyMgIHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMoOCkgIGFu ZCAgc3NoX2NvbmZpZyg1KS4KKytJbmNsdWRlIC9ldGMvc3NoL3NzaF9jb25maWcuZC8qLmNvbmYK K2RpZmYgLS1naXQgYS9zc2hfY29uZmlnX3JlZGhhdCBiL3NzaF9jb25maWdfcmVkaGF0CituZXcg ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi44YjFiNTkwMjEKKy0tLSAvZGV2L251 bGwKKysrKyBiL3NzaF9jb25maWdfcmVkaGF0CitAQCAtMCwwICsxLDE4IEBACisrIyBUaGUgb3B0 aW9ucyBoZXJlIGFyZSBpbiB0aGUgIk1hdGNoIGZpbmFsIGJsb2NrIiB0byBiZSBhcHBsaWVkIGFz IHRoZSBsYXN0CisrIyBvcHRpb25zIGFuZCBjb3VsZCBiZSBwb3RlbnRpYWxseSBvdmVyd3JpdHRl biBieSB0aGUgdXNlciBjb25maWd1cmF0aW9uCisrTWF0Y2ggZmluYWwgYWxsCisrCSMgRm9sbG93 IHN5c3RlbS13aWRlIENyeXB0byBQb2xpY3ksIGlmIGRlZmluZWQ6CisrCUluY2x1ZGUgL2V0Yy9j cnlwdG8tcG9saWNpZXMvYmFjay1lbmRzL29wZW5zc2guY29uZmlnCisrCisrCUdTU0FQSUF1dGhl bnRpY2F0aW9uIHllcworKworKyMgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHllcyB0aGVuIHJl bW90ZSBYMTEgY2xpZW50cyB3aWxsIGhhdmUgZnVsbCBhY2Nlc3MKKysjIHRvIHRoZSBvcmlnaW5h bCBYMTEgZGlzcGxheS4gQXMgdmlydHVhbGx5IG5vIFgxMSBjbGllbnQgc3VwcG9ydHMgdGhlIHVu dHJ1c3RlZAorKyMgbW9kZSBjb3JyZWN0bHkgd2Ugc2V0IHRoaXMgdG8geWVzLgorKwlGb3J3YXJk WDExVHJ1c3RlZCB5ZXMKKysKKysjIHJoYnojMjM1MjY1MyAtIGV4cG9ydCBDT0xPUlRFUk0KKysJ U2VuZEVudiBDT0xPUlRFUk0KKysKKysjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIHVz ZSAubG9jYWwgZG9tYWluCisrIyBIb3N0ICoubG9jYWwKK2RpZmYgLS1naXQgYS9zc2hkX2NvbmZp ZyBiL3NzaGRfY29uZmlnCitpbmRleCAwZjRhM2E3MjQuLjYwODIwM2U0YiAxMDA2NDQKKy0tLSBh L3NzaGRfY29uZmlnCisrKysgYi9zc2hkX2NvbmZpZworQEAgLTEwLDYgKzEwLDE0IEBACisgIyBw b3NzaWJsZSwgYnV0IGxlYXZlIHRoZW0gY29tbWVudGVkLiAgVW5jb21tZW50ZWQgb3B0aW9ucyBv dmVycmlkZSB0aGUKKyAjIGRlZmF1bHQgdmFsdWUuCisgCisrIyBUbyBtb2RpZnkgdGhlIHN5c3Rl bS13aWRlIHNzaGQgY29uZmlndXJhdGlvbiwgY3JlYXRlIGEgICouY29uZiAgZmlsZSB1bmRlcgor KyMgIC9ldGMvc3NoL3NzaGRfY29uZmlnLmQvICB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkg aW5jbHVkZWQgYmVsb3cKKytJbmNsdWRlIC9ldGMvc3NoL3NzaGRfY29uZmlnLmQvKi5jb25mCisr CisrIyBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHBvcnQgb24gYSBTRUxpbnV4IHN5c3RlbSwg eW91IGhhdmUgdG8gdGVsbAorKyMgU0VMaW51eCBhYm91dCB0aGlzIGNoYW5nZS4KKysjIHNlbWFu YWdlIHBvcnQgLWEgLXQgc3NoX3BvcnRfdCAtcCB0Y3AgI1BPUlROVU1CRVIKKysjCisgI1BvcnQg MjIKKyAjQWRkcmVzc0ZhbWlseSBhbnkKKyAjTGlzdGVuQWRkcmVzcyAwLjAuMC4wCitkaWZmIC0t Z2l0IGEvc3NoZF9jb25maWcuMCBiL3NzaGRfY29uZmlnLjAKK2luZGV4IDc3MGVjNzQyZS4uMWY3 MWMzN2MzIDEwMDY0NAorLS0tIGEvc3NoZF9jb25maWcuMAorKysrIGIvc3NoZF9jb25maWcuMAor QEAgLTEyNDcsOSArMTI0Nyw5IEBAIERFU0NSSVBUSU9OCisgCisgICAgICBTeXNsb2dGYWNpbGl0 eQorICAgICAgICAgICAgICBHaXZlcyB0aGUgZmFjaWxpdHkgY29kZSB0aGF0IGlzIHVzZWQgd2hl biBsb2dnaW5nIG1lc3NhZ2VzIGZyb20KKy0gICAgICAgICAgICAgc3NoZCg4KS4gIFRoZSBwb3Nz aWJsZSB2YWx1ZXMgYXJlOiBEQUVNT04sIFVTRVIsIEFVVEgsIExPQ0FMMCwKKy0gICAgICAgICAg ICAgTE9DQUwxLCBMT0NBTDIsIExPQ0FMMywgTE9DQUw0LCBMT0NBTDUsIExPQ0FMNiwgTE9DQUw3 LiAgVGhlCistICAgICAgICAgICAgIGRlZmF1bHQgaXMgQVVUSC4KKysgICAgICAgICAgICAgc3No ZCg4KS4gIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBEQUVNT04sIFVTRVIsIEFVVEgsIEFVVEhQ UklWLAorKyAgICAgICAgICAgICBMT0NBTDAsIExPQ0FMMSwgTE9DQUwyLCBMT0NBTDMsIExPQ0FM NCwgTE9DQUw1LCBMT0NBTDYsIExPQ0FMNy4KKysgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMg QVVUSC4KKyAKKyAgICAgIFRDUEtlZXBBbGl2ZQorICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hl dGhlciB0aGUgc3lzdGVtIHNob3VsZCBzZW5kIFRDUCBrZWVwYWxpdmUgbWVzc2FnZXMKK2RpZmYg LS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQoraW5kZXggM2Y1ZTI5ODEyLi5j YTQyNWE4ZGEgMTAwNjQ0CistLS0gYS9zc2hkX2NvbmZpZy41CisrKysgYi9zc2hkX2NvbmZpZy41 CitAQCAtMTk3MSw3ICsxOTcxLDcgQEAgQnkgZGVmYXVsdCBubyBzdWJzeXN0ZW1zIGFyZSBkZWZp bmVkLgorIC5JdCBDbSBTeXNsb2dGYWNpbGl0eQorIEdpdmVzIHRoZSBmYWNpbGl0eSBjb2RlIHRo YXQgaXMgdXNlZCB3aGVuIGxvZ2dpbmcgbWVzc2FnZXMgZnJvbQorIC5YciBzc2hkIDggLgorLVRo ZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOiBEQUVNT04sIFVTRVIsIEFVVEgsIExPQ0FMMCwgTE9DQUwx LCBMT0NBTDIsCisrVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6IERBRU1PTiwgVVNFUiwgQVVUSCwg QVVUSFBSSVYsIExPQ0FMMCwgTE9DQUwxLCBMT0NBTDIsCisgTE9DQUwzLCBMT0NBTDQsIExPQ0FM NSwgTE9DQUw2LCBMT0NBTDcuCisgVGhlIGRlZmF1bHQgaXMgQVVUSC4KKyAuSXQgQ20gVENQS2Vl cEFsaXZlCitkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWdfcmVkaGF0IGIvc3NoZF9jb25maWdfcmVk aGF0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi45OTNhMjhkNTIKKy0t LSAvZGV2L251bGwKKysrKyBiL3NzaGRfY29uZmlnX3JlZGhhdAorQEAgLTAsMCArMSwxOCBAQAor K1N5c2xvZ0ZhY2lsaXR5IEFVVEhQUklWCisrCisrS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlv biBubworKworK0dTU0FQSUF1dGhlbnRpY2F0aW9uIHllcworK0dTU0FQSUNsZWFudXBDcmVkZW50 aWFscyBubworKworK1VzZVBBTSB5ZXMKKysKKytYMTFGb3J3YXJkaW5nIHllcworKworKyMgcmhi eiMyMzUyNjUzIC0gYWNjZXB0IENPTE9SVEVSTQorKwlBY2NlcHRFbnYgQ09MT1JURVJNCisrCisr IyBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgcGFtX21vdGQgaW4gL2V0Yy9wYW0uZC9zc2hkIGlu c3RlYWQgb2YgUHJpbnRNb3RkLAorKyMgYXMgaXQgaXMgbW9yZSBjb25maWd1cmFibGUgYW5kIHZl cnNhdGlsZSB0aGFuIHRoZSBidWlsdC1pbiB2ZXJzaW9uLgorK1ByaW50TW90ZCBubworKworZGlm ZiAtLWdpdCBhL3NzaGRfY29uZmlnX3JlZGhhdF9jcCBiL3NzaGRfY29uZmlnX3JlZGhhdF9jcAor bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uMWQ1OTJkMTNmCistLS0gL2Rl di9udWxsCisrKysgYi9zc2hkX2NvbmZpZ19yZWRoYXRfY3AKK0BAIC0wLDAgKzEsNyBAQAorKyMg VGhpcyBzeXN0ZW0gaXMgZm9sbG93aW5nIHN5c3RlbS13aWRlIGNyeXB0byBwb2xpY3kuIFRoZSBj aGFuZ2VzIHRvCisrIyBjcnlwdG8gcHJvcGVydGllcyAoQ2lwaGVycywgTUFDcywgLi4uKSB3aWxs IG5vdCBoYXZlIGFueSBlZmZlY3QgaW4KKysjIHRoaXMgb3IgZm9sbG93aW5nIGluY2x1ZGVkIGZp bGVzLiBUbyBvdmVycmlkZSBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLAorKyMgd3JpdGUgaXQg YmVmb3JlIHRoaXMgYmxvY2sgb3IgaW5jbHVkZSBpdCBiZWZvcmUgdGhpcyBmaWxlLgorKyMgUGxl YXNlLCBzZWUgbWFudWFsIHBhZ2VzIGZvciB1cGRhdGUtY3J5cHRvLXBvbGljaWVzKDgpIGFuZCBz c2hkX2NvbmZpZyg1KS4KKytJbmNsdWRlIC9ldGMvY3J5cHRvLXBvbGljaWVzL2JhY2stZW5kcy9v cGVuc3Noc2VydmVyLmNvbmZpZworKworLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwMTEt b3BlbnNzaC05LjZwMS1nc3NhcGkta2V5ZXgucGF0Y2ggYi8wMDExLW9wZW5zc2gtOS42cDEtZ3Nz YXBpLWtleWV4LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTBlNzZlLi4w MDAwMDAwCi0tLSBhLzAwMTEtb3BlbnNzaC05LjZwMS1nc3NhcGkta2V5ZXgucGF0Y2gKKysrIC9k ZXYvbnVsbApAQCAtMSw0MzIwICswLDAgQEAKLUZyb20gYzk5MjQwOGRhM2NhN2FlYWUxMjljNzMx Yzc3NTMwMTlhMTZlZDIyNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBC ZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6 NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAxMS81M10gb3BlbnNzaC05LjZwMS1nc3NhcGkt a2V5ZXgKLQotLS0tCi0gTWFrZWZpbGUuaW4gICAgIHwgICA3ICstCi0gYXV0aC5jICAgICAgICAg IHwgICAzICstCi0gYXV0aDItZ3NzLmMgICAgIHwgIDUyICsrKy0KLSBhdXRoMi1tZXRob2RzLmMg fCAgIDYgKwotIGF1dGgyLmMgICAgICAgICB8ICAgMiArCi0gY2Fub2hvc3QuYyAgICAgIHwgIDkz ICsrKysrKysKLSBjYW5vaG9zdC5oICAgICAgfCAgIDMgKwotIGNsaWVudGxvb3AuYyAgICB8ICAx MiArCi0gY29uZmlndXJlLmFjICAgIHwgIDI0ICsrCi0gZ3NzLWdlbnIuYyAgICAgIHwgMzEyICsr KysrKysrKysrKysrKysrKysrLQotIGdzcy1zZXJ2LWtyYjUuYyB8ICA5NyArKysrKystCi0gZ3Nz LXNlcnYuYyAgICAgIHwgMjAwICsrKysrKysrKysrKy0tCi0ga2V4LW5hbWVzLmMgICAgIHwgIDYw ICsrKy0KLSBrZXguYyAgICAgICAgICAgfCAgMzUgKystCi0ga2V4LmggICAgICAgICAgIHwgIDM0 ICsrKwotIGtleGRoLmMgICAgICAgICB8ICAxMCArCi0ga2V4Z2VuLmMgICAgICAgIHwgICAyICst Ci0ga2V4Z3NzYy5jICAgICAgIHwgNzA2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwotIGtleGdzc3MuYyAgICAgICB8IDYwMSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwotIG1vbml0b3IuYyAgICAgICB8IDE0NyArKysrKysr KystCi0gbW9uaXRvci5oICAgICAgIHwgICAyICsKLSBtb25pdG9yX3dyYXAuYyAgfCAgNTcgKysr LQotIG1vbml0b3Jfd3JhcC5oICB8ICAgNCArLQotIHJlYWRjb25mLmMgICAgICB8ICA3MCArKysr KwotIHJlYWRjb25mLmggICAgICB8ICAgNiArCi0gc2VydmNvbmYuYyAgICAgIHwgIDQ2ICsrKysK LSBzZXJ2Y29uZi5oICAgICAgfCAgIDMgKwotIHNlc3Npb24uYyAgICAgICB8ICAxMCArLQotIHNz aC1nc3MuaCAgICAgICB8ICA2NCArKysrLQotIHNzaC4xICAgICAgICAgICB8ICAgOCArCi0gc3No LmMgICAgICAgICAgIHwgICA2ICstCi0gc3NoX2NvbmZpZyAgICAgIHwgICAyICsKLSBzc2hfY29u ZmlnLjUgICAgfCAgNTggKysrKwotIHNzaGNvbm5lY3QyLmMgICB8IDE1NCArKysrKysrKysrLQot IHNzaGQtYXV0aC5jICAgICB8ICA1NSArKystCi0gc3NoZC1zZXNzaW9uLmMgIHwgICA5ICstCi0g c3NoZC5jICAgICAgICAgIHwgICAzICstCi0gc3NoZF9jb25maWcgICAgIHwgICAyICsKLSBzc2hk X2NvbmZpZy41ICAgfCAgMzEgKysrCi0gc3Noa2V5LmMgICAgICAgIHwgIDcyICsrKystCi0gc3No a2V5LmggICAgICAgIHwgICAxICsKLSA0MSBmaWxlcyBjaGFuZ2VkLCAyOTkzIGluc2VydGlvbnMo KyksIDc2IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXhnc3NjLmMKLSBjcmVh dGUgbW9kZSAxMDA2NDQga2V4Z3Nzcy5jCi0KLWRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01h a2VmaWxlLmluCi1pbmRleCBhM2E0OTVjMWIuLmEzNmViODJlZCAxMDA2NDQKLS0tLSBhL01ha2Vm aWxlLmluCi0rKysgYi9NYWtlZmlsZS5pbgotQEAgLTEwOCw2ICsxMDgsNyBAQCBMSUJTU0hfT0JK Uz0ke0xJQk9QRU5TU0hfT0JKU30gXAotIAlrZXgubyBrZXgtbmFtZXMubyBrZXhkaC5vIGtleGdl eC5vIGtleGVjZGgubyBrZXhjMjU1MTkubyBcCi0gCWtleGdleGMubyBrZXhnZXhzLm8gXAotIAlr ZXhzbnRydXA3NjF4MjU1MTkubyBrZXhtbGtlbTc2OHgyNTUxOS5vIHNudHJ1cDc2MS5vIGtleGdl bi5vIFwKLSsJa2V4Z3NzYy5vIFwKLSAJc2Z0cC1yZWFscGF0aC5vIHBsYXRmb3JtLXBsZWRnZS5v IHBsYXRmb3JtLXRyYWNpbmcubyBwbGF0Zm9ybS1taXNjLm8gXAotIAlzc2hidWYtaW8ubyBtaXNj LWFnZW50Lm8KLSAKLUBAIC0xMzEsNyArMTMyLDcgQEAgU1NIRF9TRVNTSU9OX09CSlM9c3NoZC1z ZXNzaW9uLm8gYXV0aC1yaG9zdHMubyBhdXRoLXBhc3N3ZC5vIFwKLSAJYXV0aDItY2hhbGwubyBn cm91cGFjY2Vzcy5vIFwKLSAJYXV0aC1ic2RhdXRoLm8gYXV0aDItaG9zdGJhc2VkLm8gYXV0aDIt a2JkaW50Lm8gXAotIAlhdXRoMi1ub25lLm8gYXV0aDItcGFzc3dkLm8gYXV0aDItcHVia2V5Lm8g YXV0aDItcHVia2V5ZmlsZS5vIFwKLS0JbW9uaXRvci5vIG1vbml0b3Jfd3JhcC5vIGF1dGgta3Ji NS5vIFwKLSsJbW9uaXRvci5vIG1vbml0b3Jfd3JhcC5vIGF1dGgta3JiNS5vIGtleGdzc3MubyBc Ci0gCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIFwKLSAJbG9naW5yZWMu byBhdXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0aC1zaWEubyBcCi0gCXNmdHAtc2VydmVyLm8g c2Z0cC1jb21tb24ubyBcCi1AQCAtMTQzLDcgKzE0NCw3IEBAIFNTSERfQVVUSF9PQkpTPXNzaGQt YXV0aC5vIFwKLSAJc2VydmVybG9vcC5vIGF1dGgubyBhdXRoMi5vIGF1dGgtb3B0aW9ucy5vIHNl c3Npb24ubyBhdXRoMi1jaGFsbC5vIFwKLSAJZ3JvdXBhY2Nlc3MubyBhdXRoLWJzZGF1dGgubyBh dXRoMi1ob3N0YmFzZWQubyBhdXRoMi1rYmRpbnQubyBcCi0gCWF1dGgyLW5vbmUubyBhdXRoMi1w YXNzd2QubyBhdXRoMi1wdWJrZXkubyBhdXRoMi1wdWJrZXlmaWxlLm8gXAotLQlhdXRoMi1nc3Mu byBnc3Mtc2Vydi5vIGdzcy1zZXJ2LWtyYjUubyBcCi0rCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8g Z3NzLXNlcnYta3JiNS5vIGtleGdzc3MubyBcCi0gCW1vbml0b3Jfd3JhcC5vIGF1dGgta3JiNS5v IFwKLSAJYXVkaXQubyBhdWRpdC1ic20ubyBhdWRpdC1saW51eC5vIHBsYXRmb3JtLm8gXAotIAls b2dpbnJlYy5vIGF1dGgtcGFtLm8gYXV0aC1zaGFkb3cubyBhdXRoLXNpYS5vIFwKLUBAIC01NTQs NyArNTU1LDcgQEAgcmVncmVzcy1wcmVwOgotIAkgICAgbG4gLXMgYGNkICQoc3JjZGlyKSAmJiBw d2RgL3JlZ3Jlc3MvTWFrZWZpbGUgYHB3ZGAvcmVncmVzcy9NYWtlZmlsZQotIAotIFJFR1JFU1NM SUJTPWxpYnNzaC5hICQoTElCQ09NUEFUKQotLVRFU1RMSUJTPSQoTElCUykgJChDSEFOTkVMTElC UykgQFRFU1RMSUJTQAotK1RFU1RMSUJTPSQoTElCUykgJChDSEFOTkVMTElCUykgJChHU1NMSUJT KSBAVEVTVExJQlNACi0gCi0gcmVncmVzcy9tb2RwaXBlJChFWEVFWFQpOiAkKHNyY2RpcikvcmVn cmVzcy9tb2RwaXBlLmMgJChSRUdSRVNTTElCUykKLSAJJChDQykgJChDRkxBR1MpICQoQ1BQRkxB R1MpIC1vICRAICQoc3JjZGlyKS9yZWdyZXNzL21vZHBpcGUuYyBcCi1kaWZmIC0tZ2l0IGEvYXV0 aC5jIGIvYXV0aC5jCi1pbmRleCA4ZDk0MDQ3NDMuLmQyNTY1M2VlNCAxMDA2NDQKLS0tLSBhL2F1 dGguYwotKysrIGIvYXV0aC5jCi1AQCAtMzU0LDcgKzM1NCw4IEBAIGF1dGhfcm9vdF9hbGxvd2Vk KHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQotIAljYXNlIFBFUk1JVF9OT19Q QVNTV0Q6Ci0gCQlpZiAoc3RyY21wKG1ldGhvZCwgInB1YmxpY2tleSIpID09IDAgfHwKLSAJCSAg ICBzdHJjbXAobWV0aG9kLCAiaG9zdGJhc2VkIikgPT0gMCB8fAotLQkJICAgIHN0cmNtcChtZXRo b2QsICJnc3NhcGktd2l0aC1taWMiKSA9PSAwKQotKwkJICAgIHN0cmNtcChtZXRob2QsICJnc3Nh cGktd2l0aC1taWMiKSA9PSAwIHx8Ci0rCQkgICAgc3RyY21wKG1ldGhvZCwgImdzc2FwaS1rZXll eCIpID09IDApCi0gCQkJcmV0dXJuIDE7Ci0gCQlicmVhazsKLSAJY2FzZSBQRVJNSVRfRk9SQ0VE X09OTFk6Ci1kaWZmIC0tZ2l0IGEvYXV0aDItZ3NzLmMgYi9hdXRoMi1nc3MuYwotaW5kZXggZjc4 OThhYjNlLi41YjFiOWNkZTMgMTAwNjQ0Ci0tLS0gYS9hdXRoMi1nc3MuYwotKysrIGIvYXV0aDIt Z3NzLmMKLUBAIC01MSw2ICs1MSw3IEBACi0gI2RlZmluZSBTU0hfR1NTQVBJX01BWF9NRUNIUwky MDQ4Ci0gCi0gZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0aW9uczsKLStleHRlcm4gc3RydWN0IGF1 dGhtZXRob2RfY2ZnIG1ldGhvZGNmZ19nc3NrZXlleDsKLSBleHRlcm4gc3RydWN0IGF1dGhtZXRo b2RfY2ZnIG1ldGhvZGNmZ19nc3NhcGk7Ci0gCi0gc3RhdGljIGludCBpbnB1dF9nc3NhcGlfdG9r ZW4oaW50IHR5cGUsIHVfaW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpOwotQEAgLTU4LDYg KzU5LDQ4IEBAIHN0YXRpYyBpbnQgaW5wdXRfZ3NzYXBpX21pYyhpbnQgdHlwZSwgdV9pbnQzMl90 IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCk7Ci0gc3RhdGljIGludCBpbnB1dF9nc3NhcGlfZXhjaGFu Z2VfY29tcGxldGUoaW50IHR5cGUsIHVfaW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpOwot IHN0YXRpYyBpbnQgaW5wdXRfZ3NzYXBpX2VycnRvayhpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNz aCAqKTsKLSAKLSsvKgotKyAqIFRoZSAnZ3NzYXBpX2tleWV4JyB1c2VyYXV0aCBtZWNoYW5pc20u Ci0rICovCi0rc3RhdGljIGludAotK3VzZXJhdXRoX2dzc2tleWV4KHN0cnVjdCBzc2ggKnNzaCwg Y29uc3QgY2hhciAqbWV0aG9kKQotK3sKLSsJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRo Y3R4dDsKLSsJaW50IHIsIGF1dGhlbnRpY2F0ZWQgPSAwOwotKwlzdHJ1Y3Qgc3NoYnVmICpiID0g TlVMTDsKLSsJZ3NzX2J1ZmZlcl9kZXNjIG1pYywgZ3NzYnVmOwotKwl1X2NoYXIgKnA7Ci0rCXNp emVfdCBsZW47Ci0rCi0rCWlmICgociA9IHNzaHBrdF9nZXRfc3RyaW5nKHNzaCwgJnAsICZsZW4p KSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaHBrdF9nZXRfZW5kKHNzaCkpICE9IDApCi0rCQlmYXRh bF9mcihyLCAicGFyc2luZyIpOwotKwotKwlpZiAoKGIgPSBzc2hidWZfbmV3KCkpID09IE5VTEwp Ci0rCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOwotKwotKwltaWMudmFsdWUgPSBwOwot KwltaWMubGVuZ3RoID0gbGVuOwotKwotKwlzc2hfZ3NzYXBpX2J1aWxkbWljKGIsIGF1dGhjdHh0 LT51c2VyLCBhdXRoY3R4dC0+c2VydmljZSwKLSsJICAgICJnc3NhcGkta2V5ZXgiLCBzc2gtPmtl eC0+c2Vzc2lvbl9pZCk7Ci0rCi0rCWlmICgoZ3NzYnVmLnZhbHVlID0gc3NoYnVmX211dGFibGVf cHRyKGIpKSA9PSBOVUxMKQotKwkJZmF0YWxfZigic3NoYnVmX211dGFibGVfcHRyIGZhaWxlZCIp OwotKwlnc3NidWYubGVuZ3RoID0gc3NoYnVmX2xlbihiKTsKLSsKLSsJLyogZ3NzX2tleF9jb250 ZXh0IGlzIE5VTEwgd2l0aCBwcml2c2VwLCBzbyB3ZSBjYW4ndCBjaGVjayBpdCBoZXJlICovCi0r CWlmICghR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzX2tleF9jb250ZXh0LAot KwkgICAgJmdzc2J1ZiwgJm1pYykpKQotKwkJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3NhcGlf dXNlcm9rKGF1dGhjdHh0LT51c2VyLAotKwkJICAgIGF1dGhjdHh0LT5wdywgMSk7Ci0rCi0rCXNz aGJ1Zl9mcmVlKGIpOwotKwlmcmVlKG1pYy52YWx1ZSk7Ci0rCi0rCXJldHVybiAoYXV0aGVudGlj YXRlZCk7Ci0rfQotKwotIC8qCi0gICogV2Ugb25seSBzdXBwb3J0IHRob3NlIG1lY2hhbmlzbXMg dGhhdCB3ZSBrbm93IGFib3V0IChpZSBvbmVzIHRoYXQgd2Uga25vdwotICAqIGhvdyB0byBjaGVj ayBsb2NhbCB1c2VyIGt1c2Vyb2sgYW5kIHRoZSBsaWtlKQotQEAgLTI2Nyw3ICszMTAsNyBAQCBp bnB1dF9nc3NhcGlfZXhjaGFuZ2VfY29tcGxldGUoaW50IHR5cGUsIHVfaW50MzJfdCBwbGVuLCBz dHJ1Y3Qgc3NoICpzc2gpCi0gCWlmICgociA9IHNzaHBrdF9nZXRfZW5kKHNzaCkpICE9IDApCi0g CQlmYXRhbF9mcihyLCAicGFyc2UgcGFja2V0Iik7Ci0gCi0tCWF1dGhlbnRpY2F0ZWQgPSBtbV9z c2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlcik7Ci0rIAlhdXRoZW50aWNhdGVkID0gbW1f c3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0LT5wdywgMSk7Ci0gCi0g CWF1dGhjdHh0LT5wb3N0cG9uZWQgPSAwOwotIAlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9N U0dfVVNFUkFVVEhfR1NTQVBJX1RPS0VOLCBOVUxMKTsKLUBAIC0zMTUsNyArMzU4LDcgQEAgaW5w dXRfZ3NzYXBpX21pYyhpbnQgdHlwZSwgdV9pbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCkK LSAJZ3NzYnVmLmxlbmd0aCA9IHNzaGJ1Zl9sZW4oYik7Ci0gCi0gCWlmICghR1NTX0VSUk9SKG1t X3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzY3R4dCwgJmdzc2J1ZiwgJm1pYykpKQotLQkJYXV0aGVu dGljYXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyKTsKLSsJCWF1dGhl bnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlciwgYXV0aGN0eHQt PnB3LCAwKTsKLSAJZWxzZQotIAkJbG9naXQoIkdTU0FQSSBNSUMgY2hlY2sgZmFpbGVkIik7Ci0g Ci1AQCAtMzMzLDYgKzM3NiwxMSBAQCBpbnB1dF9nc3NhcGlfbWljKGludCB0eXBlLCB1X2ludDMy X3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKQotIAlyZXR1cm4gMDsKLSB9Ci0gCi0rQXV0aG1ldGhv ZCBtZXRob2RfZ3Nza2V5ZXggPSB7Ci0rCSZtZXRob2RjZmdfZ3Nza2V5ZXgsCi0rCXVzZXJhdXRo X2dzc2tleWV4LAotK307Ci0rCi0gQXV0aG1ldGhvZCBtZXRob2RfZ3NzYXBpID0gewotIAkmbWV0 aG9kY2ZnX2dzc2FwaSwKLSAJdXNlcmF1dGhfZ3NzYXBpLAotZGlmZiAtLWdpdCBhL2F1dGgyLW1l dGhvZHMuYyBiL2F1dGgyLW1ldGhvZHMuYwotaW5kZXggOTk2MzdhODliLi5hMDU5MDhjZjMgMTAw NjQ0Ci0tLS0gYS9hdXRoMi1tZXRob2RzLmMKLSsrKyBiL2F1dGgyLW1ldGhvZHMuYwotQEAgLTUw LDYgKzUwLDExIEBAIHN0cnVjdCBhdXRobWV0aG9kX2NmZyBtZXRob2RjZmdfcHVia2V5ID0gewot IAkmb3B0aW9ucy5wdWJrZXlfYXV0aGVudGljYXRpb24KLSB9OwotICNpZmRlZiBHU1NBUEkKLStz dHJ1Y3QgYXV0aG1ldGhvZF9jZmcgbWV0aG9kY2ZnX2dzc2tleWV4ID0gewotKwkiZ3NzYXBpLWtl eWV4IiwKLSsJTlVMTCwKLSsJJm9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uCi0rfTsKLSBzdHJ1 Y3QgYXV0aG1ldGhvZF9jZmcgbWV0aG9kY2ZnX2dzc2FwaSA9IHsKLSAJImdzc2FwaS13aXRoLW1p YyIsCi0gCU5VTEwsCi1AQCAtNzYsNiArODEsNyBAQCBzdGF0aWMgc3RydWN0IGF1dGhtZXRob2Rf Y2ZnICphdXRobWV0aG9kX2NmZ3NbXSA9IHsKLSAJJm1ldGhvZGNmZ19ub25lLAotIAkmbWV0aG9k Y2ZnX3B1YmtleSwKLSAjaWZkZWYgR1NTQVBJCi0rCSZtZXRob2RjZmdfZ3Nza2V5ZXgsCi0gCSZt ZXRob2RjZmdfZ3NzYXBpLAotICNlbmRpZgotIAkmbWV0aG9kY2ZnX3Bhc3N3ZCwKLWRpZmYgLS1n aXQgYS9hdXRoMi5jIGIvYXV0aDIuYwotaW5kZXggMTM0NWQzMjU3Li41YTRiOTMyYTkgMTAwNjQ0 Ci0tLS0gYS9hdXRoMi5jCi0rKysgYi9hdXRoMi5jCi1AQCAtNzEsNiArNzEsNyBAQCBleHRlcm4g QXV0aG1ldGhvZCBtZXRob2RfcGFzc3dkOwotIGV4dGVybiBBdXRobWV0aG9kIG1ldGhvZF9rYmRp bnQ7Ci0gZXh0ZXJuIEF1dGhtZXRob2QgbWV0aG9kX2hvc3RiYXNlZDsKLSAjaWZkZWYgR1NTQVBJ Ci0rZXh0ZXJuIEF1dGhtZXRob2QgbWV0aG9kX2dzc2tleWV4OwotIGV4dGVybiBBdXRobWV0aG9k IG1ldGhvZF9nc3NhcGk7Ci0gI2VuZGlmCi0gCi1AQCAtNzgsNiArNzksNyBAQCBBdXRobWV0aG9k ICphdXRobWV0aG9kc1tdID0gewotIAkmbWV0aG9kX25vbmUsCi0gCSZtZXRob2RfcHVia2V5LAot ICNpZmRlZiBHU1NBUEkKLSsJJm1ldGhvZF9nc3NrZXlleCwKLSAJJm1ldGhvZF9nc3NhcGksCi0g I2VuZGlmCi0gCSZtZXRob2RfcGFzc3dkLAotZGlmZiAtLWdpdCBhL2Nhbm9ob3N0LmMgYi9jYW5v aG9zdC5jCi1pbmRleCAyOGYwODZlNWEuLjg3NTgwNWM5OSAxMDA2NDQKLS0tLSBhL2Nhbm9ob3N0 LmMKLSsrKyBiL2Nhbm9ob3N0LmMKLUBAIC0zNSw2ICszNSw5OSBAQAotICNpbmNsdWRlICJjYW5v aG9zdC5oIgotICNpbmNsdWRlICJtaXNjLmgiCi0gCi0rLyoKLSsgKiBSZXR1cm5zIHRoZSByZW1v dGUgRE5TIGhvc3RuYW1lIGFzIGEgc3RyaW5nLiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3Qgbm90 Ci0rICogYmUgZnJlZWQuIE5CLiB0aGlzIHdpbGwgdXN1YWxseSB0cmlnZ2VyIGEgRE5TIHF1ZXJ5 IHRoZSBmaXJzdCB0aW1lIGl0IGlzCi0rICogY2FsbGVkLgotKyAqIFRoaXMgZnVuY3Rpb24gZG9l cyBhZGRpdGlvbmFsIGNoZWNrcyBvbiB0aGUgaG9zdG5hbWUgdG8gbWl0aWdhdGUgc29tZQotKyAq IGF0dGFja3Mgb24gbGVnYWN5IHJob3N0cy1zdHlsZSBhdXRoZW50aWNhdGlvbi4KLSsgKiBYWFgg aXMgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gdnVsbmVyYWJsZSB0byB0aGVzZT8KLSsgKiBYWFgg Q2FuIHdlIHJlbW92ZSB0aGVzZSBjaGVja3M/IChvciBpZiBub3QsIHJlbW92ZSBSaG9zdHNSU0FB dXRoZW50aWNhdGlvbj8pCi0rICovCi0rCi0rY2hhciAqCi0rcmVtb3RlX2hvc3RuYW1lKHN0cnVj dCBzc2ggKnNzaCkKLSt7Ci0rCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGZyb207Ci0rCXNvY2ts ZW5fdCBmcm9tbGVuOwotKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaSwgKmFpdG9wOwotKwlj aGFyIG5hbWVbTklfTUFYSE9TVF0sIG50b3AyW05JX01BWEhPU1RdOwotKwljb25zdCBjaGFyICpu dG9wID0gc3NoX3JlbW90ZV9pcGFkZHIoc3NoKTsKLSsKLSsJLyogR2V0IElQIGFkZHJlc3Mgb2Yg Y2xpZW50LiAqLwotKwlmcm9tbGVuID0gc2l6ZW9mKGZyb20pOwotKwltZW1zZXQoJmZyb20sIDAs IHNpemVvZihmcm9tKSk7Ci0rCWlmIChnZXRwZWVybmFtZShzc2hfcGFja2V0X2dldF9jb25uZWN0 aW9uX2luKHNzaCksCi0rCSAgICAoc3RydWN0IHNvY2thZGRyICopJmZyb20sICZmcm9tbGVuKSA9 PSAtMSkgewotKwkJZGVidWcoImdldHBlZXJuYW1lIGZhaWxlZDogJS4xMDBzIiwgc3RyZXJyb3Io ZXJybm8pKTsKLSsJCXJldHVybiB4c3RyZHVwKG50b3ApOwotKwl9Ci0rCi0rCWlwdjY0X25vcm1h bGlzZV9tYXBwZWQoJmZyb20sICZmcm9tbGVuKTsKLSsJaWYgKGZyb20uc3NfZmFtaWx5ID09IEFG X0lORVQ2KQotKwkJZnJvbWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSsKLSsJ ZGVidWczKCJUcnlpbmcgdG8gcmV2ZXJzZSBtYXAgYWRkcmVzcyAlLjEwMHMuIiwgbnRvcCk7Ci0r CS8qIE1hcCB0aGUgSVAgYWRkcmVzcyB0byBhIGhvc3QgbmFtZS4gKi8KLSsJaWYgKGdldG5hbWVp bmZvKChzdHJ1Y3Qgc29ja2FkZHIgKikmZnJvbSwgZnJvbWxlbiwgbmFtZSwgc2l6ZW9mKG5hbWUp LAotKwkgICAgTlVMTCwgMCwgTklfTkFNRVJFUUQpICE9IDApIHsKLSsJCS8qIEhvc3QgbmFtZSBu b3QgZm91bmQuICBVc2UgaXAgYWRkcmVzcy4gKi8KLSsJCXJldHVybiB4c3RyZHVwKG50b3ApOwot Kwl9Ci0rCi0rCS8qCi0rCSAqIGlmIHJldmVyc2UgbG9va3VwIHJlc3VsdCBsb29rcyBsaWtlIGEg bnVtZXJpYyBob3N0bmFtZSwKLSsJICogc29tZW9uZSBpcyB0cnlpbmcgdG8gdHJpY2sgdXMgYnkg UFRSIHJlY29yZCBsaWtlIGZvbGxvd2luZzoKLSsJICoJMS4xLjEuMTAuaW4tYWRkci5hcnBhLglJ TiBQVFIJMi4zLjQuNQotKwkgKi8KLSsJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7 Ci0rCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsJLypkdW1teSovCi0rCWhpbnRzLmFp X2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7Ci0rCWlmIChnZXRhZGRyaW5mbyhuYW1lLCBOVUxMLCAm aGludHMsICZhaSkgPT0gMCkgewotKwkJbG9naXQoIk5hc3R5IFBUUiByZWNvcmQgXCIlc1wiIGlz IHNldCB1cCBmb3IgJXMsIGlnbm9yaW5nIiwKLSsJCSAgICBuYW1lLCBudG9wKTsKLSsJCWZyZWVh ZGRyaW5mbyhhaSk7Ci0rCQlyZXR1cm4geHN0cmR1cChudG9wKTsKLSsJfQotKwotKwkvKiBOYW1l cyBhcmUgc3RvcmVkIGluIGxvd2VyY2FzZS4gKi8KLSsJbG93ZXJjYXNlKG5hbWUpOwotKwotKwkv KgotKwkgKiBNYXAgaXQgYmFjayB0byBhbiBJUCBhZGRyZXNzIGFuZCBjaGVjayB0aGF0IHRoZSBn aXZlbgotKwkgKiBhZGRyZXNzIGFjdHVhbGx5IGlzIGFuIGFkZHJlc3Mgb2YgdGhpcyBob3N0LiAg VGhpcyBpcwotKwkgKiBuZWNlc3NhcnkgYmVjYXVzZSBhbnlvbmUgd2l0aCBhY2Nlc3MgdG8gYSBu YW1lIHNlcnZlciBjYW4KLSsJICogZGVmaW5lIGFyYml0cmFyeSBuYW1lcyBmb3IgYW4gSVAgYWRk cmVzcy4gTWFwcGluZyBmcm9tCi0rCSAqIG5hbWUgdG8gSVAgYWRkcmVzcyBjYW4gYmUgdHJ1c3Rl ZCBiZXR0ZXIgKGJ1dCBjYW4gc3RpbGwgYmUKLSsJICogZm9vbGVkIGlmIHRoZSBpbnRydWRlciBo YXMgYWNjZXNzIHRvIHRoZSBuYW1lIHNlcnZlciBvZgotKwkgKiB0aGUgZG9tYWluKS4KLSsJICov Ci0rCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwotKwloaW50cy5haV9mYW1pbHkg PSBmcm9tLnNzX2ZhbWlseTsKLSsJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKLSsJ aWYgKGdldGFkZHJpbmZvKG5hbWUsIE5VTEwsICZoaW50cywgJmFpdG9wKSAhPSAwKSB7Ci0rCQls b2dpdCgicmV2ZXJzZSBtYXBwaW5nIGNoZWNraW5nIGdldGFkZHJpbmZvIGZvciAlLjcwMHMgIgot KwkJICAgICJbJXNdIGZhaWxlZC4iLCBuYW1lLCBudG9wKTsKLSsJCXJldHVybiB4c3RyZHVwKG50 b3ApOwotKwl9Ci0rCS8qIExvb2sgZm9yIHRoZSBhZGRyZXNzIGZyb20gdGhlIGxpc3Qgb2YgYWRk cmVzc2VzLiAqLwotKwlmb3IgKGFpID0gYWl0b3A7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7Ci0r CQlpZiAoZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLCBudG9wMiwKLSsJ CSAgICBzaXplb2YobnRvcDIpLCBOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCkgPT0gMCAmJgotKwkJ ICAgIChzdHJjbXAobnRvcCwgbnRvcDIpID09IDApKQotKwkJCQlicmVhazsKLSsJfQotKwlmcmVl YWRkcmluZm8oYWl0b3ApOwotKwkvKiBJZiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGxpc3Qs IHRoZSBhZGRyZXNzIHdhcyBub3QgdGhlcmUuICovCi0rCWlmIChhaSA9PSBOVUxMKSB7Ci0rCQkv KiBBZGRyZXNzIG5vdCBmb3VuZCBmb3IgdGhlIGhvc3QgbmFtZS4gKi8KLSsJCWxvZ2l0KCJBZGRy ZXNzICUuMTAwcyBtYXBzIHRvICUuNjAwcywgYnV0IHRoaXMgZG9lcyBub3QgIgotKwkJICAgICJt YXAgYmFjayB0byB0aGUgYWRkcmVzcy4iLCBudG9wLCBuYW1lKTsKLSsJCXJldHVybiB4c3RyZHVw KG50b3ApOwotKwl9Ci0rCXJldHVybiB4c3RyZHVwKG5hbWUpOwotK30KLSsKLSB2b2lkCi0gaXB2 NjRfbm9ybWFsaXNlX21hcHBlZChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwgc29ja2xl bl90ICpsZW4pCi0gewotZGlmZiAtLWdpdCBhL2Nhbm9ob3N0LmggYi9jYW5vaG9zdC5oCi1pbmRl eCAyNmQ2Mjg1NWEuLjBjYWRjOWYxOCAxMDA2NDQKLS0tLSBhL2Nhbm9ob3N0LmgKLSsrKyBiL2Nh bm9ob3N0LmgKLUBAIC0xNSw2ICsxNSw5IEBACi0gI2lmbmRlZiBfQ0FOT0hPU1RfSAotICNkZWZp bmUgX0NBTk9IT1NUX0gKLSAKLStzdHJ1Y3Qgc3NoOwotKwotK2NoYXIJCSpyZW1vdGVfaG9zdG5h bWUoc3RydWN0IHNzaCAqKTsKLSBjaGFyCQkqZ2V0X3BlZXJfaXBhZGRyKGludCk7Ci0gaW50CQkg Z2V0X3BlZXJfcG9ydChpbnQpOwotIGNoYXIJCSpnZXRfbG9jYWxfaXBhZGRyKGludCk7Ci1kaWZm IC0tZ2l0IGEvY2xpZW50bG9vcC5jIGIvY2xpZW50bG9vcC5jCi1pbmRleCA0OWQwNDhkODUuLjMz YWRmMzFkYyAxMDA2NDQKLS0tLSBhL2NsaWVudGxvb3AuYwotKysrIGIvY2xpZW50bG9vcC5jCi1A QCAtMTA3LDYgKzEwNywxMCBAQAotICNpbmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAiaG9z dGZpbGUuaCIKLSAKLSsjaWZkZWYgR1NTQVBJCi0rI2luY2x1ZGUgInNzaC1nc3MuaCIKLSsjZW5k aWYKLSsKLSAvKiBQZXJtaXR0ZWQgUlNBIHNpZ25hdHVyZSBhbGdvcml0aG1zIGZvciBVcGRhdGVI b3N0a2V5cyBwcm9vZnMgKi8KLSAjZGVmaW5lIEhPU1RLRVlfUFJPT0ZfUlNBX0FMR1MJInJzYS1z aGEyLTUxMixyc2Etc2hhMi0yNTYiCi0gCi1AQCAtMTYwNCw2ICsxNjA4LDE0IEBAIGNsaWVudF9s b29wKHN0cnVjdCBzc2ggKnNzaCwgaW50IGhhdmVfcHR5LCBpbnQgZXNjYXBlX2NoYXJfYXJnLAot IAkJLyogRG8gY2hhbm5lbCBvcGVyYXRpb25zLiAqLwotIAkJY2hhbm5lbF9hZnRlcl9wb2xsKHNz aCwgcGZkLCBucGZkX2FjdGl2ZSk7Ci0gCi0rI2lmZGVmIEdTU0FQSQotKwkJCWlmIChvcHRpb25z Lmdzc19yZW5ld2FsX3Jla2V5ICYmCi0rCQkJICAgIHNzaF9nc3NhcGlfY3JlZGVudGlhbHNfdXBk YXRlZChOVUxMKSkgewotKwkJCQlkZWJ1ZygiY3JlZGVudGlhbHMgdXBkYXRlZCAtIGZvcmNpbmcg cmVrZXkiKTsKLSsJCQkJbmVlZF9yZWtleWluZyA9IDE7Ci0rCQkJfQotKyNlbmRpZgotKwotIAkJ LyogQnVmZmVyIGlucHV0IGZyb20gdGhlIGNvbm5lY3Rpb24uICAqLwotIAkJaWYgKGNvbm5faW5f cmVhZHkpCi0gCQkJY2xpZW50X3Byb2Nlc3NfbmV0X2lucHV0KHNzaCk7Ci1kaWZmIC0tZ2l0IGEv Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCi1pbmRleCBmZDYzMmE1YTguLmFkY2NhZWJkNCAx MDA2NDQKLS0tLSBhL2NvbmZpZ3VyZS5hYwotKysrIGIvY29uZmlndXJlLmFjCi1AQCAtODEzLDYg KzgxMywzMCBAQCBpbnQgbWFpbih2b2lkKSB7IGlmIChOU1ZlcnNpb25PZlJ1blRpbWVMaWJyYXJ5 KCJTeXN0ZW0iKSA+PSAoNjAgPDwgMTYpKQotIAkgICAgW1VzZSB0dW5uZWwgZGV2aWNlIGNvbXBh dGliaWxpdHkgdG8gT3BlbkJTRF0pCi0gCUFDX0RFRklORShbU1NIX1RVTl9QUkVQRU5EX0FGXSwg WzFdLAotIAkgICAgW1ByZXBlbmQgdGhlIGFkZHJlc3MgZmFtaWx5IHRvIElQIHR1bm5lbCB0cmFm ZmljXSkKLSsJQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBoYXZlIHRoZSBTZWN1cml0eSBBdXRob3Jp emF0aW9uIFNlc3Npb24gQVBJXSkKLSsJQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxTZWN1cml0 eS9BdXRoU2Vzc2lvbi5oPl0sCi0rCQlbU2Vzc2lvbkNyZWF0ZSgwLCAwKTtdLAotKwkJW2FjX2N2 X3VzZV9zZWN1cml0eV9zZXNzaW9uX2FwaT0ieWVzIgotKwkJIEFDX0RFRklORShbVVNFX1NFQ1VS SVRZX1NFU1NJT05fQVBJXSwgWzFdLAotKwkJCVtwbGF0Zm9ybSBoYXMgdGhlIFNlY3VyaXR5IEF1 dGhvcml6YXRpb24gU2Vzc2lvbiBBUEldKQotKwkJIExJQlM9IiRMSUJTIC1mcmFtZXdvcmsgU2Vj dXJpdHkiCi0rCQkgQUNfTVNHX1JFU1VMVChbeWVzXSldLAotKwkJW2FjX2N2X3VzZV9zZWN1cml0 eV9zZXNzaW9uX2FwaT0ibm8iCi0rCQkgQUNfTVNHX1JFU1VMVChbbm9dKV0pCi0rCUFDX01TR19D SEVDS0lORyhbaWYgd2UgaGF2ZSBhbiBpbi1tZW1vcnkgY3JlZGVudGlhbHMgY2FjaGVdKQotKwlB Q19UUllfQ09NUElMRSgKLSsJCVsjaW5jbHVkZSA8S2VyYmVyb3MvS2VyYmVyb3MuaD5dLAotKwkJ W2NjX2NvbnRleHRfdCBjOwotKwkJICh2b2lkKSBjY19pbml0aWFsaXplICgmYywgMCwgTlVMTCwg TlVMTCk7XSwKLSsJCVtBQ19ERUZJTkUoW1VTRV9DQ0FQSV0sIFsxXSwKLSsJCQlbcGxhdGZvcm0g dXNlcyBhbiBpbi1tZW1vcnkgY3JlZGVudGlhbHMgY2FjaGVdKQotKwkJIExJQlM9IiRMSUJTIC1m cmFtZXdvcmsgU2VjdXJpdHkiCi0rCQkgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSsJCSBpZiB0ZXN0 ICJ4JGFjX2N2X3VzZV9zZWN1cml0eV9zZXNzaW9uX2FwaSIgPSAieG5vIjsgdGhlbgotKwkJCUFD X01TR19FUlJPUihbKioqIE5lZWQgYSBzZWN1cml0eSBmcmFtZXdvcmsgdG8gdXNlIHRoZSBjcmVk ZW50aWFscyBjYWNoZSBBUEkgKioqXSkKLSsJCWZpXSwKLSsJCVtBQ19NU0dfUkVTVUxUKFtub10p XQotKwkpCi0gCW00X3BhdHRlcm5fYWxsb3coW0FVX0lQdl0pCi0gCUFDX0NIRUNLX0RFQ0woW0FV X0lQdjRdLCBbXSwKLSAJICAgIEFDX0RFRklORShbQVVfSVB2NF0sIFswXSwgW1N5c3RlbSBvbmx5 IHN1cHBvcnRzIElQdjQgYXVkaXQgcmVjb3Jkc10pCi1kaWZmIC0tZ2l0IGEvZ3NzLWdlbnIuYyBi L2dzcy1nZW5yLmMKLWluZGV4IDhmMWY1NGFmYi4uZjJkNmY1OWU1IDEwMDY0NAotLS0tIGEvZ3Nz LWdlbnIuYwotKysrIGIvZ3NzLWdlbnIuYwotQEAgLTQyLDkgKzQyLDMzIEBACi0gI2luY2x1ZGUg InNzaGJ1Zi5oIgotICNpbmNsdWRlICJsb2cuaCIKLSAjaW5jbHVkZSAic3NoMi5oIgotKyNpbmNs dWRlICJjaXBoZXIuaCIKLSsjaW5jbHVkZSAic3Noa2V5LmgiCi0rI2luY2x1ZGUgImtleC5oIgot KyNpbmNsdWRlICJkaWdlc3QuaCIKLSsjaW5jbHVkZSAicGFja2V0LmgiCi0gCi0gI2luY2x1ZGUg InNzaC1nc3MuaCIKLSAKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rCWNoYXIgKmVuY29kZWQ7Ci0rCWdz c19PSUQgb2lkOwotK30gc3NoX2dzc19rZXhfbWFwcGluZzsKLSsKLSsvKgotKyAqIFhYWCAtIEl0 IHdvdWxkIGJlIG5pY2UgdG8gZmluZCBhIG1vcmUgZWxlZ2FudCB3YXkgb2YgaGFuZGxpbmcgdGhl Ci0rICogWFhYICAgcGFzc2luZyBvZiB0aGUga2V5IGV4Y2hhbmdlIGNvbnRleHQgdG8gdGhlIHVz ZXJhdXRoIHJvdXRpbmVzCi0rICovCi0rCi0rR3NzY3R4dCAqZ3NzX2tleF9jb250ZXh0ID0gTlVM TDsKLSsKLStzdGF0aWMgc3NoX2dzc19rZXhfbWFwcGluZyAqZ3NzX2VuYzJvaWQgPSBOVUxMOwot KwotK2ludAotK3NzaF9nc3NhcGlfb2lkX3RhYmxlX29rKHZvaWQpIHsKLSsJcmV0dXJuIChnc3Nf ZW5jMm9pZCAhPSBOVUxMKTsKLSt9Ci0rCi0gLyogc3NoYnVmX2dldCBmb3IgZ3NzX2J1ZmZlcl9k ZXNjICovCi0gaW50Ci0gc3NoX2dzc2FwaV9nZXRfYnVmZmVyX2Rlc2Moc3RydWN0IHNzaGJ1ZiAq YiwgZ3NzX2J1ZmZlcl9kZXNjICpnKQotQEAgLTYwLDYgKzg0LDE2OSBAQCBzc2hfZ3NzYXBpX2dl dF9idWZmZXJfZGVzYyhzdHJ1Y3Qgc3NoYnVmICpiLCBnc3NfYnVmZmVyX2Rlc2MgKmcpCi0gCXJl dHVybiAwOwotIH0KLSAKLSsvKiBzc2hwa3RfZ2V0IG9mIGdzc19idWZmZXJfZGVzYyAqLwotK2lu dAotK3NzaF9nc3NhcGlfc3NocGt0X2dldF9idWZmZXJfZGVzYyhzdHJ1Y3Qgc3NoICpzc2gsIGdz c19idWZmZXJfZGVzYyAqZykKLSt7Ci0rCWludCByOwotKwl1X2NoYXIgKnA7Ci0rCXNpemVfdCBs ZW47Ci0rCi0rCWlmICgociA9IHNzaHBrdF9nZXRfc3RyaW5nKHNzaCwgJnAsICZsZW4pKSAhPSAw KQotKwkJcmV0dXJuIHI7Ci0rCWctPnZhbHVlID0gcDsKLSsJZy0+bGVuZ3RoID0gbGVuOwotKwly ZXR1cm4gMDsKLSt9Ci0rCi0rLyoKLSsgKiBSZXR1cm4gYSBsaXN0IG9mIHRoZSBnc3MtZ3JvdXAx LXNoYTEgbWVjaGFuaXNtcyBzdXBwb3J0ZWQgYnkgdGhpcyBwcm9ncmFtCi0rICoKLSsgKiBXZSB0 ZXN0IG1lY2hhbmlzbXMgdG8gZW5zdXJlIHRoYXQgd2UgY2FuIHVzZSB0aGVtLCB0byBhdm9pZCBz dGFydGluZwotKyAqIGEga2V5IGV4Y2hhbmdlIHdpdGggYSBiYWQgbWVjaGFuaXNtCi0rICovCi0r Ci0rY2hhciAqCi0rc3NoX2dzc2FwaV9jbGllbnRfbWVjaGFuaXNtcyhjb25zdCBjaGFyICpob3N0 LCBjb25zdCBjaGFyICpjbGllbnQsCi0rICAgIGNvbnN0IGNoYXIgKmtleCkgewotKwlnc3NfT0lE X3NldCBnc3Nfc3VwcG9ydGVkID0gTlVMTDsKLSsJT01fdWludDMyIG1pbl9zdGF0dXM7Ci0rCi0r CWlmIChHU1NfRVJST1IoZ3NzX2luZGljYXRlX21lY2hzKCZtaW5fc3RhdHVzLCAmZ3NzX3N1cHBv cnRlZCkpKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCXJldHVybiBzc2hfZ3NzYXBpX2tleF9tZWNo cyhnc3Nfc3VwcG9ydGVkLCBzc2hfZ3NzYXBpX2NoZWNrX21lY2hhbmlzbSwKLSsJICAgIGhvc3Qs IGNsaWVudCwga2V4KTsKLSt9Ci0rCi0rY2hhciAqCi0rc3NoX2dzc2FwaV9rZXhfbWVjaHMoZ3Nz X09JRF9zZXQgZ3NzX3N1cHBvcnRlZCwgc3NoX2dzc2FwaV9jaGVja19mbiAqY2hlY2ssCi0rICAg IGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKmNsaWVudCwgY29uc3QgY2hhciAqa2V4KSB7 Ci0rCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7Ci0rCXNpemVfdCBpOwotKwlpbnQgciA9IFNT SF9FUlJfQUxMT0NfRkFJTDsKLSsJaW50IG9pZHBvcywgZW5jbGVuOwotKwljaGFyICptZWNocywg KmVuY29kZWQ7Ci0rCXVfY2hhciBkaWdlc3RbU1NIX0RJR0VTVF9NQVhfTEVOR1RIXTsKLSsJY2hh ciBkZXJvaWRbMl07Ci0rCXN0cnVjdCBzc2hfZGlnZXN0X2N0eCAqbWQgPSBOVUxMOwotKwljaGFy ICpzLCAqY3AsICpwOwotKwotKwlpZiAoZ3NzX2VuYzJvaWQgIT0gTlVMTCkgewotKwkJZm9yIChp ID0gMDsgZ3NzX2VuYzJvaWRbaV0uZW5jb2RlZCAhPSBOVUxMOyBpKyspCi0rCQkJZnJlZShnc3Nf ZW5jMm9pZFtpXS5lbmNvZGVkKTsKLSsJCWZyZWUoZ3NzX2VuYzJvaWQpOwotKwl9Ci0rCi0rCWdz c19lbmMyb2lkID0geG1hbGxvYyhzaXplb2Yoc3NoX2dzc19rZXhfbWFwcGluZykgKgotKwkgICAg KGdzc19zdXBwb3J0ZWQtPmNvdW50ICsgMSkpOwotKwotKwlpZiAoKGJ1ZiA9IHNzaGJ1Zl9uZXco KSkgPT0gTlVMTCkKLSsJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7Ci0rCi0rCW9pZHBv cyA9IDA7Ci0rCXMgPSBjcCA9IHhzdHJkdXAoa2V4KTsKLSsJZm9yIChpID0gMDsgaSA8IGdzc19z dXBwb3J0ZWQtPmNvdW50OyBpKyspIHsKLSsJCWlmIChnc3Nfc3VwcG9ydGVkLT5lbGVtZW50c1tp XS5sZW5ndGggPCAxMjggJiYKLSsJCSAgICAoKmNoZWNrKShOVUxMLCAmKGdzc19zdXBwb3J0ZWQt PmVsZW1lbnRzW2ldKSwgaG9zdCwgY2xpZW50KSkgewotKwkJCUVWUF9NRF9DVFggKiBjdHggPSBO VUxMOwotKwkJCUVWUF9NRCAqbWQ1ID0gTlVMTDsgLyogSGVyZSB3ZSBkb24ndCB1c2UgTUQ1IGZv ciBjcnlwdG8gcHVycG9zZXMgKi8KLSsJCQl1bnNpZ25lZCBpbnQgbWRfc2l6ZSA9IHNpemVvZihk aWdlc3QpOwotKwotKwkJCWRlcm9pZFswXSA9IFNTSF9HU1NfT0lEVFlQRTsKLSsJCQlkZXJvaWRb MV0gPSBnc3Nfc3VwcG9ydGVkLT5lbGVtZW50c1tpXS5sZW5ndGg7Ci0rCQkJaWYgKChtZDUgPSBF VlBfTURfZmV0Y2goTlVMTCwgIk1ENSIsICJwcm92aWRlcj1kZWZhdWx0LC1maXBzIikpID09IE5V TEwpCi0rCQkJCWZhdGFsX2ZyKHIsICJNRDUgZmV0Y2ggZmFpbGVkIik7Ci0rCQkJaWYgKChjdHgg PSBFVlBfTURfQ1RYX25ldygpKSA9PSBOVUxMKSB7Ci0rCQkJCUVWUF9NRF9mcmVlKG1kNSk7Ci0r CQkJCWZhdGFsX2ZyKHIsICJkaWdlc3QgY3R4IGZhaWxlZCIpOwotKwkJCX0KLSsJCQlpZiAoRVZQ X0RpZ2VzdEluaXQoY3R4LCBtZDUpIDw9IDAKLSsJCQkgICAgfHwgRVZQX0RpZ2VzdFVwZGF0ZShj dHgsIGRlcm9pZCwgMikgPD0gMAotKwkJCSAgICB8fCBFVlBfRGlnZXN0VXBkYXRlKGN0eCwgZ3Nz X3N1cHBvcnRlZC0+ZWxlbWVudHNbaV0uZWxlbWVudHMsCi0rCQkJCSAgICBnc3Nfc3VwcG9ydGVk LT5lbGVtZW50c1tpXS5sZW5ndGgpIDw9IDAKLSsJCQkgICAgfHwgRVZQX0RpZ2VzdEZpbmFsKGN0 eCwgZGlnZXN0LCAmbWRfc2l6ZSkgPD0gMCkgewotKwkJCQlFVlBfTURfZnJlZShtZDUpOwotKwkJ CQlFVlBfTURfQ1RYX2ZyZWUoY3R4KTsKLSsJCQkJZmF0YWxfZnIociwgImRpZ2VzdCBmYWlsZWQi KTsKLSsJCQl9Ci0rCQkJRVZQX01EX2ZyZWUobWQ1KTsgbWQ1ID0gTlVMTDsKLSsJCQlFVlBfTURf Q1RYX2ZyZWUoY3R4KTsgY3R4ID0gTlVMTDsKLSsKLSsJCQllbmNvZGVkID0geG1hbGxvYyhzc2hf ZGlnZXN0X2J5dGVzKFNTSF9ESUdFU1RfTUQ1KQotKwkJCSAgICAqIDIpOwotKwkJCWVuY2xlbiA9 IF9fYjY0X250b3AoZGlnZXN0LAotKwkJCSAgICBzc2hfZGlnZXN0X2J5dGVzKFNTSF9ESUdFU1Rf TUQ1KSwgZW5jb2RlZCwKLSsJCQkgICAgc3NoX2RpZ2VzdF9ieXRlcyhTU0hfRElHRVNUX01ENSkg KiAyKTsKLSsKLSsJCQljcCA9IHN0cm5jcHkocywga2V4LCBzdHJsZW4oa2V4KSk7Ci0rCQkJZm9y ICgocCA9IHN0cnNlcCgmY3AsICIsIikpOyBwICYmICpwICE9ICdcMCc7Ci0rCQkJCShwID0gc3Ry c2VwKCZjcCwgIiwiKSkpIHsKLSsJCQkJaWYgKHNzaGJ1Zl9sZW4oYnVmKSAhPSAwICYmCi0rCQkJ CSAgICAociA9IHNzaGJ1Zl9wdXRfdTgoYnVmLCAnLCcpKSAhPSAwKQotKwkJCQkJZmF0YWxfZnIo ciwgInNzaGJ1Zl9wdXRfdTggZXJyb3IiKTsKLSsJCQkJaWYgKChyID0gc3NoYnVmX3B1dChidWYs IHAsIHN0cmxlbihwKSkpICE9IDAgfHwKLSsJCQkJICAgIChyID0gc3NoYnVmX3B1dChidWYsIGVu Y29kZWQsIGVuY2xlbikpICE9IDApCi0rCQkJCQlmYXRhbF9mcihyLCAic3NoYnVmX3B1dCBlcnJv ciIpOwotKwkJCX0KLSsKLSsJCQlnc3NfZW5jMm9pZFtvaWRwb3NdLm9pZCA9ICYoZ3NzX3N1cHBv cnRlZC0+ZWxlbWVudHNbaV0pOwotKwkJCWdzc19lbmMyb2lkW29pZHBvc10uZW5jb2RlZCA9IGVu Y29kZWQ7Ci0rCQkJb2lkcG9zKys7Ci0rCQl9Ci0rCX0KLSsJZnJlZShzKTsKLSsJZ3NzX2VuYzJv aWRbb2lkcG9zXS5vaWQgPSBOVUxMOwotKwlnc3NfZW5jMm9pZFtvaWRwb3NdLmVuY29kZWQgPSBO VUxMOwotKwotKwlpZiAoKG1lY2hzID0gc3NoYnVmX2R1cF9zdHJpbmcoYnVmKSkgPT0gTlVMTCkK LSsJCWZhdGFsX2YoInNzaGJ1Zl9kdXBfc3RyaW5nIGZhaWxlZCIpOwotKwotKwlzc2hidWZfZnJl ZShidWYpOwotKwotKwlpZiAoc3RybGVuKG1lY2hzKSA9PSAwKSB7Ci0rCQlmcmVlKG1lY2hzKTsK LSsJCW1lY2hzID0gTlVMTDsKLSsJfQotKwotKwlyZXR1cm4gKG1lY2hzKTsKLSt9Ci0rCi0rZ3Nz X09JRAotK3NzaF9nc3NhcGlfaWRfa2V4KEdzc2N0eHQgKmN0eCwgY2hhciAqbmFtZSwgaW50IGtl eF90eXBlKSB7Ci0rCWludCBpID0gMDsKLSsKLSsjZGVmaW5lIFNLSVBfS0VYX05BTUUodHlwZSkg XAotKwljYXNlIHR5cGU6IFwKLSsJCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YodHlwZSMjX0lE KSkgXAotKwkJCXJldHVybiBHU1NfQ19OT19PSUQ7IFwKLSsJCW5hbWUgKz0gc2l6ZW9mKHR5cGUj I19JRCkgLSAxOyBcCi0rCQlicmVhazsKLSsKLSsJc3dpdGNoIChrZXhfdHlwZSkgewotKwlTS0lQ X0tFWF9OQU1FKEtFWF9HU1NfR1JQMV9TSEExKQotKwlTS0lQX0tFWF9OQU1FKEtFWF9HU1NfR1JQ MTRfU0hBMSkKLSsJU0tJUF9LRVhfTkFNRShLRVhfR1NTX0dSUDE0X1NIQTI1NikKLSsJU0tJUF9L RVhfTkFNRShLRVhfR1NTX0dSUDE2X1NIQTUxMikKLSsJU0tJUF9LRVhfTkFNRShLRVhfR1NTX0dF WF9TSEExKQotKwlTS0lQX0tFWF9OQU1FKEtFWF9HU1NfTklTVFAyNTZfU0hBMjU2KQotKwlTS0lQ X0tFWF9OQU1FKEtFWF9HU1NfQzI1NTE5X1NIQTI1NikKLSsJZGVmYXVsdDoKLSsJCXJldHVybiBH U1NfQ19OT19PSUQ7Ci0rCX0KLSsKLSsjdW5kZWYgU0tJUF9LRVhfTkFNRQotKwotKwl3aGlsZSAo Z3NzX2VuYzJvaWRbaV0uZW5jb2RlZCAhPSBOVUxMICYmCi0rCSAgICBzdHJjbXAobmFtZSwgZ3Nz X2VuYzJvaWRbaV0uZW5jb2RlZCkgIT0gMCkKLSsJCWkrKzsKLSsKLSsJaWYgKGdzc19lbmMyb2lk W2ldLm9pZCAhPSBOVUxMICYmIGN0eCAhPSBOVUxMKQotKwkJc3NoX2dzc2FwaV9zZXRfb2lkKGN0 eCwgZ3NzX2VuYzJvaWRbaV0ub2lkKTsKLSsKLSsJcmV0dXJuIGdzc19lbmMyb2lkW2ldLm9pZDsK LSt9Ci0rCi0gLyogQ2hlY2sgdGhhdCB0aGUgT0lEIGluIGEgZGF0YSBzdHJlYW0gbWF0Y2hlcyB0 aGF0IGluIHRoZSBjb250ZXh0ICovCi0gaW50Ci0gc3NoX2dzc2FwaV9jaGVja19vaWQoR3NzY3R4 dCAqY3R4LCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQotQEAgLTE2OCw2ICszNTUsNyBAQCBzc2hf Z3NzYXBpX2J1aWxkX2N0eChHc3NjdHh0ICoqY3R4KQotIAkoKmN0eCktPmNyZWRzID0gR1NTX0Nf Tk9fQ1JFREVOVElBTDsKLSAJKCpjdHgpLT5jbGllbnQgPSBHU1NfQ19OT19OQU1FOwotIAkoKmN0 eCktPmNsaWVudF9jcmVkcyA9IEdTU19DX05PX0NSRURFTlRJQUw7Ci0rCSgqY3R4KS0+Zmlyc3Qg PSAxOwotIH0KLSAKLSAvKiBEZWxldGUgb3VyIGNvbnRleHQsIHByb3ZpZGluZyBpdCBoYXMgYmVl biBidWlsdCBjb3JyZWN0bHkgKi8KLUBAIC0xOTMsNiArMzgxLDEyIEBAIHNzaF9nc3NhcGlfZGVs ZXRlX2N0eChHc3NjdHh0ICoqY3R4KQotIAkJZ3NzX3JlbGVhc2VfbmFtZSgmbXMsICYoKmN0eCkt PmNsaWVudCk7Ci0gCWlmICgoKmN0eCktPmNsaWVudF9jcmVkcyAhPSBHU1NfQ19OT19DUkVERU5U SUFMKQotIAkJZ3NzX3JlbGVhc2VfY3JlZCgmbXMsICYoKmN0eCktPmNsaWVudF9jcmVkcyk7Ci0r CXNzaGJ1Zl9mcmVlKCgqY3R4KS0+c2hhcmVkX3NlY3JldCk7Ci0rCXNzaGJ1Zl9mcmVlKCgqY3R4 KS0+c2VydmVyX3B1YmtleSk7Ci0rCXNzaGJ1Zl9mcmVlKCgqY3R4KS0+c2VydmVyX2hvc3Rfa2V5 X2Jsb2IpOwotKwlzc2hidWZfZnJlZSgoKmN0eCktPnNlcnZlcl9ibG9iKTsKLSsJZXhwbGljaXRf Ynplcm8oKCpjdHgpLT5oYXNoLCBzaXplb2YoKCpjdHgpLT5oYXNoKSk7Ci0rCUJOX2NsZWFyX2Zy ZWUoKCpjdHgpLT5kaF9jbGllbnRfcHViKTsKLSAKLSAJZnJlZSgqY3R4KTsKLSAJKmN0eCA9IE5V TEw7Ci1AQCAtMjE2LDcgKzQxMCw3IEBAIHNzaF9nc3NhcGlfaW5pdF9jdHgoR3NzY3R4dCAqY3R4 LCBpbnQgZGVsZWdfY3JlZHMsIGdzc19idWZmZXJfZGVzYyAqcmVjdl90b2ssCi0gCX0KLSAKLSAJ Y3R4LT5tYWpvciA9IGdzc19pbml0X3NlY19jb250ZXh0KCZjdHgtPm1pbm9yLAotLQkgICAgR1NT X0NfTk9fQ1JFREVOVElBTCwgJmN0eC0+Y29udGV4dCwgY3R4LT5uYW1lLCBjdHgtPm9pZCwKLSsJ ICAgIGN0eC0+Y2xpZW50X2NyZWRzLCAmY3R4LT5jb250ZXh0LCBjdHgtPm5hbWUsIGN0eC0+b2lk LAotIAkgICAgR1NTX0NfTVVUVUFMX0ZMQUcgfCBHU1NfQ19JTlRFR19GTEFHIHwgZGVsZWdfZmxh ZywKLSAJICAgIDAsIE5VTEwsIHJlY3ZfdG9rLCBOVUxMLCBzZW5kX3RvaywgZmxhZ3MsIE5VTEwp OwotIAotQEAgLTI0NSw5ICs0MzksNDMgQEAgc3NoX2dzc2FwaV9pbXBvcnRfbmFtZShHc3NjdHh0 ICpjdHgsIGNvbnN0IGNoYXIgKmhvc3QpCi0gCXJldHVybiAoY3R4LT5tYWpvcik7Ci0gfQotIAot K09NX3VpbnQzMgotK3NzaF9nc3NhcGlfY2xpZW50X2lkZW50aXR5KEdzc2N0eHQgKmN0eCwgY29u c3QgY2hhciAqbmFtZSkKLSt7Ci0rCWdzc19idWZmZXJfZGVzYyBnc3NidWY7Ci0rCWdzc19uYW1l X3QgZ3NzbmFtZTsKLSsJT01fdWludDMyIHN0YXR1czsKLSsJZ3NzX09JRF9zZXQgb2lkc2V0Owot KwotKwlnc3NidWYudmFsdWUgPSAodm9pZCAqKSBuYW1lOwotKwlnc3NidWYubGVuZ3RoID0gc3Ry bGVuKGdzc2J1Zi52YWx1ZSk7Ci0rCi0rCWdzc19jcmVhdGVfZW1wdHlfb2lkX3NldCgmc3RhdHVz LCAmb2lkc2V0KTsKLSsJZ3NzX2FkZF9vaWRfc2V0X21lbWJlcigmc3RhdHVzLCBjdHgtPm9pZCwg Jm9pZHNldCk7Ci0rCi0rCWN0eC0+bWFqb3IgPSBnc3NfaW1wb3J0X25hbWUoJmN0eC0+bWlub3Is ICZnc3NidWYsCi0rCSAgICBHU1NfQ19OVF9VU0VSX05BTUUsICZnc3NuYW1lKTsKLSsKLSsJaWYg KCFjdHgtPm1ham9yKQotKwkJY3R4LT5tYWpvciA9IGdzc19hY3F1aXJlX2NyZWQoJmN0eC0+bWlu b3IsCi0rCQkgICAgZ3NzbmFtZSwgMCwgb2lkc2V0LCBHU1NfQ19JTklUSUFURSwKLSsJCSAgICAm Y3R4LT5jbGllbnRfY3JlZHMsIE5VTEwsIE5VTEwpOwotKwotKwlnc3NfcmVsZWFzZV9uYW1lKCZz dGF0dXMsICZnc3NuYW1lKTsKLSsJZ3NzX3JlbGVhc2Vfb2lkX3NldCgmc3RhdHVzLCAmb2lkc2V0 KTsKLSsKLSsJaWYgKGN0eC0+bWFqb3IpCi0rCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci0rCi0r CXJldHVybihjdHgtPm1ham9yKTsKLSt9Ci0rCi0gT01fdWludDMyCi0gc3NoX2dzc2FwaV9zaWdu KEdzc2N0eHQgKmN0eCwgZ3NzX2J1ZmZlcl90IGJ1ZmZlciwgZ3NzX2J1ZmZlcl90IGhhc2gpCi0g ewotKwlpZiAoY3R4ID09IE5VTEwpCi0rCQlyZXR1cm4gLTE7Ci0rCi0gCWlmICgoY3R4LT5tYWpv ciA9IGdzc19nZXRfbWljKCZjdHgtPm1pbm9yLCBjdHgtPmNvbnRleHQsCi0gCSAgICBHU1NfQ19R T1BfREVGQVVMVCwgYnVmZmVyLCBoYXNoKSkpCi0gCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci1A QCAtMjU1LDYgKzQ4MywxOSBAQCBzc2hfZ3NzYXBpX3NpZ24oR3NzY3R4dCAqY3R4LCBnc3NfYnVm ZmVyX3QgYnVmZmVyLCBnc3NfYnVmZmVyX3QgaGFzaCkKLSAJcmV0dXJuIChjdHgtPm1ham9yKTsK LSB9Ci0gCi0rLyogUHJpdmlsZWRnZWQgd2hlbiB1c2VkIGJ5IHNlcnZlciAqLwotK09NX3VpbnQz MgotK3NzaF9nc3NhcGlfY2hlY2ttaWMoR3NzY3R4dCAqY3R4LCBnc3NfYnVmZmVyX3QgZ3NzYnVm LCBnc3NfYnVmZmVyX3QgZ3NzbWljKQotK3sKLSsJaWYgKGN0eCA9PSBOVUxMKQotKwkJcmV0dXJu IC0xOwotKwotKwljdHgtPm1ham9yID0gZ3NzX3ZlcmlmeV9taWMoJmN0eC0+bWlub3IsIGN0eC0+ Y29udGV4dCwKLSsJICAgIGdzc2J1ZiwgZ3NzbWljLCBOVUxMKTsKLSsKLSsJcmV0dXJuIChjdHgt Pm1ham9yKTsKLSt9Ci0rCi0gdm9pZAotIHNzaF9nc3NhcGlfYnVpbGRtaWMoc3RydWN0IHNzaGJ1 ZiAqYiwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqc2VydmljZSwKLSAgICAgY29uc3Qg Y2hhciAqY29udGV4dCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqc2Vzc2lvbl9pZCkKLUBAIC0yNzEs MTEgKzUxMiwxNiBAQCBzc2hfZ3NzYXBpX2J1aWxkbWljKHN0cnVjdCBzc2hidWYgKmIsIGNvbnN0 IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCi0gfQotIAotIGludAotLXNzaF9nc3Nh cGlfY2hlY2tfbWVjaGFuaXNtKEdzc2N0eHQgKipjdHgsIGdzc19PSUQgb2lkLCBjb25zdCBjaGFy ICpob3N0KQotK3NzaF9nc3NhcGlfY2hlY2tfbWVjaGFuaXNtKEdzc2N0eHQgKipjdHgsIGdzc19P SUQgb2lkLCBjb25zdCBjaGFyICpob3N0LAotKyAgICBjb25zdCBjaGFyICpjbGllbnQpCi0gewot IAlnc3NfYnVmZmVyX2Rlc2MgdG9rZW4gPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0gCU9NX3VpbnQz MiBtYWpvciwgbWlub3I7Ci0gCWdzc19PSURfZGVzYyBzcG5lZ29fb2lkID0gezYsICh2b2lkICop Ilx4MkJceDA2XHgwMVx4MDVceDA1XHgwMiJ9OwotKwlHc3NjdHh0ICppbnRjdHggPSBOVUxMOwot KwotKwlpZiAoY3R4ID09IE5VTEwpCi0rCQljdHggPSAmaW50Y3R4OwotIAotIAkvKiBSRkMgNDQ2 MiBzYXlzIHdlIE1VU1QgTk9UIGRvIFNQTkVHTyAqLwotIAlpZiAob2lkLT5sZW5ndGggPT0gc3Bu ZWdvX29pZC5sZW5ndGggJiYKLUBAIC0yODUsNiArNTMxLDEwIEBAIHNzaF9nc3NhcGlfY2hlY2tf bWVjaGFuaXNtKEdzc2N0eHQgKipjdHgsIGdzc19PSUQgb2lkLCBjb25zdCBjaGFyICpob3N0KQot IAlzc2hfZ3NzYXBpX2J1aWxkX2N0eChjdHgpOwotIAlzc2hfZ3NzYXBpX3NldF9vaWQoKmN0eCwg b2lkKTsKLSAJbWFqb3IgPSBzc2hfZ3NzYXBpX2ltcG9ydF9uYW1lKCpjdHgsIGhvc3QpOwotKwot KwlpZiAoIUdTU19FUlJPUihtYWpvcikgJiYgY2xpZW50KQotKwkJbWFqb3IgPSBzc2hfZ3NzYXBp X2NsaWVudF9pZGVudGl0eSgqY3R4LCBjbGllbnQpOwotKwotIAlpZiAoIUdTU19FUlJPUihtYWpv cikpIHsKLSAJCW1ham9yID0gc3NoX2dzc2FwaV9pbml0X2N0eCgqY3R4LCAwLCBHU1NfQ19OT19C VUZGRVIsICZ0b2tlbiwKLSAJCSAgICBOVUxMKTsKLUBAIC0yOTQsMTAgKzU0NCw2NiBAQCBzc2hf Z3NzYXBpX2NoZWNrX21lY2hhbmlzbShHc3NjdHh0ICoqY3R4LCBnc3NfT0lEIG9pZCwgY29uc3Qg Y2hhciAqaG9zdCkKLSAJCQkgICAgR1NTX0NfTk9fQlVGRkVSKTsKLSAJfQotIAotLQlpZiAoR1NT X0VSUk9SKG1ham9yKSkKLSsJaWYgKEdTU19FUlJPUihtYWpvcikgfHwgaW50Y3R4ICE9IE5VTEwp Ci0gCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoY3R4KTsKLSAKLSAJcmV0dXJuICghR1NTX0VSUk9S KG1ham9yKSk7Ci0gfQotIAotK2ludAotK3NzaF9nc3NhcGlfY3JlZGVudGlhbHNfdXBkYXRlZChH c3NjdHh0ICpjdHh0KSB7Ci0rCXN0YXRpYyBnc3NfbmFtZV90IHNhdmVkX25hbWUgPSBHU1NfQ19O T19OQU1FOwotKwlzdGF0aWMgT01fdWludDMyIHNhdmVkX2xpZmV0aW1lID0gMDsKLSsJc3RhdGlj IGdzc19PSUQgc2F2ZWRfbWVjaCA9IEdTU19DX05PX09JRDsKLSsJc3RhdGljIGdzc19uYW1lX3Qg bmFtZTsKLSsJc3RhdGljIE9NX3VpbnQzMiBsYXN0X2NhbGwgPSAwOwotKwlPTV91aW50MzIgbGlm ZXRpbWUsIG5vdywgbWFqb3IsIG1pbm9yOwotKwlpbnQgZXF1YWw7Ci0rCi0rCW5vdyA9IHRpbWUo TlVMTCk7Ci0rCi0rCWlmIChjdHh0KSB7Ci0rCQlkZWJ1ZygiUmVrZXkgaGFzIGhhcHBlbmVkIC0g dXBkYXRpbmcgc2F2ZWQgdmVyc2lvbnMiKTsKLSsKLSsJCWlmIChzYXZlZF9uYW1lICE9IEdTU19D X05PX05BTUUpCi0rCQkJZ3NzX3JlbGVhc2VfbmFtZSgmbWlub3IsICZzYXZlZF9uYW1lKTsKLSsK LSsJCW1ham9yID0gZ3NzX2lucXVpcmVfY3JlZCgmbWlub3IsIEdTU19DX05PX0NSRURFTlRJQUws Ci0rCQkgICAgJnNhdmVkX25hbWUsICZzYXZlZF9saWZldGltZSwgTlVMTCwgTlVMTCk7Ci0rCi0r CQlpZiAoIUdTU19FUlJPUihtYWpvcikpIHsKLSsJCQlzYXZlZF9tZWNoID0gY3R4dC0+b2lkOwot KwkJICAgICAgICBzYXZlZF9saWZldGltZSs9IG5vdzsKLSsJCX0gZWxzZSB7Ci0rCQkJLyogSGFu ZGxlIHRoZSBlcnJvciAqLwotKwkJfQotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsJaWYgKG5vdyAt IGxhc3RfY2FsbCA8IDEwKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWxhc3RfY2FsbCA9IG5vdzsKLSsK LSsJaWYgKHNhdmVkX21lY2ggPT0gR1NTX0NfTk9fT0lEKQotKwkJcmV0dXJuIDA7Ci0rCi0rCW1h am9yID0gZ3NzX2lucXVpcmVfY3JlZCgmbWlub3IsIEdTU19DX05PX0NSRURFTlRJQUwsCi0rCSAg ICAmbmFtZSwgJmxpZmV0aW1lLCBOVUxMLCBOVUxMKTsKLSsJaWYgKG1ham9yID09IEdTU19TX0NS RURFTlRJQUxTX0VYUElSRUQpCi0rCQlyZXR1cm4gMDsKLSsJZWxzZSBpZiAoR1NTX0VSUk9SKG1h am9yKSkKLSsJCXJldHVybiAwOwotKwotKwltYWpvciA9IGdzc19jb21wYXJlX25hbWUoJm1pbm9y LCBzYXZlZF9uYW1lLCBuYW1lLCAmZXF1YWwpOwotKwlnc3NfcmVsZWFzZV9uYW1lKCZtaW5vciwg Jm5hbWUpOwotKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkKLSsJCXJldHVybiAwOwotKwotKwlpZiAo ZXF1YWwgJiYgKHNhdmVkX2xpZmV0aW1lIDwgbGlmZXRpbWUgKyBub3cgLSAxMCkpCi0rCQlyZXR1 cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0rfQotKwotICNlbmRpZiAvKiBHU1NBUEkgKi8KLWRpZmYg LS1naXQgYS9nc3Mtc2Vydi1rcmI1LmMgYi9nc3Mtc2Vydi1rcmI1LmMKLWluZGV4IGExNTFiYzFl NC4uOGQyYjY3N2Y3IDEwMDY0NAotLS0tIGEvZ3NzLXNlcnYta3JiNS5jCi0rKysgYi9nc3Mtc2Vy di1rcmI1LmMKLUBAIC0xLDcgKzEsNyBAQAotIC8qICRPcGVuQlNEOiBnc3Mtc2Vydi1rcmI1LmMs diAxLjkgMjAxOC8wNy8wOSAyMTozNzo1NSBtYXJrdXMgRXhwICQgKi8KLSAKLSAvKgotLSAqIENv cHlyaWdodCAoYykgMjAwMS0yMDAzIFNpbW9uIFdpbGtpbnNvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBTaW1vbiBXaWxraW5zb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0gICoKLSAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLUBAIC0xMjAs NyArMTIwLDcgQEAgc3NoX2dzc2FwaV9rcmI1X3N0b3JlY3JlZHMoc3NoX2dzc2FwaV9jbGllbnQg KmNsaWVudCkKLSAJa3JiNV9lcnJvcl9jb2RlIHByb2JsZW07Ci0gCWtyYjVfcHJpbmNpcGFsIHBy aW5jOwotIAlPTV91aW50MzIgbWFqX3N0YXR1cywgbWluX3N0YXR1czsKLS0JaW50IGxlbjsKLSsJ Y29uc3QgY2hhciAqbmV3X2NjbmFtZSwgKm5ld19jY3R5cGU7Ci0gCWNvbnN0IGNoYXIgKmVycm1z ZzsKLSAKLSAJaWYgKGNsaWVudC0+Y3JlZHMgPT0gTlVMTCkgewotQEAgLTE4MCwxMSArMTgwLDI2 IEBAIHNzaF9nc3NhcGlfa3JiNV9zdG9yZWNyZWRzKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQp Ci0gCQlyZXR1cm47Ci0gCX0KLSAKLS0JY2xpZW50LT5zdG9yZS5maWxlbmFtZSA9IHhzdHJkdXAo a3JiNV9jY19nZXRfbmFtZShrcmJfY29udGV4dCwgY2NhY2hlKSk7Ci0rCW5ld19jY3R5cGUgPSBr cmI1X2NjX2dldF90eXBlKGtyYl9jb250ZXh0LCBjY2FjaGUpOwotKwluZXdfY2NuYW1lID0ga3Ji NV9jY19nZXRfbmFtZShrcmJfY29udGV4dCwgY2NhY2hlKTsKLSsKLSAJY2xpZW50LT5zdG9yZS5l bnZ2YXIgPSAiS1JCNUNDTkFNRSI7Ci0tCWxlbiA9IHN0cmxlbihjbGllbnQtPnN0b3JlLmZpbGVu YW1lKSArIDY7Ci0tCWNsaWVudC0+c3RvcmUuZW52dmFsID0geG1hbGxvYyhsZW4pOwotLQlzbnBy aW50ZihjbGllbnQtPnN0b3JlLmVudnZhbCwgbGVuLCAiRklMRTolcyIsIGNsaWVudC0+c3RvcmUu ZmlsZW5hbWUpOwotKyNpZmRlZiBVU0VfQ0NBUEkKLSsJeGFzcHJpbnRmKCZjbGllbnQtPnN0b3Jl LmVudnZhbCwgIkFQSTolcyIsIG5ld19jY25hbWUpOwotKwljbGllbnQtPnN0b3JlLmZpbGVuYW1l ID0gTlVMTDsKLSsjZWxzZQotKwlpZiAobmV3X2NjbmFtZVswXSA9PSAnOicpCi0rCQluZXdfY2Nu YW1lKys7Ci0rCXhhc3ByaW50ZigmY2xpZW50LT5zdG9yZS5lbnZ2YWwsICIlczolcyIsIG5ld19j Y3R5cGUsIG5ld19jY25hbWUpOwotKwlpZiAoc3RyY21wKG5ld19jY3R5cGUsICJESVIiKSA9PSAw KSB7Ci0rCQljaGFyICpwOwotKwkJcCA9IHN0cnJjaHIoY2xpZW50LT5zdG9yZS5lbnZ2YWwsICcv Jyk7Ci0rCQlpZiAocCkKLSsJCQkqcCA9ICdcMCc7Ci0rCX0KLSsJaWYgKChzdHJjbXAobmV3X2Nj dHlwZSwgIkZJTEUiKSA9PSAwKSB8fCAoc3RyY21wKG5ld19jY3R5cGUsICJESVIiKSA9PSAwKSkK LSsJCWNsaWVudC0+c3RvcmUuZmlsZW5hbWUgPSB4c3RyZHVwKG5ld19jY25hbWUpOwotKyNlbmRp ZgotIAotICNpZmRlZiBVU0VfUEFNCi0gCWlmIChvcHRpb25zLnVzZV9wYW0pCi1AQCAtMTkzLDkg KzIwOCw3NiBAQCBzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcyhzc2hfZ3NzYXBpX2NsaWVudCAq Y2xpZW50KQotIAotIAlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0LCBjY2FjaGUpOwotIAotKwlj bGllbnQtPnN0b3JlLmRhdGEgPSBrcmJfY29udGV4dDsKLSsKLSAJcmV0dXJuOwotIH0KLSAKLStp bnQKLStzc2hfZ3NzYXBpX2tyYjVfdXBkYXRlY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3Jl LAotKyAgICBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQotK3sKLSsJa3JiNV9jY2FjaGUgY2Nh Y2hlID0gTlVMTDsKLSsJa3JiNV9wcmluY2lwYWwgcHJpbmNpcGFsID0gTlVMTDsKLSsJY2hhciAq bmFtZSA9IE5VTEw7Ci0rCWtyYjVfZXJyb3JfY29kZSBwcm9ibGVtOwotKwlPTV91aW50MzIgbWFq X3N0YXR1cywgbWluX3N0YXR1czsKLSsKLSsJaWYgKChwcm9ibGVtID0ga3JiNV9jY19yZXNvbHZl KGtyYl9jb250ZXh0LCBzdG9yZS0+ZW52dmFsLCAmY2NhY2hlKSkpIHsKLSsgICAgICAgICAgICAg ICAgbG9naXQoImtyYjVfY2NfcmVzb2x2ZSgpOiAlLjEwMHMiLAotKyAgICAgICAgICAgICAgICAg ICAga3JiNV9nZXRfZXJyX3RleHQoa3JiX2NvbnRleHQsIHByb2JsZW0pKTsKLSsgICAgICAgICAg ICAgICAgcmV0dXJuIDA7Ci0rCX0KLSsKLSsJLyogRmluZCBvdXQgd2hvIHRoZSBwcmluY2lwYWwg aW4gdGhpcyBjYWNoZSBpcyAqLwotKwlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX2dldF9wcmluY2lw YWwoa3JiX2NvbnRleHQsIGNjYWNoZSwKLSsJICAgICZwcmluY2lwYWwpKSkgewotKwkJbG9naXQo ImtyYjVfY2NfZ2V0X3ByaW5jaXBhbCgpOiAlLjEwMHMiLAotKwkJICAgIGtyYjVfZ2V0X2Vycl90 ZXh0KGtyYl9jb250ZXh0LCBwcm9ibGVtKSk7Ci0rCQlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0 LCBjY2FjaGUpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsJaWYgKChwcm9ibGVtID0ga3JiNV91 bnBhcnNlX25hbWUoa3JiX2NvbnRleHQsIHByaW5jaXBhbCwgJm5hbWUpKSkgewotKwkJbG9naXQo ImtyYjVfdW5wYXJzZV9uYW1lKCk6ICUuMTAwcyIsCi0rCQkgICAga3JiNV9nZXRfZXJyX3RleHQo a3JiX2NvbnRleHQsIHByb2JsZW0pKTsKLSsJCWtyYjVfZnJlZV9wcmluY2lwYWwoa3JiX2NvbnRl eHQsIHByaW5jaXBhbCk7Ci0rCQlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0LCBjY2FjaGUpOwot KwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsKLSsJaWYgKHN0cmNtcChuYW1lLGNsaWVudC0+ZXhwb3J0 ZWRuYW1lLnZhbHVlKSE9MCkgewotKwkJZGVidWcoIk5hbWUgaW4gbG9jYWwgY3JlZGVudGlhbHMg Y2FjaGUgZGlmZmVycy4gTm90IHN0b3JpbmciKTsKLSsJCWtyYjVfZnJlZV9wcmluY2lwYWwoa3Ji X2NvbnRleHQsIHByaW5jaXBhbCk7Ci0rCQlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0LCBjY2Fj aGUpOwotKwkJa3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa3JiX2NvbnRleHQsIG5hbWUpOwotKwkJ cmV0dXJuIDA7Ci0rCX0KLSsJa3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa3JiX2NvbnRleHQsIG5h bWUpOwotKwotKwkvKiBOYW1lIG1hdGNoZXMsIHNvIGxldHMgZ2V0IG9uIHdpdGggaXQhICovCi0r Ci0rCWlmICgocHJvYmxlbSA9IGtyYjVfY2NfaW5pdGlhbGl6ZShrcmJfY29udGV4dCwgY2NhY2hl LCBwcmluY2lwYWwpKSkgewotKwkJbG9naXQoImtyYjVfY2NfaW5pdGlhbGl6ZSgpOiAlLjEwMHMi LAotKwkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KGtyYl9jb250ZXh0LCBwcm9ibGVtKSk7Ci0rCQlr cmI1X2ZyZWVfcHJpbmNpcGFsKGtyYl9jb250ZXh0LCBwcmluY2lwYWwpOwotKwkJa3JiNV9jY19j bG9zZShrcmJfY29udGV4dCwgY2NhY2hlKTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCWtyYjVf ZnJlZV9wcmluY2lwYWwoa3JiX2NvbnRleHQsIHByaW5jaXBhbCk7Ci0rCi0rCWlmICgobWFqX3N0 YXR1cyA9IGdzc19rcmI1X2NvcHlfY2NhY2hlKCZtaW5fc3RhdHVzLCBjbGllbnQtPmNyZWRzLAot KwkgICAgY2NhY2hlKSkpIHsKLSsJCWxvZ2l0KCJnc3Nfa3JiNV9jb3B5X2NjYWNoZSgpIGZhaWxl ZC4gU29ycnkhIik7Ci0rCQlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0LCBjY2FjaGUpOwotKwkJ cmV0dXJuIDA7Ci0rCX0KLSsKLSsJcmV0dXJuIDE7Ci0rfQotKwotIHNzaF9nc3NhcGlfbWVjaCBn c3NhcGlfa2VyYmVyb3NfbWVjaCA9IHsKLSAJInRvV001U2x3NUV3OE1xa2F5K2FsMmc9PSIsCi0g CSJLZXJiZXJvcyIsCi1AQCAtMjAzLDcgKzI4NSw4IEBAIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlf a2VyYmVyb3NfbWVjaCA9IHsKLSAJTlVMTCwKLSAJJnNzaF9nc3NhcGlfa3JiNV91c2Vyb2ssCi0g CU5VTEwsCi0tCSZzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcwotKwkmc3NoX2dzc2FwaV9rcmI1 X3N0b3JlY3JlZHMsCi0rCSZzc2hfZ3NzYXBpX2tyYjVfdXBkYXRlY3JlZHMKLSB9OwotIAotICNl bmRpZiAvKiBLUkI1ICovCi1kaWZmIC0tZ2l0IGEvZ3NzLXNlcnYuYyBiL2dzcy1zZXJ2LmMKLWlu ZGV4IGIwZTljM2I0OS4uNmJhYzQyOTMxIDEwMDY0NAotLS0tIGEvZ3NzLXNlcnYuYwotKysrIGIv Z3NzLXNlcnYuYwotQEAgLTEsNyArMSw3IEBACi0gLyogJE9wZW5CU0Q6IGdzcy1zZXJ2LmMsdiAx LjMzIDIwMjUvMDkvMjkgMjE6MzA6MTUgZHR1Y2tlciBFeHAgJCAqLwotIAotIC8qCi0tICogQ29w eXJpZ2h0IChjKSAyMDAxLTIwMDMgU2ltb24gV2lsa2luc29uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA5IFNpbW9uIFdpbGtpbnNvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSAgKgotICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotQEAgLTQ1LDE3 ICs0NSwxOSBAQAotICNpbmNsdWRlICJzZXNzaW9uLmgiCi0gI2luY2x1ZGUgIm1pc2MuaCIKLSAj aW5jbHVkZSAic2VydmNvbmYuaCIKLSsjaW5jbHVkZSAidWlkc3dhcC5oIgotIAotICNpbmNsdWRl ICJzc2gtZ3NzLmgiCi0rI2luY2x1ZGUgIm1vbml0b3Jfd3JhcC5oIgotIAotIGV4dGVybiBTZXJ2 ZXJPcHRpb25zIG9wdGlvbnM7Ci0gCi0gc3RhdGljIHNzaF9nc3NhcGlfY2xpZW50IGdzc2FwaV9j bGllbnQgPQotLSAgICB7IEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVSLAot LSAgICBHU1NfQ19OT19DUkVERU5USUFMLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTH19 OwotKyAgICB7IEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19O T19DUkVERU5USUFMLAotKyAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTH0sIDAsIDB9OwotIAotIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfbnVsbF9t ZWNoID0KLS0gICAgeyBOVUxMLCBOVUxMLCB7MCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEx9OwotKyAgICB7IE5VTEwsIE5VTEwsIHswLCBOVUxMfSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTH07Ci0gCi0gI2lmZGVmIEtSQjUKLSBleHRlcm4gc3NoX2dzc2FwaV9tZWNoIGdzc2Fw aV9rZXJiZXJvc19tZWNoOwotQEAgLTE0MSw2ICsxNDMsMjkgQEAgc3NoX2dzc2FwaV9zZXJ2ZXJf Y3R4KEdzc2N0eHQgKipjdHgsIGdzc19PSUQgb2lkKQotIAlyZXR1cm4gKHNzaF9nc3NhcGlfYWNx dWlyZV9jcmVkKCpjdHgpKTsKLSB9Ci0gCi0rLyogVW5wcml2aWxlZ2VkICovCi0rY2hhciAqCi0r c3NoX2dzc2FwaV9zZXJ2ZXJfbWVjaGFuaXNtcyh2b2lkKSB7Ci0rCWlmIChzdXBwb3J0ZWRfb2lk cyA9PSBOVUxMKQotKwkJc3NoX2dzc2FwaV9wcmVwYXJlX3N1cHBvcnRlZF9vaWRzKCk7Ci0rCXJl dHVybiAoc3NoX2dzc2FwaV9rZXhfbWVjaHMoc3VwcG9ydGVkX29pZHMsCi0rCSAgICAmc3NoX2dz c2FwaV9zZXJ2ZXJfY2hlY2tfbWVjaCwgTlVMTCwgTlVMTCwKLSsJICAgIG9wdGlvbnMuZ3NzX2tl eF9hbGdvcml0aG1zKSk7Ci0rfQotKwotKy8qIFVucHJpdmlsZWdlZCAqLwotK2ludAotK3NzaF9n c3NhcGlfc2VydmVyX2NoZWNrX21lY2goR3NzY3R4dCAqKmR1bSwgZ3NzX09JRCBvaWQsIGNvbnN0 IGNoYXIgKmRhdGEsCi0rICAgIGNvbnN0IGNoYXIgKmR1bW15KSB7Ci0rCUdzc2N0eHQgKmN0eCA9 IE5VTEw7Ci0rCWludCByZXM7Ci0rCi0rCXJlcyA9ICFHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9z ZXJ2ZXJfY3R4KCZjdHgsIG9pZCkpOwotKwlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmN0eCk7Ci0r Ci0rCXJldHVybiAocmVzKTsKLSt9Ci0rCi0gLyogVW5wcml2aWxlZ2VkICovCi0gdm9pZAotIHNz aF9nc3NhcGlfc3VwcG9ydGVkX29pZHMoZ3NzX09JRF9zZXQgKm9pZHNldCkKLUBAIC0xNTEsNyAr MTc2LDkgQEAgc3NoX2dzc2FwaV9zdXBwb3J0ZWRfb2lkcyhnc3NfT0lEX3NldCAqb2lkc2V0KQot IAlnc3NfT0lEX3NldCBzdXBwb3J0ZWQ7Ci0gCi0gCWdzc19jcmVhdGVfZW1wdHlfb2lkX3NldCgm bWluX3N0YXR1cywgb2lkc2V0KTsKLS0JZ3NzX2luZGljYXRlX21lY2hzKCZtaW5fc3RhdHVzLCAm c3VwcG9ydGVkKTsKLSsKLSsJaWYgKEdTU19FUlJPUihnc3NfaW5kaWNhdGVfbWVjaHMoJm1pbl9z dGF0dXMsICZzdXBwb3J0ZWQpKSkKLSsJCXJldHVybjsKLSAKLSAJd2hpbGUgKHN1cHBvcnRlZF9t ZWNoc1tpXS0+bmFtZSAhPSBOVUxMKSB7Ci0gCQlpZiAoR1NTX0VSUk9SKGdzc190ZXN0X29pZF9z ZXRfbWVtYmVyKCZtaW5fc3RhdHVzLAotQEAgLTI3Nyw4ICszMDQsNDggQEAgT01fdWludDMyCi0g c3NoX2dzc2FwaV9nZXRjbGllbnQoR3NzY3R4dCAqY3R4LCBzc2hfZ3NzYXBpX2NsaWVudCAqY2xp ZW50KQotIHsKLSAJaW50IGkgPSAwOwotKwlpbnQgZXF1YWwgPSAwOwotKwlnc3NfbmFtZV90IG5l d19uYW1lID0gR1NTX0NfTk9fTkFNRTsKLSsJZ3NzX2J1ZmZlcl9kZXNjIGVuYW1lID0gR1NTX0Nf RU1QVFlfQlVGRkVSOwotKwotKwlpZiAob3B0aW9ucy5nc3Nfc3RvcmVfcmVrZXkgJiYgY2xpZW50 LT51c2VkICYmIGN0eC0+Y2xpZW50X2NyZWRzKSB7Ci0rCQlpZiAoY2xpZW50LT5tZWNoLT5vaWQu bGVuZ3RoICE9IGN0eC0+b2lkLT5sZW5ndGggfHwKLSsJCSAgICAobWVtY21wKGNsaWVudC0+bWVj aC0+b2lkLmVsZW1lbnRzLAotKwkJICAgICBjdHgtPm9pZC0+ZWxlbWVudHMsIGN0eC0+b2lkLT5s ZW5ndGgpICE9MCkpIHsKLSsJCQlkZWJ1ZygiUmVrZXllZCBjcmVkZW50aWFscyBoYXZlIGRpZmZl cmVudCBtZWNoYW5pc20iKTsKLSsJCQlyZXR1cm4gR1NTX1NfQ09NUExFVEU7Ci0rCQl9Ci0gCi0t CWdzc19idWZmZXJfZGVzYyBlbmFtZTsKLSsJCWlmICgoY3R4LT5tYWpvciA9IGdzc19pbnF1aXJl X2NyZWRfYnlfbWVjaCgmY3R4LT5taW5vciwKLSsJCSAgICBjdHgtPmNsaWVudF9jcmVkcywgY3R4 LT5vaWQsICZuZXdfbmFtZSwKLSsJCSAgICBOVUxMLCBOVUxMLCBOVUxMKSkpIHsKLSsJCQlzc2hf Z3NzYXBpX2Vycm9yKGN0eCk7Ci0rCQkJcmV0dXJuIChjdHgtPm1ham9yKTsKLSsJCX0KLSsKLSsJ CWN0eC0+bWFqb3IgPSBnc3NfY29tcGFyZV9uYW1lKCZjdHgtPm1pbm9yLCBjbGllbnQtPm5hbWUs Ci0rCQkgICAgbmV3X25hbWUsICZlcXVhbCk7Ci0rCi0rCQlpZiAoR1NTX0VSUk9SKGN0eC0+bWFq b3IpKSB7Ci0rCQkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOwotKwkJCXJldHVybiAoY3R4LT5tYWpv cik7Ci0rCQl9Ci0rCi0rCQlpZiAoIWVxdWFsKSB7Ci0rCQkJZGVidWcoIlJla2V5ZWQgY3JlZGVu dGlhbHMgaGF2ZSBkaWZmZXJlbnQgbmFtZSIpOwotKwkJCXJldHVybiBHU1NfU19DT01QTEVURTsK LSsJCX0KLSsKLSsJCWRlYnVnKCJNYXJraW5nIHJla2V5ZWQgY3JlZGVudGlhbHMgZm9yIGV4cG9y dCIpOwotKwotKwkJZ3NzX3JlbGVhc2VfbmFtZSgmY3R4LT5taW5vciwgJmNsaWVudC0+bmFtZSk7 Ci0rCQlnc3NfcmVsZWFzZV9jcmVkKCZjdHgtPm1pbm9yLCAmY2xpZW50LT5jcmVkcyk7Ci0rCQlj bGllbnQtPm5hbWUgPSBuZXdfbmFtZTsKLSsJCWNsaWVudC0+Y3JlZHMgPSBjdHgtPmNsaWVudF9j cmVkczsKLSsJCWN0eC0+Y2xpZW50X2NyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKLSsJCWNs aWVudC0+dXBkYXRlZCA9IDE7Ci0rCQlyZXR1cm4gR1NTX1NfQ09NUExFVEU7Ci0rCX0KLSAKLSAJ Y2xpZW50LT5tZWNoID0gTlVMTDsKLSAKLUBAIC0yOTMsNiArMzYwLDEzIEBAIHNzaF9nc3NhcGlf Z2V0Y2xpZW50KEdzc2N0eHQgKmN0eCwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKLSAJaWYg KGNsaWVudC0+bWVjaCA9PSBOVUxMKQotIAkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7Ci0gCi0rCWlm IChjdHgtPmNsaWVudF9jcmVkcyAmJgotKwkgICAgKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9j cmVkX2J5X21lY2goJmN0eC0+bWlub3IsCi0rCSAgICAgY3R4LT5jbGllbnRfY3JlZHMsIGN0eC0+ b2lkLCAmY2xpZW50LT5uYW1lLCBOVUxMLCBOVUxMLCBOVUxMKSkpIHsKLSsJCXNzaF9nc3NhcGlf ZXJyb3IoY3R4KTsKLSsJCXJldHVybiAoY3R4LT5tYWpvcik7Ci0rCX0KLSsKLSAJaWYgKChjdHgt Pm1ham9yID0gZ3NzX2Rpc3BsYXlfbmFtZSgmY3R4LT5taW5vciwgY3R4LT5jbGllbnQsCi0gCSAg ICAmY2xpZW50LT5kaXNwbGF5bmFtZSwgTlVMTCkpKSB7Ci0gCQlzc2hfZ3NzYXBpX2Vycm9yKGN0 eCk7Ci1AQCAtMzEwLDYgKzM4NCw4IEBAIHNzaF9nc3NhcGlfZ2V0Y2xpZW50KEdzc2N0eHQgKmN0 eCwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKLSAJCXJldHVybiAoY3R4LT5tYWpvcik7Ci0g CX0KLSAKLSsJZ3NzX3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAmZW5hbWUpOwotKwotIAkv KiBXZSBjYW4ndCBjb3B5IHRoaXMgc3RydWN0dXJlLCBzbyB3ZSBqdXN0IG1vdmUgdGhlIHBvaW50 ZXIgdG8gaXQgKi8KLSAJY2xpZW50LT5jcmVkcyA9IGN0eC0+Y2xpZW50X2NyZWRzOwotIAljdHgt PmNsaWVudF9jcmVkcyA9IEdTU19DX05PX0NSRURFTlRJQUw7Ci1AQCAtMzIwLDExICszOTYsMjAg QEAgc3NoX2dzc2FwaV9nZXRjbGllbnQoR3NzY3R4dCAqY3R4LCBzc2hfZ3NzYXBpX2NsaWVudCAq Y2xpZW50KQotIHZvaWQKLSBzc2hfZ3NzYXBpX2NsZWFudXBfY3JlZHModm9pZCkKLSB7Ci0tCWlm IChnc3NhcGlfY2xpZW50LnN0b3JlLmZpbGVuYW1lICE9IE5VTEwpIHsKLS0JCS8qIFVubGluayBw cm9iYWJseSBpc24ndCBzdWZmaWNpZW50ICovCi0tCQlkZWJ1ZygicmVtb3ZpbmcgZ3NzYXBpIGNy ZWQgZmlsZVwiJXNcIiIsCi0tCQkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSk7Ci0t CQl1bmxpbmsoZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSk7Ci0rCWtyYjVfY2NhY2hlIGNj YWNoZSA9IE5VTEw7Ci0rCWtyYjVfZXJyb3JfY29kZSBwcm9ibGVtOwotKwotKwlpZiAoZ3NzYXBp X2NsaWVudC5zdG9yZS5kYXRhICE9IE5VTEwpIHsKLSsJCWlmICgocHJvYmxlbSA9IGtyYjVfY2Nf cmVzb2x2ZShnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEsIGdzc2FwaV9jbGllbnQuc3RvcmUuZW52 dmFsLCAmY2NhY2hlKSkpIHsKLSsJCQlkZWJ1Z19mKCJrcmI1X2NjX3Jlc29sdmUoKTogJS4xMDBz IiwKLSsJCQkJa3JiNV9nZXRfZXJyX3RleHQoZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhLCBwcm9i bGVtKSk7Ci0rCQl9IGVsc2UgaWYgKChwcm9ibGVtID0ga3JiNV9jY19kZXN0cm95KGdzc2FwaV9j bGllbnQuc3RvcmUuZGF0YSwgY2NhY2hlKSkpIHsKLSsJCQlkZWJ1Z19mKCJrcmI1X2NjX2Rlc3Ry b3koKTogJS4xMDBzIiwKLSsJCQkJa3JiNV9nZXRfZXJyX3RleHQoZ3NzYXBpX2NsaWVudC5zdG9y ZS5kYXRhLCBwcm9ibGVtKSk7Ci0rCQl9IGVsc2UgewotKwkJCWtyYjVfZnJlZV9jb250ZXh0KGdz c2FwaV9jbGllbnQuc3RvcmUuZGF0YSk7Ci0rCQkJZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhID0g TlVMTDsKLSsJCX0KLSAJfQotIH0KLSAKLUBAIC0zNTcsMTkgKzQ0MiwyMyBAQCBzc2hfZ3NzYXBp X2RvX2NoaWxkKGNoYXIgKioqZW52cCwgdV9pbnQgKmVudnNpemVwKQotIAotIC8qIFByaXZpbGVn ZWQgKi8KLSBpbnQKLS1zc2hfZ3NzYXBpX3VzZXJvayhjaGFyICp1c2VyKQotK3NzaF9nc3NhcGlf dXNlcm9rKGNoYXIgKnVzZXIsIHN0cnVjdCBwYXNzd2QgKnB3LCBpbnQga2V4KQotIHsKLSAJT01f dWludDMyIGxtaW47Ci0gCi0rCSh2b2lkKSBrZXg7IC8qIHVzZWQgaW4gcHJpdmlsZWdlIHNlcGFy YXRpb24gKi8KLSsKLSAJaWYgKGdzc2FwaV9jbGllbnQuZXhwb3J0ZWRuYW1lLmxlbmd0aCA9PSAw IHx8Ci0gCSAgICBnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS52YWx1ZSA9PSBOVUxMKSB7Ci0g CQlkZWJ1ZygiTm8gc3VpdGFibGUgY2xpZW50IGRhdGEiKTsKLSAJCXJldHVybiAwOwotIAl9Ci0g CWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5tZWNoLT51c2Vyb2spCi0t CQlpZiAoKCpnc3NhcGlfY2xpZW50Lm1lY2gtPnVzZXJvaykoJmdzc2FwaV9jbGllbnQsIHVzZXIp KQotKwkJaWYgKCgqZ3NzYXBpX2NsaWVudC5tZWNoLT51c2Vyb2spKCZnc3NhcGlfY2xpZW50LCB1 c2VyKSkgewotKwkJCWdzc2FwaV9jbGllbnQudXNlZCA9IDE7Ci0rCQkJZ3NzYXBpX2NsaWVudC5z dG9yZS5vd25lciA9IHB3OwotIAkJCXJldHVybiAxOwotLQkJZWxzZSB7Ci0rCQl9IGVsc2Ugewot IAkJCS8qIERlc3Ryb3kgZGVsZWdhdGVkIGNyZWRlbnRpYWxzIGlmIHVzZXJvayBmYWlscyAqLwot IAkJCWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUp OwotIAkJCWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmdzc2FwaV9jbGllbnQuZXhwb3J0ZWRu YW1lKTsKLUBAIC0zODMsMTQgKzQ3Miw4NSBAQCBzc2hfZ3NzYXBpX3VzZXJvayhjaGFyICp1c2Vy KQotIAlyZXR1cm4gKDApOwotIH0KLSAKLS0vKiBQcml2aWxlZ2VkICovCi0tT01fdWludDMyCi0t c3NoX2dzc2FwaV9jaGVja21pYyhHc3NjdHh0ICpjdHgsIGdzc19idWZmZXJfdCBnc3NidWYsIGdz c19idWZmZXJfdCBnc3NtaWMpCi0rLyogVGhlc2UgYml0cyBhcmUgb25seSB1c2VkIGZvciByZWtl eWluZy4gVGhlIHVucHJpdmlsZWRnZWQgY2hpbGQgaXMgcnVubmluZwotKyAqIGFzIHRoZSB1c2Vy LCB0aGUgbW9uaXRvciBpcyByb290LgotKyAqCi0rICogSW4gdGhlIGNoaWxkLCB3ZSB3YW50IHRv IDoKLSsgKiAgICAqKSBBc2sgdGhlIG1vbml0b3IgdG8gc3RvcmUgb3VyIGNyZWRlbnRpYWxzIGlu dG8gdGhlIHN0b3JlIHdlIHNwZWNpZnkKLSsgKiAgICAqKSBJZiBpdCBzdWNjZWVkcywgbWF5YmUg ZG8gYSBQQU0gdXBkYXRlCi0rICovCi0rCi0rLyogU3R1ZmYgZm9yIFBBTSAqLwotKwotKyNpZmRl ZiBVU0VfUEFNCi0rc3RhdGljIGludCBzc2hfZ3NzYXBpX3NpbXBsZV9jb252KGludCBuLCBjb25z dCBzdHJ1Y3QgcGFtX21lc3NhZ2UgKiptc2csCi0rICAgIHN0cnVjdCBwYW1fcmVzcG9uc2UgKipy ZXNwLCB2b2lkICpkYXRhKQotIHsKLS0JY3R4LT5tYWpvciA9IGdzc192ZXJpZnlfbWljKCZjdHgt Pm1pbm9yLCBjdHgtPmNvbnRleHQsCi0tCSAgICBnc3NidWYsIGdzc21pYywgTlVMTCk7Ci0rCXJl dHVybiAoUEFNX0NPTlZfRVJSKTsKLSt9Ci0rI2VuZGlmCi0gCi0tCXJldHVybiAoY3R4LT5tYWpv cik7Ci0rdm9pZAotK3NzaF9nc3NhcGlfcmVrZXlfY3JlZHModm9pZCkgewotKwlpbnQgb2s7Ci0r I2lmZGVmIFVTRV9QQU0KLSsJaW50IHJldDsKLSsJcGFtX2hhbmRsZV90ICpwYW1oID0gTlVMTDsK LSsJc3RydWN0IHBhbV9jb252IHBhbWNvbnYgPSB7c3NoX2dzc2FwaV9zaW1wbGVfY29udiwgTlVM TH07Ci0rCWNoYXIgKmVudnN0cjsKLSsjZW5kaWYKLSsKLSsJaWYgKGdzc2FwaV9jbGllbnQuc3Rv cmUuZmlsZW5hbWUgPT0gTlVMTCAmJgotKwkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwg PT0gTlVMTCAmJgotKwkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YXIgPT0gTlVMTCkKLSsJ CXJldHVybjsKLSsKLSsJb2sgPSBtbV9zc2hfZ3NzYXBpX3VwZGF0ZV9jcmVkcygmZ3NzYXBpX2Ns aWVudC5zdG9yZSk7Ci0rCi0rCWlmICghb2spCi0rCQlyZXR1cm47Ci0rCi0rCWRlYnVnKCJSZWtl eWVkIGNyZWRlbnRpYWxzIHN0b3JlZCBzdWNjZXNzZnVsbHkiKTsKLSsKLSsJLyogQWN0dWFsbHkg bWFuYWdpbmcgdG8gcGxheSB3aXRoIHRoZSBzc2ggcGFtIHN0YWNrIGZyb20gaGVyZSB3aWxsCi0r CSAqIGJlIG5leHQgdG8gaW1wb3NzaWJsZS4gSW4gYW55IGNhc2UsIHdlIG1heSB3YW50IGRpZmZl cmVudCBvcHRpb25zCi0rCSAqIGZvciByZWtleWluZy4gU28sIHVzZSBvdXIgb3duIDopCi0rCSAq LwotKyNpZmRlZiBVU0VfUEFNCQotKwlyZXQgPSBwYW1fc3RhcnQoInNzaGQtcmVrZXkiLCBnc3Nh cGlfY2xpZW50LnN0b3JlLm93bmVyLT5wd19uYW1lLAotKyAJICAgICZwYW1jb252LCAmcGFtaCk7 Ci0rCWlmIChyZXQpCi0rCQlyZXR1cm47Ci0rCi0rCXhhc3ByaW50ZigmZW52c3RyLCAiJXM9JXMi LCBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhciwKLSsJICAgIGdzc2FwaV9jbGllbnQuc3RvcmUu ZW52dmFsKTsKLSsKLSsJcmV0ID0gcGFtX3B1dGVudihwYW1oLCBlbnZzdHIpOwotKwlpZiAoIXJl dCkKLSsJCXBhbV9zZXRjcmVkKHBhbWgsIFBBTV9SRUlOSVRJQUxJWkVfQ1JFRCk7Ci0rCXBhbV9l bmQocGFtaCwgUEFNX1NVQ0NFU1MpOwotKyNlbmRpZgotK30KLSsKLStpbnQKLStzc2hfZ3NzYXBp X3VwZGF0ZV9jcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUpIHsKLSsJaW50IG9rID0gMDsK LSsKLSsJLyogQ2hlY2sgd2UndmUgZ290IGNyZWRlbnRpYWxzIHRvIHN0b3JlICovCi0rCWlmICgh Z3NzYXBpX2NsaWVudC51cGRhdGVkKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWdzc2FwaV9jbGllbnQu dXBkYXRlZCA9IDA7Ci0rCi0rCXRlbXBvcmFyaWx5X3VzZV91aWQoZ3NzYXBpX2NsaWVudC5zdG9y ZS5vd25lcik7Ci0rCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5tZWNo LT51cGRhdGVjcmVkcykKLSsJCW9rID0gKCpnc3NhcGlfY2xpZW50Lm1lY2gtPnVwZGF0ZWNyZWRz KShzdG9yZSwgJmdzc2FwaV9jbGllbnQpOwotKwllbHNlCi0rCQlkZWJ1ZygiTm8gdXBkYXRlIGZ1 bmN0aW9uIGZvciB0aGlzIG1lY2hhbmlzbSIpOwotKwotKwlyZXN0b3JlX3VpZCgpOwotKwotKwly ZXR1cm4gb2s7Ci0gfQotIAotIC8qIFByaXZpbGVnZWQgKi8KLWRpZmYgLS1naXQgYS9rZXgtbmFt ZXMuYyBiL2tleC1uYW1lcy5jCi1pbmRleCBhMjBjZTYwMmEuLjMxZTM5NWFhMiAxMDA2NDQKLS0t LSBhL2tleC1uYW1lcy5jCi0rKysgYi9rZXgtbmFtZXMuYwotQEAgLTQ1LDYgKzQ1LDEwIEBACi0g I2luY2x1ZGUgInNzaGVyci5oIgotICNpbmNsdWRlICJ4bWFsbG9jLmgiCi0gCi0rI2lmZGVmIEdT U0FQSQotKyNpbmNsdWRlICJzc2gtZ3NzLmgiCi0rI2VuZGlmCi0rCi0gc3RydWN0IGtleGFsZyB7 Ci0gCWNoYXIgKm5hbWU7Ci0gCXVfaW50IHR5cGU7Ci1AQCAtOTAsOSArOTQsMjIgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBrZXhhbGcga2V4YWxnc1tdID0gewotICNlbmRpZiAvKiBIQVZFX0VWUF9T SEEyNTYgfHwgIVdJVEhfT1BFTlNTTCAqLwotIAl7IE5VTEwsIDAsIC0xLCAtMSwgMCB9LAotIH07 Ci0rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXhhbGcgZ3NzX2tleGFsZ3NbXSA9IHsKLSsjaWZkZWYg R1NTQVBJCi0rCXsgS0VYX0dTU19HRVhfU0hBMV9JRCwgS0VYX0dTU19HRVhfU0hBMSwgMCwgU1NI X0RJR0VTVF9TSEExLCBLRVhfTk9UX1BRIH0sCi0rCXsgS0VYX0dTU19HUlAxX1NIQTFfSUQsIEtF WF9HU1NfR1JQMV9TSEExLCAwLCBTU0hfRElHRVNUX1NIQTEsIEtFWF9OT1RfUFEgfSwKLSsJeyBL RVhfR1NTX0dSUDE0X1NIQTFfSUQsIEtFWF9HU1NfR1JQMTRfU0hBMSwgMCwgU1NIX0RJR0VTVF9T SEExLCBLRVhfTk9UX1BRIH0sCi0rCXsgS0VYX0dTU19HUlAxNF9TSEEyNTZfSUQsIEtFWF9HU1Nf R1JQMTRfU0hBMjU2LCAwLCBTU0hfRElHRVNUX1NIQTI1NiwgS0VYX05PVF9QUSB9LAotKwl7IEtF WF9HU1NfR1JQMTZfU0hBNTEyX0lELCBLRVhfR1NTX0dSUDE2X1NIQTUxMiwgMCwgU1NIX0RJR0VT VF9TSEE1MTIsIEtFWF9OT1RfUFEgfSwKLSsJeyBLRVhfR1NTX05JU1RQMjU2X1NIQTI1Nl9JRCwg S0VYX0dTU19OSVNUUDI1Nl9TSEEyNTYsCi0rCSAgICBOSURfWDlfNjJfcHJpbWUyNTZ2MSwgU1NI X0RJR0VTVF9TSEEyNTYsIEtFWF9OT1RfUFEgfSwKLSsJeyBLRVhfR1NTX0MyNTUxOV9TSEEyNTZf SUQsIEtFWF9HU1NfQzI1NTE5X1NIQTI1NiwgMCwgU1NIX0RJR0VTVF9TSEEyNTYsIEtFWF9OT1Rf UFEgfSwKLSsjZW5kaWYKLSsJeyBOVUxMLCAwLCAtMSwgLTEsIDB9LAotK307Ci0gCi0tY2hhciAq Ci0ta2V4X2FsZ19saXN0KGNoYXIgc2VwKQotK3N0YXRpYyBjaGFyICoKLStrZXhfYWxnX2xpc3Rf aW50ZXJuYWwoY2hhciBzZXAsIGNvbnN0IHN0cnVjdCBrZXhhbGcgKmFsZ3MpCi0gewotIAljaGFy ICpyZXQgPSBOVUxMOwotIAljb25zdCBzdHJ1Y3Qga2V4YWxnICprOwotQEAgLTEwNCw2ICsxMjEs MTggQEAga2V4X2FsZ19saXN0KGNoYXIgc2VwKQotIAlyZXR1cm4gcmV0OwotIH0KLSAKLStjaGFy ICoKLStrZXhfYWxnX2xpc3QoY2hhciBzZXApCi0rewotKwlyZXR1cm4ga2V4X2FsZ19saXN0X2lu dGVybmFsKHNlcCwga2V4YWxncyk7Ci0rfQotKwotK2NoYXIgKgotK2tleF9nc3NfYWxnX2xpc3Qo Y2hhciBzZXApCi0rewotKwlyZXR1cm4ga2V4X2FsZ19saXN0X2ludGVybmFsKHNlcCwgZ3NzX2tl eGFsZ3MpOwotK30KLSsKLSBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyAqCi0ga2V4X2FsZ19i eV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCi0gewotQEAgLTExMyw2ICsxNDIsMTAgQEAga2V4X2Fs Z19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCi0gCQlpZiAoc3RyY21wKGstPm5hbWUsIG5hbWUp ID09IDApCi0gCQkJcmV0dXJuIGs7Ci0gCX0KLSsJZm9yIChrID0gZ3NzX2tleGFsZ3M7IGstPm5h bWUgIT0gTlVMTDsgaysrKSB7Ci0rCQlpZiAoc3RybmNtcChrLT5uYW1lLCBuYW1lLCBzdHJsZW4o ay0+bmFtZSkpID09IDApCi0rCQkJcmV0dXJuIGs7Ci0rCX0KLSAJcmV0dXJuIE5VTEw7Ci0gfQot IAotQEAgLTMzNiwzICszNjksMjYgQEAga2V4X2Fzc2VtYmxlX25hbWVzKGNoYXIgKipsaXN0cCwg Y29uc3QgY2hhciAqZGVmLCBjb25zdCBjaGFyICphbGwpCi0gCWZyZWUocmV0KTsKLSAJcmV0dXJu IHI7Ci0gfQotKyAKLSsvKiBWYWxpZGF0ZSBHU1MgS0VYIG1ldGhvZCBuYW1lIGxpc3QgKi8KLStp bnQKLStrZXhfZ3NzX25hbWVzX3ZhbGlkKGNvbnN0IGNoYXIgKm5hbWVzKQotK3sKLSsJY2hhciAq cywgKmNwLCAqcDsKLSsKLSsJaWYgKG5hbWVzID09IE5VTEwgfHwgKm5hbWVzID09ICdcMCcpCi0r CQlyZXR1cm4gMDsKLSsJcyA9IGNwID0geHN0cmR1cChuYW1lcyk7Ci0rCWZvciAoKHAgPSBzdHJz ZXAoJmNwLCAiLCIpKTsgcCAmJiAqcCAhPSAnXDAnOwotKwkgICAgKHAgPSBzdHJzZXAoJmNwLCAi LCIpKSkgewotKwkJaWYgKHN0cm5jbXAocCwgImdzcy0iLCA0KSAhPSAwCi0rCQkgIHx8IGtleF9h bGdfYnlfbmFtZShwKSA9PSBOVUxMKSB7Ci0rCQkJZXJyb3IoIlVuc3VwcG9ydGVkIEtFWCBhbGdv cml0aG0gXCIlLjEwMHNcIiIsIHApOwotKwkJCWZyZWUocyk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQl9 Ci0rCX0KLSsJZGVidWczKCJnc3Mga2V4IG5hbWVzIG9rOiBbJXNdIiwgbmFtZXMpOwotKwlmcmVl KHMpOwotKwlyZXR1cm4gMTsKLSt9Ci1kaWZmIC0tZ2l0IGEva2V4LmMgYi9rZXguYwotaW5kZXgg ODE0ZmFkOTQ3Li45YTJjZTZkODggMTAwNjQ0Ci0tLS0gYS9rZXguYwotKysrIGIva2V4LmMKLUBA IC0yOTUsMTcgKzI5NSwzNyBAQCBzdGF0aWMgaW50Ci0ga2V4X2NvbXBvc2VfZXh0X2luZm9fc2Vy dmVyKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaGJ1ZiAqbSkKLSB7Ci0gCWludCByOwotKwlp bnQgaGF2ZV9rZXkgPSAwOwotKwlpbnQgZXh0X2NvdW50ID0gMjsKLSsKLSsjaWZkZWYgR1NTQVBJ Ci0rCS8qCi0rCSAqIEN1cnJlbnRseSBHU1MgS0VYIGRvbid0IHByb3ZpZGUgaG9zdCBrZXlzIGFz IG9wdGlvbmFsIG1lc3NhZ2UsIHNvCi0rCSAqIG5vIHJlYXNvbnMgdG8gYW5ub3VuY2UgdGhlIHB1 YmxpY2tleS1ob3N0Ym91bmQgZXh0ZW5zaW9uCi0rCSAqLwotKwlpZiAoc3NoLT5rZXgtPmdzcyA9 PSBOVUxMKQotKwkgICAgaGF2ZV9rZXkgPSAxOwotKyNlbmRpZgotKwlleHRfY291bnQgKz0gaGF2 ZV9rZXk7Ci0rCi0gCi0gCWlmIChzc2gtPmtleC0+c2VydmVyX3NpZ19hbGdzID09IE5VTEwgJiYK LSAJICAgIChzc2gtPmtleC0+c2VydmVyX3NpZ19hbGdzID0gc3Noa2V5X2FsZ19saXN0KDAsIDEs IDEsICcsJykpID09IE5VTEwpCi0gCQlyZXR1cm4gU1NIX0VSUl9BTExPQ19GQUlMOwotLQlpZiAo KHIgPSBzc2hidWZfcHV0X3UzMihtLCAzKSkgIT0gMCB8fAotKwlpZiAoKHIgPSBzc2hidWZfcHV0 X3UzMihtLCBleHRfY291bnQpKSAhPSAwIHx8Ci0gCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmlu ZyhtLCAic2VydmVyLXNpZy1hbGdzIikpICE9IDAgfHwKLS0JICAgIChyID0gc3NoYnVmX3B1dF9j c3RyaW5nKG0sIHNzaC0+a2V4LT5zZXJ2ZXJfc2lnX2FsZ3MpKSAhPSAwIHx8Ci0tCSAgICAociA9 IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLAotLQkgICAgInB1YmxpY2tleS1ob3N0Ym91bmRAb3BlbnNz aC5jb20iKSkgIT0gMCB8fAotLQkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgIjAiKSkg IT0gMCB8fAotLQkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgInBpbmdAb3BlbnNzaC5j b20iKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgc3NoLT5rZXgt PnNlcnZlcl9zaWdfYWxncykpICE9IDApIHsKLSsJCWVycm9yX2ZyKHIsICJjb21wb3NlIik7Ci0r CQlyZXR1cm4gcjsKLSsJfQotKwlpZiAoaGF2ZV9rZXkpIHsKLSsJICAgIGlmICgociA9IHNzaGJ1 Zl9wdXRfY3N0cmluZyhtLCAicHVibGlja2V5LWhvc3Rib3VuZEBvcGVuc3NoLmNvbSIpKSAhPSAw IHx8Ci0rCSAgICAgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgIjAiKSkgIT0gMCkgewot KwkJICAgIGVycm9yX2ZyKHIsICJjb21wb3NlIik7Ci0rCQkgICAgcmV0dXJuIHI7Ci0rCQl9Ci0r CX0KLSsJaWYgKChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sICJwaW5nQG9wZW5zc2guY29tIikp ICE9IDAgfHwKLSAJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sICIwIikpICE9IDApIHsK LSAJCWVycm9yX2ZyKHIsICJjb21wb3NlIik7Ci0gCQlyZXR1cm4gcjsKLUBAIC03MzUsNiArNzU1 LDkgQEAga2V4X2ZyZWUoc3RydWN0IGtleCAqa2V4KQotIAlzc2hidWZfZnJlZShrZXgtPnNlcnZl cl92ZXJzaW9uKTsKLSAJc3NoYnVmX2ZyZWUoa2V4LT5jbGllbnRfcHViKTsKLSAJc3NoYnVmX2Zy ZWUoa2V4LT5zZXNzaW9uX2lkKTsKLSsjaWZkZWYgR1NTQVBJCi0rCWZyZWUoa2V4LT5nc3NfaG9z dCk7Ci0rI2VuZGlmIC8qIEdTU0FQSSAqLwotIAlzc2hidWZfZnJlZShrZXgtPmluaXRpYWxfc2ln KTsKLSAJc3Noa2V5X2ZyZWUoa2V4LT5pbml0aWFsX2hvc3RrZXkpOwotIAlmcmVlKGtleC0+ZmFp bGVkX2Nob2ljZSk7Ci1kaWZmIC0tZ2l0IGEva2V4LmggYi9rZXguaAotaW5kZXggNTViYWE2YTFl Li4yMDZjZTYwZWQgMTAwNjQ0Ci0tLS0gYS9rZXguaAotKysrIGIva2V4LmgKLUBAIC0yOSw2ICsy OSwxMCBAQAotICNpbmNsdWRlICJtYWMuaCIKLSAjaW5jbHVkZSAiY3J5cHRvX2FwaS5oIgotIAot KyNpZmRlZiBHU1NBUEkKLSsjIGluY2x1ZGUgInNzaC1nc3MuaCIgLyogR3NzY3R4dCAqLwotKyNl bmRpZgotKwotICNpZmRlZiBXSVRIX09QRU5TU0wKLSAjIGluY2x1ZGUgPG9wZW5zc2wvYm4uaD4K LSAjIGluY2x1ZGUgPG9wZW5zc2wvZGguaD4KLUBAIC0xMDMsNiArMTA3LDE1IEBAIGVudW0ga2V4 X2V4Y2hhbmdlIHsKLSAJS0VYX0MyNTUxOV9TSEEyNTYsCi0gCUtFWF9LRU1fU05UUlVQNzYxWDI1 NTE5X1NIQTUxMiwKLSAJS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTYsCi0rI2lmZGVmIEdT U0FQSQotKwlLRVhfR1NTX0dSUDFfU0hBMSwKLSsJS0VYX0dTU19HUlAxNF9TSEExLAotKwlLRVhf R1NTX0dSUDE0X1NIQTI1NiwKLSsJS0VYX0dTU19HUlAxNl9TSEE1MTIsCi0rCUtFWF9HU1NfR0VY X1NIQTEsCi0rCUtFWF9HU1NfTklTVFAyNTZfU0hBMjU2LAotKwlLRVhfR1NTX0MyNTUxOV9TSEEy NTYsCi0rI2VuZGlmCi0gCUtFWF9NQVgKLSB9OwotIAotQEAgLTE2OSw2ICsxODIsMTMgQEAgc3Ry dWN0IGtleCB7Ci0gCXVfaW50CWZsYWdzOwotIAlpbnQJaGFzaF9hbGc7Ci0gCWludAllY19uaWQ7 Ci0rI2lmZGVmIEdTU0FQSQotKwlHc3NjdHh0ICpnc3M7Ci0rCWludAlnc3NfZGVsZWdfY3JlZHM7 Ci0rCWludAlnc3NfdHJ1c3RfZG5zOwotKwljaGFyICAgICpnc3NfaG9zdDsKLSsJY2hhcgkqZ3Nz X2NsaWVudDsKLSsjZW5kaWYKLSAJY2hhcgkqZmFpbGVkX2Nob2ljZTsKLSAJaW50CSgqdmVyaWZ5 X2hvc3Rfa2V5KShzdHJ1Y3Qgc3Noa2V5ICosIHN0cnVjdCBzc2ggKik7Ci0gCXN0cnVjdCBzc2hr ZXkgKigqbG9hZF9ob3N0X3B1YmxpY19rZXkpKGludCwgaW50LCBzdHJ1Y3Qgc3NoICopOwotQEAg LTE5Niw4ICsyMTYsMTAgQEAgaW50CSBrZXhfbmlkX2Zyb21fbmFtZShjb25zdCBjaGFyICopOwot IGludAkga2V4X2lzX3BxX2Zyb21fbmFtZShjb25zdCBjaGFyICopOwotIGludAkga2V4X25hbWVz X3ZhbGlkKGNvbnN0IGNoYXIgKik7Ci0gY2hhcgkqa2V4X2FsZ19saXN0KGNoYXIpOwotK2NoYXIJ KmtleF9nc3NfYWxnX2xpc3QoY2hhcik7Ci0gY2hhcgkqa2V4X25hbWVzX2NhdChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7Ci0gaW50CSBrZXhfaGFzX2FueV9hbGcoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOwotK2ludAkga2V4X2dzc19uYW1lc192YWxpZChjb25zdCBjaGFyICopOwot IGludAkga2V4X2Fzc2VtYmxlX25hbWVzKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqKTsKLSB2b2lkCSBrZXhfcHJvcG9zYWxfcG9wdWxhdGVfZW50cmllcyhzdHJ1Y3Qgc3NoICos IGNoYXIgKnByb3BbUFJPUE9TQUxfTUFYXSwKLSAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotQEAgLTIzMSw2 ICsyNTMsMTIgQEAgaW50CSBrZXhnZXhfY2xpZW50KHN0cnVjdCBzc2ggKik7Ci0gaW50CSBrZXhn ZXhfc2VydmVyKHN0cnVjdCBzc2ggKik7Ci0gaW50CSBrZXhfZ2VuX2NsaWVudChzdHJ1Y3Qgc3No ICopOwotIGludAkga2V4X2dlbl9zZXJ2ZXIoc3RydWN0IHNzaCAqKTsKLSsjaWYgZGVmaW5lZChH U1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NMKQotK2ludAkga2V4Z3NzZ2V4X2NsaWVudChz dHJ1Y3Qgc3NoICopOwotK2ludAkga2V4Z3NzZ2V4X3NlcnZlcihzdHJ1Y3Qgc3NoICopOwotK2lu dAkga2V4Z3NzX2NsaWVudChzdHJ1Y3Qgc3NoICopOwotK2ludAkga2V4Z3NzX3NlcnZlcihzdHJ1 Y3Qgc3NoICopOwotKyNlbmRpZgotIAotIGludAkga2V4X2RoX2tleXBhaXIoc3RydWN0IGtleCAq KTsKLSBpbnQJIGtleF9kaF9lbmMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICos IHN0cnVjdCBzc2hidWYgKiosCi1AQCAtMjY5LDYgKzI5NywxMiBAQCBpbnQJIGtleGdleF9oYXNo KGludCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0gICAg IGNvbnN0IEJJR05VTSAqLCBjb25zdCB1X2NoYXIgKiwgc2l6ZV90LAotICAgICB1X2NoYXIgKiwg c2l6ZV90ICopOwotIAotK2ludAkga2V4X2dlbl9oYXNoKGludCBoYXNoX2FsZywgY29uc3Qgc3Ry dWN0IHNzaGJ1ZiAqY2xpZW50X3ZlcnNpb24sCi0rICAgIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNl cnZlcl92ZXJzaW9uLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfa2V4aW5pdCwKLSsgICAg Y29uc3Qgc3RydWN0IHNzaGJ1ZiAqc2VydmVyX2tleGluaXQsIGNvbnN0IHN0cnVjdCBzc2hidWYg KnNlcnZlcl9ob3N0X2tleV9ibG9iLAotKyAgICBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRf cHViLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfcHViLAotKyAgICBjb25zdCBzdHJ1Y3Qg c3NoYnVmICpzaGFyZWRfc2VjcmV0LCB1X2NoYXIgKmhhc2gsIHNpemVfdCAqaGFzaGxlbik7Ci0r Ci0gdm9pZAlrZXhjMjU1MTlfa2V5Z2VuKHVfY2hhciBrZXlbQ1VSVkUyNTUxOV9TSVpFXSwgdV9j aGFyIHB1YltDVVJWRTI1NTE5X1NJWkVdKQotIAlfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhf X21pbmJ5dGVzX18sIDEsIENVUlZFMjU1MTlfU0laRSkpKQotIAlfX2F0dHJpYnV0ZV9fKChfX2Jv dW5kZWRfXyhfX21pbmJ5dGVzX18sIDIsIENVUlZFMjU1MTlfU0laRSkpKTsKLWRpZmYgLS1naXQg YS9rZXhkaC5jIGIva2V4ZGguYwotaW5kZXggMTkxYmRjZWQwLi42ZDVhNzgxM2QgMTAwNjQ0Ci0t LS0gYS9rZXhkaC5jCi0rKysgYi9rZXhkaC5jCi1AQCAtNTAsMTMgKzUwLDIzIEBAIGtleF9kaF9r ZXlnZW4oc3RydWN0IGtleCAqa2V4KQotIHsKLSAJc3dpdGNoIChrZXgtPmtleF90eXBlKSB7Ci0g CWNhc2UgS0VYX0RIX0dSUDFfU0hBMToKLSsjaWZkZWYgR1NTQVBJCi0rCWNhc2UgS0VYX0dTU19H UlAxX1NIQTE6Ci0rI2VuZGlmCi0gCQlrZXgtPmRoID0gZGhfbmV3X2dyb3VwMSgpOwotIAkJYnJl YWs7Ci0gCWNhc2UgS0VYX0RIX0dSUDE0X1NIQTE6Ci0gCWNhc2UgS0VYX0RIX0dSUDE0X1NIQTI1 NjoKLSsjaWZkZWYgR1NTQVBJCi0rCWNhc2UgS0VYX0dTU19HUlAxNF9TSEExOgotKwljYXNlIEtF WF9HU1NfR1JQMTRfU0hBMjU2OgotKyNlbmRpZgotIAkJa2V4LT5kaCA9IGRoX25ld19ncm91cDE0 KCk7Ci0gCQlicmVhazsKLSAJY2FzZSBLRVhfREhfR1JQMTZfU0hBNTEyOgotKyNpZmRlZiBHU1NB UEkKLSsJY2FzZSBLRVhfR1NTX0dSUDE2X1NIQTUxMjoKLSsjZW5kaWYKLSAJCWtleC0+ZGggPSBk aF9uZXdfZ3JvdXAxNigpOwotIAkJYnJlYWs7Ci0gCWNhc2UgS0VYX0RIX0dSUDE4X1NIQTUxMjoK LWRpZmYgLS1naXQgYS9rZXhnZW4uYyBiL2tleGdlbi5jCi1pbmRleCA0OTRkNGIyMzMuLjU4ZWRj NzlhZCAxMDA2NDQKLS0tLSBhL2tleGdlbi5jCi0rKysgYi9rZXhnZW4uYwotQEAgLTQ0LDcgKzQ0 LDcgQEAKLSBzdGF0aWMgaW50IGlucHV0X2tleF9nZW5faW5pdChpbnQsIHVfaW50MzJfdCwgc3Ry dWN0IHNzaCAqKTsKLSBzdGF0aWMgaW50IGlucHV0X2tleF9nZW5fcmVwbHkoaW50IHR5cGUsIHVf aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCk7Ci0gCi0tc3RhdGljIGludAotK2ludAotIGtl eF9nZW5faGFzaCgKLSAgICAgaW50IGhhc2hfYWxnLAotICAgICBjb25zdCBzdHJ1Y3Qgc3NoYnVm ICpjbGllbnRfdmVyc2lvbiwKLWRpZmYgLS1jb2xvciAtcnVOcCBhL2tleGdzc2MuYyBiL2tleGdz c2MuYwotLS0tIGEva2V4Z3NzYy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw Ci0rKysgYi9rZXhnc3NjLmMJMjAyNi0wMy0xOCAxMDowMzoyMi42NTQ4NzMyNzcgKzAxMDAKLUBA IC0wLDAgKzEsNzA2IEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwOSBTaW1vbiBX aWxraW5zb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYEFTIElTJycgQU5EIEFO WSBFWFBSRVNTIE9SCi0rICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKyAqIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0r ICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULAotKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSsg KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkKLSsgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0rICogKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0rICog VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsKLSsjaWYgZGVmaW5l ZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NMKQotKwotKyNpbmNsdWRlICJpbmNsdWRl cy5oIgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+Ci0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKwotKyNpbmNsdWRlICJ4bWFsbG9jLmgi Ci0rI2luY2x1ZGUgInNzaGJ1Zi5oIgotKyNpbmNsdWRlICJzc2gyLmgiCi0rI2luY2x1ZGUgInNz aGtleS5oIgotKyNpbmNsdWRlICJjaXBoZXIuaCIKLSsjaW5jbHVkZSAia2V4LmgiCi0rI2luY2x1 ZGUgImxvZy5oIgotKyNpbmNsdWRlICJwYWNrZXQuaCIKLSsjaW5jbHVkZSAiZGguaCIKLSsjaW5j bHVkZSAiZGlnZXN0LmgiCi0rI2luY2x1ZGUgInNzaGVyci5oIgotKwotKyNpbmNsdWRlICJzc2gt Z3NzLmgiCi0rCi0rc3RhdGljIGludCBpbnB1dF9rZXhnc3NfaG9zdGtleShpbnQsIHVfaW50MzJf dCwgc3RydWN0IHNzaCAqKTsKLStzdGF0aWMgaW50IGlucHV0X2tleGdzc19jb250aW51ZShpbnQs IHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKLStzdGF0aWMgaW50IGlucHV0X2tleGdzc19jb21w bGV0ZShpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKLStzdGF0aWMgaW50IGlucHV0X2tl eGdzc19lcnJvcihpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKLStzdGF0aWMgaW50IGlu cHV0X2tleGdzc2dleF9ncm91cChpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKLStzdGF0 aWMgaW50IGlucHV0X2tleGdzc2dleF9jb250aW51ZShpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNz aCAqKTsKLStzdGF0aWMgaW50IGlucHV0X2tleGdzc2dleF9jb21wbGV0ZShpbnQsIHVfaW50MzJf dCwgc3RydWN0IHNzaCAqKTsKLSsKLStzdGF0aWMgaW50Ci0ra2V4Z3NzX2ZpbmFsKHN0cnVjdCBz c2ggKnNzaCkKLSt7Ci0rCXN0cnVjdCBrZXggKmtleCA9IHNzaC0+a2V4OwotKwlHc3NjdHh0ICpn c3MgPSBrZXgtPmdzczsKLSsJc3RydWN0IHNzaGJ1ZiAqZW1wdHkgPSBOVUxMOwotKwlzdHJ1Y3Qg c3NoYnVmICpzaGFyZWRfc2VjcmV0ID0gTlVMTDsKLSsJdV9jaGFyIGhhc2hbU1NIX0RJR0VTVF9N QVhfTEVOR1RIXTsKLSsJc2l6ZV90IGhhc2hsZW47Ci0rCWludCByOwotKwotKwkvKgotKwkgKiBX ZSBfbXVzdF8gaGF2ZSByZWNlaXZlZCBhIENPTVBMRVRFIG1lc3NhZ2UgaW4gcmVwbHkgZnJvbSB0 aGUKLSsJICogc2VydmVyLCB3aGljaCB3aWxsIGhhdmUgc2V0IHNlcnZlcl9ibG9iIGFuZCBtc2df dG9rCi0rCSAqLwotKwotKwkvKiBjb21wdXRlIHNoYXJlZCBzZWNyZXQgKi8KLSsJc3dpdGNoIChr ZXgtPmtleF90eXBlKSB7Ci0rCWNhc2UgS0VYX0dTU19HUlAxX1NIQTE6Ci0rCWNhc2UgS0VYX0dT U19HUlAxNF9TSEExOgotKwljYXNlIEtFWF9HU1NfR1JQMTRfU0hBMjU2OgotKwljYXNlIEtFWF9H U1NfR1JQMTZfU0hBNTEyOgotKwkJciA9IGtleF9kaF9kZWMoa2V4LCBnc3MtPnNlcnZlcl9ibG9i LCAmc2hhcmVkX3NlY3JldCk7Ci0rCQlicmVhazsKLSsJY2FzZSBLRVhfR1NTX0MyNTUxOV9TSEEy NTY6Ci0rCQlpZiAoc3NoYnVmX3B0cihnc3MtPnNlcnZlcl9ibG9iKVtzc2hidWZfbGVuKGdzcy0+ c2VydmVyX2Jsb2IpXSAmIDB4ODApCi0rCQkJZmF0YWwoIlRoZSByZWNlaXZlZCBrZXkgaGFzIE1T QiBvZiBsYXN0IG9jdGV0IHNldCEiKTsKLSsJCXIgPSBrZXhfYzI1NTE5X2RlYyhrZXgsIGdzcy0+ c2VydmVyX2Jsb2IsICZzaGFyZWRfc2VjcmV0KTsKLSsJCWJyZWFrOwotKwljYXNlIEtFWF9HU1Nf TklTVFAyNTZfU0hBMjU2OgotKwkJaWYgKHNzaGJ1Zl9sZW4oZ3NzLT5zZXJ2ZXJfYmxvYikgIT0g NjUpCi0rCQkJZmF0YWwoIlRoZSByZWNlaXZlZCBOSVNULVAyNTYga2V5IGRpZCBub3QgbWF0Y2gg IgotKwkJCSAgICAgICJleHBlY3RlZCBsZW5ndGggKGV4cGVjdGVkIDY1LCBnb3QgJXp1KSIsCi0r CQkJICAgICAgc3NoYnVmX2xlbihnc3MtPnNlcnZlcl9ibG9iKSk7Ci0rCi0rCQlpZiAoc3NoYnVm X3B0cihnc3MtPnNlcnZlcl9ibG9iKVswXSAhPSBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NF RCkKLSsJCQlmYXRhbCgiVGhlIHJlY2VpdmVkIE5JU1QtUDI1NiBrZXkgZG9lcyBub3QgaGF2ZSBm aXJzdCBvY3RldCAweDA0Iik7Ci0rCi0rCQlyID0ga2V4X2VjZGhfZGVjKGtleCwgZ3NzLT5zZXJ2 ZXJfYmxvYiwgJnNoYXJlZF9zZWNyZXQpOwotKwkJYnJlYWs7Ci0rCWRlZmF1bHQ6Ci0rCQlyID0g U1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwotKwkJYnJlYWs7Ci0rCX0KLSsJaWYgKHIgIT0gMCkg ewotKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZrZXgtPmdzcyk7Ci0rCQlnb3RvIG91dDsKLSsJ fQotKwotKwlpZiAoKGVtcHR5ID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKSB7Ci0rCQlzc2hfZ3Nz YXBpX2RlbGV0ZV9jdHgoJmtleC0+Z3NzKTsKLSsJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7Ci0r CQlnb3RvIG91dDsKLSsJfQotKwotKwloYXNobGVuID0gc2l6ZW9mKGhhc2gpOwotKwlyID0ga2V4 X2dlbl9oYXNoKGtleC0+aGFzaF9hbGcsIGtleC0+Y2xpZW50X3ZlcnNpb24sCi0rCQkJIGtleC0+ c2VydmVyX3ZlcnNpb24sIGtleC0+bXksIGtleC0+cGVlciwKLSsJCQkgKGdzcy0+c2VydmVyX2hv c3Rfa2V5X2Jsb2IgPyBnc3MtPnNlcnZlcl9ob3N0X2tleV9ibG9iIDogZW1wdHkpLAotKwkJCSBr ZXgtPmNsaWVudF9wdWIsIGdzcy0+c2VydmVyX2Jsb2IsIHNoYXJlZF9zZWNyZXQsCi0rCQkJIGhh c2gsICZoYXNobGVuKTsKLSsJc3NoYnVmX2ZyZWUoZW1wdHkpOwotKwlpZiAociAhPSAwKQotKwkJ ZmF0YWxfZigiVW5leHBlY3RlZCBLRVggdHlwZSAlZCIsIGtleC0+a2V4X3R5cGUpOwotKwotKwln c3MtPmJ1Zi52YWx1ZSA9IGhhc2g7Ci0rCWdzcy0+YnVmLmxlbmd0aCA9IGhhc2hsZW47Ci0rCi0r CS8qIFZlcmlmeSB0aGF0IHRoZSBoYXNoIG1hdGNoZXMgdGhlIE1JQyB3ZSBqdXN0IGdvdC4gKi8K LSsJaWYgKEdTU19FUlJPUihzc2hfZ3NzYXBpX2NoZWNrbWljKGdzcywgJmdzcy0+YnVmLCAmZ3Nz LT5tc2dfdG9rKSkpCi0rCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAiSGFzaCdzIE1JQyBk aWRuJ3QgdmVyaWZ5Iik7Ci0rCi0rCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgJmdz cy0+bXNnX3Rvayk7Ci0rCi0rCWlmIChrZXgtPmdzc19kZWxlZ19jcmVkcykKLSsJCXNzaF9nc3Nh cGlfY3JlZGVudGlhbHNfdXBkYXRlZChnc3MpOwotKwotKwlpZiAoZ3NzX2tleF9jb250ZXh0ID09 IE5VTEwpCi0rCQlnc3Nfa2V4X2NvbnRleHQgPSBnc3M7Ci0rCWVsc2UKLSsJCXNzaF9nc3NhcGlf ZGVsZXRlX2N0eCgma2V4LT5nc3MpOwotKwotKwlpZiAoKHIgPSBrZXhfZGVyaXZlX2tleXMoc3No LCBoYXNoLCBoYXNobGVuLCBzaGFyZWRfc2VjcmV0KSkgPT0gMCkKLSsJCXIgPSBrZXhfc2VuZF9u ZXdrZXlzKHNzaCk7Ci0rCi0rCWlmIChrZXgtPmdzcyAhPSBOVUxMKSB7Ci0rCQlzc2hidWZfZnJl ZShnc3MtPnNlcnZlcl9ob3N0X2tleV9ibG9iKTsKLSsJCWdzcy0+c2VydmVyX2hvc3Rfa2V5X2Js b2IgPSBOVUxMOwotKwkJc3NoYnVmX2ZyZWUoZ3NzLT5zZXJ2ZXJfYmxvYik7Ci0rCQlnc3MtPnNl cnZlcl9ibG9iID0gTlVMTDsKLSsJfQotK291dDoKLSsJZXhwbGljaXRfYnplcm8oa2V4LT5jMjU1 MTlfY2xpZW50X2tleSwgc2l6ZW9mKGtleC0+YzI1NTE5X2NsaWVudF9rZXkpKTsKLSsJZXhwbGlj aXRfYnplcm8oaGFzaCwgc2l6ZW9mKGhhc2gpKTsKLSsJc3NoYnVmX2ZyZWUoc2hhcmVkX3NlY3Jl dCk7Ci0rCXNzaGJ1Zl9mcmVlKGtleC0+Y2xpZW50X3B1Yik7Ci0rCWtleC0+Y2xpZW50X3B1YiA9 IE5VTEw7Ci0rCXJldHVybiByOwotK30KLSsKLStzdGF0aWMgaW50Ci0ra2V4Z3NzX2luaXRfY3R4 KHN0cnVjdCBzc2ggKnNzaCwKLSsJCWdzc19idWZmZXJfZGVzYyAqdG9rZW5fcHRyKQotK3sKLSsJ c3RydWN0IGtleCAqa2V4ID0gc3NoLT5rZXg7Ci0rCUdzc2N0eHQgKmdzcyA9IGtleC0+Z3NzOwot Kwlnc3NfYnVmZmVyX2Rlc2Mgc2VuZF90b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0rCU9NX3Vp bnQzMiByZXRfZmxhZ3M7Ci0rCWludCByOwotKwotKwlkZWJ1ZygiQ2FsbGluZyBnc3NfaW5pdF9z ZWNfY29udGV4dCIpOwotKwotKwlnc3MtPm1ham9yID0gc3NoX2dzc2FwaV9pbml0X2N0eChnc3Ms IGtleC0+Z3NzX2RlbGVnX2NyZWRzLAotKwkJCQkJIHRva2VuX3B0ciwgJnNlbmRfdG9rLCAmcmV0 X2ZsYWdzKTsKLSsKLSsJaWYgKEdTU19FUlJPUihnc3MtPm1ham9yKSkgewotKwkJLyogWFhYIFVz ZWxlc3MgY29kZTogTWlzc2luZyBzZW5kPyAqLwotKwkJaWYgKHNlbmRfdG9rLmxlbmd0aCAhPSAw KSB7Ci0rCQkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJ TlVFKSkgIT0gMCB8fAotKwkJCSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgc2VuZF90 b2sudmFsdWUsIHNlbmRfdG9rLmxlbmd0aCkpICE9IDApCi0rCQkJCWZhdGFsKCJzc2hwa3QgZmFp bGVkOiAlcyIsIHNzaF9lcnIocikpOwotKwkJfQotKwkJZmF0YWwoImdzc19pbml0X2NvbnRleHQg ZmFpbGVkIik7Ci0rCX0KLSsKLSsJLyogSWYgd2UndmUgZ290IGFuIG9sZCByZWNlaXZlIGJ1ZmZl ciBnZXQgcmlkIG9mIGl0ICovCi0rCWlmICh0b2tlbl9wdHIgIT0gR1NTX0NfTk9fQlVGRkVSKQot KwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCB0b2tlbl9wdHIpOwotKwotKwlpZiAo Z3NzLT5tYWpvciA9PSBHU1NfU19DT01QTEVURSkgewotKwkJLyogSWYgbXV0dWFsIHN0YXRlIGZs YWcgaXMgbm90IHRydWUsIGtleCBmYWlscyAqLwotKwkJaWYgKCEocmV0X2ZsYWdzICYgR1NTX0Nf TVVUVUFMX0ZMQUcpKQotKwkJCWZhdGFsKCJNdXR1YWwgYXV0aGVudGljYXRpb24gZmFpbGVkIik7 Ci0rCi0rCQkvKiBJZiBpbnRlZyBhdmFpbCBmbGFnIGlzIG5vdCB0cnVlIGtleCBmYWlscyAqLwot KwkJaWYgKCEocmV0X2ZsYWdzICYgR1NTX0NfSU5URUdfRkxBRykpCi0rCQkJZmF0YWwoIkludGVn cml0eSBjaGVjayBmYWlsZWQiKTsKLSsJfQotKwotKwkvKgotKwkgKiBJZiB3ZSBoYXZlIGRhdGEg dG8gc2VuZCwgdGhlbiB0aGUgbGFzdCBtZXNzYWdlIHRoYXQgd2UKLSsJICogcmVjZWl2ZWQgY2Fu bm90IGhhdmUgYmVlbiBhICdjb21wbGV0ZScuCi0rCSAqLwotKwlpZiAoc2VuZF90b2subGVuZ3Ro ICE9IDApIHsKLSsJCWlmIChnc3MtPmZpcnN0KSB7Ci0rCQkJaWYgKChyID0gc3NocGt0X3N0YXJ0 KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0lOSVQpKSAhPSAwIHx8Ci0rCQkJICAgIChyID0gc3NocGt0 X3B1dF9zdHJpbmcoc3NoLCBzZW5kX3Rvay52YWx1ZSwgc2VuZF90b2subGVuZ3RoKSkgIT0gMCB8 fAotKwkJCSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5nYihzc2gsIGtleC0+Y2xpZW50X3B1Yikp ICE9IDApCi0rCQkJCWZhdGFsKCJmYWlsZWQgdG8gY29uc3RydWN0IHBhY2tldDogJXMiLCBzc2hf ZXJyKHIpKTsKLSsJCQlnc3MtPmZpcnN0ID0gMDsKLSsJCX0gZWxzZSB7Ci0rCQkJaWYgKChyID0g c3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFKSkgIT0gMCB8fAotKwkJ CSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgc2VuZF90b2sudmFsdWUsIHNlbmRfdG9r Lmxlbmd0aCkpICE9IDApCi0rCQkJCWZhdGFsKCJmYWlsZWQgdG8gY29uc3RydWN0IHBhY2tldDog JXMiLCBzc2hfZXJyKHIpKTsKLSsJCX0KLSsJCWlmICgociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9 IDApCi0rCQkJZmF0YWwoImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiLCBzc2hfZXJyKHIpKTsK LSsJCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgJnNlbmRfdG9rKTsKLSsKLSsJCS8q IElmIHdlJ3ZlIHNlbnQgdGhlbSBkYXRhLCB0aGV5IHNob3VsZCByZXBseSAqLwotKwkJc3NoX2Rp c3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19IT1NUS0VZLCAmaW5wdXRfa2V4Z3NzX2hv c3RrZXkpOwotKwkJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5V RSwgJmlucHV0X2tleGdzc19jb250aW51ZSk7Ci0rCQlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NI Ml9NU0dfS0VYR1NTX0NPTVBMRVRFLCAmaW5wdXRfa2V4Z3NzX2NvbXBsZXRlKTsKLSsJCXNzaF9k aXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfRVJST1IsICZpbnB1dF9rZXhnc3NfZXJy b3IpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsJLyogTm8gZGF0YSwgYW5kIG5vdCBjb21wbGV0ZSAq LwotKwlpZiAoZ3NzLT5tYWpvciAhPSBHU1NfU19DT01QTEVURSkKLSsJCWZhdGFsKCJOb3QgY29t cGxldGUsIGFuZCBubyB0b2tlbiBvdXRwdXQiKTsKLSsKLSsJaWYgIChnc3MtPm1ham9yICYgR1NT X1NfQ09OVElOVUVfTkVFREVEKQotKwkJcmV0dXJuIGtleGdzc19pbml0X2N0eChzc2gsIHRva2Vu X3B0cik7Ci0rCi0rCXJldHVybiBrZXhnc3NfZmluYWwoc3NoKTsKLSt9Ci0rCi0raW50Ci0ra2V4 Z3NzX2NsaWVudChzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKwlzdHJ1Y3Qga2V4ICprZXggPSBzc2gt PmtleDsKLSsJaW50IHI7Ci0rCi0rCS8qIEluaXRpYWxpc2Ugb3VyIEdTU0FQSSB3b3JsZCAqLwot Kwlzc2hfZ3NzYXBpX2J1aWxkX2N0eCgma2V4LT5nc3MpOwotKwlpZiAoc3NoX2dzc2FwaV9pZF9r ZXgoa2V4LT5nc3MsIGtleC0+bmFtZSwga2V4LT5rZXhfdHlwZSkgPT0gR1NTX0NfTk9fT0lEKQot KwkJZmF0YWwoIkNvdWxkbid0IGlkZW50aWZ5IGhvc3QgZXhjaGFuZ2UiKTsKLSsKLSsJaWYgKHNz aF9nc3NhcGlfaW1wb3J0X25hbWUoa2V4LT5nc3MsIGtleC0+Z3NzX2hvc3QpKQotKwkJZmF0YWwo IkNvdWxkbid0IGltcG9ydCBob3N0bmFtZSIpOwotKwotKwlpZiAoa2V4LT5nc3NfY2xpZW50ICYm Ci0rCSAgICBzc2hfZ3NzYXBpX2NsaWVudF9pZGVudGl0eShrZXgtPmdzcywga2V4LT5nc3NfY2xp ZW50KSkKLSsJCWZhdGFsKCJDb3VsZG4ndCBhY3F1aXJlIGNsaWVudCBjcmVkZW50aWFscyIpOwot KwotKwkvKiBTdGVwIDEgKi8KLSsJc3dpdGNoIChrZXgtPmtleF90eXBlKSB7Ci0rCWNhc2UgS0VY X0dTU19HUlAxX1NIQTE6Ci0rCWNhc2UgS0VYX0dTU19HUlAxNF9TSEExOgotKwljYXNlIEtFWF9H U1NfR1JQMTRfU0hBMjU2OgotKwljYXNlIEtFWF9HU1NfR1JQMTZfU0hBNTEyOgotKwkJciA9IGtl eF9kaF9rZXlwYWlyKGtleCk7Ci0rCQlicmVhazsKLSsJY2FzZSBLRVhfR1NTX05JU1RQMjU2X1NI QTI1NjoKLSsJCXIgPSBrZXhfZWNkaF9rZXlwYWlyKGtleCk7Ci0rCQlicmVhazsKLSsJY2FzZSBL RVhfR1NTX0MyNTUxOV9TSEEyNTY6Ci0rCQlyID0ga2V4X2MyNTUxOV9rZXlwYWlyKGtleCk7Ci0r CQlicmVhazsKLSsJZGVmYXVsdDoKLSsJCWZhdGFsX2YoIlVuZXhwZWN0ZWQgS0VYIHR5cGUgJWQi LCBrZXgtPmtleF90eXBlKTsKLSsJfQotKwlpZiAociAhPSAwKSB7Ci0rCQlzc2hfZ3NzYXBpX2Rl bGV0ZV9jdHgoJmtleC0+Z3NzKTsKLSsJCXJldHVybiByOwotKwl9Ci0rCXJldHVybiBrZXhnc3Nf aW5pdF9jdHgoc3NoLCBHU1NfQ19OT19CVUZGRVIpOwotK30KLSsKLStzdGF0aWMgaW50Ci0raW5w dXRfa2V4Z3NzX2hvc3RrZXkoaW50IHR5cGUsCi0rCQkgICAgIHVfaW50MzJfdCBzZXEsCi0rCQkg ICAgIHN0cnVjdCBzc2ggKnNzaCkKLSt7Ci0rCUdzc2N0eHQgKmdzcyA9IHNzaC0+a2V4LT5nc3M7 Ci0rCXVfY2hhciAqdG1wID0gTlVMTDsKLSsJc2l6ZV90IHRtcF9sZW4gPSAwOwotKwlpbnQgcjsK LSsKLSsJZGVidWcoIlJlY2VpdmVkIEtFWEdTU19IT1NUS0VZIik7Ci0rCWlmIChnc3MtPnNlcnZl cl9ob3N0X2tleV9ibG9iKQotKwkJZmF0YWwoIlNlcnZlciBob3N0IGtleSByZWNlaXZlZCBtb3Jl IHRoYW4gb25jZSIpOwotKwlpZiAoKHIgPSBzc2hwa3RfZ2V0X3N0cmluZyhzc2gsICZ0bXAsICZ0 bXBfbGVuKSkgIT0gMCkKLSsJCWZhdGFsKCJGYWlsZWQgdG8gcmVhZCBzZXJ2ZXIgaG9zdCBrZXk6 ICVzIiwgc3NoX2VycihyKSk7Ci0rCWlmICgoZ3NzLT5zZXJ2ZXJfaG9zdF9rZXlfYmxvYiA9IHNz aGJ1Zl9mcm9tKHRtcCwgdG1wX2xlbikpID09IE5VTEwpCi0rCQlmYXRhbCgic3NoYnVmX2Zyb20g ZmFpbGVkIik7Ci0rCXJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW50Ci0raW5wdXRfa2V4Z3Nz X2NvbnRpbnVlKGludCB0eXBlLAotKwkJICAgICAgdV9pbnQzMl90IHNlcSwKLSsJCSAgICAgIHN0 cnVjdCBzc2ggKnNzaCkKLSt7Ci0rCUdzc2N0eHQgKmdzcyA9IHNzaC0+a2V4LT5nc3M7Ci0rCWdz c19idWZmZXJfZGVzYyByZWN2X3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJaW50IHI7Ci0r Ci0rCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfSE9TVEtFWSwgTlVMTCk7 Ci0rCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUsIE5VTEwp OwotKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRFLCBOVUxM KTsKLSsJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19FUlJPUiwgTlVMTCk7 Ci0rCi0rCWRlYnVnKCJSZWNlaXZlZCBHU1NBUElfQ09OVElOVUUiKTsKLSsJaWYgKGdzcy0+bWFq b3IgPT0gR1NTX1NfQ09NUExFVEUpCi0rCQlmYXRhbCgiR1NTQVBJIENvbnRpbnVlIHJlY2VpdmVk IGZyb20gc2VydmVyIHdoZW4gY29tcGxldGUiKTsKLSsJaWYgKChyID0gc3NoX2dzc2FwaV9zc2hw a3RfZ2V0X2J1ZmZlcl9kZXNjKHNzaCwgJnJlY3ZfdG9rKSkgIT0gMCB8fAotKwkgICAgKHIgPSBz c2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAwKQotKwkJZmF0YWwoIkZhaWxlZCB0byByZWFkIHRva2Vu OiAlcyIsIHNzaF9lcnIocikpOwotKwlpZiAgKCEoZ3NzLT5tYWpvciAmIEdTU19TX0NPTlRJTlVF X05FRURFRCkpCi0rCQlmYXRhbCgiRGlkbid0IHJlY2VpdmUgYSBTU0gyX01TR19LRVhHU1NfQ09N UExFVEUgd2hlbiBJIGV4cGVjdGVkIGl0Iik7Ci0rCXJldHVybiBrZXhnc3NfaW5pdF9jdHgoc3No LCAmcmVjdl90b2spOwotK30KLSsKLStzdGF0aWMgaW50Ci0raW5wdXRfa2V4Z3NzX2NvbXBsZXRl KGludCB0eXBlLAotKwkJICAgICAgdV9pbnQzMl90IHNlcSwKLSsJCSAgICAgIHN0cnVjdCBzc2gg KnNzaCkKLSt7Ci0rCUdzc2N0eHQgKmdzcyA9IHNzaC0+a2V4LT5nc3M7Ci0rCWdzc19idWZmZXJf ZGVzYyByZWN2X3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJdV9jaGFyIGM7Ci0rCWludCBy OwotKwotKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0hPU1RLRVksIE5V TEwpOwotKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFLCBO VUxMKTsKLSsJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT01QTEVURSwg TlVMTCk7Ci0rCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfRVJST1IsIE5V TEwpOwotKwotKwlkZWJ1ZygiUmVjZWl2ZWQgR1NTQVBJX0NPTVBMRVRFIik7Ci0rCWlmIChnc3Mt Pm1zZ190b2sudmFsdWUgIT0gTlVMTCkKLSsJICAgICAgICBmYXRhbCgiUmVjZWl2ZWQgR1NTQVBJ X0NPTVBMRVRFIHR3aWNlPyIpOwotKwlpZiAoKHIgPSBzc2hwa3RfZ2V0Yl9mcm9tcyhzc2gsICZn c3MtPnNlcnZlcl9ibG9iKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hfZ3NzYXBpX3NzaHBrdF9n ZXRfYnVmZmVyX2Rlc2Moc3NoLCAmZ3NzLT5tc2dfdG9rKSkgIT0gMCkKLSsJCWZhdGFsKCJGYWls ZWQgdG8gcmVhZCBtZXNzYWdlOiAlcyIsIHNzaF9lcnIocikpOwotKwotKwkvKiBJcyB0aGVyZSBh IHRva2VuIGluY2x1ZGVkPyAqLwotKwlpZiAoKHIgPSBzc2hwa3RfZ2V0X3U4KHNzaCwgJmMpKSAh PSAwKQotKwkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7Ci0rCWlmIChj KSB7Ci0rCQlpZiAoKHIgPSBzc2hfZ3NzYXBpX3NzaHBrdF9nZXRfYnVmZmVyX2Rlc2Moc3NoLCAm cmVjdl90b2spKSAhPSAwKQotKwkJCWZhdGFsKCJGYWlsZWQgdG8gcmVhZCB0b2tlbjogJXMiLCBz c2hfZXJyKHIpKTsKLSsJCS8qIElmIHdlJ3JlIGFscmVhZHkgY29tcGxldGUgLSBwcm90b2NvbCBl cnJvciAqLwotKwkJaWYgKGdzcy0+bWFqb3IgPT0gR1NTX1NfQ09NUExFVEUpCi0rCQkJc3NoX3Bh Y2tldF9kaXNjb25uZWN0KHNzaCwgIlByb3RvY29sIGVycm9yOiByZWNlaXZlZCB0b2tlbiB3aGVu IGNvbXBsZXRlIik7Ci0rCX0gZWxzZSB7Ci0rCQlpZiAoZ3NzLT5tYWpvciAhPSBHU1NfU19DT01Q TEVURSkKLSsJCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAiUHJvdG9jb2wgZXJyb3I6IGRp ZCBub3QgcmVjZWl2ZSBmaW5hbCB0b2tlbiIpOwotKwl9Ci0rCWlmICgociA9IHNzaHBrdF9nZXRf ZW5kKHNzaCkpICE9IDApCi0rCQlmYXRhbCgiRXhwZWN0aW5nIGVuZCBvZiBwYWNrZXQuIik7Ci0r Ci0rCWlmICAoZ3NzLT5tYWpvciAmIEdTU19TX0NPTlRJTlVFX05FRURFRCkKLSsJCXJldHVybiBr ZXhnc3NfaW5pdF9jdHgoc3NoLCAmcmVjdl90b2spOwotKwotKwlnc3NfcmVsZWFzZV9idWZmZXIo Jmdzcy0+bWlub3IsICZyZWN2X3Rvayk7Ci0rCXJldHVybiBrZXhnc3NfZmluYWwoc3NoKTsKLSt9 Ci0rCi0rc3RhdGljIGludAotK2lucHV0X2tleGdzc19lcnJvcihpbnQgdHlwZSwKLSsJCSAgIHVf aW50MzJfdCBzZXEsCi0rCQkgICBzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKwlHc3NjdHh0ICpnc3Mg PSBzc2gtPmtleC0+Z3NzOwotKwl1X2NoYXIgKm1zZzsKLSsJaW50IHI7Ci0rCi0rCWRlYnVnKCJS ZWNlaXZlZCBFcnJvciIpOwotKwlpZiAoKHIgPSBzc2hwa3RfZ2V0X3UzMihzc2gsICZnc3MtPm1h am9yKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfZ2V0X3UzMihzc2gsICZnc3MtPm1pbm9y KSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfZ2V0X3N0cmluZyhzc2gsICZtc2csIE5VTEwp KSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaHBrdF9nZXRfc3RyaW5nKHNzaCwgTlVMTCwgTlVMTCkp ICE9IDAgfHwgLyogbGFuZyB0YWcgKi8KLSsJICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkg IT0gMCkKLSsJCWZhdGFsKCJzc2hwa3RfZ2V0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKLSsJ ZmF0YWwoIkdTU0FQSSBFcnJvcjogXG4lLjQwMHMiLCBtc2cpOwotKwlyZXR1cm4gMDsKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0rLyoqKioqKioqKioqKioqKioqKioqIEtFWEdTU0dFWCAqKioqKioqKioqKioqKioqKioq KioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0raW50Ci0ra2V4Z3NzZ2V4X2NsaWVudChzdHJ1Y3Qgc3NoICpzc2gpCi0r ewotKwlzdHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKLSsJaW50IHI7Ci0rCi0rCS8qIEluaXRp YWxpc2Ugb3VyIEdTU0FQSSB3b3JsZCAqLwotKwlzc2hfZ3NzYXBpX2J1aWxkX2N0eCgma2V4LT5n c3MpOwotKwlpZiAoc3NoX2dzc2FwaV9pZF9rZXgoa2V4LT5nc3MsIGtleC0+bmFtZSwga2V4LT5r ZXhfdHlwZSkgPT0gR1NTX0NfTk9fT0lEKQotKwkJZmF0YWwoIkNvdWxkbid0IGlkZW50aWZ5IGhv c3QgZXhjaGFuZ2UiKTsKLSsKLSsJaWYgKHNzaF9nc3NhcGlfaW1wb3J0X25hbWUoa2V4LT5nc3Ms IGtleC0+Z3NzX2hvc3QpKQotKwkJZmF0YWwoIkNvdWxkbid0IGltcG9ydCBob3N0bmFtZSIpOwot KwotKwlpZiAoa2V4LT5nc3NfY2xpZW50ICYmCi0rCSAgICBzc2hfZ3NzYXBpX2NsaWVudF9pZGVu dGl0eShrZXgtPmdzcywga2V4LT5nc3NfY2xpZW50KSkKLSsJCWZhdGFsKCJDb3VsZG4ndCBhY3F1 aXJlIGNsaWVudCBjcmVkZW50aWFscyIpOwotKwotKwlkZWJ1ZygiRG9pbmcgZ3JvdXAgZXhjaGFu Z2UiKTsKLSsJa2V4LT5taW4gPSBESF9HUlBfTUlOOwotKwlrZXgtPm1heCA9IERIX0dSUF9NQVg7 Ci0rCWtleC0+bmJpdHMgPSBkaF9lc3RpbWF0ZShrZXgtPmRoX25lZWQgKiA4KTsKLSsKLSsJaWYg KChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0dST1VQUkVRKSkgIT0gMCB8 fAotKwkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gsIGtleC0+bWluKSkgIT0gMCB8fAotKwkg ICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gsIGtleC0+bmJpdHMpKSAhPSAwIHx8Ci0rCSAgICAo ciA9IHNzaHBrdF9wdXRfdTMyKHNzaCwga2V4LT5tYXgpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNz aHBrdF9zZW5kKHNzaCkpICE9IDApCi0rCQlmYXRhbCgiRmFpbGVkIHRvIGNvbnN0cnVjdCBhIHBh Y2tldDogJXMiLCBzc2hfZXJyKHIpKTsKLSsKLSsJZGVidWcoIldhaXQgU1NIMl9NU0dfS0VYR1NT X0dST1VQIik7Ci0rCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfR1JPVVAs ICZpbnB1dF9rZXhnc3NnZXhfZ3JvdXApOwotKwlyZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGlu dAotK2tleGdzc2dleF9maW5hbChzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKwlzdHJ1Y3Qga2V4ICpr ZXggPSBzc2gtPmtleDsKLSsJR3NzY3R4dCAqZ3NzID0ga2V4LT5nc3M7Ci0rCXN0cnVjdCBzc2hi dWYgKmJ1ZiA9IE5VTEw7Ci0rCXN0cnVjdCBzc2hidWYgKmVtcHR5ID0gTlVMTDsKLSsJc3RydWN0 IHNzaGJ1ZiAqc2hhcmVkX3NlY3JldCA9IE5VTEw7Ci0rCUJJR05VTSAqZGhfc2VydmVyX3B1YiA9 IE5VTEw7Ci0rCWNvbnN0IEJJR05VTSAqcHViX2tleSwgKmRoX3AsICpkaF9nOwotKwl1X2NoYXIg aGFzaFtTU0hfRElHRVNUX01BWF9MRU5HVEhdOwotKwlzaXplX3QgaGFzaGxlbjsKLSsJaW50IHIg PSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwotKwkvKgotKwkgKiBXZSBfbXVzdF8gaGF2ZSBy ZWNlaXZlZCBhIENPTVBMRVRFIG1lc3NhZ2UgaW4gcmVwbHkgZnJvbSB0aGUKLSsJICogc2VydmVy LCB3aGljaCB3aWxsIGhhdmUgc2V0IHNlcnZlcl9ibG9iIGFuZCBtc2dfdG9rCi0rCSAqLwotKwot KwkvKiA3LiBDIHZlcmlmaWVzIHRoYXQgdGhlIGtleSBRX1MgaXMgdmFsaWQgKi8KLSsJLyogOC4g QyBjb21wdXRlcyBzaGFyZWQgc2VjcmV0ICovCi0rCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9 PSBOVUxMIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9wdXRfc3RyaW5nYihidWYsIGdzcy0+c2VydmVy X2Jsb2IpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9nZXRfYmlnbnVtMihidWYsICZkaF9z ZXJ2ZXJfcHViKSkgIT0gMCkgewotKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZrZXgtPmdzcyk7 Ci0rCQlnb3RvIG91dDsKLSsJfQotKwlzc2hidWZfZnJlZShidWYpOwotKwlidWYgPSBOVUxMOwot KwotKwlpZiAoKHNoYXJlZF9zZWNyZXQgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKLSsJCXNz aF9nc3NhcGlfZGVsZXRlX2N0eCgma2V4LT5nc3MpOwotKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJ TDsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0rCWlmICgociA9IGtleF9kaF9jb21wdXRlX2tleShr ZXgsIGRoX3NlcnZlcl9wdWIsIHNoYXJlZF9zZWNyZXQpKSAhPSAwKSB7Ci0rCQlzc2hfZ3NzYXBp X2RlbGV0ZV9jdHgoJmtleC0+Z3NzKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0rCWlmICgoZW1w dHkgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKLSsJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgm a2V4LT5nc3MpOwotKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKLSsJCWdvdG8gb3V0OwotKwl9 Ci0rCi0rCURIX2dldDBfa2V5KGtleC0+ZGgsICZwdWJfa2V5LCBOVUxMKTsKLSsJREhfZ2V0MF9w cWcoa2V4LT5kaCwgJmRoX3AsIE5VTEwsICZkaF9nKTsKLSsJaGFzaGxlbiA9IHNpemVvZihoYXNo KTsKLSsJciA9IGtleGdleF9oYXNoKGtleC0+aGFzaF9hbGcsIGtleC0+Y2xpZW50X3ZlcnNpb24s Ci0rCQkJa2V4LT5zZXJ2ZXJfdmVyc2lvbiwga2V4LT5teSwga2V4LT5wZWVyLAotKwkJCShnc3Mt PnNlcnZlcl9ob3N0X2tleV9ibG9iID8gZ3NzLT5zZXJ2ZXJfaG9zdF9rZXlfYmxvYiA6IGVtcHR5 KSwKLSsJCQlrZXgtPm1pbiwga2V4LT5uYml0cywga2V4LT5tYXgsIGRoX3AsIGRoX2csIHB1Yl9r ZXksCi0rCQkJZGhfc2VydmVyX3B1Yiwgc3NoYnVmX3B0cihzaGFyZWRfc2VjcmV0KSwgc3NoYnVm X2xlbihzaGFyZWRfc2VjcmV0KSwKLSsJCQloYXNoLCAmaGFzaGxlbik7Ci0rCXNzaGJ1Zl9mcmVl KGVtcHR5KTsKLSsJaWYgKHIgIT0gMCkKLSsJCWZhdGFsKCJGYWlsZWQgdG8gY2FsY3VsYXRlIGhh c2g6ICVzIiwgc3NoX2VycihyKSk7Ci0rCi0rCWdzcy0+YnVmLnZhbHVlID0gaGFzaDsKLSsJZ3Nz LT5idWYubGVuZ3RoID0gaGFzaGxlbjsKLSsKLSsJLyogVmVyaWZ5IHRoYXQgdGhlIGhhc2ggbWF0 Y2hlcyB0aGUgTUlDIHdlIGp1c3QgZ290LiAqLwotKwlpZiAoR1NTX0VSUk9SKHNzaF9nc3NhcGlf Y2hlY2ttaWMoZ3NzLCAmZ3NzLT5idWYsICZnc3MtPm1zZ190b2spKSkKLSsJCXNzaF9wYWNrZXRf ZGlzY29ubmVjdChzc2gsICJIYXNoJ3MgTUlDIGRpZG4ndCB2ZXJpZnkiKTsKLSsKLSsJZ3NzX3Jl bGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCAmZ3NzLT5tc2dfdG9rKTsKLSsKLSsJaWYgKGtleC0+ Z3NzX2RlbGVnX2NyZWRzKQotKwkJc3NoX2dzc2FwaV9jcmVkZW50aWFsc191cGRhdGVkKGdzcyk7 Ci0rCi0rCWlmIChnc3Nfa2V4X2NvbnRleHQgPT0gTlVMTCkKLSsJCWdzc19rZXhfY29udGV4dCA9 IGdzczsKLSsJZWxzZQotKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZrZXgtPmdzcyk7Ci0rCi0r CS8qIEZpbmFsbHkgZGVyaXZlIHRoZSBrZXlzIGFuZCBzZW5kIHRoZW0gKi8KLSsJaWYgKChyID0g a2V4X2Rlcml2ZV9rZXlzKHNzaCwgaGFzaCwgaGFzaGxlbiwgc2hhcmVkX3NlY3JldCkpID09IDAp Ci0rCQlyID0ga2V4X3NlbmRfbmV3a2V5cyhzc2gpOwotKwotKwlpZiAoa2V4LT5nc3MgIT0gTlVM TCkgewotKwkJc3NoYnVmX2ZyZWUoZ3NzLT5zZXJ2ZXJfaG9zdF9rZXlfYmxvYik7Ci0rCQlnc3Mt PnNlcnZlcl9ob3N0X2tleV9ibG9iID0gTlVMTDsKLSsJCXNzaGJ1Zl9mcmVlKGdzcy0+c2VydmVy X2Jsb2IpOwotKwkJZ3NzLT5zZXJ2ZXJfYmxvYiA9IE5VTEw7Ci0rCX0KLStvdXQ6Ci0rCWV4cGxp Y2l0X2J6ZXJvKGhhc2gsIHNpemVvZihoYXNoKSk7Ci0rCURIX2ZyZWUoa2V4LT5kaCk7Ci0rCWtl eC0+ZGggPSBOVUxMOwotKwlCTl9jbGVhcl9mcmVlKGRoX3NlcnZlcl9wdWIpOwotKwlzc2hidWZf ZnJlZShzaGFyZWRfc2VjcmV0KTsKLSsJcmV0dXJuIHI7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStr ZXhnc3NnZXhfaW5pdF9jdHgoc3RydWN0IHNzaCAqc3NoLAotKwkJICAgZ3NzX2J1ZmZlcl9kZXNj ICp0b2tlbl9wdHIpCi0rewotKwlzdHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKLSsJR3NzY3R4 dCAqZ3NzID0ga2V4LT5nc3M7Ci0rCWNvbnN0IEJJR05VTSAqcHViX2tleTsKLSsJZ3NzX2J1ZmZl cl9kZXNjIHNlbmRfdG9rID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwlPTV91aW50MzIgcmV0X2Zs YWdzOwotKwlpbnQgcjsKLSsKLSsJLyogU3RlcCAyIC0gY2FsbCBHU1NfSW5pdF9zZWNfY29udGV4 dCgpICovCi0rCWRlYnVnKCJDYWxsaW5nIGdzc19pbml0X3NlY19jb250ZXh0Iik7Ci0rCi0rCWdz cy0+bWFqb3IgPSBzc2hfZ3NzYXBpX2luaXRfY3R4KGdzcywga2V4LT5nc3NfZGVsZWdfY3JlZHMs Ci0rCQkJCQkgdG9rZW5fcHRyLCAmc2VuZF90b2ssICZyZXRfZmxhZ3MpOwotKwotKwlpZiAoR1NT X0VSUk9SKGdzcy0+bWFqb3IpKSB7Ci0rCQkvKiBYWFggVXNlbGVzcyBjb2RlOiBNaXNzaW5nIHNl bmQ/ICovCi0rCQlpZiAoc2VuZF90b2subGVuZ3RoICE9IDApIHsKLSsJCQlpZiAoKHIgPSBzc2hw a3Rfc3RhcnQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUpKSAhPSAwIHx8Ci0rCQkJICAg IChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBzZW5kX3Rvay52YWx1ZSwgc2VuZF90b2subGVu Z3RoKSkgIT0gMCkKLSsJCQkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7 Ci0rCQl9Ci0rCQlmYXRhbCgiZ3NzX2luaXRfY29udGV4dCBmYWlsZWQiKTsKLSsJfQotKwotKwkv KiBJZiB3ZSd2ZSBnb3QgYW4gb2xkIHJlY2VpdmUgYnVmZmVyIGdldCByaWQgb2YgaXQgKi8KLSsJ aWYgKHRva2VuX3B0ciAhPSBHU1NfQ19OT19CVUZGRVIpCi0rCQlnc3NfcmVsZWFzZV9idWZmZXIo Jmdzcy0+bWlub3IsIHRva2VuX3B0cik7Ci0rCi0rCWlmIChnc3MtPm1ham9yID09IEdTU19TX0NP TVBMRVRFKSB7Ci0rCQkvKiBJZiBtdXR1YWwgc3RhdGUgZmxhZyBpcyBub3QgdHJ1ZSwga2V4IGZh aWxzICovCi0rCQlpZiAoIShyZXRfZmxhZ3MgJiBHU1NfQ19NVVRVQUxfRkxBRykpCi0rCQkJZmF0 YWwoIk11dHVhbCBhdXRoZW50aWNhdGlvbiBmYWlsZWQiKTsKLSsKLSsJCS8qIElmIGludGVnIGF2 YWlsIGZsYWcgaXMgbm90IHRydWUga2V4IGZhaWxzICovCi0rCQlpZiAoIShyZXRfZmxhZ3MgJiBH U1NfQ19JTlRFR19GTEFHKSkKLSsJCQlmYXRhbCgiSW50ZWdyaXR5IGNoZWNrIGZhaWxlZCIpOwot Kwl9Ci0rCi0rCS8qCi0rCSAqIElmIHdlIGhhdmUgZGF0YSB0byBzZW5kLCB0aGVuIHRoZSBsYXN0 IG1lc3NhZ2UgdGhhdCB3ZQotKwkgKiByZWNlaXZlZCBjYW5ub3QgaGF2ZSBiZWVuIGEgJ2NvbXBs ZXRlJy4KLSsJICovCi0rCWlmIChzZW5kX3Rvay5sZW5ndGggIT0gMCkgewotKwkJaWYgKGdzcy0+ Zmlyc3QpIHsKLSsJICAgICAgICAgICAgICAgIERIX2dldDBfa2V5KGtleC0+ZGgsICZwdWJfa2V5 LCBOVUxMKTsKLSsJCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19LRVhHU1Nf SU5JVCkpICE9IDAgfHwKLSsJCQkgICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIHNlbmRf dG9rLnZhbHVlLCBzZW5kX3Rvay5sZW5ndGgpKSAhPSAwIHx8Ci0rCQkJICAgIChyID0gc3NocGt0 X3B1dF9iaWdudW0yKHNzaCwgcHViX2tleSkpICE9IDApCi0rCQkJCWZhdGFsKCJmYWlsZWQgdG8g Y29uc3RydWN0IHBhY2tldDogJXMiLCBzc2hfZXJyKHIpKTsKLSsJCQlnc3MtPmZpcnN0ID0gMDsK LSsJCX0gZWxzZSB7Ci0rCQkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VY R1NTX0NPTlRJTlVFKSkgIT0gMCB8fAotKwkJCSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNz aCwgc2VuZF90b2sudmFsdWUsIHNlbmRfdG9rLmxlbmd0aCkpICE9IDApCi0rCQkJCWZhdGFsKCJm YWlsZWQgdG8gY29uc3RydWN0IHBhY2tldDogJXMiLCBzc2hfZXJyKHIpKTsKLSsJCX0KLSsJCWlm ICgociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDApCi0rCQkJZmF0YWwoImZhaWxlZCB0byBzZW5k IHBhY2tldDogJXMiLCBzc2hfZXJyKHIpKTsKLSsJCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5t aW5vciwgJnNlbmRfdG9rKTsKLSsKLSsJCS8qIElmIHdlJ3ZlIHNlbnQgdGhlbSBkYXRhLCB0aGV5 IHNob3VsZCByZXBseSAqLwotKwkJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdT U19IT1NUS0VZLCAmaW5wdXRfa2V4Z3NzX2hvc3RrZXkpOwotKwkJc3NoX2Rpc3BhdGNoX3NldChz c2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSwgJmlucHV0X2tleGdzc2dleF9jb250aW51ZSk7 Ci0rCQlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRFLCAmaW5w dXRfa2V4Z3NzZ2V4X2NvbXBsZXRlKTsKLSsJCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01T R19LRVhHU1NfRVJST1IsICZpbnB1dF9rZXhnc3NfZXJyb3IpOwotKwkJcmV0dXJuIDA7Ci0rCX0K LSsJLyogTm8gZGF0YSwgYW5kIG5vdCBjb21wbGV0ZSAqLwotKwlpZiAoZ3NzLT5tYWpvciAhPSBH U1NfU19DT01QTEVURSkKLSsJCWZhdGFsKCJOb3QgY29tcGxldGUsIGFuZCBubyB0b2tlbiBvdXRw dXQiKTsKLSsKLSsJaWYgIChnc3MtPm1ham9yICYgR1NTX1NfQ09OVElOVUVfTkVFREVEKQotKwkJ cmV0dXJuIGtleGdzc2dleF9pbml0X2N0eChzc2gsIHRva2VuX3B0cik7Ci0rCi0rCXJldHVybiBr ZXhnc3NnZXhfZmluYWwoc3NoKTsKLSt9Ci0rCi0rc3RhdGljIGludAotK2lucHV0X2tleGdzc2dl eF9ncm91cChpbnQgdHlwZSwKLSsJCSAgICAgIHVfaW50MzJfdCBzZXEsCi0rCQkgICAgICBzdHJ1 Y3Qgc3NoICpzc2gpCi0rewotKwlzdHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKLSsJQklHTlVN ICpwID0gTlVMTDsKLSsJQklHTlVNICpnID0gTlVMTDsKLSsJaW50IHI7Ci0rCi0rCWRlYnVnKCJS ZWNlaXZlZCBTU0gyX01TR19LRVhHU1NfR1JPVVAiKTsKLSsJc3NoX2Rpc3BhdGNoX3NldChzc2gs IFNTSDJfTVNHX0tFWEdTU19HUk9VUCwgTlVMTCk7Ci0rCi0rCWlmICgociA9IHNzaHBrdF9nZXRf YmlnbnVtMihzc2gsICZwKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfZ2V0X2JpZ251bTIo c3NoLCAmZykpICE9IDAgfHwKLSsJICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0gMCkK LSsJCWZhdGFsKCJzaHBrdF9nZXRfYmlnbnVtMiBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7Ci0r Ci0rCWlmIChCTl9udW1fYml0cyhwKSA8IGtleC0+bWluIHx8IEJOX251bV9iaXRzKHApID4ga2V4 LT5tYXgpCi0rCQlmYXRhbCgiR1NTR1JQX0dFWCBncm91cCBvdXQgb2YgcmFuZ2U6ICVkICE8ICVk ICE8ICVkIiwKLSsJCSAgICBrZXgtPm1pbiwgQk5fbnVtX2JpdHMocCksIGtleC0+bWF4KTsKLSsK LSsJaWYgKChrZXgtPmRoID0gZGhfbmV3X2dyb3VwKGcsIHApKSA9PSBOVUxMKQotKwkJZmF0YWwo ImRuX25ld19ncm91cCgpIGZhaWxlZCIpOwotKwlwID0gZyA9IE5VTEw7IC8qIGJlbG9uZyB0byBr ZXgtPmRoIG5vdyAqLwotKwotKwlpZiAoKHIgPSBkaF9nZW5fa2V5KGtleC0+ZGgsIGtleC0+d2Vf bmVlZCAqIDgpKSAhPSAwKSB7Ci0rCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmtleC0+Z3NzKTsK LSsJCURIX2ZyZWUoa2V4LT5kaCk7Ci0rCQlrZXgtPmRoID0gTlVMTDsKLSsJCXJldHVybiByOwot Kwl9Ci0rCi0rCXJldHVybiBrZXhnc3NnZXhfaW5pdF9jdHgoc3NoLCBHU1NfQ19OT19CVUZGRVIp OwotK30KLSsKLStzdGF0aWMgaW50Ci0raW5wdXRfa2V4Z3NzZ2V4X2NvbnRpbnVlKGludCB0eXBl LAotKwkJCSB1X2ludDMyX3Qgc2VxLAotKwkJCSBzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKwlHc3Nj dHh0ICpnc3MgPSBzc2gtPmtleC0+Z3NzOwotKwlnc3NfYnVmZmVyX2Rlc2MgcmVjdl90b2sgPSBH U1NfQ19FTVBUWV9CVUZGRVI7Ci0rCWludCByOwotKwotKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwg U1NIMl9NU0dfS0VYR1NTX0hPU1RLRVksIE5VTEwpOwotKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwg U1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFLCBOVUxMKTsKLSsJc3NoX2Rpc3BhdGNoX3NldChzc2gs IFNTSDJfTVNHX0tFWEdTU19DT01QTEVURSwgTlVMTCk7Ci0rCXNzaF9kaXNwYXRjaF9zZXQoc3No LCBTU0gyX01TR19LRVhHU1NfRVJST1IsIE5VTEwpOwotKwotKwlkZWJ1ZygiUmVjZWl2ZWQgR1NT QVBJX0NPTlRJTlVFIik7Ci0rCWlmIChnc3MtPm1ham9yID09IEdTU19TX0NPTVBMRVRFKQotKwkJ ZmF0YWwoIkdTU0FQSSBDb250aW51ZSByZWNlaXZlZCBmcm9tIHNlcnZlciB3aGVuIGNvbXBsZXRl Iik7Ci0rCWlmICgociA9IHNzaF9nc3NhcGlfc3NocGt0X2dldF9idWZmZXJfZGVzYyhzc2gsICZy ZWN2X3RvaykpICE9IDAgfHwKLSsJICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0gMCkK LSsJCWZhdGFsKCJGYWlsZWQgdG8gcmVhZCB0b2tlbjogJXMiLCBzc2hfZXJyKHIpKTsKLSsJaWYg ICghKGdzcy0+bWFqb3IgJiBHU1NfU19DT05USU5VRV9ORUVERUQpKQotKwkJZmF0YWwoIkRpZG4n dCByZWNlaXZlIGEgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRFIHdoZW4gSSBleHBlY3RlZCBpdCIp OwotKwlyZXR1cm4ga2V4Z3NzZ2V4X2luaXRfY3R4KHNzaCwgJnJlY3ZfdG9rKTsKLSt9Ci0rCi0r c3RhdGljIGludAotK2lucHV0X2tleGdzc2dleF9jb21wbGV0ZShpbnQgdHlwZSwKLSsJCSAgICAg IHVfaW50MzJfdCBzZXEsCi0rCQkgICAgICBzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKwlHc3NjdHh0 ICpnc3MgPSBzc2gtPmtleC0+Z3NzOwotKwlnc3NfYnVmZmVyX2Rlc2MgcmVjdl90b2sgPSBHU1Nf Q19FTVBUWV9CVUZGRVI7Ci0rCXVfY2hhciBjOwotKwlpbnQgcjsKLSsKLSsJc3NoX2Rpc3BhdGNo X3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19IT1NUS0VZLCBOVUxMKTsKLSsJc3NoX2Rpc3BhdGNo X3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSwgTlVMTCk7Ci0rCXNzaF9kaXNwYXRj aF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09NUExFVEUsIE5VTEwpOwotKwlzc2hfZGlzcGF0 Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0VSUk9SLCBOVUxMKTsKLSsKLSsJZGVidWcoIlJl Y2VpdmVkIEdTU0FQSV9DT01QTEVURSIpOwotKwlpZiAoZ3NzLT5tc2dfdG9rLnZhbHVlICE9IE5V TEwpCi0rCSAgICAgICAgZmF0YWwoIlJlY2VpdmVkIEdTU0FQSV9DT01QTEVURSB0d2ljZT8iKTsK LSsJaWYgKChyID0gc3NocGt0X2dldGJfZnJvbXMoc3NoLCAmZ3NzLT5zZXJ2ZXJfYmxvYikpICE9 IDAgfHwKLSsJICAgIChyID0gc3NoX2dzc2FwaV9zc2hwa3RfZ2V0X2J1ZmZlcl9kZXNjKHNzaCwg Jmdzcy0+bXNnX3RvaykpICE9IDApCi0rCQlmYXRhbCgiRmFpbGVkIHRvIHJlYWQgbWVzc2FnZTog JXMiLCBzc2hfZXJyKHIpKTsKLSsKLSsJLyogSXMgdGhlcmUgYSB0b2tlbiBpbmNsdWRlZD8gKi8K LSsJaWYgKChyID0gc3NocGt0X2dldF91OChzc2gsICZjKSkgIT0gMCkKLSsJCWZhdGFsKCJzc2hw a3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOwotKwlpZiAoYykgewotKwkJaWYgKChyID0gc3No X2dzc2FwaV9zc2hwa3RfZ2V0X2J1ZmZlcl9kZXNjKHNzaCwgJnJlY3ZfdG9rKSkgIT0gMCkKLSsJ CQlmYXRhbCgiRmFpbGVkIHRvIHJlYWQgdG9rZW46ICVzIiwgc3NoX2VycihyKSk7Ci0rCQkvKiBJ ZiB3ZSdyZSBhbHJlYWR5IGNvbXBsZXRlIC0gcHJvdG9jb2wgZXJyb3IgKi8KLSsJCWlmIChnc3Mt Pm1ham9yID09IEdTU19TX0NPTVBMRVRFKQotKwkJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gs ICJQcm90b2NvbCBlcnJvcjogcmVjZWl2ZWQgdG9rZW4gd2hlbiBjb21wbGV0ZSIpOwotKwl9IGVs c2UgewotKwkJaWYgKGdzcy0+bWFqb3IgIT0gR1NTX1NfQ09NUExFVEUpCi0rCQkJc3NoX3BhY2tl dF9kaXNjb25uZWN0KHNzaCwgIlByb3RvY29sIGVycm9yOiBkaWQgbm90IHJlY2VpdmUgZmluYWwg dG9rZW4iKTsKLSsJfQotKwlpZiAoKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAwKQotKwkJ ZmF0YWwoIkV4cGVjdGluZyBlbmQgb2YgcGFja2V0LiIpOwotKwotKwlpZiAgKGdzcy0+bWFqb3Ig JiBHU1NfU19DT05USU5VRV9ORUVERUQpCi0rCQlyZXR1cm4ga2V4Z3NzZ2V4X2luaXRfY3R4KHNz aCwgJnJlY3ZfdG9rKTsKLSsKLSsJZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCAmcmVj dl90b2spOwotKwlyZXR1cm4ga2V4Z3NzZ2V4X2ZpbmFsKHNzaCk7Ci0rfQotKwotKyNlbmRpZiAv KiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpICovCi1kaWZmIC0tY29s b3IgLXJ1TnAgYS9rZXhnc3NzLmMgYi9rZXhnc3NzLmMKLS0tLSBhL2tleGdzc3MuYwkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIGIva2V4Z3Nzcy5jCTIwMjYtMDMtMTgg MTA6MDc6NDcuNDkyMjQ2MjE2ICswMTAwCi1AQCAtMCwwICsxLDYwMyBAQAotKy8qCi0rICogQ29w eXJpZ2h0IChjKSAyMDAxLTIwMDkgU2ltb24gV2lsa2luc29uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK LSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgQVVUSE9SIGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotKyAqIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB TlRJRVMKLSsgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSsgKiBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0rICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0rICogVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VAotKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICovCi0rCi0rI2luY2x1ZGUg ImluY2x1ZGVzLmgiCi0rCi0rI2lmIGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BF TlNTTCkKLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSAieG1hbGxvYy5o IgotKyNpbmNsdWRlICJzc2hidWYuaCIKLSsjaW5jbHVkZSAic3NoMi5oIgotKyNpbmNsdWRlICJz c2hrZXkuaCIKLSsjaW5jbHVkZSAiY2lwaGVyLmgiCi0rI2luY2x1ZGUgImtleC5oIgotKyNpbmNs dWRlICJsb2cuaCIKLSsjaW5jbHVkZSAicGFja2V0LmgiCi0rI2luY2x1ZGUgImRoLmgiCi0rI2lu Y2x1ZGUgInNzaC1nc3MuaCIKLSsjaW5jbHVkZSAibW9uaXRvcl93cmFwLmgiCi0rI2luY2x1ZGUg Im1pc2MuaCIgICAgICAvKiBzZXJ2Y29uZi5oIG5lZWRzIG1pc2MuaCBmb3Igc3RydWN0IEZvcndh cmRPcHRpb25zICovCi0rI2luY2x1ZGUgInNlcnZjb25mLmgiCi0rI2luY2x1ZGUgInNzaC1nc3Mu aCIKLSsjaW5jbHVkZSAiZGlnZXN0LmgiCi0rI2luY2x1ZGUgInNzaGVyci5oIgotKwotK2V4dGVy biBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0rCi0rc3RhdGljIGludCBpbnB1dF9rZXhnc3NfaW5p dChpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKLStzdGF0aWMgaW50IGlucHV0X2tleGdz c19jb250aW51ZShpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKLStzdGF0aWMgaW50IGlu cHV0X2tleGdzc2dleF9ncm91cHJlcShpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKLStz dGF0aWMgaW50IGlucHV0X2tleGdzc2dleF9pbml0KGludCwgdV9pbnQzMl90LCBzdHJ1Y3Qgc3No ICopOwotK3N0YXRpYyBpbnQgaW5wdXRfa2V4Z3NzZ2V4X2NvbnRpbnVlKGludCwgdV9pbnQzMl90 LCBzdHJ1Y3Qgc3NoICopOwotKwotK2ludAotK2tleGdzc19zZXJ2ZXIoc3RydWN0IHNzaCAqc3No KQotK3sKLSsJc3RydWN0IGtleCAqa2V4ID0gc3NoLT5rZXg7Ci0rCWdzc19PSUQgb2lkOwotKwlj aGFyICptZWNoczsKLSsKLSsJLyogSW5pdGlhbGlzZSBHU1NBUEkgKi8KLSsKLSsJLyogSWYgd2Un cmUgcmVrZXlpbmcsIHByaXZzZXAgbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBwcml2YXRlIHN0cnVj dHVyZXMKLSsJICogaW4gdGhlIEdTU0FQSSBjb2RlIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlLiBU aGlzIGtsdWRnZXMgdGhlbSBiYWNrCi0rCSAqIGludG8gbGlmZQotKwkgKi8KLSsJaWYgKCFzc2hf Z3NzYXBpX29pZF90YWJsZV9vaygpKSB7Ci0rCQltZWNocyA9IHNzaF9nc3NhcGlfc2VydmVyX21l Y2hhbmlzbXMoKTsKLSsJCWZyZWUobWVjaHMpOwotKwl9Ci0rCi0rCWRlYnVnMl9mKCJJZGVudGlm eWluZyAlcyIsIGtleC0+bmFtZSk7Ci0rCW9pZCA9IHNzaF9nc3NhcGlfaWRfa2V4KE5VTEwsIGtl eC0+bmFtZSwga2V4LT5rZXhfdHlwZSk7Ci0rCWlmIChvaWQgPT0gR1NTX0NfTk9fT0lEKQotKwkJ ZmF0YWwoIlVua25vd24gZ3NzYXBpIG1lY2hhbmlzbSIpOwotKwotKwlkZWJ1ZzJfZigiQWNxdWly aW5nIGNyZWRlbnRpYWxzIik7Ci0rCi0rCWlmIChHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9zZXJ2 ZXJfY3R4KCZrZXgtPmdzcywgb2lkKSkpCi0rCQlmYXRhbCgiVW5hYmxlIHRvIGFjcXVpcmUgY3Jl ZGVudGlhbHMgZm9yIHRoZSBzZXJ2ZXIiKTsKLSsKLSsJc3NoX2dzc2FwaV9idWlsZF9jdHgoJmtl eC0+Z3NzKTsKLSsJaWYgKGtleC0+Z3NzID09IE5VTEwpCi0rCQlmYXRhbCgiVW5hYmxlIHRvIGFs bG9jYXRlIG1lbW9yeSBmb3IgZ3NzIGNvbnRleHQiKTsKLSsKLSsJc3NoX2Rpc3BhdGNoX3NldChz c2gsIFNTSDJfTVNHX0tFWEdTU19JTklULCAmaW5wdXRfa2V4Z3NzX2luaXQpOwotKwlzc2hfZGlz cGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFLCAmaW5wdXRfa2V4Z3NzX2Nv bnRpbnVlKTsKLSsJZGVidWcoIldhaXQgU1NIMl9NU0dfS0VYR1NTX0lOSVQiKTsKLSsJcmV0dXJu IDA7Ci0rfQotKwotK3N0YXRpYyBpbmxpbmUgdm9pZAotK2tleGdzc19hY2NlcHRfY3R4KHN0cnVj dCBzc2ggKnNzaCwKLSsJCSAgZ3NzX2J1ZmZlcl9kZXNjICpyZWN2X3RvaywKLSsJCSAgZ3NzX2J1 ZmZlcl9kZXNjICpzZW5kX3RvaywKLSsJCSAgT01fdWludDMyICpyZXRfZmxhZ3MpCi0rewotKwlH c3NjdHh0ICpnc3MgPSBzc2gtPmtleC0+Z3NzOwotKwlpbnQgcjsKLSsKLSsJZ3NzLT5tYWpvciA9 IG1tX3NzaF9nc3NhcGlfYWNjZXB0X2N0eChnc3MsIHJlY3ZfdG9rLCBzZW5kX3RvaywgcmV0X2Zs YWdzKTsKLSsJZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCByZWN2X3Rvayk7Ci0rCi0r CWlmIChnc3MtPm1ham9yICE9IEdTU19TX0NPTVBMRVRFICYmIHNlbmRfdG9rLT5sZW5ndGggPT0g MCkKLSsJCWZhdGFsKCJaZXJvIGxlbmd0aCB0b2tlbiBvdXRwdXQgd2hlbiBpbmNvbXBsZXRlIik7 Ci0rCi0rCWlmIChnc3MtPmJ1Zi52YWx1ZSA9PSBOVUxMKQotKwkJZmF0YWwoIk5vIGNsaWVudCBw dWJsaWMga2V5Iik7Ci0rCi0rCWlmIChnc3MtPm1ham9yICYgR1NTX1NfQ09OVElOVUVfTkVFREVE KSB7Ci0rCQlkZWJ1ZygiU2VuZGluZyBHU1NBUElfQ09OVElOVUUiKTsKLSsJCWlmICgociA9IHNz aHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSkpICE9IDAgfHwKLSsJCSAg ICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgc2VuZF90b2stPnZhbHVlLCBzZW5kX3Rvay0+ bGVuZ3RoKSkgIT0gMCB8fAotKwkJICAgIChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKLSsJ CQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKLSsJCWdzc19yZWxlYXNl X2J1ZmZlcigmZ3NzLT5taW5vciwgc2VuZF90b2spOwotKwl9Ci0rfQotKwotK3N0YXRpYyBpbmxp bmUgaW50Ci0ra2V4Z3NzX2ZpbmFsKHN0cnVjdCBzc2ggKnNzaCwKLSsJICAgICBnc3NfYnVmZmVy X2Rlc2MgKnNlbmRfdG9rLAotKwkgICAgIE9NX3VpbnQzMiAqcmV0X2ZsYWdzKQotK3sKLSsJc3Ry dWN0IGtleCAqa2V4ID0gc3NoLT5rZXg7Ci0rCUdzc2N0eHQgKmdzcyA9IGtleC0+Z3NzOwotKwln c3NfYnVmZmVyX2Rlc2MgbXNnX3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJdV9jaGFyIGhh c2hbU1NIX0RJR0VTVF9NQVhfTEVOR1RIXTsKLSsJc2l6ZV90IGhhc2hsZW47Ci0rCXN0cnVjdCBz c2hidWYgKnNoYXJlZF9zZWNyZXQgPSBOVUxMOwotKwlpbnQgcjsKLSsKLSsJc3NoX2Rpc3BhdGNo X3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19JTklULCBOVUxMKTsKLSsJc3NoX2Rpc3BhdGNoX3Nl dChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSwgTlVMTCk7Ci0rCi0rCWlmIChHU1NfRVJS T1IoZ3NzLT5tYWpvcikpIHsKLSsJCWlmIChzZW5kX3Rvay0+bGVuZ3RoID4gMCkgewotKwkJCWlm ICgociA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSkpICE9IDAg fHwKLSsJCQkgICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIHNlbmRfdG9rLT52YWx1ZSwg c2VuZF90b2stPmxlbmd0aCkpICE9IDAgfHwKLSsJCQkgICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gp KSAhPSAwKQotKwkJCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKLSsJ CX0KLSsJCWZhdGFsKCJhY2NlcHRfY3R4IGRpZWQiKTsKLSsJfQotKwotKwlpZiAoISgqcmV0X2Zs YWdzICYgR1NTX0NfTVVUVUFMX0ZMQUcpKQotKwkJZmF0YWwoIk11dHVhbCBBdXRoZW50aWNhdGlv biBmbGFnIHdhc24ndCBzZXQiKTsKLSsKLSsJaWYgKCEoKnJldF9mbGFncyAmIEdTU19DX0lOVEVH X0ZMQUcpKQotKwkJZmF0YWwoIkludGVncml0eSBmbGFnIHdhc24ndCBzZXQiKTsKLSsKLSsJaWYg KEdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX3NpZ24oZ3NzLCAmZ3NzLT5idWYsICZtc2dfdG9rKSkp Ci0rCQlmYXRhbCgiQ291bGRuJ3QgZ2V0IE1JQyIpOwotKwotKwlpZiAoKHIgPSBzc2hwa3Rfc3Rh cnQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09NUExFVEUpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNz aHBrdF9wdXRfc3RyaW5nYihzc2gsIGdzcy0+c2VydmVyX3B1YmtleSkpICE9IDAgfHwKLSsJICAg IChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBtc2dfdG9rLnZhbHVlLCBtc2dfdG9rLmxlbmd0 aCkpICE9IDApCi0rCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKLSsK LSsJaWYgKHNlbmRfdG9rLT5sZW5ndGggIT0gMCkgewotKwkJaWYgKChyID0gc3NocGt0X3B1dF91 OChzc2gsIDEpKSAhPSAwIHx8IC8qIHRydWUgKi8KLSsJCSAgICAociA9IHNzaHBrdF9wdXRfc3Ry aW5nKHNzaCwgc2VuZF90b2stPnZhbHVlLCBzZW5kX3Rvay0+bGVuZ3RoKSkgIT0gMCkKLSsJCQlm YXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKLSsJfSBlbHNlIHsKLSsJCWlm ICgociA9IHNzaHBrdF9wdXRfdTgoc3NoLCAwKSkgIT0gMCkgLyogZmFsc2UgKi8KLSsJCQlmYXRh bCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKLSsJfQotKwlpZiAoKHIgPSBzc2hw a3Rfc2VuZChzc2gpKSAhPSAwKQotKwkJZmF0YWwoInNzaHBrdF9zZW5kIGZhaWxlZDogJXMiLCBz c2hfZXJyKHIpKTsKLSsKLSsJZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCBzZW5kX3Rv ayk7Ci0rCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgJm1zZ190b2spOwotKwotKwlo YXNobGVuID0gZ3NzLT5oYXNobGVuOwotKwltZW1jcHkoaGFzaCwgZ3NzLT5oYXNoLCBoYXNobGVu KTsKLSsJZXhwbGljaXRfYnplcm8oZ3NzLT5oYXNoLCBzaXplb2YoZ3NzLT5oYXNoKSk7Ci0rCXNo YXJlZF9zZWNyZXQgPSBnc3MtPnNoYXJlZF9zZWNyZXQ7Ci0rCWdzcy0+c2hhcmVkX3NlY3JldCA9 IE5VTEw7Ci0rCi0rCWlmIChnc3Nfa2V4X2NvbnRleHQgPT0gTlVMTCkKLSsJCWdzc19rZXhfY29u dGV4dCA9IGdzczsKLSsJZWxzZQotKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZrZXgtPmdzcyk7 Ci0rCi0rCWlmICgociA9IGtleF9kZXJpdmVfa2V5cyhzc2gsIGhhc2gsIGhhc2hsZW4sIHNoYXJl ZF9zZWNyZXQpKSA9PSAwKQotKwkJciA9IGtleF9zZW5kX25ld2tleXMoc3NoKTsKLSsKLSsJLyog SWYgdGhpcyB3YXMgYSByZWtleSwgdGhlbiBzYXZlIG91dCBhbnkgZGVsZWdhdGVkIGNyZWRlbnRp YWxzIHdlCi0rCSAqIGp1c3QgZXhjaGFuZ2VkLiAgKi8KLSsJaWYgKG9wdGlvbnMuZ3NzX3N0b3Jl X3Jla2V5KQotKwkJc3NoX2dzc2FwaV9yZWtleV9jcmVkcygpOwotKwotKwlpZiAoa2V4LT5nc3Mg IT0gTlVMTCkgewotKwkJc3NoYnVmX2ZyZWUoZ3NzLT5zZXJ2ZXJfcHVia2V5KTsKLSsJCWdzcy0+ c2VydmVyX3B1YmtleSA9IE5VTEw7Ci0rCX0KLSsJZXhwbGljaXRfYnplcm8oaGFzaCwgc2l6ZW9m KGhhc2gpKTsKLSsJc3NoYnVmX2ZyZWUoc2hhcmVkX3NlY3JldCk7Ci0rCXJldHVybiByOwotK30K LSsKLStzdGF0aWMgaW50Ci0raW5wdXRfa2V4Z3NzX2luaXQoaW50IHR5cGUsCi0rCQkgIHVfaW50 MzJfdCBzZXEsCi0rCQkgIHN0cnVjdCBzc2ggKnNzaCkKLSt7Ci0rCXN0cnVjdCBrZXggKmtleCA9 IHNzaC0+a2V4OwotKwlHc3NjdHh0ICpnc3MgPSBrZXgtPmdzczsKLSsJc3RydWN0IHNzaGJ1ZiAq ZW1wdHk7Ci0rCXN0cnVjdCBzc2hidWYgKmNsaWVudF9wdWJrZXkgPSBOVUxMOwotKwlnc3NfYnVm ZmVyX2Rlc2MgcmVjdl90b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0rCWdzc19idWZmZXJfZGVz YyBzZW5kX3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJT01fdWludDMyIHJldF9mbGFncyA9 IDA7Ci0rCWludCByOwotKwotKwlkZWJ1ZygiU1NIMl9NU0dfS0VYR1NTX0lOSVQgcmVjZWl2ZWQi KTsKLSsJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19JTklULCBOVUxMKTsK LSsKLSsJaWYgKChyID0gc3NoX2dzc2FwaV9zc2hwa3RfZ2V0X2J1ZmZlcl9kZXNjKHNzaCwgJnJl Y3ZfdG9rKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfZ2V0Yl9mcm9tcyhzc2gsICZjbGll bnRfcHVia2V5KSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAw KQotKwkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7Ci0rCi0rCXN3aXRj aCAoa2V4LT5rZXhfdHlwZSkgewotKwljYXNlIEtFWF9HU1NfR1JQMV9TSEExOgotKwljYXNlIEtF WF9HU1NfR1JQMTRfU0hBMToKLSsJY2FzZSBLRVhfR1NTX0dSUDE0X1NIQTI1NjoKLSsJY2FzZSBL RVhfR1NTX0dSUDE2X1NIQTUxMjoKLSsJCXIgPSBrZXhfZGhfZW5jKGtleCwgY2xpZW50X3B1Ymtl eSwgJmdzcy0+c2VydmVyX3B1YmtleSwgJmdzcy0+c2hhcmVkX3NlY3JldCk7Ci0rCQlicmVhazsK LSsJY2FzZSBLRVhfR1NTX05JU1RQMjU2X1NIQTI1NjoKLSsJCXIgPSBrZXhfZWNkaF9lbmMoa2V4 LCBjbGllbnRfcHVia2V5LCAmZ3NzLT5zZXJ2ZXJfcHVia2V5LCAmZ3NzLT5zaGFyZWRfc2VjcmV0 KTsKLSsJCWJyZWFrOwotKwljYXNlIEtFWF9HU1NfQzI1NTE5X1NIQTI1NjoKLSsJCXIgPSBrZXhf YzI1NTE5X2VuYyhrZXgsIGNsaWVudF9wdWJrZXksICZnc3MtPnNlcnZlcl9wdWJrZXksICZnc3Mt PnNoYXJlZF9zZWNyZXQpOwotKwkJYnJlYWs7Ci0rCWRlZmF1bHQ6Ci0rCQlmYXRhbF9mKCJVbmV4 cGVjdGVkIEtFWCB0eXBlICVkIiwga2V4LT5rZXhfdHlwZSk7Ci0rCX0KLSsJaWYgKHIgIT0gMCkg ewotKwkJc3NoYnVmX2ZyZWUoY2xpZW50X3B1YmtleSk7Ci0rCQlnc3NfcmVsZWFzZV9idWZmZXIo Jmdzcy0+bWlub3IsICZyZWN2X3Rvayk7Ci0rCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmtleC0+ Z3NzKTsKLSsJCXJldHVybiByOwotKwl9Ci0rCi0rCS8qIFNlbmQgU1NIX01TR19LRVhHU1NfSE9T VEtFWSBoZXJlLCBpZiB3ZSB3YW50ICovCi0rCi0rCWlmICgoZW1wdHkgPSBzc2hidWZfbmV3KCkp ID09IE5VTEwpIHsKLSsJCXNzaGJ1Zl9mcmVlKGNsaWVudF9wdWJrZXkpOwotKwkJZ3NzX3JlbGVh c2VfYnVmZmVyKCZnc3MtPm1pbm9yLCAmcmVjdl90b2spOwotKwkJc3NoX2dzc2FwaV9kZWxldGVf Y3R4KCZrZXgtPmdzcyk7Ci0rCQlyZXR1cm4gU1NIX0VSUl9BTExPQ19GQUlMOwotKwl9Ci0rCi0r CS8qIENhbGN1bGF0ZSB0aGUgaGFzaCBlYXJseSBzbyB3ZSBjYW4gZnJlZSB0aGUKLSsJICogY2xp ZW50X3B1YmtleSwgd2hpY2ggaGFzIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50Ci0rCSAqIGJ1ZmZl ciBzdGF0ZS0+aW5jb21pbmdfcGFja2V0Ci0rCSAqLwotKwlnc3MtPmhhc2hsZW4gPSBzaXplb2Yo Z3NzLT5oYXNoKTsKLSsJciA9IGtleF9nZW5faGFzaChrZXgtPmhhc2hfYWxnLCBrZXgtPmNsaWVu dF92ZXJzaW9uLCBrZXgtPnNlcnZlcl92ZXJzaW9uLAotKwkJCSBrZXgtPnBlZXIsIGtleC0+bXks IGVtcHR5LCBjbGllbnRfcHVia2V5LCBnc3MtPnNlcnZlcl9wdWJrZXksCi0rCQkJIGdzcy0+c2hh cmVkX3NlY3JldCwgZ3NzLT5oYXNoLCAmZ3NzLT5oYXNobGVuKTsKLSsJc3NoYnVmX2ZyZWUoZW1w dHkpOwotKwlzc2hidWZfZnJlZShjbGllbnRfcHVia2V5KTsKLSsJaWYgKHIgIT0gMCkgewotKwkJ Z3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCAmcmVjdl90b2spOwotKwkJc3NoX2dzc2Fw aV9kZWxldGVfY3R4KCZrZXgtPmdzcyk7Ci0rCQlyZXR1cm4gcjsKLSsJfQotKwotKwlnc3MtPmJ1 Zi52YWx1ZSA9IGdzcy0+aGFzaDsKLSsJZ3NzLT5idWYubGVuZ3RoID0gZ3NzLT5oYXNobGVuOwot KwotKwlrZXhnc3NfYWNjZXB0X2N0eChzc2gsICZyZWN2X3RvaywgJnNlbmRfdG9rLCAmcmV0X2Zs YWdzKTsKLSsJaWYgKGdzcy0+bWFqb3IgJiBHU1NfU19DT05USU5VRV9ORUVERUQpCi0rCQlyZXR1 cm4gMDsKLSsKLSsJcmV0dXJuIGtleGdzc19maW5hbChzc2gsICZzZW5kX3RvaywgJnJldF9mbGFn cyk7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStpbnB1dF9rZXhnc3NfY29udGludWUoaW50IHR5cGUs Ci0rCQkgICAgICB1X2ludDMyX3Qgc2VxLAotKwkJICAgICAgc3RydWN0IHNzaCAqc3NoKQotK3sK LSsJR3NzY3R4dCAqZ3NzID0gc3NoLT5rZXgtPmdzczsKLSsJZ3NzX2J1ZmZlcl9kZXNjIHJlY3Zf dG9rID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwlnc3NfYnVmZmVyX2Rlc2Mgc2VuZF90b2sgPSBH U1NfQ19FTVBUWV9CVUZGRVI7Ci0rCU9NX3VpbnQzMiByZXRfZmxhZ3MgPSAwOwotKwlpbnQgcjsK LSsKLSsJaWYgKChyID0gc3NoX2dzc2FwaV9zc2hwa3RfZ2V0X2J1ZmZlcl9kZXNjKHNzaCwgJnJl Y3ZfdG9rKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAwKQot KwkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7Ci0rCi0rCWtleGdzc19h Y2NlcHRfY3R4KHNzaCwgJnJlY3ZfdG9rLCAmc2VuZF90b2ssICZyZXRfZmxhZ3MpOwotKwlpZiAo Z3NzLT5tYWpvciAmIEdTU19TX0NPTlRJTlVFX05FRURFRCkKLSsJCXJldHVybiAwOwotKwotKwly ZXR1cm4ga2V4Z3NzX2ZpbmFsKHNzaCwgJnNlbmRfdG9rLCAmcmV0X2ZsYWdzKTsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rLyoqKioqKioqKioqKioqKioqKioqIEtFWEdTU0dFWCAqKioqKioqKioqKioqKioqKioqKioq KiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0raW50Ci0ra2V4Z3NzZ2V4X3NlcnZlcihzdHJ1Y3Qgc3NoICpzc2gpCi0rewot KwlzdHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKLSsJZ3NzX09JRCBvaWQ7Ci0rCWNoYXIgKm1l Y2hzOwotKwotKwkvKiBJbml0aWFsaXNlIEdTU0FQSSAqLwotKwotKwkvKiBJZiB3ZSdyZSByZWtl eWluZywgcHJpdnNlcCBtZWFucyB0aGF0IHNvbWUgb2YgdGhlIHByaXZhdGUgc3RydWN0dXJlcwot KwkgKiBpbiB0aGUgR1NTQVBJIGNvZGUgYXJlIG5vIGxvbmdlciBhdmFpbGFibGUuIFRoaXMga2x1 ZGdlcyB0aGVtIGJhY2sKLSsJICogaW50byBsaWZlCi0rCSAqLwotKwlpZiAoIXNzaF9nc3NhcGlf b2lkX3RhYmxlX29rKCkpIHsKLSsJCW1lY2hzID0gc3NoX2dzc2FwaV9zZXJ2ZXJfbWVjaGFuaXNt cygpOwotKwkJZnJlZShtZWNocyk7Ci0rCX0KLSsKLSsJZGVidWcyX2YoIklkZW50aWZ5aW5nICVz Iiwga2V4LT5uYW1lKTsKLSsJb2lkID0gc3NoX2dzc2FwaV9pZF9rZXgoTlVMTCwga2V4LT5uYW1l LCBrZXgtPmtleF90eXBlKTsKLSsJaWYgKG9pZCA9PSBHU1NfQ19OT19PSUQpCi0rCQlmYXRhbCgi VW5rbm93biBnc3NhcGkgbWVjaGFuaXNtIik7Ci0rCi0rCWRlYnVnMl9mKCJBY3F1aXJpbmcgY3Jl ZGVudGlhbHMiKTsKLSsKLSsJaWYgKEdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX3NlcnZlcl9jdHgo JmtleC0+Z3NzLCBvaWQpKSkKLSsJCWZhdGFsKCJVbmFibGUgdG8gYWNxdWlyZSBjcmVkZW50aWFs cyBmb3IgdGhlIHNlcnZlciIpOwotKwotKwlzc2hfZ3NzYXBpX2J1aWxkX2N0eCgma2V4LT5nc3Mp OwotKwlpZiAoa2V4LT5nc3MgPT0gTlVMTCkKLSsJCWZhdGFsKCJVbmFibGUgdG8gYWxsb2NhdGUg bWVtb3J5IGZvciBnc3MgY29udGV4dCIpOwotKwotKwlkZWJ1ZygiRG9pbmcgZ3JvdXAgZXhjaGFu Z2UiKTsKLSsJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19HUk9VUFJFUSwg JmlucHV0X2tleGdzc2dleF9ncm91cHJlcSk7Ci0rCXJldHVybiAwOwotK30KLSsKLStzdGF0aWMg aW5saW5lIHZvaWQKLStrZXhnc3NnZXhfYWNjZXB0X2N0eChzdHJ1Y3Qgc3NoICpzc2gsCi0rCQkg ICAgIGdzc19idWZmZXJfZGVzYyAqcmVjdl90b2ssCi0rCQkgICAgIGdzc19idWZmZXJfZGVzYyAq c2VuZF90b2ssCi0rCQkgICAgIE9NX3VpbnQzMiAqcmV0X2ZsYWdzKQotK3sKLSsJR3NzY3R4dCAq Z3NzID0gc3NoLT5rZXgtPmdzczsKLSsJaW50IHI7Ci0rCi0rCWdzcy0+bWFqb3IgPSBtbV9zc2hf Z3NzYXBpX2FjY2VwdF9jdHgoZ3NzLCByZWN2X3Rvaywgc2VuZF90b2ssIHJldF9mbGFncyk7Ci0r CWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgcmVjdl90b2spOwotKwotKwlpZiAoZ3Nz LT5tYWpvciAhPSBHU1NfU19DT01QTEVURSAmJiBzZW5kX3Rvay0+bGVuZ3RoID09IDApCi0rCQlm YXRhbCgiWmVybyBsZW5ndGggdG9rZW4gb3V0cHV0IHdoZW4gaW5jb21wbGV0ZSIpOwotKwotKwlp ZiAoZ3NzLT5kaF9jbGllbnRfcHViID09IE5VTEwpCi0rCQlmYXRhbCgiTm8gY2xpZW50IHB1Ymxp YyBrZXkiKTsKLSsKLSsJaWYgKGdzcy0+bWFqb3IgJiBHU1NfU19DT05USU5VRV9ORUVERUQpIHsK LSsJCWRlYnVnKCJTZW5kaW5nIEdTU0FQSV9DT05USU5VRSIpOwotKwkJaWYgKChyID0gc3NocGt0 X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFKSkgIT0gMCB8fAotKwkJICAgIChy ID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBzZW5kX3Rvay0+dmFsdWUsIHNlbmRfdG9rLT5sZW5n dGgpKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKQotKwkJCWZh dGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOwotKwkJZ3NzX3JlbGVhc2VfYnVm ZmVyKCZnc3MtPm1pbm9yLCBzZW5kX3Rvayk7Ci0rCX0KLSt9Ci0rCi0rc3RhdGljIGlubGluZSBp bnQKLStrZXhnc3NnZXhfZmluYWwoc3RydWN0IHNzaCAqc3NoLAotKwkJZ3NzX2J1ZmZlcl9kZXNj ICpzZW5kX3RvaywKLSsJCU9NX3VpbnQzMiAqcmV0X2ZsYWdzKQotK3sKLSsJc3RydWN0IGtleCAq a2V4ID0gc3NoLT5rZXg7Ci0rCUdzc2N0eHQgKmdzcyA9IGtleC0+Z3NzOwotKwlnc3NfYnVmZmVy X2Rlc2MgbXNnX3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJdV9jaGFyIGhhc2hbU1NIX0RJ R0VTVF9NQVhfTEVOR1RIXTsKLSsJc2l6ZV90IGhhc2hsZW47Ci0rCWNvbnN0IEJJR05VTSAqcHVi X2tleSwgKmRoX3AsICpkaF9nOwotKwlzdHJ1Y3Qgc3NoYnVmICpzaGFyZWRfc2VjcmV0ID0gTlVM TDsKLSsJc3RydWN0IHNzaGJ1ZiAqZW1wdHkgPSBOVUxMOwotKwlpbnQgcjsKLSsKLSsJc3NoX2Rp c3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19JTklULCBOVUxMKTsKLSsJc3NoX2Rpc3Bh dGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSwgTlVMTCk7Ci0rCi0rCWlmIChH U1NfRVJST1IoZ3NzLT5tYWpvcikpIHsKLSsJCWlmIChzZW5kX3Rvay0+bGVuZ3RoID4gMCkgewot KwkJCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSkp ICE9IDAgfHwKLSsJCQkgICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIHNlbmRfdG9rLT52 YWx1ZSwgc2VuZF90b2stPmxlbmd0aCkpICE9IDAgfHwKLSsJCQkgICAgKHIgPSBzc2hwa3Rfc2Vu ZChzc2gpKSAhPSAwKQotKwkJCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIp KTsKLSsJCX0KLSsJCWZhdGFsKCJhY2NlcHRfY3R4IGRpZWQiKTsKLSsJfQotKwotKwlpZiAoISgq cmV0X2ZsYWdzICYgR1NTX0NfTVVUVUFMX0ZMQUcpKQotKwkJZmF0YWwoIk11dHVhbCBBdXRoZW50 aWNhdGlvbiBmbGFnIHdhc24ndCBzZXQiKTsKLSsKLSsJaWYgKCEoKnJldF9mbGFncyAmIEdTU19D X0lOVEVHX0ZMQUcpKQotKwkJZmF0YWwoIkludGVncml0eSBmbGFnIHdhc24ndCBzZXQiKTsKLSsK LSsJLyogY2FsY3VsYXRlIHNoYXJlZCBzZWNyZXQgKi8KLSsJc2hhcmVkX3NlY3JldCA9IHNzaGJ1 Zl9uZXcoKTsKLSsJaWYgKHNoYXJlZF9zZWNyZXQgPT0gTlVMTCkgewotKwkJc3NoX2dzc2FwaV9k ZWxldGVfY3R4KCZrZXgtPmdzcyk7Ci0rCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOwotKwkJZ290 byBvdXQ7Ci0rCX0KLSsJaWYgKChyID0ga2V4X2RoX2NvbXB1dGVfa2V5KGtleCwgZ3NzLT5kaF9j bGllbnRfcHViLCBzaGFyZWRfc2VjcmV0KSkgIT0gMCkgewotKwkJc3NoX2dzc2FwaV9kZWxldGVf Y3R4KCZrZXgtPmdzcyk7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwlpZiAoKGVtcHR5ID0gc3No YnVmX25ldygpKSA9PSBOVUxMKSB7Ci0rCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmtleC0+Z3Nz KTsKLSsJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwlE SF9nZXQwX2tleShrZXgtPmRoLCAmcHViX2tleSwgTlVMTCk7Ci0rCURIX2dldDBfcHFnKGtleC0+ ZGgsICZkaF9wLCBOVUxMLCAmZGhfZyk7Ci0rCWhhc2hsZW4gPSBzaXplb2YoaGFzaCk7Ci0rCXIg PSBrZXhnZXhfaGFzaChrZXgtPmhhc2hfYWxnLCBrZXgtPmNsaWVudF92ZXJzaW9uLCBrZXgtPnNl cnZlcl92ZXJzaW9uLAotKwkJCWtleC0+cGVlciwga2V4LT5teSwgZW1wdHksIGtleC0+bWluLCBr ZXgtPm5iaXRzLCBrZXgtPm1heCwgZGhfcCwgZGhfZywKLSsJCQlnc3MtPmRoX2NsaWVudF9wdWIs IHB1Yl9rZXksIHNzaGJ1Zl9wdHIoc2hhcmVkX3NlY3JldCksCi0rCQkJc3NoYnVmX2xlbihzaGFy ZWRfc2VjcmV0KSwgaGFzaCwgJmhhc2hsZW4pOwotKwlzc2hidWZfZnJlZShlbXB0eSk7Ci0rCWlm IChyICE9IDApCi0rCQlmYXRhbCgia2V4Z2V4X2hhc2ggZmFpbGVkOiAlcyIsIHNzaF9lcnIocikp OwotKwotKwlnc3MtPmJ1Zi52YWx1ZSA9IGhhc2g7Ci0rCWdzcy0+YnVmLmxlbmd0aCA9IGhhc2hs ZW47Ci0rCi0rCWlmIChHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9zaWduKGdzcywgJmdzcy0+YnVm LCAmbXNnX3RvaykpKQotKwkJZmF0YWwoIkNvdWxkbid0IGdldCBNSUMiKTsKLSsKLSsJaWYgKChy ID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRFKSkgIT0gMCB8fAot KwkgICAgKHIgPSBzc2hwa3RfcHV0X2JpZ251bTIoc3NoLCBwdWJfa2V5KSkgIT0gMCB8fAotKwkg ICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIG1zZ190b2sudmFsdWUsIG1zZ190b2subGVu Z3RoKSkgIT0gMCkKLSsJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOwot KwotKwlpZiAoc2VuZF90b2stPmxlbmd0aCAhPSAwKSB7Ci0rCQlpZiAoKHIgPSBzc2hwa3RfcHV0 X3U4KHNzaCwgMSkpICE9IDAgfHwgLyogdHJ1ZSAqLwotKwkJICAgIChyID0gc3NocGt0X3B1dF9z dHJpbmcoc3NoLCBzZW5kX3Rvay0+dmFsdWUsIHNlbmRfdG9rLT5sZW5ndGgpKSAhPSAwKQotKwkJ CWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOwotKwl9IGVsc2UgewotKwkJ aWYgKChyID0gc3NocGt0X3B1dF91OChzc2gsIDApKSAhPSAwKSAvKiBmYWxzZSAqLwotKwkJCWZh dGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOwotKwl9Ci0rCWlmICgociA9IHNz aHBrdF9zZW5kKHNzaCkpICE9IDApCi0rCQlmYXRhbCgic3NocGt0X3NlbmQgZmFpbGVkOiAlcyIs IHNzaF9lcnIocikpOwotKwotKwlnc3NfcmVsZWFzZV9idWZmZXIoJmdzcy0+bWlub3IsIHNlbmRf dG9rKTsKLSsJZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCAmbXNnX3Rvayk7Ci0rCi0r CWlmIChnc3Nfa2V4X2NvbnRleHQgPT0gTlVMTCkKLSsJCWdzc19rZXhfY29udGV4dCA9IGdzczsK LSsJZWxzZQotKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZrZXgtPmdzcyk7Ci0rCi0rCS8qIEZp bmFsbHkgZGVyaXZlIHRoZSBrZXlzIGFuZCBzZW5kIHRoZW0gKi8KLSsJaWYgKChyID0ga2V4X2Rl cml2ZV9rZXlzKHNzaCwgaGFzaCwgaGFzaGxlbiwgc2hhcmVkX3NlY3JldCkpID09IDApCi0rCQly ID0ga2V4X3NlbmRfbmV3a2V5cyhzc2gpOwotKwotKwkvKiBJZiB0aGlzIHdhcyBhIHJla2V5LCB0 aGVuIHNhdmUgb3V0IGFueSBkZWxlZ2F0ZWQgY3JlZGVudGlhbHMgd2UKLSsJICoganVzdCBleGNo YW5nZWQuICAqLwotKwlpZiAob3B0aW9ucy5nc3Nfc3RvcmVfcmVrZXkpCi0rCQlzc2hfZ3NzYXBp X3Jla2V5X2NyZWRzKCk7Ci0rCi0rCWlmIChrZXgtPmdzcyAhPSBOVUxMKQotKwkJQk5fY2xlYXJf ZnJlZShnc3MtPmRoX2NsaWVudF9wdWIpOwotKwotK291dDoKLSsJZXhwbGljaXRfYnplcm8oaGFz aCwgc2l6ZW9mKGhhc2gpKTsKLSsJREhfZnJlZShrZXgtPmRoKTsKLSsJa2V4LT5kaCA9IE5VTEw7 Ci0rCXNzaGJ1Zl9mcmVlKHNoYXJlZF9zZWNyZXQpOwotKwlyZXR1cm4gcjsKLSt9Ci0rCi0rc3Rh dGljIGludAotK2lucHV0X2tleGdzc2dleF9ncm91cHJlcShpbnQgdHlwZSwKLSsJCQkgdV9pbnQz Ml90IHNlcSwKLSsJCQkgc3RydWN0IHNzaCAqc3NoKQotK3sKLSsJc3RydWN0IGtleCAqa2V4ID0g c3NoLT5rZXg7Ci0rCWNvbnN0IEJJR05VTSAqZGhfcCwgKmRoX2c7Ci0rCWludCBtaW4gPSAtMSwg bWF4ID0gLTEsIG5iaXRzID0gLTE7Ci0rCWludCBjbWluID0gLTEsIGNtYXggPSAtMTsgLyogY2xp ZW50IHByb3Bvc2FsICovCi0rCWludCByOwotKwotKwkvKiA1LiBTIGdlbmVyYXRlcyBhbiBlcGhl bWVyYWwga2V5IHBhaXIgKGRvIHRoZSBhbGxvY2F0aW9ucyBlYXJseSkgKi8KLSsKLSsJZGVidWco IlNTSDJfTVNHX0tFWEdTU19HUk9VUFJFUSByZWNlaXZlZCIpOwotKwlzc2hfZGlzcGF0Y2hfc2V0 KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0dST1VQUkVRLCBOVUxMKTsKLSsKLSsJLyogc3RvcmUgY2xp ZW50IHByb3Bvc2FsIHRvIHByb3ZpZGUgdmFsaWQgc2lnbmF0dXJlICovCi0rCWlmICgociA9IHNz aHBrdF9nZXRfdTMyKHNzaCwgJmNtaW4pKSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaHBrdF9nZXRf dTMyKHNzaCwgJm5iaXRzKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfZ2V0X3UzMihzc2gs ICZjbWF4KSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAwKQot KwkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7Ci0rCi0rCWtleC0+bmJp dHMgPSBuYml0czsKLSsJa2V4LT5taW4gPSBjbWluOwotKwlrZXgtPm1heCA9IGNtYXg7Ci0rCW1p biA9IE1BWChESF9HUlBfTUlOLCBjbWluKTsKLSsJbWF4ID0gTUlOKERIX0dSUF9NQVgsIGNtYXgp OwotKwluYml0cyA9IE1BWElNVU0oREhfR1JQX01JTiwgbmJpdHMpOwotKwluYml0cyA9IE1JTklN VU0oREhfR1JQX01BWCwgbmJpdHMpOwotKwotKwlpZiAobWF4IDwgbWluIHx8IG5iaXRzIDwgbWlu IHx8IG1heCA8IG5iaXRzKQotKwkJZmF0YWwoIkdTU19HRVgsIGJhZCBwYXJhbWV0ZXJzOiAlZCAh PCAlZCAhPCAlZCIsIG1pbiwgbmJpdHMsIG1heCk7Ci0rCi0rCWtleC0+ZGggPSBtbV9jaG9vc2Vf ZGgobWluLCBuYml0cywgbWF4KTsKLSsJaWYgKGtleC0+ZGggPT0gTlVMTCkKLSsJCXNzaF9wYWNr ZXRfZGlzY29ubmVjdChzc2gsICJQcm90b2NvbCBlcnJvcjogbm8gbWF0Y2hpbmcgZ3JvdXAgZm91 bmQiKTsKLSsKLSsJREhfZ2V0MF9wcWcoa2V4LT5kaCwgJmRoX3AsIE5VTEwsICZkaF9nKTsKLSsJ aWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0dST1VQKSkgIT0gMCB8 fAotKwkgICAgKHIgPSBzc2hwa3RfcHV0X2JpZ251bTIoc3NoLCBkaF9wKSkgIT0gMCB8fAotKwkg ICAgKHIgPSBzc2hwa3RfcHV0X2JpZ251bTIoc3NoLCBkaF9nKSkgIT0gMCB8fAotKwkgICAgKHIg PSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKQotKwkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwg c3NoX2VycihyKSk7Ci0rCi0rCWlmICgociA9IHNzaF9wYWNrZXRfd3JpdGVfd2FpdChzc2gpKSAh PSAwKQotKwkJZmF0YWwoInNzaF9wYWNrZXRfd3JpdGVfd2FpdDogJXMiLCBzc2hfZXJyKHIpKTsK LSsKLSsJLyogQ29tcHV0ZSBvdXIgZXhjaGFuZ2UgdmFsdWUgaW4gcGFyYWxsZWwgd2l0aCB0aGUg Y2xpZW50ICovCi0rCWlmICgociA9IGRoX2dlbl9rZXkoa2V4LT5kaCwga2V4LT53ZV9uZWVkICog OCkpICE9IDApIHsKLSsJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgma2V4LT5nc3MpOwotKwkJREhf ZnJlZShrZXgtPmRoKTsKLSsJCWtleC0+ZGggPSBOVUxMOwotKwkJcmV0dXJuIHI7Ci0rCX0KLSsK LSsJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19JTklULCAmaW5wdXRfa2V4 Z3NzZ2V4X2luaXQpOwotKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NP TlRJTlVFLCAmaW5wdXRfa2V4Z3NzZ2V4X2NvbnRpbnVlKTsKLSsJZGVidWcoIldhaXQgU1NIMl9N U0dfS0VYR1NTX0lOSVQiKTsKLSsJcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStpbnB1 dF9rZXhnc3NnZXhfaW5pdChpbnQgdHlwZSwKLSsJCSAgICAgdV9pbnQzMl90IHNlcSwKLSsJCSAg ICAgc3RydWN0IHNzaCAqc3NoKQotK3sKLSsJR3NzY3R4dCAqZ3NzID0gc3NoLT5rZXgtPmdzczsK LSsJZ3NzX2J1ZmZlcl9kZXNjIHJlY3ZfdG9rID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwlnc3Nf YnVmZmVyX2Rlc2Mgc2VuZF90b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0rCU9NX3VpbnQzMiBy ZXRfZmxhZ3MgPSAwOwotKwlpbnQgcjsKLSsKLSsJZGVidWcoIlNTSDJfTVNHX0tFWEdTU19JTklU IHJlY2VpdmVkIik7Ci0rCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfSU5J VCwgTlVMTCk7Ci0rCi0rCWlmICgociA9IHNzaF9nc3NhcGlfc3NocGt0X2dldF9idWZmZXJfZGVz Yyhzc2gsICZyZWN2X3RvaykpICE9IDAgfHwKLSsJICAgIChyID0gc3NocGt0X2dldF9iaWdudW0y KHNzaCwgJmdzcy0+ZGhfY2xpZW50X3B1YikpICE9IDAgfHwKLSsJICAgIChyID0gc3NocGt0X2dl dF9lbmQoc3NoKSkgIT0gMCkKLSsJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIo cikpOwotKwotKwkvKiBTZW5kIFNTSF9NU0dfS0VYR1NTX0hPU1RLRVkgaGVyZSwgaWYgd2Ugd2Fu dCAqLwotKwotKwlrZXhnc3NnZXhfYWNjZXB0X2N0eChzc2gsICZyZWN2X3RvaywgJnNlbmRfdG9r LCAmcmV0X2ZsYWdzKTsKLSsJaWYgKGdzcy0+bWFqb3IgJiBHU1NfU19DT05USU5VRV9ORUVERUQp Ci0rCQlyZXR1cm4gMDsKLSsKLSsJcmV0dXJuIGtleGdzc2dleF9maW5hbChzc2gsICZzZW5kX3Rv aywgJnJldF9mbGFncyk7Ci0rfQotKwotK3N0YXRpYyBpbnQKLStpbnB1dF9rZXhnc3NnZXhfY29u dGludWUoaW50IHR5cGUsCi0rCQkJIHVfaW50MzJfdCBzZXEsCi0rCQkJIHN0cnVjdCBzc2ggKnNz aCkKLSt7Ci0rCUdzc2N0eHQgKmdzcyA9IHNzaC0+a2V4LT5nc3M7Ci0rCWdzc19idWZmZXJfZGVz YyByZWN2X3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJZ3NzX2J1ZmZlcl9kZXNjIHNlbmRf dG9rID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwlPTV91aW50MzIgcmV0X2ZsYWdzID0gMDsKLSsJ aW50IHI7Ci0rCi0rCWlmICgociA9IHNzaF9nc3NhcGlfc3NocGt0X2dldF9idWZmZXJfZGVzYyhz c2gsICZyZWN2X3RvaykpICE9IDAgfHwKLSsJICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkg IT0gMCkKLSsJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOwotKwotKwlr ZXhnc3NnZXhfYWNjZXB0X2N0eChzc2gsICZyZWN2X3RvaywgJnNlbmRfdG9rLCAmcmV0X2ZsYWdz KTsKLSsJaWYgKGdzcy0+bWFqb3IgJiBHU1NfU19DT05USU5VRV9ORUVERUQpCi0rCQlyZXR1cm4g MDsKLSsKLSsJcmV0dXJuIGtleGdzc2dleF9maW5hbChzc2gsICZzZW5kX3RvaywgJnJldF9mbGFn cyk7Ci0rfQotKwotKyNlbmRpZiAvKiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09Q RU5TU0wpICovCi1kaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCi1pbmRleCA4NWRj MWIxYjcuLmQ0NjNkNmE5YyAxMDA2NDQKLS0tLSBhL21vbml0b3IuYwotKysrIGIvbW9uaXRvci5j Ci1AQCAtMTM3LDYgKzEzNyw4IEBAIGludCBtbV9hbnN3ZXJfZ3NzX3NldHVwX2N0eChzdHJ1Y3Qg c3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKLSBpbnQgbW1fYW5zd2VyX2dzc19hY2NlcHRf Y3R4KHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotIGludCBtbV9hbnN3ZXJf Z3NzX3VzZXJvayhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKLSBpbnQgbW1f YW5zd2VyX2dzc19jaGVja21pYyhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsK LStpbnQgbW1fYW5zd2VyX2dzc19zaWduKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVm ICopOwotK2ludCBtbV9hbnN3ZXJfZ3NzX3VwZGF0ZWNyZWRzKHN0cnVjdCBzc2ggKiwgaW50LCBz dHJ1Y3Qgc3NoYnVmICopOwotICNlbmRpZgotIAotICNpZmRlZiBTU0hfQVVESVRfRVZFTlRTCi1A QCAtMjE0LDExICsyMTYsMTggQEAgc3RydWN0IG1vbl90YWJsZSBtb25fZGlzcGF0Y2hfcHJvdG8y MFtdID0gewotICAgICB7TU9OSVRPUl9SRVFfR1NTU1RFUCwgMCwgbW1fYW5zd2VyX2dzc19hY2Nl cHRfY3R4fSwKLSAgICAge01PTklUT1JfUkVRX0dTU1VTRVJPSywgTU9OX09OQ0V8TU9OX0FVVEhE RUNJREUsIG1tX2Fuc3dlcl9nc3NfdXNlcm9rfSwKLSAgICAge01PTklUT1JfUkVRX0dTU0NIRUNL TUlDLCBNT05fT05DRSwgbW1fYW5zd2VyX2dzc19jaGVja21pY30sCi0rICAgIHtNT05JVE9SX1JF UV9HU1NTSUdOLCBNT05fT05DRSwgbW1fYW5zd2VyX2dzc19zaWdufSwKLSAjZW5kaWYKLSAgICAg ezAsIDAsIE5VTEx9Ci0gfTsKLSAKLSBzdHJ1Y3QgbW9uX3RhYmxlIG1vbl9kaXNwYXRjaF9wb3N0 YXV0aDIwW10gPSB7Ci0rI2lmZGVmIEdTU0FQSQotKyAgICB7TU9OSVRPUl9SRVFfR1NTU0VUVVAs IDAsIG1tX2Fuc3dlcl9nc3Nfc2V0dXBfY3R4fSwKLSsgICAge01PTklUT1JfUkVRX0dTU1NURVAs IDAsIG1tX2Fuc3dlcl9nc3NfYWNjZXB0X2N0eH0sCi0rICAgIHtNT05JVE9SX1JFUV9HU1NTSUdO LCAwLCBtbV9hbnN3ZXJfZ3NzX3NpZ259LAotKyAgICB7TU9OSVRPUl9SRVFfR1NTVVBDUkVEUywg MCwgbW1fYW5zd2VyX2dzc191cGRhdGVjcmVkc30sCi0rI2VuZGlmCi0gICAgIHtNT05JVE9SX1JF UV9TVEFURSwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zdGF0ZX0sCi0gI2lmZGVmIFdJVEhfT1BFTlNT TAotICAgICB7TU9OSVRPUl9SRVFfTU9EVUxJLCAwLCBtbV9hbnN3ZXJfbW9kdWxpfSwKLUBAIC0y ODksNiArMjk4LDEwIEBAIG1vbml0b3JfY2hpbGRfcHJlYXV0aChzdHJ1Y3Qgc3NoICpzc2gsIHN0 cnVjdCBtb25pdG9yICpwbW9uaXRvcikKLSAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBN T05JVE9SX1JFUV9TVEFURSwgMSk7Ci0gCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9O SVRPUl9SRVFfTU9EVUxJLCAxKTsKLSAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05J VE9SX1JFUV9TSUdOLCAxKTsKLSsjaWZkZWYgR1NTQVBJCi0rCS8qIGFuZCBmb3IgdGhlIEdTU0FQ SSBrZXkgZXhjaGFuZ2UgKi8KLSsJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9S X1JFUV9HU1NTRVRVUCwgMSk7Ci0rI2VuZGlmCi0gCi0gCS8qIFRoZSBmaXJzdCBmZXcgcmVxdWVz dHMgZG8gbm90IHJlcXVpcmUgYXN5bmNocm9ub3VzIGFjY2VzcyAqLwotIAl3aGlsZSAoIWF1dGhl bnRpY2F0ZWQpIHsKLUBAIC0zNDEsOCArMzU0LDE1IEBAIG1vbml0b3JfY2hpbGRfcHJlYXV0aChz dHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBtb25pdG9yICpwbW9uaXRvcikKLSAJCWlmIChlbnQtPmZs YWdzICYgKE1PTl9BVVRIREVDSURFfE1PTl9BTE9HKSkgewotIAkJCWF1dGhfbG9nKHNzaCwgYXV0 aGVudGljYXRlZCwgcGFydGlhbCwKLSAJCQkgICAgYXV0aF9tZXRob2QsIGF1dGhfc3VibWV0aG9k KTsKLS0JCQlpZiAoIXBhcnRpYWwgJiYgIWF1dGhlbnRpY2F0ZWQpCi0rCQkJaWYgKCFwYXJ0aWFs ICYmICFhdXRoZW50aWNhdGVkKSB7Ci0rI2lmZGVmIEdTU0FQSQotKwkJCQkvKiBJZiBnc3NhcGkt d2l0aC1taWMgZmFpbGVkLCBNT05JVE9SX1JFUV9HU1NDSEVDS01JQyBpcyBkaXNhYmxlZC4KLSsJ CQkJICogV2UgaGF2ZSB0byByZWVuYWJsZSBpdCB0byB0cnkgYWdhaW4gZm9yIGdzc2FwaS1rZXll eCAqLwotKwkJCQlpZiAoc3RyY21wKGF1dGhfbWV0aG9kLCAiZ3NzYXBpLXdpdGgtbWljIikgPT0g MCAmJiBvcHRpb25zLmdzc19rZXlleCkKLSsJCQkJCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRj aCwgTU9OSVRPUl9SRVFfR1NTQ0hFQ0tNSUMsIDEpOwotKyNlbmRpZgotIAkJCQlhdXRoY3R4dC0+ ZmFpbHVyZXMrKzsKLSsJCQl9Ci0gCQkJaWYgKGF1dGhlbnRpY2F0ZWQgfHwgcGFydGlhbCkgewot IAkJCQlhdXRoMl91cGRhdGVfc2Vzc2lvbl9pbmZvKGF1dGhjdHh0LAotIAkJCQkgICAgYXV0aF9t ZXRob2QsIGF1dGhfc3VibWV0aG9kKTsKLUBAIC00MjksNiArNDQ5LDEwIEBAIG1vbml0b3JfY2hp bGRfcG9zdGF1dGgoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRvciAqcG1vbml0b3IpCi0g CW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfTU9EVUxJLCAxKTsKLSAJ bW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9TSUdOLCAxKTsKLSAJbW9u aXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9URVJNLCAxKTsKLSsjaWZkZWYg R1NTQVBJCi0rCS8qIGFuZCBmb3IgdGhlIEdTU0FQSSBrZXkgZXhjaGFuZ2UgKi8KLSsJbW9uaXRv cl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NTRVRVUCwgMSk7Ci0rI2VuZGlm Ci0gCi0gCWlmIChhdXRoX29wdHMtPnBlcm1pdF9wdHlfZmxhZykgewotIAkJbW9uaXRvcl9wZXJt aXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9QVFksIDEpOwotQEAgLTE4OTYsNiArMTkyMCwx NyBAQCBtb25pdG9yX2FwcGx5X2tleXN0YXRlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1vbml0 b3IgKnBtb25pdG9yKQotICMgaWZkZWYgT1BFTlNTTF9IQVNfRUNDCi0gCWtleC0+a2V4W0tFWF9F Q0RIX1NIQTJdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0gIyBlbmRpZgotKyMgaWZkZWYgR1NTQVBJCi0r CWlmIChvcHRpb25zLmdzc19rZXlleCkgewotKwkJa2V4LT5rZXhbS0VYX0dTU19HUlAxX1NIQTFd ID0ga2V4Z3NzX3NlcnZlcjsKLSsJCWtleC0+a2V4W0tFWF9HU1NfR1JQMTRfU0hBMV0gPSBrZXhn c3Nfc2VydmVyOwotKwkJa2V4LT5rZXhbS0VYX0dTU19HUlAxNF9TSEEyNTZdID0ga2V4Z3NzX3Nl cnZlcjsKLSsJCWtleC0+a2V4W0tFWF9HU1NfR1JQMTZfU0hBNTEyXSA9IGtleGdzc19zZXJ2ZXI7 Ci0rCQlrZXgtPmtleFtLRVhfR1NTX0dFWF9TSEExXSA9IGtleGdzc2dleF9zZXJ2ZXI7Ci0rCQlr ZXgtPmtleFtLRVhfR1NTX05JU1RQMjU2X1NIQTI1Nl0gPSBrZXhnc3Nfc2VydmVyOwotKwkJa2V4 LT5rZXhbS0VYX0dTU19DMjU1MTlfU0hBMjU2XSA9IGtleGdzc19zZXJ2ZXI7Ci0rCX0KLSsjIGVu ZGlmCi0gI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwotIAlrZXgtPmtleFtLRVhfQzI1NTE5X1NI QTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJa2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1 MTlfU0hBNTEyXSA9IGtleF9nZW5fc2VydmVyOwotQEAgLTE5ODcsOCArMjAyMiw4IEBAIG1tX2Fu c3dlcl9nc3Nfc2V0dXBfY3R4KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hi dWYgKm0pCi0gCXVfY2hhciAqcDsKLSAJaW50IHI7Ci0gCi0tCWlmICghb3B0aW9ucy5nc3NfYXV0 aGVudGljYXRpb24pCi0tCQlmYXRhbF9mKCJHU1NBUEkgYXV0aGVudGljYXRpb24gbm90IGVuYWJs ZWQiKTsKLSsJaWYgKCFvcHRpb25zLmdzc19hdXRoZW50aWNhdGlvbiAmJiAhb3B0aW9ucy5nc3Nf a2V5ZXgpCi0rCQlmYXRhbF9mKCJHU1NBUEkgbm90IGVuYWJsZWQiKTsKLSAKLSAJaWYgKChyID0g c3NoYnVmX2dldF9zdHJpbmcobSwgJnAsICZsZW4pKSAhPSAwKQotIAkJZmF0YWxfZnIociwgInBh cnNlIik7Ci1AQCAtMjAyMCw4ICsyMDU1LDggQEAgbW1fYW5zd2VyX2dzc19hY2NlcHRfY3R4KHN0 cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCi0gCU9NX3VpbnQzMiBm bGFncyA9IDA7IC8qIEdTSSBuZWVkcyB0aGlzICovCi0gCWludCByOwotIAotLQlpZiAoIW9wdGlv bnMuZ3NzX2F1dGhlbnRpY2F0aW9uKQotLQkJZmF0YWxfZigiR1NTQVBJIGF1dGhlbnRpY2F0aW9u IG5vdCBlbmFibGVkIik7Ci0rCWlmICghb3B0aW9ucy5nc3NfYXV0aGVudGljYXRpb24gJiYgIW9w dGlvbnMuZ3NzX2tleWV4KQotKwkJZmF0YWxfZigiR1NTQVBJIG5vdCBlbmFibGVkIik7Ci0gCi0g CWlmICgociA9IHNzaF9nc3NhcGlfZ2V0X2J1ZmZlcl9kZXNjKG0sICZpbikpICE9IDApCi0gCQlm YXRhbF9mcihyLCAic3NoX2dzc2FwaV9nZXRfYnVmZmVyX2Rlc2MiKTsKLUBAIC0yMDQxLDYgKzIw NzYsNyBAQCBtbV9hbnN3ZXJfZ3NzX2FjY2VwdF9jdHgoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29j aywgc3RydWN0IHNzaGJ1ZiAqbSkKLSAJCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9O SVRPUl9SRVFfR1NTU1RFUCwgMCk7Ci0gCQltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1P TklUT1JfUkVRX0dTU1VTRVJPSywgMSk7Ci0gCQltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gs IE1PTklUT1JfUkVRX0dTU0NIRUNLTUlDLCAxKTsKLSsJCW1vbml0b3JfcGVybWl0KG1vbl9kaXNw YXRjaCwgTU9OSVRPUl9SRVFfR1NTU0lHTiwgMSk7Ci0gCX0KLSAJcmV0dXJuICgwKTsKLSB9Ci1A QCAtMjA1Miw4ICsyMDg4LDggQEAgbW1fYW5zd2VyX2dzc19jaGVja21pYyhzdHJ1Y3Qgc3NoICpz c2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQotIAlPTV91aW50MzIgcmV0OwotIAlpbnQg cjsKLSAKLS0JaWYgKCFvcHRpb25zLmdzc19hdXRoZW50aWNhdGlvbikKLS0JCWZhdGFsX2YoIkdT U0FQSSBhdXRoZW50aWNhdGlvbiBub3QgZW5hYmxlZCIpOwotKwlpZiAoIW9wdGlvbnMuZ3NzX2F1 dGhlbnRpY2F0aW9uICYmICFvcHRpb25zLmdzc19rZXlleCkKLSsJCWZhdGFsX2YoIkdTU0FQSSBu b3QgZW5hYmxlZCIpOwotIAotIAlpZiAoKHIgPSBzc2hfZ3NzYXBpX2dldF9idWZmZXJfZGVzYyht LCAmZ3NzYnVmKSkgIT0gMCB8fAotIAkgICAgKHIgPSBzc2hfZ3NzYXBpX2dldF9idWZmZXJfZGVz YyhtLCAmbWljKSkgIT0gMCkKLUBAIC0yMDc5LDEzICsyMTE1LDE3IEBAIG1tX2Fuc3dlcl9nc3Nf Y2hlY2ttaWMoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKLSBp bnQKLSBtbV9hbnN3ZXJfZ3NzX3VzZXJvayhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1 Y3Qgc3NoYnVmICptKQotIHsKLS0JaW50IHIsIGF1dGhlbnRpY2F0ZWQ7Ci0rCWludCByLCBhdXRo ZW50aWNhdGVkLCBrZXg7Ci0gCWNvbnN0IGNoYXIgKmRpc3BsYXluYW1lOwotIAotLQlpZiAoIW9w dGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uKQotLQkJZmF0YWxfZigiR1NTQVBJIGF1dGhlbnRpY2F0 aW9uIG5vdCBlbmFibGVkIik7Ci0rCWlmICghb3B0aW9ucy5nc3NfYXV0aGVudGljYXRpb24gJiYg IW9wdGlvbnMuZ3NzX2tleWV4KQotKwkJZmF0YWxfZigiR1NTQVBJIG5vdCBlbmFibGVkIik7Ci0r Ci0rCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZrZXgpKSAhPSAwKQotKwkJZmF0YWxfZnIo ciwgImJ1ZmZlciBlcnJvciIpOwotIAotLQlhdXRoZW50aWNhdGVkID0gYXV0aGN0eHQtPnZhbGlk ICYmIHNzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyKTsKLSsJYXV0aGVudGljYXRlZCA9 IGF1dGhjdHh0LT52YWxpZCAmJgotKwkgICAgc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVz ZXIsIGF1dGhjdHh0LT5wdywga2V4KTsKLSAKLSAJc3NoYnVmX3Jlc2V0KG0pOwotIAlpZiAoKHIg PSBzc2hidWZfcHV0X3UzMihtLCBhdXRoZW50aWNhdGVkKSkgIT0gMCkKLUBAIC0yMDk0LDcgKzIx MzQsMTEgQEAgbW1fYW5zd2VyX2dzc191c2Vyb2soc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywg c3RydWN0IHNzaGJ1ZiAqbSkKLSAJZGVidWczX2YoInNlbmRpbmcgcmVzdWx0ICVkIiwgYXV0aGVu dGljYXRlZCk7Ci0gCW1tX3JlcXVlc3Rfc2VuZChzb2NrLCBNT05JVE9SX0FOU19HU1NVU0VST0ss IG0pOwotIAotLQlhdXRoX21ldGhvZCA9ICJnc3NhcGktd2l0aC1taWMiOwotKwlpZiAoa2V4KSB7 Ci0rCQlhdXRoX21ldGhvZCA9ICJnc3NhcGkta2V5ZXgiOwotKwl9IGVsc2UgewotKwkJYXV0aF9t ZXRob2QgPSAiZ3NzYXBpLXdpdGgtbWljIjsKLSsJfQotIAotIAlpZiAoKGRpc3BsYXluYW1lID0g c3NoX2dzc2FwaV9kaXNwbGF5bmFtZSgpKSAhPSBOVUxMKQotIAkJYXV0aDJfcmVjb3JkX2luZm8o YXV0aGN0eHQsICIlcyIsIGRpc3BsYXluYW1lKTsKLUBAIC0yMTAyLDUgKzIxNDYsODQgQEAgbW1f YW5zd2VyX2dzc191c2Vyb2soc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1 ZiAqbSkKLSAJLyogTW9uaXRvciBsb29wIHdpbGwgdGVybWluYXRlIGlmIGF1dGhlbnRpY2F0ZWQg Ki8KLSAJcmV0dXJuIChhdXRoZW50aWNhdGVkKTsKLSB9Ci0rCi0raW50Ci0rbW1fYW5zd2VyX2dz c19zaWduKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAqbSkKLSt7 Ci0rCWdzc19idWZmZXJfZGVzYyBkYXRhOwotKwlnc3NfYnVmZmVyX2Rlc2MgaGFzaCA9IEdTU19D X0VNUFRZX0JVRkZFUjsKLSsJT01fdWludDMyIG1ham9yLCBtaW5vcjsKLSsJc2l6ZV90IGxlbjsK LSsJdV9jaGFyICpwID0gTlVMTDsKLSsJaW50IHI7Ci0rCi0rCWlmICghb3B0aW9ucy5nc3NfYXV0 aGVudGljYXRpb24gJiYgIW9wdGlvbnMuZ3NzX2tleWV4KQotKwkJZmF0YWxfZigiR1NTQVBJIG5v dCBlbmFibGVkIik7Ci0rCi0rCWlmICgociA9IHNzaGJ1Zl9nZXRfc3RyaW5nKG0sICZwLCAmbGVu KSkgIT0gMCkKLSsJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKLSsJZGF0YS52YWx1ZSA9 IHA7Ci0rCWRhdGEubGVuZ3RoID0gbGVuOwotKwkvKiBMZW5ndGhzIG9mIFNIQS0xLCBTSEEtMjU2 IGFuZCBTSEEtNTEyIGhhc2hlcyB0aGF0IGFyZSB1c2VkICovCi0rCWlmIChkYXRhLmxlbmd0aCAh PSAyMCAmJiBkYXRhLmxlbmd0aCAhPSAzMiAmJiBkYXRhLmxlbmd0aCAhPSA2NCkKLSsJCWZhdGFs X2YoImRhdGEgbGVuZ3RoIGluY29ycmVjdDogJWQiLCAoaW50KSBkYXRhLmxlbmd0aCk7Ci0rCi0r CS8qIFNhdmUgdGhlIHNlc3Npb24gSUQgb24gdGhlIGZpcnN0IHRpbWUgYXJvdW5kICovCi0rCWlm IChzZXNzaW9uX2lkMl9sZW4gPT0gMCkgewotKwkJc2Vzc2lvbl9pZDJfbGVuID0gZGF0YS5sZW5n dGg7Ci0rCQlzZXNzaW9uX2lkMiA9IHhtYWxsb2Moc2Vzc2lvbl9pZDJfbGVuKTsKLSsJCW1lbWNw eShzZXNzaW9uX2lkMiwgZGF0YS52YWx1ZSwgc2Vzc2lvbl9pZDJfbGVuKTsKLSsJfQotKwltYWpv ciA9IHNzaF9nc3NhcGlfc2lnbihnc3Njb250ZXh0LCAmZGF0YSwgJmhhc2gpOwotKwotKwlmcmVl KGRhdGEudmFsdWUpOwotKwotKwlzc2hidWZfcmVzZXQobSk7Ci0rCi0rCWlmICgociA9IHNzaGJ1 Zl9wdXRfdTMyKG0sIG1ham9yKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hidWZfcHV0X3N0cmlu ZyhtLCBoYXNoLnZhbHVlLCBoYXNoLmxlbmd0aCkpICE9IDApCi0rCQlmYXRhbF9mcihyLCAiYnVm ZmVyIGVycm9yIik7Ci0rCi0rCW1tX3JlcXVlc3Rfc2VuZChzb2NrZXQsIE1PTklUT1JfQU5TX0dT U1NJR04sIG0pOwotKwotKwlnc3NfcmVsZWFzZV9idWZmZXIoJm1pbm9yLCAmaGFzaCk7Ci0rCi0r CS8qIFR1cm4gb24gZ2V0cHduYW0gcGVybWlzc2lvbnMgKi8KLSsJbW9uaXRvcl9wZXJtaXQobW9u X2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9QV05BTSwgMSk7Ci0rCi0rCS8qIEFuZCBjcmVkZW50aWFs IHVwZGF0aW5nLCBmb3Igd2hlbiByZWtleWluZyAqLwotKwltb25pdG9yX3Blcm1pdChtb25fZGlz cGF0Y2gsIE1PTklUT1JfUkVRX0dTU1VQQ1JFRFMsIDEpOwotKwotKwlyZXR1cm4gKDApOwotK30K LSsKLStpbnQKLSttbV9hbnN3ZXJfZ3NzX3VwZGF0ZWNyZWRzKHN0cnVjdCBzc2ggKnNzaCwgaW50 IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAqbSkgewotKwlzc2hfZ3NzYXBpX2NjYWNoZSBzdG9yZTsK LSsJaW50IHIsIG9rOwotKwotKwlpZiAoIW9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uICYmICFv cHRpb25zLmdzc19rZXlleCkKLSsJCWZhdGFsX2YoIkdTU0FQSSBub3QgZW5hYmxlZCIpOwotKwot KwlpZiAoKHIgPSBzc2hidWZfZ2V0X3N0cmluZyhtLCAodV9jaGFyICoqKSZzdG9yZS5maWxlbmFt ZSwgTlVMTCkpICE9IDAgfHwKLSsJICAgIChyID0gc3NoYnVmX2dldF9zdHJpbmcobSwgKHVfY2hh ciAqKikmc3RvcmUuZW52dmFyLCBOVUxMKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hidWZfZ2V0 X3N0cmluZyhtLCAodV9jaGFyICoqKSZzdG9yZS5lbnZ2YWwsIE5VTEwpKSAhPSAwKQotKwkJZmF0 YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwotKwlvayA9IHNzaF9nc3NhcGlfdXBkYXRlX2Ny ZWRzKCZzdG9yZSk7Ci0rCi0rCWZyZWUoc3RvcmUuZmlsZW5hbWUpOwotKwlmcmVlKHN0b3JlLmVu dnZhcik7Ci0rCWZyZWUoc3RvcmUuZW52dmFsKTsKLSsKLSsJc3NoYnVmX3Jlc2V0KG0pOwotKwlp ZiAoKHIgPSBzc2hidWZfcHV0X3UzMihtLCBvaykpICE9IDApCi0rCQlmYXRhbF9mcihyLCAiYnVm ZmVyIGVycm9yIik7Ci0rCi0rCW1tX3JlcXVlc3Rfc2VuZChzb2NrZXQsIE1PTklUT1JfQU5TX0dT U1VQQ1JFRFMsIG0pOwotKwotKwlyZXR1cm4oMCk7Ci0rfQotKwotICNlbmRpZiAvKiBHU1NBUEkg Ki8KLSAKLWRpZmYgLS1naXQgYS9tb25pdG9yLmggYi9tb25pdG9yLmgKLWluZGV4IDlkY2Q5YzI5 My4uZGJjN2UwMDM3IDEwMDY0NAotLS0tIGEvbW9uaXRvci5oCi0rKysgYi9tb25pdG9yLmgKLUBA IC02OCw2ICs2OCw4IEBAIGVudW0gbW9uaXRvcl9yZXF0eXBlIHsKLSAJTU9OSVRPUl9SRVFfUEFN X0ZSRUVfQ1RYID0gMTEwLCBNT05JVE9SX0FOU19QQU1fRlJFRV9DVFggPSAxMTEsCi0gCU1PTklU T1JfUkVRX0FVRElUX0VWRU5UID0gMTEyLCBNT05JVE9SX1JFUV9BVURJVF9DT01NQU5EID0gMTEz LAotIAotKwlNT05JVE9SX1JFUV9HU1NTSUdOID0gMTUwLCBNT05JVE9SX0FOU19HU1NTSUdOID0g MTUxLAotKwlNT05JVE9SX1JFUV9HU1NVUENSRURTID0gMTUyLCBNT05JVE9SX0FOU19HU1NVUENS RURTID0gMTUzLAotIH07Ci0gCi0gc3RydWN0IHNzaDsKLWRpZmYgLS1naXQgYS9tb25pdG9yX3dy YXAuYyBiL21vbml0b3Jfd3JhcC5jCi1pbmRleCAzNDdlYjY4NzAuLjA4ZGMyOWUxMiAxMDA2NDQK LS0tLSBhL21vbml0b3Jfd3JhcC5jCi0rKysgYi9tb25pdG9yX3dyYXAuYwotQEAgLTExNDIsMTMg KzExNDIsMTUgQEAgbW1fc3NoX2dzc2FwaV9jaGVja21pYyhHc3NjdHh0ICpjdHgsIGdzc19idWZm ZXJfdCBnc3NidWYsIGdzc19idWZmZXJfdCBnc3NtaWMpCi0gfQotIAotIGludAotLW1tX3NzaF9n c3NhcGlfdXNlcm9rKGNoYXIgKnVzZXIpCi0rbW1fc3NoX2dzc2FwaV91c2Vyb2soY2hhciAqdXNl ciwgc3RydWN0IHBhc3N3ZCAqcHcsIGludCBrZXgpCi0gewotIAlzdHJ1Y3Qgc3NoYnVmICptOwot IAlpbnQgciwgYXV0aGVudGljYXRlZCA9IDA7Ci0gCi0gCWlmICgobSA9IHNzaGJ1Zl9uZXcoKSkg PT0gTlVMTCkKLSAJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7Ci0rCWlmICgociA9IHNz aGJ1Zl9wdXRfdTMyKG0sIGtleCkpICE9IDApCi0rCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9y Iik7Ci0gCi0gCW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfUkVR X0dTU1VTRVJPSywgbSk7Ci0gCW1tX3JlcXVlc3RfcmVjZWl2ZV9leHBlY3QocG1vbml0b3ItPm1f cmVjdmZkLAotQEAgLTExNjEsNiArMTE2Myw1OSBAQCBtbV9zc2hfZ3NzYXBpX3VzZXJvayhjaGFy ICp1c2VyKQotIAlkZWJ1ZzNfZigidXNlciAlc2F1dGhlbnRpY2F0ZWQiLCBhdXRoZW50aWNhdGVk ID8gIiIgOiAibm90ICIpOwotIAlyZXR1cm4gKGF1dGhlbnRpY2F0ZWQpOwotIH0KLSsKLStPTV91 aW50MzIKLSttbV9zc2hfZ3NzYXBpX3NpZ24oR3NzY3R4dCAqY3R4LCBnc3NfYnVmZmVyX2Rlc2Mg KmRhdGEsIGdzc19idWZmZXJfZGVzYyAqaGFzaCkKLSt7Ci0rCXN0cnVjdCBzc2hidWYgKm07Ci0r CU9NX3VpbnQzMiBtYWpvcjsKLSsJaW50IHI7Ci0rCi0rCWlmICgobSA9IHNzaGJ1Zl9uZXcoKSkg PT0gTlVMTCkKLSsJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7Ci0rCWlmICgociA9IHNz aGJ1Zl9wdXRfc3RyaW5nKG0sIGRhdGEtPnZhbHVlLCBkYXRhLT5sZW5ndGgpKSAhPSAwKQotKwkJ ZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwotKwltbV9yZXF1ZXN0X3NlbmQocG1vbml0 b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9HU1NTSUdOLCBtKTsKLSsJbW1fcmVxdWVzdF9yZWNl aXZlX2V4cGVjdChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfQU5TX0dTU1NJR04sIG0pOwot KwotKwlpZiAoKHIgPSBzc2hidWZfZ2V0X3UzMihtLCAmbWFqb3IpKSAhPSAwIHx8Ci0rCSAgICAo ciA9IHNzaF9nc3NhcGlfZ2V0X2J1ZmZlcl9kZXNjKG0sIGhhc2gpKSAhPSAwKQotKwkJZmF0YWxf ZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwotKwlzc2hidWZfZnJlZShtKTsKLSsKLSsJcmV0dXJu IChtYWpvcik7Ci0rfQotKwotK2ludAotK21tX3NzaF9nc3NhcGlfdXBkYXRlX2NyZWRzKHNzaF9n c3NhcGlfY2NhY2hlICpzdG9yZSkKLSt7Ci0rCXN0cnVjdCBzc2hidWYgKm07Ci0rCWludCByLCBv azsKLSsKLSsJaWYgKChtID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotKwkJZmF0YWxfZigic3No YnVmX25ldyBmYWlsZWQiKTsKLSsKLSsJaWYgKChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sCi0r CSAgICBzdG9yZS0+ZmlsZW5hbWUgPyBzdG9yZS0+ZmlsZW5hbWUgOiAiIikpICE9IDAgfHwKLSsJ ICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sCi0rCSAgICBzdG9yZS0+ZW52dmFyID8gc3Rv cmUtPmVudnZhciA6ICIiKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmco bSwKLSsJICAgIHN0b3JlLT5lbnZ2YWwgPyBzdG9yZS0+ZW52dmFsIDogIiIpKSAhPSAwKQotKwkJ ZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwotKwltbV9yZXF1ZXN0X3NlbmQocG1vbml0 b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9HU1NVUENSRURTLCBtKTsKLSsJbW1fcmVxdWVzdF9y ZWNlaXZlX2V4cGVjdChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfQU5TX0dTU1VQQ1JFRFMs IG0pOwotKwotKwlpZiAoKHIgPSBzc2hidWZfZ2V0X3UzMihtLCAmb2spKSAhPSAwKQotKwkJZmF0 YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwotKwlzc2hidWZfZnJlZShtKTsKLSsKLSsJcmV0 dXJuIChvayk7Ci0rfQotKwotICNlbmRpZiAvKiBHU1NBUEkgKi8KLSAKLSAvKgotZGlmZiAtLWdp dCBhL21vbml0b3Jfd3JhcC5oIGIvbW9uaXRvcl93cmFwLmgKLWluZGV4IDliNDJkZGJjYi4uMTJj NDg5YzMzIDEwMDY0NAotLS0tIGEvbW9uaXRvcl93cmFwLmgKLSsrKyBiL21vbml0b3Jfd3JhcC5o Ci1AQCAtNzEsOCArNzEsMTAgQEAgdm9pZCBtbV9kZWNvZGVfYWN0aXZhdGVfc2VydmVyX29wdGlv bnMoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3Qgc3NoYnVmICptKTsKLSBPTV91aW50MzIgbW1fc3No X2dzc2FwaV9zZXJ2ZXJfY3R4KEdzc2N0eHQgKiosIGdzc19PSUQpOwotIE9NX3VpbnQzMiBtbV9z c2hfZ3NzYXBpX2FjY2VwdF9jdHgoR3NzY3R4dCAqLAotICAgIGdzc19idWZmZXJfZGVzYyAqLCBn c3NfYnVmZmVyX2Rlc2MgKiwgT01fdWludDMyICopOwotLWludCBtbV9zc2hfZ3NzYXBpX3VzZXJv ayhjaGFyICp1c2VyKTsKLStpbnQgbW1fc3NoX2dzc2FwaV91c2Vyb2soY2hhciAqdXNlciwgc3Ry dWN0IHBhc3N3ZCAqLCBpbnQga2V4KTsKLSBPTV91aW50MzIgbW1fc3NoX2dzc2FwaV9jaGVja21p YyhHc3NjdHh0ICosIGdzc19idWZmZXJfdCwgZ3NzX2J1ZmZlcl90KTsKLStPTV91aW50MzIgbW1f c3NoX2dzc2FwaV9zaWduKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOwot K2ludCBtbV9zc2hfZ3NzYXBpX3VwZGF0ZV9jcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAqKTsKLSAj ZW5kaWYKLSAKLSAjaWZkZWYgVVNFX1BBTQotZGlmZiAtLWdpdCBhL3JlYWRjb25mLmMgYi9yZWFk Y29uZi5jCi1pbmRleCBkOTkyMDU5NDQuLmVhYjczNGFhZiAxMDA2NDQKLS0tLSBhL3JlYWRjb25m LmMKLSsrKyBiL3JlYWRjb25mLmMKLUBAIC02NSw2ICs2NSw3IEBACi0gI2luY2x1ZGUgIm15cHJv cG9zYWwuaCIKLSAjaW5jbHVkZSAiZGlnZXN0LmgiCi0gI2luY2x1ZGUgInZlcnNpb24uaCIKLSsj aW5jbHVkZSAic3NoLWdzcy5oIgotIAotIC8qIEZvcm1hdCBvZiB0aGUgY29uZmlndXJhdGlvbiBm aWxlOgotIAotQEAgLTE1OSw2ICsxNjAsOCBAQCB0eXBlZGVmIGVudW0gewotIAlvQ2xlYXJBbGxG b3J3YXJkaW5ncywgb05vSG9zdEF1dGhlbnRpY2F0aW9uRm9yTG9jYWxob3N0LAotIAlvRW5hYmxl U1NIS2V5c2lnbiwgb1Jla2V5TGltaXQsIG9WZXJpZnlIb3N0S2V5RE5TLCBvQ29ubmVjdFRpbWVv dXQsCi0gCW9BZGRyZXNzRmFtaWx5LCBvR3NzQXV0aGVudGljYXRpb24sIG9Hc3NEZWxlZ2F0ZUNy ZWRzLAotKwlvR3NzVHJ1c3REbnMsIG9Hc3NLZXlFeCwgb0dzc0NsaWVudElkZW50aXR5LCBvR3Nz UmVuZXdhbFJla2V5LAotKwlvR3NzU2VydmVySWRlbnRpdHksIG9Hc3NLZXhBbGdvcml0aG1zLAot IAlvU2VydmVyQWxpdmVJbnRlcnZhbCwgb1NlcnZlckFsaXZlQ291bnRNYXgsIG9JZGVudGl0aWVz T25seSwKLSAJb1NlbmRFbnYsIG9TZXRFbnYsIG9Db250cm9sUGF0aCwgb0NvbnRyb2xNYXN0ZXIs IG9Db250cm9sUGVyc2lzdCwKLSAJb0hhc2hLbm93bkhvc3RzLAotQEAgLTIwNiwxMCArMjA5LDIy IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAkvKiBTb21ldGltZXMtdW5zdXBwb3J0ZWQgb3B0aW9ucyAq LwotICNpZiBkZWZpbmVkKEdTU0FQSSkKLSAJeyAiZ3NzYXBpYXV0aGVudGljYXRpb24iLCBvR3Nz QXV0aGVudGljYXRpb24gfSwKLSsJeyAiZ3NzYXBpa2V5ZXhjaGFuZ2UiLCBvR3NzS2V5RXggfSwK LSAJeyAiZ3NzYXBpZGVsZWdhdGVjcmVkZW50aWFscyIsIG9Hc3NEZWxlZ2F0ZUNyZWRzIH0sCi0r CXsgImdzc2FwaXRydXN0ZG5zIiwgb0dzc1RydXN0RG5zIH0sCi0rCXsgImdzc2FwaWNsaWVudGlk ZW50aXR5Iiwgb0dzc0NsaWVudElkZW50aXR5IH0sCi0rCXsgImdzc2FwaXNlcnZlcmlkZW50aXR5 Iiwgb0dzc1NlcnZlcklkZW50aXR5IH0sCi0rCXsgImdzc2FwaXJlbmV3YWxmb3JjZXNyZWtleSIs IG9Hc3NSZW5ld2FsUmVrZXkgfSwKLSsJeyAiZ3NzYXBpa2V4YWxnb3JpdGhtcyIsIG9Hc3NLZXhB bGdvcml0aG1zIH0sCi0gIyBlbHNlCi0gCXsgImdzc2FwaWF1dGhlbnRpY2F0aW9uIiwgb1Vuc3Vw cG9ydGVkIH0sCi0rCXsgImdzc2FwaWtleWV4Y2hhbmdlIiwgb1Vuc3VwcG9ydGVkIH0sCi0gCXsg Imdzc2FwaWRlbGVnYXRlY3JlZGVudGlhbHMiLCBvVW5zdXBwb3J0ZWQgfSwKLSsJeyAiZ3NzYXBp dHJ1c3RkbnMiLCBvVW5zdXBwb3J0ZWQgfSwKLSsJeyAiZ3NzYXBpY2xpZW50aWRlbnRpdHkiLCBv VW5zdXBwb3J0ZWQgfSwKLSsJeyAiZ3NzYXBpc2VydmVyaWRlbnRpdHkiLCBvVW5zdXBwb3J0ZWQg fSwKLSsJeyAiZ3NzYXBpcmVuZXdhbGZvcmNlc3Jla2V5Iiwgb1Vuc3VwcG9ydGVkIH0sCi0rCXsg Imdzc2FwaWtleGFsZ29yaXRobXMiLCBvVW5zdXBwb3J0ZWQgfSwKLSAjZW5kaWYKLSAjaWZkZWYg RU5BQkxFX1BLQ1MxMQotIAl7ICJwa2NzMTFwcm92aWRlciIsIG9QS0NTMTFQcm92aWRlciB9LAot QEAgLTEzMjYsMTAgKzEzNDEsNDIgQEAgcGFyc2VfdGltZToKLSAJCWludHB0ciA9ICZvcHRpb25z LT5nc3NfYXV0aGVudGljYXRpb247Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci0gCi0rCWNhc2Ugb0dz c0tleUV4OgotKwkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19rZXlleDsKLSsJCWdvdG8gcGFyc2Vf ZmxhZzsKLSsKLSAJY2FzZSBvR3NzRGVsZWdhdGVDcmVkczoKLSAJCWludHB0ciA9ICZvcHRpb25z LT5nc3NfZGVsZWdfY3JlZHM7Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci0gCi0rCWNhc2Ugb0dzc1Ry dXN0RG5zOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPmdzc190cnVzdF9kbnM7Ci0rCQlnb3RvIHBh cnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugb0dzc0NsaWVudElkZW50aXR5OgotKwkJY2hhcnB0ciA9ICZv cHRpb25zLT5nc3NfY2xpZW50X2lkZW50aXR5OwotKwkJZ290byBwYXJzZV9zdHJpbmc7Ci0rCi0r CWNhc2Ugb0dzc1NlcnZlcklkZW50aXR5OgotKwkJY2hhcnB0ciA9ICZvcHRpb25zLT5nc3Nfc2Vy dmVyX2lkZW50aXR5OwotKwkJZ290byBwYXJzZV9zdHJpbmc7Ci0rCi0rCWNhc2Ugb0dzc1JlbmV3 YWxSZWtleToKLSsJCWludHB0ciA9ICZvcHRpb25zLT5nc3NfcmVuZXdhbF9yZWtleTsKLSsJCWdv dG8gcGFyc2VfZmxhZzsKLSsKLSsJY2FzZSBvR3NzS2V4QWxnb3JpdGhtczoKLSsJCWFyZyA9IGFy Z3ZfbmV4dCgmYWMsICZhdik7Ci0rCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCi0rCQkJZmF0 YWwoIiUuMjAwcyBsaW5lICVkOiBNaXNzaW5nIGFyZ3VtZW50LiIsCi0rCQkJICAgIGZpbGVuYW1l LCBsaW5lbnVtKTsKLSsJCWlmICgha2V4X2dzc19uYW1lc192YWxpZChhcmcpKQotKwkJCWZhdGFs KCIlLjIwMHMgbGluZSAlZDogQmFkIEdTU0FQSSBLZXhBbGdvcml0aG1zICclcycuIiwKLSsJCQkg ICAgZmlsZW5hbWUsIGxpbmVudW0sIGFyZyA/IGFyZyA6ICI8Tk9ORT4iKTsKLSsJCWlmICgqYWN0 aXZlcCAmJiBvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPT0gTlVMTCkKLSsJCQlvcHRpb25z LT5nc3Nfa2V4X2FsZ29yaXRobXMgPSB4c3RyZHVwKGFyZyk7Ci0rCQlicmVhazsKLSsKLSAJY2Fz ZSBvQmF0Y2hNb2RlOgotIAkJaW50cHRyID0gJm9wdGlvbnMtPmJhdGNoX21vZGU7Ci0gCQlnb3Rv IHBhcnNlX2ZsYWc7Ci1AQCAtMjY5OCw3ICsyNzQ1LDEzIEBAIGluaXRpYWxpemVfb3B0aW9ucyhP cHRpb25zICogb3B0aW9ucykKLSAJb3B0aW9ucy0+ZndkX29wdHMuc3RyZWFtbG9jYWxfYmluZF91 bmxpbmsgPSAtMTsKLSAJb3B0aW9ucy0+cHVia2V5X2F1dGhlbnRpY2F0aW9uID0gLTE7Ci0gCW9w dGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IC0xOwotKwlvcHRpb25zLT5nc3Nfa2V5ZXggPSAt MTsKLSAJb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID0gLTE7Ci0rCW9wdGlvbnMtPmdzc190cnVz dF9kbnMgPSAtMTsKLSsJb3B0aW9ucy0+Z3NzX3JlbmV3YWxfcmVrZXkgPSAtMTsKLSsJb3B0aW9u cy0+Z3NzX2NsaWVudF9pZGVudGl0eSA9IE5VTEw7Ci0rCW9wdGlvbnMtPmdzc19zZXJ2ZXJfaWRl bnRpdHkgPSBOVUxMOwotKwlvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSBOVUxMOwotIAlv cHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9IC0xOwotIAlvcHRpb25zLT5rYmRfaW50 ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPSAtMTsKLSAJb3B0aW9ucy0+a2JkX2ludGVyYWN0aXZl X2RldmljZXMgPSBOVUxMOwotQEAgLTI4NjMsOCArMjkxNiwxOCBAQCBmaWxsX2RlZmF1bHRfb3B0 aW9ucyhPcHRpb25zICogb3B0aW9ucykKLSAJCW9wdGlvbnMtPnB1YmtleV9hdXRoZW50aWNhdGlv biA9IFNTSF9QVUJLRVlfQVVUSF9BTEw7Ci0gCWlmIChvcHRpb25zLT5nc3NfYXV0aGVudGljYXRp b24gPT0gLTEpCi0gCQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAwOwotKwlpZiAob3B0 aW9ucy0+Z3NzX2tleWV4ID09IC0xKQotKwkJb3B0aW9ucy0+Z3NzX2tleWV4ID0gMDsKLSAJaWYg KG9wdGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19kZWxlZ19j cmVkcyA9IDA7Ci0rCWlmIChvcHRpb25zLT5nc3NfdHJ1c3RfZG5zID09IC0xKQotKwkJb3B0aW9u cy0+Z3NzX3RydXN0X2RucyA9IDA7Ci0rCWlmIChvcHRpb25zLT5nc3NfcmVuZXdhbF9yZWtleSA9 PSAtMSkKLSsJCW9wdGlvbnMtPmdzc19yZW5ld2FsX3Jla2V5ID0gMDsKLSsjaWZkZWYgR1NTQVBJ Ci0rCWlmIChvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPT0gTlVMTCkKLSsJCW9wdGlvbnMt Pmdzc19rZXhfYWxnb3JpdGhtcyA9IHN0cmR1cChHU1NfS0VYX0RFRkFVTFRfS0VYKTsKLSsjZW5k aWYKLSAJaWYgKG9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID09IC0xKQotIAkJb3B0 aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAxOwotIAlpZiAob3B0aW9ucy0+a2JkX2lu dGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uID09IC0xKQotQEAgLTM2OTIsNyArMzc1NSwxNCBAQCBk dW1wX2NsaWVudF9jb25maWcoT3B0aW9ucyAqbywgY29uc3QgY2hhciAqaG9zdCkKLSAJZHVtcF9j ZmdfZm10aW50KG9HYXRld2F5UG9ydHMsIG8tPmZ3ZF9vcHRzLmdhdGV3YXlfcG9ydHMpOwotICNp ZmRlZiBHU1NBUEkKLSAJZHVtcF9jZmdfZm10aW50KG9Hc3NBdXRoZW50aWNhdGlvbiwgby0+Z3Nz X2F1dGhlbnRpY2F0aW9uKTsKLSsJZHVtcF9jZmdfZm10aW50KG9Hc3NLZXlFeCwgby0+Z3NzX2tl eWV4KTsKLSAJZHVtcF9jZmdfZm10aW50KG9Hc3NEZWxlZ2F0ZUNyZWRzLCBvLT5nc3NfZGVsZWdf Y3JlZHMpOwotKwlkdW1wX2NmZ19mbXRpbnQob0dzc1RydXN0RG5zLCBvLT5nc3NfdHJ1c3RfZG5z KTsKLSsJZHVtcF9jZmdfZm10aW50KG9Hc3NSZW5ld2FsUmVrZXksIG8tPmdzc19yZW5ld2FsX3Jl a2V5KTsKLSsJZHVtcF9jZmdfc3RyaW5nKG9Hc3NDbGllbnRJZGVudGl0eSwgby0+Z3NzX2NsaWVu dF9pZGVudGl0eSk7Ci0rCWR1bXBfY2ZnX3N0cmluZyhvR3NzU2VydmVySWRlbnRpdHksIG8tPmdz c19zZXJ2ZXJfaWRlbnRpdHkpOwotKwlkdW1wX2NmZ19zdHJpbmcob0dzc0tleEFsZ29yaXRobXMs IG8tPmdzc19rZXhfYWxnb3JpdGhtcyA/Ci0rCSAgICBvLT5nc3Nfa2V4X2FsZ29yaXRobXMgOiBH U1NfS0VYX0RFRkFVTFRfS0VYKTsKLSAjZW5kaWYgLyogR1NTQVBJICovCi0gCWR1bXBfY2ZnX2Zt dGludChvSGFzaEtub3duSG9zdHMsIG8tPmhhc2hfa25vd25faG9zdHMpOwotIAlkdW1wX2NmZ19m bXRpbnQob0hvc3RiYXNlZEF1dGhlbnRpY2F0aW9uLCBvLT5ob3N0YmFzZWRfYXV0aGVudGljYXRp b24pOwotZGlmZiAtLWdpdCBhL3JlYWRjb25mLmggYi9yZWFkY29uZi5oCi1pbmRleCA5NDIxNDlm OWEuLmI5NmUzMjc5ZSAxMDA2NDQKLS0tLSBhL3JlYWRjb25mLmgKLSsrKyBiL3JlYWRjb25mLmgK LUBAIC0zOSw3ICszOSwxMyBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gCWludCAgICAgcHVia2V5X2F1 dGhlbnRpY2F0aW9uOwkvKiBUcnkgc3NoMiBwdWJrZXkgYXV0aGVudGljYXRpb24uICovCi0gCWlu dCAgICAgaG9zdGJhc2VkX2F1dGhlbnRpY2F0aW9uOwkvKiBzc2gyJ3Mgcmhvc3RzX3JzYSAqLwot IAlpbnQgICAgIGdzc19hdXRoZW50aWNhdGlvbjsJLyogVHJ5IEdTUyBhdXRoZW50aWNhdGlvbiAq LwotKwlpbnQgICAgIGdzc19rZXlleDsJCS8qIFRyeSBHU1Mga2V5IGV4Y2hhbmdlICovCi0gCWlu dCAgICAgZ3NzX2RlbGVnX2NyZWRzOwkvKiBEZWxlZ2F0ZSBHU1MgY3JlZGVudGlhbHMgKi8KLSsJ aW50CWdzc190cnVzdF9kbnM7CQkvKiBUcnVzdCBETlMgZm9yIEdTUyBjYW5vbmljYWxpemF0aW9u ICovCi0rCWludAlnc3NfcmVuZXdhbF9yZWtleTsJLyogQ3JlZGVudGlhbCByZW5ld2FsIGZvcmNl cyByZWtleSAqLwotKwljaGFyICAgICpnc3NfY2xpZW50X2lkZW50aXR5OyAgIC8qIFByaW5jaXBh bCB0byBpbml0aWF0ZSBHU1NBUEkgd2l0aCAqLwotKwljaGFyICAgICpnc3Nfc2VydmVyX2lkZW50 aXR5OyAgIC8qIEdTU0FQSSB0YXJnZXQgcHJpbmNpcGFsICovCi0rCWNoYXIgICAgKmdzc19rZXhf YWxnb3JpdGhtczsJLyogR1NTQVBJIGtleCBtZXRob2RzIHRvIGJlIG9mZmVyZWQgYnkgY2xpZW50 LiAqLwotIAlpbnQgICAgIHBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uOwkvKiBUcnkgcGFzc3dvcmQK LSAJCQkJCQkgKiBhdXRoZW50aWNhdGlvbi4gKi8KLSAJaW50ICAgICBrYmRfaW50ZXJhY3RpdmVf YXV0aGVudGljYXRpb247IC8qIFRyeSBrZXlib2FyZC1pbnRlcmFjdGl2ZSBhdXRoLiAqLwotZGlm ZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1pbmRleCA0OGVjOGM0ZWMuLjNiOTNj YTgyOSAxMDA2NDQKLS0tLSBhL3NlcnZjb25mLmMKLSsrKyBiL3NlcnZjb25mLmMKLUBAIC02Nyw2 ICs2Nyw3IEBACi0gI2luY2x1ZGUgIm15cHJvcG9zYWwuaCIKLSAjaW5jbHVkZSAiZGlnZXN0Lmgi Ci0gI2luY2x1ZGUgInZlcnNpb24uaCIKLSsjaW5jbHVkZSAic3NoLWdzcy5oIgotIAotICNpZiAh ZGVmaW5lZChTU0hEX1BBTV9TRVJWSUNFKQotICMgZGVmaW5lIFNTSERfUEFNX1NFUlZJQ0UJCSJz c2hkIgotQEAgLTEzNiw4ICsxMzcsMTEgQEAgaW5pdGlhbGl6ZV9zZXJ2ZXJfb3B0aW9ucyhTZXJ2 ZXJPcHRpb25zICpvcHRpb25zKQotIAlvcHRpb25zLT5rZXJiZXJvc190aWNrZXRfY2xlYW51cCA9 IC0xOwotIAlvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuID0gLTE7Ci0gCW9wdGlvbnMt Pmdzc19hdXRoZW50aWNhdGlvbj0tMTsKLSsJb3B0aW9ucy0+Z3NzX2tleWV4ID0gLTE7Ci0gCW9w dGlvbnMtPmdzc19jbGVhbnVwX2NyZWRzID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNj ZXB0b3IgPSAtMTsKLSsJb3B0aW9ucy0+Z3NzX3N0b3JlX3Jla2V5ID0gLTE7Ci0rCW9wdGlvbnMt Pmdzc19rZXhfYWxnb3JpdGhtcyA9IE5VTEw7Ci0gCW9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRp Y2F0aW9uID0gLTE7Ci0gCW9wdGlvbnMtPmtiZF9pbnRlcmFjdGl2ZV9hdXRoZW50aWNhdGlvbiA9 IC0xOwotIAlvcHRpb25zLT5wZXJtaXRfZW1wdHlfcGFzc3dkID0gLTE7Ci1AQCAtMzc0LDEwICsz NzgsMTggQEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlv bnMpCi0gCQlvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuID0gMDsKLSAJaWYgKG9wdGlv bnMtPmdzc19hdXRoZW50aWNhdGlvbiA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19hdXRoZW50aWNh dGlvbiA9IDA7Ci0rCWlmIChvcHRpb25zLT5nc3Nfa2V5ZXggPT0gLTEpCi0rCQlvcHRpb25zLT5n c3Nfa2V5ZXggPSAwOwotIAlpZiAob3B0aW9ucy0+Z3NzX2NsZWFudXBfY3JlZHMgPT0gLTEpCi0g CQlvcHRpb25zLT5nc3NfY2xlYW51cF9jcmVkcyA9IDE7Ci0gCWlmIChvcHRpb25zLT5nc3Nfc3Ry aWN0X2FjY2VwdG9yID09IC0xKQotIAkJb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9IDE7 Ci0rCWlmIChvcHRpb25zLT5nc3Nfc3RvcmVfcmVrZXkgPT0gLTEpCi0rCQlvcHRpb25zLT5nc3Nf c3RvcmVfcmVrZXkgPSAwOwotKyNpZmRlZiBHU1NBUEkKLSsJaWYgKG9wdGlvbnMtPmdzc19rZXhf YWxnb3JpdGhtcyA9PSBOVUxMKQotKwkJb3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID0gc3Ry ZHVwKEdTU19LRVhfREVGQVVMVF9LRVgpOwotKyNlbmRpZgotIAlpZiAob3B0aW9ucy0+cGFzc3dv cmRfYXV0aGVudGljYXRpb24gPT0gLTEpCi0gCQlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNh dGlvbiA9IDE7Ci0gCWlmIChvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24g PT0gLTEpCi1AQCAtNTYyLDYgKzU3NCw3IEBAIHR5cGVkZWYgZW51bSB7Ci0gCXNQZXJTb3VyY2VQ ZW5hbHRpZXMsIHNQZXJTb3VyY2VQZW5hbHR5RXhlbXB0TGlzdCwKLSAJc0NsaWVudEFsaXZlSW50 ZXJ2YWwsIHNDbGllbnRBbGl2ZUNvdW50TWF4LCBzQXV0aG9yaXplZEtleXNGaWxlLAotIAlzR3Nz QXV0aGVudGljYXRpb24sIHNHc3NDbGVhbnVwQ3JlZHMsIHNHc3NTdHJpY3RBY2NlcHRvciwKLSsJ c0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGhtcywgc0dzc1N0b3JlUmVrZXksCi0gCXNBY2NlcHRF bnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWwsCi0gCXNNYXRjaCwgc1Blcm1pdE9wZW4sIHNQZXJt aXRMaXN0ZW4sIHNGb3JjZUNvbW1hbmQsIHNDaHJvb3REaXJlY3RvcnksCi0gCXNVc2VQcml2aWxl Z2VTZXBhcmF0aW9uLCBzQWxsb3dBZ2VudEZvcndhcmRpbmcsCi1AQCAtNjQ3LDEyICs2NjAsMjIg QEAgc3RhdGljIHN0cnVjdCB7Ci0gI2lmZGVmIEdTU0FQSQotIAl7ICJnc3NhcGlhdXRoZW50aWNh dGlvbiIsIHNHc3NBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJnc3NhcGljbGVh bnVwY3JlZGVudGlhbHMiLCBzR3NzQ2xlYW51cENyZWRzLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsg Imdzc2FwaWNsZWFudXBjcmVkcyIsIHNHc3NDbGVhbnVwQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwK LSAJeyAiZ3NzYXBpc3RyaWN0YWNjZXB0b3JjaGVjayIsIHNHc3NTdHJpY3RBY2NlcHRvciwgU1NI Q0ZHX0dMT0JBTCB9LAotKwl7ICJnc3NhcGlrZXlleGNoYW5nZSIsIHNHc3NLZXlFeCwgU1NIQ0ZH X0dMT0JBTCB9LAotKwl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNHc3NTdG9y ZVJla2V5LCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzR3Nz S2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCB9LAotICNlbHNlCi0gCXsgImdzc2FwaWF1dGhl bnRpY2F0aW9uIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCi0gCXsgImdzc2FwaWNsZWFu dXBjcmVkZW50aWFscyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJnc3Nh cGljbGVhbnVwY3JlZHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAiZ3Nz YXBpc3RyaWN0YWNjZXB0b3JjaGVjayIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAot Kwl7ICJnc3NhcGlrZXlleGNoYW5nZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAot Kwl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZH X0dMT0JBTCB9LAotKwl7ICJnc3NhcGlrZXhhbGdvcml0aG1zIiwgc1Vuc3VwcG9ydGVkLCBTU0hD RkdfR0xPQkFMIH0sCi0gI2VuZGlmCi0rCXsgImdzc3VzZXNlc3Npb25jY2FjaGUiLCBzVW5zdXBw b3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAiZ3NzYXBpdXNlc2Vzc2lvbmNyZWRjYWNoZSIs IHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJwYXNzd29yZGF1dGhlbnRpY2F0 aW9uIiwgc1Bhc3N3b3JkQXV0aGVudGljYXRpb24sIFNTSENGR19BTEwgfSwKLSAJeyAia2JkaW50 ZXJhY3RpdmVhdXRoZW50aWNhdGlvbiIsIHNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLCBT U0hDRkdfQUxMIH0sCi0gCXsgImNoYWxsZW5nZXJlc3BvbnNlYXV0aGVudGljYXRpb24iLCBzS2Jk SW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCB9LCAvKiBhbGlhcyAqLwotQEAg LTE2NDMsNiArMTY2NiwxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2 ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAotIAkJaW50cHRyID0gJm9wdGlvbnMtPmdz c19hdXRoZW50aWNhdGlvbjsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLSAKLSsJY2FzZSBzR3NzS2V5 RXg6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2tleWV4OwotKwkJZ290byBwYXJzZV9mbGFn OwotKwotIAljYXNlIHNHc3NDbGVhbnVwQ3JlZHM6Ci0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3Nz X2NsZWFudXBfY3JlZHM7Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci1AQCAtMTY1MSw2ICsxNjc4LDIy IEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlv bnMsIGNoYXIgKmxpbmUsCi0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRv cjsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLSAKLSsJY2FzZSBzR3NzU3RvcmVSZWtleToKLSsJCWlu dHB0ciA9ICZvcHRpb25zLT5nc3Nfc3RvcmVfcmVrZXk7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0r Ci0rCWNhc2Ugc0dzc0tleEFsZ29yaXRobXM6Ci0rCQlhcmcgPSBhcmd2X25leHQoJmFjLCAmYXYp OwotKwkJaWYgKCFhcmcgfHwgKmFyZyA9PSAnXDAnKQotKwkJCWZhdGFsKCIlLjIwMHMgbGluZSAl ZDogTWlzc2luZyBhcmd1bWVudC4iLAotKwkJCSAgICBmaWxlbmFtZSwgbGluZW51bSk7Ci0rCQlp ZiAoIWtleF9nc3NfbmFtZXNfdmFsaWQoYXJnKSkKLSsJCQlmYXRhbCgiJS4yMDBzIGxpbmUgJWQ6 IEJhZCBHU1NBUEkgS2V4QWxnb3JpdGhtcyAnJXMnLiIsCi0rCQkJICAgIGZpbGVuYW1lLCBsaW5l bnVtLCBhcmcgPyBhcmcgOiAiPE5PTkU+Iik7Ci0rCQlpZiAoKmFjdGl2ZXAgJiYgb3B0aW9ucy0+ Z3NzX2tleF9hbGdvcml0aG1zID09IE5VTEwpCi0rCQkJb3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0 aG1zID0geHN0cmR1cChhcmcpOwotKwkJYnJlYWs7Ci0rCi0gCWNhc2Ugc1Bhc3N3b3JkQXV0aGVu dGljYXRpb246Ci0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb247 Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci1AQCAtMzI1Niw3ICszMjk5LDEwIEBAIGR1bXBfY29uZmln KFNlcnZlck9wdGlvbnMgKm8pCi0gI2lmZGVmIEdTU0FQSQotIAlkdW1wX2NmZ19mbXRpbnQoc0dz c0F1dGhlbnRpY2F0aW9uLCBvLT5nc3NfYXV0aGVudGljYXRpb24pOwotIAlkdW1wX2NmZ19mbXRp bnQoc0dzc0NsZWFudXBDcmVkcywgby0+Z3NzX2NsZWFudXBfY3JlZHMpOwotKwlkdW1wX2NmZ19m bXRpbnQoc0dzc0tleUV4LCBvLT5nc3Nfa2V5ZXgpOwotIAlkdW1wX2NmZ19mbXRpbnQoc0dzc1N0 cmljdEFjY2VwdG9yLCBvLT5nc3Nfc3RyaWN0X2FjY2VwdG9yKTsKLSsJZHVtcF9jZmdfZm10aW50 KHNHc3NTdG9yZVJla2V5LCBvLT5nc3Nfc3RvcmVfcmVrZXkpOwotKwlkdW1wX2NmZ19zdHJpbmco c0dzc0tleEFsZ29yaXRobXMsIG8tPmdzc19rZXhfYWxnb3JpdGhtcyk7Ci0gI2VuZGlmCi0gCWR1 bXBfY2ZnX2ZtdGludChzUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwgby0+cGFzc3dvcmRfYXV0aGVu dGljYXRpb24pOwotIAlkdW1wX2NmZ19mbXRpbnQoc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRp b24sCi1kaWZmIC0tZ2l0IGEvc2VydmNvbmYuaCBiL3NlcnZjb25mLmgKLWluZGV4IDliZWI5MGZh ZS4uYzNmNTAxNDAwIDEwMDY0NAotLS0tIGEvc2VydmNvbmYuaAotKysrIGIvc2VydmNvbmYuaAot QEAgLTE1MCw4ICsxNTAsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgewotIAlpbnQgICAgIGtlcmJlcm9z X2dldF9hZnNfdG9rZW47CQkvKiBJZiB0cnVlLCB0cnkgdG8gZ2V0IEFGUyB0b2tlbiBpZgotIAkJ CQkJCSAqIGF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJvcy4gKi8KLSAJaW50ICAgICBnc3NfYXV0 aGVudGljYXRpb247CS8qIElmIHRydWUsIHBlcm1pdCBHU1NBUEkgYXV0aGVudGljYXRpb24gKi8K LSsJaW50ICAgICBnc3Nfa2V5ZXg7CQkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGtleSBleGNo YW5nZSAqLwotIAlpbnQgICAgIGdzc19jbGVhbnVwX2NyZWRzOwkvKiBJZiB0cnVlLCBkZXN0cm95 IGNyZWQgY2FjaGUgb24gbG9nb3V0ICovCi0gCWludCAgICAgZ3NzX3N0cmljdF9hY2NlcHRvcjsJ LyogSWYgdHJ1ZSwgcmVzdHJpY3QgdGhlIEdTU0FQSSBhY2NlcHRvciBuYW1lICovCi0rCWludCAJ Z3NzX3N0b3JlX3Jla2V5OwotKwljaGFyICAgKmdzc19rZXhfYWxnb3JpdGhtczsJLyogR1NTQVBJ IGtleCBtZXRob2RzIHRvIGJlIG9mZmVyZWQgYnkgY2xpZW50LiAqLwotIAlpbnQgICAgIHBhc3N3 b3JkX2F1dGhlbnRpY2F0aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgcGFzc3dvcmQKLSAJCQkJCQkg KiBhdXRoZW50aWNhdGlvbi4gKi8KLSAJaW50ICAgICBrYmRfaW50ZXJhY3RpdmVfYXV0aGVudGlj YXRpb247CS8qIElmIHRydWUsIHBlcm1pdCAqLwotZGlmZiAtLWdpdCBhL3Nlc3Npb24uYyBiL3Nl c3Npb24uYwotaW5kZXggZjI2NWZkYzNlLi5iOGYwYzFhNTggMTAwNjQ0Ci0tLS0gYS9zZXNzaW9u LmMKLSsrKyBiL3Nlc3Npb24uYwotQEAgLTI2MzAsMTMgKzI2MzAsMTkgQEAgZG9fY2xlYW51cChz dHJ1Y3Qgc3NoICpzc2gsIEF1dGhjdHh0ICphdXRoY3R4dCkKLSAKLSAjaWZkZWYgS1JCNQotIAlp ZiAob3B0aW9ucy5rZXJiZXJvc190aWNrZXRfY2xlYW51cCAmJgotLQkgICAgYXV0aGN0eHQtPmty YjVfY3R4KQotKwkgICAgYXV0aGN0eHQtPmtyYjVfY3R4KSB7Ci0rCQl0ZW1wb3JhcmlseV91c2Vf dWlkKGF1dGhjdHh0LT5wdyk7Ci0gCQlrcmI1X2NsZWFudXBfcHJvYyhhdXRoY3R4dCk7Ci0rCQly ZXN0b3JlX3VpZCgpOwotKwl9Ci0gI2VuZGlmCi0gCi0gI2lmZGVmIEdTU0FQSQotLQlpZiAob3B0 aW9ucy5nc3NfY2xlYW51cF9jcmVkcykKLSsJaWYgKG9wdGlvbnMuZ3NzX2NsZWFudXBfY3JlZHMp IHsKLSsJCXRlbXBvcmFyaWx5X3VzZV91aWQoYXV0aGN0eHQtPnB3KTsKLSAJCXNzaF9nc3NhcGlf Y2xlYW51cF9jcmVkcygpOwotKwkJcmVzdG9yZV91aWQoKTsKLSsJfQotICNlbmRpZgotIAotIAkv KiByZW1vdmUgYWdlbnQgc29ja2V0ICovCi1kaWZmIC0tZ2l0IGEvc3NoLWdzcy5oIGIvc3NoLWdz cy5oCi1pbmRleCA3YjE0ZTc0YTguLjhlYzQ1MTkyNiAxMDA2NDQKLS0tLSBhL3NzaC1nc3MuaAot KysrIGIvc3NoLWdzcy5oCi1AQCAtNjEsMTAgKzYxLDM2IEBACi0gCi0gI2RlZmluZSBTU0hfR1NT X09JRFRZUEUgMHgwNgotIAotKyNkZWZpbmUgU1NIMl9NU0dfS0VYR1NTX0lOSVQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMzAKLSsjZGVmaW5lIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSAg ICAgICAgICAgICAgICAgICAgICAgIDMxCi0rI2RlZmluZSBTU0gyX01TR19LRVhHU1NfQ09NUExF VEUgICAgICAgICAgICAgICAgICAgICAgICAzMgotKyNkZWZpbmUgU1NIMl9NU0dfS0VYR1NTX0hP U1RLRVkgICAgICAgICAgICAgICAgICAgICAgICAgMzMKLSsjZGVmaW5lIFNTSDJfTVNHX0tFWEdT U19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0Ci0rI2RlZmluZSBTU0gyX01TR19L RVhHU1NfR1JPVVBSRVEJCQk0MAotKyNkZWZpbmUgU1NIMl9NU0dfS0VYR1NTX0dST1VQCQkJCTQx Ci0rI2RlZmluZSBLRVhfR1NTX0dSUDFfU0hBMV9JRAkJCQkiZ3NzLWdyb3VwMS1zaGExLSIKLSsj ZGVmaW5lIEtFWF9HU1NfR1JQMTRfU0hBMV9JRAkJCQkiZ3NzLWdyb3VwMTQtc2hhMS0iCi0rI2Rl ZmluZSBLRVhfR1NTX0dSUDE0X1NIQTI1Nl9JRAkJCSJnc3MtZ3JvdXAxNC1zaGEyNTYtIgotKyNk ZWZpbmUgS0VYX0dTU19HUlAxNl9TSEE1MTJfSUQJCQkiZ3NzLWdyb3VwMTYtc2hhNTEyLSIKLSsj ZGVmaW5lIEtFWF9HU1NfR0VYX1NIQTFfSUQJCQkJImdzcy1nZXgtc2hhMS0iCi0rI2RlZmluZSBL RVhfR1NTX05JU1RQMjU2X1NIQTI1Nl9JRAkJCSJnc3MtbmlzdHAyNTYtc2hhMjU2LSIKLSsjZGVm aW5lIEtFWF9HU1NfQzI1NTE5X1NIQTI1Nl9JRAkJCSJnc3MtY3VydmUyNTUxOS1zaGEyNTYtIgot KwotKyNkZWZpbmUgICAgICAgIEdTU19LRVhfREVGQVVMVF9LRVggXAotKwlLRVhfR1NTX0dSUDE0 X1NIQTI1Nl9JRCAiLCIgXAotKwlLRVhfR1NTX0dSUDE2X1NIQTUxMl9JRAkiLCIgXAotKwlLRVhf R1NTX05JU1RQMjU2X1NIQTI1Nl9JRCAiLCIgXAotKwlLRVhfR1NTX0MyNTUxOV9TSEEyNTZfSUQg IiwiIFwKLSsJS0VYX0dTU19HUlAxNF9TSEExX0lEICIsIiBcCi0rCUtFWF9HU1NfR0VYX1NIQTFf SUQKLSsKLSsjaW5jbHVkZSAiZGlnZXN0LmgiIC8qIFNTSF9ESUdFU1RfTUFYX0xFTkdUSCAqLwot KwotIHR5cGVkZWYgc3RydWN0IHsKLSAJY2hhciAqZmlsZW5hbWU7Ci0gCWNoYXIgKmVudnZhcjsK LSAJY2hhciAqZW52dmFsOwotKwlzdHJ1Y3QgcGFzc3dkICpvd25lcjsKLSAJdm9pZCAqZGF0YTsK LSB9IHNzaF9nc3NhcGlfY2NhY2hlOwotIAotQEAgLTcyLDggKzk4LDExIEBAIHR5cGVkZWYgc3Ry dWN0IHsKLSAJZ3NzX2J1ZmZlcl9kZXNjIGRpc3BsYXluYW1lOwotIAlnc3NfYnVmZmVyX2Rlc2Mg ZXhwb3J0ZWRuYW1lOwotIAlnc3NfY3JlZF9pZF90IGNyZWRzOwotKwlnc3NfbmFtZV90IG5hbWU7 Ci0gCXN0cnVjdCBzc2hfZ3NzYXBpX21lY2hfc3RydWN0ICptZWNoOwotIAlzc2hfZ3NzYXBpX2Nj YWNoZSBzdG9yZTsKLSsJaW50IHVzZWQ7Ci0rCWludCB1cGRhdGVkOwotIH0gc3NoX2dzc2FwaV9j bGllbnQ7Ci0gCi0gdHlwZWRlZiBzdHJ1Y3Qgc3NoX2dzc2FwaV9tZWNoX3N0cnVjdCB7Ci1AQCAt ODQsNiArMTEzLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3NoX2dzc2FwaV9tZWNoX3N0cnVjdCB7Ci0g CWludCAoKnVzZXJvaykgKHNzaF9nc3NhcGlfY2xpZW50ICosIGNoYXIgKik7Ci0gCWludCAoKmxv Y2FsbmFtZSkgKHNzaF9nc3NhcGlfY2xpZW50ICosIGNoYXIgKiopOwotIAl2b2lkICgqc3RvcmVj cmVkcykgKHNzaF9nc3NhcGlfY2xpZW50ICopOwotKwlpbnQgKCp1cGRhdGVjcmVkcykgKHNzaF9n c3NhcGlfY2NhY2hlICosIHNzaF9nc3NhcGlfY2xpZW50ICopOwotIH0gc3NoX2dzc2FwaV9tZWNo OwotIAotIHR5cGVkZWYgc3RydWN0IHsKLUBAIC05NCwxMCArMTI0LDIxIEBAIHR5cGVkZWYgc3Ry dWN0IHsKLSAJZ3NzX09JRAkJb2lkOyAvKiBjbGllbnQgKi8KLSAJZ3NzX2NyZWRfaWRfdAljcmVk czsgLyogc2VydmVyICovCi0gCWdzc19uYW1lX3QJY2xpZW50OyAvKiBzZXJ2ZXIgKi8KLS0JZ3Nz X2NyZWRfaWRfdAljbGllbnRfY3JlZHM7IC8qIHNlcnZlciAqLwotKwlnc3NfY3JlZF9pZF90CWNs aWVudF9jcmVkczsgLyogYm90aCAqLwotKwlzdHJ1Y3Qgc3NoYnVmICpzaGFyZWRfc2VjcmV0OyAv KiBib3RoICovCi0rCXN0cnVjdCBzc2hidWYgKnNlcnZlcl9wdWJrZXk7IC8qIHNlcnZlciAqLwot KwlzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxvYjsgLyogY2xpZW50ICovCi0rCXN0cnVjdCBzc2hi dWYgKnNlcnZlcl9ob3N0X2tleV9ibG9iOyAvKiBjbGllbnQgKi8KLSsJZ3NzX2J1ZmZlcl9kZXNj IG1zZ190b2s7IC8qIGNsaWVudCAqLwotKwlnc3NfYnVmZmVyX2Rlc2MgYnVmOyAvKiBib3RoICov Ci0rCXVfY2hhciBoYXNoW1NTSF9ESUdFU1RfTUFYX0xFTkdUSF07IC8qIGJvdGggKi8KLSsJc2l6 ZV90IGhhc2hsZW47IC8qIGJvdGggKi8KLSsJaW50IGZpcnN0OyAvKiBjbGllbnQgKi8KLSsJQklH TlVNICpkaF9jbGllbnRfcHViOyAvKiBzZXJ2ZXIgKGdleCkgKi8KLSB9IEdzc2N0eHQ7Ci0gCi0g ZXh0ZXJuIHNzaF9nc3NhcGlfbWVjaCAqc3VwcG9ydGVkX21lY2hzW107Ci0rZXh0ZXJuIEdzc2N0 eHQgKmdzc19rZXhfY29udGV4dDsKLSAKLSBpbnQgIHNzaF9nc3NhcGlfY2hlY2tfb2lkKEdzc2N0 eHQgKiwgdm9pZCAqLCBzaXplX3QpOwotIHZvaWQgc3NoX2dzc2FwaV9zZXRfb2lkX2RhdGEoR3Nz Y3R4dCAqLCB2b2lkICosIHNpemVfdCk7Ci1AQCAtMTA4LDYgKzE0OSw3IEBAIE9NX3VpbnQzMiBz c2hfZ3NzYXBpX3Rlc3Rfb2lkX3N1cHBvcnRlZChPTV91aW50MzIgKiwgZ3NzX09JRCwgaW50ICop OwotIAotIHN0cnVjdCBzc2hidWY7Ci0gaW50IHNzaF9nc3NhcGlfZ2V0X2J1ZmZlcl9kZXNjKHN0 cnVjdCBzc2hidWYgKiwgZ3NzX2J1ZmZlcl9kZXNjICopOwotK2ludCBzc2hfZ3NzYXBpX3NzaHBr dF9nZXRfYnVmZmVyX2Rlc2Moc3RydWN0IHNzaCAqLCBnc3NfYnVmZmVyX2Rlc2MgKik7Ci0gCi0g T01fdWludDMyIHNzaF9nc3NhcGlfaW1wb3J0X25hbWUoR3NzY3R4dCAqLCBjb25zdCBjaGFyICop OwotIE9NX3VpbnQzMiBzc2hfZ3NzYXBpX2luaXRfY3R4KEdzc2N0eHQgKiwgaW50LAotQEAgLTEy MiwxNyArMTY0LDMzIEBAIHZvaWQgc3NoX2dzc2FwaV9kZWxldGVfY3R4KEdzc2N0eHQgKiopOwot IE9NX3VpbnQzMiBzc2hfZ3NzYXBpX3NpZ24oR3NzY3R4dCAqLCBnc3NfYnVmZmVyX3QsIGdzc19i dWZmZXJfdCk7Ci0gdm9pZCBzc2hfZ3NzYXBpX2J1aWxkbWljKHN0cnVjdCBzc2hidWYgKiwgY29u c3QgY2hhciAqLAotICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0 IHNzaGJ1ZiAqKTsKLS1pbnQgc3NoX2dzc2FwaV9jaGVja19tZWNoYW5pc20oR3NzY3R4dCAqKiwg Z3NzX09JRCwgY29uc3QgY2hhciAqKTsKLStpbnQgc3NoX2dzc2FwaV9jaGVja19tZWNoYW5pc20o R3NzY3R4dCAqKiwgZ3NzX09JRCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotK09NX3Vp bnQzMiBzc2hfZ3NzYXBpX2NsaWVudF9pZGVudGl0eShHc3NjdHh0ICosIGNvbnN0IGNoYXIgKik7 Ci0raW50IHNzaF9nc3NhcGlfY3JlZGVudGlhbHNfdXBkYXRlZChHc3NjdHh0ICopOwotIAotIC8q IEluIHRoZSBzZXJ2ZXIgKi8KLSt0eXBlZGVmIGludCBzc2hfZ3NzYXBpX2NoZWNrX2ZuKEdzc2N0 eHQgKiosIGdzc19PSUQsIGNvbnN0IGNoYXIgKiwKLSsgICAgY29uc3QgY2hhciAqKTsKLStjaGFy ICpzc2hfZ3NzYXBpX2NsaWVudF9tZWNoYW5pc21zKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICopOwotK2NoYXIgKnNzaF9nc3NhcGlfa2V4X21lY2hzKGdzc19PSURfc2V0 LCBzc2hfZ3NzYXBpX2NoZWNrX2ZuICosIGNvbnN0IGNoYXIgKiwKLSsgICAgY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICopOwotK2dzc19PSUQgc3NoX2dzc2FwaV9pZF9rZXgoR3NzY3R4dCAqLCBj aGFyICosIGludCk7Ci0raW50IHNzaF9nc3NhcGlfc2VydmVyX2NoZWNrX21lY2goR3NzY3R4dCAq Kixnc3NfT0lELCBjb25zdCBjaGFyICosCi0rICAgIGNvbnN0IGNoYXIgKik7Ci0gT01fdWludDMy IHNzaF9nc3NhcGlfc2VydmVyX2N0eChHc3NjdHh0ICoqLCBnc3NfT0lEKTsKLS1pbnQgc3NoX2dz c2FwaV91c2Vyb2soY2hhciAqbmFtZSk7Ci0raW50IHNzaF9nc3NhcGlfdXNlcm9rKGNoYXIgKm5h bWUsIHN0cnVjdCBwYXNzd2QgKiwgaW50IGtleCk7Ci0gT01fdWludDMyIHNzaF9nc3NhcGlfY2hl Y2ttaWMoR3NzY3R4dCAqLCBnc3NfYnVmZmVyX3QsIGdzc19idWZmZXJfdCk7Ci0gdm9pZCBzc2hf Z3NzYXBpX2RvX2NoaWxkKGNoYXIgKioqLCB1X2ludCAqKTsKLSB2b2lkIHNzaF9nc3NhcGlfY2xl YW51cF9jcmVkcyh2b2lkKTsKLSB2b2lkIHNzaF9nc3NhcGlfc3RvcmVjcmVkcyh2b2lkKTsKLSBj b25zdCBjaGFyICpzc2hfZ3NzYXBpX2Rpc3BsYXluYW1lKHZvaWQpOwotIAotK2NoYXIgKnNzaF9n c3NhcGlfc2VydmVyX21lY2hhbmlzbXModm9pZCk7Ci0raW50IHNzaF9nc3NhcGlfb2lkX3RhYmxl X29rKHZvaWQpOwotKwotK2ludCBzc2hfZ3NzYXBpX3VwZGF0ZV9jcmVkcyhzc2hfZ3NzYXBpX2Nj YWNoZSAqc3RvcmUpOwotK3ZvaWQgc3NoX2dzc2FwaV9yZWtleV9jcmVkcyh2b2lkKTsKLSsKLSAj ZW5kaWYgLyogR1NTQVBJICovCi0gCi0gI2VuZGlmIC8qIF9TU0hfR1NTX0ggKi8KLWRpZmYgLS1n aXQgYS9zc2guMSBiL3NzaC4xCi1pbmRleCBkYjkyYWM5YWYuLjZhOWZiZGM1YiAxMDA2NDQKLS0t LSBhL3NzaC4xCi0rKysgYi9zc2guMQotQEAgLTUzOSw5ICs1MzksMTUgQEAgRm9yIGZ1bGwgZGV0 YWlscyBvZiB0aGUgb3B0aW9ucyBsaXN0ZWQgYmVsb3csIGFuZCB0aGVpciBwb3NzaWJsZSB2YWx1 ZXMsIHNlZQotIC5JdCBGb3J3YXJkWDExVGltZW91dAotIC5JdCBGb3J3YXJkWDExVHJ1c3RlZAot IC5JdCBHU1NBUElBdXRoZW50aWNhdGlvbgotKy5JdCBHU1NBUElLZXlFeGNoYW5nZQotKy5JdCBH U1NBUElDbGllbnRJZGVudGl0eQotIC5JdCBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCi0gLkl0 IEdhdGV3YXlQb3J0cwotIC5JdCBHbG9iYWxLbm93bkhvc3RzRmlsZQotKy5JdCBHU1NBUElLZXhB bGdvcml0aG1zCi0rLkl0IEdTU0FQSVJlbmV3YWxGb3JjZXNSZWtleQotKy5JdCBHU1NBUElTZXJ2 ZXJJZGVudGl0eQotKy5JdCBHU1NBUElUcnVzdERucwotIC5JdCBIYXNoS25vd25Ib3N0cwotIC5J dCBIb3N0Ci0gLkl0IEhvc3RLZXlBbGdvcml0aG1zCi1AQCAtNjM2LDYgKzY0Miw4IEBAIGZsYWcp LAotIChzdXBwb3J0ZWQgbWVzc2FnZSBpbnRlZ3JpdHkgY29kZXMpLAotIC5BciBrZXgKLSAoa2V5 IGV4Y2hhbmdlIGFsZ29yaXRobXMpLAotKy5BciBrZXgtZ3NzCi0rKEdTU0FQSSBrZXkgZXhjaGFu Z2UgYWxnb3JpdGhtcyksCi0gLkFyIGtleQotIChrZXkgdHlwZXMpLAotIC5BciBrZXktY2Etc2ln bgotZGlmZiAtLWdpdCBhL3NzaC5jIGIvc3NoLmMKLWluZGV4IDNiMDMxMDhkYi4uOGQyN2Y2Mzc5 IDEwMDY0NAotLS0tIGEvc3NoLmMKLSsrKyBiL3NzaC5jCi1AQCAtODQ3LDYgKzg0Nyw4IEBAIG1h aW4oaW50IGFjLCBjaGFyICoqYXYpCi0gCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImtleCIp ID09IDAgfHwKLSAJCQkgICAgc3RyY2FzZWNtcChvcHRhcmcsICJLZXhBbGdvcml0aG1zIikgPT0g MCkKLSAJCQkJY3AgPSBrZXhfYWxnX2xpc3QoJ1xuJyk7Ci0rCQkJZWxzZSBpZiAoc3RyY21wKG9w dGFyZywgImtleC1nc3MiKSA9PSAwKQotKwkJCQljcCA9IGtleF9nc3NfYWxnX2xpc3QoJ1xuJyk7 Ci0gCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImtleSIpID09IDApCi0gCQkJCWNwID0gc3No a2V5X2FsZ19saXN0KDAsIDAsIDAsICdcbicpOwotIAkJCWVsc2UgaWYgKHN0cmNtcChvcHRhcmcs ICJrZXktY2VydCIpID09IDApCi1AQCAtODc3LDggKzg3OSw4IEBAIG1haW4oaW50IGFjLCBjaGFy ICoqYXYpCi0gCQkJfSBlbHNlIGlmIChzdHJjbXAob3B0YXJnLCAiaGVscCIpID09IDApIHsKLSAJ CQkJY3AgPSB4c3RyZHVwKAotIAkJCQkgICAgImNpcGhlclxuY2lwaGVyLWF1dGhcbmNvbXByZXNz aW9uXG5rZXhcbiIKLS0JCQkJICAgICJrZXlcbmtleS1jZXJ0XG5rZXktcGxhaW5cbmtleS1zaWdc bm1hY1xuIgotLQkJCQkgICAgInByb3RvY29sLXZlcnNpb25cbnNpZyIpOwotKwkJCQkgICAgImtl eC1nc3NcbmtleVxua2V5LWNlcnRcbmtleS1wbGFpblxuIgotKwkJCQkgICAgImtleS1zaWdcbm1h Y1xucHJvdG9jb2wtdmVyc2lvblxuc2lnIik7Ci0gCQkJfQotIAkJCWlmIChjcCA9PSBOVUxMKQot IAkJCQlmYXRhbCgiVW5zdXBwb3J0ZWQgcXVlcnkgXCIlc1wiIiwgb3B0YXJnKTsKLWRpZmYgLS1n aXQgYS9zc2hfY29uZmlnIGIvc3NoX2NvbmZpZwotaW5kZXggZDkzMjRjOTU3Li5jYTdjNTg1M2Ig MTAwNjQ0Ci0tLS0gYS9zc2hfY29uZmlnCi0rKysgYi9zc2hfY29uZmlnCi1AQCAtMjQsNiArMjQs OCBAQAotICMgICBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBubwotICMgICBHU1NBUElBdXRoZW50 aWNhdGlvbiBubwotICMgICBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzIG5vCi0rIyAgIEdTU0FQ SUtleUV4Y2hhbmdlIG5vCi0rIyAgIEdTU0FQSVRydXN0RE5TIG5vCi0gIyAgIEJhdGNoTW9kZSBu bwotICMgICBDaGVja0hvc3RJUCBubwotICMgICBBZGRyZXNzRmFtaWx5IGFueQotZGlmZiAtLWdp dCBhL3NzaF9jb25maWcuNSBiL3NzaF9jb25maWcuNQotaW5kZXggZjcwNjZjYmFhLi44YTRiNDY5 Y2YgMTAwNjQ0Ci0tLS0gYS9zc2hfY29uZmlnLjUKLSsrKyBiL3NzaF9jb25maWcuNQotQEAgLTk3 NiwxMCArOTc2LDY4IEBAIFRoZSBkZWZhdWx0IGlzCi0gU3BlY2lmaWVzIHdoZXRoZXIgdXNlciBh dXRoZW50aWNhdGlvbiBiYXNlZCBvbiBHU1NBUEkgaXMgYWxsb3dlZC4KLSBUaGUgZGVmYXVsdCBp cwotIC5DbSBubyAuCi0rLkl0IENtIEdTU0FQSUNsaWVudElkZW50aXR5Ci0rSWYgc2V0LCBzcGVj aWZpZXMgdGhlIEdTU0FQSSBjbGllbnQgaWRlbnRpdHkgdGhhdCBzc2ggc2hvdWxkIHVzZSB3aGVu Ci0rY29ubmVjdGluZyB0byB0aGUgc2VydmVyLiBUaGUgZGVmYXVsdCBpcyB1bnNldCwgd2hpY2gg bWVhbnMgdGhhdCB0aGUgZGVmYXVsdAotK2lkZW50aXR5IHdpbGwgYmUgdXNlZC4KLSAuSXQgQ20g R1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscwotIEZvcndhcmQgKGRlbGVnYXRlKSBjcmVkZW50aWFs cyB0byB0aGUgc2VydmVyLgotIFRoZSBkZWZhdWx0IGlzCi0gLkNtIG5vIC4KLSsuSXQgQ20gR1NT QVBJS2V5RXhjaGFuZ2UKLStTcGVjaWZpZXMgd2hldGhlciBrZXkgZXhjaGFuZ2UgYmFzZWQgb24g R1NTQVBJIG1heSBiZSB1c2VkLiBXaGVuIHVzaW5nCi0rR1NTQVBJIGtleSBleGNoYW5nZSB0aGUg c2VydmVyIG5lZWQgbm90IGhhdmUgYSBob3N0IGtleS4KLStUaGUgZGVmYXVsdCBpcwotKy5EcSBu byAuCi0rLkl0IENtIEdTU0FQSVJlbmV3YWxGb3JjZXNSZWtleQotK0lmIHNldCB0bwotKy5EcSB5 ZXMKLSt0aGVuIHJlbmV3YWwgb2YgdGhlIGNsaWVudCdzIEdTU0FQSSBjcmVkZW50aWFscyB3aWxs IGZvcmNlIHRoZSByZWtleWluZyBvZiB0aGUKLStzc2ggY29ubmVjdGlvbi4gV2l0aCBhIGNvbXBh dGlibGUgc2VydmVyLCB0aGlzIHdpbGwgZGVsZWdhdGUgdGhlIHJlbmV3ZWQKLStjcmVkZW50aWFs cyB0byBhIHNlc3Npb24gb24gdGhlIHNlcnZlci4KLSsuUHAKLStDaGVja3MgYXJlIG1hZGUgdG8g ZW5zdXJlIHRoYXQgY3JlZGVudGlhbHMgYXJlIG9ubHkgcHJvcGFnYXRlZCB3aGVuIHRoZSBuZXcK LStjcmVkZW50aWFscyBtYXRjaCB0aGUgb2xkIG9uZXMgb24gdGhlIG9yaWdpbmF0aW5nIGNsaWVu dCBhbmQgd2hlcmUgdGhlCi0rcmVjZWl2aW5nIHNlcnZlciBzdGlsbCBoYXMgdGhlIG9sZCBzZXQg aW4gaXRzIGNhY2hlLgotKy5QcAotK1RoZSBkZWZhdWx0IGlzCi0rLkRxIG5vIC4KLSsuUHAKLStG b3IgdGhpcyB0byB3b3JrCi0rLkNtIEdTU0FQSUtleUV4Y2hhbmdlCi0rbmVlZHMgdG8gYmUgZW5h YmxlZCBpbiB0aGUgc2VydmVyIGFuZCBhbHNvIHVzZWQgYnkgdGhlIGNsaWVudC4KLSsuSXQgQ20g R1NTQVBJU2VydmVySWRlbnRpdHkKLStJZiBzZXQsIHNwZWNpZmllcyB0aGUgR1NTQVBJIHNlcnZl ciBpZGVudGl0eSB0aGF0IHNzaCBzaG91bGQgZXhwZWN0IHdoZW4KLStjb25uZWN0aW5nIHRvIHRo ZSBzZXJ2ZXIuIFRoZSBkZWZhdWx0IGlzIHVuc2V0LCB3aGljaCBtZWFucyB0aGF0IHRoZQotK2V4 cGVjdGVkIEdTU0FQSSBzZXJ2ZXIgaWRlbnRpdHkgd2lsbCBiZSBkZXRlcm1pbmVkIGZyb20gdGhl IHRhcmdldAotK2hvc3RuYW1lLgotKy5JdCBDbSBHU1NBUElUcnVzdERucwotK1NldCB0bwotKy5E cSB5ZXMKLSt0byBpbmRpY2F0ZSB0aGF0IHRoZSBETlMgaXMgdHJ1c3RlZCB0byBzZWN1cmVseSBj YW5vbmljYWxpemUKLSt0aGUgbmFtZSBvZiB0aGUgaG9zdCBiZWluZyBjb25uZWN0ZWQgdG8uIElm Ci0rLkRxIG5vICwKLSt0aGUgaG9zdG5hbWUgZW50ZXJlZCBvbiB0aGUKLStjb21tYW5kIGxpbmUg d2lsbCBiZSBwYXNzZWQgdW50b3VjaGVkIHRvIHRoZSBHU1NBUEkgbGlicmFyeS4KLStUaGUgZGVm YXVsdCBpcwotKy5EcSBubyAuCi0rLkl0IENtIEdTU0FQSUtleEFsZ29yaXRobXMKLStUaGUgbGlz dCBvZiBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtcyB0aGF0IGFyZSBvZmZlcmVkIGZvciBHU1NBUEkK LStrZXkgZXhjaGFuZ2UuIFBvc3NpYmxlIHZhbHVlcyBhcmUKLSsuQmQgLWxpdGVyYWwgLW9mZnNl dCAzbgotK2dzcy1nZXgtc2hhMS0sCi0rZ3NzLWdyb3VwMS1zaGExLSwKLStnc3MtZ3JvdXAxNC1z aGExLSwKLStnc3MtZ3JvdXAxNC1zaGEyNTYtLAotK2dzcy1ncm91cDE2LXNoYTUxMi0sCi0rZ3Nz LW5pc3RwMjU2LXNoYTI1Ni0sCi0rZ3NzLWN1cnZlMjU1MTktc2hhMjU2LQotKy5FZAotKy5QcAot K1RoZSBkZWZhdWx0IGlzCi0rLkRxIGdzcy1ncm91cDE0LXNoYTI1Ni0sZ3NzLWdyb3VwMTYtc2hh NTEyLSxnc3MtbmlzdHAyNTYtc2hhMjU2LSwKLStnc3MtY3VydmUyNTUxOS1zaGEyNTYtLGdzcy1n cm91cDE0LXNoYTEtLGdzcy1nZXgtc2hhMS0gLgotK1RoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0 byBjb25uZWN0aW9ucyB1c2luZyBHU1NBUEkuCi0gLkl0IENtIEhhc2hLbm93bkhvc3RzCi0gSW5k aWNhdGVzIHRoYXQKLSAuWHIgc3NoIDEKLWRpZmYgLS1naXQgYS9zc2hjb25uZWN0Mi5jIGIvc3No Y29ubmVjdDIuYwotaW5kZXggYjM2NzljOWQ3Li5iMjUzZjk5MWIgMTAwNjQ0Ci0tLS0gYS9zc2hj b25uZWN0Mi5jCi0rKysgYi9zc2hjb25uZWN0Mi5jCi1AQCAtMjIyLDYgKzIyMiwxMSBAQCBzc2hf a2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFk ZHIsIHVfc2hvcnQgcG9ydCwKLSAJY2hhciAqYWxsX2tleSwgKmhrYWxncyA9IE5VTEw7Ci0gCWlu dCByLCB1c2Vfa25vd25faG9zdHNfb3JkZXIgPSAwOwotIAotKyNpZiBkZWZpbmVkKEdTU0FQSSkg JiYgZGVmaW5lZChXSVRIX09QRU5TU0wpCi0rCWNoYXIgKm9yaWcgPSBOVUxMLCAqZ3NzID0gTlVM TDsKLSsJY2hhciAqZ3NzX2hvc3QgPSBOVUxMOwotKyNlbmRpZgotKwotIAl4eHhfaG9zdCA9IGhv c3Q7Ci0gCXh4eF9ob3N0YWRkciA9IGhvc3RhZGRyOwotIAl4eHhfY29ubl9pbmZvID0gY2luZm87 Ci1AQCAtMjU1LDYgKzI2MCw0MiBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhv c3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwKLSAJICAgIGNvbXBy ZXNzaW9uX2FsZ19saXN0KG9wdGlvbnMuY29tcHJlc3Npb24pLAotIAkgICAgaGthbGdzID8gaGth bGdzIDogb3B0aW9ucy5ob3N0a2V5YWxnb3JpdGhtcyk7Ci0gCi0rI2lmIGRlZmluZWQoR1NTQVBJ KSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkKLSsJaWYgKG9wdGlvbnMuZ3NzX2tleWV4KSB7Ci0r CQkvKiBBZGQgdGhlIEdTU0FQSSBtZWNoYW5pc21zIGN1cnJlbnRseSBzdXBwb3J0ZWQgb24gdGhp cwotKwkJICogY2xpZW50IHRvIHRoZSBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtIHByb3Bvc2FsICov Ci0rCQlvcmlnID0gbXlwcm9wb3NhbFtQUk9QT1NBTF9LRVhfQUxHU107Ci0rCi0rCQlpZiAob3B0 aW9ucy5nc3Nfc2VydmVyX2lkZW50aXR5KSB7Ci0rCQkJZ3NzX2hvc3QgPSB4c3RyZHVwKG9wdGlv bnMuZ3NzX3NlcnZlcl9pZGVudGl0eSk7Ci0rCQl9IGVsc2UgaWYgKG9wdGlvbnMuZ3NzX3RydXN0 X2RucykgewotKwkJCWdzc19ob3N0ID0gcmVtb3RlX2hvc3RuYW1lKHNzaCk7Ci0rCQkJLyogRmFs bCBiYWNrIHRvIHNwZWNpZmllZCBob3N0IGlmIHdlIGFyZSB1c2luZyBwcm94eSBjb21tYW5kCi0r CQkJICogYW5kIGNhbiBub3QgdXNlIEROUyBvbiB0aGF0IHNvY2tldCAqLwotKwkJCWlmIChzdHJj bXAoZ3NzX2hvc3QsICJVTktOT1dOIikgPT0gMCkgewotKwkJCQlmcmVlKGdzc19ob3N0KTsKLSsJ CQkJZ3NzX2hvc3QgPSB4c3RyZHVwKGhvc3QpOwotKwkJCX0KLSsJCX0gZWxzZSB7Ci0rCQkJZ3Nz X2hvc3QgPSB4c3RyZHVwKGhvc3QpOwotKwkJfQotKwotKwkJZ3NzID0gc3NoX2dzc2FwaV9jbGll bnRfbWVjaGFuaXNtcyhnc3NfaG9zdCwKLSsJCSAgICBvcHRpb25zLmdzc19jbGllbnRfaWRlbnRp dHksIG9wdGlvbnMuZ3NzX2tleF9hbGdvcml0aG1zKTsKLSsJCWlmIChnc3MpIHsKLSsJCQlkZWJ1 ZygiT2ZmZXJpbmcgR1NTQVBJIHByb3Bvc2FsOiAlcyIsIGdzcyk7Ci0rCQkJeGFzcHJpbnRmKCZt eXByb3Bvc2FsW1BST1BPU0FMX0tFWF9BTEdTXSwKLSsJCQkgICAgIiVzLCVzIiwgZ3NzLCBvcmln KTsKLSsKLSsJCQkvKiBJZiB3ZSd2ZSBnb3QgR1NTQVBJIGFsZ29yaXRobXMsIHRoZW4gd2UgYWxz byBzdXBwb3J0IHRoZQotKwkJCSAqICdudWxsJyBob3N0a2V5LCBhcyBhIGxhc3QgcmVzb3J0ICov Ci0rCQkJb3JpZyA9IG15cHJvcG9zYWxbUFJPUE9TQUxfU0VSVkVSX0hPU1RfS0VZX0FMR1NdOwot KwkJCXhhc3ByaW50ZigmbXlwcm9wb3NhbFtQUk9QT1NBTF9TRVJWRVJfSE9TVF9LRVlfQUxHU10s Ci0rCQkJICAgICIlcyxudWxsIiwgb3JpZyk7Ci0rCQl9Ci0rCX0KLSsjZW5kaWYKLSsKLSAJZnJl ZShoa2FsZ3MpOwotIAotIAkvKiBzdGFydCBrZXkgZXhjaGFuZ2UgKi8KLUBAIC0yNzEsMTUgKzMx Miw0NSBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2Nr YWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwKLSAjIGlmZGVmIE9QRU5TU0xfSEFTX0VDQwot IAlzc2gtPmtleC0+a2V4W0tFWF9FQ0RIX1NIQTJdID0ga2V4X2dlbl9jbGllbnQ7Ci0gIyBlbmRp ZgotLSNlbmRpZgotKyMgaWZkZWYgR1NTQVBJCi0rCWlmIChvcHRpb25zLmdzc19rZXlleCkgewot KwkJc3NoLT5rZXgtPmtleFtLRVhfR1NTX0dSUDFfU0hBMV0gPSBrZXhnc3NfY2xpZW50OwotKwkJ c3NoLT5rZXgtPmtleFtLRVhfR1NTX0dSUDE0X1NIQTFdID0ga2V4Z3NzX2NsaWVudDsKLSsJCXNz aC0+a2V4LT5rZXhbS0VYX0dTU19HUlAxNF9TSEEyNTZdID0ga2V4Z3NzX2NsaWVudDsKLSsJCXNz aC0+a2V4LT5rZXhbS0VYX0dTU19HUlAxNl9TSEE1MTJdID0ga2V4Z3NzX2NsaWVudDsKLSsJCXNz aC0+a2V4LT5rZXhbS0VYX0dTU19HRVhfU0hBMV0gPSBrZXhnc3NnZXhfY2xpZW50OwotKwkJc3No LT5rZXgtPmtleFtLRVhfR1NTX05JU1RQMjU2X1NIQTI1Nl0gPSBrZXhnc3NfY2xpZW50OwotKwkJ c3NoLT5rZXgtPmtleFtLRVhfR1NTX0MyNTUxOV9TSEEyNTZdID0ga2V4Z3NzX2NsaWVudDsKLSsJ fQotKyMgZW5kaWYKLSsjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCi0gCXNzaC0+a2V4LT5rZXhb S0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7Ci0gCXNzaC0+a2V4LT5rZXhbS0VY X0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fY2xpZW50OwotIAlzc2gtPmtl eC0+a2V4W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fY2xpZW50Owot IAlzc2gtPmtleC0+dmVyaWZ5X2hvc3Rfa2V5PSZ2ZXJpZnlfaG9zdF9rZXlfY2FsbGJhY2s7Ci0g Ci0rI2lmIGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkKLSsJaWYgKG9w dGlvbnMuZ3NzX2tleWV4KSB7Ci0rCQlzc2gtPmtleC0+Z3NzX2RlbGVnX2NyZWRzID0gb3B0aW9u cy5nc3NfZGVsZWdfY3JlZHM7Ci0rCQlzc2gtPmtleC0+Z3NzX3RydXN0X2RucyA9IG9wdGlvbnMu Z3NzX3RydXN0X2RuczsKLSsJCXNzaC0+a2V4LT5nc3NfY2xpZW50ID0gb3B0aW9ucy5nc3NfY2xp ZW50X2lkZW50aXR5OwotKwkJc3NoLT5rZXgtPmdzc19ob3N0ID0gZ3NzX2hvc3Q7Ci0rCX0KLSsj ZW5kaWYKLSsKLSAJc3NoX2Rpc3BhdGNoX3J1bl9mYXRhbChzc2gsIERJU1BBVENIX0JMT0NLLCAm c3NoLT5rZXgtPmRvbmUpOwotIAlrZXhfcHJvcG9zYWxfZnJlZV9lbnRyaWVzKG15cHJvcG9zYWwp OwotIAotKyNpZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpCi0rCS8q IHJlcGFpciBteXByb3Bvc2FsIGFmdGVyIGl0IHdhcyBjcnVtcGxlZCBieSB0aGUgKi8KLSsJLyog ZXh0LWluZm8gcmVtb3ZhbCBhYm92ZSAqLwotKwlpZiAoZ3NzKSB7Ci0rCQlvcmlnID0gbXlwcm9w b3NhbFtQUk9QT1NBTF9LRVhfQUxHU107Ci0rCQl4YXNwcmludGYoJm15cHJvcG9zYWxbUFJPUE9T QUxfS0VYX0FMR1NdLAotKwkJICAgICIlcywlcyIsIGdzcywgb3JpZyk7Ci0rCQlmcmVlKGdzcyk7 Ci0rCX0KLSsjZW5kaWYKLSAjaWZkZWYgREVCVUdfS0VYREgKLSAJLyogc2VuZCAxc3QgZW5jcnlw dGVkL21hY2VkL2NvbXByZXNzZWQgbWVzc2FnZSAqLwotIAlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQo c3NoLCBTU0gyX01TR19JR05PUkUpKSAhPSAwIHx8Ci1AQCAtMzY5LDYgKzQ0MCw3IEBAIHN0YXRp YyBpbnQgaW5wdXRfZ3NzYXBpX3Jlc3BvbnNlKGludCB0eXBlLCB1X2ludDMyX3QsIHN0cnVjdCBz c2ggKik7Ci0gc3RhdGljIGludCBpbnB1dF9nc3NhcGlfdG9rZW4oaW50IHR5cGUsIHVfaW50MzJf dCwgc3RydWN0IHNzaCAqKTsKLSBzdGF0aWMgaW50IGlucHV0X2dzc2FwaV9lcnJvcihpbnQsIHVf aW50MzJfdCwgc3RydWN0IHNzaCAqKTsKLSBzdGF0aWMgaW50IGlucHV0X2dzc2FwaV9lcnJ0b2so aW50LCB1X2ludDMyX3QsIHN0cnVjdCBzc2ggKik7Ci0rc3RhdGljIGludCB1c2VyYXV0aF9nc3Nr ZXlleChzdHJ1Y3Qgc3NoICopOwotICNlbmRpZgotIAotIHZvaWQJdXNlcmF1dGgoc3RydWN0IHNz aCAqLCBjaGFyICopOwotQEAgLTM4NSw2ICs0NTcsMTEgQEAgc3RhdGljIGNoYXIgKmF1dGhtZXRo b2RzX2dldCh2b2lkKTsKLSAKLSBBdXRobWV0aG9kIGF1dGhtZXRob2RzW10gPSB7Ci0gI2lmZGVm IEdTU0FQSQotKwl7Imdzc2FwaS1rZXlleCIsCi0rCQl1c2VyYXV0aF9nc3NrZXlleCwKLSsJCU5V TEwsCi0rCQkmb3B0aW9ucy5nc3Nfa2V5ZXgsCi0rCQlOVUxMfSwKLSAJeyJnc3NhcGktd2l0aC1t aWMiLAotIAkJdXNlcmF1dGhfZ3NzYXBpLAotIAkJdXNlcmF1dGhfZ3NzYXBpX2NsZWFudXAsCi1A QCAtNzU5LDEyICs4MzYsMzIgQEAgdXNlcmF1dGhfZ3NzYXBpKHN0cnVjdCBzc2ggKnNzaCkKLSAJ T01fdWludDMyIG1pbjsKLSAJaW50IHIsIG9rID0gMDsKLSAJZ3NzX09JRCBtZWNoID0gTlVMTDsK LSsJY2hhciAqZ3NzX2hvc3QgPSBOVUxMOwotKwotKwlpZiAob3B0aW9ucy5nc3Nfc2VydmVyX2lk ZW50aXR5KSB7Ci0rCQlnc3NfaG9zdCA9IHhzdHJkdXAob3B0aW9ucy5nc3Nfc2VydmVyX2lkZW50 aXR5KTsKLSsJfSBlbHNlIGlmIChvcHRpb25zLmdzc190cnVzdF9kbnMpIHsKLSsJCWdzc19ob3N0 ID0gcmVtb3RlX2hvc3RuYW1lKHNzaCk7Ci0rCQkvKiBGYWxsIGJhY2sgdG8gc3BlY2lmaWVkIGhv c3QgaWYgd2UgYXJlIHVzaW5nIHByb3h5IGNvbW1hbmQKLSsJCSAqIGFuZCBjYW4gbm90IHVzZSBE TlMgb24gdGhhdCBzb2NrZXQgKi8KLSsJCWlmIChzdHJjbXAoZ3NzX2hvc3QsICJVTktOT1dOIikg PT0gMCkgewotKwkJCWZyZWUoZ3NzX2hvc3QpOwotKwkJCWdzc19ob3N0ID0geHN0cmR1cChhdXRo Y3R4dC0+aG9zdCk7Ci0rCQl9Ci0rCX0gZWxzZSB7Ci0rCQlnc3NfaG9zdCA9IHhzdHJkdXAoYXV0 aGN0eHQtPmhvc3QpOwotKwl9Ci0gCi0gCS8qIFRyeSBvbmUgR1NTQVBJIG1ldGhvZCBhdCBhIHRp bWUsIHJhdGhlciB0aGFuIHNlbmRpbmcgdGhlbSBhbGwgYXQKLSAJICogb25jZS4gKi8KLSAKLSAJ aWYgKGF1dGhjdHh0LT5nc3Nfc3VwcG9ydGVkX21lY2hzID09IE5VTEwpCi0tCQlnc3NfaW5kaWNh dGVfbWVjaHMoJm1pbiwgJmF1dGhjdHh0LT5nc3Nfc3VwcG9ydGVkX21lY2hzKTsKLSsJCWlmIChH U1NfRVJST1IoZ3NzX2luZGljYXRlX21lY2hzKCZtaW4sCi0rCQkgICAgJmF1dGhjdHh0LT5nc3Nf c3VwcG9ydGVkX21lY2hzKSkpIHsKLSsJCQlhdXRoY3R4dC0+Z3NzX3N1cHBvcnRlZF9tZWNocyA9 IE5VTEw7Ci0rCQkJZnJlZShnc3NfaG9zdCk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0gCi0gCS8q IENoZWNrIHRvIHNlZSB3aGV0aGVyIHRoZSBtZWNoYW5pc20gaXMgdXNhYmxlIGJlZm9yZSB3ZSBv ZmZlciBpdCAqLwotIAl3aGlsZSAoYXV0aGN0eHQtPm1lY2hfdHJpZWQgPCBhdXRoY3R4dC0+Z3Nz X3N1cHBvcnRlZF9tZWNocy0+Y291bnQgJiYKLUBAIC03NzMsMTMgKzg3MCwxNSBAQCB1c2VyYXV0 aF9nc3NhcGkoc3RydWN0IHNzaCAqc3NoKQotIAkJICAgIGVsZW1lbnRzW2F1dGhjdHh0LT5tZWNo X3RyaWVkXTsKLSAJCS8qIE15IERFUiBlbmNvZGluZyByZXF1aXJlcyBsZW5ndGg8MTI4ICovCi0g CQlpZiAobWVjaC0+bGVuZ3RoIDwgMTI4ICYmIHNzaF9nc3NhcGlfY2hlY2tfbWVjaGFuaXNtKCZn c3NjdHh0LAotLQkJICAgIG1lY2gsIGF1dGhjdHh0LT5ob3N0KSkgewotKwkJICAgIG1lY2gsIGdz c19ob3N0LCBvcHRpb25zLmdzc19jbGllbnRfaWRlbnRpdHkpKSB7Ci0gCQkJb2sgPSAxOyAvKiBN ZWNoYW5pc20gd29ya3MgKi8KLSAJCX0gZWxzZSB7Ci0gCQkJYXV0aGN0eHQtPm1lY2hfdHJpZWQr KzsKLSAJCX0KLSAJfQotIAotKwlmcmVlKGdzc19ob3N0KTsKLSsKLSAJaWYgKCFvayB8fCBtZWNo ID09IE5VTEwpCi0gCQlyZXR1cm4gMDsKLSAKLUBAIC0xMDEzLDYgKzExMTIsNTUgQEAgaW5wdXRf Z3NzYXBpX2Vycm9yKGludCB0eXBlLCB1X2ludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKQot IAlmcmVlKGxhbmcpOwotIAlyZXR1cm4gcjsKLSB9Ci0rCi0raW50Ci0rdXNlcmF1dGhfZ3Nza2V5 ZXgoc3RydWN0IHNzaCAqc3NoKQotK3sKLSsJc3RydWN0IHNzaGJ1ZiAqYiA9IE5VTEw7Ci0rCUF1 dGhjdHh0ICphdXRoY3R4dCA9IHNzaC0+YXV0aGN0eHQ7Ci0rCWdzc19idWZmZXJfZGVzYyBnc3Ni dWY7Ci0rCWdzc19idWZmZXJfZGVzYyBtaWMgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0rCU9NX3Vp bnQzMiBtczsKLSsJaW50IHI7Ci0rCi0rCXN0YXRpYyBpbnQgYXR0ZW1wdCA9IDA7Ci0rCWlmIChh dHRlbXB0KysgPj0gMSkKLSsJCXJldHVybiAoMCk7Ci0rCi0rCWlmIChnc3Nfa2V4X2NvbnRleHQg PT0gTlVMTCkgewotKwkJZGVidWcoIk5vIHZhbGlkIEtleSBleGNoYW5nZSBjb250ZXh0Iik7Ci0r CQlyZXR1cm4gKDApOwotKwl9Ci0rCi0rCWlmICgoYiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkK LSsJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7Ci0rCi0rCXNzaF9nc3NhcGlfYnVpbGRt aWMoYiwgYXV0aGN0eHQtPnNlcnZlcl91c2VyLCBhdXRoY3R4dC0+c2VydmljZSwKLSsJICAgICJn c3NhcGkta2V5ZXgiLCBzc2gtPmtleC0+c2Vzc2lvbl9pZCk7Ci0rCi0rCWlmICgoZ3NzYnVmLnZh bHVlID0gc3NoYnVmX211dGFibGVfcHRyKGIpKSA9PSBOVUxMKQotKwkJZmF0YWxfZigic3NoYnVm X211dGFibGVfcHRyIGZhaWxlZCIpOwotKwlnc3NidWYubGVuZ3RoID0gc3NoYnVmX2xlbihiKTsK LSsKLSsJaWYgKEdTU19FUlJPUihzc2hfZ3NzYXBpX3NpZ24oZ3NzX2tleF9jb250ZXh0LCAmZ3Nz YnVmLCAmbWljKSkpIHsKLSsJCXNzaGJ1Zl9mcmVlKGIpOwotKwkJcmV0dXJuICgwKTsKLSsJfQot KwotKwlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19VU0VSQVVUSF9SRVFVRVNU KSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBhdXRoY3R4dC0+ c2VydmVyX3VzZXIpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gs IGF1dGhjdHh0LT5zZXJ2aWNlKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJp bmcoc3NoLCBhdXRoY3R4dC0+bWV0aG9kLT5uYW1lKSkgIT0gMCB8fAotKwkgICAgKHIgPSBzc2hw a3RfcHV0X3N0cmluZyhzc2gsIG1pYy52YWx1ZSwgbWljLmxlbmd0aCkpICE9IDAgfHwKLSsJICAg IChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKLSsJCWZhdGFsX2ZyKHIsICJwYXJzaW5nIik7 Ci0rCi0rCXNzaGJ1Zl9mcmVlKGIpOwotKwlnc3NfcmVsZWFzZV9idWZmZXIoJm1zLCAmbWljKTsK LSsKLSsJcmV0dXJuICgxKTsKLSt9Ci0rCi0gI2VuZGlmIC8qIEdTU0FQSSAqLwotIAotIHN0YXRp YyBpbnQKLWRpZmYgLS1naXQgYS9zc2hkLWF1dGguYyBiL3NzaGQtYXV0aC5jCi1pbmRleCA5YzMx NTE1ZGUuLjVhNGVlNzMzYyAxMDA2NDQKLS0tLSBhL3NzaGQtYXV0aC5jCi0rKysgYi9zc2hkLWF1 dGguYwotQEAgLTY5Niw3ICs2OTYsNyBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQotIAkJCWJy ZWFrOwotIAkJfQotIAl9Ci0tCWlmICghaGF2ZV9rZXkpCi0rCWlmICghaGF2ZV9rZXkgJiYgIW9w dGlvbnMuZ3NzX2tleWV4KQotIAkJZmF0YWwoImludGVybmFsIGVycm9yOiByZWNlaXZlZCBubyBo b3N0a2V5cyIpOwotIAotIAkvKiBFbnN1cmUgdGhhdCB1bWFzayBkaXNhbGxvd3MgYXQgbGVhc3Qg Z3JvdXAgYW5kIHdvcmxkIHdyaXRlICovCi1AQCAtODE5LDYgKzgxOSw0OCBAQCBkb19zc2gyX2tl eChzdHJ1Y3Qgc3NoICpzc2gpCi0gCi0gCWZyZWUoaGthbGdzKTsKLSAKLSsjaWYgZGVmaW5lZChH U1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NMKQotKwl7Ci0rCWNoYXIgKm9yaWc7Ci0rCWNo YXIgKmdzcyA9IE5VTEw7Ci0rCWNoYXIgKm5ld3N0ciA9IE5VTEw7Ci0rCW9yaWcgPSBteXByb3Bv c2FsW1BST1BPU0FMX0tFWF9BTEdTXTsKLSsKLSsJLyoKLSsJICogSWYgd2UgZG9uJ3QgaGF2ZSBh IGhvc3Qga2V5LCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgYWR2ZXJ0aXNpbmcKLSsJICogdGhlIG90 aGVyIGtleSBleGNoYW5nZSBhbGdvcml0aG1zCi0rCSAqLwotKwotKwlpZiAoc3RybGVuKG15cHJv cG9zYWxbUFJPUE9TQUxfU0VSVkVSX0hPU1RfS0VZX0FMR1NdKSA9PSAwKQotKwkJb3JpZyA9IE5V TEw7Ci0rCi0rCWlmIChvcHRpb25zLmdzc19rZXlleCkKLSsJCWdzcyA9IHNzaF9nc3NhcGlfc2Vy dmVyX21lY2hhbmlzbXMoKTsKLSsJZWxzZQotKwkJZ3NzID0gTlVMTDsKLSsKLSsJaWYgKGdzcyAm JiBvcmlnKQotKwkJeGFzcHJpbnRmKCZuZXdzdHIsICIlcywlcyIsIGdzcywgb3JpZyk7Ci0rCWVs c2UgaWYgKGdzcykKLSsJCXhhc3ByaW50ZigmbmV3c3RyLCAiJXMsJXMiLCBnc3MsICJrZXgtc3Ry aWN0LXMtdjAwQG9wZW5zc2guY29tIik7Ci0rCWVsc2UgaWYgKG9yaWcpCi0rCQluZXdzdHIgPSBv cmlnOwotKwotKwkvKgotKwkgKiBJZiB3ZSd2ZSBnb3QgR1NTQVBJIG1lY2hhbmlzbXMsIHRoZW4g d2UndmUgZ290IHRoZSAnbnVsbCcgaG9zdAotKwkgKiBrZXkgYWxnLCBidXQgd2UgY2FuJ3QgdGVs bCBwZW9wbGUgYWJvdXQgaXQgdW5sZXNzIGl0cyB0aGUgb25seQotKwkgKiBob3N0IGtleSBhbGdv cml0aG0gd2Ugc3VwcG9ydAotKwkgKi8KLSsJaWYgKGdzcyAmJiAoc3RybGVuKG15cHJvcG9zYWxb UFJPUE9TQUxfU0VSVkVSX0hPU1RfS0VZX0FMR1NdKSkgPT0gMCkKLSsJCW15cHJvcG9zYWxbUFJP UE9TQUxfU0VSVkVSX0hPU1RfS0VZX0FMR1NdID0geHN0cmR1cCgibnVsbCIpOwotKwotKwlpZiAo bmV3c3RyKQotKwkJbXlwcm9wb3NhbFtQUk9QT1NBTF9LRVhfQUxHU10gPSBuZXdzdHI7Ci0rCWVs c2UKLSsJCWZhdGFsKCJObyBzdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMiKTsKLSsJ fQotKyNlbmRpZgotKwotIAkvKiBzdGFydCBrZXkgZXhjaGFuZ2UgKi8KLSAJaWYgKChyID0ga2V4 X3NldHVwKHNzaCwgbXlwcm9wb3NhbCkpICE9IDApCi0gCQlmYXRhbF9yKHIsICJrZXhfc2V0dXAi KTsKLUBAIC04MzYsNiArODc4LDE3IEBAIGRvX3NzaDJfa2V4KHN0cnVjdCBzc2ggKnNzaCkKLSAj IGlmZGVmIE9QRU5TU0xfSEFTX0VDQwotIAlrZXgtPmtleFtLRVhfRUNESF9TSEEyXSA9IGtleF9n ZW5fc2VydmVyOwotICMgZW5kaWYgLyogT1BFTlNTTF9IQVNfRUNDICovCi0rIyBpZmRlZiBHU1NB UEkKLSsJaWYgKG9wdGlvbnMuZ3NzX2tleWV4KSB7Ci0rCQlrZXgtPmtleFtLRVhfR1NTX0dSUDFf U0hBMV0gPSBrZXhnc3Nfc2VydmVyOwotKwkJa2V4LT5rZXhbS0VYX0dTU19HUlAxNF9TSEExXSA9 IGtleGdzc19zZXJ2ZXI7Ci0rCQlrZXgtPmtleFtLRVhfR1NTX0dSUDE0X1NIQTI1Nl0gPSBrZXhn c3Nfc2VydmVyOwotKwkJa2V4LT5rZXhbS0VYX0dTU19HUlAxNl9TSEE1MTJdID0ga2V4Z3NzX3Nl cnZlcjsKLSsJCWtleC0+a2V4W0tFWF9HU1NfR0VYX1NIQTFdID0ga2V4Z3NzZ2V4X3NlcnZlcjsK LSsJCWtleC0+a2V4W0tFWF9HU1NfTklTVFAyNTZfU0hBMjU2XSA9IGtleGdzc19zZXJ2ZXI7Ci0r CQlrZXgtPmtleFtLRVhfR1NTX0MyNTUxOV9TSEEyNTZdID0ga2V4Z3NzX3NlcnZlcjsKLSsJfQot KyMgZW5kaWYKLSAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCi0gCWtleC0+a2V4W0tFWF9DMjU1 MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOwotIAlrZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2 MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7Ci1kaWZmIC0tZ2l0IGEvc3NoZC1zZXNz aW9uLmMgYi9zc2hkLXNlc3Npb24uYwotaW5kZXggOTgwNGRjMzM0Li42ZTI4MDIwZTkgMTAwNjQ0 Ci0tLS0gYS9zc2hkLXNlc3Npb24uYwotKysrIGIvc3NoZC1zZXNzaW9uLmMKLUBAIC01OTIsOCAr NTkyLDggQEAgbm90aWZ5X2hvc3RrZXlzKHN0cnVjdCBzc2ggKnNzaCkKLSAJfQotIAlkZWJ1ZzNf Zigic2VudCAldSBob3N0a2V5cyIsIG5rZXlzKTsKLSAJaWYgKG5rZXlzID09IDApCi0tCQlmYXRh bF9mKCJubyBob3N0a2V5cyIpOwotLQlpZiAoKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKQot KwkJZGVidWczX2YoIm5vIGhvc3RrZXlzIik7Ci0rCWVsc2UgaWYgKChyID0gc3NocGt0X3NlbmQo c3NoKSkgIT0gMCkKLSAJCXNzaHBrdF9mYXRhbChzc2gsIHIsICIlczogc2VuZCIsIF9fZnVuY19f KTsKLSAJc3NoYnVmX2ZyZWUoYnVmKTsKLSB9Ci1AQCAtMTEzNSw4ICsxMTM1LDkgQEAgbWFpbihp bnQgYWMsIGNoYXIgKiphdikKLSAJCQlicmVhazsKLSAJCX0KLSAJfQotLQlpZiAoIWhhdmVfa2V5 KQotLQkJZmF0YWwoImludGVybmFsIGVycm9yOiBtb25pdG9yIHJlY2VpdmVkIG5vIGhvc3RrZXlz Iik7Ci0rCS8qIFRoZSBHU1NBUEkga2V5IGV4Y2hhbmdlIGNhbiBydW4gd2l0aG91dCBhIGhvc3Qg a2V5ICovCi0rCWlmICghaGF2ZV9rZXkgJiYgIW9wdGlvbnMuZ3NzX2tleWV4KQotKwkJZmF0YWwo ImludGVybmFsIGVycm9yOiBtb25pdG9yIHJlY2VpdmVkIG5vIGhvc3RrZXlzIGFuZCBHU1MgS0VY IGlzIG5vdCBjb25maWd1cmVkIik7Ci0gCi0gCS8qIEVuc3VyZSB0aGF0IHVtYXNrIGRpc2FsbG93 cyBhdCBsZWFzdCBncm91cCBhbmQgd29ybGQgd3JpdGUgKi8KLSAJbmV3X3VtYXNrID0gdW1hc2so MDA3NykgfCAwMDIyOwotZGlmZiAtLWdpdCBhL3NzaGQuYyBiL3NzaGQuYwotaW5kZXggM2M3NmI2 MGIwLi4zYWI4MWUyNjggMTAwNjQ0Ci0tLS0gYS9zc2hkLmMKLSsrKyBiL3NzaGQuYwotQEAgLTE2 NzYsNyArMTY3Niw4IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCi0gCQlmcmVlKGZwKTsKLSAJ fQotIAlhY2N1bXVsYXRlX2hvc3RfdGltaW5nX3NlY3JldChjZmcsIE5VTEwpOwotLQlpZiAoIXNl bnNpdGl2ZV9kYXRhLmhhdmVfc3NoMl9rZXkpIHsKLSsJLyogVGhlIEdTU0FQSSBrZXkgZXhjaGFu Z2UgY2FuIHJ1biB3aXRob3V0IGEgaG9zdCBrZXkgKi8KLSsJaWYgKCFzZW5zaXRpdmVfZGF0YS5o YXZlX3NzaDJfa2V5ICYmICFvcHRpb25zLmdzc19rZXlleCkgewotIAkJbG9naXQoInNzaGQ6IG5v IGhvc3RrZXlzIGF2YWlsYWJsZSAtLSBleGl0aW5nLiIpOwotIAkJZXhpdCgxKTsKLSAJfQotZGlm ZiAtLWdpdCBhL3NzaGRfY29uZmlnIGIvc3NoZF9jb25maWcKLWluZGV4IDQ4YWY2MzIxYi4uOGRi OWYwZmIxIDEwMDY0NAotLS0tIGEvc3NoZF9jb25maWcKLSsrKyBiL3NzaGRfY29uZmlnCi1AQCAt NzksNiArNzksOCBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRob3JpemVkX2tleXMKLSAj IEdTU0FQSSBvcHRpb25zCi0gI0dTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCi0gI0dTU0FQSUNsZWFu dXBDcmVkZW50aWFscyB5ZXMKLSsjR1NTQVBJU3RyaWN0QWNjZXB0b3JDaGVjayB5ZXMKLSsjR1NT QVBJS2V5RXhjaGFuZ2Ugbm8KLSAKLSAjIFNldCB0aGlzIHRvICd5ZXMnIHRvIGVuYWJsZSBQQU0g YXV0aGVudGljYXRpb24sIGFjY291bnQgcHJvY2Vzc2luZywKLSAjIGFuZCBzZXNzaW9uIHByb2Nl c3NpbmcuIElmIHRoaXMgaXMgZW5hYmxlZCwgUEFNIGF1dGhlbnRpY2F0aW9uIHdpbGwKLWRpZmYg LS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggYWE5ZjBhZjc2Li5i OTAwNjhiZjMgMTAwNjQ0Ci0tLS0gYS9zc2hkX2NvbmZpZy41Ci0rKysgYi9zc2hkX2NvbmZpZy41 Ci1AQCAtNzM5LDYgKzczOSwxMSBAQCBTcGVjaWZpZXMgd2hldGhlciB0byBhdXRvbWF0aWNhbGx5 IGRlc3Ryb3kgdGhlIHVzZXIncyBjcmVkZW50aWFscyBjYWNoZQotIG9uIGxvZ291dC4KLSBUaGUg ZGVmYXVsdCBpcwotIC5DbSB5ZXMgLgotKy5JdCBDbSBHU1NBUElLZXlFeGNoYW5nZQotK1NwZWNp ZmllcyB3aGV0aGVyIGtleSBleGNoYW5nZSBiYXNlZCBvbiBHU1NBUEkgaXMgYWxsb3dlZC4gR1NT QVBJIGtleSBleGNoYW5nZQotK2RvZXNuJ3QgcmVseSBvbiBzc2gga2V5cyB0byB2ZXJpZnkgaG9z dCBpZGVudGl0eS4KLStUaGUgZGVmYXVsdCBpcwotKy5DbSBubyAuCi0gLkl0IENtIEdTU0FQSVN0 cmljdEFjY2VwdG9yQ2hlY2sKLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYmUgc3RyaWN0IGFib3V0 IHRoZSBpZGVudGl0eSBvZiB0aGUgR1NTQVBJIGFjY2VwdG9yCi0gYSBjbGllbnQgYXV0aGVudGlj YXRlcyBhZ2FpbnN0LgotQEAgLTc1Myw2ICs3NTgsMzIgQEAgbWFjaGluZSdzIGRlZmF1bHQgc3Rv cmUuCi0gVGhpcyBmYWNpbGl0eSBpcyBwcm92aWRlZCB0byBhc3Npc3Qgd2l0aCBvcGVyYXRpb24g b24gbXVsdGkgaG9tZWQgbWFjaGluZXMuCi0gVGhlIGRlZmF1bHQgaXMKLSAuQ20geWVzIC4KLSsu SXQgQ20gR1NTQVBJU3RvcmVDcmVkZW50aWFsc09uUmVrZXkKLStDb250cm9scyB3aGV0aGVyIHRo ZSB1c2VyJ3MgR1NTQVBJIGNyZWRlbnRpYWxzIHNob3VsZCBiZSB1cGRhdGVkIGZvbGxvd2luZyBh Ci0rc3VjY2Vzc2Z1bCBjb25uZWN0aW9uIHJla2V5aW5nLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNl ZCB0byBhY2NlcHRlZCByZW5ld2VkCi0rb3IgdXBkYXRlZCBjcmVkZW50aWFscyBmcm9tIGEgY29t cGF0aWJsZSBjbGllbnQuIFRoZSBkZWZhdWx0IGlzCi0rLkRxIG5vIC4KLSsuUHAKLStGb3IgdGhp cyB0byB3b3JrCi0rLkNtIEdTU0FQSUtleUV4Y2hhbmdlCi0rbmVlZHMgdG8gYmUgZW5hYmxlZCBp biB0aGUgc2VydmVyIGFuZCBhbHNvIHVzZWQgYnkgdGhlIGNsaWVudC4KLSsuSXQgQ20gR1NTQVBJ S2V4QWxnb3JpdGhtcwotK1RoZSBsaXN0IG9mIGtleSBleGNoYW5nZSBhbGdvcml0aG1zIHRoYXQg YXJlIGFjY2VwdGVkIGJ5IEdTU0FQSQotK2tleSBleGNoYW5nZS4gUG9zc2libGUgdmFsdWVzIGFy ZQotKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0IDNuCi0rZ3NzLWdleC1zaGExLSwKLStnc3MtZ3JvdXAx LXNoYTEtLAotK2dzcy1ncm91cDE0LXNoYTEtLAotK2dzcy1ncm91cDE0LXNoYTI1Ni0sCi0rZ3Nz LWdyb3VwMTYtc2hhNTEyLSwKLStnc3MtbmlzdHAyNTYtc2hhMjU2LSwKLStnc3MtY3VydmUyNTUx OS1zaGEyNTYtCi0rLkVkCi0rLlBwCi0rVGhlIGRlZmF1bHQgaXMKLSsuRHEgZ3NzLWdyb3VwMTQt c2hhMjU2LSxnc3MtZ3JvdXAxNi1zaGE1MTItLGdzcy1uaXN0cDI1Ni1zaGEyNTYtLAotK2dzcy1j dXJ2ZTI1NTE5LXNoYTI1Ni0sZ3NzLWdyb3VwMTQtc2hhMS0sZ3NzLWdleC1zaGExLSAuCi0rVGhp cyBvcHRpb24gb25seSBhcHBsaWVzIHRvIGNvbm5lY3Rpb25zIHVzaW5nIEdTU0FQSS4KLSAuSXQg Q20gSG9zdGJhc2VkQWNjZXB0ZWRBbGdvcml0aG1zCi0gU3BlY2lmaWVzIHRoZSBzaWduYXR1cmUg YWxnb3JpdGhtcyB0aGF0IHdpbGwgYmUgYWNjZXB0ZWQgZm9yIGhvc3RiYXNlZAotIGF1dGhlbnRp Y2F0aW9uIGFzIGEgbGlzdCBvZiBjb21tYS1zZXBhcmF0ZWQgcGF0dGVybnMuCi1kaWZmIC0tZ2l0 IGEvc3Noa2V5LmMgYi9zc2hrZXkuYwotaW5kZXggYWZkNzgyMmM0Li4xNDhmZWUyYjcgMTAwNjQ0 Ci0tLS0gYS9zc2hrZXkuYwotKysrIGIvc3Noa2V5LmMKLUBAIC0xMTQsNiArMTE0LDc1IEBAIGV4 dGVybiBjb25zdCBzdHJ1Y3Qgc3Noa2V5X2ltcGwgc3Noa2V5X3JzYV9zaGE1MTJfaW1wbDsKLSBl eHRlcm4gY29uc3Qgc3RydWN0IHNzaGtleV9pbXBsIHNzaGtleV9yc2Ffc2hhNTEyX2NlcnRfaW1w bDsKLSAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCi0gCi0rc3RhdGljIGludCBzc2hfZ3NzX2Vx dWFsKGNvbnN0IHN0cnVjdCBzc2hrZXkgKiwgY29uc3Qgc3RydWN0IHNzaGtleSAqKQotK3sKLSsJ cmV0dXJuIFNTSF9FUlJfRkVBVFVSRV9VTlNVUFBPUlRFRDsKLSt9Ci0rCi0rc3RhdGljIGludCBz c2hfZ3NzX3NlcmlhbGl6ZV9wdWJsaWMoY29uc3Qgc3RydWN0IHNzaGtleSAqLCBzdHJ1Y3Qgc3No YnVmICosCi0rCWVudW0gc3Noa2V5X3NlcmlhbGl6ZV9yZXApCi0rewotKwlyZXR1cm4gU1NIX0VS Ul9GRUFUVVJFX1VOU1VQUE9SVEVEOwotK30KLSsKLStzdGF0aWMgaW50IHNzaF9nc3NfZGVzZXJp YWxpemVfcHVibGljKGNvbnN0IGNoYXIgKiwgc3RydWN0IHNzaGJ1ZiAqLAotKwkgICAgIHN0cnVj dCBzc2hrZXkgKikKLSt7Ci0rCXJldHVybiBTU0hfRVJSX0ZFQVRVUkVfVU5TVVBQT1JURUQ7Ci0r fQotKwotK3N0YXRpYyBpbnQgc3NoX2dzc19zZXJpYWxpemVfcHJpdmF0ZShjb25zdCBzdHJ1Y3Qg c3Noa2V5ICosIHN0cnVjdCBzc2hidWYgKiwKLSsJICAgICBlbnVtIHNzaGtleV9zZXJpYWxpemVf cmVwKQotK3sKLSsJcmV0dXJuIFNTSF9FUlJfRkVBVFVSRV9VTlNVUFBPUlRFRDsKLSt9Ci0rCi0r c3RhdGljIGludCBzc2hfZ3NzX2Rlc2VyaWFsaXplX3ByaXZhdGUoY29uc3QgY2hhciAqLCBzdHJ1 Y3Qgc3NoYnVmICosCi0rCSAgICAgc3RydWN0IHNzaGtleSAqKQotK3sKLSsJcmV0dXJuIFNTSF9F UlJfRkVBVFVSRV9VTlNVUFBPUlRFRDsKLSt9Ci0rCi0rc3RhdGljIGludCBzc2hfZ3NzX2NvcHlf cHVibGljKGNvbnN0IHN0cnVjdCBzc2hrZXkgKiwgc3RydWN0IHNzaGtleSAqKQotK3sKLSsJcmV0 dXJuIFNTSF9FUlJfRkVBVFVSRV9VTlNVUFBPUlRFRDsKLSt9Ci0rCi0rc3RhdGljIGludCBzc2hf Z3NzX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICosIGNvbnN0IHVfY2hhciAqLCBzaXplX3Qs Ci0rCSAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHVfaW50LAotKwkg ICAgc3RydWN0IHNzaGtleV9zaWdfZGV0YWlscyAqKikKLSt7Ci0rCXJldHVybiBTU0hfRVJSX0ZF QVRVUkVfVU5TVVBQT1JURUQ7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3Noa2V5X2lt cGxfZnVuY3Mgc3Noa2V5X2dzc19mdW5jcyA9IHsKLSsJLyogLnNpemUgPSAqLwkJTlVMTCwKLSsJ LyogLmFsbG9jID0gKi8JCU5VTEwsCi0rCS8qIC5jbGVhbnVwID0gKi8JTlVMTCwKLSsJLyogLmVx dWFsID0gKi8JCXNzaF9nc3NfZXF1YWwsCi0rCS8qIC5zc2hfc2VyaWFsaXplX3B1YmxpYyA9ICov IHNzaF9nc3Nfc2VyaWFsaXplX3B1YmxpYywKLSsJLyogLnNzaF9kZXNlcmlhbGl6ZV9wdWJsaWMg PSAqLyBzc2hfZ3NzX2Rlc2VyaWFsaXplX3B1YmxpYywKLSsJLyogLnNzaF9zZXJpYWxpemVfcHJp dmF0ZSA9ICovIHNzaF9nc3Nfc2VyaWFsaXplX3ByaXZhdGUsCi0rCS8qIC5zc2hfZGVzZXJpYWxp emVfcHJpdmF0ZSA9ICovIHNzaF9nc3NfZGVzZXJpYWxpemVfcHJpdmF0ZSwKLSsJLyogLmdlbmVy YXRlID0gKi8JTlVMTCwKLSsJLyogLmNvcHlfcHVibGljID0gKi8Jc3NoX2dzc19jb3B5X3B1Ymxp YywKLSsJLyogLnNpZ24gPSAqLwkJTlVMTCwKLSsJLyogLnZlcmlmeSA9ICovCQlzc2hfZ3NzX3Zl cmlmeSwKLSt9OwotKwotKy8qIFRoZSBzdHJ1Y3QgaXMgaW50ZW50aW9uYWxseSBkdW1teSBhbmQg aGFzIG5vIGdzcyBjYWxscyAqLwotK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3Noa2V5X2ltcGwgc3No a2V5X2dzc19rZXhfaW1wbCA9IHsKLSsJLyogLm5hbWUgPSAqLwkJIm51bGwiLAotKwkvKiAuc2hv cnRuYW1lID0gKi8JIm51bGwiLAotKwkvKiAuc2lnYWxnID0gKi8JCU5VTEwsCi0rCS8qIC50eXBl ID0gKi8JCUtFWV9OVUxMLAotKwkvKiAubmlkID0gKi8JCTAsCi0rCS8qIC5jZXJ0ID0gKi8JCTAs Ci0rCS8qIC5zaWdvbmx5ID0gKi8JMCwKLSsJLyogLmtleWJpdHMgPSAqLwkwLCAvKiBGSVhNRSAq LwotKwkvKiAuZnVuY3MgPSAqLwkJJnNzaGtleV9nc3NfZnVuY3MsCi0rfTsKLSsKLSBjb25zdCBz dHJ1Y3Qgc3Noa2V5X2ltcGwgKiBjb25zdCBrZXlpbXBsc1tdID0gewotIAkmc3Noa2V5X2VkMjU1 MTlfaW1wbCwKLSAJJnNzaGtleV9lZDI1NTE5X2NlcnRfaW1wbCwKLUBAIC0xNDQsNiArMjEzLDcg QEAgY29uc3Qgc3RydWN0IHNzaGtleV9pbXBsICogY29uc3Qga2V5aW1wbHNbXSA9IHsKLSAJJnNz aGtleV9yc2Ffc2hhNTEyX2ltcGwsCi0gCSZzc2hrZXlfcnNhX3NoYTUxMl9jZXJ0X2ltcGwsCi0g I2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwotKwkmc3Noa2V5X2dzc19rZXhfaW1wbCwKLSAJTlVM TAotIH07Ci0gCi1AQCAtMzE0LDcgKzM4NCw3IEBAIHNzaGtleV9hbGdfbGlzdChpbnQgY2VydHNf b25seSwgaW50IHBsYWluX29ubHksIGludCBpbmNsdWRlX3NpZ29ubHksIGNoYXIgc2VwKQotIAot IAlmb3IgKGkgPSAwOyBrZXlpbXBsc1tpXSAhPSBOVUxMOyBpKyspIHsKLSAJCWltcGwgPSBrZXlp bXBsc1tpXTsKLS0JCWlmIChpbXBsLT5uYW1lID09IE5VTEwpCi0rCQlpZiAoaW1wbC0+bmFtZSA9 PSBOVUxMIHx8IGltcGwtPnR5cGUgPT0gS0VZX05VTEwpCi0gCQkJY29udGludWU7Ci0gCQlpZiAo IWluY2x1ZGVfc2lnb25seSAmJiBpbXBsLT5zaWdvbmx5KQotIAkJCWNvbnRpbnVlOwotZGlmZiAt LWdpdCBhL3NzaGtleS5oIGIvc3Noa2V5LmgKLWluZGV4IGMzMjYyYjg5Ni4uOTMxZDFmNzliIDEw MDY0NAotLS0tIGEvc3Noa2V5LmgKLSsrKyBiL3NzaGtleS5oCi1AQCAtNjcsNiArNjcsNyBAQCBl bnVtIHNzaGtleV90eXBlcyB7Ci0gCUtFWV9FQ0RTQV9TS19DRVJULAotIAlLRVlfRUQyNTUxOV9T SywKLSAJS0VZX0VEMjU1MTlfU0tfQ0VSVCwKLSsJS0VZX05VTEwsCi0gCUtFWV9VTlNQRUMKLSB9 OwotIAotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAwMTItb3BlbnNzaC02LjZwMS1mb3Jj ZV9rcmIucGF0Y2ggYi8wMDEyLW9wZW5zc2gtNi42cDEtZm9yY2Vfa3JiLnBhdGNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGY3NWZiLi4wMDAwMDAwCi0tLSBhLzAwMTItb3BlbnNz aC02LjZwMS1mb3JjZV9rcmIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAot RnJvbSA1NzdiMGZlYTUzMjcwMjkyYmQwYjQ5NzllYjUzNjk2MTliMmY1YWRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29t PgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENI IDEyLzUzXSBvcGVuc3NoLTYuNnAxLWZvcmNlX2tyYgotCi0tLS0KLSBnc3Mtc2Vydi1rcmI1LmMg fCAxNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCi0g c2Vzc2lvbi5jICAgICAgIHwgIDIzICsrKysrKysKLSBzc2gtZ3NzLmggICAgICAgfCAgIDQgKysK LSBzc2hkLjggICAgICAgICAgfCAgIDcgKysrCi0gNCBmaWxlcyBjaGFuZ2VkLCAxODkgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvZ3NzLXNlcnYta3JiNS5jIGIv Z3NzLXNlcnYta3JiNS5jCi1pbmRleCA4ZDJiNjc3ZjcuLjE0NTAyYzVhNiAxMDA2NDQKLS0tLSBh L2dzcy1zZXJ2LWtyYjUuYwotKysrIGIvZ3NzLXNlcnYta3JiNS5jCi1AQCAtMzIsNyArMzIsOSBA QAotICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAKLSAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0rI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDx1bmlzdGQu aD4KLSAKLSAjaW5jbHVkZSAieG1hbGxvYy5oIgotICNpbmNsdWRlICJzc2hrZXkuaCIKLUBAIC00 NCw2ICs0Niw3IEBACi0gCi0gI2luY2x1ZGUgInNzaC1nc3MuaCIKLSAKLStleHRlcm4gQXV0aGN0 eHQgKnRoZV9hdXRoY3R4dDsKLSBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOwotIAotICNp ZmRlZiBIRUlNREFMCi1AQCAtNTUsNiArNTgsMTMgQEAgZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0 aW9uczsKLSAjIGluY2x1ZGUgPGdzc2FwaS9nc3NhcGlfa3JiNS5oPgotICNlbmRpZgotIAotKy8q IGFsbCBjb21tYW5kcyBhcmUgYWxsb3dlZCBieSBkZWZhdWx0ICovCi0rY2hhciAqKms1dXNlcnNf YWxsb3dlZF9jbWRzID0gTlVMTDsKLSsKLStzdGF0aWMgaW50IHNzaF9nc3NhcGlfazVsb2dpbl9l eGlzdHMoKTsKLStzdGF0aWMgaW50IHNzaF9nc3NhcGlfa3JiNV9jbWRvayhrcmI1X3ByaW5jaXBh bCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCi0rICAgIGludCk7Ci0rCi0gc3RhdGljIGty YjVfY29udGV4dCBrcmJfY29udGV4dCA9IE5VTEw7Ci0gCi0gLyogSW5pdGlhbGlzZSB0aGUga3Ji NSBsaWJyYXJ5LCBmb3IgdGhlIHN0dWZmIHRoYXQgR1NTQVBJIHdvbid0IGRvICovCi1AQCAtODcs NiArOTcsNyBAQCBzc2hfZ3NzYXBpX2tyYjVfdXNlcm9rKHNzaF9nc3NhcGlfY2xpZW50ICpjbGll bnQsIGNoYXIgKm5hbWUpCi0gCWtyYjVfcHJpbmNpcGFsIHByaW5jOwotIAlpbnQgcmV0dmFsOwot IAljb25zdCBjaGFyICplcnJtc2c7Ci0rCWludCBrNWxvZ2luX2V4aXN0czsKLSAKLSAJaWYgKHNz aF9nc3NhcGlfa3JiNV9pbml0KCkgPT0gMCkKLSAJCXJldHVybiAwOwotQEAgLTk4LDEwICsxMDks MjIgQEAgc3NoX2dzc2FwaV9rcmI1X3VzZXJvayhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBj aGFyICpuYW1lKQotIAkJa3JiNV9mcmVlX2Vycm9yX21lc3NhZ2Uoa3JiX2NvbnRleHQsIGVycm1z Zyk7Ci0gCQlyZXR1cm4gMDsKLSAJfQotLQlpZiAoa3JiNV9rdXNlcm9rKGtyYl9jb250ZXh0LCBw cmluYywgbmFtZSkpIHsKLSsJLyoga3JiNV9rdXNlcm9rKCkgcmV0dXJucyAxIGlmIC5rNWxvZ2lu IERORSBhbmQgdGhpcyBpcyBzZWxmLWxvZ2luLgotKwkgKiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0 byBjaGVjayAuazV1c2VycyBpbiB0aGF0IGNhc2UuICovCi0rCWs1bG9naW5fZXhpc3RzID0gc3No X2dzc2FwaV9rNWxvZ2luX2V4aXN0cygpOwotKwkvKiBOT1RFOiAuazVsb2dpbiBhbmQgLms1dXNl cnMgbXVzdCBvcGVuZWQgYXMgcm9vdCwgbm90IHRoZSB1c2VyLAotKwkgKiBiZWNhdXNlIGlmIHRo ZXkgYXJlIG9uIGEga3JiNS1wcm90ZWN0ZWQgZmlsZXN5c3RlbSwgdXNlciBjcmVkZW50aWFscwot KwkgKiB0byBhY2Nlc3MgdGhlc2UgZmlsZXMgYXJlbid0IGF2YWlsYWJsZSB5ZXQuICovCi0rCWlm IChrcmI1X2t1c2Vyb2soa3JiX2NvbnRleHQsIHByaW5jLCBuYW1lKSAmJiBrNWxvZ2luX2V4aXN0 cykgewotIAkJcmV0dmFsID0gMTsKLSAJCWxvZ2l0KCJBdXRob3JpemVkIHRvICVzLCBrcmI1IHBy aW5jaXBhbCAlcyAoa3JiNV9rdXNlcm9rKSIsCi0gCQkgICAgbmFtZSwgKGNoYXIgKiljbGllbnQt PmRpc3BsYXluYW1lLnZhbHVlKTsKLSsJfSBlbHNlIGlmIChzc2hfZ3NzYXBpX2tyYjVfY21kb2so cHJpbmMsIGNsaWVudC0+ZXhwb3J0ZWRuYW1lLnZhbHVlLAotKwkJbmFtZSwgazVsb2dpbl9leGlz dHMpKSB7Ci0rCQlyZXR2YWwgPSAxOwotKwkJbG9naXQoIkF1dGhvcml6ZWQgdG8gJXMsIGtyYjUg cHJpbmNpcGFsICVzICIKLSsJCSAgICAiKHNzaF9nc3NhcGlfa3JiNV9jbWRvaykiLAotKwkJICAg IG5hbWUsIChjaGFyICopY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSk7Ci0gCX0gZWxzZQotIAkJ cmV0dmFsID0gMDsKLSAKLUBAIC0xMDksNiArMTMyLDEzNyBAQCBzc2hfZ3NzYXBpX2tyYjVfdXNl cm9rKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKm5hbWUpCi0gCXJldHVybiByZXR2 YWw7Ci0gfQotIAotKy8qIFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiAuazVsb2dpbi4KLSsgKiBXZSBu ZWVkIHRoaXMgYXMgcGFydCBvZiBvdXIgLms1dXNlcnMgY2hlY2ssIGJlY2F1c2Uga3JiNV9rdXNl cm9rKCkKLSsgKiByZXR1cm5zIHN1Y2Nlc3MgaWYgLms1bG9naW4gRE5FIGFuZCB1c2VyIGlzIGxv Z2dpbmcgaW4gYXMgaGltc2VsZi4KLSsgKiBXaXRoIC5rNWxvZ2luIGFic2VudCBhbmQgLms1dXNl cnMgcHJlc2VudCwgd2UgZG9uJ3Qgd2FudCBhYnNlbmNlCi0rICogb2YgLms1bG9naW4gdG8gYXV0 aG9yaXplIHNlbGYtbG9naW4uICAoYWJzZW5jZSBvZiBib3RoIGlzIHJlcXVpcmVkKQotKyAqIFJl dHVybnMgMSBpZiAuazVsb2dpbiBpcyBhdmFpbGFibGUsIDAgb3RoZXJ3aXNlLgotKyAqLwotK3N0 YXRpYyBpbnQKLStzc2hfZ3NzYXBpX2s1bG9naW5fZXhpc3RzKCkKLSt7Ci0rCWNoYXIgZmlsZVtN QVhQQVRITEVOXTsKLSsJc3RydWN0IHBhc3N3ZCAqcHcgPSB0aGVfYXV0aGN0eHQtPnB3OwotKwot KwlzbnByaW50ZihmaWxlLCBzaXplb2YoZmlsZSksICIlcy8uazVsb2dpbiIsIHB3LT5wd19kaXIp OwotKwlyZXR1cm4gYWNjZXNzKGZpbGUsIEZfT0spID09IDA7Ci0rfQotKwotKy8qIGNoZWNrIC5r NXVzZXJzIGZvciBsb2dpbiBvciBjb21tYW5kIGF1dGhvcml6YXRpb24KLSsgKiBSZXR1cm5zIDEg aWYgcHJpbmNpcGFsIGlzIGF1dGhvcml6ZWQsIDAgb3RoZXJ3aXNlLgotKyAqIElmIHByaW5jaXBh bCBpcyBhdXRob3JpemVkLCAoZ2xvYmFsKSBrNXVzZXJzX2FsbG93ZWRfY21kcyBtYXkgYmUgcG9w dWxhdGVkLgotKyAqLwotK3N0YXRpYyBpbnQKLStzc2hfZ3NzYXBpX2tyYjVfY21kb2soa3JiNV9w cmluY2lwYWwgcHJpbmNpcGFsLCBjb25zdCBjaGFyICpuYW1lLAotKyAgICBjb25zdCBjaGFyICps dXNlciwgaW50IGs1bG9naW5fZXhpc3RzKQotK3sKLSsJRklMRSAqZnA7Ci0rCWNoYXIgZmlsZVtN QVhQQVRITEVOXTsKLSsJY2hhciAqbGluZSA9IE5VTEw7Ci0rCWNoYXIga3VzZXJbNjVdOyAvKiBt YXRjaCBrcmI1X2t1c2Vyb2soKSAqLwotKwlzdHJ1Y3Qgc3RhdCBzdDsKLSsJc3RydWN0IHBhc3N3 ZCAqcHcgPSB0aGVfYXV0aGN0eHQtPnB3OwotKwlpbnQgZm91bmRfcHJpbmNpcGFsID0gMDsKLSsJ aW50IG5jb21tYW5kcyA9IDAsIGFsbGNvbW1hbmRzID0gMDsKLSsJdV9sb25nIGxpbmVudW0gPSAw OwotKwlzaXplX3QgbGluZXNpemUgPSAwOwotKwotKwlzbnByaW50ZihmaWxlLCBzaXplb2YoZmls ZSksICIlcy8uazV1c2VycyIsIHB3LT5wd19kaXIpOwotKwkvKiBJZiBib3RoIC5rNWxvZ2luIGFu ZCAuazV1c2VycyBETkUsIHNlbGYtbG9naW4gaXMgb2suICovCi0rCWlmICghazVsb2dpbl9leGlz dHMgJiYgKGFjY2VzcyhmaWxlLCBGX09LKSA9PSAtMSkpIHsKLSsJCXJldHVybiAoa3JiNV9hbmFt ZV90b19sb2NhbG5hbWUoa3JiX2NvbnRleHQsIHByaW5jaXBhbCwKLSsJCSAgICBzaXplb2Yoa3Vz ZXIpLCBrdXNlcikgPT0gMCkgJiYKLSsJCSAgICAoc3RyY21wKGt1c2VyLCBsdXNlcikgPT0gMCk7 Ci0rCX0KLSsJaWYgKChmcCA9IGZvcGVuKGZpbGUsICJyIikpID09IE5VTEwpIHsKLSsJCWludCBz YXZlZF9lcnJubyA9IGVycm5vOwotKwkJLyogMm5kIGFjY2VzcyBjaGVjayB0byBlYXNlIGRlYnVn Z2luZyBpZiBmaWxlIHBlcm1zIGFyZSB3cm9uZy4KLSsJCSAqIEJ1dCB3ZSBkb24ndCB3YW50IHRv IHJlcG9ydCB0aGlzIGlmIC5rNXVzZXJzIHNpbXBseSBETkUuICovCi0rCQlpZiAoYWNjZXNzKGZp bGUsIEZfT0spID09IDApIHsKLSsJCQlsb2dpdCgiVXNlciAlcyBmb3BlbiAlcyBmYWlsZWQ6ICVz IiwKLSsJCQkgICAgcHctPnB3X25hbWUsIGZpbGUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7Ci0r CQl9Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwkvKiAuazV1c2VycyBtdXN0IGJlIG93bmVkIGVpdGhl ciBieSB0aGUgdXNlciBvciBieSByb290ICovCi0rCWlmIChmc3RhdChmaWxlbm8oZnApLCAmc3Qp ID09IC0xKSB7Ci0rCQkvKiBjYW4gaGFwcGVuLCBidXQgdmVyeSB3aWVyZCBlcnJvciBzbyByZXBv cnQgaXQgKi8KLSsJCWxvZ2l0KCJVc2VyICVzIGZzdGF0ICVzIGZhaWxlZDogJXMiLAotKwkJICAg IHB3LT5wd19uYW1lLCBmaWxlLCBzdHJlcnJvcihlcnJubykpOwotKwkJZmNsb3NlKGZwKTsKLSsJ CXJldHVybiAwOwotKwl9Ci0rCWlmICghKHN0LnN0X3VpZCA9PSBwdy0+cHdfdWlkIHx8IHN0LnN0 X3VpZCA9PSAwKSkgewotKwkJbG9naXQoIlVzZXIgJXMgJXMgaXMgbm90IG93bmVkIGJ5IHJvb3Qg b3IgdXNlciIsCi0rCQkgICAgcHctPnB3X25hbWUsIGZpbGUpOwotKwkJZmNsb3NlKGZwKTsKLSsJ CXJldHVybiAwOwotKwl9Ci0rCS8qIC5rNXVzZXJzIG11c3QgYmUgYSByZWd1bGFyIGZpbGUuICBr cmI1X2t1c2Vyb2soKSBkb2Vzbid0IGRvIHRoaXMKLSsJICAqIGNoZWNrLCBidXQgd2UgZG9uJ3Qg d2FudCB0byBiZSBkZWZpY2llbnQgaWYgdGhleSBhZGQgYSBjaGVjay4gKi8KLSsJaWYgKCFTX0lT UkVHKHN0LnN0X21vZGUpKSB7Ci0rCQlsb2dpdCgiVXNlciAlcyAlcyBpcyBub3QgYSByZWd1bGFy IGZpbGUiLCBwdy0+cHdfbmFtZSwgZmlsZSk7Ci0rCQlmY2xvc2UoZnApOwotKwkJcmV0dXJuIDA7 Ci0rCX0KLSsJLyogZmlsZSBleGlzdHM7IGluaXRpYWxpemUgazV1c2Vyc19hbGxvd2VkX2NtZHMg KHRvIG5vbmUhKSAqLwotKwlrNXVzZXJzX2FsbG93ZWRfY21kcyA9IHhjYWxsb2MoKytuY29tbWFu ZHMsCi0rCSAgICBzaXplb2YoKms1dXNlcnNfYWxsb3dlZF9jbWRzKSk7Ci0rCi0rCS8qIENoZWNr IGVhY2ggbGluZS4gIGtzdSBhbGxvd3MgdW5saW1pdGVkIGxlbmd0aCBsaW5lcy4gKi8KLSsJd2hp bGUgKCFhbGxjb21tYW5kcyAmJiBnZXRsaW5lKCZsaW5lLCAmbGluZXNpemUsIGZwKSAhPSAtMSkg ewotKwkJbGluZW51bSsrOwotKwkJY2hhciAqdG9rZW47Ci0rCi0rCQkvKiB3ZSBwYXJzZSBqdXN0 IGxpa2Uga3N1LCBldmVuIHRob3VnaCB3ZSBjb3VsZCBkbyBiZXR0ZXIgKi8KLSsJCWlmICgodG9r ZW4gPSBzdHJ0b2sobGluZSwgIiBcdFxuIikpID09IE5VTEwpCi0rCQkJY29udGludWU7Ci0rCQlp ZiAoc3RyY21wKG5hbWUsIHRva2VuKSA9PSAwKSB7Ci0rCQkJLyogd2UgbWF0Y2hlZCBvbiBjbGll bnQgcHJpbmNpcGFsICovCi0rCQkJZm91bmRfcHJpbmNpcGFsID0gMTsKLSsJCQlpZiAoKHRva2Vu ID0gc3RydG9rKE5VTEwsICIgXHRcbiIpKSA9PSBOVUxMKSB7Ci0rCQkJCS8qIG9ubHkgc2hlbGwg aXMgYWxsb3dlZCAqLwotKwkJCQlrNXVzZXJzX2FsbG93ZWRfY21kc1tuY29tbWFuZHMtMV0gPQot KwkJCQkgICAgeHN0cmR1cChwdy0+cHdfc2hlbGwpOwotKwkJCQlrNXVzZXJzX2FsbG93ZWRfY21k cyA9Ci0rCQkJCSAgICB4cmVhbGxvY2FycmF5KGs1dXNlcnNfYWxsb3dlZF9jbWRzLCArK25jb21t YW5kcywKLSsJCQkJCXNpemVvZigqazV1c2Vyc19hbGxvd2VkX2NtZHMpKTsKLSsJCQkJYnJlYWs7 Ci0rCQkJfQotKwkJCS8qIHByb2Nlc3MgdGhlIGFsbG93ZWQgY29tbWFuZHMgKi8KLSsJCQl3aGls ZSAodG9rZW4pIHsKLSsJCQkJaWYgKHN0cmNtcCh0b2tlbiwgIioiKSA9PSAwKSB7Ci0rCQkJCQlh bGxjb21tYW5kcyA9IDE7Ci0rCQkJCQlicmVhazsKLSsJCQkJfQotKwkJCQlrNXVzZXJzX2FsbG93 ZWRfY21kc1tuY29tbWFuZHMtMV0gPQotKwkJCQkgICAgeHN0cmR1cCh0b2tlbik7Ci0rCQkJCWs1 dXNlcnNfYWxsb3dlZF9jbWRzID0KLSsJCQkJICAgIHhyZWFsbG9jYXJyYXkoazV1c2Vyc19hbGxv d2VkX2NtZHMsICsrbmNvbW1hbmRzLAotKwkJCQkJc2l6ZW9mKCprNXVzZXJzX2FsbG93ZWRfY21k cykpOwotKwkJCQl0b2tlbiA9IHN0cnRvayhOVUxMLCAiIFx0XG4iKTsKLSsJCQl9Ci0rCQl9Ci0r ICAgICAgIH0KLSsJZnJlZShsaW5lKTsKLSsJaWYgKGs1dXNlcnNfYWxsb3dlZF9jbWRzKSB7Ci0r CQkvKiB0ZXJtaW5hdGUgdmVjdG9yICovCi0rCQlrNXVzZXJzX2FsbG93ZWRfY21kc1tuY29tbWFu ZHMtMV0gPSBOVUxMOwotKwkJLyogaWYgYWxsIGNvbW1hbmRzIGFyZSBhbGxvd2VkLCBmcmVlIHZl Y3RvciAqLwotKwkJaWYgKGFsbGNvbW1hbmRzKSB7Ci0rCQkJaW50IGk7Ci0rCQkJZm9yIChpID0g MDsgaSA8IG5jb21tYW5kczsgaSsrKSB7Ci0rCQkJCWZyZWUoazV1c2Vyc19hbGxvd2VkX2NtZHNb aV0pOwotKwkJCX0KLSsJCQlmcmVlKGs1dXNlcnNfYWxsb3dlZF9jbWRzKTsKLSsJCQlrNXVzZXJz X2FsbG93ZWRfY21kcyA9IE5VTEw7Ci0rCQl9Ci0rCX0KLSsJZmNsb3NlKGZwKTsKLSsJcmV0dXJu IGZvdW5kX3ByaW5jaXBhbDsKLSt9Ci0rIAotIAotIC8qIFRoaXMgd3JpdGVzIG91dCBhbnkgZm9y d2FyZGVkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHN0cnVjdHVyZSBwb3B1bGF0ZWQKLSAgKiBkdXJp bmcgdXNlcmF1dGguIENhbGxlZCBhZnRlciB3ZSBoYXZlIHNldHVpZCB0byB0aGUgdXNlciAqLwot ZGlmZiAtLWdpdCBhL3Nlc3Npb24uYyBiL3Nlc3Npb24uYwotaW5kZXggYjhmMGMxYTU4Li4zZWFl NWJkZjMgMTAwNjQ0Ci0tLS0gYS9zZXNzaW9uLmMKLSsrKyBiL3Nlc3Npb24uYwotQEAgLTY0Miw2 ICs2NDIsMjkgQEAgZG9fZXhlYyhzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNo YXIgKmNvbW1hbmQpCi0gCQljb21tYW5kID0gYXV0aF9vcHRzLT5mb3JjZV9jb21tYW5kOwotIAkJ Zm9yY2VkID0gIihrZXktb3B0aW9uKSI7Ci0gCX0KLSsjaWZkZWYgR1NTQVBJCi0rI2lmZGVmIEtS QjUgLyogazV1c2Vyc19hbGxvd2VkX2NtZHMgb25seSBhdmFpbGFibGUgdy8gR1NTQVBJK0tSQjUg Ki8KLSsJZWxzZSBpZiAoazV1c2Vyc19hbGxvd2VkX2NtZHMpIHsKLSsJCWNvbnN0IGNoYXIgKm1h dGNoID0gY29tbWFuZDsKLSsJCWludCBhbGxvd2VkID0gMCwgaSA9IDA7Ci0rCi0rCQlpZiAoIW1h dGNoKQotKwkJCW1hdGNoID0gcy0+cHctPnB3X3NoZWxsOwotKwkJd2hpbGUgKGs1dXNlcnNfYWxs b3dlZF9jbWRzW2ldKSB7Ci0rCQkJaWYgKHN0cmNtcChtYXRjaCwgazV1c2Vyc19hbGxvd2VkX2Nt ZHNbaSsrXSkgPT0gMCkgewotKwkJCQlkZWJ1ZygiQWxsb3dlZCBjb21tYW5kICclLjkwMHMnIiwg bWF0Y2gpOwotKwkJCQlhbGxvd2VkID0gMTsKLSsJCQkJYnJlYWs7Ci0rCQkJfQotKwkJfQotKwkJ aWYgKCFhbGxvd2VkKSB7Ci0rCQkJZGVidWcoImNvbW1hbmQgJyUuOTAwcycgbm90IGFsbG93ZWQi LCBtYXRjaCk7Ci0rCQkJcmV0dXJuIDE7Ci0rCQl9Ci0rCX0KLSsjZW5kaWYKLSsjZW5kaWYKLSsK LSAJcy0+Zm9yY2VkID0gMDsKLSAJaWYgKGZvcmNlZCAhPSBOVUxMKSB7Ci0gCQlzLT5mb3JjZWQg PSAxOwotZGlmZiAtLWdpdCBhL3NzaC1nc3MuaCBiL3NzaC1nc3MuaAotaW5kZXggOGVjNDUxOTI2 Li5kYjM0ZDc3ZjQgMTAwNjQ0Ci0tLS0gYS9zc2gtZ3NzLmgKLSsrKyBiL3NzaC1nc3MuaAotQEAg LTQ5LDYgKzQ5LDEwIEBACi0gIyAgZW5kaWYgLyogIUhBVkVfREVDTF9HU1NfQ19OVF8uLi4gKi8K LSAKLSAjIGVuZGlmIC8qICFIRUlNREFMICovCi0rCi0rLyogLms1dXNlcnMgc3VwcG9ydCAqLwot K2V4dGVybiBjaGFyICoqazV1c2Vyc19hbGxvd2VkX2NtZHM7Ci0rCi0gI2VuZGlmIC8qIEtSQjUg Ki8KLSAKLSAvKiBkcmFmdC1pZXRmLXNlY3NoLWdzc2tleWV4LTA2ICovCi1kaWZmIC0tZ2l0IGEv c3NoZC44IGIvc3NoZC44Ci1pbmRleCAwMjI2YTgzMDMuLmUyZDhmZjAwMyAxMDA2NDQKLS0tLSBh L3NzaGQuOAotKysrIGIvc3NoZC44Ci1AQCAtMjg2LDYgKzI4Niw3IEBAIEZpbmFsbHksIHRoZSBz ZXJ2ZXIgYW5kIHRoZSBjbGllbnQgZW50ZXIgYW4gYXV0aGVudGljYXRpb24gZGlhbG9nLgotIFRo ZSBjbGllbnQgdHJpZXMgdG8gYXV0aGVudGljYXRlIGl0c2VsZiB1c2luZwotIGhvc3QtYmFzZWQg YXV0aGVudGljYXRpb24sCi0gcHVibGljIGtleSBhdXRoZW50aWNhdGlvbiwKLStHU1NBUEkgYXV0 aGVudGljYXRpb24sCi0gY2hhbGxlbmdlLXJlc3BvbnNlIGF1dGhlbnRpY2F0aW9uLAotIG9yIHBh c3N3b3JkIGF1dGhlbnRpY2F0aW9uLgotIC5QcAotQEAgLTg3NCw2ICs4NzUsMTIgQEAgVGhpcyBm aWxlIGlzIHVzZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMKLSBidXQgYWxsb3dzIGhvc3Qt YmFzZWQgYXV0aGVudGljYXRpb24gd2l0aG91dCBwZXJtaXR0aW5nIGxvZ2luIHdpdGgKLSBybG9n aW4vcnNoLgotIC5QcAotKy5JdCBQYSB+Ly5rNWxvZ2luCi0rLkl0IFBhIH4vLms1dXNlcnMKLStU aGVzZSBmaWxlcyBlbmZvcmNlIEdTU0FQSS9LZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBhY2Nlc3Mg Y29udHJvbC4KLStGdXJ0aGVyIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbgotKy5YciBrc3UgMSAu Ci0rLlBwCi0gLkl0IFBhIH4vLnNzaC8KLSBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgZGVmYXVsdCBs b2NhdGlvbiBmb3IgYWxsIHVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbgotIGFuZCBhdXRoZW50 aWNhdGlvbiBpbmZvcm1hdGlvbi4KLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDEyLW9w ZW5zc2gtNy44cDEtVXNlUEFNLXdhcm5pbmcucGF0Y2ggYi8wMDEyLW9wZW5zc2gtNy44cDEtVXNl UEFNLXdhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMx NTM1YQotLS0gL2Rldi9udWxsCisrKyBiLzAwMTItb3BlbnNzaC03LjhwMS1Vc2VQQU0td2Fybmlu Zy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDk4MDkyYzFmYTVjNTRiMzJlZGNiN2NlZjE4 YTRmYWI2MDc4ZWZiYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVs eWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQz OjI4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvNTRdIG9wZW5zc2gtNy44cDEtVXNlUEFNLXdh cm5pbmcKKworIyB3YXJuIHVzZXJzIGZvciB1bnN1cHBvcnRlZCBVc2VQQU09bm8gKCM3NTc1NDUp CistLS0KKyBzc2hkLXNlc3Npb24uYyB8IDQgKysrKworIHNzaGRfY29uZmlnICAgIHwgMiArKwor IDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zc2hkLXNl c3Npb24uYyBiL3NzaGQtc2Vzc2lvbi5jCitpbmRleCAwMGQwMGUyOTMuLjY5NzZkNjg3MiAxMDA2 NDQKKy0tLSBhL3NzaGQtc2Vzc2lvbi5jCisrKysgYi9zc2hkLXNlc3Npb24uYworQEAgLTEwNzUs NiArMTA3NSwxMCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorIAkJCSAgICAiZW5hYmxlZCBh dXRoZW50aWNhdGlvbiBtZXRob2RzIik7CisgCX0KKyAKKysJLyogJ1VzZVBBTSBubycgaXMgbm90 IHN1cHBvcnRlZCBpbiBvdXIgYnVpbGRzICovCisrCWlmICghIG9wdGlvbnMudXNlX3BhbSkKKysJ CWxvZ2l0KCJXQVJOSU5HOiAnVXNlUEFNIG5vJyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVp bGQgYW5kIG1heSBjYXVzZSBzZXZlcmFsIHByb2JsZW1zLiIpOworKworICNpZmRlZiBXSVRIX09Q RU5TU0wKKyAJaWYgKG9wdGlvbnMubW9kdWxpX2ZpbGUgIT0gTlVMTCkKKyAJCWRoX3NldF9tb2R1 bGlfZmlsZShvcHRpb25zLm1vZHVsaV9maWxlKTsKK2RpZmYgLS1naXQgYS9zc2hkX2NvbmZpZyBi L3NzaGRfY29uZmlnCitpbmRleCA2MDgyMDNlNGIuLjQ4YWY2MzIxYiAxMDA2NDQKKy0tLSBhL3Nz aGRfY29uZmlnCisrKysgYi9zc2hkX2NvbmZpZworQEAgLTg5LDYgKzg5LDggQEAgQXV0aG9yaXpl ZEtleXNGaWxlCS5zc2gvYXV0aG9yaXplZF9rZXlzCisgIyBJZiB5b3UganVzdCB3YW50IHRoZSBQ QU0gYWNjb3VudCBhbmQgc2Vzc2lvbiBjaGVja3MgdG8gcnVuIHdpdGhvdXQKKyAjIFBBTSBhdXRo ZW50aWNhdGlvbiwgdGhlbiBlbmFibGUgdGhpcyBidXQgc2V0IFBhc3N3b3JkQXV0aGVudGljYXRp b24KKyAjIGFuZCBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uIHRvICdubycuCisrIyBXQVJO SU5HOiAnVXNlUEFNIG5vJyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQgYW5kIG1heSBj YXVzZSBzZXZlcmFsCisrIyBwcm9ibGVtcy4KKyAjVXNlUEFNIG5vCisgCisgI0FsbG93QWdlbnRG b3J3YXJkaW5nIHllcworLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwMTMtb3BlbnNzaC03 LjdwMS1nc3NhcGktbmV3LXVuaXF1ZS5wYXRjaCBiLzAwMTMtb3BlbnNzaC03LjdwMS1nc3NhcGkt bmV3LXVuaXF1ZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlmYjQwZC4u MDAwMDAwMAotLS0gYS8wMDEzLW9wZW5zc2gtNy43cDEtZ3NzYXBpLW5ldy11bmlxdWUucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSw2NjUgKzAsMCBAQAotRnJvbSAxYTViMzJkYmY1NTA0NjdhNGFl MTkzNTE2NjdiY2ZkZjljNTJlNDRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1p dHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAy NSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDEzLzUzXSBvcGVuc3NoLTcuN3AxLWdz c2FwaS1uZXctdW5pcXVlCi0KLS0tLQotIGF1dGgta3JiNS5jICAgICB8IDI2MiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KLSBhdXRoLmggICAgICAgICAg fCAgIDMgKy0KLSBnc3Mtc2Vydi1rcmI1LmMgfCAgNDIgKysrLS0tLS0KLSBnc3Mtc2Vydi5jICAg ICAgfCAgMTAgKy0KLSBzZXJ2Y29uZi5jICAgICAgfCAgMTIgKystCi0gc2VydmNvbmYuaCAgICAg IHwgICAyICsKLSBzZXNzaW9uLmMgICAgICAgfCAgIDUgKy0KLSBzc2gtZ3NzLmggICAgICAgfCAg IDQgKy0KLSBzc2hkLXNlc3Npb24uYyAgfCAgIDIgKy0KLSBzc2hkX2NvbmZpZy41ICAgfCAgIDgg KysKLSAxMCBmaWxlcyBjaGFuZ2VkLCAyNzkgaW5zZXJ0aW9ucygrKSwgNzEgZGVsZXRpb25zKC0p Ci0KLWRpZmYgLS1naXQgYS9hdXRoLWtyYjUuYyBiL2F1dGgta3JiNS5jCi1pbmRleCA5ZDJmMWYw ZWEuLjAzNTAzMjIyMSAxMDA2NDQKLS0tLSBhL2F1dGgta3JiNS5jCi0rKysgYi9hdXRoLWtyYjUu YwotQEAgLTUxLDYgKzUxLDcgQEAKLSAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0gI2luY2x1ZGUgPHN0 cmluZy5oPgotICNpbmNsdWRlIDxrcmI1Lmg+Ci0rI2luY2x1ZGUgPHByb2ZpbGUuaD4KLSAKLSBl eHRlcm4gU2VydmVyT3B0aW9ucwkgb3B0aW9uczsKLSAKLUBAIC03Nyw3ICs3OCw3IEBAIGF1dGhf a3JiNV9wYXNzd29yZChBdXRoY3R4dCAqYXV0aGN0eHQsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKQot ICNlbmRpZgotIAlrcmI1X2Vycm9yX2NvZGUgcHJvYmxlbTsKLSAJa3JiNV9jY2FjaGUgY2NhY2hl ID0gTlVMTDsKLS0JaW50IGxlbjsKLSsJY2hhciAqdGlja2V0X25hbWUgPSBOVUxMOwotIAljaGFy ICpjbGllbnQsICpwbGF0Zm9ybV9jbGllbnQ7Ci0gCWNvbnN0IGNoYXIgKmVycm1zZzsKLSAKLUBA IC0xNjMsOCArMTY0LDggQEAgYXV0aF9rcmI1X3Bhc3N3b3JkKEF1dGhjdHh0ICphdXRoY3R4dCwg Y29uc3QgY2hhciAqcGFzc3dvcmQpCi0gCQlnb3RvIG91dDsKLSAJfQotIAotLQlwcm9ibGVtID0g c3NoX2tyYjVfY2NfZ2VuKGF1dGhjdHh0LT5rcmI1X2N0eCwKLS0JICAgICZhdXRoY3R4dC0+a3Ji NV9md2RfY2NhY2hlKTsKLSsJcHJvYmxlbSA9IHNzaF9rcmI1X2NjX25ld191bmlxdWUoYXV0aGN0 eHQtPmtyYjVfY3R4LAotKwkgICAgICZhdXRoY3R4dC0+a3JiNV9md2RfY2NhY2hlLCAmYXV0aGN0 eHQtPmtyYjVfc2V0X2Vudik7Ci0gCWlmIChwcm9ibGVtKQotIAkJZ290byBvdXQ7Ci0gCi1AQCAt MTc5LDE1ICsxODAsMTQgQEAgYXV0aF9rcmI1X3Bhc3N3b3JkKEF1dGhjdHh0ICphdXRoY3R4dCwg Y29uc3QgY2hhciAqcGFzc3dvcmQpCi0gCQlnb3RvIG91dDsKLSAjZW5kaWYKLSAKLS0JYXV0aGN0 eHQtPmtyYjVfdGlja2V0X2ZpbGUgPSAoY2hhciAqKWtyYjVfY2NfZ2V0X25hbWUoYXV0aGN0eHQt PmtyYjVfY3R4LCBhdXRoY3R4dC0+a3JiNV9md2RfY2NhY2hlKTsKLSsJcHJvYmxlbSA9IGtyYjVf Y2NfZ2V0X2Z1bGxfbmFtZShhdXRoY3R4dC0+a3JiNV9jdHgsCi0rCSAgICBhdXRoY3R4dC0+a3Ji NV9md2RfY2NhY2hlLCAmdGlja2V0X25hbWUpOwotIAotLQlsZW4gPSBzdHJsZW4oYXV0aGN0eHQt PmtyYjVfdGlja2V0X2ZpbGUpICsgNjsKLS0JYXV0aGN0eHQtPmtyYjVfY2NuYW1lID0geG1hbGxv YyhsZW4pOwotLQlzbnByaW50ZihhdXRoY3R4dC0+a3JiNV9jY25hbWUsIGxlbiwgIkZJTEU6JXMi LAotLQkgICAgYXV0aGN0eHQtPmtyYjVfdGlja2V0X2ZpbGUpOwotKwlhdXRoY3R4dC0+a3JiNV9j Y25hbWUgPSB4c3RyZHVwKHRpY2tldF9uYW1lKTsKLSsJa3JiNV9mcmVlX3N0cmluZyhhdXRoY3R4 dC0+a3JiNV9jdHgsIHRpY2tldF9uYW1lKTsKLSAKLSAjaWZkZWYgVVNFX1BBTQotLQlpZiAob3B0 aW9ucy51c2VfcGFtKQotKwlpZiAob3B0aW9ucy51c2VfcGFtICYmIGF1dGhjdHh0LT5rcmI1X3Nl dF9lbnYpCi0gCQlkb19wYW1fcHV0ZW52KCJLUkI1Q0NOQU1FIiwgYXV0aGN0eHQtPmtyYjVfY2Nu YW1lKTsKLSAjZW5kaWYKLSAKLUBAIC0yMjMsMTEgKzIyMyw1NCBAQCBhdXRoX2tyYjVfcGFzc3dv cmQoQXV0aGN0eHQgKmF1dGhjdHh0LCBjb25zdCBjaGFyICpwYXNzd29yZCkKLSB2b2lkCi0ga3Ji NV9jbGVhbnVwX3Byb2MoQXV0aGN0eHQgKmF1dGhjdHh0KQotIHsKLSsJc3RydWN0IHN0YXQga3Ji NV9jY25hbWVfc3RhdDsKLSsJY2hhciBrcmI1X2NjbmFtZVsxMjhdLCAqa3JiNV9jY25hbWVfZGly X3N0YXJ0LCAqa3JiNV9jY25hbWVfZGlyX2VuZDsKLSsKLSAJZGVidWcoImtyYjVfY2xlYW51cF9w cm9jIGNhbGxlZCIpOwotIAlpZiAoYXV0aGN0eHQtPmtyYjVfZndkX2NjYWNoZSkgewotLQkJa3Ji NV9jY19kZXN0cm95KGF1dGhjdHh0LT5rcmI1X2N0eCwgYXV0aGN0eHQtPmtyYjVfZndkX2NjYWNo ZSk7Ci0rCQlrcmI1X2NvbnRleHQgY3R4ID0gYXV0aGN0eHQtPmtyYjVfY3R4OwotKwkJa3JiNV9j Y2NvbF9jdXJzb3IgY3Vyc29yOwotKwkJa3JiNV9jY2FjaGUgY2NhY2hlOwotKwkJaW50IHJldDsK LSsKLSsJCWtyYjVfY2NfZGVzdHJveShjdHgsIGF1dGhjdHh0LT5rcmI1X2Z3ZF9jY2FjaGUpOwot IAkJYXV0aGN0eHQtPmtyYjVfZndkX2NjYWNoZSA9IE5VTEw7Ci0rCi0rCQlyZXQgPSBrcmI1X2Nj Y29sX2N1cnNvcl9uZXcoY3R4LCAmY3Vyc29yKTsKLSsJCWlmIChyZXQpCi0rCQkJZ290byBvdXQ7 Ci0rCi0rCQlyZXQgPSBrcmI1X2NjY29sX2N1cnNvcl9uZXh0KGN0eCwgY3Vyc29yLCAmY2NhY2hl KTsKLSsJCWlmIChyZXQgPT0gMCAmJiBjY2FjaGUgIT0gTlVMTCkgewotKwkJCS8qIFRoZXJlIGlz IGF0IGxlYXN0IG9uZSBvdGhlciBjY2FjaGUgaW4gY29sbGVjdGlvbgotKwkJCSAqIHdlIGNhbiBz d2l0Y2ggdG8gKi8KLSsJCQlrcmI1X2NjX3N3aXRjaChjdHgsIGNjYWNoZSk7Ci0rCQl9IGVsc2Ug aWYgKGF1dGhjdHh0LT5rcmI1X2NjbmFtZSAhPSBOVUxMKSB7Ci0rCQkJLyogQ2xlYW4gdXAgdGhl IGNvbGxlY3Rpb24gdG9vICovCi0rCQkJc3RybmNweShrcmI1X2NjbmFtZSwgYXV0aGN0eHQtPmty YjVfY2NuYW1lLCBzaXplb2Yoa3JiNV9jY25hbWUpIC0gMTApOwotKwkJCWtyYjVfY2NuYW1lX2Rp cl9zdGFydCA9IHN0cmNocihrcmI1X2NjbmFtZSwgJzonKSArIDE7Ci0rCQkJKmtyYjVfY2NuYW1l X2Rpcl9zdGFydCsrID0gJ1wwJzsKLSsJCQlpZiAoc3RyY21wKGtyYjVfY2NuYW1lLCAiRElSIikg PT0gMCkgewotKwotKwkJCQlzdHJjYXQoa3JiNV9jY25hbWVfZGlyX3N0YXJ0LCAiL3ByaW1hcnki KTsKLSsKLSsJCQkJaWYgKHN0YXQoa3JiNV9jY25hbWVfZGlyX3N0YXJ0LCAma3JiNV9jY25hbWVf c3RhdCkgPT0gMCkgewotKwkJCQkJaWYgKHVubGluayhrcmI1X2NjbmFtZV9kaXJfc3RhcnQpID09 IDApIHsKLSsJCQkJCQlrcmI1X2NjbmFtZV9kaXJfZW5kID0gc3RycmNocihrcmI1X2NjbmFtZV9k aXJfc3RhcnQsICcvJyk7Ci0rCQkJCQkJKmtyYjVfY2NuYW1lX2Rpcl9lbmQgPSAnXDAnOwotKwkJ CQkJCWlmIChybWRpcihrcmI1X2NjbmFtZV9kaXJfc3RhcnQpID09IC0xKQotKwkJCQkJCQlkZWJ1 ZygiY2FjaGUgZGlyICclcycgcmVtb3ZlIGZhaWxlZDogJXMiLAotKwkJCQkJCQkgICAga3JiNV9j Y25hbWVfZGlyX3N0YXJ0LCBzdHJlcnJvcihlcnJubykpOwotKwkJCQkJfQotKwkJCQkJZWxzZQot KwkJCQkJCWRlYnVnKCJjYWNoZSBwcmltYXJ5IGZpbGUgJyVzJywgcmVtb3ZlIGZhaWxlZDogJXMi LAotKwkJCQkJCSAgICBrcmI1X2NjbmFtZV9kaXJfc3RhcnQsIHN0cmVycm9yKGVycm5vKSk7Ci0r CQkJCX0KLSsJCQl9Ci0rCQl9Ci0rCQlrcmI1X2NjY29sX2N1cnNvcl9mcmVlKGN0eCwgJmN1cnNv cik7Ci0gCX0KLStvdXQ6Ci0gCWlmIChhdXRoY3R4dC0+a3JiNV91c2VyKSB7Ci0gCQlrcmI1X2Zy ZWVfcHJpbmNpcGFsKGF1dGhjdHh0LT5rcmI1X2N0eCwgYXV0aGN0eHQtPmtyYjVfdXNlcik7Ci0g CQlhdXRoY3R4dC0+a3JiNV91c2VyID0gTlVMTDsKLUBAIC0yMzgsMzYgKzI4MSwxODkgQEAga3Ji NV9jbGVhbnVwX3Byb2MoQXV0aGN0eHQgKmF1dGhjdHh0KQotIAl9Ci0gfQotIAotLSNpZm5kZWYg SEVJTURBTAotLWtyYjVfZXJyb3JfY29kZQotLXNzaF9rcmI1X2NjX2dlbihrcmI1X2NvbnRleHQg Y3R4LCBrcmI1X2NjYWNoZSAqY2NhY2hlKSB7Ci0tCWludCB0bXBmZCwgcmV0LCBvZXJybm87Ci0t CWNoYXIgY2NuYW1lWzQwXTsKLS0JbW9kZV90IG9sZF91bWFzazsKLSAKLS0JcmV0ID0gc25wcmlu dGYoY2NuYW1lLCBzaXplb2YoY2NuYW1lKSwKLS0JICAgICJGSUxFOi90bXAva3JiNWNjXyVkX1hY WFhYWFhYWFgiLCBnZXRldWlkKCkpOwotLQlpZiAocmV0IDwgMCB8fCAoc2l6ZV90KXJldCA+PSBz aXplb2YoY2NuYW1lKSkKLS0JCXJldHVybiBFTk9NRU07Ci0tCi0tCW9sZF91bWFzayA9IHVtYXNr KDAxNzcpOwotLQl0bXBmZCA9IG1rc3RlbXAoY2NuYW1lICsgc3RybGVuKCJGSUxFOiIpKTsKLS0J b2Vycm5vID0gZXJybm87Ci0tCXVtYXNrKG9sZF91bWFzayk7Ci0tCWlmICh0bXBmZCA9PSAtMSkg ewotLQkJbG9naXQoIm1rc3RlbXAoKTogJS4xMDBzIiwgc3RyZXJyb3Iob2Vycm5vKSk7Ci0tCQly ZXR1cm4gb2Vycm5vOwotKyNpZiAhZGVmaW5lZChIRUlNREFMKQotK2ludAotK3NzaF9hc3ByaW50 Zl9hcHBlbmQoY2hhciAqKmRzYywgY29uc3QgY2hhciAqZm10LCAuLi4pIHsKLSsJY2hhciAqc3Jj LCAqb2xkOwotKwl2YV9saXN0IGFwOwotKwlpbnQgaTsKLSsKLSsJdmFfc3RhcnQoYXAsIGZtdCk7 Ci0rCWkgPSB2YXNwcmludGYoJnNyYywgZm10LCBhcCk7Ci0rCXZhX2VuZChhcCk7Ci0rCi0rCWlm IChpID09IC0xIHx8IHNyYyA9PSBOVUxMKQotKwkJcmV0dXJuIC0xOwotKwotKwlvbGQgPSAqZHNj OwotKwotKwlpID0gYXNwcmludGYoZHNjLCAiJXMlcyIsICpkc2MsIHNyYyk7Ci0rCWlmIChpID09 IC0xKSB7Ci0rCQkqZHNjID0gb2xkOwotKwkJZnJlZShzcmMpOwotKwkJcmV0dXJuIC0xOwotKwl9 Ci0rCi0rCWZyZWUob2xkKTsKLSsJZnJlZShzcmMpOwotKwotKwlyZXR1cm4gaTsKLSt9Ci0rCi0r aW50Ci0rc3NoX2tyYjVfZXhwYW5kX3RlbXBsYXRlKGNoYXIgKipyZXN1bHQsIGNvbnN0IGNoYXIg KnRlbXBsYXRlKSB7Ci0rCWNoYXIgKnBfbiwgKnBfbywgKnIsICp0bXBfdGVtcGxhdGU7Ci0rCi0r CWRlYnVnM19mKCJjYWxsZWQsIHRlbXBsYXRlID0gJXMiLCB0ZW1wbGF0ZSk7Ci0rCWlmICh0ZW1w bGF0ZSA9PSBOVUxMKQotKwkJcmV0dXJuIC0xOwotKwotKwl0bXBfdGVtcGxhdGUgPSBwX24gPSBw X28gPSB4c3RyZHVwKHRlbXBsYXRlKTsKLSsJciA9IHhzdHJkdXAoIiIpOwotKwotKwl3aGlsZSAo KHBfbiA9IHN0cnN0cihwX28sICIleyIpKSAhPSBOVUxMKSB7Ci0rCi0rCQkqcF9uKysgPSAnXDAn OwotKwkJaWYgKHNzaF9hc3ByaW50Zl9hcHBlbmQoJnIsICIlcyIsIHBfbykgPT0gLTEpCi0rCQkJ Z290byBjbGVhbnVwOwotKwotKwkJaWYgKHN0cm5jbXAocF9uLCAie3VpZH0iLCA1KSA9PSAwIHx8 IHN0cm5jbXAocF9uLCAie2V1aWR9IiwgNikgPT0gMCB8fAotKwkJCXN0cm5jbXAocF9uLCAie1VT RVJJRH0iLCA4KSA9PSAwKSB7Ci0rCQkJcF9vID0gc3RyY2hyKHBfbiwgJ30nKSArIDE7Ci0rCQkJ aWYgKHNzaF9hc3ByaW50Zl9hcHBlbmQoJnIsICIlZCIsIGdldGV1aWQoKSkgPT0gLTEpCi0rCQkJ CWdvdG8gY2xlYW51cDsKLSsJCQljb250aW51ZTsKLSsJCX0KLSsJCWVsc2UgaWYgKHN0cm5jbXAo cF9uLCAie1RFTVB9IiwgNikgPT0gMCkgewotKwkJCXBfbyA9IHN0cmNocihwX24sICd9JykgKyAx OwotKwkJCWlmIChzc2hfYXNwcmludGZfYXBwZW5kKCZyLCAiL3RtcCIpID09IC0xKQotKwkJCQln b3RvIGNsZWFudXA7Ci0rCQkJY29udGludWU7Ci0rCQl9IGVsc2UgewotKwkJCXBfbyA9IHN0cmNo cihwX24sICd9JykgKyAxOwotKwkJCSpwX28gPSAnXDAnOwotKwkJCWRlYnVnX2YoInVuc3VwcG9y dGVkIHRva2VuICVzIGluICVzIiwgcF9uLCB0ZW1wbGF0ZSk7Ci0rCQkJLyogdW5rbm93biB0b2tl biwgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgKi8KLSsJCQlnb3RvIGNsZWFudXA7Ci0rCQl9Ci0g CX0KLSAKLS0JaWYgKGZjaG1vZCh0bXBmZCxTX0lSVVNSIHwgU19JV1VTUikgPT0gLTEpIHsKLSsJ aWYgKHNzaF9hc3ByaW50Zl9hcHBlbmQoJnIsICIlcyIsIHBfbykgPT0gLTEpCi0rCQlnb3RvIGNs ZWFudXA7Ci0rCi0rCSpyZXN1bHQgPSByOwotKwlmcmVlKHRtcF90ZW1wbGF0ZSk7Ci0rCXJldHVy biAwOwotKwotK2NsZWFudXA6Ci0rCWZyZWUocik7Ci0rCWZyZWUodG1wX3RlbXBsYXRlKTsKLSsJ cmV0dXJuIC0xOwotK30KLSsKLStrcmI1X2Vycm9yX2NvZGUKLStzc2hfa3JiNV9nZXRfY2N0ZW1w bGF0ZShrcmI1X2NvbnRleHQgY3R4LCBjaGFyICoqY2NuYW1lKSB7Ci0rCXByb2ZpbGVfdCBwOwot KwlpbnQgcmV0ID0gMDsKLSsJY2hhciAqdmFsdWUgPSBOVUxMOwotKwotKwlkZWJ1ZzNfZigiY2Fs bGVkIik7Ci0rCXJldCA9IGtyYjVfZ2V0X3Byb2ZpbGUoY3R4LCAmcCk7Ci0rCWlmIChyZXQpCi0r CQlyZXR1cm4gcmV0OwotKwotKwlyZXQgPSBwcm9maWxlX2dldF9zdHJpbmcocCwgImxpYmRlZmF1 bHRzIiwgImRlZmF1bHRfY2NhY2hlX25hbWUiLCBOVUxMLCBOVUxMLCAmdmFsdWUpOwotKwlpZiAo cmV0IHx8ICF2YWx1ZSkKLSsJCXJldHVybiByZXQ7Ci0rCi0rCXJldCA9IHNzaF9rcmI1X2V4cGFu ZF90ZW1wbGF0ZShjY25hbWUsIHZhbHVlKTsKLSsKLSsJZGVidWczX2YoInJldHVybmluZyB3aXRo IGNjbmFtZSA9ICVzIiwgKmNjbmFtZSk7Ci0rCXJldHVybiByZXQ7Ci0rfQotKwotK2tyYjVfZXJy b3JfY29kZQotK3NzaF9rcmI1X2NjX25ld191bmlxdWUoa3JiNV9jb250ZXh0IGN0eCwga3JiNV9j Y2FjaGUgKmNjYWNoZSwgaW50ICpuZWVkX2Vudmlyb25tZW50KSB7Ci0rCWludCB0bXBmZCwgcmV0 LCBvZXJybm8sIHR5cGVfbGVuOwotKwljaGFyICpjY25hbWUgPSBOVUxMOwotKwltb2RlX3Qgb2xk X3VtYXNrOwotKwljaGFyICp0eXBlID0gTlVMTCwgKmNvbG9uID0gTlVMTDsKLSsKLSsJZGVidWcz X2YoImNhbGxlZCIpOwotKwlpZiAobmVlZF9lbnZpcm9ubWVudCkKLSsJCSpuZWVkX2Vudmlyb25t ZW50ID0gMDsKLSsJcmV0ID0gc3NoX2tyYjVfZ2V0X2NjdGVtcGxhdGUoY3R4LCAmY2NuYW1lKTsK LSsJaWYgKHJldCB8fCAhY2NuYW1lIHx8IG9wdGlvbnMua2VyYmVyb3NfdW5pcXVlX2NjYWNoZSkg ewotKwkJLyogT3RoZXJ3aXNlLCBnbyB3aXRoIHRoZSBvbGQgbWV0aG9kICovCi0rCQlpZiAoY2Nu YW1lKQotKwkJCWZyZWUoY2NuYW1lKTsKLSsJCWNjbmFtZSA9IE5VTEw7Ci0rCi0rCQlyZXQgPSBh c3ByaW50ZigmY2NuYW1lLAotKwkJICAgICJGSUxFOi90bXAva3JiNWNjXyVkX1hYWFhYWFhYWFgi LCBnZXRldWlkKCkpOwotKwkJaWYgKHJldCA8IDApCi0rCQkJcmV0dXJuIEVOT01FTTsKLSsKLSsJ CW9sZF91bWFzayA9IHVtYXNrKDAxNzcpOwotKwkJdG1wZmQgPSBta3N0ZW1wKGNjbmFtZSArIHN0 cmxlbigiRklMRToiKSk7Ci0gCQlvZXJybm8gPSBlcnJubzsKLS0JCWxvZ2l0KCJmY2htb2QoKTog JS4xMDBzIiwgc3RyZXJyb3Iob2Vycm5vKSk7Ci0rCQl1bWFzayhvbGRfdW1hc2spOwotKwkJaWYg KHRtcGZkID09IC0xKSB7Ci0rCQkJbG9naXQoIm1rc3RlbXAoKTogJS4xMDBzIiwgc3RyZXJyb3Io b2Vycm5vKSk7Ci0rCQkJcmV0dXJuIG9lcnJubzsKLSsJCX0KLSsKLSsJCWlmIChmY2htb2QodG1w ZmQsU19JUlVTUiB8IFNfSVdVU1IpID09IC0xKSB7Ci0rCQkJb2Vycm5vID0gZXJybm87Ci0rCQkJ bG9naXQoImZjaG1vZCgpOiAlLjEwMHMiLCBzdHJlcnJvcihvZXJybm8pKTsKLSsJCQljbG9zZSh0 bXBmZCk7Ci0rCQkJcmV0dXJuIG9lcnJubzsKLSsJCX0KLSsJCS8qIG1ha2Ugc3VyZSB0aGUgS1JC NUNDTkFNRSBpcyBzZXQgZm9yIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiAqLwotKwkJaWYgKG5lZWRf ZW52aXJvbm1lbnQpCi0rCQkJKm5lZWRfZW52aXJvbm1lbnQgPSAxOwotIAkJY2xvc2UodG1wZmQp OwotLQkJcmV0dXJuIG9lcnJubzsKLSAJfQotLQljbG9zZSh0bXBmZCk7Ci0gCi0tCXJldHVybiAo a3JiNV9jY19yZXNvbHZlKGN0eCwgY2NuYW1lLCBjY2FjaGUpKTsKLSsJZGVidWczX2YoInNldHRp bmcgZGVmYXVsdCBjY25hbWUgdG8gJXMiLCBjY25hbWUpOwotKwkvKiBzZXQgdGhlIGRlZmF1bHQg d2l0aCBhbHJlYWR5IGV4cGFuZGVkIHVzZXIgSURzICovCi0rCXJldCA9IGtyYjVfY2Nfc2V0X2Rl ZmF1bHRfbmFtZShjdHgsIGNjbmFtZSk7Ci0rCWlmIChyZXQpCi0rCQlyZXR1cm4gcmV0OwotKwot KwlpZiAoKGNvbG9uID0gc3Ryc3RyKGNjbmFtZSwgIjoiKSkgIT0gTlVMTCkgewotKwkJdHlwZV9s ZW4gPSBjb2xvbiAtIGNjbmFtZTsKLSsJCXR5cGUgPSBtYWxsb2MoKHR5cGVfbGVuICsgMSkgKiBz aXplb2YoY2hhcikpOwotKwkJaWYgKHR5cGUgPT0gTlVMTCkKLSsJCQlyZXR1cm4gRU5PTUVNOwot KwkJc3RybmNweSh0eXBlLCBjY25hbWUsIHR5cGVfbGVuKTsKLSsJCXR5cGVbdHlwZV9sZW5dID0g MDsKLSsJfSBlbHNlIHsKLSsJCXR5cGUgPSBzdHJkdXAoY2NuYW1lKTsKLSsJfQotKwotKwkvKiBJ ZiB3ZSBoYXZlIGEgY3JlZGVudGlhbCBjYWNoZSBmcm9tIGtyYjUuY29uZiwgd2UgbmVlZCB0byBz d2l0Y2gKLSsJICogYSBwcmltYXJ5IGNhY2hlIGZvciB0aGlzIGNvbGxlY3Rpb24sIGlmIGl0IHN1 cHBvcnRzIHRoYXQgKG5vbi1GSUxFKQotKwkgKi8KLSsJaWYgKGtyYjVfY2Nfc3VwcG9ydF9zd2l0 Y2goY3R4LCB0eXBlKSkgewotKwkJZGVidWczX2YoImNhbGxpbmcgY2NfbmV3X3VuaXF1ZSglcyki LCBjY25hbWUpOwotKwkJcmV0ID0ga3JiNV9jY19uZXdfdW5pcXVlKGN0eCwgdHlwZSwgTlVMTCwg Y2NhY2hlKTsKLSsJCWZyZWUodHlwZSk7Ci0rCQlpZiAocmV0KQotKwkJCXJldHVybiByZXQ7Ci0r Ci0rCQlkZWJ1ZzNfZigiY2FsbGluZyBjY19zd2l0Y2goKSIpOwotKwkJcmV0dXJuIGtyYjVfY2Nf c3dpdGNoKGN0eCwgKmNjYWNoZSk7Ci0rCX0gZWxzZSB7Ci0rCQkvKiBPdGhlcndpc2UsIHdlIGNh biBub3QgY3JlYXRlIGEgdW5pcXVlIGNjbmFtZSBoZXJlIChlaXRoZXIKLSsJCSAqIGl0IGlzIGFs cmVhZHkgdW5pcXVlIGZyb20gYWJvdmUgb3IgdGhlIHR5cGUgZG9lcyBub3Qgc3VwcG9ydAotKwkJ ICogY29sbGVjdGlvbnMKLSsJCSAqLwotKwkJZnJlZSh0eXBlKTsKLSsJCWRlYnVnM19mKCJjYWxs aW5nIGNjX3Jlc29sdmUoJXMpIiwgY2NuYW1lKTsKLSsJCXJldHVybiAoa3JiNV9jY19yZXNvbHZl KGN0eCwgY2NuYW1lLCBjY2FjaGUpKTsKLSsJfQotIH0KLSAjZW5kaWYgLyogIUhFSU1EQUwgKi8K LSAjZW5kaWYgLyogS1JCNSAqLwotZGlmZiAtLWdpdCBhL2F1dGguaCBiL2F1dGguaAotaW5kZXgg ODNkMDdhZThiLi4xMGU4OGUxMWYgMTAwNjQ0Ci0tLS0gYS9hdXRoLmgKLSsrKyBiL2F1dGguaAot QEAgLTg1LDYgKzg1LDcgQEAgc3RydWN0IEF1dGhjdHh0IHsKLSAJa3JiNV9wcmluY2lwYWwJIGty YjVfdXNlcjsKLSAJY2hhcgkJKmtyYjVfdGlja2V0X2ZpbGU7Ci0gCWNoYXIJCSprcmI1X2NjbmFt ZTsKLSsJaW50CQkga3JiNV9zZXRfZW52OwotICNlbmRpZgotIAlzdHJ1Y3Qgc3NoYnVmCSpsb2dp bm1zZzsKLSAKLUBAIC0yNDUsNyArMjQ2LDcgQEAgRklMRQkqYXV0aF9vcGVucHJpbmNpcGFscyhj b25zdCBjaGFyICosIHN0cnVjdCBwYXNzd2QgKiwgaW50KTsKLSBpbnQJIHN5c19hdXRoX3Bhc3N3 ZChzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7Ci0gCi0gI2lmIGRlZmluZWQoS1JCNSkgJiYg IWRlZmluZWQoSEVJTURBTCkKLS1rcmI1X2Vycm9yX2NvZGUgc3NoX2tyYjVfY2NfZ2VuKGtyYjVf Y29udGV4dCwga3JiNV9jY2FjaGUgKik7Ci0ra3JiNV9lcnJvcl9jb2RlIHNzaF9rcmI1X2NjX25l d191bmlxdWUoa3JiNV9jb250ZXh0LCBrcmI1X2NjYWNoZSAqLCBpbnQgKik7Ci0gI2VuZGlmCi0g Ci0gI2VuZGlmIC8qIEFVVEhfSCAqLwotZGlmZiAtLWdpdCBhL2dzcy1zZXJ2LWtyYjUuYyBiL2dz cy1zZXJ2LWtyYjUuYwotaW5kZXggMTQ1MDJjNWE2Li5kZjU1NTEyZDMgMTAwNjQ0Ci0tLS0gYS9n c3Mtc2Vydi1rcmI1LmMKLSsrKyBiL2dzcy1zZXJ2LWtyYjUuYwotQEAgLTI2Nyw3ICsyNjcsNyBA QCBzc2hfZ3NzYXBpX2tyYjVfY21kb2soa3JiNV9wcmluY2lwYWwgcHJpbmNpcGFsLCBjb25zdCBj aGFyICpuYW1lLAotIC8qIFRoaXMgd3JpdGVzIG91dCBhbnkgZm9yd2FyZGVkIGNyZWRlbnRpYWxz IGZyb20gdGhlIHN0cnVjdHVyZSBwb3B1bGF0ZWQKLSAgKiBkdXJpbmcgdXNlcmF1dGguIENhbGxl ZCBhZnRlciB3ZSBoYXZlIHNldHVpZCB0byB0aGUgdXNlciAqLwotIAotLXN0YXRpYyB2b2lkCi0r c3RhdGljIGludAotIHNzaF9nc3NhcGlfa3JiNV9zdG9yZWNyZWRzKHNzaF9nc3NhcGlfY2xpZW50 ICpjbGllbnQpCi0gewotIAlrcmI1X2NjYWNoZSBjY2FjaGU7Ci1AQCAtMjc2LDE0ICsyNzYsMTUg QEAgc3NoX2dzc2FwaV9rcmI1X3N0b3JlY3JlZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkK LSAJT01fdWludDMyIG1hal9zdGF0dXMsIG1pbl9zdGF0dXM7Ci0gCWNvbnN0IGNoYXIgKm5ld19j Y25hbWUsICpuZXdfY2N0eXBlOwotIAljb25zdCBjaGFyICplcnJtc2c7Ci0rCWludCBzZXRfZW52 ID0gMDsKLSAKLSAJaWYgKGNsaWVudC0+Y3JlZHMgPT0gTlVMTCkgewotIAkJZGVidWcoIk5vIGNy ZWRlbnRpYWxzIHN0b3JlZCIpOwotLQkJcmV0dXJuOwotKwkJcmV0dXJuIDA7Ci0gCX0KLSAKLSAJ aWYgKHNzaF9nc3NhcGlfa3JiNV9pbml0KCkgPT0gMCkKLS0JCXJldHVybjsKLSsJCXJldHVybiAw OwotIAotICNpZmRlZiBIRUlNREFMCi0gIyBpZmRlZiBIQVZFX0tSQjVfQ0NfTkVXX1VOSVFVRQot QEAgLTI5NywxNCArMjk4LDE0IEBAIHNzaF9nc3NhcGlfa3JiNV9zdG9yZWNyZWRzKHNzaF9nc3Nh cGlfY2xpZW50ICpjbGllbnQpCi0gCQlrcmI1X2dldF9lcnJfdGV4dChrcmJfY29udGV4dCwgcHJv YmxlbSkpOwotICMgZW5kaWYKLSAJCWtyYjVfZnJlZV9lcnJvcl9tZXNzYWdlKGtyYl9jb250ZXh0 LCBlcnJtc2cpOwotLQkJcmV0dXJuOwotKwkJcmV0dXJuIDA7Ci0gCX0KLSAjZWxzZQotLQlpZiAo KHByb2JsZW0gPSBzc2hfa3JiNV9jY19nZW4oa3JiX2NvbnRleHQsICZjY2FjaGUpKSkgewotKwlp ZiAoKHByb2JsZW0gPSBzc2hfa3JiNV9jY19uZXdfdW5pcXVlKGtyYl9jb250ZXh0LCAmY2NhY2hl LCAmc2V0X2VudikpICE9IDApIHsKLSAJCWVycm1zZyA9IGtyYjVfZ2V0X2Vycm9yX21lc3NhZ2Uo a3JiX2NvbnRleHQsIHByb2JsZW0pOwotLQkJbG9naXQoInNzaF9rcmI1X2NjX2dlbigpOiAlLjEw MHMiLCBlcnJtc2cpOwotKwkJbG9naXQoInNzaF9rcmI1X2NjX25ld191bmlxdWUoKTogJS4xMDBz IiwgZXJybXNnKTsKLSAJCWtyYjVfZnJlZV9lcnJvcl9tZXNzYWdlKGtyYl9jb250ZXh0LCBlcnJt c2cpOwotLQkJcmV0dXJuOwotKwkJcmV0dXJuIDA7Ci0gCX0KLSAjZW5kaWYJLyogI2lmZGVmIEhF SU1EQUwgKi8KLSAKLUBAIC0zMTMsNyArMzE0LDcgQEAgc3NoX2dzc2FwaV9rcmI1X3N0b3JlY3Jl ZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKLSAJCWVycm1zZyA9IGtyYjVfZ2V0X2Vycm9y X21lc3NhZ2Uoa3JiX2NvbnRleHQsIHByb2JsZW0pOwotIAkJbG9naXQoImtyYjVfcGFyc2VfbmFt ZSgpOiAlLjEwMHMiLCBlcnJtc2cpOwotIAkJa3JiNV9mcmVlX2Vycm9yX21lc3NhZ2Uoa3JiX2Nv bnRleHQsIGVycm1zZyk7Ci0tCQlyZXR1cm47Ci0rCQlyZXR1cm4gMDsKLSAJfQotIAotIAlpZiAo KHByb2JsZW0gPSBrcmI1X2NjX2luaXRpYWxpemUoa3JiX2NvbnRleHQsIGNjYWNoZSwgcHJpbmMp KSkgewotQEAgLTMyMiw3ICszMjMsNyBAQCBzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcyhzc2hf Z3NzYXBpX2NsaWVudCAqY2xpZW50KQotIAkJa3JiNV9mcmVlX2Vycm9yX21lc3NhZ2Uoa3JiX2Nv bnRleHQsIGVycm1zZyk7Ci0gCQlrcmI1X2ZyZWVfcHJpbmNpcGFsKGtyYl9jb250ZXh0LCBwcmlu Yyk7Ci0gCQlrcmI1X2NjX2Rlc3Ryb3koa3JiX2NvbnRleHQsIGNjYWNoZSk7Ci0tCQlyZXR1cm47 Ci0rCQlyZXR1cm4gMDsKLSAJfQotIAotIAlrcmI1X2ZyZWVfcHJpbmNpcGFsKGtyYl9jb250ZXh0 LCBwcmluYyk7Ci1AQCAtMzMxLDMyICszMzIsMjEgQEAgc3NoX2dzc2FwaV9rcmI1X3N0b3JlY3Jl ZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKLSAJICAgIGNsaWVudC0+Y3JlZHMsIGNjYWNo ZSkpKSB7Ci0gCQlsb2dpdCgiZ3NzX2tyYjVfY29weV9jY2FjaGUoKSBmYWlsZWQiKTsKLSAJCWty YjVfY2NfZGVzdHJveShrcmJfY29udGV4dCwgY2NhY2hlKTsKLS0JCXJldHVybjsKLSsJCXJldHVy biAwOwotIAl9Ci0gCi0gCW5ld19jY3R5cGUgPSBrcmI1X2NjX2dldF90eXBlKGtyYl9jb250ZXh0 LCBjY2FjaGUpOwotIAluZXdfY2NuYW1lID0ga3JiNV9jY19nZXRfbmFtZShrcmJfY29udGV4dCwg Y2NhY2hlKTsKLS0KLS0JY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSAiS1JCNUNDTkFNRSI7Ci0tI2lm ZGVmIFVTRV9DQ0FQSQotLQl4YXNwcmludGYoJmNsaWVudC0+c3RvcmUuZW52dmFsLCAiQVBJOiVz IiwgbmV3X2NjbmFtZSk7Ci0tCWNsaWVudC0+c3RvcmUuZmlsZW5hbWUgPSBOVUxMOwotLSNlbHNl Ci0tCWlmIChuZXdfY2NuYW1lWzBdID09ICc6JykKLS0JCW5ld19jY25hbWUrKzsKLSAJeGFzcHJp bnRmKCZjbGllbnQtPnN0b3JlLmVudnZhbCwgIiVzOiVzIiwgbmV3X2NjdHlwZSwgbmV3X2NjbmFt ZSk7Ci0tCWlmIChzdHJjbXAobmV3X2NjdHlwZSwgIkRJUiIpID09IDApIHsKLS0JCWNoYXIgKnA7 Ci0tCQlwID0gc3RycmNocihjbGllbnQtPnN0b3JlLmVudnZhbCwgJy8nKTsKLS0JCWlmIChwKQot LQkJCSpwID0gJ1wwJzsKLSsKLSsJaWYgKHNldF9lbnYpIHsKLSsJCWNsaWVudC0+c3RvcmUuZW52 dmFyID0gIktSQjVDQ05BTUUiOwotIAl9Ci0gCWlmICgoc3RyY21wKG5ld19jY3R5cGUsICJGSUxF IikgPT0gMCkgfHwgKHN0cmNtcChuZXdfY2N0eXBlLCAiRElSIikgPT0gMCkpCi0gCQljbGllbnQt PnN0b3JlLmZpbGVuYW1lID0geHN0cmR1cChuZXdfY2NuYW1lKTsKLS0jZW5kaWYKLSAKLSAjaWZk ZWYgVVNFX1BBTQotLQlpZiAob3B0aW9ucy51c2VfcGFtKQotKwlpZiAob3B0aW9ucy51c2VfcGFt ICYmIHNldF9lbnYpCi0gCQlkb19wYW1fcHV0ZW52KGNsaWVudC0+c3RvcmUuZW52dmFyLCBjbGll bnQtPnN0b3JlLmVudnZhbCk7Ci0gI2VuZGlmCi0gCi1AQCAtMzY0LDcgKzM1NCw3IEBAIHNzaF9n c3NhcGlfa3JiNV9zdG9yZWNyZWRzKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCi0gCi0gCWNs aWVudC0+c3RvcmUuZGF0YSA9IGtyYl9jb250ZXh0OwotIAotLQlyZXR1cm47Ci0rCXJldHVybiBz ZXRfZW52OwotIH0KLSAKLSBpbnQKLWRpZmYgLS1naXQgYS9nc3Mtc2Vydi5jIGIvZ3NzLXNlcnYu YwotaW5kZXggNmJhYzQyOTMxLi5kMmJjMDM0ODYgMTAwNjQ0Ci0tLS0gYS9nc3Mtc2Vydi5jCi0r KysgYi9nc3Mtc2Vydi5jCi1AQCAtNDE0LDEzICs0MTQsMTUgQEAgc3NoX2dzc2FwaV9jbGVhbnVw X2NyZWRzKHZvaWQpCi0gfQotIAotIC8qIEFzIHVzZXIgKi8KLS12b2lkCi0raW50Ci0gc3NoX2dz c2FwaV9zdG9yZWNyZWRzKHZvaWQpCi0gewotIAlpZiAoZ3NzYXBpX2NsaWVudC5tZWNoICYmIGdz c2FwaV9jbGllbnQubWVjaC0+c3RvcmVjcmVkcykgewotLQkJKCpnc3NhcGlfY2xpZW50Lm1lY2gt PnN0b3JlY3JlZHMpKCZnc3NhcGlfY2xpZW50KTsKLSsJCXJldHVybiAoKmdzc2FwaV9jbGllbnQu bWVjaC0+c3RvcmVjcmVkcykoJmdzc2FwaV9jbGllbnQpOwotIAl9IGVsc2UKLSAJCWRlYnVnKCJz c2hfZ3NzYXBpX3N0b3JlY3JlZHM6IE5vdCBhIEdTU0FQSSBtZWNoYW5pc20iKTsKLSsKLSsJcmV0 dXJuIDA7Ci0gfQotIAotIC8qIFRoaXMgYWxsb3dzIEdTU0FQSSBtZXRob2RzIHRvIGRvIHRoaW5n cyB0byB0aGUgY2hpbGQncyBlbnZpcm9ubWVudCBiYXNlZAotQEAgLTUwMCw5ICs1MDIsNyBAQCBz c2hfZ3NzYXBpX3Jla2V5X2NyZWRzKHZvaWQpIHsKLSAJY2hhciAqZW52c3RyOwotICNlbmRpZgot IAotLQlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSA9PSBOVUxMICYmCi0tCSAgICBn c3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCA9PSBOVUxMICYmCi0tCSAgICBnc3NhcGlfY2xpZW50 LnN0b3JlLmVudnZhciA9PSBOVUxMKQotKwlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwg PT0gTlVMTCkKLSAJCXJldHVybjsKLSAKLSAJb2sgPSBtbV9zc2hfZ3NzYXBpX3VwZGF0ZV9jcmVk cygmZ3NzYXBpX2NsaWVudC5zdG9yZSk7Ci1kaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZj b25mLmMKLWluZGV4IDNiOTNjYTgyOS4uN2JmMTUwN2RmIDEwMDY0NAotLS0tIGEvc2VydmNvbmYu YwotKysrIGIvc2VydmNvbmYuYwotQEAgLTEzNiw2ICsxMzYsNyBAQCBpbml0aWFsaXplX3NlcnZl cl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0gCW9wdGlvbnMtPmtlcmJlcm9zX29y X2xvY2FsX3Bhc3N3ZCA9IC0xOwotIAlvcHRpb25zLT5rZXJiZXJvc190aWNrZXRfY2xlYW51cCA9 IC0xOwotIAlvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuID0gLTE7Ci0rCW9wdGlvbnMt PmtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0 aW9uPS0xOwotIAlvcHRpb25zLT5nc3Nfa2V5ZXggPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2NsZWFu dXBfY3JlZHMgPSAtMTsKLUBAIC0zNzYsNiArMzc3LDggQEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9v cHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0gCQlvcHRpb25zLT5rZXJiZXJvc190aWNr ZXRfY2xlYW51cCA9IDE7Ci0gCWlmIChvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuID09 IC0xKQotIAkJb3B0aW9ucy0+a2VyYmVyb3NfZ2V0X2Fmc190b2tlbiA9IDA7Ci0rCWlmIChvcHRp b25zLT5rZXJiZXJvc191bmlxdWVfY2NhY2hlID09IC0xKQotKwkJb3B0aW9ucy0+a2VyYmVyb3Nf dW5pcXVlX2NjYWNoZSA9IDA7Ci0gCWlmIChvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPT0g LTEpCi0gCQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAwOwotIAlpZiAob3B0aW9ucy0+ Z3NzX2tleWV4ID09IC0xKQotQEAgLTU1OCw3ICs1NjEsNyBAQCB0eXBlZGVmIGVudW0gewotIAlz UG9ydCwgc0hvc3RLZXlGaWxlLCBzTG9naW5HcmFjZVRpbWUsCi0gCXNQZXJtaXRSb290TG9naW4s IHNMb2dGYWNpbGl0eSwgc0xvZ0xldmVsLCBzTG9nVmVyYm9zZSwKLSAJc0tlcmJlcm9zQXV0aGVu dGljYXRpb24sIHNLZXJiZXJvc09yTG9jYWxQYXNzd2QsIHNLZXJiZXJvc1RpY2tldENsZWFudXAs Ci0tCXNLZXJiZXJvc0dldEFGU1Rva2VuLCBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwKLSsJc0tl cmJlcm9zR2V0QUZTVG9rZW4sIHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgc1Bhc3N3b3JkQXV0aGVu dGljYXRpb24sCi0gCXNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLCBzTGlzdGVuQWRkcmVz cywgc0FkZHJlc3NGYW1pbHksCi0gCXNQcmludE1vdGQsIHNQcmludExhc3RMb2csIHNJZ25vcmVS aG9zdHMsCi0gCXNYMTFGb3J3YXJkaW5nLCBzWDExRGlzcGxheU9mZnNldCwgc1gxMVVzZUxvY2Fs aG9zdCwKLUBAIC02NDksMTEgKzY1MiwxMyBAQCBzdGF0aWMgc3RydWN0IHsKLSAjZWxzZQotIAl7 ICJrZXJiZXJvc2dldGFmc3Rva2VuIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0g I2VuZGlmCi0rCXsgImtlcmJlcm9zdW5pcXVlY2NhY2hlIiwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hl LCBTU0hDRkdfR0xPQkFMIH0sCi0gI2Vsc2UKLSAJeyAia2VyYmVyb3NhdXRoZW50aWNhdGlvbiIs IHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJrZXJiZXJvc29ybG9jYWxwYXNzd2Qi LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAia2VyYmVyb3N0aWNrZXRjbGVh bnVwIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImtlcmJlcm9zZ2V0YWZz dG9rZW4iLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAia2VyYmVyb3N1bmlx dWVjY2FjaGUiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAjZW5kaWYKLSAJeyAi a2VyYmVyb3N0Z3RwYXNzaW5nIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsg ImFmc3Rva2VucGFzc2luZyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotQEAgLTE2 NjIsNiArMTY2NywxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJP cHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAotIAkJaW50cHRyID0gJm9wdGlvbnMtPmtlcmJl cm9zX2dldF9hZnNfdG9rZW47Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci0gCi0rCWNhc2Ugc0tlcmJl cm9zVW5pcXVlQ0NhY2hlOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPmtlcmJlcm9zX3VuaXF1ZV9j Y2FjaGU7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0gCWNhc2Ugc0dzc0F1dGhlbnRpY2F0aW9u OgotIAkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbjsKLSAJCWdvdG8gcGFy c2VfZmxhZzsKLUBAIC0zMjk1LDYgKzMzMDQsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25z ICpvKQotICMgaWZkZWYgVVNFX0FGUwotIAlkdW1wX2NmZ19mbXRpbnQoc0tlcmJlcm9zR2V0QUZT VG9rZW4sIG8tPmtlcmJlcm9zX2dldF9hZnNfdG9rZW4pOwotICMgZW5kaWYKLSsJZHVtcF9jZmdf Zm10aW50KHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgby0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZSk7 Ci0gI2VuZGlmCi0gI2lmZGVmIEdTU0FQSQotIAlkdW1wX2NmZ19mbXRpbnQoc0dzc0F1dGhlbnRp Y2F0aW9uLCBvLT5nc3NfYXV0aGVudGljYXRpb24pOwotZGlmZiAtLWdpdCBhL3NlcnZjb25mLmgg Yi9zZXJ2Y29uZi5oCi1pbmRleCBjM2Y1MDE0MDAuLmE0YTM4ZDZkNyAxMDA2NDQKLS0tLSBhL3Nl cnZjb25mLmgKLSsrKyBiL3NlcnZjb25mLmgKLUBAIC0xNDksNiArMTQ5LDggQEAgdHlwZWRlZiBz dHJ1Y3QgewotIAkJCQkJCSAqIGZpbGUgb24gbG9nb3V0LiAqLwotIAlpbnQgICAgIGtlcmJlcm9z X2dldF9hZnNfdG9rZW47CQkvKiBJZiB0cnVlLCB0cnkgdG8gZ2V0IEFGUyB0b2tlbiBpZgotIAkJ CQkJCSAqIGF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJvcy4gKi8KLSsJaW50ICAgICBrZXJiZXJv c191bmlxdWVfY2NhY2hlOwkJLyogSWYgdHJ1ZSwgdGhlIGFjcXVpcmVkIHRpY2tldCB3aWxsCi0r CQkJCQkJICogYmUgc3RvcmVkIGluIHBlci1zZXNzaW9uIGNjYWNoZSAqLwotIAlpbnQgICAgIGdz c19hdXRoZW50aWNhdGlvbjsJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQSSBhdXRoZW50aWNhdGlv biAqLwotIAlpbnQgICAgIGdzc19rZXlleDsJCS8qIElmIHRydWUsIHBlcm1pdCBHU1NBUEkga2V5 IGV4Y2hhbmdlICovCi0gCWludCAgICAgZ3NzX2NsZWFudXBfY3JlZHM7CS8qIElmIHRydWUsIGRl c3Ryb3kgY3JlZCBjYWNoZSBvbiBsb2dvdXQgKi8KLWRpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9z ZXNzaW9uLmMKLWluZGV4IDNlYWU1YmRmMy4uYjhhMmRhZTkyIDEwMDY0NAotLS0tIGEvc2Vzc2lv bi5jCi0rKysgYi9zZXNzaW9uLmMKLUBAIC05ODcsNyArOTg3LDggQEAgZG9fc2V0dXBfZW52KHN0 cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqc2hlbGwpCi0gCS8qIEFsbG93 IGFueSBHU1NBUEkgbWV0aG9kcyB0aGF0IHdlJ3ZlIHVzZWQgdG8gYWx0ZXIKLSAJICogdGhlIGNo aWxkJ3MgZW52aXJvbm1lbnQgYXMgdGhleSBzZWUgZml0Ci0gCSAqLwotLQlzc2hfZ3NzYXBpX2Rv X2NoaWxkKCZlbnYsICZlbnZzaXplKTsKLSsJaWYgKHMtPmF1dGhjdHh0LT5rcmI1X3NldF9lbnYp Ci0rCQlzc2hfZ3NzYXBpX2RvX2NoaWxkKCZlbnYsICZlbnZzaXplKTsKLSAjZW5kaWYKLSAKLSAJ LyogU2V0IGJhc2ljIGVudmlyb25tZW50LiAqLwotQEAgLTEwNjMsNyArMTA2NCw3IEBAIGRvX3Nl dHVwX2VudihzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKnNoZWxsKQot IAl9Ci0gI2VuZGlmCi0gI2lmZGVmIEtSQjUKLS0JaWYgKHMtPmF1dGhjdHh0LT5rcmI1X2NjbmFt ZSkKLSsJaWYgKHMtPmF1dGhjdHh0LT5rcmI1X2NjbmFtZSAmJiBzLT5hdXRoY3R4dC0+a3JiNV9z ZXRfZW52KQotIAkJY2hpbGRfc2V0X2VudigmZW52LCAmZW52c2l6ZSwgIktSQjVDQ05BTUUiLAot IAkJICAgIHMtPmF1dGhjdHh0LT5rcmI1X2NjbmFtZSk7Ci0gI2VuZGlmCi1kaWZmIC0tZ2l0IGEv c3NoLWdzcy5oIGIvc3NoLWdzcy5oCi1pbmRleCBkYjM0ZDc3ZjQuLmE4OTRlMjNjOSAxMDA2NDQK LS0tLSBhL3NzaC1nc3MuaAotKysrIGIvc3NoLWdzcy5oCi1AQCAtMTE2LDcgKzExNiw3IEBAIHR5 cGVkZWYgc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9zdHJ1Y3QgewotIAlpbnQgKCpkb2NoaWxkKSAo c3NoX2dzc2FwaV9jbGllbnQgKik7Ci0gCWludCAoKnVzZXJvaykgKHNzaF9nc3NhcGlfY2xpZW50 ICosIGNoYXIgKik7Ci0gCWludCAoKmxvY2FsbmFtZSkgKHNzaF9nc3NhcGlfY2xpZW50ICosIGNo YXIgKiopOwotLQl2b2lkICgqc3RvcmVjcmVkcykgKHNzaF9nc3NhcGlfY2xpZW50ICopOwotKwlp bnQgKCpzdG9yZWNyZWRzKSAoc3NoX2dzc2FwaV9jbGllbnQgKik7Ci0gCWludCAoKnVwZGF0ZWNy ZWRzKSAoc3NoX2dzc2FwaV9jY2FjaGUgKiwgc3NoX2dzc2FwaV9jbGllbnQgKik7Ci0gfSBzc2hf Z3NzYXBpX21lY2g7Ci0gCi1AQCAtMTg2LDcgKzE4Niw3IEBAIGludCBzc2hfZ3NzYXBpX3VzZXJv ayhjaGFyICpuYW1lLCBzdHJ1Y3QgcGFzc3dkICosIGludCBrZXgpOwotIE9NX3VpbnQzMiBzc2hf Z3NzYXBpX2NoZWNrbWljKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOwot IHZvaWQgc3NoX2dzc2FwaV9kb19jaGlsZChjaGFyICoqKiwgdV9pbnQgKik7Ci0gdm9pZCBzc2hf Z3NzYXBpX2NsZWFudXBfY3JlZHModm9pZCk7Ci0tdm9pZCBzc2hfZ3NzYXBpX3N0b3JlY3JlZHMo dm9pZCk7Ci0raW50IHNzaF9nc3NhcGlfc3RvcmVjcmVkcyh2b2lkKTsKLSBjb25zdCBjaGFyICpz c2hfZ3NzYXBpX2Rpc3BsYXluYW1lKHZvaWQpOwotIAotIGNoYXIgKnNzaF9nc3NhcGlfc2VydmVy X21lY2hhbmlzbXModm9pZCk7Ci1kaWZmIC0tZ2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNl c3Npb24uYwotaW5kZXggNmUyODAyMGU5Li4wMjhkNTg1MGUgMTAwNjQ0Ci0tLS0gYS9zc2hkLXNl c3Npb24uYwotKysrIGIvc3NoZC1zZXNzaW9uLmMKLUBAIC0xMzI3LDcgKzEzMjcsNyBAQCBtYWlu KGludCBhYywgY2hhciAqKmF2KQotICNpZmRlZiBHU1NBUEkKLSAJaWYgKG9wdGlvbnMuZ3NzX2F1 dGhlbnRpY2F0aW9uKSB7Ci0gCQl0ZW1wb3JhcmlseV91c2VfdWlkKGF1dGhjdHh0LT5wdyk7Ci0t CQlzc2hfZ3NzYXBpX3N0b3JlY3JlZHMoKTsKLSsJCWF1dGhjdHh0LT5rcmI1X3NldF9lbnYgPSBz c2hfZ3NzYXBpX3N0b3JlY3JlZHMoKTsKLSAJCXJlc3RvcmVfdWlkKCk7Ci0gCX0KLSAjZW5kaWYK LWRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggYjkwMDY4 YmYzLi5jYWUwZmQwYjQgMTAwNjQ0Ci0tLS0gYS9zc2hkX2NvbmZpZy41Ci0rKysgYi9zc2hkX2Nv bmZpZy41Ci1AQCAtMTAzMiw2ICsxMDMyLDE0IEBAIFNwZWNpZmllcyB3aGV0aGVyIHRvIGF1dG9t YXRpY2FsbHkgZGVzdHJveSB0aGUgdXNlcidzIHRpY2tldCBjYWNoZQotIGZpbGUgb24gbG9nb3V0 LgotIFRoZSBkZWZhdWx0IGlzCi0gLkNtIHllcyAuCi0rLkl0IENtIEtlcmJlcm9zVW5pcXVlQ0Nh Y2hlCi0rU3BlY2lmaWVzIHdoZXRoZXIgdG8gc3RvcmUgdGhlIGFjcXVpcmVkIHRpY2tldHMgaW4g dGhlIHBlci1zZXNzaW9uIGNyZWRlbnRpYWwKLStjYWNoZSB1bmRlciAvdG1wLyBvciB3aGV0aGVy IHRvIHVzZSBwZXItdXNlciBjcmVkZW50aWFsIGNhY2hlIGFzIGNvbmZpZ3VyZWQgaW4KLSsuUGEg L2V0Yy9rcmI1LmNvbmYgLgotK1RoZSBkZWZhdWx0IHZhbHVlCi0rLkNtIG5vCi0rY2FuIGxlYWQg dG8gb3ZlcndyaXRpbmcgcHJldmlvdXMgdGlja2V0cyBieSBzdWJzZXFlbnQgY29ubmVjdGlvbnMg dG8gdGhlIHNhbWUKLSt1c2VyIGFjY291bnQuCi0gLkl0IENtIEtleEFsZ29yaXRobXMKLSBTcGVj aWZpZXMgdGhlIHBlcm1pdHRlZCBLRVggKEtleSBFeGNoYW5nZSkgYWxnb3JpdGhtcyB0aGF0IHRo ZSBzZXJ2ZXIgd2lsbAotIG9mZmVyIHRvIGNsaWVudHMuCi0tLSAKLTIuNTIuMAotCgpkaWZmIC0t Z2l0IGEvMDAxMy1vcGVuc3NoLTkuNnAxLWdzc2FwaS1rZXlleC5wYXRjaCBiLzAwMTMtb3BlbnNz aC05LjZwMS1nc3NhcGkta2V5ZXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uOTJlYWJkOQotLS0gL2Rldi9udWxsCisrKyBiLzAwMTMtb3BlbnNzaC05LjZwMS1nc3Nh cGkta2V5ZXgucGF0Y2gKQEAgLTAsMCArMSw0MzQ5IEBACitGcm9tIDIwODA4MGVjMmNlZGRiOWU0 YzkxN2Q0ZTU3YjliYzQ0NTJkYjMwNDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBE bWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAy MDI1IDEzOjQzOjI4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvNTRdIG9wZW5zc2gtOS42cDEt Z3NzYXBpLWtleWV4CisKKy0tLQorIE1ha2VmaWxlLmluICAgICB8ICAgNyArLQorIGF1dGguYyAg ICAgICAgICB8ICAgMyArLQorIGF1dGgyLWdzcy5jICAgICB8ICA1MiArKystCisgYXV0aDItbWV0 aG9kcy5jIHwgICA2ICsKKyBhdXRoMi5jICAgICAgICAgfCAgIDIgKworIGNhbm9ob3N0LmMgICAg ICB8ICA5NCArKysrKysrCisgY2Fub2hvc3QuaCAgICAgIHwgICAzICsKKyBjbGllbnRsb29wLmMg ICAgfCAgMTIgKworIGNvbmZpZ3VyZS5hYyAgICB8ICAyNCArKworIGdzcy1nZW5yLmMgICAgICB8 IDMxMiArKysrKysrKysrKysrKysrKysrKy0KKyBnc3Mtc2Vydi1rcmI1LmMgfCAgOTcgKysrKysr LQorIGdzcy1zZXJ2LmMgICAgICB8IDIwMCArKysrKysrKysrKystLQorIGtleC1uYW1lcy5jICAg ICB8ICA2MSArKysrLQorIGtleC5jICAgICAgICAgICB8ICAzNSArKy0KKyBrZXguaCAgICAgICAg ICAgfCAgMzQgKysrCisga2V4ZGguYyAgICAgICAgIHwgIDEwICsKKyBrZXhnZW4uYyAgICAgICAg fCAgIDIgKy0KKyBrZXhnc3NjLmMgICAgICAgfCA3MDYgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCisga2V4Z3Nzcy5jICAgICAgIHwgNjAzICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbW9uaXRvci5jICAgICAgIHwgMTQ3 ICsrKysrKysrKy0KKyBtb25pdG9yLmggICAgICAgfCAgIDIgKworIG1vbml0b3Jfd3JhcC5jICB8 ICA1NyArKystCisgbW9uaXRvcl93cmFwLmggIHwgICA0ICstCisgcmVhZGNvbmYuYyAgICAgIHwg IDcwICsrKysrCisgcmVhZGNvbmYuaCAgICAgIHwgICA2ICsKKyBzZXJ2Y29uZi5jICAgICAgfCAg NDYgKysrKworIHNlcnZjb25mLmggICAgICB8ICAgMyArCisgc2Vzc2lvbi5jICAgICAgIHwgIDEw ICstCisgc3NoLWdzcy5oICAgICAgIHwgIDY0ICsrKystCisgc3NoLjEgICAgICAgICAgIHwgICA4 ICsKKyBzc2guYyAgICAgICAgICAgfCAgIDYgKy0KKyBzc2hfY29uZmlnICAgICAgfCAgIDIgKwor IHNzaF9jb25maWcuNSAgICB8ICA1OCArKysrCisgc3NoY29ubmVjdDIuYyAgIHwgMTU0ICsrKysr KysrKystCisgc3NoZC1hdXRoLmMgICAgIHwgIDU1ICsrKy0KKyBzc2hkLXNlc3Npb24uYyAgfCAg IDkgKy0KKyBzc2hkLmMgICAgICAgICAgfCAgIDMgKy0KKyBzc2hkX2NvbmZpZyAgICAgfCAgIDIg KworIHNzaGRfY29uZmlnLjUgICB8ICA0MCArKy0KKyBzc2hrZXkuYyAgICAgICAgfCAgNzIgKysr Ky0KKyBzc2hrZXkuaCAgICAgICAgfCAgIDEgKworIDQxIGZpbGVzIGNoYW5nZWQsIDMwMDQgaW5z ZXJ0aW9ucygrKSwgNzggZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGtleGdzc2Mu YworIGNyZWF0ZSBtb2RlIDEwMDY0NCBrZXhnc3NzLmMKKworZGlmZiAtLWdpdCBhL01ha2VmaWxl LmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDQyYjQ1ZDMzZC4uYTEyZjZhZDFkIDEwMDY0NAorLS0t IGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTA4LDYgKzEwOCw3IEBAIExJ QlNTSF9PQkpTPSR7TElCT1BFTlNTSF9PQkpTfSBcCisgCWtleC5vIGtleC1uYW1lcy5vIGtleGRo Lm8ga2V4Z2V4Lm8ga2V4ZWNkaC5vIGtleGMyNTUxOS5vIFwKKyAJa2V4Z2V4Yy5vIGtleGdleHMu byBcCisgCWtleHNudHJ1cDc2MXgyNTUxOS5vIGtleG1sa2VtNzY4eDI1NTE5Lm8gc250cnVwNzYx Lm8ga2V4Z2VuLm8gXAorKwlrZXhnc3NjLm8gXAorIAlzZnRwLXJlYWxwYXRoLm8gcGxhdGZvcm0t cGxlZGdlLm8gcGxhdGZvcm0tdHJhY2luZy5vIHBsYXRmb3JtLW1pc2MubyBcCisgCXNzaGJ1Zi1p by5vIG1pc2MtYWdlbnQubyBzc2hlcnItbGliY3J5cHRvLm8KKyAKK0BAIC0xMzEsNyArMTMyLDcg QEAgU1NIRF9TRVNTSU9OX09CSlM9c3NoZC1zZXNzaW9uLm8gYXV0aC1yaG9zdHMubyBhdXRoLXBh c3N3ZC5vIFwKKyAJYXV0aDItY2hhbGwubyBncm91cGFjY2Vzcy5vIFwKKyAJYXV0aC1ic2RhdXRo Lm8gYXV0aDItaG9zdGJhc2VkLm8gYXV0aDIta2JkaW50Lm8gXAorIAlhdXRoMi1ub25lLm8gYXV0 aDItcGFzc3dkLm8gYXV0aDItcHVia2V5Lm8gYXV0aDItcHVia2V5ZmlsZS5vIFwKKy0JbW9uaXRv ci5vIG1vbml0b3Jfd3JhcC5vIGF1dGgta3JiNS5vIFwKKysJbW9uaXRvci5vIG1vbml0b3Jfd3Jh cC5vIGF1dGgta3JiNS5vIGtleGdzc3MubyBcCisgCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3Nz LXNlcnYta3JiNS5vIFwKKyAJbG9naW5yZWMubyBhdXRoLXBhbS5vIGF1dGgtc2hhZG93Lm8gYXV0 aC1zaWEubyBcCisgCXNmdHAtc2VydmVyLm8gc2Z0cC1jb21tb24ubyBcCitAQCAtMTQzLDcgKzE0 NCw3IEBAIFNTSERfQVVUSF9PQkpTPXNzaGQtYXV0aC5vIFwKKyAJc2VydmVybG9vcC5vIGF1dGgu byBhdXRoMi5vIGF1dGgtb3B0aW9ucy5vIHNlc3Npb24ubyBhdXRoMi1jaGFsbC5vIFwKKyAJZ3Jv dXBhY2Nlc3MubyBhdXRoLWJzZGF1dGgubyBhdXRoMi1ob3N0YmFzZWQubyBhdXRoMi1rYmRpbnQu byBcCisgCWF1dGgyLW5vbmUubyBhdXRoMi1wYXNzd2QubyBhdXRoMi1wdWJrZXkubyBhdXRoMi1w dWJrZXlmaWxlLm8gXAorLQlhdXRoMi1nc3MubyBnc3Mtc2Vydi5vIGdzcy1zZXJ2LWtyYjUubyBc CisrCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIGtleGdzc3MubyBcCisg CW1vbml0b3Jfd3JhcC5vIGF1dGgta3JiNS5vIFwKKyAJYXVkaXQubyBhdWRpdC1ic20ubyBhdWRp dC1saW51eC5vIHBsYXRmb3JtLm8gXAorIAlsb2dpbnJlYy5vIGF1dGgtcGFtLm8gYXV0aC1zaGFk b3cubyBhdXRoLXNpYS5vIFwKK0BAIC01NTUsNyArNTU2LDcgQEAgcmVncmVzcy1wcmVwOgorIAkg ICAgbG4gLXMgYGNkICQoc3JjZGlyKSAmJiBwd2RgL3JlZ3Jlc3MvTWFrZWZpbGUgYHB3ZGAvcmVn cmVzcy9NYWtlZmlsZQorIAorIFJFR1JFU1NMSUJTPWxpYnNzaC5hICQoTElCQ09NUEFUKQorLVRF U1RMSUJTPSQoTElCUykgJChDSEFOTkVMTElCUykgQFRFU1RMSUJTQAorK1RFU1RMSUJTPSQoTElC UykgJChDSEFOTkVMTElCUykgJChHU1NMSUJTKSBAVEVTVExJQlNACisgCisgcmVncmVzcy9tb2Rw aXBlJChFWEVFWFQpOiAkKHNyY2RpcikvcmVncmVzcy9tb2RwaXBlLmMgJChSRUdSRVNTTElCUykK KyAJJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1MpIC1vICRAICQoc3JjZGlyKS9yZWdyZXNzL21v ZHBpcGUuYyBcCitkaWZmIC0tZ2l0IGEvYXV0aC5jIGIvYXV0aC5jCitpbmRleCBhMDIxN2E4MTEu LjE0MmFjNWFmZCAxMDA2NDQKKy0tLSBhL2F1dGguYworKysrIGIvYXV0aC5jCitAQCAtMzU0LDcg KzM1NCw4IEBAIGF1dGhfcm9vdF9hbGxvd2VkKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAq bWV0aG9kKQorIAljYXNlIFBFUk1JVF9OT19QQVNTV0Q6CisgCQlpZiAoc3RyY21wKG1ldGhvZCwg InB1YmxpY2tleSIpID09IDAgfHwKKyAJCSAgICBzdHJjbXAobWV0aG9kLCAiaG9zdGJhc2VkIikg PT0gMCB8fAorLQkJICAgIHN0cmNtcChtZXRob2QsICJnc3NhcGktd2l0aC1taWMiKSA9PSAwKQor KwkJICAgIHN0cmNtcChtZXRob2QsICJnc3NhcGktd2l0aC1taWMiKSA9PSAwIHx8CisrCQkgICAg c3RyY21wKG1ldGhvZCwgImdzc2FwaS1rZXlleCIpID09IDApCisgCQkJcmV0dXJuIDE7CisgCQli cmVhazsKKyAJY2FzZSBQRVJNSVRfRk9SQ0VEX09OTFk6CitkaWZmIC0tZ2l0IGEvYXV0aDItZ3Nz LmMgYi9hdXRoMi1nc3MuYworaW5kZXggYjM4MGRjMTE3Li45MGYwOTllODUgMTAwNjQ0CistLS0g YS9hdXRoMi1nc3MuYworKysrIGIvYXV0aDItZ3NzLmMKK0BAIC01MSw2ICs1MSw3IEBACisgI2Rl ZmluZSBTU0hfR1NTQVBJX01BWF9NRUNIUwkyMDQ4CisgCisgZXh0ZXJuIFNlcnZlck9wdGlvbnMg b3B0aW9uczsKKytleHRlcm4gc3RydWN0IGF1dGhtZXRob2RfY2ZnIG1ldGhvZGNmZ19nc3NrZXll eDsKKyBleHRlcm4gc3RydWN0IGF1dGhtZXRob2RfY2ZnIG1ldGhvZGNmZ19nc3NhcGk7CisgCisg c3RhdGljIGludCBpbnB1dF9nc3NhcGlfdG9rZW4oaW50IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0 cnVjdCBzc2ggKnNzaCk7CitAQCAtNTgsNiArNTksNDggQEAgc3RhdGljIGludCBpbnB1dF9nc3Nh cGlfbWljKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpOworIHN0YXRp YyBpbnQgaW5wdXRfZ3NzYXBpX2V4Y2hhbmdlX2NvbXBsZXRlKGludCB0eXBlLCB1aW50MzJfdCBw bGVuLCBzdHJ1Y3Qgc3NoICpzc2gpOworIHN0YXRpYyBpbnQgaW5wdXRfZ3NzYXBpX2VycnRvayhp bnQsIHVpbnQzMl90LCBzdHJ1Y3Qgc3NoICopOworIAorKy8qCisrICogVGhlICdnc3NhcGlfa2V5 ZXgnIHVzZXJhdXRoIG1lY2hhbmlzbS4KKysgKi8KKytzdGF0aWMgaW50CisrdXNlcmF1dGhfZ3Nz a2V5ZXgoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICptZXRob2QpCisreworKwlBdXRoY3R4 dCAqYXV0aGN0eHQgPSBzc2gtPmF1dGhjdHh0OworKwlpbnQgciwgYXV0aGVudGljYXRlZCA9IDA7 CisrCXN0cnVjdCBzc2hidWYgKmIgPSBOVUxMOworKwlnc3NfYnVmZmVyX2Rlc2MgbWljLCBnc3Ni dWY7CisrCXVfY2hhciAqcDsKKysJc2l6ZV90IGxlbjsKKysKKysJaWYgKChyID0gc3NocGt0X2dl dF9zdHJpbmcoc3NoLCAmcCwgJmxlbikpICE9IDAgfHwKKysJICAgIChyID0gc3NocGt0X2dldF9l bmQoc3NoKSkgIT0gMCkKKysJCWZhdGFsX2ZyKHIsICJwYXJzaW5nIik7CisrCisrCWlmICgoYiA9 IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKysJCWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7 CisrCisrCW1pYy52YWx1ZSA9IHA7CisrCW1pYy5sZW5ndGggPSBsZW47CisrCisrCXNzaF9nc3Nh cGlfYnVpbGRtaWMoYiwgYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0LT5zZXJ2aWNlLAorKwkgICAg Imdzc2FwaS1rZXlleCIsIHNzaC0+a2V4LT5zZXNzaW9uX2lkKTsKKysKKysJaWYgKChnc3NidWYu dmFsdWUgPSBzc2hidWZfbXV0YWJsZV9wdHIoYikpID09IE5VTEwpCisrCQlmYXRhbF9mKCJzc2hi dWZfbXV0YWJsZV9wdHIgZmFpbGVkIik7CisrCWdzc2J1Zi5sZW5ndGggPSBzc2hidWZfbGVuKGIp OworKworKwkvKiBnc3Nfa2V4X2NvbnRleHQgaXMgTlVMTCB3aXRoIHByaXZzZXAsIHNvIHdlIGNh bid0IGNoZWNrIGl0IGhlcmUgKi8KKysJaWYgKCFHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9jaGVj a21pYyhnc3Nfa2V4X2NvbnRleHQsCisrCSAgICAmZ3NzYnVmLCAmbWljKSkpCisrCQlhdXRoZW50 aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsCisrCQkgICAgYXV0 aGN0eHQtPnB3LCAxKTsKKysKKysJc3NoYnVmX2ZyZWUoYik7CisrCWZyZWUobWljLnZhbHVlKTsK KysKKysJcmV0dXJuIChhdXRoZW50aWNhdGVkKTsKKyt9CisrCisgLyoKKyAgKiBXZSBvbmx5IHN1 cHBvcnQgdGhvc2UgbWVjaGFuaXNtcyB0aGF0IHdlIGtub3cgYWJvdXQgKGllIG9uZXMgdGhhdCB3 ZSBrbm93CisgICogaG93IHRvIGNoZWNrIGxvY2FsIHVzZXIga3VzZXJvayBhbmQgdGhlIGxpa2Up CitAQCAtMjY3LDcgKzMxMCw3IEBAIGlucHV0X2dzc2FwaV9leGNoYW5nZV9jb21wbGV0ZShpbnQg dHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKQorIAlpZiAoKHIgPSBzc2hwa3Rf Z2V0X2VuZChzc2gpKSAhPSAwKQorIAkJZmF0YWxfZnIociwgInBhcnNlIHBhY2tldCIpOworIAor LQlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIpOwor KyAJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLCBh dXRoY3R4dC0+cHcsIDEpOworIAorIAlhdXRoY3R4dC0+cG9zdHBvbmVkID0gMDsKKyAJc3NoX2Rp c3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX1VTRVJBVVRIX0dTU0FQSV9UT0tFTiwgTlVMTCk7CitA QCAtMzE1LDcgKzM1OCw3IEBAIGlucHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQzMl90IHBs ZW4sIHN0cnVjdCBzc2ggKnNzaCkKKyAJZ3NzYnVmLmxlbmd0aCA9IHNzaGJ1Zl9sZW4oYik7Cisg CisgCWlmICghR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzY3R4dCwgJmdzc2J1 ZiwgJm1pYykpKQorLQkJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhj dHh0LT51c2VyKTsKKysJCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRo Y3R4dC0+dXNlciwgYXV0aGN0eHQtPnB3LCAwKTsKKyAJZWxzZQorIAkJbG9naXQoIkdTU0FQSSBN SUMgY2hlY2sgZmFpbGVkIik7CisgCitAQCAtMzMzLDYgKzM3NiwxMSBAQCBpbnB1dF9nc3NhcGlf bWljKGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCisgCXJldHVybiAw OworIH0KKyAKKytBdXRobWV0aG9kIG1ldGhvZF9nc3NrZXlleCA9IHsKKysJJm1ldGhvZGNmZ19n c3NrZXlleCwKKysJdXNlcmF1dGhfZ3Nza2V5ZXgsCisrfTsKKysKKyBBdXRobWV0aG9kIG1ldGhv ZF9nc3NhcGkgPSB7CisgCSZtZXRob2RjZmdfZ3NzYXBpLAorIAl1c2VyYXV0aF9nc3NhcGksCitk aWZmIC0tZ2l0IGEvYXV0aDItbWV0aG9kcy5jIGIvYXV0aDItbWV0aG9kcy5jCitpbmRleCA5OTYz N2E4OWIuLmEwNTkwOGNmMyAxMDA2NDQKKy0tLSBhL2F1dGgyLW1ldGhvZHMuYworKysrIGIvYXV0 aDItbWV0aG9kcy5jCitAQCAtNTAsNiArNTAsMTEgQEAgc3RydWN0IGF1dGhtZXRob2RfY2ZnIG1l dGhvZGNmZ19wdWJrZXkgPSB7CisgCSZvcHRpb25zLnB1YmtleV9hdXRoZW50aWNhdGlvbgorIH07 CisgI2lmZGVmIEdTU0FQSQorK3N0cnVjdCBhdXRobWV0aG9kX2NmZyBtZXRob2RjZmdfZ3Nza2V5 ZXggPSB7CisrCSJnc3NhcGkta2V5ZXgiLAorKwlOVUxMLAorKwkmb3B0aW9ucy5nc3NfYXV0aGVu dGljYXRpb24KKyt9OworIHN0cnVjdCBhdXRobWV0aG9kX2NmZyBtZXRob2RjZmdfZ3NzYXBpID0g eworIAkiZ3NzYXBpLXdpdGgtbWljIiwKKyAJTlVMTCwKK0BAIC03Niw2ICs4MSw3IEBAIHN0YXRp YyBzdHJ1Y3QgYXV0aG1ldGhvZF9jZmcgKmF1dGhtZXRob2RfY2Znc1tdID0geworIAkmbWV0aG9k Y2ZnX25vbmUsCisgCSZtZXRob2RjZmdfcHVia2V5LAorICNpZmRlZiBHU1NBUEkKKysJJm1ldGhv ZGNmZ19nc3NrZXlleCwKKyAJJm1ldGhvZGNmZ19nc3NhcGksCisgI2VuZGlmCisgCSZtZXRob2Rj ZmdfcGFzc3dkLAorZGlmZiAtLWdpdCBhL2F1dGgyLmMgYi9hdXRoMi5jCitpbmRleCBiZmQ0MjVl YWIuLjNjM2JkYjc3NiAxMDA2NDQKKy0tLSBhL2F1dGgyLmMKKysrKyBiL2F1dGgyLmMKK0BAIC03 MSw2ICs3MSw3IEBAIGV4dGVybiBBdXRobWV0aG9kIG1ldGhvZF9wYXNzd2Q7CisgZXh0ZXJuIEF1 dGhtZXRob2QgbWV0aG9kX2tiZGludDsKKyBleHRlcm4gQXV0aG1ldGhvZCBtZXRob2RfaG9zdGJh c2VkOworICNpZmRlZiBHU1NBUEkKKytleHRlcm4gQXV0aG1ldGhvZCBtZXRob2RfZ3Nza2V5ZXg7 CisgZXh0ZXJuIEF1dGhtZXRob2QgbWV0aG9kX2dzc2FwaTsKKyAjZW5kaWYKKyAKK0BAIC03OCw2 ICs3OSw3IEBAIEF1dGhtZXRob2QgKmF1dGhtZXRob2RzW10gPSB7CisgCSZtZXRob2Rfbm9uZSwK KyAJJm1ldGhvZF9wdWJrZXksCisgI2lmZGVmIEdTU0FQSQorKwkmbWV0aG9kX2dzc2tleWV4LAor IAkmbWV0aG9kX2dzc2FwaSwKKyAjZW5kaWYKKyAJJm1ldGhvZF9wYXNzd2QsCitkaWZmIC0tZ2l0 IGEvY2Fub2hvc3QuYyBiL2Nhbm9ob3N0LmMKK2luZGV4IDQwNzI1NjIwYy4uMGM3NzBjZmJiIDEw MDY0NAorLS0tIGEvY2Fub2hvc3QuYworKysrIGIvY2Fub2hvc3QuYworQEAgLTMzLDYgKzMzLDEw MCBAQAorICNpbmNsdWRlICJsb2cuaCIKKyAjaW5jbHVkZSAiY2Fub2hvc3QuaCIKKyAjaW5jbHVk ZSAibWlzYy5oIgorKyNpbmNsdWRlICJwYWNrZXQuaCIKKysKKysvKgorKyAqIFJldHVybnMgdGhl IHJlbW90ZSBETlMgaG9zdG5hbWUgYXMgYSBzdHJpbmcuIFRoZSByZXR1cm5lZCBzdHJpbmcgbXVz dCBub3QKKysgKiBiZSBmcmVlZC4gTkIuIHRoaXMgd2lsbCB1c3VhbGx5IHRyaWdnZXIgYSBETlMg cXVlcnkgdGhlIGZpcnN0IHRpbWUgaXQgaXMKKysgKiBjYWxsZWQuCisrICogVGhpcyBmdW5jdGlv biBkb2VzIGFkZGl0aW9uYWwgY2hlY2tzIG9uIHRoZSBob3N0bmFtZSB0byBtaXRpZ2F0ZSBzb21l CisrICogYXR0YWNrcyBvbiBsZWdhY3kgcmhvc3RzLXN0eWxlIGF1dGhlbnRpY2F0aW9uLgorKyAq IFhYWCBpcyBSaG9zdHNSU0FBdXRoZW50aWNhdGlvbiB2dWxuZXJhYmxlIHRvIHRoZXNlPworKyAq IFhYWCBDYW4gd2UgcmVtb3ZlIHRoZXNlIGNoZWNrcz8gKG9yIGlmIG5vdCwgcmVtb3ZlIFJob3N0 c1JTQUF1dGhlbnRpY2F0aW9uPykKKysgKi8KKysKKytjaGFyICoKKytyZW1vdGVfaG9zdG5hbWUo c3RydWN0IHNzaCAqc3NoKQorK3sKKysJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsKKysJ c29ja2xlbl90IGZyb21sZW47CisrCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpLCAqYWl0b3A7 CisrCWNoYXIgbmFtZVtOSV9NQVhIT1NUXSwgbnRvcDJbTklfTUFYSE9TVF07CisrCWNvbnN0IGNo YXIgKm50b3AgPSBzc2hfcmVtb3RlX2lwYWRkcihzc2gpOworKworKwkvKiBHZXQgSVAgYWRkcmVz cyBvZiBjbGllbnQuICovCisrCWZyb21sZW4gPSBzaXplb2YoZnJvbSk7CisrCW1lbXNldCgmZnJv bSwgMCwgc2l6ZW9mKGZyb20pKTsKKysJaWYgKGdldHBlZXJuYW1lKHNzaF9wYWNrZXRfZ2V0X2Nv bm5lY3Rpb25faW4oc3NoKSwKKysJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZnJvbSwgJmZyb21s ZW4pID09IC0xKSB7CisrCQlkZWJ1ZygiZ2V0cGVlcm5hbWUgZmFpbGVkOiAlLjEwMHMiLCBzdHJl cnJvcihlcnJubykpOworKwkJcmV0dXJuIHhzdHJkdXAobnRvcCk7CisrCX0KKysKKysJaXB2NjRf bm9ybWFsaXNlX21hcHBlZCgmZnJvbSwgJmZyb21sZW4pOworKwlpZiAoZnJvbS5zc19mYW1pbHkg PT0gQUZfSU5FVDYpCisrCQlmcm9tbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwor KworKwlkZWJ1ZzMoIlRyeWluZyB0byByZXZlcnNlIG1hcCBhZGRyZXNzICUuMTAwcy4iLCBudG9w KTsKKysJLyogTWFwIHRoZSBJUCBhZGRyZXNzIHRvIGEgaG9zdCBuYW1lLiAqLworKwlpZiAoZ2V0 bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLCBmcm9tbGVuLCBuYW1lLCBzaXplb2Yo bmFtZSksCisrCSAgICBOVUxMLCAwLCBOSV9OQU1FUkVRRCkgIT0gMCkgeworKwkJLyogSG9zdCBu YW1lIG5vdCBmb3VuZC4gIFVzZSBpcCBhZGRyZXNzLiAqLworKwkJcmV0dXJuIHhzdHJkdXAobnRv cCk7CisrCX0KKysKKysJLyoKKysJICogaWYgcmV2ZXJzZSBsb29rdXAgcmVzdWx0IGxvb2tzIGxp a2UgYSBudW1lcmljIGhvc3RuYW1lLAorKwkgKiBzb21lb25lIGlzIHRyeWluZyB0byB0cmljayB1 cyBieSBQVFIgcmVjb3JkIGxpa2UgZm9sbG93aW5nOgorKwkgKgkxLjEuMS4xMC5pbi1hZGRyLmFy cGEuCUlOIFBUUgkyLjMuNC41CisrCSAqLworKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGlu dHMpKTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOwkvKmR1bW15Ki8KKysJaGlu dHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKKysJaWYgKGdldGFkZHJpbmZvKG5hbWUsIE5V TEwsICZoaW50cywgJmFpKSA9PSAwKSB7CisrCQlsb2dpdCgiTmFzdHkgUFRSIHJlY29yZCBcIiVz XCIgaXMgc2V0IHVwIGZvciAlcywgaWdub3JpbmciLAorKwkJICAgIG5hbWUsIG50b3ApOworKwkJ ZnJlZWFkZHJpbmZvKGFpKTsKKysJCXJldHVybiB4c3RyZHVwKG50b3ApOworKwl9CisrCisrCS8q IE5hbWVzIGFyZSBzdG9yZWQgaW4gbG93ZXJjYXNlLiAqLworKwlsb3dlcmNhc2UobmFtZSk7Cisr CisrCS8qCisrCSAqIE1hcCBpdCBiYWNrIHRvIGFuIElQIGFkZHJlc3MgYW5kIGNoZWNrIHRoYXQg dGhlIGdpdmVuCisrCSAqIGFkZHJlc3MgYWN0dWFsbHkgaXMgYW4gYWRkcmVzcyBvZiB0aGlzIGhv c3QuICBUaGlzIGlzCisrCSAqIG5lY2Vzc2FyeSBiZWNhdXNlIGFueW9uZSB3aXRoIGFjY2VzcyB0 byBhIG5hbWUgc2VydmVyIGNhbgorKwkgKiBkZWZpbmUgYXJiaXRyYXJ5IG5hbWVzIGZvciBhbiBJ UCBhZGRyZXNzLiBNYXBwaW5nIGZyb20KKysJICogbmFtZSB0byBJUCBhZGRyZXNzIGNhbiBiZSB0 cnVzdGVkIGJldHRlciAoYnV0IGNhbiBzdGlsbCBiZQorKwkgKiBmb29sZWQgaWYgdGhlIGludHJ1 ZGVyIGhhcyBhY2Nlc3MgdG8gdGhlIG5hbWUgc2VydmVyIG9mCisrCSAqIHRoZSBkb21haW4pLgor KwkgKi8KKysJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCWhpbnRzLmFpX2Zh bWlseSA9IGZyb20uc3NfZmFtaWx5OworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFN OworKwlpZiAoZ2V0YWRkcmluZm8obmFtZSwgTlVMTCwgJmhpbnRzLCAmYWl0b3ApICE9IDApIHsK KysJCWxvZ2l0KCJyZXZlcnNlIG1hcHBpbmcgY2hlY2tpbmcgZ2V0YWRkcmluZm8gZm9yICUuNzAw cyAiCisrCQkgICAgIlslc10gZmFpbGVkLiIsIG5hbWUsIG50b3ApOworKwkJcmV0dXJuIHhzdHJk dXAobnRvcCk7CisrCX0KKysJLyogTG9vayBmb3IgdGhlIGFkZHJlc3MgZnJvbSB0aGUgbGlzdCBv ZiBhZGRyZXNzZXMuICovCisrCWZvciAoYWkgPSBhaXRvcDsgYWk7IGFpID0gYWktPmFpX25leHQp IHsKKysJCWlmIChnZXRuYW1laW5mbyhhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4sIG50b3Ay LAorKwkJICAgIHNpemVvZihudG9wMiksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKSA9PSAwICYm CisrCQkgICAgKHN0cmNtcChudG9wLCBudG9wMikgPT0gMCkpCisrCQkJCWJyZWFrOworKwl9Cisr CWZyZWVhZGRyaW5mbyhhaXRvcCk7CisrCS8qIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUg bGlzdCwgdGhlIGFkZHJlc3Mgd2FzIG5vdCB0aGVyZS4gKi8KKysJaWYgKGFpID09IE5VTEwpIHsK KysJCS8qIEFkZHJlc3Mgbm90IGZvdW5kIGZvciB0aGUgaG9zdCBuYW1lLiAqLworKwkJbG9naXQo IkFkZHJlc3MgJS4xMDBzIG1hcHMgdG8gJS42MDBzLCBidXQgdGhpcyBkb2VzIG5vdCAiCisrCQkg ICAgIm1hcCBiYWNrIHRvIHRoZSBhZGRyZXNzLiIsIG50b3AsIG5hbWUpOworKwkJcmV0dXJuIHhz dHJkdXAobnRvcCk7CisrCX0KKysJcmV0dXJuIHhzdHJkdXAobmFtZSk7CisrfQorIAorIHZvaWQK KyBpcHY2NF9ub3JtYWxpc2VfbWFwcGVkKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLCBz b2NrbGVuX3QgKmxlbikKK2RpZmYgLS1naXQgYS9jYW5vaG9zdC5oIGIvY2Fub2hvc3QuaAoraW5k ZXggMjZkNjI4NTVhLi4wY2FkYzlmMTggMTAwNjQ0CistLS0gYS9jYW5vaG9zdC5oCisrKysgYi9j YW5vaG9zdC5oCitAQCAtMTUsNiArMTUsOSBAQAorICNpZm5kZWYgX0NBTk9IT1NUX0gKKyAjZGVm aW5lIF9DQU5PSE9TVF9ICisgCisrc3RydWN0IHNzaDsKKysKKytjaGFyCQkqcmVtb3RlX2hvc3Ru YW1lKHN0cnVjdCBzc2ggKik7CisgY2hhcgkJKmdldF9wZWVyX2lwYWRkcihpbnQpOworIGludAkJ IGdldF9wZWVyX3BvcnQoaW50KTsKKyBjaGFyCQkqZ2V0X2xvY2FsX2lwYWRkcihpbnQpOworZGlm ZiAtLWdpdCBhL2NsaWVudGxvb3AuYyBiL2NsaWVudGxvb3AuYworaW5kZXggNmEwZTdiNmI4Li5h YjVjNGQ0YWQgMTAwNjQ0CistLS0gYS9jbGllbnRsb29wLmMKKysrKyBiL2NsaWVudGxvb3AuYwor QEAgLTEwMSw2ICsxMDEsMTAgQEAKKyAjaW5jbHVkZSAic3NoZXJyLmgiCisgI2luY2x1ZGUgImhv c3RmaWxlLmgiCisgCisrI2lmZGVmIEdTU0FQSQorKyNpbmNsdWRlICJzc2gtZ3NzLmgiCisrI2Vu ZGlmCisrCisgLyogUGVybWl0dGVkIFJTQSBzaWduYXR1cmUgYWxnb3JpdGhtcyBmb3IgVXBkYXRl SG9zdGtleXMgcHJvb2ZzICovCisgI2RlZmluZSBIT1NUS0VZX1BST09GX1JTQV9BTEdTCSJyc2Et c2hhMi01MTIscnNhLXNoYTItMjU2IgorIAorQEAgLTE2MTEsNiArMTYxNSwxNCBAQCBjbGllbnRf bG9vcChzdHJ1Y3Qgc3NoICpzc2gsIGludCBoYXZlX3B0eSwgaW50IGVzY2FwZV9jaGFyX2FyZywK KyAJCS8qIERvIGNoYW5uZWwgb3BlcmF0aW9ucy4gKi8KKyAJCWNoYW5uZWxfYWZ0ZXJfcG9sbChz c2gsIHBmZCwgbnBmZF9hY3RpdmUpOworIAorKyNpZmRlZiBHU1NBUEkKKysJCQlpZiAob3B0aW9u cy5nc3NfcmVuZXdhbF9yZWtleSAmJgorKwkJCSAgICBzc2hfZ3NzYXBpX2NyZWRlbnRpYWxzX3Vw ZGF0ZWQoTlVMTCkpIHsKKysJCQkJZGVidWcoImNyZWRlbnRpYWxzIHVwZGF0ZWQgLSBmb3JjaW5n IHJla2V5Iik7CisrCQkJCW5lZWRfcmVrZXlpbmcgPSAxOworKwkJCX0KKysjZW5kaWYKKysKKyAJ CS8qIEJ1ZmZlciBpbnB1dCBmcm9tIHRoZSBjb25uZWN0aW9uLiAgKi8KKyAJCWlmIChjb25uX2lu X3JlYWR5KQorIAkJCWNsaWVudF9wcm9jZXNzX25ldF9pbnB1dChzc2gpOworZGlmZiAtLWdpdCBh L2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGY4Mjc2Yzc4Li43NTU3NmI0NWQg MTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTg0NCw2 ICs4NDQsMzAgQEAgaW50IG1haW4odm9pZCkgeyBpZiAoTlNWZXJzaW9uT2ZSdW5UaW1lTGlicmFy eSgiU3lzdGVtIikgPj0gKDYwIDw8IDE2KSkKKyAJICAgIFtVc2UgdHVubmVsIGRldmljZSBjb21w YXRpYmlsaXR5IHRvIE9wZW5CU0RdKQorIAlBQ19ERUZJTkUoW1NTSF9UVU5fUFJFUEVORF9BRl0s IFsxXSwKKyAJICAgIFtQcmVwZW5kIHRoZSBhZGRyZXNzIGZhbWlseSB0byBJUCB0dW5uZWwgdHJh ZmZpY10pCisrCUFDX01TR19DSEVDS0lORyhbaWYgd2UgaGF2ZSB0aGUgU2VjdXJpdHkgQXV0aG9y aXphdGlvbiBTZXNzaW9uIEFQSV0pCisrCUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8U2VjdXJp dHkvQXV0aFNlc3Npb24uaD5dLAorKwkJW1Nlc3Npb25DcmVhdGUoMCwgMCk7XSwKKysJCVthY19j dl91c2Vfc2VjdXJpdHlfc2Vzc2lvbl9hcGk9InllcyIKKysJCSBBQ19ERUZJTkUoW1VTRV9TRUNV UklUWV9TRVNTSU9OX0FQSV0sIFsxXSwKKysJCQlbcGxhdGZvcm0gaGFzIHRoZSBTZWN1cml0eSBB dXRob3JpemF0aW9uIFNlc3Npb24gQVBJXSkKKysJCSBMSUJTPSIkTElCUyAtZnJhbWV3b3JrIFNl Y3VyaXR5IgorKwkJIEFDX01TR19SRVNVTFQoW3llc10pXSwKKysJCVthY19jdl91c2Vfc2VjdXJp dHlfc2Vzc2lvbl9hcGk9Im5vIgorKwkJIEFDX01TR19SRVNVTFQoW25vXSldKQorKwlBQ19NU0df Q0hFQ0tJTkcoW2lmIHdlIGhhdmUgYW4gaW4tbWVtb3J5IGNyZWRlbnRpYWxzIGNhY2hlXSkKKysJ QUNfVFJZX0NPTVBJTEUoCisrCQlbI2luY2x1ZGUgPEtlcmJlcm9zL0tlcmJlcm9zLmg+XSwKKysJ CVtjY19jb250ZXh0X3QgYzsKKysJCSAodm9pZCkgY2NfaW5pdGlhbGl6ZSAoJmMsIDAsIE5VTEws IE5VTEwpO10sCisrCQlbQUNfREVGSU5FKFtVU0VfQ0NBUEldLCBbMV0sCisrCQkJW3BsYXRmb3Jt IHVzZXMgYW4gaW4tbWVtb3J5IGNyZWRlbnRpYWxzIGNhY2hlXSkKKysJCSBMSUJTPSIkTElCUyAt ZnJhbWV3b3JrIFNlY3VyaXR5IgorKwkJIEFDX01TR19SRVNVTFQoW3llc10pCisrCQkgaWYgdGVz dCAieCRhY19jdl91c2Vfc2VjdXJpdHlfc2Vzc2lvbl9hcGkiID0gInhubyI7IHRoZW4KKysJCQlB Q19NU0dfRVJST1IoWyoqKiBOZWVkIGEgc2VjdXJpdHkgZnJhbWV3b3JrIHRvIHVzZSB0aGUgY3Jl ZGVudGlhbHMgY2FjaGUgQVBJICoqKl0pCisrCQlmaV0sCisrCQlbQUNfTVNHX1JFU1VMVChbbm9d KV0KKysJKQorIAltNF9wYXR0ZXJuX2FsbG93KFtBVV9JUHZdKQorIAlBQ19DSEVDS19ERUNMKFtB VV9JUHY0XSwgW10sCisgCSAgICBBQ19ERUZJTkUoW0FVX0lQdjRdLCBbMF0sIFtTeXN0ZW0gb25s eSBzdXBwb3J0cyBJUHY0IGF1ZGl0IHJlY29yZHNdKQorZGlmZiAtLWdpdCBhL2dzcy1nZW5yLmMg Yi9nc3MtZ2Vuci5jCitpbmRleCA3MDg4ZDkzYjQuLmEwN2RiZjUxMiAxMDA2NDQKKy0tLSBhL2dz cy1nZW5yLmMKKysrKyBiL2dzcy1nZW5yLmMKK0BAIC00Miw5ICs0MiwzMyBAQAorICNpbmNsdWRl ICJzc2hidWYuaCIKKyAjaW5jbHVkZSAibG9nLmgiCisgI2luY2x1ZGUgInNzaDIuaCIKKysjaW5j bHVkZSAiY2lwaGVyLmgiCisrI2luY2x1ZGUgInNzaGtleS5oIgorKyNpbmNsdWRlICJrZXguaCIK KysjaW5jbHVkZSAiZGlnZXN0LmgiCisrI2luY2x1ZGUgInBhY2tldC5oIgorIAorICNpbmNsdWRl ICJzc2gtZ3NzLmgiCisgCisrdHlwZWRlZiBzdHJ1Y3QgeworKwljaGFyICplbmNvZGVkOworKwln c3NfT0lEIG9pZDsKKyt9IHNzaF9nc3Nfa2V4X21hcHBpbmc7CisrCisrLyoKKysgKiBYWFggLSBJ dCB3b3VsZCBiZSBuaWNlIHRvIGZpbmQgYSBtb3JlIGVsZWdhbnQgd2F5IG9mIGhhbmRsaW5nIHRo ZQorKyAqIFhYWCAgIHBhc3Npbmcgb2YgdGhlIGtleSBleGNoYW5nZSBjb250ZXh0IHRvIHRoZSB1 c2VyYXV0aCByb3V0aW5lcworKyAqLworKworK0dzc2N0eHQgKmdzc19rZXhfY29udGV4dCA9IE5V TEw7CisrCisrc3RhdGljIHNzaF9nc3Nfa2V4X21hcHBpbmcgKmdzc19lbmMyb2lkID0gTlVMTDsK KysKKytpbnQKKytzc2hfZ3NzYXBpX29pZF90YWJsZV9vayh2b2lkKSB7CisrCXJldHVybiAoZ3Nz X2VuYzJvaWQgIT0gTlVMTCk7CisrfQorKworIC8qIHNzaGJ1Zl9nZXQgZm9yIGdzc19idWZmZXJf ZGVzYyAqLworIGludAorIHNzaF9nc3NhcGlfZ2V0X2J1ZmZlcl9kZXNjKHN0cnVjdCBzc2hidWYg KmIsIGdzc19idWZmZXJfZGVzYyAqZykKK0BAIC02MCw2ICs4NCwxNjkgQEAgc3NoX2dzc2FwaV9n ZXRfYnVmZmVyX2Rlc2Moc3RydWN0IHNzaGJ1ZiAqYiwgZ3NzX2J1ZmZlcl9kZXNjICpnKQorIAly ZXR1cm4gMDsKKyB9CisgCisrLyogc3NocGt0X2dldCBvZiBnc3NfYnVmZmVyX2Rlc2MgKi8KKytp bnQKKytzc2hfZ3NzYXBpX3NzaHBrdF9nZXRfYnVmZmVyX2Rlc2Moc3RydWN0IHNzaCAqc3NoLCBn c3NfYnVmZmVyX2Rlc2MgKmcpCisreworKwlpbnQgcjsKKysJdV9jaGFyICpwOworKwlzaXplX3Qg bGVuOworKworKwlpZiAoKHIgPSBzc2hwa3RfZ2V0X3N0cmluZyhzc2gsICZwLCAmbGVuKSkgIT0g MCkKKysJCXJldHVybiByOworKwlnLT52YWx1ZSA9IHA7CisrCWctPmxlbmd0aCA9IGxlbjsKKysJ cmV0dXJuIDA7CisrfQorKworKy8qCisrICogUmV0dXJuIGEgbGlzdCBvZiB0aGUgZ3NzLWdyb3Vw MS1zaGExIG1lY2hhbmlzbXMgc3VwcG9ydGVkIGJ5IHRoaXMgcHJvZ3JhbQorKyAqCisrICogV2Ug dGVzdCBtZWNoYW5pc21zIHRvIGVuc3VyZSB0aGF0IHdlIGNhbiB1c2UgdGhlbSwgdG8gYXZvaWQg c3RhcnRpbmcKKysgKiBhIGtleSBleGNoYW5nZSB3aXRoIGEgYmFkIG1lY2hhbmlzbQorKyAqLwor KworK2NoYXIgKgorK3NzaF9nc3NhcGlfY2xpZW50X21lY2hhbmlzbXMoY29uc3QgY2hhciAqaG9z dCwgY29uc3QgY2hhciAqY2xpZW50LAorKyAgICBjb25zdCBjaGFyICprZXgpIHsKKysJZ3NzX09J RF9zZXQgZ3NzX3N1cHBvcnRlZCA9IE5VTEw7CisrCU9NX3VpbnQzMiBtaW5fc3RhdHVzOworKwor KwlpZiAoR1NTX0VSUk9SKGdzc19pbmRpY2F0ZV9tZWNocygmbWluX3N0YXR1cywgJmdzc19zdXBw b3J0ZWQpKSkKKysJCXJldHVybiBOVUxMOworKworKwlyZXR1cm4gc3NoX2dzc2FwaV9rZXhfbWVj aHMoZ3NzX3N1cHBvcnRlZCwgc3NoX2dzc2FwaV9jaGVja19tZWNoYW5pc20sCisrCSAgICBob3N0 LCBjbGllbnQsIGtleCk7CisrfQorKworK2NoYXIgKgorK3NzaF9nc3NhcGlfa2V4X21lY2hzKGdz c19PSURfc2V0IGdzc19zdXBwb3J0ZWQsIHNzaF9nc3NhcGlfY2hlY2tfZm4gKmNoZWNrLAorKyAg ICBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICpjbGllbnQsIGNvbnN0IGNoYXIgKmtleCkg eworKwlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOworKwlzaXplX3QgaTsKKysJaW50IHIgPSBT U0hfRVJSX0FMTE9DX0ZBSUw7CisrCWludCBvaWRwb3MsIGVuY2xlbjsKKysJY2hhciAqbWVjaHMs ICplbmNvZGVkOworKwl1X2NoYXIgZGlnZXN0W1NTSF9ESUdFU1RfTUFYX0xFTkdUSF07CisrCWNo YXIgZGVyb2lkWzJdOworKwlzdHJ1Y3Qgc3NoX2RpZ2VzdF9jdHggKm1kID0gTlVMTDsKKysJY2hh ciAqcywgKmNwLCAqcDsKKysKKysJaWYgKGdzc19lbmMyb2lkICE9IE5VTEwpIHsKKysJCWZvciAo aSA9IDA7IGdzc19lbmMyb2lkW2ldLmVuY29kZWQgIT0gTlVMTDsgaSsrKQorKwkJCWZyZWUoZ3Nz X2VuYzJvaWRbaV0uZW5jb2RlZCk7CisrCQlmcmVlKGdzc19lbmMyb2lkKTsKKysJfQorKworKwln c3NfZW5jMm9pZCA9IHhtYWxsb2Moc2l6ZW9mKHNzaF9nc3Nfa2V4X21hcHBpbmcpICoKKysJICAg IChnc3Nfc3VwcG9ydGVkLT5jb3VudCArIDEpKTsKKysKKysJaWYgKChidWYgPSBzc2hidWZfbmV3 KCkpID09IE5VTEwpCisrCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOworKworKwlvaWRw b3MgPSAwOworKwlzID0gY3AgPSB4c3RyZHVwKGtleCk7CisrCWZvciAoaSA9IDA7IGkgPCBnc3Nf c3VwcG9ydGVkLT5jb3VudDsgaSsrKSB7CisrCQlpZiAoZ3NzX3N1cHBvcnRlZC0+ZWxlbWVudHNb aV0ubGVuZ3RoIDwgMTI4ICYmCisrCQkgICAgKCpjaGVjaykoTlVMTCwgJihnc3Nfc3VwcG9ydGVk LT5lbGVtZW50c1tpXSksIGhvc3QsIGNsaWVudCkpIHsKKysJCQlFVlBfTURfQ1RYICogY3R4ID0g TlVMTDsKKysJCQlFVlBfTUQgKm1kNSA9IE5VTEw7IC8qIEhlcmUgd2UgZG9uJ3QgdXNlIE1ENSBm b3IgY3J5cHRvIHB1cnBvc2VzICovCisrCQkJdW5zaWduZWQgaW50IG1kX3NpemUgPSBzaXplb2Yo ZGlnZXN0KTsKKysKKysJCQlkZXJvaWRbMF0gPSBTU0hfR1NTX09JRFRZUEU7CisrCQkJZGVyb2lk WzFdID0gZ3NzX3N1cHBvcnRlZC0+ZWxlbWVudHNbaV0ubGVuZ3RoOworKwkJCWlmICgobWQ1ID0g RVZQX01EX2ZldGNoKE5VTEwsICJNRDUiLCAicHJvdmlkZXI9ZGVmYXVsdCwtZmlwcyIpKSA9PSBO VUxMKQorKwkJCQlmYXRhbF9mcihyLCAiTUQ1IGZldGNoIGZhaWxlZCIpOworKwkJCWlmICgoY3R4 ID0gRVZQX01EX0NUWF9uZXcoKSkgPT0gTlVMTCkgeworKwkJCQlFVlBfTURfZnJlZShtZDUpOwor KwkJCQlmYXRhbF9mcihyLCAiZGlnZXN0IGN0eCBmYWlsZWQiKTsKKysJCQl9CisrCQkJaWYgKEVW UF9EaWdlc3RJbml0KGN0eCwgbWQ1KSA8PSAwCisrCQkJICAgIHx8IEVWUF9EaWdlc3RVcGRhdGUo Y3R4LCBkZXJvaWQsIDIpIDw9IDAKKysJCQkgICAgfHwgRVZQX0RpZ2VzdFVwZGF0ZShjdHgsIGdz c19zdXBwb3J0ZWQtPmVsZW1lbnRzW2ldLmVsZW1lbnRzLAorKwkJCQkgICAgZ3NzX3N1cHBvcnRl ZC0+ZWxlbWVudHNbaV0ubGVuZ3RoKSA8PSAwCisrCQkJICAgIHx8IEVWUF9EaWdlc3RGaW5hbChj dHgsIGRpZ2VzdCwgJm1kX3NpemUpIDw9IDApIHsKKysJCQkJRVZQX01EX2ZyZWUobWQ1KTsKKysJ CQkJRVZQX01EX0NUWF9mcmVlKGN0eCk7CisrCQkJCWZhdGFsX2ZyKHIsICJkaWdlc3QgZmFpbGVk Iik7CisrCQkJfQorKwkJCUVWUF9NRF9mcmVlKG1kNSk7IG1kNSA9IE5VTEw7CisrCQkJRVZQX01E X0NUWF9mcmVlKGN0eCk7IGN0eCA9IE5VTEw7CisrCisrCQkJZW5jb2RlZCA9IHhtYWxsb2Moc3No X2RpZ2VzdF9ieXRlcyhTU0hfRElHRVNUX01ENSkKKysJCQkgICAgKiAyKTsKKysJCQllbmNsZW4g PSBfX2I2NF9udG9wKGRpZ2VzdCwKKysJCQkgICAgc3NoX2RpZ2VzdF9ieXRlcyhTU0hfRElHRVNU X01ENSksIGVuY29kZWQsCisrCQkJICAgIHNzaF9kaWdlc3RfYnl0ZXMoU1NIX0RJR0VTVF9NRDUp ICogMik7CisrCisrCQkJY3AgPSBzdHJuY3B5KHMsIGtleCwgc3RybGVuKGtleCkpOworKwkJCWZv ciAoKHAgPSBzdHJzZXAoJmNwLCAiLCIpKTsgcCAmJiAqcCAhPSAnXDAnOworKwkJCQkocCA9IHN0 cnNlcCgmY3AsICIsIikpKSB7CisrCQkJCWlmIChzc2hidWZfbGVuKGJ1ZikgIT0gMCAmJgorKwkJ CQkgICAgKHIgPSBzc2hidWZfcHV0X3U4KGJ1ZiwgJywnKSkgIT0gMCkKKysJCQkJCWZhdGFsX2Zy KHIsICJzc2hidWZfcHV0X3U4IGVycm9yIik7CisrCQkJCWlmICgociA9IHNzaGJ1Zl9wdXQoYnVm LCBwLCBzdHJsZW4ocCkpKSAhPSAwIHx8CisrCQkJCSAgICAociA9IHNzaGJ1Zl9wdXQoYnVmLCBl bmNvZGVkLCBlbmNsZW4pKSAhPSAwKQorKwkJCQkJZmF0YWxfZnIociwgInNzaGJ1Zl9wdXQgZXJy b3IiKTsKKysJCQl9CisrCisrCQkJZ3NzX2VuYzJvaWRbb2lkcG9zXS5vaWQgPSAmKGdzc19zdXBw b3J0ZWQtPmVsZW1lbnRzW2ldKTsKKysJCQlnc3NfZW5jMm9pZFtvaWRwb3NdLmVuY29kZWQgPSBl bmNvZGVkOworKwkJCW9pZHBvcysrOworKwkJfQorKwl9CisrCWZyZWUocyk7CisrCWdzc19lbmMy b2lkW29pZHBvc10ub2lkID0gTlVMTDsKKysJZ3NzX2VuYzJvaWRbb2lkcG9zXS5lbmNvZGVkID0g TlVMTDsKKysKKysJaWYgKChtZWNocyA9IHNzaGJ1Zl9kdXBfc3RyaW5nKGJ1ZikpID09IE5VTEwp CisrCQlmYXRhbF9mKCJzc2hidWZfZHVwX3N0cmluZyBmYWlsZWQiKTsKKysKKysJc3NoYnVmX2Zy ZWUoYnVmKTsKKysKKysJaWYgKHN0cmxlbihtZWNocykgPT0gMCkgeworKwkJZnJlZShtZWNocyk7 CisrCQltZWNocyA9IE5VTEw7CisrCX0KKysKKysJcmV0dXJuIChtZWNocyk7CisrfQorKworK2dz c19PSUQKKytzc2hfZ3NzYXBpX2lkX2tleChHc3NjdHh0ICpjdHgsIGNoYXIgKm5hbWUsIGludCBr ZXhfdHlwZSkgeworKwlpbnQgaSA9IDA7CisrCisrI2RlZmluZSBTS0lQX0tFWF9OQU1FKHR5cGUp IFwKKysJY2FzZSB0eXBlOiBcCisrCQlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKHR5cGUjI19J RCkpIFwKKysJCQlyZXR1cm4gR1NTX0NfTk9fT0lEOyBcCisrCQluYW1lICs9IHNpemVvZih0eXBl IyNfSUQpIC0gMTsgXAorKwkJYnJlYWs7CisrCisrCXN3aXRjaCAoa2V4X3R5cGUpIHsKKysJU0tJ UF9LRVhfTkFNRShLRVhfR1NTX0dSUDFfU0hBMSkKKysJU0tJUF9LRVhfTkFNRShLRVhfR1NTX0dS UDE0X1NIQTEpCisrCVNLSVBfS0VYX05BTUUoS0VYX0dTU19HUlAxNF9TSEEyNTYpCisrCVNLSVBf S0VYX05BTUUoS0VYX0dTU19HUlAxNl9TSEE1MTIpCisrCVNLSVBfS0VYX05BTUUoS0VYX0dTU19H RVhfU0hBMSkKKysJU0tJUF9LRVhfTkFNRShLRVhfR1NTX05JU1RQMjU2X1NIQTI1NikKKysJU0tJ UF9LRVhfTkFNRShLRVhfR1NTX0MyNTUxOV9TSEEyNTYpCisrCWRlZmF1bHQ6CisrCQlyZXR1cm4g R1NTX0NfTk9fT0lEOworKwl9CisrCisrI3VuZGVmIFNLSVBfS0VYX05BTUUKKysKKysJd2hpbGUg KGdzc19lbmMyb2lkW2ldLmVuY29kZWQgIT0gTlVMTCAmJgorKwkgICAgc3RyY21wKG5hbWUsIGdz c19lbmMyb2lkW2ldLmVuY29kZWQpICE9IDApCisrCQlpKys7CisrCisrCWlmIChnc3NfZW5jMm9p ZFtpXS5vaWQgIT0gTlVMTCAmJiBjdHggIT0gTlVMTCkKKysJCXNzaF9nc3NhcGlfc2V0X29pZChj dHgsIGdzc19lbmMyb2lkW2ldLm9pZCk7CisrCisrCXJldHVybiBnc3NfZW5jMm9pZFtpXS5vaWQ7 CisrfQorKworIC8qIENoZWNrIHRoYXQgdGhlIE9JRCBpbiBhIGRhdGEgc3RyZWFtIG1hdGNoZXMg dGhhdCBpbiB0aGUgY29udGV4dCAqLworIGludAorIHNzaF9nc3NhcGlfY2hlY2tfb2lkKEdzc2N0 eHQgKmN0eCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK0BAIC0xNjgsNiArMzU1LDcgQEAgc3No X2dzc2FwaV9idWlsZF9jdHgoR3NzY3R4dCAqKmN0eCkKKyAJKCpjdHgpLT5jcmVkcyA9IEdTU19D X05PX0NSRURFTlRJQUw7CisgCSgqY3R4KS0+Y2xpZW50ID0gR1NTX0NfTk9fTkFNRTsKKyAJKCpj dHgpLT5jbGllbnRfY3JlZHMgPSBHU1NfQ19OT19DUkVERU5USUFMOworKwkoKmN0eCktPmZpcnN0 ID0gMTsKKyB9CisgCisgLyogRGVsZXRlIG91ciBjb250ZXh0LCBwcm92aWRpbmcgaXQgaGFzIGJl ZW4gYnVpbHQgY29ycmVjdGx5ICovCitAQCAtMTkzLDYgKzM4MSwxMiBAQCBzc2hfZ3NzYXBpX2Rl bGV0ZV9jdHgoR3NzY3R4dCAqKmN0eCkKKyAJCWdzc19yZWxlYXNlX25hbWUoJm1zLCAmKCpjdHgp LT5jbGllbnQpOworIAlpZiAoKCpjdHgpLT5jbGllbnRfY3JlZHMgIT0gR1NTX0NfTk9fQ1JFREVO VElBTCkKKyAJCWdzc19yZWxlYXNlX2NyZWQoJm1zLCAmKCpjdHgpLT5jbGllbnRfY3JlZHMpOwor Kwlzc2hidWZfZnJlZSgoKmN0eCktPnNoYXJlZF9zZWNyZXQpOworKwlzc2hidWZfZnJlZSgoKmN0 eCktPnNlcnZlcl9wdWJrZXkpOworKwlzc2hidWZfZnJlZSgoKmN0eCktPnNlcnZlcl9ob3N0X2tl eV9ibG9iKTsKKysJc3NoYnVmX2ZyZWUoKCpjdHgpLT5zZXJ2ZXJfYmxvYik7CisrCWV4cGxpY2l0 X2J6ZXJvKCgqY3R4KS0+aGFzaCwgc2l6ZW9mKCgqY3R4KS0+aGFzaCkpOworKwlCTl9jbGVhcl9m cmVlKCgqY3R4KS0+ZGhfY2xpZW50X3B1Yik7CisgCisgCWZyZWUoKmN0eCk7CisgCSpjdHggPSBO VUxMOworQEAgLTIxNiw3ICs0MTAsNyBAQCBzc2hfZ3NzYXBpX2luaXRfY3R4KEdzc2N0eHQgKmN0 eCwgaW50IGRlbGVnX2NyZWRzLCBnc3NfYnVmZmVyX2Rlc2MgKnJlY3ZfdG9rLAorIAl9CisgCisg CWN0eC0+bWFqb3IgPSBnc3NfaW5pdF9zZWNfY29udGV4dCgmY3R4LT5taW5vciwKKy0JICAgIEdT U19DX05PX0NSRURFTlRJQUwsICZjdHgtPmNvbnRleHQsIGN0eC0+bmFtZSwgY3R4LT5vaWQsCisr CSAgICBjdHgtPmNsaWVudF9jcmVkcywgJmN0eC0+Y29udGV4dCwgY3R4LT5uYW1lLCBjdHgtPm9p ZCwKKyAJICAgIEdTU19DX01VVFVBTF9GTEFHIHwgR1NTX0NfSU5URUdfRkxBRyB8IGRlbGVnX2Zs YWcsCisgCSAgICAwLCBOVUxMLCByZWN2X3RvaywgTlVMTCwgc2VuZF90b2ssIGZsYWdzLCBOVUxM KTsKKyAKK0BAIC0yNDUsOSArNDM5LDQzIEBAIHNzaF9nc3NhcGlfaW1wb3J0X25hbWUoR3NzY3R4 dCAqY3R4LCBjb25zdCBjaGFyICpob3N0KQorIAlyZXR1cm4gKGN0eC0+bWFqb3IpOworIH0KKyAK KytPTV91aW50MzIKKytzc2hfZ3NzYXBpX2NsaWVudF9pZGVudGl0eShHc3NjdHh0ICpjdHgsIGNv bnN0IGNoYXIgKm5hbWUpCisreworKwlnc3NfYnVmZmVyX2Rlc2MgZ3NzYnVmOworKwlnc3NfbmFt ZV90IGdzc25hbWU7CisrCU9NX3VpbnQzMiBzdGF0dXM7CisrCWdzc19PSURfc2V0IG9pZHNldDsK KysKKysJZ3NzYnVmLnZhbHVlID0gKHZvaWQgKikgbmFtZTsKKysJZ3NzYnVmLmxlbmd0aCA9IHN0 cmxlbihnc3NidWYudmFsdWUpOworKworKwlnc3NfY3JlYXRlX2VtcHR5X29pZF9zZXQoJnN0YXR1 cywgJm9pZHNldCk7CisrCWdzc19hZGRfb2lkX3NldF9tZW1iZXIoJnN0YXR1cywgY3R4LT5vaWQs ICZvaWRzZXQpOworKworKwljdHgtPm1ham9yID0gZ3NzX2ltcG9ydF9uYW1lKCZjdHgtPm1pbm9y LCAmZ3NzYnVmLAorKwkgICAgR1NTX0NfTlRfVVNFUl9OQU1FLCAmZ3NzbmFtZSk7CisrCisrCWlm ICghY3R4LT5tYWpvcikKKysJCWN0eC0+bWFqb3IgPSBnc3NfYWNxdWlyZV9jcmVkKCZjdHgtPm1p bm9yLAorKwkJICAgIGdzc25hbWUsIDAsIG9pZHNldCwgR1NTX0NfSU5JVElBVEUsCisrCQkgICAg JmN0eC0+Y2xpZW50X2NyZWRzLCBOVUxMLCBOVUxMKTsKKysKKysJZ3NzX3JlbGVhc2VfbmFtZSgm c3RhdHVzLCAmZ3NzbmFtZSk7CisrCWdzc19yZWxlYXNlX29pZF9zZXQoJnN0YXR1cywgJm9pZHNl dCk7CisrCisrCWlmIChjdHgtPm1ham9yKQorKwkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOworKwor KwlyZXR1cm4oY3R4LT5tYWpvcik7CisrfQorKworIE9NX3VpbnQzMgorIHNzaF9nc3NhcGlfc2ln bihHc3NjdHh0ICpjdHgsIGdzc19idWZmZXJfdCBidWZmZXIsIGdzc19idWZmZXJfdCBoYXNoKQor IHsKKysJaWYgKGN0eCA9PSBOVUxMKQorKwkJcmV0dXJuIC0xOworKworIAlpZiAoKGN0eC0+bWFq b3IgPSBnc3NfZ2V0X21pYygmY3R4LT5taW5vciwgY3R4LT5jb250ZXh0LAorIAkgICAgR1NTX0Nf UU9QX0RFRkFVTFQsIGJ1ZmZlciwgaGFzaCkpKQorIAkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOwor QEAgLTI1NSw2ICs0ODMsMTkgQEAgc3NoX2dzc2FwaV9zaWduKEdzc2N0eHQgKmN0eCwgZ3NzX2J1 ZmZlcl90IGJ1ZmZlciwgZ3NzX2J1ZmZlcl90IGhhc2gpCisgCXJldHVybiAoY3R4LT5tYWpvcik7 CisgfQorIAorKy8qIFByaXZpbGVkZ2VkIHdoZW4gdXNlZCBieSBzZXJ2ZXIgKi8KKytPTV91aW50 MzIKKytzc2hfZ3NzYXBpX2NoZWNrbWljKEdzc2N0eHQgKmN0eCwgZ3NzX2J1ZmZlcl90IGdzc2J1 ZiwgZ3NzX2J1ZmZlcl90IGdzc21pYykKKyt7CisrCWlmIChjdHggPT0gTlVMTCkKKysJCXJldHVy biAtMTsKKysKKysJY3R4LT5tYWpvciA9IGdzc192ZXJpZnlfbWljKCZjdHgtPm1pbm9yLCBjdHgt PmNvbnRleHQsCisrCSAgICBnc3NidWYsIGdzc21pYywgTlVMTCk7CisrCisrCXJldHVybiAoY3R4 LT5tYWpvcik7CisrfQorKworIHZvaWQKKyBzc2hfZ3NzYXBpX2J1aWxkbWljKHN0cnVjdCBzc2hi dWYgKmIsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisgICAgIGNvbnN0 IGNoYXIgKmNvbnRleHQsIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNlc3Npb25faWQpCitAQCAtMjcx LDExICs1MTIsMTYgQEAgc3NoX2dzc2FwaV9idWlsZG1pYyhzdHJ1Y3Qgc3NoYnVmICpiLCBjb25z dCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorIH0KKyAKKyBpbnQKKy1zc2hfZ3Nz YXBpX2NoZWNrX21lY2hhbmlzbShHc3NjdHh0ICoqY3R4LCBnc3NfT0lEIG9pZCwgY29uc3QgY2hh ciAqaG9zdCkKKytzc2hfZ3NzYXBpX2NoZWNrX21lY2hhbmlzbShHc3NjdHh0ICoqY3R4LCBnc3Nf T0lEIG9pZCwgY29uc3QgY2hhciAqaG9zdCwKKysgICAgY29uc3QgY2hhciAqY2xpZW50KQorIHsK KyAJZ3NzX2J1ZmZlcl9kZXNjIHRva2VuID0gR1NTX0NfRU1QVFlfQlVGRkVSOworIAlPTV91aW50 MzIgbWFqb3IsIG1pbm9yOworIAlnc3NfT0lEX2Rlc2Mgc3BuZWdvX29pZCA9IHs2LCAodm9pZCAq KSJceDJCXHgwNlx4MDFceDA1XHgwNVx4MDIifTsKKysJR3NzY3R4dCAqaW50Y3R4ID0gTlVMTDsK KysKKysJaWYgKGN0eCA9PSBOVUxMKQorKwkJY3R4ID0gJmludGN0eDsKKyAKKyAJLyogUkZDIDQ0 NjIgc2F5cyB3ZSBNVVNUIE5PVCBkbyBTUE5FR08gKi8KKyAJaWYgKG9pZC0+bGVuZ3RoID09IHNw bmVnb19vaWQubGVuZ3RoICYmCitAQCAtMjg1LDYgKzUzMSwxMCBAQCBzc2hfZ3NzYXBpX2NoZWNr X21lY2hhbmlzbShHc3NjdHh0ICoqY3R4LCBnc3NfT0lEIG9pZCwgY29uc3QgY2hhciAqaG9zdCkK KyAJc3NoX2dzc2FwaV9idWlsZF9jdHgoY3R4KTsKKyAJc3NoX2dzc2FwaV9zZXRfb2lkKCpjdHgs IG9pZCk7CisgCW1ham9yID0gc3NoX2dzc2FwaV9pbXBvcnRfbmFtZSgqY3R4LCBob3N0KTsKKysK KysJaWYgKCFHU1NfRVJST1IobWFqb3IpICYmIGNsaWVudCkKKysJCW1ham9yID0gc3NoX2dzc2Fw aV9jbGllbnRfaWRlbnRpdHkoKmN0eCwgY2xpZW50KTsKKysKKyAJaWYgKCFHU1NfRVJST1IobWFq b3IpKSB7CisgCQltYWpvciA9IHNzaF9nc3NhcGlfaW5pdF9jdHgoKmN0eCwgMCwgR1NTX0NfTk9f QlVGRkVSLCAmdG9rZW4sCisgCQkgICAgTlVMTCk7CitAQCAtMjk0LDEwICs1NDQsNjYgQEAgc3No X2dzc2FwaV9jaGVja19tZWNoYW5pc20oR3NzY3R4dCAqKmN0eCwgZ3NzX09JRCBvaWQsIGNvbnN0 IGNoYXIgKmhvc3QpCisgCQkJICAgIEdTU19DX05PX0JVRkZFUik7CisgCX0KKyAKKy0JaWYgKEdT U19FUlJPUihtYWpvcikpCisrCWlmIChHU1NfRVJST1IobWFqb3IpIHx8IGludGN0eCAhPSBOVUxM KQorIAkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KGN0eCk7CisgCisgCXJldHVybiAoIUdTU19FUlJP UihtYWpvcikpOworIH0KKyAKKytpbnQKKytzc2hfZ3NzYXBpX2NyZWRlbnRpYWxzX3VwZGF0ZWQo R3NzY3R4dCAqY3R4dCkgeworKwlzdGF0aWMgZ3NzX25hbWVfdCBzYXZlZF9uYW1lID0gR1NTX0Nf Tk9fTkFNRTsKKysJc3RhdGljIE9NX3VpbnQzMiBzYXZlZF9saWZldGltZSA9IDA7CisrCXN0YXRp YyBnc3NfT0lEIHNhdmVkX21lY2ggPSBHU1NfQ19OT19PSUQ7CisrCXN0YXRpYyBnc3NfbmFtZV90 IG5hbWU7CisrCXN0YXRpYyBPTV91aW50MzIgbGFzdF9jYWxsID0gMDsKKysJT01fdWludDMyIGxp ZmV0aW1lLCBub3csIG1ham9yLCBtaW5vcjsKKysJaW50IGVxdWFsOworKworKwlub3cgPSB0aW1l KE5VTEwpOworKworKwlpZiAoY3R4dCkgeworKwkJZGVidWcoIlJla2V5IGhhcyBoYXBwZW5lZCAt IHVwZGF0aW5nIHNhdmVkIHZlcnNpb25zIik7CisrCisrCQlpZiAoc2F2ZWRfbmFtZSAhPSBHU1Nf Q19OT19OQU1FKQorKwkJCWdzc19yZWxlYXNlX25hbWUoJm1pbm9yLCAmc2F2ZWRfbmFtZSk7Cisr CisrCQltYWpvciA9IGdzc19pbnF1aXJlX2NyZWQoJm1pbm9yLCBHU1NfQ19OT19DUkVERU5USUFM LAorKwkJICAgICZzYXZlZF9uYW1lLCAmc2F2ZWRfbGlmZXRpbWUsIE5VTEwsIE5VTEwpOworKwor KwkJaWYgKCFHU1NfRVJST1IobWFqb3IpKSB7CisrCQkJc2F2ZWRfbWVjaCA9IGN0eHQtPm9pZDsK KysJCSAgICAgICAgc2F2ZWRfbGlmZXRpbWUrPSBub3c7CisrCQl9IGVsc2UgeworKwkJCS8qIEhh bmRsZSB0aGUgZXJyb3IgKi8KKysJCX0KKysJCXJldHVybiAwOworKwl9CisrCisrCWlmIChub3cg LSBsYXN0X2NhbGwgPCAxMCkKKysJCXJldHVybiAwOworKworKwlsYXN0X2NhbGwgPSBub3c7Cisr CisrCWlmIChzYXZlZF9tZWNoID09IEdTU19DX05PX09JRCkKKysJCXJldHVybiAwOworKworKwlt YWpvciA9IGdzc19pbnF1aXJlX2NyZWQoJm1pbm9yLCBHU1NfQ19OT19DUkVERU5USUFMLAorKwkg ICAgJm5hbWUsICZsaWZldGltZSwgTlVMTCwgTlVMTCk7CisrCWlmIChtYWpvciA9PSBHU1NfU19D UkVERU5USUFMU19FWFBJUkVEKQorKwkJcmV0dXJuIDA7CisrCWVsc2UgaWYgKEdTU19FUlJPUiht YWpvcikpCisrCQlyZXR1cm4gMDsKKysKKysJbWFqb3IgPSBnc3NfY29tcGFyZV9uYW1lKCZtaW5v ciwgc2F2ZWRfbmFtZSwgbmFtZSwgJmVxdWFsKTsKKysJZ3NzX3JlbGVhc2VfbmFtZSgmbWlub3Is ICZuYW1lKTsKKysJaWYgKEdTU19FUlJPUihtYWpvcikpCisrCQlyZXR1cm4gMDsKKysKKysJaWYg KGVxdWFsICYmIChzYXZlZF9saWZldGltZSA8IGxpZmV0aW1lICsgbm93IC0gMTApKQorKwkJcmV0 dXJuIDE7CisrCisrCXJldHVybiAwOworK30KKysKKyAjZW5kaWYgLyogR1NTQVBJICovCitkaWZm IC0tZ2l0IGEvZ3NzLXNlcnYta3JiNS5jIGIvZ3NzLXNlcnYta3JiNS5jCitpbmRleCA0Y2FhYzMz N2MuLmJlNDAxZmUwZSAxMDA2NDQKKy0tLSBhL2dzcy1zZXJ2LWtyYjUuYworKysrIGIvZ3NzLXNl cnYta3JiNS5jCitAQCAtMSw3ICsxLDcgQEAKKyAvKiAkT3BlbkJTRDogZ3NzLXNlcnYta3JiNS5j LHYgMS4xMCAyMDI2LzAyLzA4IDE1OjI4OjAxIGR0dWNrZXIgRXhwICQgKi8KKyAKKyAvKgorLSAq IENvcHlyaWdodCAoYykgMjAwMS0yMDAzIFNpbW9uIFdpbGtpbnNvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNyBTaW1vbiBXaWxraW5zb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgICoKKyAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK0BAIC0x MjAsNyArMTIwLDcgQEAgc3NoX2dzc2FwaV9rcmI1X3N0b3JlY3JlZHMoc3NoX2dzc2FwaV9jbGll bnQgKmNsaWVudCkKKyAJa3JiNV9lcnJvcl9jb2RlIHByb2JsZW07CisgCWtyYjVfcHJpbmNpcGFs IHByaW5jOworIAlPTV91aW50MzIgbWFqX3N0YXR1cywgbWluX3N0YXR1czsKKy0JaW50IGxlbjsK KysJY29uc3QgY2hhciAqbmV3X2NjbmFtZSwgKm5ld19jY3R5cGU7CisgCWNvbnN0IGNoYXIgKmVy cm1zZzsKKyAKKyAJaWYgKGNsaWVudC0+Y3JlZHMgPT0gTlVMTCkgeworQEAgLTE4MCwxMSArMTgw LDI2IEBAIHNzaF9nc3NhcGlfa3JiNV9zdG9yZWNyZWRzKHNzaF9nc3NhcGlfY2xpZW50ICpjbGll bnQpCisgCQlyZXR1cm47CisgCX0KKyAKKy0JY2xpZW50LT5zdG9yZS5maWxlbmFtZSA9IHhzdHJk dXAoa3JiNV9jY19nZXRfbmFtZShrcmJfY29udGV4dCwgY2NhY2hlKSk7CisrCW5ld19jY3R5cGUg PSBrcmI1X2NjX2dldF90eXBlKGtyYl9jb250ZXh0LCBjY2FjaGUpOworKwluZXdfY2NuYW1lID0g a3JiNV9jY19nZXRfbmFtZShrcmJfY29udGV4dCwgY2NhY2hlKTsKKysKKyAJY2xpZW50LT5zdG9y ZS5lbnZ2YXIgPSAiS1JCNUNDTkFNRSI7CistCWxlbiA9IHN0cmxlbihjbGllbnQtPnN0b3JlLmZp bGVuYW1lKSArIDY7CistCWNsaWVudC0+c3RvcmUuZW52dmFsID0geG1hbGxvYyhsZW4pOworLQlz bnByaW50ZihjbGllbnQtPnN0b3JlLmVudnZhbCwgbGVuLCAiRklMRTolcyIsIGNsaWVudC0+c3Rv cmUuZmlsZW5hbWUpOworKyNpZmRlZiBVU0VfQ0NBUEkKKysJeGFzcHJpbnRmKCZjbGllbnQtPnN0 b3JlLmVudnZhbCwgIkFQSTolcyIsIG5ld19jY25hbWUpOworKwljbGllbnQtPnN0b3JlLmZpbGVu YW1lID0gTlVMTDsKKysjZWxzZQorKwlpZiAobmV3X2NjbmFtZVswXSA9PSAnOicpCisrCQluZXdf Y2NuYW1lKys7CisrCXhhc3ByaW50ZigmY2xpZW50LT5zdG9yZS5lbnZ2YWwsICIlczolcyIsIG5l d19jY3R5cGUsIG5ld19jY25hbWUpOworKwlpZiAoc3RyY21wKG5ld19jY3R5cGUsICJESVIiKSA9 PSAwKSB7CisrCQljaGFyICpwOworKwkJcCA9IHN0cnJjaHIoY2xpZW50LT5zdG9yZS5lbnZ2YWws ICcvJyk7CisrCQlpZiAocCkKKysJCQkqcCA9ICdcMCc7CisrCX0KKysJaWYgKChzdHJjbXAobmV3 X2NjdHlwZSwgIkZJTEUiKSA9PSAwKSB8fCAoc3RyY21wKG5ld19jY3R5cGUsICJESVIiKSA9PSAw KSkKKysJCWNsaWVudC0+c3RvcmUuZmlsZW5hbWUgPSB4c3RyZHVwKG5ld19jY25hbWUpOworKyNl bmRpZgorIAorICNpZmRlZiBVU0VfUEFNCisgCWlmIChvcHRpb25zLnVzZV9wYW0pCitAQCAtMTkz LDkgKzIwOCw3NiBAQCBzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcyhzc2hfZ3NzYXBpX2NsaWVu dCAqY2xpZW50KQorIAorIAlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0LCBjY2FjaGUpOworIAor KwljbGllbnQtPnN0b3JlLmRhdGEgPSBrcmJfY29udGV4dDsKKysKKyAJcmV0dXJuOworIH0KKyAK KytpbnQKKytzc2hfZ3NzYXBpX2tyYjVfdXBkYXRlY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0 b3JlLAorKyAgICBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQorK3sKKysJa3JiNV9jY2FjaGUg Y2NhY2hlID0gTlVMTDsKKysJa3JiNV9wcmluY2lwYWwgcHJpbmNpcGFsID0gTlVMTDsKKysJY2hh ciAqbmFtZSA9IE5VTEw7CisrCWtyYjVfZXJyb3JfY29kZSBwcm9ibGVtOworKwlPTV91aW50MzIg bWFqX3N0YXR1cywgbWluX3N0YXR1czsKKysKKysJaWYgKChwcm9ibGVtID0ga3JiNV9jY19yZXNv bHZlKGtyYl9jb250ZXh0LCBzdG9yZS0+ZW52dmFsLCAmY2NhY2hlKSkpIHsKKysgICAgICAgICAg ICAgICAgbG9naXQoImtyYjVfY2NfcmVzb2x2ZSgpOiAlLjEwMHMiLAorKyAgICAgICAgICAgICAg ICAgICAga3JiNV9nZXRfZXJyX3RleHQoa3JiX2NvbnRleHQsIHByb2JsZW0pKTsKKysgICAgICAg ICAgICAgICAgcmV0dXJuIDA7CisrCX0KKysKKysJLyogRmluZCBvdXQgd2hvIHRoZSBwcmluY2lw YWwgaW4gdGhpcyBjYWNoZSBpcyAqLworKwlpZiAoKHByb2JsZW0gPSBrcmI1X2NjX2dldF9wcmlu Y2lwYWwoa3JiX2NvbnRleHQsIGNjYWNoZSwKKysJICAgICZwcmluY2lwYWwpKSkgeworKwkJbG9n aXQoImtyYjVfY2NfZ2V0X3ByaW5jaXBhbCgpOiAlLjEwMHMiLAorKwkJICAgIGtyYjVfZ2V0X2Vy cl90ZXh0KGtyYl9jb250ZXh0LCBwcm9ibGVtKSk7CisrCQlrcmI1X2NjX2Nsb3NlKGtyYl9jb250 ZXh0LCBjY2FjaGUpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJaWYgKChwcm9ibGVtID0ga3Ji NV91bnBhcnNlX25hbWUoa3JiX2NvbnRleHQsIHByaW5jaXBhbCwgJm5hbWUpKSkgeworKwkJbG9n aXQoImtyYjVfdW5wYXJzZV9uYW1lKCk6ICUuMTAwcyIsCisrCQkgICAga3JiNV9nZXRfZXJyX3Rl eHQoa3JiX2NvbnRleHQsIHByb2JsZW0pKTsKKysJCWtyYjVfZnJlZV9wcmluY2lwYWwoa3JiX2Nv bnRleHQsIHByaW5jaXBhbCk7CisrCQlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0LCBjY2FjaGUp OworKwkJcmV0dXJuIDA7CisrCX0KKysKKysKKysJaWYgKHN0cmNtcChuYW1lLGNsaWVudC0+ZXhw b3J0ZWRuYW1lLnZhbHVlKSE9MCkgeworKwkJZGVidWcoIk5hbWUgaW4gbG9jYWwgY3JlZGVudGlh bHMgY2FjaGUgZGlmZmVycy4gTm90IHN0b3JpbmciKTsKKysJCWtyYjVfZnJlZV9wcmluY2lwYWwo a3JiX2NvbnRleHQsIHByaW5jaXBhbCk7CisrCQlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0LCBj Y2FjaGUpOworKwkJa3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa3JiX2NvbnRleHQsIG5hbWUpOwor KwkJcmV0dXJuIDA7CisrCX0KKysJa3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa3JiX2NvbnRleHQs IG5hbWUpOworKworKwkvKiBOYW1lIG1hdGNoZXMsIHNvIGxldHMgZ2V0IG9uIHdpdGggaXQhICov CisrCisrCWlmICgocHJvYmxlbSA9IGtyYjVfY2NfaW5pdGlhbGl6ZShrcmJfY29udGV4dCwgY2Nh Y2hlLCBwcmluY2lwYWwpKSkgeworKwkJbG9naXQoImtyYjVfY2NfaW5pdGlhbGl6ZSgpOiAlLjEw MHMiLAorKwkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KGtyYl9jb250ZXh0LCBwcm9ibGVtKSk7Cisr CQlrcmI1X2ZyZWVfcHJpbmNpcGFsKGtyYl9jb250ZXh0LCBwcmluY2lwYWwpOworKwkJa3JiNV9j Y19jbG9zZShrcmJfY29udGV4dCwgY2NhY2hlKTsKKysJCXJldHVybiAwOworKwl9CisrCisrCWty YjVfZnJlZV9wcmluY2lwYWwoa3JiX2NvbnRleHQsIHByaW5jaXBhbCk7CisrCisrCWlmICgobWFq X3N0YXR1cyA9IGdzc19rcmI1X2NvcHlfY2NhY2hlKCZtaW5fc3RhdHVzLCBjbGllbnQtPmNyZWRz LAorKwkgICAgY2NhY2hlKSkpIHsKKysJCWxvZ2l0KCJnc3Nfa3JiNV9jb3B5X2NjYWNoZSgpIGZh aWxlZC4gU29ycnkhIik7CisrCQlrcmI1X2NjX2Nsb3NlKGtyYl9jb250ZXh0LCBjY2FjaGUpOwor KwkJcmV0dXJuIDA7CisrCX0KKysKKysJcmV0dXJuIDE7CisrfQorKworIHNzaF9nc3NhcGlfbWVj aCBnc3NhcGlfa2VyYmVyb3NfbWVjaCA9IHsKKyAJInRvV001U2x3NUV3OE1xa2F5K2FsMmc9PSIs CisgCSJLZXJiZXJvcyIsCitAQCAtMjAzLDcgKzI4NSw4IEBAIHNzaF9nc3NhcGlfbWVjaCBnc3Nh cGlfa2VyYmVyb3NfbWVjaCA9IHsKKyAJTlVMTCwKKyAJJnNzaF9nc3NhcGlfa3JiNV91c2Vyb2ss CisgCU5VTEwsCistCSZzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcworKwkmc3NoX2dzc2FwaV9r cmI1X3N0b3JlY3JlZHMsCisrCSZzc2hfZ3NzYXBpX2tyYjVfdXBkYXRlY3JlZHMKKyB9OworIAor ICNlbmRpZiAvKiBLUkI1ICovCitkaWZmIC0tZ2l0IGEvZ3NzLXNlcnYuYyBiL2dzcy1zZXJ2LmMK K2luZGV4IGY5YWUzMDNiNS4uOGI0ZmE5Y2ZlIDEwMDY0NAorLS0tIGEvZ3NzLXNlcnYuYworKysr IGIvZ3NzLXNlcnYuYworQEAgLTEsNyArMSw3IEBACisgLyogJE9wZW5CU0Q6IGdzcy1zZXJ2LmMs diAxLjM3IDIwMjYvMDIvMTEgMTY6NTc6MzggZHR1Y2tlciBFeHAgJCAqLworIAorIC8qCistICog Q29weXJpZ2h0IChjKSAyMDAxLTIwMDMgU2ltb24gV2lsa2luc29uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA5IFNpbW9uIFdpbGtpbnNvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworQEAgLTQ2 LDE3ICs0NiwxOSBAQAorICNpbmNsdWRlICJzZXNzaW9uLmgiCisgI2luY2x1ZGUgIm1pc2MuaCIK KyAjaW5jbHVkZSAic2VydmNvbmYuaCIKKysjaW5jbHVkZSAidWlkc3dhcC5oIgorIAorICNpbmNs dWRlICJzc2gtZ3NzLmgiCisrI2luY2x1ZGUgIm1vbml0b3Jfd3JhcC5oIgorIAorIGV4dGVybiBT ZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisgCisgc3RhdGljIHNzaF9nc3NhcGlfY2xpZW50IGdzc2Fw aV9jbGllbnQgPQorLSAgICB7IEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVS LAorLSAgICBHU1NfQ19OT19DUkVERU5USUFMLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVM TH19OworKyAgICB7IEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1Nf Q19OT19DUkVERU5USUFMLAorKyAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTH0sIDAsIDB9OworIAorIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfbnVs bF9tZWNoID0KKy0gICAgeyBOVUxMLCBOVUxMLCB7MCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEws IE5VTEx9OworKyAgICB7IE5VTEwsIE5VTEwsIHswLCBOVUxMfSwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTH07CisgCisgI2lmZGVmIEtSQjUKKyBleHRlcm4gc3NoX2dzc2FwaV9tZWNoIGdz c2FwaV9rZXJiZXJvc19tZWNoOworQEAgLTE0Miw2ICsxNDQsMjkgQEAgc3NoX2dzc2FwaV9zZXJ2 ZXJfY3R4KEdzc2N0eHQgKipjdHgsIGdzc19PSUQgb2lkKQorIAlyZXR1cm4gKHNzaF9nc3NhcGlf YWNxdWlyZV9jcmVkKCpjdHgpKTsKKyB9CisgCisrLyogVW5wcml2aWxlZ2VkICovCisrY2hhciAq Cisrc3NoX2dzc2FwaV9zZXJ2ZXJfbWVjaGFuaXNtcyh2b2lkKSB7CisrCWlmIChzdXBwb3J0ZWRf b2lkcyA9PSBOVUxMKQorKwkJc3NoX2dzc2FwaV9wcmVwYXJlX3N1cHBvcnRlZF9vaWRzKCk7Cisr CXJldHVybiAoc3NoX2dzc2FwaV9rZXhfbWVjaHMoc3VwcG9ydGVkX29pZHMsCisrCSAgICAmc3No X2dzc2FwaV9zZXJ2ZXJfY2hlY2tfbWVjaCwgTlVMTCwgTlVMTCwKKysJICAgIG9wdGlvbnMuZ3Nz X2tleF9hbGdvcml0aG1zKSk7CisrfQorKworKy8qIFVucHJpdmlsZWdlZCAqLworK2ludAorK3Nz aF9nc3NhcGlfc2VydmVyX2NoZWNrX21lY2goR3NzY3R4dCAqKmR1bSwgZ3NzX09JRCBvaWQsIGNv bnN0IGNoYXIgKmRhdGEsCisrICAgIGNvbnN0IGNoYXIgKmR1bW15KSB7CisrCUdzc2N0eHQgKmN0 eCA9IE5VTEw7CisrCWludCByZXM7CisrCisrCXJlcyA9ICFHU1NfRVJST1IobW1fc3NoX2dzc2Fw aV9zZXJ2ZXJfY3R4KCZjdHgsIG9pZCkpOworKwlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmN0eCk7 CisrCisrCXJldHVybiAocmVzKTsKKyt9CisrCisgLyogVW5wcml2aWxlZ2VkICovCisgdm9pZAor IHNzaF9nc3NhcGlfc3VwcG9ydGVkX29pZHMoZ3NzX09JRF9zZXQgKm9pZHNldCkKK0BAIC0xNTIs NyArMTc3LDkgQEAgc3NoX2dzc2FwaV9zdXBwb3J0ZWRfb2lkcyhnc3NfT0lEX3NldCAqb2lkc2V0 KQorIAlnc3NfT0lEX3NldCBzdXBwb3J0ZWQ7CisgCisgCWdzc19jcmVhdGVfZW1wdHlfb2lkX3Nl dCgmbWluX3N0YXR1cywgb2lkc2V0KTsKKy0JZ3NzX2luZGljYXRlX21lY2hzKCZtaW5fc3RhdHVz LCAmc3VwcG9ydGVkKTsKKysKKysJaWYgKEdTU19FUlJPUihnc3NfaW5kaWNhdGVfbWVjaHMoJm1p bl9zdGF0dXMsICZzdXBwb3J0ZWQpKSkKKysJCXJldHVybjsKKyAKKyAJd2hpbGUgKHN1cHBvcnRl ZF9tZWNoc1tpXS0+bmFtZSAhPSBOVUxMKSB7CisgCQlpZiAoR1NTX0VSUk9SKGdzc190ZXN0X29p ZF9zZXRfbWVtYmVyKCZtaW5fc3RhdHVzLAorQEAgLTI3OCw4ICszMDUsNDggQEAgT01fdWludDMy Cisgc3NoX2dzc2FwaV9nZXRjbGllbnQoR3NzY3R4dCAqY3R4LCBzc2hfZ3NzYXBpX2NsaWVudCAq Y2xpZW50KQorIHsKKyAJaW50IGkgPSAwOworKwlpbnQgZXF1YWwgPSAwOworKwlnc3NfbmFtZV90 IG5ld19uYW1lID0gR1NTX0NfTk9fTkFNRTsKKysJZ3NzX2J1ZmZlcl9kZXNjIGVuYW1lID0gR1NT X0NfRU1QVFlfQlVGRkVSOworKworKwlpZiAob3B0aW9ucy5nc3Nfc3RvcmVfcmVrZXkgJiYgY2xp ZW50LT51c2VkICYmIGN0eC0+Y2xpZW50X2NyZWRzKSB7CisrCQlpZiAoY2xpZW50LT5tZWNoLT5v aWQubGVuZ3RoICE9IGN0eC0+b2lkLT5sZW5ndGggfHwKKysJCSAgICAobWVtY21wKGNsaWVudC0+ bWVjaC0+b2lkLmVsZW1lbnRzLAorKwkJICAgICBjdHgtPm9pZC0+ZWxlbWVudHMsIGN0eC0+b2lk LT5sZW5ndGgpICE9MCkpIHsKKysJCQlkZWJ1ZygiUmVrZXllZCBjcmVkZW50aWFscyBoYXZlIGRp ZmZlcmVudCBtZWNoYW5pc20iKTsKKysJCQlyZXR1cm4gR1NTX1NfQ09NUExFVEU7CisrCQl9Cisr CisrCQlpZiAoKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9jcmVkX2J5X21lY2goJmN0eC0+bWlu b3IsCisrCQkgICAgY3R4LT5jbGllbnRfY3JlZHMsIGN0eC0+b2lkLCAmbmV3X25hbWUsCisrCQkg ICAgTlVMTCwgTlVMTCwgTlVMTCkpKSB7CisrCQkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOworKwkJ CXJldHVybiAoY3R4LT5tYWpvcik7CisrCQl9CisrCisrCQljdHgtPm1ham9yID0gZ3NzX2NvbXBh cmVfbmFtZSgmY3R4LT5taW5vciwgY2xpZW50LT5uYW1lLAorKwkJICAgIG5ld19uYW1lLCAmZXF1 YWwpOworIAorLQlnc3NfYnVmZmVyX2Rlc2MgZW5hbWU7CisrCQlpZiAoR1NTX0VSUk9SKGN0eC0+ bWFqb3IpKSB7CisrCQkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOworKwkJCXJldHVybiAoY3R4LT5t YWpvcik7CisrCQl9CisrCisrCQlpZiAoIWVxdWFsKSB7CisrCQkJZGVidWcoIlJla2V5ZWQgY3Jl ZGVudGlhbHMgaGF2ZSBkaWZmZXJlbnQgbmFtZSIpOworKwkJCXJldHVybiBHU1NfU19DT01QTEVU RTsKKysJCX0KKysKKysJCWRlYnVnKCJNYXJraW5nIHJla2V5ZWQgY3JlZGVudGlhbHMgZm9yIGV4 cG9ydCIpOworKworKwkJZ3NzX3JlbGVhc2VfbmFtZSgmY3R4LT5taW5vciwgJmNsaWVudC0+bmFt ZSk7CisrCQlnc3NfcmVsZWFzZV9jcmVkKCZjdHgtPm1pbm9yLCAmY2xpZW50LT5jcmVkcyk7Cisr CQljbGllbnQtPm5hbWUgPSBuZXdfbmFtZTsKKysJCWNsaWVudC0+Y3JlZHMgPSBjdHgtPmNsaWVu dF9jcmVkczsKKysJCWN0eC0+Y2xpZW50X2NyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKKysJ CWNsaWVudC0+dXBkYXRlZCA9IDE7CisrCQlyZXR1cm4gR1NTX1NfQ09NUExFVEU7CisrCX0KKyAK KyAJY2xpZW50LT5tZWNoID0gTlVMTDsKKyAKK0BAIC0yOTQsNiArMzYxLDEzIEBAIHNzaF9nc3Nh cGlfZ2V0Y2xpZW50KEdzc2N0eHQgKmN0eCwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyAJ aWYgKGNsaWVudC0+bWVjaCA9PSBOVUxMKQorIAkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7CisgCisr CWlmIChjdHgtPmNsaWVudF9jcmVkcyAmJgorKwkgICAgKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWly ZV9jcmVkX2J5X21lY2goJmN0eC0+bWlub3IsCisrCSAgICAgY3R4LT5jbGllbnRfY3JlZHMsIGN0 eC0+b2lkLCAmY2xpZW50LT5uYW1lLCBOVUxMLCBOVUxMLCBOVUxMKSkpIHsKKysJCXNzaF9nc3Nh cGlfZXJyb3IoY3R4KTsKKysJCXJldHVybiAoY3R4LT5tYWpvcik7CisrCX0KKysKKyAJaWYgKChj dHgtPm1ham9yID0gZ3NzX2Rpc3BsYXlfbmFtZSgmY3R4LT5taW5vciwgY3R4LT5jbGllbnQsCisg CSAgICAmY2xpZW50LT5kaXNwbGF5bmFtZSwgTlVMTCkpKSB7CisgCQlzc2hfZ3NzYXBpX2Vycm9y KGN0eCk7CitAQCAtMzExLDYgKzM4NSw4IEBAIHNzaF9nc3NhcGlfZ2V0Y2xpZW50KEdzc2N0eHQg KmN0eCwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyAJCXJldHVybiAoY3R4LT5tYWpvcik7 CisgCX0KKyAKKysJZ3NzX3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAmZW5hbWUpOworKwor IAkvKiBXZSBjYW4ndCBjb3B5IHRoaXMgc3RydWN0dXJlLCBzbyB3ZSBqdXN0IG1vdmUgdGhlIHBv aW50ZXIgdG8gaXQgKi8KKyAJY2xpZW50LT5jcmVkcyA9IGN0eC0+Y2xpZW50X2NyZWRzOworIAlj dHgtPmNsaWVudF9jcmVkcyA9IEdTU19DX05PX0NSRURFTlRJQUw7CitAQCAtMzIxLDExICszOTcs MjAgQEAgc3NoX2dzc2FwaV9nZXRjbGllbnQoR3NzY3R4dCAqY3R4LCBzc2hfZ3NzYXBpX2NsaWVu dCAqY2xpZW50KQorIHZvaWQKKyBzc2hfZ3NzYXBpX2NsZWFudXBfY3JlZHModm9pZCkKKyB7Cist CWlmIChnc3NhcGlfY2xpZW50LnN0b3JlLmZpbGVuYW1lICE9IE5VTEwpIHsKKy0JCS8qIFVubGlu ayBwcm9iYWJseSBpc24ndCBzdWZmaWNpZW50ICovCistCQlkZWJ1ZygicmVtb3ZpbmcgZ3NzYXBp IGNyZWQgZmlsZVwiJXNcIiIsCistCQkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSk7 CistCQl1bmxpbmsoZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSk7CisrCWtyYjVfY2NhY2hl IGNjYWNoZSA9IE5VTEw7CisrCWtyYjVfZXJyb3JfY29kZSBwcm9ibGVtOworKworKwlpZiAoZ3Nz YXBpX2NsaWVudC5zdG9yZS5kYXRhICE9IE5VTEwpIHsKKysJCWlmICgocHJvYmxlbSA9IGtyYjVf Y2NfcmVzb2x2ZShnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEsIGdzc2FwaV9jbGllbnQuc3RvcmUu ZW52dmFsLCAmY2NhY2hlKSkpIHsKKysJCQlkZWJ1Z19mKCJrcmI1X2NjX3Jlc29sdmUoKTogJS4x MDBzIiwKKysJCQkJa3JiNV9nZXRfZXJyX3RleHQoZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhLCBw cm9ibGVtKSk7CisrCQl9IGVsc2UgaWYgKChwcm9ibGVtID0ga3JiNV9jY19kZXN0cm95KGdzc2Fw aV9jbGllbnQuc3RvcmUuZGF0YSwgY2NhY2hlKSkpIHsKKysJCQlkZWJ1Z19mKCJrcmI1X2NjX2Rl c3Ryb3koKTogJS4xMDBzIiwKKysJCQkJa3JiNV9nZXRfZXJyX3RleHQoZ3NzYXBpX2NsaWVudC5z dG9yZS5kYXRhLCBwcm9ibGVtKSk7CisrCQl9IGVsc2UgeworKwkJCWtyYjVfZnJlZV9jb250ZXh0 KGdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSk7CisrCQkJZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRh ID0gTlVMTDsKKysJCX0KKyAJfQorIH0KKyAKK0BAIC0zNjMsMTkgKzQ0OCwyMyBAQCBzc2hfZ3Nz YXBpX2RvX2NoaWxkKGNoYXIgKioqZW52cCwgdV9pbnQgKmVudnNpemVwKQorIAorIC8qIFByaXZp bGVnZWQgKi8KKyBpbnQKKy1zc2hfZ3NzYXBpX3VzZXJvayhjaGFyICp1c2VyKQorK3NzaF9nc3Nh cGlfdXNlcm9rKGNoYXIgKnVzZXIsIHN0cnVjdCBwYXNzd2QgKnB3LCBpbnQga2V4KQorIHsKKyAJ T01fdWludDMyIGxtaW47CisgCisrCSh2b2lkKSBrZXg7IC8qIHVzZWQgaW4gcHJpdmlsZWdlIHNl cGFyYXRpb24gKi8KKysKKyAJaWYgKGdzc2FwaV9jbGllbnQuZXhwb3J0ZWRuYW1lLmxlbmd0aCA9 PSAwIHx8CisgCSAgICBnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS52YWx1ZSA9PSBOVUxMKSB7 CisgCQlkZWJ1ZygiTm8gc3VpdGFibGUgY2xpZW50IGRhdGEiKTsKKyAJCXJldHVybiAwOworIAl9 CisgCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5tZWNoLT51c2Vyb2sp CistCQlpZiAoKCpnc3NhcGlfY2xpZW50Lm1lY2gtPnVzZXJvaykoJmdzc2FwaV9jbGllbnQsIHVz ZXIpKQorKwkJaWYgKCgqZ3NzYXBpX2NsaWVudC5tZWNoLT51c2Vyb2spKCZnc3NhcGlfY2xpZW50 LCB1c2VyKSkgeworKwkJCWdzc2FwaV9jbGllbnQudXNlZCA9IDE7CisrCQkJZ3NzYXBpX2NsaWVu dC5zdG9yZS5vd25lciA9IHB3OworIAkJCXJldHVybiAxOworLQkJZWxzZSB7CisrCQl9IGVsc2Ug eworIAkJCS8qIERlc3Ryb3kgZGVsZWdhdGVkIGNyZWRlbnRpYWxzIGlmIHVzZXJvayBmYWlscyAq LworIAkJCWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmdzc2FwaV9jbGllbnQuZGlzcGxheW5h bWUpOworIAkJCWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmdzc2FwaV9jbGllbnQuZXhwb3J0 ZWRuYW1lKTsKK0BAIC0zODksMTQgKzQ3OCw4NSBAQCBzc2hfZ3NzYXBpX3VzZXJvayhjaGFyICp1 c2VyKQorIAlyZXR1cm4gKDApOworIH0KKyAKKy0vKiBQcml2aWxlZ2VkICovCistT01fdWludDMy Cistc3NoX2dzc2FwaV9jaGVja21pYyhHc3NjdHh0ICpjdHgsIGdzc19idWZmZXJfdCBnc3NidWYs IGdzc19idWZmZXJfdCBnc3NtaWMpCisrLyogVGhlc2UgYml0cyBhcmUgb25seSB1c2VkIGZvciBy ZWtleWluZy4gVGhlIHVucHJpdmlsZWRnZWQgY2hpbGQgaXMgcnVubmluZworKyAqIGFzIHRoZSB1 c2VyLCB0aGUgbW9uaXRvciBpcyByb290LgorKyAqCisrICogSW4gdGhlIGNoaWxkLCB3ZSB3YW50 IHRvIDoKKysgKiAgICAqKSBBc2sgdGhlIG1vbml0b3IgdG8gc3RvcmUgb3VyIGNyZWRlbnRpYWxz IGludG8gdGhlIHN0b3JlIHdlIHNwZWNpZnkKKysgKiAgICAqKSBJZiBpdCBzdWNjZWVkcywgbWF5 YmUgZG8gYSBQQU0gdXBkYXRlCisrICovCisrCisrLyogU3R1ZmYgZm9yIFBBTSAqLworKworKyNp ZmRlZiBVU0VfUEFNCisrc3RhdGljIGludCBzc2hfZ3NzYXBpX3NpbXBsZV9jb252KGludCBuLCBj b25zdCBzdHJ1Y3QgcGFtX21lc3NhZ2UgKiptc2csCisrICAgIHN0cnVjdCBwYW1fcmVzcG9uc2Ug KipyZXNwLCB2b2lkICpkYXRhKQorIHsKKy0JY3R4LT5tYWpvciA9IGdzc192ZXJpZnlfbWljKCZj dHgtPm1pbm9yLCBjdHgtPmNvbnRleHQsCistCSAgICBnc3NidWYsIGdzc21pYywgTlVMTCk7Cisr CXJldHVybiAoUEFNX0NPTlZfRVJSKTsKKyt9CisrI2VuZGlmCisgCistCXJldHVybiAoY3R4LT5t YWpvcik7Cisrdm9pZAorK3NzaF9nc3NhcGlfcmVrZXlfY3JlZHModm9pZCkgeworKwlpbnQgb2s7 CisrI2lmZGVmIFVTRV9QQU0KKysJaW50IHJldDsKKysJcGFtX2hhbmRsZV90ICpwYW1oID0gTlVM TDsKKysJc3RydWN0IHBhbV9jb252IHBhbWNvbnYgPSB7c3NoX2dzc2FwaV9zaW1wbGVfY29udiwg TlVMTH07CisrCWNoYXIgKmVudnN0cjsKKysjZW5kaWYKKysKKysJaWYgKGdzc2FwaV9jbGllbnQu c3RvcmUuZmlsZW5hbWUgPT0gTlVMTCAmJgorKwkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2 YWwgPT0gTlVMTCAmJgorKwkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YXIgPT0gTlVMTCkK KysJCXJldHVybjsKKysKKysJb2sgPSBtbV9zc2hfZ3NzYXBpX3VwZGF0ZV9jcmVkcygmZ3NzYXBp X2NsaWVudC5zdG9yZSk7CisrCisrCWlmICghb2spCisrCQlyZXR1cm47CisrCisrCWRlYnVnKCJS ZWtleWVkIGNyZWRlbnRpYWxzIHN0b3JlZCBzdWNjZXNzZnVsbHkiKTsKKysKKysJLyogQWN0dWFs bHkgbWFuYWdpbmcgdG8gcGxheSB3aXRoIHRoZSBzc2ggcGFtIHN0YWNrIGZyb20gaGVyZSB3aWxs CisrCSAqIGJlIG5leHQgdG8gaW1wb3NzaWJsZS4gSW4gYW55IGNhc2UsIHdlIG1heSB3YW50IGRp ZmZlcmVudCBvcHRpb25zCisrCSAqIGZvciByZWtleWluZy4gU28sIHVzZSBvdXIgb3duIDopCisr CSAqLworKyNpZmRlZiBVU0VfUEFNCQorKwlyZXQgPSBwYW1fc3RhcnQoInNzaGQtcmVrZXkiLCBn c3NhcGlfY2xpZW50LnN0b3JlLm93bmVyLT5wd19uYW1lLAorKyAJICAgICZwYW1jb252LCAmcGFt aCk7CisrCWlmIChyZXQpCisrCQlyZXR1cm47CisrCisrCXhhc3ByaW50ZigmZW52c3RyLCAiJXM9 JXMiLCBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhciwKKysJICAgIGdzc2FwaV9jbGllbnQuc3Rv cmUuZW52dmFsKTsKKysKKysJcmV0ID0gcGFtX3B1dGVudihwYW1oLCBlbnZzdHIpOworKwlpZiAo IXJldCkKKysJCXBhbV9zZXRjcmVkKHBhbWgsIFBBTV9SRUlOSVRJQUxJWkVfQ1JFRCk7CisrCXBh bV9lbmQocGFtaCwgUEFNX1NVQ0NFU1MpOworKyNlbmRpZgorK30KKysKKytpbnQKKytzc2hfZ3Nz YXBpX3VwZGF0ZV9jcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUpIHsKKysJaW50IG9rID0g MDsKKysKKysJLyogQ2hlY2sgd2UndmUgZ290IGNyZWRlbnRpYWxzIHRvIHN0b3JlICovCisrCWlm ICghZ3NzYXBpX2NsaWVudC51cGRhdGVkKQorKwkJcmV0dXJuIDA7CisrCisrCWdzc2FwaV9jbGll bnQudXBkYXRlZCA9IDA7CisrCisrCXRlbXBvcmFyaWx5X3VzZV91aWQoZ3NzYXBpX2NsaWVudC5z dG9yZS5vd25lcik7CisrCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5t ZWNoLT51cGRhdGVjcmVkcykKKysJCW9rID0gKCpnc3NhcGlfY2xpZW50Lm1lY2gtPnVwZGF0ZWNy ZWRzKShzdG9yZSwgJmdzc2FwaV9jbGllbnQpOworKwllbHNlCisrCQlkZWJ1ZygiTm8gdXBkYXRl IGZ1bmN0aW9uIGZvciB0aGlzIG1lY2hhbmlzbSIpOworKworKwlyZXN0b3JlX3VpZCgpOworKwor KwlyZXR1cm4gb2s7CisgfQorIAorIC8qIFByaXZpbGVnZWQgKi8KK2RpZmYgLS1naXQgYS9rZXgt bmFtZXMuYyBiL2tleC1uYW1lcy5jCitpbmRleCA3NTFmMDZjZWEuLjc2OWEzNjgxMCAxMDA2NDQK Ky0tLSBhL2tleC1uYW1lcy5jCisrKysgYi9rZXgtbmFtZXMuYworQEAgLTM2LDYgKzM2LDcgQEAK KyAjZW5kaWYKKyAKKyAjaW5jbHVkZSAia2V4LmgiCisrI2luY2x1ZGUgInhtYWxsb2MuaCIKKyAj aW5jbHVkZSAibG9nLmgiCisgI2luY2x1ZGUgIm1hdGNoLmgiCisgI2luY2x1ZGUgImRpZ2VzdC5o IgorQEAgLTQzLDYgKzQ0LDEwIEBACisgCisgI2luY2x1ZGUgInNzaGVyci5oIgorIAorKyNpZmRl ZiBHU1NBUEkKKysjaW5jbHVkZSAic3NoLWdzcy5oIgorKyNlbmRpZgorKworIHN0cnVjdCBrZXhh bGcgeworIAljaGFyICpuYW1lOworIAl1X2ludCB0eXBlOworQEAgLTg4LDkgKzkzLDIyIEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGtleGFsZ3NbXSA9IHsKKyAjZW5kaWYgLyogSEFWRV9F VlBfU0hBMjU2IHx8ICFXSVRIX09QRU5TU0wgKi8KKyAJeyBOVUxMLCAwLCAtMSwgLTEsIDAgfSwK KyB9OworK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGdzc19rZXhhbGdzW10gPSB7CisrI2lm ZGVmIEdTU0FQSQorKwl7IEtFWF9HU1NfR0VYX1NIQTFfSUQsIEtFWF9HU1NfR0VYX1NIQTEsIDAs IFNTSF9ESUdFU1RfU0hBMSwgS0VYX05PVF9QUSB9LAorKwl7IEtFWF9HU1NfR1JQMV9TSEExX0lE LCBLRVhfR1NTX0dSUDFfU0hBMSwgMCwgU1NIX0RJR0VTVF9TSEExLCBLRVhfTk9UX1BRIH0sCisr CXsgS0VYX0dTU19HUlAxNF9TSEExX0lELCBLRVhfR1NTX0dSUDE0X1NIQTEsIDAsIFNTSF9ESUdF U1RfU0hBMSwgS0VYX05PVF9QUSB9LAorKwl7IEtFWF9HU1NfR1JQMTRfU0hBMjU2X0lELCBLRVhf R1NTX0dSUDE0X1NIQTI1NiwgMCwgU1NIX0RJR0VTVF9TSEEyNTYsIEtFWF9OT1RfUFEgfSwKKysJ eyBLRVhfR1NTX0dSUDE2X1NIQTUxMl9JRCwgS0VYX0dTU19HUlAxNl9TSEE1MTIsIDAsIFNTSF9E SUdFU1RfU0hBNTEyLCBLRVhfTk9UX1BRIH0sCisrCXsgS0VYX0dTU19OSVNUUDI1Nl9TSEEyNTZf SUQsIEtFWF9HU1NfTklTVFAyNTZfU0hBMjU2LAorKwkgICAgTklEX1g5XzYyX3ByaW1lMjU2djEs IFNTSF9ESUdFU1RfU0hBMjU2LCBLRVhfTk9UX1BRIH0sCisrCXsgS0VYX0dTU19DMjU1MTlfU0hB MjU2X0lELCBLRVhfR1NTX0MyNTUxOV9TSEEyNTYsIDAsIFNTSF9ESUdFU1RfU0hBMjU2LCBLRVhf Tk9UX1BRIH0sCisrI2VuZGlmCisrCXsgTlVMTCwgMCwgLTEsIC0xLCAwfSwKKyt9OworIAorLWNo YXIgKgorLWtleF9hbGdfbGlzdChjaGFyIHNlcCkKKytzdGF0aWMgY2hhciAqCisra2V4X2FsZ19s aXN0X2ludGVybmFsKGNoYXIgc2VwLCBjb25zdCBzdHJ1Y3Qga2V4YWxnICphbGdzKQorIHsKKyAJ Y2hhciAqcmV0ID0gTlVMTDsKKyAJY29uc3Qgc3RydWN0IGtleGFsZyAqazsKK0BAIC0xMDIsNiAr MTIwLDE4IEBAIGtleF9hbGdfbGlzdChjaGFyIHNlcCkKKyAJcmV0dXJuIHJldDsKKyB9CisgCisr Y2hhciAqCisra2V4X2FsZ19saXN0KGNoYXIgc2VwKQorK3sKKysJcmV0dXJuIGtleF9hbGdfbGlz dF9pbnRlcm5hbChzZXAsIGtleGFsZ3MpOworK30KKysKKytjaGFyICoKKytrZXhfZ3NzX2FsZ19s aXN0KGNoYXIgc2VwKQorK3sKKysJcmV0dXJuIGtleF9hbGdfbGlzdF9pbnRlcm5hbChzZXAsIGdz c19rZXhhbGdzKTsKKyt9CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBrZXhhbGcgKgorIGtleF9h bGdfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQorIHsKK0BAIC0xMTEsNiArMTQxLDEwIEBAIGtl eF9hbGdfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQorIAkJaWYgKHN0cmNtcChrLT5uYW1lLCBu YW1lKSA9PSAwKQorIAkJCXJldHVybiBrOworIAl9CisrCWZvciAoayA9IGdzc19rZXhhbGdzOyBr LT5uYW1lICE9IE5VTEw7IGsrKykgeworKwkJaWYgKHN0cm5jbXAoay0+bmFtZSwgbmFtZSwgc3Ry bGVuKGstPm5hbWUpKSA9PSAwKQorKwkJCXJldHVybiBrOworKwl9CisgCXJldHVybiBOVUxMOwor IH0KKyAKK0BAIC0zMzQsMyArMzY4LDI2IEBAIGtleF9hc3NlbWJsZV9uYW1lcyhjaGFyICoqbGlz dHAsIGNvbnN0IGNoYXIgKmRlZiwgY29uc3QgY2hhciAqYWxsKQorIAlmcmVlKHJldCk7CisgCXJl dHVybiByOworIH0KKysgCisrLyogVmFsaWRhdGUgR1NTIEtFWCBtZXRob2QgbmFtZSBsaXN0ICov CisraW50Cisra2V4X2dzc19uYW1lc192YWxpZChjb25zdCBjaGFyICpuYW1lcykKKyt7CisrCWNo YXIgKnMsICpjcCwgKnA7CisrCisrCWlmIChuYW1lcyA9PSBOVUxMIHx8ICpuYW1lcyA9PSAnXDAn KQorKwkJcmV0dXJuIDA7CisrCXMgPSBjcCA9IHhzdHJkdXAobmFtZXMpOworKwlmb3IgKChwID0g c3Ryc2VwKCZjcCwgIiwiKSk7IHAgJiYgKnAgIT0gJ1wwJzsKKysJICAgIChwID0gc3Ryc2VwKCZj cCwgIiwiKSkpIHsKKysJCWlmIChzdHJuY21wKHAsICJnc3MtIiwgNCkgIT0gMAorKwkJICB8fCBr ZXhfYWxnX2J5X25hbWUocCkgPT0gTlVMTCkgeworKwkJCWVycm9yKCJVbnN1cHBvcnRlZCBLRVgg YWxnb3JpdGhtIFwiJS4xMDBzXCIiLCBwKTsKKysJCQlmcmVlKHMpOworKwkJCXJldHVybiAwOwor KwkJfQorKwl9CisrCWRlYnVnMygiZ3NzIGtleCBuYW1lcyBvazogWyVzXSIsIG5hbWVzKTsKKysJ ZnJlZShzKTsKKysJcmV0dXJuIDE7CisrfQorZGlmZiAtLWdpdCBhL2tleC5jIGIva2V4LmMKK2lu ZGV4IDg1YjExMmM3NS4uMzYwOGE1NTA0IDEwMDY0NAorLS0tIGEva2V4LmMKKysrKyBiL2tleC5j CitAQCAtMjkzLDE3ICsyOTMsMzcgQEAgc3RhdGljIGludAorIGtleF9jb21wb3NlX2V4dF9pbmZv X3NlcnZlcihzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2hidWYgKm0pCisgeworIAlpbnQgcjsK KysJaW50IGhhdmVfa2V5ID0gMDsKKysJaW50IGV4dF9jb3VudCA9IDM7CisrCisrI2lmZGVmIEdT U0FQSQorKwkvKgorKwkgKiBDdXJyZW50bHkgR1NTIEtFWCBkb24ndCBwcm92aWRlIGhvc3Qga2V5 cyBhcyBvcHRpb25hbCBtZXNzYWdlLCBzbworKwkgKiBubyByZWFzb25zIHRvIGFubm91bmNlIHRo ZSBwdWJsaWNrZXktaG9zdGJvdW5kIGV4dGVuc2lvbgorKwkgKi8KKysJaWYgKHNzaC0+a2V4LT5n c3MgPT0gTlVMTCkKKysJICAgIGhhdmVfa2V5ID0gMTsKKysjZW5kaWYKKysJZXh0X2NvdW50ICs9 IGhhdmVfa2V5OworKworIAorIAlpZiAoc3NoLT5rZXgtPnNlcnZlcl9zaWdfYWxncyA9PSBOVUxM ICYmCisgCSAgICAoc3NoLT5rZXgtPnNlcnZlcl9zaWdfYWxncyA9IHNzaGtleV9hbGdfbGlzdCgw LCAxLCAxLCAnLCcpKSA9PSBOVUxMKQorIAkJcmV0dXJuIFNTSF9FUlJfQUxMT0NfRkFJTDsKKy0J aWYgKChyID0gc3NoYnVmX3B1dF91MzIobSwgNCkpICE9IDAgfHwKKysJaWYgKChyID0gc3NoYnVm X3B1dF91MzIobSwgZXh0X2NvdW50KSkgIT0gMCB8fAorIAkgICAgKHIgPSBzc2hidWZfcHV0X2Nz dHJpbmcobSwgInNlcnZlci1zaWctYWxncyIpKSAhPSAwIHx8CistCSAgICAociA9IHNzaGJ1Zl9w dXRfY3N0cmluZyhtLCBzc2gtPmtleC0+c2VydmVyX3NpZ19hbGdzKSkgIT0gMCB8fAorLQkgICAg KHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwKKy0JICAgICJwdWJsaWNrZXktaG9zdGJvdW5kQG9w ZW5zc2guY29tIikpICE9IDAgfHwKKy0JICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sICIw IikpICE9IDAgfHwKKy0JICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sICJwaW5nQG9wZW5z c2guY29tIikpICE9IDAgfHwKKysJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sIHNzaC0+ a2V4LT5zZXJ2ZXJfc2lnX2FsZ3MpKSAhPSAwKSB7CisrCQllcnJvcl9mcihyLCAiY29tcG9zZSIp OworKwkJcmV0dXJuIHI7CisrCX0KKysJaWYgKGhhdmVfa2V5KSB7CisrCSAgICBpZiAoKHIgPSBz c2hidWZfcHV0X2NzdHJpbmcobSwgInB1YmxpY2tleS1ob3N0Ym91bmRAb3BlbnNzaC5jb20iKSkg IT0gMCB8fAorKwkgICAgICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sICIwIikpICE9IDAp IHsKKysJCSAgICBlcnJvcl9mcihyLCAiY29tcG9zZSIpOworKwkJICAgIHJldHVybiByOworKwkJ fQorKwl9CisrCWlmICgociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCAicGluZ0BvcGVuc3NoLmNv bSIpKSAhPSAwIHx8CisgCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCAiMCIpKSAhPSAw IHx8CisgCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCAiYWdlbnQtZm9yd2FyZCIpKSAh PSAwIHx8CisgCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhtLCAiMCIpKSAhPSAwKSB7CitA QCAtNzQxLDYgKzc2MSw5IEBAIGtleF9mcmVlKHN0cnVjdCBrZXggKmtleCkKKyAJc3NoYnVmX2Zy ZWUoa2V4LT5zZXJ2ZXJfdmVyc2lvbik7CisgCXNzaGJ1Zl9mcmVlKGtleC0+Y2xpZW50X3B1Yik7 CisgCXNzaGJ1Zl9mcmVlKGtleC0+c2Vzc2lvbl9pZCk7CisrI2lmZGVmIEdTU0FQSQorKwlmcmVl KGtleC0+Z3NzX2hvc3QpOworKyNlbmRpZiAvKiBHU1NBUEkgKi8KKyAJc3NoYnVmX2ZyZWUoa2V4 LT5pbml0aWFsX3NpZyk7CisgCXNzaGtleV9mcmVlKGtleC0+aW5pdGlhbF9ob3N0a2V5KTsKKyAJ ZnJlZShrZXgtPmZhaWxlZF9jaG9pY2UpOworZGlmZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKK2lu ZGV4IDRmNmQ5MjE2NC4uMmM4NmIyNWY5IDEwMDY0NAorLS0tIGEva2V4LmgKKysrKyBiL2tleC5o CitAQCAtMjksNiArMjksMTAgQEAKKyAjaW5jbHVkZSAibWFjLmgiCisgI2luY2x1ZGUgImNyeXB0 b19hcGkuaCIKKyAKKysjaWZkZWYgR1NTQVBJCisrIyBpbmNsdWRlICJzc2gtZ3NzLmgiIC8qIEdz c2N0eHQgKi8KKysjZW5kaWYKKysKKyAjaWZkZWYgV0lUSF9PUEVOU1NMCisgIyBpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisgIyBpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CitAQCAtMTAzLDYgKzEwNywx NSBAQCBlbnVtIGtleF9leGNoYW5nZSB7CisgCUtFWF9DMjU1MTlfU0hBMjU2LAorIAlLRVhfS0VN X1NOVFJVUDc2MVgyNTUxOV9TSEE1MTIsCisgCUtFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2 LAorKyNpZmRlZiBHU1NBUEkKKysJS0VYX0dTU19HUlAxX1NIQTEsCisrCUtFWF9HU1NfR1JQMTRf U0hBMSwKKysJS0VYX0dTU19HUlAxNF9TSEEyNTYsCisrCUtFWF9HU1NfR1JQMTZfU0hBNTEyLAor KwlLRVhfR1NTX0dFWF9TSEExLAorKwlLRVhfR1NTX05JU1RQMjU2X1NIQTI1NiwKKysJS0VYX0dT U19DMjU1MTlfU0hBMjU2LAorKyNlbmRpZgorIAlLRVhfTUFYCisgfTsKKyAKK0BAIC0xNzAsNiAr MTgzLDEzIEBAIHN0cnVjdCBrZXggeworIAl1X2ludAlmbGFnczsKKyAJaW50CWhhc2hfYWxnOwor IAlpbnQJZWNfbmlkOworKyNpZmRlZiBHU1NBUEkKKysJR3NzY3R4dCAqZ3NzOworKwlpbnQJZ3Nz X2RlbGVnX2NyZWRzOworKwlpbnQJZ3NzX3RydXN0X2RuczsKKysJY2hhciAgICAqZ3NzX2hvc3Q7 CisrCWNoYXIJKmdzc19jbGllbnQ7CisrI2VuZGlmCisgCWNoYXIJKmZhaWxlZF9jaG9pY2U7Cisg CWludAkoKnZlcmlmeV9ob3N0X2tleSkoc3RydWN0IHNzaGtleSAqLCBzdHJ1Y3Qgc3NoICopOwor IAlzdHJ1Y3Qgc3Noa2V5ICooKmxvYWRfaG9zdF9wdWJsaWNfa2V5KShpbnQsIGludCwgc3RydWN0 IHNzaCAqKTsKK0BAIC0xOTcsOCArMjE3LDEwIEBAIGludAkga2V4X25pZF9mcm9tX25hbWUoY29u c3QgY2hhciAqKTsKKyBpbnQJIGtleF9pc19wcV9mcm9tX25hbWUoY29uc3QgY2hhciAqKTsKKyBp bnQJIGtleF9uYW1lc192YWxpZChjb25zdCBjaGFyICopOworIGNoYXIJKmtleF9hbGdfbGlzdChj aGFyKTsKKytjaGFyCSprZXhfZ3NzX2FsZ19saXN0KGNoYXIpOworIGNoYXIJKmtleF9uYW1lc19j YXQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworIGludAkga2V4X2hhc19hbnlfYWxnKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKytpbnQJIGtleF9nc3NfbmFtZXNfdmFsaWQoY29u c3QgY2hhciAqKTsKKyBpbnQJIGtleF9hc3NlbWJsZV9uYW1lcyhjaGFyICoqLCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7Cisgdm9pZAkga2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMo c3RydWN0IHNzaCAqLCBjaGFyICpwcm9wW1BST1BPU0FMX01BWF0sCisgICAgIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsKK0BAIC0yMzIsNiArMjU0LDEyIEBAIGludAkga2V4Z2V4X2NsaWVudChzdHJ1Y3Qgc3NoICop OworIGludAkga2V4Z2V4X3NlcnZlcihzdHJ1Y3Qgc3NoICopOworIGludAkga2V4X2dlbl9jbGll bnQoc3RydWN0IHNzaCAqKTsKKyBpbnQJIGtleF9nZW5fc2VydmVyKHN0cnVjdCBzc2ggKik7Cisr I2lmIGRlZmluZWQoR1NTQVBJKSAmJiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkKKytpbnQJIGtleGdz c2dleF9jbGllbnQoc3RydWN0IHNzaCAqKTsKKytpbnQJIGtleGdzc2dleF9zZXJ2ZXIoc3RydWN0 IHNzaCAqKTsKKytpbnQJIGtleGdzc19jbGllbnQoc3RydWN0IHNzaCAqKTsKKytpbnQJIGtleGdz c19zZXJ2ZXIoc3RydWN0IHNzaCAqKTsKKysjZW5kaWYKKyAKKyBpbnQJIGtleF9kaF9rZXlwYWly KHN0cnVjdCBrZXggKik7CisgaW50CSBrZXhfZGhfZW5jKHN0cnVjdCBrZXggKiwgY29uc3Qgc3Ry dWN0IHNzaGJ1ZiAqLCBzdHJ1Y3Qgc3NoYnVmICoqLAorQEAgLTI3MCw2ICsyOTgsMTIgQEAgaW50 CSBrZXhnZXhfaGFzaChpbnQsIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwgY29uc3Qgc3RydWN0IHNz aGJ1ZiAqLAorICAgICBjb25zdCBCSUdOVU0gKiwgY29uc3QgdV9jaGFyICosIHNpemVfdCwKKyAg ICAgdV9jaGFyICosIHNpemVfdCAqKTsKKyAKKytpbnQJIGtleF9nZW5faGFzaChpbnQgaGFzaF9h bGcsIGNvbnN0IHN0cnVjdCBzc2hidWYgKmNsaWVudF92ZXJzaW9uLAorKyAgICBjb25zdCBzdHJ1 Y3Qgc3NoYnVmICpzZXJ2ZXJfdmVyc2lvbiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqY2xpZW50X2tl eGluaXQsCisrICAgIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNlcnZlcl9rZXhpbml0LCBjb25zdCBz dHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfaG9zdF9rZXlfYmxvYiwKKysgICAgY29uc3Qgc3RydWN0IHNz aGJ1ZiAqY2xpZW50X3B1YiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqc2VydmVyX3B1YiwKKysgICAg Y29uc3Qgc3RydWN0IHNzaGJ1ZiAqc2hhcmVkX3NlY3JldCwgdV9jaGFyICpoYXNoLCBzaXplX3Qg Kmhhc2hsZW4pOworKworIHZvaWQJa2V4YzI1NTE5X2tleWdlbih1X2NoYXIga2V5W0NVUlZFMjU1 MTlfU0laRV0sIHVfY2hhciBwdWJbQ1VSVkUyNTUxOV9TSVpFXSkKKyAJX19hdHRyaWJ1dGVfXygo X19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCBDVVJWRTI1NTE5X1NJWkUpKSkKKyAJX19hdHRy aWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAyLCBDVVJWRTI1NTE5X1NJWkUpKSk7 CitkaWZmIC0tZ2l0IGEva2V4ZGguYyBiL2tleGRoLmMKK2luZGV4IGNiY2IyZDgzNi4uYjYzMzc0 YjBlIDEwMDY0NAorLS0tIGEva2V4ZGguYworKysrIGIva2V4ZGguYworQEAgLTQ3LDEzICs0Nywy MyBAQCBrZXhfZGhfa2V5Z2VuKHN0cnVjdCBrZXggKmtleCkKKyB7CisgCXN3aXRjaCAoa2V4LT5r ZXhfdHlwZSkgeworIAljYXNlIEtFWF9ESF9HUlAxX1NIQTE6CisrI2lmZGVmIEdTU0FQSQorKwlj YXNlIEtFWF9HU1NfR1JQMV9TSEExOgorKyNlbmRpZgorIAkJa2V4LT5kaCA9IGRoX25ld19ncm91 cDEoKTsKKyAJCWJyZWFrOworIAljYXNlIEtFWF9ESF9HUlAxNF9TSEExOgorIAljYXNlIEtFWF9E SF9HUlAxNF9TSEEyNTY6CisrI2lmZGVmIEdTU0FQSQorKwljYXNlIEtFWF9HU1NfR1JQMTRfU0hB MToKKysJY2FzZSBLRVhfR1NTX0dSUDE0X1NIQTI1NjoKKysjZW5kaWYKKyAJCWtleC0+ZGggPSBk aF9uZXdfZ3JvdXAxNCgpOworIAkJYnJlYWs7CisgCWNhc2UgS0VYX0RIX0dSUDE2X1NIQTUxMjoK KysjaWZkZWYgR1NTQVBJCisrCWNhc2UgS0VYX0dTU19HUlAxNl9TSEE1MTI6CisrI2VuZGlmCisg CQlrZXgtPmRoID0gZGhfbmV3X2dyb3VwMTYoKTsKKyAJCWJyZWFrOworIAljYXNlIEtFWF9ESF9H UlAxOF9TSEE1MTI6CitkaWZmIC0tZ2l0IGEva2V4Z2VuLmMgYi9rZXhnZW4uYworaW5kZXggNTY0 M2JjODMxLi5hMmJlYjNmMTAgMTAwNjQ0CistLS0gYS9rZXhnZW4uYworKysrIGIva2V4Z2VuLmMK K0BAIC00NCw3ICs0NCw3IEBACisgc3RhdGljIGludCBpbnB1dF9rZXhfZ2VuX2luaXQoaW50LCB1 aW50MzJfdCwgc3RydWN0IHNzaCAqKTsKKyBzdGF0aWMgaW50IGlucHV0X2tleF9nZW5fcmVwbHko aW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKTsKKyAKKy1zdGF0aWMgaW50 CisraW50Cisga2V4X2dlbl9oYXNoKAorICAgICBpbnQgaGFzaF9hbGcsCisgICAgIGNvbnN0IHN0 cnVjdCBzc2hidWYgKmNsaWVudF92ZXJzaW9uLAorZGlmZiAtLWdpdCBhL2tleGdzc2MuYyBiL2tl eGdzc2MuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMC4uNmRjMzFlYjBk CistLS0gL2Rldi9udWxsCisrKysgYi9rZXhnc3NjLmMKK0BAIC0wLDAgKzEsNzA2IEBACisrLyoK KysgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwOSBTaW1vbiBXaWxraW5zb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBBVVRIT1IgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisrICogSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ RUQgV0FSUkFOVElFUworKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisrICogSU4gTk8gRVZFTlQgU0hBTEwg VEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorKyAqIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKysgKiBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKysgKiBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUCisrICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisrICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKi8KKysKKysj aW5jbHVkZSAiaW5jbHVkZXMuaCIKKysKKysjaWYgZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQo V0lUSF9PUEVOU1NMKQorKworKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorKworKyNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUg PHN0cmluZy5oPgorKworKyNpbmNsdWRlICJ4bWFsbG9jLmgiCisrI2luY2x1ZGUgInNzaGJ1Zi5o IgorKyNpbmNsdWRlICJzc2gyLmgiCisrI2luY2x1ZGUgInNzaGtleS5oIgorKyNpbmNsdWRlICJj aXBoZXIuaCIKKysjaW5jbHVkZSAia2V4LmgiCisrI2luY2x1ZGUgImxvZy5oIgorKyNpbmNsdWRl ICJwYWNrZXQuaCIKKysjaW5jbHVkZSAiZGguaCIKKysjaW5jbHVkZSAiZGlnZXN0LmgiCisrI2lu Y2x1ZGUgInNzaGVyci5oIgorKworKyNpbmNsdWRlICJzc2gtZ3NzLmgiCisrCisrc3RhdGljIGlu dCBpbnB1dF9rZXhnc3NfaG9zdGtleShpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKKytz dGF0aWMgaW50IGlucHV0X2tleGdzc19jb250aW51ZShpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNz aCAqKTsKKytzdGF0aWMgaW50IGlucHV0X2tleGdzc19jb21wbGV0ZShpbnQsIHVfaW50MzJfdCwg c3RydWN0IHNzaCAqKTsKKytzdGF0aWMgaW50IGlucHV0X2tleGdzc19lcnJvcihpbnQsIHVfaW50 MzJfdCwgc3RydWN0IHNzaCAqKTsKKytzdGF0aWMgaW50IGlucHV0X2tleGdzc2dleF9ncm91cChp bnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKKytzdGF0aWMgaW50IGlucHV0X2tleGdzc2dl eF9jb250aW51ZShpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKKytzdGF0aWMgaW50IGlu cHV0X2tleGdzc2dleF9jb21wbGV0ZShpbnQsIHVfaW50MzJfdCwgc3RydWN0IHNzaCAqKTsKKysK KytzdGF0aWMgaW50Cisra2V4Z3NzX2ZpbmFsKHN0cnVjdCBzc2ggKnNzaCkKKyt7CisrCXN0cnVj dCBrZXggKmtleCA9IHNzaC0+a2V4OworKwlHc3NjdHh0ICpnc3MgPSBrZXgtPmdzczsKKysJc3Ry dWN0IHNzaGJ1ZiAqZW1wdHkgPSBOVUxMOworKwlzdHJ1Y3Qgc3NoYnVmICpzaGFyZWRfc2VjcmV0 ID0gTlVMTDsKKysJdV9jaGFyIGhhc2hbU1NIX0RJR0VTVF9NQVhfTEVOR1RIXTsKKysJc2l6ZV90 IGhhc2hsZW47CisrCWludCByOworKworKwkvKgorKwkgKiBXZSBfbXVzdF8gaGF2ZSByZWNlaXZl ZCBhIENPTVBMRVRFIG1lc3NhZ2UgaW4gcmVwbHkgZnJvbSB0aGUKKysJICogc2VydmVyLCB3aGlj aCB3aWxsIGhhdmUgc2V0IHNlcnZlcl9ibG9iIGFuZCBtc2dfdG9rCisrCSAqLworKworKwkvKiBj b21wdXRlIHNoYXJlZCBzZWNyZXQgKi8KKysJc3dpdGNoIChrZXgtPmtleF90eXBlKSB7CisrCWNh c2UgS0VYX0dTU19HUlAxX1NIQTE6CisrCWNhc2UgS0VYX0dTU19HUlAxNF9TSEExOgorKwljYXNl IEtFWF9HU1NfR1JQMTRfU0hBMjU2OgorKwljYXNlIEtFWF9HU1NfR1JQMTZfU0hBNTEyOgorKwkJ ciA9IGtleF9kaF9kZWMoa2V4LCBnc3MtPnNlcnZlcl9ibG9iLCAmc2hhcmVkX3NlY3JldCk7Cisr CQlicmVhazsKKysJY2FzZSBLRVhfR1NTX0MyNTUxOV9TSEEyNTY6CisrCQlpZiAoc3NoYnVmX3B0 cihnc3MtPnNlcnZlcl9ibG9iKVtzc2hidWZfbGVuKGdzcy0+c2VydmVyX2Jsb2IpXSAmIDB4ODAp CisrCQkJZmF0YWwoIlRoZSByZWNlaXZlZCBrZXkgaGFzIE1TQiBvZiBsYXN0IG9jdGV0IHNldCEi KTsKKysJCXIgPSBrZXhfYzI1NTE5X2RlYyhrZXgsIGdzcy0+c2VydmVyX2Jsb2IsICZzaGFyZWRf c2VjcmV0KTsKKysJCWJyZWFrOworKwljYXNlIEtFWF9HU1NfTklTVFAyNTZfU0hBMjU2OgorKwkJ aWYgKHNzaGJ1Zl9sZW4oZ3NzLT5zZXJ2ZXJfYmxvYikgIT0gNjUpCisrCQkJZmF0YWwoIlRoZSBy ZWNlaXZlZCBOSVNULVAyNTYga2V5IGRpZCBub3QgbWF0Y2ggIgorKwkJCSAgICAgICJleHBlY3Rl ZCBsZW5ndGggKGV4cGVjdGVkIDY1LCBnb3QgJXp1KSIsCisrCQkJICAgICAgc3NoYnVmX2xlbihn c3MtPnNlcnZlcl9ibG9iKSk7CisrCisrCQlpZiAoc3NoYnVmX3B0cihnc3MtPnNlcnZlcl9ibG9i KVswXSAhPSBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCkKKysJCQlmYXRhbCgiVGhlIHJl Y2VpdmVkIE5JU1QtUDI1NiBrZXkgZG9lcyBub3QgaGF2ZSBmaXJzdCBvY3RldCAweDA0Iik7Cisr CisrCQlyID0ga2V4X2VjZGhfZGVjKGtleCwgZ3NzLT5zZXJ2ZXJfYmxvYiwgJnNoYXJlZF9zZWNy ZXQpOworKwkJYnJlYWs7CisrCWRlZmF1bHQ6CisrCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VN RU5UOworKwkJYnJlYWs7CisrCX0KKysJaWYgKHIgIT0gMCkgeworKwkJc3NoX2dzc2FwaV9kZWxl dGVfY3R4KCZrZXgtPmdzcyk7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlpZiAoKGVtcHR5ID0g c3NoYnVmX25ldygpKSA9PSBOVUxMKSB7CisrCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmtleC0+ Z3NzKTsKKysJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7CisrCQlnb3RvIG91dDsKKysJfQorKwor KwloYXNobGVuID0gc2l6ZW9mKGhhc2gpOworKwlyID0ga2V4X2dlbl9oYXNoKGtleC0+aGFzaF9h bGcsIGtleC0+Y2xpZW50X3ZlcnNpb24sCisrCQkJIGtleC0+c2VydmVyX3ZlcnNpb24sIGtleC0+ bXksIGtleC0+cGVlciwKKysJCQkgKGdzcy0+c2VydmVyX2hvc3Rfa2V5X2Jsb2IgPyBnc3MtPnNl cnZlcl9ob3N0X2tleV9ibG9iIDogZW1wdHkpLAorKwkJCSBrZXgtPmNsaWVudF9wdWIsIGdzcy0+ c2VydmVyX2Jsb2IsIHNoYXJlZF9zZWNyZXQsCisrCQkJIGhhc2gsICZoYXNobGVuKTsKKysJc3No YnVmX2ZyZWUoZW1wdHkpOworKwlpZiAociAhPSAwKQorKwkJZmF0YWxfZigiVW5leHBlY3RlZCBL RVggdHlwZSAlZCIsIGtleC0+a2V4X3R5cGUpOworKworKwlnc3MtPmJ1Zi52YWx1ZSA9IGhhc2g7 CisrCWdzcy0+YnVmLmxlbmd0aCA9IGhhc2hsZW47CisrCisrCS8qIFZlcmlmeSB0aGF0IHRoZSBo YXNoIG1hdGNoZXMgdGhlIE1JQyB3ZSBqdXN0IGdvdC4gKi8KKysJaWYgKEdTU19FUlJPUihzc2hf Z3NzYXBpX2NoZWNrbWljKGdzcywgJmdzcy0+YnVmLCAmZ3NzLT5tc2dfdG9rKSkpCisrCQlzc2hf cGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAiSGFzaCdzIE1JQyBkaWRuJ3QgdmVyaWZ5Iik7CisrCisr CWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgJmdzcy0+bXNnX3Rvayk7CisrCisrCWlm IChrZXgtPmdzc19kZWxlZ19jcmVkcykKKysJCXNzaF9nc3NhcGlfY3JlZGVudGlhbHNfdXBkYXRl ZChnc3MpOworKworKwlpZiAoZ3NzX2tleF9jb250ZXh0ID09IE5VTEwpCisrCQlnc3Nfa2V4X2Nv bnRleHQgPSBnc3M7CisrCWVsc2UKKysJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgma2V4LT5nc3Mp OworKworKwlpZiAoKHIgPSBrZXhfZGVyaXZlX2tleXMoc3NoLCBoYXNoLCBoYXNobGVuLCBzaGFy ZWRfc2VjcmV0KSkgPT0gMCkKKysJCXIgPSBrZXhfc2VuZF9uZXdrZXlzKHNzaCk7CisrCisrCWlm IChrZXgtPmdzcyAhPSBOVUxMKSB7CisrCQlzc2hidWZfZnJlZShnc3MtPnNlcnZlcl9ob3N0X2tl eV9ibG9iKTsKKysJCWdzcy0+c2VydmVyX2hvc3Rfa2V5X2Jsb2IgPSBOVUxMOworKwkJc3NoYnVm X2ZyZWUoZ3NzLT5zZXJ2ZXJfYmxvYik7CisrCQlnc3MtPnNlcnZlcl9ibG9iID0gTlVMTDsKKysJ fQorK291dDoKKysJZXhwbGljaXRfYnplcm8oa2V4LT5jMjU1MTlfY2xpZW50X2tleSwgc2l6ZW9m KGtleC0+YzI1NTE5X2NsaWVudF9rZXkpKTsKKysJZXhwbGljaXRfYnplcm8oaGFzaCwgc2l6ZW9m KGhhc2gpKTsKKysJc3NoYnVmX2ZyZWUoc2hhcmVkX3NlY3JldCk7CisrCXNzaGJ1Zl9mcmVlKGtl eC0+Y2xpZW50X3B1Yik7CisrCWtleC0+Y2xpZW50X3B1YiA9IE5VTEw7CisrCXJldHVybiByOwor K30KKysKKytzdGF0aWMgaW50Cisra2V4Z3NzX2luaXRfY3R4KHN0cnVjdCBzc2ggKnNzaCwKKysJ CWdzc19idWZmZXJfZGVzYyAqdG9rZW5fcHRyKQorK3sKKysJc3RydWN0IGtleCAqa2V4ID0gc3No LT5rZXg7CisrCUdzc2N0eHQgKmdzcyA9IGtleC0+Z3NzOworKwlnc3NfYnVmZmVyX2Rlc2Mgc2Vu ZF90b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCU9NX3VpbnQzMiByZXRfZmxhZ3M7CisrCWlu dCByOworKworKwlkZWJ1ZygiQ2FsbGluZyBnc3NfaW5pdF9zZWNfY29udGV4dCIpOworKworKwln c3MtPm1ham9yID0gc3NoX2dzc2FwaV9pbml0X2N0eChnc3MsIGtleC0+Z3NzX2RlbGVnX2NyZWRz LAorKwkJCQkJIHRva2VuX3B0ciwgJnNlbmRfdG9rLCAmcmV0X2ZsYWdzKTsKKysKKysJaWYgKEdT U19FUlJPUihnc3MtPm1ham9yKSkgeworKwkJLyogWFhYIFVzZWxlc3MgY29kZTogTWlzc2luZyBz ZW5kPyAqLworKwkJaWYgKHNlbmRfdG9rLmxlbmd0aCAhPSAwKSB7CisrCQkJaWYgKChyID0gc3No cGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFKSkgIT0gMCB8fAorKwkJCSAg ICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgc2VuZF90b2sudmFsdWUsIHNlbmRfdG9rLmxl bmd0aCkpICE9IDApCisrCQkJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikp OworKwkJfQorKwkJZmF0YWwoImdzc19pbml0X2NvbnRleHQgZmFpbGVkIik7CisrCX0KKysKKysJ LyogSWYgd2UndmUgZ290IGFuIG9sZCByZWNlaXZlIGJ1ZmZlciBnZXQgcmlkIG9mIGl0ICovCisr CWlmICh0b2tlbl9wdHIgIT0gR1NTX0NfTk9fQlVGRkVSKQorKwkJZ3NzX3JlbGVhc2VfYnVmZmVy KCZnc3MtPm1pbm9yLCB0b2tlbl9wdHIpOworKworKwlpZiAoZ3NzLT5tYWpvciA9PSBHU1NfU19D T01QTEVURSkgeworKwkJLyogSWYgbXV0dWFsIHN0YXRlIGZsYWcgaXMgbm90IHRydWUsIGtleCBm YWlscyAqLworKwkJaWYgKCEocmV0X2ZsYWdzICYgR1NTX0NfTVVUVUFMX0ZMQUcpKQorKwkJCWZh dGFsKCJNdXR1YWwgYXV0aGVudGljYXRpb24gZmFpbGVkIik7CisrCisrCQkvKiBJZiBpbnRlZyBh dmFpbCBmbGFnIGlzIG5vdCB0cnVlIGtleCBmYWlscyAqLworKwkJaWYgKCEocmV0X2ZsYWdzICYg R1NTX0NfSU5URUdfRkxBRykpCisrCQkJZmF0YWwoIkludGVncml0eSBjaGVjayBmYWlsZWQiKTsK KysJfQorKworKwkvKgorKwkgKiBJZiB3ZSBoYXZlIGRhdGEgdG8gc2VuZCwgdGhlbiB0aGUgbGFz dCBtZXNzYWdlIHRoYXQgd2UKKysJICogcmVjZWl2ZWQgY2Fubm90IGhhdmUgYmVlbiBhICdjb21w bGV0ZScuCisrCSAqLworKwlpZiAoc2VuZF90b2subGVuZ3RoICE9IDApIHsKKysJCWlmIChnc3Mt PmZpcnN0KSB7CisrCQkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NT X0lOSVQpKSAhPSAwIHx8CisrCQkJICAgIChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBzZW5k X3Rvay52YWx1ZSwgc2VuZF90b2subGVuZ3RoKSkgIT0gMCB8fAorKwkJCSAgICAociA9IHNzaHBr dF9wdXRfc3RyaW5nYihzc2gsIGtleC0+Y2xpZW50X3B1YikpICE9IDApCisrCQkJCWZhdGFsKCJm YWlsZWQgdG8gY29uc3RydWN0IHBhY2tldDogJXMiLCBzc2hfZXJyKHIpKTsKKysJCQlnc3MtPmZp cnN0ID0gMDsKKysJCX0gZWxzZSB7CisrCQkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NI Ml9NU0dfS0VYR1NTX0NPTlRJTlVFKSkgIT0gMCB8fAorKwkJCSAgICAociA9IHNzaHBrdF9wdXRf c3RyaW5nKHNzaCwgc2VuZF90b2sudmFsdWUsIHNlbmRfdG9rLmxlbmd0aCkpICE9IDApCisrCQkJ CWZhdGFsKCJmYWlsZWQgdG8gY29uc3RydWN0IHBhY2tldDogJXMiLCBzc2hfZXJyKHIpKTsKKysJ CX0KKysJCWlmICgociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDApCisrCQkJZmF0YWwoImZhaWxl ZCB0byBzZW5kIHBhY2tldDogJXMiLCBzc2hfZXJyKHIpKTsKKysJCWdzc19yZWxlYXNlX2J1ZmZl cigmZ3NzLT5taW5vciwgJnNlbmRfdG9rKTsKKysKKysJCS8qIElmIHdlJ3ZlIHNlbnQgdGhlbSBk YXRhLCB0aGV5IHNob3VsZCByZXBseSAqLworKwkJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJf TVNHX0tFWEdTU19IT1NUS0VZLCAmaW5wdXRfa2V4Z3NzX2hvc3RrZXkpOworKwkJc3NoX2Rpc3Bh dGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSwgJmlucHV0X2tleGdzc19jb250 aW51ZSk7CisrCQlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRF LCAmaW5wdXRfa2V4Z3NzX2NvbXBsZXRlKTsKKysJCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gy X01TR19LRVhHU1NfRVJST1IsICZpbnB1dF9rZXhnc3NfZXJyb3IpOworKwkJcmV0dXJuIDA7Cisr CX0KKysJLyogTm8gZGF0YSwgYW5kIG5vdCBjb21wbGV0ZSAqLworKwlpZiAoZ3NzLT5tYWpvciAh PSBHU1NfU19DT01QTEVURSkKKysJCWZhdGFsKCJOb3QgY29tcGxldGUsIGFuZCBubyB0b2tlbiBv dXRwdXQiKTsKKysKKysJaWYgIChnc3MtPm1ham9yICYgR1NTX1NfQ09OVElOVUVfTkVFREVEKQor KwkJcmV0dXJuIGtleGdzc19pbml0X2N0eChzc2gsIHRva2VuX3B0cik7CisrCisrCXJldHVybiBr ZXhnc3NfZmluYWwoc3NoKTsKKyt9CisrCisraW50Cisra2V4Z3NzX2NsaWVudChzdHJ1Y3Qgc3No ICpzc2gpCisreworKwlzdHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKKysJaW50IHI7CisrCisr CS8qIEluaXRpYWxpc2Ugb3VyIEdTU0FQSSB3b3JsZCAqLworKwlzc2hfZ3NzYXBpX2J1aWxkX2N0 eCgma2V4LT5nc3MpOworKwlpZiAoc3NoX2dzc2FwaV9pZF9rZXgoa2V4LT5nc3MsIGtleC0+bmFt ZSwga2V4LT5rZXhfdHlwZSkgPT0gR1NTX0NfTk9fT0lEKQorKwkJZmF0YWwoIkNvdWxkbid0IGlk ZW50aWZ5IGhvc3QgZXhjaGFuZ2UiKTsKKysKKysJaWYgKHNzaF9nc3NhcGlfaW1wb3J0X25hbWUo a2V4LT5nc3MsIGtleC0+Z3NzX2hvc3QpKQorKwkJZmF0YWwoIkNvdWxkbid0IGltcG9ydCBob3N0 bmFtZSIpOworKworKwlpZiAoa2V4LT5nc3NfY2xpZW50ICYmCisrCSAgICBzc2hfZ3NzYXBpX2Ns aWVudF9pZGVudGl0eShrZXgtPmdzcywga2V4LT5nc3NfY2xpZW50KSkKKysJCWZhdGFsKCJDb3Vs ZG4ndCBhY3F1aXJlIGNsaWVudCBjcmVkZW50aWFscyIpOworKworKwkvKiBTdGVwIDEgKi8KKysJ c3dpdGNoIChrZXgtPmtleF90eXBlKSB7CisrCWNhc2UgS0VYX0dTU19HUlAxX1NIQTE6CisrCWNh c2UgS0VYX0dTU19HUlAxNF9TSEExOgorKwljYXNlIEtFWF9HU1NfR1JQMTRfU0hBMjU2OgorKwlj YXNlIEtFWF9HU1NfR1JQMTZfU0hBNTEyOgorKwkJciA9IGtleF9kaF9rZXlwYWlyKGtleCk7Cisr CQlicmVhazsKKysJY2FzZSBLRVhfR1NTX05JU1RQMjU2X1NIQTI1NjoKKysJCXIgPSBrZXhfZWNk aF9rZXlwYWlyKGtleCk7CisrCQlicmVhazsKKysJY2FzZSBLRVhfR1NTX0MyNTUxOV9TSEEyNTY6 CisrCQlyID0ga2V4X2MyNTUxOV9rZXlwYWlyKGtleCk7CisrCQlicmVhazsKKysJZGVmYXVsdDoK KysJCWZhdGFsX2YoIlVuZXhwZWN0ZWQgS0VYIHR5cGUgJWQiLCBrZXgtPmtleF90eXBlKTsKKysJ fQorKwlpZiAociAhPSAwKSB7CisrCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmtleC0+Z3NzKTsK KysJCXJldHVybiByOworKwl9CisrCXJldHVybiBrZXhnc3NfaW5pdF9jdHgoc3NoLCBHU1NfQ19O T19CVUZGRVIpOworK30KKysKKytzdGF0aWMgaW50CisraW5wdXRfa2V4Z3NzX2hvc3RrZXkoaW50 IHR5cGUsCisrCQkgICAgIHVfaW50MzJfdCBzZXEsCisrCQkgICAgIHN0cnVjdCBzc2ggKnNzaCkK Kyt7CisrCUdzc2N0eHQgKmdzcyA9IHNzaC0+a2V4LT5nc3M7CisrCXVfY2hhciAqdG1wID0gTlVM TDsKKysJc2l6ZV90IHRtcF9sZW4gPSAwOworKwlpbnQgcjsKKysKKysJZGVidWcoIlJlY2VpdmVk IEtFWEdTU19IT1NUS0VZIik7CisrCWlmIChnc3MtPnNlcnZlcl9ob3N0X2tleV9ibG9iKQorKwkJ ZmF0YWwoIlNlcnZlciBob3N0IGtleSByZWNlaXZlZCBtb3JlIHRoYW4gb25jZSIpOworKwlpZiAo KHIgPSBzc2hwa3RfZ2V0X3N0cmluZyhzc2gsICZ0bXAsICZ0bXBfbGVuKSkgIT0gMCkKKysJCWZh dGFsKCJGYWlsZWQgdG8gcmVhZCBzZXJ2ZXIgaG9zdCBrZXk6ICVzIiwgc3NoX2VycihyKSk7Cisr CWlmICgoZ3NzLT5zZXJ2ZXJfaG9zdF9rZXlfYmxvYiA9IHNzaGJ1Zl9mcm9tKHRtcCwgdG1wX2xl bikpID09IE5VTEwpCisrCQlmYXRhbCgic3NoYnVmX2Zyb20gZmFpbGVkIik7CisrCXJldHVybiAw OworK30KKysKKytzdGF0aWMgaW50CisraW5wdXRfa2V4Z3NzX2NvbnRpbnVlKGludCB0eXBlLAor KwkJICAgICAgdV9pbnQzMl90IHNlcSwKKysJCSAgICAgIHN0cnVjdCBzc2ggKnNzaCkKKyt7Cisr CUdzc2N0eHQgKmdzcyA9IHNzaC0+a2V4LT5nc3M7CisrCWdzc19idWZmZXJfZGVzYyByZWN2X3Rv ayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJaW50IHI7CisrCisrCXNzaF9kaXNwYXRjaF9zZXQo c3NoLCBTU0gyX01TR19LRVhHU1NfSE9TVEtFWSwgTlVMTCk7CisrCXNzaF9kaXNwYXRjaF9zZXQo c3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUsIE5VTEwpOworKwlzc2hfZGlzcGF0Y2hfc2V0 KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRFLCBOVUxMKTsKKysJc3NoX2Rpc3BhdGNoX3Nl dChzc2gsIFNTSDJfTVNHX0tFWEdTU19FUlJPUiwgTlVMTCk7CisrCisrCWRlYnVnKCJSZWNlaXZl ZCBHU1NBUElfQ09OVElOVUUiKTsKKysJaWYgKGdzcy0+bWFqb3IgPT0gR1NTX1NfQ09NUExFVEUp CisrCQlmYXRhbCgiR1NTQVBJIENvbnRpbnVlIHJlY2VpdmVkIGZyb20gc2VydmVyIHdoZW4gY29t cGxldGUiKTsKKysJaWYgKChyID0gc3NoX2dzc2FwaV9zc2hwa3RfZ2V0X2J1ZmZlcl9kZXNjKHNz aCwgJnJlY3ZfdG9rKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAh PSAwKQorKwkJZmF0YWwoIkZhaWxlZCB0byByZWFkIHRva2VuOiAlcyIsIHNzaF9lcnIocikpOwor KwlpZiAgKCEoZ3NzLT5tYWpvciAmIEdTU19TX0NPTlRJTlVFX05FRURFRCkpCisrCQlmYXRhbCgi RGlkbid0IHJlY2VpdmUgYSBTU0gyX01TR19LRVhHU1NfQ09NUExFVEUgd2hlbiBJIGV4cGVjdGVk IGl0Iik7CisrCXJldHVybiBrZXhnc3NfaW5pdF9jdHgoc3NoLCAmcmVjdl90b2spOworK30KKysK KytzdGF0aWMgaW50CisraW5wdXRfa2V4Z3NzX2NvbXBsZXRlKGludCB0eXBlLAorKwkJICAgICAg dV9pbnQzMl90IHNlcSwKKysJCSAgICAgIHN0cnVjdCBzc2ggKnNzaCkKKyt7CisrCUdzc2N0eHQg KmdzcyA9IHNzaC0+a2V4LT5nc3M7CisrCWdzc19idWZmZXJfZGVzYyByZWN2X3RvayA9IEdTU19D X0VNUFRZX0JVRkZFUjsKKysJdV9jaGFyIGM7CisrCWludCByOworKworKwlzc2hfZGlzcGF0Y2hf c2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0hPU1RLRVksIE5VTEwpOworKwlzc2hfZGlzcGF0Y2hf c2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFLCBOVUxMKTsKKysJc3NoX2Rpc3BhdGNo X3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT01QTEVURSwgTlVMTCk7CisrCXNzaF9kaXNwYXRj aF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfRVJST1IsIE5VTEwpOworKworKwlkZWJ1ZygiUmVj ZWl2ZWQgR1NTQVBJX0NPTVBMRVRFIik7CisrCWlmIChnc3MtPm1zZ190b2sudmFsdWUgIT0gTlVM TCkKKysJICAgICAgICBmYXRhbCgiUmVjZWl2ZWQgR1NTQVBJX0NPTVBMRVRFIHR3aWNlPyIpOwor KwlpZiAoKHIgPSBzc2hwa3RfZ2V0Yl9mcm9tcyhzc2gsICZnc3MtPnNlcnZlcl9ibG9iKSkgIT0g MCB8fAorKwkgICAgKHIgPSBzc2hfZ3NzYXBpX3NzaHBrdF9nZXRfYnVmZmVyX2Rlc2Moc3NoLCAm Z3NzLT5tc2dfdG9rKSkgIT0gMCkKKysJCWZhdGFsKCJGYWlsZWQgdG8gcmVhZCBtZXNzYWdlOiAl cyIsIHNzaF9lcnIocikpOworKworKwkvKiBJcyB0aGVyZSBhIHRva2VuIGluY2x1ZGVkPyAqLwor KwlpZiAoKHIgPSBzc2hwa3RfZ2V0X3U4KHNzaCwgJmMpKSAhPSAwKQorKwkJZmF0YWwoInNzaHBr dCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7CisrCWlmIChjKSB7CisrCQlpZiAoKHIgPSBzc2hf Z3NzYXBpX3NzaHBrdF9nZXRfYnVmZmVyX2Rlc2Moc3NoLCAmcmVjdl90b2spKSAhPSAwKQorKwkJ CWZhdGFsKCJGYWlsZWQgdG8gcmVhZCB0b2tlbjogJXMiLCBzc2hfZXJyKHIpKTsKKysJCS8qIElm IHdlJ3JlIGFscmVhZHkgY29tcGxldGUgLSBwcm90b2NvbCBlcnJvciAqLworKwkJaWYgKGdzcy0+ bWFqb3IgPT0gR1NTX1NfQ09NUExFVEUpCisrCQkJc3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwg IlByb3RvY29sIGVycm9yOiByZWNlaXZlZCB0b2tlbiB3aGVuIGNvbXBsZXRlIik7CisrCX0gZWxz ZSB7CisrCQlpZiAoZ3NzLT5tYWpvciAhPSBHU1NfU19DT01QTEVURSkKKysJCQlzc2hfcGFja2V0 X2Rpc2Nvbm5lY3Qoc3NoLCAiUHJvdG9jb2wgZXJyb3I6IGRpZCBub3QgcmVjZWl2ZSBmaW5hbCB0 b2tlbiIpOworKwl9CisrCWlmICgociA9IHNzaHBrdF9nZXRfZW5kKHNzaCkpICE9IDApCisrCQlm YXRhbCgiRXhwZWN0aW5nIGVuZCBvZiBwYWNrZXQuIik7CisrCisrCWlmICAoZ3NzLT5tYWpvciAm IEdTU19TX0NPTlRJTlVFX05FRURFRCkKKysJCXJldHVybiBrZXhnc3NfaW5pdF9jdHgoc3NoLCAm cmVjdl90b2spOworKworKwlnc3NfcmVsZWFzZV9idWZmZXIoJmdzcy0+bWlub3IsICZyZWN2X3Rv ayk7CisrCXJldHVybiBrZXhnc3NfZmluYWwoc3NoKTsKKyt9CisrCisrc3RhdGljIGludAorK2lu cHV0X2tleGdzc19lcnJvcihpbnQgdHlwZSwKKysJCSAgIHVfaW50MzJfdCBzZXEsCisrCQkgICBz dHJ1Y3Qgc3NoICpzc2gpCisreworKwlHc3NjdHh0ICpnc3MgPSBzc2gtPmtleC0+Z3NzOworKwl1 X2NoYXIgKm1zZzsKKysJaW50IHI7CisrCisrCWRlYnVnKCJSZWNlaXZlZCBFcnJvciIpOworKwlp ZiAoKHIgPSBzc2hwa3RfZ2V0X3UzMihzc2gsICZnc3MtPm1ham9yKSkgIT0gMCB8fAorKwkgICAg KHIgPSBzc2hwa3RfZ2V0X3UzMihzc2gsICZnc3MtPm1pbm9yKSkgIT0gMCB8fAorKwkgICAgKHIg PSBzc2hwa3RfZ2V0X3N0cmluZyhzc2gsICZtc2csIE5VTEwpKSAhPSAwIHx8CisrCSAgICAociA9 IHNzaHBrdF9nZXRfc3RyaW5nKHNzaCwgTlVMTCwgTlVMTCkpICE9IDAgfHwgLyogbGFuZyB0YWcg Ki8KKysJICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0gMCkKKysJCWZhdGFsKCJzc2hw a3RfZ2V0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKKysJZmF0YWwoIkdTU0FQSSBFcnJvcjog XG4lLjQwMHMiLCBtc2cpOworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioq KioqKioqIEtFWEdTU0dFWCAqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisraW50Cisr a2V4Z3NzZ2V4X2NsaWVudChzdHJ1Y3Qgc3NoICpzc2gpCisreworKwlzdHJ1Y3Qga2V4ICprZXgg PSBzc2gtPmtleDsKKysJaW50IHI7CisrCisrCS8qIEluaXRpYWxpc2Ugb3VyIEdTU0FQSSB3b3Js ZCAqLworKwlzc2hfZ3NzYXBpX2J1aWxkX2N0eCgma2V4LT5nc3MpOworKwlpZiAoc3NoX2dzc2Fw aV9pZF9rZXgoa2V4LT5nc3MsIGtleC0+bmFtZSwga2V4LT5rZXhfdHlwZSkgPT0gR1NTX0NfTk9f T0lEKQorKwkJZmF0YWwoIkNvdWxkbid0IGlkZW50aWZ5IGhvc3QgZXhjaGFuZ2UiKTsKKysKKysJ aWYgKHNzaF9nc3NhcGlfaW1wb3J0X25hbWUoa2V4LT5nc3MsIGtleC0+Z3NzX2hvc3QpKQorKwkJ ZmF0YWwoIkNvdWxkbid0IGltcG9ydCBob3N0bmFtZSIpOworKworKwlpZiAoa2V4LT5nc3NfY2xp ZW50ICYmCisrCSAgICBzc2hfZ3NzYXBpX2NsaWVudF9pZGVudGl0eShrZXgtPmdzcywga2V4LT5n c3NfY2xpZW50KSkKKysJCWZhdGFsKCJDb3VsZG4ndCBhY3F1aXJlIGNsaWVudCBjcmVkZW50aWFs cyIpOworKworKwlkZWJ1ZygiRG9pbmcgZ3JvdXAgZXhjaGFuZ2UiKTsKKysJa2V4LT5taW4gPSBE SF9HUlBfTUlOOworKwlrZXgtPm1heCA9IERIX0dSUF9NQVg7CisrCWtleC0+bmJpdHMgPSBkaF9l c3RpbWF0ZShrZXgtPmRoX25lZWQgKiA4KTsKKysKKysJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNz aCwgU1NIMl9NU0dfS0VYR1NTX0dST1VQUkVRKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hwa3Rf cHV0X3UzMihzc2gsIGtleC0+bWluKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hwa3RfcHV0X3Uz Mihzc2gsIGtleC0+bmJpdHMpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBrdF9wdXRfdTMyKHNz aCwga2V4LT5tYXgpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDAp CisrCQlmYXRhbCgiRmFpbGVkIHRvIGNvbnN0cnVjdCBhIHBhY2tldDogJXMiLCBzc2hfZXJyKHIp KTsKKysKKysJZGVidWcoIldhaXQgU1NIMl9NU0dfS0VYR1NTX0dST1VQIik7CisrCXNzaF9kaXNw YXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfR1JPVVAsICZpbnB1dF9rZXhnc3NnZXhfZ3Jv dXApOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK2tleGdzc2dleF9maW5hbChz dHJ1Y3Qgc3NoICpzc2gpCisreworKwlzdHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKKysJR3Nz Y3R4dCAqZ3NzID0ga2V4LT5nc3M7CisrCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7CisrCXN0 cnVjdCBzc2hidWYgKmVtcHR5ID0gTlVMTDsKKysJc3RydWN0IHNzaGJ1ZiAqc2hhcmVkX3NlY3Jl dCA9IE5VTEw7CisrCUJJR05VTSAqZGhfc2VydmVyX3B1YiA9IE5VTEw7CisrCWNvbnN0IEJJR05V TSAqcHViX2tleSwgKmRoX3AsICpkaF9nOworKwl1X2NoYXIgaGFzaFtTU0hfRElHRVNUX01BWF9M RU5HVEhdOworKwlzaXplX3QgaGFzaGxlbjsKKysJaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VS Uk9SOworKworKwkvKgorKwkgKiBXZSBfbXVzdF8gaGF2ZSByZWNlaXZlZCBhIENPTVBMRVRFIG1l c3NhZ2UgaW4gcmVwbHkgZnJvbSB0aGUKKysJICogc2VydmVyLCB3aGljaCB3aWxsIGhhdmUgc2V0 IHNlcnZlcl9ibG9iIGFuZCBtc2dfdG9rCisrCSAqLworKworKwkvKiA3LiBDIHZlcmlmaWVzIHRo YXQgdGhlIGtleSBRX1MgaXMgdmFsaWQgKi8KKysJLyogOC4gQyBjb21wdXRlcyBzaGFyZWQgc2Vj cmV0ICovCisrCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9PSBOVUxMIHx8CisrCSAgICAociA9 IHNzaGJ1Zl9wdXRfc3RyaW5nYihidWYsIGdzcy0+c2VydmVyX2Jsb2IpKSAhPSAwIHx8CisrCSAg ICAociA9IHNzaGJ1Zl9nZXRfYmlnbnVtMihidWYsICZkaF9zZXJ2ZXJfcHViKSkgIT0gMCkgewor KwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZrZXgtPmdzcyk7CisrCQlnb3RvIG91dDsKKysJfQor Kwlzc2hidWZfZnJlZShidWYpOworKwlidWYgPSBOVUxMOworKworKwlpZiAoKHNoYXJlZF9zZWNy ZXQgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKKysJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgm a2V4LT5nc3MpOworKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKKysJCWdvdG8gb3V0OworKwl9 CisrCisrCWlmICgociA9IGtleF9kaF9jb21wdXRlX2tleShrZXgsIGRoX3NlcnZlcl9wdWIsIHNo YXJlZF9zZWNyZXQpKSAhPSAwKSB7CisrCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmtleC0+Z3Nz KTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCWlmICgoZW1wdHkgPSBzc2hidWZfbmV3KCkpID09 IE5VTEwpIHsKKysJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgma2V4LT5nc3MpOworKwkJciA9IFNT SF9FUlJfQUxMT0NfRkFJTDsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCURIX2dldDBfa2V5KGtl eC0+ZGgsICZwdWJfa2V5LCBOVUxMKTsKKysJREhfZ2V0MF9wcWcoa2V4LT5kaCwgJmRoX3AsIE5V TEwsICZkaF9nKTsKKysJaGFzaGxlbiA9IHNpemVvZihoYXNoKTsKKysJciA9IGtleGdleF9oYXNo KGtleC0+aGFzaF9hbGcsIGtleC0+Y2xpZW50X3ZlcnNpb24sCisrCQkJa2V4LT5zZXJ2ZXJfdmVy c2lvbiwga2V4LT5teSwga2V4LT5wZWVyLAorKwkJCShnc3MtPnNlcnZlcl9ob3N0X2tleV9ibG9i ID8gZ3NzLT5zZXJ2ZXJfaG9zdF9rZXlfYmxvYiA6IGVtcHR5KSwKKysJCQlrZXgtPm1pbiwga2V4 LT5uYml0cywga2V4LT5tYXgsIGRoX3AsIGRoX2csIHB1Yl9rZXksCisrCQkJZGhfc2VydmVyX3B1 Yiwgc3NoYnVmX3B0cihzaGFyZWRfc2VjcmV0KSwgc3NoYnVmX2xlbihzaGFyZWRfc2VjcmV0KSwK KysJCQloYXNoLCAmaGFzaGxlbik7CisrCXNzaGJ1Zl9mcmVlKGVtcHR5KTsKKysJaWYgKHIgIT0g MCkKKysJCWZhdGFsKCJGYWlsZWQgdG8gY2FsY3VsYXRlIGhhc2g6ICVzIiwgc3NoX2VycihyKSk7 CisrCisrCWdzcy0+YnVmLnZhbHVlID0gaGFzaDsKKysJZ3NzLT5idWYubGVuZ3RoID0gaGFzaGxl bjsKKysKKysJLyogVmVyaWZ5IHRoYXQgdGhlIGhhc2ggbWF0Y2hlcyB0aGUgTUlDIHdlIGp1c3Qg Z290LiAqLworKwlpZiAoR1NTX0VSUk9SKHNzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzLCAmZ3NzLT5i dWYsICZnc3MtPm1zZ190b2spKSkKKysJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsICJIYXNo J3MgTUlDIGRpZG4ndCB2ZXJpZnkiKTsKKysKKysJZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1p bm9yLCAmZ3NzLT5tc2dfdG9rKTsKKysKKysJaWYgKGtleC0+Z3NzX2RlbGVnX2NyZWRzKQorKwkJ c3NoX2dzc2FwaV9jcmVkZW50aWFsc191cGRhdGVkKGdzcyk7CisrCisrCWlmIChnc3Nfa2V4X2Nv bnRleHQgPT0gTlVMTCkKKysJCWdzc19rZXhfY29udGV4dCA9IGdzczsKKysJZWxzZQorKwkJc3No X2dzc2FwaV9kZWxldGVfY3R4KCZrZXgtPmdzcyk7CisrCisrCS8qIEZpbmFsbHkgZGVyaXZlIHRo ZSBrZXlzIGFuZCBzZW5kIHRoZW0gKi8KKysJaWYgKChyID0ga2V4X2Rlcml2ZV9rZXlzKHNzaCwg aGFzaCwgaGFzaGxlbiwgc2hhcmVkX3NlY3JldCkpID09IDApCisrCQlyID0ga2V4X3NlbmRfbmV3 a2V5cyhzc2gpOworKworKwlpZiAoa2V4LT5nc3MgIT0gTlVMTCkgeworKwkJc3NoYnVmX2ZyZWUo Z3NzLT5zZXJ2ZXJfaG9zdF9rZXlfYmxvYik7CisrCQlnc3MtPnNlcnZlcl9ob3N0X2tleV9ibG9i ID0gTlVMTDsKKysJCXNzaGJ1Zl9mcmVlKGdzcy0+c2VydmVyX2Jsb2IpOworKwkJZ3NzLT5zZXJ2 ZXJfYmxvYiA9IE5VTEw7CisrCX0KKytvdXQ6CisrCWV4cGxpY2l0X2J6ZXJvKGhhc2gsIHNpemVv ZihoYXNoKSk7CisrCURIX2ZyZWUoa2V4LT5kaCk7CisrCWtleC0+ZGggPSBOVUxMOworKwlCTl9j bGVhcl9mcmVlKGRoX3NlcnZlcl9wdWIpOworKwlzc2hidWZfZnJlZShzaGFyZWRfc2VjcmV0KTsK KysJcmV0dXJuIHI7CisrfQorKworK3N0YXRpYyBpbnQKKytrZXhnc3NnZXhfaW5pdF9jdHgoc3Ry dWN0IHNzaCAqc3NoLAorKwkJICAgZ3NzX2J1ZmZlcl9kZXNjICp0b2tlbl9wdHIpCisreworKwlz dHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKKysJR3NzY3R4dCAqZ3NzID0ga2V4LT5nc3M7Cisr CWNvbnN0IEJJR05VTSAqcHViX2tleTsKKysJZ3NzX2J1ZmZlcl9kZXNjIHNlbmRfdG9rID0gR1NT X0NfRU1QVFlfQlVGRkVSOworKwlPTV91aW50MzIgcmV0X2ZsYWdzOworKwlpbnQgcjsKKysKKysJ LyogU3RlcCAyIC0gY2FsbCBHU1NfSW5pdF9zZWNfY29udGV4dCgpICovCisrCWRlYnVnKCJDYWxs aW5nIGdzc19pbml0X3NlY19jb250ZXh0Iik7CisrCisrCWdzcy0+bWFqb3IgPSBzc2hfZ3NzYXBp X2luaXRfY3R4KGdzcywga2V4LT5nc3NfZGVsZWdfY3JlZHMsCisrCQkJCQkgdG9rZW5fcHRyLCAm c2VuZF90b2ssICZyZXRfZmxhZ3MpOworKworKwlpZiAoR1NTX0VSUk9SKGdzcy0+bWFqb3IpKSB7 CisrCQkvKiBYWFggVXNlbGVzcyBjb2RlOiBNaXNzaW5nIHNlbmQ/ICovCisrCQlpZiAoc2VuZF90 b2subGVuZ3RoICE9IDApIHsKKysJCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01T R19LRVhHU1NfQ09OVElOVUUpKSAhPSAwIHx8CisrCQkJICAgIChyID0gc3NocGt0X3B1dF9zdHJp bmcoc3NoLCBzZW5kX3Rvay52YWx1ZSwgc2VuZF90b2subGVuZ3RoKSkgIT0gMCkKKysJCQkJZmF0 YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7CisrCQl9CisrCQlmYXRhbCgiZ3Nz X2luaXRfY29udGV4dCBmYWlsZWQiKTsKKysJfQorKworKwkvKiBJZiB3ZSd2ZSBnb3QgYW4gb2xk IHJlY2VpdmUgYnVmZmVyIGdldCByaWQgb2YgaXQgKi8KKysJaWYgKHRva2VuX3B0ciAhPSBHU1Nf Q19OT19CVUZGRVIpCisrCQlnc3NfcmVsZWFzZV9idWZmZXIoJmdzcy0+bWlub3IsIHRva2VuX3B0 cik7CisrCisrCWlmIChnc3MtPm1ham9yID09IEdTU19TX0NPTVBMRVRFKSB7CisrCQkvKiBJZiBt dXR1YWwgc3RhdGUgZmxhZyBpcyBub3QgdHJ1ZSwga2V4IGZhaWxzICovCisrCQlpZiAoIShyZXRf ZmxhZ3MgJiBHU1NfQ19NVVRVQUxfRkxBRykpCisrCQkJZmF0YWwoIk11dHVhbCBhdXRoZW50aWNh dGlvbiBmYWlsZWQiKTsKKysKKysJCS8qIElmIGludGVnIGF2YWlsIGZsYWcgaXMgbm90IHRydWUg a2V4IGZhaWxzICovCisrCQlpZiAoIShyZXRfZmxhZ3MgJiBHU1NfQ19JTlRFR19GTEFHKSkKKysJ CQlmYXRhbCgiSW50ZWdyaXR5IGNoZWNrIGZhaWxlZCIpOworKwl9CisrCisrCS8qCisrCSAqIElm IHdlIGhhdmUgZGF0YSB0byBzZW5kLCB0aGVuIHRoZSBsYXN0IG1lc3NhZ2UgdGhhdCB3ZQorKwkg KiByZWNlaXZlZCBjYW5ub3QgaGF2ZSBiZWVuIGEgJ2NvbXBsZXRlJy4KKysJICovCisrCWlmIChz ZW5kX3Rvay5sZW5ndGggIT0gMCkgeworKwkJaWYgKGdzcy0+Zmlyc3QpIHsKKysJICAgICAgICAg ICAgICAgIERIX2dldDBfa2V5KGtleC0+ZGgsICZwdWJfa2V5LCBOVUxMKTsKKysJCQlpZiAoKHIg PSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19LRVhHU1NfSU5JVCkpICE9IDAgfHwKKysJCQkg ICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIHNlbmRfdG9rLnZhbHVlLCBzZW5kX3Rvay5s ZW5ndGgpKSAhPSAwIHx8CisrCQkJICAgIChyID0gc3NocGt0X3B1dF9iaWdudW0yKHNzaCwgcHVi X2tleSkpICE9IDApCisrCQkJCWZhdGFsKCJmYWlsZWQgdG8gY29uc3RydWN0IHBhY2tldDogJXMi LCBzc2hfZXJyKHIpKTsKKysJCQlnc3MtPmZpcnN0ID0gMDsKKysJCX0gZWxzZSB7CisrCQkJaWYg KChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJTlVFKSkgIT0gMCB8 fAorKwkJCSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgc2VuZF90b2sudmFsdWUsIHNl bmRfdG9rLmxlbmd0aCkpICE9IDApCisrCQkJCWZhdGFsKCJmYWlsZWQgdG8gY29uc3RydWN0IHBh Y2tldDogJXMiLCBzc2hfZXJyKHIpKTsKKysJCX0KKysJCWlmICgociA9IHNzaHBrdF9zZW5kKHNz aCkpICE9IDApCisrCQkJZmF0YWwoImZhaWxlZCB0byBzZW5kIHBhY2tldDogJXMiLCBzc2hfZXJy KHIpKTsKKysJCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgJnNlbmRfdG9rKTsKKysK KysJCS8qIElmIHdlJ3ZlIHNlbnQgdGhlbSBkYXRhLCB0aGV5IHNob3VsZCByZXBseSAqLworKwkJ c3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19IT1NUS0VZLCAmaW5wdXRfa2V4 Z3NzX2hvc3RrZXkpOworKwkJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19D T05USU5VRSwgJmlucHV0X2tleGdzc2dleF9jb250aW51ZSk7CisrCQlzc2hfZGlzcGF0Y2hfc2V0 KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRFLCAmaW5wdXRfa2V4Z3NzZ2V4X2NvbXBsZXRl KTsKKysJCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfRVJST1IsICZpbnB1 dF9rZXhnc3NfZXJyb3IpOworKwkJcmV0dXJuIDA7CisrCX0KKysJLyogTm8gZGF0YSwgYW5kIG5v dCBjb21wbGV0ZSAqLworKwlpZiAoZ3NzLT5tYWpvciAhPSBHU1NfU19DT01QTEVURSkKKysJCWZh dGFsKCJOb3QgY29tcGxldGUsIGFuZCBubyB0b2tlbiBvdXRwdXQiKTsKKysKKysJaWYgIChnc3Mt Pm1ham9yICYgR1NTX1NfQ09OVElOVUVfTkVFREVEKQorKwkJcmV0dXJuIGtleGdzc2dleF9pbml0 X2N0eChzc2gsIHRva2VuX3B0cik7CisrCisrCXJldHVybiBrZXhnc3NnZXhfZmluYWwoc3NoKTsK Kyt9CisrCisrc3RhdGljIGludAorK2lucHV0X2tleGdzc2dleF9ncm91cChpbnQgdHlwZSwKKysJ CSAgICAgIHVfaW50MzJfdCBzZXEsCisrCQkgICAgICBzdHJ1Y3Qgc3NoICpzc2gpCisreworKwlz dHJ1Y3Qga2V4ICprZXggPSBzc2gtPmtleDsKKysJQklHTlVNICpwID0gTlVMTDsKKysJQklHTlVN ICpnID0gTlVMTDsKKysJaW50IHI7CisrCisrCWRlYnVnKCJSZWNlaXZlZCBTU0gyX01TR19LRVhH U1NfR1JPVVAiKTsKKysJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19HUk9V UCwgTlVMTCk7CisrCisrCWlmICgociA9IHNzaHBrdF9nZXRfYmlnbnVtMihzc2gsICZwKSkgIT0g MCB8fAorKwkgICAgKHIgPSBzc2hwa3RfZ2V0X2JpZ251bTIoc3NoLCAmZykpICE9IDAgfHwKKysJ ICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0gMCkKKysJCWZhdGFsKCJzaHBrdF9nZXRf YmlnbnVtMiBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7CisrCisrCWlmIChCTl9udW1fYml0cyhw KSA8IGtleC0+bWluIHx8IEJOX251bV9iaXRzKHApID4ga2V4LT5tYXgpCisrCQlmYXRhbCgiR1NT R1JQX0dFWCBncm91cCBvdXQgb2YgcmFuZ2U6ICVkICE8ICVkICE8ICVkIiwKKysJCSAgICBrZXgt Pm1pbiwgQk5fbnVtX2JpdHMocCksIGtleC0+bWF4KTsKKysKKysJaWYgKChrZXgtPmRoID0gZGhf bmV3X2dyb3VwKGcsIHApKSA9PSBOVUxMKQorKwkJZmF0YWwoImRuX25ld19ncm91cCgpIGZhaWxl ZCIpOworKwlwID0gZyA9IE5VTEw7IC8qIGJlbG9uZyB0byBrZXgtPmRoIG5vdyAqLworKworKwlp ZiAoKHIgPSBkaF9nZW5fa2V5KGtleC0+ZGgsIGtleC0+d2VfbmVlZCAqIDgpKSAhPSAwKSB7Cisr CQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmtleC0+Z3NzKTsKKysJCURIX2ZyZWUoa2V4LT5kaCk7 CisrCQlrZXgtPmRoID0gTlVMTDsKKysJCXJldHVybiByOworKwl9CisrCisrCXJldHVybiBrZXhn c3NnZXhfaW5pdF9jdHgoc3NoLCBHU1NfQ19OT19CVUZGRVIpOworK30KKysKKytzdGF0aWMgaW50 CisraW5wdXRfa2V4Z3NzZ2V4X2NvbnRpbnVlKGludCB0eXBlLAorKwkJCSB1X2ludDMyX3Qgc2Vx LAorKwkJCSBzdHJ1Y3Qgc3NoICpzc2gpCisreworKwlHc3NjdHh0ICpnc3MgPSBzc2gtPmtleC0+ Z3NzOworKwlnc3NfYnVmZmVyX2Rlc2MgcmVjdl90b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Cisr CWludCByOworKworKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0hPU1RL RVksIE5VTEwpOworKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTlRJ TlVFLCBOVUxMKTsKKysJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT01Q TEVURSwgTlVMTCk7CisrCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfRVJS T1IsIE5VTEwpOworKworKwlkZWJ1ZygiUmVjZWl2ZWQgR1NTQVBJX0NPTlRJTlVFIik7CisrCWlm IChnc3MtPm1ham9yID09IEdTU19TX0NPTVBMRVRFKQorKwkJZmF0YWwoIkdTU0FQSSBDb250aW51 ZSByZWNlaXZlZCBmcm9tIHNlcnZlciB3aGVuIGNvbXBsZXRlIik7CisrCWlmICgociA9IHNzaF9n c3NhcGlfc3NocGt0X2dldF9idWZmZXJfZGVzYyhzc2gsICZyZWN2X3RvaykpICE9IDAgfHwKKysJ ICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0gMCkKKysJCWZhdGFsKCJGYWlsZWQgdG8g cmVhZCB0b2tlbjogJXMiLCBzc2hfZXJyKHIpKTsKKysJaWYgICghKGdzcy0+bWFqb3IgJiBHU1Nf U19DT05USU5VRV9ORUVERUQpKQorKwkJZmF0YWwoIkRpZG4ndCByZWNlaXZlIGEgU1NIMl9NU0df S0VYR1NTX0NPTVBMRVRFIHdoZW4gSSBleHBlY3RlZCBpdCIpOworKwlyZXR1cm4ga2V4Z3NzZ2V4 X2luaXRfY3R4KHNzaCwgJnJlY3ZfdG9rKTsKKyt9CisrCisrc3RhdGljIGludAorK2lucHV0X2tl eGdzc2dleF9jb21wbGV0ZShpbnQgdHlwZSwKKysJCSAgICAgIHVfaW50MzJfdCBzZXEsCisrCQkg ICAgICBzdHJ1Y3Qgc3NoICpzc2gpCisreworKwlHc3NjdHh0ICpnc3MgPSBzc2gtPmtleC0+Z3Nz OworKwlnc3NfYnVmZmVyX2Rlc2MgcmVjdl90b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCXVf Y2hhciBjOworKwlpbnQgcjsKKysKKysJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tF WEdTU19IT1NUS0VZLCBOVUxMKTsKKysJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tF WEdTU19DT05USU5VRSwgTlVMTCk7CisrCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19L RVhHU1NfQ09NUExFVEUsIE5VTEwpOworKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0df S0VYR1NTX0VSUk9SLCBOVUxMKTsKKysKKysJZGVidWcoIlJlY2VpdmVkIEdTU0FQSV9DT01QTEVU RSIpOworKwlpZiAoZ3NzLT5tc2dfdG9rLnZhbHVlICE9IE5VTEwpCisrCSAgICAgICAgZmF0YWwo IlJlY2VpdmVkIEdTU0FQSV9DT01QTEVURSB0d2ljZT8iKTsKKysJaWYgKChyID0gc3NocGt0X2dl dGJfZnJvbXMoc3NoLCAmZ3NzLT5zZXJ2ZXJfYmxvYikpICE9IDAgfHwKKysJICAgIChyID0gc3No X2dzc2FwaV9zc2hwa3RfZ2V0X2J1ZmZlcl9kZXNjKHNzaCwgJmdzcy0+bXNnX3RvaykpICE9IDAp CisrCQlmYXRhbCgiRmFpbGVkIHRvIHJlYWQgbWVzc2FnZTogJXMiLCBzc2hfZXJyKHIpKTsKKysK KysJLyogSXMgdGhlcmUgYSB0b2tlbiBpbmNsdWRlZD8gKi8KKysJaWYgKChyID0gc3NocGt0X2dl dF91OChzc2gsICZjKSkgIT0gMCkKKysJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9l cnIocikpOworKwlpZiAoYykgeworKwkJaWYgKChyID0gc3NoX2dzc2FwaV9zc2hwa3RfZ2V0X2J1 ZmZlcl9kZXNjKHNzaCwgJnJlY3ZfdG9rKSkgIT0gMCkKKysJCQlmYXRhbCgiRmFpbGVkIHRvIHJl YWQgdG9rZW46ICVzIiwgc3NoX2VycihyKSk7CisrCQkvKiBJZiB3ZSdyZSBhbHJlYWR5IGNvbXBs ZXRlIC0gcHJvdG9jb2wgZXJyb3IgKi8KKysJCWlmIChnc3MtPm1ham9yID09IEdTU19TX0NPTVBM RVRFKQorKwkJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsICJQcm90b2NvbCBlcnJvcjogcmVj ZWl2ZWQgdG9rZW4gd2hlbiBjb21wbGV0ZSIpOworKwl9IGVsc2UgeworKwkJaWYgKGdzcy0+bWFq b3IgIT0gR1NTX1NfQ09NUExFVEUpCisrCQkJc3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwgIlBy b3RvY29sIGVycm9yOiBkaWQgbm90IHJlY2VpdmUgZmluYWwgdG9rZW4iKTsKKysJfQorKwlpZiAo KHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gpKSAhPSAwKQorKwkJZmF0YWwoIkV4cGVjdGluZyBlbmQg b2YgcGFja2V0LiIpOworKworKwlpZiAgKGdzcy0+bWFqb3IgJiBHU1NfU19DT05USU5VRV9ORUVE RUQpCisrCQlyZXR1cm4ga2V4Z3NzZ2V4X2luaXRfY3R4KHNzaCwgJnJlY3ZfdG9rKTsKKysKKysJ Z3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCAmcmVjdl90b2spOworKwlyZXR1cm4ga2V4 Z3NzZ2V4X2ZpbmFsKHNzaCk7CisrfQorKworKyNlbmRpZiAvKiBkZWZpbmVkKEdTU0FQSSkgJiYg ZGVmaW5lZChXSVRIX09QRU5TU0wpICovCitkaWZmIC0tZ2l0IGEva2V4Z3Nzcy5jIGIva2V4Z3Nz cy5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi45OGU5NDA0ZGYKKy0t LSAvZGV2L251bGwKKysrKyBiL2tleGdzc3MuYworQEAgLTAsMCArMSw2MDMgQEAKKysvKgorKyAq IENvcHlyaWdodCAoYykgMjAwMS0yMDA5IFNpbW9uIFdpbGtpbnNvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIEFVVEhPUiBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTCisrICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKysgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisrICogSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorKyAqIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQKKysgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKysgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqLworKworKyNpbmNs dWRlICJpbmNsdWRlcy5oIgorKworKyNpZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRI X09QRU5TU0wpCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgInhtYWxs b2MuaCIKKysjaW5jbHVkZSAic3NoYnVmLmgiCisrI2luY2x1ZGUgInNzaDIuaCIKKysjaW5jbHVk ZSAic3Noa2V5LmgiCisrI2luY2x1ZGUgImNpcGhlci5oIgorKyNpbmNsdWRlICJrZXguaCIKKysj aW5jbHVkZSAibG9nLmgiCisrI2luY2x1ZGUgInBhY2tldC5oIgorKyNpbmNsdWRlICJkaC5oIgor KyNpbmNsdWRlICJzc2gtZ3NzLmgiCisrI2luY2x1ZGUgIm1vbml0b3Jfd3JhcC5oIgorKyNpbmNs dWRlICJtaXNjLmgiICAgICAgLyogc2VydmNvbmYuaCBuZWVkcyBtaXNjLmggZm9yIHN0cnVjdCBG b3J3YXJkT3B0aW9ucyAqLworKyNpbmNsdWRlICJzZXJ2Y29uZi5oIgorKyNpbmNsdWRlICJzc2gt Z3NzLmgiCisrI2luY2x1ZGUgImRpZ2VzdC5oIgorKyNpbmNsdWRlICJzc2hlcnIuaCIKKysKKytl eHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOworKworK3N0YXRpYyBpbnQgaW5wdXRfa2V4Z3Nz X2luaXQoaW50LCB1X2ludDMyX3QsIHN0cnVjdCBzc2ggKik7Cisrc3RhdGljIGludCBpbnB1dF9r ZXhnc3NfY29udGludWUoaW50LCB1X2ludDMyX3QsIHN0cnVjdCBzc2ggKik7Cisrc3RhdGljIGlu dCBpbnB1dF9rZXhnc3NnZXhfZ3JvdXByZXEoaW50LCB1X2ludDMyX3QsIHN0cnVjdCBzc2ggKik7 Cisrc3RhdGljIGludCBpbnB1dF9rZXhnc3NnZXhfaW5pdChpbnQsIHVfaW50MzJfdCwgc3RydWN0 IHNzaCAqKTsKKytzdGF0aWMgaW50IGlucHV0X2tleGdzc2dleF9jb250aW51ZShpbnQsIHVfaW50 MzJfdCwgc3RydWN0IHNzaCAqKTsKKysKKytpbnQKKytrZXhnc3Nfc2VydmVyKHN0cnVjdCBzc2gg KnNzaCkKKyt7CisrCXN0cnVjdCBrZXggKmtleCA9IHNzaC0+a2V4OworKwlnc3NfT0lEIG9pZDsK KysJY2hhciAqbWVjaHM7CisrCisrCS8qIEluaXRpYWxpc2UgR1NTQVBJICovCisrCisrCS8qIElm IHdlJ3JlIHJla2V5aW5nLCBwcml2c2VwIG1lYW5zIHRoYXQgc29tZSBvZiB0aGUgcHJpdmF0ZSBz dHJ1Y3R1cmVzCisrCSAqIGluIHRoZSBHU1NBUEkgY29kZSBhcmUgbm8gbG9uZ2VyIGF2YWlsYWJs ZS4gVGhpcyBrbHVkZ2VzIHRoZW0gYmFjaworKwkgKiBpbnRvIGxpZmUKKysJICovCisrCWlmICgh c3NoX2dzc2FwaV9vaWRfdGFibGVfb2soKSkgeworKwkJbWVjaHMgPSBzc2hfZ3NzYXBpX3NlcnZl cl9tZWNoYW5pc21zKCk7CisrCQlmcmVlKG1lY2hzKTsKKysJfQorKworKwlkZWJ1ZzJfZigiSWRl bnRpZnlpbmcgJXMiLCBrZXgtPm5hbWUpOworKwlvaWQgPSBzc2hfZ3NzYXBpX2lkX2tleChOVUxM LCBrZXgtPm5hbWUsIGtleC0+a2V4X3R5cGUpOworKwlpZiAob2lkID09IEdTU19DX05PX09JRCkK KysJCWZhdGFsKCJVbmtub3duIGdzc2FwaSBtZWNoYW5pc20iKTsKKysKKysJZGVidWcyX2YoIkFj cXVpcmluZyBjcmVkZW50aWFscyIpOworKworKwlpZiAoR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlf c2VydmVyX2N0eCgma2V4LT5nc3MsIG9pZCkpKQorKwkJZmF0YWwoIlVuYWJsZSB0byBhY3F1aXJl IGNyZWRlbnRpYWxzIGZvciB0aGUgc2VydmVyIik7CisrCisrCXNzaF9nc3NhcGlfYnVpbGRfY3R4 KCZrZXgtPmdzcyk7CisrCWlmIChrZXgtPmdzcyA9PSBOVUxMKQorKwkJZmF0YWwoIlVuYWJsZSB0 byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGdzcyBjb250ZXh0Iik7CisrCisrCXNzaF9kaXNwYXRjaF9z ZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfSU5JVCwgJmlucHV0X2tleGdzc19pbml0KTsKKysJc3No X2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSwgJmlucHV0X2tleGdz c19jb250aW51ZSk7CisrCWRlYnVnKCJXYWl0IFNTSDJfTVNHX0tFWEdTU19JTklUIik7CisrCXJl dHVybiAwOworK30KKysKKytzdGF0aWMgaW5saW5lIHZvaWQKKytrZXhnc3NfYWNjZXB0X2N0eChz dHJ1Y3Qgc3NoICpzc2gsCisrCQkgIGdzc19idWZmZXJfZGVzYyAqcmVjdl90b2ssCisrCQkgIGdz c19idWZmZXJfZGVzYyAqc2VuZF90b2ssCisrCQkgIE9NX3VpbnQzMiAqcmV0X2ZsYWdzKQorK3sK KysJR3NzY3R4dCAqZ3NzID0gc3NoLT5rZXgtPmdzczsKKysJaW50IHI7CisrCisrCWdzcy0+bWFq b3IgPSBtbV9zc2hfZ3NzYXBpX2FjY2VwdF9jdHgoZ3NzLCByZWN2X3Rvaywgc2VuZF90b2ssIHJl dF9mbGFncyk7CisrCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgcmVjdl90b2spOwor KworKwlpZiAoZ3NzLT5tYWpvciAhPSBHU1NfU19DT01QTEVURSAmJiBzZW5kX3Rvay0+bGVuZ3Ro ID09IDApCisrCQlmYXRhbCgiWmVybyBsZW5ndGggdG9rZW4gb3V0cHV0IHdoZW4gaW5jb21wbGV0 ZSIpOworKworKwlpZiAoZ3NzLT5idWYudmFsdWUgPT0gTlVMTCkKKysJCWZhdGFsKCJObyBjbGll bnQgcHVibGljIGtleSIpOworKworKwlpZiAoZ3NzLT5tYWpvciAmIEdTU19TX0NPTlRJTlVFX05F RURFRCkgeworKwkJZGVidWcoIlNlbmRpbmcgR1NTQVBJX0NPTlRJTlVFIik7CisrCQlpZiAoKHIg PSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUpKSAhPSAwIHx8Cisr CQkgICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIHNlbmRfdG9rLT52YWx1ZSwgc2VuZF90 b2stPmxlbmd0aCkpICE9IDAgfHwKKysJCSAgICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDAp CisrCQkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7CisrCQlnc3NfcmVs ZWFzZV9idWZmZXIoJmdzcy0+bWlub3IsIHNlbmRfdG9rKTsKKysJfQorK30KKysKKytzdGF0aWMg aW5saW5lIGludAorK2tleGdzc19maW5hbChzdHJ1Y3Qgc3NoICpzc2gsCisrCSAgICAgZ3NzX2J1 ZmZlcl9kZXNjICpzZW5kX3RvaywKKysJICAgICBPTV91aW50MzIgKnJldF9mbGFncykKKyt7Cisr CXN0cnVjdCBrZXggKmtleCA9IHNzaC0+a2V4OworKwlHc3NjdHh0ICpnc3MgPSBrZXgtPmdzczsK KysJZ3NzX2J1ZmZlcl9kZXNjIG1zZ190b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCXVfY2hh ciBoYXNoW1NTSF9ESUdFU1RfTUFYX0xFTkdUSF07CisrCXNpemVfdCBoYXNobGVuOworKwlzdHJ1 Y3Qgc3NoYnVmICpzaGFyZWRfc2VjcmV0ID0gTlVMTDsKKysJaW50IHI7CisrCisrCXNzaF9kaXNw YXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfSU5JVCwgTlVMTCk7CisrCXNzaF9kaXNwYXRj aF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUsIE5VTEwpOworKworKwlpZiAoR1NT X0VSUk9SKGdzcy0+bWFqb3IpKSB7CisrCQlpZiAoc2VuZF90b2stPmxlbmd0aCA+IDApIHsKKysJ CQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUpKSAh PSAwIHx8CisrCQkJICAgIChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBzZW5kX3Rvay0+dmFs dWUsIHNlbmRfdG9rLT5sZW5ndGgpKSAhPSAwIHx8CisrCQkJICAgIChyID0gc3NocGt0X3NlbmQo c3NoKSkgIT0gMCkKKysJCQkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7 CisrCQl9CisrCQlmYXRhbCgiYWNjZXB0X2N0eCBkaWVkIik7CisrCX0KKysKKysJaWYgKCEoKnJl dF9mbGFncyAmIEdTU19DX01VVFVBTF9GTEFHKSkKKysJCWZhdGFsKCJNdXR1YWwgQXV0aGVudGlj YXRpb24gZmxhZyB3YXNuJ3Qgc2V0Iik7CisrCisrCWlmICghKCpyZXRfZmxhZ3MgJiBHU1NfQ19J TlRFR19GTEFHKSkKKysJCWZhdGFsKCJJbnRlZ3JpdHkgZmxhZyB3YXNuJ3Qgc2V0Iik7CisrCisr CWlmIChHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9zaWduKGdzcywgJmdzcy0+YnVmLCAmbXNnX3Rv aykpKQorKwkJZmF0YWwoIkNvdWxkbid0IGdldCBNSUMiKTsKKysKKysJaWYgKChyID0gc3NocGt0 X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRFKSkgIT0gMCB8fAorKwkgICAgKHIg PSBzc2hwa3RfcHV0X3N0cmluZ2Ioc3NoLCBnc3MtPnNlcnZlcl9wdWJrZXkpKSAhPSAwIHx8Cisr CSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgbXNnX3Rvay52YWx1ZSwgbXNnX3Rvay5s ZW5ndGgpKSAhPSAwKQorKwkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7 CisrCisrCWlmIChzZW5kX3Rvay0+bGVuZ3RoICE9IDApIHsKKysJCWlmICgociA9IHNzaHBrdF9w dXRfdTgoc3NoLCAxKSkgIT0gMCB8fCAvKiB0cnVlICovCisrCQkgICAgKHIgPSBzc2hwa3RfcHV0 X3N0cmluZyhzc2gsIHNlbmRfdG9rLT52YWx1ZSwgc2VuZF90b2stPmxlbmd0aCkpICE9IDApCisr CQkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7CisrCX0gZWxzZSB7Cisr CQlpZiAoKHIgPSBzc2hwa3RfcHV0X3U4KHNzaCwgMCkpICE9IDApIC8qIGZhbHNlICovCisrCQkJ ZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2VycihyKSk7CisrCX0KKysJaWYgKChyID0g c3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKKysJCWZhdGFsKCJzc2hwa3Rfc2VuZCBmYWlsZWQ6ICVz Iiwgc3NoX2VycihyKSk7CisrCisrCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgc2Vu ZF90b2spOworKwlnc3NfcmVsZWFzZV9idWZmZXIoJmdzcy0+bWlub3IsICZtc2dfdG9rKTsKKysK KysJaGFzaGxlbiA9IGdzcy0+aGFzaGxlbjsKKysJbWVtY3B5KGhhc2gsIGdzcy0+aGFzaCwgaGFz aGxlbik7CisrCWV4cGxpY2l0X2J6ZXJvKGdzcy0+aGFzaCwgc2l6ZW9mKGdzcy0+aGFzaCkpOwor KwlzaGFyZWRfc2VjcmV0ID0gZ3NzLT5zaGFyZWRfc2VjcmV0OworKwlnc3MtPnNoYXJlZF9zZWNy ZXQgPSBOVUxMOworKworKwlpZiAoZ3NzX2tleF9jb250ZXh0ID09IE5VTEwpCisrCQlnc3Nfa2V4 X2NvbnRleHQgPSBnc3M7CisrCWVsc2UKKysJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgma2V4LT5n c3MpOworKworKwlpZiAoKHIgPSBrZXhfZGVyaXZlX2tleXMoc3NoLCBoYXNoLCBoYXNobGVuLCBz aGFyZWRfc2VjcmV0KSkgPT0gMCkKKysJCXIgPSBrZXhfc2VuZF9uZXdrZXlzKHNzaCk7CisrCisr CS8qIElmIHRoaXMgd2FzIGEgcmVrZXksIHRoZW4gc2F2ZSBvdXQgYW55IGRlbGVnYXRlZCBjcmVk ZW50aWFscyB3ZQorKwkgKiBqdXN0IGV4Y2hhbmdlZC4gICovCisrCWlmIChvcHRpb25zLmdzc19z dG9yZV9yZWtleSkKKysJCXNzaF9nc3NhcGlfcmVrZXlfY3JlZHMoKTsKKysKKysJaWYgKGtleC0+ Z3NzICE9IE5VTEwpIHsKKysJCXNzaGJ1Zl9mcmVlKGdzcy0+c2VydmVyX3B1YmtleSk7CisrCQln c3MtPnNlcnZlcl9wdWJrZXkgPSBOVUxMOworKwl9CisrCWV4cGxpY2l0X2J6ZXJvKGhhc2gsIHNp emVvZihoYXNoKSk7CisrCXNzaGJ1Zl9mcmVlKHNoYXJlZF9zZWNyZXQpOworKwlyZXR1cm4gcjsK Kyt9CisrCisrc3RhdGljIGludAorK2lucHV0X2tleGdzc19pbml0KGludCB0eXBlLAorKwkJICB1 X2ludDMyX3Qgc2VxLAorKwkJICBzdHJ1Y3Qgc3NoICpzc2gpCisreworKwlzdHJ1Y3Qga2V4ICpr ZXggPSBzc2gtPmtleDsKKysJR3NzY3R4dCAqZ3NzID0ga2V4LT5nc3M7CisrCXN0cnVjdCBzc2hi dWYgKmVtcHR5OworKwlzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfcHVia2V5ID0gTlVMTDsKKysJZ3Nz X2J1ZmZlcl9kZXNjIHJlY3ZfdG9rID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwlnc3NfYnVmZmVy X2Rlc2Mgc2VuZF90b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCU9NX3VpbnQzMiByZXRfZmxh Z3MgPSAwOworKwlpbnQgcjsKKysKKysJZGVidWcoIlNTSDJfTVNHX0tFWEdTU19JTklUIHJlY2Vp dmVkIik7CisrCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfSU5JVCwgTlVM TCk7CisrCisrCWlmICgociA9IHNzaF9nc3NhcGlfc3NocGt0X2dldF9idWZmZXJfZGVzYyhzc2gs ICZyZWN2X3RvaykpICE9IDAgfHwKKysJICAgIChyID0gc3NocGt0X2dldGJfZnJvbXMoc3NoLCAm Y2xpZW50X3B1YmtleSkpICE9IDAgfHwKKysJICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkg IT0gMCkKKysJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOworKworKwlz d2l0Y2ggKGtleC0+a2V4X3R5cGUpIHsKKysJY2FzZSBLRVhfR1NTX0dSUDFfU0hBMToKKysJY2Fz ZSBLRVhfR1NTX0dSUDE0X1NIQTE6CisrCWNhc2UgS0VYX0dTU19HUlAxNF9TSEEyNTY6CisrCWNh c2UgS0VYX0dTU19HUlAxNl9TSEE1MTI6CisrCQlyID0ga2V4X2RoX2VuYyhrZXgsIGNsaWVudF9w dWJrZXksICZnc3MtPnNlcnZlcl9wdWJrZXksICZnc3MtPnNoYXJlZF9zZWNyZXQpOworKwkJYnJl YWs7CisrCWNhc2UgS0VYX0dTU19OSVNUUDI1Nl9TSEEyNTY6CisrCQlyID0ga2V4X2VjZGhfZW5j KGtleCwgY2xpZW50X3B1YmtleSwgJmdzcy0+c2VydmVyX3B1YmtleSwgJmdzcy0+c2hhcmVkX3Nl Y3JldCk7CisrCQlicmVhazsKKysJY2FzZSBLRVhfR1NTX0MyNTUxOV9TSEEyNTY6CisrCQlyID0g a2V4X2MyNTUxOV9lbmMoa2V4LCBjbGllbnRfcHVia2V5LCAmZ3NzLT5zZXJ2ZXJfcHVia2V5LCAm Z3NzLT5zaGFyZWRfc2VjcmV0KTsKKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJZmF0YWxfZigi VW5leHBlY3RlZCBLRVggdHlwZSAlZCIsIGtleC0+a2V4X3R5cGUpOworKwl9CisrCWlmIChyICE9 IDApIHsKKysJCXNzaGJ1Zl9mcmVlKGNsaWVudF9wdWJrZXkpOworKwkJZ3NzX3JlbGVhc2VfYnVm ZmVyKCZnc3MtPm1pbm9yLCAmcmVjdl90b2spOworKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZr ZXgtPmdzcyk7CisrCQlyZXR1cm4gcjsKKysJfQorKworKwkvKiBTZW5kIFNTSF9NU0dfS0VYR1NT X0hPU1RLRVkgaGVyZSwgaWYgd2Ugd2FudCAqLworKworKwlpZiAoKGVtcHR5ID0gc3NoYnVmX25l dygpKSA9PSBOVUxMKSB7CisrCQlzc2hidWZfZnJlZShjbGllbnRfcHVia2V5KTsKKysJCWdzc19y ZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgJnJlY3ZfdG9rKTsKKysJCXNzaF9nc3NhcGlfZGVs ZXRlX2N0eCgma2V4LT5nc3MpOworKwkJcmV0dXJuIFNTSF9FUlJfQUxMT0NfRkFJTDsKKysJfQor KworKwkvKiBDYWxjdWxhdGUgdGhlIGhhc2ggZWFybHkgc28gd2UgY2FuIGZyZWUgdGhlCisrCSAq IGNsaWVudF9wdWJrZXksIHdoaWNoIGhhcyByZWZlcmVuY2UgdG8gdGhlIHBhcmVudAorKwkgKiBi dWZmZXIgc3RhdGUtPmluY29taW5nX3BhY2tldAorKwkgKi8KKysJZ3NzLT5oYXNobGVuID0gc2l6 ZW9mKGdzcy0+aGFzaCk7CisrCXIgPSBrZXhfZ2VuX2hhc2goa2V4LT5oYXNoX2FsZywga2V4LT5j bGllbnRfdmVyc2lvbiwga2V4LT5zZXJ2ZXJfdmVyc2lvbiwKKysJCQkga2V4LT5wZWVyLCBrZXgt Pm15LCBlbXB0eSwgY2xpZW50X3B1YmtleSwgZ3NzLT5zZXJ2ZXJfcHVia2V5LAorKwkJCSBnc3Mt PnNoYXJlZF9zZWNyZXQsIGdzcy0+aGFzaCwgJmdzcy0+aGFzaGxlbik7CisrCXNzaGJ1Zl9mcmVl KGVtcHR5KTsKKysJc3NoYnVmX2ZyZWUoY2xpZW50X3B1YmtleSk7CisrCWlmIChyICE9IDApIHsK KysJCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgJnJlY3ZfdG9rKTsKKysJCXNzaF9n c3NhcGlfZGVsZXRlX2N0eCgma2V4LT5nc3MpOworKwkJcmV0dXJuIHI7CisrCX0KKysKKysJZ3Nz LT5idWYudmFsdWUgPSBnc3MtPmhhc2g7CisrCWdzcy0+YnVmLmxlbmd0aCA9IGdzcy0+aGFzaGxl bjsKKysKKysJa2V4Z3NzX2FjY2VwdF9jdHgoc3NoLCAmcmVjdl90b2ssICZzZW5kX3RvaywgJnJl dF9mbGFncyk7CisrCWlmIChnc3MtPm1ham9yICYgR1NTX1NfQ09OVElOVUVfTkVFREVEKQorKwkJ cmV0dXJuIDA7CisrCisrCXJldHVybiBrZXhnc3NfZmluYWwoc3NoLCAmc2VuZF90b2ssICZyZXRf ZmxhZ3MpOworK30KKysKKytzdGF0aWMgaW50CisraW5wdXRfa2V4Z3NzX2NvbnRpbnVlKGludCB0 eXBlLAorKwkJICAgICAgdV9pbnQzMl90IHNlcSwKKysJCSAgICAgIHN0cnVjdCBzc2ggKnNzaCkK Kyt7CisrCUdzc2N0eHQgKmdzcyA9IHNzaC0+a2V4LT5nc3M7CisrCWdzc19idWZmZXJfZGVzYyBy ZWN2X3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJZ3NzX2J1ZmZlcl9kZXNjIHNlbmRfdG9r ID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwlPTV91aW50MzIgcmV0X2ZsYWdzID0gMDsKKysJaW50 IHI7CisrCisrCWlmICgociA9IHNzaF9nc3NhcGlfc3NocGt0X2dldF9idWZmZXJfZGVzYyhzc2gs ICZyZWN2X3RvaykpICE9IDAgfHwKKysJICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0g MCkKKysJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOworKworKwlrZXhn c3NfYWNjZXB0X2N0eChzc2gsICZyZWN2X3RvaywgJnNlbmRfdG9rLCAmcmV0X2ZsYWdzKTsKKysJ aWYgKGdzcy0+bWFqb3IgJiBHU1NfU19DT05USU5VRV9ORUVERUQpCisrCQlyZXR1cm4gMDsKKysK KysJcmV0dXJuIGtleGdzc19maW5hbChzc2gsICZzZW5kX3RvaywgJnJldF9mbGFncyk7CisrfQor KworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworKy8qKioqKioqKioqKioqKioqKioqKiBLRVhHU1NHRVggKioqKioqKioqKioqKioqKioq KioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworKworK2ludAorK2tleGdzc2dleF9zZXJ2ZXIoc3RydWN0IHNzaCAqc3NoKQor K3sKKysJc3RydWN0IGtleCAqa2V4ID0gc3NoLT5rZXg7CisrCWdzc19PSUQgb2lkOworKwljaGFy ICptZWNoczsKKysKKysJLyogSW5pdGlhbGlzZSBHU1NBUEkgKi8KKysKKysJLyogSWYgd2UncmUg cmVrZXlpbmcsIHByaXZzZXAgbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBwcml2YXRlIHN0cnVjdHVy ZXMKKysJICogaW4gdGhlIEdTU0FQSSBjb2RlIGFyZSBubyBsb25nZXIgYXZhaWxhYmxlLiBUaGlz IGtsdWRnZXMgdGhlbSBiYWNrCisrCSAqIGludG8gbGlmZQorKwkgKi8KKysJaWYgKCFzc2hfZ3Nz YXBpX29pZF90YWJsZV9vaygpKSB7CisrCQltZWNocyA9IHNzaF9nc3NhcGlfc2VydmVyX21lY2hh bmlzbXMoKTsKKysJCWZyZWUobWVjaHMpOworKwl9CisrCisrCWRlYnVnMl9mKCJJZGVudGlmeWlu ZyAlcyIsIGtleC0+bmFtZSk7CisrCW9pZCA9IHNzaF9nc3NhcGlfaWRfa2V4KE5VTEwsIGtleC0+ bmFtZSwga2V4LT5rZXhfdHlwZSk7CisrCWlmIChvaWQgPT0gR1NTX0NfTk9fT0lEKQorKwkJZmF0 YWwoIlVua25vd24gZ3NzYXBpIG1lY2hhbmlzbSIpOworKworKwlkZWJ1ZzJfZigiQWNxdWlyaW5n IGNyZWRlbnRpYWxzIik7CisrCisrCWlmIChHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9zZXJ2ZXJf Y3R4KCZrZXgtPmdzcywgb2lkKSkpCisrCQlmYXRhbCgiVW5hYmxlIHRvIGFjcXVpcmUgY3JlZGVu dGlhbHMgZm9yIHRoZSBzZXJ2ZXIiKTsKKysKKysJc3NoX2dzc2FwaV9idWlsZF9jdHgoJmtleC0+ Z3NzKTsKKysJaWYgKGtleC0+Z3NzID09IE5VTEwpCisrCQlmYXRhbCgiVW5hYmxlIHRvIGFsbG9j YXRlIG1lbW9yeSBmb3IgZ3NzIGNvbnRleHQiKTsKKysKKysJZGVidWcoIkRvaW5nIGdyb3VwIGV4 Y2hhbmdlIik7CisrCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfR1JPVVBS RVEsICZpbnB1dF9rZXhnc3NnZXhfZ3JvdXByZXEpOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3Rh dGljIGlubGluZSB2b2lkCisra2V4Z3NzZ2V4X2FjY2VwdF9jdHgoc3RydWN0IHNzaCAqc3NoLAor KwkJICAgICBnc3NfYnVmZmVyX2Rlc2MgKnJlY3ZfdG9rLAorKwkJICAgICBnc3NfYnVmZmVyX2Rl c2MgKnNlbmRfdG9rLAorKwkJICAgICBPTV91aW50MzIgKnJldF9mbGFncykKKyt7CisrCUdzc2N0 eHQgKmdzcyA9IHNzaC0+a2V4LT5nc3M7CisrCWludCByOworKworKwlnc3MtPm1ham9yID0gbW1f c3NoX2dzc2FwaV9hY2NlcHRfY3R4KGdzcywgcmVjdl90b2ssIHNlbmRfdG9rLCByZXRfZmxhZ3Mp OworKwlnc3NfcmVsZWFzZV9idWZmZXIoJmdzcy0+bWlub3IsIHJlY3ZfdG9rKTsKKysKKysJaWYg KGdzcy0+bWFqb3IgIT0gR1NTX1NfQ09NUExFVEUgJiYgc2VuZF90b2stPmxlbmd0aCA9PSAwKQor KwkJZmF0YWwoIlplcm8gbGVuZ3RoIHRva2VuIG91dHB1dCB3aGVuIGluY29tcGxldGUiKTsKKysK KysJaWYgKGdzcy0+ZGhfY2xpZW50X3B1YiA9PSBOVUxMKQorKwkJZmF0YWwoIk5vIGNsaWVudCBw dWJsaWMga2V5Iik7CisrCisrCWlmIChnc3MtPm1ham9yICYgR1NTX1NfQ09OVElOVUVfTkVFREVE KSB7CisrCQlkZWJ1ZygiU2VuZGluZyBHU1NBUElfQ09OVElOVUUiKTsKKysJCWlmICgociA9IHNz aHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSkpICE9IDAgfHwKKysJCSAg ICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNzaCwgc2VuZF90b2stPnZhbHVlLCBzZW5kX3Rvay0+ bGVuZ3RoKSkgIT0gMCB8fAorKwkJICAgIChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKKysJ CQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKKysJCWdzc19yZWxlYXNl X2J1ZmZlcigmZ3NzLT5taW5vciwgc2VuZF90b2spOworKwl9CisrfQorKworK3N0YXRpYyBpbmxp bmUgaW50Cisra2V4Z3NzZ2V4X2ZpbmFsKHN0cnVjdCBzc2ggKnNzaCwKKysJCWdzc19idWZmZXJf ZGVzYyAqc2VuZF90b2ssCisrCQlPTV91aW50MzIgKnJldF9mbGFncykKKyt7CisrCXN0cnVjdCBr ZXggKmtleCA9IHNzaC0+a2V4OworKwlHc3NjdHh0ICpnc3MgPSBrZXgtPmdzczsKKysJZ3NzX2J1 ZmZlcl9kZXNjIG1zZ190b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCXVfY2hhciBoYXNoW1NT SF9ESUdFU1RfTUFYX0xFTkdUSF07CisrCXNpemVfdCBoYXNobGVuOworKwljb25zdCBCSUdOVU0g KnB1Yl9rZXksICpkaF9wLCAqZGhfZzsKKysJc3RydWN0IHNzaGJ1ZiAqc2hhcmVkX3NlY3JldCA9 IE5VTEw7CisrCXN0cnVjdCBzc2hidWYgKmVtcHR5ID0gTlVMTDsKKysJaW50IHI7CisrCisrCXNz aF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfSU5JVCwgTlVMTCk7CisrCXNzaF9k aXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUsIE5VTEwpOworKworKwlp ZiAoR1NTX0VSUk9SKGdzcy0+bWFqb3IpKSB7CisrCQlpZiAoc2VuZF90b2stPmxlbmd0aCA+IDAp IHsKKysJCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19LRVhHU1NfQ09OVElO VUUpKSAhPSAwIHx8CisrCQkJICAgIChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBzZW5kX3Rv ay0+dmFsdWUsIHNlbmRfdG9rLT5sZW5ndGgpKSAhPSAwIHx8CisrCQkJICAgIChyID0gc3NocGt0 X3NlbmQoc3NoKSkgIT0gMCkKKysJCQkJZmF0YWwoInNzaHBrdCBmYWlsZWQ6ICVzIiwgc3NoX2Vy cihyKSk7CisrCQl9CisrCQlmYXRhbCgiYWNjZXB0X2N0eCBkaWVkIik7CisrCX0KKysKKysJaWYg KCEoKnJldF9mbGFncyAmIEdTU19DX01VVFVBTF9GTEFHKSkKKysJCWZhdGFsKCJNdXR1YWwgQXV0 aGVudGljYXRpb24gZmxhZyB3YXNuJ3Qgc2V0Iik7CisrCisrCWlmICghKCpyZXRfZmxhZ3MgJiBH U1NfQ19JTlRFR19GTEFHKSkKKysJCWZhdGFsKCJJbnRlZ3JpdHkgZmxhZyB3YXNuJ3Qgc2V0Iik7 CisrCisrCS8qIGNhbGN1bGF0ZSBzaGFyZWQgc2VjcmV0ICovCisrCXNoYXJlZF9zZWNyZXQgPSBz c2hidWZfbmV3KCk7CisrCWlmIChzaGFyZWRfc2VjcmV0ID09IE5VTEwpIHsKKysJCXNzaF9nc3Nh cGlfZGVsZXRlX2N0eCgma2V4LT5nc3MpOworKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKKysJ CWdvdG8gb3V0OworKwl9CisrCWlmICgociA9IGtleF9kaF9jb21wdXRlX2tleShrZXgsIGdzcy0+ ZGhfY2xpZW50X3B1Yiwgc2hhcmVkX3NlY3JldCkpICE9IDApIHsKKysJCXNzaF9nc3NhcGlfZGVs ZXRlX2N0eCgma2V4LT5nc3MpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJaWYgKChlbXB0eSA9 IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkgeworKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZrZXgt Pmdzcyk7CisrCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOworKwkJZ290byBvdXQ7CisrCX0KKysK KysJREhfZ2V0MF9rZXkoa2V4LT5kaCwgJnB1Yl9rZXksIE5VTEwpOworKwlESF9nZXQwX3BxZyhr ZXgtPmRoLCAmZGhfcCwgTlVMTCwgJmRoX2cpOworKwloYXNobGVuID0gc2l6ZW9mKGhhc2gpOwor KwlyID0ga2V4Z2V4X2hhc2goa2V4LT5oYXNoX2FsZywga2V4LT5jbGllbnRfdmVyc2lvbiwga2V4 LT5zZXJ2ZXJfdmVyc2lvbiwKKysJCQlrZXgtPnBlZXIsIGtleC0+bXksIGVtcHR5LCBrZXgtPm1p biwga2V4LT5uYml0cywga2V4LT5tYXgsIGRoX3AsIGRoX2csCisrCQkJZ3NzLT5kaF9jbGllbnRf cHViLCBwdWJfa2V5LCBzc2hidWZfcHRyKHNoYXJlZF9zZWNyZXQpLAorKwkJCXNzaGJ1Zl9sZW4o c2hhcmVkX3NlY3JldCksIGhhc2gsICZoYXNobGVuKTsKKysJc3NoYnVmX2ZyZWUoZW1wdHkpOwor KwlpZiAociAhPSAwKQorKwkJZmF0YWwoImtleGdleF9oYXNoIGZhaWxlZDogJXMiLCBzc2hfZXJy KHIpKTsKKysKKysJZ3NzLT5idWYudmFsdWUgPSBoYXNoOworKwlnc3MtPmJ1Zi5sZW5ndGggPSBo YXNobGVuOworKworKwlpZiAoR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfc2lnbihnc3MsICZnc3Mt PmJ1ZiwgJm1zZ190b2spKSkKKysJCWZhdGFsKCJDb3VsZG4ndCBnZXQgTUlDIik7CisrCisrCWlm ICgociA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT01QTEVURSkpICE9IDAg fHwKKysJICAgIChyID0gc3NocGt0X3B1dF9iaWdudW0yKHNzaCwgcHViX2tleSkpICE9IDAgfHwK KysJICAgIChyID0gc3NocGt0X3B1dF9zdHJpbmcoc3NoLCBtc2dfdG9rLnZhbHVlLCBtc2dfdG9r Lmxlbmd0aCkpICE9IDApCisrCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIp KTsKKysKKysJaWYgKHNlbmRfdG9rLT5sZW5ndGggIT0gMCkgeworKwkJaWYgKChyID0gc3NocGt0 X3B1dF91OChzc2gsIDEpKSAhPSAwIHx8IC8qIHRydWUgKi8KKysJCSAgICAociA9IHNzaHBrdF9w dXRfc3RyaW5nKHNzaCwgc2VuZF90b2stPnZhbHVlLCBzZW5kX3Rvay0+bGVuZ3RoKSkgIT0gMCkK KysJCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKKysJfSBlbHNlIHsK KysJCWlmICgociA9IHNzaHBrdF9wdXRfdTgoc3NoLCAwKSkgIT0gMCkgLyogZmFsc2UgKi8KKysJ CQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKKysJfQorKwlpZiAoKHIg PSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKQorKwkJZmF0YWwoInNzaHBrdF9zZW5kIGZhaWxlZDog JXMiLCBzc2hfZXJyKHIpKTsKKysKKysJZ3NzX3JlbGVhc2VfYnVmZmVyKCZnc3MtPm1pbm9yLCBz ZW5kX3Rvayk7CisrCWdzc19yZWxlYXNlX2J1ZmZlcigmZ3NzLT5taW5vciwgJm1zZ190b2spOwor KworKwlpZiAoZ3NzX2tleF9jb250ZXh0ID09IE5VTEwpCisrCQlnc3Nfa2V4X2NvbnRleHQgPSBn c3M7CisrCWVsc2UKKysJCXNzaF9nc3NhcGlfZGVsZXRlX2N0eCgma2V4LT5nc3MpOworKworKwkv KiBGaW5hbGx5IGRlcml2ZSB0aGUga2V5cyBhbmQgc2VuZCB0aGVtICovCisrCWlmICgociA9IGtl eF9kZXJpdmVfa2V5cyhzc2gsIGhhc2gsIGhhc2hsZW4sIHNoYXJlZF9zZWNyZXQpKSA9PSAwKQor KwkJciA9IGtleF9zZW5kX25ld2tleXMoc3NoKTsKKysKKysJLyogSWYgdGhpcyB3YXMgYSByZWtl eSwgdGhlbiBzYXZlIG91dCBhbnkgZGVsZWdhdGVkIGNyZWRlbnRpYWxzIHdlCisrCSAqIGp1c3Qg ZXhjaGFuZ2VkLiAgKi8KKysJaWYgKG9wdGlvbnMuZ3NzX3N0b3JlX3Jla2V5KQorKwkJc3NoX2dz c2FwaV9yZWtleV9jcmVkcygpOworKworKwlpZiAoa2V4LT5nc3MgIT0gTlVMTCkKKysJCUJOX2Ns ZWFyX2ZyZWUoZ3NzLT5kaF9jbGllbnRfcHViKTsKKysKKytvdXQ6CisrCWV4cGxpY2l0X2J6ZXJv KGhhc2gsIHNpemVvZihoYXNoKSk7CisrCURIX2ZyZWUoa2V4LT5kaCk7CisrCWtleC0+ZGggPSBO VUxMOworKwlzc2hidWZfZnJlZShzaGFyZWRfc2VjcmV0KTsKKysJcmV0dXJuIHI7CisrfQorKwor K3N0YXRpYyBpbnQKKytpbnB1dF9rZXhnc3NnZXhfZ3JvdXByZXEoaW50IHR5cGUsCisrCQkJIHVf aW50MzJfdCBzZXEsCisrCQkJIHN0cnVjdCBzc2ggKnNzaCkKKyt7CisrCXN0cnVjdCBrZXggKmtl eCA9IHNzaC0+a2V4OworKwljb25zdCBCSUdOVU0gKmRoX3AsICpkaF9nOworKwlpbnQgbWluID0g LTEsIG1heCA9IC0xLCBuYml0cyA9IC0xOworKwlpbnQgY21pbiA9IC0xLCBjbWF4ID0gLTE7IC8q IGNsaWVudCBwcm9wb3NhbCAqLworKwlpbnQgcjsKKysKKysJLyogNS4gUyBnZW5lcmF0ZXMgYW4g ZXBoZW1lcmFsIGtleSBwYWlyIChkbyB0aGUgYWxsb2NhdGlvbnMgZWFybHkpICovCisrCisrCWRl YnVnKCJTU0gyX01TR19LRVhHU1NfR1JPVVBSRVEgcmVjZWl2ZWQiKTsKKysJc3NoX2Rpc3BhdGNo X3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19HUk9VUFJFUSwgTlVMTCk7CisrCisrCS8qIHN0b3Jl IGNsaWVudCBwcm9wb3NhbCB0byBwcm92aWRlIHZhbGlkIHNpZ25hdHVyZSAqLworKwlpZiAoKHIg PSBzc2hwa3RfZ2V0X3UzMihzc2gsICZjbWluKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hwa3Rf Z2V0X3UzMihzc2gsICZuYml0cykpICE9IDAgfHwKKysJICAgIChyID0gc3NocGt0X2dldF91MzIo c3NoLCAmY21heCkpICE9IDAgfHwKKysJICAgIChyID0gc3NocGt0X2dldF9lbmQoc3NoKSkgIT0g MCkKKysJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAlcyIsIHNzaF9lcnIocikpOworKworKwlrZXgt Pm5iaXRzID0gbmJpdHM7CisrCWtleC0+bWluID0gY21pbjsKKysJa2V4LT5tYXggPSBjbWF4Owor KwltaW4gPSBNQVgoREhfR1JQX01JTiwgY21pbik7CisrCW1heCA9IE1JTihESF9HUlBfTUFYLCBj bWF4KTsKKysJbmJpdHMgPSBNQVhJTVVNKERIX0dSUF9NSU4sIG5iaXRzKTsKKysJbmJpdHMgPSBN SU5JTVVNKERIX0dSUF9NQVgsIG5iaXRzKTsKKysKKysJaWYgKG1heCA8IG1pbiB8fCBuYml0cyA8 IG1pbiB8fCBtYXggPCBuYml0cykKKysJCWZhdGFsKCJHU1NfR0VYLCBiYWQgcGFyYW1ldGVyczog JWQgITwgJWQgITwgJWQiLCBtaW4sIG5iaXRzLCBtYXgpOworKworKwlrZXgtPmRoID0gbW1fY2hv b3NlX2RoKG1pbiwgbmJpdHMsIG1heCk7CisrCWlmIChrZXgtPmRoID09IE5VTEwpCisrCQlzc2hf cGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAiUHJvdG9jb2wgZXJyb3I6IG5vIG1hdGNoaW5nIGdyb3Vw IGZvdW5kIik7CisrCisrCURIX2dldDBfcHFnKGtleC0+ZGgsICZkaF9wLCBOVUxMLCAmZGhfZyk7 CisrCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tFWEdTU19HUk9VUCkpICE9 IDAgfHwKKysJICAgIChyID0gc3NocGt0X3B1dF9iaWdudW0yKHNzaCwgZGhfcCkpICE9IDAgfHwK KysJICAgIChyID0gc3NocGt0X3B1dF9iaWdudW0yKHNzaCwgZGhfZykpICE9IDAgfHwKKysJICAg IChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKKysJCWZhdGFsKCJzc2hwa3QgZmFpbGVkOiAl cyIsIHNzaF9lcnIocikpOworKworKwlpZiAoKHIgPSBzc2hfcGFja2V0X3dyaXRlX3dhaXQoc3No KSkgIT0gMCkKKysJCWZhdGFsKCJzc2hfcGFja2V0X3dyaXRlX3dhaXQ6ICVzIiwgc3NoX2Vycihy KSk7CisrCisrCS8qIENvbXB1dGUgb3VyIGV4Y2hhbmdlIHZhbHVlIGluIHBhcmFsbGVsIHdpdGgg dGhlIGNsaWVudCAqLworKwlpZiAoKHIgPSBkaF9nZW5fa2V5KGtleC0+ZGgsIGtleC0+d2VfbmVl ZCAqIDgpKSAhPSAwKSB7CisrCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmtleC0+Z3NzKTsKKysJ CURIX2ZyZWUoa2V4LT5kaCk7CisrCQlrZXgtPmRoID0gTlVMTDsKKysJCXJldHVybiByOworKwl9 CisrCisrCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19LRVhHU1NfSU5JVCwgJmlucHV0 X2tleGdzc2dleF9pbml0KTsKKysJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdT U19DT05USU5VRSwgJmlucHV0X2tleGdzc2dleF9jb250aW51ZSk7CisrCWRlYnVnKCJXYWl0IFNT SDJfTVNHX0tFWEdTU19JTklUIik7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50Cisr aW5wdXRfa2V4Z3NzZ2V4X2luaXQoaW50IHR5cGUsCisrCQkgICAgIHVfaW50MzJfdCBzZXEsCisr CQkgICAgIHN0cnVjdCBzc2ggKnNzaCkKKyt7CisrCUdzc2N0eHQgKmdzcyA9IHNzaC0+a2V4LT5n c3M7CisrCWdzc19idWZmZXJfZGVzYyByZWN2X3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJ Z3NzX2J1ZmZlcl9kZXNjIHNlbmRfdG9rID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwlPTV91aW50 MzIgcmV0X2ZsYWdzID0gMDsKKysJaW50IHI7CisrCisrCWRlYnVnKCJTU0gyX01TR19LRVhHU1Nf SU5JVCByZWNlaXZlZCIpOworKwlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYR1NT X0lOSVQsIE5VTEwpOworKworKwlpZiAoKHIgPSBzc2hfZ3NzYXBpX3NzaHBrdF9nZXRfYnVmZmVy X2Rlc2Moc3NoLCAmcmVjdl90b2spKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBrdF9nZXRfYmln bnVtMihzc2gsICZnc3MtPmRoX2NsaWVudF9wdWIpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBr dF9nZXRfZW5kKHNzaCkpICE9IDApCisrCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hf ZXJyKHIpKTsKKysKKysJLyogU2VuZCBTU0hfTVNHX0tFWEdTU19IT1NUS0VZIGhlcmUsIGlmIHdl IHdhbnQgKi8KKysKKysJa2V4Z3NzZ2V4X2FjY2VwdF9jdHgoc3NoLCAmcmVjdl90b2ssICZzZW5k X3RvaywgJnJldF9mbGFncyk7CisrCWlmIChnc3MtPm1ham9yICYgR1NTX1NfQ09OVElOVUVfTkVF REVEKQorKwkJcmV0dXJuIDA7CisrCisrCXJldHVybiBrZXhnc3NnZXhfZmluYWwoc3NoLCAmc2Vu ZF90b2ssICZyZXRfZmxhZ3MpOworK30KKysKKytzdGF0aWMgaW50CisraW5wdXRfa2V4Z3NzZ2V4 X2NvbnRpbnVlKGludCB0eXBlLAorKwkJCSB1X2ludDMyX3Qgc2VxLAorKwkJCSBzdHJ1Y3Qgc3No ICpzc2gpCisreworKwlHc3NjdHh0ICpnc3MgPSBzc2gtPmtleC0+Z3NzOworKwlnc3NfYnVmZmVy X2Rlc2MgcmVjdl90b2sgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCWdzc19idWZmZXJfZGVzYyBz ZW5kX3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJT01fdWludDMyIHJldF9mbGFncyA9IDA7 CisrCWludCByOworKworKwlpZiAoKHIgPSBzc2hfZ3NzYXBpX3NzaHBrdF9nZXRfYnVmZmVyX2Rl c2Moc3NoLCAmcmVjdl90b2spKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBrdF9nZXRfZW5kKHNz aCkpICE9IDApCisrCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKKysK KysJa2V4Z3NzZ2V4X2FjY2VwdF9jdHgoc3NoLCAmcmVjdl90b2ssICZzZW5kX3RvaywgJnJldF9m bGFncyk7CisrCWlmIChnc3MtPm1ham9yICYgR1NTX1NfQ09OVElOVUVfTkVFREVEKQorKwkJcmV0 dXJuIDA7CisrCisrCXJldHVybiBrZXhnc3NnZXhfZmluYWwoc3NoLCAmc2VuZF90b2ssICZyZXRf ZmxhZ3MpOworK30KKysKKysjZW5kaWYgLyogZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lU SF9PUEVOU1NMKSAqLworZGlmZiAtLWdpdCBhL21vbml0b3IuYyBiL21vbml0b3IuYworaW5kZXgg MWU0MWRmYTUzLi4wMjVjNmFiYmUgMTAwNjQ0CistLS0gYS9tb25pdG9yLmMKKysrKyBiL21vbml0 b3IuYworQEAgLTEzOCw2ICsxMzgsOCBAQCBpbnQgbW1fYW5zd2VyX2dzc19zZXR1cF9jdHgoc3Ry dWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisgaW50IG1tX2Fuc3dlcl9nc3NfYWNj ZXB0X2N0eChzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKyBpbnQgbW1fYW5z d2VyX2dzc191c2Vyb2soc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CisgaW50 IG1tX2Fuc3dlcl9nc3NfY2hlY2ttaWMoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYg Kik7CisraW50IG1tX2Fuc3dlcl9nc3Nfc2lnbihzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNz aGJ1ZiAqKTsKKytpbnQgbW1fYW5zd2VyX2dzc191cGRhdGVjcmVkcyhzdHJ1Y3Qgc3NoICosIGlu dCwgc3RydWN0IHNzaGJ1ZiAqKTsKKyAjZW5kaWYKKyAKKyAjaWZkZWYgU1NIX0FVRElUX0VWRU5U UworQEAgLTIxOCwxMSArMjIwLDE4IEBAIHN0cnVjdCBtb25fdGFibGUgbW9uX2Rpc3BhdGNoX3By b3RvMjBbXSA9IHsKKyAgICAge01PTklUT1JfUkVRX0dTU1NURVAsIDAsIG1tX2Fuc3dlcl9nc3Nf YWNjZXB0X2N0eH0sCisgICAgIHtNT05JVE9SX1JFUV9HU1NVU0VST0ssIE1PTl9PTkNFfE1PTl9B VVRIREVDSURFLCBtbV9hbnN3ZXJfZ3NzX3VzZXJva30sCisgICAgIHtNT05JVE9SX1JFUV9HU1ND SEVDS01JQywgTU9OX09OQ0UsIG1tX2Fuc3dlcl9nc3NfY2hlY2ttaWN9LAorKyAgICB7TU9OSVRP Ul9SRVFfR1NTU0lHTiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9nc3Nfc2lnbn0sCisgI2VuZGlmCisg ICAgIHswLCAwLCBOVUxMfQorIH07CisgCisgc3RydWN0IG1vbl90YWJsZSBtb25fZGlzcGF0Y2hf cG9zdGF1dGgyMFtdID0geworKyNpZmRlZiBHU1NBUEkKKysgICAge01PTklUT1JfUkVRX0dTU1NF VFVQLCAwLCBtbV9hbnN3ZXJfZ3NzX3NldHVwX2N0eH0sCisrICAgIHtNT05JVE9SX1JFUV9HU1NT VEVQLCAwLCBtbV9hbnN3ZXJfZ3NzX2FjY2VwdF9jdHh9LAorKyAgICB7TU9OSVRPUl9SRVFfR1NT U0lHTiwgMCwgbW1fYW5zd2VyX2dzc19zaWdufSwKKysgICAge01PTklUT1JfUkVRX0dTU1VQQ1JF RFMsIDAsIG1tX2Fuc3dlcl9nc3NfdXBkYXRlY3JlZHN9LAorKyNlbmRpZgorICAgICB7TU9OSVRP Ul9SRVFfU1RBVEUsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfc3RhdGV9LAorICNpZmRlZiBXSVRIX09Q RU5TU0wKKyAgICAge01PTklUT1JfUkVRX01PRFVMSSwgMCwgbW1fYW5zd2VyX21vZHVsaX0sCitA QCAtMjk0LDYgKzMwMywxMCBAQCBtb25pdG9yX2NoaWxkX3ByZWF1dGgoc3RydWN0IHNzaCAqc3No LCBzdHJ1Y3QgbW9uaXRvciAqcG1vbml0b3IpCisgCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRj aCwgTU9OSVRPUl9SRVFfTU9EVUxJLCAxKTsKKyAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNo LCBNT05JVE9SX1JFUV9TRVRDT01QQVQsIDEpOworIAltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0 Y2gsIE1PTklUT1JfUkVRX1NJR04sIDEpOworKyNpZmRlZiBHU1NBUEkKKysJLyogYW5kIGZvciB0 aGUgR1NTQVBJIGtleSBleGNoYW5nZSAqLworKwltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gs IE1PTklUT1JfUkVRX0dTU1NFVFVQLCAxKTsKKysjZW5kaWYKKyAKKyAJLyogVGhlIGZpcnN0IGZl dyByZXF1ZXN0cyBkbyBub3QgcmVxdWlyZSBhc3luY2hyb25vdXMgYWNjZXNzICovCisgCXdoaWxl ICghYXV0aGVudGljYXRlZCkgeworQEAgLTM0Niw4ICszNTksMTUgQEAgbW9uaXRvcl9jaGlsZF9w cmVhdXRoKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1vbml0b3IgKnBtb25pdG9yKQorIAkJaWYg KGVudC0+ZmxhZ3MgJiAoTU9OX0FVVEhERUNJREV8TU9OX0FMT0cpKSB7CisgCQkJYXV0aF9sb2co c3NoLCBhdXRoZW50aWNhdGVkLCBwYXJ0aWFsLAorIAkJCSAgICBhdXRoX21ldGhvZCwgYXV0aF9z dWJtZXRob2QpOworLQkJCWlmICghcGFydGlhbCAmJiAhYXV0aGVudGljYXRlZCkKKysJCQlpZiAo IXBhcnRpYWwgJiYgIWF1dGhlbnRpY2F0ZWQpIHsKKysjaWZkZWYgR1NTQVBJCisrCQkJCS8qIElm IGdzc2FwaS13aXRoLW1pYyBmYWlsZWQsIE1PTklUT1JfUkVRX0dTU0NIRUNLTUlDIGlzIGRpc2Fi bGVkLgorKwkJCQkgKiBXZSBoYXZlIHRvIHJlZW5hYmxlIGl0IHRvIHRyeSBhZ2FpbiBmb3IgZ3Nz YXBpLWtleWV4ICovCisrCQkJCWlmIChzdHJjbXAoYXV0aF9tZXRob2QsICJnc3NhcGktd2l0aC1t aWMiKSA9PSAwICYmIG9wdGlvbnMuZ3NzX2tleWV4KQorKwkJCQkJbW9uaXRvcl9wZXJtaXQobW9u X2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NDSEVDS01JQywgMSk7CisrI2VuZGlmCisgCQkJCWF1 dGhjdHh0LT5mYWlsdXJlcysrOworKwkJCX0KKyAJCQlpZiAoYXV0aGVudGljYXRlZCB8fCBwYXJ0 aWFsKSB7CisgCQkJCWF1dGgyX3VwZGF0ZV9zZXNzaW9uX2luZm8oYXV0aGN0eHQsCisgCQkJCSAg ICBhdXRoX21ldGhvZCwgYXV0aF9zdWJtZXRob2QpOworQEAgLTQzNCw2ICs0NTQsMTAgQEAgbW9u aXRvcl9jaGlsZF9wb3N0YXV0aChzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBtb25pdG9yICpwbW9u aXRvcikKKyAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9NT0RVTEks IDEpOworIAltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX1NJR04sIDEp OworIAltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX1RFUk0sIDEpOwor KyNpZmRlZiBHU1NBUEkKKysJLyogYW5kIGZvciB0aGUgR1NTQVBJIGtleSBleGNoYW5nZSAqLwor Kwltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0dTU1NFVFVQLCAxKTsK KysjZW5kaWYKKyAKKyAJaWYgKGF1dGhfb3B0cy0+cGVybWl0X3B0eV9mbGFnKSB7CisgCQltb25p dG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX1BUWSwgMSk7CitAQCAtMTkyNCw2 ICsxOTQ4LDE3IEBAIG1vbml0b3JfYXBwbHlfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1 Y3QgbW9uaXRvciAqcG1vbml0b3IpCisgIyBpZmRlZiBPUEVOU1NMX0hBU19FQ0MKKyAJa2V4LT5r ZXhbS0VYX0VDREhfU0hBMl0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAjIGVuZGlmCisrIyBpZmRlZiBH U1NBUEkKKysJaWYgKG9wdGlvbnMuZ3NzX2tleWV4KSB7CisrCQlrZXgtPmtleFtLRVhfR1NTX0dS UDFfU0hBMV0gPSBrZXhnc3Nfc2VydmVyOworKwkJa2V4LT5rZXhbS0VYX0dTU19HUlAxNF9TSEEx XSA9IGtleGdzc19zZXJ2ZXI7CisrCQlrZXgtPmtleFtLRVhfR1NTX0dSUDE0X1NIQTI1Nl0gPSBr ZXhnc3Nfc2VydmVyOworKwkJa2V4LT5rZXhbS0VYX0dTU19HUlAxNl9TSEE1MTJdID0ga2V4Z3Nz X3NlcnZlcjsKKysJCWtleC0+a2V4W0tFWF9HU1NfR0VYX1NIQTFdID0ga2V4Z3NzZ2V4X3NlcnZl cjsKKysJCWtleC0+a2V4W0tFWF9HU1NfTklTVFAyNTZfU0hBMjU2XSA9IGtleGdzc19zZXJ2ZXI7 CisrCQlrZXgtPmtleFtLRVhfR1NTX0MyNTUxOV9TSEEyNTZdID0ga2V4Z3NzX3NlcnZlcjsKKysJ fQorKyMgZW5kaWYKKyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisgCWtleC0+a2V4W0tFWF9D MjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworIAlrZXgtPmtleFtLRVhfS0VNX1NOVFJV UDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7CitAQCAtMjAyMiw4ICsyMDU3LDgg QEAgbW1fYW5zd2VyX2dzc19zZXR1cF9jdHgoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3Ry dWN0IHNzaGJ1ZiAqbSkKKyAJdV9jaGFyICpwOworIAlpbnQgcjsKKyAKKy0JaWYgKCFvcHRpb25z Lmdzc19hdXRoZW50aWNhdGlvbikKKy0JCWZhdGFsX2YoIkdTU0FQSSBhdXRoZW50aWNhdGlvbiBu b3QgZW5hYmxlZCIpOworKwlpZiAoIW9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uICYmICFvcHRp b25zLmdzc19rZXlleCkKKysJCWZhdGFsX2YoIkdTU0FQSSBub3QgZW5hYmxlZCIpOworIAorIAlp ZiAoKHIgPSBzc2hidWZfZ2V0X3N0cmluZyhtLCAmcCwgJmxlbikpICE9IDApCisgCQlmYXRhbF9m cihyLCAicGFyc2UiKTsKK0BAIC0yMDU1LDggKzIwOTAsOCBAQCBtbV9hbnN3ZXJfZ3NzX2FjY2Vw dF9jdHgoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKKyAJT01f dWludDMyIGZsYWdzID0gMDsgLyogR1NJIG5lZWRzIHRoaXMgKi8KKyAJaW50IHI7CisgCistCWlm ICghb3B0aW9ucy5nc3NfYXV0aGVudGljYXRpb24pCistCQlmYXRhbF9mKCJHU1NBUEkgYXV0aGVu dGljYXRpb24gbm90IGVuYWJsZWQiKTsKKysJaWYgKCFvcHRpb25zLmdzc19hdXRoZW50aWNhdGlv biAmJiAhb3B0aW9ucy5nc3Nfa2V5ZXgpCisrCQlmYXRhbF9mKCJHU1NBUEkgbm90IGVuYWJsZWQi KTsKKyAKKyAJaWYgKChyID0gc3NoX2dzc2FwaV9nZXRfYnVmZmVyX2Rlc2MobSwgJmluKSkgIT0g MCkKKyAJCWZhdGFsX2ZyKHIsICJzc2hfZ3NzYXBpX2dldF9idWZmZXJfZGVzYyIpOworQEAgLTIw NzYsNiArMjExMSw3IEBAIG1tX2Fuc3dlcl9nc3NfYWNjZXB0X2N0eChzdHJ1Y3Qgc3NoICpzc2gs IGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorIAkJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3Bh dGNoLCBNT05JVE9SX1JFUV9HU1NTVEVQLCAwKTsKKyAJCW1vbml0b3JfcGVybWl0KG1vbl9kaXNw YXRjaCwgTU9OSVRPUl9SRVFfR1NTVVNFUk9LLCAxKTsKKyAJCW1vbml0b3JfcGVybWl0KG1vbl9k aXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTQ0hFQ0tNSUMsIDEpOworKwkJbW9uaXRvcl9wZXJtaXQo bW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NTSUdOLCAxKTsKKyAJfQorIAlyZXR1cm4gKDAp OworIH0KK0BAIC0yMDg3LDggKzIxMjMsOCBAQCBtbV9hbnN3ZXJfZ3NzX2NoZWNrbWljKHN0cnVj dCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCisgCU9NX3VpbnQzMiByZXQ7 CisgCWludCByOworIAorLQlpZiAoIW9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uKQorLQkJZmF0 YWxfZigiR1NTQVBJIGF1dGhlbnRpY2F0aW9uIG5vdCBlbmFibGVkIik7CisrCWlmICghb3B0aW9u cy5nc3NfYXV0aGVudGljYXRpb24gJiYgIW9wdGlvbnMuZ3NzX2tleWV4KQorKwkJZmF0YWxfZigi R1NTQVBJIG5vdCBlbmFibGVkIik7CisgCisgCWlmICgociA9IHNzaF9nc3NhcGlfZ2V0X2J1ZmZl cl9kZXNjKG0sICZnc3NidWYpKSAhPSAwIHx8CisgCSAgICAociA9IHNzaF9nc3NhcGlfZ2V0X2J1 ZmZlcl9kZXNjKG0sICZtaWMpKSAhPSAwKQorQEAgLTIxMTQsMTMgKzIxNTAsMTcgQEAgbW1fYW5z d2VyX2dzc19jaGVja21pYyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVm ICptKQorIGludAorIG1tX2Fuc3dlcl9nc3NfdXNlcm9rKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNv Y2ssIHN0cnVjdCBzc2hidWYgKm0pCisgeworLQlpbnQgciwgYXV0aGVudGljYXRlZDsKKysJaW50 IHIsIGF1dGhlbnRpY2F0ZWQsIGtleDsKKyAJY29uc3QgY2hhciAqZGlzcGxheW5hbWU7CisgCist CWlmICghb3B0aW9ucy5nc3NfYXV0aGVudGljYXRpb24pCistCQlmYXRhbF9mKCJHU1NBUEkgYXV0 aGVudGljYXRpb24gbm90IGVuYWJsZWQiKTsKKysJaWYgKCFvcHRpb25zLmdzc19hdXRoZW50aWNh dGlvbiAmJiAhb3B0aW9ucy5nc3Nfa2V5ZXgpCisrCQlmYXRhbF9mKCJHU1NBUEkgbm90IGVuYWJs ZWQiKTsKKysKKysJaWYgKChyID0gc3NoYnVmX2dldF91MzIobSwgJmtleCkpICE9IDApCisrCQlm YXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisgCistCWF1dGhlbnRpY2F0ZWQgPSBhdXRoY3R4 dC0+dmFsaWQgJiYgc3NoX2dzc2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIpOworKwlhdXRoZW50 aWNhdGVkID0gYXV0aGN0eHQtPnZhbGlkICYmCisrCSAgICBzc2hfZ3NzYXBpX3VzZXJvayhhdXRo Y3R4dC0+dXNlciwgYXV0aGN0eHQtPnB3LCBrZXgpOworIAorIAlzc2hidWZfcmVzZXQobSk7Cisg CWlmICgociA9IHNzaGJ1Zl9wdXRfdTMyKG0sIGF1dGhlbnRpY2F0ZWQpKSAhPSAwKQorQEAgLTIx MjksNyArMjE2OSwxMSBAQCBtbV9hbnN3ZXJfZ3NzX3VzZXJvayhzdHJ1Y3Qgc3NoICpzc2gsIGlu dCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorIAlkZWJ1ZzNfZigic2VuZGluZyByZXN1bHQgJWQi LCBhdXRoZW50aWNhdGVkKTsKKyAJbW1fcmVxdWVzdF9zZW5kKHNvY2ssIE1PTklUT1JfQU5TX0dT U1VTRVJPSywgbSk7CisgCistCWF1dGhfbWV0aG9kID0gImdzc2FwaS13aXRoLW1pYyI7CisrCWlm IChrZXgpIHsKKysJCWF1dGhfbWV0aG9kID0gImdzc2FwaS1rZXlleCI7CisrCX0gZWxzZSB7Cisr CQlhdXRoX21ldGhvZCA9ICJnc3NhcGktd2l0aC1taWMiOworKwl9CisgCisgCWlmICgoZGlzcGxh eW5hbWUgPSBzc2hfZ3NzYXBpX2Rpc3BsYXluYW1lKCkpICE9IE5VTEwpCisgCQlhdXRoMl9yZWNv cmRfaW5mbyhhdXRoY3R4dCwgIiVzIiwgZGlzcGxheW5hbWUpOworQEAgLTIxMzcsNSArMjE4MSw4 NCBAQCBtbV9hbnN3ZXJfZ3NzX3VzZXJvayhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1 Y3Qgc3NoYnVmICptKQorIAkvKiBNb25pdG9yIGxvb3Agd2lsbCB0ZXJtaW5hdGUgaWYgYXV0aGVu dGljYXRlZCAqLworIAlyZXR1cm4gKGF1dGhlbnRpY2F0ZWQpOworIH0KKysKKytpbnQKKyttbV9h bnN3ZXJfZ3NzX3NpZ24oc3RydWN0IHNzaCAqc3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qgc3NoYnVm ICptKQorK3sKKysJZ3NzX2J1ZmZlcl9kZXNjIGRhdGE7CisrCWdzc19idWZmZXJfZGVzYyBoYXNo ID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwlPTV91aW50MzIgbWFqb3IsIG1pbm9yOworKwlzaXpl X3QgbGVuOworKwl1X2NoYXIgKnAgPSBOVUxMOworKwlpbnQgcjsKKysKKysJaWYgKCFvcHRpb25z Lmdzc19hdXRoZW50aWNhdGlvbiAmJiAhb3B0aW9ucy5nc3Nfa2V5ZXgpCisrCQlmYXRhbF9mKCJH U1NBUEkgbm90IGVuYWJsZWQiKTsKKysKKysJaWYgKChyID0gc3NoYnVmX2dldF9zdHJpbmcobSwg JnAsICZsZW4pKSAhPSAwKQorKwkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOworKwlkYXRh LnZhbHVlID0gcDsKKysJZGF0YS5sZW5ndGggPSBsZW47CisrCS8qIExlbmd0aHMgb2YgU0hBLTEs IFNIQS0yNTYgYW5kIFNIQS01MTIgaGFzaGVzIHRoYXQgYXJlIHVzZWQgKi8KKysJaWYgKGRhdGEu bGVuZ3RoICE9IDIwICYmIGRhdGEubGVuZ3RoICE9IDMyICYmIGRhdGEubGVuZ3RoICE9IDY0KQor KwkJZmF0YWxfZigiZGF0YSBsZW5ndGggaW5jb3JyZWN0OiAlZCIsIChpbnQpIGRhdGEubGVuZ3Ro KTsKKysKKysJLyogU2F2ZSB0aGUgc2Vzc2lvbiBJRCBvbiB0aGUgZmlyc3QgdGltZSBhcm91bmQg Ki8KKysJaWYgKHNlc3Npb25faWQyX2xlbiA9PSAwKSB7CisrCQlzZXNzaW9uX2lkMl9sZW4gPSBk YXRhLmxlbmd0aDsKKysJCXNlc3Npb25faWQyID0geG1hbGxvYyhzZXNzaW9uX2lkMl9sZW4pOwor KwkJbWVtY3B5KHNlc3Npb25faWQyLCBkYXRhLnZhbHVlLCBzZXNzaW9uX2lkMl9sZW4pOworKwl9 CisrCW1ham9yID0gc3NoX2dzc2FwaV9zaWduKGdzc2NvbnRleHQsICZkYXRhLCAmaGFzaCk7Cisr CisrCWZyZWUoZGF0YS52YWx1ZSk7CisrCisrCXNzaGJ1Zl9yZXNldChtKTsKKysKKysJaWYgKChy ID0gc3NoYnVmX3B1dF91MzIobSwgbWFqb3IpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaGJ1Zl9w dXRfc3RyaW5nKG0sIGhhc2gudmFsdWUsIGhhc2gubGVuZ3RoKSkgIT0gMCkKKysJCWZhdGFsX2Zy KHIsICJidWZmZXIgZXJyb3IiKTsKKysKKysJbW1fcmVxdWVzdF9zZW5kKHNvY2tldCwgTU9OSVRP Ul9BTlNfR1NTU0lHTiwgbSk7CisrCisrCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3IsICZoYXNo KTsKKysKKysJLyogVHVybiBvbiBnZXRwd25hbSBwZXJtaXNzaW9ucyAqLworKwltb25pdG9yX3Bl cm1pdChtb25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX1BXTkFNLCAxKTsKKysKKysJLyogQW5kIGNy ZWRlbnRpYWwgdXBkYXRpbmcsIGZvciB3aGVuIHJla2V5aW5nICovCisrCW1vbml0b3JfcGVybWl0 KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTVVBDUkVEUywgMSk7CisrCisrCXJldHVybiAo MCk7CisrfQorKworK2ludAorK21tX2Fuc3dlcl9nc3NfdXBkYXRlY3JlZHMoc3RydWN0IHNzaCAq c3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qgc3NoYnVmICptKSB7CisrCXNzaF9nc3NhcGlfY2NhY2hl IHN0b3JlOworKwlpbnQgciwgb2s7CisrCisrCWlmICghb3B0aW9ucy5nc3NfYXV0aGVudGljYXRp b24gJiYgIW9wdGlvbnMuZ3NzX2tleWV4KQorKwkJZmF0YWxfZigiR1NTQVBJIG5vdCBlbmFibGVk Iik7CisrCisrCWlmICgociA9IHNzaGJ1Zl9nZXRfc3RyaW5nKG0sICh1X2NoYXIgKiopJnN0b3Jl LmZpbGVuYW1lLCBOVUxMKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hidWZfZ2V0X3N0cmluZyht LCAodV9jaGFyICoqKSZzdG9yZS5lbnZ2YXIsIE5VTEwpKSAhPSAwIHx8CisrCSAgICAociA9IHNz aGJ1Zl9nZXRfc3RyaW5nKG0sICh1X2NoYXIgKiopJnN0b3JlLmVudnZhbCwgTlVMTCkpICE9IDAp CisrCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCisrCW9rID0gc3NoX2dzc2FwaV91 cGRhdGVfY3JlZHMoJnN0b3JlKTsKKysKKysJZnJlZShzdG9yZS5maWxlbmFtZSk7CisrCWZyZWUo c3RvcmUuZW52dmFyKTsKKysJZnJlZShzdG9yZS5lbnZ2YWwpOworKworKwlzc2hidWZfcmVzZXQo bSk7CisrCWlmICgociA9IHNzaGJ1Zl9wdXRfdTMyKG0sIG9rKSkgIT0gMCkKKysJCWZhdGFsX2Zy KHIsICJidWZmZXIgZXJyb3IiKTsKKysKKysJbW1fcmVxdWVzdF9zZW5kKHNvY2tldCwgTU9OSVRP Ul9BTlNfR1NTVVBDUkVEUywgbSk7CisrCisrCXJldHVybigwKTsKKyt9CisrCisgI2VuZGlmIC8q IEdTU0FQSSAqLworIAorZGlmZiAtLWdpdCBhL21vbml0b3IuaCBiL21vbml0b3IuaAoraW5kZXgg MWI0NmU3OTRlLi43NWEwZDYxODEgMTAwNjQ0CistLS0gYS9tb25pdG9yLmgKKysrKyBiL21vbml0 b3IuaAorQEAgLTY5LDYgKzY5LDggQEAgZW51bSBtb25pdG9yX3JlcXR5cGUgeworIAlNT05JVE9S X1JFUV9QQU1fRlJFRV9DVFggPSAxMTAsIE1PTklUT1JfQU5TX1BBTV9GUkVFX0NUWCA9IDExMSwK KyAJTU9OSVRPUl9SRVFfQVVESVRfRVZFTlQgPSAxMTIsIE1PTklUT1JfUkVRX0FVRElUX0NPTU1B TkQgPSAxMTMsCisgCisrCU1PTklUT1JfUkVRX0dTU1NJR04gPSAxNTAsIE1PTklUT1JfQU5TX0dT U1NJR04gPSAxNTEsCisrCU1PTklUT1JfUkVRX0dTU1VQQ1JFRFMgPSAxNTIsIE1PTklUT1JfQU5T X0dTU1VQQ1JFRFMgPSAxNTMsCisgfTsKKyAKKyBzdHJ1Y3Qgc3NoOworZGlmZiAtLWdpdCBhL21v bml0b3Jfd3JhcC5jIGIvbW9uaXRvcl93cmFwLmMKK2luZGV4IGYzYzM0MWJjNy4uNDk2ZGU0MzZl IDEwMDY0NAorLS0tIGEvbW9uaXRvcl93cmFwLmMKKysrKyBiL21vbml0b3Jfd3JhcC5jCitAQCAt MTE2MiwxMyArMTE2MiwxNSBAQCBtbV9zc2hfZ3NzYXBpX2NoZWNrbWljKEdzc2N0eHQgKmN0eCwg Z3NzX2J1ZmZlcl90IGdzc2J1ZiwgZ3NzX2J1ZmZlcl90IGdzc21pYykKKyB9CisgCisgaW50Cist bW1fc3NoX2dzc2FwaV91c2Vyb2soY2hhciAqdXNlcikKKyttbV9zc2hfZ3NzYXBpX3VzZXJvayhj aGFyICp1c2VyLCBzdHJ1Y3QgcGFzc3dkICpwdywgaW50IGtleCkKKyB7CisgCXN0cnVjdCBzc2hi dWYgKm07CisgCWludCByLCBhdXRoZW50aWNhdGVkID0gMDsKKyAKKyAJaWYgKChtID0gc3NoYnVm X25ldygpKSA9PSBOVUxMKQorIAkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKKysJaWYg KChyID0gc3NoYnVmX3B1dF91MzIobSwga2V4KSkgIT0gMCkKKysJCWZhdGFsX2ZyKHIsICJidWZm ZXIgZXJyb3IiKTsKKyAKKyAJbW1fcmVxdWVzdF9zZW5kKHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9O SVRPUl9SRVFfR1NTVVNFUk9LLCBtKTsKKyAJbW1fcmVxdWVzdF9yZWNlaXZlX2V4cGVjdChwbW9u aXRvci0+bV9yZWN2ZmQsCitAQCAtMTE4MSw2ICsxMTgzLDU5IEBAIG1tX3NzaF9nc3NhcGlfdXNl cm9rKGNoYXIgKnVzZXIpCisgCWRlYnVnM19mKCJ1c2VyICVzYXV0aGVudGljYXRlZCIsIGF1dGhl bnRpY2F0ZWQgPyAiIiA6ICJub3QgIik7CisgCXJldHVybiAoYXV0aGVudGljYXRlZCk7CisgfQor KworK09NX3VpbnQzMgorK21tX3NzaF9nc3NhcGlfc2lnbihHc3NjdHh0ICpjdHgsIGdzc19idWZm ZXJfZGVzYyAqZGF0YSwgZ3NzX2J1ZmZlcl9kZXNjICpoYXNoKQorK3sKKysJc3RydWN0IHNzaGJ1 ZiAqbTsKKysJT01fdWludDMyIG1ham9yOworKwlpbnQgcjsKKysKKysJaWYgKChtID0gc3NoYnVm X25ldygpKSA9PSBOVUxMKQorKwkJZmF0YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKKysJaWYg KChyID0gc3NoYnVmX3B1dF9zdHJpbmcobSwgZGF0YS0+dmFsdWUsIGRhdGEtPmxlbmd0aCkpICE9 IDApCisrCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCisrCW1tX3JlcXVlc3Rfc2Vu ZChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfUkVRX0dTU1NJR04sIG0pOworKwltbV9yZXF1 ZXN0X3JlY2VpdmVfZXhwZWN0KHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9BTlNfR1NTU0lH TiwgbSk7CisrCisrCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZtYWpvcikpICE9IDAgfHwK KysJICAgIChyID0gc3NoX2dzc2FwaV9nZXRfYnVmZmVyX2Rlc2MobSwgaGFzaCkpICE9IDApCisr CQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCisrCXNzaGJ1Zl9mcmVlKG0pOworKwor KwlyZXR1cm4gKG1ham9yKTsKKyt9CisrCisraW50CisrbW1fc3NoX2dzc2FwaV91cGRhdGVfY3Jl ZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlKQorK3sKKysJc3RydWN0IHNzaGJ1ZiAqbTsKKysJ aW50IHIsIG9rOworKworKwlpZiAoKG0gPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisrCQlmYXRh bF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOworKworKwlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJp bmcobSwKKysJICAgIHN0b3JlLT5maWxlbmFtZSA/IHN0b3JlLT5maWxlbmFtZSA6ICIiKSkgIT0g MCB8fAorKwkgICAgKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwKKysJICAgIHN0b3JlLT5lbnZ2 YXIgPyBzdG9yZS0+ZW52dmFyIDogIiIpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaGJ1Zl9wdXRf Y3N0cmluZyhtLAorKwkgICAgc3RvcmUtPmVudnZhbCA/IHN0b3JlLT5lbnZ2YWwgOiAiIikpICE9 IDApCisrCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCisrCW1tX3JlcXVlc3Rfc2Vu ZChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfUkVRX0dTU1VQQ1JFRFMsIG0pOworKwltbV9y ZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9OSVRPUl9BTlNfR1NT VVBDUkVEUywgbSk7CisrCisrCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZvaykpICE9IDAp CisrCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCisrCXNzaGJ1Zl9mcmVlKG0pOwor KworKwlyZXR1cm4gKG9rKTsKKyt9CisrCisgI2VuZGlmIC8qIEdTU0FQSSAqLworIAorIC8qCitk aWZmIC0tZ2l0IGEvbW9uaXRvcl93cmFwLmggYi9tb25pdG9yX3dyYXAuaAoraW5kZXggM2UwOGRk ZDc4Li5hNzA4YmY0ZDggMTAwNjQ0CistLS0gYS9tb25pdG9yX3dyYXAuaAorKysrIGIvbW9uaXRv cl93cmFwLmgKK0BAIC03Miw4ICs3MiwxMCBAQCB2b2lkIG1tX2RlY29kZV9hY3RpdmF0ZV9zZXJ2 ZXJfb3B0aW9ucyhzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2hidWYgKm0pOworIE9NX3VpbnQz MiBtbV9zc2hfZ3NzYXBpX3NlcnZlcl9jdHgoR3NzY3R4dCAqKiwgZ3NzX09JRCk7CisgT01fdWlu dDMyIG1tX3NzaF9nc3NhcGlfYWNjZXB0X2N0eChHc3NjdHh0ICosCisgICAgZ3NzX2J1ZmZlcl9k ZXNjICosIGdzc19idWZmZXJfZGVzYyAqLCBPTV91aW50MzIgKik7CistaW50IG1tX3NzaF9nc3Nh cGlfdXNlcm9rKGNoYXIgKnVzZXIpOworK2ludCBtbV9zc2hfZ3NzYXBpX3VzZXJvayhjaGFyICp1 c2VyLCBzdHJ1Y3QgcGFzc3dkICosIGludCBrZXgpOworIE9NX3VpbnQzMiBtbV9zc2hfZ3NzYXBp X2NoZWNrbWljKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOworK09NX3Vp bnQzMiBtbV9zc2hfZ3NzYXBpX3NpZ24oR3NzY3R4dCAqLCBnc3NfYnVmZmVyX3QsIGdzc19idWZm ZXJfdCk7CisraW50IG1tX3NzaF9nc3NhcGlfdXBkYXRlX2NyZWRzKHNzaF9nc3NhcGlfY2NhY2hl ICopOworICNlbmRpZgorIAorICNpZmRlZiBVU0VfUEFNCitkaWZmIC0tZ2l0IGEvcmVhZGNvbmYu YyBiL3JlYWRjb25mLmMKK2luZGV4IDEwY2JkMDRiYS4uOTAwNDA3NmU0IDEwMDY0NAorLS0tIGEv cmVhZGNvbmYuYworKysrIGIvcmVhZGNvbmYuYworQEAgLTU3LDYgKzU3LDcgQEAKKyAjaW5jbHVk ZSAibXlwcm9wb3NhbC5oIgorICNpbmNsdWRlICJkaWdlc3QuaCIKKyAjaW5jbHVkZSAidmVyc2lv bi5oIgorKyNpbmNsdWRlICJzc2gtZ3NzLmgiCisgCisgLyogRm9ybWF0IG9mIHRoZSBjb25maWd1 cmF0aW9uIGZpbGU6CisgCitAQCAtMTUxLDYgKzE1Miw4IEBAIHR5cGVkZWYgZW51bSB7CisgCW9D bGVhckFsbEZvcndhcmRpbmdzLCBvTm9Ib3N0QXV0aGVudGljYXRpb25Gb3JMb2NhbGhvc3QsCisg CW9FbmFibGVTU0hLZXlzaWduLCBvUmVrZXlMaW1pdCwgb1ZlcmlmeUhvc3RLZXlETlMsIG9Db25u ZWN0VGltZW91dCwKKyAJb0FkZHJlc3NGYW1pbHksIG9Hc3NBdXRoZW50aWNhdGlvbiwgb0dzc0Rl bGVnYXRlQ3JlZHMsCisrCW9Hc3NUcnVzdERucywgb0dzc0tleUV4LCBvR3NzQ2xpZW50SWRlbnRp dHksIG9Hc3NSZW5ld2FsUmVrZXksCisrCW9Hc3NTZXJ2ZXJJZGVudGl0eSwgb0dzc0tleEFsZ29y aXRobXMsCisgCW9TZXJ2ZXJBbGl2ZUludGVydmFsLCBvU2VydmVyQWxpdmVDb3VudE1heCwgb0lk ZW50aXRpZXNPbmx5LAorIAlvU2VuZEVudiwgb1NldEVudiwgb0NvbnRyb2xQYXRoLCBvQ29udHJv bE1hc3Rlciwgb0NvbnRyb2xQZXJzaXN0LAorIAlvSGFzaEtub3duSG9zdHMsCitAQCAtMTk4LDEw ICsyMDEsMjIgQEAgc3RhdGljIHN0cnVjdCB7CisgCS8qIFNvbWV0aW1lcy11bnN1cHBvcnRlZCBv cHRpb25zICovCisgI2lmIGRlZmluZWQoR1NTQVBJKQorIAl7ICJnc3NhcGlhdXRoZW50aWNhdGlv biIsIG9Hc3NBdXRoZW50aWNhdGlvbiB9LAorKwl7ICJnc3NhcGlrZXlleGNoYW5nZSIsIG9Hc3NL ZXlFeCB9LAorIAl7ICJnc3NhcGlkZWxlZ2F0ZWNyZWRlbnRpYWxzIiwgb0dzc0RlbGVnYXRlQ3Jl ZHMgfSwKKysJeyAiZ3NzYXBpdHJ1c3RkbnMiLCBvR3NzVHJ1c3REbnMgfSwKKysJeyAiZ3NzYXBp Y2xpZW50aWRlbnRpdHkiLCBvR3NzQ2xpZW50SWRlbnRpdHkgfSwKKysJeyAiZ3NzYXBpc2VydmVy aWRlbnRpdHkiLCBvR3NzU2VydmVySWRlbnRpdHkgfSwKKysJeyAiZ3NzYXBpcmVuZXdhbGZvcmNl c3Jla2V5Iiwgb0dzc1JlbmV3YWxSZWtleSB9LAorKwl7ICJnc3NhcGlrZXhhbGdvcml0aG1zIiwg b0dzc0tleEFsZ29yaXRobXMgfSwKKyAjIGVsc2UKKyAJeyAiZ3NzYXBpYXV0aGVudGljYXRpb24i LCBvVW5zdXBwb3J0ZWQgfSwKKysJeyAiZ3NzYXBpa2V5ZXhjaGFuZ2UiLCBvVW5zdXBwb3J0ZWQg fSwKKyAJeyAiZ3NzYXBpZGVsZWdhdGVjcmVkZW50aWFscyIsIG9VbnN1cHBvcnRlZCB9LAorKwl7 ICJnc3NhcGl0cnVzdGRucyIsIG9VbnN1cHBvcnRlZCB9LAorKwl7ICJnc3NhcGljbGllbnRpZGVu dGl0eSIsIG9VbnN1cHBvcnRlZCB9LAorKwl7ICJnc3NhcGlzZXJ2ZXJpZGVudGl0eSIsIG9VbnN1 cHBvcnRlZCB9LAorKwl7ICJnc3NhcGlyZW5ld2FsZm9yY2VzcmVrZXkiLCBvVW5zdXBwb3J0ZWQg fSwKKysJeyAiZ3NzYXBpa2V4YWxnb3JpdGhtcyIsIG9VbnN1cHBvcnRlZCB9LAorICNlbmRpZgor ICNpZmRlZiBFTkFCTEVfUEtDUzExCisgCXsgInBrY3MxMXByb3ZpZGVyIiwgb1BLQ1MxMVByb3Zp ZGVyIH0sCitAQCAtMTMxOSwxMCArMTMzNCw0MiBAQCBwYXJzZV90aW1lOgorIAkJaW50cHRyID0g Jm9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbjsKKyAJCWdvdG8gcGFyc2VfZmxhZzsKKyAKKysJ Y2FzZSBvR3NzS2V5RXg6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2tleWV4OworKwkJZ290 byBwYXJzZV9mbGFnOworKworIAljYXNlIG9Hc3NEZWxlZ2F0ZUNyZWRzOgorIAkJaW50cHRyID0g Jm9wdGlvbnMtPmdzc19kZWxlZ19jcmVkczsKKyAJCWdvdG8gcGFyc2VfZmxhZzsKKyAKKysJY2Fz ZSBvR3NzVHJ1c3REbnM6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX3RydXN0X2RuczsKKysJ CWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBvR3NzQ2xpZW50SWRlbnRpdHk6CisrCQljaGFy cHRyID0gJm9wdGlvbnMtPmdzc19jbGllbnRfaWRlbnRpdHk7CisrCQlnb3RvIHBhcnNlX3N0cmlu ZzsKKysKKysJY2FzZSBvR3NzU2VydmVySWRlbnRpdHk6CisrCQljaGFycHRyID0gJm9wdGlvbnMt Pmdzc19zZXJ2ZXJfaWRlbnRpdHk7CisrCQlnb3RvIHBhcnNlX3N0cmluZzsKKysKKysJY2FzZSBv R3NzUmVuZXdhbFJla2V5OgorKwkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19yZW5ld2FsX3Jla2V5 OworKwkJZ290byBwYXJzZV9mbGFnOworKworKwljYXNlIG9Hc3NLZXhBbGdvcml0aG1zOgorKwkJ YXJnID0gYXJndl9uZXh0KCZhYywgJmF2KTsKKysJCWlmICghYXJnIHx8ICphcmcgPT0gJ1wwJykK KysJCQlmYXRhbCgiJS4yMDBzIGxpbmUgJWQ6IE1pc3NpbmcgYXJndW1lbnQuIiwKKysJCQkgICAg ZmlsZW5hbWUsIGxpbmVudW0pOworKwkJaWYgKCFrZXhfZ3NzX25hbWVzX3ZhbGlkKGFyZykpCisr CQkJZmF0YWwoIiUuMjAwcyBsaW5lICVkOiBCYWQgR1NTQVBJIEtleEFsZ29yaXRobXMgJyVzJy4i LAorKwkJCSAgICBmaWxlbmFtZSwgbGluZW51bSwgYXJnID8gYXJnIDogIjxOT05FPiIpOworKwkJ aWYgKCphY3RpdmVwICYmIG9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9PSBOVUxMKQorKwkJ CW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IHhzdHJkdXAoYXJnKTsKKysJCWJyZWFrOwor KworIAljYXNlIG9CYXRjaE1vZGU6CisgCQlpbnRwdHIgPSAmb3B0aW9ucy0+YmF0Y2hfbW9kZTsK KyAJCWdvdG8gcGFyc2VfZmxhZzsKK0BAIC0yNzE4LDcgKzI3NjUsMTMgQEAgaW5pdGlhbGl6ZV9v cHRpb25zKE9wdGlvbnMgKiBvcHRpb25zKQorIAlvcHRpb25zLT5md2Rfb3B0cy5zdHJlYW1sb2Nh bF9iaW5kX3VubGluayA9IC0xOworIAlvcHRpb25zLT5wdWJrZXlfYXV0aGVudGljYXRpb24gPSAt MTsKKyAJb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID0gLTE7CisrCW9wdGlvbnMtPmdzc19r ZXlleCA9IC0xOworIAlvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPSAtMTsKKysJb3B0aW9ucy0+ Z3NzX3RydXN0X2RucyA9IC0xOworKwlvcHRpb25zLT5nc3NfcmVuZXdhbF9yZWtleSA9IC0xOwor KwlvcHRpb25zLT5nc3NfY2xpZW50X2lkZW50aXR5ID0gTlVMTDsKKysJb3B0aW9ucy0+Z3NzX3Nl cnZlcl9pZGVudGl0eSA9IE5VTEw7CisrCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IE5V TEw7CisgCW9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID0gLTE7CisgCW9wdGlvbnMt PmtiZF9pbnRlcmFjdGl2ZV9hdXRoZW50aWNhdGlvbiA9IC0xOworIAlvcHRpb25zLT5rYmRfaW50 ZXJhY3RpdmVfZGV2aWNlcyA9IE5VTEw7CitAQCAtMjg4NCw4ICsyOTM3LDE4IEBAIGZpbGxfZGVm YXVsdF9vcHRpb25zKE9wdGlvbnMgKiBvcHRpb25zKQorIAkJb3B0aW9ucy0+cHVia2V5X2F1dGhl bnRpY2F0aW9uID0gU1NIX1BVQktFWV9BVVRIX0FMTDsKKyAJaWYgKG9wdGlvbnMtPmdzc19hdXRo ZW50aWNhdGlvbiA9PSAtMSkKKyAJCW9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IDA7Cisr CWlmIChvcHRpb25zLT5nc3Nfa2V5ZXggPT0gLTEpCisrCQlvcHRpb25zLT5nc3Nfa2V5ZXggPSAw OworIAlpZiAob3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID09IC0xKQorIAkJb3B0aW9ucy0+Z3Nz X2RlbGVnX2NyZWRzID0gMDsKKysJaWYgKG9wdGlvbnMtPmdzc190cnVzdF9kbnMgPT0gLTEpCisr CQlvcHRpb25zLT5nc3NfdHJ1c3RfZG5zID0gMDsKKysJaWYgKG9wdGlvbnMtPmdzc19yZW5ld2Fs X3Jla2V5ID09IC0xKQorKwkJb3B0aW9ucy0+Z3NzX3JlbmV3YWxfcmVrZXkgPSAwOworKyNpZmRl ZiBHU1NBUEkKKysJaWYgKG9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9PSBOVUxMKQorKwkJ b3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID0gc3RyZHVwKEdTU19LRVhfREVGQVVMVF9LRVgp OworKyNlbmRpZgorIAlpZiAob3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPT0gLTEp CisgCQlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9IDE7CisgCWlmIChvcHRpb25z LT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPT0gLTEpCitAQCAtMzc2NSw3ICszODI4 LDE0IEBAIGR1bXBfY2xpZW50X2NvbmZpZyhPcHRpb25zICpvLCBjb25zdCBjaGFyICpob3N0KQor IAlkdW1wX2NmZ19mbXRpbnQob0dhdGV3YXlQb3J0cywgby0+ZndkX29wdHMuZ2F0ZXdheV9wb3J0 cyk7CisgI2lmZGVmIEdTU0FQSQorIAlkdW1wX2NmZ19mbXRpbnQob0dzc0F1dGhlbnRpY2F0aW9u LCBvLT5nc3NfYXV0aGVudGljYXRpb24pOworKwlkdW1wX2NmZ19mbXRpbnQob0dzc0tleUV4LCBv LT5nc3Nfa2V5ZXgpOworIAlkdW1wX2NmZ19mbXRpbnQob0dzc0RlbGVnYXRlQ3JlZHMsIG8tPmdz c19kZWxlZ19jcmVkcyk7CisrCWR1bXBfY2ZnX2ZtdGludChvR3NzVHJ1c3REbnMsIG8tPmdzc190 cnVzdF9kbnMpOworKwlkdW1wX2NmZ19mbXRpbnQob0dzc1JlbmV3YWxSZWtleSwgby0+Z3NzX3Jl bmV3YWxfcmVrZXkpOworKwlkdW1wX2NmZ19zdHJpbmcob0dzc0NsaWVudElkZW50aXR5LCBvLT5n c3NfY2xpZW50X2lkZW50aXR5KTsKKysJZHVtcF9jZmdfc3RyaW5nKG9Hc3NTZXJ2ZXJJZGVudGl0 eSwgby0+Z3NzX3NlcnZlcl9pZGVudGl0eSk7CisrCWR1bXBfY2ZnX3N0cmluZyhvR3NzS2V4QWxn b3JpdGhtcywgby0+Z3NzX2tleF9hbGdvcml0aG1zID8KKysJICAgIG8tPmdzc19rZXhfYWxnb3Jp dGhtcyA6IEdTU19LRVhfREVGQVVMVF9LRVgpOworICNlbmRpZiAvKiBHU1NBUEkgKi8KKyAJZHVt cF9jZmdfZm10aW50KG9IYXNoS25vd25Ib3N0cywgby0+aGFzaF9rbm93bl9ob3N0cyk7CisgCWR1 bXBfY2ZnX2ZtdGludChvSG9zdGJhc2VkQXV0aGVudGljYXRpb24sIG8tPmhvc3RiYXNlZF9hdXRo ZW50aWNhdGlvbik7CitkaWZmIC0tZ2l0IGEvcmVhZGNvbmYuaCBiL3JlYWRjb25mLmgKK2luZGV4 IGRiY2I0MTcyNS4uOGIwYzk4YWNmIDEwMDY0NAorLS0tIGEvcmVhZGNvbmYuaAorKysrIGIvcmVh ZGNvbmYuaAorQEAgLTM5LDcgKzM5LDEzIEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJaW50ICAgICBw dWJrZXlfYXV0aGVudGljYXRpb247CS8qIFRyeSBzc2gyIHB1YmtleSBhdXRoZW50aWNhdGlvbi4g Ki8KKyAJaW50ICAgICBob3N0YmFzZWRfYXV0aGVudGljYXRpb247CS8qIHNzaDIncyByaG9zdHNf cnNhICovCisgCWludCAgICAgZ3NzX2F1dGhlbnRpY2F0aW9uOwkvKiBUcnkgR1NTIGF1dGhlbnRp Y2F0aW9uICovCisrCWludCAgICAgZ3NzX2tleWV4OwkJLyogVHJ5IEdTUyBrZXkgZXhjaGFuZ2Ug Ki8KKyAJaW50ICAgICBnc3NfZGVsZWdfY3JlZHM7CS8qIERlbGVnYXRlIEdTUyBjcmVkZW50aWFs cyAqLworKwlpbnQJZ3NzX3RydXN0X2RuczsJCS8qIFRydXN0IEROUyBmb3IgR1NTIGNhbm9uaWNh bGl6YXRpb24gKi8KKysJaW50CWdzc19yZW5ld2FsX3Jla2V5OwkvKiBDcmVkZW50aWFsIHJlbmV3 YWwgZm9yY2VzIHJla2V5ICovCisrCWNoYXIgICAgKmdzc19jbGllbnRfaWRlbnRpdHk7ICAgLyog UHJpbmNpcGFsIHRvIGluaXRpYXRlIEdTU0FQSSB3aXRoICovCisrCWNoYXIgICAgKmdzc19zZXJ2 ZXJfaWRlbnRpdHk7ICAgLyogR1NTQVBJIHRhcmdldCBwcmluY2lwYWwgKi8KKysJY2hhciAgICAq Z3NzX2tleF9hbGdvcml0aG1zOwkvKiBHU1NBUEkga2V4IG1ldGhvZHMgdG8gYmUgb2ZmZXJlZCBi eSBjbGllbnQuICovCisgCWludCAgICAgcGFzc3dvcmRfYXV0aGVudGljYXRpb247CS8qIFRyeSBw YXNzd29yZAorIAkJCQkJCSAqIGF1dGhlbnRpY2F0aW9uLiAqLworIAlpbnQgICAgIGtiZF9pbnRl cmFjdGl2ZV9hdXRoZW50aWNhdGlvbjsgLyogVHJ5IGtleWJvYXJkLWludGVyYWN0aXZlIGF1dGgu ICovCitkaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMKK2luZGV4IDY2ODI1OWEy MC4uZGUzZmE5NDgxIDEwMDY0NAorLS0tIGEvc2VydmNvbmYuYworKysrIGIvc2VydmNvbmYuYwor QEAgLTYyLDYgKzYyLDcgQEAKKyAjaW5jbHVkZSAibXlwcm9wb3NhbC5oIgorICNpbmNsdWRlICJk aWdlc3QuaCIKKyAjaW5jbHVkZSAidmVyc2lvbi5oIgorKyNpbmNsdWRlICJzc2gtZ3NzLmgiCisg CisgI2lmICFkZWZpbmVkKFNTSERfUEFNX1NFUlZJQ0UpCisgIyBkZWZpbmUgU1NIRF9QQU1fU0VS VklDRQkJInNzaGQiCitAQCAtMTMxLDkgKzEzMiwxMiBAQCBpbml0aWFsaXplX3NlcnZlcl9vcHRp b25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCisgCW9wdGlvbnMtPmtlcmJlcm9zX3RpY2tldF9j bGVhbnVwID0gLTE7CisgCW9wdGlvbnMtPmtlcmJlcm9zX2dldF9hZnNfdG9rZW4gPSAtMTsKKyAJ b3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uPS0xOworKwlvcHRpb25zLT5nc3Nfa2V5ZXggPSAt MTsKKyAJb3B0aW9ucy0+Z3NzX2NsZWFudXBfY3JlZHMgPSAtMTsKKyAJb3B0aW9ucy0+Z3NzX2Rl bGVnX2NyZWRzID0gLTE7CisgCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAtMTsKKysJ b3B0aW9ucy0+Z3NzX3N0b3JlX3Jla2V5ID0gLTE7CisrCW9wdGlvbnMtPmdzc19rZXhfYWxnb3Jp dGhtcyA9IE5VTEw7CisgCW9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID0gLTE7Cisg CW9wdGlvbnMtPmtiZF9pbnRlcmFjdGl2ZV9hdXRoZW50aWNhdGlvbiA9IC0xOworIAlvcHRpb25z LT5wZXJtaXRfZW1wdHlfcGFzc3dkID0gLTE7CitAQCAtMzcyLDEyICszNzYsMjAgQEAgZmlsbF9k ZWZhdWx0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCisgCQlvcHRpb25z LT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuID0gMDsKKyAJaWYgKG9wdGlvbnMtPmdzc19hdXRoZW50 aWNhdGlvbiA9PSAtMSkKKyAJCW9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IDA7CisrCWlm IChvcHRpb25zLT5nc3Nfa2V5ZXggPT0gLTEpCisrCQlvcHRpb25zLT5nc3Nfa2V5ZXggPSAwOwor IAlpZiAob3B0aW9ucy0+Z3NzX2NsZWFudXBfY3JlZHMgPT0gLTEpCisgCQlvcHRpb25zLT5nc3Nf Y2xlYW51cF9jcmVkcyA9IDE7CisgCWlmIChvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPT0gLTEp CisgCQlvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPSAxOworIAlpZiAob3B0aW9ucy0+Z3NzX3N0 cmljdF9hY2NlcHRvciA9PSAtMSkKKyAJCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAx OworKwlpZiAob3B0aW9ucy0+Z3NzX3N0b3JlX3Jla2V5ID09IC0xKQorKwkJb3B0aW9ucy0+Z3Nz X3N0b3JlX3Jla2V5ID0gMDsKKysjaWZkZWYgR1NTQVBJCisrCWlmIChvcHRpb25zLT5nc3Nfa2V4 X2FsZ29yaXRobXMgPT0gTlVMTCkKKysJCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IHN0 cmR1cChHU1NfS0VYX0RFRkFVTFRfS0VYKTsKKysjZW5kaWYKKyAJaWYgKG9wdGlvbnMtPnBhc3N3 b3JkX2F1dGhlbnRpY2F0aW9uID09IC0xKQorIAkJb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGlj YXRpb24gPSAxOworIAlpZiAob3B0aW9ucy0+a2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9u ID09IC0xKQorQEAgLTU2NSw2ICs1NzcsNyBAQCB0eXBlZGVmIGVudW0geworIAlzUGVyU291cmNl UGVuYWx0aWVzLCBzUGVyU291cmNlUGVuYWx0eUV4ZW1wdExpc3QsCisgCXNDbGllbnRBbGl2ZUlu dGVydmFsLCBzQ2xpZW50QWxpdmVDb3VudE1heCwgc0F1dGhvcml6ZWRLZXlzRmlsZSwKKyAJc0dz c0F1dGhlbnRpY2F0aW9uLCBzR3NzQ2xlYW51cENyZWRzLCBzR3NzRGVsZWdhdGVDcmVkcywgc0dz c1N0cmljdEFjY2VwdG9yLAorKwlzR3NzS2V5RXgsIHNHc3NLZXhBbGdvcml0aG1zLCBzR3NzU3Rv cmVSZWtleSwKKyAJc0FjY2VwdEVudiwgc1NldEVudiwgc1Blcm1pdFR1bm5lbCwKKyAJc01hdGNo LCBzUGVybWl0T3Blbiwgc1Blcm1pdExpc3Rlbiwgc0ZvcmNlQ29tbWFuZCwgc0Nocm9vdERpcmVj dG9yeSwKKyAJc1VzZVByaXZpbGVnZVNlcGFyYXRpb24sIHNBbGxvd0FnZW50Rm9yd2FyZGluZywK K0BAIC02NTAsMTQgKzY2MywyNCBAQCBzdGF0aWMgc3RydWN0IHsKKyAjaWZkZWYgR1NTQVBJCisg CXsgImdzc2FwaWF1dGhlbnRpY2F0aW9uIiwgc0dzc0F1dGhlbnRpY2F0aW9uLCBTU0hDRkdfQUxM IH0sCisgCXsgImdzc2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNHc3NDbGVhbnVwQ3JlZHMsIFNT SENGR19HTE9CQUwgfSwKKysJeyAiZ3NzYXBpY2xlYW51cGNyZWRzIiwgc0dzc0NsZWFudXBDcmVk cywgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJnc3NhcGlkZWxlZ2F0ZWNyZWRlbnRpYWxzIiwgc0dz c0RlbGVnYXRlQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiZ3NzYXBpc3RyaWN0YWNjZXB0 b3JjaGVjayIsIHNHc3NTdHJpY3RBY2NlcHRvciwgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7ICJnc3Nh cGlrZXlleGNoYW5nZSIsIHNHc3NLZXlFeCwgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7ICJnc3NhcGlz dG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNHc3NTdG9yZVJla2V5LCBTU0hDRkdfR0xPQkFMIH0s CisrCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzR3NzS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dM T0JBTCB9LAorICNlbHNlCisgCXsgImdzc2FwaWF1dGhlbnRpY2F0aW9uIiwgc1Vuc3VwcG9ydGVk LCBTU0hDRkdfQUxMIH0sCisgCXsgImdzc2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNVbnN1cHBv cnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7ICJnc3NhcGljbGVhbnVwY3JlZHMiLCBzVW5zdXBw b3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiZ3NzYXBpZGVsZWdhdGVjcmVkZW50aWFscyIs IHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJnc3NhcGlzdHJpY3RhY2NlcHRv cmNoZWNrIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisrCXsgImdzc2FwaWtleWV4 Y2hhbmdlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisrCXsgImdzc2FwaXN0b3Jl Y3JlZGVudGlhbHNvbnJla2V5Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisrCXsg Imdzc2FwaWtleGFsZ29yaXRobXMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAj ZW5kaWYKKysJeyAiZ3NzdXNlc2Vzc2lvbmNjYWNoZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dM T0JBTCB9LAorKwl7ICJnc3NhcGl1c2VzZXNzaW9uY3JlZGNhY2hlIiwgc1Vuc3VwcG9ydGVkLCBT U0hDRkdfR0xPQkFMIH0sCisgCXsgInBhc3N3b3JkYXV0aGVudGljYXRpb24iLCBzUGFzc3dvcmRB dXRoZW50aWNhdGlvbiwgU1NIQ0ZHX0FMTCB9LAorIAl7ICJrYmRpbnRlcmFjdGl2ZWF1dGhlbnRp Y2F0aW9uIiwgc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24sIFNTSENGR19BTEwgfSwKKyAJ eyAiY2hhbGxlbmdlcmVzcG9uc2VhdXRoZW50aWNhdGlvbiIsIHNLYmRJbnRlcmFjdGl2ZUF1dGhl bnRpY2F0aW9uLCBTU0hDRkdfQUxMIH0sIC8qIGFsaWFzICovCitAQCAtMTY1MCw2ICsxNjczLDEw IEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlv bnMsIGNoYXIgKmxpbmUsCisgCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9u OworIAkJZ290byBwYXJzZV9mbGFnOworIAorKwljYXNlIHNHc3NLZXlFeDoKKysJCWludHB0ciA9 ICZvcHRpb25zLT5nc3Nfa2V5ZXg7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisgCWNhc2Ugc0dz c0NsZWFudXBDcmVkczoKKyAJCWludHB0ciA9ICZvcHRpb25zLT5nc3NfY2xlYW51cF9jcmVkczsK KyAJCWdvdG8gcGFyc2VfZmxhZzsKK0BAIC0xNjYyLDYgKzE2ODksMjIgQEAgcHJvY2Vzc19zZXJ2 ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwK KyAJCWludHB0ciA9ICZvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2VwdG9yOworIAkJZ290byBwYXJz ZV9mbGFnOworIAorKwljYXNlIHNHc3NTdG9yZVJla2V5OgorKwkJaW50cHRyID0gJm9wdGlvbnMt Pmdzc19zdG9yZV9yZWtleTsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBzR3NzS2V4 QWxnb3JpdGhtczoKKysJCWFyZyA9IGFyZ3ZfbmV4dCgmYWMsICZhdik7CisrCQlpZiAoIWFyZyB8 fCAqYXJnID09ICdcMCcpCisrCQkJZmF0YWwoIiUuMjAwcyBsaW5lICVkOiBNaXNzaW5nIGFyZ3Vt ZW50LiIsCisrCQkJICAgIGZpbGVuYW1lLCBsaW5lbnVtKTsKKysJCWlmICgha2V4X2dzc19uYW1l c192YWxpZChhcmcpKQorKwkJCWZhdGFsKCIlLjIwMHMgbGluZSAlZDogQmFkIEdTU0FQSSBLZXhB bGdvcml0aG1zICclcycuIiwKKysJCQkgICAgZmlsZW5hbWUsIGxpbmVudW0sIGFyZyA/IGFyZyA6 ICI8Tk9ORT4iKTsKKysJCWlmICgqYWN0aXZlcCAmJiBvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRo bXMgPT0gTlVMTCkKKysJCQlvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSB4c3RyZHVwKGFy Zyk7CisrCQlicmVhazsKKysKKyAJY2FzZSBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbjoKKyAJCWlu dHB0ciA9ICZvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbjsKKyAJCWdvdG8gcGFyc2Vf ZmxhZzsKK0BAIC0zMjkxLDcgKzMzMzQsMTAgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAq bykKKyAJZHVtcF9jZmdfZm10aW50KHNHc3NBdXRoZW50aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRp Y2F0aW9uKTsKKyAJZHVtcF9jZmdfZm10aW50KHNHc3NDbGVhbnVwQ3JlZHMsIG8tPmdzc19jbGVh bnVwX2NyZWRzKTsKKyAJZHVtcF9jZmdfZm10aW50KHNHc3NEZWxlZ2F0ZUNyZWRzLCBvLT5nc3Nf ZGVsZWdfY3JlZHMpOworKwlkdW1wX2NmZ19mbXRpbnQoc0dzc0tleUV4LCBvLT5nc3Nfa2V5ZXgp OworIAlkdW1wX2NmZ19mbXRpbnQoc0dzc1N0cmljdEFjY2VwdG9yLCBvLT5nc3Nfc3RyaWN0X2Fj Y2VwdG9yKTsKKysJZHVtcF9jZmdfZm10aW50KHNHc3NTdG9yZVJla2V5LCBvLT5nc3Nfc3RvcmVf cmVrZXkpOworKwlkdW1wX2NmZ19zdHJpbmcoc0dzc0tleEFsZ29yaXRobXMsIG8tPmdzc19rZXhf YWxnb3JpdGhtcyk7CisgI2VuZGlmCisgCWR1bXBfY2ZnX2ZtdGludChzUGFzc3dvcmRBdXRoZW50 aWNhdGlvbiwgby0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24pOworIAlkdW1wX2NmZ19mbXRpbnQo c0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24sCitkaWZmIC0tZ2l0IGEvc2VydmNvbmYuaCBi L3NlcnZjb25mLmgKK2luZGV4IGIwNmRiMDllMS4uNzY2NDFkNTgwIDEwMDY0NAorLS0tIGEvc2Vy dmNvbmYuaAorKysrIGIvc2VydmNvbmYuaAorQEAgLTE1MSw5ICsxNTEsMTIgQEAgdHlwZWRlZiBz dHJ1Y3QgeworIAlpbnQgICAgIGtlcmJlcm9zX2dldF9hZnNfdG9rZW47CQkvKiBJZiB0cnVlLCB0 cnkgdG8gZ2V0IEFGUyB0b2tlbiBpZgorIAkJCQkJCSAqIGF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJi ZXJvcy4gKi8KKyAJaW50ICAgICBnc3NfYXV0aGVudGljYXRpb247CS8qIElmIHRydWUsIHBlcm1p dCBHU1NBUEkgYXV0aGVudGljYXRpb24gKi8KKysJaW50ICAgICBnc3Nfa2V5ZXg7CQkvKiBJZiB0 cnVlLCBwZXJtaXQgR1NTQVBJIGtleSBleGNoYW5nZSAqLworIAlpbnQgICAgIGdzc19jbGVhbnVw X2NyZWRzOwkvKiBJZiB0cnVlLCBkZXN0cm95IGNyZWQgY2FjaGUgb24gbG9nb3V0ICovCisgCWlu dCAgICAgZ3NzX2RlbGVnX2NyZWRzOwkvKiBJZiB0cnVlLCBhY2NlcHQgZGVsZWdhdGVkIEdTUyBj cmVkZW50aWFscyAqLworIAlpbnQgICAgIGdzc19zdHJpY3RfYWNjZXB0b3I7CS8qIElmIHRydWUs IHJlc3RyaWN0IHRoZSBHU1NBUEkgYWNjZXB0b3IgbmFtZSAqLworKwlpbnQgCWdzc19zdG9yZV9y ZWtleTsKKysJY2hhciAgICpnc3Nfa2V4X2FsZ29yaXRobXM7CS8qIEdTU0FQSSBrZXggbWV0aG9k cyB0byBiZSBvZmZlcmVkIGJ5IGNsaWVudC4gKi8KKyAJaW50ICAgICBwYXNzd29yZF9hdXRoZW50 aWNhdGlvbjsJLyogSWYgdHJ1ZSwgcGVybWl0IHBhc3N3b3JkCisgCQkJCQkJICogYXV0aGVudGlj YXRpb24uICovCisgCWludCAgICAga2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uOwkvKiBJ ZiB0cnVlLCBwZXJtaXQgKi8KK2RpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9zZXNzaW9uLmMKK2lu ZGV4IDkzZGUzNWQ3Yy4uZjE0ZDVmYWI4IDEwMDY0NAorLS0tIGEvc2Vzc2lvbi5jCisrKysgYi9z ZXNzaW9uLmMKK0BAIC0yNjM4LDEzICsyNjM4LDE5IEBAIGRvX2NsZWFudXAoc3RydWN0IHNzaCAq c3NoLCBBdXRoY3R4dCAqYXV0aGN0eHQpCisgCisgI2lmZGVmIEtSQjUKKyAJaWYgKG9wdGlvbnMu a2VyYmVyb3NfdGlja2V0X2NsZWFudXAgJiYKKy0JICAgIGF1dGhjdHh0LT5rcmI1X2N0eCkKKysJ ICAgIGF1dGhjdHh0LT5rcmI1X2N0eCkgeworKwkJdGVtcG9yYXJpbHlfdXNlX3VpZChhdXRoY3R4 dC0+cHcpOworIAkJa3JiNV9jbGVhbnVwX3Byb2MoYXV0aGN0eHQpOworKwkJcmVzdG9yZV91aWQo KTsKKysJfQorICNlbmRpZgorIAorICNpZmRlZiBHU1NBUEkKKy0JaWYgKG9wdGlvbnMuZ3NzX2Ns ZWFudXBfY3JlZHMpCisrCWlmIChvcHRpb25zLmdzc19jbGVhbnVwX2NyZWRzKSB7CisrCQl0ZW1w b3JhcmlseV91c2VfdWlkKGF1dGhjdHh0LT5wdyk7CisgCQlzc2hfZ3NzYXBpX2NsZWFudXBfY3Jl ZHMoKTsKKysJCXJlc3RvcmVfdWlkKCk7CisrCX0KKyAjZW5kaWYKKyAKKyAJLyogcmVtb3ZlIGFn ZW50IHNvY2tldCAqLworZGlmZiAtLWdpdCBhL3NzaC1nc3MuaCBiL3NzaC1nc3MuaAoraW5kZXgg N2IxNGU3NGE4Li44ZWM0NTE5MjYgMTAwNjQ0CistLS0gYS9zc2gtZ3NzLmgKKysrKyBiL3NzaC1n c3MuaAorQEAgLTYxLDEwICs2MSwzNiBAQAorIAorICNkZWZpbmUgU1NIX0dTU19PSURUWVBFIDB4 MDYKKyAKKysjZGVmaW5lIFNTSDJfTVNHX0tFWEdTU19JTklUICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDMwCisrI2RlZmluZSBTU0gyX01TR19LRVhHU1NfQ09OVElOVUUgICAgICAgICAgICAg ICAgICAgICAgICAzMQorKyNkZWZpbmUgU1NIMl9NU0dfS0VYR1NTX0NPTVBMRVRFICAgICAgICAg ICAgICAgICAgICAgICAgMzIKKysjZGVmaW5lIFNTSDJfTVNHX0tFWEdTU19IT1NUS0VZICAgICAg ICAgICAgICAgICAgICAgICAgIDMzCisrI2RlZmluZSBTU0gyX01TR19LRVhHU1NfRVJST1IgICAg ICAgICAgICAgICAgICAgICAgICAgICAzNAorKyNkZWZpbmUgU1NIMl9NU0dfS0VYR1NTX0dST1VQ UkVRCQkJNDAKKysjZGVmaW5lIFNTSDJfTVNHX0tFWEdTU19HUk9VUAkJCQk0MQorKyNkZWZpbmUg S0VYX0dTU19HUlAxX1NIQTFfSUQJCQkJImdzcy1ncm91cDEtc2hhMS0iCisrI2RlZmluZSBLRVhf R1NTX0dSUDE0X1NIQTFfSUQJCQkJImdzcy1ncm91cDE0LXNoYTEtIgorKyNkZWZpbmUgS0VYX0dT U19HUlAxNF9TSEEyNTZfSUQJCQkiZ3NzLWdyb3VwMTQtc2hhMjU2LSIKKysjZGVmaW5lIEtFWF9H U1NfR1JQMTZfU0hBNTEyX0lECQkJImdzcy1ncm91cDE2LXNoYTUxMi0iCisrI2RlZmluZSBLRVhf R1NTX0dFWF9TSEExX0lECQkJCSJnc3MtZ2V4LXNoYTEtIgorKyNkZWZpbmUgS0VYX0dTU19OSVNU UDI1Nl9TSEEyNTZfSUQJCQkiZ3NzLW5pc3RwMjU2LXNoYTI1Ni0iCisrI2RlZmluZSBLRVhfR1NT X0MyNTUxOV9TSEEyNTZfSUQJCQkiZ3NzLWN1cnZlMjU1MTktc2hhMjU2LSIKKysKKysjZGVmaW5l ICAgICAgICBHU1NfS0VYX0RFRkFVTFRfS0VYIFwKKysJS0VYX0dTU19HUlAxNF9TSEEyNTZfSUQg IiwiIFwKKysJS0VYX0dTU19HUlAxNl9TSEE1MTJfSUQJIiwiIFwKKysJS0VYX0dTU19OSVNUUDI1 Nl9TSEEyNTZfSUQgIiwiIFwKKysJS0VYX0dTU19DMjU1MTlfU0hBMjU2X0lEICIsIiBcCisrCUtF WF9HU1NfR1JQMTRfU0hBMV9JRCAiLCIgXAorKwlLRVhfR1NTX0dFWF9TSEExX0lECisrCisrI2lu Y2x1ZGUgImRpZ2VzdC5oIiAvKiBTU0hfRElHRVNUX01BWF9MRU5HVEggKi8KKysKKyB0eXBlZGVm IHN0cnVjdCB7CisgCWNoYXIgKmZpbGVuYW1lOworIAljaGFyICplbnZ2YXI7CisgCWNoYXIgKmVu dnZhbDsKKysJc3RydWN0IHBhc3N3ZCAqb3duZXI7CisgCXZvaWQgKmRhdGE7CisgfSBzc2hfZ3Nz YXBpX2NjYWNoZTsKKyAKK0BAIC03Miw4ICs5OCwxMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCWdz c19idWZmZXJfZGVzYyBkaXNwbGF5bmFtZTsKKyAJZ3NzX2J1ZmZlcl9kZXNjIGV4cG9ydGVkbmFt ZTsKKyAJZ3NzX2NyZWRfaWRfdCBjcmVkczsKKysJZ3NzX25hbWVfdCBuYW1lOworIAlzdHJ1Y3Qg c3NoX2dzc2FwaV9tZWNoX3N0cnVjdCAqbWVjaDsKKyAJc3NoX2dzc2FwaV9jY2FjaGUgc3RvcmU7 CisrCWludCB1c2VkOworKwlpbnQgdXBkYXRlZDsKKyB9IHNzaF9nc3NhcGlfY2xpZW50OworIAor IHR5cGVkZWYgc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9zdHJ1Y3QgeworQEAgLTg0LDYgKzExMyw3 IEBAIHR5cGVkZWYgc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9zdHJ1Y3QgeworIAlpbnQgKCp1c2Vy b2spIChzc2hfZ3NzYXBpX2NsaWVudCAqLCBjaGFyICopOworIAlpbnQgKCpsb2NhbG5hbWUpIChz c2hfZ3NzYXBpX2NsaWVudCAqLCBjaGFyICoqKTsKKyAJdm9pZCAoKnN0b3JlY3JlZHMpIChzc2hf Z3NzYXBpX2NsaWVudCAqKTsKKysJaW50ICgqdXBkYXRlY3JlZHMpIChzc2hfZ3NzYXBpX2NjYWNo ZSAqLCBzc2hfZ3NzYXBpX2NsaWVudCAqKTsKKyB9IHNzaF9nc3NhcGlfbWVjaDsKKyAKKyB0eXBl ZGVmIHN0cnVjdCB7CitAQCAtOTQsMTAgKzEyNCwyMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCWdz c19PSUQJCW9pZDsgLyogY2xpZW50ICovCisgCWdzc19jcmVkX2lkX3QJY3JlZHM7IC8qIHNlcnZl ciAqLworIAlnc3NfbmFtZV90CWNsaWVudDsgLyogc2VydmVyICovCistCWdzc19jcmVkX2lkX3QJ Y2xpZW50X2NyZWRzOyAvKiBzZXJ2ZXIgKi8KKysJZ3NzX2NyZWRfaWRfdAljbGllbnRfY3JlZHM7 IC8qIGJvdGggKi8KKysJc3RydWN0IHNzaGJ1ZiAqc2hhcmVkX3NlY3JldDsgLyogYm90aCAqLwor KwlzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfcHVia2V5OyAvKiBzZXJ2ZXIgKi8KKysJc3RydWN0IHNz aGJ1ZiAqc2VydmVyX2Jsb2I7IC8qIGNsaWVudCAqLworKwlzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJf aG9zdF9rZXlfYmxvYjsgLyogY2xpZW50ICovCisrCWdzc19idWZmZXJfZGVzYyBtc2dfdG9rOyAv KiBjbGllbnQgKi8KKysJZ3NzX2J1ZmZlcl9kZXNjIGJ1ZjsgLyogYm90aCAqLworKwl1X2NoYXIg aGFzaFtTU0hfRElHRVNUX01BWF9MRU5HVEhdOyAvKiBib3RoICovCisrCXNpemVfdCBoYXNobGVu OyAvKiBib3RoICovCisrCWludCBmaXJzdDsgLyogY2xpZW50ICovCisrCUJJR05VTSAqZGhfY2xp ZW50X3B1YjsgLyogc2VydmVyIChnZXgpICovCisgfSBHc3NjdHh0OworIAorIGV4dGVybiBzc2hf Z3NzYXBpX21lY2ggKnN1cHBvcnRlZF9tZWNoc1tdOworK2V4dGVybiBHc3NjdHh0ICpnc3Nfa2V4 X2NvbnRleHQ7CisgCisgaW50ICBzc2hfZ3NzYXBpX2NoZWNrX29pZChHc3NjdHh0ICosIHZvaWQg Kiwgc2l6ZV90KTsKKyB2b2lkIHNzaF9nc3NhcGlfc2V0X29pZF9kYXRhKEdzc2N0eHQgKiwgdm9p ZCAqLCBzaXplX3QpOworQEAgLTEwOCw2ICsxNDksNyBAQCBPTV91aW50MzIgc3NoX2dzc2FwaV90 ZXN0X29pZF9zdXBwb3J0ZWQoT01fdWludDMyICosIGdzc19PSUQsIGludCAqKTsKKyAKKyBzdHJ1 Y3Qgc3NoYnVmOworIGludCBzc2hfZ3NzYXBpX2dldF9idWZmZXJfZGVzYyhzdHJ1Y3Qgc3NoYnVm ICosIGdzc19idWZmZXJfZGVzYyAqKTsKKytpbnQgc3NoX2dzc2FwaV9zc2hwa3RfZ2V0X2J1ZmZl cl9kZXNjKHN0cnVjdCBzc2ggKiwgZ3NzX2J1ZmZlcl9kZXNjICopOworIAorIE9NX3VpbnQzMiBz c2hfZ3NzYXBpX2ltcG9ydF9uYW1lKEdzc2N0eHQgKiwgY29uc3QgY2hhciAqKTsKKyBPTV91aW50 MzIgc3NoX2dzc2FwaV9pbml0X2N0eChHc3NjdHh0ICosIGludCwKK0BAIC0xMjIsMTcgKzE2NCwz MyBAQCB2b2lkIHNzaF9nc3NhcGlfZGVsZXRlX2N0eChHc3NjdHh0ICoqKTsKKyBPTV91aW50MzIg c3NoX2dzc2FwaV9zaWduKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOwor IHZvaWQgc3NoX2dzc2FwaV9idWlsZG1pYyhzdHJ1Y3Qgc3NoYnVmICosIGNvbnN0IGNoYXIgKiwK KyAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKik7 CistaW50IHNzaF9nc3NhcGlfY2hlY2tfbWVjaGFuaXNtKEdzc2N0eHQgKiosIGdzc19PSUQsIGNv bnN0IGNoYXIgKik7CisraW50IHNzaF9nc3NhcGlfY2hlY2tfbWVjaGFuaXNtKEdzc2N0eHQgKios IGdzc19PSUQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKytPTV91aW50MzIgc3NoX2dz c2FwaV9jbGllbnRfaWRlbnRpdHkoR3NzY3R4dCAqLCBjb25zdCBjaGFyICopOworK2ludCBzc2hf Z3NzYXBpX2NyZWRlbnRpYWxzX3VwZGF0ZWQoR3NzY3R4dCAqKTsKKyAKKyAvKiBJbiB0aGUgc2Vy dmVyICovCisrdHlwZWRlZiBpbnQgc3NoX2dzc2FwaV9jaGVja19mbihHc3NjdHh0ICoqLCBnc3Nf T0lELCBjb25zdCBjaGFyICosCisrICAgIGNvbnN0IGNoYXIgKik7CisrY2hhciAqc3NoX2dzc2Fw aV9jbGllbnRfbWVjaGFuaXNtcyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqKTsKKytjaGFyICpzc2hfZ3NzYXBpX2tleF9tZWNocyhnc3NfT0lEX3NldCwgc3NoX2dzc2Fw aV9jaGVja19mbiAqLCBjb25zdCBjaGFyICosCisrICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqKTsKKytnc3NfT0lEIHNzaF9nc3NhcGlfaWRfa2V4KEdzc2N0eHQgKiwgY2hhciAqLCBpbnQp OworK2ludCBzc2hfZ3NzYXBpX3NlcnZlcl9jaGVja19tZWNoKEdzc2N0eHQgKiosZ3NzX09JRCwg Y29uc3QgY2hhciAqLAorKyAgICBjb25zdCBjaGFyICopOworIE9NX3VpbnQzMiBzc2hfZ3NzYXBp X3NlcnZlcl9jdHgoR3NzY3R4dCAqKiwgZ3NzX09JRCk7CistaW50IHNzaF9nc3NhcGlfdXNlcm9r KGNoYXIgKm5hbWUpOworK2ludCBzc2hfZ3NzYXBpX3VzZXJvayhjaGFyICpuYW1lLCBzdHJ1Y3Qg cGFzc3dkICosIGludCBrZXgpOworIE9NX3VpbnQzMiBzc2hfZ3NzYXBpX2NoZWNrbWljKEdzc2N0 eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOworIHZvaWQgc3NoX2dzc2FwaV9kb19j aGlsZChjaGFyICoqKiwgdV9pbnQgKik7Cisgdm9pZCBzc2hfZ3NzYXBpX2NsZWFudXBfY3JlZHMo dm9pZCk7Cisgdm9pZCBzc2hfZ3NzYXBpX3N0b3JlY3JlZHModm9pZCk7CisgY29uc3QgY2hhciAq c3NoX2dzc2FwaV9kaXNwbGF5bmFtZSh2b2lkKTsKKyAKKytjaGFyICpzc2hfZ3NzYXBpX3NlcnZl cl9tZWNoYW5pc21zKHZvaWQpOworK2ludCBzc2hfZ3NzYXBpX29pZF90YWJsZV9vayh2b2lkKTsK KysKKytpbnQgc3NoX2dzc2FwaV91cGRhdGVfY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3Jl KTsKKyt2b2lkIHNzaF9nc3NhcGlfcmVrZXlfY3JlZHModm9pZCk7CisrCisgI2VuZGlmIC8qIEdT U0FQSSAqLworIAorICNlbmRpZiAvKiBfU1NIX0dTU19IICovCitkaWZmIC0tZ2l0IGEvc3NoLjEg Yi9zc2guMQoraW5kZXggYzJjOGY1MGYxLi5iNWQwYTFkMDkgMTAwNjQ0CistLS0gYS9zc2guMQor KysrIGIvc3NoLjEKK0BAIC01NDMsOSArNTQzLDE1IEBAIEZvciBmdWxsIGRldGFpbHMgb2YgdGhl IG9wdGlvbnMgbGlzdGVkIGJlbG93LCBhbmQgdGhlaXIgcG9zc2libGUgdmFsdWVzLCBzZWUKKyAu SXQgRm9yd2FyZFgxMVRpbWVvdXQKKyAuSXQgRm9yd2FyZFgxMVRydXN0ZWQKKyAuSXQgR1NTQVBJ QXV0aGVudGljYXRpb24KKysuSXQgR1NTQVBJS2V5RXhjaGFuZ2UKKysuSXQgR1NTQVBJQ2xpZW50 SWRlbnRpdHkKKyAuSXQgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscworIC5JdCBHYXRld2F5UG9y dHMKKyAuSXQgR2xvYmFsS25vd25Ib3N0c0ZpbGUKKysuSXQgR1NTQVBJS2V4QWxnb3JpdGhtcwor Ky5JdCBHU1NBUElSZW5ld2FsRm9yY2VzUmVrZXkKKysuSXQgR1NTQVBJU2VydmVySWRlbnRpdHkK KysuSXQgR1NTQVBJVHJ1c3REbnMKKyAuSXQgSGFzaEtub3duSG9zdHMKKyAuSXQgSG9zdAorIC5J dCBIb3N0S2V5QWxnb3JpdGhtcworQEAgLTY0MCw2ICs2NDYsOCBAQCBmbGFnKSwKKyAoc3VwcG9y dGVkIG1lc3NhZ2UgaW50ZWdyaXR5IGNvZGVzKSwKKyAuQXIga2V4CisgKGtleSBleGNoYW5nZSBh bGdvcml0aG1zKSwKKysuQXIga2V4LWdzcworKyhHU1NBUEkga2V5IGV4Y2hhbmdlIGFsZ29yaXRo bXMpLAorIC5BciBrZXkKKyAoa2V5IHR5cGVzKSwKKyAuQXIga2V5LWNhLXNpZ24KK2RpZmYgLS1n aXQgYS9zc2guYyBiL3NzaC5jCitpbmRleCA1MzFmMjhlYjIuLmJjM2JlOGY4ZSAxMDA2NDQKKy0t LSBhL3NzaC5jCisrKysgYi9zc2guYworQEAgLTgwNSw2ICs4MDUsOCBAQCBtYWluKGludCBhYywg Y2hhciAqKmF2KQorIAkJCWVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJrZXgiKSA9PSAwIHx8Cisg CQkJICAgIHN0cmNhc2VjbXAob3B0YXJnLCAiS2V4QWxnb3JpdGhtcyIpID09IDApCisgCQkJCWNw ID0ga2V4X2FsZ19saXN0KCdcbicpOworKwkJCWVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJrZXgt Z3NzIikgPT0gMCkKKysJCQkJY3AgPSBrZXhfZ3NzX2FsZ19saXN0KCdcbicpOworIAkJCWVsc2Ug aWYgKHN0cmNtcChvcHRhcmcsICJrZXkiKSA9PSAwKQorIAkJCQljcCA9IHNzaGtleV9hbGdfbGlz dCgwLCAwLCAwLCAnXG4nKTsKKyAJCQllbHNlIGlmIChzdHJjbXAob3B0YXJnLCAia2V5LWNlcnQi KSA9PSAwKQorQEAgLTgzNSw4ICs4MzcsOCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorIAkJ CX0gZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImhlbHAiKSA9PSAwKSB7CisgCQkJCWNwID0geHN0 cmR1cCgKKyAJCQkJICAgICJjaXBoZXJcbmNpcGhlci1hdXRoXG5jb21wcmVzc2lvblxua2V4XG4i CistCQkJCSAgICAia2V5XG5rZXktY2VydFxua2V5LXBsYWluXG5rZXktc2lnXG5tYWNcbiIKKy0J CQkJICAgICJwcm90b2NvbC12ZXJzaW9uXG5zaWciKTsKKysJCQkJICAgICJrZXgtZ3NzXG5rZXlc bmtleS1jZXJ0XG5rZXktcGxhaW5cbiIKKysJCQkJICAgICJrZXktc2lnXG5tYWNcbnByb3RvY29s LXZlcnNpb25cbnNpZyIpOworIAkJCX0KKyAJCQlpZiAoY3AgPT0gTlVMTCkKKyAJCQkJZmF0YWwo IlVuc3VwcG9ydGVkIHF1ZXJ5IFwiJXNcIiIsIG9wdGFyZyk7CitkaWZmIC0tZ2l0IGEvc3NoX2Nv bmZpZyBiL3NzaF9jb25maWcKK2luZGV4IGQ5MzI0Yzk1Ny4uY2E3YzU4NTNiIDEwMDY0NAorLS0t IGEvc3NoX2NvbmZpZworKysrIGIvc3NoX2NvbmZpZworQEAgLTI0LDYgKzI0LDggQEAKKyAjICAg SG9zdGJhc2VkQXV0aGVudGljYXRpb24gbm8KKyAjICAgR1NTQVBJQXV0aGVudGljYXRpb24gbm8K KyAjICAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyBubworKyMgICBHU1NBUElLZXlFeGNoYW5n ZSBubworKyMgICBHU1NBUElUcnVzdEROUyBubworICMgICBCYXRjaE1vZGUgbm8KKyAjICAgQ2hl Y2tIb3N0SVAgbm8KKyAjICAgQWRkcmVzc0ZhbWlseSBhbnkKK2RpZmYgLS1naXQgYS9zc2hfY29u ZmlnLjUgYi9zc2hfY29uZmlnLjUKK2luZGV4IGI0NTliMDQ0OS4uOWU1MTYzNzc0IDEwMDY0NAor LS0tIGEvc3NoX2NvbmZpZy41CisrKysgYi9zc2hfY29uZmlnLjUKK0BAIC05NzYsMTAgKzk3Niw2 OCBAQCBUaGUgZGVmYXVsdCBpcworIFNwZWNpZmllcyB3aGV0aGVyIHVzZXIgYXV0aGVudGljYXRp b24gYmFzZWQgb24gR1NTQVBJIGlzIGFsbG93ZWQuCisgVGhlIGRlZmF1bHQgaXMKKyAuQ20gbm8g LgorKy5JdCBDbSBHU1NBUElDbGllbnRJZGVudGl0eQorK0lmIHNldCwgc3BlY2lmaWVzIHRoZSBH U1NBUEkgY2xpZW50IGlkZW50aXR5IHRoYXQgc3NoIHNob3VsZCB1c2Ugd2hlbgorK2Nvbm5lY3Rp bmcgdG8gdGhlIHNlcnZlci4gVGhlIGRlZmF1bHQgaXMgdW5zZXQsIHdoaWNoIG1lYW5zIHRoYXQg dGhlIGRlZmF1bHQKKytpZGVudGl0eSB3aWxsIGJlIHVzZWQuCisgLkl0IENtIEdTU0FQSURlbGVn YXRlQ3JlZGVudGlhbHMKKyBGb3J3YXJkIChkZWxlZ2F0ZSkgY3JlZGVudGlhbHMgdG8gdGhlIHNl cnZlci4KKyBUaGUgZGVmYXVsdCBpcworIC5DbSBubyAuCisrLkl0IENtIEdTU0FQSUtleUV4Y2hh bmdlCisrU3BlY2lmaWVzIHdoZXRoZXIga2V5IGV4Y2hhbmdlIGJhc2VkIG9uIEdTU0FQSSBtYXkg YmUgdXNlZC4gV2hlbiB1c2luZworK0dTU0FQSSBrZXkgZXhjaGFuZ2UgdGhlIHNlcnZlciBuZWVk IG5vdCBoYXZlIGEgaG9zdCBrZXkuCisrVGhlIGRlZmF1bHQgaXMKKysuRHEgbm8gLgorKy5JdCBD bSBHU1NBUElSZW5ld2FsRm9yY2VzUmVrZXkKKytJZiBzZXQgdG8KKysuRHEgeWVzCisrdGhlbiBy ZW5ld2FsIG9mIHRoZSBjbGllbnQncyBHU1NBUEkgY3JlZGVudGlhbHMgd2lsbCBmb3JjZSB0aGUg cmVrZXlpbmcgb2YgdGhlCisrc3NoIGNvbm5lY3Rpb24uIFdpdGggYSBjb21wYXRpYmxlIHNlcnZl ciwgdGhpcyB3aWxsIGRlbGVnYXRlIHRoZSByZW5ld2VkCisrY3JlZGVudGlhbHMgdG8gYSBzZXNz aW9uIG9uIHRoZSBzZXJ2ZXIuCisrLlBwCisrQ2hlY2tzIGFyZSBtYWRlIHRvIGVuc3VyZSB0aGF0 IGNyZWRlbnRpYWxzIGFyZSBvbmx5IHByb3BhZ2F0ZWQgd2hlbiB0aGUgbmV3CisrY3JlZGVudGlh bHMgbWF0Y2ggdGhlIG9sZCBvbmVzIG9uIHRoZSBvcmlnaW5hdGluZyBjbGllbnQgYW5kIHdoZXJl IHRoZQorK3JlY2VpdmluZyBzZXJ2ZXIgc3RpbGwgaGFzIHRoZSBvbGQgc2V0IGluIGl0cyBjYWNo ZS4KKysuUHAKKytUaGUgZGVmYXVsdCBpcworKy5EcSBubyAuCisrLlBwCisrRm9yIHRoaXMgdG8g d29yaworKy5DbSBHU1NBUElLZXlFeGNoYW5nZQorK25lZWRzIHRvIGJlIGVuYWJsZWQgaW4gdGhl IHNlcnZlciBhbmQgYWxzbyB1c2VkIGJ5IHRoZSBjbGllbnQuCisrLkl0IENtIEdTU0FQSVNlcnZl cklkZW50aXR5CisrSWYgc2V0LCBzcGVjaWZpZXMgdGhlIEdTU0FQSSBzZXJ2ZXIgaWRlbnRpdHkg dGhhdCBzc2ggc2hvdWxkIGV4cGVjdCB3aGVuCisrY29ubmVjdGluZyB0byB0aGUgc2VydmVyLiBU aGUgZGVmYXVsdCBpcyB1bnNldCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUKKytleHBlY3RlZCBHU1NB UEkgc2VydmVyIGlkZW50aXR5IHdpbGwgYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSB0YXJnZXQKKyto b3N0bmFtZS4KKysuSXQgQ20gR1NTQVBJVHJ1c3REbnMKKytTZXQgdG8KKysuRHEgeWVzCisrdG8g aW5kaWNhdGUgdGhhdCB0aGUgRE5TIGlzIHRydXN0ZWQgdG8gc2VjdXJlbHkgY2Fub25pY2FsaXpl CisrdGhlIG5hbWUgb2YgdGhlIGhvc3QgYmVpbmcgY29ubmVjdGVkIHRvLiBJZgorKy5EcSBubyAs CisrdGhlIGhvc3RuYW1lIGVudGVyZWQgb24gdGhlCisrY29tbWFuZCBsaW5lIHdpbGwgYmUgcGFz c2VkIHVudG91Y2hlZCB0byB0aGUgR1NTQVBJIGxpYnJhcnkuCisrVGhlIGRlZmF1bHQgaXMKKysu RHEgbm8gLgorKy5JdCBDbSBHU1NBUElLZXhBbGdvcml0aG1zCisrVGhlIGxpc3Qgb2Yga2V5IGV4 Y2hhbmdlIGFsZ29yaXRobXMgdGhhdCBhcmUgb2ZmZXJlZCBmb3IgR1NTQVBJCisra2V5IGV4Y2hh bmdlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCisrLkJkIC1saXRlcmFsIC1vZmZzZXQgM24KKytnc3Mt Z2V4LXNoYTEtLAorK2dzcy1ncm91cDEtc2hhMS0sCisrZ3NzLWdyb3VwMTQtc2hhMS0sCisrZ3Nz LWdyb3VwMTQtc2hhMjU2LSwKKytnc3MtZ3JvdXAxNi1zaGE1MTItLAorK2dzcy1uaXN0cDI1Ni1z aGEyNTYtLAorK2dzcy1jdXJ2ZTI1NTE5LXNoYTI1Ni0KKysuRWQKKysuUHAKKytUaGUgZGVmYXVs dCBpcworKy5EcSBnc3MtZ3JvdXAxNC1zaGEyNTYtLGdzcy1ncm91cDE2LXNoYTUxMi0sZ3NzLW5p c3RwMjU2LXNoYTI1Ni0sCisrZ3NzLWN1cnZlMjU1MTktc2hhMjU2LSxnc3MtZ3JvdXAxNC1zaGEx LSxnc3MtZ2V4LXNoYTEtIC4KKytUaGlzIG9wdGlvbiBvbmx5IGFwcGxpZXMgdG8gY29ubmVjdGlv bnMgdXNpbmcgR1NTQVBJLgorIC5JdCBDbSBIYXNoS25vd25Ib3N0cworIEluZGljYXRlcyB0aGF0 CisgLlhyIHNzaCAxCitkaWZmIC0tZ2l0IGEvc3NoY29ubmVjdDIuYyBiL3NzaGNvbm5lY3QyLmMK K2luZGV4IDQ3OGE5YTUyZi4uMzFiYmMwZWQ4IDEwMDY0NAorLS0tIGEvc3NoY29ubmVjdDIuYwor KysrIGIvc3NoY29ubmVjdDIuYworQEAgLTIyMyw2ICsyMjMsMTEgQEAgc3NoX2tleDIoc3RydWN0 IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhvc3RhZGRyLCB1X3Nob3J0 IHBvcnQsCisgCWNoYXIgKmFsbF9rZXksICpoa2FsZ3MgPSBOVUxMOworIAlpbnQgciwgdXNlX2tu b3duX2hvc3RzX29yZGVyID0gMDsKKyAKKysjaWYgZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQo V0lUSF9PUEVOU1NMKQorKwljaGFyICpvcmlnID0gTlVMTCwgKmdzcyA9IE5VTEw7CisrCWNoYXIg Kmdzc19ob3N0ID0gTlVMTDsKKysjZW5kaWYKKysKKyAJeHh4X2hvc3QgPSBob3N0OworIAl4eHhf aG9zdGFkZHIgPSBob3N0YWRkcjsKKyAJeHh4X2Nvbm5faW5mbyA9IGNpbmZvOworQEAgLTI1Niw2 ICsyNjEsNDIgQEAgc3NoX2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qg c29ja2FkZHIgKmhvc3RhZGRyLCB1X3Nob3J0IHBvcnQsCisgCSAgICBjb21wcmVzc2lvbl9hbGdf bGlzdChvcHRpb25zLmNvbXByZXNzaW9uKSwKKyAJICAgIGhrYWxncyA/IGhrYWxncyA6IG9wdGlv bnMuaG9zdGtleWFsZ29yaXRobXMpOworIAorKyNpZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5l ZChXSVRIX09QRU5TU0wpCisrCWlmIChvcHRpb25zLmdzc19rZXlleCkgeworKwkJLyogQWRkIHRo ZSBHU1NBUEkgbWVjaGFuaXNtcyBjdXJyZW50bHkgc3VwcG9ydGVkIG9uIHRoaXMKKysJCSAqIGNs aWVudCB0byB0aGUga2V5IGV4Y2hhbmdlIGFsZ29yaXRobSBwcm9wb3NhbCAqLworKwkJb3JpZyA9 IG15cHJvcG9zYWxbUFJPUE9TQUxfS0VYX0FMR1NdOworKworKwkJaWYgKG9wdGlvbnMuZ3NzX3Nl cnZlcl9pZGVudGl0eSkgeworKwkJCWdzc19ob3N0ID0geHN0cmR1cChvcHRpb25zLmdzc19zZXJ2 ZXJfaWRlbnRpdHkpOworKwkJfSBlbHNlIGlmIChvcHRpb25zLmdzc190cnVzdF9kbnMpIHsKKysJ CQlnc3NfaG9zdCA9IHJlbW90ZV9ob3N0bmFtZShzc2gpOworKwkJCS8qIEZhbGwgYmFjayB0byBz cGVjaWZpZWQgaG9zdCBpZiB3ZSBhcmUgdXNpbmcgcHJveHkgY29tbWFuZAorKwkJCSAqIGFuZCBj YW4gbm90IHVzZSBETlMgb24gdGhhdCBzb2NrZXQgKi8KKysJCQlpZiAoc3RyY21wKGdzc19ob3N0 LCAiVU5LTk9XTiIpID09IDApIHsKKysJCQkJZnJlZShnc3NfaG9zdCk7CisrCQkJCWdzc19ob3N0 ID0geHN0cmR1cChob3N0KTsKKysJCQl9CisrCQl9IGVsc2UgeworKwkJCWdzc19ob3N0ID0geHN0 cmR1cChob3N0KTsKKysJCX0KKysKKysJCWdzcyA9IHNzaF9nc3NhcGlfY2xpZW50X21lY2hhbmlz bXMoZ3NzX2hvc3QsCisrCQkgICAgb3B0aW9ucy5nc3NfY2xpZW50X2lkZW50aXR5LCBvcHRpb25z Lmdzc19rZXhfYWxnb3JpdGhtcyk7CisrCQlpZiAoZ3NzKSB7CisrCQkJZGVidWcoIk9mZmVyaW5n IEdTU0FQSSBwcm9wb3NhbDogJXMiLCBnc3MpOworKwkJCXhhc3ByaW50ZigmbXlwcm9wb3NhbFtQ Uk9QT1NBTF9LRVhfQUxHU10sCisrCQkJICAgICIlcywlcyIsIGdzcywgb3JpZyk7CisrCisrCQkJ LyogSWYgd2UndmUgZ290IEdTU0FQSSBhbGdvcml0aG1zLCB0aGVuIHdlIGFsc28gc3VwcG9ydCB0 aGUKKysJCQkgKiAnbnVsbCcgaG9zdGtleSwgYXMgYSBsYXN0IHJlc29ydCAqLworKwkJCW9yaWcg PSBteXByb3Bvc2FsW1BST1BPU0FMX1NFUlZFUl9IT1NUX0tFWV9BTEdTXTsKKysJCQl4YXNwcmlu dGYoJm15cHJvcG9zYWxbUFJPUE9TQUxfU0VSVkVSX0hPU1RfS0VZX0FMR1NdLAorKwkJCSAgICAi JXMsbnVsbCIsIG9yaWcpOworKwkJfQorKwl9CisrI2VuZGlmCisrCisgCWZyZWUoaGthbGdzKTsK KyAKKyAJLyogc3RhcnQga2V5IGV4Y2hhbmdlICovCitAQCAtMjcyLDE1ICszMTMsNDUgQEAgc3No X2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhvc3Rh ZGRyLCB1X3Nob3J0IHBvcnQsCisgIyBpZmRlZiBPUEVOU1NMX0hBU19FQ0MKKyAJc3NoLT5rZXgt PmtleFtLRVhfRUNESF9TSEEyXSA9IGtleF9nZW5fY2xpZW50OworICMgZW5kaWYKKy0jZW5kaWYK KysjIGlmZGVmIEdTU0FQSQorKwlpZiAob3B0aW9ucy5nc3Nfa2V5ZXgpIHsKKysJCXNzaC0+a2V4 LT5rZXhbS0VYX0dTU19HUlAxX1NIQTFdID0ga2V4Z3NzX2NsaWVudDsKKysJCXNzaC0+a2V4LT5r ZXhbS0VYX0dTU19HUlAxNF9TSEExXSA9IGtleGdzc19jbGllbnQ7CisrCQlzc2gtPmtleC0+a2V4 W0tFWF9HU1NfR1JQMTRfU0hBMjU2XSA9IGtleGdzc19jbGllbnQ7CisrCQlzc2gtPmtleC0+a2V4 W0tFWF9HU1NfR1JQMTZfU0hBNTEyXSA9IGtleGdzc19jbGllbnQ7CisrCQlzc2gtPmtleC0+a2V4 W0tFWF9HU1NfR0VYX1NIQTFdID0ga2V4Z3NzZ2V4X2NsaWVudDsKKysJCXNzaC0+a2V4LT5rZXhb S0VYX0dTU19OSVNUUDI1Nl9TSEEyNTZdID0ga2V4Z3NzX2NsaWVudDsKKysJCXNzaC0+a2V4LT5r ZXhbS0VYX0dTU19DMjU1MTlfU0hBMjU2XSA9IGtleGdzc19jbGllbnQ7CisrCX0KKysjIGVuZGlm CisrI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLworIAlzc2gtPmtleC0+a2V4W0tFWF9DMjU1MTlf U0hBMjU2XSA9IGtleF9nZW5fY2xpZW50OworIAlzc2gtPmtleC0+a2V4W0tFWF9LRU1fU05UUlVQ NzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX2NsaWVudDsKKyAJc3NoLT5rZXgtPmtleFtLRVhf S0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKyAJc3NoLT5rZXgt PnZlcmlmeV9ob3N0X2tleT0mdmVyaWZ5X2hvc3Rfa2V5X2NhbGxiYWNrOworIAorKyNpZiBkZWZp bmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpCisrCWlmIChvcHRpb25zLmdzc19r ZXlleCkgeworKwkJc3NoLT5rZXgtPmdzc19kZWxlZ19jcmVkcyA9IG9wdGlvbnMuZ3NzX2RlbGVn X2NyZWRzOworKwkJc3NoLT5rZXgtPmdzc190cnVzdF9kbnMgPSBvcHRpb25zLmdzc190cnVzdF9k bnM7CisrCQlzc2gtPmtleC0+Z3NzX2NsaWVudCA9IG9wdGlvbnMuZ3NzX2NsaWVudF9pZGVudGl0 eTsKKysJCXNzaC0+a2V4LT5nc3NfaG9zdCA9IGdzc19ob3N0OworKwl9CisrI2VuZGlmCisrCisg CXNzaF9kaXNwYXRjaF9ydW5fZmF0YWwoc3NoLCBESVNQQVRDSF9CTE9DSywgJnNzaC0+a2V4LT5k b25lKTsKKyAJa2V4X3Byb3Bvc2FsX2ZyZWVfZW50cmllcyhteXByb3Bvc2FsKTsKKyAKKysjaWYg ZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NMKQorKwkvKiByZXBhaXIgbXlw cm9wb3NhbCBhZnRlciBpdCB3YXMgY3J1bXBsZWQgYnkgdGhlICovCisrCS8qIGV4dC1pbmZvIHJl bW92YWwgYWJvdmUgKi8KKysJaWYgKGdzcykgeworKwkJb3JpZyA9IG15cHJvcG9zYWxbUFJPUE9T QUxfS0VYX0FMR1NdOworKwkJeGFzcHJpbnRmKCZteXByb3Bvc2FsW1BST1BPU0FMX0tFWF9BTEdT XSwKKysJCSAgICAiJXMsJXMiLCBnc3MsIG9yaWcpOworKwkJZnJlZShnc3MpOworKwl9CisrI2Vu ZGlmCisgI2lmZGVmIERFQlVHX0tFWERICisgCS8qIHNlbmQgMXN0IGVuY3J5cHRlZC9tYWNlZC9j b21wcmVzc2VkIG1lc3NhZ2UgKi8KKyAJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9N U0dfSUdOT1JFKSkgIT0gMCB8fAorQEAgLTM3MCw2ICs0NDEsNyBAQCBzdGF0aWMgaW50IGlucHV0 X2dzc2FwaV9yZXNwb25zZShpbnQgdHlwZSwgdWludDMyX3QsIHN0cnVjdCBzc2ggKik7Cisgc3Rh dGljIGludCBpbnB1dF9nc3NhcGlfdG9rZW4oaW50IHR5cGUsIHVpbnQzMl90LCBzdHJ1Y3Qgc3No ICopOworIHN0YXRpYyBpbnQgaW5wdXRfZ3NzYXBpX2Vycm9yKGludCwgdWludDMyX3QsIHN0cnVj dCBzc2ggKik7Cisgc3RhdGljIGludCBpbnB1dF9nc3NhcGlfZXJydG9rKGludCwgdWludDMyX3Qs IHN0cnVjdCBzc2ggKik7Cisrc3RhdGljIGludCB1c2VyYXV0aF9nc3NrZXlleChzdHJ1Y3Qgc3No ICopOworICNlbmRpZgorIAorIHZvaWQJdXNlcmF1dGgoc3RydWN0IHNzaCAqLCBjaGFyICopOwor QEAgLTM4Niw2ICs0NTgsMTEgQEAgc3RhdGljIGNoYXIgKmF1dGhtZXRob2RzX2dldCh2b2lkKTsK KyAKKyBBdXRobWV0aG9kIGF1dGhtZXRob2RzW10gPSB7CisgI2lmZGVmIEdTU0FQSQorKwl7Imdz c2FwaS1rZXlleCIsCisrCQl1c2VyYXV0aF9nc3NrZXlleCwKKysJCU5VTEwsCisrCQkmb3B0aW9u cy5nc3Nfa2V5ZXgsCisrCQlOVUxMfSwKKyAJeyJnc3NhcGktd2l0aC1taWMiLAorIAkJdXNlcmF1 dGhfZ3NzYXBpLAorIAkJdXNlcmF1dGhfZ3NzYXBpX2NsZWFudXAsCitAQCAtNzYwLDEyICs4Mzcs MzIgQEAgdXNlcmF1dGhfZ3NzYXBpKHN0cnVjdCBzc2ggKnNzaCkKKyAJT01fdWludDMyIG1pbjsK KyAJaW50IHIsIG9rID0gMDsKKyAJZ3NzX09JRCBtZWNoID0gTlVMTDsKKysJY2hhciAqZ3NzX2hv c3QgPSBOVUxMOworKworKwlpZiAob3B0aW9ucy5nc3Nfc2VydmVyX2lkZW50aXR5KSB7CisrCQln c3NfaG9zdCA9IHhzdHJkdXAob3B0aW9ucy5nc3Nfc2VydmVyX2lkZW50aXR5KTsKKysJfSBlbHNl IGlmIChvcHRpb25zLmdzc190cnVzdF9kbnMpIHsKKysJCWdzc19ob3N0ID0gcmVtb3RlX2hvc3Ru YW1lKHNzaCk7CisrCQkvKiBGYWxsIGJhY2sgdG8gc3BlY2lmaWVkIGhvc3QgaWYgd2UgYXJlIHVz aW5nIHByb3h5IGNvbW1hbmQKKysJCSAqIGFuZCBjYW4gbm90IHVzZSBETlMgb24gdGhhdCBzb2Nr ZXQgKi8KKysJCWlmIChzdHJjbXAoZ3NzX2hvc3QsICJVTktOT1dOIikgPT0gMCkgeworKwkJCWZy ZWUoZ3NzX2hvc3QpOworKwkJCWdzc19ob3N0ID0geHN0cmR1cChhdXRoY3R4dC0+aG9zdCk7Cisr CQl9CisrCX0gZWxzZSB7CisrCQlnc3NfaG9zdCA9IHhzdHJkdXAoYXV0aGN0eHQtPmhvc3QpOwor Kwl9CisgCisgCS8qIFRyeSBvbmUgR1NTQVBJIG1ldGhvZCBhdCBhIHRpbWUsIHJhdGhlciB0aGFu IHNlbmRpbmcgdGhlbSBhbGwgYXQKKyAJICogb25jZS4gKi8KKyAKKyAJaWYgKGF1dGhjdHh0LT5n c3Nfc3VwcG9ydGVkX21lY2hzID09IE5VTEwpCistCQlnc3NfaW5kaWNhdGVfbWVjaHMoJm1pbiwg JmF1dGhjdHh0LT5nc3Nfc3VwcG9ydGVkX21lY2hzKTsKKysJCWlmIChHU1NfRVJST1IoZ3NzX2lu ZGljYXRlX21lY2hzKCZtaW4sCisrCQkgICAgJmF1dGhjdHh0LT5nc3Nfc3VwcG9ydGVkX21lY2hz KSkpIHsKKysJCQlhdXRoY3R4dC0+Z3NzX3N1cHBvcnRlZF9tZWNocyA9IE5VTEw7CisrCQkJZnJl ZShnc3NfaG9zdCk7CisrCQkJcmV0dXJuIDA7CisrCQl9CisgCisgCS8qIENoZWNrIHRvIHNlZSB3 aGV0aGVyIHRoZSBtZWNoYW5pc20gaXMgdXNhYmxlIGJlZm9yZSB3ZSBvZmZlciBpdCAqLworIAl3 aGlsZSAoYXV0aGN0eHQtPm1lY2hfdHJpZWQgPCBhdXRoY3R4dC0+Z3NzX3N1cHBvcnRlZF9tZWNo cy0+Y291bnQgJiYKK0BAIC03NzQsMTMgKzg3MSwxNSBAQCB1c2VyYXV0aF9nc3NhcGkoc3RydWN0 IHNzaCAqc3NoKQorIAkJICAgIGVsZW1lbnRzW2F1dGhjdHh0LT5tZWNoX3RyaWVkXTsKKyAJCS8q IE15IERFUiBlbmNvZGluZyByZXF1aXJlcyBsZW5ndGg8MTI4ICovCisgCQlpZiAobWVjaC0+bGVu Z3RoIDwgMTI4ICYmIHNzaF9nc3NhcGlfY2hlY2tfbWVjaGFuaXNtKCZnc3NjdHh0LAorLQkJICAg IG1lY2gsIGF1dGhjdHh0LT5ob3N0KSkgeworKwkJICAgIG1lY2gsIGdzc19ob3N0LCBvcHRpb25z Lmdzc19jbGllbnRfaWRlbnRpdHkpKSB7CisgCQkJb2sgPSAxOyAvKiBNZWNoYW5pc20gd29ya3Mg Ki8KKyAJCX0gZWxzZSB7CisgCQkJYXV0aGN0eHQtPm1lY2hfdHJpZWQrKzsKKyAJCX0KKyAJfQor IAorKwlmcmVlKGdzc19ob3N0KTsKKysKKyAJaWYgKCFvayB8fCBtZWNoID09IE5VTEwpCisgCQly ZXR1cm4gMDsKKyAKK0BAIC0xMDE0LDYgKzExMTMsNTUgQEAgaW5wdXRfZ3NzYXBpX2Vycm9yKGlu dCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCisgCWZyZWUobGFuZyk7Cisg CXJldHVybiByOworIH0KKysKKytpbnQKKyt1c2VyYXV0aF9nc3NrZXlleChzdHJ1Y3Qgc3NoICpz c2gpCisreworKwlzdHJ1Y3Qgc3NoYnVmICpiID0gTlVMTDsKKysJQXV0aGN0eHQgKmF1dGhjdHh0 ID0gc3NoLT5hdXRoY3R4dDsKKysJZ3NzX2J1ZmZlcl9kZXNjIGdzc2J1ZjsKKysJZ3NzX2J1ZmZl cl9kZXNjIG1pYyA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJT01fdWludDMyIG1zOworKwlpbnQg cjsKKysKKysJc3RhdGljIGludCBhdHRlbXB0ID0gMDsKKysJaWYgKGF0dGVtcHQrKyA+PSAxKQor KwkJcmV0dXJuICgwKTsKKysKKysJaWYgKGdzc19rZXhfY29udGV4dCA9PSBOVUxMKSB7CisrCQlk ZWJ1ZygiTm8gdmFsaWQgS2V5IGV4Y2hhbmdlIGNvbnRleHQiKTsKKysJCXJldHVybiAoMCk7Cisr CX0KKysKKysJaWYgKChiID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQorKwkJZmF0YWxfZigic3No YnVmX25ldyBmYWlsZWQiKTsKKysKKysJc3NoX2dzc2FwaV9idWlsZG1pYyhiLCBhdXRoY3R4dC0+ c2VydmVyX3VzZXIsIGF1dGhjdHh0LT5zZXJ2aWNlLAorKwkgICAgImdzc2FwaS1rZXlleCIsIHNz aC0+a2V4LT5zZXNzaW9uX2lkKTsKKysKKysJaWYgKChnc3NidWYudmFsdWUgPSBzc2hidWZfbXV0 YWJsZV9wdHIoYikpID09IE5VTEwpCisrCQlmYXRhbF9mKCJzc2hidWZfbXV0YWJsZV9wdHIgZmFp bGVkIik7CisrCWdzc2J1Zi5sZW5ndGggPSBzc2hidWZfbGVuKGIpOworKworKwlpZiAoR1NTX0VS Uk9SKHNzaF9nc3NhcGlfc2lnbihnc3Nfa2V4X2NvbnRleHQsICZnc3NidWYsICZtaWMpKSkgewor KwkJc3NoYnVmX2ZyZWUoYik7CisrCQlyZXR1cm4gKDApOworKwl9CisrCisrCWlmICgociA9IHNz aHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX1VTRVJBVVRIX1JFUVVFU1QpKSAhPSAwIHx8CisrCSAg ICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGF1dGhjdHh0LT5zZXJ2ZXJfdXNlcikpICE9 IDAgfHwKKysJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgYXV0aGN0eHQtPnNlcnZp Y2UpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGF1dGhjdHh0 LT5tZXRob2QtPm5hbWUpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBrdF9wdXRfc3RyaW5nKHNz aCwgbWljLnZhbHVlLCBtaWMubGVuZ3RoKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hwa3Rfc2Vu ZChzc2gpKSAhPSAwKQorKwkJZmF0YWxfZnIociwgInBhcnNpbmciKTsKKysKKysJc3NoYnVmX2Zy ZWUoYik7CisrCWdzc19yZWxlYXNlX2J1ZmZlcigmbXMsICZtaWMpOworKworKwlyZXR1cm4gKDEp OworK30KKysKKyAjZW5kaWYgLyogR1NTQVBJICovCisgCisgc3RhdGljIGludAorZGlmZiAtLWdp dCBhL3NzaGQtYXV0aC5jIGIvc3NoZC1hdXRoLmMKK2luZGV4IDczYWNiMGRiZS4uODg1Y2Q4Mjgx IDEwMDY0NAorLS0tIGEvc3NoZC1hdXRoLmMKKysrKyBiL3NzaGQtYXV0aC5jCitAQCAtNjkxLDcg KzY5MSw3IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCisgCQkJYnJlYWs7CisgCQl9CisgCX0K Ky0JaWYgKCFoYXZlX2tleSkKKysJaWYgKCFoYXZlX2tleSAmJiAhb3B0aW9ucy5nc3Nfa2V5ZXgp CisgCQlmYXRhbCgiaW50ZXJuYWwgZXJyb3I6IHJlY2VpdmVkIG5vIGhvc3RrZXlzIik7CisgCisg CS8qIEVuc3VyZSB0aGF0IHVtYXNrIGRpc2FsbG93cyBhdCBsZWFzdCBncm91cCBhbmQgd29ybGQg d3JpdGUgKi8KK0BAIC04MTEsNiArODExLDQ4IEBAIGRvX3NzaDJfa2V4KHN0cnVjdCBzc2ggKnNz aCkKKyAKKyAJZnJlZShoa2FsZ3MpOworIAorKyNpZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5l ZChXSVRIX09QRU5TU0wpCisrCXsKKysJY2hhciAqb3JpZzsKKysJY2hhciAqZ3NzID0gTlVMTDsK KysJY2hhciAqbmV3c3RyID0gTlVMTDsKKysJb3JpZyA9IG15cHJvcG9zYWxbUFJPUE9TQUxfS0VY X0FMR1NdOworKworKwkvKgorKwkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgaG9zdCBrZXksIHRoZW4g dGhlcmUncyBubyBwb2ludCBhZHZlcnRpc2luZworKwkgKiB0aGUgb3RoZXIga2V5IGV4Y2hhbmdl IGFsZ29yaXRobXMKKysJICovCisrCisrCWlmIChzdHJsZW4obXlwcm9wb3NhbFtQUk9QT1NBTF9T RVJWRVJfSE9TVF9LRVlfQUxHU10pID09IDApCisrCQlvcmlnID0gTlVMTDsKKysKKysJaWYgKG9w dGlvbnMuZ3NzX2tleWV4KQorKwkJZ3NzID0gc3NoX2dzc2FwaV9zZXJ2ZXJfbWVjaGFuaXNtcygp OworKwllbHNlCisrCQlnc3MgPSBOVUxMOworKworKwlpZiAoZ3NzICYmIG9yaWcpCisrCQl4YXNw cmludGYoJm5ld3N0ciwgIiVzLCVzIiwgZ3NzLCBvcmlnKTsKKysJZWxzZSBpZiAoZ3NzKQorKwkJ eGFzcHJpbnRmKCZuZXdzdHIsICIlcywlcyIsIGdzcywgImtleC1zdHJpY3Qtcy12MDBAb3BlbnNz aC5jb20iKTsKKysJZWxzZSBpZiAob3JpZykKKysJCW5ld3N0ciA9IG9yaWc7CisrCisrCS8qCisr CSAqIElmIHdlJ3ZlIGdvdCBHU1NBUEkgbWVjaGFuaXNtcywgdGhlbiB3ZSd2ZSBnb3QgdGhlICdu dWxsJyBob3N0CisrCSAqIGtleSBhbGcsIGJ1dCB3ZSBjYW4ndCB0ZWxsIHBlb3BsZSBhYm91dCBp dCB1bmxlc3MgaXRzIHRoZSBvbmx5CisrCSAqIGhvc3Qga2V5IGFsZ29yaXRobSB3ZSBzdXBwb3J0 CisrCSAqLworKwlpZiAoZ3NzICYmIChzdHJsZW4obXlwcm9wb3NhbFtQUk9QT1NBTF9TRVJWRVJf SE9TVF9LRVlfQUxHU10pKSA9PSAwKQorKwkJbXlwcm9wb3NhbFtQUk9QT1NBTF9TRVJWRVJfSE9T VF9LRVlfQUxHU10gPSB4c3RyZHVwKCJudWxsIik7CisrCisrCWlmIChuZXdzdHIpCisrCQlteXBy b3Bvc2FsW1BST1BPU0FMX0tFWF9BTEdTXSA9IG5ld3N0cjsKKysJZWxzZQorKwkJZmF0YWwoIk5v IHN1cHBvcnRlZCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtcyIpOworKwl9CisrI2VuZGlmCisrCisg CWlmICgociA9IGtleF9leGNoYW5nZV9pZGVudGlmaWNhdGlvbihzc2gsIC0xLAorIAkgICAgb3B0 aW9ucy52ZXJzaW9uX2FkZGVuZHVtKSkgIT0gMCkKKyAJCXNzaHBrdF9mYXRhbChzc2gsIHIsICJi YW5uZXIgZXhjaGFuZ2UiKTsKK0BAIC04MzYsNiArODc4LDE3IEBAIGRvX3NzaDJfa2V4KHN0cnVj dCBzc2ggKnNzaCkKKyAjIGlmZGVmIE9QRU5TU0xfSEFTX0VDQworIAlrZXgtPmtleFtLRVhfRUNE SF9TSEEyXSA9IGtleF9nZW5fc2VydmVyOworICMgZW5kaWYgLyogT1BFTlNTTF9IQVNfRUNDICov CisrIyBpZmRlZiBHU1NBUEkKKysJaWYgKG9wdGlvbnMuZ3NzX2tleWV4KSB7CisrCQlrZXgtPmtl eFtLRVhfR1NTX0dSUDFfU0hBMV0gPSBrZXhnc3Nfc2VydmVyOworKwkJa2V4LT5rZXhbS0VYX0dT U19HUlAxNF9TSEExXSA9IGtleGdzc19zZXJ2ZXI7CisrCQlrZXgtPmtleFtLRVhfR1NTX0dSUDE0 X1NIQTI1Nl0gPSBrZXhnc3Nfc2VydmVyOworKwkJa2V4LT5rZXhbS0VYX0dTU19HUlAxNl9TSEE1 MTJdID0ga2V4Z3NzX3NlcnZlcjsKKysJCWtleC0+a2V4W0tFWF9HU1NfR0VYX1NIQTFdID0ga2V4 Z3NzZ2V4X3NlcnZlcjsKKysJCWtleC0+a2V4W0tFWF9HU1NfTklTVFAyNTZfU0hBMjU2XSA9IGtl eGdzc19zZXJ2ZXI7CisrCQlrZXgtPmtleFtLRVhfR1NTX0MyNTUxOV9TSEEyNTZdID0ga2V4Z3Nz X3NlcnZlcjsKKysJfQorKyMgZW5kaWYKKyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisgCWtl eC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworIAlrZXgtPmtleFtL RVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7CitkaWZmIC0t Z2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNlc3Npb24uYworaW5kZXggNjk3NmQ2ODcyLi5m ODQ3ZmMwYTkgMTAwNjQ0CistLS0gYS9zc2hkLXNlc3Npb24uYworKysrIGIvc3NoZC1zZXNzaW9u LmMKK0BAIC01NjQsOCArNTY0LDggQEAgbm90aWZ5X2hvc3RrZXlzKHN0cnVjdCBzc2ggKnNzaCkK KyAJfQorIAlkZWJ1ZzNfZigic2VudCAldSBob3N0a2V5cyIsIG5rZXlzKTsKKyAJaWYgKG5rZXlz ID09IDApCistCQlmYXRhbF9mKCJubyBob3N0a2V5cyIpOworLQlpZiAoKHIgPSBzc2hwa3Rfc2Vu ZChzc2gpKSAhPSAwKQorKwkJZGVidWczX2YoIm5vIGhvc3RrZXlzIik7CisrCWVsc2UgaWYgKChy ID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKKyAJCXNzaHBrdF9mYXRhbChzc2gsIHIsICIlczog c2VuZCIsIF9fZnVuY19fKTsKKyAJc3NoYnVmX2ZyZWUoYnVmKTsKKyB9CitAQCAtMTEwNyw4ICsx MTA3LDkgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKKyAJCQlicmVhazsKKyAJCX0KKyAJfQor LQlpZiAoIWhhdmVfa2V5KQorLQkJZmF0YWwoImludGVybmFsIGVycm9yOiBtb25pdG9yIHJlY2Vp dmVkIG5vIGhvc3RrZXlzIik7CisrCS8qIFRoZSBHU1NBUEkga2V5IGV4Y2hhbmdlIGNhbiBydW4g d2l0aG91dCBhIGhvc3Qga2V5ICovCisrCWlmICghaGF2ZV9rZXkgJiYgIW9wdGlvbnMuZ3NzX2tl eWV4KQorKwkJZmF0YWwoImludGVybmFsIGVycm9yOiBtb25pdG9yIHJlY2VpdmVkIG5vIGhvc3Rr ZXlzIGFuZCBHU1MgS0VYIGlzIG5vdCBjb25maWd1cmVkIik7CisgCisgCS8qIEVuc3VyZSB0aGF0 IHVtYXNrIGRpc2FsbG93cyBhdCBsZWFzdCBncm91cCBhbmQgd29ybGQgd3JpdGUgKi8KKyAJbmV3 X3VtYXNrID0gdW1hc2soMDA3NykgfCAwMDIyOworZGlmZiAtLWdpdCBhL3NzaGQuYyBiL3NzaGQu YworaW5kZXggNzRkMjVmYzczLi41NTI0MzU4MTcgMTAwNjQ0CistLS0gYS9zc2hkLmMKKysrKyBi L3NzaGQuYworQEAgLTE2NjcsNyArMTY2Nyw4IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCisg CQlmcmVlKGZwKTsKKyAJfQorIAlhY2N1bXVsYXRlX2hvc3RfdGltaW5nX3NlY3JldChjZmcsIE5V TEwpOworLQlpZiAoIXNlbnNpdGl2ZV9kYXRhLmhhdmVfc3NoMl9rZXkpIHsKKysJLyogVGhlIEdT U0FQSSBrZXkgZXhjaGFuZ2UgY2FuIHJ1biB3aXRob3V0IGEgaG9zdCBrZXkgKi8KKysJaWYgKCFz ZW5zaXRpdmVfZGF0YS5oYXZlX3NzaDJfa2V5ICYmICFvcHRpb25zLmdzc19rZXlleCkgeworIAkJ bG9naXQoInNzaGQ6IG5vIGhvc3RrZXlzIGF2YWlsYWJsZSAtLSBleGl0aW5nLiIpOworIAkJZXhp dCgxKTsKKyAJfQorZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnIGIvc3NoZF9jb25maWcKK2luZGV4 IDQ4YWY2MzIxYi4uOGRiOWYwZmIxIDEwMDY0NAorLS0tIGEvc3NoZF9jb25maWcKKysrKyBiL3Nz aGRfY29uZmlnCitAQCAtNzksNiArNzksOCBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRo b3JpemVkX2tleXMKKyAjIEdTU0FQSSBvcHRpb25zCisgI0dTU0FQSUF1dGhlbnRpY2F0aW9uIG5v CisgI0dTU0FQSUNsZWFudXBDcmVkZW50aWFscyB5ZXMKKysjR1NTQVBJU3RyaWN0QWNjZXB0b3JD aGVjayB5ZXMKKysjR1NTQVBJS2V5RXhjaGFuZ2Ugbm8KKyAKKyAjIFNldCB0aGlzIHRvICd5ZXMn IHRvIGVuYWJsZSBQQU0gYXV0aGVudGljYXRpb24sIGFjY291bnQgcHJvY2Vzc2luZywKKyAjIGFu ZCBzZXNzaW9uIHByb2Nlc3NpbmcuIElmIHRoaXMgaXMgZW5hYmxlZCwgUEFNIGF1dGhlbnRpY2F0 aW9uIHdpbGwKK2RpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQoraW5k ZXggY2E0MjVhOGRhLi41OTI4YjZjZDIgMTAwNjQ0CistLS0gYS9zc2hkX2NvbmZpZy41CisrKysg Yi9zc2hkX2NvbmZpZy41CitAQCAtNzUyLDkgKzc1MiwxOSBAQCBvbiBsb2dvdXQuCisgVGhlIGRl ZmF1bHQgaXMKKyAuQ20geWVzIC4KKyAuSXQgQ20gR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscwor LUFjY2VwdCBkZWxlZ2F0ZWQgY3JlZGVudGlhbHMgb24gdGhlIHNlcnZlciBzaWRlLgorK0FjY2Vw dCBkZWxlZ2F0ZWQgY3JlZGVudGlhbHMgb24gdGhlIHNlcnZlciBzaWRlLiAgVGhlIGRlZmF1bHQg aXMKKysuQ00geWVzIC4KKysuSXQgQ20gR1NTQVBJRW5hYmxlazV1c2VycworK1NwZWNpZmllcyB3 aGV0aGVyIHRvIGxvb2sgYXQgLms1dXNlcnMgZmlsZSBmb3IgR1NTQVBJIGF1dGhlbnRpY2F0aW9u CisrYWNjZXNzIGNvbnRyb2wuIEZ1cnRoZXIgZGV0YWlscyBhcmUgZGVzY3JpYmVkIGluCisrLlhy IGtzdSAxIC4KKyBUaGUgZGVmYXVsdCBpcworLS5DbSB5ZXMgLgorKy5DbSBubyAuCisrLkl0IENt IEdTU0FQSUtleUV4Y2hhbmdlCisrU3BlY2lmaWVzIHdoZXRoZXIga2V5IGV4Y2hhbmdlIGJhc2Vk IG9uIEdTU0FQSSBpcyBhbGxvd2VkLiBHU1NBUEkga2V5IGV4Y2hhbmdlCisrZG9lc24ndCByZWx5 IG9uIHNzaCBrZXlzIHRvIHZlcmlmeSBob3N0IGlkZW50aXR5LgorK1RoZSBkZWZhdWx0IGlzCisr LkNtIG5vIC4KKyAuSXQgQ20gR1NTQVBJU3RyaWN0QWNjZXB0b3JDaGVjaworIERldGVybWluZXMg d2hldGhlciB0byBiZSBzdHJpY3QgYWJvdXQgdGhlIGlkZW50aXR5IG9mIHRoZSBHU1NBUEkgYWNj ZXB0b3IKKyBhIGNsaWVudCBhdXRoZW50aWNhdGVzIGFnYWluc3QuCitAQCAtNzY5LDYgKzc3OSwz MiBAQCBtYWNoaW5lJ3MgZGVmYXVsdCBzdG9yZS4KKyBUaGlzIGZhY2lsaXR5IGlzIHByb3ZpZGVk IHRvIGFzc2lzdCB3aXRoIG9wZXJhdGlvbiBvbiBtdWx0aSBob21lZCBtYWNoaW5lcy4KKyBUaGUg ZGVmYXVsdCBpcworIC5DbSB5ZXMgLgorKy5JdCBDbSBHU1NBUElTdG9yZUNyZWRlbnRpYWxzT25S ZWtleQorK0NvbnRyb2xzIHdoZXRoZXIgdGhlIHVzZXIncyBHU1NBUEkgY3JlZGVudGlhbHMgc2hv dWxkIGJlIHVwZGF0ZWQgZm9sbG93aW5nIGEKKytzdWNjZXNzZnVsIGNvbm5lY3Rpb24gcmVrZXlp bmcuIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VwdGVkIHJlbmV3ZWQKKytvciB1cGRh dGVkIGNyZWRlbnRpYWxzIGZyb20gYSBjb21wYXRpYmxlIGNsaWVudC4gVGhlIGRlZmF1bHQgaXMK KysuRHEgbm8gLgorKy5QcAorK0ZvciB0aGlzIHRvIHdvcmsKKysuQ20gR1NTQVBJS2V5RXhjaGFu Z2UKKytuZWVkcyB0byBiZSBlbmFibGVkIGluIHRoZSBzZXJ2ZXIgYW5kIGFsc28gdXNlZCBieSB0 aGUgY2xpZW50LgorKy5JdCBDbSBHU1NBUElLZXhBbGdvcml0aG1zCisrVGhlIGxpc3Qgb2Yga2V5 IGV4Y2hhbmdlIGFsZ29yaXRobXMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgR1NTQVBJCisra2V5IGV4 Y2hhbmdlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCisrLkJkIC1saXRlcmFsIC1vZmZzZXQgM24KKytn c3MtZ2V4LXNoYTEtLAorK2dzcy1ncm91cDEtc2hhMS0sCisrZ3NzLWdyb3VwMTQtc2hhMS0sCisr Z3NzLWdyb3VwMTQtc2hhMjU2LSwKKytnc3MtZ3JvdXAxNi1zaGE1MTItLAorK2dzcy1uaXN0cDI1 Ni1zaGEyNTYtLAorK2dzcy1jdXJ2ZTI1NTE5LXNoYTI1Ni0KKysuRWQKKysuUHAKKytUaGUgZGVm YXVsdCBpcworKy5EcSBnc3MtZ3JvdXAxNC1zaGEyNTYtLGdzcy1ncm91cDE2LXNoYTUxMi0sZ3Nz LW5pc3RwMjU2LXNoYTI1Ni0sCisrZ3NzLWN1cnZlMjU1MTktc2hhMjU2LSxnc3MtZ3JvdXAxNC1z aGExLSxnc3MtZ2V4LXNoYTEtIC4KKytUaGlzIG9wdGlvbiBvbmx5IGFwcGxpZXMgdG8gY29ubmVj dGlvbnMgdXNpbmcgR1NTQVBJLgorIC5JdCBDbSBIb3N0YmFzZWRBY2NlcHRlZEFsZ29yaXRobXMK KyBTcGVjaWZpZXMgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG1zIHRoYXQgd2lsbCBiZSBhY2NlcHRl ZCBmb3IgaG9zdGJhc2VkCisgYXV0aGVudGljYXRpb24gYXMgYSBsaXN0IG9mIGNvbW1hLXNlcGFy YXRlZCBwYXR0ZXJucy4KK2RpZmYgLS1naXQgYS9zc2hrZXkuYyBiL3NzaGtleS5jCitpbmRleCA1 OWQxNDUzMWMuLmNjYzM1ZGJmNSAxMDA2NDQKKy0tLSBhL3NzaGtleS5jCisrKysgYi9zc2hrZXku YworQEAgLTExNSw2ICsxMTUsNzUgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzc2hrZXlfaW1wbCBz c2hrZXlfcnNhX3NoYTUxMl9pbXBsOworIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3Noa2V5X2ltcGwg c3Noa2V5X3JzYV9zaGE1MTJfY2VydF9pbXBsOworICNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8K KyAKKytzdGF0aWMgaW50IHNzaF9nc3NfZXF1YWwoY29uc3Qgc3RydWN0IHNzaGtleSAqLCBjb25z dCBzdHJ1Y3Qgc3Noa2V5ICopCisreworKwlyZXR1cm4gU1NIX0VSUl9GRUFUVVJFX1VOU1VQUE9S VEVEOworK30KKysKKytzdGF0aWMgaW50IHNzaF9nc3Nfc2VyaWFsaXplX3B1YmxpYyhjb25zdCBz dHJ1Y3Qgc3Noa2V5ICosIHN0cnVjdCBzc2hidWYgKiwKKysJZW51bSBzc2hrZXlfc2VyaWFsaXpl X3JlcCkKKyt7CisrCXJldHVybiBTU0hfRVJSX0ZFQVRVUkVfVU5TVVBQT1JURUQ7CisrfQorKwor K3N0YXRpYyBpbnQgc3NoX2dzc19kZXNlcmlhbGl6ZV9wdWJsaWMoY29uc3QgY2hhciAqLCBzdHJ1 Y3Qgc3NoYnVmICosCisrCSAgICAgc3RydWN0IHNzaGtleSAqKQorK3sKKysJcmV0dXJuIFNTSF9F UlJfRkVBVFVSRV9VTlNVUFBPUlRFRDsKKyt9CisrCisrc3RhdGljIGludCBzc2hfZ3NzX3Nlcmlh bGl6ZV9wcml2YXRlKGNvbnN0IHN0cnVjdCBzc2hrZXkgKiwgc3RydWN0IHNzaGJ1ZiAqLAorKwkg ICAgIGVudW0gc3Noa2V5X3NlcmlhbGl6ZV9yZXApCisreworKwlyZXR1cm4gU1NIX0VSUl9GRUFU VVJFX1VOU1VQUE9SVEVEOworK30KKysKKytzdGF0aWMgaW50IHNzaF9nc3NfZGVzZXJpYWxpemVf cHJpdmF0ZShjb25zdCBjaGFyICosIHN0cnVjdCBzc2hidWYgKiwKKysJICAgICBzdHJ1Y3Qgc3No a2V5ICopCisreworKwlyZXR1cm4gU1NIX0VSUl9GRUFUVVJFX1VOU1VQUE9SVEVEOworK30KKysK KytzdGF0aWMgaW50IHNzaF9nc3NfY29weV9wdWJsaWMoY29uc3Qgc3RydWN0IHNzaGtleSAqLCBz dHJ1Y3Qgc3Noa2V5ICopCisreworKwlyZXR1cm4gU1NIX0VSUl9GRUFUVVJFX1VOU1VQUE9SVEVE OworK30KKysKKytzdGF0aWMgaW50IHNzaF9nc3NfdmVyaWZ5KGNvbnN0IHN0cnVjdCBzc2hrZXkg KiwgY29uc3QgdV9jaGFyICosIHNpemVfdCwKKysJICAgIGNvbnN0IHVfY2hhciAqLCBzaXplX3Qs IGNvbnN0IGNoYXIgKiwgdV9pbnQsCisrCSAgICBzdHJ1Y3Qgc3Noa2V5X3NpZ19kZXRhaWxzICoq KQorK3sKKysJcmV0dXJuIFNTSF9FUlJfRkVBVFVSRV9VTlNVUFBPUlRFRDsKKyt9CisrCisrc3Rh dGljIGNvbnN0IHN0cnVjdCBzc2hrZXlfaW1wbF9mdW5jcyBzc2hrZXlfZ3NzX2Z1bmNzID0gewor KwkvKiAuc2l6ZSA9ICovCQlOVUxMLAorKwkvKiAuYWxsb2MgPSAqLwkJTlVMTCwKKysJLyogLmNs ZWFudXAgPSAqLwlOVUxMLAorKwkvKiAuZXF1YWwgPSAqLwkJc3NoX2dzc19lcXVhbCwKKysJLyog LnNzaF9zZXJpYWxpemVfcHVibGljID0gKi8gc3NoX2dzc19zZXJpYWxpemVfcHVibGljLAorKwkv KiAuc3NoX2Rlc2VyaWFsaXplX3B1YmxpYyA9ICovIHNzaF9nc3NfZGVzZXJpYWxpemVfcHVibGlj LAorKwkvKiAuc3NoX3NlcmlhbGl6ZV9wcml2YXRlID0gKi8gc3NoX2dzc19zZXJpYWxpemVfcHJp dmF0ZSwKKysJLyogLnNzaF9kZXNlcmlhbGl6ZV9wcml2YXRlID0gKi8gc3NoX2dzc19kZXNlcmlh bGl6ZV9wcml2YXRlLAorKwkvKiAuZ2VuZXJhdGUgPSAqLwlOVUxMLAorKwkvKiAuY29weV9wdWJs aWMgPSAqLwlzc2hfZ3NzX2NvcHlfcHVibGljLAorKwkvKiAuc2lnbiA9ICovCQlOVUxMLAorKwkv KiAudmVyaWZ5ID0gKi8JCXNzaF9nc3NfdmVyaWZ5LAorK307CisrCisrLyogVGhlIHN0cnVjdCBp cyBpbnRlbnRpb25hbGx5IGR1bW15IGFuZCBoYXMgbm8gZ3NzIGNhbGxzICovCisrc3RhdGljIGNv bnN0IHN0cnVjdCBzc2hrZXlfaW1wbCBzc2hrZXlfZ3NzX2tleF9pbXBsID0geworKwkvKiAubmFt ZSA9ICovCQkibnVsbCIsCisrCS8qIC5zaG9ydG5hbWUgPSAqLwkibnVsbCIsCisrCS8qIC5zaWdh bGcgPSAqLwkJTlVMTCwKKysJLyogLnR5cGUgPSAqLwkJS0VZX05VTEwsCisrCS8qIC5uaWQgPSAq LwkJMCwKKysJLyogLmNlcnQgPSAqLwkJMCwKKysJLyogLnNpZ29ubHkgPSAqLwkwLAorKwkvKiAu a2V5Yml0cyA9ICovCTAsIC8qIEZJWE1FICovCisrCS8qIC5mdW5jcyA9ICovCQkmc3Noa2V5X2dz c19mdW5jcywKKyt9OworKworIGNvbnN0IHN0cnVjdCBzc2hrZXlfaW1wbCAqIGNvbnN0IGtleWlt cGxzW10gPSB7CisgCSZzc2hrZXlfZWQyNTUxOV9pbXBsLAorIAkmc3Noa2V5X2VkMjU1MTlfY2Vy dF9pbXBsLAorQEAgLTE0Niw2ICsyMTUsNyBAQCBjb25zdCBzdHJ1Y3Qgc3Noa2V5X2ltcGwgKiBj b25zdCBrZXlpbXBsc1tdID0geworIAkmc3Noa2V5X3JzYV9zaGE1MTJfaW1wbCwKKyAJJnNzaGtl eV9yc2Ffc2hhNTEyX2NlcnRfaW1wbCwKKyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisrCSZz c2hrZXlfZ3NzX2tleF9pbXBsLAorIAlOVUxMCisgfTsKKyAKK0BAIC0zMjcsNyArMzk3LDcgQEAg c3Noa2V5X2FsZ19saXN0KGludCBjZXJ0c19vbmx5LCBpbnQgcGxhaW5fb25seSwgaW50IGluY2x1 ZGVfc2lnb25seSwgY2hhciBzZXApCisgCisgCWZvciAoaSA9IDA7IGtleWltcGxzW2ldICE9IE5V TEw7IGkrKykgeworIAkJaW1wbCA9IGtleWltcGxzW2ldOworLQkJaWYgKGltcGwtPm5hbWUgPT0g TlVMTCkKKysJCWlmIChpbXBsLT5uYW1lID09IE5VTEwgfHwgaW1wbC0+dHlwZSA9PSBLRVlfTlVM TCkKKyAJCQljb250aW51ZTsKKyAJCWlmICghaW5jbHVkZV9zaWdvbmx5ICYmIGltcGwtPnNpZ29u bHkpCisgCQkJY29udGludWU7CitkaWZmIC0tZ2l0IGEvc3Noa2V5LmggYi9zc2hrZXkuaAoraW5k ZXggYTljZGZjZDE5Li45ZWNlZDVkOGEgMTAwNjQ0CistLS0gYS9zc2hrZXkuaAorKysrIGIvc3No a2V5LmgKK0BAIC02Nyw2ICs2Nyw3IEBAIGVudW0gc3Noa2V5X3R5cGVzIHsKKyAJS0VZX0VDRFNB X1NLX0NFUlQsCisgCUtFWV9FRDI1NTE5X1NLLAorIAlLRVlfRUQyNTUxOV9TS19DRVJULAorKwlL RVlfTlVMTCwKKyAJS0VZX1VOU1BFQworIH07CisgCistLSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0 IGEvMDAxNC1vcGVuc3NoLTYuNnAxLWZvcmNlX2tyYi5wYXRjaCBiLzAwMTQtb3BlbnNzaC02LjZw MS1mb3JjZV9rcmIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZi OWY2YwotLS0gL2Rldi9udWxsCisrKyBiLzAwMTQtb3BlbnNzaC02LjZwMS1mb3JjZV9rcmIucGF0 Y2gKQEAgLTAsMCArMSwyOTYgQEAKK0Zyb20gYTAzMzk0NTNiOWIwYWM1MTU3NTJkMGM2MGZmZDli Y2I0NjU2M2U3MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZz a2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6Mjgg KzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNC81NF0gb3BlbnNzaC02LjZwMS1mb3JjZV9rcmIKKwor I2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9rZXJiZXJvc0BtaXQuZWR1L21zZzE3NTkxLmh0 bWwKKy0tLQorIGdzcy1zZXJ2LWtyYjUuYyB8IDE1NiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0KKyBzZXNzaW9uLmMgICAgICAgfCAgMjMgKysrKysrKwor IHNzaC1nc3MuaCAgICAgICB8ICAgNCArKworIHNzaGQuOCAgICAgICAgICB8ICAgNyArKysKKyA0 IGZpbGVzIGNoYW5nZWQsIDE4OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYg LS1naXQgYS9nc3Mtc2Vydi1rcmI1LmMgYi9nc3Mtc2Vydi1rcmI1LmMKK2luZGV4IGJlNDAxZmUw ZS4uYzI2MTc0OTI4IDEwMDY0NAorLS0tIGEvZ3NzLXNlcnYta3JiNS5jCisrKysgYi9nc3Mtc2Vy di1rcmI1LmMKK0BAIC0zMiw3ICszMiw5IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAor ICNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3Ry aW5nLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorICNpbmNsdWRlICJ4bWFsbG9jLmgiCisg I2luY2x1ZGUgInNzaGtleS5oIgorQEAgLTQ0LDYgKzQ2LDcgQEAKKyAKKyAjaW5jbHVkZSAic3No LWdzcy5oIgorIAorK2V4dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OworIGV4dGVybiBTZXJ2 ZXJPcHRpb25zIG9wdGlvbnM7CisgCisgI2lmZGVmIEhFSU1EQUwKK0BAIC01NSw2ICs1OCwxMyBA QCBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOworICMgaW5jbHVkZSA8Z3NzYXBpL2dzc2Fw aV9rcmI1Lmg+CisgI2VuZGlmCisgCisrLyogYWxsIGNvbW1hbmRzIGFyZSBhbGxvd2VkIGJ5IGRl ZmF1bHQgKi8KKytjaGFyICoqazV1c2Vyc19hbGxvd2VkX2NtZHMgPSBOVUxMOworKworK3N0YXRp YyBpbnQgc3NoX2dzc2FwaV9rNWxvZ2luX2V4aXN0cygpOworK3N0YXRpYyBpbnQgc3NoX2dzc2Fw aV9rcmI1X2NtZG9rKGtyYjVfcHJpbmNpcGFsLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwK KysgICAgaW50KTsKKysKKyBzdGF0aWMga3JiNV9jb250ZXh0IGtyYl9jb250ZXh0ID0gTlVMTDsK KyAKKyAvKiBJbml0aWFsaXNlIHRoZSBrcmI1IGxpYnJhcnksIGZvciB0aGUgc3R1ZmYgdGhhdCBH U1NBUEkgd29uJ3QgZG8gKi8KK0BAIC04Nyw2ICs5Nyw3IEBAIHNzaF9nc3NhcGlfa3JiNV91c2Vy b2soc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqbmFtZSkKKyAJa3JiNV9wcmluY2lw YWwgcHJpbmM7CisgCWludCByZXR2YWw7CisgCWNvbnN0IGNoYXIgKmVycm1zZzsKKysJaW50IGs1 bG9naW5fZXhpc3RzOworIAorIAlpZiAoc3NoX2dzc2FwaV9rcmI1X2luaXQoKSA9PSAwKQorIAkJ cmV0dXJuIDA7CitAQCAtOTgsMTAgKzEwOSwyMiBAQCBzc2hfZ3NzYXBpX2tyYjVfdXNlcm9rKHNz aF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKm5hbWUpCisgCQlrcmI1X2ZyZWVfZXJyb3Jf bWVzc2FnZShrcmJfY29udGV4dCwgZXJybXNnKTsKKyAJCXJldHVybiAwOworIAl9CistCWlmIChr cmI1X2t1c2Vyb2soa3JiX2NvbnRleHQsIHByaW5jLCBuYW1lKSkgeworKwkvKiBrcmI1X2t1c2Vy b2soKSByZXR1cm5zIDEgaWYgLms1bG9naW4gRE5FIGFuZCB0aGlzIGlzIHNlbGYtbG9naW4uCisr CSAqIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRvIGNoZWNrIC5rNXVzZXJzIGluIHRoYXQgY2FzZS4g Ki8KKysJazVsb2dpbl9leGlzdHMgPSBzc2hfZ3NzYXBpX2s1bG9naW5fZXhpc3RzKCk7CisrCS8q IE5PVEU6IC5rNWxvZ2luIGFuZCAuazV1c2VycyBtdXN0IG9wZW5lZCBhcyByb290LCBub3QgdGhl IHVzZXIsCisrCSAqIGJlY2F1c2UgaWYgdGhleSBhcmUgb24gYSBrcmI1LXByb3RlY3RlZCBmaWxl c3lzdGVtLCB1c2VyIGNyZWRlbnRpYWxzCisrCSAqIHRvIGFjY2VzcyB0aGVzZSBmaWxlcyBhcmVu J3QgYXZhaWxhYmxlIHlldC4gKi8KKysJaWYgKGtyYjVfa3VzZXJvayhrcmJfY29udGV4dCwgcHJp bmMsIG5hbWUpICYmIGs1bG9naW5fZXhpc3RzKSB7CisgCQlyZXR2YWwgPSAxOworIAkJbG9naXQo IkF1dGhvcml6ZWQgdG8gJXMsIGtyYjUgcHJpbmNpcGFsICVzIChrcmI1X2t1c2Vyb2spIiwKKyAJ CSAgICBuYW1lLCAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUpOworKwl9IGVsc2Ug aWYgKHNzaF9nc3NhcGlfa3JiNV9jbWRvayhwcmluYywgY2xpZW50LT5leHBvcnRlZG5hbWUudmFs dWUsCisrCQluYW1lLCBrNWxvZ2luX2V4aXN0cykpIHsKKysJCXJldHZhbCA9IDE7CisrCQlsb2dp dCgiQXV0aG9yaXplZCB0byAlcywga3JiNSBwcmluY2lwYWwgJXMgIgorKwkJICAgICIoc3NoX2dz c2FwaV9rcmI1X2NtZG9rKSIsCisrCQkgICAgbmFtZSwgKGNoYXIgKiljbGllbnQtPmRpc3BsYXlu YW1lLnZhbHVlKTsKKyAJfSBlbHNlCisgCQlyZXR2YWwgPSAwOworIAorQEAgLTEwOSw2ICsxMzIs MTM3IEBAIHNzaF9nc3NhcGlfa3JiNV91c2Vyb2soc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwg Y2hhciAqbmFtZSkKKyAJcmV0dXJuIHJldHZhbDsKKyB9CisgCisrLyogVGVzdCBmb3IgZXhpc3Rl bmNlIG9mIC5rNWxvZ2luLgorKyAqIFdlIG5lZWQgdGhpcyBhcyBwYXJ0IG9mIG91ciAuazV1c2Vy cyBjaGVjaywgYmVjYXVzZSBrcmI1X2t1c2Vyb2soKQorKyAqIHJldHVybnMgc3VjY2VzcyBpZiAu azVsb2dpbiBETkUgYW5kIHVzZXIgaXMgbG9nZ2luZyBpbiBhcyBoaW1zZWxmLgorKyAqIFdpdGgg Lms1bG9naW4gYWJzZW50IGFuZCAuazV1c2VycyBwcmVzZW50LCB3ZSBkb24ndCB3YW50IGFic2Vu Y2UKKysgKiBvZiAuazVsb2dpbiB0byBhdXRob3JpemUgc2VsZi1sb2dpbi4gIChhYnNlbmNlIG9m IGJvdGggaXMgcmVxdWlyZWQpCisrICogUmV0dXJucyAxIGlmIC5rNWxvZ2luIGlzIGF2YWlsYWJs ZSwgMCBvdGhlcndpc2UuCisrICovCisrc3RhdGljIGludAorK3NzaF9nc3NhcGlfazVsb2dpbl9l eGlzdHMoKQorK3sKKysJY2hhciBmaWxlW01BWFBBVEhMRU5dOworKwlzdHJ1Y3QgcGFzc3dkICpw dyA9IHRoZV9hdXRoY3R4dC0+cHc7CisrCisrCXNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwg IiVzLy5rNWxvZ2luIiwgcHctPnB3X2Rpcik7CisrCXJldHVybiBhY2Nlc3MoZmlsZSwgRl9PSykg PT0gMDsKKyt9CisrCisrLyogY2hlY2sgLms1dXNlcnMgZm9yIGxvZ2luIG9yIGNvbW1hbmQgYXV0 aG9yaXphdGlvbgorKyAqIFJldHVybnMgMSBpZiBwcmluY2lwYWwgaXMgYXV0aG9yaXplZCwgMCBv dGhlcndpc2UuCisrICogSWYgcHJpbmNpcGFsIGlzIGF1dGhvcml6ZWQsIChnbG9iYWwpIGs1dXNl cnNfYWxsb3dlZF9jbWRzIG1heSBiZSBwb3B1bGF0ZWQuCisrICovCisrc3RhdGljIGludAorK3Nz aF9nc3NhcGlfa3JiNV9jbWRvayhrcmI1X3ByaW5jaXBhbCBwcmluY2lwYWwsIGNvbnN0IGNoYXIg Km5hbWUsCisrICAgIGNvbnN0IGNoYXIgKmx1c2VyLCBpbnQgazVsb2dpbl9leGlzdHMpCisrewor KwlGSUxFICpmcDsKKysJY2hhciBmaWxlW01BWFBBVEhMRU5dOworKwljaGFyICpsaW5lID0gTlVM TDsKKysJY2hhciBrdXNlcls2NV07IC8qIG1hdGNoIGtyYjVfa3VzZXJvaygpICovCisrCXN0cnVj dCBzdGF0IHN0OworKwlzdHJ1Y3QgcGFzc3dkICpwdyA9IHRoZV9hdXRoY3R4dC0+cHc7CisrCWlu dCBmb3VuZF9wcmluY2lwYWwgPSAwOworKwlpbnQgbmNvbW1hbmRzID0gMCwgYWxsY29tbWFuZHMg PSAwOworKwl1X2xvbmcgbGluZW51bSA9IDA7CisrCXNpemVfdCBsaW5lc2l6ZSA9IDA7CisrCisr CXNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwgIiVzLy5rNXVzZXJzIiwgcHctPnB3X2Rpcik7 CisrCS8qIElmIGJvdGggLms1bG9naW4gYW5kIC5rNXVzZXJzIERORSwgc2VsZi1sb2dpbiBpcyBv ay4gKi8KKysJaWYgKCFrNWxvZ2luX2V4aXN0cyAmJiAoYWNjZXNzKGZpbGUsIEZfT0spID09IC0x KSkgeworKwkJcmV0dXJuIChrcmI1X2FuYW1lX3RvX2xvY2FsbmFtZShrcmJfY29udGV4dCwgcHJp bmNpcGFsLAorKwkJICAgIHNpemVvZihrdXNlciksIGt1c2VyKSA9PSAwKSAmJgorKwkJICAgIChz dHJjbXAoa3VzZXIsIGx1c2VyKSA9PSAwKTsKKysJfQorKwlpZiAoKGZwID0gZm9wZW4oZmlsZSwg InIiKSkgPT0gTlVMTCkgeworKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisrCQkvKiAybmQg YWNjZXNzIGNoZWNrIHRvIGVhc2UgZGVidWdnaW5nIGlmIGZpbGUgcGVybXMgYXJlIHdyb25nLgor KwkJICogQnV0IHdlIGRvbid0IHdhbnQgdG8gcmVwb3J0IHRoaXMgaWYgLms1dXNlcnMgc2ltcGx5 IERORS4gKi8KKysJCWlmIChhY2Nlc3MoZmlsZSwgRl9PSykgPT0gMCkgeworKwkJCWxvZ2l0KCJV c2VyICVzIGZvcGVuICVzIGZhaWxlZDogJXMiLAorKwkJCSAgICBwdy0+cHdfbmFtZSwgZmlsZSwg c3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKysJCX0KKysJCXJldHVybiAwOworKwl9CisrCS8qIC5r NXVzZXJzIG11c3QgYmUgb3duZWQgZWl0aGVyIGJ5IHRoZSB1c2VyIG9yIGJ5IHJvb3QgKi8KKysJ aWYgKGZzdGF0KGZpbGVubyhmcCksICZzdCkgPT0gLTEpIHsKKysJCS8qIGNhbiBoYXBwZW4sIGJ1 dCB2ZXJ5IHdpZXJkIGVycm9yIHNvIHJlcG9ydCBpdCAqLworKwkJbG9naXQoIlVzZXIgJXMgZnN0 YXQgJXMgZmFpbGVkOiAlcyIsCisrCQkgICAgcHctPnB3X25hbWUsIGZpbGUsIHN0cmVycm9yKGVy cm5vKSk7CisrCQlmY2xvc2UoZnApOworKwkJcmV0dXJuIDA7CisrCX0KKysJaWYgKCEoc3Quc3Rf dWlkID09IHB3LT5wd191aWQgfHwgc3Quc3RfdWlkID09IDApKSB7CisrCQlsb2dpdCgiVXNlciAl cyAlcyBpcyBub3Qgb3duZWQgYnkgcm9vdCBvciB1c2VyIiwKKysJCSAgICBwdy0+cHdfbmFtZSwg ZmlsZSk7CisrCQlmY2xvc2UoZnApOworKwkJcmV0dXJuIDA7CisrCX0KKysJLyogLms1dXNlcnMg bXVzdCBiZSBhIHJlZ3VsYXIgZmlsZS4gIGtyYjVfa3VzZXJvaygpIGRvZXNuJ3QgZG8gdGhpcwor KwkgICogY2hlY2ssIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJlIGRlZmljaWVudCBpZiB0aGV5IGFk ZCBhIGNoZWNrLiAqLworKwlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKKysJCWxvZ2l0KCJV c2VyICVzICVzIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIsIHB3LT5wd19uYW1lLCBmaWxlKTsKKysJ CWZjbG9zZShmcCk7CisrCQlyZXR1cm4gMDsKKysJfQorKwkvKiBmaWxlIGV4aXN0czsgaW5pdGlh bGl6ZSBrNXVzZXJzX2FsbG93ZWRfY21kcyAodG8gbm9uZSEpICovCisrCWs1dXNlcnNfYWxsb3dl ZF9jbWRzID0geGNhbGxvYygrK25jb21tYW5kcywKKysJICAgIHNpemVvZigqazV1c2Vyc19hbGxv d2VkX2NtZHMpKTsKKysKKysJLyogQ2hlY2sgZWFjaCBsaW5lLiAga3N1IGFsbG93cyB1bmxpbWl0 ZWQgbGVuZ3RoIGxpbmVzLiAqLworKwl3aGlsZSAoIWFsbGNvbW1hbmRzICYmIGdldGxpbmUoJmxp bmUsICZsaW5lc2l6ZSwgZnApICE9IC0xKSB7CisrCQlsaW5lbnVtKys7CisrCQljaGFyICp0b2tl bjsKKysKKysJCS8qIHdlIHBhcnNlIGp1c3QgbGlrZSBrc3UsIGV2ZW4gdGhvdWdoIHdlIGNvdWxk IGRvIGJldHRlciAqLworKwkJaWYgKCh0b2tlbiA9IHN0cnRvayhsaW5lLCAiIFx0XG4iKSkgPT0g TlVMTCkKKysJCQljb250aW51ZTsKKysJCWlmIChzdHJjbXAobmFtZSwgdG9rZW4pID09IDApIHsK KysJCQkvKiB3ZSBtYXRjaGVkIG9uIGNsaWVudCBwcmluY2lwYWwgKi8KKysJCQlmb3VuZF9wcmlu Y2lwYWwgPSAxOworKwkJCWlmICgodG9rZW4gPSBzdHJ0b2soTlVMTCwgIiBcdFxuIikpID09IE5V TEwpIHsKKysJCQkJLyogb25seSBzaGVsbCBpcyBhbGxvd2VkICovCisrCQkJCWs1dXNlcnNfYWxs b3dlZF9jbWRzW25jb21tYW5kcy0xXSA9CisrCQkJCSAgICB4c3RyZHVwKHB3LT5wd19zaGVsbCk7 CisrCQkJCWs1dXNlcnNfYWxsb3dlZF9jbWRzID0KKysJCQkJICAgIHhyZWFsbG9jYXJyYXkoazV1 c2Vyc19hbGxvd2VkX2NtZHMsICsrbmNvbW1hbmRzLAorKwkJCQkJc2l6ZW9mKCprNXVzZXJzX2Fs bG93ZWRfY21kcykpOworKwkJCQlicmVhazsKKysJCQl9CisrCQkJLyogcHJvY2VzcyB0aGUgYWxs b3dlZCBjb21tYW5kcyAqLworKwkJCXdoaWxlICh0b2tlbikgeworKwkJCQlpZiAoc3RyY21wKHRv a2VuLCAiKiIpID09IDApIHsKKysJCQkJCWFsbGNvbW1hbmRzID0gMTsKKysJCQkJCWJyZWFrOwor KwkJCQl9CisrCQkJCWs1dXNlcnNfYWxsb3dlZF9jbWRzW25jb21tYW5kcy0xXSA9CisrCQkJCSAg ICB4c3RyZHVwKHRva2VuKTsKKysJCQkJazV1c2Vyc19hbGxvd2VkX2NtZHMgPQorKwkJCQkgICAg eHJlYWxsb2NhcnJheShrNXVzZXJzX2FsbG93ZWRfY21kcywgKytuY29tbWFuZHMsCisrCQkJCQlz aXplb2YoKms1dXNlcnNfYWxsb3dlZF9jbWRzKSk7CisrCQkJCXRva2VuID0gc3RydG9rKE5VTEws ICIgXHRcbiIpOworKwkJCX0KKysJCX0KKysgICAgICAgfQorKwlmcmVlKGxpbmUpOworKwlpZiAo azV1c2Vyc19hbGxvd2VkX2NtZHMpIHsKKysJCS8qIHRlcm1pbmF0ZSB2ZWN0b3IgKi8KKysJCWs1 dXNlcnNfYWxsb3dlZF9jbWRzW25jb21tYW5kcy0xXSA9IE5VTEw7CisrCQkvKiBpZiBhbGwgY29t bWFuZHMgYXJlIGFsbG93ZWQsIGZyZWUgdmVjdG9yICovCisrCQlpZiAoYWxsY29tbWFuZHMpIHsK KysJCQlpbnQgaTsKKysJCQlmb3IgKGkgPSAwOyBpIDwgbmNvbW1hbmRzOyBpKyspIHsKKysJCQkJ ZnJlZShrNXVzZXJzX2FsbG93ZWRfY21kc1tpXSk7CisrCQkJfQorKwkJCWZyZWUoazV1c2Vyc19h bGxvd2VkX2NtZHMpOworKwkJCWs1dXNlcnNfYWxsb3dlZF9jbWRzID0gTlVMTDsKKysJCX0KKysJ fQorKwlmY2xvc2UoZnApOworKwlyZXR1cm4gZm91bmRfcHJpbmNpcGFsOworK30KKysgCisgCisg LyogVGhpcyB3cml0ZXMgb3V0IGFueSBmb3J3YXJkZWQgY3JlZGVudGlhbHMgZnJvbSB0aGUgc3Ry dWN0dXJlIHBvcHVsYXRlZAorICAqIGR1cmluZyB1c2VyYXV0aC4gQ2FsbGVkIGFmdGVyIHdlIGhh dmUgc2V0dWlkIHRvIHRoZSB1c2VyICovCitkaWZmIC0tZ2l0IGEvc2Vzc2lvbi5jIGIvc2Vzc2lv bi5jCitpbmRleCBmMTRkNWZhYjguLjYxMGEyY2M2ZiAxMDA2NDQKKy0tLSBhL3Nlc3Npb24uYwor KysrIGIvc2Vzc2lvbi5jCitAQCAtNjQzLDYgKzY0MywyOSBAQCBkb19leGVjKHN0cnVjdCBzc2gg KnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKKyAJCWNvbW1hbmQgPSBhdXRo X29wdHMtPmZvcmNlX2NvbW1hbmQ7CisgCQlmb3JjZWQgPSAiKGtleS1vcHRpb24pIjsKKyAJfQor KyNpZmRlZiBHU1NBUEkKKysjaWZkZWYgS1JCNSAvKiBrNXVzZXJzX2FsbG93ZWRfY21kcyBvbmx5 IGF2YWlsYWJsZSB3LyBHU1NBUEkrS1JCNSAqLworKwllbHNlIGlmIChrNXVzZXJzX2FsbG93ZWRf Y21kcykgeworKwkJY29uc3QgY2hhciAqbWF0Y2ggPSBjb21tYW5kOworKwkJaW50IGFsbG93ZWQg PSAwLCBpID0gMDsKKysKKysJCWlmICghbWF0Y2gpCisrCQkJbWF0Y2ggPSBzLT5wdy0+cHdfc2hl bGw7CisrCQl3aGlsZSAoazV1c2Vyc19hbGxvd2VkX2NtZHNbaV0pIHsKKysJCQlpZiAoc3RyY21w KG1hdGNoLCBrNXVzZXJzX2FsbG93ZWRfY21kc1tpKytdKSA9PSAwKSB7CisrCQkJCWRlYnVnKCJB bGxvd2VkIGNvbW1hbmQgJyUuOTAwcyciLCBtYXRjaCk7CisrCQkJCWFsbG93ZWQgPSAxOworKwkJ CQlicmVhazsKKysJCQl9CisrCQl9CisrCQlpZiAoIWFsbG93ZWQpIHsKKysJCQlkZWJ1ZygiY29t bWFuZCAnJS45MDBzJyBub3QgYWxsb3dlZCIsIG1hdGNoKTsKKysJCQlyZXR1cm4gMTsKKysJCX0K KysJfQorKyNlbmRpZgorKyNlbmRpZgorKworIAlzLT5mb3JjZWQgPSAwOworIAlpZiAoZm9yY2Vk ICE9IE5VTEwpIHsKKyAJCXMtPmZvcmNlZCA9IDE7CitkaWZmIC0tZ2l0IGEvc3NoLWdzcy5oIGIv c3NoLWdzcy5oCitpbmRleCA4ZWM0NTE5MjYuLmRiMzRkNzdmNCAxMDA2NDQKKy0tLSBhL3NzaC1n c3MuaAorKysrIGIvc3NoLWdzcy5oCitAQCAtNDksNiArNDksMTAgQEAKKyAjICBlbmRpZiAvKiAh SEFWRV9ERUNMX0dTU19DX05UXy4uLiAqLworIAorICMgZW5kaWYgLyogIUhFSU1EQUwgKi8KKysK KysvKiAuazV1c2VycyBzdXBwb3J0ICovCisrZXh0ZXJuIGNoYXIgKiprNXVzZXJzX2FsbG93ZWRf Y21kczsKKysKKyAjZW5kaWYgLyogS1JCNSAqLworIAorIC8qIGRyYWZ0LWlldGYtc2Vjc2gtZ3Nz a2V5ZXgtMDYgKi8KK2RpZmYgLS1naXQgYS9zc2hkLjggYi9zc2hkLjgKK2luZGV4IDAyMjZhODMw My4uZTJkOGZmMDAzIDEwMDY0NAorLS0tIGEvc3NoZC44CisrKysgYi9zc2hkLjgKK0BAIC0yODYs NiArMjg2LDcgQEAgRmluYWxseSwgdGhlIHNlcnZlciBhbmQgdGhlIGNsaWVudCBlbnRlciBhbiBh dXRoZW50aWNhdGlvbiBkaWFsb2cuCisgVGhlIGNsaWVudCB0cmllcyB0byBhdXRoZW50aWNhdGUg aXRzZWxmIHVzaW5nCisgaG9zdC1iYXNlZCBhdXRoZW50aWNhdGlvbiwKKyBwdWJsaWMga2V5IGF1 dGhlbnRpY2F0aW9uLAorK0dTU0FQSSBhdXRoZW50aWNhdGlvbiwKKyBjaGFsbGVuZ2UtcmVzcG9u c2UgYXV0aGVudGljYXRpb24sCisgb3IgcGFzc3dvcmQgYXV0aGVudGljYXRpb24uCisgLlBwCitA QCAtODc0LDYgKzg3NSwxMiBAQCBUaGlzIGZpbGUgaXMgdXNlZCBpbiBleGFjdGx5IHRoZSBzYW1l IHdheSBhcworIGJ1dCBhbGxvd3MgaG9zdC1iYXNlZCBhdXRoZW50aWNhdGlvbiB3aXRob3V0IHBl cm1pdHRpbmcgbG9naW4gd2l0aAorIHJsb2dpbi9yc2guCisgLlBwCisrLkl0IFBhIH4vLms1bG9n aW4KKysuSXQgUGEgfi8uazV1c2VycworK1RoZXNlIGZpbGVzIGVuZm9yY2UgR1NTQVBJL0tlcmJl cm9zIGF1dGhlbnRpY2F0aW9uIGFjY2VzcyBjb250cm9sLgorK0Z1cnRoZXIgZGV0YWlscyBhcmUg ZGVzY3JpYmVkIGluCisrLlhyIGtzdSAxIC4KKysuUHAKKyAuSXQgUGEgfi8uc3NoLworIFRoaXMg ZGlyZWN0b3J5IGlzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciBhbGwgdXNlci1zcGVjaWZpYyBj b25maWd1cmF0aW9uCisgYW5kIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLgorLS0gCisyLjUz LjAKKwoKZGlmZiAtLWdpdCBhLzAwMTQtb3BlbnNzaC03LjJwMi1rNWxvZ2luX2RpcmVjdG9yeS5w YXRjaCBiLzAwMTQtb3BlbnNzaC03LjJwMi1rNWxvZ2luX2RpcmVjdG9yeS5wYXRjaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwN2U1NS4uMDAwMDAwMAotLS0gYS8wMDE0LW9wZW5z c2gtNy4ycDItazVsb2dpbl9kaXJlY3RvcnkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIg KzAsMCBAQAotRnJvbSAwYjE5YzNkYWJiMWUyMzgzNzIzOGU5MDIzOGYxYWI1ZmEzYzk5ZGY4IE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRA Z21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVj dDogW1BBVENIIDE0LzUzXSBvcGVuc3NoLTcuMnAyLWs1bG9naW5fZGlyZWN0b3J5Ci0KLS0tLQot IGF1dGgta3JiNS5jICAgICB8IDE2ICsrKysrKysrKysrKysrKysKLSBhdXRoLmggICAgICAgICAg fCAgMiArKwotIGdzcy1zZXJ2LWtyYjUuYyB8IDIxICsrKysrKysrKysrKysrKysrKysrLQotIHNz aGQuOCAgICAgICAgICB8ICA0ICsrKysKLSA0IGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMo KyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL2F1dGgta3JiNS5jIGIvYXV0aC1rcmI1 LmMKLWluZGV4IDAzNTAzMjIyMS4uNDkxMGFhMzhhIDEwMDY0NAotLS0tIGEvYXV0aC1rcmI1LmMK LSsrKyBiL2F1dGgta3JiNS5jCi1AQCAtNDY1LDUgKzQ2NSwyMSBAQCBzc2hfa3JiNV9jY19uZXdf dW5pcXVlKGtyYjVfY29udGV4dCBjdHgsIGtyYjVfY2NhY2hlICpjY2FjaGUsIGludCAqbmVlZF9l bnZpcm9ubQotIAkJcmV0dXJuIChrcmI1X2NjX3Jlc29sdmUoY3R4LCBjY25hbWUsIGNjYWNoZSkp OwotIAl9Ci0gfQotKwotKy8qCi0rICogUmVhZHMgIGs1bG9naW5fZGlyZWN0b3J5ICBvcHRpb24g ZnJvbSB0aGUgIGtyYjUuY29uZgotKyAqLwotK2tyYjVfZXJyb3JfY29kZQotK3NzaF9rcmI1X2dl dF9rNWxvZ2luX2RpcmVjdG9yeShrcmI1X2NvbnRleHQgY3R4LCBjaGFyICoqazVsb2dpbl9kaXJl Y3RvcnkpIHsKLSsJcHJvZmlsZV90IHA7Ci0rCWludCByZXQgPSAwOwotKwotKwlyZXQgPSBrcmI1 X2dldF9wcm9maWxlKGN0eCwgJnApOwotKwlpZiAocmV0KQotKwkJcmV0dXJuIHJldDsKLSsKLSsJ cmV0dXJuIHByb2ZpbGVfZ2V0X3N0cmluZyhwLCAibGliZGVmYXVsdHMiLCAiazVsb2dpbl9kaXJl Y3RvcnkiLCBOVUxMLCBOVUxMLAotKwkJazVsb2dpbl9kaXJlY3RvcnkpOwotK30KLSAjZW5kaWYg LyogIUhFSU1EQUwgKi8KLSAjZW5kaWYgLyogS1JCNSAqLwotZGlmZiAtLWdpdCBhL2F1dGguaCBi L2F1dGguaAotaW5kZXggMTBlODhlMTFmLi4zOTE2MzAzNTAgMTAwNjQ0Ci0tLS0gYS9hdXRoLmgK LSsrKyBiL2F1dGguaAotQEAgLTI0Nyw2ICsyNDcsOCBAQCBpbnQJIHN5c19hdXRoX3Bhc3N3ZChz dHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7Ci0gCi0gI2lmIGRlZmluZWQoS1JCNSkgJiYgIWRl ZmluZWQoSEVJTURBTCkKLSBrcmI1X2Vycm9yX2NvZGUgc3NoX2tyYjVfY2NfbmV3X3VuaXF1ZShr cmI1X2NvbnRleHQsIGtyYjVfY2NhY2hlICosIGludCAqKTsKLStrcmI1X2Vycm9yX2NvZGUgc3No X2tyYjVfZ2V0X2s1bG9naW5fZGlyZWN0b3J5KGtyYjVfY29udGV4dCBjdHgsCi0rCWNoYXIgKipr NWxvZ2luX2RpcmVjdG9yeSk7Ci0gI2VuZGlmCi0gCi0gI2VuZGlmIC8qIEFVVEhfSCAqLwotZGlm ZiAtLWdpdCBhL2dzcy1zZXJ2LWtyYjUuYyBiL2dzcy1zZXJ2LWtyYjUuYwotaW5kZXggZGY1NTUx MmQzLi44MjBmNzk0Y2YgMTAwNjQ0Ci0tLS0gYS9nc3Mtc2Vydi1rcmI1LmMKLSsrKyBiL2dzcy1z ZXJ2LWtyYjUuYwotQEAgLTE0NCw4ICsxNDQsMjcgQEAgc3NoX2dzc2FwaV9rNWxvZ2luX2V4aXN0 cygpCi0gewotIAljaGFyIGZpbGVbTUFYUEFUSExFTl07Ci0gCXN0cnVjdCBwYXNzd2QgKnB3ID0g dGhlX2F1dGhjdHh0LT5wdzsKLSsJY2hhciAqazVsb2dpbl9kaXJlY3RvcnkgPSBOVUxMOwotKwlp bnQgcmV0ID0gMDsKLSsKLSsJcmV0ID0gc3NoX2tyYjVfZ2V0X2s1bG9naW5fZGlyZWN0b3J5KGty Yl9jb250ZXh0LCAmazVsb2dpbl9kaXJlY3RvcnkpOwotKwlkZWJ1ZzNfZigiazVsb2dpbl9kaXJl Y3RvcnkgPSAlcyAocnY9JWQpIiwgazVsb2dpbl9kaXJlY3RvcnksIHJldCk7Ci0rCWlmIChrNWxv Z2luX2RpcmVjdG9yeSA9PSBOVUxMIHx8IHJldCAhPSAwKSB7Ci0rCQkvKiBJZiBub3Qgc2V0LCB0 aGUgbGlicmFyeSB3aWxsIGxvb2sgZm9yICBrNWxvZ2luCi0rCQkgKiBmaWxlcyBpbiB0aGUgdXNl cidzIGhvbWUgZGlyZWN0b3J5LCB3aXRoIHRoZSBmaWxlbmFtZSAgLms1bG9naW4uCi0rCQkgKi8K LSsJCXNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwgIiVzLy5rNWxvZ2luIiwgcHctPnB3X2Rp cik7Ci0rCX0gZWxzZSB7Ci0rCQkvKiBJZiBzZXQsIHRoZSBsaWJyYXJ5IHdpbGwgbG9vayBmb3Ig YSBsb2NhbCB1c2VyJ3MgazVsb2dpbiBmaWxlCi0rCQkgKiB3aXRoaW4gdGhlIG5hbWVkIGRpcmVj dG9yeSwgd2l0aCBhIGZpbGVuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0rCQkgKiBsb2NhbCB1 c2VybmFtZS4KLSsJCSAqLwotKwkJc25wcmludGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCAiJXMlcyVz IiwgazVsb2dpbl9kaXJlY3RvcnksIAotKwkJCWs1bG9naW5fZGlyZWN0b3J5W3N0cmxlbihrNWxv Z2luX2RpcmVjdG9yeSktMV0gIT0gJy8nID8gIi8iIDogIiIsCi0rCQkJcHctPnB3X25hbWUpOwot Kwl9Ci0rCWRlYnVnX2YoIkNoZWNraW5nIGV4aXN0ZW5jZSBvZiBmaWxlICVzIiwgZmlsZSk7Ci0g Ci0tCXNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwgIiVzLy5rNWxvZ2luIiwgcHctPnB3X2Rp cik7Ci0gCXJldHVybiBhY2Nlc3MoZmlsZSwgRl9PSykgPT0gMDsKLSB9Ci0gCi1kaWZmIC0tZ2l0 IGEvc3NoZC44IGIvc3NoZC44Ci1pbmRleCBlMmQ4ZmYwMDMuLmZhMzNmNTIzMiAxMDA2NDQKLS0t LSBhL3NzaGQuOAotKysrIGIvc3NoZC44Ci1AQCAtODgwLDYgKzg4MCwxMCBAQCBybG9naW4vcnNo LgotIFRoZXNlIGZpbGVzIGVuZm9yY2UgR1NTQVBJL0tlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGFj Y2VzcyBjb250cm9sLgotIEZ1cnRoZXIgZGV0YWlscyBhcmUgZGVzY3JpYmVkIGluCi0gLlhyIGtz dSAxIC4KLStUaGUgbG9jYXRpb24gb2YgdGhlIGs1bG9naW4gZmlsZSBkZXBlbmRzIG9uIHRoZSBj b25maWd1cmF0aW9uIG9wdGlvbgotKy5DbSBrNWxvZ2luX2RpcmVjdG9yeQotK2luIHRoZQotKy5Y ciBrcmI1LmNvbmYgNSAuCi0gLlBwCi0gLkl0IFBhIH4vLnNzaC8KLSBUaGlzIGRpcmVjdG9yeSBp cyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgYWxsIHVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlv bgotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAwMTUtb3BlbnNzaC02LjZwMS1rdXNlcm9r LnBhdGNoIGIvMDAxNS1vcGVuc3NoLTYuNnAxLWt1c2Vyb2sucGF0Y2gKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGE0MDNjN2MuLjAwMDAwMDAKLS0tIGEvMDAxNS1vcGVuc3NoLTYuNnAx LWt1c2Vyb2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMTIgKzAsMCBAQAotRnJvbSBkMGMy ZThkZGRlNTQ4Yzc5MTQ0NTQ3MTUyYjUyMzM0NmFlOWYwMzU4IE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTog VGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDE1LzUzXSBv cGVuc3NoLTYuNnAxLWt1c2Vyb2sKLQotLS0tCi0gYXV0aC1rcmI1LmMgICAgIHwgIDIwICsrKysr KysrLQotIGdzcy1zZXJ2LWtyYjUuYyB8IDEwNiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0KLSBzZXJ2Y29uZi5jICAgICAgfCAgMTMgKysrKystCi0gc2Vy dmNvbmYuaCAgICAgIHwgICAxICsKLSBzc2hkX2NvbmZpZyAgICAgfCAgIDEgKwotIHNzaGRfY29u ZmlnLjUgICB8ICAgNSArKysKLSA2IGZpbGVzIGNoYW5nZWQsIDEzOSBpbnNlcnRpb25zKCspLCA3 IGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvYXV0aC1rcmI1LmMgYi9hdXRoLWtyYjUuYwot aW5kZXggNDkxMGFhMzhhLi5iOWMyNjFhMjQgMTAwNjQ0Ci0tLS0gYS9hdXRoLWtyYjUuYwotKysr IGIvYXV0aC1rcmI1LmMKLUBAIC01NSw2ICs1NSwyMSBAQAotIAotIGV4dGVybiBTZXJ2ZXJPcHRp b25zCSBvcHRpb25zOwotIAotK2ludAotK3NzaF9rcmI1X2t1c2Vyb2soa3JiNV9jb250ZXh0IGty YjVfY3R4LCBrcmI1X3ByaW5jaXBhbCBrcmI1X3VzZXIsIGNvbnN0IGNoYXIgKmNsaWVudCwKLSsg ICAgICAgICAgICAgICAgIGludCBrNWxvZ2luX2V4aXN0cykKLSt7Ci0rCWlmIChvcHRpb25zLnVz ZV9rdXNlcm9rIHx8ICFrNWxvZ2luX2V4aXN0cykKLSsJCXJldHVybiBrcmI1X2t1c2Vyb2soa3Ji NV9jdHgsIGtyYjVfdXNlciwgY2xpZW50KTsKLSsJZWxzZSB7Ci0rCQljaGFyIGt1c2VyWzY1XTsK LSsKLSsJCWlmIChrcmI1X2FuYW1lX3RvX2xvY2FsbmFtZShrcmI1X2N0eCwga3JiNV91c2VyLCBz aXplb2Yoa3VzZXIpLCBrdXNlcikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlyZXR1cm4gc3RyY21wKGt1 c2VyLCBjbGllbnQpID09IDA7Ci0rCX0KLSt9Ci0rCi0gc3RhdGljIGludAotIGtyYjVfaW5pdCh2 b2lkICpjb250ZXh0KQotIHsKLUBAIC0xNTgsOCArMTczLDkgQEAgYXV0aF9rcmI1X3Bhc3N3b3Jk KEF1dGhjdHh0ICphdXRoY3R4dCwgY29uc3QgY2hhciAqcGFzc3dvcmQpCi0gCWlmIChwcm9ibGVt KQotIAkJZ290byBvdXQ7Ci0gCi0tCWlmICgha3JiNV9rdXNlcm9rKGF1dGhjdHh0LT5rcmI1X2N0 eCwgYXV0aGN0eHQtPmtyYjVfdXNlciwKLS0JICAgIGF1dGhjdHh0LT5wdy0+cHdfbmFtZSkpIHsK LSsJLyogVXNlICFvcHRpb25zLnVzZV9rdXNlcm9rIGhlcmUgdG8gbWFrZSBzc2hfa3JiNV9rdXNl cm9rKCkgbm90Ci0rCSAqIGRlcGVuZCBvbiB0aGUgZXhpc3RhbmNlIG9mIC5rNWxvZ2luICovCi0r CWlmICghc3NoX2tyYjVfa3VzZXJvayhhdXRoY3R4dC0+a3JiNV9jdHgsIGF1dGhjdHh0LT5rcmI1 X3VzZXIsIGF1dGhjdHh0LT5wdy0+cHdfbmFtZSwgIW9wdGlvbnMudXNlX2t1c2Vyb2spKSB7Ci0g CQlwcm9ibGVtID0gLTE7Ci0gCQlnb3RvIG91dDsKLSAJfQotZGlmZiAtLWdpdCBhL2dzcy1zZXJ2 LWtyYjUuYyBiL2dzcy1zZXJ2LWtyYjUuYwotaW5kZXggODIwZjc5NGNmLi4xODdmYWY5MjkgMTAw NjQ0Ci0tLS0gYS9nc3Mtc2Vydi1rcmI1LmMKLSsrKyBiL2dzcy1zZXJ2LWtyYjUuYwotQEAgLTY2 LDYgKzY2LDcgQEAgc3RhdGljIGludCBzc2hfZ3NzYXBpX2tyYjVfY21kb2soa3JiNV9wcmluY2lw YWwsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAotICAgICBpbnQpOwotIAotIHN0YXRpYyBr cmI1X2NvbnRleHQga3JiX2NvbnRleHQgPSBOVUxMOwotK2V4dGVybiBpbnQgc3NoX2tyYjVfa3Vz ZXJvayhrcmI1X2NvbnRleHQsIGtyYjVfcHJpbmNpcGFsLCBjb25zdCBjaGFyICosIGludCk7Ci0g Ci0gLyogSW5pdGlhbGlzZSB0aGUga3JiNSBsaWJyYXJ5LCBmb3IgdGhlIHN0dWZmIHRoYXQgR1NT QVBJIHdvbid0IGRvICovCi0gCi1AQCAtOTEsNiArOTIsMTAzIEBAIHNzaF9nc3NhcGlfa3JiNV9p bml0KHZvaWQpCi0gICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGlzIE9LIHRvIGxvZyBpbiwg b3RoZXJ3aXNlIHJldHVybnMgMAotICAqLwotIAotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZSBmdW5j dGlvbiBpcyB0byBmaW5kIG91dCBpZiBhIEtlcmJlcm9zIHByaW5jaXBhbCBpcwotKyAqIGFsbG93 ZWQgdG8gbG9nIGluIGFzIHRoZSBnaXZlbiBsb2NhbCB1c2VyLiBUaGlzIGlzIGEgZ2VuZXJhbCBw cm9ibGVtIHdpdGgKLSsgKiBLZXJiZXJpemVkIHNlcnZpY2VzIGJlY2F1c2UgYnkgZGVzaWduIHRo ZSBLZXJiZXJvcyBwcmluY2lwYWxzIGFyZQotKyAqIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgZnJv bSB0aGUgbG9jYWwgdXNlciBuYW1lcy4gVGhpcyBpcyBvbmUgb2YgdGhlCi0rICogcmVhc29ucyB3 aHkgS2VyYmVyb3MgaXMgd29ya2luZyB3ZWxsIG9uIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVt cyBsaWtlCi0rICogV2luZG93cyBhbmQgVU5JWC9MaW51eC4gTmV2ZXJ0aGVsZXNzIGEgcmVsYXRp b25zaGlwIGJldHdlZW4gYSBLZXJiZXJvcwotKyAqIHByaW5jaXBhbCBhbmQgYSBsb2NhbCB1c2Vy IG5hbWUgbXVzdCBiZSBlc3RhYmxpc2hlZCBiZWNhdXNlIG90aGVyd2lzZSBldmVyeQotKyAqIGFj Y2VzcyB3b3VsZCBiZSBncmFudGVkIGZvciBldmVyeSBwcmluY2lwYWwgd2l0aCBhIHZhbGlkIHRp Y2tldC4KLSsgKgotKyAqIFNpbmNlIGl0IGlzIGEgZ2VuZXJhbCBpc3N1ZSBsaWJrcmI1IHByb3Zp ZGVzIHNvbWUgZnVuY3Rpb25zIGZvcgotKyAqIGFwcGxpY2F0aW9ucyB0byBmaW5kIG91dCBhYm91 dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIEtlcmJlcm9zCi0rICogcHJpbmNpcGFsIGFu ZCBhIGxvY2FsIHVzZXIgbmFtZS4gVGhleSBhcmUga3JiNV9rdXNlcm9rKCkgYW5kCi0rICoga3Ji NV9hbmFtZV90b19sb2NhbG5hbWUoKS4KLSsgKgotKyAqIGtyYjVfa3VzZXJvaygpIGNhbiBiZSB1 c2VkIHRvICJEZXRlcm1pbmUgaWYgYSBwcmluY2lwYWwgaXMgYXV0aG9yaXplZCB0bwotKyAqIGxv ZyBpbiBhcyBhIGxvY2FsIHVzZXIiIChmcm9tIHRoZSBNSVQgS2VyYmVyb3MgZG9jdW1lbnRhdGlv biBvZiB0aGlzCi0rICogZnVuY3Rpb24pLiBXaGljaCBpcyBleGFjdGx5IHdoYXQgd2UgYXJlIGxv b2tpbmcgZm9yIGFuZCBzaG91bGQgYmUgdGhlCi0rICogcHJlZmVycmVkIGNob2ljZS4gSXQgYWNj ZXB0cyB0aGUgS2VyYmVyb3MgcHJpbmNpcGFsIGFuZCBhIGxvY2FsIHVzZXIgbmFtZQotKyAqIGFu ZCBsZXQgbGlia3JiNSBvciBpdHMgcGx1Z2lucyBkZXRlcm1pbmUgaWYgdGhleSByZWxhdGUgdG8g ZWFjaCBvdGhlciBvcgotKyAqIG5vdC4KLSsgKgotKyAqIGtyYjVfYW5hbWVfdG9fbG9jYWxuYW1l KCkgY2FuIHVzZSB1c2VkIHRvICJDb252ZXJ0IGEgcHJpbmNpcGFsIG5hbWUgdG8gYQotKyAqIGxv Y2FsIG5hbWUiIChmcm9tIHRoZSBNSVQgS2VyYmVyb3MgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1 bmN0aW9uKS4gSXQKLSsgKiBhY2NlcHRzIGEgS2VyYmVyb3MgcHJpbmNpcGxlIGFuZCByZXR1cm5z IGEgbG9jYWwgbmFtZSBhbmQgaXQgaXMgdXAgdG8gdGhlCi0rICogYXBwbGljYXRpb24gdG8gZG8g YW55IGFkZGl0aW9uYWwgY2hlY2tzLiBUaGVyZSBhcmUgdHdvIGlzc3VlcyB1c2luZwotKyAqIGty YjVfYW5hbWVfdG9fbG9jYWxuYW1lKCkuIEZpcnN0LCBzaW5jZSBQT1NJWCB1c2VyIG5hbWVzIGFy ZSBjYXNlCi0rICogc2Vuc2l0aXZlLCB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiBpbiBnZW5lcmFs IGhhcyBubyBvdGhlciBjaG9pY2UgdGhhbgotKyAqIGRvaW5nIGEgY2FzZS1zZW5zaXRpdmUgc3Ry aW5nIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgbmFtZSByZXR1cm5lZCBieQotKyAqIGtyYjVfYW5h bWVfdG9fbG9jYWxuYW1lKCkgYW5kIHRoZSBuYW1lIHVzZWQgYXQgdGhlIGxvZ2luIHByb21wdC4g V2hlbiB0aGUKLSsgKiB1c2VycyBhcmUgcHJvdmlkZWQgYnkgYSBjYXNlIGluLXNlbnNpdGl2ZSBz ZXJ2ZXIsIGUuZy4gQWN0aXZlIERpcmVjdG9yeSwKLSsgKiB0aGlzIG1pZ2h0IGxlYWQgdG8gbG9n aW4gZmFpbHVyZXMgYmVjYXVzZSB0aGUgdXNlciB0eXBpbmcgdGhlIG5hbWUgYXQgdGhlCi0rICog bG9naW4gcHJvbXB0IG1pZ2h0IG5vdCBiZSBhd2FyZSBvZiB0aGUgcmlnaHQgY2FzZS4gQW5vdGhl ciBpc3N1ZSBtaWdodCBiZQotKyAqIGNhdXNlZCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYWxpYXMg bmFtZXMgYXZhaWxhYmxlIGZvciBhIHNpbmdsZSB1c2VyLiBFLmcuCi0rICogdGhlIGNhbm9uaWNh bCBuYW1lIG9mIGEgdXNlciBpcyB1c2VyQGdyb3VwLmRlcGFydG1lbnQuZXhhbXBsZS5jb20gYnV0 IHRoZXJlCi0rICogZXhpc3RzIGEgc2hvcnRlciBsb2dpbiBuYW1lLCBlLmcuIHVzZXJAZXhhbXBs ZS5jb20sIHRvIHNhZmUgdHlwaW5nIGF0IHRoZQotKyAqIGxvZ2luIHByb21wdC4gSGVyZSBrcmI1 X2FuYW1lX3RvX2xvY2FsbmFtZSgpIGNhbiBvbmx5IHJldHVybiB0aGUgY2Fub25pY2FsCi0rICog bmFtZSwgYnV0IGlmIHRoZSBzaG9ydCBhbGlhcyBpcyB1c2VkIGF0IHRoZSBsb2dpbiBwcm9tcHQg YXV0aGVudGljYXRpb24KLSsgKiB3aWxsIGZhaWwgYXMgd2VsbC4gQWxsIHRoaXMgY2FuIGJlIGF2 b2lkZWQgYnkgdXNpbmcga3JiNV9rdXNlcm9rKCkgYW5kCi0rICogY29uZmlndXJpbmcga3JiNS5j b25mIG9yIHVzaW5nIGEgc3VpdGFibGUgcGx1Z2luIHRvIG1lZXQgdGhlIG5lZWRzIG9mIHRoZQot KyAqIGdpdmVuIGVudmlyb25tZW50LgotKyAqCi0rICogVGhlIEZlZG9yYSBhbmQgUkhFTCB2ZXJz aW9uIG9mIG9wZW5zc2ggY29udGFpbiB0d28gcGF0Y2hlcyB3aGljaCBtb2RpZnkgdGhlCi0rICog YWNjZXNzIGNvbnRyb2wgYmVoYXZpb3I6Ci0rICogIC0gb3BlbnNzaC02LjZwMS1rdXNlcm9rLnBh dGNoCi0rICogIC0gb3BlbnNzaC02LjZwMS1mb3JjZV9rcmIucGF0Y2gKLSsgKgotKyAqIG9wZW5z c2gtNi42cDEta3VzZXJvay5wYXRjaCBhZGRzIGEgbmV3IG9wdGlvbiBLZXJiZXJvc1VzZUt1c2Vy b2sgZm9yCi0rICogc3NoZF9jb25maWcgd2hpY2ggY29udHJvbHMgaWYga3JiNV9rdXNlcm9rKCkg aXMgdXNlZCB0byBjaGVjayBpZiB0aGUKLSsgKiBwcmluY2lwbGUgaXMgYXV0aG9yaXplZCBvciBp ZiBrcmI1X2FuYW1lX3RvX2xvY2FsbmFtZSgpIHNob3VsZCBiZSB1c2VkLgotKyAqIFRoZSByZWFz b24gdG8gYWRkIHRoaXMgcGF0Y2ggd2FzIHRoYXQga3JiNV9rdXNlcm9rKCkgYnkgZGVmYXVsdCBj aGVja3MgaWYKLSsgKiBhIC5rNWxvZ2luIGZpbGUgZXhpdHMgaW4gdGhlIHVzZXJzIGhvbWUtZGly ZWN0b3J5LiBXaXRoIHRoaXMgdGhlIHVzZXIgY2FuCi0rICogZ2l2ZSBhY2Nlc3MgdG8gaGlzIGFj Y291bnQgZm9yIGFueSBnaXZlbiBwcmluY2lwYWwgd2hpY2ggbWlnaHQgYmUKLSsgKiBpbiB2aW9s YXRpb24gd2l0aCBjb21wYW55IHBvbGljaWVzIGFuZCBpdCB3b3VsZCBiZSB1c2VmdWwgaWYgdGhp cyBjYW4gYmUKLSsgKiByZWplY3RlZC4gTmV2ZXJ0aGVsZXNzIHRoZSBwYXRjaCBpZ25vcmVzIHRo ZSBmYWN0IHRoYXQga3JiNV9rdXNlcm9rKCkgZG9lcwotKyAqIG5vIG9ubHkgY2hlY2sgLms1bG9n aW4gYnV0IG90aGVyIHNvdXJjZXMgYXMgd2VsbCBhbmQgY2hlY2tpbmcgLms1bG9naW4gY2FuCi0r ICogYmUgZGlzYWJsZWQgZm9yIGFsbCBhcHBsaWNhdGlvbnMgaW4ga3JiNS5jb25mIGFzIHdlbGwu IFdpdGggdGhpcyBuZXcKLSsgKiBvcHRpb24gS2VyYmVyb3NVc2VLdXNlcm9rIHNldCB0byAnbm8n IChhbmQgdGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgUkhFTDcKLSsgKiBhbmQgRmVkb3JhIDIxKSBv cGVuc3NoIGNhbiBvbmx5IHVzZSBrcmI1X2FuYW1lX3RvX2xvY2FsbmFtZSgpIHdpdGggdGhlCi0r ICogcmVzdHJpY3Rpb25zIG1lbnRpb25lZCBhYm92ZS4KLSsgKgotKyAqIG9wZW5zc2gtNi42cDEt Zm9yY2Vfa3JiLnBhdGNoIGFkZHMgYSBrc3UgbGlrZSBiZWhhdmlvdXIgdG8gc3NoLCBpLmUuIHdo ZW4KLSsgKiB1c2luZyBHU1NBUEkgYXV0aGVudGljYXRpb24gb25seSBjb21tYW5kcyBjb25maWd1 cmVkIGluIHRoZSAuazV1c2VyIGNhbiBiZQotKyAqIGV4ZWN1dGVkLiBIZXJlIHRoZSB3cm9uZyBh c3N1bXB0aW9uIHRoYXQga3JiNV9rdXNlcm9rKCkgb25seSBjaGVja3MKLSsgKiAuazVsb2dpbiBp cyBtYWRlIGFzIHdlbGwuIEluIGNvbnRyYXN0IGtzdSBjaGVja3MgLms1bG9naW4gZGlyZWN0bHkg YW5kCi0rICogZG9lcyBub3QgdXNlIGtyYjVfa3VzZXJvaygpIHdoaWNoIG1pZ2h0IGJlIG1vcmUg dXNlZnVsIGZvciB0aGUgZ2l2ZW4KLSsgKiBwdXJwb3NlLiBBZGRpdGlvbmFsbHkgdGhpcyBwYXRj aCBpcyBub3Qgc3luY2VkIHdpdGgKLSsgKiBvcGVuc3NoLTYuNnAxLWt1c2Vyb2sucGF0Y2guCi0r ICoKLSsgKiBUaGUgY3VycmVudCBwYXRjaCB0cmllcyB0byByZXN0b3JlIHRoZSB1c2FnZSBvZiBr cmI1X2t1c2Vyb2soKSBzbyB0aGF0IGUuZy4KLSsgKiBsb2NhbGF1dGggcGx1Z2lucyBjYW4gYmUg dXNlZC4gSXQgZG9lcyBzbyBieSBhZGRpbmcgYSBmb3J0aCBwYXJhbWV0ZXIgdG8KLSsgKiBzc2hf a3JiNV9rdXNlcm9rKCkgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgLms1bG9naW4gZXhpc3RzIG9y IG5vdC4gSWYgaXQKLSsgKiBkb2VzIG5vdCBleGlzdHMga3JiNV9rdXNlcm9rKCkgaXMgY2FsbGVk IGV2ZW4gaWYgS2VyYmVyb3NVc2VLdXNlcm9rIGlzIHNldAotKyAqIHRvICdubycgYmVjYXVzZSB0 aGUgaW50ZW50IG9mIHRoZSBvcHRpb24gaXMgdG8gbm90IGNoZWNrIC5rNWxvZ2luIGFuZCBpZiBp dAotKyAqIGRvZXMgbm90IGV4aXN0cyBrcmI1X2t1c2Vyb2soKSByZXR1cm5zIGEgcmVzdWx0IHdp dGhvdXQgY2hlY2tpbmcgLms1bG9naW4uCi0rICogSWYgLms1bG9naW4gZG9lcyBleGlzdHMgYW5k IEtlcmJlcm9zVXNlS3VzZXJvayBpcyAnbm8nIHdlIGZhbGwgYmFjayB0bwotKyAqIGtyYjVfYW5h bWVfdG9fbG9jYWxuYW1lKCkuIFRoaXMgaXMgaW4gbXkgcG9pbnQgb2YgdmlldyBhbiBhY2NlcHRh YmxlCi0rICogbGltaXRhdGlvbiBhbmQgZG9lcyBub3QgYnJlYWsgdGhlIGN1cnJlbnQgYmVoYXZp b3VyLgotKyAqCi0rICogQWRkaXRpb25hbGx5IHdpdGggdGhpcyBwYXRjaCBzc2hfa3JiNV9rdXNl cm9rKCkgaXMgY2FsbGVkIGluCi0rICogc3NoX2dzc2FwaV9rcmI1X2NtZG9rKCkgaW5zdGVhZCBv ZiBvbmx5IGtyYjVfYW5hbWVfdG9fbG9jYWxuYW1lKCkgaXMKLSsgKiBuZWl0aGVyIC5rNWxvZ2lu IG5vciAuazV1c2VycyBleGlzdHMgdG8gYWxsb3cgcGx1Z2luIGV2YWx1YXRpb24gdmlhCi0rICog a3JiNV9rdXNlcm9rKCkgYXMgd2VsbC4KLSsgKgotKyAqIEkgdHJpZWQgdG8ga2VlcCB0aGUgcGF0 Y2ggYXMgbWluaW1hbCBhcyBwb3NzaWJsZSwgbmV2ZXJ0aGVsZXNzIEkgc2VlIHNvbWUKLSsgKiBh cmVhcyBmb3IgaW1wcm92ZW1lbnQgd2hpY2gsIGlmIHRoZXkgbWFrZSBzZW5zZSwgaGF2ZSB0byBi ZSBldmFsdWF0ZWQKLSsgKiBjYXJlZnVsbHkgYmVjYXVzZSB0aGV5IG1pZ2h0IGNoYW5nZSBleGlz dGluZyBiZWhhdmlvdXIgYW5kIGNhdXNlIGJyZWFrcwotKyAqIGR1cmluZyB1cGdyYWRlOgotKyAq IC0gSSB3b25kZXIgaWYgZGlzYWJsaW5nIC5rNWxvZ2luIHVzYWdlIG1ha2Ugc2Vuc2UgaW4gc3No ZCBvciBpZiBpdCBzaG91bGQKLSsgKiAgIGJlIGJldHRlciBkaXNhYmxlZCBnbG9iYWxseSBpbiBr cmI1LmNvbmYKLSsgKiAtIGlmIHJlYWxseSBuZWVkZWQgb3BlbnNzaC02LjZwMS1rdXNlcm9rLnBh dGNoIHNob3VsZCBiZSBmaXhlZCB0byByZWFsbHkKLSsgKiAgIG9ubHkgZGlzYWJsZSBjaGVja2lu ZyAuazVsb2dpbiBhbmQgbWF5YmUgLms1dXNlcnMKLSsgKiAtIHRoZSBrc3UgYmVoYXZpb3VyIHNo b3VsZCBiZSBjb25maWd1cmFibGUgYW5kIG1heWJlIGNoZWNrIHRoZSAuazVsb2dpbiBhbmQKLSsg KiAgIC5rNXVzZXJzIGZpbGVzIGRpcmVjdGx5IGxpa2Uga3N1IGl0c2VsZiBkb2VzCi0rICogLSB0 byBtYWtlIGtyYjVfYW5hbWVfdG9fbG9jYWxuYW1lKCkgbW9yZSB1c2VmdWwgYW4gb3B0aW9uIGZv ciBzc2hkIHRvIHVzZQotKyAqICAgdGhlIGNhbm9uaWNhbCBuYW1lICh0aGUgb25lIHJldHVybmVk IGJ5IGdldHB3bmFtKCkpIGluc3RlYWQgb2YgdGhlIG5hbWUKLSsgKiAgIGdpdmVuIGF0IHRoZSBs b2dpbiBwcm9tcHQgbWlnaHQgYmUgdXNlZnVsICovCi0rCi0gc3RhdGljIGludAotIHNzaF9nc3Nh cGlfa3JiNV91c2Vyb2soc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqbmFtZSkKLSB7 Ci1AQCAtMTE1LDcgKzIxMyw4IEBAIHNzaF9nc3NhcGlfa3JiNV91c2Vyb2soc3NoX2dzc2FwaV9j bGllbnQgKmNsaWVudCwgY2hhciAqbmFtZSkKLSAJLyogTk9URTogLms1bG9naW4gYW5kIC5rNXVz ZXJzIG11c3Qgb3BlbmVkIGFzIHJvb3QsIG5vdCB0aGUgdXNlciwKLSAJICogYmVjYXVzZSBpZiB0 aGV5IGFyZSBvbiBhIGtyYjUtcHJvdGVjdGVkIGZpbGVzeXN0ZW0sIHVzZXIgY3JlZGVudGlhbHMK LSAJICogdG8gYWNjZXNzIHRoZXNlIGZpbGVzIGFyZW4ndCBhdmFpbGFibGUgeWV0LiAqLwotLQlp ZiAoa3JiNV9rdXNlcm9rKGtyYl9jb250ZXh0LCBwcmluYywgbmFtZSkgJiYgazVsb2dpbl9leGlz dHMpIHsKLSsJaWYgKGs1bG9naW5fZXhpc3RzICYmCi0rCSAgICBzc2hfa3JiNV9rdXNlcm9rKGty Yl9jb250ZXh0LCBwcmluYywgbmFtZSwgazVsb2dpbl9leGlzdHMpKSB7Ci0gCQlyZXR2YWwgPSAx OwotIAkJbG9naXQoIkF1dGhvcml6ZWQgdG8gJXMsIGtyYjUgcHJpbmNpcGFsICVzIChrcmI1X2t1 c2Vyb2spIiwKLSAJCSAgICBuYW1lLCAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUp OwotQEAgLTE5MCw5ICsyODksOCBAQCBzc2hfZ3NzYXBpX2tyYjVfY21kb2soa3JiNV9wcmluY2lw YWwgcHJpbmNpcGFsLCBjb25zdCBjaGFyICpuYW1lLAotIAlzbnByaW50ZihmaWxlLCBzaXplb2Yo ZmlsZSksICIlcy8uazV1c2VycyIsIHB3LT5wd19kaXIpOwotIAkvKiBJZiBib3RoIC5rNWxvZ2lu IGFuZCAuazV1c2VycyBETkUsIHNlbGYtbG9naW4gaXMgb2suICovCi0gCWlmICghazVsb2dpbl9l eGlzdHMgJiYgKGFjY2VzcyhmaWxlLCBGX09LKSA9PSAtMSkpIHsKLS0JCXJldHVybiAoa3JiNV9h bmFtZV90b19sb2NhbG5hbWUoa3JiX2NvbnRleHQsIHByaW5jaXBhbCwKLS0JCSAgICBzaXplb2Yo a3VzZXIpLCBrdXNlcikgPT0gMCkgJiYKLS0JCSAgICAoc3RyY21wKGt1c2VyLCBsdXNlcikgPT0g MCk7Ci0rICAgICAgICAgICAgICAgIHJldHVybiBzc2hfa3JiNV9rdXNlcm9rKGtyYl9jb250ZXh0 LCBwcmluY2lwYWwsIGx1c2VyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrNWxvZ2luX2V4aXN0cyk7Ci0gCX0KLSAJaWYgKChmcCA9IGZvcGVuKGZpbGUsICJyIikp ID09IE5VTEwpIHsKLSAJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOwotZGlmZiAtLWdpdCBhL3Nl cnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1pbmRleCA3YmYxNTA3ZGYuLjhmNGIyYjQzZSAxMDA2NDQK LS0tLSBhL3NlcnZjb25mLmMKLSsrKyBiL3NlcnZjb25mLmMKLUBAIC0xNDMsNiArMTQzLDcgQEAg aW5pdGlhbGl6ZV9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotIAlvcHRp b25zLT5nc3Nfc3RyaWN0X2FjY2VwdG9yID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19zdG9yZV9yZWtl eSA9IC0xOwotIAlvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSBOVUxMOwotKwlvcHRpb25z LT51c2Vfa3VzZXJvayA9IC0xOwotIAlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9 IC0xOwotIAlvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPSAtMTsKLSAJ b3B0aW9ucy0+cGVybWl0X2VtcHR5X3Bhc3N3ZCA9IC0xOwotQEAgLTM5Myw2ICszOTQsOCBAQCBm aWxsX2RlZmF1bHRfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKLSAJaWYg KG9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9PSBOVUxMKQotIAkJb3B0aW9ucy0+Z3NzX2tl eF9hbGdvcml0aG1zID0gc3RyZHVwKEdTU19LRVhfREVGQVVMVF9LRVgpOwotICNlbmRpZgotKwlp ZiAob3B0aW9ucy0+dXNlX2t1c2Vyb2sgPT0gLTEpCi0rCQlvcHRpb25zLT51c2Vfa3VzZXJvayA9 IDE7Ci0gCWlmIChvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9PSAtMSkKLSAJCW9w dGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID0gMTsKLSAJaWYgKG9wdGlvbnMtPmtiZF9p bnRlcmFjdGl2ZV9hdXRoZW50aWNhdGlvbiA9PSAtMSkKLUBAIC01NjEsNyArNTY0LDcgQEAgdHlw ZWRlZiBlbnVtIHsKLSAJc1BvcnQsIHNIb3N0S2V5RmlsZSwgc0xvZ2luR3JhY2VUaW1lLAotIAlz UGVybWl0Um9vdExvZ2luLCBzTG9nRmFjaWxpdHksIHNMb2dMZXZlbCwgc0xvZ1ZlcmJvc2UsCi0g CXNLZXJiZXJvc0F1dGhlbnRpY2F0aW9uLCBzS2VyYmVyb3NPckxvY2FsUGFzc3dkLCBzS2VyYmVy b3NUaWNrZXRDbGVhbnVwLAotLQlzS2VyYmVyb3NHZXRBRlNUb2tlbiwgc0tlcmJlcm9zVW5pcXVl Q0NhY2hlLCBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwKLSsJc0tlcmJlcm9zR2V0QUZTVG9rZW4s IHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgc0tlcmJlcm9zVXNlS3VzZXJvaywgc1Bhc3N3b3JkQXV0 aGVudGljYXRpb24sCi0gCXNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLCBzTGlzdGVuQWRk cmVzcywgc0FkZHJlc3NGYW1pbHksCi0gCXNQcmludE1vdGQsIHNQcmludExhc3RMb2csIHNJZ25v cmVSaG9zdHMsCi0gCXNYMTFGb3J3YXJkaW5nLCBzWDExRGlzcGxheU9mZnNldCwgc1gxMVVzZUxv Y2FsaG9zdCwKLUBAIC02NTMsMTIgKzY1NiwxNCBAQCBzdGF0aWMgc3RydWN0IHsKLSAJeyAia2Vy YmVyb3NnZXRhZnN0b2tlbiIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotICNlbmRp ZgotIAl7ICJrZXJiZXJvc3VuaXF1ZWNjYWNoZSIsIHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgU1NI Q0ZHX0dMT0JBTCB9LAotKwl7ICJrZXJiZXJvc3VzZWt1c2Vyb2siLCBzS2VyYmVyb3NVc2VLdXNl cm9rLCBTU0hDRkdfQUxMIH0sCi0gI2Vsc2UKLSAJeyAia2VyYmVyb3NhdXRoZW50aWNhdGlvbiIs IHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJrZXJiZXJvc29ybG9jYWxwYXNzd2Qi LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAia2VyYmVyb3N0aWNrZXRjbGVh bnVwIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImtlcmJlcm9zZ2V0YWZz dG9rZW4iLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAia2VyYmVyb3N1bmlx dWVjY2FjaGUiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAia2VyYmVyb3N1 c2VrdXNlcm9rIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCi0gI2VuZGlmCi0gCXsgImtl cmJlcm9zdGd0cGFzc2luZyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJh ZnN0b2tlbnBhc3NpbmciLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLUBAIC0yNDMx LDYgKzI0MzYsMTAgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0 aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwKLSAJCX0KLSAJCWJyZWFrOwotIAotKwljYXNlIHNL ZXJiZXJvc1VzZUt1c2Vyb2s6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+dXNlX2t1c2Vyb2s7Ci0r CQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0gCWNhc2Ugc01hdGNoOgotIAkJaWYgKGNtZGxpbmUpCi0g CQkJZmF0YWwoIk1hdGNoIGRpcmVjdGl2ZSBub3Qgc3VwcG9ydGVkIGFzIGEgY29tbWFuZC1saW5l ICIKLUBAIC0yOTk3LDYgKzMwMDYsNyBAQCBjb3B5X3NldF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJP cHRpb25zICpkc3QsIFNlcnZlck9wdGlvbnMgKnNyYywgaW50IHByZWF1dGgpCi0gCU1fQ1BfSU5U T1BUKGNsaWVudF9hbGl2ZV9pbnRlcnZhbCk7Ci0gCU1fQ1BfSU5UT1BUKGlwX3Fvc19pbnRlcmFj dGl2ZSk7Ci0gCU1fQ1BfSU5UT1BUKGlwX3Fvc19idWxrKTsKLSsJTV9DUF9JTlRPUFQodXNlX2t1 c2Vyb2spOwotIAlNX0NQX0lOVE9QVChyZWtleV9saW1pdCk7Ci0gCU1fQ1BfSU5UT1BUKHJla2V5 X2ludGVydmFsKTsKLSAJTV9DUF9JTlRPUFQobG9nX2xldmVsKTsKLUBAIC0zMzA1LDYgKzMzMTUs NyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQotIAlkdW1wX2NmZ19mbXRpbnQoc0tl cmJlcm9zR2V0QUZTVG9rZW4sIG8tPmtlcmJlcm9zX2dldF9hZnNfdG9rZW4pOwotICMgZW5kaWYK LSAJZHVtcF9jZmdfZm10aW50KHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgby0+a2VyYmVyb3NfdW5p cXVlX2NjYWNoZSk7Ci0rCWR1bXBfY2ZnX2ZtdGludChzS2VyYmVyb3NVc2VLdXNlcm9rLCBvLT51 c2Vfa3VzZXJvayk7Ci0gI2VuZGlmCi0gI2lmZGVmIEdTU0FQSQotIAlkdW1wX2NmZ19mbXRpbnQo c0dzc0F1dGhlbnRpY2F0aW9uLCBvLT5nc3NfYXV0aGVudGljYXRpb24pOwotZGlmZiAtLWdpdCBh L3NlcnZjb25mLmggYi9zZXJ2Y29uZi5oCi1pbmRleCBhNGEzOGQ2ZDcuLjExZGUzNmEyMyAxMDA2 NDQKLS0tLSBhL3NlcnZjb25mLmgKLSsrKyBiL3NlcnZjb25mLmgKLUBAIC0xNTEsNiArMTUxLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgewotIAkJCQkJCSAqIGF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJv cy4gKi8KLSAJaW50ICAgICBrZXJiZXJvc191bmlxdWVfY2NhY2hlOwkJLyogSWYgdHJ1ZSwgdGhl IGFjcXVpcmVkIHRpY2tldCB3aWxsCi0gCQkJCQkJICogYmUgc3RvcmVkIGluIHBlci1zZXNzaW9u IGNjYWNoZSAqLwotKwlpbnQJdXNlX2t1c2Vyb2s7Ci0gCWludCAgICAgZ3NzX2F1dGhlbnRpY2F0 aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGF1dGhlbnRpY2F0aW9uICovCi0gCWludCAg ICAgZ3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQSSBrZXkgZXhjaGFuZ2UgKi8K LSAJaW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJLyogSWYgdHJ1ZSwgZGVzdHJveSBjcmVkIGNh Y2hlIG9uIGxvZ291dCAqLwotZGlmZiAtLWdpdCBhL3NzaGRfY29uZmlnIGIvc3NoZF9jb25maWcK LWluZGV4IDhkYjlmMGZiMS4uZWE1YTg3OGU2IDEwMDY0NAotLS0tIGEvc3NoZF9jb25maWcKLSsr KyBiL3NzaGRfY29uZmlnCi1AQCAtNzUsNiArNzUsNyBAQCBBdXRob3JpemVkS2V5c0ZpbGUJLnNz aC9hdXRob3JpemVkX2tleXMKLSAjS2VyYmVyb3NPckxvY2FsUGFzc3dkIHllcwotICNLZXJiZXJv c1RpY2tldENsZWFudXAgeWVzCi0gI0tlcmJlcm9zR2V0QUZTVG9rZW4gbm8KLSsjS2VyYmVyb3NV c2VLdXNlcm9rIHllcwotIAotICMgR1NTQVBJIG9wdGlvbnMKLSAjR1NTQVBJQXV0aGVudGljYXRp b24gbm8KLWRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXgg Y2FlMGZkMGI0Li5jMzYwZmNmZmYgMTAwNjQ0Ci0tLS0gYS9zc2hkX2NvbmZpZy41Ci0rKysgYi9z c2hkX2NvbmZpZy41Ci1AQCAtMTA0MCw2ICsxMDQwLDEwIEBAIFRoZSBkZWZhdWx0IHZhbHVlCi0g LkNtIG5vCi0gY2FuIGxlYWQgdG8gb3ZlcndyaXRpbmcgcHJldmlvdXMgdGlja2V0cyBieSBzdWJz ZXFlbnQgY29ubmVjdGlvbnMgdG8gdGhlIHNhbWUKLSB1c2VyIGFjY291bnQuCi0rLkl0IENtIEtl cmJlcm9zVXNlS3VzZXJvawotK1NwZWNpZmllcyB3aGV0aGVyIHRvIGxvb2sgYXQgLms1bG9naW4g ZmlsZSBmb3IgdXNlcidzIGFsaWFzZXMuCi0rVGhlIGRlZmF1bHQgaXMKLSsuQ20geWVzIC4KLSAu SXQgQ20gS2V4QWxnb3JpdGhtcwotIFNwZWNpZmllcyB0aGUgcGVybWl0dGVkIEtFWCAoS2V5IEV4 Y2hhbmdlKSBhbGdvcml0aG1zIHRoYXQgdGhlIHNlcnZlciB3aWxsCi0gb2ZmZXIgdG8gY2xpZW50 cy4KLUBAIC0xMzU0LDYgKzEzNTgsNyBAQCBBdmFpbGFibGUga2V5d29yZHMgYXJlCi0gLkNtIElQ UW9TICwKLSAuQ20gS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiAsCi0gLkNtIEtlcmJlcm9z QXV0aGVudGljYXRpb24gLAotKy5DbSBLZXJiZXJvc1VzZUt1c2Vyb2sgLAotIC5DbSBMb2dMZXZl bCAsCi0gLkNtIE1heEF1dGhUcmllcyAsCi0gLkNtIE1heFNlc3Npb25zICwKLS0tIAotMi41Mi4w Ci0KCmRpZmYgLS1naXQgYS8wMDE1LW9wZW5zc2gtNy43cDEtZ3NzYXBpLW5ldy11bmlxdWUucGF0 Y2ggYi8wMDE1LW9wZW5zc2gtNy43cDEtZ3NzYXBpLW5ldy11bmlxdWUucGF0Y2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5N2I3YgotLS0gL2Rldi9udWxsCisrKyBiLzAw MTUtb3BlbnNzaC03LjdwMS1nc3NhcGktbmV3LXVuaXF1ZS5wYXRjaApAQCAtMCwwICsxLDY3MyBA QAorRnJvbSBlYTMwZTE1OGRjZWNlMzk1MjViZWIwYmMxNmViNGEyNmQ4ZWI4MDFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwu Y29tPgorRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BB VENIIDE1LzU0XSBvcGVuc3NoLTcuN3AxLWdzc2FwaS1uZXctdW5pcXVlCisKKyMgSW1wcm92ZSBj Y2FjaGUgaGFuZGxpbmcgaW4gb3BlbnNzaCAoIzk5MTE4NiwgIzExOTkzNjMsICMxNTY2NDk0KQor IyBodHRwczovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzc1CistLS0K KyBhdXRoLWtyYjUuYyAgICAgfCAyNjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tCisgYXV0aC5oICAgICAgICAgIHwgICAzICstCisgZ3NzLXNlcnYta3Ji NS5jIHwgIDQyICsrKy0tLS0tCisgZ3NzLXNlcnYuYyAgICAgIHwgIDEyICstLQorIHNlcnZjb25m LmMgICAgICB8ICAxMiArKy0KKyBzZXJ2Y29uZi5oICAgICAgfCAgIDIgKworIHNlc3Npb24uYyAg ICAgICB8ICAgNSArLQorIHNzaC1nc3MuaCAgICAgICB8ICAgNCArLQorIHNzaGQtc2Vzc2lvbi5j ICB8ICAgMiArLQorIHNzaGRfY29uZmlnLjUgICB8ICAgOCArKworIDEwIGZpbGVzIGNoYW5nZWQs IDI4MCBpbnNlcnRpb25zKCspLCA3MiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2F1dGgt a3JiNS5jIGIvYXV0aC1rcmI1LmMKK2luZGV4IDNjNmRjMDYyMi4uMGRlMWFhZjhkIDEwMDY0NAor LS0tIGEvYXV0aC1rcmI1LmMKKysrKyBiL2F1dGgta3JiNS5jCitAQCAtNTEsNiArNTEsNyBAQAor ICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGty YjUuaD4KKysjaW5jbHVkZSA8cHJvZmlsZS5oPgorIAorIGV4dGVybiBTZXJ2ZXJPcHRpb25zCSBv cHRpb25zOworIAorQEAgLTc3LDcgKzc4LDcgQEAgYXV0aF9rcmI1X3Bhc3N3b3JkKEF1dGhjdHh0 ICphdXRoY3R4dCwgY29uc3QgY2hhciAqcGFzc3dvcmQpCisgI2VuZGlmCisgCWtyYjVfZXJyb3Jf Y29kZSBwcm9ibGVtOworIAlrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxMOworLQlpbnQgbGVuOwor KwljaGFyICp0aWNrZXRfbmFtZSA9IE5VTEw7CisgCWNoYXIgKmNsaWVudCwgKnBsYXRmb3JtX2Ns aWVudDsKKyAJY29uc3QgY2hhciAqZXJybXNnOworIAorQEAgLTE2Myw4ICsxNjQsOCBAQCBhdXRo X2tyYjVfcGFzc3dvcmQoQXV0aGN0eHQgKmF1dGhjdHh0LCBjb25zdCBjaGFyICpwYXNzd29yZCkK KyAJCWdvdG8gb3V0OworIAl9CisgCistCXByb2JsZW0gPSBzc2hfa3JiNV9jY19nZW4oYXV0aGN0 eHQtPmtyYjVfY3R4LAorLQkgICAgJmF1dGhjdHh0LT5rcmI1X2Z3ZF9jY2FjaGUpOworKwlwcm9i bGVtID0gc3NoX2tyYjVfY2NfbmV3X3VuaXF1ZShhdXRoY3R4dC0+a3JiNV9jdHgsCisrCSAgICAg JmF1dGhjdHh0LT5rcmI1X2Z3ZF9jY2FjaGUsICZhdXRoY3R4dC0+a3JiNV9zZXRfZW52KTsKKyAJ aWYgKHByb2JsZW0pCisgCQlnb3RvIG91dDsKKyAKK0BAIC0xNzksMTUgKzE4MCwxNCBAQCBhdXRo X2tyYjVfcGFzc3dvcmQoQXV0aGN0eHQgKmF1dGhjdHh0LCBjb25zdCBjaGFyICpwYXNzd29yZCkK KyAJCWdvdG8gb3V0OworICNlbmRpZgorIAorLQlhdXRoY3R4dC0+a3JiNV90aWNrZXRfZmlsZSA9 IChjaGFyICopa3JiNV9jY19nZXRfbmFtZShhdXRoY3R4dC0+a3JiNV9jdHgsIGF1dGhjdHh0LT5r cmI1X2Z3ZF9jY2FjaGUpOworKwlwcm9ibGVtID0ga3JiNV9jY19nZXRfZnVsbF9uYW1lKGF1dGhj dHh0LT5rcmI1X2N0eCwKKysJICAgIGF1dGhjdHh0LT5rcmI1X2Z3ZF9jY2FjaGUsICZ0aWNrZXRf bmFtZSk7CisgCistCWxlbiA9IHN0cmxlbihhdXRoY3R4dC0+a3JiNV90aWNrZXRfZmlsZSkgKyA2 OworLQlhdXRoY3R4dC0+a3JiNV9jY25hbWUgPSB4bWFsbG9jKGxlbik7CistCXNucHJpbnRmKGF1 dGhjdHh0LT5rcmI1X2NjbmFtZSwgbGVuLCAiRklMRTolcyIsCistCSAgICBhdXRoY3R4dC0+a3Ji NV90aWNrZXRfZmlsZSk7CisrCWF1dGhjdHh0LT5rcmI1X2NjbmFtZSA9IHhzdHJkdXAodGlja2V0 X25hbWUpOworKwlrcmI1X2ZyZWVfc3RyaW5nKGF1dGhjdHh0LT5rcmI1X2N0eCwgdGlja2V0X25h bWUpOworIAorICNpZmRlZiBVU0VfUEFNCistCWlmIChvcHRpb25zLnVzZV9wYW0pCisrCWlmIChv cHRpb25zLnVzZV9wYW0gJiYgYXV0aGN0eHQtPmtyYjVfc2V0X2VudikKKyAJCWRvX3BhbV9wdXRl bnYoIktSQjVDQ05BTUUiLCBhdXRoY3R4dC0+a3JiNV9jY25hbWUpOworICNlbmRpZgorIAorQEAg LTIyMywxMSArMjIzLDU0IEBAIGF1dGhfa3JiNV9wYXNzd29yZChBdXRoY3R4dCAqYXV0aGN0eHQs IGNvbnN0IGNoYXIgKnBhc3N3b3JkKQorIHZvaWQKKyBrcmI1X2NsZWFudXBfcHJvYyhBdXRoY3R4 dCAqYXV0aGN0eHQpCisgeworKwlzdHJ1Y3Qgc3RhdCBrcmI1X2NjbmFtZV9zdGF0OworKwljaGFy IGtyYjVfY2NuYW1lWzEyOF0sICprcmI1X2NjbmFtZV9kaXJfc3RhcnQsICprcmI1X2NjbmFtZV9k aXJfZW5kOworKworIAlkZWJ1Zygia3JiNV9jbGVhbnVwX3Byb2MgY2FsbGVkIik7CisgCWlmIChh dXRoY3R4dC0+a3JiNV9md2RfY2NhY2hlKSB7CistCQlrcmI1X2NjX2Rlc3Ryb3koYXV0aGN0eHQt PmtyYjVfY3R4LCBhdXRoY3R4dC0+a3JiNV9md2RfY2NhY2hlKTsKKysJCWtyYjVfY29udGV4dCBj dHggPSBhdXRoY3R4dC0+a3JiNV9jdHg7CisrCQlrcmI1X2NjY29sX2N1cnNvciBjdXJzb3I7Cisr CQlrcmI1X2NjYWNoZSBjY2FjaGU7CisrCQlpbnQgcmV0OworKworKwkJa3JiNV9jY19kZXN0cm95 KGN0eCwgYXV0aGN0eHQtPmtyYjVfZndkX2NjYWNoZSk7CisgCQlhdXRoY3R4dC0+a3JiNV9md2Rf Y2NhY2hlID0gTlVMTDsKKysKKysJCXJldCA9IGtyYjVfY2Njb2xfY3Vyc29yX25ldyhjdHgsICZj dXJzb3IpOworKwkJaWYgKHJldCkKKysJCQlnb3RvIG91dDsKKysKKysJCXJldCA9IGtyYjVfY2Nj b2xfY3Vyc29yX25leHQoY3R4LCBjdXJzb3IsICZjY2FjaGUpOworKwkJaWYgKHJldCA9PSAwICYm IGNjYWNoZSAhPSBOVUxMKSB7CisrCQkJLyogVGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGNj YWNoZSBpbiBjb2xsZWN0aW9uCisrCQkJICogd2UgY2FuIHN3aXRjaCB0byAqLworKwkJCWtyYjVf Y2Nfc3dpdGNoKGN0eCwgY2NhY2hlKTsKKysJCX0gZWxzZSBpZiAoYXV0aGN0eHQtPmtyYjVfY2Nu YW1lICE9IE5VTEwpIHsKKysJCQkvKiBDbGVhbiB1cCB0aGUgY29sbGVjdGlvbiB0b28gKi8KKysJ CQlzdHJuY3B5KGtyYjVfY2NuYW1lLCBhdXRoY3R4dC0+a3JiNV9jY25hbWUsIHNpemVvZihrcmI1 X2NjbmFtZSkgLSAxMCk7CisrCQkJa3JiNV9jY25hbWVfZGlyX3N0YXJ0ID0gc3RyY2hyKGtyYjVf Y2NuYW1lLCAnOicpICsgMTsKKysJCQkqa3JiNV9jY25hbWVfZGlyX3N0YXJ0KysgPSAnXDAnOwor KwkJCWlmIChzdHJjbXAoa3JiNV9jY25hbWUsICJESVIiKSA9PSAwKSB7CisrCisrCQkJCXN0cmNh dChrcmI1X2NjbmFtZV9kaXJfc3RhcnQsICIvcHJpbWFyeSIpOworKworKwkJCQlpZiAoc3RhdChr cmI1X2NjbmFtZV9kaXJfc3RhcnQsICZrcmI1X2NjbmFtZV9zdGF0KSA9PSAwKSB7CisrCQkJCQlp ZiAodW5saW5rKGtyYjVfY2NuYW1lX2Rpcl9zdGFydCkgPT0gMCkgeworKwkJCQkJCWtyYjVfY2Nu YW1lX2Rpcl9lbmQgPSBzdHJyY2hyKGtyYjVfY2NuYW1lX2Rpcl9zdGFydCwgJy8nKTsKKysJCQkJ CQkqa3JiNV9jY25hbWVfZGlyX2VuZCA9ICdcMCc7CisrCQkJCQkJaWYgKHJtZGlyKGtyYjVfY2Nu YW1lX2Rpcl9zdGFydCkgPT0gLTEpCisrCQkJCQkJCWRlYnVnKCJjYWNoZSBkaXIgJyVzJyByZW1v dmUgZmFpbGVkOiAlcyIsCisrCQkJCQkJCSAgICBrcmI1X2NjbmFtZV9kaXJfc3RhcnQsIHN0cmVy cm9yKGVycm5vKSk7CisrCQkJCQl9CisrCQkJCQllbHNlCisrCQkJCQkJZGVidWcoImNhY2hlIHBy aW1hcnkgZmlsZSAnJXMnLCByZW1vdmUgZmFpbGVkOiAlcyIsCisrCQkJCQkJICAgIGtyYjVfY2Nu YW1lX2Rpcl9zdGFydCwgc3RyZXJyb3IoZXJybm8pKTsKKysJCQkJfQorKwkJCX0KKysJCX0KKysJ CWtyYjVfY2Njb2xfY3Vyc29yX2ZyZWUoY3R4LCAmY3Vyc29yKTsKKyAJfQorK291dDoKKyAJaWYg KGF1dGhjdHh0LT5rcmI1X3VzZXIpIHsKKyAJCWtyYjVfZnJlZV9wcmluY2lwYWwoYXV0aGN0eHQt PmtyYjVfY3R4LCBhdXRoY3R4dC0+a3JiNV91c2VyKTsKKyAJCWF1dGhjdHh0LT5rcmI1X3VzZXIg PSBOVUxMOworQEAgLTIzOCwzNiArMjgxLDE4OSBAQCBrcmI1X2NsZWFudXBfcHJvYyhBdXRoY3R4 dCAqYXV0aGN0eHQpCisgCX0KKyB9CisgCistI2lmbmRlZiBIRUlNREFMCista3JiNV9lcnJvcl9j b2RlCistc3NoX2tyYjVfY2NfZ2VuKGtyYjVfY29udGV4dCBjdHgsIGtyYjVfY2NhY2hlICpjY2Fj aGUpIHsKKy0JaW50IHRtcGZkLCByZXQsIG9lcnJubzsKKy0JY2hhciBjY25hbWVbNDBdOworLQlt b2RlX3Qgb2xkX3VtYXNrOworIAorLQlyZXQgPSBzbnByaW50ZihjY25hbWUsIHNpemVvZihjY25h bWUpLAorLQkgICAgIkZJTEU6L3RtcC9rcmI1Y2NfJWRfWFhYWFhYWFhYWCIsIGdldGV1aWQoKSk7 CistCWlmIChyZXQgPCAwIHx8IChzaXplX3QpcmV0ID49IHNpemVvZihjY25hbWUpKQorLQkJcmV0 dXJuIEVOT01FTTsKKy0KKy0Jb2xkX3VtYXNrID0gdW1hc2soMDE3Nyk7CistCXRtcGZkID0gbWtz dGVtcChjY25hbWUgKyBzdHJsZW4oIkZJTEU6IikpOworLQlvZXJybm8gPSBlcnJubzsKKy0JdW1h c2sob2xkX3VtYXNrKTsKKy0JaWYgKHRtcGZkID09IC0xKSB7CistCQlsb2dpdCgibWtzdGVtcCgp OiAlLjEwMHMiLCBzdHJlcnJvcihvZXJybm8pKTsKKy0JCXJldHVybiBvZXJybm87CisrI2lmICFk ZWZpbmVkKEhFSU1EQUwpCisraW50Cisrc3NoX2FzcHJpbnRmX2FwcGVuZChjaGFyICoqZHNjLCBj b25zdCBjaGFyICpmbXQsIC4uLikgeworKwljaGFyICpzcmMsICpvbGQ7CisrCXZhX2xpc3QgYXA7 CisrCWludCBpOworKworKwl2YV9zdGFydChhcCwgZm10KTsKKysJaSA9IHZhc3ByaW50Zigmc3Jj LCBmbXQsIGFwKTsKKysJdmFfZW5kKGFwKTsKKysKKysJaWYgKGkgPT0gLTEgfHwgc3JjID09IE5V TEwpCisrCQlyZXR1cm4gLTE7CisrCisrCW9sZCA9ICpkc2M7CisrCisrCWkgPSBhc3ByaW50Zihk c2MsICIlcyVzIiwgKmRzYywgc3JjKTsKKysJaWYgKGkgPT0gLTEpIHsKKysJCSpkc2MgPSBvbGQ7 CisrCQlmcmVlKHNyYyk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJZnJlZShvbGQpOworKwlm cmVlKHNyYyk7CisrCisrCXJldHVybiBpOworK30KKysKKytpbnQKKytzc2hfa3JiNV9leHBhbmRf dGVtcGxhdGUoY2hhciAqKnJlc3VsdCwgY29uc3QgY2hhciAqdGVtcGxhdGUpIHsKKysJY2hhciAq cF9uLCAqcF9vLCAqciwgKnRtcF90ZW1wbGF0ZTsKKysKKysJZGVidWczX2YoImNhbGxlZCwgdGVt cGxhdGUgPSAlcyIsIHRlbXBsYXRlKTsKKysJaWYgKHRlbXBsYXRlID09IE5VTEwpCisrCQlyZXR1 cm4gLTE7CisrCisrCXRtcF90ZW1wbGF0ZSA9IHBfbiA9IHBfbyA9IHhzdHJkdXAodGVtcGxhdGUp OworKwlyID0geHN0cmR1cCgiIik7CisrCisrCXdoaWxlICgocF9uID0gc3Ryc3RyKHBfbywgIiV7 IikpICE9IE5VTEwpIHsKKysKKysJCSpwX24rKyA9ICdcMCc7CisrCQlpZiAoc3NoX2FzcHJpbnRm X2FwcGVuZCgmciwgIiVzIiwgcF9vKSA9PSAtMSkKKysJCQlnb3RvIGNsZWFudXA7CisrCisrCQlp ZiAoc3RybmNtcChwX24sICJ7dWlkfSIsIDUpID09IDAgfHwgc3RybmNtcChwX24sICJ7ZXVpZH0i LCA2KSA9PSAwIHx8CisrCQkJc3RybmNtcChwX24sICJ7VVNFUklEfSIsIDgpID09IDApIHsKKysJ CQlwX28gPSBzdHJjaHIocF9uLCAnfScpICsgMTsKKysJCQlpZiAoc3NoX2FzcHJpbnRmX2FwcGVu ZCgmciwgIiVkIiwgZ2V0ZXVpZCgpKSA9PSAtMSkKKysJCQkJZ290byBjbGVhbnVwOworKwkJCWNv bnRpbnVlOworKwkJfQorKwkJZWxzZSBpZiAoc3RybmNtcChwX24sICJ7VEVNUH0iLCA2KSA9PSAw KSB7CisrCQkJcF9vID0gc3RyY2hyKHBfbiwgJ30nKSArIDE7CisrCQkJaWYgKHNzaF9hc3ByaW50 Zl9hcHBlbmQoJnIsICIvdG1wIikgPT0gLTEpCisrCQkJCWdvdG8gY2xlYW51cDsKKysJCQljb250 aW51ZTsKKysJCX0gZWxzZSB7CisrCQkJcF9vID0gc3RyY2hyKHBfbiwgJ30nKSArIDE7CisrCQkJ KnBfbyA9ICdcMCc7CisrCQkJZGVidWdfZigidW5zdXBwb3J0ZWQgdG9rZW4gJXMgaW4gJXMiLCBw X24sIHRlbXBsYXRlKTsKKysJCQkvKiB1bmtub3duIHRva2VuLCBmYWxsYmFjayB0byB0aGUgZGVm YXVsdCAqLworKwkJCWdvdG8gY2xlYW51cDsKKysJCX0KKyAJfQorIAorLQlpZiAoZmNobW9kKHRt cGZkLFNfSVJVU1IgfCBTX0lXVVNSKSA9PSAtMSkgeworKwlpZiAoc3NoX2FzcHJpbnRmX2FwcGVu ZCgmciwgIiVzIiwgcF9vKSA9PSAtMSkKKysJCWdvdG8gY2xlYW51cDsKKysKKysJKnJlc3VsdCA9 IHI7CisrCWZyZWUodG1wX3RlbXBsYXRlKTsKKysJcmV0dXJuIDA7CisrCisrY2xlYW51cDoKKysJ ZnJlZShyKTsKKysJZnJlZSh0bXBfdGVtcGxhdGUpOworKwlyZXR1cm4gLTE7CisrfQorKworK2ty YjVfZXJyb3JfY29kZQorK3NzaF9rcmI1X2dldF9jY3RlbXBsYXRlKGtyYjVfY29udGV4dCBjdHgs IGNoYXIgKipjY25hbWUpIHsKKysJcHJvZmlsZV90IHA7CisrCWludCByZXQgPSAwOworKwljaGFy ICp2YWx1ZSA9IE5VTEw7CisrCisrCWRlYnVnM19mKCJjYWxsZWQiKTsKKysJcmV0ID0ga3JiNV9n ZXRfcHJvZmlsZShjdHgsICZwKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCXJl dCA9IHByb2ZpbGVfZ2V0X3N0cmluZyhwLCAibGliZGVmYXVsdHMiLCAiZGVmYXVsdF9jY2FjaGVf bmFtZSIsIE5VTEwsIE5VTEwsICZ2YWx1ZSk7CisrCWlmIChyZXQgfHwgIXZhbHVlKQorKwkJcmV0 dXJuIHJldDsKKysKKysJcmV0ID0gc3NoX2tyYjVfZXhwYW5kX3RlbXBsYXRlKGNjbmFtZSwgdmFs dWUpOworKworKwlkZWJ1ZzNfZigicmV0dXJuaW5nIHdpdGggY2NuYW1lID0gJXMiLCAqY2NuYW1l KTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisra3JiNV9lcnJvcl9jb2RlCisrc3NoX2tyYjVfY2Nf bmV3X3VuaXF1ZShrcmI1X2NvbnRleHQgY3R4LCBrcmI1X2NjYWNoZSAqY2NhY2hlLCBpbnQgKm5l ZWRfZW52aXJvbm1lbnQpIHsKKysJaW50IHRtcGZkLCByZXQsIG9lcnJubywgdHlwZV9sZW47Cisr CWNoYXIgKmNjbmFtZSA9IE5VTEw7CisrCW1vZGVfdCBvbGRfdW1hc2s7CisrCWNoYXIgKnR5cGUg PSBOVUxMLCAqY29sb24gPSBOVUxMOworKworKwlkZWJ1ZzNfZigiY2FsbGVkIik7CisrCWlmIChu ZWVkX2Vudmlyb25tZW50KQorKwkJKm5lZWRfZW52aXJvbm1lbnQgPSAwOworKwlyZXQgPSBzc2hf a3JiNV9nZXRfY2N0ZW1wbGF0ZShjdHgsICZjY25hbWUpOworKwlpZiAocmV0IHx8ICFjY25hbWUg fHwgb3B0aW9ucy5rZXJiZXJvc191bmlxdWVfY2NhY2hlKSB7CisrCQkvKiBPdGhlcndpc2UsIGdv IHdpdGggdGhlIG9sZCBtZXRob2QgKi8KKysJCWlmIChjY25hbWUpCisrCQkJZnJlZShjY25hbWUp OworKwkJY2NuYW1lID0gTlVMTDsKKysKKysJCXJldCA9IGFzcHJpbnRmKCZjY25hbWUsCisrCQkg ICAgIkZJTEU6L3RtcC9rcmI1Y2NfJWRfWFhYWFhYWFhYWCIsIGdldGV1aWQoKSk7CisrCQlpZiAo cmV0IDwgMCkKKysJCQlyZXR1cm4gRU5PTUVNOworKworKwkJb2xkX3VtYXNrID0gdW1hc2soMDE3 Nyk7CisrCQl0bXBmZCA9IG1rc3RlbXAoY2NuYW1lICsgc3RybGVuKCJGSUxFOiIpKTsKKyAJCW9l cnJubyA9IGVycm5vOworLQkJbG9naXQoImZjaG1vZCgpOiAlLjEwMHMiLCBzdHJlcnJvcihvZXJy bm8pKTsKKysJCXVtYXNrKG9sZF91bWFzayk7CisrCQlpZiAodG1wZmQgPT0gLTEpIHsKKysJCQls b2dpdCgibWtzdGVtcCgpOiAlLjEwMHMiLCBzdHJlcnJvcihvZXJybm8pKTsKKysJCQlyZXR1cm4g b2Vycm5vOworKwkJfQorKworKwkJaWYgKGZjaG1vZCh0bXBmZCxTX0lSVVNSIHwgU19JV1VTUikg PT0gLTEpIHsKKysJCQlvZXJybm8gPSBlcnJubzsKKysJCQlsb2dpdCgiZmNobW9kKCk6ICUuMTAw cyIsIHN0cmVycm9yKG9lcnJubykpOworKwkJCWNsb3NlKHRtcGZkKTsKKysJCQlyZXR1cm4gb2Vy cm5vOworKwkJfQorKwkJLyogbWFrZSBzdXJlIHRoZSBLUkI1Q0NOQU1FIGlzIHNldCBmb3Igbm9u LXN0YW5kYXJkIGxvY2F0aW9uICovCisrCQlpZiAobmVlZF9lbnZpcm9ubWVudCkKKysJCQkqbmVl ZF9lbnZpcm9ubWVudCA9IDE7CisgCQljbG9zZSh0bXBmZCk7CistCQlyZXR1cm4gb2Vycm5vOwor IAl9CistCWNsb3NlKHRtcGZkKTsKKyAKKy0JcmV0dXJuIChrcmI1X2NjX3Jlc29sdmUoY3R4LCBj Y25hbWUsIGNjYWNoZSkpOworKwlkZWJ1ZzNfZigic2V0dGluZyBkZWZhdWx0IGNjbmFtZSB0byAl cyIsIGNjbmFtZSk7CisrCS8qIHNldCB0aGUgZGVmYXVsdCB3aXRoIGFscmVhZHkgZXhwYW5kZWQg dXNlciBJRHMgKi8KKysJcmV0ID0ga3JiNV9jY19zZXRfZGVmYXVsdF9uYW1lKGN0eCwgY2NuYW1l KTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCWlmICgoY29sb24gPSBzdHJzdHIo Y2NuYW1lLCAiOiIpKSAhPSBOVUxMKSB7CisrCQl0eXBlX2xlbiA9IGNvbG9uIC0gY2NuYW1lOwor KwkJdHlwZSA9IG1hbGxvYygodHlwZV9sZW4gKyAxKSAqIHNpemVvZihjaGFyKSk7CisrCQlpZiAo dHlwZSA9PSBOVUxMKQorKwkJCXJldHVybiBFTk9NRU07CisrCQlzdHJuY3B5KHR5cGUsIGNjbmFt ZSwgdHlwZV9sZW4pOworKwkJdHlwZVt0eXBlX2xlbl0gPSAwOworKwl9IGVsc2UgeworKwkJdHlw ZSA9IHN0cmR1cChjY25hbWUpOworKwl9CisrCisrCS8qIElmIHdlIGhhdmUgYSBjcmVkZW50aWFs IGNhY2hlIGZyb20ga3JiNS5jb25mLCB3ZSBuZWVkIHRvIHN3aXRjaAorKwkgKiBhIHByaW1hcnkg Y2FjaGUgZm9yIHRoaXMgY29sbGVjdGlvbiwgaWYgaXQgc3VwcG9ydHMgdGhhdCAobm9uLUZJTEUp CisrCSAqLworKwlpZiAoa3JiNV9jY19zdXBwb3J0X3N3aXRjaChjdHgsIHR5cGUpKSB7CisrCQlk ZWJ1ZzNfZigiY2FsbGluZyBjY19uZXdfdW5pcXVlKCVzKSIsIGNjbmFtZSk7CisrCQlyZXQgPSBr cmI1X2NjX25ld191bmlxdWUoY3R4LCB0eXBlLCBOVUxMLCBjY2FjaGUpOworKwkJZnJlZSh0eXBl KTsKKysJCWlmIChyZXQpCisrCQkJcmV0dXJuIHJldDsKKysKKysJCWRlYnVnM19mKCJjYWxsaW5n IGNjX3N3aXRjaCgpIik7CisrCQlyZXR1cm4ga3JiNV9jY19zd2l0Y2goY3R4LCAqY2NhY2hlKTsK KysJfSBlbHNlIHsKKysJCS8qIE90aGVyd2lzZSwgd2UgY2FuIG5vdCBjcmVhdGUgYSB1bmlxdWUg Y2NuYW1lIGhlcmUgKGVpdGhlcgorKwkJICogaXQgaXMgYWxyZWFkeSB1bmlxdWUgZnJvbSBhYm92 ZSBvciB0aGUgdHlwZSBkb2VzIG5vdCBzdXBwb3J0CisrCQkgKiBjb2xsZWN0aW9ucworKwkJICov CisrCQlmcmVlKHR5cGUpOworKwkJZGVidWczX2YoImNhbGxpbmcgY2NfcmVzb2x2ZSglcykiLCBj Y25hbWUpOworKwkJcmV0dXJuIChrcmI1X2NjX3Jlc29sdmUoY3R4LCBjY25hbWUsIGNjYWNoZSkp OworKwl9CisgfQorICNlbmRpZiAvKiAhSEVJTURBTCAqLworICNlbmRpZiAvKiBLUkI1ICovCitk aWZmIC0tZ2l0IGEvYXV0aC5oIGIvYXV0aC5oCitpbmRleCAzMmVlM2NiZjQuLjllNTVmZjhhZCAx MDA2NDQKKy0tLSBhL2F1dGguaAorKysrIGIvYXV0aC5oCitAQCAtODUsNiArODUsNyBAQCBzdHJ1 Y3QgQXV0aGN0eHQgeworIAlrcmI1X3ByaW5jaXBhbAkga3JiNV91c2VyOworIAljaGFyCQkqa3Ji NV90aWNrZXRfZmlsZTsKKyAJY2hhcgkJKmtyYjVfY2NuYW1lOworKwlpbnQJCSBrcmI1X3NldF9l bnY7CisgI2VuZGlmCisgCXN0cnVjdCBzc2hidWYJKmxvZ2lubXNnOworIAorQEAgLTI0Myw3ICsy NDQsNyBAQCBGSUxFCSphdXRoX29wZW5wcmluY2lwYWxzKGNvbnN0IGNoYXIgKiwgc3RydWN0IHBh c3N3ZCAqLCBpbnQpOworIGludAkgc3lzX2F1dGhfcGFzc3dkKHN0cnVjdCBzc2ggKiwgY29uc3Qg Y2hhciAqKTsKKyAKKyAjaWYgZGVmaW5lZChLUkI1KSAmJiAhZGVmaW5lZChIRUlNREFMKQorLWty YjVfZXJyb3JfY29kZSBzc2hfa3JiNV9jY19nZW4oa3JiNV9jb250ZXh0LCBrcmI1X2NjYWNoZSAq KTsKKytrcmI1X2Vycm9yX2NvZGUgc3NoX2tyYjVfY2NfbmV3X3VuaXF1ZShrcmI1X2NvbnRleHQs IGtyYjVfY2NhY2hlICosIGludCAqKTsKKyAjZW5kaWYKKyAKKyAjZW5kaWYgLyogQVVUSF9IICov CitkaWZmIC0tZ2l0IGEvZ3NzLXNlcnYta3JiNS5jIGIvZ3NzLXNlcnYta3JiNS5jCitpbmRleCBj MjYxNzQ5MjguLjQxNWZiMTg5MyAxMDA2NDQKKy0tLSBhL2dzcy1zZXJ2LWtyYjUuYworKysrIGIv Z3NzLXNlcnYta3JiNS5jCitAQCAtMjY3LDcgKzI2Nyw3IEBAIHNzaF9nc3NhcGlfa3JiNV9jbWRv ayhrcmI1X3ByaW5jaXBhbCBwcmluY2lwYWwsIGNvbnN0IGNoYXIgKm5hbWUsCisgLyogVGhpcyB3 cml0ZXMgb3V0IGFueSBmb3J3YXJkZWQgY3JlZGVudGlhbHMgZnJvbSB0aGUgc3RydWN0dXJlIHBv cHVsYXRlZAorICAqIGR1cmluZyB1c2VyYXV0aC4gQ2FsbGVkIGFmdGVyIHdlIGhhdmUgc2V0dWlk IHRvIHRoZSB1c2VyICovCisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgaW50Cisgc3NoX2dzc2Fw aV9rcmI1X3N0b3JlY3JlZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyB7CisgCWtyYjVf Y2NhY2hlIGNjYWNoZTsKK0BAIC0yNzYsMTQgKzI3NiwxNSBAQCBzc2hfZ3NzYXBpX2tyYjVfc3Rv cmVjcmVkcyhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQorIAlPTV91aW50MzIgbWFqX3N0YXR1 cywgbWluX3N0YXR1czsKKyAJY29uc3QgY2hhciAqbmV3X2NjbmFtZSwgKm5ld19jY3R5cGU7Cisg CWNvbnN0IGNoYXIgKmVycm1zZzsKKysJaW50IHNldF9lbnYgPSAwOworIAorIAlpZiAoY2xpZW50 LT5jcmVkcyA9PSBOVUxMKSB7CisgCQlkZWJ1ZygiTm8gY3JlZGVudGlhbHMgc3RvcmVkIik7Cist CQlyZXR1cm47CisrCQlyZXR1cm4gMDsKKyAJfQorIAorIAlpZiAoc3NoX2dzc2FwaV9rcmI1X2lu aXQoKSA9PSAwKQorLQkJcmV0dXJuOworKwkJcmV0dXJuIDA7CisgCisgI2lmZGVmIEhFSU1EQUwK KyAjIGlmZGVmIEhBVkVfS1JCNV9DQ19ORVdfVU5JUVVFCitAQCAtMjk3LDE0ICsyOTgsMTQgQEAg c3NoX2dzc2FwaV9rcmI1X3N0b3JlY3JlZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyAJ CWtyYjVfZ2V0X2Vycl90ZXh0KGtyYl9jb250ZXh0LCBwcm9ibGVtKSk7CisgIyBlbmRpZgorIAkJ a3JiNV9mcmVlX2Vycm9yX21lc3NhZ2Uoa3JiX2NvbnRleHQsIGVycm1zZyk7CistCQlyZXR1cm47 CisrCQlyZXR1cm4gMDsKKyAJfQorICNlbHNlCistCWlmICgocHJvYmxlbSA9IHNzaF9rcmI1X2Nj X2dlbihrcmJfY29udGV4dCwgJmNjYWNoZSkpKSB7CisrCWlmICgocHJvYmxlbSA9IHNzaF9rcmI1 X2NjX25ld191bmlxdWUoa3JiX2NvbnRleHQsICZjY2FjaGUsICZzZXRfZW52KSkgIT0gMCkgewor IAkJZXJybXNnID0ga3JiNV9nZXRfZXJyb3JfbWVzc2FnZShrcmJfY29udGV4dCwgcHJvYmxlbSk7 CistCQlsb2dpdCgic3NoX2tyYjVfY2NfZ2VuKCk6ICUuMTAwcyIsIGVycm1zZyk7CisrCQlsb2dp dCgic3NoX2tyYjVfY2NfbmV3X3VuaXF1ZSgpOiAlLjEwMHMiLCBlcnJtc2cpOworIAkJa3JiNV9m cmVlX2Vycm9yX21lc3NhZ2Uoa3JiX2NvbnRleHQsIGVycm1zZyk7CistCQlyZXR1cm47CisrCQly ZXR1cm4gMDsKKyAJfQorICNlbmRpZgkvKiAjaWZkZWYgSEVJTURBTCAqLworIAorQEAgLTMxMyw3 ICszMTQsNyBAQCBzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcyhzc2hfZ3NzYXBpX2NsaWVudCAq Y2xpZW50KQorIAkJZXJybXNnID0ga3JiNV9nZXRfZXJyb3JfbWVzc2FnZShrcmJfY29udGV4dCwg cHJvYmxlbSk7CisgCQlsb2dpdCgia3JiNV9wYXJzZV9uYW1lKCk6ICUuMTAwcyIsIGVycm1zZyk7 CisgCQlrcmI1X2ZyZWVfZXJyb3JfbWVzc2FnZShrcmJfY29udGV4dCwgZXJybXNnKTsKKy0JCXJl dHVybjsKKysJCXJldHVybiAwOworIAl9CisgCisgCWlmICgocHJvYmxlbSA9IGtyYjVfY2NfaW5p dGlhbGl6ZShrcmJfY29udGV4dCwgY2NhY2hlLCBwcmluYykpKSB7CitAQCAtMzIyLDcgKzMyMyw3 IEBAIHNzaF9nc3NhcGlfa3JiNV9zdG9yZWNyZWRzKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQp CisgCQlrcmI1X2ZyZWVfZXJyb3JfbWVzc2FnZShrcmJfY29udGV4dCwgZXJybXNnKTsKKyAJCWty YjVfZnJlZV9wcmluY2lwYWwoa3JiX2NvbnRleHQsIHByaW5jKTsKKyAJCWtyYjVfY2NfZGVzdHJv eShrcmJfY29udGV4dCwgY2NhY2hlKTsKKy0JCXJldHVybjsKKysJCXJldHVybiAwOworIAl9Cisg CisgCWtyYjVfZnJlZV9wcmluY2lwYWwoa3JiX2NvbnRleHQsIHByaW5jKTsKK0BAIC0zMzEsMzIg KzMzMiwyMSBAQCBzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcyhzc2hfZ3NzYXBpX2NsaWVudCAq Y2xpZW50KQorIAkgICAgY2xpZW50LT5jcmVkcywgY2NhY2hlKSkpIHsKKyAJCWxvZ2l0KCJnc3Nf a3JiNV9jb3B5X2NjYWNoZSgpIGZhaWxlZCIpOworIAkJa3JiNV9jY19kZXN0cm95KGtyYl9jb250 ZXh0LCBjY2FjaGUpOworLQkJcmV0dXJuOworKwkJcmV0dXJuIDA7CisgCX0KKyAKKyAJbmV3X2Nj dHlwZSA9IGtyYjVfY2NfZ2V0X3R5cGUoa3JiX2NvbnRleHQsIGNjYWNoZSk7CisgCW5ld19jY25h bWUgPSBrcmI1X2NjX2dldF9uYW1lKGtyYl9jb250ZXh0LCBjY2FjaGUpOworLQorLQljbGllbnQt PnN0b3JlLmVudnZhciA9ICJLUkI1Q0NOQU1FIjsKKy0jaWZkZWYgVVNFX0NDQVBJCistCXhhc3By aW50ZigmY2xpZW50LT5zdG9yZS5lbnZ2YWwsICJBUEk6JXMiLCBuZXdfY2NuYW1lKTsKKy0JY2xp ZW50LT5zdG9yZS5maWxlbmFtZSA9IE5VTEw7CistI2Vsc2UKKy0JaWYgKG5ld19jY25hbWVbMF0g PT0gJzonKQorLQkJbmV3X2NjbmFtZSsrOworIAl4YXNwcmludGYoJmNsaWVudC0+c3RvcmUuZW52 dmFsLCAiJXM6JXMiLCBuZXdfY2N0eXBlLCBuZXdfY2NuYW1lKTsKKy0JaWYgKHN0cmNtcChuZXdf Y2N0eXBlLCAiRElSIikgPT0gMCkgeworLQkJY2hhciAqcDsKKy0JCXAgPSBzdHJyY2hyKGNsaWVu dC0+c3RvcmUuZW52dmFsLCAnLycpOworLQkJaWYgKHApCistCQkJKnAgPSAnXDAnOworKworKwlp ZiAoc2V0X2VudikgeworKwkJY2xpZW50LT5zdG9yZS5lbnZ2YXIgPSAiS1JCNUNDTkFNRSI7Cisg CX0KKyAJaWYgKChzdHJjbXAobmV3X2NjdHlwZSwgIkZJTEUiKSA9PSAwKSB8fCAoc3RyY21wKG5l d19jY3R5cGUsICJESVIiKSA9PSAwKSkKKyAJCWNsaWVudC0+c3RvcmUuZmlsZW5hbWUgPSB4c3Ry ZHVwKG5ld19jY25hbWUpOworLSNlbmRpZgorIAorICNpZmRlZiBVU0VfUEFNCistCWlmIChvcHRp b25zLnVzZV9wYW0pCisrCWlmIChvcHRpb25zLnVzZV9wYW0gJiYgc2V0X2VudikKKyAJCWRvX3Bh bV9wdXRlbnYoY2xpZW50LT5zdG9yZS5lbnZ2YXIsIGNsaWVudC0+c3RvcmUuZW52dmFsKTsKKyAj ZW5kaWYKKyAKK0BAIC0zNjQsNyArMzU0LDcgQEAgc3NoX2dzc2FwaV9rcmI1X3N0b3JlY3JlZHMo c3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyAKKyAJY2xpZW50LT5zdG9yZS5kYXRhID0ga3Ji X2NvbnRleHQ7CisgCistCXJldHVybjsKKysJcmV0dXJuIHNldF9lbnY7CisgfQorIAorIGludAor ZGlmZiAtLWdpdCBhL2dzcy1zZXJ2LmMgYi9nc3Mtc2Vydi5jCitpbmRleCA4YjRmYTljZmUuLjZl YjdkMjE2MyAxMDA2NDQKKy0tLSBhL2dzcy1zZXJ2LmMKKysrKyBiL2dzcy1zZXJ2LmMKK0BAIC00 MTUsMTggKzQxNSwyMCBAQCBzc2hfZ3NzYXBpX2NsZWFudXBfY3JlZHModm9pZCkKKyB9CisgCisg LyogQXMgdXNlciAqLworLXZvaWQKKytpbnQKKyBzc2hfZ3NzYXBpX3N0b3JlY3JlZHModm9pZCkK KyB7CisgCWlmIChvcHRpb25zLmdzc19kZWxlZ19jcmVkcyA9PSAwKSB7CisgCQlkZWJ1Z19mKCJk ZWxlZ2F0ZSBjcmVkZW50aWFsIGlzIGRpc2FibGVkLCBkb2luZyBub3RoaW5nIik7CistCQlyZXR1 cm47CisrCQlyZXR1cm4gMDsKKyAJfQorIAorIAlpZiAoZ3NzYXBpX2NsaWVudC5tZWNoICYmIGdz c2FwaV9jbGllbnQubWVjaC0+c3RvcmVjcmVkcykgeworLQkJKCpnc3NhcGlfY2xpZW50Lm1lY2gt PnN0b3JlY3JlZHMpKCZnc3NhcGlfY2xpZW50KTsKKysJCXJldHVybiAoKmdzc2FwaV9jbGllbnQu bWVjaC0+c3RvcmVjcmVkcykoJmdzc2FwaV9jbGllbnQpOworIAl9IGVsc2UKKyAJCWRlYnVnKCJz c2hfZ3NzYXBpX3N0b3JlY3JlZHM6IE5vdCBhIEdTU0FQSSBtZWNoYW5pc20iKTsKKysKKysJcmV0 dXJuIDA7CisgfQorIAorIC8qIFRoaXMgYWxsb3dzIEdTU0FQSSBtZXRob2RzIHRvIGRvIHRoaW5n cyB0byB0aGUgY2hpbGQncyBlbnZpcm9ubWVudCBiYXNlZAorQEAgLTUwNiw5ICs1MDgsNyBAQCBz c2hfZ3NzYXBpX3Jla2V5X2NyZWRzKHZvaWQpIHsKKyAJY2hhciAqZW52c3RyOworICNlbmRpZgor IAorLQlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSA9PSBOVUxMICYmCistCSAgICBn c3NhcGlfY2xpZW50LnN0b3JlLmVudnZhbCA9PSBOVUxMICYmCistCSAgICBnc3NhcGlfY2xpZW50 LnN0b3JlLmVudnZhciA9PSBOVUxMKQorKwlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwg PT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKyAJb2sgPSBtbV9zc2hfZ3NzYXBpX3VwZGF0ZV9jcmVk cygmZ3NzYXBpX2NsaWVudC5zdG9yZSk7CitkaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZj b25mLmMKK2luZGV4IGRlM2ZhOTQ4MS4uMTBiNDNkNTZhIDEwMDY0NAorLS0tIGEvc2VydmNvbmYu YworKysrIGIvc2VydmNvbmYuYworQEAgLTEzMSw2ICsxMzEsNyBAQCBpbml0aWFsaXplX3NlcnZl cl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCisgCW9wdGlvbnMtPmtlcmJlcm9zX29y X2xvY2FsX3Bhc3N3ZCA9IC0xOworIAlvcHRpb25zLT5rZXJiZXJvc190aWNrZXRfY2xlYW51cCA9 IC0xOworIAlvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuID0gLTE7CisrCW9wdGlvbnMt PmtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUgPSAtMTsKKyAJb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0 aW9uPS0xOworIAlvcHRpb25zLT5nc3Nfa2V5ZXggPSAtMTsKKyAJb3B0aW9ucy0+Z3NzX2NsZWFu dXBfY3JlZHMgPSAtMTsKK0BAIC0zNzQsNiArMzc1LDggQEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9v cHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCisgCQlvcHRpb25zLT5rZXJiZXJvc190aWNr ZXRfY2xlYW51cCA9IDE7CisgCWlmIChvcHRpb25zLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuID09 IC0xKQorIAkJb3B0aW9ucy0+a2VyYmVyb3NfZ2V0X2Fmc190b2tlbiA9IDA7CisrCWlmIChvcHRp b25zLT5rZXJiZXJvc191bmlxdWVfY2NhY2hlID09IC0xKQorKwkJb3B0aW9ucy0+a2VyYmVyb3Nf dW5pcXVlX2NjYWNoZSA9IDA7CisgCWlmIChvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPT0g LTEpCisgCQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAwOworIAlpZiAob3B0aW9ucy0+ Z3NzX2tleWV4ID09IC0xKQorQEAgLTU2MSw3ICs1NjQsNyBAQCB0eXBlZGVmIGVudW0geworIAlz UG9ydCwgc0hvc3RLZXlGaWxlLCBzTG9naW5HcmFjZVRpbWUsCisgCXNQZXJtaXRSb290TG9naW4s IHNMb2dGYWNpbGl0eSwgc0xvZ0xldmVsLCBzTG9nVmVyYm9zZSwKKyAJc0tlcmJlcm9zQXV0aGVu dGljYXRpb24sIHNLZXJiZXJvc09yTG9jYWxQYXNzd2QsIHNLZXJiZXJvc1RpY2tldENsZWFudXAs CistCXNLZXJiZXJvc0dldEFGU1Rva2VuLCBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwKKysJc0tl cmJlcm9zR2V0QUZTVG9rZW4sIHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgc1Bhc3N3b3JkQXV0aGVu dGljYXRpb24sCisgCXNLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uLCBzTGlzdGVuQWRkcmVz cywgc0FkZHJlc3NGYW1pbHksCisgCXNQcmludE1vdGQsIHNQcmludExhc3RMb2csIHNJZ25vcmVS aG9zdHMsCisgCXNYMTFGb3J3YXJkaW5nLCBzWDExRGlzcGxheU9mZnNldCwgc1gxMVVzZUxvY2Fs aG9zdCwKK0BAIC02NTIsMTEgKzY1NSwxMyBAQCBzdGF0aWMgc3RydWN0IHsKKyAjZWxzZQorIAl7 ICJrZXJiZXJvc2dldGFmc3Rva2VuIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisg I2VuZGlmCisrCXsgImtlcmJlcm9zdW5pcXVlY2NhY2hlIiwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hl LCBTU0hDRkdfR0xPQkFMIH0sCisgI2Vsc2UKKyAJeyAia2VyYmVyb3NhdXRoZW50aWNhdGlvbiIs IHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAorIAl7ICJrZXJiZXJvc29ybG9jYWxwYXNzd2Qi LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAia2VyYmVyb3N0aWNrZXRjbGVh bnVwIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisgCXsgImtlcmJlcm9zZ2V0YWZz dG9rZW4iLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKysJeyAia2VyYmVyb3N1bmlx dWVjY2FjaGUiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAjZW5kaWYKKyAJeyAi a2VyYmVyb3N0Z3RwYXNzaW5nIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisgCXsg ImFmc3Rva2VucGFzc2luZyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorQEAgLTE2 NjksNiArMTY3NCwxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJP cHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAorIAkJaW50cHRyID0gJm9wdGlvbnMtPmtlcmJl cm9zX2dldF9hZnNfdG9rZW47CisgCQlnb3RvIHBhcnNlX2ZsYWc7CisgCisrCWNhc2Ugc0tlcmJl cm9zVW5pcXVlQ0NhY2hlOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPmtlcmJlcm9zX3VuaXF1ZV9j Y2FjaGU7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisgCWNhc2Ugc0dzc0F1dGhlbnRpY2F0aW9u OgorIAkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbjsKKyAJCWdvdG8gcGFy c2VfZmxhZzsKK0BAIC0zMzI5LDYgKzMzMzgsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25z ICpvKQorICMgaWZkZWYgVVNFX0FGUworIAlkdW1wX2NmZ19mbXRpbnQoc0tlcmJlcm9zR2V0QUZT VG9rZW4sIG8tPmtlcmJlcm9zX2dldF9hZnNfdG9rZW4pOworICMgZW5kaWYKKysJZHVtcF9jZmdf Zm10aW50KHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgby0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZSk7 CisgI2VuZGlmCisgI2lmZGVmIEdTU0FQSQorIAlkdW1wX2NmZ19mbXRpbnQoc0dzc0F1dGhlbnRp Y2F0aW9uLCBvLT5nc3NfYXV0aGVudGljYXRpb24pOworZGlmZiAtLWdpdCBhL3NlcnZjb25mLmgg Yi9zZXJ2Y29uZi5oCitpbmRleCA3NjY0MWQ1ODAuLmJmNTg5OTExYSAxMDA2NDQKKy0tLSBhL3Nl cnZjb25mLmgKKysrKyBiL3NlcnZjb25mLmgKK0BAIC0xNTAsNiArMTUwLDggQEAgdHlwZWRlZiBz dHJ1Y3QgeworIAkJCQkJCSAqIGZpbGUgb24gbG9nb3V0LiAqLworIAlpbnQgICAgIGtlcmJlcm9z X2dldF9hZnNfdG9rZW47CQkvKiBJZiB0cnVlLCB0cnkgdG8gZ2V0IEFGUyB0b2tlbiBpZgorIAkJ CQkJCSAqIGF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJvcy4gKi8KKysJaW50ICAgICBrZXJiZXJv c191bmlxdWVfY2NhY2hlOwkJLyogSWYgdHJ1ZSwgdGhlIGFjcXVpcmVkIHRpY2tldCB3aWxsCisr CQkJCQkJICogYmUgc3RvcmVkIGluIHBlci1zZXNzaW9uIGNjYWNoZSAqLworIAlpbnQgICAgIGdz c19hdXRoZW50aWNhdGlvbjsJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQSSBhdXRoZW50aWNhdGlv biAqLworIAlpbnQgICAgIGdzc19rZXlleDsJCS8qIElmIHRydWUsIHBlcm1pdCBHU1NBUEkga2V5 IGV4Y2hhbmdlICovCisgCWludCAgICAgZ3NzX2NsZWFudXBfY3JlZHM7CS8qIElmIHRydWUsIGRl c3Ryb3kgY3JlZCBjYWNoZSBvbiBsb2dvdXQgKi8KK2RpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9z ZXNzaW9uLmMKK2luZGV4IDYxMGEyY2M2Zi4uNTE3Y2FiNmI2IDEwMDY0NAorLS0tIGEvc2Vzc2lv bi5jCisrKysgYi9zZXNzaW9uLmMKK0BAIC05ODgsNyArOTg4LDggQEAgZG9fc2V0dXBfZW52KHN0 cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqc2hlbGwpCisgCS8qIEFsbG93 IGFueSBHU1NBUEkgbWV0aG9kcyB0aGF0IHdlJ3ZlIHVzZWQgdG8gYWx0ZXIKKyAJICogdGhlIGNo aWxkJ3MgZW52aXJvbm1lbnQgYXMgdGhleSBzZWUgZml0CisgCSAqLworLQlzc2hfZ3NzYXBpX2Rv X2NoaWxkKCZlbnYsICZlbnZzaXplKTsKKysJaWYgKHMtPmF1dGhjdHh0LT5rcmI1X3NldF9lbnYp CisrCQlzc2hfZ3NzYXBpX2RvX2NoaWxkKCZlbnYsICZlbnZzaXplKTsKKyAjZW5kaWYKKyAKKyAJ LyogU2V0IGJhc2ljIGVudmlyb25tZW50LiAqLworQEAgLTEwNzAsNyArMTA3MSw3IEBAIGRvX3Nl dHVwX2VudihzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKnNoZWxsKQor IAl9CisgI2VuZGlmCisgI2lmZGVmIEtSQjUKKy0JaWYgKHMtPmF1dGhjdHh0LT5rcmI1X2NjbmFt ZSkKKysJaWYgKHMtPmF1dGhjdHh0LT5rcmI1X2NjbmFtZSAmJiBzLT5hdXRoY3R4dC0+a3JiNV9z ZXRfZW52KQorIAkJY2hpbGRfc2V0X2VudigmZW52LCAmZW52c2l6ZSwgIktSQjVDQ05BTUUiLAor IAkJICAgIHMtPmF1dGhjdHh0LT5rcmI1X2NjbmFtZSk7CisgI2VuZGlmCitkaWZmIC0tZ2l0IGEv c3NoLWdzcy5oIGIvc3NoLWdzcy5oCitpbmRleCBkYjM0ZDc3ZjQuLmE4OTRlMjNjOSAxMDA2NDQK Ky0tLSBhL3NzaC1nc3MuaAorKysrIGIvc3NoLWdzcy5oCitAQCAtMTE2LDcgKzExNiw3IEBAIHR5 cGVkZWYgc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9zdHJ1Y3QgeworIAlpbnQgKCpkb2NoaWxkKSAo c3NoX2dzc2FwaV9jbGllbnQgKik7CisgCWludCAoKnVzZXJvaykgKHNzaF9nc3NhcGlfY2xpZW50 ICosIGNoYXIgKik7CisgCWludCAoKmxvY2FsbmFtZSkgKHNzaF9nc3NhcGlfY2xpZW50ICosIGNo YXIgKiopOworLQl2b2lkICgqc3RvcmVjcmVkcykgKHNzaF9nc3NhcGlfY2xpZW50ICopOworKwlp bnQgKCpzdG9yZWNyZWRzKSAoc3NoX2dzc2FwaV9jbGllbnQgKik7CisgCWludCAoKnVwZGF0ZWNy ZWRzKSAoc3NoX2dzc2FwaV9jY2FjaGUgKiwgc3NoX2dzc2FwaV9jbGllbnQgKik7CisgfSBzc2hf Z3NzYXBpX21lY2g7CisgCitAQCAtMTg2LDcgKzE4Niw3IEBAIGludCBzc2hfZ3NzYXBpX3VzZXJv ayhjaGFyICpuYW1lLCBzdHJ1Y3QgcGFzc3dkICosIGludCBrZXgpOworIE9NX3VpbnQzMiBzc2hf Z3NzYXBpX2NoZWNrbWljKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOwor IHZvaWQgc3NoX2dzc2FwaV9kb19jaGlsZChjaGFyICoqKiwgdV9pbnQgKik7Cisgdm9pZCBzc2hf Z3NzYXBpX2NsZWFudXBfY3JlZHModm9pZCk7Cistdm9pZCBzc2hfZ3NzYXBpX3N0b3JlY3JlZHMo dm9pZCk7CisraW50IHNzaF9nc3NhcGlfc3RvcmVjcmVkcyh2b2lkKTsKKyBjb25zdCBjaGFyICpz c2hfZ3NzYXBpX2Rpc3BsYXluYW1lKHZvaWQpOworIAorIGNoYXIgKnNzaF9nc3NhcGlfc2VydmVy X21lY2hhbmlzbXModm9pZCk7CitkaWZmIC0tZ2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNl c3Npb24uYworaW5kZXggZjg0N2ZjMGE5Li45ZDc1YTQ1NTUgMTAwNjQ0CistLS0gYS9zc2hkLXNl c3Npb24uYworKysrIGIvc3NoZC1zZXNzaW9uLmMKK0BAIC0xMjk1LDcgKzEyOTUsNyBAQCBtYWlu KGludCBhYywgY2hhciAqKmF2KQorICNpZmRlZiBHU1NBUEkKKyAJaWYgKG9wdGlvbnMuZ3NzX2F1 dGhlbnRpY2F0aW9uKSB7CisgCQl0ZW1wb3JhcmlseV91c2VfdWlkKGF1dGhjdHh0LT5wdyk7Cist CQlzc2hfZ3NzYXBpX3N0b3JlY3JlZHMoKTsKKysJCWF1dGhjdHh0LT5rcmI1X3NldF9lbnYgPSBz c2hfZ3NzYXBpX3N0b3JlY3JlZHMoKTsKKyAJCXJlc3RvcmVfdWlkKCk7CisgCX0KKyAjZW5kaWYK K2RpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQoraW5kZXggNTkyOGI2 Y2QyLi5kMGIwZGZlMzYgMTAwNjQ0CistLS0gYS9zc2hkX2NvbmZpZy41CisrKysgYi9zc2hkX2Nv bmZpZy41CitAQCAtMTA1Nyw2ICsxMDU3LDE0IEBAIFNwZWNpZmllcyB3aGV0aGVyIHRvIGF1dG9t YXRpY2FsbHkgZGVzdHJveSB0aGUgdXNlcidzIHRpY2tldCBjYWNoZQorIGZpbGUgb24gbG9nb3V0 LgorIFRoZSBkZWZhdWx0IGlzCisgLkNtIHllcyAuCisrLkl0IENtIEtlcmJlcm9zVW5pcXVlQ0Nh Y2hlCisrU3BlY2lmaWVzIHdoZXRoZXIgdG8gc3RvcmUgdGhlIGFjcXVpcmVkIHRpY2tldHMgaW4g dGhlIHBlci1zZXNzaW9uIGNyZWRlbnRpYWwKKytjYWNoZSB1bmRlciAvdG1wLyBvciB3aGV0aGVy IHRvIHVzZSBwZXItdXNlciBjcmVkZW50aWFsIGNhY2hlIGFzIGNvbmZpZ3VyZWQgaW4KKysuUGEg L2V0Yy9rcmI1LmNvbmYgLgorK1RoZSBkZWZhdWx0IHZhbHVlCisrLkNtIG5vCisrY2FuIGxlYWQg dG8gb3ZlcndyaXRpbmcgcHJldmlvdXMgdGlja2V0cyBieSBzdWJzZXFlbnQgY29ubmVjdGlvbnMg dG8gdGhlIHNhbWUKKyt1c2VyIGFjY291bnQuCisgLkl0IENtIEtleEFsZ29yaXRobXMKKyBTcGVj aWZpZXMgdGhlIHBlcm1pdHRlZCBLRVggKEtleSBFeGNoYW5nZSkgYWxnb3JpdGhtcyB0aGF0IHRo ZSBzZXJ2ZXIgd2lsbAorIG9mZmVyIHRvIGNsaWVudHMuCistLSAKKzIuNTMuMAorCgpkaWZmIC0t Z2l0IGEvMDAxNi1vcGVuc3NoLTYuNHAxLWZyb210by1yZW1vdGUucGF0Y2ggYi8wMDE2LW9wZW5z c2gtNi40cDEtZnJvbXRvLXJlbW90ZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMmEyNTc1ZS4uMDAwMDAwMAotLS0gYS8wMDE2LW9wZW5zc2gtNi40cDEtZnJvbXRvLXJlbW90 ZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLUZyb20gZDc1NWQ2NDdjMzNm OTZjZDRlYzdkNTQ5OWQxMWVjZDQ0M2JkYjA5OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZy b206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUg TWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAxNi81M10gb3BlbnNzaC02 LjRwMS1mcm9tdG8tcmVtb3RlCi0KLS0tLQotIHNjcC5jIHwgNSArKysrLQotIDEgZmlsZSBjaGFu Z2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3NjcC5j IGIvc2NwLmMKLWluZGV4IGM1ZjU3M2NjMS4uZDk3YTU0Y2M0IDEwMDY0NAotLS0tIGEvc2NwLmMK LSsrKyBiL3NjcC5jCi1AQCAtMTE0OCw3ICsxMTQ4LDEwIEBAIHRvcmVtb3RlKGludCBhcmdjLCBj aGFyICoqYXJndiwgZW51bSBzY3BfbW9kZV9lIG1vZGUsIGNoYXIgKnNmdHBfZGlyZWN0KQotIAkJ CWFkZGFyZ3MoJmFsaXN0LCAiJXMiLCBzc2hfcHJvZ3JhbSk7Ci0gCQkJYWRkYXJncygmYWxpc3Qs ICIteCIpOwotIAkJCWFkZGFyZ3MoJmFsaXN0LCAiLW9DbGVhckFsbEZvcndhcmRpbmdzPXllcyIp OwotLQkJCWFkZGFyZ3MoJmFsaXN0LCAiLW4iKTsKLSsJCQlpZiAoaXNhdHR5KGZpbGVubyhzdGRp bikpKQotKwkJCQlhZGRhcmdzKCZhbGlzdCwgIi10Iik7Ci0rCQkJZWxzZQotKwkJCQlhZGRhcmdz KCZhbGlzdCwgIi1uIik7Ci0gCQkJZm9yIChqID0gMDsgaiA8IHJlbW90ZV9yZW1vdGVfYXJncy5u dW07IGorKykgewotIAkJCQlhZGRhcmdzKCZhbGlzdCwgIiVzIiwKLSAJCQkJICAgIHJlbW90ZV9y ZW1vdGVfYXJncy5saXN0W2pdKTsKLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDE2LW9w ZW5zc2gtNy4ycDItazVsb2dpbl9kaXJlY3RvcnkucGF0Y2ggYi8wMDE2LW9wZW5zc2gtNy4ycDIt azVsb2dpbl9kaXJlY3RvcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uY2FhNWI5ZAotLS0gL2Rldi9udWxsCisrKyBiLzAwMTYtb3BlbnNzaC03LjJwMi1rNWxvZ2lu X2RpcmVjdG9yeS5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorRnJvbSBmMDVkMGFkYzhmMTVlMDFh MzQ3OWQ0OTY0NWRmMjYxNzBiZTlkNzc2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTog RG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkg MjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDE2LzU0XSBvcGVuc3NoLTcuMnAy LWs1bG9naW5fZGlyZWN0b3J5CisKKyMgUmVzcGVjdCBrNWxvZ2luX2RpcmVjdG9yeSBvcHRpb24g aW4ga3JrNS5jb25mICgjMTMyODI0MykKKy0tLQorIGF1dGgta3JiNS5jICAgICB8IDE2ICsrKysr KysrKysrKysrKysKKyBhdXRoLmggICAgICAgICAgfCAgMiArKworIGdzcy1zZXJ2LWtyYjUuYyB8 IDIxICsrKysrKysrKysrKysrKysrKysrLQorIHNzaGQuOCAgICAgICAgICB8ICA0ICsrKysKKyA0 IGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAt LWdpdCBhL2F1dGgta3JiNS5jIGIvYXV0aC1rcmI1LmMKK2luZGV4IDBkZTFhYWY4ZC4uMTQ4MjQy Y2JmIDEwMDY0NAorLS0tIGEvYXV0aC1rcmI1LmMKKysrKyBiL2F1dGgta3JiNS5jCitAQCAtNDY1 LDUgKzQ2NSwyMSBAQCBzc2hfa3JiNV9jY19uZXdfdW5pcXVlKGtyYjVfY29udGV4dCBjdHgsIGty YjVfY2NhY2hlICpjY2FjaGUsIGludCAqbmVlZF9lbnZpcm9ubQorIAkJcmV0dXJuIChrcmI1X2Nj X3Jlc29sdmUoY3R4LCBjY25hbWUsIGNjYWNoZSkpOworIAl9CisgfQorKworKy8qCisrICogUmVh ZHMgIGs1bG9naW5fZGlyZWN0b3J5ICBvcHRpb24gZnJvbSB0aGUgIGtyYjUuY29uZgorKyAqLwor K2tyYjVfZXJyb3JfY29kZQorK3NzaF9rcmI1X2dldF9rNWxvZ2luX2RpcmVjdG9yeShrcmI1X2Nv bnRleHQgY3R4LCBjaGFyICoqazVsb2dpbl9kaXJlY3RvcnkpIHsKKysJcHJvZmlsZV90IHA7Cisr CWludCByZXQgPSAwOworKworKwlyZXQgPSBrcmI1X2dldF9wcm9maWxlKGN0eCwgJnApOworKwlp ZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJcmV0dXJuIHByb2ZpbGVfZ2V0X3N0cmluZyhw LCAibGliZGVmYXVsdHMiLCAiazVsb2dpbl9kaXJlY3RvcnkiLCBOVUxMLCBOVUxMLAorKwkJazVs b2dpbl9kaXJlY3RvcnkpOworK30KKyAjZW5kaWYgLyogIUhFSU1EQUwgKi8KKyAjZW5kaWYgLyog S1JCNSAqLworZGlmZiAtLWdpdCBhL2F1dGguaCBiL2F1dGguaAoraW5kZXggOWU1NWZmOGFkLi44 MTVmODIxZjkgMTAwNjQ0CistLS0gYS9hdXRoLmgKKysrKyBiL2F1dGguaAorQEAgLTI0NSw2ICsy NDUsOCBAQCBpbnQJIHN5c19hdXRoX3Bhc3N3ZChzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7 CisgCisgI2lmIGRlZmluZWQoS1JCNSkgJiYgIWRlZmluZWQoSEVJTURBTCkKKyBrcmI1X2Vycm9y X2NvZGUgc3NoX2tyYjVfY2NfbmV3X3VuaXF1ZShrcmI1X2NvbnRleHQsIGtyYjVfY2NhY2hlICos IGludCAqKTsKKytrcmI1X2Vycm9yX2NvZGUgc3NoX2tyYjVfZ2V0X2s1bG9naW5fZGlyZWN0b3J5 KGtyYjVfY29udGV4dCBjdHgsCisrCWNoYXIgKiprNWxvZ2luX2RpcmVjdG9yeSk7CisgI2VuZGlm CisgCisgI2VuZGlmIC8qIEFVVEhfSCAqLworZGlmZiAtLWdpdCBhL2dzcy1zZXJ2LWtyYjUuYyBi L2dzcy1zZXJ2LWtyYjUuYworaW5kZXggNDE1ZmIxODkzLi43ZGYzMWM2YWYgMTAwNjQ0CistLS0g YS9nc3Mtc2Vydi1rcmI1LmMKKysrKyBiL2dzcy1zZXJ2LWtyYjUuYworQEAgLTE0NCw4ICsxNDQs MjcgQEAgc3NoX2dzc2FwaV9rNWxvZ2luX2V4aXN0cygpCisgeworIAljaGFyIGZpbGVbTUFYUEFU SExFTl07CisgCXN0cnVjdCBwYXNzd2QgKnB3ID0gdGhlX2F1dGhjdHh0LT5wdzsKKysJY2hhciAq azVsb2dpbl9kaXJlY3RvcnkgPSBOVUxMOworKwlpbnQgcmV0ID0gMDsKKysKKysJcmV0ID0gc3No X2tyYjVfZ2V0X2s1bG9naW5fZGlyZWN0b3J5KGtyYl9jb250ZXh0LCAmazVsb2dpbl9kaXJlY3Rv cnkpOworKwlkZWJ1ZzNfZigiazVsb2dpbl9kaXJlY3RvcnkgPSAlcyAocnY9JWQpIiwgazVsb2dp bl9kaXJlY3RvcnksIHJldCk7CisrCWlmIChrNWxvZ2luX2RpcmVjdG9yeSA9PSBOVUxMIHx8IHJl dCAhPSAwKSB7CisrCQkvKiBJZiBub3Qgc2V0LCB0aGUgbGlicmFyeSB3aWxsIGxvb2sgZm9yICBr NWxvZ2luCisrCQkgKiBmaWxlcyBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCB3aXRoIHRo ZSBmaWxlbmFtZSAgLms1bG9naW4uCisrCQkgKi8KKysJCXNucHJpbnRmKGZpbGUsIHNpemVvZihm aWxlKSwgIiVzLy5rNWxvZ2luIiwgcHctPnB3X2Rpcik7CisrCX0gZWxzZSB7CisrCQkvKiBJZiBz ZXQsIHRoZSBsaWJyYXJ5IHdpbGwgbG9vayBmb3IgYSBsb2NhbCB1c2VyJ3MgazVsb2dpbiBmaWxl CisrCQkgKiB3aXRoaW4gdGhlIG5hbWVkIGRpcmVjdG9yeSwgd2l0aCBhIGZpbGVuYW1lIGNvcnJl c3BvbmRpbmcgdG8gdGhlCisrCQkgKiBsb2NhbCB1c2VybmFtZS4KKysJCSAqLworKwkJc25wcmlu dGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCAiJXMlcyVzIiwgazVsb2dpbl9kaXJlY3RvcnksIAorKwkJ CWs1bG9naW5fZGlyZWN0b3J5W3N0cmxlbihrNWxvZ2luX2RpcmVjdG9yeSktMV0gIT0gJy8nID8g Ii8iIDogIiIsCisrCQkJcHctPnB3X25hbWUpOworKwl9CisrCWRlYnVnX2YoIkNoZWNraW5nIGV4 aXN0ZW5jZSBvZiBmaWxlICVzIiwgZmlsZSk7CisgCistCXNucHJpbnRmKGZpbGUsIHNpemVvZihm aWxlKSwgIiVzLy5rNWxvZ2luIiwgcHctPnB3X2Rpcik7CisgCXJldHVybiBhY2Nlc3MoZmlsZSwg Rl9PSykgPT0gMDsKKyB9CisgCitkaWZmIC0tZ2l0IGEvc3NoZC44IGIvc3NoZC44CitpbmRleCBl MmQ4ZmYwMDMuLmZhMzNmNTIzMiAxMDA2NDQKKy0tLSBhL3NzaGQuOAorKysrIGIvc3NoZC44CitA QCAtODgwLDYgKzg4MCwxMCBAQCBybG9naW4vcnNoLgorIFRoZXNlIGZpbGVzIGVuZm9yY2UgR1NT QVBJL0tlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGFjY2VzcyBjb250cm9sLgorIEZ1cnRoZXIgZGV0 YWlscyBhcmUgZGVzY3JpYmVkIGluCisgLlhyIGtzdSAxIC4KKytUaGUgbG9jYXRpb24gb2YgdGhl IGs1bG9naW4gZmlsZSBkZXBlbmRzIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbgorKy5DbSBr NWxvZ2luX2RpcmVjdG9yeQorK2luIHRoZQorKy5YciBrcmI1LmNvbmYgNSAuCisgLlBwCisgLkl0 IFBhIH4vLnNzaC8KKyBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmb3Ig YWxsIHVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbgorLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdp dCBhLzAwMTctb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJvb3QucGF0Y2ggYi8wMDE3LW9wZW5z c2gtNi42LjFwMS1sb2ctaW4tY2hyb290LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA2NzA0NjE2Li4wMDAwMDAwCi0tLSBhLzAwMTctb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1j aHJvb3QucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNTUgKzAsMCBAQAotRnJvbSA2NzQ4NTE2 NzdkMWUzOGNmNjk5Mjk0OGY4ZjQ1MmU0NjEwN2EyMDE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1 LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BBVENIIDE3LzUzXSBvcGVu c3NoLTYuNi4xcDEtbG9nLWluLWNocm9vdAotCi0tLS0KLSBsb2cuYyAgICAgICAgICAgICAgfCAx MSArKysrKysrKystLQotIGxvZy5oICAgICAgICAgICAgICB8ICAxICsKLSBtb25pdG9yLmMgICAg ICAgICAgfCAxNyArKysrKysrKysrKysrKystLQotIG1vbml0b3IuaCAgICAgICAgICB8ICAyICst Ci0gc2Vzc2lvbi5jICAgICAgICAgIHwgMjYgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KLSBz ZnRwLXNlcnZlci1tYWluLmMgfCAgMiArLQotIHNmdHAtc2VydmVyLmMgICAgICB8ICA2ICsrKy0t LQotIHNmdHAuaCAgICAgICAgICAgICB8ICAyICstCi0gc3NoZC1zZXNzaW9uLmMgICAgIHwgIDcg KysrKysrLQotIDkgZmlsZXMgY2hhbmdlZCwgNTIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25z KC0pCi0KLWRpZmYgLS1naXQgYS9sb2cuYyBiL2xvZy5jCi1pbmRleCA1OTY5YzRhMTYuLjQ5YjBj OGE2OCAxMDA2NDQKLS0tLSBhL2xvZy5jCi0rKysgYi9sb2cuYwotQEAgLTE5Niw2ICsxOTYsMTEg QEAgdm9pZAotIGxvZ19pbml0KGNvbnN0IGNoYXIgKmF2MCwgTG9nTGV2ZWwgbGV2ZWwsIFN5c2xv Z0ZhY2lsaXR5IGZhY2lsaXR5LAotICAgICBpbnQgb25fc3RkZXJyKQotIHsKLSsJbG9nX2luaXRf aGFuZGxlcihhdjAsIGxldmVsLCBmYWNpbGl0eSwgb25fc3RkZXJyLCAxKTsKLSt9Ci0rCi0rdm9p ZAotK2xvZ19pbml0X2hhbmRsZXIoY29uc3QgY2hhciAqYXYwLCBMb2dMZXZlbCBsZXZlbCwgU3lz bG9nRmFjaWxpdHkgZmFjaWxpdHksIGludCBvbl9zdGRlcnIsIGludCByZXNldF9oYW5kbGVyKSB7 Ci0gI2lmIGRlZmluZWQoSEFWRV9PUEVOTE9HX1IpICYmIGRlZmluZWQoU1lTTE9HX0RBVEFfSU5J VCkKLSAJc3RydWN0IHN5c2xvZ19kYXRhIHNkYXRhID0gU1lTTE9HX0RBVEFfSU5JVDsKLSAjZW5k aWYKLUBAIC0yMDgsOCArMjEzLDEwIEBAIGxvZ19pbml0KGNvbnN0IGNoYXIgKmF2MCwgTG9nTGV2 ZWwgbGV2ZWwsIFN5c2xvZ0ZhY2lsaXR5IGZhY2lsaXR5LAotIAkJZXhpdCgxKTsKLSAJfQotIAot LQlsb2dfaGFuZGxlciA9IE5VTEw7Ci0tCWxvZ19oYW5kbGVyX2N0eCA9IE5VTEw7Ci0rCWlmIChy ZXNldF9oYW5kbGVyKSB7Ci0rCQlsb2dfaGFuZGxlciA9IE5VTEw7Ci0rCQlsb2dfaGFuZGxlcl9j dHggPSBOVUxMOwotKwl9Ci0gCi0gCWxvZ19vbl9zdGRlcnIgPSBvbl9zdGRlcnI7Ci0gCWlmIChv bl9zdGRlcnIpCi1kaWZmIC0tZ2l0IGEvbG9nLmggYi9sb2cuaAotaW5kZXggOGU4ZGZjMjNmLi43 MDA0OGE4YWYgMTAwNjQ0Ci0tLS0gYS9sb2cuaAotKysrIGIvbG9nLmgKLUBAIC01Miw2ICs1Miw3 IEBAIHR5cGVkZWYgZW51bSB7Ci0gdHlwZWRlZiB2b2lkIChsb2dfaGFuZGxlcl9mbikoTG9nTGV2 ZWwsIGludCwgY29uc3QgY2hhciAqLCB2b2lkICopOwotIAotIHZvaWQgICAgIGxvZ19pbml0KGNv bnN0IGNoYXIgKiwgTG9nTGV2ZWwsIFN5c2xvZ0ZhY2lsaXR5LCBpbnQpOwotK3ZvaWQgICAgIGxv Z19pbml0X2hhbmRsZXIoY29uc3QgY2hhciAqLCBMb2dMZXZlbCwgU3lzbG9nRmFjaWxpdHksIGlu dCwgaW50KTsKLSBMb2dMZXZlbCBsb2dfbGV2ZWxfZ2V0KHZvaWQpOwotIGludCAgICAgIGxvZ19j aGFuZ2VfbGV2ZWwoTG9nTGV2ZWwpOwotIGludCAgICAgIGxvZ19pc19vbl9zdGRlcnIodm9pZCk7 Ci1kaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRvci5jCi1pbmRleCBkNDYzZDZhOWMuLjQ1 MzQ2OTY2NSAxMDA2NDQKLS0tLSBhL21vbml0b3IuYwotKysrIGIvbW9uaXRvci5jCi1AQCAtMjAw Nyw5ICsyMDA3LDIyIEBAIG1vbml0b3JfaW5pdCh2b2lkKQotIH0KLSAKLSB2b2lkCi0tbW9uaXRv cl9yZWluaXQoc3RydWN0IG1vbml0b3IgKm1vbikKLSttb25pdG9yX3JlaW5pdChzdHJ1Y3QgbW9u aXRvciAqbW9uLCBjb25zdCBjaGFyICpjaHJvb3RfZGlyKQotIHsKLS0JbW9uaXRvcl9vcGVuZmRz KG1vbiwgMCk7Ci0rCXN0cnVjdCBzdGF0IGRldl9sb2dfc3RhdDsKLSsJY2hhciAqZGV2X2xvZ19w YXRoOwotKwlpbnQgZG9fbG9nZmRzID0gMDsKLSsKLSsJaWYgKGNocm9vdF9kaXIgIT0gTlVMTCkg ewotKwkJeGFzcHJpbnRmKCZkZXZfbG9nX3BhdGgsICIlcy9kZXYvbG9nIiwgY2hyb290X2Rpcik7 Ci0rCi0rCQlpZiAoc3RhdChkZXZfbG9nX3BhdGgsICZkZXZfbG9nX3N0YXQpICE9IDApIHsKLSsJ CQlkZWJ1Z19mKCIvZGV2L2xvZyBkb2Vzbid0IGV4aXN0IGluICVzIGNocm9vdCAtIHdpbGwgdHJ5 IHRvIGxvZyB2aWEgbW9uaXRvciB1c2luZyBbcG9zdGF1dGhdIHN1ZmZpeCIsIGNocm9vdF9kaXIp OwotKwkJCWRvX2xvZ2ZkcyA9IDE7Ci0rCQl9Ci0rCQlmcmVlKGRldl9sb2dfcGF0aCk7Ci0rCX0K LSsJbW9uaXRvcl9vcGVuZmRzKG1vbiwgZG9fbG9nZmRzKTsKLSB9Ci0gCi0gI2lmZGVmIEdTU0FQ SQotZGlmZiAtLWdpdCBhL21vbml0b3IuaCBiL21vbml0b3IuaAotaW5kZXggZGJjN2UwMDM3Li5k NGQ2MzFkZGMgMTAwNjQ0Ci0tLS0gYS9tb25pdG9yLmgKLSsrKyBiL21vbml0b3IuaAotQEAgLTg1 LDcgKzg1LDcgQEAgc3RydWN0IG1vbml0b3IgewotIH07Ci0gCi0gc3RydWN0IG1vbml0b3IgKm1v bml0b3JfaW5pdCh2b2lkKTsKLS12b2lkIG1vbml0b3JfcmVpbml0KHN0cnVjdCBtb25pdG9yICop OwotK3ZvaWQgbW9uaXRvcl9yZWluaXQoc3RydWN0IG1vbml0b3IgKiwgY29uc3QgY2hhciAqKTsK LSAKLSBzdHJ1Y3QgQXV0aGN0eHQ7Ci0gdm9pZCBtb25pdG9yX2NoaWxkX3ByZWF1dGgoc3RydWN0 IHNzaCAqLCBzdHJ1Y3QgbW9uaXRvciAqKTsKLWRpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9zZXNz aW9uLmMKLWluZGV4IGI4YTJkYWU5Mi4uZDAzNGY1YzY1IDEwMDY0NAotLS0tIGEvc2Vzc2lvbi5j Ci0rKysgYi9zZXNzaW9uLmMKLUBAIC0xNjIsNiArMTYyLDcgQEAgbG9naW5fY2FwX3QgKmxjOwot IAotIHN0YXRpYyBpbnQgaXNfY2hpbGQgPSAwOwotIHN0YXRpYyBpbnQgaW5fY2hyb290ID0gMDsK LStzdGF0aWMgaW50IGhhdmVfZGV2X2xvZyA9IDE7Ci0gCi0gLyogRmlsZSBjb250YWluaW5nIHVz ZXJhdXRoIGluZm8sIGlmIEV4cG9zZUF1dGhJbmZvIHNldCAqLwotIHN0YXRpYyBjaGFyICphdXRo X2luZm9fZmlsZSA9IE5VTEw7Ci1AQCAtNjMyLDYgKzYzMyw3IEBAIGRvX2V4ZWMoc3RydWN0IHNz aCAqc3NoLCBTZXNzaW9uICpzLCBjb25zdCBjaGFyICpjb21tYW5kKQotIAlpbnQgcmV0OwotIAlj b25zdCBjaGFyICpmb3JjZWQgPSBOVUxMLCAqdHR5ID0gTlVMTDsKLSAJY2hhciBzZXNzaW9uX3R5 cGVbMTAyNF07Ci0rCXN0cnVjdCBzdGF0IGRldl9sb2dfc3RhdDsKLSAKLSAJaWYgKG9wdGlvbnMu YWRtX2ZvcmNlZF9jb21tYW5kKSB7Ci0gCQlvcmlnaW5hbF9jb21tYW5kID0gY29tbWFuZDsKLUBA IC02OTEsNiArNjkzLDEwIEBAIGRvX2V4ZWMoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzLCBj b25zdCBjaGFyICpjb21tYW5kKQotIAkJCXR0eSArPSA1OwotIAl9Ci0gCi0rCWlmIChsc3RhdCgi L2Rldi9sb2ciLCAmZGV2X2xvZ19zdGF0KSAhPSAwKSB7Ci0rCQloYXZlX2Rldl9sb2cgPSAwOwot Kwl9Ci0rCi0gCXZlcmJvc2UoIlN0YXJ0aW5nIHNlc3Npb246ICVzJXMlcyBmb3IgJXMgZnJvbSAl LjIwMHMgcG9ydCAlZCBpZCAlZCIsCi0gCSAgICBzZXNzaW9uX3R5cGUsCi0gCSAgICB0dHkgPT0g TlVMTCA/ICIiIDogIiBvbiAiLAotQEAgLTE0NjksMTQgKzE0NzUsNiBAQCBjaGlsZF9jbG9zZV9m ZHMoc3RydWN0IHNzaCAqc3NoKQotIAotIAkvKiBTdG9wIGRpcmVjdGluZyBsb2dzIHRvIGEgaGln aC1udW1iZXJlZCBmZCBiZWZvcmUgd2UgY2xvc2UgaXQgKi8KLSAJbG9nX3JlZGlyZWN0X3N0ZGVy cl90byhOVUxMKTsKLS0KLS0JLyoKLS0JICogQ2xvc2UgYW55IGV4dHJhIG9wZW4gZmlsZSBkZXNj cmlwdG9ycyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdGhlbQotLQkgKiBoYW5naW5nIGFyb3VuZCBp biBjbGllbnRzLiAgTm90ZSB0aGF0IHdlIHdhbnQgdG8gZG8gdGhpcyBhZnRlcgotLQkgKiBpbml0 Z3JvdXBzLCBiZWNhdXNlIGF0IGxlYXN0IG9uIFNvbGFyaXMgMi4zIGl0IGxlYXZlcyBmaWxlCi0t CSAqIGRlc2NyaXB0b3JzIG9wZW4uCi0tCSAqLwotLQljbG9zZWZyb20oU1RERVJSX0ZJTEVOTyAr IDEpOwotIH0KLSAKLSAvKgotQEAgLTE2MDksOCArMTYwNyw2IEBAIGRvX2NoaWxkKHN0cnVjdCBz c2ggKnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKLSAJCQlleGl0KDEpOwot IAl9Ci0gCi0tCWNsb3NlZnJvbShTVERFUlJfRklMRU5PICsgMSk7Ci0tCi0gCWRvX3JjX2ZpbGVz KHNzaCwgcywgc2hlbGwpOwotIAotIAkvKiByZXN0b3JlIFNJR1BJUEUgZm9yIGNoaWxkICovCi1A QCAtMTYzOCw5ICsxNjM0LDE3IEBAIGRvX2NoaWxkKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAq cywgY29uc3QgY2hhciAqY29tbWFuZCkKLSAjaWZkZWYgV0lUSF9TRUxJTlVYCi0gCQlzc2hfc2Vs aW51eF9jaGFuZ2VfY29udGV4dCgic2Z0cGRfdCIpOwotICNlbmRpZgotLQkJZXhpdChzZnRwX3Nl cnZlcl9tYWluKGksIGFyZ3YsIHMtPnB3KSk7Ci0rCQlleGl0KHNmdHBfc2VydmVyX21haW4oaSwg YXJndiwgcy0+cHcsIGhhdmVfZGV2X2xvZykpOwotIAl9Ci0gCi0rCS8qCi0rCSAqIENsb3NlIGFu eSBleHRyYSBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRoZW0K LSsJICogaGFuZ2luZyBhcm91bmQgaW4gY2xpZW50cy4gIE5vdGUgdGhhdCB3ZSB3YW50IHRvIGRv IHRoaXMgYWZ0ZXIKLSsJICogaW5pdGdyb3VwcywgYmVjYXVzZSBhdCBsZWFzdCBvbiBTb2xhcmlz IDIuMyBpdCBsZWF2ZXMgZmlsZQotKwkgKiBkZXNjcmlwdG9ycyBvcGVuLgotKwkgKi8KLSsJY2xv c2Vmcm9tKFNUREVSUl9GSUxFTk8gKyAxKTsKLSsKLSAJZmZsdXNoKE5VTEwpOwotIAotIAkvKiBH ZXQgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBzaGVsbCBuYW1lLiAqLwotZGlmZiAtLWdpdCBh L3NmdHAtc2VydmVyLW1haW4uYyBiL3NmdHAtc2VydmVyLW1haW4uYwotaW5kZXggMmM3MGY4OWJj Li5iYmI3OWYyNzggMTAwNjQ0Ci0tLS0gYS9zZnRwLXNlcnZlci1tYWluLmMKLSsrKyBiL3NmdHAt c2VydmVyLW1haW4uYwotQEAgLTQ4LDUgKzQ4LDUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi0gCQlyZXR1cm4gMTsKLSAJfQotIAotLQlyZXR1cm4gKHNmdHBfc2VydmVyX21haW4oYXJn YywgYXJndiwgdXNlcl9wdykpOwotKwlyZXR1cm4gKHNmdHBfc2VydmVyX21haW4oYXJnYywgYXJn diwgdXNlcl9wdywgMCkpOwotIH0KLWRpZmYgLS1naXQgYS9zZnRwLXNlcnZlci5jIGIvc2Z0cC1z ZXJ2ZXIuYwotaW5kZXggNzc3ODIxYWNkLi4xODVhZDE0NTkgMTAwNjQ0Ci0tLS0gYS9zZnRwLXNl cnZlci5jCi0rKysgYi9zZnRwLXNlcnZlci5jCi1AQCAtMTg5Nyw3ICsxODk3LDcgQEAgc2Z0cF9z ZXJ2ZXJfdXNhZ2Uodm9pZCkKLSB9Ci0gCi0gaW50Ci0tc2Z0cF9zZXJ2ZXJfbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YsIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHcpCi0rc2Z0cF9zZXJ2ZXJfbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHcsIGludCByZXNl dF9oYW5kbGVyKQotIHsKLSAJaW50IGksIHIsIGluLCBvdXQsIGNoLCBza2lwYXJncyA9IDAsIGxv Z19zdGRlcnIgPSAwOwotIAlzc2l6ZV90IGxlbiwgb2xlbjsKLUBAIC0xOTA5LDcgKzE5MDksNyBA QCBzZnRwX3NlcnZlcl9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndiwgc3RydWN0IHBhc3N3ZCAq dXNlcl9wdykKLSAJZXh0ZXJuIGNoYXIgKl9fcHJvZ25hbWU7Ci0gCi0gCV9fcHJvZ25hbWUgPSBz c2hfZ2V0X3Byb2duYW1lKGFyZ3ZbMF0pOwotLQlsb2dfaW5pdChfX3Byb2duYW1lLCBsb2dfbGV2 ZWwsIGxvZ19mYWNpbGl0eSwgbG9nX3N0ZGVycik7Ci0rCWxvZ19pbml0X2hhbmRsZXIoX19wcm9n bmFtZSwgbG9nX2xldmVsLCBsb2dfZmFjaWxpdHksIGxvZ19zdGRlcnIsIHJlc2V0X2hhbmRsZXIp OwotIAotIAlwdyA9IHB3Y29weSh1c2VyX3B3KTsKLSAKLUBAIC0xOTgyLDcgKzE5ODIsNyBAQCBz ZnRwX3NlcnZlcl9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndiwgc3RydWN0IHBhc3N3ZCAqdXNl cl9wdykKLSAJCX0KLSAJfQotIAotLQlsb2dfaW5pdChfX3Byb2duYW1lLCBsb2dfbGV2ZWwsIGxv Z19mYWNpbGl0eSwgbG9nX3N0ZGVycik7Ci0rCWxvZ19pbml0X2hhbmRsZXIoX19wcm9nbmFtZSwg bG9nX2xldmVsLCBsb2dfZmFjaWxpdHksIGxvZ19zdGRlcnIsIHJlc2V0X2hhbmRsZXIpOwotIAot IAkvKgotIAkgKiBPbiBwbGF0Zm9ybXMgd2hlcmUgd2UgY2FuLCBhdm9pZCBtYWtpbmcgL3Byb2Mv c2VsZi97bWVtLG1hcHN9Ci1kaWZmIC0tZ2l0IGEvc2Z0cC5oIGIvc2Z0cC5oCi1pbmRleCAyYmRl OGJiN2YuLmRkZjFhMzk2OCAxMDA2NDQKLS0tLSBhL3NmdHAuaAotKysrIGIvc2Z0cC5oCi1AQCAt OTcsNSArOTcsNSBAQAotIAotIHN0cnVjdCBwYXNzd2Q7Ci0gCi0taW50CXNmdHBfc2VydmVyX21h aW4oaW50LCBjaGFyICoqLCBzdHJ1Y3QgcGFzc3dkICopOwotK2ludAlzZnRwX3NlcnZlcl9tYWlu KGludCwgY2hhciAqKiwgc3RydWN0IHBhc3N3ZCAqLCBpbnQpOwotIHZvaWQJc2Z0cF9zZXJ2ZXJf Y2xlYW51cF9leGl0KGludCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLWRpZmYgLS1naXQg YS9zc2hkLXNlc3Npb24uYyBiL3NzaGQtc2Vzc2lvbi5jCi1pbmRleCAwMjhkNTg1MGUuLjRhNWVh YTFmZiAxMDA2NDQKLS0tLSBhL3NzaGQtc2Vzc2lvbi5jCi0rKysgYi9zc2hkLXNlc3Npb24uYwot QEAgLTQxNSw3ICs0MTUsNyBAQCBwcml2c2VwX3Bvc3RhdXRoKHN0cnVjdCBzc2ggKnNzaCwgQXV0 aGN0eHQgKmF1dGhjdHh0KQotICNlbmRpZgotIAotIAkvKiBOZXcgc29ja2V0IHBhaXIgKi8KLS0J bW9uaXRvcl9yZWluaXQocG1vbml0b3IpOwotKwltb25pdG9yX3JlaW5pdChwbW9uaXRvciwgb3B0 aW9ucy5jaHJvb3RfZGlyZWN0b3J5KTsKLSAKLSAJcG1vbml0b3ItPm1fcGlkID0gZm9yaygpOwot IAlpZiAocG1vbml0b3ItPm1fcGlkID09IC0xKQotQEAgLTQzNCw2ICs0MzQsMTEgQEAgcHJpdnNl cF9wb3N0YXV0aChzdHJ1Y3Qgc3NoICpzc2gsIEF1dGhjdHh0ICphdXRoY3R4dCkKLSAKLSAJY2xv c2UocG1vbml0b3ItPm1fc2VuZGZkKTsKLSAJcG1vbml0b3ItPm1fc2VuZGZkID0gLTE7Ci0rCWNs b3NlKHBtb25pdG9yLT5tX2xvZ19yZWN2ZmQpOwotKwlwbW9uaXRvci0+bV9sb2dfcmVjdmZkID0g LTE7Ci0rCi0rCWlmIChwbW9uaXRvci0+bV9sb2dfc2VuZGZkICE9IC0xKQotKwkJc2V0X2xvZ19o YW5kbGVyKG1tX2xvZ19oYW5kbGVyLCBwbW9uaXRvcik7Ci0gCi0gCS8qIERlbW90ZSB0aGUgcHJp dmF0ZSBrZXlzIHRvIHB1YmxpYyBrZXlzLiAqLwotIAlkZW1vdGVfc2Vuc2l0aXZlX2RhdGEoKTsK LS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDE3LW9wZW5zc2gtNi42cDEta3VzZXJvay5w YXRjaCBiLzAwMTctb3BlbnNzaC02LjZwMS1rdXNlcm9rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjdlMGFlNTIKLS0tIC9kZXYvbnVsbAorKysgYi8wMDE3LW9wZW5z c2gtNi42cDEta3VzZXJvay5wYXRjaApAQCAtMCwwICsxLDMxMyBAQAorRnJvbSBiZGIyYjU4ZTFh N2Y0ZDRhNDJhMGFjYTFmOGYzMDE1YjVlZGM4NmExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQor RnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAx NSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDE3LzU0XSBvcGVuc3No LTYuNnAxLWt1c2Vyb2sKKworI2h0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcu Y2dpP2lkPTE3ODAKKy0tLQorIGF1dGgta3JiNS5jICAgICB8ICAyMCArKysrKysrKy0KKyBnc3Mt c2Vydi1rcmI1LmMgfCAxMDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tCisgc2VydmNvbmYuYyAgICAgIHwgIDEzICsrKysrLQorIHNlcnZjb25mLmggICAg ICB8ICAgMSArCisgc3NoZF9jb25maWcgICAgIHwgICAxICsKKyBzc2hkX2NvbmZpZy41ICAgfCAg IDUgKysrCisgNiBmaWxlcyBjaGFuZ2VkLCAxMzkgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMo LSkKKworZGlmZiAtLWdpdCBhL2F1dGgta3JiNS5jIGIvYXV0aC1rcmI1LmMKK2luZGV4IDE0ODI0 MmNiZi4uMjg3YmRkMzVhIDEwMDY0NAorLS0tIGEvYXV0aC1rcmI1LmMKKysrKyBiL2F1dGgta3Ji NS5jCitAQCAtNTUsNiArNTUsMjEgQEAKKyAKKyBleHRlcm4gU2VydmVyT3B0aW9ucwkgb3B0aW9u czsKKyAKKytpbnQKKytzc2hfa3JiNV9rdXNlcm9rKGtyYjVfY29udGV4dCBrcmI1X2N0eCwga3Ji NV9wcmluY2lwYWwga3JiNV91c2VyLCBjb25zdCBjaGFyICpjbGllbnQsCisrICAgICAgICAgICAg ICAgICBpbnQgazVsb2dpbl9leGlzdHMpCisreworKwlpZiAob3B0aW9ucy51c2Vfa3VzZXJvayB8 fCAhazVsb2dpbl9leGlzdHMpCisrCQlyZXR1cm4ga3JiNV9rdXNlcm9rKGtyYjVfY3R4LCBrcmI1 X3VzZXIsIGNsaWVudCk7CisrCWVsc2UgeworKwkJY2hhciBrdXNlcls2NV07CisrCisrCQlpZiAo a3JiNV9hbmFtZV90b19sb2NhbG5hbWUoa3JiNV9jdHgsIGtyYjVfdXNlciwgc2l6ZW9mKGt1c2Vy KSwga3VzZXIpKQorKwkJCXJldHVybiAwOworKwkJcmV0dXJuIHN0cmNtcChrdXNlciwgY2xpZW50 KSA9PSAwOworKwl9CisrfQorKworIHN0YXRpYyBpbnQKKyBrcmI1X2luaXQodm9pZCAqY29udGV4 dCkKKyB7CitAQCAtMTU4LDggKzE3Myw5IEBAIGF1dGhfa3JiNV9wYXNzd29yZChBdXRoY3R4dCAq YXV0aGN0eHQsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKQorIAlpZiAocHJvYmxlbSkKKyAJCWdvdG8g b3V0OworIAorLQlpZiAoIWtyYjVfa3VzZXJvayhhdXRoY3R4dC0+a3JiNV9jdHgsIGF1dGhjdHh0 LT5rcmI1X3VzZXIsCistCSAgICBhdXRoY3R4dC0+cHctPnB3X25hbWUpKSB7CisrCS8qIFVzZSAh b3B0aW9ucy51c2Vfa3VzZXJvayBoZXJlIHRvIG1ha2Ugc3NoX2tyYjVfa3VzZXJvaygpIG5vdAor KwkgKiBkZXBlbmQgb24gdGhlIGV4aXN0YW5jZSBvZiAuazVsb2dpbiAqLworKwlpZiAoIXNzaF9r cmI1X2t1c2Vyb2soYXV0aGN0eHQtPmtyYjVfY3R4LCBhdXRoY3R4dC0+a3JiNV91c2VyLCBhdXRo Y3R4dC0+cHctPnB3X25hbWUsICFvcHRpb25zLnVzZV9rdXNlcm9rKSkgeworIAkJcHJvYmxlbSA9 IC0xOworIAkJZ290byBvdXQ7CisgCX0KK2RpZmYgLS1naXQgYS9nc3Mtc2Vydi1rcmI1LmMgYi9n c3Mtc2Vydi1rcmI1LmMKK2luZGV4IDdkZjMxYzZhZi4uNmY1ODI2Y2U4IDEwMDY0NAorLS0tIGEv Z3NzLXNlcnYta3JiNS5jCisrKysgYi9nc3Mtc2Vydi1rcmI1LmMKK0BAIC02Niw2ICs2Niw3IEBA IHN0YXRpYyBpbnQgc3NoX2dzc2FwaV9rcmI1X2NtZG9rKGtyYjVfcHJpbmNpcGFsLCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwKKyAgICAgaW50KTsKKyAKKyBzdGF0aWMga3JiNV9jb250ZXh0 IGtyYl9jb250ZXh0ID0gTlVMTDsKKytleHRlcm4gaW50IHNzaF9rcmI1X2t1c2Vyb2soa3JiNV9j b250ZXh0LCBrcmI1X3ByaW5jaXBhbCwgY29uc3QgY2hhciAqLCBpbnQpOworIAorIC8qIEluaXRp YWxpc2UgdGhlIGtyYjUgbGlicmFyeSwgZm9yIHRoZSBzdHVmZiB0aGF0IEdTU0FQSSB3b24ndCBk byAqLworIAorQEAgLTkxLDYgKzkyLDEwMyBAQCBzc2hfZ3NzYXBpX2tyYjVfaW5pdCh2b2lkKQor ICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBpcyBPSyB0byBsb2cgaW4sIG90aGVyd2lzZSBy ZXR1cm5zIDAKKyAgKi8KKyAKKysvKiBUaGUgcHVycG9zZSBvZiB0aGUgZnVuY3Rpb24gaXMgdG8g ZmluZCBvdXQgaWYgYSBLZXJiZXJvcyBwcmluY2lwYWwgaXMKKysgKiBhbGxvd2VkIHRvIGxvZyBp biBhcyB0aGUgZ2l2ZW4gbG9jYWwgdXNlci4gVGhpcyBpcyBhIGdlbmVyYWwgcHJvYmxlbSB3aXRo CisrICogS2VyYmVyaXplZCBzZXJ2aWNlcyBiZWNhdXNlIGJ5IGRlc2lnbiB0aGUgS2VyYmVyb3Mg cHJpbmNpcGFscyBhcmUKKysgKiBjb21wbGV0ZWx5IGluZGVwZW5kZW50IGZyb20gdGhlIGxvY2Fs IHVzZXIgbmFtZXMuIFRoaXMgaXMgb25lIG9mIHRoZQorKyAqIHJlYXNvbnMgd2h5IEtlcmJlcm9z IGlzIHdvcmtpbmcgd2VsbCBvbiBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMgbGlrZQorKyAq IFdpbmRvd3MgYW5kIFVOSVgvTGludXguIE5ldmVydGhlbGVzcyBhIHJlbGF0aW9uc2hpcCBiZXR3 ZWVuIGEgS2VyYmVyb3MKKysgKiBwcmluY2lwYWwgYW5kIGEgbG9jYWwgdXNlciBuYW1lIG11c3Qg YmUgZXN0YWJsaXNoZWQgYmVjYXVzZSBvdGhlcndpc2UgZXZlcnkKKysgKiBhY2Nlc3Mgd291bGQg YmUgZ3JhbnRlZCBmb3IgZXZlcnkgcHJpbmNpcGFsIHdpdGggYSB2YWxpZCB0aWNrZXQuCisrICoK KysgKiBTaW5jZSBpdCBpcyBhIGdlbmVyYWwgaXNzdWUgbGlia3JiNSBwcm92aWRlcyBzb21lIGZ1 bmN0aW9ucyBmb3IKKysgKiBhcHBsaWNhdGlvbnMgdG8gZmluZCBvdXQgYWJvdXQgdGhlIHJlbGF0 aW9uc2hpcCBiZXR3ZWVuIHRoZSBLZXJiZXJvcworKyAqIHByaW5jaXBhbCBhbmQgYSBsb2NhbCB1 c2VyIG5hbWUuIFRoZXkgYXJlIGtyYjVfa3VzZXJvaygpIGFuZAorKyAqIGtyYjVfYW5hbWVfdG9f bG9jYWxuYW1lKCkuCisrICoKKysgKiBrcmI1X2t1c2Vyb2soKSBjYW4gYmUgdXNlZCB0byAiRGV0 ZXJtaW5lIGlmIGEgcHJpbmNpcGFsIGlzIGF1dGhvcml6ZWQgdG8KKysgKiBsb2cgaW4gYXMgYSBs b2NhbCB1c2VyIiAoZnJvbSB0aGUgTUlUIEtlcmJlcm9zIGRvY3VtZW50YXRpb24gb2YgdGhpcwor KyAqIGZ1bmN0aW9uKS4gV2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIGFyZSBsb29raW5nIGZvciBh bmQgc2hvdWxkIGJlIHRoZQorKyAqIHByZWZlcnJlZCBjaG9pY2UuIEl0IGFjY2VwdHMgdGhlIEtl cmJlcm9zIHByaW5jaXBhbCBhbmQgYSBsb2NhbCB1c2VyIG5hbWUKKysgKiBhbmQgbGV0IGxpYmty YjUgb3IgaXRzIHBsdWdpbnMgZGV0ZXJtaW5lIGlmIHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIg b3IKKysgKiBub3QuCisrICoKKysgKiBrcmI1X2FuYW1lX3RvX2xvY2FsbmFtZSgpIGNhbiB1c2Ug dXNlZCB0byAiQ29udmVydCBhIHByaW5jaXBhbCBuYW1lIHRvIGEKKysgKiBsb2NhbCBuYW1lIiAo ZnJvbSB0aGUgTUlUIEtlcmJlcm9zIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbikuIEl0 CisrICogYWNjZXB0cyBhIEtlcmJlcm9zIHByaW5jaXBsZSBhbmQgcmV0dXJucyBhIGxvY2FsIG5h bWUgYW5kIGl0IGlzIHVwIHRvIHRoZQorKyAqIGFwcGxpY2F0aW9uIHRvIGRvIGFueSBhZGRpdGlv bmFsIGNoZWNrcy4gVGhlcmUgYXJlIHR3byBpc3N1ZXMgdXNpbmcKKysgKiBrcmI1X2FuYW1lX3Rv X2xvY2FsbmFtZSgpLiBGaXJzdCwgc2luY2UgUE9TSVggdXNlciBuYW1lcyBhcmUgY2FzZQorKyAq IHNlbnNpdGl2ZSwgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gaW4gZ2VuZXJhbCBoYXMgbm8gb3Ro ZXIgY2hvaWNlIHRoYW4KKysgKiBkb2luZyBhIGNhc2Utc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJp c29uIGJldHdlZW4gdGhlIG5hbWUgcmV0dXJuZWQgYnkKKysgKiBrcmI1X2FuYW1lX3RvX2xvY2Fs bmFtZSgpIGFuZCB0aGUgbmFtZSB1c2VkIGF0IHRoZSBsb2dpbiBwcm9tcHQuIFdoZW4gdGhlCisr ICogdXNlcnMgYXJlIHByb3ZpZGVkIGJ5IGEgY2FzZSBpbi1zZW5zaXRpdmUgc2VydmVyLCBlLmcu IEFjdGl2ZSBEaXJlY3RvcnksCisrICogdGhpcyBtaWdodCBsZWFkIHRvIGxvZ2luIGZhaWx1cmVz IGJlY2F1c2UgdGhlIHVzZXIgdHlwaW5nIHRoZSBuYW1lIGF0IHRoZQorKyAqIGxvZ2luIHByb21w dCBtaWdodCBub3QgYmUgYXdhcmUgb2YgdGhlIHJpZ2h0IGNhc2UuIEFub3RoZXIgaXNzdWUgbWln aHQgYmUKKysgKiBjYXVzZWQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGFsaWFzIG5hbWVzIGF2YWls YWJsZSBmb3IgYSBzaW5nbGUgdXNlci4gRS5nLgorKyAqIHRoZSBjYW5vbmljYWwgbmFtZSBvZiBh IHVzZXIgaXMgdXNlckBncm91cC5kZXBhcnRtZW50LmV4YW1wbGUuY29tIGJ1dCB0aGVyZQorKyAq IGV4aXN0cyBhIHNob3J0ZXIgbG9naW4gbmFtZSwgZS5nLiB1c2VyQGV4YW1wbGUuY29tLCB0byBz YWZlIHR5cGluZyBhdCB0aGUKKysgKiBsb2dpbiBwcm9tcHQuIEhlcmUga3JiNV9hbmFtZV90b19s b2NhbG5hbWUoKSBjYW4gb25seSByZXR1cm4gdGhlIGNhbm9uaWNhbAorKyAqIG5hbWUsIGJ1dCBp ZiB0aGUgc2hvcnQgYWxpYXMgaXMgdXNlZCBhdCB0aGUgbG9naW4gcHJvbXB0IGF1dGhlbnRpY2F0 aW9uCisrICogd2lsbCBmYWlsIGFzIHdlbGwuIEFsbCB0aGlzIGNhbiBiZSBhdm9pZGVkIGJ5IHVz aW5nIGtyYjVfa3VzZXJvaygpIGFuZAorKyAqIGNvbmZpZ3VyaW5nIGtyYjUuY29uZiBvciB1c2lu ZyBhIHN1aXRhYmxlIHBsdWdpbiB0byBtZWV0IHRoZSBuZWVkcyBvZiB0aGUKKysgKiBnaXZlbiBl bnZpcm9ubWVudC4KKysgKgorKyAqIFRoZSBGZWRvcmEgYW5kIFJIRUwgdmVyc2lvbiBvZiBvcGVu c3NoIGNvbnRhaW4gdHdvIHBhdGNoZXMgd2hpY2ggbW9kaWZ5IHRoZQorKyAqIGFjY2VzcyBjb250 cm9sIGJlaGF2aW9yOgorKyAqICAtIG9wZW5zc2gtNi42cDEta3VzZXJvay5wYXRjaAorKyAqICAt IG9wZW5zc2gtNi42cDEtZm9yY2Vfa3JiLnBhdGNoCisrICoKKysgKiBvcGVuc3NoLTYuNnAxLWt1 c2Vyb2sucGF0Y2ggYWRkcyBhIG5ldyBvcHRpb24gS2VyYmVyb3NVc2VLdXNlcm9rIGZvcgorKyAq IHNzaGRfY29uZmlnIHdoaWNoIGNvbnRyb2xzIGlmIGtyYjVfa3VzZXJvaygpIGlzIHVzZWQgdG8g Y2hlY2sgaWYgdGhlCisrICogcHJpbmNpcGxlIGlzIGF1dGhvcml6ZWQgb3IgaWYga3JiNV9hbmFt ZV90b19sb2NhbG5hbWUoKSBzaG91bGQgYmUgdXNlZC4KKysgKiBUaGUgcmVhc29uIHRvIGFkZCB0 aGlzIHBhdGNoIHdhcyB0aGF0IGtyYjVfa3VzZXJvaygpIGJ5IGRlZmF1bHQgY2hlY2tzIGlmCisr ICogYSAuazVsb2dpbiBmaWxlIGV4aXRzIGluIHRoZSB1c2VycyBob21lLWRpcmVjdG9yeS4gV2l0 aCB0aGlzIHRoZSB1c2VyIGNhbgorKyAqIGdpdmUgYWNjZXNzIHRvIGhpcyBhY2NvdW50IGZvciBh bnkgZ2l2ZW4gcHJpbmNpcGFsIHdoaWNoIG1pZ2h0IGJlCisrICogaW4gdmlvbGF0aW9uIHdpdGgg Y29tcGFueSBwb2xpY2llcyBhbmQgaXQgd291bGQgYmUgdXNlZnVsIGlmIHRoaXMgY2FuIGJlCisr ICogcmVqZWN0ZWQuIE5ldmVydGhlbGVzcyB0aGUgcGF0Y2ggaWdub3JlcyB0aGUgZmFjdCB0aGF0 IGtyYjVfa3VzZXJvaygpIGRvZXMKKysgKiBubyBvbmx5IGNoZWNrIC5rNWxvZ2luIGJ1dCBvdGhl ciBzb3VyY2VzIGFzIHdlbGwgYW5kIGNoZWNraW5nIC5rNWxvZ2luIGNhbgorKyAqIGJlIGRpc2Fi bGVkIGZvciBhbGwgYXBwbGljYXRpb25zIGluIGtyYjUuY29uZiBhcyB3ZWxsLiBXaXRoIHRoaXMg bmV3CisrICogb3B0aW9uIEtlcmJlcm9zVXNlS3VzZXJvayBzZXQgdG8gJ25vJyAoYW5kIHRoaXMg aXMgdGhlIGRlZmF1bHQgZm9yIFJIRUw3CisrICogYW5kIEZlZG9yYSAyMSkgb3BlbnNzaCBjYW4g b25seSB1c2Uga3JiNV9hbmFtZV90b19sb2NhbG5hbWUoKSB3aXRoIHRoZQorKyAqIHJlc3RyaWN0 aW9ucyBtZW50aW9uZWQgYWJvdmUuCisrICoKKysgKiBvcGVuc3NoLTYuNnAxLWZvcmNlX2tyYi5w YXRjaCBhZGRzIGEga3N1IGxpa2UgYmVoYXZpb3VyIHRvIHNzaCwgaS5lLiB3aGVuCisrICogdXNp bmcgR1NTQVBJIGF1dGhlbnRpY2F0aW9uIG9ubHkgY29tbWFuZHMgY29uZmlndXJlZCBpbiB0aGUg Lms1dXNlciBjYW4gYmUKKysgKiBleGVjdXRlZC4gSGVyZSB0aGUgd3JvbmcgYXNzdW1wdGlvbiB0 aGF0IGtyYjVfa3VzZXJvaygpIG9ubHkgY2hlY2tzCisrICogLms1bG9naW4gaXMgbWFkZSBhcyB3 ZWxsLiBJbiBjb250cmFzdCBrc3UgY2hlY2tzIC5rNWxvZ2luIGRpcmVjdGx5IGFuZAorKyAqIGRv ZXMgbm90IHVzZSBrcmI1X2t1c2Vyb2soKSB3aGljaCBtaWdodCBiZSBtb3JlIHVzZWZ1bCBmb3Ig dGhlIGdpdmVuCisrICogcHVycG9zZS4gQWRkaXRpb25hbGx5IHRoaXMgcGF0Y2ggaXMgbm90IHN5 bmNlZCB3aXRoCisrICogb3BlbnNzaC02LjZwMS1rdXNlcm9rLnBhdGNoLgorKyAqCisrICogVGhl IGN1cnJlbnQgcGF0Y2ggdHJpZXMgdG8gcmVzdG9yZSB0aGUgdXNhZ2Ugb2Yga3JiNV9rdXNlcm9r KCkgc28gdGhhdCBlLmcuCisrICogbG9jYWxhdXRoIHBsdWdpbnMgY2FuIGJlIHVzZWQuIEl0IGRv ZXMgc28gYnkgYWRkaW5nIGEgZm9ydGggcGFyYW1ldGVyIHRvCisrICogc3NoX2tyYjVfa3VzZXJv aygpIHdoaWNoIGluZGljYXRlcyB3aGV0aGVyIC5rNWxvZ2luIGV4aXN0cyBvciBub3QuIElmIGl0 CisrICogZG9lcyBub3QgZXhpc3RzIGtyYjVfa3VzZXJvaygpIGlzIGNhbGxlZCBldmVuIGlmIEtl cmJlcm9zVXNlS3VzZXJvayBpcyBzZXQKKysgKiB0byAnbm8nIGJlY2F1c2UgdGhlIGludGVudCBv ZiB0aGUgb3B0aW9uIGlzIHRvIG5vdCBjaGVjayAuazVsb2dpbiBhbmQgaWYgaXQKKysgKiBkb2Vz IG5vdCBleGlzdHMga3JiNV9rdXNlcm9rKCkgcmV0dXJucyBhIHJlc3VsdCB3aXRob3V0IGNoZWNr aW5nIC5rNWxvZ2luLgorKyAqIElmIC5rNWxvZ2luIGRvZXMgZXhpc3RzIGFuZCBLZXJiZXJvc1Vz ZUt1c2Vyb2sgaXMgJ25vJyB3ZSBmYWxsIGJhY2sgdG8KKysgKiBrcmI1X2FuYW1lX3RvX2xvY2Fs bmFtZSgpLiBUaGlzIGlzIGluIG15IHBvaW50IG9mIHZpZXcgYW4gYWNjZXB0YWJsZQorKyAqIGxp bWl0YXRpb24gYW5kIGRvZXMgbm90IGJyZWFrIHRoZSBjdXJyZW50IGJlaGF2aW91ci4KKysgKgor KyAqIEFkZGl0aW9uYWxseSB3aXRoIHRoaXMgcGF0Y2ggc3NoX2tyYjVfa3VzZXJvaygpIGlzIGNh bGxlZCBpbgorKyAqIHNzaF9nc3NhcGlfa3JiNV9jbWRvaygpIGluc3RlYWQgb2Ygb25seSBrcmI1 X2FuYW1lX3RvX2xvY2FsbmFtZSgpIGlzCisrICogbmVpdGhlciAuazVsb2dpbiBub3IgLms1dXNl cnMgZXhpc3RzIHRvIGFsbG93IHBsdWdpbiBldmFsdWF0aW9uIHZpYQorKyAqIGtyYjVfa3VzZXJv aygpIGFzIHdlbGwuCisrICoKKysgKiBJIHRyaWVkIHRvIGtlZXAgdGhlIHBhdGNoIGFzIG1pbmlt YWwgYXMgcG9zc2libGUsIG5ldmVydGhlbGVzcyBJIHNlZSBzb21lCisrICogYXJlYXMgZm9yIGlt cHJvdmVtZW50IHdoaWNoLCBpZiB0aGV5IG1ha2Ugc2Vuc2UsIGhhdmUgdG8gYmUgZXZhbHVhdGVk CisrICogY2FyZWZ1bGx5IGJlY2F1c2UgdGhleSBtaWdodCBjaGFuZ2UgZXhpc3RpbmcgYmVoYXZp b3VyIGFuZCBjYXVzZSBicmVha3MKKysgKiBkdXJpbmcgdXBncmFkZToKKysgKiAtIEkgd29uZGVy IGlmIGRpc2FibGluZyAuazVsb2dpbiB1c2FnZSBtYWtlIHNlbnNlIGluIHNzaGQgb3IgaWYgaXQg c2hvdWxkCisrICogICBiZSBiZXR0ZXIgZGlzYWJsZWQgZ2xvYmFsbHkgaW4ga3JiNS5jb25mCisr ICogLSBpZiByZWFsbHkgbmVlZGVkIG9wZW5zc2gtNi42cDEta3VzZXJvay5wYXRjaCBzaG91bGQg YmUgZml4ZWQgdG8gcmVhbGx5CisrICogICBvbmx5IGRpc2FibGUgY2hlY2tpbmcgLms1bG9naW4g YW5kIG1heWJlIC5rNXVzZXJzCisrICogLSB0aGUga3N1IGJlaGF2aW91ciBzaG91bGQgYmUgY29u ZmlndXJhYmxlIGFuZCBtYXliZSBjaGVjayB0aGUgLms1bG9naW4gYW5kCisrICogICAuazV1c2Vy cyBmaWxlcyBkaXJlY3RseSBsaWtlIGtzdSBpdHNlbGYgZG9lcworKyAqIC0gdG8gbWFrZSBrcmI1 X2FuYW1lX3RvX2xvY2FsbmFtZSgpIG1vcmUgdXNlZnVsIGFuIG9wdGlvbiBmb3Igc3NoZCB0byB1 c2UKKysgKiAgIHRoZSBjYW5vbmljYWwgbmFtZSAodGhlIG9uZSByZXR1cm5lZCBieSBnZXRwd25h bSgpKSBpbnN0ZWFkIG9mIHRoZSBuYW1lCisrICogICBnaXZlbiBhdCB0aGUgbG9naW4gcHJvbXB0 IG1pZ2h0IGJlIHVzZWZ1bCAqLworKworIHN0YXRpYyBpbnQKKyBzc2hfZ3NzYXBpX2tyYjVfdXNl cm9rKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKm5hbWUpCisgeworQEAgLTExNSw3 ICsyMTMsOCBAQCBzc2hfZ3NzYXBpX2tyYjVfdXNlcm9rKHNzaF9nc3NhcGlfY2xpZW50ICpjbGll bnQsIGNoYXIgKm5hbWUpCisgCS8qIE5PVEU6IC5rNWxvZ2luIGFuZCAuazV1c2VycyBtdXN0IG9w ZW5lZCBhcyByb290LCBub3QgdGhlIHVzZXIsCisgCSAqIGJlY2F1c2UgaWYgdGhleSBhcmUgb24g YSBrcmI1LXByb3RlY3RlZCBmaWxlc3lzdGVtLCB1c2VyIGNyZWRlbnRpYWxzCisgCSAqIHRvIGFj Y2VzcyB0aGVzZSBmaWxlcyBhcmVuJ3QgYXZhaWxhYmxlIHlldC4gKi8KKy0JaWYgKGtyYjVfa3Vz ZXJvayhrcmJfY29udGV4dCwgcHJpbmMsIG5hbWUpICYmIGs1bG9naW5fZXhpc3RzKSB7CisrCWlm IChrNWxvZ2luX2V4aXN0cyAmJgorKwkgICAgc3NoX2tyYjVfa3VzZXJvayhrcmJfY29udGV4dCwg cHJpbmMsIG5hbWUsIGs1bG9naW5fZXhpc3RzKSkgeworIAkJcmV0dmFsID0gMTsKKyAJCWxvZ2l0 KCJBdXRob3JpemVkIHRvICVzLCBrcmI1IHByaW5jaXBhbCAlcyAoa3JiNV9rdXNlcm9rKSIsCisg CQkgICAgbmFtZSwgKGNoYXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKK0BAIC0xOTAs OSArMjg5LDggQEAgc3NoX2dzc2FwaV9rcmI1X2NtZG9rKGtyYjVfcHJpbmNpcGFsIHByaW5jaXBh bCwgY29uc3QgY2hhciAqbmFtZSwKKyAJc25wcmludGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCAiJXMv Lms1dXNlcnMiLCBwdy0+cHdfZGlyKTsKKyAJLyogSWYgYm90aCAuazVsb2dpbiBhbmQgLms1dXNl cnMgRE5FLCBzZWxmLWxvZ2luIGlzIG9rLiAqLworIAlpZiAoIWs1bG9naW5fZXhpc3RzICYmIChh Y2Nlc3MoZmlsZSwgRl9PSykgPT0gLTEpKSB7CistCQlyZXR1cm4gKGtyYjVfYW5hbWVfdG9fbG9j YWxuYW1lKGtyYl9jb250ZXh0LCBwcmluY2lwYWwsCistCQkgICAgc2l6ZW9mKGt1c2VyKSwga3Vz ZXIpID09IDApICYmCistCQkgICAgKHN0cmNtcChrdXNlciwgbHVzZXIpID09IDApOworKyAgICAg ICAgICAgICAgICByZXR1cm4gc3NoX2tyYjVfa3VzZXJvayhrcmJfY29udGV4dCwgcHJpbmNpcGFs LCBsdXNlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazVsb2dp bl9leGlzdHMpOworIAl9CisgCWlmICgoZnAgPSBmb3BlbihmaWxlLCAiciIpKSA9PSBOVUxMKSB7 CisgCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKK2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIv c2VydmNvbmYuYworaW5kZXggMTBiNDNkNTZhLi43NTEzODhiYzAgMTAwNjQ0CistLS0gYS9zZXJ2 Y29uZi5jCisrKysgYi9zZXJ2Y29uZi5jCitAQCAtMTM5LDYgKzEzOSw3IEBAIGluaXRpYWxpemVf c2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKKyAJb3B0aW9ucy0+Z3NzX3N0 cmljdF9hY2NlcHRvciA9IC0xOworIAlvcHRpb25zLT5nc3Nfc3RvcmVfcmVrZXkgPSAtMTsKKyAJ b3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID0gTlVMTDsKKysJb3B0aW9ucy0+dXNlX2t1c2Vy b2sgPSAtMTsKKyAJb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAtMTsKKyAJb3B0 aW9ucy0+a2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uID0gLTE7CisgCW9wdGlvbnMtPnBl cm1pdF9lbXB0eV9wYXNzd2QgPSAtMTsKK0BAIC0zOTMsNiArMzk0LDggQEAgZmlsbF9kZWZhdWx0 X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCisgCWlmIChvcHRpb25zLT5n c3Nfa2V4X2FsZ29yaXRobXMgPT0gTlVMTCkKKyAJCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGht cyA9IHN0cmR1cChHU1NfS0VYX0RFRkFVTFRfS0VYKTsKKyAjZW5kaWYKKysJaWYgKG9wdGlvbnMt PnVzZV9rdXNlcm9rID09IC0xKQorKwkJb3B0aW9ucy0+dXNlX2t1c2Vyb2sgPSAxOworIAlpZiAo b3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPT0gLTEpCisgCQlvcHRpb25zLT5wYXNz d29yZF9hdXRoZW50aWNhdGlvbiA9IDE7CisgCWlmIChvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVf YXV0aGVudGljYXRpb24gPT0gLTEpCitAQCAtNTY0LDcgKzU2Nyw3IEBAIHR5cGVkZWYgZW51bSB7 CisgCXNQb3J0LCBzSG9zdEtleUZpbGUsIHNMb2dpbkdyYWNlVGltZSwKKyAJc1Blcm1pdFJvb3RM b2dpbiwgc0xvZ0ZhY2lsaXR5LCBzTG9nTGV2ZWwsIHNMb2dWZXJib3NlLAorIAlzS2VyYmVyb3NB dXRoZW50aWNhdGlvbiwgc0tlcmJlcm9zT3JMb2NhbFBhc3N3ZCwgc0tlcmJlcm9zVGlja2V0Q2xl YW51cCwKKy0Jc0tlcmJlcm9zR2V0QUZTVG9rZW4sIHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgc1Bh c3N3b3JkQXV0aGVudGljYXRpb24sCisrCXNLZXJiZXJvc0dldEFGU1Rva2VuLCBzS2VyYmVyb3NV bmlxdWVDQ2FjaGUsIHNLZXJiZXJvc1VzZUt1c2Vyb2ssIHNQYXNzd29yZEF1dGhlbnRpY2F0aW9u LAorIAlzS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiwgc0xpc3RlbkFkZHJlc3MsIHNBZGRy ZXNzRmFtaWx5LAorIAlzUHJpbnRNb3RkLCBzUHJpbnRMYXN0TG9nLCBzSWdub3JlUmhvc3RzLAor IAlzWDExRm9yd2FyZGluZywgc1gxMURpc3BsYXlPZmZzZXQsIHNYMTFVc2VMb2NhbGhvc3QsCitA QCAtNjU2LDEyICs2NTksMTQgQEAgc3RhdGljIHN0cnVjdCB7CisgCXsgImtlcmJlcm9zZ2V0YWZz dG9rZW4iLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAjZW5kaWYKKyAJeyAia2Vy YmVyb3N1bmlxdWVjY2FjaGUiLCBzS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIFNTSENGR19HTE9CQUwg fSwKKysJeyAia2VyYmVyb3N1c2VrdXNlcm9rIiwgc0tlcmJlcm9zVXNlS3VzZXJvaywgU1NIQ0ZH X0FMTCB9LAorICNlbHNlCisgCXsgImtlcmJlcm9zYXV0aGVudGljYXRpb24iLCBzVW5zdXBwb3J0 ZWQsIFNTSENGR19BTEwgfSwKKyAJeyAia2VyYmVyb3NvcmxvY2FscGFzc3dkIiwgc1Vuc3VwcG9y dGVkLCBTU0hDRkdfR0xPQkFMIH0sCisgCXsgImtlcmJlcm9zdGlja2V0Y2xlYW51cCIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJrZXJiZXJvc2dldGFmc3Rva2VuIiwgc1Vu c3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisgCXsgImtlcmJlcm9zdW5pcXVlY2NhY2hlIiwg c1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisrCXsgImtlcmJlcm9zdXNla3VzZXJvayIs IHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAorICNlbmRpZgorIAl7ICJrZXJiZXJvc3RndHBh c3NpbmciLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiYWZzdG9rZW5wYXNz aW5nIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCitAQCAtMjQ2Myw2ICsyNDY4LDEw IEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlv bnMsIGNoYXIgKmxpbmUsCisgCQl9CisgCQlicmVhazsKKyAKKysJY2FzZSBzS2VyYmVyb3NVc2VL dXNlcm9rOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPnVzZV9rdXNlcm9rOworKwkJZ290byBwYXJz ZV9mbGFnOworKworIAljYXNlIHNNYXRjaDoKKyAJCWlmIChjbWRsaW5lKQorIAkJCWZhdGFsKCJN YXRjaCBkaXJlY3RpdmUgbm90IHN1cHBvcnRlZCBhcyBhIGNvbW1hbmQtbGluZSAiCitAQCAtMzAz MCw2ICszMDM5LDcgQEAgY29weV9zZXRfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqZHN0 LCBTZXJ2ZXJPcHRpb25zICpzcmMsIGludCBwcmVhdXRoKQorIAlNX0NQX0lOVE9QVChjbGllbnRf YWxpdmVfaW50ZXJ2YWwpOworIAlNX0NQX0lOVE9QVChpcF9xb3NfaW50ZXJhY3RpdmUpOworIAlN X0NQX0lOVE9QVChpcF9xb3NfYnVsayk7CisrCU1fQ1BfSU5UT1BUKHVzZV9rdXNlcm9rKTsKKyAJ TV9DUF9JTlRPUFQocmVrZXlfbGltaXQpOworIAlNX0NQX0lOVE9QVChyZWtleV9pbnRlcnZhbCk7 CisgCU1fQ1BfSU5UT1BUKGxvZ19sZXZlbCk7CitAQCAtMzMzOSw2ICszMzQ5LDcgQEAgZHVtcF9j b25maWcoU2VydmVyT3B0aW9ucyAqbykKKyAJZHVtcF9jZmdfZm10aW50KHNLZXJiZXJvc0dldEFG U1Rva2VuLCBvLT5rZXJiZXJvc19nZXRfYWZzX3Rva2VuKTsKKyAjIGVuZGlmCisgCWR1bXBfY2Zn X2ZtdGludChzS2VyYmVyb3NVbmlxdWVDQ2FjaGUsIG8tPmtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUp OworKwlkdW1wX2NmZ19mbXRpbnQoc0tlcmJlcm9zVXNlS3VzZXJvaywgby0+dXNlX2t1c2Vyb2sp OworICNlbmRpZgorICNpZmRlZiBHU1NBUEkKKyAJZHVtcF9jZmdfZm10aW50KHNHc3NBdXRoZW50 aWNhdGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0aW9uKTsKK2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5o IGIvc2VydmNvbmYuaAoraW5kZXggYmY1ODk5MTFhLi45ODQzZjk2YzUgMTAwNjQ0CistLS0gYS9z ZXJ2Y29uZi5oCisrKysgYi9zZXJ2Y29uZi5oCitAQCAtMTUyLDYgKzE1Miw3IEBAIHR5cGVkZWYg c3RydWN0IHsKKyAJCQkJCQkgKiBhdXRoZW50aWNhdGVkIHdpdGggS2VyYmVyb3MuICovCisgCWlu dCAgICAga2VyYmVyb3NfdW5pcXVlX2NjYWNoZTsJCS8qIElmIHRydWUsIHRoZSBhY3F1aXJlZCB0 aWNrZXQgd2lsbAorIAkJCQkJCSAqIGJlIHN0b3JlZCBpbiBwZXItc2Vzc2lvbiBjY2FjaGUgKi8K KysJaW50CXVzZV9rdXNlcm9rOworIAlpbnQgICAgIGdzc19hdXRoZW50aWNhdGlvbjsJLyogSWYg dHJ1ZSwgcGVybWl0IEdTU0FQSSBhdXRoZW50aWNhdGlvbiAqLworIAlpbnQgICAgIGdzc19rZXll eDsJCS8qIElmIHRydWUsIHBlcm1pdCBHU1NBUEkga2V5IGV4Y2hhbmdlICovCisgCWludCAgICAg Z3NzX2NsZWFudXBfY3JlZHM7CS8qIElmIHRydWUsIGRlc3Ryb3kgY3JlZCBjYWNoZSBvbiBsb2dv dXQgKi8KK2RpZmYgLS1naXQgYS9zc2hkX2NvbmZpZyBiL3NzaGRfY29uZmlnCitpbmRleCA4ZGI5 ZjBmYjEuLmVhNWE4NzhlNiAxMDA2NDQKKy0tLSBhL3NzaGRfY29uZmlnCisrKysgYi9zc2hkX2Nv bmZpZworQEAgLTc1LDYgKzc1LDcgQEAgQXV0aG9yaXplZEtleXNGaWxlCS5zc2gvYXV0aG9yaXpl ZF9rZXlzCisgI0tlcmJlcm9zT3JMb2NhbFBhc3N3ZCB5ZXMKKyAjS2VyYmVyb3NUaWNrZXRDbGVh bnVwIHllcworICNLZXJiZXJvc0dldEFGU1Rva2VuIG5vCisrI0tlcmJlcm9zVXNlS3VzZXJvayB5 ZXMKKyAKKyAjIEdTU0FQSSBvcHRpb25zCisgI0dTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCitkaWZm IC0tZ2l0IGEvc3NoZF9jb25maWcuNSBiL3NzaGRfY29uZmlnLjUKK2luZGV4IGQwYjBkZmUzNi4u MTc2Mjg3NGM0IDEwMDY0NAorLS0tIGEvc3NoZF9jb25maWcuNQorKysrIGIvc3NoZF9jb25maWcu NQorQEAgLTEwNjUsNiArMTA2NSwxMCBAQCBUaGUgZGVmYXVsdCB2YWx1ZQorIC5DbSBubworIGNh biBsZWFkIHRvIG92ZXJ3cml0aW5nIHByZXZpb3VzIHRpY2tldHMgYnkgc3Vic2VxZW50IGNvbm5l Y3Rpb25zIHRvIHRoZSBzYW1lCisgdXNlciBhY2NvdW50LgorKy5JdCBDbSBLZXJiZXJvc1VzZUt1 c2Vyb2sKKytTcGVjaWZpZXMgd2hldGhlciB0byBsb29rIGF0IC5rNWxvZ2luIGZpbGUgZm9yIHVz ZXIncyBhbGlhc2VzLgorK1RoZSBkZWZhdWx0IGlzCisrLkNtIHllcyAuCisgLkl0IENtIEtleEFs Z29yaXRobXMKKyBTcGVjaWZpZXMgdGhlIHBlcm1pdHRlZCBLRVggKEtleSBFeGNoYW5nZSkgYWxn b3JpdGhtcyB0aGF0IHRoZSBzZXJ2ZXIgd2lsbAorIG9mZmVyIHRvIGNsaWVudHMuCitAQCAtMTM3 OSw2ICsxMzgzLDcgQEAgQXZhaWxhYmxlIGtleXdvcmRzIGFyZQorIC5DbSBJUFFvUyAsCisgLkNt IEtiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24gLAorIC5DbSBLZXJiZXJvc0F1dGhlbnRpY2F0 aW9uICwKKysuQ20gS2VyYmVyb3NVc2VLdXNlcm9rICwKKyAuQ20gTG9nTGV2ZWwgLAorIC5DbSBN YXhBdXRoVHJpZXMgLAorIC5DbSBNYXhTZXNzaW9ucyAsCistLSAKKzIuNTMuMAorCgpkaWZmIC0t Z2l0IGEvMDAxOC1vcGVuc3NoLTYuNHAxLWZyb210by1yZW1vdGUucGF0Y2ggYi8wMDE4LW9wZW5z c2gtNi40cDEtZnJvbXRvLXJlbW90ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4zYmVlNmEzCi0tLSAvZGV2L251bGwKKysrIGIvMDAxOC1vcGVuc3NoLTYuNHAxLWZy b210by1yZW1vdGUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBjMDk1ZTJmNDhlMjc5YWY2 NWE5NDE5ZjU4MGFjOWNhZTE0NDUzYTkzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTog RG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkg MjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDE4LzU0XSBvcGVuc3NoLTYuNHAx LWZyb210by1yZW1vdGUKKworIyBVc2UgdHR5IGFsbG9jYXRpb24gZm9yIGEgcmVtb3RlIHNjcCAo Izk4NTY1MCkKKy0tLQorIHNjcC5jIHwgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NjcC5jIGIvc2NwLmMKK2lu ZGV4IDFmYWE5YTU1NS4uZDg3ZDkzOWExIDEwMDY0NAorLS0tIGEvc2NwLmMKKysrKyBiL3NjcC5j CitAQCAtMTE0Myw3ICsxMTQzLDEwIEBAIHRvcmVtb3RlKGludCBhcmdjLCBjaGFyICoqYXJndiwg ZW51bSBzY3BfbW9kZV9lIG1vZGUsIGNoYXIgKnNmdHBfZGlyZWN0KQorIAkJCWFkZGFyZ3MoJmFs aXN0LCAiJXMiLCBzc2hfcHJvZ3JhbSk7CisgCQkJYWRkYXJncygmYWxpc3QsICIteCIpOworIAkJ CWFkZGFyZ3MoJmFsaXN0LCAiLW9DbGVhckFsbEZvcndhcmRpbmdzPXllcyIpOworLQkJCWFkZGFy Z3MoJmFsaXN0LCAiLW4iKTsKKysJCQlpZiAoaXNhdHR5KGZpbGVubyhzdGRpbikpKQorKwkJCQlh ZGRhcmdzKCZhbGlzdCwgIi10Iik7CisrCQkJZWxzZQorKwkJCQlhZGRhcmdzKCZhbGlzdCwgIi1u Iik7CisgCQkJZm9yIChqID0gMDsgaiA8IHJlbW90ZV9yZW1vdGVfYXJncy5udW07IGorKykgewor IAkJCQlhZGRhcmdzKCZhbGlzdCwgIiVzIiwKKyAJCQkJICAgIHJlbW90ZV9yZW1vdGVfYXJncy5s aXN0W2pdKTsKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDE4LW9wZW5zc2gtNi42LjFw MS1zY3Atbm9uLWV4aXN0aW5nLWRpcmVjdG9yeS5wYXRjaCBiLzAwMTgtb3BlbnNzaC02LjYuMXAx LXNjcC1ub24tZXhpc3RpbmctZGlyZWN0b3J5LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBlNTBlMWMyLi4wMDAwMDAwCi0tLSBhLzAwMTgtb3BlbnNzaC02LjYuMXAxLXNjcC1u b24tZXhpc3RpbmctZGlyZWN0b3J5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBA QAotRnJvbSA5MzFmMjJmNzdhYjJiOWNlYmQ5NmUxMTNmMWUzYWIxNzlkZDFiNmNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwu Y29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDogW1BB VENIIDE4LzUzXSBvcGVuc3NoLTYuNi4xcDEtc2NwLW5vbi1leGlzdGluZy1kaXJlY3RvcnkKLQot LS0tCi0gc2NwLmMgfCA0ICsrKysKLSAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCi0K LWRpZmYgLS1naXQgYS9zY3AuYyBiL3NjcC5jCi1pbmRleCBkOTdhNTRjYzQuLmUxOTkyNjIyZiAx MDA2NDQKLS0tLSBhL3NjcC5jCi0rKysgYi9zY3AuYwotQEAgLTE4NjYsNiArMTg2NiwxMCBAQCBz aW5rKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqc3JjKQotIAkJCWZyZWUodmVj dFswXSk7Ci0gCQkJY29udGludWU7Ci0gCQl9Ci0rCQlpZiAoYnVmWzBdID09ICdDJyAmJiAhIGV4 aXN0cyAmJiBucFtzdHJsZW4obnApLTFdID09ICcvJykgewotKwkJCWVycm5vID0gRU5PVERJUjsK LSsJCQlnb3RvIGJhZDsKLSsJCX0KLSAJCW9tb2RlID0gbW9kZTsKLSAJCW1vZGUgfD0gU19JV1VT UjsKLSAJCWlmICgob2ZkID0gb3BlbihucCwgT19XUk9OTFl8T19DUkVBVCwgbW9kZSkpID09IC0x KSB7Ci0tLSAKLTIuNTIuMAotCgpkaWZmIC0tZ2l0IGEvMDAxOS1vcGVuc3NoLTYuNi4xcDEtbG9n LWluLWNocm9vdC5wYXRjaCBiLzAwMTktb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJvb3QucGF0 Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhNDZhYgotLS0gL2Rldi9u dWxsCisrKyBiLzAwMTktb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJvb3QucGF0Y2gKQEAgLTAs MCArMSwyNTYgQEAKK0Zyb20gZjE4NzIxMGMxOGY5MzNhM2IyMzljNDliZDA5ZWZlYWJiYTRlNDcx MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxk bWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1 YmplY3Q6IFtQQVRDSCAxOS81NF0gb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJvb3QKKworIyBs b2cgdmlhIG1vbml0b3IgaW4gY2hyb290cyB3aXRob3V0IC9kZXYvbG9nICgjMjY4MSkKKy0tLQor IGxvZy5jICAgICAgICAgICAgICB8IDExICsrKysrKysrKy0tCisgbG9nLmggICAgICAgICAgICAg IHwgIDEgKworIG1vbml0b3IuYyAgICAgICAgICB8IDE3ICsrKysrKysrKysrKysrKy0tCisgbW9u aXRvci5oICAgICAgICAgIHwgIDIgKy0KKyBzZXNzaW9uLmMgICAgICAgICAgfCAyNiArKysrKysr KysrKysrKystLS0tLS0tLS0tLQorIHNmdHAtc2VydmVyLW1haW4uYyB8ICAyICstCisgc2Z0cC1z ZXJ2ZXIuYyAgICAgIHwgIDYgKysrLS0tCisgc2Z0cC5oICAgICAgICAgICAgIHwgIDIgKy0KKyBz c2hkLXNlc3Npb24uYyAgICAgfCAgNyArKysrKystCisgOSBmaWxlcyBjaGFuZ2VkLCA1MiBpbnNl cnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xvZy5jIGIvbG9nLmMK K2luZGV4IDI5MDM4NzFhYS4uYjcyZGY1ZmVjIDEwMDY0NAorLS0tIGEvbG9nLmMKKysrKyBiL2xv Zy5jCitAQCAtMTk0LDYgKzE5NCwxMSBAQCB2b2lkCisgbG9nX2luaXQoY29uc3QgY2hhciAqYXYw LCBMb2dMZXZlbCBsZXZlbCwgU3lzbG9nRmFjaWxpdHkgZmFjaWxpdHksCisgICAgIGludCBvbl9z dGRlcnIpCisgeworKwlsb2dfaW5pdF9oYW5kbGVyKGF2MCwgbGV2ZWwsIGZhY2lsaXR5LCBvbl9z dGRlcnIsIDEpOworK30KKysKKyt2b2lkCisrbG9nX2luaXRfaGFuZGxlcihjb25zdCBjaGFyICph djAsIExvZ0xldmVsIGxldmVsLCBTeXNsb2dGYWNpbGl0eSBmYWNpbGl0eSwgaW50IG9uX3N0ZGVy ciwgaW50IHJlc2V0X2hhbmRsZXIpIHsKKyAjaWYgZGVmaW5lZChIQVZFX09QRU5MT0dfUikgJiYg ZGVmaW5lZChTWVNMT0dfREFUQV9JTklUKQorIAlzdHJ1Y3Qgc3lzbG9nX2RhdGEgc2RhdGEgPSBT WVNMT0dfREFUQV9JTklUOworICNlbmRpZgorQEAgLTIwNiw4ICsyMTEsMTAgQEAgbG9nX2luaXQo Y29uc3QgY2hhciAqYXYwLCBMb2dMZXZlbCBsZXZlbCwgU3lzbG9nRmFjaWxpdHkgZmFjaWxpdHks CisgCQlleGl0KDEpOworIAl9CisgCistCWxvZ19oYW5kbGVyID0gTlVMTDsKKy0JbG9nX2hhbmRs ZXJfY3R4ID0gTlVMTDsKKysJaWYgKHJlc2V0X2hhbmRsZXIpIHsKKysJCWxvZ19oYW5kbGVyID0g TlVMTDsKKysJCWxvZ19oYW5kbGVyX2N0eCA9IE5VTEw7CisrCX0KKyAKKyAJbG9nX29uX3N0ZGVy ciA9IG9uX3N0ZGVycjsKKyAJaWYgKG9uX3N0ZGVycikKK2RpZmYgLS1naXQgYS9sb2cuaCBiL2xv Zy5oCitpbmRleCA4ZThkZmMyM2YuLjcwMDQ4YThhZiAxMDA2NDQKKy0tLSBhL2xvZy5oCisrKysg Yi9sb2cuaAorQEAgLTUyLDYgKzUyLDcgQEAgdHlwZWRlZiBlbnVtIHsKKyB0eXBlZGVmIHZvaWQg KGxvZ19oYW5kbGVyX2ZuKShMb2dMZXZlbCwgaW50LCBjb25zdCBjaGFyICosIHZvaWQgKik7Cisg Cisgdm9pZCAgICAgbG9nX2luaXQoY29uc3QgY2hhciAqLCBMb2dMZXZlbCwgU3lzbG9nRmFjaWxp dHksIGludCk7Cisrdm9pZCAgICAgbG9nX2luaXRfaGFuZGxlcihjb25zdCBjaGFyICosIExvZ0xl dmVsLCBTeXNsb2dGYWNpbGl0eSwgaW50LCBpbnQpOworIExvZ0xldmVsIGxvZ19sZXZlbF9nZXQo dm9pZCk7CisgaW50ICAgICAgbG9nX2NoYW5nZV9sZXZlbChMb2dMZXZlbCk7CisgaW50ICAgICAg bG9nX2lzX29uX3N0ZGVycih2b2lkKTsKK2RpZmYgLS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9y LmMKK2luZGV4IDAyNWM2YWJiZS4uNTI1NTA4M2FiIDEwMDY0NAorLS0tIGEvbW9uaXRvci5jCisr KysgYi9tb25pdG9yLmMKK0BAIC0yMDMwLDkgKzIwMzAsMjIgQEAgbW9uaXRvcl9pbml0KHZvaWQp CisgfQorIAorIHZvaWQKKy1tb25pdG9yX3JlaW5pdChzdHJ1Y3QgbW9uaXRvciAqbW9uKQorK21v bml0b3JfcmVpbml0KHN0cnVjdCBtb25pdG9yICptb24sIGNvbnN0IGNoYXIgKmNocm9vdF9kaXIp CisgeworLQltb25pdG9yX29wZW5mZHMobW9uLCAwKTsKKysJc3RydWN0IHN0YXQgZGV2X2xvZ19z dGF0OworKwljaGFyICpkZXZfbG9nX3BhdGg7CisrCWludCBkb19sb2dmZHMgPSAwOworKworKwlp ZiAoY2hyb290X2RpciAhPSBOVUxMKSB7CisrCQl4YXNwcmludGYoJmRldl9sb2dfcGF0aCwgIiVz L2Rldi9sb2ciLCBjaHJvb3RfZGlyKTsKKysKKysJCWlmIChzdGF0KGRldl9sb2dfcGF0aCwgJmRl dl9sb2dfc3RhdCkgIT0gMCkgeworKwkJCWRlYnVnX2YoIi9kZXYvbG9nIGRvZXNuJ3QgZXhpc3Qg aW4gJXMgY2hyb290IC0gd2lsbCB0cnkgdG8gbG9nIHZpYSBtb25pdG9yIHVzaW5nIFtwb3N0YXV0 aF0gc3VmZml4IiwgY2hyb290X2Rpcik7CisrCQkJZG9fbG9nZmRzID0gMTsKKysJCX0KKysJCWZy ZWUoZGV2X2xvZ19wYXRoKTsKKysJfQorKwltb25pdG9yX29wZW5mZHMobW9uLCBkb19sb2dmZHMp OworIH0KKyAKKyBpbnQKK2RpZmYgLS1naXQgYS9tb25pdG9yLmggYi9tb25pdG9yLmgKK2luZGV4 IDc1YTBkNjE4MS4uZjQ3MjFjNDcyIDEwMDY0NAorLS0tIGEvbW9uaXRvci5oCisrKysgYi9tb25p dG9yLmgKK0BAIC04Niw3ICs4Niw3IEBAIHN0cnVjdCBtb25pdG9yIHsKKyB9OworIAorIHN0cnVj dCBtb25pdG9yICptb25pdG9yX2luaXQodm9pZCk7Cistdm9pZCBtb25pdG9yX3JlaW5pdChzdHJ1 Y3QgbW9uaXRvciAqKTsKKyt2b2lkIG1vbml0b3JfcmVpbml0KHN0cnVjdCBtb25pdG9yICosIGNv bnN0IGNoYXIgKik7CisgCisgc3RydWN0IEF1dGhjdHh0OworIHZvaWQgbW9uaXRvcl9jaGlsZF9w cmVhdXRoKHN0cnVjdCBzc2ggKiwgc3RydWN0IG1vbml0b3IgKik7CitkaWZmIC0tZ2l0IGEvc2Vz c2lvbi5jIGIvc2Vzc2lvbi5jCitpbmRleCA1MTdjYWI2YjYuLjBjMjY0NDhkOSAxMDA2NDQKKy0t LSBhL3Nlc3Npb24uYworKysrIGIvc2Vzc2lvbi5jCitAQCAtMTYyLDYgKzE2Miw3IEBAIGxvZ2lu X2NhcF90ICpsYzsKKyAKKyBzdGF0aWMgaW50IGlzX2NoaWxkID0gMDsKKyBzdGF0aWMgaW50IGlu X2Nocm9vdCA9IDA7Cisrc3RhdGljIGludCBoYXZlX2Rldl9sb2cgPSAxOworIAorIC8qIEZpbGUg Y29udGFpbmluZyB1c2VyYXV0aCBpbmZvLCBpZiBFeHBvc2VBdXRoSW5mbyBzZXQgKi8KKyBzdGF0 aWMgY2hhciAqYXV0aF9pbmZvX2ZpbGUgPSBOVUxMOworQEAgLTYzMyw2ICs2MzQsNyBAQCBkb19l eGVjKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKKyAJ aW50IHJldDsKKyAJY29uc3QgY2hhciAqZm9yY2VkID0gTlVMTCwgKnR0eSA9IE5VTEw7CisgCWNo YXIgc2Vzc2lvbl90eXBlWzEwMjRdOworKwlzdHJ1Y3Qgc3RhdCBkZXZfbG9nX3N0YXQ7CisgCisg CWlmIChvcHRpb25zLmFkbV9mb3JjZWRfY29tbWFuZCkgeworIAkJb3JpZ2luYWxfY29tbWFuZCA9 IGNvbW1hbmQ7CitAQCAtNjkyLDYgKzY5NCwxMCBAQCBkb19leGVjKHN0cnVjdCBzc2ggKnNzaCwg U2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKKyAJCQl0dHkgKz0gNTsKKyAJfQorIAor KwlpZiAobHN0YXQoIi9kZXYvbG9nIiwgJmRldl9sb2dfc3RhdCkgIT0gMCkgeworKwkJaGF2ZV9k ZXZfbG9nID0gMDsKKysJfQorKworIAl2ZXJib3NlKCJTdGFydGluZyBzZXNzaW9uOiAlcyVzJXMg Zm9yICVzIGZyb20gJS4yMDBzIHBvcnQgJWQgaWQgJWQiLAorIAkgICAgc2Vzc2lvbl90eXBlLAor IAkgICAgdHR5ID09IE5VTEwgPyAiIiA6ICIgb24gIiwKK0BAIC0xNDc2LDE0ICsxNDgyLDYgQEAg Y2hpbGRfY2xvc2VfZmRzKHN0cnVjdCBzc2ggKnNzaCkKKyAKKyAJLyogU3RvcCBkaXJlY3Rpbmcg bG9ncyB0byBhIGhpZ2gtbnVtYmVyZWQgZmQgYmVmb3JlIHdlIGNsb3NlIGl0ICovCisgCWxvZ19y ZWRpcmVjdF9zdGRlcnJfdG8oTlVMTCk7CistCistCS8qCistCSAqIENsb3NlIGFueSBleHRyYSBv cGVuIGZpbGUgZGVzY3JpcHRvcnMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRoZW0KKy0JICogaGFu Z2luZyBhcm91bmQgaW4gY2xpZW50cy4gIE5vdGUgdGhhdCB3ZSB3YW50IHRvIGRvIHRoaXMgYWZ0 ZXIKKy0JICogaW5pdGdyb3VwcywgYmVjYXVzZSBhdCBsZWFzdCBvbiBTb2xhcmlzIDIuMyBpdCBs ZWF2ZXMgZmlsZQorLQkgKiBkZXNjcmlwdG9ycyBvcGVuLgorLQkgKi8KKy0JY2xvc2Vmcm9tKFNU REVSUl9GSUxFTk8gKyAxKTsKKyB9CisgCisgLyoKK0BAIC0xNjE2LDggKzE2MTQsNiBAQCBkb19j aGlsZChzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKmNvbW1hbmQpCisg CQkJZXhpdCgxKTsKKyAJfQorIAorLQljbG9zZWZyb20oU1RERVJSX0ZJTEVOTyArIDEpOworLQor IAlkb19yY19maWxlcyhzc2gsIHMsIHNoZWxsKTsKKyAKKyAJLyogcmVzdG9yZSBTSUdQSVBFIGZv ciBjaGlsZCAqLworQEAgLTE2NDUsOSArMTY0MSwxNyBAQCBkb19jaGlsZChzdHJ1Y3Qgc3NoICpz c2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKmNvbW1hbmQpCisgI2lmZGVmIFdJVEhfU0VMSU5V WAorIAkJc3NoX3NlbGludXhfY2hhbmdlX2NvbnRleHQoInNmdHBkX3QiKTsKKyAjZW5kaWYKKy0J CWV4aXQoc2Z0cF9zZXJ2ZXJfbWFpbihpLCBhcmd2LCBzLT5wdykpOworKwkJZXhpdChzZnRwX3Nl cnZlcl9tYWluKGksIGFyZ3YsIHMtPnB3LCBoYXZlX2Rldl9sb2cpKTsKKyAJfQorIAorKwkvKgor KwkgKiBDbG9zZSBhbnkgZXh0cmEgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIHNvIHRoYXQgd2UgZG9u J3QgaGF2ZSB0aGVtCisrCSAqIGhhbmdpbmcgYXJvdW5kIGluIGNsaWVudHMuICBOb3RlIHRoYXQg d2Ugd2FudCB0byBkbyB0aGlzIGFmdGVyCisrCSAqIGluaXRncm91cHMsIGJlY2F1c2UgYXQgbGVh c3Qgb24gU29sYXJpcyAyLjMgaXQgbGVhdmVzIGZpbGUKKysJICogZGVzY3JpcHRvcnMgb3Blbi4K KysJICovCisrCWNsb3NlZnJvbShTVERFUlJfRklMRU5PICsgMSk7CisrCisgCWZmbHVzaChOVUxM KTsKKyAKKyAJLyogR2V0IHRoZSBsYXN0IGNvbXBvbmVudCBvZiB0aGUgc2hlbGwgbmFtZS4gKi8K K2RpZmYgLS1naXQgYS9zZnRwLXNlcnZlci1tYWluLmMgYi9zZnRwLXNlcnZlci1tYWluLmMKK2lu ZGV4IDJjNzBmODliYy4uYmJiNzlmMjc4IDEwMDY0NAorLS0tIGEvc2Z0cC1zZXJ2ZXItbWFpbi5j CisrKysgYi9zZnRwLXNlcnZlci1tYWluLmMKK0BAIC00OCw1ICs0OCw1IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQorIAkJcmV0dXJuIDE7CisgCX0KKyAKKy0JcmV0dXJuIChzZnRwX3Nl cnZlcl9tYWluKGFyZ2MsIGFyZ3YsIHVzZXJfcHcpKTsKKysJcmV0dXJuIChzZnRwX3NlcnZlcl9t YWluKGFyZ2MsIGFyZ3YsIHVzZXJfcHcsIDApKTsKKyB9CitkaWZmIC0tZ2l0IGEvc2Z0cC1zZXJ2 ZXIuYyBiL3NmdHAtc2VydmVyLmMKK2luZGV4IGViZGIzMWQzMi4uN2E2ZTRmYTg4IDEwMDY0NAor LS0tIGEvc2Z0cC1zZXJ2ZXIuYworKysrIGIvc2Z0cC1zZXJ2ZXIuYworQEAgLTE4OTMsNyArMTg5 Myw3IEBAIHNmdHBfc2VydmVyX3VzYWdlKHZvaWQpCisgfQorIAorIGludAorLXNmdHBfc2VydmVy X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3KQorK3Nm dHBfc2VydmVyX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2Vy X3B3LCBpbnQgcmVzZXRfaGFuZGxlcikKKyB7CisgCWludCBpLCByLCBpbiwgb3V0LCBjaCwgc2tp cGFyZ3MgPSAwLCBsb2dfc3RkZXJyID0gMDsKKyAJc3NpemVfdCBsZW4sIG9sZW47CitAQCAtMTkw NSw3ICsxOTA1LDcgQEAgc2Z0cF9zZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0 cnVjdCBwYXNzd2QgKnVzZXJfcHcpCisgCWV4dGVybiBjaGFyICpfX3Byb2duYW1lOworIAorIAlf X3Byb2duYW1lID0gc3NoX2dldF9wcm9nbmFtZShhcmd2WzBdKTsKKy0JbG9nX2luaXQoX19wcm9n bmFtZSwgbG9nX2xldmVsLCBsb2dfZmFjaWxpdHksIGxvZ19zdGRlcnIpOworKwlsb2dfaW5pdF9o YW5kbGVyKF9fcHJvZ25hbWUsIGxvZ19sZXZlbCwgbG9nX2ZhY2lsaXR5LCBsb2dfc3RkZXJyLCBy ZXNldF9oYW5kbGVyKTsKKyAKKyAJcHcgPSBwd2NvcHkodXNlcl9wdyk7CisgCitAQCAtMTk3OCw3 ICsxOTc4LDcgQEAgc2Z0cF9zZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVj dCBwYXNzd2QgKnVzZXJfcHcpCisgCQl9CisgCX0KKyAKKy0JbG9nX2luaXQoX19wcm9nbmFtZSwg bG9nX2xldmVsLCBsb2dfZmFjaWxpdHksIGxvZ19zdGRlcnIpOworKwlsb2dfaW5pdF9oYW5kbGVy KF9fcHJvZ25hbWUsIGxvZ19sZXZlbCwgbG9nX2ZhY2lsaXR5LCBsb2dfc3RkZXJyLCByZXNldF9o YW5kbGVyKTsKKyAKKyAJLyoKKyAJICogT24gcGxhdGZvcm1zIHdoZXJlIHdlIGNhbiwgYXZvaWQg bWFraW5nIC9wcm9jL3NlbGYve21lbSxtYXBzfQorZGlmZiAtLWdpdCBhL3NmdHAuaCBiL3NmdHAu aAoraW5kZXggMmJkZThiYjdmLi5kZGYxYTM5NjggMTAwNjQ0CistLS0gYS9zZnRwLmgKKysrKyBi L3NmdHAuaAorQEAgLTk3LDUgKzk3LDUgQEAKKyAKKyBzdHJ1Y3QgcGFzc3dkOworIAorLWludAlz ZnRwX3NlcnZlcl9tYWluKGludCwgY2hhciAqKiwgc3RydWN0IHBhc3N3ZCAqKTsKKytpbnQJc2Z0 cF9zZXJ2ZXJfbWFpbihpbnQsIGNoYXIgKiosIHN0cnVjdCBwYXNzd2QgKiwgaW50KTsKKyB2b2lk CXNmdHBfc2VydmVyX2NsZWFudXBfZXhpdChpbnQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7 CitkaWZmIC0tZ2l0IGEvc3NoZC1zZXNzaW9uLmMgYi9zc2hkLXNlc3Npb24uYworaW5kZXggOWQ3 NWE0NTU1Li4yM2I4MGViMDEgMTAwNjQ0CistLS0gYS9zc2hkLXNlc3Npb24uYworKysrIGIvc3No ZC1zZXNzaW9uLmMKK0BAIC0zODcsNyArMzg3LDcgQEAgcHJpdnNlcF9wb3N0YXV0aChzdHJ1Y3Qg c3NoICpzc2gsIEF1dGhjdHh0ICphdXRoY3R4dCkKKyAjZW5kaWYKKyAKKyAJLyogTmV3IHNvY2tl dCBwYWlyICovCistCW1vbml0b3JfcmVpbml0KHBtb25pdG9yKTsKKysJbW9uaXRvcl9yZWluaXQo cG1vbml0b3IsIG9wdGlvbnMuY2hyb290X2RpcmVjdG9yeSk7CisgCisgCXBtb25pdG9yLT5tX3Bp ZCA9IGZvcmsoKTsKKyAJaWYgKHBtb25pdG9yLT5tX3BpZCA9PSAtMSkKK0BAIC00MDYsNiArNDA2 LDExIEBAIHByaXZzZXBfcG9zdGF1dGgoc3RydWN0IHNzaCAqc3NoLCBBdXRoY3R4dCAqYXV0aGN0 eHQpCisgCisgCWNsb3NlKHBtb25pdG9yLT5tX3NlbmRmZCk7CisgCXBtb25pdG9yLT5tX3NlbmRm ZCA9IC0xOworKwljbG9zZShwbW9uaXRvci0+bV9sb2dfcmVjdmZkKTsKKysJcG1vbml0b3ItPm1f bG9nX3JlY3ZmZCA9IC0xOworKworKwlpZiAocG1vbml0b3ItPm1fbG9nX3NlbmRmZCAhPSAtMSkK KysJCXNldF9sb2dfaGFuZGxlcihtbV9sb2dfaGFuZGxlciwgcG1vbml0b3IpOworIAorIAkvKiBE ZW1vdGUgdGhlIHByaXZhdGUga2V5cyB0byBwdWJsaWMga2V5cy4gKi8KKyAJZGVtb3RlX3NlbnNp dGl2ZV9kYXRhKCk7CistLSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0IGEvMDAxOS1vcGVuc3NoLTYu NnAxLUdTU0FQSUVuYWJsZWs1dXNlcnMucGF0Y2ggYi8wMDE5LW9wZW5zc2gtNi42cDEtR1NTQVBJ RW5hYmxlazV1c2Vycy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwYTYw Yi4uMDAwMDAwMAotLS0gYS8wMDE5LW9wZW5zc2gtNi42cDEtR1NTQVBJRW5hYmxlazV1c2Vycy5w YXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi1Gcm9tIGVmOTFjODRhMjZhMjgy YWRhZjk1ZTE2NWViY2RkNDRhNDEwYzQzMjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9t OiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1h eSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMTkvNTNdIG9wZW5zc2gtNi42 cDEtR1NTQVBJRW5hYmxlazV1c2VycwotCi0tLS0KLSBnc3Mtc2Vydi1rcmI1LmMgfCAgMyArLS0K LSBzZXJ2Y29uZi5jICAgICAgfCAxMyArKysrKysrKysrKystCi0gc2VydmNvbmYuaCAgICAgIHwg IDEgKwotIHNzaGRfY29uZmlnICAgICB8ICAxICsKLSBzc2hkX2NvbmZpZy41ICAgfCAgNiArKysr KysKLSA1IGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCi0K LWRpZmYgLS1naXQgYS9nc3Mtc2Vydi1rcmI1LmMgYi9nc3Mtc2Vydi1rcmI1LmMKLWluZGV4IDE4 N2ZhZjkyOS4uMDMxODhkOWIzIDEwMDY0NAotLS0tIGEvZ3NzLXNlcnYta3JiNS5jCi0rKysgYi9n c3Mtc2Vydi1rcmI1LmMKLUBAIC0yNzgsNyArMjc4LDYgQEAgc3NoX2dzc2FwaV9rcmI1X2NtZG9r KGtyYjVfcHJpbmNpcGFsIHByaW5jaXBhbCwgY29uc3QgY2hhciAqbmFtZSwKLSAJRklMRSAqZnA7 Ci0gCWNoYXIgZmlsZVtNQVhQQVRITEVOXTsKLSAJY2hhciAqbGluZSA9IE5VTEw7Ci0tCWNoYXIg a3VzZXJbNjVdOyAvKiBtYXRjaCBrcmI1X2t1c2Vyb2soKSAqLwotIAlzdHJ1Y3Qgc3RhdCBzdDsK LSAJc3RydWN0IHBhc3N3ZCAqcHcgPSB0aGVfYXV0aGN0eHQtPnB3OwotIAlpbnQgZm91bmRfcHJp bmNpcGFsID0gMDsKLUBAIC0yODgsNyArMjg3LDcgQEAgc3NoX2dzc2FwaV9rcmI1X2NtZG9rKGty YjVfcHJpbmNpcGFsIHByaW5jaXBhbCwgY29uc3QgY2hhciAqbmFtZSwKLSAKLSAJc25wcmludGYo ZmlsZSwgc2l6ZW9mKGZpbGUpLCAiJXMvLms1dXNlcnMiLCBwdy0+cHdfZGlyKTsKLSAJLyogSWYg Ym90aCAuazVsb2dpbiBhbmQgLms1dXNlcnMgRE5FLCBzZWxmLWxvZ2luIGlzIG9rLiAqLwotLQlp ZiAoIWs1bG9naW5fZXhpc3RzICYmIChhY2Nlc3MoZmlsZSwgRl9PSykgPT0gLTEpKSB7Ci0rCWlm ICggIW9wdGlvbnMuZW5hYmxlX2s1dXNlcnMgfHwgKCFrNWxvZ2luX2V4aXN0cyAmJiAoYWNjZXNz KGZpbGUsIEZfT0spID09IC0xKSkpIHsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIHNzaF9rcmI1 X2t1c2Vyb2soa3JiX2NvbnRleHQsIHByaW5jaXBhbCwgbHVzZXIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGs1bG9naW5fZXhpc3RzKTsKLSAJfQotZGlmZiAtLWdp dCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1pbmRleCA4ZjRiMmI0M2UuLjVlNDBmMWIwMCAx MDA2NDQKLS0tLSBhL3NlcnZjb25mLmMKLSsrKyBiL3NlcnZjb25mLmMKLUBAIC0xNDQsNiArMTQ0 LDcgQEAgaW5pdGlhbGl6ZV9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQot IAlvcHRpb25zLT5nc3Nfc3RvcmVfcmVrZXkgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2tleF9hbGdv cml0aG1zID0gTlVMTDsKLSAJb3B0aW9ucy0+dXNlX2t1c2Vyb2sgPSAtMTsKLSsJb3B0aW9ucy0+ ZW5hYmxlX2s1dXNlcnMgPSAtMTsKLSAJb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24g PSAtMTsKLSAJb3B0aW9ucy0+a2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uID0gLTE7Ci0g CW9wdGlvbnMtPnBlcm1pdF9lbXB0eV9wYXNzd2QgPSAtMTsKLUBAIC0zOTYsNiArMzk3LDggQEAg ZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCi0gI2Vu ZGlmCi0gCWlmIChvcHRpb25zLT51c2Vfa3VzZXJvayA9PSAtMSkKLSAJCW9wdGlvbnMtPnVzZV9r dXNlcm9rID0gMTsKLSsJaWYgKG9wdGlvbnMtPmVuYWJsZV9rNXVzZXJzID09IC0xKQotKwkJb3B0 aW9ucy0+ZW5hYmxlX2s1dXNlcnMgPSAwOwotIAlpZiAob3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVu dGljYXRpb24gPT0gLTEpCi0gCQlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9IDE7 Ci0gCWlmIChvcHRpb25zLT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPT0gLTEpCi1A QCAtNTc5LDcgKzU4Miw3IEBAIHR5cGVkZWYgZW51bSB7Ci0gCXNIb3N0S2V5QWxnb3JpdGhtcywg c1BlclNvdXJjZU1heFN0YXJ0dXBzLCBzUGVyU291cmNlTmV0QmxvY2tTaXplLAotIAlzUGVyU291 cmNlUGVuYWx0aWVzLCBzUGVyU291cmNlUGVuYWx0eUV4ZW1wdExpc3QsCi0gCXNDbGllbnRBbGl2 ZUludGVydmFsLCBzQ2xpZW50QWxpdmVDb3VudE1heCwgc0F1dGhvcml6ZWRLZXlzRmlsZSwKLS0J c0dzc0F1dGhlbnRpY2F0aW9uLCBzR3NzQ2xlYW51cENyZWRzLCBzR3NzU3RyaWN0QWNjZXB0b3Is Ci0rCXNHc3NBdXRoZW50aWNhdGlvbiwgc0dzc0NsZWFudXBDcmVkcywgc0dzc0VuYWJsZWs1dXNl cnMsIHNHc3NTdHJpY3RBY2NlcHRvciwKLSAJc0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGhtcywg c0dzc1N0b3JlUmVrZXksCi0gCXNBY2NlcHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWwsCi0g CXNNYXRjaCwgc1Blcm1pdE9wZW4sIHNQZXJtaXRMaXN0ZW4sIHNGb3JjZUNvbW1hbmQsIHNDaHJv b3REaXJlY3RvcnksCi1AQCAtNjc1LDYgKzY3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAl7ICJn c3NhcGlrZXlleGNoYW5nZSIsIHNHc3NLZXlFeCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3Nh cGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNHc3NTdG9yZVJla2V5LCBTU0hDRkdfR0xPQkFM IH0sCi0gCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzR3NzS2V4QWxnb3JpdGhtcywgU1NIQ0ZH X0dMT0JBTCB9LAotKwl7ICJnc3NhcGllbmFibGVrNXVzZXJzIiwgc0dzc0VuYWJsZWs1dXNlcnMs IFNTSENGR19BTEwgfSwKLSAjZWxzZQotIAl7ICJnc3NhcGlhdXRoZW50aWNhdGlvbiIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotIAl7ICJnc3NhcGljbGVhbnVwY3JlZGVudGlhbHMiLCBz VW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLUBAIC02ODMsNiArNjg3LDcgQEAgc3RhdGlj IHN0cnVjdCB7Ci0gCXsgImdzc2FwaWtleWV4Y2hhbmdlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdf R0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc1Vuc3VwcG9y dGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzVW5zdXBw b3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAiZ3NzYXBpZW5hYmxlazV1c2VycyIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAotICNlbmRpZgotIAl7ICJnc3N1c2VzZXNzaW9uY2NhY2hl Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXVzZXNlc3Npb25j cmVkY2FjaGUiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLUBAIC0yNDQwLDYgKzI0 NDUsMTAgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAq b3B0aW9ucywgY2hhciAqbGluZSwKLSAJCWludHB0ciA9ICZvcHRpb25zLT51c2Vfa3VzZXJvazsK LSAJCWdvdG8gcGFyc2VfZmxhZzsKLSAKLSsJY2FzZSBzR3NzRW5hYmxlazV1c2VyczoKLSsJCWlu dHB0ciA9ICZvcHRpb25zLT5lbmFibGVfazV1c2VyczsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsK LSAJY2FzZSBzTWF0Y2g6Ci0gCQlpZiAoY21kbGluZSkKLSAJCQlmYXRhbCgiTWF0Y2ggZGlyZWN0 aXZlIG5vdCBzdXBwb3J0ZWQgYXMgYSBjb21tYW5kLWxpbmUgIgotQEAgLTMwMDcsNiArMzAxNiw3 IEBAIGNvcHlfc2V0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKmRzdCwgU2VydmVyT3B0 aW9ucyAqc3JjLCBpbnQgcHJlYXV0aCkKLSAJTV9DUF9JTlRPUFQoaXBfcW9zX2ludGVyYWN0aXZl KTsKLSAJTV9DUF9JTlRPUFQoaXBfcW9zX2J1bGspOwotIAlNX0NQX0lOVE9QVCh1c2Vfa3VzZXJv ayk7Ci0rCU1fQ1BfSU5UT1BUKGVuYWJsZV9rNXVzZXJzKTsKLSAJTV9DUF9JTlRPUFQocmVrZXlf bGltaXQpOwotIAlNX0NQX0lOVE9QVChyZWtleV9pbnRlcnZhbCk7Ci0gCU1fQ1BfSU5UT1BUKGxv Z19sZXZlbCk7Ci1AQCAtMzMxNiw2ICszMzI2LDcgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9u cyAqbykKLSAjIGVuZGlmCi0gCWR1bXBfY2ZnX2ZtdGludChzS2VyYmVyb3NVbmlxdWVDQ2FjaGUs IG8tPmtlcmJlcm9zX3VuaXF1ZV9jY2FjaGUpOwotIAlkdW1wX2NmZ19mbXRpbnQoc0tlcmJlcm9z VXNlS3VzZXJvaywgby0+dXNlX2t1c2Vyb2spOwotKwlkdW1wX2NmZ19mbXRpbnQoc0dzc0VuYWJs ZWs1dXNlcnMsIG8tPmVuYWJsZV9rNXVzZXJzKTsKLSAjZW5kaWYKLSAjaWZkZWYgR1NTQVBJCi0g CWR1bXBfY2ZnX2ZtdGludChzR3NzQXV0aGVudGljYXRpb24sIG8tPmdzc19hdXRoZW50aWNhdGlv bik7Ci1kaWZmIC0tZ2l0IGEvc2VydmNvbmYuaCBiL3NlcnZjb25mLmgKLWluZGV4IDExZGUzNmEy My4uYzA4Y2Y2YTdhIDEwMDY0NAotLS0tIGEvc2VydmNvbmYuaAotKysrIGIvc2VydmNvbmYuaAot QEAgLTE1Miw2ICsxNTIsNyBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gCWludCAgICAga2VyYmVyb3Nf dW5pcXVlX2NjYWNoZTsJCS8qIElmIHRydWUsIHRoZSBhY3F1aXJlZCB0aWNrZXQgd2lsbAotIAkJ CQkJCSAqIGJlIHN0b3JlZCBpbiBwZXItc2Vzc2lvbiBjY2FjaGUgKi8KLSAJaW50CXVzZV9rdXNl cm9rOwotKwlpbnQJCWVuYWJsZV9rNXVzZXJzOwotIAlpbnQgICAgIGdzc19hdXRoZW50aWNhdGlv bjsJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQSSBhdXRoZW50aWNhdGlvbiAqLwotIAlpbnQgICAg IGdzc19rZXlleDsJCS8qIElmIHRydWUsIHBlcm1pdCBHU1NBUEkga2V5IGV4Y2hhbmdlICovCi0g CWludCAgICAgZ3NzX2NsZWFudXBfY3JlZHM7CS8qIElmIHRydWUsIGRlc3Ryb3kgY3JlZCBjYWNo ZSBvbiBsb2dvdXQgKi8KLWRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZyBiL3NzaGRfY29uZmlnCi1p bmRleCBlYTVhODc4ZTYuLjMzNzEzYzg4NiAxMDA2NDQKLS0tLSBhL3NzaGRfY29uZmlnCi0rKysg Yi9zc2hkX2NvbmZpZwotQEAgLTgyLDYgKzgyLDcgQEAgQXV0aG9yaXplZEtleXNGaWxlCS5zc2gv YXV0aG9yaXplZF9rZXlzCi0gI0dTU0FQSUNsZWFudXBDcmVkZW50aWFscyB5ZXMKLSAjR1NTQVBJ U3RyaWN0QWNjZXB0b3JDaGVjayB5ZXMKLSAjR1NTQVBJS2V5RXhjaGFuZ2Ugbm8KLSsjR1NTQVBJ RW5hYmxlazV1c2VycyBubwotIAotICMgU2V0IHRoaXMgdG8gJ3llcycgdG8gZW5hYmxlIFBBTSBh dXRoZW50aWNhdGlvbiwgYWNjb3VudCBwcm9jZXNzaW5nLAotICMgYW5kIHNlc3Npb24gcHJvY2Vz c2luZy4gSWYgdGhpcyBpcyBlbmFibGVkLCBQQU0gYXV0aGVudGljYXRpb24gd2lsbAotZGlmZiAt LWdpdCBhL3NzaGRfY29uZmlnLjUgYi9zc2hkX2NvbmZpZy41Ci1pbmRleCBjMzYwZmNmZmYuLmEw ZmM2MDY0ZiAxMDA2NDQKLS0tLSBhL3NzaGRfY29uZmlnLjUKLSsrKyBiL3NzaGRfY29uZmlnLjUK LUBAIC03MzksNiArNzM5LDEyIEBAIFNwZWNpZmllcyB3aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkg ZGVzdHJveSB0aGUgdXNlcidzIGNyZWRlbnRpYWxzIGNhY2hlCi0gb24gbG9nb3V0LgotIFRoZSBk ZWZhdWx0IGlzCi0gLkNtIHllcyAuCi0rLkl0IENtIEdTU0FQSUVuYWJsZWs1dXNlcnMKLStTcGVj aWZpZXMgd2hldGhlciB0byBsb29rIGF0IC5rNXVzZXJzIGZpbGUgZm9yIEdTU0FQSSBhdXRoZW50 aWNhdGlvbgotK2FjY2VzcyBjb250cm9sLiBGdXJ0aGVyIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBp bgotKy5YciBrc3UgMSAuCi0rVGhlIGRlZmF1bHQgaXMKLSsuQ20gbm8gLgotIC5JdCBDbSBHU1NB UElLZXlFeGNoYW5nZQotIFNwZWNpZmllcyB3aGV0aGVyIGtleSBleGNoYW5nZSBiYXNlZCBvbiBH U1NBUEkgaXMgYWxsb3dlZC4gR1NTQVBJIGtleSBleGNoYW5nZQotIGRvZXNuJ3QgcmVseSBvbiBz c2gga2V5cyB0byB2ZXJpZnkgaG9zdCBpZGVudGl0eS4KLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1n aXQgYS8wMDIwLW9wZW5zc2gtNi42LjFwMS1zY3Atbm9uLWV4aXN0aW5nLWRpcmVjdG9yeS5wYXRj aCBiLzAwMjAtb3BlbnNzaC02LjYuMXAxLXNjcC1ub24tZXhpc3RpbmctZGlyZWN0b3J5LnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjY2ZjIKLS0tIC9kZXYvbnVs bAorKysgYi8wMDIwLW9wZW5zc2gtNi42LjFwMS1zY3Atbm9uLWV4aXN0aW5nLWRpcmVjdG9yeS5w YXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDI3NjcyOWRjMzdkMjA0ZTNkYTgwNDU1Nzg4ZGVl YWM4NTRjNzJiNDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2 c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4 ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvNTRdIG9wZW5zc2gtNi42LjFwMS1zY3Atbm9uLWV4 aXN0aW5nLWRpcmVjdG9yeQorCisjIHNjcCBmaWxlIGludG8gbm9uLWV4aXN0aW5nIGRpcmVjdG9y eSAoIzExNDIyMjMpCistLS0KKyBzY3AuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGlu c2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NjcC5jIGIvc2NwLmMKK2luZGV4IGQ4N2Q5Mzlh MS4uYjVhZDQ1YzEyIDEwMDY0NAorLS0tIGEvc2NwLmMKKysrKyBiL3NjcC5jCitAQCAtMTg3MSw2 ICsxODcxLDEwIEBAIHNpbmsoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpzcmMp CisgCQkJZnJlZSh2ZWN0WzBdKTsKKyAJCQljb250aW51ZTsKKyAJCX0KKysJCWlmIChidWZbMF0g PT0gJ0MnICYmICEgZXhpc3RzICYmIG5wW3N0cmxlbihucCktMV0gPT0gJy8nKSB7CisrCQkJZXJy bm8gPSBFTk9URElSOworKwkJCWdvdG8gYmFkOworKwkJfQorIAkJb21vZGUgPSBtb2RlOworIAkJ bW9kZSB8PSBTX0lXVVNSOworIAkJaWYgKChvZmQgPSBvcGVuKG5wLCBPX1dST05MWXxPX0NSRUFU LCBtb2RlKSkgPT0gLTEpIHsKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDIwLW9wZW5z c2gtNi44cDEtc3NoZFQtb3V0cHV0LnBhdGNoIGIvMDAyMC1vcGVuc3NoLTYuOHAxLXNzaGRULW91 dHB1dC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQyMzc5ZS4uMDAwMDAw MAotLS0gYS8wMDIwLW9wZW5zc2gtNi44cDEtc3NoZFQtb3V0cHV0LnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMjUgKzAsMCBAQAotRnJvbSBjY2UxOGQ2MzZmNDEzN2E0ZTU0MDExNzA1Mzg4Njhi OGI4MDY1MWMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNr aXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCAr MDIwMAotU3ViamVjdDogW1BBVENIIDIwLzUzXSBvcGVuc3NoLTYuOHAxLXNzaGRULW91dHB1dAot Ci0tLS0KLSBzZXJ2Y29uZi5jIHwgMiArLQotIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigr KSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMK LWluZGV4IDVlNDBmMWIwMC4uYjYzYTdmMGIwIDEwMDY0NAotLS0tIGEvc2VydmNvbmYuYwotKysr IGIvc2VydmNvbmYuYwotQEAgLTMzNjgsNyArMzM2OCw3IEBAIGR1bXBfY29uZmlnKFNlcnZlck9w dGlvbnMgKm8pCi0gCWR1bXBfY2ZnX3N0cmluZyhzWEF1dGhMb2NhdGlvbiwgby0+eGF1dGhfbG9j YXRpb24pOwotIAlkdW1wX2NmZ19zdHJpbmcoc0NpcGhlcnMsIG8tPmNpcGhlcnMpOwotIAlkdW1w X2NmZ19zdHJpbmcoc01hY3MsIG8tPm1hY3MpOwotLQlkdW1wX2NmZ19zdHJpbmcoc0Jhbm5lciwg by0+YmFubmVyKTsKLSsJZHVtcF9jZmdfc3RyaW5nKHNCYW5uZXIsIG8tPmJhbm5lciAhPSBOVUxM ID8gby0+YmFubmVyIDogIm5vbmUiKTsKLSAJZHVtcF9jZmdfc3RyaW5nKHNGb3JjZUNvbW1hbmQs IG8tPmFkbV9mb3JjZWRfY29tbWFuZCk7Ci0gCWR1bXBfY2ZnX3N0cmluZyhzQ2hyb290RGlyZWN0 b3J5LCBvLT5jaHJvb3RfZGlyZWN0b3J5KTsKLSAJZHVtcF9jZmdfc3RyaW5nKHNUcnVzdGVkVXNl ckNBS2V5cywgby0+dHJ1c3RlZF91c2VyX2NhX2tleXMpOwotLS0gCi0yLjUyLjAKLQoKZGlmZiAt LWdpdCBhLzAwMjEtb3BlbnNzaC02LjZwMS1HU1NBUElFbmFibGVrNXVzZXJzLnBhdGNoIGIvMDAy MS1vcGVuc3NoLTYuNnAxLUdTU0FQSUVuYWJsZWs1dXNlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyNzc4YgotLS0gL2Rldi9udWxsCisrKyBiLzAwMjEtb3Bl bnNzaC02LjZwMS1HU1NBUElFbmFibGVrNXVzZXJzLnBhdGNoCkBAIC0wLDAgKzEsMTMzIEBACitG cm9tIGNmNmY4MzkzNzBiMWY4YTIwN2RlMDhiNGIwMGMyOGNlNjY4NGQxODIgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+ CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0gg MjEvNTRdIG9wZW5zc2gtNi42cDEtR1NTQVBJRW5hYmxlazV1c2VycworCistLS0KKyBnc3Mtc2Vy di1rcmI1LmMgfCAgMyArLS0KKyBzZXJ2Y29uZi5jICAgICAgfCAxMyArKysrKysrKysrKystCisg c2VydmNvbmYuaCAgICAgIHwgIDEgKworIHNzaGRfY29uZmlnICAgICB8ICAxICsKKyA0IGZpbGVz IGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQg YS9nc3Mtc2Vydi1rcmI1LmMgYi9nc3Mtc2Vydi1rcmI1LmMKK2luZGV4IDZmNTgyNmNlOC4uNzIz NTA5NDA5IDEwMDY0NAorLS0tIGEvZ3NzLXNlcnYta3JiNS5jCisrKysgYi9nc3Mtc2Vydi1rcmI1 LmMKK0BAIC0yNzgsNyArMjc4LDYgQEAgc3NoX2dzc2FwaV9rcmI1X2NtZG9rKGtyYjVfcHJpbmNp cGFsIHByaW5jaXBhbCwgY29uc3QgY2hhciAqbmFtZSwKKyAJRklMRSAqZnA7CisgCWNoYXIgZmls ZVtNQVhQQVRITEVOXTsKKyAJY2hhciAqbGluZSA9IE5VTEw7CistCWNoYXIga3VzZXJbNjVdOyAv KiBtYXRjaCBrcmI1X2t1c2Vyb2soKSAqLworIAlzdHJ1Y3Qgc3RhdCBzdDsKKyAJc3RydWN0IHBh c3N3ZCAqcHcgPSB0aGVfYXV0aGN0eHQtPnB3OworIAlpbnQgZm91bmRfcHJpbmNpcGFsID0gMDsK K0BAIC0yODgsNyArMjg3LDcgQEAgc3NoX2dzc2FwaV9rcmI1X2NtZG9rKGtyYjVfcHJpbmNpcGFs IHByaW5jaXBhbCwgY29uc3QgY2hhciAqbmFtZSwKKyAKKyAJc25wcmludGYoZmlsZSwgc2l6ZW9m KGZpbGUpLCAiJXMvLms1dXNlcnMiLCBwdy0+cHdfZGlyKTsKKyAJLyogSWYgYm90aCAuazVsb2dp biBhbmQgLms1dXNlcnMgRE5FLCBzZWxmLWxvZ2luIGlzIG9rLiAqLworLQlpZiAoIWs1bG9naW5f ZXhpc3RzICYmIChhY2Nlc3MoZmlsZSwgRl9PSykgPT0gLTEpKSB7CisrCWlmICggIW9wdGlvbnMu ZW5hYmxlX2s1dXNlcnMgfHwgKCFrNWxvZ2luX2V4aXN0cyAmJiAoYWNjZXNzKGZpbGUsIEZfT0sp ID09IC0xKSkpIHsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHNzaF9rcmI1X2t1c2Vyb2soa3Ji X2NvbnRleHQsIHByaW5jaXBhbCwgbHVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGs1bG9naW5fZXhpc3RzKTsKKyAJfQorZGlmZiAtLWdpdCBhL3NlcnZjb25m LmMgYi9zZXJ2Y29uZi5jCitpbmRleCA3NTEzODhiYzAuLjhkZTgxZmRjOCAxMDA2NDQKKy0tLSBh L3NlcnZjb25mLmMKKysrKyBiL3NlcnZjb25mLmMKK0BAIC0xNDAsNiArMTQwLDcgQEAgaW5pdGlh bGl6ZV9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQorIAlvcHRpb25zLT5n c3Nfc3RvcmVfcmVrZXkgPSAtMTsKKyAJb3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID0gTlVM TDsKKyAJb3B0aW9ucy0+dXNlX2t1c2Vyb2sgPSAtMTsKKysJb3B0aW9ucy0+ZW5hYmxlX2s1dXNl cnMgPSAtMTsKKyAJb3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPSAtMTsKKyAJb3B0 aW9ucy0+a2JkX2ludGVyYWN0aXZlX2F1dGhlbnRpY2F0aW9uID0gLTE7CisgCW9wdGlvbnMtPnBl cm1pdF9lbXB0eV9wYXNzd2QgPSAtMTsKK0BAIC0zOTYsNiArMzk3LDggQEAgZmlsbF9kZWZhdWx0 X3NlcnZlcl9vcHRpb25zKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMpCisgI2VuZGlmCisgCWlmIChv cHRpb25zLT51c2Vfa3VzZXJvayA9PSAtMSkKKyAJCW9wdGlvbnMtPnVzZV9rdXNlcm9rID0gMTsK KysJaWYgKG9wdGlvbnMtPmVuYWJsZV9rNXVzZXJzID09IC0xKQorKwkJb3B0aW9ucy0+ZW5hYmxl X2s1dXNlcnMgPSAwOworIAlpZiAob3B0aW9ucy0+cGFzc3dvcmRfYXV0aGVudGljYXRpb24gPT0g LTEpCisgCQlvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbiA9IDE7CisgCWlmIChvcHRp b25zLT5rYmRfaW50ZXJhY3RpdmVfYXV0aGVudGljYXRpb24gPT0gLTEpCitAQCAtNTgyLDcgKzU4 NSw3IEBAIHR5cGVkZWYgZW51bSB7CisgCXNIb3N0S2V5QWxnb3JpdGhtcywgc1BlclNvdXJjZU1h eFN0YXJ0dXBzLCBzUGVyU291cmNlTmV0QmxvY2tTaXplLAorIAlzUGVyU291cmNlUGVuYWx0aWVz LCBzUGVyU291cmNlUGVuYWx0eUV4ZW1wdExpc3QsCisgCXNDbGllbnRBbGl2ZUludGVydmFsLCBz Q2xpZW50QWxpdmVDb3VudE1heCwgc0F1dGhvcml6ZWRLZXlzRmlsZSwKKy0Jc0dzc0F1dGhlbnRp Y2F0aW9uLCBzR3NzQ2xlYW51cENyZWRzLCBzR3NzRGVsZWdhdGVDcmVkcywgc0dzc1N0cmljdEFj Y2VwdG9yLAorKwlzR3NzQXV0aGVudGljYXRpb24sIHNHc3NDbGVhbnVwQ3JlZHMsIHNHc3NEZWxl Z2F0ZUNyZWRzLCBzR3NzRW5hYmxlazV1c2Vycywgc0dzc1N0cmljdEFjY2VwdG9yLAorIAlzR3Nz S2V5RXgsIHNHc3NLZXhBbGdvcml0aG1zLCBzR3NzU3RvcmVSZWtleSwKKyAJc0FjY2VwdEVudiwg c1NldEVudiwgc1Blcm1pdFR1bm5lbCwKKyAJc01hdGNoLCBzUGVybWl0T3Blbiwgc1Blcm1pdExp c3Rlbiwgc0ZvcmNlQ29tbWFuZCwgc0Nocm9vdERpcmVjdG9yeSwKK0BAIC02NzksNiArNjgyLDcg QEAgc3RhdGljIHN0cnVjdCB7CisgCXsgImdzc2FwaWtleWV4Y2hhbmdlIiwgc0dzc0tleUV4LCBT U0hDRkdfR0xPQkFMIH0sCisgCXsgImdzc2FwaXN0b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc0dz c1N0b3JlUmVrZXksIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiZ3NzYXBpa2V4YWxnb3JpdGhtcyIs IHNHc3NLZXhBbGdvcml0aG1zLCBTU0hDRkdfR0xPQkFMIH0sCisrCXsgImdzc2FwaWVuYWJsZWs1 dXNlcnMiLCBzR3NzRW5hYmxlazV1c2VycywgU1NIQ0ZHX0FMTCB9LAorICNlbHNlCisgCXsgImdz c2FwaWF1dGhlbnRpY2F0aW9uIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCisgCXsgImdz c2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAor QEAgLTY4OCw2ICs2OTIsNyBAQCBzdGF0aWMgc3RydWN0IHsKKyAJeyAiZ3NzYXBpa2V5ZXhjaGFu Z2UiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiZ3NzYXBpc3RvcmVjcmVk ZW50aWFsc29ucmVrZXkiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiZ3Nz YXBpa2V4YWxnb3JpdGhtcyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7ICJn c3NhcGllbmFibGVrNXVzZXJzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCisgI2VuZGlm CisgCXsgImdzc3VzZXNlc3Npb25jY2FjaGUiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwg fSwKKyAJeyAiZ3NzYXBpdXNlc2Vzc2lvbmNyZWRjYWNoZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZH X0dMT0JBTCB9LAorQEAgLTI0NzIsNiArMjQ3NywxMCBAQCBwcm9jZXNzX3NlcnZlcl9jb25maWdf bGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAorIAkJaW50cHRy ID0gJm9wdGlvbnMtPnVzZV9rdXNlcm9rOworIAkJZ290byBwYXJzZV9mbGFnOworIAorKwljYXNl IHNHc3NFbmFibGVrNXVzZXJzOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPmVuYWJsZV9rNXVzZXJz OworKwkJZ290byBwYXJzZV9mbGFnOworKworIAljYXNlIHNNYXRjaDoKKyAJCWlmIChjbWRsaW5l KQorIAkJCWZhdGFsKCJNYXRjaCBkaXJlY3RpdmUgbm90IHN1cHBvcnRlZCBhcyBhIGNvbW1hbmQt bGluZSAiCitAQCAtMzA0MCw2ICszMDQ5LDcgQEAgY29weV9zZXRfc2VydmVyX29wdGlvbnMoU2Vy dmVyT3B0aW9ucyAqZHN0LCBTZXJ2ZXJPcHRpb25zICpzcmMsIGludCBwcmVhdXRoKQorIAlNX0NQ X0lOVE9QVChpcF9xb3NfaW50ZXJhY3RpdmUpOworIAlNX0NQX0lOVE9QVChpcF9xb3NfYnVsayk7 CisgCU1fQ1BfSU5UT1BUKHVzZV9rdXNlcm9rKTsKKysJTV9DUF9JTlRPUFQoZW5hYmxlX2s1dXNl cnMpOworIAlNX0NQX0lOVE9QVChyZWtleV9saW1pdCk7CisgCU1fQ1BfSU5UT1BUKHJla2V5X2lu dGVydmFsKTsKKyAJTV9DUF9JTlRPUFQobG9nX2xldmVsKTsKK0BAIC0zMzUwLDYgKzMzNjAsNyBA QCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQorICMgZW5kaWYKKyAJZHVtcF9jZmdfZm10 aW50KHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgby0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZSk7Cisg CWR1bXBfY2ZnX2ZtdGludChzS2VyYmVyb3NVc2VLdXNlcm9rLCBvLT51c2Vfa3VzZXJvayk7Cisr CWR1bXBfY2ZnX2ZtdGludChzR3NzRW5hYmxlazV1c2Vycywgby0+ZW5hYmxlX2s1dXNlcnMpOwor ICNlbmRpZgorICNpZmRlZiBHU1NBUEkKKyAJZHVtcF9jZmdfZm10aW50KHNHc3NBdXRoZW50aWNh dGlvbiwgby0+Z3NzX2F1dGhlbnRpY2F0aW9uKTsKK2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5oIGIv c2VydmNvbmYuaAoraW5kZXggOTg0M2Y5NmM1Li41NjkxMDBlNDcgMTAwNjQ0CistLS0gYS9zZXJ2 Y29uZi5oCisrKysgYi9zZXJ2Y29uZi5oCitAQCAtMTUzLDYgKzE1Myw3IEBAIHR5cGVkZWYgc3Ry dWN0IHsKKyAJaW50ICAgICBrZXJiZXJvc191bmlxdWVfY2NhY2hlOwkJLyogSWYgdHJ1ZSwgdGhl IGFjcXVpcmVkIHRpY2tldCB3aWxsCisgCQkJCQkJICogYmUgc3RvcmVkIGluIHBlci1zZXNzaW9u IGNjYWNoZSAqLworIAlpbnQJdXNlX2t1c2Vyb2s7CisrCWludAkJZW5hYmxlX2s1dXNlcnM7Cisg CWludCAgICAgZ3NzX2F1dGhlbnRpY2F0aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGF1 dGhlbnRpY2F0aW9uICovCisgCWludCAgICAgZ3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVybWl0 IEdTU0FQSSBrZXkgZXhjaGFuZ2UgKi8KKyAJaW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJLyog SWYgdHJ1ZSwgZGVzdHJveSBjcmVkIGNhY2hlIG9uIGxvZ291dCAqLworZGlmZiAtLWdpdCBhL3Nz aGRfY29uZmlnIGIvc3NoZF9jb25maWcKK2luZGV4IGVhNWE4NzhlNi4uMzM3MTNjODg2IDEwMDY0 NAorLS0tIGEvc3NoZF9jb25maWcKKysrKyBiL3NzaGRfY29uZmlnCitAQCAtODIsNiArODIsNyBA QCBBdXRob3JpemVkS2V5c0ZpbGUJLnNzaC9hdXRob3JpemVkX2tleXMKKyAjR1NTQVBJQ2xlYW51 cENyZWRlbnRpYWxzIHllcworICNHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrIHllcworICNHU1NB UElLZXlFeGNoYW5nZSBubworKyNHU1NBUElFbmFibGVrNXVzZXJzIG5vCisgCisgIyBTZXQgdGhp cyB0byAneWVzJyB0byBlbmFibGUgUEFNIGF1dGhlbnRpY2F0aW9uLCBhY2NvdW50IHByb2Nlc3Np bmcsCisgIyBhbmQgc2Vzc2lvbiBwcm9jZXNzaW5nLiBJZiB0aGlzIGlzIGVuYWJsZWQsIFBBTSBh dXRoZW50aWNhdGlvbiB3aWxsCistLSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0IGEvMDAyMS1vcGVu c3NoLTYuN3AxLXNmdHAtZm9yY2UtcGVybWlzc2lvbi5wYXRjaCBiLzAwMjEtb3BlbnNzaC02Ljdw MS1zZnRwLWZvcmNlLXBlcm1pc3Npb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDczNzQzMGQuLjAwMDAwMDAKLS0tIGEvMDAyMS1vcGVuc3NoLTYuN3AxLXNmdHAtZm9yY2Ut cGVybWlzc2lvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi1Gcm9tIDU3 YWUzM2MyZjQzNDI1NzI1MzQ1YzkxMGQ5MGVmNmZlZDc1ZDNiODUgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRl OiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMjEvNTNd IG9wZW5zc2gtNi43cDEtc2Z0cC1mb3JjZS1wZXJtaXNzaW9uCi0KLS0tLQotIHNmdHAtc2VydmVy LjggfCAgNyArKysrKysrCi0gc2Z0cC1zZXJ2ZXIuYyB8IDI0ICsrKysrKysrKysrKysrKysrKysr KystLQotIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkK LQotZGlmZiAtLWdpdCBhL3NmdHAtc2VydmVyLjggYi9zZnRwLXNlcnZlci44Ci1pbmRleCA1MzEx YmY5MjkuLjVlNmUzYWE0NCAxMDA2NDQKLS0tLSBhL3NmdHAtc2VydmVyLjgKLSsrKyBiL3NmdHAt c2VydmVyLjgKLUBAIC0zOCw2ICszOCw3IEBACi0gLk9wIEZsIFAgQXIgZGVuaWVkX3JlcXVlc3Rz Ci0gLk9wIEZsIHAgQXIgYWxsb3dlZF9yZXF1ZXN0cwotIC5PcCBGbCB1IEFyIHVtYXNrCi0rLk9w IEZsIG0gQXIgZm9yY2VfZmlsZV9wZXJtcwotIC5FawotIC5ObQotIC5GbCBRIEFyIHByb3RvY29s X2ZlYXR1cmUKLUBAIC0xMzgsNiArMTM5LDEyIEBAIFNldHMgYW4gZXhwbGljaXQKLSAuWHIgdW1h c2sgMgotIHRvIGJlIGFwcGxpZWQgdG8gbmV3bHktY3JlYXRlZCBmaWxlcyBhbmQgZGlyZWN0b3Jp ZXMsIGluc3RlYWQgb2YgdGhlCi0gdXNlcidzIGRlZmF1bHQgbWFzay4KLSsuSXQgRmwgbSBBciBm b3JjZV9maWxlX3Blcm1zCi0rU2V0cyBleHBsaWNpdCBmaWxlIHBlcm1pc3Npb25zIHRvIGJlIGFw cGxpZWQgdG8gbmV3bHktY3JlYXRlZCBmaWxlcyBpbnN0ZWFkCi0rb2YgdGhlIGRlZmF1bHQgb3Ig Y2xpZW50IHJlcXVlc3RlZCBtb2RlLiAgTnVtZXJpYyB2YWx1ZXMgaW5jbHVkZToKLSs3NzcsIDc1 NSwgNzUwLCA2NjYsIDY0NCwgNjQwLCBldGMuICBVc2luZyBib3RoIC1tIGFuZCAtdSBzd2l0Y2hl cyBtYWtlcyB0aGUKLSt1bWFzayAoLXUpIGVmZmVjdGl2ZSBvbmx5IGZvciBuZXdseSBjcmVhdGVk IGRpcmVjdG9yaWVzIGFuZCBleHBsaWNpdCBtb2RlICgtbSkKLStmb3IgbmV3bHkgY3JlYXRlZCBm aWxlcy4KLSAuRWwKLSAuUHAKLSBPbiBzb21lIHN5c3RlbXMsCi1kaWZmIC0tZ2l0IGEvc2Z0cC1z ZXJ2ZXIuYyBiL3NmdHAtc2VydmVyLmMKLWluZGV4IDE4NWFkMTQ1OS4uZTA0ZmM2M2IzIDEwMDY0 NAotLS0tIGEvc2Z0cC1zZXJ2ZXIuYwotKysrIGIvc2Z0cC1zZXJ2ZXIuYwotQEAgLTcyLDYgKzcy LDEwIEBAIHN0cnVjdCBzc2hidWYgKm9xdWV1ZTsKLSAvKiBWZXJzaW9uIG9mIGNsaWVudCAqLwot IHN0YXRpYyB1X2ludCB2ZXJzaW9uOwotIAotKy8qIEZvcmNlIGZpbGUgcGVybWlzc2lvbnMgKi8K LStpbnQgcGVybWZvcmNlID0gMDsKLStsb25nIHBlcm1mb3JjZW1vZGU7Ci0rCi0gLyogU1NIMl9G WFBfSU5JVCByZWNlaXZlZCAqLwotIHN0YXRpYyBpbnQgaW5pdF9kb25lOwotIAotQEAgLTc0MSw2 ICs3NDUsNyBAQCBwcm9jZXNzX29wZW4odV9pbnQzMl90IGlkKQotIAlBdHRyaWIgYTsKLSAJY2hh ciAqbmFtZTsKLSAJaW50IHIsIGhhbmRsZSwgZmQsIGZsYWdzLCBtb2RlLCBzdGF0dXMgPSBTU0gy X0ZYX0ZBSUxVUkU7Ci0rCW1vZGVfdCBvbGRfdW1hc2sgPSAwOwotIAotIAlpZiAoKHIgPSBzc2hi dWZfZ2V0X2NzdHJpbmcoaXF1ZXVlLCAmbmFtZSwgTlVMTCkpICE9IDAgfHwKLSAJICAgIChyID0g c3NoYnVmX2dldF91MzIoaXF1ZXVlLCAmcGZsYWdzKSkgIT0gMCB8fCAvKiBwb3J0YWJsZSBmbGFn cyAqLwotQEAgLTc1MCw2ICs3NTUsMTAgQEAgcHJvY2Vzc19vcGVuKHVfaW50MzJfdCBpZCkKLSAJ ZGVidWczKCJyZXF1ZXN0ICV1OiBvcGVuIGZsYWdzICVkIiwgaWQsIHBmbGFncyk7Ci0gCWZsYWdz ID0gZmxhZ3NfZnJvbV9wb3J0YWJsZShwZmxhZ3MpOwotIAltb2RlID0gKGEuZmxhZ3MgJiBTU0gy X0ZJTEVYRkVSX0FUVFJfUEVSTUlTU0lPTlMpID8gYS5wZXJtIDogMDY2NjsKLSsJaWYgKHBlcm1m b3JjZSA9PSAxKSB7ICAgLyogRm9yY2UgcGVybSBpZiAtbSBpcyBzZXQgKi8KLSsJCW1vZGUgPSBw ZXJtZm9yY2Vtb2RlOwotKwkJb2xkX3VtYXNrID0gdW1hc2soMCk7IC8qIHNvIHVtYXNrIGRvZXMg bm90IGludGVyZmVyZSAqLwotKwl9CQotIAlsb2dpdCgib3BlbiBcIiVzXCIgZmxhZ3MgJXMgbW9k ZSAwJW8iLAotIAkgICAgbmFtZSwgc3RyaW5nX2Zyb21fcG9ydGFibGUocGZsYWdzKSwgbW9kZSk7 Ci0gCWlmIChyZWFkb25seSAmJgotQEAgLTc3MSw2ICs3ODAsOCBAQCBwcm9jZXNzX29wZW4odV9p bnQzMl90IGlkKQotIAkJCX0KLSAJCX0KLSAJfQotKwlpZiAocGVybWZvcmNlID09IDEpCi0rCQko dm9pZCkgdW1hc2sob2xkX3VtYXNrKTsgLyogcmVzdG9yZSB1bWFzayB0byBzb21ldGhpbmcgc2Fu ZSAqLwotIAlpZiAoc3RhdHVzICE9IFNTSDJfRlhfT0spCi0gCQlzZW5kX3N0YXR1cyhpZCwgc3Rh dHVzKTsKLSAJZnJlZShuYW1lKTsKLUBAIC0xODkwLDcgKzE5MDEsNyBAQCBzZnRwX3NlcnZlcl91 c2FnZSh2b2lkKQotIAlmcHJpbnRmKHN0ZGVyciwKLSAJICAgICJ1c2FnZTogJXMgWy1laFJdIFst ZCBzdGFydF9kaXJlY3RvcnldIFstZiBsb2dfZmFjaWxpdHldICIKLSAJICAgICJbLWwgbG9nX2xl dmVsXVxuXHRbLVAgZGVuaWVkX3JlcXVlc3RzXSAiCi0tCSAgICAiWy1wIGFsbG93ZWRfcmVxdWVz dHNdIFstdSB1bWFza11cbiIKLSsJICAgICJbLXAgYWxsb3dlZF9yZXF1ZXN0c10gWy11IHVtYXNr XSBbLW0gZm9yY2VfZmlsZV9wZXJtc11cbiIKLSAJICAgICIgICAgICAgJXMgLVEgcHJvdG9jb2xf ZmVhdHVyZVxuIiwKLSAJICAgIF9fcHJvZ25hbWUsIF9fcHJvZ25hbWUpOwotIAlleGl0KDEpOwot QEAgLTE5MTQsNyArMTkyNSw3IEBAIHNmdHBfc2VydmVyX21haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBpbnQgcmVzZXRfaGFuZGxlCi0gCXB3ID0gcHdj b3B5KHVzZXJfcHcpOwotIAotIAl3aGlsZSAoIXNraXBhcmdzICYmIChjaCA9IGdldG9wdChhcmdj LCBhcmd2LAotLQkgICAgImQ6ZjpsOlA6cDpROnU6Y2VoUiIpKSAhPSAtMSkgewotKwkgICAgImQ6 ZjpsOlA6cDpROnU6bTpjZWhSIikpICE9IC0xKSB7Ci0gCQlzd2l0Y2ggKGNoKSB7Ci0gCQljYXNl ICdRJzoKLSAJCQlpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJyZXF1ZXN0cyIpICE9IDApIHsKLUBA IC0xOTc2LDYgKzE5ODcsMTUgQEAgc2Z0cF9zZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YsIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHcsIGludCByZXNldF9oYW5kbGUKLSAJCQkJZmF0YWwo IkludmFsaWQgdW1hc2sgXCIlc1wiIiwgb3B0YXJnKTsKLSAJCQkodm9pZCl1bWFzaygobW9kZV90 KW1hc2spOwotIAkJCWJyZWFrOwotKwkJY2FzZSAnbSc6Ci0rCQkJLyogRm9yY2UgcGVybWlzc2lv bnMgb24gZmlsZSByZWNlaXZlZCB2aWEgc2Z0cCAqLwotKwkJCXBlcm1mb3JjZSA9IDE7Ci0rCQkJ cGVybWZvcmNlbW9kZSA9IHN0cnRvbChvcHRhcmcsICZjcCwgOCk7Ci0rCQkJaWYgKHBlcm1mb3Jj ZW1vZGUgPCAwIHx8IHBlcm1mb3JjZW1vZGUgPiAwNzc3IHx8Ci0rCQkJICAgICpjcCAhPSAnXDAn IHx8IChwZXJtZm9yY2Vtb2RlID09IDAgJiYKLSsJCQkgICAgZXJybm8gIT0gMCkpCi0rCQkJCWZh dGFsKCJJbnZhbGlkIGZpbGUgbW9kZSBcIiVzXCIiLCBvcHRhcmcpOwotKwkJCWJyZWFrOwotIAkJ Y2FzZSAnaCc6Ci0gCQlkZWZhdWx0OgotIAkJCXNmdHBfc2VydmVyX3VzYWdlKCk7Ci0tLSAKLTIu NTIuMAotCgpkaWZmIC0tZ2l0IGEvMDAyMi1vcGVuc3NoLTYuOHAxLXNzaGRULW91dHB1dC5wYXRj aCBiLzAwMjItb3BlbnNzaC02LjhwMS1zc2hkVC1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYmViYWRmMwotLS0gL2Rldi9udWxsCisrKyBiLzAwMjItb3Bl bnNzaC02LjhwMS1zc2hkVC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRnJvbSA0OWJk OGFhMTYxZTUwNWU5YzU5ZTk3MjQ2ZTg5ODFiZTNmZDkyZjYzIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTog VGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDIyLzU0XSBv cGVuc3NoLTYuOHAxLXNzaGRULW91dHB1dAorCisjIGFwcGx5IHVwc3RyZWFtIHBhdGNoIGFuZCBt YWtlIHNzaGQgLVQgbW9yZSBjb25zaXN0ZW50ICgjMTE4NzUyMSkKKy0tLQorIHNlcnZjb25mLmMg fCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisK K2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYworaW5kZXggOGRlODFmZGM4Li44 MDQ1NzU2ZmIgMTAwNjQ0CistLS0gYS9zZXJ2Y29uZi5jCisrKysgYi9zZXJ2Y29uZi5jCitAQCAt MzQwMyw3ICszNDAzLDcgQEAgZHVtcF9jb25maWcoU2VydmVyT3B0aW9ucyAqbykKKyAJZHVtcF9j Zmdfc3RyaW5nKHNYQXV0aExvY2F0aW9uLCBvLT54YXV0aF9sb2NhdGlvbik7CisgCWR1bXBfY2Zn X3N0cmluZyhzQ2lwaGVycywgby0+Y2lwaGVycyk7CisgCWR1bXBfY2ZnX3N0cmluZyhzTWFjcywg by0+bWFjcyk7CistCWR1bXBfY2ZnX3N0cmluZyhzQmFubmVyLCBvLT5iYW5uZXIpOworKwlkdW1w X2NmZ19zdHJpbmcoc0Jhbm5lciwgby0+YmFubmVyICE9IE5VTEwgPyBvLT5iYW5uZXIgOiAibm9u ZSIpOworIAlkdW1wX2NmZ19zdHJpbmcoc0ZvcmNlQ29tbWFuZCwgby0+YWRtX2ZvcmNlZF9jb21t YW5kKTsKKyAJZHVtcF9jZmdfc3RyaW5nKHNDaHJvb3REaXJlY3RvcnksIG8tPmNocm9vdF9kaXJl Y3RvcnkpOworIAlkdW1wX2NmZ19zdHJpbmcoc1RydXN0ZWRVc2VyQ0FLZXlzLCBvLT50cnVzdGVk X3VzZXJfY2Ffa2V5cyk7CistLSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0IGEvMDAyMi1vcGVuc3No LTcuMnAyLXMzOTAtY2xvc2Vmcm9tLnBhdGNoIGIvMDAyMi1vcGVuc3NoLTcuMnAyLXMzOTAtY2xv c2Vmcm9tLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTU5ZmQ2Li4wMDAw MDAwCi0tLSBhLzAwMjItb3BlbnNzaC03LjJwMi1zMzkwLWNsb3NlZnJvbS5wYXRjaAorKysgL2Rl di9udWxsCkBAIC0xLDUwICswLDAgQEAKLUZyb20gMjViNTkzZjQxZmE4NWJjYWYxYmJkYzljMzY4 MzI1YzRhZjAzMzIwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5 YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6 MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyMi81M10gb3BlbnNzaC03LjJwMi1zMzkwLWNsb3Nl ZnJvbQotCi0tLS0KLSBvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmMgfCAyNiArKysrKysr KysrKysrKysrKysrKysrKysrKwotIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspCi0K LWRpZmYgLS1naXQgYS9vcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmMgYi9vcGVuYnNkLWNv bXBhdC9ic2QtY2xvc2Vmcm9tLmMKLWluZGV4IDQ5YTRmMzVmZi4uZjYxMTI0NTg1IDEwMDY0NAot LS0tIGEvb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jCi0rKysgYi9vcGVuYnNkLWNvbXBh dC9ic2QtY2xvc2Vmcm9tLmMKLUBAIC0xNDAsNyArMTQwLDMzIEBAIGNsb3NlZnJvbShpbnQgbG93 ZmQpCi0gCSAgICBmZCA9IHN0cnRvbChkZW50LT5kX25hbWUsICZlbmRwLCAxMCk7Ci0gCSAgICBp ZiAoZGVudC0+ZF9uYW1lICE9IGVuZHAgJiYgKmVuZHAgPT0gJ1wwJyAmJgotIAkJZmQgPj0gMCAm JiBmZCA8IElOVF9NQVggJiYgZmQgPj0gbG93ZmQgJiYgZmQgIT0gZGlyZmQoZGlycCkpCi0rI2lm ZGVmIF9fczM5MF9fCi0rCQl7Ci0rCQkgICAgLyoKLSsJCSAgICAgKiB0aGUgZmlsZWRlc2NyaXB0 b3JzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aAotKwkJICAgICAqIHRoZSBkZXZpY2UgZHJpdmVy cyB0byBwcm92aWRlIGhhcmR3YXJlIHN1cHBvcnQKLSsJCSAgICAgKiBzaG91bGQgc3Vydml2ZS4g SEYgPGZyZXVkZUBkZS5pYm0uY29tPgotKwkJICAgICAqLwotKwkJICAgIGNoYXIgZnBhdGhbUEFU SF9NQVhdLCBscGF0aFtQQVRIX01BWF07Ci0rCQkgICAgbGVuID0gc25wcmludGYoZnBhdGgsIHNp emVvZihmcGF0aCksICIlcy8lcyIsCi0rCQkJCSAgIGZkcGF0aCwgZGVudC0+ZF9uYW1lKTsKLSsJ CSAgICBpZiAobGVuID4gMCAmJiAoc2l6ZV90KWxlbiA8PSBzaXplb2YoZnBhdGgpKSB7Ci0rCQkJ bGVuID0gcmVhZGxpbmsoZnBhdGgsIGxwYXRoLCBzaXplb2YobHBhdGgpKTsKLSsJCQlpZiAobGVu ID4gMCkgewotKwkJCSAgICBscGF0aFtsZW5dID0gMDsKLSsJCQkgICAgaWYgKHN0cnN0cihscGF0 aCwgImRldi96OTBjcnlwdCIpCi0rCQkJCXx8IHN0cnN0cihscGF0aCwgImRldi96Y3J5cHQiKQot KwkJCQl8fCBzdHJzdHIobHBhdGgsICJkZXYvcHJhbmRvbSIpCi0rCQkJCXx8IHN0cnN0cihscGF0 aCwgImRldi9zaG0vaWNhc3RhdHMiKSkKLSsJCQkJZmQgPSAtMTsKLSsJCQl9Ci0rCQkgICAgfQot KwkJICAgIGlmIChmZCA+PSAwKQotKwkJCSh2b2lkKSBjbG9zZSgoaW50KSBmZCk7Ci0rCQl9Ci0r I2Vsc2UKLSAJCSh2b2lkKSBjbG9zZSgoaW50KSBmZCk7Ci0rI2VuZGlmCi0gCX0KLSAJKHZvaWQp IGNsb3NlZGlyKGRpcnApOwotIAlyZXR1cm47Ci0tLSAKLTIuNTIuMAotCgpkaWZmIC0tZ2l0IGEv MDAyMy1vcGVuc3NoLTYuN3AxLXNmdHAtZm9yY2UtcGVybWlzc2lvbi5wYXRjaCBiLzAwMjMtb3Bl bnNzaC02LjdwMS1zZnRwLWZvcmNlLXBlcm1pc3Npb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uM2Q3ZjVkMAotLS0gL2Rldi9udWxsCisrKyBiLzAwMjMtb3BlbnNz aC02LjdwMS1zZnRwLWZvcmNlLXBlcm1pc3Npb24ucGF0Y2gKQEAgLTAsMCArMSwxMTYgQEAKK0Zy b20gM2VhNDFlZjliZjJkYTg4MTRhMWY1Nzk4OThhODM5YjUxNTBkN2I2YiBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4K K0RhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAy My81NF0gb3BlbnNzaC02LjdwMS1zZnRwLWZvcmNlLXBlcm1pc3Npb24KKworIyBBZGQgc2Z0cCBv cHRpb24gdG8gZm9yY2UgbW9kZSBvZiBjcmVhdGVkIGZpbGVzICgjMTE5MTA1NSkKKy0tLQorIHNm dHAtc2VydmVyLjggfCAgNyArKysrKysrCisgc2Z0cC1zZXJ2ZXIuYyB8IDI0ICsrKysrKysrKysr KysrKysrKysrKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxl dGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NmdHAtc2VydmVyLjggYi9zZnRwLXNlcnZlci44Citp bmRleCA1MzExYmY5MjkuLjVlNmUzYWE0NCAxMDA2NDQKKy0tLSBhL3NmdHAtc2VydmVyLjgKKysr KyBiL3NmdHAtc2VydmVyLjgKK0BAIC0zOCw2ICszOCw3IEBACisgLk9wIEZsIFAgQXIgZGVuaWVk X3JlcXVlc3RzCisgLk9wIEZsIHAgQXIgYWxsb3dlZF9yZXF1ZXN0cworIC5PcCBGbCB1IEFyIHVt YXNrCisrLk9wIEZsIG0gQXIgZm9yY2VfZmlsZV9wZXJtcworIC5FaworIC5ObQorIC5GbCBRIEFy IHByb3RvY29sX2ZlYXR1cmUKK0BAIC0xMzgsNiArMTM5LDEyIEBAIFNldHMgYW4gZXhwbGljaXQK KyAuWHIgdW1hc2sgMgorIHRvIGJlIGFwcGxpZWQgdG8gbmV3bHktY3JlYXRlZCBmaWxlcyBhbmQg ZGlyZWN0b3JpZXMsIGluc3RlYWQgb2YgdGhlCisgdXNlcidzIGRlZmF1bHQgbWFzay4KKysuSXQg RmwgbSBBciBmb3JjZV9maWxlX3Blcm1zCisrU2V0cyBleHBsaWNpdCBmaWxlIHBlcm1pc3Npb25z IHRvIGJlIGFwcGxpZWQgdG8gbmV3bHktY3JlYXRlZCBmaWxlcyBpbnN0ZWFkCisrb2YgdGhlIGRl ZmF1bHQgb3IgY2xpZW50IHJlcXVlc3RlZCBtb2RlLiAgTnVtZXJpYyB2YWx1ZXMgaW5jbHVkZToK Kys3NzcsIDc1NSwgNzUwLCA2NjYsIDY0NCwgNjQwLCBldGMuICBVc2luZyBib3RoIC1tIGFuZCAt dSBzd2l0Y2hlcyBtYWtlcyB0aGUKKyt1bWFzayAoLXUpIGVmZmVjdGl2ZSBvbmx5IGZvciBuZXds eSBjcmVhdGVkIGRpcmVjdG9yaWVzIGFuZCBleHBsaWNpdCBtb2RlICgtbSkKKytmb3IgbmV3bHkg Y3JlYXRlZCBmaWxlcy4KKyAuRWwKKyAuUHAKKyBPbiBzb21lIHN5c3RlbXMsCitkaWZmIC0tZ2l0 IGEvc2Z0cC1zZXJ2ZXIuYyBiL3NmdHAtc2VydmVyLmMKK2luZGV4IDdhNmU0ZmE4OC4uZDE4YzRh Y2I5IDEwMDY0NAorLS0tIGEvc2Z0cC1zZXJ2ZXIuYworKysrIGIvc2Z0cC1zZXJ2ZXIuYworQEAg LTY4LDYgKzY4LDEwIEBAIHN0cnVjdCBzc2hidWYgKm9xdWV1ZTsKKyAvKiBWZXJzaW9uIG9mIGNs aWVudCAqLworIHN0YXRpYyB1X2ludCB2ZXJzaW9uOworIAorKy8qIEZvcmNlIGZpbGUgcGVybWlz c2lvbnMgKi8KKytpbnQgcGVybWZvcmNlID0gMDsKKytsb25nIHBlcm1mb3JjZW1vZGU7CisrCisg LyogU1NIMl9GWFBfSU5JVCByZWNlaXZlZCAqLworIHN0YXRpYyBpbnQgaW5pdF9kb25lOworIAor QEAgLTczNyw2ICs3NDEsNyBAQCBwcm9jZXNzX29wZW4odWludDMyX3QgaWQpCisgCUF0dHJpYiBh OworIAljaGFyICpuYW1lOworIAlpbnQgciwgaGFuZGxlLCBmZCwgZmxhZ3MsIG1vZGUsIHN0YXR1 cyA9IFNTSDJfRlhfRkFJTFVSRTsKKysJbW9kZV90IG9sZF91bWFzayA9IDA7CisgCisgCWlmICgo ciA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhpcXVldWUsICZuYW1lLCBOVUxMKSkgIT0gMCB8fAorIAkg ICAgKHIgPSBzc2hidWZfZ2V0X3UzMihpcXVldWUsICZwZmxhZ3MpKSAhPSAwIHx8IC8qIHBvcnRh YmxlIGZsYWdzICovCitAQCAtNzQ2LDYgKzc1MSwxMCBAQCBwcm9jZXNzX29wZW4odWludDMyX3Qg aWQpCisgCWRlYnVnMygicmVxdWVzdCAldTogb3BlbiBmbGFncyAlZCIsIGlkLCBwZmxhZ3MpOwor IAlmbGFncyA9IGZsYWdzX2Zyb21fcG9ydGFibGUocGZsYWdzKTsKKyAJbW9kZSA9IChhLmZsYWdz ICYgU1NIMl9GSUxFWEZFUl9BVFRSX1BFUk1JU1NJT05TKSA/IGEucGVybSA6IDA2NjY7CisrCWlm IChwZXJtZm9yY2UgPT0gMSkgeyAgIC8qIEZvcmNlIHBlcm0gaWYgLW0gaXMgc2V0ICovCisrCQlt b2RlID0gcGVybWZvcmNlbW9kZTsKKysJCW9sZF91bWFzayA9IHVtYXNrKDApOyAvKiBzbyB1bWFz ayBkb2VzIG5vdCBpbnRlcmZlcmUgKi8KKysJfQkKKyAJbG9naXQoIm9wZW4gXCIlc1wiIGZsYWdz ICVzIG1vZGUgMCVvIiwKKyAJICAgIG5hbWUsIHN0cmluZ19mcm9tX3BvcnRhYmxlKHBmbGFncyks IG1vZGUpOworIAlpZiAocmVhZG9ubHkgJiYKK0BAIC03NjcsNiArNzc2LDggQEAgcHJvY2Vzc19v cGVuKHVpbnQzMl90IGlkKQorIAkJCX0KKyAJCX0KKyAJfQorKwlpZiAocGVybWZvcmNlID09IDEp CisrCQkodm9pZCkgdW1hc2sob2xkX3VtYXNrKTsgLyogcmVzdG9yZSB1bWFzayB0byBzb21ldGhp bmcgc2FuZSAqLworIAlpZiAoc3RhdHVzICE9IFNTSDJfRlhfT0spCisgCQlzZW5kX3N0YXR1cyhp ZCwgc3RhdHVzKTsKKyAJZnJlZShuYW1lKTsKK0BAIC0xODg2LDcgKzE4OTcsNyBAQCBzZnRwX3Nl cnZlcl91c2FnZSh2b2lkKQorIAlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJ1c2FnZTogJXMgWy1l aFJdIFstZCBzdGFydF9kaXJlY3RvcnldIFstZiBsb2dfZmFjaWxpdHldICIKKyAJICAgICJbLWwg bG9nX2xldmVsXVxuXHRbLVAgZGVuaWVkX3JlcXVlc3RzXSAiCistCSAgICAiWy1wIGFsbG93ZWRf cmVxdWVzdHNdIFstdSB1bWFza11cbiIKKysJICAgICJbLXAgYWxsb3dlZF9yZXF1ZXN0c10gWy11 IHVtYXNrXSBbLW0gZm9yY2VfZmlsZV9wZXJtc11cbiIKKyAJICAgICIgICAgICAgJXMgLVEgcHJv dG9jb2xfZmVhdHVyZVxuIiwKKyAJICAgIF9fcHJvZ25hbWUsIF9fcHJvZ25hbWUpOworIAlleGl0 KDEpOworQEAgLTE5MTAsNyArMTkyMSw3IEBAIHNmdHBfc2VydmVyX21haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2LCBzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBpbnQgcmVzZXRfaGFuZGxlCisgCXB3 ID0gcHdjb3B5KHVzZXJfcHcpOworIAorIAl3aGlsZSAoIXNraXBhcmdzICYmIChjaCA9IGdldG9w dChhcmdjLCBhcmd2LAorLQkgICAgImQ6ZjpsOlA6cDpROnU6Y2VoUiIpKSAhPSAtMSkgeworKwkg ICAgImQ6ZjpsOlA6cDpROnU6bTpjZWhSIikpICE9IC0xKSB7CisgCQlzd2l0Y2ggKGNoKSB7Cisg CQljYXNlICdRJzoKKyAJCQlpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJyZXF1ZXN0cyIpICE9IDAp IHsKK0BAIC0xOTcyLDYgKzE5ODMsMTUgQEAgc2Z0cF9zZXJ2ZXJfbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YsIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHcsIGludCByZXNldF9oYW5kbGUKKyAJCQkJ ZmF0YWwoIkludmFsaWQgdW1hc2sgXCIlc1wiIiwgb3B0YXJnKTsKKyAJCQkodm9pZCl1bWFzaygo bW9kZV90KW1hc2spOworIAkJCWJyZWFrOworKwkJY2FzZSAnbSc6CisrCQkJLyogRm9yY2UgcGVy bWlzc2lvbnMgb24gZmlsZSByZWNlaXZlZCB2aWEgc2Z0cCAqLworKwkJCXBlcm1mb3JjZSA9IDE7 CisrCQkJcGVybWZvcmNlbW9kZSA9IHN0cnRvbChvcHRhcmcsICZjcCwgOCk7CisrCQkJaWYgKHBl cm1mb3JjZW1vZGUgPCAwIHx8IHBlcm1mb3JjZW1vZGUgPiAwNzc3IHx8CisrCQkJICAgICpjcCAh PSAnXDAnIHx8IChwZXJtZm9yY2Vtb2RlID09IDAgJiYKKysJCQkgICAgZXJybm8gIT0gMCkpCisr CQkJCWZhdGFsKCJJbnZhbGlkIGZpbGUgbW9kZSBcIiVzXCIiLCBvcHRhcmcpOworKwkJCWJyZWFr OworIAkJY2FzZSAnaCc6CisgCQlkZWZhdWx0OgorIAkJCXNmdHBfc2VydmVyX3VzYWdlKCk7Cist LSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0IGEvMDAyMy1vcGVuc3NoLTcuNnAxLWNsZWFudXAtc2Vs aW51eC5wYXRjaCBiLzAwMjMtb3BlbnNzaC03LjZwMS1jbGVhbnVwLXNlbGludXgucGF0Y2gKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMTg3NzIuLjAwMDAwMDAKLS0tIGEvMDAyMy1v cGVuc3NoLTcuNnAxLWNsZWFudXAtc2VsaW51eC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMx MyArMCwwIEBACi1Gcm9tIDRjYWNiMWJkYTUxYTJkOTFjZjRjYzFjODA1OGI5ODlkZmMwYzU4Yzgg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJq ZWN0OiBbUEFUQ0ggMjMvNTNdIG9wZW5zc2gtNy42cDEtY2xlYW51cC1zZWxpbnV4Ci0KLS0tLQot IGF1dGgyLXB1YmtleS5jICAgICAgICAgICAgICAgICAgIHwgIDggKysrKy0tCi0gbWlzYy5jICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSArKy0tCi0gbWlzYy5oICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgMiArLQotIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jIHwg NDIgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KLSBvcGVuYnNkLWNvbXBhdC9wb3J0 LWxpbnV4LmggICAgICB8ICA1ICsrLS0KLSBwbGF0Zm9ybS5jICAgICAgICAgICAgICAgICAgICAg ICB8ICA2ICsrKystCi0gc3NoY29ubmVjdC5jICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQot IHNzaGQtYXV0aC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KLSBzc2hkLXNlc3Npb24u YyAgICAgICAgICAgICAgICAgICB8ICA2ICsrKy0tCi0gOSBmaWxlcyBjaGFuZ2VkLCA0NiBpbnNl cnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL2F1dGgyLXB1YmtleS5j IGIvYXV0aDItcHVia2V5LmMKLWluZGV4IGMzMjZhNjliYS4uYjczMDBjYTllIDEwMDY0NAotLS0t IGEvYXV0aDItcHVia2V5LmMKLSsrKyBiL2F1dGgyLXB1YmtleS5jCi1AQCAtNzUsNiArNzUsOCBA QAotIAotIC8qIGltcG9ydCAqLwotIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0rZXh0 ZXJuIGludCBpbmV0ZF9mbGFnOwotK2V4dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OwotIGV4 dGVybiBzdHJ1Y3QgYXV0aG1ldGhvZF9jZmcgbWV0aG9kY2ZnX3B1YmtleTsKLSAKLSBzdGF0aWMg Y2hhciAqCi1AQCAtNDgzLDcgKzQ4NSw4IEBAIG1hdGNoX3ByaW5jaXBhbHNfY29tbWFuZChzdHJ1 Y3QgcGFzc3dkICp1c2VyX3B3LCBjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksCi0gCWlmICgocGlk ID0gc3VicHJvY2VzcygiQXV0aG9yaXplZFByaW5jaXBhbHNDb21tYW5kIiwgY29tbWFuZCwKLSAJ ICAgIGFjLCBhdiwgJmYsCi0gCSAgICBTU0hfU1VCUFJPQ0VTU19TVERPVVRfQ0FQVFVSRXxTU0hf U1VCUFJPQ0VTU19TVERFUlJfRElTQ0FSRCwKLS0JICAgIHJ1bmFzX3B3LCB0ZW1wb3JhcmlseV91 c2VfdWlkLCByZXN0b3JlX3VpZCkpID09IDApCi0rCSAgICBydW5hc19wdywgdGVtcG9yYXJpbHlf dXNlX3VpZCwgcmVzdG9yZV91aWQsCi0rCSAgICBpbmV0ZF9mbGFnLCB0aGVfYXV0aGN0eHQpKSA9 PSAwKQotIAkJZ290byBvdXQ7Ci0gCi0gCXVpZF9zd2FwcGVkID0gMTsKLUBAIC03NTksNyArNzYy LDggQEAgdXNlcl9rZXlfY29tbWFuZF9hbGxvd2VkMihzdHJ1Y3QgcGFzc3dkICp1c2VyX3B3LCBz dHJ1Y3Qgc3Noa2V5ICprZXksCi0gCWlmICgocGlkID0gc3VicHJvY2VzcygiQXV0aG9yaXplZEtl eXNDb21tYW5kIiwgY29tbWFuZCwKLSAJICAgIGFjLCBhdiwgJmYsCi0gCSAgICBTU0hfU1VCUFJP Q0VTU19TVERPVVRfQ0FQVFVSRXxTU0hfU1VCUFJPQ0VTU19TVERFUlJfRElTQ0FSRCwKLS0JICAg IHJ1bmFzX3B3LCB0ZW1wb3JhcmlseV91c2VfdWlkLCByZXN0b3JlX3VpZCkpID09IDApCi0rCSAg ICBydW5hc19wdywgdGVtcG9yYXJpbHlfdXNlX3VpZCwgcmVzdG9yZV91aWQsCi0rCSAgICBpbmV0 ZF9mbGFnLCB0aGVfYXV0aGN0eHQpKSA9PSAwKQotIAkJZ290byBvdXQ7Ci0gCi0gCXVpZF9zd2Fw cGVkID0gMTsKLWRpZmYgLS1naXQgYS9taXNjLmMgYi9taXNjLmMKLWluZGV4IDdlMjdhMzhkMS4u MmZkMTQxNTlkIDEwMDY0NAotLS0tIGEvbWlzYy5jCi0rKysgYi9taXNjLmMKLUBAIC0yNzg4LDcg KzI3ODgsOCBAQCBzdGRmZF9kZXZudWxsKGludCBkb19zdGRpbiwgaW50IGRvX3N0ZG91dCwgaW50 IGRvX3N0ZGVycikKLSBwaWRfdAotIHN1YnByb2Nlc3MoY29uc3QgY2hhciAqdGFnLCBjb25zdCBj aGFyICpjb21tYW5kLAotICAgICBpbnQgYWMsIGNoYXIgKiphdiwgRklMRSAqKmNoaWxkLCB1X2lu dCBmbGFncywKLS0gICAgc3RydWN0IHBhc3N3ZCAqcHcsIHByaXZkcm9wX2ZuICpkcm9wX3ByaXZz LCBwcml2cmVzdG9yZV9mbiAqcmVzdG9yZV9wcml2cykKLSsgICAgc3RydWN0IHBhc3N3ZCAqcHcs IHByaXZkcm9wX2ZuICpkcm9wX3ByaXZzLAotKyAgICBwcml2cmVzdG9yZV9mbiAqcmVzdG9yZV9w cml2cywgaW50IGluZXRkLCB2b2lkICp0aGVfYXV0aGN0eHQpCi0gewotIAlGSUxFICpmID0gTlVM TDsKLSAJc3RydWN0IHN0YXQgc3Q7Ci1AQCAtMjkyMiw3ICsyOTIzLDcgQEAgc3VicHJvY2Vzcyhj b25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmNvbW1hbmQsCi0gCQkJX2V4aXQoMSk7Ci0gCQl9 Ci0gI2lmZGVmIFdJVEhfU0VMSU5VWAotLQkJaWYgKHNzaGRfc2VsaW51eF9zZXR1cF9lbnZfdmFy aWFibGVzKCkgPCAwKSB7Ci0rCQlpZiAoc3NoZF9zZWxpbnV4X3NldHVwX2Vudl92YXJpYWJsZXMo aW5ldGQsIHRoZV9hdXRoY3R4dCkgPCAwKSB7Ci0gCQkJZXJyb3IgKCJmYWlsZWQgdG8gY29weSBl bnZpcm9ubWVudDogICVzIiwKLSAJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAJCQlfZXhpdCgx MjcpOwotZGlmZiAtLWdpdCBhL21pc2MuaCBiL21pc2MuaAotaW5kZXggZjNjNWExOGM2Li44Y2Rm ZDdjZWMgMTAwNjQ0Ci0tLS0gYS9taXNjLmgKLSsrKyBiL21pc2MuaAotQEAgLTEyNCw3ICsxMjQs NyBAQCB0eXBlZGVmIHZvaWQgcHJpdnJlc3RvcmVfZm4odm9pZCk7Ci0gI2RlZmluZQlTU0hfU1VC UFJPQ0VTU19VTlNBRkVfUEFUSAkoMTw8MykJLyogRG9uJ3QgY2hlY2sgZm9yIHNhZmUgY21kICov Ci0gI2RlZmluZQlTU0hfU1VCUFJPQ0VTU19QUkVTRVJWRV9FTlYJKDE8PDQpCS8qIEtlZXAgcGFy ZW50IGVudmlyb25tZW50ICovCi0gcGlkX3Qgc3VicHJvY2Vzcyhjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwgaW50LCBjaGFyICoqLCBGSUxFICoqLCB1X2ludCwKLS0gICAgc3RydWN0IHBhc3N3 ZCAqLCBwcml2ZHJvcF9mbiAqLCBwcml2cmVzdG9yZV9mbiAqKTsKLSsgICAgc3RydWN0IHBhc3N3 ZCAqLCBwcml2ZHJvcF9mbiAqLCBwcml2cmVzdG9yZV9mbiAqLCBpbnQsIHZvaWQgKik7Ci0gCi0g dHlwZWRlZiBzdHJ1Y3QgYXJnbGlzdCBhcmdsaXN0OwotIHN0cnVjdCBhcmdsaXN0IHsKLWRpZmYg LS1naXQgYS9vcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LXNzaGQuYyBiL29wZW5ic2QtY29tcGF0 L3BvcnQtbGludXgtc3NoZC5jCi1pbmRleCA0ZDU2NzQ1ZjcuLmFiMDgzYTYzNyAxMDA2NDQKLS0t LSBhL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXgtc3NoZC5jCi0rKysgYi9vcGVuYnNkLWNvbXBh dC9wb3J0LWxpbnV4LXNzaGQuYwotQEAgLTQ4LDEwICs0OCw2IEBACi0gI2luY2x1ZGUgPHVuaXN0 ZC5oPgotICNlbmRpZgotIAotLWV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0tZXh0ZXJu IEF1dGhjdHh0ICp0aGVfYXV0aGN0eHQ7Ci0tZXh0ZXJuIGludCBpbmV0ZF9mbGFnOwotLQotIC8q IFdyYXBwZXIgYXJvdW5kIGlzX3NlbGludXhfZW5hYmxlZCgpIHRvIGxvZyBpdHMgcmV0dXJuIHZh bHVlIG9uY2Ugb25seSAqLwotIGludAotIHNzaGRfc2VsaW51eF9lbmFibGVkKHZvaWQpCi1AQCAt MjIxLDcgKzIxNyw4IEBAIGdldF91c2VyX2NvbnRleHQoY29uc3QgY2hhciAqc2VuYW1lLCBjb25z dCBjaGFyICpyb2xlLCBjb25zdCBjaGFyICpsdmwsCi0gfQotIAotIHN0YXRpYyB2b2lkCi0tc3No X3NlbGludXhfZ2V0X3JvbGVfbGV2ZWwoY2hhciAqKnJvbGUsIGNvbnN0IGNoYXIgKipsZXZlbCkK LStzc2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbChjaGFyICoqcm9sZSwgY29uc3QgY2hhciAqKmxl dmVsLAotKyAgICBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0KQotIHsKLSAJKnJvbGUgPSBOVUxMOwot IAkqbGV2ZWwgPSBOVUxMOwotQEAgLTIzOSw4ICsyMzYsOCBAQCBzc2hfc2VsaW51eF9nZXRfcm9s ZV9sZXZlbChjaGFyICoqcm9sZSwgY29uc3QgY2hhciAqKmxldmVsKQotIAotIC8qIFJldHVybiB0 aGUgZGVmYXVsdCBzZWN1cml0eSBjb250ZXh0IGZvciB0aGUgZ2l2ZW4gdXNlcm5hbWUgKi8KLSBz dGF0aWMgaW50Ci0tc3NoZF9zZWxpbnV4X2dldGN0eGJ5bmFtZShjaGFyICpwd25hbWUsCi0tCXNl Y3VyaXR5X2NvbnRleHRfdCAqZGVmYXVsdF9zYywgc2VjdXJpdHlfY29udGV4dF90ICp1c2VyX3Nj KQotK3NzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUoY2hhciAqcHduYW1lLCBzZWN1cml0eV9jb250 ZXh0X3QgKmRlZmF1bHRfc2MsCi0rICAgIHNlY3VyaXR5X2NvbnRleHRfdCAqdXNlcl9zYywgaW50 IGluZXRkLCBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0KQotIHsKLSAJY2hhciAqc2VuYW1lLCAqbHZs OwotIAljaGFyICpyb2xlOwotQEAgLTI0OCw3ICsyNDUsNyBAQCBzc2hkX3NlbGludXhfZ2V0Y3R4 YnluYW1lKGNoYXIgKnB3bmFtZSwKLSAJaW50IHIgPSAwOwotIAljb250ZXh0X3QgY29uID0gTlVM TDsKLSAKLS0Jc3NoX3NlbGludXhfZ2V0X3JvbGVfbGV2ZWwoJnJvbGUsICZyZXFsdmwpOwotKwlz c2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbCgmcm9sZSwgJnJlcWx2bCwgdGhlX2F1dGhjdHh0KTsK LSAKLSAjaWZkZWYgSEFWRV9HRVRTRVVTRVJCWU5BTUUKLSAJaWYgKChyPWdldHNldXNlcmJ5bmFt ZShwd25hbWUsICZzZW5hbWUsICZsdmwpKSAhPSAwKSB7Ci1AQCAtMjcwLDcgKzI2Nyw3IEBAIHNz aGRfc2VsaW51eF9nZXRjdHhieW5hbWUoY2hhciAqcHduYW1lLAotIAotIAlpZiAociA9PSAwKSB7 Ci0gCQkvKiBJZiBsYXVuY2hlZCBmcm9tIHhpbmV0ZCwgd2UgbXVzdCB1c2UgY3VycmVudCBsZXZl bCAqLwotLQkJaWYgKGluZXRkX2ZsYWcpIHsKLSsJCWlmIChpbmV0ZCkgewotIAkJCXNlY3VyaXR5 X2NvbnRleHRfdCBzc2hkc2M9TlVMTDsKLSAKLSAJCQlpZiAoZ2V0Y29uX3Jhdygmc3NoZHNjKSA8 IDApCi1AQCAtMzMxLDcgKzMyOCw4IEBAIHNzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUoY2hhciAq cHduYW1lLAotIAotIC8qIFNldHVwIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgcGFtX3NlbGlu dXggKi8KLSBzdGF0aWMgaW50Ci0tc3NoZF9zZWxpbnV4X3NldHVwX3ZhcmlhYmxlcyhpbnQoKnNl dF9pdCkoY2hhciAqLCBjb25zdCBjaGFyICopKQotK3NzaGRfc2VsaW51eF9zZXR1cF92YXJpYWJs ZXMoaW50KCpzZXRfaXQpKGNoYXIgKiwgY29uc3QgY2hhciAqKSwgaW50IGluZXRkLAotKyAgICBB dXRoY3R4dCAqdGhlX2F1dGhjdHh0KQotIHsKLSAJY29uc3QgY2hhciAqcmVxbHZsOwotIAljaGFy ICpyb2xlOwotQEAgLTM0MCwxMSArMzM4LDExIEBAIHNzaGRfc2VsaW51eF9zZXR1cF92YXJpYWJs ZXMoaW50KCpzZXRfaXQpKGNoYXIgKiwgY29uc3QgY2hhciAqKSkKLSAKLSAJZGVidWczX2YoInNl dHRpbmcgZXhlY3V0aW9uIGNvbnRleHQiKTsKLSAKLS0Jc3NoX3NlbGludXhfZ2V0X3JvbGVfbGV2 ZWwoJnJvbGUsICZyZXFsdmwpOwotKwlzc2hfc2VsaW51eF9nZXRfcm9sZV9sZXZlbCgmcm9sZSwg JnJlcWx2bCwgdGhlX2F1dGhjdHh0KTsKLSAKLSAJcnYgPSBzZXRfaXQoIlNFTElOVVhfUk9MRV9S RVFVRVNURUQiLCByb2xlID8gcm9sZSA6ICIiKTsKLSAKLS0JaWYgKGluZXRkX2ZsYWcpIHsKLSsJ aWYgKGluZXRkKSB7Ci0gCQl1c2VfY3VycmVudCA9ICIxIjsKLSAJfSBlbHNlIHsKLSAJCXVzZV9j dXJyZW50ID0gIiI7Ci1AQCAtMzYwLDkgKzM1OCwxMCBAQCBzc2hkX3NlbGludXhfc2V0dXBfdmFy aWFibGVzKGludCgqc2V0X2l0KShjaGFyICosIGNvbnN0IGNoYXIgKikpCi0gfQotIAotIHN0YXRp YyBpbnQKLS1zc2hkX3NlbGludXhfc2V0dXBfcGFtX3ZhcmlhYmxlcyh2b2lkKQotK3NzaGRfc2Vs aW51eF9zZXR1cF9wYW1fdmFyaWFibGVzKGludCBpbmV0ZCwKLSsgICAgaW50KHBhbV9zZXRlbnYp KGNoYXIgKiwgY29uc3QgY2hhciAqKSwgQXV0aGN0eHQgKnRoZV9hdXRoY3R4dCkKLSB7Ci0tCXJl dHVybiBzc2hkX3NlbGludXhfc2V0dXBfdmFyaWFibGVzKGRvX3BhbV9wdXRlbnYpOwotKwlyZXR1 cm4gc3NoZF9zZWxpbnV4X3NldHVwX3ZhcmlhYmxlcyhwYW1fc2V0ZW52LCBpbmV0ZCwgdGhlX2F1 dGhjdHh0KTsKLSB9Ci0gCi0gc3RhdGljIGludAotQEAgLTM3MiwyNSArMzcxLDI4IEBAIGRvX3Nl dGVudihjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLSB9Ci0gCi0gaW50Ci0tc3NoZF9z ZWxpbnV4X3NldHVwX2Vudl92YXJpYWJsZXModm9pZCkKLStzc2hkX3NlbGludXhfc2V0dXBfZW52 X3ZhcmlhYmxlcyhpbnQgaW5ldGQsIHZvaWQgKnRoZV9hdXRoY3R4dCkKLSB7Ci0tCXJldHVybiBz c2hkX3NlbGludXhfc2V0dXBfdmFyaWFibGVzKGRvX3NldGVudik7Ci0rCUF1dGhjdHh0ICphdXRo Y3R4dCA9IChBdXRoY3R4dCAqKSB0aGVfYXV0aGN0eHQ7Ci0rCXJldHVybiBzc2hkX3NlbGludXhf c2V0dXBfdmFyaWFibGVzKGRvX3NldGVudiwgaW5ldGQsIGF1dGhjdHh0KTsKLSB9Ci0gCi0gLyog U2V0IHRoZSBleGVjdXRpb24gY29udGV4dCB0byB0aGUgZGVmYXVsdCBmb3IgdGhlIHNwZWNpZmll ZCB1c2VyICovCi0gdm9pZAotLXNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAq cHduYW1lKQotK3NzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAqcHduYW1lLCBp bnQgaW5ldGQsCi0rICAgIGludChwYW1fc2V0ZW52KShjaGFyICosIGNvbnN0IGNoYXIgKiksIHZv aWQgKnRoZV9hdXRoY3R4dCwgaW50IHVzZV9wYW0pCi0gewotIAlzZWN1cml0eV9jb250ZXh0X3Qg dXNlcl9jdHggPSBOVUxMOwotIAlpbnQgciA9IDA7Ci0gCXNlY3VyaXR5X2NvbnRleHRfdCBkZWZh dWx0X2N0eCA9IE5VTEw7Ci0rCUF1dGhjdHh0ICphdXRoY3R4dCA9IChBdXRoY3R4dCAqKSB0aGVf YXV0aGN0eHQ7Ci0gCi0gCWlmICghc3NoZF9zZWxpbnV4X2VuYWJsZWQoKSkKLSAJCXJldHVybjsK LSAKLS0JaWYgKG9wdGlvbnMudXNlX3BhbSkgewotKwlpZiAodXNlX3BhbSkgewotIAkJLyogZG8g bm90IGNvbXB1dGUgY29udGV4dCwganVzdCBzZXR1cCBlbnZpcm9ubWVudCBmb3IgcGFtX3NlbGlu dXggKi8KLS0JCWlmIChzc2hkX3NlbGludXhfc2V0dXBfcGFtX3ZhcmlhYmxlcygpKSB7Ci0rCQlp ZiAoc3NoZF9zZWxpbnV4X3NldHVwX3BhbV92YXJpYWJsZXMoaW5ldGQsIHBhbV9zZXRlbnYsIGF1 dGhjdHh0KSkgewotIAkJCXN3aXRjaCAoc2VjdXJpdHlfZ2V0ZW5mb3JjZSgpKSB7Ci0gCQkJY2Fz ZSAtMToKLSAJCQkJZmF0YWxfZigic2VjdXJpdHlfZ2V0ZW5mb3JjZSgpIGZhaWxlZCIpOwotQEAg LTQwNiw3ICs0MDgsNyBAQCBzc2hkX3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KGNoYXIgKnB3 bmFtZSkKLSAKLSAJZGVidWczX2YoInNldHRpbmcgZXhlY3V0aW9uIGNvbnRleHQiKTsKLSAKLS0J ciA9IHNzaGRfc2VsaW51eF9nZXRjdHhieW5hbWUocHduYW1lLCAmZGVmYXVsdF9jdHgsICZ1c2Vy X2N0eCk7Ci0rCXIgPSBzc2hkX3NlbGludXhfZ2V0Y3R4YnluYW1lKHB3bmFtZSwgJmRlZmF1bHRf Y3R4LCAmdXNlcl9jdHgsIGluZXRkLCBhdXRoY3R4dCk7Ci0gCWlmIChyID49IDApIHsKLSAJCXIg PSBzZXRleGVjY29uKHVzZXJfY3R4KTsKLSAJCWlmIChyIDwgMCkgewotZGlmZiAtLWdpdCBhL29w ZW5ic2QtY29tcGF0L3BvcnQtbGludXguaCBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaAot aW5kZXggYzAwNDA3MWQxLi4yNmM1Zjc3M2IgMTAwNjQ0Ci0tLS0gYS9vcGVuYnNkLWNvbXBhdC9w b3J0LWxpbnV4LmgKLSsrKyBiL29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaAotQEAgLTIzLDgg KzIzLDkgQEAgdm9pZCBzc2hfc2VsaW51eF9zZXR1cF9wdHkoY2hhciAqLCBjb25zdCBjaGFyICop OwotIHZvaWQgc3NoX3NlbGludXhfY2hhbmdlX2NvbnRleHQoY29uc3QgY2hhciAqKTsKLSB2b2lk IHNzaF9zZWxpbnV4X3NldGZzY3JlYXRlY29uKGNvbnN0IGNoYXIgKik7Ci0gCi0tdm9pZCBzc2hk X3NlbGludXhfc2V0dXBfZXhlY19jb250ZXh0KGNoYXIgKik7Ci0taW50IHNzaGRfc2VsaW51eF9z ZXR1cF9lbnZfdmFyaWFibGVzKHZvaWQpOwotK2ludCBzc2hkX3NlbGludXhfZW5hYmxlZCh2b2lk KTsKLSt2b2lkIHNzaGRfc2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQoY2hhciAqLCBpbnQsIGlu dChjaGFyICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKiwgaW50KTsKLStpbnQgc3NoZF9zZWxpbnV4 X3NldHVwX2Vudl92YXJpYWJsZXMoaW50IGluZXRkLCB2b2lkICopOwotICNlbmRpZgotIAotICNp ZmRlZiBMSU5VWF9PT01fQURKVVNUCi1kaWZmIC0tZ2l0IGEvcGxhdGZvcm0uYyBiL3BsYXRmb3Jt LmMKLWluZGV4IGM5MmEwY2JhNi4uNjZkMGMyYTZiIDEwMDY0NAotLS0tIGEvcGxhdGZvcm0uYwot KysrIGIvcGxhdGZvcm0uYwotQEAgLTMzLDYgKzMzLDggQEAKLSAjaW5jbHVkZSAib3BlbmJzZC1j b21wYXQvb3BlbmJzZC1jb21wYXQuaCIKLSAKLSBleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25z OwotK2V4dGVybiBpbnQgaW5ldGRfZmxhZzsKLStleHRlcm4gQXV0aGN0eHQgKnRoZV9hdXRoY3R4 dDsKLSAKLSAvKiByZXR1cm4gMSBpZiB3ZSBhcmUgcnVubmluZyB3aXRoIHByaXZpbGVnZSB0byBz d2FwIFVJRHMsIDAgb3RoZXJ3aXNlICovCi0gaW50Ci1AQCAtMTQwLDcgKzE0Miw5IEBAIHBsYXRm b3JtX3NldHVzZXJjb250ZXh0X3Bvc3RfZ3JvdXBzKHN0cnVjdCBwYXNzd2QgKnB3KQotIAl9Ci0g I2VuZGlmIC8qIEhBVkVfU0VUUENSRUQgKi8KLSAjaWZkZWYgV0lUSF9TRUxJTlVYCi0tCXNzaGRf c2VsaW51eF9zZXR1cF9leGVjX2NvbnRleHQocHctPnB3X25hbWUpOwotKwlzc2hkX3NlbGludXhf c2V0dXBfZXhlY19jb250ZXh0KHB3LT5wd19uYW1lLAotKwkgICAgaW5ldGRfZmxhZywgZG9fcGFt X3B1dGVudiwgdGhlX2F1dGhjdHh0LAotKwkgICAgb3B0aW9ucy51c2VfcGFtKTsKLSAjZW5kaWYK LSB9Ci0gCi1kaWZmIC0tZ2l0IGEvc3NoY29ubmVjdC5jIGIvc3NoY29ubmVjdC5jCi1pbmRleCA5 MTJhNTIwYzUuLmJhYmU0YTk4MiAxMDA2NDQKLS0tLSBhL3NzaGNvbm5lY3QuYwotKysrIGIvc3No Y29ubmVjdC5jCi1AQCAtOTE3LDcgKzkxNyw3IEBAIGxvYWRfaG9zdGtleXNfY29tbWFuZChzdHJ1 Y3QgaG9zdGtleXMgKmhvc3RrZXlzLCBjb25zdCBjaGFyICpjb21tYW5kX3RlbXBsYXRlLAotIAot IAlpZiAoKHBpZCA9IHN1YnByb2Nlc3ModGFnLCBjb21tYW5kLCBhYywgYXYsICZmLAotIAkgICAg U1NIX1NVQlBST0NFU1NfU1RET1VUX0NBUFRVUkV8U1NIX1NVQlBST0NFU1NfVU5TQUZFX1BBVEh8 Ci0tCSAgICBTU0hfU1VCUFJPQ0VTU19QUkVTRVJWRV9FTlYsIE5VTEwsIE5VTEwsIE5VTEwpKSA9 PSAwKQotKwkgICAgU1NIX1NVQlBST0NFU1NfUFJFU0VSVkVfRU5WLCBOVUxMLCBOVUxMLCBOVUxM LCAwLCBOVUxMKSkgPT0gMCkKLSAJCWdvdG8gb3V0OwotIAotIAlsb2FkX2hvc3RrZXlzX2ZpbGUo aG9zdGtleXMsIGhvc3RmaWxlX2hvc3RuYW1lLCB0YWcsIGYsIDEpOwotZGlmZiAtLWdpdCBhL3Nz aGQtYXV0aC5jIGIvc3NoZC1hdXRoLmMKLWluZGV4IDVhNGVlNzMzYy4uZjNjMzhhN2QxIDEwMDY0 NAotLS0tIGEvc3NoZC1hdXRoLmMKLSsrKyBiL3NzaGQtYXV0aC5jCi1AQCAtMTIwLDcgKzEyMCw3 IEBAIGNoYXIgKmNvbmZpZ19maWxlX25hbWUgPSBfUEFUSF9TRVJWRVJfQ09ORklHX0ZJTEU7Ci0g aW50IGRlYnVnX2ZsYWcgPSAwOwotIAotIC8qIEZsYWcgaW5kaWNhdGluZyB0aGF0IHRoZSBkYWVt b24gaXMgYmVpbmcgc3RhcnRlZCBmcm9tIGluZXRkLiAqLwotLXN0YXRpYyBpbnQgaW5ldGRfZmxh ZyA9IDA7Ci0raW50IGluZXRkX2ZsYWcgPSAwOwotIAotIC8qIFNhdmVkIGFyZ3VtZW50cyB0byBt YWluKCkuICovCi0gc3RhdGljIGNoYXIgKipzYXZlZF9hcmd2OwotZGlmZiAtLWdpdCBhL3NzaGQt c2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKLWluZGV4IDRhNWVhYTFmZi4uZDZiZWNlOTQxIDEw MDY0NAotLS0tIGEvc3NoZC1zZXNzaW9uLmMKLSsrKyBiL3NzaGQtc2Vzc2lvbi5jCi1AQCAtMTMw LDcgKzEzMCw3IEBAIGNoYXIgKmNvbmZpZ19maWxlX25hbWUgPSBfUEFUSF9TRVJWRVJfQ09ORklH X0ZJTEU7Ci0gaW50IGRlYnVnX2ZsYWcgPSAwOwotIAotIC8qIEZsYWcgaW5kaWNhdGluZyB0aGF0 IHRoZSBkYWVtb24gaXMgYmVpbmcgc3RhcnRlZCBmcm9tIGluZXRkLiAqLwotLXN0YXRpYyBpbnQg aW5ldGRfZmxhZyA9IDA7Ci0raW50IGluZXRkX2ZsYWcgPSAwOwotIAotIC8qIGRlYnVnIGdvZXMg dG8gc3RkZXJyIHVubGVzcyBpbmV0ZF9mbGFnIGlzIHNldCAqLwotIHN0YXRpYyBpbnQgbG9nX3N0 ZGVyciA9IDA7Ci1AQCAtMTMzNyw3ICsxMzM3LDkgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikK LSAJfQotICNlbmRpZgotICNpZmRlZiBXSVRIX1NFTElOVVgKLS0Jc3NoZF9zZWxpbnV4X3NldHVw X2V4ZWNfY29udGV4dChhdXRoY3R4dC0+cHctPnB3X25hbWUpOwotKwlzc2hkX3NlbGludXhfc2V0 dXBfZXhlY19jb250ZXh0KGF1dGhjdHh0LT5wdy0+cHdfbmFtZSwKLSsJICAgIGluZXRkX2ZsYWcs IGRvX3BhbV9wdXRlbnYsIHRoZV9hdXRoY3R4dCwKLSsJICAgIG9wdGlvbnMudXNlX3BhbSk7Ci0g I2VuZGlmCi0gI2lmZGVmIFVTRV9QQU0KLSAJaWYgKG9wdGlvbnMudXNlX3BhbSkgewotLS0gCi0y LjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAwMjQtb3BlbnNzaC03LjJwMi1zMzkwLWNsb3NlZnJvbS5w YXRjaCBiLzAwMjQtb3BlbnNzaC03LjJwMi1zMzkwLWNsb3NlZnJvbS5wYXRjaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNmNGYzCi0tLSAvZGV2L251bGwKKysrIGIvMDAy NC1vcGVuc3NoLTcuMnAyLXMzOTAtY2xvc2Vmcm9tLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zy b20gNmY5MDU5ODc2ZDQzMjNkZTMzY2E3MDZkYTBlODgzZDE0Mjc1N2Y0NiBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4K K0RhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAy NC81NF0gb3BlbnNzaC03LjJwMi1zMzkwLWNsb3NlZnJvbQorCisjIG1ha2UgczM5MCB1c2UgL2Rl di8gY3J5cHRvIGRldmljZXMgLS0gaWdub3JlIGNsb3NlZnJvbQorLS0tCisgb3BlbmJzZC1jb21w YXQvYnNkLWNsb3NlZnJvbS5jIHwgMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZp bGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvb3BlbmJzZC1jb21w YXQvYnNkLWNsb3NlZnJvbS5jIGIvb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jCitpbmRl eCA0OWE0ZjM1ZmYuLmY2MTEyNDU4NSAxMDA2NDQKKy0tLSBhL29wZW5ic2QtY29tcGF0L2JzZC1j bG9zZWZyb20uYworKysrIGIvb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jCitAQCAtMTQw LDcgKzE0MCwzMyBAQCBjbG9zZWZyb20oaW50IGxvd2ZkKQorIAkgICAgZmQgPSBzdHJ0b2woZGVu dC0+ZF9uYW1lLCAmZW5kcCwgMTApOworIAkgICAgaWYgKGRlbnQtPmRfbmFtZSAhPSBlbmRwICYm ICplbmRwID09ICdcMCcgJiYKKyAJCWZkID49IDAgJiYgZmQgPCBJTlRfTUFYICYmIGZkID49IGxv d2ZkICYmIGZkICE9IGRpcmZkKGRpcnApKQorKyNpZmRlZiBfX3MzOTBfXworKwkJeworKwkJICAg IC8qCisrCQkgICAgICogdGhlIGZpbGVkZXNjcmlwdG9ycyB1c2VkIHRvIGNvbW11bmljYXRlIHdp dGgKKysJCSAgICAgKiB0aGUgZGV2aWNlIGRyaXZlcnMgdG8gcHJvdmlkZSBoYXJkd2FyZSBzdXBw b3J0CisrCQkgICAgICogc2hvdWxkIHN1cnZpdmUuIEhGIDxmcmV1ZGVAZGUuaWJtLmNvbT4KKysJ CSAgICAgKi8KKysJCSAgICBjaGFyIGZwYXRoW1BBVEhfTUFYXSwgbHBhdGhbUEFUSF9NQVhdOwor KwkJICAgIGxlbiA9IHNucHJpbnRmKGZwYXRoLCBzaXplb2YoZnBhdGgpLCAiJXMvJXMiLAorKwkJ CQkgICBmZHBhdGgsIGRlbnQtPmRfbmFtZSk7CisrCQkgICAgaWYgKGxlbiA+IDAgJiYgKHNpemVf dClsZW4gPD0gc2l6ZW9mKGZwYXRoKSkgeworKwkJCWxlbiA9IHJlYWRsaW5rKGZwYXRoLCBscGF0 aCwgc2l6ZW9mKGxwYXRoKSk7CisrCQkJaWYgKGxlbiA+IDApIHsKKysJCQkgICAgbHBhdGhbbGVu XSA9IDA7CisrCQkJICAgIGlmIChzdHJzdHIobHBhdGgsICJkZXYvejkwY3J5cHQiKQorKwkJCQl8 fCBzdHJzdHIobHBhdGgsICJkZXYvemNyeXB0IikKKysJCQkJfHwgc3Ryc3RyKGxwYXRoLCAiZGV2 L3ByYW5kb20iKQorKwkJCQl8fCBzdHJzdHIobHBhdGgsICJkZXYvc2htL2ljYXN0YXRzIikpCisr CQkJCWZkID0gLTE7CisrCQkJfQorKwkJICAgIH0KKysJCSAgICBpZiAoZmQgPj0gMCkKKysJCQko dm9pZCkgY2xvc2UoKGludCkgZmQpOworKwkJfQorKyNlbHNlCisgCQkodm9pZCkgY2xvc2UoKGlu dCkgZmQpOworKyNlbmRpZgorIAl9CisgCSh2b2lkKSBjbG9zZWRpcihkaXJwKTsKKyAJcmV0dXJu OworLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwMjQtb3BlbnNzaC03LjVwMS1zYW5kYm94 LnBhdGNoIGIvMDAyNC1vcGVuc3NoLTcuNXAxLXNhbmRib3gucGF0Y2gKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDMyYjU2ZGIuLjAwMDAwMDAKLS0tIGEvMDAyNC1vcGVuc3NoLTcuNXAx LXNhbmRib3gucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1Gcm9tIDUwMzI5 N2VjNmY2ZWVmM2JiNDkwNjI3MWQxNzBmYWI4NDhlMjcyOTggTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBU aHUsIDE1IE1heSAyMDI1IDEzOjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMjQvNTNdIG9w ZW5zc2gtNy41cDEtc2FuZGJveAotCi0tLS0KLSBzYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMgfCAy MSArKysrKysrKysrKysrKysrKysrKysKLSAxIGZpbGUgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygr KQotCi1kaWZmIC0tZ2l0IGEvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jIGIvc2FuZGJveC1zZWNj b21wLWZpbHRlci5jCi1pbmRleCBhMDY5MmRkMmYuLmUwZjJkNDI4OSAxMDA2NDQKLS0tLSBhL3Nh bmRib3gtc2VjY29tcC1maWx0ZXIuYwotKysrIGIvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jCi1A QCAtMzA1LDYgKzMwNSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19maWx0ZXIgcHJlYXV0 aF9pbnNuc1tdID0gewotICNpZmRlZiBfX05SX2V4aXRfZ3JvdXAKLSAJU0NfQUxMT1coX19OUl9l eGl0X2dyb3VwKSwKLSAjZW5kaWYKLSsjaWYgZGVmaW5lZChfX05SX2Zsb2NrKSAmJiBkZWZpbmVk KF9fczM5MF9fKQotKwlTQ19BTExPVyhfX05SX2Zsb2NrKSwKLSsjZW5kaWYKLSAjaWZkZWYgX19O Ul9mdXRleAotIAlTQ19GVVRFWChfX05SX2Z1dGV4KSwKLSAjZW5kaWYKLUBAIC0zMjMsNiArMzI2 LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19maWx0ZXIgcHJlYXV0aF9pbnNuc1tdID0g ewotICNpZmRlZiBfX05SX2dldHBpZAotIAlTQ19BTExPVyhfX05SX2dldHBpZCksCi0gI2VuZGlm Ci0rI2lmZGVmIF9fTlJfZ2V0dWlkCi0rCVNDX0FMTE9XKF9fTlJfZ2V0dWlkKSwKLSsjZW5kaWYK LSsjaWZkZWYgX19OUl9nZXR1aWQzMgotKwlTQ19BTExPVyhfX05SX2dldHVpZDMyKSwKLSsjZW5k aWYKLSsjaWZkZWYgX19OUl9nZXRldWlkCi0rCVNDX0FMTE9XKF9fTlJfZ2V0ZXVpZCksCi0rI2Vu ZGlmCi0rI2lmZGVmIF9fTlJfZ2V0ZXVpZDMyCi0rCVNDX0FMTE9XKF9fTlJfZ2V0ZXVpZDMyKSwK LSsjZW5kaWYKLSsjaWZkZWYgX19OUl9nZXR0aWQKLSsJU0NfQUxMT1coX19OUl9nZXR0aWQpLAot KyNlbmRpZgotICNpZmRlZiBfX05SX2dldHJhbmRvbQotIAlTQ19BTExPVyhfX05SX2dldHJhbmRv bSksCi0gI2VuZGlmCi1AQCAtMzMyLDYgKzM1MCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29j a19maWx0ZXIgcHJlYXV0aF9pbnNuc1tdID0gewotICNpZmRlZiBfX05SX2dldHRpbWVvZmRheQot IAlTQ19BTExPVyhfX05SX2dldHRpbWVvZmRheSksCi0gI2VuZGlmCi0rI2lmIGRlZmluZWQoX19O Ul9pcGMpICYmIGRlZmluZWQoX19zMzkwX18pCi0rCVNDX0FMTE9XKF9fTlJfaXBjKSwKLSsjZW5k aWYKLSAjaWZkZWYgX19OUl9nZXR1aWQKLSAJU0NfQUxMT1coX19OUl9nZXR1aWQpLAotICNlbmRp ZgotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAwMjUtb3BlbnNzaC03LjVwMS1zYW5kYm94 LnBhdGNoIGIvMDAyNS1vcGVuc3NoLTcuNXAxLXNhbmRib3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhMjRhNAotLS0gL2Rldi9udWxsCisrKyBiLzAwMjUtb3Bl bnNzaC03LjVwMS1zYW5kYm94LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gMTY0YTE1OTll YTdmMTQ3OTE5ZjZjOTI1ZWUxN2MyMTgyMGI5ZTdlZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK K0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwg MTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyNS81NF0gb3BlbnNz aC03LjVwMS1zYW5kYm94CisKKyMgU2FuZGJveCBhZGp1c3RtZW50cyBmb3IgczM5MCBhbmQgYXVk aXQKKy0tLQorIHNhbmRib3gtc2VjY29tcC1maWx0ZXIuYyB8IDIxICsrKysrKysrKysrKysrKysr KysrKworIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9z YW5kYm94LXNlY2NvbXAtZmlsdGVyLmMgYi9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMKK2luZGV4 IDdiMjQ0NDkzMC4uZTIxMDQ4ZjNhIDEwMDY0NAorLS0tIGEvc2FuZGJveC1zZWNjb21wLWZpbHRl ci5jCisrKysgYi9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMKK0BAIC0zMDUsNiArMzA1LDkgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciBwcmVhdXRoX2luc25zW10gPSB7CisgI2lm ZGVmIF9fTlJfZXhpdF9ncm91cAorIAlTQ19BTExPVyhfX05SX2V4aXRfZ3JvdXApLAorICNlbmRp ZgorKyNpZiBkZWZpbmVkKF9fTlJfZmxvY2spICYmIGRlZmluZWQoX19zMzkwX18pCisrCVNDX0FM TE9XKF9fTlJfZmxvY2spLAorKyNlbmRpZgorICNpZmRlZiBfX05SX2Z1dGV4CisgCVNDX0ZVVEVY KF9fTlJfZnV0ZXgpLAorICNlbmRpZgorQEAgLTMyMyw2ICszMjYsMjEgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBzb2NrX2ZpbHRlciBwcmVhdXRoX2luc25zW10gPSB7CisgI2lmZGVmIF9fTlJfZ2V0 cGlkCisgCVNDX0FMTE9XKF9fTlJfZ2V0cGlkKSwKKyAjZW5kaWYKKysjaWZkZWYgX19OUl9nZXR1 aWQKKysJU0NfQUxMT1coX19OUl9nZXR1aWQpLAorKyNlbmRpZgorKyNpZmRlZiBfX05SX2dldHVp ZDMyCisrCVNDX0FMTE9XKF9fTlJfZ2V0dWlkMzIpLAorKyNlbmRpZgorKyNpZmRlZiBfX05SX2dl dGV1aWQKKysJU0NfQUxMT1coX19OUl9nZXRldWlkKSwKKysjZW5kaWYKKysjaWZkZWYgX19OUl9n ZXRldWlkMzIKKysJU0NfQUxMT1coX19OUl9nZXRldWlkMzIpLAorKyNlbmRpZgorKyNpZmRlZiBf X05SX2dldHRpZAorKwlTQ19BTExPVyhfX05SX2dldHRpZCksCisrI2VuZGlmCisgI2lmZGVmIF9f TlJfZ2V0cmFuZG9tCisgCVNDX0FMTE9XKF9fTlJfZ2V0cmFuZG9tKSwKKyAjZW5kaWYKK0BAIC0z MzIsNiArMzUwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciBwcmVhdXRoX2lu c25zW10gPSB7CisgI2lmZGVmIF9fTlJfZ2V0dGltZW9mZGF5CisgCVNDX0FMTE9XKF9fTlJfZ2V0 dGltZW9mZGF5KSwKKyAjZW5kaWYKKysjaWYgZGVmaW5lZChfX05SX2lwYykgJiYgZGVmaW5lZChf X3MzOTBfXykKKysJU0NfQUxMT1coX19OUl9pcGMpLAorKyNlbmRpZgorICNpZmRlZiBfX05SX2dl dHVpZAorIAlTQ19BTExPVyhfX05SX2dldHVpZCksCisgI2VuZGlmCistLSAKKzIuNTMuMAorCgpk aWZmIC0tZ2l0IGEvMDAyNS1vcGVuc3NoLTcuOHAxLXNjcC1pcHY2LnBhdGNoIGIvMDAyNS1vcGVu c3NoLTcuOHAxLXNjcC1pcHY2LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk MWViNTFhLi4wMDAwMDAwCi0tLSBhLzAwMjUtb3BlbnNzaC03LjhwMS1zY3AtaXB2Ni5wYXRjaAor KysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLUZyb20gZTFkODZkMjY1ZDk1NDNjNzdmYTkw YTMzYWNjNzAyNDZlNjhiZjNiZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRy eSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUg MTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyNS81M10gb3BlbnNzaC03LjhwMS1zY3At aXB2NgotCi0tLS0KLSBzY3AuYyB8IDQgKysrLQotIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3NjcC5jIGIvc2NwLmMKLWluZGV4 IGUxOTkyNjIyZi4uNjIxMTMxZmZjIDEwMDY0NAotLS0tIGEvc2NwLmMKLSsrKyBiL3NjcC5jCi1A QCAtMTE2OSw3ICsxMTY5LDkgQEAgdG9yZW1vdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBlbnVt IHNjcF9tb2RlX2UgbW9kZSwgY2hhciAqc2Z0cF9kaXJlY3QpCi0gCQkJYWRkYXJncygmYWxpc3Qs ICIlcyIsIGhvc3QpOwotIAkJCWFkZGFyZ3MoJmFsaXN0LCAiJXMiLCBjbWQpOwotIAkJCWFkZGFy Z3MoJmFsaXN0LCAiJXMiLCBzcmMpOwotLQkJCWFkZGFyZ3MoJmFsaXN0LCAiJXMlcyVzOiVzIiwK LSsJCQlhZGRhcmdzKCZhbGlzdCwKLSsJCQkgICAgLyogSVB2NiBhZGRyZXNzIG5lZWRzIHRvIGJl IGVuY2xvc2VkIHdpdGggc3FhcmUgYnJhY2tldHMgKi8KLSsJCQkgICAgc3RyY2hyKGhvc3QsICc6 JykgIT0gTlVMTCA/ICIlcyVzWyVzXTolcyIgOiAiJXMlcyVzOiVzIiwKLSAJCQkgICAgdHVzZXIg PyB0dXNlciA6ICIiLCB0dXNlciA/ICJAIiA6ICIiLAotIAkJCSAgICB0aG9zdCwgdGFyZyk7Ci0g CQkJaWYgKGRvX2xvY2FsX2NtZCgmYWxpc3QpICE9IDApCi0tLSAKLTIuNTIuMAotCgpkaWZmIC0t Z2l0IGEvMDAyNi1vcGVuc3NoLTcuOHAxLXNjcC1pcHY2LnBhdGNoIGIvMDAyNi1vcGVuc3NoLTcu OHAxLXNjcC1pcHY2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcx YzczODYKLS0tIC9kZXYvbnVsbAorKysgYi8wMDI2LW9wZW5zc2gtNy44cDEtc2NwLWlwdjYucGF0 Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAzZTg2ZmViODI0ZjJmMWE3ZWZlNGI2YjdiMzVjMTQ1 YmVmMWQwZGQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNr aXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCAr MDIwMAorU3ViamVjdDogW1BBVENIIDI2LzU0XSBvcGVuc3NoLTcuOHAxLXNjcC1pcHY2CisKKyMg VW5icmVhayBzY3AgYmV0d2VlbiB0d28gSVB2NiBob3N0cyAoIzE2MjAzMzMpCistLS0KKyBzY3Au YyB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKKworZGlmZiAtLWdpdCBhL3NjcC5jIGIvc2NwLmMKK2luZGV4IGI1YWQ0NWMxMi4uNTYxOGUy OGU3IDEwMDY0NAorLS0tIGEvc2NwLmMKKysrKyBiL3NjcC5jCitAQCAtMTE2NCw3ICsxMTY0LDkg QEAgdG9yZW1vdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBlbnVtIHNjcF9tb2RlX2UgbW9kZSwg Y2hhciAqc2Z0cF9kaXJlY3QpCisgCQkJYWRkYXJncygmYWxpc3QsICIlcyIsIGhvc3QpOworIAkJ CWFkZGFyZ3MoJmFsaXN0LCAiJXMiLCBjbWQpOworIAkJCWFkZGFyZ3MoJmFsaXN0LCAiJXMiLCBz cmMpOworLQkJCWFkZGFyZ3MoJmFsaXN0LCAiJXMlcyVzOiVzIiwKKysJCQlhZGRhcmdzKCZhbGlz dCwKKysJCQkgICAgLyogSVB2NiBhZGRyZXNzIG5lZWRzIHRvIGJlIGVuY2xvc2VkIHdpdGggc3Fh cmUgYnJhY2tldHMgKi8KKysJCQkgICAgc3RyY2hyKGhvc3QsICc6JykgIT0gTlVMTCA/ICIlcyVz WyVzXTolcyIgOiAiJXMlcyVzOiVzIiwKKyAJCQkgICAgdHVzZXIgPyB0dXNlciA6ICIiLCB0dXNl ciA/ICJAIiA6ICIiLAorIAkJCSAgICB0aG9zdCwgdGFyZyk7CisgCQkJaWYgKGRvX2xvY2FsX2Nt ZCgmYWxpc3QpICE9IDApCistLSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0IGEvMDAyNi1vcGVuc3No LTguMHAxLWNyeXB0by1wb2xpY2llcy5wYXRjaCBiLzAwMjYtb3BlbnNzaC04LjBwMS1jcnlwdG8t cG9saWNpZXMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNjJmZmEuLjAw MDAwMDAKLS0tIGEvMDAyNi1vcGVuc3NoLTguMHAxLWNyeXB0by1wb2xpY2llcy5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDY1NCArMCwwIEBACi1Gcm9tIDZkOWUwOGYwNjE0NTFmNmNkNDY0YWY1 ZWM1OThmYTk5ZDE1YWNhZGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkg QmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEz OjQzOjI4ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMjYvNTNdIG9wZW5zc2gtOC4wcDEtY3J5cHRv LXBvbGljaWVzCi0KLS0tLQotIHNzaF9jb25maWcuNSAgfCAxNjQgKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gc3NoZF9jb25maWcuNSB8IDE3OSArKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIDIgZmlsZXMgY2hh bmdlZCwgMTQwIGluc2VydGlvbnMoKyksIDIwMyBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBh L3NzaF9jb25maWcuNSBiL3NzaF9jb25maWcuNQotaW5kZXggOGE0YjQ2OWNmLi44YWM1ZTE2MzMg MTAwNjQ0Ci0tLS0gYS9zc2hfY29uZmlnLjUKLSsrKyBiL3NzaF9jb25maWcuNQotQEAgLTQzOCwx NyArNDM4LDEzIEBAIEEgc2luZ2xlIGFyZ3VtZW50IG9mCi0gY2F1c2VzIG5vIENOQU1FcyB0byBi ZSBjb25zaWRlcmVkIGZvciBjYW5vbmljYWxpemF0aW9uLgotIFRoaXMgaXMgdGhlIGRlZmF1bHQg YmVoYXZpb3VyLgotIC5JdCBDbSBDQVNpZ25hdHVyZUFsZ29yaXRobXMKLStUaGUgZGVmYXVsdCBp cyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5Ci0rLlhyIGNyeXB0by1wb2xpY2llcyA3IC4KLStJbmZv cm1hdGlvbiBhYm91dCBkZWZhdWx0cywgaG93IHRvIG1vZGlmeSB0aGUgZGVmYXVsdHMgYW5kIGhv dyB0byBjdXN0b21pemUgZXhpc3RpbmcgcG9saWNpZXMgd2l0aCBzdWItcG9saWNpZXMgYXJlIHBy ZXNlbnQgaW4gbWFudWFsIHBhZ2UKLSsuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2llcyA4IC4KLSsu UHAKLSBTcGVjaWZpZXMgd2hpY2ggYWxnb3JpdGhtcyBhcmUgYWxsb3dlZCBmb3Igc2lnbmluZyBv ZiBjZXJ0aWZpY2F0ZXMKLSBieSBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyAoQ0FzKS4KLS1UaGUg ZGVmYXVsdCBpczoKLS0uQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKLS1zc2gtZWQyNTUxOSxl Y2RzYS1zaGEyLW5pc3RwMjU2LAotLWVjZHNhLXNoYTItbmlzdHAzODQsZWNkc2Etc2hhMi1uaXN0 cDUyMSwKLS1zay1zc2gtZWQyNTUxOUBvcGVuc3NoLmNvbSwKLS1zay1lY2RzYS1zaGEyLW5pc3Rw MjU2QG9wZW5zc2guY29tLAotLXJzYS1zaGEyLTUxMixyc2Etc2hhMi0yNTYKLS0uRWQKLS0uUHAK LSBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQotIC5TcSArCi0gY2hhcmFjdGVy LCB0aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBk ZWZhdWx0IHNldAotQEAgLTU4NywyMCArNTgzLDI1IEBAIElmIHRoZSBvcHRpb24gaXMgc2V0IHRv Ci0gKHRoZSBkZWZhdWx0KSwKLSB0aGUgY2hlY2sgd2lsbCBub3QgYmUgZXhlY3V0ZWQuCi0gLkl0 IENtIENpcGhlcnMKLStUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5Ci0rLlhy IGNyeXB0by1wb2xpY2llcyA3IC4KLStJbmZvcm1hdGlvbiBhYm91dCBkZWZhdWx0cywgaG93IHRv IG1vZGlmeSB0aGUgZGVmYXVsdHMgYW5kIGhvdyB0byBjdXN0b21pemUgZXhpc3RpbmcgcG9saWNp ZXMgd2l0aCBzdWItcG9saWNpZXMgYXJlIHByZXNlbnQgaW4gbWFudWFsIHBhZ2UKLSsuWHIgdXBk YXRlLWNyeXB0by1wb2xpY2llcyA4IC4KLSsuUHAKLSBTcGVjaWZpZXMgdGhlIGNpcGhlcnMgYWxs b3dlZCBhbmQgdGhlaXIgb3JkZXIgb2YgcHJlZmVyZW5jZS4KLSBNdWx0aXBsZSBjaXBoZXJzIG11 c3QgYmUgY29tbWEtc2VwYXJhdGVkLgotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0 aCBhCi0gLlNxICsKLS1jaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBjaXBoZXJzIHdpbGwg YmUgYXBwZW5kZWQgdG8gdGhlIGRlZmF1bHQgc2V0Ci0taW5zdGVhZCBvZiByZXBsYWNpbmcgdGhl bS4KLStjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBjaXBoZXJzIHdpbGwgYmUgYXBwZW5k ZWQgdG8gdGhlIGJ1aWx0LWluCi0rb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxh Y2luZyB0aGVtLgotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCi0gLlNxIC0K LSBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBjaXBoZXJzIChpbmNsdWRpbmcgd2lsZGNh cmRzKSB3aWxsIGJlIHJlbW92ZWQKLS1mcm9tIHRoZSBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJl cGxhY2luZyB0aGVtLgotK2Zyb20gdGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQgaW5z dGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KLSBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdp dGggYQotIC5TcSBeCi0gY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgY2lwaGVycyB3aWxs IGJlIHBsYWNlZCBhdCB0aGUgaGVhZCBvZiB0aGUKLS1kZWZhdWx0IHNldC4KLStidWlsdC1pbiBv cGVuc3NoIGRlZmF1bHQgc2V0LgotIC5QcAotIFRoZSBzdXBwb3J0ZWQgY2lwaGVycyBhcmU6Ci0g LkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50Ci1AQCAtNjE2LDEzICs2MTcsNiBAQCBhZXMyNTYt Z2NtQG9wZW5zc2guY29tCi0gY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20KLSAuRWQKLSAu UHAKLS1UaGUgZGVmYXVsdCBpczoKLS0uQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKLS1jaGFj aGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSwKLS1hZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFlczI1 Ni1nY21Ab3BlbnNzaC5jb20sCi0tYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIKLS0u RWQKLS0uUHAKLSBUaGUgbGlzdCBvZiBhdmFpbGFibGUgY2lwaGVycyBtYXkgYWxzbyBiZSBvYnRh aW5lZCB1c2luZwotIC5RcSBzc2ggLVEgY2lwaGVyIC4KLSAuSXQgQ20gQ2xlYXJBbGxGb3J3YXJk aW5ncwotQEAgLTEwMjIsNiArMTAxNiwxMSBAQCBjb21tYW5kIGxpbmUgd2lsbCBiZSBwYXNzZWQg dW50b3VjaGVkIHRvIHRoZSBHU1NBUEkgbGlicmFyeS4KLSBUaGUgZGVmYXVsdCBpcwotIC5EcSBu byAuCi0gLkl0IENtIEdTU0FQSUtleEFsZ29yaXRobXMKLStUaGUgZGVmYXVsdCBpcyBoYW5kbGVk IHN5c3RlbS13aWRlIGJ5Ci0rLlhyIGNyeXB0by1wb2xpY2llcyA3IC4KLStJbmZvcm1hdGlvbiBh Ym91dCBkZWZhdWx0cywgaG93IHRvIG1vZGlmeSB0aGUgZGVmYXVsdHMgYW5kIGhvdyB0byBjdXN0 b21pemUgZXhpc3RpbmcgcG9saWNpZXMgd2l0aCBzdWItcG9saWNpZXMgYXJlIHByZXNlbnQgaW4g bWFudWFsIHBhZ2UKLSsuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2llcyA4IC4KLSsuUHAKLSBUaGUg bGlzdCBvZiBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtcyB0aGF0IGFyZSBvZmZlcmVkIGZvciBHU1NB UEkKLSBrZXkgZXhjaGFuZ2UuIFBvc3NpYmxlIHZhbHVlcyBhcmUKLSAuQmQgLWxpdGVyYWwgLW9m ZnNldCAzbgotQEAgLTEwMzQsMTAgKzEwMzMsOCBAQCBnc3MtbmlzdHAyNTYtc2hhMjU2LSwKLSBn c3MtY3VydmUyNTUxOS1zaGEyNTYtCi0gLkVkCi0gLlBwCi0tVGhlIGRlZmF1bHQgaXMKLS0uRHEg Z3NzLWdyb3VwMTQtc2hhMjU2LSxnc3MtZ3JvdXAxNi1zaGE1MTItLGdzcy1uaXN0cDI1Ni1zaGEy NTYtLAotLWdzcy1jdXJ2ZTI1NTE5LXNoYTI1Ni0sZ3NzLWdyb3VwMTQtc2hhMS0sZ3NzLWdleC1z aGExLSAuCi0gVGhpcyBvcHRpb24gb25seSBhcHBsaWVzIHRvIGNvbm5lY3Rpb25zIHVzaW5nIEdT U0FQSS4KLSsuUHAKLSAuSXQgQ20gSGFzaEtub3duSG9zdHMKLSBJbmRpY2F0ZXMgdGhhdAotIC5Y ciBzc2ggMQotQEAgLTEwNTYsMzYgKzEwNTMsMjUgQEAgd2lsbCBub3QgYmUgY29udmVydGVkIGF1 dG9tYXRpY2FsbHksCi0gYnV0IG1heSBiZSBtYW51YWxseSBoYXNoZWQgdXNpbmcKLSAuWHIgc3No LWtleWdlbiAxIC4KLSAuSXQgQ20gSG9zdGJhc2VkQWNjZXB0ZWRBbGdvcml0aG1zCi0rVGhlIGRl ZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQotKy5YciBjcnlwdG8tcG9saWNpZXMgNyAu Ci0rSW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0byBtb2RpZnkgdGhlIGRlZmF1bHRz IGFuZCBob3cgdG8gY3VzdG9taXplIGV4aXN0aW5nIHBvbGljaWVzIHdpdGggc3ViLXBvbGljaWVz IGFyZSBwcmVzZW50IGluIG1hbnVhbCBwYWdlCi0rLlhyIHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMg OCAuCi0rLlBwCi0gU3BlY2lmaWVzIHRoZSBzaWduYXR1cmUgYWxnb3JpdGhtcyB0aGF0IHdpbGwg YmUgdXNlZCBmb3IgaG9zdGJhc2VkCi0gYXV0aGVudGljYXRpb24gYXMgYSBjb21tYS1zZXBhcmF0 ZWQgbGlzdCBvZiBwYXR0ZXJucy4KLSBBbHRlcm5hdGVseSBpZiB0aGUgc3BlY2lmaWVkIGxpc3Qg YmVnaW5zIHdpdGggYQotIC5TcSArCi0gY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgc2ln bmF0dXJlIGFsZ29yaXRobXMgd2lsbCBiZSBhcHBlbmRlZAotLXRvIHRoZSBkZWZhdWx0IHNldCBp bnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotK3RvIHRoZSBidWlsdC1pbiBvcGVuc3NoIGRlZmF1 bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCi0gSWYgdGhlIHNwZWNpZmllZCBsaXN0 IGJlZ2lucyB3aXRoIGEKLSAuU3EgLQotIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIHNp Z25hdHVyZSBhbGdvcml0aG1zIChpbmNsdWRpbmcgd2lsZGNhcmRzKQotLXdpbGwgYmUgcmVtb3Zl ZCBmcm9tIHRoZSBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotK3dpbGwg YmUgcmVtb3ZlZCBmcm9tIHRoZSBidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0IGluc3RlYWQg b2YgcmVwbGFjaW5nIHRoZW0uCi0gSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEK LSAuU3EgXgotIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIHNpZ25hdHVyZSBhbGdvcml0 aG1zIHdpbGwgYmUgcGxhY2VkCi0tYXQgdGhlIGhlYWQgb2YgdGhlIGRlZmF1bHQgc2V0LgotLVRo ZSBkZWZhdWx0IGZvciB0aGlzIG9wdGlvbiBpczoKLS0uQmQgLWxpdGVyYWwgLW9mZnNldCAzbgot LXNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAotLWVjZHNhLXNoYTItbmlzdHAyNTYt Y2VydC12MDFAb3BlbnNzaC5jb20sCi0tZWNkc2Etc2hhMi1uaXN0cDM4NC1jZXJ0LXYwMUBvcGVu c3NoLmNvbSwKLS1lY2RzYS1zaGEyLW5pc3RwNTIxLWNlcnQtdjAxQG9wZW5zc2guY29tLAotLXNr LXNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAotLXNrLWVjZHNhLXNoYTItbmlzdHAy NTYtY2VydC12MDFAb3BlbnNzaC5jb20sCi0tcnNhLXNoYTItNTEyLWNlcnQtdjAxQG9wZW5zc2gu Y29tLAotLXJzYS1zaGEyLTI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKLS1zc2gtZWQyNTUxOSwK LS1lY2RzYS1zaGEyLW5pc3RwMjU2LGVjZHNhLXNoYTItbmlzdHAzODQsZWNkc2Etc2hhMi1uaXN0 cDUyMSwKLS1zay1zc2gtZWQyNTUxOUBvcGVuc3NoLmNvbSwKLS1zay1lY2RzYS1zaGEyLW5pc3Rw MjU2QG9wZW5zc2guY29tLAotLXJzYS1zaGEyLTUxMixyc2Etc2hhMi0yNTYKLS0uRWQKLSthdCB0 aGUgaGVhZCBvZiB0aGUgYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNldC4KLSAuUHAKLSBUaGUK LSAuRmwgUQotQEAgLTExMzgsNiArMTEyNCwxNyBAQCB0byBwcmVmZXIgdGhlaXIgYWxnb3JpdGht cy4KLSAuUHAKLSBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc2lnbmF0dXJlIGFsZ29yaXRobXMgbWF5 IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKLSAuUXEgc3NoIC1RIEhvc3RLZXlBbGdvcml0aG1zIC4K LSsuUHAKLStUaGUgcHJvcG9zZWQKLSsuQ20gSG9zdEtleUFsZ29yaXRobXMKLStkdXJpbmcgS0VY IGFyZSBsaW1pdGVkIHRvIHRoZSBzZXQgb2YgYWxnb3JpdGhtcyB0aGF0IGlzIGRlZmluZWQgaW4K LSsuQ20gUHVia2V5QWNjZXB0ZWRBbGdvcml0aG1zCi0rYW5kIHRoZXJlZm9yZSB0aGV5IGFyZSBp bmRpcmVjdGx5IGFmZmVjdGVkIGJ5IHN5c3RlbS13aWRlCi0rLlhyIGNyeXB0b19wb2xpY2llcyA3 IC4KLSsuWHIgY3J5cHRvX3BvbGljaWVzIDcgY2FuIG5vdCBoYW5kbGUgdGhlIGxpc3Qgb2YgaG9z dCBrZXkgYWxnb3JpdGhtcyBkaXJlY3RseSBhcyBkb2luZyBzbwotK3dvdWxkIGJyZWFrIHRoZSBv cmRlciBnaXZlbiBieSB0aGUKLSsuUGEga25vd25faG9zdHMKLStmaWxlLgotIC5JdCBDbSBIb3N0 S2V5QWxpYXMKLSBTcGVjaWZpZXMgYW4gYWxpYXMgdGhhdCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFk IG9mIHRoZQotIHJlYWwgaG9zdCBuYW1lIHdoZW4gbG9va2luZyB1cCBvciBzYXZpbmcgdGhlIGhv c3Qga2V5Ci1AQCAtMTM2MCw2ICsxMzU3LDExIEBAIGl0IG1heSBiZSB6ZXJvIG9yIG1vcmUgb2Y6 Ci0gYW5kCi0gLkNtIHBhbSAuCi0gLkl0IENtIEtleEFsZ29yaXRobXMKLStUaGUgZGVmYXVsdCBp cyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5Ci0rLlhyIGNyeXB0by1wb2xpY2llcyA3IC4KLStJbmZv cm1hdGlvbiBhYm91dCBkZWZhdWx0cywgaG93IHRvIG1vZGlmeSB0aGUgZGVmYXVsdHMgYW5kIGhv dyB0byBjdXN0b21pemUgZXhpc3RpbmcgcG9saWNpZXMgd2l0aCBzdWItcG9saWNpZXMgYXJlIHBy ZXNlbnQgaW4gbWFudWFsIHBhZ2UKLSsuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2llcyA4IC4KLSsu UHAKLSBTcGVjaWZpZXMgdGhlIHBlcm1pdHRlZCBLRVggKEtleSBFeGNoYW5nZSkgYWxnb3JpdGht cyB0aGF0IHdpbGwgYmUgdXNlZCBhbmQKLSB0aGVpciBwcmVmZXJlbmNlIG9yZGVyLgotIFRoZSBz ZWxlY3RlZCBhbGdvcml0aG0gd2lsbCBiZSB0aGUgZmlyc3QgYWxnb3JpdGhtIGluIHRoaXMgbGlz dCB0aGF0Ci1AQCAtMTM2OCwyOSArMTM3MCwxNyBAQCBNdWx0aXBsZSBhbGdvcml0aG1zIG11c3Qg YmUgY29tbWEtc2VwYXJhdGVkLgotIC5QcAotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMg d2l0aCBhCi0gLlNxICsKLS1jaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1z IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGRlZmF1bHQgc2V0Ci0taW5zdGVhZCBvZiByZXBsYWNp bmcgdGhlbS4KLStjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBtZXRob2RzIHdpbGwgYmUg YXBwZW5kZWQgdG8gdGhlIGJ1aWx0LWluCi0rb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0ZWFkIG9m IHJlcGxhY2luZyB0aGVtLgotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCi0g LlNxIC0KLSBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIChpbmNsdWRp bmcgd2lsZGNhcmRzKSB3aWxsIGJlIHJlbW92ZWQKLS1mcm9tIHRoZSBkZWZhdWx0IHNldCBpbnN0 ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotK2Zyb20gdGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVmYXVs dCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KLSBJZiB0aGUgc3BlY2lmaWVkIGxpc3Qg YmVnaW5zIHdpdGggYQotIC5TcSBeCi0gY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgYWxn b3JpdGhtcyB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgaGVhZCBvZiB0aGUKLS1kZWZhdWx0IHNldC4K LS0uUHAKLS1UaGUgZGVmYXVsdCBpczoKLS0uQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKLS1t bGtlbTc2OHgyNTUxOS1zaGEyNTYsCi0tc250cnVwNzYxeDI1NTE5LXNoYTUxMixzbnRydXA3NjF4 MjU1MTktc2hhNTEyQG9wZW5zc2guY29tLAotLWN1cnZlMjU1MTktc2hhMjU2LGN1cnZlMjU1MTkt c2hhMjU2QGxpYnNzaC5vcmcsCi0tZWNkaC1zaGEyLW5pc3RwMjU2LGVjZGgtc2hhMi1uaXN0cDM4 NCxlY2RoLXNoYTItbmlzdHA1MjEsCi0tZGlmZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hh MjU2LAotLWRpZmZpZS1oZWxsbWFuLWdyb3VwMTYtc2hhNTEyLAotLWRpZmZpZS1oZWxsbWFuLWdy b3VwMTgtc2hhNTEyLAotLWRpZmZpZS1oZWxsbWFuLWdyb3VwMTQtc2hhMjU2Ci0tLkVkCi0gLlBw Ci0rYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNldC4KLSBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQg a2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKLSAuUXEg c3NoIC1RIGtleCAuCi0gLkl0IENtIEtub3duSG9zdHNDb21tYW5kCi1AQCAtMTUwNiwzNyArMTQ5 NiwzMyBAQCBmdW5jdGlvbiwgYW5kIGFsbCBjb2RlIGluIHRoZQotIGZpbGUuCi0gVGhpcyBvcHRp b24gaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBhbmQgbm8gb3ZlcnJpZGVzIGFyZSBlbmFibGVk IGJ5IGRlZmF1bHQuCi0gLkl0IENtIE1BQ3MKLStUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3Rl bS13aWRlIGJ5Ci0rLlhyIGNyeXB0by1wb2xpY2llcyA3IC4KLStJbmZvcm1hdGlvbiBhYm91dCBk ZWZhdWx0cywgaG93IHRvIG1vZGlmeSB0aGUgZGVmYXVsdHMgYW5kIGhvdyB0byBjdXN0b21pemUg ZXhpc3RpbmcgcG9saWNpZXMgd2l0aCBzdWItcG9saWNpZXMgYXJlIHByZXNlbnQgaW4gbWFudWFs IHBhZ2UKLSsuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2llcyA4IC4KLSsuUHAKLSBTcGVjaWZpZXMg dGhlIE1BQyAobWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlKSBhbGdvcml0aG1zCi0gaW4gb3Jk ZXIgb2YgcHJlZmVyZW5jZS4KLSBUaGUgTUFDIGFsZ29yaXRobSBpcyB1c2VkIGZvciBkYXRhIGlu dGVncml0eSBwcm90ZWN0aW9uLgotIE11bHRpcGxlIGFsZ29yaXRobXMgbXVzdCBiZSBjb21tYS1z ZXBhcmF0ZWQuCi0gSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKLSAuU3EgKwot LWNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBhcHBlbmRl ZCB0byB0aGUgZGVmYXVsdCBzZXQKLS1pbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotK2NoYXJh Y3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0 aGUgYnVpbHQtaW4KLStvcGVuc3NoIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFjaW5nIHRo ZW0uCi0gSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKLSAuU3EgLQotIGNoYXJh Y3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgKGluY2x1ZGluZyB3aWxkY2FyZHMp IHdpbGwgYmUgcmVtb3ZlZAotLWZyb20gdGhlIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFj aW5nIHRoZW0uCi0rZnJvbSB0aGUgYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0ZWFk IG9mIHJlcGxhY2luZyB0aGVtLgotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBh Ci0gLlNxIF4KLSBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIHdpbGwg YmUgcGxhY2VkIGF0IHRoZSBoZWFkIG9mIHRoZQotLWRlZmF1bHQgc2V0LgotK2J1aWx0LWluIG9w ZW5zc2ggZGVmYXVsdCBzZXQuCi0gLlBwCi0gVGhlIGFsZ29yaXRobXMgdGhhdCBjb250YWluCi0g LlFxIC1ldG0KLSBjYWxjdWxhdGUgdGhlIE1BQyBhZnRlciBlbmNyeXB0aW9uIChlbmNyeXB0LXRo ZW4tbWFjKS4KLSBUaGVzZSBhcmUgY29uc2lkZXJlZCBzYWZlciBhbmQgdGhlaXIgdXNlIHJlY29t bWVuZGVkLgotIC5QcAotLVRoZSBkZWZhdWx0IGlzOgotLS5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGlu ZGVudAotLXVtYWMtNjQtZXRtQG9wZW5zc2guY29tLHVtYWMtMTI4LWV0bUBvcGVuc3NoLmNvbSwK LS1obWFjLXNoYTItMjU2LWV0bUBvcGVuc3NoLmNvbSxobWFjLXNoYTItNTEyLWV0bUBvcGVuc3No LmNvbSwKLS1obWFjLXNoYTEtZXRtQG9wZW5zc2guY29tLAotLXVtYWMtNjRAb3BlbnNzaC5jb20s dW1hYy0xMjhAb3BlbnNzaC5jb20sCi0taG1hYy1zaGEyLTI1NixobWFjLXNoYTItNTEyLGhtYWMt c2hhMQotLS5FZAotLS5QcAotIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBNQUMgYWxnb3JpdGhtcyBt YXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwotIC5RcSBzc2ggLVEgbWFjIC4KLSAuSXQgQ20gTm9I b3N0QXV0aGVudGljYXRpb25Gb3JMb2NhbGhvc3QKLUBAIC0xNzI1LDM5ICsxNzExLDMxIEBAIGlu c3RlYWQgb2YgY29udGludWluZyB0byBleGVjdXRlIGFuZCBwYXNzIGRhdGEuCi0gVGhlIGRlZmF1 bHQgaXMKLSAuQ20gbm8gLgotIC5JdCBDbSBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMKLStUaGUg ZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5Ci0rLlhyIGNyeXB0by1wb2xpY2llcyA3 IC4KLStJbmZvcm1hdGlvbiBhYm91dCBkZWZhdWx0cywgaG93IHRvIG1vZGlmeSB0aGUgZGVmYXVs dHMgYW5kIGhvdyB0byBjdXN0b21pemUgZXhpc3RpbmcgcG9saWNpZXMgd2l0aCBzdWItcG9saWNp ZXMgYXJlIHByZXNlbnQgaW4gbWFudWFsIHBhZ2UKLSsuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2ll cyA4IC4KLSsuUHAKLSBTcGVjaWZpZXMgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG1zIHRoYXQgd2ls bCBiZSB1c2VkIGZvciBwdWJsaWMga2V5Ci0gYXV0aGVudGljYXRpb24gYXMgYSBjb21tYS1zZXBh cmF0ZWQgbGlzdCBvZiBwYXR0ZXJucy4KLSBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdp dGggYQotIC5TcSArCi0tY2hhcmFjdGVyLCB0aGVuIHRoZSBhbGdvcml0aG1zIGFmdGVyIGl0IHdp bGwgYmUgYXBwZW5kZWQgdG8gdGhlIGRlZmF1bHQKLS1pbnN0ZWFkIG9mIHJlcGxhY2luZyBpdC4K LStjaGFyYWN0ZXIsIHRoZW4gdGhlIGFsZ29yaXRobXMgYWZ0ZXIgaXQgd2lsbCBiZSBhcHBlbmRl ZCB0byB0aGUgYnVpbHQtaW4KLStvcGVuc3NoIGRlZmF1bHQgaW5zdGVhZCBvZiByZXBsYWNpbmcg aXQuCi0gSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKLSAuU3EgLQotIGNoYXJh Y3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgKGluY2x1ZGluZyB3aWxkY2FyZHMp IHdpbGwgYmUgcmVtb3ZlZAotLWZyb20gdGhlIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFj aW5nIHRoZW0uCi0rZnJvbSB0aGUgYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0ZWFk IG9mIHJlcGxhY2luZyB0aGVtLgotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBh Ci0gLlNxIF4KLSBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIHdpbGwg YmUgcGxhY2VkIGF0IHRoZSBoZWFkIG9mIHRoZQotLWRlZmF1bHQgc2V0LgotLVRoZSBkZWZhdWx0 IGZvciB0aGlzIG9wdGlvbiBpczoKLS0uQmQgLWxpdGVyYWwgLW9mZnNldCAzbgotLXNzaC1lZDI1 NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAotLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFA b3BlbnNzaC5jb20sCi0tZWNkc2Etc2hhMi1uaXN0cDM4NC1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwK LS1lY2RzYS1zaGEyLW5pc3RwNTIxLWNlcnQtdjAxQG9wZW5zc2guY29tLAotLXNrLXNzaC1lZDI1 NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAotLXNrLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12 MDFAb3BlbnNzaC5jb20sCi0tcnNhLXNoYTItNTEyLWNlcnQtdjAxQG9wZW5zc2guY29tLAotLXJz YS1zaGEyLTI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKLS1zc2gtZWQyNTUxOSwKLS1lY2RzYS1z aGEyLW5pc3RwMjU2LGVjZHNhLXNoYTItbmlzdHAzODQsZWNkc2Etc2hhMi1uaXN0cDUyMSwKLS1z ay1zc2gtZWQyNTUxOUBvcGVuc3NoLmNvbSwKLS1zay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5z c2guY29tLAotLXJzYS1zaGEyLTUxMixyc2Etc2hhMi0yNTYKLS0uRWQKLStidWlsdC1pbiBvcGVu c3NoIGRlZmF1bHQgc2V0LgotIC5QcAotIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzaWduYXR1cmUg YWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwotIC5RcSBzc2ggLVEgUHVia2V5 QWNjZXB0ZWRBbGdvcml0aG1zIC4KLSsuUHAKLStUaGlzIG9wdGlvbiBhZmZlY3RzIGFsc28KLSsu Q20gSG9zdEtleUFsZ29yaXRobXMKLSAuSXQgQ20gUHVia2V5QXV0aGVudGljYXRpb24KLSBTcGVj aWZpZXMgd2hldGhlciB0byB0cnkgcHVibGljIGtleSBhdXRoZW50aWNhdGlvbi4KLSBUaGUgYXJn dW1lbnQgdG8gdGhpcyBrZXl3b3JkIG11c3QgYmUKLUBAIC0yNTA0LDcgKzI0ODIsOSBAQCBmb3Ig dGhvc2UgdXNlcnMgd2hvIGRvIG5vdCBoYXZlIGEgY29uZmlndXJhdGlvbiBmaWxlLgotIFRoaXMg ZmlsZSBtdXN0IGJlIHdvcmxkLXJlYWRhYmxlLgotIC5FbAotIC5TaCBTRUUgQUxTTwotLS5YciBz c2ggMQotKy5YciBzc2ggMSAsCi0rLlhyIGNyeXB0by1wb2xpY2llcyA3ICwKLSsuWHIgdXBkYXRl LWNyeXB0by1wb2xpY2llcyA4Ci0gLlNoIEFVVEhPUlMKLSAuQW4gLW5vc3BsaXQKLSBPcGVuU1NI IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgYW5kIGZyZWUKLWRpZmYgLS1naXQgYS9z c2hkX2NvbmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggYTBmYzYwNjRmLi5jMTcyZDVhYWIg MTAwNjQ0Ci0tLS0gYS9zc2hkX2NvbmZpZy41Ci0rKysgYi9zc2hkX2NvbmZpZy41Ci1AQCAtMzc5 LDE3ICszNzksMTMgQEAgSWYgdGhlIGFyZ3VtZW50IGlzCi0gdGhlbiBubyBiYW5uZXIgaXMgZGlz cGxheWVkLgotIEJ5IGRlZmF1bHQsIG5vIGJhbm5lciBpcyBkaXNwbGF5ZWQuCi0gLkl0IENtIENB U2lnbmF0dXJlQWxnb3JpdGhtcwotK1RoZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUg YnkKLSsuWHIgY3J5cHRvLXBvbGljaWVzIDcgLgotK0luZm9ybWF0aW9uIGFib3V0IGRlZmF1bHRz LCBob3cgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0cyBhbmQgaG93IHRvIGN1c3RvbWl6ZSBleGlzdGlu ZyBwb2xpY2llcyB3aXRoIHN1Yi1wb2xpY2llcyBhcmUgcHJlc2VudCBpbiBtYW51YWwgcGFnZQot Ky5YciB1cGRhdGUtY3J5cHRvLXBvbGljaWVzIDggLgotKy5QcAotIFNwZWNpZmllcyB3aGljaCBh bGdvcml0aG1zIGFyZSBhbGxvd2VkIGZvciBzaWduaW5nIG9mIGNlcnRpZmljYXRlcwotIGJ5IGNl cnRpZmljYXRlIGF1dGhvcml0aWVzIChDQXMpLgotLVRoZSBkZWZhdWx0IGlzOgotLS5CZCAtbGl0 ZXJhbCAtb2Zmc2V0IGluZGVudAotLXNzaC1lZDI1NTE5LGVjZHNhLXNoYTItbmlzdHAyNTYsCi0t ZWNkc2Etc2hhMi1uaXN0cDM4NCxlY2RzYS1zaGEyLW5pc3RwNTIxLAotLXNrLXNzaC1lZDI1NTE5 QG9wZW5zc2guY29tLAotLXNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20sCi0tcnNh LXNoYTItNTEyLHJzYS1zaGEyLTI1NgotLS5FZAotLS5QcAotIElmIHRoZSBzcGVjaWZpZWQgbGlz dCBiZWdpbnMgd2l0aCBhCi0gLlNxICsKLSBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBh bGdvcml0aG1zIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGRlZmF1bHQgc2V0Ci1AQCAtNTMzLDIw ICs1MjksMjUgQEAgVGhlIGRlZmF1bHQgaXMKLSBpbmRpY2F0aW5nIG5vdCB0bwotIC5YciBjaHJv b3QgMiAuCi0gLkl0IENtIENpcGhlcnMKLStUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13 aWRlIGJ5Ci0rLlhyIGNyeXB0by1wb2xpY2llcyA3IC4KLStJbmZvcm1hdGlvbiBhYm91dCBkZWZh dWx0cywgaG93IHRvIG1vZGlmeSB0aGUgZGVmYXVsdHMgYW5kIGhvdyB0byBjdXN0b21pemUgZXhp c3RpbmcgcG9saWNpZXMgd2l0aCBzdWItcG9saWNpZXMgYXJlIHByZXNlbnQgaW4gbWFudWFsIHBh Z2UKLSsuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2llcyA4IC4KLSsuUHAKLSBTcGVjaWZpZXMgdGhl IGNpcGhlcnMgYWxsb3dlZC4KLSBNdWx0aXBsZSBjaXBoZXJzIG11c3QgYmUgY29tbWEtc2VwYXJh dGVkLgotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCi0gLlNxICsKLS1jaGFy YWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBjaXBoZXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhl IGRlZmF1bHQgc2V0Ci0taW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KLStjaGFyYWN0ZXIsIHRo ZW4gdGhlIHNwZWNpZmllZCBjaXBoZXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJ1aWx0LWlu Ci0rb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotIElmIHRo ZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCi0gLlNxIC0KLSBjaGFyYWN0ZXIsIHRoZW4g dGhlIHNwZWNpZmllZCBjaXBoZXJzIChpbmNsdWRpbmcgd2lsZGNhcmRzKSB3aWxsIGJlIHJlbW92 ZWQKLS1mcm9tIHRoZSBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotK2Zy b20gdGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcg dGhlbS4KLSBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQotIC5TcSBeCi0gY2hh cmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgY2lwaGVycyB3aWxsIGJlIHBsYWNlZCBhdCB0aGUg aGVhZCBvZiB0aGUKLS1kZWZhdWx0IHNldC4KLStidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0 LgotIC5QcAotIFRoZSBzdXBwb3J0ZWQgY2lwaGVycyBhcmU6Ci0gLlBwCi1AQCAtNTczLDEzICs1 NzQsNiBAQCBhZXMyNTYtZ2NtQG9wZW5zc2guY29tCi0gY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNz aC5jb20KLSAuRWwKLSAuUHAKLS1UaGUgZGVmYXVsdCBpczoKLS0uQmQgLWxpdGVyYWwgLW9mZnNl dCBpbmRlbnQKLS1jaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSwKLS1hZXMxMjgtZ2NtQG9w ZW5zc2guY29tLGFlczI1Ni1nY21Ab3BlbnNzaC5jb20sCi0tYWVzMTI4LWN0cixhZXMxOTItY3Ry LGFlczI1Ni1jdHIKLS0uRWQKLS0uUHAKLSBUaGUgbGlzdCBvZiBhdmFpbGFibGUgY2lwaGVycyBt YXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwotIC5RcSBzc2ggLVEgY2lwaGVyIC4KLSAuSXQgQ20g Q2xpZW50QWxpdmVDb3VudE1heAotQEAgLTc3NCw1MyArNzY4LDQzIEBAIEZvciB0aGlzIHRvIHdv cmsKLSAuQ20gR1NTQVBJS2V5RXhjaGFuZ2UKLSBuZWVkcyB0byBiZSBlbmFibGVkIGluIHRoZSBz ZXJ2ZXIgYW5kIGFsc28gdXNlZCBieSB0aGUgY2xpZW50LgotIC5JdCBDbSBHU1NBUElLZXhBbGdv cml0aG1zCi0rVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQotKy5YciBjcnlw dG8tcG9saWNpZXMgNyAuCi0rSW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0byBtb2Rp ZnkgdGhlIGRlZmF1bHRzIGFuZCBob3cgdG8gY3VzdG9taXplIGV4aXN0aW5nIHBvbGljaWVzIHdp dGggc3ViLXBvbGljaWVzIGFyZSBwcmVzZW50IGluIG1hbnVhbCBwYWdlCi0rLlhyIHVwZGF0ZS1j cnlwdG8tcG9saWNpZXMgOCAuCi0rLlBwCi0gVGhlIGxpc3Qgb2Yga2V5IGV4Y2hhbmdlIGFsZ29y aXRobXMgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgR1NTQVBJCi0ga2V5IGV4Y2hhbmdlLiBQb3NzaWJs ZSB2YWx1ZXMgYXJlCi0gLkJkIC1saXRlcmFsIC1vZmZzZXQgM24KLS1nc3MtZ2V4LXNoYTEtLAot LWdzcy1ncm91cDEtc2hhMS0sCi0tZ3NzLWdyb3VwMTQtc2hhMS0sCi0tZ3NzLWdyb3VwMTQtc2hh MjU2LSwKLS1nc3MtZ3JvdXAxNi1zaGE1MTItLAotLWdzcy1uaXN0cDI1Ni1zaGEyNTYtLAotK2dz cy1nZXgtc2hhMS0KLStnc3MtZ3JvdXAxLXNoYTEtCi0rZ3NzLWdyb3VwMTQtc2hhMS0KLStnc3Mt Z3JvdXAxNC1zaGEyNTYtCi0rZ3NzLWdyb3VwMTYtc2hhNTEyLQotK2dzcy1uaXN0cDI1Ni1zaGEy NTYtCi0gZ3NzLWN1cnZlMjU1MTktc2hhMjU2LQotIC5FZAotLS5QcAotLVRoZSBkZWZhdWx0IGlz Ci0tLkRxIGdzcy1ncm91cDE0LXNoYTI1Ni0sZ3NzLWdyb3VwMTYtc2hhNTEyLSxnc3MtbmlzdHAy NTYtc2hhMjU2LSwKLS1nc3MtY3VydmUyNTUxOS1zaGEyNTYtLGdzcy1ncm91cDE0LXNoYTEtLGdz cy1nZXgtc2hhMS0gLgotIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byBjb25uZWN0aW9ucyB1 c2luZyBHU1NBUEkuCi0gLkl0IENtIEhvc3RiYXNlZEFjY2VwdGVkQWxnb3JpdGhtcwotK1RoZSBk ZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKLSsuWHIgY3J5cHRvLXBvbGljaWVzIDcg LgotK0luZm9ybWF0aW9uIGFib3V0IGRlZmF1bHRzLCBob3cgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0 cyBhbmQgaG93IHRvIGN1c3RvbWl6ZSBleGlzdGluZyBwb2xpY2llcyB3aXRoIHN1Yi1wb2xpY2ll cyBhcmUgcHJlc2VudCBpbiBtYW51YWwgcGFnZQotKy5YciB1cGRhdGUtY3J5cHRvLXBvbGljaWVz IDggLgotKy5QcAotIFNwZWNpZmllcyB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobXMgdGhhdCB3aWxs IGJlIGFjY2VwdGVkIGZvciBob3N0YmFzZWQKLSBhdXRoZW50aWNhdGlvbiBhcyBhIGxpc3Qgb2Yg Y29tbWEtc2VwYXJhdGVkIHBhdHRlcm5zLgotIEFsdGVybmF0ZWx5IGlmIHRoZSBzcGVjaWZpZWQg bGlzdCBiZWdpbnMgd2l0aCBhCi0gLlNxICsKLSBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmll ZCBzaWduYXR1cmUgYWxnb3JpdGhtcyB3aWxsIGJlIGFwcGVuZGVkIHRvCi0tdGhlIGRlZmF1bHQg c2V0IGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCi0rdGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVm YXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KLSBJZiB0aGUgc3BlY2lmaWVkIGxp c3QgYmVnaW5zIHdpdGggYQotIC5TcSAtCi0gY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQg c2lnbmF0dXJlIGFsZ29yaXRobXMgKGluY2x1ZGluZyB3aWxkY2FyZHMpCi0td2lsbCBiZSByZW1v dmVkIGZyb20gdGhlIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCi0rd2ls bCBiZSByZW1vdmVkIGZyb20gdGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVh ZCBvZiByZXBsYWNpbmcgdGhlbS4KLSBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGgg YQotIC5TcSBeCi0gY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgc2lnbmF0dXJlIGFsZ29y aXRobXMgd2lsbCBiZSBwbGFjZWQgYXQKLS10aGUgaGVhZCBvZiB0aGUgZGVmYXVsdCBzZXQuCi0t VGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzOgotLS5CZCAtbGl0ZXJhbCAtb2Zmc2V0IDNu Ci0tc3NoLWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20sCi0tZWNkc2Etc2hhMi1uaXN0cDI1 Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKLS1lY2RzYS1zaGEyLW5pc3RwMzg0LWNlcnQtdjAxQG9w ZW5zc2guY29tLAotLWVjZHNhLXNoYTItbmlzdHA1MjEtY2VydC12MDFAb3BlbnNzaC5jb20sCi0t c2stc3NoLWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20sCi0tc2stZWNkc2Etc2hhMi1uaXN0 cDI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKLS1yc2Etc2hhMi01MTItY2VydC12MDFAb3BlbnNz aC5jb20sCi0tcnNhLXNoYTItMjU2LWNlcnQtdjAxQG9wZW5zc2guY29tLAotLXNzaC1lZDI1NTE5 LAotLWVjZHNhLXNoYTItbmlzdHAyNTYsZWNkc2Etc2hhMi1uaXN0cDM4NCxlY2RzYS1zaGEyLW5p c3RwNTIxLAotLXNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tLAotLXNrLWVjZHNhLXNoYTItbmlz dHAyNTZAb3BlbnNzaC5jb20sCi0tcnNhLXNoYTItNTEyLHJzYS1zaGEyLTI1NgotLS5FZAotK3Ro ZSBoZWFkIG9mIHRoZSBidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0LgotIC5QcAotIFRoZSBs aXN0IG9mIGF2YWlsYWJsZSBzaWduYXR1cmUgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5l ZCB1c2luZwotIC5RcSBzc2ggLVEgSG9zdGJhc2VkQWNjZXB0ZWRBbGdvcml0aG1zIC4KLUBAIC04 ODcsMjUgKzg3MSwxNCBAQCBpcyBzcGVjaWZpZWQsIHRoZSBsb2NhdGlvbiBvZiB0aGUgc29ja2V0 IHdpbGwgYmUgcmVhZCBmcm9tIHRoZQotIC5FdiBTU0hfQVVUSF9TT0NLCi0gZW52aXJvbm1lbnQg dmFyaWFibGUuCi0gLkl0IENtIEhvc3RLZXlBbGdvcml0aG1zCi0rVGhlIGRlZmF1bHQgaXMgaGFu ZGxlZCBzeXN0ZW0td2lkZSBieQotKy5YciBjcnlwdG8tcG9saWNpZXMgNyAuCi0rSW5mb3JtYXRp b24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0byBtb2RpZnkgdGhlIGRlZmF1bHRzIGFuZCBob3cgdG8g Y3VzdG9taXplIGV4aXN0aW5nIHBvbGljaWVzIHdpdGggc3ViLXBvbGljaWVzIGFyZSBwcmVzZW50 IGluIG1hbnVhbCBwYWdlCi0rLlhyIHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMgOCAuCi0rLlBwCi0g U3BlY2lmaWVzIHRoZSBob3N0IGtleSBzaWduYXR1cmUgYWxnb3JpdGhtcwotIHRoYXQgdGhlIHNl cnZlciBvZmZlcnMuCi0gVGhlIGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzOgotLS5CZCAtbGl0 ZXJhbCAtb2Zmc2V0IDNuCi0tc3NoLWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20sCi0tZWNk c2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKLS1lY2RzYS1zaGEyLW5pc3Rw Mzg0LWNlcnQtdjAxQG9wZW5zc2guY29tLAotLWVjZHNhLXNoYTItbmlzdHA1MjEtY2VydC12MDFA b3BlbnNzaC5jb20sCi0tc2stc3NoLWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20sCi0tc2st ZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKLS1yc2Etc2hhMi01MTIt Y2VydC12MDFAb3BlbnNzaC5jb20sCi0tcnNhLXNoYTItMjU2LWNlcnQtdjAxQG9wZW5zc2guY29t LAotLXNzaC1lZDI1NTE5LAotLWVjZHNhLXNoYTItbmlzdHAyNTYsZWNkc2Etc2hhMi1uaXN0cDM4 NCxlY2RzYS1zaGEyLW5pc3RwNTIxLAotLXNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tLAotLXNr LWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20sCi0tcnNhLXNoYTItNTEyLHJzYS1zaGEy LTI1NgotLS5FZAotLS5QcAotIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzaWduYXR1cmUgYWxnb3Jp dGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwotIC5RcSBzc2ggLVEgSG9zdEtleUFsZ29y aXRobXMgLgotIC5JdCBDbSBJZ25vcmVSaG9zdHMKLUBAIC0xMDUxLDYgKzEwMjQsMTEgQEAgU3Bl Y2lmaWVzIHdoZXRoZXIgdG8gbG9vayBhdCAuazVsb2dpbiBmaWxlIGZvciB1c2VyJ3MgYWxpYXNl cy4KLSBUaGUgZGVmYXVsdCBpcwotIC5DbSB5ZXMgLgotIC5JdCBDbSBLZXhBbGdvcml0aG1zCi0r VGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQotKy5YciBjcnlwdG8tcG9saWNp ZXMgNyAuCi0rSW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0byBtb2RpZnkgdGhlIGRl ZmF1bHRzIGFuZCBob3cgdG8gY3VzdG9taXplIGV4aXN0aW5nIHBvbGljaWVzIHdpdGggc3ViLXBv bGljaWVzIGFyZSBwcmVzZW50IGluIG1hbnVhbCBwYWdlCi0rLlhyIHVwZGF0ZS1jcnlwdG8tcG9s aWNpZXMgOCAuCi0rLlBwCi0gU3BlY2lmaWVzIHRoZSBwZXJtaXR0ZWQgS0VYIChLZXkgRXhjaGFu Z2UpIGFsZ29yaXRobXMgdGhhdCB0aGUgc2VydmVyIHdpbGwKLSBvZmZlciB0byBjbGllbnRzLgot IFRoZSBvcmRlcmluZyBvZiB0aGlzIGxpc3QgaXMgbm90IGltcG9ydGFudCwgYXMgdGhlIGNsaWVu dCBzcGVjaWZpZXMgdGhlCi1AQCAtMTA1OSwxNiArMTAzNywxNiBAQCBNdWx0aXBsZSBhbGdvcml0 aG1zIG11c3QgYmUgY29tbWEtc2VwYXJhdGVkLgotIC5QcAotIElmIHRoZSBzcGVjaWZpZWQgbGlz dCBiZWdpbnMgd2l0aCBhCi0gLlNxICsKLS1jaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBh bGdvcml0aG1zIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGRlZmF1bHQgc2V0Ci0taW5zdGVhZCBv ZiByZXBsYWNpbmcgdGhlbS4KLStjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBtZXRob2Rz IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJ1aWx0LWluCi0rb3BlbnNzaCBkZWZhdWx0IHNldCBp bnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMg d2l0aCBhCi0gLlNxIC0KLSBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1z IChpbmNsdWRpbmcgd2lsZGNhcmRzKSB3aWxsIGJlIHJlbW92ZWQKLS1mcm9tIHRoZSBkZWZhdWx0 IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotK2Zyb20gdGhlIGJ1aWx0LWluIG9wZW5z c2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KLSBJZiB0aGUgc3BlY2lm aWVkIGxpc3QgYmVnaW5zIHdpdGggYQotIC5TcSBeCi0gY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVj aWZpZWQgYWxnb3JpdGhtcyB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgaGVhZCBvZiB0aGUKLS1kZWZh dWx0IHNldC4KLStidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0LgotIC5QcAotIFRoZSBzdXBw b3J0ZWQgYWxnb3JpdGhtcyBhcmU6Ci0gLlBwCi1AQCAtMTEwNSwxNCArMTA4Myw2IEBAIHNudHJ1 cDc2MXgyNTUxOS1zaGE1MTIKLSBzbnRydXA3NjF4MjU1MTktc2hhNTEyQG9wZW5zc2guY29tCi0g LkVsCi0gLlBwCi0tVGhlIGRlZmF1bHQgaXM6Ci0tLkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50 Ci0tbWxrZW03Njh4MjU1MTktc2hhMjU2LAotLXNudHJ1cDc2MXgyNTUxOS1zaGE1MTIsc250cnVw NzYxeDI1NTE5LXNoYTUxMkBvcGVuc3NoLmNvbSwKLS1jdXJ2ZTI1NTE5LXNoYTI1NixjdXJ2ZTI1 NTE5LXNoYTI1NkBsaWJzc2gub3JnLAotLWVjZGgtc2hhMi1uaXN0cDI1NixlY2RoLXNoYTItbmlz dHAzODQsZWNkaC1zaGEyLW5pc3RwNTIxCi0tLkVkCi0tLlBwCi0gVGhlIGxpc3Qgb2Ygc3VwcG9y dGVkIGtleSBleGNoYW5nZSBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCi0g LlFxIHNzaCAtUSBLZXhBbGdvcml0aG1zIC4KLSAuSXQgQ20gTGlzdGVuQWRkcmVzcwotQEAgLTEx OTksMjEgKzExNjksMjYgQEAgZnVuY3Rpb24sIGFuZCBhbGwgY29kZSBpbiB0aGUKLSBmaWxlLgot IFRoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgYW5kIG5vIG92ZXJyaWRlcyBh cmUgZW5hYmxlZCBieSBkZWZhdWx0LgotIC5JdCBDbSBNQUNzCi0rVGhlIGRlZmF1bHQgaXMgaGFu ZGxlZCBzeXN0ZW0td2lkZSBieQotKy5YciBjcnlwdG8tcG9saWNpZXMgNyAuCi0rSW5mb3JtYXRp b24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0byBtb2RpZnkgdGhlIGRlZmF1bHRzIGFuZCBob3cgdG8g Y3VzdG9taXplIGV4aXN0aW5nIHBvbGljaWVzIHdpdGggc3ViLXBvbGljaWVzIGFyZSBwcmVzZW50 IGluIG1hbnVhbCBwYWdlCi0rLlhyIHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMgOCAuCi0rLlBwCi0g U3BlY2lmaWVzIHRoZSBhdmFpbGFibGUgTUFDIChtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUp IGFsZ29yaXRobXMuCi0gVGhlIE1BQyBhbGdvcml0aG0gaXMgdXNlZCBmb3IgZGF0YSBpbnRlZ3Jp dHkgcHJvdGVjdGlvbi4KLSBNdWx0aXBsZSBhbGdvcml0aG1zIG11c3QgYmUgY29tbWEtc2VwYXJh dGVkLgotIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCi0gLlNxICsKLS1jaGFy YWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIHdpbGwgYmUgYXBwZW5kZWQgdG8g dGhlIGRlZmF1bHQgc2V0Ci0taW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KLStjaGFyYWN0ZXIs IHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJ1 aWx0LWluCi0rb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgot IElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCi0gLlNxIC0KLSBjaGFyYWN0ZXIs IHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIChpbmNsdWRpbmcgd2lsZGNhcmRzKSB3aWxs IGJlIHJlbW92ZWQKLS1mcm9tIHRoZSBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0 aGVtLgotK2Zyb20gdGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiBy ZXBsYWNpbmcgdGhlbS4KLSBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQotIC5T cSBeCi0gY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcyB3aWxsIGJlIHBs YWNlZCBhdCB0aGUgaGVhZCBvZiB0aGUKLS1kZWZhdWx0IHNldC4KLStidWlsdC1pbiBvcGVuc3No IGRlZmF1bHQgc2V0LgotIC5QcAotIFRoZSBhbGdvcml0aG1zIHRoYXQgY29udGFpbgotIC5RcSAt ZXRtCi1AQCAtMTI1NiwxNSArMTIzMSw2IEBAIHVtYWMtNjQtZXRtQG9wZW5zc2guY29tCi0gdW1h Yy0xMjgtZXRtQG9wZW5zc2guY29tCi0gLkVsCi0gLlBwCi0tVGhlIGRlZmF1bHQgaXM6Ci0tLkJk IC1saXRlcmFsIC1vZmZzZXQgaW5kZW50Ci0tdW1hYy02NC1ldG1Ab3BlbnNzaC5jb20sdW1hYy0x MjgtZXRtQG9wZW5zc2guY29tLAotLWhtYWMtc2hhMi0yNTYtZXRtQG9wZW5zc2guY29tLGhtYWMt c2hhMi01MTItZXRtQG9wZW5zc2guY29tLAotLWhtYWMtc2hhMS1ldG1Ab3BlbnNzaC5jb20sCi0t dW1hYy02NEBvcGVuc3NoLmNvbSx1bWFjLTEyOEBvcGVuc3NoLmNvbSwKLS1obWFjLXNoYTItMjU2 LGhtYWMtc2hhMi01MTIsaG1hYy1zaGExCi0tLkVkCi0tLlBwCi0gVGhlIGxpc3Qgb2YgYXZhaWxh YmxlIE1BQyBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCi0gLlFxIHNzaCAt USBtYWMgLgotIC5JdCBDbSBNYXRjaAotQEAgLTE3NTEsMzYgKzE3MTcsMjUgQEAgb3IgZXF1aXZh bGVudC4pCi0gVGhlIGRlZmF1bHQgaXMKLSAuQ20geWVzIC4KLSAuSXQgQ20gUHVia2V5QWNjZXB0 ZWRBbGdvcml0aG1zCi0rVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQotKy5Y ciBjcnlwdG8tcG9saWNpZXMgNyAuCi0rSW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0 byBtb2RpZnkgdGhlIGRlZmF1bHRzIGFuZCBob3cgdG8gY3VzdG9taXplIGV4aXN0aW5nIHBvbGlj aWVzIHdpdGggc3ViLXBvbGljaWVzIGFyZSBwcmVzZW50IGluIG1hbnVhbCBwYWdlCi0rLlhyIHVw ZGF0ZS1jcnlwdG8tcG9saWNpZXMgOCAuCi0rLlBwCi0gU3BlY2lmaWVzIHRoZSBzaWduYXR1cmUg YWxnb3JpdGhtcyB0aGF0IHdpbGwgYmUgYWNjZXB0ZWQgZm9yIHB1YmxpYyBrZXkKLSBhdXRoZW50 aWNhdGlvbiBhcyBhIGxpc3Qgb2YgY29tbWEtc2VwYXJhdGVkIHBhdHRlcm5zLgotIEFsdGVybmF0 ZWx5IGlmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCi0gLlNxICsKLS1jaGFyYWN0 ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhl IGRlZmF1bHQgc2V0Ci0taW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KLStjaGFyYWN0ZXIsIHRo ZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJ1aWx0 LWluCi0rb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgotIElm IHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCi0gLlNxIC0KLSBjaGFyYWN0ZXIsIHRo ZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIChpbmNsdWRpbmcgd2lsZGNhcmRzKSB3aWxsIGJl IHJlbW92ZWQKLS1mcm9tIHRoZSBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVt LgotK2Zyb20gdGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBs YWNpbmcgdGhlbS4KLSBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQotIC5TcSBe Ci0gY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcyB3aWxsIGJlIHBsYWNl ZCBhdCB0aGUgaGVhZCBvZiB0aGUKLS1kZWZhdWx0IHNldC4KLS1UaGUgZGVmYXVsdCBmb3IgdGhp cyBvcHRpb24gaXM6Ci0tLkJkIC1saXRlcmFsIC1vZmZzZXQgM24KLS1zc2gtZWQyNTUxOS1jZXJ0 LXYwMUBvcGVuc3NoLmNvbSwKLS1lY2RzYS1zaGEyLW5pc3RwMjU2LWNlcnQtdjAxQG9wZW5zc2gu Y29tLAotLWVjZHNhLXNoYTItbmlzdHAzODQtY2VydC12MDFAb3BlbnNzaC5jb20sCi0tZWNkc2Et c2hhMi1uaXN0cDUyMS1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKLS1zay1zc2gtZWQyNTUxOS1jZXJ0 LXYwMUBvcGVuc3NoLmNvbSwKLS1zay1lY2RzYS1zaGEyLW5pc3RwMjU2LWNlcnQtdjAxQG9wZW5z c2guY29tLAotLXJzYS1zaGEyLTUxMi1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKLS1yc2Etc2hhMi0y NTYtY2VydC12MDFAb3BlbnNzaC5jb20sCi0tc3NoLWVkMjU1MTksCi0tZWNkc2Etc2hhMi1uaXN0 cDI1NixlY2RzYS1zaGEyLW5pc3RwMzg0LGVjZHNhLXNoYTItbmlzdHA1MjEsCi0tc2stc3NoLWVk MjU1MTlAb3BlbnNzaC5jb20sCi0tc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwK LS1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2Ci0tLkVkCi0rYnVpbHQtaW4gb3BlbnNzaCBkZWZh dWx0IHNldC4KLSAuUHAKLSBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc2lnbmF0dXJlIGFsZ29yaXRo bXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKLSAuUXEgc3NoIC1RIFB1YmtleUFjY2VwdGVk QWxnb3JpdGhtcyAuCi1AQCAtMjI4MSw3ICsyMjM2LDkgQEAgVGhpcyBmaWxlIHNob3VsZCBiZSB3 cml0YWJsZSBieSByb290IG9ubHksIGJ1dCBpdCBpcyByZWNvbW1lbmRlZAotIC5FbAotIC5TaCBT RUUgQUxTTwotIC5YciBzZnRwLXNlcnZlciA4ICwKLS0uWHIgc3NoZCA4Ci0rLlhyIHNzaGQgOCAs Ci0rLlhyIGNyeXB0by1wb2xpY2llcyA3ICwKLSsuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2llcyA4 Ci0gLlNoIEFVVEhPUlMKLSAuQW4gLW5vc3BsaXQKLSBPcGVuU1NIIGlzIGEgZGVyaXZhdGl2ZSBv ZiB0aGUgb3JpZ2luYWwgYW5kIGZyZWUKLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDI3 LW9wZW5zc2gtOC4wcDEtY3J5cHRvLXBvbGljaWVzLnBhdGNoIGIvMDAyNy1vcGVuc3NoLTguMHAx LWNyeXB0by1wb2xpY2llcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4zNzVmYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvMDAyNy1vcGVuc3NoLTguMHAxLWNyeXB0by1w b2xpY2llcy5wYXRjaApAQCAtMCwwICsxLDY2NCBAQAorRnJvbSAwOTE0NzY2YWVkOTAxNzgwZmI3 NDRiNGJhMDZlNTAwYWQwM2NmNDI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1p dHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkgMjAy NSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDI3LzU0XSBvcGVuc3NoLTguMHAxLWNy eXB0by1wb2xpY2llcworCistLS0KKyBzc2hfY29uZmlnLjUgIHwgMTY4ICsrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNzaGRfY29uZmlnLjUgfCAxODYgKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAyIGZpbGVz IGNoYW5nZWQsIDE0MCBpbnNlcnRpb25zKCspLCAyMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1n aXQgYS9zc2hfY29uZmlnLjUgYi9zc2hfY29uZmlnLjUKK2luZGV4IDllNTE2Mzc3NC4uMzA2ZmEx ZDhhIDEwMDY0NAorLS0tIGEvc3NoX2NvbmZpZy41CisrKysgYi9zc2hfY29uZmlnLjUKK0BAIC00 MzgsMTcgKzQzOCwxMyBAQCBBIHNpbmdsZSBhcmd1bWVudCBvZgorIGNhdXNlcyBubyBDTkFNRXMg dG8gYmUgY29uc2lkZXJlZCBmb3IgY2Fub25pY2FsaXphdGlvbi4KKyBUaGlzIGlzIHRoZSBkZWZh dWx0IGJlaGF2aW91ci4KKyAuSXQgQ20gQ0FTaWduYXR1cmVBbGdvcml0aG1zCisrVGhlIGRlZmF1 bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQorKy5YciBjcnlwdG8tcG9saWNpZXMgNyAuCisr SW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0byBtb2RpZnkgdGhlIGRlZmF1bHRzIGFu ZCBob3cgdG8gY3VzdG9taXplIGV4aXN0aW5nIHBvbGljaWVzIHdpdGggc3ViLXBvbGljaWVzIGFy ZSBwcmVzZW50IGluIG1hbnVhbCBwYWdlCisrLlhyIHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMgOCAu CisrLlBwCisgU3BlY2lmaWVzIHdoaWNoIGFsZ29yaXRobXMgYXJlIGFsbG93ZWQgZm9yIHNpZ25p bmcgb2YgY2VydGlmaWNhdGVzCisgYnkgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgKENBcykuCist VGhlIGRlZmF1bHQgaXM6CistLkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50Cistc3NoLWVkMjU1 MTksZWNkc2Etc2hhMi1uaXN0cDI1NiwKKy1lY2RzYS1zaGEyLW5pc3RwMzg0LGVjZHNhLXNoYTIt bmlzdHA1MjEsCistc2stc3NoLWVkMjU1MTlAb3BlbnNzaC5jb20sCistc2stZWNkc2Etc2hhMi1u aXN0cDI1NkBvcGVuc3NoLmNvbSwKKy1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2CistLkVkCist LlBwCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKKyAuU3EgKworIGNoYXJh Y3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0 aGUgZGVmYXVsdCBzZXQKK0BAIC01ODcsMjAgKzU4MywyNSBAQCBJZiB0aGUgb3B0aW9uIGlzIHNl dCB0bworICh0aGUgZGVmYXVsdCksCisgdGhlIGNoZWNrIHdpbGwgbm90IGJlIGV4ZWN1dGVkLgor IC5JdCBDbSBDaXBoZXJzCisrVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQor Ky5YciBjcnlwdG8tcG9saWNpZXMgNyAuCisrSW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdHMsIGhv dyB0byBtb2RpZnkgdGhlIGRlZmF1bHRzIGFuZCBob3cgdG8gY3VzdG9taXplIGV4aXN0aW5nIHBv bGljaWVzIHdpdGggc3ViLXBvbGljaWVzIGFyZSBwcmVzZW50IGluIG1hbnVhbCBwYWdlCisrLlhy IHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMgOCAuCisrLlBwCisgU3BlY2lmaWVzIHRoZSBjaXBoZXJz IGFsbG93ZWQgYW5kIHRoZWlyIG9yZGVyIG9mIHByZWZlcmVuY2UuCisgTXVsdGlwbGUgY2lwaGVy cyBtdXN0IGJlIGNvbW1hLXNlcGFyYXRlZC4KKyBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5z IHdpdGggYQorIC5TcSArCistY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgY2lwaGVycyB3 aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBkZWZhdWx0IHNldAorLWluc3RlYWQgb2YgcmVwbGFjaW5n IHRoZW0uCisrY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgY2lwaGVycyB3aWxsIGJlIGFw cGVuZGVkIHRvIHRoZSBidWlsdC1pbgorK29wZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiBy ZXBsYWNpbmcgdGhlbS4KKyBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQorIC5T cSAtCisgY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgY2lwaGVycyAoaW5jbHVkaW5nIHdp bGRjYXJkcykgd2lsbCBiZSByZW1vdmVkCistZnJvbSB0aGUgZGVmYXVsdCBzZXQgaW5zdGVhZCBv ZiByZXBsYWNpbmcgdGhlbS4KKytmcm9tIHRoZSBidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0 IGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lu cyB3aXRoIGEKKyAuU3EgXgorIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGNpcGhlcnMg d2lsbCBiZSBwbGFjZWQgYXQgdGhlIGhlYWQgb2YgdGhlCistZGVmYXVsdCBzZXQuCisrYnVpbHQt aW4gb3BlbnNzaCBkZWZhdWx0IHNldC4KKyAuUHAKKyBUaGUgc3VwcG9ydGVkIGNpcGhlcnMgYXJl OgorIC5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAorQEAgLTYxNiwxMyArNjE3LDYgQEAgYWVz MjU2LWdjbUBvcGVuc3NoLmNvbQorIGNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tCisgLkVk CisgLlBwCistVGhlIGRlZmF1bHQgaXM6CistLkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50Cist Y2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20sCistYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSxh ZXMyNTYtZ2NtQG9wZW5zc2guY29tLAorLWFlczEyOC1jdHIsYWVzMTkyLWN0cixhZXMyNTYtY3Ry CistLkVkCistLlBwCisgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNpcGhlcnMgbWF5IGFsc28gYmUg b2J0YWluZWQgdXNpbmcKKyAuUXEgc3NoIC1RIGNpcGhlciAuCisgLkl0IENtIENsZWFyQWxsRm9y d2FyZGluZ3MKK0BAIC0xMDIyLDYgKzEwMTYsMTEgQEAgY29tbWFuZCBsaW5lIHdpbGwgYmUgcGFz c2VkIHVudG91Y2hlZCB0byB0aGUgR1NTQVBJIGxpYnJhcnkuCisgVGhlIGRlZmF1bHQgaXMKKyAu RHEgbm8gLgorIC5JdCBDbSBHU1NBUElLZXhBbGdvcml0aG1zCisrVGhlIGRlZmF1bHQgaXMgaGFu ZGxlZCBzeXN0ZW0td2lkZSBieQorKy5YciBjcnlwdG8tcG9saWNpZXMgNyAuCisrSW5mb3JtYXRp b24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0byBtb2RpZnkgdGhlIGRlZmF1bHRzIGFuZCBob3cgdG8g Y3VzdG9taXplIGV4aXN0aW5nIHBvbGljaWVzIHdpdGggc3ViLXBvbGljaWVzIGFyZSBwcmVzZW50 IGluIG1hbnVhbCBwYWdlCisrLlhyIHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMgOCAuCisrLlBwCisg VGhlIGxpc3Qgb2Yga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgdGhhdCBhcmUgb2ZmZXJlZCBmb3Ig R1NTQVBJCisga2V5IGV4Y2hhbmdlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCisgLkJkIC1saXRlcmFs IC1vZmZzZXQgM24KK0BAIC0xMDM0LDEwICsxMDMzLDggQEAgZ3NzLW5pc3RwMjU2LXNoYTI1Ni0s CisgZ3NzLWN1cnZlMjU1MTktc2hhMjU2LQorIC5FZAorIC5QcAorLVRoZSBkZWZhdWx0IGlzCist LkRxIGdzcy1ncm91cDE0LXNoYTI1Ni0sZ3NzLWdyb3VwMTYtc2hhNTEyLSxnc3MtbmlzdHAyNTYt c2hhMjU2LSwKKy1nc3MtY3VydmUyNTUxOS1zaGEyNTYtLGdzcy1ncm91cDE0LXNoYTEtLGdzcy1n ZXgtc2hhMS0gLgorIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byBjb25uZWN0aW9ucyB1c2lu ZyBHU1NBUEkuCisrLlBwCisgLkl0IENtIEhhc2hLbm93bkhvc3RzCisgSW5kaWNhdGVzIHRoYXQK KyAuWHIgc3NoIDEKK0BAIC0xMDU2LDM4ICsxMDUzLDI1IEBAIHdpbGwgbm90IGJlIGNvbnZlcnRl ZCBhdXRvbWF0aWNhbGx5LAorIGJ1dCBtYXkgYmUgbWFudWFsbHkgaGFzaGVkIHVzaW5nCisgLlhy IHNzaC1rZXlnZW4gMSAuCisgLkl0IENtIEhvc3RiYXNlZEFjY2VwdGVkQWxnb3JpdGhtcworK1Ro ZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKKysuWHIgY3J5cHRvLXBvbGljaWVz IDcgLgorK0luZm9ybWF0aW9uIGFib3V0IGRlZmF1bHRzLCBob3cgdG8gbW9kaWZ5IHRoZSBkZWZh dWx0cyBhbmQgaG93IHRvIGN1c3RvbWl6ZSBleGlzdGluZyBwb2xpY2llcyB3aXRoIHN1Yi1wb2xp Y2llcyBhcmUgcHJlc2VudCBpbiBtYW51YWwgcGFnZQorKy5YciB1cGRhdGUtY3J5cHRvLXBvbGlj aWVzIDggLgorKy5QcAorIFNwZWNpZmllcyB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobXMgdGhhdCB3 aWxsIGJlIHVzZWQgZm9yIGhvc3RiYXNlZAorIGF1dGhlbnRpY2F0aW9uIGFzIGEgY29tbWEtc2Vw YXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMuCisgQWx0ZXJuYXRlbHkgaWYgdGhlIHNwZWNpZmllZCBs aXN0IGJlZ2lucyB3aXRoIGEKKyAuU3EgKworIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVk IHNpZ25hdHVyZSBhbGdvcml0aG1zIHdpbGwgYmUgYXBwZW5kZWQKKy10byB0aGUgZGVmYXVsdCBz ZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KKyt0byB0aGUgYnVpbHQtaW4gb3BlbnNzaCBk ZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorIElmIHRoZSBzcGVjaWZpZWQg bGlzdCBiZWdpbnMgd2l0aCBhCisgLlNxIC0KKyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmll ZCBzaWduYXR1cmUgYWxnb3JpdGhtcyAoaW5jbHVkaW5nIHdpbGRjYXJkcykKKy13aWxsIGJlIHJl bW92ZWQgZnJvbSB0aGUgZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KKyt3 aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0 ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0 aCBhCisgLlNxIF4KKyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBzaWduYXR1cmUgYWxn b3JpdGhtcyB3aWxsIGJlIHBsYWNlZAorLWF0IHRoZSBoZWFkIG9mIHRoZSBkZWZhdWx0IHNldC4K Ky1UaGUgZGVmYXVsdCBmb3IgdGhpcyBvcHRpb24gaXM6CistLkJkIC1saXRlcmFsIC1vZmZzZXQg M24KKy1zc2gtZWQyNTUxOS1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1lY2RzYS1zaGEyLW5pc3Rw MjU2LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLWVjZHNhLXNoYTItbmlzdHAzODQtY2VydC12MDFA b3BlbnNzaC5jb20sCistZWNkc2Etc2hhMi1uaXN0cDUyMS1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwK Ky1zay1zc2gtZWQyNTUxOS1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1zay1lY2RzYS1zaGEyLW5p c3RwMjU2LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXdlYmF1dGhuLXNrLWVjZHNhLXNoYTItbmlz dHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20sCistcnNhLXNoYTItNTEyLWNlcnQtdjAxQG9wZW5z c2guY29tLAorLXJzYS1zaGEyLTI1Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1zc2gtZWQyNTUx OSwKKy1lY2RzYS1zaGEyLW5pc3RwMjU2LGVjZHNhLXNoYTItbmlzdHAzODQsZWNkc2Etc2hhMi1u aXN0cDUyMSwKKy1zay1zc2gtZWQyNTUxOUBvcGVuc3NoLmNvbSwKKy1zay1lY2RzYS1zaGEyLW5p c3RwMjU2QG9wZW5zc2guY29tLAorLXdlYmF1dGhuLXNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3Bl bnNzaC5jb20sCistcnNhLXNoYTItNTEyLHJzYS1zaGEyLTI1NgorLS5FZAorK2F0IHRoZSBoZWFk IG9mIHRoZSBidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0LgorIC5QcAorIFRoZQorIC5GbCBR CitAQCAtMTE0Miw2ICsxMTI2LDE3IEBAIHRvIHByZWZlciB0aGVpciBhbGdvcml0aG1zLgorIC5Q cAorIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzaWduYXR1cmUgYWxnb3JpdGhtcyBtYXkgYWxzbyBi ZSBvYnRhaW5lZCB1c2luZworIC5RcSBzc2ggLVEgSG9zdEtleUFsZ29yaXRobXMgLgorKy5QcAor K1RoZSBwcm9wb3NlZAorKy5DbSBIb3N0S2V5QWxnb3JpdGhtcworK2R1cmluZyBLRVggYXJlIGxp bWl0ZWQgdG8gdGhlIHNldCBvZiBhbGdvcml0aG1zIHRoYXQgaXMgZGVmaW5lZCBpbgorKy5DbSBQ dWJrZXlBY2NlcHRlZEFsZ29yaXRobXMKKythbmQgdGhlcmVmb3JlIHRoZXkgYXJlIGluZGlyZWN0 bHkgYWZmZWN0ZWQgYnkgc3lzdGVtLXdpZGUKKysuWHIgY3J5cHRvX3BvbGljaWVzIDcgLgorKy5Y ciBjcnlwdG9fcG9saWNpZXMgNyBjYW4gbm90IGhhbmRsZSB0aGUgbGlzdCBvZiBob3N0IGtleSBh bGdvcml0aG1zIGRpcmVjdGx5IGFzIGRvaW5nIHNvCisrd291bGQgYnJlYWsgdGhlIG9yZGVyIGdp dmVuIGJ5IHRoZQorKy5QYSBrbm93bl9ob3N0cworK2ZpbGUuCisgLkl0IENtIEhvc3RLZXlBbGlh cworIFNwZWNpZmllcyBhbiBhbGlhcyB0aGF0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgdGhl CisgcmVhbCBob3N0IG5hbWUgd2hlbiBsb29raW5nIHVwIG9yIHNhdmluZyB0aGUgaG9zdCBrZXkK K0BAIC0xMzY0LDYgKzEzNTksMTEgQEAgaXQgbWF5IGJlIHplcm8gb3IgbW9yZSBvZjoKKyBhbmQK KyAuQ20gcGFtIC4KKyAuSXQgQ20gS2V4QWxnb3JpdGhtcworK1RoZSBkZWZhdWx0IGlzIGhhbmRs ZWQgc3lzdGVtLXdpZGUgYnkKKysuWHIgY3J5cHRvLXBvbGljaWVzIDcgLgorK0luZm9ybWF0aW9u IGFib3V0IGRlZmF1bHRzLCBob3cgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0cyBhbmQgaG93IHRvIGN1 c3RvbWl6ZSBleGlzdGluZyBwb2xpY2llcyB3aXRoIHN1Yi1wb2xpY2llcyBhcmUgcHJlc2VudCBp biBtYW51YWwgcGFnZQorKy5YciB1cGRhdGUtY3J5cHRvLXBvbGljaWVzIDggLgorKy5QcAorIFNw ZWNpZmllcyB0aGUgcGVybWl0dGVkIEtFWCAoS2V5IEV4Y2hhbmdlKSBhbGdvcml0aG1zIHRoYXQg d2lsbCBiZSB1c2VkIGFuZAorIHRoZWlyIHByZWZlcmVuY2Ugb3JkZXIuCisgVGhlIHNlbGVjdGVk IGFsZ29yaXRobSB3aWxsIGJlIHRoZSBmaXJzdCBhbGdvcml0aG0gaW4gdGhpcyBsaXN0IHRoYXQK K0BAIC0xMzcyLDI5ICsxMzcyLDE3IEBAIE11bHRpcGxlIGFsZ29yaXRobXMgbXVzdCBiZSBjb21t YS1zZXBhcmF0ZWQuCisgLlBwCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEK KyAuU3EgKworLWNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBi ZSBhcHBlbmRlZCB0byB0aGUgZGVmYXVsdCBzZXQKKy1pbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVt LgorK2NoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIG1ldGhvZHMgd2lsbCBiZSBhcHBlbmRl ZCB0byB0aGUgYnVpbHQtaW4KKytvcGVuc3NoIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFj aW5nIHRoZW0uCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKKyAuU3EgLQor IGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgKGluY2x1ZGluZyB3aWxk Y2FyZHMpIHdpbGwgYmUgcmVtb3ZlZAorLWZyb20gdGhlIGRlZmF1bHQgc2V0IGluc3RlYWQgb2Yg cmVwbGFjaW5nIHRoZW0uCisrZnJvbSB0aGUgYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNldCBp bnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMg d2l0aCBhCisgLlNxIF4KKyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1z IHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBoZWFkIG9mIHRoZQorLWRlZmF1bHQgc2V0LgorLS5QcAor LVRoZSBkZWZhdWx0IGlzOgorLS5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAorLW1sa2VtNzY4 eDI1NTE5LXNoYTI1NiwKKy1zbnRydXA3NjF4MjU1MTktc2hhNTEyLHNudHJ1cDc2MXgyNTUxOS1z aGE1MTJAb3BlbnNzaC5jb20sCistY3VydmUyNTUxOS1zaGEyNTYsY3VydmUyNTUxOS1zaGEyNTZA bGlic3NoLm9yZywKKy1lY2RoLXNoYTItbmlzdHAyNTYsZWNkaC1zaGEyLW5pc3RwMzg0LGVjZGgt c2hhMi1uaXN0cDUyMSwKKy1kaWZmaWUtaGVsbG1hbi1ncm91cC1leGNoYW5nZS1zaGEyNTYsCist ZGlmZmllLWhlbGxtYW4tZ3JvdXAxNi1zaGE1MTIsCistZGlmZmllLWhlbGxtYW4tZ3JvdXAxOC1z aGE1MTIsCistZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGEyNTYKKy0uRWQKKyAuUHAKKytidWls dC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0LgorIFRoZSBsaXN0IG9mIHN1cHBvcnRlZCBrZXkgZXhj aGFuZ2UgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZworIC5RcSBzc2ggLVEg a2V4IC4KKyAuSXQgQ20gS25vd25Ib3N0c0NvbW1hbmQKK0BAIC0xNTEwLDM3ICsxNDk4LDMzIEBA IGZ1bmN0aW9uLCBhbmQgYWxsIGNvZGUgaW4gdGhlCisgZmlsZS4KKyBUaGlzIG9wdGlvbiBpcyBp bnRlbmRlZCBmb3IgZGVidWdnaW5nIGFuZCBubyBvdmVycmlkZXMgYXJlIGVuYWJsZWQgYnkgZGVm YXVsdC4KKyAuSXQgQ20gTUFDcworK1RoZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUg YnkKKysuWHIgY3J5cHRvLXBvbGljaWVzIDcgLgorK0luZm9ybWF0aW9uIGFib3V0IGRlZmF1bHRz LCBob3cgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0cyBhbmQgaG93IHRvIGN1c3RvbWl6ZSBleGlzdGlu ZyBwb2xpY2llcyB3aXRoIHN1Yi1wb2xpY2llcyBhcmUgcHJlc2VudCBpbiBtYW51YWwgcGFnZQor Ky5YciB1cGRhdGUtY3J5cHRvLXBvbGljaWVzIDggLgorKy5QcAorIFNwZWNpZmllcyB0aGUgTUFD IChtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUpIGFsZ29yaXRobXMKKyBpbiBvcmRlciBvZiBw cmVmZXJlbmNlLgorIFRoZSBNQUMgYWxnb3JpdGhtIGlzIHVzZWQgZm9yIGRhdGEgaW50ZWdyaXR5 IHByb3RlY3Rpb24uCisgTXVsdGlwbGUgYWxnb3JpdGhtcyBtdXN0IGJlIGNvbW1hLXNlcGFyYXRl ZC4KKyBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQorIC5TcSArCistY2hhcmFj dGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRo ZSBkZWZhdWx0IHNldAorLWluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCisrY2hhcmFjdGVyLCB0 aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBidWls dC1pbgorK29wZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KKyBJ ZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQorIC5TcSAtCisgY2hhcmFjdGVyLCB0 aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcyAoaW5jbHVkaW5nIHdpbGRjYXJkcykgd2lsbCBi ZSByZW1vdmVkCistZnJvbSB0aGUgZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhl bS4KKytmcm9tIHRoZSBidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVw bGFjaW5nIHRoZW0uCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKKyAuU3Eg XgorIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBwbGFj ZWQgYXQgdGhlIGhlYWQgb2YgdGhlCistZGVmYXVsdCBzZXQuCisrYnVpbHQtaW4gb3BlbnNzaCBk ZWZhdWx0IHNldC4KKyAuUHAKKyBUaGUgYWxnb3JpdGhtcyB0aGF0IGNvbnRhaW4KKyAuUXEgLWV0 bQorIGNhbGN1bGF0ZSB0aGUgTUFDIGFmdGVyIGVuY3J5cHRpb24gKGVuY3J5cHQtdGhlbi1tYWMp LgorIFRoZXNlIGFyZSBjb25zaWRlcmVkIHNhZmVyIGFuZCB0aGVpciB1c2UgcmVjb21tZW5kZWQu CisgLlBwCistVGhlIGRlZmF1bHQgaXM6CistLkJkIC1saXRlcmFsIC1vZmZzZXQgaW5kZW50Cist dW1hYy02NC1ldG1Ab3BlbnNzaC5jb20sdW1hYy0xMjgtZXRtQG9wZW5zc2guY29tLAorLWhtYWMt c2hhMi0yNTYtZXRtQG9wZW5zc2guY29tLGhtYWMtc2hhMi01MTItZXRtQG9wZW5zc2guY29tLAor LWhtYWMtc2hhMS1ldG1Ab3BlbnNzaC5jb20sCistdW1hYy02NEBvcGVuc3NoLmNvbSx1bWFjLTEy OEBvcGVuc3NoLmNvbSwKKy1obWFjLXNoYTItMjU2LGhtYWMtc2hhMi01MTIsaG1hYy1zaGExCist LkVkCistLlBwCisgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIE1BQyBhbGdvcml0aG1zIG1heSBhbHNv IGJlIG9idGFpbmVkIHVzaW5nCisgLlFxIHNzaCAtUSBtYWMgLgorIC5JdCBDbSBOb0hvc3RBdXRo ZW50aWNhdGlvbkZvckxvY2FsaG9zdAorQEAgLTE3MjksNDEgKzE3MTMsMzEgQEAgaW5zdGVhZCBv ZiBjb250aW51aW5nIHRvIGV4ZWN1dGUgYW5kIHBhc3MgZGF0YS4KKyBUaGUgZGVmYXVsdCBpcwor IC5DbSBubyAuCisgLkl0IENtIFB1YmtleUFjY2VwdGVkQWxnb3JpdGhtcworK1RoZSBkZWZhdWx0 IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKKysuWHIgY3J5cHRvLXBvbGljaWVzIDcgLgorK0lu Zm9ybWF0aW9uIGFib3V0IGRlZmF1bHRzLCBob3cgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0cyBhbmQg aG93IHRvIGN1c3RvbWl6ZSBleGlzdGluZyBwb2xpY2llcyB3aXRoIHN1Yi1wb2xpY2llcyBhcmUg cHJlc2VudCBpbiBtYW51YWwgcGFnZQorKy5YciB1cGRhdGUtY3J5cHRvLXBvbGljaWVzIDggLgor Ky5QcAorIFNwZWNpZmllcyB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobXMgdGhhdCB3aWxsIGJlIHVz ZWQgZm9yIHB1YmxpYyBrZXkKKyBhdXRoZW50aWNhdGlvbiBhcyBhIGNvbW1hLXNlcGFyYXRlZCBs aXN0IG9mIHBhdHRlcm5zLgorIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCisg LlNxICsKKy1jaGFyYWN0ZXIsIHRoZW4gdGhlIGFsZ29yaXRobXMgYWZ0ZXIgaXQgd2lsbCBiZSBh cHBlbmRlZCB0byB0aGUgZGVmYXVsdAorLWluc3RlYWQgb2YgcmVwbGFjaW5nIGl0LgorK2NoYXJh Y3RlciwgdGhlbiB0aGUgYWxnb3JpdGhtcyBhZnRlciBpdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRo ZSBidWlsdC1pbgorK29wZW5zc2ggZGVmYXVsdCBpbnN0ZWFkIG9mIHJlcGxhY2luZyBpdC4KKyBJ ZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQorIC5TcSAtCisgY2hhcmFjdGVyLCB0 aGVuIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtcyAoaW5jbHVkaW5nIHdpbGRjYXJkcykgd2lsbCBi ZSByZW1vdmVkCistZnJvbSB0aGUgZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhl bS4KKytmcm9tIHRoZSBidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVw bGFjaW5nIHRoZW0uCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKKyAuU3Eg XgorIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBwbGFj ZWQgYXQgdGhlIGhlYWQgb2YgdGhlCistZGVmYXVsdCBzZXQuCistVGhlIGRlZmF1bHQgZm9yIHRo aXMgb3B0aW9uIGlzOgorLS5CZCAtbGl0ZXJhbCAtb2Zmc2V0IDNuCistc3NoLWVkMjU1MTktY2Vy dC12MDFAb3BlbnNzaC5jb20sCistZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVuc3No LmNvbSwKKy1lY2RzYS1zaGEyLW5pc3RwMzg0LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLWVjZHNh LXNoYTItbmlzdHA1MjEtY2VydC12MDFAb3BlbnNzaC5jb20sCistc2stc3NoLWVkMjU1MTktY2Vy dC12MDFAb3BlbnNzaC5jb20sCistc2stZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVu c3NoLmNvbSwKKy13ZWJhdXRobi1zay1lY2RzYS1zaGEyLW5pc3RwMjU2LWNlcnQtdjAxQG9wZW5z c2guY29tLAorLXJzYS1zaGEyLTUxMi1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1yc2Etc2hhMi0y NTYtY2VydC12MDFAb3BlbnNzaC5jb20sCistc3NoLWVkMjU1MTksCistZWNkc2Etc2hhMi1uaXN0 cDI1NixlY2RzYS1zaGEyLW5pc3RwMzg0LGVjZHNhLXNoYTItbmlzdHA1MjEsCistc2stc3NoLWVk MjU1MTlAb3BlbnNzaC5jb20sCistc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwK Ky13ZWJhdXRobi1zay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tLAorLXJzYS1zaGEy LTUxMixyc2Etc2hhMi0yNTYKKy0uRWQKKytidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0Lgor IC5QcAorIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzaWduYXR1cmUgYWxnb3JpdGhtcyBtYXkgYWxz byBiZSBvYnRhaW5lZCB1c2luZworIC5RcSBzc2ggLVEgUHVia2V5QWNjZXB0ZWRBbGdvcml0aG1z IC4KKysuUHAKKytUaGlzIG9wdGlvbiBhZmZlY3RzIGFsc28KKysuQ20gSG9zdEtleUFsZ29yaXRo bXMKKyAuSXQgQ20gUHVia2V5QXV0aGVudGljYXRpb24KKyBTcGVjaWZpZXMgd2hldGhlciB0byB0 cnkgcHVibGljIGtleSBhdXRoZW50aWNhdGlvbi4KKyBUaGUgYXJndW1lbnQgdG8gdGhpcyBrZXl3 b3JkIG11c3QgYmUKK0BAIC0yNTE3LDcgKzI0OTEsOSBAQCBmb3IgdGhvc2UgdXNlcnMgd2hvIGRv IG5vdCBoYXZlIGEgY29uZmlndXJhdGlvbiBmaWxlLgorIFRoaXMgZmlsZSBtdXN0IGJlIHdvcmxk LXJlYWRhYmxlLgorIC5FbAorIC5TaCBTRUUgQUxTTworLS5YciBzc2ggMQorKy5YciBzc2ggMSAs CisrLlhyIGNyeXB0by1wb2xpY2llcyA3ICwKKysuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2llcyA4 CisgLlNoIEFVVEhPUlMKKyAuQW4gLW5vc3BsaXQKKyBPcGVuU1NIIGlzIGEgZGVyaXZhdGl2ZSBv ZiB0aGUgb3JpZ2luYWwgYW5kIGZyZWUKK2RpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41IGIvc3No ZF9jb25maWcuNQoraW5kZXggMTc2Mjg3NGM0Li4xZDE2ZGFiYWYgMTAwNjQ0CistLS0gYS9zc2hk X2NvbmZpZy41CisrKysgYi9zc2hkX2NvbmZpZy41CitAQCAtMzgzLDE3ICszODMsMTMgQEAgSWYg dGhlIGFyZ3VtZW50IGlzCisgdGhlbiBubyBiYW5uZXIgaXMgZGlzcGxheWVkLgorIEJ5IGRlZmF1 bHQsIG5vIGJhbm5lciBpcyBkaXNwbGF5ZWQuCisgLkl0IENtIENBU2lnbmF0dXJlQWxnb3JpdGht cworK1RoZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKKysuWHIgY3J5cHRvLXBv bGljaWVzIDcgLgorK0luZm9ybWF0aW9uIGFib3V0IGRlZmF1bHRzLCBob3cgdG8gbW9kaWZ5IHRo ZSBkZWZhdWx0cyBhbmQgaG93IHRvIGN1c3RvbWl6ZSBleGlzdGluZyBwb2xpY2llcyB3aXRoIHN1 Yi1wb2xpY2llcyBhcmUgcHJlc2VudCBpbiBtYW51YWwgcGFnZQorKy5YciB1cGRhdGUtY3J5cHRv LXBvbGljaWVzIDggLgorKy5QcAorIFNwZWNpZmllcyB3aGljaCBhbGdvcml0aG1zIGFyZSBhbGxv d2VkIGZvciBzaWduaW5nIG9mIGNlcnRpZmljYXRlcworIGJ5IGNlcnRpZmljYXRlIGF1dGhvcml0 aWVzIChDQXMpLgorLVRoZSBkZWZhdWx0IGlzOgorLS5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVu dAorLXNzaC1lZDI1NTE5LGVjZHNhLXNoYTItbmlzdHAyNTYsCistZWNkc2Etc2hhMi1uaXN0cDM4 NCxlY2RzYS1zaGEyLW5pc3RwNTIxLAorLXNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tLAorLXNr LWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20sCistcnNhLXNoYTItNTEyLHJzYS1zaGEy LTI1NgorLS5FZAorLS5QcAorIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCisg LlNxICsKKyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIHdpbGwgYmUg YXBwZW5kZWQgdG8gdGhlIGRlZmF1bHQgc2V0CitAQCAtNTM3LDIwICs1MzMsMjUgQEAgVGhlIGRl ZmF1bHQgaXMKKyBpbmRpY2F0aW5nIG5vdCB0bworIC5YciBjaHJvb3QgMiAuCisgLkl0IENtIENp cGhlcnMKKytUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5CisrLlhyIGNyeXB0 by1wb2xpY2llcyA3IC4KKytJbmZvcm1hdGlvbiBhYm91dCBkZWZhdWx0cywgaG93IHRvIG1vZGlm eSB0aGUgZGVmYXVsdHMgYW5kIGhvdyB0byBjdXN0b21pemUgZXhpc3RpbmcgcG9saWNpZXMgd2l0 aCBzdWItcG9saWNpZXMgYXJlIHByZXNlbnQgaW4gbWFudWFsIHBhZ2UKKysuWHIgdXBkYXRlLWNy eXB0by1wb2xpY2llcyA4IC4KKysuUHAKKyBTcGVjaWZpZXMgdGhlIGNpcGhlcnMgYWxsb3dlZC4K KyBNdWx0aXBsZSBjaXBoZXJzIG11c3QgYmUgY29tbWEtc2VwYXJhdGVkLgorIElmIHRoZSBzcGVj aWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCisgLlNxICsKKy1jaGFyYWN0ZXIsIHRoZW4gdGhlIHNw ZWNpZmllZCBjaXBoZXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGRlZmF1bHQgc2V0CistaW5z dGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KKytjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBj aXBoZXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGJ1aWx0LWluCisrb3BlbnNzaCBkZWZhdWx0 IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBi ZWdpbnMgd2l0aCBhCisgLlNxIC0KKyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBjaXBo ZXJzIChpbmNsdWRpbmcgd2lsZGNhcmRzKSB3aWxsIGJlIHJlbW92ZWQKKy1mcm9tIHRoZSBkZWZh dWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorK2Zyb20gdGhlIGJ1aWx0LWluIG9w ZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KKyBJZiB0aGUgc3Bl Y2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQorIC5TcSBeCisgY2hhcmFjdGVyLCB0aGVuIHRoZSBz cGVjaWZpZWQgY2lwaGVycyB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgaGVhZCBvZiB0aGUKKy1kZWZh dWx0IHNldC4KKytidWlsdC1pbiBvcGVuc3NoIGRlZmF1bHQgc2V0LgorIC5QcAorIFRoZSBzdXBw b3J0ZWQgY2lwaGVycyBhcmU6CisgLlBwCitAQCAtNTc3LDEzICs1NzgsNiBAQCBhZXMyNTYtZ2Nt QG9wZW5zc2guY29tCisgY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20KKyAuRWwKKyAuUHAK Ky1UaGUgZGVmYXVsdCBpczoKKy0uQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKKy1jaGFjaGEy MC1wb2x5MTMwNUBvcGVuc3NoLmNvbSwKKy1hZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFlczI1Ni1n Y21Ab3BlbnNzaC5jb20sCistYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIKKy0uRWQK Ky0uUHAKKyBUaGUgbGlzdCBvZiBhdmFpbGFibGUgY2lwaGVycyBtYXkgYWxzbyBiZSBvYnRhaW5l ZCB1c2luZworIC5RcSBzc2ggLVEgY2lwaGVyIC4KKyAuSXQgQ20gQ2xpZW50QWxpdmVDb3VudE1h eAorQEAgLTc4OSw1NSArNzgzLDQzIEBAIEZvciB0aGlzIHRvIHdvcmsKKyAuQ20gR1NTQVBJS2V5 RXhjaGFuZ2UKKyBuZWVkcyB0byBiZSBlbmFibGVkIGluIHRoZSBzZXJ2ZXIgYW5kIGFsc28gdXNl ZCBieSB0aGUgY2xpZW50LgorIC5JdCBDbSBHU1NBUElLZXhBbGdvcml0aG1zCisrVGhlIGRlZmF1 bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBieQorKy5YciBjcnlwdG8tcG9saWNpZXMgNyAuCisr SW5mb3JtYXRpb24gYWJvdXQgZGVmYXVsdHMsIGhvdyB0byBtb2RpZnkgdGhlIGRlZmF1bHRzIGFu ZCBob3cgdG8gY3VzdG9taXplIGV4aXN0aW5nIHBvbGljaWVzIHdpdGggc3ViLXBvbGljaWVzIGFy ZSBwcmVzZW50IGluIG1hbnVhbCBwYWdlCisrLlhyIHVwZGF0ZS1jcnlwdG8tcG9saWNpZXMgOCAu CisrLlBwCisgVGhlIGxpc3Qgb2Yga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgdGhhdCBhcmUgYWNj ZXB0ZWQgYnkgR1NTQVBJCisga2V5IGV4Y2hhbmdlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCisgLkJk IC1saXRlcmFsIC1vZmZzZXQgM24KKy1nc3MtZ2V4LXNoYTEtLAorLWdzcy1ncm91cDEtc2hhMS0s CistZ3NzLWdyb3VwMTQtc2hhMS0sCistZ3NzLWdyb3VwMTQtc2hhMjU2LSwKKy1nc3MtZ3JvdXAx Ni1zaGE1MTItLAorLWdzcy1uaXN0cDI1Ni1zaGEyNTYtLAorK2dzcy1nZXgtc2hhMS0KKytnc3Mt Z3JvdXAxLXNoYTEtCisrZ3NzLWdyb3VwMTQtc2hhMS0KKytnc3MtZ3JvdXAxNC1zaGEyNTYtCisr Z3NzLWdyb3VwMTYtc2hhNTEyLQorK2dzcy1uaXN0cDI1Ni1zaGEyNTYtCisgZ3NzLWN1cnZlMjU1 MTktc2hhMjU2LQorIC5FZAorLS5QcAorLVRoZSBkZWZhdWx0IGlzCistLkRxIGdzcy1ncm91cDE0 LXNoYTI1Ni0sZ3NzLWdyb3VwMTYtc2hhNTEyLSxnc3MtbmlzdHAyNTYtc2hhMjU2LSwKKy1nc3Mt Y3VydmUyNTUxOS1zaGEyNTYtLGdzcy1ncm91cDE0LXNoYTEtLGdzcy1nZXgtc2hhMS0gLgorIFRo aXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byBjb25uZWN0aW9ucyB1c2luZyBHU1NBUEkuCisgLkl0 IENtIEhvc3RiYXNlZEFjY2VwdGVkQWxnb3JpdGhtcworK1RoZSBkZWZhdWx0IGlzIGhhbmRsZWQg c3lzdGVtLXdpZGUgYnkKKysuWHIgY3J5cHRvLXBvbGljaWVzIDcgLgorK0luZm9ybWF0aW9uIGFi b3V0IGRlZmF1bHRzLCBob3cgdG8gbW9kaWZ5IHRoZSBkZWZhdWx0cyBhbmQgaG93IHRvIGN1c3Rv bWl6ZSBleGlzdGluZyBwb2xpY2llcyB3aXRoIHN1Yi1wb2xpY2llcyBhcmUgcHJlc2VudCBpbiBt YW51YWwgcGFnZQorKy5YciB1cGRhdGUtY3J5cHRvLXBvbGljaWVzIDggLgorKy5QcAorIFNwZWNp ZmllcyB0aGUgc2lnbmF0dXJlIGFsZ29yaXRobXMgdGhhdCB3aWxsIGJlIGFjY2VwdGVkIGZvciBo b3N0YmFzZWQKKyBhdXRoZW50aWNhdGlvbiBhcyBhIGxpc3Qgb2YgY29tbWEtc2VwYXJhdGVkIHBh dHRlcm5zLgorIEFsdGVybmF0ZWx5IGlmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBh CisgLlNxICsKKyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBzaWduYXR1cmUgYWxnb3Jp dGhtcyB3aWxsIGJlIGFwcGVuZGVkIHRvCistdGhlIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVw bGFjaW5nIHRoZW0uCisrdGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBv ZiByZXBsYWNpbmcgdGhlbS4KKyBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQor IC5TcSAtCisgY2hhcmFjdGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgc2lnbmF0dXJlIGFsZ29yaXRo bXMgKGluY2x1ZGluZyB3aWxkY2FyZHMpCistd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGRlZmF1 bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCisrd2lsbCBiZSByZW1vdmVkIGZyb20g dGhlIGJ1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhl bS4KKyBJZiB0aGUgc3BlY2lmaWVkIGxpc3QgYmVnaW5zIHdpdGggYQorIC5TcSBeCisgY2hhcmFj dGVyLCB0aGVuIHRoZSBzcGVjaWZpZWQgc2lnbmF0dXJlIGFsZ29yaXRobXMgd2lsbCBiZSBwbGFj ZWQgYXQKKy10aGUgaGVhZCBvZiB0aGUgZGVmYXVsdCBzZXQuCistVGhlIGRlZmF1bHQgZm9yIHRo aXMgb3B0aW9uIGlzOgorLS5CZCAtbGl0ZXJhbCAtb2Zmc2V0IDNuCistc3NoLWVkMjU1MTktY2Vy dC12MDFAb3BlbnNzaC5jb20sCistZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVuc3No LmNvbSwKKy1lY2RzYS1zaGEyLW5pc3RwMzg0LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLWVjZHNh LXNoYTItbmlzdHA1MjEtY2VydC12MDFAb3BlbnNzaC5jb20sCistc2stc3NoLWVkMjU1MTktY2Vy dC12MDFAb3BlbnNzaC5jb20sCistc2stZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBvcGVu c3NoLmNvbSwKKy13ZWJhdXRobi1zay1lY2RzYS1zaGEyLW5pc3RwMjU2LWNlcnQtdjAxQG9wZW5z c2guY29tLAorLXJzYS1zaGEyLTUxMi1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1yc2Etc2hhMi0y NTYtY2VydC12MDFAb3BlbnNzaC5jb20sCistc3NoLWVkMjU1MTksCistZWNkc2Etc2hhMi1uaXN0 cDI1NixlY2RzYS1zaGEyLW5pc3RwMzg0LGVjZHNhLXNoYTItbmlzdHA1MjEsCistc2stc3NoLWVk MjU1MTlAb3BlbnNzaC5jb20sCistc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwK Ky13ZWJhdXRobi1zay1lY2RzYS1zaGEyLW5pc3RwMjU2QG9wZW5zc2guY29tLAorLXJzYS1zaGEy LTUxMixyc2Etc2hhMi0yNTYKKy0uRWQKKyt0aGUgaGVhZCBvZiB0aGUgYnVpbHQtaW4gb3BlbnNz aCBkZWZhdWx0IHNldC4KKyAuUHAKKyBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc2lnbmF0dXJlIGFs Z29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKKyAuUXEgc3NoIC1RIEhvc3RiYXNl ZEFjY2VwdGVkQWxnb3JpdGhtcyAuCitAQCAtOTA0LDI3ICs4ODYsMTMgQEAgaXMgc3BlY2lmaWVk LCB0aGUgbG9jYXRpb24gb2YgdGhlIHNvY2tldCB3aWxsIGJlIHJlYWQgZnJvbSB0aGUKKyAuRXYg U1NIX0FVVEhfU09DSworIGVudmlyb25tZW50IHZhcmlhYmxlLgorIC5JdCBDbSBIb3N0S2V5QWxn b3JpdGhtcworK1RoZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKKysuWHIgY3J5 cHRvLXBvbGljaWVzIDcgLgorK0luZm9ybWF0aW9uIGFib3V0IGRlZmF1bHRzLCBob3cgdG8gbW9k aWZ5IHRoZSBkZWZhdWx0cyBhbmQgaG93IHRvIGN1c3RvbWl6ZSBleGlzdGluZyBwb2xpY2llcyB3 aXRoIHN1Yi1wb2xpY2llcyBhcmUgcHJlc2VudCBpbiBtYW51YWwgcGFnZQorKy5YciB1cGRhdGUt Y3J5cHRvLXBvbGljaWVzIDggLgorKy5QcAorIFNwZWNpZmllcyB0aGUgaG9zdCBrZXkgc2lnbmF0 dXJlIGFsZ29yaXRobXMKKyB0aGF0IHRoZSBzZXJ2ZXIgb2ZmZXJzLgorLVRoZSBkZWZhdWx0IGZv ciB0aGlzIG9wdGlvbiBpczoKKy0uQmQgLWxpdGVyYWwgLW9mZnNldCAzbgorLXNzaC1lZDI1NTE5 LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3Bl bnNzaC5jb20sCistZWNkc2Etc2hhMi1uaXN0cDM4NC1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1l Y2RzYS1zaGEyLW5pc3RwNTIxLWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXNrLXNzaC1lZDI1NTE5 LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXNrLWVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFA b3BlbnNzaC5jb20sCistd2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1Ni1jZXJ0LXYwMUBv cGVuc3NoLmNvbSwKKy1yc2Etc2hhMi01MTItY2VydC12MDFAb3BlbnNzaC5jb20sCistcnNhLXNo YTItMjU2LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXNzaC1lZDI1NTE5LAorLWVjZHNhLXNoYTIt bmlzdHAyNTYsZWNkc2Etc2hhMi1uaXN0cDM4NCxlY2RzYS1zaGEyLW5pc3RwNTIxLAorLXNrLXNz aC1lZDI1NTE5QG9wZW5zc2guY29tLAorLXNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5j b20sCistd2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3NoLmNvbSwKKy1yc2Et c2hhMi01MTIscnNhLXNoYTItMjU2CistLkVkCistLlBwCisgVGhlIGxpc3Qgb2YgYXZhaWxhYmxl IHNpZ25hdHVyZSBhbGdvcml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCisgLlFxIHNz aCAtUSBIb3N0S2V5QWxnb3JpdGhtcyAuCisgLkl0IENtIElnbm9yZVJob3N0cworQEAgLTEwNzAs NiArMTAzOCwxMSBAQCBTcGVjaWZpZXMgd2hldGhlciB0byBsb29rIGF0IC5rNWxvZ2luIGZpbGUg Zm9yIHVzZXIncyBhbGlhc2VzLgorIFRoZSBkZWZhdWx0IGlzCisgLkNtIHllcyAuCisgLkl0IENt IEtleEFsZ29yaXRobXMKKytUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5Cisr LlhyIGNyeXB0by1wb2xpY2llcyA3IC4KKytJbmZvcm1hdGlvbiBhYm91dCBkZWZhdWx0cywgaG93 IHRvIG1vZGlmeSB0aGUgZGVmYXVsdHMgYW5kIGhvdyB0byBjdXN0b21pemUgZXhpc3RpbmcgcG9s aWNpZXMgd2l0aCBzdWItcG9saWNpZXMgYXJlIHByZXNlbnQgaW4gbWFudWFsIHBhZ2UKKysuWHIg dXBkYXRlLWNyeXB0by1wb2xpY2llcyA4IC4KKysuUHAKKyBTcGVjaWZpZXMgdGhlIHBlcm1pdHRl ZCBLRVggKEtleSBFeGNoYW5nZSkgYWxnb3JpdGhtcyB0aGF0IHRoZSBzZXJ2ZXIgd2lsbAorIG9m ZmVyIHRvIGNsaWVudHMuCisgVGhlIG9yZGVyaW5nIG9mIHRoaXMgbGlzdCBpcyBub3QgaW1wb3J0 YW50LCBhcyB0aGUgY2xpZW50IHNwZWNpZmllcyB0aGUKK0BAIC0xMDc4LDE2ICsxMDUxLDE2IEBA IE11bHRpcGxlIGFsZ29yaXRobXMgbXVzdCBiZSBjb21tYS1zZXBhcmF0ZWQuCisgLlBwCisgSWYg dGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKKyAuU3EgKworLWNoYXJhY3RlciwgdGhl biB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZGVmYXVs dCBzZXQKKy1pbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorK2NoYXJhY3RlciwgdGhlbiB0aGUg c3BlY2lmaWVkIG1ldGhvZHMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgYnVpbHQtaW4KKytvcGVu c3NoIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCisgSWYgdGhlIHNwZWNp ZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKKyAuU3EgLQorIGNoYXJhY3RlciwgdGhlbiB0aGUgc3Bl Y2lmaWVkIGFsZ29yaXRobXMgKGluY2x1ZGluZyB3aWxkY2FyZHMpIHdpbGwgYmUgcmVtb3ZlZAor LWZyb20gdGhlIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCisrZnJvbSB0 aGUgYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVt LgorIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdpbnMgd2l0aCBhCisgLlNxIF4KKyBjaGFyYWN0 ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0aG1zIHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBo ZWFkIG9mIHRoZQorLWRlZmF1bHQgc2V0LgorK2J1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQu CisgLlBwCisgVGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zIGFyZToKKyAuUHAKK0BAIC0xMTI0LDE0 ICsxMDk3LDYgQEAgc250cnVwNzYxeDI1NTE5LXNoYTUxMgorIHNudHJ1cDc2MXgyNTUxOS1zaGE1 MTJAb3BlbnNzaC5jb20KKyAuRWwKKyAuUHAKKy1UaGUgZGVmYXVsdCBpczoKKy0uQmQgLWxpdGVy YWwgLW9mZnNldCBpbmRlbnQKKy1tbGtlbTc2OHgyNTUxOS1zaGEyNTYsCistc250cnVwNzYxeDI1 NTE5LXNoYTUxMixzbnRydXA3NjF4MjU1MTktc2hhNTEyQG9wZW5zc2guY29tLAorLWN1cnZlMjU1 MTktc2hhMjU2LGN1cnZlMjU1MTktc2hhMjU2QGxpYnNzaC5vcmcsCistZWNkaC1zaGEyLW5pc3Rw MjU2LGVjZGgtc2hhMi1uaXN0cDM4NCxlY2RoLXNoYTItbmlzdHA1MjEKKy0uRWQKKy0uUHAKKyBU aGUgbGlzdCBvZiBzdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgbWF5IGFsc28gYmUg b2J0YWluZWQgdXNpbmcKKyAuUXEgc3NoIC1RIEtleEFsZ29yaXRobXMgLgorIC5JdCBDbSBMaXN0 ZW5BZGRyZXNzCitAQCAtMTIxOCwyMSArMTE4MywyNiBAQCBmdW5jdGlvbiwgYW5kIGFsbCBjb2Rl IGluIHRoZQorIGZpbGUuCisgVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBh bmQgbm8gb3ZlcnJpZGVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisgLkl0IENtIE1BQ3MKKytU aGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5CisrLlhyIGNyeXB0by1wb2xpY2ll cyA3IC4KKytJbmZvcm1hdGlvbiBhYm91dCBkZWZhdWx0cywgaG93IHRvIG1vZGlmeSB0aGUgZGVm YXVsdHMgYW5kIGhvdyB0byBjdXN0b21pemUgZXhpc3RpbmcgcG9saWNpZXMgd2l0aCBzdWItcG9s aWNpZXMgYXJlIHByZXNlbnQgaW4gbWFudWFsIHBhZ2UKKysuWHIgdXBkYXRlLWNyeXB0by1wb2xp Y2llcyA4IC4KKysuUHAKKyBTcGVjaWZpZXMgdGhlIGF2YWlsYWJsZSBNQUMgKG1lc3NhZ2UgYXV0 aGVudGljYXRpb24gY29kZSkgYWxnb3JpdGhtcy4KKyBUaGUgTUFDIGFsZ29yaXRobSBpcyB1c2Vk IGZvciBkYXRhIGludGVncml0eSBwcm90ZWN0aW9uLgorIE11bHRpcGxlIGFsZ29yaXRobXMgbXVz dCBiZSBjb21tYS1zZXBhcmF0ZWQuCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRo IGEKKyAuU3EgKworLWNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2ls bCBiZSBhcHBlbmRlZCB0byB0aGUgZGVmYXVsdCBzZXQKKy1pbnN0ZWFkIG9mIHJlcGxhY2luZyB0 aGVtLgorK2NoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBh cHBlbmRlZCB0byB0aGUgYnVpbHQtaW4KKytvcGVuc3NoIGRlZmF1bHQgc2V0IGluc3RlYWQgb2Yg cmVwbGFjaW5nIHRoZW0uCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKKyAu U3EgLQorIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgKGluY2x1ZGlu ZyB3aWxkY2FyZHMpIHdpbGwgYmUgcmVtb3ZlZAorLWZyb20gdGhlIGRlZmF1bHQgc2V0IGluc3Rl YWQgb2YgcmVwbGFjaW5nIHRoZW0uCisrZnJvbSB0aGUgYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0 IHNldCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBi ZWdpbnMgd2l0aCBhCisgLlNxIF4KKyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdv cml0aG1zIHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBoZWFkIG9mIHRoZQorLWRlZmF1bHQgc2V0Lgor K2J1aWx0LWluIG9wZW5zc2ggZGVmYXVsdCBzZXQuCisgLlBwCisgVGhlIGFsZ29yaXRobXMgdGhh dCBjb250YWluCisgLlFxIC1ldG0KK0BAIC0xMjc1LDE1ICsxMjQ1LDYgQEAgdW1hYy02NC1ldG1A b3BlbnNzaC5jb20KKyB1bWFjLTEyOC1ldG1Ab3BlbnNzaC5jb20KKyAuRWwKKyAuUHAKKy1UaGUg ZGVmYXVsdCBpczoKKy0uQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKKy11bWFjLTY0LWV0bUBv cGVuc3NoLmNvbSx1bWFjLTEyOC1ldG1Ab3BlbnNzaC5jb20sCistaG1hYy1zaGEyLTI1Ni1ldG1A b3BlbnNzaC5jb20saG1hYy1zaGEyLTUxMi1ldG1Ab3BlbnNzaC5jb20sCistaG1hYy1zaGExLWV0 bUBvcGVuc3NoLmNvbSwKKy11bWFjLTY0QG9wZW5zc2guY29tLHVtYWMtMTI4QG9wZW5zc2guY29t LAorLWhtYWMtc2hhMi0yNTYsaG1hYy1zaGEyLTUxMixobWFjLXNoYTEKKy0uRWQKKy0uUHAKKyBU aGUgbGlzdCBvZiBhdmFpbGFibGUgTUFDIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQg dXNpbmcKKyAuUXEgc3NoIC1RIG1hYyAuCisgLkl0IENtIE1hdGNoCitAQCAtMTc3MywzOCArMTcz NCwyNSBAQCBvciBlcXVpdmFsZW50LikKKyBUaGUgZGVmYXVsdCBpcworIC5DbSB5ZXMgLgorIC5J dCBDbSBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMKKytUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5 c3RlbS13aWRlIGJ5CisrLlhyIGNyeXB0by1wb2xpY2llcyA3IC4KKytJbmZvcm1hdGlvbiBhYm91 dCBkZWZhdWx0cywgaG93IHRvIG1vZGlmeSB0aGUgZGVmYXVsdHMgYW5kIGhvdyB0byBjdXN0b21p emUgZXhpc3RpbmcgcG9saWNpZXMgd2l0aCBzdWItcG9saWNpZXMgYXJlIHByZXNlbnQgaW4gbWFu dWFsIHBhZ2UKKysuWHIgdXBkYXRlLWNyeXB0by1wb2xpY2llcyA4IC4KKysuUHAKKyBTcGVjaWZp ZXMgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG1zIHRoYXQgd2lsbCBiZSBhY2NlcHRlZCBmb3IgcHVi bGljIGtleQorIGF1dGhlbnRpY2F0aW9uIGFzIGEgbGlzdCBvZiBjb21tYS1zZXBhcmF0ZWQgcGF0 dGVybnMuCisgQWx0ZXJuYXRlbHkgaWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEK KyAuU3EgKworLWNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBi ZSBhcHBlbmRlZCB0byB0aGUgZGVmYXVsdCBzZXQKKy1pbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVt LgorK2NoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgd2lsbCBiZSBhcHBl bmRlZCB0byB0aGUgYnVpbHQtaW4KKytvcGVuc3NoIGRlZmF1bHQgc2V0IGluc3RlYWQgb2YgcmVw bGFjaW5nIHRoZW0uCisgSWYgdGhlIHNwZWNpZmllZCBsaXN0IGJlZ2lucyB3aXRoIGEKKyAuU3Eg LQorIGNoYXJhY3RlciwgdGhlbiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobXMgKGluY2x1ZGluZyB3 aWxkY2FyZHMpIHdpbGwgYmUgcmVtb3ZlZAorLWZyb20gdGhlIGRlZmF1bHQgc2V0IGluc3RlYWQg b2YgcmVwbGFjaW5nIHRoZW0uCisrZnJvbSB0aGUgYnVpbHQtaW4gb3BlbnNzaCBkZWZhdWx0IHNl dCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorIElmIHRoZSBzcGVjaWZpZWQgbGlzdCBiZWdp bnMgd2l0aCBhCisgLlNxIF4KKyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBhbGdvcml0 aG1zIHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBoZWFkIG9mIHRoZQorLWRlZmF1bHQgc2V0LgorLVRo ZSBkZWZhdWx0IGZvciB0aGlzIG9wdGlvbiBpczoKKy0uQmQgLWxpdGVyYWwgLW9mZnNldCAzbgor LXNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLWVjZHNhLXNoYTItbmlzdHAyNTYt Y2VydC12MDFAb3BlbnNzaC5jb20sCistZWNkc2Etc2hhMi1uaXN0cDM4NC1jZXJ0LXYwMUBvcGVu c3NoLmNvbSwKKy1lY2RzYS1zaGEyLW5pc3RwNTIxLWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXNr LXNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXNrLWVjZHNhLXNoYTItbmlzdHAy NTYtY2VydC12MDFAb3BlbnNzaC5jb20sCistd2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1 Ni1jZXJ0LXYwMUBvcGVuc3NoLmNvbSwKKy1yc2Etc2hhMi01MTItY2VydC12MDFAb3BlbnNzaC5j b20sCistcnNhLXNoYTItMjU2LWNlcnQtdjAxQG9wZW5zc2guY29tLAorLXNzaC1lZDI1NTE5LAor LWVjZHNhLXNoYTItbmlzdHAyNTYsZWNkc2Etc2hhMi1uaXN0cDM4NCxlY2RzYS1zaGEyLW5pc3Rw NTIxLAorLXNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tLAorLXNrLWVjZHNhLXNoYTItbmlzdHAy NTZAb3BlbnNzaC5jb20sCistd2ViYXV0aG4tc2stZWNkc2Etc2hhMi1uaXN0cDI1NkBvcGVuc3No LmNvbSwKKy1yc2Etc2hhMi01MTIscnNhLXNoYTItMjU2CistLkVkCisrYnVpbHQtaW4gb3BlbnNz aCBkZWZhdWx0IHNldC4KKyAuUHAKKyBUaGUgbGlzdCBvZiBhdmFpbGFibGUgc2lnbmF0dXJlIGFs Z29yaXRobXMgbWF5IGFsc28gYmUgb2J0YWluZWQgdXNpbmcKKyAuUXEgc3NoIC1RIFB1YmtleUFj Y2VwdGVkQWxnb3JpdGhtcyAuCitAQCAtMjMxNyw3ICsyMjY1LDkgQEAgVGhpcyBmaWxlIHNob3Vs ZCBiZSB3cml0YWJsZSBieSByb290IG9ubHksIGJ1dCBpdCBpcyByZWNvbW1lbmRlZAorIC5FbAor IC5TaCBTRUUgQUxTTworIC5YciBzZnRwLXNlcnZlciA4ICwKKy0uWHIgc3NoZCA4CisrLlhyIHNz aGQgOCAsCisrLlhyIGNyeXB0by1wb2xpY2llcyA3ICwKKysuWHIgdXBkYXRlLWNyeXB0by1wb2xp Y2llcyA4CisgLlNoIEFVVEhPUlMKKyAuQW4gLW5vc3BsaXQKKyBPcGVuU1NIIGlzIGEgZGVyaXZh dGl2ZSBvZiB0aGUgb3JpZ2luYWwgYW5kIGZyZWUKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQg YS8wMDI3LW9wZW5zc2gtOC4wcDEtb3BlbnNzbC1rZGYucGF0Y2ggYi8wMDI3LW9wZW5zc2gtOC4w cDEtb3BlbnNzbC1rZGYucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmN2Y0 OWIuLjAwMDAwMDAKLS0tIGEvMDAyNy1vcGVuc3NoLTguMHAxLW9wZW5zc2wta2RmLnBhdGNoCisr KyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLUZyb20gZDczNjMzZGQ5NzcwYmVhMGMzODAy MDc1ODQyMzk4ZmFmM2U1NWUzMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRy eSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUg MTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyNy81M10gb3BlbnNzaC04LjBwMS1vcGVu c3NsLWtkZgotCi0tLS0KLSBjb25maWd1cmUuYWMgfCAgIDEgKwotIGtleC5jICAgICAgICB8IDEw NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLSAy IGZpbGVzIGNoYW5nZWQsIDEwOCBpbnNlcnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9jb25maWd1 cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IGFkY2NhZWJkNC4uODA1YmU0YjVlIDEwMDY0NAot LS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25maWd1cmUuYWMKLUBAIC0zMTgyLDYgKzMxODIs NyBAQCBpZiB0ZXN0ICJ4JG9wZW5zc2wiID0gInh5ZXMiIDsgdGhlbgotIAkJSE1BQ19DVFhfaW5p dCBcCi0gCQlSU0FfZ2VuZXJhdGVfa2V5X2V4IFwKLSAJCVJTQV9nZXRfZGVmYXVsdF9tZXRob2Qg XAotKwkJRVZQX0tERl9DVFhfbmV3IFwKLSAJXSkKLSAKLSAJIyBPcGVuU1NMX2FkZF9hbGxfYWxn b3JpdGhtcyBtYXkgYmUgYSBtYWNyby4KLWRpZmYgLS1naXQgYS9rZXguYyBiL2tleC5jCi1pbmRl eCA5YTJjZTZkODguLjVmOTUzMDkwOCAxMDA2NDQKLS0tLSBhL2tleC5jCi0rKysgYi9rZXguYwot QEAgLTM4LDYgKzM4LDExIEBACi0gI2lmZGVmIFdJVEhfT1BFTlNTTAotICNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rIyBpZmRlZiBIQVZFX0VW UF9LREZfQ1RYX05FVwotKyMgaW5jbHVkZSA8b3BlbnNzbC9rZGYuaD4KLSsjIGluY2x1ZGUgPG9w ZW5zc2wvcGFyYW1fYnVpbGQuaD4KLSsjIGluY2x1ZGUgPG9wZW5zc2wvY29yZV9uYW1lcy5oPgot KyMgZW5kaWYKLSAjZW5kaWYKLSAKLSAjaW5jbHVkZSAic3NoLmgiCi1AQCAtMTA3Nyw2ICsxMDgy LDEwNyBAQCBrZXhfY2hvb3NlX2NvbmYoc3RydWN0IHNzaCAqc3NoLCB1aW50MzJfdCBzZXEpCi0g CXJldHVybiByOwotIH0KLSAKLSsjaWZkZWYgSEFWRV9FVlBfS0RGX0NUWF9ORVcKLStzdGF0aWMg Y29uc3QgY2hhciAqCi0rZGlnZXN0X3RvX21kKGludCBkaWdlc3RfdHlwZSkKLSt7Ci0rCXN3aXRj aCAoZGlnZXN0X3R5cGUpIHsKLSsJY2FzZSBTU0hfRElHRVNUX1NIQTE6Ci0rCQlyZXR1cm4gU05f c2hhMTsKLSsJY2FzZSBTU0hfRElHRVNUX1NIQTI1NjoKLSsJCXJldHVybiBTTl9zaGEyNTY7Ci0r CWNhc2UgU1NIX0RJR0VTVF9TSEEzODQ6Ci0rCQlyZXR1cm4gU05fc2hhMzg0OwotKwljYXNlIFNT SF9ESUdFU1RfU0hBNTEyOgotKwkJcmV0dXJuIFNOX3NoYTUxMjsKLSsJfQotKwlyZXR1cm4gTlVM TDsKLSt9Ci0rCi0rc3RhdGljIGludAotK2Rlcml2ZV9rZXkoc3RydWN0IHNzaCAqc3NoLCBpbnQg aWQsIHVfaW50IG5lZWQsIHVfY2hhciAqaGFzaCwgdV9pbnQgaGFzaGxlbiwKLSsgICAgY29uc3Qg c3RydWN0IHNzaGJ1ZiAqc2hhcmVkX3NlY3JldCwgdV9jaGFyICoqa2V5cCkKLSt7Ci0rCXN0cnVj dCBrZXggKmtleCA9IHNzaC0+a2V4OwotKwl1X2NoYXIgKmtleSA9IE5VTEw7Ci0rCWludCByLCBr ZXlfbGVuOwotKwotKwlFVlBfS0RGICprZGYgPSBFVlBfS0RGX2ZldGNoKE5VTEwsICJTU0hLREYi LCBOVUxMKTsKLSsJRVZQX0tERl9DVFggKmN0eCA9IEVWUF9LREZfQ1RYX25ldyhrZGYpOwotKwlP U1NMX1BBUkFNX0JMRCAqcGFyYW1fYmxkID0gT1NTTF9QQVJBTV9CTERfbmV3KCk7Ci0rCU9TU0xf UEFSQU0gKnBhcmFtcyA9IE5VTEw7Ci0rICAgICAgIGNvbnN0IGNoYXIgKm1kID0gZGlnZXN0X3Rv X21kKGtleC0+aGFzaF9hbGcpOwotKyAgICAgICBjaGFyIGtleXR5cGUgPSAoY2hhcilpZDsKLSsK LSsJRVZQX0tERl9mcmVlKGtkZik7Ci0rCWlmICghY3R4KSB7Ci0rCQlyID0gU1NIX0VSUl9MSUJD UllQVE9fRVJST1I7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwlpZiAobWQgPT0gTlVMTCkgewotKwkJ ciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0rCWlm IChwYXJhbV9ibGQgPT0gTlVMTCkgewotKwkJRVZQX0tERl9DVFhfZnJlZShjdHgpOwotKwkJcmV0 dXJuIC0xOwotKwl9Ci0rCWlmICgoa2V5X2xlbiA9IHNzaF9kaWdlc3RfYnl0ZXMoa2V4LT5oYXNo X2FsZykpID09IDApIHsKLSsJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rCQlnb3Rv IG91dDsKLSsJfQotKwotKwlrZXlfbGVuID0gUk9VTkRVUChuZWVkLCBrZXlfbGVuKTsKLSsJaWYg KChrZXkgPSBjYWxsb2MoMSwga2V5X2xlbikpID09IE5VTEwpIHsKLSsJCXIgPSBTU0hfRVJSX0FM TE9DX0ZBSUw7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwlyID0gICAgIE9TU0xfUEFSQU1fQkxE X3B1c2hfdXRmOF9zdHJpbmcocGFyYW1fYmxkLCBPU1NMX0tERl9QQVJBTV9ESUdFU1QsCi0rCQkg ICAgICAgICAgICAgICAgbWQsIHN0cmxlbihtZCkpICYmIC8qIFNOICovCi0rCQlPU1NMX1BBUkFN X0JMRF9wdXNoX29jdGV0X3N0cmluZyhwYXJhbV9ibGQsIE9TU0xfS0RGX1BBUkFNX0tFWSwKLSsJ CQkJc3NoYnVmX3B0cihzaGFyZWRfc2VjcmV0KSwgc3NoYnVmX2xlbihzaGFyZWRfc2VjcmV0KSkg JiYKLSsJCU9TU0xfUEFSQU1fQkxEX3B1c2hfb2N0ZXRfc3RyaW5nKHBhcmFtX2JsZCwgT1NTTF9L REZfUEFSQU1fU1NIS0RGX1hDR0hBU0gsCi0rCQkJCWhhc2gsIGhhc2hsZW4pICYmCi0rCQlPU1NM X1BBUkFNX0JMRF9wdXNoX29jdGV0X3N0cmluZyhwYXJhbV9ibGQsIE9TU0xfS0RGX1BBUkFNX1NT SEtERl9TRVNTSU9OX0lELAotKwkJCQlzc2hidWZfcHRyKGtleC0+c2Vzc2lvbl9pZCksIHNzaGJ1 Zl9sZW4oa2V4LT5zZXNzaW9uX2lkKSkgJiYKLSsJCU9TU0xfUEFSQU1fQkxEX3B1c2hfdXRmOF9z dHJpbmcocGFyYW1fYmxkLCBPU1NMX0tERl9QQVJBTV9TU0hLREZfVFlQRSwKLSsJCQkJJmtleXR5 cGUsIDEpOwotKwlpZiAociAhPSAxKSB7Ci0rCQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7 Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwlwYXJhbXMgPSBPU1NMX1BBUkFNX0JMRF90b19wYXJh bShwYXJhbV9ibGQpOwotKwlpZiAocGFyYW1zID09IE5VTEwpIHsKLSsJCXIgPSBTU0hfRVJSX0xJ QkNSWVBUT19FUlJPUjsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCXIgPSBFVlBfS0RGX2Rlcml2ZShj dHgsIGtleSwga2V5X2xlbiwgcGFyYW1zKTsKLSsJaWYgKHIgIT0gMSkgewotKwkJciA9IFNTSF9F UlJfTElCQ1JZUFRPX0VSUk9SOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsjaWZkZWYgREVCVUdfS0VY Ci0rCWZwcmludGYoc3RkZXJyLCAia2V5ICclYyc9PSAiLCBpZCk7Ci0rCWR1bXBfZGlnZXN0KCJr ZXkiLCBrZXksIGtleV9sZW4pOwotKyNlbmRpZgotKwkqa2V5cCA9IGtleTsKLSsJa2V5ID0gTlVM TDsKLSsJciA9IDA7Ci0rCi0rb3V0OgotKwlPU1NMX1BBUkFNX0JMRF9mcmVlKHBhcmFtX2JsZCk7 Ci0rCU9TU0xfUEFSQU1fZnJlZShwYXJhbXMpOwotKwlmcmVlIChrZXkpOwotKwlFVlBfS0RGX0NU WF9mcmVlKGN0eCk7Ci0rCWlmIChyIDwgMCkgewotKwkJcmV0dXJuIHI7Ci0rCX0KLSsJcmV0dXJu IDA7Ci0rfQotKyNlbHNlCi0gc3RhdGljIGludAotIGRlcml2ZV9rZXkoc3RydWN0IHNzaCAqc3No LCBpbnQgaWQsIHVfaW50IG5lZWQsIHVfY2hhciAqaGFzaCwgdV9pbnQgaGFzaGxlbiwKLSAgICAg Y29uc3Qgc3RydWN0IHNzaGJ1ZiAqc2hhcmVkX3NlY3JldCwgdV9jaGFyICoqa2V5cCkKLUBAIC0x MTQwLDYgKzEyNDYsNyBAQCBkZXJpdmVfa2V5KHN0cnVjdCBzc2ggKnNzaCwgaW50IGlkLCB1X2lu dCBuZWVkLCB1X2NoYXIgKmhhc2gsIHVfaW50IGhhc2hsZW4sCi0gCXNzaF9kaWdlc3RfZnJlZSho YXNoY3R4KTsKLSAJcmV0dXJuIHI7Ci0gfQotKyNlbmRpZiAvKiBIQVZFX09QRU5TU0xfRVZQX0tE Rl9DVFhfTkVXICovCi0gCi0gI2RlZmluZSBOS0VZUwk2Ci0gaW50Ci0tLSAKLTIuNTIuMAotCgpk aWZmIC0tZ2l0IGEvMDAyOC1vcGVuc3NoLTguMHAxLW9wZW5zc2wta2RmLnBhdGNoIGIvMDAyOC1v cGVuc3NoLTguMHAxLW9wZW5zc2wta2RmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjA1M2RhYWQKLS0tIC9kZXYvbnVsbAorKysgYi8wMDI4LW9wZW5zc2gtOC4wcDEt b3BlbnNzbC1rZGYucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK0Zyb20gMWEyZTQwNjhmOTk3YzFh OWVkNDE3OTY3MTE2MjIwMWY3NjZmMjBiOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206 IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTUgTWF5 IDIwMjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyOC81NF0gb3BlbnNzaC04LjBw MS1vcGVuc3NsLWtkZgorCisjIFVzZSBPcGVuU1NMIEtERiAoIzE2MzE3NjEpCistLS0KKyBjb25m aWd1cmUuYWMgfCAgIDEgKworIGtleC5jICAgICAgICB8IDEwNyArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEwOCBp bnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMK K2luZGV4IDc1NTc2YjQ1ZC4uODZmMGU5ZTA5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisr KysgYi9jb25maWd1cmUuYWMKK0BAIC0zMjQ4LDYgKzMyNDgsNyBAQCBpZiB0ZXN0ICJ4JG9wZW5z c2wiID0gInh5ZXMiIDsgdGhlbgorIAkJSE1BQ19DVFhfaW5pdCBcCisgCQlSU0FfZ2VuZXJhdGVf a2V5X2V4IFwKKyAJCVJTQV9nZXRfZGVmYXVsdF9tZXRob2QgXAorKwkJRVZQX0tERl9DVFhfbmV3 IFwKKyAJXSkKKyAKKyAJIyBMaWJyZVNTTC9PcGVuU1NMIEFQSSBkaWZmZXJlbmNlcworZGlmZiAt LWdpdCBhL2tleC5jIGIva2V4LmMKK2luZGV4IDM2MDhhNTUwNC4uNTRlNzExODEwIDEwMDY0NAor LS0tIGEva2V4LmMKKysrKyBiL2tleC5jCitAQCAtMzcsNiArMzcsMTEgQEAKKyAjaWZkZWYgV0lU SF9PUEVOU1NMCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvZGguaD4KKysjIGlmZGVmIEhBVkVfRVZQX0tERl9DVFhfTkVXCisrIyBpbmNsdWRlIDxvcGVu c3NsL2tkZi5oPgorKyMgaW5jbHVkZSA8b3BlbnNzbC9wYXJhbV9idWlsZC5oPgorKyMgaW5jbHVk ZSA8b3BlbnNzbC9jb3JlX25hbWVzLmg+CisrIyBlbmRpZgorICNlbmRpZgorIAorICNpbmNsdWRl ICJzc2guaCIKK0BAIC0xMDgzLDYgKzEwODgsMTA3IEBAIGtleF9jaG9vc2VfY29uZihzdHJ1Y3Qg c3NoICpzc2gsIHVpbnQzMl90IHNlcSkKKyAJcmV0dXJuIHI7CisgfQorIAorKyNpZmRlZiBIQVZF X0VWUF9LREZfQ1RYX05FVworK3N0YXRpYyBjb25zdCBjaGFyICoKKytkaWdlc3RfdG9fbWQoaW50 IGRpZ2VzdF90eXBlKQorK3sKKysJc3dpdGNoIChkaWdlc3RfdHlwZSkgeworKwljYXNlIFNTSF9E SUdFU1RfU0hBMToKKysJCXJldHVybiBTTl9zaGExOworKwljYXNlIFNTSF9ESUdFU1RfU0hBMjU2 OgorKwkJcmV0dXJuIFNOX3NoYTI1NjsKKysJY2FzZSBTU0hfRElHRVNUX1NIQTM4NDoKKysJCXJl dHVybiBTTl9zaGEzODQ7CisrCWNhc2UgU1NIX0RJR0VTVF9TSEE1MTI6CisrCQlyZXR1cm4gU05f c2hhNTEyOworKwl9CisrCXJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgaW50CisrZGVyaXZl X2tleShzdHJ1Y3Qgc3NoICpzc2gsIGludCBpZCwgdV9pbnQgbmVlZCwgdV9jaGFyICpoYXNoLCB1 X2ludCBoYXNobGVuLAorKyAgICBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzaGFyZWRfc2VjcmV0LCB1 X2NoYXIgKiprZXlwKQorK3sKKysJc3RydWN0IGtleCAqa2V4ID0gc3NoLT5rZXg7CisrCXVfY2hh ciAqa2V5ID0gTlVMTDsKKysJaW50IHIsIGtleV9sZW47CisrCisrCUVWUF9LREYgKmtkZiA9IEVW UF9LREZfZmV0Y2goTlVMTCwgIlNTSEtERiIsIE5VTEwpOworKwlFVlBfS0RGX0NUWCAqY3R4ID0g RVZQX0tERl9DVFhfbmV3KGtkZik7CisrCU9TU0xfUEFSQU1fQkxEICpwYXJhbV9ibGQgPSBPU1NM X1BBUkFNX0JMRF9uZXcoKTsKKysJT1NTTF9QQVJBTSAqcGFyYW1zID0gTlVMTDsKKysgICAgICAg Y29uc3QgY2hhciAqbWQgPSBkaWdlc3RfdG9fbWQoa2V4LT5oYXNoX2FsZyk7CisrICAgICAgIGNo YXIga2V5dHlwZSA9IChjaGFyKWlkOworKworKwlFVlBfS0RGX2ZyZWUoa2RmKTsKKysJaWYgKCFj dHgpIHsKKysJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJCWdvdG8gb3V0OworKwl9 CisrCWlmIChtZCA9PSBOVUxMKSB7CisrCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwor KwkJZ290byBvdXQ7CisrCX0KKysKKysJaWYgKHBhcmFtX2JsZCA9PSBOVUxMKSB7CisrCQlFVlBf S0RGX0NUWF9mcmVlKGN0eCk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysJaWYgKChrZXlfbGVuID0g c3NoX2RpZ2VzdF9ieXRlcyhrZXgtPmhhc2hfYWxnKSkgPT0gMCkgeworKwkJciA9IFNTSF9FUlJf SU5WQUxJRF9BUkdVTUVOVDsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCWtleV9sZW4gPSBST1VO RFVQKG5lZWQsIGtleV9sZW4pOworKwlpZiAoKGtleSA9IGNhbGxvYygxLCBrZXlfbGVuKSkgPT0g TlVMTCkgeworKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKKysJCWdvdG8gb3V0OworKwl9Cisr CisrCXIgPSAgICAgT1NTTF9QQVJBTV9CTERfcHVzaF91dGY4X3N0cmluZyhwYXJhbV9ibGQsIE9T U0xfS0RGX1BBUkFNX0RJR0VTVCwKKysJCSAgICAgICAgICAgICAgICBtZCwgc3RybGVuKG1kKSkg JiYgLyogU04gKi8KKysJCU9TU0xfUEFSQU1fQkxEX3B1c2hfb2N0ZXRfc3RyaW5nKHBhcmFtX2Js ZCwgT1NTTF9LREZfUEFSQU1fS0VZLAorKwkJCQlzc2hidWZfcHRyKHNoYXJlZF9zZWNyZXQpLCBz c2hidWZfbGVuKHNoYXJlZF9zZWNyZXQpKSAmJgorKwkJT1NTTF9QQVJBTV9CTERfcHVzaF9vY3Rl dF9zdHJpbmcocGFyYW1fYmxkLCBPU1NMX0tERl9QQVJBTV9TU0hLREZfWENHSEFTSCwKKysJCQkJ aGFzaCwgaGFzaGxlbikgJiYKKysJCU9TU0xfUEFSQU1fQkxEX3B1c2hfb2N0ZXRfc3RyaW5nKHBh cmFtX2JsZCwgT1NTTF9LREZfUEFSQU1fU1NIS0RGX1NFU1NJT05fSUQsCisrCQkJCXNzaGJ1Zl9w dHIoa2V4LT5zZXNzaW9uX2lkKSwgc3NoYnVmX2xlbihrZXgtPnNlc3Npb25faWQpKSAmJgorKwkJ T1NTTF9QQVJBTV9CTERfcHVzaF91dGY4X3N0cmluZyhwYXJhbV9ibGQsIE9TU0xfS0RGX1BBUkFN X1NTSEtERl9UWVBFLAorKwkJCQkma2V5dHlwZSwgMSk7CisrCWlmIChyICE9IDEpIHsKKysJCXIg PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCXBhcmFt cyA9IE9TU0xfUEFSQU1fQkxEX3RvX3BhcmFtKHBhcmFtX2JsZCk7CisrCWlmIChwYXJhbXMgPT0g TlVMTCkgeworKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworKwkJZ290byBvdXQ7Cisr CX0KKysJciA9IEVWUF9LREZfZGVyaXZlKGN0eCwga2V5LCBrZXlfbGVuLCBwYXJhbXMpOworKwlp ZiAociAhPSAxKSB7CisrCQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisrCQlnb3RvIG91 dDsKKysJfQorKyNpZmRlZiBERUJVR19LRVgKKysJZnByaW50ZihzdGRlcnIsICJrZXkgJyVjJz09 ICIsIGlkKTsKKysJZHVtcF9kaWdlc3QoImtleSIsIGtleSwga2V5X2xlbik7CisrI2VuZGlmCisr CSprZXlwID0ga2V5OworKwlrZXkgPSBOVUxMOworKwlyID0gMDsKKysKKytvdXQ6CisrCU9TU0xf UEFSQU1fQkxEX2ZyZWUocGFyYW1fYmxkKTsKKysJT1NTTF9QQVJBTV9mcmVlKHBhcmFtcyk7Cisr CWZyZWUgKGtleSk7CisrCUVWUF9LREZfQ1RYX2ZyZWUoY3R4KTsKKysJaWYgKHIgPCAwKSB7Cisr CQlyZXR1cm4gcjsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrI2Vsc2UKKyBzdGF0aWMgaW50Cisg ZGVyaXZlX2tleShzdHJ1Y3Qgc3NoICpzc2gsIGludCBpZCwgdV9pbnQgbmVlZCwgdV9jaGFyICpo YXNoLCB1X2ludCBoYXNobGVuLAorICAgICBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpzaGFyZWRfc2Vj cmV0LCB1X2NoYXIgKiprZXlwKQorQEAgLTExNDYsNiArMTI1Miw3IEBAIGRlcml2ZV9rZXkoc3Ry dWN0IHNzaCAqc3NoLCBpbnQgaWQsIHVfaW50IG5lZWQsIHVfY2hhciAqaGFzaCwgdV9pbnQgaGFz aGxlbiwKKyAJc3NoX2RpZ2VzdF9mcmVlKGhhc2hjdHgpOworIAlyZXR1cm4gcjsKKyB9CisrI2Vu ZGlmIC8qIEhBVkVfT1BFTlNTTF9FVlBfS0RGX0NUWF9ORVcgKi8KKyAKKyAjZGVmaW5lIE5LRVlT CTYKKyBpbnQKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDI4LW9wZW5zc2gtOC4ycDEt dmlzaWJpbGl0eS5wYXRjaCBiLzAwMjgtb3BlbnNzaC04LjJwMS12aXNpYmlsaXR5LnBhdGNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzVlYWJmLi4wMDAwMDAwCi0tLSBhLzAwMjgt b3BlbnNzaC04LjJwMS12aXNpYmlsaXR5LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAs MCBAQAotRnJvbSBlZDVlNWRmOWVjN2FjOTZhYzJhNjhjNTcxMWRiMDBlZDI5ZDRkMWNkIE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21h aWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAotU3ViamVjdDog W1BBVENIIDI4LzUzXSBvcGVuc3NoLTguMnAxLXZpc2liaWxpdHkKLQotLS0tCi0gcmVncmVzcy9t aXNjL3NrLWR1bW15L3NrLWR1bW15LmMgfCA4ICsrKystLS0tCi0gMSBmaWxlIGNoYW5nZWQsIDQg aW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKLQotZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvbWlz Yy9zay1kdW1teS9zay1kdW1teS5jIGIvcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15LmMK LWluZGV4IDRjOTZlODgyNy4uNGFmNTIwOWRiIDEwMDY0NAotLS0tIGEvcmVncmVzcy9taXNjL3Nr LWR1bW15L3NrLWR1bW15LmMKLSsrKyBiL3JlZ3Jlc3MvbWlzYy9zay1kdW1teS9zay1kdW1teS5j Ci1AQCAtODAsNyArODAsNyBAQCBza2RlYnVnKGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIg KmZtdCwgLi4uKQotICNlbmRpZgotIH0KLSAKLS11aW50MzJfdAotK3VpbnQzMl90IF9fYXR0cmli dXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi0gc2tfYXBpX3ZlcnNpb24odm9pZCkKLSB7 Ci0gCXJldHVybiBTU0hfU0tfVkVSU0lPTl9NQUpPUjsKLUBAIC0yMjksNyArMjI5LDcgQEAgY2hl Y2tfb3B0aW9ucyhzdHJ1Y3Qgc2tfb3B0aW9uICoqb3B0aW9ucykKLSAJcmV0dXJuIDA7Ci0gfQot IAotLWludAotK2ludCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQotIHNr X2Vucm9sbCh1aW50MzJfdCBhbGcsIGNvbnN0IHVpbnQ4X3QgKmNoYWxsZW5nZSwgc2l6ZV90IGNo YWxsZW5nZV9sZW4sCi0gICAgIGNvbnN0IGNoYXIgKmFwcGxpY2F0aW9uLCB1aW50OF90IGZsYWdz LCBjb25zdCBjaGFyICpwaW4sCi0gICAgIHN0cnVjdCBza19vcHRpb24gKipvcHRpb25zLCBzdHJ1 Y3Qgc2tfZW5yb2xsX3Jlc3BvbnNlICoqZW5yb2xsX3Jlc3BvbnNlKQotQEAgLTQ3Nyw3ICs0Nzcs NyBAQCBzaWdfZWQyNTUxOShjb25zdCB1aW50OF90ICptZXNzYWdlLCBzaXplX3QgbWVzc2FnZV9s ZW4sCi0gCXJldHVybiByZXQ7Ci0gfQotIAotLWludAotK2ludCBfX2F0dHJpYnV0ZV9fKCh2aXNp YmlsaXR5KCJkZWZhdWx0IikpKQotIHNrX3NpZ24odWludDMyX3QgYWxnLCBjb25zdCB1aW50OF90 ICpkYXRhLCBzaXplX3QgZGF0YWxlbiwKLSAgICAgY29uc3QgY2hhciAqYXBwbGljYXRpb24sIGNv bnN0IHVpbnQ4X3QgKmtleV9oYW5kbGUsIHNpemVfdCBrZXlfaGFuZGxlX2xlbiwKLSAgICAgdWlu dDhfdCBmbGFncywgY29uc3QgY2hhciAqcGluLCBzdHJ1Y3Qgc2tfb3B0aW9uICoqb3B0aW9ucywK LUBAIC01MzQsNyArNTM0LDcgQEAgc2tfc2lnbih1aW50MzJfdCBhbGcsIGNvbnN0IHVpbnQ4X3Qg KmRhdGEsIHNpemVfdCBkYXRhbGVuLAotIAlyZXR1cm4gcmV0OwotIH0KLSAKLS1pbnQKLStpbnQg X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLSBza19sb2FkX3Jlc2lkZW50 X2tleXMoY29uc3QgY2hhciAqcGluLCBzdHJ1Y3Qgc2tfb3B0aW9uICoqb3B0aW9ucywKLSAgICAg c3RydWN0IHNrX3Jlc2lkZW50X2tleSAqKipya3MsIHNpemVfdCAqbnJrcykKLSB7Ci0tLSAKLTIu NTIuMAotCgpkaWZmIC0tZ2l0IGEvMDAyOS1vcGVuc3NoLTguMnAxLXZpc2liaWxpdHkucGF0Y2gg Yi8wMDI5LW9wZW5zc2gtOC4ycDEtdmlzaWJpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4zNDYxZWZhCi0tLSAvZGV2L251bGwKKysrIGIvMDAyOS1vcGVuc3No LTguMnAxLXZpc2liaWxpdHkucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSAwM2Y5NjQ5OGMz YjFjNWEwMTAxNGE0N2E4MDBmOTQ0MzBjN2M5MmNlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQor RnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAx NSBNYXkgMjAyNSAxMzo0MzoyOCArMDIwMAorU3ViamVjdDogW1BBVENIIDI5LzU0XSBvcGVuc3No LTguMnAxLXZpc2liaWxpdHkKKworIyBzay1kdW1teS5zbyBidWlsdCB3aXRoIC1mdmlzaWJpbGl0 eT1oaWRkZW4gZG9lcyBub3Qgd29yaworLS0tCisgcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1 bW15LmMgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBk ZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvbWlzYy9zay1kdW1teS9zay1kdW1t eS5jIGIvcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15LmMKK2luZGV4IDRjOTZlODgyNy4u NGFmNTIwOWRiIDEwMDY0NAorLS0tIGEvcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15LmMK KysrKyBiL3JlZ3Jlc3MvbWlzYy9zay1kdW1teS9zay1kdW1teS5jCitAQCAtODAsNyArODAsNyBA QCBza2RlYnVnKGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICNlbmRp ZgorIH0KKyAKKy11aW50MzJfdAorK3VpbnQzMl90IF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHko ImRlZmF1bHQiKSkpCisgc2tfYXBpX3ZlcnNpb24odm9pZCkKKyB7CisgCXJldHVybiBTU0hfU0tf VkVSU0lPTl9NQUpPUjsKK0BAIC0yMjksNyArMjI5LDcgQEAgY2hlY2tfb3B0aW9ucyhzdHJ1Y3Qg c2tfb3B0aW9uICoqb3B0aW9ucykKKyAJcmV0dXJuIDA7CisgfQorIAorLWludAorK2ludCBfX2F0 dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorIHNrX2Vucm9sbCh1aW50MzJfdCBh bGcsIGNvbnN0IHVpbnQ4X3QgKmNoYWxsZW5nZSwgc2l6ZV90IGNoYWxsZW5nZV9sZW4sCisgICAg IGNvbnN0IGNoYXIgKmFwcGxpY2F0aW9uLCB1aW50OF90IGZsYWdzLCBjb25zdCBjaGFyICpwaW4s CisgICAgIHN0cnVjdCBza19vcHRpb24gKipvcHRpb25zLCBzdHJ1Y3Qgc2tfZW5yb2xsX3Jlc3Bv bnNlICoqZW5yb2xsX3Jlc3BvbnNlKQorQEAgLTQ3Nyw3ICs0NzcsNyBAQCBzaWdfZWQyNTUxOShj b25zdCB1aW50OF90ICptZXNzYWdlLCBzaXplX3QgbWVzc2FnZV9sZW4sCisgCXJldHVybiByZXQ7 CisgfQorIAorLWludAorK2ludCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0Iikp KQorIHNrX3NpZ24odWludDMyX3QgYWxnLCBjb25zdCB1aW50OF90ICpkYXRhLCBzaXplX3QgZGF0 YWxlbiwKKyAgICAgY29uc3QgY2hhciAqYXBwbGljYXRpb24sIGNvbnN0IHVpbnQ4X3QgKmtleV9o YW5kbGUsIHNpemVfdCBrZXlfaGFuZGxlX2xlbiwKKyAgICAgdWludDhfdCBmbGFncywgY29uc3Qg Y2hhciAqcGluLCBzdHJ1Y3Qgc2tfb3B0aW9uICoqb3B0aW9ucywKK0BAIC01MzQsNyArNTM0LDcg QEAgc2tfc2lnbih1aW50MzJfdCBhbGcsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBkYXRh bGVuLAorIAlyZXR1cm4gcmV0OworIH0KKyAKKy1pbnQKKytpbnQgX19hdHRyaWJ1dGVfXygodmlz aWJpbGl0eSgiZGVmYXVsdCIpKSkKKyBza19sb2FkX3Jlc2lkZW50X2tleXMoY29uc3QgY2hhciAq cGluLCBzdHJ1Y3Qgc2tfb3B0aW9uICoqb3B0aW9ucywKKyAgICAgc3RydWN0IHNrX3Jlc2lkZW50 X2tleSAqKipya3MsIHNpemVfdCAqbnJrcykKKyB7CistLSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0 IGEvMDAyOS1vcGVuc3NoLTguMnAxLXgxMS13aXRob3V0LWlwdjYucGF0Y2ggYi8wMDI5LW9wZW5z c2gtOC4ycDEteDExLXdpdGhvdXQtaXB2Ni5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggNzA2M2Q3Zi4uMDAwMDAwMAotLS0gYS8wMDI5LW9wZW5zc2gtOC4ycDEteDExLXdpdGhv dXQtaXB2Ni5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLUZyb20gYzhkY2Uw NjE1ZWFjNmQyYTcyNGNkYjNmMjg4ZDdhYWExMzYyZjY1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRo dSwgMTUgTWF5IDIwMjUgMTM6NDM6MjggKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAyOS81M10gb3Bl bnNzaC04LjJwMS14MTEtd2l0aG91dC1pcHY2Ci0KLS0tLQotIGNoYW5uZWxzLmMgfCAxMCArKysr KysrKysrCi0gMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBh L2NoYW5uZWxzLmMgYi9jaGFubmVscy5jCi1pbmRleCA1Y2U2YmQ0MDAuLjI2ZWQ5OTQ1ZiAxMDA2 NDQKLS0tLSBhL2NoYW5uZWxzLmMKLSsrKyBiL2NoYW5uZWxzLmMKLUBAIC01MTIzLDYgKzUxMjMs MTYgQEAgeDExX2NyZWF0ZV9kaXNwbGF5X2luZXQoc3RydWN0IHNzaCAqc3NoLCBpbnQgeDExX2Rp c3BsYXlfb2Zmc2V0LAotIAkJCQlkZWJ1ZzJfZigiYmluZCBwb3J0ICVkOiAlLjEwMHMiLCBwb3J0 LAotIAkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAJCQkJY2xvc2Uoc29jayk7Ci0rCi0rCQkJ CS8qIGRvIG5vdCByZW1vdmUgc3VjY2Vzc2Z1bGx5IG9wZW5lZAotKwkJCQkgKiBzb2NrZXRzIGlm IHRoZSByZXF1ZXN0IGZhaWxlZCBiZWNhdXNlCi0rCQkJCSAqIHRoZSBwcm90b2NvbCBJUHY0LzYg aXMgbm90IGF2YWlsYWJsZQotKwkJCQkgKiAoZS5nLiBJUHY2IG1heSBiZSBkaXNhYmxlZCB3aGls ZSBiZWluZwotKwkJCQkgKiBzdXBwb3J0ZWQpCi0rCQkJCSAqLwotKwkJCQlpZiAoRUFERFJOT1RB VkFJTCA9PSBlcnJubykKLSsgICAgCQkJCQljb250aW51ZTsKLSsKLSAJCQkJZm9yIChuID0gMDsg biA8IG51bV9zb2NrczsgbisrKQotIAkJCQkJY2xvc2Uoc29ja3Nbbl0pOwotIAkJCQludW1fc29j a3MgPSAwOwotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAwMzAtb3BlbnNzaC04LjBwMS1w cmVzZXJ2ZS1wYW0tZXJyb3JzLnBhdGNoIGIvMDAzMC1vcGVuc3NoLTguMHAxLXByZXNlcnZlLXBh bS1lcnJvcnMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYTJmZmIuLjAw MDAwMDAKLS0tIGEvMDAzMC1vcGVuc3NoLTguMHAxLXByZXNlcnZlLXBhbS1lcnJvcnMucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1Gcm9tIGEzYjYxODJlMWQ2YjY5YTM3YTZj ODQxYmFhNDNiODE4MjUxMDM2YjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0 cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1heSAyMDI1 IDEzOjQzOjI5ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMzAvNTNdIG9wZW5zc2gtOC4wcDEtcHJl c2VydmUtcGFtLWVycm9ycwotCi0tLS0KLSBhdXRoLXBhbS5jIHwgMTggKysrKysrKysrKysrKy0t LS0tCi0gMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCi0K LWRpZmYgLS1naXQgYS9hdXRoLXBhbS5jIGIvYXV0aC1wYW0uYwotaW5kZXggNzBiY2FlODNhLi43 MGIyYjg1ODAgMTAwNjQ0Ci0tLS0gYS9hdXRoLXBhbS5jCi0rKysgYi9hdXRoLXBhbS5jCi1AQCAt NTUxLDcgKzU1MSwxMSBAQCBzc2hwYW1fdGhyZWFkKHZvaWQgKmN0eHRwKQotIAkJZ290byBhdXRo X2ZhaWw7Ci0gCi0gCWlmICghZG9fcGFtX2FjY291bnQoKSkgewotLQkJc3NocGFtX2VyciA9IFBB TV9BQ0NUX0VYUElSRUQ7Ci0rCQkvKiBQcmVzZXJ2ZSBQQU1fUEVSTV9ERU5JRUQgYW5kIFBBTV9V U0VSX1VOS05PV04uCi0rCQkgKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBvdGhlciBlcnJv cnMuICovCi0rCQlpZiAoc3NocGFtX2VyciAhPSBQQU1fUEVSTV9ERU5JRUQKLSsJCQkmJiBzc2hw YW1fZXJyICE9IFBBTV9VU0VSX1VOS05PV04pCi0rCQkJc3NocGFtX2VyciA9IFBBTV9BQ0NUX0VY UElSRUQ7Ci0gCQlnb3RvIGF1dGhfZmFpbDsKLSAJfQotIAlpZiAoc3NocGFtX2F1dGhjdHh0LT5m b3JjZV9wd2NoYW5nZSkgewotQEAgLTYwOCw4ICs2MTIsMTAgQEAgc3NocGFtX3RocmVhZCh2b2lk ICpjdHh0cCkKLSAJICAgIHBhbV9zdHJlcnJvcihzc2hwYW1faGFuZGxlLCBzc2hwYW1fZXJyKSkp ICE9IDApCi0gCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0gCS8qIFhYWCAtIGNhbid0 IGRvIG11Y2ggYWJvdXQgYW4gZXJyb3IgaGVyZSAqLwotLQlpZiAoc3NocGFtX2VyciA9PSBQQU1f QUNDVF9FWFBJUkVEKQotLQkJc3NoX21zZ19zZW5kKGN0eHQtPnBhbV9jc29jaywgUEFNX0FDQ1Rf RVhQSVJFRCwgYnVmZmVyKTsKLSsJaWYgKHNzaHBhbV9lcnIgPT0gUEFNX1BFUk1fREVOSUVECi0r CQl8fCBzc2hwYW1fZXJyID09IFBBTV9VU0VSX1VOS05PV04KLSsJCXx8IHNzaHBhbV9lcnIgPT0g UEFNX0FDQ1RfRVhQSVJFRCkKLSsJCXNzaF9tc2dfc2VuZChjdHh0LT5wYW1fY3NvY2ssIHNzaHBh bV9lcnIsIGJ1ZmZlcik7Ci0gCWVsc2UgaWYgKHNzaHBhbV9tYXh0cmllc19yZWFjaGVkKQotIAkJ c3NoX21zZ19zZW5kKGN0eHQtPnBhbV9jc29jaywgUEFNX01BWFRSSUVTLCBidWZmZXIpOwotIAll bHNlCi1AQCAtOTEzLDkgKzkxOSwxMSBAQCBzc2hwYW1fcXVlcnkodm9pZCAqY3R4LCBjaGFyICoq bmFtZSwgY2hhciAqKmluZm8sCi0gCQkJZnJlZShtc2cpOwotIAkJCWJyZWFrOwotIAkJY2FzZSBQ QU1fQUNDVF9FWFBJUkVEOgotKwkJCXNzaHBhbV9hY2NvdW50X3N0YXR1cyA9IDA7Ci0rCQkJLyog RkFMTFRIUk9VR0ggKi8KLSAJCWNhc2UgUEFNX01BWFRSSUVTOgotLQkJCWlmICh0eXBlID09IFBB TV9BQ0NUX0VYUElSRUQpCi0tCQkJCXNzaHBhbV9hY2NvdW50X3N0YXR1cyA9IDA7Ci0rCQljYXNl IFBBTV9VU0VSX1VOS05PV046Ci0rCQljYXNlIFBBTV9QRVJNX0RFTklFRDoKLSAJCQlpZiAodHlw ZSA9PSBQQU1fTUFYVFJJRVMpCi0gCQkJCXNzaHBhbV9zZXRfbWF4dHJpZXNfcmVhY2hlZCgxKTsK LSAJCQkvKiBGQUxMVEhST1VHSCAqLwotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAwMzAt b3BlbnNzaC04LjJwMS14MTEtd2l0aG91dC1pcHY2LnBhdGNoIGIvMDAzMC1vcGVuc3NoLTguMnAx LXgxMS13aXRob3V0LWlwdjYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uODc2MDEzMgotLS0gL2Rldi9udWxsCisrKyBiLzAwMzAtb3BlbnNzaC04LjJwMS14MTEtd2l0 aG91dC1pcHY2LnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZWZjYTFmNTRkOGFmYzg2N2Yz OTg5YjVlZDc5MDA1NGRlOTQyY2IwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERt aXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTUgTWF5IDIw MjUgMTM6NDM6MjggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzMC81NF0gb3BlbnNzaC04LjJwMS14 MTEtd2l0aG91dC1pcHY2CisKKyMgRG8gbm90IGJyZWFrIFgxMSB3aXRob3V0IElQdjYKKy0tLQor IGNoYW5uZWxzLmMgfCAxMCArKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlv bnMoKykKKworZGlmZiAtLWdpdCBhL2NoYW5uZWxzLmMgYi9jaGFubmVscy5jCitpbmRleCA3MWNj NjdkMTcuLjE0ZDUzNmQ2NCAxMDA2NDQKKy0tLSBhL2NoYW5uZWxzLmMKKysrKyBiL2NoYW5uZWxz LmMKK0BAIC01MTMyLDYgKzUxMzIsMTYgQEAgeDExX2NyZWF0ZV9kaXNwbGF5X2luZXQoc3RydWN0 IHNzaCAqc3NoLCBpbnQgeDExX2Rpc3BsYXlfb2Zmc2V0LAorIAkJCQlkZWJ1ZzJfZigiYmluZCBw b3J0ICVkOiAlLjEwMHMiLCBwb3J0LAorIAkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAJCQkJ Y2xvc2Uoc29jayk7CisrCisrCQkJCS8qIGRvIG5vdCByZW1vdmUgc3VjY2Vzc2Z1bGx5IG9wZW5l ZAorKwkJCQkgKiBzb2NrZXRzIGlmIHRoZSByZXF1ZXN0IGZhaWxlZCBiZWNhdXNlCisrCQkJCSAq IHRoZSBwcm90b2NvbCBJUHY0LzYgaXMgbm90IGF2YWlsYWJsZQorKwkJCQkgKiAoZS5nLiBJUHY2 IG1heSBiZSBkaXNhYmxlZCB3aGlsZSBiZWluZworKwkJCQkgKiBzdXBwb3J0ZWQpCisrCQkJCSAq LworKwkJCQlpZiAoRUFERFJOT1RBVkFJTCA9PSBlcnJubykKKysgICAgCQkJCQljb250aW51ZTsK KysKKyAJCQkJZm9yIChuID0gMDsgbiA8IG51bV9zb2NrczsgbisrKQorIAkJCQkJY2xvc2Uoc29j a3Nbbl0pOworIAkJCQludW1fc29ja3MgPSAwOworLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBh LzAwMzEtb3BlbnNzaC04LjBwMS1wcmVzZXJ2ZS1wYW0tZXJyb3JzLnBhdGNoIGIvMDAzMS1vcGVu c3NoLTguMHAxLXByZXNlcnZlLXBhbS1lcnJvcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMjg5NGViYwotLS0gL2Rldi9udWxsCisrKyBiLzAwMzEtb3BlbnNzaC04 LjBwMS1wcmVzZXJ2ZS1wYW0tZXJyb3JzLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gODIw MzgwM2E5M2FkNmI4MDdhOTQzMjQxNTZlZjg2NmI0NWNjOGVhZSBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6 IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzMS81NF0g b3BlbnNzaC04LjBwMS1wcmVzZXJ2ZS1wYW0tZXJyb3JzCisKKyMgc3NoZCBwcm92aWRlcyBQQU0g YW4gaW5jb3JyZWN0IGVycm9yIGNvZGUgKCMxODc5NTAzKQorLS0tCisgYXV0aC1wYW0uYyB8IDE4 ICsrKysrKysrKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCA1 IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYXV0aC1wYW0uYyBiL2F1dGgtcGFtLmMKK2lu ZGV4IDNmMzQyZjllMS4uZDNkY2QwMzdiIDEwMDY0NAorLS0tIGEvYXV0aC1wYW0uYworKysrIGIv YXV0aC1wYW0uYworQEAgLTUzNyw3ICs1MzcsMTEgQEAgc3NocGFtX3RocmVhZCh2b2lkICpjdHh0 cCkKKyAJCWdvdG8gYXV0aF9mYWlsOworIAorIAlpZiAoIWRvX3BhbV9hY2NvdW50KCkpIHsKKy0J CXNzaHBhbV9lcnIgPSBQQU1fQUNDVF9FWFBJUkVEOworKwkJLyogUHJlc2VydmUgUEFNX1BFUk1f REVOSUVEIGFuZCBQQU1fVVNFUl9VTktOT1dOLgorKwkJICogQmFja3dhcmQgY29tcGF0aWJpbGl0 eSBmb3Igb3RoZXIgZXJyb3JzLiAqLworKwkJaWYgKHNzaHBhbV9lcnIgIT0gUEFNX1BFUk1fREVO SUVECisrCQkJJiYgc3NocGFtX2VyciAhPSBQQU1fVVNFUl9VTktOT1dOKQorKwkJCXNzaHBhbV9l cnIgPSBQQU1fQUNDVF9FWFBJUkVEOworIAkJZ290byBhdXRoX2ZhaWw7CisgCX0KKyAJaWYgKHNz aHBhbV9hdXRoY3R4dC0+Zm9yY2VfcHdjaGFuZ2UpIHsKK0BAIC01OTQsOCArNTk4LDEwIEBAIHNz aHBhbV90aHJlYWQodm9pZCAqY3R4dHApCisgCSAgICBwYW1fc3RyZXJyb3Ioc3NocGFtX2hhbmRs ZSwgc3NocGFtX2VycikpKSAhPSAwKQorIAkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwor IAkvKiBYWFggLSBjYW4ndCBkbyBtdWNoIGFib3V0IGFuIGVycm9yIGhlcmUgKi8KKy0JaWYgKHNz aHBhbV9lcnIgPT0gUEFNX0FDQ1RfRVhQSVJFRCkKKy0JCXNzaF9tc2dfc2VuZChjdHh0LT5wYW1f Y3NvY2ssIFBBTV9BQ0NUX0VYUElSRUQsIGJ1ZmZlcik7CisrCWlmIChzc2hwYW1fZXJyID09IFBB TV9QRVJNX0RFTklFRAorKwkJfHwgc3NocGFtX2VyciA9PSBQQU1fVVNFUl9VTktOT1dOCisrCQl8 fCBzc2hwYW1fZXJyID09IFBBTV9BQ0NUX0VYUElSRUQpCisrCQlzc2hfbXNnX3NlbmQoY3R4dC0+ cGFtX2Nzb2NrLCBzc2hwYW1fZXJyLCBidWZmZXIpOworIAllbHNlIGlmIChzc2hwYW1fbWF4dHJp ZXNfcmVhY2hlZCkKKyAJCXNzaF9tc2dfc2VuZChjdHh0LT5wYW1fY3NvY2ssIFBBTV9NQVhUUklF UywgYnVmZmVyKTsKKyAJZWxzZQorQEAgLTg5Myw5ICs4OTksMTEgQEAgc3NocGFtX3F1ZXJ5KHZv aWQgKmN0eCwgY2hhciAqKm5hbWUsIGNoYXIgKippbmZvLAorIAkJCXNzaGJ1Zl9mcmVlKGJ1ZmZl cik7CisgCQkJcmV0dXJuICgwKTsKKyAJCWNhc2UgUEFNX0FDQ1RfRVhQSVJFRDoKKysJCQlzc2hw YW1fYWNjb3VudF9zdGF0dXMgPSAwOworKwkJCS8qIEZBTExUSFJPVUdIICovCisgCQljYXNlIFBB TV9NQVhUUklFUzoKKy0JCQlpZiAodHlwZSA9PSBQQU1fQUNDVF9FWFBJUkVEKQorLQkJCQlzc2hw YW1fYWNjb3VudF9zdGF0dXMgPSAwOworKwkJY2FzZSBQQU1fVVNFUl9VTktOT1dOOgorKwkJY2Fz ZSBQQU1fUEVSTV9ERU5JRUQ6CisgCQkJaWYgKHR5cGUgPT0gUEFNX01BWFRSSUVTKQorIAkJCQlz c2hwYW1fc2V0X21heHRyaWVzX3JlYWNoZWQoMSk7CisgCQkJLyogRkFMTFRIUk9VR0ggKi8KKy0t IAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDMxLW9wZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dp dGNoLnBhdGNoIGIvMDAzMS1vcGVuc3NoLTguN3AxLXNjcC1raWxsLXN3aXRjaC5wYXRjaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMzNTk0Zi4uMDAwMDAwMAotLS0gYS8wMDMxLW9w ZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjMg KzAsMCBAQAotRnJvbSBjYThiNGRlMTAxOWI4NTllMmM2ODI4OGE1NTRkMTkwNWE2Y2YwMjlmIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRA Z21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAotU3ViamVj dDogW1BBVENIIDMxLzUzXSBvcGVuc3NoLTguN3AxLXNjcC1raWxsLXN3aXRjaAotCi0tLS0KLSBw YXRobmFtZXMuaCB8IDEgKwotIHNjcC4xICAgICAgIHwgNyArKysrKysrCi0gc2NwLmMgICAgICAg fCA4ICsrKysrKysrCi0gMyBmaWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCi0KLWRpZmYg LS1naXQgYS9wYXRobmFtZXMuaCBiL3BhdGhuYW1lcy5oCi1pbmRleCAwZGNjNDk1NTIuLjc4YmJh MjMxNCAxMDA2NDQKLS0tLSBhL3BhdGhuYW1lcy5oCi0rKysgYi9wYXRobmFtZXMuaAotQEAgLTQw LDYgKzQwLDcgQEAKLSAjZGVmaW5lIF9QQVRIX0hPU1RfRUQyNTUxOV9LRVlfRklMRQlTU0hESVIg Ii9zc2hfaG9zdF9lZDI1NTE5X2tleSIKLSAjZGVmaW5lIF9QQVRIX0hPU1RfUlNBX0tFWV9GSUxF CQlTU0hESVIgIi9zc2hfaG9zdF9yc2Ffa2V5IgotICNkZWZpbmUgX1BBVEhfREhfTU9EVUxJCQkJ U1NIRElSICIvbW9kdWxpIgotKyNkZWZpbmUgX1BBVEhfU0NQX0tJTExfU1dJVENICQlTU0hESVIg Ii9kaXNhYmxlX3NjcCIKLSAKLSAjaWZuZGVmIF9QQVRIX1NTSF9QUk9HUkFNCi0gI2RlZmluZSBf UEFUSF9TU0hfUFJPR1JBTQkJIi91c3IvYmluL3NzaCIKLWRpZmYgLS1naXQgYS9zY3AuMSBiL3Nj cC4xCi1pbmRleCA3YmNlMGZlNmYuLjJiYjgzOGM3ZCAxMDA2NDQKLS0tLSBhL3NjcC4xCi0rKysg Yi9zY3AuMQotQEAgLTMzNCw2ICszMzQsMTMgQEAgZHVyaW5nIGRvd25sb2FkIG9yIHVwbG9hZC4K LSBCeSBkZWZhdWx0IGEgMzJLQiBidWZmZXIgaXMgdXNlZC4KLSAuRWwKLSAuRWwKLSsuUHAKLStV c2FnZSBvZiBTQ1AgcHJvdG9jb2wgY2FuIGJlIGJsb2NrZWQgYnkgY3JlYXRpbmcgYSB3b3JsZC1y ZWFkYWJsZQotKy5BciAvZXRjL3NzaC9kaXNhYmxlX3NjcAotK2ZpbGUuIElmIHRoaXMgZmlsZSBl eGlzdHMsIHdoZW4gU0NQIHByb3RvY29sIGlzIGluIHVzZSAoZWl0aGVyIHJlbW90ZWx5IG9yIAot K3ZpYSB0aGUKLSsuRmwgTwotK29wdGlvbiksIHRoZSBwcm9ncmFtIHdpbGwgZXhpdC4KLSAuU2gg RVhJVCBTVEFUVVMKLSAuRXggLXN0ZCBzY3AKLSAuU2ggU0VFIEFMU08KLWRpZmYgLS1naXQgYS9z Y3AuYyBiL3NjcC5jCi1pbmRleCA2MjExMzFmZmMuLjNjMjEzZjgzZCAxMDA2NDQKLS0tLSBhL3Nj cC5jCi0rKysgYi9zY3AuYwotQEAgLTYzMyw2ICs2MzMsMTQgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCi0gCWlmIChpYW1yZW1vdGUpCi0gCQltb2RlID0gTU9ERV9TQ1A7Ci0gCi0rCWlm IChtb2RlID09IE1PREVfU0NQKSB7Ci0rCQlGSUxFICpmID0gZm9wZW4oX1BBVEhfU0NQX0tJTExf U1dJVENILCAiciIpOwotKwkJaWYgKGYgIT0gTlVMTCkgewotKwkJCWZjbG9zZShmKTsKLSsJCQlm YXRhbCgiU0NQIHByb3RvY29sIGlzIGZvcmJpZGRlbiB2aWEgJXMiLCBfUEFUSF9TQ1BfS0lMTF9T V0lUQ0gpOwotKwkJfQotKwl9Ci0rCi0gCWlmICgocHdkID0gZ2V0cHd1aWQodXNlcmlkID0gZ2V0 dWlkKCkpKSA9PSBOVUxMKQotIAkJZmF0YWwoInVua25vd24gdXNlciAldSIsICh1X2ludCkgdXNl cmlkKTsKLSAKLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDMyLW9wZW5zc2gtOC43cDEt cmVjdXJzaXZlLXNjcC5wYXRjaCBiLzAwMzItb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUtc2NwLnBh dGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGI1ZTNkLi4wMDAwMDAwCi0tLSBh LzAwMzItb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUtc2NwLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsMjAwICswLDAgQEAKLUZyb20gZTY0NzhiMjMzY2QyMjk4YzllNmU2MTI4ODY3NDIxODkyZmY4 ZjBlNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxi ZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAK LVN1YmplY3Q6IFtQQVRDSCAzMi81M10gb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUtc2NwCi0KLS0t LQotIHNjcC5jICAgICAgICAgfCAgMiArLQotIHNmdHAtY2xpZW50LmMgfCA2MCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KLSBzZnRwLWNsaWVudC5o IHwgIDQgKystLQotIHNmdHAuYyAgICAgICAgfCAgNiArKystLS0KLSA0IGZpbGVzIGNoYW5nZWQs IDUyIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEvc2NwLmMg Yi9zY3AuYwotaW5kZXggM2MyMTNmODNkLi43OGM3OWE3NTUgMTAwNjQ0Ci0tLS0gYS9zY3AuYwot KysrIGIvc2NwLmMKLUBAIC0xMzc4LDcgKzEzNzgsNyBAQCBzb3VyY2Vfc2Z0cChpbnQgYXJnYywg Y2hhciAqc3JjLCBjaGFyICp0YXJnLCBzdHJ1Y3Qgc2Z0cF9jb25uICpjb25uKQotIAotIAlpZiAo c3JjX2lzX2RpciAmJiBpYW1yZWN1cnNpdmUpIHsKLSAJCWlmIChzZnRwX3VwbG9hZF9kaXIoY29u biwgc3JjLCBhYnNfZHN0LCBwZmxhZywKLS0JCSAgICBTRlRQX1BST0dSRVNTX09OTFksIDAsIDAs IDEsIDEpICE9IDApIHsKLSsJCSAgICBTRlRQX1BST0dSRVNTX09OTFksIDAsIDAsIDEsIDEsIDEp ICE9IDApIHsKLSAJCQllcnJvcigiZmFpbGVkIHRvIHVwbG9hZCBkaXJlY3RvcnkgJXMgdG8gJXMi LCBzcmMsIHRhcmcpOwotIAkJCWVycnMgPSAxOwotIAkJfQotZGlmZiAtLWdpdCBhL3NmdHAtY2xp ZW50LmMgYi9zZnRwLWNsaWVudC5jCi1pbmRleCA4NDAxNzBhYjYuLjliZjljYzA0NyAxMDA2NDQK LS0tLSBhL3NmdHAtY2xpZW50LmMKLSsrKyBiL3NmdHAtY2xpZW50LmMKLUBAIC0xMDAxLDcgKzEw MDEsNyBAQCBzZnRwX2ZzZXRzdGF0KHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IHVfY2hh ciAqaGFuZGxlLCB1X2ludCBoYW5kbGVfbGVuLAotIAotIC8qIEltcGxlbWVudHMgYm90aCB0aGUg cmVhbHBhdGggYW5kIGV4cGFuZC1wYXRoIG9wZXJhdGlvbnMgKi8KLSBzdGF0aWMgY2hhciAqCi0t c2Z0cF9yZWFscGF0aF9leHBhbmQoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hhciAq cGF0aCwgaW50IGV4cGFuZCkKLStzZnRwX3JlYWxwYXRoX2V4cGFuZChzdHJ1Y3Qgc2Z0cF9jb25u ICpjb25uLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZXhwYW5kLCBpbnQgY3JlYXRlX2RpcikKLSB7 Ci0gCXN0cnVjdCBzc2hidWYgKm1zZzsKLSAJdV9pbnQgZXhwZWN0ZWRfaWQsIGNvdW50LCBpZDsK LUBAIC0xMDQ3LDExICsxMDQ3LDQzIEBAIHNmdHBfcmVhbHBhdGhfZXhwYW5kKHN0cnVjdCBzZnRw X2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhdGgsIGludCBleHBhbmQpCi0gCQlpZiAoKHIgPSBz c2hidWZfZ2V0X3UzMihtc2csICZzdGF0dXMpKSAhPSAwIHx8Ci0gCQkgICAgKHIgPSBzc2hidWZf Z2V0X2NzdHJpbmcobXNnLCAmZXJybXNnLCBOVUxMKSkgIT0gMCkKLSAJCQlmYXRhbF9mcihyLCAi cGFyc2Ugc3RhdHVzIik7Ci0tCQllcnJvcigiJXMgJXM6ICVzIiwgZXhwYW5kID8gImV4cGFuZCIg OiAicmVhbHBhdGgiLAotLQkJICAgIHBhdGgsICplcnJtc2cgPT0gJ1wwJyA/IGZ4MnR4dChzdGF0 dXMpIDogZXJybXNnKTsKLS0JCWZyZWUoZXJybXNnKTsKLS0JCXNzaGJ1Zl9mcmVlKG1zZyk7Ci0t CQlyZXR1cm4gTlVMTDsKLSsJCWlmICgoc3RhdHVzID09IFNTSDJfRlhfTk9fU1VDSF9GSUxFKSAm JiBjcmVhdGVfZGlyKSAgewotKwkJCW1lbXNldCgmYSwgJ1wwJywgc2l6ZW9mKGEpKTsKLSsJCQlp ZiAoKHIgPSBzZnRwX21rZGlyKGNvbm4sIHBhdGgsICZhLCAwKSkgIT0gMCkgewotKwkJCQlzc2hi dWZfZnJlZShtc2cpOwotKwkJCQlyZXR1cm4gTlVMTDsKLSsJCQl9Ci0rCQkJZGVidWcyKCJTZW5k aW5nIFNTSDJfRlhQX1JFQUxQQVRIIFwiJXNcIiAtIGNyZWF0ZSBkaXIiLCBwYXRoKTsKLSsJCQlz ZW5kX3N0cmluZ19yZXF1ZXN0KGNvbm4sIGlkLCBTU0gyX0ZYUF9SRUFMUEFUSCwKLSsJCQkJCXBh dGgsIHN0cmxlbihwYXRoKSk7Ci0rCi0rCQkJZ2V0X21zZyhjb25uLCBtc2cpOwotKwkJCWlmICgo ciA9IHNzaGJ1Zl9nZXRfdTgobXNnLCAmdHlwZSkpICE9IDAgfHwKLSsJCQkgICAgKHIgPSBzc2hi dWZfZ2V0X3UzMihtc2csICZpZCkpICE9IDApCi0rCQkJCWZhdGFsX2ZyKHIsICJwYXJzZSIpOwot KwotKwkJCWlmIChpZCAhPSBleHBlY3RlZF9pZCkKLSsJCQkJZmF0YWwoIklEIG1pc21hdGNoICgl dSAhPSAldSkiLCBpZCwgZXhwZWN0ZWRfaWQpOwotKwotKwkJCWlmICh0eXBlID09IFNTSDJfRlhQ X1NUQVRVUykgewotKwkJCQlmcmVlKGVycm1zZyk7Ci0rCi0rCQkJCWlmICgociA9IHNzaGJ1Zl9n ZXRfdTMyKG1zZywgJnN0YXR1cykpICE9IDAgfHwKLSsJCQkJICAgIChyID0gc3NoYnVmX2dldF9j c3RyaW5nKG1zZywgJmVycm1zZywgTlVMTCkpICE9IDApCi0rCQkJCQlmYXRhbF9mcihyLCAicGFy c2Ugc3RhdHVzIik7Ci0rCQkJCWVycm9yKCIlcyAlczogJXMiLCBleHBhbmQgPyAiZXhwYW5kIiA6 ICJyZWFscGF0aCIsCi0rCQkJCSAgICBwYXRoLCAqZXJybXNnID09ICdcMCcgPyBmeDJ0eHQoc3Rh dHVzKSA6IGVycm1zZyk7Ci0rCQkJCWZyZWUoZXJybXNnKTsKLSsJCQkJc3NoYnVmX2ZyZWUobXNn KTsKLSsJCQkJcmV0dXJuIE5VTEw7Ci0rCQkJfQotKwkJfSBlbHNlIHsKLSsJCQllcnJvcigiJXMg JXM6ICVzIiwgZXhwYW5kID8gImV4cGFuZCIgOiAicmVhbHBhdGgiLAotKwkJCSAgICBwYXRoLCAq ZXJybXNnID09ICdcMCcgPyBmeDJ0eHQoc3RhdHVzKSA6IGVycm1zZyk7Ci0rCQkJZnJlZShlcnJt c2cpOwotKwkJCXNzaGJ1Zl9mcmVlKG1zZyk7Ci0rCQkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0gCX0g ZWxzZSBpZiAodHlwZSAhPSBTU0gyX0ZYUF9OQU1FKQotIAkJZmF0YWwoIkV4cGVjdGVkIFNTSDJf RlhQX05BTUUoJXUpIHBhY2tldCwgZ290ICV1IiwKLSAJCSAgICBTU0gyX0ZYUF9OQU1FLCB0eXBl KTsKLUBAIC0xMDc2LDkgKzExMDgsOSBAQCBzZnRwX3JlYWxwYXRoX2V4cGFuZChzdHJ1Y3Qgc2Z0 cF9jb25uICpjb25uLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZXhwYW5kKQotIH0KLSAKLSBjaGFy ICoKLS1zZnRwX3JlYWxwYXRoKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBh dGgpCi0rc2Z0cF9yZWFscGF0aChzdHJ1Y3Qgc2Z0cF9jb25uICpjb25uLCBjb25zdCBjaGFyICpw YXRoLCBpbnQgY3JlYXRlX2RpcikKLSB7Ci0tCXJldHVybiBzZnRwX3JlYWxwYXRoX2V4cGFuZChj b25uLCBwYXRoLCAwKTsKLSsJcmV0dXJuIHNmdHBfcmVhbHBhdGhfZXhwYW5kKGNvbm4sIHBhdGgs IDAsIGNyZWF0ZV9kaXIpOwotIH0KLSAKLSBpbnQKLUBAIC0xMDkyLDkgKzExMjQsOSBAQCBzZnRw X2V4cGFuZF9wYXRoKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhdGgpCi0g ewotIAlpZiAoIXNmdHBfY2FuX2V4cGFuZF9wYXRoKGNvbm4pKSB7Ci0gCQlkZWJ1ZzNfZigibm8g c2VydmVyIHN1cHBvcnQsIGZhbGxiYWNrIHRvIHJlYWxwYXRoIik7Ci0tCQlyZXR1cm4gc2Z0cF9y ZWFscGF0aF9leHBhbmQoY29ubiwgcGF0aCwgMCk7Ci0rCQlyZXR1cm4gc2Z0cF9yZWFscGF0aF9l eHBhbmQoY29ubiwgcGF0aCwgMCwgMCk7Ci0gCX0KLS0JcmV0dXJuIHNmdHBfcmVhbHBhdGhfZXhw YW5kKGNvbm4sIHBhdGgsIDEpOwotKwlyZXR1cm4gc2Z0cF9yZWFscGF0aF9leHBhbmQoY29ubiwg cGF0aCwgMSwgMCk7Ci0gfQotIAotIGludAotQEAgLTIwMTQsNyArMjA0Niw3IEBAIHNmdHBfZG93 bmxvYWRfZGlyKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNyYywgY29uc3Qg Y2hhciAqZHN0LAotIAljaGFyICpzcmNfY2Fub247Ci0gCWludCByZXQ7Ci0gCi0tCWlmICgoc3Jj X2Nhbm9uID0gc2Z0cF9yZWFscGF0aChjb25uLCBzcmMpKSA9PSBOVUxMKSB7Ci0rCWlmICgoc3Jj X2Nhbm9uID0gc2Z0cF9yZWFscGF0aChjb25uLCBzcmMsIDApKSA9PSBOVUxMKSB7Ci0gCQllcnJv cigiZG93bmxvYWQgXCIlc1wiOiBwYXRoIGNhbm9uaWNhbGl6YXRpb24gZmFpbGVkIiwgc3JjKTsK LSAJCXJldHVybiAtMTsKLSAJfQotQEAgLTIzNjYsMTIgKzIzOTgsMTIgQEAgdXBsb2FkX2Rpcl9p bnRlcm5hbChzdHJ1Y3Qgc2Z0cF9jb25uICpjb25uLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNo YXIgKmRzdCwKLSBpbnQKLSBzZnRwX3VwbG9hZF9kaXIoc3RydWN0IHNmdHBfY29ubiAqY29ubiwg Y29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCi0gICAgIGludCBwcmVzZXJ2ZV9mbGFn LCBpbnQgcHJpbnRfZmxhZywgaW50IHJlc3VtZSwgaW50IGZzeW5jX2ZsYWcsCi0tICAgIGludCBm b2xsb3dfbGlua19mbGFnLCBpbnQgaW5wbGFjZV9mbGFnKQotKyAgICBpbnQgZm9sbG93X2xpbmtf ZmxhZywgaW50IGlucGxhY2VfZmxhZywgaW50IGNyZWF0ZV9kaXIpCi0gewotIAljaGFyICpkc3Rf Y2Fub247Ci0gCWludCByZXQ7Ci0gCi0tCWlmICgoZHN0X2Nhbm9uID0gc2Z0cF9yZWFscGF0aChj b25uLCBkc3QpKSA9PSBOVUxMKSB7Ci0rCWlmICgoZHN0X2Nhbm9uID0gc2Z0cF9yZWFscGF0aChj b25uLCBkc3QsIGNyZWF0ZV9kaXIpKSA9PSBOVUxMKSB7Ci0gCQllcnJvcigidXBsb2FkIFwiJXNc IjogcGF0aCBjYW5vbmljYWxpemF0aW9uIGZhaWxlZCIsIGRzdCk7Ci0gCQlyZXR1cm4gLTE7Ci0g CX0KLUBAIC0yODI2LDcgKzI4NTgsNyBAQCBzZnRwX2Nyb3NzbG9hZF9kaXIoc3RydWN0IHNmdHBf Y29ubiAqZnJvbSwgc3RydWN0IHNmdHBfY29ubiAqdG8sCi0gCWNoYXIgKmZyb21fcGF0aF9jYW5v bjsKLSAJaW50IHJldDsKLSAKLS0JaWYgKChmcm9tX3BhdGhfY2Fub24gPSBzZnRwX3JlYWxwYXRo KGZyb20sIGZyb21fcGF0aCkpID09IE5VTEwpIHsKLSsJaWYgKChmcm9tX3BhdGhfY2Fub24gPSBz ZnRwX3JlYWxwYXRoKGZyb20sIGZyb21fcGF0aCwgMCkpID09IE5VTEwpIHsKLSAJCWVycm9yKCJj cm9zc2xvYWQgXCIlc1wiOiBwYXRoIGNhbm9uaWNhbGl6YXRpb24gZmFpbGVkIiwKLSAJCSAgICBm cm9tX3BhdGgpOwotIAkJcmV0dXJuIC0xOwotZGlmZiAtLWdpdCBhL3NmdHAtY2xpZW50LmggYi9z ZnRwLWNsaWVudC5oCi1pbmRleCA4NzNhZDM4NDkuLmZlNTg2NTFjMSAxMDA2NDQKLS0tLSBhL3Nm dHAtY2xpZW50LmgKLSsrKyBiL3NmdHAtY2xpZW50LmgKLUBAIC0xMTIsNyArMTEyLDcgQEAgaW50 IHNmdHBfZnNldHN0YXQoc3RydWN0IHNmdHBfY29ubiAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQs IEF0dHJpYiAqKTsKLSBpbnQgc2Z0cF9sc2V0c3RhdChzdHJ1Y3Qgc2Z0cF9jb25uICpjb25uLCBj b25zdCBjaGFyICpwYXRoLCBBdHRyaWIgKmEpOwotIAotIC8qIENhbm9uaWNhbGlzZSAncGF0aCcg LSBjYWxsZXIgbXVzdCBmcmVlIHJlc3VsdCAqLwotLWNoYXIgKnNmdHBfcmVhbHBhdGgoc3RydWN0 IHNmdHBfY29ubiAqLCBjb25zdCBjaGFyICopOwotK2NoYXIgKnNmdHBfcmVhbHBhdGgoc3RydWN0 IHNmdHBfY29ubiAqLCBjb25zdCBjaGFyICosIGludCk7Ci0gCi0gLyogQ2Fub25pY2FsaXNhdGlv biB3aXRoIHRpbGRlIGV4cGFuc2lvbiAocmVxdWlyZXMgc2VydmVyIGV4dGVuc2lvbikgKi8KLSBj aGFyICpzZnRwX2V4cGFuZF9wYXRoKHN0cnVjdCBzZnRwX2Nvbm4gKiwgY29uc3QgY2hhciAqKTsK LUBAIC0xNjQsNyArMTY0LDcgQEAgaW50IHNmdHBfdXBsb2FkKHN0cnVjdCBzZnRwX2Nvbm4gKiwg Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCi0gICogdGltZXMgaWYgJ3BmbGFnJyBpcyBzZXQK LSAgKi8KLSBpbnQgc2Z0cF91cGxvYWRfZGlyKHN0cnVjdCBzZnRwX2Nvbm4gKiwgY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosCi0tICAgIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOwot KyAgICBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOwotIAotIC8qCi0gICogRG93 bmxvYWQgYSAnZnJvbV9wYXRoJyBmcm9tIHRoZSAnZnJvbScgY29ubmVjdGlvbiBhbmQgdXBsb2Fk IGl0IHRvCi1kaWZmIC0tZ2l0IGEvc2Z0cC5jIGIvc2Z0cC5jCi1pbmRleCAzYjUwNWVlYTIuLjJh OTk2OThhOCAxMDA2NDQKLS0tLSBhL3NmdHAuYwotKysrIGIvc2Z0cC5jCi1AQCAtODAxLDcgKzgw MSw3IEBAIHByb2Nlc3NfcHV0KHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNy YywgY29uc3QgY2hhciAqZHN0LAotIAkJICAgIChyZmxhZyB8fCBnbG9iYWxfcmZsYWcpKSB7Ci0g CQkJaWYgKHNmdHBfdXBsb2FkX2Rpcihjb25uLCBnLmdsX3BhdGh2W2ldLCBhYnNfZHN0LAotIAkJ CSAgICBwZmxhZyB8fCBnbG9iYWxfcGZsYWcsIDEsIHJlc3VtZSwKLS0JCQkgICAgZmZsYWcgfHwg Z2xvYmFsX2ZmbGFnLCAwLCAwKSA9PSAtMSkKLSsJCQkgICAgZmZsYWcgfHwgZ2xvYmFsX2ZmbGFn LCAwLCAwLCAwKSA9PSAtMSkKLSAJCQkJZXJyID0gLTE7Ci0gCQl9IGVsc2UgewotIAkJCWlmIChz ZnRwX3VwbG9hZChjb25uLCBnLmdsX3BhdGh2W2ldLCBhYnNfZHN0LAotQEAgLTE2MzYsNyArMTYz Niw3IEBAIHBhcnNlX2Rpc3BhdGNoX2NvbW1hbmQoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29u c3QgY2hhciAqY21kLCBjaGFyICoqcHdkLAotIAkJaWYgKHBhdGgxID09IE5VTEwgfHwgKnBhdGgx ID09ICdcMCcpCi0gCQkJcGF0aDEgPSB4c3RyZHVwKHN0YXJ0ZGlyKTsKLSAJCXBhdGgxID0gc2Z0 cF9tYWtlX2Fic29sdXRlKHBhdGgxLCAqcHdkKTsKLS0JCWlmICgodG1wID0gc2Z0cF9yZWFscGF0 aChjb25uLCBwYXRoMSkpID09IE5VTEwpIHsKLSsJCWlmICgodG1wID0gc2Z0cF9yZWFscGF0aChj b25uLCBwYXRoMSwgMCkpID09IE5VTEwpIHsKLSAJCQllcnIgPSAxOwotIAkJCWJyZWFrOwotIAkJ fQotQEAgLTIyNDEsNyArMjI0MSw3IEBAIGludGVyYWN0aXZlX2xvb3Aoc3RydWN0IHNmdHBfY29u biAqY29ubiwgY2hhciAqZmlsZTEsIGNoYXIgKmZpbGUyKQotIAl9Ci0gI2VuZGlmIC8qIFVTRV9M SUJFRElUICovCi0gCi0tCWlmICgocmVtb3RlX3BhdGggPSBzZnRwX3JlYWxwYXRoKGNvbm4sICIu IikpID09IE5VTEwpCi0rCWlmICgocmVtb3RlX3BhdGggPSBzZnRwX3JlYWxwYXRoKGNvbm4sICIu IiwgMCkpID09IE5VTEwpCi0gCQlmYXRhbCgiTmVlZCBjd2QiKTsKLSAJc3RhcnRkaXIgPSB4c3Ry ZHVwKHJlbW90ZV9wYXRoKTsKLSAKLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDMyLW9w ZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoLnBhdGNoIGIvMDAzMi1vcGVuc3NoLTguN3AxLXNj cC1raWxsLXN3aXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45 NDdhNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvMDAzMi1vcGVuc3NoLTguN3AxLXNjcC1raWxsLXN3 aXRjaC5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIDYxYWNjNWU5NGVhMDg3ZGIyMDUwNDc3 N2U3NGJkYjU1OTE3NjIwNTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkg QmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEz OjQzOjI5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvNTRdIG9wZW5zc2gtOC43cDEtc2NwLWtp bGwtc3dpdGNoCisKKyMgSW1wbGVtZW50IGtpbGwgc3dpdGNoIGZvciBTQ1AgcHJvdG9jb2wKKy0t LQorIHBhdGhuYW1lcy5oIHwgMSArCisgc2NwLjEgICAgICAgfCA3ICsrKysrKysKKyBzY3AuYyAg ICAgICB8IDggKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKykKKwor ZGlmZiAtLWdpdCBhL3BhdGhuYW1lcy5oIGIvcGF0aG5hbWVzLmgKK2luZGV4IGFlMDFjNjllMi4u ODBkYjc2ZTAwIDEwMDY0NAorLS0tIGEvcGF0aG5hbWVzLmgKKysrKyBiL3BhdGhuYW1lcy5oCitA QCAtNDAsNiArNDAsNyBAQAorICNkZWZpbmUgX1BBVEhfSE9TVF9SU0FfS0VZX0ZJTEUJCVNTSERJ UiAiL3NzaF9ob3N0X3JzYV9rZXkiCisgI2RlZmluZSBfUEFUSF9IT1NUX0VEMjU1MTlfS0VZX0ZJ TEUJU1NIRElSICIvc3NoX2hvc3RfZWQyNTUxOV9rZXkiCisgI2RlZmluZSBfUEFUSF9ESF9NT0RV TEkJCQlTU0hESVIgIi9tb2R1bGkiCisrI2RlZmluZSBfUEFUSF9TQ1BfS0lMTF9TV0lUQ0gJCVNT SERJUiAiL2Rpc2FibGVfc2NwIgorIAorICNpZm5kZWYgX1BBVEhfU1NIX1BST0dSQU0KKyAjZGVm aW5lIF9QQVRIX1NTSF9QUk9HUkFNCQkiL3Vzci9iaW4vc3NoIgorZGlmZiAtLWdpdCBhL3NjcC4x IGIvc2NwLjEKK2luZGV4IDdiY2UwZmU2Zi4uMmJiODM4YzdkIDEwMDY0NAorLS0tIGEvc2NwLjEK KysrKyBiL3NjcC4xCitAQCAtMzM0LDYgKzMzNCwxMyBAQCBkdXJpbmcgZG93bmxvYWQgb3IgdXBs b2FkLgorIEJ5IGRlZmF1bHQgYSAzMktCIGJ1ZmZlciBpcyB1c2VkLgorIC5FbAorIC5FbAorKy5Q cAorK1VzYWdlIG9mIFNDUCBwcm90b2NvbCBjYW4gYmUgYmxvY2tlZCBieSBjcmVhdGluZyBhIHdv cmxkLXJlYWRhYmxlCisrLkFyIC9ldGMvc3NoL2Rpc2FibGVfc2NwCisrZmlsZS4gSWYgdGhpcyBm aWxlIGV4aXN0cywgd2hlbiBTQ1AgcHJvdG9jb2wgaXMgaW4gdXNlIChlaXRoZXIgcmVtb3RlbHkg b3IgCisrdmlhIHRoZQorKy5GbCBPCisrb3B0aW9uKSwgdGhlIHByb2dyYW0gd2lsbCBleGl0Lgor IC5TaCBFWElUIFNUQVRVUworIC5FeCAtc3RkIHNjcAorIC5TaCBTRUUgQUxTTworZGlmZiAtLWdp dCBhL3NjcC5jIGIvc2NwLmMKK2luZGV4IDU2MThlMjhlNy4uNzZkY2I2MDQwIDEwMDY0NAorLS0t IGEvc2NwLmMKKysrKyBiL3NjcC5jCitAQCAtNjI4LDYgKzYyOCwxNCBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKKyAJaWYgKGlhbXJlbW90ZSkKKyAJCW1vZGUgPSBNT0RFX1NDUDsKKyAK KysJaWYgKG1vZGUgPT0gTU9ERV9TQ1ApIHsKKysJCUZJTEUgKmYgPSBmb3BlbihfUEFUSF9TQ1Bf S0lMTF9TV0lUQ0gsICJyIik7CisrCQlpZiAoZiAhPSBOVUxMKSB7CisrCQkJZmNsb3NlKGYpOwor KwkJCWZhdGFsKCJTQ1AgcHJvdG9jb2wgaXMgZm9yYmlkZGVuIHZpYSAlcyIsIF9QQVRIX1NDUF9L SUxMX1NXSVRDSCk7CisrCQl9CisrCX0KKysKKyAJaWYgKChwd2QgPSBnZXRwd3VpZCh1c2VyaWQg PSBnZXR1aWQoKSkpID09IE5VTEwpCisgCQlmYXRhbCgidW5rbm93biB1c2VyICV1IiwgKHVfaW50 KSB1c2VyaWQpOworIAorLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwMzMtb3BlbnNzaC04 LjdwMS1taW5yc2FiaXRzLnBhdGNoIGIvMDAzMy1vcGVuc3NoLTguN3AxLW1pbnJzYWJpdHMucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZDk5NGIuLjAwMDAwMDAKLS0tIGEv MDAzMy1vcGVuc3NoLTguN3AxLW1pbnJzYWJpdHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwz NyArMCwwIEBACi1Gcm9tIDE0ZjI1ZTIxYjRlMmM1ZTYyNWYyNjZmY2M5YWY0MmMyZjg5ODQ1ZGUg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1p dEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1TdWJq ZWN0OiBbUEFUQ0ggMzMvNTNdIG9wZW5zc2gtOC43cDEtbWlucnNhYml0cwotCi0tLS0KLSByZWFk Y29uZi5jIHwgMSArCi0gc2VydmNvbmYuYyB8IDEgKwotIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNl cnRpb25zKCspCi0KLWRpZmYgLS1naXQgYS9yZWFkY29uZi5jIGIvcmVhZGNvbmYuYwotaW5kZXgg ZWFiNzM0YWFmLi4zZjY3ZjRkZTQgMTAwNjQ0Ci0tLS0gYS9yZWFkY29uZi5jCi0rKysgYi9yZWFk Y29uZi5jCi1AQCAtMzM3LDYgKzMzNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAl7ICJzZWN1cml0 eWtleXByb3ZpZGVyIiwgb1NlY3VyaXR5S2V5UHJvdmlkZXIgfSwKLSAJeyAia25vd25ob3N0c2Nv bW1hbmQiLCBvS25vd25Ib3N0c0NvbW1hbmQgfSwKLSAJeyAicmVxdWlyZWRyc2FzaXplIiwgb1Jl cXVpcmVkUlNBU2l6ZSB9LAotKwl7ICJyc2FtaW5zaXplIiwgb1JlcXVpcmVkUlNBU2l6ZSB9LCAv KiBhbGlhcyAqLwotIAl7ICJlbmFibGVlc2NhcGVjb21tYW5kbGluZSIsIG9FbmFibGVFc2NhcGVD b21tYW5kbGluZSB9LAotIAl7ICJvYnNjdXJla2V5c3Ryb2tldGltaW5nIiwgb09ic2N1cmVLZXlz dHJva2VUaW1pbmcgfSwKLSAJeyAiY2hhbm5lbHRpbWVvdXQiLCBvQ2hhbm5lbFRpbWVvdXQgfSwK LWRpZmYgLS1naXQgYS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYwotaW5kZXggYjYzYTdmMGIwLi5h Yzg0Yjc0ZDkgMTAwNjQ0Ci0tLS0gYS9zZXJ2Y29uZi5jCi0rKysgYi9zZXJ2Y29uZi5jCi1AQCAt Nzc4LDYgKzc3OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAl7ICJjYXNpZ25hdHVyZWFsZ29yaXRo bXMiLCBzQ0FTaWduYXR1cmVBbGdvcml0aG1zLCBTU0hDRkdfQUxMIH0sCi0gCXsgInNlY3VyaXR5 a2V5cHJvdmlkZXIiLCBzU2VjdXJpdHlLZXlQcm92aWRlciwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7 ICJyZXF1aXJlZHJzYXNpemUiLCBzUmVxdWlyZWRSU0FTaXplLCBTU0hDRkdfQUxMIH0sCi0rCXsg InJzYW1pbnNpemUiLCBzUmVxdWlyZWRSU0FTaXplLCBTU0hDRkdfQUxMIH0sIC8qIGFsaWFzICov Ci0gCXsgImNoYW5uZWx0aW1lb3V0Iiwgc0NoYW5uZWxUaW1lb3V0LCBTU0hDRkdfQUxMIH0sCi0g CXsgInVudXNlZGNvbm5lY3Rpb250aW1lb3V0Iiwgc1VudXNlZENvbm5lY3Rpb25UaW1lb3V0LCBT U0hDRkdfQUxMIH0sCi0gCXsgInNzaGRzZXNzaW9ucGF0aCIsIHNTc2hkU2Vzc2lvblBhdGgsIFNT SENGR19HTE9CQUwgfSwKLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDMzLW9wZW5zc2gt OC43cDEtcmVjdXJzaXZlLXNjcC5wYXRjaCBiLzAwMzMtb3BlbnNzaC04LjdwMS1yZWN1cnNpdmUt c2NwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjEwNjcKLS0t IC9kZXYvbnVsbAorKysgYi8wMDMzLW9wZW5zc2gtOC43cDEtcmVjdXJzaXZlLXNjcC5wYXRjaApA QCAtMCwwICsxLDIwNCBAQAorRnJvbSA3MjIyM2Y1MTkyOTRjMjM0ZTczMTNkYzBlZmI4NmMxMTY0 YTY3YjQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkg PGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIw MAorU3ViamVjdDogW1BBVENIIDMzLzU0XSBvcGVuc3NoLTguN3AxLXJlY3Vyc2l2ZS1zY3AKKwor IyBXb3JrYXJvdW5kIGZvciBsYWNrIG9mIHNmdHBfcmVhbHBhdGggaW4gb2xkZXIgdmVyc2lvbnMg b2YgUkhFTAorIyBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTIw Mzg4NTQKKyMgaHR0cHM6Ly9naXRodWIuY29tL29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS9wdWxs LzI5OQorIyBkb3duc3RyZWFtIG9ubHkKKy0tLQorIHNjcC5jICAgICAgICAgfCAgMiArLQorIHNm dHAtY2xpZW50LmMgfCA2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0KKyBzZnRwLWNsaWVudC5oIHwgIDQgKystLQorIHNmdHAuYyAgICAgICAgfCAg NiArKystLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9u cygtKQorCitkaWZmIC0tZ2l0IGEvc2NwLmMgYi9zY3AuYworaW5kZXggNzZkY2I2MDQwLi45NzM4 NDhlMDQgMTAwNjQ0CistLS0gYS9zY3AuYworKysrIGIvc2NwLmMKK0BAIC0xMzc3LDcgKzEzNzcs NyBAQCBzb3VyY2Vfc2Z0cChpbnQgYXJnYywgY2hhciAqc3JjLCBjaGFyICp0YXJnLCBzdHJ1Y3Qg c2Z0cF9jb25uICpjb25uKQorIAorIAlpZiAoc3JjX2lzX2RpciAmJiBpYW1yZWN1cnNpdmUpIHsK KyAJCWlmIChzZnRwX3VwbG9hZF9kaXIoY29ubiwgc3JjLCBhYnNfZHN0LCBwZmxhZywKKy0JCSAg ICBTRlRQX1BST0dSRVNTX09OTFksIDAsIDAsIDEsIDEpICE9IDApIHsKKysJCSAgICBTRlRQX1BS T0dSRVNTX09OTFksIDAsIDAsIDEsIDEsIDEpICE9IDApIHsKKyAJCQllcnJvcigiZmFpbGVkIHRv IHVwbG9hZCBkaXJlY3RvcnkgJXMgdG8gJXMiLCBzcmMsIHRhcmcpOworIAkJCWVycnMgPSAxOwor IAkJfQorZGlmZiAtLWdpdCBhL3NmdHAtY2xpZW50LmMgYi9zZnRwLWNsaWVudC5jCitpbmRleCA2 OWVmMjhjZGMuLjMwMTJlYWMxMiAxMDA2NDQKKy0tLSBhL3NmdHAtY2xpZW50LmMKKysrKyBiL3Nm dHAtY2xpZW50LmMKK0BAIC05ODgsNyArOTg4LDcgQEAgc2Z0cF9mc2V0c3RhdChzdHJ1Y3Qgc2Z0 cF9jb25uICpjb25uLCBjb25zdCB1X2NoYXIgKmhhbmRsZSwgdV9pbnQgaGFuZGxlX2xlbiwKKyAK KyAvKiBJbXBsZW1lbnRzIGJvdGggdGhlIHJlYWxwYXRoIGFuZCBleHBhbmQtcGF0aCBvcGVyYXRp b25zICovCisgc3RhdGljIGNoYXIgKgorLXNmdHBfcmVhbHBhdGhfZXhwYW5kKHN0cnVjdCBzZnRw X2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhdGgsIGludCBleHBhbmQpCisrc2Z0cF9yZWFscGF0 aF9leHBhbmQoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hhciAqcGF0aCwgaW50IGV4 cGFuZCwgaW50IGNyZWF0ZV9kaXIpCisgeworIAlzdHJ1Y3Qgc3NoYnVmICptc2c7CisgCXVfaW50 IGV4cGVjdGVkX2lkLCBjb3VudCwgaWQ7CitAQCAtMTAzNCwxMSArMTAzNCw0MyBAQCBzZnRwX3Jl YWxwYXRoX2V4cGFuZChzdHJ1Y3Qgc2Z0cF9jb25uICpjb25uLCBjb25zdCBjaGFyICpwYXRoLCBp bnQgZXhwYW5kKQorIAkJaWYgKChyID0gc3NoYnVmX2dldF91MzIobXNnLCAmc3RhdHVzKSkgIT0g MCB8fAorIAkJICAgIChyID0gc3NoYnVmX2dldF9jc3RyaW5nKG1zZywgJmVycm1zZywgTlVMTCkp ICE9IDApCisgCQkJZmF0YWxfZnIociwgInBhcnNlIHN0YXR1cyIpOworLQkJZXJyb3IoIiVzICVz OiAlcyIsIGV4cGFuZCA/ICJleHBhbmQiIDogInJlYWxwYXRoIiwKKy0JCSAgICBwYXRoLCAqZXJy bXNnID09ICdcMCcgPyBmeDJ0eHQoc3RhdHVzKSA6IGVycm1zZyk7CistCQlmcmVlKGVycm1zZyk7 CistCQlzc2hidWZfZnJlZShtc2cpOworLQkJcmV0dXJuIE5VTEw7CisrCQlpZiAoKHN0YXR1cyA9 PSBTU0gyX0ZYX05PX1NVQ0hfRklMRSkgJiYgY3JlYXRlX2RpcikgIHsKKysJCQltZW1zZXQoJmEs ICdcMCcsIHNpemVvZihhKSk7CisrCQkJaWYgKChyID0gc2Z0cF9ta2Rpcihjb25uLCBwYXRoLCAm YSwgMCkpICE9IDApIHsKKysJCQkJc3NoYnVmX2ZyZWUobXNnKTsKKysJCQkJcmV0dXJuIE5VTEw7 CisrCQkJfQorKwkJCWRlYnVnMigiU2VuZGluZyBTU0gyX0ZYUF9SRUFMUEFUSCBcIiVzXCIgLSBj cmVhdGUgZGlyIiwgcGF0aCk7CisrCQkJc2VuZF9zdHJpbmdfcmVxdWVzdChjb25uLCBpZCwgU1NI Ml9GWFBfUkVBTFBBVEgsCisrCQkJCQlwYXRoLCBzdHJsZW4ocGF0aCkpOworKworKwkJCWdldF9t c2coY29ubiwgbXNnKTsKKysJCQlpZiAoKHIgPSBzc2hidWZfZ2V0X3U4KG1zZywgJnR5cGUpKSAh PSAwIHx8CisrCQkJICAgIChyID0gc3NoYnVmX2dldF91MzIobXNnLCAmaWQpKSAhPSAwKQorKwkJ CQlmYXRhbF9mcihyLCAicGFyc2UiKTsKKysKKysJCQlpZiAoaWQgIT0gZXhwZWN0ZWRfaWQpCisr CQkJCWZhdGFsKCJJRCBtaXNtYXRjaCAoJXUgIT0gJXUpIiwgaWQsIGV4cGVjdGVkX2lkKTsKKysK KysJCQlpZiAodHlwZSA9PSBTU0gyX0ZYUF9TVEFUVVMpIHsKKysJCQkJZnJlZShlcnJtc2cpOwor KworKwkJCQlpZiAoKHIgPSBzc2hidWZfZ2V0X3UzMihtc2csICZzdGF0dXMpKSAhPSAwIHx8Cisr CQkJCSAgICAociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhtc2csICZlcnJtc2csIE5VTEwpKSAhPSAw KQorKwkJCQkJZmF0YWxfZnIociwgInBhcnNlIHN0YXR1cyIpOworKwkJCQllcnJvcigiJXMgJXM6 ICVzIiwgZXhwYW5kID8gImV4cGFuZCIgOiAicmVhbHBhdGgiLAorKwkJCQkgICAgcGF0aCwgKmVy cm1zZyA9PSAnXDAnID8gZngydHh0KHN0YXR1cykgOiBlcnJtc2cpOworKwkJCQlmcmVlKGVycm1z Zyk7CisrCQkJCXNzaGJ1Zl9mcmVlKG1zZyk7CisrCQkJCXJldHVybiBOVUxMOworKwkJCX0KKysJ CX0gZWxzZSB7CisrCQkJZXJyb3IoIiVzICVzOiAlcyIsIGV4cGFuZCA/ICJleHBhbmQiIDogInJl YWxwYXRoIiwKKysJCQkgICAgcGF0aCwgKmVycm1zZyA9PSAnXDAnID8gZngydHh0KHN0YXR1cykg OiBlcnJtc2cpOworKwkJCWZyZWUoZXJybXNnKTsKKysJCQlzc2hidWZfZnJlZShtc2cpOworKwkJ CXJldHVybiBOVUxMOworKwkJfQorIAl9IGVsc2UgaWYgKHR5cGUgIT0gU1NIMl9GWFBfTkFNRSkK KyAJCWZhdGFsKCJFeHBlY3RlZCBTU0gyX0ZYUF9OQU1FKCV1KSBwYWNrZXQsIGdvdCAldSIsCisg CQkgICAgU1NIMl9GWFBfTkFNRSwgdHlwZSk7CitAQCAtMTA2Myw5ICsxMDk1LDkgQEAgc2Z0cF9y ZWFscGF0aF9leHBhbmQoc3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hhciAqcGF0aCwg aW50IGV4cGFuZCkKKyB9CisgCisgY2hhciAqCistc2Z0cF9yZWFscGF0aChzdHJ1Y3Qgc2Z0cF9j b25uICpjb25uLCBjb25zdCBjaGFyICpwYXRoKQorK3NmdHBfcmVhbHBhdGgoc3RydWN0IHNmdHBf Y29ubiAqY29ubiwgY29uc3QgY2hhciAqcGF0aCwgaW50IGNyZWF0ZV9kaXIpCisgeworLQlyZXR1 cm4gc2Z0cF9yZWFscGF0aF9leHBhbmQoY29ubiwgcGF0aCwgMCk7CisrCXJldHVybiBzZnRwX3Jl YWxwYXRoX2V4cGFuZChjb25uLCBwYXRoLCAwLCBjcmVhdGVfZGlyKTsKKyB9CisgCisgaW50CitA QCAtMTA3OSw5ICsxMTExLDkgQEAgc2Z0cF9leHBhbmRfcGF0aChzdHJ1Y3Qgc2Z0cF9jb25uICpj b25uLCBjb25zdCBjaGFyICpwYXRoKQorIHsKKyAJaWYgKCFzZnRwX2Nhbl9leHBhbmRfcGF0aChj b25uKSkgeworIAkJZGVidWczX2YoIm5vIHNlcnZlciBzdXBwb3J0LCBmYWxsYmFjayB0byByZWFs cGF0aCIpOworLQkJcmV0dXJuIHNmdHBfcmVhbHBhdGhfZXhwYW5kKGNvbm4sIHBhdGgsIDApOwor KwkJcmV0dXJuIHNmdHBfcmVhbHBhdGhfZXhwYW5kKGNvbm4sIHBhdGgsIDAsIDApOworIAl9Cist CXJldHVybiBzZnRwX3JlYWxwYXRoX2V4cGFuZChjb25uLCBwYXRoLCAxKTsKKysJcmV0dXJuIHNm dHBfcmVhbHBhdGhfZXhwYW5kKGNvbm4sIHBhdGgsIDEsIDApOworIH0KKyAKKyBpbnQKK0BAIC0y MDAxLDcgKzIwMzMsNyBAQCBzZnRwX2Rvd25sb2FkX2RpcihzdHJ1Y3Qgc2Z0cF9jb25uICpjb25u LCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCwKKyAJY2hhciAqc3JjX2Nhbm9uOwor IAlpbnQgcmV0OworIAorLQlpZiAoKHNyY19jYW5vbiA9IHNmdHBfcmVhbHBhdGgoY29ubiwgc3Jj KSkgPT0gTlVMTCkgeworKwlpZiAoKHNyY19jYW5vbiA9IHNmdHBfcmVhbHBhdGgoY29ubiwgc3Jj LCAwKSkgPT0gTlVMTCkgeworIAkJZXJyb3IoImRvd25sb2FkIFwiJXNcIjogcGF0aCBjYW5vbmlj YWxpemF0aW9uIGZhaWxlZCIsIHNyYyk7CisgCQlyZXR1cm4gLTE7CisgCX0KK0BAIC0yMzU2LDEy ICsyMzg4LDEyIEBAIHVwbG9hZF9kaXJfaW50ZXJuYWwoc3RydWN0IHNmdHBfY29ubiAqY29ubiwg Y29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QsCisgaW50Cisgc2Z0cF91cGxvYWRfZGly KHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0 LAorICAgICBpbnQgcHJlc2VydmVfZmxhZywgaW50IHByaW50X2ZsYWcsIGludCByZXN1bWUsIGlu dCBmc3luY19mbGFnLAorLSAgICBpbnQgZm9sbG93X2xpbmtfZmxhZywgaW50IGlucGxhY2VfZmxh ZykKKysgICAgaW50IGZvbGxvd19saW5rX2ZsYWcsIGludCBpbnBsYWNlX2ZsYWcsIGludCBjcmVh dGVfZGlyKQorIHsKKyAJY2hhciAqZHN0X2Nhbm9uOworIAlpbnQgcmV0OworIAorLQlpZiAoKGRz dF9jYW5vbiA9IHNmdHBfcmVhbHBhdGgoY29ubiwgZHN0KSkgPT0gTlVMTCkgeworKwlpZiAoKGRz dF9jYW5vbiA9IHNmdHBfcmVhbHBhdGgoY29ubiwgZHN0LCBjcmVhdGVfZGlyKSkgPT0gTlVMTCkg eworIAkJZXJyb3IoInVwbG9hZCBcIiVzXCI6IHBhdGggY2Fub25pY2FsaXphdGlvbiBmYWlsZWQi LCBkc3QpOworIAkJcmV0dXJuIC0xOworIAl9CitAQCAtMjgxOSw3ICsyODUxLDcgQEAgc2Z0cF9j cm9zc2xvYWRfZGlyKHN0cnVjdCBzZnRwX2Nvbm4gKmZyb20sIHN0cnVjdCBzZnRwX2Nvbm4gKnRv LAorIAljaGFyICpmcm9tX3BhdGhfY2Fub247CisgCWludCByZXQ7CisgCistCWlmICgoZnJvbV9w YXRoX2Nhbm9uID0gc2Z0cF9yZWFscGF0aChmcm9tLCBmcm9tX3BhdGgpKSA9PSBOVUxMKSB7Cisr CWlmICgoZnJvbV9wYXRoX2Nhbm9uID0gc2Z0cF9yZWFscGF0aChmcm9tLCBmcm9tX3BhdGgsIDAp KSA9PSBOVUxMKSB7CisgCQllcnJvcigiY3Jvc3Nsb2FkIFwiJXNcIjogcGF0aCBjYW5vbmljYWxp emF0aW9uIGZhaWxlZCIsCisgCQkgICAgZnJvbV9wYXRoKTsKKyAJCXJldHVybiAtMTsKK2RpZmYg LS1naXQgYS9zZnRwLWNsaWVudC5oIGIvc2Z0cC1jbGllbnQuaAoraW5kZXggY2M4ZTIwMjk4Li4z NmI2OGQ0Y2MgMTAwNjQ0CistLS0gYS9zZnRwLWNsaWVudC5oCisrKysgYi9zZnRwLWNsaWVudC5o CitAQCAtMTA2LDcgKzEwNiw3IEBAIGludCBzZnRwX2ZzZXRzdGF0KHN0cnVjdCBzZnRwX2Nvbm4g KiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBBdHRyaWIgKik7CisgaW50IHNmdHBfbHNldHN0YXQo c3RydWN0IHNmdHBfY29ubiAqY29ubiwgY29uc3QgY2hhciAqcGF0aCwgQXR0cmliICphKTsKKyAK KyAvKiBDYW5vbmljYWxpc2UgJ3BhdGgnIC0gY2FsbGVyIG11c3QgZnJlZSByZXN1bHQgKi8KKy1j aGFyICpzZnRwX3JlYWxwYXRoKHN0cnVjdCBzZnRwX2Nvbm4gKiwgY29uc3QgY2hhciAqKTsKKytj aGFyICpzZnRwX3JlYWxwYXRoKHN0cnVjdCBzZnRwX2Nvbm4gKiwgY29uc3QgY2hhciAqLCBpbnQp OworIAorIC8qIENhbm9uaWNhbGlzYXRpb24gd2l0aCB0aWxkZSBleHBhbnNpb24gKHJlcXVpcmVz IHNlcnZlciBleHRlbnNpb24pICovCisgY2hhciAqc2Z0cF9leHBhbmRfcGF0aChzdHJ1Y3Qgc2Z0 cF9jb25uICosIGNvbnN0IGNoYXIgKik7CitAQCAtMTU4LDcgKzE1OCw3IEBAIGludCBzZnRwX3Vw bG9hZChzdHJ1Y3Qgc2Z0cF9jb25uICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAq IHRpbWVzIGlmICdwZmxhZycgaXMgc2V0CisgICovCisgaW50IHNmdHBfdXBsb2FkX2RpcihzdHJ1 Y3Qgc2Z0cF9jb25uICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorLSAgICBpbnQsIGlu dCwgaW50LCBpbnQsIGludCwgaW50KTsKKysgICAgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu dCwgaW50KTsKKyAKKyAvKgorICAqIERvd25sb2FkIGEgJ2Zyb21fcGF0aCcgZnJvbSB0aGUgJ2Zy b20nIGNvbm5lY3Rpb24gYW5kIHVwbG9hZCBpdCB0bworZGlmZiAtLWdpdCBhL3NmdHAuYyBiL3Nm dHAuYworaW5kZXggZWViYjE2NmU4Li40YTcxZGQwNWQgMTAwNjQ0CistLS0gYS9zZnRwLmMKKysr KyBiL3NmdHAuYworQEAgLTgwNSw3ICs4MDUsNyBAQCBwcm9jZXNzX3B1dChzdHJ1Y3Qgc2Z0cF9j b25uICpjb25uLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCwKKyAJCSAgICAocmZs YWcgfHwgZ2xvYmFsX3JmbGFnKSkgeworIAkJCWlmIChzZnRwX3VwbG9hZF9kaXIoY29ubiwgZy5n bF9wYXRodltpXSwgYWJzX2RzdCwKKyAJCQkgICAgcGZsYWcgfHwgZ2xvYmFsX3BmbGFnLCAxLCBy ZXN1bWUsCistCQkJICAgIGZmbGFnIHx8IGdsb2JhbF9mZmxhZywgMCwgMCkgPT0gLTEpCisrCQkJ ICAgIGZmbGFnIHx8IGdsb2JhbF9mZmxhZywgMCwgMCwgMCkgPT0gLTEpCisgCQkJCWVyciA9IC0x OworIAkJfSBlbHNlIHsKKyAJCQlpZiAoc2Z0cF91cGxvYWQoY29ubiwgZy5nbF9wYXRodltpXSwg YWJzX2RzdCwKK0BAIC0xNjQwLDcgKzE2NDAsNyBAQCBwYXJzZV9kaXNwYXRjaF9jb21tYW5kKHN0 cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqKnB3ZCwKKyAJCWlm IChwYXRoMSA9PSBOVUxMIHx8ICpwYXRoMSA9PSAnXDAnKQorIAkJCXBhdGgxID0geHN0cmR1cChz dGFydGRpcik7CisgCQlwYXRoMSA9IHNmdHBfbWFrZV9hYnNvbHV0ZShwYXRoMSwgKnB3ZCk7Cist CQlpZiAoKHRtcCA9IHNmdHBfcmVhbHBhdGgoY29ubiwgcGF0aDEpKSA9PSBOVUxMKSB7CisrCQlp ZiAoKHRtcCA9IHNmdHBfcmVhbHBhdGgoY29ubiwgcGF0aDEsIDApKSA9PSBOVUxMKSB7CisgCQkJ ZXJyID0gMTsKKyAJCQlicmVhazsKKyAJCX0KK0BAIC0yMjY2LDcgKzIyNjYsNyBAQCBpbnRlcmFj dGl2ZV9sb29wKHN0cnVjdCBzZnRwX2Nvbm4gKmNvbm4sIGNoYXIgKmZpbGUxLCBjaGFyICpmaWxl MikKKyAJfQorICNlbmRpZiAvKiBVU0VfTElCRURJVCAqLworIAorLQlpZiAoKHJlbW90ZV9wYXRo ID0gc2Z0cF9yZWFscGF0aChjb25uLCAiLiIpKSA9PSBOVUxMKQorKwlpZiAoKHJlbW90ZV9wYXRo ID0gc2Z0cF9yZWFscGF0aChjb25uLCAiLiIsIDApKSA9PSBOVUxMKQorIAkJZmF0YWwoIk5lZWQg Y3dkIik7CisgCXN0YXJ0ZGlyID0geHN0cmR1cChyZW1vdGVfcGF0aCk7CisgCistLSAKKzIuNTMu MAorCgpkaWZmIC0tZ2l0IGEvMDAzNC1vcGVuc3NoLTguN3AxLWlibWNhLnBhdGNoIGIvMDAzNC1v cGVuc3NoLTguN3AxLWlibWNhLnBhdGNoCmluZGV4IDgwM2M4OTkuLjU1MzI5N2EgMTAwNjQ0Ci0t LSBhLzAwMzQtb3BlbnNzaC04LjdwMS1pYm1jYS5wYXRjaAorKysgYi8wMDM0LW9wZW5zc2gtOC43 cDEtaWJtY2EucGF0Y2gKQEAgLTEsOCArMSwxMCBAQAotRnJvbSBlMmMwZmIyMzMxMTk1ODRiMDRk NjFkMjQzY2Q1ODQzMzA3MjU1OWMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSAyN2U3 M2M5ZDZjNGE0NGJkZmI5ODg1MmRkZWIzMGU5MDJmZjg2NThlIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTog VGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAotU3ViamVjdDogW1BBVENIIDM0LzUzXSBv cGVuc3NoLTguN3AxLWlibWNhCitTdWJqZWN0OiBbUEFUQ0ggMzQvNTRdIG9wZW5zc2gtOC43cDEt aWJtY2EKIAorIyBkb3duc3RyZWFtIG9ubHksIElCTUNBIHRlbnRhdGl2ZSBmaXgKKyMgRnJvbSBo dHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTE5NzYyMDIjYzE0CiAt LS0KICBvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmMgfCAyICstCiAgMSBmaWxlIGNoYW5n ZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCkBAIC0yMSw1ICsyMyw1IEBAIGluZGV4 IGY2MTEyNDU4NS4uNDE3YzIwNDg0IDEwMDY0NAogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICAj aW5jbHVkZSA8dW5pc3RkLmg+CiAtLSAKLTIuNTIuMAorMi41My4wCiAKCmRpZmYgLS1naXQgYS8w MDM1LW9wZW5zc2gtNy42cDEtYXVkaXQucGF0Y2ggYi8wMDM1LW9wZW5zc2gtNy42cDEtYXVkaXQu cGF0Y2gKaW5kZXggMTYzNWY5Zi4uNDBkZjA2YyAxMDA2NDQKLS0tIGEvMDAzNS1vcGVuc3NoLTcu NnAxLWF1ZGl0LnBhdGNoCisrKyBiLzAwMzUtb3BlbnNzaC03LjZwMS1hdWRpdC5wYXRjaApAQCAt MSw3ICsxLDcgQEAKLUZyb20gYzY0ZWIzNDBkOTI1ZjNmN2UyOWJiMWM0NWI3ZDdiNTM3ZmZhNjE5 NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb20gMDBlZjU2NTMzNmM5MzNmOTQ2NGIwOWM1 NTEzNGZhM2IzYzc2YWQ0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKIEZyb206IERtaXRyeSBC ZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KIERhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6 NDM6MjkgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCAzNS81M10gb3BlbnNzaC03LjZwMS1hdWRpdAor U3ViamVjdDogW1BBVENIIDM1LzU0XSBvcGVuc3NoLTcuNnAxLWF1ZGl0CiAKIC0tLQogIE1ha2Vm aWxlLmluICAgICAgIHwgICAyICstCkBAIC0yOSwyNiArMjksMjYgQEAgU3ViamVjdDogW1BBVENI IDM1LzUzXSBvcGVuc3NoLTcuNnAxLWF1ZGl0CiAgcGFja2V0LmggICAgICAgICAgfCAgIDEgKwog IHNlc3Npb24uYyAgICAgICAgIHwgIDgyICsrKysrKysrKysrKy0KICBzZXNzaW9uLmggICAgICAg ICB8ICAxMCArLQotIHNzaGQtc2Vzc2lvbi5jICAgIHwgIDk4ICsrKysrKysrKysrKystLQorIHNz aGQtc2Vzc2lvbi5jICAgIHwgMTAwICsrKysrKysrKysrKystLQogIHNzaGQuYyAgICAgICAgICAg IHwgIDEwICsrCi0gMjcgZmlsZXMgY2hhbmdlZCwgMTI1MSBpbnNlcnRpb25zKCspLCAxMDMgZGVs ZXRpb25zKC0pCisgMjcgZmlsZXMgY2hhbmdlZCwgMTI1MyBpbnNlcnRpb25zKCspLCAxMDMgZGVs ZXRpb25zKC0pCiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGF1ZGl0c3R1Yi5jCiAKIGRpZmYgLS1naXQg YS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCi1pbmRleCBhMzZlYjgyZWQuLjIwZDEzNGMwMiAx MDA2NDQKK2luZGV4IGExMmY2YWQxZC4uZjgwYzk1ODQ2IDEwMDY0NAogLS0tIGEvTWFrZWZpbGUu aW4KICsrKyBiL01ha2VmaWxlLmluCiBAQCAtMTEwLDcgKzExMCw3IEBAIExJQlNTSF9PQkpTPSR7 TElCT1BFTlNTSF9PQkpTfSBcCiAgCWtleHNudHJ1cDc2MXgyNTUxOS5vIGtleG1sa2VtNzY4eDI1 NTE5Lm8gc250cnVwNzYxLm8ga2V4Z2VuLm8gXAogIAlrZXhnc3NjLm8gXAogIAlzZnRwLXJlYWxw YXRoLm8gcGxhdGZvcm0tcGxlZGdlLm8gcGxhdGZvcm0tdHJhY2luZy5vIHBsYXRmb3JtLW1pc2Mu byBcCi0tCXNzaGJ1Zi1pby5vIG1pc2MtYWdlbnQubwotKwlzc2hidWYtaW8ubyBtaXNjLWFnZW50 Lm8gYXVkaXRzdHViLm8KKy0Jc3NoYnVmLWlvLm8gbWlzYy1hZ2VudC5vIHNzaGVyci1saWJjcnlw dG8ubworKwlzc2hidWYtaW8ubyBtaXNjLWFnZW50Lm8gc3NoZXJyLWxpYmNyeXB0by5vIGF1ZGl0 c3R1Yi5vCiAgCiAgUDExT0JKUz0gc3NoLXBrY3MxMS1jbGllbnQubwogIAogZGlmZiAtLWdpdCBh L2F1ZGl0LWJzbS5jIGIvYXVkaXQtYnNtLmMKLWluZGV4IDRiY2UyMmMzNy4uYTYyOTJjYjhmIDEw MDY0NAoraW5kZXggYjYwMjkxM2Y0Li42MGJlMTUxNGIgMTAwNjQ0CiAtLS0gYS9hdWRpdC1ic20u YwogKysrIGIvYXVkaXQtYnNtLmMKIEBAIC0zNzMsMTIgKzM3MywyNSBAQCBhdWRpdF9jb25uZWN0 aW9uX2Zyb20oY29uc3QgY2hhciAqaG9zdCwgaW50IHBvcnQpCkBAIC03ODIsNyArNzgyLDcgQEAg aW5kZXggMDAwMDAwMDAwLi42MzlhNzk4ZGYKICt7CiArfQogZGlmZiAtLWdpdCBhL2F1dGguYyBi L2F1dGguYwotaW5kZXggZDI1NjUzZWU0Li4zOGMzNDI5OGUgMTAwNjQ0CitpbmRleCAxNDJhYzVh ZmQuLjE4NThiZGRhYiAxMDA2NDQKIC0tLSBhL2F1dGguYwogKysrIGIvYXV0aC5jCiBAQCAtNDk5 LDkgKzQ5OSw2IEBAIGdldHB3bmFtYWxsb3coc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICp1 c2VyKQpAQCAtNzk2LDEwICs3OTYsMTAgQEAgaW5kZXggZDI1NjUzZWU0Li4zOGMzNDI5OGUgMTAw NjQ0CiAgCX0KICAJaWYgKCFhbGxvd2VkX3VzZXIoc3NoLCBwdykpCiBkaWZmIC0tZ2l0IGEvYXV0 aC5oIGIvYXV0aC5oCi1pbmRleCAzOTE2MzAzNTAuLjZiZTUyZDcwYiAxMDA2NDQKK2luZGV4IDgx NWY4MjFmOS4uYjcyYjc2MTYzIDEwMDY0NAogLS0tIGEvYXV0aC5oCiArKysgYi9hdXRoLmgKLUBA IC0yMTUsNiArMjE1LDggQEAgc3RydWN0IHNzaGtleQkqZ2V0X2hvc3RrZXlfcHJpdmF0ZV9ieV90 eXBlKGludCwgaW50LCBzdHJ1Y3Qgc3NoICopOworQEAgLTIxMyw2ICsyMTMsOCBAQCBzdHJ1Y3Qg c3Noa2V5CSpnZXRfaG9zdGtleV9wcml2YXRlX2J5X3R5cGUoaW50LCBpbnQsIHN0cnVjdCBzc2gg Kik7CiAgaW50CSBnZXRfaG9zdGtleV9pbmRleChzdHJ1Y3Qgc3Noa2V5ICosIGludCwgc3RydWN0 IHNzaCAqKTsKICBpbnQJIHNzaGRfaG9zdGtleV9zaWduKHN0cnVjdCBzc2ggKiwgc3RydWN0IHNz aGtleSAqLCBzdHJ1Y3Qgc3Noa2V5ICosCiAgICAgIHVfY2hhciAqKiwgc2l6ZV90ICosIGNvbnN0 IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKik7CkBAIC04MDgsNyArODA4LDcgQEAgaW5k ZXggMzkxNjMwMzUwLi42YmU1MmQ3MGIgMTAwNjQ0CiAgCiAgLyogS2V5IC8gY2VydCBvcHRpb25z IGxpbmthZ2UgdG8gYXV0aCBsYXllciAqLwogIGludAkgYXV0aF9hY3RpdmF0ZV9vcHRpb25zKHN0 cnVjdCBzc2ggKiwgc3RydWN0IHNzaGF1dGhvcHQgKik7Ci1AQCAtMjQwLDYgKzI0Miw4IEBAIGlu dAkgYXV0aF9jaGVja19hdXRoa2V5X2xpbmUoc3RydWN0IHBhc3N3ZCAqLCBzdHJ1Y3Qgc3Noa2V5 ICosCitAQCAtMjM4LDYgKzI0MCw4IEBAIGludAkgYXV0aF9jaGVja19hdXRoa2V5X2xpbmUoc3Ry dWN0IHBhc3N3ZCAqLCBzdHJ1Y3Qgc3Noa2V5ICosCiAgICAgIGNoYXIgKiwgY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHNzaGF1dGhvcHQgKiopOwogIGlu dAkgYXV0aF9jaGVja19hdXRoa2V5c19maWxlKHN0cnVjdCBwYXNzd2QgKiwgRklMRSAqLCBjaGFy ICosCiAgICAgIHN0cnVjdCBzc2hrZXkgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0 cnVjdCBzc2hhdXRob3B0ICoqKTsKQEAgLTgxOCwxMCArODE4LDEwIEBAIGluZGV4IDM5MTYzMDM1 MC4uNmJlNTJkNzBiIDEwMDY0NAogIEZJTEUJKmF1dGhfb3BlbnByaW5jaXBhbHMoY29uc3QgY2hh ciAqLCBzdHJ1Y3QgcGFzc3dkICosIGludCk7CiAgCiBkaWZmIC0tZ2l0IGEvYXV0aDItaG9zdGJh c2VkLmMgYi9hdXRoMi1ob3N0YmFzZWQuYwotaW5kZXggOTc2NDg0ZmM1Li5lOTQyMWE4NjggMTAw NjQ0CitpbmRleCBhMjg3MDkxZWMuLmJjNDc3NTA0MiAxMDA2NDQKIC0tLSBhL2F1dGgyLWhvc3Ri YXNlZC5jCiArKysgYi9hdXRoMi1ob3N0YmFzZWQuYwotQEAgLTE1Nyw3ICsxNTcsNyBAQCB1c2Vy YXV0aF9ob3N0YmFzZWQoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICptZXRob2QpCitAQCAt MTU4LDcgKzE1OCw3IEBAIHVzZXJhdXRoX2hvc3RiYXNlZChzdHJ1Y3Qgc3NoICpzc2gsIGNvbnN0 IGNoYXIgKm1ldGhvZCkKICAJYXV0aGVudGljYXRlZCA9IDA7CiAgCWlmIChtbV9ob3N0YmFzZWRf a2V5X2FsbG93ZWQoc3NoLCBhdXRoY3R4dC0+cHcsIGN1c2VyLAogIAkgICAgY2hvc3QsIGtleSkg JiYKQEAgLTgzMCw3ICs4MzAsNyBAQCBpbmRleCA5NzY0ODRmYzUuLmU5NDIxYTg2OCAxMDA2NDQK ICAJICAgIHNzaGJ1Zl9wdHIoYiksIHNzaGJ1Zl9sZW4oYiksIHBrYWxnLCBzc2gtPmNvbXBhdCwg TlVMTCkgPT0gMCkKICAJCWF1dGhlbnRpY2F0ZWQgPSAxOwogIAotQEAgLTE3NCw2ICsxNzQsMjAg QEAgZG9uZToKK0BAIC0xNzUsNiArMTc1LDIwIEBAIGRvbmU6CiAgCXJldHVybiBhdXRoZW50aWNh dGVkOwogIH0KICAKQEAgLTg1MiwxMCArODUyLDEwIEBAIGluZGV4IDk3NjQ4NGZjNS4uZTk0MjFh ODY4IDEwMDY0NAogIGludAogIGhvc3RiYXNlZF9rZXlfYWxsb3dlZChzdHJ1Y3Qgc3NoICpzc2gs IHN0cnVjdCBwYXNzd2QgKnB3LAogZGlmZiAtLWdpdCBhL2F1dGgyLXB1YmtleS5jIGIvYXV0aDIt cHVia2V5LmMKLWluZGV4IGI3MzAwY2E5ZS4uOWYzMzcxYzA3IDEwMDY0NAoraW5kZXggMzE5ZTQy YjJiLi45NzM4MTBkYzkgMTAwNjQ0CiAtLS0gYS9hdXRoMi1wdWJrZXkuYwogKysrIGIvYXV0aDIt cHVia2V5LmMKLUBAIC0yMzMsNyArMjMzLDcgQEAgdXNlcmF1dGhfcHVia2V5KHN0cnVjdCBzc2gg KnNzaCwgY29uc3QgY2hhciAqbWV0aG9kKQorQEAgLTIzMCw3ICsyMzAsNyBAQCB1c2VyYXV0aF9w dWJrZXkoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICptZXRob2QpCiAgCQkvKiB0ZXN0IGZv ciBjb3JyZWN0IHNpZ25hdHVyZSAqLwogIAkJYXV0aGVudGljYXRlZCA9IDA7CiAgCQlpZiAobW1f dXNlcl9rZXlfYWxsb3dlZChzc2gsIHB3LCBrZXksIDEsICZhdXRob3B0cykgJiYKQEAgLTg2NCw3 ICs4NjQsNyBAQCBpbmRleCBiNzMwMGNhOWUuLjlmMzM3MWMwNyAxMDA2NDQKICAJCSAgICBzc2hi dWZfcHRyKGIpLCBzc2hidWZfbGVuKGIpLAogIAkJICAgIChzc2gtPmNvbXBhdCAmIFNTSF9CVUdf U0lHVFlQRSkgPT0gMCA/IHBrYWxnIDogTlVMTCwKICAJCSAgICBzc2gtPmNvbXBhdCwgJnNpZ19k ZXRhaWxzKSA9PSAwKSB7Ci1AQCAtMzI2LDYgKzMyNiwyMCBAQCBkb25lOgorQEAgLTMyMyw2ICsz MjMsMjAgQEAgZG9uZToKICAJcmV0dXJuIGF1dGhlbnRpY2F0ZWQ7CiAgfQogIApAQCAtODg2LDEw ICs4ODYsMTAgQEAgaW5kZXggYjczMDBjYTllLi45ZjMzNzFjMDcgMTAwNjQ0CiAgbWF0Y2hfcHJp bmNpcGFsc19maWxlKHN0cnVjdCBwYXNzd2QgKnB3LCBjaGFyICpmaWxlLAogICAgICBzdHJ1Y3Qg c3Noa2V5X2NlcnQgKmNlcnQsIHN0cnVjdCBzc2hhdXRob3B0ICoqYXV0aG9wdHNwKQogZGlmZiAt LWdpdCBhL2F1dGgyLmMgYi9hdXRoMi5jCi1pbmRleCA1YTRiOTMyYTkuLmRhMjRmN2JjYiAxMDA2 NDQKK2luZGV4IDNjM2JkYjc3Ni4uNzkwYmIzNDU0IDEwMDY0NAogLS0tIGEvYXV0aDIuYwogKysr IGIvYXV0aDIuYwotQEAgLTMxMCw5ICszMTAsNiBAQCBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KGlu dCB0eXBlLCB1X2ludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCitAQCAtMzE1LDkgKzMxNSw2 IEBAIGlucHV0X3VzZXJhdXRoX3JlcXVlc3QoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0 IHNzaCAqc3NoKQogIAkJCWF1dGhjdHh0LT52YWxpZCA9IDA7CiAgCQkJLyogSW52YWxpZCB1c2Vy LCBmYWtlIHBhc3N3b3JkIGluZm9ybWF0aW9uICovCiAgCQkJYXV0aGN0eHQtPnB3ID0gZmFrZXB3 KCk7CkBAIC05MDAsMTAgKzkwMCwxMCBAQCBpbmRleCA1YTRiOTMyYTkuLmRhMjRmN2JjYiAxMDA2 NDQKICAjaWZkZWYgVVNFX1BBTQogIAkJaWYgKG9wdGlvbnMudXNlX3BhbSkKIGRpZmYgLS1naXQg YS9jaXBoZXIuYyBiL2NpcGhlci5jCi1pbmRleCA1ZTA5NmNlYmYuLjliNDJmZmI5YSAxMDA2NDQK K2luZGV4IGY3NzBlNjY2Yy4uYjA1NzU1ZDczIDEwMDY0NAogLS0tIGEvY2lwaGVyLmMKICsrKyBi L2NpcGhlci5jCi1AQCAtNjQsMjUgKzY0LDYgQEAgc3RydWN0IHNzaGNpcGhlcl9jdHggeworQEAg LTYzLDI1ICs2Myw2IEBAIHN0cnVjdCBzc2hjaXBoZXJfY3R4IHsKICAJY29uc3Qgc3RydWN0IHNz aGNpcGhlciAqY2lwaGVyOwogIH07CiAgCkBAIC05MjksNyArOTI5LDcgQEAgaW5kZXggNWUwOTZj ZWJmLi45YjQyZmZiOWEgMTAwNjQ0CiAgc3RhdGljIGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgY2lw aGVyc1tdID0gewogICNpZmRlZiBXSVRIX09QRU5TU0wKICAjaWZuZGVmIE9QRU5TU0xfTk9fREVT Ci1AQCAtNDExLDcgKzM5Miw3IEBAIGNpcGhlcl9nZXRfbGVuZ3RoKHN0cnVjdCBzc2hjaXBoZXJf Y3R4ICpjYywgdV9pbnQgKnBsZW5wLCB1X2ludCBzZXFuciwKK0BAIC00MTAsNyArMzkxLDcgQEAg Y2lwaGVyX2dldF9sZW5ndGgoc3RydWN0IHNzaGNpcGhlcl9jdHggKmNjLCB1X2ludCAqcGxlbnAs IHVfaW50IHNlcW5yLAogIHZvaWQKICBjaXBoZXJfZnJlZShzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAq Y2MpCiAgewpAQCAtOTcwLDEwICs5NzAsMTAgQEAgaW5kZXggNjUzM2ZmMmJiLi4yZTA1YTAyMTAg MTAwNjQ0CiAgCiAgY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqY2lwaGVyX2J5X25hbWUoY29uc3Qg Y2hhciAqKTsKIGRpZmYgLS1naXQgYS9rZXguYyBiL2tleC5jCi1pbmRleCA1Zjk1MzA5MDguLjQ0 ZjM1MGNlOCAxMDA2NDQKK2luZGV4IDU0ZTcxMTgxMC4uNzBiZWJjZTZhIDEwMDY0NAogLS0tIGEv a2V4LmMKICsrKyBiL2tleC5jCi1AQCAtNjYsNiArNjYsNyBAQAorQEAgLTY0LDYgKzY0LDcgQEAK ICAjaW5jbHVkZSAic3NoYnVmLmgiCiAgI2luY2x1ZGUgImRpZ2VzdC5oIgogICNpbmNsdWRlICJ4 bWFsbG9jLmgiCkBAIC05ODEsNyArOTgxLDcgQEAgaW5kZXggNWY5NTMwOTA4Li40NGYzNTBjZTgg MTAwNjQ0CiAgCiAgLyogcHJvdG90eXBlICovCiAgc3RhdGljIGludCBrZXhfY2hvb3NlX2NvbmYo c3RydWN0IHNzaCAqLCB1aW50MzJfdCBzZXEpOwotQEAgLTgyMCwxMiArODIxLDE2IEBAIGtleF9z dGFydF9yZWtleChzdHJ1Y3Qgc3NoICpzc2gpCitAQCAtODI2LDEyICs4MjcsMTYgQEAga2V4X3N0 YXJ0X3Jla2V4KHN0cnVjdCBzc2ggKnNzaCkKICB9CiAgCiAgc3RhdGljIGludApAQCAtMTAwMCw3 ICsxMDAwLDcgQEAgaW5kZXggNWY5NTMwOTA4Li40NGYzNTBjZTggMTAwNjQ0CiAgCWlmICgoZW5j LT5jaXBoZXIgPSBjaXBoZXJfYnlfbmFtZShuYW1lKSkgPT0gTlVMTCkgewogIAkJZXJyb3JfZigi dW5zdXBwb3J0ZWQgY2lwaGVyICVzIiwgbmFtZSk7CiAgCQlmcmVlKG5hbWUpOwotQEAgLTg0Niw4 ICs4NTEsMTIgQEAgY2hvb3NlX21hYyhzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2htYWMgKm1h YywgY2hhciAqY2xpZW50LCBjaGFyICpzZXJ2ZXIpCitAQCAtODUyLDggKzg1NywxMiBAQCBjaG9v c2VfbWFjKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaG1hYyAqbWFjLCBjaGFyICpjbGllbnQs IGNoYXIgKnNlcnZlcikKICB7CiAgCWNoYXIgKm5hbWUgPSBtYXRjaF9saXN0KGNsaWVudCwgc2Vy dmVyLCBOVUxMKTsKICAKQEAgLTEwMTQsNyArMTAxNCw3IEBAIGluZGV4IDVmOTUzMDkwOC4uNDRm MzUwY2U4IDEwMDY0NAogIAlpZiAobWFjX3NldHVwKG1hYywgbmFtZSkgPCAwKSB7CiAgCQllcnJv cl9mKCJ1bnN1cHBvcnRlZCBNQUMgJXMiLCBuYW1lKTsKICAJCWZyZWUobmFtZSk7Ci1AQCAtODYw LDEyICs4NjksMTYgQEAgY2hvb3NlX21hYyhzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2htYWMg Km1hYywgY2hhciAqY2xpZW50LCBjaGFyICpzZXJ2ZXIpCitAQCAtODY2LDEyICs4NzUsMTYgQEAg Y2hvb3NlX21hYyhzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2htYWMgKm1hYywgY2hhciAqY2xp ZW50LCBjaGFyICpzZXJ2ZXIpCiAgfQogIAogIHN0YXRpYyBpbnQKQEAgLTEwMzMsNyArMTAzMyw3 IEBAIGluZGV4IDVmOTUzMDkwOC4uNDRmMzUwY2U4IDEwMDY0NAogICNpZmRlZiBXSVRIX1pMSUIK ICAJaWYgKHN0cmNtcChuYW1lLCAiemxpYkBvcGVuc3NoLmNvbSIpID09IDApIHsKICAJCWNvbXAt PnR5cGUgPSBDT01QX0RFTEFZRUQ7Ci1AQCAtMTAyOSw3ICsxMDQyLDcgQEAga2V4X2Nob29zZV9j b25mKHN0cnVjdCBzc2ggKnNzaCwgdWludDMyX3Qgc2VxKQorQEAgLTEwMzUsNyArMTA0OCw3IEBA IGtleF9jaG9vc2VfY29uZihzdHJ1Y3Qgc3NoICpzc2gsIHVpbnQzMl90IHNlcSkKICAJCW5lbmMg ID0gY3RvcyA/IFBST1BPU0FMX0VOQ19BTEdTX0NUT1MgIDogUFJPUE9TQUxfRU5DX0FMR1NfU1RP QzsKICAJCW5tYWMgID0gY3RvcyA/IFBST1BPU0FMX01BQ19BTEdTX0NUT1MgIDogUFJPUE9TQUxf TUFDX0FMR1NfU1RPQzsKICAJCW5jb21wID0gY3RvcyA/IFBST1BPU0FMX0NPTVBfQUxHU19DVE9T IDogUFJPUE9TQUxfQ09NUF9BTEdTX1NUT0M7CkBAIC0xMDQyLDcgKzEwNDIsNyBAQCBpbmRleCA1 Zjk1MzA5MDguLjQ0ZjM1MGNlOCAxMDA2NDQKICAJCSAgICBzcHJvcFtuZW5jXSkpICE9IDApIHsK ICAJCQlrZXgtPmZhaWxlZF9jaG9pY2UgPSBwZWVyW25lbmNdOwogIAkJCXBlZXJbbmVuY10gPSBO VUxMOwotQEAgLTEwNDQsNyArMTA1Nyw3IEBAIGtleF9jaG9vc2VfY29uZihzdHJ1Y3Qgc3NoICpz c2gsIHVpbnQzMl90IHNlcSkKK0BAIC0xMDUwLDcgKzEwNjMsNyBAQCBrZXhfY2hvb3NlX2NvbmYo c3RydWN0IHNzaCAqc3NoLCB1aW50MzJfdCBzZXEpCiAgCQkJcGVlcltubWFjXSA9IE5VTEw7CiAg CQkJZ290byBvdXQ7CiAgCQl9CkBAIC0xMDUxLDcgKzEwNTEsNyBAQCBpbmRleCA1Zjk1MzA5MDgu LjQ0ZjM1MGNlOCAxMDA2NDQKICAJCSAgICBzcHJvcFtuY29tcF0pKSAhPSAwKSB7CiAgCQkJa2V4 LT5mYWlsZWRfY2hvaWNlID0gcGVlcltuY29tcF07CiAgCQkJcGVlcltuY29tcF0gPSBOVUxMOwot QEAgLTEwNjcsNiArMTA4MCwxMCBAQCBrZXhfY2hvb3NlX2NvbmYoc3RydWN0IHNzaCAqc3NoLCB1 aW50MzJfdCBzZXEpCitAQCAtMTA3Myw2ICsxMDg2LDEwIEBAIGtleF9jaG9vc2VfY29uZihzdHJ1 Y3Qgc3NoICpzc2gsIHVpbnQzMl90IHNlcSkKICAJCWRoX25lZWQgPSBNQVhJTVVNKGRoX25lZWQs IG5ld2tleXMtPmVuYy5ibG9ja19zaXplKTsKICAJCWRoX25lZWQgPSBNQVhJTVVNKGRoX25lZWQs IG5ld2tleXMtPmVuYy5pdl9sZW4pOwogIAkJZGhfbmVlZCA9IE1BWElNVU0oZGhfbmVlZCwgbmV3 a2V5cy0+bWFjLmtleV9sZW4pOwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgaW5kZXggNWY5NTMwOTA4 Li40NGYzNTBjZTggMTAwNjQ0CiAgCX0KICAJLyogWFhYIG5lZWQgcnVuZGVuPyAqLwogIAlrZXgt PndlX25lZWQgPSBuZWVkOwotQEAgLTEzMzYsNiArMTM1MywzNiBAQCBkdW1wX2RpZ2VzdChjb25z dCBjaGFyICptc2csIGNvbnN0IHVfY2hhciAqZGlnZXN0LCBpbnQgbGVuKQorQEAgLTEzNDIsNiAr MTM1OSwzNiBAQCBkdW1wX2RpZ2VzdChjb25zdCBjaGFyICptc2csIGNvbnN0IHVfY2hhciAqZGln ZXN0LCBpbnQgbGVuKQogIH0KICAjZW5kaWYKICAKQEAgLTExMDAsMTAgKzExMDAsMTAgQEAgaW5k ZXggNWY5NTMwOTA4Li40NGYzNTBjZTggMTAwNjQ0CiAgICogU2VuZCBhIHBsYWludGV4dCBlcnJv ciBtZXNzYWdlIHRvIHRoZSBwZWVyLCBzdWZmaXhlZCBieSBcclxuLgogICAqIE9ubHkgdXNlZCBk dXJpbmcgYmFubmVyIGV4Y2hhbmdlLCBhbmQgdGhlcmUgb25seSBmb3IgdGhlIHNlcnZlci4KIGRp ZmYgLS1naXQgYS9rZXguaCBiL2tleC5oCi1pbmRleCAyMDZjZTYwZWQuLmNiMDZlODVhMyAxMDA2 NDQKK2luZGV4IDJjODZiMjVmOS4uMGEwY2IxNTYyIDEwMDY0NAogLS0tIGEva2V4LmgKICsrKyBi L2tleC5oCi1AQCAtMjYwLDYgKzI2MCw4IEBAIGludAkga2V4Z3NzX2NsaWVudChzdHJ1Y3Qgc3No ICopOworQEAgLTI2MSw2ICsyNjEsOCBAQCBpbnQJIGtleGdzc19jbGllbnQoc3RydWN0IHNzaCAq KTsKICBpbnQJIGtleGdzc19zZXJ2ZXIoc3RydWN0IHNzaCAqKTsKICAjZW5kaWYKICAKQEAgLTEx MTMsNyArMTExMyw3IEBAIGluZGV4IDIwNmNlNjBlZC4uY2IwNmU4NWEzIDEwMDY0NAogIGludAkg a2V4X2RoX2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwgc3RydWN0IHNz aGJ1ZiAqKiwKICAgICAgc3RydWN0IHNzaGJ1ZiAqKik7CiBkaWZmIC0tZ2l0IGEvbWFjLmMgYi9t YWMuYwotaW5kZXggYzk1ZjVlYTA2Li4zNTRjZmI0MDggMTAwNjQ0CitpbmRleCAxNzYwNzgzMGMu LjI5MTNiOGE4YyAxMDA2NDQKIC0tLSBhL21hYy5jCiArKysgYi9tYWMuYwogQEAgLTIzMCw2ICsy MzAsMjAgQEAgbWFjX2NsZWFyKHN0cnVjdCBzc2htYWMgKm1hYykKQEAgLTExMzgsMTggKzExMzgs MTggQEAgaW5kZXggYzk1ZjVlYTA2Li4zNTRjZmI0MDggMTAwNjQ0CiAgI2RlZmluZQlNQUNfU0VQ CSIsIgogIGludAogZGlmZiAtLWdpdCBhL21hYy5oIGIvbWFjLmgKLWluZGV4IDBiMTE5ZDdhMS4u NWZiNTkzYjllIDEwMDY0NAoraW5kZXggMDQwODlmNDFiLi42YjVlYmM0NGIgMTAwNjQ0CiAtLS0g YS9tYWMuaAogKysrIGIvbWFjLmgKLUBAIC00OSw1ICs0OSw2IEBAIGludAkgbWFjX2NvbXB1dGUo c3RydWN0IHNzaG1hYyAqLCB1X2ludDMyX3QsIGNvbnN0IHVfY2hhciAqLCBpbnQsCi0gaW50CSBt YWNfY2hlY2soc3RydWN0IHNzaG1hYyAqLCB1X2ludDMyX3QsIGNvbnN0IHVfY2hhciAqLCBzaXpl X3QsCitAQCAtNDksNSArNDksNiBAQCBpbnQJIG1hY19jb21wdXRlKHN0cnVjdCBzc2htYWMgKiwg dWludDMyX3QsIGNvbnN0IHVfY2hhciAqLCBpbnQsCisgaW50CSBtYWNfY2hlY2soc3RydWN0IHNz aG1hYyAqLCB1aW50MzJfdCwgY29uc3QgdV9jaGFyICosIHNpemVfdCwKICAgICAgY29uc3QgdV9j aGFyICosIHNpemVfdCk7CiAgdm9pZAkgbWFjX2NsZWFyKHN0cnVjdCBzc2htYWMgKik7CiArdm9p ZAkgbWFjX2Rlc3Ryb3koc3RydWN0IHNzaG1hYyAqKTsKICAKICAjZW5kaWYgLyogU1NITUFDX0gg Ki8KIGRpZmYgLS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9yLmMKLWluZGV4IDQ1MzQ2OTY2NS4u YjJmNTAxNzkwIDEwMDY0NAoraW5kZXggNTI1NTA4M2FiLi4zMDU4ODMyNzggMTAwNjQ0CiAtLS0g YS9tb25pdG9yLmMKICsrKyBiL21vbml0b3IuYwogQEAgLTgzLDYgKzgzLDcgQEAKQEAgLTExNjks NyArMTE2OSw3IEBAIGluZGV4IDQ1MzQ2OTY2NS4uYjJmNTAxNzkwIDEwMDY0NAogIC8qIFN0YXRl IGV4cG9ydGVkIGZyb20gdGhlIGNoaWxkICovCiAgc3RhdGljIHN0cnVjdCBzc2hidWYgKmNoaWxk X3N0YXRlOwogIAotQEAgLTE0NCw2ICsxNDcsMTEgQEAgaW50IG1tX2Fuc3dlcl9nc3NfdXBkYXRl Y3JlZHMoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CitAQCAtMTQ1LDYgKzE0 OCwxMSBAQCBpbnQgbW1fYW5zd2VyX2dzc191cGRhdGVjcmVkcyhzdHJ1Y3Qgc3NoICosIGludCwg c3RydWN0IHNzaGJ1ZiAqKTsKICAjaWZkZWYgU1NIX0FVRElUX0VWRU5UUwogIGludCBtbV9hbnN3 ZXJfYXVkaXRfZXZlbnQoc3RydWN0IHNzaCAqLCBpbnQsIHN0cnVjdCBzc2hidWYgKik7CiAgaW50 IG1tX2Fuc3dlcl9hdWRpdF9jb21tYW5kKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVm ICopOwpAQCAtMTE4MSw3ICsxMTgxLDcgQEAgaW5kZXggNDUzNDY5NjY1Li5iMmY1MDE3OTAgMTAw NjQ0CiAgI2VuZGlmCiAgCiAgc3RhdGljIEF1dGhjdHh0ICphdXRoY3R4dDsKLUBAIC0yMDQsNiAr MjEyLDEwIEBAIHN0cnVjdCBtb25fdGFibGUgbW9uX2Rpc3BhdGNoX3Byb3RvMjBbXSA9IHsKK0BA IC0yMDgsNiArMjE2LDEwIEBAIHN0cnVjdCBtb25fdGFibGUgbW9uX2Rpc3BhdGNoX3Byb3RvMjBb XSA9IHsKICAjZW5kaWYKICAjaWZkZWYgU1NIX0FVRElUX0VWRU5UUwogICAgICB7TU9OSVRPUl9S RVFfQVVESVRfRVZFTlQsIE1PTl9QRVJNSVQsIG1tX2Fuc3dlcl9hdWRpdF9ldmVudH0sCkBAIC0x MTkyLDcgKzExOTIsNyBAQCBpbmRleCA0NTM0Njk2NjUuLmIyZjUwMTc5MCAxMDA2NDQKICAjZW5k aWYKICAjaWZkZWYgQlNEX0FVVEgKICAgICAge01PTklUT1JfUkVRX0JTREFVVEhRVUVSWSwgTU9O X0lTQVVUSCwgbW1fYW5zd2VyX2JzZGF1dGhxdWVyeX0sCi1AQCAtMjM5LDYgKzI1MSwxMSBAQCBz dHJ1Y3QgbW9uX3RhYmxlIG1vbl9kaXNwYXRjaF9wb3N0YXV0aDIwW10gPSB7CitAQCAtMjQzLDYg KzI1NSwxMSBAQCBzdHJ1Y3QgbW9uX3RhYmxlIG1vbl9kaXNwYXRjaF9wb3N0YXV0aDIwW10gPSB7 CiAgI2lmZGVmIFNTSF9BVURJVF9FVkVOVFMKICAgICAge01PTklUT1JfUkVRX0FVRElUX0VWRU5U LCBNT05fUEVSTUlULCBtbV9hbnN3ZXJfYXVkaXRfZXZlbnR9LAogICAgICB7TU9OSVRPUl9SRVFf QVVESVRfQ09NTUFORCwgTU9OX1BFUk1JVCwgbW1fYW5zd2VyX2F1ZGl0X2NvbW1hbmR9LApAQCAt MTIwNCwxMSArMTIwNCwxMSBAQCBpbmRleCA0NTM0Njk2NjUuLmIyZjUwMTc5MCAxMDA2NDQKICAj ZW5kaWYKICAgICAgezAsIDAsIE5VTEx9CiAgfTsKLUBAIC0xNTc1LDggKzE1OTIsMTAgQEAgbW1f YW5zd2VyX2tleXZlcmlmeShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVm ICptKQorQEAgLTE2MDMsOCArMTYyMCwxMCBAQCBtbV9hbnN3ZXJfa2V5dmVyaWZ5KHN0cnVjdCBz c2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCiAgCWludCByLCByZXQsIHJlcV9w cmVzZW5jZSA9IDAsIHJlcV92ZXJpZnkgPSAwLCB2YWxpZF9kYXRhID0gMDsKICAJaW50IGVuY29k ZWRfcmV0OwogIAlzdHJ1Y3Qgc3Noa2V5X3NpZ19kZXRhaWxzICpzaWdfZGV0YWlscyA9IE5VTEw7 Ci0rCWludCB0eXBlID0gMDsKKysJdV9pbnQgdHlwZSA9IDA7CiAgCiAtCWlmICgociA9IHNzaGJ1 Zl9nZXRfc3RyaW5nX2RpcmVjdChtLCAmYmxvYiwgJmJsb2JsZW4pKSAhPSAwIHx8CiArCWlmICgo ciA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZ0eXBlKSkgIT0gMCB8fApAQCAtMTIxNiw3ICsxMjE2LDcg QEAgaW5kZXggNDUzNDY5NjY1Li5iMmY1MDE3OTAgMTAwNjQ0CiAgCSAgICAociA9IHNzaGJ1Zl9n ZXRfc3RyaW5nX2RpcmVjdChtLCAmc2lnbmF0dXJlLCAmc2lnbmF0dXJlbGVuKSkgIT0gMCB8fAog IAkgICAgKHIgPSBzc2hidWZfZ2V0X3N0cmluZ19kaXJlY3QobSwgJmRhdGEsICZkYXRhbGVuKSkg IT0gMCB8fAogIAkgICAgKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcobSwgJnNpZ2FsZywgTlVMTCkp ICE9IDApCi1AQCAtMTU4NSw2ICsxNjA0LDggQEAgbW1fYW5zd2VyX2tleXZlcmlmeShzdHJ1Y3Qg c3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorQEAgLTE2MTMsNiArMTYzMiw4 IEBAIG1tX2Fuc3dlcl9rZXl2ZXJpZnkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0 IHNzaGJ1ZiAqbSkKICAJaWYgKGhvc3RiYXNlZF9jdXNlciA9PSBOVUxMIHx8IGhvc3RiYXNlZF9j aG9zdCA9PSBOVUxMIHx8CiAgCSAgIW1vbml0b3JfYWxsb3dlZF9rZXkoYmxvYiwgYmxvYmxlbikp CiAgCQlmYXRhbF9mKCJiYWQga2V5LCBub3QgcHJldmlvdXNseSBhbGxvd2VkIik7CkBAIC0xMjI1 LDcgKzEyMjUsNyBAQCBpbmRleCA0NTM0Njk2NjUuLmIyZjUwMTc5MCAxMDA2NDQKICAKICAJLyog RW1wdHkgc2lnbmF0dXJlIGFsZ29yaXRobSBtZWFucyBOVUxMLiAqLwogIAlpZiAoKnNpZ2FsZyA9 PSAnXDAnKSB7Ci1AQCAtMTYwMCwxNCArMTYyMSwxOSBAQCBtbV9hbnN3ZXJfa2V5dmVyaWZ5KHN0 cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCitAQCAtMTYyOCwxNCAr MTY0OSwxOSBAQCBtbV9hbnN3ZXJfa2V5dmVyaWZ5KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ss IHN0cnVjdCBzc2hidWYgKm0pCiAgCWNhc2UgTU1fVVNFUktFWToKICAJCXZhbGlkX2RhdGEgPSBt b25pdG9yX3ZhbGlkX3VzZXJibG9iKHNzaCwgZGF0YSwgZGF0YWxlbik7CiAgCQlhdXRoX21ldGhv ZCA9ICJwdWJsaWNrZXkiOwpAQCAtMTI0NSw3ICsxMjQ1LDcgQEAgaW5kZXggNDUzNDY5NjY1Li5i MmY1MDE3OTAgMTAwNjQ0CiAgCQlicmVhazsKICAJfQogIAlpZiAoIXZhbGlkX2RhdGEpCi1AQCAt MTYxOSw4ICsxNjQ1LDYgQEAgbW1fYW5zd2VyX2tleXZlcmlmeShzdHJ1Y3Qgc3NoICpzc2gsIGlu dCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorQEAgLTE2NDcsOCArMTY3Myw2IEBAIG1tX2Fuc3dl cl9rZXl2ZXJpZnkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkK ICAJICAgIFNTSF9GUF9ERUZBVUxUKSkgPT0gTlVMTCkKICAJCWZhdGFsX2YoInNzaGtleV9maW5n ZXJwcmludCBmYWlsZWQiKTsKICAKQEAgLTEyNTQsNyArMTI1NCw3IEBAIGluZGV4IDQ1MzQ2OTY2 NS4uYjJmNTAxNzkwIDEwMDY0NAogIAlkZWJ1ZzNfZigiJXMgJXMgc2lnbmF0dXJlIHVzaW5nICVz ICVzJXMlcyIsIGF1dGhfbWV0aG9kLAogIAkgICAgc3Noa2V5X3R5cGUoa2V5KSwgc2lnYWxnID09 IE5VTEwgPyAiZGVmYXVsdCIgOiBzaWdhbGcsCiAgCSAgICAocmV0ID09IDApID8gInZlcmlmaWVk IiA6ICJ1bnZlcmlmaWVkIiwKLUBAIC0xNzA4LDEzICsxNzMyLDE5IEBAIG1tX3JlY29yZF9sb2dp bihzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIHN0cnVjdCBwYXNzd2QgKnB3KQorQEAgLTE3 MzYsMTMgKzE3NjAsMTkgQEAgbW1fcmVjb3JkX2xvZ2luKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lv biAqcywgc3RydWN0IHBhc3N3ZCAqcHcpCiAgfQogIAogIHN0YXRpYyB2b2lkCkBAIC0xMjc1LDcg KzEyNzUsNyBAQCBpbmRleCA0NTM0Njk2NjUuLmIyZjUwMTc5MCAxMDA2NDQKICAJc2Vzc2lvbl91 bnVzZWQocy0+c2VsZik7CiAgfQogIAotQEAgLTE3ODEsNyArMTgxMSw3IEBAIG1tX2Fuc3dlcl9w dHkoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKK0BAIC0xODA5 LDcgKzE4MzksNyBAQCBtbV9hbnN3ZXJfcHR5KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0 cnVjdCBzc2hidWYgKm0pCiAgCiAgIGVycm9yOgogIAlpZiAocyAhPSBOVUxMKQpAQCAtMTI4NCw3 ICsxMjg0LDcgQEAgaW5kZXggNDUzNDY5NjY1Li5iMmY1MDE3OTAgMTAwNjQ0CiAgCWlmICgociA9 IHNzaGJ1Zl9wdXRfdTMyKG0sIDApKSAhPSAwKQogIAkJZmF0YWxfZnIociwgImFzc2VtYmxlIDAi KTsKICAJbW1fcmVxdWVzdF9zZW5kKHNvY2ssIE1PTklUT1JfQU5TX1BUWSwgbSk7Ci1AQCAtMTgw MCw3ICsxODMwLDcgQEAgbW1fYW5zd2VyX3B0eV9jbGVhbnVwKHN0cnVjdCBzc2ggKnNzaCwgaW50 IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCitAQCAtMTgyOCw3ICsxODU4LDcgQEAgbW1fYW5zd2Vy X3B0eV9jbGVhbnVwKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0p CiAgCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhtLCAmdHR5LCBOVUxMKSkgIT0gMCkKICAJ CWZhdGFsX2ZyKHIsICJwYXJzZSB0dHkiKTsKICAJaWYgKChzID0gc2Vzc2lvbl9ieV90dHkodHR5 KSkgIT0gTlVMTCkKQEAgLTEyOTMsNyArMTI5Myw3IEBAIGluZGV4IDQ1MzQ2OTY2NS4uYjJmNTAx NzkwIDEwMDY0NAogIAlzc2hidWZfcmVzZXQobSk7CiAgCWZyZWUodHR5KTsKICAJcmV0dXJuICgw KTsKLUBAIC0xODIyLDYgKzE4NTIsOCBAQCBtbV9hbnN3ZXJfdGVybShzdHJ1Y3Qgc3NoICpzc2gs IGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICpyZXEpCitAQCAtMTg1MCw2ICsxODgwLDggQEAgbW1f YW5zd2VyX3Rlcm0oc3RydWN0IHNzaCAqc3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqcmVx KQogIAkJc3NocGFtX2NsZWFudXAoKTsKICAjZW5kaWYKICAKQEAgLTEzMDIsNyArMTMwMiw3IEBA IGluZGV4IDQ1MzQ2OTY2NS4uYjJmNTAxNzkwIDEwMDY0NAogIAl3aGlsZSAod2FpdHBpZChwbW9u aXRvci0+bV9waWQsICZzdGF0dXMsIDApID09IC0xKQogIAkJaWYgKGVycm5vICE9IEVJTlRSKQog IAkJCWV4aXQoMSk7Ci1AQCAtMTg2OCwxMiArMTkwMCw0NiBAQCBtbV9hbnN3ZXJfYXVkaXRfY29t bWFuZChzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pCitAQCAt MTg5NiwxMiArMTkyOCw0NiBAQCBtbV9hbnN3ZXJfYXVkaXRfY29tbWFuZChzdHJ1Y3Qgc3NoICpz c2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pCiAgewogIAljaGFyICpjbWQ7CiAgCWlu dCByOwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAgaW5kZXggNDUzNDY5NjY1Li5iMmY1MDE3OTAgMTAw NjQ0CiAgCWZyZWUoY21kKTsKICAJcmV0dXJuICgwKTsKICB9Ci1AQCAtMTk0Niw2ICsyMDEyLDcg QEAgbW9uaXRvcl9hcHBseV9rZXlzdGF0ZShzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBtb25pdG9y ICpwbW9uaXRvcikKK0BAIC0xOTc0LDYgKzIwNDAsNyBAQCBtb25pdG9yX2FwcGx5X2tleXN0YXRl KHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1vbml0b3IgKnBtb25pdG9yKQogIHZvaWQKICBtbV9n ZXRfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRvciAqcG1vbml0b3IpCiAg ewpAQCAtMTM1OCw3ICsxMzU4LDcgQEAgaW5kZXggNDUzNDY5NjY1Li5iMmY1MDE3OTAgMTAwNjQ0 CiAgCWRlYnVnM19mKCJXYWl0aW5nIGZvciBuZXcga2V5cyIpOwogIAogIAlpZiAoKGNoaWxkX3N0 YXRlID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotQEAgLTE5NTMsNiArMjAyMCwxOSBAQCBtbV9n ZXRfa2V5c3RhdGUoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRvciAqcG1vbml0b3IpCitA QCAtMTk4MSw2ICsyMDQ4LDE5IEBAIG1tX2dldF9rZXlzdGF0ZShzdHJ1Y3Qgc3NoICpzc2gsIHN0 cnVjdCBtb25pdG9yICpwbW9uaXRvcikKICAJbW1fcmVxdWVzdF9yZWNlaXZlX2V4cGVjdChwbW9u aXRvci0+bV9zZW5kZmQsIE1PTklUT1JfUkVRX0tFWUVYUE9SVCwKICAJICAgIGNoaWxkX3N0YXRl KTsKICAJZGVidWczX2YoIkdPVCBuZXcga2V5cyIpOwpAQCAtMTM3OCw3ICsxMzc4LDcgQEAgaW5k ZXggNDUzNDY5NjY1Li5iMmY1MDE3OTAgMTAwNjQ0CiAgfQogIAogIAotQEAgLTIyNDAsMyArMjMy MCwxMDIgQEAgbW1fYW5zd2VyX2dzc191cGRhdGVjcmVkcyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBz b2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pIHsKK0BAIC0yMjc1LDMgKzIzNTUsMTAyIEBAIG1tX2Fu c3dlcl9nc3NfdXBkYXRlY3JlZHMoc3RydWN0IHNzaCAqc3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qg c3NoYnVmICptKSB7CiAgCiAgI2VuZGlmIC8qIEdTU0FQSSAqLwogIApAQCAtMTQ4MiwxMCArMTQ4 MiwxMCBAQCBpbmRleCA0NTM0Njk2NjUuLmIyZjUwMTc5MCAxMDA2NDQKICt9CiArI2VuZGlmIC8q IFNTSF9BVURJVF9FVkVOVFMgKi8KIGRpZmYgLS1naXQgYS9tb25pdG9yLmggYi9tb25pdG9yLmgK LWluZGV4IGQ0ZDYzMWRkYy4uMmM2NGYwN2RjIDEwMDY0NAoraW5kZXggZjQ3MjFjNDcyLi4wODdh ZGRmZjUgMTAwNjQ0CiAtLS0gYS9tb25pdG9yLmgKICsrKyBiL21vbml0b3IuaAotQEAgLTY2LDcg KzY2LDEzIEBAIGVudW0gbW9uaXRvcl9yZXF0eXBlIHsKK0BAIC02Nyw3ICs2NywxMyBAQCBlbnVt IG1vbml0b3JfcmVxdHlwZSB7CiAgCU1PTklUT1JfUkVRX1BBTV9RVUVSWSA9IDEwNiwgTU9OSVRP Ul9BTlNfUEFNX1FVRVJZID0gMTA3LAogIAlNT05JVE9SX1JFUV9QQU1fUkVTUE9ORCA9IDEwOCwg TU9OSVRPUl9BTlNfUEFNX1JFU1BPTkQgPSAxMDksCiAgCU1PTklUT1JfUkVRX1BBTV9GUkVFX0NU WCA9IDExMCwgTU9OSVRPUl9BTlNfUEFNX0ZSRUVfQ1RYID0gMTExLApAQCAtMTUwMSwxMCArMTUw MSwxMCBAQCBpbmRleCBkNGQ2MzFkZGMuLjJjNjRmMDdkYyAxMDA2NDQKICAJTU9OSVRPUl9SRVFf R1NTU0lHTiA9IDE1MCwgTU9OSVRPUl9BTlNfR1NTU0lHTiA9IDE1MSwKICAJTU9OSVRPUl9SRVFf R1NTVVBDUkVEUyA9IDE1MiwgTU9OSVRPUl9BTlNfR1NTVVBDUkVEUyA9IDE1MywKIGRpZmYgLS1n aXQgYS9tb25pdG9yX3dyYXAuYyBiL21vbml0b3Jfd3JhcC5jCi1pbmRleCAwOGRjMjllMTIuLmZi NDRhZTczMyAxMDA2NDQKK2luZGV4IDQ5NmRlNDM2ZS4uZWY0MTliNzQzIDEwMDY0NAogLS0tIGEv bW9uaXRvcl93cmFwLmMKICsrKyBiL21vbml0b3Jfd3JhcC5jCi1AQCAtNTc4LDcgKzU3OCw3IEBA IG1tX2tleV9hbGxvd2VkKGVudW0gbW1fa2V5dHlwZSB0eXBlLCBjb25zdCBjaGFyICp1c2VyLCBj b25zdCBjaGFyICpob3N0LAorQEAgLTU5OCw3ICs1OTgsNyBAQCBtbV9rZXlfYWxsb3dlZChlbnVt IG1tX2tleXR5cGUgdHlwZSwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqaG9zdCwKICAg Ki8KICAKICBpbnQKQEAgLTE1MTMsNyArMTUxMyw3IEBAIGluZGV4IDA4ZGMyOWUxMi4uZmI0NGFl NzMzIDEwMDY0NAogICAgICBjb25zdCB1X2NoYXIgKmRhdGEsIHNpemVfdCBkYXRhbGVuLCBjb25z dCBjaGFyICpzaWdhbGcsIHVfaW50IGNvbXBhdCwKICAgICAgc3RydWN0IHNzaGtleV9zaWdfZGV0 YWlscyAqKnNpZ19kZXRhaWxzcCkKICB7Ci1AQCAtNTk0LDcgKzU5NCw4IEBAIG1tX3NzaGtleV92 ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LCBjb25zdCB1X2NoYXIgKnNpZywgc2l6ZV90 IHNpZ2xlbiwKK0BAIC02MTQsNyArNjE0LDggQEAgbW1fc3Noa2V5X3ZlcmlmeShjb25zdCBzdHJ1 Y3Qgc3Noa2V5ICprZXksIGNvbnN0IHVfY2hhciAqc2lnLCBzaXplX3Qgc2lnbGVuLAogIAkJKnNp Z19kZXRhaWxzcCA9IE5VTEw7CiAgCWlmICgobSA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKICAJ CWZhdGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7CkBAIC0xNTIzLDcgKzE1MjMsNyBAQCBpbmRl eCAwOGRjMjllMTIuLmZiNDRhZTczMyAxMDA2NDQKICAJICAgIChyID0gc3NoYnVmX3B1dF9zdHJp bmcobSwgc2lnLCBzaWdsZW4pKSAhPSAwIHx8CiAgCSAgICAociA9IHNzaGJ1Zl9wdXRfc3RyaW5n KG0sIGRhdGEsIGRhdGFsZW4pKSAhPSAwIHx8CiAgCSAgICAociA9IHNzaGJ1Zl9wdXRfY3N0cmlu ZyhtLCBzaWdhbGcgPT0gTlVMTCA/ICIiIDogc2lnYWxnKSkgIT0gMCkKLUBAIC02MjcsNiArNjI4 LDIyIEBAIG1tX3NzaGtleV92ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LCBjb25zdCB1 X2NoYXIgKnNpZywgc2l6ZV90IHNpZ2xlbiwKK0BAIC02NDcsNiArNjQ4LDIyIEBAIG1tX3NzaGtl eV92ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LCBjb25zdCB1X2NoYXIgKnNpZywgc2l6 ZV90IHNpZ2xlbiwKICAJcmV0dXJuIDA7CiAgfQogIApAQCAtMTU0Niw3ICsxNTQ2LDcgQEAgaW5k ZXggMDhkYzI5ZTEyLi5mYjQ0YWU3MzMgMTAwNjQ0CiAgdm9pZAogIG1tX3NlbmRfa2V5c3RhdGUo c3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRvciAqbW9uaXRvcikKICB7Ci1AQCAtMTA0Mywx MSArMTA2MCwxMiBAQCBtbV9hdWRpdF9ldmVudChzdHJ1Y3Qgc3NoICpzc2gsIHNzaF9hdWRpdF9l dmVudF90IGV2ZW50KQorQEAgLTEwNjMsMTEgKzEwODAsMTIgQEAgbW1fYXVkaXRfZXZlbnQoc3Ry dWN0IHNzaCAqc3NoLCBzc2hfYXVkaXRfZXZlbnRfdCBldmVudCkKICAJc3NoYnVmX2ZyZWUobSk7 CiAgfQogIApAQCAtMTU2MSw3ICsxNTYxLDcgQEAgaW5kZXggMDhkYzI5ZTEyLi5mYjQ0YWU3MzMg MTAwNjQ0CiAgCiAgCWRlYnVnM19mKCJlbnRlcmluZyBjb21tYW5kICVzIiwgY29tbWFuZCk7CiAg Ci1AQCAtMTA1Nyw2ICsxMDc1LDMwIEBAIG1tX2F1ZGl0X3J1bl9jb21tYW5kKGNvbnN0IGNoYXIg KmNvbW1hbmQpCitAQCAtMTA3Nyw2ICsxMDk1LDMwIEBAIG1tX2F1ZGl0X3J1bl9jb21tYW5kKGNv bnN0IGNoYXIgKmNvbW1hbmQpCiAgCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CiAgCiAg CW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfUkVRX0FVRElUX0NP TU1BTkQsIG0pOwpAQCAtMTU5Miw3ICsxNTkyLDcgQEAgaW5kZXggMDhkYzI5ZTEyLi5mYjQ0YWU3 MzMgMTAwNjQ0CiAgCXNzaGJ1Zl9mcmVlKG0pOwogIH0KICAjZW5kaWYgLyogU1NIX0FVRElUX0VW RU5UUyAqLwotQEAgLTEzMDUsMyArMTM0Nyw4MyBAQCBzZXJ2ZXJfZ2V0X2Nvbm5lY3Rpb25faW5m byhzdHJ1Y3Qgc3NoICpzc2gsIGludCBwb3B1bGF0ZSwgaW50IHVzZV9kbnMpCitAQCAtMTMyNSwz ICsxMzY3LDgzIEBAIHNlcnZlcl9nZXRfY29ubmVjdGlvbl9pbmZvKHN0cnVjdCBzc2ggKnNzaCwg aW50IHBvcHVsYXRlLCBpbnQgdXNlX2RucykKICAJcmV0dXJuICZjaTsKICB9CiAgCkBAIC0xNjc3 LDEwICsxNjc3LDEwIEBAIGluZGV4IDA4ZGMyOWUxMi4uZmI0NGFlNzMzIDEwMDY0NAogK30KICsj ZW5kaWYgLyogU1NIX0FVRElUX0VWRU5UUyAqLwogZGlmZiAtLWdpdCBhL21vbml0b3Jfd3JhcC5o IGIvbW9uaXRvcl93cmFwLmgKLWluZGV4IDEyYzQ4OWMzMy4uMWJjYmZkMzA1IDEwMDY0NAoraW5k ZXggYTcwOGJmNGQ4Li45ODU2OTY4ZjkgMTAwNjQ0CiAtLS0gYS9tb25pdG9yX3dyYXAuaAogKysr IGIvbW9uaXRvcl93cmFwLmgKLUBAIC02Miw3ICs2Miw5IEBAIGludCBtbV91c2VyX2tleV9hbGxv d2VkKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHBhc3N3ZCAqLCBzdHJ1Y3Qgc3Noa2V5ICosIGlu dCwKK0BAIC02Myw3ICs2Myw5IEBAIGludCBtbV91c2VyX2tleV9hbGxvd2VkKHN0cnVjdCBzc2gg KnNzaCwgc3RydWN0IHBhc3N3ZCAqLCBzdHJ1Y3Qgc3Noa2V5ICosIGludCwKICAgICAgc3RydWN0 IHNzaGF1dGhvcHQgKiopOwogIGludCBtbV9ob3N0YmFzZWRfa2V5X2FsbG93ZWQoc3RydWN0IHNz aCAqLCBzdHJ1Y3QgcGFzc3dkICosIGNvbnN0IGNoYXIgKiwKICAgICAgY29uc3QgY2hhciAqLCBz dHJ1Y3Qgc3Noa2V5ICopOwpAQCAtMTY5MSw3ICsxNjkxLDcgQEAgaW5kZXggMTJjNDg5YzMzLi4x YmNiZmQzMDUgMTAwNjQ0CiAgICAgIGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIg KiwgdV9pbnQsIHN0cnVjdCBzc2hrZXlfc2lnX2RldGFpbHMgKiopOwogIAogIHZvaWQgbW1fZGVj b2RlX2FjdGl2YXRlX3NlcnZlcl9vcHRpb25zKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaGJ1 ZiAqbSk7Ci1AQCAtODksNyArOTEsMTIgQEAgdm9pZCBtbV9zc2hwYW1fZnJlZV9jdHgodm9pZCAq KTsKK0BAIC05MCw3ICs5MiwxMiBAQCB2b2lkIG1tX3NzaHBhbV9mcmVlX2N0eCh2b2lkICopOwog ICNpZmRlZiBTU0hfQVVESVRfRVZFTlRTCiAgI2luY2x1ZGUgImF1ZGl0LmgiCiAgdm9pZCBtbV9h dWRpdF9ldmVudChzdHJ1Y3Qgc3NoICosIHNzaF9hdWRpdF9ldmVudF90KTsKQEAgLTE3MDYsNyAr MTcwNiw3IEBAIGluZGV4IDEyYzQ4OWMzMy4uMWJjYmZkMzA1IDEwMDY0NAogIAogIHN0cnVjdCBT ZXNzaW9uOwogZGlmZiAtLWdpdCBhL3BhY2tldC5jIGIvcGFja2V0LmMKLWluZGV4IDVkZDgyNjlj Mi4uYmMyMmI4NjI1IDEwMDY0NAoraW5kZXggMTkwYTU3OWQxLi5mYTZmNGM4NDMgMTAwNjQ0CiAt LS0gYS9wYWNrZXQuYwogKysrIGIvcGFja2V0LmMKIEBAIC03Nyw2ICs3Nyw3IEBACkBAIC0xNzE3 LDcgKzE3MTcsNyBAQCBpbmRleCA1ZGQ4MjY5YzIuLmJjMjJiODYyNSAxMDA2NDQKICAjaW5jbHVk ZSAiY29tcGF0LmgiCiAgI2luY2x1ZGUgInNzaDIuaCIKICAjaW5jbHVkZSAiY2lwaGVyLmgiCi1A QCAtNTEzLDYgKzUxNCwxMyBAQCBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX291dChzdHJ1Y3Qg c3NoICpzc2gpCitAQCAtNTExLDYgKzUxMiwxMyBAQCBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9u X291dChzdHJ1Y3Qgc3NoICpzc2gpCiAgCXJldHVybiBzc2gtPnN0YXRlLT5jb25uZWN0aW9uX291 dDsKICB9CiAgCkBAIC0xNzMxLDcgKzE3MzEsNyBAQCBpbmRleCA1ZGQ4MjY5YzIuLmJjMjJiODYy NSAxMDA2NDQKICAvKgogICAqIFJldHVybnMgdGhlIElQLWFkZHJlc3Mgb2YgdGhlIHJlbW90ZSBo b3N0IGFzIGEgc3RyaW5nLiAgVGhlIHJldHVybmVkCiAgICogc3RyaW5nIG11c3Qgbm90IGJlIGZy ZWVkLgotQEAgLTY4MywyMiArNjkxLDE5IEBAIHNzaF9wYWNrZXRfY2xvc2VfaW50ZXJuYWwoc3Ry dWN0IHNzaCAqc3NoLCBpbnQgZG9fY2xvc2UpCitAQCAtNjgxLDIyICs2ODksMTkgQEAgc3NoX3Bh Y2tldF9jbG9zZV9pbnRlcm5hbChzdHJ1Y3Qgc3NoICpzc2gsIGludCBkb19jbG9zZSkKICAJc3Ry dWN0IHNlc3Npb25fc3RhdGUgKnN0YXRlID0gc3NoLT5zdGF0ZTsKICAJdV9pbnQgbW9kZTsKICAJ c3RydWN0IHBhY2tldCAqcDsKQEAgLTE3NTksNyArMTc1OSw3IEBAIGluZGV4IDVkZDgyNjljMi4u YmMyMmI4NjI1IDEwMDY0NAogIAl3aGlsZSAoKHAgPSBUQUlMUV9GSVJTVCgmc3RhdGUtPm91dGdv aW5nKSkpIHsKICAJCXNzaGJ1Zl9mcmVlKHAtPnBheWxvYWQpOwogIAkJVEFJTFFfUkVNT1ZFKCZz dGF0ZS0+b3V0Z29pbmcsIHAsIG5leHQpOwotQEAgLTczOSw4ICs3NDQsMTggQEAgc3NoX3BhY2tl dF9jbG9zZV9pbnRlcm5hbChzdHJ1Y3Qgc3NoICpzc2gsIGludCBkb19jbG9zZSkKK0BAIC03Mzcs OCArNzQyLDE4IEBAIHNzaF9wYWNrZXRfY2xvc2VfaW50ZXJuYWwoc3RydWN0IHNzaCAqc3NoLCBp bnQgZG9fY2xvc2UpCiAgI2VuZGlmCS8qIFdJVEhfWkxJQiAqLwogIAljaXBoZXJfZnJlZShzdGF0 ZS0+c2VuZF9jb250ZXh0KTsKICAJY2lwaGVyX2ZyZWUoc3RhdGUtPnJlY2VpdmVfY29udGV4dCk7 CkBAIC0xNzg2LDcgKzE3ODYsNyBAQCBpbmRleCA1ZGQ4MjY5YzIuLmJjMjJiODYyNSAxMDA2NDQK ICAJCXN0YXRlLT5uZXdrZXlzW21vZGVdID0gTlVMTDsKICAJfQogIAkvKiBub3RlIHRoYXQgYm90 aCBieXRlcyBhbmQgdGhlIHNlcW5yIGFyZSBub3QgcmVzZXQgKi8KLUBAIC0yMzQ1LDYgKzIzNjEs NzIgQEAgc3NoX3BhY2tldF9nZXRfb3V0cHV0KHN0cnVjdCBzc2ggKnNzaCkKK0BAIC0yMzg1LDYg KzI0MDEsNzIgQEAgc3NoX3BhY2tldF9nZXRfb3V0cHV0KHN0cnVjdCBzc2ggKnNzaCkKICAJcmV0 dXJuICh2b2lkICopc3NoLT5zdGF0ZS0+b3V0cHV0OwogIH0KICAKQEAgLTE4NjAsMTcgKzE4NjAs MTcgQEAgaW5kZXggNWRkODI2OWMyLi5iYzIyYjg2MjUgMTAwNjQ0CiAgc3RhdGljIGludAogIHNz aF9wYWNrZXRfc2V0X3Bvc3RhdXRoKHN0cnVjdCBzc2ggKnNzaCkKIGRpZmYgLS1naXQgYS9wYWNr ZXQuaCBiL3BhY2tldC5oCi1pbmRleCAwNzJmMjc0MjUuLmUwODdkNGM4YSAxMDA2NDQKK2luZGV4 IDNlOGFjYjJjZC4uZTlhZWZkYWFkIDEwMDY0NAogLS0tIGEvcGFja2V0LmgKICsrKyBiL3BhY2tl dC5oCi1AQCAtMjIzLDQgKzIyMyw1IEBAIGNvbnN0IHVfY2hhcgkqc3NocGt0X3B0cihzdHJ1Y3Qg c3NoICosIHNpemVfdCAqbGVucCk7CitAQCAtMjI1LDQgKzIyNSw1IEBAIGNoYXIJKmNvbm5lY3Rp b25faW5mb19tZXNzYWdlKHN0cnVjdCBzc2ggKnNzaCk7CiAgIyB1bmRlZiBFQ19QT0lOVAogICNl bmRpZgogIAogK3ZvaWQJIHBhY2tldF9kZXN0cm95X2FsbChzdHJ1Y3Qgc3NoICosIGludCwgaW50 KTsKICAjZW5kaWYJCQkJLyogUEFDS0VUX0ggKi8KIGRpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9z ZXNzaW9uLmMKLWluZGV4IGQwMzRmNWM2NS4uMTA3ZWRjZjkxIDEwMDY0NAoraW5kZXggMGMyNjQ0 OGQ5Li43NWZmMTA4MGUgMTAwNjQ0CiAtLS0gYS9zZXNzaW9uLmMKICsrKyBiL3Nlc3Npb24uYwog QEAgLTEzOSw2ICsxMzksNyBAQCBzdGF0aWMgaW50IHNlc3Npb25fcHR5X3JlcShzdHJ1Y3Qgc3No ICosIFNlc3Npb24gKik7CkBAIC0xODgxLDcgKzE4ODEsNyBAQCBpbmRleCBkMDM0ZjVjNjUuLjEw N2VkY2Y5MSAxMDA2NDQKICBleHRlcm4gc3RydWN0IHNzaGJ1ZiAqbG9naW5tc2c7CiAgZXh0ZXJu IHN0cnVjdCBzc2hhdXRob3B0ICphdXRoX29wdHM7CiAgZXh0ZXJuIGNoYXIgKnR1bl9md2RfaWZu YW1lczsgLyogc2VydmVybG9vcC5jICovCi1AQCAtNjE3LDYgKzYxOCwxNCBAQCBkb19leGVjX3B0 eShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKmNvbW1hbmQpCitAQCAt NjE4LDYgKzYxOSwxNCBAQCBkb19leGVjX3B0eShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMs IGNvbnN0IGNoYXIgKmNvbW1hbmQpCiAgCS8qIFBhcmVudC4gIENsb3NlIHRoZSBzbGF2ZSBzaWRl IG9mIHRoZSBwc2V1ZG8gdHR5LiAqLwogIAljbG9zZSh0dHlmZCk7CiAgCkBAIC0xODk2LDcgKzE4 OTYsNyBAQCBpbmRleCBkMDM0ZjVjNjUuLjEwN2VkY2Y5MSAxMDA2NDQKICAJLyogRW50ZXIgaW50 ZXJhY3RpdmUgc2Vzc2lvbi4gKi8KICAJcy0+cHR5bWFzdGVyID0gcHR5bWFzdGVyOwogIAlzZXNz aW9uX3NldF9mZHMoc3NoLCBzLCBwdHlmZCwgZmRvdXQsIC0xLCAxLCAxKTsKLUBAIC03MDcsMTUg KzcxNiwxOSBAQCBkb19leGVjKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hh ciAqY29tbWFuZCkKK0BAIC03MDgsMTUgKzcxNywxOSBAQCBkb19leGVjKHN0cnVjdCBzc2ggKnNz aCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKICAJICAgIHMtPnNlbGYpOwogIAog ICNpZmRlZiBTU0hfQVVESVRfRVZFTlRTCkBAIC0xOTE4LDcgKzE5MTgsNyBAQCBpbmRleCBkMDM0 ZjVjNjUuLjEwN2VkY2Y5MSAxMDA2NDQKICAjZW5kaWYKICAJaWYgKHMtPnR0eWZkICE9IC0xKQog IAkJcmV0ID0gZG9fZXhlY19wdHkoc3NoLCBzLCBjb21tYW5kKTsKLUBAIC0xNDk1LDcgKzE1MDgs MTEgQEAgZG9fY2hpbGQoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzLCBjb25zdCBjaGFyICpj b21tYW5kKQorQEAgLTE1MDIsNyArMTUxNSwxMSBAQCBkb19jaGlsZChzdHJ1Y3Qgc3NoICpzc2gs IFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKmNvbW1hbmQpCiAgCXNzaHBrdF9mbXRfY29ubmVjdGlv bl9pZChzc2gsIHJlbW90ZV9pZCwgc2l6ZW9mKHJlbW90ZV9pZCkpOwogIAogIAkvKiByZW1vdmUg a2V5cyBmcm9tIG1lbW9yeSAqLwpAQCAtMTkzMCw3ICsxOTMwLDcgQEAgaW5kZXggZDAzNGY1YzY1 Li4xMDdlZGNmOTEgMTAwNjQ0CiAgCiAgCS8qIEZvcmNlIGEgcGFzc3dvcmQgY2hhbmdlICovCiAg CWlmIChzLT5hdXRoY3R4dC0+Zm9yY2VfcHdjaGFuZ2UpIHsKLUBAIC0xNzEwLDYgKzE3MjcsOSBA QCBzZXNzaW9uX3VudXNlZChpbnQgaWQpCitAQCAtMTcxNyw2ICsxNzM0LDkgQEAgc2Vzc2lvbl91 bnVzZWQoaW50IGlkKQogIAlzZXNzaW9uc1tpZF0udHR5ZmQgPSAtMTsKICAJc2Vzc2lvbnNbaWRd LnB0eW1hc3RlciA9IC0xOwogIAlzZXNzaW9uc1tpZF0ueDExX2NoYW5pZHMgPSBOVUxMOwpAQCAt MTk0MCw3ICsxOTQwLDcgQEAgaW5kZXggZDAzNGY1YzY1Li4xMDdlZGNmOTEgMTAwNjQ0CiAgCXNl c3Npb25zW2lkXS5uZXh0X3VudXNlZCA9IHNlc3Npb25zX2ZpcnN0X3VudXNlZDsKICAJc2Vzc2lv bnNfZmlyc3RfdW51c2VkID0gaWQ7CiAgfQotQEAgLTE3ODgsNiArMTgwOCwxOSBAQCBzZXNzaW9u X29wZW4oQXV0aGN0eHQgKmF1dGhjdHh0LCBpbnQgY2hhbmlkKQorQEAgLTE3OTUsNiArMTgxNSwx OSBAQCBzZXNzaW9uX29wZW4oQXV0aGN0eHQgKmF1dGhjdHh0LCBpbnQgY2hhbmlkKQogIAlyZXR1 cm4gMTsKICB9CiAgCkBAIC0xOTYwLDcgKzE5NjAsNyBAQCBpbmRleCBkMDM0ZjVjNjUuLjEwN2Vk Y2Y5MSAxMDA2NDQKICBTZXNzaW9uICoKICBzZXNzaW9uX2J5X3R0eShjaGFyICp0dHkpCiAgewot QEAgLTI0MDUsNiArMjQzOCwzMiBAQCBzZXNzaW9uX2V4aXRfbWVzc2FnZShzdHJ1Y3Qgc3NoICpz c2gsIFNlc3Npb24gKnMsIGludCBzdGF0dXMpCitAQCAtMjQxMyw2ICsyNDQ2LDMyIEBAIHNlc3Np b25fZXhpdF9tZXNzYWdlKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgaW50IHN0YXR1cykK ICAJCWNoYW5fd3JpdGVfZmFpbGVkKHNzaCwgYyk7CiAgfQogIApAQCAtMTk5Myw3ICsxOTkzLDcg QEAgaW5kZXggZDAzNGY1YzY1Li4xMDdlZGNmOTEgMTAwNjQ0CiAgdm9pZAogIHNlc3Npb25fY2xv c2Uoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzKQogIHsKLUBAIC0yNDE4LDYgKzI0NzcsMTAg QEAgc2Vzc2lvbl9jbG9zZShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMpCitAQCAtMjQyNiw2 ICsyNDg1LDEwIEBAIHNlc3Npb25fY2xvc2Uoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzKQog IAogIAlpZiAocy0+dHR5ZmQgIT0gLTEpCiAgCQlzZXNzaW9uX3B0eV9jbGVhbnVwKHMpOwpAQCAt MjAwNCw3ICsyMDA0LDcgQEAgaW5kZXggZDAzNGY1YzY1Li4xMDdlZGNmOTEgMTAwNjQ0CiAgCWZy ZWUocy0+dGVybSk7CiAgCWZyZWUocy0+ZGlzcGxheSk7CiAgCWZyZWUocy0+eDExX2NoYW5pZHMp OwotQEAgLTI0OTQsMTQgKzI1NTcsMTQgQEAgc2Vzc2lvbl9jbG9zZV9ieV9jaGFubmVsKHN0cnVj dCBzc2ggKnNzaCwgaW50IGlkLCBpbnQgZm9yY2UsIHZvaWQgKmFyZykKK0BAIC0yNTAyLDE0ICsy NTY1LDE0IEBAIHNlc3Npb25fY2xvc2VfYnlfY2hhbm5lbChzdHJ1Y3Qgc3NoICpzc2gsIGludCBp ZCwgaW50IGZvcmNlLCB2b2lkICphcmcpCiAgfQogIAogIHZvaWQKQEAgLTIwMjEsNyArMjAyMSw3 IEBAIGluZGV4IGQwMzRmNWM2NS4uMTA3ZWRjZjkxIDEwMDY0NAogIAkJCWVsc2UKICAJCQkJc2Vz c2lvbl9jbG9zZShzc2gsIHMpOwogIAkJfQotQEAgLTI2MjcsNiArMjY5MCwxNSBAQCBkb19hdXRo ZW50aWNhdGVkMihzdHJ1Y3Qgc3NoICpzc2gsIEF1dGhjdHh0ICphdXRoY3R4dCkKK0BAIC0yNjM1 LDYgKzI2OTgsMTUgQEAgZG9fYXV0aGVudGljYXRlZDIoc3RydWN0IHNzaCAqc3NoLCBBdXRoY3R4 dCAqYXV0aGN0eHQpCiAgCXNlcnZlcl9sb29wMihzc2gsIGF1dGhjdHh0KTsKICB9CiAgCkBAIC0y MDM3LDcgKzIwMzcsNyBAQCBpbmRleCBkMDM0ZjVjNjUuLjEwN2VkY2Y5MSAxMDA2NDQKICB2b2lk CiAgZG9fY2xlYW51cChzdHJ1Y3Qgc3NoICpzc2gsIEF1dGhjdHh0ICphdXRoY3R4dCkKICB7Ci1A QCAtMjY5MCw3ICsyNzYyLDcgQEAgZG9fY2xlYW51cChzdHJ1Y3Qgc3NoICpzc2gsIEF1dGhjdHh0 ICphdXRoY3R4dCkKK0BAIC0yNjk4LDcgKzI3NzAsNyBAQCBkb19jbGVhbnVwKHN0cnVjdCBzc2gg KnNzaCwgQXV0aGN0eHQgKmF1dGhjdHh0KQogIAkgKiBvciBpZiBydW5uaW5nIGluIG1vbml0b3Iu CiAgCSAqLwogIAlpZiAobW1faXNfbW9uaXRvcigpKQpAQCAtMjA3OCwxMCArMjA3OCwxMCBAQCBp bmRleCAzNDRhMWRkZjkuLmE0MWM2ZWZjZCAxMDA2NDQKICB2b2lkCSBzZXNzaW9uX2Nsb3NlKHN0 cnVjdCBzc2ggKiwgU2Vzc2lvbiAqKTsKICB2b2lkCSBkb19zZXR1c2VyY29udGV4dChzdHJ1Y3Qg cGFzc3dkICopOwogZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMK LWluZGV4IGQ2YmVjZTk0MS4uZTQ5ZTRmYjUxIDEwMDY0NAoraW5kZXggMjNiODBlYjAxLi5kODk3 MmZiZDUgMTAwNjQ0CiAtLS0gYS9zc2hkLXNlc3Npb24uYwogKysrIGIvc3NoZC1zZXNzaW9uLmMK LUBAIC0xODgsOCArMTg4LDggQEAgc3RydWN0IGluY2x1ZGVfbGlzdCBpbmNsdWRlcyA9IFRBSUxR X0hFQURfSU5JVElBTElaRVIoaW5jbHVkZXMpOworQEAgLTE4MSw4ICsxODEsOCBAQCBzdHJ1Y3Qg aW5jbHVkZV9saXN0IGluY2x1ZGVzID0gVEFJTFFfSEVBRF9JTklUSUFMSVpFUihpbmNsdWRlcyk7 CiAgc3RydWN0IHNzaGJ1ZiAqbG9naW5tc2c7CiAgCiAgLyogUHJvdG90eXBlcyBmb3IgdmFyaW91 cyBmdW5jdGlvbnMgZGVmaW5lZCBsYXRlciBpbiB0aGlzIGZpbGUuICovCkBAIC0yMDkyLDcgKzIw OTIsNyBAQCBpbmRleCBkNmJlY2U5NDEuLmU0OWU0ZmI1MSAxMDA2NDQKICAKICAvKiBYWFggcmVk dWNlIHRvIHN0dWIgb25jZSBwb3N0YXV0aCBzcGxpdCAqLwogIGludAotQEAgLTIwMiw2ICsyMDIs MzUgQEAgbW1faXNfbW9uaXRvcih2b2lkKQorQEAgLTE5NSw2ICsxOTUsMzUgQEAgbW1faXNfbW9u aXRvcih2b2lkKQogIAlyZXR1cm4gKHBtb25pdG9yICYmIHBtb25pdG9yLT5tX3BpZCA+IDApOwog IH0KICAKQEAgLTIxMTgsNyArMjExOCw3IEBAIGluZGV4IGQ2YmVjZTk0MS4uZTQ5ZTRmYjUxIDEw MDY0NAogKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KICsgICAgICBjYXNlIEtFWV9FRDI1NTE5 X0NFUlQ6CiArICAgICAgY2FzZSBLRVlfRUQyNTUxOToKLSsgICAgICAgICAgICAgIHJldHVybiAo ay0+ZWQyNTUxOV9wayAhPSBOVUxMKTsKKysgICAgICAgICAgICAgIHJldHVybiAoay0+ZWQyNTUx OV9zayAhPSBOVUxMKTsKICsgICAgICBkZWZhdWx0OgogKyAgICAgICAgICAgICAgLyogZmF0YWwo ImtleV9pc19wcml2YXRlOiBiYWQga2V5IHR5cGUgJWQiLCBrLT50eXBlKTsgKi8KICsgICAgICAg ICAgICAgIHJldHVybiAwOwpAQCAtMjEyOCw3ICsyMTI4LDcgQEAgaW5kZXggZDZiZWNlOTQxLi5l NDllNGZiNTEgMTAwNjQ0CiAgLyoKICAgKiBTaWduYWwgaGFuZGxlciBmb3IgdGhlIGFsYXJtIGFm dGVyIHRoZSBsb2dpbiBncmFjZSBwZXJpb2QgaGFzIGV4cGlyZWQuCiAgICogQXMgdXN1YWwsIHRo aXMgbWF5IG9ubHkgdGFrZSBzaWduYWwtc2FmZSBhY3Rpb25zLCBldmVuIHRob3VnaCBpdCBpcwot QEAgLTIzMCwxOCArMjU5LDQwIEBAIGdyYWNlX2FsYXJtX2hhbmRsZXIoaW50IHNpZykKK0BAIC0y MjMsMTggKzI1Miw0MCBAQCBncmFjZV9hbGFybV9oYW5kbGVyKGludCBzaWcpCiAgCV9leGl0KEVY SVRfTE9HSU5fR1JBQ0UpOwogIH0KICAKQEAgLTIxNzIsNyArMjE3Miw3IEBAIGluZGV4IGQ2YmVj ZTk0MS4uZTQ5ZTRmYjUxIDEwMDY0NAogIAkJCXNzaGtleV9mcmVlKHNlbnNpdGl2ZV9kYXRhLmhv c3RfY2VydGlmaWNhdGVzW2ldKTsKICAJCQlzZW5zaXRpdmVfZGF0YS5ob3N0X2NlcnRpZmljYXRl c1tpXSA9IE5VTEw7CiAgCQl9Ci1AQCAtMjUwLDIwICszMDEsMzggQEAgZGVzdHJveV9zZW5zaXRp dmVfZGF0YSh2b2lkKQorQEAgLTI0MywyMCArMjk0LDM4IEBAIGRlc3Ryb3lfc2Vuc2l0aXZlX2Rh dGEodm9pZCkKICAKICAvKiBEZW1vdGUgcHJpdmF0ZSB0byBwdWJsaWMga2V5cyBmb3IgbmV0d29y ayBjaGlsZCAqLwogIHZvaWQKQEAgLTIyMTIsNyArMjIxMiw3IEBAIGluZGV4IGQ2YmVjZTk0MS4u ZTQ5ZTRmYjUxIDEwMDY0NAogIAkJfQogIAkJLyogQ2VydHMgZG8gbm90IG5lZWQgZGVtb3Rpb24g Ki8KICAJfQotQEAgLTQ0MSw3ICs1MTAsNyBAQCBwcml2c2VwX3Bvc3RhdXRoKHN0cnVjdCBzc2gg KnNzaCwgQXV0aGN0eHQgKmF1dGhjdHh0KQorQEAgLTQxMyw3ICs0ODIsNyBAQCBwcml2c2VwX3Bv c3RhdXRoKHN0cnVjdCBzc2ggKnNzaCwgQXV0aGN0eHQgKmF1dGhjdHh0KQogIAkJc2V0X2xvZ19o YW5kbGVyKG1tX2xvZ19oYW5kbGVyLCBwbW9uaXRvcik7CiAgCiAgCS8qIERlbW90ZSB0aGUgcHJp dmF0ZSBrZXlzIHRvIHB1YmxpYyBrZXlzLiAqLwpAQCAtMjIyMSw3ICsyMjIxLDcgQEAgaW5kZXgg ZDZiZWNlOTQxLi5lNDllNGZiNTEgMTAwNjQ0CiAgCiAgCXJlc2VlZF9wcm5ncygpOwogIAotQEAg LTEzNjUsNiArMTQzNCw5IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCitAQCAtMTMzMyw2ICsx NDAyLDkgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKICAJZG9fYXV0aGVudGljYXRlZChzc2gs IGF1dGhjdHh0KTsKICAKICAJLyogVGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gdGVybWluYXRlZC4g Ki8KQEAgLTIyMzEsNyArMjIzMSw3IEBAIGluZGV4IGQ2YmVjZTk0MS4uZTQ5ZTRmYjUxIDEwMDY0 NAogIAlzc2hfcGFja2V0X2dldF9ieXRlcyhzc2gsICZpYnl0ZXMsICZvYnl0ZXMpOwogIAl2ZXJi b3NlKCJUcmFuc2ZlcnJlZDogc2VudCAlbGx1LCByZWNlaXZlZCAlbGx1IGJ5dGVzIiwKICAJICAg ICh1bnNpZ25lZCBsb25nIGxvbmcpb2J5dGVzLCAodW5zaWduZWQgbG9uZyBsb25nKWlieXRlcyk7 Ci1AQCAtMTQxMCw2ICsxNDgyLDE0IEBAIHNzaGRfaG9zdGtleV9zaWduKHN0cnVjdCBzc2ggKnNz aCwgc3RydWN0IHNzaGtleSAqcHJpdmtleSwKK0BAIC0xMzc4LDYgKzE0NTAsMTYgQEAgc3NoZF9o b3N0a2V5X3NpZ24oc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3Qgc3Noa2V5ICpwcml2a2V5LAogIHZv aWQKICBjbGVhbnVwX2V4aXQoaW50IGkpCiAgewpAQCAtMjI0MywxMCArMjI0MywxMiBAQCBpbmRl eCBkNmJlY2U5NDEuLmU0OWU0ZmI1MSAxMDA2NDQKICsJaWYgKGluX2NsZWFudXApCiArCQlfZXhp dChpKTsKICsJaW5fY2xlYW51cCA9IDE7Ci0gCWV4dGVybiBpbnQgYXV0aF9hdHRlbXB0ZWQ7IC8q IG1vbml0b3IuYyAqLwotIAorKwlleHRlcm4gaW50IGF1dGhfYXR0ZW1wdGVkOyAvKiBtb25pdG9y LmMgKi8KKysKICAJaWYgKHRoZV9hY3RpdmVfc3RhdGUgIT0gTlVMTCAmJiB0aGVfYXV0aGN0eHQg IT0gTlVMTCkgewotQEAgLTE0MjYsNyArMTUwNiw5IEBAIGNsZWFudXBfZXhpdChpbnQgaSkKKyAJ CWRvX2NsZWFudXAodGhlX2FjdGl2ZV9zdGF0ZSwgdGhlX2F1dGhjdHh0KTsKKyAJCWlmIChwcml2 c2VwX2lzX3ByZWF1dGggJiYKK0BAIC0xMzkyLDcgKzE0NzQsOSBAQCBjbGVhbnVwX2V4aXQoaW50 IGkpCiAgCX0KICAjaWZkZWYgU1NIX0FVRElUX0VWRU5UUwogIAkvKiBkb25lIGFmdGVyIGRvX2Ns ZWFudXAgc28gaXQgY2FuIGNhbmNlbCB0aGUgUEFNIGF1dGggJ3RocmVhZCcgKi8KQEAgLTIyNTgs MTAgKzIyNjAsMTAgQEAgaW5kZXggZDZiZWNlOTQxLi5lNDllNGZiNTEgMTAwNjQ0CiAgI2VuZGlm CiAgCS8qIE92ZXJyaWRlIGRlZmF1bHQgZmF0YWwgZXhpdCB2YWx1ZSB3aGVuIGF1dGggd2FzIGF0 dGVtcHRlZCAqLwogZGlmZiAtLWdpdCBhL3NzaGQuYyBiL3NzaGQuYwotaW5kZXggM2FiODFlMjY4 Li5lZDdmYWY5NmQgMTAwNjQ0CitpbmRleCA1NTI0MzU4MTcuLjIyYWQ0ZGZmMCAxMDA2NDQKIC0t LSBhL3NzaGQuYwogKysrIGIvc3NoZC5jCi1AQCAtMjEzLDYgKzIxMywxNSBAQCBjbG9zZV9saXN0 ZW5fc29ja3Modm9pZCkKK0BAIC0yMDYsNiArMjA2LDE1IEBAIGNsb3NlX2xpc3Rlbl9zb2Nrcyh2 b2lkKQogIAludW1fbGlzdGVuX3NvY2tzID0gMDsKICB9CiAgCkBAIC0yMjc3LDcgKzIyNzksNyBA QCBpbmRleCAzYWI4MWUyNjguLmVkN2ZhZjk2ZCAxMDA2NDQKICAvKiBBbGxvY2F0ZSBhbmQgaW5p dGlhbGlzZSB0aGUgY2hpbGRyZW4gYXJyYXkgKi8KICBzdGF0aWMgdm9pZAogIGNoaWxkX2FsbG9j KHZvaWQpCi1AQCAtOTU4LDYgKzk2Nyw3IEBAIHNlcnZlcl9hY2NlcHRfbG9vcChpbnQgKnNvY2tf aW4sIGludCAqc29ja19vdXQsIGludCAqbmV3c29jaywgaW50ICpjb25maWdfcywKK0BAIC05NTYs NiArOTY1LDcgQEAgc2VydmVyX2FjY2VwdF9sb29wKGludCAqc29ja19pbiwgaW50ICpzb2NrX291 dCwgaW50ICpuZXdzb2NrLCBpbnQgKmNvbmZpZ19zLAogIAkJaWYgKHJlY2VpdmVkX3NpZ3Rlcm0p IHsKICAJCQlsb2dpdCgiUmVjZWl2ZWQgc2lnbmFsICVkOyB0ZXJtaW5hdGluZy4iLAogIAkJCSAg ICAoaW50KSByZWNlaXZlZF9zaWd0ZXJtKTsKQEAgLTIyODYsNSArMjI4OCw1IEBAIGluZGV4IDNh YjgxZTI2OC4uZWQ3ZmFmOTZkIDEwMDY0NAogIAkJCWlmIChvcHRpb25zLnBpZF9maWxlICE9IE5V TEwpCiAgCQkJCXVubGluayhvcHRpb25zLnBpZF9maWxlKTsKIC0tIAotMi41Mi4wCisyLjUzLjAK IAoKZGlmZiAtLWdpdCBhLzAwMzYtb3BlbnNzaC03LjFwMi1hdWRpdC1yYWNlLWNvbmRpdGlvbi5w YXRjaCBiLzAwMzYtb3BlbnNzaC03LjFwMi1hdWRpdC1yYWNlLWNvbmRpdGlvbi5wYXRjaAppbmRl eCA4NjNmNzAwLi4zYmQ2NTk0IDEwMDY0NAotLS0gYS8wMDM2LW9wZW5zc2gtNy4xcDItYXVkaXQt cmFjZS1jb25kaXRpb24ucGF0Y2gKKysrIGIvMDAzNi1vcGVuc3NoLTcuMXAyLWF1ZGl0LXJhY2Ut Y29uZGl0aW9uLnBhdGNoCkBAIC0xLDggKzEsOSBAQAotRnJvbSBmZmEzZmRiMmFkMmM3YWZjOTE5 OTNkOTMwMWUzNWQyZTlhODNlYTQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbSBkMThj MGU4YzEyMTEwZDdhNDZiY2JmYjY3Y2I2ZTI4ZTdlYmNlY2YxIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgogRGF0ZTog VGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAotU3ViamVjdDogW1BBVENIIDM2LzUzXSBv cGVuc3NoLTcuMXAyLWF1ZGl0LXJhY2UtY29uZGl0aW9uCitTdWJqZWN0OiBbUEFUQ0ggMzYvNTRd IG9wZW5zc2gtNy4xcDItYXVkaXQtcmFjZS1jb25kaXRpb24KIAorIyBBdWRpdCByYWNlIGNvbmRp dGlvbiBpbiBmb3JrZWQgY2hpbGQgKCMxMzEwNjg0KQogLS0tCiAgbW9uaXRvcl93cmFwLmMgfCA0 NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAgbW9uaXRvcl93cmFwLmgg fCAgMiArKwpAQCAtMTAsMTAgKzExLDEwIEBAIFN1YmplY3Q6IFtQQVRDSCAzNi81M10gb3BlbnNz aC03LjFwMi1hdWRpdC1yYWNlLWNvbmRpdGlvbgogIDMgZmlsZXMgY2hhbmdlZCwgMTAyIGluc2Vy dGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCiAKIGRpZmYgLS1naXQgYS9tb25pdG9yX3dyYXAuYyBi L21vbml0b3Jfd3JhcC5jCi1pbmRleCBmYjQ0YWU3MzMuLjE3YTZjOTc4NiAxMDA2NDQKK2luZGV4 IGVmNDE5Yjc0My4uZmEzNzE4OTI0IDEwMDY0NAogLS0tIGEvbW9uaXRvcl93cmFwLmMKICsrKyBi L21vbml0b3Jfd3JhcC5jCi1AQCAtMTQyNiw0ICsxNDI2LDUwIEBAIG1tX2F1ZGl0X2Rlc3Ryb3lf c2Vuc2l0aXZlX2RhdGEoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICpmcCwgcGlkX3QgcGlk LCB1aWRfCitAQCAtMTQ0Niw0ICsxNDQ2LDUwIEBAIG1tX2F1ZGl0X2Rlc3Ryb3lfc2Vuc2l0aXZl X2RhdGEoc3RydWN0IHNzaCAqc3NoLCBjb25zdCBjaGFyICpmcCwgcGlkX3QgcGlkLCB1aWRfCiAg CW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfUkVRX0FVRElUX1NF UlZFUl9LRVlfRlJFRSwgbSk7CiAgCXNzaGJ1Zl9mcmVlKG0pOwogIH0KQEAgLTY1LDEwICs2Niwx MCBAQCBpbmRleCBmYjQ0YWU3MzMuLjE3YTZjOTc4NiAxMDA2NDQKICt9CiAgI2VuZGlmIC8qIFNT SF9BVURJVF9FVkVOVFMgKi8KIGRpZmYgLS1naXQgYS9tb25pdG9yX3dyYXAuaCBiL21vbml0b3Jf d3JhcC5oCi1pbmRleCAxYmNiZmQzMDUuLjJiODE0ZGJkMSAxMDA2NDQKK2luZGV4IDk4NTY5Njhm OS4uMDg2NWY1OWNiIDEwMDY0NAogLS0tIGEvbW9uaXRvcl93cmFwLmgKICsrKyBiL21vbml0b3Jf d3JhcC5oCi1AQCAtOTcsNiArOTcsOCBAQCB2b2lkIG1tX2F1ZGl0X3Vuc3VwcG9ydGVkX2JvZHko c3RydWN0IHNzaCAqLCBpbnQpOworQEAgLTk4LDYgKzk4LDggQEAgdm9pZCBtbV9hdWRpdF91bnN1 cHBvcnRlZF9ib2R5KHN0cnVjdCBzc2ggKiwgaW50KTsKICB2b2lkIG1tX2F1ZGl0X2tleF9ib2R5 KHN0cnVjdCBzc2ggKiwgaW50LCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIHBpZF90 LCB1aWRfdCk7CiAgdm9pZCBtbV9hdWRpdF9zZXNzaW9uX2tleV9mcmVlX2JvZHkoc3RydWN0IHNz aCAqLCBpbnQsIHBpZF90LCB1aWRfdCk7CiAgdm9pZCBtbV9hdWRpdF9kZXN0cm95X3NlbnNpdGl2 ZV9kYXRhKHN0cnVjdCBzc2ggKiwgY29uc3QgY2hhciAqLCBwaWRfdCwgdWlkX3QpOwpAQCAtNzgs NyArNzksNyBAQCBpbmRleCAxYmNiZmQzMDUuLjJiODE0ZGJkMSAxMDA2NDQKICAKICBzdHJ1Y3Qg U2Vzc2lvbjsKIGRpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9zZXNzaW9uLmMKLWluZGV4IDEwN2Vk Y2Y5MS4uODAyODJkZmQ4IDEwMDY0NAoraW5kZXggNzVmZjEwODBlLi4xYTdmNWNhN2EgMTAwNjQ0 CiAtLS0gYS9zZXNzaW9uLmMKICsrKyBiL3Nlc3Npb24uYwogQEAgLTE2MSw2ICsxNjEsMTAgQEAg c3RhdGljIFNlc3Npb24gKnNlc3Npb25zID0gTlVMTDsKQEAgLTkyLDcgKzkzLDcgQEAgaW5kZXgg MTA3ZWRjZjkxLi44MDI4MmRmZDggMTAwNjQ0CiAgc3RhdGljIGludCBpc19jaGlsZCA9IDA7CiAg c3RhdGljIGludCBpbl9jaHJvb3QgPSAwOwogIHN0YXRpYyBpbnQgaGF2ZV9kZXZfbG9nID0gMTsK LUBAIC0zNTgsNiArMzYyLDggQEAgeGF1dGhfdmFsaWRfc3RyaW5nKGNvbnN0IGNoYXIgKnMpCitA QCAtMzU5LDYgKzM2Myw4IEBAIHhhdXRoX3ZhbGlkX3N0cmluZyhjb25zdCBjaGFyICpzKQogIAly ZXR1cm4gMTsKICB9CiAgCkBAIC0xMDEsNyArMTAyLDcgQEAgaW5kZXggMTA3ZWRjZjkxLi44MDI4 MmRmZDggMTAwNjQ0CiAgI2RlZmluZSBVU0VfUElQRVMgMQogIC8qCiAgICogVGhpcyBpcyBjYWxs ZWQgdG8gZm9yayBhbmQgZXhlY3V0ZSBhIGNvbW1hbmQgd2hlbiB3ZSBoYXZlIG5vIHR0eS4gIFRo aXMKLUBAIC00ODEsNiArNDg3LDggQEAgZG9fZXhlY19ub19wdHkoc3RydWN0IHNzaCAqc3NoLCBT ZXNzaW9uICpzLCBjb25zdCBjaGFyICpjb21tYW5kKQorQEAgLTQ4Miw2ICs0ODgsOCBAQCBkb19l eGVjX25vX3B0eShzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKmNvbW1h bmQpCiAgCQljbG9zZShlcnJbMF0pOwogICNlbmRpZgogIApAQCAtMTEwLDcgKzExMSw3IEBAIGlu ZGV4IDEwN2VkY2Y5MS4uODAyODJkZmQ4IDEwMDY0NAogIAkJLyogRG8gcHJvY2Vzc2luZyBmb3Ig dGhlIGNoaWxkIChleGVjIGNvbW1hbmQgZXRjKS4gKi8KICAJCWRvX2NoaWxkKHNzaCwgcywgY29t bWFuZCk7CiAgCQkvKiBOT1RSRUFDSEVEICovCi1AQCAtNTk1LDYgKzYwMyw5IEBAIGRvX2V4ZWNf cHR5KHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKK0BA IC01OTYsNiArNjA0LDkgQEAgZG9fZXhlY19wdHkoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpz LCBjb25zdCBjaGFyICpjb21tYW5kKQogIAkJLyogQ2xvc2UgdGhlIGV4dHJhIGRlc2NyaXB0b3Ig Zm9yIHRoZSBwc2V1ZG8gdHR5LiAqLwogIAkJY2xvc2UodHR5ZmQpOwogIApAQCAtMTIwLDcgKzEy MSw3IEBAIGluZGV4IDEwN2VkY2Y5MS4uODAyODJkZmQ4IDEwMDY0NAogIAkJLyogcmVjb3JkIGxv Z2luLCBldGMuIHNpbWlsYXIgdG8gbG9naW4oMSkgKi8KICAjaWZuZGVmIEhBVkVfT1NGX1NJQQog IAkJZG9fbG9naW4oc3NoLCBzLCBjb21tYW5kKTsKLUBAIC03MjksNiArNzQwLDggQEAgZG9fZXhl YyhzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMsIGNvbnN0IGNoYXIgKmNvbW1hbmQpCitAQCAt NzMwLDYgKzc0MSw4IEBAIGRvX2V4ZWMoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzLCBjb25z dCBjaGFyICpjb21tYW5kKQogIAl9CiAgCWlmIChzLT5jb21tYW5kICE9IE5VTEwgJiYgcy0+cHR5 ZmQgPT0gLTEpCiAgCQlzLT5jb21tYW5kX2hhbmRsZSA9IG1tX2F1ZGl0X3J1bl9jb21tYW5kKHNz aCwgcy0+Y29tbWFuZCk7CkBAIC0xMjksNyArMTMwLDcgQEAgaW5kZXggMTA3ZWRjZjkxLi44MDI4 MmRmZDggMTAwNjQ0CiAgI2VuZGlmCiAgCWlmIChzLT50dHlmZCAhPSAtMSkKICAJCXJldCA9IGRv X2V4ZWNfcHR5KHNzaCwgcywgY29tbWFuZCk7Ci1AQCAtNzQ0LDYgKzc1NywyMCBAQCBkb19leGVj KHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKK0BAIC03 NDUsNiArNzU4LDIwIEBAIGRvX2V4ZWMoc3RydWN0IHNzaCAqc3NoLCBTZXNzaW9uICpzLCBjb25z dCBjaGFyICpjb21tYW5kKQogIAkgKi8KICAJc3NoYnVmX3Jlc2V0KGxvZ2lubXNnKTsKICAKQEAg LTE1MCw3ICsxNTEsNyBAQCBpbmRleCAxMDdlZGNmOTEuLjgwMjgyZGZkOCAxMDA2NDQKICAJcmV0 dXJuIHJldDsKICB9CiAgCi1AQCAtMTQ5MCw2ICsxNTE3LDMzIEBAIGNoaWxkX2Nsb3NlX2Zkcyhz dHJ1Y3Qgc3NoICpzc2gpCitAQCAtMTQ5Nyw2ICsxNTI0LDMzIEBAIGNoaWxkX2Nsb3NlX2Zkcyhz dHJ1Y3Qgc3NoICpzc2gpCiAgCWxvZ19yZWRpcmVjdF9zdGRlcnJfdG8oTlVMTCk7CiAgfQogIApA QCAtMTg0LDcgKzE4NSw3IEBAIGluZGV4IDEwN2VkY2Y5MS4uODAyODJkZmQ4IDEwMDY0NAogIC8q CiAgICogUGVyZm9ybXMgY29tbW9uIHByb2Nlc3NpbmcgZm9yIHRoZSBjaGlsZCwgc3VjaCBhcyBz ZXR0aW5nIHVwIHRoZQogICAqIGVudmlyb25tZW50LCBjbG9zaW5nIGV4dHJhIGZpbGUgZGVzY3Jp cHRvcnMsIHNldHRpbmcgdGhlIHVzZXIgYW5kIGdyb3VwCi1AQCAtMTUwNywxMyArMTU2MSw2IEBA IGRvX2NoaWxkKHN0cnVjdCBzc2ggKnNzaCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFu ZCkKK0BAIC0xNTE0LDEzICsxNTY4LDYgQEAgZG9fY2hpbGQoc3RydWN0IHNzaCAqc3NoLCBTZXNz aW9uICpzLCBjb25zdCBjaGFyICpjb21tYW5kKQogIAogIAlzc2hwa3RfZm10X2Nvbm5lY3Rpb25f aWQoc3NoLCByZW1vdGVfaWQsIHNpemVvZihyZW1vdGVfaWQpKTsKICAKQEAgLTE5OSw1ICsyMDAs NSBAQCBpbmRleCAxMDdlZGNmOTEuLjgwMjgyZGZkOCAxMDA2NDQKICAJaWYgKHMtPmF1dGhjdHh0 LT5mb3JjZV9wd2NoYW5nZSkgewogIAkJZG9fc2V0dXNlcmNvbnRleHQocHcpOwogLS0gCi0yLjUy LjAKKzIuNTMuMAogCgpkaWZmIC0tZ2l0IGEvMDAzNy1vcGVuc3NoLTkuMHAxLWF1ZGl0LWxvZy5w YXRjaCBiLzAwMzctb3BlbnNzaC05LjBwMS1hdWRpdC1sb2cucGF0Y2gKaW5kZXggYzU4YTVmZS4u NGU4ZjI3ZSAxMDA2NDQKLS0tIGEvMDAzNy1vcGVuc3NoLTkuMHAxLWF1ZGl0LWxvZy5wYXRjaAor KysgYi8wMDM3LW9wZW5zc2gtOS4wcDEtYXVkaXQtbG9nLnBhdGNoCkBAIC0xLDggKzEsOSBAQAot RnJvbSBlZjA1YjFmY2VkZGM2NGNmYzdlYjQwZGFhYzYwYTEzNzYzNGQwYTlmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQorRnJvbSA4YTQ4NDNmODcyNjAyOGNhNmIxMDI4NTY5OGRjY2VhODUyNjMy NTkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQogRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJl bGRtaXRAZ21haWwuY29tPgogRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAot U3ViamVjdDogW1BBVENIIDM3LzUzXSBvcGVuc3NoLTkuMHAxLWF1ZGl0LWxvZworU3ViamVjdDog W1BBVENIIDM3LzU0XSBvcGVuc3NoLTkuMHAxLWF1ZGl0LWxvZwogCisjIGh0dHBzOi8vYnVnemls bGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTk0NwogLS0tCiAgYXVkaXQtYnNtLmMg ICB8ICAyICstCiAgYXVkaXQtbGludXguYyB8IDc2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLQpAQCAtMTEsNyArMTIsNyBAQCBTdWJqZWN0OiBbUEFU Q0ggMzcvNTNdIG9wZW5zc2gtOS4wcDEtYXVkaXQtbG9nCiAgNCBmaWxlcyBjaGFuZ2VkLCA4MSBp bnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKIAogZGlmZiAtLWdpdCBhL2F1ZGl0LWJzbS5j IGIvYXVkaXQtYnNtLmMKLWluZGV4IGE2MjkyY2I4Zi4uMGYyZWY4MjM1IDEwMDY0NAoraW5kZXgg NjBiZTE1MTRiLi4zZjUzMmIwM2UgMTAwNjQ0CiAtLS0gYS9hdWRpdC1ic20uYwogKysrIGIvYXVk aXQtYnNtLmMKIEBAIC00MDUsNyArNDA1LDcgQEAgYXVkaXRfc2Vzc2lvbl9jbG9zZShzdHJ1Y3Qg bG9naW5pbmZvICpsaSkKQEAgLTI2MSw1ICsyNjIsNSBAQCBpbmRleCA0NWQ2NmNjZmYuLjA1YWMx MzJjZiAxMDA2NDQKICB2b2lkCWF1ZGl0X3Vuc3VwcG9ydGVkKHN0cnVjdCBzc2ggKiwgaW50KTsK ICB2b2lkCWF1ZGl0X2tleChzdHJ1Y3Qgc3NoICosIGludCwgY2hhciAqLCBjaGFyICosIGNoYXIg KiwgY2hhciAqKTsKIC0tIAotMi41Mi4wCisyLjUzLjAKIAoKZGlmZiAtLWdpdCBhLzAwMzgtb3Bl bnNzaC03LjdwMS1maXBzLnBhdGNoIGIvMDAzOC1vcGVuc3NoLTcuN3AxLWZpcHMucGF0Y2gKaW5k ZXggMThlYmVkMy4uY2JjOWM1ZSAxMDA2NDQKLS0tIGEvMDAzOC1vcGVuc3NoLTcuN3AxLWZpcHMu cGF0Y2gKKysrIGIvMDAzOC1vcGVuc3NoLTcuN3AxLWZpcHMucGF0Y2gKQEAgLTEsNyArMSw3IEBA Ci1Gcm9tIGQ3ZGQ0NWY5ZTE5YTcxMjY5ODI4YmM1Zjg1Njc2MTNhMDJmNmZlZWYgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCitGcm9tIDU1YzBkNTRiOTFjYzM5ZWQ2ZjEwNTQyZjg4M2RiYWFkNmEz MjEzY2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8 YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBUaHUsIDI4IEF1ZyAyMDI1IDE0OjAxOjM4ICswMjAw Ci1TdWJqZWN0OiBbUEFUQ0ggMzgvNTNdIG9wZW5zc2gtNy43cDEtZmlwcworU3ViamVjdDogW1BB VENIIDM4LzU0XSBvcGVuc3NoLTcuN3AxLWZpcHMKIAogLS0tCiAgZGguYyAgICAgICAgICAgICAg ICAgICAgIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKwpAQCAtMTEsMjQgKzExLDI1IEBAIFN1 YmplY3Q6IFtQQVRDSCAzOC81M10gb3BlbnNzaC03LjdwMS1maXBzCiAga2V4Z2VuLmMgICAgICAg ICAgICAgICAgIHwgNzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQog IGtleGdleGMuYyAgICAgICAgICAgICAgICB8ICA1ICsrKwogIG15cHJvcG9zYWwuaCAgICAgICAg ICAgICB8IDMzICsrKysrKysrKysrKysrKysrKwotIHJlYWRjb25mLmMgICAgICAgICAgICAgICB8 IDE2ICsrKysrKy0tLQorIHJlYWRjb25mLmMgICAgICAgICAgICAgICB8IDIxICsrKysrKysrKy0t LQogIHNhbmRib3gtc2VjY29tcC1maWx0ZXIuYyB8ICAzICsrCi0gc2VydmNvbmYuYyAgICAgICAg ICAgICAgIHwgMTggKysrKysrKy0tLQorIHNlcnZjb25mLmMgICAgICAgICAgICAgICB8IDIzICsr KysrKysrKystLS0KICBzc2gtZWQyNTUxOS5jICAgICAgICAgICAgfCAgOSArKysrKwogIHNzaC1n c3MuaCAgICAgICAgICAgICAgICB8ICA1ICsrKwogIHNzaC1rZXlnZW4uYyAgICAgICAgICAgICB8 IDIwICsrKysrKysrKy0tCi0gc3NoLXJzYS5jICAgICAgICAgICAgICAgIHwgIDMgKysKKyBzc2gt a2V5c2Nhbi5jICAgICAgICAgICAgfCAgOSArKysrKworIHNzaC1yc2EuYyAgICAgICAgICAgICAg ICB8ICA1ICsrKwogIHNzaC5jICAgICAgICAgICAgICAgICAgICB8ICA1ICsrKwotIHNzaGNvbm5l Y3QyLmMgICAgICAgICAgICB8ICA5ICsrKystCi0gc3NoZC5jICAgICAgICAgICAgICAgICAgIHwg MTMgKysrKysrKworIHNzaGNvbm5lY3QyLmMgICAgICAgICAgICB8IDExICsrKysrLQorIHNzaGQu YyAgICAgICAgICAgICAgICAgICB8IDE5ICsrKysrKysrKysrCiAgc3Noa2V5LmMgICAgICAgICAg ICAgICAgIHwgMzcgKysrKysrKysrKysrKysrKysrKysKLSAxOCBmaWxlcyBjaGFuZ2VkLCAyNzEg aW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRpb25zKC0pCisgMTkgZmlsZXMgY2hhbmdlZCwgMzAwIGlu c2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvZGguYyBiL2RoLmMK LWluZGV4IDE2OGRlYTFkZC4uOGM5YTI5ZmE3IDEwMDY0NAoraW5kZXggYjI5MTc1MGQ4Li4zZWZl MGE2OWYgMTAwNjQ0CiAtLS0gYS9kaC5jCiArKysgYi9kaC5jCi1AQCAtMzYsNiArMzYsNyBAQAor QEAgLTM3LDYgKzM3LDcgQEAKICAKICAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgogICNpbmNsdWRl IDxvcGVuc3NsL2RoLmg+CkBAIC0zNiw3ICszNyw3IEBAIGluZGV4IDE2OGRlYTFkZC4uOGM5YTI5 ZmE3IDEwMDY0NAogIAogICNpbmNsdWRlICJkaC5oIgogICNpbmNsdWRlICJwYXRobmFtZXMuaCIK LUBAIC0xNjQsNiArMTY1LDEyIEBAIGNob29zZV9kaChpbnQgbWluLCBpbnQgd2FudGJpdHMsIGlu dCBtYXgpCitAQCAtMTYzLDYgKzE2NCwxMiBAQCBjaG9vc2VfZGgoaW50IG1pbiwgaW50IHdhbnRi aXRzLCBpbnQgbWF4KQogIAlpbnQgYmVzdCwgYmVzdGNvdW50LCB3aGljaCwgbGluZW51bTsKICAJ c3RydWN0IGRoZ3JvdXAgZGhnOwogIApAQCAtNDksNyArNTAsNyBAQCBpbmRleCAxNjhkZWExZGQu LjhjOWEyOWZhNyAxMDA2NDQKICAJaWYgKChmID0gZm9wZW4oZ2V0X21vZHVsaV9maWxlbmFtZSgp LCAiciIpKSA9PSBOVUxMKSB7CiAgCQlsb2dpdCgiV0FSTklORzogY291bGQgbm90IG9wZW4gJXMg KCVzKSwgdXNpbmcgZml4ZWQgbW9kdWx1cyIsCiAgCQkgICAgZ2V0X21vZHVsaV9maWxlbmFtZSgp LCBzdHJlcnJvcihlcnJubykpOwotQEAgLTUwMiw0ICs1MDksMzggQEAgZGhfZXN0aW1hdGUoaW50 IGJpdHMpCitAQCAtNTAxLDQgKzUwOCwzOCBAQCBkaF9lc3RpbWF0ZShpbnQgYml0cykKICAJcmV0 dXJuIDgxOTI7CiAgfQogIApAQCAtMTAxLDEwICsxMDIsMTAgQEAgaW5kZXggYzYzMjZhMzlkLi5l NTFlMjkyYjggMTAwNjQ0CiAgdV9pbnQJIGRoX2VzdGltYXRlKGludCk7CiAgdm9pZAkgZGhfc2V0 X21vZHVsaV9maWxlKGNvbnN0IGNoYXIgKik7CiBkaWZmIC0tZ2l0IGEva2V4LW5hbWVzLmMgYi9r ZXgtbmFtZXMuYwotaW5kZXggMzFlMzk1YWEyLi4xMzYwYTQwOTUgMTAwNjQ0CitpbmRleCA3Njlh MzY4MTAuLmMwNzYxYWU4ZiAxMDA2NDQKIC0tLSBhL2tleC1uYW1lcy5jCiArKysgYi9rZXgtbmFt ZXMuYwotQEAgLTMzLDYgKzMzLDcgQEAKK0BAIC0zMiw2ICszMiw3IEBACiAgCiAgI2lmZGVmIFdJ VEhfT1BFTlNTTAogICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgpAQCAtMTEyLDcgKzExMyw3 IEBAIGluZGV4IDMxZTM5NWFhMi4uMTM2MGE0MDk1IDEwMDY0NAogICNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgogICNlbmRpZgogIAotQEAgLTIwOCw3ICsyMDksMTAgQEAga2V4X25hbWVzX3ZhbGlk KGNvbnN0IGNoYXIgKm5hbWVzKQorQEAgLTIwNyw3ICsyMDgsMTAgQEAga2V4X25hbWVzX3ZhbGlk KGNvbnN0IGNoYXIgKm5hbWVzKQogIAlmb3IgKChwID0gc3Ryc2VwKCZjcCwgIiwiKSk7IHAgJiYg KnAgIT0gJ1wwJzsKICAJICAgIChwID0gc3Ryc2VwKCZjcCwgIiwiKSkpIHsKICAJCWlmIChrZXhf YWxnX2J5X25hbWUocCkgPT0gTlVMTCkgewpAQCAtMTI1LDEwICsxMjYsMTAgQEAgaW5kZXggMzFl Mzk1YWEyLi4xMzYwYTQwOTUgMTAwNjQ0CiAgCQkJcmV0dXJuIDA7CiAgCQl9CiBkaWZmIC0tZ2l0 IGEva2V4LmMgYi9rZXguYwotaW5kZXggNDRmMzUwY2U4Li5kYTJhNTM3Y2UgMTAwNjQ0CitpbmRl eCA3MGJlYmNlNmEuLmUxMDU5ZGVjNCAxMDA2NDQKIC0tLSBhL2tleC5jCiArKysgYi9rZXguYwot QEAgLTM4LDYgKzM4LDcgQEAKK0BAIC0zNyw2ICszNyw3IEBACiAgI2lmZGVmIFdJVEhfT1BFTlNT TAogICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgogICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+ CkBAIC0xMzYsNyArMTM3LDcgQEAgaW5kZXggNDRmMzUwY2U4Li5kYTJhNTM3Y2UgMTAwNjQ0CiAg IyBpZmRlZiBIQVZFX0VWUF9LREZfQ1RYX05FVwogICMgaW5jbHVkZSA8b3BlbnNzbC9rZGYuaD4K ICAjIGluY2x1ZGUgPG9wZW5zc2wvcGFyYW1fYnVpbGQuaD4KLUBAIC0xMDcsNyArMTA4LDcgQEAg a2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpwcm9w W1BST1BPU0FMX01BWF0sCitAQCAtMTA1LDcgKzEwNiw3IEBAIGtleF9wcm9wb3NhbF9wb3B1bGF0 ZV9lbnRyaWVzKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqcHJvcFtQUk9QT1NBTF9NQVhdLAogIAog IAkvKiBBcHBlbmQgRVhUX0lORk8gc2lnbmFsbGluZyB0byBLZXhBbGdvcml0aG1zICovCiAgCWlm IChrZXhhbGdvcyA9PSBOVUxMKQpAQCAtMTQ2LDcgKzE0Nyw3IEBAIGluZGV4IDQ0ZjM1MGNlOC4u ZGEyYTUzN2NlIDEwMDY0NAogIAkgICAgImV4dC1pbmZvLXMsa2V4LXN0cmljdC1zLXYwMEBvcGVu c3NoLmNvbSIgOgogIAkgICAgImV4dC1pbmZvLWMsa2V4LXN0cmljdC1jLXYwMEBvcGVuc3NoLmNv bSIpKSA9PSBOVUxMKQogZGlmZiAtLWdpdCBhL2tleGdlbi5jIGIva2V4Z2VuLmMKLWluZGV4IDU4 ZWRjNzlhZC4uOWE5NzBhZGYxIDEwMDY0NAoraW5kZXggYTJiZWIzZjEwLi4yZjgyNTI0ODggMTAw NjQ0CiAtLS0gYS9rZXhnZW4uYwogKysrIGIva2V4Z2VuLmMKIEBAIC0zMSw2ICszMSw3IEBACkBA IC0xODksNyArMTkwLDcgQEAgaW5kZXggNThlZGM3OWFkLi45YTk3MGFkZjEgMTAwNjQ0CiAgCQli cmVhazsKICAJZGVmYXVsdDoKICAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci1AQCAt MTg5LDE1ICsyMDUsMzAgQEAgaW5wdXRfa2V4X2dlbl9yZXBseShpbnQgdHlwZSwgdV9pbnQzMl90 IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorQEAgLTE4OSwxNSArMjA1LDMwIEBAIGlucHV0X2tleF9n ZW5fcmVwbHkoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQogIAkJYnJl YWs7CiAgI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwogIAljYXNlIEtFWF9DMjU1MTlfU0hBMjU2 OgpAQCAtMjI1LDcgKzIyNiw3IEBAIGluZGV4IDU4ZWRjNzlhZC4uOWE5NzBhZGYxIDEwMDY0NAog IAkJYnJlYWs7CiAgCWRlZmF1bHQ6CiAgCQlyID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwot QEAgLTMxMiwxNiArMzQzLDMxIEBAIGlucHV0X2tleF9nZW5faW5pdChpbnQgdHlwZSwgdV9pbnQz Ml90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorQEAgLTMxMiwxNiArMzQzLDMxIEBAIGlucHV0X2tl eF9nZW5faW5pdChpbnQgdHlwZSwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCiAgCQli cmVhazsKICAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCiAgCWNhc2UgS0VYX0MyNTUxOV9TSEEy NTY6CkBAIC0yNjQsMTggKzI2NSwxOCBAQCBpbmRleCA1OGVkYzc5YWQuLjlhOTcwYWRmMSAxMDA2 NDQKICAJZGVmYXVsdDoKICAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CiBkaWZmIC0t Z2l0IGEva2V4Z2V4Yy5jIGIva2V4Z2V4Yy5jCi1pbmRleCAwOTdkODNmMzAuLmNjYmI5YjU4MCAx MDA2NDQKK2luZGV4IDFjMjE5NGE4Zi4uZjlhNThiOTU1IDEwMDY0NAogLS0tIGEva2V4Z2V4Yy5j CiArKysgYi9rZXhnZXhjLmMKLUBAIC0yOCw2ICsyOCw3IEBACi0gCitAQCAtMjksNiArMjksNyBA QAogICNpZmRlZiBXSVRIX09QRU5TU0wKKyAjaW5jbHVkZSAib3BlbmJzZC1jb21wYXQvb3BlbnNz bC1jb21wYXQuaCIKICAKICsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CiAgI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgogIAotICNpbmNsdWRlICJvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5o IgotQEAgLTExNSw2ICsxMTYsMTAgQEAgaW5wdXRfa2V4X2RoX2dleF9ncm91cChpbnQgdHlwZSwg dV9pbnQzMl90IHNlcSwgc3RydWN0IHNzaCAqc3NoKQorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ CitAQCAtMTE0LDYgKzExNSwxMCBAQCBpbnB1dF9rZXhfZGhfZ2V4X2dyb3VwKGludCB0eXBlLCB1 aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKICAJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7 CiAgCQlnb3RvIG91dDsKICAJfQpAQCAtMjg3LDEwICsyODgsMTAgQEAgaW5kZXggMDk3ZDgzZjMw Li5jY2JiOWI1ODAgMTAwNjQ0CiAgCiAgCS8qIGdlbmVyYXRlIGFuZCBzZW5kICdlJywgY2xpZW50 IERIIHB1YmxpYyBrZXkgKi8KIGRpZmYgLS1naXQgYS9teXByb3Bvc2FsLmggYi9teXByb3Bvc2Fs LmgKLWluZGV4IDhmZTkyNzZjMi4uM2UwZWM2ODI2IDEwMDY0NAoraW5kZXggZDk5MmQ4YjEyLi42 NDMzZTA4MjAgMTAwNjQ0CiAtLS0gYS9teXByb3Bvc2FsLmgKICsrKyBiL215cHJvcG9zYWwuaAot QEAgLTU4LDYgKzU4LDE4IEBACitAQCAtNjAsNiArNjAsMTggQEAKICAJInJzYS1zaGEyLTUxMiwi IFwKICAJInJzYS1zaGEyLTI1NiIKICAKQEAgLTMwOSw3ICszMTAsNyBAQCBpbmRleCA4ZmU5Mjc2 YzIuLjNlMGVjNjgyNiAxMDA2NDQKICAjZGVmaW5lCUtFWF9TRVJWRVJfRU5DUllQVCBcCiAgCSJj aGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSwiIFwKICAJImFlczEyOC1nY21Ab3BlbnNzaC5j b20sYWVzMjU2LWdjbUBvcGVuc3NoLmNvbSwiIFwKLUBAIC03OSw2ICs5MSwyNyBAQAorQEAgLTgx LDYgKzkzLDI3IEBACiAgCiAgI2RlZmluZSBLRVhfQ0xJRU5UX01BQyBLRVhfU0VSVkVSX01BQwog IApAQCAtMzM4LDE4ICszMzksMjMgQEAgaW5kZXggOGZlOTI3NmMyLi4zZTBlYzY4MjYgMTAwNjQ0 CiAgI2RlZmluZQlTU0hfQUxMT1dFRF9DQV9TSUdBTEdTCVwKICAJInNzaC1lZDI1NTE5LCIgXAog ZGlmZiAtLWdpdCBhL3JlYWRjb25mLmMgYi9yZWFkY29uZi5jCi1pbmRleCAzZjY3ZjRkZTQuLmI2 YWQ0N2I0OSAxMDA2NDQKK2luZGV4IDkwMDQwNzZlNC4uMDU4ZTUzY2YxIDEwMDY0NAogLS0tIGEv cmVhZGNvbmYuYwogKysrIGIvcmVhZGNvbmYuYwotQEAgLTM5LDYgKzM5LDcgQEAKK0BAIC0zOCw2 ICszOCwxMiBAQAogICNpbmNsdWRlIDxzdHJpbmcuaD4KICAjaW5jbHVkZSA8c3RkYXJnLmg+CiAg I2luY2x1ZGUgPHVuaXN0ZC5oPgogKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAjaWZkZWYg VVNFX1NZU1RFTV9HTE9CCi0gIyBpbmNsdWRlIDxnbG9iLmg+Ci0gI2Vsc2UKLUBAIC0zMDc4LDEx ICszMDc5LDE2IEBAIGZpbGxfZGVmYXVsdF9vcHRpb25zKE9wdGlvbnMgKiBvcHRpb25zKQorKyNp ZmRlZiBVU0VfU1lTVEVNX0dMT0IKKysjIGluY2x1ZGUgPGdsb2IuaD4KKysjZWxzZQorKyMgaW5j bHVkZSAib3BlbmJzZC1jb21wYXQvZ2xvYi5oIgorKyNlbmRpZgorICNpbmNsdWRlIDx1dGlsLmg+ CisgI2lmIGRlZmluZWQoSEFWRV9TVFJOVklTKSAmJiBkZWZpbmVkKEhBVkVfVklTX0gpICYmICFk ZWZpbmVkKEJST0tFTl9TVFJOVklTKQorICMgaW5jbHVkZSA8dmlzLmg+CitAQCAtMzA5OCwxMSAr MzEwNCwxNiBAQCBmaWxsX2RlZmF1bHRfb3B0aW9ucyhPcHRpb25zICogb3B0aW9ucykKICAJYWxs X2tleSA9IHNzaGtleV9hbGdfbGlzdCgwLCAwLCAxLCAnLCcpOwogIAlhbGxfc2lnID0gc3Noa2V5 X2FsZ19saXN0KDAsIDEsIDEsICcsJyk7CiAgCS8qIHJlbW92ZSB1bnN1cHBvcnRlZCBhbGdvcyBm cm9tIGRlZmF1bHQgbGlzdHMgKi8KQEAgLTM3Miw3ICszNzgsNyBAQCBpbmRleCAzZjY3ZjRkZTQu LmI2YWQ0N2I0OSAxMDA2NDQKICAJZG8geyBcCiAgCQlpZiAoKHIgPSBrZXhfYXNzZW1ibGVfbmFt ZXMoJm9wdGlvbnMtPndoYXQsIFwKIGRpZmYgLS1naXQgYS9zYW5kYm94LXNlY2NvbXAtZmlsdGVy LmMgYi9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMKLWluZGV4IGUwZjJkNDI4OS4uYzUyZjY0ODk3 IDEwMDY0NAoraW5kZXggZTIxMDQ4ZjNhLi4yNWM5ZGY0MmEgMTAwNjQ0CiAtLS0gYS9zYW5kYm94 LXNlY2NvbXAtZmlsdGVyLmMKICsrKyBiL3NhbmRib3gtc2VjY29tcC1maWx0ZXIuYwogQEAgLTI1 OCw2ICsyNTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyIHByZWF1dGhfaW5z bnNbXSA9IHsKQEAgLTM4NiwxMCArMzkyLDEwIEBAIGluZGV4IGUwZjJkNDI4OS4uYzUyZjY0ODk3 IDEwMDY0NAogIAlTQ19ERU5ZKF9fTlJfb3BlbmF0LCBFQUNDRVMpLAogICNlbmRpZgogZGlmZiAt LWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1pbmRleCBhYzg0Yjc0ZDkuLmY3ODYxNWMy OCAxMDA2NDQKK2luZGV4IDgwNDU3NTZmYi4uNmMxYmE3N2Y2IDEwMDY0NAogLS0tIGEvc2VydmNv bmYuYwogKysrIGIvc2VydmNvbmYuYwotQEAgLTM3LDcgKzM3LDEwIEBACitAQCAtMzgsNyArMzgs MTUgQEAKICAjaW5jbHVkZSA8bGltaXRzLmg+CiAgI2luY2x1ZGUgPHN0ZGFyZy5oPgogICNpbmNs dWRlIDxlcnJuby5oPgpAQCAtMzk3LDEwICs0MDMsMTUgQEAgaW5kZXggYWM4NGI3NGQ5Li5mNzg2 MTVjMjggMTAwNjQ0CiArI2lmZGVmIEhBVkVfVVRJTF9ICiAgI2luY2x1ZGUgPHV0aWwuaD4KICsj ZW5kaWYKLSAjaWZkZWYgVVNFX1NZU1RFTV9HTE9CCi0gIyBpbmNsdWRlIDxnbG9iLmg+Ci0gI2Vs c2UKLUBAIC0yNDQsMTEgKzI0NywxNiBAQCBhc3NlbWJsZV9hbGdvcml0aG1zKFNlcnZlck9wdGlv bnMgKm8pCisrI2lmZGVmIFVTRV9TWVNURU1fR0xPQgorKyMgaW5jbHVkZSA8Z2xvYi5oPgorKyNl bHNlCisrIyBpbmNsdWRlICJvcGVuYnNkLWNvbXBhdC9nbG9iLmgiCisrI2VuZGlmCisgCisgI2lu Y2x1ZGUgInhtYWxsb2MuaCIKKyAjaW5jbHVkZSAic3NoLmgiCitAQCAtMjQyLDExICsyNTAsMTYg QEAgYXNzZW1ibGVfYWxnb3JpdGhtcyhTZXJ2ZXJPcHRpb25zICpvKQogIAlhbGxfa2V5ID0gc3No a2V5X2FsZ19saXN0KDAsIDAsIDEsICcsJyk7CiAgCWFsbF9zaWcgPSBzc2hrZXlfYWxnX2xpc3Qo MCwgMSwgMSwgJywnKTsKICAJLyogcmVtb3ZlIHVuc3VwcG9ydGVkIGFsZ29zIGZyb20gZGVmYXVs dCBsaXN0cyAqLwpAQCAtNDIzLDcgKzQzNCw3IEBAIGluZGV4IGFjODRiNzRkOS4uZjc4NjE1YzI4 IDEwMDY0NAogIAlkbyB7IFwKICAJCWlmICgociA9IGtleF9hc3NlbWJsZV9uYW1lcygmby0+d2hh dCwgZGVmYXVsdHMsIGFsbCkpICE9IDApIFwKIGRpZmYgLS1naXQgYS9zc2gtZWQyNTUxOS5jIGIv c3NoLWVkMjU1MTkuYwotaW5kZXggYzhjYWEyMjIxLi40YmNkOWVmODEgMTAwNjQ0CitpbmRleCAy MzY5YzNhZjAuLmFmMDU5ZDdmMSAxMDA2NDQKIC0tLSBhL3NzaC1lZDI1NTE5LmMKICsrKyBiL3Nz aC1lZDI1NTE5LmMKIEBAIC0yNCw2ICsyNCw3IEBACkBAIC00MzQsNyArNDQ1LDcgQEAgaW5kZXgg YzhjYWEyMjIxLi40YmNkOWVmODEgMTAwNjQ0CiAgCiAgI2luY2x1ZGUgImxvZy5oIgogICNpbmNs dWRlICJzc2hidWYuaCIKLUBAIC0xNjMsNiArMTY0LDEwIEBAIHNzaF9lZDI1NTE5X3NpZ24oc3Ry dWN0IHNzaGtleSAqa2V5LAorQEAgLTE2Miw2ICsxNjMsMTAgQEAgc3NoX2VkMjU1MTlfc2lnbihz dHJ1Y3Qgc3Noa2V5ICprZXksCiAgCSAgICBrZXktPmVkMjU1MTlfc2sgPT0gTlVMTCB8fAogIAkg ICAgZGF0YWxlbiA+PSBJTlRfTUFYIC0gY3J5cHRvX3NpZ25fZWQyNTUxOV9CWVRFUykKICAJCXJl dHVybiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CkBAIC00NDUsNyArNDU2LDcgQEAgaW5kZXgg YzhjYWEyMjIxLi40YmNkOWVmODEgMTAwNjQ0CiAgCXNtbGVuID0gc2xlbiA9IGRhdGFsZW4gKyBj cnlwdG9fc2lnbl9lZDI1NTE5X0JZVEVTOwogIAlpZiAoKHNpZyA9IG1hbGxvYyhzbGVuKSkgPT0g TlVMTCkKICAJCXJldHVybiBTU0hfRVJSX0FMTE9DX0ZBSUw7Ci1AQCAtMjQ0LDYgKzI0OSwxMCBA QCBzc2hfZWQyNTUxOV92ZXJpZnkoY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LAorQEAgLTI0Myw2 ICsyNDgsMTAgQEAgc3NoX2VkMjU1MTlfdmVyaWZ5KGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSwK ICAJICAgIGRsZW4gPj0gSU5UX01BWCAtIGNyeXB0b19zaWduX2VkMjU1MTlfQllURVMgfHwKICAJ ICAgIHNpZyA9PSBOVUxMIHx8IHNpZ2xlbiA9PSAwKQogIAkJcmV0dXJuIFNTSF9FUlJfSU5WQUxJ RF9BUkdVTUVOVDsKQEAgLTQ3Myw3ICs0ODQsNyBAQCBpbmRleCBhODk0ZTIzYzkuLjMyOWRjOWRh MCAxMDA2NDQKICAKICB0eXBlZGVmIHN0cnVjdCB7CiBkaWZmIC0tZ2l0IGEvc3NoLWtleWdlbi5j IGIvc3NoLWtleWdlbi5jCi1pbmRleCAzYzU4MmE4M2EuLmFmYTI3OTA5NyAxMDA2NDQKK2luZGV4 IDU4NGQ1YTg5OS4uMTI0MzBlNmE0IDEwMDY0NAogLS0tIGEvc3NoLWtleWdlbi5jCiArKysgYi9z c2gta2V5Z2VuLmMKIEBAIC0yMiw2ICsyMiw3IEBACkBAIC00OTIsNyArNTAzLDcgQEAgaW5kZXgg M2M1ODJhODNhLi5hZmEyNzkwOTcgMTAwNjQ0CiAgCiAgLyoKICAgKiBEZWZhdWx0IG51bWJlciBv ZiBiaXRzIGluIHRoZSBSU0EgYW5kIEVDRFNBIGtleXMuICBUaGVzZSB2YWx1ZSBjYW4gYmUKLUBA IC0xOTUsNiArMTk3LDEwIEBAIHR5cGVfYml0c192YWxpZChpbnQgdHlwZSwgY29uc3QgY2hhciAq bmFtZSwgdV9pbnQzMl90ICpiaXRzcCkKK0BAIC0xOTUsNiArMTk3LDEwIEBAIHR5cGVfYml0c192 YWxpZChpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgKmJpdHNwKQogICNlbmRp ZgogIAl9CiAgI2lmZGVmIFdJVEhfT1BFTlNTTApAQCAtNTMxLDcgKzU0Miw3IEBAIGluZGV4IDNj NTgyYTgzYS4uYWZhMjc5MDk3IDEwMDY0NAogIAkJaWYgKChmZCA9IG1rc3RlbXAocHJ2X3RtcCkp ID09IC0xKSB7CiAgCQkJZXJyb3IoIkNvdWxkIG5vdCBzYXZlIHlvdXIgcHJpdmF0ZSBrZXkgaW4g JXM6ICVzIiwKICAJCQkgICAgcHJ2X3RtcCwgc3RyZXJyb3IoZXJybm8pKTsKLUBAIC0zNzU3LDcg KzM3NzEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK0BAIC0zNzY4LDcgKzM3ODIs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAJfQogIAogIAlpZiAoa2V5X3R5cGVf bmFtZSA9PSBOVUxMKQpAQCAtNTQwLDE5ICs1NTEsNTQgQEAgaW5kZXggM2M1ODJhODNhLi5hZmEy NzkwOTcgMTAwNjQ0CiAgCiAgCXR5cGUgPSBzc2hrZXlfdHlwZV9mcm9tX3Nob3J0bmFtZShrZXlf dHlwZV9uYW1lKTsKICAJdHlwZV9iaXRzX3ZhbGlkKHR5cGUsIGtleV90eXBlX25hbWUsICZiaXRz KTsKK2RpZmYgLS1naXQgYS9zc2gta2V5c2Nhbi5jIGIvc3NoLWtleXNjYW4uYworaW5kZXggYmIz ZWU0NjJkLi4zY2VhMWRhYWMgMTAwNjQ0CistLS0gYS9zc2gta2V5c2Nhbi5jCisrKysgYi9zc2gt a2V5c2Nhbi5jCitAQCAtMjEsNiArMjEsNyBAQAorICNpZmRlZiBXSVRIX09QRU5TU0wKKyAjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgorICNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KyAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CitAQCAtMjM0LDYg KzIzNSwxNCBAQCBrZXlncmFiX3NzaDIoY29uICpjKQorIAljaGFyICpteXByb3Bvc2FsW1BST1BP U0FMX01BWF0gPSB7IEtFWF9DTElFTlQgfTsKKyAJaW50IHI7CisgCisrCWlmIChGSVBTX21vZGUo KSkgeworKwkJbXlwcm9wb3NhbFtQUk9QT1NBTF9LRVhfQUxHU10gPSBLRVhfREVGQVVMVF9LRVhf RklQUzsKKysJCW15cHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfQ1RPU10gPSBLRVhfRklQU19F TkNSWVBUOworKwkJbXlwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19TVE9DXSA9IEtFWF9GSVBT X0VOQ1JZUFQ7CisrCQlteXByb3Bvc2FsW1BST1BPU0FMX01BQ19BTEdTX0NUT1NdID0gS0VYX0ZJ UFNfTUFDOworKwkJbXlwcm9wb3NhbFtQUk9QT1NBTF9NQUNfQUxHU19TVE9DXSA9IEtFWF9GSVBT X01BQzsKKysJfQorKworIAlzd2l0Y2ggKGMtPmNfa2V5dHlwZSkgeworIAljYXNlIEtUX1JTQToK KyAJCW15cHJvcG9zYWxbUFJPUE9TQUxfU0VSVkVSX0hPU1RfS0VZX0FMR1NdID0gZ2V0X2NlcnQg PwogZGlmZiAtLWdpdCBhL3NzaC1yc2EuYyBiL3NzaC1yc2EuYwotaW5kZXggZmUxNTE4OTg0Li45 NDI4ZGY4ZDEgMTAwNjQ0CitpbmRleCBjY2FkYjE0Y2EuLjVhZjM5YmIzOSAxMDA2NDQKIC0tLSBh L3NzaC1yc2EuYwogKysrIGIvc3NoLXJzYS5jCi1AQCAtMjUsNiArMjUsNyBAQAorQEAgLTI0LDEy ICsyNCwxNSBAQAorIAogICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CiAgI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CiArI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgogIAogICNpbmNsdWRlIDxzdGRhcmcu aD4KICAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1AQCAtMTQyLDYgKzE0Myw4IEBAIHNzaF9yc2FfZ2Vu ZXJhdGUoc3RydWN0IHNzaGtleSAqaywgaW50IGJpdHMpCisgCisgI2luY2x1ZGUgInNzaGJ1Zi5o IgorICNpbmNsdWRlICJzc2hlcnIuaCIKKysjaW5jbHVkZSAibG9nLmgiCisgI2RlZmluZSBTU0hL RVlfSU5URVJOQUwKKyAjaW5jbHVkZSAic3Noa2V5LmgiCisgI2luY2x1ZGUgImRpZ2VzdC5oIgor QEAgLTE0MCw2ICsxNDMsOCBAQCBzc2hfcnNhX2dlbmVyYXRlKHN0cnVjdCBzc2hrZXkgKmssIGlu dCBiaXRzKQogIAkJZ290byBvdXQ7CiAgCX0KICAJaWYgKEVWUF9QS0VZX2tleWdlbihjdHgsICZy ZXMpIDw9IDAgfHwgcmVzID09IE5VTEwpIHsKQEAgLTU2MiwxOCArNjA4LDE4IEBAIGluZGV4IGZl MTUxODk4NC4uOTQyOGRmOGQxIDEwMDY0NAogIAkJZ290byBvdXQ7CiAgCX0KIGRpZmYgLS1naXQg YS9zc2guYyBiL3NzaC5jCi1pbmRleCA4ZDI3ZjYzNzkuLjdkNmJhNTE2ZSAxMDA2NDQKK2luZGV4 IGJjM2JlOGY4ZS4uZTdiZGJhMzI3IDEwMDY0NAogLS0tIGEvc3NoLmMKICsrKyBiL3NzaC5jCi1A QCAtNzQsNiArNzQsNyBAQAorQEAgLTcxLDYgKzcxLDcgQEAKICAjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KICAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KICAjZW5kaWYKICsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CiAgI2luY2x1ZGUgIm9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0Lmgi Ci0gI2luY2x1ZGUgIm9wZW5ic2QtY29tcGF0L3N5cy1xdWV1ZS5oIgogIAotQEAgLTE2NjQsNiAr MTY2NSwxMCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQorICNpbmNsdWRlICJ4bWFsbG9jLmgi CitAQCAtMTYzMSw2ICsxNjMyLDEwIEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAgCQlleGl0 KDApOwogIAl9CiAgCkBAIC01ODUsMTkgKzYzMSwyMSBAQCBpbmRleCA4ZDI3ZjYzNzkuLjdkNmJh NTE2ZSAxMDA2NDQKICAJaWYgKG9wdGlvbnMuc2tfcHJvdmlkZXIgIT0gTlVMTCAmJiAqb3B0aW9u cy5za19wcm92aWRlciA9PSAnJCcgJiYKICAJICAgIHN0cmxlbihvcHRpb25zLnNrX3Byb3ZpZGVy KSA+IDEpIHsKIGRpZmYgLS1naXQgYS9zc2hjb25uZWN0Mi5jIGIvc3NoY29ubmVjdDIuYwotaW5k ZXggYjI1M2Y5OTFiLi5mZmZhNjZjOGQgMTAwNjQ0CitpbmRleCAzMWJiYzBlZDguLjJkZGQ4OWQ1 YyAxMDA2NDQKIC0tLSBhL3NzaGNvbm5lY3QyLmMKICsrKyBiL3NzaGNvbm5lY3QyLmMKLUBAIC00 NSw2ICs0NSw4IEBACitAQCAtNDUsNiArNDUsMTAgQEAKICAjaW5jbHVkZSA8dmlzLmg+CiAgI2Vu ZGlmCiAgCiArI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgogKwotICNpbmNsdWRlICJvcGVuYnNk LWNvbXBhdC9zeXMtcXVldWUuaCIKLSAKKysjaW5jbHVkZSAib3BlbmJzZC1jb21wYXQvc3lzLXF1 ZXVlLmgiCisrCiAgI2luY2x1ZGUgInhtYWxsb2MuaCIKLUBAIC0yNjIsNiArMjY0LDkgQEAgc3No X2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhvc3Rh ZGRyLCB1X3Nob3J0IHBvcnQsCisgI2luY2x1ZGUgInNzaC5oIgorICNpbmNsdWRlICJzc2gyLmgi CitAQCAtMjYzLDYgKzI2Nyw5IEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqaG9z dCwgc3RydWN0IHNvY2thZGRyICpob3N0YWRkciwgdV9zaG9ydCBwb3J0LAogIAogICNpZiBkZWZp bmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpCiAgCWlmIChvcHRpb25zLmdzc19r ZXlleCkgewpAQCAtNjA3LDcgKzY1NSw3IEBAIGluZGV4IGIyNTNmOTkxYi4uZmZmYTY2YzhkIDEw MDY0NAogIAkJLyogQWRkIHRoZSBHU1NBUEkgbWVjaGFuaXNtcyBjdXJyZW50bHkgc3VwcG9ydGVk IG9uIHRoaXMKICAJCSAqIGNsaWVudCB0byB0aGUga2V5IGV4Y2hhbmdlIGFsZ29yaXRobSBwcm9w b3NhbCAqLwogIAkJb3JpZyA9IG15cHJvcG9zYWxbUFJPUE9TQUxfS0VYX0FMR1NdOwotQEAgLTI4 MSw3ICsyODYsOSBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVj dCBzb2NrYWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwKK0BAIC0yODIsNyArMjg5LDkgQEAg c3NoX2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhv c3RhZGRyLCB1X3Nob3J0IHBvcnQsCiAgCQl9CiAgCiAgCQlnc3MgPSBzc2hfZ3NzYXBpX2NsaWVu dF9tZWNoYW5pc21zKGdzc19ob3N0LApAQCAtNjE5LDEwICs2NjcsMTAgQEAgaW5kZXggYjI1M2Y5 OTFiLi5mZmZhNjZjOGQgMTAwNjQ0CiAgCQkJZGVidWcoIk9mZmVyaW5nIEdTU0FQSSBwcm9wb3Nh bDogJXMiLCBnc3MpOwogIAkJCXhhc3ByaW50ZigmbXlwcm9wb3NhbFtQUk9QT1NBTF9LRVhfQUxH U10sCiBkaWZmIC0tZ2l0IGEvc3NoZC5jIGIvc3NoZC5jCi1pbmRleCBlZDdmYWY5NmQuLmRlMmJh YTVlNCAxMDA2NDQKK2luZGV4IDIyYWQ0ZGZmMC4uMjg2NTYxOWM3IDEwMDY0NAogLS0tIGEvc3No ZC5jCiArKysgYi9zc2hkLmMKLUBAIC00NCw2ICs0NCw3IEBACitAQCAtNDMsNiArNDMsNyBAQAog ICNpbmNsdWRlIDxwb2xsLmg+CiAgI2luY2x1ZGUgPHB3ZC5oPgogICNpbmNsdWRlIDxzaWduYWwu aD4KQEAgLTYzMCwxNSArNjc4LDIxIEBAIGluZGV4IGVkN2ZhZjk2ZC4uZGUyYmFhNWU0IDEwMDY0 NAogICNpbmNsdWRlIDxzdGRhcmcuaD4KICAjaW5jbHVkZSA8dGltZS5oPgogICNpbmNsdWRlIDxz dGRpby5oPgotQEAgLTU1LDYgKzU2LDcgQEAKLSAjaWZkZWYgV0lUSF9PUEVOU1NMCi0gI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSAjaW5jbHVkZSAib3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21w YXQuaCIKLSAjZW5kaWYKK0BAIC01MSw2ICs1MiwxMyBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4K KyAjaW5jbHVkZSA8bGltaXRzLmg+CiAgCi1AQCAtMTYxMyw2ICsxNjE1LDEzIEBAIG1haW4oaW50 IGFjLCBjaGFyICoqYXYpCisrI2lmZGVmIFdJVEhfT1BFTlNTTAorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2luY2x1ZGUgIm9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmgiCisrI2Vu ZGlmCisrCisgI2lmZGVmIEhBVkVfU0VDVVJFV0FSRQorICNpbmNsdWRlIDxzeXMvc2VjdXJpdHku aD4KKyAjaW5jbHVkZSA8cHJvdC5oPgorQEAgLTE2MDQsNiArMTYxMiwxMyBAQCBtYWluKGludCBh YywgY2hhciAqKmF2KQogIAkJICAgICZrZXksIE5VTEwpKSAhPSAwICYmIHIgIT0gU1NIX0VSUl9T WVNURU1fRVJST1IpCiAgCQkJZG9fbG9nMl9yKHIsIGxsLCAiVW5hYmxlIHRvIGxvYWQgaG9zdCBr ZXkgXCIlc1wiIiwKICAJCQkgICAgb3B0aW9ucy5ob3N0X2tleV9maWxlc1tpXSk7CkBAIC02NTIs NyArNzA2LDcgQEAgaW5kZXggZWQ3ZmFmOTZkLi5kZTJiYWE1ZTQgMTAwNjQ0CiAgCQlpZiAoc3No a2V5X2lzX3NrKGtleSkgJiYKICAJCSAgICBrZXktPnNrX2ZsYWdzICYgU1NIX1NLX1VTRVJfUFJF U0VOQ0VfUkVRRCkgewogIAkJCWRlYnVnKCJob3N0IGtleSAlcyByZXF1aXJlcyB1c2VyIHByZXNl bmNlLCBpZ25vcmluZyIsCi1AQCAtMTgzNiw2ICsxODQ1LDEwIEBAIG1haW4oaW50IGFjLCBjaGFy ICoqYXYpCitAQCAtMTgyNyw2ICsxODQyLDEwIEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCiAg CS8qIFJlaW5pdGlhbGl6ZSB0aGUgbG9nIChiZWNhdXNlIG9mIHRoZSBmb3JrIGFib3ZlKS4gKi8K ICAJbG9nX2luaXQoX19wcm9nbmFtZSwgb3B0aW9ucy5sb2dfbGV2ZWwsIG9wdGlvbnMubG9nX2Zh Y2lsaXR5LCBsb2dfc3RkZXJyKTsKICAKQEAgLTY2NCw3ICs3MTgsNyBAQCBpbmRleCBlZDdmYWY5 NmQuLmRlMmJhYTVlNCAxMDA2NDQKICAJICogQ2hkaXIgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHNv IHRoYXQgdGhlIGN1cnJlbnQgZGlzayBjYW4gYmUKICAJICogdW5tb3VudGVkIGlmIGRlc2lyZWQu CiBkaWZmIC0tZ2l0IGEvc3Noa2V5LmMgYi9zc2hrZXkuYwotaW5kZXggMTQ4ZmVlMmI3Li4zOTRk OWIxMDUgMTAwNjQ0CitpbmRleCBjY2MzNWRiZjUuLjgyZTU1NTA5ZCAxMDA2NDQKIC0tLSBhL3Nz aGtleS5jCiArKysgYi9zc2hrZXkuYwogQEAgLTM2LDYgKzM2LDcgQEAKQEAgLTY4Myw3ICs3Mzcs NyBAQCBpbmRleCAxNDhmZWUyYjcuLjM5NGQ5YjEwNSAxMDA2NDQKICAjaW5jbHVkZSAic3NoLXNr LmgiCiAgI2luY2x1ZGUgInNzaC1wa2NzMTEuaCIKICAKLUBAIC0zODYsNiArMzg4LDE4IEBAIHNz aGtleV9hbGdfbGlzdChpbnQgY2VydHNfb25seSwgaW50IHBsYWluX29ubHksIGludCBpbmNsdWRl X3NpZ29ubHksIGNoYXIgc2VwKQorQEAgLTM5OSw2ICs0MDEsMTggQEAgc3Noa2V5X2FsZ19saXN0 KGludCBjZXJ0c19vbmx5LCBpbnQgcGxhaW5fb25seSwgaW50IGluY2x1ZGVfc2lnb25seSwgY2hh ciBzZXApCiAgCQlpbXBsID0ga2V5aW1wbHNbaV07CiAgCQlpZiAoaW1wbC0+bmFtZSA9PSBOVUxM IHx8IGltcGwtPnR5cGUgPT0gS0VZX05VTEwpCiAgCQkJY29udGludWU7CkBAIC03MDIsNyArNzU2 LDcgQEAgaW5kZXggMTQ4ZmVlMmI3Li4zOTRkOWIxMDUgMTAwNjQ0CiAgCQlpZiAoIWluY2x1ZGVf c2lnb25seSAmJiBpbXBsLT5zaWdvbmx5KQogIAkJCWNvbnRpbnVlOwogIAkJaWYgKChjZXJ0c19v bmx5ICYmICFpbXBsLT5jZXJ0KSB8fCAocGxhaW5fb25seSAmJiBpbXBsLT5jZXJ0KSkKLUBAIC0x NDE4LDYgKzE0MzIsMjAgQEAgc3Noa2V5X3JlYWQoc3RydWN0IHNzaGtleSAqcmV0LCBjaGFyICoq Y3BwKQorQEAgLTE0MzEsNiArMTQ0NSwyMCBAQCBzc2hrZXlfcmVhZChzdHJ1Y3Qgc3Noa2V5ICpy ZXQsIGNoYXIgKipjcHApCiAgCQlyZXR1cm4gU1NIX0VSUl9FQ19DVVJWRV9NSVNNQVRDSDsKICAJ fQogIApAQCAtNzIzLDcgKzc3Nyw3IEBAIGluZGV4IDE0OGZlZTJiNy4uMzk0ZDliMTA1IDEwMDY0 NAogIAkvKiBGaWxsIGluIHJldCBmcm9tIHBhcnNlZCBrZXkgKi8KICAJc3Noa2V5X2ZyZWVfY29u dGVudHMocmV0KTsKICAJKnJldCA9ICprOwotQEAgLTIyNTEsNiArMjI3OSwxMSBAQCBzc2hrZXlf c2lnbihzdHJ1Y3Qgc3Noa2V5ICprZXksCitAQCAtMjI2NCw2ICsyMjkyLDExIEBAIHNzaGtleV9z aWduKHN0cnVjdCBzc2hrZXkgKmtleSwKICAJCSpsZW5wID0gMDsKICAJaWYgKGRhdGFsZW4gPiBT U0hfS0VZX01BWF9TSUdOX0RBVEFfU0laRSkKICAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURfQVJH VU1FTlQ7CkBAIC03MzUsNyArNzg5LDcgQEAgaW5kZXggMTQ4ZmVlMmI3Li4zOTRkOWIxMDUgMTAw NjQ0CiAgCWlmICgoaW1wbCA9IHNzaGtleV9pbXBsX2Zyb21fa2V5KGtleSkpID09IE5VTEwpCiAg CQlyZXR1cm4gU1NIX0VSUl9LRVlfVFlQRV9VTktOT1dOOwogIAlpZiAoKHIgPSBzc2hrZXlfdW5z aGllbGRfcHJpdmF0ZShrZXkpKSAhPSAwKQotQEAgLTIyOTAsNiArMjMyMywxMCBAQCBzc2hrZXlf dmVyaWZ5KGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSwKK0BAIC0yMzAzLDYgKzIzMzYsMTAgQEAg c3Noa2V5X3ZlcmlmeShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksCiAgCQkqZGV0YWlsc3AgPSBO VUxMOwogIAlpZiAoc2lnbGVuID09IDAgfHwgZGxlbiA+IFNTSF9LRVlfTUFYX1NJR05fREFUQV9T SVpFKQogIAkJcmV0dXJuIFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKQEAgLTc0Nyw1ICs4MDEs NSBAQCBpbmRleCAxNDhmZWUyYjcuLjM5NGQ5YjEwNSAxMDA2NDQKICAJCXJldHVybiBTU0hfRVJS X0tFWV9UWVBFX1VOS05PV047CiAgCXJldHVybiBpbXBsLT5mdW5jcy0+dmVyaWZ5KGtleSwgc2ln LCBzaWdsZW4sIGRhdGEsIGRsZW4sCiAtLSAKLTIuNTIuMAorMi41My4wCiAKCmRpZmYgLS1naXQg YS8wMDM5LW9wZW5zc2gtOC43cDEtbmVnb3RpYXRlLXN1cHBvcnRlZC1hbGdzLnBhdGNoIGIvMDAz OS1vcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncy5wYXRjaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDBiZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvMDAz OS1vcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncy5wYXRjaApAQCAtMCwwICsx LDEzNiBAQAorRnJvbSBiZmJkYWYwYjEzNTVlMDZiZTVjNDBkYWUzOTg2ZDRkZGRlNTBhYzA4IE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRA Z21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIwMAorU3ViamVj dDogW1BBVENIIDM5LzU0XSBvcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncwor CisjIERvbid0IHByb3Bvc2UgZGlzYWxsb3dlZCBhbGdvcml0aG1zIGR1cmluZyBob3N0a2V5IG5l Z290aWF0aW9uCisjIHVwc3RyZWFtIE1SOgorIyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNzaC9v cGVuc3NoLXBvcnRhYmxlL3B1bGwvMzIzCistLS0KKyByZWdyZXNzL2hvc3RrZXktYWdlbnQuc2gg fCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQorIHNzaGNvbm5lY3QyLmMgICAg ICAgICAgICB8IDE3ICsrKysrKysrKysrKysrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNl cnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcmVncmVzcy9ob3N0a2V5 LWFnZW50LnNoIGIvcmVncmVzcy9ob3N0a2V5LWFnZW50LnNoCitpbmRleCAyOGRjZmUxNzAuLmI5 ZTcxNmRjZCAxMDA2NDQKKy0tLSBhL3JlZ3Jlc3MvaG9zdGtleS1hZ2VudC5zaAorKysrIGIvcmVn cmVzcy9ob3N0a2V5LWFnZW50LnNoCitAQCAtMTcsOCArMTcsMjEgQEAgdHJhY2UgIm1ha2UgQ0Eg a2V5IgorIAorICR7U1NIS0VZR0VOfSAtcXQgZWQyNTUxOSAtZiAkT0JKL2FnZW50LWNhIC1OICcn IHx8IGZhdGFsICJzc2gta2V5Z2VuIENBIgorIAorK1BVQktFWV9BQ0NFUFRFRF9BTEdPUz1gJFNT SCAtRyAiZXhhbXBsZS5jb20iIHwgXAorKyAgICBncmVwIC1pICJQdWJrZXlBY2NlcHRlZEFsZ29y aXRobXMiIHwgY3V0IC1kICcgJyAtZjItIHwgdHIgIiwiICJ8ImAKKytTU0hfQUNDRVBURURfS0VZ VFlQRVM9YGVjaG8gIiRTU0hfS0VZVFlQRVMiIHwgZWdyZXAgIiRQVUJLRVlfQUNDRVBURURfQUxH T1MiYAorK2VjaG8gJFBVQktFWV9BQ0NFUFRFRF9BTEdPUyB8IGdyZXAgInJzYSIKKytyPSQ/Cisr aWYgWyAkciA9PSAwIF07IHRoZW4KKytlY2hvICRTU0hfQUNDRVBURURfS0VZVFlQRVMgfCBncmVw ICJyc2EiCisrcj0kPworK2lmIFsgJHIgLW5lIDAgXTsgdGhlbgorK1NTSF9BQ0NFUFRFRF9LRVlU WVBFUz0iJFNTSF9BQ0NFUFRFRF9LRVlUWVBFUyBzc2gtcnNhIgorK2ZpCisrZmkKKysKKyB0cmFj ZSAibG9hZCBob3N0a2V5cyIKKy1mb3IgayBpbiAkU1NIX0tFWVRZUEVTIDsgZG8KKytmb3IgayBp biAkU1NIX0FDQ0VQVEVEX0tFWVRZUEVTIDsgZG8KKyAJJHtTU0hLRVlHRU59IC1xdCAkayAtZiAk T0JKL2FnZW50LWtleS4kayAtTiAnJyB8fCBmYXRhbCAic3NoLWtleWdlbiAkayIKKyAJJHtTU0hL RVlHRU59IC1zICRPQkovYWdlbnQtY2EgLXFoIC1uIGxvY2FsaG9zdC13aXRoLWFsaWFzIFwKKyAJ CS1JIGxvY2FsaG9zdC13aXRoLWFsaWFzICRPQkovYWdlbnQta2V5LiRrLnB1YiB8fCBcCitAQCAt MzIsMTIgKzQ1LDE2IEBAIHJtICRPQkovYWdlbnQtY2EgIyBEb24ndCBuZWVkIENBIHByaXZhdGUg YW55IG1vcmUgZWl0aGVyCisgCisgdW5zZXQgU1NIX0FVVEhfU09DSworIAorLWZvciBrIGluICRT U0hfS0VZVFlQRVMgOyBkbworK2ZvciBrIGluICRTU0hfQUNDRVBURURfS0VZVFlQRVMgOyBkbwor IAl2ZXJib3NlICJrZXkgdHlwZSAkayIKKysJaGthPSRrCisrCWlmIFsgJGsgPSAic3NoLXJzYSIg XTsgdGhlbgorKwkgICBoa2E9InJzYS1zaGEyLTUxMiIKKysJZmkKKyAJY3AgJE9CSi9zc2hkX3By b3h5Lm9yaWcgJE9CSi9zc2hkX3Byb3h5CistCWVjaG8gIkhvc3RLZXlBbGdvcml0aG1zICRrIiA+ PiAkT0JKL3NzaGRfcHJveHkKKysJZWNobyAiSG9zdEtleUFsZ29yaXRobXMgJGhrYSIgPj4gJE9C Si9zc2hkX3Byb3h5CisgCWVjaG8gIkhvc3RrZXkgJE9CSi9hZ2VudC1rZXkuJHtrfSIgPj4gJE9C Si9zc2hkX3Byb3h5CistCW9wdHM9Ii1vSG9zdEtleUFsZ29yaXRobXM9JGsgLUYgJE9CSi9zc2hf cHJveHkiCisrCW9wdHM9Ii1vSG9zdEtleUFsZ29yaXRobXM9JGhrYSAtRiAkT0JKL3NzaF9wcm94 eSIKKyAJKCBwcmludGYgJ2xvY2FsaG9zdC13aXRoLWFsaWFzLDEyNy4wLjAuMSw6OjEgJyA7Cisg CSAgY2F0ICRPQkovYWdlbnQta2V5LiRrLnB1YikgPiAkT0JKL2tub3duX2hvc3RzCisgCVNTSF9D T05ORUNUSU9OPWAke1NTSH0gJG9wdHMgaG9zdCAnZWNobyAkU1NIX0NPTk5FQ1RJT04nYAorQEAg LTUwLDE1ICs2NywxNiBAQCBmb3IgayBpbiAkU1NIX0tFWVRZUEVTIDsgZG8KKyBkb25lCisgCisg U1NIX0NFUlRUWVBFUz1gc3NoIC1RIGtleS1zaWcgfCBncmVwICdjZXJ0LXYwMUBvcGVuc3NoLmNv bScgfCBtYXliZV9maWx0ZXJfc2tgCisrU1NIX0FDQ0VQVEVEX0NFUlRUWVBFUz1gZWNobyAiJFNT SF9DRVJUVFlQRVMiIHwgZWdyZXAgIiRQVUJLRVlfQUNDRVBURURfQUxHT1MiYAorIAorICMgUHJl cGFyZSBzc2hkX3Byb3h5IGZvciBjZXJ0aWZpY2F0ZXMuCisgY3AgJE9CSi9zc2hkX3Byb3h5Lm9y aWcgJE9CSi9zc2hkX3Byb3h5CisgSE9TVEtFWUFMR1M9IiIKKy1mb3IgayBpbiAkU1NIX0NFUlRU WVBFUyA7IGRvCisrZm9yIGsgaW4gJFNTSF9BQ0NFUFRFRF9DRVJUVFlQRVMgOyBkbworIAl0ZXN0 IC16ICIkSE9TVEtFWUFMR1MiIHx8IEhPU1RLRVlBTEdTPSIke0hPU1RLRVlBTEdTfSwiCisgCUhP U1RLRVlBTEdTPSIke0hPU1RLRVlBTEdTfSR7a30iCisgZG9uZQorLWZvciBrIGluICRTU0hfS0VZ VFlQRVMgOyBkbworK2ZvciBrIGluICRTU0hfQUNDRVBURURfS0VZVFlQRVMgOyBkbworIAllY2hv ICJIb3N0a2V5ICRPQkovYWdlbnQta2V5LiR7a30ucHViIiA+PiAkT0JKL3NzaGRfcHJveHkKKyAJ ZWNobyAiSG9zdENlcnRpZmljYXRlICRPQkovYWdlbnQta2V5LiR7a30tY2VydC5wdWIiID4+ICRP Qkovc3NoZF9wcm94eQorIAl0ZXN0IC1mICRPQkovYWdlbnQta2V5LiR7a30ucHViIHx8IGZhdGFs ICJubyAkayBrZXkiCitAQCAtNzAsNyArODgsNyBAQCBlY2hvICJIb3N0S2V5QWxnb3JpdGhtcyAk SE9TVEtFWUFMR1MiID4+ICRPQkovc3NoZF9wcm94eQorICggcHJpbnRmICdAY2VydC1hdXRob3Jp dHkgbG9jYWxob3N0LXdpdGgtYWxpYXMgJyA7CisgICBjYXQgJE9CSi9hZ2VudC1jYS5wdWIpID4g JE9CSi9rbm93bl9ob3N0cworIAorLWZvciBrIGluICRTU0hfQ0VSVFRZUEVTIDsgZG8KKytmb3Ig ayBpbiAkU1NIX0FDQ0VQVEVEX0NFUlRUWVBFUyA7IGRvCisgCXZlcmJvc2UgImNlcnQgdHlwZSAk ayIKKyAJb3B0cz0iLW9Ib3N0S2V5QWxnb3JpdGhtcz0kayAtRiAkT0JKL3NzaF9wcm94eSIKKyAJ U1NIX0NPTk5FQ1RJT049YCR7U1NIfSAkb3B0cyBob3N0ICdlY2hvICRTU0hfQ09OTkVDVElPTidg CitkaWZmIC0tZ2l0IGEvc3NoY29ubmVjdDIuYyBiL3NzaGNvbm5lY3QyLmMKK2luZGV4IDJkZGQ4 OWQ1Yy4uMzFmNTFiZTYyIDEwMDY0NAorLS0tIGEvc3NoY29ubmVjdDIuYworKysrIGIvc3NoY29u bmVjdDIuYworQEAgLTIyNCw3ICsyMjQsNyBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNo YXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwKKyAgICAg Y29uc3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQorIHsKKyAJY2hhciAqbXlwcm9wb3Nh bFtQUk9QT1NBTF9NQVhdOworLQljaGFyICphbGxfa2V5LCAqaGthbGdzID0gTlVMTDsKKysJY2hh ciAqYWxsX2tleSwgKmhrYWxncyA9IE5VTEwsICpmaWx0ZXJlZF9hbGdzID0gTlVMTDsKKyAJaW50 IHIsIHVzZV9rbm93bl9ob3N0c19vcmRlciA9IDA7CisgCisgI2lmIGRlZmluZWQoR1NTQVBJKSAm JiBkZWZpbmVkKFdJVEhfT1BFTlNTTCkKK0BAIC0yNjAsMTAgKzI2MCwyMiBAQCBzc2hfa2V4Mihz dHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVf c2hvcnQgcG9ydCwKKyAJaWYgKHVzZV9rbm93bl9ob3N0c19vcmRlcikKKyAJCWhrYWxncyA9IG9y ZGVyX2hvc3RrZXlhbGdzKGhvc3QsIGhvc3RhZGRyLCBwb3J0LCBjaW5mbyk7CisgCisrCWZpbHRl cmVkX2FsZ3MgPSBoa2FsZ3MgPyBtYXRjaF9maWx0ZXJfYWxsb3dsaXN0KGhrYWxncywgb3B0aW9u cy5wdWJrZXlfYWNjZXB0ZWRfYWxnb3MpCisrCQkgICAgICAgICAgICAgICA6IG1hdGNoX2ZpbHRl cl9hbGxvd2xpc3Qob3B0aW9ucy5ob3N0a2V5YWxnb3JpdGhtcywKKysJCQkJIG9wdGlvbnMucHVi a2V5X2FjY2VwdGVkX2FsZ29zKTsKKysJaWYgKGZpbHRlcmVkX2FsZ3MgPT0gTlVMTCkgeworKwkJ aWYgKGhrYWxncykKKysJCQlmYXRhbF9mKCJObyBtYXRjaCBiZXR3ZWVuIGFsZ29yaXRobXMgZm9y ICVzIChob3N0ICVzKSBhbmQgcHVia2V5IGFjY2VwdGVkIGFsZ29yaXRobXMgJXMiLAorKwkJCSAg ICAgICBoa2FsZ3MsIGhvc3QsIG9wdGlvbnMucHVia2V5X2FjY2VwdGVkX2FsZ29zKTsKKysJCWVs c2UKKysJCQlmYXRhbF9mKCJObyBtYXRjaCBiZXR3ZWVuIGhvc3Qga2V5IGFsZ29yaXRobXMgJXMg YW5kIHB1YmtleSBhY2NlcHRlZCBhbGdvcml0aG1zICVzIiwKKysJCQkgICAgICAgIG9wdGlvbnMu aG9zdGtleWFsZ29yaXRobXMsIG9wdGlvbnMucHVia2V5X2FjY2VwdGVkX2FsZ29zKTsKKysJfQor KworIAlrZXhfcHJvcG9zYWxfcG9wdWxhdGVfZW50cmllcyhzc2gsIG15cHJvcG9zYWwsCisgCSAg ICBvcHRpb25zLmtleF9hbGdvcml0aG1zLCBvcHRpb25zLmNpcGhlcnMsIG9wdGlvbnMubWFjcywK KyAJICAgIGNvbXByZXNzaW9uX2FsZ19saXN0KG9wdGlvbnMuY29tcHJlc3Npb24pLAorLQkgICAg aGthbGdzID8gaGthbGdzIDogb3B0aW9ucy5ob3N0a2V5YWxnb3JpdGhtcyk7CisrCSAgICBmaWx0 ZXJlZF9hbGdzKTsKKyAKKyAjaWYgZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVO U1NMKQorIAlpZiAob3B0aW9ucy5nc3Nfa2V5ZXgpIHsKK0BAIC0zMDcsNiArMzE5LDcgQEAgc3No X2tleDIoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmhvc3Rh ZGRyLCB1X3Nob3J0IHBvcnQsCisgI2VuZGlmCisgCisgCWZyZWUoaGthbGdzKTsKKysJZnJlZShm aWx0ZXJlZF9hbGdzKTsKKyAKKyAJLyogc3RhcnQga2V5IGV4Y2hhbmdlICovCisgCWlmICgociA9 IGtleF9zZXR1cChzc2gsIG15cHJvcG9zYWwpKSAhPSAwKQorLS0gCisyLjUzLjAKKwoKZGlmZiAt LWdpdCBhLzAwMzktb3BlbnNzaC04LjdwMS1zc2gtbWFucGFnZS5wYXRjaCBiLzAwMzktb3BlbnNz aC04LjdwMS1zc2gtbWFucGFnZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZDBlOTg0ZC4uMDAwMDAwMAotLS0gYS8wMDM5LW9wZW5zc2gtOC43cDEtc3NoLW1hbnBhZ2UucGF0 Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1Gcm9tIDcxNjdhMTkxNzc2ZGFjZjdl MzFjZjhhOGEyZWQ4OTg4N2U0OWY0ZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBE bWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1heSAy MDI1IDEzOjQzOjI5ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggMzkvNTNdIG9wZW5zc2gtOC43cDEt c3NoLW1hbnBhZ2UKLQotLS0tCi0gc3NoLjEgfCA1ICsrKystCi0gMSBmaWxlIGNoYW5nZWQsIDQg aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQotCi1kaWZmIC0tZ2l0IGEvc3NoLjEgYi9zc2gu MQotaW5kZXggNmE5ZmJkYzViLi43NTVjZGVmMmIgMTAwNjQ0Ci0tLS0gYS9zc2guMQotKysrIGIv c3NoLjEKLUBAIC01MTAsMTIgKzUxMCwxMiBAQCBGb3IgZnVsbCBkZXRhaWxzIG9mIHRoZSBvcHRp b25zIGxpc3RlZCBiZWxvdywgYW5kIHRoZWlyIHBvc3NpYmxlIHZhbHVlcywgc2VlCi0gLkl0IEJh dGNoTW9kZQotIC5JdCBCaW5kQWRkcmVzcwotIC5JdCBCaW5kSW50ZXJmYWNlCi0tLkl0IENBU2ln bmF0dXJlQWxnb3JpdGhtcwotIC5JdCBDYW5vbmljYWxEb21haW5zCi0gLkl0IENhbm9uaWNhbGl6 ZUZhbGxiYWNrTG9jYWwKLSAuSXQgQ2Fub25pY2FsaXplSG9zdG5hbWUKLSAuSXQgQ2Fub25pY2Fs aXplTWF4RG90cwotIC5JdCBDYW5vbmljYWxpemVQZXJtaXR0ZWRDTkFNRXMKLSsuSXQgQ0FTaWdu YXR1cmVBbGdvcml0aG1zCi0gLkl0IENlcnRpZmljYXRlRmlsZQotIC5JdCBDaGFubmVsVGltZW91 dAotIC5JdCBDaGVja0hvc3RJUAotQEAgLTUyOCw2ICs1MjgsNyBAQCBGb3IgZnVsbCBkZXRhaWxz IG9mIHRoZSBvcHRpb25zIGxpc3RlZCBiZWxvdywgYW5kIHRoZWlyIHBvc3NpYmxlIHZhbHVlcywg c2VlCi0gLkl0IENvbnRyb2xQYXRoCi0gLkl0IENvbnRyb2xQZXJzaXN0Ci0gLkl0IER5bmFtaWNG b3J3YXJkCi0rLkl0IEVuYWJsZVNTSEtleXNpZ24KLSAuSXQgRW5hYmxlRXNjYXBlQ29tbWFuZGxp bmUKLSAuSXQgRW5hYmxlU1NIS2V5c2lnbgotIC5JdCBFc2NhcGVDaGFyCi1AQCAtNTg4LDYgKzU4 OSw4IEBAIEZvciBmdWxsIGRldGFpbHMgb2YgdGhlIG9wdGlvbnMgbGlzdGVkIGJlbG93LCBhbmQg dGhlaXIgcG9zc2libGUgdmFsdWVzLCBzZWUKLSAuSXQgUmVtb3RlQ29tbWFuZAotIC5JdCBSZW1v dGVGb3J3YXJkCi0gLkl0IFJlcXVlc3RUVFkKLSsuSXQgUmV2b2tlZEhvc3RLZXlzCi0rLkl0IFNl Y3VyaXR5S2V5UHJvdmlkZXIKLSAuSXQgUmVxdWlyZWRSU0FTaXplCi0gLkl0IFJldm9rZWRIb3N0 S2V5cwotIC5JdCBTZWN1cml0eUtleVByb3ZpZGVyCi0tLSAKLTIuNTIuMAotCgpkaWZmIC0tZ2l0 IGEvMDA0MC1vcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncy5wYXRjaCBiLzAw NDAtb3BlbnNzaC04LjdwMS1uZWdvdGlhdGUtc3VwcG9ydGVkLWFsZ3MucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZjgyMTMuLjAwMDAwMDAKLS0tIGEvMDA0MC1vcGVuc3No LTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDEzMyArMCwwIEBACi1Gcm9tIDUzZTQ0YmQxZjY2OWVjZDZhNzQyOWU5NGI1NWJlZWM4ZTNjMGM1 MjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVs ZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBUaHUsIDE1IE1heSAyMDI1IDEzOjQzOjI5ICswMjAwCi1T dWJqZWN0OiBbUEFUQ0ggNDAvNTNdIG9wZW5zc2gtOC43cDEtbmVnb3RpYXRlLXN1cHBvcnRlZC1h bGdzCi0KLS0tLQotIHJlZ3Jlc3MvaG9zdGtleS1hZ2VudC5zaCB8IDMyICsrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tCi0gc3NoY29ubmVjdDIuYyAgICAgICAgICAgIHwgMTcgKysrKysr KysrKysrKysrLS0KLSAyIGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDkgZGVsZXRp b25zKC0pCi0KLWRpZmYgLS1naXQgYS9yZWdyZXNzL2hvc3RrZXktYWdlbnQuc2ggYi9yZWdyZXNz L2hvc3RrZXktYWdlbnQuc2gKLWluZGV4IDI4ZGNmZTE3MC4uYjllNzE2ZGNkIDEwMDY0NAotLS0t IGEvcmVncmVzcy9ob3N0a2V5LWFnZW50LnNoCi0rKysgYi9yZWdyZXNzL2hvc3RrZXktYWdlbnQu c2gKLUBAIC0xNyw4ICsxNywyMSBAQCB0cmFjZSAibWFrZSBDQSBrZXkiCi0gCi0gJHtTU0hLRVlH RU59IC1xdCBlZDI1NTE5IC1mICRPQkovYWdlbnQtY2EgLU4gJycgfHwgZmF0YWwgInNzaC1rZXln ZW4gQ0EiCi0gCi0rUFVCS0VZX0FDQ0VQVEVEX0FMR09TPWAkU1NIIC1HICJleGFtcGxlLmNvbSIg fCBcCi0rICAgIGdyZXAgLWkgIlB1YmtleUFjY2VwdGVkQWxnb3JpdGhtcyIgfCBjdXQgLWQgJyAn IC1mMi0gfCB0ciAiLCIgInwiYAotK1NTSF9BQ0NFUFRFRF9LRVlUWVBFUz1gZWNobyAiJFNTSF9L RVlUWVBFUyIgfCBlZ3JlcCAiJFBVQktFWV9BQ0NFUFRFRF9BTEdPUyJgCi0rZWNobyAkUFVCS0VZ X0FDQ0VQVEVEX0FMR09TIHwgZ3JlcCAicnNhIgotK3I9JD8KLStpZiBbICRyID09IDAgXTsgdGhl bgotK2VjaG8gJFNTSF9BQ0NFUFRFRF9LRVlUWVBFUyB8IGdyZXAgInJzYSIKLStyPSQ/Ci0raWYg WyAkciAtbmUgMCBdOyB0aGVuCi0rU1NIX0FDQ0VQVEVEX0tFWVRZUEVTPSIkU1NIX0FDQ0VQVEVE X0tFWVRZUEVTIHNzaC1yc2EiCi0rZmkKLStmaQotKwotIHRyYWNlICJsb2FkIGhvc3RrZXlzIgot LWZvciBrIGluICRTU0hfS0VZVFlQRVMgOyBkbwotK2ZvciBrIGluICRTU0hfQUNDRVBURURfS0VZ VFlQRVMgOyBkbwotIAkke1NTSEtFWUdFTn0gLXF0ICRrIC1mICRPQkovYWdlbnQta2V5LiRrIC1O ICcnIHx8IGZhdGFsICJzc2gta2V5Z2VuICRrIgotIAkke1NTSEtFWUdFTn0gLXMgJE9CSi9hZ2Vu dC1jYSAtcWggLW4gbG9jYWxob3N0LXdpdGgtYWxpYXMgXAotIAkJLUkgbG9jYWxob3N0LXdpdGgt YWxpYXMgJE9CSi9hZ2VudC1rZXkuJGsucHViIHx8IFwKLUBAIC0zMiwxMiArNDUsMTYgQEAgcm0g JE9CSi9hZ2VudC1jYSAjIERvbid0IG5lZWQgQ0EgcHJpdmF0ZSBhbnkgbW9yZSBlaXRoZXIKLSAK LSB1bnNldCBTU0hfQVVUSF9TT0NLCi0gCi0tZm9yIGsgaW4gJFNTSF9LRVlUWVBFUyA7IGRvCi0r Zm9yIGsgaW4gJFNTSF9BQ0NFUFRFRF9LRVlUWVBFUyA7IGRvCi0gCXZlcmJvc2UgImtleSB0eXBl ICRrIgotKwloa2E9JGsKLSsJaWYgWyAkayA9ICJzc2gtcnNhIiBdOyB0aGVuCi0rCSAgIGhrYT0i cnNhLXNoYTItNTEyIgotKwlmaQotIAljcCAkT0JKL3NzaGRfcHJveHkub3JpZyAkT0JKL3NzaGRf cHJveHkKLS0JZWNobyAiSG9zdEtleUFsZ29yaXRobXMgJGsiID4+ICRPQkovc3NoZF9wcm94eQot KwllY2hvICJIb3N0S2V5QWxnb3JpdGhtcyAkaGthIiA+PiAkT0JKL3NzaGRfcHJveHkKLSAJZWNo byAiSG9zdGtleSAkT0JKL2FnZW50LWtleS4ke2t9IiA+PiAkT0JKL3NzaGRfcHJveHkKLS0Jb3B0 cz0iLW9Ib3N0S2V5QWxnb3JpdGhtcz0kayAtRiAkT0JKL3NzaF9wcm94eSIKLSsJb3B0cz0iLW9I b3N0S2V5QWxnb3JpdGhtcz0kaGthIC1GICRPQkovc3NoX3Byb3h5IgotIAkoIHByaW50ZiAnbG9j YWxob3N0LXdpdGgtYWxpYXMsMTI3LjAuMC4xLDo6MSAnIDsKLSAJICBjYXQgJE9CSi9hZ2VudC1r ZXkuJGsucHViKSA+ICRPQkova25vd25faG9zdHMKLSAJU1NIX0NPTk5FQ1RJT049YCR7U1NIfSAk b3B0cyBob3N0ICdlY2hvICRTU0hfQ09OTkVDVElPTidgCi1AQCAtNTAsMTUgKzY3LDE2IEBAIGZv ciBrIGluICRTU0hfS0VZVFlQRVMgOyBkbwotIGRvbmUKLSAKLSBTU0hfQ0VSVFRZUEVTPWBzc2gg LVEga2V5LXNpZyB8IGdyZXAgJ2NlcnQtdjAxQG9wZW5zc2guY29tJyB8IG1heWJlX2ZpbHRlcl9z a2AKLStTU0hfQUNDRVBURURfQ0VSVFRZUEVTPWBlY2hvICIkU1NIX0NFUlRUWVBFUyIgfCBlZ3Jl cCAiJFBVQktFWV9BQ0NFUFRFRF9BTEdPUyJgCi0gCi0gIyBQcmVwYXJlIHNzaGRfcHJveHkgZm9y IGNlcnRpZmljYXRlcy4KLSBjcCAkT0JKL3NzaGRfcHJveHkub3JpZyAkT0JKL3NzaGRfcHJveHkK LSBIT1NUS0VZQUxHUz0iIgotLWZvciBrIGluICRTU0hfQ0VSVFRZUEVTIDsgZG8KLStmb3IgayBp biAkU1NIX0FDQ0VQVEVEX0NFUlRUWVBFUyA7IGRvCi0gCXRlc3QgLXogIiRIT1NUS0VZQUxHUyIg fHwgSE9TVEtFWUFMR1M9IiR7SE9TVEtFWUFMR1N9LCIKLSAJSE9TVEtFWUFMR1M9IiR7SE9TVEtF WUFMR1N9JHtrfSIKLSBkb25lCi0tZm9yIGsgaW4gJFNTSF9LRVlUWVBFUyA7IGRvCi0rZm9yIGsg aW4gJFNTSF9BQ0NFUFRFRF9LRVlUWVBFUyA7IGRvCi0gCWVjaG8gIkhvc3RrZXkgJE9CSi9hZ2Vu dC1rZXkuJHtrfS5wdWIiID4+ICRPQkovc3NoZF9wcm94eQotIAllY2hvICJIb3N0Q2VydGlmaWNh dGUgJE9CSi9hZ2VudC1rZXkuJHtrfS1jZXJ0LnB1YiIgPj4gJE9CSi9zc2hkX3Byb3h5Ci0gCXRl c3QgLWYgJE9CSi9hZ2VudC1rZXkuJHtrfS5wdWIgfHwgZmF0YWwgIm5vICRrIGtleSIKLUBAIC03 MCw3ICs4OCw3IEBAIGVjaG8gIkhvc3RLZXlBbGdvcml0aG1zICRIT1NUS0VZQUxHUyIgPj4gJE9C Si9zc2hkX3Byb3h5Ci0gKCBwcmludGYgJ0BjZXJ0LWF1dGhvcml0eSBsb2NhbGhvc3Qtd2l0aC1h bGlhcyAnIDsKLSAgIGNhdCAkT0JKL2FnZW50LWNhLnB1YikgPiAkT0JKL2tub3duX2hvc3RzCi0g Ci0tZm9yIGsgaW4gJFNTSF9DRVJUVFlQRVMgOyBkbwotK2ZvciBrIGluICRTU0hfQUNDRVBURURf Q0VSVFRZUEVTIDsgZG8KLSAJdmVyYm9zZSAiY2VydCB0eXBlICRrIgotIAlvcHRzPSItb0hvc3RL ZXlBbGdvcml0aG1zPSRrIC1GICRPQkovc3NoX3Byb3h5IgotIAlTU0hfQ09OTkVDVElPTj1gJHtT U0h9ICRvcHRzIGhvc3QgJ2VjaG8gJFNTSF9DT05ORUNUSU9OJ2AKLWRpZmYgLS1naXQgYS9zc2hj b25uZWN0Mi5jIGIvc3NoY29ubmVjdDIuYwotaW5kZXggZmZmYTY2YzhkLi5mNDNjODFhZDkgMTAw NjQ0Ci0tLS0gYS9zc2hjb25uZWN0Mi5jCi0rKysgYi9zc2hjb25uZWN0Mi5jCi1AQCAtMjIxLDcg KzIyMSw3IEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwgY2hhciAqaG9zdCwgc3RydWN0IHNv Y2thZGRyICpob3N0YWRkciwgdV9zaG9ydCBwb3J0LAotICAgICBjb25zdCBzdHJ1Y3Qgc3NoX2Nv bm5faW5mbyAqY2luZm8pCi0gewotIAljaGFyICpteXByb3Bvc2FsW1BST1BPU0FMX01BWF07Ci0t CWNoYXIgKmFsbF9rZXksICpoa2FsZ3MgPSBOVUxMOwotKwljaGFyICphbGxfa2V5LCAqaGthbGdz ID0gTlVMTCwgKmZpbHRlcmVkX2FsZ3MgPSBOVUxMOwotIAlpbnQgciwgdXNlX2tub3duX2hvc3Rz X29yZGVyID0gMDsKLSAKLSAjaWYgZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVO U1NMKQotQEAgLTI1NywxMCArMjU3LDIyIEBAIHNzaF9rZXgyKHN0cnVjdCBzc2ggKnNzaCwgY2hh ciAqaG9zdCwgc3RydWN0IHNvY2thZGRyICpob3N0YWRkciwgdV9zaG9ydCBwb3J0LAotIAlpZiAo dXNlX2tub3duX2hvc3RzX29yZGVyKQotIAkJaGthbGdzID0gb3JkZXJfaG9zdGtleWFsZ3MoaG9z dCwgaG9zdGFkZHIsIHBvcnQsIGNpbmZvKTsKLSAKLSsJZmlsdGVyZWRfYWxncyA9IGhrYWxncyA/ IG1hdGNoX2ZpbHRlcl9hbGxvd2xpc3QoaGthbGdzLCBvcHRpb25zLnB1YmtleV9hY2NlcHRlZF9h bGdvcykKLSsJCSAgICAgICAgICAgICAgIDogbWF0Y2hfZmlsdGVyX2FsbG93bGlzdChvcHRpb25z Lmhvc3RrZXlhbGdvcml0aG1zLAotKwkJCQkgb3B0aW9ucy5wdWJrZXlfYWNjZXB0ZWRfYWxnb3Mp OwotKwlpZiAoZmlsdGVyZWRfYWxncyA9PSBOVUxMKSB7Ci0rCQlpZiAoaGthbGdzKQotKwkJCWZh dGFsX2YoIk5vIG1hdGNoIGJldHdlZW4gYWxnb3JpdGhtcyBmb3IgJXMgKGhvc3QgJXMpIGFuZCBw dWJrZXkgYWNjZXB0ZWQgYWxnb3JpdGhtcyAlcyIsCi0rCQkJICAgICAgIGhrYWxncywgaG9zdCwg b3B0aW9ucy5wdWJrZXlfYWNjZXB0ZWRfYWxnb3MpOwotKwkJZWxzZQotKwkJCWZhdGFsX2YoIk5v IG1hdGNoIGJldHdlZW4gaG9zdCBrZXkgYWxnb3JpdGhtcyAlcyBhbmQgcHVia2V5IGFjY2VwdGVk IGFsZ29yaXRobXMgJXMiLAotKwkJCSAgICAgICAgb3B0aW9ucy5ob3N0a2V5YWxnb3JpdGhtcywg b3B0aW9ucy5wdWJrZXlfYWNjZXB0ZWRfYWxnb3MpOwotKwl9Ci0rCi0gCWtleF9wcm9wb3NhbF9w b3B1bGF0ZV9lbnRyaWVzKHNzaCwgbXlwcm9wb3NhbCwKLSAJICAgIG9wdGlvbnMua2V4X2FsZ29y aXRobXMsIG9wdGlvbnMuY2lwaGVycywgb3B0aW9ucy5tYWNzLAotIAkgICAgY29tcHJlc3Npb25f YWxnX2xpc3Qob3B0aW9ucy5jb21wcmVzc2lvbiksCi0tCSAgICBoa2FsZ3MgPyBoa2FsZ3MgOiBv cHRpb25zLmhvc3RrZXlhbGdvcml0aG1zKTsKLSsJICAgIGZpbHRlcmVkX2FsZ3MpOwotIAotICNp ZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpCi0gCWlmIChvcHRpb25z Lmdzc19rZXlleCkgewotQEAgLTMwNCw2ICszMTYsNyBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpz c2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwK LSAjZW5kaWYKLSAKLSAJZnJlZShoa2FsZ3MpOwotKwlmcmVlKGZpbHRlcmVkX2FsZ3MpOwotIAot IAkvKiBzdGFydCBrZXkgZXhjaGFuZ2UgKi8KLSAJaWYgKChyID0ga2V4X3NldHVwKHNzaCwgbXlw cm9wb3NhbCkpICE9IDApCi0tLSAKLTIuNTIuMAotCgpkaWZmIC0tZ2l0IGEvMDA0MC1vcGVuc3No LTkuMHAxLWV2cC1maXBzLWtleC5wYXRjaCBiLzAwNDAtb3BlbnNzaC05LjBwMS1ldnAtZmlwcy1r ZXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmZDRlNgotLS0g L2Rldi9udWxsCisrKyBiLzAwNDAtb3BlbnNzaC05LjBwMS1ldnAtZmlwcy1rZXgucGF0Y2gKQEAg LTAsMCArMSw2MTUgQEAKK0Zyb20gZmMxNjY2MDQ3OTA0MDllZWZkNWY1NTBjNzFjMjMyYmUzYzE4 ZDk0ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxi ZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAK K1N1YmplY3Q6IFtQQVRDSCA0MC81NF0gb3BlbnNzaC05LjBwMS1ldnAtZmlwcy1rZXgKKworLS0t CisgZGguYyAgICAgIHwgIDk4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0t Cisga2V4LmMgICAgIHwgMTM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKworIGtleC5oICAgICB8ICAgNiArKysKKyBrZXhkaC5jICAgfCAgNTIg KysrKysrKysrKysrKysrKysrLS0KKyBrZXhlY2RoLmMgfCAxMjkgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDM4MiBp bnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RoLmMgYi9kaC5j CitpbmRleCAzZWZlMGE2OWYuLmJmMzI0MzA5YyAxMDA2NDQKKy0tLSBhL2RoLmMKKysrKyBiL2Ro LmMKK0BAIC0zOCw2ICszOCw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVk ZSA8b3BlbnNzbC9kaC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jb3JlX25hbWVzLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvcGFyYW1fYnVpbGQuaD4KKyAKKyAjaW5jbHVkZSAiZGguaCIKKyAjaW5jbHVk ZSAicGF0aG5hbWVzLmgiCitAQCAtMjg5LDEwICsyOTIsMTUgQEAgZGhfcHViX2lzX3ZhbGlkKGNv bnN0IERIICpkaCwgY29uc3QgQklHTlVNICpkaF9wdWIpCisgaW50CisgZGhfZ2VuX2tleShESCAq ZGgsIGludCBuZWVkKQorIHsKKy0JaW50IHBiaXRzOworLQljb25zdCBCSUdOVU0gKmRoX3AsICpw dWJfa2V5OworKwljb25zdCBCSUdOVU0gKmRoX3AsICpkaF9nOworKwlCSUdOVU0gKnB1Yl9rZXkg PSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMOworKwlFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisrICAJ RVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworKyAgCU9TU0xfUEFSQU1fQkxEICpwYXJhbV9ibGQg PSBOVUxMOworKyAgCU9TU0xfUEFSQU0gKnBhcmFtcyA9IE5VTEw7CisrCWludCBwYml0cywgciA9 IDA7CisgCistCURIX2dldDBfcHFnKGRoLCAmZGhfcCwgTlVMTCwgTlVMTCk7CisrCURIX2dldDBf cHFnKGRoLCAmZGhfcCwgTlVMTCwgJmRoX2cpOworIAorIAlpZiAobmVlZCA8IDAgfHwgZGhfcCA9 PSBOVUxMIHx8CisgCSAgICAocGJpdHMgPSBCTl9udW1fYml0cyhkaF9wKSkgPD0gMCB8fAorQEAg LTMwMCwxOSArMzA4LDg1IEBAIGRoX2dlbl9rZXkoREggKmRoLCBpbnQgbmVlZCkKKyAJCXJldHVy biBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisgCWlmIChuZWVkIDwgMjU2KQorIAkJbmVlZCA9 IDI1NjsKKysKKysJaWYgKChwYXJhbV9ibGQgPSBPU1NMX1BBUkFNX0JMRF9uZXcoKSkgPT0gTlVM TCB8fAorKwkgICAgKGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9uYW1lKE5VTEwsICJESCIs IE5VTEwpKSA9PSBOVUxMKSB7CisrCQlPU1NMX1BBUkFNX0JMRF9mcmVlKHBhcmFtX2JsZCk7Cisr CQlyZXR1cm4gU1NIX0VSUl9BTExPQ19GQUlMOworKwl9CisrCisrCWlmIChPU1NMX1BBUkFNX0JM RF9wdXNoX0JOKHBhcmFtX2JsZCwKKysJICAgICAgICBPU1NMX1BLRVlfUEFSQU1fRkZDX1AsIGRo X3ApICE9IDEgfHwKKysJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hfQk4ocGFyYW1fYmxkLAorKwkg ICAgICAgIE9TU0xfUEtFWV9QQVJBTV9GRkNfRywgZGhfZykgIT0gMSkgeworKwkJZXJyb3JfZigi Q291bGQgbm90IHNldCBwLHEsZyBwYXJhbWV0ZXJzIik7CisrCQlyID0gU1NIX0VSUl9MSUJDUllQ VE9fRVJST1I7CisrCQlnb3RvIG91dDsKKysJfQorIAkvKgorIAkgKiBQb2xsYXJkIFJobywgQmln IHN0ZXAvTGl0dGxlIFN0ZXAgYXR0YWNrcyBhcmUgTyhzcXJ0KG4pKSwKKyAJICogc28gZG91Ymxl IHJlcXVlc3RlZCBuZWVkIGhlcmUuCisgCSAqLworLQlpZiAoIURIX3NldF9sZW5ndGgoZGgsIE1J TklNVU0obmVlZCAqIDIsIHBiaXRzIC0gMSkpKQorLQkJcmV0dXJuIFNTSF9FUlJfTElCQ1JZUFRP X0VSUk9SOworLQorLQlpZiAoREhfZ2VuZXJhdGVfa2V5KGRoKSA9PSAwKQorLQkJcmV0dXJuIFNT SF9FUlJfTElCQ1JZUFRPX0VSUk9SOworLQlESF9nZXQwX2tleShkaCwgJnB1Yl9rZXksIE5VTEwp OworLQlpZiAoIWRoX3B1Yl9pc192YWxpZChkaCwgcHViX2tleSkpCistCQlyZXR1cm4gU1NIX0VS Ul9JTlZBTElEX0ZPUk1BVDsKKy0JcmV0dXJuIDA7CisrCWlmIChPU1NMX1BBUkFNX0JMRF9wdXNo X2ludChwYXJhbV9ibGQsCisrCSAgICAgICAgT1NTTF9QS0VZX1BBUkFNX0RIX1BSSVZfTEVOLAor KwkJTUlOSU1VTShuZWVkICogMiwgcGJpdHMgLSAxKSkgIT0gMSB8fAorKwkgICAgKHBhcmFtcyA9 IE9TU0xfUEFSQU1fQkxEX3RvX3BhcmFtKHBhcmFtX2JsZCkpID09IE5VTEwpIHsKKysJCXIgPSBT U0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJCWdvdG8gb3V0OworKwl9CisrCWlmIChFVlBfUEtF WV9mcm9tZGF0YV9pbml0KGN0eCkgIT0gMSkgeworKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VS Uk9SOworKwkJZ290byBvdXQ7CisrCX0KKysJaWYgKEVWUF9QS0VZX2Zyb21kYXRhKGN0eCwgJnBr ZXksCisrCSAgICAgICAgRVZQX1BLRVlfS0VZX1BBUkFNRVRFUlMsIHBhcmFtcykgIT0gMSkgewor KwkJZXJyb3JfZigiRmFpbGVkIGtleSBnZW5lcmF0aW9uIik7CisrCQlyID0gU1NIX0VSUl9MSUJD UllQVE9fRVJST1I7CisrCQlnb3RvIG91dDsKKysJfQorKworKwkvKiByZXVzZSBjb250ZXh0IGZv ciBrZXkgZ2VuZXJhdGlvbiAqLworKwlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOworKwljdHggPSBO VUxMOworKworKwlpZiAoKGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBr ZXksIE5VTEwpKSA9PSBOVUxMIHx8CisrCSAgICBFVlBfUEtFWV9rZXlnZW5faW5pdChjdHgpICE9 IDEpIHsKKysJCWVycm9yX2YoIkNvdWxkIG5vdCBjcmVhdGUgb3IgaW5pdCBjb250ZXh0Iik7Cisr CQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisrCQlnb3RvIG91dDsKKysJfQorKwlpZiAo RVZQX1BLRVlfZ2VuZXJhdGUoY3R4LCAmcGtleSkgIT0gMSkgeworKwkJZXJyb3JfZigiQ291bGQg bm90IGdlbmVyYXRlIGtleXMiKTsKKysJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJ CWdvdG8gb3V0OworKwl9CisrCWlmIChFVlBfUEtFWV9wdWJsaWNfY2hlY2soY3R4KSAhPSAxKSB7 CisrCQllcnJvcl9mKCJUaGUgcHVibGljIGtleSBpcyBpbmNvcnJlY3QiKTsKKysJCXIgPSBTU0hf RVJSX0xJQkNSWVBUT19FUlJPUjsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCWlmIChFVlBfUEtF WV9nZXRfYm5fcGFyYW0ocGtleSwgT1NTTF9QS0VZX1BBUkFNX1BVQl9LRVksCisrCSAgICAmcHVi X2tleSkgIT0gMSB8fAorKwkgICAgRVZQX1BLRVlfZ2V0X2JuX3BhcmFtKHBrZXksIE9TU0xfUEtF WV9QQVJBTV9QUklWX0tFWSwKKysJICAgICZwcml2X2tleSkgIT0gMSB8fAorKwkgICAgREhfc2V0 MF9rZXkoZGgsIHB1Yl9rZXksIHByaXZfa2V5KSAhPSAxKSB7CisrCQllcnJvcl9mKCJDb3VsZCBu b3Qgc2V0IHB1Yi9wcml2IGtleXMgdG8gREggc3RydWN0Iik7CisrCQlyID0gU1NIX0VSUl9MSUJD UllQVE9fRVJST1I7CisrCQlnb3RvIG91dDsKKysJfQorKworKwkvKiB0cmFuc2ZlcnJlZCAqLwor KwlwdWJfa2V5ID0gTlVMTDsKKysJcHJpdl9rZXkgPSBOVUxMOworK291dDoKKysJT1NTTF9QQVJB TV9mcmVlKHBhcmFtcyk7CisrCU9TU0xfUEFSQU1fQkxEX2ZyZWUocGFyYW1fYmxkKTsKKysJRVZQ X1BLRVlfQ1RYX2ZyZWUoY3R4KTsKKysJRVZQX1BLRVlfZnJlZShwa2V5KTsKKysJQk5fY2xlYXJf ZnJlZShwdWJfa2V5KTsKKysJQk5fY2xlYXJfZnJlZShwcml2X2tleSk7CisrCXJldHVybiByOwor IH0KKyAKKyBESCAqCitkaWZmIC0tZ2l0IGEva2V4LmMgYi9rZXguYworaW5kZXggZTEwNTlkZWM0 Li4xZWIzY2E5ZDMgMTAwNjQ0CistLS0gYS9rZXguYworKysrIGIva2V4LmMKK0BAIC0xNjE5LDMg KzE2MTksMTQyIEBAIGtleF9leGNoYW5nZV9pZGVudGlmaWNhdGlvbihzdHJ1Y3Qgc3NoICpzc2gs IGludCB0aW1lb3V0X21zLAorIAlyZXR1cm4gcjsKKyB9CisgCisrI2lmZGVmIFdJVEhfT1BFTlNT TAorKy8qIAorKyAqIENyZWF0ZXMgYW4gRVZQX1BLRVkgZnJvbSB0aGUgZ2l2ZW4gcGFyYW1ldGVy cyBhbmQga2V5cy4KKysgKiBUaGUgcHJpdmF0ZSBrZXkgY2FuIGJlIG9taXR0ZWQuCisrICovCisr RVZQX1BLRVkgKgorK3NzaGtleV9jcmVhdGVfZXZwKE9TU0xfUEFSQU1fQkxEICpwYXJhbV9ibGQs IEVWUF9QS0VZX0NUWCAqY3R4KQorK3sKKysgIAlFVlBfUEtFWSAqcmV0ID0gTlVMTDsKKysgIAlP U1NMX1BBUkFNICpwYXJhbXMgPSBOVUxMOworKyAgCWlmIChwYXJhbV9ibGQgPT0gTlVMTCB8fCBj dHggPT0gTlVMTCkgeworKyAgCQlkZWJ1ZzJfZigicGFyYW1fYmxkIG9yIGN0eCBpcyBOVUxMIik7 CisrICAJCXJldHVybiBOVUxMOworKyAgCX0KKysgIAlpZiAoKHBhcmFtcyA9IE9TU0xfUEFSQU1f QkxEX3RvX3BhcmFtKHBhcmFtX2JsZCkpID09IE5VTEwpIHsKKysgIAkJZGVidWcyX2YoIkNvdWxk IG5vdCBidWlsZCBwYXJhbSBsaXN0Iik7CisrICAJCXJldHVybiBOVUxMOworKyAgCX0KKysgIAlp ZiAoRVZQX1BLRVlfZnJvbWRhdGFfaW5pdChjdHgpICE9IDEgfHwKKysgIAkgICAgRVZQX1BLRVlf ZnJvbWRhdGEoY3R4LCAmcmV0LCBFVlBfUEtFWV9LRVlQQUlSLCBwYXJhbXMpICE9IDEpIHsKKysg IAkJZGVidWcyX2YoIkVWUF9QS0VZX2Zyb21kYXRhIGZhaWxlZCIpOworKyAgCQlPU1NMX1BBUkFN X2ZyZWUocGFyYW1zKTsKKysgIAkJcmV0dXJuIE5VTEw7CisrICAJfQorKyAgCXJldHVybiByZXQ7 CisrfQorKworK2ludAorK2tleF9jcmVhdGVfZXZwX2VjKEVDX0tFWSAqaywgaW50IGVjZHNhX25p ZCwgRVZQX1BLRVkgKipwa2V5KQorK3sKKysJT1NTTF9QQVJBTV9CTEQgKnBhcmFtX2JsZCA9IE5V TEw7CisrCUVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKKysgIAlCTl9DVFggKmJuX2N0eCA9IE5V TEw7CisrICAJdWludDhfdCAqcHViX3NlciA9IE5VTEw7CisrICAJY29uc3QgY2hhciAqZ3JvdXBf bmFtZTsKKysgIAljb25zdCBFQ19QT0lOVCAqcHViID0gTlVMTDsKKysgIAljb25zdCBCSUdOVU0g KnByaXYgPSBOVUxMOworKyAgCWludCByZXQgPSAwOworKworKwlpZiAoayA9PSBOVUxMKQorKyAg ICAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisrICAJaWYgKChjdHggPSBFVlBf UEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiRUMiLCBOVUxMKSkgPT0gTlVMTCB8fAorKyAg ICAgIAkgICAgKHBhcmFtX2JsZCA9IE9TU0xfUEFSQU1fQkxEX25ldygpKSA9PSBOVUxMIHx8Cisr ICAgICAgCSAgICAoYm5fY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSB7CisrICAgIAkJcmV0 ID0gU1NIX0VSUl9BTExPQ19GQUlMOworKyAgICAJCWdvdG8gb3V0OworKyAgCX0KKysKKysJaWYg KChncm91cF9uYW1lID0gT1NTTF9FQ19jdXJ2ZV9uaWQybmFtZShlY2RzYV9uaWQpKSA9PSBOVUxM IHx8CisrICAgICAJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hfdXRmOF9zdHJpbmcocGFyYW1fYmxk LAorKyAgICAgICAgICAgICAgICBPU1NMX1BLRVlfUEFSQU1fR1JPVVBfTkFNRSwKKysgICAgICAg ICAgICAgICAgZ3JvdXBfbmFtZSwKKysgICAgICAgICAgICAgICAgc3RybGVuKGdyb3VwX25hbWUp KSAhPSAxKSB7CisrICAgIAkJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisrICAgIAkJ Z290byBvdXQ7CisrCX0KKysgIAlpZiAoKHB1YiA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXkoaykp ICE9IE5VTEwpIHsKKysgICAgCQljb25zdCBFQ19HUk9VUCAqZ3JvdXA7CisrICAgIAkJc2l6ZV90 IGxlbjsKKysKKysJCWdyb3VwID0gRUNfS0VZX2dldDBfZ3JvdXAoayk7CisrCQlsZW4gPSBFQ19Q T0lOVF9wb2ludDJvY3QoZ3JvdXAsIHB1YiwKKysJCSAgICBQT0lOVF9DT05WRVJTSU9OX1VOQ09N UFJFU1NFRCwgTlVMTCwgMCwgTlVMTCk7CisrCQlpZiAoKHB1Yl9zZXIgPSBtYWxsb2MobGVuKSkg PT0gTlVMTCkgeworKwkJCXJldCA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKKysJCQlnb3RvIG91dDsK KysJCX0KKysJCUVDX1BPSU5UX3BvaW50Mm9jdChncm91cCwKKysJCSAgICBwdWIsCisrCQkgICAg UE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQsCisrCQkgICAgcHViX3NlciwKKysJCSAgICBs ZW4sCisrCQkgICAgYm5fY3R4KTsKKysJCWlmIChPU1NMX1BBUkFNX0JMRF9wdXNoX29jdGV0X3N0 cmluZyhwYXJhbV9ibGQsCisrCQkgICAgT1NTTF9QS0VZX1BBUkFNX1BVQl9LRVksCisrCQkgICAg cHViX3NlciwKKysJCSAgICBsZW4pICE9IDEpIHsKKysJCQlyZXQgPSBTU0hfRVJSX0xJQkNSWVBU T19FUlJPUjsKKysJCQlnb3RvIG91dDsKKysJCX0KKysJfQorKyAgCWlmICgocHJpdiA9IEVDX0tF WV9nZXQwX3ByaXZhdGVfa2V5KGspKSAhPSBOVUxMICYmCisrCSAgICBPU1NMX1BBUkFNX0JMRF9w dXNoX0JOKHBhcmFtX2JsZCwKKysgICAgICAgICAgICAgICBPU1NMX1BLRVlfUEFSQU1fUFJJVl9L RVksIHByaXYpICE9IDEpIHsKKysJCXJldCA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworKwkJ Z290byBvdXQ7CisrICAJfQorKyAgCWlmICgoKnBrZXkgPSBzc2hrZXlfY3JlYXRlX2V2cChwYXJh bV9ibGQsIGN0eCkpID09IE5VTEwpIHsKKysgICAgCQlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19F UlJPUjsKKysgICAgCQlnb3RvIG91dDsKKysgIAl9CisrCisrb3V0OgorKyAgCU9TU0xfUEFSQU1f QkxEX2ZyZWUocGFyYW1fYmxkKTsKKysgIAlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOworKyAgCUJO X0NUWF9mcmVlKGJuX2N0eCk7CisrICAJZnJlZShwdWJfc2VyKTsKKysgIAlyZXR1cm4gcmV0Owor K30KKysKKytpbnQKKytrZXhfY3JlYXRlX2V2cF9kaChFVlBfUEtFWSAqKnBrZXksIGNvbnN0IEJJ R05VTSAqcCwgY29uc3QgQklHTlVNICpxLAorKyAgICBjb25zdCBCSUdOVU0gKmcsIGNvbnN0IEJJ R05VTSAqcHViLCBjb25zdCBCSUdOVU0gKnByaXYpCisreworKwlPU1NMX1BBUkFNX0JMRCAqcGFy YW1fYmxkID0gTlVMTDsKKysJRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworKwlpbnQgciA9IDA7 CisrCisrCS8qIGNyZWF0ZSBFVlBfUEtFWS1ESCBrZXkgKi8KKysJaWYgKChjdHggPSBFVlBfUEtF WV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiREgiLCBOVUxMKSkgPT0gTlVMTCB8fAorKwkgICAg KHBhcmFtX2JsZCA9IE9TU0xfUEFSQU1fQkxEX25ldygpKSA9PSBOVUxMKSB7CisrCQllcnJvcl9m KCJFVlBfUEtFWV9DVFggb3IgUEFSQU1fQkxEIGluaXQgZmFpbGVkIik7CisrCQlyID0gU1NIX0VS Ul9BTExPQ19GQUlMOworKwkJZ290byBvdXQ7CisrCX0KKysJaWYgKE9TU0xfUEFSQU1fQkxEX3B1 c2hfQk4ocGFyYW1fYmxkLCBPU1NMX1BLRVlfUEFSQU1fRkZDX1AsIHApICE9IDEgfHwKKysJICAg IE9TU0xfUEFSQU1fQkxEX3B1c2hfQk4ocGFyYW1fYmxkLCBPU1NMX1BLRVlfUEFSQU1fRkZDX1Es IHEpICE9IDEgfHwKKysJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hfQk4ocGFyYW1fYmxkLCBPU1NM X1BLRVlfUEFSQU1fRkZDX0csIGcpICE9IDEgfHwKKysJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hf Qk4ocGFyYW1fYmxkLAorKwkgICAgICAgIE9TU0xfUEtFWV9QQVJBTV9QVUJfS0VZLCBwdWIpICE9 IDEpIHsKKysJCWVycm9yX2YoIkZhaWxlZCBwdXNoaW5nIHBhcmFtcyB0byBPU1NMX1BBUkFNX0JM RCIpOworKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworKwkJZ290byBvdXQ7CisrCX0K KysJaWYgKHByaXYgIT0gTlVMTCAmJgorKwkgICAgT1NTTF9QQVJBTV9CTERfcHVzaF9CTihwYXJh bV9ibGQsCisrCSAgICAgICAgT1NTTF9QS0VZX1BBUkFNX1BSSVZfS0VZLCBwcml2KSAhPSAxKSB7 CisrCQllcnJvcl9mKCJGYWlsZWQgcHVzaGluZyBwcml2YXRlIGtleSB0byBPU1NMX1BBUkFNX0JM RCIpOworKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworKwkJZ290byBvdXQ7CisrCX0K KysJaWYgKCgqcGtleSA9IHNzaGtleV9jcmVhdGVfZXZwKHBhcmFtX2JsZCwgY3R4KSkgPT0gTlVM TCkKKysJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKytvdXQ6CisrCU9TU0xfUEFSQU1f QkxEX2ZyZWUocGFyYW1fYmxkKTsKKysJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKKysJcmV0dXJu IHI7CisrfQorKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KK2RpZmYgLS1naXQgYS9rZXguaCBi L2tleC5oCitpbmRleCAwYTBjYjE1NjIuLmZmNDEzMjRlOSAxMDA2NDQKKy0tLSBhL2tleC5oCisr KysgYi9rZXguaAorQEAgLTM3LDYgKzM3LDkgQEAKKyAjIGluY2x1ZGUgPG9wZW5zc2wvYm4uaD4K KyAjIGluY2x1ZGUgPG9wZW5zc2wvZGguaD4KKyAjIGluY2x1ZGUgPG9wZW5zc2wvZWNkc2EuaD4K KysjIGluY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrIyBpbmNsdWRlIDxvcGVuc3NsL2NvcmVfbmFt ZXMuaD4KKysjIGluY2x1ZGUgPG9wZW5zc2wvcGFyYW1fYnVpbGQuaD4KKyAjIGlmZGVmIE9QRU5T U0xfSEFTX0VDQworICMgIGluY2x1ZGUgPG9wZW5zc2wvZWMuaD4KKyAjIGVsc2UgLyogT1BFTlNT TF9IQVNfRUNDICovCitAQCAtMzE3LDYgKzMyMCw5IEBAIGludAlrZXhjMjU1MTlfc2hhcmVkX2tl eV9leHQoY29uc3QgdV9jaGFyIGtleVtDVVJWRTI1NTE5X1NJWkVdLAorICAgICBjb25zdCB1X2No YXIgcHViW0NVUlZFMjU1MTlfU0laRV0sIHN0cnVjdCBzc2hidWYgKm91dCwgaW50KQorIAlfX2F0 dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDEsIENVUlZFMjU1MTlfU0laRSkp KQorIAlfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDIsIENVUlZFMjU1 MTlfU0laRSkpKTsKKytpbnQJa2V4X2NyZWF0ZV9ldnBfZGgoRVZQX1BLRVkgKiosIGNvbnN0IEJJ R05VTSAqLCBjb25zdCBCSUdOVU0gKiwKKysgICAgY29uc3QgQklHTlVNICosIGNvbnN0IEJJR05V TSAqLCBjb25zdCBCSUdOVU0gKik7CisraW50ICAgIGtleF9jcmVhdGVfZXZwX2VjKEVDX0tFWSAq aywgaW50IGVjZHNhX25pZCwgRVZQX1BLRVkgKipwa2V5KTsKKyAKKyAjaWYgZGVmaW5lZChERUJV R19LRVgpIHx8IGRlZmluZWQoREVCVUdfS0VYREgpIHx8IGRlZmluZWQoREVCVUdfS0VYRUNESCkK KyB2b2lkCWR1bXBfZGlnZXN0KGNvbnN0IGNoYXIgKiwgY29uc3QgdV9jaGFyICosIGludCk7Citk aWZmIC0tZ2l0IGEva2V4ZGguYyBiL2tleGRoLmMKK2luZGV4IGI2MzM3NGIwZS4uNzRhZmExMTg0 IDEwMDY0NAorLS0tIGEva2V4ZGguYworKysrIGIva2V4ZGguYworQEAgLTM1LDYgKzM1LDEwIEBA CisgCisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2NvcmVfbmFtZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9wYXJhbV9i dWlsZC5oPgorIAorICNpbmNsdWRlICJrZXguaCIKKyAjaW5jbHVkZSAic3NoYnVmLmgiCitAQCAt ODEsOSArODUsMTIgQEAgaW50Cisga2V4X2RoX2NvbXB1dGVfa2V5KHN0cnVjdCBrZXggKmtleCwg QklHTlVNICpkaF9wdWIsIHN0cnVjdCBzc2hidWYgKm91dCkKKyB7CisgCUJJR05VTSAqc2hhcmVk X3NlY3JldCA9IE5VTEw7CisrCWNvbnN0IEJJR05VTSAqcHViLCAqcHJpdiwgKnAsICpxLCAqZzsK KysJRVZQX1BLRVkgKnBrZXkgPSBOVUxMLCAqZGhfcGtleSA9IE5VTEw7CisrCUVWUF9QS0VZX0NU WCAqY3R4ID0gTlVMTDsKKyAJdV9jaGFyICprYnVmID0gTlVMTDsKKyAJc2l6ZV90IGtsZW4gPSAw OworLQlpbnQga291dCwgcjsKKysJaW50IHIgPSAwOworIAorICNpZmRlZiBERUJVR19LRVhESAor IAlmcHJpbnRmKHN0ZGVyciwgImRoX3B1Yj0gIik7CitAQCAtOTgsMjQgKzEwNSw1OSBAQCBrZXhf ZGhfY29tcHV0ZV9rZXkoc3RydWN0IGtleCAqa2V4LCBCSUdOVU0gKmRoX3B1Yiwgc3RydWN0IHNz aGJ1ZiAqb3V0KQorIAkJciA9IFNTSF9FUlJfTUVTU0FHRV9JTkNPTVBMRVRFOworIAkJZ290byBv dXQ7CisgCX0KKy0Ja2xlbiA9IERIX3NpemUoa2V4LT5kaCk7CisrCisrCURIX2dldDBfa2V5KGtl eC0+ZGgsICZwdWIsICZwcml2KTsKKysJREhfZ2V0MF9wcWcoa2V4LT5kaCwgJnAsICZxLCAmZyk7 CisrCS8qIGltcG9ydCBrZXkgKi8KKysJciA9IGtleF9jcmVhdGVfZXZwX2RoKCZwa2V5LCBwLCBx LCBnLCBwdWIsIHByaXYpOworKwlpZiAociAhPSAwKSB7CisrCQllcnJvcl9mKCJDb3VsZCBub3Qg Y3JlYXRlIEVWUF9QS0VZIGZvciBkaCIpOworKwkJRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIp OworKwkJZ290byBvdXQ7CisrCX0KKysJLyogaW1wb3J0IHBlZXIga2V5IAorKwkgKiB0aGUgcGFy YW1ldGVycyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgd2l0aCBwa2V5CisrCSAqLworKwlyID0ga2V4 X2NyZWF0ZV9ldnBfZGgoJmRoX3BrZXksIHAsIHEsIGcsIGRoX3B1YiwgTlVMTCk7CisrCWlmIChy ICE9IDApIHsKKysJCWVycm9yX2YoIkNvdWxkIG5vdCBpbXBvcnQgcGVlciBrZXkgZm9yIGRoIik7 CisrCQlFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0ZGVycik7CisrCQlnb3RvIG91dDsKKysJfQorKwor KwlpZiAoKGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBrZXksIE5VTEwp KSA9PSBOVUxMKSB7CisrCQllcnJvcl9mKCJDb3VsZCBub3QgaW5pdCBFVlBfUEtFWV9DVFggZm9y IGRoIik7CisrCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOworKwkJZ290byBvdXQ7CisrCX0KKysJ aWYgKEVWUF9QS0VZX2Rlcml2ZV9pbml0KGN0eCkgIT0gMSB8fAorKwkgICAgRVZQX1BLRVlfZGVy aXZlX3NldF9wZWVyKGN0eCwgZGhfcGtleSkgIT0gMSB8fAorKwkgICAgRVZQX1BLRVlfZGVyaXZl KGN0eCwgTlVMTCwgJmtsZW4pICE9IDEpIHsKKysJCWVycm9yX2YoIkNvdWxkIG5vdCBnZXQga2V5 IHNpemUiKTsKKysJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJCWdvdG8gb3V0Owor Kwl9CisgCWlmICgoa2J1ZiA9IG1hbGxvYyhrbGVuKSkgPT0gTlVMTCB8fAorIAkgICAgKHNoYXJl ZF9zZWNyZXQgPSBCTl9uZXcoKSkgPT0gTlVMTCkgeworIAkJciA9IFNTSF9FUlJfQUxMT0NfRkFJ TDsKKyAJCWdvdG8gb3V0OworIAl9CistCWlmICgoa291dCA9IERIX2NvbXB1dGVfa2V5KGtidWYs IGRoX3B1Yiwga2V4LT5kaCkpIDwgMCB8fAorLQkgICAgQk5fYmluMmJuKGtidWYsIGtvdXQsIHNo YXJlZF9zZWNyZXQpID09IE5VTEwpIHsKKysJaWYgKEVWUF9QS0VZX2Rlcml2ZShjdHgsIGtidWYs ICZrbGVuKSAhPSAxIHx8CisrCSAgICBCTl9iaW4yYm4oa2J1Ziwga2xlbiwgc2hhcmVkX3NlY3Jl dCkgPT0gTlVMTCkgeworKwkJZXJyb3JfZigiQ291bGQgbm90IGRlcml2ZSBrZXkiKTsKKyAJCXIg PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKyAJCWdvdG8gb3V0OworIAl9CisgI2lmZGVmIERF QlVHX0tFWERICistCWR1bXBfZGlnZXN0KCJzaGFyZWQgc2VjcmV0Iiwga2J1Ziwga291dCk7Cisr CWR1bXBfZGlnZXN0KCJzaGFyZWQgc2VjcmV0Iiwga2J1Ziwga2xlbik7CisgI2VuZGlmCisgCXIg PSBzc2hidWZfcHV0X2JpZ251bTIob3V0LCBzaGFyZWRfc2VjcmV0KTsKKyAgb3V0OgorIAlmcmVl emVybyhrYnVmLCBrbGVuKTsKKyAJQk5fY2xlYXJfZnJlZShzaGFyZWRfc2VjcmV0KTsKKysJRVZQ X1BLRVlfZnJlZShwa2V5KTsKKysJRVZQX1BLRVlfZnJlZShkaF9wa2V5KTsKKysJRVZQX1BLRVlf Q1RYX2ZyZWUoY3R4KTsKKyAJcmV0dXJuIHI7CisgfQorIAorZGlmZiAtLWdpdCBhL2tleGVjZGgu YyBiL2tleGVjZGguYworaW5kZXggNmE5MDU4Y2RjLi5iNjYxZTA3MDUgMTAwNjQ0CistLS0gYS9r ZXhlY2RoLmMKKysrKyBiL2tleGVjZGguYworQEAgLTM1LDE2ICszNSw1NiBAQAorIAorICNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZWNkaC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NvcmVfbmFtZXMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9wYXJhbV9idWlsZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor IAorICNpbmNsdWRlICJzc2hrZXkuaCIKKyAjaW5jbHVkZSAia2V4LmgiCisgI2luY2x1ZGUgInNz aGJ1Zi5oIgorICNpbmNsdWRlICJzc2hlcnIuaCIKKysjaW5jbHVkZSAibG9nLmgiCisgCisgc3Rh dGljIGludAorIGtleF9lY2RoX2RlY19rZXlfZ3JvdXAoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1 Y3Qgc3NoYnVmICosIEVDX0tFWSAqa2V5LAorICAgICBjb25zdCBFQ19HUk9VUCAqLCBzdHJ1Y3Qg c3NoYnVmICoqKTsKKyAKKytzdGF0aWMgRUNfS0VZICoKKytnZW5lcmF0ZV9lY19rZXlzKGludCBl Y19uaWQpCisreworKwlFQ19LRVkgKmNsaWVudF9rZXkgPSBOVUxMOworKwlFVlBfUEtFWSAqcGtl eSA9IE5VTEw7CisrCUVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKKysJT1NTTF9QQVJBTV9CTEQg KnBhcmFtX2JsZCA9IE5VTEw7CisrCU9TU0xfUEFSQU0gKnBhcmFtcyA9IE5VTEw7CisrCWNvbnN0 IGNoYXIgKmdyb3VwX25hbWU7CisrCisrCWlmICgoY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9t X25hbWUoTlVMTCwgIkVDIiwgTlVMTCkpID09IE5VTEwgfHwKKysJICAgIChwYXJhbV9ibGQgPSBP U1NMX1BBUkFNX0JMRF9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gb3V0OworKwlpZiAoKGdyb3Vw X25hbWUgPSBPU1NMX0VDX2N1cnZlX25pZDJuYW1lKGVjX25pZCkpID09IE5VTEwgfHwKKysJICAg IE9TU0xfUEFSQU1fQkxEX3B1c2hfdXRmOF9zdHJpbmcocGFyYW1fYmxkLAorKwkgICAgICAgIE9T U0xfUEtFWV9QQVJBTV9HUk9VUF9OQU1FLCBncm91cF9uYW1lLCAwKSAhPSAxIHx8CisrCSAgICAo cGFyYW1zID0gT1NTTF9QQVJBTV9CTERfdG9fcGFyYW0ocGFyYW1fYmxkKSkgPT0gTlVMTCkgewor KwkJZXJyb3JfZigiQ291bGQgbm90IGNyZWF0ZSBPU1NMX1BBUkFNIik7CisrCQlnb3RvIG91dDsK KysJfQorKwlpZiAoRVZQX1BLRVlfa2V5Z2VuX2luaXQoY3R4KSAhPSAxIHx8CisrCSAgICBFVlBf UEtFWV9DVFhfc2V0X3BhcmFtcyhjdHgsIHBhcmFtcykgIT0gMSB8fAorKwkgICAgRVZQX1BLRVlf Z2VuZXJhdGUoY3R4LCAmcGtleSkgIT0gMSB8fAorKwkgICAgKGNsaWVudF9rZXkgPSBFVlBfUEtF WV9nZXQxX0VDX0tFWShwa2V5KSkgPT0gTlVMTCkgeworKwkJZXJyb3JfZigiQ291bGQgbm90IGdl bmVyYXRlIGVjIGtleXMiKTsKKysJCWdvdG8gb3V0OworKwl9Cisrb3V0OgorKwlFVlBfUEtFWV9m cmVlKHBrZXkpOworKwlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOworKwlPU1NMX1BBUkFNX0JMRF9m cmVlKHBhcmFtX2JsZCk7CisrCU9TU0xfUEFSQU1fZnJlZShwYXJhbXMpOworKwlyZXR1cm4gY2xp ZW50X2tleTsKKyt9CisrCisgaW50Cisga2V4X2VjZGhfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgp CisgeworQEAgLTU0LDExICs5NCw3IEBAIGtleF9lY2RoX2tleXBhaXIoc3RydWN0IGtleCAqa2V4 KQorIAlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOworIAlpbnQgcjsKKyAKKy0JaWYgKChjbGll bnRfa2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKGtleC0+ZWNfbmlkKSkgPT0gTlVMTCkg eworLQkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKKy0JCWdvdG8gb3V0OworLQl9CistCWlmIChF Q19LRVlfZ2VuZXJhdGVfa2V5KGNsaWVudF9rZXkpICE9IDEpIHsKKysJaWYgKChjbGllbnRfa2V5 ID0gZ2VuZXJhdGVfZWNfa2V5cyhrZXgtPmVjX25pZCkpID09IE5VTEwpIHsKKyAJCXIgPSBTU0hf RVJSX0xJQkNSWVBUT19FUlJPUjsKKyAJCWdvdG8gb3V0OworIAl9CitAQCAtMTAwLDExICsxMzYs NyBAQCBrZXhfZWNkaF9lbmMoc3RydWN0IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpj bGllbnRfYmxvYiwKKyAJKnNlcnZlcl9ibG9icCA9IE5VTEw7CisgCSpzaGFyZWRfc2VjcmV0cCA9 IE5VTEw7CisgCistCWlmICgoc2VydmVyX2tleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShr ZXgtPmVjX25pZCkpID09IE5VTEwpIHsKKy0JCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7CistCQln b3RvIG91dDsKKy0JfQorLQlpZiAoRUNfS0VZX2dlbmVyYXRlX2tleShzZXJ2ZXJfa2V5KSAhPSAx KSB7CisrCWlmICgoc2VydmVyX2tleSA9IGdlbmVyYXRlX2VjX2tleXMoa2V4LT5lY19uaWQpKSA9 PSBOVUxMKSB7CisgCQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisgCQlnb3RvIG91dDsK KyAJfQorQEAgLTEzOSwxMSArMTcxLDIxIEBAIGtleF9lY2RoX2RlY19rZXlfZ3JvdXAoc3RydWN0 IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICplY19ibG9iLAorIHsKKyAJc3RydWN0IHNz aGJ1ZiAqYnVmID0gTlVMTDsKKyAJQklHTlVNICpzaGFyZWRfc2VjcmV0ID0gTlVMTDsKKy0JRUNf UE9JTlQgKmRoX3B1YiA9IE5VTEw7CistCXVfY2hhciAqa2J1ZiA9IE5VTEw7CistCXNpemVfdCBr bGVuID0gMDsKKysJRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworKwlFVlBfUEtFWSAqcGtleSA9 IE5VTEwsICpkaF9wa2V5ID0gTlVMTDsKKysJT1NTTF9QQVJBTV9CTEQgKnBhcmFtX2JsZCA9IE5V TEw7CisrCU9TU0xfUEFSQU0gKnBhcmFtcyA9IE5VTEw7CisrCXVfY2hhciAqa2J1ZiA9IE5VTEws ICpwdWIgPSBOVUxMOworKwlzaXplX3Qga2xlbiA9IDAsIHB1YmxlbjsKKysJY29uc3QgY2hhciAq Z3JvdXBfbmFtZTsKKyAJaW50IHI7CisgCisrCS8qIGltcG9ydCBFQ19LRVkgdG8gRVZQX1BLRVkg Ki8KKysJaWYgKChyID0ga2V4X2NyZWF0ZV9ldnBfZWMoa2V5LCBrZXgtPmVjX25pZCwgJnBrZXkp KSAhPSAwKSB7CisrCQllcnJvcl9mKCJDb3VsZCBub3QgY3JlYXRlIEVWUF9QS0VZIik7CisrCQln b3RvIG91dDsKKysJfQorKworIAkqc2hhcmVkX3NlY3JldHAgPSBOVUxMOworIAorIAlpZiAoKGJ1 ZiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkgeworQEAgLTE1Miw0NSArMTk0LDgyIEBAIGtleF9l Y2RoX2RlY19rZXlfZ3JvdXAoc3RydWN0IGtleCAqa2V4LCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpl Y19ibG9iLAorIAl9CisgCWlmICgociA9IHNzaGJ1Zl9wdXRfc3RyaW5nYihidWYsIGVjX2Jsb2Ip KSAhPSAwKQorIAkJZ290byBvdXQ7CistCWlmICgoZGhfcHViID0gRUNfUE9JTlRfbmV3KGdyb3Vw KSkgPT0gTlVMTCkgeworKworKwkvKiB0aGUgcHVibGljIGtleSBpcyBpbiB0aGUgYnVmZmVyIGlu IG9jdGV0IHN0cmluZyBVTkNPTVBSRVNTRUQKKysJICogZm9ybWF0LiBTZWUgc3NoYnVmX3B1dF9l YyAqLworKwlpZiAoKHIgPSBzc2hidWZfZ2V0X3N0cmluZyhidWYsICZwdWIsICZwdWJsZW4pKSAh PSAwKQorKwkJZ290byBvdXQ7CisrCXNzaGJ1Zl9yZXNldChidWYpOworKwlpZiAoKGN0eCA9IEVW UF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBrZXksIE5VTEwpKSA9PSBOVUxMIHx8Cisr CSAgICAocGFyYW1fYmxkID0gT1NTTF9QQVJBTV9CTERfbmV3KCkpID09IE5VTEwpIHsKKyAJCXIg PSBTU0hfRVJSX0FMTE9DX0ZBSUw7CisgCQlnb3RvIG91dDsKKyAJfQorLQlpZiAoKHIgPSBzc2hi dWZfZ2V0X2VjKGJ1ZiwgZGhfcHViLCBncm91cCkpICE9IDApIHsKKysJaWYgKChncm91cF9uYW1l ID0gT1NTTF9FQ19jdXJ2ZV9uaWQybmFtZShrZXgtPmVjX25pZCkpID09IE5VTEwpIHsKKysJCXIg PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJCWdvdG8gb3V0OworKwl9CisrCWlmIChPU1NM X1BBUkFNX0JMRF9wdXNoX29jdGV0X3N0cmluZyhwYXJhbV9ibGQsCisrCSAgICAgICAgT1NTTF9Q S0VZX1BBUkFNX1BVQl9LRVksIHB1YiwgcHVibGVuKSAhPSAxIHx8CisrCSAgICBPU1NMX1BBUkFN X0JMRF9wdXNoX3V0Zjhfc3RyaW5nKHBhcmFtX2JsZCwKKysJICAgICAgICBPU1NMX1BLRVlfUEFS QU1fR1JPVVBfTkFNRSwgZ3JvdXBfbmFtZSwgMCkgIT0gMSB8fAorKwkgICAgKHBhcmFtcyA9IE9T U0xfUEFSQU1fQkxEX3RvX3BhcmFtKHBhcmFtX2JsZCkpID09IE5VTEwpIHsKKysJCWVycm9yX2Yo IkZhaWxlZCB0byBzZXQgcGFyYW1zIGZvciBkaF9wa2V5Iik7CisrCQlyID0gU1NIX0VSUl9MSUJD UllQVE9fRVJST1I7CisrCQlnb3RvIG91dDsKKysJfQorKwlpZiAoRVZQX1BLRVlfZnJvbWRhdGFf aW5pdChjdHgpICE9IDEgfHwKKysJICAgIEVWUF9QS0VZX2Zyb21kYXRhKGN0eCwgJmRoX3BrZXks CisrCSAgICAgICAgRVZQX1BLRVlfUFVCTElDX0tFWSwgcGFyYW1zKSAhPSAxIHx8CisrCSAgICBF VlBfUEtFWV9wdWJsaWNfY2hlY2soY3R4KSAhPSAxKSB7CisrCQllcnJvcl9mKCJQZWVyIHB1Ymxp YyBrZXkgaW1wb3J0IGZhaWxlZCIpOworKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwor IAkJZ290byBvdXQ7CisgCX0KKy0Jc3NoYnVmX3Jlc2V0KGJ1Zik7CisgCisgI2lmZGVmIERFQlVH X0tFWEVDREgKKyAJZnB1dHMoInB1YmxpYyBrZXk6XG4iLCBzdGRlcnIpOworLQlzc2hrZXlfZHVt cF9lY19wb2ludChncm91cCwgZGhfcHViKTsKKysJRVZQX1BLRVlfcHJpbnRfcHVibGljX2ZwKHN0 ZGVyciwgZGhfcGtleSwgMCwgTlVMTCk7CisgI2VuZGlmCistCWlmIChzc2hrZXlfZWNfdmFsaWRh dGVfcHVibGljKGdyb3VwLCBkaF9wdWIpICE9IDApIHsKKy0JCXIgPSBTU0hfRVJSX01FU1NBR0Vf SU5DT01QTEVURTsKKysJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKKysJY3R4ID0gTlVMTDsKKysJ aWYgKChjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwa2V5LCBOVUxMKSkg PT0gTlVMTCB8fAorKwkgICAgRVZQX1BLRVlfZGVyaXZlX2luaXQoY3R4KSAhPSAxIHx8CisrCSAg ICBFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXIoY3R4LCBkaF9wa2V5KSAhPSAxIHx8CisrCSAgICBF VlBfUEtFWV9kZXJpdmUoY3R4LCBOVUxMLCAma2xlbikgIT0gMSkgeworKwkJZXJyb3JfZigiRmFp bGVkIHRvIGdldCBkZXJpdmUgaW5mb3JtYXRpb24iKTsKKysJCXIgPSBTU0hfRVJSX0xJQkNSWVBU T19FUlJPUjsKKyAJCWdvdG8gb3V0OworIAl9CistCWtsZW4gPSAoRUNfR1JPVVBfZ2V0X2RlZ3Jl ZShncm91cCkgKyA3KSAvIDg7CistCWlmICgoa2J1ZiA9IG1hbGxvYyhrbGVuKSkgPT0gTlVMTCB8 fAorLQkgICAgKHNoYXJlZF9zZWNyZXQgPSBCTl9uZXcoKSkgPT0gTlVMTCkgeworKwlpZiAoKGti dWYgPSBtYWxsb2Moa2xlbikpID09IE5VTEwpIHsKKyAJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7 CisgCQlnb3RvIG91dDsKKyAJfQorLQlpZiAoRUNESF9jb21wdXRlX2tleShrYnVmLCBrbGVuLCBk aF9wdWIsIGtleSwgTlVMTCkgIT0gKGludClrbGVuIHx8CistCSAgICBCTl9iaW4yYm4oa2J1Ziwg a2xlbiwgc2hhcmVkX3NlY3JldCkgPT0gTlVMTCkgeworKwlpZiAoRVZQX1BLRVlfZGVyaXZlKGN0 eCwga2J1ZiwgJmtsZW4pICE9IDEpIHsKKyAJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsK KyAJCWdvdG8gb3V0OworIAl9CisgI2lmZGVmIERFQlVHX0tFWEVDREgKKyAJZHVtcF9kaWdlc3Qo InNoYXJlZCBzZWNyZXQiLCBrYnVmLCBrbGVuKTsKKyAjZW5kaWYKKysJaWYgKChzaGFyZWRfc2Vj cmV0ID0gQk5fbmV3KCkpID09IE5VTEwgfHwKKysJICAgIChCTl9iaW4yYm4oa2J1Ziwga2xlbiwg c2hhcmVkX3NlY3JldCkgPT0gTlVMTCkpIHsKKysJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7Cisr CQlnb3RvIG91dDsKKysJfQorIAlpZiAoKHIgPSBzc2hidWZfcHV0X2JpZ251bTIoYnVmLCBzaGFy ZWRfc2VjcmV0KSkgIT0gMCkKKyAJCWdvdG8gb3V0OworIAkqc2hhcmVkX3NlY3JldHAgPSBidWY7 CisgCWJ1ZiA9IE5VTEw7CisgIG91dDoKKy0JRUNfUE9JTlRfY2xlYXJfZnJlZShkaF9wdWIpOwor KwlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOworKwlFVlBfUEtFWV9mcmVlKHBrZXkpOworKwlFVlBf UEtFWV9mcmVlKGRoX3BrZXkpOworKwlPU1NMX1BBUkFNX0JMRF9mcmVlKHBhcmFtX2JsZCk7Cisr CU9TU0xfUEFSQU1fZnJlZShwYXJhbXMpOworIAlCTl9jbGVhcl9mcmVlKHNoYXJlZF9zZWNyZXQp OworIAlmcmVlemVybyhrYnVmLCBrbGVuKTsKKysJZnJlZXplcm8ocHViLCBwdWJsZW4pOworIAlz c2hidWZfZnJlZShidWYpOworIAlyZXR1cm4gcjsKKyB9CistLSAKKzIuNTMuMAorCgpkaWZmIC0t Z2l0IGEvMDA0MS1vcGVuc3NoLTguN3AxLW5vaG9zdHNoYTFwcm9vZi5wYXRjaCBiLzAwNDEtb3Bl bnNzaC04LjdwMS1ub2hvc3RzaGExcHJvb2YucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMGI2MmNjNAotLS0gL2Rldi9udWxsCisrKyBiLzAwNDEtb3BlbnNzaC04Ljdw MS1ub2hvc3RzaGExcHJvb2YucGF0Y2gKQEAgLTAsMCArMSwzNTAgQEAKK0Zyb20gODE2ZDkzMTM1 NmIzYjcyZjYxOTI5YzhkNjY3NDZiNTVkOTY4ODJiYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK K0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwg MTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA0MS81NF0gb3BlbnNz aC04LjdwMS1ub2hvc3RzaGExcHJvb2YKKworLS0tCisgY29tcGF0LmMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgNiArKysrKworIGNvbXBhdC5oICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDIgKy0KKyBtb25pdG9yLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IDMzICsrKysrKysrKysrKysrKysrKysrKy0tLS0tCisgcmVncmVzcy91bml0dGVzdHMva2V4 L3Rlc3Rfa2V4LmMgICAgICAgfCAgMyArKy0KKyByZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVz dF9maWxlLmMgICB8ICAzICsrLQorIHJlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X2Z1enou YyAgIHwgIDMgKystCisgcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rlc3Rfc3Noa2V5LmMgfCAz MCArKysrKysrKysrKysrKy0tLS0tLS0tLQorIHNlcnZlcmxvb3AuYyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDYgKysrKy0KKyBzc2gtcnNhLmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAzICsrLQorIHNzaGNvbm5lY3QyLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDggKysrKysrKworIHNzaGQtc2Vzc2lvbi5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEg KysrKysrKysrKysrKysrKworIDExIGZpbGVzIGNoYW5nZWQsIDk1IGluc2VydGlvbnMoKyksIDIz IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29tcGF0LmMgYi9jb21wYXQuYworaW5kZXgg NGNjN2NhNjFhLi40MzEyNTEwZTUgMTAwNjQ0CistLS0gYS9jb21wYXQuYworKysrIGIvY29tcGF0 LmMKK0BAIC00Miw2ICs0Miw3IEBAIHZvaWQKKyBjb21wYXRfYmFubmVyKHN0cnVjdCBzc2ggKnNz aCwgY29uc3QgY2hhciAqdmVyc2lvbikKKyB7CisgCWludCBpOworKwlpbnQgZm9yYmlkX3NzaF9y c2EgPSAwOworIAlzdGF0aWMgc3RydWN0IHsKKyAJCWNoYXIJKnBhdDsKKyAJCXVpbnQzMl90IGJ1 Z3M7CitAQCAtMTI1LDE2ICsxMjYsMjEgQEAgY29tcGF0X2Jhbm5lcihzdHJ1Y3Qgc3NoICpzc2gs IGNvbnN0IGNoYXIgKnZlcnNpb24pCisgCX07CisgCisgCS8qIHByb2Nlc3MgdGFibGUsIHJldHVy biBmaXJzdCBtYXRjaCAqLworKwlmb3JiaWRfc3NoX3JzYSA9IChzc2gtPmNvbXBhdCAmIFNTSF9S SF9SU0FTSUdTSEEpOworIAlzc2gtPmNvbXBhdCA9IDA7CisgCWZvciAoaSA9IDA7IGNoZWNrW2ld LnBhdDsgaSsrKSB7CisgCQlpZiAobWF0Y2hfcGF0dGVybl9saXN0KHZlcnNpb24sIGNoZWNrW2ld LnBhdCwgMCkgPT0gMSkgeworIAkJCWRlYnVnX2YoIm1hdGNoOiAlcyBwYXQgJXMgY29tcGF0IDB4 JTA4eCIsCisgCQkJICAgIHZlcnNpb24sIGNoZWNrW2ldLnBhdCwgY2hlY2tbaV0uYnVncyk7Cisg CQkJc3NoLT5jb21wYXQgPSBjaGVja1tpXS5idWdzOworKwlpZiAoZm9yYmlkX3NzaF9yc2EpCisr CQlzc2gtPmNvbXBhdCB8PSBTU0hfUkhfUlNBU0lHU0hBOworIAkJCXJldHVybjsKKyAJCX0KKyAJ fQorIAlkZWJ1Z19mKCJubyBtYXRjaDogJXMiLCB2ZXJzaW9uKTsKKysJaWYgKGZvcmJpZF9zc2hf cnNhKQorKwkJc3NoLT5jb21wYXQgfD0gU1NIX1JIX1JTQVNJR1NIQTsKKyB9CisgCisgLyogQWx3 YXlzIHJldHVybnMgcG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5LCBjYWxsZXIgbXVzdCBmcmVl LiAqLworZGlmZiAtLWdpdCBhL2NvbXBhdC5oIGIvY29tcGF0LmgKK2luZGV4IDFhMTkwNjBmYy4u MmU2ZGI1YmY5IDEwMDY0NAorLS0tIGEvY29tcGF0LmgKKysrKyBiL2NvbXBhdC5oCitAQCAtMzAs NyArMzAsNyBAQAorICNkZWZpbmUgU1NIX0JVR19VVEY4VFRZTU9ERQkweDAwMDAwMDAxCisgI2Rl ZmluZSBTU0hfQlVHX1NJR1RZUEUJCTB4MDAwMDAwMDIKKyAjZGVmaW5lIFNTSF9CVUdfU0lHVFlQ RTc0CTB4MDAwMDAwMDQKKy0vKiAjZGVmaW5lIHVudXNlZAkJMHgwMDAwMDAwOCAqLworKyNkZWZp bmUgU1NIX1JIX1JTQVNJR1NIQQkweDAwMDAwMDA4CisgI2RlZmluZSBTU0hfT0xEX1NFU1NJT05J RAkweDAwMDAwMDEwCisgLyogI2RlZmluZSB1bnVzZWQJCTB4MDAwMDAwMjAgKi8KKyAjZGVmaW5l IFNTSF9CVUdfREVCVUcJCTB4MDAwMDAwNDAKK2RpZmYgLS1naXQgYS9tb25pdG9yLmMgYi9tb25p dG9yLmMKK2luZGV4IDMwNTg4MzI3OC4uYmY1YTUxMDViIDEwMDY0NAorLS0tIGEvbW9uaXRvci5j CisrKysgYi9tb25pdG9yLmMKK0BAIC03NTUsMTEgKzc1NSwxOCBAQCBpbnQKKyBtbV9hbnN3ZXJf c2V0Y29tcGF0KHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0cnVjdCBzc2hidWYgKm0pCisg eworIAlpbnQgcjsKKysJdV9pbnQgY2hpbGRfY29tcGF0OworIAorIAlkZWJ1ZzNfZigiZW50ZXJp bmciKTsKKyAKKy0JaWYgKChyID0gc3NoYnVmX2dldF91MzIobSwgJnNzaC0+Y29tcGF0KSkgIT0g MCkKKysJaWYgKChyID0gc3NoYnVmX2dldF91MzIobSwgJmNoaWxkX2NvbXBhdCkpICE9IDApCisg CQlmYXRhbF9mcihyLCAicGFyc2UiKTsKKysKKysJLyogUHJlc2VydmUgU1NIX1JIX1JTQVNJR1NI QSBmbGFnIHNldCBieSBzc2hkLXNlc3Npb24gKi8KKysJaWYgKHNzaC0+Y29tcGF0ICYgU1NIX1JI X1JTQVNJR1NIQSkKKysJCWNoaWxkX2NvbXBhdCB8PSBTU0hfUkhfUlNBU0lHU0hBOworKworKwlz c2gtPmNvbXBhdCA9IGNoaWxkX2NvbXBhdDsKKyAJY29tcGF0X3NldCA9IDE7CisgCisgCXJldHVy biAoMCk7CitAQCAtNzczLDEwICs3ODAsMTIgQEAgbW1fYW5zd2VyX3NpZ24oc3RydWN0IHNzaCAq c3NoLCBpbnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKKyAJc3RydWN0IHNzaGJ1ZiAqc2lnYnVm ID0gTlVMTDsKKyAJdV9jaGFyICpwID0gTlVMTCwgKnNpZ25hdHVyZSA9IE5VTEw7CisgCWNoYXIg KmFsZyA9IE5VTEw7CisrCWNvbnN0IGNoYXIgKmVmZmVjdGl2ZV9hbGcgPSBOVUxMOworIAlzaXpl X3QgZGF0bGVuLCBzaWdsZW47CistCWludCByLCBpc19wcm9vZiA9IDAsIGtleWlkOworLQl1X2lu dCBjb21wYXQ7CisrCWludCByLCBpc19wcm9vZiA9IDA7CisrCWludCBrZXlpZCwgY29tcGF0Owor IAljb25zdCBjaGFyIHByb29mX3JlcVtdID0gImhvc3RrZXlzLXByb3ZlLTAwQG9wZW5zc2guY29t IjsKKysJY29uc3QgY2hhciBzYWZlX3JzYVtdICA9ICJyc2Etc2hhMi0yNTYiOworIAorIAlkZWJ1 ZzNfZigiZW50ZXJpbmciKTsKKyAKK0BAIC04MzgsMTggKzg0NywzMCBAQCBtbV9hbnN3ZXJfc2ln bihzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQorIAl9CisgCisg CWlmICgoa2V5ID0gZ2V0X2hvc3RrZXlfYnlfaW5kZXgoa2V5aWQpKSAhPSBOVUxMKSB7CistCQlp ZiAoKHIgPSBzc2hrZXlfc2lnbihrZXksICZzaWduYXR1cmUsICZzaWdsZW4sIHAsIGRhdGxlbiwg YWxnLAorKwkJaWYgKHNzaC0+Y29tcGF0ICYgU1NIX1JIX1JTQVNJR1NIQSAmJiBzdHJjbXAoYWxn LCAic3NoLXJzYSIpID09IDAKKysJCQkJJiYgKHNzaGtleV90eXBlX3BsYWluKGtleS0+dHlwZSkg PT0gS0VZX1JTQSkpIHsKKysJCQllZmZlY3RpdmVfYWxnID0gc2FmZV9yc2E7CisrCQl9IGVsc2Ug eworKwkJCWVmZmVjdGl2ZV9hbGcgPSBhbGc7CisrCQl9CisrCQlpZiAoKHIgPSBzc2hrZXlfc2ln bihrZXksICZzaWduYXR1cmUsICZzaWdsZW4sIHAsIGRhdGxlbiwgZWZmZWN0aXZlX2FsZywKKyAJ CSAgICBvcHRpb25zLnNrX3Byb3ZpZGVyLCBOVUxMLCBjb21wYXQpKSAhPSAwKQorIAkJCWZhdGFs X2ZyKHIsICJzaWduIik7CisgCX0gZWxzZSBpZiAoKGtleSA9IGdldF9ob3N0a2V5X3B1YmxpY19i eV9pbmRleChrZXlpZCwgc3NoKSkgIT0gTlVMTCAmJgorIAkgICAgYXV0aF9zb2NrID4gMCkgewor KwkJaWYgKHNzaC0+Y29tcGF0ICYgU1NIX1JIX1JTQVNJR1NIQSAmJiBzdHJjbXAoYWxnLCAic3No LXJzYSIpID09IDAKKysJCQkJJiYgKHNzaGtleV90eXBlX3BsYWluKGtleS0+dHlwZSkgPT0gS0VZ X1JTQSkpIHsKKysJCQllZmZlY3RpdmVfYWxnID0gc2FmZV9yc2E7CisrCQl9IGVsc2UgeworKwkJ CWVmZmVjdGl2ZV9hbGcgPSBhbGc7CisrCQl9CisgCQlpZiAoKHIgPSBzc2hfYWdlbnRfc2lnbihh dXRoX3NvY2ssIGtleSwgJnNpZ25hdHVyZSwgJnNpZ2xlbiwKKy0JCSAgICBwLCBkYXRsZW4sIGFs ZywgY29tcGF0KSkgIT0gMCkKKysJCSAgICBwLCBkYXRsZW4sIGVmZmVjdGl2ZV9hbGcsIGNvbXBh dCkpICE9IDApCisgCQkJZmF0YWxfZnIociwgImFnZW50IHNpZ24iKTsKKyAJfSBlbHNlCisgCQlm YXRhbF9mKCJubyBob3N0a2V5IGZyb20gaW5kZXggJWQiLCBrZXlpZCk7CisgCistCWRlYnVnM19m KCIlcyAlcyBzaWduYXR1cmUgbGVuPSV6dSIsIGFsZywKKysJZGVidWczX2YoIiVzIChlZmZlY3Rp dmU6ICVzKSAlcyBzaWduYXR1cmUgbGVuPSV6dSIsIGFsZywgZWZmZWN0aXZlX2FsZywKKyAJICAg IGlzX3Byb29mID8gImhvc3RrZXkgcHJvb2YiIDogIktFWCIsIHNpZ2xlbik7CisgCisgCXNzaGJ1 Zl9yZXNldChtKTsKK2RpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXgu YyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCitpbmRleCAxNmMyZjJkZmYuLmY0 NzAwZGVlYiAxMDA2NDQKKy0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCisr KysgYi9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYworQEAgLTExMCw3ICsxMTAsOCBA QCBkb19rZXhfd2l0aF9rZXkoY2hhciAqa2V4LCBjaGFyICpjaXBoZXIsIGNoYXIgKm1hYywKKyAJ CWtleF9wYXJhbXMucHJvcG9zYWxbUFJPUE9TQUxfTUFDX0FMR1NfQ1RPU10gPSBtYWM7CisgCQlr ZXhfcGFyYW1zLnByb3Bvc2FsW1BST1BPU0FMX01BQ19BTEdTX1NUT0NdID0gbWFjOworIAl9Cist CWtleW5hbWUgPSBzdHJkdXAoc3Noa2V5X3NzaF9uYW1lKHByaXZhdGUpKTsKKysJa2V5bmFtZSA9 IChzdHJjbXAoc3Noa2V5X3NzaF9uYW1lKHByaXZhdGUpLCAic3NoLXJzYSIpKSA/CisrCQlzdHJk dXAoc3Noa2V5X3NzaF9uYW1lKHByaXZhdGUpKSA6IHN0cmR1cCgicnNhLXNoYTItMjU2Iik7Cisg CUFTU0VSVF9QVFJfTkUoa2V5bmFtZSwgTlVMTCk7CisgCWtleF9wYXJhbXMucHJvcG9zYWxbUFJP UE9TQUxfU0VSVkVSX0hPU1RfS0VZX0FMR1NdID0ga2V5bmFtZTsKKyAJQVNTRVJUX0lOVF9FUShz c2hfaW5pdCgmY2xpZW50LCAwLCAma2V4X3BhcmFtcyksIDApOworZGlmZiAtLWdpdCBhL3JlZ3Jl c3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X2ZpbGUuYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtl eS90ZXN0X2ZpbGUuYworaW5kZXggZTQxMmI3NWQ4Li41YjA2YmM5MDUgMTAwNjQ0CistLS0gYS9y ZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9maWxlLmMKKysrKyBiL3JlZ3Jlc3MvdW5pdHRl c3RzL3NzaGtleS90ZXN0X2ZpbGUuYworQEAgLTEwNiw2ICsxMDYsNyBAQCBzc2hrZXlfZmlsZV90 ZXN0cyh2b2lkKQorIAlzc2hrZXlfZnJlZShrMik7CisgCVRFU1RfRE9ORSgpOworIAorKwkvKiBT a2lwIHRoaXMgdGVzdCwgU0hBMSBzaWduYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkCisgCVRFU1Rf U1RBUlQoImxvYWQgUlNBIGNlcnQgd2l0aCBTSEExIHNpZ25hdHVyZSIpOworIAlBU1NFUlRfSU5U X0VRKHNzaGtleV9sb2FkX2NlcnQodGVzdF9kYXRhX2ZpbGUoInJzYV8xX3NoYTEiKSwgJmsyKSwg MCk7CisgCUFTU0VSVF9QVFJfTkUoazIsIE5VTEwpOworQEAgLTExMyw3ICsxMTQsNyBAQCBzc2hr ZXlfZmlsZV90ZXN0cyh2b2lkKQorIAlBU1NFUlRfSU5UX0VRKHNzaGtleV9lcXVhbF9wdWJsaWMo azEsIGsyKSwgMSk7CisgCUFTU0VSVF9TVFJJTkdfRVEoazItPmNlcnQtPnNpZ25hdHVyZV90eXBl LCAic3NoLXJzYSIpOworIAlzc2hrZXlfZnJlZShrMik7CistCVRFU1RfRE9ORSgpOworKwlURVNU X0RPTkUoKTsgKi8KKyAKKyAJVEVTVF9TVEFSVCgibG9hZCBSU0EgY2VydCB3aXRoIFNIQTUxMiBz aWduYXR1cmUiKTsKKyAJQVNTRVJUX0lOVF9FUShzc2hrZXlfbG9hZF9jZXJ0KHRlc3RfZGF0YV9m aWxlKCJyc2FfMV9zaGE1MTIiKSwgJmsyKSwgMCk7CitkaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0 dGVzdHMvc3Noa2V5L3Rlc3RfZnV6ei5jIGIvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rlc3Rf ZnV6ei5jCitpbmRleCBkMGY0N2Q3Y2YuLmJhNGQ1MDZkNSAxMDA2NDQKKy0tLSBhL3JlZ3Jlc3Mv dW5pdHRlc3RzL3NzaGtleS90ZXN0X2Z1enouYworKysrIGIvcmVncmVzcy91bml0dGVzdHMvc3No a2V5L3Rlc3RfZnV6ei5jCitAQCAtMjczLDEzICsyNzMsMTQgQEAgc3Noa2V5X2Z1enpfdGVzdHMo dm9pZCkKKyAJVEVTVF9ET05FKCk7CisgCisgI2lmZGVmIFdJVEhfT1BFTlNTTAorKwkvKiBTa2lw IHRoaXMgdGVzdCwgU0hBMSBzaWduYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkCisgCVRFU1RfU1RB UlQoImZ1enogUlNBIHNpZyIpOworIAlidWYgPSBsb2FkX2ZpbGUoInJzYV8xIik7CisgCUFTU0VS VF9JTlRfRVEoc3Noa2V5X3BhcnNlX3ByaXZhdGVfZmlsZWJsb2IoYnVmLCAiIiwgJmsxLCBOVUxM KSwgMCk7CisgCXNzaGJ1Zl9mcmVlKGJ1Zik7CisgCXNpZ19mdXp6KGsxLCAic3NoLXJzYSIpOwor IAlzc2hrZXlfZnJlZShrMSk7CistCVRFU1RfRE9ORSgpOworKwlURVNUX0RPTkUoKTsqLworIAor IAlURVNUX1NUQVJUKCJmdXp6IFJTQSBTSEEyNTYgc2lnIik7CisgCWJ1ZiA9IGxvYWRfZmlsZSgi cnNhXzEiKTsKK2RpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hr ZXkuYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X3NzaGtleS5jCitpbmRleCAxNzAx Yzg3YzUuLjM2ZjZmZDMzNSAxMDA2NDQKKy0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90 ZXN0X3NzaGtleS5jCisrKysgYi9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXku YworQEAgLTU5LDYgKzU5LDkgQEAgYnVpbGRfY2VydChzdHJ1Y3Qgc3NoYnVmICpiLCBzdHJ1Y3Qg c3Noa2V5ICprLCBjb25zdCBjaGFyICp0eXBlLAorIAl1X2NoYXIgKnNpZ2Jsb2I7CisgCXNpemVf dCBzaWdsZW47CisgCisrCS8qIHNzaC1yc2EgaW1wbGllcyBTSEExLCBmb3JiaWRkZW4gaW4gREVG QVVMVCBjcCAqLworKwlpbnQgZXhwZWN0ZWQgPSAoc2lnX2FsZyA9PSBOVUxMIHx8IHN0cmNtcChz aWdfYWxnLCAic3NoLXJzYSIpID09IDApID8gU1NIX0VSUl9MSUJDUllQVE9fRVJST1IgOiAwOwor KworIAljYV9idWYgPSBzc2hidWZfbmV3KCk7CisgCUFTU0VSVF9QVFJfTkUoY2FfYnVmLCBOVUxM KTsKKyAJQVNTRVJUX0lOVF9FUShzc2hrZXlfcHV0YihjYV9rZXksIGNhX2J1ZiksIDApOworQEAg LTEwMCw4ICsxMDMsOSBAQCBidWlsZF9jZXJ0KHN0cnVjdCBzc2hidWYgKmIsIHN0cnVjdCBzc2hr ZXkgKmssIGNvbnN0IGNoYXIgKnR5cGUsCisgCUFTU0VSVF9JTlRfRVEoc3NoYnVmX3B1dF9zdHJp bmcoYiwgTlVMTCwgMCksIDApOyAvKiByZXNlcnZlZCAqLworIAlBU1NFUlRfSU5UX0VRKHNzaGJ1 Zl9wdXRfc3RyaW5nYihiLCBjYV9idWYpLCAwKTsgLyogc2lnbmF0dXJlIGtleSAqLworIAlBU1NF UlRfSU5UX0VRKHNzaGtleV9zaWduKHNpZ25fa2V5LCAmc2lnYmxvYiwgJnNpZ2xlbiwKKy0JICAg IHNzaGJ1Zl9wdHIoYiksIHNzaGJ1Zl9sZW4oYiksIHNpZ19hbGcsIE5VTEwsIE5VTEwsIDApLCAw KTsKKy0JQVNTRVJUX0lOVF9FUShzc2hidWZfcHV0X3N0cmluZyhiLCBzaWdibG9iLCBzaWdsZW4p LCAwKTsgLyogc2lnbmF0dXJlICovCisrCSAgICBzc2hidWZfcHRyKGIpLCBzc2hidWZfbGVuKGIp LCBzaWdfYWxnLCBOVUxMLCBOVUxMLCAwKSwgZXhwZWN0ZWQpOworKwlpZiAoZXhwZWN0ZWQgPT0g MCkKKysJCUFTU0VSVF9JTlRfRVEoc3NoYnVmX3B1dF9zdHJpbmcoYiwgc2lnYmxvYiwgc2lnbGVu KSwgMCk7IC8qIHNpZ25hdHVyZSAqLworIAorIAlmcmVlKHNpZ2Jsb2IpOworIAlzc2hidWZfZnJl ZShjYV9idWYpOworQEAgLTExOCwxNiArMTIyLDIwIEBAIHNpZ25hdHVyZV90ZXN0KHN0cnVjdCBz c2hrZXkgKmssIHN0cnVjdCBzc2hrZXkgKmJhZCwgY29uc3QgY2hhciAqc2lnX2FsZywKKyB7Cisg CXNpemVfdCBsZW47CisgCXVfY2hhciAqc2lnOworKwkvKiBzc2gtcnNhIGltcGxpZXMgU0hBMSwg Zm9yYmlkZGVuIGluIERFRkFVTFQgY3J5cHRvIHBvbGljaWVzICovCisrCWludCBleHBlY3RlZCA9 IChzaWdfYWxnICYmIHN0cmNtcChzaWdfYWxnLCAic3NoLXJzYSIpID09IDApID8gc3Noa2V5X3Np Z24oaywgJnNpZywgJmxlbiwgZCwgbCwgc2lnX2FsZywgTlVMTCwgTlVMTCwgMCkgOiAwOworIAor IAlBU1NFUlRfSU5UX0VRKHNzaGtleV9zaWduKGssICZzaWcsICZsZW4sIGQsIGwsIHNpZ19hbGcs CistCSAgICBOVUxMLCBOVUxMLCAwKSwgMCk7CistCUFTU0VSVF9TSVpFX1RfR1QobGVuLCA4KTsK Ky0JQVNTRVJUX1BUUl9ORShzaWcsIE5VTEwpOworLQlBU1NFUlRfSU5UX0VRKHNzaGtleV92ZXJp Znkoaywgc2lnLCBsZW4sIGQsIGwsIE5VTEwsIDAsIE5VTEwpLCAwKTsKKy0JQVNTRVJUX0lOVF9O RShzc2hrZXlfdmVyaWZ5KGJhZCwgc2lnLCBsZW4sIGQsIGwsIE5VTEwsIDAsIE5VTEwpLCAwKTsK Ky0JLyogRnV6eiB0ZXN0IGlzIG1vcmUgY29tcHJlaGVuc2l2ZSwgdGhpcyBpcyBqdXN0IGEgc21v a2UgdGVzdCAqLworLQlzaWdbbGVuIC0gNV0gXj0gMHgxMDsKKy0JQVNTRVJUX0lOVF9ORShzc2hr ZXlfdmVyaWZ5KGssIHNpZywgbGVuLCBkLCBsLCBOVUxMLCAwLCBOVUxMKSwgMCk7CisrCSAgICBO VUxMLCBOVUxMLCAwKSwgZXhwZWN0ZWQpOworKwlpZiAoZXhwZWN0ZWQgPT0gMCkgeworKwkJQVNT RVJUX1NJWkVfVF9HVChsZW4sIDgpOworKwkJQVNTRVJUX1BUUl9ORShzaWcsIE5VTEwpOworKwkJ QVNTRVJUX0lOVF9FUShzc2hrZXlfdmVyaWZ5KGssIHNpZywgbGVuLCBkLCBsLCBOVUxMLCAwLCBO VUxMKSwgMCk7CisrCQlBU1NFUlRfSU5UX05FKHNzaGtleV92ZXJpZnkoYmFkLCBzaWcsIGxlbiwg ZCwgbCwgTlVMTCwgMCwgTlVMTCksIDApOworKwkJLyogRnV6eiB0ZXN0IGlzIG1vcmUgY29tcHJl aGVuc2l2ZSwgdGhpcyBpcyBqdXN0IGEgc21va2UgdGVzdCAqLworKwkJc2lnW2xlbiAtIDVdIF49 IDB4MTA7CisrCQlBU1NFUlRfSU5UX05FKHNzaGtleV92ZXJpZnkoaywgc2lnLCBsZW4sIGQsIGws IE5VTEwsIDAsIE5VTEwpLCAwKTsKKysJfQorIAlmcmVlKHNpZyk7CisgfQorIAorQEAgLTU1Miw3 ICs1NjAsNyBAQCBzc2hrZXlfdGVzdHModm9pZCkKKyAJQVNTRVJUX0lOVF9FUShzc2hrZXlfbG9h ZF9wdWJsaWModGVzdF9kYXRhX2ZpbGUoInJzYV8xLnB1YiIpLCAmazIsCisgCSAgICBOVUxMKSwg MCk7CisgCWszID0gZ2V0X3ByaXZhdGUoInJzYV8xIik7CistCWJ1aWxkX2NlcnQoYiwgazIsICJz c2gtcnNhLWNlcnQtdjAxQG9wZW5zc2guY29tIiwgazMsIGsxLCBOVUxMKTsKKysJYnVpbGRfY2Vy dChiLCBrMiwgInNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20iLCBrMywgazEsICJyc2Etc2hh Mi0yNTYiKTsKKyAJQVNTRVJUX0lOVF9FUShzc2hrZXlfZnJvbV9ibG9iKHNzaGJ1Zl9wdHIoYiks IHNzaGJ1Zl9sZW4oYiksICZrNCksCisgCSAgICBTU0hfRVJSX0tFWV9DRVJUX0lOVkFMSURfU0lH Tl9LRVkpOworIAlBU1NFUlRfUFRSX0VRKGs0LCBOVUxMKTsKK2RpZmYgLS1naXQgYS9zZXJ2ZXJs b29wLmMgYi9zZXJ2ZXJsb29wLmMKK2luZGV4IDhlNjM0ODBlYy4uMTA4N2E2YzdkIDEwMDY0NAor LS0tIGEvc2VydmVybG9vcC5jCisrKysgYi9zZXJ2ZXJsb29wLmMKK0BAIC03Niw2ICs3Niw3IEBA CisgI2luY2x1ZGUgImF1dGgtb3B0aW9ucy5oIgorICNpbmNsdWRlICJzZXJ2ZXJsb29wLmgiCisg I2luY2x1ZGUgInNzaGVyci5oIgorKyNpbmNsdWRlICJjb21wYXQuaCIKKyAKKyBleHRlcm4gU2Vy dmVyT3B0aW9ucyBvcHRpb25zOworIAorQEAgLTcyNCw3ICs3MjUsMTAgQEAgc2VydmVyX2lucHV0 X2hvc3RrZXlzX3Byb3ZlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaGJ1ZiAqKnJlc3BwKQor IAkJCWVsc2UgaWYgKHNzaC0+a2V4LT5mbGFncyAmIEtFWF9SU0FfU0hBMl8yNTZfU1VQUE9SVEVE KQorIAkJCQlzaWdhbGcgPSAicnNhLXNoYTItMjU2IjsKKyAJCX0KKy0KKysJCWlmIChzc2gtPmNv bXBhdCAmIFNTSF9SSF9SU0FTSUdTSEEgJiYgc2lnYWxnID09IE5VTEwpIHsKKysJCQlzaWdhbGcg PSAicnNhLXNoYTItNTEyIjsKKysJCQlkZWJ1ZzNfZigiU0hBMSBzaWduYXR1cmUgaXMgbm90IHN1 cHBvcnRlZCwgZmFsbGluZyBiYWNrIHRvICVzIiwgc2lnYWxnKTsKKysJCX0KKyAJCWRlYnVnM19m KCJzaWduICVzIGtleSAoaW5kZXggJWQpIHVzaW5nIHNpZ2FsZyAlcyIsCisgCQkgICAgc3Noa2V5 X3R5cGUoa2V5KSwgbmR4LCBzaWdhbGcgPT0gTlVMTCA/ICJkZWZhdWx0IiA6IHNpZ2FsZyk7Cisg CQlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoc2lnYnVmLAorZGlmZiAtLWdpdCBhL3NzaC1y c2EuYyBiL3NzaC1yc2EuYworaW5kZXggNWFmMzliYjM5Li44ODIzMmM2ZWQgMTAwNjQ0CistLS0g YS9zc2gtcnNhLmMKKysrKyBiL3NzaC1yc2EuYworQEAgLTUzMyw3ICs1MzMsOCBAQCBzc2hfcnNh X3ZlcmlmeShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCQkJcmV0ID0gU1NIX0VSUl9JTlZB TElEX0FSR1VNRU5UOworIAkJCWdvdG8gb3V0OworIAkJfQorLQkJaWYgKGhhc2hfYWxnICE9IHdh bnRfYWxnKSB7CisrCQlpZiAoaGFzaF9hbGcgIT0gd2FudF9hbGcgJiYgd2FudF9hbGcgIT0gU1NI X0RJR0VTVF9TSEExKSB7CisrCQkJZGVidWdfZigiVW5leHBlY3RlZCBkaWdlc3QgYWxnb3JpdGht OiBnb3QgJWQsIHdhbnRlZCAlZCIsIGhhc2hfYWxnLCB3YW50X2FsZyk7CisgCQkJcmV0ID0gU1NI X0VSUl9TSUdOQVRVUkVfSU5WQUxJRDsKKyAJCQlnb3RvIG91dDsKKyAJCX0KK2RpZmYgLS1naXQg YS9zc2hjb25uZWN0Mi5jIGIvc3NoY29ubmVjdDIuYworaW5kZXggMzFmNTFiZTYyLi5lZWUxZjk3 OTQgMTAwNjQ0CistLS0gYS9zc2hjb25uZWN0Mi5jCisrKysgYi9zc2hjb25uZWN0Mi5jCitAQCAt MTQ0MCw2ICsxNDQwLDE0IEBAIGlkZW50aXR5X3NpZ24oc3RydWN0IGlkZW50aXR5ICppZCwgdV9j aGFyICoqc2lncCwgc2l6ZV90ICpsZW5wLAorIAkJCXJldHJpZWQgPSAxOworIAkJCWdvdG8gcmV0 cnlfcGluOworIAkJfQorKwkJaWYgKChyID09IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SKSAmJiBz dHJjbXAoInNzaC1yc2EiLCBhbGcpKSB7CisrCQkJY2hhciByc2Ffc2FmZV9hbGdbXSA9ICJyc2Et c2hhMi01MTIiOworKwkJCWRlYnVnM19mKCJ0cnlpbmcgdG8gZmFsbGJhY2sgdG8gYWxnb3JpdGht ICVzIiwgcnNhX3NhZmVfYWxnKTsKKysKKysJCQlpZiAoKHIgPSBzc2hrZXlfc2lnbihzaWduX2tl eSwgc2lncCwgbGVucCwgZGF0YSwgZGF0YWxlbiwKKysJCQlyc2Ffc2FmZV9hbGcsIG9wdGlvbnMu c2tfcHJvdmlkZXIsIHBpbiwgY29tcGF0KSkgIT0gMCkKKysJCQkJZGVidWdfZnIociwgInNzaGtl eV9zaWduIC0gUlNBIGZhbGxiYWNrIik7CisrCQl9CisgCQlnb3RvIG91dDsKKyAJfQorIAorZGlm ZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKK2luZGV4IGQ4OTcyZmJk NS4uNzA2NGFmZDdjIDEwMDY0NAorLS0tIGEvc3NoZC1zZXNzaW9uLmMKKysrKyBiL3NzaGQtc2Vz c2lvbi5jCitAQCAtMTI2MCw2ICsxMjYwLDI3IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCisg CisgCWNoZWNrX2lwX29wdGlvbnMoc3NoKTsKKyAKKysJeworKwkJc3RydWN0IHNzaGtleSAqcnNh a2V5ID0gTlVMTDsKKysJCXJzYWtleSA9IGdldF9ob3N0a2V5X3ByaXZhdGVfYnlfdHlwZShLRVlf UlNBLCAwLCBzc2gpOworKwkJaWYgKHJzYWtleSA9PSBOVUxMKQorKwkJCXJzYWtleSA9IGdldF9o b3N0a2V5X3ByaXZhdGVfYnlfdHlwZShLRVlfUlNBX0NFUlQsIDAsIHNzaCk7CisrCisrCQlpZiAo cnNha2V5ICE9IE5VTEwpIHsKKysJCSAgICBzaXplX3Qgc2lnbl9zaXplID0gMDsKKysJCSAgICB1 X2NoYXIgKnRtcCA9IE5VTEw7CisrCQkgICAgdV9jaGFyIGRhdGFbXSA9ICJUZXN0IFNIQTEgdmVj dG9yIjsKKysJCSAgICBpbnQgcmVzOworKworKwkJICAgIHJlcyA9IHNzaGtleV9zaWduKHJzYWtl eSwgJnRtcCwgJnNpZ25fc2l6ZSwgZGF0YSwgc2l6ZW9mKGRhdGEpLCBOVUxMLCBOVUxMLCBOVUxM LCAwKTsKKysJCSAgICBmcmVlKHRtcCk7CisrCQkgICAgaWYgKHJlcyA9PSBTU0hfRVJSX0xJQkNS WVBUT19FUlJPUikgeworKwkJCXZlcmJvc2VfZigiU0hBMSBpbiBzaWduYXR1cmVzIGlzIGRpc2Fi bGVkIGZvciBSU0Ega2V5cyIpOworKwkJICAgIAlzc2gtPmNvbXBhdCB8PSBTU0hfUkhfUlNBU0lH U0hBOworKwkJICAgIH0KKysJCX0KKysJfQorKworIAkvKiBQcmVwYXJlIHRoZSBjaGFubmVscyBs YXllciAqLworIAljaGFubmVsX2luaXRfY2hhbm5lbHMoc3NoKTsKKyAJY2hhbm5lbF9zZXRfYWYo c3NoLCBvcHRpb25zLmFkZHJlc3NfZmFtaWx5KTsKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQg YS8wMDQxLW9wZW5zc2gtOS4wcDEtZXZwLWZpcHMta2V4LnBhdGNoIGIvMDA0MS1vcGVuc3NoLTku MHAxLWV2cC1maXBzLWtleC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRl ZjhlOC4uMDAwMDAwMAotLS0gYS8wMDQxLW9wZW5zc2gtOS4wcDEtZXZwLWZpcHMta2V4LnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsNjE2ICswLDAgQEAKLUZyb20gMWMwZDNiNmU5ODY4ZWYzMWI5 N2JlMTY3OTM4OWUzZGIyNjE2ZWNjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERt aXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIw MjUgMTM6NDM6MjkgKzAyMDAKLVN1YmplY3Q6IFtQQVRDSCA0MS81M10gb3BlbnNzaC05LjBwMS1l dnAtZmlwcy1rZXgKLQotLS0tCi0gZGguYyAgICAgIHwgIDk4ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tCi0ga2V4LmMgICAgIHwgMTM5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIGtleC5oICAgICB8ICAgNiArKysK LSBrZXhkaC5jICAgfCAgNTIgKysrKysrKysrKysrKysrKysrLS0KLSBrZXhlY2RoLmMgfCAxMjkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KLSA1IGZp bGVzIGNoYW5nZWQsIDM4MiBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKLQotZGlmZiAt LWdpdCBhL2RoLmMgYi9kaC5jCi1pbmRleCA4YzlhMjlmYTcuLmVhMGEwYjA5MyAxMDA2NDQKLS0t LSBhL2RoLmMKLSsrKyBiL2RoLmMKLUBAIC0zNyw2ICszNyw5IEBACi0gI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jb3Jl X25hbWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcGFyYW1fYnVpbGQuaD4KLSAKLSAjaW5jbHVk ZSAiZGguaCIKLSAjaW5jbHVkZSAicGF0aG5hbWVzLmgiCi1AQCAtMjkwLDEwICsyOTMsMTUgQEAg ZGhfcHViX2lzX3ZhbGlkKGNvbnN0IERIICpkaCwgY29uc3QgQklHTlVNICpkaF9wdWIpCi0gaW50 Ci0gZGhfZ2VuX2tleShESCAqZGgsIGludCBuZWVkKQotIHsKLS0JaW50IHBiaXRzOwotLQljb25z dCBCSUdOVU0gKmRoX3AsICpwdWJfa2V5OwotKwljb25zdCBCSUdOVU0gKmRoX3AsICpkaF9nOwot KwlCSUdOVU0gKnB1Yl9rZXkgPSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMOwotKwlFVlBfUEtFWSAq cGtleSA9IE5VTEw7Ci0rICAJRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOwotKyAgCU9TU0xfUEFS QU1fQkxEICpwYXJhbV9ibGQgPSBOVUxMOwotKyAgCU9TU0xfUEFSQU0gKnBhcmFtcyA9IE5VTEw7 Ci0rCWludCBwYml0cywgciA9IDA7Ci0gCi0tCURIX2dldDBfcHFnKGRoLCAmZGhfcCwgTlVMTCwg TlVMTCk7Ci0rCURIX2dldDBfcHFnKGRoLCAmZGhfcCwgTlVMTCwgJmRoX2cpOwotIAotIAlpZiAo bmVlZCA8IDAgfHwgZGhfcCA9PSBOVUxMIHx8Ci0gCSAgICAocGJpdHMgPSBCTl9udW1fYml0cyhk aF9wKSkgPD0gMCB8fAotQEAgLTMwMSwxOSArMzA5LDg1IEBAIGRoX2dlbl9rZXkoREggKmRoLCBp bnQgbmVlZCkKLSAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0gCWlmIChuZWVk IDwgMjU2KQotIAkJbmVlZCA9IDI1NjsKLSsKLSsJaWYgKChwYXJhbV9ibGQgPSBPU1NMX1BBUkFN X0JMRF9uZXcoKSkgPT0gTlVMTCB8fAotKwkgICAgKGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJv bV9uYW1lKE5VTEwsICJESCIsIE5VTEwpKSA9PSBOVUxMKSB7Ci0rCQlPU1NMX1BBUkFNX0JMRF9m cmVlKHBhcmFtX2JsZCk7Ci0rCQlyZXR1cm4gU1NIX0VSUl9BTExPQ19GQUlMOwotKwl9Ci0rCi0r CWlmIChPU1NMX1BBUkFNX0JMRF9wdXNoX0JOKHBhcmFtX2JsZCwKLSsJICAgICAgICBPU1NMX1BL RVlfUEFSQU1fRkZDX1AsIGRoX3ApICE9IDEgfHwKLSsJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hf Qk4ocGFyYW1fYmxkLAotKwkgICAgICAgIE9TU0xfUEtFWV9QQVJBTV9GRkNfRywgZGhfZykgIT0g MSkgewotKwkJZXJyb3JfZigiQ291bGQgbm90IHNldCBwLHEsZyBwYXJhbWV0ZXJzIik7Ci0rCQly ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0rCQlnb3RvIG91dDsKLSsJfQotIAkvKgotIAkg KiBQb2xsYXJkIFJobywgQmlnIHN0ZXAvTGl0dGxlIFN0ZXAgYXR0YWNrcyBhcmUgTyhzcXJ0KG4p KSwKLSAJICogc28gZG91YmxlIHJlcXVlc3RlZCBuZWVkIGhlcmUuCi0gCSAqLwotLQlpZiAoIURI X3NldF9sZW5ndGgoZGgsIE1JTklNVU0obmVlZCAqIDIsIHBiaXRzIC0gMSkpKQotLQkJcmV0dXJu IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotLQotLQlpZiAoREhfZ2VuZXJhdGVfa2V5KGRoKSA9 PSAwKQotLQkJcmV0dXJuIFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotLQlESF9nZXQwX2tleShk aCwgJnB1Yl9rZXksIE5VTEwpOwotLQlpZiAoIWRoX3B1Yl9pc192YWxpZChkaCwgcHViX2tleSkp Ci0tCQlyZXR1cm4gU1NIX0VSUl9JTlZBTElEX0ZPUk1BVDsKLS0JcmV0dXJuIDA7Ci0rCWlmIChP U1NMX1BBUkFNX0JMRF9wdXNoX2ludChwYXJhbV9ibGQsCi0rCSAgICAgICAgT1NTTF9QS0VZX1BB UkFNX0RIX1BSSVZfTEVOLAotKwkJTUlOSU1VTShuZWVkICogMiwgcGJpdHMgLSAxKSkgIT0gMSB8 fAotKwkgICAgKHBhcmFtcyA9IE9TU0xfUEFSQU1fQkxEX3RvX3BhcmFtKHBhcmFtX2JsZCkpID09 IE5VTEwpIHsKLSsJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsJCWdvdG8gb3V0Owot Kwl9Ci0rCWlmIChFVlBfUEtFWV9mcm9tZGF0YV9pbml0KGN0eCkgIT0gMSkgewotKwkJciA9IFNT SF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsJaWYgKEVWUF9QS0VZ X2Zyb21kYXRhKGN0eCwgJnBrZXksCi0rCSAgICAgICAgRVZQX1BLRVlfS0VZX1BBUkFNRVRFUlMs IHBhcmFtcykgIT0gMSkgewotKwkJZXJyb3JfZigiRmFpbGVkIGtleSBnZW5lcmF0aW9uIik7Ci0r CQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwkv KiByZXVzZSBjb250ZXh0IGZvciBrZXkgZ2VuZXJhdGlvbiAqLwotKwlFVlBfUEtFWV9DVFhfZnJl ZShjdHgpOwotKwljdHggPSBOVUxMOwotKwotKwlpZiAoKGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdf ZnJvbV9wa2V5KE5VTEwsIHBrZXksIE5VTEwpKSA9PSBOVUxMIHx8Ci0rCSAgICBFVlBfUEtFWV9r ZXlnZW5faW5pdChjdHgpICE9IDEpIHsKLSsJCWVycm9yX2YoIkNvdWxkIG5vdCBjcmVhdGUgb3Ig aW5pdCBjb250ZXh0Iik7Ci0rCQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0rCQlnb3Rv IG91dDsKLSsJfQotKwlpZiAoRVZQX1BLRVlfZ2VuZXJhdGUoY3R4LCAmcGtleSkgIT0gMSkgewot KwkJZXJyb3JfZigiQ291bGQgbm90IGdlbmVyYXRlIGtleXMiKTsKLSsJCXIgPSBTU0hfRVJSX0xJ QkNSWVBUT19FUlJPUjsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCWlmIChFVlBfUEtFWV9wdWJsaWNf Y2hlY2soY3R4KSAhPSAxKSB7Ci0rCQllcnJvcl9mKCJUaGUgcHVibGljIGtleSBpcyBpbmNvcnJl Y3QiKTsKLSsJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsJCWdvdG8gb3V0OwotKwl9 Ci0rCi0rCWlmIChFVlBfUEtFWV9nZXRfYm5fcGFyYW0ocGtleSwgT1NTTF9QS0VZX1BBUkFNX1BV Ql9LRVksCi0rCSAgICAmcHViX2tleSkgIT0gMSB8fAotKwkgICAgRVZQX1BLRVlfZ2V0X2JuX3Bh cmFtKHBrZXksIE9TU0xfUEtFWV9QQVJBTV9QUklWX0tFWSwKLSsJICAgICZwcml2X2tleSkgIT0g MSB8fAotKwkgICAgREhfc2V0MF9rZXkoZGgsIHB1Yl9rZXksIHByaXZfa2V5KSAhPSAxKSB7Ci0r CQllcnJvcl9mKCJDb3VsZCBub3Qgc2V0IHB1Yi9wcml2IGtleXMgdG8gREggc3RydWN0Iik7Ci0r CQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwkv KiB0cmFuc2ZlcnJlZCAqLwotKwlwdWJfa2V5ID0gTlVMTDsKLSsJcHJpdl9rZXkgPSBOVUxMOwot K291dDoKLSsJT1NTTF9QQVJBTV9mcmVlKHBhcmFtcyk7Ci0rCU9TU0xfUEFSQU1fQkxEX2ZyZWUo cGFyYW1fYmxkKTsKLSsJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKLSsJRVZQX1BLRVlfZnJlZShw a2V5KTsKLSsJQk5fY2xlYXJfZnJlZShwdWJfa2V5KTsKLSsJQk5fY2xlYXJfZnJlZShwcml2X2tl eSk7Ci0rCXJldHVybiByOwotIH0KLSAKLSBESCAqCi1kaWZmIC0tZ2l0IGEva2V4LmMgYi9rZXgu YwotaW5kZXggZGEyYTUzN2NlLi41NmM4MDM5NWMgMTAwNjQ0Ci0tLS0gYS9rZXguYwotKysrIGIv a2V4LmMKLUBAIC0xNjEzLDMgKzE2MTMsMTQyIEBAIGtleF9leGNoYW5nZV9pZGVudGlmaWNhdGlv bihzdHJ1Y3Qgc3NoICpzc2gsIGludCB0aW1lb3V0X21zLAotIAlyZXR1cm4gcjsKLSB9Ci0gCi0r I2lmZGVmIFdJVEhfT1BFTlNTTAotKy8qIAotKyAqIENyZWF0ZXMgYW4gRVZQX1BLRVkgZnJvbSB0 aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQga2V5cy4KLSsgKiBUaGUgcHJpdmF0ZSBrZXkgY2FuIGJl IG9taXR0ZWQuCi0rICovCi0rRVZQX1BLRVkgKgotK3NzaGtleV9jcmVhdGVfZXZwKE9TU0xfUEFS QU1fQkxEICpwYXJhbV9ibGQsIEVWUF9QS0VZX0NUWCAqY3R4KQotK3sKLSsgIAlFVlBfUEtFWSAq cmV0ID0gTlVMTDsKLSsgIAlPU1NMX1BBUkFNICpwYXJhbXMgPSBOVUxMOwotKyAgCWlmIChwYXJh bV9ibGQgPT0gTlVMTCB8fCBjdHggPT0gTlVMTCkgewotKyAgCQlkZWJ1ZzJfZigicGFyYW1fYmxk IG9yIGN0eCBpcyBOVUxMIik7Ci0rICAJCXJldHVybiBOVUxMOwotKyAgCX0KLSsgIAlpZiAoKHBh cmFtcyA9IE9TU0xfUEFSQU1fQkxEX3RvX3BhcmFtKHBhcmFtX2JsZCkpID09IE5VTEwpIHsKLSsg IAkJZGVidWcyX2YoIkNvdWxkIG5vdCBidWlsZCBwYXJhbSBsaXN0Iik7Ci0rICAJCXJldHVybiBO VUxMOwotKyAgCX0KLSsgIAlpZiAoRVZQX1BLRVlfZnJvbWRhdGFfaW5pdChjdHgpICE9IDEgfHwK LSsgIAkgICAgRVZQX1BLRVlfZnJvbWRhdGEoY3R4LCAmcmV0LCBFVlBfUEtFWV9LRVlQQUlSLCBw YXJhbXMpICE9IDEpIHsKLSsgIAkJZGVidWcyX2YoIkVWUF9QS0VZX2Zyb21kYXRhIGZhaWxlZCIp OwotKyAgCQlPU1NMX1BBUkFNX2ZyZWUocGFyYW1zKTsKLSsgIAkJcmV0dXJuIE5VTEw7Ci0rICAJ fQotKyAgCXJldHVybiByZXQ7Ci0rfQotKwotK2ludAotK2tleF9jcmVhdGVfZXZwX2VjKEVDX0tF WSAqaywgaW50IGVjZHNhX25pZCwgRVZQX1BLRVkgKipwa2V5KQotK3sKLSsJT1NTTF9QQVJBTV9C TEQgKnBhcmFtX2JsZCA9IE5VTEw7Ci0rCUVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKLSsgIAlC Tl9DVFggKmJuX2N0eCA9IE5VTEw7Ci0rICAJdWludDhfdCAqcHViX3NlciA9IE5VTEw7Ci0rICAJ Y29uc3QgY2hhciAqZ3JvdXBfbmFtZTsKLSsgIAljb25zdCBFQ19QT0lOVCAqcHViID0gTlVMTDsK LSsgIAljb25zdCBCSUdOVU0gKnByaXYgPSBOVUxMOwotKyAgCWludCByZXQgPSAwOwotKwotKwlp ZiAoayA9PSBOVUxMKQotKyAgICAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0r ICAJaWYgKChjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiRUMiLCBOVUxM KSkgPT0gTlVMTCB8fAotKyAgICAgIAkgICAgKHBhcmFtX2JsZCA9IE9TU0xfUEFSQU1fQkxEX25l dygpKSA9PSBOVUxMIHx8Ci0rICAgICAgCSAgICAoYm5fY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBO VUxMKSB7Ci0rICAgIAkJcmV0ID0gU1NIX0VSUl9BTExPQ19GQUlMOwotKyAgICAJCWdvdG8gb3V0 OwotKyAgCX0KLSsKLSsJaWYgKChncm91cF9uYW1lID0gT1NTTF9FQ19jdXJ2ZV9uaWQybmFtZShl Y2RzYV9uaWQpKSA9PSBOVUxMIHx8Ci0rICAgICAJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hfdXRm OF9zdHJpbmcocGFyYW1fYmxkLAotKyAgICAgICAgICAgICAgICBPU1NMX1BLRVlfUEFSQU1fR1JP VVBfTkFNRSwKLSsgICAgICAgICAgICAgICAgZ3JvdXBfbmFtZSwKLSsgICAgICAgICAgICAgICAg c3RybGVuKGdyb3VwX25hbWUpKSAhPSAxKSB7Ci0rICAgIAkJcmV0ID0gU1NIX0VSUl9MSUJDUllQ VE9fRVJST1I7Ci0rICAgIAkJZ290byBvdXQ7Ci0rCX0KLSsgIAlpZiAoKHB1YiA9IEVDX0tFWV9n ZXQwX3B1YmxpY19rZXkoaykpICE9IE5VTEwpIHsKLSsgICAgCQljb25zdCBFQ19HUk9VUCAqZ3Jv dXA7Ci0rICAgIAkJc2l6ZV90IGxlbjsKLSsKLSsJCWdyb3VwID0gRUNfS0VZX2dldDBfZ3JvdXAo ayk7Ci0rCQlsZW4gPSBFQ19QT0lOVF9wb2ludDJvY3QoZ3JvdXAsIHB1YiwKLSsJCSAgICBQT0lO VF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCwgTlVMTCwgMCwgTlVMTCk7Ci0rCQlpZiAoKHB1Yl9z ZXIgPSBtYWxsb2MobGVuKSkgPT0gTlVMTCkgewotKwkJCXJldCA9IFNTSF9FUlJfQUxMT0NfRkFJ TDsKLSsJCQlnb3RvIG91dDsKLSsJCX0KLSsJCUVDX1BPSU5UX3BvaW50Mm9jdChncm91cCwKLSsJ CSAgICBwdWIsCi0rCQkgICAgUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQsCi0rCQkgICAg cHViX3NlciwKLSsJCSAgICBsZW4sCi0rCQkgICAgYm5fY3R4KTsKLSsJCWlmIChPU1NMX1BBUkFN X0JMRF9wdXNoX29jdGV0X3N0cmluZyhwYXJhbV9ibGQsCi0rCQkgICAgT1NTTF9QS0VZX1BBUkFN X1BVQl9LRVksCi0rCQkgICAgcHViX3NlciwKLSsJCSAgICBsZW4pICE9IDEpIHsKLSsJCQlyZXQg PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsJCQlnb3RvIG91dDsKLSsJCX0KLSsJfQotKyAg CWlmICgocHJpdiA9IEVDX0tFWV9nZXQwX3ByaXZhdGVfa2V5KGspKSAhPSBOVUxMICYmCi0rCSAg ICBPU1NMX1BBUkFNX0JMRF9wdXNoX0JOKHBhcmFtX2JsZCwKLSsgICAgICAgICAgICAgICBPU1NM X1BLRVlfUEFSQU1fUFJJVl9LRVksIHByaXYpICE9IDEpIHsKLSsJCXJldCA9IFNTSF9FUlJfTElC Q1JZUFRPX0VSUk9SOwotKwkJZ290byBvdXQ7Ci0rICAJfQotKyAgCWlmICgoKnBrZXkgPSBzc2hr ZXlfY3JlYXRlX2V2cChwYXJhbV9ibGQsIGN0eCkpID09IE5VTEwpIHsKLSsgICAgCQlyZXQgPSBT U0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsgICAgCQlnb3RvIG91dDsKLSsgIAl9Ci0rCi0rb3V0 OgotKyAgCU9TU0xfUEFSQU1fQkxEX2ZyZWUocGFyYW1fYmxkKTsKLSsgIAlFVlBfUEtFWV9DVFhf ZnJlZShjdHgpOwotKyAgCUJOX0NUWF9mcmVlKGJuX2N0eCk7Ci0rICAJZnJlZShwdWJfc2VyKTsK LSsgIAlyZXR1cm4gcmV0OwotK30KLSsKLStpbnQKLStrZXhfY3JlYXRlX2V2cF9kaChFVlBfUEtF WSAqKnBrZXksIGNvbnN0IEJJR05VTSAqcCwgY29uc3QgQklHTlVNICpxLAotKyAgICBjb25zdCBC SUdOVU0gKmcsIGNvbnN0IEJJR05VTSAqcHViLCBjb25zdCBCSUdOVU0gKnByaXYpCi0rewotKwlP U1NMX1BBUkFNX0JMRCAqcGFyYW1fYmxkID0gTlVMTDsKLSsJRVZQX1BLRVlfQ1RYICpjdHggPSBO VUxMOwotKwlpbnQgciA9IDA7Ci0rCi0rCS8qIGNyZWF0ZSBFVlBfUEtFWS1ESCBrZXkgKi8KLSsJ aWYgKChjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiREgiLCBOVUxMKSkg PT0gTlVMTCB8fAotKwkgICAgKHBhcmFtX2JsZCA9IE9TU0xfUEFSQU1fQkxEX25ldygpKSA9PSBO VUxMKSB7Ci0rCQllcnJvcl9mKCJFVlBfUEtFWV9DVFggb3IgUEFSQU1fQkxEIGluaXQgZmFpbGVk Iik7Ci0rCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsJaWYg KE9TU0xfUEFSQU1fQkxEX3B1c2hfQk4ocGFyYW1fYmxkLCBPU1NMX1BLRVlfUEFSQU1fRkZDX1As IHApICE9IDEgfHwKLSsJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hfQk4ocGFyYW1fYmxkLCBPU1NM X1BLRVlfUEFSQU1fRkZDX1EsIHEpICE9IDEgfHwKLSsJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hf Qk4ocGFyYW1fYmxkLCBPU1NMX1BLRVlfUEFSQU1fRkZDX0csIGcpICE9IDEgfHwKLSsJICAgIE9T U0xfUEFSQU1fQkxEX3B1c2hfQk4ocGFyYW1fYmxkLAotKwkgICAgICAgIE9TU0xfUEtFWV9QQVJB TV9QVUJfS0VZLCBwdWIpICE9IDEpIHsKLSsJCWVycm9yX2YoIkZhaWxlZCBwdXNoaW5nIHBhcmFt cyB0byBPU1NMX1BBUkFNX0JMRCIpOwotKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwot KwkJZ290byBvdXQ7Ci0rCX0KLSsJaWYgKHByaXYgIT0gTlVMTCAmJgotKwkgICAgT1NTTF9QQVJB TV9CTERfcHVzaF9CTihwYXJhbV9ibGQsCi0rCSAgICAgICAgT1NTTF9QS0VZX1BBUkFNX1BSSVZf S0VZLCBwcml2KSAhPSAxKSB7Ci0rCQllcnJvcl9mKCJGYWlsZWQgcHVzaGluZyBwcml2YXRlIGtl eSB0byBPU1NMX1BBUkFNX0JMRCIpOwotKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwot KwkJZ290byBvdXQ7Ci0rCX0KLSsJaWYgKCgqcGtleSA9IHNzaGtleV9jcmVhdGVfZXZwKHBhcmFt X2JsZCwgY3R4KSkgPT0gTlVMTCkKLSsJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLStv dXQ6Ci0rCU9TU0xfUEFSQU1fQkxEX2ZyZWUocGFyYW1fYmxkKTsKLSsJRVZQX1BLRVlfQ1RYX2Zy ZWUoY3R4KTsKLSsJcmV0dXJuIHI7Ci0rfQotKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KLWRp ZmYgLS1naXQgYS9rZXguaCBiL2tleC5oCi1pbmRleCBjYjA2ZTg1YTMuLjZkYWFmYjE1OSAxMDA2 NDQKLS0tLSBhL2tleC5oCi0rKysgYi9rZXguaAotQEAgLTM3LDYgKzM3LDkgQEAKLSAjIGluY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KLSAjIGluY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSAjIGluY2x1ZGUg PG9wZW5zc2wvZWNkc2EuaD4KLSsjIGluY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rIyBpbmNsdWRl IDxvcGVuc3NsL2NvcmVfbmFtZXMuaD4KLSsjIGluY2x1ZGUgPG9wZW5zc2wvcGFyYW1fYnVpbGQu aD4KLSAjIGlmZGVmIE9QRU5TU0xfSEFTX0VDQwotICMgIGluY2x1ZGUgPG9wZW5zc2wvZWMuaD4K LSAjIGVsc2UgLyogT1BFTlNTTF9IQVNfRUNDICovCi1AQCAtMzE2LDYgKzMxOSw5IEBAIGludAlr ZXhjMjU1MTlfc2hhcmVkX2tleV9leHQoY29uc3QgdV9jaGFyIGtleVtDVVJWRTI1NTE5X1NJWkVd LAotICAgICBjb25zdCB1X2NoYXIgcHViW0NVUlZFMjU1MTlfU0laRV0sIHN0cnVjdCBzc2hidWYg Km91dCwgaW50KQotIAlfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDEs IENVUlZFMjU1MTlfU0laRSkpKQotIAlfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5 dGVzX18sIDIsIENVUlZFMjU1MTlfU0laRSkpKTsKLStpbnQJa2V4X2NyZWF0ZV9ldnBfZGgoRVZQ X1BLRVkgKiosIGNvbnN0IEJJR05VTSAqLCBjb25zdCBCSUdOVU0gKiwKLSsgICAgY29uc3QgQklH TlVNICosIGNvbnN0IEJJR05VTSAqLCBjb25zdCBCSUdOVU0gKik7Ci0raW50ICAgIGtleF9jcmVh dGVfZXZwX2VjKEVDX0tFWSAqaywgaW50IGVjZHNhX25pZCwgRVZQX1BLRVkgKipwa2V5KTsKLSAK LSAjaWYgZGVmaW5lZChERUJVR19LRVgpIHx8IGRlZmluZWQoREVCVUdfS0VYREgpIHx8IGRlZmlu ZWQoREVCVUdfS0VYRUNESCkKLSB2b2lkCWR1bXBfZGlnZXN0KGNvbnN0IGNoYXIgKiwgY29uc3Qg dV9jaGFyICosIGludCk7Ci1kaWZmIC0tZ2l0IGEva2V4ZGguYyBiL2tleGRoLmMKLWluZGV4IDZk NWE3ODEzZC4uYjA1Mjc3YWExIDEwMDY0NAotLS0tIGEva2V4ZGguYwotKysrIGIva2V4ZGguYwot QEAgLTM2LDYgKzM2LDEwIEBACi0gI2luY2x1ZGUgIm9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29t cGF0LmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2NvcmVfbmFtZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9wYXJh bV9idWlsZC5oPgotIAotICNpbmNsdWRlICJzc2hrZXkuaCIKLSAjaW5jbHVkZSAia2V4LmgiCi1A QCAtODQsOSArODgsMTIgQEAgaW50Ci0ga2V4X2RoX2NvbXB1dGVfa2V5KHN0cnVjdCBrZXggKmtl eCwgQklHTlVNICpkaF9wdWIsIHN0cnVjdCBzc2hidWYgKm91dCkKLSB7Ci0gCUJJR05VTSAqc2hh cmVkX3NlY3JldCA9IE5VTEw7Ci0rCWNvbnN0IEJJR05VTSAqcHViLCAqcHJpdiwgKnAsICpxLCAq ZzsKLSsJRVZQX1BLRVkgKnBrZXkgPSBOVUxMLCAqZGhfcGtleSA9IE5VTEw7Ci0rCUVWUF9QS0VZ X0NUWCAqY3R4ID0gTlVMTDsKLSAJdV9jaGFyICprYnVmID0gTlVMTDsKLSAJc2l6ZV90IGtsZW4g PSAwOwotLQlpbnQga291dCwgcjsKLSsJaW50IHIgPSAwOwotIAotICNpZmRlZiBERUJVR19LRVhE SAotIAlmcHJpbnRmKHN0ZGVyciwgImRoX3B1Yj0gIik7Ci1AQCAtMTAxLDI0ICsxMDgsNTkgQEAg a2V4X2RoX2NvbXB1dGVfa2V5KHN0cnVjdCBrZXggKmtleCwgQklHTlVNICpkaF9wdWIsIHN0cnVj dCBzc2hidWYgKm91dCkKLSAJCXIgPSBTU0hfRVJSX01FU1NBR0VfSU5DT01QTEVURTsKLSAJCWdv dG8gb3V0OwotIAl9Ci0tCWtsZW4gPSBESF9zaXplKGtleC0+ZGgpOwotKwotKwlESF9nZXQwX2tl eShrZXgtPmRoLCAmcHViLCAmcHJpdik7Ci0rCURIX2dldDBfcHFnKGtleC0+ZGgsICZwLCAmcSwg JmcpOwotKwkvKiBpbXBvcnQga2V5ICovCi0rCXIgPSBrZXhfY3JlYXRlX2V2cF9kaCgmcGtleSwg cCwgcSwgZywgcHViLCBwcml2KTsKLSsJaWYgKHIgIT0gMCkgewotKwkJZXJyb3JfZigiQ291bGQg bm90IGNyZWF0ZSBFVlBfUEtFWSBmb3IgZGgiKTsKLSsJCUVSUl9wcmludF9lcnJvcnNfZnAoc3Rk ZXJyKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCS8qIGltcG9ydCBwZWVyIGtleSAKLSsJICogdGhl IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHdpdGggcGtleQotKwkgKi8KLSsJciA9 IGtleF9jcmVhdGVfZXZwX2RoKCZkaF9wa2V5LCBwLCBxLCBnLCBkaF9wdWIsIE5VTEwpOwotKwlp ZiAociAhPSAwKSB7Ci0rCQllcnJvcl9mKCJDb3VsZCBub3QgaW1wb3J0IHBlZXIga2V5IGZvciBk aCIpOwotKwkJRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotKwkJZ290byBvdXQ7Ci0rCX0K LSsKLSsJaWYgKChjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwa2V5LCBO VUxMKSkgPT0gTlVMTCkgewotKwkJZXJyb3JfZigiQ291bGQgbm90IGluaXQgRVZQX1BLRVlfQ1RY IGZvciBkaCIpOwotKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKLSsJCWdvdG8gb3V0OwotKwl9 Ci0rCWlmIChFVlBfUEtFWV9kZXJpdmVfaW5pdChjdHgpICE9IDEgfHwKLSsJICAgIEVWUF9QS0VZ X2Rlcml2ZV9zZXRfcGVlcihjdHgsIGRoX3BrZXkpICE9IDEgfHwKLSsJICAgIEVWUF9QS0VZX2Rl cml2ZShjdHgsIE5VTEwsICZrbGVuKSAhPSAxKSB7Ci0rCQllcnJvcl9mKCJDb3VsZCBub3QgZ2V0 IGtleSBzaXplIik7Ci0rCQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0rCQlnb3RvIG91 dDsKLSsJfQotIAlpZiAoKGtidWYgPSBtYWxsb2Moa2xlbikpID09IE5VTEwgfHwKLSAJICAgIChz aGFyZWRfc2VjcmV0ID0gQk5fbmV3KCkpID09IE5VTEwpIHsKLSAJCXIgPSBTU0hfRVJSX0FMTE9D X0ZBSUw7Ci0gCQlnb3RvIG91dDsKLSAJfQotLQlpZiAoKGtvdXQgPSBESF9jb21wdXRlX2tleShr YnVmLCBkaF9wdWIsIGtleC0+ZGgpKSA8IDAgfHwKLS0JICAgIEJOX2JpbjJibihrYnVmLCBrb3V0 LCBzaGFyZWRfc2VjcmV0KSA9PSBOVUxMKSB7Ci0rCWlmIChFVlBfUEtFWV9kZXJpdmUoY3R4LCBr YnVmLCAma2xlbikgIT0gMSB8fAotKwkgICAgQk5fYmluMmJuKGtidWYsIGtsZW4sIHNoYXJlZF9z ZWNyZXQpID09IE5VTEwpIHsKLSsJCWVycm9yX2YoIkNvdWxkIG5vdCBkZXJpdmUga2V5Iik7Ci0g CQlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0gCQlnb3RvIG91dDsKLSAJfQotICNpZmRl ZiBERUJVR19LRVhESAotLQlkdW1wX2RpZ2VzdCgic2hhcmVkIHNlY3JldCIsIGtidWYsIGtvdXQp OwotKwlkdW1wX2RpZ2VzdCgic2hhcmVkIHNlY3JldCIsIGtidWYsIGtsZW4pOwotICNlbmRpZgot IAlyID0gc3NoYnVmX3B1dF9iaWdudW0yKG91dCwgc2hhcmVkX3NlY3JldCk7Ci0gIG91dDoKLSAJ ZnJlZXplcm8oa2J1Ziwga2xlbik7Ci0gCUJOX2NsZWFyX2ZyZWUoc2hhcmVkX3NlY3JldCk7Ci0r CUVWUF9QS0VZX2ZyZWUocGtleSk7Ci0rCUVWUF9QS0VZX2ZyZWUoZGhfcGtleSk7Ci0rCUVWUF9Q S0VZX0NUWF9mcmVlKGN0eCk7Ci0gCXJldHVybiByOwotIH0KLSAKLWRpZmYgLS1naXQgYS9rZXhl Y2RoLmMgYi9rZXhlY2RoLmMKLWluZGV4IDUwMGVjNTcyNS4uMWExYmFlMzVlIDEwMDY0NAotLS0t IGEva2V4ZWNkaC5jCi0rKysgYi9rZXhlY2RoLmMKLUBAIC0zNiwxNyArMzYsNTcgQEAKLSAKLSAj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2VjZGguaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jb3JlX25hbWVzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvcGFyYW1fYnVpbGQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSAKLSAjaW5jbHVkZSAic3Noa2V5LmgiCi0gI2luY2x1ZGUgImtleC5oIgotICNpbmNsdWRl ICJzc2hidWYuaCIKLSAjaW5jbHVkZSAiZGlnZXN0LmgiCi0gI2luY2x1ZGUgInNzaGVyci5oIgot KyNpbmNsdWRlICJsb2cuaCIKLSAKLSBzdGF0aWMgaW50Ci0ga2V4X2VjZGhfZGVjX2tleV9ncm91 cChzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwgRUNfS0VZICprZXksCi0gICAg IGNvbnN0IEVDX0dST1VQICosIHN0cnVjdCBzc2hidWYgKiopOwotIAotK3N0YXRpYyBFQ19LRVkg KgotK2dlbmVyYXRlX2VjX2tleXMoaW50IGVjX25pZCkKLSt7Ci0rCUVDX0tFWSAqY2xpZW50X2tl eSA9IE5VTEw7Ci0rCUVWUF9QS0VZICpwa2V5ID0gTlVMTDsKLSsJRVZQX1BLRVlfQ1RYICpjdHgg PSBOVUxMOwotKwlPU1NMX1BBUkFNX0JMRCAqcGFyYW1fYmxkID0gTlVMTDsKLSsJT1NTTF9QQVJB TSAqcGFyYW1zID0gTlVMTDsKLSsJY29uc3QgY2hhciAqZ3JvdXBfbmFtZTsKLSsKLSsJaWYgKChj dHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiRUMiLCBOVUxMKSkgPT0gTlVM TCB8fAotKwkgICAgKHBhcmFtX2JsZCA9IE9TU0xfUEFSQU1fQkxEX25ldygpKSA9PSBOVUxMKQot KwkJZ290byBvdXQ7Ci0rCWlmICgoZ3JvdXBfbmFtZSA9IE9TU0xfRUNfY3VydmVfbmlkMm5hbWUo ZWNfbmlkKSkgPT0gTlVMTCB8fAotKwkgICAgT1NTTF9QQVJBTV9CTERfcHVzaF91dGY4X3N0cmlu ZyhwYXJhbV9ibGQsCi0rCSAgICAgICAgT1NTTF9QS0VZX1BBUkFNX0dST1VQX05BTUUsIGdyb3Vw X25hbWUsIDApICE9IDEgfHwKLSsJICAgIChwYXJhbXMgPSBPU1NMX1BBUkFNX0JMRF90b19wYXJh bShwYXJhbV9ibGQpKSA9PSBOVUxMKSB7Ci0rCQllcnJvcl9mKCJDb3VsZCBub3QgY3JlYXRlIE9T U0xfUEFSQU0iKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCWlmIChFVlBfUEtFWV9rZXlnZW5faW5p dChjdHgpICE9IDEgfHwKLSsJICAgIEVWUF9QS0VZX0NUWF9zZXRfcGFyYW1zKGN0eCwgcGFyYW1z KSAhPSAxIHx8Ci0rCSAgICBFVlBfUEtFWV9nZW5lcmF0ZShjdHgsICZwa2V5KSAhPSAxIHx8Ci0r CSAgICAoY2xpZW50X2tleSA9IEVWUF9QS0VZX2dldDFfRUNfS0VZKHBrZXkpKSA9PSBOVUxMKSB7 Ci0rCQllcnJvcl9mKCJDb3VsZCBub3QgZ2VuZXJhdGUgZWMga2V5cyIpOwotKwkJZ290byBvdXQ7 Ci0rCX0KLStvdXQ6Ci0rCUVWUF9QS0VZX2ZyZWUocGtleSk7Ci0rCUVWUF9QS0VZX0NUWF9mcmVl KGN0eCk7Ci0rCU9TU0xfUEFSQU1fQkxEX2ZyZWUocGFyYW1fYmxkKTsKLSsJT1NTTF9QQVJBTV9m cmVlKHBhcmFtcyk7Ci0rCXJldHVybiBjbGllbnRfa2V5OwotK30KLSsKLSBpbnQKLSBrZXhfZWNk aF9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKLSB7Ci1AQCAtNTYsMTEgKzk2LDcgQEAga2V4X2Vj ZGhfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgpCi0gCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7 Ci0gCWludCByOwotIAotLQlpZiAoKGNsaWVudF9rZXkgPSBFQ19LRVlfbmV3X2J5X2N1cnZlX25h bWUoa2V4LT5lY19uaWQpKSA9PSBOVUxMKSB7Ci0tCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOwot LQkJZ290byBvdXQ7Ci0tCX0KLS0JaWYgKEVDX0tFWV9nZW5lcmF0ZV9rZXkoY2xpZW50X2tleSkg IT0gMSkgewotKwlpZiAoKGNsaWVudF9rZXkgPSBnZW5lcmF0ZV9lY19rZXlzKGtleC0+ZWNfbmlk KSkgPT0gTlVMTCkgewotIAkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotIAkJZ290byBv dXQ7Ci0gCX0KLUBAIC0xMDIsMTEgKzEzOCw3IEBAIGtleF9lY2RoX2VuYyhzdHJ1Y3Qga2V4ICpr ZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKmNsaWVudF9ibG9iLAotIAkqc2VydmVyX2Jsb2JwID0g TlVMTDsKLSAJKnNoYXJlZF9zZWNyZXRwID0gTlVMTDsKLSAKLS0JaWYgKChzZXJ2ZXJfa2V5ID0g RUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKGtleC0+ZWNfbmlkKSkgPT0gTlVMTCkgewotLQkJciA9 IFNTSF9FUlJfQUxMT0NfRkFJTDsKLS0JCWdvdG8gb3V0OwotLQl9Ci0tCWlmIChFQ19LRVlfZ2Vu ZXJhdGVfa2V5KHNlcnZlcl9rZXkpICE9IDEpIHsKLSsJaWYgKChzZXJ2ZXJfa2V5ID0gZ2VuZXJh dGVfZWNfa2V5cyhrZXgtPmVjX25pZCkpID09IE5VTEwpIHsKLSAJCXIgPSBTU0hfRVJSX0xJQkNS WVBUT19FUlJPUjsKLSAJCWdvdG8gb3V0OwotIAl9Ci1AQCAtMTQxLDExICsxNzMsMjEgQEAga2V4 X2VjZGhfZGVjX2tleV9ncm91cChzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYg KmVjX2Jsb2IsCi0gewotIAlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOwotIAlCSUdOVU0gKnNo YXJlZF9zZWNyZXQgPSBOVUxMOwotLQlFQ19QT0lOVCAqZGhfcHViID0gTlVMTDsKLS0JdV9jaGFy ICprYnVmID0gTlVMTDsKLS0Jc2l6ZV90IGtsZW4gPSAwOwotKwlFVlBfUEtFWV9DVFggKmN0eCA9 IE5VTEw7Ci0rCUVWUF9QS0VZICpwa2V5ID0gTlVMTCwgKmRoX3BrZXkgPSBOVUxMOwotKwlPU1NM X1BBUkFNX0JMRCAqcGFyYW1fYmxkID0gTlVMTDsKLSsJT1NTTF9QQVJBTSAqcGFyYW1zID0gTlVM TDsKLSsJdV9jaGFyICprYnVmID0gTlVMTCwgKnB1YiA9IE5VTEw7Ci0rCXNpemVfdCBrbGVuID0g MCwgcHVibGVuOwotKwljb25zdCBjaGFyICpncm91cF9uYW1lOwotIAlpbnQgcjsKLSAKLSsJLyog aW1wb3J0IEVDX0tFWSB0byBFVlBfUEtFWSAqLwotKwlpZiAoKHIgPSBrZXhfY3JlYXRlX2V2cF9l YyhrZXksIGtleC0+ZWNfbmlkLCAmcGtleSkpICE9IDApIHsKLSsJCWVycm9yX2YoIkNvdWxkIG5v dCBjcmVhdGUgRVZQX1BLRVkiKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0gCSpzaGFyZWRfc2Vj cmV0cCA9IE5VTEw7Ci0gCi0gCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKSB7Ci1A QCAtMTU0LDQ1ICsxOTYsODIgQEAga2V4X2VjZGhfZGVjX2tleV9ncm91cChzdHJ1Y3Qga2V4ICpr ZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKmVjX2Jsb2IsCi0gCX0KLSAJaWYgKChyID0gc3NoYnVm X3B1dF9zdHJpbmdiKGJ1ZiwgZWNfYmxvYikpICE9IDApCi0gCQlnb3RvIG91dDsKLS0JaWYgKChk aF9wdWIgPSBFQ19QT0lOVF9uZXcoZ3JvdXApKSA9PSBOVUxMKSB7Ci0rCi0rCS8qIHRoZSBwdWJs aWMga2V5IGlzIGluIHRoZSBidWZmZXIgaW4gb2N0ZXQgc3RyaW5nIFVOQ09NUFJFU1NFRAotKwkg KiBmb3JtYXQuIFNlZSBzc2hidWZfcHV0X2VjICovCi0rCWlmICgociA9IHNzaGJ1Zl9nZXRfc3Ry aW5nKGJ1ZiwgJnB1YiwgJnB1YmxlbikpICE9IDApCi0rCQlnb3RvIG91dDsKLSsJc3NoYnVmX3Jl c2V0KGJ1Zik7Ci0rCWlmICgoY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX3BrZXkoTlVMTCwg cGtleSwgTlVMTCkpID09IE5VTEwgfHwKLSsJICAgIChwYXJhbV9ibGQgPSBPU1NMX1BBUkFNX0JM RF9uZXcoKSkgPT0gTlVMTCkgewotIAkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKLSAJCWdvdG8g b3V0OwotIAl9Ci0tCWlmICgociA9IHNzaGJ1Zl9nZXRfZWMoYnVmLCBkaF9wdWIsIGdyb3VwKSkg IT0gMCkgewotKwlpZiAoKGdyb3VwX25hbWUgPSBPU1NMX0VDX2N1cnZlX25pZDJuYW1lKGtleC0+ ZWNfbmlkKSkgPT0gTlVMTCkgewotKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotKwkJ Z290byBvdXQ7Ci0rCX0KLSsJaWYgKE9TU0xfUEFSQU1fQkxEX3B1c2hfb2N0ZXRfc3RyaW5nKHBh cmFtX2JsZCwKLSsJICAgICAgICBPU1NMX1BLRVlfUEFSQU1fUFVCX0tFWSwgcHViLCBwdWJsZW4p ICE9IDEgfHwKLSsJICAgIE9TU0xfUEFSQU1fQkxEX3B1c2hfdXRmOF9zdHJpbmcocGFyYW1fYmxk LAotKwkgICAgICAgIE9TU0xfUEtFWV9QQVJBTV9HUk9VUF9OQU1FLCBncm91cF9uYW1lLCAwKSAh PSAxIHx8Ci0rCSAgICAocGFyYW1zID0gT1NTTF9QQVJBTV9CTERfdG9fcGFyYW0ocGFyYW1fYmxk KSkgPT0gTlVMTCkgewotKwkJZXJyb3JfZigiRmFpbGVkIHRvIHNldCBwYXJhbXMgZm9yIGRoX3Br ZXkiKTsKLSsJCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsJCWdvdG8gb3V0OwotKwl9 Ci0rCWlmIChFVlBfUEtFWV9mcm9tZGF0YV9pbml0KGN0eCkgIT0gMSB8fAotKwkgICAgRVZQX1BL RVlfZnJvbWRhdGEoY3R4LCAmZGhfcGtleSwKLSsJICAgICAgICBFVlBfUEtFWV9QVUJMSUNfS0VZ LCBwYXJhbXMpICE9IDEgfHwKLSsJICAgIEVWUF9QS0VZX3B1YmxpY19jaGVjayhjdHgpICE9IDEp IHsKLSsJCWVycm9yX2YoIlBlZXIgcHVibGljIGtleSBpbXBvcnQgZmFpbGVkIik7Ci0rCQlyID0g U1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0gCQlnb3RvIG91dDsKLSAJfQotLQlzc2hidWZfcmVz ZXQoYnVmKTsKLSAKLSAjaWZkZWYgREVCVUdfS0VYRUNESAotIAlmcHV0cygicHVibGljIGtleTpc biIsIHN0ZGVycik7Ci0tCXNzaGtleV9kdW1wX2VjX3BvaW50KGdyb3VwLCBkaF9wdWIpOwotKwlF VlBfUEtFWV9wcmludF9wdWJsaWNfZnAoc3RkZXJyLCBkaF9wa2V5LCAwLCBOVUxMKTsKLSAjZW5k aWYKLS0JaWYgKHNzaGtleV9lY192YWxpZGF0ZV9wdWJsaWMoZ3JvdXAsIGRoX3B1YikgIT0gMCkg ewotLQkJciA9IFNTSF9FUlJfTUVTU0FHRV9JTkNPTVBMRVRFOwotKwlFVlBfUEtFWV9DVFhfZnJl ZShjdHgpOwotKwljdHggPSBOVUxMOwotKwlpZiAoKGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJv bV9wa2V5KE5VTEwsIHBrZXksIE5VTEwpKSA9PSBOVUxMIHx8Ci0rCSAgICBFVlBfUEtFWV9kZXJp dmVfaW5pdChjdHgpICE9IDEgfHwKLSsJICAgIEVWUF9QS0VZX2Rlcml2ZV9zZXRfcGVlcihjdHgs IGRoX3BrZXkpICE9IDEgfHwKLSsJICAgIEVWUF9QS0VZX2Rlcml2ZShjdHgsIE5VTEwsICZrbGVu KSAhPSAxKSB7Ci0rCQllcnJvcl9mKCJGYWlsZWQgdG8gZ2V0IGRlcml2ZSBpbmZvcm1hdGlvbiIp OwotKwkJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotIAkJZ290byBvdXQ7Ci0gCX0KLS0J a2xlbiA9IChFQ19HUk9VUF9nZXRfZGVncmVlKGdyb3VwKSArIDcpIC8gODsKLS0JaWYgKChrYnVm ID0gbWFsbG9jKGtsZW4pKSA9PSBOVUxMIHx8Ci0tCSAgICAoc2hhcmVkX3NlY3JldCA9IEJOX25l dygpKSA9PSBOVUxMKSB7Ci0rCWlmICgoa2J1ZiA9IG1hbGxvYyhrbGVuKSkgPT0gTlVMTCkgewot IAkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKLSAJCWdvdG8gb3V0OwotIAl9Ci0tCWlmIChFQ0RI X2NvbXB1dGVfa2V5KGtidWYsIGtsZW4sIGRoX3B1Yiwga2V5LCBOVUxMKSAhPSAoaW50KWtsZW4g fHwKLS0JICAgIEJOX2JpbjJibihrYnVmLCBrbGVuLCBzaGFyZWRfc2VjcmV0KSA9PSBOVUxMKSB7 Ci0rCWlmIChFVlBfUEtFWV9kZXJpdmUoY3R4LCBrYnVmLCAma2xlbikgIT0gMSkgewotIAkJciA9 IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotIAkJZ290byBvdXQ7Ci0gCX0KLSAjaWZkZWYgREVC VUdfS0VYRUNESAotIAlkdW1wX2RpZ2VzdCgic2hhcmVkIHNlY3JldCIsIGtidWYsIGtsZW4pOwot ICNlbmRpZgotKwlpZiAoKHNoYXJlZF9zZWNyZXQgPSBCTl9uZXcoKSkgPT0gTlVMTCB8fAotKwkg ICAgKEJOX2JpbjJibihrYnVmLCBrbGVuLCBzaGFyZWRfc2VjcmV0KSA9PSBOVUxMKSkgewotKwkJ ciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKLSsJCWdvdG8gb3V0OwotKwl9Ci0gCWlmICgociA9IHNz aGJ1Zl9wdXRfYmlnbnVtMihidWYsIHNoYXJlZF9zZWNyZXQpKSAhPSAwKQotIAkJZ290byBvdXQ7 Ci0gCSpzaGFyZWRfc2VjcmV0cCA9IGJ1ZjsKLSAJYnVmID0gTlVMTDsKLSAgb3V0OgotLQlFQ19Q T0lOVF9jbGVhcl9mcmVlKGRoX3B1Yik7Ci0rCUVWUF9QS0VZX0NUWF9mcmVlKGN0eCk7Ci0rCUVW UF9QS0VZX2ZyZWUocGtleSk7Ci0rCUVWUF9QS0VZX2ZyZWUoZGhfcGtleSk7Ci0rCU9TU0xfUEFS QU1fQkxEX2ZyZWUocGFyYW1fYmxkKTsKLSsJT1NTTF9QQVJBTV9mcmVlKHBhcmFtcyk7Ci0gCUJO X2NsZWFyX2ZyZWUoc2hhcmVkX3NlY3JldCk7Ci0gCWZyZWV6ZXJvKGtidWYsIGtsZW4pOwotKwlm cmVlemVybyhwdWIsIHB1Ymxlbik7Ci0gCXNzaGJ1Zl9mcmVlKGJ1Zik7Ci0gCXJldHVybiByOwot IH0KLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDQyLW9wZW5zc2gtOC43cDEtbm9ob3N0 c2hhMXByb29mLnBhdGNoIGIvMDA0Mi1vcGVuc3NoLTguN3AxLW5vaG9zdHNoYTFwcm9vZi5wYXRj aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxZDA1MS4uMDAwMDAwMAotLS0gYS8w MDQyLW9wZW5zc2gtOC43cDEtbm9ob3N0c2hhMXByb29mLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsMzMyICswLDAgQEAKLUZyb20gMWNkNDcwMzYzNTM4OTlmZTA2NmY1MjQxZDNkNzA3NzhmMTAz YzBlMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxi ZWxkbWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAK LVN1YmplY3Q6IFtQQVRDSCA0Mi81M10gb3BlbnNzaC04LjdwMS1ub2hvc3RzaGExcHJvb2YKLQot LS0tCi0gY29tcGF0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiArKysrKysK LSBjb21wYXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCi0gbW9uaXRv ci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNyArKysrKysrKysrKysrKysrKy0t LS0tLQotIHJlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jICAgICAgIHwgIDMgKystCi0g cmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rlc3RfZmlsZS5jICAgfCAgMyArKy0KLSByZWdyZXNz L3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9mdXp6LmMgICB8ICAzICsrLQotIHJlZ3Jlc3MvdW5pdHRl c3RzL3NzaGtleS90ZXN0X3NzaGtleS5jIHwgMzAgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0K LSBzZXJ2ZXJsb29wLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrKysrLQotIHNz aC1yc2EuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKystCi0gc3NoY29ubmVj dDIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOCArKysrKysrCi0gc3NoZC1zZXNzaW9u LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMSArKysrKysrKysrKysrKysrKysKLSAxMSBm aWxlcyBjaGFuZ2VkLCA4OCBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKLQotZGlmZiAt LWdpdCBhL2NvbXBhdC5jIGIvY29tcGF0LmMKLWluZGV4IGI1OWYwYmZjMC4uNGU2MTFkYzM5IDEw MDY0NAotLS0tIGEvY29tcGF0LmMKLSsrKyBiL2NvbXBhdC5jCi1AQCAtNDIsNiArNDIsNyBAQCB2 b2lkCi0gY29tcGF0X2Jhbm5lcihzdHJ1Y3Qgc3NoICpzc2gsIGNvbnN0IGNoYXIgKnZlcnNpb24p Ci0gewotIAlpbnQgaTsKLSsJaW50IGZvcmJpZF9zc2hfcnNhID0gMDsKLSAJc3RhdGljIHN0cnVj dCB7Ci0gCQljaGFyCSpwYXQ7Ci0gCQlpbnQJYnVnczsKLUBAIC0xMjUsMTYgKzEyNiwyMSBAQCBj b21wYXRfYmFubmVyKHN0cnVjdCBzc2ggKnNzaCwgY29uc3QgY2hhciAqdmVyc2lvbikKLSAJfTsK LSAKLSAJLyogcHJvY2VzcyB0YWJsZSwgcmV0dXJuIGZpcnN0IG1hdGNoICovCi0rCWZvcmJpZF9z c2hfcnNhID0gKHNzaC0+Y29tcGF0ICYgU1NIX1JIX1JTQVNJR1NIQSk7Ci0gCXNzaC0+Y29tcGF0 ID0gMDsKLSAJZm9yIChpID0gMDsgY2hlY2tbaV0ucGF0OyBpKyspIHsKLSAJCWlmIChtYXRjaF9w YXR0ZXJuX2xpc3QodmVyc2lvbiwgY2hlY2tbaV0ucGF0LCAwKSA9PSAxKSB7Ci0gCQkJZGVidWdf ZigibWF0Y2g6ICVzIHBhdCAlcyBjb21wYXQgMHglMDh4IiwKLSAJCQkgICAgdmVyc2lvbiwgY2hl Y2tbaV0ucGF0LCBjaGVja1tpXS5idWdzKTsKLSAJCQlzc2gtPmNvbXBhdCA9IGNoZWNrW2ldLmJ1 Z3M7Ci0rCWlmIChmb3JiaWRfc3NoX3JzYSkKLSsJCXNzaC0+Y29tcGF0IHw9IFNTSF9SSF9SU0FT SUdTSEE7Ci0gCQkJcmV0dXJuOwotIAkJfQotIAl9Ci0gCWRlYnVnX2YoIm5vIG1hdGNoOiAlcyIs IHZlcnNpb24pOwotKwlpZiAoZm9yYmlkX3NzaF9yc2EpCi0rCQlzc2gtPmNvbXBhdCB8PSBTU0hf UkhfUlNBU0lHU0hBOwotIH0KLSAKLSAvKiBBbHdheXMgcmV0dXJucyBwb2ludGVyIHRvIGFsbG9j YXRlZCBtZW1vcnksIGNhbGxlciBtdXN0IGZyZWUuICovCi1kaWZmIC0tZ2l0IGEvY29tcGF0Lmgg Yi9jb21wYXQuaAotaW5kZXggMWExOTA2MGZjLi4yZTZkYjViZjkgMTAwNjQ0Ci0tLS0gYS9jb21w YXQuaAotKysrIGIvY29tcGF0LmgKLUBAIC0zMCw3ICszMCw3IEBACi0gI2RlZmluZSBTU0hfQlVH X1VURjhUVFlNT0RFCTB4MDAwMDAwMDEKLSAjZGVmaW5lIFNTSF9CVUdfU0lHVFlQRQkJMHgwMDAw MDAwMgotICNkZWZpbmUgU1NIX0JVR19TSUdUWVBFNzQJMHgwMDAwMDAwNAotLS8qICNkZWZpbmUg dW51c2VkCQkweDAwMDAwMDA4ICovCi0rI2RlZmluZSBTU0hfUkhfUlNBU0lHU0hBCTB4MDAwMDAw MDgKLSAjZGVmaW5lIFNTSF9PTERfU0VTU0lPTklECTB4MDAwMDAwMTAKLSAvKiAjZGVmaW5lIHVu dXNlZAkJMHgwMDAwMDAyMCAqLwotICNkZWZpbmUgU1NIX0JVR19ERUJVRwkJMHgwMDAwMDA0MAot ZGlmZiAtLWdpdCBhL21vbml0b3IuYyBiL21vbml0b3IuYwotaW5kZXggYjJmNTAxNzkwLi42Yzgz NzM5ZWUgMTAwNjQ0Ci0tLS0gYS9tb25pdG9yLmMKLSsrKyBiL21vbml0b3IuYwotQEAgLTc1NCwx MSArNzU0LDEyIEBAIG1tX2Fuc3dlcl9zaWduKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2ssIHN0 cnVjdCBzc2hidWYgKm0pCi0gCXN0cnVjdCBzc2hrZXkgKnB1YmtleSwgKmtleTsKLSAJc3RydWN0 IHNzaGJ1ZiAqc2lnYnVmID0gTlVMTDsKLSAJdV9jaGFyICpwID0gTlVMTCwgKnNpZ25hdHVyZSA9 IE5VTEw7Ci0tCWNoYXIgKmFsZyA9IE5VTEw7Ci0tCXNpemVfdCBkYXRsZW4sIHNpZ2xlbjsKLS0J aW50IHIsIGlzX3Byb29mID0gMCwga2V5aWQ7Ci0tCXVfaW50IGNvbXBhdDsKLSsJY2hhciAqYWxn ID0gTlVMTCwgKmVmZmVjdGl2ZV9hbGc7Ci0rCXNpemVfdCBkYXRsZW4sIHNpZ2xlbiwgYWxnbGVu OwotKwlpbnQgciwgaXNfcHJvb2YgPSAwOwotKwl1X2ludCBrZXlpZCwgY29tcGF0OwotIAljb25z dCBjaGFyIHByb29mX3JlcVtdID0gImhvc3RrZXlzLXByb3ZlLTAwQG9wZW5zc2guY29tIjsKLSsJ Y29uc3QgY2hhciBzYWZlX3JzYVtdICA9ICJyc2Etc2hhMi0yNTYiOwotIAotIAlkZWJ1ZzNfZigi ZW50ZXJpbmciKTsKLSAKLUBAIC04MTYsMTggKzgxNywzMCBAQCBtbV9hbnN3ZXJfc2lnbihzdHJ1 Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICptKQotIAl9Ci0gCi0gCWlmICgo a2V5ID0gZ2V0X2hvc3RrZXlfYnlfaW5kZXgoa2V5aWQpKSAhPSBOVUxMKSB7Ci0tCQlpZiAoKHIg PSBzc2hrZXlfc2lnbihrZXksICZzaWduYXR1cmUsICZzaWdsZW4sIHAsIGRhdGxlbiwgYWxnLAot KwkJaWYgKHNzaC0+Y29tcGF0ICYgU1NIX1JIX1JTQVNJR1NIQSAmJiBzdHJjbXAoYWxnLCAic3No LXJzYSIpID09IDAKLSsJCQkJJiYgKHNzaGtleV90eXBlX3BsYWluKGtleS0+dHlwZSkgPT0gS0VZ X1JTQSkpIHsKLSsJCQllZmZlY3RpdmVfYWxnID0gc2FmZV9yc2E7Ci0rCQl9IGVsc2UgewotKwkJ CWVmZmVjdGl2ZV9hbGcgPSBhbGc7Ci0rCQl9Ci0rCQlpZiAoKHIgPSBzc2hrZXlfc2lnbihrZXks ICZzaWduYXR1cmUsICZzaWdsZW4sIHAsIGRhdGxlbiwgZWZmZWN0aXZlX2FsZywKLSAJCSAgICBv cHRpb25zLnNrX3Byb3ZpZGVyLCBOVUxMLCBjb21wYXQpKSAhPSAwKQotIAkJCWZhdGFsX2ZyKHIs ICJzaWduIik7Ci0gCX0gZWxzZSBpZiAoKGtleSA9IGdldF9ob3N0a2V5X3B1YmxpY19ieV9pbmRl eChrZXlpZCwgc3NoKSkgIT0gTlVMTCAmJgotIAkgICAgYXV0aF9zb2NrID4gMCkgewotKwkJaWYg KHNzaC0+Y29tcGF0ICYgU1NIX1JIX1JTQVNJR1NIQSAmJiBzdHJjbXAoYWxnLCAic3NoLXJzYSIp ID09IDAKLSsJCQkJJiYgKHNzaGtleV90eXBlX3BsYWluKGtleS0+dHlwZSkgPT0gS0VZX1JTQSkp IHsKLSsJCQllZmZlY3RpdmVfYWxnID0gc2FmZV9yc2E7Ci0rCQl9IGVsc2UgewotKwkJCWVmZmVj dGl2ZV9hbGcgPSBhbGc7Ci0rCQl9Ci0gCQlpZiAoKHIgPSBzc2hfYWdlbnRfc2lnbihhdXRoX3Nv Y2ssIGtleSwgJnNpZ25hdHVyZSwgJnNpZ2xlbiwKLS0JCSAgICBwLCBkYXRsZW4sIGFsZywgY29t cGF0KSkgIT0gMCkKLSsJCSAgICBwLCBkYXRsZW4sIGVmZmVjdGl2ZV9hbGcsIGNvbXBhdCkpICE9 IDApCi0gCQkJZmF0YWxfZnIociwgImFnZW50IHNpZ24iKTsKLSAJfSBlbHNlCi0gCQlmYXRhbF9m KCJubyBob3N0a2V5IGZyb20gaW5kZXggJWQiLCBrZXlpZCk7Ci0gCi0tCWRlYnVnM19mKCIlcyAl cyBzaWduYXR1cmUgbGVuPSV6dSIsIGFsZywKLSsJZGVidWczX2YoIiVzIChlZmZlY3RpdmU6ICVz KSAlcyBzaWduYXR1cmUgbGVuPSV6dSIsIGFsZywgZWZmZWN0aXZlX2FsZywKLSAJICAgIGlzX3By b29mID8gImhvc3RrZXkgcHJvb2YiIDogIktFWCIsIHNpZ2xlbik7Ci0gCi0gCXNzaGJ1Zl9yZXNl dChtKTsKLWRpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYyBiL3Jl Z3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCi1pbmRleCAxNmMyZjJkZmYuLmY0NzAwZGVl YiAxMDA2NDQKLS0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL2tleC90ZXN0X2tleC5jCi0rKysgYi9y ZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYwotQEAgLTExMCw3ICsxMTAsOCBAQCBkb19r ZXhfd2l0aF9rZXkoY2hhciAqa2V4LCBjaGFyICpjaXBoZXIsIGNoYXIgKm1hYywKLSAJCWtleF9w YXJhbXMucHJvcG9zYWxbUFJPUE9TQUxfTUFDX0FMR1NfQ1RPU10gPSBtYWM7Ci0gCQlrZXhfcGFy YW1zLnByb3Bvc2FsW1BST1BPU0FMX01BQ19BTEdTX1NUT0NdID0gbWFjOwotIAl9Ci0tCWtleW5h bWUgPSBzdHJkdXAoc3Noa2V5X3NzaF9uYW1lKHByaXZhdGUpKTsKLSsJa2V5bmFtZSA9IChzdHJj bXAoc3Noa2V5X3NzaF9uYW1lKHByaXZhdGUpLCAic3NoLXJzYSIpKSA/Ci0rCQlzdHJkdXAoc3No a2V5X3NzaF9uYW1lKHByaXZhdGUpKSA6IHN0cmR1cCgicnNhLXNoYTItMjU2Iik7Ci0gCUFTU0VS VF9QVFJfTkUoa2V5bmFtZSwgTlVMTCk7Ci0gCWtleF9wYXJhbXMucHJvcG9zYWxbUFJPUE9TQUxf U0VSVkVSX0hPU1RfS0VZX0FMR1NdID0ga2V5bmFtZTsKLSAJQVNTRVJUX0lOVF9FUShzc2hfaW5p dCgmY2xpZW50LCAwLCAma2V4X3BhcmFtcyksIDApOwotZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvdW5p dHRlc3RzL3NzaGtleS90ZXN0X2ZpbGUuYyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0 X2ZpbGUuYwotaW5kZXggZTQxMmI3NWQ4Li41YjA2YmM5MDUgMTAwNjQ0Ci0tLS0gYS9yZWdyZXNz L3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9maWxlLmMKLSsrKyBiL3JlZ3Jlc3MvdW5pdHRlc3RzL3Nz aGtleS90ZXN0X2ZpbGUuYwotQEAgLTEwNiw2ICsxMDYsNyBAQCBzc2hrZXlfZmlsZV90ZXN0cyh2 b2lkKQotIAlzc2hrZXlfZnJlZShrMik7Ci0gCVRFU1RfRE9ORSgpOwotIAotKwkvKiBTa2lwIHRo aXMgdGVzdCwgU0hBMSBzaWduYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkCi0gCVRFU1RfU1RBUlQo ImxvYWQgUlNBIGNlcnQgd2l0aCBTSEExIHNpZ25hdHVyZSIpOwotIAlBU1NFUlRfSU5UX0VRKHNz aGtleV9sb2FkX2NlcnQodGVzdF9kYXRhX2ZpbGUoInJzYV8xX3NoYTEiKSwgJmsyKSwgMCk7Ci0g CUFTU0VSVF9QVFJfTkUoazIsIE5VTEwpOwotQEAgLTExMyw3ICsxMTQsNyBAQCBzc2hrZXlfZmls ZV90ZXN0cyh2b2lkKQotIAlBU1NFUlRfSU5UX0VRKHNzaGtleV9lcXVhbF9wdWJsaWMoazEsIGsy KSwgMSk7Ci0gCUFTU0VSVF9TVFJJTkdfRVEoazItPmNlcnQtPnNpZ25hdHVyZV90eXBlLCAic3No LXJzYSIpOwotIAlzc2hrZXlfZnJlZShrMik7Ci0tCVRFU1RfRE9ORSgpOwotKwlURVNUX0RPTkUo KTsgKi8KLSAKLSAJVEVTVF9TVEFSVCgibG9hZCBSU0EgY2VydCB3aXRoIFNIQTUxMiBzaWduYXR1 cmUiKTsKLSAJQVNTRVJUX0lOVF9FUShzc2hrZXlfbG9hZF9jZXJ0KHRlc3RfZGF0YV9maWxlKCJy c2FfMV9zaGE1MTIiKSwgJmsyKSwgMCk7Ci1kaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0dGVzdHMv c3Noa2V5L3Rlc3RfZnV6ei5jIGIvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rlc3RfZnV6ei5j Ci1pbmRleCBkMGY0N2Q3Y2YuLmJhNGQ1MDZkNSAxMDA2NDQKLS0tLSBhL3JlZ3Jlc3MvdW5pdHRl c3RzL3NzaGtleS90ZXN0X2Z1enouYwotKysrIGIvcmVncmVzcy91bml0dGVzdHMvc3Noa2V5L3Rl c3RfZnV6ei5jCi1AQCAtMjczLDEzICsyNzMsMTQgQEAgc3Noa2V5X2Z1enpfdGVzdHModm9pZCkK LSAJVEVTVF9ET05FKCk7Ci0gCi0gI2lmZGVmIFdJVEhfT1BFTlNTTAotKwkvKiBTa2lwIHRoaXMg dGVzdCwgU0hBMSBzaWduYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkCi0gCVRFU1RfU1RBUlQoImZ1 enogUlNBIHNpZyIpOwotIAlidWYgPSBsb2FkX2ZpbGUoInJzYV8xIik7Ci0gCUFTU0VSVF9JTlRf RVEoc3Noa2V5X3BhcnNlX3ByaXZhdGVfZmlsZWJsb2IoYnVmLCAiIiwgJmsxLCBOVUxMKSwgMCk7 Ci0gCXNzaGJ1Zl9mcmVlKGJ1Zik7Ci0gCXNpZ19mdXp6KGsxLCAic3NoLXJzYSIpOwotIAlzc2hr ZXlfZnJlZShrMSk7Ci0tCVRFU1RfRE9ORSgpOwotKwlURVNUX0RPTkUoKTsqLwotIAotIAlURVNU X1NUQVJUKCJmdXp6IFJTQSBTSEEyNTYgc2lnIik7Ci0gCWJ1ZiA9IGxvYWRfZmlsZSgicnNhXzEi KTsKLWRpZmYgLS1naXQgYS9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkuYyBi L3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X3NzaGtleS5jCi1pbmRleCBkMGM0NmE5MGIu LjdiNWU1MWI4MyAxMDA2NDQKLS0tLSBhL3JlZ3Jlc3MvdW5pdHRlc3RzL3NzaGtleS90ZXN0X3Nz aGtleS5jCi0rKysgYi9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkuYwotQEAg LTU5LDYgKzU5LDkgQEAgYnVpbGRfY2VydChzdHJ1Y3Qgc3NoYnVmICpiLCBzdHJ1Y3Qgc3Noa2V5 ICprLCBjb25zdCBjaGFyICp0eXBlLAotIAl1X2NoYXIgKnNpZ2Jsb2I7Ci0gCXNpemVfdCBzaWds ZW47Ci0gCi0rCS8qIHNzaC1yc2EgaW1wbGllcyBTSEExLCBmb3JiaWRkZW4gaW4gREVGQVVMVCBj cCAqLwotKwlpbnQgZXhwZWN0ZWQgPSAoc2lnX2FsZyA9PSBOVUxMIHx8IHN0cmNtcChzaWdfYWxn LCAic3NoLXJzYSIpID09IDApID8gU1NIX0VSUl9MSUJDUllQVE9fRVJST1IgOiAwOwotKwotIAlj YV9idWYgPSBzc2hidWZfbmV3KCk7Ci0gCUFTU0VSVF9QVFJfTkUoY2FfYnVmLCBOVUxMKTsKLSAJ QVNTRVJUX0lOVF9FUShzc2hrZXlfcHV0YihjYV9rZXksIGNhX2J1ZiksIDApOwotQEAgLTEwMCw4 ICsxMDMsOSBAQCBidWlsZF9jZXJ0KHN0cnVjdCBzc2hidWYgKmIsIHN0cnVjdCBzc2hrZXkgKmss IGNvbnN0IGNoYXIgKnR5cGUsCi0gCUFTU0VSVF9JTlRfRVEoc3NoYnVmX3B1dF9zdHJpbmcoYiwg TlVMTCwgMCksIDApOyAvKiByZXNlcnZlZCAqLwotIAlBU1NFUlRfSU5UX0VRKHNzaGJ1Zl9wdXRf c3RyaW5nYihiLCBjYV9idWYpLCAwKTsgLyogc2lnbmF0dXJlIGtleSAqLwotIAlBU1NFUlRfSU5U X0VRKHNzaGtleV9zaWduKHNpZ25fa2V5LCAmc2lnYmxvYiwgJnNpZ2xlbiwKLS0JICAgIHNzaGJ1 Zl9wdHIoYiksIHNzaGJ1Zl9sZW4oYiksIHNpZ19hbGcsIE5VTEwsIE5VTEwsIDApLCAwKTsKLS0J QVNTRVJUX0lOVF9FUShzc2hidWZfcHV0X3N0cmluZyhiLCBzaWdibG9iLCBzaWdsZW4pLCAwKTsg Lyogc2lnbmF0dXJlICovCi0rCSAgICBzc2hidWZfcHRyKGIpLCBzc2hidWZfbGVuKGIpLCBzaWdf YWxnLCBOVUxMLCBOVUxMLCAwKSwgZXhwZWN0ZWQpOwotKwlpZiAoZXhwZWN0ZWQgPT0gMCkKLSsJ CUFTU0VSVF9JTlRfRVEoc3NoYnVmX3B1dF9zdHJpbmcoYiwgc2lnYmxvYiwgc2lnbGVuKSwgMCk7 IC8qIHNpZ25hdHVyZSAqLwotIAotIAlmcmVlKHNpZ2Jsb2IpOwotIAlzc2hidWZfZnJlZShjYV9i dWYpOwotQEAgLTExOCwxNiArMTIyLDIwIEBAIHNpZ25hdHVyZV90ZXN0KHN0cnVjdCBzc2hrZXkg KmssIHN0cnVjdCBzc2hrZXkgKmJhZCwgY29uc3QgY2hhciAqc2lnX2FsZywKLSB7Ci0gCXNpemVf dCBsZW47Ci0gCXVfY2hhciAqc2lnOwotKwkvKiBzc2gtcnNhIGltcGxpZXMgU0hBMSwgZm9yYmlk ZGVuIGluIERFRkFVTFQgY3J5cHRvIHBvbGljaWVzICovCi0rCWludCBleHBlY3RlZCA9IChzaWdf YWxnICYmIHN0cmNtcChzaWdfYWxnLCAic3NoLXJzYSIpID09IDApID8gc3Noa2V5X3NpZ24oaywg JnNpZywgJmxlbiwgZCwgbCwgc2lnX2FsZywgTlVMTCwgTlVMTCwgMCkgOiAwOwotIAotIAlBU1NF UlRfSU5UX0VRKHNzaGtleV9zaWduKGssICZzaWcsICZsZW4sIGQsIGwsIHNpZ19hbGcsCi0tCSAg ICBOVUxMLCBOVUxMLCAwKSwgMCk7Ci0tCUFTU0VSVF9TSVpFX1RfR1QobGVuLCA4KTsKLS0JQVNT RVJUX1BUUl9ORShzaWcsIE5VTEwpOwotLQlBU1NFUlRfSU5UX0VRKHNzaGtleV92ZXJpZnkoaywg c2lnLCBsZW4sIGQsIGwsIE5VTEwsIDAsIE5VTEwpLCAwKTsKLS0JQVNTRVJUX0lOVF9ORShzc2hr ZXlfdmVyaWZ5KGJhZCwgc2lnLCBsZW4sIGQsIGwsIE5VTEwsIDAsIE5VTEwpLCAwKTsKLS0JLyog RnV6eiB0ZXN0IGlzIG1vcmUgY29tcHJlaGVuc2l2ZSwgdGhpcyBpcyBqdXN0IGEgc21va2UgdGVz dCAqLwotLQlzaWdbbGVuIC0gNV0gXj0gMHgxMDsKLS0JQVNTRVJUX0lOVF9ORShzc2hrZXlfdmVy aWZ5KGssIHNpZywgbGVuLCBkLCBsLCBOVUxMLCAwLCBOVUxMKSwgMCk7Ci0rCSAgICBOVUxMLCBO VUxMLCAwKSwgZXhwZWN0ZWQpOwotKwlpZiAoZXhwZWN0ZWQgPT0gMCkgewotKwkJQVNTRVJUX1NJ WkVfVF9HVChsZW4sIDgpOwotKwkJQVNTRVJUX1BUUl9ORShzaWcsIE5VTEwpOwotKwkJQVNTRVJU X0lOVF9FUShzc2hrZXlfdmVyaWZ5KGssIHNpZywgbGVuLCBkLCBsLCBOVUxMLCAwLCBOVUxMKSwg MCk7Ci0rCQlBU1NFUlRfSU5UX05FKHNzaGtleV92ZXJpZnkoYmFkLCBzaWcsIGxlbiwgZCwgbCwg TlVMTCwgMCwgTlVMTCksIDApOwotKwkJLyogRnV6eiB0ZXN0IGlzIG1vcmUgY29tcHJlaGVuc2l2 ZSwgdGhpcyBpcyBqdXN0IGEgc21va2UgdGVzdCAqLwotKwkJc2lnW2xlbiAtIDVdIF49IDB4MTA7 Ci0rCQlBU1NFUlRfSU5UX05FKHNzaGtleV92ZXJpZnkoaywgc2lnLCBsZW4sIGQsIGwsIE5VTEws IDAsIE5VTEwpLCAwKTsKLSsJfQotIAlmcmVlKHNpZyk7Ci0gfQotIAotQEAgLTU1Miw3ICs1NjAs NyBAQCBzc2hrZXlfdGVzdHModm9pZCkKLSAJQVNTRVJUX0lOVF9FUShzc2hrZXlfbG9hZF9wdWJs aWModGVzdF9kYXRhX2ZpbGUoInJzYV8xLnB1YiIpLCAmazIsCi0gCSAgICBOVUxMKSwgMCk7Ci0g CWszID0gZ2V0X3ByaXZhdGUoInJzYV8xIik7Ci0tCWJ1aWxkX2NlcnQoYiwgazIsICJzc2gtcnNh LWNlcnQtdjAxQG9wZW5zc2guY29tIiwgazMsIGsxLCBOVUxMKTsKLSsJYnVpbGRfY2VydChiLCBr MiwgInNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20iLCBrMywgazEsICJyc2Etc2hhMi0yNTYi KTsKLSAJQVNTRVJUX0lOVF9FUShzc2hrZXlfZnJvbV9ibG9iKHNzaGJ1Zl9wdHIoYiksIHNzaGJ1 Zl9sZW4oYiksICZrNCksCi0gCSAgICBTU0hfRVJSX0tFWV9DRVJUX0lOVkFMSURfU0lHTl9LRVkp OwotIAlBU1NFUlRfUFRSX0VRKGs0LCBOVUxMKTsKLWRpZmYgLS1naXQgYS9zZXJ2ZXJsb29wLmMg Yi9zZXJ2ZXJsb29wLmMKLWluZGV4IDVkM2IxOTRkMS4uNTU0MTFhNmI0IDEwMDY0NAotLS0tIGEv c2VydmVybG9vcC5jCi0rKysgYi9zZXJ2ZXJsb29wLmMKLUBAIC03Niw2ICs3Niw3IEBACi0gI2lu Y2x1ZGUgImF1dGgtb3B0aW9ucy5oIgotICNpbmNsdWRlICJzZXJ2ZXJsb29wLmgiCi0gI2luY2x1 ZGUgInNzaGVyci5oIgotKyNpbmNsdWRlICJjb21wYXQuaCIKLSAKLSBleHRlcm4gU2VydmVyT3B0 aW9ucyBvcHRpb25zOwotIAotQEAgLTcyMSw3ICs3MjIsMTAgQEAgc2VydmVyX2lucHV0X2hvc3Rr ZXlzX3Byb3ZlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaGJ1ZiAqKnJlc3BwKQotIAkJCWVs c2UgaWYgKHNzaC0+a2V4LT5mbGFncyAmIEtFWF9SU0FfU0hBMl8yNTZfU1VQUE9SVEVEKQotIAkJ CQlzaWdhbGcgPSAicnNhLXNoYTItMjU2IjsKLSAJCX0KLS0KLSsJCWlmIChzc2gtPmNvbXBhdCAm IFNTSF9SSF9SU0FTSUdTSEEgJiYgc2lnYWxnID09IE5VTEwpIHsKLSsJCQlzaWdhbGcgPSAicnNh LXNoYTItNTEyIjsKLSsJCQlkZWJ1ZzNfZigiU0hBMSBzaWduYXR1cmUgaXMgbm90IHN1cHBvcnRl ZCwgZmFsbGluZyBiYWNrIHRvICVzIiwgc2lnYWxnKTsKLSsJCX0KLSAJCWRlYnVnM19mKCJzaWdu ICVzIGtleSAoaW5kZXggJWQpIHVzaW5nIHNpZ2FsZyAlcyIsCi0gCQkgICAgc3Noa2V5X3R5cGUo a2V5KSwgbmR4LCBzaWdhbGcgPT0gTlVMTCA/ICJkZWZhdWx0IiA6IHNpZ2FsZyk7Ci0gCQlpZiAo KHIgPSBzc2hidWZfcHV0X2NzdHJpbmcoc2lnYnVmLAotZGlmZiAtLWdpdCBhL3NzaC1yc2EuYyBi L3NzaC1yc2EuYwotaW5kZXggOTQyOGRmOGQxLi43ODQzZjNlMjYgMTAwNjQ0Ci0tLS0gYS9zc2gt cnNhLmMKLSsrKyBiL3NzaC1yc2EuYwotQEAgLTUzMyw3ICs1MzMsOCBAQCBzc2hfcnNhX3Zlcmlm eShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXksCi0gCQkJcmV0ID0gU1NIX0VSUl9JTlZBTElEX0FS R1VNRU5UOwotIAkJCWdvdG8gb3V0OwotIAkJfQotLQkJaWYgKGhhc2hfYWxnICE9IHdhbnRfYWxn KSB7Ci0rCQlpZiAoaGFzaF9hbGcgIT0gd2FudF9hbGcgJiYgd2FudF9hbGcgIT0gU1NIX0RJR0VT VF9TSEExKSB7Ci0rCQkJZGVidWdfZigiVW5leHBlY3RlZCBkaWdlc3QgYWxnb3JpdGhtOiBnb3Qg JWQsIHdhbnRlZCAlZCIsIGhhc2hfYWxnLCB3YW50X2FsZyk7Ci0gCQkJcmV0ID0gU1NIX0VSUl9T SUdOQVRVUkVfSU5WQUxJRDsKLSAJCQlnb3RvIG91dDsKLSAJCX0KLWRpZmYgLS1naXQgYS9zc2hj b25uZWN0Mi5jIGIvc3NoY29ubmVjdDIuYwotaW5kZXggZjQzYzgxYWQ5Li4yZDk4ZmMzZGEgMTAw NjQ0Ci0tLS0gYS9zc2hjb25uZWN0Mi5jCi0rKysgYi9zc2hjb25uZWN0Mi5jCi1AQCAtMTQzNCw2 ICsxNDM0LDE0IEBAIGlkZW50aXR5X3NpZ24oc3RydWN0IGlkZW50aXR5ICppZCwgdV9jaGFyICoq c2lncCwgc2l6ZV90ICpsZW5wLAotIAkJCXJldHJpZWQgPSAxOwotIAkJCWdvdG8gcmV0cnlfcGlu OwotIAkJfQotKwkJaWYgKChyID09IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SKSAmJiBzdHJjbXAo InNzaC1yc2EiLCBhbGcpKSB7Ci0rCQkJY2hhciByc2Ffc2FmZV9hbGdbXSA9ICJyc2Etc2hhMi01 MTIiOwotKwkJCWRlYnVnM19mKCJ0cnlpbmcgdG8gZmFsbGJhY2sgdG8gYWxnb3JpdGhtICVzIiwg cnNhX3NhZmVfYWxnKTsKLSsKLSsJCQlpZiAoKHIgPSBzc2hrZXlfc2lnbihzaWduX2tleSwgc2ln cCwgbGVucCwgZGF0YSwgZGF0YWxlbiwKLSsJCQlyc2Ffc2FmZV9hbGcsIG9wdGlvbnMuc2tfcHJv dmlkZXIsIHBpbiwgY29tcGF0KSkgIT0gMCkKLSsJCQkJZGVidWdfZnIociwgInNzaGtleV9zaWdu IC0gUlNBIGZhbGxiYWNrIik7Ci0rCQl9Ci0gCQlnb3RvIG91dDsKLSAJfQotIAotZGlmZiAtLWdp dCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9uLmMKLWluZGV4IGU0OWU0ZmI1MS4uYTU1 OGJiYzMzIDEwMDY0NAotLS0tIGEvc3NoZC1zZXNzaW9uLmMKLSsrKyBiL3NzaGQtc2Vzc2lvbi5j Ci1AQCAtMTI4OCw2ICsxMjg4LDI3IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCi0gCi0gCWNo ZWNrX2lwX29wdGlvbnMoc3NoKTsKLSAKLSsJewotKwkJc3RydWN0IHNzaGtleSAqcnNha2V5ID0g TlVMTDsKLSsJCXJzYWtleSA9IGdldF9ob3N0a2V5X3ByaXZhdGVfYnlfdHlwZShLRVlfUlNBLCAw LCBzc2gpOwotKwkJaWYgKHJzYWtleSA9PSBOVUxMKQotKwkJCXJzYWtleSA9IGdldF9ob3N0a2V5 X3ByaXZhdGVfYnlfdHlwZShLRVlfUlNBX0NFUlQsIDAsIHNzaCk7Ci0rCi0rCQlpZiAocnNha2V5 ICE9IE5VTEwpIHsKLSsJCSAgICBzaXplX3Qgc2lnbl9zaXplID0gMDsKLSsJCSAgICB1X2NoYXIg KnRtcCA9IE5VTEw7Ci0rCQkgICAgdV9jaGFyIGRhdGFbXSA9ICJUZXN0IFNIQTEgdmVjdG9yIjsK LSsJCSAgICBpbnQgcmVzOwotKwotKwkJICAgIHJlcyA9IHNzaGtleV9zaWduKHJzYWtleSwgJnRt cCwgJnNpZ25fc2l6ZSwgZGF0YSwgc2l6ZW9mKGRhdGEpLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsK LSsJCSAgICBmcmVlKHRtcCk7Ci0rCQkgICAgaWYgKHJlcyA9PSBTU0hfRVJSX0xJQkNSWVBUT19F UlJPUikgewotKwkJCXZlcmJvc2VfZigiU0hBMSBpbiBzaWduYXR1cmVzIGlzIGRpc2FibGVkIGZv ciBSU0Ega2V5cyIpOwotKwkJICAgIAlzc2gtPmNvbXBhdCB8PSBTU0hfUkhfUlNBU0lHU0hBOwot KwkJICAgIH0KLSsJCX0KLSsJfQotKwotIAkvKiBQcmVwYXJlIHRoZSBjaGFubmVscyBsYXllciAq LwotIAljaGFubmVsX2luaXRfY2hhbm5lbHMoc3NoKTsKLSAJY2hhbm5lbF9zZXRfYWYoc3NoLCBv cHRpb25zLmFkZHJlc3NfZmFtaWx5KTsKLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDQy LW9wZW5zc2gtOS45cDEtc2VwYXJhdGUta2V5c2lnbi5wYXRjaCBiLzAwNDItb3BlbnNzaC05Ljlw MS1zZXBhcmF0ZS1rZXlzaWduLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjE1MzVlMjMKLS0tIC9kZXYvbnVsbAorKysgYi8wMDQyLW9wZW5zc2gtOS45cDEtc2VwYXJh dGUta2V5c2lnbi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitGcm9tIGYzZGUzMjgwOTMzMzRhOTAz ZWU1NDU5MzQwNzY1YjdmNTQ0MTIxNmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBE bWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE1IE1heSAy MDI1IDEzOjQzOjI5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNDIvNTRdIG9wZW5zc2gtOS45cDEt c2VwYXJhdGUta2V5c2lnbgorCistLS0KKyBzc2hfY29uZmlnLjUgfCAyICstCisgMSBmaWxlIGNo YW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zc2hf Y29uZmlnLjUgYi9zc2hfY29uZmlnLjUKK2luZGV4IDMwNmZhMWQ4YS4uYWI5OGMxNzJmIDEwMDY0 NAorLS0tIGEvc3NoX2NvbmZpZy41CisrKysgYi9zc2hfY29uZmlnLjUKK0BAIC03OTcsNyArNzk3 LDcgQEAgb3IKKyBUaGlzIG9wdGlvbiBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSBub24taG9zdHNw ZWNpZmljIHNlY3Rpb24uCisgU2VlCisgLlhyIHNzaC1rZXlzaWduIDgKKy1mb3IgbW9yZSBpbmZv cm1hdGlvbi4KKytmb3IgbW9yZSBpbmZvcm1hdGlvbi4gc3NoLWtleXNpZ24gc2hvdWxkIGJlIGlu c3RhbGxlZCBleHBsaWNpdGx5LgorIC5JdCBDbSBFc2NhcGVDaGFyCisgU2V0cyB0aGUgZXNjYXBl IGNoYXJhY3RlciAoZGVmYXVsdDoKKyAuUWwgfiApIC4KKy0tIAorMi41My4wCisKCmRpZmYgLS1n aXQgYS8wMDQzLW9wZW5zc2gtOS45cDEtb3BlbnNzbC1tbGtlbS5wYXRjaCBiLzAwNDMtb3BlbnNz aC05LjlwMS1vcGVuc3NsLW1sa2VtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjYwMmQ3YmUKLS0tIC9kZXYvbnVsbAorKysgYi8wMDQzLW9wZW5zc2gtOS45cDEtb3Bl bnNzbC1tbGtlbS5wYXRjaApAQCAtMCwwICsxLDQwMiBAQAorRnJvbSAxZDUzZDM0MjkwZGVmYmJi M2I2ZGFhOTY3Yzc0YjhmMDAyODJkYzdlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTog RG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxNSBNYXkg MjAyNSAxMzo0MzoyOSArMDIwMAorU3ViamVjdDogW1BBVENIIDQzLzU0XSBvcGVuc3NoLTkuOXAx LW9wZW5zc2wtbWxrZW0KKworLS0tCisga2V4LW5hbWVzLmMgICAgICAgICB8ICAyMyArKystCisg a2V4bWxrZW03Njh4MjU1MTkuYyB8IDI5MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMzEzIGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2tleC1uYW1lcy5jIGIva2V4LW5hbWVzLmMKK2luZGV4 IGMwNzYxYWU4Zi4uODgyZjI5MDViIDEwMDY0NAorLS0tIGEva2V4LW5hbWVzLmMKKysrKyBiL2tl eC1uYW1lcy5jCitAQCAtMTA4LDYgKzEwOCwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFs ZyBnc3Nfa2V4YWxnc1tdID0geworIAl7IE5VTEwsIDAsIC0xLCAtMSwgMH0sCisgfTsKKyAKKytz dGF0aWMgaW50IGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpCisreworKwlzdGF0aWMgaW50IGlzX2Zl dGNoZWQgPSAtMTsKKysKKysJaWYgKGlzX2ZldGNoZWQgPT0gLTEpIHsKKysJCUVWUF9LRU0gKm1s a2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKKysJCWlzX2Zl dGNoZWQgPSBtbGtlbTc2OCAhPSBOVUxMID8gMSA6IDA7CisrCQlFVlBfS0VNX2ZyZWUobWxrZW03 NjgpOworKwl9CisrCisrCXJldHVybiBpc19mZXRjaGVkOworK30KKysKKyBzdGF0aWMgY2hhciAq Cisga2V4X2FsZ19saXN0X2ludGVybmFsKGNoYXIgc2VwLCBjb25zdCBzdHJ1Y3Qga2V4YWxnICph bGdzKQorIHsKK0BAIC0xMTUsOCArMTI4LDEyIEBAIGtleF9hbGdfbGlzdF9pbnRlcm5hbChjaGFy IHNlcCwgY29uc3Qgc3RydWN0IGtleGFsZyAqYWxncykKKyAJY29uc3Qgc3RydWN0IGtleGFsZyAq azsKKyAJY2hhciBzZXBfc3RyWzJdID0ge3NlcCwgJ1wwJ307CisgCistCWZvciAoayA9IGtleGFs Z3M7IGstPm5hbWUgIT0gTlVMTDsgaysrKQorKwlmb3IgKGsgPSBrZXhhbGdzOyBrLT5uYW1lICE9 IE5VTEw7IGsrKykgeworKwkJaWYgKHN0cmNtcChrLT5uYW1lLCBLRVhfTUxLRU03NjhYMjU1MTlf U0hBMjU2KSA9PSAwCisrCQkJJiYgIWlzX21sa2VtNzY4X2F2YWlsYWJsZSgpKQorKwkJCWNvbnRp bnVlOworIAkJeGV4dGVuZGYoJnJldCwgc2VwX3N0ciwgIiVzIiwgay0+bmFtZSk7CisrCX0KKyAK KyAJcmV0dXJuIHJldDsKKyB9CitAQCAtMTM4LDYgKzE1NSwxMCBAQCBrZXhfYWxnX2J5X25hbWUo Y29uc3QgY2hhciAqbmFtZSkKKyB7CisgCWNvbnN0IHN0cnVjdCBrZXhhbGcgKms7CisgCisrCWlm IChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMAorKwkJJiYgIWlz X21sa2VtNzY4X2F2YWlsYWJsZSgpKQorKwlyZXR1cm4gTlVMTDsKKysKKyAJZm9yIChrID0ga2V4 YWxnczsgay0+bmFtZSAhPSBOVUxMOyBrKyspIHsKKyAJCWlmIChzdHJjbXAoay0+bmFtZSwgbmFt ZSkgPT0gMCkKKyAJCQlyZXR1cm4gazsKK2RpZmYgLS1naXQgYS9rZXhtbGtlbTc2OHgyNTUxOS5j IGIva2V4bWxrZW03Njh4MjU1MTkuYworaW5kZXggMjU4NWQxZGIzLi5hYjYxNjcyMjEgMTAwNjQ0 CistLS0gYS9rZXhtbGtlbTc2OHgyNTUxOS5jCisrKysgYi9rZXhtbGtlbTc2OHgyNTUxOS5jCitA QCAtNDQsMTAgKzQ0LDEyNyBAQAorICNpZmRlZiBVU0VfTUxLRU03NjhYMjU1MTkKKyAKKyAjaW5j bHVkZSAibGliY3J1eF9tbGtlbTc2OF9zaGEzLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrc3Rh dGljIGludAorK21sa2VtNzY4X2tleXBhaXJfZ2VuKHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1Ziwg dW5zaWduZWQgY2hhciAqcHJpdmtleWJ1ZikKKyt7CisrICAgIEVWUF9QS0VZX0NUWCAqY3R4ID0g TlVMTDsKKysgICAgRVZQX1BLRVkgKnBrZXkgPSBOVUxMOworKyAgICBpbnQgcmV0ID0gU1NIX0VS Ul9JTlRFUk5BTF9FUlJPUjsKKysgICAgc2l6ZV90IHB1YmtleV9zaXplID0gY3J5cHRvX2tlbV9t bGtlbTc2OF9QVUJMSUNLRVlCWVRFUywgcHJpdmtleV9zaXplID0gY3J5cHRvX2tlbV9tbGtlbTc2 OF9TRUNSRVRLRVlCWVRFUzsKKysKKysgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX25h bWUoTlVMTCwgIm1sa2VtNzY4IiwgTlVMTCk7CisrICAgIGlmIChjdHggPT0gTlVMTCkgeworKwly ZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJZ290byBlcnI7CisrICAgIH0KKysKKysg ICAgaWYgKEVWUF9QS0VZX2tleWdlbl9pbml0KGN0eCkgPD0gMAorKyAgICAgICAgfHwgRVZQX1BL RVlfa2V5Z2VuKGN0eCwgJnBrZXkpIDw9IDApIHsKKysJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9f RVJST1I7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBpZiAoRVZQX1BLRVlf Z2V0X3Jhd19wdWJsaWNfa2V5KHBrZXksIHB1YmtleWJ1ZiwgJnB1YmtleV9zaXplKSA8PSAwCisr CXx8IEVWUF9QS0VZX2dldF9yYXdfcHJpdmF0ZV9rZXkocGtleSwgcHJpdmtleWJ1ZiwgJnByaXZr ZXlfc2l6ZSkgPD0gMCkgeworKwlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlmIChwcml2a2V5X3NpemUgIT0gY3J5cHRv X2tlbV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFUworKwkgICAgfHwgcHVia2V5X3NpemUgIT0gY3J5 cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUykgeworKwlyZXQgPSBTU0hfRVJSX0xJQkNS WVBUT19FUlJPUjsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrICAgIHJldCA9IDA7Cisr CisrIGVycjoKKysgICAgRVZQX1BLRVlfZnJlZShwa2V5KTsKKysgICAgRVZQX1BLRVlfQ1RYX2Zy ZWUoY3R4KTsKKysgICAgaWYgKHJldCA9PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUikKKysJICAg RVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOworKyAgICByZXR1cm4gcmV0OworK30KKysKKytz dGF0aWMgaW50CisrbWxrZW03NjhfZW5jYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHVia2V5YnVm LCB1X2NoYXIgKnNlY3JldCwgdV9jaGFyICpvdXQpCisreworKyAgICBFVlBfUEtFWSAqcGtleSA9 IE5VTEw7CisrICAgIEVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKKysgICAgaW50IHIgPSBTU0hf RVJSX0lOVEVSTkFMX0VSUk9SOworKyAgICBzaXplX3Qgb3V0bGVuID0gY3J5cHRvX2tlbV9tbGtl bTc2OF9DSVBIRVJURVhUQllURVMsCisrCSAgIHNlY3JldGxlbiA9IGNyeXB0b19rZW1fbWxrZW03 NjhfQllURVM7CisrCisrICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3B1YmxpY19rZXlfZXgo TlVMTCwgIm1sa2VtNzY4IiwgTlVMTCwKKysJCSAgICBwdWJrZXlidWYsIGNyeXB0b19rZW1fbWxr ZW03NjhfUFVCTElDS0VZQllURVMpOworKyAgICBpZiAocGtleSA9PSBOVUxMKSB7CisrCXIgPSBT U0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKysJZ290byBlcnI7CisrICAgIH0KKysKKysgICAgY3R4 ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX3BrZXkoTlVMTCwgcGtleSwgTlVMTCk7CisrICAgIGlm IChjdHggPT0gTlVMTAorKwl8fCBFVlBfUEtFWV9lbmNhcHN1bGF0ZV9pbml0KGN0eCwgTlVMTCkg PD0gMAorKyAgICAgICAgfHwgRVZQX1BLRVlfZW5jYXBzdWxhdGUoY3R4LCBvdXQsICZvdXRsZW4s IHNlY3JldCwgJnNlY3JldGxlbikgPD0gMAorKwl8fCBzZWNyZXRsZW4gIT0gY3J5cHRvX2tlbV9t bGtlbTc2OF9CWVRFUworKwl8fCBvdXRsZW4gIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJU RVhUQllURVMpIHsKKysJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworKwlnb3RvIGVycjsK KysgICAgfQorKyAgICByID0gMDsKKysKKysgZXJyOgorKyAgICBFVlBfUEtFWV9mcmVlKHBrZXkp OworKyAgICBFVlBfUEtFWV9DVFhfZnJlZShjdHgpOworKyAgICBpZiAociA9PSBTU0hfRVJSX0xJ QkNSWVBUT19FUlJPUikKKysJICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOworKworKyAg ICByZXR1cm4gcjsKKyt9CisrCisrc3RhdGljIGludAorK21sa2VtNzY4X2RlY2FwX3NlY3JldChj b25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNvbnN0IHVfY2hhciAqd3JhcHBlZCwgdV9jaGFyICpz ZWNyZXQpCisreworKyAgICBFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisrICAgIEVWUF9QS0VZX0NU WCAqY3R4ID0gTlVMTDsKKysgICAgaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKyAg ICBzaXplX3Qgd3JhcHBlZGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVT LAorKwkgICBzZWNyZXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTOworKworKyAgICBw a2V5ID0gRVZQX1BLRVlfbmV3X3Jhd19wcml2YXRlX2tleV9leChOVUxMLCAibWxrZW03NjgiLCBO VUxMLAorKwkJICAgIHByaXZrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03NjhfU0VDUkVUS0VZQllU RVMpOworKyAgICBpZiAocGtleSA9PSBOVUxMKSB7CisrCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19F UlJPUjsKKysJZ290byBlcnI7CisrICAgIH0KKysKKysgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25l d19mcm9tX3BrZXkoTlVMTCwgcGtleSwgTlVMTCk7CisrICAgIGlmIChjdHggPT0gTlVMTAorKwl8 fCBFVlBfUEtFWV9kZWNhcHN1bGF0ZV9pbml0KGN0eCwgTlVMTCkgPD0gMAorKyAgICAgICAgfHwg RVZQX1BLRVlfZGVjYXBzdWxhdGUoY3R4LCBzZWNyZXQsICZzZWNyZXRsZW4sIHdyYXBwZWQsIHdy YXBwZWRsZW4pIDw9IDAKKysJfHwgc2VjcmV0bGVuICE9IGNyeXB0b19rZW1fbWxrZW03NjhfQllU RVMpIHsKKysJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworKwlnb3RvIGVycjsKKysgICAg fQorKyAgICByID0gMDsKKysKKysgZXJyOgorKyAgICBFVlBfUEtFWV9mcmVlKHBrZXkpOworKyAg ICBFVlBfUEtFWV9DVFhfZnJlZShjdHgpOworKworKyAgICBpZiAociA9PSBTU0hfRVJSX0xJQkNS WVBUT19FUlJPUikKKysJICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOworKworKyAgICBy ZXR1cm4gcjsKKyt9CisgCisgaW50Cisga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9rZXlwYWlyKHN0 cnVjdCBrZXggKmtleCkKKyB7CisrI2lmIDAKKyAJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsK KyAJdV9jaGFyIHJuZFtMSUJDUlVYX01MX0tFTV9LRVlfUEFJUl9QUk5HX0xFTl0sICpjcCA9IE5V TEw7CisgCXNpemVfdCBuZWVkOworQEAgLTgyLDYgKzE5OSwzNiBAQCBrZXhfa2VtX21sa2VtNzY4 eDI1NTE5X2tleXBhaXIoc3RydWN0IGtleCAqa2V4KQorIAlleHBsaWNpdF9iemVybyhybmQsIHNp emVvZihybmQpKTsKKyAJc3NoYnVmX2ZyZWUoYnVmKTsKKyAJcmV0dXJuIHI7CisrI2Vsc2UKKysJ c3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKKysJdV9jaGFyICpjcCA9IE5VTEw7CisrCXNpemVf dCBuZWVkOworKwlpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCisrCWlmICgoYnVm ID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQorKwkJcmV0dXJuIFNTSF9FUlJfQUxMT0NfRkFJTDsK KysJbmVlZCA9IGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMgKyBDVVJWRTI1NTE5 X1NJWkU7CisrCWlmICgociA9IHNzaGJ1Zl9yZXNlcnZlKGJ1ZiwgbmVlZCwgJmNwKSkgIT0gMCkK KysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBtbGtlbTc2OF9rZXlwYWlyX2dlbihjcCwga2V4LT5t bGtlbTc2OF9jbGllbnRfa2V5KSkgIT0gMCkKKysJCWdvdG8gb3V0OworKyNpZmRlZiBERUJVR19L RVhFQ0RICisrCWR1bXBfZGlnZXN0KCJjbGllbnQgcHVibGljIGtleSBtbGtlbTc2ODoiLCBjcCwK KysJICAgIGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMpOworKyNlbmRpZgorKwlj cCArPSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTOworKwlrZXhjMjU1MTlfa2V5 Z2VuKGtleC0+YzI1NTE5X2NsaWVudF9rZXksIGNwKTsKKysjaWZkZWYgREVCVUdfS0VYRUNESAor KwlkdW1wX2RpZ2VzdCgiY2xpZW50IHB1YmxpYyBrZXkgYzI1NTE5OiIsIGNwLCBDVVJWRTI1NTE5 X1NJWkUpOworKyNlbmRpZgorKwkvKiBzdWNjZXNzICovCisrCXIgPSAwOworKwlrZXgtPmNsaWVu dF9wdWIgPSBidWY7CisrCWJ1ZiA9IE5VTEw7CisrIG91dDoKKysJc3NoYnVmX2ZyZWUoYnVmKTsK KysJcmV0dXJuIHI7CisrI2VuZGlmCisgfQorIAorIGludAorQEAgLTg5LDYgKzIzNiw3IEBAIGtl eF9rZW1fbWxrZW03Njh4MjU1MTlfZW5jKHN0cnVjdCBrZXggKmtleCwKKyAgICBjb25zdCBzdHJ1 Y3Qgc3NoYnVmICpjbGllbnRfYmxvYiwgc3RydWN0IHNzaGJ1ZiAqKnNlcnZlcl9ibG9icCwKKyAg ICBzdHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHApCisgeworKyNpZiAwCisgCXN0cnVjdCBz c2hidWYgKnNlcnZlcl9ibG9iID0gTlVMTDsKKyAJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsK KyAJY29uc3QgdV9jaGFyICpjbGllbnRfcHViOworQEAgLTE4MSwxMiArMzI5LDk3IEBAIGtleF9r ZW1fbWxrZW03Njh4MjU1MTlfZW5jKHN0cnVjdCBrZXggKmtleCwKKyAJc3NoYnVmX2ZyZWUoc2Vy dmVyX2Jsb2IpOworIAlzc2hidWZfZnJlZShidWYpOworIAlyZXR1cm4gcjsKKysjZWxzZQorKwlz dHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxvYiA9IE5VTEw7CisrCXN0cnVjdCBzc2hidWYgKmJ1ZiA9 IE5VTEw7CisrCWNvbnN0IHVfY2hhciAqY2xpZW50X3B1YjsKKysJdV9jaGFyIHNlcnZlcl9wdWJb Q1VSVkUyNTUxOV9TSVpFXSwgc2VydmVyX2tleVtDVVJWRTI1NTE5X1NJWkVdOworKwl1X2NoYXIg aGFzaFtTU0hfRElHRVNUX01BWF9MRU5HVEhdOworKwlzaXplX3QgbmVlZDsKKysJaW50IHIgPSBT U0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKwlzdHJ1Y3QgbGliY3J1eF9tbGtlbTc2OF9lbmNfcmVz dWx0IGVuYzsgLyogRklYTUUgKi8KKysKKysJKnNlcnZlcl9ibG9icCA9IE5VTEw7CisrCSpzaGFy ZWRfc2VjcmV0cCA9IE5VTEw7CisrCisrCS8qIGNsaWVudF9ibG9iIGNvbnRhaW5zIGJvdGggS0VN IGFuZCBFQ0RIIGNsaWVudCBwdWJrZXlzICovCisrCW5lZWQgPSBjcnlwdG9fa2VtX21sa2VtNzY4 X1BVQkxJQ0tFWUJZVEVTICsgQ1VSVkUyNTUxOV9TSVpFOworKwlpZiAoc3NoYnVmX2xlbihjbGll bnRfYmxvYikgIT0gbmVlZCkgeworKwkJciA9IFNTSF9FUlJfU0lHTkFUVVJFX0lOVkFMSUQ7Cisr CQlnb3RvIG91dDsKKysJfQorKwljbGllbnRfcHViID0gc3NoYnVmX3B0cihjbGllbnRfYmxvYik7 CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9kaWdlc3QoImNsaWVudCBwdWJsaWMga2V5 IG1sa2VtNzY4OiIsIGNsaWVudF9wdWIsCisrCSAgICBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJ Q0tFWUJZVEVTKTsKKysJZHVtcF9kaWdlc3QoImNsaWVudCBwdWJsaWMga2V5IDI1NTE5OiIsCisr CSAgICBjbGllbnRfcHViICsgY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUywKKysJ ICAgIENVUlZFMjU1MTlfU0laRSk7CisrI2VuZGlmCisrCisrCS8qIGFsbG9jYXRlIGJ1ZmZlciBm b3IgY29uY2F0ZW5hdGlvbiBvZiBLRU0ga2V5IGFuZCBFQ0RIIHNoYXJlZCBrZXkgKi8KKysJLyog dGhlIGJ1ZmZlciB3aWxsIGJlIGhhc2hlZCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc2hhcmVkIHNl Y3JldCAqLworKwlpZiAoKGJ1ZiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkgeworKwkJciA9IFNT SF9FUlJfQUxMT0NfRkFJTDsKKysJCWdvdG8gb3V0OworKwl9CisrCS8qIGFsbG9jYXRlIHNwYWNl IGZvciBlbmNyeXB0ZWQgS0VNIGtleSBhbmQgRUNESCBwdWIga2V5ICovCisrCWlmICgoc2VydmVy X2Jsb2IgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKKysJCXIgPSBTU0hfRVJSX0FMTE9DX0ZB SUw7CisrCQlnb3RvIG91dDsKKysJfQorKwlpZiAobWxrZW03NjhfZW5jYXBfc2VjcmV0KGNsaWVu dF9wdWIsIGVuYy5zbmQsIGVuYy5mc3QudmFsdWUpICE9IDApCisrCQlnb3RvIG91dDsKKysKKysJ LyogZ2VuZXJhdGUgRUNESCBrZXkgcGFpciwgc3RvcmUgc2VydmVyIHB1YmtleSBhZnRlciBjaXBo ZXJ0ZXh0ICovCisrCWtleGMyNTUxOV9rZXlnZW4oc2VydmVyX2tleSwgc2VydmVyX3B1Yik7Cisr CWlmICgociA9IHNzaGJ1Zl9wdXQoYnVmLCBlbmMuc25kLCBzaXplb2YoZW5jLnNuZCkpKSAhPSAw IHx8CisrCSAgICAociA9IHNzaGJ1Zl9wdXQoc2VydmVyX2Jsb2IsIGVuYy5mc3QudmFsdWUsIHNp emVvZihlbmMuZnN0LnZhbHVlKSkpICE9IDAgfHwKKysJICAgIChyID0gc3NoYnVmX3B1dChzZXJ2 ZXJfYmxvYiwgc2VydmVyX3B1Yiwgc2l6ZW9mKHNlcnZlcl9wdWIpKSkgIT0gMCkKKysJCWdvdG8g b3V0OworKwkvKiBhcHBlbmQgRUNESCBzaGFyZWQga2V5ICovCisrCWNsaWVudF9wdWIgKz0gY3J5 cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUzsKKysJaWYgKChyID0ga2V4YzI1NTE5X3No YXJlZF9rZXlfZXh0KHNlcnZlcl9rZXksIGNsaWVudF9wdWIsIGJ1ZiwgMSkpIDwgMCkKKysJCWdv dG8gb3V0OworKwlpZiAoKHIgPSBzc2hfZGlnZXN0X2J1ZmZlcihrZXgtPmhhc2hfYWxnLCBidWYs IGhhc2gsIHNpemVvZihoYXNoKSkpICE9IDApCisrCQlnb3RvIG91dDsKKysjaWZkZWYgREVCVUdf S0VYRUNESAorKwlkdW1wX2RpZ2VzdCgic2VydmVyIHB1YmxpYyBrZXkgMjU1MTk6Iiwgc2VydmVy X3B1YiwgQ1VSVkUyNTUxOV9TSVpFKTsKKysJZHVtcF9kaWdlc3QoInNlcnZlciBjaXBoZXIgdGV4 dDoiLAorKwkgICAgZW5jLmZzdC52YWx1ZSwgc2l6ZW9mKGVuYy5mc3QudmFsdWUpKTsKKysJZHVt cF9kaWdlc3QoInNlcnZlciBrZW0ga2V5OiIsIGVuYy5zbmQsIHNpemVvZihlbmMuc25kKSk7Cisr CWR1bXBfZGlnZXN0KCJjb25jYXRlbmF0aW9uIG9mIEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtl eToiLAorKwkgICAgc3NoYnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOworKyNlbmRpZgor KwkvKiBzdHJpbmctZW5jb2RlZCBoYXNoIGlzIHJlc3VsdGluZyBzaGFyZWQgc2VjcmV0ICovCisr CXNzaGJ1Zl9yZXNldChidWYpOworKwlpZiAoKHIgPSBzc2hidWZfcHV0X3N0cmluZyhidWYsIGhh c2gsCisrCSAgICBzc2hfZGlnZXN0X2J5dGVzKGtleC0+aGFzaF9hbGcpKSkgIT0gMCkKKysJCWdv dG8gb3V0OworKyNpZmRlZiBERUJVR19LRVhFQ0RICisrCWR1bXBfZGlnZXN0KCJlbmNvZGVkIHNo YXJlZCBzZWNyZXQ6Iiwgc3NoYnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOworKyNlbmRp ZgorKwkvKiBzdWNjZXNzICovCisrCXIgPSAwOworKwkqc2VydmVyX2Jsb2JwID0gc2VydmVyX2Js b2I7CisrCSpzaGFyZWRfc2VjcmV0cCA9IGJ1ZjsKKysJc2VydmVyX2Jsb2IgPSBOVUxMOworKwli dWYgPSBOVUxMOworKyBvdXQ6CisrCWV4cGxpY2l0X2J6ZXJvKGhhc2gsIHNpemVvZihoYXNoKSk7 CisrCWV4cGxpY2l0X2J6ZXJvKHNlcnZlcl9rZXksIHNpemVvZihzZXJ2ZXJfa2V5KSk7CisrCWV4 cGxpY2l0X2J6ZXJvKCZlbmMsIHNpemVvZihlbmMpKTsKKysJc3NoYnVmX2ZyZWUoc2VydmVyX2Js b2IpOworKwlzc2hidWZfZnJlZShidWYpOworKwlyZXR1cm4gcjsKKysjZW5kaWYKKyB9CisgCisg aW50Cisga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMoc3RydWN0IGtleCAqa2V4LAorICAgICBj b25zdCBzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxvYiwgc3RydWN0IHNzaGJ1ZiAqKnNoYXJlZF9z ZWNyZXRwKQorIHsKKysjaWYgMAorIAlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOworIAl1X2No YXIgbWxrZW1fa2V5W2NyeXB0b19rZW1fbWxrZW03NjhfQllURVNdOworIAljb25zdCB1X2NoYXIg KmNpcGhlcnRleHQsICpzZXJ2ZXJfcHViOworQEAgLTI1NCw2ICs0ODcsNjQgQEAga2V4X2tlbV9t bGtlbTc2OHgyNTUxOV9kZWMoc3RydWN0IGtleCAqa2V4LAorIAlleHBsaWNpdF9iemVybyhtbGtl bV9rZXksIHNpemVvZihtbGtlbV9rZXkpKTsKKyAJc3NoYnVmX2ZyZWUoYnVmKTsKKyAJcmV0dXJu IHI7CisrI2Vsc2UKKysJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKKysJY29uc3QgdV9jaGFy ICpjaXBoZXJ0ZXh0LCAqc2VydmVyX3B1YjsKKysJdV9jaGFyIGhhc2hbU1NIX0RJR0VTVF9NQVhf TEVOR1RIXTsKKysJdV9jaGFyIGRlY2FwW2NyeXB0b19rZW1fbWxrZW03NjhfQllURVNdOworKwlz aXplX3QgbmVlZDsKKysJaW50IHI7CisrCisrCSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7CisrCisr CW5lZWQgPSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUyArIENVUlZFMjU1MTlf U0laRTsKKysJaWYgKHNzaGJ1Zl9sZW4oc2VydmVyX2Jsb2IpICE9IG5lZWQpIHsKKysJCXIgPSBT U0hfRVJSX1NJR05BVFVSRV9JTlZBTElEOworKwkJZ290byBvdXQ7CisrCX0KKysJY2lwaGVydGV4 dCA9IHNzaGJ1Zl9wdHIoc2VydmVyX2Jsb2IpOworKwlzZXJ2ZXJfcHViID0gY2lwaGVydGV4dCAr IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTOworKwkvKiBoYXNoIGNvbmNhdGVu YXRpb24gb2YgS0VNIGtleSBhbmQgRUNESCBzaGFyZWQga2V5ICovCisrCWlmICgoYnVmID0gc3No YnVmX25ldygpKSA9PSBOVUxMKSB7CisrCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOworKwkJZ290 byBvdXQ7CisrCX0KKysjaWZkZWYgREVCVUdfS0VYRUNESAorKwlkdW1wX2RpZ2VzdCgic2VydmVy IGNpcGhlciB0ZXh0OiIsIGNpcGhlcnRleHQsIGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVY VEJZVEVTKTsKKysJZHVtcF9kaWdlc3QoInNlcnZlciBwdWJsaWMga2V5IGMyNTUxOToiLCBzZXJ2 ZXJfcHViLCBDVVJWRTI1NTE5X1NJWkUpOworKyNlbmRpZgorKwlpZiAoKHIgPSBtbGtlbTc2OF9k ZWNhcF9zZWNyZXQoa2V4LT5tbGtlbTc2OF9jbGllbnRfa2V5LCBjaXBoZXJ0ZXh0LCBkZWNhcCkp ICE9IDApCisrCQlnb3RvIG91dDsKKysJaWYgKChyID0gc3NoYnVmX3B1dChidWYsIGRlY2FwLCBz aXplb2YoZGVjYXApKSkgIT0gMCkKKysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBrZXhjMjU1MTlf c2hhcmVkX2tleV9leHQoa2V4LT5jMjU1MTlfY2xpZW50X2tleSwgc2VydmVyX3B1YiwKKysJICAg IGJ1ZiwgMSkpIDwgMCkKKysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBzc2hfZGlnZXN0X2J1ZmZl cihrZXgtPmhhc2hfYWxnLCBidWYsCisrCSAgICBoYXNoLCBzaXplb2YoaGFzaCkpKSAhPSAwKQor KwkJZ290byBvdXQ7CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9kaWdlc3QoImNsaWVu dCBrZW0ga2V5OiIsIGRlY2FwLCBzaXplb2YoZGVjYXApKTsKKysJZHVtcF9kaWdlc3QoImNvbmNh dGVuYXRpb24gb2YgS0VNIGtleSBhbmQgRUNESCBzaGFyZWQga2V5OiIsCisrCSAgICBzc2hidWZf cHRyKGJ1ZiksIHNzaGJ1Zl9sZW4oYnVmKSk7CisrI2VuZGlmCisrCXNzaGJ1Zl9yZXNldChidWYp OworKwlpZiAoKHIgPSBzc2hidWZfcHV0X3N0cmluZyhidWYsIGhhc2gsCisrCSAgICBzc2hfZGln ZXN0X2J5dGVzKGtleC0+aGFzaF9hbGcpKSkgIT0gMCkKKysJCWdvdG8gb3V0OworKyNpZmRlZiBE RUJVR19LRVhFQ0RICisrCWR1bXBfZGlnZXN0KCJlbmNvZGVkIHNoYXJlZCBzZWNyZXQ6Iiwgc3No YnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOworKyNlbmRpZgorKwkvKiBzdWNjZXNzICov CisrCXIgPSAwOworKwkqc2hhcmVkX3NlY3JldHAgPSBidWY7CisrCWJ1ZiA9IE5VTEw7CisrIG91 dDoKKysJZXhwbGljaXRfYnplcm8oaGFzaCwgc2l6ZW9mKGhhc2gpKTsKKysJZXhwbGljaXRfYnpl cm8oZGVjYXAsIHNpemVvZihkZWNhcCkpOworKwlzc2hidWZfZnJlZShidWYpOworKwlyZXR1cm4g cjsKKysjZW5kaWYKKyB9CisgI2Vsc2UgLyogVVNFX01MS0VNNzY4WDI1NTE5ICovCisgaW50Cist LSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0IGEvMDA0My1vcGVuc3NoLTkuOXAxLXNlcGFyYXRlLWtl eXNpZ24ucGF0Y2ggYi8wMDQzLW9wZW5zc2gtOS45cDEtc2VwYXJhdGUta2V5c2lnbi5wYXRjaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBhNmQ0Zi4uMDAwMDAwMAotLS0gYS8wMDQz LW9wZW5zc2gtOS45cDEtc2VwYXJhdGUta2V5c2lnbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDI1ICswLDAgQEAKLUZyb20gMTc5OWVhN2FkMjFhNTc5Yjg2NGE1MzY3MDlkNzMyZjRhOGU1MzNk YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxk bWl0QGdtYWlsLmNvbT4KLURhdGU6IFRodSwgMTUgTWF5IDIwMjUgMTM6NDM6MjkgKzAyMDAKLVN1 YmplY3Q6IFtQQVRDSCA0My81M10gb3BlbnNzaC05LjlwMS1zZXBhcmF0ZS1rZXlzaWduCi0KLS0t LQotIHNzaF9jb25maWcuNSB8IDIgKy0KLSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyks IDEgZGVsZXRpb24oLSkKLQotZGlmZiAtLWdpdCBhL3NzaF9jb25maWcuNSBiL3NzaF9jb25maWcu NQotaW5kZXggOGFjNWUxNjMzLi5hMDZmYmZhMTEgMTAwNjQ0Ci0tLS0gYS9zc2hfY29uZmlnLjUK LSsrKyBiL3NzaF9jb25maWcuNQotQEAgLTc5Nyw3ICs3OTcsNyBAQCBvcgotIFRoaXMgb3B0aW9u IHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlIG5vbi1ob3N0c3BlY2lmaWMgc2VjdGlvbi4KLSBTZWUK LSAuWHIgc3NoLWtleXNpZ24gOAotLWZvciBtb3JlIGluZm9ybWF0aW9uLgotK2ZvciBtb3JlIGlu Zm9ybWF0aW9uLiBzc2gta2V5c2lnbiBzaG91bGQgYmUgaW5zdGFsbGVkIGV4cGxpY2l0bHkuCi0g Lkl0IENtIEVzY2FwZUNoYXIKLSBTZXRzIHRoZSBlc2NhcGUgY2hhcmFjdGVyIChkZWZhdWx0Ogot IC5RbCB+ICkgLgotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAwNDQtb3BlbnNzaC05Ljlw MS1vcGVuc3NsLW1sa2VtLnBhdGNoIGIvMDA0NC1vcGVuc3NoLTkuOXAxLW9wZW5zc2wtbWxrZW0u cGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNzI2NDcuLjAwMDAwMDAKLS0t IGEvMDA0NC1vcGVuc3NoLTkuOXAxLW9wZW5zc2wtbWxrZW0ucGF0Y2gKKysrIC9kZXYvbnVsbApA QCAtMSw0MDIgKzAsMCBAQAotRnJvbSAyMTIwMjM2MmY0ZGRhZWI2MzBkODczZmI0MjYwMzkwMDRh YzgyMzM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkg PGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogVGh1LCAxNSBNYXkgMjAyNSAxMzo0MzoyOSArMDIw MAotU3ViamVjdDogW1BBVENIIDQ0LzUzXSBvcGVuc3NoLTkuOXAxLW9wZW5zc2wtbWxrZW0KLQot LS0tCi0ga2V4LW5hbWVzLmMgICAgICAgICB8ICAyMyArKystCi0ga2V4bWxrZW03Njh4MjU1MTku YyB8IDI5MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotIDIg ZmlsZXMgY2hhbmdlZCwgMzEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKLQotZGlmZiAt LWdpdCBhL2tleC1uYW1lcy5jIGIva2V4LW5hbWVzLmMKLWluZGV4IDEzNjBhNDA5NS4uOWM5NmU1 Y2IwIDEwMDY0NAotLS0tIGEva2V4LW5hbWVzLmMKLSsrKyBiL2tleC1uYW1lcy5jCi1AQCAtMTA5 LDYgKzEwOSwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyBnc3Nfa2V4YWxnc1tdID0g ewotIAl7IE5VTEwsIDAsIC0xLCAtMSwgMH0sCi0gfTsKLSAKLStzdGF0aWMgaW50IGlzX21sa2Vt NzY4X2F2YWlsYWJsZSgpCi0rewotKwlzdGF0aWMgaW50IGlzX2ZldGNoZWQgPSAtMTsKLSsKLSsJ aWYgKGlzX2ZldGNoZWQgPT0gLTEpIHsKLSsJCUVWUF9LRU0gKm1sa2VtNzY4ID0gRVZQX0tFTV9m ZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKLSsJCWlzX2ZldGNoZWQgPSBtbGtlbTc2OCAh PSBOVUxMID8gMSA6IDA7Ci0rCQlFVlBfS0VNX2ZyZWUobWxrZW03NjgpOwotKwl9Ci0rCi0rCXJl dHVybiBpc19mZXRjaGVkOwotK30KLSsKLSBzdGF0aWMgY2hhciAqCi0ga2V4X2FsZ19saXN0X2lu dGVybmFsKGNoYXIgc2VwLCBjb25zdCBzdHJ1Y3Qga2V4YWxnICphbGdzKQotIHsKLUBAIC0xMTYs OCArMTI5LDEyIEBAIGtleF9hbGdfbGlzdF9pbnRlcm5hbChjaGFyIHNlcCwgY29uc3Qgc3RydWN0 IGtleGFsZyAqYWxncykKLSAJY29uc3Qgc3RydWN0IGtleGFsZyAqazsKLSAJY2hhciBzZXBfc3Ry WzJdID0ge3NlcCwgJ1wwJ307Ci0gCi0tCWZvciAoayA9IGtleGFsZ3M7IGstPm5hbWUgIT0gTlVM TDsgaysrKQotKwlmb3IgKGsgPSBrZXhhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgewotKwkJ aWYgKHN0cmNtcChrLT5uYW1lLCBLRVhfTUxLRU03NjhYMjU1MTlfU0hBMjU2KSA9PSAwCi0rCQkJ JiYgIWlzX21sa2VtNzY4X2F2YWlsYWJsZSgpKQotKwkJCWNvbnRpbnVlOwotIAkJeGV4dGVuZGYo JnJldCwgc2VwX3N0ciwgIiVzIiwgay0+bmFtZSk7Ci0rCX0KLSAKLSAJcmV0dXJuIHJldDsKLSB9 Ci1AQCAtMTM5LDYgKzE1NiwxMCBAQCBrZXhfYWxnX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkK LSB7Ci0gCWNvbnN0IHN0cnVjdCBrZXhhbGcgKms7Ci0gCi0rCWlmIChzdHJjbXAobmFtZSwgS0VY X01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMAotKwkJJiYgIWlzX21sa2VtNzY4X2F2YWlsYWJs ZSgpKQotKwlyZXR1cm4gTlVMTDsKLSsKLSAJZm9yIChrID0ga2V4YWxnczsgay0+bmFtZSAhPSBO VUxMOyBrKyspIHsKLSAJCWlmIChzdHJjbXAoay0+bmFtZSwgbmFtZSkgPT0gMCkKLSAJCQlyZXR1 cm4gazsKLWRpZmYgLS1naXQgYS9rZXhtbGtlbTc2OHgyNTUxOS5jIGIva2V4bWxrZW03Njh4MjU1 MTkuYwotaW5kZXggMjU4NWQxZGIzLi5hYjYxNjcyMjEgMTAwNjQ0Ci0tLS0gYS9rZXhtbGtlbTc2 OHgyNTUxOS5jCi0rKysgYi9rZXhtbGtlbTc2OHgyNTUxOS5jCi1AQCAtNDQsMTAgKzQ0LDEyNyBA QAotICNpZmRlZiBVU0VfTUxLRU03NjhYMjU1MTkKLSAKLSAjaW5jbHVkZSAibGliY3J1eF9tbGtl bTc2OF9zaGEzLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0rc3RhdGljIGludAotK21sa2VtNzY4 X2tleXBhaXJfZ2VuKHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAqcHJp dmtleWJ1ZikKLSt7Ci0rICAgIEVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgRVZQX1BL RVkgKnBrZXkgPSBOVUxMOwotKyAgICBpbnQgcmV0ID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsK LSsgICAgc2l6ZV90IHB1YmtleV9zaXplID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlC WVRFUywgcHJpdmtleV9zaXplID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFUzsK LSsKLSsgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX25hbWUoTlVMTCwgIm1sa2VtNzY4 IiwgTlVMTCk7Ci0rICAgIGlmIChjdHggPT0gTlVMTCkgewotKwlyZXQgPSBTU0hfRVJSX0xJQkNS WVBUT19FUlJPUjsKLSsJZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKEVWUF9QS0VZX2tl eWdlbl9pbml0KGN0eCkgPD0gMAotKyAgICAgICAgfHwgRVZQX1BLRVlfa2V5Z2VuKGN0eCwgJnBr ZXkpIDw9IDApIHsKLSsJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0rICAgICAgICBn b3RvIGVycjsKLSsgICAgfQotKwotKyAgICBpZiAoRVZQX1BLRVlfZ2V0X3Jhd19wdWJsaWNfa2V5 KHBrZXksIHB1YmtleWJ1ZiwgJnB1YmtleV9zaXplKSA8PSAwCi0rCXx8IEVWUF9QS0VZX2dldF9y YXdfcHJpdmF0ZV9rZXkocGtleSwgcHJpdmtleWJ1ZiwgJnByaXZrZXlfc2l6ZSkgPD0gMCkgewot KwlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAg ICB9Ci0rCi0rICAgIGlmIChwcml2a2V5X3NpemUgIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNS RVRLRVlCWVRFUwotKwkgICAgfHwgcHVia2V5X3NpemUgIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9Q VUJMSUNLRVlCWVRFUykgewotKwlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rICAgIHJldCA9IDA7Ci0rCi0rIGVycjoKLSsgICAgRVZQ X1BLRVlfZnJlZShwa2V5KTsKLSsgICAgRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKLSsgICAgaWYg KHJldCA9PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUikKLSsJICAgRVJSX3ByaW50X2Vycm9yc19m cChzdGRlcnIpOwotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLStzdGF0aWMgaW50Ci0rbWxrZW03 NjhfZW5jYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHVia2V5YnVmLCB1X2NoYXIgKnNlY3JldCwg dV9jaGFyICpvdXQpCi0rewotKyAgICBFVlBfUEtFWSAqcGtleSA9IE5VTEw7Ci0rICAgIEVWUF9Q S0VZX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9S OwotKyAgICBzaXplX3Qgb3V0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllU RVMsCi0rCSAgIHNlY3JldGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVM7Ci0rCi0rICAg IHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3B1YmxpY19rZXlfZXgoTlVMTCwgIm1sa2VtNzY4Iiwg TlVMTCwKLSsJCSAgICBwdWJrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllU RVMpOwotKyAgICBpZiAocGtleSA9PSBOVUxMKSB7Ci0rCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19F UlJPUjsKLSsJZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25l d19mcm9tX3BrZXkoTlVMTCwgcGtleSwgTlVMTCk7Ci0rICAgIGlmIChjdHggPT0gTlVMTAotKwl8 fCBFVlBfUEtFWV9lbmNhcHN1bGF0ZV9pbml0KGN0eCwgTlVMTCkgPD0gMAotKyAgICAgICAgfHwg RVZQX1BLRVlfZW5jYXBzdWxhdGUoY3R4LCBvdXQsICZvdXRsZW4sIHNlY3JldCwgJnNlY3JldGxl bikgPD0gMAotKwl8fCBzZWNyZXRsZW4gIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUwotKwl8 fCBvdXRsZW4gIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVMpIHsKLSsJciA9 IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotKwlnb3RvIGVycjsKLSsgICAgfQotKyAgICByID0g MDsKLSsKLSsgZXJyOgotKyAgICBFVlBfUEtFWV9mcmVlKHBrZXkpOwotKyAgICBFVlBfUEtFWV9D VFhfZnJlZShjdHgpOwotKyAgICBpZiAociA9PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUikKLSsJ ICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotKwotKyAgICByZXR1cm4gcjsKLSt9Ci0r Ci0rc3RhdGljIGludAotK21sa2VtNzY4X2RlY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnByaXZr ZXlidWYsIGNvbnN0IHVfY2hhciAqd3JhcHBlZCwgdV9jaGFyICpzZWNyZXQpCi0rewotKyAgICBF VlBfUEtFWSAqcGtleSA9IE5VTEw7Ci0rICAgIEVWUF9QS0VZX0NUWCAqY3R4ID0gTlVMTDsKLSsg ICAgaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKyAgICBzaXplX3Qgd3JhcHBlZGxl biA9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTLAotKwkgICBzZWNyZXRsZW4g PSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTOwotKwotKyAgICBwa2V5ID0gRVZQX1BLRVlfbmV3 X3Jhd19wcml2YXRlX2tleV9leChOVUxMLCAibWxrZW03NjgiLCBOVUxMLAotKwkJICAgIHByaXZr ZXlidWYsIGNyeXB0b19rZW1fbWxrZW03NjhfU0VDUkVUS0VZQllURVMpOwotKyAgICBpZiAocGtl eSA9PSBOVUxMKSB7Ci0rCXIgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsJZ290byBlcnI7 Ci0rICAgIH0KLSsKLSsgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX3BrZXkoTlVMTCwg cGtleSwgTlVMTCk7Ci0rICAgIGlmIChjdHggPT0gTlVMTAotKwl8fCBFVlBfUEtFWV9kZWNhcHN1 bGF0ZV9pbml0KGN0eCwgTlVMTCkgPD0gMAotKyAgICAgICAgfHwgRVZQX1BLRVlfZGVjYXBzdWxh dGUoY3R4LCBzZWNyZXQsICZzZWNyZXRsZW4sIHdyYXBwZWQsIHdyYXBwZWRsZW4pIDw9IDAKLSsJ fHwgc2VjcmV0bGVuICE9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVMpIHsKLSsJciA9IFNTSF9F UlJfTElCQ1JZUFRPX0VSUk9SOwotKwlnb3RvIGVycjsKLSsgICAgfQotKyAgICByID0gMDsKLSsK LSsgZXJyOgotKyAgICBFVlBfUEtFWV9mcmVlKHBrZXkpOwotKyAgICBFVlBfUEtFWV9DVFhfZnJl ZShjdHgpOwotKwotKyAgICBpZiAociA9PSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUikKLSsJICAg RVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotKwotKyAgICByZXR1cm4gcjsKLSt9Ci0gCi0g aW50Ci0ga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKLSB7 Ci0rI2lmIDAKLSAJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKLSAJdV9jaGFyIHJuZFtMSUJD UlVYX01MX0tFTV9LRVlfUEFJUl9QUk5HX0xFTl0sICpjcCA9IE5VTEw7Ci0gCXNpemVfdCBuZWVk OwotQEAgLTgyLDYgKzE5OSwzNiBAQCBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2tleXBhaXIoc3Ry dWN0IGtleCAqa2V4KQotIAlleHBsaWNpdF9iemVybyhybmQsIHNpemVvZihybmQpKTsKLSAJc3No YnVmX2ZyZWUoYnVmKTsKLSAJcmV0dXJuIHI7Ci0rI2Vsc2UKLSsJc3RydWN0IHNzaGJ1ZiAqYnVm ID0gTlVMTDsKLSsJdV9jaGFyICpjcCA9IE5VTEw7Ci0rCXNpemVfdCBuZWVkOwotKwlpbnQgciA9 IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCi0rCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9 PSBOVUxMKQotKwkJcmV0dXJuIFNTSF9FUlJfQUxMT0NfRkFJTDsKLSsJbmVlZCA9IGNyeXB0b19r ZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMgKyBDVVJWRTI1NTE5X1NJWkU7Ci0rCWlmICgociA9 IHNzaGJ1Zl9yZXNlcnZlKGJ1ZiwgbmVlZCwgJmNwKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKwlp ZiAoKHIgPSBtbGtlbTc2OF9rZXlwYWlyX2dlbihjcCwga2V4LT5tbGtlbTc2OF9jbGllbnRfa2V5 KSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKyNpZmRlZiBERUJVR19LRVhFQ0RICi0rCWR1bXBfZGln ZXN0KCJjbGllbnQgcHVibGljIGtleSBtbGtlbTc2ODoiLCBjcCwKLSsJICAgIGNyeXB0b19rZW1f bWxrZW03NjhfUFVCTElDS0VZQllURVMpOwotKyNlbmRpZgotKwljcCArPSBjcnlwdG9fa2VtX21s a2VtNzY4X1BVQkxJQ0tFWUJZVEVTOwotKwlrZXhjMjU1MTlfa2V5Z2VuKGtleC0+YzI1NTE5X2Ns aWVudF9rZXksIGNwKTsKLSsjaWZkZWYgREVCVUdfS0VYRUNESAotKwlkdW1wX2RpZ2VzdCgiY2xp ZW50IHB1YmxpYyBrZXkgYzI1NTE5OiIsIGNwLCBDVVJWRTI1NTE5X1NJWkUpOwotKyNlbmRpZgot KwkvKiBzdWNjZXNzICovCi0rCXIgPSAwOwotKwlrZXgtPmNsaWVudF9wdWIgPSBidWY7Ci0rCWJ1 ZiA9IE5VTEw7Ci0rIG91dDoKLSsJc3NoYnVmX2ZyZWUoYnVmKTsKLSsJcmV0dXJuIHI7Ci0rI2Vu ZGlmCi0gfQotIAotIGludAotQEAgLTg5LDYgKzIzNiw3IEBAIGtleF9rZW1fbWxrZW03Njh4MjU1 MTlfZW5jKHN0cnVjdCBrZXggKmtleCwKLSAgICBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRf YmxvYiwgc3RydWN0IHNzaGJ1ZiAqKnNlcnZlcl9ibG9icCwKLSAgICBzdHJ1Y3Qgc3NoYnVmICoq c2hhcmVkX3NlY3JldHApCi0gewotKyNpZiAwCi0gCXN0cnVjdCBzc2hidWYgKnNlcnZlcl9ibG9i ID0gTlVMTDsKLSAJc3RydWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKLSAJY29uc3QgdV9jaGFyICpj bGllbnRfcHViOwotQEAgLTE4MSwxMiArMzI5LDk3IEBAIGtleF9rZW1fbWxrZW03Njh4MjU1MTlf ZW5jKHN0cnVjdCBrZXggKmtleCwKLSAJc3NoYnVmX2ZyZWUoc2VydmVyX2Jsb2IpOwotIAlzc2hi dWZfZnJlZShidWYpOwotIAlyZXR1cm4gcjsKLSsjZWxzZQotKwlzdHJ1Y3Qgc3NoYnVmICpzZXJ2 ZXJfYmxvYiA9IE5VTEw7Ci0rCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7Ci0rCWNvbnN0IHVf Y2hhciAqY2xpZW50X3B1YjsKLSsJdV9jaGFyIHNlcnZlcl9wdWJbQ1VSVkUyNTUxOV9TSVpFXSwg c2VydmVyX2tleVtDVVJWRTI1NTE5X1NJWkVdOwotKwl1X2NoYXIgaGFzaFtTU0hfRElHRVNUX01B WF9MRU5HVEhdOwotKwlzaXplX3QgbmVlZDsKLSsJaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VS Uk9SOwotKwlzdHJ1Y3QgbGliY3J1eF9tbGtlbTc2OF9lbmNfcmVzdWx0IGVuYzsgLyogRklYTUUg Ki8KLSsKLSsJKnNlcnZlcl9ibG9icCA9IE5VTEw7Ci0rCSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7 Ci0rCi0rCS8qIGNsaWVudF9ibG9iIGNvbnRhaW5zIGJvdGggS0VNIGFuZCBFQ0RIIGNsaWVudCBw dWJrZXlzICovCi0rCW5lZWQgPSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTICsg Q1VSVkUyNTUxOV9TSVpFOwotKwlpZiAoc3NoYnVmX2xlbihjbGllbnRfYmxvYikgIT0gbmVlZCkg ewotKwkJciA9IFNTSF9FUlJfU0lHTkFUVVJFX0lOVkFMSUQ7Ci0rCQlnb3RvIG91dDsKLSsJfQot KwljbGllbnRfcHViID0gc3NoYnVmX3B0cihjbGllbnRfYmxvYik7Ci0rI2lmZGVmIERFQlVHX0tF WEVDREgKLSsJZHVtcF9kaWdlc3QoImNsaWVudCBwdWJsaWMga2V5IG1sa2VtNzY4OiIsIGNsaWVu dF9wdWIsCi0rCSAgICBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTKTsKLSsJZHVt cF9kaWdlc3QoImNsaWVudCBwdWJsaWMga2V5IDI1NTE5OiIsCi0rCSAgICBjbGllbnRfcHViICsg Y3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUywKLSsJICAgIENVUlZFMjU1MTlfU0la RSk7Ci0rI2VuZGlmCi0rCi0rCS8qIGFsbG9jYXRlIGJ1ZmZlciBmb3IgY29uY2F0ZW5hdGlvbiBv ZiBLRU0ga2V5IGFuZCBFQ0RIIHNoYXJlZCBrZXkgKi8KLSsJLyogdGhlIGJ1ZmZlciB3aWxsIGJl IGhhc2hlZCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc2hhcmVkIHNlY3JldCAqLwotKwlpZiAoKGJ1 ZiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkgewotKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsK LSsJCWdvdG8gb3V0OwotKwl9Ci0rCS8qIGFsbG9jYXRlIHNwYWNlIGZvciBlbmNyeXB0ZWQgS0VN IGtleSBhbmQgRUNESCBwdWIga2V5ICovCi0rCWlmICgoc2VydmVyX2Jsb2IgPSBzc2hidWZfbmV3 KCkpID09IE5VTEwpIHsKLSsJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7Ci0rCQlnb3RvIG91dDsK LSsJfQotKwlpZiAobWxrZW03NjhfZW5jYXBfc2VjcmV0KGNsaWVudF9wdWIsIGVuYy5zbmQsIGVu Yy5mc3QudmFsdWUpICE9IDApCi0rCQlnb3RvIG91dDsKLSsKLSsJLyogZ2VuZXJhdGUgRUNESCBr ZXkgcGFpciwgc3RvcmUgc2VydmVyIHB1YmtleSBhZnRlciBjaXBoZXJ0ZXh0ICovCi0rCWtleGMy NTUxOV9rZXlnZW4oc2VydmVyX2tleSwgc2VydmVyX3B1Yik7Ci0rCWlmICgociA9IHNzaGJ1Zl9w dXQoYnVmLCBlbmMuc25kLCBzaXplb2YoZW5jLnNuZCkpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNz aGJ1Zl9wdXQoc2VydmVyX2Jsb2IsIGVuYy5mc3QudmFsdWUsIHNpemVvZihlbmMuZnN0LnZhbHVl KSkpICE9IDAgfHwKLSsJICAgIChyID0gc3NoYnVmX3B1dChzZXJ2ZXJfYmxvYiwgc2VydmVyX3B1 Yiwgc2l6ZW9mKHNlcnZlcl9wdWIpKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKwkvKiBhcHBlbmQg RUNESCBzaGFyZWQga2V5ICovCi0rCWNsaWVudF9wdWIgKz0gY3J5cHRvX2tlbV9tbGtlbTc2OF9Q VUJMSUNLRVlCWVRFUzsKLSsJaWYgKChyID0ga2V4YzI1NTE5X3NoYXJlZF9rZXlfZXh0KHNlcnZl cl9rZXksIGNsaWVudF9wdWIsIGJ1ZiwgMSkpIDwgMCkKLSsJCWdvdG8gb3V0OwotKwlpZiAoKHIg PSBzc2hfZGlnZXN0X2J1ZmZlcihrZXgtPmhhc2hfYWxnLCBidWYsIGhhc2gsIHNpemVvZihoYXNo KSkpICE9IDApCi0rCQlnb3RvIG91dDsKLSsjaWZkZWYgREVCVUdfS0VYRUNESAotKwlkdW1wX2Rp Z2VzdCgic2VydmVyIHB1YmxpYyBrZXkgMjU1MTk6Iiwgc2VydmVyX3B1YiwgQ1VSVkUyNTUxOV9T SVpFKTsKLSsJZHVtcF9kaWdlc3QoInNlcnZlciBjaXBoZXIgdGV4dDoiLAotKwkgICAgZW5jLmZz dC52YWx1ZSwgc2l6ZW9mKGVuYy5mc3QudmFsdWUpKTsKLSsJZHVtcF9kaWdlc3QoInNlcnZlciBr ZW0ga2V5OiIsIGVuYy5zbmQsIHNpemVvZihlbmMuc25kKSk7Ci0rCWR1bXBfZGlnZXN0KCJjb25j YXRlbmF0aW9uIG9mIEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtleToiLAotKwkgICAgc3NoYnVm X3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOwotKyNlbmRpZgotKwkvKiBzdHJpbmctZW5jb2Rl ZCBoYXNoIGlzIHJlc3VsdGluZyBzaGFyZWQgc2VjcmV0ICovCi0rCXNzaGJ1Zl9yZXNldChidWYp OwotKwlpZiAoKHIgPSBzc2hidWZfcHV0X3N0cmluZyhidWYsIGhhc2gsCi0rCSAgICBzc2hfZGln ZXN0X2J5dGVzKGtleC0+aGFzaF9hbGcpKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKyNpZmRlZiBE RUJVR19LRVhFQ0RICi0rCWR1bXBfZGlnZXN0KCJlbmNvZGVkIHNoYXJlZCBzZWNyZXQ6Iiwgc3No YnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOwotKyNlbmRpZgotKwkvKiBzdWNjZXNzICov Ci0rCXIgPSAwOwotKwkqc2VydmVyX2Jsb2JwID0gc2VydmVyX2Jsb2I7Ci0rCSpzaGFyZWRfc2Vj cmV0cCA9IGJ1ZjsKLSsJc2VydmVyX2Jsb2IgPSBOVUxMOwotKwlidWYgPSBOVUxMOwotKyBvdXQ6 Ci0rCWV4cGxpY2l0X2J6ZXJvKGhhc2gsIHNpemVvZihoYXNoKSk7Ci0rCWV4cGxpY2l0X2J6ZXJv KHNlcnZlcl9rZXksIHNpemVvZihzZXJ2ZXJfa2V5KSk7Ci0rCWV4cGxpY2l0X2J6ZXJvKCZlbmMs IHNpemVvZihlbmMpKTsKLSsJc3NoYnVmX2ZyZWUoc2VydmVyX2Jsb2IpOwotKwlzc2hidWZfZnJl ZShidWYpOwotKwlyZXR1cm4gcjsKLSsjZW5kaWYKLSB9Ci0gCi0gaW50Ci0ga2V4X2tlbV9tbGtl bTc2OHgyNTUxOV9kZWMoc3RydWN0IGtleCAqa2V4LAotICAgICBjb25zdCBzdHJ1Y3Qgc3NoYnVm ICpzZXJ2ZXJfYmxvYiwgc3RydWN0IHNzaGJ1ZiAqKnNoYXJlZF9zZWNyZXRwKQotIHsKLSsjaWYg MAotIAlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOwotIAl1X2NoYXIgbWxrZW1fa2V5W2NyeXB0 b19rZW1fbWxrZW03NjhfQllURVNdOwotIAljb25zdCB1X2NoYXIgKmNpcGhlcnRleHQsICpzZXJ2 ZXJfcHViOwotQEAgLTI1NCw2ICs0ODcsNjQgQEAga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMo c3RydWN0IGtleCAqa2V4LAotIAlleHBsaWNpdF9iemVybyhtbGtlbV9rZXksIHNpemVvZihtbGtl bV9rZXkpKTsKLSAJc3NoYnVmX2ZyZWUoYnVmKTsKLSAJcmV0dXJuIHI7Ci0rI2Vsc2UKLSsJc3Ry dWN0IHNzaGJ1ZiAqYnVmID0gTlVMTDsKLSsJY29uc3QgdV9jaGFyICpjaXBoZXJ0ZXh0LCAqc2Vy dmVyX3B1YjsKLSsJdV9jaGFyIGhhc2hbU1NIX0RJR0VTVF9NQVhfTEVOR1RIXTsKLSsJdV9jaGFy IGRlY2FwW2NyeXB0b19rZW1fbWxrZW03NjhfQllURVNdOwotKwlzaXplX3QgbmVlZDsKLSsJaW50 IHI7Ci0rCi0rCSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7Ci0rCi0rCW5lZWQgPSBjcnlwdG9fa2Vt X21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUyArIENVUlZFMjU1MTlfU0laRTsKLSsJaWYgKHNzaGJ1 Zl9sZW4oc2VydmVyX2Jsb2IpICE9IG5lZWQpIHsKLSsJCXIgPSBTU0hfRVJSX1NJR05BVFVSRV9J TlZBTElEOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsJY2lwaGVydGV4dCA9IHNzaGJ1Zl9wdHIoc2Vy dmVyX2Jsb2IpOwotKwlzZXJ2ZXJfcHViID0gY2lwaGVydGV4dCArIGNyeXB0b19rZW1fbWxrZW03 NjhfQ0lQSEVSVEVYVEJZVEVTOwotKwkvKiBoYXNoIGNvbmNhdGVuYXRpb24gb2YgS0VNIGtleSBh bmQgRUNESCBzaGFyZWQga2V5ICovCi0rCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9PSBOVUxM KSB7Ci0rCQlyID0gU1NIX0VSUl9BTExPQ19GQUlMOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsjaWZk ZWYgREVCVUdfS0VYRUNESAotKwlkdW1wX2RpZ2VzdCgic2VydmVyIGNpcGhlciB0ZXh0OiIsIGNp cGhlcnRleHQsIGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTKTsKLSsJZHVtcF9k aWdlc3QoInNlcnZlciBwdWJsaWMga2V5IGMyNTUxOToiLCBzZXJ2ZXJfcHViLCBDVVJWRTI1NTE5 X1NJWkUpOwotKyNlbmRpZgotKwlpZiAoKHIgPSBtbGtlbTc2OF9kZWNhcF9zZWNyZXQoa2V4LT5t bGtlbTc2OF9jbGllbnRfa2V5LCBjaXBoZXJ0ZXh0LCBkZWNhcCkpICE9IDApCi0rCQlnb3RvIG91 dDsKLSsJaWYgKChyID0gc3NoYnVmX3B1dChidWYsIGRlY2FwLCBzaXplb2YoZGVjYXApKSkgIT0g MCkKLSsJCWdvdG8gb3V0OwotKwlpZiAoKHIgPSBrZXhjMjU1MTlfc2hhcmVkX2tleV9leHQoa2V4 LT5jMjU1MTlfY2xpZW50X2tleSwgc2VydmVyX3B1YiwKLSsJICAgIGJ1ZiwgMSkpIDwgMCkKLSsJ CWdvdG8gb3V0OwotKwlpZiAoKHIgPSBzc2hfZGlnZXN0X2J1ZmZlcihrZXgtPmhhc2hfYWxnLCBi dWYsCi0rCSAgICBoYXNoLCBzaXplb2YoaGFzaCkpKSAhPSAwKQotKwkJZ290byBvdXQ7Ci0rI2lm ZGVmIERFQlVHX0tFWEVDREgKLSsJZHVtcF9kaWdlc3QoImNsaWVudCBrZW0ga2V5OiIsIGRlY2Fw LCBzaXplb2YoZGVjYXApKTsKLSsJZHVtcF9kaWdlc3QoImNvbmNhdGVuYXRpb24gb2YgS0VNIGtl eSBhbmQgRUNESCBzaGFyZWQga2V5OiIsCi0rCSAgICBzc2hidWZfcHRyKGJ1ZiksIHNzaGJ1Zl9s ZW4oYnVmKSk7Ci0rI2VuZGlmCi0rCXNzaGJ1Zl9yZXNldChidWYpOwotKwlpZiAoKHIgPSBzc2hi dWZfcHV0X3N0cmluZyhidWYsIGhhc2gsCi0rCSAgICBzc2hfZGlnZXN0X2J5dGVzKGtleC0+aGFz aF9hbGcpKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKyNpZmRlZiBERUJVR19LRVhFQ0RICi0rCWR1 bXBfZGlnZXN0KCJlbmNvZGVkIHNoYXJlZCBzZWNyZXQ6Iiwgc3NoYnVmX3B0cihidWYpLCBzc2hi dWZfbGVuKGJ1ZikpOwotKyNlbmRpZgotKwkvKiBzdWNjZXNzICovCi0rCXIgPSAwOwotKwkqc2hh cmVkX3NlY3JldHAgPSBidWY7Ci0rCWJ1ZiA9IE5VTEw7Ci0rIG91dDoKLSsJZXhwbGljaXRfYnpl cm8oaGFzaCwgc2l6ZW9mKGhhc2gpKTsKLSsJZXhwbGljaXRfYnplcm8oZGVjYXAsIHNpemVvZihk ZWNhcCkpOwotKwlzc2hidWZfZnJlZShidWYpOwotKwlyZXR1cm4gcjsKLSsjZW5kaWYKLSB9Ci0g I2Vsc2UgLyogVVNFX01MS0VNNzY4WDI1NTE5ICovCi0gaW50Ci0tLSAKLTIuNTIuMAotCgpkaWZm IC0tZ2l0IGEvMDA0NC1vcGVuc3NoLTkuOXAyLWVycm9yX3Byb2Nlc3NpbmcucGF0Y2ggYi8wMDQ0 LW9wZW5zc2gtOS45cDItZXJyb3JfcHJvY2Vzc2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4zNWRmMzRiCi0tLSAvZGV2L251bGwKKysrIGIvMDA0NC1vcGVuc3No LTkuOXAyLWVycm9yX3Byb2Nlc3NpbmcucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRnJvbSAwNGVj MGUzNGE0ZDRmODY3Y2FkMzJlZDg1NDNiMzJlNGRlNDU4ZjhmIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTog RnJpLCAxNiBNYXkgMjAyNSAxNDo1Mzo1NCArMDIwMAorU3ViamVjdDogW1BBVENIIDQ0LzU0XSBv cGVuc3NoLTkuOXAyLWVycm9yX3Byb2Nlc3NpbmcKKworIyBodHRwczovL3d3dy5vcGVud2FsbC5j b20vbGlzdHMvb3NzLXNlY3VyaXR5LzIwMjUvMDIvMjIvMQorLS0tCisgc3NoLWFnZW50LmMgfCAy ICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3No LWFnZW50LmMgYi9zc2gtYWdlbnQuYworaW5kZXggYzczYWJkMWQwLi43NzczYTRiMDcgMTAwNjQ0 CistLS0gYS9zc2gtYWdlbnQuYworKysrIGIvc3NoLWFnZW50LmMKK0BAIC0xMzUyLDYgKzEzNTIs OCBAQCBwcm9jZXNzX2FkZF9pZGVudGl0eShTb2NrZXRFbnRyeSAqZSkKKyAJaWYgKChyID0gc3No a2V5X3ByaXZhdGVfZGVzZXJpYWxpemUoZS0+cmVxdWVzdCwgJmspKSAhPSAwIHx8CisgCSAgICBr ID09IE5VTEwgfHwKKyAJICAgIChyID0gc3NoYnVmX2dldF9jc3RyaW5nKGUtPnJlcXVlc3QsICZj b21tZW50LCBOVUxMKSkgIT0gMCkgeworKwkJaWYgKCFyKSAvKiBrID09IE5VTEwgKi8KKysJCQly ID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKyAJCWVycm9yX2ZyKHIsICJwYXJzZSIpOworIAkJ Z290byBvdXQ7CisgCX0KKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDQ1LVByb3ZpZGUt YmV0dGVyLWVycm9yLWZvci1ub24tc3VwcG9ydGVkLXByaXZhdGUta2V5cy5wYXRjaCBiLzAwNDUt UHJvdmlkZS1iZXR0ZXItZXJyb3ItZm9yLW5vbi1zdXBwb3J0ZWQtcHJpdmF0ZS1rZXlzLnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGM3MWUKLS0tIC9kZXYvbnVs bAorKysgYi8wMDQ1LVByb3ZpZGUtYmV0dGVyLWVycm9yLWZvci1ub24tc3VwcG9ydGVkLXByaXZh dGUta2V5cy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDFkNTliYjFmNjU4YmFiOGRlOTMx ZDExNTk1OWZjYjBmZTkzZDI3ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBab2x0 YW4gRnJpZHJpY2ggPHpmcmlkcmljQHJlZGhhdC5jb20+CitEYXRlOiBXZWQsIDE2IEFwciAyMDI1 IDE1OjExOjU5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNDUvNTRdIFByb3ZpZGUgYmV0dGVyIGVy cm9yIGZvciBub24tc3VwcG9ydGVkIHByaXZhdGUga2V5cworCitTaWduZWQtb2ZmLWJ5OiBab2x0 YW4gRnJpZHJpY2ggPHpmcmlkcmljQHJlZGhhdC5jb20+CisKKyMgaHR0cHM6Ly9naXRodWIuY29t L29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS9wdWxsLzU2NAorLS0tCisgc3Noa2V5LmMgfCAzICsr KworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NzaGtl eS5jIGIvc3Noa2V5LmMKK2luZGV4IDgyZTU1NTA5ZC4uNTIyNWVhYmYyIDEwMDY0NAorLS0tIGEv c3Noa2V5LmMKKysrKyBiL3NzaGtleS5jCitAQCAtMzU1NCw2ICszNTU0LDkgQEAgdHJhbnNsYXRl X2xpYmNyeXB0b19lcnJvcih1bnNpZ25lZCBsb25nIHBlbV9lcnIpCisgCQkJcmV0dXJuIFNTSF9F UlJfTElCQ1JZUFRPX0VSUk9SOworIAkJfQorIAljYXNlIEVSUl9MSUJfQVNOMToKKysjaWZkZWYg RVJSX0xJQl9PU1NMX0RFQ09ERVIKKysJY2FzZSBFUlJfTElCX09TU0xfREVDT0RFUjoKKysjZW5k aWYKKyAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURfRk9STUFUOworIAl9CisgCXJldHVybiBTU0hf RVJSX0xJQkNSWVBUT19FUlJPUjsKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDQ1LW9w ZW5zc2gtOS45cDItZXJyb3JfcHJvY2Vzc2luZy5wYXRjaCBiLzAwNDUtb3BlbnNzaC05LjlwMi1l cnJvcl9wcm9jZXNzaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGFh NzZhLi4wMDAwMDAwCi0tLSBhLzAwNDUtb3BlbnNzaC05LjlwMi1lcnJvcl9wcm9jZXNzaW5nLnBh dGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotRnJvbSBlZGJiZGMzMDZjMTcxMGRh ZTc3N2VmMzE1YTBkMmM1ZjQzMTM0ZDMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTog RG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogRnJpLCAxNiBNYXkg MjAyNSAxNDo1Mzo1NCArMDIwMAotU3ViamVjdDogW1BBVENIIDQ1LzUzXSBvcGVuc3NoLTkuOXAy LWVycm9yX3Byb2Nlc3NpbmcKLQotLS0tCi0gc3NoLWFnZW50LmMgfCAyICsrCi0gMSBmaWxlIGNo YW5nZWQsIDIgaW5zZXJ0aW9ucygrKQotCi1kaWZmIC0tZ2l0IGEvc3NoLWFnZW50LmMgYi9zc2gt YWdlbnQuYwotaW5kZXggZGYyNDEzNzljLi5kYzI0NjA2NmQgMTAwNjQ0Ci0tLS0gYS9zc2gtYWdl bnQuYwotKysrIGIvc3NoLWFnZW50LmMKLUBAIC0xMzQ2LDYgKzEzNDYsOCBAQCBwcm9jZXNzX2Fk ZF9pZGVudGl0eShTb2NrZXRFbnRyeSAqZSkKLSAJaWYgKChyID0gc3Noa2V5X3ByaXZhdGVfZGVz ZXJpYWxpemUoZS0+cmVxdWVzdCwgJmspKSAhPSAwIHx8Ci0gCSAgICBrID09IE5VTEwgfHwKLSAJ ICAgIChyID0gc3NoYnVmX2dldF9jc3RyaW5nKGUtPnJlcXVlc3QsICZjb21tZW50LCBOVUxMKSkg IT0gMCkgewotKwkJaWYgKCFyKSAvKiBrID09IE5VTEwgKi8KLSsJCQlyID0gU1NIX0VSUl9JTlRF Uk5BTF9FUlJPUjsKLSAJCWVycm9yX2ZyKHIsICJwYXJzZSIpOwotIAkJZ290byBvdXQ7Ci0gCX0K LS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDQ2LUlnbm9yZS1iYWQtaG9zdGtleXMtaW4t a25vd25faG9zdHMtZmlsZS5wYXRjaCBiLzAwNDYtSWdub3JlLWJhZC1ob3N0a2V5cy1pbi1rbm93 bl9ob3N0cy1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0 ODVlOTUKLS0tIC9kZXYvbnVsbAorKysgYi8wMDQ2LUlnbm9yZS1iYWQtaG9zdGtleXMtaW4ta25v d25faG9zdHMtZmlsZS5wYXRjaApAQCAtMCwwICsxLDg4IEBACitGcm9tIGRlZjQ0MjE0NmJiZmUx MTE2Y2E1MWMwYjgxYTJlZWJjMTNhODZlZWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9t OiBab2x0YW4gRnJpZHJpY2ggPHpmcmlkcmljQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDUgTWF5 IDIwMjUgMTE6NTI6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA0Ni81NF0gSWdub3JlIGJhZCBo b3N0a2V5cyBpbiBrbm93bl9ob3N0cyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IFpvbHRhbiBGcmlk cmljaCA8emZyaWRyaWNAcmVkaGF0LmNvbT4KKworIyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNz aC9vcGVuc3NoLXBvcnRhYmxlL3B1bGwvNTY3CistLS0KKyBob3N0ZmlsZS5jIHwgMTUgKysrKysr KysrKysrKysrCisgaG9zdGZpbGUuaCB8ICAxICsKKyBzc2guYyAgICAgIHwgIDIgKysKKyAzIGZp bGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2hvc3RmaWxlLmMg Yi9ob3N0ZmlsZS5jCitpbmRleCAwMzNiMjkxMDQuLjQ1MTdhYTA4MCAxMDA2NDQKKy0tLSBhL2hv c3RmaWxlLmMKKysrKyBiL2hvc3RmaWxlLmMKK0BAIC02Myw2ICs2MywxNCBAQAorICNpbmNsdWRl ICJobWFjLmgiCisgI2luY2x1ZGUgInNzaGJ1Zi5oIgorIAorK3N0YXRpYyBpbnQgcmVxdWlyZWRf cnNhX3NpemUgPSBTU0hfUlNBX01JTklNVU1fTU9EVUxVU19TSVpFOworKworK3ZvaWQKKytob3N0 ZmlsZV9zZXRfbWluaW11bV9yc2Ffc2l6ZShpbnQgc2l6ZSkKKyt7CisrCXJlcXVpcmVkX3JzYV9z aXplID0gc2l6ZTsKKyt9CisrCisgLyogWFhYIGhtYWMgaXMgdG9vIGVhc3kgdG8gZGljdGlvbmFy eSBhdHRhY2s7IHVzZSBiY3J5cHQ/ICovCisgCisgc3RhdGljIGludAorQEAgLTIzMyw2ICsyNDEs NyBAQCByZWNvcmRfaG9zdGtleShzdHJ1Y3QgaG9zdGtleV9mb3JlYWNoX2xpbmUgKmwsIHZvaWQg Kl9jdHgpCisgCXN0cnVjdCBsb2FkX2NhbGxiYWNrX2N0eCAqY3R4ID0gKHN0cnVjdCBsb2FkX2Nh bGxiYWNrX2N0eCAqKV9jdHg7CisgCXN0cnVjdCBob3N0a2V5cyAqaG9zdGtleXMgPSBjdHgtPmhv c3RrZXlzOworIAlzdHJ1Y3QgaG9zdGtleV9lbnRyeSAqdG1wOworKwlpbnQgciA9IDA7CisgCisg CWlmIChsLT5zdGF0dXMgPT0gSEtGX1NUQVRVU19JTlZBTElEKSB7CisgCQkvKiBYWFggbWFrZSB0 aGlzIHZlcmJvc2UoKSBpbiB0aGUgZnV0dXJlICovCitAQCAtMjQxLDYgKzI1MCwxMiBAQCByZWNv cmRfaG9zdGtleShzdHJ1Y3QgaG9zdGtleV9mb3JlYWNoX2xpbmUgKmwsIHZvaWQgKl9jdHgpCisg CQlyZXR1cm4gMDsKKyAJfQorIAorKwlpZiAoKHIgPSBzc2hrZXlfY2hlY2tfcnNhX2xlbmd0aChs LT5rZXksIHJlcXVpcmVkX3JzYV9zaXplKSkgIT0gMCkgeworKwkJZGVidWcyX2YoIiVzOiVsZDog aWdub3JpbmcgaG9zdGtleTogJXMiLAorKwkJICAgIGwtPnBhdGgsIGwtPmxpbmVudW0sIHNzaF9l cnIocikpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKyAJZGVidWczX2YoImZvdW5kICVza2V5IHR5 cGUgJXMgaW4gZmlsZSAlczolbHUiLAorIAkgICAgbC0+bWFya2VyID09IE1SS19OT05FID8gIiIg OgorIAkgICAgKGwtPm1hcmtlciA9PSBNUktfQ0EgPyAiY2EgIiA6ICJyZXZva2VkICIpLAorZGlm ZiAtLWdpdCBhL2hvc3RmaWxlLmggYi9ob3N0ZmlsZS5oCitpbmRleCBhMjRhNGUzMjkuLjBlOWIx YTE5YSAxMDA2NDQKKy0tLSBhL2hvc3RmaWxlLmgKKysrKyBiL2hvc3RmaWxlLmgKK0BAIC0xMTks NSArMTE5LDYgQEAgaW50IGhvc3RrZXlzX2ZvcmVhY2hfZmlsZShjb25zdCBjaGFyICpwYXRoLCBG SUxFICpmLAorICAgICBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICppcCwgdV9pbnQgb3B0 aW9ucywgdV9pbnQgbm90ZSk7CisgCisgdm9pZCBob3N0ZmlsZV9jcmVhdGVfdXNlcl9zc2hfZGly KGNvbnN0IGNoYXIgKiwgaW50KTsKKyt2b2lkIGhvc3RmaWxlX3NldF9taW5pbXVtX3JzYV9zaXpl KGludCk7CisgCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3NoLmMgYi9zc2guYworaW5kZXggZTdi ZGJhMzI3Li40YTE3YzBhN2QgMTAwNjQ0CistLS0gYS9zc2guYworKysrIGIvc3NoLmMKK0BAIC05 Nyw2ICs5Nyw3IEBACisgI2luY2x1ZGUgInZlcnNpb24uaCIKKyAjaW5jbHVkZSAic3NoZXJyLmgi CisgI2luY2x1ZGUgInV0ZjguaCIKKysjaW5jbHVkZSAiaG9zdGZpbGUuaCIKKyAKKyAjaWZkZWYg RU5BQkxFX1BLQ1MxMQorICNpbmNsdWRlICJzc2gtcGtjczExLmgiCitAQCAtMTM3NSw2ICsxMzc2 LDcgQEAgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKKyAJCQlvcHRpb25zLnVwZGF0ZV9ob3N0a2V5 cyA9IDA7CisgCQl9CisgCX0KKysJaG9zdGZpbGVfc2V0X21pbmltdW1fcnNhX3NpemUob3B0aW9u cy5yZXF1aXJlZF9yc2Ffc2l6ZSk7CisgCWlmIChvcHRpb25zLmNvbm5lY3Rpb25fYXR0ZW1wdHMg PD0gMCkKKyAJCWZhdGFsKCJJbnZhbGlkIG51bWJlciBvZiBDb25uZWN0aW9uQXR0ZW1wdHMiKTsK KyAKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDQ2LVByb3ZpZGUtYmV0dGVyLWVycm9y LWZvci1ub24tc3VwcG9ydGVkLXByaXZhdGUta2V5cy5wYXRjaCBiLzAwNDYtUHJvdmlkZS1iZXR0 ZXItZXJyb3ItZm9yLW5vbi1zdXBwb3J0ZWQtcHJpdmF0ZS1rZXlzLnBhdGNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBkZDMwOTY3Li4wMDAwMDAwCi0tLSBhLzAwNDYtUHJvdmlkZS1i ZXR0ZXItZXJyb3ItZm9yLW5vbi1zdXBwb3J0ZWQtcHJpdmF0ZS1rZXlzLnBhdGNoCisrKyAvZGV2 L251bGwKQEAgLTEsMjcgKzAsMCBAQAotRnJvbSAwNzcyMzc3ZTAwYjEzZjVhZmFhMWIxNDZjZTMy ZDAyMThlOWYwZDI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogWm9sdGFuIEZyaWRy aWNoIDx6ZnJpZHJpY0ByZWRoYXQuY29tPgotRGF0ZTogV2VkLCAxNiBBcHIgMjAyNSAxNToxMTo1 OSArMDIwMAotU3ViamVjdDogW1BBVENIIDQ2LzUzXSBQcm92aWRlIGJldHRlciBlcnJvciBmb3Ig bm9uLXN1cHBvcnRlZCBwcml2YXRlIGtleXMKLQotU2lnbmVkLW9mZi1ieTogWm9sdGFuIEZyaWRy aWNoIDx6ZnJpZHJpY0ByZWRoYXQuY29tPgotLS0tCi0gc3Noa2V5LmMgfCAzICsrKwotIDEgZmls ZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdpdCBhL3NzaGtleS5jIGIvc3No a2V5LmMKLWluZGV4IDM5NGQ5YjEwNS4uZWJhNTVlZjkyIDEwMDY0NAotLS0tIGEvc3Noa2V5LmMK LSsrKyBiL3NzaGtleS5jCi1AQCAtMzUzOSw2ICszNTM5LDkgQEAgdHJhbnNsYXRlX2xpYmNyeXB0 b19lcnJvcih1bnNpZ25lZCBsb25nIHBlbV9lcnIpCi0gCQkJcmV0dXJuIFNTSF9FUlJfTElCQ1JZ UFRPX0VSUk9SOwotIAkJfQotIAljYXNlIEVSUl9MSUJfQVNOMToKLSsjaWZkZWYgRVJSX0xJQl9P U1NMX0RFQ09ERVIKLSsJY2FzZSBFUlJfTElCX09TU0xfREVDT0RFUjoKLSsjZW5kaWYKLSAJCXJl dHVybiBTU0hfRVJSX0lOVkFMSURfRk9STUFUOwotIAl9Ci0gCXJldHVybiBTU0hfRVJSX0xJQkNS WVBUT19FUlJPUjsKLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDQ3LUlnbm9yZS1iYWQt aG9zdGtleXMtaW4ta25vd25faG9zdHMtZmlsZS5wYXRjaCBiLzAwNDctSWdub3JlLWJhZC1ob3N0 a2V5cy1pbi1rbm93bl9ob3N0cy1maWxlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAzYmZhYjkyLi4wMDAwMDAwCi0tLSBhLzAwNDctSWdub3JlLWJhZC1ob3N0a2V5cy1pbi1r bm93bl9ob3N0cy1maWxlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotRnJv bSBkNDU4YTY1Y2NhYzIyODM1NjNjMGZjMDk2MjUxOWJiNWE5YmJkMzE1IE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMQotRnJvbTogWm9sdGFuIEZyaWRyaWNoIDx6ZnJpZHJpY0ByZWRoYXQuY29tPgot RGF0ZTogTW9uLCA1IE1heSAyMDI1IDExOjUyOjI1ICswMjAwCi1TdWJqZWN0OiBbUEFUQ0ggNDcv NTNdIElnbm9yZSBiYWQgaG9zdGtleXMgaW4ga25vd25faG9zdHMgZmlsZQotCi1TaWduZWQtb2Zm LWJ5OiBab2x0YW4gRnJpZHJpY2ggPHpmcmlkcmljQHJlZGhhdC5jb20+Ci0tLS0KLSBob3N0Zmls ZS5jIHwgMTUgKysrKysrKysrKysrKysrCi0gaG9zdGZpbGUuaCB8ICAxICsKLSBzc2guYyAgICAg IHwgIDIgKysKLSAzIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKykKLQotZGlmZiAtLWdp dCBhL2hvc3RmaWxlLmMgYi9ob3N0ZmlsZS5jCi1pbmRleCA0Y2VjNTdkYTUuLjY1MmQxNTc2MiAx 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 c2guYwotaW5kZXggN2Q2YmE1MTZlLi4zMjBhYzY4MzQgMTAwNjQ0Ci0tLS0gYS9zc2guYwotKysr IGIvc3NoLmMKLUBAIC0xMDYsNiArMTA2LDcgQEAKLSAjaW5jbHVkZSAic3NoZXJyLmgiCi0gI2lu Y2x1ZGUgIm15cHJvcG9zYWwuaCIKLSAjaW5jbHVkZSAidXRmOC5oIgotKyNpbmNsdWRlICJob3N0 ZmlsZS5oIgotIAotICNpZmRlZiBFTkFCTEVfUEtDUzExCi0gI2luY2x1ZGUgInNzaC1wa2NzMTEu aCIKLUBAIC0xNDA5LDYgKzE0MTAsNyBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQotIAkJCW9w dGlvbnMudXBkYXRlX2hvc3RrZXlzID0gMDsKLSAJCX0KLSAJfQotKwlob3N0ZmlsZV9zZXRfbWlu aW11bV9yc2Ffc2l6ZShvcHRpb25zLnJlcXVpcmVkX3JzYV9zaXplKTsKLSAJaWYgKG9wdGlvbnMu Y29ubmVjdGlvbl9hdHRlbXB0cyA8PSAwKQotIAkJZmF0YWwoIkludmFsaWQgbnVtYmVyIG9mIENv bm5lY3Rpb25BdHRlbXB0cyIpOwotIAotLS0gCi0yLjUyLjAKLQoKZGlmZiAtLWdpdCBhLzAwNDct c3VwcG9ydC1hdXRoZW50aWNhdGlvbi1pbmRpY2F0b3JzLWluLUdTU0FQSS5wYXRjaCBiLzAwNDct c3VwcG9ydC1hdXRoZW50aWNhdGlvbi1pbmRpY2F0b3JzLWluLUdTU0FQSS5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDE2ODkwCi0tLSAvZGV2L251bGwKKysrIGIv MDA0Ny1zdXBwb3J0LWF1dGhlbnRpY2F0aW9uLWluZGljYXRvcnMtaW4tR1NTQVBJLnBhdGNoCkBA IC0wLDAgKzEsNDgzIEBACitGcm9tIDQ3N2UwZGZlNDRkNWUzMDlhOTM1NzM3NTU4Mjg4NDIyMGZk ZTRhY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8 YmVsZG1pdEBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDEyIEFwciAyMDI2IDEyOjIzOjUxICswMjAw CitTdWJqZWN0OiBbUEFUQ0ggNDcvNTRdIHN1cHBvcnQgYXV0aGVudGljYXRpb24gaW5kaWNhdG9y cyBpbiBHU1NBUEkKKworaHR0cHM6Ly9naXRodWIuY29tL29wZW5zc2gvb3BlbnNzaC1wb3J0YWJs ZS9wdWxsLzUwMAorCitDby1BdXRob3JlZC1CeTogQ2xhdWRlIFNvbm5ldCA0LjUgPG5vcmVwbHlA YW50aHJvcGljLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICB8ICAgMSArCisgZ3NzLXNlcnYt a3JiNS5jIHwgIDg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQorIGdz cy1zZXJ2LmMgICAgICB8IDEwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0KKyBzZXJ2Y29uZi5jICAgICAgfCAgMTYgKysrKysrLQorIHNlcnZjb25mLmgg ICAgICB8ICAgMiArCisgc3NoLWdzcy5oICAgICAgIHwgICA3ICsrKysKKyBzc2hkX2NvbmZpZy41 ICAgfCAgNDYgKysrKysrKysrKysrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCAyNTYgaW5z ZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMg Yi9jb25maWd1cmUuYWMKK2luZGV4IDg2ZjBlOWUwOS4uMTM4OGU1ZTcyIDEwMDY0NAorLS0tIGEv Y29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01MTI5LDYgKzUxMjksNyBAQCBB Q19BUkdfV0lUSChba2VyYmVyb3M1XSwKKyAJCUFDX0NIRUNLX0hFQURFUlMoW2dzc2FwaS5oIGdz c2FwaS9nc3NhcGkuaF0pCisgCQlBQ19DSEVDS19IRUFERVJTKFtnc3NhcGlfa3JiNS5oIGdzc2Fw aS9nc3NhcGlfa3JiNS5oXSkKKyAJCUFDX0NIRUNLX0hFQURFUlMoW2dzc2FwaV9nZW5lcmljLmgg Z3NzYXBpL2dzc2FwaV9nZW5lcmljLmhdKQorKwkJQUNfQ0hFQ0tfSEVBREVSUyhbZ3NzYXBpX2V4 dC5oIGdzc2FwaS9nc3NhcGlfZXh0LmhdKQorIAorIAkJQUNfU0VBUkNIX0xJQlMoW2tfaGFzYWZz XSwgW2thZnNdLCBbQUNfREVGSU5FKFtVU0VfQUZTXSwgWzFdLAorIAkJCVtEZWZpbmUgdGhpcyBp ZiB5b3Ugd2FudCB0byB1c2UgbGlia2FmcycgQUZTIHN1cHBvcnRdKV0pCitkaWZmIC0tZ2l0IGEv Z3NzLXNlcnYta3JiNS5jIGIvZ3NzLXNlcnYta3JiNS5jCitpbmRleCA3MjM1MDk0MDkuLmZjN2Nh YmMwOSAxMDA2NDQKKy0tLSBhL2dzcy1zZXJ2LWtyYjUuYworKysrIGIvZ3NzLXNlcnYta3JiNS5j CitAQCAtNDMsNiArNDMsNyBAQAorICNpbmNsdWRlICJsb2cuaCIKKyAjaW5jbHVkZSAibWlzYy5o IgorICNpbmNsdWRlICJzZXJ2Y29uZi5oIgorKyNpbmNsdWRlICJtYXRjaC5oIgorIAorICNpbmNs dWRlICJzc2gtZ3NzLmgiCisgCitAQCAtODcsNiArODgsMzMgQEAgc3NoX2dzc2FwaV9rcmI1X2lu aXQodm9pZCkKKyAJcmV0dXJuIDE7CisgfQorIAorKy8qIENoZWNrIGlmIGFueSBvZiB0aGUgaW5k aWNhdG9ycyBpbiB0aGUgS2VyYmVyb3MgdGlja2V0IG1hdGNoCisrICogb25lIG9mIGluZGljYXRv cnMgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZC9kZW5pZWQgcnVsZXMuCisrICogSW4gY2FzZSBvZiB0 aGUgbWF0Y2gsIGFwcGx5IHRoZSBkZWNpc2lvbiBmcm9tIHRoZSBydWxlLgorKyAqIEluIGNhc2Ug b2Ygbm8gaW5kaWNhdG9yIGZyb20gdGhlIHRpY2tldCBtYXRjaGluZyB0aGUgcnVsZSwgZGVueQor KyAqLworKworK3N0YXRpYyBpbnQKKytzc2hfZ3NzYXBpX2NoZWNrX2luZGljYXRvcnMoc3NoX2dz c2FwaV9jbGllbnQgKmNsaWVudCwgaW50ICptYXRjaGVkKQorK3sKKysJaW50IHJldDsKKysJdV9p bnQgaTsKKysJKm1hdGNoZWQgPSAtMTsKKysKKysJLyogQ2hlY2sgaW5kaWNhdG9ycyAqLworKwlm b3IgKGkgPSAwOyBjbGllbnQtPmluZGljYXRvcnNbaV0gIT0gTlVMTDsgaSsrKSB7CisrCQlyZXQg PSBtYXRjaF9wYXR0ZXJuX2xpc3QoY2xpZW50LT5pbmRpY2F0b3JzW2ldLAorKwkJCQkJIG9wdGlv bnMuZ3NzX2luZGljYXRvcnMsIDEpOworKwkJLyogbmVnYXRpdmUgb3IgcG9zaXRpdmUgbWF0Y2gg Ki8KKysJCWlmIChyZXQgIT0gMCkgeworKwkJCSptYXRjaGVkID0gaTsKKysJCQlyZXR1cm4gcmV0 OworKwkJfQorKwl9CisrCS8qIE5vIHJ1bGUgbWF0Y2hlZCAqLworKwlyZXR1cm4gMDsKKyt9Cisr CisgLyogQ2hlY2sgaWYgdGhpcyB1c2VyIGlzIE9LIHRvIGxvZ2luLiBUaGlzIG9ubHkgd29ya3Mg d2l0aCBrcmI1IC0gb3RoZXIKKyAgKiBHU1NBUEkgbWVjaGFuaXNtcyB3aWxsIG5lZWQgdGhlaXIg b3duLgorICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBpcyBPSyB0byBsb2cgaW4sIG90aGVy d2lzZSByZXR1cm5zIDAKK0BAIC0xOTMsMTUgKzIyMSwxNSBAQCBzdGF0aWMgaW50Cisgc3NoX2dz c2FwaV9rcmI1X3VzZXJvayhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICpuYW1lKQor IHsKKyAJa3JiNV9wcmluY2lwYWwgcHJpbmM7CistCWludCByZXR2YWw7CisrCWludCByZXR2YWws IG1hdGNoZWQsIHN1Y2Nlc3M7CisgCWNvbnN0IGNoYXIgKmVycm1zZzsKKyAJaW50IGs1bG9naW5f ZXhpc3RzOworIAorIAlpZiAoc3NoX2dzc2FwaV9rcmI1X2luaXQoKSA9PSAwKQorIAkJcmV0dXJu IDA7CisgCistCWlmICgocmV0dmFsID0ga3JiNV9wYXJzZV9uYW1lKGtyYl9jb250ZXh0LCBjbGll bnQtPmV4cG9ydGVkbmFtZS52YWx1ZSwKKy0JICAgICZwcmluYykpKSB7CisrCXJldHZhbCA9IGty YjVfcGFyc2VfbmFtZShrcmJfY29udGV4dCwgY2xpZW50LT5leHBvcnRlZG5hbWUudmFsdWUsICZw cmluYyk7CisrCWlmIChyZXR2YWwpIHsKKyAJCWVycm1zZyA9IGtyYjVfZ2V0X2Vycm9yX21lc3Nh Z2Uoa3JiX2NvbnRleHQsIHJldHZhbCk7CisgCQlsb2dpdCgia3JiNV9wYXJzZV9uYW1lKCk6ICUu MTAwcyIsIGVycm1zZyk7CisgCQlrcmI1X2ZyZWVfZXJyb3JfbWVzc2FnZShrcmJfY29udGV4dCwg ZXJybXNnKTsKK0BAIC0yMTYsMTcgKzI0NCw2MCBAQCBzc2hfZ3NzYXBpX2tyYjVfdXNlcm9rKHNz aF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKm5hbWUpCisgCWlmIChrNWxvZ2luX2V4aXN0 cyAmJgorIAkgICAgc3NoX2tyYjVfa3VzZXJvayhrcmJfY29udGV4dCwgcHJpbmMsIG5hbWUsIGs1 bG9naW5fZXhpc3RzKSkgeworIAkJcmV0dmFsID0gMTsKKy0JCWxvZ2l0KCJBdXRob3JpemVkIHRv ICVzLCBrcmI1IHByaW5jaXBhbCAlcyAoa3JiNV9rdXNlcm9rKSIsCistCQkgICAgbmFtZSwgKGNo YXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKKysJCWVycm1zZyA9ICJrcmI1X2t1c2Vy b2siOworIAl9IGVsc2UgaWYgKHNzaF9nc3NhcGlfa3JiNV9jbWRvayhwcmluYywgY2xpZW50LT5l eHBvcnRlZG5hbWUudmFsdWUsCisgCQluYW1lLCBrNWxvZ2luX2V4aXN0cykpIHsKKyAJCXJldHZh bCA9IDE7CistCQlsb2dpdCgiQXV0aG9yaXplZCB0byAlcywga3JiNSBwcmluY2lwYWwgJXMgIgor LQkJICAgICIoc3NoX2dzc2FwaV9rcmI1X2NtZG9rKSIsCistCQkgICAgbmFtZSwgKGNoYXIgKilj bGllbnQtPmRpc3BsYXluYW1lLnZhbHVlKTsKKy0JfSBlbHNlCisrCQllcnJtc2cgPSAic3NoX2dz c2FwaV9rcmI1X2NtZG9rIjsKKysJfSBlbHNlIHsKKyAJCXJldHZhbCA9IDA7CisrCQlnb3RvIG91 dDsKKysJfQorIAorKwkvKiBBdCB0aGlzIHBvaW50IHdlIGFyZSBnb29kIGlmIG5vIGluZGljYXRv cnMgd2VyZSBkZWZpbmVkICovCisrCWlmIChvcHRpb25zLmdzc19pbmRpY2F0b3JzID09IE5VTEwp IHsKKysJCXJldHZhbCA9IDE7CisrCQlnb3RvIG91dDsKKysJfQorKworKwkvKiBBdCB0aGlzIHBv aW50IHdlIGhhdmUgaW5kaWNhdG9ycyBkZWZpbmVkIGluIHRoZSBjb25maWd1cmF0aW9uLAorKwkg KiBpZiBjbGllbnR0IGRpZCBub3QgcHJvdmlkZSBhbnkgaW5kaWNhdG9ycywgd2UgcmVqZWN0ICov CisrCWlmICghY2xpZW50LT5pbmRpY2F0b3JzKSB7CisrCQlyZXR2YWwgPSAwOworKwkJbG9naXQo IkdTU0FQSSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGVuZm9yY2VkICIKKysJCSAgICAgICJi dXQgaW5kaWNhdG9ycyBub3QgcHJvdmlkZWQgYnkgdGhlIGNsaWVudC4gIgorKwkJICAgICAgImty YjUgcHJpbmNpcGFsICVzIGRlbmllZCIsCisrCQkgICAgICAoY2hhciAqKWNsaWVudC0+ZGlzcGxh eW5hbWUudmFsdWUpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJLyogQXQgdGhpcyBwb2ludCB0 aGUgY29uZmlndXJhdGlvbiBlbmZvcmNlcyBwcmVzZW5jZSBvZiBpbmRpY2F0b3JzCisrCSAqIGNo ZWNrIHRoZSBtYXRjaCAqLworKwltYXRjaGVkID0gLTE7CisrCXN1Y2Nlc3MgPSBzc2hfZ3NzYXBp X2NoZWNrX2luZGljYXRvcnMoY2xpZW50LCAmbWF0Y2hlZCk7CisrCisrCXN3aXRjaCAoc3VjY2Vz cykgeworKwljYXNlIDE6CisrCQlsb2dpdCgiUHJvdmlkZWQgaW5kaWNhdG9yICVzIGFsbG93ZWQg YnkgdGhlIGNvbmZpZ3VyYXRpb24iLAorKwkJICAgICAgY2xpZW50LT5pbmRpY2F0b3JzW21hdGNo ZWRdKTsKKysJCXJldHZhbCA9IDE7CisrCQlicmVhazsKKysJY2FzZSAtMToKKysJCWxvZ2l0KCJQ cm92aWRlZCBpbmRpY2F0b3IgJXMgcmVqZWN0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24iLAorKwkJ ICAgICAgY2xpZW50LT5pbmRpY2F0b3JzW21hdGNoZWRdKTsKKysJCXJldHZhbCA9IDA7CisrCQli cmVhazsKKysJZGVmYXVsdDoKKysJCWxvZ2l0KCJQcm92aWRlZCBpbmRpY2F0b3JzIGRvIG5vdCBt YXRjaCB0aGUgY29uZmlndXJhdGlvbiIpOworKwkJcmV0dmFsID0gMDsKKysJCWJyZWFrOworKwl9 CisrCisrb3V0OgorKwlpZiAocmV0dmFsID09IDEpIHsKKysJCWxvZ2l0KCJBdXRob3JpemVkIHRv ICVzLCBrcmI1IHByaW5jaXBhbCAlcyAoJXMpIiwKKysJCSAgICAgIG5hbWUsIChjaGFyICopY2xp ZW50LT5kaXNwbGF5bmFtZS52YWx1ZSwgZXJybXNnKTsKKysJfQorIAlrcmI1X2ZyZWVfcHJpbmNp cGFsKGtyYl9jb250ZXh0LCBwcmluYyk7CisgCXJldHVybiByZXR2YWw7CisgfQorZGlmZiAtLWdp dCBhL2dzcy1zZXJ2LmMgYi9nc3Mtc2Vydi5jCitpbmRleCA2ZWI3ZDIxNjMuLjY4NmFjNGViMyAx MDA2NDQKKy0tLSBhL2dzcy1zZXJ2LmMKKysrKyBiL2dzcy1zZXJ2LmMKK0BAIC01NSw3ICs1NSw3 IEBAIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisgCisgc3RhdGljIHNzaF9nc3NhcGlf Y2xpZW50IGdzc2FwaV9jbGllbnQgPQorICAgICB7IEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0Nf RU1QVFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5USUFMLAorLSAgICBHU1NfQ19OT19OQU1FLCBO VUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sIDAsIDB9OworKyAgICBHU1NfQ19O T19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sIDAsIDAsIE5VTEx9 OworIAorIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfbnVsbF9tZWNoID0KKyAgICAgeyBOVUxMLCBO VUxMLCB7MCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OworQEAgLTI5Nyw2 ICsyOTcsOTUgQEAgc3NoX2dzc2FwaV9wYXJzZV9lbmFtZShHc3NjdHh0ICpjdHgsIGdzc19idWZm ZXJfdCBlbmFtZSwgZ3NzX2J1ZmZlcl90IG5hbWUpCisgCXJldHVybiBHU1NfU19DT01QTEVURTsK KyB9CisgCisrCisrLyogRXh0cmFjdCBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGZyb20gdGhl IEtlcmJlcm9zIHRpY2tldC4gQXV0aGVudGljYXRpb24KKysgKiBpbmRpY2F0b3JzIGFyZSBHU1NB UEkgbmFtZSBhdHRyaWJ1dGVzIGZvciB0aGUgbmFtZSAiYXV0aC1pbmRpY2F0b3JzIi4KKysgKiBN dWx0aXBsZSBpbmRpY2F0b3JzIG1pZ2h0IGJlIHByZXNlbnQgaW4gdGhlIHRpY2tldC4KKysgKiBF YWNoIGluZGljYXRvciBpcyBhbiB1dGY4IHN0cmluZy4gKi8KKysKKysjZGVmaW5lIEFVVEhfSU5E SUNBVE9SU19UQUcgImF1dGgtaW5kaWNhdG9ycyIKKysjZGVmaW5lIFNTSF9HU1NBUElfTUFYX0lO RElDQVRPUlMgNjQKKysKKysvKiBQcml2aWxlZ2VkIChjYWxsZWQgZnJvbSBhY2NlcHRfc2VjdXJl X2N0eCkgKi8KKytzdGF0aWMgT01fdWludDMyCisrc3NoX2dzc2FwaV9nZXRpbmRpY2F0b3JzKEdz c2N0eHQgKmN0eCwgZ3NzX25hbWVfdCBnc3NfbmFtZSwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVu dCkKKyt7CisrCWdzc19idWZmZXJfc2V0X3QgYXR0cnMgPSBHU1NfQ19OT19CVUZGRVJfU0VUOwor Kwlnc3NfYnVmZmVyX2Rlc2MgdmFsdWUgPSBHU1NfQ19FTVBUWV9CVUZGRVI7CisrCWdzc19idWZm ZXJfZGVzYyBkaXNwbGF5X3ZhbHVlID0gR1NTX0NfRU1QVFlfQlVGRkVSOworKwlpbnQgaXNfbWVj aG5hbWUsIGF1dGhlbnRpY2F0ZWQsIGNvbXBsZXRlLCBtb3JlOworKwlzaXplX3QgY291bnQsIGk7 CisrCisrCWN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9uYW1lKCZjdHgtPm1pbm9yLCBnc3NfbmFt ZSwKKysJCQkJICAgICAgJmlzX21lY2huYW1lLCBOVUxMLCAmYXR0cnMpOworKwlpZiAoY3R4LT5t YWpvciAhPSBHU1NfU19DT01QTEVURSkgeworKwkJcmV0dXJuIChjdHgtPm1ham9yKTsKKysJfQor KworKwlpZiAoYXR0cnMgPT0gR1NTX0NfTk9fQlVGRkVSX1NFVCkgeworKwkJLyogTm8gaW5kaWNh dG9ycyBpbiB0aGUgdGlja2V0ICovCisrCQlyZXR1cm4gKDApOworKwl9CisrCisrCWNsaWVudC0+ aW5kaWNhdG9ycyA9IE5VTEw7CisrCWNvdW50ID0gMDsKKysJZm9yIChpID0gMDsgaSA8IGF0dHJz LT5jb3VudDsgaSsrKSB7CisrCQlhdXRoZW50aWNhdGVkID0gMDsKKysJCWNvbXBsZXRlID0gMDsK KysJCW1vcmUgPSAtMTsKKysJCS8qIHNraXAgYW55dGhpbmcgYnV0IGF1dGgtaW5kaWNhdG9ycyAq LworKwkJaWYgKCgoc2l6ZW9mKEFVVEhfSU5ESUNBVE9SU19UQUcpIC0gMSkgIT0gYXR0cnMtPmVs ZW1lbnRzW2ldLmxlbmd0aCkgfHwKKysJCSAgICBtZW1jbXAoQVVUSF9JTkRJQ0FUT1JTX1RBRywK KysJCQkgICBhdHRycy0+ZWxlbWVudHNbaV0udmFsdWUsCisrCQkJICAgc2l6ZW9mKEFVVEhfSU5E SUNBVE9SU19UQUcpIC0gMSkgIT0gMCkKKysJCQljb250aW51ZTsKKysJCS8qIHJldHJpZXZlIGFs bCBpbmRpY2F0b3JzICovCisrCQl3aGlsZSAobW9yZSAhPSAwKSB7CisrCQkJdmFsdWUudmFsdWUg PSBOVUxMOworKwkJCWRpc3BsYXlfdmFsdWUudmFsdWUgPSBOVUxMOworKwkJCWN0eC0+bWFqb3Ig PSBnc3NfZ2V0X25hbWVfYXR0cmlidXRlKCZjdHgtPm1pbm9yLCBnc3NfbmFtZSwKKysJCQkJCQkJ ICAgICZhdHRycy0+ZWxlbWVudHNbaV0sICZhdXRoZW50aWNhdGVkLAorKwkJCQkJCQkgICAgJmNv bXBsZXRlLCAmdmFsdWUsICZkaXNwbGF5X3ZhbHVlLCAmbW9yZSk7CisrCQkJaWYgKGN0eC0+bWFq b3IgIT0gR1NTX1NfQ09NUExFVEUpCisrCQkJCWdvdG8gb3V0OworKworKwkJCWlmICgodmFsdWUu dmFsdWUgIT0gTlVMTCkgJiYgYXV0aGVudGljYXRlZCkgeworKwkJCQlpZiAoY291bnQgPj0gU1NI X0dTU0FQSV9NQVhfSU5ESUNBVE9SUykgeworKwkJCQkJbG9naXQoInNzaF9nc3NhcGlfZ2V0aW5k aWNhdG9yczogdG9vIG1hbnkgIgorKwkJCQkJICAgICJpbmRpY2F0b3JzLCB0cnVuY2F0aW5nIGF0 ICVkIiwKKysJCQkJCSAgICBTU0hfR1NTQVBJX01BWF9JTkRJQ0FUT1JTKTsKKysJCQkJCS8qIHZh bHVlL2Rpc3BsYXlfdmFsdWUgcmVsZWFzZWQgYXQgb3V0OiAqLworKwkJCQkJZ290byBkb25lOwor KwkJCQl9CisrCisrCQkJCWNsaWVudC0+aW5kaWNhdG9ycyA9IHhyZWNhbGxvY2FycmF5KGNsaWVu dC0+aW5kaWNhdG9ycywgY291bnQsIGNvdW50ICsgMSwgc2l6ZW9mKGNoYXIqKSk7CisrCQkJCWlm IChjbGllbnQtPmluZGljYXRvcnMgPT0gTlVMTCkgeworKwkJCQkJZmF0YWwoInNzaF9nc3NhcGlf Z2V0aW5kaWNhdG9ycyBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Iik7CisrCQkJCX0KKysJCQkJ Y2xpZW50LT5pbmRpY2F0b3JzW2NvdW50XSA9IHhtYWxsb2ModmFsdWUubGVuZ3RoICsgMSk7Cisr CQkJCW1lbWNweShjbGllbnQtPmluZGljYXRvcnNbY291bnRdLCB2YWx1ZS52YWx1ZSwgdmFsdWUu bGVuZ3RoKTsKKysJCQkJY2xpZW50LT5pbmRpY2F0b3JzW2NvdW50XVt2YWx1ZS5sZW5ndGhdID0g J1wwJzsKKysJCQkJY291bnQrKzsKKysJCQl9CisrCQl9CisrCX0KKysKKytkb25lOgorKwkvKiBz bG90IFtjb3VudF0gaXMgemVyb2VkIGJ5IHJlY2FsbG9jYXJyYXksIHNlcnZlcyBhcyBOVUxMIHNl bnRpbmVsICovCisrCisrb3V0OgorKwlpZiAoY3R4LT5tYWpvciAhPSBHU1NfU19DT01QTEVURSAm JiBjbGllbnQtPmluZGljYXRvcnMgIT0gTlVMTCkgeworKwkJZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspCisrCQkJZnJlZShjbGllbnQtPmluZGljYXRvcnNbaV0pOworKwkJZnJlZShjbGllbnQt PmluZGljYXRvcnMpOworKwkJY2xpZW50LT5pbmRpY2F0b3JzID0gTlVMTDsKKysJfQorKwkodm9p ZCkgZ3NzX3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAmdmFsdWUpOworKwkodm9pZCkgZ3Nz X3JlbGVhc2VfYnVmZmVyKCZjdHgtPm1pbm9yLCAmZGlzcGxheV92YWx1ZSk7CisrCSh2b2lkKSBn c3NfcmVsZWFzZV9idWZmZXJfc2V0KCZjdHgtPm1pbm9yLCAmYXR0cnMpOworKwlyZXR1cm4gKGN0 eC0+bWFqb3IpOworK30KKysKKyAvKiBFeHRyYWN0IHRoZSBjbGllbnQgZGV0YWlscyBmcm9tIGEg Z2l2ZW4gY29udGV4dC4gVGhpcyBjYW4gb25seSByZWxpYWJseQorICAqIGJlIGNhbGxlZCBvbmNl IGZvciBhIGNvbnRleHQgKi8KKyAKK0BAIC0zODYsNiArNDc1LDEyIEBAIHNzaF9nc3NhcGlfZ2V0 Y2xpZW50KEdzc2N0eHQgKmN0eCwgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyAJfQorIAor IAlnc3NfcmVsZWFzZV9idWZmZXIoJmN0eC0+bWlub3IsICZlbmFtZSk7CisrCS8qIFJldHJpZXZl IGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMsIGlmIHRoZXkgZXhpc3QgKi8KKysJaWYgKChjdHgt Pm1ham9yID0gc3NoX2dzc2FwaV9nZXRpbmRpY2F0b3JzKGN0eCwKKysJICAgIGN0eC0+Y2xpZW50 LCBjbGllbnQpKSkgeworKwkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOworKwkJcmV0dXJuIChjdHgt Pm1ham9yKTsKKysJfQorIAorIAkvKiBXZSBjYW4ndCBjb3B5IHRoaXMgc3RydWN0dXJlLCBzbyB3 ZSBqdXN0IG1vdmUgdGhlIHBvaW50ZXIgdG8gaXQgKi8KKyAJY2xpZW50LT5jcmVkcyA9IGN0eC0+ Y2xpZW50X2NyZWRzOworQEAgLTQ1Myw2ICs1NDgsNyBAQCBpbnQKKyBzc2hfZ3NzYXBpX3VzZXJv ayhjaGFyICp1c2VyLCBzdHJ1Y3QgcGFzc3dkICpwdywgaW50IGtleCkKKyB7CisgCU9NX3VpbnQz MiBsbWluOworKwlzaXplX3QgaTsKKyAKKyAJKHZvaWQpIGtleDsgLyogdXNlZCBpbiBwcml2aWxl Z2Ugc2VwYXJhdGlvbiAqLworIAorQEAgLTQ3MSw4ICs1NjcsMTQgQEAgc3NoX2dzc2FwaV91c2Vy b2soY2hhciAqdXNlciwgc3RydWN0IHBhc3N3ZCAqcHcsIGludCBrZXgpCisgCQkJZ3NzX3JlbGVh c2VfYnVmZmVyKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFtZSk7CisgCQkJZ3NzX3Jl bGVhc2VfYnVmZmVyKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5hbWUpOworIAkJCWdz c19yZWxlYXNlX2NyZWQoJmxtaW4sICZnc3NhcGlfY2xpZW50LmNyZWRzKTsKKy0JCQlleHBsaWNp dF9iemVybygmZ3NzYXBpX2NsaWVudCwKKy0JCQkgICAgc2l6ZW9mKHNzaF9nc3NhcGlfY2xpZW50 KSk7CisrCisrCQkJaWYgKGdzc2FwaV9jbGllbnQuaW5kaWNhdG9ycyAhPSBOVUxMKSB7CisrCQkJ CWZvciAoaSA9IDA7IGdzc2FwaV9jbGllbnQuaW5kaWNhdG9yc1tpXSAhPSBOVUxMOyBpKyspCisr CQkJCQlmcmVlKGdzc2FwaV9jbGllbnQuaW5kaWNhdG9yc1tpXSk7CisrCQkJCWZyZWUoZ3NzYXBp X2NsaWVudC5pbmRpY2F0b3JzKTsKKysJCQl9CisrCisrCQkJZXhwbGljaXRfYnplcm8oJmdzc2Fw aV9jbGllbnQsIHNpemVvZihzc2hfZ3NzYXBpX2NsaWVudCkpOworIAkJCXJldHVybiAwOworIAkJ fQorIAllbHNlCitkaWZmIC0tZ2l0IGEvc2VydmNvbmYuYyBiL3NlcnZjb25mLmMKK2luZGV4IDZj MWJhNzdmNi4uMjY4YzA5ZDFjIDEwMDY0NAorLS0tIGEvc2VydmNvbmYuYworKysrIGIvc2VydmNv bmYuYworQEAgLTE0NSw2ICsxNDUsNyBAQCBpbml0aWFsaXplX3NlcnZlcl9vcHRpb25zKFNlcnZl ck9wdGlvbnMgKm9wdGlvbnMpCisgCW9wdGlvbnMtPmdzc19jbGVhbnVwX2NyZWRzID0gLTE7Cisg CW9wdGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9IC0xOworIAlvcHRpb25zLT5nc3Nfc3RyaWN0X2Fj Y2VwdG9yID0gLTE7CisrCW9wdGlvbnMtPmdzc19pbmRpY2F0b3JzID0gTlVMTDsKKyAJb3B0aW9u cy0+Z3NzX3N0b3JlX3Jla2V5ID0gLTE7CisgCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9 IE5VTEw7CisgCW9wdGlvbnMtPnVzZV9rdXNlcm9rID0gLTE7CitAQCAtNTYwLDYgKzU2MSw3IEBA IGZpbGxfZGVmYXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQorIAlD TEVBUl9PTl9OT05FKG9wdGlvbnMtPnJvdXRpbmdfZG9tYWluKTsKKyAJQ0xFQVJfT05fTk9ORShv cHRpb25zLT5ob3N0X2tleV9hZ2VudCk7CisgCUNMRUFSX09OX05PTkUob3B0aW9ucy0+cGVyX3Nv dXJjZV9wZW5hbHR5X2V4ZW1wdCk7CisrCUNMRUFSX09OX05PTkUob3B0aW9ucy0+Z3NzX2luZGlj YXRvcnMpOworIAorIAlmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy0+bnVtX2hvc3Rfa2V5X2ZpbGVz OyBpKyspCisgCQlDTEVBUl9PTl9OT05FKG9wdGlvbnMtPmhvc3Rfa2V5X2ZpbGVzW2ldKTsKK0BA IC01OTksNyArNjAxLDcgQEAgdHlwZWRlZiBlbnVtIHsKKyAJc1BlclNvdXJjZVBlbmFsdGllcywg c1BlclNvdXJjZVBlbmFsdHlFeGVtcHRMaXN0LAorIAlzQ2xpZW50QWxpdmVJbnRlcnZhbCwgc0Ns aWVudEFsaXZlQ291bnRNYXgsIHNBdXRob3JpemVkS2V5c0ZpbGUsCisgCXNHc3NBdXRoZW50aWNh dGlvbiwgc0dzc0NsZWFudXBDcmVkcywgc0dzc0RlbGVnYXRlQ3JlZHMsIHNHc3NFbmFibGVrNXVz ZXJzLCBzR3NzU3RyaWN0QWNjZXB0b3IsCistCXNHc3NLZXlFeCwgc0dzc0tleEFsZ29yaXRobXMs IHNHc3NTdG9yZVJla2V5LAorKwlzR3NzSW5kaWNhdG9ycywgc0dzc0tleUV4LCBzR3NzS2V4QWxn b3JpdGhtcywgc0dzc1N0b3JlUmVrZXksCisgCXNBY2NlcHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRU dW5uZWwsCisgCXNNYXRjaCwgc1Blcm1pdE9wZW4sIHNQZXJtaXRMaXN0ZW4sIHNGb3JjZUNvbW1h bmQsIHNDaHJvb3REaXJlY3RvcnksCisgCXNVc2VQcml2aWxlZ2VTZXBhcmF0aW9uLCBzQWxsb3dB Z2VudEZvcndhcmRpbmcsCitAQCAtNjk2LDYgKzY5OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeworIAl7 ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNHc3NTdG9yZVJla2V5LCBTU0hDRkdf R0xPQkFMIH0sCisgCXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzR3NzS2V4QWxnb3JpdGhtcywg U1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJnc3NhcGllbmFibGVrNXVzZXJzIiwgc0dzc0VuYWJsZWs1 dXNlcnMsIFNTSENGR19BTEwgfSwKKysJeyAiZ3NzYXBpaW5kaWNhdG9ycyIsIHNHc3NJbmRpY2F0 b3JzLCBTU0hDRkdfQUxMIH0sCisgI2Vsc2UKKyAJeyAiZ3NzYXBpYXV0aGVudGljYXRpb24iLCBz VW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKKyAJeyAiZ3NzYXBpY2xlYW51cGNyZWRlbnRpYWxz Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCitAQCAtNzA2LDYgKzcwOSw3IEBAIHN0 YXRpYyBzdHJ1Y3QgeworIAl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJnc3NhcGlrZXhhbGdvcml0aG1zIiwgc1Vu c3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisgCXsgImdzc2FwaWVuYWJsZWs1dXNlcnMiLCBz VW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKKysJeyAiZ3NzYXBpaW5kaWNhdG9ycyIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAorICNlbmRpZgorIAl7ICJnc3N1c2VzZXNzaW9uY2NhY2hl Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisgCXsgImdzc2FwaXVzZXNlc3Npb25j cmVkY2FjaGUiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKK0BAIC0xNzM3LDYgKzE3 NDEsMTUgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAq b3B0aW9ucywgY2hhciAqbGluZSwKKyAJCQlvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSB4 c3RyZHVwKGFyZyk7CisgCQlicmVhazsKKyAKKysJY2FzZSBzR3NzSW5kaWNhdG9yczoKKysJCWFy ZyA9IGFyZ3ZfbmV4dCgmYWMsICZhdik7CisrCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCisr CQkJZmF0YWwoIiVzIGxpbmUgJWQ6ICVzIG1pc3NpbmcgYXJndW1lbnQuIiwKKysJCQkgICAgZmls ZW5hbWUsIGxpbmVudW0sIGtleXdvcmQpOworKwkJaWYgKG9wdGlvbnMtPmdzc19pbmRpY2F0b3Jz ID09IE5VTEwpCisrCQkJb3B0aW9ucy0+Z3NzX2luZGljYXRvcnMgPSB4c3RyZHVwKGFyZyk7Cisr CQlicmVhazsKKysKKyAJY2FzZSBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbjoKKyAJCWludHB0ciA9 ICZvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbjsKKyAJCWdvdG8gcGFyc2VfZmxhZzsK K0BAIC0zMzgzLDYgKzMzOTYsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQorIAlk dW1wX2NmZ19mbXRpbnQoc0dzc1N0cmljdEFjY2VwdG9yLCBvLT5nc3Nfc3RyaWN0X2FjY2VwdG9y KTsKKyAJZHVtcF9jZmdfZm10aW50KHNHc3NTdG9yZVJla2V5LCBvLT5nc3Nfc3RvcmVfcmVrZXkp OworIAlkdW1wX2NmZ19zdHJpbmcoc0dzc0tleEFsZ29yaXRobXMsIG8tPmdzc19rZXhfYWxnb3Jp dGhtcyk7CisrCWR1bXBfY2ZnX3N0cmluZyhzR3NzSW5kaWNhdG9ycywgby0+Z3NzX2luZGljYXRv cnMpOworICNlbmRpZgorIAlkdW1wX2NmZ19mbXRpbnQoc1Bhc3N3b3JkQXV0aGVudGljYXRpb24s IG8tPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uKTsKKyAJZHVtcF9jZmdfZm10aW50KHNLYmRJbnRl cmFjdGl2ZUF1dGhlbnRpY2F0aW9uLAorZGlmZiAtLWdpdCBhL3NlcnZjb25mLmggYi9zZXJ2Y29u Zi5oCitpbmRleCA1NjkxMDBlNDcuLjc4MWYyMGM2MSAxMDA2NDQKKy0tLSBhL3NlcnZjb25mLmgK KysrKyBiL3NlcnZjb25mLmgKK0BAIC0xODEsNiArMTgxLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgewor IAljaGFyICAgKiphbGxvd19ncm91cHM7CisgCXVfaW50IG51bV9kZW55X2dyb3VwczsKKyAJY2hh ciAgICoqZGVueV9ncm91cHM7CisrCWNoYXIgICAqZ3NzX2luZGljYXRvcnM7CisgCisgCXVfaW50 IG51bV9zdWJzeXN0ZW1zOworIAljaGFyICAgKipzdWJzeXN0ZW1fbmFtZTsKK0BAIC0zMTAsNiAr MzExLDcgQEAgVEFJTFFfSEVBRChpbmNsdWRlX2xpc3QsIGluY2x1ZGVfaXRlbSk7CisgCQlNX0NQ X1NUUk9QVChyb3V0aW5nX2RvbWFpbik7IFwKKyAJCU1fQ1BfU1RST1BUKHBlcm1pdF91c2VyX2Vu dl9hbGxvd2xpc3QpOyBcCisgCQlNX0NQX1NUUk9QVChwYW1fc2VydmljZV9uYW1lKTsgXAorKwkJ TV9DUF9TVFJPUFQoZ3NzX2luZGljYXRvcnMpOyBcCisgCQlNX0NQX1NUUkFSUkFZT1BUKGF1dGhv cml6ZWRfa2V5c19maWxlcywgbnVtX2F1dGhrZXlzX2ZpbGVzLCAxKTtcCisgCQlNX0NQX1NUUkFS UkFZT1BUKHJldm9rZWRfa2V5c19maWxlcywgXAorIAkJICAgIG51bV9yZXZva2VkX2tleXNfZmls ZXMsIDEpOyBcCitkaWZmIC0tZ2l0IGEvc3NoLWdzcy5oIGIvc3NoLWdzcy5oCitpbmRleCAzMjlk YzlkYTAuLjE1MDY3MTlhOSAxMDA2NDQKKy0tLSBhL3NzaC1nc3MuaAorKysrIGIvc3NoLWdzcy5o CitAQCAtMzQsNiArMzQsMTIgQEAKKyAjaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaS5oPgorICNlbmRp ZgorIAorKyNpZmRlZiBIQVZFX0dTU0FQSV9FWFRfSAorKyNpbmNsdWRlIDxnc3NhcGlfZXh0Lmg+ CisrI2VsaWYgZGVmaW5lZChIQVZFX0dTU0FQSV9HU1NBUElfRVhUX0gpCisrI2luY2x1ZGUgPGdz c2FwaS9nc3NhcGlfZXh0Lmg+CisrI2VuZGlmCisrCisgI2lmZGVmIEtSQjUKKyAjIGlmbmRlZiBI RUlNREFMCisgIyAgaWZkZWYgSEFWRV9HU1NBUElfR0VORVJJQ19ICitAQCAtMTEyLDYgKzExOCw3 IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJc3NoX2dzc2FwaV9jY2FjaGUgc3RvcmU7CisgCWludCB1 c2VkOworIAlpbnQgdXBkYXRlZDsKKysJY2hhciAqKmluZGljYXRvcnM7IC8qIGF1dGggaW5kaWNh dG9ycyAqLworIH0gc3NoX2dzc2FwaV9jbGllbnQ7CisgCisgdHlwZWRlZiBzdHJ1Y3Qgc3NoX2dz c2FwaV9tZWNoX3N0cnVjdCB7CitkaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcuNSBiL3NzaGRfY29u ZmlnLjUKK2luZGV4IDFkMTZkYWJhZi4uNGNhODAwMTZjIDEwMDY0NAorLS0tIGEvc3NoZF9jb25m aWcuNQorKysrIGIvc3NoZF9jb25maWcuNQorQEAgLTgwMCw2ICs4MDAsNTIgQEAgZ3NzLW5pc3Rw MjU2LXNoYTI1Ni0KKyBnc3MtY3VydmUyNTUxOS1zaGEyNTYtCisgLkVkCisgVGhpcyBvcHRpb24g b25seSBhcHBsaWVzIHRvIGNvbm5lY3Rpb25zIHVzaW5nIEdTU0FQSS4KKysuSXQgQ20gR1NTQVBJ SW5kaWNhdG9ycworK1NwZWNpZmllcyB3aGV0aGVyIHRvIGFjY2VwdCBvciBkZW55IEdTU0FQSSBh dXRoZW50aWNhdGVkIGFjY2VzcyBpZiBLZXJiZXJvcworK21lY2hhbmlzbSBpcyB1c2VkIGFuZCBL ZXJiZXJvcyB0aWNrZXQgY29udGFpbnMgYSBwYXJ0aWN1bGFyIHNldCBvZgorK2F1dGhlbnRpY2F0 aW9uIGluZGljYXRvcnMuIFRoZSB2YWx1ZXMgY2FuIGJlIHNwZWNpZmllZCBhcyBhIGNvbW1hLXNl cGFyYXRlZCBsaXN0CisrLkNtIFshXW5hbWUxLFshXW5hbWUyLC4uLiAuCisrV2hlbiBpbmRpY2F0 b3IncyBuYW1lIGlzIHByZWZpeGVkIHdpdGggISwgdGhlIGF1dGhlbnRpY2F0aW9uIGluZGljYXRv ciAnbmFtZScKKyt3aWxsIGRlbnkgYWNjZXNzIHRvIHRoZSBzeXN0ZW0uIE90aGVyd2lzZSwgb25l IG9mIG5vbi1uZWdhdGVkIGF1dGhlbnRpY2F0aW9uCisraW5kaWNhdG9ycyBtdXN0IGJlIHByZXNl bnQgaW4gdGhlIEtlcmJlcm9zIHRpY2tldCB0byBhbGxvdyBhY2Nlc3MuIElmCisrLkNtIEdTU0FQ SUluZGljYXRvcnMKKytpcyBkZWZpbmVkLCBhIEtlcmJlcm9zIHRpY2tldCB0aGF0IGhhcyBpbmRp Y2F0b3JzIGJ1dCBkb2VzIG5vdCBtYXRjaCB0aGUKKytwb2xpY3kgd2lsbCBnZXQgZGVuaWFsLiBJ ZiBhdCBsZWFzdCBvbmUgaW5kaWNhdG9yIGlzIGNvbmZpZ3VyZWQsIHdoZXRoZXIgZm9yCisrYWNj ZXNzIG9yIGRlbmlhbCwgdGlja2V0cyB3aXRob3V0IGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMg d2lsbCBiZSBleHBsaWNpdGx5CisrcmVqZWN0ZWQuCisrLlBwCisrQnkgZGVmYXVsdCBzeXN0ZW1z IHVzaW5nIE1JVCBLZXJiZXJvcyAxLjE3IG9yIGxhdGVyIHdpbGwgbm90IGFzc2lnbiBhbnkKKytp bmRpY2F0b3JzLiBTUEFLRSBhbmQgUEtJTklUIG1ldGhvZHMgYWRkIGF1dGhlbnRpY2F0aW9uIGlu ZGljYXRvcnMKKyt0byBhbGwgc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbnMuIFRoZSBTUEFLRSBw cmUtYXV0aGVudGljYXRpb24gbWV0aG9kIGlzCisrcHJlZmVycmVkIG92ZXIgYW4gZW5jcnlwdGVk IHRpbWVzdGFtcCBwcmUtYXV0aGVudGljYXRpb24gd2hlbiBwYXNzd29yZHMgdXNlZCB0bworK2F1 dGhlbnRpY2F0ZSB1c2VyIHByaW5jaXBhbHMuIEtlcmJlcm9zIEtEQ3MgYnVpbHQgd2l0aCBIZWlt ZGFsIEtlcmJlcm9zCisrKGluY2x1ZGluZyBTYW1iYSBBRCBEQyBidWlsdCB3aXRoIEhlaW1kYWwp IGRvIG5vdCBhZGQgYXV0aGVudGljYXRpb24KKytpbmRpY2F0b3JzLiBIb3dldmVyLCBPcGVuU1NI IGJ1aWx0IGFnYWluc3QgSGVpbWRhbCBLZXJiZXJvcyBsaWJyYXJ5IGlzIGFibGUgdG8KKytpbnF1 aXJlIGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMgYW5kIHRodXMgY2FuIGJlIHVzZWQgdG8gY2hl Y2sgZm9yIHRoZWlyIHByZXNlbmNlLgorKy5QcAorK0luZGljYXRvciBuYW1lIGlzIGNhc2Utc2Vu c2l0aXZlIGFuZCBkZXBlbmRzIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIGEKKytwYXJ0aWN1bGFy IEtlcmJlcm9zIGRlcGxveW1lbnQuIEluZGljYXRvcnMgYXZhaWxhYmxlIGluIE1JVCBLZXJiZXJv cyBhbmQKKytGcmVlSVBBIGVudmlyb25tZW50czoKKysuUHAKKysuQmwgLXRhZyAtd2lkdGggWFhY WCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAorKy5JdCBDbSBoYXJkZW5lZAorK1NQQUtFIG9yIGVu Y3J5cHRlZCB0aW1lc3RhbXAgcHJlLWF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgaW4gTUlUIEtl cmJlcm9zIGFuZCBGcmVlSVBBCisrLkl0IENtIHBraW5pdAorK3NtYXJ0Y2FyZCBvciBQS0NTMTEg dG9rZW4tYmFzZWQgcHJlLWF1dGhlbnRpY2F0aW9uIGluIE1JVCBLZXJiZXJvcyBhbmQgRnJlZUlQ QQorKy5JdCBDbSByYWRpdXMKKytwcmUtYXV0aGVudGljYXRpb24gYmFzZWQgb24gYSBSQURJVVMg c2VydmVyIGluIE1JVCBLZXJiZXJvcyBhbmQgRnJlZUlQQQorKy5JdCBDbSBvdHAKKytUT1RQL0hP VFAtYmFzZWQgdHdvLWZhY3RvciBwcmUtYXV0aGVudGljYXRpb24gaW4gRnJlZUlQQQorKy5JdCBD bSBpZHAKKytPQXV0aDItYmFzZWQgcHJlLWF1dGhlbnRpY2F0aW9uIGluIEZyZWVJUEEgdXNpbmcg YW4gZXh0ZXJuYWwgaWRlbnRpdHkgcHJvdmlkZXIKKythbmQgZGV2aWNlIGF1dGhvcml6YXRpb24g Z3JhbnQgZmxvdworKy5JdCBDbSBwYXNza2V5CisrRklETzItYmFzZWQgcHJlLWF1dGhlbnRpY2F0 aW9uIGluIEZyZWVJUEEsIHVzaW5nIEZJRE8yIFVTQiBhbmQgTkZDIHRva2VucworKy5FbAorKy5Q cAorK1RoZSBkZWZhdWx0CisrLkRxIG5vbmUKKytpcyB0byBub3QgdXNlIEdTU0FQSSBhdXRoZW50 aWNhdGlvbiBpbmRpY2F0b3JzIGZvciBhY2Nlc3MgZGVjaXNpb25zLgorIC5JdCBDbSBIb3N0YmFz ZWRBY2NlcHRlZEFsZ29yaXRobXMKKyBUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRl IGJ5CisgLlhyIGNyeXB0by1wb2xpY2llcyA3IC4KKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQg YS8wMDQ4LU5JU1QtY3VydmVzLWh5YnJpZC1LRVgtaW1wbGVtZW50YXRpb24ucGF0Y2ggYi8wMDQ4 LU5JU1QtY3VydmVzLWh5YnJpZC1LRVgtaW1wbGVtZW50YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMGNmZQotLS0gL2Rldi9udWxsCisrKyBiLzAwNDgt TklTVC1jdXJ2ZXMtaHlicmlkLUtFWC1pbXBsZW1lbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDEz MDMgQEAKK0Zyb20gMzgwMmE1MWI2OTA0NGY0MTliYjUzZGVhZmY3MDYxZDYyZDk1OTZmZSBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdt YWlsLmNvbT4KK0RhdGU6IE1vbiwgMjAgT2N0IDIwMjUgMTY6MDc6MzEgKzAyMDAKK1N1YmplY3Q6 IFtQQVRDSCA0OC81NF0gTklTVCBjdXJ2ZXMgaHlicmlkIEtFWCBpbXBsZW1lbnRhdGlvbgorCist LS0KKyBjb21wYXQuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMyArLQorIGNvbXBhdC5o ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBjcnlwdG9fYXBpLmggICAgICAgICAg ICAgICAgICAgICB8ICAgNCArCisga2V4LW5hbWVzLmMgICAgICAgICAgICAgICAgICAgICAgfCAg ODkgKysrLQorIGtleC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBrZXgu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxOSArCisga2V4Z2VuLmMgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgNTYgKystCisga2V4bWxrZW03Njh4MjU1MTkuYyAgICAgICAgICAg ICAgfCA2NzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIG1vbml0b3IuYyAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAyICsKKyBteXByb3Bvc2FsLmggICAgICAgICAgICAgICAg ICAgICB8ICAgNCArCisgcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMgfCAgIDQgKwor IHNzaC1rZXlzY2FuLmMgICAgICAgICAgICAgICAgICAgIHwgICAyICsKKyBzc2hfYXBpLmMgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNCArCisgc3NoY29ubmVjdDIuYyAgICAgICAgICAgICAg ICAgICAgfCAgIDIgKworIHNzaGQtYXV0aC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsK KyAxNSBmaWxlcyBjaGFuZ2VkLCA4NTEgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCisK K2RpZmYgLS1naXQgYS9jb21wYXQuYyBiL2NvbXBhdC5jCitpbmRleCA0MzEyNTEwZTUuLmU2Yzc5 MzVkNCAxMDA2NDQKKy0tLSBhL2NvbXBhdC5jCisrKysgYi9jb21wYXQuYworQEAgLTM2LDYgKzM2 LDcgQEAKKyAjaW5jbHVkZSAiY29tcGF0LmgiCisgI2luY2x1ZGUgImxvZy5oIgorICNpbmNsdWRl ICJtYXRjaC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyAKKyAvKiBkZXRlcm1pbmUg YnVnIGZsYWdzIGZyb20gU1NIIHByb3RvY29sIGJhbm5lciAqLworIHZvaWQKK0BAIC0xNDgsOCAr MTQ5LDkgQEAgY2hhciAqCisgY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICpzc2gsIGNv bnN0IGNoYXIgKnApCisgeworIAljaGFyICpjcCA9IE5VTEwsICpjcDIgPSBOVUxMOworKwlpbnQg bWxrZW1fYXZhaWxhYmxlID0gaXNfbWxrZW03NjhfYXZhaWxhYmxlKCk7CisgCistCWlmICgoc3No LT5jb21wYXQgJiAoU1NIX0JVR19DVVJWRTI1NTE5UEFEfFNTSF9PTERfREhHRVgpKSA9PSAwKQor KwlpZiAoKHNzaC0+Y29tcGF0ICYgKFNTSF9CVUdfQ1VSVkUyNTUxOVBBRHxTU0hfT0xEX0RIR0VY KSkgPT0gMCAmJiBtbGtlbV9hdmFpbGFibGUgPT0gMikKKyAJCXJldHVybiB4c3RyZHVwKHApOwor IAlkZWJ1ZzJfZigib3JpZ2luYWwgS0VYIHByb3Bvc2FsOiAlcyIsIHApOworIAlpZiAoKHNzaC0+ Y29tcGF0ICYgU1NIX0JVR19DVVJWRTI1NTE5UEFEKSAhPSAwKQorQEAgLTE2NCw2ICsxNjYsMjUg QEAgY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICpzc2gsIGNvbnN0IGNoYXIgKnApCisg CQlmcmVlKGNwKTsKKyAJCWNwID0gY3AyOworIAl9CisrCWlmIChtbGtlbV9hdmFpbGFibGUgPT0g MikKKysJCXJldHVybiBjcCA/IGNwIDogeHN0cmR1cChwKTsKKysJaWYgKG1sa2VtX2F2YWlsYWJs ZSA9PSAxICYmIEZJUFNfbW9kZSgpKSB7CisrCQlpZiAoKGNwMiA9IG1hdGNoX2ZpbHRlcl9kZW55 bGlzdChjcCA/IGNwIDogcCwKKysJCSAgICAibWxrZW03Njh4MjU1MTktc2hhMjU2IikpID09IE5V TEwpCisrCQkJZmF0YWwoIm1hdGNoX2ZpbHRlcl9kZW55bGlzdCBmYWlsZWQiKTsKKysJCWZyZWUo Y3ApOworKwkJY3AgPSBjcDI7CisrCX0KKysJaWYgKG1sa2VtX2F2YWlsYWJsZSA9PSAwKSB7Cisr CQlpZiAoKGNwMiA9IG1hdGNoX2ZpbHRlcl9kZW55bGlzdChjcCA/IGNwIDogcCwKKysJCSAgICAi bWxrZW03Njh4MjU1MTktc2hhMjU2LCIKKysJCSAgICAibWxrZW03NjhuaXN0cDI1Ni1zaGEyNTYs IgorKwkJICAgICJtbGtlbTEwMjRuaXN0cDM4NC1zaGEzODQiKSkgPT0gTlVMTCkKKysJCQlmYXRh bCgibWF0Y2hfZmlsdGVyX2RlbnlsaXN0IGZhaWxlZCIpOworKwkJZnJlZShjcCk7CisrCQljcCA9 IGNwMjsKKysJfQorKworIAlpZiAoY3AgPT0gTlVMTCB8fCAqY3AgPT0gJ1wwJykKKyAJCWZhdGFs KCJObyBzdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgZm91bmQiKTsKKyAJZGVidWcy X2YoImNvbXBhdCBLRVggcHJvcG9zYWw6ICVzIiwgY3ApOworZGlmZiAtLWdpdCBhL2NvbXBhdC5o IGIvY29tcGF0LmgKK2luZGV4IDJlNmRiNWJmOS4uYjc4ZTU1YjY5IDEwMDY0NAorLS0tIGEvY29t cGF0LmgKKysrKyBiL2NvbXBhdC5oCitAQCAtNjIsNCArNjIsNSBAQCBzdHJ1Y3Qgc3NoOworIAor IHZvaWQgICAgY29tcGF0X2Jhbm5lcihzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7CisgY2hh cgkqY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7CisraW50 IGlzX21sa2VtNzY4X2F2YWlsYWJsZSh2b2lkKTsKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9jcnlw dG9fYXBpLmggYi9jcnlwdG9fYXBpLmgKK2luZGV4IGY1ZTM4YjU0Ny4uNmE4ZWRlMDY3IDEwMDY0 NAorLS0tIGEvY3J5cHRvX2FwaS5oCisrKysgYi9jcnlwdG9fYXBpLmgKK0BAIC04Miw0ICs4Miw4 IEBAIGludAljcnlwdG9fa2VtX3NudHJ1cDc2MV9rZXlwYWlyKHVuc2lnbmVkIGNoYXIgKnBrLCB1 bnNpZ25lZCBjaGFyICpzayk7CisgI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRF WFRCWVRFUyAxMDg4CisgI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTIDMyCisgCisr I2RlZmluZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUyAxNTY4CisrI2RlZmlu ZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFUyAzMTY4CisrI2RlZmluZSBjcnlw dG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVMgMTU2OAorKworICNlbmRpZiAvKiBjcnlw dG9fYXBpX2ggKi8KK2RpZmYgLS1naXQgYS9rZXgtbmFtZXMuYyBiL2tleC1uYW1lcy5jCitpbmRl eCA4ODJmMjkwNWIuLjYwZmM0ODdiMCAxMDA2NDQKKy0tLSBhL2tleC1uYW1lcy5jCisrKysgYi9r ZXgtbmFtZXMuYworQEAgLTM0LDYgKzM0LDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2VuZGlmCisgCisgI2luY2x1ZGUgImtleC5o IgorQEAgLTkwLDYgKzkxLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGtleGFsZ3Nb XSA9IHsKKyAjaWZkZWYgVVNFX01MS0VNNzY4WDI1NTE5CisgCXsgS0VYX01MS0VNNzY4WDI1NTE5 X1NIQTI1NiwgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTYsIDAsCisgCSAgICBTU0hfRElH RVNUX1NIQTI1NiwgS0VYX0lTX1BRIH0sCisrCXsgS0VYX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2 LCBLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2LCAwLAorKwkgICAgU1NIX0RJR0VTVF9T SEEyNTYsIEtFWF9JU19QUSB9LAorKwl7IEtFWF9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQsIEtF WF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0LCAwLAorKwkgICAgU1NIX0RJR0VTVF9TSEEz ODQsIEtFWF9JU19QUSB9LAorICNlbmRpZgorICNlbmRpZiAvKiBIQVZFX0VWUF9TSEEyNTYgfHwg IVdJVEhfT1BFTlNTTCAqLworIAl7IE5VTEwsIDAsIC0xLCAtMSwgMCB9LAorQEAgLTEwOCwxNCAr MTEzLDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGdzc19rZXhhbGdzW10gPSB7Cisg CXsgTlVMTCwgMCwgLTEsIC0xLCAwfSwKKyB9OworIAorLXN0YXRpYyBpbnQgaXNfbWxrZW03Njhf YXZhaWxhYmxlKCkKKysvKgorKyAqIDAgLSB1bmF2YWlsYWJsZQorKyAqIDEgLSBhdmFpbGFibGUg aW4gbm9uLUZJUFMgbW9kZQorKyAqIDIgLSBhdmFpbGFibGUgYWx3YXlzCisrICovCisraW50IGlz X21sa2VtNzY4X2F2YWlsYWJsZSgpCisgeworIAlzdGF0aWMgaW50IGlzX2ZldGNoZWQgPSAtMTsK KyAKKyAJaWYgKGlzX2ZldGNoZWQgPT0gLTEpIHsKKy0JCUVWUF9LRU0gKm1sa2VtNzY4ID0gRVZQ X0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKKy0JCWlzX2ZldGNoZWQgPSBtbGtl bTc2OCAhPSBOVUxMID8gMSA6IDA7CisrCQlFVlBfS0VNICptbGtlbTc2OCA9IE5VTEw7CisrCisr CQlFUlJfc2V0X21hcmsoKTsKKysJCW1sa2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxr ZW03NjgiLCBOVUxMKTsKKysJCWlzX2ZldGNoZWQgPSAobWxrZW03NjggPT0gTlVMTCkgPyAwIDog MjsKKysJCWlmIChpc19mZXRjaGVkID09IDAgJiYgRklQU19tb2RlKCkgPT0gMSkgeworKwkJICAg IG1sa2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCAicHJvdmlkZXI9ZGVm YXVsdCwtZmlwcyIpOworKwkJICAgIGlzX2ZldGNoZWQgPSAobWxrZW03NjggPT0gTlVMTCkgPyAw IDogMTsKKysJCX0KKyAJCUVWUF9LRU1fZnJlZShtbGtlbTc2OCk7CisrCQlFUlJfcG9wX3RvX21h cmsoKTsKKyAJfQorIAorIAlyZXR1cm4gaXNfZmV0Y2hlZDsKK0BAIC0xMjcsMTEgKzE0NSwzMiBA QCBrZXhfYWxnX2xpc3RfaW50ZXJuYWwoY2hhciBzZXAsIGNvbnN0IHN0cnVjdCBrZXhhbGcgKmFs Z3MpCisgCWNoYXIgKnJldCA9IE5VTEw7CisgCWNvbnN0IHN0cnVjdCBrZXhhbGcgKms7CisgCWNo YXIgc2VwX3N0clsyXSA9IHtzZXAsICdcMCd9OworKwlpbnQgeDI1NTE5bWxrZW1fYXZhaWxhYmxl ID0gMCwgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDA7CisgCistCWZvciAoayA9IGtleGFsZ3M7IGst Pm5hbWUgIT0gTlVMTDsgaysrKSB7CistCQlpZiAoc3RyY21wKGstPm5hbWUsIEtFWF9NTEtFTTc2 OFgyNTUxOV9TSEEyNTYpID09IDAKKy0JCQkmJiAhaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkpCisr CS8qCisrCSAqIEZJUFMgcHJvdmlkZXIgY2FuIHByb3ZpZGUgTUwtS0VNcyBhbmQgdGhlbiBhbGwg aHlicmlkcyBhcmUgYXZhaWxhYmxlCisrCSAqIE90aGVyd2lzZSBvbmx5IE5JU1QgaHlicmlkcyBh cmUgYXZhaWxhYmxlCisrCSAqICovCisrCWlmIChGSVBTX21vZGUoKSkgeworKwkgICAgaWYgKGlz X21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDIpIHsKKysJICAgICAgICB4MjU1MTltbGtlbV9hdmFp bGFibGUgPSAxOworKwkgICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOworKwkgICAgfSBl bHNlIGlmIChpc19tbGtlbTc2OF9hdmFpbGFibGUoKSA9PSAxKSB7CisrCSAgICAgICAgbmlzdG1s a2VtX2F2YWlsYWJsZSA9IDE7CisrCSAgICB9CisrCX0gZWxzZSB7CisrCSAgICBpZiAoaXNfbWxr ZW03NjhfYXZhaWxhYmxlKCkgPiAwKSB7CisrCSAgICAgICAgeDI1NTE5bWxrZW1fYXZhaWxhYmxl ID0gMTsKKysJICAgICAgICBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMTsKKysJICAgIH0KKysJfQor KworKwlmb3IgKGsgPSBhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgeworKwkJaWYgKCAgKHN0 cmNtcChrLT5uYW1lLCBLRVhfTUxLRU03NjhYMjU1MTlfU0hBMjU2KSA9PSAwICAgICYmIHgyNTUx OW1sa2VtX2F2YWlsYWJsZSA9PSAwKQorKwkJICAgfHwgKHN0cmNtcChrLT5uYW1lLCBLRVhfTUxL RU03NjhOSVNUUDI1Nl9TSEEyNTYpID09IDAgICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkK KysJCSAgIHx8IChzdHJjbXAoay0+bmFtZSwgS0VYX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NCkg PT0gMCAmJiBuaXN0bWxrZW1fYXZhaWxhYmxlID09IDApKQorIAkJCWNvbnRpbnVlOworKworIAkJ eGV4dGVuZGYoJnJldCwgc2VwX3N0ciwgIiVzIiwgay0+bmFtZSk7CisgCX0KKyAKK0BAIC0xNTQs MTAgKzE5MywzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyAqCisga2V4X2FsZ19ieV9u YW1lKGNvbnN0IGNoYXIgKm5hbWUpCisgeworIAljb25zdCBzdHJ1Y3Qga2V4YWxnICprOworKwlp bnQgeDI1NTE5bWxrZW1fYXZhaWxhYmxlID0gMCwgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDA7Cisg CistCWlmIChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMAorLQkJ JiYgIWlzX21sa2VtNzY4X2F2YWlsYWJsZSgpKQorLQlyZXR1cm4gTlVMTDsKKysJLyoKKysJICog RklQUyBwcm92aWRlciBjYW4gcHJvdmlkZSBNTC1LRU1zIGFuZCB0aGVuIGFsbCBoeWJyaWRzIGFy ZSBhdmFpbGFibGUKKysJICogT3RoZXJ3aXNlIG9ubHkgTklTVCBoeWJyaWRzIGFyZSBhdmFpbGFi bGUKKysJICogKi8KKysJaWYgKEZJUFNfbW9kZSgpKSB7CisrCSAgICBpZiAoaXNfbWxrZW03Njhf YXZhaWxhYmxlKCkgPT0gMikgeworKwkgICAgICAgIHgyNTUxOW1sa2VtX2F2YWlsYWJsZSA9IDE7 CisrCSAgICAgICAgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDE7CisrCSAgICB9IGVsc2UgaWYgKGlz X21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDEpIHsKKysJICAgICAgICBuaXN0bWxrZW1fYXZhaWxh YmxlID0gMTsKKysJICAgIH0KKysJfSBlbHNlIHsKKysJICAgIGlmIChpc19tbGtlbTc2OF9hdmFp bGFibGUoKSA+IDApIHsKKysJICAgICAgICB4MjU1MTltbGtlbV9hdmFpbGFibGUgPSAxOworKwkg ICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOworKwkgICAgfQorKwl9CisrCisrCWlmICgg IChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMCAgICAmJiB4MjU1 MTltbGtlbV9hdmFpbGFibGUgPT0gMCkKKysJICAgfHwgKHN0cmNtcChuYW1lLCBLRVhfTUxLRU03 NjhOSVNUUDI1Nl9TSEEyNTYpID09IDAgICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkKKysJ ICAgfHwgKHN0cmNtcChuYW1lLCBLRVhfTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0KSA9PSAwICYm IG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkpCisrCSAgIHJldHVybiBOVUxMOworIAorIAlmb3Ig KGsgPSBrZXhhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgeworIAkJaWYgKHN0cmNtcChrLT5u YW1lLCBuYW1lKSA9PSAwKQorQEAgLTIyOSw4ICsyODgsMTYgQEAga2V4X25hbWVzX3ZhbGlkKGNv bnN0IGNoYXIgKm5hbWVzKQorIAlmb3IgKChwID0gc3Ryc2VwKCZjcCwgIiwiKSk7IHAgJiYgKnAg IT0gJ1wwJzsKKyAJICAgIChwID0gc3Ryc2VwKCZjcCwgIiwiKSkpIHsKKyAJCWlmIChrZXhfYWxn X2J5X25hbWUocCkgPT0gTlVMTCkgeworLQkJCWlmIChGSVBTX21vZGUoKSkKKy0JCQkJZXJyb3Io IlwiJS4xMDBzXCIgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIiwgcCk7CisrCQkJaWYgKEZJ UFNfbW9kZSgpKSB7CisrCQkJCWlmICgoc3RyY21wKHAsIEtFWF9NTEtFTTc2OFgyNTUxOV9TSEEy NTYpID09IDApCisrCQkJCSAgICB8fCAoc3RyY21wKHAsIEtFWF9NTEtFTTc2OE5JU1RQMjU2X1NI QTI1NikgPT0gMCkKKysJCQkJICAgIHx8IChzdHJjbXAocCwgS0VYX01MS0VNMTAyNE5JU1RQMzg0 X1NIQTM4NCkgPT0gMCkpIHsKKysJCQkJCWRlYnVnKCJcIiUuMTAwc1wiIGlzIG5vdCBhbGxvd2Vk IGluIEZJUFMgbW9kZSIsIHApOworKwkJCQkJY29udGludWU7CisrCQkJCX0KKysJCQkJZWxzZQor KwkJCQkJZXJyb3IoIlwiJS4xMDBzXCIgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIiwgcCk7 CisrCQkJfQorIAkJCWVsc2UKKyAJCQkJZXJyb3IoIlVuc3VwcG9ydGVkIEtFWCBhbGdvcml0aG0g XCIlLjEwMHNcIiIsIHApOworIAkJCWZyZWUocyk7CitkaWZmIC0tZ2l0IGEva2V4LmMgYi9rZXgu YworaW5kZXggMWViM2NhOWQzLi44Y2ZkNDQ2YzAgMTAwNjQ0CistLS0gYS9rZXguYworKysrIGIv a2V4LmMKK0BAIC03NTcsNiArNzU3LDcgQEAga2V4X2ZyZWUoc3RydWN0IGtleCAqa2V4KQorICNp ZmRlZiBPUEVOU1NMX0hBU19FQ0MKKyAJRUNfS0VZX2ZyZWUoa2V4LT5lY19jbGllbnRfa2V5KTsK KyAjZW5kaWYgLyogT1BFTlNTTF9IQVNfRUNDICovCisrCUVWUF9QS0VZX2ZyZWUoa2V4LT5lY19o eWJyaWRfY2xpZW50X2tleSk7CisgI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLworIAlmb3IgKG1v ZGUgPSAwOyBtb2RlIDwgTU9ERV9NQVg7IG1vZGUrKykgeworIAkJa2V4X2ZyZWVfbmV3a2V5cyhr ZXgtPm5ld2tleXNbbW9kZV0pOworZGlmZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKK2luZGV4IGZm NDEzMjRlOS4uZDExMGFkMjlhIDEwMDY0NAorLS0tIGEva2V4LmgKKysrKyBiL2tleC5oCitAQCAt NzIsNiArNzIsOCBAQAorICNkZWZpbmUJS0VYX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTIJInNudHJ1 cDc2MXgyNTUxOS1zaGE1MTIiCisgI2RlZmluZQlLRVhfU05UUlVQNzYxWDI1NTE5X1NIQTUxMl9P TEQJInNudHJ1cDc2MXgyNTUxOS1zaGE1MTJAb3BlbnNzaC5jb20iCisgI2RlZmluZQlLRVhfTUxL RU03NjhYMjU1MTlfU0hBMjU2CSJtbGtlbTc2OHgyNTUxOS1zaGEyNTYiCisrI2RlZmluZQlLRVhf TUxLRU03NjhOSVNUUDI1Nl9TSEEyNTYgICAgICJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1NiIKKysj ZGVmaW5lCUtFWF9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQgICAgIm1sa2VtMTAyNG5pc3RwMzg0 LXNoYTM4NCIKKyAKKyAjZGVmaW5lIENPTVBfTk9ORQkwCisgI2RlZmluZSBDT01QX0RFTEFZRUQJ MgorQEAgLTExMCw2ICsxMTIsOCBAQCBlbnVtIGtleF9leGNoYW5nZSB7CisgCUtFWF9DMjU1MTlf U0hBMjU2LAorIAlLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTIsCisgCUtFWF9LRU1fTUxL RU03NjhYMjU1MTlfU0hBMjU2LAorKwlLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2LAor KwlLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NCwKKyAjaWZkZWYgR1NTQVBJCisgCUtF WF9HU1NfR1JQMV9TSEExLAorIAlLRVhfR1NTX0dSUDE0X1NIQTEsCitAQCAtMjExLDYgKzIxNSw5 IEBAIHN0cnVjdCBrZXggeworIAl1X2NoYXIgc250cnVwNzYxX2NsaWVudF9rZXlbY3J5cHRvX2tl bV9zbnRydXA3NjFfU0VDUkVUS0VZQllURVNdOyAvKiBLRU0gKi8KKyAJdV9jaGFyIG1sa2VtNzY4 X2NsaWVudF9rZXlbY3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFU107IC8qIEtFTSAq LworIAlzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfcHViOworKwkvKiBGSVhNRSAqLworKwlFVlBfUEtF WSAqZWNfaHlicmlkX2NsaWVudF9rZXk7IC8qIE5JU1QgaHlicmlkcyAqLworKwl1X2NoYXIgbWxr ZW0xMDI0X2NsaWVudF9rZXlbY3J5cHRvX2tlbV9tbGtlbTEwMjRfU0VDUkVUS0VZQllURVNdOyAv KiBNTC1LRU0gMTAyNCArIE5JU1QgKi8KKyB9OworIAorIGludAkga2V4X25hbWVfdmFsaWQoY29u c3QgY2hhciAqKTsKK0BAIC0yOTMsNiArMzAwLDE4IEBAIGludAkga2V4X2tlbV9tbGtlbTc2OHgy NTUxOV9lbmMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCisgaW50CSBrZXhf a2VtX21sa2VtNzY4eDI1NTE5X2RlYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYg KiwKKyAgICAgc3RydWN0IHNzaGJ1ZiAqKik7CisgCisraW50CSBrZXhfa2VtX21sa2VtNzY4bmlz dHAyNTZfa2V5cGFpcihzdHJ1Y3Qga2V4ICopOworK2ludAkga2V4X2tlbV9tbGtlbTc2OG5pc3Rw MjU2X2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKKysgICAgc3RydWN0 IHNzaGJ1ZiAqKiwgc3RydWN0IHNzaGJ1ZiAqKik7CisraW50CSBrZXhfa2VtX21sa2VtNzY4bmlz dHAyNTZfZGVjKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAorKyAgICBzdHJ1 Y3Qgc3NoYnVmICoqKTsKKysKKytpbnQJIGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfa2V5cGFp cihzdHJ1Y3Qga2V4ICopOworK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9lbmMoc3Ry dWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCisrICAgIHN0cnVjdCBzc2hidWYgKios IHN0cnVjdCBzc2hidWYgKiopOworK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9kZWMo c3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCisrICAgIHN0cnVjdCBzc2hidWYg KiopOworKworIGludAkga2V4X2RoX2tleWdlbihzdHJ1Y3Qga2V4ICopOworIGludAkga2V4X2Ro X2NvbXB1dGVfa2V5KHN0cnVjdCBrZXggKiwgQklHTlVNICosIHN0cnVjdCBzc2hidWYgKik7Cisg CitkaWZmIC0tZ2l0IGEva2V4Z2VuLmMgYi9rZXhnZW4uYworaW5kZXggMmY4MjUyNDg4Li45YTM1 NmUyOTggMTAwNjQ0CistLS0gYS9rZXhnZW4uYworKysrIGIva2V4Z2VuLmMKK0BAIC0xMzMsMTIg KzEzMywyNCBAQCBrZXhfZ2VuX2NsaWVudChzdHJ1Y3Qgc3NoICpzc2gpCisgCQlicmVhazsKKyAJ Y2FzZSBLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1NjoKKyAJCWlmIChGSVBTX21vZGUoKSkg eworLQkJICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4eDI1NTE5IGlzIG5v dCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOworLQkJICAgIHIgPSBTU0hfRVJSX0lOVkFMSURfQVJH VU1FTlQ7CisrCQkgICAgRVZQX0tFTSAqbWxrZW0gPSBFVlBfS0VNX2ZldGNoKE5VTEwsICJtbGtl bTc2OCIsIE5VTEwpOworKwkJICAgIGlmIChtbGtlbSA9PSBOVUxMKSB7CisrCQkgICAgICAgIGxv Z2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGlu IEZJUFMgbW9kZSIpOworKwkJICAgICAgICByID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwor KwkJICAgIH0gZWxzZSB7CisrCQkJRVZQX0tFTV9mcmVlKG1sa2VtKTsKKysJCSAgICAgICAgciA9 IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFpcihrZXgpOworKwkJICAgIH0KKyAJCX0gZWxz ZSB7CisgCQkgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFpcihrZXgpOworIAkJ fQorIAkJYnJlYWs7CisrCWNhc2UgS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NjoKKysJ CSAgICByID0ga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2tleXBhaXIoa2V4KTsKKysJCWJyZWFr OworKwljYXNlIEtFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0OgorKwkJICAgIHIgPSBr ZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2tleXBhaXIoa2V4KTsKKysJCWJyZWFrOworIAlkZWZh dWx0OgorIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAJCWJyZWFrOworQEAgLTIy MywxMyArMjM1LDI4IEBAIGlucHV0X2tleF9nZW5fcmVwbHkoaW50IHR5cGUsIHVpbnQzMl90IHNl cSwgc3RydWN0IHNzaCAqc3NoKQorIAkJYnJlYWs7CisgCWNhc2UgS0VYX0tFTV9NTEtFTTc2OFgy NTUxOV9TSEEyNTY6CisgCQlpZiAoRklQU19tb2RlKCkpIHsKKy0JCSAgICBsb2dpdF9mKCJLZXkg ZXhjaGFuZ2UgdHlwZSBtbGtlbTc2OHgyNTUxOSBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUi KTsKKy0JCSAgICByID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworKwkJICAgIEVWUF9LRU0g Km1sa2VtID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKKysJCSAgICBp ZiAobWxrZW0gPT0gTlVMTCkgeworKwkJICAgICAgICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlw ZSBtbGtlbTc2OHgyNTUxOSBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiKTsKKysJCSAgICAg ICAgciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKysJCSAgICB9IGVsc2UgeworKwkJCUVW UF9LRU1fZnJlZShtbGtlbSk7CisrCQkgICAgICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5 X2RlYyhrZXgsIHNlcnZlcl9ibG9iLAorKwkJICAgICAgICAgICAgJnNoYXJlZF9zZWNyZXQpOwor KwkJICAgIH0KKyAJCX0gZWxzZSB7CisgCQkgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlf ZGVjKGtleCwgc2VydmVyX2Jsb2IsCisgCQkgICAgICAgICZzaGFyZWRfc2VjcmV0KTsKKyAJCX0K KyAJCWJyZWFrOworKwljYXNlIEtFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTY6CisrCQkg ICAgciA9IGtleF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9kZWMoa2V4LCBzZXJ2ZXJfYmxvYiwKKysJ CSAgICAgICAgJnNoYXJlZF9zZWNyZXQpOworKwkJYnJlYWs7CisrCWNhc2UgS0VYX0tFTV9NTEtF TTEwMjROSVNUUDM4NF9TSEEzODQ6CisrCQkgICAgciA9IGtleF9rZW1fbWxrZW0xMDI0bmlzdHAz ODRfZGVjKGtleCwgc2VydmVyX2Jsb2IsCisrCQkgICAgICAgICZzaGFyZWRfc2VjcmV0KTsKKysJ CWJyZWFrOworIAlkZWZhdWx0OgorIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAJ CWJyZWFrOworQEAgLTI4Myw2ICszMTAsOCBAQCBvdXQ6CisgCSAgICBzaXplb2Yoa2V4LT5zbnRy dXA3NjFfY2xpZW50X2tleSkpOworIAlleHBsaWNpdF9iemVybyhrZXgtPm1sa2VtNzY4X2NsaWVu dF9rZXksCisgCSAgICBzaXplb2Yoa2V4LT5tbGtlbTc2OF9jbGllbnRfa2V5KSk7CisrCWV4cGxp Y2l0X2J6ZXJvKGtleC0+bWxrZW0xMDI0X2NsaWVudF9rZXksCisrCSAgICBzaXplb2Yoa2V4LT5t bGtlbTEwMjRfY2xpZW50X2tleSkpOworIAlzc2hidWZfZnJlZShzZXJ2ZXJfaG9zdF9rZXlfYmxv Yik7CisgCWZyZWUoc2lnbmF0dXJlKTsKKyAJc3NoYnVmX2ZyZWUodG1wKTsKK0BAIC0zNjIsMTMg KzM5MSwyOCBAQCBpbnB1dF9rZXhfZ2VuX2luaXQoaW50IHR5cGUsIHVpbnQzMl90IHNlcSwgc3Ry dWN0IHNzaCAqc3NoKQorIAkJYnJlYWs7CisgCWNhc2UgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9T SEEyNTY6CisgCQlpZiAoRklQU19tb2RlKCkpIHsKKy0JCSAgICBsb2dpdF9mKCJLZXkgZXhjaGFu Z2UgdHlwZSBtbGtlbTc2OHgyNTUxOSBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiKTsKKy0J CSAgICByID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworKwkJICAgIEVWUF9LRU0gKm1sa2Vt ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKKysJCSAgICBpZiAobWxr ZW0gPT0gTlVMTCkgeworKwkJICAgICAgICBsb2dpdF9mKCJLZXkgZXhjaGFuZ2UgdHlwZSBtbGtl bTc2OHgyNTUxOSBpcyBub3QgYWxsb3dlZCBpbiBGSVBTIG1vZGUiKTsKKysJCSAgICAgICAgciA9 IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKysJCSAgICB9IGVsc2UgeworKwkJCUVWUF9LRU1f ZnJlZShtbGtlbSk7CisrCQkgICAgICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2VuYyhr ZXgsIGNsaWVudF9wdWJrZXksCisrCQkgICAgICAgICAgICAmc2VydmVyX3B1YmtleSwgJnNoYXJl ZF9zZWNyZXQpOworKwkJICAgIH0KKyAJCX0gZWxzZSB7CisgCQkgICAgciA9IGtleF9rZW1fbWxr ZW03Njh4MjU1MTlfZW5jKGtleCwgY2xpZW50X3B1YmtleSwKKyAJCSAgICAgICAgJnNlcnZlcl9w dWJrZXksICZzaGFyZWRfc2VjcmV0KTsKKyAJCX0KKyAJCWJyZWFrOworKwljYXNlIEtFWF9LRU1f TUxLRU03NjhOSVNUUDI1Nl9TSEEyNTY6CisrCQkgICAgciA9IGtleF9rZW1fbWxrZW03NjhuaXN0 cDI1Nl9lbmMoa2V4LCBjbGllbnRfcHVia2V5LAorKwkJICAgICAgICAmc2VydmVyX3B1YmtleSwg JnNoYXJlZF9zZWNyZXQpOworKwkJYnJlYWs7CisrCWNhc2UgS0VYX0tFTV9NTEtFTTEwMjROSVNU UDM4NF9TSEEzODQ6CisrCQkgICAgciA9IGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfZW5jKGtl eCwgY2xpZW50X3B1YmtleSwKKysJCSAgICAgICAgJnNlcnZlcl9wdWJrZXksICZzaGFyZWRfc2Vj cmV0KTsKKysJCWJyZWFrOworIAlkZWZhdWx0OgorIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdV TUVOVDsKKyAJCWJyZWFrOworZGlmZiAtLWdpdCBhL2tleG1sa2VtNzY4eDI1NTE5LmMgYi9rZXht bGtlbTc2OHgyNTUxOS5jCitpbmRleCBhYjYxNjcyMjEuLjdjMDYzZjIxYyAxMDA2NDQKKy0tLSBh L2tleG1sa2VtNzY4eDI1NTE5LmMKKysrKyBiL2tleG1sa2VtNzY4eDI1NTE5LmMKK0BAIC00NCwx OSArNDQsMzMgQEAKKyAjaWZkZWYgVVNFX01MS0VNNzY4WDI1NTE5CisgCisgI2luY2x1ZGUgImxp YmNydXhfbWxrZW03Njhfc2hhMy5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZWMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2luY2x1ZGUgPHN0 ZGlvLmg+CisgCisrI2RlZmluZSBGSVBTX0ZBTExCQUNLX1BST1BRICJwcm92aWRlcj1kZWZhdWx0 LC1maXBzIgorKworIHN0YXRpYyBpbnQKKy1tbGtlbTc2OF9rZXlwYWlyX2dlbih1bnNpZ25lZCBj aGFyICpwdWJrZXlidWYsIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCisrbWxrZW1fa2V5cGFp cl9nZW4oY29uc3QgY2hhciAqYWxnbmFtZSwgdW5zaWduZWQgY2hhciAqcHVia2V5YnVmLCBzaXpl X3QgcHVia2V5X3NpemUsCisrCSAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwcml2a2V5YnVmLCBz aXplX3QgcHJpdmtleV9zaXplKQorIHsKKyAgICAgRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOwor ICAgICBFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisgICAgIGludCByZXQgPSBTU0hfRVJSX0lOVEVS TkFMX0VSUk9SOworLSAgICBzaXplX3QgcHVia2V5X3NpemUgPSBjcnlwdG9fa2VtX21sa2VtNzY4 X1BVQkxJQ0tFWUJZVEVTLCBwcml2a2V5X3NpemUgPSBjcnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JF VEtFWUJZVEVTOworKyAgICBzaXplX3QgZ290X3B1Yl9zaXplID0gcHVia2V5X3NpemUsIGdvdF9w cml2X3NpemUgPSBwcml2a2V5X3NpemU7CisrCisrICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdf ZnJvbV9uYW1lKE5VTEwsIGFsZ25hbWUsIE5VTEwpOworKworKyAgICBpZiAoY3R4ID09IE5VTEwg JiYgRklQU19tb2RlKCkpIHsKKysJLyogV2UgaGF2ZSBmaWx0ZXJlZCB4MjU1MTkgKyBNTC1LRU0g aW4gRklQUyBtb2RlIGVhcmxpZXIKKysJICogc28gaWYgd2UgYXJlIGluIEZJUFMgbW9kZSBhbmQg TUwtS0VNIGlzIG5vdCBhdmFpbGFibGUgd2l0aCBkZWZhdWx0IHByb3BxLAorKwkgKiB3ZSBjYW4g ZmV0Y2ggaXQgZnJvbSB0aGUgZGVmYXVsdCBwcm92aWRlciAqLworKyAgICAgICAgY3R4ID0gRVZQ X1BLRVlfQ1RYX25ld19mcm9tX25hbWUoTlVMTCwgYWxnbmFtZSwgRklQU19GQUxMQkFDS19QUk9Q USk7CisrICAgIH0KKyAKKy0gICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX25hbWUoTlVM TCwgIm1sa2VtNzY4IiwgTlVMTCk7CisgICAgIGlmIChjdHggPT0gTlVMTCkgeworIAlyZXQgPSBT U0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKyAJZ290byBlcnI7CitAQCAtNjgsMTcgKzgyLDIzIEBA IG1sa2VtNzY4X2tleXBhaXJfZ2VuKHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQg Y2hhciAqcHJpdmtleWJ1ZikKKyAgICAgICAgIGdvdG8gZXJyOworICAgICB9CisgCistICAgIGlm IChFVlBfUEtFWV9nZXRfcmF3X3B1YmxpY19rZXkocGtleSwgcHVia2V5YnVmLCAmcHVia2V5X3Np emUpIDw9IDAKKy0JfHwgRVZQX1BLRVlfZ2V0X3Jhd19wcml2YXRlX2tleShwa2V5LCBwcml2a2V5 YnVmLCAmcHJpdmtleV9zaXplKSA8PSAwKSB7CisrICAgIGlmIChFVlBfUEtFWV9nZXRfcmF3X3B1 YmxpY19rZXkocGtleSwgTlVMTCwgJmdvdF9wdWJfc2l6ZSkgPD0gMAorKwl8fCBFVlBfUEtFWV9n ZXRfcmF3X3ByaXZhdGVfa2V5KHBrZXksIE5VTEwsICZnb3RfcHJpdl9zaXplKSA8PSAwKSB7Cisg CXJldCA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworICAgICAgICAgZ290byBlcnI7CisgICAg IH0KKyAKKy0gICAgaWYgKHByaXZrZXlfc2l6ZSAhPSBjcnlwdG9fa2VtX21sa2VtNzY4X1NFQ1JF VEtFWUJZVEVTCistCSAgICB8fCBwdWJrZXlfc2l6ZSAhPSBjcnlwdG9fa2VtX21sa2VtNzY4X1BV QkxJQ0tFWUJZVEVTKSB7CisrICAgIGlmIChwcml2a2V5X3NpemUgIT0gZ290X3ByaXZfc2l6ZSB8 fCBwdWJrZXlfc2l6ZSAhPSBnb3RfcHViX3NpemUpIHsKKyAJcmV0ID0gU1NIX0VSUl9MSUJDUllQ VE9fRVJST1I7CisgICAgICAgICBnb3RvIGVycjsKKyAgICAgfQorKworKyAgICBpZiAoRVZQX1BL RVlfZ2V0X3Jhd19wdWJsaWNfa2V5KHBrZXksIHB1YmtleWJ1ZiwgJmdvdF9wdWJfc2l6ZSkgPD0g MAorKwl8fCBFVlBfUEtFWV9nZXRfcmF3X3ByaXZhdGVfa2V5KHBrZXksIHByaXZrZXlidWYsICZn b3RfcHJpdl9zaXplKSA8PSAwKSB7CisrCXJldCA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwor KyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKyAgICAgcmV0ID0gMDsKKyAKKyAgZXJyOgor QEAgLTkwLDI3ICsxMTAsNTcgQEAgbWxrZW03Njhfa2V5cGFpcl9nZW4odW5zaWduZWQgY2hhciAq cHVia2V5YnVmLCB1bnNpZ25lZCBjaGFyICpwcml2a2V5YnVmKQorIH0KKyAKKyBzdGF0aWMgaW50 CistbWxrZW03NjhfZW5jYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHVia2V5YnVmLCB1X2NoYXIg KnNlY3JldCwgdV9jaGFyICpvdXQpCisrbWxrZW03Njhfa2V5cGFpcl9nZW4odW5zaWduZWQgY2hh ciAqcHVia2V5YnVmLCB1bnNpZ25lZCBjaGFyICpwcml2a2V5YnVmKQorK3sKKysJcmV0dXJuIG1s a2VtX2tleXBhaXJfZ2VuKCJtbGtlbTc2OCIsIHB1YmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtlbTc2 OF9QVUJMSUNLRVlCWVRFUywKKysJCQlwcml2a2V5YnVmLCBjcnlwdG9fa2VtX21sa2VtNzY4X1NF Q1JFVEtFWUJZVEVTKTsKKyt9CisrCisrc3RhdGljIGludAorK21sa2VtMTAyNF9rZXlwYWlyX2dl bih1bnNpZ25lZCBjaGFyICpwdWJrZXlidWYsIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCisr eworKwlyZXR1cm4gbWxrZW1fa2V5cGFpcl9nZW4oIm1sa2VtMTAyNCIsIHB1YmtleWJ1ZiwgY3J5 cHRvX2tlbV9tbGtlbTEwMjRfUFVCTElDS0VZQllURVMsCisrCQkJcHJpdmtleWJ1ZiwgY3J5cHRv X2tlbV9tbGtlbTEwMjRfU0VDUkVUS0VZQllURVMpOworK30KKysKKytzdGF0aWMgaW50CisrbWxr ZW1fZW5jYXBfc2VjcmV0KGNvbnN0IGNoYXIgKm1sa2VtX2FsZywgY29uc3QgdV9jaGFyICpwdWJr ZXlidWYsIHVfY2hhciAqc2VjcmV0LCB1X2NoYXIgKm91dCkKKyB7CisgICAgIEVWUF9QS0VZICpw a2V5ID0gTlVMTDsKKyAgICAgRVZQX1BLRVlfQ1RYICpjdHggPSBOVUxMOworICAgICBpbnQgciA9 IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CistICAgIHNpemVfdCBvdXRsZW4gPSBjcnlwdG9fa2Vt X21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUywKKy0JICAgc2VjcmV0bGVuID0gY3J5cHRvX2tlbV9t bGtlbTc2OF9CWVRFUzsKKysgICAgc2l6ZV90IG91dGxlbiwgZXhwZWN0ZWRfb3V0bGVuLCBwdWJs ZW4sIHNlY3JldGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVM7CisrICAgIGludCBmaXBz X2ZhbGxiYWNrID0gMDsKKysKKysgICAgaWYgKHN0cmNtcChtbGtlbV9hbGcsICJtbGtlbTc2OCIp ID09IDApIHsKKysJICAgIG91dGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZ VEVTOworKwkgICAgcHVibGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUzsK KysgICAgfSBlbHNlIGlmIChzdHJjbXAobWxrZW1fYWxnLCAibWxrZW0xMDI0IikgPT0gMCkgewor KwkgICAgb3V0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTEwMjRfQ0lQSEVSVEVYVEJZVEVTOworKwkg ICAgcHVibGVuID0gY3J5cHRvX2tlbV9tbGtlbTEwMjRfUFVCTElDS0VZQllURVM7CisrICAgIH0g ZWxzZQorKwkgICAgcmV0dXJuIHI7CisgCistICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3B1 YmxpY19rZXlfZXgoTlVMTCwgIm1sa2VtNzY4IiwgTlVMTCwKKy0JCSAgICBwdWJrZXlidWYsIGNy eXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMpOworKyAgICBleHBlY3RlZF9vdXRsZW4g PSBvdXRsZW47CisrCisrICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3B1YmxpY19rZXlfZXgo TlVMTCwgbWxrZW1fYWxnLCBOVUxMLAorKwkJICAgIHB1YmtleWJ1ZiwgcHVibGVuKTsKKysgICAg aWYgKHBrZXkgPT0gTlVMTCAmJiBGSVBTX21vZGUoKSkgeworKyAgICAgICAgcGtleSA9IEVWUF9Q S0VZX25ld19yYXdfcHVibGljX2tleV9leChOVUxMLCBtbGtlbV9hbGcsIEZJUFNfRkFMTEJBQ0tf UFJPUFEsCisrCQkgICAgcHVia2V5YnVmLCBwdWJsZW4pOworKwlmaXBzX2ZhbGxiYWNrID0gMTsK KysgICAgfQorICAgICBpZiAocGtleSA9PSBOVUxMKSB7CisgCXIgPSBTU0hfRVJSX0xJQkNSWVBU T19FUlJPUjsKKyAJZ290byBlcnI7CisgICAgIH0KKyAKKy0gICAgY3R4ID0gRVZQX1BLRVlfQ1RY X25ld19mcm9tX3BrZXkoTlVMTCwgcGtleSwgTlVMTCk7CisrICAgIGN0eCA9IEVWUF9QS0VZX0NU WF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBrZXksIGZpcHNfZmFsbGJhY2sgPyBGSVBTX0ZBTExCQUNL X1BST1BRIDogTlVMTCk7CisgICAgIGlmIChjdHggPT0gTlVMTAorIAl8fCBFVlBfUEtFWV9lbmNh cHN1bGF0ZV9pbml0KGN0eCwgTlVMTCkgPD0gMAorLSAgICAgICAgfHwgRVZQX1BLRVlfZW5jYXBz dWxhdGUoY3R4LCBvdXQsICZvdXRsZW4sIHNlY3JldCwgJnNlY3JldGxlbikgPD0gMAorKyAgICAg ICAgfHwgRVZQX1BLRVlfZW5jYXBzdWxhdGUoY3R4LCBvdXQsICZleHBlY3RlZF9vdXRsZW4sIHNl Y3JldCwgJnNlY3JldGxlbikgPD0gMAorIAl8fCBzZWNyZXRsZW4gIT0gY3J5cHRvX2tlbV9tbGtl bTc2OF9CWVRFUworLQl8fCBvdXRsZW4gIT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhU QllURVMpIHsKKysJfHwgb3V0bGVuICE9IGV4cGVjdGVkX291dGxlbikgeworIAlyID0gU1NIX0VS Ul9MSUJDUllQVE9fRVJST1I7CisgCWdvdG8gZXJyOworICAgICB9CitAQCAtMTI2LDI1ICsxNzYs NDUgQEAgbWxrZW03NjhfZW5jYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHVia2V5YnVmLCB1X2No YXIgKnNlY3JldCwgdV9jaGFyICpvdXQpCisgfQorIAorIHN0YXRpYyBpbnQKKy1tbGtlbTc2OF9k ZWNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwcml2a2V5YnVmLCBjb25zdCB1X2NoYXIgKndyYXBw ZWQsIHVfY2hhciAqc2VjcmV0KQorK21sa2VtNzY4X2VuY2FwX3NlY3JldChjb25zdCB1X2NoYXIg KnB1YmtleWJ1ZiwgdV9jaGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQorK3sKKysJcmV0dXJuIG1s a2VtX2VuY2FwX3NlY3JldCgibWxrZW03NjgiLCBwdWJrZXlidWYsIHNlY3JldCwgb3V0KTsKKyt9 CisrCisrc3RhdGljIGludAorK21sa2VtMTAyNF9lbmNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpw dWJrZXlidWYsIHVfY2hhciAqc2VjcmV0LCB1X2NoYXIgKm91dCkKKyt7CisrCXJldHVybiBtbGtl bV9lbmNhcF9zZWNyZXQoIm1sa2VtMTAyNCIsIHB1YmtleWJ1Ziwgc2VjcmV0LCBvdXQpOworK30K KysKKytzdGF0aWMgaW50CisrbWxrZW1fZGVjYXBfc2VjcmV0KGNvbnN0IGNoYXIgKmFsZ25hbWUs CisrICAgIGNvbnN0IHVfY2hhciAqcHJpdmtleWJ1Ziwgc2l6ZV90IHByaXZrZXlfbGVuLAorKyAg ICBjb25zdCB1X2NoYXIgKndyYXBwZWQsIHNpemVfdCB3cmFwcGVkX2xlbiwKKysgICAgdV9jaGFy ICpzZWNyZXQpCisgeworICAgICBFVlBfUEtFWSAqcGtleSA9IE5VTEw7CisgICAgIEVWUF9QS0VZ X0NUWCAqY3R4ID0gTlVMTDsKKyAgICAgaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwor LSAgICBzaXplX3Qgd3JhcHBlZGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZ VEVTLAorLQkgICBzZWNyZXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTOworKyAgICBz aXplX3Qgc2VjcmV0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUzsKKysgICAgaW50IGZp cHNfZmFsbGJhY2sgPSAwOworIAorLSAgICBwa2V5ID0gRVZQX1BLRVlfbmV3X3Jhd19wcml2YXRl X2tleV9leChOVUxMLCAibWxrZW03NjgiLCBOVUxMLAorLQkJICAgIHByaXZrZXlidWYsIGNyeXB0 b19rZW1fbWxrZW03NjhfU0VDUkVUS0VZQllURVMpOworKyAgICBwa2V5ID0gRVZQX1BLRVlfbmV3 X3Jhd19wcml2YXRlX2tleV9leChOVUxMLCBhbGduYW1lLAorKwkJICAgIE5VTEwsIHByaXZrZXli dWYsIHByaXZrZXlfbGVuKTsKKysgICAgaWYgKHBrZXkgPT0gTlVMTCAmJiBGSVBTX21vZGUoKSkg eworKyAgICAgICAgcGtleSA9IEVWUF9QS0VZX25ld19yYXdfcHJpdmF0ZV9rZXlfZXgoTlVMTCwg YWxnbmFtZSwKKysJCSAgICBGSVBTX0ZBTExCQUNLX1BST1BRLCBwcml2a2V5YnVmLCBwcml2a2V5 X2xlbik7CisrCWZpcHNfZmFsbGJhY2sgPSAxOworKyAgICB9CisgICAgIGlmIChwa2V5ID09IE5V TEwpIHsKKyAJciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOworIAlnb3RvIGVycjsKKyAgICAg fQorIAorLSAgICBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwa2V5LCBO VUxMKTsKKysgICAgY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX3BrZXkoTlVMTCwgcGtleSwg Zmlwc19mYWxsYmFjayA/IEZJUFNfRkFMTEJBQ0tfUFJPUFEgOiBOVUxMKTsKKyAgICAgaWYgKGN0 eCA9PSBOVUxMCisgCXx8IEVWUF9QS0VZX2RlY2Fwc3VsYXRlX2luaXQoY3R4LCBOVUxMKSA8PSAw CistICAgICAgICB8fCBFVlBfUEtFWV9kZWNhcHN1bGF0ZShjdHgsIHNlY3JldCwgJnNlY3JldGxl biwgd3JhcHBlZCwgd3JhcHBlZGxlbikgPD0gMAorKyAgICAgICAgfHwgRVZQX1BLRVlfZGVjYXBz dWxhdGUoY3R4LCBzZWNyZXQsICZzZWNyZXRsZW4sIHdyYXBwZWQsIHdyYXBwZWRfbGVuKSA8PSAw CisgCXx8IHNlY3JldGxlbiAhPSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTKSB7CisgCXIgPSBT U0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKKyAJZ290byBlcnI7CitAQCAtMTYxLDYgKzIzMSwyMCBA QCBtbGtlbTc2OF9kZWNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwcml2a2V5YnVmLCBjb25zdCB1 X2NoYXIgKndyYXBwZWQsIHVfY2hhciAqcworICAgICByZXR1cm4gcjsKKyB9CisgCisrc3RhdGlj IGludAorK21sa2VtNzY4X2RlY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNv bnN0IHVfY2hhciAqd3JhcHBlZCwgdV9jaGFyICpzZWNyZXQpCisreworKwlyZXR1cm4gbWxrZW1f ZGVjYXBfc2VjcmV0KCJtbGtlbTc2OCIsIHByaXZrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03Njhf U0VDUkVUS0VZQllURVMsCisrCQl3cmFwcGVkLCBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRF WFRCWVRFUywgc2VjcmV0KTsKKyt9CisrCisrc3RhdGljIGludAorK21sa2VtMTAyNF9kZWNhcF9z ZWNyZXQoY29uc3QgdV9jaGFyICpwcml2a2V5YnVmLCBjb25zdCB1X2NoYXIgKndyYXBwZWQsIHVf Y2hhciAqc2VjcmV0KQorK3sKKysJcmV0dXJuIG1sa2VtX2RlY2FwX3NlY3JldCgibWxrZW0xMDI0 IiwgcHJpdmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtlbTEwMjRfU0VDUkVUS0VZQllURVMsCisrCQl3 cmFwcGVkLCBjcnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVMsIHNlY3JldCk7Cisr fQorKworIGludAorIGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFpcihzdHJ1Y3Qga2V4ICpr ZXgpCisgeworQEAgLTMzNyw3ICs0MjEsNyBAQCBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2VuYyhz dHJ1Y3Qga2V4ICprZXgsCisgCXVfY2hhciBoYXNoW1NTSF9ESUdFU1RfTUFYX0xFTkdUSF07Cisg CXNpemVfdCBuZWVkOworIAlpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CistCXN0cnVj dCBsaWJjcnV4X21sa2VtNzY4X2VuY19yZXN1bHQgZW5jOyAvKiBGSVhNRSAqLworKwlzdHJ1Y3Qg bGliY3J1eF9tbGtlbTc2OF9lbmNfcmVzdWx0IGVuYzsKKyAKKyAJKnNlcnZlcl9ibG9icCA9IE5V TEw7CisgCSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7CitAQCAtNTQ2LDYgKzYzMCw1MjAgQEAga2V4 X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMoc3RydWN0IGtleCAqa2V4LAorIAlyZXR1cm4gcjsKKyAj ZW5kaWYKKyB9CisrCisrI2RlZmluZSBOSVNUX1AyNTZfQ09NUFJFU1NFRF9MRU4gICAzMworKyNk ZWZpbmUgTklTVF9QMjU2X1VOQ09NUFJFU1NFRF9MRU4gNjUKKysjZGVmaW5lIE5JU1RfUDM4NF9D T01QUkVTU0VEX0xFTiAgIDQ5CisrI2RlZmluZSBOSVNUX1AzODRfVU5DT01QUkVTU0VEX0xFTiA5 NworKyNkZWZpbmUgTklTVF9CVUZfTUFYX1NJWkUgTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9MRU4K KysKKytzdGF0aWMgY29uc3QgY2hhciBlYzI1NltdID0gIlAtMjU2IjsKKytzdGF0aWMgY29uc3Qg Y2hhciBlYzM4NFtdID0gIlAtMzg0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqbGVuMmN1cnZlX25h bWUoc2l6ZV90IGxlbikKKyt7CisrCXN3aXRjaCAobGVuKSB7CisrCQljYXNlIE5JU1RfUDI1Nl9D T01QUkVTU0VEX0xFTjoKKysJCWNhc2UgTklTVF9QMjU2X1VOQ09NUFJFU1NFRF9MRU46CisrCQkJ cmV0dXJuIGVjMjU2OworKwkJCWJyZWFrOworKwkJY2FzZSBOSVNUX1AzODRfQ09NUFJFU1NFRF9M RU46CisrCQljYXNlIE5JU1RfUDM4NF9VTkNPTVBSRVNTRURfTEVOOgorKwkJCXJldHVybiBlYzM4 NDsKKysJCQlicmVhazsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIEVWUF9Q S0VZICoKKytidWYybmlzdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqcHViX2tleV9idWYsIHNp emVfdCBwdWJfa2V5X2xlbikKKyt7CisrCUVWUF9QS0VZICpwa2V5ID0gTlVMTDsKKysJRVZQX1BL RVlfQ1RYICpjdHggPSBOVUxMOworKwlPU1NMX1BBUkFNIHBhcmFtc1szXTsKKysJY29uc3QgY2hh ciAqY3VydmVfbmFtZSA9IGxlbjJjdXJ2ZV9uYW1lKHB1Yl9rZXlfbGVuKTsKKysKKysJaWYgKGN1 cnZlX25hbWUgPT0gTlVMTCkKKysJCXJldHVybiBOVUxMOworKworKwljdHggPSBFVlBfUEtFWV9D VFhfbmV3X2Zyb21fbmFtZShOVUxMLCAiRUMiLCBOVUxMKTsKKysJaWYgKCFjdHgpCisrCQlnb3Rv IGVycjsKKysKKysJaWYgKEVWUF9QS0VZX2Zyb21kYXRhX2luaXQoY3R4KSA8PSAwKQorKwkJZ290 byBlcnI7CisrCisrCXBhcmFtc1swXSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X3V0Zjhfc3RyaW5n KE9TU0xfUEtFWV9QQVJBTV9HUk9VUF9OQU1FLCBjdXJ2ZV9uYW1lLCAwKTsKKysJcGFyYW1zWzFd ID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3Rfb2N0ZXRfc3RyaW5nKAorKwkJCU9TU0xfUEtFWV9QQVJB TV9QVUJfS0VZLCAodm9pZCAqKXB1Yl9rZXlfYnVmLCBwdWJfa2V5X2xlbik7CisrCXBhcmFtc1sy XSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X2VuZCgpOworKworKwlpZiAoRVZQX1BLRVlfZnJvbWRh dGEoY3R4LCAmcGtleSwgRVZQX1BLRVlfUFVCTElDX0tFWSwgcGFyYW1zKSA8PSAwKQorKwkJZ290 byBlcnI7CisrCisrCUVWUF9QS0VZX0NUWF9mcmVlKGN0eCk7CisrCXJldHVybiBwa2V5OworKwor K2VycjoKKysJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKKysJRVZQX1BLRVlfZnJlZShwa2V5KTsK KysJcmV0dXJuIE5VTEw7CisrfQorKworK3N0YXRpYyBpbnQKKytrZXhfbmlzdF9zaGFyZWRfa2V5 X2V4dChFVlBfUEtFWSAqcHJpdl9rZXksCisrICAgIGNvbnN0IHVfY2hhciAqcHViX2tleV9idWYs IHNpemVfdCBwdWJfa2V5X2xlbiwgc3RydWN0IHNzaGJ1ZiAqb3V0KQorK3sKKysJRVZQX1BLRVlf Q1RYICpjdHggPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpzaGFyZWRfc2VjcmV0ID0gTlVMTDsK KysJc2l6ZV90IHNoYXJlZF9zZWNyZXRfbGVuID0gMDsKKysJRVZQX1BLRVkgKnBlZXJfa2V5ID0g YnVmMm5pc3Rfa2V5KHB1Yl9rZXlfYnVmLCBwdWJfa2V5X2xlbik7CisrCWludCByID0gU1NIX0VS Ul9JTlRFUk5BTF9FUlJPUjsKKysKKysJaWYgKHBlZXJfa2V5ID09IE5VTEwpCisrCQlyZXR1cm4g U1NIX0VSUl9LRVlfTEVOR1RIOworKworKwljdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtl eShOVUxMLCBwcml2X2tleSwgTlVMTCk7CisrCWlmICghY3R4KQorKwkJZ290byBlbmQ7CisrCisr CWlmICgoRVZQX1BLRVlfZGVyaXZlX2luaXQoY3R4KSA8PSAwKQorKwkJfHwgRVZQX1BLRVlfZGVy aXZlX3NldF9wZWVyKGN0eCwgcGVlcl9rZXkpIDw9IDAKKysJCXx8IEVWUF9QS0VZX2Rlcml2ZShj dHgsIE5VTEwsICZzaGFyZWRfc2VjcmV0X2xlbikgPD0gMCkKKysJCWdvdG8gZW5kOworKworKwlz aGFyZWRfc2VjcmV0ID0gT1BFTlNTTF9tYWxsb2Moc2hhcmVkX3NlY3JldF9sZW4pOworKwlpZiAo c2hhcmVkX3NlY3JldCA9PSBOVUxMKQorKwkJZ290byBlbmQ7CisrCisrCWlmIChFVlBfUEtFWV9k ZXJpdmUoY3R4LCBzaGFyZWRfc2VjcmV0LCAmc2hhcmVkX3NlY3JldF9sZW4pIDw9IDApCisrCQln b3RvIGVuZDsKKysKKysJaWYgKChyID0gc3NoYnVmX3B1dChvdXQsIHNoYXJlZF9zZWNyZXQsIHNo YXJlZF9zZWNyZXRfbGVuKSkgIT0gMCkKKysJCWdvdG8gZW5kOworKworKwlyID0gMDsKKysKKytl bmQ6CisrCUVWUF9QS0VZX2ZyZWUocGVlcl9rZXkpOworKwlpZiAoc2hhcmVkX3NlY3JldCkKKysJ CU9QRU5TU0xfY2xlYXJfZnJlZShzaGFyZWRfc2VjcmV0LCBzaGFyZWRfc2VjcmV0X2xlbik7Cisr CUVWUF9QS0VZX0NUWF9mcmVlKGN0eCk7CisrCisrCXJldHVybiByOworK30KKysKKytzdGF0aWMg RVZQX1BLRVkgKgorK25pc3RfcGtleV9rZXlnZW4oc2l6ZV90IHB1Yl9rZXlfbGVuKQorK3sKKysJ Y29uc3QgY2hhciAqY3VydmVfbmFtZSA9IGxlbjJjdXJ2ZV9uYW1lKHB1Yl9rZXlfbGVuKTsKKysJ RVZQX1BLRVlfQ1RYICpwY3R4ID0gTlVMTDsKKysJRVZQX1BLRVkgKnBrZXkgPSBOVUxMOworKwlP U1NMX1BBUkFNIHBhcmFtc1syXTsKKysKKysJaWYgKGN1cnZlX25hbWUgPT0gTlVMTCkKKysJCXJl dHVybiBOVUxMOworKworKwlwY3R4ID0gRVZQX1BLRVlfQ1RYX25ld19mcm9tX25hbWUoTlVMTCwg IkVDIiwgTlVMTCk7CisrCWlmICghcGN0eCkKKysJCXJldHVybiBOVUxMOworKworKwlpZiAoRVZQ X1BLRVlfa2V5Z2VuX2luaXQocGN0eCkgPD0gMCkgeworKwkJRVZQX1BLRVlfQ1RYX2ZyZWUocGN0 eCk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlwYXJhbXNbMF0gPSBPU1NMX1BBUkFNX2Nv bnN0cnVjdF91dGY4X3N0cmluZyhPU1NMX1BLRVlfUEFSQU1fR1JPVVBfTkFNRSwgY3VydmVfbmFt ZSwgMCk7CisrCXBhcmFtc1sxXSA9IE9TU0xfUEFSQU1fY29uc3RydWN0X2VuZCgpOworKworKwlp ZiAoRVZQX1BLRVlfQ1RYX3NldF9wYXJhbXMocGN0eCwgcGFyYW1zKSA8PSAwCisrCSAgICB8fCBF VlBfUEtFWV9rZXlnZW4ocGN0eCwgJnBrZXkpIDw9IDApIHsKKysJCUVWUF9QS0VZX0NUWF9mcmVl KHBjdHgpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJRVZQX1BLRVlfQ1RYX2ZyZWUocGN0 eCk7CisrCXJldHVybiBwa2V5OworK30KKysKKytzdGF0aWMgc2l6ZV90IGRlY29tcHJlc3NfcHVi X2tleSh2b2lkICpwdWIsIHNpemVfdCBjb21wcmVzc2VkX2xlbiwgc2l6ZV90IGRlY29tcHJlc3Nl ZF9sZW4pCisreworKyAgICBFQ19HUk9VUCAqZ3JvdXAgPSBOVUxMOworKyAgICBFQ19QT0lOVCAq cG9pbnQgPSBOVUxMOworKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7CisrICAgIHNpemVfdCBsZW4g PSAwOworKyAgICBpbnQgZ3JvdXBfbmlkID0gTklEX3VuZGVmOworKworKyAgICBzd2l0Y2ggKGNv bXByZXNzZWRfbGVuKSB7CisrICAgIGNhc2UgTklTVF9QMjU2X0NPTVBSRVNTRURfTEVOOgorKyAg ICAgICAgIGdyb3VwX25pZCA9IE5JRF9YOV82Ml9wcmltZTI1NnYxOworKyAgICAgICBicmVhazsK KysgICAgY2FzZSBOSVNUX1AzODRfQ09NUFJFU1NFRF9MRU46CisrICAgICAgICAgZ3JvdXBfbmlk ID0gTklEX3NlY3AzODRyMTsKKysgICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAg IHJldHVybiAwOworKyAgICAgICBicmVhazsKKysgICAgfQorKworKyAgICBjdHggPSBCTl9DVFhf bmV3KCk7CisrICAgIGdyb3VwID0gRUNfR1JPVVBfbmV3X2J5X2N1cnZlX25hbWUoZ3JvdXBfbmlk KTsKKysgICAgaWYgKGN0eCA9PSBOVUxMIHx8IGdyb3VwID09IE5VTEwpCisrICAgICAgICBnb3Rv IGVycjsKKysKKysgICAgcG9pbnQgPSBFQ19QT0lOVF9uZXcoZ3JvdXApOworKyAgICBpZiAocG9p bnQgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAoIUVDX1BPSU5UX29j dDJwb2ludChncm91cCwgcG9pbnQsIHB1YiwgY29tcHJlc3NlZF9sZW4sIGN0eCkpCisrICAgICAg ICBnb3RvIGVycjsKKysKKysgICAgbGVuID0gRUNfUE9JTlRfcG9pbnQyb2N0KGdyb3VwLCBwb2lu dCwgUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQsIHB1YiwgZGVjb21wcmVzc2VkX2xlbiwg Y3R4KTsKKysKKytlcnI6CisrICAgIEVDX1BPSU5UX2ZyZWUocG9pbnQpOworKyAgICBFQ19HUk9V UF9mcmVlKGdyb3VwKTsKKysgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKKysKKysgICAgcmV0dXJuIGxl bjsKKyt9CisrCisrc3RhdGljIGludAorK2dldF91bmNvbXByZXNzZWRfZWNfcHVia2V5KEVWUF9Q S0VZICpwa2V5LCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuKQorK3sKKysgICAg T1NTTF9QQVJBTSBwYXJhbXNbMl07CisrICAgIHNpemVfdCByZXF1aXJlZF9sZW4gPSAwLCBvdXRf bGVuID0gMDsKKysKKysgICAgcGFyYW1zWzBdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3RfdXRmOF9z dHJpbmcoCisrICAgICAgICBPU1NMX1BLRVlfUEFSQU1fRUNfUE9JTlRfQ09OVkVSU0lPTl9GT1JN QVQsCisrICAgICAgICAidW5jb21wcmVzc2VkIiwgMCk7CisrICAgIHBhcmFtc1sxXSA9IE9TU0xf UEFSQU1fY29uc3RydWN0X2VuZCgpOworKworKyAgICBpZiAoRVZQX1BLRVlfc2V0X3BhcmFtcyhw a2V5LCBwYXJhbXMpIDw9IDAKKysJICAgIHx8IEVWUF9QS0VZX2dldF9vY3RldF9zdHJpbmdfcGFy YW0ocGtleSwgT1NTTF9QS0VZX1BBUkFNX1BVQl9LRVksCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWZfbGVuLCAmcmVxdWlyZWRfbGVuKSA8PSAwKSB7 CisrICAgICAgICByZXR1cm4gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisrICAgIH0KKysKKysg ICAgaWYgKHJlcXVpcmVkX2xlbiAhPSBidWZfbGVuKSB7CisrICAgICAgICAvKiBSZWQgSGF0IGNl cnRpZmllZCBGSVBTIHByb3ZpZGVyIGlnbm9yZXMgT1NTTF9QS0VZX1BBUkFNX0VDX1BPSU5UX0NP TlZFUlNJT05fRk9STUFUCisrCSAqIFdlIG1heSBoYXZlIHRvIHBlcmZvcm0gdGhlIGNvbnZlcnNp b24gbWFudWFsbHkgKi8KKysgICAgICAgIGlmIChsZW4yY3VydmVfbmFtZShyZXF1aXJlZF9sZW4p ID09IGxlbjJjdXJ2ZV9uYW1lKGJ1Zl9sZW4pKSB7CisrCSAgICBvdXRfbGVuID0gZGVjb21wcmVz c19wdWJfa2V5KGJ1ZiwgcmVxdWlyZWRfbGVuLCBidWZfbGVuKTsKKysJICAgIGlmIChvdXRfbGVu ICE9IGJ1Zl9sZW4pIHsKKysJICAgICAgICBkZWJ1Z19mKCJFcnJvciBkZWNvbXByZXNzaW5nIHRo ZSBjb21wcmVzc2VkIHB1YmxpYyBrZXkiKTsKKysJICAgICAgICByZXR1cm4gU1NIX0VSUl9MSUJD UllQVE9fRVJST1I7CisrCSAgICB9IGVsc2UgeworKwkJcmV0dXJuIDA7CisrCSAgICB9CisrCX0g ZWxzZSB7CisrCSAgICBkZWJ1Z19mKCJVbmV4cGVjdGVkIGxlbmd0aCBvZiB1bmNvbXByZXNzZWQg cHVibGljIGtleTogZXhwZWN0ZWQgJWQsIGdvdCAlZCIsIGJ1Zl9sZW4sIHJlcXVpcmVkX2xlbik7 CisrCSAgICByZXR1cm4gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CisrCX0KKysgICAgfQorKwor KyAgICByZXR1cm4gMDsKKyt9CisrLyogbmlzdF9ieXRlc19sZW4gc2hvdWxkIGFsd2F5cyBiZSB1 bmNvbXByZXNzZWQgKi8KKytzdGF0aWMgaW50Cisra2V4X2tlbV9tbGtlbV9uaXN0X2tleXBhaXIo c3RydWN0IGtleCAqa2V4LCBzaXplX3QgbWxrZW1fYnl0ZXNfbGVuLCBzaXplX3QgbmlzdF9ieXRl c19sZW4pCisreworKwlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOworKwl1X2NoYXIgKmNwID0g TlVMTDsKKysJc2l6ZV90IG5lZWQ7CisrCWludCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsK KysJdV9jaGFyICpjbGllbnRfa2V5ID0gTlVMTDsKKysKKysJaWYgKChidWYgPSBzc2hidWZfbmV3 KCkpID09IE5VTEwpCisrCQlyZXR1cm4gU1NIX0VSUl9BTExPQ19GQUlMOworKwluZWVkID0gbWxr ZW1fYnl0ZXNfbGVuICsgbmlzdF9ieXRlc19sZW47CisrCWlmICgociA9IHNzaGJ1Zl9yZXNlcnZl KGJ1ZiwgbmVlZCwgJmNwKSkgIT0gMCkKKysJCWdvdG8gb3V0OworKworKwlpZiAobWxrZW1fYnl0 ZXNfbGVuID09IGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMpIHsKKysJCWNsaWVu dF9rZXkgPSBrZXgtPm1sa2VtNzY4X2NsaWVudF9rZXk7CisrCQlyID0gbWxrZW03Njhfa2V5cGFp cl9nZW4oY3AsIGNsaWVudF9rZXkpOworKwl9CisrCisrCWlmIChtbGtlbV9ieXRlc19sZW4gPT0g Y3J5cHRvX2tlbV9tbGtlbTEwMjRfUFVCTElDS0VZQllURVMpIHsKKysJCWNsaWVudF9rZXkgPSBr ZXgtPm1sa2VtMTAyNF9jbGllbnRfa2V5OworKwkJciA9IG1sa2VtMTAyNF9rZXlwYWlyX2dlbihj cCwgY2xpZW50X2tleSk7CisrCX0KKysKKysJaWYgKGNsaWVudF9rZXkgPT0gTlVMTCkKKysJCWdv dG8gb3V0OworKworKwlpZiAociAhPSAwKQorKwkJZ290byBvdXQ7CisrI2lmZGVmIERFQlVHX0tF WEVDREgKKysJZHVtcF9kaWdlc3QoImNsaWVudCBwdWJsaWMga2V5IG1sa2VtWFhYOiIsIGNwLCBt bGtlbV9ieXRlc19sZW4pOworKyNlbmRpZgorKwljcCArPSBtbGtlbV9ieXRlc19sZW47CisrCWlm ICgoa2V4LT5lY19oeWJyaWRfY2xpZW50X2tleSA9IG5pc3RfcGtleV9rZXlnZW4obmlzdF9ieXRl c19sZW4pKSA9PSBOVUxMKQorKwkJZ290byBvdXQ7CisrCisrCWlmICgociA9IGdldF91bmNvbXBy ZXNzZWRfZWNfcHVia2V5KGtleC0+ZWNfaHlicmlkX2NsaWVudF9rZXksIGNwLCBuaXN0X2J5dGVz X2xlbikpICE9IDApCisrCQlnb3RvIG91dDsKKysKKysjaWZkZWYgREVCVUdfS0VYRUNESAorKwlk dW1wX2RpZ2VzdCgiY2xpZW50IHB1YmxpYyBrZXkgTklTVDoiLCBjcCwgbmlzdF9ieXRlc19sZW4p OworKyNlbmRpZgorKwkvKiBzdWNjZXNzICovCisrCXIgPSAwOworKwlrZXgtPmNsaWVudF9wdWIg PSBidWY7CisrCWJ1ZiA9IE5VTEw7CisrIG91dDoKKysJc3NoYnVmX2ZyZWUoYnVmKTsKKysgICAg ICAgIGlmIChyID09IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SKQorKwkgICBFUlJfcHJpbnRfZXJy b3JzX2ZwKHN0ZGVycik7CisrCisrCXJldHVybiByOworK30KKysKKytzdGF0aWMgaW50Cisra2V4 X2tlbV9tbGtlbV9uaXN0X2VuYyhzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IGNoYXIgKm5pc3RfY3Vy dmUsCisrICAgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqY2xpZW50X2Jsb2IsIHN0cnVjdCBzc2hidWYg KipzZXJ2ZXJfYmxvYnAsCisrICAgc3RydWN0IHNzaGJ1ZiAqKnNoYXJlZF9zZWNyZXRwKQorK3sK KysJc3RydWN0IHNzaGJ1ZiAqc2VydmVyX2Jsb2IgPSBOVUxMOworKwlzdHJ1Y3Qgc3NoYnVmICpi dWYgPSBOVUxMOworKwljb25zdCB1X2NoYXIgKmNsaWVudF9wdWI7CisrCXVfY2hhciBzZXJ2ZXJf cHViW05JU1RfQlVGX01BWF9TSVpFXTsKKysJdV9jaGFyIGVuY19vdXRbY3J5cHRvX2tlbV9tbGtl bTEwMjRfQ0lQSEVSVEVYVEJZVEVTXTsKKysJdV9jaGFyIHNlY3JldFtjcnlwdG9fa2VtX21sa2Vt NzY4X0JZVEVTXTsKKysJRVZQX1BLRVkgKnNlcnZlcl9rZXkgPSBOVUxMOworKwl1X2NoYXIgaGFz aFtTU0hfRElHRVNUX01BWF9MRU5HVEhdOworKwlzaXplX3QgY2xpZW50X2J1Zl9sZW4sIG1sa2Vt X2J1Zl9sZW4sIGVjZGhfYnVmX2xlbiwgc2VydmVyX2tleV9sZW4sIGVuY19vdXRfbGVuOworKwlp bnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCisrCSpzZXJ2ZXJfYmxvYnAgPSBOVUxM OworKwkqc2hhcmVkX3NlY3JldHAgPSBOVUxMOworKworKwljbGllbnRfYnVmX2xlbiA9IHNzaGJ1 Zl9sZW4oY2xpZW50X2Jsb2IpOworKwkvKiBjbGllbnRfYmxvYiBjb250YWlucyBib3RoIEtFTSBh bmQgRUNESCBjbGllbnQgcHVia2V5cyAqLworKwlpZiAoc3RyY21wKG5pc3RfY3VydmUsICJQLTI1 NiIpID09IDApIHsKKysJCWlmIChjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTID4g Y2xpZW50X2J1Zl9sZW4pCisrCQkJcmV0dXJuIHI7CisrCisrCQllY2RoX2J1Zl9sZW4gPSBjbGll bnRfYnVmX2xlbiAtIGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVM7CisrCQlpZiAo ZWNkaF9idWZfbGVuICE9IE5JU1RfUDI1Nl9DT01QUkVTU0VEX0xFTiAmJgorKwkJCWVjZGhfYnVm X2xlbiAhPSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTikKKysJCQlyZXR1cm4gcjsKKysJCW1s a2VtX2J1Zl9sZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTOworKwkJZW5j X291dF9sZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUzsKKysJCXNlcnZl cl9rZXlfbGVuID0gTklTVF9QMjU2X1VOQ09NUFJFU1NFRF9MRU47CisrCX0gZWxzZSBpZiAoc3Ry Y21wKG5pc3RfY3VydmUsICJQLTM4NCIpID09IDApIHsKKysJCWlmIChjcnlwdG9fa2VtX21sa2Vt MTAyNF9QVUJMSUNLRVlCWVRFUyA+IGNsaWVudF9idWZfbGVuKQorKwkJCXJldHVybiByOworKwor KwkJZWNkaF9idWZfbGVuID0gY2xpZW50X2J1Zl9sZW4gLSBjcnlwdG9fa2VtX21sa2VtMTAyNF9Q VUJMSUNLRVlCWVRFUzsKKysJCWlmIChlY2RoX2J1Zl9sZW4gIT0gTklTVF9QMzg0X0NPTVBSRVNT RURfTEVOICYmCisrCQkJZWNkaF9idWZfbGVuICE9IE5JU1RfUDM4NF9VTkNPTVBSRVNTRURfTEVO KQorKwkJCXJldHVybiByOworKwkJbWxrZW1fYnVmX2xlbiA9IGNyeXB0b19rZW1fbWxrZW0xMDI0 X1BVQkxJQ0tFWUJZVEVTOworKwkJZW5jX291dF9sZW4gPSBjcnlwdG9fa2VtX21sa2VtMTAyNF9D SVBIRVJURVhUQllURVM7CisrCQlzZXJ2ZXJfa2V5X2xlbiA9IE5JU1RfUDM4NF9VTkNPTVBSRVNT RURfTEVOOworKwl9IGVsc2UKKysJCXJldHVybiByOworKworKwljbGllbnRfcHViID0gc3NoYnVm X3B0cihjbGllbnRfYmxvYik7CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9kaWdlc3Qo ImNsaWVudCBwdWJsaWMga2V5IG1sa2VtOiIsIGNsaWVudF9wdWIsIG1sa2VtX2J1Zl9sZW4pOwor KwlkdW1wX2RpZ2VzdCgiY2xpZW50IHB1YmxpYyBrZXkgTklTVDoiLCBjbGllbnRfcHViICsgbWxr ZW1fYnVmX2xlbiwgZWNkaF9idWZfbGVuKTsKKysjZW5kaWYKKysKKysJLyogYWxsb2NhdGUgYnVm ZmVyIGZvciBjb25jYXRlbmF0aW9uIG9mIEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtleSAqLwor KwkvKiB0aGUgYnVmZmVyIHdpbGwgYmUgaGFzaGVkIGFuZCB0aGUgcmVzdWx0IGlzIHRoZSBzaGFy ZWQgc2VjcmV0ICovCisrCWlmICgoYnVmID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKSB7CisrCQly ID0gU1NIX0VSUl9BTExPQ19GQUlMOworKwkJZ290byBvdXQ7CisrCX0KKysJLyogYWxsb2NhdGUg c3BhY2UgZm9yIGVuY3J5cHRlZCBLRU0ga2V5IGFuZCBFQ0RIIHB1YiBrZXkgKi8KKysJaWYgKChz ZXJ2ZXJfYmxvYiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkgeworKwkJciA9IFNTSF9FUlJfQUxM T0NfRkFJTDsKKysJCWdvdG8gb3V0OworKwl9CisrCXIgPSAobWxrZW1fYnVmX2xlbiA9PSBjcnlw dG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZVEVTKSA/CisrCQltbGtlbTc2OF9lbmNhcF9zZWNy ZXQoY2xpZW50X3B1Yiwgc2VjcmV0LCBlbmNfb3V0KSA6CisrCQltbGtlbTEwMjRfZW5jYXBfc2Vj cmV0KGNsaWVudF9wdWIsIHNlY3JldCwgZW5jX291dCk7CisrCisrCWlmIChyICE9IDApCisrCQln b3RvIG91dDsKKysKKysJLyogZ2VuZXJhdGUgRUNESCBrZXkgcGFpciwgc3RvcmUgc2VydmVyIHB1 YmtleSBhZnRlciBjaXBoZXJ0ZXh0ICovCisrCXNlcnZlcl9rZXkgPSBuaXN0X3BrZXlfa2V5Z2Vu KHNlcnZlcl9rZXlfbGVuKTsKKysKKysJaWYgKChzZXJ2ZXJfa2V5ID09IE5VTEwpIHx8CisrCSAg ICAociA9IGdldF91bmNvbXByZXNzZWRfZWNfcHVia2V5KHNlcnZlcl9rZXksIHNlcnZlcl9wdWIs IHNlcnZlcl9rZXlfbGVuKSAhPSAwKSB8fAorKwkgICAgKHIgPSBzc2hidWZfcHV0KGJ1Ziwgc2Vj cmV0LCBzaXplb2Yoc2VjcmV0KSkpICE9IDAgfHwKKysJICAgIChyID0gc3NoYnVmX3B1dChzZXJ2 ZXJfYmxvYiwgZW5jX291dCwgZW5jX291dF9sZW4pICE9IDApfHwKKysJICAgIChyID0gc3NoYnVm X3B1dChzZXJ2ZXJfYmxvYiwgc2VydmVyX3B1Yiwgc2VydmVyX2tleV9sZW4pKSAhPSAwKQorKwkJ Z290byBvdXQ7CisrCisrCS8qIGFwcGVuZCBFQ0RIIHNoYXJlZCBrZXkgKi8KKysJY2xpZW50X3B1 YiArPSBtbGtlbV9idWZfbGVuOworKwlpZiAoKHIgPSBrZXhfbmlzdF9zaGFyZWRfa2V5X2V4dChz ZXJ2ZXJfa2V5LCBjbGllbnRfcHViLCBlY2RoX2J1Zl9sZW4sIGJ1ZikpIDwgMCkKKysJCWdvdG8g b3V0OworKwlpZiAoKHIgPSBzc2hfZGlnZXN0X2J1ZmZlcihrZXgtPmhhc2hfYWxnLCBidWYsIGhh c2gsIHNpemVvZihoYXNoKSkpICE9IDApCisrCQlnb3RvIG91dDsKKysjaWZkZWYgREVCVUdfS0VY RUNESAorKwlkdW1wX2RpZ2VzdCgic2VydmVyIHB1YmxpYyBOSVNUOiIsIHNlcnZlcl9wdWIsIHNl cnZlcl9rZXlfbGVuKTsKKysJZHVtcF9kaWdlc3QoInNlcnZlciBjaXBoZXIgdGV4dDoiLCBlbmNf b3V0LCBlbmNfb3V0X2xlbik7CisrCWR1bXBfZGlnZXN0KCJzZXJ2ZXIga2VtIGtleToiLCBzZWNy ZXQsIHNpemVvZihzZWNyZXQpKTsKKysJZHVtcF9kaWdlc3QoImNvbmNhdGVuYXRpb24gb2YgS0VN IGtleSBhbmQgRUNESCBzaGFyZWQga2V5OiIsCisrCSAgICBzc2hidWZfcHRyKGJ1ZiksIHNzaGJ1 Zl9sZW4oYnVmKSk7CisrI2VuZGlmCisrCS8qIHN0cmluZy1lbmNvZGVkIGhhc2ggaXMgcmVzdWx0 aW5nIHNoYXJlZCBzZWNyZXQgKi8KKysJc3NoYnVmX3Jlc2V0KGJ1Zik7CisrCWlmICgociA9IHNz aGJ1Zl9wdXRfc3RyaW5nKGJ1ZiwgaGFzaCwKKysJICAgIHNzaF9kaWdlc3RfYnl0ZXMoa2V4LT5o YXNoX2FsZykpKSAhPSAwKQorKwkJZ290byBvdXQ7CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJ ZHVtcF9kaWdlc3QoImVuY29kZWQgc2hhcmVkIHNlY3JldDoiLCBzc2hidWZfcHRyKGJ1ZiksIHNz aGJ1Zl9sZW4oYnVmKSk7CisrI2VuZGlmCisrCS8qIHN1Y2Nlc3MgKi8KKysJciA9IDA7CisrCSpz ZXJ2ZXJfYmxvYnAgPSBzZXJ2ZXJfYmxvYjsKKysJKnNoYXJlZF9zZWNyZXRwID0gYnVmOworKwlz ZXJ2ZXJfYmxvYiA9IE5VTEw7CisrCWJ1ZiA9IE5VTEw7CisrIG91dDoKKysJZXhwbGljaXRfYnpl cm8oaGFzaCwgc2l6ZW9mKGhhc2gpKTsKKysJRVZQX1BLRVlfZnJlZShzZXJ2ZXJfa2V5KTsKKysJ ZXhwbGljaXRfYnplcm8oZW5jX291dCwgc2l6ZW9mKGVuY19vdXQpKTsKKysJZXhwbGljaXRfYnpl cm8oc2VjcmV0LCBzaXplb2Yoc2VjcmV0KSk7CisrCXNzaGJ1Zl9mcmVlKHNlcnZlcl9ibG9iKTsK KysJc3NoYnVmX2ZyZWUoYnVmKTsKKysJcmV0dXJuIHI7CisrfQorKworK3N0YXRpYyBpbnQKKytr ZXhfa2VtX21sa2VtX25pc3RfZGVjKHN0cnVjdCBrZXggKmtleCwKKysgICAgY29uc3Qgc3RydWN0 IHNzaGJ1ZiAqc2VydmVyX2Jsb2IsIHN0cnVjdCBzc2hidWYgKipzaGFyZWRfc2VjcmV0cCwKKysg ICAgc2l6ZV90IG1sa2VtX2xlbikKKyt7CisrCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7Cisr CWNvbnN0IHVfY2hhciAqY2lwaGVydGV4dCwgKnNlcnZlcl9wdWI7CisrCXVfY2hhciBoYXNoW1NT SF9ESUdFU1RfTUFYX0xFTkdUSF07CisrCXVfY2hhciBkZWNhcFtjcnlwdG9fa2VtX21sa2VtNzY4 X0JZVEVTXTsKKysJaW50IHI7CisrCXNpemVfdCBuaXN0X2xlbjsKKysKKysJKnNoYXJlZF9zZWNy ZXRwID0gTlVMTDsKKysKKysJaWYgKHNzaGJ1Zl9sZW4oc2VydmVyX2Jsb2IpIDwgbWxrZW1fbGVu KSB7CisrCQlyID0gU1NIX0VSUl9TSUdOQVRVUkVfSU5WQUxJRDsKKysJCWdvdG8gb3V0OworKwl9 CisrCisrCW5pc3RfbGVuID0gc3NoYnVmX2xlbihzZXJ2ZXJfYmxvYikgLSBtbGtlbV9sZW47Cisr CisrCXN3aXRjaCAobWxrZW1fbGVuKSB7CisrCQljYXNlIGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQ SEVSVEVYVEJZVEVTOgorKwkJCWlmIChuaXN0X2xlbiAhPSBOSVNUX1AyNTZfQ09NUFJFU1NFRF9M RU4KKysJCQkJJiYgbmlzdF9sZW4gIT0gTklTVF9QMjU2X1VOQ09NUFJFU1NFRF9MRU4pIHsKKysJ CQkJciA9IFNTSF9FUlJfU0lHTkFUVVJFX0lOVkFMSUQ7CisrCQkJCWdvdG8gb3V0OworKwkJCX0K KysJCWJyZWFrOworKwkJY2FzZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVM6 CisrCQkJaWYgKG5pc3RfbGVuICE9IE5JU1RfUDM4NF9DT01QUkVTU0VEX0xFTgorKwkJCQkmJiBu aXN0X2xlbiAhPSBOSVNUX1AzODRfVU5DT01QUkVTU0VEX0xFTikgeworKwkJCQlyID0gU1NIX0VS Ul9TSUdOQVRVUkVfSU5WQUxJRDsKKysJCQkJZ290byBvdXQ7CisrCQkJfQorKwkJYnJlYWs7Cisr CX0KKysKKysJY2lwaGVydGV4dCA9IHNzaGJ1Zl9wdHIoc2VydmVyX2Jsb2IpOworKwlzZXJ2ZXJf cHViID0gY2lwaGVydGV4dCArIG1sa2VtX2xlbjsKKysJLyogaGFzaCBjb25jYXRlbmF0aW9uIG9m IEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtleSAqLworKwlpZiAoKGJ1ZiA9IHNzaGJ1Zl9uZXco KSkgPT0gTlVMTCkgeworKwkJciA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKKysJCWdvdG8gb3V0Owor Kwl9CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9kaWdlc3QoInNlcnZlciBjaXBoZXIg dGV4dDoiLCBjaXBoZXJ0ZXh0LCBtbGtlbV9sZW4pOworKwlkdW1wX2RpZ2VzdCgic2VydmVyIHB1 YmxpYyBrZXkgTklTVDoiLCBzZXJ2ZXJfcHViLCBuaXN0X2xlbik7CisrI2VuZGlmCisrCXIgPSAo bWxrZW1fbGVuID09IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTKSA/CisrCQlt bGtlbTc2OF9kZWNhcF9zZWNyZXQoa2V4LT5tbGtlbTc2OF9jbGllbnRfa2V5LCBjaXBoZXJ0ZXh0 LCBkZWNhcCkgOgorKwkJbWxrZW0xMDI0X2RlY2FwX3NlY3JldChrZXgtPm1sa2VtMTAyNF9jbGll bnRfa2V5LCBjaXBoZXJ0ZXh0LCBkZWNhcCk7CisrCisrCWlmIChyICE9IDApCisrCQlnb3RvIG91 dDsKKysJaWYgKChyID0gc3NoYnVmX3B1dChidWYsIGRlY2FwLCBzaXplb2YoZGVjYXApKSkgIT0g MCkKKysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBrZXhfbmlzdF9zaGFyZWRfa2V5X2V4dChrZXgt PmVjX2h5YnJpZF9jbGllbnRfa2V5LCBzZXJ2ZXJfcHViLAorKwkJbmlzdF9sZW4sIGJ1ZikpIDwg MCkKKysJCWdvdG8gb3V0OworKwlpZiAoKHIgPSBzc2hfZGlnZXN0X2J1ZmZlcihrZXgtPmhhc2hf YWxnLCBidWYsCisrCSAgICBoYXNoLCBzaXplb2YoaGFzaCkpKSAhPSAwKQorKwkJZ290byBvdXQ7 CisrI2lmZGVmIERFQlVHX0tFWEVDREgKKysJZHVtcF9kaWdlc3QoImNsaWVudCBrZW0ga2V5OiIs IGRlY2FwLCBzaXplb2YoZGVjYXApKTsKKysJZHVtcF9kaWdlc3QoImNvbmNhdGVuYXRpb24gb2Yg S0VNIGtleSBhbmQgRUNESCBzaGFyZWQga2V5OiIsCisrCSAgICBzc2hidWZfcHRyKGJ1ZiksIHNz aGJ1Zl9sZW4oYnVmKSk7CisrI2VuZGlmCisrCXNzaGJ1Zl9yZXNldChidWYpOworKwlpZiAoKHIg PSBzc2hidWZfcHV0X3N0cmluZyhidWYsIGhhc2gsCisrCSAgICBzc2hfZGlnZXN0X2J5dGVzKGtl eC0+aGFzaF9hbGcpKSkgIT0gMCkKKysJCWdvdG8gb3V0OworKyNpZmRlZiBERUJVR19LRVhFQ0RI CisrCWR1bXBfZGlnZXN0KCJlbmNvZGVkIHNoYXJlZCBzZWNyZXQ6Iiwgc3NoYnVmX3B0cihidWYp LCBzc2hidWZfbGVuKGJ1ZikpOworKyNlbmRpZgorKwkvKiBzdWNjZXNzICovCisrCXIgPSAwOwor Kwkqc2hhcmVkX3NlY3JldHAgPSBidWY7CisrCWJ1ZiA9IE5VTEw7CisrIG91dDoKKysJZXhwbGlj aXRfYnplcm8oaGFzaCwgc2l6ZW9mKGhhc2gpKTsKKysJZXhwbGljaXRfYnplcm8oZGVjYXAsIHNp emVvZihkZWNhcCkpOworKwlzc2hidWZfZnJlZShidWYpOworKwlyZXR1cm4gcjsKKyt9CisrCisr aW50Cisra2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2tleXBhaXIoc3RydWN0IGtleCAqa2V4KQor K3sKKysJcmV0dXJuIGtleF9rZW1fbWxrZW1fbmlzdF9rZXlwYWlyKGtleCwgY3J5cHRvX2tlbV9t bGtlbTc2OF9QVUJMSUNLRVlCWVRFUywgTklTVF9QMjU2X1VOQ09NUFJFU1NFRF9MRU4pOworK30K KysKKytpbnQKKytrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfZW5jKHN0cnVjdCBrZXggKmtleCwg Y29uc3Qgc3RydWN0IHNzaGJ1ZiAqY2xpZW50X2Jsb2IsCisrICAgIHN0cnVjdCBzc2hidWYgKipz ZXJ2ZXJfYmxvYnAsIHN0cnVjdCBzc2hidWYgKipzaGFyZWRfc2VjcmV0cCkKKyt7CisrCXJldHVy biBrZXhfa2VtX21sa2VtX25pc3RfZW5jKGtleCwgIlAtMjU2IiwgY2xpZW50X2Jsb2IsIHNlcnZl cl9ibG9icCwgc2hhcmVkX3NlY3JldHApOworK30KKysKKytpbnQKKytrZXhfa2VtX21sa2VtNzY4 bmlzdHAyNTZfZGVjKHN0cnVjdCBrZXggKmtleCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqc2VydmVy X2Jsb2IsCisrICAgIHN0cnVjdCBzc2hidWYgKipzaGFyZWRfc2VjcmV0cCkKKyt7CisrCXJldHVy biBrZXhfa2VtX21sa2VtX25pc3RfZGVjKGtleCwgc2VydmVyX2Jsb2IsIHNoYXJlZF9zZWNyZXRw LAorKwkJY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJURVhUQllURVMpOworK30KKysKKytpbnQK KytrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2tleXBhaXIoc3RydWN0IGtleCAqa2V4KQorK3sK KysJcmV0dXJuIGtleF9rZW1fbWxrZW1fbmlzdF9rZXlwYWlyKGtleCwgY3J5cHRvX2tlbV9tbGtl bTEwMjRfUFVCTElDS0VZQllURVMsIE5JU1RfUDM4NF9VTkNPTVBSRVNTRURfTEVOKTsKKyt9Cisr CisraW50Cisra2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9lbmMoc3RydWN0IGtleCAqa2V4LCBj b25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfYmxvYiwKKysgICAgc3RydWN0IHNzaGJ1ZiAqKnNl cnZlcl9ibG9icCwgc3RydWN0IHNzaGJ1ZiAqKnNoYXJlZF9zZWNyZXRwKQorK3sKKysJcmV0dXJu IGtleF9rZW1fbWxrZW1fbmlzdF9lbmMoa2V4LCAiUC0zODQiLCBjbGllbnRfYmxvYiwgc2VydmVy X2Jsb2JwLCBzaGFyZWRfc2VjcmV0cCk7CisrfQorKworK2ludAorK2tleF9rZW1fbWxrZW0xMDI0 bmlzdHAzODRfZGVjKHN0cnVjdCBrZXggKmtleCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqc2VydmVy X2Jsb2IsCisrICAgIHN0cnVjdCBzc2hidWYgKipzaGFyZWRfc2VjcmV0cCkKKyt7CisrCXJldHVy biBrZXhfa2VtX21sa2VtX25pc3RfZGVjKGtleCwgc2VydmVyX2Jsb2IsIHNoYXJlZF9zZWNyZXRw LAorKwkJY3J5cHRvX2tlbV9tbGtlbTEwMjRfQ0lQSEVSVEVYVEJZVEVTKTsKKyt9CisrCisgI2Vs c2UgLyogVVNFX01MS0VNNzY4WDI1NTE5ICovCisgaW50Cisga2V4X2tlbV9tbGtlbTc2OHgyNTUx OV9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKK0BAIC01NjcsNCArMTE2NSwzOSBAQCBrZXhfa2Vt X21sa2VtNzY4eDI1NTE5X2RlYyhzdHJ1Y3Qga2V4ICprZXgsCisgeworIAlyZXR1cm4gU1NIX0VS Ul9TSUdOX0FMR19VTlNVUFBPUlRFRDsKKyB9CisrCisraW50CSBrZXhfa2VtX21sa2VtNzY4bmlz dHAyNTZfa2V5cGFpcihzdHJ1Y3Qga2V4ICopCisreworKwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FM R19VTlNVUFBPUlRFRDsKKyt9CisrCisraW50CSBrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfZW5j KHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAorKyAgICBzdHJ1Y3Qgc3NoYnVm ICoqLCBzdHJ1Y3Qgc3NoYnVmICoqKQorK3sKKysJcmV0dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5T VVBQT1JURUQ7CisrfQorKworK2ludAkga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2RlYyhzdHJ1 Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKKysgICAgc3RydWN0IHNzaGJ1ZiAqKikK Kyt7CisrCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VOU1VQUE9SVEVEOworK30KKysKKytpbnQJ IGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfa2V5cGFpcihzdHJ1Y3Qga2V4ICopCisreworKwly ZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBPUlRFRDsKKyt9CisrCisraW50CSBrZXhfa2Vt X21sa2VtMTAyNG5pc3RwMzg0X2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYg KiwKKysgICAgc3RydWN0IHNzaGJ1ZiAqKiwgc3RydWN0IHNzaGJ1ZiAqKikKKyt7CisrCXJldHVy biBTU0hfRVJSX1NJR05fQUxHX1VOU1VQUE9SVEVEOworK30KKysKKytpbnQJIGtleF9rZW1fbWxr ZW0xMDI0bmlzdHAzODRfZGVjKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAor KyAgICBzdHJ1Y3Qgc3NoYnVmICoqKQorK3sKKysJcmV0dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5T VVBQT1JURUQ7CisrfQorKworICNlbmRpZiAvKiBVU0VfTUxLRU03NjhYMjU1MTkgKi8KK2RpZmYg LS1naXQgYS9tb25pdG9yLmMgYi9tb25pdG9yLmMKK2luZGV4IGJmNWE1MTA1Yi4uMzZkYjFhZmVl IDEwMDY0NAorLS0tIGEvbW9uaXRvci5jCisrKysgYi9tb25pdG9yLmMKK0BAIC0yMDUwLDYgKzIw NTAsOCBAQCBtb25pdG9yX2FwcGx5X2tleXN0YXRlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IG1v bml0b3IgKnBtb25pdG9yKQorIAlrZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2Vu X3NlcnZlcjsKKyAJa2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtl eF9nZW5fc2VydmVyOworIAlrZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0g PSBrZXhfZ2VuX3NlcnZlcjsKKysJa2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NI QTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKysJa2V4LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNU UDM4NF9TSEEzODRdID0ga2V4X2dlbl9zZXJ2ZXI7CisgCWtleC0+bG9hZF9ob3N0X3B1YmxpY19r ZXk9JmdldF9ob3N0a2V5X3B1YmxpY19ieV90eXBlOworIAlrZXgtPmxvYWRfaG9zdF9wcml2YXRl X2tleT0mZ2V0X2hvc3RrZXlfcHJpdmF0ZV9ieV90eXBlOworIAlrZXgtPmhvc3Rfa2V5X2luZGV4 PSZnZXRfaG9zdGtleV9pbmRleDsKK2RpZmYgLS1naXQgYS9teXByb3Bvc2FsLmggYi9teXByb3Bv c2FsLmgKK2luZGV4IDY0MzNlMDgyMC4uNTFlM2VmNWM4IDEwMDY0NAorLS0tIGEvbXlwcm9wb3Nh bC5oCisrKysgYi9teXByb3Bvc2FsLmgKK0BAIC0yNiw2ICsyNiw4IEBACisgCisgI2RlZmluZSBL RVhfU0VSVkVSX0tFWAlcCisgCSJtbGtlbTc2OHgyNTUxOS1zaGEyNTYsIiBcCisrCSJtbGtlbTc2 OG5pc3RwMjU2LXNoYTI1NiwiIFwKKysJIm1sa2VtMTAyNG5pc3RwMzg0LXNoYTM4NCwiIFwKKyAJ InNudHJ1cDc2MXgyNTUxOS1zaGE1MTIsIiBcCisgCSJzbnRydXA3NjF4MjU1MTktc2hhNTEyQG9w ZW5zc2guY29tLCIgXAorIAkiY3VydmUyNTUxOS1zaGEyNTYsIiBcCitAQCAtOTksNiArMTAxLDgg QEAKKyAJImFlczE5Mi1jYmMsYWVzMjU2LWNiYyxyaWpuZGFlbC1jYmNAbHlzYXRvci5saXUuc2Us IiBcCisgCSJhZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFlczI1Ni1nY21Ab3BlbnNzaC5jb20iCisg I2RlZmluZSBLRVhfREVGQVVMVF9LRVhfRklQUwkJXAorKwkibWxrZW03NjhuaXN0cDI1Ni1zaGEy NTYsIiBcCisrCSJtbGtlbTEwMjRuaXN0cDM4NC1zaGEzODQsIiBcCisgCSJlY2RoLXNoYTItbmlz dHAyNTYsIiBcCisgCSJlY2RoLXNoYTItbmlzdHAzODQsIiBcCisgCSJlY2RoLXNoYTItbmlzdHA1 MjEsIiBcCitkaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMgYi9y ZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYworaW5kZXggZjQ3MDBkZWViLi45OWE4ZTNi NDYgMTAwNjQ0CistLS0gYS9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9rZXguYworKysrIGIv cmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMKK0BAIC0xNzEsNiArMTcxLDggQEAgZG9f a2V4X3dpdGhfa2V5KGNoYXIgKmtleCwgY2hhciAqY2lwaGVyLCBjaGFyICptYWMsCisgCXNlcnZl cjItPmtleC0+a2V4W0tFWF9DMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworIAlzZXJ2 ZXIyLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9z ZXJ2ZXI7CisgCXNlcnZlcjItPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2 XSA9IGtleF9nZW5fc2VydmVyOworKwlzZXJ2ZXIyLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4 TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOworKwlzZXJ2ZXIyLT5rZXgtPmtleFtL RVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJc2Vy dmVyMi0+a2V4LT5sb2FkX2hvc3RfcHVibGljX2tleSA9IHNlcnZlci0+a2V4LT5sb2FkX2hvc3Rf cHVibGljX2tleTsKKyAJc2VydmVyMi0+a2V4LT5sb2FkX2hvc3RfcHJpdmF0ZV9rZXkgPSBzZXJ2 ZXItPmtleC0+bG9hZF9ob3N0X3ByaXZhdGVfa2V5OworIAlzZXJ2ZXIyLT5rZXgtPnNpZ24gPSBz ZXJ2ZXItPmtleC0+c2lnbjsKK0BAIC0yNDgsNiArMjUwLDggQEAga2V4X3Rlc3RzKHZvaWQpCisg CX0KKyAjIGlmZGVmIFVTRV9NTEtFTTc2OFgyNTUxOQorIAlkb19rZXgoIm1sa2VtNzY4eDI1NTE5 LXNoYTI1NiIpOworKwlkb19rZXgoIm1sa2VtNzY4bmlzdHAyNTYtc2hhMjU2Iik7CisrCWRvX2tl eCgibWxrZW0xMDI0bmlzdHAzODQtc2hhMzg0Iik7CisgIyBlbmRpZiAvKiBVU0VfTUxLRU03NjhY MjU1MTkgKi8KKyAjIGlmZGVmIFVTRV9TTlRSVVA3NjFYMjU1MTkKKyAJZG9fa2V4KCJzbnRydXA3 NjF4MjU1MTktc2hhNTEyIik7CitkaWZmIC0tZ2l0IGEvc3NoLWtleXNjYW4uYyBiL3NzaC1rZXlz Y2FuLmMKK2luZGV4IDNjZWExZGFhYy4uZjVjZTkwNDM0IDEwMDY0NAorLS0tIGEvc3NoLWtleXNj YW4uYworKysrIGIvc3NoLWtleXNjYW4uYworQEAgLTMwMCw2ICszMDAsOCBAQCBrZXlncmFiX3Nz aDIoY29uICpjKQorIAljLT5jX3NzaC0+a2V4LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4 X2dlbl9jbGllbnQ7CisgCWMtPmNfc3NoLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUx OV9TSEE1MTJdID0ga2V4X2dlbl9jbGllbnQ7CisgCWMtPmNfc3NoLT5rZXgtPmtleFtLRVhfS0VN X01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJYy0+Y19zc2gtPmtl eC0+a2V4W0tFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7 CisrCWMtPmNfc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0g PSBrZXhfZ2VuX2NsaWVudDsKKyAJc3NoX3NldF92ZXJpZnlfaG9zdF9rZXlfY2FsbGJhY2soYy0+ Y19zc2gsIGtleV9wcmludF93cmFwcGVyKTsKKyAJLyoKKyAJICogZG8gdGhlIGtleS1leGNoYW5n ZSB1bnRpbCBhbiBlcnJvciBvY2N1cnMgb3IgdW50aWwKK2RpZmYgLS1naXQgYS9zc2hfYXBpLmMg Yi9zc2hfYXBpLmMKK2luZGV4IDM4YWMxN2RhMS4uYjE3ODU4MmIzIDEwMDY0NAorLS0tIGEvc3No X2FwaS5jCisrKysgYi9zc2hfYXBpLmMKK0BAIC0xMzUsNiArMTM1LDggQEAgc3NoX2luaXQoc3Ry dWN0IHNzaCAqKnNzaHAsIGludCBpc19zZXJ2ZXIsIHN0cnVjdCBrZXhfcGFyYW1zICprZXhfcGFy YW1zKQorIAkJc3NoLT5rZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZl cjsKKyAJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtl eF9nZW5fc2VydmVyOworIAkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NI QTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKysJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2 OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKysJCXNzaC0+a2V4LT5rZXhbS0VY X0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9zZXJ2ZXI7CisgCQlzc2gt PmtleC0+bG9hZF9ob3N0X3B1YmxpY19rZXk9Jl9zc2hfaG9zdF9wdWJsaWNfa2V5OworIAkJc3No LT5rZXgtPmxvYWRfaG9zdF9wcml2YXRlX2tleT0mX3NzaF9ob3N0X3ByaXZhdGVfa2V5OworIAkJ c3NoLT5rZXgtPnNpZ249Jl9zc2hfaG9zdF9rZXlfc2lnbjsKK0BAIC0xNTQsNiArMTU2LDggQEAg c3NoX2luaXQoc3RydWN0IHNzaCAqKnNzaHAsIGludCBpc19zZXJ2ZXIsIHN0cnVjdCBrZXhfcGFy YW1zICprZXhfcGFyYW1zKQorIAkJc3NoLT5rZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBr ZXhfZ2VuX2NsaWVudDsKKyAJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlf U0hBNTEyXSA9IGtleF9nZW5fY2xpZW50OworIAkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VN NzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJCXNzaC0+a2V4LT5rZXhbS0VY X0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJCXNzaC0+ a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9jbGll bnQ7CisgCQlzc2gtPmtleC0+dmVyaWZ5X2hvc3Rfa2V5ID0mX3NzaF92ZXJpZnlfaG9zdF9rZXk7 CisgCX0KKyAJKnNzaHAgPSBzc2g7CitkaWZmIC0tZ2l0IGEvc3NoY29ubmVjdDIuYyBiL3NzaGNv bm5lY3QyLmMKK2luZGV4IGVlZTFmOTc5NC4uNTBjMjI4ODAyIDEwMDY0NAorLS0tIGEvc3NoY29u bmVjdDIuYworKysrIGIvc3NoY29ubmVjdDIuYworQEAgLTM1MCw2ICszNTAsOCBAQCBzc2hfa2V4 MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhvc3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIs IHVfc2hvcnQgcG9ydCwKKyAJc3NoLT5rZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhf Z2VuX2NsaWVudDsKKyAJc3NoLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1 MTJdID0ga2V4X2dlbl9jbGllbnQ7CisgCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OFgy NTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7CisrCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9N TEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKKysJc3NoLT5rZXgtPmtl eFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX2NsaWVudDsKKyAJ c3NoLT5rZXgtPnZlcmlmeV9ob3N0X2tleT0mdmVyaWZ5X2hvc3Rfa2V5X2NhbGxiYWNrOworIAor ICNpZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVmaW5lZChXSVRIX09QRU5TU0wpCitkaWZmIC0tZ2l0 IGEvc3NoZC1hdXRoLmMgYi9zc2hkLWF1dGguYworaW5kZXggODg1Y2Q4MjgxLi5hNWQyYTFhNmUg MTAwNjQ0CistLS0gYS9zc2hkLWF1dGguYworKysrIGIvc3NoZC1hdXRoLmMKK0BAIC04OTMsNiAr ODkzLDggQEAgZG9fc3NoMl9rZXgoc3RydWN0IHNzaCAqc3NoKQorIAlrZXgtPmtleFtLRVhfQzI1 NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKyAJa2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3 NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fc2VydmVyOworIAlrZXgtPmtleFtLRVhfS0VNX01M S0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKysJa2V4LT5rZXhbS0VYX0tF TV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKKysJa2V4LT5rZXhb S0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9zZXJ2ZXI7CisgCWtl eC0+bG9hZF9ob3N0X3B1YmxpY19rZXk9JmdldF9ob3N0a2V5X3B1YmxpY19ieV90eXBlOworIAlr ZXgtPmxvYWRfaG9zdF9wcml2YXRlX2tleT0mZ2V0X2hvc3RrZXlfcHJpdmF0ZV9ieV90eXBlOwor IAlrZXgtPmhvc3Rfa2V5X2luZGV4PSZnZXRfaG9zdGtleV9pbmRleDsKKy0tIAorMi41My4wCisK CmRpZmYgLS1naXQgYS8wMDQ4LXN1cHBvcnQtYXV0aGVudGljYXRpb24taW5kaWNhdG9ycy1pbi1H U1NBUEkucGF0Y2ggYi8wMDQ4LXN1cHBvcnQtYXV0aGVudGljYXRpb24taW5kaWNhdG9ycy1pbi1H U1NBUEkucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NGEwMDYuLjAwMDAw MDAKLS0tIGEvMDA0OC1zdXBwb3J0LWF1dGhlbnRpY2F0aW9uLWluZGljYXRvcnMtaW4tR1NTQVBJ LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUwICswLDAgQEAKLUZyb20gMWNmNWU0MGUxNGQ3 MDdkZTIzMTg3NDc3NThiMDEyZmM3MjQ1Y2I3YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZy b206IEFsZXhhbmRlciBCb2tvdm95IDxhYm9rb3ZveUByZWRoYXQuY29tPgotRGF0ZTogTW9uLCAx MCBKdW4gMjAyNCAyMzowMDowMyArMDMwMAotU3ViamVjdDogW1BBVENIIDQ4LzUzXSBzdXBwb3J0 IGF1dGhlbnRpY2F0aW9uIGluZGljYXRvcnMgaW4gR1NTQVBJCi0KLVJGQyA2NjgwIGRlZmluZXMg YSBzZXQgb2YgR1NTQVBJIGV4dGVuc2lvbnMgdG8gaGFuZGxlIGF0dHJpYnV0ZXMKLWFzc29jaWF0 ZWQgd2l0aCB0aGUgR1NTQVBJIG5hbWVzLiBNSVQgS2VyYmVyb3MgYW5kIEZyZWVJUEEgdXNlCi1u YW1lIGF0dHJpYnV0ZXMgdG8gYWRkIGluZm9ybWF0aW9uIGFib3V0IHByZS1hdXRoZW50aWNhdGlv biBtZXRob2RzIHVzZWQKLXRvIGFjcXVpcmUgdGhlIGluaXRpYWwgS2VyYmVyb3MgdGlja2V0LiBU aGUgYXR0cmlidXRlICdhdXRoLWluZGljYXRvcnMnCi1tYXkgY29udGFpbiBsaXN0IG9mIHN0cmlu Z3MgdGhhdCBLREMgaGFzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGlja2V0Ci1pc3N1YW5jZSBwcm9j ZXNzLgotCi1Vc2UgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyB0byBhdXRob3Jpc2Ugb3IgZGVu eSBhY2Nlc3MgdG8gU1NIIHNlcnZlci4KLUdTU0FQSUluZGljYXRvcnMgc2V0dGluZyBhbGxvd3Mg dG8gc3BlY2lmeSBhIGxpc3Qgb2YgcG9zc2libGUgaW5kaWNhdG9ycwotdGhhdCBhIEtlcmJlcm9z IHRpY2tldCBwcmVzZW50ZWQgbXVzdCBvciBtdXN0IG5vdCBjb250YWluLiBNb3JlIGRldGFpbHMK LW9uIHRoZSBzeW50YXggYXJlIHByb3ZpZGVkIGluIHNzaGRfY29uZmlnKDUpIG1hbiBwYWdlLgot Ci1GaXhlczogaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY5 NgotCi1TaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgQm9rb3ZveSA8YWJva292b3lAcmVkaGF0LmNv bT4KLS0tLQotIGNvbmZpZ3VyZS5hYyAgICB8ICAgMSArCi0gZ3NzLXNlcnYta3JiNS5jIHwgIDY0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQotIGdzcy1zZXJ2LmMgICAgICB8IDEwMyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KLSBzZXJ2Y29u Zi5jICAgICAgfCAgMTUgKysrKysrLQotIHNlcnZjb25mLmggICAgICB8ICAgMiArCi0gc3NoLWdz cy5oICAgICAgIHwgICA3ICsrKysKLSBzc2hkX2NvbmZpZy41ICAgfCAgNDQgKysrKysrKysrKysr KysrKysrKysrCi0gNyBmaWxlcyBjaGFuZ2VkLCAyMjggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlv bnMoLSkKLQotZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwotaW5kZXgg ODA1YmU0YjVlLi45ZDNiMTk5MjUgMTAwNjQ0Ci0tLS0gYS9jb25maWd1cmUuYWMKLSsrKyBiL2Nv bmZpZ3VyZS5hYwotQEAgLTUwNTAsNiArNTA1MCw3IEBAIEFDX0FSR19XSVRIKFtrZXJiZXJvczVd LAotIAkJQUNfQ0hFQ0tfSEVBREVSUyhbZ3NzYXBpLmggZ3NzYXBpL2dzc2FwaS5oXSkKLSAJCUFD X0NIRUNLX0hFQURFUlMoW2dzc2FwaV9rcmI1LmggZ3NzYXBpL2dzc2FwaV9rcmI1LmhdKQotIAkJ QUNfQ0hFQ0tfSEVBREVSUyhbZ3NzYXBpX2dlbmVyaWMuaCBnc3NhcGkvZ3NzYXBpX2dlbmVyaWMu aF0pCi0rCQlBQ19DSEVDS19IRUFERVJTKFtnc3NhcGlfZXh0LmggZ3NzYXBpL2dzc2FwaV9leHQu aF0pCi0gCi0gCQlBQ19TRUFSQ0hfTElCUyhba19oYXNhZnNdLCBba2Fmc10sIFtBQ19ERUZJTkUo W1VTRV9BRlNdLCBbMV0sCi0gCQkJW0RlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIHVzZSBsaWJr YWZzJyBBRlMgc3VwcG9ydF0pXSkKLWRpZmYgLS1naXQgYS9nc3Mtc2Vydi1rcmI1LmMgYi9nc3Mt c2Vydi1rcmI1LmMKLWluZGV4IDAzMTg4ZDliMy4uMmM3ODZlZjE0IDEwMDY0NAotLS0tIGEvZ3Nz LXNlcnYta3JiNS5jCi0rKysgYi9nc3Mtc2Vydi1rcmI1LmMKLUBAIC00Myw2ICs0Myw3IEBACi0g I2luY2x1ZGUgImxvZy5oIgotICNpbmNsdWRlICJtaXNjLmgiCi0gI2luY2x1ZGUgInNlcnZjb25m LmgiCi0rI2luY2x1ZGUgIm1hdGNoLmgiCi0gCi0gI2luY2x1ZGUgInNzaC1nc3MuaCIKLSAKLUBA IC04Nyw2ICs4OCwzMiBAQCBzc2hfZ3NzYXBpX2tyYjVfaW5pdCh2b2lkKQotIAlyZXR1cm4gMTsK LSB9Ci0gCi0rLyogQ2hlY2sgaWYgYW55IG9mIHRoZSBpbmRpY2F0b3JzIGluIHRoZSBLZXJiZXJv cyB0aWNrZXQgbWF0Y2gKLSsgKiBvbmUgb2YgaW5kaWNhdG9ycyBpbiB0aGUgbGlzdCBvZiBhbGxv d2VkL2RlbmllZCBydWxlcy4KLSsgKiBJbiBjYXNlIG9mIHRoZSBtYXRjaCwgYXBwbHkgdGhlIGRl Y2lzaW9uIGZyb20gdGhlIHJ1bGUuCi0rICogSW4gY2FzZSBvZiBubyBpbmRpY2F0b3IgZnJvbSB0 aGUgdGlja2V0IG1hdGNoaW5nIHRoZSBydWxlLCBkZW55Ci0rICovCi0rCi0rc3RhdGljIGludAot K3NzaF9nc3NhcGlfY2hlY2tfaW5kaWNhdG9ycyhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBp bnQgKm1hdGNoZWQpCi0rewotKwlpbnQgcmV0OwotKwl1X2ludCBpOwotKwotKwkvKiBDaGVjayBp bmRpY2F0b3JzICovCi0rCWZvciAoaSA9IDA7IGNsaWVudC0+aW5kaWNhdG9yc1tpXSAhPSBOVUxM OyBpKyspIHsKLSsJCXJldCA9IG1hdGNoX3BhdHRlcm5fbGlzdChjbGllbnQtPmluZGljYXRvcnNb aV0sCi0rCQkJCQkgb3B0aW9ucy5nc3NfaW5kaWNhdG9ycywgMSk7Ci0rCQkvKiBuZWdhdGl2ZSBv ciBwb3NpdGl2ZSBtYXRjaCAqLwotKwkJaWYgKHJldCAhPSAwKSB7Ci0rCQkJKm1hdGNoZWQgPSBp OwotKwkJCXJldHVybiByZXQ7Ci0rCQl9Ci0rCX0KLSsJLyogTm8gcnVsZSBtYXRjaGVkICovCi0r CXJldHVybiAwOwotK30KLSsKLSAvKiBDaGVjayBpZiB0aGlzIHVzZXIgaXMgT0sgdG8gbG9naW4u IFRoaXMgb25seSB3b3JrcyB3aXRoIGtyYjUgLSBvdGhlcgotICAqIEdTU0FQSSBtZWNoYW5pc21z IHdpbGwgbmVlZCB0aGVpciBvd24uCi0gICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGlzIE9L IHRvIGxvZyBpbiwgb3RoZXJ3aXNlIHJldHVybnMgMAotQEAgLTE5Myw3ICsyMjAsNyBAQCBzdGF0 aWMgaW50Ci0gc3NoX2dzc2FwaV9rcmI1X3VzZXJvayhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50 LCBjaGFyICpuYW1lKQotIHsKLSAJa3JiNV9wcmluY2lwYWwgcHJpbmM7Ci0tCWludCByZXR2YWw7 Ci0rCWludCByZXR2YWwsIG1hdGNoZWQ7Ci0gCWNvbnN0IGNoYXIgKmVycm1zZzsKLSAJaW50IGs1 bG9naW5fZXhpc3RzOwotIAotQEAgLTIxNiwxNyArMjQzLDQyIEBAIHNzaF9nc3NhcGlfa3JiNV91 c2Vyb2soc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqbmFtZSkKLSAJaWYgKGs1bG9n aW5fZXhpc3RzICYmCi0gCSAgICBzc2hfa3JiNV9rdXNlcm9rKGtyYl9jb250ZXh0LCBwcmluYywg bmFtZSwgazVsb2dpbl9leGlzdHMpKSB7Ci0gCQlyZXR2YWwgPSAxOwotLQkJbG9naXQoIkF1dGhv cml6ZWQgdG8gJXMsIGtyYjUgcHJpbmNpcGFsICVzIChrcmI1X2t1c2Vyb2spIiwKLS0JCSAgICBu YW1lLCAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUpOwotKwkgICAgZXJybXNnID0g ImtyYjVfa3VzZXJvayI7Ci0gCX0gZWxzZSBpZiAoc3NoX2dzc2FwaV9rcmI1X2NtZG9rKHByaW5j LCBjbGllbnQtPmV4cG9ydGVkbmFtZS52YWx1ZSwKLSAJCW5hbWUsIGs1bG9naW5fZXhpc3RzKSkg ewotIAkJcmV0dmFsID0gMTsKLS0JCWxvZ2l0KCJBdXRob3JpemVkIHRvICVzLCBrcmI1IHByaW5j aXBhbCAlcyAiCi0tCQkgICAgIihzc2hfZ3NzYXBpX2tyYjVfY21kb2spIiwKLS0JCSAgICBuYW1l LCAoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUpOwotKwkJZXJybXNnID0gInNzaF9n c3NhcGlfa3JiNV9jbWRvayI7Ci0gCX0gZWxzZQotIAkJcmV0dmFsID0gMDsKLSAKLSsJaWYgKChy ZXR2YWwgPT0gMSkgJiYgKG9wdGlvbnMuZ3NzX2luZGljYXRvcnMgIT0gTlVMTCkpIHsKLSsJCS8q IEF0IHRoaXMgcG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gZW5mb3JjZXMgcHJlc2VuY2Ugb2YgaW5k aWNhdG9ycwotKwkJICogc28gd2UgZHJvcCB0aGUgYXV0aG9yaXphdGlvbiByZXN1bHQgYWdhaW4g Ki8KLSsJCXJldHZhbCA9IDA7Ci0rCQlpZiAoY2xpZW50LT5pbmRpY2F0b3JzKSB7Ci0rCQkJbWF0 Y2hlZCA9IC0xOwotKwkJCXJldHZhbCA9IHNzaF9nc3NhcGlfY2hlY2tfaW5kaWNhdG9ycyhjbGll bnQsICZtYXRjaGVkKTsKLSsJCQlpZiAocmV0dmFsICE9IDApIHsKLSsJCQkJcmV0dmFsID0gKHJl dHZhbCA9PSAxKTsKLSsJCQkJbG9naXQoIlRpY2tldCBjb250YWlucyBpbmRpY2F0b3IgJXMsICIK LSsJCQkJCSJrcmI1IHByaW5jaXBhbCAlcyBpcyAlcyIsCi0rCQkJCQljbGllbnQtPmluZGljYXRv cnNbbWF0Y2hlZF0sCi0rCQkJCQkoY2hhciAqKWNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUsCi0r CQkJCSAgICAgICAgcmV0dmFsID8gImFsbG93ZWQiIDogImRlbmllZCIpOwotKwkJCQlnb3RvIGNv bnQ7Ci0rCQkJfQotKwkJfQotKwkJaWYgKHJldHZhbCA9PSAwKSB7Ci0rCQkJbG9naXQoIkdTU0FQ SSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGVuZm9yY2VkICIKLSsJCQkJImJ1dCBub3QgbWF0 Y2hlZC4ga3JiNSBwcmluY2lwYWwgJXMgZGVuaWVkIiwKLSsJCQkoY2hhciAqKWNsaWVudC0+ZGlz cGxheW5hbWUudmFsdWUpOwotKwkJfQotKwl9Ci0rY29udDoKLSsJaWYgKHJldHZhbCA9PSAxKSB7 Ci0rCQlsb2dpdCgiQXV0aG9yaXplZCB0byAlcywga3JiNSBwcmluY2lwYWwgJXMgKCVzKSIsCi0r CQkgICAgbmFtZSwgKGNoYXIgKiljbGllbnQtPmRpc3BsYXluYW1lLnZhbHVlLCBlcnJtc2cpOwot Kwl9Ci0gCWtyYjVfZnJlZV9wcmluY2lwYWwoa3JiX2NvbnRleHQsIHByaW5jKTsKLSAJcmV0dXJu IHJldHZhbDsKLSB9Ci1kaWZmIC0tZ2l0IGEvZ3NzLXNlcnYuYyBiL2dzcy1zZXJ2LmMKLWluZGV4 IGQyYmMwMzQ4Ni4uYmU4MGUxN2NhIDEwMDY0NAotLS0tIGEvZ3NzLXNlcnYuYwotKysrIGIvZ3Nz LXNlcnYuYwotQEAgLTU0LDcgKzU0LDcgQEAgZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0aW9uczsK LSAKLSBzdGF0aWMgc3NoX2dzc2FwaV9jbGllbnQgZ3NzYXBpX2NsaWVudCA9Ci0gICAgIHsgR1NT X0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19FTVBUWV9CVUZGRVIsIEdTU19DX05PX0NSRURFTlRJQUws Ci0tICAgIEdTU19DX05PX05BTUUsIE5VTEwsIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM fSwgMCwgMH07Ci0rICAgIEdTU19DX05PX05BTUUsIE5VTEwsIHtOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMfSwgMCwgMCwgTlVMTH07Ci0gCi0gc3NoX2dzc2FwaV9tZWNoIGdzc2FwaV9udWxs X21lY2ggPQotICAgICB7IE5VTEwsIE5VTEwsIHswLCBOVUxMfSwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTH07Ci1AQCAtMjk2LDYgKzI5Niw5MiBAQCBzc2hfZ3NzYXBpX3BhcnNlX2VuYW1l KEdzc2N0eHQgKmN0eCwgZ3NzX2J1ZmZlcl90IGVuYW1lLCBnc3NfYnVmZmVyX3QgbmFtZSkKLSAJ cmV0dXJuIEdTU19TX0NPTVBMRVRFOwotIH0KLSAKLSsKLSsvKiBFeHRyYWN0IGF1dGhlbnRpY2F0 aW9uIGluZGljYXRvcnMgZnJvbSB0aGUgS2VyYmVyb3MgdGlja2V0LiBBdXRoZW50aWNhdGlvbgot KyAqIGluZGljYXRvcnMgYXJlIEdTU0FQSSBuYW1lIGF0dHJpYnV0ZXMgZm9yIHRoZSBuYW1lICJh dXRoLWluZGljYXRvcnMiLgotKyAqIE11bHRpcGxlIGluZGljYXRvcnMgbWlnaHQgYmUgcHJlc2Vu dCBpbiB0aGUgdGlja2V0LgotKyAqIEVhY2ggaW5kaWNhdG9yIGlzIGEgdXRmOCBzdHJpbmcuICov Ci0rCi0rI2RlZmluZSBBVVRIX0lORElDQVRPUlNfVEFHICJhdXRoLWluZGljYXRvcnMiCi0rCi0r LyogUHJpdmlsZWdlZCAoY2FsbGVkIGZyb20gYWNjZXB0X3NlY3VyZV9jdHgpICovCi0rc3RhdGlj IE9NX3VpbnQzMgotK3NzaF9nc3NhcGlfZ2V0aW5kaWNhdG9ycyhHc3NjdHh0ICpjdHgsIGdzc19u YW1lX3QgZ3NzX25hbWUsIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCi0rewotKwlnc3NfYnVm ZmVyX3NldF90IGF0dHJzID0gR1NTX0NfTk9fQlVGRkVSX1NFVDsKLSsJZ3NzX2J1ZmZlcl9kZXNj IHZhbHVlID0gR1NTX0NfRU1QVFlfQlVGRkVSOwotKwlnc3NfYnVmZmVyX2Rlc2MgZGlzcGxheV92 YWx1ZSA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJaW50IGlzX21lY2huYW1lLCBhdXRoZW50aWNh dGVkLCBjb21wbGV0ZSwgbW9yZTsKLSsJc2l6ZV90IGNvdW50LCBpOwotKwotKwljdHgtPm1ham9y ID0gZ3NzX2lucXVpcmVfbmFtZSgmY3R4LT5taW5vciwgZ3NzX25hbWUsCi0rCQkJCSAgICAgICZp c19tZWNobmFtZSwgTlVMTCwgJmF0dHJzKTsKLSsJaWYgKGN0eC0+bWFqb3IgIT0gR1NTX1NfQ09N UExFVEUpIHsKLSsJCXJldHVybiAoY3R4LT5tYWpvcik7Ci0rCX0KLSsKLSsJaWYgKGF0dHJzID09 IEdTU19DX05PX0JVRkZFUl9TRVQpIHsKLSsJCS8qIE5vIGluZGljYXRvcnMgaW4gdGhlIHRpY2tl dCAqLwotKwkJcmV0dXJuICgwKTsKLSsJfQotKwotKwljb3VudCA9IDA7Ci0rCWZvciAoaSA9IDA7 IGkgPCBhdHRycy0+Y291bnQ7IGkrKykgewotKwkJLyogc2tpcCBhbnl0aGluZyBidXQgYXV0aC1p bmRpY2F0b3JzICovCi0rCQlpZiAoKChzaXplb2YoQVVUSF9JTkRJQ0FUT1JTX1RBRykgLSAxKSAh PSBhdHRycy0+ZWxlbWVudHNbaV0ubGVuZ3RoKSB8fAotKwkJICAgIHN0cm5jbXAoQVVUSF9JTkRJ Q0FUT1JTX1RBRywKLSsJCQkgICAgYXR0cnMtPmVsZW1lbnRzW2ldLnZhbHVlLAotKwkJCSAgICBz aXplb2YoQVVUSF9JTkRJQ0FUT1JTX1RBRykgLSAxKSAhPSAwKQotKwkJCWNvbnRpbnVlOwotKwkJ Y291bnQrKzsKLSsJfQotKwotKwlpZiAoY291bnQgPT0gMCkgewotKwkJLyogTm8gYXV0aC1pbmRp Y2F0b3JzIGluIHRoZSB0aWNrZXQgKi8KLSsJCSh2b2lkKSBnc3NfcmVsZWFzZV9idWZmZXJfc2V0 KCZjdHgtPm1pbm9yLCAmYXR0cnMpOwotKwkJcmV0dXJuICgwKTsKLSsJfQotKwotKwljbGllbnQt PmluZGljYXRvcnMgPSByZWNhbGxvY2FycmF5KE5VTEwsIDAsIGNvdW50ICsgMSwgc2l6ZW9mKGNo YXIqKSk7Ci0rCWNvdW50ID0gMDsKLSsJZm9yIChpID0gMDsgaSA8IGF0dHJzLT5jb3VudDsgaSsr KSB7Ci0rCQlhdXRoZW50aWNhdGVkID0gMDsKLSsJCWNvbXBsZXRlID0gMDsKLSsJCW1vcmUgPSAt MTsKLSsJCS8qIHNraXAgYW55dGhpbmcgYnV0IGF1dGgtaW5kaWNhdG9ycyAqLwotKwkJaWYgKCgo c2l6ZW9mKEFVVEhfSU5ESUNBVE9SU19UQUcpIC0gMSkgIT0gYXR0cnMtPmVsZW1lbnRzW2ldLmxl bmd0aCkgfHwKLSsJCSAgICBzdHJuY21wKEFVVEhfSU5ESUNBVE9SU19UQUcsCi0rCQkJICAgIGF0 dHJzLT5lbGVtZW50c1tpXS52YWx1ZSwKLSsJCQkgICAgc2l6ZW9mKEFVVEhfSU5ESUNBVE9SU19U QUcpIC0gMSkgIT0gMCkKLSsJCQljb250aW51ZTsKLSsJCS8qIHJldHJpZXZlIGFsbCBpbmRpY2F0 b3JzICovCi0rCQl3aGlsZSAobW9yZSAhPSAwKSB7Ci0rCQkJdmFsdWUudmFsdWUgPSBOVUxMOwot KwkJCWRpc3BsYXlfdmFsdWUudmFsdWUgPSBOVUxMOwotKwkJCWN0eC0+bWFqb3IgPSBnc3NfZ2V0 X25hbWVfYXR0cmlidXRlKCZjdHgtPm1pbm9yLCBnc3NfbmFtZSwKLSsJCQkJCSZhdHRycy0+ZWxl bWVudHNbaV0sICZhdXRoZW50aWNhdGVkLAotKwkJCQkJJmNvbXBsZXRlLCAmdmFsdWUsICZkaXNw bGF5X3ZhbHVlLCAmbW9yZSk7Ci0rCQkJaWYgKGN0eC0+bWFqb3IgIT0gR1NTX1NfQ09NUExFVEUp IHsKLSsJCQkJZ290byBvdXQ7Ci0rCQkJfQotKwotKwkJCWlmICgodmFsdWUudmFsdWUgIT0gTlVM TCkgJiYgYXV0aGVudGljYXRlZCkgewotKwkJCQljbGllbnQtPmluZGljYXRvcnNbY291bnRdID0g eG1hbGxvYyh2YWx1ZS5sZW5ndGggKyAxKTsKLSsJCQkJbWVtY3B5KGNsaWVudC0+aW5kaWNhdG9y c1tjb3VudF0sIHZhbHVlLnZhbHVlLCB2YWx1ZS5sZW5ndGgpOwotKwkJCQljbGllbnQtPmluZGlj YXRvcnNbY291bnRdW3ZhbHVlLmxlbmd0aF0gPSAnXDAnOwotKwkJCQljb3VudCsrOwotKwkJCX0K LSsJCX0KLSsJfQotKwotK291dDoKLSsJKHZvaWQpIGdzc19yZWxlYXNlX2J1ZmZlcigmY3R4LT5t aW5vciwgJnZhbHVlKTsKLSsJKHZvaWQpIGdzc19yZWxlYXNlX2J1ZmZlcigmY3R4LT5taW5vciwg JmRpc3BsYXlfdmFsdWUpOwotKwkodm9pZCkgZ3NzX3JlbGVhc2VfYnVmZmVyX3NldCgmY3R4LT5t aW5vciwgJmF0dHJzKTsKLSsJcmV0dXJuIChjdHgtPm1ham9yKTsKLSt9Ci0rCi0rCi0gLyogRXh0 cmFjdCB0aGUgY2xpZW50IGRldGFpbHMgZnJvbSBhIGdpdmVuIGNvbnRleHQuIFRoaXMgY2FuIG9u bHkgcmVsaWFibHkKLSAgKiBiZSBjYWxsZWQgb25jZSBmb3IgYSBjb250ZXh0ICovCi0gCi1AQCAt Mzg1LDYgKzQ3MSwxMiBAQCBzc2hfZ3NzYXBpX2dldGNsaWVudChHc3NjdHh0ICpjdHgsIHNzaF9n c3NhcGlfY2xpZW50ICpjbGllbnQpCi0gCX0KLSAKLSAJZ3NzX3JlbGVhc2VfYnVmZmVyKCZjdHgt Pm1pbm9yLCAmZW5hbWUpOwotKwkvKiBSZXRyaWV2ZSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3Jz LCBpZiB0aGV5IGV4aXN0ICovCi0rCWlmICgoY3R4LT5tYWpvciA9IHNzaF9nc3NhcGlfZ2V0aW5k aWNhdG9ycyhjdHgsCi0rCSAgICBjdHgtPmNsaWVudCwgY2xpZW50KSkpIHsKLSsJCXNzaF9nc3Nh cGlfZXJyb3IoY3R4KTsKLSsJCXJldHVybiAoY3R4LT5tYWpvcik7Ci0rCX0KLSAKLSAJLyogV2Ug Y2FuJ3QgY29weSB0aGlzIHN0cnVjdHVyZSwgc28gd2UganVzdCBtb3ZlIHRoZSBwb2ludGVyIHRv IGl0ICovCi0gCWNsaWVudC0+Y3JlZHMgPSBjdHgtPmNsaWVudF9jcmVkczsKLUBAIC00NDcsNiAr NTM5LDcgQEAgaW50Ci0gc3NoX2dzc2FwaV91c2Vyb2soY2hhciAqdXNlciwgc3RydWN0IHBhc3N3 ZCAqcHcsIGludCBrZXgpCi0gewotIAlPTV91aW50MzIgbG1pbjsKLSsJc2l6ZV90IGk7Ci0gCi0g CSh2b2lkKSBrZXg7IC8qIHVzZWQgaW4gcHJpdmlsZWdlIHNlcGFyYXRpb24gKi8KLSAKLUBAIC00 NjUsNiArNTU4LDE0IEBAIHNzaF9nc3NhcGlfdXNlcm9rKGNoYXIgKnVzZXIsIHN0cnVjdCBwYXNz d2QgKnB3LCBpbnQga2V4KQotIAkJCWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmdzc2FwaV9j bGllbnQuZGlzcGxheW5hbWUpOwotIAkJCWdzc19yZWxlYXNlX2J1ZmZlcigmbG1pbiwgJmdzc2Fw aV9jbGllbnQuZXhwb3J0ZWRuYW1lKTsKLSAJCQlnc3NfcmVsZWFzZV9jcmVkKCZsbWluLCAmZ3Nz YXBpX2NsaWVudC5jcmVkcyk7Ci0rCi0rCQkJaWYgKGdzc2FwaV9jbGllbnQuaW5kaWNhdG9ycyAh PSBOVUxMKSB7Ci0rCQkJCWZvcihpID0gMDsgZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzW2ldICE9 IE5VTEw7IGkrKykgewotKwkJCQkJZnJlZShnc3NhcGlfY2xpZW50LmluZGljYXRvcnNbaV0pOwot KwkJCQl9Ci0rCQkJCWZyZWUoZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzKTsKLSsJCQl9Ci0rCi0g CQkJZXhwbGljaXRfYnplcm8oJmdzc2FwaV9jbGllbnQsCi0gCQkJICAgIHNpemVvZihzc2hfZ3Nz YXBpX2NsaWVudCkpOwotIAkJCXJldHVybiAwOwotZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9z ZXJ2Y29uZi5jCi1pbmRleCBmNzg2MTVjMjguLmU1M2U4ZWEzMCAxMDA2NDQKLS0tLSBhL3NlcnZj b25mLmMKLSsrKyBiL3NlcnZjb25mLmMKLUBAIC0xNDYsNiArMTQ2LDcgQEAgaW5pdGlhbGl6ZV9z ZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotIAlvcHRpb25zLT5nc3Nfc3Ry aWN0X2FjY2VwdG9yID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19zdG9yZV9yZWtleSA9IC0xOwotIAlv cHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSBOVUxMOwotKwlvcHRpb25zLT5nc3NfaW5kaWNh dG9ycyA9IE5VTEw7Ci0gCW9wdGlvbnMtPnVzZV9rdXNlcm9rID0gLTE7Ci0gCW9wdGlvbnMtPmVu YWJsZV9rNXVzZXJzID0gLTE7Ci0gCW9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uID0g LTE7Ci1AQCAtNTkxLDcgKzU5Miw3IEBAIHR5cGVkZWYgZW51bSB7Ci0gCXNQZXJTb3VyY2VQZW5h bHRpZXMsIHNQZXJTb3VyY2VQZW5hbHR5RXhlbXB0TGlzdCwKLSAJc0NsaWVudEFsaXZlSW50ZXJ2 YWwsIHNDbGllbnRBbGl2ZUNvdW50TWF4LCBzQXV0aG9yaXplZEtleXNGaWxlLAotIAlzR3NzQXV0 aGVudGljYXRpb24sIHNHc3NDbGVhbnVwQ3JlZHMsIHNHc3NFbmFibGVrNXVzZXJzLCBzR3NzU3Ry aWN0QWNjZXB0b3IsCi0tCXNHc3NLZXlFeCwgc0dzc0tleEFsZ29yaXRobXMsIHNHc3NTdG9yZVJl a2V5LAotKwlzR3NzS2V5RXgsIHNHc3NJbmRpY2F0b3JzLCBzR3NzS2V4QWxnb3JpdGhtcywgc0dz c1N0b3JlUmVrZXksCi0gCXNBY2NlcHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWwsCi0gCXNN YXRjaCwgc1Blcm1pdE9wZW4sIHNQZXJtaXRMaXN0ZW4sIHNGb3JjZUNvbW1hbmQsIHNDaHJvb3RE aXJlY3RvcnksCi0gCXNVc2VQcml2aWxlZ2VTZXBhcmF0aW9uLCBzQWxsb3dBZ2VudEZvcndhcmRp bmcsCi1AQCAtNjg3LDYgKzY4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgewotIAl7ICJnc3NhcGlzdG9y ZWNyZWRlbnRpYWxzb25yZWtleSIsIHNHc3NTdG9yZVJla2V5LCBTU0hDRkdfR0xPQkFMIH0sCi0g CXsgImdzc2FwaWtleGFsZ29yaXRobXMiLCBzR3NzS2V4QWxnb3JpdGhtcywgU1NIQ0ZHX0dMT0JB TCB9LAotIAl7ICJnc3NhcGllbmFibGVrNXVzZXJzIiwgc0dzc0VuYWJsZWs1dXNlcnMsIFNTSENG R19BTEwgfSwKLSsJeyAiZ3NzYXBpaW5kaWNhdG9ycyIsIHNHc3NJbmRpY2F0b3JzLCBTU0hDRkdf QUxMIH0sCi0gI2Vsc2UKLSAJeyAiZ3NzYXBpYXV0aGVudGljYXRpb24iLCBzVW5zdXBwb3J0ZWQs IFNTSENGR19BTEwgfSwKLSAJeyAiZ3NzYXBpY2xlYW51cGNyZWRlbnRpYWxzIiwgc1Vuc3VwcG9y dGVkLCBTU0hDRkdfR0xPQkFMIH0sCi1AQCAtNjk2LDYgKzY5OCw3IEBAIHN0YXRpYyBzdHJ1Y3Qg ewotIAl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNVbnN1cHBvcnRlZCwgU1NI Q0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlrZXhhbGdvcml0aG1zIiwgc1Vuc3VwcG9ydGVkLCBT U0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWVuYWJsZWs1dXNlcnMiLCBzVW5zdXBwb3J0ZWQs IFNTSENGR19BTEwgfSwKLSsJeyAiZ3NzYXBpaW5kaWNhdG9ycyIsIHNVbnN1cHBvcnRlZCwgU1NI Q0ZHX0FMTCB9LAotICNlbmRpZgotIAl7ICJnc3N1c2VzZXNzaW9uY2NhY2hlIiwgc1Vuc3VwcG9y dGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXVzZXNlc3Npb25jcmVkY2FjaGUiLCBz VW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLUBAIC0xNzIyLDYgKzE3MjUsMTUgQEAgcHJv Y2Vzc19zZXJ2ZXJfY29uZmlnX2xpbmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hh ciAqbGluZSwKLSAJCQlvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSB4c3RyZHVwKGFyZyk7 Ci0gCQlicmVhazsKLSAKLSsJY2FzZSBzR3NzSW5kaWNhdG9yczoKLSsJCWFyZyA9IGFyZ3ZfbmV4 dCgmYWMsICZhdik7Ci0rCQlpZiAoIWFyZyB8fCAqYXJnID09ICdcMCcpCi0rCQkJZmF0YWwoIiVz IGxpbmUgJWQ6ICVzIG1pc3NpbmcgYXJndW1lbnQuIiwKLSsJCQkgICAgZmlsZW5hbWUsIGxpbmVu dW0sIGtleXdvcmQpOwotKwkJaWYgKG9wdGlvbnMtPmdzc19pbmRpY2F0b3JzID09IE5VTEwpCi0r CQkJb3B0aW9ucy0+Z3NzX2luZGljYXRvcnMgPSB4c3RyZHVwKGFyZyk7Ci0rCQlicmVhazsKLSsK LSAJY2FzZSBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbjoKLSAJCWludHB0ciA9ICZvcHRpb25zLT5w YXNzd29yZF9hdXRoZW50aWNhdGlvbjsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLUBAIC0zMzQ0LDYg KzMzNTYsNyBAQCBkdW1wX2NvbmZpZyhTZXJ2ZXJPcHRpb25zICpvKQotIAlkdW1wX2NmZ19mbXRp bnQoc0dzc1N0cmljdEFjY2VwdG9yLCBvLT5nc3Nfc3RyaWN0X2FjY2VwdG9yKTsKLSAJZHVtcF9j ZmdfZm10aW50KHNHc3NTdG9yZVJla2V5LCBvLT5nc3Nfc3RvcmVfcmVrZXkpOwotIAlkdW1wX2Nm Z19zdHJpbmcoc0dzc0tleEFsZ29yaXRobXMsIG8tPmdzc19rZXhfYWxnb3JpdGhtcyk7Ci0rCWR1 bXBfY2ZnX3N0cmluZyhzR3NzSW5kaWNhdG9ycywgby0+Z3NzX2luZGljYXRvcnMpOwotICNlbmRp ZgotIAlkdW1wX2NmZ19mbXRpbnQoc1Bhc3N3b3JkQXV0aGVudGljYXRpb24sIG8tPnBhc3N3b3Jk X2F1dGhlbnRpY2F0aW9uKTsKLSAJZHVtcF9jZmdfZm10aW50KHNLYmRJbnRlcmFjdGl2ZUF1dGhl bnRpY2F0aW9uLAotZGlmZiAtLWdpdCBhL3NlcnZjb25mLmggYi9zZXJ2Y29uZi5oCi1pbmRleCBj MDhjZjZhN2EuLmM3Y2VjNWVjZSAxMDA2NDQKLS0tLSBhL3NlcnZjb25mLmgKLSsrKyBiL3NlcnZj b25mLmgKLUBAIC0xNzksNiArMTc5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewotIAljaGFyICAgKiph bGxvd19ncm91cHM7Ci0gCXVfaW50IG51bV9kZW55X2dyb3VwczsKLSAJY2hhciAgICoqZGVueV9n cm91cHM7Ci0rCWNoYXIgICAqZ3NzX2luZGljYXRvcnM7Ci0gCi0gCXVfaW50IG51bV9zdWJzeXN0 ZW1zOwotIAljaGFyICAgKipzdWJzeXN0ZW1fbmFtZTsKLUBAIC0zMDgsNiArMzA5LDcgQEAgVEFJ TFFfSEVBRChpbmNsdWRlX2xpc3QsIGluY2x1ZGVfaXRlbSk7Ci0gCQlNX0NQX1NUUk9QVChyb3V0 aW5nX2RvbWFpbik7IFwKLSAJCU1fQ1BfU1RST1BUKHBlcm1pdF91c2VyX2Vudl9hbGxvd2xpc3Qp OyBcCi0gCQlNX0NQX1NUUk9QVChwYW1fc2VydmljZV9uYW1lKTsgXAotKwkJTV9DUF9TVFJPUFQo Z3NzX2luZGljYXRvcnMpOyBcCi0gCQlNX0NQX1NUUkFSUkFZT1BUKGF1dGhvcml6ZWRfa2V5c19m aWxlcywgbnVtX2F1dGhrZXlzX2ZpbGVzKTsgXAotIAkJTV9DUF9TVFJBUlJBWU9QVChhbGxvd191 c2VycywgbnVtX2FsbG93X3VzZXJzKTsgXAotIAkJTV9DUF9TVFJBUlJBWU9QVChkZW55X3VzZXJz LCBudW1fZGVueV91c2Vycyk7IFwKLWRpZmYgLS1naXQgYS9zc2gtZ3NzLmggYi9zc2gtZ3NzLmgK LWluZGV4IDMyOWRjOWRhMC4uMTUwNjcxOWE5IDEwMDY0NAotLS0tIGEvc3NoLWdzcy5oCi0rKysg Yi9zc2gtZ3NzLmgKLUBAIC0zNCw2ICszNCwxMiBAQAotICNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBp Lmg+Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIEhBVkVfR1NTQVBJX0VYVF9ICi0rI2luY2x1ZGUgPGdz c2FwaV9leHQuaD4KLSsjZWxpZiBkZWZpbmVkKEhBVkVfR1NTQVBJX0dTU0FQSV9FWFRfSCkKLSsj aW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9leHQuaD4KLSsjZW5kaWYKLSsKLSAjaWZkZWYgS1JCNQot ICMgaWZuZGVmIEhFSU1EQUwKLSAjICBpZmRlZiBIQVZFX0dTU0FQSV9HRU5FUklDX0gKLUBAIC0x MTIsNiArMTE4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgewotIAlzc2hfZ3NzYXBpX2NjYWNoZSBzdG9y ZTsKLSAJaW50IHVzZWQ7Ci0gCWludCB1cGRhdGVkOwotKwljaGFyICoqaW5kaWNhdG9yczsgLyog YXV0aCBpbmRpY2F0b3JzICovCi0gfSBzc2hfZ3NzYXBpX2NsaWVudDsKLSAKLSB0eXBlZGVmIHN0 cnVjdCBzc2hfZ3NzYXBpX21lY2hfc3RydWN0IHsKLWRpZmYgLS1naXQgYS9zc2hkX2NvbmZpZy41 IGIvc3NoZF9jb25maWcuNQotaW5kZXggYzE3MmQ1YWFiLi42NzZkNmQ0ZDIgMTAwNjQ0Ci0tLS0g YS9zc2hkX2NvbmZpZy41Ci0rKysgYi9zc2hkX2NvbmZpZy41Ci1AQCAtNzg1LDYgKzc4NSw1MCBA QCBnc3MtbmlzdHAyNTYtc2hhMjU2LQotIGdzcy1jdXJ2ZTI1NTE5LXNoYTI1Ni0KLSAuRWQKLSBU aGlzIG9wdGlvbiBvbmx5IGFwcGxpZXMgdG8gY29ubmVjdGlvbnMgdXNpbmcgR1NTQVBJLgotKy5J dCBDbSBHU1NBUElJbmRpY2F0b3JzCi0rU3BlY2lmaWVzIHdoZXRoZXIgdG8gYWNjZXB0IG9yIGRl bnkgR1NTQVBJIGF1dGhlbnRpY2F0ZWQgYWNjZXNzIGlmIEtlcmJlcm9zCi0rbWVjaGFuaXNtIGlz IHVzZWQgYW5kIEtlcmJlcm9zIHRpY2tldCBjb250YWlucyBhIHBhcnRpY3VsYXIgc2V0IG9mCi0r YXV0aGVudGljYXRpb24gaW5kaWNhdG9ycy4gVGhlIHZhbHVlcyBjYW4gYmUgc3BlY2lmaWVkIGFz IGEgY29tbWEtc2VwYXJhdGVkIGxpc3QKLSsuQ20gWyFdbmFtZTEsWyFdbmFtZTIsLi4uIC4KLStX aGVuIGluZGljYXRvcidzIG5hbWUgaXMgcHJlZml4ZWQgd2l0aCAhLCB0aGUgYXV0aGVudGljYXRp b24gaW5kaWNhdG9yICduYW1lJwotK3dpbGwgZGVueSBhY2Nlc3MgdG8gdGhlIHN5c3RlbS4gT3Ro ZXJ3aXNlLCBvbmUgb2Ygbm9uLW5lZ2F0ZWQgYXV0aGVudGljYXRpb24KLStpbmRpY2F0b3JzIG11 c3QgYmUgcHJlc2VudCBpbiB0aGUgS2VyYmVyb3MgdGlja2V0IHRvIGFsbG93IGFjY2Vzcy4gSWYK LSsuQ20gR1NTQVBJSW5kaWNhdG9ycwotK2lzIGRlZmluZWQsIGEgS2VyYmVyb3MgdGlja2V0IHRo YXQgaGFzIGluZGljYXRvcnMgYnV0IGRvZXMgbm90IG1hdGNoIHRoZQotK3BvbGljeSB3aWxsIGdl dCBkZW5pYWwuIElmIGF0IGxlYXN0IG9uZSBpbmRpY2F0b3IgaXMgY29uZmlndXJlZCwgd2hldGhl ciBmb3IKLSthY2Nlc3Mgb3IgZGVuaWFsLCB0aWNrZXRzIHdpdGhvdXQgYXV0aGVudGljYXRpb24g aW5kaWNhdG9ycyB3aWxsIGJlIGV4cGxpY2l0bHkKLStyZWplY3RlZC4KLSsuUHAKLStCeSBkZWZh dWx0IHN5c3RlbXMgdXNpbmcgTUlUIEtlcmJlcm9zIDEuMTcgb3IgbGF0ZXIgd2lsbCBub3QgYXNz aWduIGFueQotK2luZGljYXRvcnMuIFNQQUtFIGFuZCBQS0lOSVQgbWV0aG9kcyBhZGQgYXV0aGVu dGljYXRpb24gaW5kaWNhdG9ycwotK3RvIGFsbCBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9ucy4g VGhlIFNQQUtFIHByZS1hdXRoZW50aWNhdGlvbiBtZXRob2QgaXMKLStwcmVmZXJyZWQgb3ZlciBh biBlbmNyeXB0ZWQgdGltZXN0YW1wIHByZS1hdXRoZW50aWNhdGlvbiB3aGVuIHBhc3N3b3JkcyB1 c2VkIHRvCi0rYXV0aGVudGljYXRlIHVzZXIgcHJpbmNpcGFscy4gS2VyYmVyb3MgS0RDcyBidWls dCB3aXRoIEhlaW1kYWwgS2VyYmVyb3MKLSsoaW5jbHVkaW5nIFNhbWJhIEFEIERDIGJ1aWx0IHdp dGggSGVpbWRhbCkgZG8gbm90IGFkZCBhdXRoZW50aWNhdGlvbgotK2luZGljYXRvcnMuIEhvd2V2 ZXIsIE9wZW5TU0ggYnVpbHQgYWdhaW5zdCBIZWltZGFsIEtlcmJlcm9zIGxpYnJhcnkgaXMgYWJs ZSB0bwotK2lucXVpcmUgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycyBhbmQgdGh1cyBjYW4gYmUg dXNlZCB0byBjaGVjayBmb3IgdGhlaXIgcHJlc2VuY2UuCi0rLlBwCi0rSW5kaWNhdG9yIG5hbWUg aXMgY2FzZS1zZW5zaXRpdmUgYW5kIGRlcGVuZHMgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgYQot K3BhcnRpY3VsYXIgS2VyYmVyb3MgZGVwbG95bWVudC4gSW5kaWNhdG9ycyBhdmFpbGFibGUgaW4g TUlUIEtlcmJlcm9zIGFuZAotK0ZyZWVJUEEgZW52aXJvbm1lbnRzOgotKy5QcAotKy5CbCAtdGFn IC13aWR0aCBYWFhYIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0Ci0rLkl0IENtIGhhcmRlbmVkCi0r U1BBS0Ugb3IgZW5jcnlwdGVkIHRpbWVzdGFtcCBwcmUtYXV0aGVudGljYXRpb24gbWVjaGFuaXNt cyBpbiBNSVQgS2VyYmVyb3MgYW5kIEZyZWVJUEEKLSsuSXQgQ20gcGtpbml0Ci0rc21hcnRjYXJk IG9yIFBLQ1MxMSB0b2tlbi1iYXNlZCBwcmUtYXV0aGVudGljYXRpb24gaW4gTUlUIEtlcmJlcm9z IGFuZCBGcmVlSVBBCi0rLkl0IENtIHJhZGl1cwotK3ByZS1hdXRoZW50aWNhdGlvbiBiYXNlZCBv biBhIFJBRElVUyBzZXJ2ZXIgaW4gTUlUIEtlcmJlcm9zIGFuZCBGcmVlSVBBCi0rLkl0IENtIG90 cAotK1RPVFAvSE9UUC1iYXNlZCB0d28tZmFjdG9yIHByZS1hdXRoZW50aWNhdGlvbiBpbiBGcmVl SVBBCi0rLkl0IENtIGlkcAotK09BdXRoMi1iYXNlZCBwcmUtYXV0aGVudGljYXRpb24gaW4gRnJl ZUlQQSB1c2luZyBhbiBleHRlcm5hbCBpZGVudGl0eSBwcm92aWRlcgotK2FuZCBkZXZpY2UgYXV0 aG9yaXphdGlvbiBncmFudCBmbG93Ci0rLkl0IENtIHBhc3NrZXkKLStGSURPMi1iYXNlZCBwcmUt YXV0aGVudGljYXRpb24gaW4gRnJlZUlQQSwgdXNpbmcgRklETzIgVVNCIGFuZCBORkMgdG9rZW5z Ci0rLkVsCi0rLlBwCi0rVGhlIGRlZmF1bHQgaXMgdG8gbm90IHVzZSBHU1NBUEkgYXV0aGVudGlj YXRpb24gaW5kaWNhdG9ycyBmb3IgYWNjZXNzIGRlY2lzaW9ucy4KLSAuSXQgQ20gSG9zdGJhc2Vk QWNjZXB0ZWRBbGdvcml0aG1zCi0gVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lkZSBi eQotIC5YciBjcnlwdG8tcG9saWNpZXMgNyAuCi0tLSAKLTIuNTIuMAotCgpkaWZmIC0tZ2l0IGEv MDA0OS1OSVNULWN1cnZlcy1oeWJyaWQtS0VYLWltcGxlbWVudGF0aW9uLnBhdGNoIGIvMDA0OS1O SVNULWN1cnZlcy1oeWJyaWQtS0VYLWltcGxlbWVudGF0aW9uLnBhdGNoCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBkMGZiODk1Li4wMDAwMDAwCi0tLSBhLzAwNDktTklTVC1jdXJ2ZXMt aHlicmlkLUtFWC1pbXBsZW1lbnRhdGlvbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMDIg KzAsMCBAQAotRnJvbSAyYWEyMTMyMDM4Y2RhYWI0NGE5MTc3NDUzYWZlNTBhZTQ0YTdmYTAwIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRA Z21haWwuY29tPgotRGF0ZTogTW9uLCAyMCBPY3QgMjAyNSAxNjowNzozMSArMDIwMAotU3ViamVj dDogW1BBVENIIDQ5LzUzXSBOSVNUIGN1cnZlcyBoeWJyaWQgS0VYIGltcGxlbWVudGF0aW9uCi0K LS0tLQotIGNvbXBhdC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIzICstCi0gY29tcGF0 LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwotIGNyeXB0b19hcGkuaCAgICAgICAg ICAgICAgICAgICAgIHwgICA0ICsKLSBrZXgtbmFtZXMuYyAgICAgICAgICAgICAgICAgICAgICB8 ICA5NSArKysrLQotIGtleC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKLSBr ZXguaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxOSArCi0ga2V4Z2VuLmMgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgNTYgKystCi0ga2V4bWxrZW03Njh4MjU1MTkuYyAgICAgICAg ICAgICAgfCA2NzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQotIG1vbml0b3IuYyAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKLSBteXByb3Bvc2FsLmggICAgICAgICAgICAg ICAgICAgICB8ICAgNCArCi0gcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMgfCAgIDQg KwotIHNzaC1rZXlzY2FuLmMgICAgICAgICAgICAgICAgICAgIHwgICAyICsKLSBzc2hfYXBpLmMg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArCi0gc3NoY29ubmVjdDIuYyAgICAgICAgICAg ICAgICAgICAgfCAgIDIgKwotIHNzaGQtYXV0aC5jICAgICAgICAgICAgICAgICAgICAgIHwgICAy ICsKLSAxNSBmaWxlcyBjaGFuZ2VkLCA4NTYgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0p Ci0KLWRpZmYgLS1naXQgYS9jb21wYXQuYyBiL2NvbXBhdC5jCi1pbmRleCA0ZTYxMWRjMzkuLmI1 ZjRjYzY4NSAxMDA2NDQKLS0tLSBhL2NvbXBhdC5jCi0rKysgYi9jb21wYXQuYwotQEAgLTM2LDYg KzM2LDcgQEAKLSAjaW5jbHVkZSAiY29tcGF0LmgiCi0gI2luY2x1ZGUgImxvZy5oIgotICNpbmNs dWRlICJtYXRjaC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAKLSAvKiBkZXRlcm1p bmUgYnVnIGZsYWdzIGZyb20gU1NIIHByb3RvY29sIGJhbm5lciAqLwotIHZvaWQKLUBAIC0xNDgs OCArMTQ5LDkgQEAgY2hhciAqCi0gY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICpzc2gs IGNvbnN0IGNoYXIgKnApCi0gewotIAljaGFyICpjcCA9IE5VTEwsICpjcDIgPSBOVUxMOwotKwlp bnQgbWxrZW1fYXZhaWxhYmxlID0gaXNfbWxrZW03NjhfYXZhaWxhYmxlKCk7Ci0gCi0tCWlmICgo c3NoLT5jb21wYXQgJiAoU1NIX0JVR19DVVJWRTI1NTE5UEFEfFNTSF9PTERfREhHRVgpKSA9PSAw KQotKwlpZiAoKHNzaC0+Y29tcGF0ICYgKFNTSF9CVUdfQ1VSVkUyNTUxOVBBRHxTU0hfT0xEX0RI R0VYKSkgPT0gMCAmJiBtbGtlbV9hdmFpbGFibGUgPT0gMikKLSAJCXJldHVybiB4c3RyZHVwKHAp OwotIAlkZWJ1ZzJfZigib3JpZ2luYWwgS0VYIHByb3Bvc2FsOiAlcyIsIHApOwotIAlpZiAoKHNz aC0+Y29tcGF0ICYgU1NIX0JVR19DVVJWRTI1NTE5UEFEKSAhPSAwKQotQEAgLTE2NCw2ICsxNjYs MjUgQEAgY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICpzc2gsIGNvbnN0IGNoYXIgKnAp Ci0gCQlmcmVlKGNwKTsKLSAJCWNwID0gY3AyOwotIAl9Ci0rCWlmIChtbGtlbV9hdmFpbGFibGUg PT0gMikKLSsJCXJldHVybiBjcCA/IGNwIDogeHN0cmR1cChwKTsKLSsJaWYgKG1sa2VtX2F2YWls YWJsZSA9PSAxICYmIEZJUFNfbW9kZSgpKSB7Ci0rCQlpZiAoKGNwMiA9IG1hdGNoX2ZpbHRlcl9k ZW55bGlzdChjcCA/IGNwIDogcCwKLSsJCSAgICAibWxrZW03Njh4MjU1MTktc2hhMjU2IikpID09 IE5VTEwpCi0rCQkJZmF0YWwoIm1hdGNoX2ZpbHRlcl9kZW55bGlzdCBmYWlsZWQiKTsKLSsJCWZy ZWUoY3ApOwotKwkJY3AgPSBjcDI7Ci0rCX0KLSsJaWYgKG1sa2VtX2F2YWlsYWJsZSA9PSAwKSB7 Ci0rCQlpZiAoKGNwMiA9IG1hdGNoX2ZpbHRlcl9kZW55bGlzdChjcCA/IGNwIDogcCwKLSsJCSAg ICAibWxrZW03Njh4MjU1MTktc2hhMjU2LCIKLSsJCSAgICAibWxrZW03NjhuaXN0cDI1Ni1zaGEy NTYsIgotKwkJICAgICJtbGtlbTEwMjRuaXN0cDM4NC1zaGEzODQiKSkgPT0gTlVMTCkKLSsJCQlm YXRhbCgibWF0Y2hfZmlsdGVyX2RlbnlsaXN0IGZhaWxlZCIpOwotKwkJZnJlZShjcCk7Ci0rCQlj cCA9IGNwMjsKLSsJfQotKwotIAlpZiAoY3AgPT0gTlVMTCB8fCAqY3AgPT0gJ1wwJykKLSAJCWZh dGFsKCJObyBzdXBwb3J0ZWQga2V5IGV4Y2hhbmdlIGFsZ29yaXRobXMgZm91bmQiKTsKLSAJZGVi dWcyX2YoImNvbXBhdCBLRVggcHJvcG9zYWw6ICVzIiwgY3ApOwotZGlmZiAtLWdpdCBhL2NvbXBh dC5oIGIvY29tcGF0LmgKLWluZGV4IDJlNmRiNWJmOS4uYjc4ZTU1YjY5IDEwMDY0NAotLS0tIGEv Y29tcGF0LmgKLSsrKyBiL2NvbXBhdC5oCi1AQCAtNjIsNCArNjIsNSBAQCBzdHJ1Y3Qgc3NoOwot IAotIHZvaWQgICAgY29tcGF0X2Jhbm5lcihzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7Ci0g Y2hhcgkqY29tcGF0X2tleF9wcm9wb3NhbChzdHJ1Y3Qgc3NoICosIGNvbnN0IGNoYXIgKik7Ci0r aW50IGlzX21sa2VtNzY4X2F2YWlsYWJsZSh2b2lkKTsKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9j cnlwdG9fYXBpLmggYi9jcnlwdG9fYXBpLmgKLWluZGV4IDY5M2I2N2JiYy4uZWMzZDJmMjc3IDEw MDY0NAotLS0tIGEvY3J5cHRvX2FwaS5oCi0rKysgYi9jcnlwdG9fYXBpLmgKLUBAIC01Niw0ICs1 Niw4IEBAIGludAljcnlwdG9fa2VtX3NudHJ1cDc2MV9rZXlwYWlyKHVuc2lnbmVkIGNoYXIgKnBr LCB1bnNpZ25lZCBjaGFyICpzayk7Ci0gI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhF UlRFWFRCWVRFUyAxMDg4Ci0gI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTIDMyCi0g Ci0rI2RlZmluZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUyAxNTY4Ci0rI2Rl ZmluZSBjcnlwdG9fa2VtX21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFUyAzMTY4Ci0rI2RlZmluZSBj cnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVMgMTU2OAotKwotICNlbmRpZiAvKiBj cnlwdG9fYXBpX2ggKi8KLWRpZmYgLS1naXQgYS9rZXgtbmFtZXMuYyBiL2tleC1uYW1lcy5jCi1p bmRleCA5Yzk2ZTVjYjAuLmQ2ZTg5NzMwMSAxMDA2NDQKLS0tLSBhL2tleC1uYW1lcy5jCi0rKysg Yi9rZXgtbmFtZXMuYwotQEAgLTM1LDYgKzM1LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlw dG8uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2VuZGlmCi0gCi0gI2luY2x1ZGUgImtl eC5oIgotQEAgLTkxLDYgKzkyLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGtleGFs Z3NbXSA9IHsKLSAjaWZkZWYgVVNFX01MS0VNNzY4WDI1NTE5Ci0gCXsgS0VYX01MS0VNNzY4WDI1 NTE5X1NIQTI1NiwgS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTYsIDAsCi0gCSAgICBTU0hf RElHRVNUX1NIQTI1NiwgS0VYX0lTX1BRIH0sCi0rCXsgS0VYX01MS0VNNzY4TklTVFAyNTZfU0hB MjU2LCBLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2LCAwLAotKwkgICAgU1NIX0RJR0VT VF9TSEEyNTYsIEtFWF9JU19QUSB9LAotKwl7IEtFWF9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQs IEtFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0LCAwLAotKwkgICAgU1NIX0RJR0VTVF9T SEEzODQsIEtFWF9JU19QUSB9LAotICNlbmRpZgotICNlbmRpZiAvKiBIQVZFX0VWUF9TSEEyNTYg fHwgIVdJVEhfT1BFTlNTTCAqLwotIAl7IE5VTEwsIDAsIC0xLCAtMSwgMCB9LAotQEAgLTEwOSwx NCArMTE0LDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2V4YWxnIGdzc19rZXhhbGdzW10gPSB7 Ci0gCXsgTlVMTCwgMCwgLTEsIC0xLCAwfSwKLSB9OwotIAotLXN0YXRpYyBpbnQgaXNfbWxrZW03 NjhfYXZhaWxhYmxlKCkKLSsvKgotKyAqIDAgLSB1bmF2YWlsYWJsZQotKyAqIDEgLSBhdmFpbGFi bGUgaW4gbm9uLUZJUFMgbW9kZQotKyAqIDIgLSBhdmFpbGFibGUgYWx3YXlzCi0rICovCi0raW50 IGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpCi0gewotIAlzdGF0aWMgaW50IGlzX2ZldGNoZWQgPSAt MTsKLSAKLSAJaWYgKGlzX2ZldGNoZWQgPT0gLTEpIHsKLS0JCUVWUF9LRU0gKm1sa2VtNzY4ID0g RVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKLS0JCWlzX2ZldGNoZWQgPSBt bGtlbTc2OCAhPSBOVUxMID8gMSA6IDA7Ci0rCQlFVlBfS0VNICptbGtlbTc2OCA9IE5VTEw7Ci0r Ci0rCQlFUlJfc2V0X21hcmsoKTsKLSsJCW1sa2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAi bWxrZW03NjgiLCBOVUxMKTsKLSsJCWlzX2ZldGNoZWQgPSAobWxrZW03NjggPT0gTlVMTCkgPyAw IDogMjsKLSsJCWlmIChpc19mZXRjaGVkID09IDAgJiYgRklQU19tb2RlKCkgPT0gMSkgewotKwkJ ICAgIG1sa2VtNzY4ID0gRVZQX0tFTV9mZXRjaChOVUxMLCAibWxrZW03NjgiLCAicHJvdmlkZXI9 ZGVmYXVsdCwtZmlwcyIpOwotKwkJICAgIGlzX2ZldGNoZWQgPSAobWxrZW03NjggPT0gTlVMTCkg PyAwIDogMTsKLSsJCX0KLSAJCUVWUF9LRU1fZnJlZShtbGtlbTc2OCk7Ci0rCQlFUlJfcG9wX3Rv X21hcmsoKTsKLSAJfQotIAotIAlyZXR1cm4gaXNfZmV0Y2hlZDsKLUBAIC0xMjgsMTEgKzE0Niwz MiBAQCBrZXhfYWxnX2xpc3RfaW50ZXJuYWwoY2hhciBzZXAsIGNvbnN0IHN0cnVjdCBrZXhhbGcg KmFsZ3MpCi0gCWNoYXIgKnJldCA9IE5VTEw7Ci0gCWNvbnN0IHN0cnVjdCBrZXhhbGcgKms7Ci0g CWNoYXIgc2VwX3N0clsyXSA9IHtzZXAsICdcMCd9OwotKwlpbnQgeDI1NTE5bWxrZW1fYXZhaWxh YmxlID0gMCwgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDA7Ci0gCi0tCWZvciAoayA9IGtleGFsZ3M7 IGstPm5hbWUgIT0gTlVMTDsgaysrKSB7Ci0tCQlpZiAoc3RyY21wKGstPm5hbWUsIEtFWF9NTEtF TTc2OFgyNTUxOV9TSEEyNTYpID09IDAKLS0JCQkmJiAhaXNfbWxrZW03NjhfYXZhaWxhYmxlKCkp Ci0rCS8qCi0rCSAqIEZJUFMgcHJvdmlkZXIgY2FuIHByb3ZpZGUgTUwtS0VNcyBhbmQgdGhlbiBh bGwgaHlicmlkcyBhcmUgYXZhaWxhYmxlCi0rCSAqIE90aGVyd2lzZSBvbmx5IE5JU1QgaHlicmlk cyBhcmUgYXZhaWxhYmxlCi0rCSAqICovCi0rCWlmIChGSVBTX21vZGUoKSkgewotKwkgICAgaWYg KGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDIpIHsKLSsJICAgICAgICB4MjU1MTltbGtlbV9h dmFpbGFibGUgPSAxOwotKwkgICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOwotKwkgICAg fSBlbHNlIGlmIChpc19tbGtlbTc2OF9hdmFpbGFibGUoKSA9PSAxKSB7Ci0rCSAgICAgICAgbmlz dG1sa2VtX2F2YWlsYWJsZSA9IDE7Ci0rCSAgICB9Ci0rCX0gZWxzZSB7Ci0rCSAgICBpZiAoaXNf bWxrZW03NjhfYXZhaWxhYmxlKCkgPiAwKSB7Ci0rCSAgICAgICAgeDI1NTE5bWxrZW1fYXZhaWxh YmxlID0gMTsKLSsJICAgICAgICBuaXN0bWxrZW1fYXZhaWxhYmxlID0gMTsKLSsJICAgIH0KLSsJ fQotKwotKwlmb3IgKGsgPSBhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgewotKwkJaWYgKCAg KHN0cmNtcChrLT5uYW1lLCBLRVhfTUxLRU03NjhYMjU1MTlfU0hBMjU2KSA9PSAwICAgICYmIHgy NTUxOW1sa2VtX2F2YWlsYWJsZSA9PSAwKQotKwkJICAgfHwgKHN0cmNtcChrLT5uYW1lLCBLRVhf TUxLRU03NjhOSVNUUDI1Nl9TSEEyNTYpID09IDAgICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0g MCkKLSsJCSAgIHx8IChzdHJjbXAoay0+bmFtZSwgS0VYX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4 NCkgPT0gMCAmJiBuaXN0bWxrZW1fYXZhaWxhYmxlID09IDApKQotIAkJCWNvbnRpbnVlOwotKwot IAkJeGV4dGVuZGYoJnJldCwgc2VwX3N0ciwgIiVzIiwgay0+bmFtZSk7Ci0gCX0KLSAKLUBAIC0x NTUsMTAgKzE5NCwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtleGFsZyAqCi0ga2V4X2FsZ19i eV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCi0gewotIAljb25zdCBzdHJ1Y3Qga2V4YWxnICprOwot KwlpbnQgeDI1NTE5bWxrZW1fYXZhaWxhYmxlID0gMCwgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDA7 Ci0gCi0tCWlmIChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMAot LQkJJiYgIWlzX21sa2VtNzY4X2F2YWlsYWJsZSgpKQotLQlyZXR1cm4gTlVMTDsKLSsJLyoKLSsJ ICogRklQUyBwcm92aWRlciBjYW4gcHJvdmlkZSBNTC1LRU1zIGFuZCB0aGVuIGFsbCBoeWJyaWRz IGFyZSBhdmFpbGFibGUKLSsJICogT3RoZXJ3aXNlIG9ubHkgTklTVCBoeWJyaWRzIGFyZSBhdmFp bGFibGUKLSsJICogKi8KLSsJaWYgKEZJUFNfbW9kZSgpKSB7Ci0rCSAgICBpZiAoaXNfbWxrZW03 NjhfYXZhaWxhYmxlKCkgPT0gMikgewotKwkgICAgICAgIHgyNTUxOW1sa2VtX2F2YWlsYWJsZSA9 IDE7Ci0rCSAgICAgICAgbmlzdG1sa2VtX2F2YWlsYWJsZSA9IDE7Ci0rCSAgICB9IGVsc2UgaWYg KGlzX21sa2VtNzY4X2F2YWlsYWJsZSgpID09IDEpIHsKLSsJICAgICAgICBuaXN0bWxrZW1fYXZh aWxhYmxlID0gMTsKLSsJICAgIH0KLSsJfSBlbHNlIHsKLSsJICAgIGlmIChpc19tbGtlbTc2OF9h dmFpbGFibGUoKSA+IDApIHsKLSsJICAgICAgICB4MjU1MTltbGtlbV9hdmFpbGFibGUgPSAxOwot KwkgICAgICAgIG5pc3RtbGtlbV9hdmFpbGFibGUgPSAxOwotKwkgICAgfQotKwl9Ci0rCi0rCWlm ICggIChzdHJjbXAobmFtZSwgS0VYX01MS0VNNzY4WDI1NTE5X1NIQTI1NikgPT0gMCAgICAmJiB4 MjU1MTltbGtlbV9hdmFpbGFibGUgPT0gMCkKLSsJICAgfHwgKHN0cmNtcChuYW1lLCBLRVhfTUxL RU03NjhOSVNUUDI1Nl9TSEEyNTYpID09IDAgICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkK LSsJICAgfHwgKHN0cmNtcChuYW1lLCBLRVhfTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0KSA9PSAw ICYmIG5pc3RtbGtlbV9hdmFpbGFibGUgPT0gMCkpCi0rCSAgIHJldHVybiBOVUxMOwotIAotIAlm b3IgKGsgPSBrZXhhbGdzOyBrLT5uYW1lICE9IE5VTEw7IGsrKykgewotIAkJaWYgKHN0cmNtcChr LT5uYW1lLCBuYW1lKSA9PSAwKQotQEAgLTIzMCw4ICsyODksMTYgQEAga2V4X25hbWVzX3ZhbGlk KGNvbnN0IGNoYXIgKm5hbWVzKQotIAlmb3IgKChwID0gc3Ryc2VwKCZjcCwgIiwiKSk7IHAgJiYg KnAgIT0gJ1wwJzsKLSAJICAgIChwID0gc3Ryc2VwKCZjcCwgIiwiKSkpIHsKLSAJCWlmIChrZXhf YWxnX2J5X25hbWUocCkgPT0gTlVMTCkgewotLQkJCWlmIChGSVBTX21vZGUoKSkKLS0JCQkJZXJy b3IoIlwiJS4xMDBzXCIgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIiwgcCk7Ci0rCQkJaWYg KEZJUFNfbW9kZSgpKSB7Ci0rCQkJCWlmICgoc3RyY21wKHAsIEtFWF9NTEtFTTc2OFgyNTUxOV9T SEEyNTYpID09IDApCi0rCQkJCSAgICB8fCAoc3RyY21wKHAsIEtFWF9NTEtFTTc2OE5JU1RQMjU2 X1NIQTI1NikgPT0gMCkKLSsJCQkJICAgIHx8IChzdHJjbXAocCwgS0VYX01MS0VNMTAyNE5JU1RQ Mzg0X1NIQTM4NCkgPT0gMCkpIHsKLSsJCQkJCWRlYnVnKCJcIiUuMTAwc1wiIGlzIG5vdCBhbGxv d2VkIGluIEZJUFMgbW9kZSIsIHApOwotKwkJCQkJY29udGludWU7Ci0rCQkJCX0KLSsJCQkJZWxz ZQotKwkJCQkJZXJyb3IoIlwiJS4xMDBzXCIgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIiwg cCk7Ci0rCQkJfQotIAkJCWVsc2UKLSAJCQkJZXJyb3IoIlVuc3VwcG9ydGVkIEtFWCBhbGdvcml0 aG0gXCIlLjEwMHNcIiIsIHApOwotIAkJCWZyZWUocyk7Ci1kaWZmIC0tZ2l0IGEva2V4LmMgYi9r ZXguYwotaW5kZXggNTZjODAzOTVjLi43ZGQxNmJhMmIgMTAwNjQ0Ci0tLS0gYS9rZXguYwotKysr IGIva2V4LmMKLUBAIC03NTEsNiArNzUxLDcgQEAga2V4X2ZyZWUoc3RydWN0IGtleCAqa2V4KQot ICNpZmRlZiBPUEVOU1NMX0hBU19FQ0MKLSAJRUNfS0VZX2ZyZWUoa2V4LT5lY19jbGllbnRfa2V5 KTsKLSAjZW5kaWYgLyogT1BFTlNTTF9IQVNfRUNDICovCi0rCUVWUF9QS0VZX2ZyZWUoa2V4LT5l Y19oeWJyaWRfY2xpZW50X2tleSk7Ci0gI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLwotIAlmb3Ig KG1vZGUgPSAwOyBtb2RlIDwgTU9ERV9NQVg7IG1vZGUrKykgewotIAkJa2V4X2ZyZWVfbmV3a2V5 cyhrZXgtPm5ld2tleXNbbW9kZV0pOwotZGlmZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKLWluZGV4 IDZkYWFmYjE1OS4uMzU0ZjMxMmU4IDEwMDY0NAotLS0tIGEva2V4LmgKLSsrKyBiL2tleC5oCi1A QCAtNzIsNiArNzIsOCBAQAotICNkZWZpbmUJS0VYX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTIJInNu dHJ1cDc2MXgyNTUxOS1zaGE1MTIiCi0gI2RlZmluZQlLRVhfU05UUlVQNzYxWDI1NTE5X1NIQTUx Ml9PTEQJInNudHJ1cDc2MXgyNTUxOS1zaGE1MTJAb3BlbnNzaC5jb20iCi0gI2RlZmluZQlLRVhf TUxLRU03NjhYMjU1MTlfU0hBMjU2CSJtbGtlbTc2OHgyNTUxOS1zaGEyNTYiCi0rI2RlZmluZQlL RVhfTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTYgICAgICJtbGtlbTc2OG5pc3RwMjU2LXNoYTI1NiIK LSsjZGVmaW5lCUtFWF9NTEtFTTEwMjROSVNUUDM4NF9TSEEzODQgICAgIm1sa2VtMTAyNG5pc3Rw Mzg0LXNoYTM4NCIKLSAKLSAjZGVmaW5lIENPTVBfTk9ORQkwCi0gI2RlZmluZSBDT01QX0RFTEFZ RUQJMgotQEAgLTExMCw2ICsxMTIsOCBAQCBlbnVtIGtleF9leGNoYW5nZSB7Ci0gCUtFWF9DMjU1 MTlfU0hBMjU2LAotIAlLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTIsCi0gCUtFWF9LRU1f TUxLRU03NjhYMjU1MTlfU0hBMjU2LAotKwlLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2 LAotKwlLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NCwKLSAjaWZkZWYgR1NTQVBJCi0g CUtFWF9HU1NfR1JQMV9TSEExLAotIAlLRVhfR1NTX0dSUDE0X1NIQTEsCi1AQCAtMjEwLDYgKzIx NCw5IEBAIHN0cnVjdCBrZXggewotIAl1X2NoYXIgc250cnVwNzYxX2NsaWVudF9rZXlbY3J5cHRv X2tlbV9zbnRydXA3NjFfU0VDUkVUS0VZQllURVNdOyAvKiBLRU0gKi8KLSAJdV9jaGFyIG1sa2Vt NzY4X2NsaWVudF9rZXlbY3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFU107IC8qIEtF TSAqLwotIAlzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfcHViOwotKwkvKiBGSVhNRSAqLwotKwlFVlBf UEtFWSAqZWNfaHlicmlkX2NsaWVudF9rZXk7IC8qIE5JU1QgaHlicmlkcyAqLwotKwl1X2NoYXIg bWxrZW0xMDI0X2NsaWVudF9rZXlbY3J5cHRvX2tlbV9tbGtlbTEwMjRfU0VDUkVUS0VZQllURVNd OyAvKiBNTC1LRU0gMTAyNCArIE5JU1QgKi8KLSB9OwotIAotIGludAkga2V4X25hbWVfdmFsaWQo Y29uc3QgY2hhciAqKTsKLUBAIC0yOTIsNiArMjk5LDE4IEBAIGludAkga2V4X2tlbV9tbGtlbTc2 OHgyNTUxOV9lbmMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0gaW50CSBr ZXhfa2VtX21sa2VtNzY4eDI1NTE5X2RlYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hi dWYgKiwKLSAgICAgc3RydWN0IHNzaGJ1ZiAqKik7Ci0gCi0raW50CSBrZXhfa2VtX21sa2VtNzY4 bmlzdHAyNTZfa2V5cGFpcihzdHJ1Y3Qga2V4ICopOwotK2ludAkga2V4X2tlbV9tbGtlbTc2OG5p c3RwMjU2X2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKLSsgICAgc3Ry dWN0IHNzaGJ1ZiAqKiwgc3RydWN0IHNzaGJ1ZiAqKik7Ci0raW50CSBrZXhfa2VtX21sa2VtNzY4 bmlzdHAyNTZfZGVjKHN0cnVjdCBrZXggKiwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqLAotKyAgICBz dHJ1Y3Qgc3NoYnVmICoqKTsKLSsKLStpbnQJIGtleF9rZW1fbWxrZW0xMDI0bmlzdHAzODRfa2V5 cGFpcihzdHJ1Y3Qga2V4ICopOwotK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9lbmMo c3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0rICAgIHN0cnVjdCBzc2hidWYg KiosIHN0cnVjdCBzc2hidWYgKiopOwotK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9k ZWMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0rICAgIHN0cnVjdCBzc2hi dWYgKiopOwotKwotIGludAkga2V4X2RoX2tleWdlbihzdHJ1Y3Qga2V4ICopOwotIGludAkga2V4 X2RoX2NvbXB1dGVfa2V5KHN0cnVjdCBrZXggKiwgQklHTlVNICosIHN0cnVjdCBzc2hidWYgKik7 Ci0gCi1kaWZmIC0tZ2l0IGEva2V4Z2VuLmMgYi9rZXhnZW4uYwotaW5kZXggOWE5NzBhZGYxLi43 OWZhYTBiM2UgMTAwNjQ0Ci0tLS0gYS9rZXhnZW4uYwotKysrIGIva2V4Z2VuLmMKLUBAIC0xMzMs MTIgKzEzMywyNCBAQCBrZXhfZ2VuX2NsaWVudChzdHJ1Y3Qgc3NoICpzc2gpCi0gCQlicmVhazsK LSAJY2FzZSBLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1NjoKLSAJCWlmIChGSVBTX21vZGUo KSkgewotLQkJICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4eDI1NTE5IGlz IG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOwotLQkJICAgIHIgPSBTU0hfRVJSX0lOVkFMSURf QVJHVU1FTlQ7Ci0rCQkgICAgRVZQX0tFTSAqbWxrZW0gPSBFVlBfS0VNX2ZldGNoKE5VTEwsICJt bGtlbTc2OCIsIE5VTEwpOwotKwkJICAgIGlmIChtbGtlbSA9PSBOVUxMKSB7Ci0rCQkgICAgICAg IGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBlIG1sa2VtNzY4eDI1NTE5IGlzIG5vdCBhbGxvd2Vk IGluIEZJUFMgbW9kZSIpOwotKwkJICAgICAgICByID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5U OwotKwkJICAgIH0gZWxzZSB7Ci0rCQkJRVZQX0tFTV9mcmVlKG1sa2VtKTsKLSsJCSAgICAgICAg ciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFpcihrZXgpOwotKwkJICAgIH0KLSAJCX0g ZWxzZSB7Ci0gCQkgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFpcihrZXgpOwot IAkJfQotIAkJYnJlYWs7Ci0rCWNhc2UgS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NjoK LSsJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2tleXBhaXIoa2V4KTsKLSsJCWJy ZWFrOwotKwljYXNlIEtFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0OgotKwkJICAgIHIg PSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2tleXBhaXIoa2V4KTsKLSsJCWJyZWFrOwotIAlk ZWZhdWx0OgotIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLSAJCWJyZWFrOwotQEAg LTIyMywxMyArMjM1LDI4IEBAIGlucHV0X2tleF9nZW5fcmVwbHkoaW50IHR5cGUsIHVfaW50MzJf dCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKLSAJCWJyZWFrOwotIAljYXNlIEtFWF9LRU1fTUxLRU03 NjhYMjU1MTlfU0hBMjU2OgotIAkJaWYgKEZJUFNfbW9kZSgpKSB7Ci0tCQkgICAgbG9naXRfZigi S2V5IGV4Y2hhbmdlIHR5cGUgbWxrZW03Njh4MjU1MTkgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBt b2RlIik7Ci0tCQkgICAgciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKLSsJCSAgICBFVlBf S0VNICptbGtlbSA9IEVWUF9LRU1fZmV0Y2goTlVMTCwgIm1sa2VtNzY4IiwgTlVMTCk7Ci0rCQkg ICAgaWYgKG1sa2VtID09IE5VTEwpIHsKLSsJCSAgICAgICAgbG9naXRfZigiS2V5IGV4Y2hhbmdl IHR5cGUgbWxrZW03Njh4MjU1MTkgaXMgbm90IGFsbG93ZWQgaW4gRklQUyBtb2RlIik7Ci0rCQkg ICAgICAgIHIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rCQkgICAgfSBlbHNlIHsKLSsJ CQlFVlBfS0VNX2ZyZWUobWxrZW0pOwotKwkJICAgICAgICByID0ga2V4X2tlbV9tbGtlbTc2OHgy NTUxOV9kZWMoa2V4LCBzZXJ2ZXJfYmxvYiwKLSsJCSAgICAgICAgICAgICZzaGFyZWRfc2VjcmV0 KTsKLSsJCSAgICB9Ci0gCQl9IGVsc2UgewotIAkJICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4eDI1 NTE5X2RlYyhrZXgsIHNlcnZlcl9ibG9iLAotIAkJICAgICAgICAmc2hhcmVkX3NlY3JldCk7Ci0g CQl9Ci0gCQlicmVhazsKLSsJY2FzZSBLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2Ogot KwkJICAgIHIgPSBrZXhfa2VtX21sa2VtNzY4bmlzdHAyNTZfZGVjKGtleCwgc2VydmVyX2Jsb2Is Ci0rCQkgICAgICAgICZzaGFyZWRfc2VjcmV0KTsKLSsJCWJyZWFrOwotKwljYXNlIEtFWF9LRU1f TUxLRU0xMDI0TklTVFAzODRfU0hBMzg0OgotKwkJICAgIHIgPSBrZXhfa2VtX21sa2VtMTAyNG5p c3RwMzg0X2RlYyhrZXgsIHNlcnZlcl9ibG9iLAotKwkJICAgICAgICAmc2hhcmVkX3NlY3JldCk7 Ci0rCQlicmVhazsKLSAJZGVmYXVsdDoKLSAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7 Ci0gCQlicmVhazsKLUBAIC0yODMsNiArMzEwLDggQEAgb3V0OgotIAkgICAgc2l6ZW9mKGtleC0+ c250cnVwNzYxX2NsaWVudF9rZXkpKTsKLSAJZXhwbGljaXRfYnplcm8oa2V4LT5tbGtlbTc2OF9j bGllbnRfa2V5LAotIAkgICAgc2l6ZW9mKGtleC0+bWxrZW03NjhfY2xpZW50X2tleSkpOwotKwll eHBsaWNpdF9iemVybyhrZXgtPm1sa2VtMTAyNF9jbGllbnRfa2V5LAotKwkgICAgc2l6ZW9mKGtl eC0+bWxrZW0xMDI0X2NsaWVudF9rZXkpKTsKLSAJc3NoYnVmX2ZyZWUoc2VydmVyX2hvc3Rfa2V5 X2Jsb2IpOwotIAlmcmVlKHNpZ25hdHVyZSk7Ci0gCXNzaGJ1Zl9mcmVlKHRtcCk7Ci1AQCAtMzYy LDEzICszOTEsMjggQEAgaW5wdXRfa2V4X2dlbl9pbml0KGludCB0eXBlLCB1X2ludDMyX3Qgc2Vx LCBzdHJ1Y3Qgc3NoICpzc2gpCi0gCQlicmVhazsKLSAJY2FzZSBLRVhfS0VNX01MS0VNNzY4WDI1 NTE5X1NIQTI1NjoKLSAJCWlmIChGSVBTX21vZGUoKSkgewotLQkJICAgIGxvZ2l0X2YoIktleSBl eGNoYW5nZSB0eXBlIG1sa2VtNzY4eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIp OwotLQkJICAgIHIgPSBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rCQkgICAgRVZQX0tFTSAq bWxrZW0gPSBFVlBfS0VNX2ZldGNoKE5VTEwsICJtbGtlbTc2OCIsIE5VTEwpOwotKwkJICAgIGlm IChtbGtlbSA9PSBOVUxMKSB7Ci0rCQkgICAgICAgIGxvZ2l0X2YoIktleSBleGNoYW5nZSB0eXBl IG1sa2VtNzY4eDI1NTE5IGlzIG5vdCBhbGxvd2VkIGluIEZJUFMgbW9kZSIpOwotKwkJICAgICAg ICByID0gU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOwotKwkJICAgIH0gZWxzZSB7Ci0rCQkJRVZQ X0tFTV9mcmVlKG1sa2VtKTsKLSsJCSAgICAgICAgciA9IGtleF9rZW1fbWxrZW03Njh4MjU1MTlf ZW5jKGtleCwgY2xpZW50X3B1YmtleSwKLSsJCSAgICAgICAgICAgICZzZXJ2ZXJfcHVia2V5LCAm c2hhcmVkX3NlY3JldCk7Ci0rCQkgICAgfQotIAkJfSBlbHNlIHsKLSAJCSAgICByID0ga2V4X2tl bV9tbGtlbTc2OHgyNTUxOV9lbmMoa2V4LCBjbGllbnRfcHVia2V5LAotIAkJICAgICAgICAmc2Vy dmVyX3B1YmtleSwgJnNoYXJlZF9zZWNyZXQpOwotIAkJfQotIAkJYnJlYWs7Ci0rCWNhc2UgS0VY X0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1NjoKLSsJCSAgICByID0ga2V4X2tlbV9tbGtlbTc2 OG5pc3RwMjU2X2VuYyhrZXgsIGNsaWVudF9wdWJrZXksCi0rCQkgICAgICAgICZzZXJ2ZXJfcHVi a2V5LCAmc2hhcmVkX3NlY3JldCk7Ci0rCQlicmVhazsKLSsJY2FzZSBLRVhfS0VNX01MS0VNMTAy NE5JU1RQMzg0X1NIQTM4NDoKLSsJCSAgICByID0ga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9l bmMoa2V4LCBjbGllbnRfcHVia2V5LAotKwkJICAgICAgICAmc2VydmVyX3B1YmtleSwgJnNoYXJl ZF9zZWNyZXQpOwotKwkJYnJlYWs7Ci0gCWRlZmF1bHQ6Ci0gCQlyID0gU1NIX0VSUl9JTlZBTElE X0FSR1VNRU5UOwotIAkJYnJlYWs7Ci1kaWZmIC0tZ2l0IGEva2V4bWxrZW03Njh4MjU1MTkuYyBi L2tleG1sa2VtNzY4eDI1NTE5LmMKLWluZGV4IGFiNjE2NzIyMS4uYzU2ZDY3ZmY0IDEwMDY0NAot LS0tIGEva2V4bWxrZW03Njh4MjU1MTkuYwotKysrIGIva2V4bWxrZW03Njh4MjU1MTkuYwotQEAg LTQ0LDE5ICs0NCwzMyBAQAotICNpZmRlZiBVU0VfTUxLRU03NjhYMjU1MTkKLSAKLSAjaW5jbHVk ZSAibGliY3J1eF9tbGtlbTc2OF9zaGEzLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9lYy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotICNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAjaW5jbHVk ZSA8c3RkaW8uaD4KLSAKLSsjZGVmaW5lIEZJUFNfRkFMTEJBQ0tfUFJPUFEgInByb3ZpZGVyPWRl ZmF1bHQsLWZpcHMiCi0rCi0gc3RhdGljIGludAotLW1sa2VtNzY4X2tleXBhaXJfZ2VuKHVuc2ln bmVkIGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1ZikKLSttbGtlbV9r ZXlwYWlyX2dlbihjb25zdCBjaGFyICphbGduYW1lLCB1bnNpZ25lZCBjaGFyICpwdWJrZXlidWYs IHNpemVfdCBwdWJrZXlfc2l6ZSwKLSsJICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnByaXZrZXli dWYsIHNpemVfdCBwcml2a2V5X3NpemUpCi0gewotICAgICBFVlBfUEtFWV9DVFggKmN0eCA9IE5V TEw7Ci0gICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKLSAgICAgaW50IHJldCA9IFNTSF9FUlJf SU5URVJOQUxfRVJST1I7Ci0tICAgIHNpemVfdCBwdWJrZXlfc2l6ZSA9IGNyeXB0b19rZW1fbWxr ZW03NjhfUFVCTElDS0VZQllURVMsIHByaXZrZXlfc2l6ZSA9IGNyeXB0b19rZW1fbWxrZW03Njhf U0VDUkVUS0VZQllURVM7Ci0rICAgIHNpemVfdCBnb3RfcHViX3NpemUgPSBwdWJrZXlfc2l6ZSwg Z290X3ByaXZfc2l6ZSA9IHByaXZrZXlfc2l6ZTsKLSsKLSsgICAgY3R4ID0gRVZQX1BLRVlfQ1RY X25ld19mcm9tX25hbWUoTlVMTCwgYWxnbmFtZSwgTlVMTCk7Ci0rCi0rICAgIGlmIChjdHggPT0g TlVMTCAmJiBGSVBTX21vZGUoKSkgewotKwkvKiBXZSBoYXZlIGZpbHRlcmVkIHgyNTUxOSArIE1M LUtFTSBpbiBGSVBTIG1vZGUgZWFybGllcgotKwkgKiBzbyBpZiB3ZSBhcmUgaW4gRklQUyBtb2Rl IGFuZCBNTC1LRU0gaXMgbm90IGF2YWlsYWJsZSB3aXRoIGRlZmF1bHQgcHJvcHEsCi0rCSAqIHdl IGNhbiBmZXRjaCBpdCBmcm9tIHRoZSBkZWZhdWx0IHByb3ZpZGVyICovCi0rICAgICAgICBjdHgg PSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShOVUxMLCBhbGduYW1lLCBGSVBTX0ZBTExCQUNL X1BST1BRKTsKLSsgICAgfQotIAotLSAgICBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFt ZShOVUxMLCAibWxrZW03NjgiLCBOVUxMKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxMKSB7Ci0gCXJl dCA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotIAlnb3RvIGVycjsKLUBAIC02OCwxNyArODIs MjMgQEAgbWxrZW03Njhfa2V5cGFpcl9nZW4odW5zaWduZWQgY2hhciAqcHVia2V5YnVmLCB1bnNp Z25lZCBjaGFyICpwcml2a2V5YnVmKQotICAgICAgICAgZ290byBlcnI7Ci0gICAgIH0KLSAKLS0g ICAgaWYgKEVWUF9QS0VZX2dldF9yYXdfcHVibGljX2tleShwa2V5LCBwdWJrZXlidWYsICZwdWJr ZXlfc2l6ZSkgPD0gMAotLQl8fCBFVlBfUEtFWV9nZXRfcmF3X3ByaXZhdGVfa2V5KHBrZXksIHBy aXZrZXlidWYsICZwcml2a2V5X3NpemUpIDw9IDApIHsKLSsgICAgaWYgKEVWUF9QS0VZX2dldF9y YXdfcHVibGljX2tleShwa2V5LCBOVUxMLCAmZ290X3B1Yl9zaXplKSA8PSAwCi0rCXx8IEVWUF9Q S0VZX2dldF9yYXdfcHJpdmF0ZV9rZXkocGtleSwgTlVMTCwgJmdvdF9wcml2X3NpemUpIDw9IDAp IHsKLSAJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0gICAgICAgICBnb3RvIGVycjsK LSAgICAgfQotIAotLSAgICBpZiAocHJpdmtleV9zaXplICE9IGNyeXB0b19rZW1fbWxrZW03Njhf U0VDUkVUS0VZQllURVMKLS0JICAgIHx8IHB1YmtleV9zaXplICE9IGNyeXB0b19rZW1fbWxrZW03 NjhfUFVCTElDS0VZQllURVMpIHsKLSsgICAgaWYgKHByaXZrZXlfc2l6ZSAhPSBnb3RfcHJpdl9z aXplIHx8IHB1YmtleV9zaXplICE9IGdvdF9wdWJfc2l6ZSkgewotIAlyZXQgPSBTU0hfRVJSX0xJ QkNSWVBUT19FUlJPUjsKLSAgICAgICAgIGdvdG8gZXJyOwotICAgICB9Ci0rCi0rICAgIGlmIChF VlBfUEtFWV9nZXRfcmF3X3B1YmxpY19rZXkocGtleSwgcHVia2V5YnVmLCAmZ290X3B1Yl9zaXpl KSA8PSAwCi0rCXx8IEVWUF9QS0VZX2dldF9yYXdfcHJpdmF0ZV9rZXkocGtleSwgcHJpdmtleWJ1 ZiwgJmdvdF9wcml2X3NpemUpIDw9IDApIHsKLSsJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJS T1I7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotICAgICByZXQgPSAwOwotIAotICBl cnI6Ci1AQCAtOTAsMjcgKzExMCw1NyBAQCBtbGtlbTc2OF9rZXlwYWlyX2dlbih1bnNpZ25lZCBj aGFyICpwdWJrZXlidWYsIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCi0gfQotIAotIHN0YXRp YyBpbnQKLS1tbGtlbTc2OF9lbmNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwdWJrZXlidWYsIHVf Y2hhciAqc2VjcmV0LCB1X2NoYXIgKm91dCkKLSttbGtlbTc2OF9rZXlwYWlyX2dlbih1bnNpZ25l ZCBjaGFyICpwdWJrZXlidWYsIHVuc2lnbmVkIGNoYXIgKnByaXZrZXlidWYpCi0rewotKwlyZXR1 cm4gbWxrZW1fa2V5cGFpcl9nZW4oIm1sa2VtNzY4IiwgcHVia2V5YnVmLCBjcnlwdG9fa2VtX21s a2VtNzY4X1BVQkxJQ0tFWUJZVEVTLAotKwkJCXByaXZrZXlidWYsIGNyeXB0b19rZW1fbWxrZW03 NjhfU0VDUkVUS0VZQllURVMpOwotK30KLSsKLStzdGF0aWMgaW50Ci0rbWxrZW0xMDI0X2tleXBh aXJfZ2VuKHVuc2lnbmVkIGNoYXIgKnB1YmtleWJ1ZiwgdW5zaWduZWQgY2hhciAqcHJpdmtleWJ1 ZikKLSt7Ci0rCXJldHVybiBtbGtlbV9rZXlwYWlyX2dlbigibWxrZW0xMDI0IiwgcHVia2V5YnVm LCBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUywKLSsJCQlwcml2a2V5YnVmLCBj cnlwdG9fa2VtX21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFUyk7Ci0rfQotKwotK3N0YXRpYyBpbnQK LSttbGtlbV9lbmNhcF9zZWNyZXQoY29uc3QgY2hhciAqbWxrZW1fYWxnLCBjb25zdCB1X2NoYXIg KnB1YmtleWJ1ZiwgdV9jaGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQotIHsKLSAgICAgRVZQX1BL RVkgKnBrZXkgPSBOVUxMOwotICAgICBFVlBfUEtFWV9DVFggKmN0eCA9IE5VTEw7Ci0gICAgIGlu dCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLS0gICAgc2l6ZV90IG91dGxlbiA9IGNyeXB0 b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTLAotLQkgICBzZWNyZXRsZW4gPSBjcnlwdG9f a2VtX21sa2VtNzY4X0JZVEVTOwotKyAgICBzaXplX3Qgb3V0bGVuLCBleHBlY3RlZF9vdXRsZW4s IHB1Ymxlbiwgc2VjcmV0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFUzsKLSsgICAgaW50 IGZpcHNfZmFsbGJhY2sgPSAwOwotKwotKyAgICBpZiAoc3RyY21wKG1sa2VtX2FsZywgIm1sa2Vt NzY4IikgPT0gMCkgewotKwkgICAgb3V0bGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJU RVhUQllURVM7Ci0rCSAgICBwdWJsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X1BVQkxJQ0tFWUJZ VEVTOwotKyAgICB9IGVsc2UgaWYgKHN0cmNtcChtbGtlbV9hbGcsICJtbGtlbTEwMjQiKSA9PSAw KSB7Ci0rCSAgICBvdXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtMTAyNF9DSVBIRVJURVhUQllURVM7 Ci0rCSAgICBwdWJsZW4gPSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUzsKLSsg ICAgfSBlbHNlCi0rCSAgICByZXR1cm4gcjsKLSAKLS0gICAgcGtleSA9IEVWUF9QS0VZX25ld19y YXdfcHVibGljX2tleV9leChOVUxMLCAibWxrZW03NjgiLCBOVUxMLAotLQkJICAgIHB1YmtleWJ1 ZiwgY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUyk7Ci0rICAgIGV4cGVjdGVkX291 dGxlbiA9IG91dGxlbjsKLSsKLSsgICAgcGtleSA9IEVWUF9QS0VZX25ld19yYXdfcHVibGljX2tl eV9leChOVUxMLCBtbGtlbV9hbGcsIE5VTEwsCi0rCQkgICAgcHVia2V5YnVmLCBwdWJsZW4pOwot KyAgICBpZiAocGtleSA9PSBOVUxMICYmIEZJUFNfbW9kZSgpKSB7Ci0rICAgICAgICBwa2V5ID0g RVZQX1BLRVlfbmV3X3Jhd19wdWJsaWNfa2V5X2V4KE5VTEwsIG1sa2VtX2FsZywgRklQU19GQUxM QkFDS19QUk9QUSwKLSsJCSAgICBwdWJrZXlidWYsIHB1Ymxlbik7Ci0rCWZpcHNfZmFsbGJhY2sg PSAxOwotKyAgICB9Ci0gICAgIGlmIChwa2V5ID09IE5VTEwpIHsKLSAJciA9IFNTSF9FUlJfTElC Q1JZUFRPX0VSUk9SOwotIAlnb3RvIGVycjsKLSAgICAgfQotIAotLSAgICBjdHggPSBFVlBfUEtF WV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBwa2V5LCBOVUxMKTsKLSsgICAgY3R4ID0gRVZQX1BL RVlfQ1RYX25ld19mcm9tX3BrZXkoTlVMTCwgcGtleSwgZmlwc19mYWxsYmFjayA/IEZJUFNfRkFM TEJBQ0tfUFJPUFEgOiBOVUxMKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxMCi0gCXx8IEVWUF9QS0VZ X2VuY2Fwc3VsYXRlX2luaXQoY3R4LCBOVUxMKSA8PSAwCi0tICAgICAgICB8fCBFVlBfUEtFWV9l bmNhcHN1bGF0ZShjdHgsIG91dCwgJm91dGxlbiwgc2VjcmV0LCAmc2VjcmV0bGVuKSA8PSAwCi0r ICAgICAgICB8fCBFVlBfUEtFWV9lbmNhcHN1bGF0ZShjdHgsIG91dCwgJmV4cGVjdGVkX291dGxl biwgc2VjcmV0LCAmc2VjcmV0bGVuKSA8PSAwCi0gCXx8IHNlY3JldGxlbiAhPSBjcnlwdG9fa2Vt X21sa2VtNzY4X0JZVEVTCi0tCXx8IG91dGxlbiAhPSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhF UlRFWFRCWVRFUykgewotKwl8fCBvdXRsZW4gIT0gZXhwZWN0ZWRfb3V0bGVuKSB7Ci0gCXIgPSBT U0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSAJZ290byBlcnI7Ci0gICAgIH0KLUBAIC0xMjYsMjUg KzE3Niw0NSBAQCBtbGtlbTc2OF9lbmNhcF9zZWNyZXQoY29uc3QgdV9jaGFyICpwdWJrZXlidWYs IHVfY2hhciAqc2VjcmV0LCB1X2NoYXIgKm91dCkKLSB9Ci0gCi0gc3RhdGljIGludAotLW1sa2Vt NzY4X2RlY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNvbnN0IHVfY2hhciAq d3JhcHBlZCwgdV9jaGFyICpzZWNyZXQpCi0rbWxrZW03NjhfZW5jYXBfc2VjcmV0KGNvbnN0IHVf Y2hhciAqcHVia2V5YnVmLCB1X2NoYXIgKnNlY3JldCwgdV9jaGFyICpvdXQpCi0rewotKwlyZXR1 cm4gbWxrZW1fZW5jYXBfc2VjcmV0KCJtbGtlbTc2OCIsIHB1YmtleWJ1Ziwgc2VjcmV0LCBvdXQp OwotK30KLSsKLStzdGF0aWMgaW50Ci0rbWxrZW0xMDI0X2VuY2FwX3NlY3JldChjb25zdCB1X2No YXIgKnB1YmtleWJ1ZiwgdV9jaGFyICpzZWNyZXQsIHVfY2hhciAqb3V0KQotK3sKLSsJcmV0dXJu IG1sa2VtX2VuY2FwX3NlY3JldCgibWxrZW0xMDI0IiwgcHVia2V5YnVmLCBzZWNyZXQsIG91dCk7 Ci0rfQotKwotK3N0YXRpYyBpbnQKLSttbGtlbV9kZWNhcF9zZWNyZXQoY29uc3QgY2hhciAqYWxn bmFtZSwKLSsgICAgY29uc3QgdV9jaGFyICpwcml2a2V5YnVmLCBzaXplX3QgcHJpdmtleV9sZW4s Ci0rICAgIGNvbnN0IHVfY2hhciAqd3JhcHBlZCwgc2l6ZV90IHdyYXBwZWRfbGVuLAotKyAgICB1 X2NoYXIgKnNlY3JldCkKLSB7Ci0gICAgIEVWUF9QS0VZICpwa2V5ID0gTlVMTDsKLSAgICAgRVZQ X1BLRVlfQ1RYICpjdHggPSBOVUxMOwotICAgICBpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJS T1I7Ci0tICAgIHNpemVfdCB3cmFwcGVkbGVuID0gY3J5cHRvX2tlbV9tbGtlbTc2OF9DSVBIRVJU RVhUQllURVMsCi0tCSAgIHNlY3JldGxlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVM7Ci0r ICAgIHNpemVfdCBzZWNyZXRsZW4gPSBjcnlwdG9fa2VtX21sa2VtNzY4X0JZVEVTOwotKyAgICBp bnQgZmlwc19mYWxsYmFjayA9IDA7Ci0gCi0tICAgIHBrZXkgPSBFVlBfUEtFWV9uZXdfcmF3X3By aXZhdGVfa2V5X2V4KE5VTEwsICJtbGtlbTc2OCIsIE5VTEwsCi0tCQkgICAgcHJpdmtleWJ1Ziwg Y3J5cHRvX2tlbV9tbGtlbTc2OF9TRUNSRVRLRVlCWVRFUyk7Ci0rICAgIHBrZXkgPSBFVlBfUEtF WV9uZXdfcmF3X3ByaXZhdGVfa2V5X2V4KE5VTEwsIGFsZ25hbWUsCi0rCQkgICAgTlVMTCwgcHJp dmtleWJ1ZiwgcHJpdmtleV9sZW4pOwotKyAgICBpZiAocGtleSA9PSBOVUxMICYmIEZJUFNfbW9k ZSgpKSB7Ci0rICAgICAgICBwa2V5ID0gRVZQX1BLRVlfbmV3X3Jhd19wcml2YXRlX2tleV9leChO VUxMLCBhbGduYW1lLAotKwkJICAgIEZJUFNfRkFMTEJBQ0tfUFJPUFEsIHByaXZrZXlidWYsIHBy aXZrZXlfbGVuKTsKLSsJZmlwc19mYWxsYmFjayA9IDE7Ci0rICAgIH0KLSAgICAgaWYgKHBrZXkg PT0gTlVMTCkgewotIAlyID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7Ci0gCWdvdG8gZXJyOwot ICAgICB9Ci0gCi0tICAgIGN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJvbV9wa2V5KE5VTEwsIHBr ZXksIE5VTEwpOwotKyAgICBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fcGtleShOVUxMLCBw a2V5LCBmaXBzX2ZhbGxiYWNrID8gRklQU19GQUxMQkFDS19QUk9QUSA6IE5VTEwpOwotICAgICBp ZiAoY3R4ID09IE5VTEwKLSAJfHwgRVZQX1BLRVlfZGVjYXBzdWxhdGVfaW5pdChjdHgsIE5VTEwp IDw9IDAKLS0gICAgICAgIHx8IEVWUF9QS0VZX2RlY2Fwc3VsYXRlKGN0eCwgc2VjcmV0LCAmc2Vj cmV0bGVuLCB3cmFwcGVkLCB3cmFwcGVkbGVuKSA8PSAwCi0rICAgICAgICB8fCBFVlBfUEtFWV9k ZWNhcHN1bGF0ZShjdHgsIHNlY3JldCwgJnNlY3JldGxlbiwgd3JhcHBlZCwgd3JhcHBlZF9sZW4p IDw9IDAKLSAJfHwgc2VjcmV0bGVuICE9IGNyeXB0b19rZW1fbWxrZW03NjhfQllURVMpIHsKLSAJ ciA9IFNTSF9FUlJfTElCQ1JZUFRPX0VSUk9SOwotIAlnb3RvIGVycjsKLUBAIC0xNjEsNiArMjMx LDIwIEBAIG1sa2VtNzY4X2RlY2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNv bnN0IHVfY2hhciAqd3JhcHBlZCwgdV9jaGFyICpzCi0gICAgIHJldHVybiByOwotIH0KLSAKLStz dGF0aWMgaW50Ci0rbWxrZW03NjhfZGVjYXBfc2VjcmV0KGNvbnN0IHVfY2hhciAqcHJpdmtleWJ1 ZiwgY29uc3QgdV9jaGFyICp3cmFwcGVkLCB1X2NoYXIgKnNlY3JldCkKLSt7Ci0rCXJldHVybiBt bGtlbV9kZWNhcF9zZWNyZXQoIm1sa2VtNzY4IiwgcHJpdmtleWJ1ZiwgY3J5cHRvX2tlbV9tbGtl bTc2OF9TRUNSRVRLRVlCWVRFUywKLSsJCXdyYXBwZWQsIGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQ SEVSVEVYVEJZVEVTLCBzZWNyZXQpOwotK30KLSsKLStzdGF0aWMgaW50Ci0rbWxrZW0xMDI0X2Rl Y2FwX3NlY3JldChjb25zdCB1X2NoYXIgKnByaXZrZXlidWYsIGNvbnN0IHVfY2hhciAqd3JhcHBl ZCwgdV9jaGFyICpzZWNyZXQpCi0rewotKwlyZXR1cm4gbWxrZW1fZGVjYXBfc2VjcmV0KCJtbGtl bTEwMjQiLCBwcml2a2V5YnVmLCBjcnlwdG9fa2VtX21sa2VtMTAyNF9TRUNSRVRLRVlCWVRFUywK LSsJCXdyYXBwZWQsIGNyeXB0b19rZW1fbWxrZW0xMDI0X0NJUEhFUlRFWFRCWVRFUywgc2VjcmV0 KTsKLSt9Ci0rCi0gaW50Ci0ga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9rZXlwYWlyKHN0cnVjdCBr ZXggKmtleCkKLSB7Ci1AQCAtMzM3LDcgKzQyMSw3IEBAIGtleF9rZW1fbWxrZW03Njh4MjU1MTlf ZW5jKHN0cnVjdCBrZXggKmtleCwKLSAJdV9jaGFyIGhhc2hbU1NIX0RJR0VTVF9NQVhfTEVOR1RI XTsKLSAJc2l6ZV90IG5lZWQ7Ci0gCWludCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLS0J c3RydWN0IGxpYmNydXhfbWxrZW03NjhfZW5jX3Jlc3VsdCBlbmM7IC8qIEZJWE1FICovCi0rCXN0 cnVjdCBsaWJjcnV4X21sa2VtNzY4X2VuY19yZXN1bHQgZW5jOwotIAotIAkqc2VydmVyX2Jsb2Jw ID0gTlVMTDsKLSAJKnNoYXJlZF9zZWNyZXRwID0gTlVMTDsKLUBAIC01NDYsNiArNjMwLDUxOSBA QCBrZXhfa2VtX21sa2VtNzY4eDI1NTE5X2RlYyhzdHJ1Y3Qga2V4ICprZXgsCi0gCXJldHVybiBy OwotICNlbmRpZgotIH0KLSsKLSsjZGVmaW5lIE5JU1RfUDI1Nl9DT01QUkVTU0VEX0xFTiAgIDMz Ci0rI2RlZmluZSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTiA2NQotKyNkZWZpbmUgTklTVF9Q Mzg0X0NPTVBSRVNTRURfTEVOICAgNDkKLSsjZGVmaW5lIE5JU1RfUDM4NF9VTkNPTVBSRVNTRURf TEVOIDk3Ci0rI2RlZmluZSBOSVNUX0JVRl9NQVhfU0laRSBOSVNUX1AzODRfVU5DT01QUkVTU0VE X0xFTgotKwotK3N0YXRpYyBjb25zdCBjaGFyIGVjMjU2W10gPSAiUC0yNTYiOwotK3N0YXRpYyBj b25zdCBjaGFyIGVjMzg0W10gPSAiUC0zODQiOwotK3N0YXRpYyBjb25zdCBjaGFyICpsZW4yY3Vy dmVfbmFtZShzaXplX3QgbGVuKQotK3sKLSsJc3dpdGNoIChsZW4pIHsKLSsJCWNhc2UgTklTVF9Q MjU2X0NPTVBSRVNTRURfTEVOOgotKwkJY2FzZSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTjoK LSsJCQlyZXR1cm4gZWMyNTY7Ci0rCQkJYnJlYWs7Ci0rCQljYXNlIE5JU1RfUDM4NF9DT01QUkVT U0VEX0xFTjoKLSsJCWNhc2UgTklTVF9QMzg0X1VOQ09NUFJFU1NFRF9MRU46Ci0rCQkJcmV0dXJu IGVjMzg0OwotKwkJCWJyZWFrOwotKwl9Ci0rCXJldHVybiBOVUxMOwotK30KLSsKLStzdGF0aWMg RVZQX1BLRVkgKgotK2J1ZjJuaXN0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICpwdWJfa2V5X2J1 Ziwgc2l6ZV90IHB1Yl9rZXlfbGVuKQotK3sKLSsJRVZQX1BLRVkgKnBrZXkgPSBOVUxMOwotKwlF VlBfUEtFWV9DVFggKmN0eCA9IE5VTEw7Ci0rCU9TU0xfUEFSQU0gcGFyYW1zWzNdOwotKwljb25z dCBjaGFyICpjdXJ2ZV9uYW1lID0gbGVuMmN1cnZlX25hbWUocHViX2tleV9sZW4pOwotKwotKwlp ZiAoY3VydmVfbmFtZSA9PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCWN0eCA9IEVWUF9Q S0VZX0NUWF9uZXdfZnJvbV9uYW1lKE5VTEwsICJFQyIsIE5VTEwpOwotKwlpZiAoIWN0eCkKLSsJ CWdvdG8gZXJyOwotKwotKwlpZiAoRVZQX1BLRVlfZnJvbWRhdGFfaW5pdChjdHgpIDw9IDApCi0r CQlnb3RvIGVycjsKLSsKLSsJcGFyYW1zWzBdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3RfdXRmOF9z dHJpbmcoT1NTTF9QS0VZX1BBUkFNX0dST1VQX05BTUUsIGN1cnZlX25hbWUsIDApOwotKwlwYXJh bXNbMV0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF9vY3RldF9zdHJpbmcoCi0rCQkJT1NTTF9QS0VZ X1BBUkFNX1BVQl9LRVksICh2b2lkICopcHViX2tleV9idWYsIHB1Yl9rZXlfbGVuKTsKLSsJcGFy YW1zWzJdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3RfZW5kKCk7Ci0rCi0rCWlmIChFVlBfUEtFWV9m cm9tZGF0YShjdHgsICZwa2V5LCBFVlBfUEtFWV9QVUJMSUNfS0VZLCBwYXJhbXMpIDw9IDApCi0r CQlnb3RvIGVycjsKLSsKLSsJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKLSsJcmV0dXJuIHBrZXk7 Ci0rCi0rZXJyOgotKwlFVlBfUEtFWV9DVFhfZnJlZShjdHgpOwotKwlFVlBfUEtFWV9mcmVlKHBr ZXkpOwotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0rc3RhdGljIGludAotK2tleF9uaXN0X3NoYXJl ZF9rZXlfZXh0KEVWUF9QS0VZICpwcml2X2tleSwKLSsgICAgY29uc3QgdV9jaGFyICpwdWJfa2V5 X2J1Ziwgc2l6ZV90IHB1Yl9rZXlfbGVuLCBzdHJ1Y3Qgc3NoYnVmICpvdXQpCi0rewotKwlFVlBf UEtFWV9DVFggKmN0eCA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKnNoYXJlZF9zZWNyZXQgPSBO VUxMOwotKwlzaXplX3Qgc2hhcmVkX3NlY3JldF9sZW4gPSAwOwotKwlFVlBfUEtFWSAqcGVlcl9r ZXkgPSBidWYybmlzdF9rZXkocHViX2tleV9idWYsIHB1Yl9rZXlfbGVuKTsKLSsJaW50IHIgPSBT U0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwotKwlpZiAocGVlcl9rZXkgPT0gTlVMTCkKLSsJCXJl dHVybiBTU0hfRVJSX0tFWV9MRU5HVEg7Ci0rCi0rCWN0eCA9IEVWUF9QS0VZX0NUWF9uZXdfZnJv bV9wa2V5KE5VTEwsIHByaXZfa2V5LCBOVUxMKTsKLSsJaWYgKCFjdHgpCi0rCQlnb3RvIGVuZDsK LSsKLSsJaWYgKChFVlBfUEtFWV9kZXJpdmVfaW5pdChjdHgpIDw9IDApCi0rCQl8fCBFVlBfUEtF WV9kZXJpdmVfc2V0X3BlZXIoY3R4LCBwZWVyX2tleSkgPD0gMAotKwkJfHwgRVZQX1BLRVlfZGVy aXZlKGN0eCwgTlVMTCwgJnNoYXJlZF9zZWNyZXRfbGVuKSA8PSAwKQotKwkJZ290byBlbmQ7Ci0r Ci0rCXNoYXJlZF9zZWNyZXQgPSBPUEVOU1NMX21hbGxvYyhzaGFyZWRfc2VjcmV0X2xlbik7Ci0r CWlmIChzaGFyZWRfc2VjcmV0ID09IE5VTEwpCi0rCQlnb3RvIGVuZDsKLSsKLSsJaWYgKEVWUF9Q S0VZX2Rlcml2ZShjdHgsIHNoYXJlZF9zZWNyZXQsICZzaGFyZWRfc2VjcmV0X2xlbikgPD0gMCkK LSsJCWdvdG8gZW5kOwotKwotKwlpZiAoKHIgPSBzc2hidWZfcHV0KG91dCwgc2hhcmVkX3NlY3Jl dCwgc2hhcmVkX3NlY3JldF9sZW4pKSAhPSAwKQotKwkJZ290byBlbmQ7Ci0rCi0rCXIgPSAwOwot KwotK2VuZDoKLSsJRVZQX1BLRVlfZnJlZShwZWVyX2tleSk7Ci0rCWlmIChzaGFyZWRfc2VjcmV0 KQotKwkJT1BFTlNTTF9jbGVhcl9mcmVlKHNoYXJlZF9zZWNyZXQsIHNoYXJlZF9zZWNyZXRfbGVu KTsKLSsJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4KTsKLSsKLSsJcmV0dXJuIHI7Ci0rfQotKwotK3N0 YXRpYyBFVlBfUEtFWSAqCi0rbmlzdF9wa2V5X2tleWdlbihzaXplX3QgcHViX2tleV9sZW4pCi0r ewotKwljb25zdCBjaGFyICpjdXJ2ZV9uYW1lID0gbGVuMmN1cnZlX25hbWUocHViX2tleV9sZW4p OwotKwlFVlBfUEtFWV9DVFggKnBjdHggPSBOVUxMOwotKwlFVlBfUEtFWSAqcGtleSA9IE5VTEw7 Ci0rCU9TU0xfUEFSQU0gcGFyYW1zWzJdOwotKwotKwlpZiAoY3VydmVfbmFtZSA9PSBOVUxMKQot KwkJcmV0dXJuIE5VTEw7Ci0rCi0rCXBjdHggPSBFVlBfUEtFWV9DVFhfbmV3X2Zyb21fbmFtZShO VUxMLCAiRUMiLCBOVUxMKTsKLSsJaWYgKCFwY3R4KQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCWlm IChFVlBfUEtFWV9rZXlnZW5faW5pdChwY3R4KSA8PSAwKSB7Ci0rCQlFVlBfUEtFWV9DVFhfZnJl ZShwY3R4KTsKLSsJCXJldHVybiBOVUxMOwotKwl9Ci0rCi0rCXBhcmFtc1swXSA9IE9TU0xfUEFS QU1fY29uc3RydWN0X3V0Zjhfc3RyaW5nKE9TU0xfUEtFWV9QQVJBTV9HUk9VUF9OQU1FLCBjdXJ2 ZV9uYW1lLCAwKTsKLSsJcGFyYW1zWzFdID0gT1NTTF9QQVJBTV9jb25zdHJ1Y3RfZW5kKCk7Ci0r Ci0rCWlmIChFVlBfUEtFWV9DVFhfc2V0X3BhcmFtcyhwY3R4LCBwYXJhbXMpIDw9IDAKLSsJICAg IHx8IEVWUF9QS0VZX2tleWdlbihwY3R4LCAmcGtleSkgPD0gMCkgewotKwkJRVZQX1BLRVlfQ1RY X2ZyZWUocGN0eCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJfQotKwotKwlFVlBfUEtFWV9DVFhfZnJl ZShwY3R4KTsKLSsJcmV0dXJuIHBrZXk7Ci0rfQotKwotK3N0YXRpYyBzaXplX3QgZGVjb21wcmVz c19wdWJfa2V5KHZvaWQgKnB1Yiwgc2l6ZV90IGNvbXByZXNzZWRfbGVuLCBzaXplX3QgZGVjb21w cmVzc2VkX2xlbikKLSt7Ci0rICAgIEVDX0dST1VQICpncm91cCA9IE5VTEw7Ci0rICAgIEVDX1BP SU5UICpwb2ludCA9IE5VTEw7Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgc2l6ZV90 IGxlbiA9IDA7Ci0rICAgIGludCBncm91cF9uaWQgPSBOSURfdW5kZWY7Ci0rCi0rICAgIHN3aXRj aCAoY29tcHJlc3NlZF9sZW4pIHsKLSsgICAgY2FzZSBOSVNUX1AyNTZfQ09NUFJFU1NFRF9MRU46 Ci0rICAgICAgICAgZ3JvdXBfbmlkID0gTklEX1g5XzYyX3ByaW1lMjU2djE7Ci0rICAgICAgIGJy ZWFrOwotKyAgICBjYXNlIE5JU1RfUDM4NF9DT01QUkVTU0VEX0xFTjoKLSsgICAgICAgICBncm91 cF9uaWQgPSBOSURfc2VjcDM4NHIxOwotKyAgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsg ICAgICAgcmV0dXJuIDA7Ci0rICAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0rICAgIGN0eCA9IEJO X0NUWF9uZXcoKTsKLSsgICAgZ3JvdXAgPSBFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZShncm91 cF9uaWQpOwotKyAgICBpZiAoY3R4ID09IE5VTEwgfHwgZ3JvdXAgPT0gTlVMTCkKLSsgICAgICAg IGdvdG8gZXJyOwotKwotKyAgICBwb2ludCA9IEVDX1BPSU5UX25ldyhncm91cCk7Ci0rICAgIGlm IChwb2ludCA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmICghRUNfUE9J TlRfb2N0MnBvaW50KGdyb3VwLCBwb2ludCwgcHViLCBjb21wcmVzc2VkX2xlbiwgY3R4KSkKLSsg ICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBsZW4gPSBFQ19QT0lOVF9wb2ludDJvY3QoZ3JvdXAs IHBvaW50LCBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCwgcHViLCBkZWNvbXByZXNzZWRf bGVuLCBjdHgpOwotKwotK2VycjoKLSsgICAgRUNfUE9JTlRfZnJlZShwb2ludCk7Ci0rICAgIEVD X0dST1VQX2ZyZWUoZ3JvdXApOwotKyAgICBCTl9DVFhfZnJlZShjdHgpOwotKwotKyAgICByZXR1 cm4gbGVuOwotK30KLSsKLStzdGF0aWMgaW50Ci0rZ2V0X3VuY29tcHJlc3NlZF9lY19wdWJrZXko RVZQX1BLRVkgKnBrZXksIHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCi0rewot KyAgICBPU1NMX1BBUkFNIHBhcmFtc1syXTsKLSsgICAgc2l6ZV90IHJlcXVpcmVkX2xlbiA9IDAs IG91dF9sZW4gPSAwOwotKwotKyAgICBwYXJhbXNbMF0gPSBPU1NMX1BBUkFNX2NvbnN0cnVjdF91 dGY4X3N0cmluZygKLSsgICAgICAgIE9TU0xfUEtFWV9QQVJBTV9FQ19QT0lOVF9DT05WRVJTSU9O X0ZPUk1BVCwKLSsgICAgICAgICJ1bmNvbXByZXNzZWQiLCAwKTsKLSsgICAgcGFyYW1zWzFdID0g T1NTTF9QQVJBTV9jb25zdHJ1Y3RfZW5kKCk7Ci0rCi0rICAgIGlmIChFVlBfUEtFWV9zZXRfcGFy YW1zKHBrZXksIHBhcmFtcykgPD0gMAotKwkgICAgfHwgRVZQX1BLRVlfZ2V0X29jdGV0X3N0cmlu Z19wYXJhbShwa2V5LCBPU1NMX1BLRVlfUEFSQU1fUFVCX0tFWSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1Zl9sZW4sICZyZXF1aXJlZF9sZW4pIDw9 IDApIHsKLSsgICAgICAgIHJldHVybiBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsgICAgfQot KwotKyAgICBpZiAocmVxdWlyZWRfbGVuICE9IGJ1Zl9sZW4pIHsKLSsgICAgICAgIC8qIFJlZCBI YXQgY2VydGlmaWVkIEZJUFMgcHJvdmlkZXIgaWdub3JlcyBPU1NMX1BLRVlfUEFSQU1fRUNfUE9J TlRfQ09OVkVSU0lPTl9GT1JNQVQKLSsJICogV2UgbWF5IGhhdmUgdG8gcGVyZm9ybSB0aGUgY29u dmVyc2lvbiBtYW51YWxseSAqLwotKyAgICAgICAgaWYgKGxlbjJjdXJ2ZV9uYW1lKHJlcXVpcmVk X2xlbikgPT0gbGVuMmN1cnZlX25hbWUoYnVmX2xlbikpIHsKLSsJICAgIG91dF9sZW4gPSBkZWNv bXByZXNzX3B1Yl9rZXkoYnVmLCByZXF1aXJlZF9sZW4sIGJ1Zl9sZW4pOwotKwkgICAgaWYgKG91 dF9sZW4gIT0gYnVmX2xlbikgewotKwkgICAgICAgIGRlYnVnX2YoIkVycm9yIGRlY29tcHJlc3Np bmcgdGhlIGNvbXByZXNzZWQgcHVibGljIGtleSIpOwotKwkgICAgICAgIHJldHVybiBTU0hfRVJS X0xJQkNSWVBUT19FUlJPUjsKLSsJICAgIH0gZWxzZSB7Ci0rCQlyZXR1cm4gMDsKLSsJICAgIH0K LSsJfSBlbHNlIHsKLSsJICAgIGRlYnVnX2YoIlVuZXhwZWN0ZWQgbGVuZ3RoIG9mIHVuY29tcHJl c3NlZCBwdWJsaWMga2V5OiBleHBlY3RlZCAlZCwgZ290ICVkIiwgYnVmX2xlbiwgcmVxdWlyZWRf bGVuKTsKLSsJICAgIHJldHVybiBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsKLSsJfQotKyAgICB9 Ci0rCi0rICAgIHJldHVybiAwOwotK30KLSsvKiBuaXN0X2J5dGVzX2xlbiBzaG91bGQgYWx3YXlz IGJlIHVuY29tcHJlc3NlZCAqLwotK3N0YXRpYyBpbnQKLStrZXhfa2VtX21sa2VtX25pc3Rfa2V5 cGFpcihzdHJ1Y3Qga2V4ICprZXgsIHNpemVfdCBtbGtlbV9ieXRlc19sZW4sIHNpemVfdCBuaXN0 X2J5dGVzX2xlbikKLSt7Ci0rCXN0cnVjdCBzc2hidWYgKmJ1ZiA9IE5VTEw7Ci0rCXVfY2hhciAq Y3AgPSBOVUxMOwotKwlzaXplX3QgbmVlZDsKLSsJaW50IHIgPSBTU0hfRVJSX0lOVEVSTkFMX0VS Uk9SOwotKwl1X2NoYXIgKmNsaWVudF9rZXkgPSBOVUxMOwotKwotKwlpZiAoKGJ1ZiA9IHNzaGJ1 Zl9uZXcoKSkgPT0gTlVMTCkKLSsJCXJldHVybiBTU0hfRVJSX0FMTE9DX0ZBSUw7Ci0rCW5lZWQg PSBtbGtlbV9ieXRlc19sZW4gKyBuaXN0X2J5dGVzX2xlbjsKLSsJaWYgKChyID0gc3NoYnVmX3Jl c2VydmUoYnVmLCBuZWVkLCAmY3ApKSAhPSAwKQotKwkJZ290byBvdXQ7Ci0rCi0rCWlmIChtbGtl bV9ieXRlc19sZW4gPT0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUykgewotKwkJ Y2xpZW50X2tleSA9IGtleC0+bWxrZW03NjhfY2xpZW50X2tleTsKLSsJCXIgPSBtbGtlbTc2OF9r ZXlwYWlyX2dlbihjcCwgY2xpZW50X2tleSk7Ci0rCX0KLSsKLSsJaWYgKG1sa2VtX2J5dGVzX2xl biA9PSBjcnlwdG9fa2VtX21sa2VtMTAyNF9QVUJMSUNLRVlCWVRFUykgewotKwkJY2xpZW50X2tl eSA9IGtleC0+bWxrZW0xMDI0X2NsaWVudF9rZXk7Ci0rCQlyID0gbWxrZW0xMDI0X2tleXBhaXJf Z2VuKGNwLCBjbGllbnRfa2V5KTsKLSsJfQotKwotKwlpZiAoY2xpZW50X2tleSA9PSBOVUxMKQot KwkJZ290byBvdXQ7Ci0rCi0rCWlmIChyICE9IDApCi0rCQlnb3RvIG91dDsKLSsjaWZkZWYgREVC VUdfS0VYRUNESAotKwlkdW1wX2RpZ2VzdCgiY2xpZW50IHB1YmxpYyBrZXkgbWxrZW1YWFg6Iiwg Y3AsIG1sa2VtX2J5dGVzX2xlbik7Ci0rI2VuZGlmCi0rCWNwICs9IG1sa2VtX2J5dGVzX2xlbjsK LSsJaWYgKChrZXgtPmVjX2h5YnJpZF9jbGllbnRfa2V5ID0gbmlzdF9wa2V5X2tleWdlbihuaXN0 X2J5dGVzX2xlbikpID09IE5VTEwpCi0rCQlnb3RvIG91dDsKLSsKLSsJaWYgKChyID0gZ2V0X3Vu Y29tcHJlc3NlZF9lY19wdWJrZXkoa2V4LT5lY19oeWJyaWRfY2xpZW50X2tleSwgY3AsIG5pc3Rf Ynl0ZXNfbGVuKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKwotKyNpZmRlZiBERUJVR19LRVhFQ0RI Ci0rCWR1bXBfZGlnZXN0KCJjbGllbnQgcHVibGljIGtleSBOSVNUOiIsIGNwLCBuaXN0X2J5dGVz X2xlbik7Ci0rI2VuZGlmCi0rCS8qIHN1Y2Nlc3MgKi8KLSsJciA9IDA7Ci0rCWtleC0+Y2xpZW50 X3B1YiA9IGJ1ZjsKLSsJYnVmID0gTlVMTDsKLSsgb3V0OgotKwlzc2hidWZfZnJlZShidWYpOwot KyAgICAgICAgaWYgKHIgPT0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1IpCi0rCSAgIEVSUl9wcmlu dF9lcnJvcnNfZnAoc3RkZXJyKTsKLSsKLSsJcmV0dXJuIHI7Ci0rfQotKwotK3N0YXRpYyBpbnQK LStrZXhfa2VtX21sa2VtX25pc3RfZW5jKHN0cnVjdCBrZXggKmtleCwgY29uc3QgY2hhciAqbmlz dF9jdXJ2ZSwKLSsgICBjb25zdCBzdHJ1Y3Qgc3NoYnVmICpjbGllbnRfYmxvYiwgc3RydWN0IHNz aGJ1ZiAqKnNlcnZlcl9ibG9icCwKLSsgICBzdHJ1Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHAp Ci0rewotKwlzdHJ1Y3Qgc3NoYnVmICpzZXJ2ZXJfYmxvYiA9IE5VTEw7Ci0rCXN0cnVjdCBzc2hi dWYgKmJ1ZiA9IE5VTEw7Ci0rCWNvbnN0IHVfY2hhciAqY2xpZW50X3B1YjsKLSsJdV9jaGFyIHNl cnZlcl9wdWJbTklTVF9CVUZfTUFYX1NJWkVdOwotKwl1X2NoYXIgZW5jX291dFtjcnlwdG9fa2Vt X21sa2VtMTAyNF9DSVBIRVJURVhUQllURVNdOwotKwl1X2NoYXIgc2VjcmV0W2NyeXB0b19rZW1f bWxrZW03NjhfQllURVNdOwotKwlFVlBfUEtFWSAqc2VydmVyX2tleSA9IE5VTEw7Ci0rCXVfY2hh ciBoYXNoW1NTSF9ESUdFU1RfTUFYX0xFTkdUSF07Ci0rCXNpemVfdCBjbGllbnRfYnVmX2xlbiwg bWxrZW1fYnVmX2xlbiwgZWNkaF9idWZfbGVuLCBzZXJ2ZXJfa2V5X2xlbiwgZW5jX291dF9sZW47 Ci0rCWludCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsKLSsJKnNlcnZlcl9ibG9icCA9 IE5VTEw7Ci0rCSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7Ci0rCi0rCWNsaWVudF9idWZfbGVuID0g c3NoYnVmX2xlbihjbGllbnRfYmxvYik7Ci0rCS8qIGNsaWVudF9ibG9iIGNvbnRhaW5zIGJvdGgg S0VNIGFuZCBFQ0RIIGNsaWVudCBwdWJrZXlzICovCi0rCWlmIChzdHJjbXAobmlzdF9jdXJ2ZSwg IlAtMjU2IikgPT0gMCkgewotKwkJaWYgKGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllU RVMgPiBjbGllbnRfYnVmX2xlbikKLSsJCQlyZXR1cm4gcjsKLSsKLSsJCWVjZGhfYnVmX2xlbiA9 IGNsaWVudF9idWZfbGVuIC0gY3J5cHRvX2tlbV9tbGtlbTc2OF9QVUJMSUNLRVlCWVRFUzsKLSsJ CWlmIChlY2RoX2J1Zl9sZW4gIT0gTklTVF9QMjU2X0NPTVBSRVNTRURfTEVOICYmCi0rCQkJZWNk aF9idWZfbGVuICE9IE5JU1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOKQotKwkJCXJldHVybiByOwot KwkJbWxrZW1fYnVmX2xlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVM7Ci0r CQllbmNfb3V0X2xlbiA9IGNyeXB0b19rZW1fbWxrZW03NjhfQ0lQSEVSVEVYVEJZVEVTOwotKwkJ c2VydmVyX2tleV9sZW4gPSBOSVNUX1AyNTZfVU5DT01QUkVTU0VEX0xFTjsKLSsJfSBlbHNlIGlm IChzdHJjbXAobmlzdF9jdXJ2ZSwgIlAtMzg0IikgPT0gMCkgewotKwkJaWYgKGNyeXB0b19rZW1f bWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTID4gY2xpZW50X2J1Zl9sZW4pCi0rCQkJcmV0dXJuIHI7 Ci0rCi0rCQllY2RoX2J1Zl9sZW4gPSBjbGllbnRfYnVmX2xlbiAtIGNyeXB0b19rZW1fbWxrZW0x MDI0X1BVQkxJQ0tFWUJZVEVTOwotKwkJaWYgKGVjZGhfYnVmX2xlbiAhPSBOSVNUX1AzODRfQ09N UFJFU1NFRF9MRU4gJiYKLSsJCQllY2RoX2J1Zl9sZW4gIT0gTklTVF9QMzg0X1VOQ09NUFJFU1NF RF9MRU4pCi0rCQkJcmV0dXJuIHI7Ci0rCQltbGtlbV9idWZfbGVuID0gY3J5cHRvX2tlbV9tbGtl bTEwMjRfUFVCTElDS0VZQllURVM7Ci0rCQllbmNfb3V0X2xlbiA9IGNyeXB0b19rZW1fbWxrZW0x MDI0X0NJUEhFUlRFWFRCWVRFUzsKLSsJCXNlcnZlcl9rZXlfbGVuID0gTklTVF9QMzg0X1VOQ09N UFJFU1NFRF9MRU47Ci0rCX0gZWxzZQotKwkJcmV0dXJuIHI7Ci0rCi0rCWNsaWVudF9wdWIgPSBz c2hidWZfcHRyKGNsaWVudF9ibG9iKTsKLSsjaWZkZWYgREVCVUdfS0VYRUNESAotKwlkdW1wX2Rp Z2VzdCgiY2xpZW50IHB1YmxpYyBrZXkgbWxrZW06IiwgY2xpZW50X3B1YiwgbWxrZW1fYnVmX2xl bik7Ci0rCWR1bXBfZGlnZXN0KCJjbGllbnQgcHVibGljIGtleSBOSVNUOiIsIGNsaWVudF9wdWIg KyBtbGtlbV9idWZfbGVuLCBlY2RoX2J1Zl9sZW4pOwotKyNlbmRpZgotKwotKwkvKiBhbGxvY2F0 ZSBidWZmZXIgZm9yIGNvbmNhdGVuYXRpb24gb2YgS0VNIGtleSBhbmQgRUNESCBzaGFyZWQga2V5 ICovCi0rCS8qIHRoZSBidWZmZXIgd2lsbCBiZSBoYXNoZWQgYW5kIHRoZSByZXN1bHQgaXMgdGhl IHNoYXJlZCBzZWNyZXQgKi8KLSsJaWYgKChidWYgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsK LSsJCXIgPSBTU0hfRVJSX0FMTE9DX0ZBSUw7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwkvKiBhbGxv Y2F0ZSBzcGFjZSBmb3IgZW5jcnlwdGVkIEtFTSBrZXkgYW5kIEVDREggcHViIGtleSAqLwotKwlp ZiAoKHNlcnZlcl9ibG9iID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKSB7Ci0rCQlyID0gU1NIX0VS Ul9BTExPQ19GQUlMOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsJciA9IChtbGtlbV9idWZfbGVuID09 IGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMpID8KLSsJCW1sa2VtNzY4X2VuY2Fw X3NlY3JldChjbGllbnRfcHViLCBzZWNyZXQsIGVuY19vdXQpIDoKLSsJCW1sa2VtMTAyNF9lbmNh cF9zZWNyZXQoY2xpZW50X3B1Yiwgc2VjcmV0LCBlbmNfb3V0KTsKLSsKLSsJaWYgKHIgIT0gMCkK LSsJCWdvdG8gb3V0OwotKwotKwkvKiBnZW5lcmF0ZSBFQ0RIIGtleSBwYWlyLCBzdG9yZSBzZXJ2 ZXIgcHVia2V5IGFmdGVyIGNpcGhlcnRleHQgKi8KLSsJc2VydmVyX2tleSA9IG5pc3RfcGtleV9r ZXlnZW4oc2VydmVyX2tleV9sZW4pOwotKwotKwlpZiAoKHIgPSBnZXRfdW5jb21wcmVzc2VkX2Vj X3B1YmtleShzZXJ2ZXJfa2V5LCBzZXJ2ZXJfcHViLCBzZXJ2ZXJfa2V5X2xlbikgIT0gMCkgfHwK LSsJICAgIChyID0gc3NoYnVmX3B1dChidWYsIHNlY3JldCwgc2l6ZW9mKHNlY3JldCkpKSAhPSAw IHx8Ci0rCSAgICAociA9IHNzaGJ1Zl9wdXQoc2VydmVyX2Jsb2IsIGVuY19vdXQsIGVuY19vdXRf bGVuKSAhPSAwKXx8Ci0rCSAgICAociA9IHNzaGJ1Zl9wdXQoc2VydmVyX2Jsb2IsIHNlcnZlcl9w dWIsIHNlcnZlcl9rZXlfbGVuKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKwotKwkvKiBhcHBlbmQg RUNESCBzaGFyZWQga2V5ICovCi0rCWNsaWVudF9wdWIgKz0gbWxrZW1fYnVmX2xlbjsKLSsJaWYg KChyID0ga2V4X25pc3Rfc2hhcmVkX2tleV9leHQoc2VydmVyX2tleSwgY2xpZW50X3B1YiwgZWNk aF9idWZfbGVuLCBidWYpKSA8IDApCi0rCQlnb3RvIG91dDsKLSsJaWYgKChyID0gc3NoX2RpZ2Vz dF9idWZmZXIoa2V4LT5oYXNoX2FsZywgYnVmLCBoYXNoLCBzaXplb2YoaGFzaCkpKSAhPSAwKQot KwkJZ290byBvdXQ7Ci0rI2lmZGVmIERFQlVHX0tFWEVDREgKLSsJZHVtcF9kaWdlc3QoInNlcnZl ciBwdWJsaWMgTklTVDoiLCBzZXJ2ZXJfcHViLCBzZXJ2ZXJfa2V5X2xlbik7Ci0rCWR1bXBfZGln ZXN0KCJzZXJ2ZXIgY2lwaGVyIHRleHQ6IiwgZW5jX291dCwgZW5jX291dF9sZW4pOwotKwlkdW1w X2RpZ2VzdCgic2VydmVyIGtlbSBrZXk6Iiwgc2VjcmV0LCBzaXplb2Yoc2VjcmV0KSk7Ci0rCWR1 bXBfZGlnZXN0KCJjb25jYXRlbmF0aW9uIG9mIEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtleToi LAotKwkgICAgc3NoYnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOwotKyNlbmRpZgotKwkv KiBzdHJpbmctZW5jb2RlZCBoYXNoIGlzIHJlc3VsdGluZyBzaGFyZWQgc2VjcmV0ICovCi0rCXNz aGJ1Zl9yZXNldChidWYpOwotKwlpZiAoKHIgPSBzc2hidWZfcHV0X3N0cmluZyhidWYsIGhhc2gs Ci0rCSAgICBzc2hfZGlnZXN0X2J5dGVzKGtleC0+aGFzaF9hbGcpKSkgIT0gMCkKLSsJCWdvdG8g b3V0OwotKyNpZmRlZiBERUJVR19LRVhFQ0RICi0rCWR1bXBfZGlnZXN0KCJlbmNvZGVkIHNoYXJl ZCBzZWNyZXQ6Iiwgc3NoYnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOwotKyNlbmRpZgot KwkvKiBzdWNjZXNzICovCi0rCXIgPSAwOwotKwkqc2VydmVyX2Jsb2JwID0gc2VydmVyX2Jsb2I7 Ci0rCSpzaGFyZWRfc2VjcmV0cCA9IGJ1ZjsKLSsJc2VydmVyX2Jsb2IgPSBOVUxMOwotKwlidWYg PSBOVUxMOwotKyBvdXQ6Ci0rCWV4cGxpY2l0X2J6ZXJvKGhhc2gsIHNpemVvZihoYXNoKSk7Ci0r CUVWUF9QS0VZX2ZyZWUoc2VydmVyX2tleSk7Ci0rCWV4cGxpY2l0X2J6ZXJvKGVuY19vdXQsIHNp emVvZihlbmNfb3V0KSk7Ci0rCWV4cGxpY2l0X2J6ZXJvKHNlY3JldCwgc2l6ZW9mKHNlY3JldCkp OwotKwlzc2hidWZfZnJlZShzZXJ2ZXJfYmxvYik7Ci0rCXNzaGJ1Zl9mcmVlKGJ1Zik7Ci0rCXJl dHVybiByOwotK30KLSsKLStzdGF0aWMgaW50Ci0ra2V4X2tlbV9tbGtlbV9uaXN0X2RlYyhzdHJ1 Y3Qga2V4ICprZXgsCi0rICAgIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNlcnZlcl9ibG9iLCBzdHJ1 Y3Qgc3NoYnVmICoqc2hhcmVkX3NlY3JldHAsCi0rICAgIHNpemVfdCBtbGtlbV9sZW4pCi0rewot KwlzdHJ1Y3Qgc3NoYnVmICpidWYgPSBOVUxMOwotKwljb25zdCB1X2NoYXIgKmNpcGhlcnRleHQs ICpzZXJ2ZXJfcHViOwotKwl1X2NoYXIgaGFzaFtTU0hfRElHRVNUX01BWF9MRU5HVEhdOwotKwl1 X2NoYXIgZGVjYXBbY3J5cHRvX2tlbV9tbGtlbTc2OF9CWVRFU107Ci0rCWludCByOwotKwlzaXpl X3QgbmlzdF9sZW47Ci0rCi0rCSpzaGFyZWRfc2VjcmV0cCA9IE5VTEw7Ci0rCi0rCWlmIChzc2hi dWZfbGVuKHNlcnZlcl9ibG9iKSA8IG1sa2VtX2xlbikgewotKwkJciA9IFNTSF9FUlJfU0lHTkFU VVJFX0lOVkFMSUQ7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwluaXN0X2xlbiA9IHNzaGJ1Zl9s ZW4oc2VydmVyX2Jsb2IpIC0gbWxrZW1fbGVuOwotKwotKwlzd2l0Y2ggKG1sa2VtX2xlbikgewot KwkJY2FzZSBjcnlwdG9fa2VtX21sa2VtNzY4X0NJUEhFUlRFWFRCWVRFUzoKLSsJCQlpZiAobmlz dF9sZW4gIT0gTklTVF9QMjU2X0NPTVBSRVNTRURfTEVOCi0rCQkJCSYmIG5pc3RfbGVuICE9IE5J U1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOKSB7Ci0rCQkJCXIgPSBTU0hfRVJSX1NJR05BVFVSRV9J TlZBTElEOwotKwkJCQlnb3RvIG91dDsKLSsJCQl9Ci0rCQlicmVhazsKLSsJCWNhc2UgY3J5cHRv X2tlbV9tbGtlbTEwMjRfQ0lQSEVSVEVYVEJZVEVTOgotKwkJCWlmIChuaXN0X2xlbiAhPSBOSVNU X1AzODRfQ09NUFJFU1NFRF9MRU4KLSsJCQkJJiYgbmlzdF9sZW4gIT0gTklTVF9QMzg0X1VOQ09N UFJFU1NFRF9MRU4pIHsKLSsJCQkJciA9IFNTSF9FUlJfU0lHTkFUVVJFX0lOVkFMSUQ7Ci0rCQkJ CWdvdG8gb3V0OwotKwkJCX0KLSsJCWJyZWFrOwotKwl9Ci0rCi0rCWNpcGhlcnRleHQgPSBzc2hi dWZfcHRyKHNlcnZlcl9ibG9iKTsKLSsJc2VydmVyX3B1YiA9IGNpcGhlcnRleHQgKyBtbGtlbV9s ZW47Ci0rCS8qIGhhc2ggY29uY2F0ZW5hdGlvbiBvZiBLRU0ga2V5IGFuZCBFQ0RIIHNoYXJlZCBr ZXkgKi8KLSsJaWYgKChidWYgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpIHsKLSsJCXIgPSBTU0hf RVJSX0FMTE9DX0ZBSUw7Ci0rCQlnb3RvIG91dDsKLSsJfQotKyNpZmRlZiBERUJVR19LRVhFQ0RI Ci0rCWR1bXBfZGlnZXN0KCJzZXJ2ZXIgY2lwaGVyIHRleHQ6IiwgY2lwaGVydGV4dCwgbWxrZW1f bGVuKTsKLSsJZHVtcF9kaWdlc3QoInNlcnZlciBwdWJsaWMga2V5IE5JU1Q6Iiwgc2VydmVyX3B1 YiwgbmlzdF9sZW4pOwotKyNlbmRpZgotKwlyID0gKG1sa2VtX2xlbiA9PSBjcnlwdG9fa2VtX21s a2VtNzY4X0NJUEhFUlRFWFRCWVRFUykgPwotKwkJbWxrZW03NjhfZGVjYXBfc2VjcmV0KGtleC0+ bWxrZW03NjhfY2xpZW50X2tleSwgY2lwaGVydGV4dCwgZGVjYXApIDoKLSsJCW1sa2VtMTAyNF9k ZWNhcF9zZWNyZXQoa2V4LT5tbGtlbTEwMjRfY2xpZW50X2tleSwgY2lwaGVydGV4dCwgZGVjYXAp OwotKwotKwlpZiAociAhPSAwKQotKwkJZ290byBvdXQ7Ci0rCWlmICgociA9IHNzaGJ1Zl9wdXQo YnVmLCBkZWNhcCwgc2l6ZW9mKGRlY2FwKSkpICE9IDApCi0rCQlnb3RvIG91dDsKLSsJaWYgKChy ID0ga2V4X25pc3Rfc2hhcmVkX2tleV9leHQoa2V4LT5lY19oeWJyaWRfY2xpZW50X2tleSwgc2Vy dmVyX3B1YiwKLSsJCW5pc3RfbGVuLCBidWYpKSA8IDApCi0rCQlnb3RvIG91dDsKLSsJaWYgKChy ID0gc3NoX2RpZ2VzdF9idWZmZXIoa2V4LT5oYXNoX2FsZywgYnVmLAotKwkgICAgaGFzaCwgc2l6 ZW9mKGhhc2gpKSkgIT0gMCkKLSsJCWdvdG8gb3V0OwotKyNpZmRlZiBERUJVR19LRVhFQ0RICi0r CWR1bXBfZGlnZXN0KCJjbGllbnQga2VtIGtleToiLCBkZWNhcCwgc2l6ZW9mKGRlY2FwKSk7Ci0r CWR1bXBfZGlnZXN0KCJjb25jYXRlbmF0aW9uIG9mIEtFTSBrZXkgYW5kIEVDREggc2hhcmVkIGtl eToiLAotKwkgICAgc3NoYnVmX3B0cihidWYpLCBzc2hidWZfbGVuKGJ1ZikpOwotKyNlbmRpZgot Kwlzc2hidWZfcmVzZXQoYnVmKTsKLSsJaWYgKChyID0gc3NoYnVmX3B1dF9zdHJpbmcoYnVmLCBo YXNoLAotKwkgICAgc3NoX2RpZ2VzdF9ieXRlcyhrZXgtPmhhc2hfYWxnKSkpICE9IDApCi0rCQln b3RvIG91dDsKLSsjaWZkZWYgREVCVUdfS0VYRUNESAotKwlkdW1wX2RpZ2VzdCgiZW5jb2RlZCBz aGFyZWQgc2VjcmV0OiIsIHNzaGJ1Zl9wdHIoYnVmKSwgc3NoYnVmX2xlbihidWYpKTsKLSsjZW5k aWYKLSsJLyogc3VjY2VzcyAqLwotKwlyID0gMDsKLSsJKnNoYXJlZF9zZWNyZXRwID0gYnVmOwot KwlidWYgPSBOVUxMOwotKyBvdXQ6Ci0rCWV4cGxpY2l0X2J6ZXJvKGhhc2gsIHNpemVvZihoYXNo KSk7Ci0rCWV4cGxpY2l0X2J6ZXJvKGRlY2FwLCBzaXplb2YoZGVjYXApKTsKLSsJc3NoYnVmX2Zy ZWUoYnVmKTsKLSsJcmV0dXJuIHI7Ci0rfQotKwotK2ludAotK2tleF9rZW1fbWxrZW03NjhuaXN0 cDI1Nl9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKLSt7Ci0rCXJldHVybiBrZXhfa2VtX21sa2Vt X25pc3Rfa2V5cGFpcihrZXgsIGNyeXB0b19rZW1fbWxrZW03NjhfUFVCTElDS0VZQllURVMsIE5J U1RfUDI1Nl9VTkNPTVBSRVNTRURfTEVOKTsKLSt9Ci0rCi0raW50Ci0ra2V4X2tlbV9tbGtlbTc2 OG5pc3RwMjU2X2VuYyhzdHJ1Y3Qga2V4ICprZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKmNsaWVu dF9ibG9iLAotKyAgICBzdHJ1Y3Qgc3NoYnVmICoqc2VydmVyX2Jsb2JwLCBzdHJ1Y3Qgc3NoYnVm ICoqc2hhcmVkX3NlY3JldHApCi0rewotKwlyZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2VuYyhr ZXgsICJQLTI1NiIsIGNsaWVudF9ibG9iLCBzZXJ2ZXJfYmxvYnAsIHNoYXJlZF9zZWNyZXRwKTsK LSt9Ci0rCi0raW50Ci0ra2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2RlYyhzdHJ1Y3Qga2V4ICpr ZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNlcnZlcl9ibG9iLAotKyAgICBzdHJ1Y3Qgc3NoYnVm ICoqc2hhcmVkX3NlY3JldHApCi0rewotKwlyZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2RlYyhr ZXgsIHNlcnZlcl9ibG9iLCBzaGFyZWRfc2VjcmV0cCwKLSsJCWNyeXB0b19rZW1fbWxrZW03Njhf Q0lQSEVSVEVYVEJZVEVTKTsKLSt9Ci0rCi0raW50Ci0ra2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4 NF9rZXlwYWlyKHN0cnVjdCBrZXggKmtleCkKLSt7Ci0rCXJldHVybiBrZXhfa2VtX21sa2VtX25p c3Rfa2V5cGFpcihrZXgsIGNyeXB0b19rZW1fbWxrZW0xMDI0X1BVQkxJQ0tFWUJZVEVTLCBOSVNU X1AzODRfVU5DT01QUkVTU0VEX0xFTik7Ci0rfQotKwotK2ludAotK2tleF9rZW1fbWxrZW0xMDI0 bmlzdHAzODRfZW5jKHN0cnVjdCBrZXggKmtleCwgY29uc3Qgc3RydWN0IHNzaGJ1ZiAqY2xpZW50 X2Jsb2IsCi0rICAgIHN0cnVjdCBzc2hidWYgKipzZXJ2ZXJfYmxvYnAsIHN0cnVjdCBzc2hidWYg KipzaGFyZWRfc2VjcmV0cCkKLSt7Ci0rCXJldHVybiBrZXhfa2VtX21sa2VtX25pc3RfZW5jKGtl eCwgIlAtMzg0IiwgY2xpZW50X2Jsb2IsIHNlcnZlcl9ibG9icCwgc2hhcmVkX3NlY3JldHApOwot K30KLSsKLStpbnQKLStrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2RlYyhzdHJ1Y3Qga2V4ICpr ZXgsIGNvbnN0IHN0cnVjdCBzc2hidWYgKnNlcnZlcl9ibG9iLAotKyAgICBzdHJ1Y3Qgc3NoYnVm ICoqc2hhcmVkX3NlY3JldHApCi0rewotKwlyZXR1cm4ga2V4X2tlbV9tbGtlbV9uaXN0X2RlYyhr ZXgsIHNlcnZlcl9ibG9iLCBzaGFyZWRfc2VjcmV0cCwKLSsJCWNyeXB0b19rZW1fbWxrZW0xMDI0 X0NJUEhFUlRFWFRCWVRFUyk7Ci0rfQotKwotICNlbHNlIC8qIFVTRV9NTEtFTTc2OFgyNTUxOSAq LwotIGludAotIGtleF9rZW1fbWxrZW03Njh4MjU1MTlfa2V5cGFpcihzdHJ1Y3Qga2V4ICprZXgp Ci1AQCAtNTY3LDQgKzExNjQsMzkgQEAga2V4X2tlbV9tbGtlbTc2OHgyNTUxOV9kZWMoc3RydWN0 IGtleCAqa2V4LAotIHsKLSAJcmV0dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7Ci0g fQotKwotK2ludAkga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2tleXBhaXIoc3RydWN0IGtleCAq KQotK3sKLSsJcmV0dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5TVVBQT1JURUQ7Ci0rfQotKwotK2lu dAkga2V4X2tlbV9tbGtlbTc2OG5pc3RwMjU2X2VuYyhzdHJ1Y3Qga2V4ICosIGNvbnN0IHN0cnVj dCBzc2hidWYgKiwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqKiwgc3RydWN0IHNzaGJ1ZiAqKikKLSt7 Ci0rCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VOU1VQUE9SVEVEOwotK30KLSsKLStpbnQJIGtl eF9rZW1fbWxrZW03NjhuaXN0cDI1Nl9kZWMoc3RydWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3No YnVmICosCi0rICAgIHN0cnVjdCBzc2hidWYgKiopCi0rewotKwlyZXR1cm4gU1NIX0VSUl9TSUdO X0FMR19VTlNVUFBPUlRFRDsKLSt9Ci0rCi0raW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0 X2tleXBhaXIoc3RydWN0IGtleCAqKQotK3sKLSsJcmV0dXJuIFNTSF9FUlJfU0lHTl9BTEdfVU5T VVBQT1JURUQ7Ci0rfQotKwotK2ludAkga2V4X2tlbV9tbGtlbTEwMjRuaXN0cDM4NF9lbmMoc3Ry dWN0IGtleCAqLCBjb25zdCBzdHJ1Y3Qgc3NoYnVmICosCi0rICAgIHN0cnVjdCBzc2hidWYgKios IHN0cnVjdCBzc2hidWYgKiopCi0rewotKwlyZXR1cm4gU1NIX0VSUl9TSUdOX0FMR19VTlNVUFBP UlRFRDsKLSt9Ci0rCi0raW50CSBrZXhfa2VtX21sa2VtMTAyNG5pc3RwMzg0X2RlYyhzdHJ1Y3Qg a2V4ICosIGNvbnN0IHN0cnVjdCBzc2hidWYgKiwKLSsgICAgc3RydWN0IHNzaGJ1ZiAqKikKLSt7 Ci0rCXJldHVybiBTU0hfRVJSX1NJR05fQUxHX1VOU1VQUE9SVEVEOwotK30KLSsKLSAjZW5kaWYg LyogVVNFX01MS0VNNzY4WDI1NTE5ICovCi1kaWZmIC0tZ2l0IGEvbW9uaXRvci5jIGIvbW9uaXRv ci5jCi1pbmRleCA2YzgzNzM5ZWUuLjJmMTU0YTNkNyAxMDA2NDQKLS0tLSBhL21vbml0b3IuYwot KysrIGIvbW9uaXRvci5jCi1AQCAtMjAxNCw2ICsyMDE0LDggQEAgbW9uaXRvcl9hcHBseV9rZXlz dGF0ZShzdHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBtb25pdG9yICpwbW9uaXRvcikKLSAJa2V4LT5r ZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0gCWtleC0+a2V4W0tFWF9L RU1fU05UUlVQNzYxWDI1NTE5X1NIQTUxMl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJa2V4LT5rZXhb S0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0rCWtleC0+ a2V4W0tFWF9LRU1fTUxLRU03NjhOSVNUUDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0r CWtleC0+a2V4W0tFWF9LRU1fTUxLRU0xMDI0TklTVFAzODRfU0hBMzg0XSA9IGtleF9nZW5fc2Vy dmVyOwotIAlrZXgtPmxvYWRfaG9zdF9wdWJsaWNfa2V5PSZnZXRfaG9zdGtleV9wdWJsaWNfYnlf dHlwZTsKLSAJa2V4LT5sb2FkX2hvc3RfcHJpdmF0ZV9rZXk9JmdldF9ob3N0a2V5X3ByaXZhdGVf YnlfdHlwZTsKLSAJa2V4LT5ob3N0X2tleV9pbmRleD0mZ2V0X2hvc3RrZXlfaW5kZXg7Ci1kaWZm IC0tZ2l0IGEvbXlwcm9wb3NhbC5oIGIvbXlwcm9wb3NhbC5oCi1pbmRleCAzZTBlYzY4MjYuLjAw NzM0N2ZjMyAxMDA2NDQKLS0tLSBhL215cHJvcG9zYWwuaAotKysrIGIvbXlwcm9wb3NhbC5oCi1A QCAtMjYsNiArMjYsOCBAQAotIAotICNkZWZpbmUgS0VYX1NFUlZFUl9LRVgJXAotIAkibWxrZW03 Njh4MjU1MTktc2hhMjU2LCIgXAotKwkibWxrZW03NjhuaXN0cDI1Ni1zaGEyNTYsIiBcCi0rCSJt bGtlbTEwMjRuaXN0cDM4NC1zaGEzODQsIiBcCi0gCSJzbnRydXA3NjF4MjU1MTktc2hhNTEyLCIg XAotIAkic250cnVwNzYxeDI1NTE5LXNoYTUxMkBvcGVuc3NoLmNvbSwiIFwKLSAJImN1cnZlMjU1 MTktc2hhMjU2LCIgXAotQEAgLTk3LDYgKzk5LDggQEAKLSAJImFlczE5Mi1jYmMsYWVzMjU2LWNi YyxyaWpuZGFlbC1jYmNAbHlzYXRvci5saXUuc2UsIiBcCi0gCSJhZXMxMjgtZ2NtQG9wZW5zc2gu Y29tLGFlczI1Ni1nY21Ab3BlbnNzaC5jb20iCi0gI2RlZmluZSBLRVhfREVGQVVMVF9LRVhfRklQ UwkJXAotKwkibWxrZW03NjhuaXN0cDI1Ni1zaGEyNTYsIiBcCi0rCSJtbGtlbTEwMjRuaXN0cDM4 NC1zaGEzODQsIiBcCi0gCSJlY2RoLXNoYTItbmlzdHAyNTYsIiBcCi0gCSJlY2RoLXNoYTItbmlz dHAzODQsIiBcCi0gCSJlY2RoLXNoYTItbmlzdHA1MjEsIiBcCi1kaWZmIC0tZ2l0IGEvcmVncmVz cy91bml0dGVzdHMva2V4L3Rlc3Rfa2V4LmMgYi9yZWdyZXNzL3VuaXR0ZXN0cy9rZXgvdGVzdF9r ZXguYwotaW5kZXggZjQ3MDBkZWViLi45OWE4ZTNiNDYgMTAwNjQ0Ci0tLS0gYS9yZWdyZXNzL3Vu aXR0ZXN0cy9rZXgvdGVzdF9rZXguYwotKysrIGIvcmVncmVzcy91bml0dGVzdHMva2V4L3Rlc3Rf a2V4LmMKLUBAIC0xNzEsNiArMTcxLDggQEAgZG9fa2V4X3dpdGhfa2V5KGNoYXIgKmtleCwgY2hh ciAqY2lwaGVyLCBjaGFyICptYWMsCi0gCXNlcnZlcjItPmtleC0+a2V4W0tFWF9DMjU1MTlfU0hB MjU2XSA9IGtleF9nZW5fc2VydmVyOwotIAlzZXJ2ZXIyLT5rZXgtPmtleFtLRVhfS0VNX1NOVFJV UDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0gCXNlcnZlcjItPmtleC0+a2V4 W0tFWF9LRU1fTUxLRU03NjhYMjU1MTlfU0hBMjU2XSA9IGtleF9nZW5fc2VydmVyOwotKwlzZXJ2 ZXIyLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4TklTVFAyNTZfU0hBMjU2XSA9IGtleF9nZW5f c2VydmVyOwotKwlzZXJ2ZXIyLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0X1NI QTM4NF0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJc2VydmVyMi0+a2V4LT5sb2FkX2hvc3RfcHVibGlj X2tleSA9IHNlcnZlci0+a2V4LT5sb2FkX2hvc3RfcHVibGljX2tleTsKLSAJc2VydmVyMi0+a2V4 LT5sb2FkX2hvc3RfcHJpdmF0ZV9rZXkgPSBzZXJ2ZXItPmtleC0+bG9hZF9ob3N0X3ByaXZhdGVf a2V5OwotIAlzZXJ2ZXIyLT5rZXgtPnNpZ24gPSBzZXJ2ZXItPmtleC0+c2lnbjsKLUBAIC0yNDgs NiArMjUwLDggQEAga2V4X3Rlc3RzKHZvaWQpCi0gCX0KLSAjIGlmZGVmIFVTRV9NTEtFTTc2OFgy NTUxOQotIAlkb19rZXgoIm1sa2VtNzY4eDI1NTE5LXNoYTI1NiIpOwotKwlkb19rZXgoIm1sa2Vt NzY4bmlzdHAyNTYtc2hhMjU2Iik7Ci0rCWRvX2tleCgibWxrZW0xMDI0bmlzdHAzODQtc2hhMzg0 Iik7Ci0gIyBlbmRpZiAvKiBVU0VfTUxLRU03NjhYMjU1MTkgKi8KLSAjIGlmZGVmIFVTRV9TTlRS VVA3NjFYMjU1MTkKLSAJZG9fa2V4KCJzbnRydXA3NjF4MjU1MTktc2hhNTEyIik7Ci1kaWZmIC0t Z2l0IGEvc3NoLWtleXNjYW4uYyBiL3NzaC1rZXlzY2FuLmMKLWluZGV4IDExNjE4YWU4YS4uMmY0 MDM3OTcyIDEwMDY0NAotLS0tIGEvc3NoLWtleXNjYW4uYwotKysrIGIvc3NoLWtleXNjYW4uYwot QEAgLTI5MCw2ICsyOTAsOCBAQCBrZXlncmFiX3NzaDIoY29uICpjKQotIAljLT5jX3NzaC0+a2V4 LT5rZXhbS0VYX0MyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7Ci0gCWMtPmNfc3NoLT5r ZXgtPmtleFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9jbGllbnQ7 Ci0gCWMtPmNfc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBr ZXhfZ2VuX2NsaWVudDsKLSsJYy0+Y19zc2gtPmtleC0+a2V4W0tFWF9LRU1fTUxLRU03NjhOSVNU UDI1Nl9TSEEyNTZdID0ga2V4X2dlbl9jbGllbnQ7Ci0rCWMtPmNfc3NoLT5rZXgtPmtleFtLRVhf S0VNX01MS0VNMTAyNE5JU1RQMzg0X1NIQTM4NF0gPSBrZXhfZ2VuX2NsaWVudDsKLSAJc3NoX3Nl dF92ZXJpZnlfaG9zdF9rZXlfY2FsbGJhY2soYy0+Y19zc2gsIGtleV9wcmludF93cmFwcGVyKTsK LSAJLyoKLSAJICogZG8gdGhlIGtleS1leGNoYW5nZSB1bnRpbCBhbiBlcnJvciBvY2N1cnMgb3Ig dW50aWwKLWRpZmYgLS1naXQgYS9zc2hfYXBpLmMgYi9zc2hfYXBpLmMKLWluZGV4IDdiZGNlZTE0 OC4uZDIwYjAzYTAwIDEwMDY0NAotLS0tIGEvc3NoX2FwaS5jCi0rKysgYi9zc2hfYXBpLmMKLUBA IC0xMzUsNiArMTM1LDggQEAgc3NoX2luaXQoc3RydWN0IHNzaCAqKnNzaHAsIGludCBpc19zZXJ2 ZXIsIHN0cnVjdCBrZXhfcGFyYW1zICprZXhfcGFyYW1zKQotIAkJc3NoLT5rZXgtPmtleFtLRVhf QzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSAJCXNzaC0+a2V4LT5rZXhbS0VYX0tF TV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fc2VydmVyOwotIAkJc3NoLT5rZXgt PmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZlcjsKLSsJ CXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBrZXhfZ2Vu X3NlcnZlcjsKLSsJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9TSEEz ODRdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0gCQlzc2gtPmtleC0+bG9hZF9ob3N0X3B1YmxpY19rZXk9 Jl9zc2hfaG9zdF9wdWJsaWNfa2V5OwotIAkJc3NoLT5rZXgtPmxvYWRfaG9zdF9wcml2YXRlX2tl eT0mX3NzaF9ob3N0X3ByaXZhdGVfa2V5OwotIAkJc3NoLT5rZXgtPnNpZ249Jl9zc2hfaG9zdF9r ZXlfc2lnbjsKLUBAIC0xNTQsNiArMTU2LDggQEAgc3NoX2luaXQoc3RydWN0IHNzaCAqKnNzaHAs IGludCBpc19zZXJ2ZXIsIHN0cnVjdCBrZXhfcGFyYW1zICprZXhfcGFyYW1zKQotIAkJc3NoLT5r ZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKLSAJCXNzaC0+a2V4 LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5fY2xpZW50Owot IAkJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2Vu X2NsaWVudDsKLSsJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1 Nl0gPSBrZXhfZ2VuX2NsaWVudDsKLSsJCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjRO SVNUUDM4NF9TSEEzODRdID0ga2V4X2dlbl9jbGllbnQ7Ci0gCQlzc2gtPmtleC0+dmVyaWZ5X2hv c3Rfa2V5ID0mX3NzaF92ZXJpZnlfaG9zdF9rZXk7Ci0gCX0KLSAJKnNzaHAgPSBzc2g7Ci1kaWZm IC0tZ2l0IGEvc3NoY29ubmVjdDIuYyBiL3NzaGNvbm5lY3QyLmMKLWluZGV4IDJkOThmYzNkYS4u ODhlMjc5NTVhIDEwMDY0NAotLS0tIGEvc3NoY29ubmVjdDIuYwotKysrIGIvc3NoY29ubmVjdDIu YwotQEAgLTM0Nyw2ICszNDcsOCBAQCBzc2hfa2V4MihzdHJ1Y3Qgc3NoICpzc2gsIGNoYXIgKmhv c3QsIHN0cnVjdCBzb2NrYWRkciAqaG9zdGFkZHIsIHVfc2hvcnQgcG9ydCwKLSAJc3NoLT5rZXgt PmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX2NsaWVudDsKLSAJc3NoLT5rZXgtPmtl eFtLRVhfS0VNX1NOVFJVUDc2MVgyNTUxOV9TSEE1MTJdID0ga2V4X2dlbl9jbGllbnQ7Ci0gCXNz aC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OFgyNTUxOV9TSEEyNTZdID0ga2V4X2dlbl9jbGll bnQ7Ci0rCXNzaC0+a2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0gPSBr ZXhfZ2VuX2NsaWVudDsKLSsJc3NoLT5rZXgtPmtleFtLRVhfS0VNX01MS0VNMTAyNE5JU1RQMzg0 X1NIQTM4NF0gPSBrZXhfZ2VuX2NsaWVudDsKLSAJc3NoLT5rZXgtPnZlcmlmeV9ob3N0X2tleT0m dmVyaWZ5X2hvc3Rfa2V5X2NhbGxiYWNrOwotIAotICNpZiBkZWZpbmVkKEdTU0FQSSkgJiYgZGVm aW5lZChXSVRIX09QRU5TU0wpCi1kaWZmIC0tZ2l0IGEvc3NoZC1hdXRoLmMgYi9zc2hkLWF1dGgu YwotaW5kZXggZjNjMzhhN2QxLi42OThlZjgzZjMgMTAwNjQ0Ci0tLS0gYS9zc2hkLWF1dGguYwot KysrIGIvc3NoZC1hdXRoLmMKLUBAIC04OTMsNiArODkzLDggQEAgZG9fc3NoMl9rZXgoc3RydWN0 IHNzaCAqc3NoKQotIAlrZXgtPmtleFtLRVhfQzI1NTE5X1NIQTI1Nl0gPSBrZXhfZ2VuX3NlcnZl cjsKLSAJa2V4LT5rZXhbS0VYX0tFTV9TTlRSVVA3NjFYMjU1MTlfU0hBNTEyXSA9IGtleF9nZW5f c2VydmVyOwotIAlrZXgtPmtleFtLRVhfS0VNX01MS0VNNzY4WDI1NTE5X1NIQTI1Nl0gPSBrZXhf Z2VuX3NlcnZlcjsKLSsJa2V4LT5rZXhbS0VYX0tFTV9NTEtFTTc2OE5JU1RQMjU2X1NIQTI1Nl0g PSBrZXhfZ2VuX3NlcnZlcjsKLSsJa2V4LT5rZXhbS0VYX0tFTV9NTEtFTTEwMjROSVNUUDM4NF9T SEEzODRdID0ga2V4X2dlbl9zZXJ2ZXI7Ci0gCWtleC0+bG9hZF9ob3N0X3B1YmxpY19rZXk9Jmdl dF9ob3N0a2V5X3B1YmxpY19ieV90eXBlOwotIAlrZXgtPmxvYWRfaG9zdF9wcml2YXRlX2tleT0m Z2V0X2hvc3RrZXlfcHJpdmF0ZV9ieV90eXBlOwotIAlrZXgtPmhvc3Rfa2V5X2luZGV4PSZnZXRf aG9zdGtleV9pbmRleDsKLS0tIAotMi41My4wCi0KCmRpZmYgLS1naXQgYS8wMDQ5LW9wZW5zc2gt Ny4zcDEteDExLW1heC1kaXNwbGF5cy5wYXRjaCBiLzAwNDktb3BlbnNzaC03LjNwMS14MTEtbWF4 LWRpc3BsYXlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTU5 MmMKLS0tIC9kZXYvbnVsbAorKysgYi8wMDQ5LW9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNwbGF5 cy5wYXRjaApAQCAtMCwwICsxLDE5MiBAQAorRnJvbSBmOGEyNDQ1MzZhNzkyNWQ2MzA0NzI0NWEz NGU4ZjA2MjIyN2FjNTZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJl bHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxMiBEZWMgMjAyNSAxNToz NToxNCArMDEwMAorU3ViamVjdDogW1BBVENIIDQ5LzU0XSBvcGVuc3NoLTcuM3AxLXgxMS1tYXgt ZGlzcGxheXMKKworTW92ZSBNQVhfRElTUExBWVMgdG8gYSBjb25maWd1cmF0aW9uIG9wdGlvbiAo IzEzNDEzMDIpCistLS0KKyBjaGFubmVscy5jICAgIHwgIDkgKysrKysrLS0tCisgY2hhbm5lbHMu aCAgICB8ICAyICstCisgc2VydmNvbmYuYyAgICB8IDEyICsrKysrKysrKysrLQorIHNlcnZjb25m LmggICAgfCAgMiArKworIHNlc3Npb24uYyAgICAgfCAgNSArKystLQorIHNzaGRfY29uZmlnLjUg fCAgNyArKysrKysrCisgNiBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA3IGRlbGV0 aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2hhbm5lbHMuYyBiL2NoYW5uZWxzLmMKK2luZGV4IDE0 ZDUzNmQ2NC4uNzNlYWNjNWY2IDEwMDY0NAorLS0tIGEvY2hhbm5lbHMuYworKysrIGIvY2hhbm5l bHMuYworQEAgLTUwNzYsNyArNTA3Niw3IEBAIHJkeW5hbWljX2Nvbm5lY3RfZmluaXNoKHN0cnVj dCBzc2ggKnNzaCwgQ2hhbm5lbCAqYykKKyAgKi8KKyBpbnQKKyB4MTFfY3JlYXRlX2Rpc3BsYXlf aW5ldChzdHJ1Y3Qgc3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQsCistICAgIGludCB4 MTFfdXNlX2xvY2FsaG9zdCwgaW50IHNpbmdsZV9jb25uZWN0aW9uLAorKyAgICBpbnQgeDExX3Vz ZV9sb2NhbGhvc3QsIGludCB4MTFfbWF4X2Rpc3BsYXlzLCBpbnQgc2luZ2xlX2Nvbm5lY3Rpb24s CisgICAgIHVfaW50ICpkaXNwbGF5X251bWJlcnAsIGludCAqKmNoYW5pZHMpCisgeworIAlDaGFu bmVsICpuYyA9IE5VTEw7CitAQCAtNTA4OSw4ICs1MDg5LDExIEBAIHgxMV9jcmVhdGVfZGlzcGxh eV9pbmV0KHN0cnVjdCBzc2ggKnNzaCwgaW50IHgxMV9kaXNwbGF5X29mZnNldCwKKyAJICAgIHgx MV9kaXNwbGF5X29mZnNldCA+IFVJTlQxNl9NQVggLSBYMTFfQkFTRV9QT1JUIC0gTUFYX0RJU1BM QVlTKQorIAkJcmV0dXJuIC0xOworIAorKwkvKiBUcnkgdG8gYmluZCBwb3J0cyBzdGFydGluZyBh dCA2MDAwK1gxMURpc3BsYXlPZmZzZXQgKi8KKysJeDExX21heF9kaXNwbGF5cyA9IHgxMV9tYXhf ZGlzcGxheXMgKyB4MTFfZGlzcGxheV9vZmZzZXQ7CisrCisgCWZvciAoZGlzcGxheV9udW1iZXIg PSB4MTFfZGlzcGxheV9vZmZzZXQ7CistCSAgICBkaXNwbGF5X251bWJlciA8IHgxMV9kaXNwbGF5 X29mZnNldCArIE1BWF9ESVNQTEFZUzsKKysJICAgIGRpc3BsYXlfbnVtYmVyIDwgeDExX21heF9k aXNwbGF5czsKKyAJICAgIGRpc3BsYXlfbnVtYmVyKyspIHsKKyAJCXBvcnQgPSBYMTFfQkFTRV9Q T1JUICsgZGlzcGxheV9udW1iZXI7CisgCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMp KTsKK0BAIC01MTU1LDcgKzUxNTgsNyBAQCB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qg c3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQsCisgCQlpZiAobnVtX3NvY2tzID4gMCkK KyAJCQlicmVhazsKKyAJfQorLQlpZiAoZGlzcGxheV9udW1iZXIgPj0geDExX2Rpc3BsYXlfb2Zm c2V0ICsgTUFYX0RJU1BMQVlTKSB7CisrCWlmIChkaXNwbGF5X251bWJlciA+PSB4MTFfbWF4X2Rp c3BsYXlzIHx8IHBvcnQgPCBYMTFfQkFTRV9QT1JUICkgeworIAkJZXJyb3IoIkZhaWxlZCB0byBh bGxvY2F0ZSBpbnRlcm5ldC1kb21haW4gWDExIGRpc3BsYXkgc29ja2V0LiIpOworIAkJcmV0dXJu IC0xOworIAl9CitkaWZmIC0tZ2l0IGEvY2hhbm5lbHMuaCBiL2NoYW5uZWxzLmgKK2luZGV4IDJm Y2Y5ZjhjYi4uN2JmMzdiMDUzIDEwMDY0NAorLS0tIGEvY2hhbm5lbHMuaAorKysrIGIvY2hhbm5l bHMuaAorQEAgLTM5MCw3ICszOTAsNyBAQCBpbnQJIHBlcm1pdG9wZW5fcG9ydChjb25zdCBjaGFy ICopOworIAorIHZvaWQJIGNoYW5uZWxfc2V0X3gxMV9yZWZ1c2VfdGltZShzdHJ1Y3Qgc3NoICos IHRpbWVfdCk7CisgaW50CSB4MTFfY29ubmVjdF9kaXNwbGF5KHN0cnVjdCBzc2ggKik7CistaW50 CSB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICosIGludCwgaW50LCBpbnQsIHVf aW50ICosIGludCAqKik7CisraW50CSB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3No ICosIGludCwgaW50LCBpbnQsIGludCwgdV9pbnQgKiwgaW50ICoqKTsKKyB2b2lkCSB4MTFfcmVx dWVzdF9mb3J3YXJkaW5nX3dpdGhfc3Bvb2Zpbmcoc3RydWN0IHNzaCAqLCBpbnQsCisgCSAgICBj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIGludCAgICAg IHgxMV9jaGFubmVsX3VzZWRfcmVjZW50bHkoc3RydWN0IHNzaCAqc3NoKTsKK2RpZmYgLS1naXQg YS9zZXJ2Y29uZi5jIGIvc2VydmNvbmYuYworaW5kZXggMjY4YzA5ZDFjLi5mNGQ2YjE5ZGQgMTAw NjQ0CistLS0gYS9zZXJ2Y29uZi5jCisrKysgYi9zZXJ2Y29uZi5jCitAQCAtMTE4LDYgKzExOCw3 IEBAIGluaXRpYWxpemVfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKKyAJ b3B0aW9ucy0+cHJpbnRfbGFzdGxvZyA9IC0xOworIAlvcHRpb25zLT54MTFfZm9yd2FyZGluZyA9 IC0xOworIAlvcHRpb25zLT54MTFfZGlzcGxheV9vZmZzZXQgPSAtMTsKKysJb3B0aW9ucy0+eDEx X21heF9kaXNwbGF5cyA9IC0xOworIAlvcHRpb25zLT54MTFfdXNlX2xvY2FsaG9zdCA9IC0xOwor IAlvcHRpb25zLT5wZXJtaXRfdHR5ID0gLTE7CisgCW9wdGlvbnMtPnBlcm1pdF91c2VyX3JjID0g LTE7CitAQCAtMzU5LDYgKzM2MCw4IEBAIGZpbGxfZGVmYXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2 ZXJPcHRpb25zICpvcHRpb25zKQorIAkJb3B0aW9ucy0+eDExX2ZvcndhcmRpbmcgPSAwOworIAlp ZiAob3B0aW9ucy0+eDExX2Rpc3BsYXlfb2Zmc2V0ID09IC0xKQorIAkJb3B0aW9ucy0+eDExX2Rp c3BsYXlfb2Zmc2V0ID0gMTA7CisrCWlmIChvcHRpb25zLT54MTFfbWF4X2Rpc3BsYXlzID09IC0x KQorKwkJb3B0aW9ucy0+eDExX21heF9kaXNwbGF5cyA9IERFRkFVTFRfTUFYX0RJU1BMQVlTOwor IAlpZiAob3B0aW9ucy0+eDExX3VzZV9sb2NhbGhvc3QgPT0gLTEpCisgCQlvcHRpb25zLT54MTFf dXNlX2xvY2FsaG9zdCA9IDE7CisgCWlmIChvcHRpb25zLT54YXV0aF9sb2NhdGlvbiA9PSBOVUxM KQorQEAgLTU4OCw3ICs1OTEsNyBAQCB0eXBlZGVmIGVudW0geworIAlzS2VyYmVyb3NHZXRBRlNU b2tlbiwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hlLCBzS2VyYmVyb3NVc2VLdXNlcm9rLCBzUGFzc3dv cmRBdXRoZW50aWNhdGlvbiwKKyAJc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24sIHNMaXN0 ZW5BZGRyZXNzLCBzQWRkcmVzc0ZhbWlseSwKKyAJc1ByaW50TW90ZCwgc1ByaW50TGFzdExvZywg c0lnbm9yZVJob3N0cywKKy0Jc1gxMUZvcndhcmRpbmcsIHNYMTFEaXNwbGF5T2Zmc2V0LCBzWDEx VXNlTG9jYWxob3N0LAorKwlzWDExRm9yd2FyZGluZywgc1gxMURpc3BsYXlPZmZzZXQsIHNYMTFN YXhEaXNwbGF5cywgc1gxMVVzZUxvY2FsaG9zdCwKKyAJc1Blcm1pdFRUWSwgc1N0cmljdE1vZGVz LCBzRW1wdHlQYXNzd2QsIHNUQ1BLZWVwQWxpdmUsCisgCXNQZXJtaXRVc2VyRW52aXJvbm1lbnQs IHNBbGxvd1RjcEZvcndhcmRpbmcsIHNDb21wcmVzc2lvbiwKKyAJc1Jla2V5TGltaXQsIHNBbGxv d1VzZXJzLCBzRGVueVVzZXJzLCBzQWxsb3dHcm91cHMsIHNEZW55R3JvdXBzLAorQEAgLTczMCw2 ICs3MzMsNyBAQCBzdGF0aWMgc3RydWN0IHsKKyAJeyAiaWdub3JldXNlcmtub3duaG9zdHMiLCBz SWdub3JlVXNlcktub3duSG9zdHMsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAieDExZm9yd2FyZGlu ZyIsIHNYMTFGb3J3YXJkaW5nLCBTU0hDRkdfQUxMIH0sCisgCXsgIngxMWRpc3BsYXlvZmZzZXQi LCBzWDExRGlzcGxheU9mZnNldCwgU1NIQ0ZHX0FMTCB9LAorKwl7ICJ4MTFtYXhkaXNwbGF5cyIs IHNYMTFNYXhEaXNwbGF5cywgU1NIQ0ZHX0FMTCB9LAorIAl7ICJ4MTF1c2Vsb2NhbGhvc3QiLCBz WDExVXNlTG9jYWxob3N0LCBTU0hDRkdfQUxMIH0sCisgCXsgInhhdXRobG9jYXRpb24iLCBzWEF1 dGhMb2NhdGlvbiwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJzdHJpY3Rtb2RlcyIsIHNTdHJpY3RN b2RlcywgU1NIQ0ZHX0dMT0JBTCB9LAorQEAgLTE3ODEsNiArMTc4NSwxMCBAQCBwcm9jZXNzX3Nl cnZlcl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5l LAorIAkJCSppbnRwdHIgPSB2YWx1ZTsKKyAJCWJyZWFrOworIAorKwljYXNlIHNYMTFNYXhEaXNw bGF5czoKKysJCWludHB0ciA9ICZvcHRpb25zLT54MTFfbWF4X2Rpc3BsYXlzOworKwkJZ290byBw YXJzZV9pbnQ7CisrCisgCWNhc2Ugc1gxMVVzZUxvY2FsaG9zdDoKKyAJCWludHB0ciA9ICZvcHRp b25zLT54MTFfdXNlX2xvY2FsaG9zdDsKKyAJCWdvdG8gcGFyc2VfZmxhZzsKK0BAIC0zMDY1LDYg KzMwNzMsNyBAQCBjb3B5X3NldF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpkc3QsIFNl cnZlck9wdGlvbnMgKnNyYywgaW50IHByZWF1dGgpCisgCU1fQ1BfSU5UT1BUKGZ3ZF9vcHRzLnN0 cmVhbWxvY2FsX2JpbmRfdW5saW5rKTsKKyAJTV9DUF9JTlRPUFQoeDExX2Rpc3BsYXlfb2Zmc2V0 KTsKKyAJTV9DUF9JTlRPUFQoeDExX2ZvcndhcmRpbmcpOworKwlNX0NQX0lOVE9QVCh4MTFfbWF4 X2Rpc3BsYXlzKTsKKyAJTV9DUF9JTlRPUFQoeDExX3VzZV9sb2NhbGhvc3QpOworIAlNX0NQX0lO VE9QVChwZXJtaXRfdHR5KTsKKyAJTV9DUF9JTlRPUFQocGVybWl0X3VzZXJfcmMpOworQEAgLTMz NjEsNiArMzM3MCw3IEBAIGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCisgI2VuZGlmCisg CWR1bXBfY2ZnX2ludChzTG9naW5HcmFjZVRpbWUsIG8tPmxvZ2luX2dyYWNlX3RpbWUpOworIAlk dW1wX2NmZ19pbnQoc1gxMURpc3BsYXlPZmZzZXQsIG8tPngxMV9kaXNwbGF5X29mZnNldCk7Cisr CWR1bXBfY2ZnX2ludChzWDExTWF4RGlzcGxheXMsIG8tPngxMV9tYXhfZGlzcGxheXMpOworIAlk dW1wX2NmZ19pbnQoc01heEF1dGhUcmllcywgby0+bWF4X2F1dGh0cmllcyk7CisgCWR1bXBfY2Zn X2ludChzTWF4U2Vzc2lvbnMsIG8tPm1heF9zZXNzaW9ucyk7CisgCWR1bXBfY2ZnX2ludChzQ2xp ZW50QWxpdmVJbnRlcnZhbCwgby0+Y2xpZW50X2FsaXZlX2ludGVydmFsKTsKK2RpZmYgLS1naXQg YS9zZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAoraW5kZXggNzgxZjIwYzYxLi5mZWEyNTk0N2UgMTAw NjQ0CistLS0gYS9zZXJ2Y29uZi5oCisrKysgYi9zZXJ2Y29uZi5oCitAQCAtMzgsNiArMzgsNyBA QAorIAorICNkZWZpbmUgREVGQVVMVF9BVVRIX0ZBSUxfTUFYCTYJLyogRGVmYXVsdCBmb3IgTWF4 QXV0aFRyaWVzICovCisgI2RlZmluZSBERUZBVUxUX1NFU1NJT05TX01BWAkxMAkvKiBEZWZhdWx0 IGZvciBNYXhTZXNzaW9ucyAqLworKyNkZWZpbmUgREVGQVVMVF9NQVhfRElTUExBWVMJMTAwMCAv KiBNYXhpbXVtIG51bWJlciBvZiBmYWtlIFgxMSBkaXNwbGF5cyB0byB0cnkuICovCisgCisgLyog TWFnaWMgbmFtZSBmb3IgaW50ZXJuYWwgc2Z0cC1zZXJ2ZXIgKi8KKyAjZGVmaW5lIElOVEVSTkFM X1NGVFBfTkFNRQkiaW50ZXJuYWwtc2Z0cCIKK0BAIC0xMTUsNiArMTE2LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgeworIAlpbnQgICAgIHgxMV9mb3J3YXJkaW5nOwkvKiBJZiB0cnVlLCBwZXJtaXQgaW5l dCAoc3Bvb2ZpbmcpIFgxMSBmd2QuICovCisgCWludCAgICAgeDExX2Rpc3BsYXlfb2Zmc2V0Owkv KiBXaGF0IERJU1BMQVkgbnVtYmVyIHRvIHN0YXJ0CisgCQkJCQkgKiBzZWFyY2hpbmcgYXQgKi8K KysJaW50IAl4MTFfbWF4X2Rpc3BsYXlzOyAvKiBOdW1iZXIgb2YgZGlzcGxheXMgdG8gc2VhcmNo ICovCisgCWludCAgICAgeDExX3VzZV9sb2NhbGhvc3Q7CS8qIElmIHRydWUsIHVzZSBsb2NhbGhv c3QgZm9yIGZha2UgWDExIHNlcnZlci4gKi8KKyAJY2hhciAgICp4YXV0aF9sb2NhdGlvbjsJLyog TG9jYXRpb24gb2YgeGF1dGggcHJvZ3JhbSAqLworIAlpbnQJcGVybWl0X3R0eTsJLyogSWYgZmFs c2UsIGRlbnkgcHR5IGFsbG9jYXRpb24gKi8KK2RpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9zZXNz aW9uLmMKK2luZGV4IDFhN2Y1Y2E3YS4uNTJmODZmZDQ2IDEwMDY0NAorLS0tIGEvc2Vzc2lvbi5j CisrKysgYi9zZXNzaW9uLmMKK0BAIC0yNjg5LDggKzI2ODksOSBAQCBzZXNzaW9uX3NldHVwX3gx MWZ3ZChzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMpCisgCQlyZXR1cm4gMDsKKyAJfQorIAlp ZiAoeDExX2NyZWF0ZV9kaXNwbGF5X2luZXQoc3NoLCBvcHRpb25zLngxMV9kaXNwbGF5X29mZnNl dCwKKy0JICAgIG9wdGlvbnMueDExX3VzZV9sb2NhbGhvc3QsIHMtPnNpbmdsZV9jb25uZWN0aW9u LAorLQkgICAgJnMtPmRpc3BsYXlfbnVtYmVyLCAmcy0+eDExX2NoYW5pZHMpID09IC0xKSB7Cisr CSAgICBvcHRpb25zLngxMV91c2VfbG9jYWxob3N0LCBvcHRpb25zLngxMV9tYXhfZGlzcGxheXMs CisrCSAgICBzLT5zaW5nbGVfY29ubmVjdGlvbiwgJnMtPmRpc3BsYXlfbnVtYmVyLAorKwkgICAg JnMtPngxMV9jaGFuaWRzKSA9PSAtMSkgeworIAkJZGVidWcoIngxMV9jcmVhdGVfZGlzcGxheV9p bmV0IGZhaWxlZC4iKTsKKyAJCXJldHVybiAwOworIAl9CitkaWZmIC0tZ2l0IGEvc3NoZF9jb25m aWcuNSBiL3NzaGRfY29uZmlnLjUKK2luZGV4IDRjYTgwMDE2Yy4uYzI4MjIwMDc3IDEwMDY0NAor LS0tIGEvc3NoZF9jb25maWcuNQorKysrIGIvc3NoZF9jb25maWcuNQorQEAgLTE0MTYsNiArMTQx Niw3IEBAIEF2YWlsYWJsZSBrZXl3b3JkcyBhcmUKKyAuQ20gVHJ1c3RlZFVzZXJDQUtleXMgLAor IC5DbSBVbnVzZWRDb25uZWN0aW9uVGltZW91dCAsCisgLkNtIFgxMURpc3BsYXlPZmZzZXQgLAor Ky5DbSBYMTFNYXhEaXNwbGF5cyAsCisgLkNtIFgxMUZvcndhcmRpbmcKKyBhbmQKKyAuQ20gWDEx VXNlTG9jYWxob3N0IC4KK0BAIC0yMTMzLDYgKzIxMzQsMTIgQEAgU3BlY2lmaWVzIHRoZSBmaXJz dCBkaXNwbGF5IG51bWJlciBhdmFpbGFibGUgZm9yCisgWDExIGZvcndhcmRpbmcuCisgVGhpcyBw cmV2ZW50cyBzc2hkIGZyb20gaW50ZXJmZXJpbmcgd2l0aCByZWFsIFgxMSBzZXJ2ZXJzLgorIFRo ZSBkZWZhdWx0IGlzIDEwLgorKy5JdCBDbSBYMTFNYXhEaXNwbGF5cworK1NwZWNpZmllcyB0aGUg bWF4aW11bSBudW1iZXIgb2YgZGlzcGxheXMgYXZhaWxhYmxlIGZvcgorKy5YciBzc2hkIDggTnMg J3MKKytYMTEgZm9yd2FyZGluZy4KKytUaGlzIHByZXZlbnRzIHNzaGQgZnJvbSBleGhhdXN0aW5n IGxvY2FsIHBvcnRzLgorK1RoZSBkZWZhdWx0IGlzIDEwMDAuCisgLkl0IENtIFgxMUZvcndhcmRp bmcKKyBTcGVjaWZpZXMgd2hldGhlciBYMTEgZm9yd2FyZGluZyBpcyBwZXJtaXR0ZWQuCisgVGhl IGFyZ3VtZW50IG11c3QgYmUKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDUwLUZpeC1z c2gtcGtjczExLWNsaWVudC1oZWxwZXItdGVybWluYXRpb24ucGF0Y2ggYi8wMDUwLUZpeC1zc2gt cGtjczExLWNsaWVudC1oZWxwZXItdGVybWluYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMWI4NTYyMAotLS0gL2Rldi9udWxsCisrKyBiLzAwNTAtRml4LXNz aC1wa2NzMTEtY2xpZW50LWhlbHBlci10ZXJtaW5hdGlvbi5wYXRjaApAQCAtMCwwICsxLDQ4IEBA CitGcm9tIGY5ZjY4ZTNkNWUxZDRiZjJlOTQ1YTE4OWM2Njg4YjI3YWJmOTgxMGIgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCitGcm9tOiBEbWl0cnkgQmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5j b20+CitEYXRlOiBNb24sIDEzIEFwciAyMDI2IDE0OjU5OjI2ICswMjAwCitTdWJqZWN0OiBbUEFU Q0ggNTAvNTRdIEZpeCBzc2gtcGtjczExLWNsaWVudCBoZWxwZXIgdGVybWluYXRpb24KKworRG9u J3QgdGVybWluYXRlIHRoZSBQS0NTIzExIGhlbHBlciB3aGVuIFNTSDJfQUdFTlRfRkFJTFVSRSBp cyByZXR1cm5lZC4KK1RoaXMgaXMgYSBsZWdpdGltYXRlIHJlc3BvbnNlIHdoZW4gYSB0b2tlbiBy ZXF1aXJlcyBQSU4gYXV0aGVudGljYXRpb24uCitUaGUgaGVscGVyIG11c3QgcmVtYWluIGFjdGl2 ZSBzbyBpdCBjYW4gcHJvbXB0IGZvciBQSU4gZHVyaW5nIGFjdHVhbCBrZXkgdXNlLgorCitPbmx5 IHRlcm1pbmF0ZSB0aGUgaGVscGVyIG9uIHVuZXhwZWN0ZWQgcmVzcG9uc2VzIG9yIGNvbW11bmlj YXRpb24gZmFpbHVyZXMuCisKK0NvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8bm9y ZXBseUBhbnRocm9waWMuY29tPgorLS0tCisgc3NoLXBrY3MxMS1jbGllbnQuYyB8IDE4ICsrKysr KysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0 aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS1jbGllbnQuYyBiL3NzaC1wa2NzMTEt Y2xpZW50LmMKK2luZGV4IDZkNzRkNzI4MC4uMzBhNGNmNWRjIDEwMDY0NAorLS0tIGEvc3NoLXBr Y3MxMS1jbGllbnQuYworKysrIGIvc3NoLXBrY3MxMS1jbGllbnQuYworQEAgLTQyOSwxMiArNDI5 LDE4IEBAIHBrY3MxMV9hZGRfcHJvdmlkZXIoY2hhciAqbmFtZSwgY2hhciAqcGluLCBzdHJ1Y3Qg c3Noa2V5ICoqKmtleXNwLAorIAkJfQorIAkJLyogc3VjY2VzcyAqLworIAkJcmV0ID0gMDsKKy0J fSBlbHNlIGlmICh0eXBlID09IFNTSDJfQUdFTlRfRkFJTFVSRSkgeworLQkJaWYgKChyID0gc3No YnVmX2dldF91MzIobXNnLCAmbmtleXMpKSAhPSAwKQorLQkJCWVycm9yX2ZyKHIsICJmYWlsZWQg dG8gcGFyc2UgZmFpbHVyZSByZXNwb25zZSIpOworLQl9CistCWlmIChyZXQgIT0gMCkgeworLQkJ ZGVidWdfZigibm8ga2V5czsgdGVybWluYXRlIGhlbHBlciIpOworKwl9IGVsc2UgaWYgKHR5cGUg PT0gU1NIX0FHRU5UX0ZBSUxVUkUgfHwgdHlwZSA9PSBTU0gyX0FHRU5UX0ZBSUxVUkUpIHsKKysJ CWlmICh0eXBlID09IFNTSDJfQUdFTlRfRkFJTFVSRSkgeworKwkJCWlmICgociA9IHNzaGJ1Zl9n ZXRfdTMyKG1zZywgJm5rZXlzKSkgIT0gMCkKKysJCQkJZXJyb3JfZnIociwgImZhaWxlZCB0byBw YXJzZSBmYWlsdXJlIHJlc3BvbnNlIik7CisrCQl9CisrCQkvKiBQcm92aWRlciByZWdpc3RlcmVk IGJ1dCByZXR1cm5lZCBubyBrZXlzIChtYXkgbmVlZCBQSU4pICovCisrCQkvKiBEb24ndCB0ZXJt aW5hdGUgaGVscGVyIC0ga2VlcCBpdCBmb3IgbGF0ZXIgdXNlICovCisrCQlyZXQgPSAwOworKwkJ bmtleXMgPSAwOworKwl9IGVsc2UgeworKwkJLyogVW5leHBlY3RlZCByZXNwb25zZSAtIHRlcm1p bmF0ZSBoZWxwZXIgKi8KKysJCWRlYnVnX2YoInVuZXhwZWN0ZWQgcmVzcG9uc2UgJWQ7IHRlcm1p bmF0ZSBoZWxwZXIiLCB0eXBlKTsKKyAJCWhlbHBlcl90ZXJtaW5hdGUoaGVscGVyKTsKKyAJfQor IAlzc2hidWZfZnJlZShtc2cpOworLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwNTAtUHJv dmlkZS1hLXdheS10by1kaXNhYmxlLUdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMtcy5wYXRjaCBi LzAwNTAtUHJvdmlkZS1hLXdheS10by1kaXNhYmxlLUdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMt cy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVjNDE0MC4uMDAwMDAwMAot LS0gYS8wMDUwLVByb3ZpZGUtYS13YXktdG8tZGlzYWJsZS1HU1NBUElEZWxlZ2F0ZUNyZWRlbnRp YWxzLXMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotRnJvbSA3MTE5MGQz ZDg2MjExM2Q5NzcwOGE0MmI0YTdkYWE3YWEzYzRlMGVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQotRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJlbGRtaXRAZ21haWwuY29tPgotRGF0ZTogRnJp LCA1IERlYyAyMDI1IDE0OjU1OjM4ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0ggNTAvNTNdIFByb3Zp ZGUgYSB3YXkgdG8gZGlzYWJsZSBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCi0gc2VydmVyLXNp ZGUKLQotLS0tCi0gZ3NzLXNlcnYuYyAgICB8ICA1ICsrKysrCi0gc2VydmNvbmYuYyAgICB8IDEz ICsrKysrKysrKysrKy0KLSBzZXJ2Y29uZi5oICAgIHwgIDEgKwotIHNzaGRfY29uZmlnLjAgfCAg MyArKysKLSBzc2hkX2NvbmZpZy41IHwgIDMgKysrCi0gNSBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCi0KLWRpZmYgLS1naXQgYS9nc3Mtc2Vydi5jIGIvZ3Nz LXNlcnYuYwotaW5kZXggYmU4MGUxN2NhLi4xNjU0ODRkYjAgMTAwNjQ0Ci0tLS0gYS9nc3Mtc2Vy di5jCi0rKysgYi9nc3Mtc2Vydi5jCi1AQCAtNTA5LDYgKzUwOSwxMSBAQCBzc2hfZ3NzYXBpX2Ns ZWFudXBfY3JlZHModm9pZCkKLSBpbnQKLSBzc2hfZ3NzYXBpX3N0b3JlY3JlZHModm9pZCkKLSB7 Ci0rCWlmIChvcHRpb25zLmdzc19kZWxlZ19jcmVkcyA9PSAwKSB7Ci0rCQlkZWJ1Z19mKCJkZWxl Z2F0ZSBjcmVkZW50aWFsIGlzIGRpc2FibGVkLCBkb2luZyBub3RoaW5nIik7Ci0rCQlyZXR1cm4g MDsKLSsJfQotKwotIAlpZiAoZ3NzYXBpX2NsaWVudC5tZWNoICYmIGdzc2FwaV9jbGllbnQubWVj aC0+c3RvcmVjcmVkcykgewotIAkJcmV0dXJuICgqZ3NzYXBpX2NsaWVudC5tZWNoLT5zdG9yZWNy ZWRzKSgmZ3NzYXBpX2NsaWVudCk7Ci0gCX0gZWxzZQotZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMg Yi9zZXJ2Y29uZi5jCi1pbmRleCBlNTNlOGVhMzAuLmZiMWQxNTBjZCAxMDA2NDQKLS0tLSBhL3Nl cnZjb25mLmMKLSsrKyBiL3NlcnZjb25mLmMKLUBAIC0xNDMsNiArMTQzLDcgQEAgaW5pdGlhbGl6 ZV9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQotIAlvcHRpb25zLT5nc3Nf YXV0aGVudGljYXRpb249LTE7Ci0gCW9wdGlvbnMtPmdzc19rZXlleCA9IC0xOwotIAlvcHRpb25z LT5nc3NfY2xlYW51cF9jcmVkcyA9IC0xOwotKwlvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPSAt MTsKLSAJb3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9IC0xOwotIAlvcHRpb25zLT5nc3Nf c3RvcmVfcmVrZXkgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2tleF9hbGdvcml0aG1zID0gTlVMTDsK LUBAIC0zOTYsNiArMzk3LDggQEAgZmlsbF9kZWZhdWx0X3NlcnZlcl9vcHRpb25zKFNlcnZlck9w dGlvbnMgKm9wdGlvbnMpCi0gCQlvcHRpb25zLT5nc3Nfa2V5ZXggPSAwOwotIAlpZiAob3B0aW9u cy0+Z3NzX2NsZWFudXBfY3JlZHMgPT0gLTEpCi0gCQlvcHRpb25zLT5nc3NfY2xlYW51cF9jcmVk cyA9IDE7Ci0rCWlmIChvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPT0gLTEpCi0rCQlvcHRpb25z LT5nc3NfZGVsZWdfY3JlZHMgPSAxOwotIAlpZiAob3B0aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRv ciA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAxOwotIAlpZiAob3B0 aW9ucy0+Z3NzX3N0b3JlX3Jla2V5ID09IC0xKQotQEAgLTU5MSw3ICs1OTQsOCBAQCB0eXBlZGVm IGVudW0gewotIAlzSG9zdEtleUFsZ29yaXRobXMsIHNQZXJTb3VyY2VNYXhTdGFydHVwcywgc1Bl clNvdXJjZU5ldEJsb2NrU2l6ZSwKLSAJc1BlclNvdXJjZVBlbmFsdGllcywgc1BlclNvdXJjZVBl bmFsdHlFeGVtcHRMaXN0LAotIAlzQ2xpZW50QWxpdmVJbnRlcnZhbCwgc0NsaWVudEFsaXZlQ291 bnRNYXgsIHNBdXRob3JpemVkS2V5c0ZpbGUsCi0tCXNHc3NBdXRoZW50aWNhdGlvbiwgc0dzc0Ns ZWFudXBDcmVkcywgc0dzc0VuYWJsZWs1dXNlcnMsIHNHc3NTdHJpY3RBY2NlcHRvciwKLSsJc0dz c0F1dGhlbnRpY2F0aW9uLCBzR3NzQ2xlYW51cENyZWRzLCBzR3NzRGVsZWdhdGVDcmVkcywKLSsJ c0dzc0VuYWJsZWs1dXNlcnMsIHNHc3NTdHJpY3RBY2NlcHRvciwKLSAJc0dzc0tleUV4LCBzR3Nz SW5kaWNhdG9ycywgc0dzc0tleEFsZ29yaXRobXMsIHNHc3NTdG9yZVJla2V5LAotIAlzQWNjZXB0 RW52LCBzU2V0RW52LCBzUGVybWl0VHVubmVsLAotIAlzTWF0Y2gsIHNQZXJtaXRPcGVuLCBzUGVy bWl0TGlzdGVuLCBzRm9yY2VDb21tYW5kLCBzQ2hyb290RGlyZWN0b3J5LAotQEAgLTY4Myw2ICs2 ODcsNyBAQCBzdGF0aWMgc3RydWN0IHsKLSAJeyAiZ3NzYXBpYXV0aGVudGljYXRpb24iLCBzR3Nz QXV0aGVudGljYXRpb24sIFNTSENGR19BTEwgfSwKLSAJeyAiZ3NzYXBpY2xlYW51cGNyZWRlbnRp YWxzIiwgc0dzc0NsZWFudXBDcmVkcywgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGljbGVh bnVwY3JlZHMiLCBzR3NzQ2xlYW51cENyZWRzLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgImdzc2Fw aWRlbGVnYXRlY3JlZGVudGlhbHMiLCBzR3NzRGVsZWdhdGVDcmVkcywgU1NIQ0ZHX0dMT0JBTCB9 LAotIAl7ICJnc3NhcGlzdHJpY3RhY2NlcHRvcmNoZWNrIiwgc0dzc1N0cmljdEFjY2VwdG9yLCBT U0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWtleWV4Y2hhbmdlIiwgc0dzc0tleUV4LCBTU0hD RkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc0dzc1N0 b3JlUmVrZXksIFNTSENGR19HTE9CQUwgfSwKLUBAIC02OTMsNiArNjk4LDcgQEAgc3RhdGljIHN0 cnVjdCB7Ci0gCXsgImdzc2FwaWF1dGhlbnRpY2F0aW9uIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdf QUxMIH0sCi0gCXsgImdzc2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNVbnN1cHBvcnRlZCwgU1NI Q0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGljbGVhbnVwY3JlZHMiLCBzVW5zdXBwb3J0ZWQsIFNT SENGR19HTE9CQUwgfSwKLSsJeyAiZ3NzYXBpZGVsZWdhdGVjcmVkZW50aWFscyIsIHNVbnN1cHBv cnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlzdHJpY3RhY2NlcHRvcmNoZWNrIiwg c1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWtleWV4Y2hhbmdlIiwg c1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0b3JlY3JlZGVudGlh bHNvbnJla2V5Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi1AQCAtMTcwNSw2ICsx NzExLDEwIEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMg Km9wdGlvbnMsIGNoYXIgKmxpbmUsCi0gCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2NsZWFudXBf Y3JlZHM7Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci0gCi0rCWNhc2Ugc0dzc0RlbGVnYXRlQ3JlZHM6 Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzOwotKwkJZ290byBwYXJzZV9m bGFnOwotKwotIAljYXNlIHNHc3NTdHJpY3RBY2NlcHRvcjoKLSAJCWludHB0ciA9ICZvcHRpb25z LT5nc3Nfc3RyaWN0X2FjY2VwdG9yOwotIAkJZ290byBwYXJzZV9mbGFnOwotQEAgLTMzNTIsNiAr MzM2Miw3IEBAIGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCi0gI2lmZGVmIEdTU0FQSQot IAlkdW1wX2NmZ19mbXRpbnQoc0dzc0F1dGhlbnRpY2F0aW9uLCBvLT5nc3NfYXV0aGVudGljYXRp b24pOwotIAlkdW1wX2NmZ19mbXRpbnQoc0dzc0NsZWFudXBDcmVkcywgby0+Z3NzX2NsZWFudXBf Y3JlZHMpOwotKwlkdW1wX2NmZ19mbXRpbnQoc0dzc0RlbGVnYXRlQ3JlZHMsIG8tPmdzc19kZWxl Z19jcmVkcyk7Ci0gCWR1bXBfY2ZnX2ZtdGludChzR3NzS2V5RXgsIG8tPmdzc19rZXlleCk7Ci0g CWR1bXBfY2ZnX2ZtdGludChzR3NzU3RyaWN0QWNjZXB0b3IsIG8tPmdzc19zdHJpY3RfYWNjZXB0 b3IpOwotIAlkdW1wX2NmZ19mbXRpbnQoc0dzc1N0b3JlUmVrZXksIG8tPmdzc19zdG9yZV9yZWtl eSk7Ci1kaWZmIC0tZ2l0IGEvc2VydmNvbmYuaCBiL3NlcnZjb25mLmgKLWluZGV4IGM3Y2VjNWVj ZS4uOWIxYTczYjhkIDEwMDY0NAotLS0tIGEvc2VydmNvbmYuaAotKysrIGIvc2VydmNvbmYuaAot QEAgLTE1Niw2ICsxNTYsNyBAQCB0eXBlZGVmIHN0cnVjdCB7Ci0gCWludCAgICAgZ3NzX2F1dGhl bnRpY2F0aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGF1dGhlbnRpY2F0aW9uICovCi0g CWludCAgICAgZ3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQSSBrZXkgZXhjaGFu Z2UgKi8KLSAJaW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJLyogSWYgdHJ1ZSwgZGVzdHJveSBj cmVkIGNhY2hlIG9uIGxvZ291dCAqLwotKwlpbnQgICAgIGdzc19kZWxlZ19jcmVkczsJLyogSWYg dHJ1ZSwgYWNjZXB0IGRlbGVnYXRlZCBHU1MgY3JlZGVudGlhbHMgKi8KLSAJaW50ICAgICBnc3Nf c3RyaWN0X2FjY2VwdG9yOwkvKiBJZiB0cnVlLCByZXN0cmljdCB0aGUgR1NTQVBJIGFjY2VwdG9y IG5hbWUgKi8KLSAJaW50IAlnc3Nfc3RvcmVfcmVrZXk7Ci0gCWNoYXIgICAqZ3NzX2tleF9hbGdv cml0aG1zOwkvKiBHU1NBUEkga2V4IG1ldGhvZHMgdG8gYmUgb2ZmZXJlZCBieSBjbGllbnQuICov Ci1kaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcuMCBiL3NzaGRfY29uZmlnLjAKLWluZGV4IDhjNTIx N2MwYi4uY2RhOWM5MTgyIDEwMDY0NAotLS0tIGEvc3NoZF9jb25maWcuMAotKysrIGIvc3NoZF9j b25maWcuMAotQEAgLTQ1Myw2ICs0NTMsOSBAQCBERVNDUklQVElPTgotICAgICAgICAgICAgICBT cGVjaWZpZXMgd2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGRlc3Ryb3kgdGhlIHVzZXIncyBjcmVk ZW50aWFscwotICAgICAgICAgICAgICBjYWNoZSBvbiBsb2dvdXQuICBUaGUgZGVmYXVsdCBpcyB5 ZXMuCi0gCi0rICAgICBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCi0rICAgICAgICAgICAgIEFj Y2VwdCBkZWxlZ2F0ZWQgY3JlZGVudGlhbHMgb24gdGhlIHNlcnZlciBzaWRlLiAgVGhlIGRlZmF1 bHQgaXMgeWVzLgotKwotICAgICAgR1NTQVBJU3RyaWN0QWNjZXB0b3JDaGVjawotICAgICAgICAg ICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYmUgc3RyaWN0IGFib3V0IHRoZSBpZGVudGl0eSBv ZiB0aGUgR1NTQVBJCi0gICAgICAgICAgICAgIGFjY2VwdG9yIGEgY2xpZW50IGF1dGhlbnRpY2F0 ZXMgYWdhaW5zdC4gIElmIHNldCB0byB5ZXMgdGhlbiB0aGUKLWRpZmYgLS1naXQgYS9zc2hkX2Nv bmZpZy41IGIvc3NoZF9jb25maWcuNQotaW5kZXggNjc2ZDZkNGQyLi40YWU0YmViZWUgMTAwNjQ0 Ci0tLS0gYS9zc2hkX2NvbmZpZy41Ci0rKysgYi9zc2hkX2NvbmZpZy41Ci1AQCAtNzMzLDYgKzcz Myw5IEBAIFNwZWNpZmllcyB3aGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgZGVzdHJveSB0aGUgdXNl cidzIGNyZWRlbnRpYWxzIGNhY2hlCi0gb24gbG9nb3V0LgotIFRoZSBkZWZhdWx0IGlzCi0gLkNt IHllcyAuCi0rLkl0IENtIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMKLStBY2NlcHQgZGVsZWdh dGVkIGNyZWRlbnRpYWxzIG9uIHRoZSBzZXJ2ZXIgc2lkZS4gIFRoZSBkZWZhdWx0IGlzCi0rLkNN IHllcyAuCi0gLkl0IENtIEdTU0FQSUVuYWJsZWs1dXNlcnMKLSBTcGVjaWZpZXMgd2hldGhlciB0 byBsb29rIGF0IC5rNXVzZXJzIGZpbGUgZm9yIEdTU0FQSSBhdXRoZW50aWNhdGlvbgotIGFjY2Vz cyBjb250cm9sLiBGdXJ0aGVyIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbgotLS0gCi0yLjUyLjAK LQoKZGlmZiAtLWdpdCBhLzAwNTEtb3BlbnNzaC0xMC4ycDEtcGFtLWF1dGgucGF0Y2ggYi8wMDUx LW9wZW5zc2gtMTAuMnAxLXBhbS1hdXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjUxMjhhZjMKLS0tIC9kZXYvbnVsbAorKysgYi8wMDUxLW9wZW5zc2gtMTAuMnAx LXBhbS1hdXRoLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gMDRjMTMzOTIyODBkMTgzOWIx OWNmZTZlNGRiYTQ4ZGIzYThhOGU3NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERt aXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTIgQXByIDIw MjYgMTI6MjU6MDQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA1MS81NF0gb3BlbnNzaC0xMC4ycDEt cGFtLWF1dGgKKworaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0y NDIzOTAwCisKK0NvLUF1dGhvcmVkLUJ5OiBDbGF1ZGUgU29ubmV0IDQuNSA8bm9yZXBseUBhbnRo cm9waWMuY29tPgorLS0tCisgYXV0aC1wYW0uYyB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hh bmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYXV0 aC1wYW0uYyBiL2F1dGgtcGFtLmMKK2luZGV4IGQzZGNkMDM3Yi4uYWFhZDE2NzY1IDEwMDY0NAor LS0tIGEvYXV0aC1wYW0uYworKysrIGIvYXV0aC1wYW0uYworQEAgLTQ1NSw2ICs0NTUsNyBAQCBz dGF0aWMgaW50CisgY2hlY2tfcGFtX3VzZXIoQXV0aGN0eHQgKmF1dGhjdHh0KQorIHsKKyAJY29u c3QgY2hhciAqcGFtX3VzZXI7CisrCWNvbnN0IHN0cnVjdCBwYXNzd2QgKnBhbV9wdzsKKyAKKyAJ aWYgKGF1dGhjdHh0ID09IE5VTEwgfHwgYXV0aGN0eHQtPnB3ID09IE5VTEwgfHwKKyAJICAgIGF1 dGhjdHh0LT5wdy0+cHdfbmFtZSA9PSBOVUxMKQorQEAgLTQ2OSwxMSArNDcwLDEwIEBAIGNoZWNr X3BhbV91c2VyKEF1dGhjdHh0ICphdXRoY3R4dCkKKyAJCXJldHVybiBQQU1fVVNFUl9VTktOT1dO OworIAl9CisgCistCWlmIChzc2hwYW1faW5pdGlhbF91c2VyID09IE5VTEwpCistCQlmYXRhbF9m KCJpbnRlcm5hbCBlcnJvcjogc3NocGFtX2luaXRpYWxfdXNlciBOVUxMIik7CistCWlmIChzdHJj bXAoc3NocGFtX2luaXRpYWxfdXNlciwgcGFtX3VzZXIpICE9IDApIHsKKy0JCWVycm9yX2YoIlBB TSB1c2VyIFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBwcmV2aW91cyBcIiVzXCIiLAorLQkJICAgICAg cGFtX3VzZXIsIHNzaHBhbV9pbml0aWFsX3VzZXIpOworKwlwYW1fcHcgPSBnZXRwd25hbShwYW1f dXNlcik7CisrCWlmIChwYW1fcHcgPT0gTlVMTCB8fCBwYW1fcHctPnB3X3VpZCAhPSBhdXRoY3R4 dC0+cHctPnB3X3VpZCkgeworKwkJZGVidWcoIlBBTSB1c2VyIFwiJXNcIiBkb2VzIG5vdCBtYXRj aCBleHBlY3RlZCBcIiVzXCIiLAorKwkJICAgICAgcGFtX3VzZXIsIGF1dGhjdHh0LT5wdy0+cHdf bmFtZSk7CisgCQlyZXR1cm4gUEFNX1VTRVJfVU5LTk9XTjsKKyAJfQorIAlyZXR1cm4gUEFNX1NV Q0NFU1M7CistLSAKKzIuNTMuMAorCgpkaWZmIC0tZ2l0IGEvMDA1MS1vcGVuc3NoLTcuM3AxLXgx MS1tYXgtZGlzcGxheXMucGF0Y2ggYi8wMDUxLW9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNwbGF5 cy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyMTA3Yy4uMDAwMDAwMAot LS0gYS8wMDUxLW9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNwbGF5cy5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDE5MSArMCwwIEBACi1Gcm9tIDc2M2M2NWY2ZjM0OWE3YmFiMzQ0YTU4OTkxMjQ2 ODkxNzAwZTRmYTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBEbWl0cnkgQmVseWF2 c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+Ci1EYXRlOiBGcmksIDEyIERlYyAyMDI1IDE1OjM1OjE0 ICswMTAwCi1TdWJqZWN0OiBbUEFUQ0ggNTEvNTNdIG9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNw bGF5cwotCi0tLS0KLSBjaGFubmVscy5jICAgIHwgIDkgKysrKysrLS0tCi0gY2hhbm5lbHMuaCAg ICB8ICAyICstCi0gc2VydmNvbmYuYyAgICB8IDEyICsrKysrKysrKysrLQotIHNlcnZjb25mLmgg ICAgfCAgMiArKwotIHNlc3Npb24uYyAgICAgfCAgNSArKystLQotIHNzaGRfY29uZmlnLjUgfCAg NyArKysrKysrCi0gNiBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9u cygtKQotCi1kaWZmIC0tZ2l0IGEvY2hhbm5lbHMuYyBiL2NoYW5uZWxzLmMKLWluZGV4IDI2ZWQ5 OTQ1Zi4uYzI2MzgwZTI1IDEwMDY0NAotLS0tIGEvY2hhbm5lbHMuYwotKysrIGIvY2hhbm5lbHMu YwotQEAgLTUwNjcsNyArNTA2Nyw3IEBAIHJkeW5hbWljX2Nvbm5lY3RfZmluaXNoKHN0cnVjdCBz c2ggKnNzaCwgQ2hhbm5lbCAqYykKLSAgKi8KLSBpbnQKLSB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5l dChzdHJ1Y3Qgc3NoICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQsCi0tICAgIGludCB4MTFf dXNlX2xvY2FsaG9zdCwgaW50IHNpbmdsZV9jb25uZWN0aW9uLAotKyAgICBpbnQgeDExX3VzZV9s b2NhbGhvc3QsIGludCB4MTFfbWF4X2Rpc3BsYXlzLCBpbnQgc2luZ2xlX2Nvbm5lY3Rpb24sCi0g ICAgIHVfaW50ICpkaXNwbGF5X251bWJlcnAsIGludCAqKmNoYW5pZHMpCi0gewotIAlDaGFubmVs ICpuYyA9IE5VTEw7Ci1AQCAtNTA4MCw4ICs1MDgwLDExIEBAIHgxMV9jcmVhdGVfZGlzcGxheV9p bmV0KHN0cnVjdCBzc2ggKnNzaCwgaW50IHgxMV9kaXNwbGF5X29mZnNldCwKLSAJICAgIHgxMV9k aXNwbGF5X29mZnNldCA+IFVJTlQxNl9NQVggLSBYMTFfQkFTRV9QT1JUIC0gTUFYX0RJU1BMQVlT KQotIAkJcmV0dXJuIC0xOwotIAotKwkvKiBUcnkgdG8gYmluZCBwb3J0cyBzdGFydGluZyBhdCA2 MDAwK1gxMURpc3BsYXlPZmZzZXQgKi8KLSsJeDExX21heF9kaXNwbGF5cyA9IHgxMV9tYXhfZGlz cGxheXMgKyB4MTFfZGlzcGxheV9vZmZzZXQ7Ci0rCi0gCWZvciAoZGlzcGxheV9udW1iZXIgPSB4 MTFfZGlzcGxheV9vZmZzZXQ7Ci0tCSAgICBkaXNwbGF5X251bWJlciA8IHgxMV9kaXNwbGF5X29m ZnNldCArIE1BWF9ESVNQTEFZUzsKLSsJICAgIGRpc3BsYXlfbnVtYmVyIDwgeDExX21heF9kaXNw bGF5czsKLSAJICAgIGRpc3BsYXlfbnVtYmVyKyspIHsKLSAJCXBvcnQgPSBYMTFfQkFTRV9QT1JU ICsgZGlzcGxheV9udW1iZXI7Ci0gCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsK LUBAIC01MTQ2LDcgKzUxNDksNyBAQCB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3No ICpzc2gsIGludCB4MTFfZGlzcGxheV9vZmZzZXQsCi0gCQlpZiAobnVtX3NvY2tzID4gMCkKLSAJ CQlicmVhazsKLSAJfQotLQlpZiAoZGlzcGxheV9udW1iZXIgPj0geDExX2Rpc3BsYXlfb2Zmc2V0 ICsgTUFYX0RJU1BMQVlTKSB7Ci0rCWlmIChkaXNwbGF5X251bWJlciA+PSB4MTFfbWF4X2Rpc3Bs YXlzIHx8IHBvcnQgPCBYMTFfQkFTRV9QT1JUICkgewotIAkJZXJyb3IoIkZhaWxlZCB0byBhbGxv Y2F0ZSBpbnRlcm5ldC1kb21haW4gWDExIGRpc3BsYXkgc29ja2V0LiIpOwotIAkJcmV0dXJuIC0x OwotIAl9Ci1kaWZmIC0tZ2l0IGEvY2hhbm5lbHMuaCBiL2NoYW5uZWxzLmgKLWluZGV4IDc0NTY1 NDFmOC4uNzU0YmQ5OGVlIDEwMDY0NAotLS0tIGEvY2hhbm5lbHMuaAotKysrIGIvY2hhbm5lbHMu aAotQEAgLTM4OSw3ICszODksNyBAQCBpbnQJIHBlcm1pdG9wZW5fcG9ydChjb25zdCBjaGFyICop OwotIAotIHZvaWQJIGNoYW5uZWxfc2V0X3gxMV9yZWZ1c2VfdGltZShzdHJ1Y3Qgc3NoICosIHRp bWVfdCk7Ci0gaW50CSB4MTFfY29ubmVjdF9kaXNwbGF5KHN0cnVjdCBzc2ggKik7Ci0taW50CSB4 MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICosIGludCwgaW50LCBpbnQsIHVfaW50 ICosIGludCAqKik7Ci0raW50CSB4MTFfY3JlYXRlX2Rpc3BsYXlfaW5ldChzdHJ1Y3Qgc3NoICos IGludCwgaW50LCBpbnQsIGludCwgdV9pbnQgKiwgaW50ICoqKTsKLSB2b2lkCSB4MTFfcmVxdWVz dF9mb3J3YXJkaW5nX3dpdGhfc3Bvb2Zpbmcoc3RydWN0IHNzaCAqLCBpbnQsCi0gCSAgICBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotIGludCAgICAgIHgx MV9jaGFubmVsX3VzZWRfcmVjZW50bHkoc3RydWN0IHNzaCAqc3NoKTsKLWRpZmYgLS1naXQgYS9z ZXJ2Y29uZi5jIGIvc2VydmNvbmYuYwotaW5kZXggZmIxZDE1MGNkLi45NTYyMDVmNmQgMTAwNjQ0 Ci0tLS0gYS9zZXJ2Y29uZi5jCi0rKysgYi9zZXJ2Y29uZi5jCi1AQCAtMTE4LDYgKzExOCw3IEBA IGluaXRpYWxpemVfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqb3B0aW9ucykKLSAJb3B0 aW9ucy0+cHJpbnRfbGFzdGxvZyA9IC0xOwotIAlvcHRpb25zLT54MTFfZm9yd2FyZGluZyA9IC0x OwotIAlvcHRpb25zLT54MTFfZGlzcGxheV9vZmZzZXQgPSAtMTsKLSsJb3B0aW9ucy0+eDExX21h eF9kaXNwbGF5cyA9IC0xOwotIAlvcHRpb25zLT54MTFfdXNlX2xvY2FsaG9zdCA9IC0xOwotIAlv cHRpb25zLT5wZXJtaXRfdHR5ID0gLTE7Ci0gCW9wdGlvbnMtPnBlcm1pdF91c2VyX3JjID0gLTE7 Ci1AQCAtMzU3LDYgKzM1OCw4IEBAIGZpbGxfZGVmYXVsdF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJP cHRpb25zICpvcHRpb25zKQotIAkJb3B0aW9ucy0+eDExX2ZvcndhcmRpbmcgPSAwOwotIAlpZiAo b3B0aW9ucy0+eDExX2Rpc3BsYXlfb2Zmc2V0ID09IC0xKQotIAkJb3B0aW9ucy0+eDExX2Rpc3Bs YXlfb2Zmc2V0ID0gMTA7Ci0rCWlmIChvcHRpb25zLT54MTFfbWF4X2Rpc3BsYXlzID09IC0xKQot KwkJb3B0aW9ucy0+eDExX21heF9kaXNwbGF5cyA9IERFRkFVTFRfTUFYX0RJU1BMQVlTOwotIAlp ZiAob3B0aW9ucy0+eDExX3VzZV9sb2NhbGhvc3QgPT0gLTEpCi0gCQlvcHRpb25zLT54MTFfdXNl X2xvY2FsaG9zdCA9IDE7Ci0gCWlmIChvcHRpb25zLT54YXV0aF9sb2NhdGlvbiA9PSBOVUxMKQot QEAgLTU4Miw3ICs1ODUsNyBAQCB0eXBlZGVmIGVudW0gewotIAlzS2VyYmVyb3NHZXRBRlNUb2tl biwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hlLCBzS2VyYmVyb3NVc2VLdXNlcm9rLCBzUGFzc3dvcmRB dXRoZW50aWNhdGlvbiwKLSAJc0tiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24sIHNMaXN0ZW5B ZGRyZXNzLCBzQWRkcmVzc0ZhbWlseSwKLSAJc1ByaW50TW90ZCwgc1ByaW50TGFzdExvZywgc0ln bm9yZVJob3N0cywKLS0Jc1gxMUZvcndhcmRpbmcsIHNYMTFEaXNwbGF5T2Zmc2V0LCBzWDExVXNl TG9jYWxob3N0LAotKwlzWDExRm9yd2FyZGluZywgc1gxMURpc3BsYXlPZmZzZXQsIHNYMTFNYXhE aXNwbGF5cywgc1gxMVVzZUxvY2FsaG9zdCwKLSAJc1Blcm1pdFRUWSwgc1N0cmljdE1vZGVzLCBz RW1wdHlQYXNzd2QsIHNUQ1BLZWVwQWxpdmUsCi0gCXNQZXJtaXRVc2VyRW52aXJvbm1lbnQsIHNB bGxvd1RjcEZvcndhcmRpbmcsIHNDb21wcmVzc2lvbiwKLSAJc1Jla2V5TGltaXQsIHNBbGxvd1Vz ZXJzLCBzRGVueVVzZXJzLCBzQWxsb3dHcm91cHMsIHNEZW55R3JvdXBzLAotQEAgLTcyNSw2ICs3 MjgsNyBAQCBzdGF0aWMgc3RydWN0IHsKLSAJeyAiaWdub3JldXNlcmtub3duaG9zdHMiLCBzSWdu b3JlVXNlcktub3duSG9zdHMsIFNTSENGR19HTE9CQUwgfSwKLSAJeyAieDExZm9yd2FyZGluZyIs IHNYMTFGb3J3YXJkaW5nLCBTU0hDRkdfQUxMIH0sCi0gCXsgIngxMWRpc3BsYXlvZmZzZXQiLCBz WDExRGlzcGxheU9mZnNldCwgU1NIQ0ZHX0FMTCB9LAotKwl7ICJ4MTFtYXhkaXNwbGF5cyIsIHNY MTFNYXhEaXNwbGF5cywgU1NIQ0ZHX0FMTCB9LAotIAl7ICJ4MTF1c2Vsb2NhbGhvc3QiLCBzWDEx VXNlTG9jYWxob3N0LCBTU0hDRkdfQUxMIH0sCi0gCXsgInhhdXRobG9jYXRpb24iLCBzWEF1dGhM b2NhdGlvbiwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJzdHJpY3Rtb2RlcyIsIHNTdHJpY3RNb2Rl cywgU1NIQ0ZHX0dMT0JBTCB9LAotQEAgLTE3NzUsNiArMTc3OSwxMCBAQCBwcm9jZXNzX3NlcnZl cl9jb25maWdfbGluZV9kZXB0aChTZXJ2ZXJPcHRpb25zICpvcHRpb25zLCBjaGFyICpsaW5lLAot IAkJCSppbnRwdHIgPSB2YWx1ZTsKLSAJCWJyZWFrOwotIAotKwljYXNlIHNYMTFNYXhEaXNwbGF5 czoKLSsJCWludHB0ciA9ICZvcHRpb25zLT54MTFfbWF4X2Rpc3BsYXlzOwotKwkJZ290byBwYXJz ZV9pbnQ7Ci0rCi0gCWNhc2Ugc1gxMVVzZUxvY2FsaG9zdDoKLSAJCWludHB0ciA9ICZvcHRpb25z LT54MTFfdXNlX2xvY2FsaG9zdDsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLUBAIC0zMDM3LDYgKzMw NDUsNyBAQCBjb3B5X3NldF9zZXJ2ZXJfb3B0aW9ucyhTZXJ2ZXJPcHRpb25zICpkc3QsIFNlcnZl ck9wdGlvbnMgKnNyYywgaW50IHByZWF1dGgpCi0gCU1fQ1BfSU5UT1BUKGZ3ZF9vcHRzLnN0cmVh bWxvY2FsX2JpbmRfdW5saW5rKTsKLSAJTV9DUF9JTlRPUFQoeDExX2Rpc3BsYXlfb2Zmc2V0KTsK LSAJTV9DUF9JTlRPUFQoeDExX2ZvcndhcmRpbmcpOwotKwlNX0NQX0lOVE9QVCh4MTFfbWF4X2Rp c3BsYXlzKTsKLSAJTV9DUF9JTlRPUFQoeDExX3VzZV9sb2NhbGhvc3QpOwotIAlNX0NQX0lOVE9Q VChwZXJtaXRfdHR5KTsKLSAJTV9DUF9JTlRPUFQocGVybWl0X3VzZXJfcmMpOwotQEAgLTMzMzIs NiArMzM0MSw3IEBAIGR1bXBfY29uZmlnKFNlcnZlck9wdGlvbnMgKm8pCi0gI2VuZGlmCi0gCWR1 bXBfY2ZnX2ludChzTG9naW5HcmFjZVRpbWUsIG8tPmxvZ2luX2dyYWNlX3RpbWUpOwotIAlkdW1w X2NmZ19pbnQoc1gxMURpc3BsYXlPZmZzZXQsIG8tPngxMV9kaXNwbGF5X29mZnNldCk7Ci0rCWR1 bXBfY2ZnX2ludChzWDExTWF4RGlzcGxheXMsIG8tPngxMV9tYXhfZGlzcGxheXMpOwotIAlkdW1w X2NmZ19pbnQoc01heEF1dGhUcmllcywgby0+bWF4X2F1dGh0cmllcyk7Ci0gCWR1bXBfY2ZnX2lu dChzTWF4U2Vzc2lvbnMsIG8tPm1heF9zZXNzaW9ucyk7Ci0gCWR1bXBfY2ZnX2ludChzQ2xpZW50 QWxpdmVJbnRlcnZhbCwgby0+Y2xpZW50X2FsaXZlX2ludGVydmFsKTsKLWRpZmYgLS1naXQgYS9z ZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAotaW5kZXggOWIxYTczYjhkLi42YmZkZjYzMDUgMTAwNjQ0 Ci0tLS0gYS9zZXJ2Y29uZi5oCi0rKysgYi9zZXJ2Y29uZi5oCi1AQCAtMzgsNiArMzgsNyBAQAot IAotICNkZWZpbmUgREVGQVVMVF9BVVRIX0ZBSUxfTUFYCTYJLyogRGVmYXVsdCBmb3IgTWF4QXV0 aFRyaWVzICovCi0gI2RlZmluZSBERUZBVUxUX1NFU1NJT05TX01BWAkxMAkvKiBEZWZhdWx0IGZv ciBNYXhTZXNzaW9ucyAqLwotKyNkZWZpbmUgREVGQVVMVF9NQVhfRElTUExBWVMJMTAwMCAvKiBN YXhpbXVtIG51bWJlciBvZiBmYWtlIFgxMSBkaXNwbGF5cyB0byB0cnkuICovCi0gCi0gLyogTWFn aWMgbmFtZSBmb3IgaW50ZXJuYWwgc2Z0cC1zZXJ2ZXIgKi8KLSAjZGVmaW5lIElOVEVSTkFMX1NG VFBfTkFNRQkiaW50ZXJuYWwtc2Z0cCIKLUBAIC0xMTQsNiArMTE1LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgewotIAlpbnQgICAgIHgxMV9mb3J3YXJkaW5nOwkvKiBJZiB0cnVlLCBwZXJtaXQgaW5ldCAo c3Bvb2ZpbmcpIFgxMSBmd2QuICovCi0gCWludCAgICAgeDExX2Rpc3BsYXlfb2Zmc2V0OwkvKiBX aGF0IERJU1BMQVkgbnVtYmVyIHRvIHN0YXJ0Ci0gCQkJCQkgKiBzZWFyY2hpbmcgYXQgKi8KLSsJ aW50IAl4MTFfbWF4X2Rpc3BsYXlzOyAvKiBOdW1iZXIgb2YgZGlzcGxheXMgdG8gc2VhcmNoICov Ci0gCWludCAgICAgeDExX3VzZV9sb2NhbGhvc3Q7CS8qIElmIHRydWUsIHVzZSBsb2NhbGhvc3Qg Zm9yIGZha2UgWDExIHNlcnZlci4gKi8KLSAJY2hhciAgICp4YXV0aF9sb2NhdGlvbjsJLyogTG9j YXRpb24gb2YgeGF1dGggcHJvZ3JhbSAqLwotIAlpbnQJcGVybWl0X3R0eTsJLyogSWYgZmFsc2Us IGRlbnkgcHR5IGFsbG9jYXRpb24gKi8KLWRpZmYgLS1naXQgYS9zZXNzaW9uLmMgYi9zZXNzaW9u LmMKLWluZGV4IDgwMjgyZGZkOC4uZTUzZDA0NGEwIDEwMDY0NAotLS0tIGEvc2Vzc2lvbi5jCi0r KysgYi9zZXNzaW9uLmMKLUBAIC0yNjgxLDggKzI2ODEsOSBAQCBzZXNzaW9uX3NldHVwX3gxMWZ3 ZChzdHJ1Y3Qgc3NoICpzc2gsIFNlc3Npb24gKnMpCi0gCQlyZXR1cm4gMDsKLSAJfQotIAlpZiAo eDExX2NyZWF0ZV9kaXNwbGF5X2luZXQoc3NoLCBvcHRpb25zLngxMV9kaXNwbGF5X29mZnNldCwK LS0JICAgIG9wdGlvbnMueDExX3VzZV9sb2NhbGhvc3QsIHMtPnNpbmdsZV9jb25uZWN0aW9uLAot LQkgICAgJnMtPmRpc3BsYXlfbnVtYmVyLCAmcy0+eDExX2NoYW5pZHMpID09IC0xKSB7Ci0rCSAg ICBvcHRpb25zLngxMV91c2VfbG9jYWxob3N0LCBvcHRpb25zLngxMV9tYXhfZGlzcGxheXMsCi0r CSAgICBzLT5zaW5nbGVfY29ubmVjdGlvbiwgJnMtPmRpc3BsYXlfbnVtYmVyLAotKwkgICAgJnMt PngxMV9jaGFuaWRzKSA9PSAtMSkgewotIAkJZGVidWcoIngxMV9jcmVhdGVfZGlzcGxheV9pbmV0 IGZhaWxlZC4iKTsKLSAJCXJldHVybiAwOwotIAl9Ci1kaWZmIC0tZ2l0IGEvc3NoZF9jb25maWcu NSBiL3NzaGRfY29uZmlnLjUKLWluZGV4IDRhZTRiZWJlZS4uM2RiY2U1NWZjIDEwMDY0NAotLS0t IGEvc3NoZF9jb25maWcuNQotKysrIGIvc3NoZF9jb25maWcuNQotQEAgLTE0MDMsNiArMTQwMyw3 IEBAIEF2YWlsYWJsZSBrZXl3b3JkcyBhcmUKLSAuQ20gVHJ1c3RlZFVzZXJDQUtleXMgLAotIC5D bSBVbnVzZWRDb25uZWN0aW9uVGltZW91dCAsCi0gLkNtIFgxMURpc3BsYXlPZmZzZXQgLAotKy5D bSBYMTFNYXhEaXNwbGF5cyAsCi0gLkNtIFgxMUZvcndhcmRpbmcKLSBhbmQKLSAuQ20gWDExVXNl TG9jYWxob3N0IC4KLUBAIC0yMTEyLDYgKzIxMTMsMTIgQEAgU3BlY2lmaWVzIHRoZSBmaXJzdCBk aXNwbGF5IG51bWJlciBhdmFpbGFibGUgZm9yCi0gWDExIGZvcndhcmRpbmcuCi0gVGhpcyBwcmV2 ZW50cyBzc2hkIGZyb20gaW50ZXJmZXJpbmcgd2l0aCByZWFsIFgxMSBzZXJ2ZXJzLgotIFRoZSBk ZWZhdWx0IGlzIDEwLgotKy5JdCBDbSBYMTFNYXhEaXNwbGF5cwotK1NwZWNpZmllcyB0aGUgbWF4 aW11bSBudW1iZXIgb2YgZGlzcGxheXMgYXZhaWxhYmxlIGZvcgotKy5YciBzc2hkIDggTnMgJ3MK LStYMTEgZm9yd2FyZGluZy4KLStUaGlzIHByZXZlbnRzIHNzaGQgZnJvbSBleGhhdXN0aW5nIGxv Y2FsIHBvcnRzLgotK1RoZSBkZWZhdWx0IGlzIDEwMDAuCi0gLkl0IENtIFgxMUZvcndhcmRpbmcK LSBTcGVjaWZpZXMgd2hldGhlciBYMTEgZm9yd2FyZGluZyBpcyBwZXJtaXR0ZWQuCi0gVGhlIGFy Z3VtZW50IG11c3QgYmUKLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDUyLWdzc2FwaS1z NHUucGF0Y2ggYi8wMDUyLWdzc2FwaS1zNHUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uOGIzYjJjMgotLS0gL2Rldi9udWxsCisrKyBiLzAwNTItZ3NzYXBpLXM0dS5w YXRjaApAQCAtMCwwICsxLDEwNzcgQEAKK0Zyb20gZjYyOWJlYjBmYjA5NGZmZWE4MzI3Njk5YTk0 MmJhM2MxODBmNWUwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERtaXRyeSBCZWx5 YXZza2l5IDxiZWxkbWl0QGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTIgQXByIDIwMjYgMTI6MjU6 MjEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA1Mi81NF0gZ3NzYXBpLXM0dQorCitDby1BdXRob3Jl ZC1CeTogQ2xhdWRlIFNvbm5ldCA0LjUgPG5vcmVwbHlAYW50aHJvcGljLmNvbT4KKy0tLQorIGF1 dGgta3JiNS5jICAgICB8ICAxMyArKworIGNvbmZpZ3VyZS5hYyAgICB8ICAxMCArLQorIGdzcy1z ZXJ2LWtyYjUuYyB8IDIyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZ3NzLXNlcnYu YyAgICAgIHwgMzg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLQorIHNlcnZjb25mLmMgICAgICB8ICA1OCArKysrKysrKworIHNlcnZjb25mLmggICAgICB8 ICAgNCArCisgc3NoLWdzcy5oICAgICAgIHwgIDEzICsrCisgc3NoZC1zZXNzaW9uLmMgIHwgIDk4 ICsrKysrKysrKysrKworIHNzaGRfY29uZmlnLjUgICB8ICA3MCArKysrKysrKysKKyA5IGZpbGVz IGNoYW5nZWQsIDg2MSBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdp dCBhL2F1dGgta3JiNS5jIGIvYXV0aC1rcmI1LmMKK2luZGV4IDI4N2JkZDM1YS4uN2Q0ZmJjYzNk IDEwMDY0NAorLS0tIGEvYXV0aC1rcmI1LmMKKysrKyBiL2F1dGgta3JiNS5jCitAQCAtNDYzLDYg KzQ2MywxOSBAQCBzc2hfa3JiNV9jY19uZXdfdW5pcXVlKGtyYjVfY29udGV4dCBjdHgsIGtyYjVf Y2NhY2hlICpjY2FjaGUsIGludCAqbmVlZF9lbnZpcm9ubQorIAkgKiBhIHByaW1hcnkgY2FjaGUg Zm9yIHRoaXMgY29sbGVjdGlvbiwgaWYgaXQgc3VwcG9ydHMgdGhhdCAobm9uLUZJTEUpCisgCSAq LworIAlpZiAoa3JiNV9jY19zdXBwb3J0X3N3aXRjaChjdHgsIHR5cGUpKSB7CisrCQkvKgorKwkJ ICogRm9yIGNvbGxlY3Rpb24tdHlwZSBjYWNoZXMgKEtDTSwgS0VZUklORywg4oCmKSByZXVzZSB0 aGUKKysJCSAqIGV4aXN0aW5nIHByaW1hcnkgY2NhY2hlIHdoZW4gb25lIGlzIGFscmVhZHkgcHJl c2VudC4gIFRoZQorKwkJICogY2FsbGVyIHdpbGwgcmVpbml0aWFsaXNlIGl0IHdpdGgga3JiNV9j Y19pbml0aWFsaXplKCksIHNvCisrCQkgKiBpdHMgb2xkIGNvbnRlbnRzIGFyZSByZXBsYWNlZCBy YXRoZXIgdGhhbiBvcnBoYW5lZC4gIE9ubHkKKysJCSAqIGNyZWF0ZSBhIGZyZXNoIHVuaXF1ZSBj Y2FjaGUgd2hlbiBubyBwcmltYXJ5IGV4aXN0cyB5ZXQuCisrCQkgKi8KKysJCWlmIChrcmI1X2Nj X2RlZmF1bHQoY3R4LCBjY2FjaGUpID09IDApIHsKKysJCQlkZWJ1ZzNfZigicmV1c2luZyBleGlz dGluZyBkZWZhdWx0IGNjYWNoZSBvZiB0eXBlICVzIiwKKysJCQkgICAgdHlwZSk7CisrCQkJZnJl ZSh0eXBlKTsKKysJCQlyZXR1cm4gMDsKKysJCX0KKyAJCWRlYnVnM19mKCJjYWxsaW5nIGNjX25l d191bmlxdWUoJXMpIiwgY2NuYW1lKTsKKyAJCXJldCA9IGtyYjVfY2NfbmV3X3VuaXF1ZShjdHgs IHR5cGUsIE5VTEwsIGNjYWNoZSk7CisgCQlmcmVlKHR5cGUpOworZGlmZiAtLWdpdCBhL2NvbmZp Z3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMTM4OGU1ZTcyLi42MmIyYmY5ZTcgMTAwNjQ0 CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUxNDUsMTEgKzUx NDUsMTcgQEAgQUNfQVJHX1dJVEgoW2tlcmJlcm9zNV0sCisgIyBpbmNsdWRlIDxnc3NhcGlfZ2Vu ZXJpYy5oPgorICNlbGlmIGRlZmluZWQoSEFWRV9HU1NBUElfR1NTQVBJX0dFTkVSSUNfSCkKKyAj IGluY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgorKyNlbmRpZgorKyNpZmRlZiBIQVZF X0dTU0FQSV9FWFRfSAorKyMgaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9leHQuaD4KKysjZW5kaWYK KysjaWZkZWYgSEFWRV9HU1NBUElfS1JCNV9ICisrIyBpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2ty YjUuaD4KKyAjZW5kaWYKKyAJCV1dKQorIAkJc2F2ZWRfTElCUz0iJExJQlMiCistCQlMSUJTPSIk TElCUyAkSzVMSUJTIgorLQkJQUNfQ0hFQ0tfRlVOQ1MoW2tyYjVfY2NfbmV3X3VuaXF1ZSBrcmI1 X2dldF9lcnJvcl9tZXNzYWdlIGtyYjVfZnJlZV9lcnJvcl9tZXNzYWdlXSkKKysJCUxJQlM9IiRM SUJTICRHU1NMSUJTICRLNUxJQlMgIgorKwkJQUNfQ0hFQ0tfRlVOQ1MoW2tyYjVfY2NfbmV3X3Vu aXF1ZSBrcmI1X2dldF9lcnJvcl9tZXNzYWdlIGtyYjVfZnJlZV9lcnJvcl9tZXNzYWdlIGdzc19h Y3F1aXJlX2NyZWRfZnJvbV0pCisgCQlMSUJTPSIkc2F2ZWRfTElCUyIKKyAKKyAJZmkKK2RpZmYg LS1naXQgYS9nc3Mtc2Vydi1rcmI1LmMgYi9nc3Mtc2Vydi1rcmI1LmMKK2luZGV4IGZjN2NhYmMw OS4uMDZkNDUwZDRkIDEwMDY0NAorLS0tIGEvZ3NzLXNlcnYta3JiNS5jCisrKysgYi9nc3Mtc2Vy di1rcmI1LmMKK0BAIC02MDksNiArNjA5LDIzMSBAQCBzc2hfZ3NzYXBpX2tyYjVfdXBkYXRlY3Jl ZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlLAorIAlyZXR1cm4gMTsKKyB9CisgCisrLyoKKysg KiBDaGVjayB3aGV0aGVyIHRoZSB1c2VyJ3MgZGVmYXVsdCBjY2FjaGUgYWxyZWFkeSBjb250YWlu cyB2YWxpZCBzZXJ2aWNlCisrICogdGlja2V0cyBmb3IgYWxsIHByaW5jaXBhbHMgbGlzdGVkIGlu IHNlcnZpY2VzW10uICBSZXR1cm5zIDEgaWYgZXZlcnkKKysgKiBsaXN0ZWQgc2VydmljZSBoYXMg YSB0aWNrZXQgd2l0aCBhdCBsZWFzdCBtaW5fbGlmZXRpbWUgc2Vjb25kcyByZW1haW5pbmcKKysg KiAocGFzcyBHU1NfQ19JTkRFRklOSVRFIHRvIGFjY2VwdCBhbnkgcG9zaXRpdmUgcmVtYWluaW5n IGxpZmV0aW1lKSwgMCBpZgorKyAqIGFueSB0aWNrZXQgaXMgbWlzc2luZyBvciB0b28gY2xvc2Ug dG8gZXhwaXJ5LiAgUnVucyBhcyB0aGUgdXNlci4KKysgKgorKyAqIFVubGlrZSBzc2hfZ3NzYXBp X3VzZXJfaGFzX3ZhbGlkX3RndCgpLCB0aGlzIGNhbm5vdCB1c2UgZ3NzX2FjcXVpcmVfY3JlZCgp CisrICogYmVjYXVzZSBzZXJ2aWNlIHRpY2tldHMgYXJlIG5vdCBpbml0aWF0b3IgY3JlZGVudGlh bHMg4oCUIEdTU0FQSSBvbmx5CisrICogc3VyZmFjZXMgVEdUcyB2aWEgdGhhdCBBUEkuICBXZSBp dGVyYXRlIHRoZSBjY2FjaGUgd2l0aCB0aGUga3JiNSBBUEkKKysgKiBkaXJlY3RseSBpbnN0ZWFk LgorKyAqLworK2ludAorK3NzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfcHJveHlfdGlja2V0cyhj aGFyICoqc2VydmljZXMsIHVfaW50IG5zZXJ2aWNlcywKKysgICAgdV9pbnQgbWluX2xpZmV0aW1l KQorK3sKKysJa3JiNV9jb250ZXh0IGN0eCA9IE5VTEw7CisrCWtyYjVfY2NhY2hlIGNjID0gTlVM TDsKKysJa3JiNV9jY19jdXJzb3IgY3Vyc29yOworKwlrcmI1X2NyZWRzIGNyZWQ7CisrCWtyYjVf cHJpbmNpcGFsIHN2Y19wcmluYzsKKysJaW50ICpmb3VuZCA9IE5VTEw7CisrCXVfaW50IGk7Cisr CWludCBhbGxfZm91bmQgPSAwOworKwl0aW1lX3Qgbm93OworKworKwlpZiAobnNlcnZpY2VzID09 IDApCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKGtyYjVfaW5pdF9jb250ZXh0KCZjdHgpICE9IDAp CisrCQlyZXR1cm4gMDsKKysKKysJZm91bmQgPSB4Y2FsbG9jKG5zZXJ2aWNlcywgc2l6ZW9mKCpm b3VuZCkpOworKwlub3cgPSB0aW1lKE5VTEwpOworKworKwlpZiAoa3JiNV9jY19kZWZhdWx0KGN0 eCwgJmNjKSAhPSAwKQorKwkJZ290byBvdXQ7CisrCisrCWlmIChrcmI1X2NjX3N0YXJ0X3NlcV9n ZXQoY3R4LCBjYywgJmN1cnNvcikgIT0gMCkgeworKwkJa3JiNV9jY19jbG9zZShjdHgsIGNjKTsK KysJCWNjID0gTlVMTDsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCXdoaWxlIChrcmI1X2NjX25l eHRfY3JlZChjdHgsIGNjLCAmY3Vyc29yLCAmY3JlZCkgPT0gMCkgeworKwkJLyoKKysJCSAqIFVz ZSBrcmI1X3ByaW5jaXBhbF9jb21wYXJlKCkgc28gdGhhdCBzZXJ2aWNlIG5hbWVzCisrCQkgKiBj b25maWd1cmVkIHdpdGhvdXQgYW4gZXhwbGljaXQgcmVhbG0gKGtyYjVfcGFyc2VfbmFtZQorKwkJ ICogYXBwZW5kcyB0aGUgZGVmYXVsdCByZWFsbSkgc3RpbGwgbWF0Y2ggdGhlIGZ1bGx5LQorKwkJ ICogcXVhbGlmaWVkIHByaW5jaXBhbCBzdG9yZWQgaW4gdGhlIGNjYWNoZS4KKysJCSAqLworKwkJ Zm9yIChpID0gMDsgaSA8IG5zZXJ2aWNlczsgaSsrKSB7CisrCQkJaWYgKGZvdW5kW2ldKQorKwkJ CQljb250aW51ZTsKKysJCQlpZiAoa3JiNV9wYXJzZV9uYW1lKGN0eCwgc2VydmljZXNbaV0sCisr CQkJICAgICZzdmNfcHJpbmMpICE9IDApCisrCQkJCWNvbnRpbnVlOworKwkJCWlmIChrcmI1X3By aW5jaXBhbF9jb21wYXJlKGN0eCwKKysJCQkgICAgY3JlZC5zZXJ2ZXIsIHN2Y19wcmluYykpIHsK KysJCQkJa3JiNV9kZWx0YXQgcmVtYWluaW5nID0KKysJCQkJICAgIGNyZWQudGltZXMuZW5kdGlt ZSAtIG5vdzsKKysJCQkJaWYgKHJlbWFpbmluZyA+IDAgJiYKKysJCQkJICAgIChtaW5fbGlmZXRp bWUgPT0gR1NTX0NfSU5ERUZJTklURSB8fAorKwkJCQkgICAgIChrcmI1X2RlbHRhdCltaW5fbGlm ZXRpbWUgPD0gcmVtYWluaW5nKSkKKysJCQkJCWZvdW5kW2ldID0gMTsKKysJCQl9CisrCQkJa3Ji NV9mcmVlX3ByaW5jaXBhbChjdHgsIHN2Y19wcmluYyk7CisrCQl9CisrCQlrcmI1X2ZyZWVfY3Jl ZF9jb250ZW50cyhjdHgsICZjcmVkKTsKKysJfQorKwlrcmI1X2NjX2VuZF9zZXFfZ2V0KGN0eCwg Y2MsICZjdXJzb3IpOworKwlrcmI1X2NjX2Nsb3NlKGN0eCwgY2MpOworKwljYyA9IE5VTEw7Cisr CisrCWFsbF9mb3VuZCA9IDE7CisrCWZvciAoaSA9IDA7IGkgPCBuc2VydmljZXM7IGkrKykgewor KwkJaWYgKCFmb3VuZFtpXSkgeworKwkJCWFsbF9mb3VuZCA9IDA7CisrCQkJYnJlYWs7CisrCQl9 CisrCX0KKytvdXQ6CisrCWZyZWUoZm91bmQpOworKwlpZiAoY3R4ICE9IE5VTEwpCisrCQlrcmI1 X2ZyZWVfY29udGV4dChjdHgpOworKwlyZXR1cm4gYWxsX2ZvdW5kOworK30KKysKKysvKiBBcyB1 c2VyIC0gY2FsbGVkIG9uIGZhdGFsL2V4aXQgKi8KKyt2b2lkCisrc3NoX2dzc2FwaV9jbGVhbnVw X2NyZWRzKHZvaWQpCisreworKwlzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUgPSBzc2hfZ3NzYXBp X2dldF9jY2FjaGUoKTsKKysJa3JiNV9jY2FjaGUgY2NhY2hlID0gTlVMTDsKKysJa3JiNV9lcnJv cl9jb2RlIHByb2JsZW07CisrCisrCWlmIChzdG9yZS0+ZGF0YSAhPSBOVUxMKSB7CisrCQlpZiAo KHByb2JsZW0gPSBrcmI1X2NjX3Jlc29sdmUoc3RvcmUtPmRhdGEsCisrCQkgICAgc3RvcmUtPmVu dnZhbCwgJmNjYWNoZSkpKSB7CisrCQkJZGVidWdfZigia3JiNV9jY19yZXNvbHZlKCk6ICUuMTAw cyIsCisrCQkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KHN0b3JlLT5kYXRhLCBwcm9ibGVtKSk7Cisr CQl9IGVsc2UgaWYgKChwcm9ibGVtID0ga3JiNV9jY19kZXN0cm95KHN0b3JlLT5kYXRhLCBjY2Fj aGUpKSkgeworKwkJCWRlYnVnX2YoImtyYjVfY2NfZGVzdHJveSgpOiAlLjEwMHMiLAorKwkJCSAg ICBrcmI1X2dldF9lcnJfdGV4dChzdG9yZS0+ZGF0YSwgcHJvYmxlbSkpOworKwkJfSBlbHNlIHsK KysJCQlrcmI1X2ZyZWVfY29udGV4dChzdG9yZS0+ZGF0YSk7CisrCQkJc3RvcmUtPmRhdGEgPSBO VUxMOworKwkJfQorKwl9CisrfQorKworKy8qCisrICogRmlsdGVyIHRoZSB1c2VyJ3MgY2NhY2hl IGJ5IHJlbW92aW5nIHRoZSB0aWNrZXQgY2xhc3NlcyBpbmRpY2F0ZWQgYnkKKysgKiBkcm9wX2Zs YWdzIChTU0hfR1NTQVBJX0NDRklMVEVSXyogYml0bWFzaykuICBFYWNoIGNyZWRlbnRpYWwgaXMK KysgKiBjYXRlZ29yaXNlZCBhcyBvbmUgb2Y6CisrICogICBUR1QgICAtIHNlcnZlciBwcmluY2lw YWwgbWF0Y2hlcyAia3JidGd0LyIgcHJlZml4CisrICogICBQUk9YWSAtIHNlcnZlciBwcmluY2lw YWwgbWF0Y2hlcyBvbmUgb2YgcHJveHlfc2VydmljZXNbXQorKyAqICAgU0VMRiAgLSBldmVyeXRo aW5nIGVsc2UgKHRoZSBTNFUyU2VsZiBldmlkZW5jZSB0aWNrZXQpCisrICogQ3JlZGVudGlhbHMg aW4gYSBmbGFnZ2VkIGNhdGVnb3J5IGFyZSBkaXNjYXJkZWQ7IHRoZSByZXN0IGFyZSB3cml0dGVu CisrICogYmFjayBhZnRlciByZWluaXRpYWxpc2luZyB0aGUgY2NhY2hlLiAgUnVucyBhcyB1c2Vy LgorKyAqLworK3ZvaWQKKytzc2hfZ3NzYXBpX2tyYjVfZmlsdGVyX2NjYWNoZSh1X2ludCBkcm9w X2ZsYWdzLAorKyAgICBjaGFyICoqcHJveHlfc2VydmljZXMsIHVfaW50IG5wcm94eV9zZXJ2aWNl cykKKyt7CisrCXNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSA9IHNzaF9nc3NhcGlfZ2V0X2NjYWNo ZSgpOworKwlrcmI1X2NvbnRleHQgY3R4ID0gKGtyYjVfY29udGV4dClzdG9yZS0+ZGF0YTsKKysJ a3JiNV9jY2FjaGUgY2MgPSBOVUxMOworKwlrcmI1X2NjX2N1cnNvciBjdXJzb3I7CisrCWtyYjVf Y3JlZHMgKmtlZXAgPSBOVUxMOworKwlrcmI1X3ByaW5jaXBhbCBwcmluYyA9IE5VTEw7CisrCWty YjVfZXJyb3JfY29kZSBwcm9ibGVtOworKwljaGFyICpzcnZuYW1lOworKwl1X2ludCBpLCBua2Vl cCA9IDAsIGNhcCA9IDA7CisrCWludCBpc190Z3QsIGlzX3Byb3h5LCBkcm9wOworKworKwlpZiAo Y3R4ID09IE5VTEwgfHwgc3RvcmUtPmVudnZhbCA9PSBOVUxMKQorKwkJcmV0dXJuOworKworKwlp ZiAoKHByb2JsZW0gPSBrcmI1X2NjX3Jlc29sdmUoY3R4LCBzdG9yZS0+ZW52dmFsLCAmY2MpKSAh PSAwKSB7CisrCQlkZWJ1Z19mKCJrcmI1X2NjX3Jlc29sdmU6ICUuMTAwcyIsCisrCQkgICAga3Ji NV9nZXRfZXJyX3RleHQoY3R4LCBwcm9ibGVtKSk7CisrCQlyZXR1cm47CisrCX0KKysJaWYgKChw cm9ibGVtID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGN0eCwgY2MsICZwcmluYykpICE9IDApIHsK KysJCWRlYnVnX2YoImtyYjVfY2NfZ2V0X3ByaW5jaXBhbDogJS4xMDBzIiwKKysJCSAgICBrcmI1 X2dldF9lcnJfdGV4dChjdHgsIHByb2JsZW0pKTsKKysJCWtyYjVfY2NfY2xvc2UoY3R4LCBjYyk7 CisrCQlyZXR1cm47CisrCX0KKysJaWYgKChwcm9ibGVtID0ga3JiNV9jY19zdGFydF9zZXFfZ2V0 KGN0eCwgY2MsICZjdXJzb3IpKSAhPSAwKSB7CisrCQlkZWJ1Z19mKCJrcmI1X2NjX3N0YXJ0X3Nl cV9nZXQ6ICUuMTAwcyIsCisrCQkgICAga3JiNV9nZXRfZXJyX3RleHQoY3R4LCBwcm9ibGVtKSk7 CisrCQlrcmI1X2ZyZWVfcHJpbmNpcGFsKGN0eCwgcHJpbmMpOworKwkJa3JiNV9jY19jbG9zZShj dHgsIGNjKTsKKysJCXJldHVybjsKKysJfQorKworKwl7CisrCQlrcmI1X2NyZWRzIGNyZWQ7Cisr CQlrcmI1X3ByaW5jaXBhbCBzdmNfcHJpbmM7CisrCQl3aGlsZSAoa3JiNV9jY19uZXh0X2NyZWQo Y3R4LCBjYywgJmN1cnNvciwgJmNyZWQpID09IDApIHsKKysJCQlpc190Z3QgPSBpc19wcm94eSA9 IDA7CisrCQkJaWYgKGtyYjVfdW5wYXJzZV9uYW1lKGN0eCwgY3JlZC5zZXJ2ZXIsCisrCQkJICAg ICZzcnZuYW1lKSA9PSAwKSB7CisrCQkJCWlzX3RndCA9IHN0cm5jbXAoc3J2bmFtZSwgImtyYnRn dC8iLCA3KSA9PSAwOworKwkJCQlrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShjdHgsIHNydm5hbWUp OworKwkJCX0KKysJCQlpZiAoIWlzX3RndCkgeworKwkJCQkvKgorKwkJCQkgKiBVc2Uga3JiNV9w cmluY2lwYWxfY29tcGFyZSgpIHJhdGhlciB0aGFuCisrCQkJCSAqIHN0cmNtcCgpIHNvIHRoYXQg YSBzZXJ2aWNlIG5hbWUgY29uZmlndXJlZAorKwkJCQkgKiB3aXRob3V0IGFuIGV4cGxpY2l0IHJl YWxtIChrcmI1X3BhcnNlX25hbWUKKysJCQkJICogYXBwZW5kcyB0aGUgZGVmYXVsdCByZWFsbSkg c3RpbGwgbWF0Y2hlcworKwkJCQkgKiB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgaW4gdGhlIGNj YWNoZS4KKysJCQkJICovCisrCQkJCWZvciAoaSA9IDA7IGkgPCBucHJveHlfc2VydmljZXM7IGkr KykgeworKwkJCQkJaWYgKGtyYjVfcGFyc2VfbmFtZShjdHgsCisrCQkJCQkgICAgcHJveHlfc2Vy dmljZXNbaV0sICZzdmNfcHJpbmMpICE9IDApCisrCQkJCQkJY29udGludWU7CisrCQkJCQlpZiAo a3JiNV9wcmluY2lwYWxfY29tcGFyZShjdHgsCisrCQkJCQkgICAgY3JlZC5zZXJ2ZXIsIHN2Y19w cmluYykpCisrCQkJCQkJaXNfcHJveHkgPSAxOworKwkJCQkJa3JiNV9mcmVlX3ByaW5jaXBhbChj dHgsIHN2Y19wcmluYyk7CisrCQkJCQlpZiAoaXNfcHJveHkpCisrCQkJCQkJYnJlYWs7CisrCQkJ CX0KKysJCQl9CisrCQkJaWYgKGlzX3RndCkKKysJCQkJZHJvcCA9IGRyb3BfZmxhZ3MgJiBTU0hf R1NTQVBJX0NDRklMVEVSX1RHVDsKKysJCQllbHNlIGlmIChpc19wcm94eSkKKysJCQkJZHJvcCA9 IGRyb3BfZmxhZ3MgJiBTU0hfR1NTQVBJX0NDRklMVEVSX1BST1hZOworKwkJCWVsc2UKKysJCQkJ ZHJvcCA9IGRyb3BfZmxhZ3MgJiBTU0hfR1NTQVBJX0NDRklMVEVSX1NFTEY7CisrCisrCQkJaWYg KCFkcm9wKSB7CisrCQkJCWlmIChua2VlcCA+PSBjYXApIHsKKysJCQkJCWNhcCA9IGNhcCA/IGNh cCAqIDIgOiA0OworKwkJCQkJa2VlcCA9IHhyZWFsbG9jYXJyYXkoa2VlcCwgY2FwLAorKwkJCQkJ ICAgIHNpemVvZigqa2VlcCkpOworKwkJCQl9CisrCQkJCWtlZXBbbmtlZXArK10gPSBjcmVkOwor KwkJCX0gZWxzZQorKwkJCQlrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhjdHgsICZjcmVkKTsKKysJ CX0KKysJfQorKwlrcmI1X2NjX2VuZF9zZXFfZ2V0KGN0eCwgY2MsICZjdXJzb3IpOworKworKwlp ZiAoKHByb2JsZW0gPSBrcmI1X2NjX2luaXRpYWxpemUoY3R4LCBjYywgcHJpbmMpKSAhPSAwKSB7 CisrCQlsb2dpdF9mKCJrcmI1X2NjX2luaXRpYWxpemU6ICUuMTAwcyIsCisrCQkgICAga3JiNV9n ZXRfZXJyX3RleHQoY3R4LCBwcm9ibGVtKSk7CisrCX0gZWxzZSB7CisrCQlmb3IgKGkgPSAwOyBp IDwgbmtlZXA7IGkrKykKKysJCQlrcmI1X2NjX3N0b3JlX2NyZWQoY3R4LCBjYywgJmtlZXBbaV0p OworKwkJZGVidWdfZigiY2NhY2hlIGZpbHRlciAweCV4OiByZXRhaW5lZCAldSB0aWNrZXQocyki LAorKwkJICAgIGRyb3BfZmxhZ3MsIG5rZWVwKTsKKysJfQorKworKwlmb3IgKGkgPSAwOyBpIDwg bmtlZXA7IGkrKykKKysJCWtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGN0eCwgJmtlZXBbaV0pOwor KwlmcmVlKGtlZXApOworKwlrcmI1X2ZyZWVfcHJpbmNpcGFsKGN0eCwgcHJpbmMpOworKwlrcmI1 X2NjX2Nsb3NlKGN0eCwgY2MpOworK30KKysKKyBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2tlcmJl cm9zX21lY2ggPSB7CisgCSJ0b1dNNVNsdzVFdzhNcWtheSthbDJnPT0iLAorIAkiS2VyYmVyb3Mi LAorZGlmZiAtLWdpdCBhL2dzcy1zZXJ2LmMgYi9nc3Mtc2Vydi5jCitpbmRleCA2ODZhYzRlYjMu LjI2ZDBhMTNhNiAxMDA2NDQKKy0tLSBhL2dzcy1zZXJ2LmMKKysrKyBiL2dzcy1zZXJ2LmMKK0BA IC01NSw3ICs1NSw3IEBAIGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7CisgCisgc3RhdGlj IHNzaF9nc3NhcGlfY2xpZW50IGdzc2FwaV9jbGllbnQgPQorICAgICB7IEdTU19DX0VNUFRZX0JV RkZFUiwgR1NTX0NfRU1QVFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5USUFMLAorLSAgICBHU1Nf Q19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0sIDAsIDAsIE5V TEx9OworKyAgICBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTH0sIDAsIDAsIE5VTEwsIDB9OworIAorIHNzaF9nc3NhcGlfbWVjaCBnc3NhcGlfbnVsbF9t ZWNoID0KKyAgICAgeyBOVUxMLCBOVUxMLCB7MCwgTlVMTH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEx9OworQEAgLTQ4OCwyNiArNDg4LDM4MiBAQCBzc2hfZ3NzYXBpX2dldGNsaWVudChH c3NjdHh0ICpjdHgsIHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCisgCXJldHVybiAoY3R4LT5t YWpvcik7CisgfQorIAorLS8qIEFzIHVzZXIgLSBjYWxsZWQgb24gZmF0YWwvZXhpdCAqLworKy8q IFJldHVybnMgbm9uLXplcm8gaWYgS2VyYmVyb3MgY3JlZGVudGlhbHMgaGF2ZSBhbHJlYWR5IGJl ZW4gc3RvcmVkLiAqLworK2ludAorK3NzaF9nc3NhcGlfY3JlZGVudGlhbHNfc3RvcmVkKHZvaWQp CisreworKwlyZXR1cm4gZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwgIT0gTlVMTDsKKyt9Cisr CisrLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNyZWRlbnRpYWwtY2FjaGUgZGVzY3JpcHRv ciBmb3IgdGhpcyBzZXNzaW9uLiAqLworK3NzaF9nc3NhcGlfY2NhY2hlICoKKytzc2hfZ3NzYXBp X2dldF9jY2FjaGUodm9pZCkKKyt7CisrCXJldHVybiAmZ3NzYXBpX2NsaWVudC5zdG9yZTsKKyt9 CisrCisrLyogTG9nIGh1bWFuLXJlYWRhYmxlIEdTU0FQSSBtYWpvciBhbmQgbWlub3Igc3RhdHVz IHN0cmluZ3MuICovCisrc3RhdGljIHZvaWQKKytsb2dfZ3NzX2Vycm9yKE9NX3VpbnQzMiBtYWpv ciwgT01fdWludDMyIG1pbm9yLCBjb25zdCBjaGFyICpsYWJlbCkKKyt7CisrCU9NX3VpbnQzMiBs bWluLCBtY3R4OworKwlnc3NfYnVmZmVyX2Rlc2MgZW1zZyA9IEdTU19DX0VNUFRZX0JVRkZFUjsK KysKKysJbWN0eCA9IDA7CisrCWRvIHsKKysJCWdzc19kaXNwbGF5X3N0YXR1cygmbG1pbiwgbWFq b3IsIEdTU19DX0dTU19DT0RFLAorKwkJICAgIEdTU19DX05PX09JRCwgJm1jdHgsICZlbXNnKTsK KysJCWxvZ2l0KCIlczogJS4qcyIsIGxhYmVsLCAoaW50KWVtc2cubGVuZ3RoLCAoY2hhciAqKWVt c2cudmFsdWUpOworKwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmZW1zZyk7CisrCX0gd2hp bGUgKG1jdHggIT0gMCk7CisrCisrCW1jdHggPSAwOworKwlkbyB7CisrCQlnc3NfZGlzcGxheV9z dGF0dXMoJmxtaW4sIG1pbm9yLCBHU1NfQ19NRUNIX0NPREUsCisrCQkgICAgJmdzc2FwaV9rZXJi ZXJvc19tZWNoLm9pZCwgJm1jdHgsICZlbXNnKTsKKysJCWlmIChlbXNnLmxlbmd0aCA+IDApCisr CQkJbG9naXQoIiVzOiAlLipzIiwgbGFiZWwsCisrCQkJICAgIChpbnQpZW1zZy5sZW5ndGgsIChj aGFyICopZW1zZy52YWx1ZSk7CisrCQlnc3NfcmVsZWFzZV9idWZmZXIoJmxtaW4sICZlbXNnKTsK KysJfSB3aGlsZSAobWN0eCAhPSAwKTsKKyt9CisrCisrLyogTG9nIHRoZSBjYW5vbmljYWwgc3Ry aW5nIGZvcm0gb2YgYSBHU1NBUEkgbmFtZSBhcyBhIGRlYnVnIG1lc3NhZ2UuICovCisrc3RhdGlj IHZvaWQKKytkZWJ1Z19nc3NfbmFtZShjb25zdCBjaGFyICpsYWJlbCwgZ3NzX25hbWVfdCBuYW1l KQorK3sKKysJT01fdWludDMyIGxtaW47CisrCWdzc19idWZmZXJfZGVzYyBidWYgPSBHU1NfQ19F TVBUWV9CVUZGRVI7CisrCisrCWlmIChnc3NfZGlzcGxheV9uYW1lKCZsbWluLCBuYW1lLCAmYnVm LCBOVUxMKSA9PSBHU1NfU19DT01QTEVURSkgeworKwkJZGVidWdfZigiJXM6ICUuKnMiLCBsYWJl bCwgKGludClidWYubGVuZ3RoLCAoY2hhciAqKWJ1Zi52YWx1ZSk7CisrCQlnc3NfcmVsZWFzZV9i dWZmZXIoJmxtaW4sICZidWYpOworKwl9CisrfQorKworKy8qCisrICogQ2hlY2sgd2hldGhlciB0 aGUgdXNlciBhbHJlYWR5IGhhcyB2YWxpZCBHU1NBUEkgaW5pdGlhdG9yIGNyZWRlbnRpYWxzCisr ICogKGUuZy4gYSBLZXJiZXJvcyBUR1QpIGluIHRoZWlyIGRlZmF1bHQgY3JlZGVudGlhbCBzdG9y ZSB3aXRoIGF0IGxlYXN0CisrICogbWluX2xpZmV0aW1lIHNlY29uZHMgcmVtYWluaW5nLiAgUGFz cyBHU1NfQ19JTkRFRklOSVRFIHRvIGFjY2VwdCBhbnkKKysgKiBwb3NpdGl2ZSByZW1haW5pbmcg bGlmZXRpbWUuICBSdW5zIGFzIHRoZSB1c2VyLgorKyAqIFJldHVybnMgMSBpZiBzdWZmaWNpZW50 IGNyZWRlbnRpYWxzIGV4aXN0LCAwIG90aGVyd2lzZS4KKysgKi8KKytpbnQKKytzc2hfZ3NzYXBp X3VzZXJfaGFzX3ZhbGlkX3RndCh1X2ludCBtaW5fbGlmZXRpbWUpCisreworKwlPTV91aW50MzIg bWFqb3IsIG1pbm9yLCBsaWZldGltZSA9IDA7CisrCWdzc19jcmVkX2lkX3QgY3JlZCA9IEdTU19D X05PX0NSRURFTlRJQUw7CisrCWludCBmb3VuZCA9IDA7CisrCisrCW1ham9yID0gZ3NzX2FjcXVp cmVfY3JlZCgmbWlub3IsIEdTU19DX05PX05BTUUsIEdTU19DX0lOREVGSU5JVEUsCisrCSAgICBH U1NfQ19OT19PSURfU0VULCBHU1NfQ19JTklUSUFURSwgJmNyZWQsIE5VTEwsICZsaWZldGltZSk7 CisrCWlmICghR1NTX0VSUk9SKG1ham9yKSAmJiBsaWZldGltZSA+IDAgJiYKKysJICAgIChtaW5f bGlmZXRpbWUgPT0gR1NTX0NfSU5ERUZJTklURSB8fCBsaWZldGltZSA+PSBtaW5fbGlmZXRpbWUp KQorKwkJZm91bmQgPSAxOworKwlpZiAoY3JlZCAhPSBHU1NfQ19OT19DUkVERU5USUFMKQorKwkJ Z3NzX3JlbGVhc2VfY3JlZCgmbWlub3IsICZjcmVkKTsKKysJcmV0dXJuIGZvdW5kOworK30KKysK KysKKysvKgorKyAqIFBlcmZvcm0gUzRVMlNlbGYgKHByb3RvY29sIHRyYW5zaXRpb24pOiBhY3F1 aXJlIGEgS2VyYmVyb3Mgc2VydmljZSB0aWNrZXQKKysgKiBmb3IgdGhlIFNTSCB1c2VyIG9uIGJl aGFsZiBvZiB0aGUgaG9zdCBwcmluY2lwYWwuICBSdW5zIHByaXZpbGVnZWQuCisrICogUG9wdWxh dGVzIGdzc2FwaV9jbGllbnQue2NyZWRzLG1lY2gsZGlzcGxheW5hbWUsZXhwb3J0ZWRuYW1lfSBv biBzdWNjZXNzLgorKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorKyAq LworKy8qIFByaXZpbGVnZWQgKi8KKytpbnQKKytzc2hfZ3NzYXBpX3M0dTJzZWxmKGNvbnN0IGNo YXIgKnVzZXIsIHVfaW50IGxpZmV0aW1lKQorK3sKKysJT01fdWludDMyIG1ham9yLCBtaW5vciwg c3RhdHVzOworKwlnc3NfT0lEX3NldCBvaWRzZXQgPSBHU1NfQ19OT19PSURfU0VUOworKwlnc3Nf bmFtZV90IGhvc3RfbmFtZSA9IEdTU19DX05PX05BTUU7CisrCWdzc19uYW1lX3QgdXNlcl9uYW1l ID0gR1NTX0NfTk9fTkFNRTsKKysJZ3NzX2NyZWRfaWRfdCBob3N0X2NyZWRzID0gR1NTX0NfTk9f Q1JFREVOVElBTDsKKysJZ3NzX2NyZWRfaWRfdCBpbXBlcnNvbmF0ZWRfY3JlZHMgPSBHU1NfQ19O T19DUkVERU5USUFMOworKwlnc3NfYnVmZmVyX2Rlc2MgZ3NzYnVmLCBkaXNwbGF5bmFtZSA9IEdT U19DX0VNUFRZX0JVRkZFUjsKKysJY2hhciBsbmFtZVtOSV9NQVhIT1NUXTsKKysJY2hhciAqdmFs OworKworKwlpZiAoZ2V0aG9zdG5hbWUobG5hbWUsIHNpemVvZihsbmFtZSkpICE9IDApIHsKKysJ CWxvZ2l0X2YoImdldGhvc3RuYW1lOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisrCQlyZXR1cm4g LTE7CisrCX0KKysKKysJLyogQWNxdWlyZSBhY2NlcHRvciBjcmVkZW50aWFsIGZvciBob3N0LyBm cm9tIHRoZSBrZXl0YWIgKi8KKysJZ3NzX2NyZWF0ZV9lbXB0eV9vaWRfc2V0KCZzdGF0dXMsICZv aWRzZXQpOworKwlnc3NfYWRkX29pZF9zZXRfbWVtYmVyKCZzdGF0dXMsICZnc3NhcGlfa2VyYmVy b3NfbWVjaC5vaWQsICZvaWRzZXQpOworKworKwl4YXNwcmludGYoJnZhbCwgImhvc3RAJXMiLCBs bmFtZSk7CisrCWdzc2J1Zi52YWx1ZSA9IHZhbDsKKysJZ3NzYnVmLmxlbmd0aCA9IHN0cmxlbih2 YWwpOworKwltYWpvciA9IGdzc19pbXBvcnRfbmFtZSgmbWlub3IsICZnc3NidWYsCisrCSAgICBH U1NfQ19OVF9IT1NUQkFTRURfU0VSVklDRSwgJmhvc3RfbmFtZSk7CisrCWZyZWUodmFsKTsKKysJ aWYgKEdTU19FUlJPUihtYWpvcikpIHsKKysJCWxvZ2l0X2YoImdzc19pbXBvcnRfbmFtZSAoaG9z dCkgZmFpbGVkIik7CisrCQlnc3NfcmVsZWFzZV9vaWRfc2V0KCZzdGF0dXMsICZvaWRzZXQpOwor KwkJcmV0dXJuIC0xOworKwl9CisrCWRlYnVnX2dzc19uYW1lKCJob3N0IG5hbWUgcGFyc2VkIGFz IiwgaG9zdF9uYW1lKTsKKysKKysJZGVidWdfZigiYWNxdWlyaW5nIGhvc3QgY3JlZGVudGlhbHMg YXMgdWlkPSV1IGV1aWQ9JXUsIHByaW5jaXBhbD1ob3N0QCVzIiwKKysJICAgICh1bnNpZ25lZCln ZXR1aWQoKSwgKHVuc2lnbmVkKWdldGV1aWQoKSwgbG5hbWUpOworKwkjaWZkZWYgSEFWRV9HU1Nf QUNRVUlSRV9DUkVEX0ZST00KKysJeworKyMgaWYgZGVmaW5lZChLUkI1KQorKwkJLyoKKysJCSAq IFJlc29sdmUgdGhlIGtleXRhYiBwYXRoOiBrcmI1X2t0X2RlZmF1bHRfbmFtZSByZXNwZWN0cwor KwkJICogS1JCNV9LVE5BTUUgYW5kIGtyYjUuY29uZiBkZWZhdWx0X2tleXRhYl9uYW1lLgorKwkJ ICovCisrCQljaGFyIGtleXRhYl9uYW1lW01BWFBBVEhMRU5dOworKwkJa3JiNV9jb250ZXh0IHRt cF9jdHg7CisrCisrCisrCQlrZXl0YWJfbmFtZVswXSA9ICdcMCc7CisrCQlpZiAoa3JiNV9pbml0 X2NvbnRleHQoJnRtcF9jdHgpID09IDApIHsKKysJCQkodm9pZClrcmI1X2t0X2RlZmF1bHRfbmFt ZSh0bXBfY3R4LCBrZXl0YWJfbmFtZSwKKysJCQkgICAgc2l6ZW9mKGtleXRhYl9uYW1lKSk7Cisr CQkJa3JiNV9mcmVlX2NvbnRleHQodG1wX2N0eCk7CisrCQl9CisrCQlpZiAoa2V5dGFiX25hbWVb MF0gPT0gJ1wwJykKKysJCQlzdHJsY3B5KGtleXRhYl9uYW1lLCAiRklMRTovZXRjL2tyYjUua2V5 dGFiIiwKKysJCQkgICAgc2l6ZW9mKGtleXRhYl9uYW1lKSk7CisrCQkvKgorKwkJICogY2xpZW50 X2tleXRhYiBsZXRzIEdTU0FQSSBkbyBBUy1SRVEgdG8gb2J0YWluIGEgVEdUIGZvciB0aGUKKysJ CSAqIGhvc3QgcHJpbmNpcGFsIChpbml0aWF0b3Igcm9sZSBuZWVkZWQgZm9yIFM0VTJTZWxmKS4K KysJCSAqIGtleXRhYiBjb3ZlcnMgdGhlIGFjY2VwdG9yIHJvbGUuCisrCQkgKiBjY2FjaGU6IE1F TU9SWToga2VlcHMgdGhlIHJlc3VsdGluZyBUR1Qgdm9sYXRpbGUuCisrCQkgKi8KKysJCWdzc19r ZXlfdmFsdWVfZWxlbWVudF9kZXNjIHN0b3JlX2VsZW1lbnRzW10gPSB7CisrCQkJeyAiY2xpZW50 X2tleXRhYiIsIGtleXRhYl9uYW1lIH0sCisrCQkJeyAia2V5dGFiIiwga2V5dGFiX25hbWUgfSwK KysJCQl7ICJjY2FjaGUiLCAiTUVNT1JZOiIgfSwKKysJCX07CisrCQljb25zdCBnc3Nfa2V5X3Zh bHVlX3NldF9kZXNjIGNyZWRfc3RvcmUgPSB7IDMsIHN0b3JlX2VsZW1lbnRzIH07CisrIyBlbHNl CisrCQlnc3Nfa2V5X3ZhbHVlX2VsZW1lbnRfZGVzYyBzdG9yZV9lbGVtZW50c1tdID0geworKwkJ CXsgImNjYWNoZSIsICJNRU1PUlk6IiB9LAorKwkJfTsKKysJCWNvbnN0IGdzc19rZXlfdmFsdWVf c2V0X2Rlc2MgY3JlZF9zdG9yZSA9IHsgMSwgc3RvcmVfZWxlbWVudHMgfTsKKysjIGVuZGlmCisr CisrCisrCQltYWpvciA9IGdzc19hY3F1aXJlX2NyZWRfZnJvbSgmbWlub3IsIGhvc3RfbmFtZSwg bGlmZXRpbWUsCisrCQkgICAgb2lkc2V0LCBHU1NfQ19CT1RILCAmY3JlZF9zdG9yZSwgJmhvc3Rf Y3JlZHMsIE5VTEwsIE5VTEwpOworKwl9CisrI2Vsc2UKKysJbWFqb3IgPSBnc3NfYWNxdWlyZV9j cmVkKCZtaW5vciwgaG9zdF9uYW1lLCBsaWZldGltZSwKKysJICAgIG9pZHNldCwgR1NTX0NfQk9U SCwgJmhvc3RfY3JlZHMsIE5VTEwsIE5VTEwpOworKyNlbmRpZgorKwlnc3NfcmVsZWFzZV9uYW1l KCZtaW5vciwgJmhvc3RfbmFtZSk7CisrCWlmIChHU1NfRVJST1IobWFqb3IpKSB7CisrCQlsb2dp dF9mKCJnc3NfYWNxdWlyZV9jcmVkKGhvc3RAJXMpIGZhaWxlZCBhcyB1aWQ9JXUgZXVpZD0ldSIs CisrCQkgICAgbG5hbWUsICh1bnNpZ25lZClnZXR1aWQoKSwgKHVuc2lnbmVkKWdldGV1aWQoKSk7 CisrCQlsb2dfZ3NzX2Vycm9yKG1ham9yLCBtaW5vciwgIlM0VTJTZWxmOiBnc3NfYWNxdWlyZV9j cmVkIik7CisrCQlnc3NfcmVsZWFzZV9vaWRfc2V0KCZzdGF0dXMsICZvaWRzZXQpOworKwkJcmV0 dXJuIC0xOworKwl9CisrCisrCS8qIEltcG9ydCB0aGUgU1NIIHVzZXJuYW1lIGFzIGEgR1NTQVBJ L0tlcmJlcm9zIG5hbWUgKi8KKysJZ3NzYnVmLnZhbHVlID0gKHZvaWQgKil1c2VyOworKwlnc3Ni dWYubGVuZ3RoID0gc3RybGVuKHVzZXIpOworKwltYWpvciA9IGdzc19pbXBvcnRfbmFtZSgmbWlu b3IsICZnc3NidWYsCisrCSAgICBHU1NfQ19OVF9VU0VSX05BTUUsICZ1c2VyX25hbWUpOworKwlp ZiAoR1NTX0VSUk9SKG1ham9yKSkgeworKwkJbG9naXRfZigiZ3NzX2ltcG9ydF9uYW1lICh1c2Vy KSBmYWlsZWQiKTsKKysJCWdzc19yZWxlYXNlX2NyZWQoJm1pbm9yLCAmaG9zdF9jcmVkcyk7Cisr CQlnc3NfcmVsZWFzZV9vaWRfc2V0KCZzdGF0dXMsICZvaWRzZXQpOworKwkJcmV0dXJuIC0xOwor Kwl9CisrCWRlYnVnX2dzc19uYW1lKCJ1c2VyIG5hbWUgcGFyc2VkIGFzIiwgdXNlcl9uYW1lKTsK KysKKysJLyogUzRVMlNlbGY6IG9idGFpbiBhIHNlcnZpY2UgdGlja2V0IGZvciB0aGUgdXNlciB3 aXRob3V0IHRoZWlyIGNyZWRzICovCisrCWRlYnVnX2YoImNhbGxpbmcgZ3NzX2FjcXVpcmVfY3Jl ZF9pbXBlcnNvbmF0ZV9uYW1lIGZvciB1c2VyICUuMTAwcyIsIHVzZXIpOworKwltYWpvciA9IGdz c19hY3F1aXJlX2NyZWRfaW1wZXJzb25hdGVfbmFtZSgmbWlub3IsCisrCSAgICBob3N0X2NyZWRz LCB1c2VyX25hbWUsIGxpZmV0aW1lLAorKwkgICAgb2lkc2V0LCBHU1NfQ19JTklUSUFURSwKKysJ ICAgICZpbXBlcnNvbmF0ZWRfY3JlZHMsIE5VTEwsIE5VTEwpOworKworKwlnc3NfcmVsZWFzZV9j cmVkKCZtaW5vciwgJmhvc3RfY3JlZHMpOworKwlnc3NfcmVsZWFzZV9vaWRfc2V0KCZzdGF0dXMs ICZvaWRzZXQpOworKwlpZiAoR1NTX0VSUk9SKG1ham9yKSkgeworKwkJbG9naXRfZigiZ3NzX2Fj cXVpcmVfY3JlZF9pbXBlcnNvbmF0ZV9uYW1lIGZhaWxlZCBmb3IgJS4xMDBzIiwKKysJCSAgICB1 c2VyKTsKKysJCWxvZ19nc3NfZXJyb3IobWFqb3IsIG1pbm9yLAorKwkJICAgICJTNFUyU2VsZjog Z3NzX2FjcXVpcmVfY3JlZF9pbXBlcnNvbmF0ZV9uYW1lIik7CisrCQlnc3NfcmVsZWFzZV9uYW1l KCZtaW5vciwgJnVzZXJfbmFtZSk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJLyogR2V0IHRo ZSBkaXNwbGF5IG5hbWUgKEtlcmJlcm9zIHByaW5jaXBhbCBzdHJpbmcpIGZvciBzdG9yZWNyZWRz ICovCisrCW1ham9yID0gZ3NzX2Rpc3BsYXlfbmFtZSgmbWlub3IsIHVzZXJfbmFtZSwgJmRpc3Bs YXluYW1lLCBOVUxMKTsKKysJZ3NzX3JlbGVhc2VfbmFtZSgmbWlub3IsICZ1c2VyX25hbWUpOwor KwlpZiAoR1NTX0VSUk9SKG1ham9yKSkgeworKwkJbG9naXRfZigiZ3NzX2Rpc3BsYXlfbmFtZSBm YWlsZWQiKTsKKysJCWdzc19yZWxlYXNlX2NyZWQoJm1pbm9yLCAmaW1wZXJzb25hdGVkX2NyZWRz KTsKKysJCXJldHVybiAtMTsKKysJfQorKworKwkvKiBQb3B1bGF0ZSBnc3NhcGlfY2xpZW50IGZv ciBzdG9yZWNyZWRzX3M0dTJzZWxmIGFuZCBzNHUycHJveHkgKi8KKysJZ3NzYXBpX2NsaWVudC5t ZWNoID0gJmdzc2FwaV9rZXJiZXJvc19tZWNoOworKwlnc3NhcGlfY2xpZW50LmNyZWRzID0gaW1w ZXJzb25hdGVkX2NyZWRzOworKwlnc3NhcGlfY2xpZW50LmRpc3BsYXluYW1lLnZhbHVlID0geG1h bGxvYyhkaXNwbGF5bmFtZS5sZW5ndGggKyAxKTsKKysJbWVtY3B5KGdzc2FwaV9jbGllbnQuZGlz cGxheW5hbWUudmFsdWUsCisrCSAgICBkaXNwbGF5bmFtZS52YWx1ZSwgZGlzcGxheW5hbWUubGVu Z3RoKTsKKysJKChjaGFyICopZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFtZS52YWx1ZSlbZGlzcGxh eW5hbWUubGVuZ3RoXSA9ICdcMCc7CisrCWdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUubGVuZ3Ro ID0gZGlzcGxheW5hbWUubGVuZ3RoOworKwkvKgorKwkgKiBleHBvcnRlZG5hbWUgaXMgdXNlZCBi eSBzc2hfZ3NzYXBpX2tyYjVfc3RvcmVjcmVkcyDihpIga3JiNV9wYXJzZV9uYW1lLgorKwkgKiBn c3NfZGlzcGxheV9uYW1lIGZvciBhIHVzZXItbmFtZSByZXR1cm5zIHRoZSBjYW5vbmljYWwgcHJp bmNpcGFsCisrCSAqIHN0cmluZyAoZS5nLiB1c2VyQFJFQUxNKSB3aGljaCBrcmI1X3BhcnNlX25h bWUgY2FuIGNvbnN1bWUgZGlyZWN0bHkuCisrCSAqLworKwlnc3NhcGlfY2xpZW50LmV4cG9ydGVk bmFtZS52YWx1ZSA9IHhtYWxsb2MoZGlzcGxheW5hbWUubGVuZ3RoICsgMSk7CisrCW1lbWNweShn c3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS52YWx1ZSwKKysJICAgIGRpc3BsYXluYW1lLnZhbHVl LCBkaXNwbGF5bmFtZS5sZW5ndGgpOworKwkoKGNoYXIgKilnc3NhcGlfY2xpZW50LmV4cG9ydGVk bmFtZS52YWx1ZSlbZGlzcGxheW5hbWUubGVuZ3RoXSA9ICdcMCc7CisrCWdzc2FwaV9jbGllbnQu ZXhwb3J0ZWRuYW1lLmxlbmd0aCA9IGRpc3BsYXluYW1lLmxlbmd0aDsKKysKKysJZ3NzX3JlbGVh c2VfYnVmZmVyKCZtaW5vciwgJmRpc3BsYXluYW1lKTsKKysJZGVidWdfZigiUzRVMlNlbGYgc3Vj Y2VlZGVkIGZvciAlLjEwMHMiLCB1c2VyKTsKKysJcmV0dXJuIDA7CisrfQorKworKy8qIEFzIHVz ZXIg4oCUIHdyaXRlIHRoZSBTNFUyU2VsZiB0aWNrZXQgaW50byBhIG5ldyBjY2FjaGUgdmlhIG1l Y2gtPnN0b3JlY3JlZHMgKi8KKyB2b2lkCistc3NoX2dzc2FwaV9jbGVhbnVwX2NyZWRzKHZvaWQp Cisrc3NoX2dzc2FwaV9zdG9yZWNyZWRzX3M0dTJzZWxmKHZvaWQpCisgeworLQlrcmI1X2NjYWNo ZSBjY2FjaGUgPSBOVUxMOworLQlrcmI1X2Vycm9yX2NvZGUgcHJvYmxlbTsKKy0KKy0JaWYgKGdz c2FwaV9jbGllbnQuc3RvcmUuZGF0YSAhPSBOVUxMKSB7CistCQlpZiAoKHByb2JsZW0gPSBrcmI1 X2NjX3Jlc29sdmUoZ3NzYXBpX2NsaWVudC5zdG9yZS5kYXRhLCBnc3NhcGlfY2xpZW50LnN0b3Jl LmVudnZhbCwgJmNjYWNoZSkpKSB7CistCQkJZGVidWdfZigia3JiNV9jY19yZXNvbHZlKCk6ICUu MTAwcyIsCistCQkJCWtyYjVfZ2V0X2Vycl90ZXh0KGdzc2FwaV9jbGllbnQuc3RvcmUuZGF0YSwg cHJvYmxlbSkpOworLQkJfSBlbHNlIGlmICgocHJvYmxlbSA9IGtyYjVfY2NfZGVzdHJveShnc3Nh cGlfY2xpZW50LnN0b3JlLmRhdGEsIGNjYWNoZSkpKSB7CistCQkJZGVidWdfZigia3JiNV9jY19k ZXN0cm95KCk6ICUuMTAwcyIsCistCQkJCWtyYjVfZ2V0X2Vycl90ZXh0KGdzc2FwaV9jbGllbnQu c3RvcmUuZGF0YSwgcHJvYmxlbSkpOworLQkJfSBlbHNlIHsKKy0JCQlrcmI1X2ZyZWVfY29udGV4 dChnc3NhcGlfY2xpZW50LnN0b3JlLmRhdGEpOworLQkJCWdzc2FwaV9jbGllbnQuc3RvcmUuZGF0 YSA9IE5VTEw7CisrCWlmIChnc3NhcGlfY2xpZW50Lm1lY2ggPT0gTlVMTCB8fCBnc3NhcGlfY2xp ZW50Lm1lY2gtPnN0b3JlY3JlZHMgPT0gTlVMTCkgeworKwkJZGVidWdfZigibm8gR1NTQVBJIG1l Y2hhbmlzbSBmb3Igc3RvcmluZyBTNFUyU2VsZiBjcmVkZW50aWFscyIpOworKwkJcmV0dXJuOwor Kwl9CisrCSgqZ3NzYXBpX2NsaWVudC5tZWNoLT5zdG9yZWNyZWRzKSgmZ3NzYXBpX2NsaWVudCk7 CisrfQorKworKy8qCisrICogUGVyZm9ybSBTNFUyUHJveHkgZm9yIGVhY2ggY29uZmlndXJlZCBz ZXJ2aWNlIHByaW5jaXBhbCwgdGhlbiBmbHVzaCBhbGwKKysgKiByZXN1bHRpbmcgdGlja2V0cyBp bnRvIHRoZSB1c2VyJ3MgY2NhY2hlLiAgUnVucyBhcyB1c2VyLCBhZnRlcgorKyAqIHNzaF9nc3Nh cGlfc3RvcmVjcmVkc19zNHUyc2VsZigpIGhhcyBjcmVhdGVkIHRoZSBjY2FjaGUuCisrICoKKysg KiBnc3NhcGlfY2xpZW50LmNyZWRzICh0aGUgUzRVMlNlbGYgcHJveHkgY3JlZGVudGlhbCkgaXMg cGFzc2VkIGFzIHRoZQorKyAqIGluaXRpYXRvciB0byBnc3NfaW5pdF9zZWNfY29udGV4dCgpOyB0 aGUgR1NTQVBJIGxpYnJhcnkgcHJlc2VudHMgdGhlIFRHVAorKyAqIGFuZCBldmlkZW5jZSB0aWNr ZXQgdG8gdGhlIEtEQyB2aWEgUzRVMlByb3h5IFRHUy1SRVEuICBUaGUgb3V0cHV0IHRva2VuCisr ICogKEFQLVJFUSkgaXMgZGlzY2FyZGVkIOKAlCB3ZSBkbyBub3QgY29ubmVjdCB0byB0aGUgdGFy Z2V0IHNlcnZpY2UuCisrICoKKysgKiBBZnRlciBpdGVyYXRpbmcgYWxsIHNlcnZpY2VzLCBnc3Nf c3RvcmVfY3JlZCgpIGZsdXNoZXMgdGhlIGFjY3VtdWxhdGVkCisrICogcHJveHkgc2VydmljZSB0 aWNrZXRzIGZyb20gdGhlIGNyZWRlbnRpYWwncyBpbnRlcm5hbCBjY2FjaGUgaW50byB0aGUKKysg KiBLUkI1Q0NOQU1FIGNjYWNoZSB0aGF0IHN0b3JlY3JlZHNfczR1MnNlbGYoKSBhbHJlYWR5IGNy ZWF0ZWQuCisrICovCisrLyogQXMgdXNlciAqLworK3ZvaWQKKytzc2hfZ3NzYXBpX3M0dTJwcm94 eShjaGFyICoqc2VydmljZXMsIHVfaW50IG5zZXJ2aWNlcywgdV9pbnQgbGlmZXRpbWUpCisrewor KwlPTV91aW50MzIgbWFqb3IsIG1pbm9yOworKwlnc3NfYnVmZmVyX2Rlc2Mgc2VydmljZV9idWYs IG91dHB1dF90b2tlbiA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKysJZ3NzX25hbWVfdCB0YXJnZXRf bmFtZTsKKysJZ3NzX2N0eF9pZF90IGN0eDsKKysJdV9pbnQgaTsKKysKKysJaWYgKGdzc2FwaV9j bGllbnQuY3JlZHMgPT0gR1NTX0NfTk9fQ1JFREVOVElBTCkgeworKwkJZGVidWdfZigibm8gcHJv eHkgY3JlZGVudGlhbCBhdmFpbGFibGUiKTsKKysJCXJldHVybjsKKysJfQorKwlpZiAoZ3NzYXBp X2NsaWVudC5zdG9yZS5lbnZ2YWwgPT0gTlVMTCkgeworKwkJZGVidWdfZigibm8gY2NhY2hlIHBh dGggc2V0OyBjYW5ub3Qgc3RvcmUgcHJveHkgdGlja2V0cyIpOworKwkJcmV0dXJuOworKwl9Cisr CisrCWRlYnVnX2YoInN0YXJ0aW5nIFM0VTJQcm94eSBhcyB1aWQ9JXUgZXVpZD0ldSwgJXUgc2Vy dmljZShzKSwgY2NhY2hlPSVzIiwKKysJICAgICh1bnNpZ25lZClnZXR1aWQoKSwgKHVuc2lnbmVk KWdldGV1aWQoKSwgbnNlcnZpY2VzLAorKwkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwp OworKworKwkvKiBQb2ludCB0aGUgR1NTQVBJIGxpYnJhcnkgYXQgdGhlIHVzZXIncyBjY2FjaGUg Zm9yIHRpY2tldCBzdG9yYWdlICovCisrCXNldGVudigiS1JCNUNDTkFNRSIsIGdzc2FwaV9jbGll bnQuc3RvcmUuZW52dmFsLCAxKTsKKysKKysJZm9yIChpID0gMDsgaSA8IG5zZXJ2aWNlczsgaSsr KSB7CisrCQljdHggPSBHU1NfQ19OT19DT05URVhUOworKwkJdGFyZ2V0X25hbWUgPSBHU1NfQ19O T19OQU1FOworKworKwkJc2VydmljZV9idWYudmFsdWUgPSBzZXJ2aWNlc1tpXTsKKysJCXNlcnZp Y2VfYnVmLmxlbmd0aCA9IHN0cmxlbihzZXJ2aWNlc1tpXSk7CisrCisrCQkvKgorKwkJICogR1NT X0NfTk9fT0lEOiBsZXQgdGhlIGxpYnJhcnkgZGV0ZXJtaW5lIHRoZSBuYW1lIHR5cGUuCisrCQkg KiBXaXRoIEtlcmJlcm9zIGFzIHRoZSBhY3RpdmUgbWVjaGFuaXNtLCBhIGZ1bGx5LXF1YWxpZmll ZAorKwkJICogcHJpbmNpcGFsIGxpa2UgInN2Yy9ob3N0QFJFQUxNIiBpcyBwYXJzZWQgY29ycmVj dGx5LgorKwkJICovCisrCQltYWpvciA9IGdzc19pbXBvcnRfbmFtZSgmbWlub3IsICZzZXJ2aWNl X2J1ZiwKKysJCSAgICBHU1NfQ19OT19PSUQsICZ0YXJnZXRfbmFtZSk7CisrCQlpZiAoR1NTX0VS Uk9SKG1ham9yKSkgeworKwkJCWxvZ2l0X2YoImdzc19pbXBvcnRfbmFtZSBmYWlsZWQgZm9yICUu MjAwcyIsCisrCQkJICAgIHNlcnZpY2VzW2ldKTsKKysJCQlsb2dfZ3NzX2Vycm9yKG1ham9yLCBt aW5vciwgIlM0VTJQcm94eTogZ3NzX2ltcG9ydF9uYW1lIik7CisrCQkJY29udGludWU7CisgCQl9 CisrCQlkZWJ1Z19nc3NfbmFtZSgidGFyZ2V0IHNlcnZpY2UgbmFtZSBwYXJzZWQgYXMiLCB0YXJn ZXRfbmFtZSk7CisrCisrCQlkZWJ1Z19mKCJjYWxsaW5nIGdzc19pbml0X3NlY19jb250ZXh0IGZv ciAlLjIwMHMiLCBzZXJ2aWNlc1tpXSk7CisrCQltYWpvciA9IGdzc19pbml0X3NlY19jb250ZXh0 KCZtaW5vciwKKysJCSAgICBnc3NhcGlfY2xpZW50LmNyZWRzLAkJLyogcHJveHkgY3JlZGVudGlh bCAqLworKwkJICAgICZjdHgsIHRhcmdldF9uYW1lLAorKwkJICAgIEdTU19DX05PX09JRCwJCQkv KiBkZWZhdWx0IG1lY2ggKEtlcmJlcm9zKSAqLworKwkJICAgIDAsCQkJCQkvKiBubyBmbGFncywg bm8gbXV0dWFsIGF1dGggKi8KKysJCSAgICBsaWZldGltZSwKKysJCSAgICBHU1NfQ19OT19DSEFO TkVMX0JJTkRJTkdTLAorKwkJICAgIEdTU19DX05PX0JVRkZFUiwJCQkvKiBubyBpbnB1dCB0b2tl biAqLworKwkJICAgIE5VTEwsCQkJCS8qIGFjdHVhbF9tZWNoX3R5cGUgKi8KKysJCSAgICAmb3V0 cHV0X3Rva2VuLAorKwkJICAgIE5VTEwsCQkJCS8qIHJldF9mbGFncyAqLworKwkJICAgIE5VTEwp OwkJCQkvKiB0aW1lX3JlYyAqLworKworKwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vciwgJm91 dHB1dF90b2tlbik7CisrCQlnc3NfcmVsZWFzZV9uYW1lKCZtaW5vciwgJnRhcmdldF9uYW1lKTsK KysJCWlmIChjdHggIT0gR1NTX0NfTk9fQ09OVEVYVCkKKysJCQlnc3NfZGVsZXRlX3NlY19jb250 ZXh0KCZtaW5vciwgJmN0eCwgR1NTX0NfTk9fQlVGRkVSKTsKKysKKysJCWlmIChHU1NfRVJST1Io bWFqb3IpKSB7CisrCQkJbG9naXRfZigiUzRVMlByb3h5IGZvciAlLjIwMHMgb24gYmVoYWxmIG9m ICUuMjAwcyBmYWlsZWQiLAorKwkJCSAgICBzZXJ2aWNlc1tpXSwKKysJCQkgICAgKGNoYXIgKiln c3NhcGlfY2xpZW50LmRpc3BsYXluYW1lLnZhbHVlKTsKKysJCQlsb2dfZ3NzX2Vycm9yKG1ham9y LCBtaW5vciwKKysJCQkgICAgIlM0VTJQcm94eTogZ3NzX2luaXRfc2VjX2NvbnRleHQiKTsKKysJ CX0gZWxzZQorKwkJCWRlYnVnX2YoIlM0VTJQcm94eSB0aWNrZXQgb2J0YWluZWQgZm9yICUuMjAw cyIsCisrCQkJICAgIHNlcnZpY2VzW2ldKTsKKyAJfQorKworKwkvKgorKwkgKiBGbHVzaCBhbGwg cHJveHkgc2VydmljZSB0aWNrZXRzIGZyb20gdGhlIGNyZWRlbnRpYWwncyBpbnRlcm5hbAorKwkg KiBjY2FjaGUgaW50byB0aGUgS1JCNUNDTkFNRSBjY2FjaGUgdmlhIGdzc19zdG9yZV9jcmVkKCku CisrCSAqLworKwltYWpvciA9IGdzc19zdG9yZV9jcmVkKCZtaW5vciwgZ3NzYXBpX2NsaWVudC5j cmVkcywgR1NTX0NfSU5JVElBVEUsCisrCSAgICBHU1NfQ19OT19PSUQsIDEgLyogb3ZlcndyaXRl X2NyZWQgKi8sIDEgLyogZGVmYXVsdF9jcmVkICovLAorKwkgICAgTlVMTCwgTlVMTCk7CisrCWlm IChHU1NfRVJST1IobWFqb3IpKSB7CisrCQlsb2dpdF9mKCJnc3Nfc3RvcmVfY3JlZCBmYWlsZWQ7 IHByb3h5IHRpY2tldHMgbWF5IGJlIG1pc3NpbmciKTsKKysJCWxvZ19nc3NfZXJyb3IobWFqb3Is IG1pbm9yLCAiUzRVMlByb3h5OiBnc3Nfc3RvcmVfY3JlZCIpOworKwl9CisrCisrCXVuc2V0ZW52 KCJLUkI1Q0NOQU1FIik7CisrfQorKworKyNpZm5kZWYgS1JCNQorKy8qIEFzIHVzZXIgLSBjYWxs ZWQgb24gZmF0YWwvZXhpdDsgZnVsbCBpbXBsZW1lbnRhdGlvbiBpbiBnc3Mtc2Vydi1rcmI1LmMg Ki8KKyt2b2lkCisrc3NoX2dzc2FwaV9jbGVhbnVwX2NyZWRzKHZvaWQpCisreworK30KKysKKysv KgorKyAqIEZpbHRlciB0aGUgdXNlcidzIGNjYWNoZTsgZnVsbCBpbXBsZW1lbnRhdGlvbiBpbiBn c3Mtc2Vydi1rcmI1LmMuCisrICovCisrdm9pZAorK3NzaF9nc3NhcGlfa3JiNV9maWx0ZXJfY2Nh Y2hlKHVfaW50IGRyb3BfZmxhZ3MsCisrICAgIGNoYXIgKipwcm94eV9zZXJ2aWNlcywgdV9pbnQg bnByb3h5X3NlcnZpY2VzKQorK3sKKyB9CisrI2VuZGlmIC8qICFLUkI1ICovCisgCisgLyogQXMg dXNlciAqLworIGludAorZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCitpbmRl eCBmNGQ2YjE5ZGQuLmUwNWEzMTU4NCAxMDA2NDQKKy0tLSBhL3NlcnZjb25mLmMKKysrKyBiL3Nl cnZjb25mLmMKK0BAIC0xNDksNiArMTQ5LDkgQEAgaW5pdGlhbGl6ZV9zZXJ2ZXJfb3B0aW9ucyhT ZXJ2ZXJPcHRpb25zICpvcHRpb25zKQorIAlvcHRpb25zLT5nc3NfaW5kaWNhdG9ycyA9IE5VTEw7 CisgCW9wdGlvbnMtPmdzc19zdG9yZV9yZWtleSA9IC0xOworIAlvcHRpb25zLT5nc3Nfa2V4X2Fs Z29yaXRobXMgPSBOVUxMOworKwlvcHRpb25zLT5nc3NfYWxsb3dfczR1MnNlbGYgPSAtMTsKKysJ b3B0aW9ucy0+Z3NzX3Byb3h5X3NlcnZpY2VzID0gTlVMTDsKKysJb3B0aW9ucy0+bnVtX2dzc19w cm94eV9zZXJ2aWNlcyA9IDA7CisgCW9wdGlvbnMtPnVzZV9rdXNlcm9rID0gLTE7CisgCW9wdGlv bnMtPmVuYWJsZV9rNXVzZXJzID0gLTE7CisgCW9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0 aW9uID0gLTE7CitAQCAtNDA2LDYgKzQwOSw4IEBAIGZpbGxfZGVmYXVsdF9zZXJ2ZXJfb3B0aW9u cyhTZXJ2ZXJPcHRpb25zICpvcHRpb25zKQorIAkJb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID0g MTsKKyAJaWYgKG9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPT0gLTEpCisgCQlvcHRpb25z LT5nc3Nfc3RyaWN0X2FjY2VwdG9yID0gMTsKKysJaWYgKG9wdGlvbnMtPmdzc19hbGxvd19zNHUy c2VsZiA9PSAtMSkKKysJCW9wdGlvbnMtPmdzc19hbGxvd19zNHUyc2VsZiA9IDA7CisgCWlmIChv cHRpb25zLT5nc3Nfc3RvcmVfcmVrZXkgPT0gLTEpCisgCQlvcHRpb25zLT5nc3Nfc3RvcmVfcmVr ZXkgPSAwOworICNpZmRlZiBHU1NBUEkKK0BAIC02MDMsNiArNjA4LDcgQEAgdHlwZWRlZiBlbnVt IHsKKyAJc0hvc3RLZXlBbGdvcml0aG1zLCBzUGVyU291cmNlTWF4U3RhcnR1cHMsIHNQZXJTb3Vy Y2VOZXRCbG9ja1NpemUsCisgCXNQZXJTb3VyY2VQZW5hbHRpZXMsIHNQZXJTb3VyY2VQZW5hbHR5 RXhlbXB0TGlzdCwKKyAJc0NsaWVudEFsaXZlSW50ZXJ2YWwsIHNDbGllbnRBbGl2ZUNvdW50TWF4 LCBzQXV0aG9yaXplZEtleXNGaWxlLAorKwlzR3NzQWxsb3dTNFUyU2VsZiwgc0dzc1Byb3h5UzRV MlNlcnZpY2VzLAorIAlzR3NzQXV0aGVudGljYXRpb24sIHNHc3NDbGVhbnVwQ3JlZHMsIHNHc3NE ZWxlZ2F0ZUNyZWRzLCBzR3NzRW5hYmxlazV1c2Vycywgc0dzc1N0cmljdEFjY2VwdG9yLAorIAlz R3NzSW5kaWNhdG9ycywgc0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGhtcywgc0dzc1N0b3JlUmVr ZXksCisgCXNBY2NlcHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWwsCitAQCAtNzAyLDYgKzcw OCw4IEBAIHN0YXRpYyBzdHJ1Y3QgeworIAl7ICJnc3NhcGlrZXhhbGdvcml0aG1zIiwgc0dzc0tl eEFsZ29yaXRobXMsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiZ3NzYXBpZW5hYmxlazV1c2VycyIs IHNHc3NFbmFibGVrNXVzZXJzLCBTU0hDRkdfQUxMIH0sCisgCXsgImdzc2FwaWluZGljYXRvcnMi LCBzR3NzSW5kaWNhdG9ycywgU1NIQ0ZHX0FMTCB9LAorKwl7ICJnc3NhcGlhbGxvd3M0dTJzZWxm Iiwgc0dzc0FsbG93UzRVMlNlbGYsIFNTSENGR19BTEwgfSwKKysJeyAiZ3NzYXBpcHJveHlzNHUy c2VydmljZXMiLCBzR3NzUHJveHlTNFUyU2VydmljZXMsIFNTSENGR19BTEwgfSwKKyAjZWxzZQor IAl7ICJnc3NhcGlhdXRoZW50aWNhdGlvbiIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAor IAl7ICJnc3NhcGljbGVhbnVwY3JlZGVudGlhbHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9C QUwgfSwKK0BAIC03MTMsNiArNzIxLDggQEAgc3RhdGljIHN0cnVjdCB7CisgCXsgImdzc2FwaWtl eGFsZ29yaXRobXMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAJeyAiZ3NzYXBp ZW5hYmxlazV1c2VycyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0FMTCB9LAorIAl7ICJnc3NhcGlp bmRpY2F0b3JzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCisrCXsgImdzc2FwaWFsbG93 czR1MnNlbGYiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKKysJeyAiZ3NzYXBpcHJveHlz NHUyc2VydmljZXMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKKyAjZW5kaWYKKyAJeyAi Z3NzdXNlc2Vzc2lvbmNjYWNoZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7 ICJnc3NhcGl1c2VzZXNzaW9uY3JlZGNhY2hlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFM IH0sCitAQCAtMTc1NCw2ICsxNzY0LDQ0IEBAIHByb2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2Rl cHRoKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMsIGNoYXIgKmxpbmUsCisgCQkJb3B0aW9ucy0+Z3Nz X2luZGljYXRvcnMgPSB4c3RyZHVwKGFyZyk7CisgCQlicmVhazsKKyAKKysJY2FzZSBzR3NzQWxs b3dTNFUyU2VsZjoKKysJCWFyZyA9IGFyZ3ZfbmV4dCgmYWMsICZhdik7CisrCQlpZiAoIWFyZyB8 fCAqYXJnID09ICdcMCcpCisrCQkJZmF0YWwoIiVzIGxpbmUgJWQ6ICVzIG1pc3NpbmcgYXJndW1l bnQuIiwKKysJCQkgICAgZmlsZW5hbWUsIGxpbmVudW0sIGtleXdvcmQpOworKwkJaWYgKHN0cmNh c2VjbXAoYXJnLCAibm8iKSA9PSAwKQorKwkJCXZhbHVlID0gMDsKKysJCWVsc2UgaWYgKHN0cmNh c2VjbXAoYXJnLCAieWVzIikgPT0gMCkKKysJCQl2YWx1ZSA9IElOVF9NQVg7CisrCQllbHNlIGlm ICgodmFsdWUgPSBjb252dGltZShhcmcpKSA8PSAwKQorKwkJCWZhdGFsKCIlcyBsaW5lICVkOiBp bnZhbGlkICVzIHZhbHVlIFwiJXNcIi4iLAorKwkJCSAgICBmaWxlbmFtZSwgbGluZW51bSwga2V5 d29yZCwgYXJnKTsKKysJCWlmICgqYWN0aXZlcCAmJiBvcHRpb25zLT5nc3NfYWxsb3dfczR1MnNl bGYgPT0gLTEpCisrCQkJb3B0aW9ucy0+Z3NzX2FsbG93X3M0dTJzZWxmID0gdmFsdWU7CisrCQli cmVhazsKKysKKysJY2FzZSBzR3NzUHJveHlTNFUyU2VydmljZXM6CisrCQl3aGlsZSAoKGFyZyA9 IGFyZ3ZfbmV4dCgmYWMsICZhdikpICE9IE5VTEwpIHsKKysJCQlpZiAoKmFyZyA9PSAnXDAnKQor KwkJCQlmYXRhbCgiJXMgbGluZSAlZDogJXMgbWlzc2luZyBhcmd1bWVudC4iLAorKwkJCQkgICAg ZmlsZW5hbWUsIGxpbmVudW0sIGtleXdvcmQpOworKwkJCWlmIChzdHJjYXNlY21wKGFyZywgIm5v bmUiKSA9PSAwKSB7CisrCQkJCS8qICJub25lIiBjbGVhcnMgYW55IHByZXZpb3VzIGxpc3QgKi8K KysJCQkJZm9yIChpID0gMDsgaSA8IG9wdGlvbnMtPm51bV9nc3NfcHJveHlfc2VydmljZXM7IGkr KykKKysJCQkJCWZyZWUob3B0aW9ucy0+Z3NzX3Byb3h5X3NlcnZpY2VzW2ldKTsKKysJCQkJZnJl ZShvcHRpb25zLT5nc3NfcHJveHlfc2VydmljZXMpOworKwkJCQlvcHRpb25zLT5nc3NfcHJveHlf c2VydmljZXMgPSBOVUxMOworKwkJCQlvcHRpb25zLT5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID0g MDsKKysJCQkJYnJlYWs7CisrCQkJfQorKwkJCWlmICghKmFjdGl2ZXApCisrCQkJCWNvbnRpbnVl OworKwkJCW9wdF9hcnJheV9hcHBlbmQoZmlsZW5hbWUsIGxpbmVudW0sIGtleXdvcmQsCisrCQkJ ICAgICZvcHRpb25zLT5nc3NfcHJveHlfc2VydmljZXMsCisrCQkJICAgICZvcHRpb25zLT5udW1f Z3NzX3Byb3h5X3NlcnZpY2VzLCBhcmcpOworKwkJfQorKwkJYnJlYWs7CisrCisgCWNhc2Ugc1Bh c3N3b3JkQXV0aGVudGljYXRpb246CisgCQlpbnRwdHIgPSAmb3B0aW9ucy0+cGFzc3dvcmRfYXV0 aGVudGljYXRpb247CisgCQlnb3RvIHBhcnNlX2ZsYWc7CitAQCAtMzA1Myw2ICszMTAxLDcgQEAg Y29weV9zZXRfc2VydmVyX29wdGlvbnMoU2VydmVyT3B0aW9ucyAqZHN0LCBTZXJ2ZXJPcHRpb25z ICpzcmMsIGludCBwcmVhdXRoKQorIAorIAlNX0NQX0lOVE9QVChwYXNzd29yZF9hdXRoZW50aWNh dGlvbik7CisgCU1fQ1BfSU5UT1BUKGdzc19hdXRoZW50aWNhdGlvbik7CisrCU1fQ1BfSU5UT1BU KGdzc19hbGxvd19zNHUyc2VsZik7CisgCU1fQ1BfSU5UT1BUKHB1YmtleV9hdXRoZW50aWNhdGlv bik7CisgCU1fQ1BfSU5UT1BUKHB1YmtleV9hdXRoX29wdGlvbnMpOworIAlNX0NQX0lOVE9QVChr ZXJiZXJvc19hdXRoZW50aWNhdGlvbik7CitAQCAtMzQwNyw2ICszNDU2LDE1IEBAIGR1bXBfY29u ZmlnKFNlcnZlck9wdGlvbnMgKm8pCisgCWR1bXBfY2ZnX2ZtdGludChzR3NzU3RvcmVSZWtleSwg by0+Z3NzX3N0b3JlX3Jla2V5KTsKKyAJZHVtcF9jZmdfc3RyaW5nKHNHc3NLZXhBbGdvcml0aG1z LCBvLT5nc3Nfa2V4X2FsZ29yaXRobXMpOworIAlkdW1wX2NmZ19zdHJpbmcoc0dzc0luZGljYXRv cnMsIG8tPmdzc19pbmRpY2F0b3JzKTsKKysJaWYgKG8tPmdzc19hbGxvd19zNHUyc2VsZiA9PSAw KQorKwkJcHJpbnRmKCIlcyBub1xuIiwgbG9va3VwX29wY29kZV9uYW1lKHNHc3NBbGxvd1M0VTJT ZWxmKSk7CisrCWVsc2UgaWYgKG8tPmdzc19hbGxvd19zNHUyc2VsZiA9PSBJTlRfTUFYKQorKwkJ cHJpbnRmKCIlcyB5ZXNcbiIsIGxvb2t1cF9vcGNvZGVfbmFtZShzR3NzQWxsb3dTNFUyU2VsZikp OworKwllbHNlCisrCQlwcmludGYoIiVzICVkXG4iLCBsb29rdXBfb3Bjb2RlX25hbWUoc0dzc0Fs bG93UzRVMlNlbGYpLAorKwkJICAgIG8tPmdzc19hbGxvd19zNHUyc2VsZik7CisrCWR1bXBfY2Zn X3N0cmFycmF5X29uZWxpbmUoc0dzc1Byb3h5UzRVMlNlcnZpY2VzLCBvLT5udW1fZ3NzX3Byb3h5 X3NlcnZpY2VzLAorKwkgICAgby0+Z3NzX3Byb3h5X3NlcnZpY2VzKTsKKyAjZW5kaWYKKyAJZHVt cF9jZmdfZm10aW50KHNQYXNzd29yZEF1dGhlbnRpY2F0aW9uLCBvLT5wYXNzd29yZF9hdXRoZW50 aWNhdGlvbik7CisgCWR1bXBfY2ZnX2ZtdGludChzS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlv biwKK2RpZmYgLS1naXQgYS9zZXJ2Y29uZi5oIGIvc2VydmNvbmYuaAoraW5kZXggZmVhMjU5NDdl Li45YWNlYTMyY2YgMTAwNjQ0CistLS0gYS9zZXJ2Y29uZi5oCisrKysgYi9zZXJ2Y29uZi5oCitA QCAtMTYxLDYgKzE2MSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJaW50ICAgICBnc3NfY2xlYW51 cF9jcmVkczsJLyogSWYgdHJ1ZSwgZGVzdHJveSBjcmVkIGNhY2hlIG9uIGxvZ291dCAqLworIAlp bnQgICAgIGdzc19kZWxlZ19jcmVkczsJLyogSWYgdHJ1ZSwgYWNjZXB0IGRlbGVnYXRlZCBHU1Mg Y3JlZGVudGlhbHMgKi8KKyAJaW50ICAgICBnc3Nfc3RyaWN0X2FjY2VwdG9yOwkvKiBJZiB0cnVl LCByZXN0cmljdCB0aGUgR1NTQVBJIGFjY2VwdG9yIG5hbWUgKi8KKysJaW50ICAgICBnc3NfYWxs b3dfczR1MnNlbGY7IC8qIDA9bm8sIElOVF9NQVg9eWVzIChHU1NfQ19JTkRFRklOSVRFKSwgPjA9 dGlja2V0IGxpZmV0aW1lIHMgKi8KKysJY2hhciAgKipnc3NfcHJveHlfc2VydmljZXM7IC8qIFM0 VTJQcm94eSB0YXJnZXQgc2VydmljZSBwcmluY2lwYWxzICovCisrCXVfaW50ICAgbnVtX2dzc19w cm94eV9zZXJ2aWNlczsKKyAJaW50IAlnc3Nfc3RvcmVfcmVrZXk7CisgCWNoYXIgICAqZ3NzX2tl eF9hbGdvcml0aG1zOwkvKiBHU1NBUEkga2V4IG1ldGhvZHMgdG8gYmUgb2ZmZXJlZCBieSBjbGll bnQuICovCisgCWludCAgICAgcGFzc3dvcmRfYXV0aGVudGljYXRpb247CS8qIElmIHRydWUsIHBl cm1pdCBwYXNzd29yZAorQEAgLTMxNCw2ICszMTcsNyBAQCBUQUlMUV9IRUFEKGluY2x1ZGVfbGlz dCwgaW5jbHVkZV9pdGVtKTsKKyAJCU1fQ1BfU1RST1BUKHBlcm1pdF91c2VyX2Vudl9hbGxvd2xp c3QpOyBcCisgCQlNX0NQX1NUUk9QVChwYW1fc2VydmljZV9uYW1lKTsgXAorIAkJTV9DUF9TVFJP UFQoZ3NzX2luZGljYXRvcnMpOyBcCisrCQlNX0NQX1NUUkFSUkFZT1BUKGdzc19wcm94eV9zZXJ2 aWNlcywgbnVtX2dzc19wcm94eV9zZXJ2aWNlcywgMSk7IFwKKyAJCU1fQ1BfU1RSQVJSQVlPUFQo YXV0aG9yaXplZF9rZXlzX2ZpbGVzLCBudW1fYXV0aGtleXNfZmlsZXMsIDEpO1wKKyAJCU1fQ1Bf U1RSQVJSQVlPUFQocmV2b2tlZF9rZXlzX2ZpbGVzLCBcCisgCQkgICAgbnVtX3Jldm9rZWRfa2V5 c19maWxlcywgMSk7IFwKK2RpZmYgLS1naXQgYS9zc2gtZ3NzLmggYi9zc2gtZ3NzLmgKK2luZGV4 IDE1MDY3MTlhOS4uYTBkNTFjOWJlIDEwMDY0NAorLS0tIGEvc3NoLWdzcy5oCisrKysgYi9zc2gt Z3NzLmgKK0BAIC0xMTksNiArMTE5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeworIAlpbnQgdXNlZDsK KyAJaW50IHVwZGF0ZWQ7CisgCWNoYXIgKippbmRpY2F0b3JzOyAvKiBhdXRoIGluZGljYXRvcnMg Ki8KKysJaW50IGFsbG93X3NlbGY7IC8qIGFsbG93IHByb3RvY29sIHRyYW5zaXRpb24gKi8KKyB9 IHNzaF9nc3NhcGlfY2xpZW50OworIAorIHR5cGVkZWYgc3RydWN0IHNzaF9nc3NhcGlfbWVjaF9z dHJ1Y3QgeworQEAgLTE5OSw2ICsyMDAsMTggQEAgT01fdWludDMyIHNzaF9nc3NhcGlfY2hlY2tt aWMoR3NzY3R4dCAqLCBnc3NfYnVmZmVyX3QsIGdzc19idWZmZXJfdCk7Cisgdm9pZCBzc2hfZ3Nz YXBpX2RvX2NoaWxkKGNoYXIgKioqLCB1X2ludCAqKTsKKyB2b2lkIHNzaF9nc3NhcGlfY2xlYW51 cF9jcmVkcyh2b2lkKTsKKyBpbnQgc3NoX2dzc2FwaV9zdG9yZWNyZWRzKHZvaWQpOworK2ludCAg c3NoX2dzc2FwaV9jcmVkZW50aWFsc19zdG9yZWQodm9pZCk7Cisrc3NoX2dzc2FwaV9jY2FjaGUg KnNzaF9nc3NhcGlfZ2V0X2NjYWNoZSh2b2lkKTsKKytpbnQgIHNzaF9nc3NhcGlfdXNlcl9oYXNf dmFsaWRfdGd0KHVfaW50KTsKKytpbnQgIHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfcHJveHlf dGlja2V0cyhjaGFyICoqLCB1X2ludCwgdV9pbnQpOworK2ludCAgc3NoX2dzc2FwaV9zNHUyc2Vs Zihjb25zdCBjaGFyICosIHVfaW50KTsKKyt2b2lkIHNzaF9nc3NhcGlfc3RvcmVjcmVkc19zNHUy c2VsZih2b2lkKTsKKyt2b2lkIHNzaF9nc3NhcGlfczR1MnByb3h5KGNoYXIgKiosIHVfaW50LCB1 X2ludCk7CisrLyogRmxhZ3MgZm9yIHNzaF9nc3NhcGlfa3JiNV9maWx0ZXJfY2NhY2hlKCk6IHdo aWNoIHRpY2tldCBjbGFzc2VzIHRvIHJlbW92ZSAqLworKyNkZWZpbmUgU1NIX0dTU0FQSV9DQ0ZJ TFRFUl9UR1QgICAgKDF1IDw8IDApIC8qIGtyYnRndC8uLi4gZW50cmllcyAqLworKyNkZWZpbmUg U1NIX0dTU0FQSV9DQ0ZJTFRFUl9TRUxGICAgKDF1IDw8IDEpIC8qIFM0VTJTZWxmIGV2aWRlbmNl IHRpY2tldCAqLworKyNkZWZpbmUgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9QUk9YWSAgKDF1IDw8IDIp IC8qIFM0VTJQcm94eSBzZXJ2aWNlIHRpY2tldHMgKi8KKyt2b2lkIHNzaF9nc3NhcGlfa3JiNV9m aWx0ZXJfY2NhY2hlKHVfaW50LCBjaGFyICoqLCB1X2ludCk7CisgY29uc3QgY2hhciAqc3NoX2dz c2FwaV9kaXNwbGF5bmFtZSh2b2lkKTsKKyAKKyBjaGFyICpzc2hfZ3NzYXBpX3NlcnZlcl9tZWNo YW5pc21zKHZvaWQpOworZGlmZiAtLWdpdCBhL3NzaGQtc2Vzc2lvbi5jIGIvc3NoZC1zZXNzaW9u LmMKK2luZGV4IDcwNjRhZmQ3Yy4uZDFkMTNkODYzIDEwMDY0NAorLS0tIGEvc3NoZC1zZXNzaW9u LmMKKysrKyBiL3NzaGQtc2Vzc2lvbi5jCitAQCAtMTM5Myw2ICsxMzkzLDEwNCBAQCBtYWluKGlu dCBhYywgY2hhciAqKmF2KQorIAkJYXV0aGN0eHQtPmtyYjVfc2V0X2VudiA9IHNzaF9nc3NhcGlf c3RvcmVjcmVkcygpOworIAkJcmVzdG9yZV91aWQoKTsKKyAJfQorKwkvKgorKwkgKiBHU1NBUElB bGxvd1M0VTJTZWxmIC8gR1NTQVBJUHJveHlTNFUyU2VydmljZXM6IGlmIG5vIGNyZWRlbnRpYWxz IHdlcmUgc3RvcmVkCisrCSAqIGFib3ZlIChpLmUuIG5vIEdTU0FQSSBhdXRoIHdpdGggZGVsZWdh dGlvbiBvY2N1cnJlZCksIHVzZSBTNFUyU2VsZgorKwkgKiB0byBvYnRhaW4gYW4gaW1wZXJzb25h dGVkIGNyZWRlbnRpYWwgZm9yIHRoZSB1c2VyLCB0aGVuIG9wdGlvbmFsbHkKKysJICogZm9sbG93 IHdpdGggUzRVMlByb3h5IGZvciBjb25maWd1cmVkIHRhcmdldCBzZXJ2aWNlcy4KKysJICoKKysJ ICogR1NTQVBJQWxsb3dTNFUyU2VsZiBhbG9uZTogICAgc3RvcmUgUzRVMlNlbGYgZXZpZGVuY2Ug dGlja2V0IG9ubHk7CisrCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBob3N0IFRH VCBpcyByZW1vdmVkLgorKwkgKiBHU1NBUElQcm94eVM0VTJTZXJ2aWNlcyBhbG9uZTogc3RvcmUg aG9zdCBUR1QgYW5kIFM0VTJQcm94eSBzZXJ2aWNlCisrCSAqICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRpY2tldHM7IHRoZSBTNFUyU2VsZiBldmlkZW5jZSB0aWNrZXQKKysJICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgaXMgcmVtb3ZlZC4KKysJICogQm90aDogICAgICAgICAgICAg ICAgICAgICBzdG9yZSBob3N0IFRHVCwgUzRVMlNlbGYgZXZpZGVuY2UgdGlja2V0LAorKwkgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYWxsIFM0VTJQcm94eSBzZXJ2aWNlIHRpY2tl dHMuCisrCSAqCisrCSAqIFdoZW4gUzRVMlByb3h5IHRpY2tldHMgYXJlIHByZXNlbnQgdGhlIGhv c3QgVEdUIG11c3QgcmVtYWluIGluIHRoZQorKwkgKiBjY2FjaGU7IGFwcGxpY2F0aW9ucyBjaGVj ayBmb3IgVEdUIHByZXNlbmNlIHRvIGRldGVybWluZSB3aGV0aGVyCisrCSAqIEtlcmJlcm9zIGNy ZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUuICBPbmx5IGluIEdTU0FQSUFsbG93UzRVMlNlbGYtYWxv bmUKKysJICogbW9kZSAobm8gcHJveHkgdGlja2V0cykgaXMgdGhlIGhvc3QgVEdUIHJlbW92ZWQu CisrCSAqCisrCSAqIFNraXAgUzRVMlNlbGYgd2hlbiB0aGUgdXNlciBhbHJlYWR5IGhhcyBjcmVk ZW50aWFscyBjb3ZlcmluZyB0aGUKKysJICogcmVxdWVzdGVkIGxpZmV0aW1lOiBjaGVjayBmb3Ig YSB2YWxpZCBUR1QgaW4gdGhlIEdTU0FQSUFsbG93UzRVMlNlbGYtCisrCSAqIGFsb25lIGNhc2Us IG9yIGZvciB2YWxpZCBwcm94eSB0aWNrZXRzIGZvciBldmVyeSBjb25maWd1cmVkIHNlcnZpY2UK KysJICogb3RoZXJ3aXNlLgorKwkgKi8KKysJaWYgKChvcHRpb25zLmdzc19hbGxvd19zNHUyc2Vs ZiB8fCBvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMgPiAwKSAmJgorKwkgICAgIXNzaF9n c3NhcGlfY3JlZGVudGlhbHNfc3RvcmVkKCkpIHsKKysJCXVfaW50IGxpZmV0aW1lID0gKCFvcHRp b25zLmdzc19hbGxvd19zNHUyc2VsZiB8fAorKwkJICAgIG9wdGlvbnMuZ3NzX2FsbG93X3M0dTJz ZWxmID09IElOVF9NQVgpID8KKysJCSAgICBHU1NfQ19JTkRFRklOSVRFIDogKHVfaW50KW9wdGlv bnMuZ3NzX2FsbG93X3M0dTJzZWxmOworKwkJaW50IHNraXAgPSAwOworKworKwkJdGVtcG9yYXJp bHlfdXNlX3VpZChhdXRoY3R4dC0+cHcpOworKwkJaWYgKG9wdGlvbnMuZ3NzX2FsbG93X3M0dTJz ZWxmICYmCisrCQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID09IDApIHsKKysJ CQkvKiBTNFUyU2VsZi1hbG9uZTogc2tpcCBpZiB1c2VyIGFscmVhZHkgaGFzIGEgdmFsaWQgVEdU ICovCisrCQkJc2tpcCA9IHNzaF9nc3NhcGlfdXNlcl9oYXNfdmFsaWRfdGd0KGxpZmV0aW1lKTsK KysJCX0gZWxzZSBpZiAob3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzID4gMCkgeworKwkJ CS8qCisrCQkJICogUHJveHktb25seSBvciBib3RoOiBza2lwIGlmIGV2ZXJ5IGNvbmZpZ3VyZWQg c2VydmljZQorKwkJCSAqIGFscmVhZHkgaGFzIGEgdmFsaWQgdGlja2V0IGluIHRoZSB1c2VyJ3Mg Y2NhY2hlLgorKwkJCSAqIFNlcnZpY2UgdGlja2V0cyBhcmUgbm90IEdTU0FQSSBpbml0aWF0b3Ig Y3JlZGVudGlhbHMsCisrCQkJICogc28gZ3NzX2FjcXVpcmVfY3JlZCgpIGNhbm5vdCBiZSB1c2Vk OyBpdGVyYXRlIHRoZQorKwkJCSAqIGNjYWNoZSB3aXRoIHRoZSBrcmI1IEFQSSBpbnN0ZWFkLgor KwkJCSAqLworKwkJCXNraXAgPSBzc2hfZ3NzYXBpX3VzZXJfaGFzX3ZhbGlkX3Byb3h5X3RpY2tl dHMoCisrCQkJICAgIG9wdGlvbnMuZ3NzX3Byb3h5X3NlcnZpY2VzLAorKwkJCSAgICBvcHRpb25z Lm51bV9nc3NfcHJveHlfc2VydmljZXMsCisrCQkJICAgIGxpZmV0aW1lKTsKKysJCX0KKysJCXJl c3RvcmVfdWlkKCk7CisrCisrCQlpZiAoc2tpcCkgeworKwkJCWRlYnVnX2YoInVzZXIgJS4xMDBz IGFscmVhZHkgaGFzIHZhbGlkIEtlcmJlcm9zICIKKysJCQkgICAgImNyZWRlbnRpYWxzLCBza2lw cGluZyBTNFUyU2VsZiIsCisrCQkJICAgIGF1dGhjdHh0LT51c2VyKTsKKysJCX0gZWxzZSBpZiAo c3NoX2dzc2FwaV9zNHUyc2VsZihhdXRoY3R4dC0+dXNlciwgbGlmZXRpbWUpID09IDApIHsKKysJ CQl1X2ludCBmaWx0ZXI7CisrCisrCQkJdGVtcG9yYXJpbHlfdXNlX3VpZChhdXRoY3R4dC0+cHcp OworKwkJCS8qCisrCQkJICogQWx3YXlzIGNyZWF0ZSB0aGUgY2NhY2hlIHZpYSBzdG9yZWNyZWRz X3M0dTJzZWxmIHNvCisrCQkJICogdGhhdCBzNHUycHJveHkgaGFzIGEgY2NhY2hlIHRvIHN0b3Jl IHRpY2tldHMgaW50by4KKysJCQkgKiBnc3Nfa3JiNV9jb3B5X2NjYWNoZSgpIGNvcGllcyB0aGUg aG9zdCBzZXJ2aWNlJ3Mgb3duCisrCQkJICogVEdUIGFsb25nIHdpdGggdGhlIGV2aWRlbmNlIHRp Y2tldDsgZmlsdGVyX2NjYWNoZQorKwkJCSAqIHJlbW92ZXMgdGhlIHRpY2tldCBjbGFzc2VzIHRo YXQgc2hvdWxkIG5vdCBiZSBrZXB0LgorKwkJCSAqLworKwkJCXNzaF9nc3NhcGlfc3RvcmVjcmVk c19zNHUyc2VsZigpOworKwkJCWlmIChvcHRpb25zLm51bV9nc3NfcHJveHlfc2VydmljZXMgPiAw KQorKwkJCQlzc2hfZ3NzYXBpX3M0dTJwcm94eSgKKysJCQkJICAgIG9wdGlvbnMuZ3NzX3Byb3h5 X3NlcnZpY2VzLAorKwkJCQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzLAorKwkJ CQkgICAgbGlmZXRpbWUpOworKworKwkJCS8qCisrCQkJICogUmVtb3ZlIHRoZSBob3N0IFRHVCBv bmx5IGluIEdTU0FQSUFsbG93UzRVMlNlbGYtYWxvbmUKKysJCQkgKiBtb2RlOyB3aGVuIHByb3h5 IHRpY2tldHMgYXJlIHByZXNlbnQgdGhlIFRHVCBtdXN0CisrCQkJICogc3RheSBzbyB0aGF0IGFw cGxpY2F0aW9ucyByZWNvZ25pc2UgdGhlIGNjYWNoZSBhcworKwkJCSAqIGhvbGRpbmcgbGl2ZSBL ZXJiZXJvcyBjcmVkZW50aWFscy4KKysJCQkgKiBSZW1vdmUgdGhlIFM0VTJTZWxmIGV2aWRlbmNl IHRpY2tldCBpbiBwcm94eS1vbmx5CisrCQkJICogbW9kZSAoR1NTQVBJUHJveHlTNFUyU2Vydmlj ZXMgd2l0aG91dCBHU1NBUElBbGxvd1M0VTJTZWxmKS4KKysJCQkgKi8KKysJCQlmaWx0ZXIgPSAw OworKwkJCWlmIChvcHRpb25zLmdzc19hbGxvd19zNHUyc2VsZiAmJgorKwkJCSAgICBvcHRpb25z Lm51bV9nc3NfcHJveHlfc2VydmljZXMgPT0gMCkKKysJCQkJZmlsdGVyID0gU1NIX0dTU0FQSV9D Q0ZJTFRFUl9UR1QgfAorKwkJCQkgICAgU1NIX0dTU0FQSV9DQ0ZJTFRFUl9QUk9YWTsKKysJCQll bHNlIGlmICghb3B0aW9ucy5nc3NfYWxsb3dfczR1MnNlbGYpCisrCQkJCWZpbHRlciA9IFNTSF9H U1NBUElfQ0NGSUxURVJfU0VMRjsKKysJCQlpZiAoZmlsdGVyICE9IDApCisrCQkJCXNzaF9nc3Nh cGlfa3JiNV9maWx0ZXJfY2NhY2hlKGZpbHRlciwKKysJCQkJICAgIG9wdGlvbnMuZ3NzX3Byb3h5 X3NlcnZpY2VzLAorKwkJCQkgICAgb3B0aW9ucy5udW1fZ3NzX3Byb3h5X3NlcnZpY2VzKTsKKysJ CQlyZXN0b3JlX3VpZCgpOworKwkJfSBlbHNlIHsKKysJCQlsb2dpdCgiUzRVMlNlbGYgZmFpbGVk IGZvciB1c2VyICUuMTAwcywgY29udGludWluZyIsCisrCQkJICAgIGF1dGhjdHh0LT51c2VyKTsK KysJCX0KKysJfQorICNlbmRpZgorICNpZmRlZiBXSVRIX1NFTElOVVgKKyAJc3NoZF9zZWxpbnV4 X3NldHVwX2V4ZWNfY29udGV4dChhdXRoY3R4dC0+cHctPnB3X25hbWUsCitkaWZmIC0tZ2l0IGEv c3NoZF9jb25maWcuNSBiL3NzaGRfY29uZmlnLjUKK2luZGV4IGMyODIyMDA3Ny4uMzBkMWQ1OWRh IDEwMDY0NAorLS0tIGEvc3NoZF9jb25maWcuNQorKysrIGIvc3NoZF9jb25maWcuNQorQEAgLTg0 Niw2ICs4NDYsNzYgQEAgRklETzItYmFzZWQgcHJlLWF1dGhlbnRpY2F0aW9uIGluIEZyZWVJUEEs IHVzaW5nIEZJRE8yIFVTQiBhbmQgTkZDIHRva2VucworIFRoZSBkZWZhdWx0CisgLkRxIG5vbmUK KyBpcyB0byBub3QgdXNlIEdTU0FQSSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGZvciBhY2Nl c3MgZGVjaXNpb25zLgorKy5JdCBDbSBHU1NBUElBbGxvd1M0VTJTZWxmCisrQ29udHJvbHMgd2hl dGhlciB0aGUgU1NIIHNlcnZlciBwZXJmb3JtcyBhIEtlcmJlcm9zIHByb3RvY29sIHRyYW5zaXRp b24KKysoUzRVMlNlbGYpIGFmdGVyIGEgc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbiB1c2luZyBh bnkgb3RoZXIgbWV0aG9kLgorK0FjY2VwdGVkIHZhbHVlcyBhcmUKKysuQ20gbm8gLAorKy5DbSB5 ZXMgLAorK29yIGEgdGltZSBpbnRlcnZhbCAoc2VlCisrLlN4IFRJTUUgRk9STUFUUworK2JlbG93 KS4KKysuQ20gbm8KKytkaXNhYmxlcyBTNFUyU2VsZiBlbnRpcmVseS4KKysuQ20geWVzCisrZW5h YmxlcyBTNFUyU2VsZiBhbmQgcmVxdWVzdHMgYSB0aWNrZXQgd2l0aCB0aGUgbWF4aW11bSBsaWZl dGltZQorK3Blcm1pdHRlZCBieSB0aGUgS0RDLgorK0EgdGltZSBpbnRlcnZhbCAoZS5nLlwmCisr LkNtIDhoICwKKysuQ20gMWQgKQorK2VuYWJsZXMgUzRVMlNlbGYgYW5kIHJlcXVlc3RzIGEgdGlj a2V0IHZhbGlkIGZvciBhdCBtb3N0IHRoYXQgZHVyYXRpb24uCisrVGhlIG9wdGlvbiBpcyBhIG5v LW9wIHdoZW4gZGVsZWdhdGVkIEdTU0FQSSBjcmVkZW50aWFscyBhcmUgYWxyZWFkeSBhdmFpbGFi bGUuCisrVGhlIG9idGFpbmVkIHNlcnZpY2UgdGlja2V0IGlzIHN0b3JlZCBpbiB0aGUgZGVmYXVs dCBjcmVkZW50aWFscyBjYWNoZSBhbmQgaXMKKythY2Nlc3NpYmxlIHRvIGFueSBhcHBsaWNhdGlv biB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIEtlcmJlcm9zIGhvc3QgcHJpbmNpcGFsCisrLlBxIGhv c3QvbWFjaGluZS5mcWRuQFJFQUxNCisrY3JlZGVudGlhbHMgb24gdGhlIHNhbWUgaG9zdC4KKysu UHAKKytUaGUgZGVmYXVsdCBpcworKy5DbSBubyAuCisrLkl0IENtIEdTU0FQSVByb3h5UzRVMlNl cnZpY2VzCisrU3BlY2lmaWVzIGEgbGlzdCBvZiBLZXJiZXJvcyBzZXJ2aWNlIHByaW5jaXBhbHMg Zm9yIHdoaWNoIGNvbnN0cmFpbmVkCisrZGVsZWdhdGlvbiAoUzRVMlByb3h5KSB0aWNrZXRzIHNo b3VsZCBiZSBvYnRhaW5lZCBhZnRlciBhIHN1Y2Nlc3NmdWwKKytTNFUyU2VsZiBwcm90b2NvbCB0 cmFuc2l0aW9uLgorK0VhY2ggZW50cnkgbXVzdCBiZSBhIGZ1bGx5LXF1YWxpZmllZCBLZXJiZXJv cyBwcmluY2lwYWwgbmFtZSBvZiB0aGUgZm9ybQorKy5BciBzZXJ2aWNlL2hvc3RAUkVBTE0gLgor K011bHRpcGxlIHByaW5jaXBhbHMgbWF5IGJlIGxpc3RlZCwgc2VwYXJhdGVkIGJ5IHdoaXRlc3Bh Y2UuCisrVGhlIGtleXdvcmQKKysuQ20gbm9uZQorK2NsZWFycyBhbnkgcHJldmlvdXNseSBzZXQg bGlzdC4KKysuUHAKKytUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBpbmRlcGVuZGVudGx5IG9mCisr LkNtIEdTU0FQSUFsbG93UzRVMlNlbGYgLgorK1doZW4gUzRVMlNlbGYgc3VjY2VlZHMsIHRoZSBz ZXJ2ZXIgaXRlcmF0ZXMgdGhlIGxpc3QgYW5kIGNhbGxzCisrLlhyIGdzc19pbml0X3NlY19jb250 ZXh0IDMKKytmb3IgZWFjaCBwcmluY2lwYWwgd2l0aCB0aGUgcHJveHkgY3JlZGVudGlhbCBvYnRh aW5lZCBieSBTNFUyU2VsZiBhcworK3RoZSBpbml0aWF0b3IuCisrVGhlIEdTU0FQSSBsaWJyYXJ5 IHByZXNlbnRzIHRoZSBldmlkZW5jZSB0aWNrZXQgdG8gdGhlIEtEQyB2aWEgYW4KKytTNFUyUHJv eHkgVEdTLVJFUTsgaWYgdGhlIGhvc3Qgc2VydmljZSBob2xkcyB0aGUgbmVjZXNzYXJ5IGNvbnN0 cmFpbmVkLQorK2RlbGVnYXRpb24gcGVybWlzc2lvbiBpbiB0aGUgS0RDLCBhIHNlcnZpY2UgdGlj a2V0IGZyb20gdGhlIHVzZXIgdG8KKyt0aGUgdGFyZ2V0IHNlcnZpY2UgaXMgaXNzdWVkLgorK1Ro ZXNlIHRpY2tldHMgYXJlIGFjY3VtdWxhdGVkIGFuZCB0aGVuIGZsdXNoZWQgaW50byB0aGUgdXNl cidzIGNjYWNoZQorK3ZpYQorKy5YciBnc3Nfc3RvcmVfY3JlZCAzICwKKytzbyB0aGF0IGFueSBh cHBsaWNhdGlvbiBydW5uaW5nIGluIHRoZSB1c2VyJ3Mgc2Vzc2lvbiBjYW4gdXNlIHRoZW0KKyt3 aXRob3V0IGZ1cnRoZXIgaW50ZXJhY3Rpb24uCisrVGhlIEFQLVJFUSBvdXRwdXQgdG9rZW4gb2Yg ZWFjaAorKy5YciBnc3NfaW5pdF9zZWNfY29udGV4dCAzCisrY2FsbCBpcyBkaXNjYXJkZWQ7IG5v IG5ldHdvcmsgY29ubmVjdGlvbiB0byB0aGUgdGFyZ2V0IHNlcnZpY2UgaXMgbWFkZS4KKysuUHAK KytXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aAorKy5DbSBHU1NBUElBbGxvd1M0VTJTZWxmICwKKyt0 aGUgVEdUIGFuZCBTNFUyU2VsZiB0aWNrZXQgYXJlIGFsc28gc3RvcmVkIGluIHRoZSB1c2VyJ3Mg Y2NhY2hlIGluCisrYWRkaXRpb24gdG8gdGhlIFM0VTJQcm94eSBzZXJ2aWNlIHRpY2tldHMuCisr V2hlbiB1c2VkIGFsb25lICh3aXRob3V0CisrLkNtIEdTU0FQSUFsbG93UzRVMlNlbGYgKSAsCisr b25seSB0aGUgUzRVMlByb3h5IHNlcnZpY2UgdGlja2V0cyBhcmUgc3RvcmVkOyB0aGUgaW50ZXJt ZWRpYXRlIFM0VTJTZWxmCisrY3JlZGVudGlhbCBpcyBub3QgcGxhY2VkIGluIHRoZSB1c2VyJ3Mg Y2NhY2hlLgorKy5QcAorK1RoaXMgb3B0aW9uIHN1cHBvcnRzCisrLkNtIE1hdGNoCisrYmxvY2tz LCBhbGxvd2luZyBwZXItdXNlciBvciBwZXItaG9zdCBsaXN0cyBvZiBkZWxlZ2F0aW9uIHRhcmdl dHMuCisrLlBwCisrVGhlIGRlZmF1bHQgaXMgZW1wdHkgKG5vIFM0VTJQcm94eSBkZWxlZ2F0aW9u IGlzIHBlcmZvcm1lZCkuCisgLkl0IENtIEhvc3RiYXNlZEFjY2VwdGVkQWxnb3JpdGhtcworIFRo ZSBkZWZhdWx0IGlzIGhhbmRsZWQgc3lzdGVtLXdpZGUgYnkKKyAuWHIgY3J5cHRvLXBvbGljaWVz IDcgLgorLS0gCisyLjUzLjAKKwoKZGlmZiAtLWdpdCBhLzAwNTItb3BlbnNzaC0xMC4ycDEtcGtj czExLXVyaS5wYXRjaCBiLzAwNTItb3BlbnNzaC0xMC4ycDEtcGtjczExLXVyaS5wYXRjaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgxMzM3Yi4uMDAwMDAwMAotLS0gYS8wMDUyLW9w ZW5zc2gtMTAuMnAxLXBrY3MxMS11cmkucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMjU5ICsw LDAgQEAKLUZyb20gZjMyZjJhOGEzN2U4NTg1YzEyNTlmZWEyYTk3MDMxOWQyMjllMmNjNyBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IERtaXRyeSBCZWx5YXZza2l5IDxiZWxkbWl0QGdt YWlsLmNvbT4KLURhdGU6IE1vbiwgMTUgRGVjIDIwMjUgMTQ6MjQ6MDcgKzAxMDAKLVN1YmplY3Q6 IFtQQVRDSCA1Mi81M10gb3BlbnNzaC0xMC4ycDEtcGtjczExLXVyaQotCi0tLS0KLSBNYWtlZmls ZS5pbiAgICAgICAgICAgICAgICAgICAgICB8ICAyNCArLQotIGNvbmZpZ3VyZS5hYyAgICAgICAg ICAgICAgICAgICAgIHwgIDM3ICsrCi0gcmVncmVzcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAg fCAgIDQgKy0KLSByZWdyZXNzL3BrY3MxMS5zaCAgICAgICAgICAgICAgICB8IDM0OSArKysrKysr KysrKysrKwotIHJlZ3Jlc3MvdW5pdHRlc3RzL01ha2VmaWxlICAgICAgIHwgICAyICstCi0gcmVn cmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLmMgfCAzNTMgKysrKysrKysrKysrKysKLSBzc2gt YWRkLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA0OCArLQotIHNzaC1hZ2VudC5jICAgICAg ICAgICAgICAgICAgICAgIHwgMTA0ICsrKystCi0gc3NoLWtleWdlbi5jICAgICAgICAgICAgICAg ICAgICAgfCAgIDcgKy0KLSBzc2gtcGtjczExLWNsaWVudC5jICAgICAgICAgICAgICB8ICAxNyAr Ci0gc3NoLXBrY3MxMS11cmkuYyAgICAgICAgICAgICAgICAgfCA0MzcgKysrKysrKysrKysrKysr KysrCi0gc3NoLXBrY3MxMS11cmkuaCAgICAgICAgICAgICAgICAgfCAgNDMgKysKLSBzc2gtcGtj czExLmMgICAgICAgICAgICAgICAgICAgICB8IDc2MCArKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tCi0gc3NoLXBrY3MxMS5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKwotIHNzaC5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTA0ICsrKystCi0gc3NoX2NvbmZpZy41ICAg ICAgICAgICAgICAgICAgICAgfCAgMTUgKwotIDE2IGZpbGVzIGNoYW5nZWQsIDIwMzkgaW5zZXJ0 aW9ucygrKSwgMjY5IGRlbGV0aW9ucygtKQotIGNyZWF0ZSBtb2RlIDEwMDY0NCByZWdyZXNzL3Br Y3MxMS5zaAotIGNyZWF0ZSBtb2RlIDEwMDY0NCByZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVz dHMuYwotIGNyZWF0ZSBtb2RlIDEwMDY0NCBzc2gtcGtjczExLXVyaS5jCi0gY3JlYXRlIG1vZGUg MTAwNjQ0IHNzaC1wa2NzMTEtdXJpLmgKLQotZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFr ZWZpbGUuaW4KLWluZGV4IDIwZDEzNGMwMi4uZjhjYmQ1NDVkIDEwMDY0NAotLS0tIGEvTWFrZWZp bGUuaW4KLSsrKyBiL01ha2VmaWxlLmluCi1AQCAtMTEyLDEyICsxMTIsMTIgQEAgTElCU1NIX09C SlM9JHtMSUJPUEVOU1NIX09CSlN9IFwKLSAJc2Z0cC1yZWFscGF0aC5vIHBsYXRmb3JtLXBsZWRn ZS5vIHBsYXRmb3JtLXRyYWNpbmcubyBwbGF0Zm9ybS1taXNjLm8gXAotIAlzc2hidWYtaW8ubyBt aXNjLWFnZW50Lm8gYXVkaXRzdHViLm8KLSAKLS1QMTFPQkpTPSBzc2gtcGtjczExLWNsaWVudC5v Ci0rUDExT0JKUz0gc3NoLXBrY3MxMS1jbGllbnQubyBzc2gtcGtjczExLXVyaS5vCi0gCi0gU0tP QkpTPQlzc2gtc2stY2xpZW50Lm8KLSAKLSBTU0hPQkpTPSBzc2gubyByZWFkY29uZi5vIGNsaWVu dGxvb3AubyBzc2h0dHkubyBcCi0tCXNzaGNvbm5lY3QubyBzc2hjb25uZWN0Mi5vIG11eC5vICQo UDExT0JKUykgJChTS09CSlMpCi0rCXNzaGNvbm5lY3QubyBzc2hjb25uZWN0Mi5vIG11eC5vIHNz aC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpTKQotIAotIFNTSERPQkpTPXNzaGQu byBcCi0gCXBsYXRmb3JtLWxpc3Rlbi5vIFwKLUBAIC0xNjEsMTEgKzE2MSwxMSBAQCBTU0hBRERf T0JKUz0Jc3NoLWFkZC5vICQoUDExT0JKUykgJChTS09CSlMpCi0gCi0gU1NIQUdFTlRfT0JKUz0J c3NoLWFnZW50Lm8gJChQMTFPQkpTKSAkKFNLT0JKUykKLSAKLS1TU0hLRVlHRU5fT0JKUz0Jc3No LWtleWdlbi5vIHNzaHNpZy5vIHNzaC1wa2NzMTEubyAkKFNLT0JKUykKLStTU0hLRVlHRU5fT0JK Uz0Jc3NoLWtleWdlbi5vIHNzaHNpZy5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQo U0tPQkpTKQotIAotIFNTSEtFWVNJR05fT0JKUz1zc2gta2V5c2lnbi5vIHJlYWRjb25mLm8gdWlk c3dhcC5vICQoUDExT0JKUykgJChTS09CSlMpCi0gCi0tUDExSEVMUEVSX09CSlM9CXNzaC1wa2Nz MTEtaGVscGVyLm8gc3NoLXBrY3MxMS5vICQoU0tPQkpTKQotK1AxMUhFTFBFUl9PQkpTPQlzc2gt cGtjczExLWhlbHBlci5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpTKQot IAotIFNLSEVMUEVSX09CSlM9CXNzaC1zay1oZWxwZXIubyBzc2gtc2subyBzay11c2JoaWQubwot IAotQEAgLTMzMSw2ICszMzEsOCBAQCBjbGVhbjoJcmVncmVzc2NsZWFuCi0gCXJtIC1mIHJlZ3Jl c3MvdW5pdHRlc3RzL3NzaHNpZy90ZXN0X3NzaHNpZyQoRVhFRVhUKQotIAlybSAtZiByZWdyZXNz L3VuaXR0ZXN0cy91dGY4LyoubwotIAlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3Rf dXRmOCQoRVhFRVhUKQotKwlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvKi5vCi0rCXJt IC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0X3BrY3MxMSQoRVhFRVhUKQotIAlybSAt ZiByZWdyZXNzL21pc2Mvc2stZHVtbXkvKi5vCi0gCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1t eS8qLmxvCi0gCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zc2gtdmVyaWZ5LWF0dGVzdGF0aW9uL3NzaC12 ZXJpZnktYXR0ZXN0YXRpb24kKEVYRUVYVCkKLUBAIC0zNjksNiArMzcxLDggQEAgZGlzdGNsZWFu OglyZWdyZXNzY2xlYW4KLSAJcm0gLWYgcmVncmVzcy91bml0dGVzdHMvc3Noc2lnL3Rlc3Rfc3No c2lnCi0gCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3V0ZjgvKi5vCi0gCXJtIC1mIHJlZ3Jlc3Mv dW5pdHRlc3RzL3V0ZjgvdGVzdF91dGY4Ci0rCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3Mx MS8qLm8KLSsJcm0gLWYgcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RfcGtjczExCi0gCXJt IC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1teS8qLm8KLSAJcm0gLWYgcmVncmVzcy9taXNjL3NrLWR1 bW15LyoubG8KLSAJcm0gLWYgcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15LnNvCi1AQCAt NTQ5LDYgKzU1Myw3IEBAIHJlZ3Jlc3MtcHJlcDoKLSAJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNz L3VuaXR0ZXN0cy9zc2hrZXkKLSAJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy9z c2hzaWcKLSAJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy91dGY4Ci0rCSQoTUtE SVJfUCkgYHB3ZGAvcmVncmVzcy91bml0dGVzdHMvcGtjczExCi0gCSQoTUtESVJfUCkgYHB3ZGAv cmVncmVzcy9taXNjL3NrLWR1bW15Ci0gCSQoTUtESVJfUCkgYHB3ZGAvcmVncmVzcy9taXNjL3Nz aC12ZXJpZnktYXR0ZXN0YXRpb24KLSAJWyAtZiBgcHdkYC9yZWdyZXNzL01ha2VmaWxlIF0gfHwg XAotQEAgLTcyNCw2ICs3MjksMTYgQEAgcmVncmVzcy91bml0dGVzdHMvdXRmOC90ZXN0X3V0Zjgk KEVYRUVYVCk6IFwKLSAJICAgIHJlZ3Jlc3MvdW5pdHRlc3RzL3Rlc3RfaGVscGVyL2xpYnRlc3Rf aGVscGVyLmEgXAotIAkgICAgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAtbHNzaCAtbG9wZW5ic2Qt Y29tcGF0ICQoVEVTVExJQlMpCi0gCi0rVU5JVFRFU1RTX1RFU1RfUEtDUzExX09CSlM9XAotKwly ZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdHMubwotKwotK3JlZ3Jlc3MvdW5pdHRlc3RzL3Br Y3MxMS90ZXN0X3BrY3MxMSQoRVhFRVhUKTogXAotKyAgICAke1VOSVRURVNUU19URVNUX1BLQ1Mx MV9PQkpTfSBzc2gtcGtjczExLXVyaS5vIFwKLSsgICAgcmVncmVzcy91bml0dGVzdHMvdGVzdF9o ZWxwZXIvbGlidGVzdF9oZWxwZXIuYSBsaWJzc2guYQotKwkkKExEKSAtbyAkQCAkKExERkxBR1Mp ICQoVU5JVFRFU1RTX1RFU1RfUEtDUzExX09CSlMpIFwKLSsJICAgIHJlZ3Jlc3MvdW5pdHRlc3Rz L3Rlc3RfaGVscGVyL2xpYnRlc3RfaGVscGVyLmEgXAotKwkgICAgc3NoLXBrY3MxMS11cmkubyAt bHNzaCAtbG9wZW5ic2QtY29tcGF0IC1sY3J5cHRvICQoTElCUykgLWxtCi0rCi0gIyBUaGVzZSBh bGwgbmVlZCB0byBiZSBjb21waWxlZCAtZlBJQywgc28gdGhleSBhcmUgdHJlYXRlZCBkaWZmZXJl bnRseS4KLSBTS19EVU1NWV9PQkpTPVwKLSAJcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15 LmxvIFwKLUBAIC03NjksNyArNzg0LDggQEAgcmVncmVzcy11bml0LWJpbmFyaWVzOiByZWdyZXNz LXByZXAgJChSRUdSRVNTTElCUykgXAotIAlyZWdyZXNzL3VuaXR0ZXN0cy9zc2hidWYvdGVzdF9z c2hidWYkKEVYRUVYVCkgXAotIAlyZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkk KEVYRUVYVCkgXAotIAlyZWdyZXNzL3VuaXR0ZXN0cy9zc2hzaWcvdGVzdF9zc2hzaWckKEVYRUVY VCkgXAotLQlyZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKQotKwlyZWdy ZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKSBcCi0rCXJlZ3Jlc3MvdW5pdHRl c3RzL3BrY3MxMS90ZXN0X3BrY3MxMSQoRVhFRVhUKSBcCi0gCi0gdGVzdHM6CWZpbGUtdGVzdHMg dC1leGVjIGludGVyb3AtdGVzdHMgZXh0cmEtdGVzdHMgdW5pdAotIAllY2hvIGFsbCB0ZXN0cyBw YXNzZWQKLWRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKLWluZGV4IDlk M2IxOTkyNS4uZTMzNDYyMDI3IDEwMDY0NAotLS0tIGEvY29uZmlndXJlLmFjCi0rKysgYi9jb25m aWd1cmUuYWMKLUBAIC0yMjQ2LDEyICsyMjQ2LDE0IEBAIEFDX0xJTktfSUZFTFNFKAotIAlbQUNf REVGSU5FKFtIQVZFX0lTQkxBTktdLCBbMV0sIFtEZWZpbmUgaWYgeW91IGhhdmUgaXNibGFuaygz QykuXSkKLSBdKQotIAotK1NDQVJEX01TRz0ieWVzIgotIGRpc2FibGVfcGtjczExPQotIEFDX0FS R19FTkFCTEUoW3BrY3MxMV0sCi0gCVsgIC0tZGlzYWJsZS1wa2NzMTEgICAgICAgIGRpc2FibGUg UEtDUyMxMSBzdXBwb3J0IGNvZGUgW25vXV0sCi0gCVsKLSAJCWlmIHRlc3QgIngkZW5hYmxldmFs IiA9ICJ4bm8iIDsgdGhlbgotIAkJCWRpc2FibGVfcGtjczExPTEKLSsJCQlTQ0FSRF9NU0c9Im5v IgotIAkJZmkKLSAJXQotICkKLUBAIC0yMjgxLDYgKzIyODMsNDAgQEAgQUNfU0VBUkNIX0xJQlMo W2Rsb3Blbl0sIFtkbF0pCi0gQUNfQ0hFQ0tfRlVOQ1MoW2Rsb3Blbl0pCi0gQUNfQ0hFQ0tfREVD TChbUlRMRF9OT1ddLCBbXSwgW10sIFsjaW5jbHVkZSA8ZGxmY24uaD5dKQotIAotKyMgQ2hlY2sg d2hldGhlciB3ZSBoYXZlIGEgcDExLWtpdCwgd2UgZ290IGRlZmF1bHQgcHJvdmlkZXIgb24gY29t bWFuZCBsaW5lCi0rREVGQVVMVF9QS0NTMTFfUFJPVklERVJfTVNHPSJubyIKLStBQ19BUkdfV0lU SChbZGVmYXVsdC1wa2NzMTEtcHJvdmlkZXJdLAotKwlbICAtLXdpdGgtZGVmYXVsdC1wa2NzMTEt cHJvdmlkZXJbWz1QQVRIXV0gICBVc2UgZGVmYXVsdCBwa2NzMTEgcHJvdmlkZXIgKHAxMS1raXQg ZGV0ZWN0ZWQgYnkgZGVmYXVsdCldLAotKwlbIGlmIHRlc3QgIngkd2l0aHZhbCIgIT0gInhubyIg JiYgdGVzdCAieCRkaXNhYmxlX3BrY3MxMSIgPSAieCI7IHRoZW4KLSsJCWlmIHRlc3QgIngkd2l0 aHZhbCIgPSAieHllcyIgOyB0aGVuCi0rCQkJQUNfUEFUSF9UT09MKFtQS0dDT05GSUddLCBbcGtn LWNvbmZpZ10sIFtub10pCi0rCQkJaWYgdGVzdCAieCRQS0dDT05GSUciICE9ICJ4bm8iOyB0aGVu Ci0rCQkJCUFDX01TR19DSEVDS0lORyhbaWYgJFBLR0NPTkZJRyBrbm93cyBhYm91dCBwMTEta2l0 XSkKLSsJCQkJaWYgIiRQS0dDT05GSUciICJwMTEta2l0LTEiOyB0aGVuCi0rCQkJCQlBQ19NU0df UkVTVUxUKFt5ZXNdKQotKwkJCQkJdXNlX3BrZ2NvbmZpZ19mb3JfcDExa2l0PXllcwotKwkJCQll bHNlCi0rCQkJCQlBQ19NU0dfUkVTVUxUKFtub10pCi0rCQkJCWZpCi0rCQkJZmkKLSsJCWVsc2UK LSsJCQlQS0NTMTFfUEFUSD0iJHt3aXRodmFsfSIKLSsJCWZpCi0rCQlpZiB0ZXN0ICJ4JHVzZV9w a2djb25maWdfZm9yX3AxMWtpdCIgPSAieHllcyI7IHRoZW4KLSsJCQlQS0NTMTFfUEFUSD1gJFBL R0NPTkZJRyAtLXZhcmlhYmxlPXByb3h5X21vZHVsZSBwMTEta2l0LTFgCi0rCQlmaQotKwkJQUNf Q0hFQ0tfRklMRSgiJFBLQ1MxMV9QQVRIIiwKLSsJCQlbIEFDX0RFRklORV9VTlFVT1RFRChbUEtD UzExX0RFRkFVTFRfUFJPVklERVJdLCBbIiRQS0NTMTFfUEFUSCJdLCBbUGF0aCB0byBkZWZhdWx0 IFBLQ1MjMTEgcHJvdmlkZXIgKHAxMS1raXQgcHJveHkpXSkKLSsJCQkgIERFRkFVTFRfUEtDUzEx X1BST1ZJREVSX01TRz0iJFBLQ1MxMV9QQVRIIgotKwkJCV0sCi0rCQkJWyBBQ19NU0dfRVJST1Io W1JlcXVlc3RlZCBQS0NTMTEgcHJvdmlkZWQgbm90IGZvdW5kXSkgXQotKwkJKQotKwllbHNlCi0r CQlBQ19NU0dfV0FSTihbTmVlZHMgUEtDUzExIHN1cHBvcnQgdG8gZW5hYmxlIGRlZmF1bHQgcGtj czExIHByb3ZpZGVyXSkKLSsJZmkgXQotKykKLSsKLSsKLSAjIElSSVggaGFzIGEgY29uc3QgY2hh ciByZXR1cm4gdmFsdWUgZm9yIGdhaV9zdHJlcnJvcigpCi0gQUNfQ0hFQ0tfRlVOQ1MoW2dhaV9z dHJlcnJvcl0sIFsKLSAJQUNfREVGSU5FKFtIQVZFX0dBSV9TVFJFUlJPUl0pCi1AQCAtNTkwNCw2 ICs1OTQwLDcgQEAgZWNobyAiICAgICAgICAgICAgICAgICAgQlNEIEF1dGggc3VwcG9ydDogJEJT RF9BVVRIX01TRyIKLSBlY2hvICIgICAgICAgICAgICAgIFJhbmRvbSBudW1iZXIgc291cmNlOiAk UkFORF9NU0ciCi0gZWNobyAiICAgICAgICAgICAgIFByaXZzZXAgc2FuZGJveCBzdHlsZTogJFNB TkRCT1hfU1RZTEUiCi0gZWNobyAiICAgICAgICAgICAgICAgICAgIFBLQ1MjMTEgc3VwcG9ydDog JGVuYWJsZV9wa2NzMTEiCi0rZWNobyAiICAgICAgICAgIERlZmF1bHQgUEtDUyMxMSBwcm92aWRl cjogJERFRkFVTFRfUEtDUzExX1BST1ZJREVSX01TRyIKLSBlY2hvICIgICAgICAgICAgICAgICAg ICBVMkYvRklETyBzdXBwb3J0OiAkZW5hYmxlX3NrIgotIAotIGVjaG8gIiIKLWRpZmYgLS1naXQg YS9yZWdyZXNzL01ha2VmaWxlIGIvcmVncmVzcy9NYWtlZmlsZQotaW5kZXggZWNlMDkzYTJiLi5h ODUxNTQ5ZjYgMTAwNjQ0Ci0tLS0gYS9yZWdyZXNzL01ha2VmaWxlCi0rKysgYi9yZWdyZXNzL01h a2VmaWxlCi1AQCAtMTM5LDcgKzEzOSw4IEBAIENMRUFORklMRVM9CSouY29yZSBhY3R1YWwgYWdl bnQta2V5LiogYXV0aG9yaXplZF9rZXlzXyR7VVNFUk5BTUV9IFwKLSAJCWtub3duX2hvc3RzIGtu b3duX2hvc3RzLWNlcnQga25vd25faG9zdHMuKiBrcmwtKiBscy5jb3B5IFwKLSAJCW1vZHBpcGUg bmV0Y2F0IG5vX2lkZW50aXR5X2NvbmZpZyBcCi0gCQlwaWRmaWxlIHB1dHR5LnJzYTIgcmVhZHkg cmVncmVzcy5sb2cgcmVtb3RlX3BpZCBcCi0tCQlyZXZva2VkLSogcnNhIHJzYS1hZ2VudCByc2Et YWdlbnQucHViIHJzYS5wdWIgcnNhX3NzaDJfY3IucHJ2IFwKLSsJCXJldm9rZWQtKiByc2EgcnNh LWFnZW50IHJzYS1hZ2VudC5wdWIgcnNhLWFnZW50LWNlcnQucHViIFwKLSsJCXJzYS5wdWIgcnNh X3NzaDJfY3IucHJ2IHBrY3MxMSouY3J0IHBrY3MxMSoua2V5IHBrY3MxMS5pbmZvIFwKLSAJCXJz YV9zc2gyX2NybmwucHJ2IHNjcC1zc2gtd3JhcHBlci5leGUgXAotIAkJc2NwLXNzaC13cmFwcGVy LnNjcCBzZXR1aWQtYWxsb3dlZCBzZnRwLXNlcnZlci5sb2cgXAotIAkJc2Z0cC1zZXJ2ZXIuc2gg c2Z0cC5sb2cgc3NoLWxvZy13cmFwcGVyLnNoIHNzaC5sb2cgXAotQEAgLTI4OCw2ICsyODksNyBA QCB1bml0IHVuaXQtYmVuY2g6Ci0gCQl0ZXN0ICJ4JHtVTklUVEVTVF9WRVJCT1NFfSIgPSAieCIg fHwgQVJHUz0iJCRBUkdTIC12IjsgXAotIAkJdGVzdCAieCR7VU5JVFRFU1RfQkVOQ0hfREVUQUlM fSIgPSAieCIgfHwgQVJHUz0iJCRBUkdTIC1CIjsgXAotIAkJdGVzdCAieCR7VU5JVFRFU1RfQkVO Q0hfT05MWX0iID0gIngiIHx8IEFSR1M9IiQkQVJHUyAtTyAke1VOSVRURVNUX0JFTkNIX09OTFl9 IjsgXAotKwkJICQkViAkey5PQkpESVJ9L3VuaXR0ZXN0cy9wa2NzMTEvdGVzdF9wa2NzMTEgOyBc Ci0gCQkgJCRWICR7Lk9CSkRJUn0vdW5pdHRlc3RzL3NzaGJ1Zi90ZXN0X3NzaGJ1ZiAkJHtBUkdT fTsgXAotIAkJICQkViAkey5PQkpESVJ9L3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkgXAot IAkJCS1kICR7LkNVUkRJUn0vdW5pdHRlc3RzL3NzaGtleS90ZXN0ZGF0YSAkJHtBUkdTfTsgXAot ZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvcGtjczExLnNoIGIvcmVncmVzcy9wa2NzMTEuc2gKLW5ldyBm aWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAuLmE5MWFlZTk0ZgotLS0tIC9kZXYvbnVs bAotKysrIGIvcmVncmVzcy9wa2NzMTEuc2gKLUBAIC0wLDAgKzEsMzQ5IEBACi0rIwotKyMgIENv cHlyaWdodCAoYykgMjAxNyBSZWQgSGF0Ci0rIwotKyMgIEF1dGhvcnM6IEpha3ViIEplbGVuIDxq amVsZW5AcmVkaGF0LmNvbT4KLSsjCi0rIyAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0rIyAgcHVycG9zZSB3aXRo IG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92 ZQotKyMgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFy IGluIGFsbCBjb3BpZXMuCi0rIwotKyMgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi IEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotKyMgIFdJVEggUkVHQVJE IFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSsj ICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgQkUgTElBQkxFIEZPUgotKyMgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSsjICBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSsj ICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9O LCBBUklTSU5HIE9VVCBPRgotKyMgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBF UkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0rCi0rdGlkPSJwa2NzMTEgdGVzdHMgd2l0aCBz b2Z0IHRva2VuIgotKwotK3RyeV90b2tlbl9saWJzKCkgewotKwlmb3IgX2xpYiBpbiAiJEAiIDsg ZG8KLSsJCWlmIHRlc3QgLWYgIiRfbGliIiA7IHRoZW4KLSsJCQl2ZXJib3NlICJVc2luZyB0b2tl biBsaWJyYXJ5ICRfbGliIgotKwkJCVRFU1RfU1NIX1BLQ1MxMT0iJF9saWIiCi0rCQkJcmV0dXJu Ci0rCQlmaQotKwlkb25lCi0rCWVjaG8gInNraXBwZWQ6IFVuYWJsZSB0byBmaW5kIFBLQ1MjMTEg dG9rZW4gbGlicmFyeSIKLSsJZXhpdCAwCi0rfQotKwotK3RyeV90b2tlbl9saWJzIFwKLSsJL3Vz ci9sb2NhbC9saWIvc29mdGhzbS9saWJzb2Z0aHNtMi5zbyBcCi0rCS91c3IvbGliNjQvcGtjczEx L2xpYnNvZnRoc20yLnNvIFwKLSsJL3Vzci9saWIveDg2XzY0LWxpbnV4LWdudS9zb2Z0aHNtL2xp YnNvZnRoc20yLnNvCi0rCi0rVEVTVF9TU0hfUElOPTEyMzQKLStURVNUX1NTSF9TT1BJTj0xMjM0 NTY3OAotK2lmIFsgIngkVEVTVF9TU0hfU1NIUEtDUzExSEVMUEVSIiAhPSAieCIgXTsgdGhlbgot KwlTU0hfUEtDUzExX0hFTFBFUj0iJHtURVNUX1NTSF9TU0hQS0NTMTFIRUxQRVJ9IgotKwlleHBv cnQgU1NIX1BLQ1MxMV9IRUxQRVIKLStmaQotKwotK3Rlc3QgLWYgIiRURVNUX1NTSF9QS0NTMTEi IHx8IGZhdGFsICIkVEVTVF9TU0hfUEtDUzExIGRvZXMgbm90IGV4aXN0IgotKwotKyMgc2V0dXAg ZW52aXJvbm1lbnQgZm9yIHNvZnRoc20gdG9rZW4KLStESVI9JE9CSi9TT0ZUSFNNCi0rcm0gLXJm ICRESVIKLStUT0tFTj0kRElSL3Rva2VuZGlyCi0rbWtkaXIgLXAgJFRPS0VOCi0rU09GVEhTTTJf Q09ORj0kRElSL3NvZnRoc20yLmNvbmYKLStleHBvcnQgU09GVEhTTTJfQ09ORgotK2NhdCA+ICRT T0ZUSFNNMl9DT05GIDw8IEVPRgotKyMgU29mdEhTTSB2MiBjb25maWd1cmF0aW9uIGZpbGUKLStk aXJlY3Rvcmllcy50b2tlbmRpciA9ICR7VE9LRU59Ci0rb2JqZWN0c3RvcmUuYmFja2VuZCA9IGZp bGUKLSsjIEVSUk9SLCBXQVJOSU5HLCBJTkZPLCBERUJVRwotK2xvZy5sZXZlbCA9IERFQlVHCi0r IyBJZiBDS0ZfUkVNT1ZBQkxFX0RFVklDRSBmbGFnIHNob3VsZCBiZSBzZXQKLStzbG90cy5yZW1v dmFibGUgPSBmYWxzZQotK0VPRgotK291dD0kKHNvZnRoc20yLXV0aWwgLS1pbml0LXRva2VuIC0t ZnJlZSAtLWxhYmVsIHRva2VuLXNsb3QtMCAtLXBpbiAiJFRFU1RfU1NIX1BJTiIgLS1zby1waW4g IiRURVNUX1NTSF9TT1BJTiIpCi0rc2xvdD0kKGVjaG8gLS0gJG91dCB8IHNlZCAncy8uKiAvLycp Ci0rCi0rIyBwcmV2ZW50IHNzaC1hZ2VudCBmcm9tIGNhbGxpbmcgc3NoLWFza3Bhc3MKLStTU0hf QVNLUEFTUz0vdXNyL2Jpbi90cnVlCi0rZXhwb3J0IFNTSF9BU0tQQVNTCi0rdW5zZXQgRElTUExB WQotKyMgV2UgbmVlZCBpbnRlcmFjdGl2ZSBhY2Nlc3MgdG8gdGVzdCBQS0NTIyBzaW5jZSBpdCBw cm9tcHRzIGZvciBQSU4KLStzZWQgLWkgJ3MvLipCYXRjaE1vZGUuKi8vZycgJE9CSi9zc2hfcHJv eHkKLSsKLSsjIHN0YXJ0IGNvbW1hbmQgdy9vIHR0eSwgc28gc3NoIGFjY2VwdHMgcGluIGZyb20g c3RkaW4gKGZyb20gYWdlbnQtcGtjczExLnNoKQotK25vdHR5KCkgewotKwlwZXJsIC1lICd1c2Ug UE9TSVg7IFBPU0lYOjpzZXRzaWQoKTsKLSsJICAgIGlmIChmb3JrKSB7IHdhaXQ7IGV4aXQoJD8g Pj4gOCk7IH0gZWxzZSB7IGV4ZWMoQEFSR1YpIH0nICIkQCIKLSt9Ci0rCi0rdHJhY2UgImdlbmVy YXRpbmcga2V5cyIKLStJRDE9IjAyIgotK0lEMj0iMDQiCi0rUlNBPSR7RElSfS9SU0EKLStFQz0k e0RJUn0vRUMKLStvcGVuc3NsIGdlbnBrZXkgLWFsZ29yaXRobSByc2EgPiAkUlNBCi0rb3BlbnNz bCBwa2NzOCAtbm9jcnlwdCAtaW4gJFJTQSB8XAotKyAgICBzb2Z0aHNtMi11dGlsIC0tc2xvdCAi JHNsb3QiIC0tbGFiZWwgIlNTSCBSU0EgS2V5ICRJRDEiIC0taWQgJElEMSBcCi0rCS0tcGluICIk VEVTVF9TU0hfUElOIiAtLWltcG9ydCAvZGV2L3N0ZGluCi0rb3BlbnNzbCBnZW5wa2V5IFwKLSsg ICAgLWdlbnBhcmFtIFwKLSsgICAgLWFsZ29yaXRobSBlYyBcCi0rICAgIC1wa2V5b3B0IGVjX3Bh cmFtZ2VuX2N1cnZlOnByaW1lMjU2djEgfFwKLSsgICAgb3BlbnNzbCBnZW5wa2V5IFwKLSsgICAg LXBhcmFtZmlsZSAvZGV2L3N0ZGluID4gJEVDCi0rb3BlbnNzbCBwa2NzOCAtbm9jcnlwdCAtaW4g JEVDIHxcCi0rICAgIHNvZnRoc20yLXV0aWwgLS1zbG90ICIkc2xvdCIgLS1sYWJlbCAiU1NIIEVD RFNBIEtleSAkSUQyIiAtLWlkICRJRDIgXAotKwktLXBpbiAiJFRFU1RfU1NIX1BJTiIgLS1pbXBv cnQgL2Rldi9zdGRpbgotKwotK3RyYWNlICJMaXN0IHRoZSBrZXlzIGluIHRoZSBzc2gta2V5Z2Vu IHdpdGggUEtDUyMxMSBVUklzIgotKyR7U1NIS0VZR0VOfSAtRCAke1RFU1RfU1NIX1BLQ1MxMX0g PiAkT0JKL3Rva2VuX2tleXMKLStpZiBbICQ/IC1uZSAwIF07IHRoZW4KLSsJZmFpbCAiRkFJTDog a2V5Z2VuIGZhaWxzIHRvIGVudW1lcmF0ZSBrZXlzIG9uIFBLQ1MjMTEgdG9rZW4iCi0rZmkKLStn cmVwICJwa2NzMTE6IiAkT0JKL3Rva2VuX2tleXMgPiAvZGV2L251bGwKLStpZiBbICQ/IC1uZSAw IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogVGhlIGtleXMgZnJvbSBzc2gta2V5Z2VuIGRvIG5vdCBj b250YWluIFBLQ1MjMTEgVVJJIGFzIGEgY29tbWVudCIKLStmaQotKwotKyMgU2V0IHRoZSBFQ0RT QSBrZXkgdG8gYXV0aG9yaXplZCBrZXlzCi0rZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCi0rCi0rdHJhY2UgIlNpbXBsZSBjb25uZWN0IHdp dGggc3NoICh3aXRob3V0IFBLQ1MjMTEgVVJJKSIKLStlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5v dHR5ICR7U1NIfSAtSSAke1RFU1RfU1NIX1BLQ1MxMX0gXAotKyAgICAtRiAkT0JKL3NzaF9wcm94 eSBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwg IkZBSUw6IHNzaCBjb25uZWN0IHdpdGggcGtjczExIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKLStm aQotKwotK3RyYWNlICJDb25uZWN0IHdpdGggUEtDUyMxMSBVUkkiCi0rdHJhY2UgIiAgKEVDRFNB IGtleSBzaG91bGQgc3VjY2VlZCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NT SH0gLUYgJE9CSi9zc2hfcHJveHkgXAotKyAgICAtaSAicGtjczExOmlkPSUke0lEMn0/bW9kdWxl LXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAk ciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBV UkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rdHJhY2UgIiAgKFJTQSBrZXkgc2hv dWxkIGZhaWwpIgotK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkov c3NoX3Byb3h5IFwKLSsgICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RF U1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRyIC1lcSA1IF07 IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBzdWNjZWVk ZWQgKHNob3VsZCBmYWlsKSIKLStmaQotKwotK3RyYWNlICJDb25uZWN0IHdpdGggUEtDUyMxMSBV UkkgaW5jbHVkaW5nIFBJTiBzaG91bGQgbm90IHByb21wdCIKLSt0cmFjZSAiICAoRUNEU0Ega2V5 IHNob3VsZCBzdWNjZWVkKSIKLSske1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgLWkgXAotKyAgICAi cGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9JnBpbi12YWx1 ZT0ke1RFU1RfU1NIX1BJTn0iIHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRyIC1uZSA1 IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBmYWls ZWQgKGV4aXQgY29kZSAkcikiCi0rZmkKLSsKLSt0cmFjZSAiICAoUlNBIGtleSBzaG91bGQgZmFp bCkiCi0rJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IC1pIFwKLSsgICAgInBrY3MxMTppZD0lJHtJ RDF9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSZwaW4tdmFsdWU9JHtURVNUX1NTSF9Q SU59IiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtZXEgNSBdOyB0aGVuCi0rCWZh aWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgc3VjY2VlZGVkIChzaG91bGQg ZmFpbCkiCi0rZmkKLSsKLSt0cmFjZSAiQ29ubmVjdCB3aXRoIHZhcmlvdXMgZmlsdGVyaW5nIG9w dGlvbnMgaW4gUEtDUyMxMSBVUkkiCi0rdHJhY2UgIiAgKGJ5IG9iamVjdCBsYWJlbCwgRUNEU0Eg c2hvdWxkIHN1Y2NlZWQpIgotK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1G ICRPQkovc3NoX3Byb3h5IFwKLSsgICAgLWkgInBrY3MxMTpvYmplY3Q9U1NIJTIwRUNEU0ElMjBL ZXklMjAwND9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQgNQot K3I9JD8KLStpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qg d2l0aCBQS0NTIzExIFVSSSBmYWlsZWQgKGV4aXQgY29kZSAkcikiCi0rZmkKLSsKLSt0cmFjZSAi ICAoYnkgb2JqZWN0IGxhYmVsLCBSU0Ega2V5IHNob3VsZCBmYWlsKSIKLStlY2hvICR7VEVTVF9T U0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCi0rICAgICAtaSAicGtj czExOm9iamVjdD1TU0glMjBSU0ElMjBLZXklMjAwMj9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BL Q1MxMX0iIHNvbWVob3N0IGV4aXQgNQotK3I9JD8KLStpZiBbICRyIC1lcSA1IF07IHRoZW4KLSsJ ZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBzdWNjZWVkZWQgKHNob3Vs ZCBmYWlsKSIKLStmaQotKwotK3RyYWNlICIgIChieSB0b2tlbiBsYWJlbCwgRUNEU0Ega2V5IHNo b3VsZCBzdWNjZWVkKSIKLStlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAk T0JKL3NzaF9wcm94eSBcCi0rICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQyfTt0b2tlbj10b2tlbi1z bG90LTA/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKLSty PSQ/Ci0raWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdp dGggUEtDUyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rdHJhY2UgIiAg KGJ5IHdyb25nIHRva2VuIGxhYmVsLCBzaG91bGQgZmFpbCkiCi0rZWNobyAke1RFU1RfU1NIX1BJ Tn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAotKyAgICAgLWkgInBrY3MxMTp0 b2tlbj10b2tlbi1zbG90LTk5P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhv c3QgZXhpdCA1Ci0rcj0kPwotK2lmIFsgJHIgLWVxIDUgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBz c2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgotK2Zp Ci0rCi0rCi0rCi0rCi0rdHJhY2UgIlRlc3QgUEtDUyMxMSBVUkkgc3BlY2lmaWNhdGlvbiBpbiBj b25maWd1cmF0aW9uIGZpbGVzIgotK2VjaG8gIklkZW50aXR5RmlsZSBcInBrY3MxMTppZD0lJHtJ RDJ9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfVwiIiBcCi0rICAgID4+ICRPQkovc3No X3Byb3h5Ci0rdHJhY2UgIiAgKEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCi0rZWNobyAke1RF U1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgZXhp dCA1Ci0rcj0kPwotK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgotKwlmYWlsICJGQUlMOiBzc2ggY29u bmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGluIGNvbmZpZyBmYWlsZWQgKGV4aXQgY29kZSAkcikiCi0r ZmkKLSsKLSsjIFNldCB0aGUgUlNBIGtleSBhcyBhdXRob3JpemVkCi0rZ3JlcCAiUlNBIiAkT0JK L3Rva2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgotKwotK3RyYWNlICIgIChS U0Ega2V5IHNob3VsZCBmYWlsKSIKLStlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NI fSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtZXEg NSBdOyB0aGVuCi0rCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgaW4g Y29uZmlnIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgotK2ZpCi0rc2VkIC1pIC1lICIvSWRlbnRp dHlGaWxlL2QiICRPQkovc3NoX3Byb3h5Ci0rCi0rdHJhY2UgIlRlc3QgUEtDUyMxMSBVUkkgc3Bl Y2lmaWNhdGlvbiBpbiBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggYm9ndXMgc3BhY2VzIgotK2Vj aG8gIklkZW50aXR5RmlsZSBcIiAgICBwa2NzMTE6P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtD UzExfSAgICBcIiIgXAotKyAgICA+PiAkT0JKL3NzaF9wcm94eQotK2VjaG8gJHtURVNUX1NTSF9Q SU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0IGV4aXQgNQotK3I9 JD8KLStpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0 aCBQS0NTIzExIFVSSSB3aXRoIGJvZ3VzIHNwYWNlcyBpbiBjb25maWcgZmFpbGVkIiBcCi0rCSAg ICAiKGV4aXQgY29kZSAkcikiCi0rZmkKLStzZWQgLWkgLWUgIi9JZGVudGl0eUZpbGUvZCIgJE9C Si9zc2hfcHJveHkKLSsKLSsKLSt0cmFjZSAiQ29tYmluYXRpb24gb2YgUEtDUzExUHJvdmlkZXIg YW5kIFBLQ1MxMVVSSSBvbiBjb21tYW5kbGluZSIKLSt0cmFjZSAiICAoUlNBIGtleSBzaG91bGQg c3VjY2VlZCkiCi0rZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9z c2hfcHJveHkgXAotKyAgICAtaSAicGtjczExOmlkPSUke0lEMX0iIC1JICR7VEVTVF9TU0hfUEtD UzExfSBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCWZh aWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgYW5kIHByb3ZpZGVyIGNvbWJp bmF0aW9uIiBcCi0rCSAgICAiZmFpbGVkIChleGl0IGNvZGUgJHIpIgotK2ZpCi0rCi0rdHJhY2Ug IlJlZ3Jlc3M6IE1pc3NpbmcgcHJvdmlkZXIgaW4gUEtDUzExVVJJIG9wdGlvbiIKLSske1NTSH0g LUYgJE9CSi9zc2hfcHJveHkgXAotKyAgICAtbyBJZGVudGl0eUZpbGU9XCJwa2NzMTE6dG9rZW49 c2VnZmF1bHRcIiBzb21laG9zdCBleGl0IDUKLStyPSQ/Ci0raWYgWyAkciAtZXEgMTM5IF07IHRo ZW4KLSsJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBtaXNzaW5nIHByb3ZpZGVyX2lkIGZy b20gY29uZmlndXJhdGlvbiBvcHRpb24iIFwKLSsJICAgICJjcmFzaGVkIChleGl0IGNvZGUgJHIp IgotK2ZpCi0rCi0rCi0rdHJhY2UgIlNTSCBBZ2VudCBjYW4gd29yayB3aXRoIFBLQ1MjMTEgVVJJ IgotK3RyYWNlICJzdGFydCB0aGUgYWdlbnQiCi0rZXZhbCBgJHtTU0hBR0VOVH0gLXNgID4gIC9k ZXYvbnVsbAotKwotK3I9JD8KLStpZiBbICRyIC1uZSAwIF07IHRoZW4KLSsJZmFpbCAiY291bGQg bm90IHN0YXJ0IHNzaC1hZ2VudDogZXhpdCBjb2RlICRyIgotK2Vsc2UKLSsJdHJhY2UgImFkZCB3 aG9sZSBwcm92aWRlciB0byBhZ2VudCIKLSsJZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAk e1NTSEFERH0gXAotKwkgICAgInBrY3MxMTo/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9 IiAjPiAvZGV2L251bGwgMj4mMQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDAgXTsgdGhlbgotKwkJ ZmFpbCAiRkFJTDogc3NoLWFkZCBmYWlsZWQgd2l0aCB3aG9sZSBwcm92aWRlcjogZXhpdCBjb2Rl ICRyIgotKwlmaQotKwotKwl0cmFjZSAiIHBrY3MxMSBsaXN0IHZpYSBhZ2VudCAoYWxsIGtleXMp IgotKwkke1NTSEFERH0gLWwgPiAvZGV2L251bGwgMj4mMQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5l IDAgXTsgdGhlbgotKwkJZmFpbCAiRkFJTDogc3NoLWFkZCAtbCBmYWlsZWQgd2l0aCB3aG9sZSBw cm92aWRlcjogZXhpdCBjb2RlICRyIgotKwlmaQotKwotKwl0cmFjZSAiIHBrY3MxMSBjb25uZWN0 IHZpYSBhZ2VudCAoYWxsIGtleXMpIgotKwkke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhv c3QgZXhpdCA1Ci0rCXI9JD8KLSsJaWYgWyAkciAtbmUgNSBdOyB0aGVuCi0rCQlmYWlsICJGQUlM OiBzc2ggY29ubmVjdCBmYWlsZWQgd2l0aCB3aG9sZSBwcm92aWRlciAoZXhpdCBjb2RlICRyKSIK LSsJZmkKLSsKLSsJdHJhY2UgIiByZW1vdmUgcGtjczExIGtleXMgKGFsbCBrZXlzKSIKLSsJJHtT U0hBRER9IC1kICJwa2NzMTE6P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgPiAvZGV2 L251bGwgMj4mMQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDAgXTsgdGhlbgotKwkJZmFpbCAiRkFJ TDogc3NoLWFkZCAtZCBmYWlsZWQgd2l0aCB3aG9sZSBwcm92aWRlcjogZXhpdCBjb2RlICRyIgot KwlmaQotKwotKwl0cmFjZSAiYWRkIG9ubHkgUlNBIGtleSB0byB0aGUgYWdlbnQiCi0rCWVjaG8g JHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0hBRER9IFwKLSsJICAgICJwa2NzMTE6aWQ9JSR7 SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iID4gL2Rldi9udWxsIDI+JjEKLSsJ cj0kPwotKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KLSsJCWZhaWwgIkZBSUwgc3NoLWFkZCBmYWls ZWQgd2l0aCBSU0Ega2V5OiBleGl0IGNvZGUgJHIiCi0rCWZpCi0rCi0rCXRyYWNlICIgcGtjczEx IGNvbm5lY3QgdmlhIGFnZW50IChSU0Ega2V5KSIKLSsJJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5 IHNvbWVob3N0IGV4aXQgNQotKwlyPSQ/Ci0rCWlmIFsgJHIgLW5lIDUgXTsgdGhlbgotKwkJZmFp bCAiRkFJTDogc3NoIGNvbm5lY3QgZmFpbGVkIHdpdGggUlNBIGtleSAoZXhpdCBjb2RlICRyKSIK LSsJZmkKLSsKLSsJdHJhY2UgIiByZW1vdmUgUlNBIHBrY3MxMSBrZXkiCi0rCSR7U1NIQUREfSAt ZCAicGtjczExOmlkPSUke0lEMX0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBcCi0r CSAgICA+IC9kZXYvbnVsbCAyPiYxCi0rCXI9JD8KLSsJaWYgWyAkciAtbmUgMCBdOyB0aGVuCi0r CQlmYWlsICJGQUlMOiBzc2gtYWRkIC1kIGZhaWxlZCB3aXRoIFJTQSBrZXk6IGV4aXQgY29kZSAk ciIKLSsJZmkKLSsKLSsJdHJhY2UgImFkZCBvbmx5IEVDRFNBIGtleSB0byB0aGUgYWdlbnQiCi0r CWVjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0hBRER9IFwKLSsJICAgICJwa2NzMTE6 aWQ9JSR7SUQyfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iID4gL2Rldi9udWxsIDI+ JjEKLSsJcj0kPwotKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KLSsJCWZhaWwgIkZBSUw6IHNzaC1h ZGQgZmFpbGVkIHdpdGggc2Vjb25kIGtleTogZXhpdCBjb2RlICRyIgotKwlmaQotKwotKwl0cmFj ZSAiIHBrY3MxMSBjb25uZWN0IHZpYSBhZ2VudCAoRUNEU0Ega2V5IHNob3VsZCBmYWlsKSIKLSsJ JHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0IGV4aXQgNQotKwlyPSQ/Ci0rCWlmIFsg JHIgLWVxIDUgXTsgdGhlbgotKwkJZmFpbCAiRkFJTDogc3NoIGNvbm5lY3QgcGFzc2VkIHdpdGgg RUNEU0Ega2V5IChzaG91bGQgZmFpbCkiCi0rCWZpCi0rCi0rCXRyYWNlICJhZGQgYWxzbyB0aGUg UlNBIGtleSB0byB0aGUgYWdlbnQiCi0rCWVjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtT U0hBRER9IFwKLSsJICAgICJwa2NzMTE6aWQ9JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NI X1BLQ1MxMX0iID4gL2Rldi9udWxsIDI+JjEKLSsJcj0kPwotKwlpZiBbICRyIC1uZSAwIF07IHRo ZW4KLSsJCWZhaWwgIkZBSUw6IHNzaC1hZGQgZmFpbGVkIHdpdGggZmlyc3Qga2V5OiBleGl0IGNv ZGUgJHIiCi0rCWZpCi0rCi0rCXRyYWNlICIgcmVtb3ZlIEVDRFNBIHBrY3MxMSBrZXkiCi0rCSR7 U1NIQUREfSAtZCAicGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NT MTF9IiBcCi0rCSAgICA+IC9kZXYvbnVsbCAyPiYxCi0rCXI9JD8KLSsJaWYgWyAkciAtbmUgMCBd OyB0aGVuCi0rCQlmYWlsICJzc2gtYWRkIC1kIGZhaWxlZCB3aXRoIEVDRFNBIGtleTogZXhpdCBj b2RlICRyIgotKwlmaQotKwotKwl0cmFjZSAiIHJlbW92ZSBhbHJlYWR5LXJlbW92ZWQgcGtjczEx IGtleSBzaG91bGQgZmFpbCIKLSsJJHtTU0hBRER9IC1kICJwa2NzMTE6aWQ9JSR7SUQyfT9tb2R1 bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIFwKLSsJICAgID4gL2Rldi9udWxsIDI+JjEKLSsJ cj0kPwotKwlpZiBbICRyIC1lcSAwIF07IHRoZW4KLSsJCWZhaWwgIkZBSUw6IHNzaC1hZGQgLWQg cGFzc2VkIHdpdGggbm9uLWV4aXN0aW5nIGtleSAoc2hvdWxkIGZhaWwpIgotKwlmaQotKwotKwl0 cmFjZSAiIHBrY3MxMSBjb25uZWN0IHZpYSBhZ2VudCAodGhlIFJTQSBrZXkgc2hvdWxkIGJlIHN0 aWxsIHVzYWJsZSkiCi0rCSR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUK LSsJcj0kPwotKwlpZiBbICRyIC1uZSA1IF07IHRoZW4KLSsJCWZhaWwgInNzaCBjb25uZWN0IGZh aWxlZCB3aXRoIFJTQSBrZXkgKGFmdGVyIHJlbW92aW5nIEVDRFNBKTogZXhpdCBjb2RlICRyIgot KwlmaQotKwotKwl0cmFjZSAia2lsbCBhZ2VudCIKLSsJJHtTU0hBR0VOVH0gLWsgPiAvZGV2L251 bGwKLStmaQotZGlmZiAtLWdpdCBhL3JlZ3Jlc3MvdW5pdHRlc3RzL01ha2VmaWxlIGIvcmVncmVz cy91bml0dGVzdHMvTWFrZWZpbGUKLWluZGV4IGUzNzA5MDBlNC4uZDZjODljMTI5IDEwMDY0NAot LS0tIGEvcmVncmVzcy91bml0dGVzdHMvTWFrZWZpbGUKLSsrKyBiL3JlZ3Jlc3MvdW5pdHRlc3Rz L01ha2VmaWxlCi1AQCAtMSw2ICsxLDYgQEAKLSAjCSRPcGVuQlNEOiBNYWtlZmlsZSx2IDEuMTMg MjAyMy8wOS8yNCAwODoxNDoxMyBjbGF1ZGlvIEV4cCAkCi0gCi0gU1VCRElSPQl0ZXN0X2hlbHBl ciBzc2hidWYgc3Noa2V5IGJpdG1hcCBrZXggaG9zdGtleXMgdXRmOCBtYXRjaCBjb252ZXJzaW9u Ci0tU1VCRElSKz1hdXRob3B0IG1pc2Mgc3Noc2lnCi0rU1VCRElSKz1hdXRob3B0IG1pc2Mgc3No c2lnIHBrY3MxMQotIAotIC5pbmNsdWRlIDxic2Quc3ViZGlyLm1rPgotZGlmZiAtLWdpdCBhL3Jl Z3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0cy5jIGIvcmVncmVzcy91bml0dGVzdHMvcGtjczEx L3Rlc3RzLmMKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwMDAuLjg5YmE0NWM0 ZQotLS0tIC9kZXYvbnVsbAotKysrIGIvcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLmMK LUBAIC0wLDAgKzEsMzUzIEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTcgUmVkIEhhdAot KyAqCi0rICogQXV0aG9yczogSmFrdWIgSmVsZW4gPGpqZWxlbkByZWRoYXQuY29tPgotKyAqCi0r ICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBz b2Z0d2FyZSBmb3IgYW55Ci0rICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVi eSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotKyAqIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0rICoKLSsg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJ TVMgQUxMIFdBUlJBTlRJRVMKLSsgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xV RElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0rICogTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSsgKiBB TlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9S IEFOWSBEQU1BR0VTCi0rICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwg REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0rICogQUNUSU9OIE9GIENPTlRSQUNULCBO RUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSsgKiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRX QVJFLgotKyAqLwotKwotKyNpbmNsdWRlICJpbmNsdWRlcy5oIgotKwotKyNpbmNsdWRlIDxsb2Nh bGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgIi4uL3Rlc3RfaGVscGVy L3Rlc3RfaGVscGVyLmgiCi0rCi0rI2luY2x1ZGUgInNzaGJ1Zi5oIgotKyNpbmNsdWRlICJzc2gt cGtjczExLXVyaS5oIgotKwotKyNkZWZpbmUgRU1QVFlfVVJJIGNvbXBvc2VfdXJpKE5VTEwsIDAs IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi0rCi0rLyogcHJvdG90 eXBlcyBhcmUgbm90IHB1YmxpYyAtLSBzcGVjaWZ5IHRoZW0gaGVyZSBpbnRlcm5hbGx5IGZvciB0 ZXN0cyAqLwotK3N0cnVjdCBzc2hidWYgKnBlcmNlbnRfZW5jb2RlKGNvbnN0IGNoYXIgKiwgc2l6 ZV90LCBjaGFyICopOwotK2ludCBwZXJjZW50X2RlY29kZShjaGFyICosIGNoYXIgKiopOwotKwot K3ZvaWQKLStjb21wYXJlX3VyaShzdHJ1Y3QgcGtjczExX3VyaSAqYSwgc3RydWN0IHBrY3MxMV91 cmkgKmIpCi0rewotKwlBU1NFUlRfUFRSX05FKGEsIE5VTEwpOwotKwlBU1NFUlRfUFRSX05FKGIs IE5VTEwpOwotKwlBU1NFUlRfU0laRV9UX0VRKGEtPmlkX2xlbiwgYi0+aWRfbGVuKTsKLSsJQVNT RVJUX01FTV9FUShhLT5pZCwgYi0+aWQsIGEtPmlkX2xlbik7Ci0rCWlmIChiLT5vYmplY3QgIT0g TlVMTCkKLSsJCUFTU0VSVF9TVFJJTkdfRVEoYS0+b2JqZWN0LCBiLT5vYmplY3QpOwotKwllbHNl IC8qIGJvdGggc2hvdWxkIGJlIG51bGwgKi8KLSsJCUFTU0VSVF9QVFJfRVEoYS0+b2JqZWN0LCBi LT5vYmplY3QpOwotKwlpZiAoYi0+bW9kdWxlX3BhdGggIT0gTlVMTCkKLSsJCUFTU0VSVF9TVFJJ TkdfRVEoYS0+bW9kdWxlX3BhdGgsIGItPm1vZHVsZV9wYXRoKTsKLSsJZWxzZSAvKiBib3RoIHNo b3VsZCBiZSBudWxsICovCi0rCQlBU1NFUlRfUFRSX0VRKGEtPm1vZHVsZV9wYXRoLCBiLT5tb2R1 bGVfcGF0aCk7Ci0rCWlmIChiLT50b2tlbiAhPSBOVUxMKQotKwkJQVNTRVJUX1NUUklOR19FUShh LT50b2tlbiwgYi0+dG9rZW4pOwotKwllbHNlIC8qIGJvdGggc2hvdWxkIGJlIG51bGwgKi8KLSsJ CUFTU0VSVF9QVFJfRVEoYS0+dG9rZW4sIGItPnRva2VuKTsKLSsJaWYgKGItPm1hbnVmICE9IE5V TEwpCi0rCQlBU1NFUlRfU1RSSU5HX0VRKGEtPm1hbnVmLCBiLT5tYW51Zik7Ci0rCWVsc2UgLyog Ym90aCBzaG91bGQgYmUgbnVsbCAqLwotKwkJQVNTRVJUX1BUUl9FUShhLT5tYW51ZiwgYi0+bWFu dWYpOwotKwlpZiAoYi0+bGliX21hbnVmICE9IE5VTEwpCi0rCQlBU1NFUlRfU1RSSU5HX0VRKGEt PmxpYl9tYW51ZiwgYi0+bGliX21hbnVmKTsKLSsJZWxzZSAvKiBib3RoIHNob3VsZCBiZSBudWxs ICovCi0rCQlBU1NFUlRfUFRSX0VRKGEtPmxpYl9tYW51ZiwgYi0+bGliX21hbnVmKTsKLSsJaWYg KGItPnNlcmlhbCAhPSBOVUxMKQotKwkJQVNTRVJUX1NUUklOR19FUShhLT5zZXJpYWwsIGItPnNl cmlhbCk7Ci0rCWVsc2UgLyogYm90aCBzaG91bGQgYmUgbnVsbCAqLwotKwkJQVNTRVJUX1BUUl9F UShhLT5zZXJpYWwsIGItPnNlcmlhbCk7Ci0rfQotKwotK3ZvaWQKLStjaGVja19wYXJzZV9ydihj aGFyICp1cmksIHN0cnVjdCBwa2NzMTFfdXJpICpleHBlY3QsIGludCBleHBlY3RfcnYpCi0rewot KwljaGFyICpidWYgPSBOVUxMLCAqc3RyOwotKwlzdHJ1Y3QgcGtjczExX3VyaSAqcGtjczExdXJp ID0gTlVMTDsKLSsJaW50IHJ2OwotKwotKwlpZiAoZXhwZWN0X3J2ID09IDApCi0rCQlzdHIgPSAi VmFsaWQiOwotKwllbHNlCi0rCQlzdHIgPSAiSW52YWxpZCI7Ci0rCWFzcHJpbnRmKCZidWYsICIl cyBQS0NTIzExIFVSSSBwYXJzaW5nOiAlcyIsIHN0ciwgdXJpKTsKLSsJVEVTVF9TVEFSVChidWYp OwotKwlmcmVlKGJ1Zik7Ci0rCXBrY3MxMXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOwotKwlydiA9 IHBrY3MxMV91cmlfcGFyc2UodXJpLCBwa2NzMTF1cmkpOwotKwlBU1NFUlRfSU5UX0VRKHJ2LCBl eHBlY3RfcnYpOwotKwlpZiAocnYgPT0gMCkgLyogaW4gY2FzZSBvZiBmYWlsdXJlIHJlc3VsdCBp cyB1bmRlZmluZWQgKi8KLSsJCWNvbXBhcmVfdXJpKHBrY3MxMXVyaSwgZXhwZWN0KTsKLSsJcGtj czExX3VyaV9jbGVhbnVwKHBrY3MxMXVyaSk7Ci0rCWZyZWUoZXhwZWN0KTsKLSsJVEVTVF9ET05F KCk7Ci0rfQotKwotK3ZvaWQKLStjaGVja19wYXJzZShjaGFyICp1cmksIHN0cnVjdCBwa2NzMTFf dXJpICpleHBlY3QpCi0rewotKwljaGVja19wYXJzZV9ydih1cmksIGV4cGVjdCwgMCk7Ci0rfQot KwotK3N0cnVjdCBwa2NzMTFfdXJpICoKLStjb21wb3NlX3VyaSh1bnNpZ25lZCBjaGFyICppZCwg c2l6ZV90IGlkX2xlbiwgY2hhciAqdG9rZW4sIGNoYXIgKmxpYl9tYW51ZiwKLSsgICAgY2hhciAq bWFudWYsIGNoYXIgKnNlcmlhbCwgY2hhciAqbW9kdWxlX3BhdGgsIGNoYXIgKm9iamVjdCwgY2hh ciAqcGluKQotK3sKLSsJc3RydWN0IHBrY3MxMV91cmkgKnVyaSA9IHBrY3MxMV91cmlfaW5pdCgp OwotKwlpZiAoaWRfbGVuID4gMCkgewotKwkJdXJpLT5pZF9sZW4gPSBpZF9sZW47Ci0rCQl1cmkt PmlkID0gaWQ7Ci0rCX0KLSsJdXJpLT5tb2R1bGVfcGF0aCA9IG1vZHVsZV9wYXRoOwotKwl1cmkt PnRva2VuID0gdG9rZW47Ci0rCXVyaS0+bGliX21hbnVmID0gbGliX21hbnVmOwotKwl1cmktPm1h bnVmID0gbWFudWY7Ci0rCXVyaS0+c2VyaWFsID0gc2VyaWFsOwotKwl1cmktPm9iamVjdCA9IG9i amVjdDsKLSsJdXJpLT5waW4gPSBwaW47Ci0rCXJldHVybiB1cmk7Ci0rfQotKwotK3N0YXRpYyB2 b2lkCi0rdGVzdF9wYXJzZV92YWxpZCh2b2lkKQotK3sKLSsJLyogcGF0aCBhcmd1bWVudHMgKi8K LSsJY2hlY2tfcGFyc2UoInBrY3MxMTppZD0lMDEiLAotKwkgICAgY29tcG9zZV91cmkoIlx4MDEi LCAxLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0rCWNoZWNr X3BhcnNlKCJwa2NzMTE6aWQ9JTAwJTAxIiwKLSsJICAgIGNvbXBvc2VfdXJpKCJceDAwXHgwMSIs IDIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKLSsJY2hlY2tf cGFyc2UoInBrY3MxMTp0b2tlbj1TU0glMjBLZXlzIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEws IDAsICJTU0ggS2V5cyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKLSsJ Y2hlY2tfcGFyc2UoInBrY3MxMTpsaWJyYXJ5LW1hbnVmYWN0dXJlcj1PcGVuU0MiLAotKwkgICAg Y29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgIk9wZW5TQyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpKTsKLSsJY2hlY2tfcGFyc2UoInBrY3MxMTptYW51ZmFjdHVyZXI9cGl2X0lJIiwK LSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsICJwaXZfSUkiLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKSk7Ci0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6c2VyaWFsPUlhbVNlcmlh bCIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAiSWFtU2Vy aWFsIiwgTlVMTCwgTlVMTCwgTlVMTCkpOwotKwljaGVja19wYXJzZSgicGtjczExOm9iamVjdD1T SUdOJTIwS2V5IiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsICJTSUdOIEtleSIsIE5VTEwpKTsKLSsJLyogcXVlcnkgYXJndW1lbnRzICov Ci0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6P21vZHVsZS1wYXRoPS91c3IvbGliNjQvcDExLWtpdC1w cm94eS5zbyIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCAiL3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwgTlVMTCwgTlVMTCkpOwotKwljaGVj a19wYXJzZSgicGtjczExOj9waW4tdmFsdWU9MTIzNDU2IiwKLSsJICAgIGNvbXBvc2VfdXJpKE5V TEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICIxMjM0NTYiKSk7Ci0r Ci0rCS8qIGNvbWJpbmF0aW9ucyAqLwotKwkvKiBJRCBTSE9VTEQgYmUgcGVyY2VudCBlbmNvZGVk ICovCi0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6dG9rZW49U1NIJTIwS2V5O2lkPTAiLAotKwkgICAg Y29tcG9zZV91cmkoIjAiLCAxLCAiU1NIIEtleSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpKTsKLSsJY2hlY2tfcGFyc2UoCi0rCSAgICAicGtjczExOm1hbnVmYWN0dXJlcj1D QUM/bW9kdWxlLXBhdGg9L3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwKLSsJICAgIGNvbXBv c2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsICJDQUMiLCBOVUxMLAotKwkgICAgIi91c3IvbGli NjQvcDExLWtpdC1wcm94eS5zbyIsIE5VTEwsIE5VTEwpKTsKLSsJY2hlY2tfcGFyc2UoCi0rCSAg ICAicGtjczExOm9iamVjdD1SU0ElMjBLZXk/bW9kdWxlLXBhdGg9L3Vzci9saWI2NC9wa2NzMTEv b3BlbmNyeXB0b2tpLnNvIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsCi0rCSAgICAiL3Vzci9saWI2NC9wa2NzMTEvb3BlbmNyeXB0b2tpLnNvIiwg IlJTQSBLZXkiLCBOVUxMKSk7Ci0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6P21vZHVsZS1wYXRoPS91 c3IvbGliNjQvcDExLWtpdC1wcm94eS5zbyZwaW4tdmFsdWU9MTIzNDU2IiwKLSsJICAgIGNvbXBv c2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICIvdXNyL2xpYjY0L3AxMS1r aXQtcHJveHkuc28iLCBOVUxMLCAiMTIzNDU2IikpOwotKwotKwkvKiBlbXB0eSBwYXRoIGNvbXBv bmVudCBtYXRjaGVzIGV2ZXJ5dGhpbmcgKi8KLSsJY2hlY2tfcGFyc2UoInBrY3MxMToiLCBFTVBU WV9VUkkpOwotKwotKwkvKiBlbXB0eSBzdHJpbmcgaXMgYSB2YWxpZCB0byBtYXRjaCBhZ2FpbnN0 IChhbmQgZGlmZmVyZW50IGZyb20gTlVMTCkgKi8KLSsJY2hlY2tfcGFyc2UoInBrY3MxMTp0b2tl bj0iLAotKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgIiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpKTsKLSsJLyogUGVyY2VudCBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgcGVy Y2VudC1lbmNvZGVkICovCi0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6dG9rZW49JTI1IiwKLSsJICAg ICBjb21wb3NlX3VyaShOVUxMLCAwLCAiJSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwpKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQKLSt0ZXN0X3BhcnNlX2ludmFsaWQodm9pZCkK LSt7Ci0rCS8qIEludmFsaWQgcGVyY2VudCBlbmNvZGluZyAqLwotKwljaGVja19wYXJzZV9ydigi cGtjczExOmlkPSUwIiwgRU1QVFlfVVJJLCAtMSk7Ci0rCS8qIEludmFsaWQgcGVyY2VudCBlbmNv ZGluZyAqLwotKwljaGVja19wYXJzZV9ydigicGtjczExOmlkPSVaWiIsIEVNUFRZX1VSSSwgLTEp OwotKwkvKiBTcGFjZSBNVVNUIGJlIHBlcmNlbnQgZW5jb2RlZCAtLSBYWFggbm90IGVuZm9yY2Vk IHlldCAqLwotKwljaGVja19wYXJzZSgicGtjczExOnRva2VuPVNTSCBLZXlzIiwKLSsJICAgIGNv bXBvc2VfdXJpKE5VTEwsIDAsICJTU0ggS2V5cyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpKTsKLSsJLyogTVVTVCBOT1QgY29udGFpbiBkdXBsaWNhdGUgYXR0cmlidXRlcyBv ZiB0aGUgc2FtZSBuYW1lICovCi0rCWNoZWNrX3BhcnNlX3J2KCJwa2NzMTE6aWQ9JTAxO2lkPSUw MiIsIEVNUFRZX1VSSSwgLTEpOwotKwkvKiBNVVNUIE5PVCBjb250YWluIGR1cGxpY2F0ZSBhdHRy aWJ1dGVzIG9mIHRoZSBzYW1lIG5hbWUgKi8KLSsJY2hlY2tfcGFyc2VfcnYoInBrY3MxMTo/cGlu LXZhbHVlPTExMTExMSZwaW4tdmFsdWU9MTIzNDU2IiwgRU1QVFlfVVJJLCAtMSk7Ci0rCS8qIFVu cmVjb2duaXplZCBhdHRyaWJ1dGUgaW4gcGF0aCBhcmUgaWdub3JlZCB3aXRoIGxvZyBtZXNzYWdl ICovCi0rCWNoZWNrX3BhcnNlKCJwa2NzMTE6a2V5X25hbWU9U1NIIiwgRU1QVFlfVVJJKTsKLSsJ LyogVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBpbiBxdWVyeSBTSE9VTEQgYmUgaWdub3JlZCAqLwot KwljaGVja19wYXJzZSgicGtjczExOj9rZXlfbmFtZT1TU0giLCBFTVBUWV9VUkkpOwotK30KLSsK LSt2b2lkCi0rY2hlY2tfZ2VuKGNoYXIgKmV4cGVjdCwgc3RydWN0IHBrY3MxMV91cmkgKnVyaSkK LSt7Ci0rCWNoYXIgKmJ1ZiA9IE5VTEwsICp1cmlfc3RyOwotKwotKwlhc3ByaW50ZigmYnVmLCAi VmFsaWQgUEtDUyMxMSBVUkkgZ2VuZXJhdGlvbjogJXMiLCBleHBlY3QpOwotKwlURVNUX1NUQVJU KGJ1Zik7Ci0rCWZyZWUoYnVmKTsKLSsJdXJpX3N0ciA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7Ci0r CUFTU0VSVF9QVFJfTkUodXJpX3N0ciwgTlVMTCk7Ci0rCUFTU0VSVF9TVFJJTkdfRVEodXJpX3N0 ciwgZXhwZWN0KTsKLSsJZnJlZSh1cmlfc3RyKTsKLSsJVEVTVF9ET05FKCk7Ci0rfQotKwotK3N0 YXRpYyB2b2lkCi0rdGVzdF9nZW5lcmF0ZV92YWxpZCh2b2lkKQotK3sKLSsJLyogcGF0aCBhcmd1 bWVudHMgKi8KLSsJY2hlY2tfZ2VuKCJwa2NzMTE6aWQ9JTAxIiwKLSsJICAgIGNvbXBvc2VfdXJp KCJceDAxIiwgMSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOwot KwljaGVja19nZW4oInBrY3MxMTppZD0lMDAlMDEiLAotKwkgICAgY29tcG9zZV91cmkoIlx4MDBc eDAxIiwgMiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOwotKwlj aGVja19nZW4oInBrY3MxMTp0b2tlbj1TU0glMjBLZXlzIiwgLyogc3BhY2UgbXVzdCBiZSBwZXJj ZW50IGVuY29kZWQgKi8KLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsICJTU0ggS2V5cyIsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKLSsJLyogbGlicmFyeS1tYW51ZmFj dHVyZXIgaXMgbm90IGltcGxtZW50ZWQgbm93ICovCi0rCS8qY2hlY2tfZ2VuKCJwa2NzMTE6bGli cmFyeS1tYW51ZmFjdHVyZXI9T3BlblNDIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5V TEwsICJPcGVuU0MiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ki8KLSsJY2hlY2tf Z2VuKCJwa2NzMTE6bWFudWZhY3R1cmVyPXBpdl9JSSIsCi0rCSAgICBjb21wb3NlX3VyaShOVUxM LCAwLCBOVUxMLCBOVUxMLCAicGl2X0lJIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOwotKwlj aGVja19nZW4oInBrY3MxMTpzZXJpYWw9SWFtU2VyaWFsIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5V TEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsICJJYW1TZXJpYWwiLCBOVUxMLCBOVUxMLCBOVUxMKSk7 Ci0rCWNoZWNrX2dlbigicGtjczExOm9iamVjdD1SU0ElMjBLZXkiLAotKwkgICAgY29tcG9zZV91 cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIlJTQSBLZXkiLCBOVUxM KSk7Ci0rCS8qIHF1ZXJ5IGFyZ3VtZW50cyAqLwotKwljaGVja19nZW4oInBrY3MxMTo/bW9kdWxl LXBhdGg9L3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5V TEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICIvdXNyL2xpYjY0L3AxMS1raXQtcHJveHku c28iLCBOVUxMLCBOVUxMKSk7Ci0rCi0rCS8qIGNvbWJpbmF0aW9ucyAqLwotKwljaGVja19nZW4o InBrY3MxMTppZD0lMDI7dG9rZW49U1NIJTIwS2V5cyIsCi0rCSAgICBjb21wb3NlX3VyaSgiXHgw MiIsIDEsICJTU0ggS2V5cyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsK LSsJY2hlY2tfZ2VuKCJwa2NzMTE6aWQ9JUVFJTAyP21vZHVsZS1wYXRoPS91c3IvbGliNjQvcDEx LWtpdC1wcm94eS5zbyIsCi0rCSAgICBjb21wb3NlX3VyaSgiXHhFRVx4MDIiLCAyLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCAiL3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwgTlVMTCwgTlVM TCkpOwotKwljaGVja19nZW4oInBrY3MxMTpvYmplY3Q9RW5jcnlwdGlvbiUyMEtleTttYW51ZmFj dHVyZXI9cGl2X0lJIiwKLSsJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsICJw aXZfSUkiLCBOVUxMLCBOVUxMLCAiRW5jcnlwdGlvbiBLZXkiLCBOVUxMKSk7Ci0rCi0rCS8qIGVt cHR5IHBhdGggY29tcG9uZW50IG1hdGNoZXMgZXZlcnl0aGluZyAqLwotKwljaGVja19nZW4oInBr Y3MxMToiLCBFTVBUWV9VUkkpOwotKwotK30KLSsKLSt2b2lkCi0rY2hlY2tfZW5jb2RlKGNoYXIg KnNvdXJjZSwgc2l6ZV90IGxlbiwgY2hhciAqYWxsb3dfbGlzdCwgY2hhciAqZXhwZWN0KQotK3sK LSsJY2hhciAqYnVmID0gTlVMTDsKLSsJc3RydWN0IHNzaGJ1ZiAqYjsKLSsKLSsJYXNwcmludGYo JmJ1ZiwgInBlcmNlbnRfZW5jb2RlOiBleHBlY3RlZCAlcyIsIGV4cGVjdCk7Ci0rCVRFU1RfU1RB UlQoYnVmKTsKLSsJZnJlZShidWYpOwotKwotKwliID0gcGVyY2VudF9lbmNvZGUoc291cmNlLCBs ZW4sIGFsbG93X2xpc3QpOwotKwlBU1NFUlRfU1RSSU5HX0VRKHNzaGJ1Zl9wdHIoYiksIGV4cGVj dCk7Ci0rCXNzaGJ1Zl9mcmVlKGIpOwotKwlURVNUX0RPTkUoKTsKLSt9Ci0rCi0rc3RhdGljIHZv aWQKLSt0ZXN0X3BlcmNlbnRfZW5jb2RlX211bHRpYnl0ZSh2b2lkKQotK3sKLSsJLyogU0hPVUxE IGJlIGVuY29kZWQgYXMgb2N0ZXRzIGFjY29yZGluZyB0byB0aGUgVVRGLTggY2hhcmFjdGVyIGVu Y29kaW5nICovCi0rCi0rCS8qIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgImZvciBmcmVlIiAq LwotKwljaGVja19lbmNvZGUoIiQiLCAxLCAiIiwgIiUyNCIpOwotKwljaGVja19lbmNvZGUoIsKi IiwgMiwgIiIsICIlQzIlQTIiKTsKLSsJY2hlY2tfZW5jb2RlKCLigqwiLCAzLCAiIiwgIiVFMiU4 MiVBQyIpOwotKwljaGVja19lbmNvZGUoIvCQjYgiLCA0LCAiIiwgIiVGMCU5MCU4RCU4OCIpOwot KwotKwkvKiBDS19VVEY4Q0hBUiBpcyB1bnNpZ25lZCBjaGFyICgxIGJ5dGUpICovCi0rCS8qIGxh YmVscyBTSE9VTEQgYmUgbm9ybWFsaXplZCB0byBORkMgW1VBWDE1XSAqLwotKwotK30KLSsKLStz dGF0aWMgdm9pZAotK3Rlc3RfcGVyY2VudF9lbmNvZGUodm9pZCkKLSt7Ci0rCS8qIFdpdGhvdXQg YWxsb3cgbGlzdCBlbmNvZGVzIGV2ZXJ5dGhpbmcgKGZvciBDS0FfSUQpICovCi0rCWNoZWNrX2Vu Y29kZSgiQSoiLCAyLCAiIiwgIiU0MSUyQSIpOwotKwljaGVja19lbmNvZGUoIlx4MDAiLCAxLCAi IiwgIiUwMCIpOwotKwljaGVja19lbmNvZGUoIlx4N0YiLCAxLCAiIiwgIiU3RiIpOwotKwljaGVj a19lbmNvZGUoIlx4ODAiLCAxLCAiIiwgIiU4MCIpOwotKwljaGVja19lbmNvZGUoIlx4ZmYiLCAx LCAiIiwgIiVGRiIpOwotKwotKwkvKiBEZWZhdWx0IGFsbG93IGxpc3QgZW5jb2RlcyBhbnl0aGlu ZyBidXQgc2FmZSBsZXR0ZXJzICovCi0rCWNoZWNrX2VuY29kZSgidGVzdCIgIlx4MDAiICIwYWxw aGEiLCAxMSwgUEtDUzExX1VSSV9XSElURUxJU1QsCi0rCSAgICAidGVzdCUwMDBhbHBoYSIpOwot KwljaGVja19lbmNvZGUoIiAiLCAxLCBQS0NTMTFfVVJJX1dISVRFTElTVCwKLSsJICAgICIlMjAi KTsgLyogU3BhY2UgTVVTVCBiZSBwZXJjZW50IGVuY29kZWQgKi8KLSsJY2hlY2tfZW5jb2RlKCIv IiwgMSwgUEtDUzExX1VSSV9XSElURUxJU1QsCi0rCSAgICAiJTJGIik7IC8qICcvJyBkZWxpbWl0 ZXIgTVVTVCBiZSBwZXJjZW50IGVuY29kZWQgKGluIHRoZSBwYXRoKSAqLwotKwljaGVja19lbmNv ZGUoIj8iLCAxLCBQS0NTMTFfVVJJX1dISVRFTElTVCwKLSsJICAgICIlM0YiKTsgLyogZGVsaW1p dGVyICc/JyBNVVNUIGJlIHBlcmNlbnQgZW5jb2RlZCAoaW4gdGhlIHBhdGgpICovCi0rCWNoZWNr X2VuY29kZSgiIyIsIDEsIFBLQ1MxMV9VUklfV0hJVEVMSVNULAotKwkgICAgIiUyMyIpOyAvKiAn IycgTVVTVCBiZSBhbHdheXMgcGVyY2VudCBlbmNvZGVkICovCi0rCWNoZWNrX2VuY29kZSgia2V5 PXZhbHVlO3NlcGFyYXRvcj9xdWVyeSZhbXA7I2FuY2giLCAzNSwgUEtDUzExX1VSSV9XSElURUxJ U1QsCi0rCSAgICAia2V5JTNEdmFsdWUlM0JzZXBhcmF0b3IlM0ZxdWVyeSUyNmFtcCUzQiUyM2Fu Y2giKTsKLSsKLSsJLyogQ29tcG9uZW50cyBpbiBxdWVyeSBjYW4gaGF2ZSAnLycgdW5lbmNvZGVk ICh1c2VmdWwgZm9yIHBhdGhzKSAqLwotKwljaGVja19lbmNvZGUoIi9wYXRoL3RvLmZpbGUiLCAx MywgUEtDUzExX1VSSV9XSElURUxJU1QgIi8iLAotKwkgICAgIi9wYXRoL3RvLmZpbGUiKTsKLSt9 Ci0rCi0rdm9pZAotK2NoZWNrX2RlY29kZShjaGFyICpzb3VyY2UsIGNoYXIgKmV4cGVjdCwgaW50 IGV4cGVjdF9sZW4pCi0rewotKwljaGFyICpidWYgPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsJaW50 IHJ2OwotKwotKwlhc3ByaW50ZigmYnVmLCAicGVyY2VudF9kZWNvZGU6ICVzIiwgc291cmNlKTsK LSsJVEVTVF9TVEFSVChidWYpOwotKwlmcmVlKGJ1Zik7Ci0rCi0rCXJ2ID0gcGVyY2VudF9kZWNv ZGUoc291cmNlLCAmb3V0KTsKLSsJQVNTRVJUX0lOVF9FUShydiwgZXhwZWN0X2xlbik7Ci0rCWlm IChydiA+PSAwKQotKwkJQVNTRVJUX01FTV9FUShvdXQsIGV4cGVjdCwgZXhwZWN0X2xlbik7Ci0r CWZyZWUob3V0KTsKLSsJVEVTVF9ET05FKCk7Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0rdGVzdF9w ZXJjZW50X2RlY29kZSh2b2lkKQotK3sKLSsJLyogc2ltcGxlIHZhbGlkIGNhc2VzICovCi0rCWNo ZWNrX2RlY29kZSgiJTAwIiwgIlx4MDAiLCAxKTsKLSsJY2hlY2tfZGVjb2RlKCIlRkYiLCAiXHhG RiIsIDEpOwotKwotKwkvKiBub3JtYWwgc3RyaW5ncyBzaG9sZCBiZSBrZXB0IGludGFjdCAqLwot KwljaGVja19kZWNvZGUoInN0cmluZ3MgYXJlIGxlZnQiLCAic3RyaW5ncyBhcmUgbGVmdCIsIDE2 KTsKLSsJY2hlY2tfZGVjb2RlKCIxMCUyNSBvZiB0cmVlcyIsICIxMCUgb2YgdHJlZXMiLCAxMik7 Ci0rCi0rCS8qIG1ha2Ugc3VyZSBubyBtb3JlIHRoYW4gMiBieXRlcyBhcmUgcGFyc2VkICovCi0r CWNoZWNrX2RlY29kZSgiJTIyMiIsICJceDIyIiAiMiIsIDIpOwotKwotKwkvKiBpbnZhbGlkIGV4 cGVjdHMgZmFpbHVyZSAqLwotKwljaGVja19kZWNvZGUoIiUwIiwgIiIsIC0xKTsKLSsJY2hlY2tf ZGVjb2RlKCIlWiIsICIiLCAtMSk7Ci0rCWNoZWNrX2RlY29kZSgiJUZHIiwgIiIsIC0xKTsKLSt9 Ci0rCi0rdm9pZAotK3Rlc3RzKHZvaWQpCi0rewotKwl0ZXN0X3BlcmNlbnRfZW5jb2RlKCk7Ci0r CXRlc3RfcGVyY2VudF9lbmNvZGVfbXVsdGlieXRlKCk7Ci0rCXRlc3RfcGVyY2VudF9kZWNvZGUo KTsKLSsJdGVzdF9wYXJzZV92YWxpZCgpOwotKwl0ZXN0X3BhcnNlX2ludmFsaWQoKTsKLSsJdGVz dF9nZW5lcmF0ZV92YWxpZCgpOwotK30KLSsKLSt2b2lkCi0rYmVuY2htYXJrcyh2b2lkKQotK3sK LSsJcHJpbnRmKCJubyBiZW5jaG1hcmtzXG4iKTsKLSt9Ci0rCi1kaWZmIC0tZ2l0IGEvc3NoLWFk ZC5jIGIvc3NoLWFkZC5jCi1pbmRleCAyZDViZWM4OWMuLmFhZTgyYTc5NCAxMDA2NDQKLS0tLSBh L3NzaC1hZGQuYwotKysrIGIvc3NoLWFkZC5jCi1AQCAtNzAsNiArNzAsNyBAQAotICNpbmNsdWRl ICJzc2gtc2suaCIKLSAjaW5jbHVkZSAic2stYXBpLmgiCi0gI2luY2x1ZGUgImhvc3RmaWxlLmgi Ci0rI2luY2x1ZGUgInNzaC1wa2NzMTEtdXJpLmgiCi0gCi0gI2RlZmluZSBDRVJUX0VYUElSWV9H UkFDRQkoNSo2MCkKLSAKLUBAIC0yNTcsNiArMjU4LDM4IEBAIGNoZWNrX2NlcnRfbGlmZXRpbWUo Y29uc3Qgc3RydWN0IHNzaGtleSAqY2VydCwgaW50IGNlcnRfbGlmZXRpbWUpCi0gCXJldHVybiBN SU5JTVVNKGNlcnRfbGlmZXRpbWUsIChpbnQpbik7Ci0gfQotIAotKyNpZmRlZiBFTkFCTEVfUEtD UzExCi0rc3RhdGljIGludAotK3VwZGF0ZV9jYXJkKGludCBhZ2VudF9mZCwgaW50IGFkZCwgY29u c3QgY2hhciAqaWQsIGludCBxZmxhZywKLSsgICAgaW50IGtleV9vbmx5LCBpbnQgY2VydF9vbmx5 LAotKyAgICBzdHJ1Y3QgZGVzdF9jb25zdHJhaW50ICoqZGVzdF9jb25zdHJhaW50cywgc2l6ZV90 IG5kZXN0X2NvbnN0cmFpbnRzLAotKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqY2VydHMsIHNpemVfdCBu Y2VydHMsIGNoYXIgKnBpbik7Ci0rCi0raW50Ci0rdXBkYXRlX3BrY3MxMV91cmkoaW50IGFnZW50 X2ZkLCBpbnQgYWRkaW5nLCBjb25zdCBjaGFyICpwa2NzMTFfdXJpLCBpbnQgcWZsYWcsCi0rICAg IHN0cnVjdCBkZXN0X2NvbnN0cmFpbnQgKipkZXN0X2NvbnN0cmFpbnRzLCBzaXplX3QgbmRlc3Rf Y29uc3RyYWludHMpCi0rewotKwljaGFyICpwaW4gPSBOVUxMOwotKwlzdHJ1Y3QgcGtjczExX3Vy aSAqdXJpOwotKwotKwkvKiBkcnktcnVuIHBhcnNlIHRvIG1ha2Ugc3VyZSB0aGUgVVJJIGlzIHZh bGlkIGFuZCB0byByZXBvcnQgZXJyb3JzICovCi0rCXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOwot KwlpZiAocGtjczExX3VyaV9wYXJzZSgoY2hhciAqKSBwa2NzMTFfdXJpLCB1cmkpICE9IDApCi0r CQlmYXRhbCgiRmFpbGVkIHRvIHBhcnNlIFBLQ1MjMTEgVVJJIik7Ci0rCWlmICh1cmktPnBpbiAh PSBOVUxMKSB7Ci0rCQlwaW4gPSBzdHJkdXAodXJpLT5waW4pOwotKwkJaWYgKHBpbiA9PSBOVUxM KSB7Ci0rCQkJZmF0YWwoIkZhaWxlZCB0byBkdXBwbGljYXRlIHN0cmluZyIpOwotKwkJfQotKwkJ LyogcGluIGlzIGZyZWVkIGluIHRoZSB1cGRhdGVfY2FyZCgpICovCi0rCX0KLSsJcGtjczExX3Vy aV9jbGVhbnVwKHVyaSk7Ci0rCi0rCXJldHVybiB1cGRhdGVfY2FyZChhZ2VudF9mZCwgYWRkaW5n LCBwa2NzMTFfdXJpLCBxZmxhZywgMSwgMCwKLSsJICAgICAgICAgICBkZXN0X2NvbnN0cmFpbnRz LCBuZGVzdF9jb25zdHJhaW50cywgTlVMTCwgMCwgcGluKTsKLSt9Ci0rI2VuZGlmCi0rCi0gc3Rh dGljIGludAotIGFkZF9maWxlKGludCBhZ2VudF9mZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGlu dCBrZXlfb25seSwgaW50IGNlcnRfb25seSwKLSAgICAgaW50IHFmbGFnLCBpbnQgTmZsYWcsIGNv bnN0IGNoYXIgKnNrcHJvdmlkZXIsCi1AQCAtNDQ3LDE1ICs0ODAsMTQgQEAgc3RhdGljIGludAot IHVwZGF0ZV9jYXJkKGludCBhZ2VudF9mZCwgaW50IGFkZCwgY29uc3QgY2hhciAqaWQsIGludCBx ZmxhZywKLSAgICAgaW50IGtleV9vbmx5LCBpbnQgY2VydF9vbmx5LAotICAgICBzdHJ1Y3QgZGVz dF9jb25zdHJhaW50ICoqZGVzdF9jb25zdHJhaW50cywgc2l6ZV90IG5kZXN0X2NvbnN0cmFpbnRz LAotLSAgICBzdHJ1Y3Qgc3Noa2V5ICoqY2VydHMsIHNpemVfdCBuY2VydHMpCi0rICAgIHN0cnVj dCBzc2hrZXkgKipjZXJ0cywgc2l6ZV90IG5jZXJ0cywgY2hhciAqcGluKQotIHsKLS0JY2hhciAq cGluID0gTlVMTDsKLSAJaW50IHIsIHJldCA9IC0xOwotIAotIAlpZiAoa2V5X29ubHkpCi0gCQlu Y2VydHMgPSAwOwotIAotLQlpZiAoYWRkKSB7Ci0rCWlmIChhZGQgJiYgcGluID09IE5VTEwpIHsK LSAJCWlmICgocGluID0gcmVhZF9wYXNzcGhyYXNlKCJFbnRlciBwYXNzcGhyYXNlIGZvciBQS0NT IzExOiAiLAotIAkJICAgIFJQX0FMTE9XX1NURElOKSkgPT0gTlVMTCkKLSAJCQlyZXR1cm4gLTE7 Ci1AQCAtNjM3LDYgKzY2OSwxNCBAQCBkb19maWxlKGludCBhZ2VudF9mZCwgaW50IGRlbGV0aW5n LCBpbnQga2V5X29ubHksIGludCBjZXJ0X29ubHksCi0gICAgIGNoYXIgKmZpbGUsIGludCBxZmxh ZywgaW50IE5mbGFnLCBjb25zdCBjaGFyICpza3Byb3ZpZGVyLAotICAgICBzdHJ1Y3QgZGVzdF9j b25zdHJhaW50ICoqZGVzdF9jb25zdHJhaW50cywgc2l6ZV90IG5kZXN0X2NvbnN0cmFpbnRzKQot IHsKLSsjaWZkZWYgRU5BQkxFX1BLQ1MxMQotKwlpZiAoc3RybGVuKGZpbGUpID49IHN0cmxlbihQ S0NTMTFfVVJJX1NDSEVNRSkgJiYKLSsJICAgIHN0cm5jbXAoZmlsZSwgUEtDUzExX1VSSV9TQ0hF TUUsCi0rCSAgICBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7Ci0rCQlyZXR1cm4g dXBkYXRlX3BrY3MxMV91cmkoYWdlbnRfZmQsICFkZWxldGluZywgZmlsZSwgcWZsYWcsCi0rICAg ICAgICAgICAgICAgICAgIGRlc3RfY29uc3RyYWludHMsIG5kZXN0X2NvbnN0cmFpbnRzKTsKLSsJ fQotKyNlbmRpZgotIAlpZiAoZGVsZXRpbmcpIHsKLSAJCWlmIChkZWxldGVfZmlsZShhZ2VudF9m ZCwgZmlsZSwga2V5X29ubHksCi0gCQkgICAgY2VydF9vbmx5LCBxZmxhZykgPT0gLTEpCi1AQCAt MTAwOSw3ICsxMDQ5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCQlpZiAodXBk YXRlX2NhcmQoYWdlbnRfZmQsICFkZWxldGluZywgcGtjczExcHJvdmlkZXIsCi0gCQkgICAgcWZs YWcsIGtleV9vbmx5LCBjZXJ0X29ubHksCi0gCQkgICAgZGVzdF9jb25zdHJhaW50cywgbmRlc3Rf Y29uc3RyYWludHMsCi0tCQkgICAgY2VydHMsIG5jZXJ0cykgPT0gLTEpCi0rCQkgICAgY2VydHMs IG5jZXJ0cywgTlVMTCkgPT0gLTEpCi0gCQkJcmV0ID0gMTsKLSAJCWZvciAobiA9IDA7IG4gPCBu Y2VydHM7IG4rKykKLSAJCQlzc2hrZXlfZnJlZShjZXJ0c1tuXSk7Ci1kaWZmIC0tZ2l0IGEvc3No LWFnZW50LmMgYi9zc2gtYWdlbnQuYwotaW5kZXggZGMyNDYwNjZkLi5jM2U5NGUyYjEgMTAwNjQ0 Ci0tLS0gYS9zc2gtYWdlbnQuYwotKysrIGIvc3NoLWFnZW50LmMKLUBAIC0xNTQwLDEwICsxNTQw LDc1IEBAIGFkZF9wMTFfaWRlbnRpdHkoc3RydWN0IHNzaGtleSAqa2V5LCBjaGFyICpjb21tZW50 LCBjb25zdCBjaGFyICpwcm92aWRlciwKLSAJaWR0YWItPm5lbnRyaWVzKys7Ci0gfQotIAotK3N0 YXRpYyBjaGFyICoKLStzYW5pdGl6ZV9wa2NzMTFfcHJvdmlkZXIoY29uc3QgY2hhciAqcHJvdmlk ZXIpCi0rewotKwlzdHJ1Y3QgcGtjczExX3VyaSAqdXJpID0gTlVMTDsKLSsJY2hhciAqc2FuZV91 cmksICptb2R1bGVfcGF0aCA9IE5VTEw7IC8qIGRlZmF1bHQgcGF0aCAqLwotKwljaGFyIGNhbm9u aWNhbF9wcm92aWRlcltQQVRIX01BWF07Ci0rCi0rCWlmIChwcm92aWRlciA9PSBOVUxMKQotKwkJ cmV0dXJuIE5VTEw7Ci0rCi0rCW1lbXNldChjYW5vbmljYWxfcHJvdmlkZXIsIDAsIHNpemVvZihj YW5vbmljYWxfcHJvdmlkZXIpKTsKLSsKLSsJaWYgKHN0cmxlbihwcm92aWRlcikgPj0gc3RybGVu KFBLQ1MxMV9VUklfU0NIRU1FKSAmJgotKwkgICAgc3RybmNtcChwcm92aWRlciwgUEtDUzExX1VS SV9TQ0hFTUUsCi0rCSAgICBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7Ci0rCQkv KiBQS0NTIzExIFVSSSAqLwotKwkJdXJpID0gcGtjczExX3VyaV9pbml0KCk7Ci0rCQlpZiAodXJp ID09IE5VTEwpIHsKLSsJCQllcnJvcigiRmFpbGVkIHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKLSsJ CQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsKLSsJCWlmIChwa2NzMTFfdXJpX3BhcnNlKHByb3ZpZGVy LCB1cmkpICE9IDApIHsKLSsJCQllcnJvcigiRmFpbGVkIHRvIHBhcnNlIFBLQ1MjMTEgVVJJIik7 Ci0rCQkJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7Ci0rCQkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0r CQkvKiB2YWxpZGF0ZSBhbHNvIHByb3ZpZGVyIGZyb20gVVJJICovCi0rCQlpZiAodXJpLT5tb2R1 bGVfcGF0aCkKLSsJCQltb2R1bGVfcGF0aCA9IHN0cmR1cCh1cmktPm1vZHVsZV9wYXRoKTsKLSsJ fSBlbHNlCi0rCQltb2R1bGVfcGF0aCA9IHN0cmR1cChwcm92aWRlcik7IC8qIHNpbXBsZSBwYXRo ICovCi0rCi0rCWlmIChtb2R1bGVfcGF0aCAhPSBOVUxMKSB7IC8qIGRvIG5vdCB2YWxpZGF0ZSBk ZWZhdWx0IE5VTEwgcGF0aCBpbiBVUkkgKi8KLSsJCWlmIChyZWFscGF0aChtb2R1bGVfcGF0aCwg Y2Fub25pY2FsX3Byb3ZpZGVyKSA9PSBOVUxMKSB7Ci0rCQkJdmVyYm9zZSgiZmFpbGVkIFBLQ1Mj MTEgcHJvdmlkZXIgXCIlLjEwMHNcIjogcmVhbHBhdGg6ICVzIiwKLSsJCQkgICAgbW9kdWxlX3Bh dGgsIHN0cmVycm9yKGVycm5vKSk7Ci0rCQkJZnJlZShtb2R1bGVfcGF0aCk7Ci0rCQkJcGtjczEx X3VyaV9jbGVhbnVwKHVyaSk7Ci0rCQkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCQlmcmVlKG1vZHVs ZV9wYXRoKTsKLSsJCWlmIChtYXRjaF9wYXR0ZXJuX2xpc3QoY2Fub25pY2FsX3Byb3ZpZGVyLCBh bGxvd2VkX3Byb3ZpZGVycywgMCkgIT0gMSkgewotKwkJCXZlcmJvc2UoInJlZnVzaW5nIFBLQ1Mj MTEgcHJvdmlkZXIgXCIlLjEwMHNcIjogIgotKwkJCSAgICAibm90IGFsbG93ZWQiLCBjYW5vbmlj YWxfcHJvdmlkZXIpOwotKwkJCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOwotKwkJCXJldHVybiBO VUxMOwotKwkJfQotKwotKwkJLyogY29weSB2ZXJpZmllZCBhbmQgc2FuaXRpemVkIHByb3ZpZGVy IHBhdGggYmFjayB0byB0aGUgdXJpICovCi0rCQlpZiAodXJpKSB7Ci0rCQkJZnJlZSh1cmktPm1v ZHVsZV9wYXRoKTsKLSsJCQl1cmktPm1vZHVsZV9wYXRoID0geHN0cmR1cChjYW5vbmljYWxfcHJv dmlkZXIpOwotKwkJfQotKwl9Ci0rCi0rCWlmICh1cmkpIHsKLSsJCXNhbmVfdXJpID0gcGtjczEx X3VyaV9nZXQodXJpKTsKLSsJCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOwotKwkJcmV0dXJuIHNh bmVfdXJpOwotKwl9IGVsc2UgewotKwkJcmV0dXJuIHhzdHJkdXAoY2Fub25pY2FsX3Byb3ZpZGVy KTsgLyogc2ltcGxlIHBhdGggKi8KLSsJfQotK30KLSsKLSBzdGF0aWMgdm9pZAotIHByb2Nlc3Nf YWRkX3NtYXJ0Y2FyZF9rZXkoU29ja2V0RW50cnkgKmUpCi0gewotLQljaGFyICpwcm92aWRlciA9 IE5VTEwsICpwaW4gPSBOVUxMLCBjYW5vbmljYWxfcHJvdmlkZXJbUEFUSF9NQVhdOwotKwljaGFy ICpwcm92aWRlciA9IE5VTEwsICpwaW4gPSBOVUxMLCAqc2FuZV91cmkgPSBOVUxMOwotIAljaGFy ICoqY29tbWVudHMgPSBOVUxMOwotIAlpbnQgciwgaSwgY291bnQgPSAwLCBzdWNjZXNzID0gMCwg Y29uZmlybSA9IDA7Ci0gCXVfaW50IHNlY29uZHMgPSAwOwotQEAgLTE1NzIsMjUgKzE2MzcsMTgg QEAgcHJvY2Vzc19hZGRfc21hcnRjYXJkX2tleShTb2NrZXRFbnRyeSAqZSkKLSAJCSAgICAicHJv dmlkZXJzIGlzIGRpc2FibGVkIiwgcHJvdmlkZXIpOwotIAkJZ290byBzZW5kOwotIAl9Ci0tCWlm IChyZWFscGF0aChwcm92aWRlciwgY2Fub25pY2FsX3Byb3ZpZGVyKSA9PSBOVUxMKSB7Ci0tCQl2 ZXJib3NlKCJmYWlsZWQgUEtDUyMxMSBhZGQgb2YgXCIlLjEwMHNcIjogcmVhbHBhdGg6ICVzIiwK LS0JCSAgICBwcm92aWRlciwgc3RyZXJyb3IoZXJybm8pKTsKLS0JCWdvdG8gc2VuZDsKLS0JfQot LQlpZiAobWF0Y2hfcGF0dGVybl9saXN0KGNhbm9uaWNhbF9wcm92aWRlciwgYWxsb3dlZF9wcm92 aWRlcnMsIDApICE9IDEpIHsKLS0JCXZlcmJvc2UoInJlZnVzaW5nIFBLQ1MjMTEgYWRkIG9mIFwi JS4xMDBzXCI6ICIKLS0JCSAgICAicHJvdmlkZXIgbm90IGFsbG93ZWQiLCBjYW5vbmljYWxfcHJv dmlkZXIpOwotKwlzYW5lX3VyaSA9IHNhbml0aXplX3BrY3MxMV9wcm92aWRlcihwcm92aWRlcik7 Ci0rCWlmIChzYW5lX3VyaSA9PSBOVUxMKQotIAkJZ290byBzZW5kOwotLQl9Ci0tCWRlYnVnX2Yo ImFkZCAlLjEwMHMiLCBjYW5vbmljYWxfcHJvdmlkZXIpOwotIAlpZiAobGlmZXRpbWUgJiYgIWRl YXRoKQotIAkJZGVhdGggPSBtb25vdGltZSgpICsgbGlmZXRpbWU7Ci0gCi0tCWNvdW50ID0gcGtj czExX2FkZF9wcm92aWRlcihjYW5vbmljYWxfcHJvdmlkZXIsIHBpbiwgJmtleXMsICZjb21tZW50 cyk7Ci0rCWRlYnVnX2YoImFkZCAlLjEwMHMiLCBzYW5lX3VyaSk7Ci0rCWNvdW50ID0gcGtjczEx X2FkZF9wcm92aWRlcihzYW5lX3VyaSwgcGluLCAma2V5cywgJmNvbW1lbnRzKTsKLSAJZm9yIChp ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAJCWlmIChjb21tZW50c1tpXSA9PSBOVUxMIHx8IGNv bW1lbnRzW2ldWzBdID09ICdcMCcpIHsKLSAJCQlmcmVlKGNvbW1lbnRzW2ldKTsKLS0JCQljb21t ZW50c1tpXSA9IHhzdHJkdXAoY2Fub25pY2FsX3Byb3ZpZGVyKTsKLSsJCQljb21tZW50c1tpXSA9 IHhzdHJkdXAoc2FuZV91cmkpOwotIAkJfQotIAkJZm9yIChqID0gMDsgaiA8IG5jZXJ0czsgaisr KSB7Ci0gCQkJaWYgKCFzc2hrZXlfaXNfY2VydChjZXJ0c1tqXSkpCi1AQCAtMTYwMCwxMyArMTY1 OCwxMyBAQCBwcm9jZXNzX2FkZF9zbWFydGNhcmRfa2V5KFNvY2tldEVudHJ5ICplKQotIAkJCWlm IChwa2NzMTFfbWFrZV9jZXJ0KGtleXNbaV0sIGNlcnRzW2pdLCAmaykgIT0gMCkKLSAJCQkJY29u dGludWU7Ci0gCQkJYWRkX3AxMV9pZGVudGl0eShrLCB4c3RyZHVwKGNvbW1lbnRzW2ldKSwKLS0J CQkgICAgY2Fub25pY2FsX3Byb3ZpZGVyLCBkZWF0aCwgY29uZmlybSwKLSsJCQkgICAgc2FuZV91 cmksIGRlYXRoLCBjb25maXJtLAotIAkJCSAgICBkZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25z dHJhaW50cyk7Ci0gCQkJc3VjY2VzcyA9IDE7Ci0gCQl9Ci0gCQlpZiAoIWNlcnRfb25seSAmJiBs b29rdXBfaWRlbnRpdHkoa2V5c1tpXSkgPT0gTlVMTCkgewotIAkJCWFkZF9wMTFfaWRlbnRpdHko a2V5c1tpXSwgY29tbWVudHNbaV0sCi0tCQkJICAgIGNhbm9uaWNhbF9wcm92aWRlciwgZGVhdGgs IGNvbmZpcm0sCi0rCQkJICAgIHNhbmVfdXJpLCBkZWF0aCwgY29uZmlybSwKLSAJCQkgICAgZGVz dF9jb25zdHJhaW50cywgbmRlc3RfY29uc3RyYWludHMpOwotIAkJCWtleXNbaV0gPSBOVUxMOwkJ LyogdHJhbnNmZXJyZWQgKi8KLSAJCQljb21tZW50c1tpXSA9IE5VTEw7CS8qIHRyYW5zZmVycmVk ICovCi1AQCAtMTYxOSw2ICsxNjc3LDcgQEAgcHJvY2Vzc19hZGRfc21hcnRjYXJkX2tleShTb2Nr ZXRFbnRyeSAqZSkKLSBzZW5kOgotIAlmcmVlKHBpbik7Ci0gCWZyZWUocHJvdmlkZXIpOwotKwlm cmVlKHNhbmVfdXJpKTsKLSAJZnJlZShrZXlzKTsKLSAJZnJlZShjb21tZW50cyk7Ci0gCWZyZWVf ZGVzdF9jb25zdHJhaW50cyhkZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25zdHJhaW50cyk7Ci1A QCAtMTYzMSw3ICsxNjkwLDcgQEAgc2VuZDoKLSBzdGF0aWMgdm9pZAotIHByb2Nlc3NfcmVtb3Zl X3NtYXJ0Y2FyZF9rZXkoU29ja2V0RW50cnkgKmUpCi0gewotLQljaGFyICpwcm92aWRlciA9IE5V TEwsICpwaW4gPSBOVUxMLCBjYW5vbmljYWxfcHJvdmlkZXJbUEFUSF9NQVhdOwotKwljaGFyICpw cm92aWRlciA9IE5VTEwsICpwaW4gPSBOVUxMLCAqc2FuZV91cmkgPSBOVUxMOwotIAlpbnQgciwg c3VjY2VzcyA9IDA7Ci0gCUlkZW50aXR5ICppZCwgKm54dDsKLSAKLUBAIC0xNjQzLDMwICsxNzAy LDI5IEBAIHByb2Nlc3NfcmVtb3ZlX3NtYXJ0Y2FyZF9rZXkoU29ja2V0RW50cnkgKmUpCi0gCX0K LSAJZnJlZShwaW4pOwotIAotLQlpZiAocmVhbHBhdGgocHJvdmlkZXIsIGNhbm9uaWNhbF9wcm92 aWRlcikgPT0gTlVMTCkgewotLQkJdmVyYm9zZSgiZmFpbGVkIFBLQ1MjMTEgYWRkIG9mIFwiJS4x MDBzXCI6IHJlYWxwYXRoOiAlcyIsCi0tCQkgICAgcHJvdmlkZXIsIHN0cmVycm9yKGVycm5vKSk7 Ci0rCXNhbmVfdXJpID0gc2FuaXRpemVfcGtjczExX3Byb3ZpZGVyKHByb3ZpZGVyKTsKLSsJaWYg KHNhbmVfdXJpID09IE5VTEwpCi0gCQlnb3RvIHNlbmQ7Ci0tCX0KLSAKLS0JZGVidWdfZigicmVt b3ZlICUuMTAwcyIsIGNhbm9uaWNhbF9wcm92aWRlcik7Ci0rCWRlYnVnX2YoInJlbW92ZSAlLjEw MHMiLCBzYW5lX3VyaSk7Ci0gCWZvciAoaWQgPSBUQUlMUV9GSVJTVCgmaWR0YWItPmlkbGlzdCk7 IGlkOyBpZCA9IG54dCkgewotIAkJbnh0ID0gVEFJTFFfTkVYVChpZCwgbmV4dCk7Ci0gCQkvKiBT a2lwIGZpbGUtLWJhc2VkIGtleXMgKi8KLSAJCWlmIChpZC0+cHJvdmlkZXIgPT0gTlVMTCkKLSAJ CQljb250aW51ZTsKLS0JCWlmICghc3RyY21wKGNhbm9uaWNhbF9wcm92aWRlciwgaWQtPnByb3Zp ZGVyKSkgewotKwkJaWYgKCFzdHJjbXAoc2FuZV91cmksIGlkLT5wcm92aWRlcikpIHsKLSAJCQlU QUlMUV9SRU1PVkUoJmlkdGFiLT5pZGxpc3QsIGlkLCBuZXh0KTsKLSAJCQlmcmVlX2lkZW50aXR5 KGlkKTsKLSAJCQlpZHRhYi0+bmVudHJpZXMtLTsKLSAJCX0KLSAJfQotLQlpZiAocGtjczExX2Rl bF9wcm92aWRlcihjYW5vbmljYWxfcHJvdmlkZXIpID09IDApCi0rCWlmIChwa2NzMTFfZGVsX3By b3ZpZGVyKHNhbmVfdXJpKSA9PSAwKQotIAkJc3VjY2VzcyA9IDE7Ci0gCWVsc2UKLSAJCWVycm9y X2YoInBrY3MxMV9kZWxfcHJvdmlkZXIgZmFpbGVkIik7Ci0gc2VuZDoKLSAJZnJlZShwcm92aWRl cik7Ci0rCWZyZWUoc2FuZV91cmkpOwotIAlzZW5kX3N0YXR1cyhlLCBzdWNjZXNzKTsKLSB9Ci0g I2VuZGlmIC8qIEVOQUJMRV9QS0NTMTEgKi8KLWRpZmYgLS1naXQgYS9zc2gta2V5Z2VuLmMgYi9z c2gta2V5Z2VuLmMKLWluZGV4IGFmYTI3OTA5Ny4uN2FmMDhmY2RmIDEwMDY0NAotLS0tIGEvc3No LWtleWdlbi5jCi0rKysgYi9zc2gta2V5Z2VuLmMKLUBAIC04MzEsOCArODMxLDExIEBAIGRvX2Rv d25sb2FkKHN0cnVjdCBwYXNzd2QgKnB3KQotIAkJCWZyZWUoZnApOwotIAkJfSBlbHNlIHsKLSAJ CQkodm9pZCkgc3Noa2V5X3dyaXRlKGtleXNbaV0sIHN0ZG91dCk7IC8qIFhYWCBjaGVjayAqLwot LQkJCWZwcmludGYoc3Rkb3V0LCAiJXMlc1xuIiwKLS0JCQkgICAgKihjb21tZW50c1tpXSkgPT0g J1wwJyA/ICIiIDogIiAiLCBjb21tZW50c1tpXSk7Ci0rCQkJaWYgKCooY29tbWVudHNbaV0pICE9 ICdcMCcpIHsKLSsJCQkJZnByaW50ZihzdGRvdXQsICIgJXMiLCBjb21tZW50c1tpXSk7Ci0rCQkJ fQotKwkJCSh2b2lkKSBwa2NzMTFfdXJpX3dyaXRlKGtleXNbaV0sIHN0ZG91dCk7Ci0rCQkJZnBy aW50ZihzdGRvdXQsICJcbiIpOwotIAkJfQotIAkJZnJlZShjb21tZW50c1tpXSk7Ci0gCQlzc2hr ZXlfZnJlZShrZXlzW2ldKTsKLWRpZmYgLS1naXQgYS9zc2gtcGtjczExLWNsaWVudC5jIGIvc3No LXBrY3MxMS1jbGllbnQuYwotaW5kZXggODVhZmI2MmFjLi43YjdlYWY1MzMgMTAwNjQ0Ci0tLS0g YS9zc2gtcGtjczExLWNsaWVudC5jCi0rKysgYi9zc2gtcGtjczExLWNsaWVudC5jCi1AQCAtMzc4 LDYgKzM3OCwxOSBAQCBwa2NzMTFfc3RhcnRfaGVscGVyKGNvbnN0IGNoYXIgKnBhdGgpCi0gCXJl dHVybiBoZWxwZXI7Ci0gfQotIAotK2ludAotK3BrY3MxMV9hZGRfcHJvdmlkZXJfYnlfdXJpKHN0 cnVjdCBwa2NzMTFfdXJpICp1cmksIGNoYXIgKnBpbiwgc3RydWN0IHNzaGtleSAqKiprZXlwLCBj aGFyICoqKmxhYmVsc3ApCi0rewotKwlpbnQgbmtleXMgPSAwOwotKwljaGFyICpwcm92aWRlcl91 cmkgPSBwa2NzMTFfdXJpX2dldCh1cmkpOwotKwotKwlkZWJ1Z19mKCJjYWxsZWQsIHByb3ZpZGVy X3VyaSA9ICVzIiwgcHJvdmlkZXJfdXJpKTsKLSsKLSsJbmtleXMgPSBwa2NzMTFfYWRkX3Byb3Zp ZGVyKHByb3ZpZGVyX3VyaSwgcGluLCBrZXlwLCBsYWJlbHNwKTsKLSsKLSsJcmV0dXJuIG5rZXlz OwotK30KLSsKLSBpbnQKLSBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKm5hbWUsIGNoYXIgKnBp biwgc3RydWN0IHNzaGtleSAqKiprZXlzcCwKLSAgICAgY2hhciAqKipsYWJlbHNwKQotQEAgLTM4 OSw2ICs0MDMsOCBAQCBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKm5hbWUsIGNoYXIgKnBpbiwg c3RydWN0IHNzaGtleSAqKiprZXlzcCwKLSAJc3RydWN0IHNzaGJ1ZiAqbXNnOwotIAlzdHJ1Y3Qg aGVscGVyICpoZWxwZXI7Ci0gCi0rCWRlYnVnX2YoImNhbGxlZCwgbmFtZSA9ICVzIiwgbmFtZSk7 Ci0rCi0gCWlmICgoaGVscGVyID0gaGVscGVyX2J5X3Byb3ZpZGVyKG5hbWUpKSA9PSBOVUxMICYm Ci0gCSAgICAoaGVscGVyID0gcGtjczExX3N0YXJ0X2hlbHBlcihuYW1lKSkgPT0gTlVMTCkKLSAJ CXJldHVybiAtMTsKLUBAIC00MTMsNiArNDI5LDcgQEAgcGtjczExX2FkZF9wcm92aWRlcihjaGFy ICpuYW1lLCBjaGFyICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsCi0gCQkqa2V5c3AgPSB4 Y2FsbG9jKG5rZXlzLCBzaXplb2Yoc3RydWN0IHNzaGtleSAqKSk7Ci0gCQlpZiAobGFiZWxzcCkK LSAJCQkqbGFiZWxzcCA9IHhjYWxsb2MobmtleXMsIHNpemVvZihjaGFyICopKTsKLSsJCWRlYnVn X2YoIm5rZXlzID0gJXUiLCBua2V5cyk7Ci0gCQlmb3IgKGkgPSAwOyBpIDwgbmtleXM7IGkrKykg ewotIAkJCS8qIFhYWCBjbGVhbiB1cCBwcm9wZXJseSBpbnN0ZWFkIG9mIGZhdGFsKCkgKi8KLSAJ CQlpZiAoKHIgPSBzc2hrZXlfZnJvbXMobXNnLCAmaykpICE9IDAgfHwKLWRpZmYgLS1naXQgYS9z c2gtcGtjczExLXVyaS5jIGIvc3NoLXBrY3MxMS11cmkuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQK LWluZGV4IDAwMDAwMDAwMC4uOGJkOTdlOWUyCi0tLS0gL2Rldi9udWxsCi0rKysgYi9zc2gtcGtj czExLXVyaS5jCi1AQCAtMCwwICsxLDQzNyBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDE3 IFJlZCBIYXQKLSsgKgotKyAqIEF1dGhvcnM6IEpha3ViIEplbGVuIDxqamVsZW5AcmVkaGF0LmNv bT4KLSsgKgotKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmli dXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZl ZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSsgKiBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVz LgotKyAqCi0rICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRI T1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0rICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZU V0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotKyAqIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUg Rk9SCi0rICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyBPUiBBTlkgREFNQUdFUwotKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9T UyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotKyAqIEFDVElPTiBPRiBD T05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VU IE9GCi0rICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0Yg VEhJUyBTT0ZUV0FSRS4KLSsgKi8KLSsKLSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsKLSsjaWZk ZWYgRU5BQkxFX1BLQ1MxMQotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsKLSsjaW5jbHVkZSAic3Noa2V5LmgiCi0rI2luY2x1ZGUgInNzaGJ1Zi5oIgotKyNp bmNsdWRlICJsb2cuaCIKLSsKLSsjZGVmaW5lIENSWVBUT0tJX0NPTVBBVAotKyNpbmNsdWRlICJw a2NzMTEuaCIKLSsKLSsjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKLSsKLSsjZGVmaW5lIFBL Q1MxMV9VUklfUEFUSF9TRVBBUkFUT1IgIjsiCi0rI2RlZmluZSBQS0NTMTFfVVJJX1FVRVJZX1NF UEFSQVRPUiAiJiIKLSsjZGVmaW5lIFBLQ1MxMV9VUklfVkFMVUVfU0VQQVJBVE9SICI9IgotKyNk ZWZpbmUgUEtDUzExX1VSSV9JRCAiaWQiCi0rI2RlZmluZSBQS0NTMTFfVVJJX1RPS0VOICJ0b2tl biIKLSsjZGVmaW5lIFBLQ1MxMV9VUklfT0JKRUNUICJvYmplY3QiCi0rI2RlZmluZSBQS0NTMTFf VVJJX0xJQl9NQU5VRiAibGlicmFyeS1tYW51ZmFjdHVyZXIiCi0rI2RlZmluZSBQS0NTMTFfVVJJ X01BTlVGICJtYW51ZmFjdHVyZXIiCi0rI2RlZmluZSBQS0NTMTFfVVJJX1NFUklBTCAic2VyaWFs IgotKyNkZWZpbmUgUEtDUzExX1VSSV9NT0RVTEVfUEFUSCAibW9kdWxlLXBhdGgiCi0rI2RlZmlu ZSBQS0NTMTFfVVJJX1BJTl9WQUxVRSAicGluLXZhbHVlIgotKwotKy8qIEtleXdvcmQgdG9rZW5z LiAqLwotK3R5cGVkZWYgZW51bSB7Ci0rCXBJZCwgcFRva2VuLCBwT2JqZWN0LCBwTGlicmFyeU1h bnVmYWN0dXJlciwgcE1hbnVmYWN0dXJlciwgcFNlcmlhbCwKLSsJcE1vZHVsZVBhdGgsIHBQaW5W YWx1ZSwgcEJhZE9wdGlvbgotK30gcGtjczExdXJpT3BDb2RlczsKLSsKLSsvKiBUZXh0dWFsIHJl cHJlc2VudGF0aW9uIG9mIHRoZSB0b2tlbnMuICovCi0rc3RhdGljIHN0cnVjdCB7Ci0rCWNvbnN0 IGNoYXIgKm5hbWU7Ci0rCXBrY3MxMXVyaU9wQ29kZXMgb3Bjb2RlOwotK30ga2V5d29yZHNbXSA9 IHsKLSsJeyBQS0NTMTFfVVJJX0lELCBwSWQgfSwKLSsJeyBQS0NTMTFfVVJJX1RPS0VOLCBwVG9r ZW4gfSwKLSsJeyBQS0NTMTFfVVJJX09CSkVDVCwgcE9iamVjdCB9LAotKwl7IFBLQ1MxMV9VUklf TElCX01BTlVGLCBwTGlicmFyeU1hbnVmYWN0dXJlciB9LAotKwl7IFBLQ1MxMV9VUklfTUFOVUYs IHBNYW51ZmFjdHVyZXIgfSwKLSsJeyBQS0NTMTFfVVJJX1NFUklBTCwgcFNlcmlhbCB9LAotKwl7 IFBLQ1MxMV9VUklfTU9EVUxFX1BBVEgsIHBNb2R1bGVQYXRoIH0sCi0rCXsgUEtDUzExX1VSSV9Q SU5fVkFMVUUsIHBQaW5WYWx1ZSB9LAotKwl7IE5VTEwsIHBCYWRPcHRpb24gfQotK307Ci0rCi0r c3RhdGljIHBrY3MxMXVyaU9wQ29kZXMKLStwYXJzZV90b2tlbihjb25zdCBjaGFyICpjcCkKLSt7 Ci0rCXVfaW50IGk7Ci0rCi0rCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldLm5hbWU7IGkrKykKLSsJ CWlmIChzdHJuY2FzZWNtcChjcCwga2V5d29yZHNbaV0ubmFtZSwKLSsJCSAgICBzdHJsZW4oa2V5 d29yZHNbaV0ubmFtZSkpID09IDApCi0rCQkJcmV0dXJuIGtleXdvcmRzW2ldLm9wY29kZTsKLSsK LSsJcmV0dXJuIHBCYWRPcHRpb247Ci0rfQotKwotK2ludAotK3BlcmNlbnRfZGVjb2RlKGNoYXIg KmRhdGEsIGNoYXIgKipvdXRwKQotK3sKLSsJY2hhciB0bXBbM107Ci0rCWNoYXIgKm91dCwgKnRt cF9lbmQ7Ci0rCWNoYXIgKnAgPSBkYXRhOwotKwlsb25nIHZhbHVlOwotKwlzaXplX3Qgb3V0bGVu ID0gMDsKLSsKLSsJb3V0ID0gbWFsbG9jKHN0cmxlbihkYXRhKSsxKTsgLyogdXBwZXIgYm91bmQg Ki8KLSsJaWYgKG91dCA9PSBOVUxMKQotKwkJcmV0dXJuIC0xOwotKwl3aGlsZSAoKnAgIT0gJ1ww JykgewotKwkJc3dpdGNoICgqcCkgewotKwkJY2FzZSAnJSc6Ci0rCQkJcCsrOwotKwkJCWlmICgq cCA9PSAnXDAnKQotKwkJCQlnb3RvIGZhaWw7Ci0rCQkJdG1wWzBdID0gKnArKzsKLSsJCQlpZiAo KnAgPT0gJ1wwJykKLSsJCQkJZ290byBmYWlsOwotKwkJCXRtcFsxXSA9ICpwKys7Ci0rCQkJdG1w WzJdID0gJ1wwJzsKLSsJCQl0bXBfZW5kID0gTlVMTDsKLSsJCQl2YWx1ZSA9IHN0cnRvbCh0bXAs ICZ0bXBfZW5kLCAxNik7Ci0rCQkJaWYgKHRtcF9lbmQgIT0gdG1wKzIpCi0rCQkJCWdvdG8gZmFp bDsKLSsJCQllbHNlCi0rCQkJCW91dFtvdXRsZW4rK10gPSAoY2hhcikgdmFsdWU7Ci0rCQkJYnJl YWs7Ci0rCQlkZWZhdWx0OgotKwkJCW91dFtvdXRsZW4rK10gPSAqcCsrOwotKwkJCWJyZWFrOwot KwkJfQotKwl9Ci0rCi0rCS8qIHplcm8gdGVybWluYXRlICovCi0rCW91dFtvdXRsZW5dID0gJ1ww JzsKLSsJKm91dHAgPSBvdXQ7Ci0rCXJldHVybiBvdXRsZW47Ci0rZmFpbDoKLSsJZnJlZShvdXQp OwotKwlyZXR1cm4gLTE7Ci0rfQotKwotK3N0cnVjdCBzc2hidWYgKgotK3BlcmNlbnRfZW5jb2Rl KGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKmFsbG93X2xpc3Qp Ci0rewotKwlzdHJ1Y3Qgc3NoYnVmICpiID0gTlVMTDsKLSsJY2hhciB0bXBbNF0sICpjcDsKLSsJ c2l6ZV90IGk7Ci0rCi0rCWlmICgoYiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSsJCXJldHVy biBOVUxMOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSsJCWNwID0gc3RyY2hy KGFsbG93X2xpc3QsIGRhdGFbaV0pOwotKwkJLyogaWYgYyBpcyBzcGVjaWZpZWQgYXMgJ1wwJyBw b2ludGVyIHRvIHRlcm1pbmF0b3IgaXMgcmV0dXJuZWQgISEgKi8KLSsJCWlmIChjcCAhPSBOVUxM ICYmICpjcCAhPSAnXDAnKSB7Ci0rCQkJaWYgKHNzaGJ1Zl9wdXQoYiwgJmRhdGFbaV0sIDEpICE9 IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJfSBlbHNlCi0rCQkJaWYgKHNucHJpbnRmKHRtcCwgNCwg IiUlJTAyWCIsICh1bnNpZ25lZCBjaGFyKSBkYXRhW2ldKSA8IDMKLSsJCQkgICAgfHwgc3NoYnVm X3B1dChiLCB0bXAsIDMpICE9IDApCi0rCQkJCWdvdG8gZXJyOwotKwl9Ci0rCWlmIChzc2hidWZf cHV0KGIsICJcMCIsIDEpID09IDApCi0rCQlyZXR1cm4gYjsKLStlcnI6Ci0rCXNzaGJ1Zl9mcmVl KGIpOwotKwlyZXR1cm4gTlVMTDsKLSt9Ci0rCi0rY2hhciAqCi0rcGtjczExX3VyaV9hcHBlbmQo Y2hhciAqcGFydCwgY29uc3QgY2hhciAqc2VwYXJhdG9yLCBjb25zdCBjaGFyICprZXksCi0rICAg IHN0cnVjdCBzc2hidWYgKnZhbHVlKQotK3sKLSsJY2hhciAqbmV3X3BhcnQ7Ci0rCXNpemVfdCBz aXplID0gMDsKLSsKLSsJaWYgKHZhbHVlID09IE5VTEwpCi0rCQlyZXR1cm4gTlVMTDsKLSsKLSsJ c2l6ZSA9IGFzcHJpbnRmKCZuZXdfcGFydCwKLSsJICAgICIlcyVzJXMiICBQS0NTMTFfVVJJX1ZB TFVFX1NFUEFSQVRPUiAiJXMiLAotKwkgICAgKHBhcnQgIT0gTlVMTCA/IHBhcnQgOiAiIiksCi0r CSAgICAocGFydCAhPSBOVUxMID8gc2VwYXJhdG9yIDogIiIpLAotKwkgICAga2V5LCBzc2hidWZf cHRyKHZhbHVlKSk7Ci0rCXNzaGJ1Zl9mcmVlKHZhbHVlKTsKLSsJZnJlZShwYXJ0KTsKLSsKLSsJ aWYgKHNpemUgPD0gMCkKLSsJCXJldHVybiBOVUxMOwotKwlyZXR1cm4gbmV3X3BhcnQ7Ci0rfQot KwotK2NoYXIgKgotK3BrY3MxMV91cmlfZ2V0KHN0cnVjdCBwa2NzMTFfdXJpICp1cmkpCi0rewot KwlzaXplX3Qgc2l6ZSA9IDA7Ci0rCWNoYXIgKnAgPSBOVUxMLCAqcGF0aCA9IE5VTEwsICpxdWVy eSA9IE5VTEw7Ci0rCi0rCS8qIGNvbXBvc2UgYSBwZXJjZW50LWVuY29kZWQgSUQgKi8KLSsJaWYg KHVyaS0+aWRfbGVuID4gMCkgewotKwkJc3RydWN0IHNzaGJ1ZiAqa2V5X2lkID0gcGVyY2VudF9l bmNvZGUodXJpLT5pZCwgdXJpLT5pZF9sZW4sICIiKTsKLSsJCXBhdGggPSBwa2NzMTFfdXJpX2Fw cGVuZChwYXRoLCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLAotKwkJICAgIFBLQ1MxMV9VUklf SUQsIGtleV9pZCk7Ci0rCQlpZiAocGF0aCA9PSBOVUxMKQotKwkJCWdvdG8gZXJyOwotKwl9Ci0r Ci0rCS8qIFdyaXRlIG9iamVjdCBsYWJlbCAqLwotKwlpZiAodXJpLT5vYmplY3QpIHsKLSsJCXN0 cnVjdCBzc2hidWYgKmxhYmVsID0gcGVyY2VudF9lbmNvZGUodXJpLT5vYmplY3QsIHN0cmxlbih1 cmktPm9iamVjdCksCi0rCQkgICAgUEtDUzExX1VSSV9XSElURUxJU1QpOwotKwkJcGF0aCA9IHBr Y3MxMV91cmlfYXBwZW5kKHBhdGgsIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IsCi0rCQkgICAg UEtDUzExX1VSSV9PQkpFQ1QsIGxhYmVsKTsKLSsJCWlmIChwYXRoID09IE5VTEwpCi0rCQkJZ290 byBlcnI7Ci0rCX0KLSsKLSsJLyogV3JpdGUgdG9rZW4gbGFiZWwgKi8KLSsJaWYgKHVyaS0+dG9r ZW4pIHsKLSsJCXN0cnVjdCBzc2hidWYgKmxhYmVsID0gcGVyY2VudF9lbmNvZGUodXJpLT50b2tl biwgc3RybGVuKHVyaS0+dG9rZW4pLAotKwkJICAgIFBLQ1MxMV9VUklfV0hJVEVMSVNUKTsKLSsJ CXBhdGggPSBwa2NzMTFfdXJpX2FwcGVuZChwYXRoLCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9S LAotKwkJICAgIFBLQ1MxMV9VUklfVE9LRU4sIGxhYmVsKTsKLSsJCWlmIChwYXRoID09IE5VTEwp Ci0rCQkJZ290byBlcnI7Ci0rCX0KLSsKLSsJLyogV3JpdGUgbWFudWZhY3R1cmVyICovCi0rCWlm ICh1cmktPm1hbnVmKSB7Ci0rCQlzdHJ1Y3Qgc3NoYnVmICptYW51ZiA9IHBlcmNlbnRfZW5jb2Rl KHVyaS0+bWFudWYsCi0rCQkgICAgc3RybGVuKHVyaS0+bWFudWYpLCBQS0NTMTFfVVJJX1dISVRF TElTVCk7Ci0rCQlwYXRoID0gcGtjczExX3VyaV9hcHBlbmQocGF0aCwgUEtDUzExX1VSSV9QQVRI X1NFUEFSQVRPUiwKLSsJCSAgICBQS0NTMTFfVVJJX01BTlVGLCBtYW51Zik7Ci0rCQlpZiAocGF0 aCA9PSBOVUxMKQotKwkJCWdvdG8gZXJyOwotKwl9Ci0rCi0rCS8qIFdyaXRlIHNlcmlhbCAqLwot KwlpZiAodXJpLT5zZXJpYWwpIHsKLSsJCXN0cnVjdCBzc2hidWYgKnNlcmlhbCA9IHBlcmNlbnRf ZW5jb2RlKHVyaS0+c2VyaWFsLAotKwkJICAgIHN0cmxlbih1cmktPnNlcmlhbCksIFBLQ1MxMV9V UklfV0hJVEVMSVNUKTsKLSsJCXBhdGggPSBwa2NzMTFfdXJpX2FwcGVuZChwYXRoLCBQS0NTMTFf VVJJX1BBVEhfU0VQQVJBVE9SLAotKwkJICAgIFBLQ1MxMV9VUklfU0VSSUFMLCBzZXJpYWwpOwot KwkJaWYgKHBhdGggPT0gTlVMTCkKLSsJCQlnb3RvIGVycjsKLSsJfQotKwotKwkvKiBXcml0ZSBt b2R1bGVfcGF0aCAqLwotKwlpZiAodXJpLT5tb2R1bGVfcGF0aCkgewotKwkJc3RydWN0IHNzaGJ1 ZiAqbW9kdWxlID0gcGVyY2VudF9lbmNvZGUodXJpLT5tb2R1bGVfcGF0aCwKLSsJCSAgICBzdHJs ZW4odXJpLT5tb2R1bGVfcGF0aCksIFBLQ1MxMV9VUklfV0hJVEVMSVNUICIvIik7Ci0rCQlxdWVy eSA9IHBrY3MxMV91cmlfYXBwZW5kKHF1ZXJ5LCBQS0NTMTFfVVJJX1FVRVJZX1NFUEFSQVRPUiwK LSsJCSAgICBQS0NTMTFfVVJJX01PRFVMRV9QQVRILCBtb2R1bGUpOwotKwkJaWYgKHF1ZXJ5ID09 IE5VTEwpCi0rCQkJZ290byBlcnI7Ci0rCX0KLSsKLSsJc2l6ZSA9IGFzcHJpbnRmKCZwLCBQS0NT MTFfVVJJX1NDSEVNRSAiJXMlcyVzIiwKLSsJICAgIHBhdGggIT0gTlVMTCA/IHBhdGggOiAiIiwK LSsJICAgIHF1ZXJ5ICE9IE5VTEwgPyAiPyIgOiAiIiwKLSsJICAgIHF1ZXJ5ICE9IE5VTEwgPyBx dWVyeSA6ICIiKTsKLStlcnI6Ci0rCWZyZWUocXVlcnkpOwotKwlmcmVlKHBhdGgpOwotKwlpZiAo c2l6ZSA8PSAwKQotKwkJcmV0dXJuIE5VTEw7Ci0rCXJldHVybiBwOwotK30KLSsKLStzdHJ1Y3Qg cGtjczExX3VyaSAqCi0rcGtjczExX3VyaV9pbml0KCkKLSt7Ci0rCXN0cnVjdCBwa2NzMTFfdXJp ICpkID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcGtjczExX3VyaSkpOwotKwlyZXR1cm4gZDsK LSt9Ci0rCi0rdm9pZAotK3BrY3MxMV91cmlfY2xlYW51cChzdHJ1Y3QgcGtjczExX3VyaSAqcGtj czExKQotK3sKLSsJaWYgKHBrY3MxMSA9PSBOVUxMKSB7Ci0rCQlyZXR1cm47Ci0rCX0KLSsKLSsJ ZnJlZShwa2NzMTEtPmlkKTsKLSsJZnJlZShwa2NzMTEtPm1vZHVsZV9wYXRoKTsKLSsJZnJlZShw a2NzMTEtPnRva2VuKTsKLSsJZnJlZShwa2NzMTEtPm9iamVjdCk7Ci0rCWZyZWUocGtjczExLT5s aWJfbWFudWYpOwotKwlmcmVlKHBrY3MxMS0+bWFudWYpOwotKwlmcmVlKHBrY3MxMS0+c2VyaWFs KTsKLSsJaWYgKHBrY3MxMS0+cGluKQotKwkJZnJlZXplcm8ocGtjczExLT5waW4sIHN0cmxlbihw a2NzMTEtPnBpbikpOwotKwlmcmVlKHBrY3MxMSk7Ci0rfQotKwotK2ludAotK3BrY3MxMV91cmlf cGFyc2UoY29uc3QgY2hhciAqdXJpLCBzdHJ1Y3QgcGtjczExX3VyaSAqcGtjczExKQotK3sKLSsJ Y2hhciAqc2F2ZXB0cjEsICpzYXZlcHRyMiwgKnN0cjEsICpzdHIyLCAqdG9rOwotKwlpbnQgcnYg PSAwLCBsZW47Ci0rCWNoYXIgKnAgPSBOVUxMOwotKwotKwlzaXplX3Qgc2NoZW1lX2xlbiA9IHN0 cmxlbihQS0NTMTFfVVJJX1NDSEVNRSk7Ci0rCWlmIChzdHJsZW4odXJpKSA8IHNjaGVtZV9sZW4g fHwgLyogZW1wdHkgVVJJIG1hdGNoZXMgZXZlcnl0aGluZyAqLwotKwkgICAgc3RybmNtcCh1cmks IFBLQ1MxMV9VUklfU0NIRU1FLCBzY2hlbWVfbGVuKSAhPSAwKSB7Ci0rCQllcnJvcl9mKCJUaGUg JyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgUEtDUyMxMSBVUkkiLCB1cmkpOwotKwkJcmV0dXJuIC0x OwotKwl9Ci0rCi0rCWlmIChwa2NzMTEgPT0gTlVMTCkgewotKwkJZXJyb3JfZigiQmFkIGFyZ3Vt ZW50cy4gVGhlIHBrY3MxMSBjYW4ndCBiZSBudWxsIik7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsK LSsJLyogc2tpcCBVUkkgc2NoZW1hIG5hbWUgKi8KLSsJcCA9IHN0cmR1cCh1cmkpOwotKwlzdHIx ID0gcDsKLSsKLSsJLyogZXZlcnl0aGluZyBiZWZvcmUgPyAqLwotKwl0b2sgPSBzdHJ0b2tfcihz dHIxLCAiPyIsICZzYXZlcHRyMSk7Ci0rCWlmICh0b2sgPT0gTlVMTCkgewotKwkJZXJyb3JfZigi cGsxMS1wYXRoIGV4cGVjdGVkLCBnb3QgRU9GIik7Ci0rCQlydiA9IC0xOwotKwkJZ290byBvdXQ7 Ci0rCX0KLSsKLSsJLyogc2tpcCBVUkkgc2NoZW1hIG5hbWU6Ci0rCSAqIHRoZSBzY2hlbWUgZW5z dXJlcyB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IHNvbWV0aGluZyBiZWZvcmUgIj8iCi0rCSAqIGFs bG93aW5nIGVtcHR5IHBrMTEtcGF0aC4gUmVzdWx0aW5nIHRva2VuIGF0IHdvcnN0IHBvaW50aW5n IHRvCi0rCSAqIFwwIGJ5dGUgKi8KLSsJdG9rID0gdG9rICsgc2NoZW1lX2xlbjsKLSsKLSsJLyog cGFyc2UgcGsxMS1wYXRoICovCi0rCWZvciAoc3RyMiA9IHRvazsgOyBzdHIyID0gTlVMTCkgewot KwkJY2hhciAqKmNoYXJwdHIsICphcmcgPSBOVUxMOwotKwkJcGtjczExdXJpT3BDb2RlcyBvcGNv ZGU7Ci0rCQl0b2sgPSBzdHJ0b2tfcihzdHIyLCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLCAm c2F2ZXB0cjIpOwotKwkJaWYgKHRvayA9PSBOVUxMKQotKwkJCWJyZWFrOwotKwkJb3Bjb2RlID0g cGFyc2VfdG9rZW4odG9rKTsKLSsJCWlmIChvcGNvZGUgIT0gcEJhZE9wdGlvbikKLSsJCQlhcmcg PSB0b2sgKyBzdHJsZW4oa2V5d29yZHNbb3Bjb2RlXS5uYW1lKSArIDE7IC8qIHNlcGFyYXRvciAi PSIgKi8KLSsKLSsJCXN3aXRjaCAob3Bjb2RlKSB7Ci0rCQljYXNlIHBJZDoKLSsJCQkvKiBDS0Ff SUQgKi8KLSsJCQlpZiAocGtjczExLT5pZCAhPSBOVUxMKSB7Ci0rCQkJCXZlcmJvc2VfZigiVGhl IGlkIGFscmVhZHkgc2V0IGluIHRoZSBQS0NTIzExIFVSSSIpOwotKwkJCQlydiA9IC0xOwotKwkJ CQlnb3RvIG91dDsKLSsJCQl9Ci0rCQkJbGVuID0gcGVyY2VudF9kZWNvZGUoYXJnLCAmcGtjczEx LT5pZCk7Ci0rCQkJaWYgKGxlbiA8PSAwKSB7Ci0rCQkJCXZlcmJvc2VfZigiRmFpbGVkIHRvIHBl cmNlbnQtZGVjb2RlIENLQV9JRDogJXMiLCBhcmcpOwotKwkJCQlydiA9IC0xOwotKwkJCQlnb3Rv IG91dDsKLSsJCQl9IGVsc2UKLSsJCQkJcGtjczExLT5pZF9sZW4gPSBsZW47Ci0rCQkJZGVidWcz X2YoIlNldHRpbmcgQ0tBX0lEID0gJXMgZnJvbSBQS0NTIzExIFVSSSIsIGFyZyk7Ci0rCQkJYnJl YWs7Ci0rCQljYXNlIHBUb2tlbjoKLSsJCQkvKiBDS19UT0tFTl9JTkZPIC0+IGxhYmVsICovCi0r CQkJY2hhcnB0ciA9ICZwa2NzMTEtPnRva2VuOwotKyBwYXJzZV9zdHJpbmc6Ci0rCQkJaWYgKCpj aGFycHRyICE9IE5VTEwpIHsKLSsJCQkJdmVyYm9zZV9mKCJUaGUgJXMgYWxyZWFkeSBzZXQgaW4g dGhlIFBLQ1MjMTEgVVJJIiwKLSsJCQkJICAgIGtleXdvcmRzW29wY29kZV0ubmFtZSk7Ci0rCQkJ CXJ2ID0gLTE7Ci0rCQkJCWdvdG8gb3V0OwotKwkJCX0KLSsJCQlwZXJjZW50X2RlY29kZShhcmcs IGNoYXJwdHIpOwotKwkJCWRlYnVnM19mKCJTZXR0aW5nICVzID0gJXMgZnJvbSBQS0NTIzExIFVS SSIsCi0rCQkJICAgIGtleXdvcmRzW29wY29kZV0ubmFtZSwgKmNoYXJwdHIpOwotKwkJCWJyZWFr OwotKwotKwkJY2FzZSBwT2JqZWN0OgotKwkJCS8qIENLX1RPS0VOX0lORk8gLT4gbWFudWZhY3R1 cmVySUQgKi8KLSsJCQljaGFycHRyID0gJnBrY3MxMS0+b2JqZWN0OwotKwkJCWdvdG8gcGFyc2Vf c3RyaW5nOwotKwotKwkJY2FzZSBwTWFudWZhY3R1cmVyOgotKwkJCS8qIENLX1RPS0VOX0lORk8g LT4gbWFudWZhY3R1cmVySUQgKi8KLSsJCQljaGFycHRyID0gJnBrY3MxMS0+bWFudWY7Ci0rCQkJ Z290byBwYXJzZV9zdHJpbmc7Ci0rCi0rCQljYXNlIHBTZXJpYWw6Ci0rCQkJLyogQ0tfVE9LRU5f SU5GTyAtPiBzZXJpYWxOdW1iZXIgKi8KLSsJCQljaGFycHRyID0gJnBrY3MxMS0+c2VyaWFsOwot KwkJCWdvdG8gcGFyc2Vfc3RyaW5nOwotKwotKwkJY2FzZSBwTGlicmFyeU1hbnVmYWN0dXJlcjoK LSsJCQkvKiBDS19JTkZPIC0+IG1hbnVmYWN0dXJlcklEICovCi0rCQkJY2hhcnB0ciA9ICZwa2Nz MTEtPmxpYl9tYW51ZjsKLSsJCQlnb3RvIHBhcnNlX3N0cmluZzsKLSsKLSsJCWRlZmF1bHQ6Ci0r CQkJLyogVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBpbiB0aGUgVVJJIHBhdGggU0hPVUxEIGJlIGVy cm9yICovCi0rCQkJdmVyYm9zZV9mKCJVbmtub3duIHBhcnQgb2YgcGF0aCBpbiBQS0NTIzExIFVS STogJXMiLCB0b2spOwotKwkJfQotKwl9Ci0rCi0rCXRvayA9IHN0cnRva19yKE5VTEwsICI/Iiwg JnNhdmVwdHIxKTsKLSsJaWYgKHRvayA9PSBOVUxMKSB7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwkv KiBwYXJzZSBwazExLXF1ZXJ5IChvcHRpb25hbCkgKi8KLSsJZm9yIChzdHIyID0gdG9rOyA7IHN0 cjIgPSBOVUxMKSB7Ci0rCQljaGFyICphcmc7Ci0rCQlwa2NzMTF1cmlPcENvZGVzIG9wY29kZTsK LSsJCXRvayA9IHN0cnRva19yKHN0cjIsIFBLQ1MxMV9VUklfUVVFUllfU0VQQVJBVE9SLCAmc2F2 ZXB0cjIpOwotKwkJaWYgKHRvayA9PSBOVUxMKQotKwkJCWJyZWFrOwotKwkJb3Bjb2RlID0gcGFy c2VfdG9rZW4odG9rKTsKLSsJCWlmIChvcGNvZGUgIT0gcEJhZE9wdGlvbikKLSsJCQlhcmcgPSB0 b2sgKyBzdHJsZW4oa2V5d29yZHNbb3Bjb2RlXS5uYW1lKSArIDE7IC8qIHNlcGFyYXRvciAiPSIg Ki8KLSsKLSsJCXN3aXRjaCAob3Bjb2RlKSB7Ci0rCQljYXNlIHBNb2R1bGVQYXRoOgotKwkJCS8q IG1vZHVsZS1wYXRoIGlzIFBLQ1MxMVByb3ZpZGVyICovCi0rCQkJaWYgKHBrY3MxMS0+bW9kdWxl X3BhdGggIT0gTlVMTCkgewotKwkJCQl2ZXJib3NlX2YoIk11bHRpcGxlIG1vZHVsZS1wYXRoIGF0 dHJpYnV0ZXMgYXJlIgotKwkJCQkgICAgIm5vdCBzdXBwb3J0ZWQgdGhlIFBLQ1MjMTEgVVJJIik7 Ci0rCQkJCXJ2ID0gLTE7Ci0rCQkJCWdvdG8gb3V0OwotKwkJCX0KLSsJCQlwZXJjZW50X2RlY29k ZShhcmcsICZwa2NzMTEtPm1vZHVsZV9wYXRoKTsKLSsJCQlkZWJ1ZzNfZigiU2V0dGluZyBQS0NT MTFQcm92aWRlciA9ICVzIGZyb20gUEtDUyMxMSBVUkkiLAotKwkJCSAgICBwa2NzMTEtPm1vZHVs ZV9wYXRoKTsKLSsJCQlicmVhazsKLSsKLSsJCWNhc2UgcFBpblZhbHVlOgotKwkJCS8qIHBpbi12 YWx1ZSAqLwotKwkJCWlmIChwa2NzMTEtPnBpbiAhPSBOVUxMKSB7Ci0rCQkJCXZlcmJvc2VfZigi TXVsdGlwbGUgcGluLXZhbHVlIGF0dHJpYnV0ZXMgYXJlIgotKwkJCQkgICAgIm5vdCBzdXBwb3J0 ZWQgdGhlIFBLQ1MjMTEgVVJJIik7Ci0rCQkJCXJ2ID0gLTE7Ci0rCQkJCWdvdG8gb3V0OwotKwkJ CX0KLSsJCQlwZXJjZW50X2RlY29kZShhcmcsICZwa2NzMTEtPnBpbik7Ci0rCQkJZGVidWczX2Yo IlNldHRpbmcgUElOIGZyb20gUEtDUyMxMSBVUkkiKTsKLSsJCQlicmVhazsKLSsKLSsJCWRlZmF1 bHQ6Ci0rCQkJLyogVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBpbiB0aGUgVVJJIHF1ZXJ5IFNIT1VM RCBiZSBpZ25vcmVkICovCi0rCQkJdmVyYm9zZV9mKCJVbmtub3duIHBhcnQgb2YgcXVlcnkgaW4g UEtDUyMxMSBVUkk6ICVzIiwgdG9rKTsKLSsJCX0KLSsJfQotK291dDoKLSsJZnJlZShwKTsKLSsJ cmV0dXJuIHJ2OwotK30KLSsKLSsjZW5kaWYgLyogRU5BQkxFX1BLQ1MxMSAqLwotZGlmZiAtLWdp dCBhL3NzaC1wa2NzMTEtdXJpLmggYi9zc2gtcGtjczExLXVyaS5oCi1uZXcgZmlsZSBtb2RlIDEw MDY0NAotaW5kZXggMDAwMDAwMDAwLi4yOWU5ZjczMjcKLS0tLSAvZGV2L251bGwKLSsrKyBiL3Nz aC1wa2NzMTEtdXJpLmgKLUBAIC0wLDAgKzEsNDMgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykg MjAxNyBSZWQgSGF0Ci0rICoKLSsgKiBBdXRob3JzOiBKYWt1YiBKZWxlbiA8amplbGVuQHJlZGhh dC5jb20+Ci0rICoKLSsgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlz dHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSsgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91 dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0rICogY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNv cGllcy4KLSsgKgotKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUg QVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotKyAqIFdJVEggUkVHQVJEIFRPIFRISVMg U09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSsgKiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElB QkxFIEZPUgotKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSsgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9N IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSsgKiBBQ1RJT04g T0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5H IE9VVCBPRgotKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNF IE9GIFRISVMgU09GVFdBUkUuCi0rICovCi0rCi0rI2RlZmluZSBQS0NTMTFfVVJJX1NDSEVNRSAi cGtjczExOiIKLSsjZGVmaW5lIFBLQ1MxMV9VUklfV0hJVEVMSVNUCSJhYmNkZWZnaGlqa2xtbm9w cXJzdHV2d3h5eiIgXAotKwkJCQkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIFwKLSsJCQkJ IjAxMjM0NTY3ODlfLS4oKSIKLSsKLStzdHJ1Y3QgcGtjczExX3VyaSB7Ci0rCS8qIHBhdGggKi8K LSsJY2hhciAqaWQ7Ci0rCXNpemVfdCBpZF9sZW47Ci0rCWNoYXIgKnRva2VuOwotKwljaGFyICpv YmplY3Q7Ci0rCWNoYXIgKmxpYl9tYW51ZjsKLSsJY2hhciAqbWFudWY7Ci0rCWNoYXIgKnNlcmlh bDsKLSsJLyogcXVlcnkgKi8KLSsJY2hhciAqbW9kdWxlX3BhdGg7Ci0rCWNoYXIgKnBpbjsgLyog T25seSBwYXJzZWQsIGJ1dCBub3QgcHJpbnRlZCAqLwotK307Ci0rCi0rc3RydWN0CSBwa2NzMTFf dXJpICpwa2NzMTFfdXJpX2luaXQoKTsKLSt2b2lkCSBwa2NzMTFfdXJpX2NsZWFudXAoc3RydWN0 IHBrY3MxMV91cmkgKik7Ci0raW50CSBwa2NzMTFfdXJpX3BhcnNlKGNvbnN0IGNoYXIgKiwgc3Ry dWN0IHBrY3MxMV91cmkgKik7Ci0rc3RydWN0CSBwa2NzMTFfdXJpICpwa2NzMTFfdXJpX2luaXQo KTsKLStjaGFyCSpwa2NzMTFfdXJpX2dldChzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKTsKLSsKLWRp ZmYgLS1naXQgYS9zc2gtcGtjczExLmMgYi9zc2gtcGtjczExLmMKLWluZGV4IGM4ODE3OTQ3My4u MWE0NDM4MjRkIDEwMDY0NAotLS0tIGEvc3NoLXBrY3MxMS5jCi0rKysgYi9zc2gtcGtjczExLmMK LUBAIC0zOSw2ICszOSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZWNkc2EuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC94NTA5Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0gI2VuZGlmCi0gCi0gI2RlZmluZSBDUllQVE9LSV9DT01QQVQKLUBA IC01MSw2ICs1Miw3IEBACi0gI2luY2x1ZGUgIm1pc2MuaCIKLSAjaW5jbHVkZSAic3NoYnVmLmgi Ci0gI2luY2x1ZGUgInNzaC1wa2NzMTEuaCIKLSsjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIK LSAjaW5jbHVkZSAiZGlnZXN0LmgiCi0gI2luY2x1ZGUgInhtYWxsb2MuaCIKLSAjaW5jbHVkZSAi Y3J5cHRvX2FwaS5oIgotQEAgLTYxLDggKzYzLDggQEAgc3RydWN0IHBrY3MxMV9zbG90aW5mbyB7 Ci0gCWludAkJCWxvZ2dlZF9pbjsKLSB9OwotIAotLXN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgewot LQljaGFyCQkJKm5hbWU7Ci0rc3RydWN0IHBrY3MxMV9tb2R1bGUgewotKwljaGFyCQkJKm1vZHVs ZV9wYXRoOwotIAl2b2lkCQkJKmhhbmRsZTsKLSAJQ0tfRlVOQ1RJT05fTElTVAkqZnVuY3Rpb25f bGlzdDsKLSAJQ0tfSU5GTwkJCWluZm87Ci1AQCAtNzEsNiArNzMsMTMgQEAgc3RydWN0IHBrY3Mx MV9wcm92aWRlciB7Ci0gCXN0cnVjdCBwa2NzMTFfc2xvdGluZm8JKnNsb3RpbmZvOwotIAlpbnQJ CQl2YWxpZDsKLSAJaW50CQkJcmVmY291bnQ7Ci0rfTsKLSsKLStzdHJ1Y3QgcGtjczExX3Byb3Zp ZGVyIHsKLSsJY2hhcgkJCSpuYW1lOwotKwlzdHJ1Y3QgcGtjczExX21vZHVsZQkqbW9kdWxlOyAv KiBjYW4gYmUgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBwcm92aWRlcnMgKi8KLSsJaW50CQkJcmVm Y291bnQ7Ci0rCWludAkJCXZhbGlkOwotIAlUQUlMUV9FTlRSWShwa2NzMTFfcHJvdmlkZXIpIG5l eHQ7Ci0gfTsKLSAKLUBAIC04Miw2ICs5MSw3IEBAIHN0cnVjdCBwa2NzMTFfa2V5IHsKLSAJQ0tf VUxPTkcJCXNsb3RpZHg7Ci0gCWNoYXIJCQkqa2V5aWQ7Ci0gCWludAkJCWtleWlkX2xlbjsKLSsJ Y2hhcgkJCSpsYWJlbDsKLSAJVEFJTFFfRU5UUlkocGtjczExX2tleSkJbmV4dDsKLSB9OwotIAot QEAgLTEwOCwyNiArMTE4LDYxIEBAIG9zc2xfZXJyb3IoY29uc3QgY2hhciAqbXNnKQotICAqIHRo aXMgaXMgY2FsbGVkIHdoZW4gYSBwcm92aWRlciBnZXRzIHVucmVnaXN0ZXJlZC4KLSAgKi8KLSBz dGF0aWMgdm9pZAotLXBrY3MxMV9wcm92aWRlcl9maW5hbGl6ZShzdHJ1Y3QgcGtjczExX3Byb3Zp ZGVyICpwKQotK3BrY3MxMV9tb2R1bGVfZmluYWxpemUoc3RydWN0IHBrY3MxMV9tb2R1bGUgKm0p Ci0gewotIAlDS19SViBydjsKLSAJQ0tfVUxPTkcgaTsKLSAKLS0JZGVidWdfZigicHJvdmlkZXIg XCIlc1wiIHJlZmNvdW50ICVkIHZhbGlkICVkIiwKLS0JICAgIHAtPm5hbWUsIHAtPnJlZmNvdW50 LCBwLT52YWxpZCk7Ci0tCWlmICghcC0+dmFsaWQpCi0rCWRlYnVnX2YoIiVwIHJlZmNvdW50ICVk IHZhbGlkICVkIiwgbSwgbS0+cmVmY291bnQsIG0tPnZhbGlkKTsKLSsJaWYgKCFtLT52YWxpZCkK LSAJCXJldHVybjsKLS0JZm9yIChpID0gMDsgaSA8IHAtPm5zbG90czsgaSsrKSB7Ci0tCQlpZiAo cC0+c2xvdGluZm9baV0uc2Vzc2lvbiAmJgotLQkJICAgIChydiA9IHAtPmZ1bmN0aW9uX2xpc3Qt PkNfQ2xvc2VTZXNzaW9uKAotLQkJICAgIHAtPnNsb3RpbmZvW2ldLnNlc3Npb24pKSAhPSBDS1Jf T0spCi0rCWZvciAoaSA9IDA7IGkgPCBtLT5uc2xvdHM7IGkrKykgewotKwkJaWYgKG0tPnNsb3Rp bmZvW2ldLnNlc3Npb24gJiYKLSsJCSAgICAocnYgPSBtLT5mdW5jdGlvbl9saXN0LT5DX0Nsb3Nl U2Vzc2lvbigKLSsJCSAgICBtLT5zbG90aW5mb1tpXS5zZXNzaW9uKSkgIT0gQ0tSX09LKQotIAkJ CWVycm9yKCJDX0Nsb3NlU2Vzc2lvbiBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJfQotLQlpZiAoKHJ2 ID0gcC0+ZnVuY3Rpb25fbGlzdC0+Q19GaW5hbGl6ZShOVUxMKSkgIT0gQ0tSX09LKQotKwlpZiAo KHJ2ID0gbS0+ZnVuY3Rpb25fbGlzdC0+Q19GaW5hbGl6ZShOVUxMKSkgIT0gQ0tSX09LKQotIAkJ ZXJyb3IoIkNfRmluYWxpemUgZmFpbGVkOiAlbHUiLCBydik7Ci0rCW0tPnZhbGlkID0gMDsKLSsJ bS0+ZnVuY3Rpb25fbGlzdCA9IE5VTEw7Ci0rCWRsY2xvc2UobS0+aGFuZGxlKTsKLSt9Ci0rCi0r LyoKLSsgKiByZW1vdmUgYSByZWZlcmVuY2UgdG8gdGhlIHBrY3MxMSBtb2R1bGUuCi0rICogY2Fs bGVkIHdoZW4gYSBwcm92aWRlciBpcyB1bnJlZ2lzdGVyZWQuCi0rICovCi0rc3RhdGljIHZvaWQK LStwa2NzMTFfbW9kdWxlX3VucmVmKHN0cnVjdCBwa2NzMTFfbW9kdWxlICptKQotK3sKLSsJZGVi dWdfZigiJXAgcmVmY291bnQgJWQiLCBtLCBtLT5yZWZjb3VudCk7Ci0rCWlmICgtLW0tPnJlZmNv dW50IDw9IDApIHsKLSsJCXBrY3MxMV9tb2R1bGVfZmluYWxpemUobSk7Ci0rCQlpZiAobS0+dmFs aWQpCi0rCQkJZXJyb3JfZigiJXAgc3RpbGwgdmFsaWQiLCBtKTsKLSsJCWZyZWUobS0+c2xvdGxp c3QpOwotKwkJZnJlZShtLT5zbG90aW5mbyk7Ci0rCQlmcmVlKG0tPm1vZHVsZV9wYXRoKTsKLSsJ CWZyZWUobSk7Ci0rCX0KLSt9Ci0rCi0rLyoKLSsgKiBmaW5hbGl6ZSBhIHByb3ZpZGVyIHNoYXJl ZCBsaWJyYXJ5LCBpdCdzIG5vIGxvbmdlciB1c2FibGUuCi0rICogaG93ZXZlciwgdGhlcmUgbWln aHQgc3RpbGwgYmUga2V5cyByZWZlcmVuY2luZyB0aGlzIHByb3ZpZGVyLAotKyAqIHNvIHRoZSBh Y3R1YWwgZnJlZWluZyBvZiBtZW1vcnkgaXMgaGFuZGxlZCBieSBwa2NzMTFfcHJvdmlkZXJfdW5y ZWYoKS4KLSsgKiB0aGlzIGlzIGNhbGxlZCB3aGVuIGEgcHJvdmlkZXIgZ2V0cyB1bnJlZ2lzdGVy ZWQuCi0rICovCi0rc3RhdGljIHZvaWQKLStwa2NzMTFfcHJvdmlkZXJfZmluYWxpemUoc3RydWN0 IHBrY3MxMV9wcm92aWRlciAqcCkKLSt7Ci0rCWRlYnVnX2YoIiVwIHJlZmNvdW50ICVkIHZhbGlk ICVkIiwgcCwgcC0+cmVmY291bnQsIHAtPnZhbGlkKTsKLSsJaWYgKCFwLT52YWxpZCkKLSsJCXJl dHVybjsKLSsJcGtjczExX21vZHVsZV91bnJlZihwLT5tb2R1bGUpOwotKwlwLT5tb2R1bGUgPSBO VUxMOwotIAlwLT52YWxpZCA9IDA7Ci0tCXAtPmZ1bmN0aW9uX2xpc3QgPSBOVUxMOwotLQlkbGNs b3NlKHAtPmhhbmRsZSk7Ci0gfQotIAotIC8qCi1AQCAtMTM5LDE1ICsxODQsMjcgQEAgcGtjczEx X3Byb3ZpZGVyX3VucmVmKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnApCi0gewotIAlkZWJ1Z19m KCJwcm92aWRlciBcIiVzXCIgcmVmY291bnQgJWQiLCBwLT5uYW1lLCBwLT5yZWZjb3VudCk7Ci0g CWlmICgtLXAtPnJlZmNvdW50IDw9IDApIHsKLS0JCWlmIChwLT52YWxpZCkKLS0JCQllcnJvcl9m KCJwcm92aWRlciBcIiVzXCIgc3RpbGwgdmFsaWQiLCBwLT5uYW1lKTsKLSAJCWZyZWUocC0+bmFt ZSk7Ci0tCQlmcmVlKHAtPnNsb3RsaXN0KTsKLS0JCWZyZWUocC0+c2xvdGluZm8pOwotKwkJaWYg KHAtPm1vZHVsZSkKLSsJCQlwa2NzMTFfbW9kdWxlX3VucmVmKHAtPm1vZHVsZSk7Ci0gCQlmcmVl KHApOwotIAl9Ci0gfQotIAotKy8qIGxvb2t1cCBwcm92aWRlciBieSBtb2R1bGUgcGF0aCAqLwot K3N0YXRpYyBzdHJ1Y3QgcGtjczExX21vZHVsZSAqCi0rcGtjczExX3Byb3ZpZGVyX2xvb2t1cF9t b2R1bGUoY2hhciAqbW9kdWxlX3BhdGgpCi0rewotKwlzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpw OwotKwotKwlUQUlMUV9GT1JFQUNIKHAsICZwa2NzMTFfcHJvdmlkZXJzLCBuZXh0KSB7Ci0rCQlk ZWJ1ZygiY2hlY2sgJXAgJXMgKCVzKSIsIHAsIHAtPm5hbWUsIHAtPm1vZHVsZS0+bW9kdWxlX3Bh dGgpOwotKwkJaWYgKCFzdHJjbXAobW9kdWxlX3BhdGgsIHAtPm1vZHVsZS0+bW9kdWxlX3BhdGgp KQotKwkJCXJldHVybiAocC0+bW9kdWxlKTsKLSsJfQotKwlyZXR1cm4gKE5VTEwpOwotK30KLSsK LSAvKiBsb29rdXAgcHJvdmlkZXIgYnkgbmFtZSAqLwotIHN0YXRpYyBzdHJ1Y3QgcGtjczExX3By b3ZpZGVyICoKLSBwa2NzMTFfcHJvdmlkZXJfbG9va3VwKGNoYXIgKnByb3ZpZGVyX2lkKQotQEAg LTE2MiwxOSArMjE5LDU1IEBAIHBrY3MxMV9wcm92aWRlcl9sb29rdXAoY2hhciAqcHJvdmlkZXJf aWQpCi0gCXJldHVybiAoTlVMTCk7Ci0gfQotIAotK2ludCBwa2NzMTFfZGVsX3Byb3ZpZGVyX2J5 X3VyaShzdHJ1Y3QgcGtjczExX3VyaSAqKTsKLSsKLSAvKiB1bnJlZ2lzdGVyIHByb3ZpZGVyIGJ5 IG5hbWUgKi8KLSBpbnQKLSBwa2NzMTFfZGVsX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkKQot K3sKLSsJaW50IHJ2OwotKwlzdHJ1Y3QgcGtjczExX3VyaSAqdXJpOwotKwotKwlkZWJ1Z19mKCJj YWxsZWQsIHByb3ZpZGVyX2lkID0gJXMiLCBwcm92aWRlcl9pZCk7Ci0rCi0rICAgICAgaWYgKHBy b3ZpZGVyX2lkID09IE5VTEwpCi0rICAgICAgICAgIHJldHVybiAwOwotKwotKwl1cmkgPSBwa2Nz MTFfdXJpX2luaXQoKTsKLSsJaWYgKHVyaSA9PSBOVUxMKQotKwkJZmF0YWwoIkZhaWxlZCB0byBp bml0IFBLQ1MjMTEgVVJJIik7Ci0rCi0rCWlmIChzdHJsZW4ocHJvdmlkZXJfaWQpID49IHN0cmxl bihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKLSsJICAgIHN0cm5jbXAocHJvdmlkZXJfaWQsIFBLQ1Mx MV9VUklfU0NIRU1FLCBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7Ci0rCQlpZiAo cGtjczExX3VyaV9wYXJzZShwcm92aWRlcl9pZCwgdXJpKSAhPSAwKQotKwkJCWZhdGFsKCJGYWls ZWQgdG8gcGFyc2UgUEtDUyMxMSBVUkkiKTsKLSsJfSBlbHNlIHsKLSsJCXVyaS0+bW9kdWxlX3Bh dGggPSBzdHJkdXAocHJvdmlkZXJfaWQpOwotKwl9Ci0rCi0rCXJ2ID0gcGtjczExX2RlbF9wcm92 aWRlcl9ieV91cmkodXJpKTsKLSsJcGtjczExX3VyaV9jbGVhbnVwKHVyaSk7Ci0rCXJldHVybiBy djsKLSt9Ci0rCi0rLyogdW5yZWdpc3RlciBwcm92aWRlciBieSBQS0NTIzExIFVSSSAqLwotK2lu dAotK3BrY3MxMV9kZWxfcHJvdmlkZXJfYnlfdXJpKHN0cnVjdCBwa2NzMTFfdXJpICp1cmkpCi0g ewotIAlzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwOwotKwlpbnQgcnYgPSAtMTsKLSsJY2hhciAq cHJvdmlkZXJfdXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsKLSAKLS0JaWYgKChwID0gcGtjczEx X3Byb3ZpZGVyX2xvb2t1cChwcm92aWRlcl9pZCkpICE9IE5VTEwpIHsKLSsJZGVidWczX2YoImNh bGxlZCB3aXRoIHByb3ZpZGVyICVzIiwgcHJvdmlkZXJfdXJpKTsKLSsKLSsJaWYgKChwID0gcGtj czExX3Byb3ZpZGVyX2xvb2t1cChwcm92aWRlcl91cmkpKSAhPSBOVUxMKSB7Ci0gCQlUQUlMUV9S RU1PVkUoJnBrY3MxMV9wcm92aWRlcnMsIHAsIG5leHQpOwotIAkJcGtjczExX3Byb3ZpZGVyX2Zp bmFsaXplKHApOwotIAkJcGtjczExX3Byb3ZpZGVyX3VucmVmKHApOwotLQkJcmV0dXJuICgwKTsK LSsJCXJ2ID0gMDsKLSAJfQotLQlyZXR1cm4gKC0xKTsKLSsJZnJlZShwcm92aWRlcl91cmkpOwot KwlyZXR1cm4gcnY7Ci0gfQotIAotIC8qIHJlbGVhc2UgYSB3cmFwcGVkIG9iamVjdCAqLwotQEAg LTE4Niw2ICsyNzksNyBAQCBwa2NzMTFfazExX2ZyZWUoc3RydWN0IHBrY3MxMV9rZXkgKmsxMSkK LSAJaWYgKGsxMS0+cHJvdmlkZXIpCi0gCQlwa2NzMTFfcHJvdmlkZXJfdW5yZWYoazExLT5wcm92 aWRlcik7Ci0gCWZyZWUoazExLT5rZXlpZCk7Ci0rCWZyZWUoazExLT5sYWJlbCk7Ci0gCXNzaGJ1 Zl9mcmVlKGsxMS0+a2V5YmxvYik7Ci0gCWZyZWUoazExKTsKLSB9Ci1AQCAtMjAxLDggKzI5NSw4 IEBAIHBrY3MxMV9maW5kKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3Rp ZHgsIENLX0FUVFJJQlVURSAqYXR0ciwKLSAJQ0tfUlYJCQlydjsKLSAJaW50CQkJcmV0ID0gLTE7 Ci0gCi0tCWYgPSBwLT5mdW5jdGlvbl9saXN0OwotLQlzZXNzaW9uID0gcC0+c2xvdGluZm9bc2xv dGlkeF0uc2Vzc2lvbjsKLSsJZiA9IHAtPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKLSsJc2Vzc2lv biA9IHAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLSAJaWYgKChydiA9IGYt PkNfRmluZE9iamVjdHNJbml0KHNlc3Npb24sIGF0dHIsIG5hdHRyKSkgIT0gQ0tSX09LKSB7Ci0g CQllcnJvcigiQ19GaW5kT2JqZWN0c0luaXQgZmFpbGVkIChuYXR0ciAlbHUpOiAlbHUiLCBuYXR0 ciwgcnYpOwotIAkJcmV0dXJuICgtMSk7Ci1AQCAtMjM5LDE0ICszMzMsMTQgQEAgcGtjczExX2xv Z2luX3Nsb3Qoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcHJvdmlkZXIsIHN0cnVjdCBwa2NzMTFf c2xvdGluZm8gKnNpLAotIAlpZiAoc2ktPnRva2VuLmZsYWdzICYgQ0tGX1BST1RFQ1RFRF9BVVRI RU5USUNBVElPTl9QQVRIKQotIAkJdmVyYm9zZSgiRGVmZXJyaW5nIFBJTiBlbnRyeSB0byByZWFk ZXIga2V5cGFkLiIpOwotIAllbHNlIHsKLS0JCXNucHJpbnRmKHByb21wdCwgc2l6ZW9mKHByb21w dCksICJFbnRlciBQSU4gZm9yICclcyc6ICIsCi0rCQlzbnByaW50Zihwcm9tcHQsIHNpemVvZihw cm9tcHQpLCAiRW50ZXIgUElOIGZvciAnJS4zMnMnOiAiLAotIAkJICAgIHNpLT50b2tlbi5sYWJl bCk7Ci0tCQlpZiAoKHBpbiA9IHJlYWRfcGFzc3BocmFzZShwcm9tcHQsIFJQX0FMTE9XX0VPRikp ID09IE5VTEwpIHsKLSsJCWlmICgocGluID0gcmVhZF9wYXNzcGhyYXNlKHByb21wdCwgUlBfQUxM T1dfRU9GfFJQX0FMTE9XX1NURElOKSkgPT0gTlVMTCkgewotIAkJCWRlYnVnX2YoIm5vIHBpbiBz cGVjaWZpZWQiKTsKLSAJCQlyZXR1cm4gKC0xKTsJLyogYmFpbCBvdXQgKi8KLSAJCX0KLSAJfQot LQlydiA9IHByb3ZpZGVyLT5mdW5jdGlvbl9saXN0LT5DX0xvZ2luKHNpLT5zZXNzaW9uLCB0eXBl LCAodV9jaGFyICopcGluLAotKwlydiA9IHByb3ZpZGVyLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Qt PkNfTG9naW4oc2ktPnNlc3Npb24sIHR5cGUsICh1X2NoYXIgKilwaW4sCi0gCSAgICAocGluICE9 IE5VTEwpID8gc3RybGVuKHBpbikgOiAwKTsKLSAJaWYgKHBpbiAhPSBOVUxMKQotIAkJZnJlZXpl cm8ocGluLCBzdHJsZW4ocGluKSk7Ci1AQCAtMjc2LDEzICszNzAsMTQgQEAgcGtjczExX2xvZ2lu X3Nsb3Qoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcHJvdmlkZXIsIHN0cnVjdCBwa2NzMTFfc2xv dGluZm8gKnNpLAotIHN0YXRpYyBpbnQKLSBwa2NzMTFfbG9naW4oc3RydWN0IHBrY3MxMV9rZXkg KmsxMSwgQ0tfVVNFUl9UWVBFIHR5cGUpCi0gewotLQlpZiAoazExID09IE5VTEwgfHwgazExLT5w cm92aWRlciA9PSBOVUxMIHx8ICFrMTEtPnByb3ZpZGVyLT52YWxpZCkgewotKwlpZiAoazExID09 IE5VTEwgfHwgazExLT5wcm92aWRlciA9PSBOVUxMIHx8ICFrMTEtPnByb3ZpZGVyLT52YWxpZCB8 fAotKwkgICAgazExLT5wcm92aWRlci0+bW9kdWxlID09IE5VTEwgfHwgIWsxMS0+cHJvdmlkZXIt Pm1vZHVsZS0+dmFsaWQpIHsKLSAJCWVycm9yKCJubyBwa2NzMTEgKHZhbGlkKSBwcm92aWRlciBm b3VuZCIpOwotIAkJcmV0dXJuICgtMSk7Ci0gCX0KLSAKLSAJcmV0dXJuIHBrY3MxMV9sb2dpbl9z bG90KGsxMS0+cHJvdmlkZXIsCi0tCSAgICAmazExLT5wcm92aWRlci0+c2xvdGluZm9bazExLT5z bG90aWR4XSwgdHlwZSk7Ci0rCSAgICAmazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5mb1tr MTEtPnNsb3RpZHhdLCB0eXBlKTsKLSB9Ci0gCi0gCi1AQCAtMjk4LDEzICszOTMsMTQgQEAgcGtj czExX2NoZWNrX29ial9ib29sX2F0dHJpYihzdHJ1Y3QgcGtjczExX2tleSAqazExLCBDS19PQkpF Q1RfSEFORExFIG9iaiwKLSAKLSAJKnZhbCA9IDA7Ci0gCi0tCWlmICghazExLT5wcm92aWRlciB8 fCAhazExLT5wcm92aWRlci0+dmFsaWQpIHsKLSsJaWYgKCFrMTEtPnByb3ZpZGVyIHx8ICFrMTEt PnByb3ZpZGVyLT52YWxpZCB8fAotKwkgICAgIWsxMS0+cHJvdmlkZXItPm1vZHVsZSB8fCAhazEx LT5wcm92aWRlci0+bW9kdWxlLT52YWxpZCkgewotIAkJZXJyb3IoIm5vIHBrY3MxMSAodmFsaWQp IHByb3ZpZGVyIGZvdW5kIik7Ci0gCQlyZXR1cm4gKC0xKTsKLSAJfQotIAotLQlmID0gazExLT5w cm92aWRlci0+ZnVuY3Rpb25fbGlzdDsKLS0Jc2kgPSAmazExLT5wcm92aWRlci0+c2xvdGluZm9b azExLT5zbG90aWR4XTsKLSsJZiA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+ZnVuY3Rpb25fbGlz dDsKLSsJc2kgPSAmazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhd OwotIAotIAlhdHRyLnR5cGUgPSB0eXBlOwotIAlhdHRyLnBWYWx1ZSA9ICZmbGFnOwotQEAgLTMz NSwxMyArNDMxLDE0IEBAIHBrY3MxMV9nZXRfa2V5KHN0cnVjdCBwa2NzMTFfa2V5ICprMTEsIENL X01FQ0hBTklTTV9UWVBFIG1lY2hfdHlwZSkKLSAJaW50CQkJIGFsd2F5c19hdXRoID0gMDsKLSAJ aW50CQkJIGRpZF9sb2dpbiA9IDA7Ci0gCi0tCWlmICghazExLT5wcm92aWRlciB8fCAhazExLT5w cm92aWRlci0+dmFsaWQpIHsKLSsJaWYgKCFrMTEtPnByb3ZpZGVyIHx8ICFrMTEtPnByb3ZpZGVy LT52YWxpZCB8fAotKwkgICAgIWsxMS0+cHJvdmlkZXItPm1vZHVsZSB8fCAhazExLT5wcm92aWRl ci0+bW9kdWxlLT52YWxpZCkgewotIAkJZXJyb3IoIm5vIHBrY3MxMSAodmFsaWQpIHByb3ZpZGVy IGZvdW5kIik7Ci0gCQlyZXR1cm4gKC0xKTsKLSAJfQotIAotLQlmID0gazExLT5wcm92aWRlci0+ ZnVuY3Rpb25fbGlzdDsKLS0Jc2kgPSAmazExLT5wcm92aWRlci0+c2xvdGluZm9bazExLT5zbG90 aWR4XTsKLSsJZiA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKLSsJc2kg PSAmazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOwotIAotIAlp ZiAoKHNpLT50b2tlbi5mbGFncyAmIENLRl9MT0dJTl9SRVFVSVJFRCkgJiYgIXNpLT5sb2dnZWRf aW4pIHsKLSAJCWlmIChwa2NzMTFfbG9naW4oazExLCBDS1VfVVNFUikgPCAwKSB7Ci1AQCAtNDQw LDYgKzUzNywxMiBAQCBwa2NzMTFfcmVjb3JkX2tleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpw cm92aWRlciwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJCWsxMS0+a2V5aWQgPSB4bWFsbG9jKGsxMS0+ a2V5aWRfbGVuKTsKLSAJCW1lbWNweShrMTEtPmtleWlkLCBrZXlpZF9hdHRyaWItPnBWYWx1ZSwg azExLT5rZXlpZF9sZW4pOwotIAl9Ci0rCWlmIChrZXlpZF9hdHRyaWItPnVsVmFsdWVMZW4gPiAw ICkgewotKwkJazExLT5sYWJlbCA9IHhtYWxsb2Moa2V5aWRfYXR0cmliLT51bFZhbHVlTGVuKzEp OwotKwkJbWVtY3B5KGsxMS0+bGFiZWwsIGtleWlkX2F0dHJpYi0+cFZhbHVlLCBrZXlpZF9hdHRy aWItPnVsVmFsdWVMZW4pOwotKwkJazExLT5sYWJlbFtrZXlpZF9hdHRyaWItPnVsVmFsdWVMZW5d ID0gMDsKLSsJfQotKwotIAlUQUlMUV9JTlNFUlRfVEFJTCgmcGtjczExX2tleXMsIGsxMSwgbmV4 dCk7Ci0gCi0gCXJldHVybiAwOwotQEAgLTQ2Nyw2ICs1NzAsNDIgQEAgcGtjczExX2xvb2t1cF9r ZXkoc3RydWN0IHNzaGtleSAqa2V5KQotIAlyZXR1cm4gZm91bmQ7Ci0gfQotIAotKy8qCi0rICog VGhpcyBjYW4ndCBiZSBpbiB0aGUgc3NoLXBrY3MxMS11cmksIGJlY2FzZSB3ZSBjYW4gbm90IGRl cGVuZCBvbgotKyAqIFBLQ1MjMTEgc3RydWN0dXJlcyBpbiBzc2gtYWdlbnQgKHVzaW5nIGNsaWVu dC1oZWxwZXIgY29tbXVuaWNhdGlvbikKLSsgKi8KLStpbnQKLStwa2NzMTFfdXJpX3dyaXRlKGNv bnN0IHN0cnVjdCBzc2hrZXkgKmtleSwgRklMRSAqZikKLSt7Ci0rCWNoYXIgKnAgPSBOVUxMOwot KwlzdHJ1Y3QgcGtjczExX3VyaSB1cmk7Ci0rCXN0cnVjdCBwa2NzMTFfa2V5ICprMTEgPSBwa2Nz MTFfbG9va3VwX2tleShrZXkpOwotKwotKwlpZiAoazExID09IE5VTEwpIHsKLSsJCWVycm9yKCJG YWlsZWQgdG8gZ2V0IGV4X2RhdGEgZm9yIGtleSB0eXBlICVkIiwga2V5LT50eXBlKTsKLSsJCXJl dHVybiAoLTEpOwotKwl9Ci0rCi0rCS8qIG9taXQgdHlwZSAtLSB3ZSBhcmUgbG9va2luZyBmb3Ig cHJpdmF0ZS1wdWJsaWMgb3IgcHJpdmF0ZS1jZXJ0aWZpY2F0ZSBwYWlycyAqLwotKwl1cmkuaWQg PSBrMTEtPmtleWlkOwotKwl1cmkuaWRfbGVuID0gazExLT5rZXlpZF9sZW47Ci0rCXVyaS50b2tl biA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90aWR4XS50b2tlbi5s YWJlbDsKLSsJdXJpLm9iamVjdCA9IGsxMS0+bGFiZWw7Ci0rCXVyaS5tb2R1bGVfcGF0aCA9IGsx MS0+cHJvdmlkZXItPm1vZHVsZS0+bW9kdWxlX3BhdGg7Ci0rCXVyaS5saWJfbWFudWYgPSBrMTEt PnByb3ZpZGVyLT5tb2R1bGUtPmluZm8ubWFudWZhY3R1cmVySUQ7Ci0rCXVyaS5tYW51ZiA9IGsx MS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9bazExLT5zbG90aWR4XS50b2tlbi5tYW51ZmFj dHVyZXJJRDsKLSsJdXJpLnNlcmlhbCA9IGsxMS0+cHJvdmlkZXItPm1vZHVsZS0+c2xvdGluZm9b azExLT5zbG90aWR4XS50b2tlbi5zZXJpYWxOdW1iZXI7Ci0rCi0rCXAgPSBwa2NzMTFfdXJpX2dl dCgmdXJpKTsKLSsJLyogZG8gbm90IGNsZWFudXAgLS0gd2UgZG8gbm90IGFsbG9jYXRlIGhlcmUs IG9ubHkgcmVmZXJlbmNlICovCi0rCWlmIChwID09IE5VTEwpCi0rCQlyZXR1cm4gLTE7Ci0rCi0r CWZwcmludGYoZiwgIiAlcyIsIHApOwotKwlmcmVlKHApOwotKwlyZXR1cm4gMDsKLSt9Ci0rCi0g I2lmZGVmIFdJVEhfT1BFTlNTTAotIC8qCi0gICogU2VlOgotQEAgLTU3MSw4ICs3MTAsOCBAQCBw a2NzMTFfc2lnbl9yc2Eoc3RydWN0IHNzaGtleSAqa2V5LAotIAkJcmV0dXJuIFNTSF9FUlJfQUdF TlRfRkFJTFVSRTsKLSAJfQotIAotLQlmID0gazExLT5wcm92aWRlci0+ZnVuY3Rpb25fbGlzdDsK LS0Jc2kgPSAmazExLT5wcm92aWRlci0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKLSsJZiA9IGsx MS0+cHJvdmlkZXItPm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKLSsJc2kgPSAmazExLT5wcm92aWRl ci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOwotIAotIAlpZiAoKHNpZ2xlbiA9IEVW UF9QS0VZX3NpemUoa2V5LT5wa2V5KSkgPD0gMCkKLSAJCXJldHVybiBTU0hfRVJSX0lOVkFMSURf QVJHVU1FTlQ7Ci1AQCAtNjYxLDggKzgwMCw4IEBAIHBrY3MxMV9zaWduX2VjZHNhKHN0cnVjdCBz c2hrZXkgKmtleSwKLSAJZGVidWczX2YoInNpZ24gdXNpbmcgcHJvdmlkZXIgJXMgc2xvdGlkeCAl bHUiLAotIAkgICAgazExLT5wcm92aWRlci0+bmFtZSwgKHVfbG9uZylrMTEtPnNsb3RpZHgpOwot IAotLQlmID0gazExLT5wcm92aWRlci0+ZnVuY3Rpb25fbGlzdDsKLS0Jc2kgPSAmazExLT5wcm92 aWRlci0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKLSsJZiA9IGsxMS0+cHJvdmlkZXItPm1vZHVs ZS0+ZnVuY3Rpb25fbGlzdDsKLSsJc2kgPSAmazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5m b1trMTEtPnNsb3RpZHhdOwotIAotIAkvKiBQcmVwYXJlIGRpZ2VzdCB0byBiZSBzaWduZWQgKi8K LSAJaWYgKChoYXNoYWxnID0gc3Noa2V5X2VjX25pZF90b19oYXNoX2FsZyhrZXktPmVjZHNhX25p ZCkpID09IC0xKQotQEAgLTc0Niw4ICs4ODUsOCBAQCBwa2NzMTFfc2lnbl9lZDI1NTE5KHN0cnVj dCBzc2hrZXkgKmtleSwKLSAJZGVidWczX2YoInNpZ24gdXNpbmcgcHJvdmlkZXIgJXMgc2xvdGlk eCAlbHUiLAotIAkgICAgazExLT5wcm92aWRlci0+bmFtZSwgKHVfbG9uZylrMTEtPnNsb3RpZHgp OwotIAotLQlmID0gazExLT5wcm92aWRlci0+ZnVuY3Rpb25fbGlzdDsKLS0Jc2kgPSAmazExLT5w cm92aWRlci0+c2xvdGluZm9bazExLT5zbG90aWR4XTsKLSsJZiA9IGsxMS0+cHJvdmlkZXItPm1v ZHVsZS0+ZnVuY3Rpb25fbGlzdDsKLSsJc2kgPSAmazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90 aW5mb1trMTEtPnNsb3RpZHhdOwotIAotIAl4ZGF0YSA9IHhtYWxsb2MoZGF0YWxlbik7Ci0gCW1l bWNweSh4ZGF0YSwgZGF0YSwgZGF0YWxlbik7Ci1AQCAtNzc1LDcgKzkxNCw4IEBAIHBrY3MxMV9z aWduX2VkMjU1MTkoc3RydWN0IHNzaGtleSAqa2V5LAotIAlyZXR1cm4gcmV0OwotIH0KLSAKLS0v KiByZW1vdmUgdHJhaWxpbmcgc3BhY2VzICovCi0rLyogcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcy4g Tm90ZSwgdGhhdCB0aGlzIGRvZXMgTk9UIGd1YXJhbnRlZSB0aGUgYnVmZmVyCi0rICogd2lsbCBi ZSBudWxsIHRlcm1pbmF0ZWQgaWYgdGhlcmUgYXJlIG5vIHRyYWlsaW5nIHNwYWNlcyEgKi8KLSBz dGF0aWMgY2hhciAqCi0gcm1zcGFjZSh1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLSB7Ci1AQCAt ODA3LDggKzk0Nyw4IEBAIHBrY3MxMV9vcGVuX3Nlc3Npb24oc3RydWN0IHBrY3MxMV9wcm92aWRl ciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwgY2hhciAqcGluLAotIAlDS19TRVNTSU9OX0hBTkRMRQlz ZXNzaW9uOwotIAlpbnQJCQlsb2dpbl9yZXF1aXJlZCwgcmV0OwotIAotLQlmID0gcC0+ZnVuY3Rp b25fbGlzdDsKLS0Jc2kgPSAmcC0+c2xvdGluZm9bc2xvdGlkeF07Ci0rCWYgPSBwLT5tb2R1bGUt PmZ1bmN0aW9uX2xpc3Q7Ci0rCXNpID0gJnAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF07Ci0g Ci0gCWxvZ2luX3JlcXVpcmVkID0gc2ktPnRva2VuLmZsYWdzICYgQ0tGX0xPR0lOX1JFUVVJUkVE OwotIAotQEAgLTgxOCw5ICs5NTgsOSBAQCBwa2NzMTFfb3Blbl9zZXNzaW9uKHN0cnVjdCBwa2Nz MTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsIGNoYXIgKnBpbiwKLSAJCWVycm9yKCJw aW4gcmVxdWlyZWQiKTsKLSAJCXJldHVybiAoLVNTSF9QS0NTMTFfRVJSX1BJTl9SRVFVSVJFRCk7 Ci0gCX0KLS0JaWYgKChydiA9IGYtPkNfT3BlblNlc3Npb24ocC0+c2xvdGxpc3Rbc2xvdGlkeF0s IENLRl9SV19TRVNTSU9OfAotKwlpZiAoKHJ2ID0gZi0+Q19PcGVuU2Vzc2lvbihwLT5tb2R1bGUt PnNsb3RsaXN0W3Nsb3RpZHhdLCBDS0ZfUldfU0VTU0lPTnwKLSAJICAgIENLRl9TRVJJQUxfU0VT U0lPTiwgTlVMTCwgTlVMTCwgJnNlc3Npb24pKSAhPSBDS1JfT0spIHsKLS0JCWVycm9yKCJDX09w ZW5TZXNzaW9uIGZhaWxlZDogJWx1IiwgcnYpOwotKwkJZXJyb3IoIkNfT3BlblNlc3Npb24gZmFp bGVkIGZvciBzbG90ICVsdTogJWx1Iiwgc2xvdGlkeCwgcnYpOwotIAkJcmV0dXJuICgtMSk7Ci0g CX0KLSAJaWYgKGxvZ2luX3JlcXVpcmVkICYmIHBpbiAhPSBOVUxMICYmIHN0cmxlbihwaW4pICE9 IDApIHsKLUBAIC04NTcsNyArOTk3LDggQEAgc3RhdGljIHN0cnVjdCBzc2hrZXkgKgotIHBrY3Mx MV9mZXRjaF9lY2RzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcg c2xvdGlkeCwKLSAgICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2JqKQotIHsKLS0JQ0tfQVRUUklCVVRF CQkga2V5X2F0dHJbM107Ci0rCUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzRdOwotKwlpbnQJCQkg bmF0dHIgPSA0OwotIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKLSAJQ0tfRlVOQ1RJT05f TElTVAkqZiA9IE5VTEw7Ci0gCUNLX1JWCQkJIHJ2OwotQEAgLTg3MCwxNCArMTAxMSwxNSBAQCBw a2NzMTFfZmV0Y2hfZWNkc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VM T05HIHNsb3RpZHgsCi0gCi0gCW1lbXNldCgma2V5X2F0dHIsIDAsIHNpemVvZihrZXlfYXR0cikp OwotIAlrZXlfYXR0clswXS50eXBlID0gQ0tBX0lEOwotLQlrZXlfYXR0clsxXS50eXBlID0gQ0tB X0VDX1BPSU5UOwotLQlrZXlfYXR0clsyXS50eXBlID0gQ0tBX0VDX1BBUkFNUzsKLSsJa2V5X2F0 dHJbMV0udHlwZSA9IENLQV9MQUJFTDsKLSsJa2V5X2F0dHJbMl0udHlwZSA9IENLQV9FQ19QT0lO VDsKLSsJa2V5X2F0dHJbM10udHlwZSA9IENLQV9FQ19QQVJBTVM7Ci0gCi0tCXNlc3Npb24gPSBw LT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotLQlmID0gcC0+ZnVuY3Rpb25fbGlzdDsKLSsJ c2Vzc2lvbiA9IHAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLSsJZiA9IHAt Pm1vZHVsZS0+ZnVuY3Rpb25fbGlzdDsKLSAKLSAJLyogZmlndXJlIG91dCBzaXplIG9mIHRoZSBh dHRyaWJ1dGVzICovCi0tCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2Jq LCBrZXlfYXR0ciwgMyk7Ci0rCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAq b2JqLCBrZXlfYXR0ciwgbmF0dHIpOwotIAlpZiAocnYgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigi Q19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJCXJldHVybiAoTlVMTCk7 Ci1AQCAtODg4LDE5ICsxMDMwLDE5IEBAIHBrY3MxMV9mZXRjaF9lY2RzYV9wdWJrZXkoc3RydWN0 IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJICogZW5zdXJlIHRoYXQg bm9uZSBvZiB0aGUgb3RoZXJzIGFyZSB6ZXJvIGxlbmd0aC4KLSAJICogWFhYIGFzc3VtZXMgQ0tB X0lEIGlzIGFsd2F5cyBmaXJzdC4KLSAJICovCi0tCWlmIChrZXlfYXR0clsxXS51bFZhbHVlTGVu ID09IDAgfHwKLS0JICAgIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPT0gMCkgewotKwlpZiAoa2V5 X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwIHx8Ci0rCSAgICBrZXlfYXR0clszXS51bFZhbHVlTGVu ID09IDApIHsKLSAJCWVycm9yKCJpbnZhbGlkIGF0dHJpYnV0ZSBsZW5ndGgiKTsKLSAJCXJldHVy biAoTlVMTCk7Ci0gCX0KLSAKLSAJLyogYWxsb2NhdGUgYnVmZmVycyBmb3IgYXR0cmlidXRlcyAq LwotLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkr KykKLSAJCWlmIChrZXlfYXR0cltpXS51bFZhbHVlTGVuID4gMCkKLSAJCQlrZXlfYXR0cltpXS5w VmFsdWUgPSB4Y2FsbG9jKDEsIGtleV9hdHRyW2ldLnVsVmFsdWVMZW4pOwotIAotIAkvKiByZXRy aWV2ZSBJRCwgcHVibGljIHBvaW50IGFuZCBjdXJ2ZSBwYXJhbWV0ZXJzIG9mIEVDIGtleSAqLwot LQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIDMp OwotKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIs IG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0QXR0cmlidXRl VmFsdWUgZmFpbGVkOiAlbHUiLCBydik7Ci0gCQlnb3RvIGZhaWw7Ci1AQCAtOTEyLDggKzEwNTQs OCBAQCBwa2NzMTFfZmV0Y2hfZWNkc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAs IENLX1VMT05HIHNsb3RpZHgsCi0gCQlnb3RvIGZhaWw7Ci0gCX0KLSAKLS0JYXR0cnAgPSBrZXlf YXR0clsyXS5wVmFsdWU7Ci0tCWdyb3VwID0gZDJpX0VDUEtQYXJhbWV0ZXJzKE5VTEwsICZhdHRy cCwga2V5X2F0dHJbMl0udWxWYWx1ZUxlbik7Ci0rCWF0dHJwID0ga2V5X2F0dHJbM10ucFZhbHVl OwotKwlncm91cCA9IGQyaV9FQ1BLUGFyYW1ldGVycyhOVUxMLCAmYXR0cnAsIGtleV9hdHRyWzNd LnVsVmFsdWVMZW4pOwotIAlpZiAoZ3JvdXAgPT0gTlVMTCkgewotIAkJb3NzbF9lcnJvcigiZDJp X0VDUEtQYXJhbWV0ZXJzIGZhaWxlZCIpOwotIAkJZ290byBmYWlsOwotQEAgLTkyNCwxMyArMTA2 NiwxMyBAQCBwa2NzMTFfZmV0Y2hfZWNkc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnAsIENLX1VMT05HIHNsb3RpZHgsCi0gCQlnb3RvIGZhaWw7Ci0gCX0KLSAKLS0JaWYgKGtleV9h dHRyWzFdLnVsVmFsdWVMZW4gPD0gMikgewotKwlpZiAoa2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA8 PSAyKSB7Ci0gCQllcnJvcigiQ0tBX0VDX1BPSU5UIHRvbyBzbWFsbCIpOwotIAkJZ290byBmYWls OwotIAl9Ci0gCi0tCWF0dHJwID0ga2V5X2F0dHJbMV0ucFZhbHVlOwotLQlvY3RldCA9IGQyaV9B U04xX09DVEVUX1NUUklORyhOVUxMLCAmYXR0cnAsIGtleV9hdHRyWzFdLnVsVmFsdWVMZW4pOwot KwlhdHRycCA9IGtleV9hdHRyWzJdLnBWYWx1ZTsKLSsJb2N0ZXQgPSBkMmlfQVNOMV9PQ1RFVF9T VFJJTkcoTlVMTCwgJmF0dHJwLCBrZXlfYXR0clsyXS51bFZhbHVlTGVuKTsKLSAJaWYgKG9jdGV0 ID09IE5VTEwpIHsKLSAJCW9zc2xfZXJyb3IoImQyaV9BU04xX09DVEVUX1NUUklORyBmYWlsZWQi KTsKLSAJCWdvdG8gZmFpbDsKLUBAIC05OTIsNyArMTEzNCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc3No a2V5ICoKLSBwa2NzMTFfZmV0Y2hfcnNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpw LCBDS19VTE9ORyBzbG90aWR4LAotICAgICBDS19PQkpFQ1RfSEFORExFICpvYmopCi0gewotLQlD S19BVFRSSUJVVEUJCSBrZXlfYXR0clszXTsKLSsJQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbNF07 Ci0rCWludAkJCSBuYXR0ciA9IDQ7Ci0gCUNLX1NFU1NJT05fSEFORExFCSBzZXNzaW9uOwotIAlD S19GVU5DVElPTl9MSVNUCSpmID0gTlVMTDsKLSAJQ0tfUlYJCQkgcnY7Ci1AQCAtMTAwMywxNCAr MTE0NiwxNSBAQCBwa2NzMTFfZmV0Y2hfcnNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVy ICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAotIAltZW1zZXQoJmtleV9hdHRyLCAwLCBzaXplb2Yo a2V5X2F0dHIpKTsKLSAJa2V5X2F0dHJbMF0udHlwZSA9IENLQV9JRDsKLS0Ja2V5X2F0dHJbMV0u dHlwZSA9IENLQV9NT0RVTFVTOwotLQlrZXlfYXR0clsyXS50eXBlID0gQ0tBX1BVQkxJQ19FWFBP TkVOVDsKLSsJa2V5X2F0dHJbMV0udHlwZSA9IENLQV9MQUJFTDsKLSsJa2V5X2F0dHJbMl0udHlw ZSA9IENLQV9NT0RVTFVTOwotKwlrZXlfYXR0clszXS50eXBlID0gQ0tBX1BVQkxJQ19FWFBPTkVO VDsKLSAKLS0Jc2Vzc2lvbiA9IHAtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0tCWYgPSBw LT5mdW5jdGlvbl9saXN0OwotKwlzZXNzaW9uID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4 XS5zZXNzaW9uOwotKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OwotIAotIAkvKiBmaWd1 cmUgb3V0IHNpemUgb2YgdGhlIGF0dHJpYnV0ZXMgKi8KLS0JcnYgPSBmLT5DX0dldEF0dHJpYnV0 ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCAzKTsKLSsJcnYgPSBmLT5DX0dldEF0dHJp YnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGtleV9hdHRyLCBuYXR0cik7Ci0gCWlmIChydiAhPSBD S1JfT0spIHsKLSAJCWVycm9yKCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYp OwotIAkJcmV0dXJuIChOVUxMKTsKLUBAIC0xMDIxLDE5ICsxMTY1LDE5IEBAIHBrY3MxMV9mZXRj aF9yc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgs Ci0gCSAqIGVuc3VyZSB0aGF0IG5vbmUgb2YgdGhlIG90aGVycyBhcmUgemVybyBsZW5ndGguCi0g CSAqIFhYWCBhc3N1bWVzIENLQV9JRCBpcyBhbHdheXMgZmlyc3QuCi0gCSAqLwotLQlpZiAoa2V5 X2F0dHJbMV0udWxWYWx1ZUxlbiA9PSAwIHx8Ci0tCSAgICBrZXlfYXR0clsyXS51bFZhbHVlTGVu ID09IDApIHsKLSsJaWYgKGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPT0gMCB8fAotKwkgICAga2V5 X2F0dHJbM10udWxWYWx1ZUxlbiA9PSAwKSB7Ci0gCQllcnJvcigiaW52YWxpZCBhdHRyaWJ1dGUg bGVuZ3RoIik7Ci0gCQlyZXR1cm4gKE5VTEwpOwotIAl9Ci0gCi0gCS8qIGFsbG9jYXRlIGJ1ZmZl cnMgZm9yIGF0dHJpYnV0ZXMgKi8KLS0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLSsJZm9yIChp ID0gMDsgaSA8IG5hdHRyOyBpKyspCi0gCQlpZiAoa2V5X2F0dHJbaV0udWxWYWx1ZUxlbiA+IDAp Ci0gCQkJa2V5X2F0dHJbaV0ucFZhbHVlID0geGNhbGxvYygxLCBrZXlfYXR0cltpXS51bFZhbHVl TGVuKTsKLSAKLSAJLyogcmV0cmlldmUgSUQsIG1vZHVsdXMgYW5kIHB1YmxpYyBleHBvbmVudCBv ZiBSU0Ega2V5ICovCi0tCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2Jq LCBrZXlfYXR0ciwgMyk7Ci0rCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAq b2JqLCBrZXlfYXR0ciwgbmF0dHIpOwotIAlpZiAocnYgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigi Q19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJCWdvdG8gZmFpbDsKLUBA IC0xMDQ1LDggKzExODksOCBAQCBwa2NzMTFfZmV0Y2hfcnNhX3B1YmtleShzdHJ1Y3QgcGtjczEx X3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkJZ290byBmYWlsOwotIAl9Ci0gCi0t CXJzYV9uID0gQk5fYmluMmJuKGtleV9hdHRyWzFdLnBWYWx1ZSwga2V5X2F0dHJbMV0udWxWYWx1 ZUxlbiwgTlVMTCk7Ci0tCXJzYV9lID0gQk5fYmluMmJuKGtleV9hdHRyWzJdLnBWYWx1ZSwga2V5 X2F0dHJbMl0udWxWYWx1ZUxlbiwgTlVMTCk7Ci0rCXJzYV9uID0gQk5fYmluMmJuKGtleV9hdHRy WzJdLnBWYWx1ZSwga2V5X2F0dHJbMl0udWxWYWx1ZUxlbiwgTlVMTCk7Ci0rCXJzYV9lID0gQk5f YmluMmJuKGtleV9hdHRyWzNdLnBWYWx1ZSwga2V5X2F0dHJbM10udWxWYWx1ZUxlbiwgTlVMTCk7 Ci0gCWlmIChyc2FfbiA9PSBOVUxMIHx8IHJzYV9lID09IE5VTEwpIHsKLSAJCWVycm9yKCJCTl9i aW4yYm4gZmFpbGVkIik7Ci0gCQlnb3RvIGZhaWw7Ci1AQCAtMTA3OCw3ICsxMjIyLDcgQEAgcGtj czExX2ZldGNoX3JzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcg c2xvdGlkeCwKLSAJLyogc3VjY2VzcyAqLwotIAlzdWNjZXNzID0gMDsKLSBmYWlsOgotLQlmb3Ig KGkgPSAwOyBpIDwgMzsgaSsrKQotKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkrKykKLSAJCWZy ZWUoa2V5X2F0dHJbaV0ucFZhbHVlKTsKLSAJUlNBX2ZyZWUocnNhKTsKLSAJaWYgKHN1Y2Nlc3Mg IT0gMCkgewotQEAgLTEwOTMsNyArMTIzNyw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc3Noa2V5ICoKLSBw a2NzMTFfZmV0Y2hfZWQyNTUxOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tf VUxPTkcgc2xvdGlkeCwKLSAgICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2JqKQotIHsKLS0JQ0tfQVRU UklCVVRFCQkga2V5X2F0dHJbM107Ci0rCUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzRdOwotKwlp bnQJCQkgbmF0dHIgPSA0OwotIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKLSAJQ0tfRlVO Q1RJT05fTElTVAkqZiA9IE5VTEw7Ci0gCUNLX1JWCQkJIHJ2OwotQEAgLTExMTMsMTQgKzEyNTgs MTUgQEAgcGtjczExX2ZldGNoX2VkMjU1MTlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnAsIENLX1VMT05HIHNsb3RpZHgsCi0gCi0gCW1lbXNldCgma2V5X2F0dHIsIDAsIHNpemVvZihr ZXlfYXR0cikpOwotIAlrZXlfYXR0clswXS50eXBlID0gQ0tBX0lEOwotLQlrZXlfYXR0clsxXS50 eXBlID0gQ0tBX0VDX1BPSU5UOyAvKiBYWFggb3IgQ0tBX1ZBTFVFID8gKi8KLS0Ja2V5X2F0dHJb Ml0udHlwZSA9IENLQV9FQ19QQVJBTVM7Ci0rCWtleV9hdHRyWzFdLnR5cGUgPSBDS0FfTEFCRUw7 Ci0rCWtleV9hdHRyWzJdLnR5cGUgPSBDS0FfRUNfUE9JTlQ7IC8qIFhYWCBvciBDS0FfVkFMVUUg PyAqLwotKwlrZXlfYXR0clszXS50eXBlID0gQ0tBX0VDX1BBUkFNUzsKLSAKLS0Jc2Vzc2lvbiA9 IHAtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0tCWYgPSBwLT5mdW5jdGlvbl9saXN0Owot KwlzZXNzaW9uID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotKwlmID0g cC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OwotIAotIAkvKiBmaWd1cmUgb3V0IHNpemUgb2YgdGhl IGF0dHJpYnV0ZXMgKi8KLS0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpv YmosIGtleV9hdHRyLCAzKTsKLSsJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24s ICpvYmosIGtleV9hdHRyLCBuYXR0cik7Ci0gCWlmIChydiAhPSBDS1JfT0spIHsKLSAJCWVycm9y KCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOwotIAkJcmV0dXJuIChOVUxM KTsKLUBAIC0xMTMxLDI4ICsxMjc3LDI4IEBAIHBrY3MxMV9mZXRjaF9lZDI1NTE5X3B1YmtleShz dHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkgKiBlbnN1cmUg dGhhdCBub25lIG9mIHRoZSBvdGhlcnMgYXJlIHplcm8gbGVuZ3RoLgotIAkgKiBYWFggYXNzdW1l cyBDS0FfSUQgaXMgYWx3YXlzIGZpcnN0LgotIAkgKi8KLS0JaWYgKGtleV9hdHRyWzFdLnVsVmFs dWVMZW4gPT0gMCB8fAotLQkgICAga2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwKSB7Ci0rCWlm IChrZXlfYXR0clsyXS51bFZhbHVlTGVuID09IDAgfHwKLSsJICAgIGtleV9hdHRyWzNdLnVsVmFs dWVMZW4gPT0gMCkgewotIAkJZXJyb3IoImludmFsaWQgYXR0cmlidXRlIGxlbmd0aCIpOwotIAkJ cmV0dXJuIChOVUxMKTsKLSAJfQotIAotIAkvKiBhbGxvY2F0ZSBidWZmZXJzIGZvciBhdHRyaWJ1 dGVzICovCi0tCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSsJZm9yIChpID0gMDsgaSA8IG5h dHRyOyBpKyspIHsKLSAJCWlmIChrZXlfYXR0cltpXS51bFZhbHVlTGVuID4gMCkKLSAJCQlrZXlf YXR0cltpXS5wVmFsdWUgPSB4Y2FsbG9jKDEsIGtleV9hdHRyW2ldLnVsVmFsdWVMZW4pOwotIAl9 Ci0gCi0gCS8qIHJldHJpZXZlIElELCBwdWJsaWMgcG9pbnQgYW5kIGN1cnZlIHBhcmFtZXRlcnMg b2YgRUMga2V5ICovCi0tCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2Jq LCBrZXlfYXR0ciwgMyk7Ci0rCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAq b2JqLCBrZXlfYXR0ciwgbmF0dHIpOwotIAlpZiAocnYgIT0gQ0tSX09LKSB7Ci0gCQllcnJvcigi Q19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKLSAJCWdvdG8gZmFpbDsKLSAJ fQotIAotIAkvKiBFeHBlY3Qgb25lIG9mIHRoZSBzdXBwb3J0ZWQgaWRlbnRpZmllcnMgaW4gQ0tB X0VDX1BBUkFNUyAqLwotLQlkID0gKHVfY2hhciAqKWtleV9hdHRyWzJdLnBWYWx1ZTsKLS0JbGVu ID0ga2V5X2F0dHJbMl0udWxWYWx1ZUxlbjsKLSsJZCA9ICh1X2NoYXIgKilrZXlfYXR0clszXS5w VmFsdWU7Ci0rCWxlbiA9IGtleV9hdHRyWzNdLnVsVmFsdWVMZW47Ci0gCWlmICgobGVuICE9IHNp emVvZihpZDEpIHx8IG1lbWNtcChkLCBpZDEsIHNpemVvZihpZDEpKSAhPSAwKSAmJgotIAkgICAg KGxlbiAhPSBzaXplb2YoaWQyKSB8fCBtZW1jbXAoZCwgaWQyLCBzaXplb2YoaWQyKSkgIT0gMCkp IHsKLSAJCWhleCA9IHRvaGV4KGQsIGxlbik7Ci1AQCAtMTE2NCwxNiArMTMxMCwxNiBAQCBwa2Nz MTFfZmV0Y2hfZWQyNTUxOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxP Tkcgc2xvdGlkeCwKLSAJICogRXhwZWN0IGVpdGhlciBhIHJhdyAzMiBieXRlIHB1YmtleSBvciBh biBPQ1RFVCBTVFJJTkcgd2l0aAotIAkgKiBhIDMyIGJ5dGUgcHVia2V5IGluIENLQV9WQUxVRQot IAkgKi8KLS0JZCA9ICh1X2NoYXIgKilrZXlfYXR0clsxXS5wVmFsdWU7Ci0tCWxlbiA9IGtleV9h dHRyWzFdLnVsVmFsdWVMZW47Ci0rCWQgPSAodV9jaGFyICopa2V5X2F0dHJbMl0ucFZhbHVlOwot KwlsZW4gPSBrZXlfYXR0clsyXS51bFZhbHVlTGVuOwotIAlpZiAobGVuID09IEVEMjU1MTlfUEtf U1ogKyAyICYmIGRbMF0gPT0gMHgwNCAmJiBkWzFdID09IEVEMjU1MTlfUEtfU1opIHsKLSAJCWQg Kz0gMjsKLSAJCWxlbiAtPSAyOwotIAl9Ci0gCWlmIChsZW4gIT0gRUQyNTUxOV9QS19TWikgewot LQkJaGV4ID0gdG9oZXgoa2V5X2F0dHJbMV0ucFZhbHVlLCBrZXlfYXR0clsxXS51bFZhbHVlTGVu KTsKLSsJCWhleCA9IHRvaGV4KGtleV9hdHRyWzJdLnBWYWx1ZSwga2V5X2F0dHJbMl0udWxWYWx1 ZUxlbik7Ci0gCQlsb2dpdF9mKCJDS0FfRUNfUE9JTlQgaW52YWxpZCBvY3RldCBzdHI6ICVzIChs ZW4gJWx1KSIsCi0tCQkgICAgaGV4LCAodV9sb25nKWtleV9hdHRyWzFdLnVsVmFsdWVMZW4pOwot KwkJICAgIGhleCwgKHVfbG9uZylrZXlfYXR0clsyXS51bFZhbHVlTGVuKTsKLSAJCWdvdG8gZmFp bDsKLSAJfQotIAotQEAgLTExOTMsNyArMTMzOSw3IEBAIHBrY3MxMV9mZXRjaF9lZDI1NTE5X3B1 YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkJa2V5 ID0gTlVMTDsKLSAJfQotIAlmcmVlKGhleCk7Ci0tCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0r CWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQotIAkJZnJlZShrZXlfYXR0cltpXS5wVmFsdWUp OwotIAlyZXR1cm4ga2V5OwotIH0KLUBAIC0xMjAzLDcgKzEzNDksOCBAQCBzdGF0aWMgaW50Ci0g cGtjczExX2ZldGNoX3g1MDlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VM T05HIHNsb3RpZHgsCi0gICAgIENLX09CSkVDVF9IQU5ETEUgKm9iaiwgc3RydWN0IHNzaGtleSAq KmtleXAsIGNoYXIgKipsYWJlbHApCi0gewotLQlDS19BVFRSSUJVVEUJCSBjZXJ0X2F0dHJbM107 Ci0rCUNLX0FUVFJJQlVURQkJIGNlcnRfYXR0cls0XTsKLSsJaW50CQkJIG5hdHRyID0gNDsKLSAJ Q0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247Ci0gCUNLX0ZVTkNUSU9OX0xJU1QJKmYgPSBOVUxM OwotIAlDS19SVgkJCSBydjsKLUBAIC0xMjI5LDE0ICsxMzc2LDE1IEBAIHBrY3MxMV9mZXRjaF94 NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAot IAotIAltZW1zZXQoJmNlcnRfYXR0ciwgMCwgc2l6ZW9mKGNlcnRfYXR0cikpOwotIAljZXJ0X2F0 dHJbMF0udHlwZSA9IENLQV9JRDsKLS0JY2VydF9hdHRyWzFdLnR5cGUgPSBDS0FfU1VCSkVDVDsK LS0JY2VydF9hdHRyWzJdLnR5cGUgPSBDS0FfVkFMVUU7Ci0rCWNlcnRfYXR0clsxXS50eXBlID0g Q0tBX0xBQkVMOwotKwljZXJ0X2F0dHJbMl0udHlwZSA9IENLQV9TVUJKRUNUOwotKwljZXJ0X2F0 dHJbM10udHlwZSA9IENLQV9WQUxVRTsKLSAKLS0Jc2Vzc2lvbiA9IHAtPnNsb3RpbmZvW3Nsb3Rp ZHhdLnNlc3Npb247Ci0tCWYgPSBwLT5mdW5jdGlvbl9saXN0OwotKwlzZXNzaW9uID0gcC0+bW9k dWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlv bl9saXN0OwotIAotIAkvKiBmaWd1cmUgb3V0IHNpemUgb2YgdGhlIGF0dHJpYnV0ZXMgKi8KLS0J cnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGNlcnRfYXR0ciwgMyk7 Ci0rCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBjZXJ0X2F0dHIs IG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0QXR0cmlidXRl VmFsdWUgZmFpbGVkOiAlbHUiLCBydik7Ci0gCQlyZXR1cm4gLTE7Ci1AQCAtMTI0OCwxOCArMTM5 NiwxOSBAQCBwa2NzMTFfZmV0Y2hfeDUwOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAq cCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJICogWFhYIGFzc3VtZXMgQ0tBX0lEIGlzIGFsd2F5cyBm aXJzdC4KLSAJICovCi0gCWlmIChjZXJ0X2F0dHJbMV0udWxWYWx1ZUxlbiA9PSAwIHx8Ci0tCSAg ICBjZXJ0X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwKSB7Ci0rCSAgICBjZXJ0X2F0dHJbMl0udWxW YWx1ZUxlbiA9PSAwIHx8Ci0rCSAgICBjZXJ0X2F0dHJbM10udWxWYWx1ZUxlbiA9PSAwKSB7Ci0g CQllcnJvcigiaW52YWxpZCBhdHRyaWJ1dGUgbGVuZ3RoIik7Ci0gCQlyZXR1cm4gLTE7Ci0gCX0K LSAKLSAJLyogYWxsb2NhdGUgYnVmZmVycyBmb3IgYXR0cmlidXRlcyAqLwotLQlmb3IgKGkgPSAw OyBpIDwgMzsgaSsrKQotKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkrKykKLSAJCWlmIChjZXJ0 X2F0dHJbaV0udWxWYWx1ZUxlbiA+IDApCi0gCQkJY2VydF9hdHRyW2ldLnBWYWx1ZSA9IHhjYWxs b2MoMSwgY2VydF9hdHRyW2ldLnVsVmFsdWVMZW4pOwotIAotIAkvKiByZXRyaWV2ZSBJRCwgc3Vi amVjdCBhbmQgdmFsdWUgb2YgY2VydGlmaWNhdGUgKi8KLS0JcnYgPSBmLT5DX0dldEF0dHJpYnV0 ZVZhbHVlKHNlc3Npb24sICpvYmosIGNlcnRfYXR0ciwgMyk7Ci0rCXJ2ID0gZi0+Q19HZXRBdHRy aWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBjZXJ0X2F0dHIsIG5hdHRyKTsKLSAJaWYgKHJ2ICE9 IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0QXR0cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBy dik7Ci0gCQlnb3RvIG91dDsKLUBAIC0xMjczLDggKzE0MjIsOCBAQCBwa2NzMTFfZmV0Y2hfeDUw OV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJ CXN1YmplY3QgPSB4c3RyZHVwKCJpbnZhbGlkIHN1YmplY3QiKTsKLSAJWDUwOV9OQU1FX2ZyZWUo eDUwOV9uYW1lKTsKLSAKLS0JY3AgPSBjZXJ0X2F0dHJbMl0ucFZhbHVlOwotLQlpZiAoKHg1MDkg PSBkMmlfWDUwOShOVUxMLCAmY3AsIGNlcnRfYXR0clsyXS51bFZhbHVlTGVuKSkgPT0gTlVMTCkg ewotKwljcCA9IGNlcnRfYXR0clszXS5wVmFsdWU7Ci0rCWlmICgoeDUwOSA9IGQyaV9YNTA5KE5V TEwsICZjcCwgY2VydF9hdHRyWzNdLnVsVmFsdWVMZW4pKSA9PSBOVUxMKSB7Ci0gCQllcnJvcigi ZDJpX3g1MDkgZmFpbGVkIik7Ci0gCQlnb3RvIG91dDsKLSAJfQotQEAgLTEzODQsNyArMTUzMyw3 IEBAIHBrY3MxMV9mZXRjaF94NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBD S19VTE9ORyBzbG90aWR4LAotIAkJZ290byBvdXQ7Ci0gCX0KLSAgb3V0OgotLQlmb3IgKGkgPSAw OyBpIDwgMzsgaSsrKQotKwlmb3IgKGkgPSAwOyBpIDwgbmF0dHI7IGkrKykKLSAJCWZyZWUoY2Vy dF9hdHRyW2ldLnBWYWx1ZSk7Ci0gCVg1MDlfZnJlZSh4NTA5KTsKLSAJUlNBX2ZyZWUocnNhKTsK LUBAIC0xNDI3LDExICsxNTc2LDEyIEBAIG5vdGVfa2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnAsIENLX1VMT05HIHNsb3RpZHgsIGNvbnN0IGNoYXIgKmNvbnRleHQsCi0gICovCi0gc3RhdGlj IGludAotIHBrY3MxMV9mZXRjaF9jZXJ0cyhzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19V TE9ORyBzbG90aWR4LAotLSAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLCBjaGFyICoqKmxhYmVs c3AsIGludCAqbmtleXMpCi0rICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsIGNoYXIgKioqbGFi ZWxzcCwgaW50ICpua2V5cywgc3RydWN0IHBrY3MxMV91cmkgKnVyaSkKLSB7Ci0gCXN0cnVjdCBz c2hrZXkJCSprZXkgPSBOVUxMOwotIAlDS19PQkpFQ1RfQ0xBU1MJCSBrZXlfY2xhc3M7Ci0tCUNL X0FUVFJJQlVURQkJIGtleV9hdHRyWzFdOwotKwlDS19BVFRSSUJVVEUJCSBrZXlfYXR0clszXTsK LSsJaW50CQkJIG5hdHRyID0gMTsKLSAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247Ci0gCUNL X0ZVTkNUSU9OX0xJU1QJKmYgPSBOVUxMOwotIAlDS19SVgkJCSBydjsKLUBAIC0xNDQ4LDEwICsx NTk4LDIzIEBAIHBrY3MxMV9mZXRjaF9jZXJ0cyhzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBD S19VTE9ORyBzbG90aWR4LAotIAlrZXlfYXR0clswXS5wVmFsdWUgPSAma2V5X2NsYXNzOwotIAlr ZXlfYXR0clswXS51bFZhbHVlTGVuID0gc2l6ZW9mKGtleV9jbGFzcyk7Ci0gCi0tCXNlc3Npb24g PSBwLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOwotLQlmID0gcC0+ZnVuY3Rpb25fbGlzdDsK LSsJaWYgKHVyaS0+aWQgIT0gTlVMTCkgewotKwkJa2V5X2F0dHJbbmF0dHJdLnR5cGUgPSBDS0Ff SUQ7Ci0rCQlrZXlfYXR0cltuYXR0cl0ucFZhbHVlID0gdXJpLT5pZDsKLSsJCWtleV9hdHRyW25h dHRyXS51bFZhbHVlTGVuID0gdXJpLT5pZF9sZW47Ci0rCQluYXR0cisrOwotKwl9Ci0rCWlmICh1 cmktPm9iamVjdCAhPSBOVUxMKSB7Ci0rCQlrZXlfYXR0cltuYXR0cl0udHlwZSA9IENLQV9MQUJF TDsKLSsJCWtleV9hdHRyW25hdHRyXS5wVmFsdWUgPSB1cmktPm9iamVjdDsKLSsJCWtleV9hdHRy W25hdHRyXS51bFZhbHVlTGVuID0gc3RybGVuKHVyaS0+b2JqZWN0KTsKLSsJCW5hdHRyKys7Ci0r CX0KLSAKLS0JcnYgPSBmLT5DX0ZpbmRPYmplY3RzSW5pdChzZXNzaW9uLCBrZXlfYXR0ciwgMSk7 Ci0rCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247Ci0rCWYg PSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7Ci0rCi0rCXJ2ID0gZi0+Q19GaW5kT2JqZWN0c0lu aXQoc2Vzc2lvbiwga2V5X2F0dHIsIG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJ ZXJyb3IoIkNfRmluZE9iamVjdHNJbml0IGZhaWxlZDogJWx1IiwgcnYpOwotIAkJZ290byBmYWls OwotQEAgLTE1MzMsMTEgKzE2OTYsMTIgQEAgZmFpbDoKLSAgKi8KLSBzdGF0aWMgaW50Ci0gcGtj czExX2ZldGNoX2tleXMoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlk eCwKLS0gICAgc3RydWN0IHNzaGtleSAqKiprZXlzcCwgY2hhciAqKipsYWJlbHNwLCBpbnQgKm5r ZXlzKQotKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXNwLCBjaGFyICoqKmxhYmVsc3AsIGludCAq bmtleXMsIHN0cnVjdCBwa2NzMTFfdXJpICp1cmkpCi0gewotIAlzdHJ1Y3Qgc3Noa2V5CQkqa2V5 ID0gTlVMTDsKLSAJQ0tfT0JKRUNUX0NMQVNTCQkga2V5X2NsYXNzOwotLQlDS19BVFRSSUJVVEUJ CSBrZXlfYXR0clsyXTsKLSsJQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbM107Ci0rCWludAkJCSBu YXR0ciA9IDE7Ci0gCUNLX1NFU1NJT05fSEFORExFCSBzZXNzaW9uOwotIAlDS19GVU5DVElPTl9M SVNUCSpmID0gTlVMTDsKLSAJQ0tfUlYJCQkgcnY7Ci1AQCAtMTU1MywxMCArMTcxNywyMyBAQCBw a2NzMTFfZmV0Y2hfa2V5cyhzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90 aWR4LAotIAlrZXlfYXR0clswXS5wVmFsdWUgPSAma2V5X2NsYXNzOwotIAlrZXlfYXR0clswXS51 bFZhbHVlTGVuID0gc2l6ZW9mKGtleV9jbGFzcyk7Ci0gCi0tCXNlc3Npb24gPSBwLT5zbG90aW5m b1tzbG90aWR4XS5zZXNzaW9uOwotLQlmID0gcC0+ZnVuY3Rpb25fbGlzdDsKLSsJaWYgKHVyaS0+ aWQgIT0gTlVMTCkgewotKwkJa2V5X2F0dHJbbmF0dHJdLnR5cGUgPSBDS0FfSUQ7Ci0rCQlrZXlf YXR0cltuYXR0cl0ucFZhbHVlID0gdXJpLT5pZDsKLSsJCWtleV9hdHRyW25hdHRyXS51bFZhbHVl TGVuID0gdXJpLT5pZF9sZW47Ci0rCQluYXR0cisrOwotKwl9Ci0rCWlmICh1cmktPm9iamVjdCAh PSBOVUxMKSB7Ci0rCQlrZXlfYXR0cltuYXR0cl0udHlwZSA9IENLQV9MQUJFTDsKLSsJCWtleV9h dHRyW25hdHRyXS5wVmFsdWUgPSB1cmktPm9iamVjdDsKLSsJCWtleV9hdHRyW25hdHRyXS51bFZh bHVlTGVuID0gc3RybGVuKHVyaS0+b2JqZWN0KTsKLSsJCW5hdHRyKys7Ci0rCX0KLSsKLSsJc2Vz c2lvbiA9IHAtPm1vZHVsZS0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKLSsJZiA9IHAtPm1v ZHVsZS0+ZnVuY3Rpb25fbGlzdDsKLSAKLS0JcnYgPSBmLT5DX0ZpbmRPYmplY3RzSW5pdChzZXNz aW9uLCBrZXlfYXR0ciwgMSk7Ci0rCXJ2ID0gZi0+Q19GaW5kT2JqZWN0c0luaXQoc2Vzc2lvbiwg a2V5X2F0dHIsIG5hdHRyKTsKLSAJaWYgKHJ2ICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfRmlu ZE9iamVjdHNJbml0IGZhaWxlZDogJWx1IiwgcnYpOwotIAkJZ290byBmYWlsOwotQEAgLTE4NDQs MTYgKzIwMjEsMTAgQEAgcGtjczExX2VjZHNhX2dlbmVyYXRlX3ByaXZhdGVfa2V5KHN0cnVjdCBw a2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCi0gfQotICNlbmRpZiAvKiBXSVRI X1BLQ1MxMV9LRVlHRU4gKi8KLSAKLS0vKgotLSAqIHJlZ2lzdGVyIGEgbmV3IHByb3ZpZGVyLCBm YWlscyBpZiBwcm92aWRlciBhbHJlYWR5IGV4aXN0cy4gaWYKLS0gKiBrZXlwIGlzIHByb3ZpZGVk LCBmZXRjaCBrZXlzLgotLSAqLwotIHN0YXRpYyBpbnQKLS1wa2NzMTFfcmVnaXN0ZXJfcHJvdmlk ZXIoY2hhciAqcHJvdmlkZXJfaWQsIGNoYXIgKnBpbiwKLS0gICAgc3RydWN0IHNzaGtleSAqKipr ZXlwLCBjaGFyICoqKmxhYmVsc3AsCi0tICAgIHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKipwcm92 aWRlcnAsIENLX1VMT05HIHVzZXIpCi0rcGtjczExX2luaXRpYWxpemVfcHJvdmlkZXIoc3RydWN0 IHBrY3MxMV91cmkgKnVyaSwgc3RydWN0IHBrY3MxMV9wcm92aWRlciAqKnByb3ZpZGVycCkKLSB7 Ci0tCWludCBua2V5cywgbmVlZF9maW5hbGl6ZSA9IDA7Ci0rCWludCBuZWVkX2ZpbmFsaXplID0g MDsKLSAJaW50IHJldCA9IC0xOwotIAlzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwID0gTlVMTDsK LSAJdm9pZCAqaGFuZGxlID0gTlVMTDsKLUBAIC0xODYyLDEyOCArMjAzMywxMjYgQEAgcGtjczEx X3JlZ2lzdGVyX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sCi0gCUNLX0ZV TkNUSU9OX0xJU1QgKmYgPSBOVUxMOwotIAlDS19UT0tFTl9JTkZPICp0b2tlbjsKLSAJQ0tfVUxP TkcgaTsKLSsJY2hhciAqcHJvdmlkZXJfbW9kdWxlID0gTlVMTDsKLSsJc3RydWN0IHBrY3MxMV9t b2R1bGUgKm0gPSBOVUxMOwotKwotKwkvKiBpZiBubyBwcm92aWRlciBzcGVjaWZpZWQsIGZhbGxi YWNrIHRvIHAxMS1raXQgKi8KLSsJaWYgKHVyaS0+bW9kdWxlX3BhdGggPT0gTlVMTCkgewotKyNp ZmRlZiBQS0NTMTFfREVGQVVMVF9QUk9WSURFUgotKwkJcHJvdmlkZXJfbW9kdWxlID0gc3RyZHVw KFBLQ1MxMV9ERUZBVUxUX1BST1ZJREVSKTsKLSsjZWxzZQotKwkJZXJyb3JfZigiTm8gbW9kdWxl IHBhdGggcHJvdmlkZWQiKTsKLSsgCQlnb3RvIGZhaWw7Ci0rI2VuZGlmCi0rCX0gZWxzZSB7Ci0r CQlwcm92aWRlcl9tb2R1bGUgPSBzdHJkdXAodXJpLT5tb2R1bGVfcGF0aCk7Ci0rCX0KLSsJcCA9 IHhjYWxsb2MoMSwgc2l6ZW9mKCpwKSk7Ci0rCXAtPm5hbWUgPSBwa2NzMTFfdXJpX2dldCh1cmkp OwotIAotLQlpZiAocHJvdmlkZXJwID09IE5VTEwpCi0tCQlnb3RvIGZhaWw7Ci0tCSpwcm92aWRl cnAgPSBOVUxMOwotLQotLQlpZiAoa2V5cCAhPSBOVUxMKQotLQkJKmtleXAgPSBOVUxMOwotLQlp ZiAobGFiZWxzcCAhPSBOVUxMKQotLQkJKmxhYmVsc3AgPSBOVUxMOwotLQotLQlpZiAocGtjczEx X3Byb3ZpZGVyX2xvb2t1cChwcm92aWRlcl9pZCkgIT0gTlVMTCkgewotLQkJZGVidWdfZigicHJv dmlkZXIgYWxyZWFkeSByZWdpc3RlcmVkOiAlcyIsIHByb3ZpZGVyX2lkKTsKLSsJaWYgKGxpYl9j b250YWluc19zeW1ib2wocHJvdmlkZXJfbW9kdWxlLCAiQ19HZXRGdW5jdGlvbkxpc3QiKSAhPSAw KSB7Ci0rCQllcnJvcigicHJvdmlkZXIgJXMgaXMgbm90IGEgUEtDUzExIGxpYnJhcnkiLCBwcm92 aWRlcl9tb2R1bGUpOwotIAkJZ290byBmYWlsOwotIAl9Ci0tCWlmIChsaWJfY29udGFpbnNfc3lt Ym9sKHByb3ZpZGVyX2lkLCAiQ19HZXRGdW5jdGlvbkxpc3QiKSAhPSAwKSB7Ci0tCQllcnJvcigi cHJvdmlkZXIgJXMgaXMgbm90IGEgUEtDUzExIGxpYnJhcnkiLCBwcm92aWRlcl9pZCk7Ci0tCQln b3RvIGZhaWw7Ci0rCWlmICgobSA9IHBrY3MxMV9wcm92aWRlcl9sb29rdXBfbW9kdWxlKHByb3Zp ZGVyX21vZHVsZSkpICE9IE5VTEwKLSsJICAgJiYgbS0+dmFsaWQpIHsKLSsJCWRlYnVnX2YoInBy b3ZpZGVyIG1vZHVsZSBhbHJlYWR5IGluaXRpYWxpemVkOiAlcyIsIHByb3ZpZGVyX21vZHVsZSk7 Ci0rCQlmcmVlKHByb3ZpZGVyX21vZHVsZSk7Ci0rCQkvKiBTa2lwIHRoZSBpbml0aWFsaXphdGlv biBvZiBQS0NTIzExIG1vZHVsZSAqLwotKwkJbS0+cmVmY291bnQrKzsKLSsJCXAtPm1vZHVsZSA9 IG07Ci0rCQlwLT52YWxpZCA9IDE7Ci0rCQlUQUlMUV9JTlNFUlRfVEFJTCgmcGtjczExX3Byb3Zp ZGVycywgcCwgbmV4dCk7Ci0rCQlwLT5yZWZjb3VudCsrOwkvKiBhZGQgdG8gcHJvdmlkZXIgbGlz dCAqLwotKwkJKnByb3ZpZGVycCA9IHA7Ci0rCQlyZXR1cm4gMDsKLSsJfSBlbHNlIHsKLSsJCW0g PSB4Y2FsbG9jKDEsIHNpemVvZigqbSkpOwotKwkJcC0+bW9kdWxlID0gbTsKLSsJCW0tPnJlZmNv dW50Kys7Ci0gCX0KLSsKLSAJLyogb3BlbiBzaGFyZWQgcGtjczExLWxpYnJhcnkgKi8KLS0JaWYg KChoYW5kbGUgPSBkbG9wZW4ocHJvdmlkZXJfaWQsIFJUTERfTk9XKSkgPT0gTlVMTCkgewotLQkJ ZXJyb3IoImRsb3BlbiAlcyBmYWlsZWQ6ICVzIiwgcHJvdmlkZXJfaWQsIGRsZXJyb3IoKSk7Ci0r CWlmICgoaGFuZGxlID0gZGxvcGVuKHByb3ZpZGVyX21vZHVsZSwgUlRMRF9OT1cpKSA9PSBOVUxM KSB7Ci0rCQllcnJvcigiZGxvcGVuICVzIGZhaWxlZDogJXMiLCBwcm92aWRlcl9tb2R1bGUsIGRs ZXJyb3IoKSk7Ci0gCQlnb3RvIGZhaWw7Ci0gCX0KLSAJaWYgKChnZXRmdW5jdGlvbmxpc3QgPSBk bHN5bShoYW5kbGUsICJDX0dldEZ1bmN0aW9uTGlzdCIpKSA9PSBOVUxMKQotIAkJZmF0YWwoImRs c3ltKENfR2V0RnVuY3Rpb25MaXN0KSBmYWlsZWQ6ICVzIiwgZGxlcnJvcigpKTsKLS0JcCA9IHhj YWxsb2MoMSwgc2l6ZW9mKCpwKSk7Ci0tCXAtPm5hbWUgPSB4c3RyZHVwKHByb3ZpZGVyX2lkKTsK LS0JcC0+aGFuZGxlID0gaGFuZGxlOwotKwlwLT5tb2R1bGUtPmhhbmRsZSA9IGhhbmRsZTsKLSAJ Lyogc2V0dXAgdGhlIHBrY3MxMSBjYWxsYmFja3MgKi8KLSAJaWYgKChydiA9ICgqZ2V0ZnVuY3Rp b25saXN0KSgmZikpICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0RnVuY3Rpb25MaXN0IGZv ciBwcm92aWRlciAlcyBmYWlsZWQ6ICVsdSIsCi0tCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKLSsJ CSAgICBwcm92aWRlcl9tb2R1bGUsIHJ2KTsKLSAJCWdvdG8gZmFpbDsKLSAJfQotLQlwLT5mdW5j dGlvbl9saXN0ID0gZjsKLSsJbS0+ZnVuY3Rpb25fbGlzdCA9IGY7Ci0gCWlmICgocnYgPSBmLT5D X0luaXRpYWxpemUoTlVMTCkpICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfSW5pdGlhbGl6ZSBm b3IgcHJvdmlkZXIgJXMgZmFpbGVkOiAlbHUiLAotLQkJICAgIHByb3ZpZGVyX2lkLCBydik7Ci0r CQkgICAgcHJvdmlkZXJfbW9kdWxlLCBydik7Ci0gCQlnb3RvIGZhaWw7Ci0gCX0KLSAJbmVlZF9m aW5hbGl6ZSA9IDE7Ci0tCWlmICgocnYgPSBmLT5DX0dldEluZm8oJnAtPmluZm8pKSAhPSBDS1Jf T0spIHsKLSsJaWYgKChydiA9IGYtPkNfR2V0SW5mbygmbS0+aW5mbykpICE9IENLUl9PSykgewot IAkJZXJyb3IoIkNfR2V0SW5mbyBmb3IgcHJvdmlkZXIgJXMgZmFpbGVkOiAlbHUiLAotLQkJICAg IHByb3ZpZGVyX2lkLCBydik7Ci0rCQkgICAgcHJvdmlkZXJfbW9kdWxlLCBydik7Ci0gCQlnb3Rv IGZhaWw7Ci0gCX0KLS0JZGVidWcoInByb3ZpZGVyICVzOiBtYW51ZmFjdHVyZXJJRCA8JS4qcz4g Y3J5cHRva2lWZXJzaW9uICVkLiVkIgotLQkgICAgIiBsaWJyYXJ5RGVzY3JpcHRpb24gPCUuKnM+ IGxpYnJhcnlWZXJzaW9uICVkLiVkIiwKLS0JICAgIHByb3ZpZGVyX2lkLAotLQkgICAgUk1TUEFD RShwLT5pbmZvLm1hbnVmYWN0dXJlcklEKSwKLS0JICAgIHAtPmluZm8uY3J5cHRva2lWZXJzaW9u Lm1ham9yLAotLQkgICAgcC0+aW5mby5jcnlwdG9raVZlcnNpb24ubWlub3IsCi0tCSAgICBSTVNQ QUNFKHAtPmluZm8ubGlicmFyeURlc2NyaXB0aW9uKSwKLS0JICAgIHAtPmluZm8ubGlicmFyeVZl cnNpb24ubWFqb3IsCi0tCSAgICBwLT5pbmZvLmxpYnJhcnlWZXJzaW9uLm1pbm9yKTsKLS0JaWYg KChydiA9IGYtPkNfR2V0U2xvdExpc3QoQ0tfVFJVRSwgTlVMTCwgJnAtPm5zbG90cykpICE9IENL Ul9PSykgewotKwlybXNwYWNlKG0tPmluZm8ubWFudWZhY3R1cmVySUQsIHNpemVvZihtLT5pbmZv Lm1hbnVmYWN0dXJlcklEKSk7Ci0rCWlmICh1cmktPmxpYl9tYW51ZiAhPSBOVUxMICYmCi0rCSAg ICBzdHJuY21wKHVyaS0+bGliX21hbnVmLCBtLT5pbmZvLm1hbnVmYWN0dXJlcklELCAzMikpIHsK LSsJCWRlYnVnX2YoIlNraXBwaW5nIHByb3ZpZGVyICVzIG5vdCBtYXRjaGluZyBsaWJyYXJ5X21h bnVmYWN0dXJlciIsCi0rCQkgICAgbS0+aW5mby5tYW51ZmFjdHVyZXJJRCk7Ci0rIAkJZ290byBm YWlsOwotKyAJfQotKwlybXNwYWNlKG0tPmluZm8ubGlicmFyeURlc2NyaXB0aW9uLCBzaXplb2Yo bS0+aW5mby5saWJyYXJ5RGVzY3JpcHRpb24pKTsKLSsJZGVidWcoInByb3ZpZGVyICVzOiBtYW51 ZmFjdHVyZXJJRCA8JS4zMnM+IGNyeXB0b2tpVmVyc2lvbiAlZC4lZCIKLSsJICAgICIgbGlicmFy eURlc2NyaXB0aW9uIDwlLjMycz4gbGlicmFyeVZlcnNpb24gJWQuJWQiLAotKwkgICAgcHJvdmlk ZXJfbW9kdWxlLAotKwkgICAgbS0+aW5mby5tYW51ZmFjdHVyZXJJRCwKLSsJICAgIG0tPmluZm8u Y3J5cHRva2lWZXJzaW9uLm1ham9yLAotKwkgICAgbS0+aW5mby5jcnlwdG9raVZlcnNpb24ubWlu b3IsCi0rCSAgICBtLT5pbmZvLmxpYnJhcnlEZXNjcmlwdGlvbiwKLSsJICAgIG0tPmluZm8ubGli cmFyeVZlcnNpb24ubWFqb3IsCi0rCSAgICBtLT5pbmZvLmxpYnJhcnlWZXJzaW9uLm1pbm9yKTsK LSsKLSsJaWYgKChydiA9IGYtPkNfR2V0U2xvdExpc3QoQ0tfVFJVRSwgTlVMTCwgJm0tPm5zbG90 cykpICE9IENLUl9PSykgewotIAkJZXJyb3IoIkNfR2V0U2xvdExpc3QgZmFpbGVkOiAlbHUiLCBy dik7Ci0gCQlnb3RvIGZhaWw7Ci0gCX0KLS0JaWYgKHAtPm5zbG90cyA9PSAwKSB7Ci0tCQlkZWJ1 Z19mKCJwcm92aWRlciAlcyByZXR1cm5lZCBubyBzbG90cyIsIHByb3ZpZGVyX2lkKTsKLSsJaWYg KG0tPm5zbG90cyA9PSAwKSB7Ci0rCQlkZWJ1Z19mKCJwcm92aWRlciAlcyByZXR1cm5lZCBubyBz bG90cyIsIHByb3ZpZGVyX21vZHVsZSk7Ci0gCQlyZXQgPSAtU1NIX1BLQ1MxMV9FUlJfTk9fU0xP VFM7Ci0gCQlnb3RvIGZhaWw7Ci0gCX0KLS0JcC0+c2xvdGxpc3QgPSB4Y2FsbG9jKHAtPm5zbG90 cywgc2l6ZW9mKENLX1NMT1RfSUQpKTsKLS0JaWYgKChydiA9IGYtPkNfR2V0U2xvdExpc3QoQ0tf VFJVRSwgcC0+c2xvdGxpc3QsICZwLT5uc2xvdHMpKQotKwltLT5zbG90bGlzdCA9IHhjYWxsb2Mo bS0+bnNsb3RzLCBzaXplb2YoQ0tfU0xPVF9JRCkpOwotKwlpZiAoKHJ2ID0gZi0+Q19HZXRTbG90 TGlzdChDS19UUlVFLCBtLT5zbG90bGlzdCwgJm0tPm5zbG90cykpCi0gCSAgICAhPSBDS1JfT0sp IHsKLSAJCWVycm9yKCJDX0dldFNsb3RMaXN0IGZvciBwcm92aWRlciAlcyBmYWlsZWQ6ICVsdSIs Ci0tCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKLSsJCSAgICBwcm92aWRlcl9tb2R1bGUsIHJ2KTsK LSAJCWdvdG8gZmFpbDsKLSAJfQotLQlwLT5zbG90aW5mbyA9IHhjYWxsb2MocC0+bnNsb3RzLCBz aXplb2Yoc3RydWN0IHBrY3MxMV9zbG90aW5mbykpOwotKwltLT5zbG90aW5mbyA9IHhjYWxsb2Mo bS0+bnNsb3RzLCBzaXplb2Yoc3RydWN0IHBrY3MxMV9zbG90aW5mbykpOwotIAlwLT52YWxpZCA9 IDE7Ci0tCW5rZXlzID0gMDsKLS0JZm9yIChpID0gMDsgaSA8IHAtPm5zbG90czsgaSsrKSB7Ci0t CQl0b2tlbiA9ICZwLT5zbG90aW5mb1tpXS50b2tlbjsKLS0JCWlmICgocnYgPSBmLT5DX0dldFRv a2VuSW5mbyhwLT5zbG90bGlzdFtpXSwgdG9rZW4pKQotKwltLT52YWxpZCA9IDE7Ci0rCWZvciAo aSA9IDA7IGkgPCBtLT5uc2xvdHM7IGkrKykgewotKwkJdG9rZW4gPSAmbS0+c2xvdGluZm9baV0u dG9rZW47Ci0rCQlpZiAoKHJ2ID0gZi0+Q19HZXRUb2tlbkluZm8obS0+c2xvdGxpc3RbaV0sIHRv a2VuKSkKLSAJCSAgICAhPSBDS1JfT0spIHsKLSAJCQllcnJvcigiQ19HZXRUb2tlbkluZm8gZm9y IHByb3ZpZGVyICVzIHNsb3QgJWx1ICIKLS0JCQkgICAgImZhaWxlZDogJWx1IiwgcHJvdmlkZXJf aWQsICh1X2xvbmcpaSwgcnYpOwotLQkJCWNvbnRpbnVlOwotLQkJfQotLQkJaWYgKCh0b2tlbi0+ ZmxhZ3MgJiBDS0ZfVE9LRU5fSU5JVElBTElaRUQpID09IDApIHsKLS0JCQlkZWJ1ZzJfZigiaWdu b3JpbmcgdW5pbml0aWFsaXNlZCB0b2tlbiBpbiAiCi0tCQkJICAgICJwcm92aWRlciAlcyBzbG90 ICVsdSIsIHByb3ZpZGVyX2lkLCAodV9sb25nKWkpOwotKwkJCSAgICAiZmFpbGVkOiAlbHUiLCBw cm92aWRlcl9tb2R1bGUsICh1X2xvbmcpaSwgcnYpOwotIAkJCWNvbnRpbnVlOwotIAkJfQotIAkJ ZGVidWcoInByb3ZpZGVyICVzIHNsb3QgJWx1OiBsYWJlbCA8JS4qcz4gIgotIAkJICAgICJtYW51 ZmFjdHVyZXJJRCA8JS4qcz4gbW9kZWwgPCUuKnM+IHNlcmlhbCA8JS4qcz4gIgotIAkJICAgICJm bGFncyAweCVseCIsCi0tCQkgICAgcHJvdmlkZXJfaWQsICh1bnNpZ25lZCBsb25nKWksCi0rCQkg ICAgcHJvdmlkZXJfbW9kdWxlLCAodW5zaWduZWQgbG9uZylpLAotIAkJICAgIFJNU1BBQ0UodG9r ZW4tPmxhYmVsKSwgUk1TUEFDRSh0b2tlbi0+bWFudWZhY3R1cmVySUQpLAotIAkJICAgIFJNU1BB Q0UodG9rZW4tPm1vZGVsKSwgUk1TUEFDRSh0b2tlbi0+c2VyaWFsTnVtYmVyKSwKLSAJCSAgICB0 b2tlbi0+ZmxhZ3MpOwotLQkJLyoKLS0JCSAqIG9wZW4gc2Vzc2lvbiwgbG9naW4gd2l0aCBwaW4g YW5kIHJldHJpZXZlIHB1YmxpYwotLQkJICoga2V5cyAoaWYga2V5cCBpcyBwcm92aWRlZCkKLS0J CSAqLwotLQkJaWYgKChyZXQgPSBwa2NzMTFfb3Blbl9zZXNzaW9uKHAsIGksIHBpbiwgdXNlcikp ICE9IDAgfHwKLS0JCSAgICBrZXlwID09IE5VTEwpCi0tCQkJY29udGludWU7Ci0tCQlwa2NzMTFf ZmV0Y2hfa2V5cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMpOwotLSNpZmRlZiBXSVRIX09Q RU5TU0wKLS0JCXBrY3MxMV9mZXRjaF9jZXJ0cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMp OwotLSNlbmRpZgotLQkJaWYgKG5rZXlzID09IDAgJiYgIXAtPnNsb3RpbmZvW2ldLmxvZ2dlZF9p biAmJgotLQkJICAgIHBrY3MxMV9pbnRlcmFjdGl2ZSkgewotLQkJCS8qCi0tCQkJICogU29tZSB0 b2tlbnMgcmVxdWlyZSBsb2dpbiBiZWZvcmUgdGhleSB3aWxsCi0tCQkJICogZXhwb3NlIGtleXMu Ci0tCQkJICovCi0tCQkJaWYgKHBrY3MxMV9sb2dpbl9zbG90KHAsICZwLT5zbG90aW5mb1tpXSwK LS0JCQkgICAgQ0tVX1VTRVIpIDwgMCkgewotLQkJCQllcnJvcigibG9naW4gZmFpbGVkIik7Ci0t CQkJCWNvbnRpbnVlOwotLQkJCX0KLS0JCQlwa2NzMTFfZmV0Y2hfa2V5cyhwLCBpLCBrZXlwLCBs YWJlbHNwLCAmbmtleXMpOwotLSNpZmRlZiBXSVRIX09QRU5TU0wKLS0JCQlwa2NzMTFfZmV0Y2hf Y2VydHMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzKTsKLS0jZW5kaWYKLS0JCX0KLSAJfQot KwltLT5tb2R1bGVfcGF0aCA9IHByb3ZpZGVyX21vZHVsZTsKLSsJcHJvdmlkZXJfbW9kdWxlID0g TlVMTDsKLSAKLSAJLyogbm93IG93bmVkIGJ5IGNhbGxlciAqLwotIAkqcHJvdmlkZXJwID0gcDsK LUBAIC0xOTkxLDIxICsyMTYwLDIyIEBAIHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcihjaGFyICpw cm92aWRlcl9pZCwgY2hhciAqcGluLAotIAlUQUlMUV9JTlNFUlRfVEFJTCgmcGtjczExX3Byb3Zp ZGVycywgcCwgbmV4dCk7Ci0gCXAtPnJlZmNvdW50Kys7CS8qIGFkZCB0byBwcm92aWRlciBsaXN0 ICovCi0gCi0tCXJldHVybiAobmtleXMpOwotKwlyZXR1cm4gMDsKLSBmYWlsOgotIAlpZiAobmVl ZF9maW5hbGl6ZSAmJiAocnYgPSBmLT5DX0ZpbmFsaXplKE5VTEwpKSAhPSBDS1JfT0spCi0gCQll cnJvcigiQ19GaW5hbGl6ZSBmb3IgcHJvdmlkZXIgJXMgZmFpbGVkOiAlbHUiLAotLQkJICAgIHBy b3ZpZGVyX2lkLCBydik7Ci0rCQkgICAgcHJvdmlkZXJfbW9kdWxlLCBydik7Ci0rCWZyZWUocHJv dmlkZXJfbW9kdWxlKTsKLSsJaWYgKG0pIHsKLSsJCWZyZWUobS0+c2xvdGxpc3QpOwotKwkJZnJl ZShtKTsKLSsJfQotIAlpZiAocCkgewotIAkJZnJlZShwLT5uYW1lKTsKLS0JCWZyZWUocC0+c2xv dGxpc3QpOwotLQkJZnJlZShwLT5zbG90aW5mbyk7Ci0gCQlmcmVlKHApOwotIAl9Ci0gCWlmICho YW5kbGUpCi0gCQlkbGNsb3NlKGhhbmRsZSk7Ci0tCWlmIChyZXQgPiAwKQotLQkJcmV0ID0gLTE7 Ci0gCXJldHVybiAocmV0KTsKLSB9Ci0gCi1AQCAtMjA0MSwxOCArMjIxMSwxNjEgQEAgcGtjczEx X3Rlcm1pbmF0ZSh2b2lkKQotIH0KLSAKLSAvKgotLSAqIHJlZ2lzdGVyIGEgbmV3IHByb3ZpZGVy IGFuZCBnZXQgbnVtYmVyIG9mIGtleXMgaG9sZCBieSB0aGUgdG9rZW4sCi0tICogZmFpbHMgaWYg cHJvdmlkZXIgYWxyZWFkeSBleGlzdHMKLSsgKiByZWdpc3RlciBhIG5ldyBwcm92aWRlciwgZmFp bHMgaWYgcHJvdmlkZXIgYWxyZWFkeSBleGlzdHMuIGlmCi0rICoga2V5cCBpcyBwcm92aWRlZCwg ZmV0Y2gga2V5cy4KLSAgKi8KLStzdGF0aWMgaW50Ci0rcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVy X2J5X3VyaShzdHJ1Y3QgcGtjczExX3VyaSAqdXJpLCBjaGFyICpwaW4sCi0rICAgIHN0cnVjdCBz c2hrZXkgKioqa2V5cCwgY2hhciAqKipsYWJlbHNwLCBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoq cHJvdmlkZXJwLAotKyAgICBDS19VTE9ORyB1c2VyKQotK3sKLSsJaW50IG5rZXlzOwotKwlpbnQg cmV0ID0gLTE7Ci0rCXN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAgPSBOVUxMOwotKwlDS19VTE9O RyBpOwotKwlDS19UT0tFTl9JTkZPICp0b2tlbjsKLSsJY2hhciAqcHJvdmlkZXJfdXJpID0gTlVM TDsKLSsKLSsJaWYgKHByb3ZpZGVycCA9PSBOVUxMKQotKwkJZ290byBmYWlsOwotKwkqcHJvdmlk ZXJwID0gTlVMTDsKLSsKLSsJaWYgKGtleXAgIT0gTlVMTCkKLSsJCSprZXlwID0gTlVMTDsKLSsK LSsJaWYgKChyZXQgPSBwa2NzMTFfaW5pdGlhbGl6ZV9wcm92aWRlcih1cmksICZwKSkgIT0gMCkg ewotKwkJZ290byBmYWlsOwotKwl9Ci0rCi0rCXByb3ZpZGVyX3VyaSA9IHBrY3MxMV91cmlfZ2V0 KHVyaSk7Ci0rCWlmIChwaW4gPT0gTlVMTCAmJiB1cmktPnBpbiAhPSBOVUxMKSB7Ci0rCQlwaW4g PSB1cmktPnBpbjsKLSsJfQotKwlua2V5cyA9IDA7Ci0rCWZvciAoaSA9IDA7IGkgPCBwLT5tb2R1 bGUtPm5zbG90czsgaSsrKSB7Ci0rCQl0b2tlbiA9ICZwLT5tb2R1bGUtPnNsb3RpbmZvW2ldLnRv a2VuOwotKwkJaWYgKCh0b2tlbi0+ZmxhZ3MgJiBDS0ZfVE9LRU5fSU5JVElBTElaRUQpID09IDAp IHsKLSsJCQlkZWJ1ZzJfZigiaWdub3JpbmcgdW5pbml0aWFsaXNlZCB0b2tlbiBpbiAiCi0rCQkJ ICAgICJwcm92aWRlciAlcyBzbG90ICVsdSIsIHByb3ZpZGVyX3VyaSwgKHVfbG9uZylpKTsKLSsJ CQljb250aW51ZTsKLSsJCX0KLSsJCWlmICh1cmktPnRva2VuICE9IE5VTEwgJiYKLSsJCSAgICBz dHJuY21wKHRva2VuLT5sYWJlbCwgdXJpLT50b2tlbiwgMzIpICE9IDApIHsKLSsJCQlkZWJ1ZzJf ZigiaWdub3JpbmcgdG9rZW4gbm90IG1hdGNoaW5nIGxhYmVsICglLjMycykgIgotKwkJCSAgICAi c3BlY2lmaWVkIGJ5IFBLQ1MjMTEgVVJJIGluIHNsb3QgJWx1IiwKLSsJCQkgICAgdG9rZW4tPmxh YmVsLCAodW5zaWduZWQgbG9uZylpKTsKLSsJCQljb250aW51ZTsKLSsJCX0KLSsJCWlmICh1cmkt Pm1hbnVmICE9IE5VTEwgJiYKLSsJCSAgICBzdHJuY21wKHRva2VuLT5tYW51ZmFjdHVyZXJJRCwg dXJpLT5tYW51ZiwgMzIpICE9IDApIHsKLSsJCQlkZWJ1ZzJfZigiaWdub3JpbmcgdG9rZW4gbm90 IG1hdGNoaW5nIHJlcXVyZXN0ZWQgIgotKwkJCSAgICAibWFudWZhY3R1cmVySUQgKCUuMzJzKSBz cGVjaWZpZWQgYnkgUEtDUyMxMSBVUkkgaW4gIgotKwkJCSAgICAic2xvdCAlbHUiLCB0b2tlbi0+ bWFudWZhY3R1cmVySUQsICh1bnNpZ25lZCBsb25nKWkpOwotKwkJCWNvbnRpbnVlOwotKwkJfQot KwkJaWYgKHVyaS0+c2VyaWFsICE9IE5VTEwgJiYKLSsJCSAgICBzdHJuY21wKHRva2VuLT5zZXJp YWxOdW1iZXIsIHVyaS0+c2VyaWFsLCAxNikgIT0gMCkgewotKwkJCWRlYnVnMl9mKCJpZ25vcmlu ZyB0b2tlbiBub3QgbWF0Y2hpbmcgcmVxdXJlc3RlZCAiCi0rCQkJICAgICJzZXJpYWxOdW1iZXIg KCVzKSBzcGVjaWZpZWQgYnkgUEtDUyMxMSBVUkkgaW4gIgotKwkJCSAgICAic2xvdCAlbHUiLCB0 b2tlbi0+c2VyaWFsTnVtYmVyLCAodW5zaWduZWQgbG9uZylpKTsKLSsJCQljb250aW51ZTsKLSsJ CX0KLSsJCWRlYnVnKCJwcm92aWRlciAlcyBzbG90ICVsdTogbGFiZWwgPCUuMzJzPiBtYW51ZmFj dHVyZXJJRCA8JS4zMnM+ICIKLSsJCSAgICAibW9kZWwgPCUuMTZzPiBzZXJpYWwgPCUuMTZzPiBm bGFncyAweCVseCIsCi0rCQkgICAgcHJvdmlkZXJfdXJpLCAodW5zaWduZWQgbG9uZylpLAotKwkJ ICAgIHRva2VuLT5sYWJlbCwgdG9rZW4tPm1hbnVmYWN0dXJlcklELCB0b2tlbi0+bW9kZWwsCi0r CQkgICAgdG9rZW4tPnNlcmlhbE51bWJlciwgdG9rZW4tPmZsYWdzKTsKLSsJCS8qCi0rCQkgKiBv cGVuIHNlc3Npb24gaWYgbm90IHlldCBvcGVuZWQsIGxvZ2luIHdpdGggcGluIGFuZAotKwkJICog cmV0cmlldmUgcHVibGljIGtleXMgKGlmIGtleXAgaXMgcHJvdmlkZWQpCi0rCQkgKi8KLSsJCWlm ICgocC0+bW9kdWxlLT5zbG90aW5mb1tpXS5zZXNzaW9uICE9IDAgfHwKLSsJCSAgICAocmV0ID0g cGtjczExX29wZW5fc2Vzc2lvbihwLCBpLCBwaW4sIHVzZXIpKSAhPSAwKSAmJiAvKiA/Pz8gKi8K LSsJCSAgICBrZXlwID09IE5VTEwpCi0rCQkJY29udGludWU7Ci0rCQlwa2NzMTFfZmV0Y2hfa2V5 cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMsIHVyaSk7Ci0rCQlwa2NzMTFfZmV0Y2hfY2Vy dHMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1cmkpOwotKwkJaWYgKG5rZXlzID09IDAg JiYgIXAtPm1vZHVsZS0+c2xvdGluZm9baV0ubG9nZ2VkX2luICYmCi0rCQkgICAgcGtjczExX2lu dGVyYWN0aXZlKSB7Ci0rCQkJLyoKLSsJCQkgKiBTb21lIHRva2VucyByZXF1aXJlIGxvZ2luIGJl Zm9yZSB0aGV5IHdpbGwKLSsJCQkgKiBleHBvc2Uga2V5cy4KLSsJCQkgKi8KLSsJCQlkZWJ1ZzNf ZigiVHJ5aW5nIHRvIGxvZ2luIGFzIHRoZXJlIHdlcmUgbm8ga2V5cyBmb3VuZCIpOwotKwkJCWlm IChwa2NzMTFfbG9naW5fc2xvdChwLCAmcC0+bW9kdWxlLT5zbG90aW5mb1tpXSwKLSsJCQkgICAg Q0tVX1VTRVIpIDwgMCkgewotKwkJCQllcnJvcigibG9naW4gZmFpbGVkIik7Ci0rCQkJCWNvbnRp bnVlOwotKwkJCX0KLSsJCQlwa2NzMTFfZmV0Y2hfa2V5cyhwLCBpLCBrZXlwLCBsYWJlbHNwLCAm bmtleXMsIHVyaSk7Ci0rCQkJcGtjczExX2ZldGNoX2NlcnRzKHAsIGksIGtleXAsIGxhYmVsc3As ICZua2V5cywgdXJpKTsKLSsJCX0KLSsJCWlmIChua2V5cyA9PSAwICYmIHVyaS0+b2JqZWN0ICE9 IE5VTEwpIHsKLSsJCQlkZWJ1ZzNfZigiTm8ga2V5cyBmb3VuZC4gUmV0cnlpbmcgd2l0aG91dCBs YWJlbCAoJS4zMnMpICIsCi0rCQkJICAgIHVyaS0+b2JqZWN0KTsKLSsJCQkvKiBUcnkgb25jZSBt b3JlIHdpdGhvdXQgdGhlIGxhYmVsIGZpbHRlciAqLwotKwkJCWNoYXIgKmxhYmVsID0gdXJpLT5v YmplY3Q7Ci0rCQkJdXJpLT5vYmplY3QgPSBOVUxMOyAvKiBYWFggY2xvbmUgdXJpPyAqLwotKwkJ CXBrY3MxMV9mZXRjaF9rZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cywgdXJpKTsKLSsJ CQlwa2NzMTFfZmV0Y2hfY2VydHMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1cmkpOwot KwkJCXVyaS0+b2JqZWN0ID0gbGFiZWw7Ci0rCQl9Ci0rCX0KLSsJcGluID0gTlVMTDsgLyogV2ls bCBiZSBjbGVhbmVkIHVwIHdpdGggVVJJICovCi0rCi0rCS8qIG5vdyBvd25lZCBieSBjYWxsZXIg Ki8KLSsJKnByb3ZpZGVycCA9IHA7Ci0rCi0rCWZyZWUocHJvdmlkZXJfdXJpKTsKLSsJcmV0dXJu IChua2V5cyk7Ci0rIGZhaWw6Ci0rCWlmIChwKSB7Ci0rCQlUQUlMUV9SRU1PVkUoJnBrY3MxMV9w cm92aWRlcnMsIHAsIG5leHQpOwotKwkgICAgIAlwa2NzMTFfcHJvdmlkZXJfdW5yZWYocCk7Ci0r CX0KLSsJaWYgKHJldCA+IDApCi0rCQlyZXQgPSAtMTsKLSsJcmV0dXJuIChyZXQpOwotK30KLSsK LStzdGF0aWMgaW50Ci0rcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lk LCBjaGFyICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwKLSsgICAgY2hhciAqKipsYWJlbHNw LCBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoqcHJvdmlkZXJwLCBDS19VTE9ORyB1c2VyKQotK3sK LSsJc3RydWN0IHBrY3MxMV91cmkgKnVyaSA9IE5VTEw7Ci0rCWludCByOwotKwotKwlkZWJ1Z19m KCJjYWxsZWQsIHByb3ZpZGVyX2lkID0gJXMiLCBwcm92aWRlcl9pZCk7Ci0rCi0rCXVyaSA9IHBr Y3MxMV91cmlfaW5pdCgpOwotKwlpZiAodXJpID09IE5VTEwpCi0rCQlmYXRhbCgiZmFpbGVkIHRv IGluaXQgUEtDUyMxMSBVUkkiKTsKLSsKLSsJaWYgKHN0cmxlbihwcm92aWRlcl9pZCkgPj0gc3Ry bGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgotKwkgICAgc3RybmNtcChwcm92aWRlcl9pZCwgUEtD UzExX1VSSV9TQ0hFTUUsIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkpID09IDApIHsKLSsJCWlm IChwa2NzMTFfdXJpX3BhcnNlKHByb3ZpZGVyX2lkLCB1cmkpICE9IDApCi0rCQkJZmF0YWwoIkZh aWxlZCB0byBwYXJzZSBQS0NTIzExIFVSSSIpOwotKwl9IGVsc2UgewotKwkJdXJpLT5tb2R1bGVf cGF0aCA9IHN0cmR1cChwcm92aWRlcl9pZCk7Ci0rCX0KLSsKLSsJciA9IHBrY3MxMV9yZWdpc3Rl cl9wcm92aWRlcl9ieV91cmkodXJpLCBwaW4sIGtleXAsIGxhYmVsc3AsIHByb3ZpZGVycCwgdXNl cik7Ci0rCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOwotKwotKwlyZXR1cm4gcjsKLSt9Ci0rCi0g aW50Ci0tcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGluLCBz dHJ1Y3Qgc3Noa2V5ICoqKmtleXAsCi0tICAgIGNoYXIgKioqbGFiZWxzcCkKLStwa2NzMTFfYWRk X3Byb3ZpZGVyX2J5X3VyaShzdHJ1Y3QgcGtjczExX3VyaSAqdXJpLCBjaGFyICpwaW4sCi0rICAg IHN0cnVjdCBzc2hrZXkgKioqa2V5cCwgY2hhciAqKipsYWJlbHNwKQotIHsKLSAJc3RydWN0IHBr Y3MxMV9wcm92aWRlciAqcCA9IE5VTEw7Ci0gCWludCBua2V5czsKLSsJY2hhciAqcHJvdmlkZXJf dXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsKLSsKLSsJZGVidWdfZigiY2FsbGVkLCBwcm92aWRl cl91cmkgPSAlcyIsIHByb3ZpZGVyX3VyaSk7Ci0gCi0tCW5rZXlzID0gcGtjczExX3JlZ2lzdGVy X3Byb3ZpZGVyKHByb3ZpZGVyX2lkLCBwaW4sIGtleXAsIGxhYmVsc3AsCi0tCSAgICAmcCwgQ0tV X1VTRVIpOwotKwlua2V5cyA9IHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRlcl9ieV91cmkodXJpLCBw aW4sIGtleXAsIGxhYmVsc3AsICZwLCBDS1VfVVNFUik7Ci0gCi0gCS8qIG5vIGtleXMgZm91bmQg b3Igc29tZSBvdGhlciBlcnJvciwgZGUtcmVnaXN0ZXIgcHJvdmlkZXIgKi8KLSAJaWYgKG5rZXlz IDw9IDAgJiYgcCAhPSBOVUxMKSB7Ci1AQCAtMjA2MSwxMSArMjM3NCwzOCBAQCBwa2NzMTFfYWRk X3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sIHN0cnVjdCBzc2hrZXkgKioq a2V5cCwKLSAJCXBrY3MxMV9wcm92aWRlcl91bnJlZihwKTsKLSAJfQotIAlpZiAobmtleXMgPT0g MCkKLS0JCWRlYnVnX2YoInByb3ZpZGVyICVzIHJldHVybmVkIG5vIGtleXMiLCBwcm92aWRlcl9p ZCk7Ci0rCQlkZWJ1Z19mKCJwcm92aWRlciAlcyByZXR1cm5lZCBubyBrZXlzIiwgcHJvdmlkZXJf dXJpKTsKLSAKLSsJZnJlZShwcm92aWRlcl91cmkpOwotIAlyZXR1cm4gKG5rZXlzKTsKLSB9Ci0g Ci0raW50Ci0rcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGlu LAotKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsIGNoYXIgKioqbGFiZWxzcCkKLSt7Ci0rCXN0 cnVjdCBwa2NzMTFfdXJpICp1cmk7Ci0rCWludCBua2V5czsKLSsKLSsJdXJpID0gcGtjczExX3Vy aV9pbml0KCk7Ci0rCWlmICh1cmkgPT0gTlVMTCkKLSsJCWZhdGFsKCJGYWlsZWQgdG8gaW5pdCBQ S0NTIzExIFVSSSIpOwotKwotKwlpZiAoc3RybGVuKHByb3ZpZGVyX2lkKSA+PSBzdHJsZW4oUEtD UzExX1VSSV9TQ0hFTUUpICYmCi0rCSAgICBzdHJuY21wKHByb3ZpZGVyX2lkLCBQS0NTMTFfVVJJ X1NDSEVNRSwgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkgewotKwkJaWYgKHBrY3Mx MV91cmlfcGFyc2UocHJvdmlkZXJfaWQsIHVyaSkgIT0gMCkKLSsJCQlmYXRhbCgiRmFpbGVkIHRv IHBhcnNlIFBLQ1MjMTEgVVJJIik7Ci0rCX0gZWxzZSB7Ci0rCQl1cmktPm1vZHVsZV9wYXRoID0g c3RyZHVwKHByb3ZpZGVyX2lkKTsKLSsJfQotKwotKwlua2V5cyA9IHBrY3MxMV9hZGRfcHJvdmlk ZXJfYnlfdXJpKHVyaSwgcGluLCBrZXlwLCBsYWJlbHNwKTsKLSsJcGtjczExX3VyaV9jbGVhbnVw KHVyaSk7Ci0rCi0rIAlyZXR1cm4gKG5rZXlzKTsKLSt9Ci0rCi0rCi0gaW50Ci0gcGtjczExX3Np Z24oc3RydWN0IHNzaGtleSAqa2V5LAotICAgICB1X2NoYXIgKipzaWdwLCBzaXplX3QgKmxlbnAs Ci1kaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS5oIGIvc3NoLXBrY3MxMS5oCi1pbmRleCBkODZjNTA2 YzEuLjMyZjJkMGNjZiAxMDA2NDQKLS0tLSBhL3NzaC1wa2NzMTEuaAotKysrIGIvc3NoLXBrY3Mx MS5oCi1AQCAtMjIsMTIgKzIyLDE2IEBACi0gI2RlZmluZQlTU0hfUEtDUzExX0VSUl9QSU5fUkVR VUlSRUQJCTQKLSAjZGVmaW5lCVNTSF9QS0NTMTFfRVJSX1BJTl9MT0NLRUQJCTUKLSAKLSsjaW5j bHVkZSAic3NoLXBrY3MxMS11cmkuaCIKLSsKLSBzdHJ1Y3Qgc3Noa2V5OwotIAotIGludAlwa2Nz MTFfaW5pdChpbnQpOwotIHZvaWQJcGtjczExX3Rlcm1pbmF0ZSh2b2lkKTsKLSBpbnQJcGtjczEx X2FkZF9wcm92aWRlcihjaGFyICosIGNoYXIgKiwgc3RydWN0IHNzaGtleSAqKiosIGNoYXIgKioq KTsKLStpbnQJcGtjczExX2FkZF9wcm92aWRlcl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkgKiwg Y2hhciAqLCBzdHJ1Y3Qgc3Noa2V5ICoqKiwgY2hhciAqKiopOwotIGludAlwa2NzMTFfZGVsX3By b3ZpZGVyKGNoYXIgKik7Ci0raW50CXBrY3MxMV91cmlfd3JpdGUoY29uc3Qgc3RydWN0IHNzaGtl eSAqLCBGSUxFICopOwotIGludAlwa2NzMTFfc2lnbihzdHJ1Y3Qgc3Noa2V5ICosIHVfY2hhciAq Kiwgc2l6ZV90ICosCi0gCSAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiwKLSAJICAgIGNvbnN0IGNoYXIgKiwgdV9pbnQpOwotZGlmZiAtLWdpdCBh L3NzaC5jIGIvc3NoLmMKLWluZGV4IDMyMGFjNjgzNC4uMTQ5NjVhNGYxIDEwMDY0NAotLS0tIGEv c3NoLmMKLSsrKyBiL3NzaC5jCi1AQCAtOTA0LDYgKzkwNCwxNCBAQCBtYWluKGludCBhYywgY2hh ciAqKmF2KQotIAkJCW9wdGlvbnMuZ3NzX2RlbGVnX2NyZWRzID0gMTsKLSAJCQlicmVhazsKLSAJ CWNhc2UgJ2knOgotKyNpZmRlZiBFTkFCTEVfUEtDUzExCi0rCQkJaWYgKHN0cmxlbihvcHRhcmcp ID49IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKLSsJCQkgICAgc3RybmNtcChvcHRhcmcs IFBLQ1MxMV9VUklfU0NIRU1FLAotKwkJCSAgICBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9 PSAwKSB7Ci0rCQkJCWFkZF9pZGVudGl0eV9maWxlKCZvcHRpb25zLCBOVUxMLCBvcHRhcmcsIDEp OwotKwkJCQlicmVhazsKLSsJCQl9Ci0rI2VuZGlmCi0gCQkJcCA9IHRpbGRlX2V4cGFuZF9maWxl bmFtZShvcHRhcmcsIGdldHVpZCgpKTsKLSAJCQlpZiAoc3RhdChwLCAmc3QpID09IC0xKQotIAkJ CQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IElkZW50aXR5IGZpbGUgJXMgIgotQEAgLTE4NzIs NiArMTg4MCw3IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCi0gI2lmZGVmIEVOQUJMRV9QS0NT MTEKLSAJKHZvaWQpcGtjczExX2RlbF9wcm92aWRlcihvcHRpb25zLnBrY3MxMV9wcm92aWRlcik7 Ci0gI2VuZGlmCi0rCXBrY3MxMV90ZXJtaW5hdGUoKTsKLSAKLSAgc2tpcF9jb25uZWN0OgotIAlp ZiAoYWRkcnMgIT0gTlVMTCkKLUBAIC0yMzg3LDYgKzIzOTYsNDUgQEAgc3NoX3Nlc3Npb24yKHN0 cnVjdCBzc2ggKnNzaCwgY29uc3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQotIAkgICAg b3B0aW9ucy5lc2NhcGVfY2hhciA6IFNTSF9FU0NBUEVDSEFSX05PTkUsIGlkKTsKLSB9Ci0gCi0r I2lmZGVmIEVOQUJMRV9QS0NTMTEKLStzdGF0aWMgdm9pZAotK2xvYWRfcGtjczExX2lkZW50aXR5 KGNoYXIgKnBrY3MxMV91cmksIGNoYXIgKmlkZW50aXR5X2ZpbGVzW10sCi0rICAgIHN0cnVjdCBz c2hrZXkgKmlkZW50aXR5X2tleXNbXSwgaW50ICpuX2lkcykKLSt7Ci0rCWludCBua2V5cywgaTsK LSsJc3RydWN0IHNzaGtleSAqKmtleXM7Ci0rCXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7Ci0rCi0r CWRlYnVnKCJpZGVudGl0eSBmaWxlICclcycgZnJvbSBwa2NzIzExIiwgcGtjczExX3VyaSk7Ci0r CXVyaSA9IHBrY3MxMV91cmlfaW5pdCgpOwotKwlpZiAodXJpID09IE5VTEwpCi0rCQlmYXRhbCgi RmFpbGVkIHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKLSsKLSsJaWYgKHBrY3MxMV91cmlfcGFyc2Uo cGtjczExX3VyaSwgdXJpKSAhPSAwKQotKwlmYXRhbCgiRmFpbGVkIHRvIHBhcnNlIFBLQ1MjMTEg VVJJICVzIiwgcGtjczExX3VyaSk7Ci0rCi0rCS8qIHdlIG5lZWQgdG8gbWVyZ2UgVVJJIGFuZCBw cm92aWRlciB0b2dldGhlciAqLwotKwlpZiAob3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIgIT0gTlVM TCAmJiB1cmktPm1vZHVsZV9wYXRoID09IE5VTEwpCi0rCQl1cmktPm1vZHVsZV9wYXRoID0gc3Ry ZHVwKG9wdGlvbnMucGtjczExX3Byb3ZpZGVyKTsKLSsKLSsJaWYgKG9wdGlvbnMubnVtX2lkZW50 aXR5X2ZpbGVzIDwgU1NIX01BWF9JREVOVElUWV9GSUxFUyAmJgotKwkgICAgKG5rZXlzID0gcGtj czExX2FkZF9wcm92aWRlcl9ieV91cmkodXJpLCBOVUxMLCAma2V5cywgTlVMTCkpID4gMCkgewot KwkJZm9yIChpID0gMDsgaSA8IG5rZXlzOyBpKyspIHsKLSsJCQlpZiAoKm5faWRzID49IFNTSF9N QVhfSURFTlRJVFlfRklMRVMpIHsKLSsJCQkJc3Noa2V5X2ZyZWUoa2V5c1tpXSk7Ci0rCQkJCWNv bnRpbnVlOwotKwkJCX0KLSsJCQlpZGVudGl0eV9rZXlzWypuX2lkc10gPSBrZXlzW2ldOwotKwkJ CWlkZW50aXR5X2ZpbGVzWypuX2lkc10gPSBwa2NzMTFfdXJpX2dldCh1cmkpOwotKwkJCSgqbl9p ZHMpKys7Ci0rCQl9Ci0rCQlmcmVlKGtleXMpOwotKwl9Ci0rCi0rCXBrY3MxMV91cmlfY2xlYW51 cCh1cmkpOwotK30KLSsjZW5kaWYgLyogRU5BQkxFX1BLQ1MxMSAqLwotKwotIC8qIExvYWRzIGFs bCBJZGVudGl0eUZpbGUgYW5kIENlcnRpZmljYXRlRmlsZSBrZXlzICovCi0gc3RhdGljIHZvaWQK LSBsb2FkX3B1YmxpY19pZGVudGl0eV9maWxlcyhjb25zdCBzdHJ1Y3Qgc3NoX2Nvbm5faW5mbyAq Y2luZm8pCi1AQCAtMjQwMSwxMSArMjQ0OSw2IEBAIGxvYWRfcHVibGljX2lkZW50aXR5X2ZpbGVz KGNvbnN0IHN0cnVjdCBzc2hfY29ubl9pbmZvICpjaW5mbykKLSAJY2hhciAqY2VydGlmaWNhdGVf ZmlsZXNbU1NIX01BWF9DRVJUSUZJQ0FURV9GSUxFU107Ci0gCXN0cnVjdCBzc2hrZXkgKmNlcnRp ZmljYXRlc1tTU0hfTUFYX0NFUlRJRklDQVRFX0ZJTEVTXTsKLSAJaW50IGNlcnRpZmljYXRlX2Zp bGVfdXNlcnByb3ZpZGVkW1NTSF9NQVhfQ0VSVElGSUNBVEVfRklMRVNdOwotLSNpZmRlZiBFTkFC TEVfUEtDUzExCi0tCXN0cnVjdCBzc2hrZXkgKiprZXlzID0gTlVMTDsKLS0JY2hhciAqKmNvbW1l bnRzID0gTlVMTDsKLS0JaW50IG5rZXlzOwotLSNlbmRpZiAvKiBQS0NTMTEgKi8KLSAKLSAJbl9p ZHMgPSBuX2NlcnRzID0gMDsKLSAJbWVtc2V0KGlkZW50aXR5X2ZpbGVzLCAwLCBzaXplb2YoaWRl bnRpdHlfZmlsZXMpKTsKLUBAIC0yNDE4LDMzICsyNDYxLDQ2IEBAIGxvYWRfcHVibGljX2lkZW50 aXR5X2ZpbGVzKGNvbnN0IHN0cnVjdCBzc2hfY29ubl9pbmZvICpjaW5mbykKLSAJICAgIHNpemVv ZihjZXJ0aWZpY2F0ZV9maWxlX3VzZXJwcm92aWRlZCkpOwotIAotICNpZmRlZiBFTkFCTEVfUEtD UzExCi0tCWlmIChvcHRpb25zLnBrY3MxMV9wcm92aWRlciAhPSBOVUxMICYmCi0tCSAgICBvcHRp b25zLm51bV9pZGVudGl0eV9maWxlcyA8IFNTSF9NQVhfSURFTlRJVFlfRklMRVMgJiYKLS0JICAg IChwa2NzMTFfaW5pdCghb3B0aW9ucy5iYXRjaF9tb2RlKSA9PSAwKSAmJgotLQkgICAgKG5rZXlz ID0gcGtjczExX2FkZF9wcm92aWRlcihvcHRpb25zLnBrY3MxMV9wcm92aWRlciwgTlVMTCwKLS0J ICAgICZrZXlzLCAmY29tbWVudHMpKSA+IDApIHsKLS0JCWZvciAoaSA9IDA7IGkgPCBua2V5czsg aSsrKSB7Ci0tCQkJaWYgKG5faWRzID49IFNTSF9NQVhfSURFTlRJVFlfRklMRVMpIHsKLS0JCQkJ c3Noa2V5X2ZyZWUoa2V5c1tpXSk7Ci0tCQkJCWZyZWUoY29tbWVudHNbaV0pOwotLQkJCQljb250 aW51ZTsKLS0JCQl9Ci0tCQkJaWRlbnRpdHlfa2V5c1tuX2lkc10gPSBrZXlzW2ldOwotLQkJCWlk ZW50aXR5X2ZpbGVzW25faWRzXSA9IGNvbW1lbnRzW2ldOyAvKiB0cmFuc2ZlcnJlZCAqLwotLQkJ CW5faWRzKys7Ci0tCQl9Ci0tCQlmcmVlKGtleXMpOwotLQkJZnJlZShjb21tZW50cyk7Ci0rCS8q IGhhbmRsZSBmYWxsYmFjayBmcm9tIFBLQ1MxMVByb3ZpZGVyIG9wdGlvbiAqLwotKwlwa2NzMTFf aW5pdCghb3B0aW9ucy5iYXRjaF9tb2RlKTsKLSsKLSsJaWYgKG9wdGlvbnMucGtjczExX3Byb3Zp ZGVyICE9IE5VTEwpIHsKLSsJCXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7Ci0rCi0rCQl1cmkgPSBw a2NzMTFfdXJpX2luaXQoKTsKLSsJCWlmICh1cmkgPT0gTlVMTCkKLSsJCQlmYXRhbCgiRmFpbGVk IHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKLSsKLSsJCS8qIENvbnN0cnVjdCBzaW1wbGUgUEtDUyMx MSBVUkkgdG8gc2ltcGxpZnkgYWNjZXNzICovCi0rCQl1cmktPm1vZHVsZV9wYXRoID0gc3RyZHVw KG9wdGlvbnMucGtjczExX3Byb3ZpZGVyKTsKLSsKLSsJCS8qIEFkZCBpdCBhcyBhbnkgb3RoZXIg SWRlbnRpdHlGaWxlICovCi0rCQljcCA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7Ci0rCQlhZGRfaWRl bnRpdHlfZmlsZSgmb3B0aW9ucywgTlVMTCwgY3AsIDEpOwotKwkJZnJlZShjcCk7Ci0rCi0rCQlw a2NzMTFfdXJpX2NsZWFudXAodXJpKTsKLSAJfQotICNlbmRpZiAvKiBFTkFCTEVfUEtDUzExICov Ci0gCWZvciAoaSA9IDA7IGkgPCBvcHRpb25zLm51bV9pZGVudGl0eV9maWxlczsgaSsrKSB7Ci0r CQljaGFyICpuYW1lID0gb3B0aW9ucy5pZGVudGl0eV9maWxlc1tpXTsKLSAJCWlmIChuX2lkcyA+ PSBTU0hfTUFYX0lERU5USVRZX0ZJTEVTIHx8Ci0tCQkgICAgc3RyY2FzZWNtcChvcHRpb25zLmlk ZW50aXR5X2ZpbGVzW2ldLCAibm9uZSIpID09IDApIHsKLSsJCSAgICBzdHJjYXNlY21wKG5hbWUs ICJub25lIikgPT0gMCkgewotIAkJCWZyZWUob3B0aW9ucy5pZGVudGl0eV9maWxlc1tpXSk7Ci0g CQkJb3B0aW9ucy5pZGVudGl0eV9maWxlc1tpXSA9IE5VTEw7Ci0gCQkJY29udGludWU7Ci0gCQl9 Ci0tCQljcCA9IHRpbGRlX2V4cGFuZF9maWxlbmFtZShvcHRpb25zLmlkZW50aXR5X2ZpbGVzW2ld LCBnZXR1aWQoKSk7Ci0rI2lmZGVmIEVOQUJMRV9QS0NTMTEKLSsJCWlmIChzdHJsZW4obmFtZSkg Pj0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgotKwkJICAgIHN0cm5jbXAobmFtZSwgUEtD UzExX1VSSV9TQ0hFTUUsCi0rCQkgICAgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkg ewotKwkJCWxvYWRfcGtjczExX2lkZW50aXR5KG5hbWUsIGlkZW50aXR5X2ZpbGVzLAotKwkJCSAg ICBpZGVudGl0eV9rZXlzLCAmbl9pZHMpOwotKwkJCWZyZWUob3B0aW9ucy5pZGVudGl0eV9maWxl c1tpXSk7Ci0rCQkJY29udGludWU7Ci0rCQl9Ci0rI2VuZGlmIC8qIEVOQUJMRV9QS0NTMTEgKi8K LSsJCWNwID0gdGlsZGVfZXhwYW5kX2ZpbGVuYW1lKG5hbWUsIGdldHVpZCgpKTsKLSAJCWZpbGVu YW1lID0gZGVmYXVsdF9jbGllbnRfcGVyY2VudF9kb2xsYXJfZXhwYW5kKGNwLCBjaW5mbyk7Ci0g CQlmcmVlKGNwKTsKLSAJCWNoZWNrX2xvYWQoc3Noa2V5X2xvYWRfcHVibGljKGZpbGVuYW1lLCAm cHVibGljLCBOVUxMKSwKLWRpZmYgLS1naXQgYS9zc2hfY29uZmlnLjUgYi9zc2hfY29uZmlnLjUK LWluZGV4IGEwNmZiZmExMS4uNzE3YjA5MzhhIDEwMDY0NAotLS0tIGEvc3NoX2NvbmZpZy41Ci0r KysgYi9zc2hfY29uZmlnLjUKLUBAIC0xMjYwLDYgKzEyNjAsMjEgQEAgbWF5IGFsc28gYmUgdXNl ZCBpbiBjb25qdW5jdGlvbiB3aXRoCi0gLkNtIENlcnRpZmljYXRlRmlsZQotIGluIG9yZGVyIHRv IHByb3ZpZGUgYW55IGNlcnRpZmljYXRlIGFsc28gbmVlZGVkIGZvciBhdXRoZW50aWNhdGlvbiB3 aXRoCi0gdGhlIGlkZW50aXR5LgotKy5QcAotK1RoZSBhdXRoZW50aWNhdGlvbiBpZGVudGl0eSBj YW4gYmUgYWxzbyBzcGVjaWZpZWQgaW4gYSBmb3JtIG9mIFBLQ1MjMTEgVVJJCi0rc3RhcnRpbmcg d2l0aCBhIHN0cmluZwotKy5DbSBwa2NzMTE6IC4KLStUaGVyZSBpcyBzdXBwb3J0ZWQgYSBzdWJz ZXQgb2YgdGhlIFBLQ1MjMTEgVVJJIGFzIGRlZmluZWQKLStpbiBSRkMgNzUxMiAoaW1wbGVtZW50 ZWQgcGF0aCBhcmd1bWVudHMKLSsuQ20gaWQgLAotKy5DbSBtYW51ZmFjdHVyZXIgLAotKy5DbSBv YmplY3QgLAotKy5DbSB0b2tlbgotK2FuZCBxdWVyeSBhcmd1bWVudHMKLSsuQ20gbW9kdWxlLXBh dGgKLSthbmQKLSsuQ20gcGluLXZhbHVlCi0rKS4gVGhlIFVSSSBjYW4gbm90IGJlIGluIHF1b3Rl cy4KLSAuSXQgQ20gSWdub3JlVW5rbm93bgotIFNwZWNpZmllcyBhIHBhdHRlcm4tbGlzdCBvZiB1 bmtub3duIG9wdGlvbnMgdG8gYmUgaWdub3JlZCBpZiB0aGV5IGFyZQotIGVuY291bnRlcmVkIGlu IGNvbmZpZ3VyYXRpb24gcGFyc2luZy4KLS0tIAotMi41Mi4wCi0KCmRpZmYgLS1naXQgYS8wMDUz LW9wZW5zc2gtMTAuMnAxLXBhbS1hdXRoLnBhdGNoIGIvMDA1My1vcGVuc3NoLTEwLjJwMS1wYW0t YXV0aC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhYTUwNy4uMDAwMDAw MAotLS0gYS8wMDUzLW9wZW5zc2gtMTAuMnAxLXBhbS1hdXRoLnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsMjEgKzAsMCBAQAotZGlmZiAtLWNvbG9yIC1ydU5wIGEvYXV0aC1wYW0uYyBiL2F1dGgt cGFtLmMKLS0tLSBhL2F1dGgtcGFtLmMJMjAyNi0wMi0xNiAxMzoxNToyNC44NjM4NzE3NTQgKzAx MDAKLSsrKyBiL2F1dGgtcGFtLmMJMjAyNi0wMi0xNiAxMzo1OTo0NS4wNzMyMDcwODQgKzAxMDAK LUBAIC00NzEsNiArNDcxLDcgQEAgc3RhdGljIGludAotIGNoZWNrX3BhbV91c2VyKEF1dGhjdHh0 ICphdXRoY3R4dCkKLSB7Ci0gCWNvbnN0IGNoYXIgKnBhbV91c2VyOwotKwljb25zdCBzdHJ1Y3Qg cGFzc3dkICpwYW1fcHc7Ci0gCi0gCWlmIChhdXRoY3R4dCA9PSBOVUxMIHx8IGF1dGhjdHh0LT5w dyA9PSBOVUxMIHx8Ci0gCSAgICBhdXRoY3R4dC0+cHctPnB3X25hbWUgPT0gTlVMTCkKLUBAIC00 ODUsNyArNDg2LDggQEAgY2hlY2tfcGFtX3VzZXIoQXV0aGN0eHQgKmF1dGhjdHh0KQotIAkJcmV0 dXJuIFBBTV9VU0VSX1VOS05PV047Ci0gCX0KLSAKLS0JaWYgKHN0cmNtcChhdXRoY3R4dC0+cHct PnB3X25hbWUsIHBhbV91c2VyKSAhPSAwKSB7Ci0rCXBhbV9wdyA9IGdldHB3bmFtKHBhbV91c2Vy KTsKLSsJaWYgKHBhbV9wdyA9PSBOVUxMIHx8IHBhbV9wdy0+cHdfdWlkICE9IGF1dGhjdHh0LT5w dy0+cHdfdWlkKSB7Ci0gCQlkZWJ1ZygiUEFNIHVzZXIgXCIlc1wiIGRvZXMgbm90IG1hdGNoIGV4 cGVjdGVkIFwiJXNcIiIsCi0gCQkgICAgICBwYW1fdXNlciwgYXV0aGN0eHQtPnB3LT5wd19uYW1l KTsKLSAJCXJldHVybiBQQU1fVVNFUl9VTktOT1dOOwoKZGlmZiAtLWdpdCBhLzAwNTMtb3BlbnNz aC0xMC4ycDEtcGtjczExLXVyaS5wYXRjaCBiLzAwNTMtb3BlbnNzaC0xMC4ycDEtcGtjczExLXVy aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFlYWYzCi0tLSAv ZGV2L251bGwKKysrIGIvMDA1My1vcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpLnBhdGNoCkBAIC0w LDAgKzEsMzQxMCBAQAorRnJvbSA1MGE0YTRhZGRlMGZmOTY1YWZlMzRkYmMwNTk5OTZkODZkNGZj ZmM2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEJlbHlhdnNraXkgPGJl bGRtaXRAZ21haWwuY29tPgorRGF0ZTogTW9uLCAxNSBEZWMgMjAyNSAxNDoyNDowNyArMDEwMAor U3ViamVjdDogW1BBVENIIDUzLzU0XSBvcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpCisKKy0tLQor IE1ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgIHwgIDI2ICstCisgY29uZmlndXJlLmFj ICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKysKKyByZWdyZXNzL01ha2VmaWxlICAgICAgICAg ICAgICAgICB8ICAgNSArLQorIHJlZ3Jlc3MvcGtjczExLXVyaS5zaCAgICAgICAgICAgIHwgNDEw ICsrKysrKysrKysrKysrKysKKyByZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZSAgICAgICB8ICAg MiArLQorIHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0cy5jIHwgMzUzICsrKysrKysrKysr KysrCisgc3NoLWFkZC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDggKy0KKyBzc2gtYWdl bnQuYyAgICAgICAgICAgICAgICAgICAgICB8IDExNyArKysrLQorIHNzaC1rZXlnZW4uYyAgICAg ICAgICAgICAgICAgICAgIHwgICA3ICstCisgc3NoLXBrY3MxMS1jbGllbnQuYyAgICAgICAgICAg ICAgfCAgMTkgKworIHNzaC1wa2NzMTEtdXJpLmMgICAgICAgICAgICAgICAgIHwgNDM4ICsrKysr KysrKysrKysrKysrKworIHNzaC1wa2NzMTEtdXJpLmggICAgICAgICAgICAgICAgIHwgIDQ2ICsr Cisgc3NoLXBrY3MxMS5jICAgICAgICAgICAgICAgICAgICAgfCA3NzEgKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLQorIHNzaC1wa2NzMTEuaCAgICAgICAgICAgICAgICAgICAgIHwgICA0 ICsKKyBzc2guYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwNCArKysrLQorIHNzaF9j b25maWcuNSAgICAgICAgICAgICAgICAgICAgIHwgIDE1ICsKKyBzc2hrZXkuYyAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgNCArCisgMTcgZmlsZXMgY2hhbmdlZCwgMjEzMyBpbnNlcnRpb25z KCspLCAyNzMgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHJlZ3Jlc3MvcGtjczEx LXVyaS5zaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCByZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVz dHMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzc2gtcGtjczExLXVyaS5jCisgY3JlYXRlIG1vZGUg MTAwNjQ0IHNzaC1wa2NzMTEtdXJpLmgKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFr ZWZpbGUuaW4KK2luZGV4IGY4MGM5NTg0Ni4uYzNjOGRhODYzIDEwMDY0NAorLS0tIGEvTWFrZWZp bGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTEyLDEyICsxMTIsMTIgQEAgTElCU1NIX09C SlM9JHtMSUJPUEVOU1NIX09CSlN9IFwKKyAJc2Z0cC1yZWFscGF0aC5vIHBsYXRmb3JtLXBsZWRn ZS5vIHBsYXRmb3JtLXRyYWNpbmcubyBwbGF0Zm9ybS1taXNjLm8gXAorIAlzc2hidWYtaW8ubyBt aXNjLWFnZW50Lm8gc3NoZXJyLWxpYmNyeXB0by5vIGF1ZGl0c3R1Yi5vCisgCistUDExT0JKUz0g c3NoLXBrY3MxMS1jbGllbnQubworK1AxMU9CSlM9IHNzaC1wa2NzMTEtY2xpZW50Lm8gc3NoLXBr Y3MxMS11cmkubworIAorIFNLT0JKUz0Jc3NoLXNrLWNsaWVudC5vCisgCisgU1NIT0JKUz0gc3No Lm8gcmVhZGNvbmYubyBjbGllbnRsb29wLm8gc3NodHR5Lm8gXAorLQlzc2hjb25uZWN0Lm8gc3No Y29ubmVjdDIubyBtdXgubyBzc2gtcGtjczExLm8gJChTS09CSlMpCisrCXNzaGNvbm5lY3QubyBz c2hjb25uZWN0Mi5vIG11eC5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpT KQorIAorIFNTSERPQkpTPXNzaGQubyBcCisgCXBsYXRmb3JtLWxpc3Rlbi5vIFwKK0BAIC0xNjEs MTEgKzE2MSwxMSBAQCBTU0hBRERfT0JKUz0Jc3NoLWFkZC5vICQoUDExT0JKUykgJChTS09CSlMp CisgCisgU1NIQUdFTlRfT0JKUz0Jc3NoLWFnZW50Lm8gJChQMTFPQkpTKSAkKFNLT0JKUykKKyAK Ky1TU0hLRVlHRU5fT0JKUz0Jc3NoLWtleWdlbi5vIHNzaHNpZy5vIHNzaC1wa2NzMTEubyAkKFNL T0JKUykKKytTU0hLRVlHRU5fT0JKUz0Jc3NoLWtleWdlbi5vIHNzaHNpZy5vIHNzaC1wa2NzMTEu byBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpTKQorIAorIFNTSEtFWVNJR05fT0JKUz1zc2gta2V5 c2lnbi5vIHJlYWRjb25mLm8gdWlkc3dhcC5vICQoUDExT0JKUykgJChTS09CSlMpCisgCistUDEx SEVMUEVSX09CSlM9CXNzaC1wa2NzMTEtaGVscGVyLm8gc3NoLXBrY3MxMS5vICQoU0tPQkpTKQor K1AxMUhFTFBFUl9PQkpTPQlzc2gtcGtjczExLWhlbHBlci5vIHNzaC1wa2NzMTEubyBzc2gtcGtj czExLXVyaS5vICQoU0tPQkpTKQorIAorIFNLSEVMUEVSX09CSlM9CXNzaC1zay1oZWxwZXIubyBz c2gtc2subyBzay11c2JoaWQubyBzc2hlcnItbm9saWJjcnlwdG8ubworIAorQEAgLTMzMSw2ICsz MzEsOCBAQCBjbGVhbjoJcmVncmVzc2NsZWFuCisgCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3Nz aHNpZy90ZXN0X3NzaHNpZyQoRVhFRVhUKQorIAlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy91dGY4 LyoubworIAlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKQor KwlybSAtZiByZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvKi5vCisrCXJtIC1mIHJlZ3Jlc3MvdW5p dHRlc3RzL3BrY3MxMS90ZXN0X3BrY3MxMSQoRVhFRVhUKQorIAlybSAtZiByZWdyZXNzL21pc2Mv c2stZHVtbXkvKi5vCisgCXJtIC1mIHJlZ3Jlc3MvbWlzYy9zay1kdW1teS8qLmxvCisgCXJtIC1m IHJlZ3Jlc3MvbWlzYy9zc2gtdmVyaWZ5LWF0dGVzdGF0aW9uL3NzaC12ZXJpZnktYXR0ZXN0YXRp b24kKEVYRUVYVCkKK0BAIC0zNzAsNiArMzcyLDggQEAgZGlzdGNsZWFuOglyZWdyZXNzY2xlYW4K KyAJcm0gLWYgcmVncmVzcy91bml0dGVzdHMvc3Noc2lnL3Rlc3Rfc3Noc2lnCisgCXJtIC1mIHJl Z3Jlc3MvdW5pdHRlc3RzL3V0ZjgvKi5vCisgCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3V0Zjgv dGVzdF91dGY4CisrCXJtIC1mIHJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS8qLm8KKysJcm0gLWYg cmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RfcGtjczExCisgCXJtIC1mIHJlZ3Jlc3MvbWlz Yy9zay1kdW1teS8qLm8KKyAJcm0gLWYgcmVncmVzcy9taXNjL3NrLWR1bW15LyoubG8KKyAJcm0g LWYgcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15LnNvCitAQCAtNTUwLDYgKzU1NCw3IEBA IHJlZ3Jlc3MtcHJlcDoKKyAJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hr ZXkKKyAJJChNS0RJUl9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy9zc2hzaWcKKyAJJChNS0RJ Ul9QKSBgcHdkYC9yZWdyZXNzL3VuaXR0ZXN0cy91dGY4CisrCSQoTUtESVJfUCkgYHB3ZGAvcmVn cmVzcy91bml0dGVzdHMvcGtjczExCisgCSQoTUtESVJfUCkgYHB3ZGAvcmVncmVzcy9taXNjL3Nr LWR1bW15CisgCSQoTUtESVJfUCkgYHB3ZGAvcmVncmVzcy9taXNjL3NzaC12ZXJpZnktYXR0ZXN0 YXRpb24KKyAJWyAtZiBgcHdkYC9yZWdyZXNzL01ha2VmaWxlIF0gfHwgXAorQEAgLTcyNSw2ICs3 MzAsMTYgQEAgcmVncmVzcy91bml0dGVzdHMvdXRmOC90ZXN0X3V0ZjgkKEVYRUVYVCk6IFwKKyAJ ICAgIHJlZ3Jlc3MvdW5pdHRlc3RzL3Rlc3RfaGVscGVyL2xpYnRlc3RfaGVscGVyLmEgXAorIAkg ICAgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAtbHNzaCAtbG9wZW5ic2QtY29tcGF0ICQoVEVTVExJ QlMpCisgCisrVU5JVFRFU1RTX1RFU1RfUEtDUzExX09CSlM9XAorKwlyZWdyZXNzL3VuaXR0ZXN0 cy9wa2NzMTEvdGVzdHMubworKworK3JlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0X3BrY3Mx MSQoRVhFRVhUKTogXAorKyAgICAke1VOSVRURVNUU19URVNUX1BLQ1MxMV9PQkpTfSBzc2gtcGtj czExLXVyaS5vIFwKKysgICAgcmVncmVzcy91bml0dGVzdHMvdGVzdF9oZWxwZXIvbGlidGVzdF9o ZWxwZXIuYSBsaWJzc2guYQorKwkkKExEKSAtbyAkQCAkKExERkxBR1MpICQoVU5JVFRFU1RTX1RF U1RfUEtDUzExX09CSlMpIFwKKysJICAgIHJlZ3Jlc3MvdW5pdHRlc3RzL3Rlc3RfaGVscGVyL2xp YnRlc3RfaGVscGVyLmEgXAorKwkgICAgc3NoLXBrY3MxMS11cmkubyAtbHNzaCAtbG9wZW5ic2Qt Y29tcGF0IC1sY3J5cHRvICQoTElCUykgLWxtCisrCisgIyBUaGVzZSBhbGwgbmVlZCB0byBiZSBj b21waWxlZCAtZlBJQywgc28gdGhleSBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseS4KKyBTS19EVU1N WV9PQkpTPVwKKyAJcmVncmVzcy9taXNjL3NrLWR1bW15L3NrLWR1bW15LmxvIFwKK0BAIC03NzAs NyArNzg1LDggQEAgcmVncmVzcy11bml0LWJpbmFyaWVzOiByZWdyZXNzLXByZXAgJChSRUdSRVNT TElCUykgXAorIAlyZWdyZXNzL3VuaXR0ZXN0cy9zc2hidWYvdGVzdF9zc2hidWYkKEVYRUVYVCkg XAorIAlyZWdyZXNzL3VuaXR0ZXN0cy9zc2hrZXkvdGVzdF9zc2hrZXkkKEVYRUVYVCkgXAorIAly ZWdyZXNzL3VuaXR0ZXN0cy9zc2hzaWcvdGVzdF9zc2hzaWckKEVYRUVYVCkgXAorLQlyZWdyZXNz L3VuaXR0ZXN0cy91dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKQorKwlyZWdyZXNzL3VuaXR0ZXN0cy91 dGY4L3Rlc3RfdXRmOCQoRVhFRVhUKSBcCisrCXJlZ3Jlc3MvdW5pdHRlc3RzL3BrY3MxMS90ZXN0 X3BrY3MxMSQoRVhFRVhUKSBcCisgCisgdGVzdHM6CWZpbGUtdGVzdHMgdC1leGVjIGludGVyb3At dGVzdHMgZXh0cmEtdGVzdHMgdW5pdAorIAllY2hvIGFsbCB0ZXN0cyBwYXNzZWQKK2RpZmYgLS1n aXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDYyYjJiZjllNy4uZjU4MWE5 ODAxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0y MzA1LDEyICsyMzA1LDE0IEBAIEFDX0xJTktfSUZFTFNFKAorIAlbQUNfREVGSU5FKFtIQVZFX0lT QkxBTktdLCBbMV0sIFtEZWZpbmUgaWYgeW91IGhhdmUgaXNibGFuaygzQykuXSkKKyBdKQorIAor K1NDQVJEX01TRz0ieWVzIgorIGRpc2FibGVfcGtjczExPQorIEFDX0FSR19FTkFCTEUoW3BrY3Mx MV0sCisgCVsgIC0tZGlzYWJsZS1wa2NzMTEgICAgICAgIGRpc2FibGUgUEtDUyMxMSBzdXBwb3J0 IGNvZGUgW25vXV0sCisgCVsKKyAJCWlmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4bm8iIDsgdGhl bgorIAkJCWRpc2FibGVfcGtjczExPTEKKysJCQlTQ0FSRF9NU0c9Im5vIgorIAkJZmkKKyAJXQor ICkKK0BAIC0yMzQwLDYgKzIzNDIsNDAgQEAgQUNfU0VBUkNIX0xJQlMoW2Rsb3Blbl0sIFtkbF0p CisgQUNfQ0hFQ0tfRlVOQ1MoW2Rsb3Blbl0pCisgQUNfQ0hFQ0tfREVDTChbUlRMRF9OT1ddLCBb XSwgW10sIFsjaW5jbHVkZSA8ZGxmY24uaD5dKQorIAorKyMgQ2hlY2sgd2hldGhlciB3ZSBoYXZl IGEgcDExLWtpdCwgd2UgZ290IGRlZmF1bHQgcHJvdmlkZXIgb24gY29tbWFuZCBsaW5lCisrREVG QVVMVF9QS0NTMTFfUFJPVklERVJfTVNHPSJubyIKKytBQ19BUkdfV0lUSChbZGVmYXVsdC1wa2Nz MTEtcHJvdmlkZXJdLAorKwlbICAtLXdpdGgtZGVmYXVsdC1wa2NzMTEtcHJvdmlkZXJbWz1QQVRI XV0gICBVc2UgZGVmYXVsdCBwa2NzMTEgcHJvdmlkZXIgKHAxMS1raXQgZGV0ZWN0ZWQgYnkgZGVm YXVsdCldLAorKwlbIGlmIHRlc3QgIngkd2l0aHZhbCIgIT0gInhubyIgJiYgdGVzdCAieCRkaXNh YmxlX3BrY3MxMSIgPSAieCI7IHRoZW4KKysJCWlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyIg OyB0aGVuCisrCQkJQUNfUEFUSF9UT09MKFtQS0dDT05GSUddLCBbcGtnLWNvbmZpZ10sIFtub10p CisrCQkJaWYgdGVzdCAieCRQS0dDT05GSUciICE9ICJ4bm8iOyB0aGVuCisrCQkJCUFDX01TR19D SEVDS0lORyhbaWYgJFBLR0NPTkZJRyBrbm93cyBhYm91dCBwMTEta2l0XSkKKysJCQkJaWYgIiRQ S0dDT05GSUciICJwMTEta2l0LTEiOyB0aGVuCisrCQkJCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQor KwkJCQkJdXNlX3BrZ2NvbmZpZ19mb3JfcDExa2l0PXllcworKwkJCQllbHNlCisrCQkJCQlBQ19N U0dfUkVTVUxUKFtub10pCisrCQkJCWZpCisrCQkJZmkKKysJCWVsc2UKKysJCQlQS0NTMTFfUEFU SD0iJHt3aXRodmFsfSIKKysJCWZpCisrCQlpZiB0ZXN0ICJ4JHVzZV9wa2djb25maWdfZm9yX3Ax MWtpdCIgPSAieHllcyI7IHRoZW4KKysJCQlQS0NTMTFfUEFUSD1gJFBLR0NPTkZJRyAtLXZhcmlh YmxlPXByb3h5X21vZHVsZSBwMTEta2l0LTFgCisrCQlmaQorKwkJQUNfQ0hFQ0tfRklMRSgiJFBL Q1MxMV9QQVRIIiwKKysJCQlbIEFDX0RFRklORV9VTlFVT1RFRChbUEtDUzExX0RFRkFVTFRfUFJP VklERVJdLCBbIiRQS0NTMTFfUEFUSCJdLCBbUGF0aCB0byBkZWZhdWx0IFBLQ1MjMTEgcHJvdmlk ZXIgKHAxMS1raXQgcHJveHkpXSkKKysJCQkgIERFRkFVTFRfUEtDUzExX1BST1ZJREVSX01TRz0i JFBLQ1MxMV9QQVRIIgorKwkJCV0sCisrCQkJWyBBQ19NU0dfRVJST1IoW1JlcXVlc3RlZCBQS0NT MTEgcHJvdmlkZWQgbm90IGZvdW5kXSkgXQorKwkJKQorKwllbHNlCisrCQlBQ19NU0dfV0FSTihb TmVlZHMgUEtDUzExIHN1cHBvcnQgdG8gZW5hYmxlIGRlZmF1bHQgcGtjczExIHByb3ZpZGVyXSkK KysJZmkgXQorKykKKysKKysKKyAjIElSSVggaGFzIGEgY29uc3QgY2hhciByZXR1cm4gdmFsdWUg Zm9yIGdhaV9zdHJlcnJvcigpCisgQUNfQ0hFQ0tfRlVOQ1MoW2dhaV9zdHJlcnJvcl0sIFsKKyAJ QUNfREVGSU5FKFtIQVZFX0dBSV9TVFJFUlJPUl0pCitAQCAtNTk5MSw2ICs2MDI3LDcgQEAgZWNo byAiICAgICAgICAgICAgICAgICAgQlNEIEF1dGggc3VwcG9ydDogJEJTRF9BVVRIX01TRyIKKyBl Y2hvICIgICAgICAgICAgICAgIFJhbmRvbSBudW1iZXIgc291cmNlOiAkUkFORF9NU0ciCisgZWNo byAiICAgICAgICAgICAgIFByaXZzZXAgc2FuZGJveCBzdHlsZTogJFNBTkRCT1hfU1RZTEUiCisg ZWNobyAiICAgICAgICAgICAgICAgICAgIFBLQ1MjMTEgc3VwcG9ydDogJGVuYWJsZV9wa2NzMTEi CisrZWNobyAiICAgICAgICAgIERlZmF1bHQgUEtDUyMxMSBwcm92aWRlcjogJERFRkFVTFRfUEtD UzExX1BST1ZJREVSX01TRyIKKyBlY2hvICIgICAgICAgICAgICAgICAgICBVMkYvRklETyBzdXBw b3J0OiAkZW5hYmxlX3NrIgorIAorIGVjaG8gIiIKK2RpZmYgLS1naXQgYS9yZWdyZXNzL01ha2Vm aWxlIGIvcmVncmVzcy9NYWtlZmlsZQoraW5kZXggYWU0NWJkNDYzLi5jYmU3YTk2MTAgMTAwNjQ0 CistLS0gYS9yZWdyZXNzL01ha2VmaWxlCisrKysgYi9yZWdyZXNzL01ha2VmaWxlCitAQCAtMTE4 LDYgKzExOCw3IEBAIExURVNUUz0gCWNvbm5lY3QgXAorIAkJcGVuYWx0eS1leHBpcmUgXAorIAkJ Y29ubmVjdC1iaWdjb25mIFwKKyAJCXNzaC1wa2NzMTEgXAorKwkJcGtjczExLXVyaSBcCisgCQlz c2gtdHR5IFwKKyAJCXByb3h5anVtcAorIAorQEAgLTE0NCw3ICsxNDUsOCBAQCBDTEVBTkZJTEVT PQkqLmNvcmUgYWN0dWFsIGFnZW50LWtleS4qIGF1dGhvcml6ZWRfa2V5c18ke1VTRVJOQU1FfSBc CisgCQlrbm93bl9ob3N0cyBrbm93bl9ob3N0cy1jZXJ0IGtub3duX2hvc3RzLioga3JsLSogbHMu Y29weSBcCisgCQltb2RwaXBlIG5ldGNhdCBub19pZGVudGl0eV9jb25maWcgXAorIAkJcGlkZmls ZSBwdXR0eS5yc2EyIHJlYWR5IHJlZ3Jlc3MubG9nIHJlbW90ZV9waWQgXAorLQkJcmV2b2tlZC0q IHJzYSByc2EtYWdlbnQgcnNhLWFnZW50LnB1YiByc2EucHViIHJzYV9zc2gyX2NyLnBydiBcCisr CQlyZXZva2VkLSogcnNhIHJzYS1hZ2VudCByc2EtYWdlbnQucHViIHJzYS1hZ2VudC1jZXJ0LnB1 YiBcCisrCQlyc2EucHViIHJzYV9zc2gyX2NyLnBydiBwa2NzMTEqLmNydCBwa2NzMTEqLmtleSBw a2NzMTEuaW5mbyBcCisgCQlyc2Ffc3NoMl9jcm5sLnBydiBzY3Atc3NoLXdyYXBwZXIuZXhlIFwK KyAJCXNjcC1zc2gtd3JhcHBlci5zY3Agc2V0dWlkLWFsbG93ZWQgc2Z0cC1zZXJ2ZXIubG9nIFwK KyAJCXNmdHAtc2VydmVyLnNoIHNmdHAubG9nIHNzaC1sb2ctd3JhcHBlci5zaCBzc2gubG9nIFwK K0BAIC0yOTQsNiArMjk2LDcgQEAgdW5pdCB1bml0LWJlbmNoOgorIAkJdGVzdCAieCR7VU5JVFRF U1RfVkVSQk9TRX0iID0gIngiIHx8IEFSR1M9IiQkQVJHUyAtdiI7IFwKKyAJCXRlc3QgIngke1VO SVRURVNUX0JFTkNIX0RFVEFJTH0iID0gIngiIHx8IEFSR1M9IiQkQVJHUyAtQiI7IFwKKyAJCXRl c3QgIngke1VOSVRURVNUX0JFTkNIX09OTFl9IiA9ICJ4IiB8fCBBUkdTPSIkJEFSR1MgLU8gJHtV TklUVEVTVF9CRU5DSF9PTkxZfSI7IFwKKysJCSAkJFYgJHsuT0JKRElSfS91bml0dGVzdHMvcGtj czExL3Rlc3RfcGtjczExIDsgXAorIAkJICQkViAkey5PQkpESVJ9L3VuaXR0ZXN0cy9zc2hidWYv dGVzdF9zc2hidWYgJCR7QVJHU307IFwKKyAJCSAkJFYgJHsuT0JKRElSfS91bml0dGVzdHMvc3No a2V5L3Rlc3Rfc3Noa2V5IFwKKyAJCQktZCAkey5DVVJESVJ9L3VuaXR0ZXN0cy9zc2hrZXkvdGVz dGRhdGEgJCR7QVJHU307IFwKK2RpZmYgLS1naXQgYS9yZWdyZXNzL3BrY3MxMS11cmkuc2ggYi9y ZWdyZXNzL3BrY3MxMS11cmkuc2gKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw MDAuLjcyZDY5YmRhMAorLS0tIC9kZXYvbnVsbAorKysrIGIvcmVncmVzcy9wa2NzMTEtdXJpLnNo CitAQCAtMCwwICsxLDQxMCBAQAorKyMKKysjICBDb3B5cmlnaHQgKGMpIDIwMTcgUmVkIEhhdAor KyMKKysjICBBdXRob3JzOiBKYWt1YiBKZWxlbiA8amplbGVuQHJlZGhhdC5jb20+CisrIworKyMg IFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29m dHdhcmUgZm9yIGFueQorKyMgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkg Z3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKysjICBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorKyMKKysjICBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMg QUxMIFdBUlJBTlRJRVMKKysjICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElO RyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrIyAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKysjICBBTlkg U1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFO WSBEQU1BR0VTCisrIyAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFU QSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisrIyAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdM SUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKysjICBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJF LgorKworK3RpZD0icGtjczExIHRlc3RzIHdpdGggc29mdCB0b2tlbiIKKysKKyt0cnlfdG9rZW5f bGlicygpIHsKKysJZm9yIF9saWIgaW4gIiRAIiA7IGRvCisrCQlpZiB0ZXN0IC1mICIkX2xpYiIg OyB0aGVuCisrCQkJdmVyYm9zZSAiVXNpbmcgdG9rZW4gbGlicmFyeSAkX2xpYiIKKysJCQlURVNU X1NTSF9QS0NTMTE9IiRfbGliIgorKwkJCXJldHVybgorKwkJZmkKKysJZG9uZQorKwllY2hvICJz a2lwcGVkOiBVbmFibGUgdG8gZmluZCBQS0NTIzExIHRva2VuIGxpYnJhcnkiCisrCWV4aXQgMAor K30KKysKKyt0cnlfdG9rZW5fbGlicyBcCisrCS91c3IvbG9jYWwvbGliL3NvZnRoc20vbGlic29m dGhzbTIuc28gXAorKwkvdXNyL2xpYjY0L3BrY3MxMS9saWJzb2Z0aHNtMi5zbyBcCisrCS91c3Iv bGliL3g4Nl82NC1saW51eC1nbnUvc29mdGhzbS9saWJzb2Z0aHNtMi5zbworKworK1RFU1RfU1NI X1BJTj0xMjM0CisrVEVTVF9TU0hfU09QSU49MTIzNDU2NzgKKytpZiBbICJ4JFRFU1RfU1NIX1NT SFBLQ1MxMUhFTFBFUiIgIT0gIngiIF07IHRoZW4KKysJU1NIX1BLQ1MxMV9IRUxQRVI9IiR7VEVT VF9TU0hfU1NIUEtDUzExSEVMUEVSfSIKKysJZXhwb3J0IFNTSF9QS0NTMTFfSEVMUEVSCisrZmkK KysKKyt0ZXN0IC1mICIkVEVTVF9TU0hfUEtDUzExIiB8fCBmYXRhbCAiJFRFU1RfU1NIX1BLQ1Mx MSBkb2VzIG5vdCBleGlzdCIKKysKKysjIHNldHVwIGVudmlyb25tZW50IGZvciBzb2Z0aHNtIHRv a2VuCisrRElSPSRPQkovU09GVEhTTQorK3JtIC1yZiAkRElSCisrVE9LRU49JERJUi90b2tlbmRp cgorK21rZGlyIC1wICRUT0tFTgorK1NPRlRIU00yX0NPTkY9JERJUi9zb2Z0aHNtMi5jb25mCisr ZXhwb3J0IFNPRlRIU00yX0NPTkYKKytjYXQgPiAkU09GVEhTTTJfQ09ORiA8PCBFT0YKKysjIFNv ZnRIU00gdjIgY29uZmlndXJhdGlvbiBmaWxlCisrZGlyZWN0b3JpZXMudG9rZW5kaXIgPSAke1RP S0VOfQorK29iamVjdHN0b3JlLmJhY2tlbmQgPSBmaWxlCisrIyBFUlJPUiwgV0FSTklORywgSU5G TywgREVCVUcKKytsb2cubGV2ZWwgPSBERUJVRworKyMgSWYgQ0tGX1JFTU9WQUJMRV9ERVZJQ0Ug ZmxhZyBzaG91bGQgYmUgc2V0Cisrc2xvdHMucmVtb3ZhYmxlID0gZmFsc2UKKytFT0YKKytvdXQ9 JChzb2Z0aHNtMi11dGlsIC0taW5pdC10b2tlbiAtLWZyZWUgLS1sYWJlbCB0b2tlbi1zbG90LTAg LS1waW4gIiRURVNUX1NTSF9QSU4iIC0tc28tcGluICIkVEVTVF9TU0hfU09QSU4iKQorK3Nsb3Q9 JChlY2hvIC0tICRvdXQgfCBzZWQgJ3MvLiogLy8nKQorKworKyMgcHJldmVudCBzc2gtYWdlbnQg ZnJvbSBjYWxsaW5nIHNzaC1hc2twYXNzCisrU1NIX0FTS1BBU1M9L3Vzci9iaW4vdHJ1ZQorK2V4 cG9ydCBTU0hfQVNLUEFTUworK3Vuc2V0IERJU1BMQVkKKysjIFdlIG5lZWQgaW50ZXJhY3RpdmUg YWNjZXNzIHRvIHRlc3QgUEtDUyMgc2luY2UgaXQgcHJvbXB0cyBmb3IgUElOCisrIyBCYWNrdXAg c3NoX3Byb3h5IGJlZm9yZSBtb2RpZmljYXRpb25zCisrY3AgJE9CSi9zc2hfcHJveHkgJE9CSi9z c2hfcHJveHlfYmFrCisrc2VkIC1pICdzLy4qQmF0Y2hNb2RlLiovL2cnICRPQkovc3NoX3Byb3h5 CisrIyBSZW1vdmUgSWRlbnRpdHlGaWxlIGVudHJpZXMgdG8gcHJldmVudCBleGNlZWRpbmcgTWF4 QXV0aFRyaWVzIHdoZW4gdXNpbmcKKysjIFBLQ1MxMVByb3ZpZGVyICgtSSkgb3IgUEtDUzExIFVS SXMuIFRoZSBkZWZhdWx0IHNzaF9jb25maWcgaW5jbHVkZXMgbXVsdGlwbGUKKysjIGlkZW50aXR5 IGZpbGVzIHRoYXQgd291bGQgYmUgdHJpZWQgYmVmb3JlIFBLQ1MxMSBrZXlzLCBjYXVzaW5nIGF1 dGhlbnRpY2F0aW9uCisrIyB0byBmYWlsIHdpdGggIlRvbyBtYW55IGF1dGhlbnRpY2F0aW9uIGZh aWx1cmVzIiBiZWZvcmUgUEtDUzExIGtleXMgYXJlIHJlYWNoZWQuCisrZ3JlcCAtaXYgSWRlbnRp dHlGaWxlICRPQkovc3NoX3Byb3h5ID4gJE9CSi9zc2hfcHJveHkudG1wCisrbXYgJE9CSi9zc2hf cHJveHkudG1wICRPQkovc3NoX3Byb3h5CisrCisrIyBzdGFydCBjb21tYW5kIHcvbyB0dHksIHNv IHNzaCBhY2NlcHRzIHBpbiBmcm9tIHN0ZGluIChmcm9tIGFnZW50LXBrY3MxMS5zaCkKKytub3R0 eSgpIHsKKysJcGVybCAtZSAndXNlIFBPU0lYOyBQT1NJWDo6c2V0c2lkKCk7CisrCSAgICBpZiAo Zm9yaykgeyB3YWl0OyBleGl0KCQ/ID4+IDgpOyB9IGVsc2UgeyBleGVjKEBBUkdWKSB9JyAiJEAi CisrfQorKworK3RyYWNlICJnZW5lcmF0aW5nIGtleXMiCisrSUQxPSIwMiIKKytJRDI9IjA0Igor K0lEMz0iMDYiCisrUlNBPSR7RElSfS9SU0EKKytFQz0ke0RJUn0vRUMKKytFRDI1NTE5PSR7RElS fS9FRDI1NTE5Cisrb3BlbnNzbCBnZW5wa2V5IC1hbGdvcml0aG0gcnNhID4gJFJTQQorK29wZW5z c2wgcGtjczggLW5vY3J5cHQgLWluICRSU0EgfFwKKysgICAgc29mdGhzbTItdXRpbCAtLXNsb3Qg IiRzbG90IiAtLWxhYmVsICJTU0ggUlNBIEtleSAkSUQxIiAtLWlkICRJRDEgXAorKwktLXBpbiAi JFRFU1RfU1NIX1BJTiIgLS1pbXBvcnQgL2Rldi9zdGRpbgorK29wZW5zc2wgZ2VucGtleSBcCisr ICAgIC1nZW5wYXJhbSBcCisrICAgIC1hbGdvcml0aG0gZWMgXAorKyAgICAtcGtleW9wdCBlY19w YXJhbWdlbl9jdXJ2ZTpwcmltZTI1NnYxIHxcCisrICAgIG9wZW5zc2wgZ2VucGtleSBcCisrICAg IC1wYXJhbWZpbGUgL2Rldi9zdGRpbiA+ICRFQworK29wZW5zc2wgcGtjczggLW5vY3J5cHQgLWlu ICRFQyB8XAorKyAgICBzb2Z0aHNtMi11dGlsIC0tc2xvdCAiJHNsb3QiIC0tbGFiZWwgIlNTSCBF Q0RTQSBLZXkgJElEMiIgLS1pZCAkSUQyIFwKKysJLS1waW4gIiRURVNUX1NTSF9QSU4iIC0taW1w b3J0IC9kZXYvc3RkaW4KKytvcGVuc3NsIGdlbnBrZXkgLWFsZ29yaXRobSBlZDI1NTE5ID4gJEVE MjU1MTkKKytvcGVuc3NsIHBrY3M4IC1ub2NyeXB0IC1pbiAkRUQyNTUxOSB8XAorKyAgICBzb2Z0 aHNtMi11dGlsIC0tc2xvdCAiJHNsb3QiIC0tbGFiZWwgIlNTSCBFRDI1NTE5IEtleSAkSUQzIiAt LWlkICRJRDMgXAorKwktLXBpbiAiJFRFU1RfU1NIX1BJTiIgLS1pbXBvcnQgL2Rldi9zdGRpbgor KworK3RyYWNlICJMaXN0IHRoZSBrZXlzIGluIHRoZSBzc2gta2V5Z2VuIHdpdGggUEtDUyMxMSBV UklzIgorKyR7U1NIS0VZR0VOfSAtRCAke1RFU1RfU1NIX1BLQ1MxMX0gPiAkT0JKL3Rva2VuX2tl eXMKKytpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysJZmFpbCAiRkFJTDoga2V5Z2VuIGZhaWxzIHRv IGVudW1lcmF0ZSBrZXlzIG9uIFBLQ1MjMTEgdG9rZW4iCisrZmkKKytncmVwICJwa2NzMTE6IiAk T0JKL3Rva2VuX2tleXMgPiAvZGV2L251bGwKKytpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysJZmFp bCAiRkFJTDogVGhlIGtleXMgZnJvbSBzc2gta2V5Z2VuIGRvIG5vdCBjb250YWluIFBLQ1MjMTEg VVJJIGFzIGEgY29tbWVudCIKKytmaQorKworKyMgU2V0IHRoZSBFQ0RTQSBrZXkgdG8gYXV0aG9y aXplZCBrZXlzCisrZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXpl ZF9rZXlzXyRVU0VSCisrCisrdHJhY2UgIlNpbXBsZSBjb25uZWN0IHdpdGggc3NoICh3aXRob3V0 IFBLQ1MjMTEgVVJJKSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtSSAk e1RFU1RfU1NIX1BLQ1MxMX0gXAorKyAgICAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0 IDUKKytyPSQ/CisraWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25u ZWN0IHdpdGggcGtjczExIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworK3RyYWNlICJD b25uZWN0IHdpdGggUEtDUyMxMSBVUkkiCisrdHJhY2UgIiAgKEVDRFNBIGtleSBzaG91bGQgc3Vj Y2VlZCkiCisrZWNobyAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hf cHJveHkgXAorKyAgICAtaSAicGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NT SF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtbmUgNSBdOyB0aGVu CisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgZmFpbGVkIChleGl0 IGNvZGUgJHIpIgorK2ZpCisrCisrdHJhY2UgIiAgKFJTQSBrZXkgc2hvdWxkIGZhaWwpIgorK2Vj aG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKKysg ICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0i IHNvbWVob3N0IGV4aXQgNQorK3I9JD8KKytpZiBbICRyIC1lcSA1IF07IHRoZW4KKysJZmFpbCAi RkFJTDogc3NoIGNvbm5lY3Qgd2l0aCBQS0NTIzExIFVSSSBzdWNjZWVkZWQgKHNob3VsZCBmYWls KSIKKytmaQorKworKyMgU2V0IHRoZSBFRDI1NTE5IGtleSBhcyBhdXRob3JpemVkCisrZ3JlcCAi RUQyNTUxOSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKKysK Kyt0cmFjZSAiICAoRUQyNTUxOSBrZXkgc2hvdWxkIHN1Y2NlZWQpIgorK2VjaG8gJHtURVNUX1NT SF9QSU59IHwgbm90dHkgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKKysgICAgIC1pICJwa2Nz MTE6aWQ9JSR7SUQzfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4 aXQgNQorK3I9JD8KKytpZiBbICRyIC1uZSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDogc3NoIGNv bm5lY3Qgd2l0aCBQS0NTIzExIFVSSSAoRWQyNTUxOSkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgor K2ZpCisrCisrIyBTZXQgdGhlIEVDRFNBIGtleSBiYWNrIGFzIGF1dGhvcml6ZWQKKytncmVwICJF Q0RTQSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKKysKKyt0 cmFjZSAiQ29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGluY2x1ZGluZyBQSU4gc2hvdWxkIG5vdCBw cm9tcHQiCisrdHJhY2UgIiAgKEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCisrJHtTU0h9IC1G ICRPQkovc3NoX3Byb3h5IC1pIFwKKysgICAgInBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRo PSR7VEVTVF9TU0hfUEtDUzExfSZwaW4tdmFsdWU9JHtURVNUX1NTSF9QSU59IiBzb21laG9zdCBl eGl0IDUKKytyPSQ/CisraWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBj b25uZWN0IHdpdGggUEtDUyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgorK2ZpCisrCisr dHJhY2UgIiAgKFJTQSBrZXkgc2hvdWxkIGZhaWwpIgorKyR7U1NIfSAtRiAkT0JKL3NzaF9wcm94 eSAtaSBcCisrICAgICJwa2NzMTE6aWQ9JSR7SUQxfT9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BL Q1MxMX0mcGluLXZhbHVlPSR7VEVTVF9TU0hfUElOfSIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPwor K2lmIFsgJHIgLWVxIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBL Q1MjMTEgVVJJIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgorK2ZpCisrCisrIyBTZXQgdGhlIEVE MjU1MTkga2V5IGFzIGF1dGhvcml6ZWQKKytncmVwICJFRDI1NTE5IiAkT0JKL3Rva2VuX2tleXMg PiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgorKworK3RyYWNlICIgIChFRDI1NTE5IGtleSBz aG91bGQgc3VjY2VlZCkiCisrJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IC1pIFwKKysgICAgInBr Y3MxMTppZD0lJHtJRDN9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSZwaW4tdmFsdWU9 JHtURVNUX1NTSF9QSU59IiBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtbmUgNSBd OyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgKEVkMjU1 MTkpIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworKyMgU2V0IHRoZSBFQ0RTQSBrZXkg YmFjayBhcyBhdXRob3JpemVkCisrZ3JlcCAiRUNEU0EiICRPQkovdG9rZW5fa2V5cyA+ICRPQkov YXV0aG9yaXplZF9rZXlzXyRVU0VSCisrCisrdHJhY2UgIkNvbm5lY3Qgd2l0aCB2YXJpb3VzIGZp bHRlcmluZyBvcHRpb25zIGluIFBLQ1MjMTEgVVJJIgorK3RyYWNlICIgIChieSBvYmplY3QgbGFi ZWwsIEVDRFNBIHNob3VsZCBzdWNjZWVkKSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5 ICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBcCisrICAgIC1pICJwa2NzMTE6b2JqZWN0PVNTSCUy MEVDRFNBJTIwS2V5JTIwMDQ/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9z dCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNz aCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgorK2ZpCisr CisrdHJhY2UgIiAgKGJ5IG9iamVjdCBsYWJlbCwgUlNBIGtleSBzaG91bGQgZmFpbCkiCisrZWNo byAke1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAorKyAg ICAgLWkgInBrY3MxMTpvYmplY3Q9U1NIJTIwUlNBJTIwS2V5JTIwMDI/bW9kdWxlLXBhdGg9JHtU RVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtZXEgNSBd OyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgc3VjY2Vl ZGVkIChzaG91bGQgZmFpbCkiCisrZmkKKysKKysjIFNldCB0aGUgRUQyNTUxOSBrZXkgYXMgYXV0 aG9yaXplZAorK2dyZXAgIkVEMjU1MTkiICRPQkovdG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXpl ZF9rZXlzXyRVU0VSCisrCisrdHJhY2UgIiAgKGJ5IG9iamVjdCBsYWJlbCwgRUQyNTUxOSBrZXkg c2hvdWxkIHN1Y2NlZWQpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1G ICRPQkovc3NoX3Byb3h5IFwKKysgICAgIC1pICJwa2NzMTE6b2JqZWN0PVNTSCUyMEVEMjU1MTkl MjBLZXklMjAwNj9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0iIHNvbWVob3N0IGV4aXQg NQorK3I9JD8KKytpZiBbICRyIC1uZSA1IF07IHRoZW4KKysJZmFpbCAiRkFJTDogc3NoIGNvbm5l Y3Qgd2l0aCBQS0NTIzExIFVSSSAoRWQyNTUxOSkgZmFpbGVkIChleGl0IGNvZGUgJHIpIgorK2Zp CisrCisrIyBTZXQgdGhlIEVDRFNBIGtleSBiYWNrIGFzIGF1dGhvcml6ZWQKKytncmVwICJFQ0RT QSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tleXNfJFVTRVIKKysKKyt0cmFj ZSAiICAoYnkgdG9rZW4gbGFiZWwsIEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCisrZWNobyAk e1RFU1RfU1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAorKyAgICAt aSAicGtjczExOmlkPSUke0lEMn07dG9rZW49dG9rZW4tc2xvdC0wP21vZHVsZS1wYXRoPSR7VEVT VF9TU0hfUEtDUzExfSIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLW5lIDUgXTsg dGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGZhaWxlZCAo ZXhpdCBjb2RlICRyKSIKKytmaQorKworKyMgU2V0IHRoZSBFRDI1NTE5IGtleSBhcyBhdXRob3Jp emVkCisrZ3JlcCAiRUQyNTUxOSIgJE9CSi90b2tlbl9rZXlzID4gJE9CSi9hdXRob3JpemVkX2tl eXNfJFVTRVIKKysKKyt0cmFjZSAiICAoYnkgdG9rZW4gbGFiZWwsIEVEMjU1MTkga2V5IHNob3Vs ZCBzdWNjZWVkKSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAtRiAkT0JK L3NzaF9wcm94eSBcCisrICAgIC1pICJwa2NzMTE6aWQ9JSR7SUQzfTt0b2tlbj10b2tlbi1zbG90 LTA/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBzb21laG9zdCBleGl0IDUKKytyPSQ/ CisraWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGgg UEtDUyMxMSBVUkkgKEVkMjU1MTkpIGZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKworKyMg U2V0IHRoZSBFQ0RTQSBrZXkgYmFjayBhcyBhdXRob3JpemVkCisrZ3JlcCAiRUNEU0EiICRPQkov dG9rZW5fa2V5cyA+ICRPQkovYXV0aG9yaXplZF9rZXlzXyRVU0VSCisrCisrdHJhY2UgIiAgKGJ5 IHdyb25nIHRva2VuIGxhYmVsLCBzaG91bGQgZmFpbCkiCisrZWNobyAke1RFU1RfU1NIX1BJTn0g fCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgXAorKyAgICAgLWkgInBrY3MxMTp0b2tl bj10b2tlbi1zbG90LTk5P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfSIgc29tZWhvc3Qg ZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLWVxIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2gg Y29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgorK2ZpCisr CisrCisrCisrCisrdHJhY2UgIlRlc3QgUEtDUyMxMSBVUkkgc3BlY2lmaWNhdGlvbiBpbiBjb25m aWd1cmF0aW9uIGZpbGVzIgorK2VjaG8gIklkZW50aXR5RmlsZSBcInBrY3MxMTppZD0lJHtJRDJ9 P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzExfVwiIiBcCisrICAgID4+ICRPQkovc3NoX3By b3h5CisrdHJhY2UgIiAgKEVDRFNBIGtleSBzaG91bGQgc3VjY2VlZCkiCisrZWNobyAke1RFU1Rf U1NIX1BJTn0gfCBub3R0eSAke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3QgZXhpdCA1 Cisrcj0kPworK2lmIFsgJHIgLW5lIDUgXTsgdGhlbgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVj dCB3aXRoIFBLQ1MjMTEgVVJJIGluIGNvbmZpZyBmYWlsZWQgKGV4aXQgY29kZSAkcikiCisrZmkK KysKKysjIFNldCB0aGUgUlNBIGtleSBhcyBhdXRob3JpemVkCisrZ3JlcCAiUlNBIiAkT0JKL3Rv a2VuX2tleXMgPiAkT0JKL2F1dGhvcml6ZWRfa2V5c18kVVNFUgorKworK3RyYWNlICIgIChSU0Eg a2V5IHNob3VsZCBmYWlsKSIKKytlY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIfSAt RiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKKytyPSQ/CisraWYgWyAkciAtZXEgNSBd OyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggUEtDUyMxMSBVUkkgaW4gY29u ZmlnIHN1Y2NlZWRlZCAoc2hvdWxkIGZhaWwpIgorK2ZpCisrc2VkIC1pIC1lICIvSWRlbnRpdHlG aWxlL2QiICRPQkovc3NoX3Byb3h5CisrCisrdHJhY2UgIkNvbWJpbmF0aW9uIG9mIFBLQ1MxMVBy b3ZpZGVyIGFuZCBQS0NTMTFVUkkgb24gY29tbWFuZGxpbmUiCisrdHJhY2UgIiAgKFJTQSBrZXkg c2hvdWxkIHN1Y2NlZWQpIgorK2VjaG8gJHtURVNUX1NTSF9QSU59IHwgbm90dHkgJHtTU0h9IC1G ICRPQkovc3NoX3Byb3h5IFwKKysgICAgLWkgInBrY3MxMTppZD0lJHtJRDF9IiAtSSAke1RFU1Rf U1NIX1BLQ1MxMX0gc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLW5lIDUgXTsgdGhl bgorKwlmYWlsICJGQUlMOiBzc2ggY29ubmVjdCB3aXRoIFBLQ1MjMTEgVVJJIGFuZCBwcm92aWRl ciBjb21iaW5hdGlvbiIgXAorKwkgICAgImZhaWxlZCAoZXhpdCBjb2RlICRyKSIKKytmaQorKwor K3RyYWNlICJSZWdyZXNzOiBNaXNzaW5nIHByb3ZpZGVyIGluIFBLQ1MxMVVSSSBvcHRpb24iCisr JHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IFwKKysgICAgLW8gSWRlbnRpdHlGaWxlPVwicGtjczEx OnRva2VuPXNlZ2ZhdWx0XCIgc29tZWhvc3QgZXhpdCA1Cisrcj0kPworK2lmIFsgJHIgLWVxIDEz OSBdOyB0aGVuCisrCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHdpdGggbWlzc2luZyBwcm92aWRl cl9pZCBmcm9tIGNvbmZpZ3VyYXRpb24gb3B0aW9uIiBcCisrCSAgICAiY3Jhc2hlZCAoZXhpdCBj b2RlICRyKSIKKytmaQorKworKworK3RyYWNlICJTU0ggQWdlbnQgY2FuIHdvcmsgd2l0aCBQS0NT IzExIFVSSSIKKyt0cmFjZSAic3RhcnQgdGhlIGFnZW50IgorK2V2YWwgYCR7U1NIQUdFTlR9IC1z YCA+ICAvZGV2L251bGwKKysKKytyPSQ/CisraWYgWyAkciAtbmUgMCBdOyB0aGVuCisrCWZhaWwg ImNvdWxkIG5vdCBzdGFydCBzc2gtYWdlbnQ6IGV4aXQgY29kZSAkciIKKytlbHNlCisrCXRyYWNl ICJhZGQgd2hvbGUgcHJvdmlkZXIgdG8gYWdlbnQiCisrCWVjaG8gJHtURVNUX1NTSF9QSU59IHwg bm90dHkgJHtTU0hBRER9IFwKKysJICAgICJwa2NzMTE6P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hf UEtDUzExfSIgIz4gL2Rldi9udWxsIDI+JjEKKysJcj0kPworKwlpZiBbICRyIC1uZSAwIF07IHRo ZW4KKysJCWZhaWwgIkZBSUw6IHNzaC1hZGQgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXI6IGV4 aXQgY29kZSAkciIKKysJZmkKKysKKysJdHJhY2UgIiBwa2NzMTEgbGlzdCB2aWEgYWdlbnQgKGFs bCBrZXlzKSIKKysJJHtTU0hBRER9IC1sID4gL2Rldi9udWxsIDI+JjEKKysJcj0kPworKwlpZiBb ICRyIC1uZSAwIF07IHRoZW4KKysJCWZhaWwgIkZBSUw6IHNzaC1hZGQgLWwgZmFpbGVkIHdpdGgg d2hvbGUgcHJvdmlkZXI6IGV4aXQgY29kZSAkciIKKysJZmkKKysKKysJdHJhY2UgIiBwa2NzMTEg Y29ubmVjdCB2aWEgYWdlbnQgKGFsbCBrZXlzKSIKKysJJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5 IHNvbWVob3N0IGV4aXQgNQorKwlyPSQ/CisrCWlmIFsgJHIgLW5lIDUgXTsgdGhlbgorKwkJZmFp bCAiRkFJTDogc3NoIGNvbm5lY3QgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXIgKGV4aXQgY29k ZSAkcikiCisrCWZpCisrCisrCXRyYWNlICIgcmVtb3ZlIHBrY3MxMSBrZXlzIChhbGwga2V5cyki CisrCSR7U1NIQUREfSAtZCAicGtjczExOj9tb2R1bGUtcGF0aD0ke1RFU1RfU1NIX1BLQ1MxMX0i ID4gL2Rldi9udWxsIDI+JjEKKysJcj0kPworKwlpZiBbICRyIC1uZSAwIF07IHRoZW4KKysJCWZh aWwgIkZBSUw6IHNzaC1hZGQgLWQgZmFpbGVkIHdpdGggd2hvbGUgcHJvdmlkZXI6IGV4aXQgY29k ZSAkciIKKysJZmkKKysKKysJdHJhY2UgImFkZCBvbmx5IFJTQSBrZXkgdG8gdGhlIGFnZW50Igor KwllY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIQUREfSBcCisrCSAgICAicGtjczEx OmlkPSUke0lEMX0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiA+IC9kZXYvbnVsbCAy PiYxCisrCXI9JD8KKysJaWYgWyAkciAtbmUgMCBdOyB0aGVuCisrCQlmYWlsICJGQUlMIHNzaC1h ZGQgZmFpbGVkIHdpdGggUlNBIGtleTogZXhpdCBjb2RlICRyIgorKwlmaQorKworKwl0cmFjZSAi IHBrY3MxMSBjb25uZWN0IHZpYSBhZ2VudCAoUlNBIGtleSkiCisrCSR7U1NIfSAtRiAkT0JKL3Nz aF9wcm94eSBzb21laG9zdCBleGl0IDUKKysJcj0kPworKwlpZiBbICRyIC1uZSA1IF07IHRoZW4K KysJCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IGZhaWxlZCB3aXRoIFJTQSBrZXkgKGV4aXQgY29k ZSAkcikiCisrCWZpCisrCisrCXRyYWNlICIgcmVtb3ZlIFJTQSBwa2NzMTEga2V5IgorKwkke1NT SEFERH0gLWQgInBrY3MxMTppZD0lJHtJRDF9P21vZHVsZS1wYXRoPSR7VEVTVF9TU0hfUEtDUzEx fSIgXAorKwkgICAgPiAvZGV2L251bGwgMj4mMQorKwlyPSQ/CisrCWlmIFsgJHIgLW5lIDAgXTsg dGhlbgorKwkJZmFpbCAiRkFJTDogc3NoLWFkZCAtZCBmYWlsZWQgd2l0aCBSU0Ega2V5OiBleGl0 IGNvZGUgJHIiCisrCWZpCisrCisrCXRyYWNlICJhZGQgb25seSBFQ0RTQSBrZXkgdG8gdGhlIGFn ZW50IgorKwllY2hvICR7VEVTVF9TU0hfUElOfSB8IG5vdHR5ICR7U1NIQUREfSBcCisrCSAgICAi cGtjczExOmlkPSUke0lEMn0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiA+IC9kZXYv bnVsbCAyPiYxCisrCXI9JD8KKysJaWYgWyAkciAtbmUgMCBdOyB0aGVuCisrCQlmYWlsICJGQUlM OiBzc2gtYWRkIGZhaWxlZCB3aXRoIHNlY29uZCBrZXk6IGV4aXQgY29kZSAkciIKKysJZmkKKysK KysJdHJhY2UgIiBwa2NzMTEgY29ubmVjdCB2aWEgYWdlbnQgKEVDRFNBIGtleSBzaG91bGQgZmFp bCkiCisrCSR7U1NIfSAtRiAkT0JKL3NzaF9wcm94eSBzb21laG9zdCBleGl0IDUKKysJcj0kPwor KwlpZiBbICRyIC1lcSA1IF07IHRoZW4KKysJCWZhaWwgIkZBSUw6IHNzaCBjb25uZWN0IHBhc3Nl ZCB3aXRoIEVDRFNBIGtleSAoc2hvdWxkIGZhaWwpIgorKwlmaQorKworKwl0cmFjZSAiYWRkIGFs c28gdGhlIFJTQSBrZXkgdG8gdGhlIGFnZW50IgorKwllY2hvICR7VEVTVF9TU0hfUElOfSB8IG5v dHR5ICR7U1NIQUREfSBcCisrCSAgICAicGtjczExOmlkPSUke0lEMX0/bW9kdWxlLXBhdGg9JHtU RVNUX1NTSF9QS0NTMTF9IiA+IC9kZXYvbnVsbCAyPiYxCisrCXI9JD8KKysJaWYgWyAkciAtbmUg MCBdOyB0aGVuCisrCQlmYWlsICJGQUlMOiBzc2gtYWRkIGZhaWxlZCB3aXRoIGZpcnN0IGtleTog ZXhpdCBjb2RlICRyIgorKwlmaQorKworKwl0cmFjZSAiIHJlbW92ZSBFQ0RTQSBwa2NzMTEga2V5 IgorKwkke1NTSEFERH0gLWQgInBrY3MxMTppZD0lJHtJRDJ9P21vZHVsZS1wYXRoPSR7VEVTVF9T U0hfUEtDUzExfSIgXAorKwkgICAgPiAvZGV2L251bGwgMj4mMQorKwlyPSQ/CisrCWlmIFsgJHIg LW5lIDAgXTsgdGhlbgorKwkJZmFpbCAic3NoLWFkZCAtZCBmYWlsZWQgd2l0aCBFQ0RTQSBrZXk6 IGV4aXQgY29kZSAkciIKKysJZmkKKysKKysJdHJhY2UgIiByZW1vdmUgYWxyZWFkeS1yZW1vdmVk IHBrY3MxMSBrZXkgc2hvdWxkIGZhaWwiCisrCSR7U1NIQUREfSAtZCAicGtjczExOmlkPSUke0lE Mn0/bW9kdWxlLXBhdGg9JHtURVNUX1NTSF9QS0NTMTF9IiBcCisrCSAgICA+IC9kZXYvbnVsbCAy PiYxCisrCXI9JD8KKysJaWYgWyAkciAtZXEgMCBdOyB0aGVuCisrCQlmYWlsICJGQUlMOiBzc2gt YWRkIC1kIHBhc3NlZCB3aXRoIG5vbi1leGlzdGluZyBrZXkgKHNob3VsZCBmYWlsKSIKKysJZmkK KysKKysJdHJhY2UgIiBwa2NzMTEgY29ubmVjdCB2aWEgYWdlbnQgKHRoZSBSU0Ega2V5IHNob3Vs ZCBiZSBzdGlsbCB1c2FibGUpIgorKwkke1NTSH0gLUYgJE9CSi9zc2hfcHJveHkgc29tZWhvc3Qg ZXhpdCA1CisrCXI9JD8KKysJaWYgWyAkciAtbmUgNSBdOyB0aGVuCisrCQlmYWlsICJzc2ggY29u bmVjdCBmYWlsZWQgd2l0aCBSU0Ega2V5IChhZnRlciByZW1vdmluZyBFQ0RTQSk6IGV4aXQgY29k ZSAkciIKKysJZmkKKysKKysJdHJhY2UgImtpbGwgYWdlbnQiCisrCSR7U1NIQUdFTlR9IC1rID4g L2Rldi9udWxsCisrZmkKKysKKysjIFJlc3RvcmUgb3JpZ2luYWwgc3NoX3Byb3h5CisrbXYgJE9C Si9zc2hfcHJveHlfYmFrICRPQkovc3NoX3Byb3h5CitkaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0 dGVzdHMvTWFrZWZpbGUgYi9yZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZQoraW5kZXggZTM3MDkw MGU0Li5kNmM4OWMxMjkgMTAwNjQ0CistLS0gYS9yZWdyZXNzL3VuaXR0ZXN0cy9NYWtlZmlsZQor KysrIGIvcmVncmVzcy91bml0dGVzdHMvTWFrZWZpbGUKK0BAIC0xLDYgKzEsNiBAQAorICMJJE9w ZW5CU0Q6IE1ha2VmaWxlLHYgMS4xMyAyMDIzLzA5LzI0IDA4OjE0OjEzIGNsYXVkaW8gRXhwICQK KyAKKyBTVUJESVI9CXRlc3RfaGVscGVyIHNzaGJ1ZiBzc2hrZXkgYml0bWFwIGtleCBob3N0a2V5 cyB1dGY4IG1hdGNoIGNvbnZlcnNpb24KKy1TVUJESVIrPWF1dGhvcHQgbWlzYyBzc2hzaWcKKytT VUJESVIrPWF1dGhvcHQgbWlzYyBzc2hzaWcgcGtjczExCisgCisgLmluY2x1ZGUgPGJzZC5zdWJk aXIubWs+CitkaWZmIC0tZ2l0IGEvcmVncmVzcy91bml0dGVzdHMvcGtjczExL3Rlc3RzLmMgYi9y ZWdyZXNzL3VuaXR0ZXN0cy9wa2NzMTEvdGVzdHMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2lu ZGV4IDAwMDAwMDAwMC4uODliYTQ1YzRlCistLS0gL2Rldi9udWxsCisrKysgYi9yZWdyZXNzL3Vu aXR0ZXN0cy9wa2NzMTEvdGVzdHMuYworQEAgLTAsMCArMSwzNTMgQEAKKysvKgorKyAqIENvcHly aWdodCAoYykgMjAxNyBSZWQgSGF0CisrICoKKysgKiBBdXRob3JzOiBKYWt1YiBKZWxlbiA8ampl bGVuQHJlZGhhdC5jb20+CisrICoKKysgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKysgKiBwdXJwb3NlIHdpdGgg b3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3Zl CisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIg aW4gYWxsIGNvcGllcy4KKysgKgorKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi IEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworKyAqIFdJVEggUkVHQVJE IFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKysg KiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI T1IgQkUgTElBQkxFIEZPUgorKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKysgKiBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKysg KiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9O LCBBUklTSU5HIE9VVCBPRgorKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBF UkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisrICovCisrCisrI2luY2x1ZGUgImluY2x1ZGVz LmgiCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysj aW5jbHVkZSAiLi4vdGVzdF9oZWxwZXIvdGVzdF9oZWxwZXIuaCIKKysKKysjaW5jbHVkZSAic3No YnVmLmgiCisrI2luY2x1ZGUgInNzaC1wa2NzMTEtdXJpLmgiCisrCisrI2RlZmluZSBFTVBUWV9V UkkgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCkKKysKKysvKiBwcm90b3R5cGVzIGFyZSBub3QgcHVibGljIC0tIHNwZWNpZnkgdGhl bSBoZXJlIGludGVybmFsbHkgZm9yIHRlc3RzICovCisrc3RydWN0IHNzaGJ1ZiAqcGVyY2VudF9l bmNvZGUoY29uc3QgY2hhciAqLCBzaXplX3QsIGNoYXIgKik7CisraW50IHBlcmNlbnRfZGVjb2Rl KGNoYXIgKiwgY2hhciAqKik7CisrCisrdm9pZAorK2NvbXBhcmVfdXJpKHN0cnVjdCBwa2NzMTFf dXJpICphLCBzdHJ1Y3QgcGtjczExX3VyaSAqYikKKyt7CisrCUFTU0VSVF9QVFJfTkUoYSwgTlVM TCk7CisrCUFTU0VSVF9QVFJfTkUoYiwgTlVMTCk7CisrCUFTU0VSVF9TSVpFX1RfRVEoYS0+aWRf bGVuLCBiLT5pZF9sZW4pOworKwlBU1NFUlRfTUVNX0VRKGEtPmlkLCBiLT5pZCwgYS0+aWRfbGVu KTsKKysJaWYgKGItPm9iamVjdCAhPSBOVUxMKQorKwkJQVNTRVJUX1NUUklOR19FUShhLT5vYmpl Y3QsIGItPm9iamVjdCk7CisrCWVsc2UgLyogYm90aCBzaG91bGQgYmUgbnVsbCAqLworKwkJQVNT RVJUX1BUUl9FUShhLT5vYmplY3QsIGItPm9iamVjdCk7CisrCWlmIChiLT5tb2R1bGVfcGF0aCAh PSBOVUxMKQorKwkJQVNTRVJUX1NUUklOR19FUShhLT5tb2R1bGVfcGF0aCwgYi0+bW9kdWxlX3Bh dGgpOworKwllbHNlIC8qIGJvdGggc2hvdWxkIGJlIG51bGwgKi8KKysJCUFTU0VSVF9QVFJfRVEo YS0+bW9kdWxlX3BhdGgsIGItPm1vZHVsZV9wYXRoKTsKKysJaWYgKGItPnRva2VuICE9IE5VTEwp CisrCQlBU1NFUlRfU1RSSU5HX0VRKGEtPnRva2VuLCBiLT50b2tlbik7CisrCWVsc2UgLyogYm90 aCBzaG91bGQgYmUgbnVsbCAqLworKwkJQVNTRVJUX1BUUl9FUShhLT50b2tlbiwgYi0+dG9rZW4p OworKwlpZiAoYi0+bWFudWYgIT0gTlVMTCkKKysJCUFTU0VSVF9TVFJJTkdfRVEoYS0+bWFudWYs IGItPm1hbnVmKTsKKysJZWxzZSAvKiBib3RoIHNob3VsZCBiZSBudWxsICovCisrCQlBU1NFUlRf UFRSX0VRKGEtPm1hbnVmLCBiLT5tYW51Zik7CisrCWlmIChiLT5saWJfbWFudWYgIT0gTlVMTCkK KysJCUFTU0VSVF9TVFJJTkdfRVEoYS0+bGliX21hbnVmLCBiLT5saWJfbWFudWYpOworKwllbHNl IC8qIGJvdGggc2hvdWxkIGJlIG51bGwgKi8KKysJCUFTU0VSVF9QVFJfRVEoYS0+bGliX21hbnVm LCBiLT5saWJfbWFudWYpOworKwlpZiAoYi0+c2VyaWFsICE9IE5VTEwpCisrCQlBU1NFUlRfU1RS SU5HX0VRKGEtPnNlcmlhbCwgYi0+c2VyaWFsKTsKKysJZWxzZSAvKiBib3RoIHNob3VsZCBiZSBu dWxsICovCisrCQlBU1NFUlRfUFRSX0VRKGEtPnNlcmlhbCwgYi0+c2VyaWFsKTsKKyt9CisrCisr dm9pZAorK2NoZWNrX3BhcnNlX3J2KGNoYXIgKnVyaSwgc3RydWN0IHBrY3MxMV91cmkgKmV4cGVj dCwgaW50IGV4cGVjdF9ydikKKyt7CisrCWNoYXIgKmJ1ZiA9IE5VTEwsICpzdHI7CisrCXN0cnVj dCBwa2NzMTFfdXJpICpwa2NzMTF1cmkgPSBOVUxMOworKwlpbnQgcnY7CisrCisrCWlmIChleHBl Y3RfcnYgPT0gMCkKKysJCXN0ciA9ICJWYWxpZCI7CisrCWVsc2UKKysJCXN0ciA9ICJJbnZhbGlk IjsKKysJYXNwcmludGYoJmJ1ZiwgIiVzIFBLQ1MjMTEgVVJJIHBhcnNpbmc6ICVzIiwgc3RyLCB1 cmkpOworKwlURVNUX1NUQVJUKGJ1Zik7CisrCWZyZWUoYnVmKTsKKysJcGtjczExdXJpID0gcGtj czExX3VyaV9pbml0KCk7CisrCXJ2ID0gcGtjczExX3VyaV9wYXJzZSh1cmksIHBrY3MxMXVyaSk7 CisrCUFTU0VSVF9JTlRfRVEocnYsIGV4cGVjdF9ydik7CisrCWlmIChydiA9PSAwKSAvKiBpbiBj YXNlIG9mIGZhaWx1cmUgcmVzdWx0IGlzIHVuZGVmaW5lZCAqLworKwkJY29tcGFyZV91cmkocGtj czExdXJpLCBleHBlY3QpOworKwlwa2NzMTFfdXJpX2NsZWFudXAocGtjczExdXJpKTsKKysJZnJl ZShleHBlY3QpOworKwlURVNUX0RPTkUoKTsKKyt9CisrCisrdm9pZAorK2NoZWNrX3BhcnNlKGNo YXIgKnVyaSwgc3RydWN0IHBrY3MxMV91cmkgKmV4cGVjdCkKKyt7CisrCWNoZWNrX3BhcnNlX3J2 KHVyaSwgZXhwZWN0LCAwKTsKKyt9CisrCisrc3RydWN0IHBrY3MxMV91cmkgKgorK2NvbXBvc2Vf dXJpKHVuc2lnbmVkIGNoYXIgKmlkLCBzaXplX3QgaWRfbGVuLCBjaGFyICp0b2tlbiwgY2hhciAq bGliX21hbnVmLAorKyAgICBjaGFyICptYW51ZiwgY2hhciAqc2VyaWFsLCBjaGFyICptb2R1bGVf cGF0aCwgY2hhciAqb2JqZWN0LCBjaGFyICpwaW4pCisreworKwlzdHJ1Y3QgcGtjczExX3VyaSAq dXJpID0gcGtjczExX3VyaV9pbml0KCk7CisrCWlmIChpZF9sZW4gPiAwKSB7CisrCQl1cmktPmlk X2xlbiA9IGlkX2xlbjsKKysJCXVyaS0+aWQgPSBpZDsKKysJfQorKwl1cmktPm1vZHVsZV9wYXRo ID0gbW9kdWxlX3BhdGg7CisrCXVyaS0+dG9rZW4gPSB0b2tlbjsKKysJdXJpLT5saWJfbWFudWYg PSBsaWJfbWFudWY7CisrCXVyaS0+bWFudWYgPSBtYW51ZjsKKysJdXJpLT5zZXJpYWwgPSBzZXJp YWw7CisrCXVyaS0+b2JqZWN0ID0gb2JqZWN0OworKwl1cmktPnBpbiA9IHBpbjsKKysJcmV0dXJu IHVyaTsKKyt9CisrCisrc3RhdGljIHZvaWQKKyt0ZXN0X3BhcnNlX3ZhbGlkKHZvaWQpCisrewor KwkvKiBwYXRoIGFyZ3VtZW50cyAqLworKwljaGVja19wYXJzZSgicGtjczExOmlkPSUwMSIsCisr CSAgICBjb21wb3NlX3VyaSgiXHgwMSIsIDEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfcGFyc2UoInBrY3MxMTppZD0lMDAlMDEiLAorKwkgICAg Y29tcG9zZV91cmkoIlx4MDBceDAxIiwgMiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCkpOworKwljaGVja19wYXJzZSgicGtjczExOnRva2VuPVNTSCUyMEtleXMiLAor KwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgIlNTSCBLZXlzIiwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19wYXJzZSgicGtjczExOmxpYnJhcnktbWFudWZh Y3R1cmVyPU9wZW5TQyIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCAiT3BlblND IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19wYXJzZSgicGtjczEx Om1hbnVmYWN0dXJlcj1waXZfSUkiLAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwg TlVMTCwgInBpdl9JSSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfcGFyc2Uo InBrY3MxMTpzZXJpYWw9SWFtU2VyaWFsIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5V TEwsIE5VTEwsIE5VTEwsICJJYW1TZXJpYWwiLCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNr X3BhcnNlKCJwa2NzMTE6b2JqZWN0PVNJR04lMjBLZXkiLAorKwkgICAgY29tcG9zZV91cmkoTlVM TCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIlNJR04gS2V5IiwgTlVMTCkpOwor KwkvKiBxdWVyeSBhcmd1bWVudHMgKi8KKysJY2hlY2tfcGFyc2UoInBrY3MxMTo/bW9kdWxlLXBh dGg9L3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwKKysJICAgIGNvbXBvc2VfdXJpKE5VTEws IDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICIvdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28i LCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6P3Bpbi12YWx1ZT0xMjM0NTYi LAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgIjEyMzQ1NiIpKTsKKysKKysJLyogY29tYmluYXRpb25zICovCisrCS8qIElEIFNI T1VMRCBiZSBwZXJjZW50IGVuY29kZWQgKi8KKysJY2hlY2tfcGFyc2UoInBrY3MxMTp0b2tlbj1T U0glMjBLZXk7aWQ9MCIsCisrCSAgICBjb21wb3NlX3VyaSgiMCIsIDEsICJTU0ggS2V5IiwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19wYXJzZSgKKysJICAg ICJwa2NzMTE6bWFudWZhY3R1cmVyPUNBQz9tb2R1bGUtcGF0aD0vdXNyL2xpYjY0L3AxMS1raXQt cHJveHkuc28iLAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgIkNBQyIs IE5VTEwsCisrCSAgICAiL3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwgTlVMTCwgTlVMTCkp OworKwljaGVja19wYXJzZSgKKysJICAgICJwa2NzMTE6b2JqZWN0PVJTQSUyMEtleT9tb2R1bGUt cGF0aD0vdXNyL2xpYjY0L3BrY3MxMS9vcGVuY3J5cHRva2kuc28iLAorKwkgICAgY29tcG9zZV91 cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKysJICAgICIvdXNyL2xpYjY0L3Br Y3MxMS9vcGVuY3J5cHRva2kuc28iLCAiUlNBIEtleSIsIE5VTEwpKTsKKysJY2hlY2tfcGFyc2Uo InBrY3MxMTo/bW9kdWxlLXBhdGg9L3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvJnBpbi12YWx1 ZT0xMjM0NTYiLAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgIi91c3IvbGliNjQvcDExLWtpdC1wcm94eS5zbyIsIE5VTEwsICIxMjM0NTYiKSk7Cisr CisrCS8qIGVtcHR5IHBhdGggY29tcG9uZW50IG1hdGNoZXMgZXZlcnl0aGluZyAqLworKwljaGVj a19wYXJzZSgicGtjczExOiIsIEVNUFRZX1VSSSk7CisrCisrCS8qIGVtcHR5IHN0cmluZyBpcyBh IHZhbGlkIHRvIG1hdGNoIGFnYWluc3QgKGFuZCBkaWZmZXJlbnQgZnJvbSBOVUxMKSAqLworKwlj aGVja19wYXJzZSgicGtjczExOnRva2VuPSIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCAi IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwkvKiBQZXJjZW50IGNo YXJhY3RlciBuZWVkcyB0byBiZSBwZXJjZW50LWVuY29kZWQgKi8KKysJY2hlY2tfcGFyc2UoInBr Y3MxMTp0b2tlbj0lMjUiLAorKwkgICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsICIlIiwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworK30KKysKKytzdGF0aWMgdm9pZAorK3Rl c3RfcGFyc2VfaW52YWxpZCh2b2lkKQorK3sKKysJLyogSW52YWxpZCBwZXJjZW50IGVuY29kaW5n ICovCisrCWNoZWNrX3BhcnNlX3J2KCJwa2NzMTE6aWQ9JTAiLCBFTVBUWV9VUkksIC0xKTsKKysJ LyogSW52YWxpZCBwZXJjZW50IGVuY29kaW5nICovCisrCWNoZWNrX3BhcnNlX3J2KCJwa2NzMTE6 aWQ9JVpaIiwgRU1QVFlfVVJJLCAtMSk7CisrCS8qIFNwYWNlIE1VU1QgYmUgcGVyY2VudCBlbmNv ZGVkIC0tIFhYWCBub3QgZW5mb3JjZWQgeWV0ICovCisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6dG9r ZW49U1NIIEtleXMiLAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgIlNTSCBLZXlzIiwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwkvKiBNVVNUIE5PVCBjb250YWlu IGR1cGxpY2F0ZSBhdHRyaWJ1dGVzIG9mIHRoZSBzYW1lIG5hbWUgKi8KKysJY2hlY2tfcGFyc2Vf cnYoInBrY3MxMTppZD0lMDE7aWQ9JTAyIiwgRU1QVFlfVVJJLCAtMSk7CisrCS8qIE1VU1QgTk9U IGNvbnRhaW4gZHVwbGljYXRlIGF0dHJpYnV0ZXMgb2YgdGhlIHNhbWUgbmFtZSAqLworKwljaGVj a19wYXJzZV9ydigicGtjczExOj9waW4tdmFsdWU9MTExMTExJnBpbi12YWx1ZT0xMjM0NTYiLCBF TVBUWV9VUkksIC0xKTsKKysJLyogVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBpbiBwYXRoIGFyZSBp Z25vcmVkIHdpdGggbG9nIG1lc3NhZ2UgKi8KKysJY2hlY2tfcGFyc2UoInBrY3MxMTprZXlfbmFt ZT1TU0giLCBFTVBUWV9VUkkpOworKwkvKiBVbnJlY29nbml6ZWQgYXR0cmlidXRlIGluIHF1ZXJ5 IFNIT1VMRCBiZSBpZ25vcmVkICovCisrCWNoZWNrX3BhcnNlKCJwa2NzMTE6P2tleV9uYW1lPVNT SCIsIEVNUFRZX1VSSSk7CisrfQorKworK3ZvaWQKKytjaGVja19nZW4oY2hhciAqZXhwZWN0LCBz dHJ1Y3QgcGtjczExX3VyaSAqdXJpKQorK3sKKysJY2hhciAqYnVmID0gTlVMTCwgKnVyaV9zdHI7 CisrCisrCWFzcHJpbnRmKCZidWYsICJWYWxpZCBQS0NTIzExIFVSSSBnZW5lcmF0aW9uOiAlcyIs IGV4cGVjdCk7CisrCVRFU1RfU1RBUlQoYnVmKTsKKysJZnJlZShidWYpOworKwl1cmlfc3RyID0g cGtjczExX3VyaV9nZXQodXJpKTsKKysJQVNTRVJUX1BUUl9ORSh1cmlfc3RyLCBOVUxMKTsKKysJ QVNTRVJUX1NUUklOR19FUSh1cmlfc3RyLCBleHBlY3QpOworKwlmcmVlKHVyaV9zdHIpOworKwlU RVNUX0RPTkUoKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKyt0ZXN0X2dlbmVyYXRlX3ZhbGlkKHZv aWQpCisreworKwkvKiBwYXRoIGFyZ3VtZW50cyAqLworKwljaGVja19nZW4oInBrY3MxMTppZD0l MDEiLAorKwkgICAgY29tcG9zZV91cmkoIlx4MDEiLCAxLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX2dlbigicGtjczExOmlkPSUwMCUwMSIsCisr CSAgICBjb21wb3NlX3VyaSgiXHgwMFx4MDEiLCAyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX2dlbigicGtjczExOnRva2VuPVNTSCUyMEtleXMi LCAvKiBzcGFjZSBtdXN0IGJlIHBlcmNlbnQgZW5jb2RlZCAqLworKwkgICAgY29tcG9zZV91cmko TlVMTCwgMCwgIlNTSCBLZXlzIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkp OworKwkvKiBsaWJyYXJ5LW1hbnVmYWN0dXJlciBpcyBub3QgaW1wbG1lbnRlZCBub3cgKi8KKysJ LypjaGVja19nZW4oInBrY3MxMTpsaWJyYXJ5LW1hbnVmYWN0dXJlcj1PcGVuU0MiLAorKwkgICAg Y29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgIk9wZW5TQyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpKTsqLworKwljaGVja19nZW4oInBrY3MxMTptYW51ZmFjdHVyZXI9cGl2X0lJIiwK KysJICAgIGNvbXBvc2VfdXJpKE5VTEwsIDAsIE5VTEwsIE5VTEwsICJwaXZfSUkiLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX2dlbigicGtjczExOnNlcmlhbD1JYW1TZXJpYWwi LAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgIklhbVNlcmlh bCIsIE5VTEwsIE5VTEwsIE5VTEwpKTsKKysJY2hlY2tfZ2VuKCJwa2NzMTE6b2JqZWN0PVJTQSUy MEtleSIsCisrCSAgICBjb21wb3NlX3VyaShOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBOVUxMLCAiUlNBIEtleSIsIE5VTEwpKTsKKysJLyogcXVlcnkgYXJndW1lbnRzICovCisrCWNo ZWNrX2dlbigicGtjczExOj9tb2R1bGUtcGF0aD0vdXNyL2xpYjY0L3AxMS1raXQtcHJveHkuc28i LAorKwkgICAgY29tcG9zZV91cmkoTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIi91 c3IvbGliNjQvcDExLWtpdC1wcm94eS5zbyIsIE5VTEwsIE5VTEwpKTsKKysKKysJLyogY29tYmlu YXRpb25zICovCisrCWNoZWNrX2dlbigicGtjczExOmlkPSUwMjt0b2tlbj1TU0glMjBLZXlzIiwK KysJICAgIGNvbXBvc2VfdXJpKCJceDAyIiwgMSwgIlNTSCBLZXlzIiwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCkpOworKwljaGVja19nZW4oInBrY3MxMTppZD0lRUUlMDI/bW9k dWxlLXBhdGg9L3Vzci9saWI2NC9wMTEta2l0LXByb3h5LnNvIiwKKysJICAgIGNvbXBvc2VfdXJp KCJceEVFXHgwMiIsIDIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICIvdXNyL2xpYjY0L3AxMS1r aXQtcHJveHkuc28iLCBOVUxMLCBOVUxMKSk7CisrCWNoZWNrX2dlbigicGtjczExOm9iamVjdD1F bmNyeXB0aW9uJTIwS2V5O21hbnVmYWN0dXJlcj1waXZfSUkiLAorKwkgICAgY29tcG9zZV91cmko TlVMTCwgMCwgTlVMTCwgTlVMTCwgInBpdl9JSSIsIE5VTEwsIE5VTEwsICJFbmNyeXB0aW9uIEtl eSIsIE5VTEwpKTsKKysKKysJLyogZW1wdHkgcGF0aCBjb21wb25lbnQgbWF0Y2hlcyBldmVyeXRo aW5nICovCisrCWNoZWNrX2dlbigicGtjczExOiIsIEVNUFRZX1VSSSk7CisrCisrfQorKworK3Zv aWQKKytjaGVja19lbmNvZGUoY2hhciAqc291cmNlLCBzaXplX3QgbGVuLCBjaGFyICphbGxvd19s aXN0LCBjaGFyICpleHBlY3QpCisreworKwljaGFyICpidWYgPSBOVUxMOworKwlzdHJ1Y3Qgc3No YnVmICpiOworKworKwlhc3ByaW50ZigmYnVmLCAicGVyY2VudF9lbmNvZGU6IGV4cGVjdGVkICVz IiwgZXhwZWN0KTsKKysJVEVTVF9TVEFSVChidWYpOworKwlmcmVlKGJ1Zik7CisrCisrCWIgPSBw ZXJjZW50X2VuY29kZShzb3VyY2UsIGxlbiwgYWxsb3dfbGlzdCk7CisrCUFTU0VSVF9TVFJJTkdf RVEoc3NoYnVmX3B0cihiKSwgZXhwZWN0KTsKKysJc3NoYnVmX2ZyZWUoYik7CisrCVRFU1RfRE9O RSgpOworK30KKysKKytzdGF0aWMgdm9pZAorK3Rlc3RfcGVyY2VudF9lbmNvZGVfbXVsdGlieXRl KHZvaWQpCisreworKwkvKiBTSE9VTEQgYmUgZW5jb2RlZCBhcyBvY3RldHMgYWNjb3JkaW5nIHRv IHRoZSBVVEYtOCBjaGFyYWN0ZXIgZW5jb2RpbmcgKi8KKysKKysJLyogbXVsdGktYnl0ZSBjaGFy YWN0ZXJzIGFyZSAiZm9yIGZyZWUiICovCisrCWNoZWNrX2VuY29kZSgiJCIsIDEsICIiLCAiJTI0 Iik7CisrCWNoZWNrX2VuY29kZSgiwqIiLCAyLCAiIiwgIiVDMiVBMiIpOworKwljaGVja19lbmNv ZGUoIuKCrCIsIDMsICIiLCAiJUUyJTgyJUFDIik7CisrCWNoZWNrX2VuY29kZSgi8JCNiCIsIDQs ICIiLCAiJUYwJTkwJThEJTg4Iik7CisrCisrCS8qIENLX1VURjhDSEFSIGlzIHVuc2lnbmVkIGNo YXIgKDEgYnl0ZSkgKi8KKysJLyogbGFiZWxzIFNIT1VMRCBiZSBub3JtYWxpemVkIHRvIE5GQyBb VUFYMTVdICovCisrCisrfQorKworK3N0YXRpYyB2b2lkCisrdGVzdF9wZXJjZW50X2VuY29kZSh2 b2lkKQorK3sKKysJLyogV2l0aG91dCBhbGxvdyBsaXN0IGVuY29kZXMgZXZlcnl0aGluZyAoZm9y IENLQV9JRCkgKi8KKysJY2hlY2tfZW5jb2RlKCJBKiIsIDIsICIiLCAiJTQxJTJBIik7CisrCWNo ZWNrX2VuY29kZSgiXHgwMCIsIDEsICIiLCAiJTAwIik7CisrCWNoZWNrX2VuY29kZSgiXHg3RiIs IDEsICIiLCAiJTdGIik7CisrCWNoZWNrX2VuY29kZSgiXHg4MCIsIDEsICIiLCAiJTgwIik7Cisr CWNoZWNrX2VuY29kZSgiXHhmZiIsIDEsICIiLCAiJUZGIik7CisrCisrCS8qIERlZmF1bHQgYWxs b3cgbGlzdCBlbmNvZGVzIGFueXRoaW5nIGJ1dCBzYWZlIGxldHRlcnMgKi8KKysJY2hlY2tfZW5j b2RlKCJ0ZXN0IiAiXHgwMCIgIjBhbHBoYSIsIDExLCBQS0NTMTFfVVJJX1dISVRFTElTVCwKKysJ ICAgICJ0ZXN0JTAwMGFscGhhIik7CisrCWNoZWNrX2VuY29kZSgiICIsIDEsIFBLQ1MxMV9VUklf V0hJVEVMSVNULAorKwkgICAgIiUyMCIpOyAvKiBTcGFjZSBNVVNUIGJlIHBlcmNlbnQgZW5jb2Rl ZCAqLworKwljaGVja19lbmNvZGUoIi8iLCAxLCBQS0NTMTFfVVJJX1dISVRFTElTVCwKKysJICAg ICIlMkYiKTsgLyogJy8nIGRlbGltaXRlciBNVVNUIGJlIHBlcmNlbnQgZW5jb2RlZCAoaW4gdGhl IHBhdGgpICovCisrCWNoZWNrX2VuY29kZSgiPyIsIDEsIFBLQ1MxMV9VUklfV0hJVEVMSVNULAor KwkgICAgIiUzRiIpOyAvKiBkZWxpbWl0ZXIgJz8nIE1VU1QgYmUgcGVyY2VudCBlbmNvZGVkIChp biB0aGUgcGF0aCkgKi8KKysJY2hlY2tfZW5jb2RlKCIjIiwgMSwgUEtDUzExX1VSSV9XSElURUxJ U1QsCisrCSAgICAiJTIzIik7IC8qICcjJyBNVVNUIGJlIGFsd2F5cyBwZXJjZW50IGVuY29kZWQg Ki8KKysJY2hlY2tfZW5jb2RlKCJrZXk9dmFsdWU7c2VwYXJhdG9yP3F1ZXJ5JmFtcDsjYW5jaCIs IDM1LCBQS0NTMTFfVVJJX1dISVRFTElTVCwKKysJICAgICJrZXklM0R2YWx1ZSUzQnNlcGFyYXRv ciUzRnF1ZXJ5JTI2YW1wJTNCJTIzYW5jaCIpOworKworKwkvKiBDb21wb25lbnRzIGluIHF1ZXJ5 IGNhbiBoYXZlICcvJyB1bmVuY29kZWQgKHVzZWZ1bCBmb3IgcGF0aHMpICovCisrCWNoZWNrX2Vu Y29kZSgiL3BhdGgvdG8uZmlsZSIsIDEzLCBQS0NTMTFfVVJJX1dISVRFTElTVCAiLyIsCisrCSAg ICAiL3BhdGgvdG8uZmlsZSIpOworK30KKysKKyt2b2lkCisrY2hlY2tfZGVjb2RlKGNoYXIgKnNv dXJjZSwgY2hhciAqZXhwZWN0LCBpbnQgZXhwZWN0X2xlbikKKyt7CisrCWNoYXIgKmJ1ZiA9IE5V TEwsICpvdXQgPSBOVUxMOworKwlpbnQgcnY7CisrCisrCWFzcHJpbnRmKCZidWYsICJwZXJjZW50 X2RlY29kZTogJXMiLCBzb3VyY2UpOworKwlURVNUX1NUQVJUKGJ1Zik7CisrCWZyZWUoYnVmKTsK KysKKysJcnYgPSBwZXJjZW50X2RlY29kZShzb3VyY2UsICZvdXQpOworKwlBU1NFUlRfSU5UX0VR KHJ2LCBleHBlY3RfbGVuKTsKKysJaWYgKHJ2ID49IDApCisrCQlBU1NFUlRfTUVNX0VRKG91dCwg ZXhwZWN0LCBleHBlY3RfbGVuKTsKKysJZnJlZShvdXQpOworKwlURVNUX0RPTkUoKTsKKyt9Cisr Cisrc3RhdGljIHZvaWQKKyt0ZXN0X3BlcmNlbnRfZGVjb2RlKHZvaWQpCisreworKwkvKiBzaW1w bGUgdmFsaWQgY2FzZXMgKi8KKysJY2hlY2tfZGVjb2RlKCIlMDAiLCAiXHgwMCIsIDEpOworKwlj aGVja19kZWNvZGUoIiVGRiIsICJceEZGIiwgMSk7CisrCisrCS8qIG5vcm1hbCBzdHJpbmdzIHNo b2xkIGJlIGtlcHQgaW50YWN0ICovCisrCWNoZWNrX2RlY29kZSgic3RyaW5ncyBhcmUgbGVmdCIs ICJzdHJpbmdzIGFyZSBsZWZ0IiwgMTYpOworKwljaGVja19kZWNvZGUoIjEwJTI1IG9mIHRyZWVz IiwgIjEwJSBvZiB0cmVlcyIsIDEyKTsKKysKKysJLyogbWFrZSBzdXJlIG5vIG1vcmUgdGhhbiAy IGJ5dGVzIGFyZSBwYXJzZWQgKi8KKysJY2hlY2tfZGVjb2RlKCIlMjIyIiwgIlx4MjIiICIyIiwg Mik7CisrCisrCS8qIGludmFsaWQgZXhwZWN0cyBmYWlsdXJlICovCisrCWNoZWNrX2RlY29kZSgi JTAiLCAiIiwgLTEpOworKwljaGVja19kZWNvZGUoIiVaIiwgIiIsIC0xKTsKKysJY2hlY2tfZGVj b2RlKCIlRkciLCAiIiwgLTEpOworK30KKysKKyt2b2lkCisrdGVzdHModm9pZCkKKyt7CisrCXRl c3RfcGVyY2VudF9lbmNvZGUoKTsKKysJdGVzdF9wZXJjZW50X2VuY29kZV9tdWx0aWJ5dGUoKTsK KysJdGVzdF9wZXJjZW50X2RlY29kZSgpOworKwl0ZXN0X3BhcnNlX3ZhbGlkKCk7CisrCXRlc3Rf cGFyc2VfaW52YWxpZCgpOworKwl0ZXN0X2dlbmVyYXRlX3ZhbGlkKCk7CisrfQorKworK3ZvaWQK KytiZW5jaG1hcmtzKHZvaWQpCisreworKwlwcmludGYoIm5vIGJlbmNobWFya3NcbiIpOworK30K KysKK2RpZmYgLS1naXQgYS9zc2gtYWRkLmMgYi9zc2gtYWRkLmMKK2luZGV4IDFlOWVkZGY5MC4u ZTQ3NmZhNjYyIDEwMDY0NAorLS0tIGEvc3NoLWFkZC5jCisrKysgYi9zc2gtYWRkLmMKK0BAIC03 MCw2ICs3MCw3IEBACisgI2luY2x1ZGUgInNzaC1zay5oIgorICNpbmNsdWRlICJzay1hcGkuaCIK KyAjaW5jbHVkZSAiaG9zdGZpbGUuaCIKKysjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKKyAK KyAjZGVmaW5lIENFUlRfRVhQSVJZX0dSQUNFCSg1KjYwKQorIAorQEAgLTI3Miw2ICsyNzMsMzgg QEAgY2hlY2tfY2VydF9saWZldGltZShjb25zdCBzdHJ1Y3Qgc3Noa2V5ICpjZXJ0LCBpbnQgY2Vy dF9saWZldGltZSkKKyAJcmV0dXJuIE1JTklNVU0oY2VydF9saWZldGltZSwgKGludCluKTsKKyB9 CisgCisrI2lmZGVmIEVOQUJMRV9QS0NTMTEKKytzdGF0aWMgaW50CisrdXBkYXRlX2NhcmQoaW50 IGFnZW50X2ZkLCBpbnQgYWRkLCBjb25zdCBjaGFyICppZCwgaW50IHFmbGFnLAorKyAgICBpbnQg a2V5X29ubHksIGludCBjZXJ0X29ubHksCisrICAgIHN0cnVjdCBkZXN0X2NvbnN0cmFpbnQgKipk ZXN0X2NvbnN0cmFpbnRzLCBzaXplX3QgbmRlc3RfY29uc3RyYWludHMsCisrICAgIHN0cnVjdCBz c2hrZXkgKipjZXJ0cywgc2l6ZV90IG5jZXJ0cywgY2hhciAqcGluKTsKKysKKytpbnQKKyt1cGRh dGVfcGtjczExX3VyaShpbnQgYWdlbnRfZmQsIGludCBhZGRpbmcsIGNvbnN0IGNoYXIgKnBrY3Mx MV91cmksIGludCBxZmxhZywKKysgICAgc3RydWN0IGRlc3RfY29uc3RyYWludCAqKmRlc3RfY29u c3RyYWludHMsIHNpemVfdCBuZGVzdF9jb25zdHJhaW50cykKKyt7CisrCWNoYXIgKnBpbiA9IE5V TEw7CisrCXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7CisrCisrCS8qIGRyeS1ydW4gcGFyc2UgdG8g bWFrZSBzdXJlIHRoZSBVUkkgaXMgdmFsaWQgYW5kIHRvIHJlcG9ydCBlcnJvcnMgKi8KKysJdXJp ID0gcGtjczExX3VyaV9pbml0KCk7CisrCWlmIChwa2NzMTFfdXJpX3BhcnNlKChjaGFyICopIHBr Y3MxMV91cmksIHVyaSkgIT0gMCkKKysJCWZhdGFsKCJGYWlsZWQgdG8gcGFyc2UgUEtDUyMxMSBV UkkiKTsKKysJaWYgKHVyaS0+cGluICE9IE5VTEwpIHsKKysJCXBpbiA9IHN0cmR1cCh1cmktPnBp bik7CisrCQlpZiAocGluID09IE5VTEwpIHsKKysJCQlmYXRhbCgiRmFpbGVkIHRvIGR1cHBsaWNh dGUgc3RyaW5nIik7CisrCQl9CisrCQkvKiBwaW4gaXMgZnJlZWQgaW4gdGhlIHVwZGF0ZV9jYXJk KCkgKi8KKysJfQorKwlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKKysKKysJcmV0dXJuIHVwZGF0 ZV9jYXJkKGFnZW50X2ZkLCBhZGRpbmcsIHBrY3MxMV91cmksIHFmbGFnLCAxLCAwLAorKwkgICAg ICAgICAgIGRlc3RfY29uc3RyYWludHMsIG5kZXN0X2NvbnN0cmFpbnRzLCBOVUxMLCAwLCBwaW4p OworK30KKysjZW5kaWYKKysKKyBzdGF0aWMgaW50CisgYWRkX2ZpbGUoaW50IGFnZW50X2ZkLCBj b25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGtleV9vbmx5LCBpbnQgY2VydF9vbmx5LAorICAgICBp bnQgcWZsYWcsIGludCBOZmxhZywgY29uc3QgY2hhciAqc2twcm92aWRlciwKK0BAIC00NjIsMTUg KzQ5NSwxNCBAQCBzdGF0aWMgaW50CisgdXBkYXRlX2NhcmQoaW50IGFnZW50X2ZkLCBpbnQgYWRk LCBjb25zdCBjaGFyICppZCwgaW50IHFmbGFnLAorICAgICBpbnQga2V5X29ubHksIGludCBjZXJ0 X29ubHksCisgICAgIHN0cnVjdCBkZXN0X2NvbnN0cmFpbnQgKipkZXN0X2NvbnN0cmFpbnRzLCBz aXplX3QgbmRlc3RfY29uc3RyYWludHMsCistICAgIHN0cnVjdCBzc2hrZXkgKipjZXJ0cywgc2l6 ZV90IG5jZXJ0cykKKysgICAgc3RydWN0IHNzaGtleSAqKmNlcnRzLCBzaXplX3QgbmNlcnRzLCBj aGFyICpwaW4pCisgeworLQljaGFyICpwaW4gPSBOVUxMOworIAlpbnQgciwgcmV0ID0gLTE7Cisg CisgCWlmIChrZXlfb25seSkKKyAJCW5jZXJ0cyA9IDA7CisgCistCWlmIChhZGQpIHsKKysJaWYg KGFkZCAmJiBwaW4gPT0gTlVMTCkgeworIAkJaWYgKChwaW4gPSByZWFkX3Bhc3NwaHJhc2UoIkVu dGVyIHBhc3NwaHJhc2UgZm9yIFBLQ1MjMTE6ICIsCisgCQkgICAgUlBfQUxMT1dfU1RESU4pKSA9 PSBOVUxMKQorIAkJCXJldHVybiAtMTsKK0BAIC02NTIsNiArNjg0LDE0IEBAIGRvX2ZpbGUoaW50 IGFnZW50X2ZkLCBpbnQgZGVsZXRpbmcsIGludCBrZXlfb25seSwgaW50IGNlcnRfb25seSwKKyAg ICAgY2hhciAqZmlsZSwgaW50IHFmbGFnLCBpbnQgTmZsYWcsIGNvbnN0IGNoYXIgKnNrcHJvdmlk ZXIsCisgICAgIHN0cnVjdCBkZXN0X2NvbnN0cmFpbnQgKipkZXN0X2NvbnN0cmFpbnRzLCBzaXpl X3QgbmRlc3RfY29uc3RyYWludHMpCisgeworKyNpZmRlZiBFTkFCTEVfUEtDUzExCisrCWlmIChz dHJsZW4oZmlsZSkgPj0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgorKwkgICAgc3RybmNt cChmaWxlLCBQS0NTMTFfVVJJX1NDSEVNRSwKKysJICAgIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVN RSkpID09IDApIHsKKysJCXJldHVybiB1cGRhdGVfcGtjczExX3VyaShhZ2VudF9mZCwgIWRlbGV0 aW5nLCBmaWxlLCBxZmxhZywKKysgICAgICAgICAgICAgICAgICAgZGVzdF9jb25zdHJhaW50cywg bmRlc3RfY29uc3RyYWludHMpOworKwl9CisrI2VuZGlmCisgCWlmIChkZWxldGluZykgeworIAkJ aWYgKGRlbGV0ZV9maWxlKGFnZW50X2ZkLCBmaWxlLCBrZXlfb25seSwKKyAJCSAgICBjZXJ0X29u bHksIHFmbGFnKSA9PSAtMSkKK0BAIC0xMDAzLDcgKzEwNDMsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKKyAJCWlmICh1cGRhdGVfY2FyZChhZ2VudF9mZCwgIWRlbGV0aW5nLCBwa2Nz MTFwcm92aWRlciwKKyAJCSAgICBxZmxhZywga2V5X29ubHksIGNlcnRfb25seSwKKyAJCSAgICBk ZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25zdHJhaW50cywKKy0JCSAgICBjZXJ0cywgbmNlcnRz KSA9PSAtMSkKKysJCSAgICBjZXJ0cywgbmNlcnRzLCBOVUxMKSA9PSAtMSkKKyAJCQlyZXQgPSAx OworIAkJZm9yIChuID0gMDsgbiA8IG5jZXJ0czsgbisrKQorIAkJCXNzaGtleV9mcmVlKGNlcnRz W25dKTsKK2RpZmYgLS1naXQgYS9zc2gtYWdlbnQuYyBiL3NzaC1hZ2VudC5jCitpbmRleCA3Nzcz YTRiMDcuLjM0NTFkN2ExNCAxMDA2NDQKKy0tLSBhL3NzaC1hZ2VudC5jCisrKysgYi9zc2gtYWdl bnQuYworQEAgLTE1NDYsMTAgKzE1NDYsNzUgQEAgYWRkX3AxMV9pZGVudGl0eShzdHJ1Y3Qgc3No a2V5ICprZXksIGNoYXIgKmNvbW1lbnQsIGNvbnN0IGNoYXIgKnByb3ZpZGVyLAorIAlpZHRhYi0+ bmVudHJpZXMrKzsKKyB9CisgCisrc3RhdGljIGNoYXIgKgorK3Nhbml0aXplX3BrY3MxMV9wcm92 aWRlcihjb25zdCBjaGFyICpwcm92aWRlcikKKyt7CisrCXN0cnVjdCBwa2NzMTFfdXJpICp1cmkg PSBOVUxMOworKwljaGFyICpzYW5lX3VyaSwgKm1vZHVsZV9wYXRoID0gTlVMTDsgLyogZGVmYXVs dCBwYXRoICovCisrCWNoYXIgY2Fub25pY2FsX3Byb3ZpZGVyW1BBVEhfTUFYXTsKKysKKysJaWYg KHByb3ZpZGVyID09IE5VTEwpCisrCQlyZXR1cm4gTlVMTDsKKysKKysJbWVtc2V0KGNhbm9uaWNh bF9wcm92aWRlciwgMCwgc2l6ZW9mKGNhbm9uaWNhbF9wcm92aWRlcikpOworKworKwlpZiAoc3Ry bGVuKHByb3ZpZGVyKSA+PSBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCisrCSAgICBzdHJu Y21wKHByb3ZpZGVyLCBQS0NTMTFfVVJJX1NDSEVNRSwKKysJICAgIHN0cmxlbihQS0NTMTFfVVJJ X1NDSEVNRSkpID09IDApIHsKKysJCS8qIFBLQ1MjMTEgVVJJICovCisrCQl1cmkgPSBwa2NzMTFf dXJpX2luaXQoKTsKKysJCWlmICh1cmkgPT0gTlVMTCkgeworKwkJCWVycm9yKCJGYWlsZWQgdG8g aW5pdCBQS0NTIzExIFVSSSIpOworKwkJCXJldHVybiBOVUxMOworKwkJfQorKworKwkJaWYgKHBr Y3MxMV91cmlfcGFyc2UocHJvdmlkZXIsIHVyaSkgIT0gMCkgeworKwkJCWVycm9yKCJGYWlsZWQg dG8gcGFyc2UgUEtDUyMxMSBVUkkiKTsKKysJCQlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKKysJ CQlyZXR1cm4gTlVMTDsKKysJCX0KKysJCS8qIHZhbGlkYXRlIGFsc28gcHJvdmlkZXIgZnJvbSBV UkkgKi8KKysJCWlmICh1cmktPm1vZHVsZV9wYXRoKQorKwkJCW1vZHVsZV9wYXRoID0gc3RyZHVw KHVyaS0+bW9kdWxlX3BhdGgpOworKwl9IGVsc2UKKysJCW1vZHVsZV9wYXRoID0gc3RyZHVwKHBy b3ZpZGVyKTsgLyogc2ltcGxlIHBhdGggKi8KKysKKysJaWYgKG1vZHVsZV9wYXRoICE9IE5VTEwp IHsgLyogZG8gbm90IHZhbGlkYXRlIGRlZmF1bHQgTlVMTCBwYXRoIGluIFVSSSAqLworKwkJaWYg KHJlYWxwYXRoKG1vZHVsZV9wYXRoLCBjYW5vbmljYWxfcHJvdmlkZXIpID09IE5VTEwpIHsKKysJ CQl2ZXJib3NlKCJmYWlsZWQgUEtDUyMxMSBwcm92aWRlciBcIiUuMTAwc1wiOiByZWFscGF0aDog JXMiLAorKwkJCSAgICBtb2R1bGVfcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKysJCQlmcmVlKG1v ZHVsZV9wYXRoKTsKKysJCQlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKKysJCQlyZXR1cm4gTlVM TDsKKysJCX0KKysJCWZyZWUobW9kdWxlX3BhdGgpOworKwkJaWYgKG1hdGNoX3BhdHRlcm5fbGlz dChjYW5vbmljYWxfcHJvdmlkZXIsIGFsbG93ZWRfcHJvdmlkZXJzLCAwKSAhPSAxKSB7CisrCQkJ dmVyYm9zZSgicmVmdXNpbmcgUEtDUyMxMSBwcm92aWRlciBcIiUuMTAwc1wiOiAiCisrCQkJICAg ICJub3QgYWxsb3dlZCIsIGNhbm9uaWNhbF9wcm92aWRlcik7CisrCQkJcGtjczExX3VyaV9jbGVh bnVwKHVyaSk7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisrCisrCQkvKiBjb3B5IHZlcmlmaWVk IGFuZCBzYW5pdGl6ZWQgcHJvdmlkZXIgcGF0aCBiYWNrIHRvIHRoZSB1cmkgKi8KKysJCWlmICh1 cmkpIHsKKysJCQlmcmVlKHVyaS0+bW9kdWxlX3BhdGgpOworKwkJCXVyaS0+bW9kdWxlX3BhdGgg PSB4c3RyZHVwKGNhbm9uaWNhbF9wcm92aWRlcik7CisrCQl9CisrCX0KKysKKysJaWYgKHVyaSkg eworKwkJc2FuZV91cmkgPSBwa2NzMTFfdXJpX2dldCh1cmkpOworKwkJcGtjczExX3VyaV9jbGVh bnVwKHVyaSk7CisrCQlyZXR1cm4gc2FuZV91cmk7CisrCX0gZWxzZSB7CisrCQlyZXR1cm4geHN0 cmR1cChjYW5vbmljYWxfcHJvdmlkZXIpOyAvKiBzaW1wbGUgcGF0aCAqLworKwl9CisrfQorKwor IHN0YXRpYyB2b2lkCisgcHJvY2Vzc19hZGRfc21hcnRjYXJkX2tleShTb2NrZXRFbnRyeSAqZSkK KyB7CistCWNoYXIgKnByb3ZpZGVyID0gTlVMTCwgKnBpbiA9IE5VTEwsIGNhbm9uaWNhbF9wcm92 aWRlcltQQVRIX01BWF07CisrCWNoYXIgKnByb3ZpZGVyID0gTlVMTCwgKnBpbiA9IE5VTEwsICpz YW5lX3VyaSA9IE5VTEw7CisgCWNoYXIgKipjb21tZW50cyA9IE5VTEw7CisgCWludCByLCBpLCBj b3VudCA9IDAsIHN1Y2Nlc3MgPSAwLCBjb25maXJtID0gMDsKKyAJdV9pbnQgc2Vjb25kcyA9IDA7 CitAQCAtMTU3OCwyNSArMTY0MywxOCBAQCBwcm9jZXNzX2FkZF9zbWFydGNhcmRfa2V5KFNvY2tl dEVudHJ5ICplKQorIAkJICAgICJwcm92aWRlcnMgaXMgZGlzYWJsZWQiLCBwcm92aWRlcik7Cisg CQlnb3RvIHNlbmQ7CisgCX0KKy0JaWYgKHJlYWxwYXRoKHByb3ZpZGVyLCBjYW5vbmljYWxfcHJv dmlkZXIpID09IE5VTEwpIHsKKy0JCXZlcmJvc2UoImZhaWxlZCBQS0NTIzExIGFkZCBvZiBcIiUu MTAwc1wiOiByZWFscGF0aDogJXMiLAorLQkJICAgIHByb3ZpZGVyLCBzdHJlcnJvcihlcnJubykp OworLQkJZ290byBzZW5kOworLQl9CistCWlmIChtYXRjaF9wYXR0ZXJuX2xpc3QoY2Fub25pY2Fs X3Byb3ZpZGVyLCBhbGxvd2VkX3Byb3ZpZGVycywgMCkgIT0gMSkgeworLQkJdmVyYm9zZSgicmVm dXNpbmcgUEtDUyMxMSBhZGQgb2YgXCIlLjEwMHNcIjogIgorLQkJICAgICJwcm92aWRlciBub3Qg YWxsb3dlZCIsIGNhbm9uaWNhbF9wcm92aWRlcik7CisrCXNhbmVfdXJpID0gc2FuaXRpemVfcGtj czExX3Byb3ZpZGVyKHByb3ZpZGVyKTsKKysJaWYgKHNhbmVfdXJpID09IE5VTEwpCisgCQlnb3Rv IHNlbmQ7CistCX0KKy0JZGVidWdfZigiYWRkICUuMTAwcyIsIGNhbm9uaWNhbF9wcm92aWRlcik7 CisgCWlmIChsaWZldGltZSAmJiAhZGVhdGgpCisgCQlkZWF0aCA9IG1vbm90aW1lKCkgKyBsaWZl dGltZTsKKyAKKy0JY291bnQgPSBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNhbm9uaWNhbF9wcm92aWRl ciwgcGluLCAma2V5cywgJmNvbW1lbnRzKTsKKysJZGVidWdfZigiYWRkICUuMTAwcyIsIHNhbmVf dXJpKTsKKysJY291bnQgPSBwa2NzMTFfYWRkX3Byb3ZpZGVyKHNhbmVfdXJpLCBwaW4sICZrZXlz LCAmY29tbWVudHMpOworIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworIAkJaWYgKGNv bW1lbnRzW2ldID09IE5VTEwgfHwgY29tbWVudHNbaV1bMF0gPT0gJ1wwJykgeworIAkJCWZyZWUo Y29tbWVudHNbaV0pOworLQkJCWNvbW1lbnRzW2ldID0geHN0cmR1cChjYW5vbmljYWxfcHJvdmlk ZXIpOworKwkJCWNvbW1lbnRzW2ldID0geHN0cmR1cChzYW5lX3VyaSk7CisgCQl9CisgCQlmb3Ig KGogPSAwOyBqIDwgbmNlcnRzOyBqKyspIHsKKyAJCQlpZiAoIXNzaGtleV9pc19jZXJ0KGNlcnRz W2pdKSkKK0BAIC0xNjA2LDEzICsxNjY0LDEzIEBAIHByb2Nlc3NfYWRkX3NtYXJ0Y2FyZF9rZXko U29ja2V0RW50cnkgKmUpCisgCQkJaWYgKHBrY3MxMV9tYWtlX2NlcnQoa2V5c1tpXSwgY2VydHNb al0sICZrKSAhPSAwKQorIAkJCQljb250aW51ZTsKKyAJCQlhZGRfcDExX2lkZW50aXR5KGssIHhz dHJkdXAoY29tbWVudHNbaV0pLAorLQkJCSAgICBjYW5vbmljYWxfcHJvdmlkZXIsIGRlYXRoLCBj b25maXJtLAorKwkJCSAgICBzYW5lX3VyaSwgZGVhdGgsIGNvbmZpcm0sCisgCQkJICAgIGRlc3Rf Y29uc3RyYWludHMsIG5kZXN0X2NvbnN0cmFpbnRzKTsKKyAJCQlzdWNjZXNzID0gMTsKKyAJCX0K KyAJCWlmICghY2VydF9vbmx5ICYmIGxvb2t1cF9pZGVudGl0eShrZXlzW2ldKSA9PSBOVUxMKSB7 CisgCQkJYWRkX3AxMV9pZGVudGl0eShrZXlzW2ldLCBjb21tZW50c1tpXSwKKy0JCQkgICAgY2Fu b25pY2FsX3Byb3ZpZGVyLCBkZWF0aCwgY29uZmlybSwKKysJCQkgICAgc2FuZV91cmksIGRlYXRo LCBjb25maXJtLAorIAkJCSAgICBkZXN0X2NvbnN0cmFpbnRzLCBuZGVzdF9jb25zdHJhaW50cyk7 CisgCQkJa2V5c1tpXSA9IE5VTEw7CQkvKiB0cmFuc2ZlcnJlZCAqLworIAkJCWNvbW1lbnRzW2ld ID0gTlVMTDsJLyogdHJhbnNmZXJyZWQgKi8KK0BAIC0xNjI1LDYgKzE2ODMsNyBAQCBwcm9jZXNz X2FkZF9zbWFydGNhcmRfa2V5KFNvY2tldEVudHJ5ICplKQorIHNlbmQ6CisgCWZyZWUocGluKTsK KyAJZnJlZShwcm92aWRlcik7CisrCWZyZWUoc2FuZV91cmkpOworIAlmcmVlKGtleXMpOworIAlm cmVlKGNvbW1lbnRzKTsKKyAJZnJlZV9kZXN0X2NvbnN0cmFpbnRzKGRlc3RfY29uc3RyYWludHMs IG5kZXN0X2NvbnN0cmFpbnRzKTsKK0BAIC0xNjM3LDggKzE2OTYsOCBAQCBzZW5kOgorIHN0YXRp YyB2b2lkCisgcHJvY2Vzc19yZW1vdmVfc21hcnRjYXJkX2tleShTb2NrZXRFbnRyeSAqZSkKKyB7 CistCWNoYXIgKnByb3ZpZGVyID0gTlVMTCwgKnBpbiA9IE5VTEwsIGNhbm9uaWNhbF9wcm92aWRl cltQQVRIX01BWF07CistCWludCByLCBzdWNjZXNzID0gMDsKKysJY2hhciAqcHJvdmlkZXIgPSBO VUxMLCAqcGluID0gTlVMTCwgKnNhbmVfdXJpID0gTlVMTDsKKysJaW50IHIsIHN1Y2Nlc3MgPSAw LCByZW1vdmVkX2NvdW50ID0gMDsKKyAJSWRlbnRpdHkgKmlkLCAqbnh0OworIAorIAlkZWJ1ZzJf ZigiZW50ZXJpbmciKTsKK0BAIC0xNjQ5LDMwICsxNzA4LDM4IEBAIHByb2Nlc3NfcmVtb3ZlX3Nt YXJ0Y2FyZF9rZXkoU29ja2V0RW50cnkgKmUpCisgCX0KKyAJZnJlZShwaW4pOworIAorLQlpZiAo cmVhbHBhdGgocHJvdmlkZXIsIGNhbm9uaWNhbF9wcm92aWRlcikgPT0gTlVMTCkgeworLQkJdmVy Ym9zZSgiZmFpbGVkIFBLQ1MjMTEgYWRkIG9mIFwiJS4xMDBzXCI6IHJlYWxwYXRoOiAlcyIsCist CQkgICAgcHJvdmlkZXIsIHN0cmVycm9yKGVycm5vKSk7CisrCXNhbmVfdXJpID0gc2FuaXRpemVf cGtjczExX3Byb3ZpZGVyKHByb3ZpZGVyKTsKKysJaWYgKHNhbmVfdXJpID09IE5VTEwpCisgCQln b3RvIHNlbmQ7CistCX0KKyAKKy0JZGVidWdfZigicmVtb3ZlICUuMTAwcyIsIGNhbm9uaWNhbF9w cm92aWRlcik7CisrCWRlYnVnX2YoInJlbW92ZSAlLjEwMHMiLCBzYW5lX3VyaSk7CisgCWZvciAo aWQgPSBUQUlMUV9GSVJTVCgmaWR0YWItPmlkbGlzdCk7IGlkOyBpZCA9IG54dCkgeworIAkJbnh0 ID0gVEFJTFFfTkVYVChpZCwgbmV4dCk7CisgCQkvKiBTa2lwIGZpbGUtLWJhc2VkIGtleXMgKi8K KyAJCWlmIChpZC0+cHJvdmlkZXIgPT0gTlVMTCkKKyAJCQljb250aW51ZTsKKy0JCWlmICghc3Ry Y21wKGNhbm9uaWNhbF9wcm92aWRlciwgaWQtPnByb3ZpZGVyKSkgeworKwkJaWYgKCFzdHJjbXAo c2FuZV91cmksIGlkLT5wcm92aWRlcikpIHsKKyAJCQlUQUlMUV9SRU1PVkUoJmlkdGFiLT5pZGxp c3QsIGlkLCBuZXh0KTsKKyAJCQlmcmVlX2lkZW50aXR5KGlkKTsKKyAJCQlpZHRhYi0+bmVudHJp ZXMtLTsKKysJCQlyZW1vdmVkX2NvdW50Kys7CisgCQl9CisgCX0KKy0JaWYgKHBrY3MxMV9kZWxf cHJvdmlkZXIoY2Fub25pY2FsX3Byb3ZpZGVyKSA9PSAwKQorKwkvKiBPbmx5IHN1Y2NlZWQgaWYg d2UgYWN0dWFsbHkgcmVtb3ZlZCBrZXlzIGFuZCB1bmxvYWRlZCBwcm92aWRlciAqLworKwlpZiAo cmVtb3ZlZF9jb3VudCA+IDAgJiYgcGtjczExX2RlbF9wcm92aWRlcihzYW5lX3VyaSkgPT0gMCkg eworIAkJc3VjY2VzcyA9IDE7CistCWVsc2UKKysJCWRlYnVnX2YoInJlbW92ZWQgJWQga2V5KHMp IGZyb20gcHJvdmlkZXIgJXMiLAorKwkJICAgIHJlbW92ZWRfY291bnQsIHNhbmVfdXJpKTsKKysJ fSBlbHNlIGlmIChyZW1vdmVkX2NvdW50ID09IDApIHsKKysJCWVycm9yX2YoIm5vIG1hdGNoaW5n IGtleXMgZm91bmQgZm9yIHByb3ZpZGVyICVzIiwgc2FuZV91cmkpOworKwkJLyogU3RpbGwgdHJ5 IHRvIGNsZWFuIHVwIHByb3ZpZGVyIGlmIGl0IGV4aXN0cyAqLworKwkJcGtjczExX2RlbF9wcm92 aWRlcihzYW5lX3VyaSk7CisrCX0gZWxzZSB7CisgCQllcnJvcl9mKCJwa2NzMTFfZGVsX3Byb3Zp ZGVyIGZhaWxlZCIpOworKwl9Cisgc2VuZDoKKyAJZnJlZShwcm92aWRlcik7CisrCWZyZWUoc2Fu ZV91cmkpOworIAlzZW5kX3N0YXR1cyhlLCBzdWNjZXNzKTsKKyB9CisgI2VuZGlmIC8qIEVOQUJM RV9QS0NTMTEgKi8KK2RpZmYgLS1naXQgYS9zc2gta2V5Z2VuLmMgYi9zc2gta2V5Z2VuLmMKK2lu ZGV4IDEyNDMwZTZhNC4uMjY2NDYyZjA3IDEwMDY0NAorLS0tIGEvc3NoLWtleWdlbi5jCisrKysg Yi9zc2gta2V5Z2VuLmMKK0BAIC04MzEsOCArODMxLDExIEBAIGRvX2Rvd25sb2FkKHN0cnVjdCBw YXNzd2QgKnB3KQorIAkJCWZyZWUoZnApOworIAkJfSBlbHNlIHsKKyAJCQkodm9pZCkgc3Noa2V5 X3dyaXRlKGtleXNbaV0sIHN0ZG91dCk7IC8qIFhYWCBjaGVjayAqLworLQkJCWZwcmludGYoc3Rk b3V0LCAiJXMlc1xuIiwKKy0JCQkgICAgKihjb21tZW50c1tpXSkgPT0gJ1wwJyA/ICIiIDogIiAi LCBjb21tZW50c1tpXSk7CisrCQkJaWYgKCooY29tbWVudHNbaV0pICE9ICdcMCcpIHsKKysJCQkJ ZnByaW50ZihzdGRvdXQsICIgJXMiLCBjb21tZW50c1tpXSk7CisrCQkJfQorKwkJCSh2b2lkKSBw a2NzMTFfdXJpX3dyaXRlKGtleXNbaV0sIHN0ZG91dCk7CisrCQkJZnByaW50ZihzdGRvdXQsICJc biIpOworIAkJfQorIAkJZnJlZShjb21tZW50c1tpXSk7CisgCQlzc2hrZXlfZnJlZShrZXlzW2ld KTsKK2RpZmYgLS1naXQgYS9zc2gtcGtjczExLWNsaWVudC5jIGIvc3NoLXBrY3MxMS1jbGllbnQu YworaW5kZXggMzBhNGNmNWRjLi4zZmQwNThhMGMgMTAwNjQ0CistLS0gYS9zc2gtcGtjczExLWNs aWVudC5jCisrKysgYi9zc2gtcGtjczExLWNsaWVudC5jCitAQCAtMTgsNiArMTgsNyBAQAorIAor ICNpbmNsdWRlICJpbmNsdWRlcy5oIgorIAorKyNpZmRlZiBFTkFCTEVfUEtDUzExCisgI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvdGltZS5oPgorICNpbmNsdWRlIDxzeXMv c29ja2V0Lmg+CitAQCAtMzgsNiArMzksNyBAQAorICNpbmNsdWRlICJhdXRoZmQuaCIKKyAjaW5j bHVkZSAiYXRvbWljaW8uaCIKKyAjaW5jbHVkZSAic3NoLXBrY3MxMS5oIgorKyNpbmNsdWRlICJz c2gtcGtjczExLXVyaS5oIgorICNpbmNsdWRlICJzc2hlcnIuaCIKKyAKKyAvKiBib3Jyb3dzIGNv ZGUgZnJvbSBzZnRwLXNlcnZlciBhbmQgc3NoLWFnZW50ICovCitAQCAtMzc5LDYgKzM4MSwxOSBA QCBwa2NzMTFfc3RhcnRfaGVscGVyKGNvbnN0IGNoYXIgKnBhdGgpCisgCXJldHVybiBoZWxwZXI7 CisgfQorIAorK2ludAorK3BrY3MxMV9hZGRfcHJvdmlkZXJfYnlfdXJpKHN0cnVjdCBwa2NzMTFf dXJpICp1cmksIGNoYXIgKnBpbiwgc3RydWN0IHNzaGtleSAqKiprZXlwLCBjaGFyICoqKmxhYmVs c3ApCisreworKwlpbnQgbmtleXMgPSAwOworKwljaGFyICpwcm92aWRlcl91cmkgPSBwa2NzMTFf dXJpX2dldCh1cmkpOworKworKwlkZWJ1Z19mKCJjYWxsZWQsIHByb3ZpZGVyX3VyaSA9ICVzIiwg cHJvdmlkZXJfdXJpKTsKKysKKysJbmtleXMgPSBwa2NzMTFfYWRkX3Byb3ZpZGVyKHByb3ZpZGVy X3VyaSwgcGluLCBrZXlwLCBsYWJlbHNwKTsKKysKKysJcmV0dXJuIG5rZXlzOworK30KKysKKyBp bnQKKyBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKm5hbWUsIGNoYXIgKnBpbiwgc3RydWN0IHNz aGtleSAqKiprZXlzcCwKKyAgICAgY2hhciAqKipsYWJlbHNwKQorQEAgLTM5MCw2ICs0MDUsOCBA QCBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKm5hbWUsIGNoYXIgKnBpbiwgc3RydWN0IHNzaGtl eSAqKiprZXlzcCwKKyAJc3RydWN0IHNzaGJ1ZiAqbXNnOworIAlzdHJ1Y3QgaGVscGVyICpoZWxw ZXI7CisgCisrCWRlYnVnX2YoImNhbGxlZCwgbmFtZSA9ICVzIiwgbmFtZSk7CisrCisgCWlmICgo aGVscGVyID0gaGVscGVyX2J5X3Byb3ZpZGVyKG5hbWUpKSA9PSBOVUxMICYmCisgCSAgICAoaGVs cGVyID0gcGtjczExX3N0YXJ0X2hlbHBlcihuYW1lKSkgPT0gTlVMTCkKKyAJCXJldHVybiAtMTsK K0BAIC00MTQsNiArNDMxLDcgQEAgcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpuYW1lLCBjaGFy ICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsCisgCQkqa2V5c3AgPSB4Y2FsbG9jKG5rZXlz LCBzaXplb2Yoc3RydWN0IHNzaGtleSAqKSk7CisgCQlpZiAobGFiZWxzcCkKKyAJCQkqbGFiZWxz cCA9IHhjYWxsb2MobmtleXMsIHNpemVvZihjaGFyICopKTsKKysJCWRlYnVnX2YoIm5rZXlzID0g JXUiLCBua2V5cyk7CisgCQlmb3IgKGkgPSAwOyBpIDwgbmtleXM7IGkrKykgeworIAkJCS8qIFhY WCBjbGVhbiB1cCBwcm9wZXJseSBpbnN0ZWFkIG9mIGZhdGFsKCkgKi8KKyAJCQlpZiAoKHIgPSBz c2hrZXlfZnJvbXMobXNnLCAmaykpICE9IDAgfHwKK0BAIC00OTcsMyArNTE1LDQgQEAgcGtjczEx X2tleV9mcmVlKHN0cnVjdCBzc2hrZXkgKmtleSkKKyAJaWYgKGhlbHBlci0+bmtleWJsb2JzID09 IDApCisgCQloZWxwZXJfdGVybWluYXRlKGhlbHBlcik7CisgfQorKyNlbmRpZgorZGlmZiAtLWdp dCBhL3NzaC1wa2NzMTEtdXJpLmMgYi9zc2gtcGtjczExLXVyaS5jCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwLi5kNWIwNzQ1OTIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Nz aC1wa2NzMTEtdXJpLmMKK0BAIC0wLDAgKzEsNDM4IEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMp IDIwMTcgUmVkIEhhdAorKyAqCisrICogQXV0aG9yczogSmFrdWIgSmVsZW4gPGpqZWxlbkByZWRo YXQuY29tPgorKyAqCisrICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRp c3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisrICogcHVycG9zZSB3aXRoIG9yIHdpdGhv dXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorKyAqIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBj b3BpZXMuCisrICoKKysgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhF IEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKysgKiBXSVRIIFJFR0FSRCBUTyBUSElT IFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrICogTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJ QUJMRSBGT1IKKysgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisrICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJP TSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisrICogQUNUSU9O IE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lO RyBPVVQgT0YKKysgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5D RSBPRiBUSElTIFNPRlRXQVJFLgorKyAqLworKworKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorKwor KyNpZmRlZiBFTkFCTEVfUEtDUzExCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysjaW5jbHVkZSAic3Noa2V5Lmgi CisrI2luY2x1ZGUgInNzaGJ1Zi5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysKKysjZGVmaW5lIENS WVBUT0tJX0NPTVBBVAorKyNpbmNsdWRlICJwa2NzMTEuaCIKKysKKysjaW5jbHVkZSAic3NoLXBr Y3MxMS11cmkuaCIKKysKKysjZGVmaW5lIFBLQ1MxMV9VUklfUEFUSF9TRVBBUkFUT1IgIjsiCisr I2RlZmluZSBQS0NTMTFfVVJJX1FVRVJZX1NFUEFSQVRPUiAiJiIKKysjZGVmaW5lIFBLQ1MxMV9V UklfVkFMVUVfU0VQQVJBVE9SICI9IgorKyNkZWZpbmUgUEtDUzExX1VSSV9JRCAiaWQiCisrI2Rl ZmluZSBQS0NTMTFfVVJJX1RPS0VOICJ0b2tlbiIKKysjZGVmaW5lIFBLQ1MxMV9VUklfT0JKRUNU ICJvYmplY3QiCisrI2RlZmluZSBQS0NTMTFfVVJJX0xJQl9NQU5VRiAibGlicmFyeS1tYW51ZmFj dHVyZXIiCisrI2RlZmluZSBQS0NTMTFfVVJJX01BTlVGICJtYW51ZmFjdHVyZXIiCisrI2RlZmlu ZSBQS0NTMTFfVVJJX1NFUklBTCAic2VyaWFsIgorKyNkZWZpbmUgUEtDUzExX1VSSV9NT0RVTEVf UEFUSCAibW9kdWxlLXBhdGgiCisrI2RlZmluZSBQS0NTMTFfVVJJX1BJTl9WQUxVRSAicGluLXZh bHVlIgorKworKy8qIEtleXdvcmQgdG9rZW5zLiAqLworK3R5cGVkZWYgZW51bSB7CisrCXBJZCwg cFRva2VuLCBwT2JqZWN0LCBwTGlicmFyeU1hbnVmYWN0dXJlciwgcE1hbnVmYWN0dXJlciwgcFNl cmlhbCwKKysJcE1vZHVsZVBhdGgsIHBQaW5WYWx1ZSwgcEJhZE9wdGlvbgorK30gcGtjczExdXJp T3BDb2RlczsKKysKKysvKiBUZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0b2tlbnMuICov Cisrc3RhdGljIHN0cnVjdCB7CisrCWNvbnN0IGNoYXIgKm5hbWU7CisrCXBrY3MxMXVyaU9wQ29k ZXMgb3Bjb2RlOworK30ga2V5d29yZHNbXSA9IHsKKysJeyBQS0NTMTFfVVJJX0lELCBwSWQgfSwK KysJeyBQS0NTMTFfVVJJX1RPS0VOLCBwVG9rZW4gfSwKKysJeyBQS0NTMTFfVVJJX09CSkVDVCwg cE9iamVjdCB9LAorKwl7IFBLQ1MxMV9VUklfTElCX01BTlVGLCBwTGlicmFyeU1hbnVmYWN0dXJl ciB9LAorKwl7IFBLQ1MxMV9VUklfTUFOVUYsIHBNYW51ZmFjdHVyZXIgfSwKKysJeyBQS0NTMTFf VVJJX1NFUklBTCwgcFNlcmlhbCB9LAorKwl7IFBLQ1MxMV9VUklfTU9EVUxFX1BBVEgsIHBNb2R1 bGVQYXRoIH0sCisrCXsgUEtDUzExX1VSSV9QSU5fVkFMVUUsIHBQaW5WYWx1ZSB9LAorKwl7IE5V TEwsIHBCYWRPcHRpb24gfQorK307CisrCisrc3RhdGljIHBrY3MxMXVyaU9wQ29kZXMKKytwYXJz ZV90b2tlbihjb25zdCBjaGFyICpjcCkKKyt7CisrCXVfaW50IGk7CisrCisrCWZvciAoaSA9IDA7 IGtleXdvcmRzW2ldLm5hbWU7IGkrKykKKysJCWlmIChzdHJuY2FzZWNtcChjcCwga2V5d29yZHNb aV0ubmFtZSwKKysJCSAgICBzdHJsZW4oa2V5d29yZHNbaV0ubmFtZSkpID09IDApCisrCQkJcmV0 dXJuIGtleXdvcmRzW2ldLm9wY29kZTsKKysKKysJcmV0dXJuIHBCYWRPcHRpb247CisrfQorKwor K2ludAorK3BlcmNlbnRfZGVjb2RlKGNoYXIgKmRhdGEsIGNoYXIgKipvdXRwKQorK3sKKysJY2hh ciB0bXBbM107CisrCWNoYXIgKm91dCwgKnRtcF9lbmQ7CisrCWNoYXIgKnAgPSBkYXRhOworKwls b25nIHZhbHVlOworKwlzaXplX3Qgb3V0bGVuID0gMDsKKysKKysJb3V0ID0gbWFsbG9jKHN0cmxl bihkYXRhKSsxKTsgLyogdXBwZXIgYm91bmQgKi8KKysJaWYgKG91dCA9PSBOVUxMKQorKwkJcmV0 dXJuIC0xOworKwl3aGlsZSAoKnAgIT0gJ1wwJykgeworKwkJc3dpdGNoICgqcCkgeworKwkJY2Fz ZSAnJSc6CisrCQkJcCsrOworKwkJCWlmICgqcCA9PSAnXDAnKQorKwkJCQlnb3RvIGZhaWw7Cisr CQkJdG1wWzBdID0gKnArKzsKKysJCQlpZiAoKnAgPT0gJ1wwJykKKysJCQkJZ290byBmYWlsOwor KwkJCXRtcFsxXSA9ICpwKys7CisrCQkJdG1wWzJdID0gJ1wwJzsKKysJCQl0bXBfZW5kID0gTlVM TDsKKysJCQl2YWx1ZSA9IHN0cnRvbCh0bXAsICZ0bXBfZW5kLCAxNik7CisrCQkJaWYgKHRtcF9l bmQgIT0gdG1wKzIpCisrCQkJCWdvdG8gZmFpbDsKKysJCQllbHNlCisrCQkJCW91dFtvdXRsZW4r K10gPSAoY2hhcikgdmFsdWU7CisrCQkJYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJCW91dFtvdXRs ZW4rK10gPSAqcCsrOworKwkJCWJyZWFrOworKwkJfQorKwl9CisrCisrCS8qIHplcm8gdGVybWlu YXRlICovCisrCW91dFtvdXRsZW5dID0gJ1wwJzsKKysJKm91dHAgPSBvdXQ7CisrCXJldHVybiBv dXRsZW47CisrZmFpbDoKKysJZnJlZShvdXQpOworKwlyZXR1cm4gLTE7CisrfQorKworK3N0cnVj dCBzc2hidWYgKgorK3BlcmNlbnRfZW5jb2RlKGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW5n dGgsIGNvbnN0IGNoYXIgKmFsbG93X2xpc3QpCisreworKwlzdHJ1Y3Qgc3NoYnVmICpiID0gTlVM TDsKKysJY2hhciB0bXBbNF0sICpjcDsKKysJc2l6ZV90IGk7CisrCisrCWlmICgoYiA9IHNzaGJ1 Zl9uZXcoKSkgPT0gTlVMTCkKKysJCXJldHVybiBOVUxMOworKwlmb3IgKGkgPSAwOyBpIDwgbGVu Z3RoOyBpKyspIHsKKysJCWNwID0gc3RyY2hyKGFsbG93X2xpc3QsIGRhdGFbaV0pOworKwkJLyog aWYgYyBpcyBzcGVjaWZpZWQgYXMgJ1wwJyBwb2ludGVyIHRvIHRlcm1pbmF0b3IgaXMgcmV0dXJu ZWQgISEgKi8KKysJCWlmIChjcCAhPSBOVUxMICYmICpjcCAhPSAnXDAnKSB7CisrCQkJaWYgKHNz aGJ1Zl9wdXQoYiwgJmRhdGFbaV0sIDEpICE9IDApCisrCQkJCWdvdG8gZXJyOworKwkJfSBlbHNl CisrCQkJaWYgKHNucHJpbnRmKHRtcCwgNCwgIiUlJTAyWCIsICh1bnNpZ25lZCBjaGFyKSBkYXRh W2ldKSA8IDMKKysJCQkgICAgfHwgc3NoYnVmX3B1dChiLCB0bXAsIDMpICE9IDApCisrCQkJCWdv dG8gZXJyOworKwl9CisrCWlmIChzc2hidWZfcHV0KGIsICJcMCIsIDEpID09IDApCisrCQlyZXR1 cm4gYjsKKytlcnI6CisrCXNzaGJ1Zl9mcmVlKGIpOworKwlyZXR1cm4gTlVMTDsKKyt9CisrCisr Y2hhciAqCisrcGtjczExX3VyaV9hcHBlbmQoY2hhciAqcGFydCwgY29uc3QgY2hhciAqc2VwYXJh dG9yLCBjb25zdCBjaGFyICprZXksCisrICAgIHN0cnVjdCBzc2hidWYgKnZhbHVlKQorK3sKKysJ Y2hhciAqbmV3X3BhcnQ7CisrCXNpemVfdCBzaXplID0gMDsKKysKKysJaWYgKHZhbHVlID09IE5V TEwpCisrCQlyZXR1cm4gTlVMTDsKKysKKysJc2l6ZSA9IGFzcHJpbnRmKCZuZXdfcGFydCwKKysJ ICAgICIlcyVzJXMiICBQS0NTMTFfVVJJX1ZBTFVFX1NFUEFSQVRPUiAiJXMiLAorKwkgICAgKHBh cnQgIT0gTlVMTCA/IHBhcnQgOiAiIiksCisrCSAgICAocGFydCAhPSBOVUxMID8gc2VwYXJhdG9y IDogIiIpLAorKwkgICAga2V5LCBzc2hidWZfcHRyKHZhbHVlKSk7CisrCXNzaGJ1Zl9mcmVlKHZh bHVlKTsKKysJZnJlZShwYXJ0KTsKKysKKysJaWYgKHNpemUgPD0gMCkKKysJCXJldHVybiBOVUxM OworKwlyZXR1cm4gbmV3X3BhcnQ7CisrfQorKworK2NoYXIgKgorK3BrY3MxMV91cmlfZ2V0KHN0 cnVjdCBwa2NzMTFfdXJpICp1cmkpCisreworKwlzaXplX3Qgc2l6ZSA9IDA7CisrCWNoYXIgKnAg PSBOVUxMLCAqcGF0aCA9IE5VTEwsICpxdWVyeSA9IE5VTEw7CisrCisrCS8qIGNvbXBvc2UgYSBw ZXJjZW50LWVuY29kZWQgSUQgKi8KKysJaWYgKHVyaS0+aWRfbGVuID4gMCkgeworKwkJc3RydWN0 IHNzaGJ1ZiAqa2V5X2lkID0gcGVyY2VudF9lbmNvZGUodXJpLT5pZCwgdXJpLT5pZF9sZW4sICIi KTsKKysJCXBhdGggPSBwa2NzMTFfdXJpX2FwcGVuZChwYXRoLCBQS0NTMTFfVVJJX1BBVEhfU0VQ QVJBVE9SLAorKwkJICAgIFBLQ1MxMV9VUklfSUQsIGtleV9pZCk7CisrCQlpZiAocGF0aCA9PSBO VUxMKQorKwkJCWdvdG8gZXJyOworKwl9CisrCisrCS8qIFdyaXRlIG9iamVjdCBsYWJlbCAqLwor KwlpZiAodXJpLT5vYmplY3QpIHsKKysJCXN0cnVjdCBzc2hidWYgKmxhYmVsID0gcGVyY2VudF9l bmNvZGUodXJpLT5vYmplY3QsIHN0cmxlbih1cmktPm9iamVjdCksCisrCQkgICAgUEtDUzExX1VS SV9XSElURUxJU1QpOworKwkJcGF0aCA9IHBrY3MxMV91cmlfYXBwZW5kKHBhdGgsIFBLQ1MxMV9V UklfUEFUSF9TRVBBUkFUT1IsCisrCQkgICAgUEtDUzExX1VSSV9PQkpFQ1QsIGxhYmVsKTsKKysJ CWlmIChwYXRoID09IE5VTEwpCisrCQkJZ290byBlcnI7CisrCX0KKysKKysJLyogV3JpdGUgdG9r ZW4gbGFiZWwgKi8KKysJaWYgKHVyaS0+dG9rZW4pIHsKKysJCXN0cnVjdCBzc2hidWYgKmxhYmVs ID0gcGVyY2VudF9lbmNvZGUodXJpLT50b2tlbiwgc3RybGVuKHVyaS0+dG9rZW4pLAorKwkJICAg IFBLQ1MxMV9VUklfV0hJVEVMSVNUKTsKKysJCXBhdGggPSBwa2NzMTFfdXJpX2FwcGVuZChwYXRo LCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLAorKwkJICAgIFBLQ1MxMV9VUklfVE9LRU4sIGxh YmVsKTsKKysJCWlmIChwYXRoID09IE5VTEwpCisrCQkJZ290byBlcnI7CisrCX0KKysKKysJLyog V3JpdGUgbWFudWZhY3R1cmVyICovCisrCWlmICh1cmktPm1hbnVmKSB7CisrCQlzdHJ1Y3Qgc3No YnVmICptYW51ZiA9IHBlcmNlbnRfZW5jb2RlKHVyaS0+bWFudWYsCisrCQkgICAgc3RybGVuKHVy aS0+bWFudWYpLCBQS0NTMTFfVVJJX1dISVRFTElTVCk7CisrCQlwYXRoID0gcGtjczExX3VyaV9h cHBlbmQocGF0aCwgUEtDUzExX1VSSV9QQVRIX1NFUEFSQVRPUiwKKysJCSAgICBQS0NTMTFfVVJJ X01BTlVGLCBtYW51Zik7CisrCQlpZiAocGF0aCA9PSBOVUxMKQorKwkJCWdvdG8gZXJyOworKwl9 CisrCisrCS8qIFdyaXRlIHNlcmlhbCAqLworKwlpZiAodXJpLT5zZXJpYWwpIHsKKysJCXN0cnVj dCBzc2hidWYgKnNlcmlhbCA9IHBlcmNlbnRfZW5jb2RlKHVyaS0+c2VyaWFsLAorKwkJICAgIHN0 cmxlbih1cmktPnNlcmlhbCksIFBLQ1MxMV9VUklfV0hJVEVMSVNUKTsKKysJCXBhdGggPSBwa2Nz MTFfdXJpX2FwcGVuZChwYXRoLCBQS0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLAorKwkJICAgIFBL Q1MxMV9VUklfU0VSSUFMLCBzZXJpYWwpOworKwkJaWYgKHBhdGggPT0gTlVMTCkKKysJCQlnb3Rv IGVycjsKKysJfQorKworKwkvKiBXcml0ZSBtb2R1bGVfcGF0aCAqLworKwlpZiAodXJpLT5tb2R1 bGVfcGF0aCkgeworKwkJc3RydWN0IHNzaGJ1ZiAqbW9kdWxlID0gcGVyY2VudF9lbmNvZGUodXJp LT5tb2R1bGVfcGF0aCwKKysJCSAgICBzdHJsZW4odXJpLT5tb2R1bGVfcGF0aCksIFBLQ1MxMV9V UklfV0hJVEVMSVNUICIvIik7CisrCQlxdWVyeSA9IHBrY3MxMV91cmlfYXBwZW5kKHF1ZXJ5LCBQ S0NTMTFfVVJJX1FVRVJZX1NFUEFSQVRPUiwKKysJCSAgICBQS0NTMTFfVVJJX01PRFVMRV9QQVRI LCBtb2R1bGUpOworKwkJaWYgKHF1ZXJ5ID09IE5VTEwpCisrCQkJZ290byBlcnI7CisrCX0KKysK KysJc2l6ZSA9IGFzcHJpbnRmKCZwLCBQS0NTMTFfVVJJX1NDSEVNRSAiJXMlcyVzIiwKKysJICAg IHBhdGggIT0gTlVMTCA/IHBhdGggOiAiIiwKKysJICAgIHF1ZXJ5ICE9IE5VTEwgPyAiPyIgOiAi IiwKKysJICAgIHF1ZXJ5ICE9IE5VTEwgPyBxdWVyeSA6ICIiKTsKKytlcnI6CisrCWZyZWUocXVl cnkpOworKwlmcmVlKHBhdGgpOworKwlpZiAoc2l6ZSA8PSAwKQorKwkJcmV0dXJuIE5VTEw7Cisr CXJldHVybiBwOworK30KKysKKytzdHJ1Y3QgcGtjczExX3VyaSAqCisrcGtjczExX3VyaV9pbml0 KCkKKyt7CisrCXN0cnVjdCBwa2NzMTFfdXJpICpkID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qg cGtjczExX3VyaSkpOworKwlyZXR1cm4gZDsKKyt9CisrCisrdm9pZAorK3BrY3MxMV91cmlfY2xl YW51cChzdHJ1Y3QgcGtjczExX3VyaSAqcGtjczExKQorK3sKKysJaWYgKHBrY3MxMSA9PSBOVUxM KSB7CisrCQlyZXR1cm47CisrCX0KKysKKysJZnJlZShwa2NzMTEtPmlkKTsKKysJZnJlZShwa2Nz MTEtPm1vZHVsZV9wYXRoKTsKKysJZnJlZShwa2NzMTEtPnRva2VuKTsKKysJZnJlZShwa2NzMTEt Pm9iamVjdCk7CisrCWZyZWUocGtjczExLT5saWJfbWFudWYpOworKwlmcmVlKHBrY3MxMS0+bWFu dWYpOworKwlmcmVlKHBrY3MxMS0+c2VyaWFsKTsKKysJaWYgKHBrY3MxMS0+cGluKQorKwkJZnJl ZXplcm8ocGtjczExLT5waW4sIHN0cmxlbihwa2NzMTEtPnBpbikpOworKwlmcmVlKHBrY3MxMSk7 CisrfQorKworK2ludAorK3BrY3MxMV91cmlfcGFyc2UoY29uc3QgY2hhciAqdXJpLCBzdHJ1Y3Qg cGtjczExX3VyaSAqcGtjczExKQorK3sKKysJY2hhciAqc2F2ZXB0cjEsICpzYXZlcHRyMiwgKnN0 cjEsICpzdHIyLCAqdG9rOworKwlpbnQgcnYgPSAwLCBsZW47CisrCWNoYXIgKnAgPSBOVUxMOwor KworKwlzaXplX3Qgc2NoZW1lX2xlbiA9IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSk7CisrCWlm IChzdHJsZW4odXJpKSA8IHNjaGVtZV9sZW4gfHwgLyogZW1wdHkgVVJJIG1hdGNoZXMgZXZlcnl0 aGluZyAqLworKwkgICAgc3RybmNtcCh1cmksIFBLQ1MxMV9VUklfU0NIRU1FLCBzY2hlbWVfbGVu KSAhPSAwKSB7CisrCQllcnJvcl9mKCJUaGUgJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgUEtDUyMx MSBVUkkiLCB1cmkpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCWlmIChwa2NzMTEgPT0gTlVM TCkgeworKwkJZXJyb3JfZigiQmFkIGFyZ3VtZW50cy4gVGhlIHBrY3MxMSBjYW4ndCBiZSBudWxs Iik7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJLyogc2tpcCBVUkkgc2NoZW1hIG5hbWUgKi8K KysJcCA9IHN0cmR1cCh1cmkpOworKwlzdHIxID0gcDsKKysKKysJLyogZXZlcnl0aGluZyBiZWZv cmUgPyAqLworKwl0b2sgPSBzdHJ0b2tfcihzdHIxLCAiPyIsICZzYXZlcHRyMSk7CisrCWlmICh0 b2sgPT0gTlVMTCkgeworKwkJZXJyb3JfZigicGsxMS1wYXRoIGV4cGVjdGVkLCBnb3QgRU9GIik7 CisrCQlydiA9IC0xOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJLyogc2tpcCBVUkkgc2NoZW1h IG5hbWU6CisrCSAqIHRoZSBzY2hlbWUgZW5zdXJlcyB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IHNv bWV0aGluZyBiZWZvcmUgIj8iCisrCSAqIGFsbG93aW5nIGVtcHR5IHBrMTEtcGF0aC4gUmVzdWx0 aW5nIHRva2VuIGF0IHdvcnN0IHBvaW50aW5nIHRvCisrCSAqIFwwIGJ5dGUgKi8KKysJdG9rID0g dG9rICsgc2NoZW1lX2xlbjsKKysKKysJLyogcGFyc2UgcGsxMS1wYXRoICovCisrCWZvciAoc3Ry MiA9IHRvazsgOyBzdHIyID0gTlVMTCkgeworKwkJY2hhciAqKmNoYXJwdHIsICphcmcgPSBOVUxM OworKwkJcGtjczExdXJpT3BDb2RlcyBvcGNvZGU7CisrCQl0b2sgPSBzdHJ0b2tfcihzdHIyLCBQ S0NTMTFfVVJJX1BBVEhfU0VQQVJBVE9SLCAmc2F2ZXB0cjIpOworKwkJaWYgKHRvayA9PSBOVUxM KQorKwkJCWJyZWFrOworKwkJb3Bjb2RlID0gcGFyc2VfdG9rZW4odG9rKTsKKysJCWlmIChvcGNv ZGUgIT0gcEJhZE9wdGlvbikKKysJCQlhcmcgPSB0b2sgKyBzdHJsZW4oa2V5d29yZHNbb3Bjb2Rl XS5uYW1lKSArIDE7IC8qIHNlcGFyYXRvciAiPSIgKi8KKysKKysJCXN3aXRjaCAob3Bjb2RlKSB7 CisrCQljYXNlIHBJZDoKKysJCQkvKiBDS0FfSUQgKi8KKysJCQlpZiAocGtjczExLT5pZCAhPSBO VUxMKSB7CisrCQkJCXZlcmJvc2VfZigiVGhlIGlkIGFscmVhZHkgc2V0IGluIHRoZSBQS0NTIzEx IFVSSSIpOworKwkJCQlydiA9IC0xOworKwkJCQlnb3RvIG91dDsKKysJCQl9CisrCQkJbGVuID0g cGVyY2VudF9kZWNvZGUoYXJnLCAmcGtjczExLT5pZCk7CisrCQkJaWYgKGxlbiA8PSAwKSB7Cisr CQkJCXZlcmJvc2VfZigiRmFpbGVkIHRvIHBlcmNlbnQtZGVjb2RlIENLQV9JRDogJXMiLCBhcmcp OworKwkJCQlydiA9IC0xOworKwkJCQlnb3RvIG91dDsKKysJCQl9IGVsc2UKKysJCQkJcGtjczEx LT5pZF9sZW4gPSBsZW47CisrCQkJZGVidWczX2YoIlNldHRpbmcgQ0tBX0lEID0gJXMgZnJvbSBQ S0NTIzExIFVSSSIsIGFyZyk7CisrCQkJYnJlYWs7CisrCQljYXNlIHBUb2tlbjoKKysJCQkvKiBD S19UT0tFTl9JTkZPIC0+IGxhYmVsICovCisrCQkJY2hhcnB0ciA9ICZwa2NzMTEtPnRva2VuOwor KyBwYXJzZV9zdHJpbmc6CisrCQkJaWYgKCpjaGFycHRyICE9IE5VTEwpIHsKKysJCQkJdmVyYm9z ZV9mKCJUaGUgJXMgYWxyZWFkeSBzZXQgaW4gdGhlIFBLQ1MjMTEgVVJJIiwKKysJCQkJICAgIGtl eXdvcmRzW29wY29kZV0ubmFtZSk7CisrCQkJCXJ2ID0gLTE7CisrCQkJCWdvdG8gb3V0OworKwkJ CX0KKysJCQlwZXJjZW50X2RlY29kZShhcmcsIGNoYXJwdHIpOworKwkJCWRlYnVnM19mKCJTZXR0 aW5nICVzID0gJXMgZnJvbSBQS0NTIzExIFVSSSIsCisrCQkJICAgIGtleXdvcmRzW29wY29kZV0u bmFtZSwgKmNoYXJwdHIpOworKwkJCWJyZWFrOworKworKwkJY2FzZSBwT2JqZWN0OgorKwkJCS8q IENLX1RPS0VOX0lORk8gLT4gbWFudWZhY3R1cmVySUQgKi8KKysJCQljaGFycHRyID0gJnBrY3Mx MS0+b2JqZWN0OworKwkJCWdvdG8gcGFyc2Vfc3RyaW5nOworKworKwkJY2FzZSBwTWFudWZhY3R1 cmVyOgorKwkJCS8qIENLX1RPS0VOX0lORk8gLT4gbWFudWZhY3R1cmVySUQgKi8KKysJCQljaGFy cHRyID0gJnBrY3MxMS0+bWFudWY7CisrCQkJZ290byBwYXJzZV9zdHJpbmc7CisrCisrCQljYXNl IHBTZXJpYWw6CisrCQkJLyogQ0tfVE9LRU5fSU5GTyAtPiBzZXJpYWxOdW1iZXIgKi8KKysJCQlj aGFycHRyID0gJnBrY3MxMS0+c2VyaWFsOworKwkJCWdvdG8gcGFyc2Vfc3RyaW5nOworKworKwkJ Y2FzZSBwTGlicmFyeU1hbnVmYWN0dXJlcjoKKysJCQkvKiBDS19JTkZPIC0+IG1hbnVmYWN0dXJl cklEICovCisrCQkJY2hhcnB0ciA9ICZwa2NzMTEtPmxpYl9tYW51ZjsKKysJCQlnb3RvIHBhcnNl X3N0cmluZzsKKysKKysJCWRlZmF1bHQ6CisrCQkJLyogVW5yZWNvZ25pemVkIGF0dHJpYnV0ZSBp biB0aGUgVVJJIHBhdGggU0hPVUxEIGJlIGVycm9yICovCisrCQkJdmVyYm9zZV9mKCJVbmtub3du IHBhcnQgb2YgcGF0aCBpbiBQS0NTIzExIFVSSTogJXMiLCB0b2spOworKwkJfQorKwl9CisrCisr CXRvayA9IHN0cnRva19yKE5VTEwsICI/IiwgJnNhdmVwdHIxKTsKKysJaWYgKHRvayA9PSBOVUxM KSB7CisrCQlnb3RvIG91dDsKKysJfQorKwkvKiBwYXJzZSBwazExLXF1ZXJ5IChvcHRpb25hbCkg Ki8KKysJZm9yIChzdHIyID0gdG9rOyA7IHN0cjIgPSBOVUxMKSB7CisrCQljaGFyICphcmc7Cisr CQlwa2NzMTF1cmlPcENvZGVzIG9wY29kZTsKKysJCXRvayA9IHN0cnRva19yKHN0cjIsIFBLQ1Mx MV9VUklfUVVFUllfU0VQQVJBVE9SLCAmc2F2ZXB0cjIpOworKwkJaWYgKHRvayA9PSBOVUxMKQor KwkJCWJyZWFrOworKwkJb3Bjb2RlID0gcGFyc2VfdG9rZW4odG9rKTsKKysJCWlmIChvcGNvZGUg IT0gcEJhZE9wdGlvbikKKysJCQlhcmcgPSB0b2sgKyBzdHJsZW4oa2V5d29yZHNbb3Bjb2RlXS5u YW1lKSArIDE7IC8qIHNlcGFyYXRvciAiPSIgKi8KKysKKysJCXN3aXRjaCAob3Bjb2RlKSB7Cisr CQljYXNlIHBNb2R1bGVQYXRoOgorKwkJCS8qIG1vZHVsZS1wYXRoIGlzIFBLQ1MxMVByb3ZpZGVy ICovCisrCQkJaWYgKHBrY3MxMS0+bW9kdWxlX3BhdGggIT0gTlVMTCkgeworKwkJCQl2ZXJib3Nl X2YoIk11bHRpcGxlIG1vZHVsZS1wYXRoIGF0dHJpYnV0ZXMgYXJlIgorKwkJCQkgICAgIm5vdCBz dXBwb3J0ZWQgdGhlIFBLQ1MjMTEgVVJJIik7CisrCQkJCXJ2ID0gLTE7CisrCQkJCWdvdG8gb3V0 OworKwkJCX0KKysJCQlwZXJjZW50X2RlY29kZShhcmcsICZwa2NzMTEtPm1vZHVsZV9wYXRoKTsK KysJCQlkZWJ1ZzNfZigiU2V0dGluZyBQS0NTMTFQcm92aWRlciA9ICVzIGZyb20gUEtDUyMxMSBV UkkiLAorKwkJCSAgICBwa2NzMTEtPm1vZHVsZV9wYXRoKTsKKysJCQlicmVhazsKKysKKysJCWNh c2UgcFBpblZhbHVlOgorKwkJCS8qIHBpbi12YWx1ZSAqLworKwkJCWlmIChwa2NzMTEtPnBpbiAh PSBOVUxMKSB7CisrCQkJCXZlcmJvc2VfZigiTXVsdGlwbGUgcGluLXZhbHVlIGF0dHJpYnV0ZXMg YXJlIgorKwkJCQkgICAgIm5vdCBzdXBwb3J0ZWQgdGhlIFBLQ1MjMTEgVVJJIik7CisrCQkJCXJ2 ID0gLTE7CisrCQkJCWdvdG8gb3V0OworKwkJCX0KKysJCQlwZXJjZW50X2RlY29kZShhcmcsICZw a2NzMTEtPnBpbik7CisrCQkJZGVidWczX2YoIlNldHRpbmcgUElOIGZyb20gUEtDUyMxMSBVUkki KTsKKysJCQlicmVhazsKKysKKysJCWRlZmF1bHQ6CisrCQkJLyogVW5yZWNvZ25pemVkIGF0dHJp YnV0ZSBpbiB0aGUgVVJJIHF1ZXJ5IFNIT1VMRCBiZSBpZ25vcmVkICovCisrCQkJdmVyYm9zZV9m KCJVbmtub3duIHBhcnQgb2YgcXVlcnkgaW4gUEtDUyMxMSBVUkk6ICVzIiwgdG9rKTsKKysJCX0K KysJfQorK291dDoKKysJZnJlZShwKTsKKysJcmV0dXJuIHJ2OworK30KKysKKysjZW5kaWYgLyog RU5BQkxFX1BLQ1MxMSAqLworZGlmZiAtLWdpdCBhL3NzaC1wa2NzMTEtdXJpLmggYi9zc2gtcGtj czExLXVyaS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwLi5iYzc1OGU3 NjAKKy0tLSAvZGV2L251bGwKKysrKyBiL3NzaC1wa2NzMTEtdXJpLmgKK0BAIC0wLDAgKzEsNDYg QEAKKysvKgorKyAqIENvcHlyaWdodCAoYykgMjAxNyBSZWQgSGF0CisrICoKKysgKiBBdXRob3Jz OiBKYWt1YiBKZWxlbiA8amplbGVuQHJlZGhhdC5jb20+CisrICoKKysgKiBQZXJtaXNzaW9uIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkK KysgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3Zp ZGVkIHRoYXQgdGhlIGFib3ZlCisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKysgKgorKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElF UworKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVE IFdBUlJBTlRJRVMgT0YKKysgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorKyAqIEFOWSBTUEVDSUFMLCBESVJF Q1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKysg KiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMs IFdIRVRIRVIgSU4gQU4KKysgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RI RVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorKyAqIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisrICovCisrCisr I2lmbmRlZiBfU1NIX1BLQ1MxMV9VUklfSAorKyNkZWZpbmUgX1NTSF9QS0NTMTFfVVJJX0gKKysK KysjZGVmaW5lIFBLQ1MxMV9VUklfU0NIRU1FICJwa2NzMTE6IgorKyNkZWZpbmUgUEtDUzExX1VS SV9XSElURUxJU1QJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiBcCisrCQkJCSJBQkNERUZH SElKS0xNTk9QUVJTVFVWV1hZWiIgXAorKwkJCQkiMDEyMzQ1Njc4OV8tLigpIgorKworK3N0cnVj dCBwa2NzMTFfdXJpIHsKKysJLyogcGF0aCAqLworKwljaGFyICppZDsKKysJc2l6ZV90IGlkX2xl bjsKKysJY2hhciAqdG9rZW47CisrCWNoYXIgKm9iamVjdDsKKysJY2hhciAqbGliX21hbnVmOwor KwljaGFyICptYW51ZjsKKysJY2hhciAqc2VyaWFsOworKwkvKiBxdWVyeSAqLworKwljaGFyICpt b2R1bGVfcGF0aDsKKysJY2hhciAqcGluOyAvKiBPbmx5IHBhcnNlZCwgYnV0IG5vdCBwcmludGVk ICovCisrfTsKKysKKytzdHJ1Y3QJIHBrY3MxMV91cmkgKnBrY3MxMV91cmlfaW5pdCgpOworK3Zv aWQJIHBrY3MxMV91cmlfY2xlYW51cChzdHJ1Y3QgcGtjczExX3VyaSAqKTsKKytpbnQJIHBrY3Mx MV91cmlfcGFyc2UoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcGtjczExX3VyaSAqKTsKKytzdHJ1Y3QJ IHBrY3MxMV91cmkgKnBrY3MxMV91cmlfaW5pdCgpOworK2NoYXIJKnBrY3MxMV91cmlfZ2V0KHN0 cnVjdCBwa2NzMTFfdXJpICp1cmkpOworKyNlbmRpZiAvKiBfU1NIX1BLQ1MxMV9VUklfSCAqLwor ZGlmZiAtLWdpdCBhL3NzaC1wa2NzMTEuYyBiL3NzaC1wa2NzMTEuYworaW5kZXggN2E3ZDNiOGVh Li42ZjIzZmMzOGIgMTAwNjQ0CistLS0gYS9zc2gtcGtjczExLmMKKysrKyBiL3NzaC1wa2NzMTEu YworQEAgLTM2LDYgKzM2LDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9lY2RzYS5oPgorICNpbmNs dWRlIDxvcGVuc3NsL3g1MDkuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKyAjZW5kaWYKKyAKKyAjZGVmaW5lIENSWVBUT0tJX0NPTVBBVAor QEAgLTQ4LDYgKzQ5LDcgQEAKKyAjaW5jbHVkZSAibWlzYy5oIgorICNpbmNsdWRlICJzc2hidWYu aCIKKyAjaW5jbHVkZSAic3NoLXBrY3MxMS5oIgorKyNpbmNsdWRlICJzc2gtcGtjczExLXVyaS5o IgorICNpbmNsdWRlICJkaWdlc3QuaCIKKyAjaW5jbHVkZSAieG1hbGxvYy5oIgorICNpbmNsdWRl ICJjcnlwdG9fYXBpLmgiCitAQCAtNTgsOCArNjAsOCBAQCBzdHJ1Y3QgcGtjczExX3Nsb3RpbmZv IHsKKyAJaW50CQkJbG9nZ2VkX2luOworIH07CisgCistc3RydWN0IHBrY3MxMV9wcm92aWRlciB7 CistCWNoYXIJCQkqbmFtZTsKKytzdHJ1Y3QgcGtjczExX21vZHVsZSB7CisrCWNoYXIJCQkqbW9k dWxlX3BhdGg7CisgCXZvaWQJCQkqaGFuZGxlOworIAlDS19GVU5DVElPTl9MSVNUCSpmdW5jdGlv bl9saXN0OworIAlDS19JTkZPCQkJaW5mbzsKK0BAIC02OCw2ICs3MCwxMyBAQCBzdHJ1Y3QgcGtj czExX3Byb3ZpZGVyIHsKKyAJc3RydWN0IHBrY3MxMV9zbG90aW5mbwkqc2xvdGluZm87CisgCWlu dAkJCXZhbGlkOworIAlpbnQJCQlyZWZjb3VudDsKKyt9OworKworK3N0cnVjdCBwa2NzMTFfcHJv dmlkZXIgeworKwljaGFyCQkJKm5hbWU7CisrCXN0cnVjdCBwa2NzMTFfbW9kdWxlCSptb2R1bGU7 IC8qIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHByb3ZpZGVycyAqLworKwlpbnQJCQly ZWZjb3VudDsKKysJaW50CQkJdmFsaWQ7CisgCVRBSUxRX0VOVFJZKHBrY3MxMV9wcm92aWRlcikg bmV4dDsKKyB9OworIAorQEAgLTc5LDYgKzg4LDcgQEAgc3RydWN0IHBrY3MxMV9rZXkgeworIAlD S19VTE9ORwkJc2xvdGlkeDsKKyAJY2hhcgkJCSprZXlpZDsKKyAJaW50CQkJa2V5aWRfbGVuOwor KwljaGFyCQkJKmxhYmVsOworIAlUQUlMUV9FTlRSWShwa2NzMTFfa2V5KQluZXh0OworIH07Cisg CitAQCAtMTA1LDI2ICsxMTUsNjEgQEAgb3NzbF9lcnJvcihjb25zdCBjaGFyICptc2cpCisgICog dGhpcyBpcyBjYWxsZWQgd2hlbiBhIHByb3ZpZGVyIGdldHMgdW5yZWdpc3RlcmVkLgorICAqLwor IHN0YXRpYyB2b2lkCistcGtjczExX3Byb3ZpZGVyX2ZpbmFsaXplKHN0cnVjdCBwa2NzMTFfcHJv dmlkZXIgKnApCisrcGtjczExX21vZHVsZV9maW5hbGl6ZShzdHJ1Y3QgcGtjczExX21vZHVsZSAq bSkKKyB7CisgCUNLX1JWIHJ2OworIAlDS19VTE9ORyBpOworIAorLQlkZWJ1Z19mKCJwcm92aWRl ciBcIiVzXCIgcmVmY291bnQgJWQgdmFsaWQgJWQiLAorLQkgICAgcC0+bmFtZSwgcC0+cmVmY291 bnQsIHAtPnZhbGlkKTsKKy0JaWYgKCFwLT52YWxpZCkKKysJZGVidWdfZigiJXAgcmVmY291bnQg JWQgdmFsaWQgJWQiLCBtLCBtLT5yZWZjb3VudCwgbS0+dmFsaWQpOworKwlpZiAoIW0tPnZhbGlk KQorIAkJcmV0dXJuOworLQlmb3IgKGkgPSAwOyBpIDwgcC0+bnNsb3RzOyBpKyspIHsKKy0JCWlm IChwLT5zbG90aW5mb1tpXS5zZXNzaW9uICYmCistCQkgICAgKHJ2ID0gcC0+ZnVuY3Rpb25fbGlz dC0+Q19DbG9zZVNlc3Npb24oCistCQkgICAgcC0+c2xvdGluZm9baV0uc2Vzc2lvbikpICE9IENL Ul9PSykKKysJZm9yIChpID0gMDsgaSA8IG0tPm5zbG90czsgaSsrKSB7CisrCQlpZiAobS0+c2xv dGluZm9baV0uc2Vzc2lvbiAmJgorKwkJICAgIChydiA9IG0tPmZ1bmN0aW9uX2xpc3QtPkNfQ2xv c2VTZXNzaW9uKAorKwkJICAgIG0tPnNsb3RpbmZvW2ldLnNlc3Npb24pKSAhPSBDS1JfT0spCisg CQkJZXJyb3IoIkNfQ2xvc2VTZXNzaW9uIGZhaWxlZDogJWx1IiwgcnYpOworIAl9CistCWlmICgo cnYgPSBwLT5mdW5jdGlvbl9saXN0LT5DX0ZpbmFsaXplKE5VTEwpKSAhPSBDS1JfT0spCisrCWlm ICgocnYgPSBtLT5mdW5jdGlvbl9saXN0LT5DX0ZpbmFsaXplKE5VTEwpKSAhPSBDS1JfT0spCisg CQllcnJvcigiQ19GaW5hbGl6ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKKysJbS0+dmFsaWQgPSAwOwor KwltLT5mdW5jdGlvbl9saXN0ID0gTlVMTDsKKysJZGxjbG9zZShtLT5oYW5kbGUpOworK30KKysK KysvKgorKyAqIHJlbW92ZSBhIHJlZmVyZW5jZSB0byB0aGUgcGtjczExIG1vZHVsZS4KKysgKiBj YWxsZWQgd2hlbiBhIHByb3ZpZGVyIGlzIHVucmVnaXN0ZXJlZC4KKysgKi8KKytzdGF0aWMgdm9p ZAorK3BrY3MxMV9tb2R1bGVfdW5yZWYoc3RydWN0IHBrY3MxMV9tb2R1bGUgKm0pCisreworKwlk ZWJ1Z19mKCIlcCByZWZjb3VudCAlZCIsIG0sIG0tPnJlZmNvdW50KTsKKysJaWYgKC0tbS0+cmVm Y291bnQgPD0gMCkgeworKwkJcGtjczExX21vZHVsZV9maW5hbGl6ZShtKTsKKysJCWlmIChtLT52 YWxpZCkKKysJCQllcnJvcl9mKCIlcCBzdGlsbCB2YWxpZCIsIG0pOworKwkJZnJlZShtLT5zbG90 bGlzdCk7CisrCQlmcmVlKG0tPnNsb3RpbmZvKTsKKysJCWZyZWUobS0+bW9kdWxlX3BhdGgpOwor KwkJZnJlZShtKTsKKysJfQorK30KKysKKysvKgorKyAqIGZpbmFsaXplIGEgcHJvdmlkZXIgc2hh cmVkIGxpYnJhcnksIGl0J3Mgbm8gbG9uZ2VyIHVzYWJsZS4KKysgKiBob3dldmVyLCB0aGVyZSBt aWdodCBzdGlsbCBiZSBrZXlzIHJlZmVyZW5jaW5nIHRoaXMgcHJvdmlkZXIsCisrICogc28gdGhl IGFjdHVhbCBmcmVlaW5nIG9mIG1lbW9yeSBpcyBoYW5kbGVkIGJ5IHBrY3MxMV9wcm92aWRlcl91 bnJlZigpLgorKyAqIHRoaXMgaXMgY2FsbGVkIHdoZW4gYSBwcm92aWRlciBnZXRzIHVucmVnaXN0 ZXJlZC4KKysgKi8KKytzdGF0aWMgdm9pZAorK3BrY3MxMV9wcm92aWRlcl9maW5hbGl6ZShzdHJ1 Y3QgcGtjczExX3Byb3ZpZGVyICpwKQorK3sKKysJZGVidWdfZigiJXAgcmVmY291bnQgJWQgdmFs aWQgJWQiLCBwLCBwLT5yZWZjb3VudCwgcC0+dmFsaWQpOworKwlpZiAoIXAtPnZhbGlkKQorKwkJ cmV0dXJuOworKwlwa2NzMTFfbW9kdWxlX3VucmVmKHAtPm1vZHVsZSk7CisrCXAtPm1vZHVsZSA9 IE5VTEw7CisgCXAtPnZhbGlkID0gMDsKKy0JcC0+ZnVuY3Rpb25fbGlzdCA9IE5VTEw7CistCWRs Y2xvc2UocC0+aGFuZGxlKTsKKyB9CisgCisgLyoKK0BAIC0xMzYsMTUgKzE4MSwyNyBAQCBwa2Nz MTFfcHJvdmlkZXJfdW5yZWYoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCkKKyB7CisgCWRlYnVn X2YoInByb3ZpZGVyIFwiJXNcIiByZWZjb3VudCAlZCIsIHAtPm5hbWUsIHAtPnJlZmNvdW50KTsK KyAJaWYgKC0tcC0+cmVmY291bnQgPD0gMCkgeworLQkJaWYgKHAtPnZhbGlkKQorLQkJCWVycm9y X2YoInByb3ZpZGVyIFwiJXNcIiBzdGlsbCB2YWxpZCIsIHAtPm5hbWUpOworIAkJZnJlZShwLT5u YW1lKTsKKy0JCWZyZWUocC0+c2xvdGxpc3QpOworLQkJZnJlZShwLT5zbG90aW5mbyk7CisrCQlp ZiAocC0+bW9kdWxlKQorKwkJCXBrY3MxMV9tb2R1bGVfdW5yZWYocC0+bW9kdWxlKTsKKyAJCWZy ZWUocCk7CisgCX0KKyB9CisgCisrLyogbG9va3VwIHByb3ZpZGVyIGJ5IG1vZHVsZSBwYXRoICov Cisrc3RhdGljIHN0cnVjdCBwa2NzMTFfbW9kdWxlICoKKytwa2NzMTFfcHJvdmlkZXJfbG9va3Vw X21vZHVsZShjaGFyICptb2R1bGVfcGF0aCkKKyt7CisrCXN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnA7CisrCisrCVRBSUxRX0ZPUkVBQ0gocCwgJnBrY3MxMV9wcm92aWRlcnMsIG5leHQpIHsKKysJ CWRlYnVnKCJjaGVjayAlcCAlcyAoJXMpIiwgcCwgcC0+bmFtZSwgcC0+bW9kdWxlLT5tb2R1bGVf cGF0aCk7CisrCQlpZiAoIXN0cmNtcChtb2R1bGVfcGF0aCwgcC0+bW9kdWxlLT5tb2R1bGVfcGF0 aCkpCisrCQkJcmV0dXJuIChwLT5tb2R1bGUpOworKwl9CisrCXJldHVybiAoTlVMTCk7CisrfQor KworIC8qIGxvb2t1cCBwcm92aWRlciBieSBuYW1lICovCisgc3RhdGljIHN0cnVjdCBwa2NzMTFf cHJvdmlkZXIgKgorIHBrY3MxMV9wcm92aWRlcl9sb29rdXAoY2hhciAqcHJvdmlkZXJfaWQpCitA QCAtMTU5LDE5ICsyMTYsNTUgQEAgcGtjczExX3Byb3ZpZGVyX2xvb2t1cChjaGFyICpwcm92aWRl cl9pZCkKKyAJcmV0dXJuIChOVUxMKTsKKyB9CisgCisraW50IHBrY3MxMV9kZWxfcHJvdmlkZXJf YnlfdXJpKHN0cnVjdCBwa2NzMTFfdXJpICopOworKworIC8qIHVucmVnaXN0ZXIgcHJvdmlkZXIg YnkgbmFtZSAqLworIGludAorIHBrY3MxMV9kZWxfcHJvdmlkZXIoY2hhciAqcHJvdmlkZXJfaWQp CisreworKwlpbnQgcnY7CisrCXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7CisrCisrCWRlYnVnX2Yo ImNhbGxlZCwgcHJvdmlkZXJfaWQgPSAlcyIsIHByb3ZpZGVyX2lkKTsKKysKKysgICAgICBpZiAo cHJvdmlkZXJfaWQgPT0gTlVMTCkKKysgICAgICAgICAgcmV0dXJuIDA7CisrCisrCXVyaSA9IHBr Y3MxMV91cmlfaW5pdCgpOworKwlpZiAodXJpID09IE5VTEwpCisrCQlmYXRhbCgiRmFpbGVkIHRv IGluaXQgUEtDUyMxMSBVUkkiKTsKKysKKysJaWYgKHN0cmxlbihwcm92aWRlcl9pZCkgPj0gc3Ry bGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgorKwkgICAgc3RybmNtcChwcm92aWRlcl9pZCwgUEtD UzExX1VSSV9TQ0hFTUUsIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkpID09IDApIHsKKysJCWlm IChwa2NzMTFfdXJpX3BhcnNlKHByb3ZpZGVyX2lkLCB1cmkpICE9IDApCisrCQkJZmF0YWwoIkZh aWxlZCB0byBwYXJzZSBQS0NTIzExIFVSSSIpOworKwl9IGVsc2UgeworKwkJdXJpLT5tb2R1bGVf cGF0aCA9IHN0cmR1cChwcm92aWRlcl9pZCk7CisrCX0KKysKKysJcnYgPSBwa2NzMTFfZGVsX3By b3ZpZGVyX2J5X3VyaSh1cmkpOworKwlwa2NzMTFfdXJpX2NsZWFudXAodXJpKTsKKysJcmV0dXJu IHJ2OworK30KKysKKysvKiB1bnJlZ2lzdGVyIHByb3ZpZGVyIGJ5IFBLQ1MjMTEgVVJJICovCisr aW50CisrcGtjczExX2RlbF9wcm92aWRlcl9ieV91cmkoc3RydWN0IHBrY3MxMV91cmkgKnVyaSkK KyB7CisgCXN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnA7CisrCWludCBydiA9IC0xOworKwljaGFy ICpwcm92aWRlcl91cmkgPSBwa2NzMTFfdXJpX2dldCh1cmkpOworIAorLQlpZiAoKHAgPSBwa2Nz MTFfcHJvdmlkZXJfbG9va3VwKHByb3ZpZGVyX2lkKSkgIT0gTlVMTCkgeworKwlkZWJ1ZzNfZigi Y2FsbGVkIHdpdGggcHJvdmlkZXIgJXMiLCBwcm92aWRlcl91cmkpOworKworKwlpZiAoKHAgPSBw a2NzMTFfcHJvdmlkZXJfbG9va3VwKHByb3ZpZGVyX3VyaSkpICE9IE5VTEwpIHsKKyAJCVRBSUxR X1JFTU9WRSgmcGtjczExX3Byb3ZpZGVycywgcCwgbmV4dCk7CisgCQlwa2NzMTFfcHJvdmlkZXJf ZmluYWxpemUocCk7CisgCQlwa2NzMTFfcHJvdmlkZXJfdW5yZWYocCk7CistCQlyZXR1cm4gKDAp OworKwkJcnYgPSAwOworIAl9CistCXJldHVybiAoLTEpOworKwlmcmVlKHByb3ZpZGVyX3VyaSk7 CisrCXJldHVybiBydjsKKyB9CisgCisgLyogcmVsZWFzZSBhIHdyYXBwZWQgb2JqZWN0ICovCitA QCAtMTgzLDYgKzI3Niw3IEBAIHBrY3MxMV9rMTFfZnJlZShzdHJ1Y3QgcGtjczExX2tleSAqazEx KQorIAlpZiAoazExLT5wcm92aWRlcikKKyAJCXBrY3MxMV9wcm92aWRlcl91bnJlZihrMTEtPnBy b3ZpZGVyKTsKKyAJZnJlZShrMTEtPmtleWlkKTsKKysJZnJlZShrMTEtPmxhYmVsKTsKKyAJc3No YnVmX2ZyZWUoazExLT5rZXlibG9iKTsKKyAJZnJlZShrMTEpOworIH0KK0BAIC0xOTgsOCArMjky LDggQEAgcGtjczExX2ZpbmQoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xv dGlkeCwgQ0tfQVRUUklCVVRFICphdHRyLAorIAlDS19SVgkJCXJ2OworIAlpbnQJCQlyZXQgPSAt MTsKKyAKKy0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7CistCXNlc3Npb24gPSBwLT5zbG90aW5mb1tz bG90aWR4XS5zZXNzaW9uOworKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworKwlzZXNz aW9uID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOworIAlpZiAoKHJ2ID0g Zi0+Q19GaW5kT2JqZWN0c0luaXQoc2Vzc2lvbiwgYXR0ciwgbmF0dHIpKSAhPSBDS1JfT0spIHsK KyAJCWVycm9yKCJDX0ZpbmRPYmplY3RzSW5pdCBmYWlsZWQgKG5hdHRyICVsdSk6ICVsdSIsIG5h dHRyLCBydik7CisgCQlyZXR1cm4gKC0xKTsKK0BAIC0yMzYsMTQgKzMzMCwxNCBAQCBwa2NzMTFf bG9naW5fc2xvdChzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwcm92aWRlciwgc3RydWN0IHBrY3Mx MV9zbG90aW5mbyAqc2ksCisgCWlmIChzaS0+dG9rZW4uZmxhZ3MgJiBDS0ZfUFJPVEVDVEVEX0FV VEhFTlRJQ0FUSU9OX1BBVEgpCisgCQl2ZXJib3NlKCJEZWZlcnJpbmcgUElOIGVudHJ5IHRvIHJl YWRlciBrZXlwYWQuIik7CisgCWVsc2UgeworLQkJc25wcmludGYocHJvbXB0LCBzaXplb2YocHJv bXB0KSwgIkVudGVyIFBJTiBmb3IgJyVzJzogIiwKKysJCXNucHJpbnRmKHByb21wdCwgc2l6ZW9m KHByb21wdCksICJFbnRlciBQSU4gZm9yICclLjMycyc6ICIsCisgCQkgICAgc2ktPnRva2VuLmxh YmVsKTsKKy0JCWlmICgocGluID0gcmVhZF9wYXNzcGhyYXNlKHByb21wdCwgUlBfQUxMT1dfRU9G KSkgPT0gTlVMTCkgeworKwkJaWYgKChwaW4gPSByZWFkX3Bhc3NwaHJhc2UocHJvbXB0LCBSUF9B TExPV19FT0Z8UlBfQUxMT1dfU1RESU4pKSA9PSBOVUxMKSB7CisgCQkJZGVidWdfZigibm8gcGlu IHNwZWNpZmllZCIpOworIAkJCXJldHVybiAoLTEpOwkvKiBiYWlsIG91dCAqLworIAkJfQorIAl9 CistCXJ2ID0gcHJvdmlkZXItPmZ1bmN0aW9uX2xpc3QtPkNfTG9naW4oc2ktPnNlc3Npb24sIHR5 cGUsICh1X2NoYXIgKilwaW4sCisrCXJ2ID0gcHJvdmlkZXItPm1vZHVsZS0+ZnVuY3Rpb25fbGlz dC0+Q19Mb2dpbihzaS0+c2Vzc2lvbiwgdHlwZSwgKHVfY2hhciAqKXBpbiwKKyAJICAgIChwaW4g IT0gTlVMTCkgPyBzdHJsZW4ocGluKSA6IDApOworIAlpZiAocGluICE9IE5VTEwpCisgCQlmcmVl emVybyhwaW4sIHN0cmxlbihwaW4pKTsKK0BAIC0yNzMsMTMgKzM2NywxNCBAQCBwa2NzMTFfbG9n aW5fc2xvdChzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwcm92aWRlciwgc3RydWN0IHBrY3MxMV9z bG90aW5mbyAqc2ksCisgc3RhdGljIGludAorIHBrY3MxMV9sb2dpbihzdHJ1Y3QgcGtjczExX2tl eSAqazExLCBDS19VU0VSX1RZUEUgdHlwZSkKKyB7CistCWlmIChrMTEgPT0gTlVMTCB8fCBrMTEt PnByb3ZpZGVyID09IE5VTEwgfHwgIWsxMS0+cHJvdmlkZXItPnZhbGlkKSB7CisrCWlmIChrMTEg PT0gTlVMTCB8fCBrMTEtPnByb3ZpZGVyID09IE5VTEwgfHwgIWsxMS0+cHJvdmlkZXItPnZhbGlk IHx8CisrCSAgICBrMTEtPnByb3ZpZGVyLT5tb2R1bGUgPT0gTlVMTCB8fCAhazExLT5wcm92aWRl ci0+bW9kdWxlLT52YWxpZCkgeworIAkJZXJyb3IoIm5vIHBrY3MxMSAodmFsaWQpIHByb3ZpZGVy IGZvdW5kIik7CisgCQlyZXR1cm4gKC0xKTsKKyAJfQorIAorIAlyZXR1cm4gcGtjczExX2xvZ2lu X3Nsb3QoazExLT5wcm92aWRlciwKKy0JICAgICZrMTEtPnByb3ZpZGVyLT5zbG90aW5mb1trMTEt PnNsb3RpZHhdLCB0eXBlKTsKKysJICAgICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZv W2sxMS0+c2xvdGlkeF0sIHR5cGUpOworIH0KKyAKKyAKK0BAIC0yOTUsMTMgKzM5MCwxNCBAQCBw a2NzMTFfY2hlY2tfb2JqX2Jvb2xfYXR0cmliKHN0cnVjdCBwa2NzMTFfa2V5ICprMTEsIENLX09C SkVDVF9IQU5ETEUgb2JqLAorIAorIAkqdmFsID0gMDsKKyAKKy0JaWYgKCFrMTEtPnByb3ZpZGVy IHx8ICFrMTEtPnByb3ZpZGVyLT52YWxpZCkgeworKwlpZiAoIWsxMS0+cHJvdmlkZXIgfHwgIWsx MS0+cHJvdmlkZXItPnZhbGlkIHx8CisrCSAgICAhazExLT5wcm92aWRlci0+bW9kdWxlIHx8ICFr MTEtPnByb3ZpZGVyLT5tb2R1bGUtPnZhbGlkKSB7CisgCQllcnJvcigibm8gcGtjczExICh2YWxp ZCkgcHJvdmlkZXIgZm91bmQiKTsKKyAJCXJldHVybiAoLTEpOworIAl9CisgCistCWYgPSBrMTEt PnByb3ZpZGVyLT5mdW5jdGlvbl9saXN0OworLQlzaSA9ICZrMTEtPnByb3ZpZGVyLT5zbG90aW5m b1trMTEtPnNsb3RpZHhdOworKwlmID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5mdW5jdGlvbl9s aXN0OworKwlzaSA9ICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlk eF07CisgCisgCWF0dHIudHlwZSA9IHR5cGU7CisgCWF0dHIucFZhbHVlID0gJmZsYWc7CitAQCAt MzMyLDEzICs0MjgsMTQgQEAgcGtjczExX2dldF9rZXkoc3RydWN0IHBrY3MxMV9rZXkgKmsxMSwg Q0tfTUVDSEFOSVNNX1RZUEUgbWVjaF90eXBlKQorIAlpbnQJCQkgYWx3YXlzX2F1dGggPSAwOwor IAlpbnQJCQkgZGlkX2xvZ2luID0gMDsKKyAKKy0JaWYgKCFrMTEtPnByb3ZpZGVyIHx8ICFrMTEt PnByb3ZpZGVyLT52YWxpZCkgeworKwlpZiAoIWsxMS0+cHJvdmlkZXIgfHwgIWsxMS0+cHJvdmlk ZXItPnZhbGlkIHx8CisrCSAgICAhazExLT5wcm92aWRlci0+bW9kdWxlIHx8ICFrMTEtPnByb3Zp ZGVyLT5tb2R1bGUtPnZhbGlkKSB7CisgCQllcnJvcigibm8gcGtjczExICh2YWxpZCkgcHJvdmlk ZXIgZm91bmQiKTsKKyAJCXJldHVybiAoLTEpOworIAl9CisgCistCWYgPSBrMTEtPnByb3ZpZGVy LT5mdW5jdGlvbl9saXN0OworLQlzaSA9ICZrMTEtPnByb3ZpZGVyLT5zbG90aW5mb1trMTEtPnNs b3RpZHhdOworKwlmID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworKwlz aSA9ICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07CisgCisg CWlmICgoc2ktPnRva2VuLmZsYWdzICYgQ0tGX0xPR0lOX1JFUVVJUkVEKSAmJiAhc2ktPmxvZ2dl ZF9pbikgeworIAkJaWYgKHBrY3MxMV9sb2dpbihrMTEsIENLVV9VU0VSKSA8IDApIHsKK0BAIC00 MzcsNiArNTM0LDEyIEBAIHBrY3MxMV9yZWNvcmRfa2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnByb3ZpZGVyLCBDS19VTE9ORyBzbG90aWR4LAorIAkJazExLT5rZXlpZCA9IHhtYWxsb2MoazEx LT5rZXlpZF9sZW4pOworIAkJbWVtY3B5KGsxMS0+a2V5aWQsIGtleWlkX2F0dHJpYi0+cFZhbHVl LCBrMTEtPmtleWlkX2xlbik7CisgCX0KKysJaWYgKGtleWlkX2F0dHJpYi0+dWxWYWx1ZUxlbiA+ IDAgKSB7CisrCQlrMTEtPmxhYmVsID0geG1hbGxvYyhrZXlpZF9hdHRyaWItPnVsVmFsdWVMZW4r MSk7CisrCQltZW1jcHkoazExLT5sYWJlbCwga2V5aWRfYXR0cmliLT5wVmFsdWUsIGtleWlkX2F0 dHJpYi0+dWxWYWx1ZUxlbik7CisrCQlrMTEtPmxhYmVsW2tleWlkX2F0dHJpYi0+dWxWYWx1ZUxl bl0gPSAwOworKwl9CisrCisgCVRBSUxRX0lOU0VSVF9UQUlMKCZwa2NzMTFfa2V5cywgazExLCBu ZXh0KTsKKyAKKyAJcmV0dXJuIDA7CitAQCAtNDY0LDYgKzU2Nyw0MiBAQCBwa2NzMTFfbG9va3Vw X2tleShzdHJ1Y3Qgc3Noa2V5ICprZXkpCisgCXJldHVybiBmb3VuZDsKKyB9CisgCisrLyoKKysg KiBUaGlzIGNhbid0IGJlIGluIHRoZSBzc2gtcGtjczExLXVyaSwgYmVjYXNlIHdlIGNhbiBub3Qg ZGVwZW5kIG9uCisrICogUEtDUyMxMSBzdHJ1Y3R1cmVzIGluIHNzaC1hZ2VudCAodXNpbmcgY2xp ZW50LWhlbHBlciBjb21tdW5pY2F0aW9uKQorKyAqLworK2ludAorK3BrY3MxMV91cmlfd3JpdGUo Y29uc3Qgc3RydWN0IHNzaGtleSAqa2V5LCBGSUxFICpmKQorK3sKKysJY2hhciAqcCA9IE5VTEw7 CisrCXN0cnVjdCBwa2NzMTFfdXJpIHVyaTsKKysJc3RydWN0IHBrY3MxMV9rZXkgKmsxMSA9IHBr Y3MxMV9sb29rdXBfa2V5KGtleSk7CisrCisrCWlmIChrMTEgPT0gTlVMTCkgeworKwkJZXJyb3Io IkZhaWxlZCB0byBnZXQgZXhfZGF0YSBmb3Iga2V5IHR5cGUgJWQiLCBrZXktPnR5cGUpOworKwkJ cmV0dXJuICgtMSk7CisrCX0KKysKKysJLyogb21pdCB0eXBlIC0tIHdlIGFyZSBsb29raW5nIGZv ciBwcml2YXRlLXB1YmxpYyBvciBwcml2YXRlLWNlcnRpZmljYXRlIHBhaXJzICovCisrCXVyaS5p ZCA9IGsxMS0+a2V5aWQ7CisrCXVyaS5pZF9sZW4gPSBrMTEtPmtleWlkX2xlbjsKKysJdXJpLnRv a2VuID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdLnRva2Vu LmxhYmVsOworKwl1cmkub2JqZWN0ID0gazExLT5sYWJlbDsKKysJdXJpLm1vZHVsZV9wYXRoID0g azExLT5wcm92aWRlci0+bW9kdWxlLT5tb2R1bGVfcGF0aDsKKysJdXJpLmxpYl9tYW51ZiA9IGsx MS0+cHJvdmlkZXItPm1vZHVsZS0+aW5mby5tYW51ZmFjdHVyZXJJRDsKKysJdXJpLm1hbnVmID0g azExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdLnRva2VuLm1hbnVm YWN0dXJlcklEOworKwl1cmkuc2VyaWFsID0gazExLT5wcm92aWRlci0+bW9kdWxlLT5zbG90aW5m b1trMTEtPnNsb3RpZHhdLnRva2VuLnNlcmlhbE51bWJlcjsKKysKKysJcCA9IHBrY3MxMV91cmlf Z2V0KCZ1cmkpOworKwkvKiBkbyBub3QgY2xlYW51cCAtLSB3ZSBkbyBub3QgYWxsb2NhdGUgaGVy ZSwgb25seSByZWZlcmVuY2UgKi8KKysJaWYgKHAgPT0gTlVMTCkKKysJCXJldHVybiAtMTsKKysK KysJZnByaW50ZihmLCAiICVzIiwgcCk7CisrCWZyZWUocCk7CisrCXJldHVybiAwOworK30KKysK KyAjaWZkZWYgV0lUSF9PUEVOU1NMCisgLyoKKyAgKiBTZWU6CitAQCAtNTY4LDggKzcwNyw4IEBA IHBrY3MxMV9zaWduX3JzYShzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCQlyZXR1cm4gU1NIX0VSUl9B R0VOVF9GQUlMVVJFOworIAl9CisgCistCWYgPSBrMTEtPnByb3ZpZGVyLT5mdW5jdGlvbl9saXN0 OworLQlzaSA9ICZrMTEtPnByb3ZpZGVyLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOworKwlmID0g azExLT5wcm92aWRlci0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworKwlzaSA9ICZrMTEtPnByb3Zp ZGVyLT5tb2R1bGUtPnNsb3RpbmZvW2sxMS0+c2xvdGlkeF07CisgCisgCWlmICgoc2lnbGVuID0g RVZQX1BLRVlfc2l6ZShrZXktPnBrZXkpKSA8PSAwKQorIAkJcmV0dXJuIFNTSF9FUlJfSU5WQUxJ RF9BUkdVTUVOVDsKK0BAIC02NTgsOCArNzk3LDggQEAgcGtjczExX3NpZ25fZWNkc2Eoc3RydWN0 IHNzaGtleSAqa2V5LAorIAlkZWJ1ZzNfZigic2lnbiB1c2luZyBwcm92aWRlciAlcyBzbG90aWR4 ICVsdSIsCisgCSAgICBrMTEtPnByb3ZpZGVyLT5uYW1lLCAodV9sb25nKWsxMS0+c2xvdGlkeCk7 CisgCistCWYgPSBrMTEtPnByb3ZpZGVyLT5mdW5jdGlvbl9saXN0OworLQlzaSA9ICZrMTEtPnBy b3ZpZGVyLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOworKwlmID0gazExLT5wcm92aWRlci0+bW9k dWxlLT5mdW5jdGlvbl9saXN0OworKwlzaSA9ICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNsb3Rp bmZvW2sxMS0+c2xvdGlkeF07CisgCisgCS8qIFByZXBhcmUgZGlnZXN0IHRvIGJlIHNpZ25lZCAq LworIAlpZiAoKGhhc2hhbGcgPSBzc2hrZXlfZWNfbmlkX3RvX2hhc2hfYWxnKGtleS0+ZWNkc2Ff bmlkKSkgPT0gLTEpCitAQCAtNzQzLDggKzg4Miw4IEBAIHBrY3MxMV9zaWduX2VkMjU1MTkoc3Ry dWN0IHNzaGtleSAqa2V5LAorIAlkZWJ1ZzNfZigic2lnbiB1c2luZyBwcm92aWRlciAlcyBzbG90 aWR4ICVsdSIsCisgCSAgICBrMTEtPnByb3ZpZGVyLT5uYW1lLCAodV9sb25nKWsxMS0+c2xvdGlk eCk7CisgCistCWYgPSBrMTEtPnByb3ZpZGVyLT5mdW5jdGlvbl9saXN0OworLQlzaSA9ICZrMTEt PnByb3ZpZGVyLT5zbG90aW5mb1trMTEtPnNsb3RpZHhdOworKwlmID0gazExLT5wcm92aWRlci0+ bW9kdWxlLT5mdW5jdGlvbl9saXN0OworKwlzaSA9ICZrMTEtPnByb3ZpZGVyLT5tb2R1bGUtPnNs b3RpbmZvW2sxMS0+c2xvdGlkeF07CisgCisgCXhkYXRhID0geG1hbGxvYyhkYXRhbGVuKTsKKyAJ bWVtY3B5KHhkYXRhLCBkYXRhLCBkYXRhbGVuKTsKK0BAIC03NzIsNyArOTExLDggQEAgcGtjczEx X3NpZ25fZWQyNTUxOShzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCXJldHVybiByZXQ7CisgfQorIAor LS8qIHJlbW92ZSB0cmFpbGluZyBzcGFjZXMgKi8KKysvKiByZW1vdmUgdHJhaWxpbmcgc3BhY2Vz LiBOb3RlLCB0aGF0IHRoaXMgZG9lcyBOT1QgZ3VhcmFudGVlIHRoZSBidWZmZXIKKysgKiB3aWxs IGJlIG51bGwgdGVybWluYXRlZCBpZiB0aGVyZSBhcmUgbm8gdHJhaWxpbmcgc3BhY2VzISAqLwor IHN0YXRpYyBjaGFyICoKKyBybXNwYWNlKHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQorIHsKK0BA IC04MDQsOCArOTQ0LDggQEAgcGtjczExX29wZW5fc2Vzc2lvbihzdHJ1Y3QgcGtjczExX3Byb3Zp ZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LCBjaGFyICpwaW4sCisgCUNLX1NFU1NJT05fSEFORExF CXNlc3Npb247CisgCWludAkJCWxvZ2luX3JlcXVpcmVkLCByZXQ7CisgCistCWYgPSBwLT5mdW5j dGlvbl9saXN0OworLQlzaSA9ICZwLT5zbG90aW5mb1tzbG90aWR4XTsKKysJZiA9IHAtPm1vZHVs ZS0+ZnVuY3Rpb25fbGlzdDsKKysJc2kgPSAmcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XTsK KyAKKyAJbG9naW5fcmVxdWlyZWQgPSBzaS0+dG9rZW4uZmxhZ3MgJiBDS0ZfTE9HSU5fUkVRVUlS RUQ7CisgCitAQCAtODE1LDkgKzk1NSw5IEBAIHBrY3MxMV9vcGVuX3Nlc3Npb24oc3RydWN0IHBr Y3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwgY2hhciAqcGluLAorIAkJZXJyb3Io InBpbiByZXF1aXJlZCIpOworIAkJcmV0dXJuICgtU1NIX1BLQ1MxMV9FUlJfUElOX1JFUVVJUkVE KTsKKyAJfQorLQlpZiAoKHJ2ID0gZi0+Q19PcGVuU2Vzc2lvbihwLT5zbG90bGlzdFtzbG90aWR4 XSwgQ0tGX1JXX1NFU1NJT058CisrCWlmICgocnYgPSBmLT5DX09wZW5TZXNzaW9uKHAtPm1vZHVs ZS0+c2xvdGxpc3Rbc2xvdGlkeF0sIENLRl9SV19TRVNTSU9OfAorIAkgICAgQ0tGX1NFUklBTF9T RVNTSU9OLCBOVUxMLCBOVUxMLCAmc2Vzc2lvbikpICE9IENLUl9PSykgeworLQkJZXJyb3IoIkNf T3BlblNlc3Npb24gZmFpbGVkOiAlbHUiLCBydik7CisrCQllcnJvcigiQ19PcGVuU2Vzc2lvbiBm YWlsZWQgZm9yIHNsb3QgJWx1OiAlbHUiLCBzbG90aWR4LCBydik7CisgCQlyZXR1cm4gKC0xKTsK KyAJfQorIAlpZiAobG9naW5fcmVxdWlyZWQgJiYgcGluICE9IE5VTEwgJiYgc3RybGVuKHBpbikg IT0gMCkgeworQEAgLTg1NCw3ICs5OTQsOCBAQCBzdGF0aWMgc3RydWN0IHNzaGtleSAqCisgcGtj czExX2ZldGNoX2VjZHNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9O RyBzbG90aWR4LAorICAgICBDS19PQkpFQ1RfSEFORExFICpvYmopCisgeworLQlDS19BVFRSSUJV VEUJCSBrZXlfYXR0clszXTsKKysJQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbNF07CisrCWludAkJ CSBuYXR0ciA9IDQ7CisgCUNLX1NFU1NJT05fSEFORExFCSBzZXNzaW9uOworIAlDS19GVU5DVElP Tl9MSVNUCSpmID0gTlVMTDsKKyAJQ0tfUlYJCQkgcnY7CitAQCAtODY3LDE0ICsxMDA4LDE1IEBA IHBrY3MxMV9mZXRjaF9lY2RzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tf VUxPTkcgc2xvdGlkeCwKKyAKKyAJbWVtc2V0KCZrZXlfYXR0ciwgMCwgc2l6ZW9mKGtleV9hdHRy KSk7CisgCWtleV9hdHRyWzBdLnR5cGUgPSBDS0FfSUQ7CistCWtleV9hdHRyWzFdLnR5cGUgPSBD S0FfRUNfUE9JTlQ7CistCWtleV9hdHRyWzJdLnR5cGUgPSBDS0FfRUNfUEFSQU1TOworKwlrZXlf YXR0clsxXS50eXBlID0gQ0tBX0xBQkVMOworKwlrZXlfYXR0clsyXS50eXBlID0gQ0tBX0VDX1BP SU5UOworKwlrZXlfYXR0clszXS50eXBlID0gQ0tBX0VDX1BBUkFNUzsKKyAKKy0Jc2Vzc2lvbiA9 IHAtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CistCWYgPSBwLT5mdW5jdGlvbl9saXN0Owor KwlzZXNzaW9uID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9uOworKwlmID0g cC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworIAorIAkvKiBmaWd1cmUgb3V0IHNpemUgb2YgdGhl IGF0dHJpYnV0ZXMgKi8KKy0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpv YmosIGtleV9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24s ICpvYmosIGtleV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1JfT0spIHsKKyAJCWVycm9y KCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOworIAkJcmV0dXJuIChOVUxM KTsKK0BAIC04ODUsMTkgKzEwMjcsMTkgQEAgcGtjczExX2ZldGNoX2VjZHNhX3B1YmtleShzdHJ1 Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkgKiBlbnN1cmUgdGhh dCBub25lIG9mIHRoZSBvdGhlcnMgYXJlIHplcm8gbGVuZ3RoLgorIAkgKiBYWFggYXNzdW1lcyBD S0FfSUQgaXMgYWx3YXlzIGZpcnN0LgorIAkgKi8KKy0JaWYgKGtleV9hdHRyWzFdLnVsVmFsdWVM ZW4gPT0gMCB8fAorLQkgICAga2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwKSB7CisrCWlmIChr ZXlfYXR0clsyXS51bFZhbHVlTGVuID09IDAgfHwKKysJICAgIGtleV9hdHRyWzNdLnVsVmFsdWVM ZW4gPT0gMCkgeworIAkJZXJyb3IoImludmFsaWQgYXR0cmlidXRlIGxlbmd0aCIpOworIAkJcmV0 dXJuIChOVUxMKTsKKyAJfQorIAorIAkvKiBhbGxvY2F0ZSBidWZmZXJzIGZvciBhdHRyaWJ1dGVz ICovCistCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisrCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsg aSsrKQorIAkJaWYgKGtleV9hdHRyW2ldLnVsVmFsdWVMZW4gPiAwKQorIAkJCWtleV9hdHRyW2ld LnBWYWx1ZSA9IHhjYWxsb2MoMSwga2V5X2F0dHJbaV0udWxWYWx1ZUxlbik7CisgCisgCS8qIHJl dHJpZXZlIElELCBwdWJsaWMgcG9pbnQgYW5kIGN1cnZlIHBhcmFtZXRlcnMgb2YgRUMga2V5ICov CistCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBrZXlfYXR0ciwg Myk7CisrCXJ2ID0gZi0+Q19HZXRBdHRyaWJ1dGVWYWx1ZShzZXNzaW9uLCAqb2JqLCBrZXlfYXR0 ciwgbmF0dHIpOworIAlpZiAocnYgIT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19HZXRBdHRyaWJ1 dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCWdvdG8gZmFpbDsKK0BAIC05MDksOCArMTA1 MSw4IEBAIHBrY3MxMV9mZXRjaF9lY2RzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAq cCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAJCWdvdG8gZmFpbDsKKyAJfQorIAorLQlhdHRycCA9IGtl eV9hdHRyWzJdLnBWYWx1ZTsKKy0JZ3JvdXAgPSBkMmlfRUNQS1BhcmFtZXRlcnMoTlVMTCwgJmF0 dHJwLCBrZXlfYXR0clsyXS51bFZhbHVlTGVuKTsKKysJYXR0cnAgPSBrZXlfYXR0clszXS5wVmFs dWU7CisrCWdyb3VwID0gZDJpX0VDUEtQYXJhbWV0ZXJzKE5VTEwsICZhdHRycCwga2V5X2F0dHJb M10udWxWYWx1ZUxlbik7CisgCWlmIChncm91cCA9PSBOVUxMKSB7CisgCQlvc3NsX2Vycm9yKCJk MmlfRUNQS1BhcmFtZXRlcnMgZmFpbGVkIik7CisgCQlnb3RvIGZhaWw7CitAQCAtOTIxLDEzICsx MDYzLDEzIEBAIHBrY3MxMV9mZXRjaF9lY2RzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRl ciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAJCWdvdG8gZmFpbDsKKyAJfQorIAorLQlpZiAoa2V5 X2F0dHJbMV0udWxWYWx1ZUxlbiA8PSAyKSB7CisrCWlmIChrZXlfYXR0clsyXS51bFZhbHVlTGVu IDw9IDIpIHsKKyAJCWVycm9yKCJDS0FfRUNfUE9JTlQgdG9vIHNtYWxsIik7CisgCQlnb3RvIGZh aWw7CisgCX0KKyAKKy0JYXR0cnAgPSBrZXlfYXR0clsxXS5wVmFsdWU7CistCW9jdGV0ID0gZDJp X0FTTjFfT0NURVRfU1RSSU5HKE5VTEwsICZhdHRycCwga2V5X2F0dHJbMV0udWxWYWx1ZUxlbik7 CisrCWF0dHJwID0ga2V5X2F0dHJbMl0ucFZhbHVlOworKwlvY3RldCA9IGQyaV9BU04xX09DVEVU X1NUUklORyhOVUxMLCAmYXR0cnAsIGtleV9hdHRyWzJdLnVsVmFsdWVMZW4pOworIAlpZiAob2N0 ZXQgPT0gTlVMTCkgeworIAkJb3NzbF9lcnJvcigiZDJpX0FTTjFfT0NURVRfU1RSSU5HIGZhaWxl ZCIpOworIAkJZ290byBmYWlsOworQEAgLTk4OSw3ICsxMTMxLDggQEAgc3RhdGljIHN0cnVjdCBz c2hrZXkgKgorIHBrY3MxMV9mZXRjaF9yc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIg KnAsIENLX1VMT05HIHNsb3RpZHgsCisgICAgIENLX09CSkVDVF9IQU5ETEUgKm9iaikKKyB7Cist CUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzNdOworKwlDS19BVFRSSUJVVEUJCSBrZXlfYXR0cls0 XTsKKysJaW50CQkJIG5hdHRyID0gNDsKKyAJQ0tfU0VTU0lPTl9IQU5ETEUJIHNlc3Npb247Cisg CUNLX0ZVTkNUSU9OX0xJU1QJKmYgPSBOVUxMOworIAlDS19SVgkJCSBydjsKK0BAIC0xMDAwLDE0 ICsxMTQzLDE1IEBAIHBrY3MxMV9mZXRjaF9yc2FfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlk ZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCisgCW1lbXNldCgma2V5X2F0dHIsIDAsIHNpemVv ZihrZXlfYXR0cikpOworIAlrZXlfYXR0clswXS50eXBlID0gQ0tBX0lEOworLQlrZXlfYXR0clsx XS50eXBlID0gQ0tBX01PRFVMVVM7CistCWtleV9hdHRyWzJdLnR5cGUgPSBDS0FfUFVCTElDX0VY UE9ORU5UOworKwlrZXlfYXR0clsxXS50eXBlID0gQ0tBX0xBQkVMOworKwlrZXlfYXR0clsyXS50 eXBlID0gQ0tBX01PRFVMVVM7CisrCWtleV9hdHRyWzNdLnR5cGUgPSBDS0FfUFVCTElDX0VYUE9O RU5UOworIAorLQlzZXNzaW9uID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKKy0JZiA9 IHAtPmZ1bmN0aW9uX2xpc3Q7CisrCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3Rp ZHhdLnNlc3Npb247CisrCWYgPSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisgCisgCS8qIGZp Z3VyZSBvdXQgc2l6ZSBvZiB0aGUgYXR0cmlidXRlcyAqLworLQlydiA9IGYtPkNfR2V0QXR0cmli dXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIDMpOworKwlydiA9IGYtPkNfR2V0QXR0 cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwga2V5X2F0dHIsIG5hdHRyKTsKKyAJaWYgKHJ2ICE9 IENLUl9PSykgeworIAkJZXJyb3IoIkNfR2V0QXR0cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBy dik7CisgCQlyZXR1cm4gKE5VTEwpOworQEAgLTEwMTgsMTkgKzExNjIsMTkgQEAgcGtjczExX2Zl dGNoX3JzYV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlk eCwKKyAJICogZW5zdXJlIHRoYXQgbm9uZSBvZiB0aGUgb3RoZXJzIGFyZSB6ZXJvIGxlbmd0aC4K KyAJICogWFhYIGFzc3VtZXMgQ0tBX0lEIGlzIGFsd2F5cyBmaXJzdC4KKyAJICovCistCWlmIChr ZXlfYXR0clsxXS51bFZhbHVlTGVuID09IDAgfHwKKy0JICAgIGtleV9hdHRyWzJdLnVsVmFsdWVM ZW4gPT0gMCkgeworKwlpZiAoa2V5X2F0dHJbMl0udWxWYWx1ZUxlbiA9PSAwIHx8CisrCSAgICBr ZXlfYXR0clszXS51bFZhbHVlTGVuID09IDApIHsKKyAJCWVycm9yKCJpbnZhbGlkIGF0dHJpYnV0 ZSBsZW5ndGgiKTsKKyAJCXJldHVybiAoTlVMTCk7CisgCX0KKyAKKyAJLyogYWxsb2NhdGUgYnVm ZmVycyBmb3IgYXR0cmlidXRlcyAqLworLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorKwlmb3Ig KGkgPSAwOyBpIDwgbmF0dHI7IGkrKykKKyAJCWlmIChrZXlfYXR0cltpXS51bFZhbHVlTGVuID4g MCkKKyAJCQlrZXlfYXR0cltpXS5wVmFsdWUgPSB4Y2FsbG9jKDEsIGtleV9hdHRyW2ldLnVsVmFs dWVMZW4pOworIAorIAkvKiByZXRyaWV2ZSBJRCwgbW9kdWx1cyBhbmQgcHVibGljIGV4cG9uZW50 IG9mIFJTQSBrZXkgKi8KKy0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpv YmosIGtleV9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24s ICpvYmosIGtleV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1JfT0spIHsKKyAJCWVycm9y KCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOworIAkJZ290byBmYWlsOwor QEAgLTEwNDIsOCArMTE4Niw4IEBAIHBrY3MxMV9mZXRjaF9yc2FfcHVia2V5KHN0cnVjdCBwa2Nz MTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCQlnb3RvIGZhaWw7CisgCX0KKyAK Ky0JcnNhX24gPSBCTl9iaW4yYm4oa2V5X2F0dHJbMV0ucFZhbHVlLCBrZXlfYXR0clsxXS51bFZh bHVlTGVuLCBOVUxMKTsKKy0JcnNhX2UgPSBCTl9iaW4yYm4oa2V5X2F0dHJbMl0ucFZhbHVlLCBr ZXlfYXR0clsyXS51bFZhbHVlTGVuLCBOVUxMKTsKKysJcnNhX24gPSBCTl9iaW4yYm4oa2V5X2F0 dHJbMl0ucFZhbHVlLCBrZXlfYXR0clsyXS51bFZhbHVlTGVuLCBOVUxMKTsKKysJcnNhX2UgPSBC Tl9iaW4yYm4oa2V5X2F0dHJbM10ucFZhbHVlLCBrZXlfYXR0clszXS51bFZhbHVlTGVuLCBOVUxM KTsKKyAJaWYgKHJzYV9uID09IE5VTEwgfHwgcnNhX2UgPT0gTlVMTCkgeworIAkJZXJyb3IoIkJO X2JpbjJibiBmYWlsZWQiKTsKKyAJCWdvdG8gZmFpbDsKK0BAIC0xMDc1LDcgKzEyMTksNyBAQCBw a2NzMTFfZmV0Y2hfcnNhX3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9O RyBzbG90aWR4LAorIAkvKiBzdWNjZXNzICovCisgCXN1Y2Nlc3MgPSAwOworIGZhaWw6CistCWZv ciAoaSA9IDA7IGkgPCAzOyBpKyspCisrCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQorIAkJ ZnJlZShrZXlfYXR0cltpXS5wVmFsdWUpOworIAlSU0FfZnJlZShyc2EpOworIAlpZiAoc3VjY2Vz cyAhPSAwKSB7CitAQCAtMTA5MCw3ICsxMjM0LDggQEAgc3RhdGljIHN0cnVjdCBzc2hrZXkgKgor IHBrY3MxMV9mZXRjaF9lZDI1NTE5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBD S19VTE9ORyBzbG90aWR4LAorICAgICBDS19PQkpFQ1RfSEFORExFICpvYmopCisgeworLQlDS19B VFRSSUJVVEUJCSBrZXlfYXR0clszXTsKKysJQ0tfQVRUUklCVVRFCQkga2V5X2F0dHJbNF07Cisr CWludAkJCSBuYXR0ciA9IDQ7CisgCUNLX1NFU1NJT05fSEFORExFCSBzZXNzaW9uOworIAlDS19G VU5DVElPTl9MSVNUCSpmID0gTlVMTDsKKyAJQ0tfUlYJCQkgcnY7CitAQCAtMTExMCwxNCArMTI1 NSwxNSBAQCBwa2NzMTFfZmV0Y2hfZWQyNTUxOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRl ciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKKyAKKyAJbWVtc2V0KCZrZXlfYXR0ciwgMCwgc2l6ZW9m KGtleV9hdHRyKSk7CisgCWtleV9hdHRyWzBdLnR5cGUgPSBDS0FfSUQ7CistCWtleV9hdHRyWzFd LnR5cGUgPSBDS0FfRUNfUE9JTlQ7IC8qIFhYWCBvciBDS0FfVkFMVUUgPyAqLworLQlrZXlfYXR0 clsyXS50eXBlID0gQ0tBX0VDX1BBUkFNUzsKKysJa2V5X2F0dHJbMV0udHlwZSA9IENLQV9MQUJF TDsKKysJa2V5X2F0dHJbMl0udHlwZSA9IENLQV9FQ19QT0lOVDsgLyogWFhYIG9yIENLQV9WQUxV RSA/ICovCisrCWtleV9hdHRyWzNdLnR5cGUgPSBDS0FfRUNfUEFSQU1TOworIAorLQlzZXNzaW9u ID0gcC0+c2xvdGluZm9bc2xvdGlkeF0uc2Vzc2lvbjsKKy0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7 CisrCXNlc3Npb24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CisrCWYg PSBwLT5tb2R1bGUtPmZ1bmN0aW9uX2xpc3Q7CisgCisgCS8qIGZpZ3VyZSBvdXQgc2l6ZSBvZiB0 aGUgYXR0cmlidXRlcyAqLworLQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwg Km9iaiwga2V5X2F0dHIsIDMpOworKwlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lv biwgKm9iaiwga2V5X2F0dHIsIG5hdHRyKTsKKyAJaWYgKHJ2ICE9IENLUl9PSykgeworIAkJZXJy b3IoIkNfR2V0QXR0cmlidXRlVmFsdWUgZmFpbGVkOiAlbHUiLCBydik7CisgCQlyZXR1cm4gKE5V TEwpOworQEAgLTExMjgsMjggKzEyNzQsMjggQEAgcGtjczExX2ZldGNoX2VkMjU1MTlfcHVia2V5 KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCSAqIGVuc3Vy ZSB0aGF0IG5vbmUgb2YgdGhlIG90aGVycyBhcmUgemVybyBsZW5ndGguCisgCSAqIFhYWCBhc3N1 bWVzIENLQV9JRCBpcyBhbHdheXMgZmlyc3QuCisgCSAqLworLQlpZiAoa2V5X2F0dHJbMV0udWxW YWx1ZUxlbiA9PSAwIHx8CistCSAgICBrZXlfYXR0clsyXS51bFZhbHVlTGVuID09IDApIHsKKysJ aWYgKGtleV9hdHRyWzJdLnVsVmFsdWVMZW4gPT0gMCB8fAorKwkgICAga2V5X2F0dHJbM10udWxW YWx1ZUxlbiA9PSAwKSB7CisgCQllcnJvcigiaW52YWxpZCBhdHRyaWJ1dGUgbGVuZ3RoIik7Cisg CQlyZXR1cm4gKE5VTEwpOworIAl9CisgCisgCS8qIGFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGF0dHJp YnV0ZXMgKi8KKy0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworKwlmb3IgKGkgPSAwOyBpIDwg bmF0dHI7IGkrKykgeworIAkJaWYgKGtleV9hdHRyW2ldLnVsVmFsdWVMZW4gPiAwKQorIAkJCWtl eV9hdHRyW2ldLnBWYWx1ZSA9IHhjYWxsb2MoMSwga2V5X2F0dHJbaV0udWxWYWx1ZUxlbik7Cisg CX0KKyAKKyAJLyogcmV0cmlldmUgSUQsIHB1YmxpYyBwb2ludCBhbmQgY3VydmUgcGFyYW1ldGVy cyBvZiBFQyBrZXkgKi8KKy0JcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpv YmosIGtleV9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24s ICpvYmosIGtleV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1JfT0spIHsKKyAJCWVycm9y KCJDX0dldEF0dHJpYnV0ZVZhbHVlIGZhaWxlZDogJWx1IiwgcnYpOworIAkJZ290byBmYWlsOwor IAl9CisgCisgCS8qIEV4cGVjdCBvbmUgb2YgdGhlIHN1cHBvcnRlZCBpZGVudGlmaWVycyBpbiBD S0FfRUNfUEFSQU1TICovCistCWQgPSAodV9jaGFyICopa2V5X2F0dHJbMl0ucFZhbHVlOworLQls ZW4gPSBrZXlfYXR0clsyXS51bFZhbHVlTGVuOworKwlkID0gKHVfY2hhciAqKWtleV9hdHRyWzNd LnBWYWx1ZTsKKysJbGVuID0ga2V5X2F0dHJbM10udWxWYWx1ZUxlbjsKKyAJaWYgKChsZW4gIT0g c2l6ZW9mKGlkMSkgfHwgbWVtY21wKGQsIGlkMSwgc2l6ZW9mKGlkMSkpICE9IDApICYmCisgCSAg ICAobGVuICE9IHNpemVvZihpZDIpIHx8IG1lbWNtcChkLCBpZDIsIHNpemVvZihpZDIpKSAhPSAw KSkgeworIAkJaGV4ID0gdG9oZXgoZCwgbGVuKTsKK0BAIC0xMTYxLDE2ICsxMzA3LDE2IEBAIHBr Y3MxMV9mZXRjaF9lZDI1NTE5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19V TE9ORyBzbG90aWR4LAorIAkgKiBFeHBlY3QgZWl0aGVyIGEgcmF3IDMyIGJ5dGUgcHVia2V5IG9y IGFuIE9DVEVUIFNUUklORyB3aXRoCisgCSAqIGEgMzIgYnl0ZSBwdWJrZXkgaW4gQ0tBX1ZBTFVF CisgCSAqLworLQlkID0gKHVfY2hhciAqKWtleV9hdHRyWzFdLnBWYWx1ZTsKKy0JbGVuID0ga2V5 X2F0dHJbMV0udWxWYWx1ZUxlbjsKKysJZCA9ICh1X2NoYXIgKilrZXlfYXR0clsyXS5wVmFsdWU7 CisrCWxlbiA9IGtleV9hdHRyWzJdLnVsVmFsdWVMZW47CisgCWlmIChsZW4gPT0gRUQyNTUxOV9Q S19TWiArIDIgJiYgZFswXSA9PSAweDA0ICYmIGRbMV0gPT0gRUQyNTUxOV9QS19TWikgeworIAkJ ZCArPSAyOworIAkJbGVuIC09IDI7CisgCX0KKyAJaWYgKGxlbiAhPSBFRDI1NTE5X1BLX1NaKSB7 CistCQloZXggPSB0b2hleChrZXlfYXR0clsxXS5wVmFsdWUsIGtleV9hdHRyWzFdLnVsVmFsdWVM ZW4pOworKwkJaGV4ID0gdG9oZXgoa2V5X2F0dHJbMl0ucFZhbHVlLCBrZXlfYXR0clsyXS51bFZh bHVlTGVuKTsKKyAJCWxvZ2l0X2YoIkNLQV9FQ19QT0lOVCBpbnZhbGlkIG9jdGV0IHN0cjogJXMg KGxlbiAlbHUpIiwKKy0JCSAgICBoZXgsICh1X2xvbmcpa2V5X2F0dHJbMV0udWxWYWx1ZUxlbik7 CisrCQkgICAgaGV4LCAodV9sb25nKWtleV9hdHRyWzJdLnVsVmFsdWVMZW4pOworIAkJZ290byBm YWlsOworIAl9CisgCitAQCAtMTE5MCw3ICsxMzM2LDcgQEAgcGtjczExX2ZldGNoX2VkMjU1MTlf cHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisgCQlr ZXkgPSBOVUxMOworIAl9CisgCWZyZWUoaGV4KTsKKy0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykK KysJZm9yIChpID0gMDsgaSA8IG5hdHRyOyBpKyspCisgCQlmcmVlKGtleV9hdHRyW2ldLnBWYWx1 ZSk7CisgCXJldHVybiBrZXk7CisgfQorQEAgLTEyMDAsNyArMTM0Niw4IEBAIHN0YXRpYyBpbnQK KyBwa2NzMTFfZmV0Y2hfeDUwOV9wdWJrZXkoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tf VUxPTkcgc2xvdGlkeCwKKyAgICAgQ0tfT0JKRUNUX0hBTkRMRSAqb2JqLCBzdHJ1Y3Qgc3Noa2V5 ICoqa2V5cCwgY2hhciAqKmxhYmVscCkKKyB7CistCUNLX0FUVFJJQlVURQkJIGNlcnRfYXR0clsz XTsKKysJQ0tfQVRUUklCVVRFCQkgY2VydF9hdHRyWzRdOworKwlpbnQJCQkgbmF0dHIgPSA0Owor IAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKKyAJQ0tfRlVOQ1RJT05fTElTVAkqZiA9IE5V TEw7CisgCUNLX1JWCQkJIHJ2OworQEAgLTEyMjYsMTQgKzEzNzMsMTUgQEAgcGtjczExX2ZldGNo X3g1MDlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgs CisgCisgCW1lbXNldCgmY2VydF9hdHRyLCAwLCBzaXplb2YoY2VydF9hdHRyKSk7CisgCWNlcnRf YXR0clswXS50eXBlID0gQ0tBX0lEOworLQljZXJ0X2F0dHJbMV0udHlwZSA9IENLQV9TVUJKRUNU OworLQljZXJ0X2F0dHJbMl0udHlwZSA9IENLQV9WQUxVRTsKKysJY2VydF9hdHRyWzFdLnR5cGUg PSBDS0FfTEFCRUw7CisrCWNlcnRfYXR0clsyXS50eXBlID0gQ0tBX1NVQkpFQ1Q7CisrCWNlcnRf YXR0clszXS50eXBlID0gQ0tBX1ZBTFVFOworIAorLQlzZXNzaW9uID0gcC0+c2xvdGluZm9bc2xv dGlkeF0uc2Vzc2lvbjsKKy0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7CisrCXNlc3Npb24gPSBwLT5t b2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CisrCWYgPSBwLT5tb2R1bGUtPmZ1bmN0 aW9uX2xpc3Q7CisgCisgCS8qIGZpZ3VyZSBvdXQgc2l6ZSBvZiB0aGUgYXR0cmlidXRlcyAqLwor LQlydiA9IGYtPkNfR2V0QXR0cmlidXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwgY2VydF9hdHRyLCAz KTsKKysJcnYgPSBmLT5DX0dldEF0dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGNlcnRfYXR0 ciwgbmF0dHIpOworIAlpZiAocnYgIT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19HZXRBdHRyaWJ1 dGVWYWx1ZSBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCXJldHVybiAtMTsKK0BAIC0xMjQ1LDE4ICsx MzkzLDE5IEBAIHBrY3MxMV9mZXRjaF94NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVy ICpwLCBDS19VTE9ORyBzbG90aWR4LAorIAkgKiBYWFggYXNzdW1lcyBDS0FfSUQgaXMgYWx3YXlz IGZpcnN0LgorIAkgKi8KKyAJaWYgKGNlcnRfYXR0clsxXS51bFZhbHVlTGVuID09IDAgfHwKKy0J ICAgIGNlcnRfYXR0clsyXS51bFZhbHVlTGVuID09IDApIHsKKysJICAgIGNlcnRfYXR0clsyXS51 bFZhbHVlTGVuID09IDAgfHwKKysJICAgIGNlcnRfYXR0clszXS51bFZhbHVlTGVuID09IDApIHsK KyAJCWVycm9yKCJpbnZhbGlkIGF0dHJpYnV0ZSBsZW5ndGgiKTsKKyAJCXJldHVybiAtMTsKKyAJ fQorIAorIAkvKiBhbGxvY2F0ZSBidWZmZXJzIGZvciBhdHRyaWJ1dGVzICovCistCWZvciAoaSA9 IDA7IGkgPCAzOyBpKyspCisrCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQorIAkJaWYgKGNl cnRfYXR0cltpXS51bFZhbHVlTGVuID4gMCkKKyAJCQljZXJ0X2F0dHJbaV0ucFZhbHVlID0geGNh bGxvYygxLCBjZXJ0X2F0dHJbaV0udWxWYWx1ZUxlbik7CisgCisgCS8qIHJldHJpZXZlIElELCBz dWJqZWN0IGFuZCB2YWx1ZSBvZiBjZXJ0aWZpY2F0ZSAqLworLQlydiA9IGYtPkNfR2V0QXR0cmli dXRlVmFsdWUoc2Vzc2lvbiwgKm9iaiwgY2VydF9hdHRyLCAzKTsKKysJcnYgPSBmLT5DX0dldEF0 dHJpYnV0ZVZhbHVlKHNlc3Npb24sICpvYmosIGNlcnRfYXR0ciwgbmF0dHIpOworIAlpZiAocnYg IT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19HZXRBdHRyaWJ1dGVWYWx1ZSBmYWlsZWQ6ICVsdSIs IHJ2KTsKKyAJCWdvdG8gb3V0OworQEAgLTEyNzAsOCArMTQxOSw4IEBAIHBrY3MxMV9mZXRjaF94 NTA5X3B1YmtleShzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAor IAkJc3ViamVjdCA9IHhzdHJkdXAoImludmFsaWQgc3ViamVjdCIpOworIAlYNTA5X05BTUVfZnJl ZSh4NTA5X25hbWUpOworIAorLQljcCA9IGNlcnRfYXR0clsyXS5wVmFsdWU7CistCWlmICgoeDUw OSA9IGQyaV9YNTA5KE5VTEwsICZjcCwgY2VydF9hdHRyWzJdLnVsVmFsdWVMZW4pKSA9PSBOVUxM KSB7CisrCWNwID0gY2VydF9hdHRyWzNdLnBWYWx1ZTsKKysJaWYgKCh4NTA5ID0gZDJpX1g1MDko TlVMTCwgJmNwLCBjZXJ0X2F0dHJbM10udWxWYWx1ZUxlbikpID09IE5VTEwpIHsKKyAJCWVycm9y KCJkMmlfeDUwOSBmYWlsZWQiKTsKKyAJCWdvdG8gb3V0OworIAl9CitAQCAtMTM4MSw3ICsxNTMw LDcgQEAgcGtjczExX2ZldGNoX3g1MDlfcHVia2V5KHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAs IENLX1VMT05HIHNsb3RpZHgsCisgCQlnb3RvIG91dDsKKyAJfQorICBvdXQ6CistCWZvciAoaSA9 IDA7IGkgPCAzOyBpKyspCisrCWZvciAoaSA9IDA7IGkgPCBuYXR0cjsgaSsrKQorIAkJZnJlZShj ZXJ0X2F0dHJbaV0ucFZhbHVlKTsKKyAJWDUwOV9mcmVlKHg1MDkpOworIAlSU0FfZnJlZShyc2Ep OworQEAgLTE0MjQsMTEgKzE1NzMsMTIgQEAgbm90ZV9rZXkoc3RydWN0IHBrY3MxMV9wcm92aWRl ciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwgY29uc3QgY2hhciAqY29udGV4dCwKKyAgKi8KKyBzdGF0 aWMgaW50CisgcGtjczExX2ZldGNoX2NlcnRzKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENL X1VMT05HIHNsb3RpZHgsCistICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsIGNoYXIgKioqbGFi ZWxzcCwgaW50ICpua2V5cykKKysgICAgc3RydWN0IHNzaGtleSAqKiprZXlzcCwgY2hhciAqKips YWJlbHNwLCBpbnQgKm5rZXlzLCBzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKQorIHsKKyAJc3RydWN0 IHNzaGtleQkJKmtleSA9IE5VTEw7CisgCUNLX09CSkVDVF9DTEFTUwkJIGtleV9jbGFzczsKKy0J Q0tfQVRUUklCVVRFCQkga2V5X2F0dHJbMV07CisrCUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzNd OworKwlpbnQJCQkgbmF0dHIgPSAxOworIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKKyAJ Q0tfRlVOQ1RJT05fTElTVAkqZiA9IE5VTEw7CisgCUNLX1JWCQkJIHJ2OworQEAgLTE0NDUsMTAg KzE1OTUsMjMgQEAgcGtjczExX2ZldGNoX2NlcnRzKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAs IENLX1VMT05HIHNsb3RpZHgsCisgCWtleV9hdHRyWzBdLnBWYWx1ZSA9ICZrZXlfY2xhc3M7Cisg CWtleV9hdHRyWzBdLnVsVmFsdWVMZW4gPSBzaXplb2Yoa2V5X2NsYXNzKTsKKyAKKy0Jc2Vzc2lv biA9IHAtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CistCWYgPSBwLT5mdW5jdGlvbl9saXN0 OworKwlpZiAodXJpLT5pZCAhPSBOVUxMKSB7CisrCQlrZXlfYXR0cltuYXR0cl0udHlwZSA9IENL QV9JRDsKKysJCWtleV9hdHRyW25hdHRyXS5wVmFsdWUgPSB1cmktPmlkOworKwkJa2V5X2F0dHJb bmF0dHJdLnVsVmFsdWVMZW4gPSB1cmktPmlkX2xlbjsKKysJCW5hdHRyKys7CisrCX0KKysJaWYg KHVyaS0+b2JqZWN0ICE9IE5VTEwpIHsKKysJCWtleV9hdHRyW25hdHRyXS50eXBlID0gQ0tBX0xB QkVMOworKwkJa2V5X2F0dHJbbmF0dHJdLnBWYWx1ZSA9IHVyaS0+b2JqZWN0OworKwkJa2V5X2F0 dHJbbmF0dHJdLnVsVmFsdWVMZW4gPSBzdHJsZW4odXJpLT5vYmplY3QpOworKwkJbmF0dHIrKzsK KysJfQorKworKwlzZXNzaW9uID0gcC0+bW9kdWxlLT5zbG90aW5mb1tzbG90aWR4XS5zZXNzaW9u OworKwlmID0gcC0+bW9kdWxlLT5mdW5jdGlvbl9saXN0OworIAorLQlydiA9IGYtPkNfRmluZE9i amVjdHNJbml0KHNlc3Npb24sIGtleV9hdHRyLCAxKTsKKysJcnYgPSBmLT5DX0ZpbmRPYmplY3Rz SW5pdChzZXNzaW9uLCBrZXlfYXR0ciwgbmF0dHIpOworIAlpZiAocnYgIT0gQ0tSX09LKSB7Cisg CQllcnJvcigiQ19GaW5kT2JqZWN0c0luaXQgZmFpbGVkOiAlbHUiLCBydik7CisgCQlnb3RvIGZh aWw7CitAQCAtMTUyMSw2ICsxNjg0LDEzIEBAIGZhaWw6CisgCisgCXJldHVybiAocmV0KTsKKyB9 CisrI2Vsc2UKKytzdGF0aWMgaW50CisrcGtjczExX2ZldGNoX2NlcnRzKHN0cnVjdCBwa2NzMTFf cHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgsCisrICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5 c3AsIGNoYXIgKioqbGFiZWxzcCwgaW50ICpua2V5cywgc3RydWN0IHBrY3MxMV91cmkgKnVyaSkK Kyt7CisrCXJldHVybiAwOworK30KKyAjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisgCisgLyoK K0BAIC0xNTMwLDExICsxNzAwLDEyIEBAIGZhaWw6CisgICovCisgc3RhdGljIGludAorIHBrY3Mx MV9mZXRjaF9rZXlzKHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKnAsIENLX1VMT05HIHNsb3RpZHgs CistICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5c3AsIGNoYXIgKioqbGFiZWxzcCwgaW50ICpua2V5 cykKKysgICAgc3RydWN0IHNzaGtleSAqKiprZXlzcCwgY2hhciAqKipsYWJlbHNwLCBpbnQgKm5r ZXlzLCBzdHJ1Y3QgcGtjczExX3VyaSAqdXJpKQorIHsKKyAJc3RydWN0IHNzaGtleQkJKmtleSA9 IE5VTEw7CisgCUNLX09CSkVDVF9DTEFTUwkJIGtleV9jbGFzczsKKy0JQ0tfQVRUUklCVVRFCQkg a2V5X2F0dHJbMl07CisrCUNLX0FUVFJJQlVURQkJIGtleV9hdHRyWzNdOworKwlpbnQJCQkgbmF0 dHIgPSAxOworIAlDS19TRVNTSU9OX0hBTkRMRQkgc2Vzc2lvbjsKKyAJQ0tfRlVOQ1RJT05fTElT VAkqZiA9IE5VTEw7CisgCUNLX1JWCQkJIHJ2OworQEAgLTE1NTAsMTAgKzE3MjEsMjMgQEAgcGtj czExX2ZldGNoX2tleXMoc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlk eCwKKyAJa2V5X2F0dHJbMF0ucFZhbHVlID0gJmtleV9jbGFzczsKKyAJa2V5X2F0dHJbMF0udWxW YWx1ZUxlbiA9IHNpemVvZihrZXlfY2xhc3MpOworIAorLQlzZXNzaW9uID0gcC0+c2xvdGluZm9b c2xvdGlkeF0uc2Vzc2lvbjsKKy0JZiA9IHAtPmZ1bmN0aW9uX2xpc3Q7CisrCWlmICh1cmktPmlk ICE9IE5VTEwpIHsKKysJCWtleV9hdHRyW25hdHRyXS50eXBlID0gQ0tBX0lEOworKwkJa2V5X2F0 dHJbbmF0dHJdLnBWYWx1ZSA9IHVyaS0+aWQ7CisrCQlrZXlfYXR0cltuYXR0cl0udWxWYWx1ZUxl biA9IHVyaS0+aWRfbGVuOworKwkJbmF0dHIrKzsKKysJfQorKwlpZiAodXJpLT5vYmplY3QgIT0g TlVMTCkgeworKwkJa2V5X2F0dHJbbmF0dHJdLnR5cGUgPSBDS0FfTEFCRUw7CisrCQlrZXlfYXR0 cltuYXR0cl0ucFZhbHVlID0gdXJpLT5vYmplY3Q7CisrCQlrZXlfYXR0cltuYXR0cl0udWxWYWx1 ZUxlbiA9IHN0cmxlbih1cmktPm9iamVjdCk7CisrCQluYXR0cisrOworKwl9CisrCisrCXNlc3Np b24gPSBwLT5tb2R1bGUtPnNsb3RpbmZvW3Nsb3RpZHhdLnNlc3Npb247CisrCWYgPSBwLT5tb2R1 bGUtPmZ1bmN0aW9uX2xpc3Q7CisgCistCXJ2ID0gZi0+Q19GaW5kT2JqZWN0c0luaXQoc2Vzc2lv biwga2V5X2F0dHIsIDEpOworKwlydiA9IGYtPkNfRmluZE9iamVjdHNJbml0KHNlc3Npb24sIGtl eV9hdHRyLCBuYXR0cik7CisgCWlmIChydiAhPSBDS1JfT0spIHsKKyAJCWVycm9yKCJDX0ZpbmRP YmplY3RzSW5pdCBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCWdvdG8gZmFpbDsKK0BAIC0xODQxLDE2 ICsyMDI1LDEwIEBAIHBrY3MxMV9lY2RzYV9nZW5lcmF0ZV9wcml2YXRlX2tleShzdHJ1Y3QgcGtj czExX3Byb3ZpZGVyICpwLCBDS19VTE9ORyBzbG90aWR4LAorIH0KKyAjZW5kaWYgLyogV0lUSF9Q S0NTMTFfS0VZR0VOICovCisgCistLyoKKy0gKiByZWdpc3RlciBhIG5ldyBwcm92aWRlciwgZmFp bHMgaWYgcHJvdmlkZXIgYWxyZWFkeSBleGlzdHMuIGlmCistICoga2V5cCBpcyBwcm92aWRlZCwg ZmV0Y2gga2V5cy4KKy0gKi8KKyBzdGF0aWMgaW50CistcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVy KGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sCistICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5 cCwgY2hhciAqKipsYWJlbHNwLAorLSAgICBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoqcHJvdmlk ZXJwLCBDS19VTE9ORyB1c2VyKQorK3BrY3MxMV9pbml0aWFsaXplX3Byb3ZpZGVyKHN0cnVjdCBw a2NzMTFfdXJpICp1cmksIHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKipwcm92aWRlcnApCisgewor LQlpbnQgbmtleXMsIG5lZWRfZmluYWxpemUgPSAwOworKwlpbnQgbmVlZF9maW5hbGl6ZSA9IDA7 CisgCWludCByZXQgPSAtMTsKKyAJc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCA9IE5VTEw7Cisg CXZvaWQgKmhhbmRsZSA9IE5VTEw7CitAQCAtMTg1OSwxMjggKzIwMzcsMTI2IEBAIHBrY3MxMV9y ZWdpc3Rlcl9wcm92aWRlcihjaGFyICpwcm92aWRlcl9pZCwgY2hhciAqcGluLAorIAlDS19GVU5D VElPTl9MSVNUICpmID0gTlVMTDsKKyAJQ0tfVE9LRU5fSU5GTyAqdG9rZW47CisgCUNLX1VMT05H IGk7CisrCWNoYXIgKnByb3ZpZGVyX21vZHVsZSA9IE5VTEw7CisrCXN0cnVjdCBwa2NzMTFfbW9k dWxlICptID0gTlVMTDsKKysKKysJLyogaWYgbm8gcHJvdmlkZXIgc3BlY2lmaWVkLCBmYWxsYmFj ayB0byBwMTEta2l0ICovCisrCWlmICh1cmktPm1vZHVsZV9wYXRoID09IE5VTEwpIHsKKysjaWZk ZWYgUEtDUzExX0RFRkFVTFRfUFJPVklERVIKKysJCXByb3ZpZGVyX21vZHVsZSA9IHN0cmR1cChQ S0NTMTFfREVGQVVMVF9QUk9WSURFUik7CisrI2Vsc2UKKysJCWVycm9yX2YoIk5vIG1vZHVsZSBw YXRoIHByb3ZpZGVkIik7CisrIAkJZ290byBmYWlsOworKyNlbmRpZgorKwl9IGVsc2UgeworKwkJ cHJvdmlkZXJfbW9kdWxlID0gc3RyZHVwKHVyaS0+bW9kdWxlX3BhdGgpOworKwl9CisrCXAgPSB4 Y2FsbG9jKDEsIHNpemVvZigqcCkpOworKwlwLT5uYW1lID0gcGtjczExX3VyaV9nZXQodXJpKTsK KyAKKy0JaWYgKHByb3ZpZGVycCA9PSBOVUxMKQorLQkJZ290byBmYWlsOworLQkqcHJvdmlkZXJw ID0gTlVMTDsKKy0KKy0JaWYgKGtleXAgIT0gTlVMTCkKKy0JCSprZXlwID0gTlVMTDsKKy0JaWYg KGxhYmVsc3AgIT0gTlVMTCkKKy0JCSpsYWJlbHNwID0gTlVMTDsKKy0KKy0JaWYgKHBrY3MxMV9w cm92aWRlcl9sb29rdXAocHJvdmlkZXJfaWQpICE9IE5VTEwpIHsKKy0JCWRlYnVnX2YoInByb3Zp ZGVyIGFscmVhZHkgcmVnaXN0ZXJlZDogJXMiLCBwcm92aWRlcl9pZCk7CisrCWlmIChsaWJfY29u dGFpbnNfc3ltYm9sKHByb3ZpZGVyX21vZHVsZSwgIkNfR2V0RnVuY3Rpb25MaXN0IikgIT0gMCkg eworKwkJZXJyb3IoInByb3ZpZGVyICVzIGlzIG5vdCBhIFBLQ1MxMSBsaWJyYXJ5IiwgcHJvdmlk ZXJfbW9kdWxlKTsKKyAJCWdvdG8gZmFpbDsKKyAJfQorLQlpZiAobGliX2NvbnRhaW5zX3N5bWJv bChwcm92aWRlcl9pZCwgIkNfR2V0RnVuY3Rpb25MaXN0IikgIT0gMCkgeworLQkJZXJyb3IoInBy b3ZpZGVyICVzIGlzIG5vdCBhIFBLQ1MxMSBsaWJyYXJ5IiwgcHJvdmlkZXJfaWQpOworLQkJZ290 byBmYWlsOworKwlpZiAoKG0gPSBwa2NzMTFfcHJvdmlkZXJfbG9va3VwX21vZHVsZShwcm92aWRl cl9tb2R1bGUpKSAhPSBOVUxMCisrCSAgICYmIG0tPnZhbGlkKSB7CisrCQlkZWJ1Z19mKCJwcm92 aWRlciBtb2R1bGUgYWxyZWFkeSBpbml0aWFsaXplZDogJXMiLCBwcm92aWRlcl9tb2R1bGUpOwor KwkJZnJlZShwcm92aWRlcl9tb2R1bGUpOworKwkJLyogU2tpcCB0aGUgaW5pdGlhbGl6YXRpb24g b2YgUEtDUyMxMSBtb2R1bGUgKi8KKysJCW0tPnJlZmNvdW50Kys7CisrCQlwLT5tb2R1bGUgPSBt OworKwkJcC0+dmFsaWQgPSAxOworKwkJVEFJTFFfSU5TRVJUX1RBSUwoJnBrY3MxMV9wcm92aWRl cnMsIHAsIG5leHQpOworKwkJcC0+cmVmY291bnQrKzsJLyogYWRkIHRvIHByb3ZpZGVyIGxpc3Qg Ki8KKysJCSpwcm92aWRlcnAgPSBwOworKwkJcmV0dXJuIDA7CisrCX0gZWxzZSB7CisrCQltID0g eGNhbGxvYygxLCBzaXplb2YoKm0pKTsKKysJCXAtPm1vZHVsZSA9IG07CisrCQltLT5yZWZjb3Vu dCsrOworIAl9CisrCisgCS8qIG9wZW4gc2hhcmVkIHBrY3MxMS1saWJyYXJ5ICovCistCWlmICgo aGFuZGxlID0gZGxvcGVuKHByb3ZpZGVyX2lkLCBSVExEX05PVykpID09IE5VTEwpIHsKKy0JCWVy cm9yKCJkbG9wZW4gJXMgZmFpbGVkOiAlcyIsIHByb3ZpZGVyX2lkLCBkbGVycm9yKCkpOworKwlp ZiAoKGhhbmRsZSA9IGRsb3Blbihwcm92aWRlcl9tb2R1bGUsIFJUTERfTk9XKSkgPT0gTlVMTCkg eworKwkJZXJyb3IoImRsb3BlbiAlcyBmYWlsZWQ6ICVzIiwgcHJvdmlkZXJfbW9kdWxlLCBkbGVy cm9yKCkpOworIAkJZ290byBmYWlsOworIAl9CisgCWlmICgoZ2V0ZnVuY3Rpb25saXN0ID0gZGxz eW0oaGFuZGxlLCAiQ19HZXRGdW5jdGlvbkxpc3QiKSkgPT0gTlVMTCkKKyAJCWZhdGFsKCJkbHN5 bShDX0dldEZ1bmN0aW9uTGlzdCkgZmFpbGVkOiAlcyIsIGRsZXJyb3IoKSk7CistCXAgPSB4Y2Fs bG9jKDEsIHNpemVvZigqcCkpOworLQlwLT5uYW1lID0geHN0cmR1cChwcm92aWRlcl9pZCk7Cist CXAtPmhhbmRsZSA9IGhhbmRsZTsKKy0JLyogc2V0IHVwIHRoZSBwa2NzMTEgY2FsbGJhY2tzICov CisrCXAtPm1vZHVsZS0+aGFuZGxlID0gaGFuZGxlOworKwkvKiBzZXR1cCB0aGUgcGtjczExIGNh bGxiYWNrcyAqLworIAlpZiAoKHJ2ID0gKCpnZXRmdW5jdGlvbmxpc3QpKCZmKSkgIT0gQ0tSX09L KSB7CisgCQllcnJvcigiQ19HZXRGdW5jdGlvbkxpc3QgZm9yIHByb3ZpZGVyICVzIGZhaWxlZDog JWx1IiwKKy0JCSAgICBwcm92aWRlcl9pZCwgcnYpOworKwkJICAgIHByb3ZpZGVyX21vZHVsZSwg cnYpOworIAkJZ290byBmYWlsOworIAl9CistCXAtPmZ1bmN0aW9uX2xpc3QgPSBmOworKwltLT5m dW5jdGlvbl9saXN0ID0gZjsKKyAJaWYgKChydiA9IGYtPkNfSW5pdGlhbGl6ZShOVUxMKSkgIT0g Q0tSX09LKSB7CisgCQllcnJvcigiQ19Jbml0aWFsaXplIGZvciBwcm92aWRlciAlcyBmYWlsZWQ6 ICVsdSIsCistCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKKysJCSAgICBwcm92aWRlcl9tb2R1bGUs IHJ2KTsKKyAJCWdvdG8gZmFpbDsKKyAJfQorIAluZWVkX2ZpbmFsaXplID0gMTsKKy0JaWYgKChy diA9IGYtPkNfR2V0SW5mbygmcC0+aW5mbykpICE9IENLUl9PSykgeworKwlpZiAoKHJ2ID0gZi0+ Q19HZXRJbmZvKCZtLT5pbmZvKSkgIT0gQ0tSX09LKSB7CisgCQllcnJvcigiQ19HZXRJbmZvIGZv ciBwcm92aWRlciAlcyBmYWlsZWQ6ICVsdSIsCistCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKKysJ CSAgICBwcm92aWRlcl9tb2R1bGUsIHJ2KTsKKyAJCWdvdG8gZmFpbDsKKyAJfQorLQlkZWJ1Zygi cHJvdmlkZXIgJXM6IG1hbnVmYWN0dXJlcklEIDwlLipzPiBjcnlwdG9raVZlcnNpb24gJWQuJWQi CistCSAgICAiIGxpYnJhcnlEZXNjcmlwdGlvbiA8JS4qcz4gbGlicmFyeVZlcnNpb24gJWQuJWQi LAorLQkgICAgcHJvdmlkZXJfaWQsCistCSAgICBSTVNQQUNFKHAtPmluZm8ubWFudWZhY3R1cmVy SUQpLAorLQkgICAgcC0+aW5mby5jcnlwdG9raVZlcnNpb24ubWFqb3IsCistCSAgICBwLT5pbmZv LmNyeXB0b2tpVmVyc2lvbi5taW5vciwKKy0JICAgIFJNU1BBQ0UocC0+aW5mby5saWJyYXJ5RGVz Y3JpcHRpb24pLAorLQkgICAgcC0+aW5mby5saWJyYXJ5VmVyc2lvbi5tYWpvciwKKy0JICAgIHAt PmluZm8ubGlicmFyeVZlcnNpb24ubWlub3IpOworLQlpZiAoKHJ2ID0gZi0+Q19HZXRTbG90TGlz dChDS19UUlVFLCBOVUxMLCAmcC0+bnNsb3RzKSkgIT0gQ0tSX09LKSB7CisrCXJtc3BhY2UobS0+ aW5mby5tYW51ZmFjdHVyZXJJRCwgc2l6ZW9mKG0tPmluZm8ubWFudWZhY3R1cmVySUQpKTsKKysJ aWYgKHVyaS0+bGliX21hbnVmICE9IE5VTEwgJiYKKysJICAgIHN0cm5jbXAodXJpLT5saWJfbWFu dWYsIG0tPmluZm8ubWFudWZhY3R1cmVySUQsIDMyKSkgeworKwkJZGVidWdfZigiU2tpcHBpbmcg cHJvdmlkZXIgJXMgbm90IG1hdGNoaW5nIGxpYnJhcnlfbWFudWZhY3R1cmVyIiwKKysJCSAgICBt LT5pbmZvLm1hbnVmYWN0dXJlcklEKTsKKysgCQlnb3RvIGZhaWw7CisrIAl9CisrCXJtc3BhY2Uo bS0+aW5mby5saWJyYXJ5RGVzY3JpcHRpb24sIHNpemVvZihtLT5pbmZvLmxpYnJhcnlEZXNjcmlw dGlvbikpOworKwlkZWJ1ZygicHJvdmlkZXIgJXM6IG1hbnVmYWN0dXJlcklEIDwlLjMycz4gY3J5 cHRva2lWZXJzaW9uICVkLiVkIgorKwkgICAgIiBsaWJyYXJ5RGVzY3JpcHRpb24gPCUuMzJzPiBs aWJyYXJ5VmVyc2lvbiAlZC4lZCIsCisrCSAgICBwcm92aWRlcl9tb2R1bGUsCisrCSAgICBtLT5p bmZvLm1hbnVmYWN0dXJlcklELAorKwkgICAgbS0+aW5mby5jcnlwdG9raVZlcnNpb24ubWFqb3Is CisrCSAgICBtLT5pbmZvLmNyeXB0b2tpVmVyc2lvbi5taW5vciwKKysJICAgIG0tPmluZm8ubGli cmFyeURlc2NyaXB0aW9uLAorKwkgICAgbS0+aW5mby5saWJyYXJ5VmVyc2lvbi5tYWpvciwKKysJ ICAgIG0tPmluZm8ubGlicmFyeVZlcnNpb24ubWlub3IpOworKworKwlpZiAoKHJ2ID0gZi0+Q19H ZXRTbG90TGlzdChDS19UUlVFLCBOVUxMLCAmbS0+bnNsb3RzKSkgIT0gQ0tSX09LKSB7CisgCQll cnJvcigiQ19HZXRTbG90TGlzdCBmYWlsZWQ6ICVsdSIsIHJ2KTsKKyAJCWdvdG8gZmFpbDsKKyAJ fQorLQlpZiAocC0+bnNsb3RzID09IDApIHsKKy0JCWRlYnVnX2YoInByb3ZpZGVyICVzIHJldHVy bmVkIG5vIHNsb3RzIiwgcHJvdmlkZXJfaWQpOworKwlpZiAobS0+bnNsb3RzID09IDApIHsKKysJ CWRlYnVnX2YoInByb3ZpZGVyICVzIHJldHVybmVkIG5vIHNsb3RzIiwgcHJvdmlkZXJfbW9kdWxl KTsKKyAJCXJldCA9IC1TU0hfUEtDUzExX0VSUl9OT19TTE9UUzsKKyAJCWdvdG8gZmFpbDsKKyAJ fQorLQlwLT5zbG90bGlzdCA9IHhjYWxsb2MocC0+bnNsb3RzLCBzaXplb2YoQ0tfU0xPVF9JRCkp OworLQlpZiAoKHJ2ID0gZi0+Q19HZXRTbG90TGlzdChDS19UUlVFLCBwLT5zbG90bGlzdCwgJnAt Pm5zbG90cykpCisrCW0tPnNsb3RsaXN0ID0geGNhbGxvYyhtLT5uc2xvdHMsIHNpemVvZihDS19T TE9UX0lEKSk7CisrCWlmICgocnYgPSBmLT5DX0dldFNsb3RMaXN0KENLX1RSVUUsIG0tPnNsb3Rs aXN0LCAmbS0+bnNsb3RzKSkKKyAJICAgICE9IENLUl9PSykgeworIAkJZXJyb3IoIkNfR2V0U2xv dExpc3QgZm9yIHByb3ZpZGVyICVzIGZhaWxlZDogJWx1IiwKKy0JCSAgICBwcm92aWRlcl9pZCwg cnYpOworKwkJICAgIHByb3ZpZGVyX21vZHVsZSwgcnYpOworIAkJZ290byBmYWlsOworIAl9Cist CXAtPnNsb3RpbmZvID0geGNhbGxvYyhwLT5uc2xvdHMsIHNpemVvZihzdHJ1Y3QgcGtjczExX3Ns b3RpbmZvKSk7CisrCW0tPnNsb3RpbmZvID0geGNhbGxvYyhtLT5uc2xvdHMsIHNpemVvZihzdHJ1 Y3QgcGtjczExX3Nsb3RpbmZvKSk7CisgCXAtPnZhbGlkID0gMTsKKy0JbmtleXMgPSAwOworLQlm b3IgKGkgPSAwOyBpIDwgcC0+bnNsb3RzOyBpKyspIHsKKy0JCXRva2VuID0gJnAtPnNsb3RpbmZv W2ldLnRva2VuOworLQkJaWYgKChydiA9IGYtPkNfR2V0VG9rZW5JbmZvKHAtPnNsb3RsaXN0W2ld LCB0b2tlbikpCisrCW0tPnZhbGlkID0gMTsKKysJZm9yIChpID0gMDsgaSA8IG0tPm5zbG90czsg aSsrKSB7CisrCQl0b2tlbiA9ICZtLT5zbG90aW5mb1tpXS50b2tlbjsKKysJCWlmICgocnYgPSBm LT5DX0dldFRva2VuSW5mbyhtLT5zbG90bGlzdFtpXSwgdG9rZW4pKQorIAkJICAgICE9IENLUl9P SykgeworIAkJCWVycm9yKCJDX0dldFRva2VuSW5mbyBmb3IgcHJvdmlkZXIgJXMgc2xvdCAlbHUg IgorLQkJCSAgICAiZmFpbGVkOiAlbHUiLCBwcm92aWRlcl9pZCwgKHVfbG9uZylpLCBydik7Cist CQkJY29udGludWU7CistCQl9CistCQlpZiAoKHRva2VuLT5mbGFncyAmIENLRl9UT0tFTl9JTklU SUFMSVpFRCkgPT0gMCkgeworLQkJCWRlYnVnMl9mKCJpZ25vcmluZyB1bmluaXRpYWxpc2VkIHRv a2VuIGluICIKKy0JCQkgICAgInByb3ZpZGVyICVzIHNsb3QgJWx1IiwgcHJvdmlkZXJfaWQsICh1 X2xvbmcpaSk7CisrCQkJICAgICJmYWlsZWQ6ICVsdSIsIHByb3ZpZGVyX21vZHVsZSwgKHVfbG9u ZylpLCBydik7CisgCQkJY29udGludWU7CisgCQl9CisgCQlkZWJ1ZygicHJvdmlkZXIgJXMgc2xv dCAlbHU6IGxhYmVsIDwlLipzPiAiCisgCQkgICAgIm1hbnVmYWN0dXJlcklEIDwlLipzPiBtb2Rl bCA8JS4qcz4gc2VyaWFsIDwlLipzPiAiCisgCQkgICAgImZsYWdzIDB4JWx4IiwKKy0JCSAgICBw cm92aWRlcl9pZCwgKHVuc2lnbmVkIGxvbmcpaSwKKysJCSAgICBwcm92aWRlcl9tb2R1bGUsICh1 bnNpZ25lZCBsb25nKWksCisgCQkgICAgUk1TUEFDRSh0b2tlbi0+bGFiZWwpLCBSTVNQQUNFKHRv a2VuLT5tYW51ZmFjdHVyZXJJRCksCisgCQkgICAgUk1TUEFDRSh0b2tlbi0+bW9kZWwpLCBSTVNQ QUNFKHRva2VuLT5zZXJpYWxOdW1iZXIpLAorIAkJICAgIHRva2VuLT5mbGFncyk7CistCQkvKgor LQkJICogb3BlbiBzZXNzaW9uLCBsb2dpbiB3aXRoIHBpbiBhbmQgcmV0cmlldmUgcHVibGljCist CQkgKiBrZXlzIChpZiBrZXlwIGlzIHByb3ZpZGVkKQorLQkJICovCistCQlpZiAoKHJldCA9IHBr Y3MxMV9vcGVuX3Nlc3Npb24ocCwgaSwgcGluLCB1c2VyKSkgIT0gMCB8fAorLQkJICAgIGtleXAg PT0gTlVMTCkKKy0JCQljb250aW51ZTsKKy0JCXBrY3MxMV9mZXRjaF9rZXlzKHAsIGksIGtleXAs IGxhYmVsc3AsICZua2V5cyk7CistI2lmZGVmIFdJVEhfT1BFTlNTTAorLQkJcGtjczExX2ZldGNo X2NlcnRzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cyk7CistI2VuZGlmCistCQlpZiAobmtl eXMgPT0gMCAmJiAhcC0+c2xvdGluZm9baV0ubG9nZ2VkX2luICYmCistCQkgICAgcGtjczExX2lu dGVyYWN0aXZlKSB7CistCQkJLyoKKy0JCQkgKiBTb21lIHRva2VucyByZXF1aXJlIGxvZ2luIGJl Zm9yZSB0aGV5IHdpbGwKKy0JCQkgKiBleHBvc2Uga2V5cy4KKy0JCQkgKi8KKy0JCQlpZiAocGtj czExX2xvZ2luX3Nsb3QocCwgJnAtPnNsb3RpbmZvW2ldLAorLQkJCSAgICBDS1VfVVNFUikgPCAw KSB7CistCQkJCWVycm9yKCJsb2dpbiBmYWlsZWQiKTsKKy0JCQkJY29udGludWU7CistCQkJfQor LQkJCXBrY3MxMV9mZXRjaF9rZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cyk7CistI2lm ZGVmIFdJVEhfT1BFTlNTTAorLQkJCXBrY3MxMV9mZXRjaF9jZXJ0cyhwLCBpLCBrZXlwLCBsYWJl bHNwLCAmbmtleXMpOworLSNlbmRpZgorLQkJfQorIAl9CisrCW0tPm1vZHVsZV9wYXRoID0gcHJv dmlkZXJfbW9kdWxlOworKwlwcm92aWRlcl9tb2R1bGUgPSBOVUxMOworIAorIAkvKiBub3cgb3du ZWQgYnkgY2FsbGVyICovCisgCSpwcm92aWRlcnAgPSBwOworQEAgLTE5ODgsMjEgKzIxNjQsMjIg QEAgcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4s CisgCVRBSUxRX0lOU0VSVF9UQUlMKCZwa2NzMTFfcHJvdmlkZXJzLCBwLCBuZXh0KTsKKyAJcC0+ cmVmY291bnQrKzsJLyogYWRkIHRvIHByb3ZpZGVyIGxpc3QgKi8KKyAKKy0JcmV0dXJuIChua2V5 cyk7CisrCXJldHVybiAwOworIGZhaWw6CisgCWlmIChuZWVkX2ZpbmFsaXplICYmIChydiA9IGYt PkNfRmluYWxpemUoTlVMTCkpICE9IENLUl9PSykKKyAJCWVycm9yKCJDX0ZpbmFsaXplIGZvciBw cm92aWRlciAlcyBmYWlsZWQ6ICVsdSIsCistCQkgICAgcHJvdmlkZXJfaWQsIHJ2KTsKKysJCSAg ICBwcm92aWRlcl9tb2R1bGUsIHJ2KTsKKysJZnJlZShwcm92aWRlcl9tb2R1bGUpOworKwlpZiAo bSkgeworKwkJZnJlZShtLT5zbG90bGlzdCk7CisrCQlmcmVlKG0pOworKwl9CisgCWlmIChwKSB7 CisgCQlmcmVlKHAtPm5hbWUpOworLQkJZnJlZShwLT5zbG90bGlzdCk7CistCQlmcmVlKHAtPnNs b3RpbmZvKTsKKyAJCWZyZWUocCk7CisgCX0KKyAJaWYgKGhhbmRsZSkKKyAJCWRsY2xvc2UoaGFu ZGxlKTsKKy0JaWYgKHJldCA+IDApCistCQlyZXQgPSAtMTsKKyAJcmV0dXJuIChyZXQpOworIH0K KyAKK0BAIC0yMDM4LDE4ICsyMjE1LDE2MyBAQCBwa2NzMTFfdGVybWluYXRlKHZvaWQpCisgfQor IAorIC8qCistICogcmVnaXN0ZXIgYSBuZXcgcHJvdmlkZXIgYW5kIGdldCBudW1iZXIgb2Yga2V5 cyBob2xkIGJ5IHRoZSB0b2tlbiwKKy0gKiBmYWlscyBpZiBwcm92aWRlciBhbHJlYWR5IGV4aXN0 cworKyAqIHJlZ2lzdGVyIGEgbmV3IHByb3ZpZGVyLCBmYWlscyBpZiBwcm92aWRlciBhbHJlYWR5 IGV4aXN0cy4gaWYKKysgKiBrZXlwIGlzIHByb3ZpZGVkLCBmZXRjaCBrZXlzLgorICAqLworK3N0 YXRpYyBpbnQKKytwa2NzMTFfcmVnaXN0ZXJfcHJvdmlkZXJfYnlfdXJpKHN0cnVjdCBwa2NzMTFf dXJpICp1cmksIGNoYXIgKnBpbiwKKysgICAgc3RydWN0IHNzaGtleSAqKiprZXlwLCBjaGFyICoq KmxhYmVsc3AsIHN0cnVjdCBwa2NzMTFfcHJvdmlkZXIgKipwcm92aWRlcnAsCisrICAgIENLX1VM T05HIHVzZXIpCisreworKwlpbnQgbmtleXM7CisrCWludCByZXQgPSAtMTsKKysJc3RydWN0IHBr Y3MxMV9wcm92aWRlciAqcCA9IE5VTEw7CisrCUNLX1VMT05HIGk7CisrCUNLX1RPS0VOX0lORk8g KnRva2VuOworKwljaGFyICpwcm92aWRlcl91cmkgPSBOVUxMOworKworKwlpZiAocHJvdmlkZXJw ID09IE5VTEwpCisrCQlnb3RvIGZhaWw7CisrCSpwcm92aWRlcnAgPSBOVUxMOworKworKwlpZiAo a2V5cCAhPSBOVUxMKQorKwkJKmtleXAgPSBOVUxMOworKworKwlpZiAoKHJldCA9IHBrY3MxMV9p bml0aWFsaXplX3Byb3ZpZGVyKHVyaSwgJnApKSAhPSAwKSB7CisrCQlnb3RvIGZhaWw7CisrCX0K KysKKysJcHJvdmlkZXJfdXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsKKysJaWYgKHBpbiA9PSBO VUxMICYmIHVyaS0+cGluICE9IE5VTEwpIHsKKysJCXBpbiA9IHVyaS0+cGluOworKwl9CisrCW5r ZXlzID0gMDsKKysJZm9yIChpID0gMDsgaSA8IHAtPm1vZHVsZS0+bnNsb3RzOyBpKyspIHsKKysJ CXRva2VuID0gJnAtPm1vZHVsZS0+c2xvdGluZm9baV0udG9rZW47CisrCQlpZiAoKHRva2VuLT5m bGFncyAmIENLRl9UT0tFTl9JTklUSUFMSVpFRCkgPT0gMCkgeworKwkJCWRlYnVnMl9mKCJpZ25v cmluZyB1bmluaXRpYWxpc2VkIHRva2VuIGluICIKKysJCQkgICAgInByb3ZpZGVyICVzIHNsb3Qg JWx1IiwgcHJvdmlkZXJfdXJpLCAodV9sb25nKWkpOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJ aWYgKHVyaS0+dG9rZW4gIT0gTlVMTCAmJgorKwkJICAgIHN0cm5jbXAodG9rZW4tPmxhYmVsLCB1 cmktPnRva2VuLCAzMikgIT0gMCkgeworKwkJCWRlYnVnMl9mKCJpZ25vcmluZyB0b2tlbiBub3Qg bWF0Y2hpbmcgbGFiZWwgKCUuMzJzKSAiCisrCQkJICAgICJzcGVjaWZpZWQgYnkgUEtDUyMxMSBV UkkgaW4gc2xvdCAlbHUiLAorKwkJCSAgICB0b2tlbi0+bGFiZWwsICh1bnNpZ25lZCBsb25nKWkp OworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKHVyaS0+bWFudWYgIT0gTlVMTCAmJgorKwkJ ICAgIHN0cm5jbXAodG9rZW4tPm1hbnVmYWN0dXJlcklELCB1cmktPm1hbnVmLCAzMikgIT0gMCkg eworKwkJCWRlYnVnMl9mKCJpZ25vcmluZyB0b2tlbiBub3QgbWF0Y2hpbmcgcmVxdXJlc3RlZCAi CisrCQkJICAgICJtYW51ZmFjdHVyZXJJRCAoJS4zMnMpIHNwZWNpZmllZCBieSBQS0NTIzExIFVS SSBpbiAiCisrCQkJICAgICJzbG90ICVsdSIsIHRva2VuLT5tYW51ZmFjdHVyZXJJRCwgKHVuc2ln bmVkIGxvbmcpaSk7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAodXJpLT5zZXJpYWwgIT0g TlVMTCAmJgorKwkJICAgIHN0cm5jbXAodG9rZW4tPnNlcmlhbE51bWJlciwgdXJpLT5zZXJpYWws IDE2KSAhPSAwKSB7CisrCQkJZGVidWcyX2YoImlnbm9yaW5nIHRva2VuIG5vdCBtYXRjaGluZyBy ZXF1cmVzdGVkICIKKysJCQkgICAgInNlcmlhbE51bWJlciAoJXMpIHNwZWNpZmllZCBieSBQS0NT IzExIFVSSSBpbiAiCisrCQkJICAgICJzbG90ICVsdSIsIHRva2VuLT5zZXJpYWxOdW1iZXIsICh1 bnNpZ25lZCBsb25nKWkpOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJZGVidWcoInByb3ZpZGVy ICVzIHNsb3QgJWx1OiBsYWJlbCA8JS4zMnM+IG1hbnVmYWN0dXJlcklEIDwlLjMycz4gIgorKwkJ ICAgICJtb2RlbCA8JS4xNnM+IHNlcmlhbCA8JS4xNnM+IGZsYWdzIDB4JWx4IiwKKysJCSAgICBw cm92aWRlcl91cmksICh1bnNpZ25lZCBsb25nKWksCisrCQkgICAgdG9rZW4tPmxhYmVsLCB0b2tl bi0+bWFudWZhY3R1cmVySUQsIHRva2VuLT5tb2RlbCwKKysJCSAgICB0b2tlbi0+c2VyaWFsTnVt YmVyLCB0b2tlbi0+ZmxhZ3MpOworKwkJLyoKKysJCSAqIG9wZW4gc2Vzc2lvbiBpZiBub3QgeWV0 IG9wZW5lZCwgbG9naW4gd2l0aCBwaW4gYW5kCisrCQkgKiByZXRyaWV2ZSBwdWJsaWMga2V5cyAo aWYga2V5cCBpcyBwcm92aWRlZCkKKysJCSAqLworKwkJaWYgKChwLT5tb2R1bGUtPnNsb3RpbmZv W2ldLnNlc3Npb24gIT0gMCB8fAorKwkJICAgIChyZXQgPSBwa2NzMTFfb3Blbl9zZXNzaW9uKHAs IGksIHBpbiwgdXNlcikpICE9IDApICYmIC8qID8/PyAqLworKwkJICAgIGtleXAgPT0gTlVMTCkK KysJCQljb250aW51ZTsKKysJCXBrY3MxMV9mZXRjaF9rZXlzKHAsIGksIGtleXAsIGxhYmVsc3As ICZua2V5cywgdXJpKTsKKysJCXBrY3MxMV9mZXRjaF9jZXJ0cyhwLCBpLCBrZXlwLCBsYWJlbHNw LCAmbmtleXMsIHVyaSk7CisrCQlpZiAobmtleXMgPT0gMCAmJiAhcC0+bW9kdWxlLT5zbG90aW5m b1tpXS5sb2dnZWRfaW4gJiYKKysJCSAgICBwa2NzMTFfaW50ZXJhY3RpdmUpIHsKKysJCQkvKgor KwkJCSAqIFNvbWUgdG9rZW5zIHJlcXVpcmUgbG9naW4gYmVmb3JlIHRoZXkgd2lsbAorKwkJCSAq IGV4cG9zZSBrZXlzLgorKwkJCSAqLworKwkJCWRlYnVnM19mKCJUcnlpbmcgdG8gbG9naW4gYXMg dGhlcmUgd2VyZSBubyBrZXlzIGZvdW5kIik7CisrCQkJaWYgKHBrY3MxMV9sb2dpbl9zbG90KHAs ICZwLT5tb2R1bGUtPnNsb3RpbmZvW2ldLAorKwkJCSAgICBDS1VfVVNFUikgPCAwKSB7CisrCQkJ CWVycm9yKCJsb2dpbiBmYWlsZWQiKTsKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJCXBrY3Mx MV9mZXRjaF9rZXlzKHAsIGksIGtleXAsIGxhYmVsc3AsICZua2V5cywgdXJpKTsKKysJCQlwa2Nz MTFfZmV0Y2hfY2VydHMocCwgaSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1cmkpOworKwkJfQor KwkJaWYgKG5rZXlzID09IDAgJiYgdXJpLT5vYmplY3QgIT0gTlVMTCkgeworKwkJCWRlYnVnM19m KCJObyBrZXlzIGZvdW5kLiBSZXRyeWluZyB3aXRob3V0IGxhYmVsICglLjMycykgIiwKKysJCQkg ICAgdXJpLT5vYmplY3QpOworKwkJCS8qIFRyeSBvbmNlIG1vcmUgd2l0aG91dCB0aGUgbGFiZWwg ZmlsdGVyICovCisrCQkJY2hhciAqbGFiZWwgPSB1cmktPm9iamVjdDsKKysJCQl1cmktPm9iamVj dCA9IE5VTEw7IC8qIFhYWCBjbG9uZSB1cmk/ICovCisrCQkJcGtjczExX2ZldGNoX2tleXMocCwg aSwga2V5cCwgbGFiZWxzcCwgJm5rZXlzLCB1cmkpOworKwkJCXBrY3MxMV9mZXRjaF9jZXJ0cyhw LCBpLCBrZXlwLCBsYWJlbHNwLCAmbmtleXMsIHVyaSk7CisrCQkJdXJpLT5vYmplY3QgPSBsYWJl bDsKKysJCX0KKysJfQorKwlwaW4gPSBOVUxMOyAvKiBXaWxsIGJlIGNsZWFuZWQgdXAgd2l0aCBV UkkgKi8KKysKKysJLyogbm93IG93bmVkIGJ5IGNhbGxlciAqLworKwkqcHJvdmlkZXJwID0gcDsK KysKKysJZnJlZShwcm92aWRlcl91cmkpOworKwlyZXR1cm4gKG5rZXlzKTsKKysgZmFpbDoKKysJ aWYgKHApIHsKKysJCVRBSUxRX1JFTU9WRSgmcGtjczExX3Byb3ZpZGVycywgcCwgbmV4dCk7Cisr CSAgICAgCXBrY3MxMV9wcm92aWRlcl91bnJlZihwKTsKKysJfQorKwlpZiAocmV0ID4gMCkKKysJ CXJldCA9IC0xOworKwlyZXR1cm4gKHJldCk7CisrfQorKworKyNpZmRlZiBXSVRIX1BLQ1MxMV9L RVlHRU4KKytzdGF0aWMgaW50CisrcGtjczExX3JlZ2lzdGVyX3Byb3ZpZGVyKGNoYXIgKnByb3Zp ZGVyX2lkLCBjaGFyICpwaW4sIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwKKysgICAgY2hhciAqKips YWJlbHNwLCBzdHJ1Y3QgcGtjczExX3Byb3ZpZGVyICoqcHJvdmlkZXJwLCBDS19VTE9ORyB1c2Vy KQorK3sKKysJc3RydWN0IHBrY3MxMV91cmkgKnVyaSA9IE5VTEw7CisrCWludCByOworKworKwlk ZWJ1Z19mKCJjYWxsZWQsIHByb3ZpZGVyX2lkID0gJXMiLCBwcm92aWRlcl9pZCk7CisrCisrCXVy aSA9IHBrY3MxMV91cmlfaW5pdCgpOworKwlpZiAodXJpID09IE5VTEwpCisrCQlmYXRhbCgiZmFp bGVkIHRvIGluaXQgUEtDUyMxMSBVUkkiKTsKKysKKysJaWYgKHN0cmxlbihwcm92aWRlcl9pZCkg Pj0gc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSAmJgorKwkgICAgc3RybmNtcChwcm92aWRlcl9p ZCwgUEtDUzExX1VSSV9TQ0hFTUUsIHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkpID09IDApIHsK KysJCWlmIChwa2NzMTFfdXJpX3BhcnNlKHByb3ZpZGVyX2lkLCB1cmkpICE9IDApCisrCQkJZmF0 YWwoIkZhaWxlZCB0byBwYXJzZSBQS0NTIzExIFVSSSIpOworKwl9IGVsc2UgeworKwkJdXJpLT5t b2R1bGVfcGF0aCA9IHN0cmR1cChwcm92aWRlcl9pZCk7CisrCX0KKysKKysJciA9IHBrY3MxMV9y ZWdpc3Rlcl9wcm92aWRlcl9ieV91cmkodXJpLCBwaW4sIGtleXAsIGxhYmVsc3AsIHByb3ZpZGVy cCwgdXNlcik7CisrCXBrY3MxMV91cmlfY2xlYW51cCh1cmkpOworKworKwlyZXR1cm4gcjsKKyt9 CisrI2VuZGlmCisrCisgaW50CistcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpwcm92aWRlcl9p ZCwgY2hhciAqcGluLCBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsCistICAgIGNoYXIgKioqbGFiZWxz cCkKKytwa2NzMTFfYWRkX3Byb3ZpZGVyX2J5X3VyaShzdHJ1Y3QgcGtjczExX3VyaSAqdXJpLCBj aGFyICpwaW4sCisrICAgIHN0cnVjdCBzc2hrZXkgKioqa2V5cCwgY2hhciAqKipsYWJlbHNwKQor IHsKKyAJc3RydWN0IHBrY3MxMV9wcm92aWRlciAqcCA9IE5VTEw7CisgCWludCBua2V5czsKKysJ Y2hhciAqcHJvdmlkZXJfdXJpID0gcGtjczExX3VyaV9nZXQodXJpKTsKKyAKKy0JbmtleXMgPSBw a2NzMTFfcmVnaXN0ZXJfcHJvdmlkZXIocHJvdmlkZXJfaWQsIHBpbiwga2V5cCwgbGFiZWxzcCwK Ky0JICAgICZwLCBDS1VfVVNFUik7CisrCWRlYnVnX2YoImNhbGxlZCwgcHJvdmlkZXJfdXJpID0g JXMiLCBwcm92aWRlcl91cmkpOworKworKwlua2V5cyA9IHBrY3MxMV9yZWdpc3Rlcl9wcm92aWRl cl9ieV91cmkodXJpLCBwaW4sIGtleXAsIGxhYmVsc3AsICZwLCBDS1VfVVNFUik7CisgCisgCS8q IG5vIGtleXMgZm91bmQgb3Igc29tZSBvdGhlciBlcnJvciwgZGUtcmVnaXN0ZXIgcHJvdmlkZXIg Ki8KKyAJaWYgKG5rZXlzIDw9IDAgJiYgcCAhPSBOVUxMKSB7CitAQCAtMjA1OCwxMSArMjM4MCwz OCBAQCBwa2NzMTFfYWRkX3Byb3ZpZGVyKGNoYXIgKnByb3ZpZGVyX2lkLCBjaGFyICpwaW4sIHN0 cnVjdCBzc2hrZXkgKioqa2V5cCwKKyAJCXBrY3MxMV9wcm92aWRlcl91bnJlZihwKTsKKyAJfQor IAlpZiAobmtleXMgPT0gMCkKKy0JCWRlYnVnX2YoInByb3ZpZGVyICVzIHJldHVybmVkIG5vIGtl eXMiLCBwcm92aWRlcl9pZCk7CisrCQlkZWJ1Z19mKCJwcm92aWRlciAlcyByZXR1cm5lZCBubyBr ZXlzIiwgcHJvdmlkZXJfdXJpKTsKKyAKKysJZnJlZShwcm92aWRlcl91cmkpOworIAlyZXR1cm4g KG5rZXlzKTsKKyB9CisgCisraW50CisrcGtjczExX2FkZF9wcm92aWRlcihjaGFyICpwcm92aWRl cl9pZCwgY2hhciAqcGluLAorKyAgICBzdHJ1Y3Qgc3Noa2V5ICoqKmtleXAsIGNoYXIgKioqbGFi ZWxzcCkKKyt7CisrCXN0cnVjdCBwa2NzMTFfdXJpICp1cmk7CisrCWludCBua2V5czsKKysKKysJ dXJpID0gcGtjczExX3VyaV9pbml0KCk7CisrCWlmICh1cmkgPT0gTlVMTCkKKysJCWZhdGFsKCJG YWlsZWQgdG8gaW5pdCBQS0NTIzExIFVSSSIpOworKworKwlpZiAoc3RybGVuKHByb3ZpZGVyX2lk KSA+PSBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCisrCSAgICBzdHJuY21wKHByb3ZpZGVy X2lkLCBQS0NTMTFfVVJJX1NDSEVNRSwgc3RybGVuKFBLQ1MxMV9VUklfU0NIRU1FKSkgPT0gMCkg eworKwkJaWYgKHBrY3MxMV91cmlfcGFyc2UocHJvdmlkZXJfaWQsIHVyaSkgIT0gMCkKKysJCQlm YXRhbCgiRmFpbGVkIHRvIHBhcnNlIFBLQ1MjMTEgVVJJIik7CisrCX0gZWxzZSB7CisrCQl1cmkt Pm1vZHVsZV9wYXRoID0gc3RyZHVwKHByb3ZpZGVyX2lkKTsKKysJfQorKworKwlua2V5cyA9IHBr Y3MxMV9hZGRfcHJvdmlkZXJfYnlfdXJpKHVyaSwgcGluLCBrZXlwLCBsYWJlbHNwKTsKKysJcGtj czExX3VyaV9jbGVhbnVwKHVyaSk7CisrCisrIAlyZXR1cm4gKG5rZXlzKTsKKyt9CisrCisrCisg aW50CisgcGtjczExX3NpZ24oc3RydWN0IHNzaGtleSAqa2V5LAorICAgICB1X2NoYXIgKipzaWdw LCBzaXplX3QgKmxlbnAsCitkaWZmIC0tZ2l0IGEvc3NoLXBrY3MxMS5oIGIvc3NoLXBrY3MxMS5o CitpbmRleCAxZDAyNzdhNmQuLjEzNDU5NjQ0YyAxMDA2NDQKKy0tLSBhL3NzaC1wa2NzMTEuaAor KysrIGIvc3NoLXBrY3MxMS5oCitAQCAtMjQsMTIgKzI0LDE2IEBACisgI2RlZmluZQlTU0hfUEtD UzExX0VSUl9QSU5fUkVRVUlSRUQJCTQKKyAjZGVmaW5lCVNTSF9QS0NTMTFfRVJSX1BJTl9MT0NL RUQJCTUKKyAKKysjaW5jbHVkZSAic3NoLXBrY3MxMS11cmkuaCIKKysKKyBzdHJ1Y3Qgc3Noa2V5 OworIAorIGludAlwa2NzMTFfaW5pdChpbnQpOworIHZvaWQJcGtjczExX3Rlcm1pbmF0ZSh2b2lk KTsKKyBpbnQJcGtjczExX2FkZF9wcm92aWRlcihjaGFyICosIGNoYXIgKiwgc3RydWN0IHNzaGtl eSAqKiosIGNoYXIgKioqKTsKKytpbnQJcGtjczExX2FkZF9wcm92aWRlcl9ieV91cmkoc3RydWN0 IHBrY3MxMV91cmkgKiwgY2hhciAqLCBzdHJ1Y3Qgc3Noa2V5ICoqKiwgY2hhciAqKiopOworIGlu dAlwa2NzMTFfZGVsX3Byb3ZpZGVyKGNoYXIgKik7CisraW50CXBrY3MxMV91cmlfd3JpdGUoY29u c3Qgc3RydWN0IHNzaGtleSAqLCBGSUxFICopOworIGludAlwa2NzMTFfc2lnbihzdHJ1Y3Qgc3No a2V5ICosIHVfY2hhciAqKiwgc2l6ZV90ICosCisgCSAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90 LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKyAJICAgIGNvbnN0IGNoYXIgKiwgdV9pbnQp OworZGlmZiAtLWdpdCBhL3NzaC5jIGIvc3NoLmMKK2luZGV4IDRhMTdjMGE3ZC4uYjQxYWU4MmQy IDEwMDY0NAorLS0tIGEvc3NoLmMKKysrKyBiL3NzaC5jCitAQCAtODYyLDYgKzg2MiwxNCBAQCBt YWluKGludCBhYywgY2hhciAqKmF2KQorIAkJCW9wdGlvbnMuZ3NzX2RlbGVnX2NyZWRzID0gMTsK KyAJCQlicmVhazsKKyAJCWNhc2UgJ2knOgorKyNpZmRlZiBFTkFCTEVfUEtDUzExCisrCQkJaWYg KHN0cmxlbihvcHRhcmcpID49IHN0cmxlbihQS0NTMTFfVVJJX1NDSEVNRSkgJiYKKysJCQkgICAg c3RybmNtcChvcHRhcmcsIFBLQ1MxMV9VUklfU0NIRU1FLAorKwkJCSAgICBzdHJsZW4oUEtDUzEx X1VSSV9TQ0hFTUUpKSA9PSAwKSB7CisrCQkJCWFkZF9pZGVudGl0eV9maWxlKCZvcHRpb25zLCBO VUxMLCBvcHRhcmcsIDEpOworKwkJCQlicmVhazsKKysJCQl9CisrI2VuZGlmCisgCQkJcCA9IHRp bGRlX2V4cGFuZF9maWxlbmFtZShvcHRhcmcsIGdldHVpZCgpKTsKKyAJCQlpZiAoc3RhdChwLCAm c3QpID09IC0xKQorIAkJCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IElkZW50aXR5IGZpbGUg JXMgIgorQEAgLTE4MzgsNiArMTg0Niw3IEBAIG1haW4oaW50IGFjLCBjaGFyICoqYXYpCisgCisg I2lmZGVmIEVOQUJMRV9QS0NTMTEKKyAJKHZvaWQpcGtjczExX2RlbF9wcm92aWRlcihvcHRpb25z LnBrY3MxMV9wcm92aWRlcik7CisrCXBrY3MxMV90ZXJtaW5hdGUoKTsKKyAjZW5kaWYKKyAKKyAg c2tpcF9jb25uZWN0OgorQEAgLTIzNDksNiArMjM1OCw0NSBAQCBzc2hfc2Vzc2lvbjIoc3RydWN0 IHNzaCAqc3NoLCBjb25zdCBzdHJ1Y3Qgc3NoX2Nvbm5faW5mbyAqY2luZm8pCisgCSAgICBvcHRp b25zLmVzY2FwZV9jaGFyIDogU1NIX0VTQ0FQRUNIQVJfTk9ORSwgaWQpOworIH0KKyAKKysjaWZk ZWYgRU5BQkxFX1BLQ1MxMQorK3N0YXRpYyB2b2lkCisrbG9hZF9wa2NzMTFfaWRlbnRpdHkoY2hh ciAqcGtjczExX3VyaSwgY2hhciAqaWRlbnRpdHlfZmlsZXNbXSwKKysgICAgc3RydWN0IHNzaGtl eSAqaWRlbnRpdHlfa2V5c1tdLCBpbnQgKm5faWRzKQorK3sKKysJaW50IG5rZXlzLCBpOworKwlz dHJ1Y3Qgc3Noa2V5ICoqa2V5czsKKysJc3RydWN0IHBrY3MxMV91cmkgKnVyaTsKKysKKysJZGVi dWcoImlkZW50aXR5IGZpbGUgJyVzJyBmcm9tIHBrY3MjMTEiLCBwa2NzMTFfdXJpKTsKKysJdXJp ID0gcGtjczExX3VyaV9pbml0KCk7CisrCWlmICh1cmkgPT0gTlVMTCkKKysJCWZhdGFsKCJGYWls ZWQgdG8gaW5pdCBQS0NTIzExIFVSSSIpOworKworKwlpZiAocGtjczExX3VyaV9wYXJzZShwa2Nz MTFfdXJpLCB1cmkpICE9IDApCisrCWZhdGFsKCJGYWlsZWQgdG8gcGFyc2UgUEtDUyMxMSBVUkkg JXMiLCBwa2NzMTFfdXJpKTsKKysKKysJLyogd2UgbmVlZCB0byBtZXJnZSBVUkkgYW5kIHByb3Zp ZGVyIHRvZ2V0aGVyICovCisrCWlmIChvcHRpb25zLnBrY3MxMV9wcm92aWRlciAhPSBOVUxMICYm IHVyaS0+bW9kdWxlX3BhdGggPT0gTlVMTCkKKysJCXVyaS0+bW9kdWxlX3BhdGggPSBzdHJkdXAo b3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIpOworKworKwlpZiAob3B0aW9ucy5udW1faWRlbnRpdHlf ZmlsZXMgPCBTU0hfTUFYX0lERU5USVRZX0ZJTEVTICYmCisrCSAgICAobmtleXMgPSBwa2NzMTFf YWRkX3Byb3ZpZGVyX2J5X3VyaSh1cmksIE5VTEwsICZrZXlzLCBOVUxMKSkgPiAwKSB7CisrCQlm b3IgKGkgPSAwOyBpIDwgbmtleXM7IGkrKykgeworKwkJCWlmICgqbl9pZHMgPj0gU1NIX01BWF9J REVOVElUWV9GSUxFUykgeworKwkJCQlzc2hrZXlfZnJlZShrZXlzW2ldKTsKKysJCQkJY29udGlu dWU7CisrCQkJfQorKwkJCWlkZW50aXR5X2tleXNbKm5faWRzXSA9IGtleXNbaV07CisrCQkJaWRl bnRpdHlfZmlsZXNbKm5faWRzXSA9IHBrY3MxMV91cmlfZ2V0KHVyaSk7CisrCQkJKCpuX2lkcykr KzsKKysJCX0KKysJCWZyZWUoa2V5cyk7CisrCX0KKysKKysJcGtjczExX3VyaV9jbGVhbnVwKHVy aSk7CisrfQorKyNlbmRpZiAvKiBFTkFCTEVfUEtDUzExICovCisrCisgLyogTG9hZHMgYWxsIElk ZW50aXR5RmlsZSBhbmQgQ2VydGlmaWNhdGVGaWxlIGtleXMgKi8KKyBzdGF0aWMgdm9pZAorIGxv YWRfcHVibGljX2lkZW50aXR5X2ZpbGVzKGNvbnN0IHN0cnVjdCBzc2hfY29ubl9pbmZvICpjaW5m bykKK0BAIC0yMzYzLDExICsyNDExLDYgQEAgbG9hZF9wdWJsaWNfaWRlbnRpdHlfZmlsZXMoY29u c3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQorIAljaGFyICpjZXJ0aWZpY2F0ZV9maWxl c1tTU0hfTUFYX0NFUlRJRklDQVRFX0ZJTEVTXTsKKyAJc3RydWN0IHNzaGtleSAqY2VydGlmaWNh dGVzW1NTSF9NQVhfQ0VSVElGSUNBVEVfRklMRVNdOworIAlpbnQgY2VydGlmaWNhdGVfZmlsZV91 c2VycHJvdmlkZWRbU1NIX01BWF9DRVJUSUZJQ0FURV9GSUxFU107CistI2lmZGVmIEVOQUJMRV9Q S0NTMTEKKy0Jc3RydWN0IHNzaGtleSAqKmtleXMgPSBOVUxMOworLQljaGFyICoqY29tbWVudHMg PSBOVUxMOworLQlpbnQgbmtleXM7CistI2VuZGlmIC8qIFBLQ1MxMSAqLworIAorIAluX2lkcyA9 IG5fY2VydHMgPSAwOworIAltZW1zZXQoaWRlbnRpdHlfZmlsZXMsIDAsIHNpemVvZihpZGVudGl0 eV9maWxlcykpOworQEAgLTIzODAsMzMgKzI0MjMsNDYgQEAgbG9hZF9wdWJsaWNfaWRlbnRpdHlf ZmlsZXMoY29uc3Qgc3RydWN0IHNzaF9jb25uX2luZm8gKmNpbmZvKQorIAkgICAgc2l6ZW9mKGNl cnRpZmljYXRlX2ZpbGVfdXNlcnByb3ZpZGVkKSk7CisgCisgI2lmZGVmIEVOQUJMRV9QS0NTMTEK Ky0JaWYgKG9wdGlvbnMucGtjczExX3Byb3ZpZGVyICE9IE5VTEwgJiYKKy0JICAgIG9wdGlvbnMu bnVtX2lkZW50aXR5X2ZpbGVzIDwgU1NIX01BWF9JREVOVElUWV9GSUxFUyAmJgorLQkgICAgKHBr Y3MxMV9pbml0KCFvcHRpb25zLmJhdGNoX21vZGUpID09IDApICYmCistCSAgICAobmtleXMgPSBw a2NzMTFfYWRkX3Byb3ZpZGVyKG9wdGlvbnMucGtjczExX3Byb3ZpZGVyLCBOVUxMLAorLQkgICAg JmtleXMsICZjb21tZW50cykpID4gMCkgeworLQkJZm9yIChpID0gMDsgaSA8IG5rZXlzOyBpKysp IHsKKy0JCQlpZiAobl9pZHMgPj0gU1NIX01BWF9JREVOVElUWV9GSUxFUykgeworLQkJCQlzc2hr ZXlfZnJlZShrZXlzW2ldKTsKKy0JCQkJZnJlZShjb21tZW50c1tpXSk7CistCQkJCWNvbnRpbnVl OworLQkJCX0KKy0JCQlpZGVudGl0eV9rZXlzW25faWRzXSA9IGtleXNbaV07CistCQkJaWRlbnRp dHlfZmlsZXNbbl9pZHNdID0gY29tbWVudHNbaV07IC8qIHRyYW5zZmVycmVkICovCistCQkJbl9p ZHMrKzsKKy0JCX0KKy0JCWZyZWUoa2V5cyk7CistCQlmcmVlKGNvbW1lbnRzKTsKKysJLyogaGFu ZGxlIGZhbGxiYWNrIGZyb20gUEtDUzExUHJvdmlkZXIgb3B0aW9uICovCisrCXBrY3MxMV9pbml0 KCFvcHRpb25zLmJhdGNoX21vZGUpOworKworKwlpZiAob3B0aW9ucy5wa2NzMTFfcHJvdmlkZXIg IT0gTlVMTCkgeworKwkJc3RydWN0IHBrY3MxMV91cmkgKnVyaTsKKysKKysJCXVyaSA9IHBrY3Mx MV91cmlfaW5pdCgpOworKwkJaWYgKHVyaSA9PSBOVUxMKQorKwkJCWZhdGFsKCJGYWlsZWQgdG8g aW5pdCBQS0NTIzExIFVSSSIpOworKworKwkJLyogQ29uc3RydWN0IHNpbXBsZSBQS0NTIzExIFVS SSB0byBzaW1wbGlmeSBhY2Nlc3MgKi8KKysJCXVyaS0+bW9kdWxlX3BhdGggPSBzdHJkdXAob3B0 aW9ucy5wa2NzMTFfcHJvdmlkZXIpOworKworKwkJLyogQWRkIGl0IGFzIGFueSBvdGhlciBJZGVu dGl0eUZpbGUgKi8KKysJCWNwID0gcGtjczExX3VyaV9nZXQodXJpKTsKKysJCWFkZF9pZGVudGl0 eV9maWxlKCZvcHRpb25zLCBOVUxMLCBjcCwgMSk7CisrCQlmcmVlKGNwKTsKKysKKysJCXBrY3Mx MV91cmlfY2xlYW51cCh1cmkpOworIAl9CisgI2VuZGlmIC8qIEVOQUJMRV9QS0NTMTEgKi8KKyAJ Zm9yIChpID0gMDsgaSA8IG9wdGlvbnMubnVtX2lkZW50aXR5X2ZpbGVzOyBpKyspIHsKKysJCWNo YXIgKm5hbWUgPSBvcHRpb25zLmlkZW50aXR5X2ZpbGVzW2ldOworIAkJaWYgKG5faWRzID49IFNT SF9NQVhfSURFTlRJVFlfRklMRVMgfHwKKy0JCSAgICBzdHJjYXNlY21wKG9wdGlvbnMuaWRlbnRp dHlfZmlsZXNbaV0sICJub25lIikgPT0gMCkgeworKwkJICAgIHN0cmNhc2VjbXAobmFtZSwgIm5v bmUiKSA9PSAwKSB7CisgCQkJZnJlZShvcHRpb25zLmlkZW50aXR5X2ZpbGVzW2ldKTsKKyAJCQlv cHRpb25zLmlkZW50aXR5X2ZpbGVzW2ldID0gTlVMTDsKKyAJCQljb250aW51ZTsKKyAJCX0KKy0J CWNwID0gdGlsZGVfZXhwYW5kX2ZpbGVuYW1lKG9wdGlvbnMuaWRlbnRpdHlfZmlsZXNbaV0sIGdl dHVpZCgpKTsKKysjaWZkZWYgRU5BQkxFX1BLQ1MxMQorKwkJaWYgKHN0cmxlbihuYW1lKSA+PSBz dHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpICYmCisrCQkgICAgc3RybmNtcChuYW1lLCBQS0NTMTFf VVJJX1NDSEVNRSwKKysJCSAgICBzdHJsZW4oUEtDUzExX1VSSV9TQ0hFTUUpKSA9PSAwKSB7Cisr CQkJbG9hZF9wa2NzMTFfaWRlbnRpdHkobmFtZSwgaWRlbnRpdHlfZmlsZXMsCisrCQkJICAgIGlk ZW50aXR5X2tleXMsICZuX2lkcyk7CisrCQkJZnJlZShvcHRpb25zLmlkZW50aXR5X2ZpbGVzW2ld KTsKKysJCQljb250aW51ZTsKKysJCX0KKysjZW5kaWYgLyogRU5BQkxFX1BLQ1MxMSAqLworKwkJ Y3AgPSB0aWxkZV9leHBhbmRfZmlsZW5hbWUobmFtZSwgZ2V0dWlkKCkpOworIAkJZmlsZW5hbWUg PSBkZWZhdWx0X2NsaWVudF9wZXJjZW50X2RvbGxhcl9leHBhbmQoY3AsIGNpbmZvKTsKKyAJCWZy ZWUoY3ApOworIAkJY2hlY2tfbG9hZChzc2hrZXlfbG9hZF9wdWJsaWMoZmlsZW5hbWUsICZwdWJs aWMsIE5VTEwpLAorZGlmZiAtLWdpdCBhL3NzaF9jb25maWcuNSBiL3NzaF9jb25maWcuNQoraW5k ZXggYWI5OGMxNzJmLi42OTliM2Y2N2QgMTAwNjQ0CistLS0gYS9zc2hfY29uZmlnLjUKKysrKyBi L3NzaF9jb25maWcuNQorQEAgLTEyNjIsNiArMTI2MiwyMSBAQCBtYXkgYWxzbyBiZSB1c2VkIGlu IGNvbmp1bmN0aW9uIHdpdGgKKyAuQ20gQ2VydGlmaWNhdGVGaWxlCisgaW4gb3JkZXIgdG8gcHJv dmlkZSBhbnkgY2VydGlmaWNhdGUgYWxzbyBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGgK KyB0aGUgaWRlbnRpdHkuCisrLlBwCisrVGhlIGF1dGhlbnRpY2F0aW9uIGlkZW50aXR5IGNhbiBi ZSBhbHNvIHNwZWNpZmllZCBpbiBhIGZvcm0gb2YgUEtDUyMxMSBVUkkKKytzdGFydGluZyB3aXRo IGEgc3RyaW5nCisrLkNtIHBrY3MxMTogLgorK1RoZXJlIGlzIHN1cHBvcnRlZCBhIHN1YnNldCBv ZiB0aGUgUEtDUyMxMSBVUkkgYXMgZGVmaW5lZAorK2luIFJGQyA3NTEyIChpbXBsZW1lbnRlZCBw YXRoIGFyZ3VtZW50cworKy5DbSBpZCAsCisrLkNtIG1hbnVmYWN0dXJlciAsCisrLkNtIG9iamVj dCAsCisrLkNtIHRva2VuCisrYW5kIHF1ZXJ5IGFyZ3VtZW50cworKy5DbSBtb2R1bGUtcGF0aAor K2FuZAorKy5DbSBwaW4tdmFsdWUKKyspLiBUaGUgVVJJIGNhbiBub3QgYmUgaW4gcXVvdGVzLgor IC5JdCBDbSBJZ25vcmVVbmtub3duCisgU3BlY2lmaWVzIGEgcGF0dGVybi1saXN0IG9mIHVua25v d24gb3B0aW9ucyB0byBiZSBpZ25vcmVkIGlmIHRoZXkgYXJlCisgZW5jb3VudGVyZWQgaW4gY29u ZmlndXJhdGlvbiBwYXJzaW5nLgorZGlmZiAtLWdpdCBhL3NzaGtleS5jIGIvc3Noa2V5LmMKK2lu ZGV4IDUyMjVlYWJmMi4uNTgzZjY0MjFkIDEwMDY0NAorLS0tIGEvc3Noa2V5LmMKKysrKyBiL3Nz aGtleS5jCitAQCAtODU2LDggKzg1NiwxMCBAQCBzc2hrZXlfZnJlZV9jb250ZW50cyhzdHJ1Y3Qg c3Noa2V5ICprKQorIAorIAlpZiAoayA9PSBOVUxMKQorIAkJcmV0dXJuOworKyNpZmRlZiBFTkFC TEVfUEtDUzExCisgCWlmICgoay0+ZmxhZ3MgJiBTU0hLRVlfRkxBR19FWFQpICE9IDApCisgCQlw a2NzMTFfa2V5X2ZyZWUoayk7CisrI2VuZGlmCisgCWlmICgoaW1wbCA9IHNzaGtleV9pbXBsX2Zy b21fdHlwZShrLT50eXBlKSkgIT0gTlVMTCAmJgorIAkgICAgaW1wbC0+ZnVuY3MtPmNsZWFudXAg IT0gTlVMTCkKKyAJCWltcGwtPmZ1bmNzLT5jbGVhbnVwKGspOworQEAgLTIzMDQsOSArMjMwNiwx MSBAQCBzc2hrZXlfc2lnbihzdHJ1Y3Qgc3Noa2V5ICprZXksCisgCWlmIChzc2hrZXlfaXNfc2so a2V5KSkgeworIAkJciA9IHNzaHNrX3NpZ24oc2tfcHJvdmlkZXIsIGtleSwgc2lncCwgbGVucCwg ZGF0YSwKKyAJCSAgICBkYXRhbGVuLCBjb21wYXQsIHNrX3Bpbik7CisrI2lmZGVmIEVOQUJMRV9Q S0NTMTEKKyAJfSBlbHNlIGlmICgoa2V5LT5mbGFncyAmIFNTSEtFWV9GTEFHX0VYVCkgIT0gMCkg eworIAkJciA9IHBrY3MxMV9zaWduKGtleSwgc2lncCwgbGVucCwgZGF0YSwgZGF0YWxlbiwKKyAJ CSAgICBhbGcsIHNrX3Byb3ZpZGVyLCBza19waW4sIGNvbXBhdCk7CisrI2VuZGlmCisgCX0gZWxz ZSB7CisgCQlpZiAoaW1wbC0+ZnVuY3MtPnNpZ24gPT0gTlVMTCkKKyAJCQlyID0gU1NIX0VSUl9T SUdOX0FMR19VTlNVUFBPUlRFRDsKKy0tIAorMi41My4wCisKCmRpZmYgLS1naXQgYS8wMDU0LWdz c2FwaS10ZXN0cy5wYXRjaCBiLzAwNTQtZ3NzYXBpLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMmI1NTQKLS0tIC9kZXYvbnVsbAorKysgYi8wMDU0LWdz c2FwaS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDI0MCBAQAorZGlmZiAtLWdpdCBhL3JlZ3Jlc3Mv TWFrZWZpbGUgYi9yZWdyZXNzL01ha2VmaWxlCitpbmRleCBjYmU3YTk2MTAuLmViOWY3YWQwMCAx MDA2NDQKKy0tLSBhL3JlZ3Jlc3MvTWFrZWZpbGUKKysrKyBiL3JlZ3Jlc3MvTWFrZWZpbGUKK0BA IC0xMjcsNiArMTI3LDcgQEAgSU5URVJPUF9URVNUUys9CWRyb3BiZWFyLWNpcGhlcnMgZHJvcGJl YXIta2V4IGRyb3BiZWFyLXNlcnZlcgorICNJTlRFUk9QX1RFU1RTKz1zc2gtY29tIHNzaC1jb20t Y2xpZW50IHNzaC1jb20ta2V5Z2VuIHNzaC1jb20tc2Z0cAorIAorIEVYVFJBX1RFU1RTPQlhZ2Vu dC1wa2NzMTEKKytFWFRSQV9URVNUUys9CWdzcy1hdXRoIGdzcy1rZXgKKyAjRVhUUkFfVEVTVFMr PSAJY2lwaGVyLXNwZWVkCisgCisgVVNFUk5BTUU9CQkke0xPR05BTUV9CitkaWZmIC0tZ2l0IGEv cmVncmVzcy9nc3Mta2V4LnNoIGIvcmVncmVzcy9nc3Mta2V4LnNoCituZXcgZmlsZSBtb2RlIDEw MDY0NAoraW5kZXggMDAwMDAwMDAwLi4xN2EzYmY2ZjEKKy0tLSAvZGV2L251bGwKKysrKyBiL3Jl Z3Jlc3MvZ3NzLWtleC5zaAorQEAgLTAsMCArMSwyMjIgQEAKKyt0aWQ9IkdTUy1BUEkgS2V5IEV4 Y2hhbmdlIgorKworKyMgU2tpcCB0aGUgdGVzdCBpZiBHU1NBUEkgc3VwcG9ydCBpcyBub3QgY29u ZmlndXJlZAorK2lmICEgZ3JlcCAtRSAnXiNkZWZpbmUgR1NTQVBJJyAiJEJVSUxERElSL2NvbmZp Zy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgc2tpcCAiR1NTQVBJIG5vdCBlbmFibGVk IgorK2ZpCisrCisrIyBXZSB0ZXN0IHdpdGggTUlUIEtlcmJlcm9zIEtEQywgc2tpcCBpZiBub3Qg aW5zdGFsbGVkCisraWYgISB3aGljaCBrcmI1a2RjID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAg ICBza2lwICJNSVQgS2VyYmVyb3MgS0RDIG5vdCBpbnN0YWxsZWQiCisrZmkKKysKKysjIFRoZSB0 ZXN0IG5lZWRzIG5zc193cmFwcGVyIHRvIGVtdWxhdGUgZ2V0aG9zdG5hbWUoKSBhbmQgL2V0Yy9o b3N0cywKKysjIHdlIHNraXAgaWYgdGhlIHNoYXJlZCBsaWJyYXJ5IGlzIG5vdCBpbnN0YWxsZWQK Kytuc3Nfd3JhcHBlcj0ibGlibnNzX3dyYXBwZXIuc28iCisraWYgISBsZGNvbmZpZyAtcCB8IGdy ZXAgIiRuc3Nfd3JhcHBlciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIHNraXAgIiRuc3Nf d3JhcHBlciBub3QgaW5zdGFsbGVkIgorK2ZpCisrCisrIyBTZXQgdXAgdGhlIHVzZXJuYW1lIG9m IHRoZSBTU0ggY2xpZW50CisrY2xpZW50PSIkTE9HTkFNRSIKKytpZiBbICJ4JGNsaWVudCIgPSAi eCIgXTsgdGhlbgorKwljbGllbnQ9IiQod2hvYW1pKSIKKytmaQorKworKyMgU2V0IHVwIFNTSEQg YW5kIEtEQyBob3N0bmFtZXMgYW5kIHJlc29sdmUgYm90aCB0byBsb2NhbGhvc3QKKytzc2hkX2hv c3RuYW1lPSJzc2hkLmV4YW1wbGUub3JnIgorK2tkY19ob3N0bmFtZT0ia2RjLmV4YW1wbGUub3Jn IgorK2tkY19wb3J0PTIwODgKKytob3N0cz0iJE9CSi9ob3N0cyIKKytlY2hvICIxMjcuMC4wLjEg JHNzaGRfaG9zdG5hbWUgJGtkY19ob3N0bmFtZSIgPiAiJGhvc3RzIgorKworKyMgU2V0IHVwIGEg ZGlyZWN0b3J5IHRvIHN0b3JlIEtlcmJlcm9zIGRhdGEKKytnc3NkaXI9IiRPQkovZ3NzIgorK21r ZGlyIC1wICIkZ3NzZGlyIgorK2V4cG9ydCBLUkI1Q0NOQU1FPSIkZ3NzZGlyL2NjIgorK2V4cG9y dCBLUkI1X0NPTkZJRz0iJGdzc2Rpci9rcmI1LmNvbmYiCisrZXhwb3J0IEtSQjVfS0RDX1BST0ZJ TEU9IiRnc3NkaXIva2RjLmNvbmYiCisrZXhwb3J0IEtSQjVfS1ROQU1FPSIkZ3NzZGlyL3NzaC5r ZXl0YWIiCisrZXhwb3J0IEtSQjVSQ0FDSEVUWVBFPSJub25lIgorK2tkY19waWRmaWxlPSIkZ3Nz ZGlyL3BpZCIKKysKKysjIENvbmZpZ3VyZSBLZXJiZXJvcworK2NhdDw8RU9GID4gIiRLUkI1X0tE Q19QUk9GSUxFIgorK1tyZWFsbXNdCisrICAgIEVYQU1QTEUuT1JHID0geworKyAgICAgICAgZGF0 YWJhc2VfbmFtZSA9ICRnc3NkaXIvcHJpbmNpcGFsCisrICAgICAgICBrZXlfc3Rhc2hfZmlsZSA9 ICRnc3NkaXIvc3Rhc2gKKysgICAgICAgIGtkY19saXN0ZW4gPSAka2RjX2hvc3RuYW1lOiRrZGNf cG9ydAorKyAgICAgICAga2RjX3RjcF9saXN0ZW4gPSAka2RjX2hvc3RuYW1lOiRrZGNfcG9ydAor KyAgICB9CisrW2xvZ2dpbmddCisrICAgIGtkYyA9IEZJTEU6JGdzc2Rpci9rZGMubG9nCisrICAg IGRlYnVnID0gdHJ1ZQorK0VPRgorKworK2NhdDw8RU9GID4gIiRLUkI1X0NPTkZJRyIKKytbbGli ZGVmYXVsdHNdCisrICAgIGRlZmF1bHRfcmVhbG0gPSBFWEFNUExFLk9SRworK1tyZWFsbXNdCisr ICAgIEVYQU1QTEUuT1JHID0geworKyAgICAgICAga2RjID0gJGtkY19ob3N0bmFtZToka2RjX3Bv cnQKKysgICAgfQorK0VPRgorKworKyMgQmFjayB1cCB0aGUgZGVmYXVsdCBzc2hkX2NvbmZpZwor K2NwICIkT0JKL3NzaGRfY29uZmlnIiAiJE9CSi9zc2hkX2NvbmZpZy5vcmlnIgorKworK3NldHVw X3NzaGQoKSB7CisrICAgIGtleF9hbGc9IiQxIgorKworKyAgICBjcCAiJE9CSi9zc2hkX2NvbmZp Zy5vcmlnIiAiJE9CSi9zc2hkX2NvbmZpZyIKKysKKysgICAgY2F0PDxFT0YgPj4gIiRPQkovc3No ZF9jb25maWciCisrUHVia2V5QXV0aGVudGljYXRpb24gbm8KKytQYXNzd29yZEF1dGhlbnRpY2F0 aW9uIG5vCisrR1NTQVBJQXV0aGVudGljYXRpb24geWVzCisrR1NTQVBJS2V5RXhjaGFuZ2UgeWVz CisrR1NTQVBJS2V4QWxnb3JpdGhtcyAka2V4X2FsZworK0dTU0FQSVN0cmljdEFjY2VwdG9yQ2hl Y2sgbm8KKytFT0YKKysKKysgICAgdGVzdF9zc2hfc3NoZF9lbnZfYmFja3VwPSIkVEVTVF9TU0hf U1NIRF9FTlYiCisrICAgIFRFU1RfU1NIX1NTSERfRU5WPSIkVEVTVF9TU0hfU1NIRF9FTlYgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICBMRF9QUkVMT0FEPSRuc3Nf d3JhcHBlciAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICBOU1NfV1JBUFBF Ul9IT1NUUz0kaG9zdHMgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICBOU1Nf V1JBUFBFUl9IT1NUTkFNRT0kc3NoZF9ob3N0bmFtZSBcCisrICAgICAgICAgICAgICAgICAgICAg ICBLUkI1X0NPTkZJRz0kS1JCNV9DT05GSUcgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAg ICAgICAgICBLUkI1X0tEQ19QUk9GSUxFPSRLUkI1X0tEQ19QUk9GSUxFICBcCisrICAgICAgICAg ICAgICAgICAgICAgICBLUkI1Q0NOQU1FPSRLUkI1Q0NOQU1FICAgICAgICAgICAgICBcCisrICAg ICAgICAgICAgICAgICAgICAgICBLUkI1X0tUTkFNRT0kS1JCNV9LVE5BTUUgICAgICAgICAgICBc CisrICAgICAgICAgICAgICAgICAgICAgICBLUkI1UkNBQ0hFVFlQRT0kS1JCNVJDQUNIRVRZUEUi CisrICAgIHN0YXJ0X3NzaGQKKyt9CisrCisrdGVhcmRvd25fc3NoZCgpIHsKKysgICAgVEVTVF9T U0hfU1NIRF9FTlY9IiR0ZXN0X3NzaF9zc2hkX2Vudl9iYWNrdXAiCisrICAgIHN0b3Bfc3NoZAor K30KKysKKytzZXR1cF9rZGMoKSB7CisrICAgIGtkYjVfdXRpbCBjcmVhdGUgLVAgImZvbyIgLXMK KysgICAga3JiNWtkYyAtdyAxIC1QICIka2RjX3BpZGZpbGUiCisrICAgIGk9MDsKKysgICAgd2hp bGUgWyAhIC1mICIka2RjX3BpZGZpbGUiIC1hICRpIC1sdCAxMCBdOyBkbworKyAgICAgICAgaT0k KChpICsgMSkpCisrICAgICAgICBzbGVlcCAxCisrICAgIGRvbmUKKysgICAgdGVzdCAtZiAiJGtk Y19waWRmaWxlIiB8fCBmYXRhbCAiS0RDIGZhaWxlZCB0byBzdGFydCIKKyt9CisrCisrdGVhcmRv d25fa2RjKCkgeworKyAgICBraWxsICIkKGNhdCAiJGtkY19waWRmaWxlIikiCisrICAgIGtkZXN0 cm95CisrICAgIHJtIC1mICIkS1JCNV9LVE5BTUUiICIka2RjX3BpZGZpbGUiCisrICAgIGtkYjVf dXRpbCBkZXN0cm95IC1mCisrfQorKworK3NldHVwX25zc19lbXVsYXRpb24oKSB7CisrICAgIGV4 cG9ydCBMRF9QUkVMT0FEPSIkbnNzX3dyYXBwZXIiCisrICAgIGV4cG9ydCBOU1NfV1JBUFBFUl9I T1NUUz0iJGhvc3RzIgorK30KKysKKyt0ZWFyZG93bl9uc3NfZW11bGF0aW9uKCkgeworKyAgICB1 bnNldCBMRF9QUkVMT0FECisrICAgIHVuc2V0IE5TU19XUkFQUEVSX0hPU1RTCisrfQorKworKyMg R1NTIGtleCBmYW1pbHkgcHJlZml4ZXMgdG8gdGVzdC4KKysjIEdTU0FQSUtleEFsZ29yaXRobXMg YWNjZXB0cyB0aGVzZSBwcmVmaXhlczsgdGhlIGZ1bGwgYWxnb3JpdGhtIG5hbWVzCisrIyAocHJl Zml4ICsgQmFzZTY0KE1ENShPSUQpKSkgYXJlIGNvbnN0cnVjdGVkIGR1cmluZyBuZWdvdGlhdGlv bi4KKytnc3Nfa2V4X2ZhbWlsaWVzPSIKKysgICAgZ3NzLWdyb3VwMTQtc2hhMjU2LQorKyAgICBn c3MtZ3JvdXAxNi1zaGE1MTItCisrICAgIGdzcy1uaXN0cDI1Ni1zaGEyNTYtCisrICAgIGdzcy1j dXJ2ZTI1NTE5LXNoYTI1Ni0KKysgICAgZ3NzLWdyb3VwMTQtc2hhMS0KKysgICAgZ3NzLWdleC1z aGExLQorKyIKKysKKysjIFBvc2l0aXZlIHRlc3RzOiBlYWNoIEdTUyBrZXggYWxnb3JpdGhtIGNv bm5lY3RzIHN1Y2Nlc3NmdWxseQorK2ZvciBrZXhfZmFtaWx5IGluICRnc3Nfa2V4X2ZhbWlsaWVz OyBkbworKyAgICAjIENoZWNrIGlmIHRoZSBhbGdvcml0aG0gZmFtaWx5IGlzIHJlY29nbml6ZWQg Ynkgc3NoCisrICAgIGlmICEgJHtTU0h9IC1HIC1GICIkT0JKL3NzaF9jb25maWciIFwKKysgICAg ICAgIC1vICJHU1NBUElLZXlFeGNoYW5nZSB5ZXMiIFwKKysgICAgICAgIC1vICJHU1NBUElLZXhB bGdvcml0aG1zICRrZXhfZmFtaWx5IiBcCisrICAgICAgICAiJGNsaWVudEAkc3NoZF9ob3N0bmFt ZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgICB2ZXJib3NlICJnc3Mga2V4ICRrZXhf ZmFtaWx5IG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nIgorKyAgICAgICAgY29udGludWUKKysgICAg ZmkKKysKKysgICAgdmVyYm9zZSAiZ3NzIGtleCAka2V4X2ZhbWlseSIKKysKKysgICAgc2V0dXBf bnNzX2VtdWxhdGlvbgorKyAgICBzZXR1cF9rZGMKKysKKysgICAga2FkbWluLmxvY2FsIGFkZF9w cmluY2lwYWwgLXJhbmRrZXkgImhvc3QvJHNzaGRfaG9zdG5hbWUiCisrICAgIGthZG1pbi5sb2Nh bCBrdGFkZCAiaG9zdC8kc3NoZF9ob3N0bmFtZSIKKysgICAga2FkbWluLmxvY2FsIGFkZF9wcmlu Y2lwYWwgLXB3ICJmb28iICIkY2xpZW50IgorKyAgICBlY2hvICJmb28iIHwga2luaXQgIiRjbGll bnQiCisrCisrICAgIHNldHVwX3NzaGQgIiRrZXhfZmFtaWx5IgorKworKyAgICAke1NTSH0gLUYg IiRPQkovc3NoX2NvbmZpZyIgXAorKyAgICAgICAgLW8gIkdTU0FQSUF1dGhlbnRpY2F0aW9uIHll cyIgXAorKyAgICAgICAgLW8gIkdTU0FQSUtleUV4Y2hhbmdlIHllcyIgXAorKyAgICAgICAgLW8g IkdTU0FQSUtleEFsZ29yaXRobXMgJGtleF9mYW1pbHkiIFwKKysgICAgICAgIC1vICJHU1NBUElE ZWxlZ2F0ZUNyZWRlbnRpYWxzIG5vIiBcCisrICAgICAgICAiJGNsaWVudEAkc3NoZF9ob3N0bmFt ZSIgdHJ1ZQorKyAgICBzdGF0dXM9JD8KKysKKysgICAgdGVhcmRvd25fc3NoZAorKyAgICB0ZWFy ZG93bl9rZGMKKysgICAgdGVhcmRvd25fbnNzX2VtdWxhdGlvbgorKworKyAgICBpZiBbICRzdGF0 dXMgLW5lIDAgXTsgdGhlbgorKyAgICAgICAgZmFpbCAiZ3NzIGtleCAka2V4X2ZhbWlseSBmYWls ZWQiCisrICAgIGZpCisrZG9uZQorKworKyMgTmVnYXRpdmUgdGVzdDogY29ubmVjdGlvbiBtdXN0 IGZhaWwgd2hlbiBrZXl0YWIgaXMgbWlzc2luZworK3ZlcmJvc2UgImdzcyBrZXggbmVnYXRpdmUg dGVzdDogbm8ga2V5dGFiIgorK2tleF9uZWc9Imdzcy1ncm91cDE0LXNoYTI1Ni0iCisrCisraWYg JHtTU0h9IC1HIC1GICIkT0JKL3NzaF9jb25maWciIFwKKysgICAgLW8gIkdTU0FQSUtleUV4Y2hh bmdlIHllcyIgXAorKyAgICAtbyAiR1NTQVBJS2V4QWxnb3JpdGhtcyAka2V4X25lZyIgXAorKyAg ICAiJGNsaWVudEAkc3NoZF9ob3N0bmFtZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCisrICAg IHNldHVwX25zc19lbXVsYXRpb24KKysgICAgc2V0dXBfa2RjCisrCisrICAgICMgQ3JlYXRlIGhv c3QgcHJpbmNpcGFsIGJ1dCBkbyBOT1QgZXhwb3J0IHRvIGtleXRhYgorKyAgICBrYWRtaW4ubG9j YWwgYWRkX3ByaW5jaXBhbCAtcmFuZGtleSAiaG9zdC8kc3NoZF9ob3N0bmFtZSIKKysgICAga2Fk bWluLmxvY2FsIGFkZF9wcmluY2lwYWwgLXB3ICJmb28iICIkY2xpZW50IgorKyAgICBlY2hvICJm b28iIHwga2luaXQgIiRjbGllbnQiCisrCisrICAgIHNldHVwX3NzaGQgIiRrZXhfbmVnIgorKwor KyAgICAke1NTSH0gLUYgIiRPQkovc3NoX2NvbmZpZyIgXAorKyAgICAgICAgLW8gIkdTU0FQSUF1 dGhlbnRpY2F0aW9uIHllcyIgXAorKyAgICAgICAgLW8gIkdTU0FQSUtleUV4Y2hhbmdlIHllcyIg XAorKyAgICAgICAgLW8gIkdTU0FQSUtleEFsZ29yaXRobXMgJGtleF9uZWciIFwKKysgICAgICAg IC1vICJHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzIG5vIiBcCisrICAgICAgICAiJGNsaWVudEAk c3NoZF9ob3N0bmFtZSIgdHJ1ZQorKyAgICBzdGF0dXM9JD8KKysKKysgICAgdGVhcmRvd25fc3No ZAorKyAgICB0ZWFyZG93bl9rZGMKKysgICAgdGVhcmRvd25fbnNzX2VtdWxhdGlvbgorKworKyAg ICBpZiBbICRzdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICAgICAgZmFpbCAiZ3NzIGtleCBzdWNj ZWVkZWQgd2l0aG91dCBrZXl0YWIiCisrICAgIGZpCisrZmkKKysKKyt1bnNldCBLUkI1Q0NOQU1F CisrdW5zZXQgS1JCNV9DT05GSUcKKyt1bnNldCBLUkI1X0tEQ19QUk9GSUxFCisrdW5zZXQgS1JC NV9LVE5BTUUKKyt1bnNldCBLUkI1UkNBQ0hFVFlQRQorK3JtIC1yZiAiJGdzc2RpciIKCmRpZmYg LS1naXQgYS8wMDU0LW9wZW5zc2gtOS45cDEtc2NwLWNsZWFyLXNldHVpZC5wYXRjaCBiLzAwNTQt b3BlbnNzaC05LjlwMS1zY3AtY2xlYXItc2V0dWlkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAxYTg0OGExLi4wMDAwMDAwCi0tLSBhLzAwNTQtb3BlbnNzaC05LjlwMS1zY3At Y2xlYXItc2V0dWlkLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotZGlmZiAt LWNvbG9yIC1ydU5wIGEvc2NwLmMgYi9zY3AuYwotLS0tIGEvc2NwLmMJMjAyNi0wNC0wNyAxNTo1 NDoxMS4xOTM3MzA4NDIgKzAyMDAKLSsrKyBiL3NjcC5jCTIwMjYtMDQtMDcgMTU6NTU6NTIuNTI5 NDI1NDgxICswMjAwCi1AQCAtMTcwNSw4ICsxNzA1LDEwIEBAIHNpbmsoaW50IGFyZ2MsIGNoYXIg Kiphcmd2LCBjb25zdCBjaGFyICoKLSAKLSAJc2V0aW1lcyA9IHRhcmdpc2RpciA9IDA7Ci0gCW1h c2sgPSB1bWFzaygwKTsKLS0JaWYgKCFwZmxhZykKLSsJaWYgKCFwZmxhZykgewotKwkJbWFzayB8 PSAwNzAwMDsKLSAJCSh2b2lkKSB1bWFzayhtYXNrKTsKLSsJfQotIAlpZiAoYXJnYyAhPSAxKSB7 Ci0gCQlydW5fZXJyKCJhbWJpZ3VvdXMgdGFyZ2V0Iik7Ci0gCQlleGl0KDEpOwoKZGlmZiAtLWdp dCBhLzAwNTUtb3BlbnNzaC05LjlwMS1tdXgtYXNrcGFzcy1jaGVjay5wYXRjaCBiLzAwNTUtb3Bl bnNzaC05LjlwMS1tdXgtYXNrcGFzcy1jaGVjay5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMjE3NjI0My4uMDAwMDAwMAotLS0gYS8wMDU1LW9wZW5zc2gtOS45cDEtbXV4LWFz a3Bhc3MtY2hlY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1kaWZmIC0t Y29sb3IgLXJ1TnAgYS9tdXguYyBiL211eC5jCi0tLS0gYS9tdXguYwkyMDI0LTA5LTIwIDAwOjIw OjQ4LjAwMDAwMDAwMCArMDIwMAotKysrIGIvbXV4LmMJMjAyNi0wNC0wOSAxNTowMjozNi4wMTYx OTg4MTQgKzAyMDAKLUBAIC0xMTM3LDYgKzExMzcsMTYgQEAgbXV4X21hc3Rlcl9wcm9jZXNzX3By b3h5KHN0cnVjdCBzc2ggKnNzaAotIAotIAlkZWJ1Z19mKCJjaGFubmVsICVkOiBwcm94eSByZXF1 ZXN0IiwgYy0+c2VsZik7Ci0gCi0rCWlmIChvcHRpb25zLmNvbnRyb2xfbWFzdGVyID09IFNTSENU TF9NQVNURVJfQVNLIHx8Ci0rCSAgICBvcHRpb25zLmNvbnRyb2xfbWFzdGVyID09IFNTSENUTF9N QVNURVJfQVVUT19BU0spIHsKLSsJCWlmICghYXNrX3Blcm1pc3Npb24oIkFsbG93IG11bHRpcGxl eCBwcm94eSBjb25uZWN0aW9uPyIpKSB7Ci0rCQkJZGVidWcyX2YoInByb3h5IHJlZnVzZWQgYnkg dXNlciIpOwotKwkJCXJlcGx5X2Vycm9yKHJlcGx5LCBNVVhfU19QRVJNSVNTSU9OX0RFTklFRCwg cmlkLAotKwkJCSAgICAiUGVybWlzc2lvbiBkZW5pZWQiKTsKLSsJCQlyZXR1cm4gMDsKLSsJCX0K LSsJfQotKwotIAljLT5tdXhfcmNiID0gY2hhbm5lbF9wcm94eV9kb3duc3RyZWFtOwotIAlpZiAo KHIgPSBzc2hidWZfcHV0X3UzMihyZXBseSwgTVVYX1NfUFJPWFkpKSAhPSAwIHx8Ci0gCSAgICAo ciA9IHNzaGJ1Zl9wdXRfdTMyKHJlcGx5LCByaWQpKSAhPSAwKQoKZGlmZiAtLWdpdCBhLzAwNTYt b3BlbnNzaC05LjlwMS1lY2RzYS1pbmNvbXBsZXRlLWFwcGxpY2F0aW9uLnBhdGNoIGIvMDA1Ni1v cGVuc3NoLTkuOXAxLWVjZHNhLWluY29tcGxldGUtYXBwbGljYXRpb24ucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiOTNjYTQuLjAwMDAwMDAKLS0tIGEvMDA1Ni1vcGVuc3No LTkuOXAxLWVjZHNhLWluY29tcGxldGUtYXBwbGljYXRpb24ucGF0Y2gKKysrIC9kZXYvbnVsbApA QCAtMSwxMDMgKzAsMCBAQAotZGlmZiAtLWNvbG9yIC1ydU5wIGEvYXV0aDItaG9zdGJhc2VkLmMg Yi9hdXRoMi1ob3N0YmFzZWQuYwotLS0tIGEvYXV0aDItaG9zdGJhc2VkLmMJMjAyNi0wNC0wOSAx MzoyMjoyOC4xMTQwNDU3NDkgKzAyMDAKLSsrKyBiL2F1dGgyLWhvc3RiYXNlZC5jCTIwMjYtMDQt MDkgMTQ6MzQ6NDQuODc2MzkzODIyICswMjAwCi1AQCAtOTYsOSArOTYsMTAgQEAgdXNlcmF1dGhf aG9zdGJhc2VkKHN0cnVjdCBzc2ggKnNzaCwgY29ucwotIAkJZXJyb3JfZigiY2Fubm90IGRlY29k ZSBrZXk6ICVzIiwgcGthbGcpOwotIAkJZ290byBkb25lOwotIAl9Ci0tCWlmIChrZXktPnR5cGUg IT0gcGt0eXBlKSB7Ci0tCQllcnJvcl9mKCJ0eXBlIG1pc21hdGNoIGZvciBkZWNvZGVkIGtleSAi Ci0tCQkgICAgIihyZWNlaXZlZCAlZCwgZXhwZWN0ZWQgJWQpIiwga2V5LT50eXBlLCBwa3R5cGUp OwotKwlpZiAoa2V5LT50eXBlICE9IHBrdHlwZSB8fCAoc3Noa2V5X3R5cGVfcGxhaW4ocGt0eXBl KSA9PSBLRVlfRUNEU0EgJiYKLSsJICAgIHNzaGtleV9lY2RzYV9uaWRfZnJvbV9uYW1lKHBrYWxn KSAhPSBrZXktPmVjZHNhX25pZCkpIHsKLSsJCWVycm9yX2YoImtleSB0eXBlIG1pc21hdGNoIGZv ciBkZWNvZGVkIGtleSAiCi0rCQkgICAgIihyZWNlaXZlZCAlcywgZXhwZWN0ZWQgJXMpIiwgc3No a2V5X3NzaF9uYW1lKGtleSksIHBrYWxnKTsKLSAJCWdvdG8gZG9uZTsKLSAJfQotIAlpZiAobWF0 Y2hfcGF0dGVybl9saXN0KHBrYWxnLCBvcHRpb25zLmhvc3RiYXNlZF9hY2NlcHRlZF9hbGdvcywg MCkgIT0gMSkgewotZGlmZiAtLWNvbG9yIC1ydU5wIGEvYXV0aDItcHVia2V5LmMgYi9hdXRoMi1w dWJrZXkuYwotLS0tIGEvYXV0aDItcHVia2V5LmMJMjAyNi0wNC0wOSAxMzoyMjoyOC4xNTcxOTQx MTggKzAyMDAKLSsrKyBiL2F1dGgyLXB1YmtleS5jCTIwMjYtMDQtMDkgMTQ6MzU6NDguOTk3Njg5 MzQ3ICswMjAwCi1AQCAtMTUyLDkgKzE1MiwxMCBAQCB1c2VyYXV0aF9wdWJrZXkoc3RydWN0IHNz aCAqc3NoLCBjb25zdCBjCi0gCQllcnJvcl9mKCJjYW5ub3QgZGVjb2RlIGtleTogJXMiLCBwa2Fs Zyk7Ci0gCQlnb3RvIGRvbmU7Ci0gCX0KLS0JaWYgKGtleS0+dHlwZSAhPSBwa3R5cGUpIHsKLS0J CWVycm9yX2YoInR5cGUgbWlzbWF0Y2ggZm9yIGRlY29kZWQga2V5ICIKLS0JCSAgICAiKHJlY2Vp dmVkICVkLCBleHBlY3RlZCAlZCkiLCBrZXktPnR5cGUsIHBrdHlwZSk7Ci0rCWlmIChrZXktPnR5 cGUgIT0gcGt0eXBlIHx8IChzc2hrZXlfdHlwZV9wbGFpbihwa3R5cGUpID09IEtFWV9FQ0RTQSAm JgotKwkgICAgc3Noa2V5X2VjZHNhX25pZF9mcm9tX25hbWUocGthbGcpICE9IGtleS0+ZWNkc2Ff bmlkKSkgewotKwkJZXJyb3JfZigia2V5IHR5cGUgbWlzbWF0Y2ggZm9yIGRlY29kZWQga2V5ICIK LSsJCSAgICAiKHJlY2VpdmVkICVzLCBleHBlY3RlZCAlcykiLCBzc2hrZXlfc3NoX25hbWUoa2V5 KSwgcGthbGcpOwotIAkJZ290byBkb25lOwotIAl9Ci0gCWlmIChhdXRoMl9rZXlfYWxyZWFkeV91 c2VkKGF1dGhjdHh0LCBrZXkpKSB7Ci1kaWZmIC0tY29sb3IgLXJ1TnAgYS9zc2hjb25uZWN0Mi5j IGIvc3NoY29ubmVjdDIuYwotLS0tIGEvc3NoY29ubmVjdDIuYwkyMDI2LTA0LTA5IDEzOjIyOjI4 LjE5MzQxMjU1MyArMDIwMAotKysrIGIvc3NoY29ubmVjdDIuYwkyMDI2LTA0LTA5IDE0OjQyOjM3 LjY0NDk0NTc2MiArMDIwMAotQEAgLTkxLDYgKzkxLDcgQEAgZXh0ZXJuIE9wdGlvbnMgb3B0aW9u czsKLSBzdGF0aWMgY2hhciAqeHh4X2hvc3Q7Ci0gc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqeHh4 X2hvc3RhZGRyOwotIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NoX2Nvbm5faW5mbyAqeHh4X2Nvbm5f aW5mbzsKLStzdGF0aWMgaW50IGtleV90eXBlX2FsbG93ZWQoc3RydWN0IHNzaGtleSAqLCBjb25z dCBjaGFyICopOwotIAotIHN0YXRpYyBpbnQKLSB2ZXJpZnlfaG9zdF9rZXlfY2FsbGJhY2soc3Ry dWN0IHNzaGtleSAqaG9zdGtleSwgc3RydWN0IHNzaCAqc3NoKQotQEAgLTEwMCw2ICsxMDEsMTAg QEAgdmVyaWZ5X2hvc3Rfa2V5X2NhbGxiYWNrKHN0cnVjdCBzc2hrZXkgKgotIAlpZiAoKHIgPSBz c2hrZXlfY2hlY2tfcnNhX2xlbmd0aChob3N0a2V5LAotIAkgICAgb3B0aW9ucy5yZXF1aXJlZF9y c2Ffc2l6ZSkpICE9IDApCi0gCQlmYXRhbF9yKHIsICJCYWQgc2VydmVyIGhvc3Qga2V5Iik7Ci0r CWlmICgha2V5X3R5cGVfYWxsb3dlZChob3N0a2V5LCBvcHRpb25zLmhvc3RrZXlhbGdvcml0aG1z KSkgewotKwkJZmF0YWwoIlNlcnZlciBob3N0IGtleSAlcyBub3QgaW4gSG9zdEtleUFsZ29yaXRo bXMiLAotKwkJICAgIHNzaGtleV9zc2hfbmFtZShob3N0a2V5KSk7Ci0rCX0KLSAJaWYgKHZlcmlm eV9ob3N0X2tleSh4eHhfaG9zdCwgeHh4X2hvc3RhZGRyLCBob3N0a2V5LAotIAkgICAgeHh4X2Nv bm5faW5mbykgIT0gMCkKLSAJCWZhdGFsKCJIb3N0IGtleSB2ZXJpZmljYXRpb24gZmFpbGVkLiIp OwotQEAgLTE3NzYsMzQgKzE3ODEsMzcgQEAgbG9hZF9pZGVudGl0eV9maWxlKElkZW50aXR5ICpp ZCkKLSB9Ci0gCi0gc3RhdGljIGludAotLWtleV90eXBlX2FsbG93ZWRfYnlfY29uZmlnKHN0cnVj dCBzc2hrZXkgKmtleSkKLStrZXlfdHlwZV9hbGxvd2VkKHN0cnVjdCBzc2hrZXkgKmtleSwgY29u c3QgY2hhciAqYWxsb3dsaXN0KQotIHsKLS0JaWYgKG1hdGNoX3BhdHRlcm5fbGlzdChzc2hrZXlf c3NoX25hbWUoa2V5KSwKLS0JICAgIG9wdGlvbnMucHVia2V5X2FjY2VwdGVkX2FsZ29zLCAwKSA9 PSAxKQotKwlpZiAobWF0Y2hfcGF0dGVybl9saXN0KHNzaGtleV9zc2hfbmFtZShrZXkpLCBhbGxv d2xpc3QsIDApID09IDEpCi0gCQlyZXR1cm4gMTsKLSAKLSAJLyogUlNBIGtleXMvY2VydHMgbWln aHQgYmUgYWxsb3dlZCBieSBhbHRlcm5hdGUgc2lnbmF0dXJlIHR5cGVzICovCi0gCXN3aXRjaCAo a2V5LT50eXBlKSB7Ci0gCWNhc2UgS0VZX1JTQToKLS0JCWlmIChtYXRjaF9wYXR0ZXJuX2xpc3Qo InJzYS1zaGEyLTUxMiIsCi0tCQkgICAgb3B0aW9ucy5wdWJrZXlfYWNjZXB0ZWRfYWxnb3MsIDAp ID09IDEpCi0rCQlpZiAobWF0Y2hfcGF0dGVybl9saXN0KCJyc2Etc2hhMi01MTIiLCBhbGxvd2xp c3QsIDApID09IDEpCi0gCQkJcmV0dXJuIDE7Ci0tCQlpZiAobWF0Y2hfcGF0dGVybl9saXN0KCJy c2Etc2hhMi0yNTYiLAotLQkJICAgIG9wdGlvbnMucHVia2V5X2FjY2VwdGVkX2FsZ29zLCAwKSA9 PSAxKQotKwkJaWYgKG1hdGNoX3BhdHRlcm5fbGlzdCgicnNhLXNoYTItMjU2IiwgYWxsb3dsaXN0 LCAwKSA9PSAxKQotIAkJCXJldHVybiAxOwotIAkJYnJlYWs7Ci0gCWNhc2UgS0VZX1JTQV9DRVJU OgotIAkJaWYgKG1hdGNoX3BhdHRlcm5fbGlzdCgicnNhLXNoYTItNTEyLWNlcnQtdjAxQG9wZW5z c2guY29tIiwKLS0JCSAgICBvcHRpb25zLnB1YmtleV9hY2NlcHRlZF9hbGdvcywgMCkgPT0gMSkK LSsJCSAgICBhbGxvd2xpc3QsIDApID09IDEpCi0gCQkJcmV0dXJuIDE7Ci0gCQlpZiAobWF0Y2hf cGF0dGVybl9saXN0KCJyc2Etc2hhMi0yNTYtY2VydC12MDFAb3BlbnNzaC5jb20iLAotLQkJICAg IG9wdGlvbnMucHVia2V5X2FjY2VwdGVkX2FsZ29zLCAwKSA9PSAxKQotKwkJICAgIGFsbG93bGlz dCwgMCkgPT0gMSkKLSAJCQlyZXR1cm4gMTsKLSAJCWJyZWFrOwotIAl9Ci0gCXJldHVybiAwOwot IH0KLSAKLStzdGF0aWMgaW50Ci0ra2V5X3R5cGVfYWxsb3dlZF9ieV9jb25maWcoc3RydWN0IHNz aGtleSAqa2V5KQotK3sKLSsJcmV0dXJuIGtleV90eXBlX2FsbG93ZWQoa2V5LCBvcHRpb25zLnB1 YmtleV9hY2NlcHRlZF9hbGdvcyk7Ci0rfQotKwotIC8qIG9idGFpbiBhIGxpc3Qgb2Yga2V5cyBm cm9tIHRoZSBhZ2VudCAqLwotIHN0YXRpYyBpbnQKLSBnZXRfYWdlbnRfaWRlbnRpdGllcyhzdHJ1 Y3Qgc3NoICpzc2gsIGludCAqYWdlbnRfZmRwLAoKZGlmZiAtLWdpdCBhLzAwNTctb3BlbnNzaC05 LjlwMS1hdXRob3JpemVkLWtleXMtcHJpbmNpcGxlcy1vcHRpb24ucGF0Y2ggYi8wMDU3LW9wZW5z c2gtOS45cDEtYXV0aG9yaXplZC1rZXlzLXByaW5jaXBsZXMtb3B0aW9uLnBhdGNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmRkMTk5Li4wMDAwMDAwCi0tLSBhLzAwNTctb3BlbnNz aC05LjlwMS1hdXRob3JpemVkLWtleXMtcHJpbmNpcGxlcy1vcHRpb24ucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSw0NSArMCwwIEBACi1kaWZmIC0tY29sb3IgLXJ1TnAgYS9hdXRoMi1wdWJrZXlm aWxlLmMgYi9hdXRoMi1wdWJrZXlmaWxlLmMKLS0tLSBhL2F1dGgyLXB1YmtleWZpbGUuYwkyMDI0 LTA5LTIwIDAwOjIwOjQ4LjAwMDAwMDAwMCArMDIwMAotKysrIGIvYXV0aDItcHVia2V5ZmlsZS5j CTIwMjYtMDQtMDkgMTQ6Mzg6NDEuNjk3MTc4NjEyICswMjAwCi1AQCAtNTAsNiArNTAsNyBAQAot ICNpbmNsdWRlICJhdXRoZmlsZS5oIgotICNpbmNsdWRlICJtYXRjaC5oIgotICNpbmNsdWRlICJz c2hlcnIuaCIKLSsjaW5jbHVkZSAieG1hbGxvYy5oIgotIAotIGludAotIGF1dGhfYXV0aG9yaXNl X2tleW9wdHMoc3RydWN0IHBhc3N3ZCAqcHcsIHN0cnVjdCBzc2hhdXRob3B0ICpvcHRzLAotQEAg LTE0NiwyMCArMTQ3LDIzIEBAIGF1dGhfYXV0aG9yaXNlX2tleW9wdHMoc3RydWN0IHBhc3N3ZCAq cHcKLSBzdGF0aWMgaW50Ci0gbWF0Y2hfcHJpbmNpcGFsc19vcHRpb24oY29uc3QgY2hhciAqcHJp bmNpcGFsX2xpc3QsIHN0cnVjdCBzc2hrZXlfY2VydCAqY2VydCkKLSB7Ci0tCWNoYXIgKnJlc3Vs dDsKLSsJY2hhciAqbGlzdCwgKm9saXN0LCAqZW50cnk7Ci0gCXVfaW50IGk7Ci0gCi0tCS8qIFhY WCBwZXJjZW50X2V4cGFuZCgpIHNlcXVlbmNlcyBmb3IgYXV0aG9yaXplZF9wcmluY2lwYWxzPyAq LwotLQotLQlmb3IgKGkgPSAwOyBpIDwgY2VydC0+bnByaW5jaXBhbHM7IGkrKykgewotLQkJaWYg KChyZXN1bHQgPSBtYXRjaF9saXN0KGNlcnQtPnByaW5jaXBhbHNbaV0sCi0tCQkgICAgcHJpbmNp cGFsX2xpc3QsIE5VTEwpKSAhPSBOVUxMKSB7Ci0tCQkJZGVidWczKCJtYXRjaGVkIHByaW5jaXBh bCBmcm9tIGtleSBvcHRpb25zIFwiJS4xMDBzXCIiLAotLQkJCSAgICByZXN1bHQpOwotLQkJCWZy ZWUocmVzdWx0KTsKLS0JCQlyZXR1cm4gMTsKLSsJb2xpc3QgPSBsaXN0ID0geHN0cmR1cChwcmlu Y2lwYWxfbGlzdCk7Ci0rCWZvciAoOzspIHsKLSsJCWlmICgoZW50cnkgPSBzdHJzZXAoJmxpc3Qs ICIsIikpID09IE5VTEwgfHwgKmVudHJ5ID09ICdcMCcpCi0rCQkJYnJlYWs7Ci0rCQlmb3IgKGkg PSAwOyBpIDwgY2VydC0+bnByaW5jaXBhbHM7IGkrKykgewotKwkJCWlmIChzdHJjbXAoZW50cnks IGNlcnQtPnByaW5jaXBhbHNbaV0pID09IDApIHsKLSsJCQkJZGVidWczKCJtYXRjaGVkIHByaW5j aXBhbCBmcm9tIGtleSBpIgotKwkJCQkgICAgIm9wdGlvbnMgXCIlLjEwMHNcIiIsIGVudHJ5KTsK LSsJCQkJZnJlZShvbGlzdCk7Ci0rCQkJCXJldHVybiAxOwotKwkJCX0KLSAJCX0KLSAJfQotKwlm cmVlKG9saXN0KTsKLSAJcmV0dXJuIDA7Ci0gfQotIAoKZGlmZiAtLWdpdCBhLzAwNTgtb3BlbnNz aC0xMC4ycDEtcHJveHlqdW1wLXVzZXJuYW1lLXZhbGlkaXR5LWNoZWNrcy5wYXRjaCBiLzAwNTgt b3BlbnNzaC0xMC4ycDEtcHJveHlqdW1wLXVzZXJuYW1lLXZhbGlkaXR5LWNoZWNrcy5wYXRjaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJmYTNjNC4uMDAwMDAwMAotLS0gYS8wMDU4 LW9wZW5zc2gtMTAuMnAxLXByb3h5anVtcC11c2VybmFtZS12YWxpZGl0eS1jaGVja3MucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSw0MjIgKzAsMCBAQAotZGlmZiAtLWNvbG9yIC1ydU5wIGEvcmVh ZGNvbmYuYyBiL3JlYWRjb25mLmMKLS0tLSBhL3JlYWRjb25mLmMJMjAyNi0wNC0xMCAxNTo0Mjo1 MC42OTM3MjU4MjAgKzAyMDAKLSsrKyBiL3JlYWRjb25mLmMJMjAyNi0wNC0xMCAxNTo0OTo1Ny40 NDExMTAyODcgKzAyMDAKLUBAIC0xNTMzLDkgKzE1MzMsNiBAQCBwYXJzZV9jaGFyX2FycmF5Ogot IAotIAljYXNlIG9Qcm94eUNvbW1hbmQ6Ci0gCQljaGFycHRyID0gJm9wdGlvbnMtPnByb3h5X2Nv bW1hbmQ7Ci0tCQkvKiBJZ25vcmUgUHJveHlDb21tYW5kIGlmIFByb3h5SnVtcCBhbHJlYWR5IHNw ZWNpZmllZCAqLwotLQkJaWYgKG9wdGlvbnMtPmp1bXBfaG9zdCAhPSBOVUxMKQotLQkJCWNoYXJw dHIgPSAmb3B0aW9ucy0+anVtcF9ob3N0OyAvKiBTa2lwIGJlbG93ICovCi0gcGFyc2VfY29tbWFu ZDoKLSAJCWlmIChzdHIgPT0gTlVMTCkgewotIAkJCWVycm9yKCIlLjIwMHMgbGluZSAlZDogTWlz c2luZyBhcmd1bWVudC4iLAotQEAgLTE1NTYsNyArMTU1Myw3IEBAIHBhcnNlX2NvbW1hbmQ6Ci0g CQl9Ci0gCQlsZW4gPSBzdHJzcG4oc3RyLCBXSElURVNQQUNFICI9Iik7Ci0gCQkvKiBYWFggdXNl IGFyZ3Y/ICovCi0tCQlpZiAocGFyc2VfanVtcChzdHIgKyBsZW4sIG9wdGlvbnMsICphY3RpdmVw KSA9PSAtMSkgewotKwkJaWYgKHBhcnNlX2p1bXAoc3RyICsgbGVuLCBvcHRpb25zLCBjbWRsaW5l LCAqYWN0aXZlcCkgPT0gLTEpIHsKLSAJCQllcnJvcigiJS4yMDBzIGxpbmUgJWQ6IEludmFsaWQg UHJveHlKdW1wIFwiJXNcIiIsCi0gCQkJICAgIGZpbGVuYW1lLCBsaW5lbnVtLCBzdHIgKyBsZW4p OwotIAkJCWdvdG8gb3V0OwotQEAgLTMzNzAsNjUgKzMzNjcsMTE2IEBAIHBhcnNlX2ZvcndhcmQo c3RydWN0IEZvcndhcmQgKmZ3ZCwgY29uc3QKLSB9Ci0gCi0gaW50Ci0tcGFyc2VfanVtcChjb25z dCBjaGFyICpzLCBPcHRpb25zICpvLCBpbnQgYWN0aXZlKQotK3NzaF92YWxpZF9ob3N0bmFtZShj b25zdCBjaGFyICpzKQotIHsKLS0JY2hhciAqb3JpZywgKnNkdXAsICpjcDsKLS0JY2hhciAqaG9z dCA9IE5VTEwsICp1c2VyID0gTlVMTDsKLS0JaW50IHIsIHJldCA9IC0xLCBwb3J0ID0gLTEsIGZp cnN0OwotKwlzaXplX3QgaTsKLSAKLS0JYWN0aXZlICY9IG8tPnByb3h5X2NvbW1hbmQgPT0gTlVM TCAmJiBvLT5qdW1wX2hvc3QgPT0gTlVMTDsKLSsJaWYgKCpzID09ICctJykKLSsJCXJldHVybiAw OwotKwlmb3IgKGkgPSAwOyBzW2ldICE9IDA7IGkrKykgewotKwkJaWYgKHN0cmNocigiJ2BcIiRc XDsmPD58KCl7fSwiLCBzW2ldKSAhPSBOVUxMIHx8Ci0rCQkgICAgaXNzcGFjZSgodV9jaGFyKXNb aV0pIHx8IGlzY250cmwoKHVfY2hhcilzW2ldKSkKLSsJCQlyZXR1cm4gMDsKLSsJfQotKwlyZXR1 cm4gMTsKLSt9Ci0gCi0tCW9yaWcgPSBzZHVwID0geHN0cmR1cChzKTsKLStpbnQKLStzc2hfdmFs aWRfcnVzZXIoY29uc3QgY2hhciAqcykKLSt7Ci0rCXNpemVfdCBpOwotKwotKwlpZiAoKnMgPT0g Jy0nKQotKwkJcmV0dXJuIDA7Ci0rCWZvciAoaSA9IDA7IHNbaV0gIT0gMDsgaSsrKSB7Ci0rCQlp ZiAoaXNjbnRybCgodV9jaGFyKXNbaV0pKQotKwkJCXJldHVybiAwOwotKwkJaWYgKHN0cmNocigi J2BcIjsmPD58KCl7fSIsIHNbaV0pICE9IE5VTEwpCi0rCQkJcmV0dXJuIDA7Ci0rCQkvKiBEaXNh bGxvdyAnLScgYWZ0ZXIgd2hpdGVzcGFjZSAqLwotKwkJaWYgKGlzc3BhY2UoKHVfY2hhcilzW2ld KSAmJiBzW2kgKyAxXSA9PSAnLScpCi0rCQkJcmV0dXJuIDA7Ci0rCQkvKiBEaXNhbGxvdyBcIGlu IGxhc3QgcG9zaXRpb24gKi8KLSsJCWlmIChzW2ldID09ICdcXCcgJiYgc1tpICsgMV0gPT0gJ1ww JykKLSsJCQlyZXR1cm4gMDsKLSsJfQotKwlyZXR1cm4gMTsKLSt9Ci0rCi0raW50Ci0rcGFyc2Vf anVtcChjb25zdCBjaGFyICpzLCBPcHRpb25zICpvLCBpbnQgc3RyaWN0LCBpbnQgYWN0aXZlKQot K3sKLSsJY2hhciAqb3JpZyA9IE5VTEwsICpzZHVwID0gTlVMTCwgKmNwOwotKwljaGFyICp0bXBf dXNlciA9IE5VTEwsICp0bXBfaG9zdCA9IE5VTEwsICpob3N0ID0gTlVMTCwgKnVzZXIgPSBOVUxM OwotKwlpbnQgciwgcmV0ID0gLTEsIHRtcF9wb3J0ID0gLTEsIHBvcnQgPSAtMSwgZmlyc3QgPSAx OwotKwotKwlpZiAoc3RyY2FzZWNtcChzLCAibm9uZSIpID09IDApIHsKLSsJCWlmIChhY3RpdmUg JiYgby0+anVtcF9ob3N0ID09IE5VTEwpIHsKLSsJCQlvLT5qdW1wX2hvc3QgPSB4c3RyZHVwKCJu b25lIik7Ci0rCQkJby0+anVtcF9wb3J0ID0gMDsKLSsJCX0KLSsJCXJldHVybiAwOwotKwl9Ci0g Ci0tCS8qIFJlbW92ZSBjb21tZW50IGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlICovCi0rCW9yaWcg PSB4c3RyZHVwKHMpOwotIAlpZiAoKGNwID0gc3RyY2hyKG9yaWcsICcjJykpICE9IE5VTEwpCi0g CQkqY3AgPSAnXDAnOwotIAlydHJpbShvcmlnKTsKLSAKLS0JZmlyc3QgPSBhY3RpdmU7Ci0rCWFj dGl2ZSAmPSBvLT5wcm94eV9jb21tYW5kID09IE5VTEwgJiYgby0+anVtcF9ob3N0ID09IE5VTEw7 Ci0rCXNkdXAgPSB4c3RyZHVwKG9yaWcpOwotIAlkbyB7Ci0tCQlpZiAoc3RyY2FzZWNtcChzLCAi bm9uZSIpID09IDApCi0tCQkJYnJlYWs7Ci0rCQkvKiBXb3JrIGJhY2t3YXJkcyB0aHJvdWdoIHN0 cmluZyAqLwotIAkJaWYgKChjcCA9IHN0cnJjaHIoc2R1cCwgJywnKSkgPT0gTlVMTCkKLSAJCQlj cCA9IHNkdXA7IC8qIGxhc3QgKi8KLSAJCWVsc2UKLSAJCQkqY3ArKyA9ICdcMCc7Ci0gCi0tCQlp ZiAoZmlyc3QpIHsKLS0JCQkvKiBGaXJzdCBhcmd1bWVudCBhbmQgY29uZmlndXJhdGlvbiBpcyBh Y3RpdmUgKi8KLS0JCQlyID0gcGFyc2Vfc3NoX3VyaShjcCwgJnVzZXIsICZob3N0LCAmcG9ydCk7 Ci0tCQkJaWYgKHIgPT0gLTEgfHwgKHIgPT0gMSAmJgotLQkJCSAgICBwYXJzZV91c2VyX2hvc3Rf cG9ydChjcCwgJnVzZXIsICZob3N0LCAmcG9ydCkgIT0gMCkpCi0rCQlyID0gcGFyc2Vfc3NoX3Vy aShjcCwgJnRtcF91c2VyLCAmdG1wX2hvc3QsICZ0bXBfcG9ydCk7Ci0rCQlpZiAociA9PSAtMSB8 fCAociA9PSAxICYmIHBhcnNlX3VzZXJfaG9zdF9wb3J0KGNwLAotKwkJICAgICZ0bXBfdXNlciwg JnRtcF9ob3N0LCAmdG1wX3BvcnQpICE9IDApKQotKwkJCWdvdG8gb3V0OyAvKiBlcnJvciBhbHJl YWR5IGxvZ2dlZCAqLwotKwkJaWYgKHN0cmljdCkgewotKwkJCWlmICghc3NoX3ZhbGlkX2hvc3Ru YW1lKHRtcF9ob3N0KSkgewotKwkJCQllcnJvcl9mKCJpbnZhbGlkIGhvc3RuYW1lIFwiJXNcIiIs IHRtcF9ob3N0KTsKLSAJCQkJZ290byBvdXQ7Ci0tCQl9IGVsc2UgewotLQkJCS8qIFN1YnNlcXVl bnQgYXJndW1lbnQgb3IgaW5hY3RpdmUgY29uZmlndXJhdGlvbiAqLwotLQkJCXIgPSBwYXJzZV9z c2hfdXJpKGNwLCBOVUxMLCBOVUxMLCBOVUxMKTsKLS0JCQlpZiAociA9PSAtMSB8fCAociA9PSAx ICYmCi0tCQkJICAgIHBhcnNlX3VzZXJfaG9zdF9wb3J0KGNwLCBOVUxMLCBOVUxMLCBOVUxMKSAh PSAwKSkKLSsJCQl9Ci0rCQkJaWYgKHRtcF91c2VyICE9IE5VTEwgJiYgIXNzaF92YWxpZF9ydXNl cih0bXBfdXNlcikpIHsKLSsJCQkJZXJyb3JfZigiaW52YWxpZCB1c2VybmFtZSBcIiVzXCIiLCB0 bXBfdXNlcik7Ci0gCQkJCWdvdG8gb3V0OwotKwkJCX0KLSsJCX0KLSsJCWlmIChmaXJzdCkgewot KwkJCXVzZXIgPSB0bXBfdXNlcjsKLSsJCQlob3N0ID0gdG1wX2hvc3Q7Ci0rCQkJcG9ydCA9IHRt cF9wb3J0OwotKwkJCXRtcF91c2VyID0gdG1wX2hvc3QgPSBOVUxMOyAvKiB0cmFuc2ZlcnJlZCAq LwotIAkJfQotIAkJZmlyc3QgPSAwOyAvKiBvbmx5IGNoZWNrIHN5bnRheCBmb3Igc3Vic2VxdWVu dCBob3N0cyAqLwotKwkJZnJlZSh0bXBfdXNlcik7Ci0rCQlmcmVlKHRtcF9ob3N0KTsKLSsJCXRt cF91c2VyID0gdG1wX2hvc3QgPSBOVUxMOwotKwkJdG1wX3BvcnQgPSAtMTsKLSAJfSB3aGlsZSAo Y3AgIT0gc2R1cCk7Ci0rCi0gCS8qIHN1Y2Nlc3MgKi8KLSAJaWYgKGFjdGl2ZSkgewotLQkJaWYg KHN0cmNhc2VjbXAocywgIm5vbmUiKSA9PSAwKSB7Ci0tCQkJby0+anVtcF9ob3N0ID0geHN0cmR1 cCgibm9uZSIpOwotLQkJCW8tPmp1bXBfcG9ydCA9IDA7Ci0tCQl9IGVsc2UgewotLQkJCW8tPmp1 bXBfdXNlciA9IHVzZXI7Ci0tCQkJby0+anVtcF9ob3N0ID0gaG9zdDsKLS0JCQlvLT5qdW1wX3Bv cnQgPSBwb3J0OwotLQkJCW8tPnByb3h5X2NvbW1hbmQgPSB4c3RyZHVwKCJub25lIik7Ci0tCQkJ dXNlciA9IGhvc3QgPSBOVUxMOwotLQkJCWlmICgoY3AgPSBzdHJyY2hyKHMsICcsJykpICE9IE5V TEwgJiYgY3AgIT0gcykgewotLQkJCQlvLT5qdW1wX2V4dHJhID0geHN0cmR1cChzKTsKLS0JCQkJ by0+anVtcF9leHRyYVtjcCAtIHNdID0gJ1wwJzsKLS0JCQl9Ci0rCQlvLT5qdW1wX3VzZXIgPSB1 c2VyOwotKwkJby0+anVtcF9ob3N0ID0gaG9zdDsKLSsJCW8tPmp1bXBfcG9ydCA9IHBvcnQ7Ci0r CQlvLT5wcm94eV9jb21tYW5kID0geHN0cmR1cCgibm9uZSIpOwotKwkJdXNlciA9IGhvc3QgPSBO VUxMOyAvKiB0cmFuc2ZlcnJlZCAqLwotKwkJaWYgKG9yaWcgIT0gTlVMTCAmJiAoY3AgPSBzdHJy Y2hyKG9yaWcsICcsJykpICE9IE5VTEwpIHsKLSsJCQlvLT5qdW1wX2V4dHJhID0geHN0cmR1cChv cmlnKTsKLSsJCQlvLT5qdW1wX2V4dHJhW2NwIC0gb3JpZ10gPSAnXDAnOwotIAkJfQotIAl9Ci0g CXJldCA9IDA7Ci0gIG91dDoKLSAJZnJlZShvcmlnKTsKLSsJZnJlZShzZHVwKTsKLSsJZnJlZSh0 bXBfdXNlcik7Ci0rCWZyZWUodG1wX2hvc3QpOwotIAlmcmVlKHVzZXIpOwotIAlmcmVlKGhvc3Qp OwotIAlyZXR1cm4gcmV0OwotZGlmZiAtLWNvbG9yIC1ydU5wIGEvcmVhZGNvbmYuaCBiL3JlYWRj b25mLmgKLS0tLSBhL3JlYWRjb25mLmgJMjAyNi0wNC0xNyAxMzo1Mjo0NS40MzI4MjA3MTAgKzAy MDAKLSsrKyBiL3JlYWRjb25mLmgJMjAyNi0wNC0xNyAxNDowMTozOC4xNzExMzg0MzEgKzAyMDAK LUBAIC0yNTIsNyArMjUyLDkgQEAgaW50CSBwcm9jZXNzX2NvbmZpZ19saW5lKE9wdGlvbnMgKiwg c3RydQotIGludAkgcmVhZF9jb25maWdfZmlsZShjb25zdCBjaGFyICosIHN0cnVjdCBwYXNzd2Qg KiwgY29uc3QgY2hhciAqLAotICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgT3B0aW9u cyAqLCBpbnQsIGludCAqKTsKLSBpbnQJIHBhcnNlX2ZvcndhcmQoc3RydWN0IEZvcndhcmQgKiwg Y29uc3QgY2hhciAqLCBpbnQsIGludCk7Ci0taW50CSBwYXJzZV9qdW1wKGNvbnN0IGNoYXIgKiwg T3B0aW9ucyAqLCBpbnQpOwotK2ludAkgc3NoX3ZhbGlkX2hvc3RuYW1lKGNvbnN0IGNoYXIgKik7 Ci0raW50CSBzc2hfdmFsaWRfcnVzZXIoY29uc3QgY2hhciAqKTsKLStpbnQJIHBhcnNlX2p1bXAo Y29uc3QgY2hhciAqLCBPcHRpb25zICosIGludCwgaW50KTsKLSBpbnQJIHBhcnNlX3NzaF91cmko Y29uc3QgY2hhciAqLCBjaGFyICoqLCBjaGFyICoqLCBpbnQgKik7Ci0gaW50CSBkZWZhdWx0X3Nz aF9wb3J0KHZvaWQpOwotIGludAkgb3B0aW9uX2NsZWFyX29yX25vbmUoY29uc3QgY2hhciAqKTsK LWRpZmYgLS1jb2xvciAtcnVOcCBhL3JlZ3Jlc3MvTWFrZWZpbGUgYi9yZWdyZXNzL01ha2VmaWxl Ci0tLS0gYS9yZWdyZXNzL01ha2VmaWxlCTIwMjYtMDQtMTcgMTM6NTI6NDYuMjI3NjU0NDcwICsw MjAwCi0rKysgYi9yZWdyZXNzL01ha2VmaWxlCTIwMjYtMDQtMTcgMTQ6MDI6MDIuODA1NjI5MTA2 ICswMjAwCi1AQCAtMTE0LDcgKzExNCw4IEBAIExURVNUUz0gCWNvbm5lY3QgXAotIAkJYWdlbnQt cGtjczExLWNlcnQgXAotIAkJcGVuYWx0eSBcCi0gCQlwZW5hbHR5LWV4cGlyZSBcCi0tCQljb25u ZWN0LWJpZ2NvbmYKLSsJCWNvbm5lY3QtYmlnY29uZiBcCi0rCQlwcm94eWp1bXAKLSAKLSBJTlRF Uk9QX1RFU1RTPQlwdXR0eS10cmFuc2ZlciBwdXR0eS1jaXBoZXJzIHB1dHR5LWtleCBjb25jaC1j aXBoZXJzCi0gSU5URVJPUF9URVNUUys9CWRyb3BiZWFyLWNpcGhlcnMgZHJvcGJlYXIta2V4IGRy b3BiZWFyLXNlcnZlcgotIElOVEVST1BfVEVTVFM9CXB1dHR5LXRyYW5zZmVyIHB1dHR5LWNpcGhl cnMgcHV0dHkta2V4IGNvbmNoLWNpcGhlcnMKLSBJTlRFUk9QX1RFU1RTKz0JZHJvcGJlYXItY2lw aGVycyBkcm9wYmVhci1rZXgKLWRpZmYgLS1jb2xvciAtcnVOcCBhL3JlZ3Jlc3MvcHJveHlqdW1w LnNoIGIvcmVncmVzcy9wcm94eWp1bXAuc2gKLS0tLSBhL3JlZ3Jlc3MvcHJveHlqdW1wLnNoCTE5 NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgYi9yZWdyZXNzL3Byb3h5anVt cC5zaAkyMDI2LTA0LTEwIDE2OjA3OjU1LjIyNTk1ODIwNiArMDIwMAotQEAgLTAsMCArMSwxMDIg QEAKLSsjCSRPcGVuQlNEOiBwcm94eWp1bXAuc2gsdiAxLjEgMjAyNi8wMy8zMCAwNzoxOTowMiBk am0gRXhwICQKLSsjCVBsYWNlZCBpbiB0aGUgUHVibGljIERvbWFpbi4KLSsKLSt0aWQ9InByb3h5 anVtcCIKLSsKLSsjIFBhcnNpbmcgdGVzdHMKLSt2ZXJib3NlICJiYXNpYyBwYXJzaW5nIgotK2Zv ciBqc3BlYyBpbiBcCi0rCSJqdW1wMSIgXAotKwkidXNlckBqdW1wMSIgXAotKwkianVtcDE6MjIy MiIgXAotKwkidXNlckBqdW1wMToyMjIyIiBcCi0rCSJqdW1wMSxqdW1wMiIgXAotKwkidXNlcjFA anVtcDE6MjIyMSx1c2VyMkBqdW1wMjoyMjIyIiBcCi0rCSJzc2g6Ly91c2VyQGhvc3Q6MjIyMyIg XAotKwk7IGRvCi0rCWNhc2UgIiRqc3BlYyIgaW4KLSsJImp1bXAxIikJCWV4cGVjdGVkPSJqdW1w MSIgOzsKLSsJInVzZXJAanVtcDEiKQkJZXhwZWN0ZWQ9InVzZXJAanVtcDEiIDs7Ci0rCSJqdW1w MToyMjIyIikJCWV4cGVjdGVkPSJqdW1wMToyMjIyIiA7OwotKwkidXNlckBqdW1wMToyMjIyIikJ ZXhwZWN0ZWQ9InVzZXJAanVtcDE6MjIyMiIgOzsKLSsJImp1bXAxLGp1bXAyIikJCWV4cGVjdGVk PSJqdW1wMSxqdW1wMiIgOzsKLSsJInVzZXIxQGp1bXAxOjIyMjEsdXNlcjJAanVtcDI6MjIyMiIp Ci0rCQlleHBlY3RlZD0idXNlcjFAanVtcDE6MjIyMSx1c2VyMkBqdW1wMjoyMjIyIiA7OwotKwki c3NoOi8vdXNlckBob3N0OjIyMjMiKQlleHBlY3RlZD0idXNlckBob3N0OjIyMjMiIDs7Ci0rCWVz YWMKLSsJZj1gJHtTU0h9IC1HRiAvZGV2L251bGwgLW9Qcm94eUp1bXA9IiRqc3BlYyIgc29tZWhv c3QgfCBcCi0rCQlhd2sgJy9ecHJveHlqdW1wIC97cHJpbnQgJDJ9J2AKLSsJaWYgWyAiJGYiICE9 ICIkZXhwZWN0ZWQiIF07IHRoZW4KLSsJCWZhaWwgIlByb3h5SnVtcCAkanNwZWM6IGV4cGVjdGVk ICRleHBlY3RlZCwgZ290ICRmIgotKwlmaQotKwlmPWAke1NTSH0gLUdGIC9kZXYvbnVsbCAtSiAi JGpzcGVjIiBzb21laG9zdCB8IFwKLSsJCWF3ayAnL15wcm94eWp1bXAgL3twcmludCAkMn0nYAot KwlpZiBbICIkZiIgIT0gIiRleHBlY3RlZCIgXTsgdGhlbgotKwkJZmFpbCAic3NoIC1KICRqc3Bl YzogZXhwZWN0ZWQgJGV4cGVjdGVkLCBnb3QgJGYiCi0rCWZpCi0rZG9uZQotKwotK3ZlcmJvc2Ug InByZWNlZGVuY2UiCi0rZj1gJHtTU0h9IC1HRiAvZGV2L251bGwgLW9Qcm94eUp1bXA9bm9uZSAt b1Byb3h5SnVtcD1qdW1wMSBzb21laG9zdCB8IFwKLSsJZ3JlcCAiXnByb3h5anVtcCAiYAotK2lm IFsgLW4gIiRmIiBdOyB0aGVuCi0rCWZhaWwgIlByb3h5SnVtcD1ub25lIGZpcnN0IGRpZCBub3Qg d2luIgotK2ZpCi0rZj1gJHtTU0h9IC1HRiAvZGV2L251bGwgLW9Qcm94eUp1bXA9anVtcCAtb1By b3h5Q29tbWFuZD1mb28gc29tZWhvc3QgfCBcCi0rCWdyZXAgIl5wcm94eWp1bXAgImAKLStpZiBb ICIkZiIgIT0gInByb3h5anVtcCBqdW1wIiBdOyB0aGVuCi0rCWZhaWwgIlByb3h5SnVtcCBmaXJz dCBkaWQgbm90IHdpbiBvdmVyIFByb3h5Q29tbWFuZCIKLStmaQotK2Y9YCR7U1NIfSAtR0YgL2Rl di9udWxsIC1vUHJveHlDb21tYW5kPWZvbyAtb1Byb3h5SnVtcD1qdW1wIHNvbWVob3N0IHwgXAot KwlncmVwICJecHJveHljb21tYW5kICJgCi0raWYgWyAiJGYiICE9ICJwcm94eWNvbW1hbmQgZm9v IiBdOyB0aGVuCi0rCWZhaWwgIlByb3h5Q29tbWFuZCBmaXJzdCBkaWQgbm90IHdpbiBvdmVyIFBy b3h5SnVtcCIKLStmaQotKwotK3ZlcmJvc2UgImNvbW1hbmQtbGluZSAtSiBpbnZhbGlkIGNoYXJh Y3RlcnMiCi0rY3AgJE9CSi9zc2hfY29uZmlnICRPQkovc3NoX2NvbmZpZy5vcmlnCi0rZm9yIGpz cGVjIGluIFwKLSsJImhvc3Q7d2l0aDtzZW1pY29sb24iIFwKLSsJImhvc3Qnd2l0aCdxdW90ZSIg XAotKwkiaG9zdFxgd2l0aFxgYmFja3RpY2siIFwKLSsJImhvc3RcJHdpdGhcJGRvbGxhciIgXAot KwkiaG9zdCh3aXRoKWJyYWNlIiBcCi0rCSJ1c2VyO3dpdGg7c2VtaWNvbG9uQGhvc3QiIFwKLSsJ InVzZXInd2l0aCdxdW90ZUBob3N0IiBcCi0rCSJ1c2VyXGB3aXRoXGBiYWNrdGlja0Bob3N0IiBc Ci0rCSJ1c2VyKHdpdGgpYnJhY2VAaG9zdCIgOyBkbwotKwkke1NTSH0gLUdGIC9kZXYvbnVsbCAt SiAiJGpzcGVjIiBzb21laG9zdCA+L2Rldi9udWxsIDI+JjEKLSsJaWYgWyAkPyAtbmUgMjU1IF07 IHRoZW4KLSsJCWZhaWwgInNzaCAtSiBcIiRqc3BlY1wiIHdhcyBub3QgcmVqZWN0ZWQiCi0rCWZp Ci0rCSR7U1NIfSAtR0YgL2Rldi9udWxsIC1vUHJveHlKdW1wPSIkanNwZWMiIHNvbWVob3N0ID4v ZGV2L251bGwgMj4mMQotKwlpZiBbICQ/IC1uZSAyNTUgXTsgdGhlbgotKwkJZmFpbCAic3NoIC1v UHJveHlKdW1wPVwiJGpzcGVjXCIgd2FzIG5vdCByZWplY3RlZCIKLSsJZmkKLStkb25lCi0rIyBT cGVjaWFsIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGFjY2VwdGVkIGluIHRoZSBjb25maWcgdGhvdWdo LgotK2VjaG8gIlByb3h5SnVtcCB1c2VyO3dpdGg7c2VtaWNvbG9uQGhvc3Q7d2l0aDtzZW1pY29s b24iID4+ICRPQkovc3NoX2NvbmZpZwotK2Y9YCR7U1NIfSAtR0YgJE9CSi9zc2hfY29uZmlnIHNv bWVob3N0IHwgZ3JlcCAiXnByb3h5anVtcCAiYAotK2lmIFsgIiRmIiAhPSAicHJveHlqdW1wIHVz ZXI7d2l0aDtzZW1pY29sb25AaG9zdDt3aXRoO3NlbWljb2xvbiIgXTsgdGhlbgotKwlmYWlsICJQ cm94eUp1bXAgZGlkIG5vdCBhbGxvdyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gY29uZmlnOiAkZiIK LStmaQotKwotK3ZlcmJvc2UgImZ1bmN0aW9uYWwgdGVzdCIKLSsjIFVzZSBkaWZmZXJlbnQgbmFt ZXMgdG8gYXZvaWQgdGhlIGxvb3AgZGV0ZWN0aW9uIGluIHNzaC5jCi0rZ3JlcCAtaXYgSG9zdEtl eUFsaWFzICRPQkovc3NoX2NvbmZpZy5vcmlnID4gJE9CSi9zc2hfY29uZmlnCi0rY2F0IDw8IF9F T0YgPj4gJE9CSi9zc2hfY29uZmlnCi0rSG9zdCBqdW1wLWhvc3QKLSsJSG9zdGtleUFsaWFzIGp1 bXAtaG9zdAotK0hvc3QgdGFyZ2V0LWhvc3QKLSsJSG9zdGtleUFsaWFzIHRhcmdldC1ob3N0Ci0r X0VPRgotK2NwICRPQkova25vd25faG9zdHMgJE9CSi9rbm93bl9ob3N0cy5vcmlnCi0rc2VkICdz L15bXiBdKiAvanVtcC1ob3N0IC8nIDwgJE9CSi9rbm93bl9ob3N0cy5vcmlnID4gJE9CSi9rbm93 bl9ob3N0cwotK3NlZCAncy9eW14gXSogL3RhcmdldC1ob3N0IC8nIDwgJE9CSi9rbm93bl9ob3N0 cy5vcmlnID4+ICRPQkova25vd25faG9zdHMKLStzdGFydF9zc2hkCi0rCi0rdmVyYm9zZSAiZnVu Y3Rpb25hbCBQcm94eUp1bXAiCi0rcmVzPWAke1JFQUxfU1NIfSAtRiAkT0JKL3NzaF9jb25maWcg LUoganVtcC1ob3N0IHRhcmdldC1ob3N0IGVjaG8gIlNVQ0NFU1MiIDI+L2Rldi9udWxsYAotK2lm IFsgIiRyZXMiICE9ICJTVUNDRVNTIiBdOyB0aGVuCi0rCWZhaWwgImZ1bmN0aW9uYWwgdGVzdCBm YWlsZWQ6IGV4cGVjdGVkIFNVQ0NFU1MsIGdvdCAkcmVzIgotK2ZpCi1kaWZmIC0tY29sb3IgLXJ1 TnAgYS9zc2guYyBiL3NzaC5jCi0tLS0gYS9zc2guYwkyMDI2LTA0LTE3IDE0OjQwOjExLjEzMTU0 MTQyNCArMDIwMAotKysrIGIvc3NoLmMJMjAyNi0wNC0xNyAxNDo0MjoxNi4yOTU1NjAxMTYgKzAy MDAKLUBAIC02NDMsNDMgKzY0Myw2IEBAIHNzaF9jb25uX2luZm9fZnJlZShzdHJ1Y3Qgc3NoX2Nv bm5faW5mbwotIAlmcmVlKGNpbmZvKTsKLSB9Ci0gCi0tc3RhdGljIGludAotLXZhbGlkX2hvc3Ru YW1lKGNvbnN0IGNoYXIgKnMpCi0tewotLQlzaXplX3QgaTsKLS0KLS0JaWYgKCpzID09ICctJykK LS0JCXJldHVybiAwOwotLQlmb3IgKGkgPSAwOyBzW2ldICE9IDA7IGkrKykgewotLQkJaWYgKHN0 cmNocigiJ2BcIiRcXDsmPD58KCl7fSwiLCBzW2ldKSAhPSBOVUxMIHx8Ci0tCQkgICAgaXNzcGFj ZSgodV9jaGFyKXNbaV0pIHx8IGlzY250cmwoKHVfY2hhcilzW2ldKSkKLS0JCQlyZXR1cm4gMDsK LS0JfQotLQlyZXR1cm4gMTsKLS19Ci0tCi0tc3RhdGljIGludAotLXZhbGlkX3J1c2VyKGNvbnN0 IGNoYXIgKnMpCi0tewotLQlzaXplX3QgaTsKLS0KLS0JaWYgKCpzID09ICctJykKLS0JCXJldHVy biAwOwotLQlmb3IgKGkgPSAwOyBzW2ldICE9IDA7IGkrKykgewotLQkJaWYgKGlzY250cmwoKHVf Y2hhcilzW2ldKSkKLS0JCQlyZXR1cm4gMDsKLS0JCWlmIChzdHJjaHIoIidgXCI7Jjw+fCgpe30i LCBzW2ldKSAhPSBOVUxMKQotLQkJCXJldHVybiAwOwotLQkJLyogRGlzYWxsb3cgJy0nIGFmdGVy IHdoaXRlc3BhY2UgKi8KLS0JCWlmIChpc3NwYWNlKCh1X2NoYXIpc1tpXSkgJiYgc1tpICsgMV0g PT0gJy0nKQotLQkJCXJldHVybiAwOwotLQkJLyogRGlzYWxsb3cgXCBpbiBsYXN0IHBvc2l0aW9u ICovCi0tCQlpZiAoc1tpXSA9PSAnXFwnICYmIHNbaSArIDFdID09ICdcMCcpCi0tCQkJcmV0dXJu IDA7Ci0tCX0KLS0JcmV0dXJuIDE7Ci0tfQotLQotIC8qCi0gICogTWFpbiBwcm9ncmFtIGZvciB0 aGUgc3NoIGNsaWVudC4KLSAgKi8KLUBAIC05MzcsOSArOTAwLDggQEAgbWFpbihpbnQgYWMsIGNo YXIgKiphdikKLSAJCQl9Ci0gCQkJaWYgKG9wdGlvbnMucHJveHlfY29tbWFuZCAhPSBOVUxMKQot IAkJCQlmYXRhbCgiQ2Fubm90IHNwZWNpZnkgLUogd2l0aCBQcm94eUNvbW1hbmQiKTsKLS0JCQlp ZiAocGFyc2VfanVtcChvcHRhcmcsICZvcHRpb25zLCAxKSA9PSAtMSkKLSsJCQlpZiAocGFyc2Vf anVtcChvcHRhcmcsICZvcHRpb25zLCAxLCAxKSA9PSAtMSkKLSAJCQkJZmF0YWwoIkludmFsaWQg LUogYXJndW1lbnQiKTsKLS0JCQlvcHRpb25zLnByb3h5X2NvbW1hbmQgPSB4c3RyZHVwKCJub25l Iik7Ci0gCQkJYnJlYWs7Ci0gCQljYXNlICd0JzoKLSAJCQlpZiAob3B0aW9ucy5yZXF1ZXN0X3R0 eSA9PSBSRVFVRVNUX1RUWV9ZRVMpCi1AQCAtMTE4OSw4ICsxMTUxLDE1IEBAIG1haW4oaW50IGFj LCBjaGFyICoqYXYpCi0gCWlmICghaG9zdCkKLSAJCXVzYWdlKCk7Ci0gCi0tCWlmICghdmFsaWRf aG9zdG5hbWUoaG9zdCkpCi0rCS8qCi0rCSAqIFZhbGlkYXRlIGNvbW1hbmRsaW5lLXNwZWNpZmll ZCB2YWx1ZXMgdGhhdCBlbmQgdXAgaW4gJXRva2VucwotKwkgKiBiZWZvcmUgdGhleSBhcmUgdXNl ZCBpbiBjb25maWcgcGFyc2luZy4KLSsJICovCi0rCWlmIChvcHRpb25zLnVzZXIgIT0gTlVMTCAm JiAhc3NoX3ZhbGlkX3J1c2VyKG9wdGlvbnMudXNlcikpCi0rCQlmYXRhbCgicmVtb3RlIHVzZXJu YW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyIpOwotKwlpZiAoIXNzaF92YWxpZF9ob3N0 bmFtZShob3N0KSkKLSAJCWZhdGFsKCJob3N0bmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3Rl cnMiKTsKLSsKLSAJb3B0aW9ucy5ob3N0X2FyZyA9IHhzdHJkdXAoaG9zdCk7Ci0gCi0gCS8qIElu aXRpYWxpemUgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSBvbiByZW1vdGUgaG9zdC4gKi8KLUBAIC0x MzYwLDcgKzEzMjksOCBAQCBtYWluKGludCBhYywgY2hhciAqKmF2KQotIAkJCXNzaGJpbiA9ICJz c2giOwotIAotIAkJLyogQ29uc2lzdGVuY3kgY2hlY2sgKi8KLS0JCWlmIChvcHRpb25zLnByb3h5 X2NvbW1hbmQgIT0gTlVMTCkKLSsJCWlmIChvcHRpb25zLnByb3h5X2NvbW1hbmQgIT0gTlVMTCAm JgotKwkJICAgIHN0cmNhc2VjbXAob3B0aW9ucy5wcm94eV9jb21tYW5kLCAibm9uZSIpICE9IDAp Ci0gCQkJZmF0YWwoImluY29uc2lzdGVudCBvcHRpb25zOiBQcm94eUNvbW1hbmQrUHJveHlKdW1w Iik7Ci0gCQkvKiBOZXZlciB1c2UgRkQgcGFzc2luZyBmb3IgUHJveHlKdW1wICovCi0gCQlvcHRp b25zLnByb3h5X3VzZV9mZHBhc3MgPSAwOwotQEAgLTE1MDMsNyArMTQ3Myw3IEBAIG1haW4oaW50 IGFjLCBjaGFyICoqYXYpCi0gCSAqIHZpYSBjb25maWd1cmF0aW9uIChpLmUuIG5vdCBleHBhbmRl ZCkgYXJlIG5vdCBzdWJqZWN0IHRvIHZhbGlkYXRpb24uCi0gCSAqLwotIAlpZiAoKHVzZXJfb25f Y29tbWFuZGxpbmUgfHwgdXNlcl9leHBhbmRlZCkgJiYKLS0JICAgICF2YWxpZF9ydXNlcihvcHRp b25zLnVzZXIpKQotKwkgICAgIXNzaF92YWxpZF9ydXNlcihvcHRpb25zLnVzZXIpKQotIAkJZmF0 YWwoInJlbW90ZSB1c2VybmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMiKTsKLSAKLSAJ LyogTm93IFVzZXIgaXMgZXhwYW5kZWQsIHN0b3JlIGl0IGFuZCBjYWxjdWxhdGUgaGFzaC4gKi8K LWRpZmYgLS1jb2xvciAtcnVOcCBhL3JlZ3Jlc3MvcGVyY2VudC5zaCBiL3JlZ3Jlc3MvcGVyY2Vu dC5zaAotLS0tIGEvcmVncmVzcy9wZXJjZW50LnNoCTIwMjUtMTAtMTAgMDQ6Mzg6MzEuMDAwMDAw MDAwICswMjAwCi0rKysgYi9yZWdyZXNzL3BlcmNlbnQuc2gJMjAyNi0wNC0xNyAxNTo1ODoxNS40 MjY5NzE4MDAgKzAyMDAKLUBAIC0xNDAsNyArMTQwLDcgQEAgZG9uZQotIEZPTz1iYXIKLSBleHBv cnQgRk9PCi0gZm9yIGkgaW4gY29udHJvbHBhdGggaWRlbnRpdHlhZ2VudCBmb3J3YXJkYWdlbnQg bG9jYWxmb3J3YXJkIHJlbW90ZWZvcndhcmQgXAotLSAgICB1c2VyIHNldGVudiB1c2Vya25vd25o b3N0c2ZpbGU7IGRvCi0rICAgIHNldGVudiB1c2Vya25vd25ob3N0c2ZpbGU7IGRvCi0gCXZlcmJv c2UgJHRpZCAkaSBkb2xsYXIKLSAJdHJpYWwgJGkgJyR7Rk9PfScgJEZPTwotIGRvbmUKLUBAIC0x NzUsNyArMTc1LDcgQEAgJHtTU0h9IC1GICRPQkovc3NoX3Byb3h5IC1HICIke0ZPT31Ac29tZQot IAotICMgTGl0ZXJhbCBjb250cm9sIGNoYXJhY3RlcnMgaW4gY29uZmlnIGlzIGFjY2VwdGFibGUK LSB2ZXJib3NlICR0aWQgdXNlciBjb250cm9sLWxpdGVyYWwKLS10cmlhbCB1c2VyICIkRk9PIiAi JEZPTyIKLSsjdHJpYWwgdXNlciAiJEZPTyIgIiRGT08iCi0gCi0gIyBDb250cm9sIGNoYXJhY3Rl cnMgZXhwYW5kZWQgZnJvbSBjb25maWcgYXJlbid0LgotICR7U1NIfSAtRiAkT0JKL3NzaF9wcm94 eSAtRyAnLW9Vc2VyPSR7Rk9PfScgc29tZWhvc3QgJiYgXAoKZGlmZiAtLWdpdCBhLzAwNTktb3Bl bnNzaC0xMC4ycDEtZG93bmdyYWRlLXVzZWxlc3MtZXJyb3ItZGVidWcucGF0Y2ggYi8wMDU5LW9w ZW5zc2gtMTAuMnAxLWRvd25ncmFkZS11c2VsZXNzLWVycm9yLWRlYnVnLnBhdGNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODgzM2QyLi4wMDAwMDAwCi0tLSBhLzAwNTktb3BlbnNz aC0xMC4ycDEtZG93bmdyYWRlLXVzZWxlc3MtZXJyb3ItZGVidWcucGF0Y2gKKysrIC9kZXYvbnVs bApAQCAtMSwzOCArMCwwIEBACi1Gcm9tIDYwN2YzMzc2MzdmMjA3N2IzNGE5ZjZmOTZmYzI0MjM3 MjU1ZmUxNzUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiAiZGptQG9wZW5ic2Qub3Jn IiA8ZGptQG9wZW5ic2Qub3JnPgotRGF0ZTogVGh1LCA5IE9jdCAyMDI1IDIzOjI1OjIzICswMDAw Ci1TdWJqZWN0OiBbUEFUQ0hdIHVwc3RyZWFtOiBkb3duZ3JhZGUgYSB1c2VsZXNzIGVycm9yKCkg LT4gZGVidWcoKQotCi1PcGVuQlNELUNvbW1pdC1JRDogNWIwYzliY2RkYjMyNGY4YmVkMmM4ZThm ZmU5YzkyZDI2M2FkYzJkOQotLS0tCi0gc3NoLXBrY3MxMS5jIHwgNiArKystLS0KLSAxIGZpbGUg Y2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQotCi1kaWZmIC0tZ2l0IGEv c3NoLXBrY3MxMS5jIGIvc3NoLXBrY3MxMS5jCi1pbmRleCBjODgxNzk0NzM5NWEuLjVlOTU2MjA4 YmI3MiAxMDA2NDQKLS0tLSBhL3NzaC1wa2NzMTEuYwotKysrIGIvc3NoLXBrY3MxMS5jCi1AQCAt MSw0ICsxLDQgQEAKLS0vKiAkT3BlbkJTRDogc3NoLXBrY3MxMS5jLHYgMS43MyAyMDI1LzEwLzA4 IDIxOjAyOjE2IGRqbSBFeHAgJCAqLwotKy8qICRPcGVuQlNEOiBzc2gtcGtjczExLmMsdiAxLjc0 IDIwMjUvMTAvMDkgMjM6MjU6MjMgZGptIEV4cCAkICovCi0gLyoKLSAgKiBDb3B5cmlnaHQgKGMp IDIwMTAgTWFya3VzIEZyaWVkbC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICogQ29weXJpZ2h0 IChjKSAyMDE0IFBlZHJvIE1hcnRlbGxldHRvLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotQEAgLTE0 ODYsNyArMTQ4Niw3IEBAIHBrY3MxMV9mZXRjaF9jZXJ0cyhzdHJ1Y3QgcGtjczExX3Byb3ZpZGVy ICpwLCBDS19VTE9ORyBzbG90aWR4LAotIAkJY2FzZSBDS0NfWF81MDk6Ci0gCQkJaWYgKHBrY3Mx MV9mZXRjaF94NTA5X3B1YmtleShwLCBzbG90aWR4LCAmb2JqLAotIAkJCSAgICAma2V5LCAmbGFi ZWwpICE9IDApIHsKLS0JCQkJZXJyb3IoImZhaWxlZCB0byBmZXRjaCBrZXkiKTsKLSsJCQkJZGVi dWdfZigiZmFpbGVkIHRvIGZldGNoIGtleSIpOwotIAkJCQljb250aW51ZTsKLSAJCQl9Ci0gCQkJ YnJlYWs7Ci1AQCAtMTYxMyw3ICsxNjEzLDcgQEAgcGtjczExX2ZldGNoX2tleXMoc3RydWN0IHBr Y3MxMV9wcm92aWRlciAqcCwgQ0tfVUxPTkcgc2xvdGlkeCwKLSAJCX0KLSAKLSAJCWlmIChrZXkg PT0gTlVMTCkgewotLQkJCWVycm9yKCJmYWlsZWQgdG8gZmV0Y2gga2V5Iik7Ci0rCQkJZGVidWdf ZigiZmFpbGVkIHRvIGZldGNoIGtleSIpOwotIAkJCWNvbnRpbnVlOwotIAkJfQotIAkJbm90ZV9r ZXkocCwgc2xvdGlkeCwgX19mdW5jX18sIGtleSk7CgpkaWZmIC0tZ2l0IGEvMTAwMC1vcGVuc3No LTYuN3AxLWNvdmVyaXR5LnBhdGNoIGIvMTAwMC1vcGVuc3NoLTYuN3AxLWNvdmVyaXR5LnBhdGNo CmluZGV4IDQwYzI5OGUuLmE4NTU1NzEgMTAwNjQ0Ci0tLSBhLzEwMDAtb3BlbnNzaC02LjdwMS1j b3Zlcml0eS5wYXRjaAorKysgYi8xMDAwLW9wZW5zc2gtNi43cDEtY292ZXJpdHkucGF0Y2gKQEAg LTEsOCArMSw5IEBACi1Gcm9tIGFlY2M1ODYxZTFjZjcwOTRhMzJmODkzYWU0YmZkODQwOWI3N2U1 Y2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tIGQwMjI1YmNkYmMwZDc4M2RmODc4Y2Nm YjUxMjhiZGNiNzg3ZDgyZWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCiBGcm9tOiBEbWl0cnkg QmVseWF2c2tpeSA8YmVsZG1pdEBnbWFpbC5jb20+CiBEYXRlOiBGcmksIDEyIERlYyAyMDI1IDE0 OjI1OjQxICswMTAwCi1TdWJqZWN0OiBbUEFUQ0ggNTMvNTNdIG9wZW5zc2gtNi43cDEtY292ZXJp dHkKK1N1YmplY3Q6IFtQQVRDSCA1NC81NF0gb3BlbnNzaC02LjdwMS1jb3Zlcml0eQogCitodHRw czovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTgxCiAtLS0KICBhdXRo LWtyYjUuYyAgICAgICAgICAgICAgICAgICB8IDIgKysKICBnc3MtZ2Vuci5jICAgICAgICAgICAg ICAgICAgICB8IDMgKystCkBAIC0xOCw3ICsxOSw3IEBAIFN1YmplY3Q6IFtQQVRDSCA1My81M10g b3BlbnNzaC02LjdwMS1jb3Zlcml0eQogIDExIGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMo KyksIDExIGRlbGV0aW9ucygtKQogCiBkaWZmIC0tZ2l0IGEvYXV0aC1rcmI1LmMgYi9hdXRoLWty YjUuYwotaW5kZXggYjljMjYxYTI0Li5hMzdiZTkzYzMgMTAwNjQ0CitpbmRleCA3ZDRmYmNjM2Qu LjljZDM2MThiMiAxMDA2NDQKIC0tLSBhL2F1dGgta3JiNS5jCiArKysgYi9hdXRoLWtyYjUuYwog QEAgLTQyNyw2ICs0MjcsNyBAQCBzc2hfa3JiNV9jY19uZXdfdW5pcXVlKGtyYjVfY29udGV4dCBj dHgsIGtyYjVfY2NhY2hlICpjY2FjaGUsIGludCAqbmVlZF9lbnZpcm9ubQpAQCAtMzgsNyArMzks NyBAQCBpbmRleCBiOWMyNjFhMjQuLmEzN2JlOTNjMyAxMDA2NDQKICAJCX0KICAJCS8qIG1ha2Ug c3VyZSB0aGUgS1JCNUNDTkFNRSBpcyBzZXQgZm9yIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiAqLwog ZGlmZiAtLWdpdCBhL2dzcy1nZW5yLmMgYi9nc3MtZ2Vuci5jCi1pbmRleCBmMmQ2ZjU5ZTUuLjkx NjAyZTA0NSAxMDA2NDQKK2luZGV4IGEwN2RiZjUxMi4uZWMyYzljNmRkIDEwMDY0NAogLS0tIGEv Z3NzLWdlbnIuYwogKysrIGIvZ3NzLWdlbnIuYwogQEAgLTE3OCw4ICsxNzgsOSBAQCBzc2hfZ3Nz YXBpX2tleF9tZWNocyhnc3NfT0lEX3NldCBnc3Nfc3VwcG9ydGVkLCBzc2hfZ3NzYXBpX2NoZWNr X2ZuICpjaGVjaywKQEAgLTUzLDEwICs1NCwxMCBAQCBpbmRleCBmMmQ2ZjU5ZTUuLjkxNjAyZTA0 NSAxMDA2NDQKICAJCQkJKHAgPSBzdHJzZXAoJmNwLCAiLCIpKSkgewogIAkJCQlpZiAoc3NoYnVm X2xlbihidWYpICE9IDAgJiYKIGRpZmYgLS1naXQgYS9rcmwuYyBiL2tybC5jCi1pbmRleCBiZWE1 YjFiOTguLjRkZDhhMjRhOSAxMDA2NDQKK2luZGV4IDBlMmI1ZjE1NS4uZjJkMTA1ZjIzIDEwMDY0 NAogLS0tIGEva3JsLmMKICsrKyBiL2tybC5jCi1AQCAtMTIwNSw2ICsxMjA1LDcgQEAgaXNfa2V5 X3Jldm9rZWQoc3RydWN0IHNzaF9rcmwgKmtybCwgY29uc3Qgc3RydWN0IHNzaGtleSAqa2V5KQor QEAgLTEyMDIsNiArMTIwMiw3IEBAIGlzX2tleV9yZXZva2VkKHN0cnVjdCBzc2hfa3JsICprcmws IGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSkKICAJCXJldHVybiByOwogIAllcmIgPSBSQl9GSU5E KHJldm9rZWRfYmxvYl90cmVlLCAma3JsLT5yZXZva2VkX3NoYTFzLCAmcmIpOwogIAlmcmVlKHJi LmJsb2IpOwpAQCAtNjQsNyArNjUsNyBAQCBpbmRleCBiZWE1YjFiOTguLjRkZDhhMjRhOSAxMDA2 NDQKICAJaWYgKGVyYiAhPSBOVUxMKSB7CiAgCQlLUkxfREJHKCgicmV2b2tlZCBieSBrZXkgU0hB MSIpKTsKICAJCXJldHVybiBTU0hfRVJSX0tFWV9SRVZPS0VEOwotQEAgLTEyMTUsNiArMTIxNiw3 IEBAIGlzX2tleV9yZXZva2VkKHN0cnVjdCBzc2hfa3JsICprcmwsIGNvbnN0IHN0cnVjdCBzc2hr ZXkgKmtleSkKK0BAIC0xMjEyLDYgKzEyMTMsNyBAQCBpc19rZXlfcmV2b2tlZChzdHJ1Y3Qgc3No X2tybCAqa3JsLCBjb25zdCBzdHJ1Y3Qgc3Noa2V5ICprZXkpCiAgCQlyZXR1cm4gcjsKICAJZXJi ID0gUkJfRklORChyZXZva2VkX2Jsb2JfdHJlZSwgJmtybC0+cmV2b2tlZF9zaGEyNTZzLCAmcmIp OwogIAlmcmVlKHJiLmJsb2IpOwpAQCAtNzIsNyArNzMsNyBAQCBpbmRleCBiZWE1YjFiOTguLjRk ZDhhMjRhOSAxMDA2NDQKICAJaWYgKGVyYiAhPSBOVUxMKSB7CiAgCQlLUkxfREJHKCgicmV2b2tl ZCBieSBrZXkgU0hBMjU2IikpOwogIAkJcmV0dXJuIFNTSF9FUlJfS0VZX1JFVk9LRUQ7Ci1AQCAt MTIyNiw2ICsxMjI4LDcgQEAgaXNfa2V5X3Jldm9rZWQoc3RydWN0IHNzaF9rcmwgKmtybCwgY29u c3Qgc3RydWN0IHNzaGtleSAqa2V5KQorQEAgLTEyMjMsNiArMTIyNSw3IEBAIGlzX2tleV9yZXZv a2VkKHN0cnVjdCBzc2hfa3JsICprcmwsIGNvbnN0IHN0cnVjdCBzc2hrZXkgKmtleSkKICAJCXJl dHVybiByOwogIAllcmIgPSBSQl9GSU5EKHJldm9rZWRfYmxvYl90cmVlLCAma3JsLT5yZXZva2Vk X2tleXMsICZyYik7CiAgCWZyZWUocmIuYmxvYik7CkBAIC04MSwxMCArODIsMTAgQEAgaW5kZXgg YmVhNWIxYjk4Li40ZGQ4YTI0YTkgMTAwNjQ0CiAgCQlLUkxfREJHKCgicmV2b2tlZCBieSBleHBs aWNpdCBrZXkiKSk7CiAgCQlyZXR1cm4gU1NIX0VSUl9LRVlfUkVWT0tFRDsKIGRpZmYgLS1naXQg YS9sb2dpbnJlYy5jIGIvbG9naW5yZWMuYwotaW5kZXggN2QxYzlkZDQzLi5hMDE3ZTE3M2IgMTAw NjQ0CitpbmRleCA3NDk5YWE5NzUuLjI4MDdjYWQ0YSAxMDA2NDQKIC0tLSBhL2xvZ2lucmVjLmMK ICsrKyBiL2xvZ2lucmVjLmMKLUBAIC02NzcsOSArNjc3LDExIEBAIGNvbnN0cnVjdF91dG1wKHN0 cnVjdCBsb2dpbmluZm8gKmxpLAorQEAgLTY4MCw5ICs2ODAsMTEgQEAgY29uc3RydWN0X3V0bXAo c3RydWN0IGxvZ2luaW5mbyAqbGksCiAgCSAqLwogIAogIAkvKiBVc2Ugc3RybmNweSBiZWNhdXNl IHdlIGRvbid0IG5lY2Vzc2FyaWx5IHdhbnQgbnVsbCB0ZXJtaW5hdGlvbiAqLwpAQCAtOTcsMTAg Kzk4LDEwIEBAIGluZGV4IDdkMWM5ZGQ0My4uYTAxN2UxNzNiIDEwMDY0NAogIAkgICAgTUlOX1NJ WkVPRih1dC0+dXRfaG9zdCwgbGktPmhvc3RuYW1lKSk7CiAgIyBlbmRpZgogZGlmZiAtLWdpdCBh L21pc2MuYyBiL21pc2MuYwotaW5kZXggMmZkMTQxNTlkLi5kNGM0ZTQxNjQgMTAwNjQ0CitpbmRl eCBlOTZmYThkNjEuLjU1NmMxMTJjMyAxMDA2NDQKIC0tLSBhL21pc2MuYwogKysrIGIvbWlzYy5j Ci1AQCAtMTU3Myw2ICsxNTczLDggQEAgc2FuaXRpc2Vfc3RkZmQodm9pZCkKK0BAIC0xNjIwLDYg KzE2MjAsOCBAQCBzYW5pdGlzZV9zdGRmZCh2b2lkKQogIAl9CiAgCWlmIChudWxsZmQgPiBTVERF UlJfRklMRU5PKQogIAkJY2xvc2UobnVsbGZkKTsKQEAgLTEwOSw3ICsxMTAsNyBAQCBpbmRleCAy ZmQxNDE1OWQuLmQ0YzRlNDE2NCAxMDA2NDQKICB9CiAgCiAgY2hhciAqCi1AQCAtMjc3Myw2ICsy Nzc1LDcgQEAgc3RkZmRfZGV2bnVsbChpbnQgZG9fc3RkaW4sIGludCBkb19zdGRvdXQsIGludCBk b19zdGRlcnIpCitAQCAtMjgyMSw2ICsyODIzLDcgQEAgc3RkZmRfZGV2bnVsbChpbnQgZG9fc3Rk aW4sIGludCBkb19zdGRvdXQsIGludCBkb19zdGRlcnIpCiAgCX0KICAJaWYgKGRldm51bGwgPiBT VERFUlJfRklMRU5PKQogIAkJY2xvc2UoZGV2bnVsbCk7CkBAIC0xMTgsMTAgKzExOSwxMCBAQCBp bmRleCAyZmQxNDE1OWQuLmQ0YzRlNDE2NCAxMDA2NDQKICB9CiAgCiBkaWZmIC0tZ2l0IGEvbW9u aXRvci5jIGIvbW9uaXRvci5jCi1pbmRleCAyZjE1NGEzZDcuLmY5NTllMDEyNCAxMDA2NDQKK2lu ZGV4IDM2ZGIxYWZlZS4uM2I2MDA1OWE5IDEwMDY0NAogLS0tIGEvbW9uaXRvci5jCiArKysgYi9t b25pdG9yLmMKLUBAIC00MDUsNyArNDA1LDcgQEAgbW9uaXRvcl9jaGlsZF9wcmVhdXRoKHN0cnVj dCBzc2ggKnNzaCwgc3RydWN0IG1vbml0b3IgKnBtb25pdG9yKQorQEAgLTQxMCw3ICs0MTAsNyBA QCBtb25pdG9yX2NoaWxkX3ByZWF1dGgoc3RydWN0IHNzaCAqc3NoLCBzdHJ1Y3QgbW9uaXRvciAq cG1vbml0b3IpCiAgCW1tX2dldF9rZXlzdGF0ZShzc2gsIHBtb25pdG9yKTsKICAKICAJLyogRHJh aW4gYW55IGJ1ZmZlcmVkIG1lc3NhZ2VzIGZyb20gdGhlIGNoaWxkICovCkBAIC0xMzAsNyArMTMx LDcgQEAgaW5kZXggMmYxNTRhM2Q3Li5mOTU5ZTAxMjQgMTAwNjQ0CiAgCQk7CiAgCiAgCS8qIFdh aXQgZm9yIHRoZSBjaGlsZCdzIGV4aXQgc3RhdHVzICovCi1AQCAtMTgxOSw3ICsxODE5LDcgQEAg bW1fYW5zd2VyX3B0eShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrLCBzdHJ1Y3Qgc3NoYnVmICpt KQorQEAgLTE4NTUsNyArMTg1NSw3IEBAIG1tX2Fuc3dlcl9wdHkoc3RydWN0IHNzaCAqc3NoLCBp bnQgc29jaywgc3RydWN0IHNzaGJ1ZiAqbSkKICAJcy0+cHR5bWFzdGVyID0gcy0+cHR5ZmQ7CiAg CiAgCWRlYnVnM19mKCJ0dHkgJXMgcHR5ZmQgJWQiLCBzLT50dHksIHMtPnR0eWZkKTsKQEAgLTE4 NCwxMCArMTg1LDEwIEBAIGluZGV4IDI2YmRjM2UwOC4uOGUyOTM5Yjk1IDEwMDY0NAogIAkJRkRf Q0xSKG5vdGlmeV9waXBlWzBdLCByZWFkc2V0KTsKICAJfQogZGlmZiAtLWdpdCBhL3JlYWRjb25m LmMgYi9yZWFkY29uZi5jCi1pbmRleCBiNmFkNDdiNDkuLjc1ZTFjOTUzYyAxMDA2NDQKK2luZGV4 IDA1OGU1M2NmMS4uMTRmMTQ5Y2MxIDEwMDY0NAogLS0tIGEvcmVhZGNvbmYuYwogKysrIGIvcmVh ZGNvbmYuYwotQEAgLTIxNzAsNiArMjE3MCw3IEBAIHBhcnNlX3B1YmtleV9hbGdvczoKK0BAIC0y MTY0LDYgKzIxNjQsNyBAQCBwYXJzZV9wdWJrZXlfYWxnb3M6CiAgCQkJfSBlbHNlIGlmIChyICE9 IDApIHsKICAJCQkJZXJyb3IoIiUuMjAwcyBsaW5lICVkOiBnbG9iIGZhaWxlZCBmb3IgJXMuIiwK ICAJCQkJICAgIGZpbGVuYW1lLCBsaW5lbnVtLCBhcmcyKTsKQEAgLTE5NiwxMCArMTk3LDEwIEBA IGluZGV4IGI2YWQ0N2I0OS4uNzVlMWM5NTNjIDEwMDY0NAogIAkJCX0KICAJCQlmcmVlKGFyZzIp OwogZGlmZiAtLWdpdCBhL3NlcnZjb25mLmMgYi9zZXJ2Y29uZi5jCi1pbmRleCA5NTYyMDVmNmQu LjEwOTNkY2JhYyAxMDA2NDQKK2luZGV4IGUwNWEzMTU4NC4uM2ZmYTQ5YzNhIDEwMDY0NAogLS0t IGEvc2VydmNvbmYuYwogKysrIGIvc2VydmNvbmYuYwotQEAgLTIzMDcsOCArMjMwNyw5IEBAIHBy b2Nlc3Nfc2VydmVyX2NvbmZpZ19saW5lX2RlcHRoKFNlcnZlck9wdGlvbnMgKm9wdGlvbnMsIGNo YXIgKmxpbmUsCitAQCAtMjM4Miw4ICsyMzgyLDkgQEAgcHJvY2Vzc19zZXJ2ZXJfY29uZmlnX2xp bmVfZGVwdGgoU2VydmVyT3B0aW9ucyAqb3B0aW9ucywgY2hhciAqbGluZSwKICAJCWlmICgqYWN0 aXZlcCAmJiAqY2hhcnB0ciA9PSBOVUxMKSB7CiAgCQkJKmNoYXJwdHIgPSB0aWxkZV9leHBhbmRf ZmlsZW5hbWUoYXJnLCBnZXR1aWQoKSk7CiAgCQkJLyogaW5jcmVhc2Ugb3B0aW9uYWwgY291bnRl ciAqLwpAQCAtMjEyLDEwICsyMTMsMTAgQEAgaW5kZXggOTU2MjA1ZjZkLi4xMDkzZGNiYWMgMTAw NjQ0CiAgCQlicmVhazsKICAKIGRpZmYgLS1naXQgYS9zZXJ2ZXJsb29wLmMgYi9zZXJ2ZXJsb29w LmMKLWluZGV4IDU1NDExYTZiNC4uYWNjNzIxY2QxIDEwMDY0NAoraW5kZXggMTA4N2E2YzdkLi5i NjVjOWRkNjYgMTAwNjQ0CiAtLS0gYS9zZXJ2ZXJsb29wLmMKICsrKyBiL3NlcnZlcmxvb3AuYwot QEAgLTUzMyw3ICs1MzMsNyBAQCBzZXJ2ZXJfcmVxdWVzdF90dW4oc3RydWN0IHNzaCAqc3NoKQor QEAgLTUzNiw3ICs1MzYsNyBAQCBzZXJ2ZXJfcmVxdWVzdF90dW4oc3RydWN0IHNzaCAqc3NoKQog IAkJZGVidWdfZigiaW52YWxpZCB0dW4iKTsKICAJCWdvdG8gZG9uZTsKICAJfQpAQCAtMjI1LDUg KzIyNiw1IEBAIGluZGV4IDU1NDExYTZiNC4uYWNjNzIxY2QxIDEwMDY0NAogIAkJICAgIGF1dGhf b3B0cy0+Zm9yY2VfdHVuX2RldmljZSAhPSAoaW50KXR1bikKICAJCQlnb3RvIGRvbmU7CiAtLSAK LTIuNTIuMAorMi41My4wCiAKCmRpZmYgLS1naXQgYS8yMDAwLW9wZW5zc2gtMTAuMnAxLWdzaXNz aC5wYXRjaCBiLzIwMDAtb3BlbnNzaC0xMC4ycDEtZ3Npc3NoLnBhdGNoCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBmOWEwMjhjLi4wMDAwMDAwCi0tLSBhLzIwMDAtb3BlbnNzaC0xMC4y cDEtZ3Npc3NoLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjQxNyArMCwwIEBACi1kaWZmIC1O dXIgb3BlbnNzaC0xMC4ycDEub3JpZy9hdXRoMi5jIG9wZW5zc2gtMTAuMnAxL2F1dGgyLmMKLS0t LSBvcGVuc3NoLTEwLjJwMS5vcmlnL2F1dGgyLmMJMjAyNi0wMy0xOCAwOTozODoxNy41NjczMTE3 NDYgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9hdXRoMi5jCTIwMjYtMDMtMTggMTA6MTk6Mzku NDExNjg2OTg4ICswMTAwCi1AQCAtMjg2LDcgKzI4NiwyOCBAQAotIAkgICAgKHIgPSBzc2hwa3Rf Z2V0X2NzdHJpbmcoc3NoLCAmc2VydmljZSwgTlVMTCkpICE9IDAgfHwKLSAJICAgIChyID0gc3No cGt0X2dldF9jc3RyaW5nKHNzaCwgJm1ldGhvZCwgTlVMTCkpICE9IDApCi0gCQlnb3RvIG91dDsK LS0JZGVidWcoInVzZXJhdXRoLXJlcXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2Qg JXMiLCB1c2VyLCBzZXJ2aWNlLCBtZXRob2QpOwotKwotKyNpZmRlZiBHU1NBUEkKLSsJaWYgKHVz ZXJbMF0gPT0gJ1wwJykgewotKwkJZGVidWcoInJlY2VpdmVkIGVtcHR5IHVzZXJuYW1lIGZvciAl cyIsIG1ldGhvZCk7Ci0rCQlpZiAoc3RyY21wKG1ldGhvZCwgImdzc2FwaS1rZXlleCIpID09IDAp IHsKLSsJCQljaGFyICpsbmFtZSA9IE5VTEw7Ci0rCQkJbW1fc3NoX2dzc2FwaV9sb2NhbG5hbWUo JmxuYW1lKTsKLSsJCQlpZiAobG5hbWUgJiYgbG5hbWVbMF0gIT0gJ1wwJykgewotKwkJCQlmcmVl KHVzZXIpOwotKwkJCQl1c2VyID0gbG5hbWU7Ci0rCQkJCWRlYnVnKCJzZXQgdXNlcm5hbWUgdG8g JXMgZnJvbSBnc3NhcGkgY29udGV4dCIsIHVzZXIpOwotKwkJCX0gZWxzZSB7Ci0rCQkJCWRlYnVn KCJmYWlsZWQgdG8gc2V0IHVzZXJuYW1lIGZyb20gZ3NzYXBpIGNvbnRleHQiKTsKLSsJCQkJc3No X3BhY2tldF9zZW5kX2RlYnVnKHNzaCwKLSsJCQkJICAgICJmYWlsZWQgdG8gc2V0IHVzZXJuYW1l IGZyb20gZ3NzYXBpIGNvbnRleHQiKTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsjZW5kaWYKLSsKLSsJ ZGVidWcoInVzZXJhdXRoLXJlcXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2QgJXMi LAotKwkgICAgdXNlclswXSA/IHVzZXIgOiAiPGltcGxpY2l0PiIsIHNlcnZpY2UsIG1ldGhvZCk7 Ci0gCWRlYnVnKCJhdHRlbXB0ICVkIGZhaWx1cmVzICVkIiwgYXV0aGN0eHQtPmF0dGVtcHQsIGF1 dGhjdHh0LT5mYWlsdXJlcyk7Ci0gCi0gI2lmZGVmIFdJVEhfU0VMSU5VWAotQEAgLTI5OSwxMSAr MzIwLDMzIEBACi0gCi0gCWlmIChhdXRoY3R4dC0+YXR0ZW1wdCA+PSAxMDI0KQotIAkJYXV0aF9t YXh0cmllc19leGNlZWRlZChzc2gpOwotLQlpZiAoYXV0aGN0eHQtPmF0dGVtcHQrKyA9PSAwKSB7 Ci0tCQkvKiBzZXR1cCBhdXRoIGNvbnRleHQgKi8KLS0JCWF1dGhjdHh0LT5wdyA9IG1tX2dldHB3 bmFtYWxsb3coc3NoLCB1c2VyKTsKLSsJLyogSWYgZmlyc3QgdGltZSBvciB1c2VybmFtZSBjaGFu Z2VkIG9yIGVtcHR5IHVzZXJuYW1lLAotKwkgICBzZXR1cC9yZXNldCBhdXRoZW50aWNhdGlvbiBj b250ZXh0LiAqLwotKwlpZiAoKGF1dGhjdHh0LT5hdHRlbXB0KysgPT0gMCkgfHwKLSsJICAgIChz dHJjbXAodXNlciwgYXV0aGN0eHQtPnVzZXIpICE9IDApIHx8Ci0rCSAgICAoc3RyY21wKHVzZXIs ICIiKSA9PSAwKSkgewotKwkJaWYgKGF1dGhjdHh0LT51c2VyKSB7Ci0rCQkJZnJlZShhdXRoY3R4 dC0+dXNlcik7Ci0rCQkJYXV0aGN0eHQtPnVzZXIgPSBOVUxMOwotKwkJfQotKwkJYXV0aGN0eHQt PnZhbGlkID0gMDsKLSAJCWF1dGhjdHh0LT51c2VyID0geHN0cmR1cCh1c2VyKTsKLS0JCWlmIChh dXRoY3R4dC0+cHcgJiYgc3RyY21wKHNlcnZpY2UsICJzc2gtY29ubmVjdGlvbiIpPT0wKSB7Ci0r CQlpZiAoc3RyY21wKHNlcnZpY2UsICJzc2gtY29ubmVjdGlvbiIpICE9IDApIHsKLSsJCQlzc2hf cGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLCAiVW5zdXBwb3J0ZWQgc2VydmljZSAlcyIsCi0rCQkJICAg IHNlcnZpY2UpOwotKwkJfQotKyNpZmRlZiBHU1NBUEkKLSsJCS8qIElmIHdlJ3JlIGdvaW5nIHRv IHNldCB0aGUgdXNlcm5hbWUgYmFzZWQgb24gdGhlCi0rCQkgICBHU1NBUEkgY29udGV4dCBsYXRl ciwgdGhlbiB3YWl0IHVudGlsIHRoZW4gdG8KLSsJCSAgIHZlcmlmeSBpdC4gSnVzdCBwdXQgaW4g cGxhY2Vob2xkZXJzIGZvciBub3cuICovCi0rCQlpZiAoKHN0cmNtcCh1c2VyLCAiIikgPT0gMCkg JiYKLSsJCSAgICAoKHN0cmNtcChtZXRob2QsICJnc3NhcGkiKSA9PSAwKSB8fAotKwkJICAgICAo c3RyY21wKG1ldGhvZCwgImdzc2FwaS13aXRoLW1pYyIpID09IDApKSkgewotKwkJCWF1dGhjdHh0 LT5wdyA9IGZha2VwdygpOwotKwkJfSBlbHNlIHsKLSsjZW5kaWYKLSsJCWF1dGhjdHh0LT5wdyA9 IG1tX2dldHB3bmFtYWxsb3coc3NoLCB1c2VyKTsKLSsJCWlmIChhdXRoY3R4dC0+cHcpIHsKLSAJ CQlhdXRoY3R4dC0+dmFsaWQgPSAxOwotIAkJCWRlYnVnMl9mKCJzZXR0aW5nIHVwIGF1dGhjdHh0 IGZvciAlcyIsIHVzZXIpOwotIAkJfSBlbHNlIHsKLUBAIC0zMTEsNiArMzU0LDkgQEAKLSAJCQkv KiBJbnZhbGlkIHVzZXIsIGZha2UgcGFzc3dvcmQgaW5mb3JtYXRpb24gKi8KLSAJCQlhdXRoY3R4 dC0+cHcgPSBmYWtlcHcoKTsKLSAJCX0KLSsjaWZkZWYgR1NTQVBJCi0rCQl9IC8qIGVuZGlmIGZv ciBzZXR0aW5nIHVzZXJuYW1lIGJhc2VkIG9uIEdTU0FQSSBjb250ZXh0ICovCi0rI2VuZGlmCi0g I2lmZGVmIFVTRV9QQU0KLSAJCWlmIChvcHRpb25zLnVzZV9wYW0pCi0gCQkJbW1fc3RhcnRfcGFt KHNzaCk7Ci1AQCAtMzE4LDYgKzM2NCw3IEBACi0gCQlzc2hfcGFja2V0X3NldF9sb2dfcHJlYW1i bGUoc3NoLCAiJXN1c2VyICVzIiwKLSAJCSAgICBhdXRoY3R4dC0+dmFsaWQgPyAiYXV0aGVudGlj YXRpbmcgIiA6ICJpbnZhbGlkICIsIHVzZXIpOwotIAkJc2V0cHJvY3RpdGxlKCIlcyBbbmV0XSIs IGF1dGhjdHh0LT52YWxpZCA/IHVzZXIgOiAidW5rbm93biIpOwotKwkJaWYgKGF1dGhjdHh0LT5h dHRlbXB0ID09IDEpIHsKLSAJCWF1dGhjdHh0LT5zZXJ2aWNlID0geHN0cmR1cChzZXJ2aWNlKTsK LSAJCWF1dGhjdHh0LT5zdHlsZSA9IHN0eWxlID8geHN0cmR1cChzdHlsZSkgOiBOVUxMOwotICNp ZmRlZiBXSVRIX1NFTElOVVgKLUBAIC0zMzMsOSArMzgwLDEwIEBACi0gCQlpZiAoYXV0aDJfc2V0 dXBfbWV0aG9kc19saXN0cyhhdXRoY3R4dCkgIT0gMCkKLSAJCQlzc2hfcGFja2V0X2Rpc2Nvbm5l Y3Qoc3NoLAotIAkJCSAgICAibm8gYXV0aGVudGljYXRpb24gbWV0aG9kcyBlbmFibGVkIik7Ci0t CX0gZWxzZSBpZiAoc3RyY21wKHVzZXIsIGF1dGhjdHh0LT51c2VyKSAhPSAwIHx8Ci0tCSAgICBz dHJjbXAoc2VydmljZSwgYXV0aGN0eHQtPnNlcnZpY2UpICE9IDApIHsKLS0JCXNzaF9wYWNrZXRf ZGlzY29ubmVjdChzc2gsICJDaGFuZ2Ugb2YgdXNlcm5hbWUgb3Igc2VydmljZSAiCi0rCQl9Ci0r CX0KLSsJaWYgKHN0cmNtcChzZXJ2aWNlLCBhdXRoY3R4dC0+c2VydmljZSkgIT0gMCkgewotKwkJ c3NoX3BhY2tldF9kaXNjb25uZWN0KHNzaCwgIkNoYW5nZSBvZiBzZXJ2aWNlICIKLSAJCSAgICAi bm90IGFsbG93ZWQ6ICglcywlcykgLT4gKCVzLCVzKSIsCi0gCQkgICAgYXV0aGN0eHQtPnVzZXIs IGF1dGhjdHh0LT5zZXJ2aWNlLCB1c2VyLCBzZXJ2aWNlKTsKLSAJfQotZGlmZiAtTnVyIG9wZW5z c2gtMTAuMnAxLm9yaWcvYXV0aDItZ3NzLmMgb3BlbnNzaC0xMC4ycDEvYXV0aDItZ3NzLmMKLS0t LSBvcGVuc3NoLTEwLjJwMS5vcmlnL2F1dGgyLWdzcy5jCTIwMjYtMDMtMTggMDk6Mzg6MTcuMjc0 MDUzNzI5ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvYXV0aDItZ3NzLmMJMjAyNi0wMy0xOCAx MDoxOTozOS40MTI0MDAwMjkgKzAxMDAKLUBAIC01NCw2ICs1NCw3IEBACi0gZXh0ZXJuIHN0cnVj dCBhdXRobWV0aG9kX2NmZyBtZXRob2RjZmdfZ3Nza2V5ZXg7Ci0gZXh0ZXJuIHN0cnVjdCBhdXRo bWV0aG9kX2NmZyBtZXRob2RjZmdfZ3NzYXBpOwotIAotK3N0YXRpYyB2b2lkIHNzaF9nc3NhcGlf dXNlcmF1dGhfZXJyb3IoR3NzY3R4dCAqY3R4dCwgc3RydWN0IHNzaCAqc3NoKTsKLSBzdGF0aWMg aW50IGlucHV0X2dzc2FwaV90b2tlbihpbnQgdHlwZSwgdV9pbnQzMl90IHBsZW4sIHN0cnVjdCBz c2ggKnNzaCk7Ci0gc3RhdGljIGludCBpbnB1dF9nc3NhcGlfbWljKGludCB0eXBlLCB1X2ludDMy X3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKTsKLSBzdGF0aWMgaW50IGlucHV0X2dzc2FwaV9leGNo YW5nZV9jb21wbGV0ZShpbnQgdHlwZSwgdV9pbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCk7 Ci1AQCAtNjcsOCArNjgsOCBAQAotIHsKLSAJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRo Y3R4dDsKLSAJaW50IHIsIGF1dGhlbnRpY2F0ZWQgPSAwOwotLQlzdHJ1Y3Qgc3NoYnVmICpiID0g TlVMTDsKLS0JZ3NzX2J1ZmZlcl9kZXNjIG1pYywgZ3NzYnVmOwotKwlzdHJ1Y3Qgc3NoYnVmICpi ID0gTlVMTCwgKmIyID0gTlVMTDsKLSsJZ3NzX2J1ZmZlcl9kZXNjIG1pYywgZ3NzYnVmLCBnc3Ni dWYyOwotIAl1X2NoYXIgKnA7Ci0gCXNpemVfdCBsZW47Ci0gCi1AQCAtNzksNiArODAsOSBAQAot IAlpZiAoKGIgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCi0gCQlmYXRhbF9mKCJzc2hidWZfbmV3 IGZhaWxlZCIpOwotIAotKwlpZiAoKGIyID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQotKwkJZmF0 YWxfZigic3NoYnVmX25ldyBmYWlsZWQiKTsKLSsKLSAJbWljLnZhbHVlID0gcDsKLSAJbWljLmxl bmd0aCA9IGxlbjsKLSAKLUBAIC04OSwxMyArOTMsMjggQEAKLSAJCWZhdGFsX2YoInNzaGJ1Zl9t dXRhYmxlX3B0ciBmYWlsZWQiKTsKLSAJZ3NzYnVmLmxlbmd0aCA9IHNzaGJ1Zl9sZW4oYik7Ci0g Ci0rCS8qIGNsaWVudCBtYXkgaGF2ZSB1c2VkIGVtcHR5IHVzZXJuYW1lIHRvIGRldGVybWluZSB0 YXJnZXQKLSsJICAgbmFtZSBmcm9tIEdTU0FQSSBjb250ZXh0ICovCi0rCXNzaF9nc3NhcGlfYnVp bGRtaWMoYjIsICIiLCBhdXRoY3R4dC0+c2VydmljZSwgImdzc2FwaS1rZXlleCIsCi0rCSAgICBz c2gtPmtleC0+c2Vzc2lvbl9pZCk7Ci0rCi0rCWlmICgoZ3NzYnVmMi52YWx1ZSA9IHNzaGJ1Zl9t dXRhYmxlX3B0cihiMikpID09IE5VTEwpCi0rCQlmYXRhbF9mKCJzc2hidWZfbXV0YWJsZV9wdHIg ZmFpbGVkIik7Ci0rCWdzc2J1ZjIubGVuZ3RoID0gc3NoYnVmX2xlbihiMik7Ci0rCi0gCS8qIGdz c19rZXhfY29udGV4dCBpcyBOVUxMIHdpdGggcHJpdnNlcCwgc28gd2UgY2FuJ3QgY2hlY2sgaXQg aGVyZSAqLwotIAlpZiAoIUdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX2NoZWNrbWljKGdzc19rZXhf Y29udGV4dCwKLS0JICAgICZnc3NidWYsICZtaWMpKSkKLS0JCWF1dGhlbnRpY2F0ZWQgPSBtbV9z c2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlciwKLS0JCSAgICBhdXRoY3R4dC0+cHcsIDEp OwotKwkgICAgJmdzc2J1ZiwgJm1pYykpIHx8Ci0rCSAgICAhR1NTX0VSUk9SKG1tX3NzaF9nc3Nh cGlfY2hlY2ttaWMoZ3NzX2tleF9jb250ZXh0LAotKwkgICAgJmdzc2J1ZjIsICZtaWMpKSkgewot KwkJaWYgKGF1dGhjdHh0LT52YWxpZCAmJiBhdXRoY3R4dC0+dXNlciAmJiBhdXRoY3R4dC0+dXNl clswXSkgewotKwkJCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4 dC0+dXNlciwKLSsJCQkgICAgYXV0aGN0eHQtPnB3LCAxKTsKLSsJCX0KLSsJfQotIAotIAlzc2hi dWZfZnJlZShiKTsKLSsJc3NoYnVmX2ZyZWUoYjIpOwotIAlmcmVlKG1pYy52YWx1ZSk7Ci0gCi0g CXJldHVybiAoYXV0aGVudGljYXRlZCk7Ci1AQCAtMTU0LDcgKzE3Myw5IEBACi0gCQlyZXR1cm4g KDApOwotIAl9Ci0gCi0tCWlmICghYXV0aGN0eHQtPnZhbGlkIHx8IGF1dGhjdHh0LT51c2VyID09 IE5VTEwpIHsKLSsJLyogYXV0aGN0eHQtPnZhbGlkIG1heSBiZSAwIGlmIHdlIGhhdmVuJ3QgeWV0 IGRldGVybWluZWQKLSsJICAgdXNlcm5hbWUgZnJvbSBnc3NhcGkgY29udGV4dC4gKi8KLSsJaWYg KGF1dGhjdHh0LT51c2VyID09IE5VTEwpIHsKLSAJCWRlYnVnMl9mKCJkaXNhYmxlZCBiZWNhdXNl IG9mIGludmFsaWQgdXNlciIpOwotIAkJZnJlZShkb2lkKTsKLSAJCXJldHVybiAoMCk7Ci1AQCAt MTkyLDcgKzIxMyw3IEBACi0gCUdzc2N0eHQgKmdzc2N0eHQ7Ci0gCWdzc19idWZmZXJfZGVzYyBz ZW5kX3RvayA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSAJZ3NzX2J1ZmZlcl9kZXNjIHJlY3ZfdG9r OwotLQlPTV91aW50MzIgbWFqX3N0YXR1cywgbWluX3N0YXR1cywgZmxhZ3M7Ci0rCU9NX3VpbnQz MiBtYWpfc3RhdHVzLCBtaW5fc3RhdHVzLCBmbGFncyA9IDA7Ci0gCXVfY2hhciAqcDsKLSAJc2l6 ZV90IGxlbjsKLSAJaW50IHI7Ci1AQCAtMjEzLDYgKzIzNCw3IEBACi0gCWZyZWUocCk7Ci0gCi0g CWlmIChHU1NfRVJST1IobWFqX3N0YXR1cykpIHsKLSsJCXNzaF9nc3NhcGlfdXNlcmF1dGhfZXJy b3IoZ3NzY3R4dCwgc3NoKTsKLSAJCWlmIChzZW5kX3Rvay5sZW5ndGggIT0gMCkgewotIAkJCWlm ICgociA9IHNzaHBrdF9zdGFydChzc2gsCi0gCQkJICAgIFNTSDJfTVNHX1VTRVJBVVRIX0dTU0FQ SV9FUlJUT0spKSAhPSAwIHx8Ci1AQCAtMjg3LDYgKzMwOSwzNCBAQAotIAlyZXR1cm4gMDsKLSB9 Ci0gCi0rc3RhdGljIHZvaWQKLStnc3NhcGlfc2V0X3VzZXJuYW1lKHN0cnVjdCBzc2ggKnNzaCkK LSt7Ci0rCUF1dGhjdHh0ICphdXRoY3R4dCA9IHNzaC0+YXV0aGN0eHQ7Ci0rCWNoYXIgKmxuYW1l ID0gTlVMTDsKLSsKLSsJaWYgKChhdXRoY3R4dC0+dXNlciA9PSBOVUxMKSB8fCAoYXV0aGN0eHQt PnVzZXJbMF0gPT0gJ1wwJykpIHsKLSsJCW1tX3NzaF9nc3NhcGlfbG9jYWxuYW1lKCZsbmFtZSk7 Ci0rCQlpZiAobG5hbWUgJiYgbG5hbWVbMF0gIT0gJ1wwJykgewotKwkJCWlmIChhdXRoY3R4dC0+ dXNlcikgZnJlZShhdXRoY3R4dC0+dXNlcik7Ci0rCQkJYXV0aGN0eHQtPnVzZXIgPSBsbmFtZTsK LSsJCQlkZWJ1Zygic2V0IHVzZXJuYW1lIHRvICVzIGZyb20gZ3NzYXBpIGNvbnRleHQiLCBsbmFt ZSk7Ci0rCQkJYXV0aGN0eHQtPnB3ID0gbW1fZ2V0cHduYW1hbGxvdyhzc2gsIGF1dGhjdHh0LT51 c2VyKTsKLSsJCQlpZiAoYXV0aGN0eHQtPnB3KSB7Ci0rCQkJCWF1dGhjdHh0LT52YWxpZCA9IDE7 Ci0rI2lmZGVmIFVTRV9QQU0KLSsJCQkJaWYgKG9wdGlvbnMudXNlX3BhbSkKLSsJCQkJCW1tX3N0 YXJ0X3BhbShzc2gpOwotKyNlbmRpZgotKwkJCX0KLSsJCX0gZWxzZSB7Ci0rCQkJZGVidWcoImZh aWxlZCB0byBzZXQgdXNlcm5hbWUgZnJvbSBnc3NhcGkgY29udGV4dCIpOwotKwkJCXNzaF9wYWNr ZXRfc2VuZF9kZWJ1Zyhzc2gsCi0rCQkJICAgICJmYWlsZWQgdG8gc2V0IHVzZXJuYW1lIGZyb20g Z3NzYXBpIGNvbnRleHQiKTsKLSsJCX0KLSsJfQotK30KLSsKLSAvKgotICAqIFRoaXMgaXMgY2Fs bGVkIHdoZW4gdGhlIGNsaWVudCB0aGlua3Mgd2UndmUgY29tcGxldGVkIGF1dGhlbnRpY2F0aW9u LgotICAqIEl0IHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgaW4gdGhlIGRpc3BhdGNoIGhhbmRsZXIg YnkgdGhlIGZ1bmN0aW9uIGFib3ZlLAotQEAgLTI5NywxMSArMzQ3LDEzIEBACi0gaW5wdXRfZ3Nz YXBpX2V4Y2hhbmdlX2NvbXBsZXRlKGludCB0eXBlLCB1X2ludDMyX3QgcGxlbiwgc3RydWN0IHNz aCAqc3NoKQotIHsKLSAJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRoY3R4dDsKLS0JaW50 IHIsIGF1dGhlbnRpY2F0ZWQ7Ci0rCWludCByLCBhdXRoZW50aWNhdGVkID0gMDsKLSAKLSAJaWYg KGF1dGhjdHh0ID09IE5VTEwpCi0gCQlmYXRhbCgiTm8gYXV0aGVudGljYXRpb24gb3IgR1NTQVBJ IGNvbnRleHQiKTsKLSAKLSsJZ3NzYXBpX3NldF91c2VybmFtZShzc2gpOwotKwotIAkvKgotIAkg KiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0dXMsIGJlY2F1c2Ugd2UncmUgb25seSBl bmFibGVkIGluCi0gCSAqIHRoZSBkaXNwYXRjaGVyIG9uY2UgdGhlIGV4Y2hhbmdlIGlzIGNvbXBs ZXRlCi1AQCAtMzEwLDcgKzM2MiwxMSBAQAotIAlpZiAoKHIgPSBzc2hwa3RfZ2V0X2VuZChzc2gp KSAhPSAwKQotIAkJZmF0YWxfZnIociwgInBhcnNlIHBhY2tldCIpOwotIAotLSAJYXV0aGVudGlj YXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLCBhdXRoY3R4dC0+cHcs IDEpOwotKwkvKiB1c2VyIHNob3VsZCBiZSBzZXQgaWYgdmFsaWQgYnV0IHdlIGRvdWJsZS1jaGVj ayBoZXJlICovCi0rCWlmIChhdXRoY3R4dC0+dmFsaWQgJiYgYXV0aGN0eHQtPnVzZXIgJiYgYXV0 aGN0eHQtPnVzZXJbMF0pIHsKLSsJCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJv ayhhdXRoY3R4dC0+dXNlciwKLSsJCSAgICBhdXRoY3R4dC0+cHcsIDEpOwotKwl9Ci0gCi0gCWF1 dGhjdHh0LT5wb3N0cG9uZWQgPSAwOwotIAlzc2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0df VVNFUkFVVEhfR1NTQVBJX1RPS0VOLCBOVUxMKTsKLUBAIC0zNTcsMTAgKzQxMywxNiBAQAotIAkJ ZmF0YWxfZigic3NoYnVmX211dGFibGVfcHRyIGZhaWxlZCIpOwotIAlnc3NidWYubGVuZ3RoID0g c3NoYnVmX2xlbihiKTsKLSAKLS0JaWYgKCFHU1NfRVJST1IobW1fc3NoX2dzc2FwaV9jaGVja21p Yyhnc3NjdHh0LCAmZ3NzYnVmLCAmbWljKSkpCi0tCQlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dz c2FwaV91c2Vyb2soYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0LT5wdywgMCk7Ci0tCWVsc2UKLSsJ Z3NzYXBpX3NldF91c2VybmFtZShzc2gpOwotKwotKwlpZiAoIUdTU19FUlJPUihtbV9zc2hfZ3Nz YXBpX2NoZWNrbWljKGdzc2N0eHQsICZnc3NidWYsICZtaWMpKSkgewotKwkJaWYgKGF1dGhjdHh0 LT52YWxpZCAmJiBhdXRoY3R4dC0+dXNlciAmJiBhdXRoY3R4dC0+dXNlclswXSkgewotKwkJCWF1 dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlciwKLSsJCQkg ICAgYXV0aGN0eHQtPnB3LCAwKTsKLSsJCX0KLSsJfSBlbHNlIHsKLSAJCWxvZ2l0KCJHU1NBUEkg TUlDIGNoZWNrIGZhaWxlZCIpOwotKwl9Ci0gCi0gCXNzaGJ1Zl9mcmVlKGIpOwotIAlpZiAobWlj dXNlciAhPSBhdXRoY3R4dC0+dXNlcikKLUBAIC0zNzYsNiArNDM4LDI2IEBACi0gCXJldHVybiAw OwotIH0KLSAKLStzdGF0aWMgdm9pZCBzc2hfZ3NzYXBpX3VzZXJhdXRoX2Vycm9yKEdzc2N0eHQg KmN0eHQsIHN0cnVjdCBzc2ggKnNzaCkgewotKwljaGFyICplcnJzdHI7Ci0rCU9NX3VpbnQzMiBt YWosIG1pbjsKLSsJaW50IHI7Ci0rCi0rCWVycnN0ciA9IG1tX3NzaF9nc3NhcGlfbGFzdF9lcnJv cihjdHh0LCAmbWFqLCAmbWluKTsKLSsJaWYgKGVycnN0cikgewotKwkJaWYgKChyID0gc3NocGt0 X3N0YXJ0KHNzaCwKLSsJCSAgICBTU0gyX01TR19VU0VSQVVUSF9HU1NBUElfRVJST1IpKSAhPSAw IHx8Ci0rCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gsIG1haikpICE9IDAgfHwKLSsJCSAg ICAociA9IHNzaHBrdF9wdXRfdTMyKHNzaCwgbWluKSkgIT0gMCB8fAotKwkJICAgIChyID0gc3No cGt0X3B1dF9jc3RyaW5nKHNzaCwgZXJyc3RyKSkgIT0gMCB8fAotKwkJICAgIChyID0gc3NocGt0 X3B1dF9jc3RyaW5nKHNzaCwgIiIpKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hwa3Rfc2VuZChz c2gpKSAhPSAwIHx8Ci0rCQkgICAgKHIgPSBzc2hfcGFja2V0X3dyaXRlX3dhaXQoc3NoKSkgIT0g MCkKLSsJCQlmYXRhbF9mcihyLCAiIik7Ci0rCQlmcmVlKGVycnN0cik7Ci0rCX0KLSt9Ci0rCi0g QXV0aG1ldGhvZCBtZXRob2RfZ3Nza2V5ZXggPSB7Ci0gCSZtZXRob2RjZmdfZ3Nza2V5ZXgsCi0g CXVzZXJhdXRoX2dzc2tleWV4LAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvYXV0aC5j IG9wZW5zc2gtMTAuMnAxL2F1dGguYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvYXV0aC5jCTIw MjYtMDMtMTggMDk6Mzg6MTcuNTY3MTEwMzcwICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvYXV0 aC5jCTIwMjYtMDMtMTggMTA6MTk6MzkuNDEyNzk1OTk4ICswMTAwCi1AQCAtMjk2LDcgKzI5Niw4 IEBACi0gCSAgICBtZXRob2QsCi0gCSAgICBzdWJtZXRob2QgIT0gTlVMTCA/ICIvIiA6ICIiLCBz dWJtZXRob2QgPT0gTlVMTCA/ICIiIDogc3VibWV0aG9kLAotIAkgICAgYXV0aGN0eHQtPnZhbGlk ID8gIiIgOiAiaW52YWxpZCB1c2VyICIsCi0tCSAgICBhdXRoY3R4dC0+dXNlciwKLSsJICAgIChh dXRoY3R4dC0+dXNlciAmJiBhdXRoY3R4dC0+dXNlclswXSkgPwotKwkJYXV0aGN0eHQtPnVzZXIg OiAidW5rbm93biIsCi0gCSAgICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLAotIAkgICAgc3NoX3Jl bW90ZV9wb3J0KHNzaCksCi0gCSAgICBleHRyYSAhPSBOVUxMID8gIjogIiA6ICIiLAotQEAgLTQ4 OCwxMyArNDg5LDE4IEBACi0gI2VuZGlmCi0gCi0gCXB3ID0gZ2V0cHduYW0odXNlcik7Ci0rI2lm ZGVmIFVTRV9QQU0KLSsJaWYgKG9wdGlvbnMudXNlX3BhbSAmJiBvcHRpb25zLnBlcm1pdF9wYW1f dXNlcl9jaGFuZ2UgJiYgcHcgPT0gTlVMTCkKLSsJCXB3ID0gc3NocGFtX2dldHB3KHVzZXIpOwot KyNlbmRpZgotIAotICNpZiBkZWZpbmVkKF9BSVgpICYmIGRlZmluZWQoSEFWRV9TRVRBVVRIREIp Ci0gCWFpeF9yZXN0b3JlYXV0aGRiKCk7Ci0gI2VuZGlmCi0gCWlmIChwdyA9PSBOVUxMKSB7Ci0g CQlsb2dpdCgiSW52YWxpZCB1c2VyICUuMTAwcyBmcm9tICUuMTAwcyBwb3J0ICVkIiwKLS0JCSAg ICB1c2VyLCBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSk7Ci0r CQkgICAgKHVzZXIgJiYgdXNlclswXSkgPyB1c2VyIDogInVua25vd24iLAotKwkJICAgIHNzaF9y ZW1vdGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gpKTsKLSAjaWZkZWYgQ1VTVE9N X0ZBSUxFRF9MT0dJTgotIAkJcmVjb3JkX2ZhaWxlZF9sb2dpbihzc2gsIHVzZXIsCi0gCQkgICAg YXV0aF9nZXRfY2Fub25pY2FsX2hvc3RuYW1lKHNzaCwgb3B0aW9ucy51c2VfZG5zKSwgInNzaCIp OwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvYXV0aC5oIG9wZW5zc2gtMTAuMnAxL2F1 dGguaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvYXV0aC5oCTIwMjYtMDMtMTggMDk6Mzg6MTcu NTY3MTU1MzQwICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvYXV0aC5oCTIwMjYtMDMtMTggMTA6 MTk6MzkuNDEzMjEwMDI1ICswMTAwCi1AQCAtODUsNiArODUsOCBAQAotIAlrcmI1X3ByaW5jaXBh bAkga3JiNV91c2VyOwotIAljaGFyCQkqa3JiNV90aWNrZXRfZmlsZTsKLSAJY2hhcgkJKmtyYjVf Y2NuYW1lOwotKyNlbmRpZgotKyNpZmRlZiBHU1NBUEkKLSAJaW50CQkga3JiNV9zZXRfZW52Owot ICNlbmRpZgotIAlzdHJ1Y3Qgc3NoYnVmCSpsb2dpbm1zZzsKLWRpZmYgLU51ciBvcGVuc3NoLTEw LjJwMS5vcmlnL2F1dGgtcGFtLmMgb3BlbnNzaC0xMC4ycDEvYXV0aC1wYW0uYwotLS0tIG9wZW5z c2gtMTAuMnAxLm9yaWcvYXV0aC1wYW0uYwkyMDI2LTAzLTE4IDA5OjM4OjE3Ljc5NTk1NzcyMyAr MDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL2F1dGgtcGFtLmMJMjAyNi0wMy0xOCAxMDoyMjozOC4z ODE1MDY2MzQgKzAxMDAKLUBAIC0yNDgsNiArMjQ4LDcgQEAKLSBzdGF0aWMgY29uc3QgY2hhciAq c3NocGFtX3Bhc3N3b3JkID0gTlVMTDsKLSBzdGF0aWMgY2hhciAqc3NocGFtX3Job3N0ID0gTlVM TDsKLSBzdGF0aWMgY2hhciAqc3NocGFtX2xhZGRyID0gTlVMTDsKLStzdGF0aWMgc3RydWN0IHNz aCAqc3NocGFtX3NzaCA9IE5VTEw7Ci0gCi0gLyogU29tZSBQQU0gaW1wbGVtZW50YXRpb25zIGRv bid0IGltcGxlbWVudCB0aGlzICovCi0gI2lmbmRlZiBIQVZFX1BBTV9HRVRFTlZMSVNUCi1AQCAt Mjk2LDYgKzI5Nyw1NiBAQAotICMgZGVmaW5lIHBhbV9jaGF1dGh0b2soYSxiKQkoc3NocGFtX2No YXV0aHRva19ydWlkKChhKSwgKGIpKSkKLSAjZW5kaWYKLSAKLStzdHJ1Y3QgcGFzc3dkICoKLStz c2hwYW1fZ2V0cHcoY29uc3QgY2hhciAqdXNlcikKLSt7Ci0rCXN0cnVjdCBwYXNzd2QgKnB3Owot KwotKwlpZiAoKHB3ID0gZ2V0cHduYW0odXNlcikpICE9IE5VTEwpCi0rCQlyZXR1cm4ocHcpOwot KwotKwlkZWJ1ZygiUEFNOiBmYWtpbmcgcGFzc3dkIHN0cnVjdCBmb3IgdXNlciAnJS4xMDBzJyIs IHVzZXIpOwotKwlpZiAoKHB3ID0gZ2V0cHduYW0oU1NIX1BSSVZTRVBfVVNFUikpID09IE5VTEwp Ci0rCQlyZXR1cm4gTlVMTDsKLSsJcHctPnB3X25hbWUgPSB4c3RyZHVwKHVzZXIpOwkvKiBYWFgg bGVhayAqLwotKwlwdy0+cHdfc2hlbGwgPSAiL2Jpbi90cnVlIjsKLSsJcHctPnB3X2dlY29zID0g InNzaGQgZmFrZSBQQU0gdXNlciI7Ci0rCXJldHVybiAocHcpOwotK30KLSsKLSt2b2lkCi0rc3No cGFtX2NoZWNrX3VzZXJjaGFuZ2VkKHZvaWQpCi0rewotKwlpbnQgc3NocGFtX2VycjsKLSsJc3Ry dWN0IHBhc3N3ZCAqcHc7Ci0rCWNvbnN0IGNoYXIgKnVzZXI7Ci0rCi0rCWRlYnVnKCJzc2hwYW1f Y2hlY2tfdXNlcmNoYW5nZWQiKTsKLSsJc3NocGFtX2VyciA9IHBhbV9nZXRfaXRlbShzc2hwYW1f aGFuZGxlLCBQQU1fVVNFUiwKLSsJCQkJICAoc3NocGFtX2NvbnN0IHZvaWQgKiopJnVzZXIpOwot KwlpZiAoc3NocGFtX2VyciAhPSBQQU1fU1VDQ0VTUykKLSsJCWZhdGFsKCJQQU06IGNvdWxkIG5v dCBnZXQgUEFNX1VTRVI6ICVzIiwKLSsJCSAgICBwYW1fc3RyZXJyb3Ioc3NocGFtX2hhbmRsZSwg c3NocGFtX2VycikpOwotKwlkZWJ1Zygic3NocGFtX2NoZWNrX3VzZXJjaGFuZ2VkOiB1c2VyIHdh cyAnJS4xMDBzJyIsCi0rCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKTsKLSsJaWYg KHN0cmNtcCh1c2VyLCBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKSAhPSAwKSB7Ci0rCQlk ZWJ1ZygiUEFNOiB1c2VyIG1hcHBlZCBmcm9tICclLjEwMHMnIHRvICclLjEwMHMnIiwKLSsJCSAg ICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lLCB1c2VyKTsKLSsJCWlmICgocHcgPSBnZXRw d25hbSh1c2VyKSkgPT0gTlVMTCkKLSsJCQlmYXRhbCgiUEFNOiBjb3VsZCBub3QgZ2V0IHBhc3N3 ZCBlbnRyeSBmb3IgdXNlciAiCi0rCQkJICAgICInJS4xMDBzJyBwcm92aWRlZCBieSBQQU1fVVNF UiIsIHVzZXIpOwotKwkJcHdmcmVlKHNzaHBhbV9hdXRoY3R4dC0+cHcpOwotKwkJc3NocGFtX2F1 dGhjdHh0LT5wdyA9IHB3Y29weShwdyk7Ci0rCQlzc2hwYW1fYXV0aGN0eHQtPnZhbGlkID0gYWxs b3dlZF91c2VyKHNzaHBhbV9zc2gsIHB3KTsKLSsJCWZyZWUoc3NocGFtX2F1dGhjdHh0LT51c2Vy KTsKLSsJCXNzaHBhbV9hdXRoY3R4dC0+dXNlciA9IHhzdHJkdXAodXNlcik7Ci0rCQlkZWJ1Zygi UEFNOiB1c2VyICclLjEwMHMnIG5vdyAlc3ZhbGlkIiwgdXNlciwKLSsJCSAgICBzc2hwYW1fYXV0 aGN0eHQtPnZhbGlkID8gIiIgOiAiaW4iKTsKLSsJfQotKwlkZWJ1Zygic3NocGFtX2NoZWNrX3Vz ZXJjaGFuZ2VkOiB1c2VyIGlzICclLjEwMHMnIiwKLSsJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHct PnB3X25hbWUpOwotK30KLSsKLSBzdGF0aWMgdm9pZAotIHNzaHBhbV9wYXNzd29yZF9jaGFuZ2Vf cmVxdWlyZWQoaW50IHJlcWQpCi0gewotQEAgLTMyNyw3ICszNzgsNyBAQAotIHN0YXRpYyB2b2lk Ci0gaW1wb3J0X2Vudmlyb25tZW50cyhzdHJ1Y3Qgc3NoYnVmICpiKQotIHsKLS0JY2hhciAqZW52 OwotKwljaGFyICplbnYsICp1c2VyOwotIAl1X2ludCBuLCBpLCBudW1fZW52OwotIAlpbnQgcjsK LSAKLUBAIC0zNDMsNiArMzk0LDE5IEBACi0gCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKGIsICZu KSkgIT0gMCkKLSAJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKLSAJc3NocGFtX3Bhc3N3 b3JkX2NoYW5nZV9yZXF1aXJlZChuICE9IDApOwotKwlpZiAob3B0aW9ucy5wZXJtaXRfcGFtX3Vz ZXJfY2hhbmdlKSB7Ci0rCQlpZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcoYiwgJnVzZXIsIE5V TEwpKSAhPSAwKQotKwkJCWZhdGFsKCIlczogYnVmZmVyIGVycm9yOiAlcyIsIF9fZnVuY19fLCBz c2hfZXJyKHIpKTsKLSsJCWRlYnVnKCJQQU06IHVzZXIgaXMgJyUuMTAwcyciLAotKwkJICAgIHNz aHBhbV9hdXRoY3R4dC0+cHctPnB3X25hbWUpOwotKwkJZGVidWcoIlBBTTogZ290IHVzZXJuYW1l ICclLjEwMHMnIGZyb20gdGhyZWFkIiwgdXNlcik7Ci0rCQlpZiAoKHNzaHBhbV9lcnIgPSBwYW1f c2V0X2l0ZW0oc3NocGFtX2hhbmRsZSwgUEFNX1VTRVIsIHVzZXIpKQotKwkJICAgICE9IFBBTV9T VUNDRVNTKQotKwkJCWZhdGFsKCJQQU06IGZhaWxlZCB0byBzZXQgUEFNX1VTRVI6ICVzIiwKLSsJ CQkgICAgcGFtX3N0cmVycm9yKHNzaHBhbV9oYW5kbGUsIHNzaHBhbV9lcnIpKTsKLSsJCXB3ZnJl ZShzc2hwYW1fYXV0aGN0eHQtPnB3KTsKLSsJCXNzaHBhbV9hdXRoY3R4dC0+cHcgPSBwd2NvcHko c3NocGFtX2dldHB3KHVzZXIpKTsKLSsJfQotIAotIAkvKiBJbXBvcnQgZW52aXJvbm1lbnQgZnJv bSBzdWJwcm9jZXNzICovCi0gCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKGIsICZudW1fZW52KSkg IT0gMCkKLUBAIC01NTIsNiArNjE2LDEzIEBACi0gCWlmICgoc3NocGFtX2VyciA9IGNoZWNrX3Bh bV91c2VyKHNzaHBhbV9hdXRoY3R4dCkpICE9IFBBTV9TVUNDRVNTKQotIAkJZ290byBhdXRoX2Zh aWw7Ci0gCi0rCWlmIChvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpIHsKLSsJCWRlYnVn KCJzc2hwYW1fdGhyZWFkOiB1c2VyIGlzICclLjEwMHMnIiwKLSsJCSAgICBzc2hwYW1fYXV0aGN0 eHQtPnB3LT5wd19uYW1lKTsKLSsJCXNzaHBhbV9jaGVja191c2VyY2hhbmdlZCgpOwotKwkJZGVi dWcoInNzaHBhbV90aHJlYWQ6IHVzZXIgaXMgJyUuMTAwcyciLAotKwkJICAgIHNzaHBhbV9hdXRo Y3R4dC0+cHctPnB3X25hbWUpOwotKwl9Ci0gCWlmICghZG9fcGFtX2FjY291bnQoKSkgewotIAkJ LyogUHJlc2VydmUgUEFNX1BFUk1fREVOSUVEIGFuZCBQQU1fVVNFUl9VTktOT1dOLgotIAkJICog QmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3Igb3RoZXIgZXJyb3JzLiAqLwotQEAgLTU3Niw2ICs2 NDcsMTMgQEAKLSAJaWYgKChyID0gc3NoYnVmX3B1dF91MzIoYnVmZmVyLCBzc2hwYW1fYWNjb3Vu dF9zdGF0dXMpKSAhPSAwIHx8Ci0gCSAgICAociA9IHNzaGJ1Zl9wdXRfdTMyKGJ1ZmZlciwgc3No cGFtX2F1dGhjdHh0LT5mb3JjZV9wd2NoYW5nZSkpICE9IDApCi0gCQlmYXRhbF9mcihyLCAiYnVm ZmVyIGVycm9yIik7Ci0rCWlmIChvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpIHsKLSsJ CWRlYnVnKCJzc2hwYW1fdGhyZWFkOiB1c2VyIGlzICclLjEwMHMnIiwKLSsJCSAgICBzc2hwYW1f YXV0aGN0eHQtPnB3LT5wd19uYW1lKTsKLSsJCWlmICgociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhi dWZmZXIsCi0rCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSkpICE9IDApCi0rCQkJ ZmF0YWwoIiVzOiBidWZmZXIgZXJyb3I6ICVzIiwgX19mdW5jX18sIHNzaF9lcnIocikpOwotKwl9 Ci0gCi0gCS8qIEV4cG9ydCBhbnkgZW52aXJvbm1lbnQgc3RyaW5ncyBzZXQgaW4gY2hpbGQgKi8K LSAJZm9yIChpID0gMDsgZW52aXJvbltpXSAhPSBOVUxMOyBpKyspIHsKLUBAIC03NjUsNiArODQz LDggQEAKLSAJCSAgICBvcHRpb25zLnVzZV9kbnMpKTsKLSAJCXNzaHBhbV9sYWRkciA9IGdldF9s b2NhbF9pcGFkZHIoCi0gCQkgICAgc3NoX3BhY2tldF9nZXRfY29ubmVjdGlvbl9pbihzc2gpKTsK LSsJCS8qIFNhdmUgc28gYWxsb3dlZF91c2VyIGNhbiBiZSBjYWxsZWQgbGF0ZXIgKi8KLSsJCXNz aHBhbV9zc2ggPSBzc2g7Ci0gCX0KLSAJaWYgKHNzaHBhbV9yaG9zdCAhPSBOVUxMICYmIHN0cmNt cChzc2hwYW1fcmhvc3QsICJVTktOT1dOIikgIT0gMCkgewotIAkJZGVidWcoIlBBTTogc2V0dGlu ZyBQQU1fUkhPU1QgdG8gXCIlc1wiIiwgc3NocGFtX3Job3N0KTsKLUBAIC0xMTIxLDYgKzEyMDEs MTggQEAKLSAJZGVidWczKCJQQU06ICVzIHBhbV9hY2N0X21nbXQgPSAlZCAoJXMpIiwgX19mdW5j X18sIHNzaHBhbV9lcnIsCi0gCSAgICBwYW1fc3RyZXJyb3Ioc3NocGFtX2hhbmRsZSwgc3NocGFt X2VycikpOwotIAotKwlpZiAob3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlKSB7Ci0rCQlk ZWJ1ZygiZG9fcGFtX2FjY291bnQ6IHVzZXIgaXMgJyUuMTAwcyciLAotKwkJICAgIHNzaHBhbV9h dXRoY3R4dC0+cHctPnB3X25hbWUpOwotKwkJc3NocGFtX2NoZWNrX3VzZXJjaGFuZ2VkKCk7Ci0r CQlkZWJ1ZygiZG9fcGFtX2FjY291bnQ6IHVzZXIgaXMgJyUuMTAwcyciLAotKwkJICAgIHNzaHBh bV9hdXRoY3R4dC0+cHctPnB3X25hbWUpOwotKwkJaWYgKGdldHB3bmFtKHNzaHBhbV9hdXRoY3R4 dC0+cHctPnB3X25hbWUpID09IE5VTEwpCi0rCQkJZmF0YWwoIlBBTTogY29tcGxldGVkIGF1dGhl bnRpY2F0aW9uIGJ1dCBQQU0gYWNjb3VudCBpbnZhbGlkIik7Ci0rCQlkZWJ1ZygiZG9fcGFtX2Fj Y291bnQ6IHVzZXIgaXMgJyUuMTAwcyciLAotKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3 X25hbWUpOwotKwl9Ci0rCi0gCWlmIChzc2hwYW1fZXJyICE9IFBBTV9TVUNDRVNTICYmIHNzaHBh bV9lcnIgIT0gUEFNX05FV19BVVRIVE9LX1JFUUQpIHsKLSAJCXNzaHBhbV9hY2NvdW50X3N0YXR1 cyA9IDA7Ci0gCQlyZXR1cm4gKHNzaHBhbV9hY2NvdW50X3N0YXR1cyk7Ci1AQCAtMTQwOSw2ICsx NTAxLDkgQEAKLSAJZXhwb3NlX2F1dGhpbmZvKF9fZnVuY19fKTsKLSAKLSAJc3NocGFtX2VyciA9 IHBhbV9hdXRoZW50aWNhdGUoc3NocGFtX2hhbmRsZSwgZmxhZ3MpOwotKwlpZiAob3B0aW9ucy5w ZXJtaXRfcGFtX3VzZXJfY2hhbmdlKSB7Ci0rCQlzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQoKTsK LSsJfQotIAlzc2hwYW1fcGFzc3dvcmQgPSBOVUxMOwotIAlmcmVlKGZha2UpOwotIAlpZiAoc3No cGFtX2VyciA9PSBQQU1fU1VDQ0VTUykKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL2F1 dGgtcGFtLmggb3BlbnNzaC0xMC4ycDEvYXV0aC1wYW0uaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9y aWcvYXV0aC1wYW0uaAkyMDI2LTAzLTE4IDA5OjM4OjE3LjE2NzIyMDUwMiArMDEwMAotKysrIG9w ZW5zc2gtMTAuMnAxL2F1dGgtcGFtLmgJMjAyNi0wMy0xOCAxMDoxOTozOS40MTQxNzI1NDMgKzAx MDAKLUBAIC00Myw1ICs0Myw2IEBACi0gaW50IHNzaHBhbV9nZXRfbWF4dHJpZXNfcmVhY2hlZCh2 b2lkKTsKLSB2b2lkIHNzaHBhbV9zZXRfbWF4dHJpZXNfcmVhY2hlZChpbnQpOwotIGludCBpc19w YW1fc2Vzc2lvbl9vcGVuKHZvaWQpOwotK3N0cnVjdCBwYXNzd2QgKnNzaHBhbV9nZXRwdyhjb25z dCBjaGFyICopOwotIAotICNlbmRpZiAvKiBVU0VfUEFNICovCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4ycDEub3JpZy9jYW5vaG9zdC5jIG9wZW5zc2gtMTAuMnAxL2Nhbm9ob3N0LmMKLS0tLSBvcGVu c3NoLTEwLjJwMS5vcmlnL2Nhbm9ob3N0LmMJMjAyNi0wMy0xOCAwOTozODoxNy4yNzQxODg3MzMg KzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9jYW5vaG9zdC5jCTIwMjYtMDMtMTggMTA6MTk6Mzku NDE0NDEwMjM0ICswMTAwCi1AQCAtMTcsNiArMTcsNyBAQAotICNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KLSAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotICNpbmNsdWRlIDxzeXMvdW4uaD4KLSsjaW5j bHVkZSA8c3lzL3BhcmFtLmg+ICAgICAgICAgIC8qIGZvciBNQVhIT1NUTkFNRUxFTiAqLwotIAot ICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0gI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotQEAgLTMw MCwzICszMDEsMzMgQEAKLSB7Ci0gCXJldHVybiBnZXRfc29ja19wb3J0KHNvY2ssIDEpOwotIH0K LSsKLSt2b2lkCi0rcmVzb2x2ZV9sb2NhbGhvc3QoY2hhciAqKmhvc3QpCi0rewotKwlzdHJ1Y3Qg aG9zdGVudCAqaG9zdGluZm87Ci0rCi0rCWhvc3RpbmZvID0gZ2V0aG9zdGJ5bmFtZSgqaG9zdCk7 Ci0rCWlmIChob3N0aW5mbyA9PSBOVUxMIHx8IGhvc3RpbmZvLT5oX25hbWUgPT0gTlVMTCkgewot KwkJZGVidWcoImdldGhvc3RieW5hbWUoJXMpIGZhaWxlZCIsICpob3N0KTsKLSsJCXJldHVybjsK LSsJfQotKwlpZiAoaG9zdGluZm8tPmhfYWRkcnR5cGUgPT0gQUZfSU5FVCkgewotKwkJc3RydWN0 IGluX2FkZHIgYWRkcjsKLSsJCWFkZHIgPSAqKHN0cnVjdCBpbl9hZGRyICopKGhvc3RpbmZvLT5o X2FkZHIpOwotKwkJaWYgKG50b2hsKGFkZHIuc19hZGRyKSA9PSBJTkFERFJfTE9PUEJBQ0spIHsK LSsJCQljaGFyIGJ1ZltNQVhIT1NUTkFNRUxFTl07Ci0rCQkJaWYgKGdldGhvc3RuYW1lKGJ1Ziwg c2l6ZW9mKGJ1ZikpIDwgMCkgewotKwkJCQlkZWJ1ZygiZ2V0aG9zdG5hbWUoKSBmYWlsZWQiKTsK LSsJCQkJcmV0dXJuOwotKwkJCX0KLSsJCQlob3N0aW5mbyA9IGdldGhvc3RieW5hbWUoYnVmKTsK LSsJCQlmcmVlKCpob3N0KTsKLSsJCQlpZiAoaG9zdGluZm8gPT0gTlVMTCB8fCBob3N0aW5mby0+ aF9uYW1lID09IE5VTEwpIHsKLSsJCQkJKmhvc3QgPSB4c3RyZHVwKGJ1Zik7Ci0rCQkJfSBlbHNl IHsKLSsJCQkJKmhvc3QgPSB4c3RyZHVwKGhvc3RpbmZvLT5oX25hbWUpOwotKwkJCX0KLSsJCX0K LSsJfQotK30KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL2Nhbm9ob3N0Lmggb3BlbnNz aC0xMC4ycDEvY2Fub2hvc3QuaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2Fub2hvc3QuaAky MDI2LTAzLTE4IDA5OjM4OjE3LjI3NDIxNTM2OSArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL2Nh bm9ob3N0LmgJMjAyNi0wMy0xOCAxMDoxOTozOS40MTQ1ODk2NzIgKzAxMDAKLUBAIC0yNiw0ICsy Niw2IEBACi0gCi0gI2VuZGlmIC8qIF9DQU5PSE9TVF9IICovCi0gCi0rdm9pZAkJIHJlc29sdmVf bG9jYWxob3N0KGNoYXIgKipob3N0KTsKLSsKLSB2b2lkCQkgaXB2NjRfbm9ybWFsaXNlX21hcHBl ZChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqLCBzb2NrbGVuX3QgKik7Ci1kaWZmIC1OdXIgb3Bl bnNzaC0xMC4ycDEub3JpZy9jb25maWd1cmUuYWMgb3BlbnNzaC0xMC4ycDEvY29uZmlndXJlLmFj Ci0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9jb25maWd1cmUuYWMJMjAyNi0wMy0xOCAwOTozODox Ny43Nzk0MjQ4MzIgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9jb25maWd1cmUuYWMJMjAyNi0w My0xOCAxMDoxOTozOS40MTU0OTQwMTcgKzAxMDAKLUBAIC01MDc0LDYgKzUwNzQsMTQgQEAKLSAJ CQkJQUNfQ0hFQ0tfSEVBREVSKFtnc3NhcGlfa3JiNS5oXSwgLAotIAkJCQkJCVsgQ1BQRkxBR1M9 IiRvbGRDUFAiIF0pCi0gCi0rCQkJCSMgSWYgd2UncmUgdXNpbmcgc29tZSBvdGhlciBHU1NBUEkK LSsJCQkJaWYgdGVzdCAtbiAiJEdTU0FQSSIgOyB0aGVuCi0rCQkJCQlBQ19NU0dfRVJST1IoW1By ZXZpb3VzbHkgY29uZmlndXJlZCBHU1NBUEkgbGlicmFyeSBjb25mbGljdHMgd2l0aCBLZXJiZXJv cyBHU0kuXSkKLSsJCQkJZmkKLSsJCi0rCQkJCWlmIHRlc3QgLXogIiRHU1NBUEkiOyB0aGVuCi0r CQkJCQlHU1NBUEk9IktSQjUiOwotKwkJCQlmaQotIAkJCWZpCi0gCQlmaQotIAkJaWYgdGVzdCAt biAiJHtycGF0aF9vcHR9IiA7IHRoZW4KLUBAIC01MTE2LDYgKzUxMjQsNDAgQEAKLSBBQ19TVUJT VChbSzVMSUJTXSkKLSBBQ19TVUJTVChbQ0hBTk5FTExJQlNdKQotIAotKyMgQ2hlY2sgd2hldGhl ciB0aGUgdXNlciB3YW50cyBHU0kgKEdsb2J1cykgc3VwcG9ydAotK2dzaT0ibm8iCi0rQUNfQVJH X1dJVEgoZ3NpLAotKwlbICAtLXdpdGgtZ3NpICAgICAgICAgICAgICBFbmFibGUgR2xvYnVzIEdT SSBhdXRoZW50aWNhdGlvbiBzdXBwb3J0XSwKLSsJWwotKwkJZ3NpPSIkd2l0aHZhbCIKLSsJXQot KykKLSsKLStpZiB0ZXN0ICJ4JGdzaSIgIT0gInhubyIgOyB0aGVuCi0rCSMgR2xvYnVzIEdTU0FQ SSBjb25maWd1cmF0aW9uCi0rCUFDX01TR19DSEVDS0lORyhmb3IgR2xvYnVzIEdTSSkKLSsJQUNf REVGSU5FKEdTSSwgMSwgW0RlZmluZSBpZiB5b3Ugd2FudCBHU0kvR2xvYnVzIGF1dGhlbnRpY2F0 aW9uIHN1cHBvcnQuXSkKLSsKLSsJaWYgdGVzdCAtbiAiJEdTU0FQSSIgOyB0aGVuCi0rCQlBQ19N U0dfRVJST1IoW1ByZXZpb3VzbHkgY29uZmlndXJlZCBHU1NBUEkgbGlicmFyeSBjb25mbGljdHMg d2l0aCBHbG9idXMgR1NJLl0pCi0rCWZpCi0rCi0rCWlmIHRlc3QgLXogIiRHU1NBUEkiIDsgdGhl bgotKwkJR1NTQVBJPSJHU0kiCi0rCWZpCi0rCi0rCUFDX1BBVEhfVE9PTChbUEtHQ09ORklHXSwg W3BrZy1jb25maWddLCBbbm9dKQotKwlpZiB0ZXN0ICJ4JFBLR0NPTkZJRyIgIT0gInhubyI7IHRo ZW4KLSsJCUxJQlM9IiRMSUJTIGAkUEtHQ09ORklHIC0tbGlicyBnbG9idXMtZ3NzLWFzc2lzdCBn bG9idXMtZ3NzYXBpLWdzaSBnbG9idXMtY29tbW9uYCIKLSsJCUNQUEZMQUdTPSIkQ1BQRkxBR1Mg YCRQS0dDT05GSUcgLS1jZmxhZ3MgZ2xvYnVzLWdzcy1hc3Npc3QgZ2xvYnVzLWdzc2FwaS1nc2kg Z2xvYnVzLWNvbW1vbmAiCi0rCWZpCi0rCi0rCUFDX0RFRklORShHU1NBUEkpCi0rCUFDX0RFRklO RShIQVZFX0dTU0FQSV9IKQotKwotKwlBQ19DSEVDS19GVU5DUyhnbG9idXNfZ3NzX2Fzc2lzdF9t YXBfYW5kX2F1dGhvcml6ZSkKLStmaQotKwotICMgTG9va2luZyBmb3IgcHJvZ3JhbXMsIHBhdGhz IGFuZCBmaWxlcwotIAotIFBSSVZTRVBfUEFUSD0vdmFyL2VtcHR5Ci1kaWZmIC1OdXIgb3BlbnNz aC0xMC4ycDEub3JpZy9nc3MtZ2Vuci5jIG9wZW5zc2gtMTAuMnAxL2dzcy1nZW5yLmMKLS0tLSBv cGVuc3NoLTEwLjJwMS5vcmlnL2dzcy1nZW5yLmMJMjAyNi0wMy0xOCAwOTozODoxNy44MDgyMDc2 MDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9nc3MtZ2Vuci5jCTIwMjYtMDMtMTggMTA6MTk6 MzkuNDE2MjI1NTg0ICswMTAwCi1AQCAtNDEsNiArNDEsNyBAQAotICNpbmNsdWRlICJzc2hlcnIu aCIKLSAjaW5jbHVkZSAic3NoYnVmLmgiCi0gI2luY2x1ZGUgImxvZy5oIgotKyNpbmNsdWRlICJj YW5vaG9zdC5oIgotICNpbmNsdWRlICJzc2gyLmgiCi0gI2luY2x1ZGUgImNpcGhlci5oIgotICNp bmNsdWRlICJzc2hrZXkuaCIKLUBAIC00MjYsOSArNDI3LDE4IEBACi0gc3NoX2dzc2FwaV9pbXBv cnRfbmFtZShHc3NjdHh0ICpjdHgsIGNvbnN0IGNoYXIgKmhvc3QpCi0gewotIAlnc3NfYnVmZmVy X2Rlc2MgZ3NzYnVmOwotKwljaGFyICp4aG9zdDsKLSAJY2hhciAqdmFsOwotIAotLQl4YXNwcmlu dGYoJnZhbCwgImhvc3RAJXMiLCBob3N0KTsKLSsJLyogTWFrZSBhIGNvcHkgb2YgdGhlIGhvc3Qg bmFtZSwgaW4gY2FzZSBpdCB3YXMgcmV0dXJuZWQgYnkgYQotKwkgKiBwcmV2aW91cyBjYWxsIHRv IGdldGhvc3RieW5hbWUoKS4gKi8KLSsJeGhvc3QgPSB4c3RyZHVwKGhvc3QpOwotKwotKwkvKiBN YWtlIHN1cmUgd2UgaGF2ZSB0aGUgRlFETi4gU29tZSBHU1NBUEkgaW1wbGVtZW50YXRpb25zIGRv bid0IGRvCi0rCSAqIHRoaXMgZm9yIHVzIHRoZW1zZWx2ZXMgKi8KLSsJcmVzb2x2ZV9sb2NhbGhv c3QoJnhob3N0KTsKLSsKLSsJeGFzcHJpbnRmKCZ2YWwsICJob3N0QCVzIiwgeGhvc3QpOwotIAln c3NidWYudmFsdWUgPSB2YWw7Ci0gCWdzc2J1Zi5sZW5ndGggPSBzdHJsZW4oZ3NzYnVmLnZhbHVl KTsKLSAKLUBAIC00MzYsNiArNDQ2LDcgQEAKLSAJICAgICZnc3NidWYsIEdTU19DX05UX0hPU1RC QVNFRF9TRVJWSUNFLCAmY3R4LT5uYW1lKSkpCi0gCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci0g Ci0rCWZyZWUoeGhvc3QpOwotIAlmcmVlKGdzc2J1Zi52YWx1ZSk7Ci0gCXJldHVybiAoY3R4LT5t YWpvcik7Ci0gfQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvZ3NzLXNlcnYuYyBvcGVu c3NoLTEwLjJwMS9nc3Mtc2Vydi5jCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9nc3Mtc2Vydi5j CTIwMjYtMDMtMTggMDk6Mzg6MTcuNzUyMDk3NzcwICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEv Z3NzLXNlcnYuYwkyMDI2LTAzLTE4IDEwOjE5OjM5LjQxNjU4MTk1OCArMDEwMAotQEAgLTUxLDEw ICs1MSwxMiBAQAotICNpbmNsdWRlICJtb25pdG9yX3dyYXAuaCIKLSAKLSBleHRlcm4gU2VydmVy T3B0aW9ucyBvcHRpb25zOwotK2V4dGVybiBBdXRoY3R4dCAqdGhlX2F1dGhjdHh0OwotIAotIHN0 YXRpYyBzc2hfZ3NzYXBpX2NsaWVudCBnc3NhcGlfY2xpZW50ID0KLS0gICAgeyBHU1NfQ19FTVBU WV9CVUZGRVIsIEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfTk9fQ1JFREVOVElBTCwKLS0gICAg R1NTX0NfTk9fTkFNRSwgTlVMTCwge05VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LCAwLCAw LCBOVUxMfTsKLSsgICAgeyB7MCwgTlVMTH0sIEdTU19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfRU1Q VFlfQlVGRkVSLCBHU1NfQ19OT19DUkVERU5USUFMLAotKyAgICAgIEdTU19DX05PX05BTUUsIEdT U19DX05PX05BTUUsIE5VTEwsIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwKLSsgICAg ICBHU1NfQ19OT19DT05URVhULCAwLCAwLCBOVUxMfTsKLSAKLSBzc2hfZ3NzYXBpX21lY2ggZ3Nz YXBpX251bGxfbWVjaCA9Ci0gICAgIHsgTlVMTCwgTlVMTCwgezAsIE5VTEx9LCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMfTsKLUBAIC02MiwxNCArNjQsMjYgQEAKLSAjaWZkZWYgS1JCNQot IGV4dGVybiBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2tlcmJlcm9zX21lY2g7Ci0gI2VuZGlmCi0r I2lmZGVmIEdTSQotK2V4dGVybiBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNoOwotK2V4 dGVybiBzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNoX21pY3YyOwotKyNlbmRpZgotIAot IHNzaF9nc3NhcGlfbWVjaCogc3VwcG9ydGVkX21lY2hzW109IHsKLSAjaWZkZWYgS1JCNQotIAkm Z3NzYXBpX2tlcmJlcm9zX21lY2gsCi0gI2VuZGlmCi0rI2lmZGVmIEdTSQotKwkmZ3NzYXBpX2dz aV9tZWNoX21pY3YyLAotKwkmZ3NzYXBpX2dzaV9tZWNoLAotKyNlbmRpZgotIAkmZ3NzYXBpX251 bGxfbWVjaCwKLSB9OwotIAotKyNpZmRlZiBHU1NfQ19HTE9CVVNfTElNSVRFRF9QUk9YWV9GTEFH Ci0rc3RhdGljIGludCBsaW1pdGVkID0gMDsKLSsjZW5kaWYKLSsKLSAvKgotICAqIHNzaF9nc3Nh cGlfc3VwcG9ydGVkX29pZHMoKSBjYW4gY2F1c2Ugc2FuZGJveCB2aW9sYXRpb25zLCBzbyBwcmVw YXJlIHRoZQotICAqIGxpc3Qgb2Ygc3VwcG9ydGVkIG1lY2hhbmlzbXMgYmVmb3JlIHByaXZzZXAg aXMgc2V0IHVwLgotQEAgLTIzMCw2ICsyNDQsMTAgQEAKLSAJICAgICgqZmxhZ3MgJiBHU1NfQ19J TlRFR19GTEFHKSkpICYmIChjdHgtPm1ham9yID09IEdTU19TX0NPTVBMRVRFKSkgewotIAkJaWYg KHNzaF9nc3NhcGlfZ2V0Y2xpZW50KGN0eCwgJmdzc2FwaV9jbGllbnQpKQotIAkJCWZhdGFsKCJD b3VsZG4ndCBjb252ZXJ0IGNsaWVudCBuYW1lIik7Ci0rI2lmZGVmIEdTU19DX0dMT0JVU19MSU1J VEVEX1BST1hZX0ZMQUcKLSsJCWlmIChmbGFncyAmJiAoKmZsYWdzICYgR1NTX0NfR0xPQlVTX0xJ TUlURURfUFJPWFlfRkxBRykpCi0rCQkJbGltaXRlZD0xOwotKyNlbmRpZgotIAl9Ci0gCi0gCXJl dHVybiAoc3RhdHVzKTsKLUBAIC0yNDksNiArMjY3LDIwIEBACi0gCi0gCXRvayA9IGVuYW1lLT52 YWx1ZTsKLSAKLSsjaWZkZWYgR1NJIC8qIEdTSSBnc3NfZXhwb3J0X25hbWUoKSBpcyBicm9rZW4u ICovCi0rCWlmICgoKGN0eC0+b2lkLT5sZW5ndGggPT0gZ3NzYXBpX2dzaV9tZWNoLm9pZC5sZW5n dGgpICYmCi0rCSAgICAgKG1lbWNtcChjdHgtPm9pZC0+ZWxlbWVudHMsIGdzc2FwaV9nc2lfbWVj aC5vaWQuZWxlbWVudHMsCi0rCQkgICAgIGdzc2FwaV9nc2lfbWVjaC5vaWQubGVuZ3RoKSA9PSAw KSkgfHwKLSsJICAgICgoY3R4LT5vaWQtPmxlbmd0aCA9PSBnc3NhcGlfZ3NpX21lY2hfbWljdjIu b2lkLmxlbmd0aCkgJiYKLSsJICAgICAobWVtY21wKGN0eC0+b2lkLT5lbGVtZW50cywgZ3NzYXBp X2dzaV9tZWNoX21pY3YyLm9pZC5lbGVtZW50cywKLSsJCSAgICAgZ3NzYXBpX2dzaV9tZWNoX21p Y3YyLm9pZC5sZW5ndGgpID09IDApKSkgewotKwkJbmFtZS0+bGVuZ3RoID0gZW5hbWUtPmxlbmd0 aDsKLSsJCW5hbWUtPnZhbHVlID0geG1hbGxvYyhlbmFtZS0+bGVuZ3RoKzEpOwotKwkJbWVtY3B5 KG5hbWUtPnZhbHVlLCBlbmFtZS0+dmFsdWUsIGVuYW1lLT5sZW5ndGgpOwotKwkJcmV0dXJuIEdT U19TX0NPTVBMRVRFOwotKwl9Ci0rI2VuZGlmCi0rCi0gCS8qCi0gCSAqIENoZWNrIHRoYXQgZW5h bWUgaXMgbG9uZyBlbm91Z2ggZm9yIGFsbCBvZiB0aGUgZml4ZWQgbGVuZ3RoCi0gCSAqIGhlYWRl ciwgYW5kIHRoYXQgdGhlIGluaXRpYWwgSUQgYnl0ZXMgYXJlIGNvcnJlY3QKLUBAIC0yOTcsNiAr MzI5LDcgQEAKLSB9Ci0gCi0gCi0rI2lmZGVmIEtSQjUKLSAvKiBFeHRyYWN0IGF1dGhlbnRpY2F0 aW9uIGluZGljYXRvcnMgZnJvbSB0aGUgS2VyYmVyb3MgdGlja2V0LiBBdXRoZW50aWNhdGlvbgot ICAqIGluZGljYXRvcnMgYXJlIEdTU0FQSSBuYW1lIGF0dHJpYnV0ZXMgZm9yIHRoZSBuYW1lICJh dXRoLWluZGljYXRvcnMiLgotICAqIE11bHRpcGxlIGluZGljYXRvcnMgbWlnaHQgYmUgcHJlc2Vu dCBpbiB0aGUgdGlja2V0LgotQEAgLTM4MCw2ICs0MTMsNyBAQAotIAkodm9pZCkgZ3NzX3JlbGVh c2VfYnVmZmVyX3NldCgmY3R4LT5taW5vciwgJmF0dHJzKTsKLSAJcmV0dXJuIChjdHgtPm1ham9y KTsKLSB9Ci0rI2VuZGlmCi0gCi0gCi0gLyogRXh0cmFjdCB0aGUgY2xpZW50IGRldGFpbHMgZnJv bSBhIGdpdmVuIGNvbnRleHQuIFRoaXMgY2FuIG9ubHkgcmVsaWFibHkKLUBAIC0zOTUsMjEgKzQy OSwyNCBAQAotIAlnc3NfYnVmZmVyX2Rlc2MgZW5hbWUgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0g Ci0gCWlmIChvcHRpb25zLmdzc19zdG9yZV9yZWtleSAmJiBjbGllbnQtPnVzZWQgJiYgY3R4LT5j bGllbnRfY3JlZHMpIHsKLS0JCWlmIChjbGllbnQtPm1lY2gtPm9pZC5sZW5ndGggIT0gY3R4LT5v aWQtPmxlbmd0aCB8fAotLQkJICAgIChtZW1jbXAoY2xpZW50LT5tZWNoLT5vaWQuZWxlbWVudHMs Ci0rCQlpZiAoY2xpZW50LT5vaWQubGVuZ3RoICE9IGN0eC0+b2lkLT5sZW5ndGggfHwKLSsJCSAg ICAobWVtY21wKGNsaWVudC0+b2lkLmVsZW1lbnRzLAotIAkJICAgICBjdHgtPm9pZC0+ZWxlbWVu dHMsIGN0eC0+b2lkLT5sZW5ndGgpICE9MCkpIHsKLSAJCQlkZWJ1ZygiUmVrZXllZCBjcmVkZW50 aWFscyBoYXZlIGRpZmZlcmVudCBtZWNoYW5pc20iKTsKLSAJCQlyZXR1cm4gR1NTX1NfQ09NUExF VEU7Ci0gCQl9Ci0gCi0tCQlpZiAoKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9jcmVkX2J5X21l Y2goJmN0eC0+bWlub3IsCi0tCQkgICAgY3R4LT5jbGllbnRfY3JlZHMsIGN0eC0+b2lkLCAmbmV3 X25hbWUsCi0rCQkvKiBDYWxsIGdzc19pbnF1aXJlX2NyZWQgcmF0aGVyIHRoYW4gZ3NzX2lucXVp cmVfY3JlZF9ieV9tZWNoCi0rCQkgICBiZWNhdXNlIEdTSSBkb2Vzbid0IHN1cHBvcnQgdGhlIGxh dHRlci4gLWpiYXNuZXkgKi8KLSsKLSsJCWlmICgoY3R4LT5tYWpvciA9IGdzc19pbnF1aXJlX2Ny ZWQoJmN0eC0+bWlub3IsCi0rCQkgICAgY3R4LT5jbGllbnRfY3JlZHMsICZuZXdfbmFtZSwKLSAJ CSAgICBOVUxMLCBOVUxMLCBOVUxMKSkpIHsKLSAJCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7Ci0g CQkJcmV0dXJuIChjdHgtPm1ham9yKTsKLSAJCX0KLSAKLS0JCWN0eC0+bWFqb3IgPSBnc3NfY29t cGFyZV9uYW1lKCZjdHgtPm1pbm9yLCBjbGllbnQtPm5hbWUsCi0rCQljdHgtPm1ham9yID0gZ3Nz X2NvbXBhcmVfbmFtZSgmY3R4LT5taW5vciwgY2xpZW50LT5jcmVkX25hbWUsCi0gCQkgICAgbmV3 X25hbWUsICZlcXVhbCk7Ci0gCi0gCQlpZiAoR1NTX0VSUk9SKGN0eC0+bWFqb3IpKSB7Ci1AQCAt NDI0LDkgKzQ2MSw5IEBACi0gCi0gCQlkZWJ1ZygiTWFya2luZyByZWtleWVkIGNyZWRlbnRpYWxz IGZvciBleHBvcnQiKTsKLSAKLS0JCWdzc19yZWxlYXNlX25hbWUoJmN0eC0+bWlub3IsICZjbGll bnQtPm5hbWUpOwotKwkJZ3NzX3JlbGVhc2VfbmFtZSgmY3R4LT5taW5vciwgJmNsaWVudC0+Y3Jl ZF9uYW1lKTsKLSAJCWdzc19yZWxlYXNlX2NyZWQoJmN0eC0+bWlub3IsICZjbGllbnQtPmNyZWRz KTsKLS0JCWNsaWVudC0+bmFtZSA9IG5ld19uYW1lOwotKwkJY2xpZW50LT5jcmVkX25hbWUgPSBu ZXdfbmFtZTsKLSAJCWNsaWVudC0+Y3JlZHMgPSBjdHgtPmNsaWVudF9jcmVkczsKLSAJCWN0eC0+ Y2xpZW50X2NyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKLSAJCWNsaWVudC0+dXBkYXRlZCA9 IDE7Ci1AQCAtNDQzLDEyICs0ODAsMTcgQEAKLSAJCWkrKzsKLSAJfQotIAotKwlpZiAoY2xpZW50 LT5vaWQuZWxlbWVudHMgPT0gTlVMTCkKLSsJCWNsaWVudC0+b2lkID0gKmN0eC0+b2lkOwotIAlp ZiAoY2xpZW50LT5tZWNoID09IE5VTEwpCi0gCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKLSAKLSsJ LyogQ2FsbCBnc3NfaW5xdWlyZV9jcmVkIHJhdGhlciB0aGFuIGdzc19pbnF1aXJlX2NyZWRfYnlf bWVjaAotKwkgICBiZWNhdXNlIEdTSSBkb2Vzbid0IHN1cHBvcnQgdGhlIGxhdHRlci4gLWpiYXNu ZXkgKi8KLSsKLSAJaWYgKGN0eC0+Y2xpZW50X2NyZWRzICYmCi0tCSAgICAoY3R4LT5tYWpvciA9 IGdzc19pbnF1aXJlX2NyZWRfYnlfbWVjaCgmY3R4LT5taW5vciwKLS0JICAgICBjdHgtPmNsaWVu dF9jcmVkcywgY3R4LT5vaWQsICZjbGllbnQtPm5hbWUsIE5VTEwsIE5VTEwsIE5VTEwpKSkgewot KwkgICAgKGN0eC0+bWFqb3IgPSBnc3NfaW5xdWlyZV9jcmVkKCZjdHgtPm1pbm9yLAotKwkgICAg IGN0eC0+Y2xpZW50X2NyZWRzLCAmY2xpZW50LT5jcmVkX25hbWUsIE5VTEwsIE5VTEwsIE5VTEwp KSkgewotIAkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOwotIAkJcmV0dXJuIChjdHgtPm1ham9yKTsK LSAJfQotQEAgLTQ2NSwyMiArNTA3LDMzIEBACi0gCQlyZXR1cm4gKGN0eC0+bWFqb3IpOwotIAl9 Ci0gCi0tCWlmICgoY3R4LT5tYWpvciA9IHNzaF9nc3NhcGlfcGFyc2VfZW5hbWUoY3R4LCZlbmFt ZSwKLSsJaWYgKChjbGllbnQtPm1lY2gtPm9pZC5lbGVtZW50cyAhPSBOVUxMKSAmJgotKwkgICAg KGN0eC0+bWFqb3IgPSBzc2hfZ3NzYXBpX3BhcnNlX2VuYW1lKGN0eCwmZW5hbWUsCi0gCSAgICAm Y2xpZW50LT5leHBvcnRlZG5hbWUpKSkgewotIAkJcmV0dXJuIChjdHgtPm1ham9yKTsKLSAJfQot IAotKwlpZiAoKGN0eC0+bWFqb3IgPSBnc3NfZHVwbGljYXRlX25hbWUoJmN0eC0+bWlub3IsIGN0 eC0+Y2xpZW50LAotKwkgICAgJmNsaWVudC0+Y3R4X25hbWUpKSkKLSsJCXJldHVybiBjdHgtPm1h am9yOwotKwotIAlnc3NfcmVsZWFzZV9idWZmZXIoJmN0eC0+bWlub3IsICZlbmFtZSk7Ci0rI2lm ZGVmIEtSQjUKLSAJLyogUmV0cmlldmUgYXV0aGVudGljYXRpb24gaW5kaWNhdG9ycywgaWYgdGhl eSBleGlzdCAqLwotIAlpZiAoKGN0eC0+bWFqb3IgPSBzc2hfZ3NzYXBpX2dldGluZGljYXRvcnMo Y3R4LAotIAkgICAgY3R4LT5jbGllbnQsIGNsaWVudCkpKSB7Ci0gCQlzc2hfZ3NzYXBpX2Vycm9y KGN0eCk7Ci0gCQlyZXR1cm4gKGN0eC0+bWFqb3IpOwotIAl9Ci0rI2VuZGlmCi0gCi0gCS8qIFdl IGNhbid0IGNvcHkgdGhpcyBzdHJ1Y3R1cmUsIHNvIHdlIGp1c3QgbW92ZSB0aGUgcG9pbnRlciB0 byBpdCAqLwotIAljbGllbnQtPmNyZWRzID0gY3R4LT5jbGllbnRfY3JlZHM7Ci0gCWN0eC0+Y2xp ZW50X2NyZWRzID0gR1NTX0NfTk9fQ1JFREVOVElBTDsKLSsKLSsJLyogbmVlZGVkIGZvciBnbG9i dXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpICovCi0rCWNsaWVudC0+Y29udGV4dCA9 IGN0eC0+Y29udGV4dDsKLSsKLSAJcmV0dXJuIChjdHgtPm1ham9yKTsKLSB9Ci0gCi1AQCAtNDg4 LDYgKzU0MSw3IEBACi0gdm9pZAotIHNzaF9nc3NhcGlfY2xlYW51cF9jcmVkcyh2b2lkKQotIHsK LSsjaWZkZWYgS1JCNQotIAlrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxMOwotIAlrcmI1X2Vycm9y X2NvZGUgcHJvYmxlbTsKLSAKLUBAIC01MDMsNiArNTU3LDE0IEBACi0gCQkJZ3NzYXBpX2NsaWVu dC5zdG9yZS5kYXRhID0gTlVMTDsKLSAJCX0KLSAJfQotKyNlbHNlCi0rCWlmIChnc3NhcGlfY2xp ZW50LnN0b3JlLmZpbGVuYW1lICE9IE5VTEwpIHsKLSsJCS8qIFVubGluayBwcm9iYWJseSBpc24n dCBzdWZmaWNpZW50ICovCi0rCQlkZWJ1ZygicmVtb3ZpbmcgZ3NzYXBpIGNyZWQgZmlsZVwiJXNc IiIsCi0rCQkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSk7Ci0rCQl1bmxpbmsoZ3Nz YXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSk7Ci0rCX0KLSsjZW5kaWYKLSB9Ci0gCi0gLyogQXMg dXNlciAqLwotQEAgLTUxNSw2ICs1NzcsMTEgQEAKLSAJfQotIAotIAlpZiAoZ3NzYXBpX2NsaWVu dC5tZWNoICYmIGdzc2FwaV9jbGllbnQubWVjaC0+c3RvcmVjcmVkcykgewotKwkJaWYgKG9wdGlv bnMuZ3NzX2NyZWRzX3BhdGgpIHsKLSsJCQlnc3NhcGlfY2xpZW50LnN0b3JlLmZpbGVuYW1lID0K LSsJCQkgICAgZXhwYW5kX2F1dGhvcml6ZWRfa2V5cyhvcHRpb25zLmdzc19jcmVkc19wYXRoLAot KwkJCSAgICB0aGVfYXV0aGN0eHQtPnB3KTsKLSsJCX0KLSAJCXJldHVybiAoKmdzc2FwaV9jbGll bnQubWVjaC0+c3RvcmVjcmVkcykoJmdzc2FwaV9jbGllbnQpOwotIAl9IGVsc2UKLSAJCWRlYnVn KCJzc2hfZ3NzYXBpX3N0b3JlY3JlZHM6IE5vdCBhIEdTU0FQSSBtZWNoYW5pc20iKTsKLUBAIC01 NDgsMTEgKzYxNSwxMyBAQAotIAotIAkodm9pZCkga2V4OyAvKiB1c2VkIGluIHByaXZpbGVnZSBz ZXBhcmF0aW9uICovCi0gCi0tCWlmIChnc3NhcGlfY2xpZW50LmV4cG9ydGVkbmFtZS5sZW5ndGgg PT0gMCB8fAotLQkgICAgZ3NzYXBpX2NsaWVudC5leHBvcnRlZG5hbWUudmFsdWUgPT0gTlVMTCkg ewotLQkJZGVidWcoIk5vIHN1aXRhYmxlIGNsaWVudCBkYXRhIik7Ci0rI2lmZGVmIEdTU19DX0dM T0JVU19MSU1JVEVEX1BST1hZX0ZMQUcKLSsJaWYgKGxpbWl0ZWQgJiYgb3B0aW9ucy5nc2lfYWxs b3dfbGltaXRlZF9wcm94eSAhPSAxKSB7Ci0rCQlkZWJ1ZygibGltaXRlZCBwcm94eSBub3QgYWNj ZXB0YWJsZSBmb3IgcmVtb3RlIGxvZ2luIik7Ci0gCQlyZXR1cm4gMDsKLSAJfQotKyNlbmRpZgot KwotIAlpZiAoZ3NzYXBpX2NsaWVudC5tZWNoICYmIGdzc2FwaV9jbGllbnQubWVjaC0+dXNlcm9r KQotIAkJaWYgKCgqZ3NzYXBpX2NsaWVudC5tZWNoLT51c2Vyb2spKCZnc3NhcGlfY2xpZW50LCB1 c2VyKSkgewotIAkJCWdzc2FwaV9jbGllbnQudXNlZCA9IDE7Ci1AQCAtNTYzLDYgKzYzMiw3IEBA Ci0gCQkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5kaXNwbGF5bmFt ZSk7Ci0gCQkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5leHBvcnRl ZG5hbWUpOwotIAkJCWdzc19yZWxlYXNlX2NyZWQoJmxtaW4sICZnc3NhcGlfY2xpZW50LmNyZWRz KTsKLSsJCQlnc3NfcmVsZWFzZV9uYW1lKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5jdHhfbmFtZSk7 Ci0gCi0gCQkJaWYgKGdzc2FwaV9jbGllbnQuaW5kaWNhdG9ycyAhPSBOVUxMKSB7Ci0gCQkJCWZv cihpID0gMDsgZ3NzYXBpX2NsaWVudC5pbmRpY2F0b3JzW2ldICE9IE5VTEw7IGkrKykgewotQEAg LTU4MCw2ICs2NTAsMjQgQEAKLSAJcmV0dXJuICgwKTsKLSB9Ci0gCi0rLyogUHJpdmlsZWRnZWQg Ki8KLStpbnQKLStzc2hfZ3NzYXBpX2xvY2FsbmFtZShjaGFyICoqdXNlcikKLSt7Ci0rCSp1c2Vy ID0gTlVMTDsKLSsJaWYgKGdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUubGVuZ3RoID09IDAgfHwK LSsJICAgIGdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUudmFsdWUgPT0gTlVMTCkgewotKwkJZGVi dWcoIk5vIHN1aXRhYmxlIGNsaWVudCBkYXRhIik7Ci0rCQlyZXR1cm4gKDApOwotKwl9Ci0rCWlm IChnc3NhcGlfY2xpZW50Lm1lY2ggJiYgZ3NzYXBpX2NsaWVudC5tZWNoLT5sb2NhbG5hbWUpIHsK LSsJCXJldHVybigoKmdzc2FwaV9jbGllbnQubWVjaC0+bG9jYWxuYW1lKSgmZ3NzYXBpX2NsaWVu dCx1c2VyKSk7Ci0rCX0gZWxzZSB7Ci0rCQlkZWJ1ZygiVW5rbm93biBjbGllbnQgYXV0aGVudGlj YXRpb24gdHlwZSIpOwotKwl9Ci0rCXJldHVybiAoMCk7Ci0rfQotKwotIC8qIFRoZXNlIGJpdHMg YXJlIG9ubHkgdXNlZCBmb3IgcmVrZXlpbmcuIFRoZSB1bnByaXZpbGVkZ2VkIGNoaWxkIGlzIHJ1 bm5pbmcKLSAgKiBhcyB0aGUgdXNlciwgdGhlIG1vbml0b3IgaXMgcm9vdC4KLSAgKgotQEAgLTYw Niw5ICs2OTQsMTEgQEAKLSAJcGFtX2hhbmRsZV90ICpwYW1oID0gTlVMTDsKLSAJc3RydWN0IHBh bV9jb252IHBhbWNvbnYgPSB7c3NoX2dzc2FwaV9zaW1wbGVfY29udiwgTlVMTH07Ci0gCWNoYXIg KmVudnN0cjsKLSsJY2hhciAqKnA7IGNoYXIgKipwdzsKLSAjZW5kaWYKLSAKLS0JaWYgKGdzc2Fw aV9jbGllbnQuc3RvcmUuZW52dmFsID09IE5VTEwpCi0rCWlmIChnc3NhcGlfY2xpZW50LnN0b3Jl LmZpbGVuYW1lID09IE5VTEwgJiYKLSsJICAgIGdzc2FwaV9jbGllbnQuc3RvcmUuZW52dmFsID09 IE5VTEwpCi0gCQlyZXR1cm47Ci0gCi0gCW9rID0gbW1fc3NoX2dzc2FwaV91cGRhdGVfY3JlZHMo Jmdzc2FwaV9jbGllbnQuc3RvcmUpOwotQEAgLTYyOCw2ICs3MTgsMTggQEAKLSAJaWYgKHJldCkK LSAJCXJldHVybjsKLSAKLSsJLyogUHV0IHNzaCBwYW0gc3RhY2sgZW52IHZhcmlhYmxlcyBpbiB0 aGlzIG5ldyBwYW0gc3RhY2sgZW52Ci0rCSAqIFVzaW5nIHBhbS1wa2luaXQsIEtSQjVDQ05BTUUg aXMgc2V0IGR1cmluZyBkb19wYW1fc2Vzc2lvbgotKwkgKiB0aGlzIGFkZGl0aW9uIGVuYWJsZXMg cGFtLXBraW5pdCB0byBhY2Nlc3MgS1JCNUNDTkFNRSBpZiB1c2VkCi0rCSAqIGluIHNzaGQtcmVr ZXkgc3RhY2sgdG9vCi0rCSAqLwotKwlwdyA9IHAgPSBmZXRjaF9wYW1fZW52aXJvbm1lbnQoKTsK LSsJd2hpbGUgKCAqcHcgIT0gTlVMTCApIHsKLSsJCXBhbV9wdXRlbnYocGFtaCwgKnB3KTsKLSsJ CXB3Kys7Ci0rCX0KLSsJZnJlZV9wYW1fZW52aXJvbm1lbnQocCk7Ci0rCi0gCXhhc3ByaW50Zigm ZW52c3RyLCAiJXM9JXMiLCBnc3NhcGlfY2xpZW50LnN0b3JlLmVudnZhciwKLSAJICAgIGdzc2Fw aV9jbGllbnQuc3RvcmUuZW52dmFsKTsKLSAKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmln L2dzcy1zZXJ2LWdzaS5jIG9wZW5zc2gtMTAuMnAxL2dzcy1zZXJ2LWdzaS5jCi0tLS0gb3BlbnNz aC0xMC4ycDEub3JpZy9nc3Mtc2Vydi1nc2kuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL2dzcy1zZXJ2LWdzaS5jCTIwMjYtMDMtMTggMTA6 MTk6MzkuNDE2NzU1NjU2ICswMTAwCi1AQCAtMCwwICsxLDMyOCBAQAotKy8qCi0rICogQ29weXJp Z2h0IChjKSAyMDAxLTIwMDMgU2ltb24gV2lsa2luc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQVVUSE9SIGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotKyAqIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ RVMKLSsgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELgotKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSsgKiBJTkNJREVOVEFMLCBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK LSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0rICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0rICogVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRgotKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICovCi0rCi0rI2luY2x1ZGUgImlu Y2x1ZGVzLmgiCi0rCi0rI2lmZGVmIEdTU0FQSQotKyNpZmRlZiBHU0kKLSsKLSsjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+Ci0rCi0rI2luY2x1ZGUgPHN0ZGFyZy5oPgotKyNpbmNsdWRlIDxzdHJpbmcu aD4KLSsKLSsjaW5jbHVkZSAieG1hbGxvYy5oIgotKyNpbmNsdWRlICJob3N0ZmlsZS5oIgotKyNp bmNsdWRlICJhdXRoLmgiCi0rI2luY2x1ZGUgImxvZy5oIgotKyNpbmNsdWRlICJtaXNjLmgiCi0r I2luY2x1ZGUgInNlcnZjb25mLmgiCi0rI2luY2x1ZGUgInNzaC1nc3MuaCIKLSsKLStleHRlcm4g U2VydmVyT3B0aW9ucyBvcHRpb25zOwotKwotKyNpbmNsdWRlIDxnbG9idXNfZ3NzX2Fzc2lzdC5o PgotKwotK3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfdXNlcm9rKHNzaF9nc3NhcGlfY2xpZW50 ICpjbGllbnQsIGNoYXIgKm5hbWUpOwotK3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfbG9jYWxu YW1lKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKip1c2VyKTsKLStzdGF0aWMgaW50 IHNzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCk7Ci0r c3RhdGljIGludCBzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzX21pY3YyKHNzaF9nc3NhcGlfY2xp ZW50ICpjbGllbnQpOwotK3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3JlZHMoc3No X2dzc2FwaV9jY2FjaGUgKnN0b3JlLAotKyAgICBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KTsK LStzdGF0aWMgaW50IHNzaF9nc3NhcGlfZ3NpX3VwZGF0ZWNyZWRzX21pY3YyKHNzaF9nc3NhcGlf Y2NhY2hlICpzdG9yZSwKLSsgICAgc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCk7Ci0rCi0rc3No X2dzc2FwaV9tZWNoIGdzc2FwaV9nc2lfbWVjaCA9IHsKLSsJImRadUllYk1qZ1VxYXh2YkY3aERi QXc9PSIsCi0rCSJHU0kiLAotKwl7OSwgIlx4MkJceDA2XHgwMVx4MDRceDAxXHg5Qlx4NTBceDAx XHgwMSJ9LAotKwlOVUxMLAotKwkmc3NoX2dzc2FwaV9nc2lfdXNlcm9rLAotKwkmc3NoX2dzc2Fw aV9nc2lfbG9jYWxuYW1lLAotKwkmc3NoX2dzc2FwaV9nc2lfc3RvcmVjcmVkcywKLSsJJnNzaF9n c3NhcGlfZ3NpX3VwZGF0ZWNyZWRzCi0rfTsKLSsKLStzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dz aV9tZWNoX21pY3YyID0gewotKwkidno4SjFFOVB6THI4YjFLKzByZW1UZz09IiwKLSsJIkdTSSIs Ci0rCXsxMCwgIlx4MmJceDA2XHgwMVx4MDRceDAxXHg5Ylx4NTBceDAxXHgwMVx4MDEifSwKLSsJ TlVMTCwKLSsJJnNzaF9nc3NhcGlfZ3NpX3VzZXJvaywKLSsJJnNzaF9nc3NhcGlfZ3NpX2xvY2Fs bmFtZSwKLSsJJnNzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHNfbWljdjIsCi0rCSZzc2hfZ3NzYXBp X2dzaV91cGRhdGVjcmVkc19taWN2MgotK307Ci0rCi0rLyoKLSsgKiBDaGVjayBpZiB0aGlzIHVz ZXIgaXMgT0sgdG8gbG9naW4gdW5kZXIgR1NJLiBVc2VyIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQK LSsgKiBhcyBpZGVudGl0eSBpbiBnbG9iYWwgJ2NsaWVudF9uYW1lLnZhbHVlJyBhbmQgaXMgdHJ5 aW5nIHRvIGxvZyBpbiBhcyBwYXNzZWQKLSsgKiB1c2VybmFtZSBpbiAnbmFtZScuCi0rICoKLSsg KiBSZXR1cm5zIG5vbi16ZXJvIGlmIHVzZXIgaXMgYXV0aG9yaXplZCwgMCBvdGhlcndpc2UuCi0r ICovCi0rc3RhdGljIGludAotK3NzaF9nc3NhcGlfZ3NpX3VzZXJvayhzc2hfZ3NzYXBpX2NsaWVu dCAqY2xpZW50LCBjaGFyICpuYW1lKQotK3sKLSsgICAgaW50IGF1dGhvcml6ZWQgPSAwOwotKyAg ICBnbG9idXNfcmVzdWx0X3QgcmVzOwotKyNpZmRlZiBIQVZFX0dMT0JVU19HU1NfQVNTSVNUX01B UF9BTkRfQVVUSE9SSVpFCi0rICAgIGNoYXIgbG5hbWVbMjU2XSA9ICIiOwotKyNlbmRpZgotKwot KyNpZmRlZiBHTE9CVVNfR1NJX0dTU19BU1NJU1RfTU9EVUxFCi0rICAgIGlmIChnbG9idXNfbW9k dWxlX2FjdGl2YXRlKEdMT0JVU19HU0lfR1NTX0FTU0lTVF9NT0RVTEUpICE9IDApIHsKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0rLyogdXNlIG5ldyBnbG9idXNfZ3Nz X2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpIGludGVyZmFjZSBpZiBhdmFpbGFibGUgKi8KLSsj aWZkZWYgSEFWRV9HTE9CVVNfR1NTX0FTU0lTVF9NQVBfQU5EX0FVVEhPUklaRQotKyAgICBkZWJ1 ZygiY2FsbGluZyBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpIik7Ci0rICAg IGlmIChHTE9CVVNfU1VDQ0VTUyAhPQotKyAgICAgICAgKHJlcyA9IGdsb2J1c19nc3NfYXNzaXN0 X21hcF9hbmRfYXV0aG9yaXplKGNsaWVudC0+Y29udGV4dCwgInNzaCIsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbG5hbWUsIDI1Nikp KSB7Ci0rICAgICAgICBkZWJ1ZygiJXMiLCBnbG9idXNfZXJyb3JfcHJpbnRfY2hhaW4oZ2xvYnVz X2Vycm9yX2dldChyZXMpKSk7Ci0rICAgIH0gZWxzZSBpZiAobG5hbWVbMF0gJiYgc3RyY21wKG5h bWUsIGxuYW1lKSAhPSAwKSB7Ci0rICAgICAgICBkZWJ1ZygiR1NJIHVzZXIgbWFwcyB0byAlcywg bm90ICVzIiwgbG5hbWUsIG5hbWUpOwotKyAgICB9IGVsc2UgewotKyAgICAgICAgYXV0aG9yaXpl ZCA9IDE7Ci0rICAgIH0KLSsjZWxzZQotKyAgICBkZWJ1ZygiY2FsbGluZyBnbG9idXNfZ3NzX2Fz c2lzdF91c2Vyb2soKSIpOwotKyAgICBpZiAoR0xPQlVTX1NVQ0NFU1MgIT0KLSsgICAgICAgIChy ZXMgPSAoZ2xvYnVzX2dzc19hc3Npc3RfdXNlcm9rKGNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKSkpKSB7Ci0r ICAgICAgICBkZWJ1ZygiJXMiLCBnbG9idXNfZXJyb3JfcHJpbnRfY2hhaW4oZ2xvYnVzX2Vycm9y X2dldChyZXMpKSk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICBhdXRob3JpemVkID0gMTsKLSsg ICAgfQotKyNlbmRpZgotKwotKyAgICBsb2dpdCgiR1NJIHVzZXIgJXMgaXMlcyBhdXRob3JpemVk IGFzIHRhcmdldCB1c2VyICVzIiwKLSsgICAgICAgIChjaGFyICopIGNsaWVudC0+ZGlzcGxheW5h bWUudmFsdWUsIChhdXRob3JpemVkID8gIiIgOiAiIG5vdCIpLCBuYW1lKTsKLSsKLSsgICAgcmV0 dXJuIGF1dGhvcml6ZWQ7Ci0rfQotKwotKy8qCi0rICogUmV0dXJuIHRoZSBsb2NhbCB1c2VybmFt ZSBhc3NvY2lhdGVkIHdpdGggdGhlIEdTSSBjcmVkZW50aWFscy4KLSsgKi8KLStpbnQKLStzc2hf Z3NzYXBpX2dzaV9sb2NhbG5hbWUoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqKnVz ZXIpCi0rewotKyAgICBnbG9idXNfcmVzdWx0X3QgcmVzOwotKyNpZmRlZiBIQVZFX0dMT0JVU19H U1NfQVNTSVNUX01BUF9BTkRfQVVUSE9SSVpFCi0rICAgIGNoYXIgbG5hbWVbMjU2XSA9ICIiOwot KyNlbmRpZgotKwotKyNpZmRlZiBHTE9CVVNfR1NJX0dTU19BU1NJU1RfTU9EVUxFCi0rICAgIGlm IChnbG9idXNfbW9kdWxlX2FjdGl2YXRlKEdMT0JVU19HU0lfR1NTX0FTU0lTVF9NT0RVTEUpICE9 IDApIHsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0rLyogdXNlIG5l dyBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpIGludGVyZmFjZSBpZiBhdmFp bGFibGUgKi8KLSsjaWZkZWYgSEFWRV9HTE9CVVNfR1NTX0FTU0lTVF9NQVBfQU5EX0FVVEhPUkla RQotKyAgICBkZWJ1ZygiY2FsbGluZyBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6 ZSgpIik7Ci0rICAgIGlmIChHTE9CVVNfU1VDQ0VTUyAhPQotKyAgICAgICAgKHJlcyA9IGdsb2J1 c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKGNsaWVudC0+Y29udGV4dCwgInNzaCIsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg bG5hbWUsIDI1NikpKSB7Ci0rICAgICAgICBkZWJ1ZygiJXMiLCBnbG9idXNfZXJyb3JfcHJpbnRf Y2hhaW4oZ2xvYnVzX2Vycm9yX2dldChyZXMpKSk7Ci0rICAgICAgICBsb2dpdCgiZmFpbGVkIHRv IG1hcCBHU0kgdXNlciAlcyIsIChjaGFyICopY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSk7Ci0r ICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICAqdXNlciA9IHN0cmR1cChsbmFtZSk7Ci0r I2Vsc2UKLSsgICAgZGVidWcoImNhbGxpbmcgZ2xvYnVzX2dzc19hc3Npc3RfZ3JpZG1hcCgpIik7 Ci0rICAgIGlmIChHTE9CVVNfU1VDQ0VTUyAhPQotKyAgICAgICAgKHJlcyA9IGdsb2J1c19nc3Nf YXNzaXN0X2dyaWRtYXAoY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSwgdXNlcikpKSB7Ci0rICAg ICAgICBkZWJ1ZygiJXMiLCBnbG9idXNfZXJyb3JfcHJpbnRfY2hhaW4oZ2xvYnVzX2Vycm9yX2dl dChyZXMpKSk7Ci0rICAgICAgICBsb2dpdCgiZmFpbGVkIHRvIG1hcCBHU0kgdXNlciAlcyIsIChj aGFyICopY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsg ICAgfQotKyNlbmRpZgotKwotKyAgICBsb2dpdCgiR1NJIHVzZXIgJXMgbWFwcGVkIHRvIHRhcmdl dCB1c2VyICVzIiwKLSsgICAgICAgIChjaGFyICopIGNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUs ICp1c2VyKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qCi0rICogRXhwb3J0IEdTSSBj cmVkZW50aWFscyB0byBkaXNrLgotKyAqLwotK3N0YXRpYyBpbnQKLStzc2hfZ3NzYXBpX2dzaV9z dG9yZWNyZWRzKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpCi0rewotKwlPTV91aW50MzIJbWFq b3Jfc3RhdHVzOwotKwlPTV91aW50MzIJbWlub3Jfc3RhdHVzOwotKwlnc3NfYnVmZmVyX2Rlc2MJ ZXhwb3J0X2NyZWQgPSBHU1NfQ19FTVBUWV9CVUZGRVI7Ci0rCWNoYXIgKgkJcDsKLSsKLSsJaWYg KCFjbGllbnQgfHwgIWNsaWVudC0+Y3JlZHMpIHsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCW1h am9yX3N0YXR1cyA9IGdzc19leHBvcnRfY3JlZCgmbWlub3Jfc3RhdHVzLAotKwkJCQkgICAgICAg Y2xpZW50LT5jcmVkcywKLSsJCQkJICAgICAgIEdTU19DX05PX09JRCwKLSsJCQkJICAgICAgIDEs Ci0rCQkJCSAgICAgICAmZXhwb3J0X2NyZWQpOwotKwlpZiAoR1NTX0VSUk9SKG1ham9yX3N0YXR1 cykgJiYgbWFqb3Jfc3RhdHVzICE9IEdTU19TX1VOQVZBSUxBQkxFKSB7Ci0rCQlHc3NjdHh0ICpj dHg7Ci0rCQlzc2hfZ3NzYXBpX2J1aWxkX2N0eCgmY3R4KTsKLSsJCWN0eC0+bWFqb3IgPSBtYWpv cl9zdGF0dXM7Ci0rCQljdHgtPm1pbm9yID0gbWlub3Jfc3RhdHVzOwotKwkJc3NoX2dzc2FwaV9z ZXRfb2lkKGN0eCwgJmdzc2FwaV9nc2lfbWVjaC5vaWQpOwotKwkJc3NoX2dzc2FwaV9lcnJvcihj dHgpOwotKwkJc3NoX2dzc2FwaV9kZWxldGVfY3R4KCZjdHgpOwotKwkJcmV0dXJuIDA7Ci0rCX0K LSsKLSsJcCA9IHN0cmNocigoY2hhciAqKSBleHBvcnRfY3JlZC52YWx1ZSwgJz0nKTsKLSsJaWYg KHAgPT0gTlVMTCkgewotKwkJbG9naXQoIkZhaWxlZCB0byBwYXJzZSBleHBvcnRlZCBjcmVkZW50 aWFscyBzdHJpbmcgJyUuMTAwcyciLAotKwkJICAgIChjaGFyICopZXhwb3J0X2NyZWQudmFsdWUp OwotKwkJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vcl9zdGF0dXMsICZleHBvcnRfY3JlZCk7Ci0r CQlyZXR1cm4gMDsKLSsJfQotKwkqcCsrID0gJ1wwJzsKLSsJaWYgKHN0cmNtcCgoY2hhciAqKWV4 cG9ydF9jcmVkLnZhbHVlLCJYNTA5X1VTRVJfREVMRUdfUFJPWFkiKSA9PSAwKSB7Ci0rCQljbGll bnQtPnN0b3JlLmVudnZhciA9IHN0cmR1cCgiWDUwOV9VU0VSX1BST1hZIik7Ci0rCX0gZWxzZSB7 Ci0rCQljbGllbnQtPnN0b3JlLmVudnZhciA9IHN0cmR1cCgoY2hhciAqKWV4cG9ydF9jcmVkLnZh bHVlKTsKLSsJfQotKwlpZiAoYWNjZXNzKHAsIFJfT0spID09IDApIHsKLSsJCWlmIChjbGllbnQt PnN0b3JlLmZpbGVuYW1lKSB7Ci0rCQkJaWYgKHJlbmFtZShwLCBjbGllbnQtPnN0b3JlLmZpbGVu YW1lKSA8IDApIHsKLSsJCQkJbG9naXQoIkZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzIiwg cCwKLSsJCQkJICAgIGNsaWVudC0+c3RvcmUuZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0r CQkJCWZyZWUoY2xpZW50LT5zdG9yZS5maWxlbmFtZSk7Ci0rCQkJCWNsaWVudC0+c3RvcmUuZmls ZW5hbWUgPSBzdHJkdXAocCk7Ci0rCQkJfSBlbHNlIHsKLSsJCQkJcCA9IGNsaWVudC0+c3RvcmUu ZmlsZW5hbWU7Ci0rCQkJfQotKwkJfSBlbHNlIHsKLSsJCQljbGllbnQtPnN0b3JlLmZpbGVuYW1l ID0gc3RyZHVwKHApOwotKwkJfQotKwl9Ci0rCWNsaWVudC0+c3RvcmUuZW52dmFsID0gc3RyZHVw KHApOwotKyNpZmRlZiBVU0VfUEFNCi0rCWlmIChvcHRpb25zLnVzZV9wYW0pCi0rCQlkb19wYW1f cHV0ZW52KGNsaWVudC0+c3RvcmUuZW52dmFyLCBjbGllbnQtPnN0b3JlLmVudnZhbCk7Ci0rI2Vu ZGlmCi0rCWdzc19yZWxlYXNlX2J1ZmZlcigmbWlub3Jfc3RhdHVzLCAmZXhwb3J0X2NyZWQpOwot KwotKwlyZXR1cm4gMTsKLSt9Ci0rCi0rLyoKLSsgKiBFeHBvcnQgR1NJIGNyZWRlbnRpYWxzIHRv IGRpc2suCi0rICovCi0rc3RhdGljIGludAotK3NzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHNfbWlj djIoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKLSt7Ci0rCU9NX3VpbnQzMgltYWpvcl9zdGF0 dXM7Ci0rCU9NX3VpbnQzMgltaW5vcl9zdGF0dXM7Ci0rCWdzc19idWZmZXJfZGVzYwlleHBvcnRf Y3JlZCA9IEdTU19DX0VNUFRZX0JVRkZFUjsKLSsJY2hhciAqCQlwOwotKwotKwlpZiAoIWNsaWVu dCB8fCAhY2xpZW50LT5jcmVkcykgewotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSsJbWFqb3Jfc3Rh dHVzID0gZ3NzX2V4cG9ydF9jcmVkKCZtaW5vcl9zdGF0dXMsCi0rCQkJCSAgICAgICBjbGllbnQt PmNyZWRzLAotKwkJCQkgICAgICAgR1NTX0NfTk9fT0lELAotKwkJCQkgICAgICAgMSwKLSsJCQkJ ICAgICAgICZleHBvcnRfY3JlZCk7Ci0rCWlmIChHU1NfRVJST1IobWFqb3Jfc3RhdHVzKSAmJiBt YWpvcl9zdGF0dXMgIT0gR1NTX1NfVU5BVkFJTEFCTEUpIHsKLSsJCUdzc2N0eHQgKmN0eDsKLSsJ CXNzaF9nc3NhcGlfYnVpbGRfY3R4KCZjdHgpOwotKwkJY3R4LT5tYWpvciA9IG1ham9yX3N0YXR1 czsKLSsJCWN0eC0+bWlub3IgPSBtaW5vcl9zdGF0dXM7Ci0rCQlzc2hfZ3NzYXBpX3NldF9vaWQo Y3R4LCAmZ3NzYXBpX2dzaV9tZWNoX21pY3YyLm9pZCk7Ci0rCQlzc2hfZ3NzYXBpX2Vycm9yKGN0 eCk7Ci0rCQlzc2hfZ3NzYXBpX2RlbGV0ZV9jdHgoJmN0eCk7Ci0rCQlyZXR1cm4gMDsKLSsJfQot KwotKwlwID0gc3RyY2hyKChjaGFyICopIGV4cG9ydF9jcmVkLnZhbHVlLCAnPScpOwotKwlpZiAo cCA9PSBOVUxMKSB7Ci0rCQlsb2dpdCgiRmFpbGVkIHRvIHBhcnNlIGV4cG9ydGVkIGNyZWRlbnRp YWxzIHN0cmluZyAnJS4xMDBzJyIsCi0rCQkgICAgKGNoYXIgKilleHBvcnRfY3JlZC52YWx1ZSk7 Ci0rCQlnc3NfcmVsZWFzZV9idWZmZXIoJm1pbm9yX3N0YXR1cywgJmV4cG9ydF9jcmVkKTsKLSsJ CXJldHVybiAwOwotKwl9Ci0rCSpwKysgPSAnXDAnOwotKwlpZiAoc3RyY21wKChjaGFyICopZXhw b3J0X2NyZWQudmFsdWUsIlg1MDlfVVNFUl9ERUxFR19QUk9YWSIpID09IDApIHsKLSsJCWNsaWVu dC0+c3RvcmUuZW52dmFyID0gc3RyZHVwKCJYNTA5X1VTRVJfUFJPWFkiKTsKLSsJfSBlbHNlIHsK LSsJCWNsaWVudC0+c3RvcmUuZW52dmFyID0gc3RyZHVwKChjaGFyICopZXhwb3J0X2NyZWQudmFs dWUpOwotKwl9Ci0rCWlmIChhY2Nlc3MocCwgUl9PSykgPT0gMCkgewotKwkJaWYgKGNsaWVudC0+ c3RvcmUuZmlsZW5hbWUpIHsKLSsJCQlpZiAocmVuYW1lKHAsIGNsaWVudC0+c3RvcmUuZmlsZW5h bWUpIDwgMCkgewotKwkJCQlsb2dpdCgiRmFpbGVkIHRvIHJlbmFtZSAlcyB0byAlczogJXMiLCBw LAotKwkJCQkgICAgY2xpZW50LT5zdG9yZS5maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSsJ CQkJZnJlZShjbGllbnQtPnN0b3JlLmZpbGVuYW1lKTsKLSsJCQkJY2xpZW50LT5zdG9yZS5maWxl bmFtZSA9IHN0cmR1cChwKTsKLSsJCQl9IGVsc2UgewotKwkJCQlwID0gY2xpZW50LT5zdG9yZS5m aWxlbmFtZTsKLSsJCQl9Ci0rCQl9IGVsc2UgewotKwkJCWNsaWVudC0+c3RvcmUuZmlsZW5hbWUg PSBzdHJkdXAocCk7Ci0rCQl9Ci0rCX0KLSsJY2xpZW50LT5zdG9yZS5lbnZ2YWwgPSBzdHJkdXAo cCk7Ci0rI2lmZGVmIFVTRV9QQU0KLSsJaWYgKG9wdGlvbnMudXNlX3BhbSkKLSsJCWRvX3BhbV9w dXRlbnYoY2xpZW50LT5zdG9yZS5lbnZ2YXIsIGNsaWVudC0+c3RvcmUuZW52dmFsKTsKLSsjZW5k aWYKLSsJZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5vcl9zdGF0dXMsICZleHBvcnRfY3JlZCk7Ci0r Ci0rCXJldHVybiAxOwotK30KLSsKLSsvKgotKyAqIEV4cG9ydCB1cGRhdGVkIEdTSSBjcmVkZW50 aWFscyB0byBkaXNrLgotKyAqLwotK3N0YXRpYyBpbnQKLStzc2hfZ3NzYXBpX2dzaV91cGRhdGVj cmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAqc3RvcmUsc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkK LSt7Ci0rCXJldHVybiBzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzKGNsaWVudCk7Ci0rfQotKwot Ky8qCi0rICogRXhwb3J0IHVwZGF0ZWQgR1NJIGNyZWRlbnRpYWxzIHRvIGRpc2suCi0rICovCi0r c3RhdGljIGludAotK3NzaF9nc3NhcGlfZ3NpX3VwZGF0ZWNyZWRzX21pY3YyKHNzaF9nc3NhcGlf Y2NhY2hlICpzdG9yZSxzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQotK3sKLSsJcmV0dXJuIHNz aF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHNfbWljdjIoY2xpZW50KTsKLSt9Ci0rCi0rI2VuZGlmIC8q IEdTSSAqLwotKyNlbmRpZiAvKiBHU1NBUEkgKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5v cmlnL2dzcy1zZXJ2LWtyYjUuYyBvcGVuc3NoLTEwLjJwMS9nc3Mtc2Vydi1rcmI1LmMKLS0tLSBv cGVuc3NoLTEwLjJwMS5vcmlnL2dzcy1zZXJ2LWtyYjUuYwkyMDI2LTAzLTE4IDA5OjM4OjE3Ljcy NDA1MjUwNSArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL2dzcy1zZXJ2LWtyYjUuYwkyMDI2LTAz LTE4IDEwOjE5OjM5LjQxNzA3NjA0NiArMDEwMAotQEAgLTQzMSw2ICs0MzEsMzQgQEAKLSAJcmV0 dXJuIGZvdW5kX3ByaW5jaXBhbDsKLSB9Ci0gIAotKy8qIFJldHJpZXZlIHRoZSBsb2NhbCB1c2Vy bmFtZSBhc3NvY2lhdGVkIHdpdGggYSBzZXQgb2YgS2VyYmVyb3MKLSsgKiBjcmVkZW50aWFscy4g SG9wZWZ1bGx5IHdlIGNhbiB1c2UgdGhpcyBmb3IgdGhlICdlbXB0eScgdXNlcm5hbWUKLSsgKiBs b2dpbnMgZGlzY3Vzc2VkIGluIHRoZSBkcmFmdCAgKi8KLStzdGF0aWMgaW50Ci0rc3NoX2dzc2Fw aV9rcmI1X2xvY2FsbmFtZShzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICoqdXNlcikg ewotKwlrcmI1X3ByaW5jaXBhbCBwcmluYzsKLSsJaW50IHJldHZhbDsKLSsKLSsJaWYgKHNzaF9n c3NhcGlfa3JiNV9pbml0KCkgPT0gMCkKLSsJCXJldHVybiAwOwotKwotKwlpZiAoKHJldHZhbD1r cmI1X3BhcnNlX25hbWUoa3JiX2NvbnRleHQsIGNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUsCi0r CSAgICAmcHJpbmMpKSkgewotKwkJbG9naXQoImtyYjVfcGFyc2VfbmFtZSgpOiAlLjEwMHMiLAot KwkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0KGtyYl9jb250ZXh0LHJldHZhbCkpOwotKwkJcmV0dXJu IDA7Ci0rCX0KLSsKLSsJLyogV2UndmUgZ290IHRvIHJldHVybiBhIG1hbGxvYydkIHN0cmluZyAq LwotKwkqdXNlciA9IChjaGFyICopeG1hbGxvYygyNTYpOwotKwlpZiAoa3JiNV9hbmFtZV90b19s b2NhbG5hbWUoa3JiX2NvbnRleHQsIHByaW5jLCAyNTYsICp1c2VyKSkgewotKwkJZnJlZSgqdXNl cik7Ci0rCQkqdXNlciA9IE5VTEw7Ci0rCQlyZXR1cm4oMCk7Ci0rCX0KLSsKLSsJcmV0dXJuKDEp OwotK30KLSAKLSAvKiBUaGlzIHdyaXRlcyBvdXQgYW55IGZvcndhcmRlZCBjcmVkZW50aWFscyBm cm9tIHRoZSBzdHJ1Y3R1cmUgcG9wdWxhdGVkCi0gICogZHVyaW5nIHVzZXJhdXRoLiBDYWxsZWQg YWZ0ZXIgd2UgaGF2ZSBzZXR1aWQgdG8gdGhlIHVzZXIgKi8KLUBAIC01MjUsNyArNTUzLDcgQEAK LSAJcmV0dXJuIHNldF9lbnY7Ci0gfQotIAotLWludAotK3N0YXRpYyBpbnQKLSBzc2hfZ3NzYXBp X2tyYjVfdXBkYXRlY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlLAotICAgICBzc2hfZ3Nz YXBpX2NsaWVudCAqY2xpZW50KQotIHsKLUBAIC01OTYsNyArNjI0LDcgQEAKLSAJezksICJceDJB XHg4Nlx4NDhceDg2XHhGN1x4MTJceDAxXHgwMlx4MDIifSwKLSAJTlVMTCwKLSAJJnNzaF9nc3Nh cGlfa3JiNV91c2Vyb2ssCi0tCU5VTEwsCi0rCSZzc2hfZ3NzYXBpX2tyYjVfbG9jYWxuYW1lLAot IAkmc3NoX2dzc2FwaV9rcmI1X3N0b3JlY3JlZHMsCi0gCSZzc2hfZ3NzYXBpX2tyYjVfdXBkYXRl Y3JlZHMKLSB9OwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcva2V4Z3Nzcy5jIG9wZW5z c2gtMTAuMnAxL2tleGdzc3MuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcva2V4Z3Nzcy5jCTIw MjYtMDMtMTggMDk6Mzg6MTcuMjc1NDM5MDI4ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEva2V4 Z3Nzcy5jCTIwMjYtMDMtMTggMTA6MTk6MzkuNDE3NDc4OTgwICswMTAwCi1AQCAtNDgsNiArNDgs NyBAQAotICNpbmNsdWRlICJkaWdlc3QuaCIKLSAjaW5jbHVkZSAic3NoZXJyLmgiCi0gCi0rc3Rh dGljIHZvaWQga2V4X2dzc19zZW5kX2Vycm9yKEdzc2N0eHQgKmN0eHQsIHN0cnVjdCBzc2ggKnNz aCk7Ci0gZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0aW9uczsKLSAKLSBzdGF0aWMgaW50IGlucHV0 X2tleGdzc19pbml0KGludCwgdV9pbnQzMl90LCBzdHJ1Y3Qgc3NoICopOwotQEAgLTgxLDggKzgy LDEwIEBACi0gCi0gCWRlYnVnMl9mKCJBY3F1aXJpbmcgY3JlZGVudGlhbHMiKTsKLSAKLS0JaWYg KEdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX3NlcnZlcl9jdHgoJmtleC0+Z3NzLCBvaWQpKSkKLSsJ aWYgKEdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX3NlcnZlcl9jdHgoJmtleC0+Z3NzLCBvaWQpKSkg ewotKwkJa2V4X2dzc19zZW5kX2Vycm9yKGtleC0+Z3NzLCBzc2gpOwotIAkJZmF0YWwoIlVuYWJs ZSB0byBhY3F1aXJlIGNyZWRlbnRpYWxzIGZvciB0aGUgc2VydmVyIik7Ci0rCX0KLSAKLSAJc3No X2dzc2FwaV9idWlsZF9jdHgoJmtleC0+Z3NzKTsKLSAJaWYgKGtleC0+Z3NzID09IE5VTEwpCi1A QCAtMTM5LDEzICsxNDIsMTQgQEAKLSAJc3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tF WEdTU19DT05USU5VRSwgTlVMTCk7Ci0gCi0gCWlmIChHU1NfRVJST1IoZ3NzLT5tYWpvcikpIHsK LSsJCWtleF9nc3Nfc2VuZF9lcnJvcihrZXgtPmdzcywgc3NoKTsKLSAJCWlmIChzZW5kX3Rvay0+ bGVuZ3RoID4gMCkgewotIAkJCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tF WEdTU19DT05USU5VRSkpICE9IDAgfHwKLSAJCQkgICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhz c2gsIHNlbmRfdG9rLT52YWx1ZSwgc2VuZF90b2stPmxlbmd0aCkpICE9IDAgfHwKLSAJCQkgICAg KHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKQotIAkJCQlmYXRhbCgic3NocGt0IGZhaWxlZDog JXMiLCBzc2hfZXJyKHIpKTsKLSAJCX0KLS0JCWZhdGFsKCJhY2NlcHRfY3R4IGRpZWQiKTsKLSsJ CXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsICJHU1NBUEkgS2V5IEV4Y2hhbmdlIGhhbmRzaGFr ZSBmYWlsZWQiKTsKLSAJfQotIAotIAlpZiAoISgqcmV0X2ZsYWdzICYgR1NTX0NfTVVUVUFMX0ZM QUcpKQotQEAgLTU5OCw0ICs2MDIsMjYgQEAKLSAJcmV0dXJuIGtleGdzc2dleF9maW5hbChzc2gs ICZzZW5kX3RvaywgJnJldF9mbGFncyk7Ci0gfQotIAotK3N0YXRpYyB2b2lkCi0ra2V4X2dzc19z ZW5kX2Vycm9yKEdzc2N0eHQgKmN0eHQsIHN0cnVjdCBzc2ggKnNzaCkgewotKwljaGFyICplcnJz dHI7Ci0rCU9NX3VpbnQzMiBtYWosIG1pbjsKLSsJaW50IHI7Ci0rCi0rCWVycnN0ciA9IG1tX3Nz aF9nc3NhcGlfbGFzdF9lcnJvcihjdHh0LCAmbWFqLCAmbWluKTsKLSsJaWYgKGVycnN0cikgewot KwkJaWYgKChyID0gc3NocGt0X3N0YXJ0KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0VSUk9SKSkgIT0g MCB8fAotKwkJICAgIChyID0gc3NocGt0X3B1dF91MzIoc3NoLCBtYWopKSAhPSAwIHx8Ci0rCQkg ICAgKHIgPSBzc2hwa3RfcHV0X3UzMihzc2gsIG1pbikpICE9IDAgfHwKLSsJCSAgICAociA9IHNz aHBrdF9wdXRfY3N0cmluZyhzc2gsIGVycnN0cikpICE9IDAgfHwKLSsJCSAgICAociA9IHNzaHBr dF9wdXRfY3N0cmluZyhzc2gsICIiKSkgIT0gMCB8fAotKwkJICAgIChyID0gc3NocGt0X3NlbmQo c3NoKSkgIT0gMCkKLSsJCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsK LSsJCWlmICgociA9IHNzaF9wYWNrZXRfd3JpdGVfd2FpdChzc2gpKSAhPSAwKQotKwkJCWZhdGFs KCJzc2hfcGFja2V0X3dyaXRlX3dhaXQ6ICVzIiwgc3NoX2VycihyKSk7Ci0rCQkvKiBYWFggLSBX ZSBzaG91bGQgcHJvYmFibHkgbG9nIHRoZSBlcnJvciBsb2NhbGx5IGhlcmUgKi8KLSsJCWZyZWUo ZXJyc3RyKTsKLSsJfQotK30KLSsKLSAjZW5kaWYgLyogZGVmaW5lZChHU1NBUEkpICYmIGRlZmlu ZWQoV0lUSF9PUEVOU1NMKSAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvTWFrZWZp bGUuaW4gb3BlbnNzaC0xMC4ycDEvTWFrZWZpbGUuaW4KLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmln L01ha2VmaWxlLmluCTIwMjYtMDMtMTggMDk6Mzg6MTcuODE1MDQ5NjUxICswMTAwCi0rKysgb3Bl bnNzaC0xMC4ycDEvTWFrZWZpbGUuaW4JMjAyNi0wMy0xOCAxMDoxOTozOS40MTc4ODAyNzcgKzAx MDAKLUBAIC0xMzMsNyArMTMzLDcgQEAKLSAJYXV0aC1ic2RhdXRoLm8gYXV0aDItaG9zdGJhc2Vk Lm8gYXV0aDIta2JkaW50Lm8gXAotIAlhdXRoMi1ub25lLm8gYXV0aDItcGFzc3dkLm8gYXV0aDIt cHVia2V5Lm8gYXV0aDItcHVia2V5ZmlsZS5vIFwKLSAJbW9uaXRvci5vIG1vbml0b3Jfd3JhcC5v IGF1dGgta3JiNS5vIGtleGdzc3MubyBcCi0tCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNl cnYta3JiNS5vIFwKLSsJYXV0aDItZ3NzLm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8gZ3Nz LXNlcnYtZ3NpLm8gXAotIAlsb2dpbnJlYy5vIGF1dGgtcGFtLm8gYXV0aC1zaGFkb3cubyBhdXRo LXNpYS5vIFwKLSAJc2Z0cC1zZXJ2ZXIubyBzZnRwLWNvbW1vbi5vIFwKLSAJdWlkc3dhcC5vIHBs YXRmb3JtLWxpc3Rlbi5vICQoUDExT0JKUykgJChTS09CSlMpCi1AQCAtMTQ0LDcgKzE0NCw3IEBA Ci0gCXNlcnZlcmxvb3AubyBhdXRoLm8gYXV0aDIubyBhdXRoLW9wdGlvbnMubyBzZXNzaW9uLm8g YXV0aDItY2hhbGwubyBcCi0gCWdyb3VwYWNjZXNzLm8gYXV0aC1ic2RhdXRoLm8gYXV0aDItaG9z dGJhc2VkLm8gYXV0aDIta2JkaW50Lm8gXAotIAlhdXRoMi1ub25lLm8gYXV0aDItcGFzc3dkLm8g YXV0aDItcHVia2V5Lm8gYXV0aDItcHVia2V5ZmlsZS5vIFwKLS0JYXV0aDItZ3NzLm8gZ3NzLXNl cnYubyBnc3Mtc2Vydi1rcmI1Lm8ga2V4Z3Nzcy5vIFwKLSsJYXV0aDItZ3NzLm8gZ3NzLXNlcnYu byBnc3Mtc2Vydi1rcmI1Lm8gZ3NzLXNlcnYtZ3NpLm8ga2V4Z3Nzcy5vIFwKLSAJbW9uaXRvcl93 cmFwLm8gYXV0aC1rcmI1Lm8gXAotIAlhdWRpdC5vIGF1ZGl0LWJzbS5vIGF1ZGl0LWxpbnV4Lm8g cGxhdGZvcm0ubyBcCi0gCWxvZ2lucmVjLm8gYXV0aC1wYW0ubyBhdXRoLXNoYWRvdy5vIGF1dGgt c2lhLm8gXAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvbWlzYy5jIG9wZW5zc2gtMTAu MnAxL21pc2MuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvbWlzYy5jCTIwMjYtMDMtMTggMDk6 Mzg6MTcuODA4NjgzODUxICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvbWlzYy5jCTIwMjYtMDMt MTggMTk6MzY6MDcuMzIxODMwMDg2ICswMTAwCi1AQCAtNDM3LDExICs0MzcsMTQgQEAKLSAjZGVm aW5lIFdISVRFU1BBQ0UgIiBcdFxyXG4iCi0gI2RlZmluZSBRVU9URQkiXCIiCi0gCi0rLyogQ2hh cmFjdGVycyBjb25zaWRlcmVkIGFzIHF1b3RhdGlvbnMuICovCi0rI2RlZmluZSBRVU9URVMgIidc IiIKLSsKLSAvKiByZXR1cm4gbmV4dCB0b2tlbiBpbiBjb25maWd1cmF0aW9uIGxpbmUgKi8KLSBz dGF0aWMgY2hhciAqCi0gc3RyZGVsaW1faW50ZXJuYWwoY2hhciAqKnMsIGludCBzcGxpdF9lcXVh bHMpCi0gewotLQljaGFyICpvbGQ7Ci0rCWNoYXIgKm9sZCwgKnAsICpxOwotIAlpbnQgd3NwYWNl ID0gMDsKLSAKLSAJaWYgKCpzID09IE5VTEwpCi1AQCAtNDQ5LDYgKzQ1MiwyMSBAQAotIAotIAlv bGQgPSAqczsKLSAKLSsJaWYgKChxPXN0cmNocihRVU9URVMsIChpbnQpICpvbGQpKSAmJiAqcSkK LSsJewotKwkJLyogZmluZCBuZXh0IHF1b3RlIGNoYXJhY3RlciwgcG9pbnQgb2xkIHRvIHN0YXJ0 IG9mIHF1b3RlZAotKwkJICogc3RyaW5nICovCi0rCQlmb3IgKHAgPSArK29sZDsgKnAgJiYgKnAg IT0gKnE7IHArKykKLSsJCQk7Ci0rCi0rCQkvKiBmaW5kIHN0YXJ0IG9mIG5leHQgdG9rZW4gKi8K LSsJCSpzID0gKCpwKSA/IHAgKyBzdHJzcG4ocCArIDEsIFdISVRFU1BBQ0UpICsgMSA6IE5VTEw7 Ci0rCi0rCQkvKiB0ZXJtaW5hdGUgJ29sZCcgdG9rZW4gKi8KLSsJCSpwID0gJ1wwJzsKLSsJCXJl dHVybiAob2xkKTsKLSsJfQotKwotIAkqcyA9IHN0cnBicmsoKnMsCi0gCSAgICBzcGxpdF9lcXVh bHMgPyBXSElURVNQQUNFIFFVT1RFICI9IiA6IFdISVRFU1BBQ0UgUVVPVEUpOwotIAlpZiAoKnMg PT0gTlVMTCkKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL21vbml0b3IuYyBvcGVuc3No LTEwLjJwMS9tb25pdG9yLmMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL21vbml0b3IuYwkyMDI2 LTAzLTE4IDA5OjM4OjE3LjgwODkyNzEzNCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL21vbml0 b3IuYwkyMDI2LTAzLTE4IDEwOjE5OjM5LjQxOTY1NDAxMCArMDEwMAotQEAgLTE0MSw2ICsxNDEs OSBAQAotIGludCBtbV9hbnN3ZXJfZ3NzX3VzZXJvayhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0 IHNzaGJ1ZiAqKTsKLSBpbnQgbW1fYW5zd2VyX2dzc19jaGVja21pYyhzdHJ1Y3Qgc3NoICosIGlu dCwgc3RydWN0IHNzaGJ1ZiAqKTsKLSBpbnQgbW1fYW5zd2VyX2dzc19zaWduKHN0cnVjdCBzc2gg KiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotK2ludCBtbV9hbnN3ZXJfZ3NzX2Vycm9yKHN0cnVj dCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotK2ludCBtbV9hbnN3ZXJfZ3NzX2luZGlj YXRlX21lY2hzKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICopOwotK2ludCBtbV9h bnN3ZXJfZ3NzX2xvY2FsbmFtZShzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsK LSBpbnQgbW1fYW5zd2VyX2dzc191cGRhdGVjcmVkcyhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0 IHNzaGJ1ZiAqKTsKLSAjZW5kaWYKLSAKLUBAIC0xOTUsNyArMTk4LDcgQEAKLSAgICAge01PTklU T1JfUkVRX01PRFVMSSwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9tb2R1bGl9LAotICNlbmRpZgotICAg ICB7TU9OSVRPUl9SRVFfU0lHTiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zaWdufSwKLS0gICAge01P TklUT1JfUkVRX1BXTkFNLCBNT05fT05DRSwgbW1fYW5zd2VyX3B3bmFtYWxsb3d9LAotKyAgICB7 TU9OSVRPUl9SRVFfUFdOQU0sIE1PTl9BVVRILCBtbV9hbnN3ZXJfcHduYW1hbGxvd30sCi0gICAg IHtNT05JVE9SX1JFUV9BVVRIU0VSViwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9hdXRoc2Vydn0sCi0g I2lmZGVmIFdJVEhfU0VMSU5VWAotICAgICB7TU9OSVRPUl9SRVFfQVVUSFJPTEUsIE1PTl9PTkNF LCBtbV9hbnN3ZXJfYXV0aHJvbGV9LAotQEAgLTIwMyw3ICsyMDYsNyBAQAotICAgICB7TU9OSVRP Ul9SRVFfQVVUSDJfUkVBRF9CQU5ORVIsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfYXV0aDJfcmVhZF9i YW5uZXJ9LAotICAgICB7TU9OSVRPUl9SRVFfQVVUSFBBU1NXT1JELCBNT05fQVVUSCwgbW1fYW5z d2VyX2F1dGhwYXNzd29yZH0sCi0gI2lmZGVmIFVTRV9QQU0KLS0gICAge01PTklUT1JfUkVRX1BB TV9TVEFSVCwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9wYW1fc3RhcnR9LAotKyAgICB7TU9OSVRPUl9S RVFfUEFNX1NUQVJULCBNT05fSVNBVVRILCBtbV9hbnN3ZXJfcGFtX3N0YXJ0fSwKLSAgICAge01P TklUT1JfUkVRX1BBTV9BQ0NPVU5ULCAwLCBtbV9hbnN3ZXJfcGFtX2FjY291bnR9LAotICAgICB7 TU9OSVRPUl9SRVFfUEFNX0lOSVRfQ1RYLCBNT05fT05DRSwgbW1fYW5zd2VyX3BhbV9pbml0X2N0 eH0sCi0gICAgIHtNT05JVE9SX1JFUV9QQU1fUVVFUlksIDAsIG1tX2Fuc3dlcl9wYW1fcXVlcnl9 LAotQEAgLTIyNyw4ICsyMzAsMTEgQEAKLSAgICAge01PTklUT1JfUkVRX0dTU1NFVFVQLCBNT05f SVNBVVRILCBtbV9hbnN3ZXJfZ3NzX3NldHVwX2N0eH0sCi0gICAgIHtNT05JVE9SX1JFUV9HU1NT VEVQLCAwLCBtbV9hbnN3ZXJfZ3NzX2FjY2VwdF9jdHh9LAotICAgICB7TU9OSVRPUl9SRVFfR1NT VVNFUk9LLCBNT05fT05DRXxNT05fQVVUSERFQ0lERSwgbW1fYW5zd2VyX2dzc191c2Vyb2t9LAot LSAgICB7TU9OSVRPUl9SRVFfR1NTQ0hFQ0tNSUMsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfZ3NzX2No ZWNrbWljfSwKLSsgICAge01PTklUT1JfUkVRX0dTU0NIRUNLTUlDLCBNT05fSVNBVVRILCBtbV9h bnN3ZXJfZ3NzX2NoZWNrbWljfSwKLSAgICAge01PTklUT1JfUkVRX0dTU1NJR04sIE1PTl9PTkNF LCBtbV9hbnN3ZXJfZ3NzX3NpZ259LAotKyAgICB7TU9OSVRPUl9SRVFfR1NTRVJSLCBNT05fSVNB VVRIIHwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9nc3NfZXJyb3J9LAotKyAgICB7TU9OSVRPUl9SRVFf R1NTTUVDSFMsIE1PTl9JU0FVVEgsIG1tX2Fuc3dlcl9nc3NfaW5kaWNhdGVfbWVjaHN9LAotKyAg ICB7TU9OSVRPUl9SRVFfR1NTTE9DQUxOQU1FLCBNT05fSVNBVVRILCBtbV9hbnN3ZXJfZ3NzX2xv Y2FsbmFtZX0sCi0gI2VuZGlmCi0gICAgIHswLCAwLCBOVUxMfQotIH07Ci1AQCAtMjM4LDYgKzI0 NCw4IEBACi0gICAgIHtNT05JVE9SX1JFUV9HU1NTRVRVUCwgMCwgbW1fYW5zd2VyX2dzc19zZXR1 cF9jdHh9LAotICAgICB7TU9OSVRPUl9SRVFfR1NTU1RFUCwgMCwgbW1fYW5zd2VyX2dzc19hY2Nl cHRfY3R4fSwKLSAgICAge01PTklUT1JfUkVRX0dTU1NJR04sIDAsIG1tX2Fuc3dlcl9nc3Nfc2ln bn0sCi0rICAgIHtNT05JVE9SX1JFUV9HU1NFUlIsIDAsIG1tX2Fuc3dlcl9nc3NfZXJyb3J9LAot KyAgICB7TU9OSVRPUl9SRVFfR1NTTUVDSFMsIDAsIG1tX2Fuc3dlcl9nc3NfaW5kaWNhdGVfbWVj aHN9LAotICAgICB7TU9OSVRPUl9SRVFfR1NTVVBDUkVEUywgMCwgbW1fYW5zd2VyX2dzc191cGRh dGVjcmVkc30sCi0gI2VuZGlmCi0gICAgIHtNT05JVE9SX1JFUV9TVEFURSwgTU9OX09OQ0UsIG1t X2Fuc3dlcl9zdGF0ZX0sCi1AQCAtMzE4LDYgKzMyNiw4IEBACi0gI2lmZGVmIEdTU0FQSQotIAkv KiBhbmQgZm9yIHRoZSBHU1NBUEkga2V5IGV4Y2hhbmdlICovCi0gCW1vbml0b3JfcGVybWl0KG1v bl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTU0VUVVAsIDEpOwotKwltb25pdG9yX3Blcm1pdCht b25fZGlzcGF0Y2gsIE1PTklUT1JfUkVRX0dTU0VSUiwgMSk7Ci0rCW1vbml0b3JfcGVybWl0KG1v bl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTTUVDSFMsIDEpOwotICNlbmRpZgotIAotIAkvKiBU aGUgZmlyc3QgZmV3IHJlcXVlc3RzIGRvIG5vdCByZXF1aXJlIGFzeW5jaHJvbm91cyBhY2Nlc3Mg Ki8KLUBAIC00NjksNiArNDc5LDggQEAKLSAjaWZkZWYgR1NTQVBJCi0gCS8qIGFuZCBmb3IgdGhl IEdTU0FQSSBrZXkgZXhjaGFuZ2UgKi8KLSAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBN T05JVE9SX1JFUV9HU1NTRVRVUCwgMSk7Ci0rCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwg TU9OSVRPUl9SRVFfR1NTRVJSLCAxKTsKLSsJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBN T05JVE9SX1JFUV9HU1NNRUNIUywgMSk7Ci0gI2VuZGlmCi0gCi0gCWlmIChhdXRoX29wdHMtPnBl cm1pdF9wdHlfZmxhZykgewotQEAgLTkwMiwxNCArOTE0LDE3IEBACi0gCi0gCWRlYnVnM19mKCJl bnRlcmluZyIpOwotIAotLQlpZiAoYXV0aGN0eHQtPmF0dGVtcHQrKyAhPSAwKQotLQkJZmF0YWxf ZigibXVsdGlwbGUgYXR0ZW1wdHMgZm9yIGdldHB3bmFtIik7Ci0tCi0rCWlmIChhdXRoY3R4dC0+ dXNlcikgZnJlZShhdXRoY3R4dC0+dXNlcik7Ci0gCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmlu ZyhtLCAmYXV0aGN0eHQtPnVzZXIsIE5VTEwpKSAhPSAwKQotIAkJZmF0YWxfZnIociwgInBhcnNl Iik7Ci0gCi0gCXB3ZW50ID0gZ2V0cHduYW1hbGxvdyhzc2gsIGF1dGhjdHh0LT51c2VyKTsKLSAK LSsjaWZkZWYgVVNFX1BBTQotKwlpZiAob3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlKQot KwkJc2V0cHJvY3RpdGxlKCIlcyBbcHJpdl0iLCBwd2VudCA/ICJbcGFtXSIgOiAidW5rbm93biIp OwotKwllbHNlCi0rI2VuZGlmCi0gCXNldHByb2N0aXRsZSgiJXMgW3ByaXZdIiwgcHdlbnQgPyBh dXRoY3R4dC0+dXNlciA6ICJ1bmtub3duIik7Ci0gCi0gCXNzaGJ1Zl9yZXNldChtKTsKLUBAIC0y MjU2LDYgKzIyNzEsNzkgQEAKLSB9Ci0gCi0gaW50Ci0rbW1fYW5zd2VyX2dzc19lcnJvcihzdHJ1 Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0cnVjdCBzc2hidWYgKm0pCi0rewotKwlPTV91aW50 MzIgbWFqb3IsIG1pbm9yOwotKwljaGFyICptc2c7Ci0rCWludCByOwotKwotKwltc2c9c3NoX2dz c2FwaV9sYXN0X2Vycm9yKGdzc2NvbnRleHQsICZtYWpvciwgJm1pbm9yKTsKLSsJc3NoYnVmX3Jl c2V0KG0pOwotKwlpZiAoKHIgPSBzc2hidWZfcHV0X3UzMihtLCBtYWpvcikpICE9IDAgfHwKLSsJ ICAgIChyID0gc3NoYnVmX3B1dF91MzIobSwgbWlub3IpKSAhPSAwIHx8Ci0rCSAgICAociA9IHNz aGJ1Zl9wdXRfY3N0cmluZyhtLCBtc2cpKSAhPSAwKQotKwkJZmF0YWxfZnIociwgImJ1ZmZlciBl cnJvciIpOwotKwotKwltbV9yZXF1ZXN0X3NlbmQoc29ja2V0LCBNT05JVE9SX0FOU19HU1NFUlIs IG0pOwotKwotKwlmcmVlKG1zZyk7Ci0rCi0rCXJldHVybigwKTsKLSt9Ci0rCi0raW50Ci0rbW1f YW5zd2VyX2dzc19pbmRpY2F0ZV9tZWNocyhzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0 cnVjdCBzc2hidWYgKm0pCi0rewotKwlPTV91aW50MzIgbWFqb3IsIG1pbm9yOwotKwlnc3NfT0lE X3NldCBtZWNoX3NldDsKLSsJc2l6ZV90IGk7Ci0rCWludCByOwotKwotKwltYWpvcj1nc3NfaW5k aWNhdGVfbWVjaHMoJm1pbm9yLCAmbWVjaF9zZXQpOwotKwotKwlzc2hidWZfcmVzZXQobSk7Ci0r CWlmICgociA9IHNzaGJ1Zl9wdXRfdTMyKG0sIG1ham9yKSkgIT0gMCB8fAotKwkgICAgKHIgPSBz c2hidWZfcHV0X3UzMihtLCBtZWNoX3NldC0+Y291bnQpKSAhPSAwKQotKwkJZmF0YWxfZnIociwg ImJ1ZmZlciBlcnJvciIpOwotKwlmb3IgKGkgPSAwOyBpIDwgbWVjaF9zZXQtPmNvdW50OyBpKysp IHsKLSsJCWlmICgociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKG0sIG1lY2hfc2V0LT5lbGVtZW50c1tp XS5lbGVtZW50cywKLSsJCSAgICBtZWNoX3NldC0+ZWxlbWVudHNbaV0ubGVuZ3RoKSkgIT0gMCkK LSsJCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0rCX0KLSsKLSsJZ3NzX3JlbGVhc2Vf b2lkX3NldCgmbWlub3IsICZtZWNoX3NldCk7Ci0rCi0rCW1tX3JlcXVlc3Rfc2VuZChzb2NrZXQs IE1PTklUT1JfQU5TX0dTU01FQ0hTLCBtKTsKLSsKLSsJcmV0dXJuKDApOwotK30KLSsKLStpbnQK LSttbV9hbnN3ZXJfZ3NzX2xvY2FsbmFtZShzdHJ1Y3Qgc3NoICpzc2gsIGludCBzb2NrZXQsIHN0 cnVjdCBzc2hidWYgKm0pCi0rewotKwljaGFyICpuYW1lOwotKwlpbnQgcjsKLSsKLSsJc3NoX2dz c2FwaV9sb2NhbG5hbWUoJm5hbWUpOwotKwotKwlzc2hidWZfcmVzZXQobSk7Ci0rCWlmIChuYW1l KSB7Ci0rCQlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgbmFtZSkpICE9IDApCi0rCQkJ ZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOwotKwkJZGVidWczX2YoInNlbmRpbmcgcmVzdWx0 ICVzIiwgbmFtZSk7Ci0rCQlmcmVlKG5hbWUpOwotKwl9IGVsc2UgewotKwkJaWYgKChyID0gc3No YnVmX3B1dF9jc3RyaW5nKG0sICIiKSkgIT0gMCkKLSsJCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVy cm9yIik7Ci0rCQlkZWJ1ZzNfZigic2VuZGluZyByZXN1bHQgXCJcIiIpOwotKwl9Ci0rCi0rCW1t X3JlcXVlc3Rfc2VuZChzb2NrZXQsIE1PTklUT1JfQU5TX0dTU0xPQ0FMTkFNRSwgbSk7Ci0rCi0r CXJldHVybigwKTsKLSt9Ci0rCi0raW50Ci0gbW1fYW5zd2VyX2dzc19zaWduKHN0cnVjdCBzc2gg KnNzaCwgaW50IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAqbSkKLSB7Ci0gCWdzc19idWZmZXJfZGVz YyBkYXRhOwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvbW9uaXRvci5oIG9wZW5zc2gt MTAuMnAxL21vbml0b3IuaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvbW9uaXRvci5oCTIwMjYt MDMtMTggMDk6Mzg6MTcuNTY3NzgyMDM0ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvbW9uaXRv ci5oCTIwMjYtMDMtMTggMTA6MTk6MzkuNDIwMDQ4OTYxICswMTAwCi1AQCAtNzYsNiArNzYsMTAg QEAKLSAKLSAJTU9OSVRPUl9SRVFfR1NTU0lHTiA9IDE1MCwgTU9OSVRPUl9BTlNfR1NTU0lHTiA9 IDE1MSwKLSAJTU9OSVRPUl9SRVFfR1NTVVBDUkVEUyA9IDE1MiwgTU9OSVRPUl9BTlNfR1NTVVBD UkVEUyA9IDE1MywKLSsKLSsJTU9OSVRPUl9SRVFfR1NTTUVDSFMgPSAyMDAsIE1PTklUT1JfQU5T X0dTU01FQ0hTID0gMjAxLAotKwlNT05JVE9SX1JFUV9HU1NMT0NBTE5BTUUgPSAyMDIsIE1PTklU T1JfQU5TX0dTU0xPQ0FMTkFNRSA9IDIwMywKLSsJTU9OSVRPUl9SRVFfR1NTRVJSID0gMjA0LCBN T05JVE9SX0FOU19HU1NFUlIgPSAyMDUKLSB9OwotIAotIHN0cnVjdCBzc2g7Ci1kaWZmIC1OdXIg b3BlbnNzaC0xMC4ycDEub3JpZy9tb25pdG9yX3dyYXAuYyBvcGVuc3NoLTEwLjJwMS9tb25pdG9y X3dyYXAuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvbW9uaXRvcl93cmFwLmMJMjAyNi0wMy0x OCAwOTozODoxNy41ODE0ODAyMTkgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9tb25pdG9yX3dy YXAuYwkyMDI2LTAzLTE4IDEwOjE5OjM5LjQyMDQyODEwOCArMDEwMAotQEAgLTEyMDYsNiArMTIw Niw5NCBAQAotIAlyZXR1cm4gKGF1dGhlbnRpY2F0ZWQpOwotIH0KLSAKLStjaGFyICoKLSttbV9z c2hfZ3NzYXBpX2xhc3RfZXJyb3IoR3NzY3R4dCAqY3R4LCBPTV91aW50MzIgKm1ham9yLCBPTV91 aW50MzIgKm1pbm9yKQotK3sKLSsJc3RydWN0IHNzaGJ1ZiAqbSA9IE5VTEw7Ci0rCU9NX3VpbnQz MiBtYWosbWluOwotKwljaGFyICplcnJzdHI7Ci0rCWludCByOwotKwotKwlpZiAoKG0gPSBzc2hi dWZfbmV3KCkpID09IE5VTEwpCi0rCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOwotKwot KwltbV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9HU1NFUlIs IG0pOwotKwltbV9yZXF1ZXN0X3JlY2VpdmVfZXhwZWN0KHBtb25pdG9yLT5tX3JlY3ZmZCwgTU9O SVRPUl9BTlNfR1NTRVJSLCBtKTsKLSsKLSsJaWYgKChyID0gc3NoYnVmX2dldF91MzIobSwgJm1h aikpICE9IDAgfHwKLSsJICAgIChyID0gc3NoYnVmX2dldF91MzIobSwgJm1pbikpICE9IDApCi0r CQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0rCi0rCWlmIChtYWpvcikgKm1ham9yPW1h ajsKLSsJaWYgKG1pbm9yKSAqbWlub3I9bWluOwotKwotKwlpZiAoKHIgPSBzc2hidWZfZ2V0X2Nz dHJpbmcobSwgJmVycnN0ciwgTlVMTCkpICE9IDApCi0rCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVy cm9yIik7Ci0rCi0rCXNzaGJ1Zl9mcmVlKG0pOwotKwotKwlyZXR1cm4oZXJyc3RyKTsKLSt9Ci0r Ci0rT01fdWludDMyCi0rbW1fZ3NzX2luZGljYXRlX21lY2hzKE9NX3VpbnQzMiAqbWlub3Jfc3Rh dHVzLCBnc3NfT0lEX3NldCAqbWVjaF9zZXQpCi0rewotKwlzdHJ1Y3Qgc3NoYnVmICptID0gTlVM TDsKLSsJT01fdWludDMyIG1ham9yLG1pbm9yOwotKwlpbnQgY291bnQ7Ci0rCWdzc19PSURfZGVz YyBvaWQ7Ci0rCXNpemVfdCBsZW5ndGg7Ci0rCWludCByOwotKwotKwlpZiAoKG0gPSBzc2hidWZf bmV3KCkpID09IE5VTEwpCi0rCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOwotKwotKwlt bV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9HU1NNRUNIUywg bSk7Ci0rCW1tX3JlcXVlc3RfcmVjZWl2ZV9leHBlY3QocG1vbml0b3ItPm1fcmVjdmZkLCBNT05J VE9SX0FOU19HU1NNRUNIUywgbSk7Ci0rCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKG0sICZtYWpv cikpICE9IDAgfHwKLSsJICAgIChyID0gc3NoYnVmX2dldF91MzIobSwgJmNvdW50KSkgIT0gMCkK LSsJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKLSsKLSsJZ3NzX2NyZWF0ZV9lbXB0eV9v aWRfc2V0KCZtaW5vciwgbWVjaF9zZXQpOwotKwl3aGlsZShjb3VudC0tPjApIHsKLSsJICAgIGlm ICgociA9IHNzaGJ1Zl9nZXRfc3RyaW5nKG0sICh1X2NoYXIgKiopJm9pZC5lbGVtZW50cywgJmxl bmd0aCkpICE9IDApCi0rCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Ci0rCSAgICBvaWQu bGVuZ3RoID0gbGVuZ3RoOwotKwkgICAgZ3NzX2FkZF9vaWRfc2V0X21lbWJlcigmbWlub3IsICZv aWQsIG1lY2hfc2V0KTsKLSsJfQotKwotKwlzc2hidWZfZnJlZShtKTsKLSsKLSsJcmV0dXJuKG1h am9yKTsKLSt9Ci0rCi0raW50Ci0rbW1fc3NoX2dzc2FwaV9sb2NhbG5hbWUoY2hhciAqKmxuYW1l KQotK3sKLSsJc3RydWN0IHNzaGJ1ZiAqbSA9IE5VTEw7Ci0rCWludCByOwotKwotKwlpZiAoKG0g PSBzc2hidWZfbmV3KCkpID09IE5VTEwpCi0rCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIp OwotKwltbV9yZXF1ZXN0X3NlbmQocG1vbml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX1JFUV9HU1NM T0NBTE5BTUUsIG0pOwotKwotKwlkZWJ1ZzNfZigid2FpdGluZyBmb3IgTU9OSVRPUl9BTlNfR1NT TE9DQUxOQU1FIik7Ci0rCW1tX3JlcXVlc3RfcmVjZWl2ZV9leHBlY3QocG1vbml0b3ItPm1fcmVj dmZkLCBNT05JVE9SX0FOU19HU1NMT0NBTE5BTUUsCi0rCSAgICBtKTsKLSsKLSsJaWYgKChyID0g c3NoYnVmX2dldF9jc3RyaW5nKG0sIGxuYW1lLCBOVUxMKSkgIT0gMCkKLSsJCWZhdGFsX2ZyKHIs ICJidWZmZXIgZXJyb3IiKTsKLSsKLSsJc3NoYnVmX2ZyZWUobSk7Ci0rCWlmICgoKmxuYW1lID09 IE5VTEwpIHx8ICgqbG5hbWVbMF0gPT0gJ1wwJykpIHsKLSsJCWRlYnVnM19mKCJnc3NhcGkgaWRl bnRpdHkgbWFwcGluZyBmYWlsZWQiKTsKLSsJfSBlbHNlIHsKLSsJCWRlYnVnM19mKCJnc3NhcGkg aWRlbnRpdHkgbWFwcGVkIHRvICVzIiwgKmxuYW1lKTsKLSsJfQotKwotKwlyZXR1cm4oMCk7Ci0r fQotKwotIE9NX3VpbnQzMgotIG1tX3NzaF9nc3NhcGlfc2lnbihHc3NjdHh0ICpjdHgsIGdzc19i dWZmZXJfZGVzYyAqZGF0YSwgZ3NzX2J1ZmZlcl9kZXNjICpoYXNoKQotIHsKLWRpZmYgLU51ciBv cGVuc3NoLTEwLjJwMS5vcmlnL21vbml0b3Jfd3JhcC5oIG9wZW5zc2gtMTAuMnAxL21vbml0b3Jf d3JhcC5oCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9tb25pdG9yX3dyYXAuaAkyMDI2LTAzLTE4 IDA5OjM4OjE3LjU4MTYzMjA4MCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL21vbml0b3Jfd3Jh cC5oCTIwMjYtMDMtMTggMTA6MTk6MzkuNDIwNzQ1NTU4ICswMTAwCi1AQCAtNzYsNiArNzYsMTAg QEAKLSBpbnQgbW1fc3NoX2dzc2FwaV91c2Vyb2soY2hhciAqdXNlciwgc3RydWN0IHBhc3N3ZCAq LCBpbnQga2V4KTsKLSBPTV91aW50MzIgbW1fc3NoX2dzc2FwaV9jaGVja21pYyhHc3NjdHh0ICos IGdzc19idWZmZXJfdCwgZ3NzX2J1ZmZlcl90KTsKLSBPTV91aW50MzIgbW1fc3NoX2dzc2FwaV9z aWduKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOwotK2ludCBtbV9zc2hf Z3NzYXBpX2xvY2FsbmFtZShjaGFyICoqdXNlcik7Ci0rT01fdWludDMyIG1tX2dzc19pbmRpY2F0 ZV9tZWNocyhPTV91aW50MzIgKm1pbm9yX3N0YXR1cywKLSsgICAgZ3NzX09JRF9zZXQgKm1lY2hf c2V0KTsKLStjaGFyICptbV9zc2hfZ3NzYXBpX2xhc3RfZXJyb3IoR3NzY3R4dCAqY3R4dCwgT01f dWludDMyICptYWosIE9NX3VpbnQzMiAqbWluKTsKLSBpbnQgbW1fc3NoX2dzc2FwaV91cGRhdGVf Y3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKik7Ci0gI2VuZGlmCi0gCi1kaWZmIC1OdXIgb3BlbnNz aC0xMC4ycDEub3JpZy9yZWFkY29uZi5jIG9wZW5zc2gtMTAuMnAxL3JlYWRjb25mLmMKLS0tLSBv cGVuc3NoLTEwLjJwMS5vcmlnL3JlYWRjb25mLmMJMjAyNi0wMy0xOCAwOTozODoxNy44MDkxNzA2 NDYgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9yZWFkY29uZi5jCTIwMjYtMDMtMTggMTA6MTk6 MzkuNDIxMjYwMjY0ICswMTAwCi1AQCAtMjkxOCwxMSArMjkxOCwxMSBAQAotIAlpZiAob3B0aW9u cy0+cHVia2V5X2F1dGhlbnRpY2F0aW9uID09IC0xKQotIAkJb3B0aW9ucy0+cHVia2V5X2F1dGhl bnRpY2F0aW9uID0gU1NIX1BVQktFWV9BVVRIX0FMTDsKLSAJaWYgKG9wdGlvbnMtPmdzc19hdXRo ZW50aWNhdGlvbiA9PSAtMSkKLS0JCW9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9IDA7Ci0r CQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAxOwotIAlpZiAob3B0aW9ucy0+Z3NzX2tl eWV4ID09IC0xKQotLQkJb3B0aW9ucy0+Z3NzX2tleWV4ID0gMDsKLSsJCW9wdGlvbnMtPmdzc19r ZXlleCA9IDE7Ci0gCWlmIChvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPT0gLTEpCi0tCQlvcHRp b25zLT5nc3NfZGVsZWdfY3JlZHMgPSAwOwotKwkJb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID0g MTsKLSAJaWYgKG9wdGlvbnMtPmdzc190cnVzdF9kbnMgPT0gLTEpCi0gCQlvcHRpb25zLT5nc3Nf dHJ1c3RfZG5zID0gMDsKLSAJaWYgKG9wdGlvbnMtPmdzc19yZW5ld2FsX3Jla2V5ID09IC0xKQot ZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvcmVhZGNvbmYuaCBvcGVuc3NoLTEwLjJwMS9y ZWFkY29uZi5oCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9yZWFkY29uZi5oCTIwMjYtMDMtMTgg MDk6Mzg6MTcuMjc2MDExODQ1ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvcmVhZGNvbmYuaAky MDI2LTAzLTE4IDEwOjE5OjM5LjQyMTY1ODk0NyArMDEwMAotQEAgLTgwLDYgKzgwLDggQEAKLSAJ Y2hhciAgICpob3N0X2tleV9hbGlhczsJLyogaG9zdG5hbWUgYWxpYXMgZm9yIC5zc2gva25vd25f aG9zdHMgKi8KLSAJY2hhciAgICpwcm94eV9jb21tYW5kOwkvKiBQcm94eSBjb21tYW5kIGZvciBj b25uZWN0aW5nIHRoZSBob3N0LiAqLwotIAljaGFyICAgKnVzZXI7CQkvKiBVc2VyIHRvIGxvZyBp biBhcy4gKi8KLSsJaW50ICAgICBpbXBsaWNpdDsJLyogTG9naW4gdXNlciB3YXMgbm90IHNwZWNp ZmllZC4KLSsJCQkJICAgU2VydmVyIG1heSBjaG9vc2UgYmFzZWQgb24gYXV0aGN0eHQuICovCi0g CWludCAgICAgZXNjYXBlX2NoYXI7CS8qIEVzY2FwZSBjaGFyYWN0ZXI7IC0yID0gbm9uZSAqLwot IAotIAl1X2ludAludW1fc3lzdGVtX2hvc3RmaWxlczsJLyogUGF0aHMgZm9yIC9ldGMvc3NoL3Nz aF9rbm93bl9ob3N0cyAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvc2VydmNvbmYu YyBvcGVuc3NoLTEwLjJwMS9zZXJ2Y29uZi5jCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9zZXJ2 Y29uZi5jCTIwMjYtMDMtMTggMDk6Mzg6MTcuODA5MzU4Mzg5ICswMTAwCi0rKysgb3BlbnNzaC0x MC4ycDEvc2VydmNvbmYuYwkyMDI2LTAzLTE4IDE1OjAxOjI2LjE1ODU0ODUwNCArMDEwMAotQEAg LTk2LDYgKzk2LDcgQEAKLSAJLyogUG9ydGFibGUtc3BlY2lmaWMgb3B0aW9ucyAqLwotIAlvcHRp b25zLT51c2VfcGFtID0gLTE7Ci0gCW9wdGlvbnMtPnBhbV9zZXJ2aWNlX25hbWUgPSBOVUxMOwot KwlvcHRpb25zLT5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlID0gLTE7Ci0gCi0gCS8qIFN0YW5kYXJk IE9wdGlvbnMgKi8KLSAJb3B0aW9ucy0+bnVtX3BvcnRzID0gMDsKLUBAIC0xNDYsNiArMTQ3LDcg QEAKLSAJb3B0aW9ucy0+Z3NzX2NsZWFudXBfY3JlZHMgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX2Rl bGVnX2NyZWRzID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19zdHJpY3RfYWNjZXB0b3IgPSAtMTsKLSsJ b3B0aW9ucy0+Z3NpX2FsbG93X2xpbWl0ZWRfcHJveHkgPSAtMTsKLSAJb3B0aW9ucy0+Z3NzX3N0 b3JlX3Jla2V5ID0gLTE7Ci0gCW9wdGlvbnMtPmdzc19rZXhfYWxnb3JpdGhtcyA9IE5VTEw7Ci0g CW9wdGlvbnMtPmdzc19pbmRpY2F0b3JzID0gTlVMTDsKLUBAIC0zMTgsNiArMzIwLDggQEAKLSAJ CW9wdGlvbnMtPnVzZV9wYW0gPSAwOwotIAlpZiAob3B0aW9ucy0+cGFtX3NlcnZpY2VfbmFtZSA9 PSBOVUxMKQotIAkJb3B0aW9ucy0+cGFtX3NlcnZpY2VfbmFtZSA9IHhzdHJkdXAoU1NIRF9QQU1f U0VSVklDRSk7Ci0rCWlmIChvcHRpb25zLT5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlID09IC0xKQot KwkJb3B0aW9ucy0+cGVybWl0X3BhbV91c2VyX2NoYW5nZSA9IDA7Ci0gCi0gCS8qIFN0YW5kYXJk IE9wdGlvbnMgKi8KLSAJaWYgKG9wdGlvbnMtPm51bV9ob3N0X2tleV9maWxlcyA9PSAwKSB7Ci1A QCAtMzk1LDE1ICszOTksMTcgQEAKLSAJaWYgKG9wdGlvbnMtPmtlcmJlcm9zX3VuaXF1ZV9jY2Fj aGUgPT0gLTEpCi0gCQlvcHRpb25zLT5rZXJiZXJvc191bmlxdWVfY2NhY2hlID0gMDsKLSAJaWYg KG9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9PSAtMSkKLS0JCW9wdGlvbnMtPmdzc19hdXRo ZW50aWNhdGlvbiA9IDA7Ci0rCQlvcHRpb25zLT5nc3NfYXV0aGVudGljYXRpb24gPSAxOwotIAlp ZiAob3B0aW9ucy0+Z3NzX2tleWV4ID09IC0xKQotLQkJb3B0aW9ucy0+Z3NzX2tleWV4ID0gMDsK LSsJCW9wdGlvbnMtPmdzc19rZXlleCA9IDE7Ci0gCWlmIChvcHRpb25zLT5nc3NfY2xlYW51cF9j cmVkcyA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19jbGVhbnVwX2NyZWRzID0gMTsKLSAJaWYgKG9w dGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9PSAtMSkKLSAJCW9wdGlvbnMtPmdzc19kZWxlZ19jcmVk cyA9IDE7Ci0gCWlmIChvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2VwdG9yID09IC0xKQotIAkJb3B0 aW9ucy0+Z3NzX3N0cmljdF9hY2NlcHRvciA9IDE7Ci0rCWlmIChvcHRpb25zLT5nc2lfYWxsb3df bGltaXRlZF9wcm94eSA9PSAtMSkKLSsJCW9wdGlvbnMtPmdzaV9hbGxvd19saW1pdGVkX3Byb3h5 ID0gMDsKLSAJaWYgKG9wdGlvbnMtPmdzc19zdG9yZV9yZWtleSA9PSAtMSkKLSAJCW9wdGlvbnMt Pmdzc19zdG9yZV9yZWtleSA9IDA7Ci0gI2lmZGVmIEdTU0FQSQotQEAgLTU3Nyw3ICs1ODMsNyBA QAotIHR5cGVkZWYgZW51bSB7Ci0gCXNCYWRPcHRpb24sCQkvKiA9PSB1bmtub3duIG9wdGlvbiAq LwotIAkvKiBQb3J0YWJsZS1zcGVjaWZpYyBvcHRpb25zICovCi0tCXNVc2VQQU0sIHNQQU1TZXJ2 aWNlTmFtZSwKLSsJc1VzZVBBTSwgc1BBTVNlcnZpY2VOYW1lLCBzUGVybWl0UEFNVXNlckNoYW5n ZSwKLSAJLyogU3RhbmRhcmQgT3B0aW9ucyAqLwotIAlzUG9ydCwgc0hvc3RLZXlGaWxlLCBzTG9n aW5HcmFjZVRpbWUsCi0gCXNQZXJtaXRSb290TG9naW4sIHNMb2dGYWNpbGl0eSwgc0xvZ0xldmVs LCBzTG9nVmVyYm9zZSwKLUBAIC01OTksNiArNjA1LDggQEAKLSAJc0NsaWVudEFsaXZlSW50ZXJ2 YWwsIHNDbGllbnRBbGl2ZUNvdW50TWF4LCBzQXV0aG9yaXplZEtleXNGaWxlLAotIAlzR3NzQXV0 aGVudGljYXRpb24sIHNHc3NDbGVhbnVwQ3JlZHMsIHNHc3NEZWxlZ2F0ZUNyZWRzLAotIAlzR3Nz RW5hYmxlazV1c2Vycywgc0dzc1N0cmljdEFjY2VwdG9yLAotKwlzR3NzQ3JlZHNQYXRoLAotKwlz R3NpQWxsb3dMaW1pdGVkUHJveHksCi0gCXNHc3NLZXlFeCwgc0dzc0luZGljYXRvcnMsIHNHc3NL ZXhBbGdvcml0aG1zLCBzR3NzU3RvcmVSZWtleSwKLSAJc0FjY2VwdEVudiwgc1NldEVudiwgc1Bl cm1pdFR1bm5lbCwKLSAJc01hdGNoLCBzUGVybWl0T3Blbiwgc1Blcm1pdExpc3Rlbiwgc0ZvcmNl Q29tbWFuZCwgc0Nocm9vdERpcmVjdG9yeSwKLUBAIC02MzMsOSArNjQxLDExIEBACi0gI2lmZGVm IFVTRV9QQU0KLSAJeyAidXNlcGFtIiwgc1VzZVBBTSwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJw YW1zZXJ2aWNlbmFtZSIsIHNQQU1TZXJ2aWNlTmFtZSwgU1NIQ0ZHX0FMTCB9LAotKwl7ICJwZXJt aXRwYW11c2VyY2hhbmdlIiwgc1Blcm1pdFBBTVVzZXJDaGFuZ2UsIFNTSENGR19HTE9CQUwgfSwK LSAjZWxzZQotIAl7ICJ1c2VwYW0iLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKLSAJ eyAicGFtc2VydmljZW5hbWUiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19BTEwgfSwKLSsJeyAicGVy bWl0cGFtdXNlcmNoYW5nZSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotICNlbmRp ZgotIAl7ICJwYW1hdXRoZW50aWNhdGlvbnZpYWtiZGludCIsIHNEZXByZWNhdGVkLCBTU0hDRkdf R0xPQkFMIH0sCi0gCS8qIFN0YW5kYXJkIE9wdGlvbnMgKi8KLUBAIC02OTEsNiArNzAxLDEyIEBA Ci0gCXsgImdzc2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNHc3NDbGVhbnVwQ3JlZHMsIFNTSENG R19HTE9CQUwgfSwKLSAJeyAiZ3NzYXBpY2xlYW51cGNyZWRzIiwgc0dzc0NsZWFudXBDcmVkcywg U1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlkZWxlZ2F0ZWNyZWRlbnRpYWxzIiwgc0dzc0Rl bGVnYXRlQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAiZ3NzYXBpY3JlZGVudGlhbHNwYXRo Iiwgc0dzc0NyZWRzUGF0aCwgU1NIQ0ZHX0dMT0JBTCB9LAotKyNpZmRlZiBHU0kKLSsJeyAiZ3Np YWxsb3dsaW1pdGVkcHJveHkiLCBzR3NpQWxsb3dMaW1pdGVkUHJveHksIFNTSENGR19HTE9CQUwg fSwKLSsjZWxzZQotKwl7ICJnc2lhbGxvd2xpbWl0ZWRwcm94eSIsIHNVbnN1cHBvcnRlZCwgU1NI Q0ZHX0dMT0JBTCB9LAotKyNlbmRpZgotIAl7ICJnc3NhcGlzdHJpY3RhY2NlcHRvcmNoZWNrIiwg c0dzc1N0cmljdEFjY2VwdG9yLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWtleWV4Y2hh bmdlIiwgc0dzc0tleUV4LCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0b3JlY3JlZGVu dGlhbHNvbnJla2V5Iiwgc0dzc1N0b3JlUmVrZXksIFNTSENGR19HTE9CQUwgfSwKLUBAIC03MDIs NiArNzE4LDggQEAKLSAJeyAiZ3NzYXBpY2xlYW51cGNyZWRlbnRpYWxzIiwgc1Vuc3VwcG9ydGVk LCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWNsZWFudXBjcmVkcyIsIHNVbnN1cHBvcnRl ZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlkZWxlZ2F0ZWNyZWRlbnRpYWxzIiwgc1Vu c3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0rCXsgImdzc2FwaWNyZWRlbnRpYWxzcGF0aCIs IHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotKwl7ICJnc2lhbGxvd2xpbWl0ZWRwcm94 eSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAotIAl7ICJnc3NhcGlzdHJpY3RhY2Nl cHRvcmNoZWNrIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaWtl eWV4Y2hhbmdlIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi0gCXsgImdzc2FwaXN0 b3JlY3JlZGVudGlhbHNvbnJla2V5Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCi1A QCAtNzc2LDYgKzc5NCw4IEBACi0gCXsgInBlcm1pdGxpc3RlbiIsIHNQZXJtaXRMaXN0ZW4sIFNT SENGR19BTEwgfSwKLSAJeyAiZm9yY2Vjb21tYW5kIiwgc0ZvcmNlQ29tbWFuZCwgU1NIQ0ZHX0FM TCB9LAotIAl7ICJjaHJvb3RkaXJlY3RvcnkiLCBzQ2hyb290RGlyZWN0b3J5LCBTU0hDRkdfQUxM IH0sCi0rCXsgImRpc2FibGV1c2FnZXN0YXRzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFM fSwKLSsJeyAidXNhZ2VzdGF0c3RhcmdldHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUx9 LAotIAl7ICJob3N0Y2VydGlmaWNhdGUiLCBzSG9zdENlcnRpZmljYXRlLCBTU0hDRkdfR0xPQkFM IH0sCi0gCXsgInJldm9rZWRrZXlzIiwgc1Jldm9rZWRLZXlzLCBTU0hDRkdfQUxMIH0sCi0gCXsg InRydXN0ZWR1c2VyY2FrZXlzIiwgc1RydXN0ZWRVc2VyQ0FLZXlzLCBTU0hDRkdfQUxMIH0sCi1A QCAtMTQ1Niw2ICsxNDc2LDEwIEBACi0gCQkJKmNoYXJwdHIgPSB4c3RyZHVwKGFyZyk7Ci0gCQli cmVhazsKLSAKLSsJY2FzZSBzUGVybWl0UEFNVXNlckNoYW5nZToKLSsJCWludHB0ciA9ICZvcHRp b25zLT5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlOwotKwkJZ290byBwYXJzZV9mbGFnOwotKwotIAkv KiBTdGFuZGFyZCBPcHRpb25zICovCi0gCWNhc2Ugc0JhZE9wdGlvbjoKLSAJCWdvdG8gb3V0Owot QEAgLTE3MTksNiArMTc0MywxMCBAQAotIAkJaW50cHRyID0gJm9wdGlvbnMtPmdzc19kZWxlZ19j cmVkczsKLSAJCWdvdG8gcGFyc2VfZmxhZzsKLSAKLSsJY2FzZSBzR3NzQ3JlZHNQYXRoOgotKwkJ Y2hhcnB0ciA9ICZvcHRpb25zLT5nc3NfY3JlZHNfcGF0aDsKLSsJCWdvdG8gcGFyc2VfZmlsZW5h bWU7Ci0rCi0gCWNhc2Ugc0dzc1N0cmljdEFjY2VwdG9yOgotIAkJaW50cHRyID0gJm9wdGlvbnMt Pmdzc19zdHJpY3RfYWNjZXB0b3I7Ci0gCQlnb3RvIHBhcnNlX2ZsYWc7Ci1AQCAtMTc0OCw2ICsx Nzc2LDEyIEBACi0gCQkJb3B0aW9ucy0+Z3NzX2luZGljYXRvcnMgPSB4c3RyZHVwKGFyZyk7Ci0g CQlicmVhazsKLSAKLSsjaWZkZWYgR1NJCi0rCWNhc2Ugc0dzaUFsbG93TGltaXRlZFByb3h5Ogot KwkJaW50cHRyID0gJm9wdGlvbnMtPmdzaV9hbGxvd19saW1pdGVkX3Byb3h5OwotKwkJZ290byBw YXJzZV9mbGFnOwotKyNlbmRpZgotKwotIAljYXNlIHNQYXNzd29yZEF1dGhlbnRpY2F0aW9uOgot IAkJaW50cHRyID0gJm9wdGlvbnMtPnBhc3N3b3JkX2F1dGhlbnRpY2F0aW9uOwotIAkJZ290byBw YXJzZV9mbGFnOwotQEAgLTMwMjYsNiArMzA2MCw3IEBACi0gCi0gCU1fQ1BfSU5UT1BUKHBhc3N3 b3JkX2F1dGhlbnRpY2F0aW9uKTsKLSAJTV9DUF9JTlRPUFQoZ3NzX2F1dGhlbnRpY2F0aW9uKTsK LSsJTV9DUF9JTlRPUFQoZ3NzX2RlbGVnX2NyZWRzKTsKLSAJTV9DUF9JTlRPUFQocHVia2V5X2F1 dGhlbnRpY2F0aW9uKTsKLSAJTV9DUF9JTlRPUFQocHVia2V5X2F1dGhfb3B0aW9ucyk7Ci0gCU1f Q1BfSU5UT1BUKGtlcmJlcm9zX2F1dGhlbnRpY2F0aW9uKTsKLWRpZmYgLU51ciBvcGVuc3NoLTEw LjJwMS5vcmlnL3NlcnZjb25mLmggb3BlbnNzaC0xMC4ycDEvc2VydmNvbmYuaAotLS0tIG9wZW5z c2gtMTAuMnAxLm9yaWcvc2VydmNvbmYuaAkyMDI2LTAzLTE4IDA5OjM4OjE3Ljc2NjQ2NDc5NyAr MDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NlcnZjb25mLmgJMjAyNi0wMy0xOCAxMzozMDowNC40 OTk2ODM4ODIgKzAxMDAKLUBAIC0xNTUsMTAgKzE1NSwxMiBAQAotIAkJCQkJCSAqIGJlIHN0b3Jl ZCBpbiBwZXItc2Vzc2lvbiBjY2FjaGUgKi8KLSAJaW50CXVzZV9rdXNlcm9rOwotIAlpbnQJCWVu YWJsZV9rNXVzZXJzOwotKwlpbnQgICAgIGdzaV9hbGxvd19saW1pdGVkX3Byb3h5OwkvKiBJZiB0 cnVlLCBhY2NlcHQgbGltaXRlZCBwcm94aWVzICovCi0gCWludCAgICAgZ3NzX2F1dGhlbnRpY2F0 aW9uOwkvKiBJZiB0cnVlLCBwZXJtaXQgR1NTQVBJIGF1dGhlbnRpY2F0aW9uICovCi0gCWludCAg ICAgZ3NzX2tleWV4OwkJLyogSWYgdHJ1ZSwgcGVybWl0IEdTU0FQSSBrZXkgZXhjaGFuZ2UgKi8K LSAJaW50ICAgICBnc3NfY2xlYW51cF9jcmVkczsJLyogSWYgdHJ1ZSwgZGVzdHJveSBjcmVkIGNh Y2hlIG9uIGxvZ291dCAqLwotIAlpbnQgICAgIGdzc19kZWxlZ19jcmVkczsJLyogSWYgdHJ1ZSwg YWNjZXB0IGRlbGVnYXRlZCBHU1MgY3JlZGVudGlhbHMgKi8KLSsJY2hhciAgICpnc3NfY3JlZHNf cGF0aDsJCS8qIFVzZSBub24tZGVmYXVsdCBjcmVkZW50aWFscyBwYXRoICovCi0gCWludCAgICAg Z3NzX3N0cmljdF9hY2NlcHRvcjsJLyogSWYgdHJ1ZSwgcmVzdHJpY3QgdGhlIEdTU0FQSSBhY2Nl cHRvciBuYW1lICovCi0gCWludCAJZ3NzX3N0b3JlX3Jla2V5OwotIAljaGFyICAgKmdzc19rZXhf YWxnb3JpdGhtczsJLyogR1NTQVBJIGtleCBtZXRob2RzIHRvIGJlIG9mZmVyZWQgYnkgY2xpZW50 LiAqLwotQEAgLTIyMyw2ICsyMjUsNyBAQAotIAotIAlpbnQJdXNlX3BhbTsJCS8qIEVuYWJsZSBh dXRoIHZpYSBQQU0gKi8KLSAJY2hhciAgICpwYW1fc2VydmljZV9uYW1lOwotKwlpbnQJcGVybWl0 X3BhbV91c2VyX2NoYW5nZTsJLyogQWxsb3cgUEFNIHRvIGNoYW5nZSB1c2VyIG5hbWUgKi8KLSAK LSAJaW50CXBlcm1pdF90dW47Ci0gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9zc2gu MSBvcGVuc3NoLTEwLjJwMS9zc2guMQotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3NoLjEJMjAy Ni0wMy0xOCAwOTozODoxNy42MjIwMzQ4NDYgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9zc2gu MQkyMDI2LTAzLTE4IDEwOjE5OjM5LjQyMzI1MDQ1NCArMDEwMAotQEAgLTE1MjgsNiArMTUyOCwx OCBAQAotIG9uIHRvIG5ldyBjb25uZWN0aW9ucykuCi0gLkl0IEV2IFVTRVIKLSBTZXQgdG8gdGhl IG5hbWUgb2YgdGhlIHVzZXIgbG9nZ2luZyBpbi4KLSsuSXQgRXYgWDUwOV9DRVJUX0RJUgotK1Vz ZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0 aW9uIGZvciB0aGUKLStDQSBjZXJ0aWZpY2F0ZXMgZGlyZWN0b3J5LgotKy5JdCBFdiBYNTA5X1VT RVJfQ0VSVAotK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0 YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKLStjZXJ0aWZpY2F0ZSB0byBiZSB1c2VkIGZvciBhdXRo ZW50aWNhdGlvbiB0byB0aGUgc2VydmVyLgotKy5JdCBFdiBYNTA5X1VTRVJfS0VZCi0rVXNlZCBm b3IgR1NJIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24g Zm9yIHRoZQotK3ByaXZhdGUga2V5IHRvIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRo ZSBzZXJ2ZXIuCi0rLkl0IEV2IFg1MDlfVVNFUl9QUk9YWQotK1VzZWQgZm9yIEdTSSBhdXRoZW50 aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKLStwcm94 eSBjcmVkZW50aWFsIHRvIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBzZXJ2ZXIu Ci0gLkVsCi0gLlBwCi0gQWRkaXRpb25hbGx5LAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9y aWcvc3NoLmMgb3BlbnNzaC0xMC4ycDEvc3NoLmMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL3Nz aC5jCTIwMjYtMDMtMTggMDk6Mzg6MTcuNzgxNjg5NTMyICswMTAwCi0rKysgb3BlbnNzaC0xMC4y cDEvc3NoLmMJMjAyNi0wMy0xOCAxMDo0MzowNC42MjgwNzI0MjkgKzAxMDAKLUBAIC01ODgsNiAr NTg4LDM4IEBACi0gCQkJZmF0YWwoIkNhbid0IG9wZW4gdXNlciBjb25maWcgZmlsZSAlLjEwMHM6 ICIKLSAJCQkgICAgIiUuMTAwcyIsIGNvbmZpZywgc3RyZXJyb3IoZXJybm8pKTsKLSAJfSBlbHNl IHsKLSsJICAgIC8qCi0rCSAgICAgKiBTaW5jZSB0aGUgY29uZmlnIGZpbGUgcGFyc2luZyBjb2Rl IGFib3J0cyBpZiBpdCBzZWVzCi0rCSAgICAgKiBvcHRpb25zIGl0IGRvZXNuJ3QgcmVjb2duaXpl LCBhbGxvdyB1c2VycyB0byBwdXQKLSsJICAgICAqIG9wdGlvbnMgc3BlY2lmaWMgdG8gY29tcGls ZS10aW1lIGFkZC1vbnMgaW4gYWx0ZXJuYXRlCi0rCSAgICAgKiBjb25maWcgZmlsZXMgc28gdGhl aXIgcHJpbWFyeSBjb25maWcgZmlsZSB3aWxsCi0rCSAgICAgKiBpbnRlcm9wZXJhdGUgU1NIIHZl cnNpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aG9zZQotKwkgICAgICogb3B0aW9ucy4KLSsJICAg ICAqLwotKyNpZmRlZiBHU1NBUEkKLSsJCXIgPSBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIl cy8lcy5nc3NhcGkiLCBwdy0+cHdfZGlyLAotKwkJICAgIF9QQVRIX1NTSF9VU0VSX0NPTkZGSUxF KTsKLSsJCWlmIChyID4gMCAmJiAoc2l6ZV90KXIgPCBzaXplb2YoYnVmKSkKLSsJCQkodm9pZCly ZWFkX2NvbmZpZ19maWxlKGJ1ZiwgcHcsIGhvc3QsIGhvc3RfbmFtZSwgY21kLAotKwkJCSAgICAm b3B0aW9ucywgU1NIQ09ORl9DSEVDS1BFUk0gfCBTU0hDT05GX1VTRVJDT05GIHwKLSsJCQkgICAg KGZpbmFsX3Bhc3MgPyBTU0hDT05GX0ZJTkFMIDogMCksIHdhbnRfZmluYWxfcGFzcyk7Ci0rI2lm ZGVmIEdTSQotKwkJciA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzLyVzLmdzaSIsIHB3 LT5wd19kaXIsCi0rCQkgICAgX1BBVEhfU1NIX1VTRVJfQ09ORkZJTEUpOwotKwkJaWYgKHIgPiAw ICYmIChzaXplX3QpciA8IHNpemVvZihidWYpKQotKwkJCSh2b2lkKXJlYWRfY29uZmlnX2ZpbGUo YnVmLCBwdywgaG9zdCwgaG9zdF9uYW1lLCBjbWQsCi0rCQkJICAgICZvcHRpb25zLCBTU0hDT05G X0NIRUNLUEVSTSB8IFNTSENPTkZfVVNFUkNPTkYgfAotKwkJCSAgICAoZmluYWxfcGFzcyA/IFNT SENPTkZfRklOQUwgOiAwKSwgd2FudF9maW5hbF9wYXNzKTsKLSsjZW5kaWYKLSsjaWYgZGVmaW5l ZChLUkI1KQotKwkJciA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiVzLyVzLmtyYiIsIHB3 LT5wd19kaXIsCi0rCQkgICAgX1BBVEhfU1NIX1VTRVJfQ09ORkZJTEUpOwotKwkJaWYgKHIgPiAw ICYmIChzaXplX3QpciA8IHNpemVvZihidWYpKQotKwkJCSh2b2lkKXJlYWRfY29uZmlnX2ZpbGUo YnVmLCBwdywgaG9zdCwgaG9zdF9uYW1lLCBjbWQsCi0rCQkJICAgICZvcHRpb25zLCBTU0hDT05G X0NIRUNLUEVSTSB8IFNTSENPTkZfVVNFUkNPTkYgfAotKwkJCSAgICAoZmluYWxfcGFzcyA/IFNT SENPTkZfRklOQUwgOiAwKSwgd2FudF9maW5hbF9wYXNzKTsKLSsjZW5kaWYKLSsjZW5kaWYKLSAJ CXIgPSBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlcy8lcyIsIHB3LT5wd19kaXIsCi0gCQkg ICAgX1BBVEhfU1NIX1VTRVJfQ09ORkZJTEUpOwotIAkJaWYgKHIgPiAwICYmIChzaXplX3QpciA8 IHNpemVvZihidWYpKQotQEAgLTEzMzIsNiArMTM2NCw5IEBACi0gCWlmIChvcHRpb25zLnVzZXIg PT0gTlVMTCkgewotIAkJdXNlcl93YXNfZGVmYXVsdCA9IDE7Ci0gCQlvcHRpb25zLnVzZXIgPSB4 c3RyZHVwKHB3LT5wd19uYW1lKTsKLSsJCW9wdGlvbnMuaW1wbGljaXQgPSAxOwotKwl9IGVsc2Ug ewotKwkJb3B0aW9ucy5pbXBsaWNpdCA9IDA7Ci0gCX0KLSAKLSAJLyoKLWRpZmYgLU51ciBvcGVu c3NoLTEwLjJwMS5vcmlnL3NzaF9jb25maWcgb3BlbnNzaC0xMC4ycDEvc3NoX2NvbmZpZwotLS0t IG9wZW5zc2gtMTAuMnAxLm9yaWcvc3NoX2NvbmZpZwkyMDI2LTAzLTE4IDA5OjM4OjE3LjI3NjY1 MDQ2OCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaF9jb25maWcJMjAyNi0wMy0xOCAxMDox OTozOS40MjQxNzM5MTQgKzAxMDAKLUBAIC0yMiw5ICsyMiw5IEBACi0gIyAgIEZvcndhcmRYMTEg bm8KLSAjICAgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMKLSAjICAgSG9zdGJhc2VkQXV0aGVu dGljYXRpb24gbm8KLS0jICAgR1NTQVBJQXV0aGVudGljYXRpb24gbm8KLS0jICAgR1NTQVBJRGVs ZWdhdGVDcmVkZW50aWFscyBubwotLSMgICBHU1NBUElLZXlFeGNoYW5nZSBubwotKyMgICBHU1NB UElBdXRoZW50aWNhdGlvbiB5ZXMKLSsjICAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyB5ZXMK LSsjICAgR1NTQVBJS2V5RXhjaGFuZ2UgeWVzCi0gIyAgIEdTU0FQSVRydXN0RE5TIG5vCi0gIyAg IEJhdGNoTW9kZSBubwotICMgICBDaGVja0hvc3RJUCBubwotZGlmZiAtTnVyIG9wZW5zc2gtMTAu MnAxLm9yaWcvc3NoX2NvbmZpZy41IG9wZW5zc2gtMTAuMnAxL3NzaF9jb25maWcuNQotLS0tIG9w ZW5zc2gtMTAuMnAxLm9yaWcvc3NoX2NvbmZpZy41CTIwMjYtMDMtMTggMDk6Mzg6MTcuNzgxOTM3 Njc3ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvc3NoX2NvbmZpZy41CTIwMjYtMDMtMTggMTA6 MTk6MzkuNDI0NTYxNDY0ICswMTAwCi1AQCAtNTIsNiArNTIsMTIgQEAKLSB1c2VyJ3MgY29uZmln dXJhdGlvbiBmaWxlCi0gLlBxIFBhIH4vLnNzaC9jb25maWcKLSAuSXQKLStHU1NBUEkgY29uZmln dXJhdGlvbiBmaWxlCi0rLlBxIFBhICRIT01FLy5zc2gvY29uZmlnLmdzc2FwaQotKy5JdAotK0tl cmJlcm9zIGNvbmZpZ3VyYXRpb24gZmlsZQotKy5QcSBQYSAkSE9NRS8uc3NoL2NvbmZpZy5rcmIK LSsuSXQKLSBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUKLSAuUHEgUGEgL2V0Yy9zc2gv c3NoX2NvbmZpZwotIC5FbAotQEAgLTk2OSw3ICs5NzUsNyBAQAotIC5JdCBDbSBHU1NBUElBdXRo ZW50aWNhdGlvbgotIFNwZWNpZmllcyB3aGV0aGVyIHVzZXIgYXV0aGVudGljYXRpb24gYmFzZWQg b24gR1NTQVBJIGlzIGFsbG93ZWQuCi0gVGhlIGRlZmF1bHQgaXMKLS0uQ20gbm8gLgotKy5DbSB5 ZXMgLgotIC5JdCBDbSBHU1NBUElDbGllbnRJZGVudGl0eQotIElmIHNldCwgc3BlY2lmaWVzIHRo ZSBHU1NBUEkgY2xpZW50IGlkZW50aXR5IHRoYXQgc3NoIHNob3VsZCB1c2Ugd2hlbgotIGNvbm5l Y3RpbmcgdG8gdGhlIHNlcnZlci4gVGhlIGRlZmF1bHQgaXMgdW5zZXQsIHdoaWNoIG1lYW5zIHRo YXQgdGhlIGRlZmF1bHQKLUBAIC05NzcsMTIgKzk4MywxMiBAQAotIC5JdCBDbSBHU1NBUElEZWxl Z2F0ZUNyZWRlbnRpYWxzCi0gRm9yd2FyZCAoZGVsZWdhdGUpIGNyZWRlbnRpYWxzIHRvIHRoZSBz ZXJ2ZXIuCi0gVGhlIGRlZmF1bHQgaXMKLS0uQ20gbm8gLgotKy5DbSB5ZXMgLgotIC5JdCBDbSBH U1NBUElLZXlFeGNoYW5nZQotIFNwZWNpZmllcyB3aGV0aGVyIGtleSBleGNoYW5nZSBiYXNlZCBv biBHU1NBUEkgbWF5IGJlIHVzZWQuIFdoZW4gdXNpbmcKLSBHU1NBUEkga2V5IGV4Y2hhbmdlIHRo ZSBzZXJ2ZXIgbmVlZCBub3QgaGF2ZSBhIGhvc3Qga2V5LgotIFRoZSBkZWZhdWx0IGlzCi0tLkRx IG5vIC4KLSsuRHEgeWVzIC4KLSAuSXQgQ20gR1NTQVBJUmVuZXdhbEZvcmNlc1Jla2V5Ci0gSWYg c2V0IHRvCi0gLkRxIHllcwotQEAgLTE2NDQsNyArMTY1MCw3IEBACi0gLkNtIHBhc3N3b3JkICkg LgotIFRoZSBkZWZhdWx0IGlzOgotIC5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAotLWdzc2Fw aS13aXRoLW1pYyxob3N0YmFzZWQscHVibGlja2V5LAotK2dzc2FwaS1rZXlleCxnc3NhcGktd2l0 aC1taWMsaG9zdGJhc2VkLHB1YmxpY2tleSwKLSBrZXlib2FyZC1pbnRlcmFjdGl2ZSxwYXNzd29y ZAotIC5FZAotIC5JdCBDbSBQcm94eUNvbW1hbmQKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5v cmlnL3NzaGNvbm5lY3QyLmMgb3BlbnNzaC0xMC4ycDEvc3NoY29ubmVjdDIuYwotLS0tIG9wZW5z c2gtMTAuMnAxLm9yaWcvc3NoY29ubmVjdDIuYwkyMDI2LTAzLTE4IDA5OjM4OjE3LjczOTQyODE1 NyArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaGNvbm5lY3QyLmMJMjAyNi0wMy0xOCAxMDox OTozOS40MjUwOTY3OTUgKzAxMDAKLUBAIC04NjAsNiArODYwLDExIEBACi0gCWdzc19PSUQgbWVj aCA9IE5VTEw7Ci0gCWNoYXIgKmdzc19ob3N0ID0gTlVMTDsKLSAKLSsJaWYgKCFvcHRpb25zLmdz c19hdXRoZW50aWNhdGlvbikgewotKwkJdmVyYm9zZSgiR1NTQVBJIGF1dGhlbnRpY2F0aW9uIGRp c2FibGVkLiIpOwotKwkJcmV0dXJuIDA7Ci0rCX0KLSsKLSAJaWYgKG9wdGlvbnMuZ3NzX3NlcnZl cl9pZGVudGl0eSkgewotIAkJZ3NzX2hvc3QgPSB4c3RyZHVwKG9wdGlvbnMuZ3NzX3NlcnZlcl9p ZGVudGl0eSk7Ci0gCX0gZWxzZSBpZiAob3B0aW9ucy5nc3NfdHJ1c3RfZG5zKSB7Ci1AQCAtOTY4 LDcgKzk3Myw4IEBACi0gCi0gCWlmIChzdGF0dXMgPT0gR1NTX1NfQ09NUExFVEUpIHsKLSAJCS8q IHNlbmQgZWl0aGVyIGNvbXBsZXRlIG9yIE1JQywgZGVwZW5kaW5nIG9uIG1lY2hhbmlzbSAqLwot LQkJaWYgKCEoZmxhZ3MgJiBHU1NfQ19JTlRFR19GTEFHKSkgewotKwkJaWYgKHN0cmNtcChhdXRo Y3R4dC0+bWV0aG9kLT5uYW1lLCAiZ3NzYXBpIikgPT0gMCB8fAotKwkJICAgICEoZmxhZ3MgJiBH U1NfQ19JTlRFR19GTEFHKSkgewotIAkJCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gsCi0gCQkJ ICAgIFNTSDJfTVNHX1VTRVJBVVRIX0dTU0FQSV9FWENIQU5HRV9DT01QTEVURSkpICE9IDAgfHwK LSAJCQkgICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAhPSAwKQotQEAgLTExMzUsNiArMTE0MSwy MCBAQAotIAlyZXR1cm4gcjsKLSB9Ci0gCi0rI2lmZGVmIEdTSQotK2V4dGVybgotK2NvbnN0IGdz c19PSURfZGVzYyAqIGNvbnN0IGdzc19tZWNoX2dsb2J1c19nc3NhcGlfb3BlbnNzbDsKLStleHRl cm4KLStjb25zdCBnc3NfT0lEX2Rlc2MgKiBjb25zdCBnc3NfbWVjaF9nbG9idXNfZ3NzYXBpX29w ZW5zc2xfbWljdjI7Ci0rI2RlZmluZSBpc19nc2lfb2lkKG9pZCkgXAotKyAgKChvaWQtPmxlbmd0 aCA9PSBnc3NfbWVjaF9nbG9idXNfZ3NzYXBpX29wZW5zc2wtPmxlbmd0aCAmJiBcCi0rICAgICht ZW1jbXAob2lkLT5lbGVtZW50cywgZ3NzX21lY2hfZ2xvYnVzX2dzc2FwaV9vcGVuc3NsLT5lbGVt ZW50cywgXAotKwkgICAgb2lkLT5sZW5ndGgpID09IDApKSB8fCBcCi0rICAgKG9pZC0+bGVuZ3Ro ID09IGdzc19tZWNoX2dsb2J1c19nc3NhcGlfb3BlbnNzbF9taWN2Mi0+bGVuZ3RoICYmIFwKLSsg ICAgKG1lbWNtcChvaWQtPmVsZW1lbnRzLCBnc3NfbWVjaF9nbG9idXNfZ3NzYXBpX29wZW5zc2xf bWljdjItPmVsZW1lbnRzLCBcCi0rCSAgICBvaWQtPmxlbmd0aCkgPT0gMCkpKQotKyNlbmRpZgot KwotIGludAotIHVzZXJhdXRoX2dzc2tleWV4KHN0cnVjdCBzc2ggKnNzaCkKLSB7Ci1AQCAtMTE1 Nyw2ICsxMTc3LDEyIEBACi0gCWlmICgoYiA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSAJCWZh dGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7Ci0gCi0rI2lmZGVmIEdTSQotKwlpZiAob3B0aW9u cy5pbXBsaWNpdCAmJiBpc19nc2lfb2lkKGdzc19rZXhfY29udGV4dC0+b2lkKSkKLSsJCXNzaF9n c3NhcGlfYnVpbGRtaWMoYiwgIiIsIGF1dGhjdHh0LT5zZXJ2aWNlLAotKwkJICAgICJnc3NhcGkt a2V5ZXgiLCBzc2gtPmtleC0+c2Vzc2lvbl9pZCk7Ci0rCWVsc2UKLSsjZW5kaWYKLSAJc3NoX2dz c2FwaV9idWlsZG1pYyhiLCBhdXRoY3R4dC0+c2VydmVyX3VzZXIsIGF1dGhjdHh0LT5zZXJ2aWNl LAotIAkgICAgImdzc2FwaS1rZXlleCIsIHNzaC0+a2V4LT5zZXNzaW9uX2lkKTsKLSAKLUBAIC0x MTcwLDcgKzExOTYsOSBAQAotIAl9Ci0gCi0gCWlmICgociA9IHNzaHBrdF9zdGFydChzc2gsIFNT SDJfTVNHX1VTRVJBVVRIX1JFUVVFU1QpKSAhPSAwIHx8Ci0tCSAgICAociA9IHNzaHBrdF9wdXRf Y3N0cmluZyhzc2gsIGF1dGhjdHh0LT5zZXJ2ZXJfdXNlcikpICE9IDAgfHwKLSsJICAgIChyID0g c3NocGt0X3B1dF9jc3RyaW5nKHNzaCwKLSsJCShvcHRpb25zLmltcGxpY2l0ICYmIGlzX2dzaV9v aWQoZ3NzX2tleF9jb250ZXh0LT5vaWQpKSA/Ci0rCQkiIiA6IGF1dGhjdHh0LT5zZXJ2ZXJfdXNl cikpICE9IDAgfHwKLSAJICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwgYXV0aGN0eHQt PnNlcnZpY2UpKSAhPSAwIHx8Ci0gCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGF1 dGhjdHh0LT5tZXRob2QtPm5hbWUpKSAhPSAwIHx8Ci0gCSAgICAociA9IHNzaHBrdF9wdXRfc3Ry aW5nKHNzaCwgbWljLnZhbHVlLCBtaWMubGVuZ3RoKSkgIT0gMCB8fAotZGlmZiAtTnVyIG9wZW5z c2gtMTAuMnAxLm9yaWcvc3NoZC44IG9wZW5zc2gtMTAuMnAxL3NzaGQuOAotLS0tIG9wZW5zc2gt MTAuMnAxLm9yaWcvc3NoZC44CTIwMjYtMDMtMTggMDk6Mzg6MTcuMzE2MDcwODI4ICswMTAwCi0r Kysgb3BlbnNzaC0xMC4ycDEvc3NoZC44CTIwMjYtMDMtMTggMTA6MTk6MzkuNDI1NTI3NTIwICsw MTAwCi1AQCAtODQwLDYgKzg0MCwyOSBAQAotICMgQSBDQSBrZXksIGFjY2VwdGVkIGZvciBhbnkg aG9zdCBpbiAqLm15ZG9tYWluLmNvbSBvciAqLm15ZG9tYWluLm9yZwotIEBjZXJ0LWF1dGhvcml0 eSAqLm15ZG9tYWluLm9yZywqLm15ZG9tYWluLmNvbSBzc2gtcnNhIEFBQUFCNVcuLi4KLSAuRWQK LSsuU2ggRU5WSVJPTk1FTlQKLSsuTm0KLSt3aWxsIG5vcm1hbGx5IHNldCB0aGUgZm9sbG93aW5n IGVudmlyb25tZW50IHZhcmlhYmxlczoKLSsuQmwgLXRhZyAtd2lkdGggIlNTSF9PUklHSU5BTF9D T01NQU5EIgotKy5JdCBFdiBHUklETUFQCi0rQXBwbGllcyB0byBHU0kgYXV0aGVudGljYXRpb24v YXV0aG9yaXphdGlvbi4gU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUKLStncmlkbWFwZmls ZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGdyaWRtYXAgZmlsZSBpcyBhc3N1bWVkIHRvIGJlIGF2 YWlsYWJsZSBhdAotKy9ldGMvZ3JpZC1zZWN1cml0eS9ncmlkLW1hcGZpbGUgZm9yIHNlcnZpY2Vz IHJ1bm5pbmcgYXMgcm9vdCBhbmQgYXQKLStIT01FLy5ncmlkbWFwIGZvciBzZXJ2aWNlcyBydW5u aW5nIGFzIG5vbi1yb290IHdoZXJlIEhPTUUgaXMgdGhlIGhvbWUgZGlyZWN0b3J5Ci0rb2YgdGhl IGVmZmVjdGl2ZSB1c2VyIGZyb20gdGhlIHBhc3N3b3JkIGZpbGUgZW50cnkuCi0rLkl0IEV2IFg1 MDlfQ0VSVF9ESVIKLStVc2VkIGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNpZmllcyBhIG5v bi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCi0rQ0EgY2VydGlmaWNhdGVzIGRpcmVjdG9yeS4K LSsuSXQgRXYgWDUwOV9VU0VSX0NFUlQKLStVc2VkIGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNw ZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCi0rY2VydGlmaWNhdGUgdG8g YmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhlIGNsaWVudC4KLSsuSXQgRXYgWDUwOV9V U0VSX0tFWQotK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNhdGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0 YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKLStwcml2YXRlIGtleSB0byBiZSB1c2VkIGZvciBhdXRo ZW50aWNhdGlvbiB0byB0aGUgY2xpZW50LgotKy5JdCBFdiBYNTA5X1VTRVJfUFJPWFkKLStVc2Vk IGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlv biBmb3IgdGhlCi0rcHJveHkgY3JlZGVudGlhbCB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlv biB0byB0aGUgY2xpZW50LgotKy5FbAotIC5TaCBGSUxFUwotIC5CbCAtdGFnIC13aWR0aCBEcyAt Y29tcGFjdAotIC5JdCBQYSB+Ly5odXNobG9naW4KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5v cmlnL3NzaGRfY29uZmlnIG9wZW5zc2gtMTAuMnAxL3NzaGRfY29uZmlnCi0tLS0gb3BlbnNzaC0x MC4ycDEub3JpZy9zc2hkX2NvbmZpZwkyMDI2LTAzLTE4IDA5OjM4OjE3LjM3NjE3MTIzOSArMDEw MAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaGRfY29uZmlnCTIwMjYtMDMtMTggMTA6MTk6MzkuNDI1 ODA2OTM5ICswMTAwCi1AQCAtNzgsMTAgKzc4LDExIEBACi0gI0tlcmJlcm9zVXNlS3VzZXJvayB5 ZXMKLSAKLSAjIEdTU0FQSSBvcHRpb25zCi0tI0dTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCi0rI0dT U0FQSUF1dGhlbnRpY2F0aW9uIHllcwotKyNHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzIHllcwot ICNHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgeWVzCi0gI0dTU0FQSVN0cmljdEFjY2VwdG9yQ2hl Y2sgeWVzCi0tI0dTU0FQSUtleUV4Y2hhbmdlIG5vCi0rI0dTU0FQSUtleUV4Y2hhbmdlIHllcwot ICNHU1NBUElFbmFibGVrNXVzZXJzIG5vCi0gCi0gIyBTZXQgdGhpcyB0byAneWVzJyB0byBlbmFi bGUgUEFNIGF1dGhlbnRpY2F0aW9uLCBhY2NvdW50IHByb2Nlc3NpbmcsCi1AQCAtOTcsNiArOTgs MTAgQEAKLSAjIHByb2JsZW1zLgotICNVc2VQQU0gbm8KLSAKLSsjIFNldCB0byAneWVzJyB0byBh bGxvdyB0aGUgUEFNIHN0YWNrIHRvIGNoYW5nZSB0aGUgdXNlciBuYW1lIGR1cmluZwotKyMgY2Fs bHMgdG8gYXV0aGVudGljYXRpb24KLSsjUGVybWl0UEFNVXNlckNoYW5nZSBubwotKwotICNBbGxv d0FnZW50Rm9yd2FyZGluZyB5ZXMKLSAjQWxsb3dUY3BGb3J3YXJkaW5nIHllcwotICNHYXRld2F5 UG9ydHMgbm8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGRfY29uZmlnLjUgb3Bl bnNzaC0xMC4ycDEvc3NoZF9jb25maWcuNQotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3NoZF9j b25maWcuNQkyMDI2LTAzLTE4IDA5OjM4OjE3Ljc2NjgxMTM1MyArMDEwMAotKysrIG9wZW5zc2gt MTAuMnAxL3NzaGRfY29uZmlnLjUJMjAyNi0wMy0xOCAxNDoyMToyMy4zNjA1NjU2NDEgKzAxMDAK LUBAIC03MjQsMTUgKzcyNCwzMCBAQAotIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gc2VsZWN0IHRo ZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBmb3J3YXJkaW5nIGlzIGJvdW5kLgotIFRoZSBkZWZhdWx0 IGlzCi0gLkNtIG5vIC4KLSsuSXQgQ20gR1NJQWxsb3dMaW1pdGVkUHJveHkKLStTcGVjaWZpZXMg d2hldGhlciB0byBhY2NlcHQgbGltaXRlZCBwcm94eSBjcmVkZW50aWFscyBmb3IgYXV0aGVudGlj YXRpb24uCi0rVGhlIGRlZmF1bHQgaXMKLSsuQ20gbm8gLgotIC5JdCBDbSBHU1NBUElBdXRoZW50 aWNhdGlvbgotIFNwZWNpZmllcyB3aGV0aGVyIHVzZXIgYXV0aGVudGljYXRpb24gYmFzZWQgb24g R1NTQVBJIGlzIGFsbG93ZWQuCi0gVGhlIGRlZmF1bHQgaXMKLS0uQ20gbm8gLgotKy5DbSB5ZXMg LgotIC5JdCBDbSBHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMKLSBTcGVjaWZpZXMgd2hldGhlciB0 byBhdXRvbWF0aWNhbGx5IGRlc3Ryb3kgdGhlIHVzZXIncyBjcmVkZW50aWFscyBjYWNoZQotIG9u IGxvZ291dC4KLSBUaGUgZGVmYXVsdCBpcwotIC5DbSB5ZXMgLgotKy5JdCBDbSBHU1NBUElDcmVk ZW50aWFsc1BhdGgKLStJZiBzcGVjaWZpZWQsIHRoZSBkZWxlZ2F0ZWQgR1NTQVBJIGNyZWRlbnRp YWwgaXMgc3RvcmVkIGluIHRoZQotK2dpdmVuIHBhdGgsIG92ZXJ3cml0aW5nIGFueSBleGlzdGlu ZyBjcmVkZW50aWFscy4KLStQYXRocyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggc3ludGF4IHNpbWls YXIgdG8gdGhlIEF1dGhvcml6ZWRLZXlzRmlsZQotK29wdGlvbiAoaS5lLiwgYWNjZXB0aW5nICVo IGFuZCAldSB0b2tlbnMpLgotK1doZW4gdXNpbmcgdGhpcyBvcHRpb24sCi0rc2V0dGluZyAnR3Nz YXBpQ2xlYW51cENyZWRlbnRpYWxzIG5vJyBpcyByZWNvbW1lbmRlZCwKLStzbyBsb2dnaW5nIG91 dCBvZiBvbmUgc2Vzc2lvbgotK2RvZXNuJ3QgcmVtb3ZlIHRoZSBjcmVkZW50aWFscyBpbiB1c2Ug YnkgYW5vdGhlciBzZXNzaW9uIG9mCi0rdGhlIHNhbWUgdXNlci4KLStDdXJyZW50bHkgb25seSBp bXBsZW1lbnRlZCBmb3IgdGhlIEdTSSBtZWNoYW5pc20uCi0gLkl0IENtIEdTU0FQSURlbGVnYXRl Q3JlZGVudGlhbHMKLSBBY2NlcHQgZGVsZWdhdGVkIGNyZWRlbnRpYWxzIG9uIHRoZSBzZXJ2ZXIg c2lkZS4gIFRoZSBkZWZhdWx0IGlzCi0gLkNNIHllcyAuCi1AQCAtNzQ2LDcgKzc2MSw3IEBACi0g U3BlY2lmaWVzIHdoZXRoZXIga2V5IGV4Y2hhbmdlIGJhc2VkIG9uIEdTU0FQSSBpcyBhbGxvd2Vk LiBHU1NBUEkga2V5IGV4Y2hhbmdlCi0gZG9lc24ndCByZWx5IG9uIHNzaCBrZXlzIHRvIHZlcmlm eSBob3N0IGlkZW50aXR5LgotIFRoZSBkZWZhdWx0IGlzCi0tLkNtIG5vIC4KLSsuQ20geWVzIC4K LSAuSXQgQ20gR1NTQVBJU3RyaWN0QWNjZXB0b3JDaGVjawotIERldGVybWluZXMgd2hldGhlciB0 byBiZSBzdHJpY3QgYWJvdXQgdGhlIGlkZW50aXR5IG9mIHRoZSBHU1NBUEkgYWNjZXB0b3IKLSBh IGNsaWVudCBhdXRoZW50aWNhdGVzIGFnYWluc3QuCi1AQCAtMjEwMiw2ICsyMTE3LDEyIEBACi0g YXMgYSBub24tcm9vdCB1c2VyLgotIFRoZSBkZWZhdWx0IGlzCi0gLkNtIG5vIC4KLSsuSXQgQ20g UGVybWl0UEFNVXNlckNoYW5nZQotK0lmIHNldCB0bwotKy5DbSB5ZXMKLSt0aGlzIHdpbGwgZW5h YmxlIFBBTSBhdXRoZW50aWNhdGlvbiB0byBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIHVzZXIgYmVp bmcKLSthdXRoZW50aWNhdGVkLiAgVGhlIGRlZmF1bHQgaXMKLSsuQ20gbm8gLgotIC5JdCBDbSBW ZXJzaW9uQWRkZW5kdW0KLSBPcHRpb25hbGx5IHNwZWNpZmllcyBhZGRpdGlvbmFsIHRleHQgdG8g YXBwZW5kIHRvIHRoZSBTU0ggcHJvdG9jb2wgYmFubmVyCi0gc2VudCBieSB0aGUgc2VydmVyIHVw b24gY29ubmVjdGlvbi4KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGRfY29uZmln X3JlZGhhdCBvcGVuc3NoLTEwLjJwMS9zc2hkX2NvbmZpZ19yZWRoYXQKLS0tLSBvcGVuc3NoLTEw LjJwMS5vcmlnL3NzaGRfY29uZmlnX3JlZGhhdAkyMDI2LTAzLTE4IDA5OjM4OjE3LjgxNjUwMDAy NSArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaGRfY29uZmlnX3JlZGhhdAkyMDI2LTAzLTE4 IDEwOjE5OjM5LjQyNjI4MTk5OSArMDEwMAotQEAgLTIsOSArMiw2IEBACi0gCi0gS2JkSW50ZXJh Y3RpdmVBdXRoZW50aWNhdGlvbiBubwotIAotLUdTU0FQSUF1dGhlbnRpY2F0aW9uIHllcwotLUdT U0FQSUNsZWFudXBDcmVkZW50aWFscyBubwotLQotIFVzZVBBTSB5ZXMKLSAKLSBYMTFGb3J3YXJk aW5nIHllcwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3NoZC1zZXNzaW9uLmMgb3Bl bnNzaC0xMC4ycDEvc3NoZC1zZXNzaW9uLmMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGQt c2Vzc2lvbi5jCTIwMjYtMDMtMTggMDk6Mzg6MTcuNjU0NzU5ODkyICswMTAwCi0rKysgb3BlbnNz aC0xMC4ycDEvc3NoZC1zZXNzaW9uLmMJMjAyNi0wMy0xOCAxMDoxOTozOS40MjY2OTY3NzggKzAx MDAKLUBAIC0xNDIwLDcgKzE0MjAsNyBAQAotICNlbmRpZgotIAotICNpZmRlZiBHU1NBUEkKLS0J aWYgKG9wdGlvbnMuZ3NzX2F1dGhlbnRpY2F0aW9uKSB7Ci0rCWlmIChvcHRpb25zLmdzc19hdXRo ZW50aWNhdGlvbiAmJiBvcHRpb25zLmdzc19kZWxlZ19jcmVkcykgewotIAkJdGVtcG9yYXJpbHlf dXNlX3VpZChhdXRoY3R4dC0+cHcpOwotIAkJYXV0aGN0eHQtPmtyYjVfc2V0X2VudiA9IHNzaF9n c3NhcGlfc3RvcmVjcmVkcygpOwotIAkJcmVzdG9yZV91aWQoKTsKLWRpZmYgLU51ciBvcGVuc3No LTEwLjJwMS5vcmlnL3NzaC1nc3MuaCBvcGVuc3NoLTEwLjJwMS9zc2gtZ3NzLmgKLS0tLSBvcGVu c3NoLTEwLjJwMS5vcmlnL3NzaC1nc3MuaAkyMDI2LTAzLTE4IDA5OjM4OjE3LjcyNDQyMTIxOSAr MDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaC1nc3MuaAkyMDI2LTAzLTE4IDEwOjE5OjM5LjQy NzAyMDI5NyArMDEwMAotQEAgLTExMCwxMiArMTEwLDE0IEBACi0gfSBzc2hfZ3NzYXBpX2NjYWNo ZTsKLSAKLSB0eXBlZGVmIHN0cnVjdCB7Ci0rCWdzc19PSURfZGVzYyBvaWQ7Ci0gCWdzc19idWZm ZXJfZGVzYyBkaXNwbGF5bmFtZTsKLSAJZ3NzX2J1ZmZlcl9kZXNjIGV4cG9ydGVkbmFtZTsKLSAJ Z3NzX2NyZWRfaWRfdCBjcmVkczsKLS0JZ3NzX25hbWVfdCBuYW1lOwotKwlnc3NfbmFtZV90IGNy ZWRfbmFtZSwgY3R4X25hbWU7Ci0gCXN0cnVjdCBzc2hfZ3NzYXBpX21lY2hfc3RydWN0ICptZWNo OwotIAlzc2hfZ3NzYXBpX2NjYWNoZSBzdG9yZTsKLSsJZ3NzX2N0eF9pZF90IGNvbnRleHQ7IC8q IG5lZWRlZCBmb3IgZ2xvYnVzX2dzc19hc3Npc3RfbWFwX2FuZF9hdXRob3JpemUoKSAqLwotIAlp bnQgdXNlZDsKLSAJaW50IHVwZGF0ZWQ7Ci0gCWNoYXIgKippbmRpY2F0b3JzOyAvKiBhdXRoIGlu ZGljYXRvcnMgKi8KLUBAIC0xMzcsNyArMTM5LDcgQEAKLSAJT01fdWludDMyCW1pbm9yOyAvKiBi b3RoICovCi0gCWdzc19jdHhfaWRfdAljb250ZXh0OyAvKiBib3RoICovCi0gCWdzc19uYW1lX3QJ bmFtZTsgLyogYm90aCAqLwotLQlnc3NfT0lECQlvaWQ7IC8qIGNsaWVudCAqLwotKwlnc3NfT0lE CQlvaWQ7IC8qIGJvdGggKi8KLSAJZ3NzX2NyZWRfaWRfdAljcmVkczsgLyogc2VydmVyICovCi0g CWdzc19uYW1lX3QJY2xpZW50OyAvKiBzZXJ2ZXIgKi8KLSAJZ3NzX2NyZWRfaWRfdAljbGllbnRf Y3JlZHM7IC8qIGJvdGggKi8KLUBAIC0xODQsNiArMTg2LDkgQEAKLSBPTV91aW50MzIgc3NoX2dz c2FwaV9jbGllbnRfaWRlbnRpdHkoR3NzY3R4dCAqLCBjb25zdCBjaGFyICopOwotIGludCBzc2hf Z3NzYXBpX2NyZWRlbnRpYWxzX3VwZGF0ZWQoR3NzY3R4dCAqKTsKLSAKLStpbnQgc3NoX2dzc2Fw aV9sb2NhbG5hbWUoY2hhciAqKm5hbWUpOwotK3ZvaWQgc3NoX2dzc2FwaV9yZWtleV9jcmVkcygp OwotKwotIC8qIEluIHRoZSBzZXJ2ZXIgKi8KLSB0eXBlZGVmIGludCBzc2hfZ3NzYXBpX2NoZWNr X2ZuKEdzc2N0eHQgKiosIGdzc19PSUQsIGNvbnN0IGNoYXIgKiwKLSAgICAgY29uc3QgY2hhciAq KTsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3ZlcnNpb24uaCBvcGVuc3NoLTEwLjJw MS92ZXJzaW9uLmgKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL3ZlcnNpb24uaAkyMDI1LTEwLTEw IDA0OjM4OjMxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2gtMTAuMnAxL3ZlcnNpb24uaAky MDI2LTAzLTE4IDEwOjQ1OjA0LjQ1MTczNjg1OCArMDEwMAotQEAgLTIsNSArMiwxOSBAQAotIAot ICNkZWZpbmUgU1NIX1ZFUlNJT04JIk9wZW5TU0hfMTAuMiIKLSAKLSsjaWZkZWYgR1NJCi0rI2Rl ZmluZSBHU0lfVkVSU0lPTgkiIEdTSSIKLSsjZWxzZQotKyNkZWZpbmUgR1NJX1ZFUlNJT04JIiIK LSsjZW5kaWYKLSsKLSsjaWZkZWYgS1JCNQotKyNkZWZpbmUgS1JCNV9WRVJTSU9OCSIgS1JCNSIK LSsjZWxzZQotKyNkZWZpbmUgS1JCNV9WRVJTSU9OCSIiCi0rI2VuZGlmCi0rCi0gI2RlZmluZSBT U0hfUE9SVEFCTEUJInAxIgotLSNkZWZpbmUgU1NIX1JFTEVBU0UJU1NIX1ZFUlNJT04gU1NIX1BP UlRBQkxFCi0rI2RlZmluZSBHU0lfUE9SVEFCTEUJImMtR1NJIgotKyNkZWZpbmUgU1NIX1JFTEVB U0UJU1NIX1ZFUlNJT04gU1NIX1BPUlRBQkxFIEdTSV9QT1JUQUJMRSBcCi0rCQkJR1NJX1ZFUlNJ T04gS1JCNV9WRVJTSU9OCgpkaWZmIC0tZ2l0IGEvMjAwMC1vcGVuc3NoLTEwLjNwMS1nc2lzc2gu cGF0Y2ggYi8yMDAwLW9wZW5zc2gtMTAuM3AxLWdzaXNzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi44MjE0YzE0Ci0tLSAvZGV2L251bGwKKysrIGIvMjAwMC1vcGVu c3NoLTEwLjNwMS1nc2lzc2gucGF0Y2gKQEAgLTAsMCArMSwyNDM2IEBACitkaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9hdXRoMi5jIG9wZW5zc2gtMTAuM3AxL2F1dGgyLmMKKy0tLSBvcGVu c3NoLTEwLjNwMS5vcmlnL2F1dGgyLmMJMjAyNi0wNy0wMSAwOTozODowMC42MjE4NjYwMjkgKzAy MDAKKysrKyBvcGVuc3NoLTEwLjNwMS9hdXRoMi5jCTIwMjYtMDctMDEgMTA6NTQ6NTYuNDc2ODAy NzY2ICswMjAwCitAQCAtMjg2LDcgKzI4NiwyOCBAQAorIAkgICAgKHIgPSBzc2hwa3RfZ2V0X2Nz dHJpbmcoc3NoLCAmc2VydmljZSwgTlVMTCkpICE9IDAgfHwKKyAJICAgIChyID0gc3NocGt0X2dl dF9jc3RyaW5nKHNzaCwgJm1ldGhvZCwgTlVMTCkpICE9IDApCisgCQlnb3RvIG91dDsKKy0JZGVi dWcoInVzZXJhdXRoLXJlcXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2QgJXMiLCB1 c2VyLCBzZXJ2aWNlLCBtZXRob2QpOworKworKyNpZmRlZiBHU1NBUEkKKysJaWYgKHVzZXJbMF0g PT0gJ1wwJykgeworKwkJZGVidWcoInJlY2VpdmVkIGVtcHR5IHVzZXJuYW1lIGZvciAlcyIsIG1l dGhvZCk7CisrCQlpZiAoc3RyY21wKG1ldGhvZCwgImdzc2FwaS1rZXlleCIpID09IDApIHsKKysJ CQljaGFyICpsbmFtZSA9IE5VTEw7CisrCQkJbW1fc3NoX2dzc2FwaV9sb2NhbG5hbWUoJmxuYW1l KTsKKysJCQlpZiAobG5hbWUgJiYgbG5hbWVbMF0gIT0gJ1wwJykgeworKwkJCQlmcmVlKHVzZXIp OworKwkJCQl1c2VyID0gbG5hbWU7CisrCQkJCWRlYnVnKCJzZXQgdXNlcm5hbWUgdG8gJXMgZnJv bSBnc3NhcGkgY29udGV4dCIsIHVzZXIpOworKwkJCX0gZWxzZSB7CisrCQkJCWRlYnVnKCJmYWls ZWQgdG8gc2V0IHVzZXJuYW1lIGZyb20gZ3NzYXBpIGNvbnRleHQiKTsKKysJCQkJc3NoX3BhY2tl dF9zZW5kX2RlYnVnKHNzaCwKKysJCQkJICAgICJmYWlsZWQgdG8gc2V0IHVzZXJuYW1lIGZyb20g Z3NzYXBpIGNvbnRleHQiKTsKKysJCQl9CisrCQl9CisrCX0KKysjZW5kaWYKKysKKysJZGVidWco InVzZXJhdXRoLXJlcXVlc3QgZm9yIHVzZXIgJXMgc2VydmljZSAlcyBtZXRob2QgJXMiLAorKwkg ICAgdXNlclswXSA/IHVzZXIgOiAiPGltcGxpY2l0PiIsIHNlcnZpY2UsIG1ldGhvZCk7CisgCWRl YnVnKCJhdHRlbXB0ICVkIGZhaWx1cmVzICVkIiwgYXV0aGN0eHQtPmF0dGVtcHQsIGF1dGhjdHh0 LT5mYWlsdXJlcyk7CisgCisgI2lmZGVmIFdJVEhfU0VMSU5VWAorQEAgLTI5OSwxNiArMzIwLDM4 IEBACisgCisgCWlmIChhdXRoY3R4dC0+YXR0ZW1wdCA+PSAxMDI0KQorIAkJYXV0aF9tYXh0cmll c19leGNlZWRlZChzc2gpOworLQlpZiAoYXV0aGN0eHQtPmF0dGVtcHQrKyA9PSAwKSB7CistCQkv KiBzZXR1cCBhdXRoIGNvbnRleHQgKi8KKy0JCWF1dGhjdHh0LT5wdyA9IG1tX2dldHB3bmFtYWxs b3coc3NoLCB1c2VyKTsKKysJLyogSWYgZmlyc3QgdGltZSBvciB1c2VybmFtZSBjaGFuZ2VkIG9y IGVtcHR5IHVzZXJuYW1lLAorKwkgICBzZXR1cC9yZXNldCBhdXRoZW50aWNhdGlvbiBjb250ZXh0 LiAqLworKwlpZiAoKGF1dGhjdHh0LT5hdHRlbXB0KysgPT0gMCkgfHwKKysJICAgIChzdHJjbXAo dXNlciwgYXV0aGN0eHQtPnVzZXIpICE9IDApIHx8CisrCSAgICAoc3RyY21wKHVzZXIsICIiKSA9 PSAwKSkgeworKwkJaWYgKGF1dGhjdHh0LT51c2VyKSB7CisrCQkJZnJlZShhdXRoY3R4dC0+dXNl cik7CisrCQkJYXV0aGN0eHQtPnVzZXIgPSBOVUxMOworKwkJfQorKwkJYXV0aGN0eHQtPnZhbGlk ID0gMDsKKyAJCWF1dGhjdHh0LT51c2VyID0geHN0cmR1cCh1c2VyKTsKKyAJCWF1dGhjdHh0LT5z ZXJ2aWNlID0geHN0cmR1cChzZXJ2aWNlKTsKKyAJCWF1dGhjdHh0LT5zdHlsZSA9IHN0eWxlID8g eHN0cmR1cChzdHlsZSkgOiBOVUxMOworICNpZmRlZiBXSVRIX1NFTElOVVgKKyAJCWF1dGhjdHh0 LT5yb2xlID0gcm9sZSA/IHhzdHJkdXAocm9sZSkgOiBOVUxMOworICNlbmRpZgorLQkJaWYgKGF1 dGhjdHh0LT5wdyAmJiBzdHJjbXAoc2VydmljZSwgInNzaC1jb25uZWN0aW9uIik9PTApIHsKKysJ CWlmIChzdHJjbXAoc2VydmljZSwgInNzaC1jb25uZWN0aW9uIikgIT0gMCkgeworKwkJCXNzaF9w YWNrZXRfZGlzY29ubmVjdChzc2gsICJVbnN1cHBvcnRlZCBzZXJ2aWNlICVzIiwKKysJCQkgICAg c2VydmljZSk7CisrCQl9CisrI2lmZGVmIEdTU0FQSQorKwkJLyogSWYgd2UncmUgZ29pbmcgdG8g c2V0IHRoZSB1c2VybmFtZSBiYXNlZCBvbiB0aGUKKysJCSAgIEdTU0FQSSBjb250ZXh0IGxhdGVy LCB0aGVuIHdhaXQgdW50aWwgdGhlbiB0bworKwkJICAgdmVyaWZ5IGl0LiBKdXN0IHB1dCBpbiBw bGFjZWhvbGRlcnMgZm9yIG5vdy4gKi8KKysJCWlmICgoc3RyY21wKHVzZXIsICIiKSA9PSAwKSAm JgorKwkJICAgICgoc3RyY21wKG1ldGhvZCwgImdzc2FwaSIpID09IDApIHx8CisrCQkgICAgIChz dHJjbXAobWV0aG9kLCAiZ3NzYXBpLXdpdGgtbWljIikgPT0gMCkpKSB7CisrCQkJYXV0aGN0eHQt PnB3ID0gZmFrZXB3KCk7CisrCQl9IGVsc2UgeworKyNlbmRpZgorKwkJYXV0aGN0eHQtPnB3ID0g bW1fZ2V0cHduYW1hbGxvdyhzc2gsIHVzZXIpOworKwkJaWYgKGF1dGhjdHh0LT5wdykgeworIAkJ CWF1dGhjdHh0LT52YWxpZCA9IDE7CisgCQkJZGVidWcyX2YoInNldHRpbmcgdXAgYXV0aGN0eHQg Zm9yICVzIiwgdXNlcik7CisgCQl9IGVsc2UgeworQEAgLTMxNiw2ICszNTksOSBAQAorIAkJCS8q IEludmFsaWQgdXNlciwgZmFrZSBwYXNzd29yZCBpbmZvcm1hdGlvbiAqLworIAkJCWF1dGhjdHh0 LT5wdyA9IGZha2VwdygpOworIAkJfQorKyNpZmRlZiBHU1NBUEkKKysJCX0gLyogZW5kaWYgZm9y IHNldHRpbmcgdXNlcm5hbWUgYmFzZWQgb24gR1NTQVBJIGNvbnRleHQgKi8KKysjZW5kaWYKKyAj aWZkZWYgVVNFX1BBTQorIAkJaWYgKG9wdGlvbnMudXNlX3BhbSkKKyAJCQltbV9zdGFydF9wYW0o c3NoKTsKK0BAIC0zMjMsNiArMzY5LDcgQEAKKyAJCXNzaF9wYWNrZXRfc2V0X2xvZ19wcmVhbWJs ZShzc2gsICIlc3VzZXIgJXMiLAorIAkJICAgIGF1dGhjdHh0LT52YWxpZCA/ICJhdXRoZW50aWNh dGluZyAiIDogImludmFsaWQgIiwgdXNlcik7CisgCQlzZXRwcm9jdGl0bGUoIiVzIFtuZXRdIiwg YXV0aGN0eHQtPnZhbGlkID8gdXNlciA6ICJ1bmtub3duIik7CisrCQlpZiAoYXV0aGN0eHQtPmF0 dGVtcHQgPT0gMSkgeworIAkJbW1faW5mb3JtX2F1dGhzZXJ2KHNlcnZpY2UsIHN0eWxlKTsKKyAj aWZkZWYgV0lUSF9TRUxJTlVYCisgICAgICAgICAgCW1tX2luZm9ybV9hdXRocm9sZShyb2xlKTsK K0BAIC0zMzMsOSArMzgwLDEwIEBACisgCQlpZiAoYXV0aDJfc2V0dXBfbWV0aG9kc19saXN0cyhh dXRoY3R4dCkgIT0gMCkKKyAJCQlzc2hfcGFja2V0X2Rpc2Nvbm5lY3Qoc3NoLAorIAkJCSAgICAi bm8gYXV0aGVudGljYXRpb24gbWV0aG9kcyBlbmFibGVkIik7CistCX0gZWxzZSBpZiAoc3RyY21w KHVzZXIsIGF1dGhjdHh0LT51c2VyKSAhPSAwIHx8CistCSAgICBzdHJjbXAoc2VydmljZSwgYXV0 aGN0eHQtPnNlcnZpY2UpICE9IDApIHsKKy0JCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsICJD aGFuZ2Ugb2YgdXNlcm5hbWUgb3Igc2VydmljZSAiCisrCQl9CisrCX0KKysJaWYgKHN0cmNtcChz ZXJ2aWNlLCBhdXRoY3R4dC0+c2VydmljZSkgIT0gMCkgeworKwkJc3NoX3BhY2tldF9kaXNjb25u ZWN0KHNzaCwgIkNoYW5nZSBvZiBzZXJ2aWNlICIKKyAJCSAgICAibm90IGFsbG93ZWQ6ICglcywl cykgLT4gKCVzLCVzKSIsCisgCQkgICAgYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0LT5zZXJ2aWNl LCB1c2VyLCBzZXJ2aWNlKTsKKyAJfQorZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvYXV0 aDItZ3NzLmMgb3BlbnNzaC0xMC4zcDEvYXV0aDItZ3NzLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL2F1dGgyLWdzcy5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuMzE4NDgxMDAyICswMjAwCisrKysg b3BlbnNzaC0xMC4zcDEvYXV0aDItZ3NzLmMJMjAyNi0wNy0wMSAxMDo1Njo1MS40Nzk3MDg0NTMg KzAyMDAKK0BAIC01NCw2ICs1NCw3IEBACisgZXh0ZXJuIHN0cnVjdCBhdXRobWV0aG9kX2NmZyBt ZXRob2RjZmdfZ3Nza2V5ZXg7CisgZXh0ZXJuIHN0cnVjdCBhdXRobWV0aG9kX2NmZyBtZXRob2Rj ZmdfZ3NzYXBpOworIAorK3N0YXRpYyB2b2lkIHNzaF9nc3NhcGlfdXNlcmF1dGhfZXJyb3IoR3Nz Y3R4dCAqY3R4dCwgc3RydWN0IHNzaCAqc3NoKTsKKyBzdGF0aWMgaW50IGlucHV0X2dzc2FwaV90 b2tlbihpbnQgdHlwZSwgdWludDMyX3QgcGxlbiwgc3RydWN0IHNzaCAqc3NoKTsKKyBzdGF0aWMg aW50IGlucHV0X2dzc2FwaV9taWMoaW50IHR5cGUsIHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2gg KnNzaCk7Cisgc3RhdGljIGludCBpbnB1dF9nc3NhcGlfZXhjaGFuZ2VfY29tcGxldGUoaW50IHR5 cGUsIHVpbnQzMl90IHBsZW4sIHN0cnVjdCBzc2ggKnNzaCk7CitAQCAtNjcsOCArNjgsOCBAQAor IHsKKyAJQXV0aGN0eHQgKmF1dGhjdHh0ID0gc3NoLT5hdXRoY3R4dDsKKyAJaW50IHIsIGF1dGhl bnRpY2F0ZWQgPSAwOworLQlzdHJ1Y3Qgc3NoYnVmICpiID0gTlVMTDsKKy0JZ3NzX2J1ZmZlcl9k ZXNjIG1pYywgZ3NzYnVmOworKwlzdHJ1Y3Qgc3NoYnVmICpiID0gTlVMTCwgKmIyID0gTlVMTDsK KysJZ3NzX2J1ZmZlcl9kZXNjIG1pYywgZ3NzYnVmLCBnc3NidWYyOworIAl1X2NoYXIgKnA7Cisg CXNpemVfdCBsZW47CisgCitAQCAtNzksNiArODAsOSBAQAorIAlpZiAoKGIgPSBzc2hidWZfbmV3 KCkpID09IE5VTEwpCisgCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOworIAorKwlpZiAo KGIyID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQorKwkJZmF0YWxfZigic3NoYnVmX25ldyBmYWls ZWQiKTsKKysKKyAJbWljLnZhbHVlID0gcDsKKyAJbWljLmxlbmd0aCA9IGxlbjsKKyAKK0BAIC04 OSwxMyArOTMsMjggQEAKKyAJCWZhdGFsX2YoInNzaGJ1Zl9tdXRhYmxlX3B0ciBmYWlsZWQiKTsK KyAJZ3NzYnVmLmxlbmd0aCA9IHNzaGJ1Zl9sZW4oYik7CisgCisrCS8qIGNsaWVudCBtYXkgaGF2 ZSB1c2VkIGVtcHR5IHVzZXJuYW1lIHRvIGRldGVybWluZSB0YXJnZXQKKysJICAgbmFtZSBmcm9t IEdTU0FQSSBjb250ZXh0ICovCisrCXNzaF9nc3NhcGlfYnVpbGRtaWMoYjIsICIiLCBhdXRoY3R4 dC0+c2VydmljZSwgImdzc2FwaS1rZXlleCIsCisrCSAgICBzc2gtPmtleC0+c2Vzc2lvbl9pZCk7 CisrCisrCWlmICgoZ3NzYnVmMi52YWx1ZSA9IHNzaGJ1Zl9tdXRhYmxlX3B0cihiMikpID09IE5V TEwpCisrCQlmYXRhbF9mKCJzc2hidWZfbXV0YWJsZV9wdHIgZmFpbGVkIik7CisrCWdzc2J1ZjIu bGVuZ3RoID0gc3NoYnVmX2xlbihiMik7CisrCisgCS8qIGdzc19rZXhfY29udGV4dCBpcyBOVUxM IHdpdGggcHJpdnNlcCwgc28gd2UgY2FuJ3QgY2hlY2sgaXQgaGVyZSAqLworIAlpZiAoIUdTU19F UlJPUihtbV9zc2hfZ3NzYXBpX2NoZWNrbWljKGdzc19rZXhfY29udGV4dCwKKy0JICAgICZnc3Ni dWYsICZtaWMpKSkKKy0JCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRo Y3R4dC0+dXNlciwKKy0JCSAgICBhdXRoY3R4dC0+cHcsIDEpOworKwkgICAgJmdzc2J1ZiwgJm1p YykpIHx8CisrCSAgICAhR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzX2tleF9j b250ZXh0LAorKwkgICAgJmdzc2J1ZjIsICZtaWMpKSkgeworKwkJaWYgKGF1dGhjdHh0LT52YWxp ZCAmJiBhdXRoY3R4dC0+dXNlciAmJiBhdXRoY3R4dC0+dXNlclswXSkgeworKwkJCWF1dGhlbnRp Y2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+dXNlciwKKysJCQkgICAgYXV0 aGN0eHQtPnB3LCAxKTsKKysJCX0KKysJfQorIAorIAlzc2hidWZfZnJlZShiKTsKKysJc3NoYnVm X2ZyZWUoYjIpOworIAlmcmVlKG1pYy52YWx1ZSk7CisgCisgCXJldHVybiAoYXV0aGVudGljYXRl ZCk7CitAQCAtMTU0LDcgKzE3Myw5IEBACisgCQlyZXR1cm4gKDApOworIAl9CisgCistCWlmICgh YXV0aGN0eHQtPnZhbGlkIHx8IGF1dGhjdHh0LT51c2VyID09IE5VTEwpIHsKKysJLyogYXV0aGN0 eHQtPnZhbGlkIG1heSBiZSAwIGlmIHdlIGhhdmVuJ3QgeWV0IGRldGVybWluZWQKKysJICAgdXNl cm5hbWUgZnJvbSBnc3NhcGkgY29udGV4dC4gKi8KKysJaWYgKGF1dGhjdHh0LT51c2VyID09IE5V TEwpIHsKKyAJCWRlYnVnMl9mKCJkaXNhYmxlZCBiZWNhdXNlIG9mIGludmFsaWQgdXNlciIpOwor IAkJZnJlZShkb2lkKTsKKyAJCXJldHVybiAoMCk7CitAQCAtMTkyLDcgKzIxMyw3IEBACisgCUdz c2N0eHQgKmdzc2N0eHQ7CisgCWdzc19idWZmZXJfZGVzYyBzZW5kX3RvayA9IEdTU19DX0VNUFRZ X0JVRkZFUjsKKyAJZ3NzX2J1ZmZlcl9kZXNjIHJlY3ZfdG9rOworLQlPTV91aW50MzIgbWFqX3N0 YXR1cywgbWluX3N0YXR1cywgZmxhZ3M7CisrCU9NX3VpbnQzMiBtYWpfc3RhdHVzLCBtaW5fc3Rh dHVzLCBmbGFncyA9IDA7CisgCXVfY2hhciAqcDsKKyAJc2l6ZV90IGxlbjsKKyAJaW50IHI7CitA QCAtMjEzLDYgKzIzNCw3IEBACisgCWZyZWUocCk7CisgCisgCWlmIChHU1NfRVJST1IobWFqX3N0 YXR1cykpIHsKKysJCXNzaF9nc3NhcGlfdXNlcmF1dGhfZXJyb3IoZ3NzY3R4dCwgc3NoKTsKKyAJ CWlmIChzZW5kX3Rvay5sZW5ndGggIT0gMCkgeworIAkJCWlmICgociA9IHNzaHBrdF9zdGFydChz c2gsCisgCQkJICAgIFNTSDJfTVNHX1VTRVJBVVRIX0dTU0FQSV9FUlJUT0spKSAhPSAwIHx8CitA QCAtMjg3LDYgKzMwOSwzNCBAQAorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIHZvaWQKKytn c3NhcGlfc2V0X3VzZXJuYW1lKHN0cnVjdCBzc2ggKnNzaCkKKyt7CisrCUF1dGhjdHh0ICphdXRo Y3R4dCA9IHNzaC0+YXV0aGN0eHQ7CisrCWNoYXIgKmxuYW1lID0gTlVMTDsKKysKKysJaWYgKChh dXRoY3R4dC0+dXNlciA9PSBOVUxMKSB8fCAoYXV0aGN0eHQtPnVzZXJbMF0gPT0gJ1wwJykpIHsK KysJCW1tX3NzaF9nc3NhcGlfbG9jYWxuYW1lKCZsbmFtZSk7CisrCQlpZiAobG5hbWUgJiYgbG5h bWVbMF0gIT0gJ1wwJykgeworKwkJCWlmIChhdXRoY3R4dC0+dXNlcikgZnJlZShhdXRoY3R4dC0+ dXNlcik7CisrCQkJYXV0aGN0eHQtPnVzZXIgPSBsbmFtZTsKKysJCQlkZWJ1Zygic2V0IHVzZXJu YW1lIHRvICVzIGZyb20gZ3NzYXBpIGNvbnRleHQiLCBsbmFtZSk7CisrCQkJYXV0aGN0eHQtPnB3 ID0gbW1fZ2V0cHduYW1hbGxvdyhzc2gsIGF1dGhjdHh0LT51c2VyKTsKKysJCQlpZiAoYXV0aGN0 eHQtPnB3KSB7CisrCQkJCWF1dGhjdHh0LT52YWxpZCA9IDE7CisrI2lmZGVmIFVTRV9QQU0KKysJ CQkJaWYgKG9wdGlvbnMudXNlX3BhbSkKKysJCQkJCW1tX3N0YXJ0X3BhbShzc2gpOworKyNlbmRp ZgorKwkJCX0KKysJCX0gZWxzZSB7CisrCQkJZGVidWcoImZhaWxlZCB0byBzZXQgdXNlcm5hbWUg ZnJvbSBnc3NhcGkgY29udGV4dCIpOworKwkJCXNzaF9wYWNrZXRfc2VuZF9kZWJ1Zyhzc2gsCisr CQkJICAgICJmYWlsZWQgdG8gc2V0IHVzZXJuYW1lIGZyb20gZ3NzYXBpIGNvbnRleHQiKTsKKysJ CX0KKysJfQorK30KKysKKyAvKgorICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNsaWVudCB0 aGlua3Mgd2UndmUgY29tcGxldGVkIGF1dGhlbnRpY2F0aW9uLgorICAqIEl0IHNob3VsZCBvbmx5 IGJlIGVuYWJsZWQgaW4gdGhlIGRpc3BhdGNoIGhhbmRsZXIgYnkgdGhlIGZ1bmN0aW9uIGFib3Zl LAorQEAgLTI5NywxMSArMzQ3LDEzIEBACisgaW5wdXRfZ3NzYXBpX2V4Y2hhbmdlX2NvbXBsZXRl KGludCB0eXBlLCB1aW50MzJfdCBwbGVuLCBzdHJ1Y3Qgc3NoICpzc2gpCisgeworIAlBdXRoY3R4 dCAqYXV0aGN0eHQgPSBzc2gtPmF1dGhjdHh0OworLQlpbnQgciwgYXV0aGVudGljYXRlZDsKKysJ aW50IHIsIGF1dGhlbnRpY2F0ZWQgPSAwOworIAorIAlpZiAoYXV0aGN0eHQgPT0gTlVMTCkKKyAJ CWZhdGFsKCJObyBhdXRoZW50aWNhdGlvbiBvciBHU1NBUEkgY29udGV4dCIpOworIAorKwlnc3Nh cGlfc2V0X3VzZXJuYW1lKHNzaCk7CisrCisgCS8qCisgCSAqIFdlIGRvbid0IG5lZWQgdG8gY2hl Y2sgdGhlIHN0YXR1cywgYmVjYXVzZSB3ZSdyZSBvbmx5IGVuYWJsZWQgaW4KKyAJICogdGhlIGRp c3BhdGNoZXIgb25jZSB0aGUgZXhjaGFuZ2UgaXMgY29tcGxldGUKK0BAIC0zMTAsNyArMzYyLDEx IEBACisgCWlmICgociA9IHNzaHBrdF9nZXRfZW5kKHNzaCkpICE9IDApCisgCQlmYXRhbF9mcihy LCAicGFyc2UgcGFja2V0Iik7CisgCistIAlhdXRoZW50aWNhdGVkID0gbW1fc3NoX2dzc2FwaV91 c2Vyb2soYXV0aGN0eHQtPnVzZXIsIGF1dGhjdHh0LT5wdywgMSk7CisrCS8qIHVzZXIgc2hvdWxk IGJlIHNldCBpZiB2YWxpZCBidXQgd2UgZG91YmxlLWNoZWNrIGhlcmUgKi8KKysJaWYgKGF1dGhj dHh0LT52YWxpZCAmJiBhdXRoY3R4dC0+dXNlciAmJiBhdXRoY3R4dC0+dXNlclswXSkgeworKwkJ YXV0aGVudGljYXRlZCA9IG1tX3NzaF9nc3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLAorKwkJ ICAgIGF1dGhjdHh0LT5wdywgMSk7CisrCX0KKyAKKyAJYXV0aGN0eHQtPnBvc3Rwb25lZCA9IDA7 CisgCXNzaF9kaXNwYXRjaF9zZXQoc3NoLCBTU0gyX01TR19VU0VSQVVUSF9HU1NBUElfVE9LRU4s IE5VTEwpOworQEAgLTM1NywxMCArNDEzLDE2IEBACisgCQlmYXRhbF9mKCJzc2hidWZfbXV0YWJs ZV9wdHIgZmFpbGVkIik7CisgCWdzc2J1Zi5sZW5ndGggPSBzc2hidWZfbGVuKGIpOworIAorLQlp ZiAoIUdTU19FUlJPUihtbV9zc2hfZ3NzYXBpX2NoZWNrbWljKGdzc2N0eHQsICZnc3NidWYsICZt aWMpKSkKKy0JCWF1dGhlbnRpY2F0ZWQgPSBtbV9zc2hfZ3NzYXBpX3VzZXJvayhhdXRoY3R4dC0+ dXNlciwgYXV0aGN0eHQtPnB3LCAwKTsKKy0JZWxzZQorKwlnc3NhcGlfc2V0X3VzZXJuYW1lKHNz aCk7CisrCisrCWlmICghR1NTX0VSUk9SKG1tX3NzaF9nc3NhcGlfY2hlY2ttaWMoZ3NzY3R4dCwg Jmdzc2J1ZiwgJm1pYykpKSB7CisrCQlpZiAoYXV0aGN0eHQtPnZhbGlkICYmIGF1dGhjdHh0LT51 c2VyICYmIGF1dGhjdHh0LT51c2VyWzBdKSB7CisrCQkJYXV0aGVudGljYXRlZCA9IG1tX3NzaF9n c3NhcGlfdXNlcm9rKGF1dGhjdHh0LT51c2VyLAorKwkJCSAgICBhdXRoY3R4dC0+cHcsIDApOwor KwkJfQorKwl9IGVsc2UgeworIAkJbG9naXQoIkdTU0FQSSBNSUMgY2hlY2sgZmFpbGVkIik7Cisr CX0KKyAKKyAJc3NoYnVmX2ZyZWUoYik7CisgCWlmIChtaWN1c2VyICE9IGF1dGhjdHh0LT51c2Vy KQorQEAgLTM3Niw2ICs0MzgsMjYgQEAKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyB2b2lk IHNzaF9nc3NhcGlfdXNlcmF1dGhfZXJyb3IoR3NzY3R4dCAqY3R4dCwgc3RydWN0IHNzaCAqc3No KSB7CisrCWNoYXIgKmVycnN0cjsKKysJT01fdWludDMyIG1haiwgbWluOworKwlpbnQgcjsKKysK KysJZXJyc3RyID0gbW1fc3NoX2dzc2FwaV9sYXN0X2Vycm9yKGN0eHQsICZtYWosICZtaW4pOwor KwlpZiAoZXJyc3RyKSB7CisrCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLAorKwkJICAgIFNT SDJfTVNHX1VTRVJBVVRIX0dTU0FQSV9FUlJPUikpICE9IDAgfHwKKysJCSAgICAociA9IHNzaHBr dF9wdXRfdTMyKHNzaCwgbWFqKSkgIT0gMCB8fAorKwkJICAgIChyID0gc3NocGt0X3B1dF91MzIo c3NoLCBtaW4pKSAhPSAwIHx8CisrCQkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBl cnJzdHIpKSAhPSAwIHx8CisrCQkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCAiIikp ICE9IDAgfHwKKysJCSAgICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDAgfHwKKysJCSAgICAo ciA9IHNzaF9wYWNrZXRfd3JpdGVfd2FpdChzc2gpKSAhPSAwKQorKwkJCWZhdGFsX2ZyKHIsICIi KTsKKysJCWZyZWUoZXJyc3RyKTsKKysJfQorK30KKysKKyBBdXRobWV0aG9kIG1ldGhvZF9nc3Nr ZXlleCA9IHsKKyAJJm1ldGhvZGNmZ19nc3NrZXlleCwKKyAJdXNlcmF1dGhfZ3Nza2V5ZXgsCitk aWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9hdXRoLmMgb3BlbnNzaC0xMC4zcDEvYXV0aC5j CistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9hdXRoLmMJMjAyNi0wNy0wMSAwOTozODowMC42MjE0 NDkxMzMgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9hdXRoLmMJMjAyNi0wNy0wMSAxMDozOTo0 My41Njg1NjUxMTEgKzAyMDAKK0BAIC0yOTYsNyArMjk2LDggQEAKKyAJICAgIG1ldGhvZCwKKyAJ ICAgIHN1Ym1ldGhvZCAhPSBOVUxMID8gIi8iIDogIiIsIHN1Ym1ldGhvZCA9PSBOVUxMID8gIiIg OiBzdWJtZXRob2QsCisgCSAgICBhdXRoY3R4dC0+dmFsaWQgPyAiIiA6ICJpbnZhbGlkIHVzZXIg IiwKKy0JICAgIGF1dGhjdHh0LT51c2VyLAorKwkgICAgKGF1dGhjdHh0LT51c2VyICYmIGF1dGhj dHh0LT51c2VyWzBdKSA/CisrCQlhdXRoY3R4dC0+dXNlciA6ICJ1bmtub3duIiwKKyAJICAgIHNz aF9yZW1vdGVfaXBhZGRyKHNzaCksCisgCSAgICBzc2hfcmVtb3RlX3BvcnQoc3NoKSwKKyAJICAg IGV4dHJhICE9IE5VTEwgPyAiOiAiIDogIiIsCitAQCAtNDg4LDEzICs0ODksMTggQEAKKyAjZW5k aWYKKyAKKyAJcHcgPSBnZXRwd25hbSh1c2VyKTsKKysjaWZkZWYgVVNFX1BBTQorKwlpZiAob3B0 aW9ucy51c2VfcGFtICYmIG9wdGlvbnMucGVybWl0X3BhbV91c2VyX2NoYW5nZSAmJiBwdyA9PSBO VUxMKQorKwkJcHcgPSBzc2hwYW1fZ2V0cHcodXNlcik7CisrI2VuZGlmCisgCisgI2lmIGRlZmlu ZWQoX0FJWCkgJiYgZGVmaW5lZChIQVZFX1NFVEFVVEhEQikKKyAJYWl4X3Jlc3RvcmVhdXRoZGIo KTsKKyAjZW5kaWYKKyAJaWYgKHB3ID09IE5VTEwpIHsKKyAJCWxvZ2l0KCJJbnZhbGlkIHVzZXIg JS4xMDBzIGZyb20gJS4xMDBzIHBvcnQgJWQiLAorLQkJICAgIHVzZXIsIHNzaF9yZW1vdGVfaXBh ZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gpKTsKKysJCSAgICAodXNlciAmJiB1c2VyWzBd KSA/IHVzZXIgOiAidW5rbm93biIsCisrCQkgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3No X3JlbW90ZV9wb3J0KHNzaCkpOworICNpZmRlZiBDVVNUT01fRkFJTEVEX0xPR0lOCisgCQlyZWNv cmRfZmFpbGVkX2xvZ2luKHNzaCwgdXNlciwKKyAJCSAgICBhdXRoX2dldF9jYW5vbmljYWxfaG9z dG5hbWUoc3NoLCBvcHRpb25zLnVzZV9kbnMpLCAic3NoIik7CitkaWZmIC1OdXIgb3BlbnNzaC0x MC4zcDEub3JpZy9hdXRoLmggb3BlbnNzaC0xMC4zcDEvYXV0aC5oCistLS0gb3BlbnNzaC0xMC4z cDEub3JpZy9hdXRoLmgJMjAyNi0wNy0wMSAwOTozODowMC42MjE1NTE2MTkgKzAyMDAKKysrKyBv cGVuc3NoLTEwLjNwMS9hdXRoLmgJMjAyNi0wNy0wMSAxMDozOTo0My41Njk2NDg0OTggKzAyMDAK K0BAIC04NSw2ICs4NSw4IEBACisgCWtyYjVfcHJpbmNpcGFsCSBrcmI1X3VzZXI7CisgCWNoYXIJ CSprcmI1X3RpY2tldF9maWxlOworIAljaGFyCQkqa3JiNV9jY25hbWU7CisrI2VuZGlmCisrI2lm ZGVmIEdTU0FQSQorIAlpbnQJCSBrcmI1X3NldF9lbnY7CisgI2VuZGlmCisgCXN0cnVjdCBzc2hi dWYJKmxvZ2lubXNnOworZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvYXV0aC1wYW0uYyBv cGVuc3NoLTEwLjNwMS9hdXRoLXBhbS5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9hdXRoLXBh bS5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuODU3MTIwMDYzICswMjAwCisrKysgb3BlbnNzaC0xMC4z cDEvYXV0aC1wYW0uYwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3MDM5NzMyNiArMDIwMAorQEAgLTI1 NCw2ICsyNTQsNyBAQAorIHN0YXRpYyBjb25zdCBjaGFyICpzc2hwYW1fcGFzc3dvcmQgPSBOVUxM OworIHN0YXRpYyBjaGFyICpzc2hwYW1fcmhvc3QgPSBOVUxMOworIHN0YXRpYyBjaGFyICpzc2hw YW1fbGFkZHIgPSBOVUxMOworK3N0YXRpYyBzdHJ1Y3Qgc3NoICpzc2hwYW1fc3NoID0gTlVMTDsK KyAKKyAvKiBTb21lIFBBTSBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgaW1wbGVtZW50IHRoaXMgKi8K KyAjaWZuZGVmIEhBVkVfUEFNX0dFVEVOVkxJU1QKK0BAIC0yNzcsNiArMjc4LDU2IEBACisgfQor ICNlbmRpZiAvKiBIQVZFX1BBTV9QVVRFTlYgKi8KKyAKKytzdHJ1Y3QgcGFzc3dkICoKKytzc2hw YW1fZ2V0cHcoY29uc3QgY2hhciAqdXNlcikKKyt7CisrCXN0cnVjdCBwYXNzd2QgKnB3OworKwor KwlpZiAoKHB3ID0gZ2V0cHduYW0odXNlcikpICE9IE5VTEwpCisrCQlyZXR1cm4ocHcpOworKwor KwlkZWJ1ZygiUEFNOiBmYWtpbmcgcGFzc3dkIHN0cnVjdCBmb3IgdXNlciAnJS4xMDBzJyIsIHVz ZXIpOworKwlpZiAoKHB3ID0gZ2V0cHduYW0oU1NIX1BSSVZTRVBfVVNFUikpID09IE5VTEwpCisr CQlyZXR1cm4gTlVMTDsKKysJcHctPnB3X25hbWUgPSB4c3RyZHVwKHVzZXIpOwkvKiBYWFggbGVh ayAqLworKwlwdy0+cHdfc2hlbGwgPSAiL2Jpbi90cnVlIjsKKysJcHctPnB3X2dlY29zID0gInNz aGQgZmFrZSBQQU0gdXNlciI7CisrCXJldHVybiAocHcpOworK30KKysKKyt2b2lkCisrc3NocGFt X2NoZWNrX3VzZXJjaGFuZ2VkKHZvaWQpCisreworKwlpbnQgc3NocGFtX2VycjsKKysJc3RydWN0 IHBhc3N3ZCAqcHc7CisrCWNvbnN0IGNoYXIgKnVzZXI7CisrCisrCWRlYnVnKCJzc2hwYW1fY2hl Y2tfdXNlcmNoYW5nZWQiKTsKKysJc3NocGFtX2VyciA9IHBhbV9nZXRfaXRlbShzc2hwYW1faGFu ZGxlLCBQQU1fVVNFUiwKKysJCQkJICAoc3NocGFtX2NvbnN0IHZvaWQgKiopJnVzZXIpOworKwlp ZiAoc3NocGFtX2VyciAhPSBQQU1fU1VDQ0VTUykKKysJCWZhdGFsKCJQQU06IGNvdWxkIG5vdCBn ZXQgUEFNX1VTRVI6ICVzIiwKKysJCSAgICBwYW1fc3RyZXJyb3Ioc3NocGFtX2hhbmRsZSwgc3No cGFtX2VycikpOworKwlkZWJ1Zygic3NocGFtX2NoZWNrX3VzZXJjaGFuZ2VkOiB1c2VyIHdhcyAn JS4xMDBzJyIsCisrCSAgICBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKTsKKysJaWYgKHN0 cmNtcCh1c2VyLCBzc2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lKSAhPSAwKSB7CisrCQlkZWJ1 ZygiUEFNOiB1c2VyIG1hcHBlZCBmcm9tICclLjEwMHMnIHRvICclLjEwMHMnIiwKKysJCSAgICBz c2hwYW1fYXV0aGN0eHQtPnB3LT5wd19uYW1lLCB1c2VyKTsKKysJCWlmICgocHcgPSBnZXRwd25h bSh1c2VyKSkgPT0gTlVMTCkKKysJCQlmYXRhbCgiUEFNOiBjb3VsZCBub3QgZ2V0IHBhc3N3ZCBl bnRyeSBmb3IgdXNlciAiCisrCQkJICAgICInJS4xMDBzJyBwcm92aWRlZCBieSBQQU1fVVNFUiIs IHVzZXIpOworKwkJcHdmcmVlKHNzaHBhbV9hdXRoY3R4dC0+cHcpOworKwkJc3NocGFtX2F1dGhj dHh0LT5wdyA9IHB3Y29weShwdyk7CisrCQlzc2hwYW1fYXV0aGN0eHQtPnZhbGlkID0gYWxsb3dl ZF91c2VyKHNzaHBhbV9zc2gsIHB3KTsKKysJCWZyZWUoc3NocGFtX2F1dGhjdHh0LT51c2VyKTsK KysJCXNzaHBhbV9hdXRoY3R4dC0+dXNlciA9IHhzdHJkdXAodXNlcik7CisrCQlkZWJ1ZygiUEFN OiB1c2VyICclLjEwMHMnIG5vdyAlc3ZhbGlkIiwgdXNlciwKKysJCSAgICBzc2hwYW1fYXV0aGN0 eHQtPnZhbGlkID8gIiIgOiAiaW4iKTsKKysJfQorKwlkZWJ1Zygic3NocGFtX2NoZWNrX3VzZXJj aGFuZ2VkOiB1c2VyIGlzICclLjEwMHMnIiwKKysJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3 X25hbWUpOworK30KKysKKyBzdGF0aWMgdm9pZAorIHNzaHBhbV9wYXNzd29yZF9jaGFuZ2VfcmVx dWlyZWQoaW50IHJlcWQpCisgeworQEAgLTMwOCw3ICszNTksNyBAQAorIHN0YXRpYyB2b2lkCisg aW1wb3J0X2Vudmlyb25tZW50cyhzdHJ1Y3Qgc3NoYnVmICpiKQorIHsKKy0JY2hhciAqZW52Owor KwljaGFyICplbnYsICp1c2VyOworIAl1X2ludCBuLCBpLCBudW1fZW52OworIAlpbnQgcjsKKyAK K0BAIC0zMjQsNiArMzc1LDE5IEBACisgCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKGIsICZuKSkg IT0gMCkKKyAJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKKyAJc3NocGFtX3Bhc3N3b3Jk X2NoYW5nZV9yZXF1aXJlZChuICE9IDApOworKwlpZiAob3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJf Y2hhbmdlKSB7CisrCQlpZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcoYiwgJnVzZXIsIE5VTEwp KSAhPSAwKQorKwkJCWZhdGFsKCIlczogYnVmZmVyIGVycm9yOiAlcyIsIF9fZnVuY19fLCBzc2hf ZXJyKHIpKTsKKysJCWRlYnVnKCJQQU06IHVzZXIgaXMgJyUuMTAwcyciLAorKwkJICAgIHNzaHBh bV9hdXRoY3R4dC0+cHctPnB3X25hbWUpOworKwkJZGVidWcoIlBBTTogZ290IHVzZXJuYW1lICcl LjEwMHMnIGZyb20gdGhyZWFkIiwgdXNlcik7CisrCQlpZiAoKHNzaHBhbV9lcnIgPSBwYW1fc2V0 X2l0ZW0oc3NocGFtX2hhbmRsZSwgUEFNX1VTRVIsIHVzZXIpKQorKwkJICAgICE9IFBBTV9TVUND RVNTKQorKwkJCWZhdGFsKCJQQU06IGZhaWxlZCB0byBzZXQgUEFNX1VTRVI6ICVzIiwKKysJCQkg ICAgcGFtX3N0cmVycm9yKHNzaHBhbV9oYW5kbGUsIHNzaHBhbV9lcnIpKTsKKysJCXB3ZnJlZShz c2hwYW1fYXV0aGN0eHQtPnB3KTsKKysJCXNzaHBhbV9hdXRoY3R4dC0+cHcgPSBwd2NvcHkoc3No cGFtX2dldHB3KHVzZXIpKTsKKysJfQorIAorIAkvKiBJbXBvcnQgZW52aXJvbm1lbnQgZnJvbSBz dWJwcm9jZXNzICovCisgCWlmICgociA9IHNzaGJ1Zl9nZXRfdTMyKGIsICZudW1fZW52KSkgIT0g MCkKK0BAIC01MzYsNiArNjAwLDEzIEBACisgCWlmICgoc3NocGFtX2VyciA9IGNoZWNrX3BhbV91 c2VyKHNzaHBhbV9hdXRoY3R4dCkpICE9IFBBTV9TVUNDRVNTKQorIAkJZ290byBhdXRoX2ZhaWw7 CisgCisrCWlmIChvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpIHsKKysJCWRlYnVnKCJz c2hwYW1fdGhyZWFkOiB1c2VyIGlzICclLjEwMHMnIiwKKysJCSAgICBzc2hwYW1fYXV0aGN0eHQt PnB3LT5wd19uYW1lKTsKKysJCXNzaHBhbV9jaGVja191c2VyY2hhbmdlZCgpOworKwkJZGVidWco InNzaHBhbV90aHJlYWQ6IHVzZXIgaXMgJyUuMTAwcyciLAorKwkJICAgIHNzaHBhbV9hdXRoY3R4 dC0+cHctPnB3X25hbWUpOworKwl9CisgCWlmICghZG9fcGFtX2FjY291bnQoKSkgeworIAkJLyog UHJlc2VydmUgUEFNX1BFUk1fREVOSUVEIGFuZCBQQU1fVVNFUl9VTktOT1dOLgorIAkJICogQmFj a3dhcmQgY29tcGF0aWJpbGl0eSBmb3Igb3RoZXIgZXJyb3JzLiAqLworQEAgLTU2MCw2ICs2MzEs MTMgQEAKKyAJaWYgKChyID0gc3NoYnVmX3B1dF91MzIoYnVmZmVyLCBzc2hwYW1fYWNjb3VudF9z dGF0dXMpKSAhPSAwIHx8CisgCSAgICAociA9IHNzaGJ1Zl9wdXRfdTMyKGJ1ZmZlciwgc3NocGFt X2F1dGhjdHh0LT5mb3JjZV9wd2NoYW5nZSkpICE9IDApCisgCQlmYXRhbF9mcihyLCAiYnVmZmVy IGVycm9yIik7CisrCWlmIChvcHRpb25zLnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpIHsKKysJCWRl YnVnKCJzc2hwYW1fdGhyZWFkOiB1c2VyIGlzICclLjEwMHMnIiwKKysJCSAgICBzc2hwYW1fYXV0 aGN0eHQtPnB3LT5wd19uYW1lKTsKKysJCWlmICgociA9IHNzaGJ1Zl9wdXRfY3N0cmluZyhidWZm ZXIsCisrCQkgICAgc3NocGFtX2F1dGhjdHh0LT5wdy0+cHdfbmFtZSkpICE9IDApCisrCQkJZmF0 YWwoIiVzOiBidWZmZXIgZXJyb3I6ICVzIiwgX19mdW5jX18sIHNzaF9lcnIocikpOworKwl9Cisg CisgCS8qIEV4cG9ydCBhbnkgZW52aXJvbm1lbnQgc3RyaW5ncyBzZXQgaW4gY2hpbGQgKi8KKyAJ Zm9yIChpID0gMDsgZW52aXJvbltpXSAhPSBOVUxMOyBpKyspIHsKK0BAIC03NDksNiArODI3LDgg QEAKKyAJCSAgICBvcHRpb25zLnVzZV9kbnMpKTsKKyAJCXNzaHBhbV9sYWRkciA9IGdldF9sb2Nh bF9pcGFkZHIoCisgCQkgICAgc3NoX3BhY2tldF9nZXRfY29ubmVjdGlvbl9pbihzc2gpKTsKKysJ CS8qIFNhdmUgc28gYWxsb3dlZF91c2VyIGNhbiBiZSBjYWxsZWQgbGF0ZXIgKi8KKysJCXNzaHBh bV9zc2ggPSBzc2g7CisgCX0KKyAJaWYgKHNzaHBhbV9yaG9zdCAhPSBOVUxMICYmIHN0cmNtcChz c2hwYW1fcmhvc3QsICJVTktOT1dOIikgIT0gMCkgeworIAkJZGVidWcoIlBBTTogc2V0dGluZyBQ QU1fUkhPU1QgdG8gXCIlc1wiIiwgc3NocGFtX3Job3N0KTsKK0BAIC0xMDgzLDYgKzExNjMsMTgg QEAKKyAJZGVidWczKCJQQU06ICVzIHBhbV9hY2N0X21nbXQgPSAlZCAoJXMpIiwgX19mdW5jX18s IHNzaHBhbV9lcnIsCisgCSAgICBwYW1fc3RyZXJyb3Ioc3NocGFtX2hhbmRsZSwgc3NocGFtX2Vy cikpOworIAorKwlpZiAob3B0aW9ucy5wZXJtaXRfcGFtX3VzZXJfY2hhbmdlKSB7CisrCQlkZWJ1 ZygiZG9fcGFtX2FjY291bnQ6IHVzZXIgaXMgJyUuMTAwcyciLAorKwkJICAgIHNzaHBhbV9hdXRo Y3R4dC0+cHctPnB3X25hbWUpOworKwkJc3NocGFtX2NoZWNrX3VzZXJjaGFuZ2VkKCk7CisrCQlk ZWJ1ZygiZG9fcGFtX2FjY291bnQ6IHVzZXIgaXMgJyUuMTAwcyciLAorKwkJICAgIHNzaHBhbV9h dXRoY3R4dC0+cHctPnB3X25hbWUpOworKwkJaWYgKGdldHB3bmFtKHNzaHBhbV9hdXRoY3R4dC0+ cHctPnB3X25hbWUpID09IE5VTEwpCisrCQkJZmF0YWwoIlBBTTogY29tcGxldGVkIGF1dGhlbnRp Y2F0aW9uIGJ1dCBQQU0gYWNjb3VudCBpbnZhbGlkIik7CisrCQlkZWJ1ZygiZG9fcGFtX2FjY291 bnQ6IHVzZXIgaXMgJyUuMTAwcyciLAorKwkJICAgIHNzaHBhbV9hdXRoY3R4dC0+cHctPnB3X25h bWUpOworKwl9CisrCisgCWlmIChzc2hwYW1fZXJyICE9IFBBTV9TVUNDRVNTICYmIHNzaHBhbV9l cnIgIT0gUEFNX05FV19BVVRIVE9LX1JFUUQpIHsKKyAJCXNzaHBhbV9hY2NvdW50X3N0YXR1cyA9 IDA7CisgCQlyZXR1cm4gKHNzaHBhbV9hY2NvdW50X3N0YXR1cyk7CitAQCAtMTI5MSw2ICsxMzgz LDkgQEAKKyAJZXhwb3NlX2F1dGhpbmZvKF9fZnVuY19fKTsKKyAKKyAJc3NocGFtX2VyciA9IHBh bV9hdXRoZW50aWNhdGUoc3NocGFtX2hhbmRsZSwgZmxhZ3MpOworKwlpZiAob3B0aW9ucy5wZXJt aXRfcGFtX3VzZXJfY2hhbmdlKSB7CisrCQlzc2hwYW1fY2hlY2tfdXNlcmNoYW5nZWQoKTsKKysJ fQorIAlzc2hwYW1fcGFzc3dvcmQgPSBOVUxMOworIAlmcmVlKGZha2UpOworIAlpZiAoc3NocGFt X2VyciA9PSBQQU1fU1VDQ0VTUykKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2F1dGgt cGFtLmggb3BlbnNzaC0xMC4zcDEvYXV0aC1wYW0uaAorLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcv YXV0aC1wYW0uaAkyMDI2LTA3LTAxIDA5OjM4OjAwLjE4NDA0MjM0MSArMDIwMAorKysrIG9wZW5z c2gtMTAuM3AxL2F1dGgtcGFtLmgJMjAyNi0wNy0wMSAxMDo1ODoxMC4wNDk2NDQwMjEgKzAyMDAK K0BAIC00NCw1ICs0NCw2IEBACisgdm9pZCBzc2hwYW1fc2V0X21heHRyaWVzX3JlYWNoZWQoaW50 KTsKKyBpbnQgaXNfcGFtX3Nlc3Npb25fb3Blbih2b2lkKTsKKyBpbnQgc3NocGFtX3ByaXZfa2Jk aW50X2F1dGhkb25lKHZvaWQgKmN0eHRwKTsKKytzdHJ1Y3QgcGFzc3dkICpzc2hwYW1fZ2V0cHco Y29uc3QgY2hhciAqKTsKKyAKKyAjZW5kaWYgLyogVVNFX1BBTSAqLworZGlmZiAtTnVyIG9wZW5z c2gtMTAuM3AxLm9yaWcvY2Fub2hvc3QuYyBvcGVuc3NoLTEwLjNwMS9jYW5vaG9zdC5jCistLS0g b3BlbnNzaC0xMC4zcDEub3JpZy9jYW5vaG9zdC5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuMzE4NzI0 NjgxICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvY2Fub2hvc3QuYwkyMDI2LTA3LTAxIDEwOjM5 OjQzLjU3MTI5ODY4MiArMDIwMAorQEAgLTE3LDYgKzE3LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8c3lzL3VuLmg+Cisr I2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAgICAgICAgICAvKiBmb3IgTUFYSE9TVE5BTUVMRU4gKi8K KyAKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KK0BA IC0zMDAsMyArMzAxLDMzIEBACisgeworIAlyZXR1cm4gZ2V0X3NvY2tfcG9ydChzb2NrLCAxKTsK KyB9CisrCisrdm9pZAorK3Jlc29sdmVfbG9jYWxob3N0KGNoYXIgKipob3N0KQorK3sKKysJc3Ry dWN0IGhvc3RlbnQgKmhvc3RpbmZvOworKworKwlob3N0aW5mbyA9IGdldGhvc3RieW5hbWUoKmhv c3QpOworKwlpZiAoaG9zdGluZm8gPT0gTlVMTCB8fCBob3N0aW5mby0+aF9uYW1lID09IE5VTEwp IHsKKysJCWRlYnVnKCJnZXRob3N0YnluYW1lKCVzKSBmYWlsZWQiLCAqaG9zdCk7CisrCQlyZXR1 cm47CisrCX0KKysJaWYgKGhvc3RpbmZvLT5oX2FkZHJ0eXBlID09IEFGX0lORVQpIHsKKysJCXN0 cnVjdCBpbl9hZGRyIGFkZHI7CisrCQlhZGRyID0gKihzdHJ1Y3QgaW5fYWRkciAqKShob3N0aW5m by0+aF9hZGRyKTsKKysJCWlmIChudG9obChhZGRyLnNfYWRkcikgPT0gSU5BRERSX0xPT1BCQUNL KSB7CisrCQkJY2hhciBidWZbTUFYSE9TVE5BTUVMRU5dOworKwkJCWlmIChnZXRob3N0bmFtZShi dWYsIHNpemVvZihidWYpKSA8IDApIHsKKysJCQkJZGVidWcoImdldGhvc3RuYW1lKCkgZmFpbGVk Iik7CisrCQkJCXJldHVybjsKKysJCQl9CisrCQkJaG9zdGluZm8gPSBnZXRob3N0YnluYW1lKGJ1 Zik7CisrCQkJZnJlZSgqaG9zdCk7CisrCQkJaWYgKGhvc3RpbmZvID09IE5VTEwgfHwgaG9zdGlu Zm8tPmhfbmFtZSA9PSBOVUxMKSB7CisrCQkJCSpob3N0ID0geHN0cmR1cChidWYpOworKwkJCX0g ZWxzZSB7CisrCQkJCSpob3N0ID0geHN0cmR1cChob3N0aW5mby0+aF9uYW1lKTsKKysJCQl9Cisr CQl9CisrCX0KKyt9CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jYW5vaG9zdC5oIG9w ZW5zc2gtMTAuM3AxL2Nhbm9ob3N0LmgKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2Nhbm9ob3N0 LmgJMjAyNi0wNy0wMSAwOTozODowMC4zMTg3NzczNzggKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNw MS9jYW5vaG9zdC5oCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTcxNjE5NjU2ICswMjAwCitAQCAtMjYs NCArMjYsNiBAQAorIAorICNlbmRpZiAvKiBfQ0FOT0hPU1RfSCAqLworIAorK3ZvaWQJCSByZXNv bHZlX2xvY2FsaG9zdChjaGFyICoqaG9zdCk7CisrCisgdm9pZAkJIGlwdjY0X25vcm1hbGlzZV9t YXBwZWQoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKiwgc29ja2xlbl90ICopOworZGlmZiAtTnVy IG9wZW5zc2gtMTAuM3AxLm9yaWcvY29uZmlndXJlLmFjIG9wZW5zc2gtMTAuM3AxL2NvbmZpZ3Vy ZS5hYworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY29uZmlndXJlLmFjCTIwMjYtMDctMDEgMDk6 Mzg6MDAuODg1MTI5OTU5ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvY29uZmlndXJlLmFjCTIw MjYtMDctMDEgMTA6Mzk6NDMuNTcyNTcwODYxICswMjAwCitAQCAtNTE1Myw2ICs1MTUzLDE0IEBA CisgCQkJCUFDX0NIRUNLX0hFQURFUihbZ3NzYXBpX2tyYjUuaF0sICwKKyAJCQkJCQlbIENQUEZM QUdTPSIkb2xkQ1BQIiBdKQorIAorKwkJCQkjIElmIHdlJ3JlIHVzaW5nIHNvbWUgb3RoZXIgR1NT QVBJCisrCQkJCWlmIHRlc3QgLW4gIiRHU1NBUEkiIDsgdGhlbgorKwkJCQkJQUNfTVNHX0VSUk9S KFtQcmV2aW91c2x5IGNvbmZpZ3VyZWQgR1NTQVBJIGxpYnJhcnkgY29uZmxpY3RzIHdpdGggS2Vy YmVyb3MgR1NJLl0pCisrCQkJCWZpCisrCQorKwkJCQlpZiB0ZXN0IC16ICIkR1NTQVBJIjsgdGhl bgorKwkJCQkJR1NTQVBJPSJLUkI1IjsKKysJCQkJZmkKKyAJCQlmaQorIAkJZmkKKyAJCWlmIHRl c3QgLW4gIiR7cnBhdGhfb3B0fSIgOyB0aGVuCitAQCAtNTIwMSw2ICs1MjA5LDQwIEBACisgQUNf U1VCU1QoW0s1TElCU10pCisgQUNfU1VCU1QoW0NIQU5ORUxMSUJTXSkKKyAKKysjIENoZWNrIHdo ZXRoZXIgdGhlIHVzZXIgd2FudHMgR1NJIChHbG9idXMpIHN1cHBvcnQKKytnc2k9Im5vIgorK0FD X0FSR19XSVRIKGdzaSwKKysJWyAgLS13aXRoLWdzaSAgICAgICAgICAgICAgRW5hYmxlIEdsb2J1 cyBHU0kgYXV0aGVudGljYXRpb24gc3VwcG9ydF0sCisrCVsKKysJCWdzaT0iJHdpdGh2YWwiCisr CV0KKyspCisrCisraWYgdGVzdCAieCRnc2kiICE9ICJ4bm8iIDsgdGhlbgorKwkjIEdsb2J1cyBH U1NBUEkgY29uZmlndXJhdGlvbgorKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdsb2J1cyBHU0kpCisr CUFDX0RFRklORShHU0ksIDEsIFtEZWZpbmUgaWYgeW91IHdhbnQgR1NJL0dsb2J1cyBhdXRoZW50 aWNhdGlvbiBzdXBwb3J0Ll0pCisrCisrCWlmIHRlc3QgLW4gIiRHU1NBUEkiIDsgdGhlbgorKwkJ QUNfTVNHX0VSUk9SKFtQcmV2aW91c2x5IGNvbmZpZ3VyZWQgR1NTQVBJIGxpYnJhcnkgY29uZmxp Y3RzIHdpdGggR2xvYnVzIEdTSS5dKQorKwlmaQorKworKwlpZiB0ZXN0IC16ICIkR1NTQVBJIiA7 IHRoZW4KKysJCUdTU0FQST0iR1NJIgorKwlmaQorKworKwlBQ19QQVRIX1RPT0woW1BLR0NPTkZJ R10sIFtwa2ctY29uZmlnXSwgW25vXSkKKysJaWYgdGVzdCAieCRQS0dDT05GSUciICE9ICJ4bm8i OyB0aGVuCisrCQlMSUJTPSIkTElCUyBgJFBLR0NPTkZJRyAtLWxpYnMgZ2xvYnVzLWdzcy1hc3Np c3QgZ2xvYnVzLWdzc2FwaS1nc2kgZ2xvYnVzLWNvbW1vbmAiCisrCQlDUFBGTEFHUz0iJENQUEZM QUdTIGAkUEtHQ09ORklHIC0tY2ZsYWdzIGdsb2J1cy1nc3MtYXNzaXN0IGdsb2J1cy1nc3NhcGkt Z3NpIGdsb2J1cy1jb21tb25gIgorKwlmaQorKworKwlBQ19ERUZJTkUoR1NTQVBJKQorKwlBQ19E RUZJTkUoSEFWRV9HU1NBUElfSCkKKysKKysJQUNfQ0hFQ0tfRlVOQ1MoZ2xvYnVzX2dzc19hc3Np c3RfbWFwX2FuZF9hdXRob3JpemUpCisrZmkKKysKKyAjIExvb2tpbmcgZm9yIHByb2dyYW1zLCBw YXRocyBhbmQgZmlsZXMKKyAKKyBQUklWU0VQX1BBVEg9L3Zhci9lbXB0eQorZGlmZiAtTnVyIG9w ZW5zc2gtMTAuM3AxLm9yaWcvZ3NzLWdlbnIuYyBvcGVuc3NoLTEwLjNwMS9nc3MtZ2Vuci5jCist LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9nc3MtZ2Vuci5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuOTEy ODMxNTA3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvZ3NzLWdlbnIuYwkyMDI2LTA3LTAxIDEw OjM5OjQzLjU3MzM0Njg4NCArMDIwMAorQEAgLTQxLDYgKzQxLDcgQEAKKyAjaW5jbHVkZSAic3No ZXJyLmgiCisgI2luY2x1ZGUgInNzaGJ1Zi5oIgorICNpbmNsdWRlICJsb2cuaCIKKysjaW5jbHVk ZSAiY2Fub2hvc3QuaCIKKyAjaW5jbHVkZSAic3NoMi5oIgorICNpbmNsdWRlICJjaXBoZXIuaCIK KyAjaW5jbHVkZSAic3Noa2V5LmgiCitAQCAtNDI2LDkgKzQyNywxOCBAQAorIHNzaF9nc3NhcGlf aW1wb3J0X25hbWUoR3NzY3R4dCAqY3R4LCBjb25zdCBjaGFyICpob3N0KQorIHsKKyAJZ3NzX2J1 ZmZlcl9kZXNjIGdzc2J1ZjsKKysJY2hhciAqeGhvc3Q7CisgCWNoYXIgKnZhbDsKKyAKKy0JeGFz cHJpbnRmKCZ2YWwsICJob3N0QCVzIiwgaG9zdCk7CisrCS8qIE1ha2UgYSBjb3B5IG9mIHRoZSBo b3N0IG5hbWUsIGluIGNhc2UgaXQgd2FzIHJldHVybmVkIGJ5IGEKKysJICogcHJldmlvdXMgY2Fs bCB0byBnZXRob3N0YnluYW1lKCkuICovCisrCXhob3N0ID0geHN0cmR1cChob3N0KTsKKysKKysJ LyogTWFrZSBzdXJlIHdlIGhhdmUgdGhlIEZRRE4uIFNvbWUgR1NTQVBJIGltcGxlbWVudGF0aW9u cyBkb24ndCBkbworKwkgKiB0aGlzIGZvciB1cyB0aGVtc2VsdmVzICovCisrCXJlc29sdmVfbG9j YWxob3N0KCZ4aG9zdCk7CisrCisrCXhhc3ByaW50ZigmdmFsLCAiaG9zdEAlcyIsIHhob3N0KTsK KyAJZ3NzYnVmLnZhbHVlID0gdmFsOworIAlnc3NidWYubGVuZ3RoID0gc3RybGVuKGdzc2J1Zi52 YWx1ZSk7CisgCitAQCAtNDM2LDYgKzQ0Niw3IEBACisgCSAgICAmZ3NzYnVmLCBHU1NfQ19OVF9I T1NUQkFTRURfU0VSVklDRSwgJmN0eC0+bmFtZSkpKQorIAkJc3NoX2dzc2FwaV9lcnJvcihjdHgp OworIAorKwlmcmVlKHhob3N0KTsKKyAJZnJlZShnc3NidWYudmFsdWUpOworIAlyZXR1cm4gKGN0 eC0+bWFqb3IpOworIH0KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2dzcy1zZXJ2LmMg b3BlbnNzaC0xMC4zcDEvZ3NzLXNlcnYuYworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvZ3NzLXNl cnYuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjg2ODIxNDc4MiArMDIwMAorKysrIG9wZW5zc2gtMTAu M3AxL2dzcy1zZXJ2LmMJMjAyNi0wNy0wMSAxNDowNTozOS4wNDU2NDAwNTkgKzAyMDAKK0BAIC01 MiwxMCArNTIsMTIgQEAKKyAjaW5jbHVkZSAibW9uaXRvcl93cmFwLmgiCisgCisgZXh0ZXJuIFNl cnZlck9wdGlvbnMgb3B0aW9uczsKKytleHRlcm4gQXV0aGN0eHQgKnRoZV9hdXRoY3R4dDsKKyAK KyBzdGF0aWMgc3NoX2dzc2FwaV9jbGllbnQgZ3NzYXBpX2NsaWVudCA9CistICAgIHsgR1NTX0Nf RU1QVFlfQlVGRkVSLCBHU1NfQ19FTVBUWV9CVUZGRVIsIEdTU19DX05PX0NSRURFTlRJQUwsCist ICAgIEdTU19DX05PX05BTUUsIE5VTEwsIHtOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMfSwg MCwgMCwgTlVMTCwgMH07CisrICAgIHsgezAsIE5VTEx9LCBHU1NfQ19FTVBUWV9CVUZGRVIsIEdT U19DX0VNUFRZX0JVRkZFUiwgR1NTX0NfTk9fQ1JFREVOVElBTCwKKysgICAgICBHU1NfQ19OT19O QU1FLCBHU1NfQ19OT19OQU1FLCBOVUxMLCB7TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH0s CisrICAgICAgR1NTX0NfTk9fQ09OVEVYVCwgMCwgMCwgTlVMTCwgMH07CisgCisgc3NoX2dzc2Fw aV9tZWNoIGdzc2FwaV9udWxsX21lY2ggPQorICAgICB7IE5VTEwsIE5VTEwsIHswLCBOVUxMfSwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTH07CitAQCAtNjMsMTQgKzY1LDI2IEBACisgI2lm ZGVmIEtSQjUKKyBleHRlcm4gc3NoX2dzc2FwaV9tZWNoIGdzc2FwaV9rZXJiZXJvc19tZWNoOwor ICNlbmRpZgorKyNpZmRlZiBHU0kKKytleHRlcm4gc3NoX2dzc2FwaV9tZWNoIGdzc2FwaV9nc2lf bWVjaDsKKytleHRlcm4gc3NoX2dzc2FwaV9tZWNoIGdzc2FwaV9nc2lfbWVjaF9taWN2MjsKKysj ZW5kaWYKKyAKKyBzc2hfZ3NzYXBpX21lY2gqIHN1cHBvcnRlZF9tZWNoc1tdPSB7CisgI2lmZGVm IEtSQjUKKyAJJmdzc2FwaV9rZXJiZXJvc19tZWNoLAorICNlbmRpZgorKyNpZmRlZiBHU0kKKysJ Jmdzc2FwaV9nc2lfbWVjaF9taWN2MiwKKysJJmdzc2FwaV9nc2lfbWVjaCwKKysjZW5kaWYKKyAJ Jmdzc2FwaV9udWxsX21lY2gsCisgfTsKKyAKKysjaWZkZWYgR1NTX0NfR0xPQlVTX0xJTUlURURf UFJPWFlfRkxBRworK3N0YXRpYyBpbnQgbGltaXRlZCA9IDA7CisrI2VuZGlmCisrCisgLyoKKyAg KiBzc2hfZ3NzYXBpX3N1cHBvcnRlZF9vaWRzKCkgY2FuIGNhdXNlIHNhbmRib3ggdmlvbGF0aW9u cywgc28gcHJlcGFyZSB0aGUKKyAgKiBsaXN0IG9mIHN1cHBvcnRlZCBtZWNoYW5pc21zIGJlZm9y ZSBwcml2c2VwIGlzIHNldCB1cC4KK0BAIC0yMzEsNiArMjQ1LDEwIEBACisgCSAgICAoKmZsYWdz ICYgR1NTX0NfSU5URUdfRkxBRykpKSAmJiAoY3R4LT5tYWpvciA9PSBHU1NfU19DT01QTEVURSkp IHsKKyAJCWlmIChzc2hfZ3NzYXBpX2dldGNsaWVudChjdHgsICZnc3NhcGlfY2xpZW50KSkKKyAJ CQlmYXRhbCgiQ291bGRuJ3QgY29udmVydCBjbGllbnQgbmFtZSIpOworKyNpZmRlZiBHU1NfQ19H TE9CVVNfTElNSVRFRF9QUk9YWV9GTEFHCisrCQlpZiAoZmxhZ3MgJiYgKCpmbGFncyAmIEdTU19D X0dMT0JVU19MSU1JVEVEX1BST1hZX0ZMQUcpKQorKwkJCWxpbWl0ZWQ9MTsKKysjZW5kaWYKKyAJ fQorIAorIAlyZXR1cm4gKHN0YXR1cyk7CitAQCAtMjUwLDYgKzI2OCwyMCBAQAorIAorIAl0b2sg PSBlbmFtZS0+dmFsdWU7CisgCisrI2lmZGVmIEdTSSAvKiBHU0kgZ3NzX2V4cG9ydF9uYW1lKCkg aXMgYnJva2VuLiAqLworKwlpZiAoKChjdHgtPm9pZC0+bGVuZ3RoID09IGdzc2FwaV9nc2lfbWVj aC5vaWQubGVuZ3RoKSAmJgorKwkgICAgIChtZW1jbXAoY3R4LT5vaWQtPmVsZW1lbnRzLCBnc3Nh cGlfZ3NpX21lY2gub2lkLmVsZW1lbnRzLAorKwkJICAgICBnc3NhcGlfZ3NpX21lY2gub2lkLmxl bmd0aCkgPT0gMCkpIHx8CisrCSAgICAoKGN0eC0+b2lkLT5sZW5ndGggPT0gZ3NzYXBpX2dzaV9t ZWNoX21pY3YyLm9pZC5sZW5ndGgpICYmCisrCSAgICAgKG1lbWNtcChjdHgtPm9pZC0+ZWxlbWVu dHMsIGdzc2FwaV9nc2lfbWVjaF9taWN2Mi5vaWQuZWxlbWVudHMsCisrCQkgICAgIGdzc2FwaV9n c2lfbWVjaF9taWN2Mi5vaWQubGVuZ3RoKSA9PSAwKSkpIHsKKysJCW5hbWUtPmxlbmd0aCA9IGVu YW1lLT5sZW5ndGg7CisrCQluYW1lLT52YWx1ZSA9IHhtYWxsb2MoZW5hbWUtPmxlbmd0aCsxKTsK KysJCW1lbWNweShuYW1lLT52YWx1ZSwgZW5hbWUtPnZhbHVlLCBlbmFtZS0+bGVuZ3RoKTsKKysJ CXJldHVybiBHU1NfU19DT01QTEVURTsKKysJfQorKyNlbmRpZgorKworIAkvKgorIAkgKiBDaGVj ayB0aGF0IGVuYW1lIGlzIGxvbmcgZW5vdWdoIGZvciBhbGwgb2YgdGhlIGZpeGVkIGxlbmd0aAor IAkgKiBoZWFkZXIsIGFuZCB0aGF0IHRoZSBpbml0aWFsIElEIGJ5dGVzIGFyZSBjb3JyZWN0CitA QCAtMjk4LDYgKzMzMCw3IEBACisgfQorIAorIAorKyNpZmRlZiBLUkI1CisgLyogRXh0cmFjdCBh dXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzIGZyb20gdGhlIEtlcmJlcm9zIHRpY2tldC4gQXV0aGVu dGljYXRpb24KKyAgKiBpbmRpY2F0b3JzIGFyZSBHU1NBUEkgbmFtZSBhdHRyaWJ1dGVzIGZvciB0 aGUgbmFtZSAiYXV0aC1pbmRpY2F0b3JzIi4KKyAgKiBNdWx0aXBsZSBpbmRpY2F0b3JzIG1pZ2h0 IGJlIHByZXNlbnQgaW4gdGhlIHRpY2tldC4KK0BAIC0zODUsNiArNDE4LDcgQEAKKyAJKHZvaWQp IGdzc19yZWxlYXNlX2J1ZmZlcl9zZXQoJmN0eC0+bWlub3IsICZhdHRycyk7CisgCXJldHVybiAo Y3R4LT5tYWpvcik7CisgfQorKyNlbmRpZgorIAorIC8qIEV4dHJhY3QgdGhlIGNsaWVudCBkZXRh aWxzIGZyb20gYSBnaXZlbiBjb250ZXh0LiBUaGlzIGNhbiBvbmx5IHJlbGlhYmx5CisgICogYmUg Y2FsbGVkIG9uY2UgZm9yIGEgY29udGV4dCAqLworQEAgLTM5OSwyMSArNDMzLDI0IEBACisgCWdz c19idWZmZXJfZGVzYyBlbmFtZSA9IEdTU19DX0VNUFRZX0JVRkZFUjsKKyAKKyAJaWYgKG9wdGlv bnMuZ3NzX3N0b3JlX3Jla2V5ICYmIGNsaWVudC0+dXNlZCAmJiBjdHgtPmNsaWVudF9jcmVkcykg eworLQkJaWYgKGNsaWVudC0+bWVjaC0+b2lkLmxlbmd0aCAhPSBjdHgtPm9pZC0+bGVuZ3RoIHx8 CistCQkgICAgKG1lbWNtcChjbGllbnQtPm1lY2gtPm9pZC5lbGVtZW50cywKKysJCWlmIChjbGll bnQtPm9pZC5sZW5ndGggIT0gY3R4LT5vaWQtPmxlbmd0aCB8fAorKwkJICAgIChtZW1jbXAoY2xp ZW50LT5vaWQuZWxlbWVudHMsCisgCQkgICAgIGN0eC0+b2lkLT5lbGVtZW50cywgY3R4LT5vaWQt Pmxlbmd0aCkgIT0wKSkgeworIAkJCWRlYnVnKCJSZWtleWVkIGNyZWRlbnRpYWxzIGhhdmUgZGlm ZmVyZW50IG1lY2hhbmlzbSIpOworIAkJCXJldHVybiBHU1NfU19DT01QTEVURTsKKyAJCX0KKyAK Ky0JCWlmICgoY3R4LT5tYWpvciA9IGdzc19pbnF1aXJlX2NyZWRfYnlfbWVjaCgmY3R4LT5taW5v ciwKKy0JCSAgICBjdHgtPmNsaWVudF9jcmVkcywgY3R4LT5vaWQsICZuZXdfbmFtZSwKKysJCS8q IENhbGwgZ3NzX2lucXVpcmVfY3JlZCByYXRoZXIgdGhhbiBnc3NfaW5xdWlyZV9jcmVkX2J5X21l Y2gKKysJCSAgIGJlY2F1c2UgR1NJIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0dGVyLiAtamJhc25l eSAqLworKworKwkJaWYgKChjdHgtPm1ham9yID0gZ3NzX2lucXVpcmVfY3JlZCgmY3R4LT5taW5v ciwKKysJCSAgICBjdHgtPmNsaWVudF9jcmVkcywgJm5ld19uYW1lLAorIAkJICAgIE5VTEwsIE5V TEwsIE5VTEwpKSkgeworIAkJCXNzaF9nc3NhcGlfZXJyb3IoY3R4KTsKKyAJCQlyZXR1cm4gKGN0 eC0+bWFqb3IpOworIAkJfQorIAorLQkJY3R4LT5tYWpvciA9IGdzc19jb21wYXJlX25hbWUoJmN0 eC0+bWlub3IsIGNsaWVudC0+bmFtZSwKKysJCWN0eC0+bWFqb3IgPSBnc3NfY29tcGFyZV9uYW1l KCZjdHgtPm1pbm9yLCBjbGllbnQtPmNyZWRfbmFtZSwKKyAJCSAgICBuZXdfbmFtZSwgJmVxdWFs KTsKKyAKKyAJCWlmIChHU1NfRVJST1IoY3R4LT5tYWpvcikpIHsKK0BAIC00MjgsOSArNDY1LDkg QEAKKyAKKyAJCWRlYnVnKCJNYXJraW5nIHJla2V5ZWQgY3JlZGVudGlhbHMgZm9yIGV4cG9ydCIp OworIAorLQkJZ3NzX3JlbGVhc2VfbmFtZSgmY3R4LT5taW5vciwgJmNsaWVudC0+bmFtZSk7Cisr CQlnc3NfcmVsZWFzZV9uYW1lKCZjdHgtPm1pbm9yLCAmY2xpZW50LT5jcmVkX25hbWUpOworIAkJ Z3NzX3JlbGVhc2VfY3JlZCgmY3R4LT5taW5vciwgJmNsaWVudC0+Y3JlZHMpOworLQkJY2xpZW50 LT5uYW1lID0gbmV3X25hbWU7CisrCQljbGllbnQtPmNyZWRfbmFtZSA9IG5ld19uYW1lOworIAkJ Y2xpZW50LT5jcmVkcyA9IGN0eC0+Y2xpZW50X2NyZWRzOworIAkJY3R4LT5jbGllbnRfY3JlZHMg PSBHU1NfQ19OT19DUkVERU5USUFMOworIAkJY2xpZW50LT51cGRhdGVkID0gMTsKK0BAIC00NDcs MTIgKzQ4NCwxNyBAQAorIAkJaSsrOworIAl9CisgCisrCWlmIChjbGllbnQtPm9pZC5lbGVtZW50 cyA9PSBOVUxMKQorKwkJY2xpZW50LT5vaWQgPSAqY3R4LT5vaWQ7CisgCWlmIChjbGllbnQtPm1l Y2ggPT0gTlVMTCkKKyAJCXJldHVybiBHU1NfU19GQUlMVVJFOworIAorKwkvKiBDYWxsIGdzc19p bnF1aXJlX2NyZWQgcmF0aGVyIHRoYW4gZ3NzX2lucXVpcmVfY3JlZF9ieV9tZWNoCisrCSAgIGJl Y2F1c2UgR1NJIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0dGVyLiAtamJhc25leSAqLworKworIAlp ZiAoY3R4LT5jbGllbnRfY3JlZHMgJiYKKy0JICAgIChjdHgtPm1ham9yID0gZ3NzX2lucXVpcmVf Y3JlZF9ieV9tZWNoKCZjdHgtPm1pbm9yLAorLQkgICAgIGN0eC0+Y2xpZW50X2NyZWRzLCBjdHgt Pm9pZCwgJmNsaWVudC0+bmFtZSwgTlVMTCwgTlVMTCwgTlVMTCkpKSB7CisrCSAgICAoY3R4LT5t YWpvciA9IGdzc19pbnF1aXJlX2NyZWQoJmN0eC0+bWlub3IsCisrCSAgICAgY3R4LT5jbGllbnRf Y3JlZHMsICZjbGllbnQtPmNyZWRfbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCkpKSB7CisgCQlzc2hf Z3NzYXBpX2Vycm9yKGN0eCk7CisgCQlyZXR1cm4gKGN0eC0+bWFqb3IpOworIAl9CitAQCAtNDY5 LDI1ICs1MTEsMzcgQEAKKyAJCXJldHVybiAoY3R4LT5tYWpvcik7CisgCX0KKyAKKy0JaWYgKChj dHgtPm1ham9yID0gc3NoX2dzc2FwaV9wYXJzZV9lbmFtZShjdHgsJmVuYW1lLAorKwlpZiAoKGNs aWVudC0+bWVjaC0+b2lkLmVsZW1lbnRzICE9IE5VTEwpICYmCisrCSAgICAoY3R4LT5tYWpvciA9 IHNzaF9nc3NhcGlfcGFyc2VfZW5hbWUoY3R4LCZlbmFtZSwKKyAJICAgICZjbGllbnQtPmV4cG9y dGVkbmFtZSkpKSB7CisgCQlyZXR1cm4gKGN0eC0+bWFqb3IpOworIAl9CisgCisrCWlmICgoY3R4 LT5tYWpvciA9IGdzc19kdXBsaWNhdGVfbmFtZSgmY3R4LT5taW5vciwgY3R4LT5jbGllbnQsCisr CSAgICAmY2xpZW50LT5jdHhfbmFtZSkpKQorKwkJcmV0dXJuIGN0eC0+bWFqb3I7CisrCisgCWdz c19yZWxlYXNlX2J1ZmZlcigmY3R4LT5taW5vciwgJmVuYW1lKTsKKysjaWZkZWYgS1JCNQorIAkv KiBSZXRyaWV2ZSBhdXRoZW50aWNhdGlvbiBpbmRpY2F0b3JzLCBpZiB0aGV5IGV4aXN0ICovCisg CWlmICgoY3R4LT5tYWpvciA9IHNzaF9nc3NhcGlfZ2V0aW5kaWNhdG9ycyhjdHgsCisgCSAgICBj dHgtPmNsaWVudCwgY2xpZW50KSkpIHsKKyAJCXNzaF9nc3NhcGlfZXJyb3IoY3R4KTsKKyAJCXJl dHVybiAoY3R4LT5tYWpvcik7CisgCX0KKysjZW5kaWYKKyAKKyAJLyogV2UgY2FuJ3QgY29weSB0 aGlzIHN0cnVjdHVyZSwgc28gd2UganVzdCBtb3ZlIHRoZSBwb2ludGVyIHRvIGl0ICovCisgCWNs aWVudC0+Y3JlZHMgPSBjdHgtPmNsaWVudF9jcmVkczsKKyAJY3R4LT5jbGllbnRfY3JlZHMgPSBH U1NfQ19OT19DUkVERU5USUFMOworKworKwkvKiBuZWVkZWQgZm9yIGdsb2J1c19nc3NfYXNzaXN0 X21hcF9hbmRfYXV0aG9yaXplKCkgKi8KKysJY2xpZW50LT5jb250ZXh0ID0gY3R4LT5jb250ZXh0 OworKworIAlyZXR1cm4gKGN0eC0+bWFqb3IpOworIH0KKyAKKysjaWZkZWYgS1JCNQorIC8qIFJl dHVybnMgbm9uLXplcm8gaWYgS2VyYmVyb3MgY3JlZGVudGlhbHMgaGF2ZSBhbHJlYWR5IGJlZW4g c3RvcmVkLiAqLworIGludAorIHNzaF9nc3NhcGlfY3JlZGVudGlhbHNfc3RvcmVkKHZvaWQpCitA QCAtODQ3LDEyICs5MDEsMTkgQEAKKyAKKyAJdW5zZXRlbnYoIktSQjVDQ05BTUUiKTsKKyB9Cisr I2VuZGlmCisgCisgI2lmbmRlZiBLUkI1CisgLyogQXMgdXNlciAtIGNhbGxlZCBvbiBmYXRhbC9l eGl0OyBmdWxsIGltcGxlbWVudGF0aW9uIGluIGdzcy1zZXJ2LWtyYjUuYyAqLworIHZvaWQKKyBz c2hfZ3NzYXBpX2NsZWFudXBfY3JlZHModm9pZCkKKyB7CisrCWlmIChnc3NhcGlfY2xpZW50LnN0 b3JlLmZpbGVuYW1lICE9IE5VTEwpIHsKKysJCS8qIFVubGluayBwcm9iYWJseSBpc24ndCBzdWZm aWNpZW50ICovCisrCQlkZWJ1ZygicmVtb3ZpbmcgZ3NzYXBpIGNyZWQgZmlsZVwiJXNcIiIsCisr CQkgICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSk7CisrCQl1bmxpbmsoZ3NzYXBpX2Ns aWVudC5zdG9yZS5maWxlbmFtZSk7CisrCX0KKyB9CisgCisgLyoKK0BAIC04NzUsNiArOTM2LDEx IEBACisgCX0KKyAKKyAJaWYgKGdzc2FwaV9jbGllbnQubWVjaCAmJiBnc3NhcGlfY2xpZW50Lm1l Y2gtPnN0b3JlY3JlZHMpIHsKKysJCWlmIChvcHRpb25zLmdzc19jcmVkc19wYXRoKSB7CisrCQkJ Z3NzYXBpX2NsaWVudC5zdG9yZS5maWxlbmFtZSA9CisrCQkJICAgIGV4cGFuZF9hdXRob3JpemVk X2tleXMob3B0aW9ucy5nc3NfY3JlZHNfcGF0aCwKKysJCQkgICAgdGhlX2F1dGhjdHh0LT5wdyk7 CisrCQl9CisgCQlyZXR1cm4gKCpnc3NhcGlfY2xpZW50Lm1lY2gtPnN0b3JlY3JlZHMpKCZnc3Nh cGlfY2xpZW50KTsKKyAJfSBlbHNlCisgCQlkZWJ1Zygic3NoX2dzc2FwaV9zdG9yZWNyZWRzOiBO b3QgYSBHU1NBUEkgbWVjaGFuaXNtIik7CitAQCAtOTA4LDExICs5NzQsMTMgQEAKKyAKKyAJKHZv aWQpIGtleDsgLyogdXNlZCBpbiBwcml2aWxlZ2Ugc2VwYXJhdGlvbiAqLworIAorLQlpZiAoZ3Nz YXBpX2NsaWVudC5leHBvcnRlZG5hbWUubGVuZ3RoID09IDAgfHwKKy0JICAgIGdzc2FwaV9jbGll bnQuZXhwb3J0ZWRuYW1lLnZhbHVlID09IE5VTEwpIHsKKy0JCWRlYnVnKCJObyBzdWl0YWJsZSBj bGllbnQgZGF0YSIpOworKyNpZmRlZiBHU1NfQ19HTE9CVVNfTElNSVRFRF9QUk9YWV9GTEFHCisr CWlmIChsaW1pdGVkICYmIG9wdGlvbnMuZ3NpX2FsbG93X2xpbWl0ZWRfcHJveHkgIT0gMSkgewor KwkJZGVidWcoImxpbWl0ZWQgcHJveHkgbm90IGFjY2VwdGFibGUgZm9yIHJlbW90ZSBsb2dpbiIp OworIAkJcmV0dXJuIDA7CisgCX0KKysjZW5kaWYKKysKKyAJaWYgKGdzc2FwaV9jbGllbnQubWVj aCAmJiBnc3NhcGlfY2xpZW50Lm1lY2gtPnVzZXJvaykKKyAJCWlmICgoKmdzc2FwaV9jbGllbnQu bWVjaC0+dXNlcm9rKSgmZ3NzYXBpX2NsaWVudCwgdXNlcikpIHsKKyAJCQlnc3NhcGlfY2xpZW50 LnVzZWQgPSAxOworQEAgLTkyMyw2ICs5OTEsNyBAQAorIAkJCWdzc19yZWxlYXNlX2J1ZmZlcigm bG1pbiwgJmdzc2FwaV9jbGllbnQuZGlzcGxheW5hbWUpOworIAkJCWdzc19yZWxlYXNlX2J1ZmZl cigmbG1pbiwgJmdzc2FwaV9jbGllbnQuZXhwb3J0ZWRuYW1lKTsKKyAJCQlnc3NfcmVsZWFzZV9j cmVkKCZsbWluLCAmZ3NzYXBpX2NsaWVudC5jcmVkcyk7CisrCQkJZ3NzX3JlbGVhc2VfbmFtZSgm bG1pbiwgJmdzc2FwaV9jbGllbnQuY3R4X25hbWUpOworIAorIAkJCWlmIChnc3NhcGlfY2xpZW50 LmluZGljYXRvcnMgIT0gTlVMTCkgeworIAkJCQlmb3IgKGkgPSAwOyBnc3NhcGlfY2xpZW50Lmlu ZGljYXRvcnNbaV0gIT0gTlVMTDsgaSsrKQorQEAgLTkzOCw2ICsxMDA3LDI0IEBACisgCXJldHVy biAoMCk7CisgfQorIAorKy8qIFByaXZpbGVkZ2VkICovCisraW50Cisrc3NoX2dzc2FwaV9sb2Nh bG5hbWUoY2hhciAqKnVzZXIpCisreworKwkqdXNlciA9IE5VTEw7CisrCWlmIChnc3NhcGlfY2xp ZW50LmRpc3BsYXluYW1lLmxlbmd0aCA9PSAwIHx8CisrCSAgICBnc3NhcGlfY2xpZW50LmRpc3Bs YXluYW1lLnZhbHVlID09IE5VTEwpIHsKKysJCWRlYnVnKCJObyBzdWl0YWJsZSBjbGllbnQgZGF0 YSIpOworKwkJcmV0dXJuICgwKTsKKysJfQorKwlpZiAoZ3NzYXBpX2NsaWVudC5tZWNoICYmIGdz c2FwaV9jbGllbnQubWVjaC0+bG9jYWxuYW1lKSB7CisrCQlyZXR1cm4oKCpnc3NhcGlfY2xpZW50 Lm1lY2gtPmxvY2FsbmFtZSkoJmdzc2FwaV9jbGllbnQsdXNlcikpOworKwl9IGVsc2UgeworKwkJ ZGVidWcoIlVua25vd24gY2xpZW50IGF1dGhlbnRpY2F0aW9uIHR5cGUiKTsKKysJfQorKwlyZXR1 cm4gKDApOworK30KKysKKyAvKiBUaGVzZSBiaXRzIGFyZSBvbmx5IHVzZWQgZm9yIHJla2V5aW5n LiBUaGUgdW5wcml2aWxlZGdlZCBjaGlsZCBpcyBydW5uaW5nCisgICogYXMgdGhlIHVzZXIsIHRo ZSBtb25pdG9yIGlzIHJvb3QuCisgICoKK0BAIC05NjQsOSArMTA1MSwxMSBAQAorIAlwYW1faGFu ZGxlX3QgKnBhbWggPSBOVUxMOworIAlzdHJ1Y3QgcGFtX2NvbnYgcGFtY29udiA9IHtzc2hfZ3Nz YXBpX3NpbXBsZV9jb252LCBOVUxMfTsKKyAJY2hhciAqZW52c3RyOworKwljaGFyICoqcDsgY2hh ciAqKnB3OworICNlbmRpZgorIAorLQlpZiAoZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwgPT0g TlVMTCkKKysJaWYgKGdzc2FwaV9jbGllbnQuc3RvcmUuZmlsZW5hbWUgPT0gTlVMTCAmJgorKwkg ICAgZ3NzYXBpX2NsaWVudC5zdG9yZS5lbnZ2YWwgPT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKyAJ b2sgPSBtbV9zc2hfZ3NzYXBpX3VwZGF0ZV9jcmVkcygmZ3NzYXBpX2NsaWVudC5zdG9yZSk7CitA QCAtOTg2LDYgKzEwNzUsMTggQEAKKyAJaWYgKHJldCkKKyAJCXJldHVybjsKKyAKKysJLyogUHV0 IHNzaCBwYW0gc3RhY2sgZW52IHZhcmlhYmxlcyBpbiB0aGlzIG5ldyBwYW0gc3RhY2sgZW52Cisr CSAqIFVzaW5nIHBhbS1wa2luaXQsIEtSQjVDQ05BTUUgaXMgc2V0IGR1cmluZyBkb19wYW1fc2Vz c2lvbgorKwkgKiB0aGlzIGFkZGl0aW9uIGVuYWJsZXMgcGFtLXBraW5pdCB0byBhY2Nlc3MgS1JC NUNDTkFNRSBpZiB1c2VkCisrCSAqIGluIHNzaGQtcmVrZXkgc3RhY2sgdG9vCisrCSAqLworKwlw dyA9IHAgPSBmZXRjaF9wYW1fZW52aXJvbm1lbnQoKTsKKysJd2hpbGUgKCAqcHcgIT0gTlVMTCAp IHsKKysJCXBhbV9wdXRlbnYocGFtaCwgKnB3KTsKKysJCXB3Kys7CisrCX0KKysJZnJlZV9wYW1f ZW52aXJvbm1lbnQocCk7CisrCisgCXhhc3ByaW50ZigmZW52c3RyLCAiJXM9JXMiLCBnc3NhcGlf Y2xpZW50LnN0b3JlLmVudnZhciwKKyAJICAgIGdzc2FwaV9jbGllbnQuc3RvcmUuZW52dmFsKTsK KyAKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2dzcy1zZXJ2LWdzaS5jIG9wZW5zc2gt MTAuM3AxL2dzcy1zZXJ2LWdzaS5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9nc3Mtc2Vydi1n c2kuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAu M3AxL2dzcy1zZXJ2LWdzaS5jCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc0NDQ4NTc4ICswMjAwCitA QCAtMCwwICsxLDMyOCBAQAorKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDMgU2ltb24g V2lsa2luc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBBUyBJUycnIEFORCBB TlkgRVhQUkVTUyBPUgorKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKysgKiBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgor KyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwKKysgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisr ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZCisrICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKyAqIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorKyAq IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICovCisrCisrI2luY2x1ZGUgImluY2x1ZGVzLmgiCisrCisrI2lmZGVmIEdT U0FQSQorKyNpZmRlZiBHU0kKKysKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrI2luY2x1 ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAieG1hbGxv Yy5oIgorKyNpbmNsdWRlICJob3N0ZmlsZS5oIgorKyNpbmNsdWRlICJhdXRoLmgiCisrI2luY2x1 ZGUgImxvZy5oIgorKyNpbmNsdWRlICJtaXNjLmgiCisrI2luY2x1ZGUgInNlcnZjb25mLmgiCisr I2luY2x1ZGUgInNzaC1nc3MuaCIKKysKKytleHRlcm4gU2VydmVyT3B0aW9ucyBvcHRpb25zOwor KworKyNpbmNsdWRlIDxnbG9idXNfZ3NzX2Fzc2lzdC5oPgorKworK3N0YXRpYyBpbnQgc3NoX2dz c2FwaV9nc2lfdXNlcm9rKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQsIGNoYXIgKm5hbWUpOwor K3N0YXRpYyBpbnQgc3NoX2dzc2FwaV9nc2lfbG9jYWxuYW1lKHNzaF9nc3NhcGlfY2xpZW50ICpj bGllbnQsIGNoYXIgKip1c2VyKTsKKytzdGF0aWMgaW50IHNzaF9nc3NhcGlfZ3NpX3N0b3JlY3Jl ZHMoc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCk7Cisrc3RhdGljIGludCBzc2hfZ3NzYXBpX2dz aV9zdG9yZWNyZWRzX21pY3YyKHNzaF9nc3NhcGlfY2xpZW50ICpjbGllbnQpOworK3N0YXRpYyBp bnQgc3NoX2dzc2FwaV9nc2lfdXBkYXRlY3JlZHMoc3NoX2dzc2FwaV9jY2FjaGUgKnN0b3JlLAor KyAgICBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KTsKKytzdGF0aWMgaW50IHNzaF9nc3NhcGlf Z3NpX3VwZGF0ZWNyZWRzX21pY3YyKHNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSwKKysgICAgc3No X2dzc2FwaV9jbGllbnQgKmNsaWVudCk7CisrCisrc3NoX2dzc2FwaV9tZWNoIGdzc2FwaV9nc2lf bWVjaCA9IHsKKysJImRadUllYk1qZ1VxYXh2YkY3aERiQXc9PSIsCisrCSJHU0kiLAorKwl7OSwg Ilx4MkJceDA2XHgwMVx4MDRceDAxXHg5Qlx4NTBceDAxXHgwMSJ9LAorKwlOVUxMLAorKwkmc3No X2dzc2FwaV9nc2lfdXNlcm9rLAorKwkmc3NoX2dzc2FwaV9nc2lfbG9jYWxuYW1lLAorKwkmc3No X2dzc2FwaV9nc2lfc3RvcmVjcmVkcywKKysJJnNzaF9nc3NhcGlfZ3NpX3VwZGF0ZWNyZWRzCisr fTsKKysKKytzc2hfZ3NzYXBpX21lY2ggZ3NzYXBpX2dzaV9tZWNoX21pY3YyID0geworKwkidno4 SjFFOVB6THI4YjFLKzByZW1UZz09IiwKKysJIkdTSSIsCisrCXsxMCwgIlx4MmJceDA2XHgwMVx4 MDRceDAxXHg5Ylx4NTBceDAxXHgwMVx4MDEifSwKKysJTlVMTCwKKysJJnNzaF9nc3NhcGlfZ3Np X3VzZXJvaywKKysJJnNzaF9nc3NhcGlfZ3NpX2xvY2FsbmFtZSwKKysJJnNzaF9nc3NhcGlfZ3Np X3N0b3JlY3JlZHNfbWljdjIsCisrCSZzc2hfZ3NzYXBpX2dzaV91cGRhdGVjcmVkc19taWN2Mgor K307CisrCisrLyoKKysgKiBDaGVjayBpZiB0aGlzIHVzZXIgaXMgT0sgdG8gbG9naW4gdW5kZXIg R1NJLiBVc2VyIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQKKysgKiBhcyBpZGVudGl0eSBpbiBnbG9i YWwgJ2NsaWVudF9uYW1lLnZhbHVlJyBhbmQgaXMgdHJ5aW5nIHRvIGxvZyBpbiBhcyBwYXNzZWQK KysgKiB1c2VybmFtZSBpbiAnbmFtZScuCisrICoKKysgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHVz ZXIgaXMgYXV0aG9yaXplZCwgMCBvdGhlcndpc2UuCisrICovCisrc3RhdGljIGludAorK3NzaF9n c3NhcGlfZ3NpX3VzZXJvayhzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICpuYW1lKQor K3sKKysgICAgaW50IGF1dGhvcml6ZWQgPSAwOworKyAgICBnbG9idXNfcmVzdWx0X3QgcmVzOwor KyNpZmRlZiBIQVZFX0dMT0JVU19HU1NfQVNTSVNUX01BUF9BTkRfQVVUSE9SSVpFCisrICAgIGNo YXIgbG5hbWVbMjU2XSA9ICIiOworKyNlbmRpZgorKworKyNpZmRlZiBHTE9CVVNfR1NJX0dTU19B U1NJU1RfTU9EVUxFCisrICAgIGlmIChnbG9idXNfbW9kdWxlX2FjdGl2YXRlKEdMT0JVU19HU0lf R1NTX0FTU0lTVF9NT0RVTEUpICE9IDApIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9Cisr I2VuZGlmCisrCisrLyogdXNlIG5ldyBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6 ZSgpIGludGVyZmFjZSBpZiBhdmFpbGFibGUgKi8KKysjaWZkZWYgSEFWRV9HTE9CVVNfR1NTX0FT U0lTVF9NQVBfQU5EX0FVVEhPUklaRQorKyAgICBkZWJ1ZygiY2FsbGluZyBnbG9idXNfZ3NzX2Fz c2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpIik7CisrICAgIGlmIChHTE9CVVNfU1VDQ0VTUyAhPQor KyAgICAgICAgKHJlcyA9IGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKGNsaWVu dC0+Y29udGV4dCwgInNzaCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmFtZSwgbG5hbWUsIDI1NikpKSB7CisrICAgICAgICBkZWJ1ZygiJXMi LCBnbG9idXNfZXJyb3JfcHJpbnRfY2hhaW4oZ2xvYnVzX2Vycm9yX2dldChyZXMpKSk7CisrICAg IH0gZWxzZSBpZiAobG5hbWVbMF0gJiYgc3RyY21wKG5hbWUsIGxuYW1lKSAhPSAwKSB7CisrICAg ICAgICBkZWJ1ZygiR1NJIHVzZXIgbWFwcyB0byAlcywgbm90ICVzIiwgbG5hbWUsIG5hbWUpOwor KyAgICB9IGVsc2UgeworKyAgICAgICAgYXV0aG9yaXplZCA9IDE7CisrICAgIH0KKysjZWxzZQor KyAgICBkZWJ1ZygiY2FsbGluZyBnbG9idXNfZ3NzX2Fzc2lzdF91c2Vyb2soKSIpOworKyAgICBp ZiAoR0xPQlVTX1NVQ0NFU1MgIT0KKysgICAgICAgIChyZXMgPSAoZ2xvYnVzX2dzc19hc3Npc3Rf dXNlcm9rKGNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBuYW1lKSkpKSB7CisrICAgICAgICBkZWJ1ZygiJXMiLCBnbG9i dXNfZXJyb3JfcHJpbnRfY2hhaW4oZ2xvYnVzX2Vycm9yX2dldChyZXMpKSk7CisrICAgIH0gZWxz ZSB7CisrICAgICAgICBhdXRob3JpemVkID0gMTsKKysgICAgfQorKyNlbmRpZgorKworKyAgICBs b2dpdCgiR1NJIHVzZXIgJXMgaXMlcyBhdXRob3JpemVkIGFzIHRhcmdldCB1c2VyICVzIiwKKysg ICAgICAgIChjaGFyICopIGNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUsIChhdXRob3JpemVkID8g IiIgOiAiIG5vdCIpLCBuYW1lKTsKKysKKysgICAgcmV0dXJuIGF1dGhvcml6ZWQ7CisrfQorKwor Ky8qCisrICogUmV0dXJuIHRoZSBsb2NhbCB1c2VybmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIEdT SSBjcmVkZW50aWFscy4KKysgKi8KKytpbnQKKytzc2hfZ3NzYXBpX2dzaV9sb2NhbG5hbWUoc3No X2dzc2FwaV9jbGllbnQgKmNsaWVudCwgY2hhciAqKnVzZXIpCisreworKyAgICBnbG9idXNfcmVz dWx0X3QgcmVzOworKyNpZmRlZiBIQVZFX0dMT0JVU19HU1NfQVNTSVNUX01BUF9BTkRfQVVUSE9S SVpFCisrICAgIGNoYXIgbG5hbWVbMjU2XSA9ICIiOworKyNlbmRpZgorKworKyNpZmRlZiBHTE9C VVNfR1NJX0dTU19BU1NJU1RfTU9EVUxFCisrICAgIGlmIChnbG9idXNfbW9kdWxlX2FjdGl2YXRl KEdMT0JVU19HU0lfR1NTX0FTU0lTVF9NT0RVTEUpICE9IDApIHsKKysgICAgICAgIHJldHVybiAw OworKyAgICB9CisrI2VuZGlmCisrCisrLyogdXNlIG5ldyBnbG9idXNfZ3NzX2Fzc2lzdF9tYXBf YW5kX2F1dGhvcml6ZSgpIGludGVyZmFjZSBpZiBhdmFpbGFibGUgKi8KKysjaWZkZWYgSEFWRV9H TE9CVVNfR1NTX0FTU0lTVF9NQVBfQU5EX0FVVEhPUklaRQorKyAgICBkZWJ1ZygiY2FsbGluZyBn bG9idXNfZ3NzX2Fzc2lzdF9tYXBfYW5kX2F1dGhvcml6ZSgpIik7CisrICAgIGlmIChHTE9CVVNf U1VDQ0VTUyAhPQorKyAgICAgICAgKHJlcyA9IGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0 aG9yaXplKGNsaWVudC0+Y29udGV4dCwgInNzaCIsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgbG5hbWUsIDI1NikpKSB7CisrICAgICAg ICBkZWJ1ZygiJXMiLCBnbG9idXNfZXJyb3JfcHJpbnRfY2hhaW4oZ2xvYnVzX2Vycm9yX2dldChy ZXMpKSk7CisrICAgICAgICBsb2dpdCgiZmFpbGVkIHRvIG1hcCBHU0kgdXNlciAlcyIsIChjaGFy ICopY2xpZW50LT5kaXNwbGF5bmFtZS52YWx1ZSk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAg fQorKyAgICAqdXNlciA9IHN0cmR1cChsbmFtZSk7CisrI2Vsc2UKKysgICAgZGVidWcoImNhbGxp bmcgZ2xvYnVzX2dzc19hc3Npc3RfZ3JpZG1hcCgpIik7CisrICAgIGlmIChHTE9CVVNfU1VDQ0VT UyAhPQorKyAgICAgICAgKHJlcyA9IGdsb2J1c19nc3NfYXNzaXN0X2dyaWRtYXAoY2xpZW50LT5k aXNwbGF5bmFtZS52YWx1ZSwgdXNlcikpKSB7CisrICAgICAgICBkZWJ1ZygiJXMiLCBnbG9idXNf ZXJyb3JfcHJpbnRfY2hhaW4oZ2xvYnVzX2Vycm9yX2dldChyZXMpKSk7CisrICAgICAgICBsb2dp dCgiZmFpbGVkIHRvIG1hcCBHU0kgdXNlciAlcyIsIChjaGFyICopY2xpZW50LT5kaXNwbGF5bmFt ZS52YWx1ZSk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorKworKyAgICBs b2dpdCgiR1NJIHVzZXIgJXMgbWFwcGVkIHRvIHRhcmdldCB1c2VyICVzIiwKKysgICAgICAgIChj aGFyICopIGNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUsICp1c2VyKTsKKysKKysgICAgcmV0dXJu IDE7CisrfQorKworKy8qCisrICogRXhwb3J0IEdTSSBjcmVkZW50aWFscyB0byBkaXNrLgorKyAq LworK3N0YXRpYyBpbnQKKytzc2hfZ3NzYXBpX2dzaV9zdG9yZWNyZWRzKHNzaF9nc3NhcGlfY2xp ZW50ICpjbGllbnQpCisreworKwlPTV91aW50MzIJbWFqb3Jfc3RhdHVzOworKwlPTV91aW50MzIJ bWlub3Jfc3RhdHVzOworKwlnc3NfYnVmZmVyX2Rlc2MJZXhwb3J0X2NyZWQgPSBHU1NfQ19FTVBU WV9CVUZGRVI7CisrCWNoYXIgKgkJcDsKKysKKysJaWYgKCFjbGllbnQgfHwgIWNsaWVudC0+Y3Jl ZHMpIHsKKysJCXJldHVybiAwOworKwl9CisrCisrCW1ham9yX3N0YXR1cyA9IGdzc19leHBvcnRf Y3JlZCgmbWlub3Jfc3RhdHVzLAorKwkJCQkgICAgICAgY2xpZW50LT5jcmVkcywKKysJCQkJICAg ICAgIEdTU19DX05PX09JRCwKKysJCQkJICAgICAgIDEsCisrCQkJCSAgICAgICAmZXhwb3J0X2Ny ZWQpOworKwlpZiAoR1NTX0VSUk9SKG1ham9yX3N0YXR1cykgJiYgbWFqb3Jfc3RhdHVzICE9IEdT U19TX1VOQVZBSUxBQkxFKSB7CisrCQlHc3NjdHh0ICpjdHg7CisrCQlzc2hfZ3NzYXBpX2J1aWxk X2N0eCgmY3R4KTsKKysJCWN0eC0+bWFqb3IgPSBtYWpvcl9zdGF0dXM7CisrCQljdHgtPm1pbm9y ID0gbWlub3Jfc3RhdHVzOworKwkJc3NoX2dzc2FwaV9zZXRfb2lkKGN0eCwgJmdzc2FwaV9nc2lf bWVjaC5vaWQpOworKwkJc3NoX2dzc2FwaV9lcnJvcihjdHgpOworKwkJc3NoX2dzc2FwaV9kZWxl dGVfY3R4KCZjdHgpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJcCA9IHN0cmNocigoY2hhciAq KSBleHBvcnRfY3JlZC52YWx1ZSwgJz0nKTsKKysJaWYgKHAgPT0gTlVMTCkgeworKwkJbG9naXQo IkZhaWxlZCB0byBwYXJzZSBleHBvcnRlZCBjcmVkZW50aWFscyBzdHJpbmcgJyUuMTAwcyciLAor KwkJICAgIChjaGFyICopZXhwb3J0X2NyZWQudmFsdWUpOworKwkJZ3NzX3JlbGVhc2VfYnVmZmVy KCZtaW5vcl9zdGF0dXMsICZleHBvcnRfY3JlZCk7CisrCQlyZXR1cm4gMDsKKysJfQorKwkqcCsr ID0gJ1wwJzsKKysJaWYgKHN0cmNtcCgoY2hhciAqKWV4cG9ydF9jcmVkLnZhbHVlLCJYNTA5X1VT RVJfREVMRUdfUFJPWFkiKSA9PSAwKSB7CisrCQljbGllbnQtPnN0b3JlLmVudnZhciA9IHN0cmR1 cCgiWDUwOV9VU0VSX1BST1hZIik7CisrCX0gZWxzZSB7CisrCQljbGllbnQtPnN0b3JlLmVudnZh ciA9IHN0cmR1cCgoY2hhciAqKWV4cG9ydF9jcmVkLnZhbHVlKTsKKysJfQorKwlpZiAoYWNjZXNz KHAsIFJfT0spID09IDApIHsKKysJCWlmIChjbGllbnQtPnN0b3JlLmZpbGVuYW1lKSB7CisrCQkJ aWYgKHJlbmFtZShwLCBjbGllbnQtPnN0b3JlLmZpbGVuYW1lKSA8IDApIHsKKysJCQkJbG9naXQo IkZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzIiwgcCwKKysJCQkJICAgIGNsaWVudC0+c3Rv cmUuZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisrCQkJCWZyZWUoY2xpZW50LT5zdG9yZS5m aWxlbmFtZSk7CisrCQkJCWNsaWVudC0+c3RvcmUuZmlsZW5hbWUgPSBzdHJkdXAocCk7CisrCQkJ fSBlbHNlIHsKKysJCQkJcCA9IGNsaWVudC0+c3RvcmUuZmlsZW5hbWU7CisrCQkJfQorKwkJfSBl bHNlIHsKKysJCQljbGllbnQtPnN0b3JlLmZpbGVuYW1lID0gc3RyZHVwKHApOworKwkJfQorKwl9 CisrCWNsaWVudC0+c3RvcmUuZW52dmFsID0gc3RyZHVwKHApOworKyNpZmRlZiBVU0VfUEFNCisr CWlmIChvcHRpb25zLnVzZV9wYW0pCisrCQlkb19wYW1fcHV0ZW52KGNsaWVudC0+c3RvcmUuZW52 dmFyLCBjbGllbnQtPnN0b3JlLmVudnZhbCk7CisrI2VuZGlmCisrCWdzc19yZWxlYXNlX2J1ZmZl cigmbWlub3Jfc3RhdHVzLCAmZXhwb3J0X2NyZWQpOworKworKwlyZXR1cm4gMTsKKyt9CisrCisr LyoKKysgKiBFeHBvcnQgR1NJIGNyZWRlbnRpYWxzIHRvIGRpc2suCisrICovCisrc3RhdGljIGlu dAorK3NzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHNfbWljdjIoc3NoX2dzc2FwaV9jbGllbnQgKmNs aWVudCkKKyt7CisrCU9NX3VpbnQzMgltYWpvcl9zdGF0dXM7CisrCU9NX3VpbnQzMgltaW5vcl9z dGF0dXM7CisrCWdzc19idWZmZXJfZGVzYwlleHBvcnRfY3JlZCA9IEdTU19DX0VNUFRZX0JVRkZF UjsKKysJY2hhciAqCQlwOworKworKwlpZiAoIWNsaWVudCB8fCAhY2xpZW50LT5jcmVkcykgewor KwkJcmV0dXJuIDA7CisrCX0KKysKKysJbWFqb3Jfc3RhdHVzID0gZ3NzX2V4cG9ydF9jcmVkKCZt aW5vcl9zdGF0dXMsCisrCQkJCSAgICAgICBjbGllbnQtPmNyZWRzLAorKwkJCQkgICAgICAgR1NT X0NfTk9fT0lELAorKwkJCQkgICAgICAgMSwKKysJCQkJICAgICAgICZleHBvcnRfY3JlZCk7Cisr CWlmIChHU1NfRVJST1IobWFqb3Jfc3RhdHVzKSAmJiBtYWpvcl9zdGF0dXMgIT0gR1NTX1NfVU5B VkFJTEFCTEUpIHsKKysJCUdzc2N0eHQgKmN0eDsKKysJCXNzaF9nc3NhcGlfYnVpbGRfY3R4KCZj dHgpOworKwkJY3R4LT5tYWpvciA9IG1ham9yX3N0YXR1czsKKysJCWN0eC0+bWlub3IgPSBtaW5v cl9zdGF0dXM7CisrCQlzc2hfZ3NzYXBpX3NldF9vaWQoY3R4LCAmZ3NzYXBpX2dzaV9tZWNoX21p Y3YyLm9pZCk7CisrCQlzc2hfZ3NzYXBpX2Vycm9yKGN0eCk7CisrCQlzc2hfZ3NzYXBpX2RlbGV0 ZV9jdHgoJmN0eCk7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwlwID0gc3RyY2hyKChjaGFyICop IGV4cG9ydF9jcmVkLnZhbHVlLCAnPScpOworKwlpZiAocCA9PSBOVUxMKSB7CisrCQlsb2dpdCgi RmFpbGVkIHRvIHBhcnNlIGV4cG9ydGVkIGNyZWRlbnRpYWxzIHN0cmluZyAnJS4xMDBzJyIsCisr CQkgICAgKGNoYXIgKilleHBvcnRfY3JlZC52YWx1ZSk7CisrCQlnc3NfcmVsZWFzZV9idWZmZXIo Jm1pbm9yX3N0YXR1cywgJmV4cG9ydF9jcmVkKTsKKysJCXJldHVybiAwOworKwl9CisrCSpwKysg PSAnXDAnOworKwlpZiAoc3RyY21wKChjaGFyICopZXhwb3J0X2NyZWQudmFsdWUsIlg1MDlfVVNF Ul9ERUxFR19QUk9YWSIpID09IDApIHsKKysJCWNsaWVudC0+c3RvcmUuZW52dmFyID0gc3RyZHVw KCJYNTA5X1VTRVJfUFJPWFkiKTsKKysJfSBlbHNlIHsKKysJCWNsaWVudC0+c3RvcmUuZW52dmFy ID0gc3RyZHVwKChjaGFyICopZXhwb3J0X2NyZWQudmFsdWUpOworKwl9CisrCWlmIChhY2Nlc3Mo cCwgUl9PSykgPT0gMCkgeworKwkJaWYgKGNsaWVudC0+c3RvcmUuZmlsZW5hbWUpIHsKKysJCQlp ZiAocmVuYW1lKHAsIGNsaWVudC0+c3RvcmUuZmlsZW5hbWUpIDwgMCkgeworKwkJCQlsb2dpdCgi RmFpbGVkIHRvIHJlbmFtZSAlcyB0byAlczogJXMiLCBwLAorKwkJCQkgICAgY2xpZW50LT5zdG9y ZS5maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKysJCQkJZnJlZShjbGllbnQtPnN0b3JlLmZp bGVuYW1lKTsKKysJCQkJY2xpZW50LT5zdG9yZS5maWxlbmFtZSA9IHN0cmR1cChwKTsKKysJCQl9 IGVsc2UgeworKwkJCQlwID0gY2xpZW50LT5zdG9yZS5maWxlbmFtZTsKKysJCQl9CisrCQl9IGVs c2UgeworKwkJCWNsaWVudC0+c3RvcmUuZmlsZW5hbWUgPSBzdHJkdXAocCk7CisrCQl9CisrCX0K KysJY2xpZW50LT5zdG9yZS5lbnZ2YWwgPSBzdHJkdXAocCk7CisrI2lmZGVmIFVTRV9QQU0KKysJ aWYgKG9wdGlvbnMudXNlX3BhbSkKKysJCWRvX3BhbV9wdXRlbnYoY2xpZW50LT5zdG9yZS5lbnZ2 YXIsIGNsaWVudC0+c3RvcmUuZW52dmFsKTsKKysjZW5kaWYKKysJZ3NzX3JlbGVhc2VfYnVmZmVy KCZtaW5vcl9zdGF0dXMsICZleHBvcnRfY3JlZCk7CisrCisrCXJldHVybiAxOworK30KKysKKysv KgorKyAqIEV4cG9ydCB1cGRhdGVkIEdTSSBjcmVkZW50aWFscyB0byBkaXNrLgorKyAqLworK3N0 YXRpYyBpbnQKKytzc2hfZ3NzYXBpX2dzaV91cGRhdGVjcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAq c3RvcmUsc3NoX2dzc2FwaV9jbGllbnQgKmNsaWVudCkKKyt7CisrCXJldHVybiBzc2hfZ3NzYXBp X2dzaV9zdG9yZWNyZWRzKGNsaWVudCk7CisrfQorKworKy8qCisrICogRXhwb3J0IHVwZGF0ZWQg R1NJIGNyZWRlbnRpYWxzIHRvIGRpc2suCisrICovCisrc3RhdGljIGludAorK3NzaF9nc3NhcGlf Z3NpX3VwZGF0ZWNyZWRzX21pY3YyKHNzaF9nc3NhcGlfY2NhY2hlICpzdG9yZSxzc2hfZ3NzYXBp X2NsaWVudCAqY2xpZW50KQorK3sKKysJcmV0dXJuIHNzaF9nc3NhcGlfZ3NpX3N0b3JlY3JlZHNf bWljdjIoY2xpZW50KTsKKyt9CisrCisrI2VuZGlmIC8qIEdTSSAqLworKyNlbmRpZiAvKiBHU1NB UEkgKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2dzcy1zZXJ2LWtyYjUuYyBvcGVu c3NoLTEwLjNwMS9nc3Mtc2Vydi1rcmI1LmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2dzcy1z ZXJ2LWtyYjUuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjg2ODA0OTkyOCArMDIwMAorKysrIG9wZW5z c2gtMTAuM3AxL2dzcy1zZXJ2LWtyYjUuYwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU3NDgwODYzNCAr MDIwMAorQEAgLTQ1MCw2ICs0NTAsMzQgQEAKKyAJcmV0dXJuIGZvdW5kX3ByaW5jaXBhbDsKKyB9 CisgIAorKy8qIFJldHJpZXZlIHRoZSBsb2NhbCB1c2VybmFtZSBhc3NvY2lhdGVkIHdpdGggYSBz ZXQgb2YgS2VyYmVyb3MKKysgKiBjcmVkZW50aWFscy4gSG9wZWZ1bGx5IHdlIGNhbiB1c2UgdGhp cyBmb3IgdGhlICdlbXB0eScgdXNlcm5hbWUKKysgKiBsb2dpbnMgZGlzY3Vzc2VkIGluIHRoZSBk cmFmdCAgKi8KKytzdGF0aWMgaW50Cisrc3NoX2dzc2FwaV9rcmI1X2xvY2FsbmFtZShzc2hfZ3Nz YXBpX2NsaWVudCAqY2xpZW50LCBjaGFyICoqdXNlcikgeworKwlrcmI1X3ByaW5jaXBhbCBwcmlu YzsKKysJaW50IHJldHZhbDsKKysKKysJaWYgKHNzaF9nc3NhcGlfa3JiNV9pbml0KCkgPT0gMCkK KysJCXJldHVybiAwOworKworKwlpZiAoKHJldHZhbD1rcmI1X3BhcnNlX25hbWUoa3JiX2NvbnRl eHQsIGNsaWVudC0+ZGlzcGxheW5hbWUudmFsdWUsCisrCSAgICAmcHJpbmMpKSkgeworKwkJbG9n aXQoImtyYjVfcGFyc2VfbmFtZSgpOiAlLjEwMHMiLAorKwkJICAgIGtyYjVfZ2V0X2Vycl90ZXh0 KGtyYl9jb250ZXh0LHJldHZhbCkpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJLyogV2UndmUg Z290IHRvIHJldHVybiBhIG1hbGxvYydkIHN0cmluZyAqLworKwkqdXNlciA9IChjaGFyICopeG1h bGxvYygyNTYpOworKwlpZiAoa3JiNV9hbmFtZV90b19sb2NhbG5hbWUoa3JiX2NvbnRleHQsIHBy aW5jLCAyNTYsICp1c2VyKSkgeworKwkJZnJlZSgqdXNlcik7CisrCQkqdXNlciA9IE5VTEw7Cisr CQlyZXR1cm4oMCk7CisrCX0KKysKKysJcmV0dXJuKDEpOworK30KKyAKKyAvKiBUaGlzIHdyaXRl cyBvdXQgYW55IGZvcndhcmRlZCBjcmVkZW50aWFscyBmcm9tIHRoZSBzdHJ1Y3R1cmUgcG9wdWxh dGVkCisgICogZHVyaW5nIHVzZXJhdXRoLiBDYWxsZWQgYWZ0ZXIgd2UgaGF2ZSBzZXR1aWQgdG8g dGhlIHVzZXIgKi8KK0BAIC01NDQsNyArNTcyLDcgQEAKKyAJcmV0dXJuIHNldF9lbnY7CisgfQor IAorLWludAorK3N0YXRpYyBpbnQKKyBzc2hfZ3NzYXBpX2tyYjVfdXBkYXRlY3JlZHMoc3NoX2dz c2FwaV9jY2FjaGUgKnN0b3JlLAorICAgICBzc2hfZ3NzYXBpX2NsaWVudCAqY2xpZW50KQorIHsK K0BAIC04NDAsNyArODY4LDcgQEAKKyAJezksICJceDJBXHg4Nlx4NDhceDg2XHhGN1x4MTJceDAx XHgwMlx4MDIifSwKKyAJTlVMTCwKKyAJJnNzaF9nc3NhcGlfa3JiNV91c2Vyb2ssCistCU5VTEws CisrCSZzc2hfZ3NzYXBpX2tyYjVfbG9jYWxuYW1lLAorIAkmc3NoX2dzc2FwaV9rcmI1X3N0b3Jl Y3JlZHMsCisgCSZzc2hfZ3NzYXBpX2tyYjVfdXBkYXRlY3JlZHMKKyB9OworZGlmZiAtTnVyIG9w ZW5zc2gtMTAuM3AxLm9yaWcva2V4Z3Nzcy5jIG9wZW5zc2gtMTAuM3AxL2tleGdzc3MuYworLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcva2V4Z3Nzcy5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuMzIwNjgw MTcyICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEva2V4Z3Nzcy5jCTIwMjYtMDctMDEgMTA6Mzk6 NDMuNTc1MTY0NzIzICswMjAwCitAQCAtNDgsNiArNDgsNyBAQAorICNpbmNsdWRlICJkaWdlc3Qu aCIKKyAjaW5jbHVkZSAic3NoZXJyLmgiCisgCisrc3RhdGljIHZvaWQga2V4X2dzc19zZW5kX2Vy cm9yKEdzc2N0eHQgKmN0eHQsIHN0cnVjdCBzc2ggKnNzaCk7CisgZXh0ZXJuIFNlcnZlck9wdGlv bnMgb3B0aW9uczsKKyAKKyBzdGF0aWMgaW50IGlucHV0X2tleGdzc19pbml0KGludCwgdV9pbnQz Ml90LCBzdHJ1Y3Qgc3NoICopOworQEAgLTgxLDggKzgyLDEwIEBACisgCisgCWRlYnVnMl9mKCJB Y3F1aXJpbmcgY3JlZGVudGlhbHMiKTsKKyAKKy0JaWYgKEdTU19FUlJPUihtbV9zc2hfZ3NzYXBp X3NlcnZlcl9jdHgoJmtleC0+Z3NzLCBvaWQpKSkKKysJaWYgKEdTU19FUlJPUihtbV9zc2hfZ3Nz YXBpX3NlcnZlcl9jdHgoJmtleC0+Z3NzLCBvaWQpKSkgeworKwkJa2V4X2dzc19zZW5kX2Vycm9y KGtleC0+Z3NzLCBzc2gpOworIAkJZmF0YWwoIlVuYWJsZSB0byBhY3F1aXJlIGNyZWRlbnRpYWxz IGZvciB0aGUgc2VydmVyIik7CisrCX0KKyAKKyAJc3NoX2dzc2FwaV9idWlsZF9jdHgoJmtleC0+ Z3NzKTsKKyAJaWYgKGtleC0+Z3NzID09IE5VTEwpCitAQCAtMTM5LDEzICsxNDIsMTQgQEAKKyAJ c3NoX2Rpc3BhdGNoX3NldChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSwgTlVMTCk7Cisg CisgCWlmIChHU1NfRVJST1IoZ3NzLT5tYWpvcikpIHsKKysJCWtleF9nc3Nfc2VuZF9lcnJvcihr ZXgtPmdzcywgc3NoKTsKKyAJCWlmIChzZW5kX3Rvay0+bGVuZ3RoID4gMCkgeworIAkJCWlmICgo ciA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0tFWEdTU19DT05USU5VRSkpICE9IDAgfHwK KyAJCQkgICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIHNlbmRfdG9rLT52YWx1ZSwgc2Vu ZF90b2stPmxlbmd0aCkpICE9IDAgfHwKKyAJCQkgICAgKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAh PSAwKQorIAkJCQlmYXRhbCgic3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKKyAJCX0K Ky0JCWZhdGFsKCJhY2NlcHRfY3R4IGRpZWQiKTsKKysJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChz c2gsICJHU1NBUEkgS2V5IEV4Y2hhbmdlIGhhbmRzaGFrZSBmYWlsZWQiKTsKKyAJfQorIAorIAlp ZiAoISgqcmV0X2ZsYWdzICYgR1NTX0NfTVVUVUFMX0ZMQUcpKQorQEAgLTYwMCw0ICs2MDQsMjYg QEAKKyAJcmV0dXJuIGtleGdzc2dleF9maW5hbChzc2gsICZzZW5kX3RvaywgJnJldF9mbGFncyk7 CisgfQorIAorK3N0YXRpYyB2b2lkCisra2V4X2dzc19zZW5kX2Vycm9yKEdzc2N0eHQgKmN0eHQs IHN0cnVjdCBzc2ggKnNzaCkgeworKwljaGFyICplcnJzdHI7CisrCU9NX3VpbnQzMiBtYWosIG1p bjsKKysJaW50IHI7CisrCisrCWVycnN0ciA9IG1tX3NzaF9nc3NhcGlfbGFzdF9lcnJvcihjdHh0 LCAmbWFqLCAmbWluKTsKKysJaWYgKGVycnN0cikgeworKwkJaWYgKChyID0gc3NocGt0X3N0YXJ0 KHNzaCwgU1NIMl9NU0dfS0VYR1NTX0VSUk9SKSkgIT0gMCB8fAorKwkJICAgIChyID0gc3NocGt0 X3B1dF91MzIoc3NoLCBtYWopKSAhPSAwIHx8CisrCQkgICAgKHIgPSBzc2hwa3RfcHV0X3UzMihz c2gsIG1pbikpICE9IDAgfHwKKysJCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGVy cnN0cikpICE9IDAgfHwKKysJCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsICIiKSkg IT0gMCB8fAorKwkJICAgIChyID0gc3NocGt0X3NlbmQoc3NoKSkgIT0gMCkKKysJCQlmYXRhbCgi c3NocGt0IGZhaWxlZDogJXMiLCBzc2hfZXJyKHIpKTsKKysJCWlmICgociA9IHNzaF9wYWNrZXRf d3JpdGVfd2FpdChzc2gpKSAhPSAwKQorKwkJCWZhdGFsKCJzc2hfcGFja2V0X3dyaXRlX3dhaXQ6 ICVzIiwgc3NoX2VycihyKSk7CisrCQkvKiBYWFggLSBXZSBzaG91bGQgcHJvYmFibHkgbG9nIHRo ZSBlcnJvciBsb2NhbGx5IGhlcmUgKi8KKysJCWZyZWUoZXJyc3RyKTsKKysJfQorK30KKysKKyAj ZW5kaWYgLyogZGVmaW5lZChHU1NBUEkpICYmIGRlZmluZWQoV0lUSF9PUEVOU1NMKSAqLworZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvTWFrZWZpbGUuaW4gb3BlbnNzaC0xMC4zcDEvTWFr ZWZpbGUuaW4KKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL01ha2VmaWxlLmluCTIwMjYtMDctMDEg MDk6Mzg6MDAuOTIxNjAwNzY2ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvTWFrZWZpbGUuaW4J MjAyNi0wNy0wMSAxMDozOTo0My41NzU0NjAzNDkgKzAyMDAKK0BAIC0xMzMsNyArMTMzLDcgQEAK KyAJYXV0aC1ic2RhdXRoLm8gYXV0aDItaG9zdGJhc2VkLm8gYXV0aDIta2JkaW50Lm8gXAorIAlh dXRoMi1ub25lLm8gYXV0aDItcGFzc3dkLm8gYXV0aDItcHVia2V5Lm8gYXV0aDItcHVia2V5Zmls ZS5vIFwKKyAJbW9uaXRvci5vIG1vbml0b3Jfd3JhcC5vIGF1dGgta3JiNS5vIGtleGdzc3MubyBc CistCWF1dGgyLWdzcy5vIGdzcy1zZXJ2Lm8gZ3NzLXNlcnYta3JiNS5vIFwKKysJYXV0aDItZ3Nz Lm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8gZ3NzLXNlcnYtZ3NpLm8gXAorIAlsb2dpbnJl Yy5vIGF1dGgtcGFtLm8gYXV0aC1zaGFkb3cubyBhdXRoLXNpYS5vIFwKKyAJc2Z0cC1zZXJ2ZXIu byBzZnRwLWNvbW1vbi5vIFwKKyAJdWlkc3dhcC5vIHBsYXRmb3JtLWxpc3Rlbi5vICQoUDExT0JK UykgJChTS09CSlMpCitAQCAtMTQ0LDcgKzE0NCw3IEBACisgCXNlcnZlcmxvb3AubyBhdXRoLm8g YXV0aDIubyBhdXRoLW9wdGlvbnMubyBzZXNzaW9uLm8gYXV0aDItY2hhbGwubyBcCisgCWdyb3Vw YWNjZXNzLm8gYXV0aC1ic2RhdXRoLm8gYXV0aDItaG9zdGJhc2VkLm8gYXV0aDIta2JkaW50Lm8g XAorIAlhdXRoMi1ub25lLm8gYXV0aDItcGFzc3dkLm8gYXV0aDItcHVia2V5Lm8gYXV0aDItcHVi a2V5ZmlsZS5vIFwKKy0JYXV0aDItZ3NzLm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8ga2V4 Z3Nzcy5vIFwKKysJYXV0aDItZ3NzLm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8gZ3NzLXNl cnYtZ3NpLm8ga2V4Z3Nzcy5vIFwKKyAJbW9uaXRvcl93cmFwLm8gYXV0aC1rcmI1Lm8gXAorIAlh dWRpdC5vIGF1ZGl0LWJzbS5vIGF1ZGl0LWxpbnV4Lm8gcGxhdGZvcm0ubyBcCisgCWxvZ2lucmVj Lm8gYXV0aC1wYW0ubyBhdXRoLXNoYWRvdy5vIGF1dGgtc2lhLm8gXAorZGlmZiAtTnVyIG9wZW5z c2gtMTAuM3AxLm9yaWcvbWlzYy5jIG9wZW5zc2gtMTAuM3AxL21pc2MuYworLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvbWlzYy5jCTIwMjYtMDctMDEgMDk6Mzg6MDAuOTEzNjE3NzA5ICswMjAwCisr Kysgb3BlbnNzaC0xMC4zcDEvbWlzYy5jCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc1NTY1MTA2ICsw MjAwCitAQCAtNDY0LDExICs0NjQsMTQgQEAKKyAjZGVmaW5lIFdISVRFU1BBQ0UgIiBcdFxyXG4i CisgI2RlZmluZSBRVU9URQkiXCIiCisgCisrLyogQ2hhcmFjdGVycyBjb25zaWRlcmVkIGFzIHF1 b3RhdGlvbnMuICovCisrI2RlZmluZSBRVU9URVMgIidcIiIKKysKKyAvKiByZXR1cm4gbmV4dCB0 b2tlbiBpbiBjb25maWd1cmF0aW9uIGxpbmUgKi8KKyBzdGF0aWMgY2hhciAqCisgc3RyZGVsaW1f aW50ZXJuYWwoY2hhciAqKnMsIGludCBzcGxpdF9lcXVhbHMpCisgeworLQljaGFyICpvbGQ7Cisr CWNoYXIgKm9sZCwgKnAsICpxOworIAlpbnQgd3NwYWNlID0gMDsKKyAKKyAJaWYgKCpzID09IE5V TEwpCitAQCAtNDc2LDYgKzQ3OSwyMSBAQAorIAorIAlvbGQgPSAqczsKKyAKKysJaWYgKChxPXN0 cmNocihRVU9URVMsIChpbnQpICpvbGQpKSAmJiAqcSkKKysJeworKwkJLyogZmluZCBuZXh0IHF1 b3RlIGNoYXJhY3RlciwgcG9pbnQgb2xkIHRvIHN0YXJ0IG9mIHF1b3RlZAorKwkJICogc3RyaW5n ICovCisrCQlmb3IgKHAgPSArK29sZDsgKnAgJiYgKnAgIT0gKnE7IHArKykKKysJCQk7CisrCisr CQkvKiBmaW5kIHN0YXJ0IG9mIG5leHQgdG9rZW4gKi8KKysJCSpzID0gKCpwKSA/IHAgKyBzdHJz cG4ocCArIDEsIFdISVRFU1BBQ0UpICsgMSA6IE5VTEw7CisrCisrCQkvKiB0ZXJtaW5hdGUgJ29s ZCcgdG9rZW4gKi8KKysJCSpwID0gJ1wwJzsKKysJCXJldHVybiAob2xkKTsKKysJfQorKworIAkq cyA9IHN0cnBicmsoKnMsCisgCSAgICBzcGxpdF9lcXVhbHMgPyBXSElURVNQQUNFIFFVT1RFICI9 IiA6IFdISVRFU1BBQ0UgUVVPVEUpOworIAlpZiAoKnMgPT0gTlVMTCkKK2RpZmYgLU51ciBvcGVu c3NoLTEwLjNwMS5vcmlnL21vbml0b3IuYyBvcGVuc3NoLTEwLjNwMS9tb25pdG9yLmMKKy0tLSBv cGVuc3NoLTEwLjNwMS5vcmlnL21vbml0b3IuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjkxMzkwMjAy NCArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL21vbml0b3IuYwkyMDI2LTA3LTAxIDEwOjM5OjQz LjU3Njc0NjIxNSArMDIwMAorQEAgLTE0Miw2ICsxNDIsOSBAQAorIGludCBtbV9hbnN3ZXJfZ3Nz X3VzZXJvayhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKyBpbnQgbW1fYW5z d2VyX2dzc19jaGVja21pYyhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKyBp bnQgbW1fYW5zd2VyX2dzc19zaWduKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3NoYnVmICop OworK2ludCBtbV9hbnN3ZXJfZ3NzX2Vycm9yKHN0cnVjdCBzc2ggKiwgaW50LCBzdHJ1Y3Qgc3No YnVmICopOworK2ludCBtbV9hbnN3ZXJfZ3NzX2luZGljYXRlX21lY2hzKHN0cnVjdCBzc2ggKiwg aW50LCBzdHJ1Y3Qgc3NoYnVmICopOworK2ludCBtbV9hbnN3ZXJfZ3NzX2xvY2FsbmFtZShzdHJ1 Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKyBpbnQgbW1fYW5zd2VyX2dzc191cGRh dGVjcmVkcyhzdHJ1Y3Qgc3NoICosIGludCwgc3RydWN0IHNzaGJ1ZiAqKTsKKyAjZW5kaWYKKyAK K0BAIC0xOTksNyArMjAyLDcgQEAKKyAjZW5kaWYKKyAgICAge01PTklUT1JfUkVRX1NFVENPTVBB VCwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zZXRjb21wYXR9LAorICAgICB7TU9OSVRPUl9SRVFfU0lH TiwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zaWdufSwKKy0gICAge01PTklUT1JfUkVRX1BXTkFNLCBN T05fT05DRSwgbW1fYW5zd2VyX3B3bmFtYWxsb3d9LAorKyAgICB7TU9OSVRPUl9SRVFfUFdOQU0s IE1PTl9BVVRILCBtbV9hbnN3ZXJfcHduYW1hbGxvd30sCisgICAgIHtNT05JVE9SX1JFUV9BVVRI U0VSViwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9hdXRoc2Vydn0sCisgI2lmZGVmIFdJVEhfU0VMSU5V WAorICAgICB7TU9OSVRPUl9SRVFfQVVUSFJPTEUsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfYXV0aHJv bGV9LAorQEAgLTIwNyw3ICsyMTAsNyBAQAorICAgICB7TU9OSVRPUl9SRVFfQVVUSDJfUkVBRF9C QU5ORVIsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfYXV0aDJfcmVhZF9iYW5uZXJ9LAorICAgICB7TU9O SVRPUl9SRVFfQVVUSFBBU1NXT1JELCBNT05fQVVUSCwgbW1fYW5zd2VyX2F1dGhwYXNzd29yZH0s CisgI2lmZGVmIFVTRV9QQU0KKy0gICAge01PTklUT1JfUkVRX1BBTV9TVEFSVCwgTU9OX09OQ0Us IG1tX2Fuc3dlcl9wYW1fc3RhcnR9LAorKyAgICB7TU9OSVRPUl9SRVFfUEFNX1NUQVJULCBNT05f SVNBVVRILCBtbV9hbnN3ZXJfcGFtX3N0YXJ0fSwKKyAgICAge01PTklUT1JfUkVRX1BBTV9BQ0NP VU5ULCAwLCBtbV9hbnN3ZXJfcGFtX2FjY291bnR9LAorICAgICB7TU9OSVRPUl9SRVFfUEFNX0lO SVRfQ1RYLCBNT05fT05DRSwgbW1fYW5zd2VyX3BhbV9pbml0X2N0eH0sCisgICAgIHtNT05JVE9S X1JFUV9QQU1fUVVFUlksIDAsIG1tX2Fuc3dlcl9wYW1fcXVlcnl9LAorQEAgLTIzMSw4ICsyMzQs MTEgQEAKKyAgICAge01PTklUT1JfUkVRX0dTU1NFVFVQLCBNT05fSVNBVVRILCBtbV9hbnN3ZXJf Z3NzX3NldHVwX2N0eH0sCisgICAgIHtNT05JVE9SX1JFUV9HU1NTVEVQLCAwLCBtbV9hbnN3ZXJf Z3NzX2FjY2VwdF9jdHh9LAorICAgICB7TU9OSVRPUl9SRVFfR1NTVVNFUk9LLCBNT05fT05DRXxN T05fQVVUSERFQ0lERSwgbW1fYW5zd2VyX2dzc191c2Vyb2t9LAorLSAgICB7TU9OSVRPUl9SRVFf R1NTQ0hFQ0tNSUMsIE1PTl9PTkNFLCBtbV9hbnN3ZXJfZ3NzX2NoZWNrbWljfSwKKysgICAge01P TklUT1JfUkVRX0dTU0NIRUNLTUlDLCBNT05fSVNBVVRILCBtbV9hbnN3ZXJfZ3NzX2NoZWNrbWlj fSwKKyAgICAge01PTklUT1JfUkVRX0dTU1NJR04sIE1PTl9PTkNFLCBtbV9hbnN3ZXJfZ3NzX3Np Z259LAorKyAgICB7TU9OSVRPUl9SRVFfR1NTRVJSLCBNT05fSVNBVVRIIHwgTU9OX09OQ0UsIG1t X2Fuc3dlcl9nc3NfZXJyb3J9LAorKyAgICB7TU9OSVRPUl9SRVFfR1NTTUVDSFMsIE1PTl9JU0FV VEgsIG1tX2Fuc3dlcl9nc3NfaW5kaWNhdGVfbWVjaHN9LAorKyAgICB7TU9OSVRPUl9SRVFfR1NT TE9DQUxOQU1FLCBNT05fSVNBVVRILCBtbV9hbnN3ZXJfZ3NzX2xvY2FsbmFtZX0sCisgI2VuZGlm CisgICAgIHswLCAwLCBOVUxMfQorIH07CitAQCAtMjQyLDYgKzI0OCw4IEBACisgICAgIHtNT05J VE9SX1JFUV9HU1NTRVRVUCwgMCwgbW1fYW5zd2VyX2dzc19zZXR1cF9jdHh9LAorICAgICB7TU9O SVRPUl9SRVFfR1NTU1RFUCwgMCwgbW1fYW5zd2VyX2dzc19hY2NlcHRfY3R4fSwKKyAgICAge01P TklUT1JfUkVRX0dTU1NJR04sIDAsIG1tX2Fuc3dlcl9nc3Nfc2lnbn0sCisrICAgIHtNT05JVE9S X1JFUV9HU1NFUlIsIDAsIG1tX2Fuc3dlcl9nc3NfZXJyb3J9LAorKyAgICB7TU9OSVRPUl9SRVFf R1NTTUVDSFMsIDAsIG1tX2Fuc3dlcl9nc3NfaW5kaWNhdGVfbWVjaHN9LAorICAgICB7TU9OSVRP Ul9SRVFfR1NTVVBDUkVEUywgMCwgbW1fYW5zd2VyX2dzc191cGRhdGVjcmVkc30sCisgI2VuZGlm CisgICAgIHtNT05JVE9SX1JFUV9TVEFURSwgTU9OX09OQ0UsIG1tX2Fuc3dlcl9zdGF0ZX0sCitA QCAtMzIzLDYgKzMzMSw4IEBACisgI2lmZGVmIEdTU0FQSQorIAkvKiBhbmQgZm9yIHRoZSBHU1NB UEkga2V5IGV4Y2hhbmdlICovCisgCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRP Ul9SRVFfR1NTU0VUVVAsIDEpOworKwltb25pdG9yX3Blcm1pdChtb25fZGlzcGF0Y2gsIE1PTklU T1JfUkVRX0dTU0VSUiwgMSk7CisrCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRP Ul9SRVFfR1NTTUVDSFMsIDEpOworICNlbmRpZgorIAorIAkvKiBUaGUgZmlyc3QgZmV3IHJlcXVl c3RzIGRvIG5vdCByZXF1aXJlIGFzeW5jaHJvbm91cyBhY2Nlc3MgKi8KK0BAIC00NzQsNiArNDg0 LDggQEAKKyAjaWZkZWYgR1NTQVBJCisgCS8qIGFuZCBmb3IgdGhlIEdTU0FQSSBrZXkgZXhjaGFu Z2UgKi8KKyAJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NTRVRV UCwgMSk7CisrCW1vbml0b3JfcGVybWl0KG1vbl9kaXNwYXRjaCwgTU9OSVRPUl9SRVFfR1NTRVJS LCAxKTsKKysJbW9uaXRvcl9wZXJtaXQobW9uX2Rpc3BhdGNoLCBNT05JVE9SX1JFUV9HU1NNRUNI UywgMSk7CisgI2VuZGlmCisgCisgCWlmIChhdXRoX29wdHMtPnBlcm1pdF9wdHlfZmxhZykgewor QEAgLTkzNiwxNCArOTQ4LDE3IEBACisgCWlmICghY29tcGF0X3NldCkKKyAJCWZhdGFsX2YoInN0 YXRlIGVycm9yOiBzZXRjb21wYXQgbmV2ZXIgY2FsbGVkIik7CisgCistCWlmIChhdXRoY3R4dC0+ YXR0ZW1wdCsrICE9IDApCistCQlmYXRhbF9mKCJtdWx0aXBsZSBhdHRlbXB0cyBmb3IgZ2V0cHdu YW0iKTsKKy0KKysJaWYgKGF1dGhjdHh0LT51c2VyKSBmcmVlKGF1dGhjdHh0LT51c2VyKTsKKyAJ aWYgKChyID0gc3NoYnVmX2dldF9jc3RyaW5nKG0sICZhdXRoY3R4dC0+dXNlciwgTlVMTCkpICE9 IDApCisgCQlmYXRhbF9mcihyLCAicGFyc2UiKTsKKyAKKyAJcHdlbnQgPSBnZXRwd25hbWFsbG93 KHNzaCwgYXV0aGN0eHQtPnVzZXIpOworIAorKyNpZmRlZiBVU0VfUEFNCisrCWlmIChvcHRpb25z LnBlcm1pdF9wYW1fdXNlcl9jaGFuZ2UpCisrCQlzZXRwcm9jdGl0bGUoIiVzIFtwcml2XSIsIHB3 ZW50ID8gIltwYW1dIiA6ICJ1bmtub3duIik7CisrCWVsc2UKKysjZW5kaWYKKyAJc2V0cHJvY3Rp dGxlKCIlcyBbcHJpdl0iLCBwd2VudCA/IGF1dGhjdHh0LT51c2VyIDogInVua25vd24iKTsKKyAK KyAJc3NoYnVmX3Jlc2V0KG0pOworQEAgLTIyOTksNiArMjMxNCw3OSBAQAorIH0KKyAKKyBpbnQK KyttbV9hbnN3ZXJfZ3NzX2Vycm9yKHN0cnVjdCBzc2ggKnNzaCwgaW50IHNvY2tldCwgc3RydWN0 IHNzaGJ1ZiAqbSkKKyt7CisrCU9NX3VpbnQzMiBtYWpvciwgbWlub3I7CisrCWNoYXIgKm1zZzsK KysJaW50IHI7CisrCisrCW1zZz1zc2hfZ3NzYXBpX2xhc3RfZXJyb3IoZ3NzY29udGV4dCwgJm1h am9yLCAmbWlub3IpOworKwlzc2hidWZfcmVzZXQobSk7CisrCWlmICgociA9IHNzaGJ1Zl9wdXRf dTMyKG0sIG1ham9yKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hidWZfcHV0X3UzMihtLCBtaW5v cikpICE9IDAgfHwKKysJICAgIChyID0gc3NoYnVmX3B1dF9jc3RyaW5nKG0sIG1zZykpICE9IDAp CisrCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCisrCW1tX3JlcXVlc3Rfc2VuZChz b2NrZXQsIE1PTklUT1JfQU5TX0dTU0VSUiwgbSk7CisrCisrCWZyZWUobXNnKTsKKysKKysJcmV0 dXJuKDApOworK30KKysKKytpbnQKKyttbV9hbnN3ZXJfZ3NzX2luZGljYXRlX21lY2hzKHN0cnVj dCBzc2ggKnNzaCwgaW50IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAqbSkKKyt7CisrCU9NX3VpbnQz MiBtYWpvciwgbWlub3I7CisrCWdzc19PSURfc2V0IG1lY2hfc2V0OworKwlzaXplX3QgaTsKKysJ aW50IHI7CisrCisrCW1ham9yPWdzc19pbmRpY2F0ZV9tZWNocygmbWlub3IsICZtZWNoX3NldCk7 CisrCisrCXNzaGJ1Zl9yZXNldChtKTsKKysJaWYgKChyID0gc3NoYnVmX3B1dF91MzIobSwgbWFq b3IpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaGJ1Zl9wdXRfdTMyKG0sIG1lY2hfc2V0LT5jb3Vu dCkpICE9IDApCisrCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7CisrCWZvciAoaSA9IDA7 IGkgPCBtZWNoX3NldC0+Y291bnQ7IGkrKykgeworKwkJaWYgKChyID0gc3NoYnVmX3B1dF9zdHJp bmcobSwgbWVjaF9zZXQtPmVsZW1lbnRzW2ldLmVsZW1lbnRzLAorKwkJICAgIG1lY2hfc2V0LT5l bGVtZW50c1tpXS5sZW5ndGgpKSAhPSAwKQorKwkJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3Ii KTsKKysJfQorKworKwlnc3NfcmVsZWFzZV9vaWRfc2V0KCZtaW5vciwgJm1lY2hfc2V0KTsKKysK KysJbW1fcmVxdWVzdF9zZW5kKHNvY2tldCwgTU9OSVRPUl9BTlNfR1NTTUVDSFMsIG0pOworKwor KwlyZXR1cm4oMCk7CisrfQorKworK2ludAorK21tX2Fuc3dlcl9nc3NfbG9jYWxuYW1lKHN0cnVj dCBzc2ggKnNzaCwgaW50IHNvY2tldCwgc3RydWN0IHNzaGJ1ZiAqbSkKKyt7CisrCWNoYXIgKm5h bWU7CisrCWludCByOworKworKwlzc2hfZ3NzYXBpX2xvY2FsbmFtZSgmbmFtZSk7CisrCisrCXNz aGJ1Zl9yZXNldChtKTsKKysJaWYgKG5hbWUpIHsKKysJCWlmICgociA9IHNzaGJ1Zl9wdXRfY3N0 cmluZyhtLCBuYW1lKSkgIT0gMCkKKysJCQlmYXRhbF9mcihyLCAiYnVmZmVyIGVycm9yIik7Cisr CQlkZWJ1ZzNfZigic2VuZGluZyByZXN1bHQgJXMiLCBuYW1lKTsKKysJCWZyZWUobmFtZSk7Cisr CX0gZWxzZSB7CisrCQlpZiAoKHIgPSBzc2hidWZfcHV0X2NzdHJpbmcobSwgIiIpKSAhPSAwKQor KwkJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKKysJCWRlYnVnM19mKCJzZW5kaW5nIHJl c3VsdCBcIlwiIik7CisrCX0KKysKKysJbW1fcmVxdWVzdF9zZW5kKHNvY2tldCwgTU9OSVRPUl9B TlNfR1NTTE9DQUxOQU1FLCBtKTsKKysKKysJcmV0dXJuKDApOworK30KKysKKytpbnQKKyBtbV9h bnN3ZXJfZ3NzX3NpZ24oc3RydWN0IHNzaCAqc3NoLCBpbnQgc29ja2V0LCBzdHJ1Y3Qgc3NoYnVm ICptKQorIHsKKyAJZ3NzX2J1ZmZlcl9kZXNjIGRhdGE7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4z cDEub3JpZy9tb25pdG9yLmggb3BlbnNzaC0xMC4zcDEvbW9uaXRvci5oCistLS0gb3BlbnNzaC0x MC4zcDEub3JpZy9tb25pdG9yLmgJMjAyNi0wNy0wMSAwOTozODowMC42MjI5MTE4OTIgKzAyMDAK KysrKyBvcGVuc3NoLTEwLjNwMS9tb25pdG9yLmgJMjAyNi0wNy0wMSAxMDozOTo0My41NzcwNzA0 MTAgKzAyMDAKK0BAIC03Nyw2ICs3NywxMCBAQAorIAorIAlNT05JVE9SX1JFUV9HU1NTSUdOID0g MTUwLCBNT05JVE9SX0FOU19HU1NTSUdOID0gMTUxLAorIAlNT05JVE9SX1JFUV9HU1NVUENSRURT ID0gMTUyLCBNT05JVE9SX0FOU19HU1NVUENSRURTID0gMTUzLAorKworKwlNT05JVE9SX1JFUV9H U1NNRUNIUyA9IDIwMCwgTU9OSVRPUl9BTlNfR1NTTUVDSFMgPSAyMDEsCisrCU1PTklUT1JfUkVR X0dTU0xPQ0FMTkFNRSA9IDIwMiwgTU9OSVRPUl9BTlNfR1NTTE9DQUxOQU1FID0gMjAzLAorKwlN T05JVE9SX1JFUV9HU1NFUlIgPSAyMDQsIE1PTklUT1JfQU5TX0dTU0VSUiA9IDIwNQorIH07Cisg Cisgc3RydWN0IHNzaDsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL21vbml0b3Jfd3Jh cC5jIG9wZW5zc2gtMTAuM3AxL21vbml0b3Jfd3JhcC5jCistLS0gb3BlbnNzaC0xMC4zcDEub3Jp Zy9tb25pdG9yX3dyYXAuYwkyMDI2LTA3LTAxIDA5OjM4OjAwLjY0MjY2Njk3MSArMDIwMAorKysr IG9wZW5zc2gtMTAuM3AxL21vbml0b3Jfd3JhcC5jCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc3NzY4 ODA3ICswMjAwCitAQCAtMTIyNiw2ICsxMjI2LDk0IEBACisgCXJldHVybiAoYXV0aGVudGljYXRl ZCk7CisgfQorIAorK2NoYXIgKgorK21tX3NzaF9nc3NhcGlfbGFzdF9lcnJvcihHc3NjdHh0ICpj dHgsIE9NX3VpbnQzMiAqbWFqb3IsIE9NX3VpbnQzMiAqbWlub3IpCisreworKwlzdHJ1Y3Qgc3No YnVmICptID0gTlVMTDsKKysJT01fdWludDMyIG1haixtaW47CisrCWNoYXIgKmVycnN0cjsKKysJ aW50IHI7CisrCisrCWlmICgobSA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKysJCWZhdGFsX2Yo InNzaGJ1Zl9uZXcgZmFpbGVkIik7CisrCisrCW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+bV9y ZWN2ZmQsIE1PTklUT1JfUkVRX0dTU0VSUiwgbSk7CisrCW1tX3JlcXVlc3RfcmVjZWl2ZV9leHBl Y3QocG1vbml0b3ItPm1fcmVjdmZkLCBNT05JVE9SX0FOU19HU1NFUlIsIG0pOworKworKwlpZiAo KHIgPSBzc2hidWZfZ2V0X3UzMihtLCAmbWFqKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hidWZf Z2V0X3UzMihtLCAmbWluKSkgIT0gMCkKKysJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsK KysKKysJaWYgKG1ham9yKSAqbWFqb3I9bWFqOworKwlpZiAobWlub3IpICptaW5vcj1taW47Cisr CisrCWlmICgociA9IHNzaGJ1Zl9nZXRfY3N0cmluZyhtLCAmZXJyc3RyLCBOVUxMKSkgIT0gMCkK KysJCWZhdGFsX2ZyKHIsICJidWZmZXIgZXJyb3IiKTsKKysKKysJc3NoYnVmX2ZyZWUobSk7Cisr CisrCXJldHVybihlcnJzdHIpOworK30KKysKKytPTV91aW50MzIKKyttbV9nc3NfaW5kaWNhdGVf bWVjaHMoT01fdWludDMyICptaW5vcl9zdGF0dXMsIGdzc19PSURfc2V0ICptZWNoX3NldCkKKyt7 CisrCXN0cnVjdCBzc2hidWYgKm0gPSBOVUxMOworKwlPTV91aW50MzIgbWFqb3IsbWlub3I7Cisr CWludCBjb3VudDsKKysJZ3NzX09JRF9kZXNjIG9pZDsKKysJc2l6ZV90IGxlbmd0aDsKKysJaW50 IHI7CisrCisrCWlmICgobSA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKysJCWZhdGFsX2YoInNz aGJ1Zl9uZXcgZmFpbGVkIik7CisrCisrCW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+bV9yZWN2 ZmQsIE1PTklUT1JfUkVRX0dTU01FQ0hTLCBtKTsKKysJbW1fcmVxdWVzdF9yZWNlaXZlX2V4cGVj dChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfQU5TX0dTU01FQ0hTLCBtKTsKKysJaWYgKChy ID0gc3NoYnVmX2dldF91MzIobSwgJm1ham9yKSkgIT0gMCB8fAorKwkgICAgKHIgPSBzc2hidWZf Z2V0X3UzMihtLCAmY291bnQpKSAhPSAwKQorKwkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIp OworKworKwlnc3NfY3JlYXRlX2VtcHR5X29pZF9zZXQoJm1pbm9yLCBtZWNoX3NldCk7CisrCXdo aWxlKGNvdW50LS0+MCkgeworKwkgICAgaWYgKChyID0gc3NoYnVmX2dldF9zdHJpbmcobSwgKHVf Y2hhciAqKikmb2lkLmVsZW1lbnRzLCAmbGVuZ3RoKSkgIT0gMCkKKysJCWZhdGFsX2ZyKHIsICJi dWZmZXIgZXJyb3IiKTsKKysJICAgIG9pZC5sZW5ndGggPSBsZW5ndGg7CisrCSAgICBnc3NfYWRk X29pZF9zZXRfbWVtYmVyKCZtaW5vciwgJm9pZCwgbWVjaF9zZXQpOworKwl9CisrCisrCXNzaGJ1 Zl9mcmVlKG0pOworKworKwlyZXR1cm4obWFqb3IpOworK30KKysKKytpbnQKKyttbV9zc2hfZ3Nz YXBpX2xvY2FsbmFtZShjaGFyICoqbG5hbWUpCisreworKwlzdHJ1Y3Qgc3NoYnVmICptID0gTlVM TDsKKysJaW50IHI7CisrCisrCWlmICgobSA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKKysJCWZh dGFsX2YoInNzaGJ1Zl9uZXcgZmFpbGVkIik7CisrCW1tX3JlcXVlc3Rfc2VuZChwbW9uaXRvci0+ bV9yZWN2ZmQsIE1PTklUT1JfUkVRX0dTU0xPQ0FMTkFNRSwgbSk7CisrCisrCWRlYnVnM19mKCJ3 YWl0aW5nIGZvciBNT05JVE9SX0FOU19HU1NMT0NBTE5BTUUiKTsKKysJbW1fcmVxdWVzdF9yZWNl aXZlX2V4cGVjdChwbW9uaXRvci0+bV9yZWN2ZmQsIE1PTklUT1JfQU5TX0dTU0xPQ0FMTkFNRSwK KysJICAgIG0pOworKworKwlpZiAoKHIgPSBzc2hidWZfZ2V0X2NzdHJpbmcobSwgbG5hbWUsIE5V TEwpKSAhPSAwKQorKwkJZmF0YWxfZnIociwgImJ1ZmZlciBlcnJvciIpOworKworKwlzc2hidWZf ZnJlZShtKTsKKysJaWYgKCgqbG5hbWUgPT0gTlVMTCkgfHwgKCpsbmFtZVswXSA9PSAnXDAnKSkg eworKwkJZGVidWczX2YoImdzc2FwaSBpZGVudGl0eSBtYXBwaW5nIGZhaWxlZCIpOworKwl9IGVs c2UgeworKwkJZGVidWczX2YoImdzc2FwaSBpZGVudGl0eSBtYXBwZWQgdG8gJXMiLCAqbG5hbWUp OworKwl9CisrCisrCXJldHVybigwKTsKKyt9CisrCisgT01fdWludDMyCisgbW1fc3NoX2dzc2Fw aV9zaWduKEdzc2N0eHQgKmN0eCwgZ3NzX2J1ZmZlcl9kZXNjICpkYXRhLCBnc3NfYnVmZmVyX2Rl c2MgKmhhc2gpCisgeworZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvbW9uaXRvcl93cmFw Lmggb3BlbnNzaC0xMC4zcDEvbW9uaXRvcl93cmFwLmgKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmln L21vbml0b3Jfd3JhcC5oCTIwMjYtMDctMDEgMDk6Mzg6MDAuNjQyODMwNDE3ICswMjAwCisrKysg b3BlbnNzaC0xMC4zcDEvbW9uaXRvcl93cmFwLmgJMjAyNi0wNy0wMSAxMDozOTo0My41Nzg0ODMx NjUgKzAyMDAKK0BAIC03Nyw2ICs3NywxMCBAQAorIGludCBtbV9zc2hfZ3NzYXBpX3VzZXJvayhj aGFyICp1c2VyLCBzdHJ1Y3QgcGFzc3dkICosIGludCBrZXgpOworIE9NX3VpbnQzMiBtbV9zc2hf Z3NzYXBpX2NoZWNrbWljKEdzc2N0eHQgKiwgZ3NzX2J1ZmZlcl90LCBnc3NfYnVmZmVyX3QpOwor IE9NX3VpbnQzMiBtbV9zc2hfZ3NzYXBpX3NpZ24oR3NzY3R4dCAqLCBnc3NfYnVmZmVyX3QsIGdz c19idWZmZXJfdCk7CisraW50IG1tX3NzaF9nc3NhcGlfbG9jYWxuYW1lKGNoYXIgKip1c2VyKTsK KytPTV91aW50MzIgbW1fZ3NzX2luZGljYXRlX21lY2hzKE9NX3VpbnQzMiAqbWlub3Jfc3RhdHVz LAorKyAgICBnc3NfT0lEX3NldCAqbWVjaF9zZXQpOworK2NoYXIgKm1tX3NzaF9nc3NhcGlfbGFz dF9lcnJvcihHc3NjdHh0ICpjdHh0LCBPTV91aW50MzIgKm1haiwgT01fdWludDMyICptaW4pOwor IGludCBtbV9zc2hfZ3NzYXBpX3VwZGF0ZV9jcmVkcyhzc2hfZ3NzYXBpX2NjYWNoZSAqKTsKKyAj ZW5kaWYKKyAKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3JlYWRjb25mLmMgb3BlbnNz aC0xMC4zcDEvcmVhZGNvbmYuYworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvcmVhZGNvbmYuYwky MDI2LTA3LTAxIDA5OjM4OjAwLjkxNDM0NjI1MSArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3Jl YWRjb25mLmMJMjAyNi0wNy0wMSAxMDozOTo0My41Nzg1NjUxMDMgKzAyMDAKK0BAIC0yOTQzLDEx ICsyOTQzLDExIEBACisgCWlmIChvcHRpb25zLT5wdWJrZXlfYXV0aGVudGljYXRpb24gPT0gLTEp CisgCQlvcHRpb25zLT5wdWJrZXlfYXV0aGVudGljYXRpb24gPSBTU0hfUFVCS0VZX0FVVEhfQUxM OworIAlpZiAob3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID09IC0xKQorLQkJb3B0aW9ucy0+ Z3NzX2F1dGhlbnRpY2F0aW9uID0gMDsKKysJCW9wdGlvbnMtPmdzc19hdXRoZW50aWNhdGlvbiA9 IDE7CisgCWlmIChvcHRpb25zLT5nc3Nfa2V5ZXggPT0gLTEpCistCQlvcHRpb25zLT5nc3Nfa2V5 ZXggPSAwOworKwkJb3B0aW9ucy0+Z3NzX2tleWV4ID0gMTsKKyAJaWYgKG9wdGlvbnMtPmdzc19k ZWxlZ19jcmVkcyA9PSAtMSkKKy0JCW9wdGlvbnMtPmdzc19kZWxlZ19jcmVkcyA9IDA7CisrCQlv cHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPSAxOworIAlpZiAob3B0aW9ucy0+Z3NzX3RydXN0X2Ru cyA9PSAtMSkKKyAJCW9wdGlvbnMtPmdzc190cnVzdF9kbnMgPSAwOworIAlpZiAob3B0aW9ucy0+ Z3NzX3JlbmV3YWxfcmVrZXkgPT0gLTEpCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9y ZWFkY29uZi5oIG9wZW5zc2gtMTAuM3AxL3JlYWRjb25mLmgKKy0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL3JlYWRjb25mLmgJMjAyNi0wNy0wMSAwOTozODowMC4zMjE2MzYyMzIgKzAyMDAKKysrKyBv cGVuc3NoLTEwLjNwMS9yZWFkY29uZi5oCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTc5NTY1MTAyICsw MjAwCitAQCAtODAsNiArODAsOCBAQAorIAljaGFyICAgKmhvc3Rfa2V5X2FsaWFzOwkvKiBob3N0 bmFtZSBhbGlhcyBmb3IgLnNzaC9rbm93bl9ob3N0cyAqLworIAljaGFyICAgKnByb3h5X2NvbW1h bmQ7CS8qIFByb3h5IGNvbW1hbmQgZm9yIGNvbm5lY3RpbmcgdGhlIGhvc3QuICovCisgCWNoYXIg ICAqdXNlcjsJCS8qIFVzZXIgdG8gbG9nIGluIGFzLiAqLworKwlpbnQgICAgIGltcGxpY2l0Owkv KiBMb2dpbiB1c2VyIHdhcyBub3Qgc3BlY2lmaWVkLgorKwkJCQkgICBTZXJ2ZXIgbWF5IGNob29z ZSBiYXNlZCBvbiBhdXRoY3R4dC4gKi8KKyAJaW50ICAgICBlc2NhcGVfY2hhcjsJLyogRXNjYXBl IGNoYXJhY3RlcjsgLTIgPSBub25lICovCisgCisgCXVfaW50CW51bV9zeXN0ZW1faG9zdGZpbGVz OwkvKiBQYXRocyBmb3IgL2V0Yy9zc2gvc3NoX2tub3duX2hvc3RzICovCitkaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9zZXJ2Y29uZi5jIG9wZW5zc2gtMTAuM3AxL3NlcnZjb25mLmMKKy0t LSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NlcnZjb25mLmMJMjAyNi0wNy0wMSAwOTozODowMC45MTQ2 Mzc4NTAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zZXJ2Y29uZi5jCTIwMjYtMDctMDEgMTE6 NDY6NDIuNDgyOTg2MTg4ICswMjAwCitAQCAtOTYsNiArOTYsNyBAQAorIAkvKiBQb3J0YWJsZS1z cGVjaWZpYyBvcHRpb25zICovCisgCW9wdGlvbnMtPnVzZV9wYW0gPSAtMTsKKyAJb3B0aW9ucy0+ cGFtX3NlcnZpY2VfbmFtZSA9IE5VTEw7CisrCW9wdGlvbnMtPnBlcm1pdF9wYW1fdXNlcl9jaGFu Z2UgPSAtMTsKKyAKKyAJLyogU3RhbmRhcmQgT3B0aW9ucyAqLworIAlvcHRpb25zLT5udW1fcG9y dHMgPSAwOworQEAgLTE0Niw2ICsxNDcsNyBAQAorIAlvcHRpb25zLT5nc3NfY2xlYW51cF9jcmVk cyA9IC0xOworIAlvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHMgPSAtMTsKKyAJb3B0aW9ucy0+Z3Nz X3N0cmljdF9hY2NlcHRvciA9IC0xOworKwlvcHRpb25zLT5nc2lfYWxsb3dfbGltaXRlZF9wcm94 eSA9IC0xOworIAlvcHRpb25zLT5nc3NfaW5kaWNhdG9ycyA9IE5VTEw7CisgCW9wdGlvbnMtPmdz c19zdG9yZV9yZWtleSA9IC0xOworIAlvcHRpb25zLT5nc3Nfa2V4X2FsZ29yaXRobXMgPSBOVUxM OworQEAgLTMyMyw2ICszMjUsOCBAQAorIAkJb3B0aW9ucy0+dXNlX3BhbSA9IDA7CisgCWlmIChv cHRpb25zLT5wYW1fc2VydmljZV9uYW1lID09IE5VTEwpCisgCQlvcHRpb25zLT5wYW1fc2Vydmlj ZV9uYW1lID0geHN0cmR1cChTU0hEX1BBTV9TRVJWSUNFKTsKKysJaWYgKG9wdGlvbnMtPnBlcm1p dF9wYW1fdXNlcl9jaGFuZ2UgPT0gLTEpCisrCQlvcHRpb25zLT5wZXJtaXRfcGFtX3VzZXJfY2hh bmdlID0gMDsKKyAKKyAJLyogU3RhbmRhcmQgT3B0aW9ucyAqLworIAlpZiAob3B0aW9ucy0+bnVt X2hvc3Rfa2V5X2ZpbGVzID09IDApIHsKK0BAIC00MDAsMTUgKzQwNCwxNyBAQAorIAlpZiAob3B0 aW9ucy0+a2VyYmVyb3NfdW5pcXVlX2NjYWNoZSA9PSAtMSkKKyAJCW9wdGlvbnMtPmtlcmJlcm9z X3VuaXF1ZV9jY2FjaGUgPSAwOworIAlpZiAob3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID09 IC0xKQorLQkJb3B0aW9ucy0+Z3NzX2F1dGhlbnRpY2F0aW9uID0gMDsKKysJCW9wdGlvbnMtPmdz c19hdXRoZW50aWNhdGlvbiA9IDE7CisgCWlmIChvcHRpb25zLT5nc3Nfa2V5ZXggPT0gLTEpCist CQlvcHRpb25zLT5nc3Nfa2V5ZXggPSAwOworKwkJb3B0aW9ucy0+Z3NzX2tleWV4ID0gMTsKKyAJ aWYgKG9wdGlvbnMtPmdzc19jbGVhbnVwX2NyZWRzID09IC0xKQorIAkJb3B0aW9ucy0+Z3NzX2Ns ZWFudXBfY3JlZHMgPSAxOworIAlpZiAob3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID09IC0xKQor IAkJb3B0aW9ucy0+Z3NzX2RlbGVnX2NyZWRzID0gMTsKKyAJaWYgKG9wdGlvbnMtPmdzc19zdHJp Y3RfYWNjZXB0b3IgPT0gLTEpCisgCQlvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2VwdG9yID0gMTsK KysJaWYgKG9wdGlvbnMtPmdzaV9hbGxvd19saW1pdGVkX3Byb3h5ID09IC0xKQorKwkJb3B0aW9u cy0+Z3NpX2FsbG93X2xpbWl0ZWRfcHJveHkgPSAwOworIAlpZiAob3B0aW9ucy0+Z3NzX2FsbG93 X3M0dTJzZWxmID09IC0xKQorIAkJb3B0aW9ucy0+Z3NzX2FsbG93X3M0dTJzZWxmID0gMDsKKyAJ aWYgKG9wdGlvbnMtPmdzc19zdG9yZV9yZWtleSA9PSAtMSkKK0BAIC01ODgsNyArNTk0LDcgQEAK KyB0eXBlZGVmIGVudW0geworIAlzQmFkT3B0aW9uLAkJLyogPT0gdW5rbm93biBvcHRpb24gKi8K KyAJLyogUG9ydGFibGUtc3BlY2lmaWMgb3B0aW9ucyAqLworLQlzVXNlUEFNLCBzUEFNU2Vydmlj ZU5hbWUsCisrCXNVc2VQQU0sIHNQQU1TZXJ2aWNlTmFtZSwgc1Blcm1pdFBBTVVzZXJDaGFuZ2Us CisgCS8qIFN0YW5kYXJkIE9wdGlvbnMgKi8KKyAJc1BvcnQsIHNIb3N0S2V5RmlsZSwgc0xvZ2lu R3JhY2VUaW1lLAorIAlzUGVybWl0Um9vdExvZ2luLCBzTG9nRmFjaWxpdHksIHNMb2dMZXZlbCwg c0xvZ1ZlcmJvc2UsCitAQCAtNjEwLDYgKzYxNiw4IEBACisgCXNDbGllbnRBbGl2ZUludGVydmFs LCBzQ2xpZW50QWxpdmVDb3VudE1heCwgc0F1dGhvcml6ZWRLZXlzRmlsZSwKKyAJc0dzc0FsbG93 UzRVMlNlbGYsIHNHc3NQcm94eVM0VTJTZXJ2aWNlcywKKyAJc0dzc0F1dGhlbnRpY2F0aW9uLCBz R3NzQ2xlYW51cENyZWRzLCBzR3NzRGVsZWdhdGVDcmVkcywgc0dzc0VuYWJsZWs1dXNlcnMsIHNH c3NTdHJpY3RBY2NlcHRvciwKKysJc0dzc0NyZWRzUGF0aCwKKysJc0dzaUFsbG93TGltaXRlZFBy b3h5LAorIAlzR3NzSW5kaWNhdG9ycywgc0dzc0tleUV4LCBzR3NzS2V4QWxnb3JpdGhtcywgc0dz c1N0b3JlUmVrZXksCisgCXNBY2NlcHRFbnYsIHNTZXRFbnYsIHNQZXJtaXRUdW5uZWwsCisgCXNN YXRjaCwgc1Blcm1pdE9wZW4sIHNQZXJtaXRMaXN0ZW4sIHNGb3JjZUNvbW1hbmQsIHNDaHJvb3RE aXJlY3RvcnksCitAQCAtNjQ0LDkgKzY1MiwxMSBAQAorICNpZmRlZiBVU0VfUEFNCisgCXsgInVz ZXBhbSIsIHNVc2VQQU0sIFNTSENGR19HTE9CQUwgfSwKKyAJeyAicGFtc2VydmljZW5hbWUiLCBz UEFNU2VydmljZU5hbWUsIFNTSENGR19BTEwgfSwKKysJeyAicGVybWl0cGFtdXNlcmNoYW5nZSIs IHNQZXJtaXRQQU1Vc2VyQ2hhbmdlLCBTU0hDRkdfR0xPQkFMIH0sCisgI2Vsc2UKKyAJeyAidXNl cGFtIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMIH0sCisgCXsgInBhbXNlcnZpY2VuYW1l Iiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfQUxMIH0sCisrCXsgInBlcm1pdHBhbXVzZXJjaGFuZ2Ui LCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKyAjZW5kaWYKKyAJeyAicGFtYXV0aGVu dGljYXRpb252aWFrYmRpbnQiLCBzRGVwcmVjYXRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorIAkvKiBT dGFuZGFyZCBPcHRpb25zICovCitAQCAtNzAyLDYgKzcxMiwxMiBAQAorIAl7ICJnc3NhcGljbGVh bnVwY3JlZGVudGlhbHMiLCBzR3NzQ2xlYW51cENyZWRzLCBTU0hDRkdfR0xPQkFMIH0sCisgCXsg Imdzc2FwaWNsZWFudXBjcmVkcyIsIHNHc3NDbGVhbnVwQ3JlZHMsIFNTSENGR19HTE9CQUwgfSwK KyAJeyAiZ3NzYXBpZGVsZWdhdGVjcmVkZW50aWFscyIsIHNHc3NEZWxlZ2F0ZUNyZWRzLCBTU0hD RkdfR0xPQkFMIH0sCisrCXsgImdzc2FwaWNyZWRlbnRpYWxzcGF0aCIsIHNHc3NDcmVkc1BhdGgs IFNTSENGR19HTE9CQUwgfSwKKysjaWZkZWYgR1NJCisrCXsgImdzaWFsbG93bGltaXRlZHByb3h5 Iiwgc0dzaUFsbG93TGltaXRlZFByb3h5LCBTU0hDRkdfR0xPQkFMIH0sCisrI2Vsc2UKKysJeyAi Z3NpYWxsb3dsaW1pdGVkcHJveHkiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwgfSwKKysj ZW5kaWYKKyAJeyAiZ3NzYXBpc3RyaWN0YWNjZXB0b3JjaGVjayIsIHNHc3NTdHJpY3RBY2NlcHRv ciwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJnc3NhcGlrZXlleGNoYW5nZSIsIHNHc3NLZXlFeCwg U1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25yZWtleSIsIHNH c3NTdG9yZVJla2V5LCBTU0hDRkdfR0xPQkFMIH0sCitAQCAtNzE1LDYgKzczMSw4IEBACisgCXsg Imdzc2FwaWNsZWFudXBjcmVkZW50aWFscyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9 LAorIAl7ICJnc3NhcGljbGVhbnVwY3JlZHMiLCBzVW5zdXBwb3J0ZWQsIFNTSENGR19HTE9CQUwg fSwKKyAJeyAiZ3NzYXBpZGVsZWdhdGVjcmVkZW50aWFscyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZH X0dMT0JBTCB9LAorKwl7ICJnc3NhcGljcmVkZW50aWFsc3BhdGgiLCBzVW5zdXBwb3J0ZWQsIFNT SENGR19HTE9CQUwgfSwKKysJeyAiZ3NpYWxsb3dsaW1pdGVkcHJveHkiLCBzVW5zdXBwb3J0ZWQs IFNTSENGR19HTE9CQUwgfSwKKyAJeyAiZ3NzYXBpc3RyaWN0YWNjZXB0b3JjaGVjayIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJnc3NhcGlrZXlleGNoYW5nZSIsIHNVbnN1 cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJnc3NhcGlzdG9yZWNyZWRlbnRpYWxzb25y ZWtleSIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTCB9LAorQEAgLTc5MSw2ICs4MDksOCBA QAorIAl7ICJwZXJtaXRsaXN0ZW4iLCBzUGVybWl0TGlzdGVuLCBTU0hDRkdfQUxMIH0sCisgCXsg ImZvcmNlY29tbWFuZCIsIHNGb3JjZUNvbW1hbmQsIFNTSENGR19BTEwgfSwKKyAJeyAiY2hyb290 ZGlyZWN0b3J5Iiwgc0Nocm9vdERpcmVjdG9yeSwgU1NIQ0ZHX0FMTCB9LAorKwl7ICJkaXNhYmxl dXNhZ2VzdGF0cyIsIHNVbnN1cHBvcnRlZCwgU1NIQ0ZHX0dMT0JBTH0sCisrCXsgInVzYWdlc3Rh dHN0YXJnZXRzIiwgc1Vuc3VwcG9ydGVkLCBTU0hDRkdfR0xPQkFMfSwKKyAJeyAiaG9zdGNlcnRp ZmljYXRlIiwgc0hvc3RDZXJ0aWZpY2F0ZSwgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJyZXZva2Vk a2V5cyIsIHNSZXZva2VkS2V5cywgU1NIQ0ZHX0FMTCB9LAorIAl7ICJ0cnVzdGVkdXNlcmNha2V5 cyIsIHNUcnVzdGVkVXNlckNBS2V5cywgU1NIQ0ZHX0FMTCB9LAorQEAgLTE0NzIsNiArMTQ5Miwx MCBAQAorIAkJCSpjaGFycHRyID0geHN0cmR1cChhcmcpOworIAkJYnJlYWs7CisgCisrCWNhc2Ug c1Blcm1pdFBBTVVzZXJDaGFuZ2U6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+cGVybWl0X3BhbV91 c2VyX2NoYW5nZTsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKyAJLyogU3RhbmRhcmQgT3B0aW9u cyAqLworIAljYXNlIHNCYWRPcHRpb246CisgCQlnb3RvIG91dDsKK0BAIC0xNzM1LDYgKzE3NTks MTAgQEAKKyAJCWludHB0ciA9ICZvcHRpb25zLT5nc3NfZGVsZWdfY3JlZHM7CisgCQlnb3RvIHBh cnNlX2ZsYWc7CisgCisrCWNhc2Ugc0dzc0NyZWRzUGF0aDoKKysJCWNoYXJwdHIgPSAmb3B0aW9u cy0+Z3NzX2NyZWRzX3BhdGg7CisrCQlnb3RvIHBhcnNlX2ZpbGVuYW1lOworKworIAljYXNlIHNH c3NTdHJpY3RBY2NlcHRvcjoKKyAJCWludHB0ciA9ICZvcHRpb25zLT5nc3Nfc3RyaWN0X2FjY2Vw dG9yOworIAkJZ290byBwYXJzZV9mbGFnOworQEAgLTE4MDIsNiArMTgzMCwxMiBAQAorIAkJfQor IAkJYnJlYWs7CisgCisrI2lmZGVmIEdTSQorKwljYXNlIHNHc2lBbGxvd0xpbWl0ZWRQcm94eToK KysJCWludHB0ciA9ICZvcHRpb25zLT5nc2lfYWxsb3dfbGltaXRlZF9wcm94eTsKKysJCWdvdG8g cGFyc2VfZmxhZzsKKysjZW5kaWYKKysKKyAJY2FzZSBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbjoK KyAJCWludHB0ciA9ICZvcHRpb25zLT5wYXNzd29yZF9hdXRoZW50aWNhdGlvbjsKKyAJCWdvdG8g cGFyc2VfZmxhZzsKK0BAIC0zMTAzLDYgKzMxMzcsNyBAQAorIAlNX0NQX0lOVE9QVChwYXNzd29y ZF9hdXRoZW50aWNhdGlvbik7CisgCU1fQ1BfSU5UT1BUKGdzc19hdXRoZW50aWNhdGlvbik7Cisg CU1fQ1BfSU5UT1BUKGdzc19hbGxvd19zNHUyc2VsZik7CisrCU1fQ1BfSU5UT1BUKGdzc19kZWxl Z19jcmVkcyk7CisgCU1fQ1BfSU5UT1BUKHB1YmtleV9hdXRoZW50aWNhdGlvbik7CisgCU1fQ1Bf SU5UT1BUKHB1YmtleV9hdXRoX29wdGlvbnMpOworIAlNX0NQX0lOVE9QVChrZXJiZXJvc19hdXRo ZW50aWNhdGlvbik7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zZXJ2Y29uZi5oIG9w ZW5zc2gtMTAuM3AxL3NlcnZjb25mLmgKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NlcnZjb25m LmgJMjAyNi0wNy0wMSAwOTozODowMC44Njg2NTA4MzMgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNw MS9zZXJ2Y29uZi5oCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTgxMzU4NDk3ICswMjAwCitAQCAtMTU2 LDEwICsxNTYsMTIgQEAKKyAJCQkJCQkgKiBiZSBzdG9yZWQgaW4gcGVyLXNlc3Npb24gY2NhY2hl ICovCisgCWludAl1c2Vfa3VzZXJvazsKKyAJaW50CQllbmFibGVfazV1c2VyczsKKysJaW50ICAg ICBnc2lfYWxsb3dfbGltaXRlZF9wcm94eTsJLyogSWYgdHJ1ZSwgYWNjZXB0IGxpbWl0ZWQgcHJv eGllcyAqLworIAlpbnQgICAgIGdzc19hdXRoZW50aWNhdGlvbjsJLyogSWYgdHJ1ZSwgcGVybWl0 IEdTU0FQSSBhdXRoZW50aWNhdGlvbiAqLworIAlpbnQgICAgIGdzc19rZXlleDsJCS8qIElmIHRy dWUsIHBlcm1pdCBHU1NBUEkga2V5IGV4Y2hhbmdlICovCisgCWludCAgICAgZ3NzX2NsZWFudXBf Y3JlZHM7CS8qIElmIHRydWUsIGRlc3Ryb3kgY3JlZCBjYWNoZSBvbiBsb2dvdXQgKi8KKyAJaW50 ICAgICBnc3NfZGVsZWdfY3JlZHM7CS8qIElmIHRydWUsIGFjY2VwdCBkZWxlZ2F0ZWQgR1NTIGNy ZWRlbnRpYWxzICovCisrCWNoYXIgICAqZ3NzX2NyZWRzX3BhdGg7CQkvKiBVc2Ugbm9uLWRlZmF1 bHQgY3JlZGVudGlhbHMgcGF0aCAqLworIAlpbnQgICAgIGdzc19zdHJpY3RfYWNjZXB0b3I7CS8q IElmIHRydWUsIHJlc3RyaWN0IHRoZSBHU1NBUEkgYWNjZXB0b3IgbmFtZSAqLworIAlpbnQgICAg IGdzc19hbGxvd19zNHUyc2VsZjsgLyogMD1ubywgSU5UX01BWD15ZXMgKEdTU19DX0lOREVGSU5J VEUpLCA+MD10aWNrZXQgbGlmZXRpbWUgcyAqLworIAljaGFyICAqKmdzc19wcm94eV9zZXJ2aWNl czsgLyogUzRVMlByb3h5IHRhcmdldCBzZXJ2aWNlIHByaW5jaXBhbHMgKi8KK0BAIC0yMjcsNiAr MjI5LDcgQEAKKyAKKyAJaW50CXVzZV9wYW07CQkvKiBFbmFibGUgYXV0aCB2aWEgUEFNICovCisg CWNoYXIgICAqcGFtX3NlcnZpY2VfbmFtZTsKKysJaW50CXBlcm1pdF9wYW1fdXNlcl9jaGFuZ2U7 CS8qIEFsbG93IFBBTSB0byBjaGFuZ2UgdXNlciBuYW1lICovCisgCisgCWludAlwZXJtaXRfdHVu OworIAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoLjEgb3BlbnNzaC0xMC4zcDEv c3NoLjEKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC4xCTIwMjYtMDctMDEgMDk6Mzg6MDAu MzIyNDM3MjkyICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvc3NoLjEJMjAyNi0wNy0wMSAxMDoz OTo0My41ODE4NDAwOTIgKzAyMDAKK0BAIC0xNTMxLDYgKzE1MzEsMTggQEAKKyBvbiB0byBuZXcg Y29ubmVjdGlvbnMpLgorIC5JdCBFdiBVU0VSCisgU2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB1c2Vy IGxvZ2dpbmcgaW4uCisrLkl0IEV2IFg1MDlfQ0VSVF9ESVIKKytVc2VkIGZvciBHU0kgYXV0aGVu dGljYXRpb24uIFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCisrQ0Eg Y2VydGlmaWNhdGVzIGRpcmVjdG9yeS4KKysuSXQgRXYgWDUwOV9VU0VSX0NFUlQKKytVc2VkIGZv ciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBm b3IgdGhlCisrY2VydGlmaWNhdGUgdG8gYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhl IHNlcnZlci4KKysuSXQgRXYgWDUwOV9VU0VSX0tFWQorK1VzZWQgZm9yIEdTSSBhdXRoZW50aWNh dGlvbi4gU3BlY2lmaWVzIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGZvciB0aGUKKytwcml2YXRl IGtleSB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB0byB0aGUgc2VydmVyLgorKy5JdCBF diBYNTA5X1VTRVJfUFJPWFkKKytVc2VkIGZvciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNpZmll cyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBmb3IgdGhlCisrcHJveHkgY3JlZGVudGlhbCB0byBi ZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB0byB0aGUgc2VydmVyLgorIC5FbAorIC5QcAorIEFk ZGl0aW9uYWxseSwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC5jIG9wZW5zc2gt MTAuM3AxL3NzaC5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2guYwkyMDI2LTA3LTAxIDA5 OjM4OjAwLjg4NjQ2NTkzMiArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3NzaC5jCTIwMjYtMDct MDEgMTA6Mzk6NDMuNTgyNDY1NzUxICswMjAwCitAQCAtNTc5LDYgKzU3OSwzOCBAQAorIAkJCWZh dGFsKCJDYW4ndCBvcGVuIHVzZXIgY29uZmlnIGZpbGUgJS4xMDBzOiAiCisgCQkJICAgICIlLjEw MHMiLCBjb25maWcsIHN0cmVycm9yKGVycm5vKSk7CisgCX0gZWxzZSB7CisrCSAgICAvKgorKwkg ICAgICogU2luY2UgdGhlIGNvbmZpZyBmaWxlIHBhcnNpbmcgY29kZSBhYm9ydHMgaWYgaXQgc2Vl cworKwkgICAgICogb3B0aW9ucyBpdCBkb2Vzbid0IHJlY29nbml6ZSwgYWxsb3cgdXNlcnMgdG8g cHV0CisrCSAgICAgKiBvcHRpb25zIHNwZWNpZmljIHRvIGNvbXBpbGUtdGltZSBhZGQtb25zIGlu IGFsdGVybmF0ZQorKwkgICAgICogY29uZmlnIGZpbGVzIHNvIHRoZWlyIHByaW1hcnkgY29uZmln IGZpbGUgd2lsbAorKwkgICAgICogaW50ZXJvcGVyYXRlIFNTSCB2ZXJzaW9ucyB0aGF0IGRvbid0 IHN1cHBvcnQgdGhvc2UKKysJICAgICAqIG9wdGlvbnMuCisrCSAgICAgKi8KKysjaWZkZWYgR1NT QVBJCisrCQlyID0gc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJXMvJXMuZ3NzYXBpIiwgcHct PnB3X2RpciwKKysJCSAgICBfUEFUSF9TU0hfVVNFUl9DT05GRklMRSk7CisrCQlpZiAociA+IDAg JiYgKHNpemVfdClyIDwgc2l6ZW9mKGJ1ZikpCisrCQkJKHZvaWQpcmVhZF9jb25maWdfZmlsZShi dWYsIHB3LCBob3N0LCBob3N0X25hbWUsIGNtZCwKKysJCQkgICAgJm9wdGlvbnMsIFNTSENPTkZf Q0hFQ0tQRVJNIHwgU1NIQ09ORl9VU0VSQ09ORiB8CisrCQkJICAgIChmaW5hbF9wYXNzID8gU1NI Q09ORl9GSU5BTCA6IDApLCB3YW50X2ZpbmFsX3Bhc3MpOworKyNpZmRlZiBHU0kKKysJCXIgPSBz bnByaW50ZihidWYsIHNpemVvZiBidWYsICIlcy8lcy5nc2kiLCBwdy0+cHdfZGlyLAorKwkJICAg IF9QQVRIX1NTSF9VU0VSX0NPTkZGSUxFKTsKKysJCWlmIChyID4gMCAmJiAoc2l6ZV90KXIgPCBz aXplb2YoYnVmKSkKKysJCQkodm9pZClyZWFkX2NvbmZpZ19maWxlKGJ1ZiwgcHcsIGhvc3QsIGhv c3RfbmFtZSwgY21kLAorKwkJCSAgICAmb3B0aW9ucywgU1NIQ09ORl9DSEVDS1BFUk0gfCBTU0hD T05GX1VTRVJDT05GIHwKKysJCQkgICAgKGZpbmFsX3Bhc3MgPyBTU0hDT05GX0ZJTkFMIDogMCks IHdhbnRfZmluYWxfcGFzcyk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoS1JCNSkKKysJCXIgPSBz bnByaW50ZihidWYsIHNpemVvZiBidWYsICIlcy8lcy5rcmIiLCBwdy0+cHdfZGlyLAorKwkJICAg IF9QQVRIX1NTSF9VU0VSX0NPTkZGSUxFKTsKKysJCWlmIChyID4gMCAmJiAoc2l6ZV90KXIgPCBz aXplb2YoYnVmKSkKKysJCQkodm9pZClyZWFkX2NvbmZpZ19maWxlKGJ1ZiwgcHcsIGhvc3QsIGhv c3RfbmFtZSwgY21kLAorKwkJCSAgICAmb3B0aW9ucywgU1NIQ09ORl9DSEVDS1BFUk0gfCBTU0hD T05GX1VTRVJDT05GIHwKKysJCQkgICAgKGZpbmFsX3Bhc3MgPyBTU0hDT05GX0ZJTkFMIDogMCks IHdhbnRfZmluYWxfcGFzcyk7CisrI2VuZGlmCisrI2VuZGlmCisgCQlyID0gc25wcmludGYoYnVm LCBzaXplb2YgYnVmLCAiJXMvJXMiLCBwdy0+cHdfZGlyLAorIAkJICAgIF9QQVRIX1NTSF9VU0VS X0NPTkZGSUxFKTsKKyAJCWlmIChyID4gMCAmJiAoc2l6ZV90KXIgPCBzaXplb2YoYnVmKSkKK0BA IC0xMjk3LDYgKzEzMjksOSBAQAorIAlpZiAob3B0aW9ucy51c2VyID09IE5VTEwpIHsKKyAJCXVz ZXJfd2FzX2RlZmF1bHQgPSAxOworIAkJb3B0aW9ucy51c2VyID0geHN0cmR1cChwdy0+cHdfbmFt ZSk7CisrCQlvcHRpb25zLmltcGxpY2l0ID0gMTsKKysJfSBlbHNlIHsKKysJCW9wdGlvbnMuaW1w bGljaXQgPSAwOworIAl9CisgCisgCS8qCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9z c2hfY29uZmlnIG9wZW5zc2gtMTAuM3AxL3NzaF9jb25maWcKKy0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL3NzaF9jb25maWcJMjAyNi0wNy0wMSAwOTozODowMC4zMjI3Njg1ODggKzAyMDAKKysrKyBv cGVuc3NoLTEwLjNwMS9zc2hfY29uZmlnCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTgyNzI1NDk2ICsw MjAwCitAQCAtMjIsOSArMjIsOSBAQAorICMgICBGb3J3YXJkWDExIG5vCisgIyAgIFBhc3N3b3Jk QXV0aGVudGljYXRpb24geWVzCisgIyAgIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIG5vCistIyAg IEdTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCistIyAgIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMg bm8KKy0jICAgR1NTQVBJS2V5RXhjaGFuZ2Ugbm8KKysjICAgR1NTQVBJQXV0aGVudGljYXRpb24g eWVzCisrIyAgIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMgeWVzCisrIyAgIEdTU0FQSUtleUV4 Y2hhbmdlIHllcworICMgICBHU1NBUElUcnVzdEROUyBubworICMgICBCYXRjaE1vZGUgbm8KKyAj ICAgQ2hlY2tIb3N0SVAgbm8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaF9jb25m aWcuNSBvcGVuc3NoLTEwLjNwMS9zc2hfY29uZmlnLjUKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmln L3NzaF9jb25maWcuNQkyMDI2LTA3LTAxIDA5OjM4OjAwLjg4NjYxMDE3MCArMDIwMAorKysrIG9w ZW5zc2gtMTAuM3AxL3NzaF9jb25maWcuNQkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4MzIzMjQzOCAr MDIwMAorQEAgLTUyLDYgKzUyLDEyIEBACisgdXNlcidzIGNvbmZpZ3VyYXRpb24gZmlsZQorIC5Q cSBQYSB+Ly5zc2gvY29uZmlnCisgLkl0CisrR1NTQVBJIGNvbmZpZ3VyYXRpb24gZmlsZQorKy5Q cSBQYSAkSE9NRS8uc3NoL2NvbmZpZy5nc3NhcGkKKysuSXQKKytLZXJiZXJvcyBjb25maWd1cmF0 aW9uIGZpbGUKKysuUHEgUGEgJEhPTUUvLnNzaC9jb25maWcua3JiCisrLkl0Cisgc3lzdGVtLXdp ZGUgY29uZmlndXJhdGlvbiBmaWxlCisgLlBxIFBhIC9ldGMvc3NoL3NzaF9jb25maWcKKyAuRWwK K0BAIC05NjksNyArOTc1LDcgQEAKKyAuSXQgQ20gR1NTQVBJQXV0aGVudGljYXRpb24KKyBTcGVj aWZpZXMgd2hldGhlciB1c2VyIGF1dGhlbnRpY2F0aW9uIGJhc2VkIG9uIEdTU0FQSSBpcyBhbGxv d2VkLgorIFRoZSBkZWZhdWx0IGlzCistLkNtIG5vIC4KKysuQ20geWVzIC4KKyAuSXQgQ20gR1NT QVBJQ2xpZW50SWRlbnRpdHkKKyBJZiBzZXQsIHNwZWNpZmllcyB0aGUgR1NTQVBJIGNsaWVudCBp ZGVudGl0eSB0aGF0IHNzaCBzaG91bGQgdXNlIHdoZW4KKyBjb25uZWN0aW5nIHRvIHRoZSBzZXJ2 ZXIuIFRoZSBkZWZhdWx0IGlzIHVuc2V0LCB3aGljaCBtZWFucyB0aGF0IHRoZSBkZWZhdWx0CitA QCAtOTc3LDEyICs5ODMsMTIgQEAKKyAuSXQgQ20gR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscwor IEZvcndhcmQgKGRlbGVnYXRlKSBjcmVkZW50aWFscyB0byB0aGUgc2VydmVyLgorIFRoZSBkZWZh dWx0IGlzCistLkNtIG5vIC4KKysuQ20geWVzIC4KKyAuSXQgQ20gR1NTQVBJS2V5RXhjaGFuZ2UK KyBTcGVjaWZpZXMgd2hldGhlciBrZXkgZXhjaGFuZ2UgYmFzZWQgb24gR1NTQVBJIG1heSBiZSB1 c2VkLiBXaGVuIHVzaW5nCisgR1NTQVBJIGtleSBleGNoYW5nZSB0aGUgc2VydmVyIG5lZWQgbm90 IGhhdmUgYSBob3N0IGtleS4KKyBUaGUgZGVmYXVsdCBpcworLS5EcSBubyAuCisrLkRxIHllcyAu CisgLkl0IENtIEdTU0FQSVJlbmV3YWxGb3JjZXNSZWtleQorIElmIHNldCB0bworIC5EcSB5ZXMK K0BAIC0xNjQ2LDcgKzE2NTIsNyBAQAorIC5DbSBwYXNzd29yZCApIC4KKyBUaGUgZGVmYXVsdCBp czoKKyAuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKKy1nc3NhcGktd2l0aC1taWMsaG9zdGJh c2VkLHB1YmxpY2tleSwKKytnc3NhcGkta2V5ZXgsZ3NzYXBpLXdpdGgtbWljLGhvc3RiYXNlZCxw dWJsaWNrZXksCisga2V5Ym9hcmQtaW50ZXJhY3RpdmUscGFzc3dvcmQKKyAuRWQKKyAuSXQgQ20g UHJveHlDb21tYW5kCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25uZWN0Mi5j IG9wZW5zc2gtMTAuM3AxL3NzaGNvbm5lY3QyLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nz aGNvbm5lY3QyLmMJMjAyNi0wNy0wMSAwOTozODowMC44MTIyNzg3MTkgKzAyMDAKKysrKyBvcGVu c3NoLTEwLjNwMS9zc2hjb25uZWN0Mi5jCTIwMjYtMDctMDEgMTA6Mzk6NDMuNTgzODY3MDMyICsw MjAwCitAQCAtODYzLDYgKzg2MywxMSBAQAorIAlnc3NfT0lEIG1lY2ggPSBOVUxMOworIAljaGFy ICpnc3NfaG9zdCA9IE5VTEw7CisgCisrCWlmICghb3B0aW9ucy5nc3NfYXV0aGVudGljYXRpb24p IHsKKysJCXZlcmJvc2UoIkdTU0FQSSBhdXRoZW50aWNhdGlvbiBkaXNhYmxlZC4iKTsKKysJCXJl dHVybiAwOworKwl9CisrCisgCWlmIChvcHRpb25zLmdzc19zZXJ2ZXJfaWRlbnRpdHkpIHsKKyAJ CWdzc19ob3N0ID0geHN0cmR1cChvcHRpb25zLmdzc19zZXJ2ZXJfaWRlbnRpdHkpOworIAl9IGVs c2UgaWYgKG9wdGlvbnMuZ3NzX3RydXN0X2RucykgeworQEAgLTk3MSw3ICs5NzYsOCBAQAorIAor IAlpZiAoc3RhdHVzID09IEdTU19TX0NPTVBMRVRFKSB7CisgCQkvKiBzZW5kIGVpdGhlciBjb21w bGV0ZSBvciBNSUMsIGRlcGVuZGluZyBvbiBtZWNoYW5pc20gKi8KKy0JCWlmICghKGZsYWdzICYg R1NTX0NfSU5URUdfRkxBRykpIHsKKysJCWlmIChzdHJjbXAoYXV0aGN0eHQtPm1ldGhvZC0+bmFt ZSwgImdzc2FwaSIpID09IDAgfHwKKysJCSAgICAhKGZsYWdzICYgR1NTX0NfSU5URUdfRkxBRykp IHsKKyAJCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLAorIAkJCSAgICBTU0gyX01TR19VU0VS QVVUSF9HU1NBUElfRVhDSEFOR0VfQ09NUExFVEUpKSAhPSAwIHx8CisgCQkJICAgIChyID0gc3No cGt0X3NlbmQoc3NoKSkgIT0gMCkKK0BAIC0xMTM4LDYgKzExNDQsMjAgQEAKKyAJcmV0dXJuIHI7 CisgfQorIAorKyNpZmRlZiBHU0kKKytleHRlcm4KKytjb25zdCBnc3NfT0lEX2Rlc2MgKiBjb25z dCBnc3NfbWVjaF9nbG9idXNfZ3NzYXBpX29wZW5zc2w7CisrZXh0ZXJuCisrY29uc3QgZ3NzX09J RF9kZXNjICogY29uc3QgZ3NzX21lY2hfZ2xvYnVzX2dzc2FwaV9vcGVuc3NsX21pY3YyOworKyNk ZWZpbmUgaXNfZ3NpX29pZChvaWQpIFwKKysgICgob2lkLT5sZW5ndGggPT0gZ3NzX21lY2hfZ2xv YnVzX2dzc2FwaV9vcGVuc3NsLT5sZW5ndGggJiYgXAorKyAgICAobWVtY21wKG9pZC0+ZWxlbWVu dHMsIGdzc19tZWNoX2dsb2J1c19nc3NhcGlfb3BlbnNzbC0+ZWxlbWVudHMsIFwKKysJICAgIG9p ZC0+bGVuZ3RoKSA9PSAwKSkgfHwgXAorKyAgIChvaWQtPmxlbmd0aCA9PSBnc3NfbWVjaF9nbG9i dXNfZ3NzYXBpX29wZW5zc2xfbWljdjItPmxlbmd0aCAmJiBcCisrICAgIChtZW1jbXAob2lkLT5l bGVtZW50cywgZ3NzX21lY2hfZ2xvYnVzX2dzc2FwaV9vcGVuc3NsX21pY3YyLT5lbGVtZW50cywg XAorKwkgICAgb2lkLT5sZW5ndGgpID09IDApKSkKKysjZW5kaWYKKysKKyBpbnQKKyB1c2VyYXV0 aF9nc3NrZXlleChzdHJ1Y3Qgc3NoICpzc2gpCisgeworQEAgLTExNjAsNiArMTE4MCwxMiBAQAor IAlpZiAoKGIgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisgCQlmYXRhbF9mKCJzc2hidWZfbmV3 IGZhaWxlZCIpOworIAorKyNpZmRlZiBHU0kKKysJaWYgKG9wdGlvbnMuaW1wbGljaXQgJiYgaXNf Z3NpX29pZChnc3Nfa2V4X2NvbnRleHQtPm9pZCkpCisrCQlzc2hfZ3NzYXBpX2J1aWxkbWljKGIs ICIiLCBhdXRoY3R4dC0+c2VydmljZSwKKysJCSAgICAiZ3NzYXBpLWtleWV4Iiwgc3NoLT5rZXgt PnNlc3Npb25faWQpOworKwllbHNlCisrI2VuZGlmCisgCXNzaF9nc3NhcGlfYnVpbGRtaWMoYiwg YXV0aGN0eHQtPnNlcnZlcl91c2VyLCBhdXRoY3R4dC0+c2VydmljZSwKKyAJICAgICJnc3NhcGkt a2V5ZXgiLCBzc2gtPmtleC0+c2Vzc2lvbl9pZCk7CisgCitAQCAtMTE3Myw3ICsxMTk5LDkgQEAK KyAJfQorIAorIAlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLCBTU0gyX01TR19VU0VSQVVUSF9S RVFVRVNUKSkgIT0gMCB8fAorLQkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBhdXRo Y3R4dC0+c2VydmVyX3VzZXIpKSAhPSAwIHx8CisrCSAgICAociA9IHNzaHBrdF9wdXRfY3N0cmlu Zyhzc2gsCisrCQkob3B0aW9ucy5pbXBsaWNpdCAmJiBpc19nc2lfb2lkKGdzc19rZXhfY29udGV4 dC0+b2lkKSkgPworKwkJIiIgOiBhdXRoY3R4dC0+c2VydmVyX3VzZXIpKSAhPSAwIHx8CisgCSAg ICAociA9IHNzaHBrdF9wdXRfY3N0cmluZyhzc2gsIGF1dGhjdHh0LT5zZXJ2aWNlKSkgIT0gMCB8 fAorIAkgICAgKHIgPSBzc2hwa3RfcHV0X2NzdHJpbmcoc3NoLCBhdXRoY3R4dC0+bWV0aG9kLT5u YW1lKSkgIT0gMCB8fAorIAkgICAgKHIgPSBzc2hwa3RfcHV0X3N0cmluZyhzc2gsIG1pYy52YWx1 ZSwgbWljLmxlbmd0aCkpICE9IDAgfHwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nz aGQuOCBvcGVuc3NoLTEwLjNwMS9zc2hkLjgKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGQu OAkyMDI2LTA3LTAxIDA5OjM4OjAwLjM3NTk4NDE3NCArMDIwMAorKysrIG9wZW5zc2gtMTAuM3Ax L3NzaGQuOAkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4NDQxMjc0NCArMDIwMAorQEAgLTg0MCw2ICs4 NDAsMjkgQEAKKyAjIEEgQ0Ega2V5LCBhY2NlcHRlZCBmb3IgYW55IGhvc3QgaW4gKi5teWRvbWFp bi5jb20gb3IgKi5teWRvbWFpbi5vcmcKKyBAY2VydC1hdXRob3JpdHkgKi5teWRvbWFpbi5vcmcs Ki5teWRvbWFpbi5jb20gc3NoLXJzYSBBQUFBQjVXLi4uCisgLkVkCisrLlNoIEVOVklST05NRU5U CisrLk5tCisrd2lsbCBub3JtYWxseSBzZXQgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJp YWJsZXM6CisrLkJsIC10YWcgLXdpZHRoICJTU0hfT1JJR0lOQUxfQ09NTUFORCIKKysuSXQgRXYg R1JJRE1BUAorK0FwcGxpZXMgdG8gR1NJIGF1dGhlbnRpY2F0aW9uL2F1dGhvcml6YXRpb24uIFNw ZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgdGhlCisrZ3JpZG1hcGZpbGUuIElmIG5vdCBzcGVjaWZp ZWQsIHRoZSBncmlkbWFwIGZpbGUgaXMgYXNzdW1lZCB0byBiZSBhdmFpbGFibGUgYXQKKysvZXRj L2dyaWQtc2VjdXJpdHkvZ3JpZC1tYXBmaWxlIGZvciBzZXJ2aWNlcyBydW5uaW5nIGFzIHJvb3Qg YW5kIGF0CisrSE9NRS8uZ3JpZG1hcCBmb3Igc2VydmljZXMgcnVubmluZyBhcyBub24tcm9vdCB3 aGVyZSBIT01FIGlzIHRoZSBob21lIGRpcmVjdG9yeQorK29mIHRoZSBlZmZlY3RpdmUgdXNlciBm cm9tIHRoZSBwYXNzd29yZCBmaWxlIGVudHJ5LgorKy5JdCBFdiBYNTA5X0NFUlRfRElSCisrVXNl ZCBmb3IgR1NJIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRp b24gZm9yIHRoZQorK0NBIGNlcnRpZmljYXRlcyBkaXJlY3RvcnkuCisrLkl0IEV2IFg1MDlfVVNF Ul9DRVJUCisrVXNlZCBmb3IgR1NJIGF1dGhlbnRpY2F0aW9uLiBTcGVjaWZpZXMgYSBub24tc3Rh bmRhcmQgbG9jYXRpb24gZm9yIHRoZQorK2NlcnRpZmljYXRlIHRvIGJlIHVzZWQgZm9yIGF1dGhl bnRpY2F0aW9uIHRvIHRoZSBjbGllbnQuCisrLkl0IEV2IFg1MDlfVVNFUl9LRVkKKytVc2VkIGZv ciBHU0kgYXV0aGVudGljYXRpb24uIFNwZWNpZmllcyBhIG5vbi1zdGFuZGFyZCBsb2NhdGlvbiBm b3IgdGhlCisrcHJpdmF0ZSBrZXkgdG8gYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhl IGNsaWVudC4KKysuSXQgRXYgWDUwOV9VU0VSX1BST1hZCisrVXNlZCBmb3IgR1NJIGF1dGhlbnRp Y2F0aW9uLiBTcGVjaWZpZXMgYSBub24tc3RhbmRhcmQgbG9jYXRpb24gZm9yIHRoZQorK3Byb3h5 IGNyZWRlbnRpYWwgdG8gYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24gdG8gdGhlIGNsaWVudC4K KysuRWwKKyAuU2ggRklMRVMKKyAuQmwgLXRhZyAtd2lkdGggRHMgLWNvbXBhY3QKKyAuSXQgUGEg fi8uaHVzaGxvZ2luCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkX2NvbmZpZyBv cGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZpZworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoZF9j b25maWcJMjAyNi0wNy0wMSAwOTozODowMC40NDE5NTQxMzggKzAyMDAKKysrKyBvcGVuc3NoLTEw LjNwMS9zc2hkX2NvbmZpZwkyMDI2LTA3LTAxIDEwOjM5OjQzLjU4NDgwNzk4OCArMDIwMAorQEAg LTc4LDEwICs3OCwxMSBAQAorICNLZXJiZXJvc1VzZUt1c2Vyb2sgeWVzCisgCisgIyBHU1NBUEkg b3B0aW9ucworLSNHU1NBUElBdXRoZW50aWNhdGlvbiBubworKyNHU1NBUElBdXRoZW50aWNhdGlv biB5ZXMKKysjR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyB5ZXMKKyAjR1NTQVBJQ2xlYW51cENy ZWRlbnRpYWxzIHllcworICNHU1NBUElTdHJpY3RBY2NlcHRvckNoZWNrIHllcworLSNHU1NBUElL ZXlFeGNoYW5nZSBubworKyNHU1NBUElLZXlFeGNoYW5nZSB5ZXMKKyAjR1NTQVBJRW5hYmxlazV1 c2VycyBubworIAorICMgU2V0IHRoaXMgdG8gJ3llcycgdG8gZW5hYmxlIFBBTSBhdXRoZW50aWNh dGlvbiwgYWNjb3VudCBwcm9jZXNzaW5nLAorQEAgLTk3LDYgKzk4LDEwIEBACisgIyBwcm9ibGVt cy4KKyAjVXNlUEFNIG5vCisgCisrIyBTZXQgdG8gJ3llcycgdG8gYWxsb3cgdGhlIFBBTSBzdGFj ayB0byBjaGFuZ2UgdGhlIHVzZXIgbmFtZSBkdXJpbmcKKysjIGNhbGxzIHRvIGF1dGhlbnRpY2F0 aW9uCisrI1Blcm1pdFBBTVVzZXJDaGFuZ2Ugbm8KKysKKyAjQWxsb3dBZ2VudEZvcndhcmRpbmcg eWVzCisgI0FsbG93VGNwRm9yd2FyZGluZyB5ZXMKKyAjR2F0ZXdheVBvcnRzIG5vCitkaWZmIC1O dXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkX2NvbmZpZy41IG9wZW5zc2gtMTAuM3AxL3NzaGRf Y29uZmlnLjUKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGRfY29uZmlnLjUJMjAyNi0wNy0w MSAwOTozODowMC44NjkwMTkwNzIgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZp Zy41CTIwMjYtMDctMDEgMTA6Mzk6NDMuNTg1MjQ2MDg5ICswMjAwCitAQCAtNzM2LDE1ICs3MzYs MzAgQEAKKyB0byBhbGxvdyB0aGUgY2xpZW50IHRvIHNlbGVjdCB0aGUgYWRkcmVzcyB0byB3aGlj aCB0aGUgZm9yd2FyZGluZyBpcyBib3VuZC4KKyBUaGUgZGVmYXVsdCBpcworIC5DbSBubyAuCisr Lkl0IENtIEdTSUFsbG93TGltaXRlZFByb3h5CisrU3BlY2lmaWVzIHdoZXRoZXIgdG8gYWNjZXB0 IGxpbWl0ZWQgcHJveHkgY3JlZGVudGlhbHMgZm9yIGF1dGhlbnRpY2F0aW9uLgorK1RoZSBkZWZh dWx0IGlzCisrLkNtIG5vIC4KKyAuSXQgQ20gR1NTQVBJQXV0aGVudGljYXRpb24KKyBTcGVjaWZp ZXMgd2hldGhlciB1c2VyIGF1dGhlbnRpY2F0aW9uIGJhc2VkIG9uIEdTU0FQSSBpcyBhbGxvd2Vk LgorIFRoZSBkZWZhdWx0IGlzCistLkNtIG5vIC4KKysuQ20geWVzIC4KKyAuSXQgQ20gR1NTQVBJ Q2xlYW51cENyZWRlbnRpYWxzCisgU3BlY2lmaWVzIHdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBk ZXN0cm95IHRoZSB1c2VyJ3MgY3JlZGVudGlhbHMgY2FjaGUKKyBvbiBsb2dvdXQuCisgVGhlIGRl ZmF1bHQgaXMKKyAuQ20geWVzIC4KKysuSXQgQ20gR1NTQVBJQ3JlZGVudGlhbHNQYXRoCisrSWYg c3BlY2lmaWVkLCB0aGUgZGVsZWdhdGVkIEdTU0FQSSBjcmVkZW50aWFsIGlzIHN0b3JlZCBpbiB0 aGUKKytnaXZlbiBwYXRoLCBvdmVyd3JpdGluZyBhbnkgZXhpc3RpbmcgY3JlZGVudGlhbHMuCisr UGF0aHMgY2FuIGJlIHNwZWNpZmllZCB3aXRoIHN5bnRheCBzaW1pbGFyIHRvIHRoZSBBdXRob3Jp emVkS2V5c0ZpbGUKKytvcHRpb24gKGkuZS4sIGFjY2VwdGluZyAlaCBhbmQgJXUgdG9rZW5zKS4K KytXaGVuIHVzaW5nIHRoaXMgb3B0aW9uLAorK3NldHRpbmcgJ0dzc2FwaUNsZWFudXBDcmVkZW50 aWFscyBubycgaXMgcmVjb21tZW5kZWQsCisrc28gbG9nZ2luZyBvdXQgb2Ygb25lIHNlc3Npb24K Kytkb2Vzbid0IHJlbW92ZSB0aGUgY3JlZGVudGlhbHMgaW4gdXNlIGJ5IGFub3RoZXIgc2Vzc2lv biBvZgorK3RoZSBzYW1lIHVzZXIuCisrQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRo ZSBHU0kgbWVjaGFuaXNtLgorIC5JdCBDbSBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCisgQWNj ZXB0IGRlbGVnYXRlZCBjcmVkZW50aWFscyBvbiB0aGUgc2VydmVyIHNpZGUuICBUaGUgZGVmYXVs dCBpcworIC5DTSB5ZXMgLgorQEAgLTc1OCw3ICs3NzMsNyBAQAorIFNwZWNpZmllcyB3aGV0aGVy IGtleSBleGNoYW5nZSBiYXNlZCBvbiBHU1NBUEkgaXMgYWxsb3dlZC4gR1NTQVBJIGtleSBleGNo YW5nZQorIGRvZXNuJ3QgcmVseSBvbiBzc2gga2V5cyB0byB2ZXJpZnkgaG9zdCBpZGVudGl0eS4K KyBUaGUgZGVmYXVsdCBpcworLS5DbSBubyAuCisrLkNtIHllcyAuCisgLkl0IENtIEdTU0FQSVN0 cmljdEFjY2VwdG9yQ2hlY2sKKyBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYmUgc3RyaWN0IGFib3V0 IHRoZSBpZGVudGl0eSBvZiB0aGUgR1NTQVBJIGFjY2VwdG9yCisgYSBjbGllbnQgYXV0aGVudGlj YXRlcyBhZ2FpbnN0LgorQEAgLTIxOTMsNiArMjIwOCwxMiBAQAorIGFzIGEgbm9uLXJvb3QgdXNl ci4KKyBUaGUgZGVmYXVsdCBpcworIC5DbSBubyAuCisrLkl0IENtIFBlcm1pdFBBTVVzZXJDaGFu Z2UKKytJZiBzZXQgdG8KKysuQ20geWVzCisrdGhpcyB3aWxsIGVuYWJsZSBQQU0gYXV0aGVudGlj YXRpb24gdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSB1c2VyIGJlaW5nCisrYXV0aGVudGljYXRl ZC4gIFRoZSBkZWZhdWx0IGlzCisrLkNtIG5vIC4KKyAuSXQgQ20gVmVyc2lvbkFkZGVuZHVtCisg T3B0aW9uYWxseSBzcGVjaWZpZXMgYWRkaXRpb25hbCB0ZXh0IHRvIGFwcGVuZCB0byB0aGUgU1NI IHByb3RvY29sIGJhbm5lcgorIHNlbnQgYnkgdGhlIHNlcnZlciB1cG9uIGNvbm5lY3Rpb24uCitk aWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkX2NvbmZpZ19yZWRoYXQgb3BlbnNzaC0x MC4zcDEvc3NoZF9jb25maWdfcmVkaGF0CistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkX2Nv bmZpZ19yZWRoYXQJMjAyNi0wNy0wMSAwOTozODowMC45MjMyNjYyOTAgKzAyMDAKKysrKyBvcGVu c3NoLTEwLjNwMS9zc2hkX2NvbmZpZ19yZWRoYXQJMjAyNi0wNy0wMSAxMDozOTo0My41ODU1MjA0 MTkgKzAyMDAKK0BAIC0yLDkgKzIsNiBAQAorIAorIEtiZEludGVyYWN0aXZlQXV0aGVudGljYXRp b24gbm8KKyAKKy1HU1NBUElBdXRoZW50aWNhdGlvbiB5ZXMKKy1HU1NBUElDbGVhbnVwQ3JlZGVu dGlhbHMgbm8KKy0KKyBVc2VQQU0geWVzCisgCisgWDExRm9yd2FyZGluZyB5ZXMKK2RpZmYgLU51 ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGQtc2Vzc2lvbi5jIG9wZW5zc2gtMTAuM3AxL3NzaGQt c2Vzc2lvbi5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLXNlc3Npb24uYwkyMDI2LTA3 LTAxIDA5OjM4OjAwLjg2ODgzMDg2MyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3NzaGQtc2Vz c2lvbi5jCTIwMjYtMDctMDEgMTQ6MjQ6MzQuMDg1NzQ4OTY0ICswMjAwCitAQCAtMTM4OCwxMSAr MTM4OCwxMiBAQAorICNlbmRpZgorIAorICNpZmRlZiBHU1NBUEkKKy0JaWYgKG9wdGlvbnMuZ3Nz X2F1dGhlbnRpY2F0aW9uKSB7CisrCWlmIChvcHRpb25zLmdzc19hdXRoZW50aWNhdGlvbiAmJiBv cHRpb25zLmdzc19kZWxlZ19jcmVkcykgeworIAkJdGVtcG9yYXJpbHlfdXNlX3VpZChhdXRoY3R4 dC0+cHcpOworIAkJYXV0aGN0eHQtPmtyYjVfc2V0X2VudiA9IHNzaF9nc3NhcGlfc3RvcmVjcmVk cygpOworIAkJcmVzdG9yZV91aWQoKTsKKyAJfQorKyNpZmRlZiBLUkI1CisgCS8qCisgCSAqIEdT U0FQSUFsbG93UzRVMlNlbGYgLyBHU1NBUElQcm94eVM0VTJTZXJ2aWNlczogaWYgbm8gY3JlZGVu dGlhbHMgd2VyZSBzdG9yZWQKKyAJICogYWJvdmUgKGkuZS4gbm8gR1NTQVBJIGF1dGggd2l0aCBk ZWxlZ2F0aW9uIG9jY3VycmVkKSwgdXNlIFM0VTJTZWxmCitAQCAtMTQ5Miw2ICsxNDkzLDcgQEAK KyAJCX0KKyAJfQorICNlbmRpZgorKyNlbmRpZgorICNpZmRlZiBXSVRIX1NFTElOVVgKKyAJc3No ZF9zZWxpbnV4X3NldHVwX2V4ZWNfY29udGV4dChhdXRoY3R4dC0+cHctPnB3X25hbWUsCisgCSAg ICBpbmV0ZF9mbGFnLCBkb19wYW1fcHV0ZW52LCB0aGVfYXV0aGN0eHQsCitkaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9zc2gtZ3NzLmggb3BlbnNzaC0xMC4zcDEvc3NoLWdzcy5oCistLS0g b3BlbnNzaC0xMC4zcDEub3JpZy9zc2gtZ3NzLmgJMjAyNi0wNy0wMSAwOTozODowMC44Njg3MjE2 MTIgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2gtZ3NzLmgJMjAyNi0wNy0wMSAxMDozOTo0 My41ODYyOTc1MjIgKzAyMDAKK0BAIC0xMTAsMTIgKzExMCwxNCBAQAorIH0gc3NoX2dzc2FwaV9j Y2FjaGU7CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworKwlnc3NfT0lEX2Rlc2Mgb2lkOworIAlnc3Nf YnVmZmVyX2Rlc2MgZGlzcGxheW5hbWU7CisgCWdzc19idWZmZXJfZGVzYyBleHBvcnRlZG5hbWU7 CisgCWdzc19jcmVkX2lkX3QgY3JlZHM7CistCWdzc19uYW1lX3QgbmFtZTsKKysJZ3NzX25hbWVf dCBjcmVkX25hbWUsIGN0eF9uYW1lOworIAlzdHJ1Y3Qgc3NoX2dzc2FwaV9tZWNoX3N0cnVjdCAq bWVjaDsKKyAJc3NoX2dzc2FwaV9jY2FjaGUgc3RvcmU7CisrCWdzc19jdHhfaWRfdCBjb250ZXh0 OyAvKiBuZWVkZWQgZm9yIGdsb2J1c19nc3NfYXNzaXN0X21hcF9hbmRfYXV0aG9yaXplKCkgKi8K KyAJaW50IHVzZWQ7CisgCWludCB1cGRhdGVkOworIAljaGFyICoqaW5kaWNhdG9yczsgLyogYXV0 aCBpbmRpY2F0b3JzICovCitAQCAtMTM4LDcgKzE0MCw3IEBACisgCU9NX3VpbnQzMgltaW5vcjsg LyogYm90aCAqLworIAlnc3NfY3R4X2lkX3QJY29udGV4dDsgLyogYm90aCAqLworIAlnc3NfbmFt ZV90CW5hbWU7IC8qIGJvdGggKi8KKy0JZ3NzX09JRAkJb2lkOyAvKiBjbGllbnQgKi8KKysJZ3Nz X09JRAkJb2lkOyAvKiBib3RoICovCisgCWdzc19jcmVkX2lkX3QJY3JlZHM7IC8qIHNlcnZlciAq LworIAlnc3NfbmFtZV90CWNsaWVudDsgLyogc2VydmVyICovCisgCWdzc19jcmVkX2lkX3QJY2xp ZW50X2NyZWRzOyAvKiBib3RoICovCitAQCAtMTg1LDYgKzE4Nyw5IEBACisgT01fdWludDMyIHNz aF9nc3NhcGlfY2xpZW50X2lkZW50aXR5KEdzc2N0eHQgKiwgY29uc3QgY2hhciAqKTsKKyBpbnQg c3NoX2dzc2FwaV9jcmVkZW50aWFsc191cGRhdGVkKEdzc2N0eHQgKik7CisgCisraW50IHNzaF9n c3NhcGlfbG9jYWxuYW1lKGNoYXIgKipuYW1lKTsKKyt2b2lkIHNzaF9nc3NhcGlfcmVrZXlfY3Jl ZHMoKTsKKysKKyAvKiBJbiB0aGUgc2VydmVyICovCisgdHlwZWRlZiBpbnQgc3NoX2dzc2FwaV9j aGVja19mbihHc3NjdHh0ICoqLCBnc3NfT0lELCBjb25zdCBjaGFyICosCisgICAgIGNvbnN0IGNo YXIgKik7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy92ZXJzaW9uLmggb3BlbnNzaC0x MC4zcDEvdmVyc2lvbi5oCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy92ZXJzaW9uLmgJMjAyNi0w NC0wMiAxMDowOTowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS92ZXJzaW9u LmgJMjAyNi0wNy0wMSAxMDozOTo0My41ODY0NzkxMjMgKzAyMDAKK0BAIC0yLDUgKzIsMTkgQEAK KyAKKyAjZGVmaW5lIFNTSF9WRVJTSU9OCSJPcGVuU1NIXzEwLjMiCisgCisrI2lmZGVmIEdTSQor KyNkZWZpbmUgR1NJX1ZFUlNJT04JIiBHU0kiCisrI2Vsc2UKKysjZGVmaW5lIEdTSV9WRVJTSU9O CSIiCisrI2VuZGlmCisrCisrI2lmZGVmIEtSQjUKKysjZGVmaW5lIEtSQjVfVkVSU0lPTgkiIEtS QjUiCisrI2Vsc2UKKysjZGVmaW5lIEtSQjVfVkVSU0lPTgkiIgorKyNlbmRpZgorKworICNkZWZp bmUgU1NIX1BPUlRBQkxFCSJwMSIKKy0jZGVmaW5lIFNTSF9SRUxFQVNFCVNTSF9WRVJTSU9OIFNT SF9QT1JUQUJMRQorKyNkZWZpbmUgR1NJX1BPUlRBQkxFCSJjLUdTSSIKKysjZGVmaW5lIFNTSF9S RUxFQVNFCVNTSF9WRVJTSU9OIFNTSF9QT1JUQUJMRSBHU0lfUE9SVEFCTEUgXAorKwkJCUdTSV9W RVJTSU9OIEtSQjVfVkVSU0lPTgoKZGlmZiAtLWdpdCBhLzIwMDEtb3BlbnNzaC0xMC4ycDEtaHBu LTE4LjguMC5wYXRjaCBiLzIwMDEtb3BlbnNzaC0xMC4ycDEtaHBuLTE4LjguMC5wYXRjaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M4MjY0OC4uMDAwMDAwMAotLS0gYS8yMDAxLW9w ZW5zc2gtMTAuMnAxLWhwbi0xOC44LjAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNTY0OSAr MCwwIEBACi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9hdXRoMi5jIG9wZW5zc2gtMTAu MnAxL2F1dGgyLmMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL2F1dGgyLmMJMjAyNi0wMy0xOCAx NToxMjowMS45OTkzMjc0MjEgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9hdXRoMi5jCTIwMjYt MDMtMTggMTU6MzU6NTcuNTc2NzgwODUwICswMTAwCi1AQCAtNTIsNiArNTIsOCBAQAotICNpbmNs dWRlICJkaXNwYXRjaC5oIgotICNpbmNsdWRlICJwYXRobmFtZXMuaCIKLSAjaW5jbHVkZSAic3No ZXJyLmgiCi0rI2luY2x1ZGUgImNhbm9ob3N0LmgiCi0rCi0gI2lmZGVmIEdTU0FQSQotICNpbmNs dWRlICJzc2gtZ3NzLmgiCi0gI2VuZGlmCi1AQCAtNzUsNiArNzcsOCBAQAotIGV4dGVybiBBdXRo bWV0aG9kIG1ldGhvZF9nc3NhcGk7Ci0gI2VuZGlmCi0gCi0rc3RhdGljIGludCBsb2dfZmxhZyA9 IDA7Ci0rCi0gQXV0aG1ldGhvZCAqYXV0aG1ldGhvZHNbXSA9IHsKLSAJJm1ldGhvZF9ub25lLAot IAkmbWV0aG9kX3B1YmtleSwKLUBAIC0xMDQsNiArMTA4LDkgQEAKLSAjZGVmaW5lIE1BVENIX1BB UlRJQUwJMwkvKiBtZXRob2QgbWF0Y2hlcywgc3VibWV0aG9kIGNhbid0IGJlIGNoZWNrZWQgKi8K LSBzdGF0aWMgaW50IGxpc3Rfc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7Ci0gCi0rLyogcmVhZCB0aGUgdXNlciBiYW5uZXIgZnJvbSB0aGUgcGF0 aCBpbiBzc2hkX2NvbmZpZwotKyAqIHRoaXMgaXNuJ3QgdG8gcmVhZCBpdCBvbiB0aGUgY2xpZW50 IHNpZGUgYnV0IHRvIHJlYWQKLSsgKiBpdCBpbnRvIHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQg b24gdGhlIHNlcnZlciBzaWRlICovCi0gY2hhciAqCi0gYXV0aDJfcmVhZF9iYW5uZXIodm9pZCkK LSB7Ci1AQCAtMzA4LDYgKzMxNSwxMSBAQAotIAotIAlkZWJ1ZygidXNlcmF1dGgtcmVxdWVzdCBm b3IgdXNlciAlcyBzZXJ2aWNlICVzIG1ldGhvZCAlcyIsCi0gCSAgICB1c2VyWzBdID8gdXNlciA6 ICI8aW1wbGljaXQ+Iiwgc2VydmljZSwgbWV0aG9kKTsKLSsJaWYgKCFsb2dfZmxhZykgewotKwkJ bG9naXQoIlNTSDogU2VydmVyO0x0eXBlOiBBdXRobmFtZTtSZW1vdGU6ICVzLSVkO05hbWU6ICVz IiwKLSsJCSAgICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSwg dXNlcik7Ci0rCQlsb2dfZmxhZyA9IDE7Ci0rCX0KLSAJZGVidWcoImF0dGVtcHQgJWQgZmFpbHVy ZXMgJWQiLCBhdXRoY3R4dC0+YXR0ZW1wdCwgYXV0aGN0eHQtPmZhaWx1cmVzKTsKLSAKLSAjaWZk ZWYgV0lUSF9TRUxJTlVYCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9iaW5uLmMgb3Bl bnNzaC0xMC4ycDEvYmlubi5jCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9iaW5uLmMJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9iaW5uLmMJ MjAyNi0wMy0xOCAxNToxMzoxNy44MzY2NTk3NTAgKzAxMDAKLUBAIC0wLDAgKzEsMzU0MSBAQAot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3Rk aW50Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxtZW1vcnkuaD4KLSsjaW5j bHVkZSAiYmlubi5oIgotKwotKyNkZWZpbmUgVU5VU0VEKHgpICh2b2lkKSh4KQotKyNkZWZpbmUg cm91bmR2YWwoZGJsKSBkYmwgPj0gMC4wID8gKGludCkoZGJsICsgMC41KSA6ICgoZGJsIC0gKGRv dWJsZSkoaW50KWRibCkgPD0gLTAuNSA/IChpbnQpZGJsIDogKGludCkoZGJsIC0gMC41KSkKLSsK LSsvLyBtYWdpYyBudW1iZXI6ICAweDFGIDB4YjEgMHgyMiAweDFGICA9PiAgMHgxRkIxMjIxRiBv ciAweDFGMjJCMTFGCi0rLy8gYmVjYXVzZSB0aGUgQklOTl9TVE9SQUdFX05PQllURVMgKGJpbmFy eSAwMDApIG1heSBub3QgaGF2ZSBzbyBtYW55IHN1Yi10eXBlcyAoQklOTl9TVE9SQUdFX0hBU19N T1JFID0gMHgxMCkKLSsjZGVmaW5lIEJJTk5fTUFHSUMgICAgICAgICAgICAweDFGMjJCMTFGCi0r Ci0rI2RlZmluZSBNQVhfQklOTl9IRUFERVIgICAgICAgOSAgLy8gWzE6dHlwZV1bNDpzaXplXVs0 OmNvdW50XQotKyNkZWZpbmUgTUlOX0JJTk5fU0laRSAgICAgICAgIDMgIC8vIFsxOnR5cGVdWzE6 c2l6ZV1bMTpjb3VudF0KLSsjZGVmaW5lIENIVU5LX1NJWkUgICAgICAgICAgICAyNTYgIC8vIDEw MjQKLSsKLSsjZGVmaW5lIEJJTk5fU1RSVUNUICAgICAgICAxCi0rI2RlZmluZSBCSU5OX0JVRkZF UiAgICAgICAgMgotKwotK3ZvaWQqICgqbWFsbG9jX2ZuKShzaXplX3QgbGVuKSA9IDA7Ci0rdm9p ZCogKCpyZWFsbG9jX2ZuKSh2b2lkICpwdHIsIHNpemVfdCBsZW4pID0gMDsKLSt2b2lkICAoKmZy ZWVfZm4pKHZvaWQgKnB0cikgPSAwOwotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rI2lm IGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9fbWlw c19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykKLSsjZGVm aW5lIEJJTk5fT05MWV9BTElHTkVEX0FDQ0VTUwotKyNlbGlmICggZGVmaW5lZChfX2FybV9fKSB8 fCBkZWZpbmVkKF9fYWFyY2g2NF9fKSApICYmICFkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfVU5BTElH TkVEKQotKyNkZWZpbmUgQklOTl9PTkxZX0FMSUdORURfQUNDRVNTCi0rI2VuZGlmCi0rCi0rI2lm IGRlZmluZWQoX1dJTjMyKQotKyNkZWZpbmUgQklHX0VORElBTiAgICAgIDB4MTAwMAotKyNkZWZp bmUgTElUVExFX0VORElBTiAgIDB4MDAwMQotKyNkZWZpbmUgQllURV9PUkRFUiAgICAgIExJVFRM RV9FTkRJQU4KLSsjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSsvKiBtYWNyb3MgYWxyZWFkeSBk ZWZpbmVkICovCi0rI2VsaWYgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJT RF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0r I2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KLSsjZWxpZiBkZWZpbmVkKF9BSVgpCi0rI2luY2x1ZGUg PHN5cy9tYWNoaW5lLmg+Ci0rI2Vsc2UKLSsjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0rI2VuZGlmCi0r Ci0rI2lmbmRlZiBCWVRFX09SREVSCi0rI2Vycm9yICJCWVRFX09SREVSIG5vdCBkZWZpbmVkIgot KyNlbmRpZgotKyNpZm5kZWYgQklHX0VORElBTgotKyNlcnJvciAiQklHX0VORElBTiBub3QgZGVm aW5lZCIKLSsjZW5kaWYKLSsjaWZuZGVmIExJVFRMRV9FTkRJQU4KLSsjZXJyb3IgIkxJVFRMRV9F TkRJQU4gbm90IGRlZmluZWQiCi0rI2VuZGlmCi0rI2lmIEJJR19FTkRJQU4gPT0gTElUVExFX0VO RElBTgotKyNlcnJvciAiQklHX0VORElBTiA9PSBMSVRUTEVfRU5ESUFOIgotKyNlbmRpZgotKyNp ZiBCWVRFX09SREVSIT1CSUdfRU5ESUFOICYmIEJZVEVfT1JERVIhPUxJVFRMRV9FTkRJQU4KLSsj ZXJyb3IgIkJZVEVfT1JERVIgbm90IHN1cHBvcnRlZCIKLSsjZW5kaWYKLSsKLSt0eXBlZGVmIHVu c2lnbmVkIHNob3J0IGludCAgICAgdTE2OwotK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAg ICB1MzI7Ci0rdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHU2NDsKLSsKLStCSU5OX1BS SVZBVEUgdm9pZCBjb3B5X2JlMTYodTE2ICpwZGVzdCwgdTE2ICpwc291cmNlKSB7Ci0rI2lmIEJZ VEVfT1JERVIgPT0gTElUVExFX0VORElBTgotKyAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVu c2lnbmVkIGNoYXIgKikgcHNvdXJjZTsKLSsgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWdu ZWQgY2hhciAqKSBwZGVzdDsKLSsgIGRlc3RbMF0gPSBzb3VyY2VbMV07Ci0rICBkZXN0WzFdID0g c291cmNlWzBdOwotKyNlbHNlIC8vIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotKyNpZmRl ZiBCSU5OX09OTFlfQUxJR05FRF9BQ0NFU1MKLSsgIGlmICgodWludHB0cl90KXBzb3VyY2UgJSAy ID09IDApeyAgLy8gYWRkcmVzcyBhbGlnbmVkIHRvIDE2IGJpdAotKyAgICAqcGRlc3QgPSAqcHNv dXJjZTsKLSsgIH0gZWxzZSB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25l ZCBjaGFyICopIHBzb3VyY2U7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQg Y2hhciAqKSBwZGVzdDsKLSsgICAgZGVzdFswXSA9IHNvdXJjZVswXTsgIC8vIGluZGV4ZXMgYXJl IHRoZSBzYW1lCi0rICAgIGRlc3RbMV0gPSBzb3VyY2VbMV07Ci0rICB9Ci0rI2Vsc2UKLSsgICpw ZGVzdCA9ICpwc291cmNlOwotKyNlbmRpZgotKyNlbmRpZgotK30KLSsKLStCSU5OX1BSSVZBVEUg dm9pZCBjb3B5X2JlMzIodTMyICpwZGVzdCwgdTMyICpwc291cmNlKSB7Ci0rI2lmIEJZVEVfT1JE RVIgPT0gTElUVExFX0VORElBTgotKyAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVk IGNoYXIgKikgcHNvdXJjZTsKLSsgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hh ciAqKSBwZGVzdDsKLSsgIGRlc3RbMF0gPSBzb3VyY2VbM107Ci0rICBkZXN0WzFdID0gc291cmNl WzJdOwotKyAgZGVzdFsyXSA9IHNvdXJjZVsxXTsKLSsgIGRlc3RbM10gPSBzb3VyY2VbMF07Ci0r I2Vsc2UgLy8gaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCi0rI2lmZGVmIEJJTk5fT05MWV9B TElHTkVEX0FDQ0VTUwotKyAgaWYgKCh1aW50cHRyX3QpcHNvdXJjZSAlIDQgPT0gMCl7ICAvLyBh ZGRyZXNzIGFsaWduZWQgdG8gMzIgYml0Ci0rICAgICpwZGVzdCA9ICpwc291cmNlOwotKyAgfSBl bHNlIHsKLSsgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNv dXJjZTsKLSsgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0 OwotKyAgICBkZXN0WzBdID0gc291cmNlWzBdOyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUKLSsg ICAgZGVzdFsxXSA9IHNvdXJjZVsxXTsKLSsgICAgZGVzdFsyXSA9IHNvdXJjZVsyXTsKLSsgICAg ZGVzdFszXSA9IHNvdXJjZVszXTsKLSsgIH0KLSsjZWxzZQotKyAgKnBkZXN0ID0gKnBzb3VyY2U7 Ci0rI2VuZGlmCi0rI2VuZGlmCi0rfQotKwotK0JJTk5fUFJJVkFURSB2b2lkIGNvcHlfYmU2NCh1 NjQgKnBkZXN0LCB1NjQgKnBzb3VyY2UpIHsKLSsjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5E SUFOCi0rICB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291cmNl OwotKyAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OwotKyAg aW50IGk7Ci0rICBmb3IgKGk9MDsgaSA8IDg7IGkrKykgewotKyAgICBkZXN0W2ldID0gc291cmNl WzctaV07Ci0rICB9Ci0rI2Vsc2UgLy8gaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCi0rI2lm ZGVmIEJJTk5fT05MWV9BTElHTkVEX0FDQ0VTUwotKyAgaWYgKCh1aW50cHRyX3QpcHNvdXJjZSAl IDggPT0gMCl7ICAvLyBhZGRyZXNzIGFsaWduZWQgdG8gNjQgYml0Ci0rICAgICpwZGVzdCA9ICpw c291cmNlOwotKyAgfSBlbHNlIHsKLSsgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2ln bmVkIGNoYXIgKikgcHNvdXJjZTsKLSsgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25l ZCBjaGFyICopIHBkZXN0OwotKyAgICBpbnQgaTsKLSsgICAgZm9yIChpPTA7IGkgPCA4OyBpKysp IHsKLSsgICAgICBkZXN0W2ldID0gc291cmNlW2ldOyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUK LSsgICAgfQotKyAgfQotKyNlbHNlCi0rICAqcGRlc3QgPSAqcHNvdXJjZTsKLSsjZW5kaWYKLSsj ZW5kaWYKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsjaWZuZGVmIF9NU0NfVkVS Ci0rI2RlZmluZSBzdHJpY21wIHN0cmNhc2VjbXAKLSsjZGVmaW5lIHN0cm5pY21wIHN0cm5jYXNl Y21wCi0rI2VuZGlmCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgSXNWYWxpZEJpbm5IZWFkZXIoY29u c3Qgdm9pZCAqcGJ1ZiwgaW50ICpwdHlwZSwgaW50ICpwY291bnQsIGludCAqcHNpemUsIGludCAq cGhlYWRlcnNpemUpOwotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rY2hhciAqIEFQSUVO VFJZIGJpbm5fdmVyc2lvbigpIHsKLSsgIHJldHVybiBCSU5OX1ZFUlNJT047Ci0rfQotKwotKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rdm9pZCBBUElFTlRSWSBiaW5uX3NldF9hbGxvY19mdW5j dGlvbnModm9pZCogKCpuZXdfbWFsbG9jKShzaXplX3QpLCB2b2lkKiAoKm5ld19yZWFsbG9jKSh2 b2lkKixzaXplX3QpLCB2b2lkICgqbmV3X2ZyZWUpKHZvaWQqKSkgewotKwotKyAgbWFsbG9jX2Zu ID0gbmV3X21hbGxvYzsKLSsgIHJlYWxsb2NfZm4gPSBuZXdfcmVhbGxvYzsKLSsgIGZyZWVfZm4g PSBuZXdfZnJlZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BS SVZBVEUgdm9pZCBjaGVja19hbGxvY19mdW5jdGlvbnMoKSB7Ci0rCi0rICBpZiAobWFsbG9jX2Zu ID09IDApIG1hbGxvY19mbiA9ICZtYWxsb2M7Ci0rICBpZiAocmVhbGxvY19mbiA9PSAwKSByZWFs bG9jX2ZuID0gJnJlYWxsb2M7Ci0rICBpZiAoZnJlZV9mbiA9PSAwKSBmcmVlX2ZuID0gJmZyZWU7 Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIHZvaWQg KiBiaW5uX21hbGxvYyhpbnQgc2l6ZSkgewotKyAgY2hlY2tfYWxsb2NfZnVuY3Rpb25zKCk7Ci0r ICByZXR1cm4gbWFsbG9jX2ZuKHNpemUpOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK0JJTk5fUFJJVkFURSB2b2lkICogYmlubl9tZW1kdXAoY29uc3Qgdm9pZCAqc3JjLCBpbnQg c2l6ZSkgewotKyAgdm9pZCAqZGVzdDsKLSsKLSsgIGlmIChzcmMgPT0gTlVMTCB8fCBzaXplIDw9 IDApIHJldHVybiBOVUxMOwotKyAgZGVzdCA9IGJpbm5fbWFsbG9jKHNpemUpOwotKyAgaWYgKGRl c3QgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0rICBtZW1jcHkoZGVzdCwgc3JjLCBzaXplKTsKLSsg IHJldHVybiBkZXN0OwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5f UFJJVkFURSBzaXplX3Qgc3RybGVuMihjaGFyICpzdHIpIHsKLSsKLSsgIGlmIChzdHIgPT0gTlVM TCkgcmV0dXJuIDA7Ci0rICByZXR1cm4gc3RybGVuKHN0cik7Ci0rCi0rfQotKwotKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rCi0raW50IEFQSUVOVFJZIGJpbm5fY3JlYXRlX3R5cGUoaW50IHN0b3Jh Z2VfdHlwZSwgaW50IGRhdGFfdHlwZV9pbmRleCkgewotKyAgaWYgKGRhdGFfdHlwZV9pbmRleCA8 IDApIHJldHVybiAtMTsKLSsgIGlmIChzdG9yYWdlX3R5cGUgPCBCSU5OX1NUT1JBR0VfTUlOIHx8 IHN0b3JhZ2VfdHlwZSA+IEJJTk5fU1RPUkFHRV9NQVgpIHJldHVybiAtMTsKLSsgIGlmIChkYXRh X3R5cGVfaW5kZXggPCAxNikKLSsgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZSB8IGRhdGFfdHlwZV9p bmRleDsKLSsgIGVsc2UgaWYgKGRhdGFfdHlwZV9pbmRleCA8IDQwOTYpIHsKLSsgICAgc3RvcmFn ZV90eXBlIHw9IEJJTk5fU1RPUkFHRV9IQVNfTU9SRTsKLSsgICAgc3RvcmFnZV90eXBlIDw8PSA4 OwotKyAgICBkYXRhX3R5cGVfaW5kZXggPj49IDQ7Ci0rICAgIHJldHVybiBzdG9yYWdlX3R5cGUg fCBkYXRhX3R5cGVfaW5kZXg7Ci0rICB9IGVsc2UKLSsgICAgcmV0dXJuIC0xOwotK30KLSsKLSsv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfdHlwZV9pbmZv KGludCBsb25nX3R5cGUsIGludCAqcHN0b3JhZ2VfdHlwZSwgaW50ICpwZXh0cmFfdHlwZSkgewot KyAgaW50IHN0b3JhZ2VfdHlwZSwgZXh0cmFfdHlwZTsKLSsgIEJPT0wgcmV0dmFsPVRSVUU7Ci0r Ci0rYWdhaW46Ci0rCi0rICBpZiAobG9uZ190eXBlIDwgMCkgewotKyAgICBnb3RvIGxvY19pbnZh bGlkOwotKyAgfSBlbHNlIGlmIChsb25nX3R5cGUgPD0gMHhmZikgewotKyAgICBzdG9yYWdlX3R5 cGUgPSBsb25nX3R5cGUgJiBCSU5OX1NUT1JBR0VfTUFTSzsKLSsgICAgZXh0cmFfdHlwZSA9IGxv bmdfdHlwZSAmIEJJTk5fVFlQRV9NQVNLOwotKyAgfSBlbHNlIGlmIChsb25nX3R5cGUgPD0gMHhm ZmZmKSB7Ci0rICAgIHN0b3JhZ2VfdHlwZSA9IGxvbmdfdHlwZSAmIEJJTk5fU1RPUkFHRV9NQVNL MTY7Ci0rICAgIHN0b3JhZ2VfdHlwZSA+Pj0gODsKLSsgICAgZXh0cmFfdHlwZSA9IGxvbmdfdHlw ZSAmIEJJTk5fVFlQRV9NQVNLMTY7Ci0rICAgIGV4dHJhX3R5cGUgPj49IDQ7Ci0rICB9IGVsc2Ug aWYgKGxvbmdfdHlwZSAmIEJJTk5fU1RPUkFHRV9WSVJUVUFMKSB7Ci0rICAgIC8vc3RvcmFnZV90 eXBlID0gQklOTl9TVE9SQUdFX1ZJUlRVQUw7Ci0rICAgIC8vZXh0cmFfdHlwZSA9IHh4eDsKLSsg ICAgbG9uZ190eXBlICY9IDB4ZmZmZjsKLSsgICAgZ290byBhZ2FpbjsKLSsgIH0gZWxzZSB7Ci0r bG9jX2ludmFsaWQ6Ci0rICAgIHN0b3JhZ2VfdHlwZSA9IC0xOwotKyAgICBleHRyYV90eXBlID0g LTE7Ci0rICAgIHJldHZhbCA9IEZBTFNFOwotKyAgfQotKwotKyAgaWYgKHBzdG9yYWdlX3R5cGUp ICpwc3RvcmFnZV90eXBlID0gc3RvcmFnZV90eXBlOwotKyAgaWYgKHBleHRyYV90eXBlKSAqcGV4 dHJhX3R5cGUgPSBleHRyYV90eXBlOwotKwotKyAgcmV0dXJuIHJldHZhbDsKLSsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlKGJpbm4g Kml0ZW0sIGludCB0eXBlLCBpbnQgc2l6ZSwgdm9pZCAqcG9pbnRlcikgewotKyAgQk9PTCByZXR2 YWw9RkFMU0U7Ci0rCi0rICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgY2FzZSBCSU5OX0xJU1Q6Ci0r ICAgIGNhc2UgQklOTl9NQVA6Ci0rICAgIGNhc2UgQklOTl9PQkpFQ1Q6Ci0rICAgICAgYnJlYWs7 Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgZ290byBsb2NfZXhpdDsKLSsgIH0KLSsKLSsgIGlmIChp dGVtID09IE5VTEwgfHwgc2l6ZSA8IDApIGdvdG8gbG9jX2V4aXQ7Ci0rICBpZiAoc2l6ZSA8IE1J Tl9CSU5OX1NJWkUpIHsKLSsgICAgaWYgKHBvaW50ZXIpIGdvdG8gbG9jX2V4aXQ7Ci0rICAgIGVs c2Ugc2l6ZSA9IDA7Ci0rICB9Ci0rCi0rICBtZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKGJpbm4pKTsK LSsKLSsgIGlmIChwb2ludGVyKSB7Ci0rICAgIGl0ZW0tPnByZV9hbGxvY2F0ZWQgPSBUUlVFOwot KyAgfSBlbHNlIHsKLSsgICAgaXRlbS0+cHJlX2FsbG9jYXRlZCA9IEZBTFNFOwotKyAgICBpZiAo c2l6ZSA9PSAwKSBzaXplID0gQ0hVTktfU0laRTsKLSsgICAgcG9pbnRlciA9IGJpbm5fbWFsbG9j KHNpemUpOwotKyAgICBpZiAocG9pbnRlciA9PSAwKSByZXR1cm4gSU5WQUxJRF9CSU5OOwotKyAg fQotKwotKyAgaXRlbS0+cGJ1ZiA9IHBvaW50ZXI7Ci0rICBpdGVtLT5hbGxvY19zaXplID0gc2l6 ZTsKLSsKLSsgIGl0ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7Ci0rICAvL2l0ZW0tPmFsbG9jYXRl ZCA9IEZBTFNFOyAgIC0tIGFscmVhZHkgemVyb2VkCi0rICBpdGVtLT53cml0YWJsZSA9IFRSVUU7 Ci0rICBpdGVtLT51c2VkX3NpemUgPSBNQVhfQklOTl9IRUFERVI7ICAvLyBzYXZlIHNwYWNlIGZv ciB0aGUgaGVhZGVyCi0rICBpdGVtLT50eXBlID0gdHlwZTsKLSsgIC8vaXRlbS0+Y291bnQgPSAw OyAgICAgICAgICAgLS0gYWxyZWFkeSB6ZXJvZWQKLSsgIGl0ZW0tPmRpcnR5ID0gVFJVRTsgICAg ICAgICAgLy8gdGhlIGhlYWRlciBpcyBub3Qgd3JpdHRlbiB0byB0aGUgYnVmZmVyCi0rCi0rICBy ZXR2YWwgPSBUUlVFOwotKwotK2xvY19leGl0OgotKyAgcmV0dXJuIHJldHZhbDsKLSsKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9uZXcoaW50 IHR5cGUsIGludCBzaXplLCB2b2lkICpwb2ludGVyKSB7Ci0rICBiaW5uICppdGVtOwotKwotKyAg aXRlbSA9IChiaW5uKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChiaW5u X2NyZWF0ZShpdGVtLCB0eXBlLCBzaXplLCBwb2ludGVyKSA9PSBGQUxTRSkgewotKyAgICBmcmVl X2ZuKGl0ZW0pOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIGl0ZW0tPmFsbG9jYXRl ZCA9IFRSVUU7Ci0rICByZXR1cm4gaXRlbTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9saXN0KGJpbm4gKmxp c3QpIHsKLSsKLSsgIHJldHVybiBiaW5uX2NyZWF0ZShsaXN0LCBCSU5OX0xJU1QsIDAsIE5VTEwp OwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQ SUVOVFJZIGJpbm5fY3JlYXRlX21hcChiaW5uICptYXApIHsKLSsKLSsgIHJldHVybiBiaW5uX2Ny ZWF0ZShtYXAsIEJJTk5fTUFQLCAwLCBOVUxMKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9vYmplY3QoYmlu biAqb2JqZWN0KSB7Ci0rCi0rICByZXR1cm4gYmlubl9jcmVhdGUob2JqZWN0LCBCSU5OX09CSkVD VCwgMCwgTlVMTCk7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAq IEFQSUVOVFJZIGJpbm5fbGlzdCgpIHsKLSsgIHJldHVybiBiaW5uX25ldyhCSU5OX0xJU1QsIDAs IDApOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBi aW5uX21hcCgpIHsKLSsgIHJldHVybiBiaW5uX25ldyhCSU5OX01BUCwgMCwgMCk7Ci0rfQotKwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0KCkg ewotKyAgcmV0dXJuIGJpbm5fbmV3KEJJTk5fT0JKRUNULCAwLCAwKTsKLSt9Ci0rCi0rLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9jb3B5KGNvbnN0IHZvaWQg Km9sZCkgewotKyAgaW50IHR5cGUsIGNvdW50LCBzaXplLCBoZWFkZXJfc2l6ZTsKLSsgIHVuc2ln bmVkIGNoYXIgKm9sZF9wdHIgPSBiaW5uX3B0cihvbGQpOwotKyAgYmlubiAqaXRlbTsKLSsKLSsg IHNpemUgPSAwOwotKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihvbGRfcHRyLCAmdHlwZSwgJmNv dW50LCAmc2l6ZSwgJmhlYWRlcl9zaXplKSkgcmV0dXJuIE5VTEw7Ci0rCi0rICBpdGVtID0gYmlu bl9uZXcodHlwZSwgc2l6ZSAtIGhlYWRlcl9zaXplICsgTUFYX0JJTk5fSEVBREVSLCBOVUxMKTsK LSsgIGlmKCBpdGVtICl7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Q7Ci0rICAgIGRlc3QgPSAo KHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBNQVhfQklOTl9IRUFERVI7Ci0rICAgIG1l bWNweShkZXN0LCBvbGRfcHRyICsgaGVhZGVyX3NpemUsIHNpemUgLSBoZWFkZXJfc2l6ZSk7Ci0r ICAgIGl0ZW0tPnVzZWRfc2l6ZSA9IE1BWF9CSU5OX0hFQURFUiArIHNpemUgLSBoZWFkZXJfc2l6 ZTsKLSsgICAgaXRlbS0+Y291bnQgPSBjb3VudDsKLSsgIH0KLSsgIHJldHVybiBpdGVtOwotKwot K30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSsvLyBkZXByZWNhdGVk OiB1bnNlY3VyZS4gdGhlIHNpemUgY2FuIGJlIGNvcnJ1cHRlZCBhY2NpZGVudGFsbHkgb3IgaW50 ZW50aW9uYWxseQotK0JPT0wgQVBJRU5UUlkgYmlubl9sb2FkKGNvbnN0IHZvaWQgKmRhdGEsIGJp bm4gKnZhbHVlKSB7Ci0rCi0rICBpZiAoZGF0YSA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJl dHVybiBGQUxTRTsKLSsgIG1lbXNldCh2YWx1ZSwgMCwgc2l6ZW9mKGJpbm4pKTsKLSsgIHZhbHVl LT5oZWFkZXIgPSBCSU5OX01BR0lDOwotKyAgLy92YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAt LSAgYWxyZWFkeSB6ZXJvZWQKLSsgIC8vdmFsdWUtPndyaXRhYmxlID0gRkFMU0U7Ci0rCi0rICBp ZiAoYmlubl9pc192YWxpZChkYXRhLCAmdmFsdWUtPnR5cGUsICZ2YWx1ZS0+Y291bnQsICZ2YWx1 ZS0+c2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsgIHZhbHVlLT5wdHIgPSAodm9pZCop IGRhdGE7Ci0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xv YWRfZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUsIGJpbm4gKnZhbHVlKSB7Ci0rCi0rICBp ZiAoZGF0YSA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwgfHwgc2l6ZSA8PSAwKSByZXR1cm4gRkFM U0U7Ci0rICBtZW1zZXQodmFsdWUsIDAsIHNpemVvZihiaW5uKSk7Ci0rICB2YWx1ZS0+aGVhZGVy ID0gQklOTl9NQUdJQzsKLSsgIC8vdmFsdWUtPmFsbG9jYXRlZCA9IEZBTFNFOyAgLS0gIGFscmVh ZHkgemVyb2VkCi0rICAvL3ZhbHVlLT53cml0YWJsZSA9IEZBTFNFOwotKwotKyAgaWYgKGJpbm5f aXNfdmFsaWRfZXgoZGF0YSwgJnZhbHVlLT50eXBlLCAmdmFsdWUtPmNvdW50LCAmc2l6ZSkgPT0g RkFMU0UpIHJldHVybiBGQUxTRTsKLSsgIHZhbHVlLT5wdHIgPSAodm9pZCopIGRhdGE7Ci0rICB2 YWx1ZS0+c2l6ZSA9IHNpemU7Ci0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fb3Blbihjb25z dCB2b2lkICpkYXRhKSB7Ci0rICBiaW5uICppdGVtOwotKwotKyAgaXRlbSA9IChiaW5uKikgYmlu bl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlmIChiaW5uX2xvYWQoZGF0YSwgaXRlbSkg PT0gRkFMU0UpIHsKLSsgICAgZnJlZV9mbihpdGVtKTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICB9 Ci0rCi0rICBpdGVtLT5hbGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIGl0ZW07Ci0rCi0rfQot KwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29wZW5fZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNp emUpIHsKLSsgIGJpbm4gKml0ZW07Ci0rCi0rICBpdGVtID0gKGJpbm4qKSBiaW5uX21hbGxvYyhz aXplb2YoYmlubikpOwotKwotKyAgaWYgKGJpbm5fbG9hZF9leChkYXRhLCBzaXplLCBpdGVtKSA9 PSBGQUxTRSkgewotKyAgICBmcmVlX2ZuKGl0ZW0pOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0K LSsKLSsgIGl0ZW0tPmFsbG9jYXRlZCA9IFRSVUU7Ci0rICByZXR1cm4gaXRlbTsKLSsKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgaW50IGJpbm5fZ2V0X3B0 cl90eXBlKGNvbnN0IHZvaWQgKnB0cikgewotKwotKyAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm4g MDsKLSsKLSsgIHN3aXRjaCAoKih1bnNpZ25lZCBpbnQgKilwdHIpIHsKLSsgIGNhc2UgQklOTl9N QUdJQzoKLSsgICAgcmV0dXJuIEJJTk5fU1RSVUNUOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJu IEJJTk5fQlVGRkVSOwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwot K0JPT0wgQVBJRU5UUlkgYmlubl9pc19zdHJ1Y3QoY29uc3Qgdm9pZCAqcHRyKSB7Ci0rCi0rICBp ZiAocHRyID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICgoKih1bnNpZ25lZCBpbnQg KilwdHIpID09IEJJTk5fTUFHSUMpIHsKLSsgICAgcmV0dXJuIFRSVUU7Ci0rICB9IGVsc2Ugewot KyAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rQklOTl9QUklWQVRFIGludCBDYWxjQWxsb2NhdGlvbihpbnQgbmVlZGVkX3NpemUsIGlu dCBhbGxvY19zaXplKSB7Ci0rICBpbnQgY2FsY19zaXplOwotKwotKyAgY2FsY19zaXplID0gYWxs b2Nfc2l6ZTsKLSsgIHdoaWxlIChjYWxjX3NpemUgPCBuZWVkZWRfc2l6ZSkgewotKyAgICBjYWxj X3NpemUgPDw9IDE7ICAvLyBzYW1lIGFzICo9IDIKLSsgICAgLy9jYWxjX3NpemUgKz0gQ0hVTktf U0laRTsgIC0tIHRoaXMgaXMgc2xvd2VyIHRoYW4gdGhlIGFib3ZlIGxpbmUsIGJlY2F1c2UgdGhl cmUgYXJlIG1vcmUgcmVhbGxvY2F0aW9ucwotKyAgfQotKyAgcmV0dXJuIGNhbGNfc2l6ZTsKLSsK LSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9PTCBDaGVj a0FsbG9jYXRpb24oYmlubiAqaXRlbSwgaW50IGFkZF9zaXplKSB7Ci0rICBpbnQgIGFsbG9jX3Np emU7Ci0rICB2b2lkICpwdHI7Ci0rCi0rICBpZiAoaXRlbS0+dXNlZF9zaXplICsgYWRkX3NpemUg PiBpdGVtLT5hbGxvY19zaXplKSB7Ci0rICAgIGlmIChpdGVtLT5wcmVfYWxsb2NhdGVkKSByZXR1 cm4gRkFMU0U7Ci0rICAgIGFsbG9jX3NpemUgPSBDYWxjQWxsb2NhdGlvbihpdGVtLT51c2VkX3Np emUgKyBhZGRfc2l6ZSwgaXRlbS0+YWxsb2Nfc2l6ZSk7Ci0rICAgIHB0ciA9IHJlYWxsb2NfZm4o aXRlbS0+cGJ1ZiwgYWxsb2Nfc2l6ZSk7Ci0rICAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuIEZB TFNFOwotKyAgICBpdGVtLT5wYnVmID0gcHRyOwotKyAgICBpdGVtLT5hbGxvY19zaXplID0gYWxs b2Nfc2l6ZTsKLSsgIH0KLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLSsKLStCSU5OX1BS SVZBVEUgaW50IGdldF9zdG9yYWdlX3NpemUoaW50IHN0b3JhZ2VfdHlwZSkgewotKwotKyAgc3dp dGNoIChzdG9yYWdlX3R5cGUpIHsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6Ci0rICAg IHJldHVybiAwOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKLSsgICAgcmV0dXJuIDE7Ci0r ICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgotKyAgICByZXR1cm4gMjsKLSsgIGNhc2UgQklOTl9T VE9SQUdFX0RXT1JEOgotKyAgICByZXR1cm4gNDsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JE OgotKyAgICByZXR1cm4gODsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiAwOwotKyAgfQotKwot K30KLSsKLSsjZW5kaWYKLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFU RSB1bnNpZ25lZCBjaGFyICogQWR2YW5jZURhdGFQb3ModW5zaWduZWQgY2hhciAqcCwgdW5zaWdu ZWQgY2hhciAqcGxpbWl0KSB7Ci0rICB1bnNpZ25lZCBjaGFyIGJ5dGU7Ci0rICBpbnQgIHN0b3Jh Z2VfdHlwZSwgRGF0YVNpemU7Ci0rCi0rICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIDA7Ci0rCi0r ICBieXRlID0gKnA7IHArKzsKLSsgIHN0b3JhZ2VfdHlwZSA9IGJ5dGUgJiBCSU5OX1NUT1JBR0Vf TUFTSzsKLSsgIGlmIChieXRlICYgQklOTl9TVE9SQUdFX0hBU19NT1JFKSBwKys7Ci0rCi0rICBz d2l0Y2ggKHN0b3JhZ2VfdHlwZSkgewotKyAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKLSsg ICAgLy9wICs9IDA7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKLSsg ICAgcCArKzsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgotKyAgICBw ICs9IDI7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6Ci0rICAgIHAg Kz0gNDsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgcCAr PSA4OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0JMT0I6Ci0rICBjYXNlIEJJ Tk5fU1RPUkFHRV9TVFJJTkc6Ci0rICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gMDsKLSsgICAg RGF0YVNpemUgPSAqKCh1bnNpZ25lZCBjaGFyKilwKTsKLSsgICAgaWYgKERhdGFTaXplICYgMHg4 MCkgewotKyAgICAgIGlmIChwICsgc2l6ZW9mKGludCkgLSAxID4gcGxpbWl0KSByZXR1cm4gMDsK LSsgICAgICBjb3B5X2JlMzIoKHUzMiopJkRhdGFTaXplLCAodTMyKilwKTsKLSsgICAgICBEYXRh U2l6ZSAmPSAweDdGRkZGRkZGOwotKyAgICAgIHArPTQ7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg cCsrOwotKyAgICB9Ci0rICAgIHAgKz0gRGF0YVNpemU7Ci0rICAgIGlmIChzdG9yYWdlX3R5cGUg PT0gQklOTl9TVE9SQUdFX1NUUklORykgewotKyAgICAgIHArKzsgIC8vIG51bGwgdGVybWluYXRv ci4KLSsgICAgfQotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoK LSsgICAgaWYgKHAgPiBwbGltaXQpIHJldHVybiAwOwotKyAgICBEYXRhU2l6ZSA9ICooKHVuc2ln bmVkIGNoYXIqKXApOwotKyAgICBpZiAoRGF0YVNpemUgJiAweDgwKSB7Ci0rICAgICAgaWYgKHAg KyBzaXplb2YoaW50KSAtIDEgPiBwbGltaXQpIHJldHVybiAwOwotKyAgICAgIGNvcHlfYmUzMigo dTMyKikmRGF0YVNpemUsICh1MzIqKXApOwotKyAgICAgIERhdGFTaXplICY9IDB4N0ZGRkZGRkY7 Ci0rICAgIH0KLSsgICAgRGF0YVNpemUtLTsgIC8vIHJlbW92ZSB0aGUgdHlwZSBieXRlIGFscmVh ZHkgYWRkZWQgYmVmb3JlCi0rICAgIHAgKz0gRGF0YVNpemU7Ci0rICAgIGJyZWFrOwotKyAgZGVm YXVsdDoKLSsgICAgcmV0dXJuIDA7Ci0rICB9Ci0rCi0rICByZXR1cm4gcDsKLSsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsKLSsvKgotKwotK1RoZSBpZCBjYW4gYmUgc3RvcmVkIHdp dGggMSB0byA1IGJ5dGVzCi0rCi0rUyA9IHNpZ25hbCBiaXQKLStYID0gYml0IHBhcnQgb2YgaWQK LSsKLSsgIDBTWFggWFhYWAotKyAgMTAwUyBYWFhYICsgMSBieXRlCi0rICAxMDFTIFhYWFggKyAy IGJ5dGVzCi0rICAxMTBTIFhYWFggKyAzIGJ5dGVzCi0rICAxMTEwIDAwMDAgKyA0IGJ5dGVzCi0r Ci0rKi8KLStCSU5OX1BSSVZBVEUgaW50IHJlYWRfbWFwX2lkKHVuc2lnbmVkIGNoYXIgKipwcCwg dW5zaWduZWQgY2hhciAqcGxpbWl0KSB7Ci0rICB1bnNpZ25lZCBjaGFyICpwLCBjLCBzaWduLCB0 eXBlOwotKyAgaW50IGlkLCBleHRyYV9ieXRlczsKLSsKLSsgIHAgPSAqcHA7Ci0rICBpZiAocCA+ IHBsaW1pdCkgcmV0dXJuIDA7Ci0rCi0rICBjID0gKnArKzsKLSsKLSsgIGlmIChjICYgMHg4MCkg ewotKyAgICBleHRyYV9ieXRlcyA9ICgoYyAmIDB4NjApID4+IDUpICsgMTsKLSsgICAgaWYgKHAg KyBleHRyYV9ieXRlcyA+IHBsaW1pdCApIHsKLSsgICAgICAqcHAgPSBwICsgZXh0cmFfYnl0ZXM7 Ci0rICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHR5cGUgPSBjICYgMHhFMDsK LSsgIHNpZ24gPSBjICYgMHgxMDsKLSsKLSsgIGlmICgoYyAmIDB4ODApID09IDApIHsKLSsgICAg c2lnbiA9IGMgJiAweDQwOwotKyAgICBpZCA9IGMgJiAweDNGOwotKyAgfSBlbHNlIGlmICh0eXBl ID09IDB4ODApIHsKLSsgICAgaWQgPSBjICYgMHgwRjsKLSsgICAgaWQgPSAoaWQgPDwgOCkgfCAq cCsrOwotKyAgfSBlbHNlIGlmICh0eXBlID09IDB4QTApIHsKLSsgICAgaWQgPSBjICYgMHgwRjsK LSsgICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsrOwotKyAgICBpZCA9IChpZCA8PCA4KSB8ICpwKys7 Ci0rICB9IGVsc2UgaWYgKHR5cGUgPT0gMHhDMCkgewotKyAgICBpZCA9IGMgJiAweDBGOwotKyAg ICBpZCA9IChpZCA8PCA4KSB8ICpwKys7Ci0rICAgIGlkID0gKGlkIDw8IDgpIHwgKnArKzsKLSsg ICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsrOwotKyAgfSBlbHNlIGlmICh0eXBlID09IDB4RTApIHsK LSsgICAgY29weV9iZTMyKCh1MzIqKSZpZCwgKHUzMiopcCk7Ci0rICAgIHAgKz0gNDsKLSsgIH0g ZWxzZSB7Ci0rICAgICpwcCA9IHBsaW1pdCArIDI7Ci0rICAgIHJldHVybiAwOwotKyAgfQotKwot KyAgaWYgKHNpZ24pIGlkID0gLWlkOwotKwotKyAgKnBwID0gcDsKLSsKLSsgIHJldHVybiBpZDsK LSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgdW5zaWduZWQg Y2hhciAqIFNlYXJjaEZvcklEKHVuc2lnbmVkIGNoYXIgKnAsIGludCBoZWFkZXJfc2l6ZSwgaW50 IHNpemUsIGludCBudW1pdGVtcywgaW50IGlkKSB7Ci0rICB1bnNpZ25lZCBjaGFyICpwbGltaXQs ICpiYXNlOwotKyAgaW50ICBpLCBpbnQzMjsKLSsKLSsgIGJhc2UgPSBwOwotKyAgcGxpbWl0ID0g cCArIHNpemUgLSAxOwotKyAgcCArPSBoZWFkZXJfc2l6ZTsKLSsKLSsgIC8vIHNlYXJjaCBmb3Ig dGhlIElEIGluIGFsbCB0aGUgYXJndW1lbnRzLgotKyAgZm9yIChpID0gMDsgaSA8IG51bWl0ZW1z OyBpKyspIHsKLSsgICAgaW50MzIgPSByZWFkX21hcF9pZCgmcCwgcGxpbWl0KTsKLSsgICAgaWYg KHAgPiBwbGltaXQpIGJyZWFrOwotKyAgICAvLyBDb21wYXJlIGlmIHRoZSBJRHMgYXJlIGVxdWFs LgotKyAgICBpZiAoaW50MzIgPT0gaWQpIHJldHVybiBwOwotKyAgICAvLyB4eHgKLSsgICAgcCA9 IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7Ci0rICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2Up IGJyZWFrOwotKyAgfQotKwotKyAgcmV0dXJuIE5VTEw7Ci0rCi0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIHVuc2lnbmVkIGNoYXIgKiBTZWFyY2hGb3JLZXko dW5zaWduZWQgY2hhciAqcCwgaW50IGhlYWRlcl9zaXplLCBpbnQgc2l6ZSwgaW50IG51bWl0ZW1z LCBjb25zdCBjaGFyICprZXkpIHsKLSsgIHVuc2lnbmVkIGNoYXIgbGVuLCAqcGxpbWl0LCAqYmFz ZTsKLSsgIGludCAgaSwga2V5bGVuOwotKwotKyAgYmFzZSA9IHA7Ci0rICBwbGltaXQgPSBwICsg c2l6ZSAtIDE7Ci0rICBwICs9IGhlYWRlcl9zaXplOwotKwotKyAga2V5bGVuID0gc3RybGVuKGtl eSk7Ci0rCi0rICAvLyBzZWFyY2ggZm9yIHRoZSBrZXkgaW4gYWxsIHRoZSBhcmd1bWVudHMuCi0r ICBmb3IgKGkgPSAwOyBpIDwgbnVtaXRlbXM7IGkrKykgewotKyAgICBpZiAocCA+IHBsaW1pdCkg YnJlYWs7Ci0rICAgIGxlbiA9ICooKHVuc2lnbmVkIGNoYXIgKilwKTsKLSsgICAgcCsrOwotKyAg ICBpZiAocCArIGxlbiA+IHBsaW1pdCkgYnJlYWs7Ci0rICAgIC8vIENvbXBhcmUgaWYgdGhlIHN0 cmluZ3MgYXJlIGVxdWFsLgotKyAgICBpZiAobGVuID4gMCkgewotKyAgICAgIGlmIChzdHJuaWNt cCgoY2hhciopcCwga2V5LCBsZW4pID09IDApIHsgICAvLyBub3RlIHRoYXQgdGhlcmUgaXMgbm8g bnVsbCB0ZXJtaW5hdG9yIGhlcmUKLSsgICAgICAgIGlmIChrZXlsZW4gPT0gbGVuKSB7Ci0rICAg ICAgICAgIHAgKz0gbGVuOwotKyAgICAgICAgICByZXR1cm4gcDsKLSsgICAgICAgIH0KLSsgICAg ICB9Ci0rICAgICAgcCArPSBsZW47Ci0rICAgIH0gZWxzZSBpZiAobGVuID09IGtleWxlbikgeyAg IC8vIGluIHRoZSBjYXNlIG9mIGVtcHR5IHN0cmluZzogIiIKLSsgICAgICByZXR1cm4gcDsKLSsg ICAgfQotKyAgICAvLyB4eHgKLSsgICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7Ci0r ICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2UpIGJyZWFrOwotKyAgfQotKwotKyAgcmV0dXJuIE5V TEw7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJP T0wgQWRkVmFsdWUoYmlubiAqaXRlbSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUp OwotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9s aXN0X2FkZF9yYXcoYmlubiAqaXRlbSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUp IHsKLSsKLSsgIGlmIChpdGVtID09IE5VTEwgfHwgaXRlbS0+dHlwZSAhPSBCSU5OX0xJU1QgfHwg aXRlbS0+d3JpdGFibGUgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIC8vaWYgKENoZWNr QWxsb2NhdGlvbihpdGVtLCA0KSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOyAgLy8gNCBieXRlcyB1 c2VkIGZvciBkYXRhX3N0b3JlIGFuZCBkYXRhX2Zvcm1hdC4KLSsKLSsgIGlmIChBZGRWYWx1ZShp dGVtLCB0eXBlLCBwdmFsdWUsIHNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBp dGVtLT5jb3VudCsrOwotKwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9vYmplY3Rfc2V0X3JhdyhiaW5u ICppdGVtLCBjb25zdCBjaGFyICprZXksIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXpl KSB7Ci0rICB1bnNpZ25lZCBjaGFyICpwLCBsZW47Ci0rICBpbnQgaW50MzI7Ci0rCi0rICBpZiAo aXRlbSA9PSBOVUxMIHx8IGl0ZW0tPnR5cGUgIT0gQklOTl9PQkpFQ1QgfHwgaXRlbS0+d3JpdGFi bGUgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmIChrZXkgPT0gTlVMTCkgcmV0dXJu IEZBTFNFOwotKyAgaW50MzIgPSBzdHJsZW4oa2V5KTsKLSsgIGlmIChpbnQzMiA+IDI1NSkgcmV0 dXJuIEZBTFNFOwotKwotKyAgLy8gaXMgdGhlIGtleSBhbHJlYWR5IGluIGl0PwotKyAgcCA9IFNl YXJjaEZvcktleShpdGVtLT5wYnVmLCBNQVhfQklOTl9IRUFERVIsIGl0ZW0tPnVzZWRfc2l6ZSwg aXRlbS0+Y291bnQsIGtleSk7Ci0rICBpZiAocCkgcmV0dXJuIEZBTFNFOwotKwotKyAgLy8gc3Rh cnQgYWRkaW5nIGl0Ci0rCi0rICBpZiAoQ2hlY2tBbGxvY2F0aW9uKGl0ZW0sIDEgKyBpbnQzMikg PT0gRkFMU0UpIHJldHVybiBGQUxTRTsgIC8vIGJ5dGVzIHVzZWQgZm9yIHRoZSBrZXkgc2l6ZSBh bmQgdGhlIGtleSBpdHNlbGYuCi0rCi0rICBwID0gKCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBi dWYpICsgaXRlbS0+dXNlZF9zaXplOwotKyAgbGVuID0gaW50MzI7Ci0rICAqcCA9IGxlbjsKLSsg IHArKzsKLSsgIG1lbWNweShwLCBrZXksIGludDMyKTsKLSsgIGludDMyKys7ICAvLyBub3cgY29u dGFpbnMgdGhlIHN0cmxlbiArIDEgYnl0ZSBmb3IgdGhlIGxlbgotKyAgaXRlbS0+dXNlZF9zaXpl ICs9IGludDMyOwotKwotKyAgaWYgKEFkZFZhbHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6ZSkg PT0gRkFMU0UpIHsKLSsgICAgaXRlbS0+dXNlZF9zaXplIC09IGludDMyOwotKyAgICByZXR1cm4g RkFMU0U7Ci0rICB9Ci0rCi0rICBpdGVtLT5jb3VudCsrOwotKwotKyAgcmV0dXJuIFRSVUU7Ci0r Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgYmlu bl9tYXBfc2V0X3JhdyhiaW5uICppdGVtLCBpbnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUs IGludCBzaXplKSB7Ci0rICB1bnNpZ25lZCBjaGFyICpiYXNlLCAqcCwgc2lnbjsKLSsgIGludCBp ZF9zaXplOwotKwotKyAgaWYgKGl0ZW0gPT0gTlVMTCB8fCBpdGVtLT50eXBlICE9IEJJTk5fTUFQ IHx8IGl0ZW0tPndyaXRhYmxlID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyBpcyB0 aGUgSUQgYWxyZWFkeSBpbiBpdD8KLSsgIHAgPSBTZWFyY2hGb3JJRChpdGVtLT5wYnVmLCBNQVhf QklOTl9IRUFERVIsIGl0ZW0tPnVzZWRfc2l6ZSwgaXRlbS0+Y291bnQsIGlkKTsKLSsgIGlmIChw KSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyBzdGFydCBhZGRpbmcgaXQKLSsKLSsgIGlmIChDaGVj a0FsbG9jYXRpb24oaXRlbSwgNSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsgIC8vIG1heCA1IGJ5 dGVzIHVzZWQgZm9yIHRoZSBpZC4KLSsKLSsgIHAgPSBiYXNlID0gKCh1bnNpZ25lZCBjaGFyICop IGl0ZW0tPnBidWYpICsgaXRlbS0+dXNlZF9zaXplOwotKwotKyAgc2lnbiA9IChpZCA8IDApOwot KyAgaWYgKHNpZ24pIGlkID0gLWlkOwotKwotKyAgaWYgKGlkIDw9IDB4M0YpIHsKLSsgICAgKnAr KyA9IChzaWduIDw8IDYpIHwgaWQ7Ci0rICB9IGVsc2UgaWYgKGlkIDw9IDB4RkZGKSB7Ci0rICAg ICpwKysgPSAweDgwIHwgKHNpZ24gPDwgNCkgfCAoKGlkICYgMHhGMDApID4+IDgpOwotKyAgICAq cCsrID0gaWQgJiAweEZGOwotKyAgfSBlbHNlIGlmIChpZCA8PSAweEZGRkZGKSB7Ci0rICAgICpw KysgPSAweEEwIHwgKHNpZ24gPDwgNCkgfCAoKGlkICYgMHhGMDAwMCkgPj4gMTYpOwotKyAgICAq cCsrID0gKGlkICYgMHhGRjAwKSA+PiA4OwotKyAgICAqcCsrID0gaWQgJiAweEZGOwotKyAgfSBl bHNlIGlmIChpZCA8PSAweEZGRkZGRkYpIHsKLSsgICAgKnArKyA9IDB4QzAgfCAoc2lnbiA8PCA0 KSB8ICgoaWQgJiAweEYwMDAwMDApID4+IDI0KTsKLSsgICAgKnArKyA9IChpZCAmIDB4RkYwMDAw KSA+PiAxNjsKLSsgICAgKnArKyA9IChpZCAmIDB4RkYwMCkgPj4gODsKLSsgICAgKnArKyA9IGlk ICYgMHhGRjsKLSsgIH0gZWxzZSB7Ci0rICAgICpwKysgPSAweEUwOwotKyAgICBpZiAoc2lnbikg aWQgPSAtaWQ7Ci0rICAgIGNvcHlfYmUzMigodTMyKilwLCAodTMyKikmaWQpOwotKyAgICBwICs9 IDQ7Ci0rICB9Ci0rCi0rICBpZF9zaXplID0gKHAgLSBiYXNlKTsKLSsgIGl0ZW0tPnVzZWRfc2l6 ZSArPSBpZF9zaXplOwotKwotKyAgaWYgKEFkZFZhbHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6 ZSkgPT0gRkFMU0UpIHsKLSsgICAgaXRlbS0+dXNlZF9zaXplIC09IGlkX3NpemU7Ci0rICAgIHJl dHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIGl0ZW0tPmNvdW50Kys7Ci0rCi0rICByZXR1cm4gVFJV RTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgdm9p ZCAqIGNvbXByZXNzX2ludChpbnQgKnBzdG9yYWdlX3R5cGUsIGludCAqcHR5cGUsIHZvaWQgKnBz b3VyY2UpIHsKLSsgIGludCBzdG9yYWdlX3R5cGUsIHN0b3JhZ2VfdHlwZTIsIHR5cGUsIHR5cGUy PTA7Ci0rICBpbnQ2NCAgdmludCA9IDA7Ci0rICB1aW50NjQgdnVpbnQ7Ci0rICBjaGFyICpwdmFs dWU7Ci0rI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotKyAgaW50IHNpemUxLCBzaXplMjsK LSsjZW5kaWYKLSsKLSsgIHN0b3JhZ2VfdHlwZSA9ICpwc3RvcmFnZV90eXBlOwotKyAgaWYgKHN0 b3JhZ2VfdHlwZSA9PSBCSU5OX1NUT1JBR0VfQllURSkgcmV0dXJuIHBzb3VyY2U7Ci0rCi0rICB0 eXBlID0gKnB0eXBlOwotKwotKyAgc3dpdGNoICh0eXBlKSB7Ci0rICBjYXNlIEJJTk5fSU5UNjQ6 Ci0rICAgIHZpbnQgPSAqKGludDY0Kilwc291cmNlOwotKyAgICBnb3RvIGxvY19zaWduZWQ7Ci0r ICBjYXNlIEJJTk5fSU5UMzI6Ci0rICAgIHZpbnQgPSAqKGludCopcHNvdXJjZTsKLSsgICAgZ290 byBsb2Nfc2lnbmVkOwotKyAgY2FzZSBCSU5OX0lOVDE2OgotKyAgICB2aW50ID0gKihzaG9ydCop cHNvdXJjZTsKLSsgICAgZ290byBsb2Nfc2lnbmVkOwotKyAgY2FzZSBCSU5OX1VJTlQ2NDoKLSsg ICAgdnVpbnQgPSAqKHVpbnQ2NCopcHNvdXJjZTsKLSsgICAgZ290byBsb2NfcG9zaXRpdmU7Ci0r ICBjYXNlIEJJTk5fVUlOVDMyOgotKyAgICB2dWludCA9ICoodW5zaWduZWQgaW50Kilwc291cmNl OwotKyAgICBnb3RvIGxvY19wb3NpdGl2ZTsKLSsgIGNhc2UgQklOTl9VSU5UMTY6Ci0rICAgIHZ1 aW50ID0gKih1bnNpZ25lZCBzaG9ydCopcHNvdXJjZTsKLSsgICAgZ290byBsb2NfcG9zaXRpdmU7 Ci0rICB9Ci0rCi0rbG9jX3NpZ25lZDoKLSsKLSsgIGlmICh2aW50ID49IDApIHsKLSsgICAgdnVp bnQgPSB2aW50OwotKyAgICBnb3RvIGxvY19wb3NpdGl2ZTsKLSsgIH0KLSsKLSsvL2xvY19uZWdh dGl2ZToKLSsKLSsgIGlmICh2aW50ID49IElOVDhfTUlOKSB7Ci0rICAgIHR5cGUyID0gQklOTl9J TlQ4OwotKyAgfSBlbHNlCi0rICBpZiAodmludCA+PSBJTlQxNl9NSU4pIHsKLSsgICAgdHlwZTIg PSBCSU5OX0lOVDE2OwotKyAgfSBlbHNlCi0rICBpZiAodmludCA+PSBJTlQzMl9NSU4pIHsKLSsg ICAgdHlwZTIgPSBCSU5OX0lOVDMyOwotKyAgfQotKyAgZ290byBsb2NfZXhpdDsKLSsKLStsb2Nf cG9zaXRpdmU6Ci0rCi0rICBpZiAodnVpbnQgPD0gVUlOVDhfTUFYKSB7Ci0rICAgIHR5cGUyID0g QklOTl9VSU5UODsKLSsgIH0gZWxzZQotKyAgaWYgKHZ1aW50IDw9IFVJTlQxNl9NQVgpIHsKLSsg ICAgdHlwZTIgPSBCSU5OX1VJTlQxNjsKLSsgIH0gZWxzZQotKyAgaWYgKHZ1aW50IDw9IFVJTlQz Ml9NQVgpIHsKLSsgICAgdHlwZTIgPSBCSU5OX1VJTlQzMjsKLSsgIH0KLSsKLStsb2NfZXhpdDoK LSsKLSsgIHB2YWx1ZSA9IChjaGFyICopIHBzb3VyY2U7Ci0rCi0rICBpZiAodHlwZTIgJiYgdHlw ZTIgIT0gdHlwZSkgewotKyAgICAqcHR5cGUgPSB0eXBlMjsKLSsgICAgc3RvcmFnZV90eXBlMiA9 IGJpbm5fZ2V0X3dyaXRlX3N0b3JhZ2UodHlwZTIpOwotKyAgICAqcHN0b3JhZ2VfdHlwZSA9IHN0 b3JhZ2VfdHlwZTI7Ci0rI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotKyAgICBzaXplMSA9 IGdldF9zdG9yYWdlX3NpemUoc3RvcmFnZV90eXBlKTsKLSsgICAgc2l6ZTIgPSBnZXRfc3RvcmFn ZV9zaXplKHN0b3JhZ2VfdHlwZTIpOwotKyAgICBwdmFsdWUgKz0gKHNpemUxIC0gc2l6ZTIpOwot KyNlbmRpZgotKyAgfQotKwotKyAgcmV0dXJuIHB2YWx1ZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgaW50IHR5cGVfZmFtaWx5KGludCB0eXBlKTsK LSsKLStCSU5OX1BSSVZBVEUgQk9PTCBBZGRWYWx1ZShiaW5uICppdGVtLCBpbnQgdHlwZSwgdm9p ZCAqcHZhbHVlLCBpbnQgc2l6ZSkgewotKyAgaW50IGludDMyLCBBcmdTaXplLCBzdG9yYWdlX3R5 cGUsIGV4dHJhX3R5cGU7Ci0rICB1bnNpZ25lZCBjaGFyICpwOwotKwotKyAgYmlubl9nZXRfdHlw ZV9pbmZvKHR5cGUsICZzdG9yYWdlX3R5cGUsICZleHRyYV90eXBlKTsKLSsKLSsgIGlmIChwdmFs dWUgPT0gTlVMTCkgewotKyAgICBzd2l0Y2ggKHN0b3JhZ2VfdHlwZSkgewotKyAgICAgIGNhc2Ug QklOTl9TVE9SQUdFX05PQllURVM6Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEJJTk5f U1RPUkFHRV9CTE9COgotKyAgICAgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKLSsgICAgICAg IGlmIChzaXplID09IDApIGJyZWFrOyAvLyB0aGUgMiBhYm92ZSBhcmUgYWxsb3dlZCB0byBoYXZl IDAgbGVuZ3RoCi0rCS8qIGZhbGwgdGhyb3VnaCAqLwotKyAgICAgIGRlZmF1bHQ6Ci0rICAgICAg ICByZXR1cm4gRkFMU0U7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIGlmICh0eXBlX2ZhbWlseSh0eXBl KSA9PSBCSU5OX0ZBTUlMWV9JTlQgJiYgaXRlbS0+ZGlzYWJsZV9pbnRfY29tcHJlc3Npb24gPT0g RkFMU0UpCi0rICAgIHB2YWx1ZSA9IGNvbXByZXNzX2ludCgmc3RvcmFnZV90eXBlLCAmdHlwZSwg cHZhbHVlKTsKLSsKLSsgIHN3aXRjaCAoc3RvcmFnZV90eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9T VE9SQUdFX05PQllURVM6Ci0rICAgICAgc2l6ZSA9IDA7Ci0rICAgICAgQXJnU2l6ZSA9IHNpemU7 Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6Ci0rICAgICAgc2l6 ZSA9IDE7Ci0rICAgICAgQXJnU2l6ZSA9IHNpemU7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug QklOTl9TVE9SQUdFX1dPUkQ6Ci0rICAgICAgc2l6ZSA9IDI7Ci0rICAgICAgQXJnU2l6ZSA9IHNp emU7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgotKyAgICAg IHNpemUgPSA0OwotKyAgICAgIEFyZ1NpemUgPSBzaXplOwotKyAgICAgIGJyZWFrOwotKyAgICBj YXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgICBzaXplID0gODsKLSsgICAgICBBcmdTaXpl ID0gc2l6ZTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKLSsg ICAgICBpZiAoc2l6ZSA8IDApIHJldHVybiBGQUxTRTsKLSsgICAgICAvL2lmIChzaXplID09IDAp IC4uLgotKyAgICAgIEFyZ1NpemUgPSBzaXplICsgNDsgLy8gYXQgbGVhc3QgdGhpcyBzaXplCi0r ICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKLSsgICAgICBpZiAo c2l6ZSA8IDApIHJldHVybiBGQUxTRTsKLSsgICAgICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gc3Ry bGVuMiggKGNoYXIgKikgcHZhbHVlKTsKLSsgICAgICBBcmdTaXplID0gc2l6ZSArIDU7IC8vIGF0 IGxlYXN0IHRoaXMgc2l6ZQotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9D T05UQUlORVI6Ci0rICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuIEZBTFNFOwotKyAgICAgIEFy Z1NpemUgPSBzaXplOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIHJldHVy biBGQUxTRTsKLSsgIH0KLSsKLSsgIEFyZ1NpemUgKz0gMjsgIC8vIGF0IGxlYXN0IDIgYnl0ZXMg dXNlZCBmb3IgZGF0YV90eXBlLgotKyAgaWYgKENoZWNrQWxsb2NhdGlvbihpdGVtLCBBcmdTaXpl KSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgLy8gR2V0cyB0aGUgcG9pbnRlciB0byB0 aGUgbmV4dCBwbGFjZSBpbiBidWZmZXIKLSsgIHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+ cGJ1ZikgKyBpdGVtLT51c2VkX3NpemU7Ci0rCi0rICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgYSBj b250YWluZXIsIHN0b3JlIHRoZSBkYXRhIHR5cGUKLSsgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklO Tl9TVE9SQUdFX0NPTlRBSU5FUikgewotKyAgICBpZiAodHlwZSA+IDI1NSkgewotKyAgICAgIHUx NiB0eXBlMTYgPSB0eXBlOwotKyAgICAgIGNvcHlfYmUxNigodTE2KilwLCAodTE2KikmdHlwZTE2 KTsKLSsgICAgICBwICs9IDI7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDI7Ci0rICAgIH0g ZWxzZSB7Ci0rICAgICAgKnAgPSB0eXBlOwotKyAgICAgIHArKzsKLSsgICAgICBpdGVtLT51c2Vk X3NpemUrKzsKLSsgICAgfQotKyAgfQotKwotKyAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKLSsg ICAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKLSsgICAgICAvLyBOb3RoaW5nIHRvIGRvLgot KyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9CWVRFOgotKyAgICAgICooKGNo YXIgKikgcCkgPSAqKChjaGFyICopIHB2YWx1ZSk7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXplICs9 IDE7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6Ci0rICAgICAg Y29weV9iZTE2KCh1MTYqKXAsICh1MTYqKXB2YWx1ZSk7Ci0rICAgICAgaXRlbS0+dXNlZF9zaXpl ICs9IDI7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgotKyAg ICAgIGNvcHlfYmUzMigodTMyKilwLCAodTMyKilwdmFsdWUpOwotKyAgICAgIGl0ZW0tPnVzZWRf c2l6ZSArPSA0OwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoK LSsgICAgICBjb3B5X2JlNjQoKHU2NCopcCwgKHU2NCopcHZhbHVlKTsKLSsgICAgICBpdGVtLT51 c2VkX3NpemUgKz0gODsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxP QjoKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgotKyAgICAgIGlmIChzaXplID4gMTI3 KSB7Ci0rICAgICAgICBpbnQzMiA9IHNpemUgfCAweDgwMDAwMDAwOwotKyAgICAgICAgY29weV9i ZTMyKCh1MzIqKXAsICh1MzIqKSZpbnQzMik7Ci0rICAgICAgICBwICs9IDQ7Ci0rICAgICAgICBp dGVtLT51c2VkX3NpemUgKz0gNDsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgKigodW5zaWdu ZWQgY2hhciAqKSBwKSA9IHNpemU7Ci0rICAgICAgICBwKys7Ci0rICAgICAgICBpdGVtLT51c2Vk X3NpemUrKzsKLSsgICAgICB9Ci0rICAgICAgbWVtY3B5KHAsIHB2YWx1ZSwgc2l6ZSk7Ci0rICAg ICAgaWYgKHN0b3JhZ2VfdHlwZSA9PSBCSU5OX1NUT1JBR0VfU1RSSU5HKSB7Ci0rICAgICAgICBw ICs9IHNpemU7Ci0rICAgICAgICAqKChjaGFyICopIHApID0gKGNoYXIpIDA7Ci0rICAgICAgICBz aXplKys7ICAvLyBudWxsIHRlcm1pbmF0b3IKLSsgICAgICB9Ci0rICAgICAgaXRlbS0+dXNlZF9z aXplICs9IHNpemU7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRB SU5FUjoKLSsgICAgICBtZW1jcHkocCwgcHZhbHVlLCBzaXplKTsKLSsgICAgICBpdGVtLT51c2Vk X3NpemUgKz0gc2l6ZTsKLSsgICAgICBicmVhazsKLSsgIH0KLSsKLSsgIGl0ZW0tPmRpcnR5ID0g VFJVRTsKLSsKLSsgIHJldHVybiBUUlVFOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK0JJTk5fUFJJVkFURSBCT09MIGJpbm5fc2F2ZV9oZWFkZXIoYmlubiAqaXRlbSkgewotKyAg dW5zaWduZWQgY2hhciBieXRlLCAqcDsKLSsgIGludCBpbnQzMiwgc2l6ZTsKLSsKLSsgIGlmIChp dGVtID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsjaWZuZGVmIEJJTk5fRElTQUJMRV9TTUFM TF9IRUFERVIKLSsKLSsgIHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBNQVhf QklOTl9IRUFERVI7Ci0rICBzaXplID0gaXRlbS0+dXNlZF9zaXplIC0gTUFYX0JJTk5fSEVBREVS ICsgMzsgIC8vIGF0IGxlYXN0IDMgYnl0ZXMgZm9yIHRoZSBoZWFkZXIKLSsKLSsgIC8vIHdyaXRl IHRoZSBjb3VudAotKyAgaWYgKGl0ZW0tPmNvdW50ID4gMTI3KSB7Ci0rICAgIHAgLT0gNDsKLSsg ICAgc2l6ZSArPSAzOwotKyAgICBpbnQzMiA9IGl0ZW0tPmNvdW50IHwgMHg4MDAwMDAwMDsKLSsg ICAgY29weV9iZTMyKCh1MzIqKXAsICh1MzIqKSZpbnQzMik7Ci0rICB9IGVsc2UgewotKyAgICBw LS07Ci0rICAgICpwID0gKHVuc2lnbmVkIGNoYXIpIGl0ZW0tPmNvdW50OwotKyAgfQotKwotKyAg Ly8gd3JpdGUgdGhlIHNpemUKLSsgIGlmIChzaXplID4gMTI3KSB7Ci0rICAgIHAgLT0gNDsKLSsg ICAgc2l6ZSArPSAzOwotKyAgICBpbnQzMiA9IHNpemUgfCAweDgwMDAwMDAwOwotKyAgICBjb3B5 X2JlMzIoKHUzMiopcCwgKHUzMiopJmludDMyKTsKLSsgIH0gZWxzZSB7Ci0rICAgIHAtLTsKLSsg ICAgKnAgPSAodW5zaWduZWQgY2hhcikgc2l6ZTsKLSsgIH0KLSsKLSsgIC8vIHdyaXRlIHRoZSB0 eXBlLgotKyAgcC0tOwotKyAgKnAgPSAodW5zaWduZWQgY2hhcikgaXRlbS0+dHlwZTsKLSsKLSsg IC8vIHNldCB0aGUgdmFsdWVzCi0rICBpdGVtLT5wdHIgPSBwOwotKyAgaXRlbS0+c2l6ZSA9IHNp emU7Ci0rCi0rICBVTlVTRUQoYnl0ZSk7Ci0rCi0rI2Vsc2UKLSsKLSsgIHAgPSAodW5zaWduZWQg Y2hhciAqKSBpdGVtLT5wYnVmOwotKwotKyAgLy8gd3JpdGUgdGhlIHR5cGUuCi0rICBieXRlID0g aXRlbS0+dHlwZTsKLSsgICpwID0gYnl0ZTsgcCsrOwotKyAgLy8gd3JpdGUgdGhlIHNpemUKLSsg IGludDMyID0gaXRlbS0+dXNlZF9zaXplIHwgMHg4MDAwMDAwMDsKLSsgIGNvcHlfYmUzMigodTMy KilwLCAodTMyKikmaW50MzIpOwotKyAgcCs9NDsKLSsgIC8vIHdyaXRlIHRoZSBjb3VudAotKyAg aW50MzIgPSBpdGVtLT5jb3VudCB8IDB4ODAwMDAwMDA7Ci0rICBjb3B5X2JlMzIoKHUzMiopcCwg KHUzMiopJmludDMyKTsKLSsKLSsgIGl0ZW0tPnB0ciA9IGl0ZW0tPnBidWY7Ci0rICBpdGVtLT5z aXplID0gaXRlbS0+dXNlZF9zaXplOwotKwotKyNlbmRpZgotKwotKyAgaXRlbS0+ZGlydHkgPSBG QUxTRTsKLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotKwotK3ZvaWQgQVBJRU5UUlkgYmlubl9mcmVlKGJpbm4gKml0ZW0pIHsKLSsKLSsgIGlmIChp dGVtID09IE5VTEwpIHJldHVybjsKLSsKLSsgIGlmIChpdGVtLT53cml0YWJsZSAmJiBpdGVtLT5w cmVfYWxsb2NhdGVkID09IEZBTFNFKSB7Ci0rICAgIGZyZWVfZm4oaXRlbS0+cGJ1Zik7Ci0rICB9 Ci0rCi0rICBpZiAoaXRlbS0+ZnJlZWZuKSBpdGVtLT5mcmVlZm4oaXRlbS0+cHRyKTsKLSsKLSsg IGlmIChpdGVtLT5hbGxvY2F0ZWQpIHsKLSsgICAgZnJlZV9mbihpdGVtKTsKLSsgIH0gZWxzZSB7 Ci0rICAgIG1lbXNldChpdGVtLCAwLCBzaXplb2YoYmlubikpOwotKyAgICBpdGVtLT5oZWFkZXIg PSBCSU5OX01BR0lDOwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8v IGZyZWUgdGhlIGJpbm4gc3RydWN0dXJlIGJ1dCBrZWVwcyB0aGUgYmlubiBidWZmZXIgYWxsb2Nh dGVkLCByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGl0LiB1c2UgdGhlIGZyZWUgZnVuY3Rpb24gdG8g cmVsZWFzZSB0aGUgYnVmZmVyIGxhdGVyCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fcmVsZWFzZShi aW5uICppdGVtKSB7Ci0rICB2b2lkICpkYXRhOwotKwotKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0 dXJuIE5VTEw7Ci0rCi0rICBkYXRhID0gYmlubl9wdHIoaXRlbSk7Ci0rCi0rICBpZiAoZGF0YSA+ IGl0ZW0tPnBidWYpIHsKLSsgICAgbWVtbW92ZShpdGVtLT5wYnVmLCBkYXRhLCBpdGVtLT5zaXpl KTsKLSsgICAgZGF0YSA9IGl0ZW0tPnBidWY7Ci0rICB9Ci0rCi0rICBpZiAoaXRlbS0+YWxsb2Nh dGVkKSB7Ci0rICAgIGZyZWVfZm4oaXRlbSk7Ci0rICB9IGVsc2UgewotKyAgICBtZW1zZXQoaXRl bSwgMCwgc2l6ZW9mKGJpbm4pKTsKLSsgICAgaXRlbS0+aGVhZGVyID0gQklOTl9NQUdJQzsKLSsg IH0KLSsKLSsgIHJldHVybiBkYXRhOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK0JJTk5fUFJJVkFURSBCT09MIElzVmFsaWRCaW5uSGVhZGVyKGNvbnN0IHZvaWQgKnBidWYs IGludCAqcHR5cGUsIGludCAqcGNvdW50LCBpbnQgKnBzaXplLCBpbnQgKnBoZWFkZXJzaXplKSB7 Ci0rICB1bnNpZ25lZCBjaGFyIGJ5dGUsICpwLCAqcGxpbWl0PTA7Ci0rICBpbnQgaW50MzIsIHR5 cGUsIHNpemUsIGNvdW50OwotKwotKyAgaWYgKHBidWYgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwot KwotKyAgcCA9ICh1bnNpZ25lZCBjaGFyICopIHBidWY7Ci0rCi0rICBpZiAocHNpemUgJiYgKnBz aXplID4gMCkgewotKyAgICBpZiAoKnBzaXplIDwgTUlOX0JJTk5fU0laRSkgcmV0dXJuIEZBTFNF OwotKyAgICBwbGltaXQgPSBwICsgKnBzaXplIC0gMTsKLSsgIH0KLSsKLSsgIC8vIGdldCB0aGUg dHlwZQotKyAgYnl0ZSA9ICpwOyBwKys7Ci0rICBpZiAoKGJ5dGUgJiBCSU5OX1NUT1JBR0VfTUFT SykgIT0gQklOTl9TVE9SQUdFX0NPTlRBSU5FUikgcmV0dXJuIEZBTFNFOwotKyAgaWYgKGJ5dGUg JiBCSU5OX1NUT1JBR0VfSEFTX01PUkUpIHJldHVybiBGQUxTRTsKLSsgIHR5cGUgPSBieXRlOwot KwotKyAgc3dpdGNoICh0eXBlKSB7Ci0rICAgIGNhc2UgQklOTl9MSVNUOgotKyAgICBjYXNlIEJJ Tk5fTUFQOgotKyAgICBjYXNlIEJJTk5fT0JKRUNUOgotKyAgICAgIGJyZWFrOwotKyAgICBkZWZh dWx0OgotKyAgICAgIHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIC8vIGdldCB0aGUgc2l6ZQot KyAgaWYgKHBsaW1pdCAmJiBwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0rICBpbnQzMiA9ICoo KHVuc2lnbmVkIGNoYXIqKXApOwotKyAgaWYgKGludDMyICYgMHg4MCkgewotKyAgICBpZiAocGxp bWl0ICYmIHAgKyBzaXplb2YoaW50KSAtIDEgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAg Y29weV9iZTMyKCh1MzIqKSZpbnQzMiwgKHUzMiopcCk7Ci0rICAgIGludDMyICY9IDB4N0ZGRkZG RkY7Ci0rICAgIHArPTQ7Ci0rICB9IGVsc2UgewotKyAgICBwKys7Ci0rICB9Ci0rICBzaXplID0g aW50MzI7Ci0rCi0rICAvLyBnZXQgdGhlIGNvdW50Ci0rICBpZiAocGxpbWl0ICYmIHAgPiBwbGlt aXQpIHJldHVybiBGQUxTRTsKLSsgIGludDMyID0gKigodW5zaWduZWQgY2hhciopcCk7Ci0rICBp ZiAoaW50MzIgJiAweDgwKSB7Ci0rICAgIGlmIChwbGltaXQgJiYgcCArIHNpemVvZihpbnQpIC0g MSA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgICBjb3B5X2JlMzIoKHUzMiopJmludDMyLCAo dTMyKilwKTsKLSsgICAgaW50MzIgJj0gMHg3RkZGRkZGRjsKLSsgICAgcCs9NDsKLSsgIH0gZWxz ZSB7Ci0rICAgIHArKzsKLSsgIH0KLSsgIGNvdW50ID0gaW50MzI7Ci0rCi0rICBpZiAoc2l6ZSA8 IE1JTl9CSU5OX1NJWkUgfHwgY291bnQgPCAwKSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyByZXR1 cm4gdGhlIHZhbHVlcwotKyAgaWYgKHB0eXBlKSAgKnB0eXBlICA9IHR5cGU7Ci0rICBpZiAocGNv dW50KSAqcGNvdW50ID0gY291bnQ7Ci0rICBpZiAocHNpemUpICAqcHNpemUgID0gc2l6ZTsKLSsg IGlmIChwaGVhZGVyc2l6ZSkgKnBoZWFkZXJzaXplID0gKGludCkgKHAgLSAodW5zaWduZWQgY2hh ciopcGJ1Zik7Ci0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LSsKLStCSU5OX1BSSVZBVEUgaW50IGJpbm5fYnVmX3R5cGUoY29uc3Qgdm9pZCAqcGJ1Zikgewot KyAgaW50ICB0eXBlOwotKwotKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihwYnVmLCAmdHlwZSwg TlVMTCwgTlVMTCwgTlVMTCkpIHJldHVybiBJTlZBTElEX0JJTk47Ci0rCi0rICByZXR1cm4gdHlw ZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgaW50 IGJpbm5fYnVmX2NvdW50KGNvbnN0IHZvaWQgKnBidWYpIHsKLSsgIGludCAgbml0ZW1zOwotKwot KyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihwYnVmLCBOVUxMLCAmbml0ZW1zLCBOVUxMLCBOVUxM KSkgcmV0dXJuIDA7Ci0rCi0rICByZXR1cm4gbml0ZW1zOwotKwotK30KLSsKLSsvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBpbnQgYmlubl9idWZfc2l6ZShjb25zdCB2b2lk ICpwYnVmKSB7Ci0rICBpbnQgIHNpemU9MDsKLSsKLSsgIGlmICghSXNWYWxpZEJpbm5IZWFkZXIo cGJ1ZiwgTlVMTCwgTlVMTCwgJnNpemUsIE5VTEwpKSByZXR1cm4gMDsKLSsKLSsgIHJldHVybiBz aXplOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK3ZvaWQgKiBBUElFTlRS WSBiaW5uX3B0cihjb25zdCB2b2lkICpwdHIpIHsKLSsgIGJpbm4gKml0ZW07Ci0rCi0rICBzd2l0 Y2ggKGJpbm5fZ2V0X3B0cl90eXBlKHB0cikpIHsKLSsgIGNhc2UgQklOTl9TVFJVQ1Q6Ci0rICAg IGl0ZW0gPSAoYmlubiopIHB0cjsKLSsgICAgaWYgKGl0ZW0tPndyaXRhYmxlICYmIGl0ZW0tPmRp cnR5KSB7Ci0rICAgICAgYmlubl9zYXZlX2hlYWRlcihpdGVtKTsKLSsgICAgfQotKyAgICByZXR1 cm4gaXRlbS0+cHRyOwotKyAgY2FzZSBCSU5OX0JVRkZFUjoKLSsgICAgcmV0dXJuICh2b2lkKilw dHI7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLStpbnQgQVBJRU5UUlkgYmlubl9zaXplKGNvbnN0IHZvaWQg KnB0cikgewotKyAgYmlubiAqaXRlbTsKLSsKLSsgIHN3aXRjaCAoYmlubl9nZXRfcHRyX3R5cGUo cHRyKSkgewotKyAgY2FzZSBCSU5OX1NUUlVDVDoKLSsgICAgaXRlbSA9IChiaW5uKikgcHRyOwot KyAgICBpZiAoaXRlbS0+d3JpdGFibGUgJiYgaXRlbS0+ZGlydHkpIHsKLSsgICAgICBiaW5uX3Nh dmVfaGVhZGVyKGl0ZW0pOwotKyAgICB9Ci0rICAgIHJldHVybiBpdGVtLT5zaXplOwotKyAgY2Fz ZSBCSU5OX0JVRkZFUjoKLSsgICAgcmV0dXJuIGJpbm5fYnVmX3NpemUocHRyKTsKLSsgIGRlZmF1 bHQ6Ci0rICAgIHJldHVybiAwOwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotKwotK2ludCBBUElFTlRSWSBiaW5uX3R5cGUoY29uc3Qgdm9pZCAqcHRyKSB7Ci0rICBiaW5u ICppdGVtOwotKwotKyAgc3dpdGNoIChiaW5uX2dldF9wdHJfdHlwZShwdHIpKSB7Ci0rICBjYXNl IEJJTk5fU1RSVUNUOgotKyAgICBpdGVtID0gKGJpbm4qKSBwdHI7Ci0rICAgIHJldHVybiBpdGVt LT50eXBlOwotKyAgY2FzZSBCSU5OX0JVRkZFUjoKLSsgICAgcmV0dXJuIGJpbm5fYnVmX3R5cGUo cHRyKTsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiAtMTsKLSsgIH0KLSsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLStpbnQgQVBJRU5UUlkgYmlubl9jb3VudChjb25zdCB2b2lk ICpwdHIpIHsKLSsgIGJpbm4gKml0ZW07Ci0rCi0rICBzd2l0Y2ggKGJpbm5fZ2V0X3B0cl90eXBl KHB0cikpIHsKLSsgIGNhc2UgQklOTl9TVFJVQ1Q6Ci0rICAgIGl0ZW0gPSAoYmlubiopIHB0cjsK LSsgICAgcmV0dXJuIGl0ZW0tPmNvdW50OwotKyAgY2FzZSBCSU5OX0JVRkZFUjoKLSsgICAgcmV0 dXJuIGJpbm5fYnVmX2NvdW50KHB0cik7Ci0rICBkZWZhdWx0OgotKyAgICByZXR1cm4gLTE7Ci0r ICB9Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLy8gdGhlIGNvbnRhaW5l ciBjYW4gYmUgc21hbGxlciB0aGFuIHRoZSBpbmZvcm1lZCBzaXplCi0rQklOTl9QUklWQVRFIEJP T0wgYmlubl9pc192YWxpZF9leDIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBj b3VudCwgaW50ICpwc2l6ZSkgewotKyAgaW50ICBpLCB0eXBlLCBjb3VudCwgc2l6ZSwgaGVhZGVy X3NpemU7Ci0rICB1bnNpZ25lZCBjaGFyICpwLCAqcGxpbWl0LCAqYmFzZSwgbGVuOwotKwotKyAg aWYgKHB0ciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyBpcyB0aGVyZSBhbiBpbmZv cm1lZCBzaXplPwotKyAgaWYgKHBzaXplICYmICpwc2l6ZSA+IDApIHsKLSsgICAgc2l6ZSA9ICpw c2l6ZTsKLSsgIH0gZWxzZSB7Ci0rICAgIHNpemUgPSAwOwotKyAgfQotKwotKyAgaWYgKCFJc1Zh bGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3NpemUpKSBy ZXR1cm4gRkFMU0U7Ci0rCi0rICAvLyBpcyB0aGVyZSBhbiBpbmZvcm1lZCBzaXplPwotKyAgaWYg KHBzaXplICYmICpwc2l6ZSA+IDApIHsKLSsgICAgLy8gaXMgaXQgYmlnZ2VyIHRoYW4gdGhlIGJ1 ZmZlcj8KLSsgICAgaWYgKHNpemUgPiAqcHNpemUpIHJldHVybiBGQUxTRTsKLSsgIH0KLSsgIC8v IGlzIHRoZXJlIGFuIGluZm9ybWVkIGNvdW50PwotKyAgaWYgKHBjb3VudCAmJiAqcGNvdW50ID4g MCkgewotKyAgICAvLyBpcyBpdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluIHRoZSBidWZmZXI/Ci0r ICAgIGlmIChjb3VudCAhPSAqcGNvdW50KSByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rICAvLyBpcyB0 aGVyZSBhbiBpbmZvcm1lZCB0eXBlPwotKyAgaWYgKHB0eXBlICYmICpwdHlwZSAhPSAwKSB7Ci0r ICAgIC8vIGlzIGl0IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gdGhlIGJ1ZmZlcj8KLSsgICAgaWYg KHR5cGUgIT0gKnB0eXBlKSByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICBwID0gKHVuc2lnbmVk IGNoYXIgKilwdHI7Ci0rICBiYXNlID0gcDsKLSsgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKLSsK LSsgIHAgKz0gaGVhZGVyX3NpemU7Ci0rCi0rICAvLyBwcm9jZXNzIGVhY2ggKGtleSBhbmQpIHZh bHVlCi0rICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotKyAgICBzd2l0Y2ggKHR5cGUp IHsKLSsgICAgICBjYXNlIEJJTk5fT0JKRUNUOgotKyAgICAgICAgaWYgKHAgPiBwbGltaXQpIGdv dG8gSW52YWxpZDsKLSsgICAgICAgIC8vIGdldCB0aGUga2V5IChzdHJpbmcpIHNpemUKLSsgICAg ICAgIGxlbiA9ICpwOwotKyAgICAgICAgcCsrOwotKyAgICAgICAgLy9pZiAobGVuID09IDApIGdv dG8gSW52YWxpZDsKLSsgICAgICAgIC8vIGFkdmFuY2Ugb3ZlciB0aGUga2V5Ci0rICAgICAgICBw ICs9IGxlbjsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgQklOTl9NQVA6Ci0rICAgICAg ICAvLyBhZHZhbmNlIG92ZXIgdGhlIGtleQotKyAgICAgICAgcmVhZF9tYXBfaWQoJnAsIHBsaW1p dCk7Ci0rICAgICAgICBicmVhazsKLSsgICAgICBjYXNlIEJJTk5fTElTVDoKLSsgICAgICAgIC8v IG5vIGtleQotKyAgICAgICAgYnJlYWs7Ci0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIGdvdG8g SW52YWxpZDsKLSsgICAgfQotKyAgICAvLyBjaGVjayB0aGUgdmFsdWUKLSsgICAgaWYgKHAgPiBw bGltaXQpIGdvdG8gSW52YWxpZDsKLSsgICAgaWYgKCgqcCAmIEJJTk5fU1RPUkFHRV9NQVNLKSA9 PSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSKSB7Ci0rICAgICAgLy8gcmVjdXJzaXZlbHkgY2hlY2sg dGhlIGludGVybmFsIGNvbnRhaW5lcgotKyAgICAgIGludCBzaXplMiA9IHBsaW1pdCAtIHAgKyAx OyAgLy8gbWF4aW11bSBjb250YWluZXIgc2l6ZQotKyAgICAgIGlmIChiaW5uX2lzX3ZhbGlkX2V4 MihwLCBOVUxMLCBOVUxMLCAmc2l6ZTIpID09IEZBTFNFKSBnb3RvIEludmFsaWQ7Ci0rICAgICAg cCArPSBzaXplMjsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAvLyBhZHZhbmNlIG92ZXIgdGhlIHZh bHVlCi0rICAgICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7Ci0rICAgICAgaWYgKHAg PT0gMCB8fCBwIDwgYmFzZSkgZ290byBJbnZhbGlkOwotKyAgICB9Ci0rICB9Ci0rCi0rICBpZiAo cHR5cGUgICYmICpwdHlwZT09MCkgKnB0eXBlID0gdHlwZTsKLSsgIGlmIChwY291bnQgJiYgKnBj b3VudD09MCkgKnBjb3VudCA9IGNvdW50OwotKyAgaWYgKHBzaXplKSAqcHNpemUgPSBzaXplOwot KyAgcmV0dXJuIFRSVUU7Ci0rCi0rSW52YWxpZDoKLSsgIHJldHVybiBGQUxTRTsKLSsKLSt9Ci0r Ci0rLy8gdGhlIGNvbnRhaW5lciBtdXN0IGhhdmUgdGhlIGluZm9ybWVkIHNpemUsIGlmIGluZm9y bWVkCi0rQk9PTCBBUElFTlRSWSBiaW5uX2lzX3ZhbGlkX2V4KGNvbnN0IHZvaWQgKnB0ciwgaW50 ICpwdHlwZSwgaW50ICpwY291bnQsIGludCAqcHNpemUpIHsKLSsgIGludCBzaXplOwotKwotKyAg aWYgKHBzaXplICYmICpwc2l6ZSA+IDApIHsKLSsgICAgc2l6ZSA9ICpwc2l6ZTsKLSsgIH0gZWxz ZSB7Ci0rICAgIHNpemUgPSAwOwotKyAgfQotKwotKyAgaWYgKGJpbm5faXNfdmFsaWRfZXgyKHB0 ciwgcHR5cGUsIHBjb3VudCwgJnNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBp ZiAocHNpemUpIHsKLSsgICAgaWYgKCpwc2l6ZSA+IDApIHsKLSsgICAgICBpZiAoc2l6ZSAhPSAq cHNpemUpIHJldHVybiBGQUxTRTsKLSsgICAgfSBlbHNlIGlmICgqcHNpemU9PTApIHsKLSsgICAg ICAqcHNpemUgPSBzaXplOwotKyAgICB9Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0r Ci0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5faXNfdmFsaWQo Y29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50ICpwc2l6ZSkgewot KwotKyAgaWYgKHB0eXBlKSAgKnB0eXBlICA9IDA7Ci0rICBpZiAocGNvdW50KSAqcGNvdW50ID0g MDsKLSsgIGlmIChwc2l6ZSkgICpwc2l6ZSAgPSAwOwotKwotKyAgcmV0dXJuIGJpbm5faXNfdmFs aWRfZXgocHRyLCBwdHlwZSwgcGNvdW50LCBwc2l6ZSk7Ci0rCi0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rLyoqKiBJTlRFUk5BTCBGVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK0JJTk5fUFJJVkFURSBCT09MIEdldFZhbHVlKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVk IGNoYXIgKnBsaW1pdCwgYmlubiAqdmFsdWUpIHsKLSsgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKLSsg IGludCAgIGRhdGFfdHlwZSwgc3RvcmFnZV90eXBlOyAgLy8sIGV4dHJhX3R5cGU7Ci0rICBpbnQg ICBEYXRhU2l6ZTsKLSsgIHZvaWQgKnAyOwotKwotKyAgaWYgKHZhbHVlID09IE5VTEwpIHJldHVy biBGQUxTRTsKLSsgIG1lbXNldCh2YWx1ZSwgMCwgc2l6ZW9mKGJpbm4pKTsKLSsgIHZhbHVlLT5o ZWFkZXIgPSBCSU5OX01BR0lDOwotKyAgLy92YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAtLSAg YWxyZWFkeSB6ZXJvZWQKLSsgIC8vdmFsdWUtPndyaXRhYmxlID0gRkFMU0U7Ci0rCi0rICAvLyBz YXZlcyBmb3IgdXNlIHdpdGggQklOTl9TVE9SQUdFX0NPTlRBSU5FUgotKyAgcDIgPSBwOwotKwot KyAgLy8gcmVhZCB0aGUgZGF0YSB0eXBlCi0rICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNF OwotKyAgYnl0ZSA9ICpwOyBwKys7Ci0rICBzdG9yYWdlX3R5cGUgPSBieXRlICYgQklOTl9TVE9S QUdFX01BU0s7Ci0rICBpZiAoYnl0ZSAmIEJJTk5fU1RPUkFHRV9IQVNfTU9SRSkgewotKyAgICBk YXRhX3R5cGUgPSBieXRlIDw8IDg7Ci0rICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7 Ci0rICAgIGJ5dGUgPSAqcDsgcCsrOwotKyAgICBkYXRhX3R5cGUgfD0gYnl0ZTsKLSsgICAgLy9l eHRyYV90eXBlID0gZGF0YV90eXBlICYgQklOTl9UWVBFX01BU0sxNjsKLSsgIH0gZWxzZSB7Ci0r ICAgIGRhdGFfdHlwZSA9IGJ5dGU7Ci0rICAgIC8vZXh0cmFfdHlwZSA9IGJ5dGUgJiBCSU5OX1RZ UEVfTUFTSzsKLSsgIH0KLSsKLSsgIC8vdmFsdWUtPnN0b3JhZ2VfdHlwZSA9IHN0b3JhZ2VfdHlw ZTsKLSsgIHZhbHVlLT50eXBlID0gZGF0YV90eXBlOwotKwotKyAgc3dpdGNoIChzdG9yYWdlX3R5 cGUpIHsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6Ci0rICAgIGJyZWFrOwotKyAgY2Fz ZSBCSU5OX1NUT1JBR0VfQllURToKLSsgICAgaWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsK LSsgICAgdmFsdWUtPnZ1aW50OCA9ICooKHVuc2lnbmVkIGNoYXIgKikgcCk7Ci0rICAgIHZhbHVl LT5wdHIgPSBwOyAgIC8vdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dnVpbnQ4OwotKyAgICBicmVhazsK LSsgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6Ci0rICAgIGlmIChwICsgMSA+IHBsaW1pdCkgcmV0 dXJuIEZBTFNFOwotKyAgICBjb3B5X2JlMTYoKHUxNiopJnZhbHVlLT52aW50MTYsICh1MTYqKXAp OwotKyAgICB2YWx1ZS0+cHRyID0gJnZhbHVlLT52aW50MTY7Ci0rICAgIGJyZWFrOwotKyAgY2Fz ZSBCSU5OX1NUT1JBR0VfRFdPUkQ6Ci0rICAgIGlmIChwICsgMyA+IHBsaW1pdCkgcmV0dXJuIEZB TFNFOwotKyAgICBjb3B5X2JlMzIoKHUzMiopJnZhbHVlLT52aW50MzIsICh1MzIqKXApOwotKyAg ICB2YWx1ZS0+cHRyID0gJnZhbHVlLT52aW50MzI7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5O X1NUT1JBR0VfUVdPUkQ6Ci0rICAgIGlmIChwICsgNyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwot KyAgICBjb3B5X2JlNjQoKHU2NCopJnZhbHVlLT52aW50NjQsICh1NjQqKXApOwotKyAgICB2YWx1 ZS0+cHRyID0gJnZhbHVlLT52aW50NjQ7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JB R0VfQkxPQjoKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKLSsgICAgaWYgKHAgPiBwbGlt aXQpIHJldHVybiBGQUxTRTsKLSsgICAgRGF0YVNpemUgPSAqKCh1bnNpZ25lZCBjaGFyKilwKTsK LSsgICAgaWYgKERhdGFTaXplICYgMHg4MCkgewotKyAgICAgIGlmIChwICsgMyA+IHBsaW1pdCkg cmV0dXJuIEZBTFNFOwotKyAgICAgIGNvcHlfYmUzMigodTMyKikmRGF0YVNpemUsICh1MzIqKXAp OwotKyAgICAgIERhdGFTaXplICY9IDB4N0ZGRkZGRkY7Ci0rICAgICAgcCs9NDsKLSsgICAgfSBl bHNlIHsKLSsgICAgICBwKys7Ci0rICAgIH0KLSsgICAgaWYgKHAgKyBEYXRhU2l6ZSAtIDEgPiBw bGltaXQpIHJldHVybiBGQUxTRTsKLSsgICAgdmFsdWUtPnNpemUgPSBEYXRhU2l6ZTsKLSsgICAg dmFsdWUtPnB0ciA9IHA7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJ TkVSOgotKyAgICB2YWx1ZS0+cHRyID0gcDI7ICAvLyA8LS0gaXQgcmV0dXJucyB0aGUgcG9pbnRl ciB0byB0aGUgY29udGFpbmVyLCBub3QgdGhlIGRhdGEKLSsgICAgaWYgKElzVmFsaWRCaW5uSGVh ZGVyKHAyLCBOVUxMLCAmdmFsdWUtPmNvdW50LCAmdmFsdWUtPnNpemUsIE5VTEwpID09IEZBTFNF KSByZXR1cm4gRkFMU0U7Ci0rICAgIGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEZB TFNFOwotKyAgfQotKwotKyAgLy8gY29udmVydCB0aGUgcmV0dXJuZWQgdmFsdWUsIGlmIG5lZWRl ZAotKwotKyAgc3dpdGNoICh2YWx1ZS0+dHlwZSkgewotKyAgICBjYXNlIEJJTk5fVFJVRToKLSsg ICAgICB2YWx1ZS0+dHlwZSA9IEJJTk5fQk9PTDsKLSsgICAgICB2YWx1ZS0+dmJvb2wgPSBUUlVF OwotKyAgICAgIHZhbHVlLT5wdHIgPSAmdmFsdWUtPnZib29sOwotKyAgICAgIGJyZWFrOwotKyAg ICBjYXNlIEJJTk5fRkFMU0U6Ci0rICAgICAgdmFsdWUtPnR5cGUgPSBCSU5OX0JPT0w7Ci0rICAg ICAgdmFsdWUtPnZib29sID0gRkFMU0U7Ci0rICAgICAgdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dmJv b2w7Ci0rICAgICAgYnJlYWs7Ci0rI2lmZGVmIEJJTk5fRVhURU5ERUQKLSsgICAgY2FzZSBCSU5O X1NJTkdMRV9TVFI6Ci0rICAgICAgdmFsdWUtPnR5cGUgPSBCSU5OX1NJTkdMRTsKLSsgICAgICB2 YWx1ZS0+dmZsb2F0ID0gKGZsb2F0KSBhdG9mKChjb25zdCBjaGFyKil2YWx1ZS0+cHRyKTsgIC8v IGNvbnZlcnRzIGZyb20gc3RyaW5nIHRvIGRvdWJsZSwgYW5kIHRoZW4gdG8gZmxvYXQKLSsgICAg ICB2YWx1ZS0+cHRyID0gJnZhbHVlLT52ZmxvYXQ7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2Ug QklOTl9ET1VCTEVfU1RSOgotKyAgICAgIHZhbHVlLT50eXBlID0gQklOTl9ET1VCTEU7Ci0rICAg ICAgdmFsdWUtPnZkb3VibGUgPSBhdG9mKChjb25zdCBjaGFyKil2YWx1ZS0+cHRyKTsgIC8vIGNv bnZlcnRzIGZyb20gc3RyaW5nIHRvIGRvdWJsZQotKyAgICAgIHZhbHVlLT5wdHIgPSAmdmFsdWUt PnZkb3VibGU7Ci0rICAgICAgYnJlYWs7Ci0rI2VuZGlmCi0rICAgIC8qCi0rICAgIGNhc2UgQklO Tl9ERUNJTUFMOgotKyAgICBjYXNlIEJJTk5fQ1VSUkVOQ1lTVFI6Ci0rICAgIGNhc2UgQklOTl9E QVRFOgotKyAgICBjYXNlIEJJTk5fREFURVRJTUU6Ci0rICAgIGNhc2UgQklOTl9USU1FOgotKyAg ICAqLwotKyAgfQotKwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgotKwotKy8vIG9uIGxp dHRsZS1lbmRpYW4gZGV2aWNlcyB3ZSBzdG9yZSB0aGUgdmFsdWUgc28gd2UgY2FuIHJldHVybiBh IHBvaW50ZXIgdG8gaW50ZWdlcnMuCi0rLy8gaXQncyB2YWxpZCBvbmx5IGZvciBzaW5nbGUtdGhy ZWFkZWQgYXBwcy4gbXVsdGktdGhyZWFkZWQgYXBwcyBtdXN0IHVzZSB0aGUgX2dldF8gZnVuY3Rp b25zIGluc3RlYWQuCi0rCi0rYmlubiBsb2NhbF92YWx1ZTsKLSsKLStCSU5OX1BSSVZBVEUgdm9p ZCAqIHN0b3JlX3ZhbHVlKGJpbm4gKnZhbHVlKSB7Ci0rCi0rICBtZW1jcHkoJmxvY2FsX3ZhbHVl LCB2YWx1ZSwgc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIHN3aXRjaCAoYmlubl9nZXRfcmVhZF9zdG9y YWdlKHZhbHVlLT50eXBlKSkgewotKyAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKLSsgICAg Ly8gcmV0dXJuIGEgdmFsaWQgcG9pbnRlcgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfV09SRDoKLSsg IGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6Ci0r ICAgIHJldHVybiAmbG9jYWxfdmFsdWUudmludDMyOyAgLy8gcmV0dXJucyB0aGUgcG9pbnRlciB0 byB0aGUgY29udmVydGVkIHZhbHVlLCBmcm9tIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbgot KyAgfQotKwotKyAgcmV0dXJuIHZhbHVlLT5wdHI7ICAgLy8gcmV0dXJucyBmcm9tIHRoZSBvbiBz dGFjayB2YWx1ZSB0byBiZSB0aHJlYWQtc2FmZSAoZm9yIGxpc3QsIG1hcCwgb2JqZWN0LCBzdHJp bmcgYW5kIGJsb2IpCi0rCi0rfQotKwotKyNlbmRpZgotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rLyoqKiBSRUFEIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wg QVBJRU5UUlkgYmlubl9vYmplY3RfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQgKnB0ciwgY29uc3QgY2hh ciAqa2V5LCBiaW5uICp2YWx1ZSkgewotKyAgaW50IHR5cGUsIGNvdW50LCBzaXplPTAsIGhlYWRl cl9zaXplOwotKyAgdW5zaWduZWQgY2hhciAqcCwgKnBsaW1pdDsKLSsKLSsgIHB0ciA9IGJpbm5f cHRyKHB0cik7Ci0rICBpZiAocHRyID09IE5VTEwgfHwga2V5ID09IE5VTEwgfHwgdmFsdWUgPT0g TlVMTCkgcmV0dXJuIEZBTFNFOwotKwotKyAgLy8gY2hlY2sgdGhlIGhlYWRlcgotKyAgaWYgKElz VmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJfc2l6ZSkg PT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlICE9IEJJTk5fT0JKRUNUKSBy ZXR1cm4gRkFMU0U7Ci0rICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIEZBTFNFOwotKwotKyAgcCA9 ICh1bnNpZ25lZCBjaGFyICopIHB0cjsKLSsgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKLSsKLSsg IHAgPSBTZWFyY2hGb3JLZXkocCwgaGVhZGVyX3NpemUsIHNpemUsIGNvdW50LCBrZXkpOwotKyAg aWYgKHAgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHVybiBHZXRWYWx1ZShwLCBw bGltaXQsIHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09M IEFQSUVOVFJZIGJpbm5fbWFwX2dldF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGludCBpZCwgYmlu biAqdmFsdWUpIHsKLSsgIGludCB0eXBlLCBjb3VudCwgc2l6ZT0wLCBoZWFkZXJfc2l6ZTsKLSsg IHVuc2lnbmVkIGNoYXIgKnAsICpwbGltaXQ7Ci0rCi0rICBwdHIgPSBiaW5uX3B0cihwdHIpOwot KyAgaWYgKHB0ciA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsg IC8vIGNoZWNrIHRoZSBoZWFkZXIKLSsgIGlmIChJc1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBl LCAmY291bnQsICZzaXplLCAmaGVhZGVyX3NpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0r Ci0rICBpZiAodHlwZSAhPSBCSU5OX01BUCkgcmV0dXJuIEZBTFNFOwotKyAgaWYgKGNvdW50ID09 IDApIHJldHVybiBGQUxTRTsKLSsKLSsgIHAgPSAodW5zaWduZWQgY2hhciAqKSBwdHI7Ci0rICBw bGltaXQgPSBwICsgc2l6ZSAtIDE7Ci0rCi0rICBwID0gU2VhcmNoRm9ySUQocCwgaGVhZGVyX3Np emUsIHNpemUsIGNvdW50LCBpZCk7Ci0rICBpZiAocCA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwot KwotKyAgcmV0dXJuIEdldFZhbHVlKHAsIHBsaW1pdCwgdmFsdWUpOwotKwotK30KLSsKLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2dldF92YWx1ZShj b25zdCB2b2lkICpwdHIsIGludCBwb3MsIGJpbm4gKnZhbHVlKSB7Ci0rICBpbnQgIGksIHR5cGUs IGNvdW50LCBzaXplPTAsIGhlYWRlcl9zaXplOwotKyAgdW5zaWduZWQgY2hhciAqcCwgKnBsaW1p dCwgKmJhc2U7Ci0rCi0rICBwdHIgPSBiaW5uX3B0cihwdHIpOwotKyAgaWYgKHB0ciA9PSBOVUxM IHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIC8vIGNoZWNrIHRoZSBoZWFk ZXIKLSsgIGlmIChJc1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAm aGVhZGVyX3NpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpZiAodHlwZSAhPSBC SU5OX0xJU1QpIHJldHVybiBGQUxTRTsKLSsgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gRkFMU0U7 Ci0rICBpZiAocG9zIDw9IDAgfHwgcG9zID4gY291bnQpIHJldHVybiBGQUxTRTsKLSsgIHBvcy0t OyAgLy8gY29udmVydCBmcm9tIGJhc2UgMSB0byBiYXNlIDAKLSsKLSsgIHAgPSAodW5zaWduZWQg Y2hhciAqKSBwdHI7Ci0rICBiYXNlID0gcDsKLSsgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKLSsg IHAgKz0gaGVhZGVyX3NpemU7Ci0rCi0rICBmb3IgKGkgPSAwOyBpIDwgcG9zOyBpKyspIHsKLSsg ICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7Ci0rICAgIGlmIChwID09IDAgfHwgcCA8 IGJhc2UpIHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIHJldHVybiBHZXRWYWx1ZShwLCBwbGlt aXQsIHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqIFJFQUQg UEFJUiBCWSBQT1NJVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wg Ymlubl9yZWFkX3BhaXIoaW50IGV4cGVjdGVkX3R5cGUsIGNvbnN0IHZvaWQgKnB0ciwgaW50IHBv cywgaW50ICpwaWQsIGNoYXIgKnBrZXksIGJpbm4gKnZhbHVlKSB7Ci0rICBpbnQgIHR5cGUsIGNv dW50LCBzaXplPTAsIGhlYWRlcl9zaXplOwotKyAgaW50ICBpLCBpbnQzMiwgaWQgPSAwLCBjb3Vu dGVyPTA7Ci0rICB1bnNpZ25lZCBjaGFyICpwLCAqcGxpbWl0LCAqYmFzZSwgKmtleSA9IE5VTEws IGxlbiA9IDA7Ci0rCi0rICBwdHIgPSBiaW5uX3B0cihwdHIpOwotKwotKyAgLy8gY2hlY2sgdGhl IGhlYWRlcgotKyAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNp emUsICZoZWFkZXJfc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBl ICE9IGV4cGVjdGVkX3R5cGUgfHwgY291bnQgPT0gMCB8fCBwb3MgPCAxIHx8IHBvcyA+IGNvdW50 KSByZXR1cm4gRkFMU0U7Ci0rCi0rICBwID0gKHVuc2lnbmVkIGNoYXIgKikgcHRyOwotKyAgYmFz ZSA9IHA7Ci0rICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7Ci0rICBwICs9IGhlYWRlcl9zaXplOwot KwotKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSsgICAgc3dpdGNoICh0eXBlKSB7 Ci0rICAgICAgY2FzZSBCSU5OX01BUDoKLSsgICAgICAgIGludDMyID0gcmVhZF9tYXBfaWQoJnAs IHBsaW1pdCk7Ci0rICAgICAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgICAg ICAgaWQgPSBpbnQzMjsKLSsgICAgICAgIGJyZWFrOwotKyAgICAgIGNhc2UgQklOTl9PQkpFQ1Q6 Ci0rICAgICAgICBsZW4gPSAqKCh1bnNpZ25lZCBjaGFyICopcCk7IHArKzsKLSsgICAgICAgIGlm IChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0rICAgICAgICBrZXkgPSBwOwotKyAgICAgICAg cCArPSBsZW47Ci0rICAgICAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOwotKyAgICAg ICAgYnJlYWs7Ci0rICAgIH0KLSsgICAgY291bnRlcisrOwotKyAgICBpZiAoY291bnRlciA9PSBw b3MpIGdvdG8gZm91bmQ7Ci0rICAgIC8vCi0rICAgIHAgPSBBZHZhbmNlRGF0YVBvcyhwLCBwbGlt aXQpOwotKyAgICBpZiAocCA9PSAwIHx8IHAgPCBiYXNlKSByZXR1cm4gRkFMU0U7Ci0rICB9Ci0r Ci0rICByZXR1cm4gRkFMU0U7Ci0rCi0rZm91bmQ6Ci0rCi0rICBzd2l0Y2ggKHR5cGUpIHsKLSsg ICAgY2FzZSBCSU5OX01BUDoKLSsgICAgICBpZiAocGlkKSAqcGlkID0gaWQ7Ci0rICAgICAgYnJl YWs7Ci0rICAgIGNhc2UgQklOTl9PQkpFQ1Q6Ci0rICAgICAgaWYgKHBrZXkpIHsKLSsgICAgICAg IG1lbWNweShwa2V5LCBrZXksIGxlbik7Ci0rICAgICAgICBwa2V5W2xlbl0gPSAwOwotKyAgICAg IH0KLSsgICAgICBicmVhazsKLSsgIH0KLSsKLSsgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQs IHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVO VFJZIGJpbm5fbWFwX2dldF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQs IGJpbm4gKnZhbHVlKSB7Ci0rCi0rICByZXR1cm4gYmlubl9yZWFkX3BhaXIoQklOTl9NQVAsIHB0 ciwgcG9zLCBwaWQsIE5VTEwsIHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldF9wYWlyKGNvbnN0IHZvaWQgKnB0 ciwgaW50IHBvcywgY2hhciAqcGtleSwgYmlubiAqdmFsdWUpIHsKLSsKLSsgIHJldHVybiBiaW5u X3JlYWRfcGFpcihCSU5OX09CSkVDVCwgcHRyLCBwb3MsIE5VTEwsIHBrZXksIHZhbHVlKTsKLSsK LSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9t YXBfcGFpcihjb25zdCB2b2lkICptYXAsIGludCBwb3MsIGludCAqcGlkKSB7Ci0rICBiaW5uICp2 YWx1ZTsKLSsKLSsgIHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsK LSsKLSsgIGlmIChiaW5uX3JlYWRfcGFpcihCSU5OX01BUCwgbWFwLCBwb3MsIHBpZCwgTlVMTCwg dmFsdWUpID09IEZBTFNFKSB7Ci0rICAgIGZyZWVfZm4odmFsdWUpOwotKyAgICByZXR1cm4gTlVM TDsKLSsgIH0KLSsKLSsgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIHZhbHVl OwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBi aW5uX29iamVjdF9wYWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtleSkgewot KyAgYmlubiAqdmFsdWU7Ci0rCi0rICB2YWx1ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVv ZihiaW5uKSk7Ci0rCi0rICBpZiAoYmlubl9yZWFkX3BhaXIoQklOTl9PQkpFQ1QsIG9iaiwgcG9z LCBOVUxMLCBwa2V5LCB2YWx1ZSkgPT0gRkFMU0UpIHsKLSsgICAgZnJlZV9mbih2YWx1ZSk7Ci0r ICAgIHJldHVybiBOVUxMOwotKyAgfQotKwotKyAgdmFsdWUtPmFsbG9jYXRlZCA9IFRSVUU7Ci0r ICByZXR1cm4gdmFsdWU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfcmVhZF9wYWlyKGNv bnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUp IHsKLSsgIGJpbm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlubl9tYXBfZ2V0X3BhaXIocHRyLCBwb3Ms IHBpZCwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7Ci0rICBpZiAocHR5cGUpICpwdHlw ZSA9IHZhbHVlLnR5cGU7Ci0rICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7Ci0rI2lm IEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgotKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1 ZSk7Ci0rI2Vsc2UKLSsgIHJldHVybiB2YWx1ZS5wdHI7Ci0rI2VuZGlmCi0rCi0rfQotKwotKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3JlYWRf cGFpcihjb25zdCB2b2lkICpwdHIsIGludCBwb3MsIGNoYXIgKnBrZXksIGludCAqcHR5cGUsIGlu dCAqcHNpemUpIHsKLSsgIGJpbm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlubl9vYmplY3RfZ2V0X3Bh aXIocHRyLCBwb3MsIHBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOwotKyAgaWYg KHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOwotKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1 ZS5zaXplOwotKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KLSsgIHJldHVybiBzdG9y ZV92YWx1ZSgmdmFsdWUpOwotKyNlbHNlCi0rICByZXR1cm4gdmFsdWUucHRyOwotKyNlbmRpZgot KwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKiogU0VRVUVOVElBTCBSRUFEIEZV TkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5faXRlcl9pbml0KGJp bm5faXRlciAqaXRlciwgY29uc3Qgdm9pZCAqcHRyLCBpbnQgZXhwZWN0ZWRfdHlwZSkgewotKyAg aW50ICB0eXBlLCBjb3VudCwgc2l6ZT0wLCBoZWFkZXJfc2l6ZTsKLSsKLSsgIHB0ciA9IGJpbm5f cHRyKHB0cik7Ci0rICBpZiAocHRyID09IE5VTEwgfHwgaXRlciA9PSBOVUxMKSByZXR1cm4gRkFM U0U7Ci0rICBtZW1zZXQoaXRlciwgMCwgc2l6ZW9mKGJpbm5faXRlcikpOwotKwotKyAgLy8gY2hl Y2sgdGhlIGhlYWRlcgotKyAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3Vu dCwgJnNpemUsICZoZWFkZXJfc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlm ICh0eXBlICE9IGV4cGVjdGVkX3R5cGUpIHJldHVybiBGQUxTRTsKLSsgIC8vaWYgKGNvdW50ID09 IDApIHJldHVybiBGQUxTRTsgIC0tIHNob3VsZCBub3QgYmUgdXNlZAotKwotKyAgaXRlci0+cGxp bWl0ID0gKHVuc2lnbmVkIGNoYXIgKilwdHIgKyBzaXplIC0gMTsKLSsgIGl0ZXItPnBuZXh0ID0g KHVuc2lnbmVkIGNoYXIgKilwdHIgKyBoZWFkZXJfc2l6ZTsKLSsgIGl0ZXItPmNvdW50ID0gY291 bnQ7Ci0rICBpdGVyLT5jdXJyZW50ID0gMDsKLSsgIGl0ZXItPnR5cGUgPSB0eXBlOwotKwotKyAg cmV0dXJuIFRSVUU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElF TlRSWSBiaW5uX2xpc3RfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGJpbm4gKnZhbHVlKSB7Ci0rICB1 bnNpZ25lZCBjaGFyICpwbm93OwotKwotKyAgaWYgKGl0ZXIgPT0gTlVMTCB8fCBpdGVyLT5wbmV4 dCA9PSBOVUxMIHx8IGl0ZXItPnBuZXh0ID4gaXRlci0+cGxpbWl0IHx8IGl0ZXItPmN1cnJlbnQg PiBpdGVyLT5jb3VudCB8fCBpdGVyLT50eXBlICE9IEJJTk5fTElTVCkgcmV0dXJuIEZBTFNFOwot KwotKyAgaXRlci0+Y3VycmVudCsrOwotKyAgaWYgKGl0ZXItPmN1cnJlbnQgPiBpdGVyLT5jb3Vu dCkgcmV0dXJuIEZBTFNFOwotKwotKyAgcG5vdyA9IGl0ZXItPnBuZXh0OwotKyAgaXRlci0+cG5l eHQgPSBBZHZhbmNlRGF0YVBvcyhwbm93LCBpdGVyLT5wbGltaXQpOwotKyAgaWYgKGl0ZXItPnBu ZXh0ICE9IDAgJiYgaXRlci0+cG5leHQgPCBwbm93KSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR1 cm4gR2V0VmFsdWUocG5vdywgaXRlci0+cGxpbWl0LCB2YWx1ZSk7Ci0rCi0rfQotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgYmlubl9yZWFkX25leHRfcGFp cihpbnQgZXhwZWN0ZWRfdHlwZSwgYmlubl9pdGVyICppdGVyLCBpbnQgKnBpZCwgY2hhciAqcGtl eSwgYmlubiAqdmFsdWUpIHsKLSsgIGludCAgaW50MzIsIGlkOwotKyAgdW5zaWduZWQgY2hhciAq cCwgKmtleTsKLSsgIHVuc2lnbmVkIHNob3J0IGxlbjsKLSsKLSsgIGlmIChpdGVyID09IE5VTEwg fHwgaXRlci0+cG5leHQgPT0gTlVMTCB8fCBpdGVyLT5wbmV4dCA+IGl0ZXItPnBsaW1pdCB8fCBp dGVyLT5jdXJyZW50ID4gaXRlci0+Y291bnQgfHwgaXRlci0+dHlwZSAhPSBleHBlY3RlZF90eXBl KSByZXR1cm4gRkFMU0U7Ci0rCi0rICBpdGVyLT5jdXJyZW50Kys7Ci0rICBpZiAoaXRlci0+Y3Vy cmVudCA+IGl0ZXItPmNvdW50KSByZXR1cm4gRkFMU0U7Ci0rCi0rICBwID0gaXRlci0+cG5leHQ7 Ci0rCi0rICBzd2l0Y2ggKGV4cGVjdGVkX3R5cGUpIHsKLSsgICAgY2FzZSBCSU5OX01BUDoKLSsg ICAgICBpbnQzMiA9IHJlYWRfbWFwX2lkKCZwLCBpdGVyLT5wbGltaXQpOwotKyAgICAgIGlmIChw ID4gaXRlci0+cGxpbWl0KSByZXR1cm4gRkFMU0U7Ci0rICAgICAgaWQgPSBpbnQzMjsKLSsgICAg ICBpZiAocGlkKSAqcGlkID0gaWQ7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgQklOTl9PQkpF Q1Q6Ci0rICAgICAgbGVuID0gKigodW5zaWduZWQgY2hhciAqKXApOyBwKys7Ci0rICAgICAga2V5 ID0gcDsKLSsgICAgICBwICs9IGxlbjsKLSsgICAgICBpZiAocCA+IGl0ZXItPnBsaW1pdCkgcmV0 dXJuIEZBTFNFOwotKyAgICAgIGlmIChwa2V5KSB7Ci0rICAgICAgICBtZW1jcHkocGtleSwga2V5 LCBsZW4pOwotKyAgICAgICAgcGtleVtsZW5dID0gMDsKLSsgICAgICB9Ci0rICAgICAgYnJlYWs7 Ci0rICB9Ci0rCi0rICBpdGVyLT5wbmV4dCA9IEFkdmFuY2VEYXRhUG9zKHAsIGl0ZXItPnBsaW1p dCk7Ci0rICBpZiAoaXRlci0+cG5leHQgIT0gMCAmJiBpdGVyLT5wbmV4dCA8IHApIHJldHVybiBG QUxTRTsKLSsKLSsgIHJldHVybiBHZXRWYWx1ZShwLCBpdGVyLT5wbGltaXQsIHZhbHVlKTsKLSsK LSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFw X25leHQoYmlubl9pdGVyICppdGVyLCBpbnQgKnBpZCwgYmlubiAqdmFsdWUpIHsKLSsKLSsgIHJl dHVybiBiaW5uX3JlYWRfbmV4dF9wYWlyKEJJTk5fTUFQLCBpdGVyLCBwaWQsIE5VTEwsIHZhbHVl KTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCT09MIEFQSUVOVFJZIGJp bm5fb2JqZWN0X25leHQoYmlubl9pdGVyICppdGVyLCBjaGFyICpwa2V5LCBiaW5uICp2YWx1ZSkg ewotKwotKyAgcmV0dXJuIGJpbm5fcmVhZF9uZXh0X3BhaXIoQklOTl9PQkpFQ1QsIGl0ZXIsIE5V TEwsIHBrZXksIHZhbHVlKTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3RfbmV4dF92YWx1 ZShiaW5uX2l0ZXIgKml0ZXIpIHsKLSsgIGJpbm4gKnZhbHVlOwotKwotKyAgdmFsdWUgPSAoYmlu biAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOwotKwotKyAgaWYgKGJpbm5fbGlzdF9uZXh0 KGl0ZXIsIHZhbHVlKSA9PSBGQUxTRSkgewotKyAgICBmcmVlX2ZuKHZhbHVlKTsKLSsgICAgcmV0 dXJuIE5VTEw7Ci0rICB9Ci0rCi0rICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsKLSsgIHJldHVy biB2YWx1ZTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJ RU5UUlkgYmlubl9tYXBfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkKSB7Ci0r ICBiaW5uICp2YWx1ZTsKLSsKLSsgIHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9m KGJpbm4pKTsKLSsKLSsgIGlmIChiaW5uX21hcF9uZXh0KGl0ZXIsIHBpZCwgdmFsdWUpID09IEZB TFNFKSB7Ci0rICAgIGZyZWVfZm4odmFsdWUpOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsK LSsgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIHZhbHVlOwotKwotK30KLSsK LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF9u ZXh0X3ZhbHVlKGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSkgewotKyAgYmlubiAqdmFsdWU7 Ci0rCi0rICB2YWx1ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7Ci0rCi0r ICBpZiAoYmlubl9vYmplY3RfbmV4dChpdGVyLCBwa2V5LCB2YWx1ZSkgPT0gRkFMU0UpIHsKLSsg ICAgZnJlZV9mbih2YWx1ZSk7Ci0rICAgIHJldHVybiBOVUxMOwotKyAgfQotKwotKyAgdmFsdWUt PmFsbG9jYXRlZCA9IFRSVUU7Ci0rICByZXR1cm4gdmFsdWU7Ci0rCi0rfQotKwotKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLSt2b2lkICogQVBJRU5UUlkg Ymlubl9saXN0X3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGludCAqcHR5cGUsIGludCAqcHNp emUpIHsKLSsgIGJpbm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlubl9saXN0X25leHQoaXRlciwgJnZh bHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7Ci0rICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVl LnR5cGU7Ci0rICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7Ci0rI2lmIEJZVEVfT1JE RVIgPT0gTElUVExFX0VORElBTgotKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7Ci0rI2Vs c2UKLSsgIHJldHVybiB2YWx1ZS5wdHI7Ci0rI2VuZGlmCi0rCi0rfQotKwotKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWRfbmV4dChiaW5uX2l0 ZXIgKml0ZXIsIGludCAqcGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7Ci0rICBiaW5uIHZh bHVlOwotKwotKyAgaWYgKGJpbm5fbWFwX25leHQoaXRlciwgcGlkLCAmdmFsdWUpID09IEZBTFNF KSByZXR1cm4gTlVMTDsKLSsgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKLSsgIGlm IChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKLSsjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVf RU5ESUFOCi0rICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKLSsjZWxzZQotKyAgcmV0dXJu IHZhbHVlLnB0cjsKLSsjZW5kaWYKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LSt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwg Y2hhciAqcGtleSwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgewotKyAgYmlubiB2YWx1ZTsKLSsK LSsgIGlmIChiaW5uX29iamVjdF9uZXh0KGl0ZXIsIHBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJl dHVybiBOVUxMOwotKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOwotKyAgaWYgKHBz aXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwotKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJ QU4KLSsgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOwotKyNlbHNlCi0rICByZXR1cm4gdmFs dWUucHRyOwotKyNlbmRpZgotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLSsvKioqKioqIEVYVEVOREVEIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsvKioqKioqIG5vbmUgb2YgdGhl IGZ1bmN0aW9ucyBhYm92ZSBjYWxsIHRoZSBmdW5jdGlvbnMgYmVsb3cgKioqKioqKioqKioqKioq KioqKioqKioqKi8KLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStpbnQgQVBJ RU5UUlkgYmlubl9nZXRfd3JpdGVfc3RvcmFnZShpbnQgdHlwZSkgewotKyAgaW50IHN0b3JhZ2Vf dHlwZTsKLSsKLSsgIHN3aXRjaCAodHlwZSkgewotKyAgICBjYXNlIEJJTk5fU0lOR0xFX1NUUjoK LSsgICAgY2FzZSBCSU5OX0RPVUJMRV9TVFI6Ci0rICAgICAgcmV0dXJuIEJJTk5fU1RPUkFHRV9T VFJJTkc7Ci0rCi0rICAgIGNhc2UgQklOTl9CT09MOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JB R0VfTk9CWVRFUzsKLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBiaW5uX2dldF90eXBlX2luZm8o dHlwZSwgJnN0b3JhZ2VfdHlwZSwgTlVMTCk7Ci0rICAgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZTsK LSsgIH0KLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0raW50 IEFQSUVOVFJZIGJpbm5fZ2V0X3JlYWRfc3RvcmFnZShpbnQgdHlwZSkgewotKyAgaW50IHN0b3Jh Z2VfdHlwZTsKLSsKLSsgIHN3aXRjaCAodHlwZSkgewotKyNpZmRlZiBCSU5OX0VYVEVOREVECi0r ICAgIGNhc2UgQklOTl9TSU5HTEVfU1RSOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfRFdP UkQ7Ci0rICAgIGNhc2UgQklOTl9ET1VCTEVfU1RSOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JB R0VfUVdPUkQ7Ci0rI2VuZGlmCi0rICAgIGNhc2UgQklOTl9CT09MOgotKyAgICBjYXNlIEJJTk5f VFJVRToKLSsgICAgY2FzZSBCSU5OX0ZBTFNFOgotKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0Vf RFdPUkQ7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgYmlubl9nZXRfdHlwZV9pbmZvKHR5cGUsICZz dG9yYWdlX3R5cGUsIE5VTEwpOwotKyAgICAgIHJldHVybiBzdG9yYWdlX3R5cGU7Ci0rICB9Ci0r Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFU RSBCT09MIEdldFdyaXRlQ29udmVydGVkRGF0YShpbnQgKnB0eXBlLCB2b2lkICoqcHB2YWx1ZSwg aW50ICpwc2l6ZSkgewotKyAgaW50ICB0eXBlOwotKyAgZmxvYXQgIGYxOwotKyAgZG91YmxlIGQx OwotKyAgY2hhciBwc3RyWzEyOF07Ci0rCi0rICBVTlVTRUQocHN0cik7Ci0rICBVTlVTRUQoZDEp OwotKyAgVU5VU0VEKGYxKTsKLSsKLSsgIHR5cGUgPSAqcHR5cGU7Ci0rCi0rICBpZiAoKnBwdmFs dWUgPT0gTlVMTCkgewotKyAgICBzd2l0Y2ggKHR5cGUpIHsKLSsgICAgICBjYXNlIEJJTk5fTlVM TDoKLSsgICAgICBjYXNlIEJJTk5fVFJVRToKLSsgICAgICBjYXNlIEJJTk5fRkFMU0U6Ci0rICAg ICAgICBicmVhazsKLSsgICAgICBjYXNlIEJJTk5fU1RSSU5HOgotKyAgICAgIGNhc2UgQklOTl9C TE9COgotKyAgICAgICAgaWYgKCpwc2l6ZSA9PSAwKSBicmVhazsKLSsJLyogZmFsbCB0aHJvdWdo ICovCi0rICAgICAgZGVmYXVsdDoKLSsgICAgICAgIHJldHVybiBGQUxTRTsKLSsgICAgfQotKyAg fQotKwotKyAgc3dpdGNoICh0eXBlKSB7Ci0rI2lmZGVmIEJJTk5fRVhURU5ERUQKLSsgICAgY2Fz ZSBCSU5OX1NJTkdMRToKLSsgICAgICBmMSA9ICoqKGZsb2F0KiopcHB2YWx1ZTsKLSsgICAgICBk MSA9IGYxOyAgLy8gY29udmVydCBmcm9tIGZsb2F0ICgzMmJpdHMpIHRvIGRvdWJsZSAoNjRiaXRz KQotKyAgICAgIHR5cGUgPSBCSU5OX1NJTkdMRV9TVFI7Ci0rICAgICAgZ290byBjb252X2RvdWJs ZTsKLSsgICAgY2FzZSBCSU5OX0RPVUJMRToKLSsgICAgICBkMSA9ICoqKGRvdWJsZSoqKXBwdmFs dWU7Ci0rICAgICAgdHlwZSA9IEJJTk5fRE9VQkxFX1NUUjsKLStjb252X2RvdWJsZToKLSsgICAg ICAvLyB0aGUgJyUuMTdlJyBpcyBtb3JlIHByZWNpc2UgdGhhbiB0aGUgJyVnJwotKyAgICAgIHNu cHJpbnRmKHBzdHIsIDEyNywgIiUuMTdlIiwgZDEpOwotKyAgICAgICpwcHZhbHVlID0gcHN0cjsK LSsgICAgICAqcHR5cGUgPSB0eXBlOwotKyAgICAgIGJyZWFrOwotKyNlbmRpZgotKyAgICBjYXNl IEJJTk5fREVDSU1BTDoKLSsgICAgY2FzZSBCSU5OX0NVUlJFTkNZU1RSOgotKyAgICAgIC8qCi0r ICAgICAgaWYgKGJpbm5fbWFsbG9jX2V4dHB0cigxMjgpID09IE5VTEwpIHJldHVybiBGQUxTRTsK LSsgICAgICBzbnByaW50ZihzcHRyLCAxMjcsICIlRSIsICoqcHB2YWx1ZSk7Ci0rICAgICAgKnBw dmFsdWUgPSBzcHRyOwotKyAgICAgICovCi0rICAgICAgcmV0dXJuIFRSVUU7ICAvLyEgdGVtcG9y YXJ5Ci0rICAgICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgQklOTl9EQVRFOgotKyAgICBjYXNlIEJJ Tk5fREFURVRJTUU6Ci0rICAgIGNhc2UgQklOTl9USU1FOgotKyAgICAgIHJldHVybiBUUlVFOyAg Ly8hIHRlbXBvcmFyeQotKyAgICAgIGJyZWFrOwotKwotKyAgICBjYXNlIEJJTk5fQk9PTDoKLSsg ICAgICBpZiAoKiooKEJPT0wqKilwcHZhbHVlKSA9PSBGQUxTRSkgewotKyAgICAgICAgdHlwZSA9 IEJJTk5fRkFMU0U7Ci0rICAgICAgfSBlbHNlIHsKLSsgICAgICAgIHR5cGUgPSBCSU5OX1RSVUU7 Ci0rICAgICAgfQotKyAgICAgICpwdHlwZSA9IHR5cGU7Ci0rICAgICAgYnJlYWs7Ci0rCi0rICB9 Ci0rCi0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rQklOTl9QUklWQVRFIGludCB0eXBlX2ZhbWlseShpbnQgdHlwZSkgIHsKLSsK LSsgIHN3aXRjaCAodHlwZSkgewotKyAgICBjYXNlIEJJTk5fTElTVDoKLSsgICAgY2FzZSBCSU5O X01BUDoKLSsgICAgY2FzZSBCSU5OX09CSkVDVDoKLSsgICAgICByZXR1cm4gQklOTl9GQU1JTFlf QklOTjsKLSsKLSsgICAgY2FzZSBCSU5OX0lOVDg6Ci0rICAgIGNhc2UgQklOTl9JTlQxNjoKLSsg ICAgY2FzZSBCSU5OX0lOVDMyOgotKyAgICBjYXNlIEJJTk5fSU5UNjQ6Ci0rICAgIGNhc2UgQklO Tl9VSU5UODoKLSsgICAgY2FzZSBCSU5OX1VJTlQxNjoKLSsgICAgY2FzZSBCSU5OX1VJTlQzMjoK LSsgICAgY2FzZSBCSU5OX1VJTlQ2NDoKLSsgICAgICByZXR1cm4gQklOTl9GQU1JTFlfSU5UOwot KwotKyAgICBjYXNlIEJJTk5fRkxPQVQzMjoKLSsgICAgY2FzZSBCSU5OX0ZMT0FUNjQ6Ci0rICAg IC8vY2FzZSBCSU5OX1NJTkdMRToKLSsgICAgY2FzZSBCSU5OX1NJTkdMRV9TVFI6Ci0rICAgIC8v Y2FzZSBCSU5OX0RPVUJMRToKLSsgICAgY2FzZSBCSU5OX0RPVUJMRV9TVFI6Ci0rICAgICAgcmV0 dXJuIEJJTk5fRkFNSUxZX0ZMT0FUOwotKwotKyAgICBjYXNlIEJJTk5fU1RSSU5HOgotKyAgICBj YXNlIEJJTk5fSFRNTDoKLSsgICAgY2FzZSBCSU5OX0NTUzoKLSsgICAgY2FzZSBCSU5OX1hNTDoK LSsgICAgY2FzZSBCSU5OX0pTT046Ci0rICAgIGNhc2UgQklOTl9KQVZBU0NSSVBUOgotKyAgICAg IHJldHVybiBCSU5OX0ZBTUlMWV9TVFJJTkc7Ci0rCi0rICAgIGNhc2UgQklOTl9CTE9COgotKyAg ICBjYXNlIEJJTk5fSlBFRzoKLSsgICAgY2FzZSBCSU5OX0dJRjoKLSsgICAgY2FzZSBCSU5OX1BO RzoKLSsgICAgY2FzZSBCSU5OX0JNUDoKLSsgICAgICByZXR1cm4gQklOTl9GQU1JTFlfQkxPQjsK LSsKLSsgICAgY2FzZSBCSU5OX0RFQ0lNQUw6Ci0rICAgIGNhc2UgQklOTl9DVVJSRU5DWToKLSsg ICAgY2FzZSBCSU5OX0RBVEU6Ci0rICAgIGNhc2UgQklOTl9USU1FOgotKyAgICBjYXNlIEJJTk5f REFURVRJTUU6Ci0rICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX1NUUklORzsKLSsKLSsgICAgY2Fz ZSBCSU5OX0JPT0w6Ci0rICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX0JPT0w7Ci0rCi0rICAgIGNh c2UgQklOTl9OVUxMOgotKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9OVUxMOwotKwotKyAgICBk ZWZhdWx0OgotKyAgICAgIC8vIGlmIGl0IHdhc24ndCBmb3VuZAotKyAgICAgIHJldHVybiBCSU5O X0ZBTUlMWV9OT05FOwotKyAgfQotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLSsKLStCSU5OX1BSSVZBVEUgaW50IGludF90eXBlKGludCB0eXBlKSAgewotKwotKyAg c3dpdGNoICh0eXBlKSB7Ci0rICBjYXNlIEJJTk5fSU5UODoKLSsgIGNhc2UgQklOTl9JTlQxNjoK LSsgIGNhc2UgQklOTl9JTlQzMjoKLSsgIGNhc2UgQklOTl9JTlQ2NDoKLSsgICAgcmV0dXJuIEJJ Tk5fU0lHTkVEX0lOVDsKLSsKLSsgIGNhc2UgQklOTl9VSU5UODoKLSsgIGNhc2UgQklOTl9VSU5U MTY6Ci0rICBjYXNlIEJJTk5fVUlOVDMyOgotKyAgY2FzZSBCSU5OX1VJTlQ2NDoKLSsgICAgcmV0 dXJuIEJJTk5fVU5TSUdORURfSU5UOwotKwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIDA7Ci0r ICB9Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5f UFJJVkFURSBCT09MIGNvcHlfcmF3X3ZhbHVlKGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBk ZXN0LCBpbnQgZGF0YV9zdG9yZSkgewotKwotKyAgc3dpdGNoIChkYXRhX3N0b3JlKSB7Ci0rICBj YXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVTOgotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9S QUdFX0JZVEU6Ci0rICAgICooKGNoYXIgKikgcGRlc3QpID0gKihjaGFyICopcHNvdXJjZTsKLSsg ICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgotKyAgICAqKChzaG9ydCAqKSBw ZGVzdCkgPSAqKHNob3J0ICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RP UkFHRV9EV09SRDoKLSsgICAgKigoaW50ICopIHBkZXN0KSA9ICooaW50ICopcHNvdXJjZTsKLSsg ICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgKigodWludDY0ICop IHBkZXN0KSA9ICoodWludDY0ICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5f U1RPUkFHRV9CTE9COgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgotKyAgY2FzZSBCSU5O X1NUT1JBR0VfQ09OVEFJTkVSOgotKyAgICAqKChjaGFyICoqKSBwZGVzdCkgPSAoY2hhciAqKXBz b3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJuIEZBTFNFOwotKyAg fQotKwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotKwotK0JJTk5fUFJJVkFURSBCT09MIGNvcHlfaW50X3ZhbHVlKGNvbnN0IHZvaWQg KnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgc291cmNlX3R5cGUsIGludCBkZXN0X3R5cGUpIHsK LSsgIHVpbnQ2NCB2dWludDY0ID0gMDsgaW50NjQgdmludDY0ID0gMDsKLSsKLSsgIHN3aXRjaCAo c291cmNlX3R5cGUpIHsKLSsgIGNhc2UgQklOTl9JTlQ4OgotKyAgICB2aW50NjQgPSAqKHNpZ25l ZCBjaGFyICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fSU5UMTY6Ci0rICAg IHZpbnQ2NCA9ICooc2hvcnQgKilwc291cmNlOwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9J TlQzMjoKLSsgICAgdmludDY0ID0gKihpbnQgKilwc291cmNlOwotKyAgICBicmVhazsKLSsgIGNh c2UgQklOTl9JTlQ2NDoKLSsgICAgdmludDY0ID0gKihpbnQ2NCAqKXBzb3VyY2U7Ci0rICAgIGJy ZWFrOwotKwotKyAgY2FzZSBCSU5OX1VJTlQ4OgotKyAgICB2dWludDY0ID0gKih1bnNpZ25lZCBj aGFyICopcHNvdXJjZTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fVUlOVDE2OgotKyAgICB2 dWludDY0ID0gKih1bnNpZ25lZCBzaG9ydCAqKXBzb3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgY2Fz ZSBCSU5OX1VJTlQzMjoKLSsgICAgdnVpbnQ2NCA9ICoodW5zaWduZWQgaW50ICopcHNvdXJjZTsK LSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fVUlOVDY0OgotKyAgICB2dWludDY0ID0gKih1aW50 NjQgKilwc291cmNlOwotKyAgICBicmVhazsKLSsKLSsgIGRlZmF1bHQ6Ci0rICAgIHJldHVybiBG QUxTRTsKLSsgIH0KLSsKLSsKLSsgIC8vIGNvcHkgZnJvbSBpbnQ2NCB0byB1aW50NjQsIGlmIHBv c3NpYmxlCi0rCi0rICBpZiAoaW50X3R5cGUoc291cmNlX3R5cGUpID09IEJJTk5fVU5TSUdORURf SU5UICYmIGludF90eXBlKGRlc3RfdHlwZSkgPT0gQklOTl9TSUdORURfSU5UKSB7Ci0rICAgIGlm ICh2dWludDY0ID4gSU5UNjRfTUFYKSByZXR1cm4gRkFMU0U7Ci0rICAgIHZpbnQ2NCA9IHZ1aW50 NjQ7Ci0rICB9IGVsc2UgaWYgKGludF90eXBlKHNvdXJjZV90eXBlKSA9PSBCSU5OX1NJR05FRF9J TlQgJiYgaW50X3R5cGUoZGVzdF90eXBlKSA9PSBCSU5OX1VOU0lHTkVEX0lOVCkgewotKyAgICBp ZiAodmludDY0IDwgMCkgcmV0dXJuIEZBTFNFOwotKyAgICB2dWludDY0ID0gdmludDY0OwotKyAg fQotKwotKwotKyAgc3dpdGNoIChkZXN0X3R5cGUpIHsKLSsgIGNhc2UgQklOTl9JTlQ4OgotKyAg ICBpZiAodmludDY0IDwgSU5UOF9NSU4gfHwgdmludDY0ID4gSU5UOF9NQVgpIHJldHVybiBGQUxT RTsKLSsgICAgKihzaWduZWQgY2hhciAqKXBkZXN0ID0gKHNpZ25lZCBjaGFyKSB2aW50NjQ7Ci0r ICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX0lOVDE2OgotKyAgICBpZiAodmludDY0IDwgSU5UMTZf TUlOIHx8IHZpbnQ2NCA+IElOVDE2X01BWCkgcmV0dXJuIEZBTFNFOwotKyAgICAqKHNob3J0ICop cGRlc3QgPSAoc2hvcnQpIHZpbnQ2NDsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fSU5UMzI6 Ci0rICAgIGlmICh2aW50NjQgPCBJTlQzMl9NSU4gfHwgdmludDY0ID4gSU5UMzJfTUFYKSByZXR1 cm4gRkFMU0U7Ci0rICAgICooaW50ICopcGRlc3QgPSAoaW50KSB2aW50NjQ7Ci0rICAgIGJyZWFr OwotKyAgY2FzZSBCSU5OX0lOVDY0OgotKyAgICAqKGludDY0ICopcGRlc3QgPSB2aW50NjQ7Ci0r ICAgIGJyZWFrOwotKwotKyAgY2FzZSBCSU5OX1VJTlQ4OgotKyAgICBpZiAodnVpbnQ2NCA+IFVJ TlQ4X01BWCkgcmV0dXJuIEZBTFNFOwotKyAgICAqKHVuc2lnbmVkIGNoYXIgKilwZGVzdCA9ICh1 bnNpZ25lZCBjaGFyKSB2dWludDY0OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9VSU5UMTY6 Ci0rICAgIGlmICh2dWludDY0ID4gVUlOVDE2X01BWCkgcmV0dXJuIEZBTFNFOwotKyAgICAqKHVu c2lnbmVkIHNob3J0ICopcGRlc3QgPSAodW5zaWduZWQgc2hvcnQpIHZ1aW50NjQ7Ci0rICAgIGJy ZWFrOwotKyAgY2FzZSBCSU5OX1VJTlQzMjoKLSsgICAgaWYgKHZ1aW50NjQgPiBVSU5UMzJfTUFY KSByZXR1cm4gRkFMU0U7Ci0rICAgICoodW5zaWduZWQgaW50ICopcGRlc3QgPSAodW5zaWduZWQg aW50KSB2dWludDY0OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9VSU5UNjQ6Ci0rICAgICoo dWludDY0ICopcGRlc3QgPSB2dWludDY0OwotKyAgICBicmVhazsKLSsKLSsgIGRlZmF1bHQ6Ci0r ICAgIHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUgQk9PTCBjb3B5 X2Zsb2F0X3ZhbHVlKGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgc291cmNl X3R5cGUsIGludCBkZXN0X3R5cGUpIHsKLSsKLSsgIHN3aXRjaCAoc291cmNlX3R5cGUpIHsKLSsg IGNhc2UgQklOTl9GTE9BVDMyOgotKyAgICAqKGRvdWJsZSAqKXBkZXN0ID0gKihmbG9hdCAqKXBz b3VyY2U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX0ZMT0FUNjQ6Ci0rICAgICooZmxvYXQg KilwZGVzdCA9IChmbG9hdCkgKihkb3VibGUgKilwc291cmNlOwotKyAgICBicmVhazsKLSsgIGRl ZmF1bHQ6Ci0rICAgIHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSsgIHJldHVybiBUUlVFOwotKwot K30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZBVEUg dm9pZCB6ZXJvX3ZhbHVlKGNvbnN0IHZvaWQgKnB2YWx1ZSwgaW50IHR5cGUpIHsKLSsgIC8vaW50 IHNpemU9MDsKLSsKLSsgIHN3aXRjaCAoYmlubl9nZXRfcmVhZF9zdG9yYWdlKHR5cGUpKSB7Ci0r ICBjYXNlIEJJTk5fU1RPUkFHRV9OT0JZVEVTOgotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9T VE9SQUdFX0JZVEU6Ci0rICAgICooKGNoYXIgKikgcHZhbHVlKSA9IDA7Ci0rICAgIC8vc2l6ZT0x OwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6Ci0rICAgICooKHNob3J0 ICopIHB2YWx1ZSkgPSAwOwotKyAgICAvL3NpemU9MjsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJ Tk5fU1RPUkFHRV9EV09SRDoKLSsgICAgKigoaW50ICopIHB2YWx1ZSkgPSAwOwotKyAgICAvL3Np emU9NDsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKLSsgICAgKigo dWludDY0ICopIHB2YWx1ZSkgPSAwOwotKyAgICAvL3NpemU9ODsKLSsgICAgYnJlYWs7Ci0rICBj YXNlIEJJTk5fU1RPUkFHRV9CTE9COgotKyAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgotKyAg Y2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgotKyAgICAqKGNoYXIgKiopcHZhbHVlID0gTlVM TDsKLSsgICAgYnJlYWs7Ci0rICB9Ci0rCi0rICAvL2lmIChzaXplPjApIG1lbXNldChwdmFsdWUs IDAsIHNpemUpOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LStCSU5OX1BSSVZBVEUgQk9PTCBjb3B5X3ZhbHVlKHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0 LCBpbnQgc291cmNlX3R5cGUsIGludCBkZXN0X3R5cGUsIGludCBkYXRhX3N0b3JlKSB7Ci0rCi0r ICBpZiAodHlwZV9mYW1pbHkoc291cmNlX3R5cGUpICE9IHR5cGVfZmFtaWx5KGRlc3RfdHlwZSkp IHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlX2ZhbWlseShzb3VyY2VfdHlwZSkgPT0gQklO Tl9GQU1JTFlfSU5UICYmIHNvdXJjZV90eXBlICE9IGRlc3RfdHlwZSkgewotKyAgICByZXR1cm4g Y29weV9pbnRfdmFsdWUocHNvdXJjZSwgcGRlc3QsIHNvdXJjZV90eXBlLCBkZXN0X3R5cGUpOwot KyAgfSBlbHNlIGlmICh0eXBlX2ZhbWlseShzb3VyY2VfdHlwZSkgPT0gQklOTl9GQU1JTFlfRkxP QVQgJiYgc291cmNlX3R5cGUgIT0gZGVzdF90eXBlKSB7Ci0rICAgIHJldHVybiBjb3B5X2Zsb2F0 X3ZhbHVlKHBzb3VyY2UsIHBkZXN0LCBzb3VyY2VfdHlwZSwgZGVzdF90eXBlKTsKLSsgIH0gZWxz ZSB7Ci0rICAgIHJldHVybiBjb3B5X3Jhd192YWx1ZShwc291cmNlLCBwZGVzdCwgZGF0YV9zdG9y ZSk7Ci0rICB9Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8q KiogV1JJVEUgRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZChiaW5uICpsaXN0LCBpbnQgdHlw ZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkgewotKwotKyAgaWYgKEdldFdyaXRlQ29udmVydGVk RGF0YSgmdHlwZSwgJnB2YWx1ZSwgJnNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0r ICByZXR1cm4gYmlubl9saXN0X2FkZF9yYXcobGlzdCwgdHlwZSwgcHZhbHVlLCBzaXplKTsKLSsK LSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRS WSBiaW5uX21hcF9zZXQoYmlubiAqbWFwLCBpbnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUs IGludCBzaXplKSB7Ci0rCi0rICBpZiAoR2V0V3JpdGVDb252ZXJ0ZWREYXRhKCZ0eXBlLCAmcHZh bHVlLCAmc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHVybiBiaW5uX21h cF9zZXRfcmF3KG1hcCwgaWQsIHR5cGUsIHB2YWx1ZSwgc2l6ZSk7Ci0rCi0rfQotKwotKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rf c2V0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBp bnQgc2l6ZSkgewotKwotKyAgaWYgKEdldFdyaXRlQ29udmVydGVkRGF0YSgmdHlwZSwgJnB2YWx1 ZSwgJnNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rCi0rICByZXR1cm4gYmlubl9vYmpl Y3Rfc2V0X3JhdyhvYmosIGtleSwgdHlwZSwgcHZhbHVlLCBzaXplKTsKLSsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rLy8gdGhpcyBmdW5jdGlvbiBpcyB1c2Vk IGJ5IHRoZSB3cmFwcGVycwotK0JPT0wgQVBJRU5UUlkgYmlubl9hZGRfdmFsdWUoYmlubiAqaXRl bSwgaW50IGJpbm5fdHlwZSwgaW50IGlkLCBjaGFyICpuYW1lLCBpbnQgdHlwZSwgdm9pZCAqcHZh bHVlLCBpbnQgc2l6ZSkgewotKwotKyAgc3dpdGNoIChiaW5uX3R5cGUpIHsKLSsgICAgY2FzZSBC SU5OX0xJU1Q6Ci0rICAgICAgcmV0dXJuIGJpbm5fbGlzdF9hZGQoaXRlbSwgdHlwZSwgcHZhbHVl LCBzaXplKTsKLSsgICAgY2FzZSBCSU5OX01BUDoKLSsgICAgICByZXR1cm4gYmlubl9tYXBfc2V0 KGl0ZW0sIGlkLCB0eXBlLCBwdmFsdWUsIHNpemUpOwotKyAgICBjYXNlIEJJTk5fT0JKRUNUOgot KyAgICAgIHJldHVybiBiaW5uX29iamVjdF9zZXQoaXRlbSwgbmFtZSwgdHlwZSwgcHZhbHVlLCBz aXplKTsKLSsgICAgZGVmYXVsdDoKLSsgICAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rfQot KwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZF9uZXcoYmlubiAqbGlz dCwgYmlubiAqdmFsdWUpIHsKLSsgIEJPT0wgcmV0dmFsOwotKwotKyAgcmV0dmFsID0gYmlubl9s aXN0X2FkZF92YWx1ZShsaXN0LCB2YWx1ZSk7Ci0rICBpZiAodmFsdWUpIGZyZWVfZm4odmFsdWUp OwotKyAgcmV0dXJuIHJldHZhbDsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX21hcF9zZXRfbmV3KGJpbm4gKm1hcCwgaW50 IGlkLCBiaW5uICp2YWx1ZSkgewotKyAgQk9PTCByZXR2YWw7Ci0rCi0rICByZXR2YWwgPSBiaW5u X21hcF9zZXRfdmFsdWUobWFwLCBpZCwgdmFsdWUpOwotKyAgaWYgKHZhbHVlKSBmcmVlX2ZuKHZh bHVlKTsKLSsgIHJldHVybiByZXR2YWw7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0X25ldyhiaW5uICpv YmosIGNvbnN0IGNoYXIgKmtleSwgYmlubiAqdmFsdWUpIHsKLSsgIEJPT0wgcmV0dmFsOwotKwot KyAgcmV0dmFsID0gYmlubl9vYmplY3Rfc2V0X3ZhbHVlKG9iaiwga2V5LCB2YWx1ZSk7Ci0rICBp ZiAodmFsdWUpIGZyZWVfZm4odmFsdWUpOwotKyAgcmV0dXJuIHJldHZhbDsKLSsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKiBSRUFEIEZVTkNUSU9OUyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVO VFJZIGJpbm5fbGlzdF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGludCBwb3MpIHsKLSsgIGJpbm4g KnZhbHVlOwotKwotKyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikp OwotKwotKyAgaWYgKGJpbm5fbGlzdF9nZXRfdmFsdWUocHRyLCBwb3MsIHZhbHVlKSA9PSBGQUxT RSkgewotKyAgICBmcmVlX2ZuKHZhbHVlKTsKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICB9Ci0rCi0r ICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsKLSsgIHJldHVybiB2YWx1ZTsKLSsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5f bWFwX3ZhbHVlKGNvbnN0IHZvaWQgKnB0ciwgaW50IGlkKSB7Ci0rICBiaW5uICp2YWx1ZTsKLSsK LSsgIHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKLSsKLSsgIGlm IChiaW5uX21hcF9nZXRfdmFsdWUocHRyLCBpZCwgdmFsdWUpID09IEZBTFNFKSB7Ci0rICAgIGZy ZWVfZm4odmFsdWUpOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIHZhbHVlLT5hbGxv Y2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIHZhbHVlOwotKwotK30KLSsKLSsvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLSsKLStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfdmFsdWUo Y29uc3Qgdm9pZCAqcHRyLCBjb25zdCBjaGFyICprZXkpIHsKLSsgIGJpbm4gKnZhbHVlOwotKwot KyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOwotKwotKyAgaWYg KGJpbm5fb2JqZWN0X2dldF92YWx1ZShwdHIsIGtleSwgdmFsdWUpID09IEZBTFNFKSB7Ci0rICAg IGZyZWVfZm4odmFsdWUpOwotKyAgICByZXR1cm4gTlVMTDsKLSsgIH0KLSsKLSsgIHZhbHVlLT5h bGxvY2F0ZWQgPSBUUlVFOwotKyAgcmV0dXJuIHZhbHVlOwotKwotK30KLSsKLSsvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rdm9pZCAqIEFQSUVOVFJZIGJp bm5fbGlzdF9yZWFkKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCAqcHR5cGUsIGludCAq cHNpemUpIHsKLSsgIGJpbm4gdmFsdWU7Ci0rCi0rICBpZiAoYmlubl9saXN0X2dldF92YWx1ZShs aXN0LCBwb3MsICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOwotKyAgaWYgKHB0eXBlKSAq cHR5cGUgPSB2YWx1ZS50eXBlOwotKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwot KyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KLSsgIHJldHVybiBzdG9yZV92YWx1ZSgm dmFsdWUpOwotKyNlbHNlCi0rICByZXR1cm4gdmFsdWUucHRyOwotKyNlbmRpZgotKwotK30KLSsK LSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9yZWFk KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7Ci0rICBi aW5uIHZhbHVlOwotKwotKyAgaWYgKGJpbm5fbWFwX2dldF92YWx1ZShtYXAsIGlkLCAmdmFsdWUp ID09IEZBTFNFKSByZXR1cm4gTlVMTDsKLSsgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlw ZTsKLSsgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKLSsjaWYgQllURV9PUkRFUiA9 PSBMSVRUTEVfRU5ESUFOCi0rICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKLSsjZWxzZQot KyAgcmV0dXJuIHZhbHVlLnB0cjsKLSsjZW5kaWYKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfcmVhZChjb25zdCB2b2lkICpv YmosIGNvbnN0IGNoYXIgKmtleSwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgewotKyAgYmlubiB2 YWx1ZTsKLSsKLSsgIGlmIChiaW5uX29iamVjdF9nZXRfdmFsdWUob2JqLCBrZXksICZ2YWx1ZSkg PT0gRkFMU0UpIHJldHVybiBOVUxMOwotKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBl OwotKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwotKyNpZiBCWVRFX09SREVSID09 IExJVFRMRV9FTkRJQU4KLSsgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOwotKyNlbHNlCi0r ICByZXR1cm4gdmFsdWUucHRyOwotKyNlbmRpZgotKwotK30KLSsKLSsvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xpc3Rf Z2V0KGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50 ICpwc2l6ZSkgewotKyAgYmlubiB2YWx1ZTsKLSsgIGludCBzdG9yYWdlX3R5cGU7Ci0rCi0rICBz dG9yYWdlX3R5cGUgPSBiaW5uX2dldF9yZWFkX3N0b3JhZ2UodHlwZSk7Ci0rICBpZiAoc3RvcmFn ZV90eXBlICE9IEJJTk5fU1RPUkFHRV9OT0JZVEVTICYmIHB2YWx1ZSA9PSBOVUxMKSByZXR1cm4g RkFMU0U7Ci0rCi0rICB6ZXJvX3ZhbHVlKHB2YWx1ZSwgdHlwZSk7Ci0rCi0rICBpZiAoYmlubl9s aXN0X2dldF92YWx1ZShwdHIsIHBvcywgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwot KwotKyAgaWYgKGNvcHlfdmFsdWUodmFsdWUucHRyLCBwdmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUs IHN0b3JhZ2VfdHlwZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmIChwc2l6ZSkg KnBzaXplID0gdmFsdWUuc2l6ZTsKLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfZ2V0KGNvbnN0IHZv aWQgKnB0ciwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgKnBzaXplKSB7Ci0r ICBiaW5uIHZhbHVlOwotKyAgaW50IHN0b3JhZ2VfdHlwZTsKLSsKLSsgIHN0b3JhZ2VfdHlwZSA9 IGJpbm5fZ2V0X3JlYWRfc3RvcmFnZSh0eXBlKTsKLSsgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklO Tl9TVE9SQUdFX05PQllURVMgJiYgcHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsg IHplcm9fdmFsdWUocHZhbHVlLCB0eXBlKTsKLSsKLSsgIGlmIChiaW5uX21hcF9nZXRfdmFsdWUo cHRyLCBpZCwgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKGNvcHlf dmFsdWUodmFsdWUucHRyLCBwdmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlwZSkg PT0gRkFMU0UpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUu c2l6ZTsKLSsKLSsgIHJldHVybiBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotKwotKy8vICAgaWYgKGJpbm5fb2JqZWN0X2dldChvYmosICJtdWx0aXBsaWVyIiwgQklOTl9J TlQzMiwgJm11bHRpcGxpZXIsIE5VTEwpID09IEZBTFNFKSB4eHg7Ci0rCi0rQk9PTCBBUElFTlRS WSBiaW5uX29iamVjdF9nZXQoY29uc3Qgdm9pZCAqcHRyLCBjb25zdCBjaGFyICprZXksIGludCB0 eXBlLCB2b2lkICpwdmFsdWUsIGludCAqcHNpemUpIHsKLSsgIGJpbm4gdmFsdWU7Ci0rICBpbnQg c3RvcmFnZV90eXBlOwotKwotKyAgc3RvcmFnZV90eXBlID0gYmlubl9nZXRfcmVhZF9zdG9yYWdl KHR5cGUpOwotKyAgaWYgKHN0b3JhZ2VfdHlwZSAhPSBCSU5OX1NUT1JBR0VfTk9CWVRFUyAmJiBw dmFsdWUgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKwotKyAgemVyb192YWx1ZShwdmFsdWUsIHR5 cGUpOwotKwotKyAgaWYgKGJpbm5fb2JqZWN0X2dldF92YWx1ZShwdHIsIGtleSwgJnZhbHVlKSA9 PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwotKwotKyAgaWYgKGNvcHlfdmFsdWUodmFsdWUucHRyLCBw dmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlwZSkgPT0gRkFMU0UpIHJldHVybiBG QUxTRTsKLSsKLSsgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKLSsKLSsgIHJldHVy biBUUlVFOwotKwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0rCi0rLy8gdGhlc2UgZnVuY3Rpb25zIGJlbG93IG1heSBub3QgYmUgaW1wbGVtZW50 ZWQgYXMgaW5saW5lIGZ1bmN0aW9ucywgYmVjYXVzZQotKy8vIHRoZXkgdXNlIGEgbG90IG9mIHNw YWNlLCBldmVuIGZvciB0aGUgdmFyaWFibGUuIHNvIHRoZXkgd2lsbCBiZSBleHBvcnRlZC4KLSsK LSsvLyBidXQgd2hhdCBhYm91dCB1c2luZyBhcyBzdGF0aWM/Ci0rLy8gICAgaXMgdGhlcmUgYW55 IHByb2JsZW0gd2l0aCB3cmFwcGVycz8gY2FuIHRoZXNlIHdyYXBwZXJzIGltcGxlbWVudCB0aGVz ZSBmdW5jdGlvbnMgdXNpbmcgdGhlIGhlYWRlcj8KLSsvLyAgICBpZiBhcyBzdGF0aWMsIHdpbGwg dGhleSBiZSBwcmVzZW50IGV2ZW4gb24gbW9kdWxlcyB0aGF0IGRvbid0IHVzZSB0aGUgZnVuY3Rp b25zPwotKwotK3NpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQ4KGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MpIHsKLSsgIHNpZ25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9saXN0 X2dldChsaXN0LCBwb3MsIEJJTk5fSU5UOCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2 YWx1ZTsKLSt9Ci0rCi0rc2hvcnQgQVBJRU5UUlkgYmlubl9saXN0X2ludDE2KGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MpIHsKLSsgIHNob3J0IHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChs aXN0LCBwb3MsIEJJTk5fSU5UMTYsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7 Ci0rfQotKwotK2ludCBBUElFTlRSWSBiaW5uX2xpc3RfaW50MzIoY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcykgewotKyAgaW50IHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3Ms IEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwot K2ludDY0IEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQ2NChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9z KSB7Ci0rICBpbnQ2NCB2YWx1ZTsKLSsKLSsgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5O X0lOVDY0LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSt1bnNp Z25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbGlzdF91aW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQg cG9zKSB7Ci0rICB1bnNpZ25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0 LCBwb3MsIEJJTk5fVUlOVDgsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0r fQotKwotK3Vuc2lnbmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50MTYoY29uc3Qgdm9p ZCAqbGlzdCwgaW50IHBvcykgewotKyAgdW5zaWduZWQgc2hvcnQgdmFsdWU7Ci0rCi0rICBiaW5u X2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICBy ZXR1cm4gdmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX2xpc3RfdWlu dDMyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIHVuc2lnbmVkIGludCB2YWx1ZTsK LSsKLSsgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQzMiwgJnZhbHVlLCBOVUxM KTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdWludDY0IEFQSUVOVFJZIGJpbm5fbGlz dF91aW50NjQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewotKyAgdWludDY0IHZhbHVlOwot KwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwp OwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStmbG9hdCBBUElFTlRSWSBiaW5uX2xpc3Rf ZmxvYXQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewotKyAgZmxvYXQgdmFsdWU7Ci0rCi0r ICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOwot KwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStkb3VibGUgQVBJRU5UUlkgYmlubl9saXN0X2Rv dWJsZShjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0rICBkb3VibGUgdmFsdWU7Ci0rCi0r ICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDY0LCAmdmFsdWUsIE5VTEwpOwot KwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9ib29s KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIEJPT0wgdmFsdWUgPSBUUlVFOwotKwot KyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fQk9PTCwgJnZhbHVlLCBOVUxMKTsKLSsK LSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfbnVsbChj b25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Ci0rCi0rICByZXR1cm4gYmlubl9saXN0X2dldChs aXN0LCBwb3MsIEJJTk5fTlVMTCwgTlVMTCwgTlVMTCk7Ci0rCi0rfQotKwotK2NoYXIgKiBBUElF TlRSWSBiaW5uX2xpc3Rfc3RyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIGNoYXIg KnZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fU1RSSU5HLCAmdmFs dWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSt2b2lkICogQVBJRU5UUlkg Ymlubl9saXN0X2Jsb2IoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwc2l6ZSkgewot KyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9CTE9C LCAmdmFsdWUsIHBzaXplKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQ SUVOVFJZIGJpbm5fbGlzdF9saXN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIHZv aWQgKnZhbHVlOwotKwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fTElTVCwgJnZh bHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQSUVOVFJZ IGJpbm5fbGlzdF9tYXAoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgewotKyAgdm9pZCAqdmFs dWU7Ci0rCi0rICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9NQVAsICZ2YWx1ZSwgTlVM TCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xp c3Rfb2JqZWN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKLSsgIHZvaWQgKnZhbHVlOwot KwotKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5VTEwp OwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwot K3NpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbWFwX2ludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQg aWQpIHsKLSsgIHNpZ25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQs IEJJTk5fSU5UOCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0r c2hvcnQgQVBJRU5UUlkgYmlubl9tYXBfaW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsK LSsgIHNob3J0IHZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UMTYs ICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2ludCBBUElFTlRS WSBiaW5uX21hcF9pbnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCkgewotKyAgaW50IHZhbHVl OwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7 Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2ludDY0IEFQSUVOVFJZIGJpbm5fbWFwX2lu dDY0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICBpbnQ2NCB2YWx1ZTsKLSsKLSsgIGJp bm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDY0LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0 dXJuIHZhbHVlOwotK30KLSsKLSt1bnNpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ4 KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICB1bnNpZ25lZCBjaGFyIHZhbHVlOwotKwot KyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDgsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0r ICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbWFw X3VpbnQxNihjb25zdCB2b2lkICptYXAsIGludCBpZCkgewotKyAgdW5zaWduZWQgc2hvcnQgdmFs dWU7Ci0rCi0rICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVM TCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIGludCBBUElFTlRSWSBi aW5uX21hcF91aW50MzIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIHVuc2lnbmVkIGlu dCB2YWx1ZTsKLSsKLSsgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1VJTlQzMiwgJnZhbHVl LCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdWludDY0IEFQSUVOVFJZIGJp bm5fbWFwX3VpbnQ2NChjb25zdCB2b2lkICptYXAsIGludCBpZCkgewotKyAgdWludDY0IHZhbHVl OwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwp OwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStmbG9hdCBBUElFTlRSWSBiaW5uX21hcF9m bG9hdChjb25zdCB2b2lkICptYXAsIGludCBpZCkgewotKyAgZmxvYXQgdmFsdWU7Ci0rCi0rICBi aW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOwotKwotKyAg cmV0dXJuIHZhbHVlOwotK30KLSsKLStkb3VibGUgQVBJRU5UUlkgYmlubl9tYXBfZG91YmxlKGNv bnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Ci0rICBkb3VibGUgdmFsdWU7Ci0rCi0rICBiaW5uX21h cF9nZXQobWFwLCBpZCwgQklOTl9GTE9BVDY0LCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJu IHZhbHVlOwotK30KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2Jvb2woY29uc3Qgdm9pZCAq bWFwLCBpbnQgaWQpIHsKLSsgIEJPT0wgdmFsdWUgPSBUUlVFOwotKwotKyAgYmlubl9tYXBfZ2V0 KG1hcCwgaWQsIEJJTk5fQk9PTCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsK LSt9Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX21hcF9udWxsKGNvbnN0IHZvaWQgKm1hcCwgaW50 IGlkKSB7Ci0rCi0rICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTlVMTCwgTlVM TCwgTlVMTCk7Ci0rCi0rfQotKwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX21hcF9zdHIoY29uc3Qg dm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIGNoYXIgKnZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0 KG1hcCwgaWQsIEJJTk5fU1RSSU5HLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVl OwotK30KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfYmxvYihjb25zdCB2b2lkICptYXAs IGludCBpZCwgaW50ICpwc2l6ZSkgewotKyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX21hcF9n ZXQobWFwLCBpZCwgQklOTl9CTE9CLCAmdmFsdWUsIHBzaXplKTsKLSsKLSsgIHJldHVybiB2YWx1 ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX2xpc3QoY29uc3Qgdm9pZCAqbWFw LCBpbnQgaWQpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQs IEJJTk5fTElTVCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0r dm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX21hcChjb25zdCB2b2lkICptYXAsIGludCBpZCkgewot KyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9NQVAsICZ2 YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3ZvaWQgKiBBUElFTlRS WSBiaW5uX21hcF9vYmplY3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKLSsgIHZvaWQgKnZh bHVlOwotKwotKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5V TEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot KwotK3NpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDgoY29uc3Qgdm9pZCAqb2Jq LCBjb25zdCBjaGFyICprZXkpIHsKLSsgIHNpZ25lZCBjaGFyIHZhbHVlOwotKwotKyAgYmlubl9v YmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0lOVDgsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1 cm4gdmFsdWU7Ci0rfQotKwotK3Nob3J0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDE2KGNvbnN0 IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICBzaG9ydCB2YWx1ZTsKLSsKLSsgIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQxNiwgJnZhbHVlLCBOVUxMKTsKLSsKLSsg IHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0raW50IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDMyKGNv bnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICBpbnQgdmFsdWU7Ci0rCi0rICBi aW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0r ICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2ludDY0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDY0 KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICBpbnQ2NCB2YWx1ZTsKLSsK LSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQ2NCwgJnZhbHVlLCBOVUxMKTsK LSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdW5zaWduZWQgY2hhciBBUElFTlRSWSBiaW5u X29iamVjdF91aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAgdW5z aWduZWQgY2hhciB2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9V SU5UOCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdW5zaWdu ZWQgc2hvcnQgQVBJRU5UUlkgYmlubl9vYmplY3RfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29u c3QgY2hhciAqa2V5KSB7Ci0rICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKLSsKLSsgIGJpbm5fb2Jq ZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1 cm4gdmFsdWU7Ci0rfQotKwotK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX29iamVjdF91aW50 MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKLSsgIHVuc2lnbmVkIGludCB2 YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UMzIsICZ2YWx1 ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK3VpbnQ2NCBBUElFTlRSWSBi aW5uX29iamVjdF91aW50NjQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKLSsg IHVpbnQ2NCB2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5U NjQsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0rICByZXR1cm4gdmFsdWU7Ci0rfQotKwotK2Zsb2F0IEFQ SUVOVFJZIGJpbm5fb2JqZWN0X2Zsb2F0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 KSB7Ci0rICBmbG9hdCB2YWx1ZTsKLSsKLSsgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklO Tl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJuIHZhbHVlOwotK30KLSsKLStk b3VibGUgQVBJRU5UUlkgYmlubl9vYmplY3RfZG91YmxlKGNvbnN0IHZvaWQgKm9iaiwgY29uc3Qg Y2hhciAqa2V5KSB7Ci0rICBkb3VibGUgdmFsdWU7Ci0rCi0rICBiaW5uX29iamVjdF9nZXQob2Jq LCBrZXksIEJJTk5fRkxPQVQ2NCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsK LSt9Ci0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX29iamVjdF9ib29sKGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5KSB7Ci0rICBCT09MIHZhbHVlID0gVFJVRTsKLSsKLSsgIGJpbm5fb2Jq ZWN0X2dldChvYmosIGtleSwgQklOTl9CT09MLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJu IHZhbHVlOwotK30KLSsKLStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X251bGwoY29uc3Qgdm9p ZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKLSsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQo b2JqLCBrZXksIEJJTk5fTlVMTCwgTlVMTCwgTlVMTCk7Ci0rCi0rfQotKwotK2NoYXIgKiBBUElF TlRSWSBiaW5uX29iamVjdF9zdHIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsK LSsgIGNoYXIgKnZhbHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1NU UklORywgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2YWx1ZTsKLSt9Ci0rCi0rdm9pZCAq IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2Jsb2IoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICpr ZXksIGludCAqcHNpemUpIHsKLSsgIHZvaWQgKnZhbHVlOwotKwotKyAgYmlubl9vYmplY3RfZ2V0 KG9iaiwga2V5LCBCSU5OX0JMT0IsICZ2YWx1ZSwgcHNpemUpOwotKwotKyAgcmV0dXJuIHZhbHVl OwotK30KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfbGlzdChjb25zdCB2b2lkICpv YmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX29iamVj dF9nZXQob2JqLCBrZXksIEJJTk5fTElTVCwgJnZhbHVlLCBOVUxMKTsKLSsKLSsgIHJldHVybiB2 YWx1ZTsKLSt9Ci0rCi0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X21hcChjb25zdCB2b2lk ICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAgdm9pZCAqdmFsdWU7Ci0rCi0rICBiaW5uX29i amVjdF9nZXQob2JqLCBrZXksIEJJTk5fTUFQLCAmdmFsdWUsIE5VTEwpOwotKwotKyAgcmV0dXJu IHZhbHVlOwotK30KLSsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3Rfb2JqZWN0KGNvbnN0 IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7Ci0rICB2b2lkICp2YWx1ZTsKLSsKLSsgIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9PQkpFQ1QsICZ2YWx1ZSwgTlVMTCk7Ci0rCi0r ICByZXR1cm4gdmFsdWU7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0JJTk5fUFJJVkFURSBiaW5uICog Ymlubl9hbGxvY19pdGVtKCkgewotKyAgYmlubiAqaXRlbTsKLSsgIGl0ZW0gPSAoYmlubiAqKSBi aW5uX21hbGxvYyhzaXplb2YoYmlubikpOwotKyAgaWYgKGl0ZW0pIHsKLSsgICAgbWVtc2V0KGl0 ZW0sIDAsIHNpemVvZihiaW5uKSk7Ci0rICAgIGl0ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7Ci0r ICAgIGl0ZW0tPmFsbG9jYXRlZCA9IFRSVUU7Ci0rICAgIC8vaXRlbS0+d3JpdGFibGUgPSBGQUxT RTsgIC0tIGFscmVhZHkgemVyb2VkCi0rICB9Ci0rICByZXR1cm4gaXRlbTsKLSt9Ci0rCi0rLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fdmFs dWUoaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUsIGJpbm5fbWVtX2ZyZWUgZnJlZWZu KSB7Ci0rICBpbnQgc3RvcmFnZV90eXBlOwotKyAgYmlubiAqaXRlbSA9IGJpbm5fYWxsb2NfaXRl bSgpOwotKyAgaWYgKGl0ZW0pIHsKLSsgICAgaXRlbS0+dHlwZSA9IHR5cGU7Ci0rICAgIGJpbm5f Z2V0X3R5cGVfaW5mbyh0eXBlLCAmc3RvcmFnZV90eXBlLCBOVUxMKTsKLSsgICAgc3dpdGNoIChz dG9yYWdlX3R5cGUpIHsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKLSsgICAgICBi cmVhazsKLSsgICAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgotKyAgICAgIGlmIChzaXplID09 IDApIHNpemUgPSBzdHJsZW4oKGNoYXIqKXB2YWx1ZSkgKyAxOwotKyAgICAgIC8qIGZhbGwgdGhy b3VnaCAqLwotKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgotKyAgICBjYXNlIEJJTk5fU1RP UkFHRV9DT05UQUlORVI6Ci0rICAgICAgaWYgKGZyZWVmbiA9PSBCSU5OX1RSQU5TSUVOVCkgewot KyAgICAgICAgaXRlbS0+cHRyID0gYmlubl9tZW1kdXAocHZhbHVlLCBzaXplKTsKLSsgICAgICAg IGlmIChpdGVtLT5wdHIgPT0gTlVMTCkgewotKyAgICAgICAgICBmcmVlX2ZuKGl0ZW0pOwotKyAg ICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAgIH0KLSsgICAgICAgIGl0ZW0tPmZyZWVmbiA9 IGZyZWVfZm47Ci0rICAgICAgICBpZiAoc3RvcmFnZV90eXBlID09IEJJTk5fU1RPUkFHRV9TVFJJ TkcpIHNpemUtLTsKLSsgICAgICB9IGVsc2UgewotKyAgICAgICAgaXRlbS0+cHRyID0gcHZhbHVl OwotKyAgICAgICAgaXRlbS0+ZnJlZWZuID0gZnJlZWZuOwotKyAgICAgIH0KLSsgICAgICBpdGVt LT5zaXplID0gc2l6ZTsKLSsgICAgICBicmVhazsKLSsgICAgZGVmYXVsdDoKLSsgICAgICBpdGVt LT5wdHIgPSAmaXRlbS0+dmludDMyOwotKyAgICAgIGNvcHlfcmF3X3ZhbHVlKHB2YWx1ZSwgaXRl bS0+cHRyLCBzdG9yYWdlX3R5cGUpOwotKyAgICB9Ci0rICB9Ci0rICByZXR1cm4gaXRlbTsKLSt9 Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBi aW5uX3NldF9zdHJpbmcoYmlubiAqaXRlbSwgY2hhciAqc3RyLCBiaW5uX21lbV9mcmVlIHBmcmVl KSB7Ci0rCi0rICBpZiAoaXRlbSA9PSBOVUxMIHx8IHN0ciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7 Ci0rCi0rICBpZiAocGZyZWUgPT0gQklOTl9UUkFOU0lFTlQpIHsKLSsgICAgaXRlbS0+cHRyID0g Ymlubl9tZW1kdXAoc3RyLCBzdHJsZW4oc3RyKSArIDEpOwotKyAgICBpZiAoaXRlbS0+cHRyID09 IE5VTEwpIHJldHVybiBGQUxTRTsKLSsgICAgaXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKLSsgIH0g ZWxzZSB7Ci0rICAgIGl0ZW0tPnB0ciA9IHN0cjsKLSsgICAgaXRlbS0+ZnJlZWZuID0gcGZyZWU7 Ci0rICB9Ci0rCi0rICBpdGVtLT50eXBlID0gQklOTl9TVFJJTkc7Ci0rICByZXR1cm4gVFJVRTsK LSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElF TlRSWSBiaW5uX3NldF9ibG9iKGJpbm4gKml0ZW0sIHZvaWQgKnB0ciwgaW50IHNpemUsIGJpbm5f bWVtX2ZyZWUgcGZyZWUpIHsKLSsKLSsgIGlmIChpdGVtID09IE5VTEwgfHwgcHRyID09IE5VTEwp IHJldHVybiBGQUxTRTsKLSsKLSsgIGlmIChwZnJlZSA9PSBCSU5OX1RSQU5TSUVOVCkgewotKyAg ICBpdGVtLT5wdHIgPSBiaW5uX21lbWR1cChwdHIsIHNpemUpOwotKyAgICBpZiAoaXRlbS0+cHRy ID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsgICAgaXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKLSsg IH0gZWxzZSB7Ci0rICAgIGl0ZW0tPnB0ciA9IHB0cjsKLSsgICAgaXRlbS0+ZnJlZWZuID0gcGZy ZWU7Ci0rICB9Ci0rCi0rICBpdGVtLT50eXBlID0gQklOTl9CTE9COwotKyAgaXRlbS0+c2l6ZSA9 IHNpemU7Ci0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0rLyoqKiBSRUFEIENPTlZFUlRFRCBWQUxVRSAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rCi0rI2lmZGVmIF9NU0NfVkVSCi0rI2RlZmluZSBhdG9pNjQg X2F0b2k2NAotKyNlbHNlCi0raW50NjQgYXRvaTY0KGNoYXIgKnN0cikgewotKyAgaW50NjQgcmV0 dmFsOwotKyAgaW50IGlzX25lZ2F0aXZlPTA7Ci0rCi0rICBpZiAoKnN0ciA9PSAnLScpIHsKLSsg ICAgaXNfbmVnYXRpdmUgPSAxOwotKyAgICBzdHIrKzsKLSsgIH0KLSsgIHJldHZhbCA9IDA7Ci0r ICBmb3IgKDsgKnN0cjsgc3RyKyspIHsKLSsgICAgcmV0dmFsID0gMTAgKiByZXR2YWwgKyAoKnN0 ciAtICcwJyk7Ci0rICB9Ci0rICBpZiAoaXNfbmVnYXRpdmUpIHJldHZhbCAqPSAtMTsKLSsgIHJl dHVybiByZXR2YWw7Ci0rfQotKyNlbmRpZgotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsK LStCSU5OX1BSSVZBVEUgQk9PTCBpc19pbnRlZ2VyKGNoYXIgKnApIHsKLSsgIEJPT0wgcmV0dmFs OwotKwotKyAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKyAgaWYgKCpwID09ICctJykg cCsrOwotKyAgaWYgKCpwID09IDApIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHZhbCA9IFRSVUU7 Ci0rCi0rICBmb3IgKDsgKnA7IHArKykgewotKyAgICBpZiAoICgqcCA8ICcwJyB8fCAqcCA+ICc5 JykgKSB7Ci0rICAgICAgcmV0dmFsID0gRkFMU0U7Ci0rICAgIH0KLSsgIH0KLSsKLSsgIHJldHVy biByZXR2YWw7Ci0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStCSU5OX1BSSVZB VEUgQk9PTCBpc19mbG9hdChjaGFyICpwKSB7Ci0rICBCT09MIHJldHZhbCwgbnVtYmVyX2ZvdW5k PUZBTFNFOwotKwotKyAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKyAgaWYgKCpwID09 ICctJykgcCsrOwotKyAgaWYgKCpwID09IDApIHJldHVybiBGQUxTRTsKLSsKLSsgIHJldHZhbCA9 IFRSVUU7Ci0rCi0rICBmb3IgKDsgKnA7IHArKykgewotKyAgICBpZiAoKnAgPT0gJy4nIHx8ICpw ID09ICcsJykgewotKyAgICAgIGlmICghbnVtYmVyX2ZvdW5kKSByZXR2YWwgPSBGQUxTRTsKLSsg ICAgfSBlbHNlIGlmICggKnAgPj0gJzAnICYmICpwIDw9ICc5JyApIHsKLSsgICAgICBudW1iZXJf Zm91bmQgPSBUUlVFOwotKyAgICB9IGVsc2UgewotKyAgICAgIHJldHVybiBGQUxTRTsKLSsgICAg fQotKyAgfQotKwotKyAgcmV0dXJuIHJldHZhbDsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rCi0rQklOTl9QUklWQVRFIEJPT0wgaXNfYm9vbF9zdHIoY2hhciAqc3Ry LCBCT09MICpwYm9vbCkgewotKyAgaW50NjQgIHZpbnQ7Ci0rICBkb3VibGUgdmRvdWJsZTsKLSsK LSsgIGlmIChzdHIgPT0gTlVMTCB8fCBwYm9vbCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Ci0rCi0r ICBpZiAoc3RyaWNtcChzdHIsICJ0cnVlIikgPT0gMCkgZ290byBsb2NfdHJ1ZTsKLSsgIGlmIChz dHJpY21wKHN0ciwgInllcyIpID09IDApIGdvdG8gbG9jX3RydWU7Ci0rICBpZiAoc3RyaWNtcChz dHIsICJvbiIpID09IDApIGdvdG8gbG9jX3RydWU7Ci0rICAvL2lmIChzdHJpY21wKHN0ciwgIjEi KSA9PSAwKSBnb3RvIGxvY190cnVlOwotKwotKyAgaWYgKHN0cmljbXAoc3RyLCAiZmFsc2UiKSA9 PSAwKSBnb3RvIGxvY19mYWxzZTsKLSsgIGlmIChzdHJpY21wKHN0ciwgIm5vIikgPT0gMCkgZ290 byBsb2NfZmFsc2U7Ci0rICBpZiAoc3RyaWNtcChzdHIsICJvZmYiKSA9PSAwKSBnb3RvIGxvY19m YWxzZTsKLSsgIC8vaWYgKHN0cmljbXAoc3RyLCAiMCIpID09IDApIGdvdG8gbG9jX2ZhbHNlOwot KwotKyAgaWYgKGlzX2ludGVnZXIoc3RyKSkgewotKyAgICB2aW50ID0gYXRvaTY0KHN0cik7Ci0r ICAgICpwYm9vbCA9ICh2aW50ICE9IDApID8gVFJVRSA6IEZBTFNFOwotKyAgICByZXR1cm4gVFJV RTsKLSsgIH0gZWxzZSBpZiAoaXNfZmxvYXQoc3RyKSkgewotKyAgICB2ZG91YmxlID0gYXRvZihz dHIpOwotKyAgICAqcGJvb2wgPSAodmRvdWJsZSAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKLSsgICAg cmV0dXJuIFRSVUU7Ci0rICB9Ci0rCi0rICByZXR1cm4gRkFMU0U7Ci0rCi0rbG9jX3RydWU6Ci0r ICAqcGJvb2wgPSBUUlVFOwotKyAgcmV0dXJuIFRSVUU7Ci0rCi0rbG9jX2ZhbHNlOgotKyAgKnBi b29sID0gRkFMU0U7Ci0rICByZXR1cm4gVFJVRTsKLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2dldF9pbnQzMihiaW5uICp2 YWx1ZSwgaW50ICpwaW50KSB7Ci0rCi0rICBpZiAodmFsdWUgPT0gTlVMTCB8fCBwaW50ID09IE5V TEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0g QklOTl9GQU1JTFlfSU5UKSB7Ci0rICAgIHJldHVybiBjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRy LCBwaW50LCB2YWx1ZS0+dHlwZSwgQklOTl9JTlQzMik7Ci0rICB9Ci0rCi0rICBzd2l0Y2ggKHZh bHVlLT50eXBlKSB7Ci0rICBjYXNlIEJJTk5fRkxPQVQ6Ci0rICAgIGlmICh2YWx1ZS0+dmZsb2F0 IDwgKGZsb2F0KUlOVDMyX01JTiB8fCB2YWx1ZS0+dmZsb2F0ID4gKGZsb2F0KUlOVDMyX01BWCkg cmV0dXJuIEZBTFNFOwotKyAgICAqcGludCA9IHJvdW5kdmFsKHZhbHVlLT52ZmxvYXQpOwotKyAg ICBicmVhazsKLSsgIGNhc2UgQklOTl9ET1VCTEU6Ci0rICAgIGlmICh2YWx1ZS0+dmRvdWJsZSA8 IChkb3VibGUpSU5UMzJfTUlOIHx8IHZhbHVlLT52ZG91YmxlID4gKGRvdWJsZSlJTlQzMl9NQVgp IHJldHVybiBGQUxTRTsKLSsgICAgKnBpbnQgPSByb3VuZHZhbCh2YWx1ZS0+dmRvdWJsZSk7Ci0r ICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUUklORzoKLSsgICAgaWYgKGlzX2ludGVnZXIoKGNo YXIqKXZhbHVlLT5wdHIpKQotKyAgICAgICpwaW50ID0gYXRvaSgoY2hhciopdmFsdWUtPnB0cik7 Ci0rICAgIGVsc2UgaWYgKGlzX2Zsb2F0KChjaGFyKil2YWx1ZS0+cHRyKSkKLSsgICAgICAqcGlu dCA9IHJvdW5kdmFsKGF0b2YoKGNoYXIqKXZhbHVlLT5wdHIpKTsKLSsgICAgZWxzZQotKyAgICAg IHJldHVybiBGQUxTRTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fQk9PTDoKLSsgICAgKnBp bnQgPSB2YWx1ZS0+dmJvb2w7Ci0rICAgIGJyZWFrOwotKyAgZGVmYXVsdDoKLSsgICAgcmV0dXJu IEZBTFNFOwotKyAgfQotKwotKyAgcmV0dXJuIFRSVUU7Ci0rfQotKwotKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfaW50NjQoYmlubiAq dmFsdWUsIGludDY0ICpwaW50KSB7Ci0rCi0rICBpZiAodmFsdWUgPT0gTlVMTCB8fCBwaW50ID09 IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkg PT0gQklOTl9GQU1JTFlfSU5UKSB7Ci0rICAgIHJldHVybiBjb3B5X2ludF92YWx1ZSh2YWx1ZS0+ cHRyLCBwaW50LCB2YWx1ZS0+dHlwZSwgQklOTl9JTlQ2NCk7Ci0rICB9Ci0rCi0rICBzd2l0Y2gg KHZhbHVlLT50eXBlKSB7Ci0rICBjYXNlIEJJTk5fRkxPQVQ6Ci0rICAgIGlmICh2YWx1ZS0+dmZs b2F0IDwgKGZsb2F0KUlOVDY0X01JTiB8fCB2YWx1ZS0+dmZsb2F0ID4gKGZsb2F0KUlOVDY0X01B WCkgcmV0dXJuIEZBTFNFOwotKyAgICAqcGludCA9IHJvdW5kdmFsKHZhbHVlLT52ZmxvYXQpOwot KyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9ET1VCTEU6Ci0rICAgIGlmICh2YWx1ZS0+dmRvdWJs ZSA8IChkb3VibGUpSU5UNjRfTUlOIHx8IHZhbHVlLT52ZG91YmxlID4gKGRvdWJsZSlJTlQ2NF9N QVgpIHJldHVybiBGQUxTRTsKLSsgICAgKnBpbnQgPSByb3VuZHZhbCh2YWx1ZS0+dmRvdWJsZSk7 Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUUklORzoKLSsgICAgaWYgKGlzX2ludGVnZXIo KGNoYXIqKXZhbHVlLT5wdHIpKQotKyAgICAgICpwaW50ID0gYXRvaTY0KChjaGFyKil2YWx1ZS0+ cHRyKTsKLSsgICAgZWxzZSBpZiAoaXNfZmxvYXQoKGNoYXIqKXZhbHVlLT5wdHIpKQotKyAgICAg ICpwaW50ID0gcm91bmR2YWwoYXRvZigoY2hhciopdmFsdWUtPnB0cikpOwotKyAgICBlbHNlCi0r ICAgICAgcmV0dXJuIEZBTFNFOwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9CT09MOgotKyAg ICAqcGludCA9IHZhbHVlLT52Ym9vbDsKLSsgICAgYnJlYWs7Ci0rICBkZWZhdWx0OgotKyAgICBy ZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2dldF9kb3VibGUo YmlubiAqdmFsdWUsIGRvdWJsZSAqcGZsb2F0KSB7Ci0rICBpbnQ2NCB2aW50OwotKwotKyAgaWYg KHZhbHVlID09IE5VTEwgfHwgcGZsb2F0ID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsgIGlm ICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7Ci0rICAgIGlm IChjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCAmdmludCwgdmFsdWUtPnR5cGUsIEJJTk5fSU5U NjQpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rICAgICpwZmxvYXQgPSAoZG91YmxlKSB2aW50 OwotKyAgICByZXR1cm4gVFJVRTsKLSsgIH0KLSsKLSsgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsK LSsgIGNhc2UgQklOTl9GTE9BVDoKLSsgICAgKnBmbG9hdCA9IHZhbHVlLT52ZmxvYXQ7Ci0rICAg IGJyZWFrOwotKyAgY2FzZSBCSU5OX0RPVUJMRToKLSsgICAgKnBmbG9hdCA9IHZhbHVlLT52ZG91 YmxlOwotKyAgICBicmVhazsKLSsgIGNhc2UgQklOTl9TVFJJTkc6Ci0rICAgIGlmIChpc19pbnRl Z2VyKChjaGFyKil2YWx1ZS0+cHRyKSkKLSsgICAgICAqcGZsb2F0ID0gKGRvdWJsZSkgYXRvaTY0 KChjaGFyKil2YWx1ZS0+cHRyKTsKLSsgICAgZWxzZSBpZiAoaXNfZmxvYXQoKGNoYXIqKXZhbHVl LT5wdHIpKQotKyAgICAgICpwZmxvYXQgPSBhdG9mKChjaGFyKil2YWx1ZS0+cHRyKTsKLSsgICAg ZWxzZQotKyAgICAgIHJldHVybiBGQUxTRTsKLSsgICAgYnJlYWs7Ci0rICBjYXNlIEJJTk5fQk9P TDoKLSsgICAgKnBmbG9hdCA9IHZhbHVlLT52Ym9vbDsKLSsgICAgYnJlYWs7Ci0rICBkZWZhdWx0 OgotKyAgICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0r LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rQk9PTCBBUElFTlRSWSBiaW5uX2dl dF9ib29sKGJpbm4gKnZhbHVlLCBCT09MICpwYm9vbCkgewotKyAgaW50NjQgdmludDsKLSsKLSsg IGlmICh2YWx1ZSA9PSBOVUxMIHx8IHBib29sID09IE5VTEwpIHJldHVybiBGQUxTRTsKLSsKLSsg IGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7Ci0rICAg IGlmIChjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCAmdmludCwgdmFsdWUtPnR5cGUsIEJJTk5f SU5UNjQpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7Ci0rICAgICpwYm9vbCA9ICh2aW50ICE9IDAp ID8gVFJVRSA6IEZBTFNFOwotKyAgICByZXR1cm4gVFJVRTsKLSsgIH0KLSsKLSsgIHN3aXRjaCAo dmFsdWUtPnR5cGUpIHsKLSsgIGNhc2UgQklOTl9CT09MOgotKyAgICAqcGJvb2wgPSB2YWx1ZS0+ dmJvb2w7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX0ZMT0FUOgotKyAgICAqcGJvb2wgPSAo dmFsdWUtPnZmbG9hdCAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKLSsgICAgYnJlYWs7Ci0rICBjYXNl IEJJTk5fRE9VQkxFOgotKyAgICAqcGJvb2wgPSAodmFsdWUtPnZkb3VibGUgIT0gMCkgPyBUUlVF IDogRkFMU0U7Ci0rICAgIGJyZWFrOwotKyAgY2FzZSBCSU5OX1NUUklORzoKLSsgICAgcmV0dXJu IGlzX2Jvb2xfc3RyKChjaGFyKil2YWx1ZS0+cHRyLCBwYm9vbCk7Ci0rICBkZWZhdWx0OgotKyAg ICByZXR1cm4gRkFMU0U7Ci0rICB9Ci0rCi0rICByZXR1cm4gVFJVRTsKLSt9Ci0rCi0rLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0rY2hhciAqIEFQSUVOVFJZIGJpbm5fZ2V0X3N0 cihiaW5uICp2YWx1ZSkgewotKyAgaW50NjQgdmludDsKLSsgIGNoYXIgYnVmWzEyOF07Ci0rCi0r ICBpZiAodmFsdWUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0rCi0rICBpZiAodHlwZV9mYW1pbHko dmFsdWUtPnR5cGUpID09IEJJTk5fRkFNSUxZX0lOVCkgewotKyAgICBpZiAoY29weV9pbnRfdmFs dWUodmFsdWUtPnB0ciwgJnZpbnQsIHZhbHVlLT50eXBlLCBCSU5OX0lOVDY0KSA9PSBGQUxTRSkg cmV0dXJuIE5VTEw7Ci0rICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiUiIElOVDY0X0ZP Uk1BVCwgdmludCk7Ci0rICAgIGdvdG8gbG9jX2NvbnZlcnRfdmFsdWU7Ci0rICB9Ci0rCi0rICBz d2l0Y2ggKHZhbHVlLT50eXBlKSB7Ci0rICBjYXNlIEJJTk5fRkxPQVQ6Ci0rICAgIHZhbHVlLT52 ZG91YmxlID0gdmFsdWUtPnZmbG9hdDsKLSsgICAgLyogZmFsbCB0aHJvdWdoICovCi0rICBjYXNl IEJJTk5fRE9VQkxFOgotKyAgICBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlZyIsIHZhbHVl LT52ZG91YmxlKTsKLSsgICAgZ290byBsb2NfY29udmVydF92YWx1ZTsKLSsgIGNhc2UgQklOTl9T VFJJTkc6Ci0rICAgIHJldHVybiAoY2hhciopIHZhbHVlLT5wdHI7Ci0rICBjYXNlIEJJTk5fQk9P TDoKLSsgICAgaWYgKHZhbHVlLT52Ym9vbCkKLSsgICAgICBzdHJjcHkoYnVmLCAidHJ1ZSIpOwot KyAgICBlbHNlCi0rICAgICAgc3RyY3B5KGJ1ZiwgImZhbHNlIik7Ci0rICAgIGdvdG8gbG9jX2Nv bnZlcnRfdmFsdWU7Ci0rICB9Ci0rCi0rICByZXR1cm4gTlVMTDsKLSsKLStsb2NfY29udmVydF92 YWx1ZToKLSsKLSsgIC8vdmFsdWUtPnZpbnQ2NCA9IDA7Ci0rICB2YWx1ZS0+cHRyID0gc3RyZHVw KGJ1Zik7Ci0rICBpZiAodmFsdWUtPnB0ciA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLSsgIHZhbHVl LT5mcmVlZm4gPSBmcmVlOwotKyAgdmFsdWUtPnR5cGUgPSBCSU5OX1NUUklORzsKLSsgIHJldHVy biAoY2hhciopIHZhbHVlLT5wdHI7Ci0rCi0rfQotKwotKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwotKy8qKiogR0VORVJBTCBGVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9pc19jb250YWluZXIoYmlu biAqaXRlbSkgewotKwotKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwotKwotKyAg c3dpdGNoIChpdGVtLT50eXBlKSB7Ci0rICBjYXNlIEJJTk5fTElTVDoKLSsgIGNhc2UgQklOTl9N QVA6Ci0rICBjYXNlIEJJTk5fT0JKRUNUOgotKyAgICByZXR1cm4gVFJVRTsKLSsgIGRlZmF1bHQ6 Ci0rICAgIHJldHVybiBGQUxTRTsKLSsgIH0KLSsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9iaW5uLmggb3BlbnNz aC0xMC4ycDEvYmlubi5oCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9iaW5uLmgJMTk3MC0wMS0w MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9iaW5uLmgJMjAy Ni0wMy0xOCAxNToxMzoxNy44MzcwMjU0NjMgKzAxMDAKLUBAIC0wLDAgKzEsOTQ1IEBACi0rCi0r Ly8gVE8gRU5BQkxFIElOTElORSBGVU5DVElPTlM6Ci0rLy8gICBPTiBNU1ZDOiBlbmFibGUgdGhl ICdJbmxpbmUgRnVuY3Rpb24gRXhwYW5zaW9uJyAoL09iMikgY29tcGlsZXIgb3B0aW9uLCBhbmQg bWF5YmUgdGhlCi0rLy8gICAgICAgICAgICAnV2hvbGUgUHJvZ3JhbSBPcHRpbWl0YXppb24nICgv R0wpLCB0aGF0IHJlcXVpcmVzIHRoZQotKy8vICAgICAgICAgICAgJ0xpbmsgVGltZSBDb2RlIEdl bmVyYXRpb24nICgvTFRDRykgbGlua2VyIG9wdGlvbiB0byBiZSBlbmFibGVkIHRvbwotKwotKyNp Zm5kZWYgQklOTl9ICi0rI2RlZmluZSBCSU5OX0gKLSsKLSsjaWZkZWYgX19jcGx1c3BsdXMKLStl eHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLSsjZGVmaW5lIEJJTk5fVkVSU0lPTiAiMy4wLjAiICAv KiB1c2luZyBzZW1hbnRpYyB2ZXJzaW9uaW5nICovCi0rCi0rI2lmbmRlZiBOVUxMCi0rI2lmZGVm IF9fY3BsdXNwbHVzCi0rI2RlZmluZSBOVUxMICAgIDAKLSsjZWxzZQotKyNkZWZpbmUgTlVMTCAg ICAoKHZvaWQgKikwKQotKyNlbmRpZgotKyNlbmRpZgotKwotKyNpZm5kZWYgVFJVRQotKyNkZWZp bmUgVFJVRSAgMQotKyNlbmRpZgotKwotKyNpZm5kZWYgRkFMU0UKLSsjZGVmaW5lIEZBTFNFIDAK LSsjZW5kaWYKLSsKLSsjaWZuZGVmIEJPT0wKLSt0eXBlZGVmIGludCBCT09MOwotKyNlbmRpZgot KwotKyNpZm5kZWYgQVBJRU5UUlkKLSsgI2lmZGVmIF9XSU4zMgotKyAgI2RlZmluZSBBUElFTlRS WSBfX3N0ZGNhbGwKLSsgI2Vsc2UKLSsgIC8vI2RlZmluZSBBUElFTlRSWSBfX2F0dHJpYnV0ZV9f KChzdGRjYWxsKSkKLSsgICNkZWZpbmUgQVBJRU5UUlkgCi0rICNlbmRpZgotKyNlbmRpZgotKwot KyNpZm5kZWYgQklOTl9QUklWQVRFCi0rICNpZmRlZiBERUJVRwotKyAgI2RlZmluZSBCSU5OX1BS SVZBVEUKLSsgI2Vsc2UKLSsgICNkZWZpbmUgQklOTl9QUklWQVRFICBzdGF0aWMKLSsgI2VuZGlm Ci0rI2VuZGlmCi0rCi0rI2lmZGVmIF9NU0NfVkVSCi0rICAjZGVmaW5lIElOTElORSAgICAgICAg IF9faW5saW5lCi0rICAjZGVmaW5lIEFMV0FZU19JTkxJTkUgIF9fZm9yY2VpbmxpbmUKLSsjZWxz ZQotKyAgLy8geW91IGNhbiBjaGFuZ2UgdG8gJ2V4dGVybiBpbmxpbmUnIGlmIHVzaW5nIHRoZSBn Y2Mgb3B0aW9uIC1mbHRvCi0rICAjZGVmaW5lIElOTElORSAgICAgICAgIHN0YXRpYyBpbmxpbmUK LSsgICNkZWZpbmUgQUxXQVlTX0lOTElORSAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChh bHdheXNfaW5saW5lKSkKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIGludDY0Ci0rI2lmIGRlZmluZWQo X01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQotKyAgdHlwZWRlZiBfX2ludDY0IGlu dDY0OwotKyAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NDsKLSsjZWxzZQotKyAgdHlw ZWRlZiBsb25nIGxvbmcgaW50IGludDY0OwotKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg aW50IHVpbnQ2NDsKLSsjZW5kaWYKLSsjZW5kaWYKLSsKLSsjaWZkZWYgX1dJTjMyCi0rI2RlZmlu ZSBJTlQ2NF9GT1JNQVQgICJJNjRpIgotKyNkZWZpbmUgVUlOVDY0X0ZPUk1BVCAiSTY0dSIKLSsj ZGVmaW5lIElOVDY0X0hFWF9GT1JNQVQgICJJNjR4IgotKyNlbHNlCi0rI2RlZmluZSBJTlQ2NF9G T1JNQVQgICJsbGkiCi0rI2RlZmluZSBVSU5UNjRfRk9STUFUICJsbHUiCi0rI2RlZmluZSBJTlQ2 NF9IRVhfRk9STUFUICAibGx4IgotKyNlbmRpZgotKwotKwotKy8vIEJJTk4gQ09OU1RBTlRTICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rI2RlZmluZSBJTlZB TElEX0JJTk4gICAgICAgICAwCi0rCi0rLy8gU3RvcmFnZSBEYXRhIFR5cGVzICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9OT0JZ VEVTICAgMHgwMAotKyNkZWZpbmUgQklOTl9TVE9SQUdFX0JZVEUgICAgICAweDIwICAvLyAgOCBi aXRzCi0rI2RlZmluZSBCSU5OX1NUT1JBR0VfV09SRCAgICAgIDB4NDAgIC8vIDE2IGJpdHMgLS0g dGhlIGVuZGlhbmVzcyAoYnl0ZSBvcmRlcikgaXMgYXV0b21hdGljYWxseSBjb3JyZWN0ZWQKLSsj ZGVmaW5lIEJJTk5fU1RPUkFHRV9EV09SRCAgICAgMHg2MCAgLy8gMzIgYml0cyAtLSB0aGUgZW5k aWFuZXNzIChieXRlIG9yZGVyKSBpcyBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZAotKyNkZWZpbmUg QklOTl9TVE9SQUdFX1FXT1JEICAgICAweDgwICAvLyA2NCBiaXRzIC0tIHRoZSBlbmRpYW5lc3Mg KGJ5dGUgb3JkZXIpIGlzIGF1dG9tYXRpY2FsbHkgY29ycmVjdGVkCi0rI2RlZmluZSBCSU5OX1NU T1JBR0VfU1RSSU5HICAgIDB4QTAgIC8vIEFyZSBzdG9yZWQgd2l0aCBudWxsIHRlcm1pbmF0aW9u Ci0rI2RlZmluZSBCSU5OX1NUT1JBR0VfQkxPQiAgICAgIDB4QzAKLSsjZGVmaW5lIEJJTk5fU1RP UkFHRV9DT05UQUlORVIgMHhFMAotKyNkZWZpbmUgQklOTl9TVE9SQUdFX1ZJUlRVQUwgICAweDgw MDAwCi0rCi0rI2RlZmluZSBCSU5OX1NUT1JBR0VfTUlOICAgICAgIEJJTk5fU1RPUkFHRV9OT0JZ VEVTCi0rI2RlZmluZSBCSU5OX1NUT1JBR0VfTUFYICAgICAgIEJJTk5fU1RPUkFHRV9DT05UQUlO RVIKLSsKLSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9NQVNLICAgICAgMHhFMAotKyNkZWZpbmUgQklO Tl9TVE9SQUdFX01BU0sxNiAgICAweEUwMDAKLSsjZGVmaW5lIEJJTk5fU1RPUkFHRV9IQVNfTU9S RSAgMHgxMAotKyNkZWZpbmUgQklOTl9UWVBFX01BU0sgICAgICAgICAweDBGCi0rI2RlZmluZSBC SU5OX1RZUEVfTUFTSzE2ICAgICAgIDB4MEZGRgotKwotKyNkZWZpbmUgQklOTl9NQVhfVkFMVUVf TUFTSyAgICAweEZGRkZGCi0rCi0rCi0rLy8gRGF0YSBGb3JtYXRzICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSsjZGVmaW5lIEJJTk5fTElTVCAgICAgIDB4 RTAKLSsjZGVmaW5lIEJJTk5fTUFQICAgICAgIDB4RTEKLSsjZGVmaW5lIEJJTk5fT0JKRUNUICAg IDB4RTIKLSsKLSsjZGVmaW5lIEJJTk5fTlVMTCAgICAgIDB4MDAKLSsjZGVmaW5lIEJJTk5fVFJV RSAgICAgIDB4MDEKLSsjZGVmaW5lIEJJTk5fRkFMU0UgICAgIDB4MDIKLSsKLSsjZGVmaW5lIEJJ Tk5fVUlOVDggICAgIDB4MjAgIC8vIChCWVRFKSAodW5zaWduZWQgYnl0ZSkgSXMgdGhlIGRlZmF1 bHQgZm9ybWF0IGZvciB0aGUgQllURSB0eXBlCi0rI2RlZmluZSBCSU5OX0lOVDggICAgICAweDIx ICAvLyAoQllURSkgKHNpZ25lZCBieXRlLCBmcm9tIC0xMjggdG8gKzEyNy4gVGhlIDB4ODAgaXMg dGhlIHNpZ24gYml0LCBzbyB0aGUgcmFuZ2UgaW4gaGV4IGlzIGZyb20gMHg4MCBbLTEyOF0gdG8g MHg3RiBbMTI3XSwgYmVpbmcgMHgwMCA9IDAgYW5kIDB4RkYgPSAtMSkKLSsjZGVmaW5lIEJJTk5f VUlOVDE2ICAgIDB4NDAgIC8vIChXT1JEKSAodW5zaWduZWQgaW50ZWdlcikgSXMgdGhlIGRlZmF1 bHQgZm9ybWF0IGZvciB0aGUgV09SRCB0eXBlCi0rI2RlZmluZSBCSU5OX0lOVDE2ICAgICAweDQx ICAvLyAoV09SRCkgKHNpZ25lZCBpbnRlZ2VyKQotKyNkZWZpbmUgQklOTl9VSU5UMzIgICAgMHg2 MCAgLy8gKERXT1JEKSAodW5zaWduZWQgaW50ZWdlcikgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZv ciB0aGUgRFdPUkQgdHlwZQotKyNkZWZpbmUgQklOTl9JTlQzMiAgICAgMHg2MSAgLy8gKERXT1JE KSAoc2lnbmVkIGludGVnZXIpCi0rI2RlZmluZSBCSU5OX1VJTlQ2NCAgICAweDgwICAvLyAoUVdP UkQpICh1bnNpZ25lZCBpbnRlZ2VyKSBJcyB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSBRV09S RCB0eXBlCi0rI2RlZmluZSBCSU5OX0lOVDY0ICAgICAweDgxICAvLyAoUVdPUkQpIChzaWduZWQg aW50ZWdlcikKLSsKLSsjZGVmaW5lIEJJTk5fU0NIQVIgICAgIEJJTk5fSU5UOAotKyNkZWZpbmUg QklOTl9VQ0hBUiAgICAgQklOTl9VSU5UOAotKwotKyNkZWZpbmUgQklOTl9TVFJJTkcgICAgMHhB MCAgLy8gKFNUUklORykgUmF3IFN0cmluZwotKyNkZWZpbmUgQklOTl9EQVRFVElNRSAgMHhBMSAg Ly8gKFNUUklORykgaXNvODYwMSBmb3JtYXQgLS0gWVlZWS1NTS1ERCBISDpNTTpTUwotKyNkZWZp bmUgQklOTl9EQVRFICAgICAgMHhBMiAgLy8gKFNUUklORykgaXNvODYwMSBmb3JtYXQgLS0gWVlZ WS1NTS1ERAotKyNkZWZpbmUgQklOTl9USU1FICAgICAgMHhBMyAgLy8gKFNUUklORykgaXNvODYw MSBmb3JtYXQgLS0gSEg6TU06U1MKLSsjZGVmaW5lIEJJTk5fREVDSU1BTCAgIDB4QTQgIC8vIChT VFJJTkcpIEhpZ2ggcHJlY2lzaW9uIG51bWJlciAtIHVzZWQgZm9yIGdlbmVyaWMgZGVjaW1hbCB2 YWx1ZXMgYW5kIGZvciB0aG9zZSBvbmVzIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIHRo ZSBmbG9hdDY0IGZvcm1hdC4KLSsjZGVmaW5lIEJJTk5fQ1VSUkVOQ1lTVFIgIDB4QTUgIC8vIChT VFJJTkcpIFdpdGggY3VycmVuY3kgdW5pdC9zeW1ib2wgLSBjaGVjayBmb3Igc29tZSBpc28gc3Rh bmRhcmQgZm9ybWF0Ci0rI2RlZmluZSBCSU5OX1NJTkdMRV9TVFIgICAweEE2ICAvLyAoU1RSSU5H KSBDYW4gYmUgcmVzdG9yZWQgdG8gZmxvYXQzMgotKyNkZWZpbmUgQklOTl9ET1VCTEVfU1RSICAg MHhBNyAgLy8gKFNUUklORykgTWF5IGJlIHJlc3RvcmVkIHRvIGZsb2F0NjQKLSsKLSsjZGVmaW5l IEJJTk5fRkxPQVQzMiAgIDB4NjIgIC8vIChEV09SRCkgCi0rI2RlZmluZSBCSU5OX0ZMT0FUNjQg ICAweDgyICAvLyAoUVdPUkQpIAotKyNkZWZpbmUgQklOTl9GTE9BVCAgICAgQklOTl9GTE9BVDMy Ci0rI2RlZmluZSBCSU5OX1NJTkdMRSAgICBCSU5OX0ZMT0FUMzIKLSsjZGVmaW5lIEJJTk5fRE9V QkxFICAgIEJJTk5fRkxPQVQ2NAotKwotKyNkZWZpbmUgQklOTl9DVVJSRU5DWSAgMHg4MyAgLy8g KFFXT1JEKQotKwotKyNkZWZpbmUgQklOTl9CTE9CICAgICAgMHhDMCAgLy8gKEJMT0IpIFJhdyBC bG9iCi0rCi0rCi0rLy8gdmlydHVhbCB0eXBlczoKLSsKLSsjZGVmaW5lIEJJTk5fQk9PTCAgICAg IDB4ODAwNjEgIC8vIChEV09SRCkgVGhlIHZhbHVlIG1heSBiZSAwIG9yIDEKLSsKLSsjaWZkZWYg QklOTl9FWFRFTkRFRAotKy8vI2RlZmluZSBCSU5OX1NJTkdMRSAgICAweDgwMEExICAvLyAoU1RS SU5HKSBDYW4gYmUgcmVzdG9yZWQgdG8gZmxvYXQzMgotKy8vI2RlZmluZSBCSU5OX0RPVUJMRSAg ICAweDgwMEEyICAvLyAoU1RSSU5HKSBNYXkgYmUgcmVzdG9yZWQgdG8gZmxvYXQ2NAotKyNlbmRp ZgotKwotKy8vI2RlZmluZSBCSU5OX0JJTk4gICAgICAweDgwMEUxICAvLyAoQ09OVEFJTkVSKQot Ky8vI2RlZmluZSBCSU5OX0JJTk5fQlVGRkVSICAweDgwMEMxICAvLyAoQkxPQikgdXNlciBiaW5u LiBpdCdzIG5vdCBvcGVuIGJ5IHRoZSBwYXJzZXIKLSsKLSsKLSsvLyBleHRlbmRlZCBjb250ZW50 IHR5cGVzOgotKwotKy8vIHN0cmluZ3M6Ci0rCi0rI2RlZmluZSBCSU5OX0hUTUwgICAgICAweEIw MDEKLSsjZGVmaW5lIEJJTk5fWE1MICAgICAgIDB4QjAwMgotKyNkZWZpbmUgQklOTl9KU09OICAg ICAgMHhCMDAzCi0rI2RlZmluZSBCSU5OX0pBVkFTQ1JJUFQgMHhCMDA0Ci0rI2RlZmluZSBCSU5O X0NTUyAgICAgICAweEIwMDUKLSsKLSsvLyBibG9iczoKLSsKLSsjZGVmaW5lIEJJTk5fSlBFRyAg ICAgIDB4RDAwMQotKyNkZWZpbmUgQklOTl9HSUYgICAgICAgMHhEMDAyCi0rI2RlZmluZSBCSU5O X1BORyAgICAgICAweEQwMDMKLSsjZGVmaW5lIEJJTk5fQk1QICAgICAgIDB4RDAwNAotKwotKwot Ky8vIHR5cGUgZmFtaWxpZXMKLSsjZGVmaW5lIEJJTk5fRkFNSUxZX05PTkUgICAweDAwCi0rI2Rl ZmluZSBCSU5OX0ZBTUlMWV9OVUxMICAgMHhmMQotKyNkZWZpbmUgQklOTl9GQU1JTFlfSU5UICAg IDB4ZjIKLSsjZGVmaW5lIEJJTk5fRkFNSUxZX0ZMT0FUICAweGYzCi0rI2RlZmluZSBCSU5OX0ZB TUlMWV9TVFJJTkcgMHhmNAotKyNkZWZpbmUgQklOTl9GQU1JTFlfQkxPQiAgIDB4ZjUKLSsjZGVm aW5lIEJJTk5fRkFNSUxZX0JPT0wgICAweGY2Ci0rI2RlZmluZSBCSU5OX0ZBTUlMWV9CSU5OICAg MHhmNwotKwotKy8vIGludGVnZXIgdHlwZXMgcmVsYXRlZCB0byBzaWduYWwKLSsjZGVmaW5lIEJJ Tk5fU0lHTkVEX0lOVCAgICAgMTEKLSsjZGVmaW5lIEJJTk5fVU5TSUdORURfSU5UICAgMjIKLSsK LSsKLSt0eXBlZGVmIHZvaWQgKCpiaW5uX21lbV9mcmVlKSh2b2lkKik7Ci0rI2RlZmluZSBCSU5O X1NUQVRJQyAgICAgICgoYmlubl9tZW1fZnJlZSkwKQotKyNkZWZpbmUgQklOTl9UUkFOU0lFTlQg ICAoKGJpbm5fbWVtX2ZyZWUpLTEpCi0rCi0rCi0rLy8gLS0tIEJJTk4gU1RSVUNUVVJFIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0rCi0rCi0rc3RydWN0IGJpbm5fc3RydWN0IHsKLSsgIGludCAgICBoZWFkZXI7ICAgICAvLyB0 aGlzIHN0cnVjdCBoZWFkZXIgaG9sZHMgdGhlIG1hZ2ljIG51bWJlciAoQklOTl9NQUdJQykgdGhh dCBpZGVudGlmaWVzIHRoaXMgbWVtb3J5IGJsb2NrIGFzIGEgYmlubiBzdHJ1Y3R1cmUKLSsgIEJP T0wgICBhbGxvY2F0ZWQ7ICAvLyB0aGUgc3RydWN0IGNhbiBiZSBhbGxvY2F0ZWQgdXNpbmcgbWFs bG9jX2ZuKCkgb3IgY2FuIGJlIG9uIHRoZSBzdGFjawotKyAgQk9PTCAgIHdyaXRhYmxlOyAgIC8v IGRpZCBpdCB3YXMgY3JlYXRlIGZvciB3cml0aW5nPyBpdCBjYW4gdXNlIHRoZSBwYnVmIGlmIG5v dCB1bmlmaWVkIHdpdGggcHRyCi0rICBCT09MICAgZGlydHk7ICAgICAgLy8gdGhlIGNvbnRhaW5l ciBoZWFkZXIgaXMgbm90IHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlcgotKyAgLy8KLSsgIHZvaWQgICpw YnVmOyAgICAgICAvLyB1c2UgKnB0ciBiZWxvdz8KLSsgIEJPT0wgICBwcmVfYWxsb2NhdGVkOwot KyAgaW50ICAgIGFsbG9jX3NpemU7Ci0rICBpbnQgICAgdXNlZF9zaXplOwotKyAgLy8KLSsgIGlu dCAgICB0eXBlOwotKyAgdm9pZCAgKnB0cjsKLSsgIGludCAgICBzaXplOwotKyAgaW50ICAgIGNv dW50OwotKyAgLy8KLSsgIGJpbm5fbWVtX2ZyZWUgZnJlZWZuOyAgLy8gdXNlZCBvbmx5IHdoZW4g dHlwZSA9PSBCSU5OX1NUUklORyBvciBCSU5OX0JMT0IKLSsgIC8vCi0rICB1bmlvbiB7Ci0rICAg IHNpZ25lZCBjaGFyICAgIHZpbnQ4OwotKyAgICBzaWduZWQgc2hvcnQgICB2aW50MTY7Ci0rICAg IHNpZ25lZCBpbnQgICAgIHZpbnQzMjsKLSsgICAgaW50NjQgICAgICAgICAgdmludDY0OwotKyAg ICB1bnNpZ25lZCBjaGFyICB2dWludDg7Ci0rICAgIHVuc2lnbmVkIHNob3J0IHZ1aW50MTY7Ci0r ICAgIHVuc2lnbmVkIGludCAgIHZ1aW50MzI7Ci0rICAgIHVpbnQ2NCAgICAgICAgIHZ1aW50NjQ7 Ci0rICAgIC8vCi0rICAgIHNpZ25lZCBjaGFyICAgIHZjaGFyOwotKyAgICB1bnNpZ25lZCBjaGFy ICB2dWNoYXI7Ci0rICAgIHNpZ25lZCBzaG9ydCAgIHZzaG9ydDsKLSsgICAgdW5zaWduZWQgc2hv cnQgdnVzaG9ydDsKLSsgICAgc2lnbmVkIGludCAgICAgdmludDsKLSsgICAgdW5zaWduZWQgaW50 ICAgdnVpbnQ7Ci0rICAgIC8vCi0rICAgIGZsb2F0ICAgICAgICAgIHZmbG9hdDsKLSsgICAgZG91 YmxlICAgICAgICAgdmRvdWJsZTsKLSsgICAgLy8KLSsgICAgQk9PTCAgICAgICAgICAgdmJvb2w7 Ci0rICB9OwotKyAgLy8KLSsgIEJPT0wgICBkaXNhYmxlX2ludF9jb21wcmVzc2lvbjsKLSt9Owot KwotK3R5cGVkZWYgc3RydWN0IGJpbm5fc3RydWN0IGJpbm47Ci0rCi0rCi0rCi0rLy8gLS0tIEdF TkVSQUwgRlVOQ1RJT05TICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rY2hhciAqIEFQSUVOVFJZIGJpbm5fdmVyc2lvbigpOwot KwotK3ZvaWQgICBBUElFTlRSWSBiaW5uX3NldF9hbGxvY19mdW5jdGlvbnModm9pZCogKCpuZXdf bWFsbG9jKShzaXplX3QpLCB2b2lkKiAoKm5ld19yZWFsbG9jKSh2b2lkKixzaXplX3QpLCB2b2lk ICgqbmV3X2ZyZWUpKHZvaWQqKSk7Ci0rCi0raW50ICAgIEFQSUVOVFJZIGJpbm5fY3JlYXRlX3R5 cGUoaW50IHN0b3JhZ2VfdHlwZSwgaW50IGRhdGFfdHlwZV9pbmRleCk7Ci0rQk9PTCAgIEFQSUVO VFJZIGJpbm5fZ2V0X3R5cGVfaW5mbyhpbnQgbG9uZ190eXBlLCBpbnQgKnBzdG9yYWdlX3R5cGUs IGludCAqcGV4dHJhX3R5cGUpOwotKwotK2ludCAgICBBUElFTlRSWSBiaW5uX2dldF93cml0ZV9z dG9yYWdlKGludCB0eXBlKTsKLStpbnQgICAgQVBJRU5UUlkgYmlubl9nZXRfcmVhZF9zdG9yYWdl KGludCB0eXBlKTsKLSsKLStCT09MICAgQVBJRU5UUlkgYmlubl9pc19jb250YWluZXIoYmlubiAq aXRlbSk7Ci0rCi0rCi0rLy8gLS0tIFdSSVRFIEZVTkNUSU9OUyAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rLy8gY3JlYXRl IGEgbmV3IGJpbm4gYWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSBzdHJ1Y3R1cmUKLStiaW5uICog QVBJRU5UUlkgYmlubl9uZXcoaW50IHR5cGUsIGludCBzaXplLCB2b2lkICpidWZmZXIpOwotK2Jp bm4gKiBBUElFTlRSWSBiaW5uX2xpc3QoKTsKLStiaW5uICogQVBJRU5UUlkgYmlubl9tYXAoKTsK LStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3QoKTsKLSsKLSsvLyBjcmVhdGUgYSBuZXcgYmlu biBzdG9yaW5nIHRoZSBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrCi0rQk9PTCBBUElFTlRSWSBiaW5u X2NyZWF0ZShiaW5uICppdGVtLCBpbnQgdHlwZSwgaW50IHNpemUsIHZvaWQgKmJ1ZmZlcik7Ci0r Qk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9saXN0KGJpbm4gKmxpc3QpOwotK0JPT0wgQVBJRU5U UlkgYmlubl9jcmVhdGVfbWFwKGJpbm4gKm1hcCk7Ci0rQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0 ZV9vYmplY3QoYmlubiAqb2JqZWN0KTsKLSsKLSsvLyBjcmVhdGUgYSBuZXcgYmlubiBhcyBhIGNv cHkgZnJvbSBhbm90aGVyCi0rYmlubiAqIEFQSUVOVFJZIGJpbm5fY29weShjb25zdCB2b2lkICpv bGQpOwotKwotKwotK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZF9uZXcoYmlubiAqbGlzdCwg YmlubiAqdmFsdWUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfc2V0X25ldyhiaW5uICptYXAs IGludCBpZCwgYmlubiAqdmFsdWUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0X25l dyhiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgYmlubiAqdmFsdWUpOwotKwotKwotKy8vIGV4 dGVuZGVkIGludGVyZmFjZQotKwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2xpc3RfYWRkKGJpbm4g Kmxpc3QsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKTsKLStCT09MICAgQVBJRU5U UlkgYmlubl9tYXBfc2V0KGJpbm4gKm1hcCwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVl LCBpbnQgc2l6ZSk7Ci0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3NldChiaW5uICpvYmos IGNvbnN0IGNoYXIgKmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpOwotKwot KwotKy8vIHJlbGVhc2UgbWVtb3J5Ci0rCi0rdm9pZCAgIEFQSUVOVFJZIGJpbm5fZnJlZShiaW5u ICppdGVtKTsKLSt2b2lkICogQVBJRU5UUlkgYmlubl9yZWxlYXNlKGJpbm4gKml0ZW0pOyAvLyBm cmVlIHRoZSBiaW5uIHN0cnVjdHVyZSBidXQga2VlcHMgdGhlIGJpbm4gYnVmZmVyIGFsbG9jYXRl ZCwgcmV0dXJuaW5nIGEgcG9pbnRlciB0byBpdC4gdXNlIHRoZSBmcmVlIGZ1bmN0aW9uIHRvIHJl bGVhc2UgdGhlIGJ1ZmZlciBsYXRlcgotKwotKwotKy8vIC0tLSBDUkVBVElORyBWQUxVRVMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rYmlu biAqIEFQSUVOVFJZIGJpbm5fdmFsdWUoaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUs IGJpbm5fbWVtX2ZyZWUgZnJlZWZuKTsKLSsKLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2lu dDgoc2lnbmVkIGNoYXIgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UOCwg JnZhbHVlLCAwLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9pbnQxNihz aG9ydCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9JTlQxNiwgJnZhbHVlLCAw LCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9pbnQzMihpbnQgdmFsdWUp IHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UMzIsICZ2YWx1ZSwgMCwgTlVMTCk7Ci0r fQotK0FMV0FZU19JTkxJTkUgYmlubiAqIGJpbm5faW50NjQoaW50NjQgdmFsdWUpIHsKLSsgIHJl dHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UNjQsICZ2YWx1ZSwgMCwgTlVMTCk7Ci0rfQotK0FMV0FZ U19JTkxJTkUgYmlubiAqIGJpbm5fdWludDgodW5zaWduZWQgY2hhciB2YWx1ZSkgewotKyAgcmV0 dXJuIGJpbm5fdmFsdWUoQklOTl9VSU5UOCwgJnZhbHVlLCAwLCBOVUxMKTsKLSt9Ci0rQUxXQVlT X0lOTElORSBiaW5uICogYmlubl91aW50MTYodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKLSsgIHJl dHVybiBiaW5uX3ZhbHVlKEJJTk5fVUlOVDE2LCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdB WVNfSU5MSU5FIGJpbm4gKiBiaW5uX3VpbnQzMih1bnNpZ25lZCBpbnQgdmFsdWUpIHsKLSsgIHJl dHVybiBiaW5uX3ZhbHVlKEJJTk5fVUlOVDMyLCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdB WVNfSU5MSU5FIGJpbm4gKiBiaW5uX3VpbnQ2NCh1aW50NjQgdmFsdWUpIHsKLSsgIHJldHVybiBi aW5uX3ZhbHVlKEJJTk5fVUlOVDY0LCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5M SU5FIGJpbm4gKiBiaW5uX2Zsb2F0KGZsb2F0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl92YWx1 ZShCSU5OX0ZMT0FULCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4g KiBiaW5uX2RvdWJsZShkb3VibGUgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5f RE9VQkxFLCAmdmFsdWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5u X2Jvb2woQk9PTCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9CT09MLCAmdmFs dWUsIDAsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX251bGwoKSB7Ci0r ICByZXR1cm4gYmlubl92YWx1ZShCSU5OX05VTEwsIE5VTEwsIDAsIE5VTEwpOwotK30KLStBTFdB WVNfSU5MSU5FIGJpbm4gKiBiaW5uX3N0cmluZyhjaGFyICpzdHIsIGJpbm5fbWVtX2ZyZWUgZnJl ZWZuKSB7Ci0rICByZXR1cm4gYmlubl92YWx1ZShCSU5OX1NUUklORywgc3RyLCAwLCBmcmVlZm4p OwotK30KLStBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2Jsb2Iodm9pZCAqcHRyLCBpbnQgc2l6 ZSwgYmlubl9tZW1fZnJlZSBmcmVlZm4pIHsKLSsgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fQkxP QiwgcHRyLCBzaXplLCBmcmVlZm4pOwotK30KLSsKLSsKLSsvLyAtLS0gUkVBRCBGVU5DVElPTlMg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSsKLSsvLyB0aGVzZSBmdW5jdGlvbnMgYWNjZXB0IHBvaW50ZXIgdG8gdGhlIGJpbm4g c3RydWN0dXJlIGFuZCBwb2ludGVyIHRvIHRoZSBiaW5uIGJ1ZmZlcgotK3ZvaWQgKiBBUElFTlRS WSBiaW5uX3B0cihjb25zdCB2b2lkICpwdHIpOwotK2ludCAgICBBUElFTlRSWSBiaW5uX3NpemUo Y29uc3Qgdm9pZCAqcHRyKTsKLStpbnQgICAgQVBJRU5UUlkgYmlubl90eXBlKGNvbnN0IHZvaWQg KnB0cik7Ci0raW50ICAgIEFQSUVOVFJZIGJpbm5fY291bnQoY29uc3Qgdm9pZCAqcHRyKTsKLSsK LStCT09MICAgQVBJRU5UUlkgYmlubl9pc192YWxpZChjb25zdCB2b2lkICpwdHIsIGludCAqcHR5 cGUsIGludCAqcGNvdW50LCBpbnQgKnBzaXplKTsKLSsvKiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0 aGUgdmFsdWVzICh0eXBlLCBjb3VudCBhbmQgc2l6ZSkgYW5kIHRoZXkgZG9uJ3QgbmVlZCB0byBi ZQotKyAgIGluaXRpYWxpemVkLiB0aGVzZSB2YWx1ZXMgYXJlIHJlYWQgZnJvbSB0aGUgYnVmZmVy LiBleGFtcGxlOgotKwotKyAgIGludCB0eXBlLCBjb3VudCwgc2l6ZTsKLSsgICByZXN1bHQgPSBi aW5uX2lzX3ZhbGlkKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUpOwotKyovCi0rQk9PTCAgIEFQ SUVOVFJZIGJpbm5faXNfdmFsaWRfZXgoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQg KnBjb3VudCwgaW50ICpwc2l6ZSk7Ci0rLyogaWYgc29tZSB2YWx1ZSBpcyBpbmZvcm1lZCAodHlw ZSwgY291bnQgb3Igc2l6ZSkgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiAKLSsgICB0 aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgc2VyaWFsaXplZCBkYXRhIG1hdGNoZXMgdGhlIGlu Zm9ybWVkIHZhbHVlLiBvdGhlcndpc2UKLSsgICB0aGUgdmFsdWVzIG11c3QgYmUgaW5pdGlhbGl6 ZWQgdG8gemVyby4gZXhhbXBsZToKLSsKLSsgICBpbnQgdHlwZT0wLCBjb3VudD0wLCBzaXplID0g a25vd25fc2l6ZTsKLSsgICByZXN1bHQgPSBiaW5uX2lzX3ZhbGlkX2V4KHB0ciwgJnR5cGUsICZj b3VudCwgJnNpemUpOwotKyovCi0rCi0rQk9PTCAgIEFQSUVOVFJZIGJpbm5faXNfc3RydWN0KGNv bnN0IHZvaWQgKnB0cik7Ci0rCi0rCi0rLy8gTG9hZGluZyBhIGJpbm4gYnVmZmVyIGludG8gYSBi aW5uIHZhbHVlIC0gdGhpcyBpcyBvcHRpb25hbAotKwotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29w ZW4oY29uc3Qgdm9pZCAqZGF0YSk7ICAgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgLSB1bnNlY3Vy ZQotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29wZW5fZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNp emUpOyAvLyBhbGxvY2F0ZWQgLSBzZWN1cmUKLStCT09MICAgQVBJRU5UUlkgYmlubl9sb2FkKGNv bnN0IHZvaWQgKmRhdGEsIGJpbm4gKml0ZW0pOyAgLy8gb24gc3RhY2sgLSB1bnNlY3VyZQotK0JP T0wgICBBUElFTlRSWSBiaW5uX2xvYWRfZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUsIGJp bm4gKnZhbHVlKTsgLy8gc2VjdXJlCi0rCi0rCi0rLy8gZWFzaWVzdCBpbnRlcmZhY2UgdG8gdXNl LCBidXQgZG9uJ3QgY2hlY2sgaWYgdGhlIHZhbHVlIGlzIHRoZXJlCi0rCi0rc2lnbmVkIGNoYXIg ICAgQVBJRU5UUlkgYmlubl9saXN0X2ludDgoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0r c2hvcnQgICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2ludDE2KGNvbnN0IHZvaWQgKmxpc3Qs IGludCBwb3MpOwotK2ludCAgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQzMihjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLStpbnQ2NCAgICAgICAgICBBUElFTlRSWSBiaW5uX2xp c3RfaW50NjQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0rdW5zaWduZWQgY2hhciAgQVBJ RU5UUlkgYmlubl9saXN0X3VpbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotK3Vuc2ln bmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50 IHBvcyk7Ci0rdW5zaWduZWQgaW50ICAgQVBJRU5UUlkgYmlubl9saXN0X3VpbnQzMihjb25zdCB2 b2lkICpsaXN0LCBpbnQgcG9zKTsKLSt1aW50NjQgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3Rf dWludDY0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotK2Zsb2F0ICAgICAgICAgIEFQSUVO VFJZIGJpbm5fbGlzdF9mbG9hdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLStkb3VibGUg ICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfZG91YmxlKGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MpOwotK0JPT0wgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9ib29sKGNvbnN0IHZvaWQg Kmxpc3QsIGludCBwb3MpOwotK0JPT0wgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9udWxs KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotK2NoYXIgKiAgICAgICAgIEFQSUVOVFJZIGJp bm5fbGlzdF9zdHIoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0rdm9pZCAqICAgICAgICAg QVBJRU5UUlkgYmlubl9saXN0X2Jsb2IoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpw c2l6ZSk7Ci0rdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2xpc3QoY29uc3Qgdm9p ZCAqbGlzdCwgaW50IHBvcyk7Ci0rdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X21h cChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKLSt2b2lkICogICAgICAgICBBUElFTlRSWSBi aW5uX2xpc3Rfb2JqZWN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOwotKwotK3NpZ25lZCBj aGFyICAgIEFQSUVOVFJZIGJpbm5fbWFwX2ludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwot K3Nob3J0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2ludDE2KGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkKTsKLStpbnQgICAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9pbnQzMihjb25zdCB2 b2lkICptYXAsIGludCBpZCk7Ci0raW50NjQgICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfaW50 NjQoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3Vuc2lnbmVkIGNoYXIgIEFQSUVOVFJZIGJp bm5fbWFwX3VpbnQ4KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLSt1bnNpZ25lZCBzaG9ydCBB UElFTlRSWSBiaW5uX21hcF91aW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3Vuc2ln bmVkIGludCAgIEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQzMihjb25zdCB2b2lkICptYXAsIGludCBp ZCk7Ci0rdWludDY0ICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfdWludDY0KGNvbnN0IHZvaWQg Km1hcCwgaW50IGlkKTsKLStmbG9hdCAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9mbG9hdChj b25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0rZG91YmxlICAgICAgICAgQVBJRU5UUlkgYmlubl9t YXBfZG91YmxlKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStCT09MICAgICAgICAgICBBUElF TlRSWSBiaW5uX21hcF9ib29sKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStCT09MICAgICAg ICAgICBBUElFTlRSWSBiaW5uX21hcF9udWxsKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStj aGFyICogICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9zdHIoY29uc3Qgdm9pZCAqbWFwLCBpbnQg aWQpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2Jsb2IoY29uc3Qgdm9pZCAq bWFwLCBpbnQgaWQsIGludCAqcHNpemUpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5f bWFwX2xpc3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVO VFJZIGJpbm5fbWFwX21hcChjb25zdCB2b2lkICptYXAsIGludCBpZCk7Ci0rdm9pZCAqICAgICAg ICAgQVBJRU5UUlkgYmlubl9tYXBfb2JqZWN0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLSsK LStzaWduZWQgY2hhciAgICBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQ4KGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5KTsKLStzaG9ydCAgICAgICAgICBBUElFTlRSWSBiaW5uX29iamVj dF9pbnQxNihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0raW50ICAgICAgICAg ICAgQVBJRU5UUlkgYmlubl9vYmplY3RfaW50MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFy ICprZXkpOwotK2ludDY0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDY0KGNvbnN0 IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKLSt1bnNpZ25lZCBjaGFyICBBUElFTlRSWSBi aW5uX29iamVjdF91aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rdW5z aWduZWQgc2hvcnQgQVBJRU5UUlkgYmlubl9vYmplY3RfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwg Y29uc3QgY2hhciAqa2V5KTsKLSt1bnNpZ25lZCBpbnQgICBBUElFTlRSWSBiaW5uX29iamVjdF91 aW50MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotK3VpbnQ2NCAgICAgICAg IEFQSUVOVFJZIGJpbm5fb2JqZWN0X3VpbnQ2NChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIg KmtleSk7Ci0rZmxvYXQgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfZmxvYXQoY29uc3Qg dm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotK2RvdWJsZSAgICAgICAgIEFQSUVOVFJZIGJp bm5fb2JqZWN0X2RvdWJsZShjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rQk9P TCAgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfYm9vbChjb25zdCB2b2lkICpvYmosIGNv bnN0IGNoYXIgKmtleSk7Ci0rQk9PTCAgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfbnVs bChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rY2hhciAqICAgICAgICAgQVBJ RU5UUlkgYmlubl9vYmplY3Rfc3RyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsK LSt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9ibG9iKGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5LCBpbnQgKnBzaXplKTsKLSt2b2lkICogICAgICAgICBBUElFTlRS WSBiaW5uX29iamVjdF9saXN0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKLSt2 b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9tYXAoY29uc3Qgdm9pZCAqb2JqLCBj b25zdCBjaGFyICprZXkpOwotK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X29i amVjdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Ci0rCi0rCi0rLy8gcmV0dXJu IGEgcG9pbnRlciB0byBhbiBhbGxvY2F0ZWQgYmlubiBzdHJ1Y3R1cmUgLSBtdXN0IGJlIHJlbGVh c2VkIHdpdGggdGhlIGZyZWUoKSBmdW5jdGlvbiBvciBlcXVpdmFsZW50IHNldCBpbiBiaW5uX3Nl dF9hbGxvY19mdW5jdGlvbnMoKQotK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3RfdmFsdWUoY29u c3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Ci0rYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3ZhbHVl KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKLStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3Rf dmFsdWUoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwotKwotKy8vIHJlYWQgdGhl IHZhbHVlIHRvIGEgYmlubiBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrCi0rQk9PTCBBUElFTlRSWSBi aW5uX2xpc3RfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGJpbm4gKnZhbHVl KTsKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldF92YWx1ZShjb25zdCB2b2lkICptYXAsIGlu dCBpZCwgYmlubiAqdmFsdWUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3RfZ2V0X3ZhbHVl KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBiaW5uICp2YWx1ZSk7Ci0rCi0rLy8g c2luZ2xlIGludGVyZmFjZSAtIHRoZXNlIGZ1bmN0aW9ucyBjaGVjayB0aGUgZGF0YSB0eXBlCi0r Qk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfZ2V0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGlu dCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCAqcHNpemUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9t YXBfZ2V0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBp bnQgKnBzaXplKTsKLStCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldChjb25zdCB2b2lkICpv YmosIGNvbnN0IGNoYXIgKmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSk7 Ci0rCi0rLy8gdGhlc2UgMyBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUg YW5kIHRoZSBkYXRhIHR5cGUKLSsvLyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFu IGRldmljZXMKLSsvLyBvbiBsaXR0bGUtZW5kaWFuIGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNh ZmUgb25seSB0byByZXR1cm4gcG9pbnRlcnMgdG8gbGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5k IHN0cmluZ3MKLSsvLyB0aGUgcmV0dXJuZWQgcG9pbnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMg dmFsdWVzIG11c3QgYmUgdXNlZCBvbmx5IGJ5IHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMK LSt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0X3JlYWQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBv cywgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSk7Ci0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3Jl YWQoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpOwotK3Zv aWQgKiBBUElFTlRSWSBiaW5uX29iamVjdF9yZWFkKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5LCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKTsKLSsKLSsKLSsvLyBSRUFEIFBBSVIgRlVO Q1RJT05TCi0rCi0rLy8gdGhlc2UgZnVuY3Rpb25zIHVzZSBiYXNlIDEgaW4gdGhlICdwb3MnIGFy Z3VtZW50Ci0rCi0rLy8gb24gc3RhY2sKLStCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldF9wYWly KGNvbnN0IHZvaWQgKm1hcCwgaW50IHBvcywgaW50ICpwaWQsIGJpbm4gKnZhbHVlKTsKLStCT09M IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldF9wYWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywg Y2hhciAqcGtleSwgYmlubiAqdmFsdWUpOyAgLy8gdGhlIGtleSBtdXN0IGJlIGRlY2xhcmVkIGFz OiBjaGFyIGtleVsyNTZdOwotKwotKy8vIGFsbG9jYXRlZAotK2Jpbm4gKiBBUElFTlRSWSBiaW5u X21hcF9wYWlyKGNvbnN0IHZvaWQgKm1hcCwgaW50IHBvcywgaW50ICpwaWQpOwotK2Jpbm4gKiBB UElFTlRSWSBiaW5uX29iamVjdF9wYWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAq cGtleSk7ICAvLyB0aGUga2V5IG11c3QgYmUgZGVjbGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07Ci0r Ci0rLy8gdGhlc2UgMiBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYW5k IHRoZSBkYXRhIHR5cGUKLSsvLyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFuIGRl dmljZXMKLSsvLyBvbiBsaXR0bGUtZW5kaWFuIGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNhZmUg b25seSB0byByZXR1cm4gcG9pbnRlcnMgdG8gbGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5kIHN0 cmluZ3MKLSsvLyB0aGUgcmV0dXJuZWQgcG9pbnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMgdmFs dWVzIG11c3QgYmUgdXNlZCBvbmx5IGJ5IHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMKLSt2 b2lkICogQVBJRU5UUlkgYmlubl9tYXBfcmVhZF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBv cywgaW50ICpwaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpOwotK3ZvaWQgKiBBUElFTlRSWSBi aW5uX29iamVjdF9yZWFkX3BhaXIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgcG9zLCBjaGFyICpwa2V5 LCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKTsKLSsKLSsKLSsvLyBTRVFVRU5USUFMIFJFQUQgRlVO Q1RJT05TCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgYmlubl9pdGVyX3N0cnVjdCB7Ci0rICAgIHVuc2ln bmVkIGNoYXIgKnBuZXh0OwotKyAgICB1bnNpZ25lZCBjaGFyICpwbGltaXQ7Ci0rICAgIGludCAg IHR5cGU7Ci0rICAgIGludCAgIGNvdW50OwotKyAgICBpbnQgICBjdXJyZW50OwotK30gYmlubl9p dGVyOwotKwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2l0ZXJfaW5pdChiaW5uX2l0ZXIgKml0ZXIs IGNvbnN0IHZvaWQgKnBidWYsIGludCB0eXBlKTsKLSsKLSsvLyBhbGxvY2F0ZWQKLStiaW5uICog QVBJRU5UUlkgYmlubl9saXN0X25leHRfdmFsdWUoYmlubl9pdGVyICppdGVyKTsKLStiaW5uICog QVBJRU5UUlkgYmlubl9tYXBfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkKTsK LStiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIs IGNoYXIgKnBrZXkpOyAgLy8gdGhlIGtleSBtdXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsy NTZdOwotKwotKy8vIG9uIHN0YWNrCi0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fbGlzdF9uZXh0KGJp bm5faXRlciAqaXRlciwgYmlubiAqdmFsdWUpOwotK0JPT0wgICBBUElFTlRSWSBiaW5uX21hcF9u ZXh0KGJpbm5faXRlciAqaXRlciwgaW50ICpwaWQsIGJpbm4gKnZhbHVlKTsKLStCT09MICAgQVBJ RU5UUlkgYmlubl9vYmplY3RfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXksIGJpbm4g KnZhbHVlKTsgIC8vIHRoZSBrZXkgbXVzdCBiZSBkZWNsYXJlZCBhczogY2hhciBrZXlbMjU2XTsK LSsKLSsvLyB0aGVzZSAzIGZ1bmN0aW9ucyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBh bmQgdGhlIGRhdGEgdHlwZQotKy8vIHRoZXkgYXJlIHRocmVhZC1zYWZlIG9uIGJpZy1lbmRpYW4g ZGV2aWNlcwotKy8vIG9uIGxpdHRsZS1lbmRpYW4gZGV2aWNlcyB0aGV5IGFyZSB0aHJlYWQtc2Fm ZSBvbmx5IHRvIHJldHVybiBwb2ludGVycyB0byBsaXN0LCBtYXAsIG9iamVjdCwgYmxvYiBhbmQg c3RyaW5ncwotKy8vIHRoZSByZXR1cm5lZCBwb2ludGVyIHRvIDE2LCAzMiBhbmQgNjQgYml0cyB2 YWx1ZXMgbXVzdCBiZSB1c2VkIG9ubHkgYnkgc2luZ2xlLXRocmVhZGVkIGFwcGxpY2F0aW9ucwot K3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgaW50 ICpwdHlwZSwgaW50ICpwc2l6ZSk7Ci0rdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWRfbmV4 dChiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKTsKLSt2 b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgY2hh ciAqcGtleSwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSk7ICAvLyB0aGUga2V5IG11c3QgYmUgZGVj bGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07Ci0rCi0rCi0rLy8gLS0tIE1BQ1JPUyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsKLSsK LSsjZGVmaW5lIGJpbm5faXNfd3JpdGFibGUoaXRlbSkgKGl0ZW0pLT53cml0YWJsZTsKLSsKLSsK LSsvLyBzZXQgdmFsdWVzIG9uIHN0YWNrIGFsbG9jYXRlZCBiaW5uIHN0cnVjdHVyZXMKLSsKLSsj ZGVmaW5lIGJpbm5fc2V0X251bGwoaXRlbSkgICAgICAgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJ Tk5fTlVMTDsgfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIGJpbm5fc2V0X2Jvb2woaXRlbSx2YWx1 ZSkgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fQk9PTDsgKGl0ZW0pLT52Ym9vbCA9IHZhbHVl OyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52Ym9vbCk7IH0gd2hpbGUgKDApCi0rCi0rI2RlZmlu ZSBiaW5uX3NldF9pbnQoaXRlbSx2YWx1ZSkgICAgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX0lO VDMyOyAoaXRlbSktPnZpbnQzMiA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52aW50 MzIpOyB9IHdoaWxlICgwKQotKyNkZWZpbmUgYmlubl9zZXRfaW50NjQoaXRlbSx2YWx1ZSkgIGRv IHsgKGl0ZW0pLT50eXBlID0gQklOTl9JTlQ2NDsgKGl0ZW0pLT52aW50NjQgPSB2YWx1ZTsgKGl0 ZW0pLT5wdHIgPSAmKChpdGVtKS0+dmludDY0KTsgfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIGJp bm5fc2V0X3VpbnQoaXRlbSx2YWx1ZSkgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fVUlOVDMy OyAoaXRlbSktPnZ1aW50MzIgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVtKS0+dnVpbnQz Mik7IH0gd2hpbGUgKDApCi0rI2RlZmluZSBiaW5uX3NldF91aW50NjQoaXRlbSx2YWx1ZSkgZG8g eyAoaXRlbSktPnR5cGUgPSBCSU5OX1VJTlQ2NDsgKGl0ZW0pLT52dWludDY0ID0gdmFsdWU7IChp dGVtKS0+cHRyID0gJigoaXRlbSktPnZ1aW50NjQpOyB9IHdoaWxlICgwKQotKwotKyNkZWZpbmUg Ymlubl9zZXRfZmxvYXQoaXRlbSx2YWx1ZSkgIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9GTE9B VDsgIChpdGVtKS0+dmZsb2F0ICA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52Zmxv YXQpOyB9IHdoaWxlICgwKQotKyNkZWZpbmUgYmlubl9zZXRfZG91YmxlKGl0ZW0sdmFsdWUpIGRv IHsgKGl0ZW0pLT50eXBlID0gQklOTl9ET1VCTEU7IChpdGVtKS0+dmRvdWJsZSA9IHZhbHVlOyAo aXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZG91YmxlKTsgfSB3aGlsZSAoMCkKLSsKLSsvLyNkZWZp bmUgYmlubl9zZXRfc3RyaW5nKGl0ZW0sc3RyLHBmcmVlKSAgICBkbyB7IChpdGVtKS0+dHlwZSA9 IEJJTk5fU1RSSU5HOyAoaXRlbSktPnB0ciA9IHN0cjsgKGl0ZW0pLT5mcmVlZm4gPSBwZnJlZTsg fSB3aGlsZSAoMCkKLSsvLyNkZWZpbmUgYmlubl9zZXRfYmxvYihpdGVtLHB0cixzaXplLHBmcmVl KSBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fQkxPQjsgICAoaXRlbSktPnB0ciA9IHB0cjsgKGl0 ZW0pLT5mcmVlZm4gPSBwZnJlZTsgKGl0ZW0pLT5zaXplID0gc2l6ZTsgfSB3aGlsZSAoMCkKLStC T09MIEFQSUVOVFJZIGJpbm5fc2V0X3N0cmluZyhiaW5uICppdGVtLCBjaGFyICpzdHIsIGJpbm5f bWVtX2ZyZWUgcGZyZWUpOwotK0JPT0wgQVBJRU5UUlkgYmlubl9zZXRfYmxvYihiaW5uICppdGVt LCB2b2lkICpwdHIsIGludCBzaXplLCBiaW5uX21lbV9mcmVlIHBmcmVlKTsKLSsKLSsKLSsvLyNk ZWZpbmUgYmlubl9kb3VibGUodmFsdWUpIHsgICAgICAgKGl0ZW0pLT50eXBlID0gQklOTl9ET1VC TEU7IChpdGVtKS0+dmRvdWJsZSA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZG91 YmxlKSB9Ci0rCi0rCi0rCi0rLy8gRk9SRUFDSCBNQUNST1MKLSsvLyAtLS0tLS0tLS0tLS0tLQot Ky8vCi0rLy8gV2UgbXVzdCB1c2UgdGhlc2UgZGVjbGFyYXRpb25zIGluc2lkZSB0aGUgZnVuY3Rp b25zIHRoYXQgd2lsbCB1c2UgdGhlIG1hY3JvczoKLSsvLwotKy8vICBiaW5uX2l0ZXIgaXRlcjsK LSsvLyAgYmlubiB2YWx1ZTsKLSsvLyAgY2hhciBrZXlbMjU2XTsgIC8vIG9ubHkgZm9yIG9iamVj dHMKLSsvLyAgaW50ICBpZDsgICAgICAgIC8vIG9ubHkgZm9yIG1hcHMKLSsKLSsjZGVmaW5lIGJp bm5fb2JqZWN0X2ZvcmVhY2gob2JqZWN0LCBrZXksIHZhbHVlKSAgIFwKLSsgICAgYmlubl9pdGVy X2luaXQoJml0ZXIsIG9iamVjdCwgQklOTl9PQkpFQ1QpOyAgIFwKLSsgICAgd2hpbGUgKGJpbm5f b2JqZWN0X25leHQoJml0ZXIsIGtleSwgJnZhbHVlKSkKLSsKLSsjZGVmaW5lIGJpbm5fbWFwX2Zv cmVhY2gobWFwLCBpZCwgdmFsdWUpICAgICAgICAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0 ZXIsIG1hcCwgQklOTl9NQVApOyAgICAgICAgIFwKLSsgICAgd2hpbGUgKGJpbm5fbWFwX25leHQo Jml0ZXIsICZpZCwgJnZhbHVlKSkKLSsKLSsjZGVmaW5lIGJpbm5fbGlzdF9mb3JlYWNoKGxpc3Qs IHZhbHVlKSAgICAgICAgICAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0ZXIsIGxpc3QsIEJJ Tk5fTElTVCk7ICAgICAgIFwKLSsgICAgd2hpbGUgKGJpbm5fbGlzdF9uZXh0KCZpdGVyLCAmdmFs dWUpKQotKwotKy8vIElmIHlvdSBuZWVkIG5lc3RlZCBmb3JlYWNoIGxvb3BzLCB1c2UgdGhlIG1h Y3JvcyBiZWxvdyBmb3IgdGhlIG5lc3RlZCBsb29wCi0rLy8gQWxzbyB3ZSBuZWVkIHRvIGFkZCBh biBhZGRpdGlvbmFsIGRlY2xhcmF0aW9uIG9uIHRoZSBmdW5jdGlvbiB0byBob2xkIHRoZSBpdGVy YXRvcgotKy8vIFdlIGNhbiBhZGQgaW4gdGhlIHNhbWUgbGluZSBhcyB0aGUgZmlyc3QgaXRlcmF0 b3I6Ci0rLy8KLSsvLyAgYmlubl9pdGVyIGl0ZXIsIGl0ZXIyOwotKwotKyNkZWZpbmUgYmlubl9v YmplY3RfZm9yZWFjaDIob2JqZWN0LCBrZXksIHZhbHVlKSAgIFwKLSsgICAgYmlubl9pdGVyX2lu aXQoJml0ZXIyLCBvYmplY3QsIEJJTk5fT0JKRUNUKTsgICBcCi0rICAgIHdoaWxlIChiaW5uX29i amVjdF9uZXh0KCZpdGVyMiwga2V5LCAmdmFsdWUpKQotKwotKyNkZWZpbmUgYmlubl9tYXBfZm9y ZWFjaDIobWFwLCBpZCwgdmFsdWUpICAgICAgICAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0 ZXIyLCBtYXAsIEJJTk5fTUFQKTsgICAgICAgICBcCi0rICAgIHdoaWxlIChiaW5uX21hcF9uZXh0 KCZpdGVyMiwgJmlkLCAmdmFsdWUpKQotKwotKyNkZWZpbmUgYmlubl9saXN0X2ZvcmVhY2gyKGxp c3QsIHZhbHVlKSAgICAgICAgICAgIFwKLSsgICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBsaXN0 LCBCSU5OX0xJU1QpOyAgICAgICBcCi0rICAgIHdoaWxlIChiaW5uX2xpc3RfbmV4dCgmaXRlcjIs ICZ2YWx1ZSkpCi0rCi0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKiBT RVQgRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0rCi0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfaW50OChiaW5uICpsaXN0LCBz aWduZWQgY2hhciB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9J TlQ4LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9p bnQxNihiaW5uICpsaXN0LCBzaG9ydCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQo bGlzdCwgQklOTl9JTlQxNiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbGlzdF9hZGRfaW50MzIoYmlubiAqbGlzdCwgaW50IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9saXN0X2FkZChsaXN0LCBCSU5OX0lOVDMyLCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9saXN0X2FkZF9pbnQ2NChiaW5uICpsaXN0LCBpbnQ2NCB2YWx1ZSkgewot KyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9JTlQ2NCwgJnZhbHVlLCAwKTsKLSt9 Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWludDgoYmlubiAqbGlzdCwgdW5z aWduZWQgY2hhciB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9V SU5UOCwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRf dWludDE2KGJpbm4gKmxpc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9saXN0X2FkZChsaXN0LCBCSU5OX1VJTlQxNiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lO TElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWludDMyKGJpbm4gKmxpc3QsIHVuc2lnbmVkIGludCB2 YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9VSU5UMzIsICZ2YWx1 ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX3VpbnQ2NChiaW5u ICpsaXN0LCB1aW50NjQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJ Tk5fVUlOVDY0LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0 X2FkZF9mbG9hdChiaW5uICpsaXN0LCBmbG9hdCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlz dF9hZGQobGlzdCwgQklOTl9GTE9BVDMyLCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9saXN0X2FkZF9kb3VibGUoYmlubiAqbGlzdCwgZG91YmxlIHZhbHVlKSB7Ci0r ICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7Ci0r fQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX2Jvb2woYmlubiAqbGlzdCwgQk9P TCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9CT09MLCAmdmFs dWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9udWxsKGJpbm4g Kmxpc3QpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fTlVMTCwgTlVMTCwg MCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX3N0cihiaW5uICpsaXN0 LCBjaGFyICpzdHIpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fU1RSSU5H LCBzdHIsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9ibG9iKGJp bm4gKmxpc3QsIHZvaWQgKnB0ciwgaW50IHNpemUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfYWRk KGxpc3QsIEJJTk5fQkxPQiwgcHRyLCBzaXplKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbGlzdF9hZGRfbGlzdChiaW5uICpsaXN0LCB2b2lkICpsaXN0MikgewotKyAgcmV0dXJuIGJp bm5fbGlzdF9hZGQobGlzdCwgQklOTl9MSVNULCBiaW5uX3B0cihsaXN0MiksIGJpbm5fc2l6ZShs aXN0MikpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9tYXAoYmlubiAq bGlzdCwgdm9pZCAqbWFwKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX01B UCwgYmlubl9wdHIobWFwKSwgYmlubl9zaXplKG1hcCkpOwotK30KLStBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9saXN0X2FkZF9vYmplY3QoYmlubiAqbGlzdCwgdm9pZCAqb2JqKSB7Ci0rICByZXR1 cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX09CSkVDVCwgYmlubl9wdHIob2JqKSwgYmlubl9z aXplKG9iaikpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF92YWx1ZShi aW5uICpsaXN0LCBiaW5uICp2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwg dmFsdWUtPnR5cGUsIGJpbm5fcHRyKHZhbHVlKSwgYmlubl9zaXplKHZhbHVlKSk7Ci0rfQotKwot Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0FMV0FZU19JTkxJTkUgQk9PTCBi aW5uX21hcF9zZXRfaW50OChiaW5uICptYXAsIGludCBpZCwgc2lnbmVkIGNoYXIgdmFsdWUpIHsK LSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9JTlQ4LCAmdmFsdWUsIDApOwot K30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2ludDE2KGJpbm4gKm1hcCwgaW50 IGlkLCBzaG9ydCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5O X0lOVDE2LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0 X2ludDMyKGJpbm4gKm1hcCwgaW50IGlkLCBpbnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21h cF9zZXQobWFwLCBpZCwgQklOTl9JTlQzMiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fbWFwX3NldF9pbnQ2NChiaW5uICptYXAsIGludCBpZCwgaW50NjQgdmFsdWUp IHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9JTlQ2NCwgJnZhbHVlLCAw KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF91aW50OChiaW5uICptYXAs IGludCBpZCwgdW5zaWduZWQgY2hhciB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldCht YXAsIGlkLCBCSU5OX1VJTlQ4LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9tYXBfc2V0X3VpbnQxNihiaW5uICptYXAsIGludCBpZCwgdW5zaWduZWQgc2hvcnQgdmFs dWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9VSU5UMTYsICZ2YWx1 ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfdWludDMyKGJpbm4g Km1hcCwgaW50IGlkLCB1bnNpZ25lZCBpbnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9z ZXQobWFwLCBpZCwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX21hcF9zZXRfdWludDY0KGJpbm4gKm1hcCwgaW50IGlkLCB1aW50NjQgdmFsdWUp IHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9VSU5UNjQsICZ2YWx1ZSwg MCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfZmxvYXQoYmlubiAqbWFw LCBpbnQgaWQsIGZsb2F0IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQs IEJJTk5fRkxPQVQzMiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5f bWFwX3NldF9kb3VibGUoYmlubiAqbWFwLCBpbnQgaWQsIGRvdWJsZSB2YWx1ZSkgewotKyAgcmV0 dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfYm9vbChiaW5uICptYXAsIGludCBpZCwg Qk9PTCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0JPT0ws ICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfbnVsbChi aW5uICptYXAsIGludCBpZCkgewotKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5O X05VTEwsIE5VTEwsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X3N0 cihiaW5uICptYXAsIGludCBpZCwgY2hhciAqc3RyKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0 KG1hcCwgaWQsIEJJTk5fU1RSSU5HLCBzdHIsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9tYXBfc2V0X2Jsb2IoYmlubiAqbWFwLCBpbnQgaWQsIHZvaWQgKnB0ciwgaW50IHNpemUp IHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9CTE9CLCBwdHIsIHNpemUp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2xpc3QoYmlubiAqbWFwLCBp bnQgaWQsIHZvaWQgKmxpc3QpIHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklO Tl9MSVNULCBiaW5uX3B0cihsaXN0KSwgYmlubl9zaXplKGxpc3QpKTsKLSt9Ci0rQUxXQVlTX0lO TElORSBCT09MIGJpbm5fbWFwX3NldF9tYXAoYmlubiAqbWFwLCBpbnQgaWQsIHZvaWQgKm1hcDIp IHsKLSsgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9NQVAsIGJpbm5fcHRyKG1h cDIpLCBiaW5uX3NpemUobWFwMikpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBf c2V0X29iamVjdChiaW5uICptYXAsIGludCBpZCwgdm9pZCAqb2JqKSB7Ci0rICByZXR1cm4gYmlu bl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fT0JKRUNULCBiaW5uX3B0cihvYmopLCBiaW5uX3NpemUo b2JqKSk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfdmFsdWUoYmlubiAq bWFwLCBpbnQgaWQsIGJpbm4gKnZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwg aWQsIHZhbHVlLT50eXBlLCBiaW5uX3B0cih2YWx1ZSksIGJpbm5fc2l6ZSh2YWx1ZSkpOwotK30K LSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSsKLStBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9vYmplY3Rfc2V0X2ludDgoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHNpZ25l ZCBjaGFyIHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5O X0lOVDgsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9z ZXRfaW50MTYoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHNob3J0IHZhbHVlKSB7Ci0rICBy ZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDE2LCAmdmFsdWUsIDApOwot K30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2ludDMyKGJpbm4gKm9iaiwg Y29uc3QgY2hhciAqa2V5LCBpbnQgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9zZXQo b2JqLCBrZXksIEJJTk5fSU5UMzIsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX29iamVjdF9zZXRfaW50NjQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGludDY0 IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDY0 LCAmdmFsdWUsIDApOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3Vp bnQ4KGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBjaGFyIHZhbHVlKSB7Ci0r ICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX1VJTlQ4LCAmdmFsdWUsIDAp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQxNihiaW5uICpv YmosIGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKLSsgIHJldHVybiBi aW5uX29iamVjdF9zZXQob2JqLCBrZXksIEJJTk5fVUlOVDE2LCAmdmFsdWUsIDApOwotK30KLStB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5uICpvYmosIGNvbnN0 IGNoYXIgKmtleSwgdW5zaWduZWQgaW50IHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rf c2V0KG9iaiwga2V5LCBCSU5OX1VJTlQzMiwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXks IHVpbnQ2NCB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklO Tl9VSU5UNjQsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVj dF9zZXRfZmxvYXQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGZsb2F0IHZhbHVlKSB7Ci0r ICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0ZMT0FUMzIsICZ2YWx1ZSwg MCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfZG91YmxlKGJpbm4g Km9iaiwgY29uc3QgY2hhciAqa2V5LCBkb3VibGUgdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29i amVjdF9zZXQob2JqLCBrZXksIEJJTk5fRkxPQVQ2NCwgJnZhbHVlLCAwKTsKLSt9Ci0rQUxXQVlT X0lOTElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9ib29sKGJpbm4gKm9iaiwgY29uc3QgY2hhciAq a2V5LCBCT09MIHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBC SU5OX0JPT0wsICZ2YWx1ZSwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVj dF9zZXRfbnVsbChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSkgewotKyAgcmV0dXJuIGJpbm5f b2JqZWN0X3NldChvYmosIGtleSwgQklOTl9OVUxMLCBOVUxMLCAwKTsKLSt9Ci0rQUxXQVlTX0lO TElORSBCT09MIGJpbm5fb2JqZWN0X3NldF9zdHIoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXks IGNoYXIgKnN0cikgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9T VFJJTkcsIHN0ciwgMCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRf YmxvYihiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAqcHRyLCBpbnQgc2l6ZSkgewot KyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9CTE9CLCBwdHIsIHNpemUp OwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2xpc3QoYmlubiAqb2Jq LCBjb25zdCBjaGFyICprZXksIHZvaWQgKmxpc3QpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9z ZXQob2JqLCBrZXksIEJJTk5fTElTVCwgYmlubl9wdHIobGlzdCksIGJpbm5fc2l6ZShsaXN0KSk7 Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfbWFwKGJpbm4gKm9iaiwg Y29uc3QgY2hhciAqa2V5LCB2b2lkICptYXApIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9zZXQo b2JqLCBrZXksIEJJTk5fTUFQLCBiaW5uX3B0cihtYXApLCBiaW5uX3NpemUobWFwKSk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfb2JqZWN0KGJpbm4gKm9iaiwgY29u c3QgY2hhciAqa2V5LCB2b2lkICpvYmoyKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9i aiwga2V5LCBCSU5OX09CSkVDVCwgYmlubl9wdHIob2JqMiksIGJpbm5fc2l6ZShvYmoyKSk7Ci0r fQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfdmFsdWUoYmlubiAqb2JqLCBj b25zdCBjaGFyICprZXksIGJpbm4gKnZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3Rfc2V0 KG9iaiwga2V5LCB2YWx1ZS0+dHlwZSwgYmlubl9wdHIodmFsdWUpLCBiaW5uX3NpemUodmFsdWUp KTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rLyoqKiBHRVQgRlVO Q1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0rLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0rCi0r QUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfaW50OChjb25zdCB2b2lkICpsaXN0LCBp bnQgcG9zLCBzaWduZWQgY2hhciAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChs aXN0LCBwb3MsIEJJTk5fSU5UOCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBC T09MIGJpbm5fbGlzdF9nZXRfaW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgc2hvcnQg KnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDE2 LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9p bnQzMihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQgKnB2YWx1ZSkgewotKyAgcmV0dXJu IGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDMyLCBwdmFsdWUsIE5VTEwpOwotK30K LStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9pbnQ2NChjb25zdCB2b2lkICpsaXN0 LCBpbnQgcG9zLCBpbnQ2NCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0 LCBwb3MsIEJJTk5fSU5UNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX2xpc3RfZ2V0X3VpbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHVuc2lnbmVk IGNoYXIgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5O X1VJTlQ4LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0 X2dldF91aW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgdW5zaWduZWQgc2hvcnQgKnB2 YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQxNiwg cHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfdWlu dDMyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHVuc2lnbmVkIGludCAqcHZhbHVlKSB7Ci0r ICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDMyLCBwdmFsdWUsIE5V TEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF91aW50NjQoY29uc3Qg dm9pZCAqbGlzdCwgaW50IHBvcywgdWludDY0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xp c3RfZ2V0KGxpc3QsIHBvcywgQklOTl9VSU5UNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X2Zsb2F0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MsIGZsb2F0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywg QklOTl9GTE9BVDMyLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlu bl9saXN0X2dldF9kb3VibGUoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgZG91YmxlICpwdmFs dWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDY0LCBw dmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9ib29s KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIEJPT0wgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJp bm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0JPT0wsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfZ2V0X3N0cihjb25zdCB2b2lkICpsaXN0LCBpbnQg cG9zLCBjaGFyICoqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3Ms IEJJTk5fU1RSSU5HLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlu bl9saXN0X2dldF9ibG9iKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHZvaWQgKipwdmFsdWUs IGludCAqcHNpemUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9C TE9CLCBwdmFsdWUsIHBzaXplKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9n ZXRfbGlzdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoqcHZhbHVlKSB7Ci0rICBy ZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fTElTVCwgcHZhbHVlLCBOVUxMKTsK LSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfbWFwKGNvbnN0IHZvaWQgKmxp c3QsIGludCBwb3MsIHZvaWQgKipwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxp c3QsIHBvcywgQklOTl9NQVAsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX2xpc3RfZ2V0X29iamVjdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoq cHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fT0JKRUNU LCBwdmFsdWUsIE5VTEwpOwotK30KLSsKLSsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotKwotK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfaW50OChjb25zdCB2b2lkICptYXAsIGludCBpZCwg c2lnbmVkIGNoYXIgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBC SU5OX0lOVDgsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21h cF9nZXRfaW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHNob3J0ICpwdmFsdWUpIHsKLSsg IHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9JTlQxNiwgcHZhbHVlLCBOVUxMKTsK LSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9pbnQzMihjb25zdCB2b2lkICpt YXAsIGludCBpZCwgaW50ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBp ZCwgQklOTl9JTlQzMiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbWFwX2dldF9pbnQ2NChjb25zdCB2b2lkICptYXAsIGludCBpZCwgaW50NjQgKnB2YWx1ZSkg ewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDY0LCBwdmFsdWUsIE5V TEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X3VpbnQ4KGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBjaGFyICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5u X21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5UOCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbWFwX2dldF91aW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQs IHVuc2lnbmVkIHNob3J0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBp ZCwgQklOTl9VSU5UMTYsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBi aW5uX21hcF9nZXRfdWludDMyKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBpbnQg KnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1VJTlQzMiwg cHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF91aW50 NjQoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHVpbnQ2NCAqcHZhbHVlKSB7Ci0rICByZXR1cm4g Ymlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDY0LCBwdmFsdWUsIE5VTEwpOwotK30KLStB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X2Zsb2F0KGNvbnN0IHZvaWQgKm1hcCwgaW50 IGlkLCBmbG9hdCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJ Tk5fRkxPQVQzMiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5f bWFwX2dldF9kb3VibGUoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGRvdWJsZSAqcHZhbHVlKSB7 Ci0rICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fRkxPQVQ2NCwgcHZhbHVlLCBO VUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9ib29sKGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkLCBCT09MICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX21hcF9nZXQo bWFwLCBpZCwgQklOTl9CT09MLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJP T0wgYmlubl9tYXBfZ2V0X3N0cihjb25zdCB2b2lkICptYXAsIGludCBpZCwgY2hhciAqKnB2YWx1 ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1NUUklORywgcHZhbHVl LCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9ibG9iKGNvbnN0 IHZvaWQgKm1hcCwgaW50IGlkLCB2b2lkICoqcHZhbHVlLCBpbnQgKnBzaXplKSB7Ci0rICByZXR1 cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fQkxPQiwgcHZhbHVlLCBwc2l6ZSk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfbGlzdChjb25zdCB2b2lkICptYXAsIGlu dCBpZCwgdm9pZCAqKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBC SU5OX0xJU1QsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21h cF9nZXRfbWFwKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB2b2lkICoqcHZhbHVlKSB7Ci0rICBy ZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTUFQLCBwdmFsdWUsIE5VTEwpOwotK30K LStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X29iamVjdChjb25zdCB2b2lkICptYXAs IGludCBpZCwgdm9pZCAqKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlk LCBCSU5OX09CSkVDVCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rCi0rLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLSsKLSsvLyB1c2FnZToKLSsvLyAgIGlmIChiaW5uX29iamVjdF9nZXRfaW50MzIob2JqLCAi a2V5IiwgJnZhbHVlKSA9PSBGQUxTRSkgeHh4OwotKwotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5u X29iamVjdF9nZXRfaW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgc2lnbmVk IGNoYXIgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklO Tl9JTlQ4LCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmpl Y3RfZ2V0X2ludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBzaG9ydCAqcHZh bHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0lOVDE2LCBw dmFsdWUsIE5VTEwpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2lu dDMyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgKnB2YWx1ZSkgewotKyAg cmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQzMiwgcHZhbHVlLCBOVUxM KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9pbnQ2NChjb25zdCB2 b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgaW50NjQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQ2NCwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0r QUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF91aW50OChjb25zdCB2b2lkICpvYmos IGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgY2hhciAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlu bl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1VJTlQ4LCBwdmFsdWUsIE5VTEwpOwotK30KLStB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X3VpbnQxNihjb25zdCB2b2lkICpvYmos IGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgc2hvcnQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UMTYsIHB2YWx1ZSwgTlVMTCk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfdWludDMyKGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UMzIsIHB2YWx1ZSwgTlVMTCk7Ci0rfQot K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfdWludDY0KGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5LCB1aW50NjQgKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2Jq ZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfZmxvYXQoY29uc3Qgdm9pZCAqb2JqLCBjb25z dCBjaGFyICprZXksIGZsb2F0ICpwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5uX29iamVjdF9nZXQo b2JqLCBrZXksIEJJTk5fRkxPQVQzMiwgcHZhbHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElO RSBCT09MIGJpbm5fb2JqZWN0X2dldF9kb3VibGUoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFy ICprZXksIGRvdWJsZSAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwg a2V5LCBCSU5OX0ZMT0FUNjQsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9P TCBiaW5uX29iamVjdF9nZXRfYm9vbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwg Qk9PTCAqcHZhbHVlKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5O X0JPT0wsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVj dF9nZXRfc3RyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBjaGFyICoqcHZhbHVl KSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1NUUklORywgcHZh bHVlLCBOVUxMKTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9ibG9i KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCB2b2lkICoqcHZhbHVlLCBpbnQgKnBz aXplKSB7Ci0rICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0JMT0IsIHB2 YWx1ZSwgcHNpemUpOwotK30KLStBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2xp c3QoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHZvaWQgKipwdmFsdWUpIHsKLSsg IHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fTElTVCwgcHZhbHVlLCBOVUxM KTsKLSt9Ci0rQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9tYXAoY29uc3Qgdm9p ZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHZvaWQgKipwdmFsdWUpIHsKLSsgIHJldHVybiBiaW5u X29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fTUFQLCBwdmFsdWUsIE5VTEwpOwotK30KLStBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X29iamVjdChjb25zdCB2b2lkICpvYmosIGNv bnN0IGNoYXIgKmtleSwgdm9pZCAqKnB2YWx1ZSkgewotKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dl dChvYmosIGtleSwgQklOTl9PQkpFQ1QsIHB2YWx1ZSwgTlVMTCk7Ci0rfQotKwotKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0rCi0rQk9PTCAgIEFQSUVOVFJZIGJpbm5fZ2V0X2ludDMyKGJpbm4gKnZh bHVlLCBpbnQgKnBpbnQpOwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2dldF9pbnQ2NChiaW5uICp2 YWx1ZSwgaW50NjQgKnBpbnQpOwotK0JPT0wgICBBUElFTlRSWSBiaW5uX2dldF9kb3VibGUoYmlu biAqdmFsdWUsIGRvdWJsZSAqcGZsb2F0KTsKLStCT09MICAgQVBJRU5UUlkgYmlubl9nZXRfYm9v bChiaW5uICp2YWx1ZSwgQk9PTCAqcGJvb2wpOwotK2NoYXIgKiBBUElFTlRSWSBiaW5uX2dldF9z dHIoYmlubiAqdmFsdWUpOwotKwotKy8vIGJvb2xlYW4gc3RyaW5nIHZhbHVlczoKLSsvLyAxLCB0 cnVlLCB5ZXMsIG9uCi0rLy8gMCwgZmFsc2UsIG5vLCBvZmYKLSsKLSsvLyBib29sZWFuIG51bWJl ciB2YWx1ZXM6Ci0rLy8gIT0wIFt0cnVlXQotKy8vID09MCBbZmFsc2VdCi0rCi0rCi0rI2lmZGVm IF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKwotKyNlbmRpZiAvL0JJTk5fSAotZGlmZiAtTnVy IG9wZW5zc2gtMTAuMnAxLm9yaWcvY2hhbm5lbHMuYyBvcGVuc3NoLTEwLjJwMS9jaGFubmVscy5j Ci0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9jaGFubmVscy5jCTIwMjYtMDMtMTggMTU6MTI6MDEu OTQwNTcxNjEzICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvY2hhbm5lbHMuYwkyMDI2LTAzLTE4 IDE1OjM3OjEzLjkwNjU2MDE4NCArMDEwMAotQEAgLTkzLDYgKzkzLDExIEBACi0gLyogTWF4aW11 bSBudW1iZXIgb2YgZmFrZSBYMTEgZGlzcGxheXMgdG8gdHJ5LiAqLwotICNkZWZpbmUgTUFYX0RJ U1BMQVlTICAxMDAwCi0gCi0rLyogaW4gdmVyc2lvbiBvZiBPcGVuU1NIIGxhdGVyIHRoYW4gOC44 IGlmIHdlIGFkdmVydGlzZSBhIHdpbmRvdwotKyAqIDE2TUIgb3IgbGFyZ2VyIGlzIGNhdXNlcyBh IHBhdGhvbG9naWNhbCBiZWhhdmlvdXIgdGhhdCByZWR1Y2VzCi0rICogdGhyb3VnaHB1dC4gVGhp cyBpcyBub3QgYSBncmVhdCBzb2x1dGlvbi4gKi8KLSsjZGVmaW5lIE5PTl9IUE5fV0lORE9XX01B WCAoMTUgKiAxMDI0ICogMTAyNCkKLSsKLSAvKiBQZXItY2hhbm5lbCBjYWxsYmFjayBmb3IgcHJl L3Bvc3QgSU8gYWN0aW9ucyAqLwotIHR5cGVkZWYgdm9pZCBjaGFuX2ZuKHN0cnVjdCBzc2ggKiwg Q2hhbm5lbCAqYyk7Ci0gCi1AQCAtMjI1LDYgKzIzMCw5IEBACi0gLyogU2V0dXAgaGVscGVyICov Ci0gc3RhdGljIHZvaWQgY2hhbm5lbF9oYW5kbGVyX2luaXQoc3RydWN0IHNzaF9jaGFubmVscyAq c2MpOwotIAotKy8qIGRlZmF1bHQgdmFsdWVzIHRvIGVuYWJsZSBocG4gYW5kIHRoZSBpbml0aWFs IGJ1ZmZlciBzaXplICovCi0rc3RhdGljIGludCBocG5fZGlzYWJsZWQgPSAwOwotKwotIC8qIC0t IGNoYW5uZWwgY29yZSAqLwotIAotIHZvaWQKLUBAIC01NDEsNiArNTQ5LDE2IEBACi0gCSAgICAo Yy0+b3V0cHV0ID0gc3NoYnVmX25ldygpKSA9PSBOVUxMIHx8Ci0gCSAgICAoYy0+ZXh0ZW5kZWQg PSBzc2hidWZfbmV3KCkpID09IE5VTEwpCi0gCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIp OwotKwotKwkvKiB0aGVzZSBidWZmZXJzIGFyZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgdHJhY2tp bmcgY2hhbm5lbAotKwkgKiBidWZmZXIgdXNhZ2Ugc28gbGFiZWwgYW5kIHR5cGUgdGhlbSB3aXRo IGRlc2NyaXB0aXZlIG5hbWVzICovCi0rCXNzaGJ1Zl9yZWxhYmVsKGMtPmlucHV0LCAiY2hhbm5l bCBpbnB1dCIpOwotKwlzc2hidWZfdHlwZShjLT5pbnB1dCwgQlVGX0NIQU5ORUxfSU5QVVQpOwot Kwlzc2hidWZfcmVsYWJlbChjLT5vdXRwdXQsICJjaGFubmVsIG91dHB1dCIpOwotKwlzc2hidWZf dHlwZShjLT5vdXRwdXQsIEJVRl9DSEFOTkVMX09VVFBVVCk7Ci0rCXNzaGJ1Zl9yZWxhYmVsKGMt PmV4dGVuZGVkLCAiY2hhbm5lbCBleHRlbmRlZCIpOwotKwlzc2hidWZfdHlwZShjLT5leHRlbmRl ZCwgQlVGX0NIQU5ORUxfRVhURU5ERUQpOwotKwotIAlpZiAoKHIgPSBzc2hidWZfc2V0X21heF9z aXplKGMtPmlucHV0LCBDSEFOX0lOUFVUX01BWCkpICE9IDApCi0gCQlmYXRhbF9mcihyLCAic3No YnVmX3NldF9tYXhfc2l6ZSIpOwotIAljLT5vc3RhdGUgPSBDSEFOX09VVFBVVF9PUEVOOwotQEAg LTU1Miw2ICs1NzAsNyBAQAotIAljLT5sb2NhbF93aW5kb3cgPSB3aW5kb3c7Ci0gCWMtPmxvY2Fs X3dpbmRvd19tYXggPSB3aW5kb3c7Ci0gCWMtPmxvY2FsX21heHBhY2tldCA9IG1heHBhY2s7Ci0r CWMtPmR5bmFtaWNfd2luZG93ID0gMDsKLSAJYy0+cmVtb3RlX25hbWUgPSB4c3RyZHVwKHJlbW90 ZV9uYW1lKTsKLSAJYy0+Y3RsX2NoYW4gPSAtMTsKLSAJYy0+ZGVsYXllZCA9IDE7CQkvKiBwcmV2 ZW50IGNhbGwgdG8gY2hhbm5lbF9wb3N0IGhhbmRsZXIgKi8KLUBAIC0xMzI1LDYgKzEzNDQsMzMg QEAKLSAJYy0+aW9fd2FudCA9IFNTSF9DSEFOX0lPX1NPQ0tfVzsKLSB9Ci0gCi0rc3RhdGljIGlu dAotK2NoYW5uZWxfdGNwd2luc3ooc3RydWN0IHNzaCAqc3NoKQotK3sKLSsJdV9pbnQzMl90IHRj cHdpbnN6ID0gMDsKLSsJc29ja2xlbl90IG9wdHN6ID0gc2l6ZW9mKHRjcHdpbnN6KTsKLSsJaW50 IHJldCA9IC0xOwotKwotKwkvKiBpZiB3ZSBhcmVuJ3Qgb24gYSBzb2NrZXQgcmV0dXJuIDEyOEtC ICovCi0rCWlmICghc3NoX3BhY2tldF9jb25uZWN0aW9uX2lzX29uX3NvY2tldChzc2gpKQotKwkJ cmV0dXJuIDEyOCAqIDEwMjQ7Ci0rCi0rCXJldCA9IGdldHNvY2tvcHQoc3NoX3BhY2tldF9nZXRf Y29ubmVjdGlvbl9pbihzc2gpLAotKwkgICAgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmdGNwd2lu c3osICZvcHRzeik7Ci0rCS8qIHJldHVybiBubyBtb3JlIHRoYW4gU1NIQlVGX1NJWkVfTUFYIChj dXJyZW50bHkgMjU2TUIpICovCi0rCWlmICgocmV0ID09IDApICYmIHRjcHdpbnN6ID4gU1NIQlVG X1NJWkVfTUFYKQotKwkJdGNwd2luc3ogPSBTU0hCVUZfU0laRV9NQVg7Ci0rCS8qIGlmIHRoZSBy ZW1vdGUgc2lkZSBpcyBPcGVuU1NIIGFmdGVyIHZlcnNpb24gOC44IHdlIG5lZWQgdG8gcmVzdHJp Y3QKLSsJICogdGhlIHNpemUgb2YgdGhlIGFkdmVydGlzZWQgd2luZG93LiBOb3cgdGhpcyBtZWFu cyB0aGF0IGFueSBIUE4gdG8gbm9uLUhQTgotKwkgKiBjb25uZWN0aW9uIHdpbGwgYmUgd2luZG93 IGxpbWl0ZWQgdG8gMTVNQiBvZiByZWNlaXZlIHNwYWNlLiBUaGlzIGlzIGEKLSsJICogbm9uLW9w dGltYWwgc29sdXRpb24uCi0rCSAqLwotKwotKwlpZiAoKHNzaC0+Y29tcGF0ICYgU1NIX1JFU1RS SUNUX1dJTkRPVykgJiYgKHRjcHdpbnN6ID4gTk9OX0hQTl9XSU5ET1dfTUFYKSkKLSsJCXRjcHdp bnN6ID0gTk9OX0hQTl9XSU5ET1dfTUFYOwotKwlyZXR1cm4gKHRjcHdpbnN6KTsKLSt9Ci0rCi0g c3RhdGljIHZvaWQKLSBjaGFubmVsX3ByZV9vcGVuKHN0cnVjdCBzc2ggKnNzaCwgQ2hhbm5lbCAq YykKLSB7Ci1AQCAtMjQzMiwxOCArMjQ3OCwyOSBAQAotIAkgICAgYy0+bG9jYWxfbWF4cGFja2V0 KjMpIHx8Ci0gCSAgICBjLT5sb2NhbF93aW5kb3cgPCBjLT5sb2NhbF93aW5kb3dfbWF4LzIpICYm Ci0gCSAgICBjLT5sb2NhbF9jb25zdW1lZCA+IDApIHsKLSsJCWludCBhZGRpdGlvbiA9IDA7Ci0r CQl1X2ludDMyX3QgdGNwd2luc3ogPSBjaGFubmVsX3RjcHdpbnN6KHNzaCk7Ci0rCQkvKiBhZGp1 c3QgbWF4IHdpbmRvdyBzaXplIGlmIHdlIGFyZSBpbiBhIGR5bmFtaWMgZW52aXJvbm1lbnQKLSsJ CSAqIGFuZCB0aGUgdGNwIHJlY2VpdmUgYnVmZmVyIGlzIGxhcmdlciB0aGFuIHRoZSBzc2ggd2lu ZG93ICovCi0rCQlpZiAoYy0+ZHluYW1pY193aW5kb3cgJiYgKHRjcHdpbnN6ID4gYy0+bG9jYWxf d2luZG93X21heCkpIHsKLSsJCQkvKiBhZ2dyZXNzaXZlbHkgZ3JvdyB0aGUgd2luZG93ICovCi0r CQkJYWRkaXRpb24gPSB0Y3B3aW5zeiAtIGMtPmxvY2FsX3dpbmRvd19tYXg7Ci0rCQkJYy0+bG9j YWxfd2luZG93X21heCArPSBhZGRpdGlvbjsKLSsJCQlkZWJ1Z19mKCJDaGFubmVsICVkOiBXaW5k b3cgZ3Jvd3RoIHRvICVkIGJ5ICVkIGJ5dGVzIixjLT5zZWxmLAotKwkJCSAgICAgIGMtPmxvY2Fs X3dpbmRvd19tYXgsIGFkZGl0aW9uKTsKLSsJCX0KLSAJCWlmICghYy0+aGF2ZV9yZW1vdGVfaWQp Ci0gCQkJZmF0YWxfZigiY2hhbm5lbCAlZDogbm8gcmVtb3RlIGlkIiwgYy0+c2VsZik7Ci0gCQlp ZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLAotIAkJICAgIFNTSDJfTVNHX0NIQU5ORUxfV0lORE9X X0FESlVTVCkpICE9IDAgfHwKLSAJCSAgICAociA9IHNzaHBrdF9wdXRfdTMyKHNzaCwgYy0+cmVt b3RlX2lkKSkgIT0gMCB8fAotLQkJICAgIChyID0gc3NocGt0X3B1dF91MzIoc3NoLCBjLT5sb2Nh bF9jb25zdW1lZCkpICE9IDAgfHwKLSsJCSAgICAociA9IHNzaHBrdF9wdXRfdTMyKHNzaCwgYy0+ bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlvbikpICE9IDAgfHwKLSAJCSAgICAociA9IHNzaHBrdF9z ZW5kKHNzaCkpICE9IDApIHsKLSAJCQlmYXRhbF9mcihyLCAiY2hhbm5lbCAlaSIsIGMtPnNlbGYp OwotIAkJfQotIAkJZGVidWcyKCJjaGFubmVsICVkOiB3aW5kb3cgJWQgc2VudCBhZGp1c3QgJWQi LCBjLT5zZWxmLAotLQkJICAgIGMtPmxvY2FsX3dpbmRvdywgYy0+bG9jYWxfY29uc3VtZWQpOwot LQkJYy0+bG9jYWxfd2luZG93ICs9IGMtPmxvY2FsX2NvbnN1bWVkOwotKwkJICAgIGMtPmxvY2Fs X3dpbmRvdywgYy0+bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlvbik7Ci0rCQljLT5sb2NhbF93aW5k b3cgKz0gYy0+bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlvbjsKLSAJCWMtPmxvY2FsX2NvbnN1bWVk ID0gMDsKLSAJfQotIAlyZXR1cm4gMTsKLUBAIC0zMDMyLDkgKzMwODksNyBAQAotIAkJCSAqIGlu IHVzZS4KLSAJCQkgKi8KLSAJCQlpZiAoQ0hBTk5FTF9FRkRfSU5QVVRfQUNUSVZFKGMpKQotLQkJ CQlkZWJ1ZzIoImNoYW5uZWwgJWQ6ICIKLS0JCQkJICAgICJpYnVmX2VtcHR5IGRlbGF5ZWQgZWZk ICVkLyglenUpIiwKLS0JCQkJICAgIGMtPnNlbGYsIGMtPmVmZCwgc3NoYnVmX2xlbihjLT5leHRl bmRlZCkpOwotKwkJCQl7fQotIAkJCWVsc2UKLSAJCQkJY2hhbl9pYnVmX2VtcHR5KHNzaCwgYyk7 Ci0gCQl9Ci1AQCAtMzc0Myw3ICszNzk4LDcgQEAKLSAJCWVycm9yX2ZyKHIsICJwYXJzZSBhZGp1 c3QiKTsKLSAJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gsICJJbnZhbGlkIHdpbmRvdyBhZGp1 c3QgbWVzc2FnZSIpOwotIAl9Ci0tCWRlYnVnMigiY2hhbm5lbCAlZDogcmN2ZCBhZGp1c3QgJXUi LCBjLT5zZWxmLCBhZGp1c3QpOwotKwlkZWJ1ZzNfZigiY2hhbm5lbCAlZDogcmN2ZCBhZGp1c3Qg JXUiLCBjLT5zZWxmLCBhZGp1c3QpOwotIAlpZiAoKG5ld19yd2luID0gYy0+cmVtb3RlX3dpbmRv dyArIGFkanVzdCkgPCBjLT5yZW1vdGVfd2luZG93KSB7Ci0gCQlmYXRhbCgiY2hhbm5lbCAlZDog YWRqdXN0ICV1IG92ZXJmbG93cyByZW1vdGUgd2luZG93ICV1IiwKLSAJCSAgICBjLT5zZWxmLCBh ZGp1c3QsIGMtPnJlbW90ZV93aW5kb3cpOwotQEAgLTM4NTgsNiArMzkxMywxMyBAQAotIAlyZXR1 cm4gYWRkcjsKLSB9Ci0gCi0rdm9pZAotK2NoYW5uZWxfc2V0X2hwbl9kaXNhYmxlZChpbnQgZXh0 ZXJuYWxfaHBuX2Rpc2FibGVkKQotK3sKLSsJaHBuX2Rpc2FibGVkID0gZXh0ZXJuYWxfaHBuX2Rp c2FibGVkOwotKwlkZWJ1ZygiSFBOIERpc2FibGVkOiAlZCIsIGhwbl9kaXNhYmxlZCk7Ci0rfQot KwotIHN0YXRpYyBpbnQKLSBjaGFubmVsX3NldHVwX2Z3ZF9saXN0ZW5lcl90Y3BpcChzdHJ1Y3Qg c3NoICpzc2gsIGludCB0eXBlLAotICAgICBzdHJ1Y3QgRm9yd2FyZCAqZndkLCBpbnQgKmFsbG9j YXRlZF9saXN0ZW5fcG9ydCwKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL2NoYW5uZWxz Lmggb3BlbnNzaC0xMC4ycDEvY2hhbm5lbHMuaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2hh bm5lbHMuaAkyMDI2LTAzLTE4IDE1OjEyOjAxLjk0MDkyOTgyNiArMDEwMAotKysrIG9wZW5zc2gt MTAuMnAxL2NoYW5uZWxzLmgJMjAyNi0wMy0xOCAxNTozOTozMy43NDAxNTU5MjYgKzAxMDAKLUBA IC0xODAsNiArMTgwLDcgQEAKLSAJdV9pbnQJbG9jYWxfd2luZG93X21heDsKLSAJdV9pbnQJbG9j YWxfY29uc3VtZWQ7Ci0gCXVfaW50CWxvY2FsX21heHBhY2tldDsKLSsJaW50CWR5bmFtaWNfd2lu ZG93OwotIAlpbnQgICAgIGV4dGVuZGVkX3VzYWdlOwotIAlpbnQJc2luZ2xlX2Nvbm5lY3Rpb247 Ci0gCi1AQCAtMjYyLDcgKzI2Myw3IEBACi0gI2RlZmluZSBTU0hfQ0hBTl9JT19TT0NLCQkoU1NI X0NIQU5fSU9fU09DS19SfFNTSF9DSEFOX0lPX1NPQ0tfVykKLSAKLSAvKiBSZWFkIGJ1ZmZlciBz aXplICovCi0tI2RlZmluZSBDSEFOX1JCVUYJKDE2KjEwMjQpCi0rI2RlZmluZSBDSEFOX1JCVUYJ Q0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQKLSAKLSAvKiBNYXhpbXVtIHNpemUgZm9yIGRpcmVjdCBy ZWFkcyB0byBidWZmZXJzICovCi0gI2RlZmluZSBDSEFOTkVMX01BWF9SRUFECUNIQU5fU0VTX1BB Q0tFVF9ERUZBVUxUCi1AQCAtNDA5LDQgKzQxMCw2IEBACi0gdm9pZAkgY2hhbl93cml0ZV9mYWls ZWQoc3RydWN0IHNzaCAqLCBDaGFubmVsICopOwotIHZvaWQJIGNoYW5fb2J1Zl9lbXB0eShzdHJ1 Y3Qgc3NoICosIENoYW5uZWwgKik7Ci0gCi0rLyogaHBuIGhhbmRsZXIgKi8KLSt2b2lkICAgICBj aGFubmVsX3NldF9ocG5fZGlzYWJsZWQoaW50KTsKLSAjZW5kaWYKLWRpZmYgLU51ciBvcGVuc3No LTEwLjJwMS5vcmlnL2NpcGhlci5jIG9wZW5zc2gtMTAuMnAxL2NpcGhlci5jCi0tLS0gb3BlbnNz aC0xMC4ycDEub3JpZy9jaXBoZXIuYwkyMDI2LTAzLTE4IDE1OjEyOjAxLjczMzY5NjQ2OSArMDEw MAotKysrIG9wZW5zc2gtMTAuMnAxL2NpcGhlci5jCTIwMjYtMDMtMTggMTU6NDE6MjQuMDIzODM3 MDk1ICswMTAwCi1AQCAtNDgsMjMgKzQ4LDM5IEBACi0gI2luY2x1ZGUgInNzaGJ1Zi5oIgotICNp bmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAiZGlnZXN0LmgiCi0rI2luY2x1ZGUgImxvZy5o IgotIAotICNpbmNsdWRlICJvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oIgotIAotKy8q IGZvciBwcm92aWRlciBmdW5jdGlvbnMgKi8KLSsjaWZkZWYgV0lUSF9PUEVOU1NMMwotKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3BhcmFtcy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3Byb3ZpZGVyLmg+Ci0rI2VuZGlmCi0rCi0gI2lmbmRlZiBXSVRIX09QRU5T U0wKLSAjZGVmaW5lIEVWUF9DSVBIRVJfQ1RYIHZvaWQKLSsjZGVmaW5lIEVWUF9DSVBIRVIgdm9p ZAotKyNlbHNlCi0rLyogZm9yIG11bHRpLXRocmVhZGVkIGFlcy1jdHIgY2lwaGVyICovCi0rZXh0 ZXJuIGNvbnN0IEVWUF9DSVBIRVIgKmV2cF9hZXNfY3RyX210KHZvaWQpOwotICNlbmRpZgotIAot IHN0cnVjdCBzc2hjaXBoZXJfY3R4IHsKLSAJaW50CXBsYWludGV4dDsKLSAJaW50CWVuY3J5cHQ7 Ci0gCUVWUF9DSVBIRVJfQ1RYICpldnA7Ci0rCWNvbnN0IEVWUF9DSVBIRVIgKm1ldGhfcHRyOyAv KnVzZWQgdG8gZnJlZSBtZW1vcnkgaW4gYWVzX2N0cl9tdCAqLwotIAlzdHJ1Y3QgY2hhY2hhcG9s eV9jdHggKmNwX2N0eDsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rCXN0cnVjdCBjaGFjaGFwb2x5 X2N0eF9tdCAqY3BfY3R4X210OwotKyNlbmRpZgotIAlzdHJ1Y3QgYWVzY3RyX2N0eCBhY19jdHg7 IC8qIFhYWCB1bmlvbiB3aXRoIGV2cD8gKi8KLSAJY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqY2lw aGVyOwotIH07Ci0gCi0tc3RhdGljIGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgY2lwaGVyc1tdID0g ewotK3N0YXRpYyBzdHJ1Y3Qgc3NoY2lwaGVyIGNpcGhlcnNbXSA9IHsKLSAjaWZkZWYgV0lUSF9P UEVOU1NMCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotIAl7ICIzZGVzLWNiYyIsCQk4LCAyNCwg MCwgMCwgQ0ZMQUdfQ0JDLCBFVlBfZGVzX2VkZTNfY2JjIH0sCi1AQCAtODYsNiArMTAyLDEwIEBA Ci0gI2VuZGlmCi0gCXsgImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tIiwKLSAJCQkJOCwg NjQsIDAsIDE2LCBDRkxBR19DSEFDSEFQT0xZLCBOVUxMIH0sCi0rI2lmZGVmIFdJVEhfT1BFTlNT TAotKwl7ICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIiwKLSsJCQkJOCwgNjQsIDAs IDE2LCBDRkxBR19DSEFDSEFQT0xZfENGTEFHX01ULCBOVUxMIH0sCi0rI2VuZGlmCi0gCXsgIm5v bmUiLAkJOCwgMCwgMCwgMCwgQ0ZMQUdfTk9ORSwgTlVMTCB9LAotIAotIAl7IE5VTEwsCQkJMCwg MCwgMCwgMCwgMCwgTlVMTCB9Ci1AQCAtMTIyLDEyICsxNDIsNjMgQEAKLSAjZW5kaWYKLSB9Ci0g Ci0rLyogdXNlZCB0byBnZXQgdGhlIGNpcGhlciBuYW1lIHdoZW4gd2UgYXJlIHRlc3RpbmcgdG8K LSsgKiBzZWUgaWYgd2UgY2FuIG1vdmUgZnJvbSBhIHNlcmlhbCB0byBwYXJhbGxlbCBjaXBoZXIK LSsgKiBvbmx5IGNhbGxlZCBpbiBjaXBoZXItc3dpdGNoLmMKLSsgKi8KLStjb25zdCBjaGFyICoK LStjaXBoZXJfY3R4X25hbWUoY29uc3Qgc3RydWN0IHNzaGNpcGhlcl9jdHggKmNjKQotK3sKLSsJ cmV0dXJuIGNjLT5jaXBoZXItPm5hbWU7Ci0rfQotKwotIHVfaW50Ci0gY2lwaGVyX2Jsb2Nrc2l6 ZShjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjKQotIHsKLSAJcmV0dXJuIChjLT5ibG9ja19zaXpl KTsKLSB9Ci0gCi0rdWludDY0X3QKLStjaXBoZXJfcmVrZXlfYmxvY2tzKGNvbnN0IHN0cnVjdCBz c2hjaXBoZXIgKmMpCi0rewotKwkvKgotKwkgKiBDaGFjaGEyMC1Qb2x5MTMwNSBkb2VzIG5vdCBi ZW5lZml0IGZyb20gZGF0YS1iYXNlZCByZWtleWluZywKLSsJICogcGVyICJUaGUgU2VjdXJpdHkg b2YgQ2hhQ2hhMjAtUG9seTEzMDUgaW4gdGhlIE11bHRpLXVzZXIgU2V0dGluZyIsCi0rCSAqIERl Z2FicmllbGUsIEouIFAuLCBHb3ZpbmRlbiwgSiwgR3VudGhlciwgRi4gYW5kIFBhdGVyc29uIEsu Ci0rCSAqIEFDTSBDQ1MgMjAyMTsgaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAyMy8wODUucGRm Ci0rCSAqCi0rCSAqIENyeXB0YW5hbHlzaXMgYXNpZGUsIHdlIGRvIHN0aWxsIHdhbnQgZG8gbmVl ZCB0byBwcmV2ZW50IHRoZSBTU0gKLSsJICogc2VxdWVuY2UgbnVtYmVyIHdyYXBwaW5nIGFuZCBh bHNvIHRvIHJla2V5IHRvIHByb3ZpZGUgc29tZQotKwkgKiBwcm90ZWN0aW9uIGZvciBsb25nIGxp dmVkIHNlc3Npb25zIGFnYWluc3Qga2V5IGRpc2Nsb3N1cmUgYXQgdGhlCi0rCSAqIGVuZHBvaW50 cywgc28gYXJyYW5nZSBmb3IgcmVrZXlpbmcgZXZlcnkgMioqMzIgYmxvY2tzIGFzIHRoZQotKwkg KiAxMjgtYml0IGJsb2NrIGNpcGhlcnMgZG8gKGkuZS4gZXZlcnkgMzJHQiBkYXRhKS4KLSsJICov Ci0rCWlmICgoYy0+ZmxhZ3MgJiBDRkxBR19DSEFDSEFQT0xZKSAhPSAwKQotKwkJcmV0dXJuICh1 aW50NjRfdCkxIDw8IDMyOwotKwotKwkvKiB0aGVyZSBpcyBubyBhY3R1YWwgbmVlZCB0byByZWtl eSB0aGUgTlVMTCBjaXBoZXIgYnV0Ci0rCSAqIHJla2V5aW5nIGlzIGEgbmVjZXNzYXJ5IHN0ZXAu IEluIHBhcnQsIGFzIG1lbnRpb25lZCBhYm92ZSwKLSsJICogdG8ga2VlcCB0aGUgc2VxbnIgZnJv bSB3cmFwcGluZy4gU28gd2Ugc2V0IGl0IHRvIHRoZQotKwkgKiBtYXhpbXVtIHBvc3NpYmxlIC1j anIgNC8xMC8yMyAqLwotKwlpZiAoKGMtPmZsYWdzICYgQ0ZMQUdfTk9ORSkgIT0gMCkKLSsJCXJl dHVybiAodWludDY0X3QpMSA8PCAzMjsKLSsKLSsJLyoKLSsJICogVGhlIDJeKGJsb2Nrc2l6ZSoy KSBsaW1pdCBpcyB0b28gZXhwZW5zaXZlIGZvciAzREVTLAotKwkgKiBzbyBlbmZvcmNlIGEgMUdC IGRhdGEgbGltaXQgZm9yIHNtYWxsIGJsb2Nrc2l6ZXMuCi0rCSAqIFNlZSBkaXNjdXNzaW9uIGlu IFJGQzQzNDQgc2VjdGlvbiAzLjIuCi0rCSAqLwotKwlpZiAoYy0+YmxvY2tfc2l6ZSA8IDE2KQot KwkJcmV0dXJuICgodWludDY0X3QpMSA8PCAzMCkgLyBjLT5ibG9ja19zaXplOwotKwkvKgotKwkg KiBPdGhlcndpc2UsIHVzZSB0aGUgUkZDNDM0NCBzMy4yIHJlY29tbWVuZGF0aW9uIG9mIDIqKihM LzQpIGJsb2NrcwotKwkgKiBiZWZvcmUgcmVrZXlpbmcgd2hlcmUgTCBpcyB0aGUgYmxvY2tzaXpl IGluIGJpdHMuCi0rCSAqIE1vc3Qgb3RoZXIgY2lwaGVycyBoYXZlIGEgMTI4IGJpdCBibG9ja3Np emUsIHNvIHRoaXMgZXF1YXRlcyB0bwotKwkgKiAyKiozMiBibG9ja3MgLyA2NEdCIGRhdGEuCi0r CSAqLwotKwlyZXR1cm4gKHVpbnQ2NF90KTEgPDwgKGMtPmJsb2NrX3NpemUgKiAyKTsKLSt9Ci0r Ci0gdV9pbnQKLSBjaXBoZXJfa2V5bGVuKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmMpCi0gewot QEAgLTE3MSwxMCArMjQyLDEwIEBACi0gCXJldHVybiBjYy0+cGxhaW50ZXh0OwotIH0KLSAKLS1j b25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICoKLStzdHJ1Y3Qgc3NoY2lwaGVyICoKLSBjaXBoZXJfYnlf bmFtZShjb25zdCBjaGFyICpuYW1lKQotIHsKLS0JY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqYzsK LSsJc3RydWN0IHNzaGNpcGhlciAqYzsKLSAJZm9yIChjID0gY2lwaGVyczsgYy0+bmFtZSAhPSBO VUxMOyBjKyspCi0gCQlpZiAoc3RyY21wKGMtPm5hbWUsIG5hbWUpID09IDApCi0gCQkJcmV0dXJu IGM7Ci1AQCAtMTk2LDcgKzI2Nyw4IEBACi0gCWZvciAoKHAgPSBzdHJzZXAoJmNwLCBDSVBIRVJf U0VQKSk7IHAgJiYgKnAgIT0gJ1wwJzsKLSAJICAgIChwID0gc3Ryc2VwKCZjcCwgQ0lQSEVSX1NF UCkpKSB7Ci0gCQljID0gY2lwaGVyX2J5X25hbWUocCk7Ci0tCQlpZiAoYyA9PSBOVUxMIHx8IChj LT5mbGFncyAmIENGTEFHX0lOVEVSTkFMKSAhPSAwKSB7Ci0rCQlpZiAoYyA9PSBOVUxMIHx8ICgo Yy0+ZmxhZ3MgJiBDRkxBR19JTlRFUk5BTCkgIT0gMCAmJgotKwkJCQkgIChjLT5mbGFncyAmIENG TEFHX05PTkUpICE9IDApKSB7Ci0gCQkJZnJlZShjaXBoZXJfbGlzdCk7Ci0gCQkJcmV0dXJuIDA7 Ci0gCQl9Ci1AQCAtMjE3LDcgKzI4OSw3IEBACi0gaW50Ci0gY2lwaGVyX2luaXQoc3RydWN0IHNz aGNpcGhlcl9jdHggKipjY3AsIGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmNpcGhlciwKLSAgICAg Y29uc3QgdV9jaGFyICprZXksIHVfaW50IGtleWxlbiwgY29uc3QgdV9jaGFyICppdiwgdV9pbnQg aXZsZW4sCi0tICAgIGludCBkb19lbmNyeXB0KQotKyAgICB1X2ludCBzZXFuciwgaW50IGRvX2Vu Y3J5cHQsIGludCBlbmFibGVfdGhyZWFkcykKLSB7Ci0gCXN0cnVjdCBzc2hjaXBoZXJfY3R4ICpj YyA9IE5VTEw7Ci0gCWludCByZXQgPSBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotQEAgLTIzMiw2 ICszMDQsNyBAQAotIAotIAljYy0+cGxhaW50ZXh0ID0gKGNpcGhlci0+ZmxhZ3MgJiBDRkxBR19O T05FKSAhPSAwOwotIAljYy0+ZW5jcnlwdCA9IGRvX2VuY3J5cHQ7Ci0rCWNjLT5tZXRoX3B0ciA9 IE5VTEw7Ci0gCi0gCWlmIChrZXlsZW4gPCBjaXBoZXItPmtleV9sZW4gfHwKLSAJICAgIChpdiAh PSBOVUxMICYmIGl2bGVuIDwgY2lwaGVyX2l2bGVuKGNpcGhlcikpKSB7Ci1AQCAtMjQxLDggKzMx NCwxOSBAQAotIAotIAljYy0+Y2lwaGVyID0gY2lwaGVyOwotIAlpZiAoKGNjLT5jaXBoZXItPmZs YWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkgewotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsJ CWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19NVCkgIT0gMCkgewotKwkJCWNjLT5jcF9j dHhfbXQgPSBjaGFjaGFwb2x5X25ld19tdChzZXFuciwga2V5LCBrZXlsZW4pOwotKwkJCXJldCA9 IGNjLT5jcF9jdHhfbXQgIT0gTlVMTCA/IDAgOgotKwkJCSAgICBTU0hfRVJSX0lOVkFMSURfQVJH VU1FTlQ7Ci0rCQl9IGVsc2UgewotKwkJCWNjLT5jcF9jdHggPSBjaGFjaGFwb2x5X25ldyhrZXks IGtleWxlbik7Ci0rCQkJcmV0ID0gY2MtPmNwX2N0eCAhPSBOVUxMID8gMCA6IFNTSF9FUlJfSU5W QUxJRF9BUkdVTUVOVDsKLSsJCX0KLSsjZWxzZQotIAkJY2MtPmNwX2N0eCA9IGNoYWNoYXBvbHlf bmV3KGtleSwga2V5bGVuKTsKLSAJCXJldCA9IGNjLT5jcF9jdHggIT0gTlVMTCA/IDAgOiBTU0hf RVJSX0lOVkFMSURfQVJHVU1FTlQ7Ci0rI2VuZGlmCi0gCQlnb3RvIG91dDsKLSAJfQotIAlpZiAo KGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfTk9ORSkgIT0gMCkgewotQEAgLTI2NCw2ICszNDgs NTMgQEAKLSAJCXJldCA9IFNTSF9FUlJfQUxMT0NfRkFJTDsKLSAJCWdvdG8gb3V0OwotIAl9Ci0r CS8qIHRoZSBmb2xsb3dpbmcgYmxvY2sgaXMgZm9yIEFFUy1DVFItTVQgY2lwaGVyIHN3aXRjaGlu ZwotKwkgKiBpZiB3ZSBhcmUgdXNpbmcgdGhlIGN0ciBjaXBoZXIgYW5kIHdlIGFyZSBwb3N0LWF1 dGggdGhlbgotKwkgKiBzdGFydCB0aGUgdGhyZWFkZWQgY2lwaGVyLiBJZiBPU1NMIHN1cHBvcnRz IHByb3ZpZGVycyAoT1NTTCAzLjArKSB0aGVuCi0rCSAqIHdlIGxvYWQgb3VyIGhwbnNzaCBwcm92 aWRlci4gSWYgaXQgZG9lc24ndCAoT1NTTCA8IDEuMSkgdGhlbiB3ZSB1c2UgdGhlCi0rCSAqIF9t ZXRoX25ldyBwcm9jZXNzIGZvdW5kIGluIGNpcGhlci1jdHItbXQuYyAqLwotKwlpZiAoc3Ryc3Ry KGNjLT5jaXBoZXItPm5hbWUsICJjdHIiKSAmJiBlbmFibGVfdGhyZWFkcykgewotKyNpZmRlZiBX SVRIX09QRU5TU0wzCi0rCQkvKiB0aGlzIHZlcnNpb24gb2Ygb3BlbnNzbCB1c2VzIHByb3ZpZGVy cyAqLwotKwkJT1NTTF9MSUJfQ1RYICphZXNfbGliID0gTlVMTDsgLyogcHJvYmFibHkgbm90IG5l ZWRlZCAqLwotKwkJT1NTTF9QUk9WSURFUiAqYWVzX210X3Byb3ZpZGVyID0gTlVMTDsKLSsJCXR5 cGUgPSBOVUxMOwotKwotKwkJaWYgKE9TU0xfUFJPVklERVJfYWRkX2J1aWx0aW4oYWVzX2xpYiwg ImhwbnNzaCIsCi0rCQkJCQkgICAgICBPU1NMX3Byb3ZpZGVyX2luaXQpICE9IDEpIHsKLSsJCQlm YXRhbCgiRmFpbGVkIHRvIGFkZCBIUE5TU0ggcHJvdmlkZXIgZm9yIEFFUy1DVFIiKTsKLSsJCX0K LSsJCWFlc19tdF9wcm92aWRlciA9IE9TU0xfUFJPVklERVJfbG9hZChhZXNfbGliLCAiaHBuc3No Iik7Ci0rCi0rCQlpZiAoYWVzX210X3Byb3ZpZGVyICE9IE5VTEwpIHsKLSsJCQkvKiB1c2UgdGhl IHByZXZpb3VzIGtleSBsZW5ndGggdG8gZGV0ZXJtaW5lIHdoaWNoIGNpcGhlciB0byBsb2FkICov Ci0rCQkJaWYgKGNpcGhlci0+a2V5X2xlbiA9PSAzMikKLSsJCQkJdHlwZSA9IEVWUF9DSVBIRVJf ZmV0Y2goYWVzX2xpYiwgImFlc19jdHJfbXRfMjU2IiwgTlVMTCk7Ci0rCQkJaWYgKGNpcGhlci0+ a2V5X2xlbiA9PSAyNCkKLSsJCQkJdHlwZSA9IEVWUF9DSVBIRVJfZmV0Y2goYWVzX2xpYiwgImFl c19jdHJfbXRfMTkyIiwgTlVMTCk7Ci0rCQkJaWYgKGNpcGhlci0+a2V5X2xlbiA9PSAxNikKLSsJ CQkJdHlwZSA9IEVWUF9DSVBIRVJfZmV0Y2goYWVzX2xpYiwgImFlc19jdHJfbXRfMTI4IiwgTlVM TCk7Ci0rCQkJaWYgKHR5cGUgPT0gTlVMTCkgewotKwkJCQlFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0 ZGVycik7Ci0rCQkJCWZhdGFsKCJGQUlMRUQgVE8gTE9BRCBhZXNfY3RyX210Iik7Ci0rCQkJfSBl bHNlIHsKLSsJCQkJZGVidWcoIkxPQURFRCBhZXNfY3RyX210Iik7Ci0rCQkJfQotKwkJfQotKwkJ ZWxzZSB7Ci0rCQkJRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwotKwkJCWZhdGFsKCJGYWls ZWQgdG8gbG9hZCBIUE4tU1NIIEFFUy1DVFItTVQgcHJvdmlkZXIuIik7Ci0rCQl9Ci0rI2Vsc2UK LSsJCXR5cGUgPSAoKmV2cF9hZXNfY3RyX210KSgpOyAvKiBzZWUgY2lwaGVyLWN0ci1tdC5jICov Ci0rCQkvKiB3ZSBuZWVkIHRvIGZyZWUgdGhpcyBsYXRlciBpZiB1c2luZyBhZXNfY3RyX210Ci0r CQkgKiB1bmRlciBPU1NMIDEuMS4gSG9uZXN0bHksIHdlIGNvdWxkIGF2b2lkIHRoaXMgYnkgbWFr aW5nCi0rCQkgKiBpdCBhIGdsb2JhbCBpbiBjaXBoZXItY3RyX210LmMgYW5kIGV4cG9ydGluZyBp dCBoZXJlCi0rCQkgKiB0aGVuIHdlJ2Qgb25seSBoYXZlIHRvIGNhbGwgRVZQX0NJUEhFUl9tZXRo IG9uY2UgYnV0IHRoaXMKLSsJCSAqIHdvcmtzIGZvciBub3cuIFRPRE86IFRoaXMuIGNqciAwMi4y Mi4yMDIzICovCi0rCQljYy0+bWV0aF9wdHIgPSB0eXBlOwotKyNlbmRpZiAvKiBXSVRIX09QRU5T U0wzICovCi0rCX0gLyogaWYgKHN0cnN0cigpKSAqLwotIAlpZiAoRVZQX0NpcGhlckluaXQoY2Mt PmV2cCwgdHlwZSwgTlVMTCwgKHVfY2hhciAqKWl2LAotIAkgICAgKGRvX2VuY3J5cHQgPT0gQ0lQ SEVSX0VOQ1JZUFQpKSA9PSAwKSB7Ci0gCQlyZXQgPSBTU0hfRVJSX0xJQkNSWVBUT19FUlJPUjsK LUBAIC0zMTgsNiArNDQ5LDEyIEBACi0gICAgY29uc3QgdV9jaGFyICpzcmMsIHVfaW50IGxlbiwg dV9pbnQgYWFkbGVuLCB1X2ludCBhdXRobGVuKQotIHsKLSAJaWYgKChjYy0+Y2lwaGVyLT5mbGFn cyAmIENGTEFHX0NIQUNIQVBPTFkpICE9IDApIHsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rCQlp ZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfTVQpICE9IDApIHsKLSsJCQlyZXR1cm4gY2hh Y2hhcG9seV9jcnlwdF9tdChjYy0+Y3BfY3R4X210LCBzZXFuciwgZGVzdCwKLSsJCQkgICAgc3Jj LCBsZW4sIGFhZGxlbiwgYXV0aGxlbiwgY2MtPmVuY3J5cHQpOwotKwkJfQotKyNlbmRpZgotIAkJ cmV0dXJuIGNoYWNoYXBvbHlfY3J5cHQoY2MtPmNwX2N0eCwgc2VxbnIsIGRlc3QsIHNyYywKLSAJ CSAgICBsZW4sIGFhZGxlbiwgYXV0aGxlbiwgY2MtPmVuY3J5cHQpOwotIAl9Ci1AQCAtMzgwLDkg KzUxNywxNiBAQAotIGNpcGhlcl9nZXRfbGVuZ3RoKHN0cnVjdCBzc2hjaXBoZXJfY3R4ICpjYywg dV9pbnQgKnBsZW5wLCB1X2ludCBzZXFuciwKLSAgICAgY29uc3QgdV9jaGFyICpjcCwgdV9pbnQg bGVuKQotIHsKLS0JaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX0NIQUNIQVBPTFkpICE9 IDApCi0rCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19DSEFDSEFQT0xZKSAhPSAwKSB7 Ci0rI2lmZGVmIFdJVEhfT1BFTlNTTAotKwkJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFH X01UKSAhPSAwKSB7Ci0rCQkJcmV0dXJuIGNoYWNoYXBvbHlfZ2V0X2xlbmd0aF9tdChjYy0+Y3Bf Y3R4X210LCBwbGVucCwKLSsJCQkgICAgc2VxbnIsIGNwLCBsZW4pOwotKwkJfQotKyNlbmRpZgot IAkJcmV0dXJuIGNoYWNoYXBvbHlfZ2V0X2xlbmd0aChjYy0+Y3BfY3R4LCBwbGVucCwgc2VxbnIs Ci0gCQkgICAgY3AsIGxlbik7Ci0rCX0KLSAJaWYgKGxlbiA8IDQpCi0gCQlyZXR1cm4gU1NIX0VS Ul9NRVNTQUdFX0lOQ09NUExFVEU7Ci0gCSpwbGVucCA9IFBFRUtfVTMyKGNwKTsKLUBAIC0zOTUs MTMgKzUzOSwzMyBAQAotIAlpZiAoY2MgPT0gTlVMTCB8fCBjYy0+Y2lwaGVyID09IE5VTEwpCi0g CQlyZXR1cm47Ci0gCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19DSEFDSEFQT0xZKSAh PSAwKSB7Ci0rI2lmZGVmIFdJVEhfT1BFTlNTTAotKwkJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAm IENGTEFHX01UKSAhPSAwKSB7Ci0rCQkJY2hhY2hhcG9seV9mcmVlX210KGNjLT5jcF9jdHhfbXQp OwotKwkJCWNjLT5jcF9jdHhfbXQgPSBOVUxMOwotKwkJfSBlbHNlIHsKLSsJCQljaGFjaGFwb2x5 X2ZyZWUoY2MtPmNwX2N0eCk7Ci0rCQkJY2MtPmNwX2N0eCA9IE5VTEw7Ci0rCQl9Ci0rI2Vsc2UK LSAJCWNoYWNoYXBvbHlfZnJlZShjYy0+Y3BfY3R4KTsKLSAJCWNjLT5jcF9jdHggPSBOVUxMOwot KyNlbmRpZgotIAl9IGVsc2UgaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX0FFU0NUUikg IT0gMCkKLSAJCWV4cGxpY2l0X2J6ZXJvKCZjYy0+YWNfY3R4LCBzaXplb2YoY2MtPmFjX2N0eCkp OwotICNpZmRlZiBXSVRIX09QRU5TU0wKLSAJRVZQX0NJUEhFUl9DVFhfZnJlZShjYy0+ZXZwKTsK LSAJY2MtPmV2cCA9IE5VTEw7Ci0rCS8qIGlmIG1ldGhfcHRyIGlzbid0IG51bGwgdGhlbiB3ZSBh cmUgdXNpbmcgdGhlIGFlc19jdHJfbXQKLSsJICogZXZwX2NpcGhlcl9tZXRoX25ldygpIGluIGNp cGhlci1jdHItbXQuYyB1bmRlciBPU1NMIDEuMQotKwkgKiBpZiB3ZSBkb24ndCBleHBsaWNpdGx5 IGZyZWUgaXQgdGhlbiwgZXZlbiB0aG91Z2ggd2UgZnJlZQotKwkgKiB0aGUgY3R4IGl0IGlzIGEg cGFydCBvZiBpdCBkb2Vzbid0IGdldCBmcmVlZC4gU28uLi4KLSsJICogY2pyIDIvNy8yMDIzCi0r CSAqLwotKwlpZiAoY2MtPm1ldGhfcHRyICE9IE5VTEwpIHsKLSsJCUVWUF9DSVBIRVJfbWV0aF9m cmVlKCh2b2lkICopKEVWUF9DSVBIRVIgKiljYy0+bWV0aF9wdHIpOwotKwkJY2MtPm1ldGhfcHRy ID0gTlVMTDsKLSsJfQotICNlbmRpZgotIAlmcmVlemVybyhjYywgc2l6ZW9mKCpjYykpOwotIH0K LWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LmMgb3BlbnNz aC0xMC4ycDEvY2lwaGVyLWNoYWNoYXBvbHkuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lw aGVyLWNoYWNoYXBvbHkuYwkyMDI1LTEwLTEwIDA0OjM4OjMxLjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2gtMTAuMnAxL2NpcGhlci1jaGFjaGFwb2x5LmMJMjAyNi0wMy0xOCAxNToxMzoxNy44 NDA4MDYzMjUgKzAxMDAKLUBAIC04OCw3ICs4OCw3IEBACi0gCWlmICghZG9fZW5jcnlwdCkgewot IAkJY29uc3QgdV9jaGFyICp0YWcgPSBzcmMgKyBhYWRsZW4gKyBsZW47Ci0gCi0tCQlwb2x5MTMw NV9hdXRoKGV4cGVjdGVkX3RhZywgc3JjLCBhYWRsZW4gKyBsZW4sIHBvbHlfa2V5KTsKLSsJCXBv bHkxMzA1X2F1dGgoTlVMTCwgZXhwZWN0ZWRfdGFnLCBzcmMsIGFhZGxlbiArIGxlbiwgcG9seV9r ZXkpOwotIAkJaWYgKHRpbWluZ3NhZmVfYmNtcChleHBlY3RlZF90YWcsIHRhZywgUE9MWTEzMDVf VEFHTEVOKSAhPSAwKSB7Ci0gCQkJciA9IFNTSF9FUlJfTUFDX0lOVkFMSUQ7Ci0gCQkJZ290byBv dXQ7Ci1AQCAtMTA4LDcgKzEwOCw3IEBACi0gCi0gCS8qIElmIGVuY3J5cHRpbmcsIGNhbGN1bGF0 ZSBhbmQgYXBwZW5kIHRhZyAqLwotIAlpZiAoZG9fZW5jcnlwdCkgewotLQkJcG9seTEzMDVfYXV0 aChkZXN0ICsgYWFkbGVuICsgbGVuLCBkZXN0LCBhYWRsZW4gKyBsZW4sCi0rCQlwb2x5MTMwNV9h dXRoKE5VTEwsIGRlc3QgKyBhYWRsZW4gKyBsZW4sIGRlc3QsIGFhZGxlbiArIGxlbiwKLSAJCSAg ICBwb2x5X2tleSk7Ci0gCX0KLSAJciA9IDA7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3Jp Zy9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8uYyBvcGVuc3NoLTEwLjJwMS9jaXBoZXItY2hh Y2hhcG9seS1saWJjcnlwdG8uYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLWNoYWNo YXBvbHktbGliY3J5cHRvLmMJMjAyNS0xMC0xMCAwNDozODozMS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NoLTEwLjJwMS9jaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8uYwkyMDI2LTAzLTE4 IDE1OjEzOjE3Ljg0MTE3NzQ0OSArMDEwMAotQEAgLTM0LDggKzM0LDE4IEBACi0gI2luY2x1ZGUg InNzaGVyci5oIgotICNpbmNsdWRlICJjaXBoZXItY2hhY2hhcG9seS5oIgotIAotKwotKy8qIHVz aW5nIHRoZSBFVlBfTUFDIGludGVyZmFjZSBmb3IgcG9seTEzMDUgaXMgc2lnbmlmaWNhbnRseQot KyAqIGZhc3RlciB0aGFuIHRoZSB2ZXJzaW9uIGJ1bmRsZWQgd2l0aCBPcGVuU1NILiBIb3dldmVy LAotKyAqIHRoaXMgaW50ZXJmYWNlIGlzIG9ubHkgYXZhaWxhYmxlIGluIE9wZW5TU0wgMy4wKwot KyAqIC1janIgMTAvMjEvMjAyMiAqLwotIHN0cnVjdCBjaGFjaGFwb2x5X2N0eCB7Ci0gCUVWUF9D SVBIRVJfQ1RYICptYWluX2V2cCwgKmhlYWRlcl9ldnA7Ci0rI2lmZGVmIE9QRU5TU0xfSEFWRV9Q T0xZX0VWUAotKwlFVlBfTUFDX0NUWCAgICAqcG9seV9jdHg7Ci0rI2Vsc2UKLSsJY2hhciAgICAg ICAgICAgKnBvbHlfY3R4OwotKyNlbmRpZgotIH07Ci0gCi0gc3RydWN0IGNoYWNoYXBvbHlfY3R4 ICoKLUBAIC01Niw2ICs2NiwxNSBAQAotIAkJZ290byBmYWlsOwotIAlpZiAoRVZQX0NJUEhFUl9D VFhfaXZfbGVuZ3RoKGN0eC0+aGVhZGVyX2V2cCkgIT0gMTYpCi0gCQlnb3RvIGZhaWw7Ci0rI2lm ZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAotKwlFVlBfTUFDICptYWMgPSBOVUxMOwotKwlpZiAo KG1hYyA9IEVWUF9NQUNfZmV0Y2goTlVMTCwgIlBPTFkxMzA1IiwgTlVMTCkpID09IE5VTEwpCi0r CQlnb3RvIGZhaWw7Ci0rCWlmICgoY3R4LT5wb2x5X2N0eCA9IEVWUF9NQUNfQ1RYX25ldyhtYWMp KSA9PSBOVUxMKQotKwkJZ290byBmYWlsOwotKyNlbHNlCi0rCWN0eC0+cG9seV9jdHggPSBOVUxM OwotKyNlbmRpZgotIAlyZXR1cm4gY3R4OwotICBmYWlsOgotIAljaGFjaGFwb2x5X2ZyZWUoY3R4 KTsKLUBAIC02OSw2ICs4OCw5IEBACi0gCQlyZXR1cm47Ci0gCUVWUF9DSVBIRVJfQ1RYX2ZyZWUo Y3BjdHgtPm1haW5fZXZwKTsKLSAJRVZQX0NJUEhFUl9DVFhfZnJlZShjcGN0eC0+aGVhZGVyX2V2 cCk7Ci0rI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAotKwlFVlBfTUFDX0NUWF9mcmVlKGNw Y3R4LT5wb2x5X2N0eCk7Ci0rI2VuZGlmCi0gCWZyZWV6ZXJvKGNwY3R4LCBzaXplb2YoKmNwY3R4 KSk7Ci0gfQotIAotQEAgLTEwNyw3ICsxMjksNyBAQAotIAlpZiAoIWRvX2VuY3J5cHQpIHsKLSAJ CWNvbnN0IHVfY2hhciAqdGFnID0gc3JjICsgYWFkbGVuICsgbGVuOwotIAotLQkJcG9seTEzMDVf YXV0aChleHBlY3RlZF90YWcsIHNyYywgYWFkbGVuICsgbGVuLCBwb2x5X2tleSk7Ci0rCQlwb2x5 MTMwNV9hdXRoKGN0eC0+cG9seV9jdHgsIGV4cGVjdGVkX3RhZywgc3JjLCBhYWRsZW4gKyBsZW4s IHBvbHlfa2V5KTsKLSAJCWlmICh0aW1pbmdzYWZlX2JjbXAoZXhwZWN0ZWRfdGFnLCB0YWcsIFBP TFkxMzA1X1RBR0xFTikgIT0gMCkgewotIAkJCXIgPSBTU0hfRVJSX01BQ19JTlZBTElEOwotIAkJ CWdvdG8gb3V0OwotQEAgLTEzMyw3ICsxNTUsNyBAQAotIAotIAkvKiBJZiBlbmNyeXB0aW5nLCBj YWxjdWxhdGUgYW5kIGFwcGVuZCB0YWcgKi8KLSAJaWYgKGRvX2VuY3J5cHQpIHsKLS0JCXBvbHkx MzA1X2F1dGgoZGVzdCArIGFhZGxlbiArIGxlbiwgZGVzdCwgYWFkbGVuICsgbGVuLAotKwkJcG9s eTEzMDVfYXV0aChjdHgtPnBvbHlfY3R4LCBkZXN0ICsgYWFkbGVuICsgbGVuLCBkZXN0LCBhYWRs ZW4gKyBsZW4sCi0gCQkgICAgcG9seV9rZXkpOwotIAl9Ci0gCXIgPSAwOwotZGlmZiAtTnVyIG9w ZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmMgb3BlbnNz aC0xMC4ycDEvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmMKLS0tLSBvcGVuc3NoLTEw LjJwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5jCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvY2lwaGVyLWNoYWNoYXBv bHktbGliY3J5cHRvLW10LmMJMjAyNi0wMy0xOCAxNToxMzoxNy44NDE0Mjk3MDQgKzAxMDAKLUBA IC0wLDAgKzEsNjk1IEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgVGhlIEJvYXJkIG9m IFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgotKyAqCi0rICogIEF1dGhv cjogTWl0Y2hlbGwgRG9ycmVsbCA8bXdkQHBzYy5lZHU+Ci0rICogIEF1dGhvcjogQ2hyaXMgUmFw aWVyICA8cmFwaWVyQHBzYy5lZHU+Ci0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotKyAqIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCi0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhP VVQKLSsgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgKgotKyAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIE1JVCBMaWNlbnNlIGFsb25nIHdpdGgg dGhpcyBsaWJyYXJ5OwotKyAqIGlmIG5vdCwgc2VlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl bnNlcy9NSVQuCi0rICoKLSsgKi8KLSsKLSsvKiBUT0RPOiBhdWRpdCBpbmNsdWRlcyAqLwotKwot KyNpbmNsdWRlICJpbmNsdWRlcy5oIgotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsjaW5jbHVkZSAi b3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaCIKLSsjZW5kaWYKLSsKLSsjaWYgZGVmaW5l ZChIQVZFX0VWUF9DSEFDSEEyMCkgJiYgIWRlZmluZWQoSEFWRV9CUk9LRU5fQ0hBQ0hBMjApCi0r Ci0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKyNpbmNsdWRlIDx1bmlzdGQuaD4gLyogbmVlZGVk IGZvciBnZXRwaWQgdW5kZXIgQzk5ICovCi0rI2luY2x1ZGUgPHN0ZGFyZy5oPiAvKiBuZWVkZWQg Zm9yIGxvZy5oICovCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxzdGRpby5oPiAg LyogbmVlZGVkIGZvciBtaXNjLmggKi8KLSsjaW5jbHVkZSA8cHRocmVhZC5oPgotKwotKyNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgotKwotKyNpbmNsdWRlICJkZWZpbmVzLmgiCi0rI2luY2x1ZGUg ImxvZy5oIgotKyNpbmNsdWRlICJzc2hidWYuaCIKLSsjaW5jbHVkZSAic3NoZXJyLmgiCi0rCi0r I2luY2x1ZGUgInhtYWxsb2MuaCIKLSsjaW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBvbHkuaCIKLSsj aW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10LmgiCi0rCi0rI2lmbmRlZiBs aWtlbHkKLSsjIGRlZmluZSBsaWtlbHkoeCkgICBfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAxKQot KyNlbmRpZgotKyNpZm5kZWYgdW5saWtlbHkKLSsjIGRlZmluZSB1bmxpa2VseSh4KSBfX2J1aWx0 aW5fZXhwZWN0KCEhKHgpLCAwKQotKyNlbmRpZgotKwotKy8qIFNpemUgb2Yga2V5c3RyZWFtIHRv IHByZWdlbmVyYXRlLCBtZWFzdXJlZCBpbiBieXRlcwotKyAqIHdlIHdhbnQgdG8gcm91bmQgdXAg dG8gdGhlIG5lYXJlc3QgY2hhY2hhIGJsb2NrIGFuZCBoYXZlCi0rICogMTI4IGJ5dGVzIGZvciBv dmVyaGVhZCAqLwotKyNkZWZpbmUgUk9VTkRfVVAoeCx5KSAoKCgoKHgpLTEpLyh5KSkrMSkqKHkp KQotKyNkZWZpbmUgS0VZU1RSRUFNTEVOIChST1VORF9VUCgoU1NIX0lPQlVGU1opICsgMTI4LCAo Q0hBQ0hBX0JMT0NLTEVOKSkpCi0rCi0rLyogQkVHSU4gVFVOQUJMRVMgKi8KLSsKLSsvKiBOdW1i ZXIgb2Ygd29ya2VyIHRocmVhZHMgdG8gc3Bhd24uICovCi0rLyogdGhlIGdvYWwgaXMgdG8gZW5z dXJlIHRoYXQgbWFpbiBpcyBuZXZlcgotKyAqIHdhaXRpbmcgb24gdGhlIHdvcmtlciB0aHJlYWRz IGZvciBrZXlzdHJlYW0gZGF0YSAqLwotKyNkZWZpbmUgTlVNVEhSRUFEUyAxCi0rCi0rLyogNjQg c2VlbXMgdG8gYmUgYSBwcmV0dHkgYmxhbmNlIGJldHdlZW4gbWVtb3J5IGFuZCBwZXJmb3JtYW5j ZQotKyAqIDEyOCBpcyBhbm90aGVyIG9wdGlvbiB3aXRoIHNvbWV3aGF0IGhpZ2hlciBtZW1vcnkg Y29uc3VtcHRpb24gKi8KLSsjZGVmaW5lIE5VTVNUUkVBTVMgNjQKLSsKLSsvKiBFTkQgVFVOQUJM RVMgKi8KLSsKLStzdHJ1Y3QgbXRfa2V5c3RyZWFtIHsKLSsJdV9jaGFyIHBvbHlfa2V5W1BPTFkx MzA1X0tFWUxFTl07ICAgICAvKiBQT0xZMTMwNV9LRVlMRU4gPT0gMzIgKi8KLSsJdV9jaGFyIGhl YWRlclN0cmVhbVtDSEFDSEFfQkxPQ0tMRU5dOyAvKiBDSEFDSEFfQkxPQ0tMRU4gPT0gNjQgKi8K LSsJdV9jaGFyIG1haW5TdHJlYW1bS0VZU1RSRUFNTEVOXTsgICAgICAvKiBLRVlTVFJFQU1MRU4g PT0gMzI3NjggKi8KLSt9OwotKwotK3N0cnVjdCB0aHJlYWREYXRhIHsKLSsJRVZQX0NJUEhFUl9D VFggKiBtYWluX2V2cDsKLSsJRVZQX0NJUEhFUl9DVFggKiBoZWFkZXJfZXZwOwotKwl1X2NoYXIg c2VxYnVmWzE2XTsKLSt9OwotKwotK3N0cnVjdCBtdF9rZXlzdHJlYW1fYmF0Y2ggewotKwl1X2lu dCBiYXRjaElEOwotKwlzdHJ1Y3QgdGhyZWFkRGF0YSB0ZHNbTlVNVEhSRUFEU107Ci0rCXN0cnVj dCBtdF9rZXlzdHJlYW0gc3RyZWFtc1tOVU1TVFJFQU1TXTsKLSt9OwotKwotK3N0cnVjdCBjaGFj aGFwb2x5X2N0eF9tdCB7Ci0rCXVfaW50IHNlcW5yOwotKwl1X2ludCBiYXRjaElEOwotKwotKwlz dHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNoIGJhdGNoZXNbMl07Ci0rCi0rCXB0aHJlYWRfdCBtYW5h Z2VyX3RpZFsyXTsKLSsJcHRocmVhZF90IHNlbGZfdGlkOwotKwotKwlwaWRfdCBtYWlucGlkOwot Kwl1X2NoYXIgemVyb3NbS0VZU1RSRUFNTEVOXTsgLyogS0VZU1RSRUFNTEVOID09IDMyNzY4ICov Ci0rCi0rICAvKiBpZiBPcGVuU1NMIGhhcyBzdXBwb3J0IGZvciBQb2x5MTMwNSBpbiB0aGUgTUFD IEVWUHMKLSsgICAqIHVzZSB0aGF0IChPU1NMID49IDMuMCkgaWYgbm90IHRoZW4gaXQncyBPU1NM IDEuMSBzbwotKyAgICogdXNlIHRoZSBQb2x5MTMwNSBkaWdlc3QgbWV0aG9kcy4gRmFpbGluZyB0 aGF0IHVzZSB0aGUKLSsgICAqIGludGVybmFsIHBvbHkxMzA1IG1ldGhvZHMgKi8KLSsjaWZkZWYg T1BFTlNTTF9IQVZFX1BPTFlfRVZQCi0rCUVWUF9NQUNfQ1RYICAgICpwb2x5X2N0eDsKLSsjZWxp ZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9QS0VZX1BPTFkxMzA1KQot KwlFVlBfUEtFWV9DVFggICAqcG9seV9jdHg7Ci0rCUVWUF9NRF9DVFggICAgICptZF9jdHg7Ci0r CUVWUF9QS0VZICAgICAgICpwa2V5OwotKwlzaXplX3QgICAgICAgICBwdGFnbGVuOwotKyNlbHNl Ci0rCWNoYXIgICAgICAgICAgICpwb2x5X2N0eDsKLSsjZW5kaWYKLSt9OwotKwotK3N0cnVjdCBt YW5hZ2VyX3RocmVhZF9hcmdzIHsKLSsJc3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICogY3R4X210 OwotKwl1X2ludCBvbGRCYXRjaElEOwotKwlpbnQgcmV0dmFsOwotK307Ci0rCi0rc3RydWN0IHdv cmtlcl90aHJlYWRfYXJncyB7Ci0rCXVfaW50IGJhdGNoSUQ7Ci0rCXN0cnVjdCBtdF9rZXlzdHJl YW1fYmF0Y2ggKiBiYXRjaDsKLSsJaW50IHRocmVhZEluZGV4OwotKwl1X2NoYXIgKiB6ZXJvczsK LSsJaW50IHJldHZhbDsKLSt9OwotKwotKy8qIGdlbmVyYXRlIHRoZSBrZXlzdHJlYW0gYW5kIGhl YWRlcgotKyAqIHdlIHVzZSBudWxscyBmb3IgdGhlICJkYXRhIiAodGhlIHplcm9zIHZhcmlhYmxl KSBpbiBvcmRlciB0bwotKyAqIGdldCB0aGUgcmF3IGtleXN0cmVhbQotKyAqIFJldHVybnMgMCBv biBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlICovCi0raW50Ci0rZ2VuZXJhdGVfa2V5c3RyZWFt KHN0cnVjdCBtdF9rZXlzdHJlYW0gKiBrcywgdV9pbnQgc2VxbnIsCi0rICAgIHN0cnVjdCB0aHJl YWREYXRhICogdGQsIHVfY2hhciAqIHplcm9zKQotK3sKLSsJLyogZ2VuZXJhdGUgcG9seTEzMDUg a2V5ICovCi0rCW1lbXNldCh0ZC0+c2VxYnVmLCAwLCBzaXplb2YodGQtPnNlcWJ1ZikpOwotKwlQ T0tFX1U2NCh0ZC0+c2VxYnVmICsgOCwgc2VxbnIpOwotKwltZW1zZXQoa3MtPnBvbHlfa2V5ICwg MCwgc2l6ZW9mKGtzLT5wb2x5X2tleSkpOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KHRkLT5tYWlu X2V2cCwgTlVMTCwgTlVMTCwgdGQtPnNlcWJ1ZiwgMSkgfHwKLSsJICAgIEVWUF9DaXBoZXIodGQt Pm1haW5fZXZwLCBrcy0+cG9seV9rZXksIGtzLT5wb2x5X2tleSwKLSsJICAgIHNpemVvZihrcy0+ cG9seV9rZXkpKSA8IDApCi0rCQlyZXR1cm4gLTE7Ci0rCi0rCS8qIGdlbmVyYXRlIGhlYWRlciBr ZXlzdHJlYW0gZm9yIGVuY3J5cHRpbmcgcGF5bG9hZCBsZW5ndGggKi8KLSsJaWYgKCFFVlBfQ2lw aGVySW5pdCh0ZC0+aGVhZGVyX2V2cCwgTlVMTCwgTlVMTCwgdGQtPnNlcWJ1ZiwgMSkgfHwKLSsJ ICAgIEVWUF9DaXBoZXIodGQtPmhlYWRlcl9ldnAsIGtzLT5oZWFkZXJTdHJlYW0sIHplcm9zLCBD SEFDSEFfQkxPQ0tMRU4pCi0rCSAgICA8IDAgKQotKwkJcmV0dXJuIC0xOwotKwotKwkvKiBnZW5l cmF0ZSBtYWluIGtleXN0cmVhbSBmb3IgZW5jcnlwdGluZyBwYXlsb2FkICovCi0rCXRkLT5zZXFi dWZbMF0gPSAxOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KHRkLT5tYWluX2V2cCwgTlVMTCwgTlVM TCwgdGQtPnNlcWJ1ZiwgMSkgfHwKLSsJICAgIEVWUF9DaXBoZXIodGQtPm1haW5fZXZwLCBrcy0+ bWFpblN0cmVhbSwgemVyb3MsIEtFWVNUUkVBTUxFTikgPCAwKQotKwkJcmV0dXJuIC0xOwotKwot KwlyZXR1cm4gMDsKLSt9Ci0rCi0rLyogZnJlZSB0aGUgRVZQIGNvbnRleHRzIGFzc29jaWF0ZWQg d2l0aCB0aGUgZ2l2ZSB0aHJlYWQgKi8KLSt2b2lkCi0rZnJlZV90aHJlYWREYXRhKHN0cnVjdCB0 aHJlYWREYXRhICogdGQpCi0rewotKwlpZiAodGQgPT0gTlVMTCkKLSsJCXJldHVybjsKLSsJaWYg KHRkLT5tYWluX2V2cCkgLyogZmFsc2UgaWYgaW5pdGlhbGl6YXRpb24gZGlkbid0IGdldCB0aGlz IGZhciAqLwotKwkJRVZQX0NJUEhFUl9DVFhfZnJlZSh0ZC0+bWFpbl9ldnApOwotKwlpZiAodGQt PmhlYWRlcl9ldnApIC8qIGZhbHNlIGlmIGluaXRpYWxpemF0aW9uIGRpZG4ndCBnZXQgdGhpcyBm YXIgKi8KLSsJCUVWUF9DSVBIRVJfQ1RYX2ZyZWUodGQtPmhlYWRlcl9ldnApOwotKwlleHBsaWNp dF9iemVybyh0ZCwgc2l6ZW9mKCp0ZCkpOwotK30KLSsKLSsvKiBpbml0aWFsaXplIHRoZSBFVlBz IHVzZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQKLSsgICBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQg LTEgb24gZmFpbHVyZSAqLwotK2ludAotK2luaXRpYWxpemVfdGhyZWFkRGF0YShzdHJ1Y3QgdGhy ZWFkRGF0YSAqIHRkLCBjb25zdCB1X2NoYXIgKmtleSkKLSt7Ci0rCW1lbXNldCh0ZCwwLHNpemVv ZigqdGQpKTsKLSsJaWYgKCh0ZC0+bWFpbl9ldnAgPSBFVlBfQ0lQSEVSX0NUWF9uZXcoKSkgPT0g TlVMTCB8fAotKwkgICAgKHRkLT5oZWFkZXJfZXZwID0gRVZQX0NJUEhFUl9DVFhfbmV3KCkpID09 IE5VTEwpCi0rCQlnb3RvIGZhaWw7Ci0rCWlmICghRVZQX0NpcGhlckluaXQodGQtPm1haW5fZXZw LCBFVlBfY2hhY2hhMjAoKSwga2V5LCBOVUxMLCAxKSkKLSsJCWdvdG8gZmFpbDsKLSsJaWYgKCFF VlBfQ2lwaGVySW5pdCh0ZC0+aGVhZGVyX2V2cCwgRVZQX2NoYWNoYTIwKCksIGtleSArIDMyLCBO VUxMLCAxKSkKLSsJCWdvdG8gZmFpbDsKLSsJaWYgKEVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aCh0 ZC0+aGVhZGVyX2V2cCkgIT0gMTYpCi0rCQlnb3RvIGZhaWw7Ci0rCXJldHVybiAwOwotKyBmYWls OgotKwlmcmVlX3RocmVhZERhdGEodGQpOwotKwlyZXR1cm4gLTE7Ci0rfQotKwotK3N0cnVjdCB3 b3JrZXJfdGhyZWFkX2FyZ3MgKgotK3dvcmtlcl90aHJlYWQoc3RydWN0IHdvcmtlcl90aHJlYWRf YXJncyAqIGFyZ3MpCi0rewotKwkvKiBjaGVjayBmaXJzdCAqLwotKwlpZiAoYXJncyA9PSBOVUxM KQotKwkJcmV0dXJuIE5VTEw7Ci0rCWlmIChhcmdzLT5iYXRjaCA9PSBOVUxMIHx8IGFyZ3MtPnpl cm9zID09IE5VTEwpIHsKLSsJCWFyZ3MtPnJldHZhbCA9IDE7Ci0rCQlyZXR1cm4gYXJnczsKLSsJ fQotKwotKwlpbnQgdGhyZWFkSW5kZXggPSBhcmdzLT50aHJlYWRJbmRleDsKLSsJc3RydWN0IHRo cmVhZERhdGEgKiB0ZCA9ICYoYXJncy0+YmF0Y2gtPnRkc1t0aHJlYWRJbmRleF0pOwotKwl1X2lu dCByZWZzZXFuciA9IGFyZ3MtPmJhdGNoSUQgKiBOVU1TVFJFQU1TOwotKwotKwlmb3IgKGludCBp ID0gdGhyZWFkSW5kZXg7IGkgPCBOVU1TVFJFQU1TOyBpICs9IE5VTVRIUkVBRFMpIHsKLSsJCWlm IChnZW5lcmF0ZV9rZXlzdHJlYW0oJihhcmdzLT5iYXRjaC0+c3RyZWFtc1tpXSksIHJlZnNlcW5y ICsgaSwKLSsJCSAgICB0ZCwgYXJncy0+emVyb3MpID09IC0xKSB7Ci0rCQkJYXJncy0+cmV0dmFs ID0gMTsKLSsJCQlyZXR1cm4gYXJnczsKLSsJCX0KLSsJfQotKwotKwlhcmdzLT5yZXR2YWwgPSAw OwotKwlyZXR1cm4gYXJnczsKLSt9Ci0rCi0raW50Ci0ram9pbl9tYW5hZ2VyX3RocmVhZChwdGhy ZWFkX3QgbWFuYWdlcl90aWQpCi0rewotKwlzdHJ1Y3QgbWFuYWdlcl90aHJlYWRfYXJncyAqIGFy Z3M7Ci0rCWlmIChwdGhyZWFkX2pvaW4obWFuYWdlcl90aWQsICh2b2lkICoqKSAmYXJncykgPT0g MCkgewotKwkJaWYgKGFyZ3MgPT0gTlVMTCkgewotKwkJCWRlYnVnX2YoIk1hbmFnZXIgdGhyZWFk IHJldHVybmVkIE5VTEwhIik7Ci0rCQkJcmV0dXJuIDE7Ci0rCQl9IGVsc2UgaWYgKGFyZ3MgPT0g UFRIUkVBRF9DQU5DRUxFRCkgewotKwkJCWRlYnVnX2YoIk1hbmFnZXIgdGhyZWFkIGNhbmNlbGVk ISIpOwotKwkJCXJldHVybiAxOwotKwkJfSBlbHNlIGlmIChhcmdzLT5yZXR2YWwgIT0gMCkgewot KwkJCWRlYnVnX2YoIk1hbmFnZXIgdGhyZWFkIGVycm9yICglZCkiLCBhcmdzLT5yZXR2YWwpOwot KwkJCWZyZWUoYXJncyk7Ci0rCQkJcmV0dXJuIDE7Ci0rCQl9IGVsc2UgewotKwkJCWZyZWUoYXJn cyk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCX0gZWxzZSB7Ci0rCQlkZWJ1Z19mKCJwdGhyZWFk X2pvaW4gZXJyb3IhIik7Ci0rCQlyZXR1cm4gMTsKLSsJfQotK30KLSsKLSt2b2lkCi0rY2hhY2hh cG9seV9mcmVlX210KHN0cnVjdCBjaGFjaGFwb2x5X2N0eF9tdCAqIGN0eF9tdCkKLSt7Ci0rCWlm IChjdHhfbXQgPT0gTlVMTCkKLSsJCXJldHVybjsKLSsKLSsjaWZkZWYgT1BFTlNTTF9IQVZFX1BP TFlfRVZQCi0rCWlmIChjdHhfbXQtPnBvbHlfY3R4ICE9IE5VTEwpIHsKLSsJCUVWUF9NQUNfQ1RY X2ZyZWUoY3R4X210LT5wb2x5X2N0eCk7Ci0rCQljdHhfbXQtPnBvbHlfY3R4ID0gTlVMTDsKLSsJ fQotKyNlbGlmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQoRVZQX1BLRVlfUE9M WTEzMDUpCi0rCWlmIChjdHhfbXQtPm1kX2N0eCAhPSBOVUxMKSB7Ci0rCQlFVlBfTURfQ1RYX2Zy ZWUoY3R4X210LT5tZF9jdHgpOwotKwkJY3R4X210LT5tZF9jdHggPSBOVUxMOwotKwl9Ci0rCWlm IChjdHhfbXQtPnBrZXkgIT0gTlVMTCkgewotKwkJRVZQX1BLRVlfZnJlZShjdHhfbXQtPnBrZXkp OwotKwkJY3R4X210LT5wa2V5ID0gTlVMTDsKLSsJfQotKyNlbmRpZgotKwotKwkvKgotKwkgKiBP bmx5IGNsZWFudXAgdGhlIG1hbmFnZXIgdGhyZWFkcyBpZiB3ZSBhcmUgdGhlIFBJRCB0aGF0IGlu aXRpYWxpemVkCi0rCSAqIHRoZW0hIElmIHdlJ3JlIGEgZm9yaywgdGhlIHRocmVhZHMgZG9uJ3Qg cmVhbGx5IGV4aXN0LgotKwkgKi8KLSsKLSsJaWYgKGdldHBpZCgpID09IGN0eF9tdC0+bWFpbnBp ZCkgewotKwkJaWYgKGN0eF9tdC0+bWFuYWdlcl90aWRbMF0gIT0gY3R4X210LT5zZWxmX3RpZCkg ewotKwkJCWpvaW5fbWFuYWdlcl90aHJlYWQoY3R4X210LT5tYW5hZ2VyX3RpZFswXSk7Ci0rCQkJ Y3R4X210LT5tYW5hZ2VyX3RpZFswXSA9IGN0eF9tdC0+c2VsZl90aWQ7Ci0rCQl9Ci0rCQlpZiAo Y3R4X210LT5tYW5hZ2VyX3RpZFsxXSAhPSBjdHhfbXQtPnNlbGZfdGlkKSB7Ci0rCQkJam9pbl9t YW5hZ2VyX3RocmVhZChjdHhfbXQtPm1hbmFnZXJfdGlkWzFdKTsKLSsJCQljdHhfbXQtPm1hbmFn ZXJfdGlkWzFdID0gY3R4X210LT5zZWxmX3RpZDsKLSsJCX0KLSsJfQotKwotKwkvKiBDbGVhbnVw IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMuICovCi0rCWZvciAoaW50IGk9MDsgaTwyOyBpKyspCi0r CQlmb3IgKGludCBqPTA7IGo8TlVNVEhSRUFEUzsgaisrKQotKwkJCWZyZWVfdGhyZWFkRGF0YSgm KGN0eF9tdC0+YmF0Y2hlc1tpXS50ZHNbal0pKTsKLSsKLSsJLyogWmVybyBhbmQgZnJlZSB0aGUg d2hvbGUgbXVsdGl0aHJlYWRlZCBjaXBoZXIgY29udGV4dC4gKi8KLSsJZnJlZXplcm8oY3R4X210 LCBzaXplb2YoKmN0eF9tdCkpOwotKwotKwlyZXR1cm47Ci0rfQotKwotK3N0cnVjdCBjaGFjaGFw b2x5X2N0eF9tdCAqCi0rY2hhY2hhcG9seV9uZXdfbXQodV9pbnQgc3RhcnRzZXFuciwgY29uc3Qg dV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4pCi0rewotKwlzdHJ1Y3QgY2hhY2hhcG9seV9jdHhf bXQgKiBjdHhfbXQgPSB4bWFsbG9jKHNpemVvZigqY3R4X210KSk7Ci0rCW1lbXNldChjdHhfbXQs IDAsIHNpemVvZigqY3R4X210KSk7Ci0rCS8qIEluaXRpYWxpemUgdGhlIHNlcXVlbmNlIG51bWJl ci4gV2hlbiByZWtleWluZywgdGhpcyB3b24ndCBiZSB6ZXJvLiAqLwotKwljdHhfbXQtPnNlcW5y ID0gc3RhcnRzZXFucjsKLSsJY3R4X210LT5iYXRjaElEID0gc3RhcnRzZXFuciAvIE5VTVNUUkVB TVM7Ci0rCXN0cnVjdCB0aHJlYWREYXRhIG1haW5EYXRhOwotKwlpbnQgdERhdGFJOwotKwlpbnQg Z2VuS1NmYWlsZWQgPSAwOwotKwotKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKLSsJRVZQ X01BQyAqbWFjID0gTlVMTDsKLSsJaWYgKChtYWMgPSBFVlBfTUFDX2ZldGNoKE5VTEwsICJQT0xZ MTMwNSIsIE5VTEwpKSA9PSBOVUxMKQotKwkJZ290byBmYWlsOwotKwlpZiAoKGN0eF9tdC0+cG9s eV9jdHggPSBFVlBfTUFDX0NUWF9uZXcobWFjKSkgPT0gTlVMTCkKLSsJCWdvdG8gZmFpbDsKLSsj ZWxpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9QS0VZX1BPTFkxMzA1 KQotKwlpZiAoKGN0eF9tdC0+bWRfY3R4ID0gRVZQX01EX0NUWF9uZXcoKSkgPT0gTlVMTCkKLSsJ CWdvdG8gZmFpbDsKLSsJaWYgKChjdHhfbXQtPnBrZXkgPSBFVlBfUEtFWV9uZXdfbWFjX2tleShF VlBfUEtFWV9QT0xZMTMwNSwgTlVMTCwKLSsJICAgIGN0eF9tdC0+emVyb3MsIFBPTFkxMzA1X0tF WUxFTikpID09IE5VTEwpCi0rCQlnb3RvIGZhaWw7Ci0rCWlmIChFVlBfRGlnZXN0U2lnbkluaXQo Y3R4X210LT5tZF9jdHgsICZjdHhfbXQtPnBvbHlfY3R4LCBOVUxMLCBOVUxMLAotKwkgICAgY3R4 X210LT5wa2V5KSA9PSAwKQotKwkJZ290byBmYWlsOwotKyNlbHNlCi0rCWN0eF9tdC0+cG9seV9j dHggPSBOVUxMOwotKyNlbmRpZgotKwotKwljdHhfbXQtPmJhdGNoZXNbY3R4X210LT5iYXRjaElE ICUgMl0uYmF0Y2hJRCA9IGN0eF9tdC0+YmF0Y2hJRDsKLSsJY3R4X210LT5iYXRjaGVzWyhjdHhf bXQtPmJhdGNoSUQgKyAxKSAlIDJdLmJhdGNoSUQgPQotKwkgICAgY3R4X210LT5iYXRjaElEICsg MTsKLSsKLSsJLyogaW5pdGlhbGl6ZSBiYXRjaGVzWzBdIHRkcyAqLwotKwlmb3IgKHREYXRhSSA9 IDA7IHREYXRhSSA8IE5VTVRIUkVBRFM7IHREYXRhSSsrKSB7Ci0rCQlpZiAoaW5pdGlhbGl6ZV90 aHJlYWREYXRhKCYoY3R4X210LT5iYXRjaGVzWzBdLnRkc1t0RGF0YUldKSwKLSsJCSAgICBrZXkp ICE9IDApCi0rCQkJYnJlYWs7Ci0rCX0KLSsJaWYgKHREYXRhSSA8IE5VTVRIUkVBRFMpIHsKLSsJ CS8qIEJhY2t0cmFjayBzdGFydGluZyB3aXRoICd0RGF0YUkgLSAxJyAqLwotKwkJZm9yICh0RGF0 YUktLTsgdERhdGFJID49IDA7IHREYXRhSS0tKQotKwkJCWZyZWVfdGhyZWFkRGF0YSgmKGN0eF9t dC0+YmF0Y2hlc1swXS50ZHNbdERhdGFJXSkpOwotKwkJZ290byBmYWlsOwotKwl9Ci0rCS8qIGlu aXRpYWxpemUgYmF0Y2hlc1sxXSB0ZHMgKi8KLSsJZm9yICh0RGF0YUkgPSAwOyB0RGF0YUkgPCBO VU1USFJFQURTOyB0RGF0YUkrKykgewotKwkJaWYgKGluaXRpYWxpemVfdGhyZWFkRGF0YSgmKGN0 eF9tdC0+YmF0Y2hlc1sxXS50ZHNbdERhdGFJXSksCi0rCQkgICAga2V5KSAhPSAwKQotKwkJCWJy ZWFrOwotKwl9Ci0rCWlmICh0RGF0YUkgPCBOVU1USFJFQURTKSB7Ci0rCQkvKiBCYWNrdHJhY2sg c3RhcnRpbmcgd2l0aCAndERhdGFJIC0gMScgKi8KLSsJCWZvciAodERhdGFJLS07IHREYXRhSSA+ PSAwOyB0RGF0YUktLSkKLSsJCQlmcmVlX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbMV0u dGRzW3REYXRhSV0pKTsKLSsJCS8qIEZyZWUgdGhlIGJhdGNoZXNbMF0gdGRzIHRvbyAqLwotKwkJ Zm9yICh0RGF0YUkgPSBOVU1USFJFQURTOyB0RGF0YUkgPj0gMDsgdERhdGFJLS0pCi0rCQkJZnJl ZV90aHJlYWREYXRhKCYoY3R4X210LT5iYXRjaGVzWzBdLnRkc1t0RGF0YUldKSk7Ci0rCQlnb3Rv IGZhaWw7Ci0rCX0KLSsKLSsJaWYgKGluaXRpYWxpemVfdGhyZWFkRGF0YSgmbWFpbkRhdGEsIGtl eSkgIT0gMCkgewotKwkJY2hhY2hhcG9seV9mcmVlX210KGN0eF9tdCk7Ci0rCQlleHBsaWNpdF9i emVybygmc3RhcnRzZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIpKTsKLSsJCXJldHVybiBOVUxMOwot Kwl9Ci0rCi0rCWZvciAoaW50IGk9MDsgaTwyOyBpKyspIHsKLSsJCXVfaW50IHJlZnNlcW5yID0g Y3R4X210LT5iYXRjaGVzW2ldLmJhdGNoSUQgKiBOVU1TVFJFQU1TOwotKwkJZm9yIChpbnQgaiA9 IHN0YXJ0c2VxbnIgPiByZWZzZXFuciA/IHN0YXJ0c2VxbnIgLSByZWZzZXFuciA6IDA7Ci0rCQkg ICAgIGo8TlVNU1RSRUFNUzsgaisrKSB7Ci0rCQkJaWYgKGdlbmVyYXRlX2tleXN0cmVhbSgmKGN0 eF9tdC0+YmF0Y2hlc1tpXS5zdHJlYW1zW2pdKSwKLSsJCQkgICAgcmVmc2VxbnIgKyBqLCAmbWFp bkRhdGEsIGN0eF9tdC0+emVyb3MpID09IC0xKSB7Ci0rCQkJCWRlYnVnX2YoImdlbmVyYXRlX2tl eXN0cmVhbSBmYWlsZWQgaW4gIgotKwkJCQkgICAgImNoYWNoYTIwLXBvbHkxMzA1QGhwbnNzaC5v cmciKTsKLSsJCQkJZ2VuS1NmYWlsZWQgPSAxOwotKwkJCQlicmVhazsgLyogaW1wZXJmZWN0LCBi dXQgaXQgaGVscHMgKi8KLSsJCQl9Ci0rCQl9Ci0rCX0KLSsKLSsJZnJlZV90aHJlYWREYXRhKCZt YWluRGF0YSk7Ci0rCi0rCWlmIChnZW5LU2ZhaWxlZCAhPSAwKSB7Ci0rCQljaGFjaGFwb2x5X2Zy ZWVfbXQoY3R4X210KTsKLSsJCWV4cGxpY2l0X2J6ZXJvKCZzdGFydHNlcW5yLCBzaXplb2Yoc3Rh cnRzZXFucikpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJLyogU3RvcmUgdGhlIFBJRCBz byB0aGF0IGluIHRoZSBmdXR1cmUsIHdlIGNhbiB0ZWxsIGlmIHdlJ3JlIGEgZm9yayAqLwotKwlj dHhfbXQtPm1haW5waWQgPSBnZXRwaWQoKTsKLSsJY3R4X210LT5zZWxmX3RpZCA9IHB0aHJlYWRf c2VsZigpOwotKwljdHhfbXQtPm1hbmFnZXJfdGlkWzBdID0gY3R4X210LT5zZWxmX3RpZDsKLSsJ Y3R4X210LT5tYW5hZ2VyX3RpZFsxXSA9IGN0eF9tdC0+c2VsZl90aWQ7Ci0rCS8qIHdhcyByZXBv cnRpbmcgdGhlIFRJRCB1c2luZyBnZXR0aWQoKSBidXQgaXQncyBub3QgcG9ydGFibGUgKi8KLSsJ ZGVidWcyX2YoIjxtYWluIHRocmVhZDogcGlkPSV1LCBwdGlkPTB4JWx4PiIsIGdldHBpZCgpLCBw dGhyZWFkX3NlbGYoKSk7Ci0rCi0rCS8qIFN1Y2Nlc3MhICovCi0rCWV4cGxpY2l0X2J6ZXJvKCZz dGFydHNlcW5yLCBzaXplb2Yoc3RhcnRzZXFucikpOwotKwlyZXR1cm4gY3R4X210OwotKwotKyBm YWlsOgotKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKLSsJaWYgKGN0eF9tdC0+cG9seV9j dHggIT0gTlVMTCkgewotKwkJRVZQX01BQ19DVFhfZnJlZShjdHhfbXQtPnBvbHlfY3R4KTsKLSsJ CWN0eF9tdC0+cG9seV9jdHggPSBOVUxMOwotKwl9Ci0rI2VsaWYgIWRlZmluZWQoV0lUSF9PUEVO U1NMMykgJiYgZGVmaW5lZChFVlBfUEtFWV9QT0xZMTMwNSkKLSsJaWYgKGN0eF9tdC0+bWRfY3R4 ICE9IE5VTEwpIHsKLSsJCUVWUF9NRF9DVFhfZnJlZShjdHhfbXQtPm1kX2N0eCk7Ci0rCQljdHhf bXQtPm1kX2N0eCA9IE5VTEw7Ci0rCX0KLSsJaWYgKGN0eF9tdC0+cGtleSAhPSBOVUxMKSB7Ci0r CQlFVlBfUEtFWV9mcmVlKGN0eF9tdC0+cGtleSk7Ci0rCQljdHhfbXQtPnBrZXkgPSBOVUxMOwot Kwl9Ci0rI2VuZGlmCi0rCWZyZWV6ZXJvKGN0eF9tdCwgc2l6ZW9mKCpjdHhfbXQpKTsKLSsJZXhw bGljaXRfYnplcm8oJnN0YXJ0c2VxbnIsIHNpemVvZihzdGFydHNlcW5yKSk7Ci0rCXJldHVybiBO VUxMOwotK30KLSsKLSsvKiBhIGZhc3QgbWV0aG9kIHRvIFhPUiB0aGUga2V5c3RyZWFtIGFnYWlu c3QgdGhlIGRhdGEgKi8KLStzdGF0aWMgaW5saW5lIHZvaWQKLStmYXN0WE9SKHVfY2hhciAqZGVz dCwgY29uc3QgdV9jaGFyICpzcmMsIGNvbnN0IHVfY2hhciAqa2V5c3RyZWFtLCB1X2ludCBsZW4p Ci0rewotKwotKwkvKiBYWFg6IHRoaXMgd2FzIF9fdWludDEyOF90IGJ1dCB0aGF0IHdhcyBjYXVz aW5nIHVuYWxpZ25lZCBsb2FkIGVycm9ycy4KLSsJICogdGhpcyB3b3JrcyBidXQgd2UgbmVlZCB0 byBleHBsb3JlIGl0IG1vcmUuICovCi0rCXR5cGVkZWYgdWludDMyX3QgY2h1bms7Ci0rCXNpemVf dCBpOwotKwotKwlmb3IgKGk9MDsgaSA8IChsZW4gLyBzaXplb2YoY2h1bmspKTsgaSsrKQotKwkJ KChjaHVuayAqKWRlc3QpW2ldPSgoY2h1bmsgKilzcmMpW2ldXigoY2h1bmsgKilrZXlzdHJlYW0p W2ldOwotKwlmb3IgKGk9aSooc2l6ZW9mKGNodW5rKSAvIHNpemVvZihjaGFyKSk7IGkgPCBsZW47 IGkrKykKLSsJCWRlc3RbaV09c3JjW2ldXmtleXN0cmVhbVtpXTsKLSt9Ci0rCi0rc3RydWN0IG1h bmFnZXJfdGhyZWFkX2FyZ3MgKgotK21hbmFnZXJfdGhyZWFkKHN0cnVjdCBtYW5hZ2VyX3RocmVh ZF9hcmdzICogbWFyZ3MpIHsKLSsJLyogbWFrZSBzdXJlIHdlIGhhdmUgdmFsaWQgZGF0YSBiZWZv cmUgcHJvY2VlZGluZyAqLwotKwlpZiAobWFyZ3MgPT0gTlVMTCkKLSsJCXJldHVybiBOVUxMOwot KwotKwlzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKiBjdHhfbXQgPSBtYXJncy0+Y3R4X210Owot KwlpZiAoY3R4X210ID09IE5VTEwpIHsKLSsJCW1hcmdzLT5yZXR2YWwgPSAxOwotKwkJcmV0dXJu IG1hcmdzOwotKwl9Ci0rCi0rCXVfaW50IG9sZEJhdGNoSUQgPSBtYXJncy0+b2xkQmF0Y2hJRDsK LSsKLSsJc3RydWN0IG10X2tleXN0cmVhbV9iYXRjaCAqIGJhdGNoID0gJihjdHhfbXQtPmJhdGNo ZXNbb2xkQmF0Y2hJRCAlIDJdKTsKLSsJaWYgKGJhdGNoLT5iYXRjaElEICE9IG9sZEJhdGNoSUQp IHsKLSsJCWRlYnVnX2YoIlBvc3QtY3J5cHQgYmF0Y2ggbWlzcyEgU2Vla2luZyAldSwgZm91bmQg JXUuIEZhaWxpbmcuIiwKLSsJCSAgICBvbGRCYXRjaElELCBiYXRjaC0+YmF0Y2hJRCk7Ci0rCQlt YXJncy0+cmV0dmFsID0gMTsKLSsJCXJldHVybiBtYXJnczsKLSsJfQotKwotKwltYXJncy0+cmV0 dmFsID0gMDsKLSsJdV9pbnQgYmF0Y2hJRCA9IG9sZEJhdGNoSUQgKyAyOwotKwotKwlwdGhyZWFk X3QgdGlkW05VTVRIUkVBRFNdOwotKwlzdHJ1Y3Qgd29ya2VyX3RocmVhZF9hcmdzICogd2FyZ3Mg PSBtYWxsb2MoTlVNVEhSRUFEUyAqIHNpemVvZigqd2FyZ3MpKTsKLSsJaW50IHRpOwotKwotKwlm b3IgKHRpID0gMDsgdGkgPCBOVU1USFJFQURTOyB0aSsrKSB7Ci0rCQl3YXJnc1t0aV0uYmF0Y2hJ RCA9IGJhdGNoSUQ7Ci0rCQl3YXJnc1t0aV0uYmF0Y2ggPSBiYXRjaDsKLSsJCXdhcmdzW3RpXS50 aHJlYWRJbmRleCA9IHRpOwotKwkJd2FyZ3NbdGldLnplcm9zID0gY3R4X210LT56ZXJvczsKLSsJ CWlmIChwdGhyZWFkX2NyZWF0ZSgmKHRpZFt0aV0pLCBOVUxMLCAodm9pZCAqKSB3b3JrZXJfdGhy ZWFkLAotKwkJICAgICYod2FyZ3NbdGldKSkgIT0gMCkgewotKwkJCW1hcmdzLT5yZXR2YWwgPSAx OwotKwkJCWJyZWFrOwotKwkJfQotKwl9Ci0rCWZvciAoOyB0aSA8IE5VTVRIUkVBRFM7IHRpKysp IC8qIGZvciBlcnJvciBjb25kaXRpb24gKi8KLSsJCXRpZFt0aV0gPSBwdGhyZWFkX3NlbGYoKTsK LSsKLSsJc3RydWN0IHdvcmtlcl90aHJlYWRfYXJncyAqIHJldHdhcmdzOwotKwotKwlmb3IgKHRp ID0gMDsgdGkgPCBOVU1USFJFQURTOyB0aSsrKSB7Ci0rCQlpZiAodGlkW3RpXSA9PSBwdGhyZWFk X3NlbGYoKSkgewotKwkJCW1hcmdzLT5yZXR2YWwgPSAxOyAvKiByZWR1bmRhbnQsIGJ1dCBoYXJt bGVzcyAqLwotKwkJCWNvbnRpbnVlOwotKwkJfQotKwkJaWYgKHB0aHJlYWRfam9pbih0aWRbdGld LCAodm9pZCAqKikgJnJldHdhcmdzKSA9PSAwKSB7Ci0rCQkJaWYgKHJldHdhcmdzID09IE5VTEwp IHsKLSsJCQkJZGVidWdfZigiV29ya2VyIHRocmVhZCByZXR1cm5lZCBOVUxMISIpOwotKwkJCQlt YXJncy0+cmV0dmFsID0gMTsKLSsJCQl9IGVsc2UgaWYgKHJldHdhcmdzID09IFBUSFJFQURfQ0FO Q0VMRUQpIHsKLSsJCQkJZGVidWdfZigiV29ya2VyIHRocmVhZCBjYW5jZWxlZCEiKTsKLSsJCQkJ bWFyZ3MtPnJldHZhbCA9IDE7Ci0rCQkJfSBlbHNlIHsKLSsJCQkJaWYgKHJldHdhcmdzLT5yZXR2 YWwgIT0gMCkgewotKwkJCQkJZGVidWdfZigiV29ya2VyIHRocmVhZCBlcnJvciAoJWQpIiwKLSsJ CQkJCSAgICByZXR3YXJncy0+cmV0dmFsKTsKLSsJCQkJCW1hcmdzLT5yZXR2YWwgPSAxOwotKwkJ CQl9Ci0rCQkJCWlmIChyZXR3YXJncyAhPSAmKHdhcmdzW3RpXSkpIHsKLSsJCQkJCWRlYnVnX2Yo IldvcmtlciB0aHJlYWQgZGlkbid0IHJldHVybiAiCi0rCQkJCQkgICAgImV4cGVjdGVkIHN0cnVj dHVyZSEiKTsKLSsJCQkJCW1hcmdzLT5yZXR2YWwgPSAxOwotKwkJCQl9Ci0rCQkJfQotKwkJfSBl bHNlIHsKLSsJCQlkZWJ1Z19mKCJwdGhyZWFkX2pvaW4gZXJyb3IhIik7Ci0rCQkJbWFyZ3MtPnJl dHZhbCA9IDE7Ci0rCQl9Ci0rCX0KLSsJZnJlZSh3YXJncyk7Ci0rCi0rCWlmIChtYXJncy0+cmV0 dmFsID09IDApIHsKLSsJCWJhdGNoLT5iYXRjaElEID0gYmF0Y2hJRDsKLSsJfQotKwotKwlyZXR1 cm4gbWFyZ3M7Ci0rfQotKwotK2ludAotK2NoYWNoYXBvbHlfY3J5cHRfbXQoc3RydWN0IGNoYWNo YXBvbHlfY3R4X210ICpjdHhfbXQsIHVfaW50IHNlcW5yLCB1X2NoYXIgKmRlc3QsCi0rICAgIGNv bnN0IHVfY2hhciAqc3JjLCB1X2ludCBsZW4sIHVfaW50IGFhZGxlbiwgdV9pbnQgYXV0aGxlbiwg aW50IGRvX2VuY3J5cHQpCi0rewotKyNpZmRlZiBTQUZFVFkKLSsJaWYgKGN0eF9tdC0+bWFpbnBp ZCAhPSBnZXRwaWQoKSkgeyAvKiB3ZSdyZSBhIGZvcmsgKi8KLSsJCS8qCi0rCQkgKiBUT0RPOiB0 aGlzIGlzIEVYVFJFTUVMWSBSQVJFLCBtYXkgbmV2ZXIgaGFwcGVuIGF0IGFsbCAob25seQotKwkJ ICogaWYgdGhlIGZvcmsgY2FsbHMgY3J5cHQpLCBzbyB3ZSBzaG91bGQgdGVsbCB0aGUgY29tcGls ZXIuCi0rCQkgKi8KLSsJCS8qIFRoZSB3b3JrZXIgdGhyZWFkcyBkb24ndCBleGlzdCwgd2UgY291 bGQgc3Bhd24gdGhlbT8gKi8KLSsJCWRlYnVnX2YoIkZvcmsgY2FsbGVkIGNyeXB0IHdpdGhvdXQg d29ya2VycyEiKTsKLSsJCWNoYWNoYXBvbHlfZnJlZV9tdChjdHhfbXQpOwotKwkJcmV0dXJuIFNT SF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCX0KLSsjZW5kaWYKLSsKLSsJcHRocmVhZF90ICogbWFu YWdlcl90aWQgPSAmKGN0eF9tdC0+bWFuYWdlcl90aWRbY3R4X210LT5iYXRjaElEICUgMl0pOwot KwlpZiAodW5saWtlbHkoKm1hbmFnZXJfdGlkICE9IGN0eF9tdC0+c2VsZl90aWQpKSB7Ci0rCQlp bnQgcmV0ID0gam9pbl9tYW5hZ2VyX3RocmVhZCgqbWFuYWdlcl90aWQpOwotKwkJKm1hbmFnZXJf dGlkID0gY3R4X210LT5zZWxmX3RpZDsKLSsJCWlmIChyZXQgIT0gMCkKLSsJCQlyZXR1cm4gU1NI X0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJfQotKwotKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNo ICogYmF0Y2ggPQotKwkgICAgJihjdHhfbXQtPmJhdGNoZXNbY3R4X210LT5iYXRjaElEICUgMl0p OwotKwotKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtICoga3MgPSAmKGJhdGNoLT5zdHJlYW1zW3NlcW5y ICUgTlVNU1RSRUFNU10pOwotKwotKwlpbnQgciA9IFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0r Ci0rI2lmZGVmIFNBRkVUWQotKwlpZiAoYmF0Y2gtPmJhdGNoSUQgPT0gY3R4X210LT5iYXRjaElE KSB7IC8qIFNhZmV0eSBjaGVjayAqLwotKyNlbmRpZgotKwkJLyogY2hlY2sgdGFnIGJlZm9yZSBh bnl0aGluZyBlbHNlICovCi0rCQlpZiAoIWRvX2VuY3J5cHQpIHsKLSsJCQljb25zdCB1X2NoYXIg KnRhZyA9IHNyYyArIGFhZGxlbiArIGxlbjsKLSsJCQl1X2NoYXIgZXhwZWN0ZWRfdGFnW1BPTFkx MzA1X1RBR0xFTl07Ci0rI2lmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQoRVZQ X1BLRVlfUE9MWTEzMDUpCi0rCQkJaWYgKChFVlBfUEtFWV9DVFhfY3RybChjdHhfbXQtPnBvbHlf Y3R4LCAtMSwKLSsJCQkgICAgRVZQX1BLRVlfT1BfU0lHTkNUWCwgRVZQX1BLRVlfQ1RSTF9TRVRf TUFDX0tFWSwKLSsJCQkgICAgUE9MWTEzMDVfS0VZTEVOLCBrcy0+cG9seV9rZXkpIDw9IDApIHx8 Ci0rCQkJICAgIChFVlBfRGlnZXN0U2lnblVwZGF0ZShjdHhfbXQtPm1kX2N0eCwgc3JjLCBhYWRs ZW4gKyBsZW4pID09IDApKSB7Ci0rCQkJCWRlYnVnX2YoIlNTTCBlcnJvciB3aGlsZSBkZWNyeXB0 aW5nIHBvbHkxMzA1IHRhZyIpOwotKwkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsK LSsJCQl9Ci0rCQkJY3R4X210LT5wdGFnbGVuID0gUE9MWTEzMDVfVEFHTEVOOwotKwkJCWlmIChF VlBfRGlnZXN0U2lnbkZpbmFsKGN0eF9tdC0+bWRfY3R4LCBleHBlY3RlZF90YWcsCi0rCQkJICAg ICZjdHhfbXQtPnB0YWdsZW4pID09IDApIHsKLSsJCQkJZGVidWdfZigiU1NMIGVycm9yIHdoaWxl IGZpbmFsaXppbmcgZGVjeXJwdGVkIHBvbHkxMzA1Iik7Ci0rCQkJCXJldHVybiBTU0hfRVJSX0lO VEVSTkFMX0VSUk9SOwotKwkJCX0KLSsjZWxzZQotKwkJCXBvbHkxMzA1X2F1dGgoY3R4X210LT5w b2x5X2N0eCwgZXhwZWN0ZWRfdGFnLCBzcmMsCi0rCQkJICAgIGFhZGxlbiArIGxlbiwga3MtPnBv bHlfa2V5KTsKLSsjZW5kaWYKLSsJCQlpZiAodGltaW5nc2FmZV9iY21wKGV4cGVjdGVkX3RhZywg dGFnLCBQT0xZMTMwNV9UQUdMRU4pCi0rCQkJICAgICE9IDApCi0rCQkJCXIgPSBTU0hfRVJSX01B Q19JTlZBTElEOwotKwkJCWV4cGxpY2l0X2J6ZXJvKGV4cGVjdGVkX3RhZywgc2l6ZW9mKGV4cGVj dGVkX3RhZykpOwotKwkJfQotKwkJaWYgKHIgIT0gU1NIX0VSUl9NQUNfSU5WQUxJRCkgewotKwkJ CS8qIENyeXB0IGFkZGl0aW9uYWwgZGF0YSAoaS5lLiwgcGFja2V0IGxlbmd0aCkgKi8KLSsJCQkv KiBUT0RPOiBpcyBhYWRsZW4gYWx3YXlzIGZvdXIgYnl0ZXM/ICovCi0rCQkJLyogVE9ETzogZG8g d2UgYWx3YXlzIGhhdmUgYW4gYWFkbGVuPyAqLwotKwkJCWlmIChhYWRsZW4pCi0rCQkJCWZvciAo dV9pbnQgaT0wOyBpPGFhZGxlbjsgaSsrKQotKwkJCQkJZGVzdFtpXSA9IGtzLT5oZWFkZXJTdHJl YW1baV0gXiBzcmNbaV07Ci0rCQkJLyogQ3J5cHQgcGF5bG9hZCAqLwotKwkJCWZhc3RYT1IoZGVz dCthYWRsZW4sc3JjK2FhZGxlbixrcy0+bWFpblN0cmVhbSxsZW4pOwotKwkJCS8qIGNhbGN1bGF0 ZSBhbmQgYXBwZW5kIHRhZyAqLwotKyNpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZp bmVkKEVWUF9QS0VZX1BPTFkxMzA1KQotKwkJCWlmIChkb19lbmNyeXB0KSB7Ci0rCQkJCWlmICgo RVZQX1BLRVlfQ1RYX2N0cmwoY3R4X210LT5wb2x5X2N0eCwgLTEsCi0rCQkJCSAgICBFVlBfUEtF WV9PUF9TSUdOQ1RYLCBFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZLAotKwkJCQkgICAgUE9MWTEz MDVfS0VZTEVOLCBrcy0+cG9seV9rZXkpIDw9MCkgfHwKLSsJCQkJICAgIChFVlBfRGlnZXN0U2ln blVwZGF0ZShjdHhfbXQtPm1kX2N0eCwgZGVzdCwgYWFkbGVuICsgbGVuKSA9PSAwKSkgewotKwkJ CQkJZGVidWdfZiAoIlNTTCBlcnJvciB3aGlsZSBlbmNyeXB0aW5nIHBvbHkxMzA1IHRhZyIpOwot KwkJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0rCQkJCX0KLSsJCQkJY3R4X210 LT5wdGFnbGVuID0gUE9MWTEzMDVfVEFHTEVOOwotKwkJCQlpZiAoRVZQX0RpZ2VzdFNpZ25GaW5h bChjdHhfbXQtPm1kX2N0eCwgZGVzdCthYWRsZW4rbGVuLAotKwkJCQkgICAgJmN0eF9tdC0+cHRh Z2xlbikgPT0gMCkgewotKwkJCQkJZGVidWdfZigiU1NMIGVycm9yIHdoaWxlIGZpbmFsaXppbmcg ZGVjeXJwdGVkIHBvbHkxMzA1Iik7Ci0rCQkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJP UjsKLSsJCQkJfQotKwkJCX0KLSsjZWxzZQotKwkJCWlmIChkb19lbmNyeXB0KQotKwkJCQlwb2x5 MTMwNV9hdXRoKGN0eF9tdC0+cG9seV9jdHgsIGRlc3QrYWFkbGVuK2xlbiwKLSsJCQkJICAgIGRl c3QsIGFhZGxlbitsZW4sIGtzLT5wb2x5X2tleSk7Ci0rI2VuZGlmCi0rCQkJcj0wOyAvKiBTdWNj ZXNzISAqLwotKwkJfQotKwkJaWYgKHIpIC8qIEFueXRoaW5nIG5vbnplcm8gaXMgYW4gZXJyb3Iu ICovCi0rCQkJcmV0dXJuIHI7Ci0rCi0rCQljdHhfbXQtPnNlcW5yID0gc2VxbnIgKyAxOwotKwot KwkJaWYgKHVubGlrZWx5KGN0eF9tdC0+c2VxbnIgLyBOVU1TVFJFQU1TID4gY3R4X210LT5iYXRj aElEKSkgewotKwkJCXN0cnVjdCBtYW5hZ2VyX3RocmVhZF9hcmdzICogYXJncyA9Ci0rCQkJICAg IG1hbGxvYyhzaXplb2YoKmFyZ3MpKTsKLSsJCQlpZiAoYXJncyA9PSBOVUxMKSB7Ci0rCQkJCXJl dHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwkJCX0KLSsJCQlhcmdzLT5jdHhfbXQgPSBj dHhfbXQ7Ci0rCQkJYXJncy0+b2xkQmF0Y2hJRCA9IGN0eF9tdC0+YmF0Y2hJRDsKLSsJCQlpZiAo cHRocmVhZF9jcmVhdGUoJihjdHhfbXQtPm1hbmFnZXJfdGlkW2N0eF9tdC0+YmF0Y2hJRAotKwkJ CSAgICAlIDJdKSwgTlVMTCwgKHZvaWQgKikgbWFuYWdlcl90aHJlYWQsIGFyZ3MpICE9IDApIHsK LSsJCQkJZnJlZShhcmdzKTsKLSsJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7Ci0r CQkJfQotKwkJCWN0eF9tdC0+YmF0Y2hJRCA9IGN0eF9tdC0+c2VxbnIgLyBOVU1TVFJFQU1TOwot KwkJfQotKwotKwkJLyogVE9ETzogTm90aGluZyB3ZSBuZWVkIHRvIHNhbml0aXplIGhlcmU/ICov Ci0rCi0rCQlyZXR1cm4gMDsKLSsjaWZkZWYgU0FGRVRZCi0rCX0gZWxzZSB7IC8qIEJhZCwgaXQn cyB0aGUgd3JvbmcgYmF0Y2guICovCi0rCQlkZWJ1Z19mKCAiUHJlLWNyeXB0IGJhdGNoIG1pc3Mh IFNlZWtpbmcgJXUsIGZvdW5kICV1LiBGYWlsaW5nLiIsCi0rCQkgICAgY3R4X210LT5iYXRjaElE LCBiYXRjaC0+YmF0Y2hJRCk7Ci0rCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJ fQotKyNlbmRpZgotK30KLSsKLStpbnQKLStjaGFjaGFwb2x5X2dldF9sZW5ndGhfbXQoc3RydWN0 IGNoYWNoYXBvbHlfY3R4X210ICpjdHhfbXQsIHVfaW50ICpwbGVucCwKLSsgICAgdV9pbnQgc2Vx bnIsIGNvbnN0IHVfY2hhciAqY3AsIHVfaW50IGxlbikKLSt7Ci0rCS8qIFRPRE86IGFkZCBjb21w aWxlciBoaW50cyAqLwotKyNpZmRlZiBTQUZFVFkKLSsJaWYgKGN0eF9tdC0+bWFpbnBpZCAhPSBn ZXRwaWQoKSkgeyAvKiBVc2Ugc2VyaWFsIG1vZGUgaWYgd2UncmUgYSBmb3JrICovCi0rCQlkZWJ1 Z19mKCJXZSdyZSBhIGZvcmsuIEZhaWxpbmcuIik7Ci0rCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5B TF9FUlJPUjsKLSsJfQotKyNlbmRpZgotKwotKwlpZiAobGVuIDwgNCkKLSsJCXJldHVybiBTU0hf RVJSX01FU1NBR0VfSU5DT01QTEVURTsKLSsKLSsJcHRocmVhZF90ICogbWFuYWdlcl90aWQgPSAm KGN0eF9tdC0+bWFuYWdlcl90aWRbY3R4X210LT5iYXRjaElEICUgMl0pOwotKwlpZiAodW5saWtl bHkoKm1hbmFnZXJfdGlkICE9IGN0eF9tdC0+c2VsZl90aWQpKSB7Ci0rCQlpbnQgcmV0ID0gam9p bl9tYW5hZ2VyX3RocmVhZCgqbWFuYWdlcl90aWQpOwotKwkJKm1hbmFnZXJfdGlkID0gY3R4X210 LT5zZWxmX3RpZDsKLSsJCWlmIChyZXQgIT0gMCkKLSsJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5B TF9FUlJPUjsKLSsJfQotKwotKwl1X2NoYXIgYnVmWzRdOwotKyNpZmRlZiBTQUZFVFkKLSsJdV9p bnQgc291Z2h0X2JhdGNoSUQgPSBzZXFuciAvIE5VTVNUUkVBTVM7Ci0rI2VuZGlmCi0rCXN0cnVj dCBtdF9rZXlzdHJlYW1fYmF0Y2ggKiBiYXRjaCA9Ci0rCSAgICAmKGN0eF9tdC0+YmF0Y2hlc1tj dHhfbXQtPmJhdGNoSUQgJSAyXSk7Ci0rCXN0cnVjdCBtdF9rZXlzdHJlYW0gKiBrcyA9ICYoYmF0 Y2gtPnN0cmVhbXNbc2VxbnIgJSBOVU1TVFJFQU1TXSk7Ci0rI2lmZGVmIFNBRkVUWQotKwlpZiAo YmF0Y2gtPmJhdGNoSUQgPT0gc291Z2h0X2JhdGNoSUQpIHsKLSsjZW5kaWYKLSsJCWZvciAodV9p bnQgaT0wOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykKLSsJCQlidWZbaV09a3MtPmhlYWRlclN0cmVh bVtpXSBeIGNwW2ldOwotKwkJKnBsZW5wID0gUEVFS19VMzIoYnVmKTsKLSsJCXJldHVybiAwOwot KyNpZmRlZiBTQUZFVFkKLSsJfSBlbHNlIHsKLSsJCWRlYnVnX2YoIkJhdGNoIG1pc3MhIFNlZWtp bmcgJXUsIGZvdW5kICV1LiBGYWlsaW5nLiIsCi0rCQkgICAgc291Z2h0X2JhdGNoSUQsIGJhdGNo LT5iYXRjaElEKTsKLSsJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotKwl9Ci0rI2Vu ZGlmCi0rfQotKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfRVZQX0NIQUNIQTIwKSAmJiAhZGVmaW5l ZChIQVZFX0JST0tFTl9DSEFDSEEyMCkgKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmln L2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5oIG9wZW5zc2gtMTAuMnAxL2NpcGhlci1j aGFjaGFwb2x5LWxpYmNyeXB0by1tdC5oCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9jaXBoZXIt Y2hhY2hhcG9seS1saWJjcnlwdG8tbXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5o CTIwMjYtMDMtMTggMTU6MTM6MTcuODQxNTQwMTEwICswMTAwCi1AQCAtMCwwICsxLDQ1IEBACi0r LyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5l Z2llIE1lbGxvbiBVbml2ZXJzaXR5LgotKyAqCi0rICogIEF1dGhvcjogTWl0Y2hlbGwgRG9ycmVs bCA8bXdkQHBzYy5lZHU+Ci0rICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyICA8cmFwaWVyQHBzYy5l ZHU+Ci0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg TUlUIExpY2Vuc2UuCi0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSsgKiBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg b3IKLSsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgKgotKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OwotKyAq IGlmIG5vdCwgc2VlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCi0rICoKLSsg Ki8KLSsKLSsjaWZuZGVmIENIQUNIQV9QT0xZX0xJQkNSWVBUT19NVF9ICi0rI2RlZmluZSBDSEFD SEFfUE9MWV9MSUJDUllQVE9fTVRfSAotKwotKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjaW5j bHVkZSAiY2hhY2hhLmgiCi0rI2luY2x1ZGUgInBvbHkxMzA1LmgiCi0rCi0rI2lmbmRlZiBDSEFD SEFfS0VZTEVOCi0rI2RlZmluZSBDSEFDSEFfS0VZTEVOCTMyIC8qIE9ubHkgMjU2IGJpdCBrZXlz IHVzZWQgaGVyZSAqLwotKyNlbmRpZgotKwotK3N0cnVjdCBjaGFjaGFwb2x5X2N0eF9tdDsgLyog ZGVmaW5lZCBpbiBjaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuYyAqLwotKwotK3N0cnVj dCBjaGFjaGFwb2x5X2N0eF9tdCAqY2hhY2hhcG9seV9uZXdfbXQodV9pbnQgc3RhcnRzZXFuciwg Y29uc3QgdV9jaGFyICprZXksIHVfaW50IGtleWxlbikKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9fKF9fYnVmZmVy X18sIDIsIDMpKSk7Ci0rCi0rdm9pZCAgIGNoYWNoYXBvbHlfZnJlZV9tdChzdHJ1Y3QgY2hhY2hh cG9seV9jdHhfbXQgKmNwY3R4KTsKLSsKLStpbnQgICAgY2hhY2hhcG9seV9jcnlwdF9tdChzdHJ1 Y3QgY2hhY2hhcG9seV9jdHhfbXQgKmNwY3R4LCB1X2ludCBzZXFuciwKLSsJCQkgICB1X2NoYXIg KmRlc3QsIGNvbnN0IHVfY2hhciAqc3JjLCB1X2ludCBsZW4sIHVfaW50IGFhZGxlbiwKLSsJCQkg ICB1X2ludCBhdXRobGVuLCBpbnQgZG9fZW5jcnlwdCk7Ci0rCi0raW50ICAgIGNoYWNoYXBvbHlf Z2V0X2xlbmd0aF9tdChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKmNwY3R4LAotKwkJCQl1X2lu dCAqcGxlbnAsIHVfaW50IHNlcW5yLCBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCBsZW4pCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhf X2J1ZmZlcl9fLCA0LCA1KSkpOwotKwotKyNlbmRpZiAvKiBDSEFDSEFfUE9MWV9MSUJDUllQVE9f TVRfSCAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLWN0ci1tdC5jIG9w ZW5zc2gtMTAuMnAxL2NpcGhlci1jdHItbXQuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lw aGVyLWN0ci1tdC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzaC0xMC4ycDEvY2lwaGVyLWN0ci1tdC5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODQxNjkyNjQ0 ICswMTAwCi1AQCAtMCwwICsxLDY4MSBAQAotKy8qCi0rICogT3BlblNTSCBNdWx0aS10aHJlYWRl ZCBBRVMtQ1RSIENpcGhlcgotKyAqCi0rICogQXV0aG9yOiBCZW5qYW1pbiBCZW5uZXR0IDxiZW5A cHNjLmVkdT4KLSsgKiBBdXRob3I6IE1pa2UgVGFzb3RhIDx0YXNvdGFAZ21haWwuY29tPgotKyAq IEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDgtMjAyMSBQaXR0c2J1cmdoIFN1cGVyY29tcHV0aW5nIENlbnRlci4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIEJhc2VkIG9uIG9yaWdpbmFsIE9wZW5TU0ggQUVTLUNUUiBjaXBo ZXIuIFNtYWxsIHBvcnRpb25zIHJlbWFpbiB1bmNoYW5nZWQsCi0rICogQ29weXJpZ2h0IChjKSAy MDAzIE1hcmt1cyBGcmllZGwgPG1hcmt1c0BvcGVuYnNkLm9yZz4KLSsgKgotKyAqIFBlcm1pc3Np b24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9y IGFueQotKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwg cHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSsgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotKyAqCi0rICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJS QU5USUVTCi0rICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElN UExJRUQgV0FSUkFOVElFUyBPRgotKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0rICogQU5ZIFNQRUNJQUws IERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdF UwotKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJP RklUUywgV0hFVEhFUiBJTiBBTgotKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBP UiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0rICogT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSsgKi8K LSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsKLSsjaWYgZGVmaW5lZChXSVRIX09QRU5TU0wpICYm ICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpCi0rI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKwotKyNp bmNsdWRlIDxzdGRhcmcuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZXZwLmg+Ci0rCi0rI2luY2x1ZGUgInhtYWxsb2MuaCIKLSsjaW5jbHVkZSAibG9nLmgi Ci0rI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlICJ1dGhhc2guaCIKLSsKLSsvKiBjb21w YXRpYmlsaXR5IHdpdGggb2xkIG9yIGJyb2tlbiBPcGVuU1NMIHZlcnNpb25zICovCi0rI2luY2x1 ZGUgIm9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmgiCi0rCi0rI2lmbmRlZiBVU0VfQlVJ TFRJTl9SSUpOREFFTAotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNlbmRpZgotKwotKyNp bmNsdWRlIDxwdGhyZWFkLmg+Ci0rCi0rI2lmZGVmIF9fQVBQTEVfXwotKyNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KLSsjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotKyNlbmRpZgotKwotKy8qIG5vdGUg cmVnYXJkaW5nIHRocmVhZHMgYW5kIHF1ZXVlcyAqLwotKy8qIGluaXRpYWxseSB0aGlzIGNpcGhl ciB3YXMgd3JpdHRlbiBpbiBhIHdheSB0aGF0Ci0rICogdGhlIGtleSBzdHJlYW0gd2FzIGdlbmVy YXRlZCBpbiBhIHBlciBjaXBoZXIgYmxvY2sKLSsgKiBsb29wLiBGb3IgZXhhbXBsZSwgaWYgdGhl IGtleSBzdHJlYW0gcXVldWUgbGVuZ3RoIHdhcwotKyAqIDE2ayBhbmQgdGhlIGNpcGhlciBibG9j ayBzaXplIHdhcyAxNiBieXRlcyBpdCB3b3VsZAotKyAqIGZpbGwgdGhlIHF1ZXVlIDE2IGJ5dGVz IGF0IGEgdGltZS4gTWl0Y2ggRG9ycmVsbCBwb2ludGVkCi0rICogb3V0IHRoYXQgd2UgY291bGQg ZmlsbCB0aGUgcXVldWUgaW4gb25jZSBjYWxsIGVsaW1pbmF0aW5nCi0rICogbG9vcCBhbmQgbXVs dGlwbGUgY2FsbHMgdG8gRVZQX0VuY3J5cHRVcGRhdGUuIERvaW5nIHNvCi0rICogZHJhbWF0aWNh bGx5IHJlZHVjZWQgQ1BVIGxvYWQgaW4gdGhlIHRocmVhZHMgYW5kIGluZGljYXRlZAotKyAqIHRo YXQgd2UgY291bGQgYWxzbyBlbGltaW5hdGUgbW9zdCBvZiB0aGUgdGhyZWFkcyBhbmQgcXVldWVz Ci0rICogYXMgaXQgd291bGQgdGFrZSBmYXIgbGVzcyB0aW1lIGZvciBhIHF1ZXVlIHRvIGVidGVy IEtRX0ZVTEwKLSsgKiBzdGF0ZS4gQXMgc3VjaCwgd2UndmUgcmVkdWNlZCB0aGUgZGVmYXVsdCBu dW1iZXIgb2YgdGhyZWFkcwotKyAqIGFuZCBxdWV1ZXMgZnJvbSAyIGFuZCA4IChyZXNwZWN0aXZl bHkpIHRvIDEgYW5kIDIuIFdlJ3ZlIGFsc28KLSsgKiBlbGltbmF0ZWQgdGhlIG5lZWQgdG8gZGV0 ZXJtaW5lIHRoZSBwaHlzaWNhbCBudW1iZXIgb2YgY29yZXMgb24KLSsgKiB0aGUgc3lzdGVtIGFu ZCwgaWYgdGhlIHVzZXIgZGVzaXJlcywgY2FuIHNwaW4gdXAgbW9yZSB0aHJlYWRzCi0rICogdXNp bmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIEFkZGl0aW9uYWxseSwgcXVldWVzIGlzIG5vdyBm aXhlZAotKyAqIGF0IHRocmVhZF9jb3VudCArIDEuCi0rICogY2pyIDEwLzE5LzIwMjIgKi8KLSsK LSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K LSsvKiBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIGFuZCBxdWV1ZXMgKi8KLSsjZGVmaW5lIE1B WF9USFJFQURTICAgICAgNAotKyNkZWZpbmUgTUFYX05VTUtRICAgICAgICAoTUFYX1RIUkVBRFMg KyAxKQotKwotKy8qIE51bWJlciBvZiBwcmVnZW4gdGhyZWFkcyB0byB1c2UgKi8KLSsvKiB0aGlz IGlzIGEgZGVmYXVsdCB2YWx1ZS4gVGhlIGFjdHVhbCBudW1iZXIgaXMKLSsgKiBkZXRlcm1pbmVk IGR1cmluZyBpbml0IGFzIGEgZnVuY3Rpb24gb2YgdGhlIG51bWJlcgotKyAqIG9mIGF2YWlsYWJs ZSBjb3JlcyAqLwotK2ludCBjaXBoZXJfdGhyZWFkcyA9IDE7Ci0rCi0rLyogTnVtYmVyIG9mIGtl eXN0cmVhbSBxdWV1ZXMgKi8KLSsvKiBpZGVhbGx5IHRoaXMgc2hvdWxkIGJlIGxhcmdlIGVub3Vn aCBzbyB0aGF0IHRoZXJlIGlzCi0rICogYWx3YXlzIGEga2V5IHF1ZXVlIGZvciBhIHRocmVhZCB0 byB3b3JrIG9uCi0rICogc28gbWF5YmUgZG91YmxlIG9mIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4g QWdhaW4gdGhpcwotKyAqIGlzIGEgZGVmYXVsdCBhbmQgdGhlIGFjdHVhbCB2YWx1ZSBpcyBkZXRl cm1pbmVkIGluIGluaXQqLwotK2ludCBudW1rcSA9IDI7Ci0rCi0rLyogTGVuZ3RoIG9mIGEga2V5 c3RyZWFtIHF1ZXVlICovCi0rLyogb25lIHF1ZXVlIGhvbGRzIDUxMktCICgxMDI0ICogMzIgKiAx Nikgb2Yga2V5IGRhdGEKLSsgKiBiZWluZyB0aGF0IHRoZSBxdWV1ZXMgYXJlIGRlc3Ryb3llZCBh ZnRlciBhIHJla2V5Ci0rICogYW5kIGF0IGxlYXRzIG9uZSBoYXMgdG8gYmUgZnVsbHkgZmlsbGVk IHByaW9yIHRvCi0rICogZW5jaXBoZXJpbmcgZGF0YSB3ZSBkb24ndCB3YW50IHRoaXMgdG8gYmUg dG9vIGxhcmdlICovCi0rI2RlZmluZSBLUUxFTiAoMTAyNCAqIDMyKQotKwotKy8qIFByb2Nlc3Nv ciBjYWNoZWxpbmUgbGVuZ3RoICovCi0rI2RlZmluZSBDQUNIRUxJTkVfTEVOCTY0Ci0rCi0rLyog Q2FuIHRoZSBzeXN0ZW0gZG8gdW5hbGlnbmVkIGxvYWRzIG5hdGl2ZWx5PyAqLwotKyNpZiBkZWZp bmVkKF9fYWFyY2g2NF9fKSB8fCBcCi0rICAgIGRlZmluZWQoX19pMzg2X18pICAgIHx8IFwKLSsg ICAgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgXAotKyAgICBkZWZpbmVkKF9feDg2XzY0X18pCi0r IyBkZWZpbmUgQ0lQSEVSX1VOQUxJR05FRF9PSwotKyNlbmRpZgotKyNpZiBkZWZpbmVkKF9fU0la RU9GX0lOVDEyOF9fKQotKyMgZGVmaW5lIENJUEhFUl9JTlQxMjhfT0sKLSsjZW5kaWYKLSsvKi0t LS0tLS0tLS0tLS0tLS0tLS0tIEVORCBUVU5BQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0r Ci0rI2RlZmluZSBIQVZFX05PTkUgICAgICAgMAotKyNkZWZpbmUgSEFWRV9LRVkgICAgICAgIDEK LSsjZGVmaW5lIEhBVkVfSVYgICAgICAgICAyCi0raW50IFggPSAwOwotKwotK2NvbnN0IEVWUF9D SVBIRVIgKmV2cF9hZXNfY3RyX210KHZvaWQpOwotKwotKy8qIEtleXN0cmVhbSBRdWV1ZSBzdGF0 ZSAqLwotK2VudW0gewotKwlLUUlOSVQsCi0rCUtRRU1QVFksCi0rCUtRRklMTElORywKLSsJS1FG VUxMLAotKwlLUURSQUlOSU5HCi0rfTsKLSsKLSsvKiBLZXlzdHJlYW0gUXVldWUgc3RydWN0ICov Ci0rc3RydWN0IGtxIHsKLSsJdV9jaGFyCQlrZXlzW0tRTEVOXVtBRVNfQkxPQ0tfU0laRV07IC8q IFszMjc2OF1bMTZCXSAqLwotKwl1X2NoYXIJCWN0cltBRVNfQkxPQ0tfU0laRV07IC8qIDE2QiAq LwotKwl1X2NoYXIgICAgICAgICAgcGFkMFtDQUNIRUxJTkVfTEVOXTsKLSsJcHRocmVhZF9tdXRl eF90CWxvY2s7Ci0rCXB0aHJlYWRfY29uZF90CWNvbmQ7Ci0rCWludCAgICAgICAgICAgICBxc3Rh dGU7Ci0rCXVfY2hhciAgICAgICAgICBwYWQxW0NBQ0hFTElORV9MRU5dOwotK307Ci0rCi0rLyog Q29udGV4dCBzdHJ1Y3QgKi8KLStzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210Ci0rewotKwlsb25n IHVuc2lnbmVkIGludCBzdHJ1Y3RfaWQ7Ci0rCWludCAgICAgICAgICAgICAgIGtleWxlbjsKLSsJ aW50CQkgIHN0YXRlOwotKwlpbnQJCSAgcWlkeDsKLSsJaW50CQkgIHJpZHg7Ci0rCWludCAgICAg ICAgICAgICAgIGlkW01BWF9USFJFQURTXTsgLyogMzIgKi8KLSsJQUVTX0tFWSAgICAgICAgICAg YWVzX2tleTsKLSsJY29uc3QgdV9jaGFyICAgICAqb3JpZ19rZXk7Ci0rCXVfY2hhcgkJICBhZXNf Y291bnRlcltBRVNfQkxPQ0tfU0laRV07IC8qIDE2QiAqLwotKwlwdGhyZWFkX3QJICB0aWRbTUFY X1RIUkVBRFNdOyAvKiAzMiAqLwotKwlwdGhyZWFkX3J3bG9ja190ICB0aWRfbG9jazsKLSsJc3Ry dWN0IGtxCSAgcVtNQVhfTlVNS1FdOyAvKiAzMyAqLwotKyNpZmRlZiBfX0FQUExFX18KLSsJcHRo cmVhZF9yd2xvY2tfdCAgc3RvcF9sb2NrOwotKwlpbnQJCSAgZXhpdF9mbGFnOwotKyNlbmRpZiAv KiBfX0FQUExFX18gKi8KLSt9OwotKwotKy8qIHRoaXMgZGVmaW5lcyB0aGUgaGFzaCBhbmQgZWxl bWVudHMgb2YgZXZwIGNvbnRleHQgcG9pbnRlcnMKLSsgKiB0aGF0IGFyZSBjcmVhdGVkIGluIHRo cmVhZF9sb29wLiBXZSB1c2UgdGhpcyB0byBjbGVhciBhbmQKLSsgKiBmcmVlIHRoZSBjb250ZXh0 cyBpbiBzdG9wX2FuZF9wcmVqb2luCi0rICovCi0rc3RydWN0IGFlc19tdF9jdHhfcHRycyB7Ci0r CXB0aHJlYWRfdCAgICAgICB0aWQ7Ci0rCUVWUF9DSVBIRVJfQ1RYICpwb2ludGVyOyAvKiAzMiAq LwotKwlVVF9oYXNoX2hhbmRsZSBoaDsKLSt9OwotKwotKy8qIGdsb2JhbHMgKi8KLSsvKiBob3cg d2UgaW5jcmVtZW50IHRoZSBpZCB0aGUgc3RydWN0cyB3ZSBjcmVhdGUgKi8KLStsb25nIHVuc2ln bmVkIGludCBnbG9iYWxfc3RydWN0X2lkID0gMDsKLSsKLSsvKiBrZWVwIGEgY29weSBvZiB0aGUg cG9pbnRlcnMgY3JlYXRlZCBpbiB0aHJlYWRfbG9vcCB0byBmcmVlIGxhdGVyICovCi0rc3RydWN0 IGFlc19tdF9jdHhfcHRycyAqZXZwX3B0cnMgPSBOVUxMOwotKwotKy8qCi0rICogQWRkIG51bSB0 byBjb3VudGVyICdjdHInCi0rICovCi0rc3RhdGljIHZvaWQKLStzc2hfY3RyX2FkZCh1X2NoYXIg KmN0ciwgdWludDMyX3QgbnVtLCB1X2ludCBsZW4pCi0rewotKwlpbnQgaTsKLSsJdWludDE2X3Qg bjsKLSsKLSsJZm9yIChuID0gMCwgaSA9IGxlbiAtIDE7IGkgPj0gMCAmJiAobnVtIHx8IG4pOyBp LS0pIHsKLSsJCW4gPSBjdHJbaV0gKyAobnVtICYgMHhmZikgKyBuOwotKwkJbnVtID4+PSA4Owot KwkJY3RyW2ldID0gbiAmIDB4ZmY7Ci0rCQluID4+PSA4OwotKwl9Ci0rfQotKwotKy8qCi0rICog VGhyZWFkcyBtYXkgYmUgY2FuY2VsbGVkIGluIGEgcHRocmVhZF9jb25kX3dhaXQsIHdlIG11c3Qg ZnJlZSB0aGUgbXV0ZXgKLSsgKi8KLStzdGF0aWMgdm9pZAotK3RocmVhZF9sb29wX2NsZWFudXAo dm9pZCAqeCkKLSt7Ci0rCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211dGV4X3QgKil4 KTsKLSt9Ci0rCi0rI2lmZGVmIF9fQVBQTEVfXwotKy8qIENoZWNrIGlmIHdlIHNob3VsZCBleGl0 LCB3ZSBhcmUgZG9pbmcgYm90aCBjYW5jZWwgYW5kIGV4aXQgY29uZGl0aW9uCi0rICogc2luY2Ug b24gT1NYIHRocmVhZHMgc2VlbSB0byBvY2Nhc2lvbmFsbHkgZmFpbCB0byBub3RpY2Ugd2hlbiB0 aGV5IGhhdmUKLSsgKiBiZWVuIGNhbmNlbGxlZC4gV2Ugd2FudCB0byBoYXZlIGEgYmFja3VwIHRv IG1ha2Ugc3VyZSB0aGF0IHdlIHdvbid0IGhhbmcKLSsgKiB3aGVuIHRoZSBtYWluIHByb2Nlc3Mg am9pbigpLXMgdGhlIGNhbmNlbGxlZCB0aHJlYWQuCi0rICovCi0rc3RhdGljIHZvaWQKLSt0aHJl YWRfbG9vcF9jaGVja19leGl0KHN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmMpCi0rewotKwlp bnQgZXhpdF9mbGFnOwotKwotKwlwdGhyZWFkX3J3bG9ja19yZGxvY2soJmMtPnN0b3BfbG9jayk7 Ci0rCWV4aXRfZmxhZyA9IGMtPmV4aXRfZmxhZzsKLSsJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZj LT5zdG9wX2xvY2spOwotKwotKwlpZiAoZXhpdF9mbGFnKQotKwkJcHRocmVhZF9leGl0KE5VTEwp OwotK30KLSsjZWxzZQotKyMgZGVmaW5lIHRocmVhZF9sb29wX2NoZWNrX2V4aXQocykKLSsjZW5k aWYgLyogX19BUFBMRV9fICovCi0rCi0rLyoKLSsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdGVybWlu YXRlIHRoZSBoZWxwZXIgdGhyZWFkcwotKyAqLwotK3N0YXRpYyB2b2lkCi0rc3RvcF9hbmRfam9p bl9wcmVnZW5fdGhyZWFkcyhzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjKQotK3sKLSsJaW50 IGk7Ci0rCi0rI2lmZGVmIF9fQVBQTEVfXwotKwkvKiBub3RpZnkgdGhyZWFkcyB0aGF0IHRoZXkg c2hvdWxkIGV4aXQgKi8KLSsJcHRocmVhZF9yd2xvY2tfd3Jsb2NrKCZjLT5zdG9wX2xvY2spOwot KwljLT5leGl0X2ZsYWcgPSBUUlVFOwotKwlwdGhyZWFkX3J3bG9ja191bmxvY2soJmMtPnN0b3Bf bG9jayk7Ci0rI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotKwotKwkvKiBDYW5jZWwgcHJlZ2VuIHRo cmVhZHMgKi8KLSsJZm9yIChpID0gMDsgaSA8IGNpcGhlcl90aHJlYWRzOyBpKyspIHsKLSsJCWRl YnVnICgiQ2FuY2VsZWQgJWx1ICglbHUsJWQpIiwgYy0+dGlkW2ldLCBjLT5zdHJ1Y3RfaWQsIGMt PmlkW2ldKTsKLSsJCXB0aHJlYWRfY2FuY2VsKGMtPnRpZFtpXSk7Ci0rCX0KLSsgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBudW1rcTsgaSsrKSB7Ci0rICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0 ZXhfbG9jaygmYy0+cVtpXS5sb2NrKTsKLSsgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jy b2FkY2FzdCgmYy0+cVtpXS5jb25kKTsKLSsgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF91 bmxvY2soJmMtPnFbaV0ubG9jayk7Ci0rICAgICAgICB9Ci0rCWZvciAoaSA9IDA7IGkgPCBjaXBo ZXJfdGhyZWFkczsgaSsrKSB7Ci0rCQlpZiAocHRocmVhZF9raWxsKGMtPnRpZFtpXSwgMCkgIT0g MCkKLSsJCQlkZWJ1ZzMoIkFFUy1DVFIgTVQgcHRocmVhZF9qb2luIGZhaWx1cmU6IEludmFsaWQg dGhyZWFkIGlkICVsdSBpbiAlcyIsCi0rCQkJICAgICAgIGMtPnRpZFtpXSwgX19GVU5DVElPTl9f KTsKLSsJCWVsc2UgewotKwkJCWRlYnVnICgiSm9pbmluZyAlbHUgKCVsdSwgJWQpIiwgYy0+dGlk W2ldLCBjLT5zdHJ1Y3RfaWQsIGMtPmlkW2ldKTsKLSsJCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3ko JmMtPnFbaV0ubG9jayk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rl c3Ryb3koJmMtPnFbaV0uY29uZCk7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9q b2luKGMtPnRpZFtpXSwgTlVMTCk7Ci0rCQkJLyogdGhpcyBmaW5kcyB0aGUgZW50cnkgaW4gdGhl IGhhc2ggdGhhdCBjb3JyZXNwb25kaW5nIHRvIHRoZQotKwkJCSAqIHRocmVhZCBpZC4gVGhhdCdz IHVzZWQgdG8gZmluZCB0aGUgcG9pbnRlciB0byB0aGUgY2lwaGVyIHN0cnVjdAotKwkJCSAqIGNy ZWF0ZWQgaW4gdGhyZWFkX2xvb3AuICovCi0rCQkJc3RydWN0IGFlc19tdF9jdHhfcHRycyAqcHRy OwotKwkJCUhBU0hfRklORF9JTlQoZXZwX3B0cnMsICZjLT50aWRbaV0sIHB0cik7Ci0rCQkJRVZQ X0NJUEhFUl9DVFhfZnJlZShwdHItPnBvaW50ZXIpOwotKwkJCUhBU0hfREVMKGV2cF9wdHJzLCBw dHIpOwotKwkJCWZyZWUocHRyKTsgICAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsJcHRocmVh ZF9yd2xvY2tfZGVzdHJveSgmYy0+dGlkX2xvY2spOwotK30KLSsKLSsvKgotKyAqIFRoZSBsaWZl IG9mIGEgcHJlZ2VuIHRocmVhZDoKLSsgKiAgICBGaW5kIGVtcHR5IGtleXN0cmVhbSBxdWV1ZXMg YW5kIGZpbGwgdGhlbSB1c2luZyB0aGVpciBjb3VudGVyLgotKyAqICAgIFdoZW4gZG9uZSwgdXBk YXRlIGNvdW50ZXIgZm9yIHRoZSBuZXh0IGZpbGwuCi0rICovCi0rLyogcHJldmlvdXNseSB0aGlz IHVzZWQgdGhlIGxvdyBsZXZlbCBpbnRlcmZhY2Ugd2hpY2ggaXMsIHNhZGx5LAotKyAqIHNsb3dl ciB0aGFuIHRoZSBFVlAgaW50ZXJmYWNlIGJ5IGEgbG9uZyBzaG90LiBUaGUgb3JpZ2luYWwgY3R4 IChmcm9tIHRoZQotKyAqIGJvZHkgb2YgdGhlIGNvZGUpIGlzbid0IHBhc3NlZCBpbiBoZXJlIGJ1 dCB3ZSBoYXZlIHRoZSBrZXkgYW5kIHRoZSBjb3VudGVyCi0rICogd2hpY2ggbWVhbnMgd2Ugc2hv dWxkIGJlIGFibGUgdG8gY3JlYXRlIHRoZSBleGFjdCBzYW1lIGN0eCBhbmQgdXNlIHRoYXQgdG8K LSsgKiBmaWxsIHRoZSBrZXlzdHJlYW0gcXVldWVzLiBJJ20gY29uY2VybmVkIGFib3V0IGFkZGl0 aW9uYWwgb3ZlcmhlYWQgYnV0IHRoZQotKyAqIGFkZGl0aW9uYWwgc3BlZWQgZnJvbSBBRVNOSSBz aG91bGQgbWFrZSB1cCBmb3IgaXQuICAqLwotKy8qIFRoZSBhYm92ZSBjb21tZW50IHdhcyBtYWRl IHdoZW4gSSB0aG91Z2h0IEkgbmVlZGVkIHRvIGRvIGEgbmV3IEVWUCBpbml0IGZvcgotKyAqIGVh Y2ggY291bnRlciBpbmNyZW1lbnQuIFR1cm5zIG91dCBub3QgdG8gYmUgdGhlIGNhc2UgLWNqciAx MC8xNS8yMSovCi0rCi0rc3RhdGljIHZvaWQgKgotK3RocmVhZF9sb29wKHZvaWQgKngpCi0rewot KwlFVlBfQ0lQSEVSX0NUWCAqYWVzbmlfY3R4OwotKwlzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210 ICpjID0geDsKLSsJc3RydWN0IGtxICpxOwotKwlzdHJ1Y3QgYWVzX210X2N0eF9wdHJzICpwdHI7 Ci0rCWludCBxaWR4OwotKwlwdGhyZWFkX3QgZmlyc3RfdGlkOwotKwlpbnQgb3V0bGVuOwotKwl1 X2NoYXIgbXludWxsW0tRTEVOICogQUVTX0JMT0NLX1NJWkVdOwotKwltZW1zZXQoJm15bnVsbCwg MCwgS1FMRU4gKiBBRVNfQkxPQ0tfU0laRSk7Ci0rCi0rCS8qIGdldCB0aGUgdGhyZWFkIGlkIHRv IHNlZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBvbmUgKi8KLSsJcHRocmVhZF9yd2xvY2tfcmRsb2Nr KCZjLT50aWRfbG9jayk7Ci0rCWZpcnN0X3RpZCA9IGMtPnRpZFswXTsKLSsJcHRocmVhZF9yd2xv Y2tfdW5sb2NrKCZjLT50aWRfbG9jayk7Ci0rCi0rCS8qIGNyZWF0ZSB0aGUgY29udGV4dCBmb3Ig dGhpcyB0aHJlYWQgKi8KLSsJYWVzbmlfY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7Ci0rCi0r CS8qIGtlZXAgdHJhY2sgb2YgdGhlIHBvaW50ZXIgZm9yIHRoZSBldnAgaW4gdGhpcyBzdHJ1Y3QK LSsJICogc28gd2UgY2FuIGZyZWUgaXQgbGF0ZXIuIFNvIHdlIHBsYWNlIGl0IGluIGEgaGFzaCBp bmRleGVkIG9uIHRoZQotKwkgKiB0aHJlYWQgaWQsIHdoaWNoIGlzIGF2YWlsYWJsZSB0byB1cyBp biB0aGUgZnJlZSBmdW5jdGlvbi4KLSsJICogTm90ZSwgdGhlIHRocmVhZCBpZCBpc24ndCBuZWNl c3NhcnkgdW5pcXVlIGFjcm9zcyByZWtleXMgYnV0Ci0rCSAqIHRoYXQncyBva2F5IGFzIHRoZXkg YXJlIHVuaXF1ZSBkdXJpbmcgYSBrZXkuICovCi0rCXB0ciA9IG1hbGxvYyhzaXplb2YgKnB0cik7 IC8qZnJlZWQgaW4gc3RvcCAmIHByZWpvaW4gKi8KLSsJcHRyLT50aWQgPSBwdGhyZWFkX3NlbGYo KTsgLyogaW5kZXggZm9yIGhhc2ggKi8KLSsJcHRyLT5wb2ludGVyID0gYWVzbmlfY3R4OwotKwlI QVNIX0FERF9JTlQoZXZwX3B0cnMsIHRpZCwgcHRyKTsKLSsKLSsJLyogaW5pdGlhbGl6ZSB0aGUg Y2lwaGVyIGN0eCB3aXRoIHRoZSBrZXkgcHJvdmlkZWQKLSsJICogZGV0ZXJtaW5lIHdoaWNoIGNp cGhlciB0byB1c2UgYmFzZWQgb24gdGhlIGtleSBzaXplICovCi0rCWlmIChjLT5rZXlsZW4gPT0g MjU2KQotKwkJRVZQX0VuY3J5cHRJbml0X2V4KGFlc25pX2N0eCwgRVZQX2Flc18yNTZfY3RyKCks IE5VTEwsIGMtPm9yaWdfa2V5LCBOVUxMKTsKLSsJZWxzZSBpZiAoYy0+a2V5bGVuID09IDEyOCkK LSsJCUVWUF9FbmNyeXB0SW5pdF9leChhZXNuaV9jdHgsIEVWUF9hZXNfMTI4X2N0cigpLCBOVUxM LCBjLT5vcmlnX2tleSwgTlVMTCk7Ci0rCWVsc2UgaWYgKGMtPmtleWxlbiA9PSAxOTIpCi0rCQlF VlBfRW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4LCBFVlBfYWVzXzE5Ml9jdHIoKSwgTlVMTCwgYy0+ b3JpZ19rZXksIE5VTEwpOwotKwllbHNlIHsKLSsJCWxvZ2l0KCJJbnZhbGlkIGtleSBsZW5ndGgg b2YgJWQgaW4gQUVTIENUUiBNVC4gRXhpdGluZyIsIGMtPmtleWxlbik7Ci0rCQlleGl0KDEpOwot Kwl9Ci0rCi0rCS8qCi0rCSAqIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIHN0YXJ0dXAsIG9u ZSB0aHJlYWQgbXVzdCBmaWxsCi0rCSAqIHRoZSBmaXJzdCBLUSB0aGVuIG1hcmsgaXQgYXMgZHJh aW5pbmcuIExvY2sgaGVsZCB0aHJvdWdob3V0LgotKwkgKi8KLSsKLSsJaWYgKHB0aHJlYWRfZXF1 YWwocHRocmVhZF9zZWxmKCksIGZpcnN0X3RpZCkpIHsKLSsJCS8qIGdldCB0aGUgZmlyc3QgZWxl bWVudCBvZiB0aGUga2V5cXVlIHN0cnVjdCAqLwotKwkJcSA9ICZjLT5xWzBdOwotKwkJcHRocmVh ZF9tdXRleF9sb2NrKCZxLT5sb2NrKTsKLSsJCS8qIGlmIHdlIGFyZSBpbiB0aGUgSU5JVCBzdGF0 ZSB0aGVuIGZpbGwgdGhlIHF1ZXVlICovCi0rCQlpZiAocS0+cXN0YXRlID09IEtRSU5JVCkgewot KwkJCS8qIHNldCB0aGUgaW5pdGlhbCBjb3VudGVyICovCi0rCQkJRVZQX0VuY3J5cHRJbml0X2V4 KGFlc25pX2N0eCwgTlVMTCwgTlVMTCwgTlVMTCwgcS0+Y3RyKTsKLSsKLSsJCQkvKiBlbmN5cGhl ciBhIGJsb2NrIHNpemVkIG51bGwgc3RyaW5nIChteW51bGwpIHdpdGggdGhlIGtleS4gVGhpcwot KwkJCSAqIHJldHVybnMgdGhlIGtleXN0cmVhbSBiZWNhdXNlIHhvcmluZyB0aGUga2V5c3RyZWFt Ci0rCQkJICogYWdhaW5zdCBudWxsIHJldHVybnMgdGhlIGtleXN0cmVhbS4gU3RvcmUgdGhhdCBp biB0aGUgYXBwcm9wcmlhdGUgcXVldWUgKi8KLSsJCQlFVlBfRW5jcnlwdFVwZGF0ZShhZXNuaV9j dHgsIHEtPmtleXNbMF0sICZvdXRsZW4sIG15bnVsbCwgS1FMRU4gKiBBRVNfQkxPQ0tfU0laRSk7 Ci0rCi0rCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgYmxvY2tzIGNyZWF0ZXMgdG8gdGhlIGFlcyBj b3VudGVyICovCi0rCQkJc3NoX2N0cl9hZGQocS0+Y3RyLCBLUUxFTiAqIG51bWtxLCBBRVNfQkxP Q0tfU0laRSk7Ci0rCQkJcS0+cXN0YXRlID0gS1FEUkFJTklORzsKLSsJCQlwdGhyZWFkX2NvbmRf YnJvYWRjYXN0KCZxLT5jb25kKTsKLSsJCX0KLSsJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZxLT5s b2NrKTsKLSsJfQotKwotKwkvKgotKwkgKiBOb3JtYWwgY2FzZSBpcyB0byBmaW5kIGVtcHR5IHF1 ZXVlcyBhbmQgZmlsbCB0aGVtLCBza2lwcGluZyBvdmVyCi0rCSAqIHF1ZXVlcyBhbHJlYWR5IGZp bGxlZCBieSBvdGhlciB0aHJlYWRzIGFuZCBzdG9wcGluZyB0byB3YWl0IGZvcgotKwkgKiBhIGRy YWluaW5nIHF1ZXVlIHRvIGJlY29tZSBlbXB0eS4KLSsJICoKLSsJICogTXVsdGlwbGUgdGhyZWFk cyBtYXkgYmUgd2FpdGluZyBvbiBhIGRyYWluaW5nIHF1ZXVlIGFuZCBhd29rZW4KLSsJICogd2hl biBlbXB0eS4gIFRoZSBmaXJzdCB0aHJlYWQgdG8gd2FrZSB3aWxsIG1hcmsgaXQgYXMgZmlsbGlu ZywKLSsJICogb3RoZXJzIHdpbGwgbW92ZSBvbiB0byBmaWxsLCBza2lwLCBvciB3YWl0IG9uIHRo ZSBuZXh0IHF1ZXVlLgotKwkgKi8KLSsJZm9yIChxaWR4ID0gMTs7IHFpZHggPSAocWlkeCArIDEp ICUgbnVta3EpIHsKLSsJCS8qIENoZWNrIGlmIEkgd2FzIGNhbmNlbGxlZCwgYWxzbyBjaGVja2Vk IGluIGNvbmRfd2FpdCAqLwotKwkJcHRocmVhZF90ZXN0Y2FuY2VsKCk7Ci0rCi0rCQkvKiBDaGVj ayBpZiB3ZSBzaG91bGQgZXhpdCBhcyB3ZWxsICovCi0rCQl0aHJlYWRfbG9vcF9jaGVja19leGl0 KGMpOwotKwotKwkJLyogTG9jayBxdWV1ZSBhbmQgYmxvY2sgaWYgaXRzIGRyYWluaW5nICovCi0r CQlxID0gJmMtPnFbcWlkeF07Ci0rCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2spOwotKwkJ cHRocmVhZF9jbGVhbnVwX3B1c2godGhyZWFkX2xvb3BfY2xlYW51cCwgJnEtPmxvY2spOwotKwkJ d2hpbGUgKHEtPnFzdGF0ZSA9PSBLUURSQUlOSU5HIHx8IHEtPnFzdGF0ZSA9PSBLUUlOSVQpIHsK LSsJCQl0aHJlYWRfbG9vcF9jaGVja19leGl0KGMpOwotKwkJCXB0aHJlYWRfY29uZF93YWl0KCZx LT5jb25kLCAmcS0+bG9jayk7Ci0rCQl9Ci0rCQlwdGhyZWFkX2NsZWFudXBfcG9wKDApOwotKwot KwkJLyogSWYgZmlsbGluZyBvciBmdWxsLCBzb21lYm9keSBlbHNlIGdvdCBpdCwgc2tpcCAqLwot KwkJaWYgKHEtPnFzdGF0ZSAhPSBLUUVNUFRZKSB7Ci0rCQkJcHRocmVhZF9tdXRleF91bmxvY2so JnEtPmxvY2spOwotKwkJCWNvbnRpbnVlOwotKwkJfQotKwotKwkJLyoKLSsJCSAqIEVtcHR5LCBs ZXQncyBmaWxsIGl0LgotKwkJICogUXVldWUgbG9jayBpcyByZWxpbnF1aXNoZWQgd2hpbGUgd2Ug ZG8gdGhpcyBzbyBvdGhlcnMKLSsJCSAqIGNhbiBzZWUgdGhhdCBpdCdzIGJlaW5nIGZpbGxlZC4K LSsJCSAqLwotKwkJcS0+cXN0YXRlID0gS1FGSUxMSU5HOwotKwkJcHRocmVhZF9jb25kX2Jyb2Fk Y2FzdCgmcS0+Y29uZCk7Ci0rCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7Ci0rCi0r CQkvKiBzZXQgdGhlIGluaXRpYWwgY291bnRlciAqLwotKwkJRVZQX0VuY3J5cHRJbml0X2V4KGFl c25pX2N0eCwgTlVMTCwgTlVMTCwgTlVMTCwgcS0+Y3RyKTsKLSsKLSsJCS8qIHNlZSBjb3Jlc3Bv bmRpbmcgYmxvY2sgYWJvdmUgZm9yIHVzZWZ1bCBjb21tZW50cyAqLwotKwkJRVZQX0VuY3J5cHRV cGRhdGUoYWVzbmlfY3R4LCBxLT5rZXlzWzBdLCAmb3V0bGVuLCBteW51bGwsIEtRTEVOICogQUVT X0JMT0NLX1NJWkUpOwotKwotKwkJLyogUmUtbG9jaywgbWFyayBmdWxsIGFuZCBzaWduYWwgY29u c3VtZXIgKi8KLSsJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7Ci0rCQlzc2hfY3RyX2Fk ZChxLT5jdHIsIEtRTEVOICogbnVta3EsIEFFU19CTE9DS19TSVpFKTsKLSsJCXEtPnFzdGF0ZSA9 IEtRRlVMTDsKLSsJCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnEtPmNvbmQpOwotKwkJcHRocmVh ZF9tdXRleF91bmxvY2soJnEtPmxvY2spOwotKwl9Ci0rCi0rCXJldHVybiBOVUxMOwotK30KLSsK LSsvKiB0aGlzIGlzIHdoZXJlIHRoZSBkYXRhIGlzIGFjdHVhbGx5IGVuY2lwaGVyZWQgYW5kIGRl Y2lwaGVyZWQgKi8KLSsvKiB0aGlzIG1heSBhbHNvIGJlbmVmaXQgZnJvbSB1cGdyYWRpbmcgdG8g dGhlIEVWUCBBUEkgKi8KLStzdGF0aWMgaW50Ci0rc3NoX2Flc19jdHIoRVZQX0NJUEhFUl9DVFgg KmN0eCwgdV9jaGFyICpkZXN0LCBjb25zdCB1X2NoYXIgKnNyYywKLSsgICAgc2l6ZV90IGxlbikK LSt7Ci0rCXR5cGVkZWYgdW5pb24gewotKyNpZmRlZiBDSVBIRVJfSU5UMTI4X09LCi0rCQlfX3Vp bnQxMjhfdCAqdTEyODsKLSsjZW5kaWYKLSsJCXVpbnQ2NF90ICp1NjQ7Ci0rCQl1aW50MzJfdCAq dTMyOwotKwkJdWludDhfdCAqdTg7Ci0rCQljb25zdCB1aW50OF90ICpjdTg7Ci0rCQl1aW50cHRy X3QgdTsKLSsJfSBwdHJzX3Q7Ci0rCXB0cnNfdCBkZXN0cCwgc3JjcCwgYnVmcDsKLSsJdWludHB0 cl90IGFsaWduOwotKwlzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjOwotKwlzdHJ1Y3Qga3Eg KnEsICpvbGRxOwotKwlpbnQgcmlkeDsKLSsJdV9jaGFyICpidWY7Ci0rCi0rCWlmIChsZW4gPT0g MCkKLSsJCXJldHVybiAxOwotKwlpZiAoKGMgPSBFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEo Y3R4KSkgPT0gTlVMTCkKLSsJCXJldHVybiAwOwotKwotKwlxID0gJmMtPnFbYy0+cWlkeF07Ci0r CXJpZHggPSBjLT5yaWR4OwotKwotKwkvKiBzcmMgYWxyZWFkeSBwYWRkZWQgdG8gYmxvY2sgbXVs dGlwbGUgKi8KLSsJc3JjcC5jdTggPSBzcmM7Ci0rCWRlc3RwLnU4ID0gZGVzdDsKLSsJZG8geyAv KiBkbyB1bnRpbCBsZW4gaXMgMCAqLwotKwkJYnVmID0gcS0+a2V5c1tyaWR4XTsKLSsJCWJ1ZnAu dTggPSBidWY7Ci0rCi0rCQkvKiBmaWd1cmUgb3V0IHRoZSBhbGlnbm1lbnQgb24gdGhlIGZseSAq LwotKyNpZmRlZiBDSVBIRVJfVU5BTElHTkVEX09LCi0rCQlhbGlnbiA9IDA7Ci0rI2Vsc2UKLSsJ CWFsaWduID0gZGVzdHAudSB8IHNyY3AudSB8IGJ1ZnAudTsKLSsjZW5kaWYKLSsKLSsJCS8qIHhv ciB0aGUgc3JjIGFnYWluc3QgdGhlIGtleSAoYnVmKQotKwkJICogZGlmZmVyZW50IHN5c3RlbXMg Y2FuIGRvIGFsbCAxNiBieXRlcyBhdCBvbmNlIG9yCi0rCQkgKiBtYXkgbmVlZCB0byBkbyBpdCBp biA4IG9yIDQgYnl0ZXMgY2h1bmtzCi0rCQkgKiB3b3JzdCBjYXNlIGlzIGRvaW5nIGl0IGFzIGEg bG9vcCAqLwotKyNpZmRlZiBDSVBIRVJfSU5UMTI4X09LCi0rCQkvKiB3aXRoIEdDQyAxMyB3ZSBo YXZlIGhhdmluZyBjb25zaXN0ZW50IHNlZyBmYXVsdHMKLSsJCSAqIGluIHRoaXMgc2VjdGlvbiBv ZiBjb2RlLiBTaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwKLSsJCSAqIGNvZGUgcGF0aCB3ZSBhcmUg cmVtb3ZpbmcgdGhpcyB1bnRpbCB3ZSBoYXZlIGEgc29sdXRpb24KLSsJCSAqIGluIHBsYWNlIC1j anIgMDIvMjIvMjQKLSsJCSAqIFRPRE86IEZJWCBUSElTCi0rCQkgKi8KLSsJCS8qIGlmICgoYWxp Z24gJiAweGYpID09IDApIHsgKi8KLSsJCS8qIAlkZXN0cC51MTI4WzBdID0gc3JjcC51MTI4WzBd IF4gYnVmcC51MTI4WzBdOyAqLwotKwkJLyogfSBlbHNlICovCi0rI2VuZGlmCi0rCQkvKiB0aGlz IGlzIGNhdXNpbmcgdW5kZWZpbmVkIGJlaGF2aW91ciBpbiBzYW5pdGl6ZXJzCi0rCQkgKiB0aGlz IGlzIGFubm95aW5nIGJlY2F1c2UgaXQncyBtb3JlIGVmZmljaWVudAotKwkJICogYnV0IFVCIGlz IG5vdCBzb21ldGhpbmcgSSB3YW50IHRvIHJldGFpbiAqLwotKwkJLyogNjQgYml0cyAqLwotKwkJ LyogaWYgKChhbGlnbiAmIDB4NykgPT0gMCkgeyAqLwotKwkJLyogCWRlc3RwLnU2NFswXSA9IHNy Y3AudTY0WzBdIF4gYnVmcC51NjRbMF07ICovCi0rCQkvKiAJZGVzdHAudTY0WzFdID0gc3JjcC51 NjRbMV0gXiBidWZwLnU2NFsxXTsgKi8KLSsJCS8qIC9cKiAzMiBiaXRzICpcLyAqLwotKwkJLyog fSBlbHNlICovCi0rCQlpZiAoKGFsaWduICYgMHgzKSA9PSAwKSB7Ci0rCQkJZGVzdHAudTMyWzBd ID0gc3JjcC51MzJbMF0gXiBidWZwLnUzMlswXTsKLSsJCQlkZXN0cC51MzJbMV0gPSBzcmNwLnUz MlsxXSBeIGJ1ZnAudTMyWzFdOwotKwkJCWRlc3RwLnUzMlsyXSA9IHNyY3AudTMyWzJdIF4gYnVm cC51MzJbMl07Ci0rCQkJZGVzdHAudTMyWzNdID0gc3JjcC51MzJbM10gXiBidWZwLnUzMlszXTsK LSsJCX0gZWxzZSB7Ci0rCQkJLyoxIGJ5dGUgYXQgYSB0aW1lKi8KLSsJCQlzaXplX3QgaTsKLSsJ CQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX1NJWkU7ICsraSkKLSsJCQkJZGVzdFtpXSA9IHNy Y1tpXSBeIGJ1ZltpXTsKLSsJCX0KLSsKLSsJCS8qIGluYy9kZWNyZW1lbnQgdGhlIHBvaW50ZXJz IGJ5IHRoZSBibG9jayBzaXplICgxNikqLwotKwkJZGVzdHAudSArPSBBRVNfQkxPQ0tfU0laRTsK LSsJCXNyY3AudSArPSBBRVNfQkxPQ0tfU0laRTsKLSsKLSsJCS8qIEluY3JlbWVudCByZWFkIGlu ZGV4LCBzd2l0Y2ggcXVldWVzIG9uIHJvbGxvdmVyICovCi0rCQlpZiAoKHJpZHggPSAocmlkeCAr IDEpICUgS1FMRU4pID09IDApIHsKLSsJCQlvbGRxID0gcTsKLSsKLSsJCQkvKiBNYXJrIG5leHQg cXVldWUgZHJhaW5pbmcsIG1heSBuZWVkIHRvIHdhaXQgKi8KLSsJCQljLT5xaWR4ID0gKGMtPnFp ZHggKyAxKSAlIG51bWtxOwotKwkJCXEgPSAmYy0+cVtjLT5xaWR4XTsKLSsJCQlwdGhyZWFkX211 dGV4X2xvY2soJnEtPmxvY2spOwotKwkJCXdoaWxlIChxLT5xc3RhdGUgIT0gS1FGVUxMKSB7Ci0r CQkJCXB0aHJlYWRfY29uZF93YWl0KCZxLT5jb25kLCAmcS0+bG9jayk7Ci0rCQkJfQotKwkJCXEt PnFzdGF0ZSA9IEtRRFJBSU5JTkc7Ci0rCQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcS0+Y29u ZCk7Ci0rCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOwotKwotKwkJCS8qIE1hcmsg Y29uc3VtZWQgcXVldWUgZW1wdHkgYW5kIHNpZ25hbCBwcm9kdWNlcnMgKi8KLSsJCQlwdGhyZWFk X211dGV4X2xvY2soJm9sZHEtPmxvY2spOwotKwkJCW9sZHEtPnFzdGF0ZSA9IEtRRU1QVFk7Ci0r CQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmb2xkcS0+Y29uZCk7Ci0rCQkJcHRocmVhZF9tdXRl eF91bmxvY2soJm9sZHEtPmxvY2spOwotKwkJfQotKwl9IHdoaWxlIChsZW4gLT0gQUVTX0JMT0NL X1NJWkUpOwotKwljLT5yaWR4ID0gcmlkeDsKLSsJcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBp bnQKLStzc2hfYWVzX2N0cl9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVfY2hhciAq a2V5LCBjb25zdCB1X2NoYXIgKml2LAotKyAgICBpbnQgZW5jKQotK3sKLSsJc3RydWN0IHNzaF9h ZXNfY3RyX2N0eF9tdCAqYzsKLSsJaW50IGk7Ci0rCi0rCWNoYXIgKmFlc190aHJlYWRzID0gZ2V0 ZW52KCJTU0hfQ0lQSEVSX1RIUkVBRFMiKTsKLSsgICAgICAgIGlmIChhZXNfdGhyZWFkcyAhPSBO VUxMICYmIHN0cmxlbihhZXNfdGhyZWFkcykgIT0gMCkKLSsJCWNpcGhlcl90aHJlYWRzID0gYXRv aShhZXNfdGhyZWFkcyk7Ci0rCWVsc2UKLSsJCWNpcGhlcl90aHJlYWRzID0gMTsKLSsKLSsJaWYg KGNpcGhlcl90aHJlYWRzIDwgMSkKLSsgCQljaXBoZXJfdGhyZWFkcyA9IDE7Ci0rCi0rCWlmIChj aXBoZXJfdGhyZWFkcyA+IE1BWF9USFJFQURTKQotKwkJY2lwaGVyX3RocmVhZHMgPSBNQVhfVEhS RUFEUzsKLSsKLSsJbnVta3EgPSBjaXBoZXJfdGhyZWFkcyArIDE7Ci0rCi0rCWlmIChudW1rcSA+ IE1BWF9OVU1LUSkKLSsJCW51bWtxID0gTUFYX05VTUtROwotKwotKwlkZWJ1ZygiU3RhcnRpbmcg JWQgdGhyZWFkcyBhbmQgJWQgcXVldWVzXG4iLCBjaXBoZXJfdGhyZWFkcywgbnVta3EpOwotKwot KwkvKiBzZXQgdXAgdGhlIGluaXRpYWwgc3RhdGUgb2YgYyAob3VyIGNpcGhlciBzdHJlYW0gc3Ry dWN0KSAqLwotKyAJaWYgKChjID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGN0eCkpID09 IE5VTEwpIHsKLSsJCWMgPSB4bWFsbG9jKHNpemVvZigqYykpOwotKwkJcHRocmVhZF9yd2xvY2tf aW5pdCgmYy0+dGlkX2xvY2ssIE5VTEwpOwotKyNpZmRlZiBfX0FQUExFX18KLSsJCXB0aHJlYWRf cndsb2NrX2luaXQoJmMtPnN0b3BfbG9jaywgTlVMTCk7Ci0rCQljLT5leGl0X2ZsYWcgPSBGQUxT RTsKLSsjZW5kaWYgLyogX19BUFBMRV9fICovCi0rCi0rCQljLT5zdGF0ZSA9IEhBVkVfTk9ORTsK LSsKLSsJCS8qIGluaXRpYWxpemUgdGhlIG11dGV4cyBhbmQgY29uZGl0aW9ucyBmb3IgZWFjaCBs b2NrIGluIG91ciBzdHJ1Y3QgKi8KLSsJCWZvciAoaSA9IDA7IGkgPCBudW1rcTsgaSsrKSB7Ci0r CQkJcHRocmVhZF9tdXRleF9pbml0KCZjLT5xW2ldLmxvY2ssIE5VTEwpOwotKwkJCXB0aHJlYWRf Y29uZF9pbml0KCZjLT5xW2ldLmNvbmQsIE5VTEwpOwotKwkJfQotKwotKwkJLyogYXR0YWNoIG91 ciBzdHJ1Y3QgdG8gdGhlIGNvbnRleHQgKi8KLSsJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0 YShjdHgsIGMpOwotKwl9Ci0rCi0rCS8qIHdlIGFyZSBpbml0aWFsaXppbmcgYnV0IHRoZSBjdXJy ZW50IHN0cnVjdHVyZSBhbHJlYWR5Ci0rCSAgIGhhcyBhbiBJViBhbmQga2V5IHNvIHdlIHdhbnQg dG8ga2lsbCB0aGUgZXhpc3Rpbmcga2V5IGRhdGEKLSsJICAgYW5kIHN0YXJ0IG92ZXIuIFRoaXMg aXMgaW1wb3J0YW50IHdoZW4gd2UgbmVlZCB0byByZWtleSB0aGUgZGF0YSBzdHJlYW0gKi8KLSsJ aWYgKGMtPnN0YXRlID09IChIQVZFX0tFWSB8IEhBVkVfSVYpKSB7Ci0rCQkvKiB0ZWxsIHRoZSBw cmVnZW4gdGhyZWFkcyB0byBleGl0ICovCi0rCQlzdG9wX2FuZF9qb2luX3ByZWdlbl90aHJlYWRz KGMpOwotKwotKyNpZmRlZiBfX0FQUExFX18KLSsJCS8qIHJlc2V0IHRoZSBleGl0IGZsYWcgKi8K LSsJCWMtPmV4aXRfZmxhZyA9IEZBTFNFOwotKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KLSsKLSsJ CS8qIFN0YXJ0IG92ZXIgZ2V0dGluZyBrZXkgJiBpdiAqLwotKwkJYy0+c3RhdGUgPSBIQVZFX05P TkU7Ci0rCX0KLSsKLSsJLyogc2V0IHRoZSBpbml0aWFsIGtleSBmb3IgdGhpcyBrZXkgc3RyZWFt IHF1ZXVlICovCi0rCWlmIChrZXkgIT0gTlVMTCkgewotKwkJQUVTX3NldF9lbmNyeXB0X2tleShr ZXksIEVWUF9DSVBIRVJfQ1RYX2tleV9sZW5ndGgoY3R4KSAqIDgsCi0rCQkgICAmYy0+YWVzX2tl eSk7Ci0rCQljLT5vcmlnX2tleSA9IGtleTsKLSsJCWMtPmtleWxlbiA9IEVWUF9DSVBIRVJfQ1RY X2tleV9sZW5ndGgoY3R4KSAqIDg7Ci0rCQljLT5zdGF0ZSB8PSBIQVZFX0tFWTsKLSsJfQotKwot KwkvKiBzZXQgdGhlIElWICovCi0rCWlmIChpdiAhPSBOVUxMKSB7Ci0rCQkvKiBpbml0IHRoZSBj b3VudGVyIHRoaXMgaXMganVzdCBhIDE2Ynl0ZSB1Y2hhciAqLwotKwkJbWVtY3B5KGMtPmFlc19j b3VudGVyLCBpdiwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYy0+c3RhdGUgfD0gSEFWRV9JVjsKLSsJ fQotKwotKwlpZiAoYy0+c3RhdGUgPT0gKEhBVkVfS0VZIHwgSEFWRV9JVikpIHsKLSsJCS8qIENs ZWFyIHF1ZXVlcyAqLwotKwkJLyogc2V0IHRoZSBmaXJzdCBrZXkgaW4gdGhlIGtleSBxdWV1ZSB0 byB0aGUgY3VycmVudCBjb3VudGVyICovCi0rCQltZW1jcHkoYy0+cVswXS5jdHIsIGMtPmFlc19j b3VudGVyLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQkvKiBpbmRpY2F0ZSB0aGF0IGl0IG5lZWRzIHRv IGJlIGluaXRpYWxpemVkICovCi0rCQljLT5xWzBdLnFzdGF0ZSA9IEtRSU5JVDsKLSsJCS8qIGZv ciBlYWNoIG9mIHRoZSByZW1haW5pbmcgcXVldWVzIHNldCB0aGUgZmlyc3QgY291bnRlciB0byB0 aGUKLSsJCSAqIGNvdW50ZXIgYW5kIHRoZW4gYWRkIHRoZSBzaXplIG9mIHRoZSBxdWV1ZSB0byB0 aGUgY291bnRlciAqLwotKwkJZm9yIChpID0gMTsgaSA8IG51bWtxOyBpKyspIHsKLSsJCQltZW1j cHkoYy0+cVtpXS5jdHIsIGMtPmFlc19jb3VudGVyLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQkJc3No X2N0cl9hZGQoYy0+cVtpXS5jdHIsIGkgKiBLUUxFTiwgQUVTX0JMT0NLX1NJWkUpOwotKwkJCWMt PnFbaV0ucXN0YXRlID0gS1FFTVBUWTsKLSsJCX0KLSsJCWMtPnFpZHggPSAwOwotKwkJYy0+cmlk eCA9IDA7Ci0rCQljLT5zdHJ1Y3RfaWQgPSBnbG9iYWxfc3RydWN0X2lkKys7Ci0rCi0rCi0rCQkv KiBTdGFydCB0aHJlYWRzICovCi0rI2RlZmluZSBTVEFDS19TSVpFICgxMDI0ICogMTAyNCkKLSsJ CXB0aHJlYWRfYXR0cl90IGF0dHI7Ci0rCQlwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7Ci0rCQlw dGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKCZhdHRyLCBTVEFDS19TSVpFKTsKLSsJCWZvciAoaSA9 IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsgaSsrKSB7Ci0rCQkJcHRocmVhZF9yd2xvY2tfd3Jsb2Nr KCZjLT50aWRfbG9jayk7Ci0rCQkJaWYgKHB0aHJlYWRfY3JlYXRlKCZjLT50aWRbaV0sICZhdHRy LCB0aHJlYWRfbG9vcCwgYykgIT0gMCkKLSsJCQkJZmF0YWwgKCJBRVMtQ1RSIE1UIENvdWxkIG5v dCBjcmVhdGUgdGhyZWFkIGluICVzIiwgX19GVU5DVElPTl9fKTsKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qc2hvdWxkIGRpZSBoZXJlICovCi0rCQkJZWxzZSB7Ci0rCQkJCWMt PmlkW2ldID0gaTsKLSsJCQkJZGVidWcgKCJBRVMtQ1RSIE1UIHNwYXduZWQgYSB0aHJlYWQgd2l0 aCBpZCAlbHUgaW4gJXMgKCVsdSwgJWQpIiwKLSsJCQkJICAgICAgIGMtPnRpZFtpXSwgX19GVU5D VElPTl9fLCBjLT5zdHJ1Y3RfaWQsIGMtPmlkW2ldKTsKLSsJCQl9Ci0rCQkJcHRocmVhZF9yd2xv Y2tfdW5sb2NrKCZjLT50aWRfbG9jayk7Ci0rCQl9Ci0rCQlwdGhyZWFkX211dGV4X2xvY2soJmMt PnFbMF0ubG9jayk7Ci0rCQkvLyB3YWl0IGZvciBhbGwgb2YgdGhlIHRocmVhZHMgdG8gYmUgaW5p dGlhbGl6ZWQKLSsJCXdoaWxlIChjLT5xWzBdLnFzdGF0ZSA9PSBLUUlOSVQpCi0rCQkJcHRocmVh ZF9jb25kX3dhaXQoJmMtPnFbMF0uY29uZCwgJmMtPnFbMF0ubG9jayk7Ci0rCQlwdGhyZWFkX211 dGV4X3VubG9jaygmYy0+cVswXS5sb2NrKTsKLSsJfQotKwlyZXR1cm4gMTsKLSt9Ci0rCi0rc3Rh dGljIGludAotK3NzaF9hZXNfY3RyX2NsZWFudXAoRVZQX0NJUEhFUl9DVFggKmN0eCkKLSt7Ci0r CXN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmM7Ci0rCi0rCWlmICgoYyA9IEVWUF9DSVBIRVJf Q1RYX2dldF9hcHBfZGF0YShjdHgpKSAhPSBOVUxMKSB7Ci0rCQlzdG9wX2FuZF9qb2luX3ByZWdl bl90aHJlYWRzKGMpOwotKwotKwkJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwotKwkJZnJlZShj KTsKLSsJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0YShjdHgsIE5VTEwpOwotKwl9Ci0rCXJl dHVybiAxOwotK30KLSsKLSsvKiA8ZnJpZWRsPiAqLwotK2NvbnN0IEVWUF9DSVBIRVIgKgotK2V2 cF9hZXNfY3RyX210KHZvaWQpCi0rewotKwlzdGF0aWMgRVZQX0NJUEhFUiAqYWVzX2N0cjsKLSsJ YWVzX2N0ciA9IEVWUF9DSVBIRVJfbWV0aF9uZXcoTklEX3VuZGVmLCAxNi8qYmxvY2sqLywgMTYv KmtleSovKTsKLSsJRVZQX0NJUEhFUl9tZXRoX3NldF9pdl9sZW5ndGgoYWVzX2N0ciwgQUVTX0JM T0NLX1NJWkUpOwotKwlFVlBfQ0lQSEVSX21ldGhfc2V0X2luaXQoYWVzX2N0ciwgc3NoX2Flc19j dHJfaW5pdCk7Ci0rCUVWUF9DSVBIRVJfbWV0aF9zZXRfY2xlYW51cChhZXNfY3RyLCBzc2hfYWVz X2N0cl9jbGVhbnVwKTsKLSsJRVZQX0NJUEhFUl9tZXRoX3NldF9kb19jaXBoZXIoYWVzX2N0ciwg c3NoX2Flc19jdHIpOwotKyMgIGlmbmRlZiBTU0hfT0xEX0VWUAotKwlFVlBfQ0lQSEVSX21ldGhf c2V0X2ZsYWdzKGFlc19jdHIsIEVWUF9DSVBIX0NCQ19NT0RFCi0rCQkJCSAgICAgIHwgRVZQX0NJ UEhfVkFSSUFCTEVfTEVOR1RICi0rCQkJCSAgICAgIHwgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5J VAotKwkJCQkgICAgICB8IEVWUF9DSVBIX0NVU1RPTV9JVik7Ci0rIyAgZW5kaWYgLypTU0hfT0xE X0VWUCovCi0rCXJldHVybiBhZXNfY3RyOwotK30KLSsjZW5kaWYgLyogT1NTTCBDaGVjayAqLwot ZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuYyBv cGVuc3NoLTEwLjJwMS9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5jCi0tLS0gb3BlbnNzaC0xMC4y cDEub3JpZy9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMu YwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg0MTg3MDU0MyArMDEwMAotQEAgLTAsMCArMSw2NzIgQEAK LSsvKgotKyAqIE9wZW5TU0ggTXVsdGktdGhyZWFkZWQgQUVTLUNUUiBDaXBoZXIgUHJvdmlkZXIg Zm9yIE9wZW5TU0wgMwotKyAqCi0rICogQXV0aG9yOiBCZW5qYW1pbiBCZW5uZXR0IDxiZW5AcHNj LmVkdT4KLSsgKiBBdXRob3I6IE1pa2UgVGFzb3RhIDx0YXNvdGFAZ21haWwuY29tPgotKyAqIEF1 dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MDgtMjAyMiBQaXR0c2J1cmdoIFN1cGVyY29tcHV0aW5nIENlbnRlci4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIEJhc2VkIG9uIG9yaWdpbmFsIE9wZW5TU0ggQUVTLUNUUiBjaXBoZXIu IFNtYWxsIHBvcnRpb25zIHJlbWFpbiB1bmNoYW5nZWQsCi0rICogQ29weXJpZ2h0IChjKSAyMDAz IE1hcmt1cyBGcmllZGwgPG1hcmt1c0BvcGVuYnNkLm9yZz4KLSsgKgotKyAqIFBlcm1pc3Npb24g dG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFu eQotKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJv dmlkZWQgdGhhdCB0aGUgYWJvdmUKLSsgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotKyAqCi0rICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5U SUVTCi0rICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJ RUQgV0FSUkFOVElFUyBPRgotKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0rICogQU5ZIFNQRUNJQUwsIERJ UkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwot KyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklU UywgV0hFVEhFUiBJTiBBTgotKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBP VEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0rICogT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSsgKi8KLSsK LSsjaW5jbHVkZSAiaW5jbHVkZXMuaCIKLSsKLSsvKiBvbmx5IGZvciBzeXN0ZW1zIHdpdGggT1NT TCAzICovCi0rI2lmZGVmIFdJVEhfT1BFTlNTTDMKLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlICJ4 bWFsbG9jLmgiCi0rI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlICJjaXBoZXItY3RyLW10 LWZ1bmN0aW9ucy5oIgotKyNpbmNsdWRlICJsb2cuaCIKLSsKLSsvKiBmb3IgcHJvdmlkZXIgZXJy b3Igc3RydWN0ICovCi0rI2luY2x1ZGUgIm9zc2wzLXByb3ZpZGVyLWVyci5oIgotKyNpbmNsdWRl ICJudW0uaCIKLSsKLSsvKiBub3RlIHJlZ2FyZGluZyB0aHJlYWRzIGFuZCBxdWV1ZXMgKi8KLSsv KiBpbml0aWFsbHkgdGhpcyBjaXBoZXIgd2FzIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdAotKyAqIHRo ZSBrZXkgc3RyZWFtIHdhcyBnZW5lcmF0ZWQgaW4gYSBwZXIgY2lwaGVyIGJsb2NrCi0rICogbG9v cC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBrZXkgc3RyZWFtIHF1ZXVlIGxlbmd0aCB3YXMKLSsgKiAx NmsgYW5kIHRoZSBjaXBoZXIgYmxvY2sgc2l6ZSB3YXMgMTYgYnl0ZXMgaXQgd291bGQKLSsgKiBm aWxsIHRoZSBxdWV1ZSAxNiBieXRlcyBhdCBhIHRpbWUuIE1pdGNoIERvcnJlbGwgcG9pbnRlZAot KyAqIG91dCB0aGF0IHdlIGNvdWxkIGZpbGwgdGhlIHF1ZXVlIGluIG9uY2UgY2FsbCBlbGltaW5h dGluZwotKyAqIGxvb3AgYW5kIG11bHRpcGxlIGNhbGxzIHRvIEVWUF9FbmNyeXB0VXBkYXRlLiBE b2luZyBzbwotKyAqIGRyYW1hdGljYWxseSByZWR1Y2VkIENQVSBsb2FkIGluIHRoZSB0aHJlYWRz IGFuZCBpbmRpY2F0ZWQKLSsgKiB0aGF0IHdlIGNvdWxkIGFsc28gZWxpbWluYXRlIG1vc3Qgb2Yg dGhlIHRocmVhZHMgYW5kIHF1ZXVlcwotKyAqIGFzIGl0IHdvdWxkIHRha2UgZmFyIGxlc3MgdGlt ZSBmb3IgYSBxdWV1ZSB0byBlYnRlciBLUV9GVUxMCi0rICogc3RhdGUuIEFzIHN1Y2gsIHdlJ3Zl IHJlZHVjZWQgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHRocmVhZHMKLSsgKiBhbmQgcXVldWVzIGZy b20gMiBhbmQgOCAocmVzcGVjdGl2ZWx5KSB0byAxIGFuZCAyLiBXZSd2ZSBhbHNvCi0rICogZWxp bW5hdGVkIHRoZSBuZWVkIHRvIGRldGVybWluZSB0aGUgcGh5c2ljYWwgbnVtYmVyIG9mIGNvcmVz IG9uCi0rICogdGhlIHN5c3RlbSBhbmQsIGlmIHRoZSB1c2VyIGRlc2lyZXMsIGNhbiBzcGluIHVw IG1vcmUgdGhyZWFkcwotKyAqIHVzaW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiBBZGRpdGlv bmFsbHksIHF1ZXVlcyBpcyBub3cgZml4ZWQKLSsgKiBhdCB0aHJlYWRfY291bnQgKyAxLgotKyAq IGNqciAxMC8xOS8yMDIyICovCi0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLSBUVU5BQkxFUyAt LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rLyogTnVtYmVyIG9mIHByZWdlbiB0aHJlYWRzIHRvIHVz ZSAqLwotKy8qIHRoaXMgaXMgYSBkZWZhdWx0IHZhbHVlLiBUaGUgYWN0dWFsIG51bWJlciBpcwot KyAqIGRldGVybWluZWQgZHVyaW5nIGluaXQgYXMgYSBmdW5jdGlvbiBvZiB0aGUgbnVtYmVyCi0r ICogb2YgYXZhaWxhYmxlIGNvcmVzICovCi0raW50IGNpcGhlcl90aHJlYWRzID0gMTsKLSsKLSsv KiBOdW1iZXIgb2Yga2V5c3RyZWFtIHF1ZXVlcyAqLwotKy8qIGlkZWFsbHkgdGhpcyBzaG91bGQg YmUgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgdGhlcmUgaXMKLSsgKiBhbHdheXMgYSBrZXkgcXVldWUg Zm9yIGEgdGhyZWFkIHRvIHdvcmsgb24KLSsgKiBzbyBtYXliZSBkb3VibGUgb2YgdGhlIG51bWJl ciBvZiB0aHJlYWRzLiBBZ2FpbiB0aGlzCi0rICogaXMgYSBkZWZhdWx0IGFuZCB0aGUgYWN0dWFs IHZhbHVlIGlzIGRldGVybWluZWQgaW4gaW5pdCovCi0raW50IG51bWtxID0gMjsKLSsvKi0tLS0t LS0tLS0tLS0tLS0tLS0tIEVORCBUVU5BQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0r LyogZ2xvYmFscyAqLwotKy8qIGhvdyB3ZSBpbmNyZW1lbnQgdGhlIGlkIHRoZSBzdHJ1Y3RzIHdl IGNyZWF0ZSAqLwotK2xvbmcgdW5zaWduZWQgaW50IGdsb2JhbF9zdHJ1Y3RfaWQgPSAwOwotKwot Ky8qIGtlZXAgYSBjb3B5IG9mIHRoZSBwb2ludGVycyBjcmVhdGVkIGluIHRocmVhZF9sb29wIHRv IGZyZWUgbGF0ZXIgKi8KLStzdHJ1Y3QgYWVzX210X2N0eF9wdHJzICpldnBfcHRycyA9IE5VTEw7 Ci0rCi0rLyogcHJpdmF0ZSBmdW5jdGlvbnMgKi8KLSsKLSsvKgotKyAqIEFkZCBudW0gdG8gY291 bnRlciAnY3RyJwotKyAqLwotK3N0YXRpYyB2b2lkCi0rc3NoX2N0cl9hZGQodV9jaGFyICpjdHIs IHVpbnQzMl90IG51bSwgdV9pbnQgbGVuKQotK3sKLSsJaW50IGk7Ci0rCXVpbnQxNl90IG47Ci0r Ci0rCWZvciAobiA9IDAsIGkgPSBsZW4gLSAxOyBpID49IDAgJiYgKG51bSB8fCBuKTsgaS0tKSB7 Ci0rCQluID0gY3RyW2ldICsgKG51bSAmIDB4ZmYpICsgbjsKLSsJCW51bSA+Pj0gODsKLSsJCWN0 cltpXSA9IG4gJiAweGZmOwotKwkJbiA+Pj0gODsKLSsJfQotK30KLSsKLSsvKgotKyAqIFRocmVh ZHMgbWF5IGJlIGNhbmNlbGxlZCBpbiBhIHB0aHJlYWRfY29uZF93YWl0LCB3ZSBtdXN0IGZyZWUg dGhlIG11dGV4Ci0rICovCi0rc3RhdGljIHZvaWQKLSt0aHJlYWRfbG9vcF9jbGVhbnVwKHZvaWQg KngpCi0rewotKwlwdGhyZWFkX211dGV4X3VubG9jaygocHRocmVhZF9tdXRleF90ICopeCk7Ci0r fQotKwotKyNpZmRlZiBfX0FQUExFX18KLSsvKiBDaGVjayBpZiB3ZSBzaG91bGQgZXhpdCwgd2Ug YXJlIGRvaW5nIGJvdGggY2FuY2VsIGFuZCBleGl0IGNvbmRpdGlvbgotKyAqIHNpbmNlIG9uIE9T WCB0aHJlYWRzIHNlZW0gdG8gb2NjYXNpb25hbGx5IGZhaWwgdG8gbm90aWNlIHdoZW4gdGhleSBo YXZlCi0rICogYmVlbiBjYW5jZWxsZWQuIFdlIHdhbnQgdG8gaGF2ZSBhIGJhY2t1cCB0byBtYWtl IHN1cmUgdGhhdCB3ZSB3b24ndCBoYW5nCi0rICogd2hlbiB0aGUgbWFpbiBwcm9jZXNzIGpvaW4o KS1zIHRoZSBjYW5jZWxsZWQgdGhyZWFkLgotKyAqLwotK3N0YXRpYyB2b2lkCi0rdGhyZWFkX2xv b3BfY2hlY2tfZXhpdChzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVzX210X2N0eCkKLSt7Ci0rCWlu dCBleGl0X2ZsYWc7Ci0rCi0rCXB0aHJlYWRfcndsb2NrX3JkbG9jaygmYWVzX210X2N0eC0+c3Rv cF9sb2NrKTsKLSsJZXhpdF9mbGFnID0gYWVzX210X2N0eC0+ZXhpdF9mbGFnOwotKwlwdGhyZWFk X3J3bG9ja191bmxvY2soJmFlc19tdF9jdHgtPnN0b3BfbG9jayk7Ci0rCi0rCWlmIChleGl0X2Zs YWcpCi0rCQlwdGhyZWFkX2V4aXQoTlVMTCk7Ci0rfQotKyNlbHNlCi0rIyBkZWZpbmUgdGhyZWFk X2xvb3BfY2hlY2tfZXhpdChzKQotKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KLSsKLSsvKgotKyAq IEhlbHBlciBmdW5jdGlvbiB0byB0ZXJtaW5hdGUgdGhlIGhlbHBlciB0aHJlYWRzCi0rICovCi0r c3RhdGljIHZvaWQKLStzdG9wX2FuZF9qb2luX3ByZWdlbl90aHJlYWRzKHN0cnVjdCBhZXNfbXRf Y3R4X3N0ICphZXNfbXRfY3R4KQotK3sKLSsJaW50IGk7Ci0rCi0rI2lmZGVmIF9fQVBQTEVfXwot KwkvKiBub3RpZnkgdGhyZWFkcyB0aGF0IHRoZXkgc2hvdWxkIGV4aXQgKi8KLSsJcHRocmVhZF9y d2xvY2tfd3Jsb2NrKCZhZXNfbXRfY3R4LT5zdG9wX2xvY2spOwotKwlhZXNfbXRfY3R4LT5leGl0 X2ZsYWcgPSBUUlVFOwotKwlwdGhyZWFkX3J3bG9ja191bmxvY2soJmFlc19tdF9jdHgtPnN0b3Bf bG9jayk7Ci0rI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwotKwotKwkvKiBDYW5jZWwgcHJlZ2VuIHRo cmVhZHMgKi8KLSsJZm9yIChpID0gMDsgaSA8IGNpcGhlcl90aHJlYWRzOyBpKyspIHsKLSsJCWRl YnVnX2YgKCJDYW5jZWxlZCAlbHUgKCVsdSwlZCkiLCBhZXNfbXRfY3R4LT50aWRbaV0sIGFlc19t dF9jdHgtPnN0cnVjdF9pZCwKLSsJCSAgICAgICBhZXNfbXRfY3R4LT5pZFtpXSk7Ci0rCQlwdGhy ZWFkX2NhbmNlbChhZXNfbXRfY3R4LT50aWRbaV0pOwotKwl9Ci0rCWZvciAoaSA9IDA7IGkgPCBj aXBoZXJfdGhyZWFkczsgaSsrKSB7Ci0rCQlpZiAocHRocmVhZF9raWxsKGFlc19tdF9jdHgtPnRp ZFtpXSwgMCkgIT0gMCkKLSsJCQlkZWJ1ZzMoIkFFUy1DVFIgTVQgcHRocmVhZF9qb2luIGZhaWx1 cmU6IEludmFsaWQgdGhyZWFkIGlkICVsdSBpbiAlcyIsCi0rCQkJICAgICAgIGFlc19tdF9jdHgt PnRpZFtpXSwgX19mdW5jX18pOwotKwkJZWxzZSB7Ci0rCQkJZGVidWdfZiAoIkpvaW5pbmcgJWx1 ICglbHUsICVkKSIsIGFlc19tdF9jdHgtPnRpZFtpXSwgYWVzX210X2N0eC0+c3RydWN0X2lkLAot KwkJCQkgYWVzX210X2N0eC0+aWRbaV0pOwotKwkJCXB0aHJlYWRfam9pbihhZXNfbXRfY3R4LT50 aWRbaV0sIE5VTEwpOwotKwkJCS8qIHRoaXMgZmluZHMgdGhlIGVudHJ5IGluIHRoZSBoYXNoIHRo YXQgY29ycmVzcG9uZGluZyB0byB0aGUKLSsJCQkgKiB0aHJlYWQgaWQuIFRoYXQncyB1c2VkIHRv IGZpbmQgdGhlIHBvaW50ZXIgdG8gdGhlIGNpcGhlciBzdHJ1Y3QKLSsJCQkgKiBjcmVhdGVkIGlu IHRocmVhZF9sb29wLiAqLwotKwkJCXN0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKnB0cjsKLSsJCQlI QVNIX0ZJTkRfSU5UKGV2cF9wdHJzLCAmYWVzX210X2N0eC0+dGlkW2ldLCBwdHIpOwotKwkJCUVW UF9DSVBIRVJfQ1RYX2ZyZWUocHRyLT5wb2ludGVyKTsKLSsJCQlIQVNIX0RFTChldnBfcHRycywg cHRyKTsKLSsJCQlmcmVlKHB0cik7Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsJ cHRocmVhZF9yd2xvY2tfZGVzdHJveSgmYWVzX210X2N0eC0+dGlkX2xvY2spOwotK30KLSsKLSsv KiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZQotKyAqIFRlc3RpbmcgaW5k aWNhdGVzIHRoYXQgaW4gbW9zdCBhbGwgc2l0dWF0aW9ucyB0aGUgb3B0aW1hbCBudW1iZXIgb2YK LSsgKiB0aHJlYWRzIGlzIDEgbWVhbmluZyAxIGZvciBpbmJvdW5kIGFuZCAxIGZvciBvdXRib3Vu ZC4gVGhlIG9wdGltYWwKLSsgKiBxdWV1ZSBjb3VudCBoYXMgYWxzbyBiZWVuIGRldGVybWluZWQg dG8gYmUgdGhyZWFkX2NvdW50ICsgMS4KLSsgKiBub3RlIHRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0 d28gZ2xvYmFscyAtIG51bWtxIGFuZCBjaXBoZXJfdGhyZWFkcwotKyAqIGl0IHJldHVybnMgdGhl IHZhbHVlIG9mIGNpcGhlcl90aHJlYWRzIGJ1dCBpdCBkb2Vzbid0IG5lZWQgdG8gKi8KLStzdGF0 aWMgaW50IGdldF90aHJlYWRfY291bnQoKSB7Ci0rCi0rCWNoYXIgKiBhZXNfdGhyZWFkcyA9IGdl dGVudigiU1NIX0NJUEhFUl9USFJFQURTIik7Ci0rCWRlYnVnX2YgKCJTU0ggdGhyZWFkIGNvdW50 IGlzICVzIiwgYWVzX3RocmVhZHMpOwotKyAgICAgICAgaWYgKGFlc190aHJlYWRzICE9IE5VTEwg JiYgc3RybGVuKGFlc190aHJlYWRzKSAhPSAwKQotKwkJY2lwaGVyX3RocmVhZHMgPSBhdG9pKGFl c190aHJlYWRzKTsKLSsJZWxzZQotKwkJY2lwaGVyX3RocmVhZHMgPSAxOwotKwotKwlpZiAoY2lw aGVyX3RocmVhZHMgPCAxKQotKyAJCWNpcGhlcl90aHJlYWRzID0gMTsKLSsKLSsJaWYgKGNpcGhl cl90aHJlYWRzID4gTUFYX1RIUkVBRFMpCi0rCQljaXBoZXJfdGhyZWFkcyA9IE1BWF9USFJFQURT OwotKwotKwludW1rcSA9IGNpcGhlcl90aHJlYWRzICsgMTsKLSsKLSsJaWYgKG51bWtxID4gTUFY X05VTUtRKQotKwkJbnVta3EgPSBNQVhfTlVNS1E7Ci0rCi0rCWRlYnVnX2YgKCJTdGFydGluZyAl ZCB0aHJlYWRzIGFuZCAlZCBxdWV1ZXNcbiIsIGNpcGhlcl90aHJlYWRzLCBudW1rcSk7Ci0rCi0r CXJldHVybiAoY2lwaGVyX3RocmVhZHMpOwotK30KLSsKLSsKLSsvKgotKyAqIFRoZSBsaWZlIG9m IGEgcHJlZ2VuIHRocmVhZDoKLSsgKiAgICBGaW5kIGVtcHR5IGtleXN0cmVhbSBxdWV1ZXMgYW5k IGZpbGwgdGhlbSB1c2luZyB0aGVpciBjb3VudGVyLgotKyAqICAgIFdoZW4gZG9uZSwgdXBkYXRl IGNvdW50ZXIgZm9yIHRoZSBuZXh0IGZpbGwuCi0rICovCi0rc3RhdGljIHZvaWQgKgotK3RocmVh ZF9sb29wKHZvaWQgKmpvYikKLSt7Ci0rCUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4OwotKwlzdHJ1 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 cF9jdHggPSB2ZXZwX2N0eDsKLSsKLSsJaWYgKGxlbiA9PSAwKQotKwkJcmV0dXJuIDE7Ci0rCi0r CWlmICgoYWVzX210X2N0eCA9IEVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShldnBfY3R4KSkg PT0gTlVMTCkKLSsJCXJldHVybiAwOwotKwotKwlxID0gJmFlc19tdF9jdHgtPnFbYWVzX210X2N0 eC0+cWlkeF07Ci0rCXJpZHggPSBhZXNfbXRfY3R4LT5yaWR4OwotKwotKwkvKiBzcmMgYWxyZWFk eSBwYWRkZWQgdG8gYmxvY2sgbXVsdGlwbGUgKi8KLSsJc3JjcC5jdTggPSBzcmM7Ci0rCWRlc3Rw LnU4ID0gZGVzdDsKLSsJZG8geyAvKiBkbyB1bnRpbCBsZW4gaXMgMCAqLwotKwkJYnVmID0gcS0+ a2V5c1tyaWR4XTsKLSsJCWJ1ZnAudTggPSBidWY7Ci0rCi0rCQkvKiBmaWd1cmUgb3V0IHRoZSBh bGlnbm1lbnQgb24gdGhlIGZseSAqLwotKyNpZmRlZiBDSVBIRVJfVU5BTElHTkVEX09LCi0rCQlh bGlnbiA9IDA7Ci0rI2Vsc2UKLSsJCWFsaWduID0gZGVzdHAudSB8IHNyY3AudSB8IGJ1ZnAudTsK LSsjZW5kaWYKLSsKLSsJCS8qIHhvciB0aGUgc3JjIGFnYWluc3QgdGhlIGtleSAoYnVmKQotKwkJ ICogZGlmZmVyZW50IHN5c3RlbXMgY2FuIGRvIGFsbCAxNiBieXRlcyBhdCBvbmNlIG9yCi0rCQkg KiBtYXkgbmVlZCB0byBkbyBpdCBpbiA4IG9yIDQgYnl0ZXMgY2h1bmtzCi0rCQkgKiB3b3JzdCBj YXNlIGlzIGRvaW5nIGl0IGFzIGEgbG9vcCAqLwotKyNpZmRlZiBDSVBIRVJfSU5UMTI4X09LCi0r CQkvKiB3aXRoIEdDQyAxMyB3ZSBoYXZlIGhhdmluZyBjb25zaXN0ZW50IHNlZyBmYXVsdHMKLSsJ CSAqIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBTaW5jZSB0aGlzIGlzIGEgY3JpdGljYWwKLSsJ CSAqIGNvZGUgcGF0aCB3ZSBhcmUgcmVtb3ZpbmcgdGhpcyB1bnRpbCB3ZSBoYXZlIGEgc29sdXRp b24KLSsJCSAqIGluIHBsYWNlIC1janIgMDIvMjIvMjQKLSsJCSAqIFRPRE86IEZJWCBUSElTCi0r CQkgKi8KLSsJCS8qIGlmICgoYWxpZ24gJiAweGYpID09IDApIHsgKi8KLSsJCS8qIAlkZXN0cC51 MTI4WzBdID0gc3JjcC51MTI4WzBdIF4gYnVmcC51MTI4WzBdOyAqLwotKwkJLyogfSBlbHNlICov Ci0rI2VuZGlmCi0rCQkvKiA2NCBiaXRzICovCi0rCQkvKiB0aGlzIGlzIGNhdXNpbmcgdW5kZWZp bmVkIGJlaGF2aW91ciBpbiBzYW5pdGl6ZXJzCi0rCQkgKiB0aGlzIGlzIGFubm95aW5nIGJlY2F1 c2UgaXQncyBtb3JlIGVmZmljaWVudAotKwkJICogYnV0IFVCIGlzIG5vdCBzb21ldGhpbmcgSSB3 YW50IHRvIHJldGFpbiAqLwotKwkJLyogaWYgKChhbGlnbiAmIDB4NykgPT0gMCkgeyAqLwotKwkJ LyogCWRlc3RwLnU2NFswXSA9IHNyY3AudTY0WzBdIF4gYnVmcC51NjRbMF07ICovCi0rCQkvKiAJ ZGVzdHAudTY0WzFdID0gc3JjcC51NjRbMV0gXiBidWZwLnU2NFsxXTsgKi8KLSsJCS8qIC9cKiAz MiBiaXRzICpcLyAqLwotKwkJLyogfSBlbHNlICovCi0rCQlpZiAoKGFsaWduICYgMHgzKSA9PSAw KSB7Ci0rCQkJZGVzdHAudTMyWzBdID0gc3JjcC51MzJbMF0gXiBidWZwLnUzMlswXTsKLSsJCQlk ZXN0cC51MzJbMV0gPSBzcmNwLnUzMlsxXSBeIGJ1ZnAudTMyWzFdOwotKwkJCWRlc3RwLnUzMlsy XSA9IHNyY3AudTMyWzJdIF4gYnVmcC51MzJbMl07Ci0rCQkJZGVzdHAudTMyWzNdID0gc3JjcC51 MzJbM10gXiBidWZwLnUzMlszXTsKLSsJCX0gZWxzZSB7Ci0rCQkJLyoxIGJ5dGUgYXQgYSB0aW1l Ki8KLSsJCQlzaXplX3QgaTsKLSsJCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX1NJWkU7ICsr aSkKLSsJCQkJZGVzdFtpXSA9IHNyY1tpXSBeIGJ1ZltpXTsKLSsJCX0KLSsKLSsJCS8qIGluYy9k ZWNyZW1lbnQgdGhlIHBvaW50ZXJzIGJ5IHRoZSBibG9jayBzaXplICgxNikqLwotKwkJZGVzdHAu dSArPSBBRVNfQkxPQ0tfU0laRTsKLSsJCXNyY3AudSArPSBBRVNfQkxPQ0tfU0laRTsKLSsKLSsJ CS8qIEluY3JlbWVudCByZWFkIGluZGV4LCBzd2l0Y2ggcXVldWVzIG9uIHJvbGxvdmVyICovCi0r CQlpZiAoKHJpZHggPSAocmlkeCArIDEpICUgS1FMRU4pID09IDApIHsKLSsJCQlvbGRxID0gcTsK LSsKLSsJCQkvKiBNYXJrIG5leHQgcXVldWUgZHJhaW5pbmcsIG1heSBuZWVkIHRvIHdhaXQgKi8K LSsJCQlhZXNfbXRfY3R4LT5xaWR4ID0gKGFlc19tdF9jdHgtPnFpZHggKyAxKSAlIG51bWtxOwot KwkJCXEgPSAmYWVzX210X2N0eC0+cVthZXNfbXRfY3R4LT5xaWR4XTsKLSsJCQlwdGhyZWFkX211 dGV4X2xvY2soJnEtPmxvY2spOwotKwkJCXdoaWxlIChxLT5xc3RhdGUgIT0gS1FGVUxMKSB7Ci0r CQkJCXB0aHJlYWRfY29uZF93YWl0KCZxLT5jb25kLCAmcS0+bG9jayk7Ci0rCQkJfQotKwkJCXEt PnFzdGF0ZSA9IEtRRFJBSU5JTkc7Ci0rCQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcS0+Y29u ZCk7Ci0rCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOwotKwotKwkJCS8qIE1hcmsg Y29uc3VtZWQgcXVldWUgZW1wdHkgYW5kIHNpZ25hbCBwcm9kdWNlcnMgKi8KLSsJCQlwdGhyZWFk X211dGV4X2xvY2soJm9sZHEtPmxvY2spOwotKwkJCW9sZHEtPnFzdGF0ZSA9IEtRRU1QVFk7Ci0r CQkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmb2xkcS0+Y29uZCk7Ci0rCQkJcHRocmVhZF9tdXRl eF91bmxvY2soJm9sZHEtPmxvY2spOwotKwkJfQotKwl9IHdoaWxlIChsZW4gLT0gQUVTX0JMT0NL X1NJWkUpOwotKwlhZXNfbXRfY3R4LT5yaWR4ID0gcmlkeDsKLSsJcmV0dXJuIDE7Ci0rfQotKwot KyNlbmRpZiAvKldJVEhfT1BFTlNTTDMqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcv Y2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuaCBvcGVuc3NoLTEwLjJwMS9jaXBoZXItY3RyLW10LWZ1 bmN0aW9ucy5oCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9jaXBoZXItY3RyLW10LWZ1bmN0aW9u cy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4y cDEvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuaAkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg0MTk3ODQ2 MiArMDEwMAotQEAgLTAsMCArMSwxNDIgQEAKLSsvKgotKyAqIE9wZW5TU0ggTXVsdGktdGhyZWFk ZWQgQUVTLUNUUiBDaXBoZXIgUHJvdmlkZXIgZm9yIE9wZW5TU0wgMwotKyAqCi0rICogQXV0aG9y OiBCZW5qYW1pbiBCZW5uZXR0IDxiZW5AcHNjLmVkdT4KLSsgKiBBdXRob3I6IE1pa2UgVGFzb3Rh IDx0YXNvdGFAZ21haWwuY29tPgotKyAqIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNj LmVkdT4KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAyMiBQaXR0c2J1cmdoIFN1cGVyY29tcHV0 aW5nIENlbnRlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIEJhc2VkIG9uIG9yaWdp bmFsIE9wZW5TU0ggQUVTLUNUUiBjaXBoZXIuIFNtYWxsIHBvcnRpb25zIHJlbWFpbiB1bmNoYW5n ZWQsCi0rICogQ29weXJpZ2h0IChjKSAyMDAzIE1hcmt1cyBGcmllZGwgPG1hcmt1c0BvcGVuYnNk Lm9yZz4KLSsgKgotKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0 cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0 IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSsgKiBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29w aWVzLgotKyAqCi0rICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBB VVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0rICogV0lUSCBSRUdBUkQgVE8gVEhJUyBT T0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotKyAqIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFC TEUgRk9SCi0rICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00g TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotKyAqIEFDVElPTiBP RiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcg T1VUIE9GCi0rICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0Ug T0YgVEhJUyBTT0ZUV0FSRS4KLSsgKi8KLSsKLSsjaWZuZGVmIENUUl9NVF9GVU5DUwotKyNkZWZp bmUgQ1RSX01UX0ZVTkNTCi0rCi0rLyogaW5jbHVkZXMgKi8KLSsjaW5jbHVkZSAiaW5jbHVkZXMu aCIgLyogbmVlZGVkIHRvIGdldCB2ZXJzaW9uIG51bWJlciAqLwotKyNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KLSsjaW5jbHVkZSA8cHRocmVhZC5oPgotKyNpbmNsdWRlICJjaXBoZXItYWVzY3RyLmgi Ci0rI2luY2x1ZGUgInV0aGFzaC5oIgotKwotKyNpZm5kZWYgVVNFX0JVSUxUSU5fUklKTkRBRUwK LSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjZW5kaWYKLSsKLSsvKiBvbmx5IGZvciBzeXN0 ZW1zIHdpdGggT1NTTCAzICovCi0rI2lmZGVmIFdJVEhfT1BFTlNTTDMKLSsKLSsvKi0tLS0tLS0t LS0tLS0tLS0tLS0tIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsvKiBtYXhpbXVt IG51bWJlciBvZiB0aHJlYWRzIGFuZCBxdWV1ZXMgKi8KLSsjZGVmaW5lIE1BWF9USFJFQURTICAg ICAgMzIKLSsjZGVmaW5lIE1BWF9OVU1LUSAgICAgICAgKE1BWF9USFJFQURTICsgMSkKLSsKLSsv KiBvbmUgcXVldWUgaG9sZHMgODE5MiAqIDQgKiAxNkIgKDUxMktCKSAgb2Yga2V5IGRhdGEgCi0r ICogYmVpbmcgdGhhdCB0aGUgcXVldWVzIGFyZSBkZXN0cm95ZWQgYWZ0ZXIgYSByZWtleQotKyAq IGFuZCBhdCBsZWF0cyBvbmUgaGFzIHRvIGJlIGZ1bGx5IGZpbGxlZCBwcmlvciB0bwotKyAqIGVu Y2lwaGVyaW5nIGRhdGEgd2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGJlIHRvbyBsYXJnZSAqLwotKyNk ZWZpbmUgS1FMRU4gKDgxOTIgKiA0KQotKwotKy8qIFByb2Nlc3NvciBjYWNoZWxpbmUgbGVuZ3Ro ICovCi0rI2RlZmluZSBDQUNIRUxJTkVfTEVOCTY0Ci0rCi0rLyogQ2FuIHRoZSBzeXN0ZW0gZG8g dW5hbGlnbmVkIGxvYWRzIG5hdGl2ZWx5PyAqLwotKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8 fCBcCi0rICAgIGRlZmluZWQoX19pMzg2X18pICAgIHx8IFwKLSsgICAgZGVmaW5lZChfX3Bvd2Vy cGNfXykgfHwgXAotKyAgICBkZWZpbmVkKF9feDg2XzY0X18pCi0rIyBkZWZpbmUgQ0lQSEVSX1VO QUxJR05FRF9PSwotKyNlbmRpZgotKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEyOF9fKQotKyMg ZGVmaW5lIENJUEhFUl9JTlQxMjhfT0sKLSsjZW5kaWYKLSsKLSsvKiBjb250ZXh0IHN0YXRlcyAq LwotKyNkZWZpbmUgSEFWRV9OT05FICAgICAgIDAKLSsjZGVmaW5lIEhBVkVfS0VZICAgICAgICAx Ci0rI2RlZmluZSBIQVZFX0lWICAgICAgICAgMgotKwotKy8qIEtleXN0cmVhbSBRdWV1ZSBzdGF0 ZSAqLwotK2VudW0gewotKwlLUUlOSVQsCi0rCUtRRU1QVFksCi0rCUtRRklMTElORywKLSsJS1FG VUxMLAotKwlLUURSQUlOSU5HCi0rfTsKLSsKLSsvKiBzdHJ1Y3RzICovCi0rCi0rLyogcHJvdmlk ZXIgc3RydWN0ICovCi0rc3RydWN0IHByb3ZpZGVyX2N0eF9zdCB7Ci0rCWNvbnN0IE9TU0xfQ09S RV9IQU5ETEUgKmNvcmVfaGFuZGxlOwotKwlzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKnBy b3ZlcnJfaGFuZGxlOwotK307Ci0rCi0rLyogS2V5c3RyZWFtIFF1ZXVlIHN0cnVjdCAqLwotK3N0 cnVjdCBrcSB7Ci0rCXVfY2hhcgkJa2V5c1tLUUxFTl1bQUVTX0JMT0NLX1NJWkVdOyAvKiBbMzI3 NjhdWzE2Ql0gKi8KLSsJdV9jaGFyCQljdHJbQUVTX0JMT0NLX1NJWkVdOyAvKiAxNkIgKi8KLSsJ dV9jaGFyICAgICAgICAgIHBhZDBbQ0FDSEVMSU5FX0xFTl07Ci0rCXB0aHJlYWRfbXV0ZXhfdAls b2NrOwotKwlwdGhyZWFkX2NvbmRfdAljb25kOwotKwlpbnQgICAgICAgICAgICAgcXN0YXRlOwot Kwl1X2NoYXIgICAgICAgICAgcGFkMVtDQUNIRUxJTkVfTEVOXTsKLSt9OwotKwotKy8qIEFFUyBN VCBjb250ZXh0IHN0cnVjdCAqLwotK3N0cnVjdCBhZXNfbXRfY3R4X3N0IHsKLSsJc3RydWN0IHBy b3ZpZGVyX2N0eF9zdCAqcHJvdmN0eDsKLSsJbG9uZyB1bnNpZ25lZCBpbnQgICAgICAgc3RydWN0 X2lkOwotKwlpbnQgICAgICAgICAgICAgICAgICAgICBrZXlsZW47Ci0rCWludAkJICAgICAgICBz dGF0ZTsKLSsJaW50CQkgICAgICAgIHFpZHg7Ci0rCWludAkJICAgICAgICByaWR4OwotKwlpbnQg ICAgICAgICAgICAgICAgICAgICBpZFtNQVhfVEhSRUFEU107IC8qIDMyICovCi0rCUFFU19LRVkg ICAgICAgICAgICAgICAgIGFlc19rZXk7Ci0rCWNvbnN0IHVfY2hhciAgICAgICAgICAgKm9yaWdf a2V5OwotKwl1X2NoYXIJCSAgICAgICAgYWVzX2NvdW50ZXJbQUVTX0JMT0NLX1NJWkVdOyAvKiAx NkIgKi8KLSsJcHRocmVhZF90CSAgICAgICAgdGlkW01BWF9USFJFQURTXTsgLyogMzIgKi8KLSsJ cHRocmVhZF9yd2xvY2tfdCAgICAgICAgdGlkX2xvY2s7Ci0rCXN0cnVjdCBrcQkgICAgICAgIHFb TUFYX05VTUtRXTsgLyogMzMgKi8KLSsjaWZkZWYgX19BUFBMRV9fCi0rCXB0aHJlYWRfcndsb2Nr X3QgICAgICAgIHN0b3BfbG9jazsKLSsJaW50CQkgICAgICAgIGV4aXRfZmxhZzsKLSsjZW5kaWYg LyogX19BUFBMRV9fICovCi0rCWludCAgICAgICAgICAgICAgICAgICAgIG9uZ29pbmc7IC8qIHBv c3NpYmx5IG5vdCBuZWVkZWQgKi8KLSt9OwotKwotKy8qIHRoaXMgaG9sZHMgYW4gYXJyYXkgb2Yg ZXZwIGNvbnRleHQgcG9pbnRlcnMgdGhhdCBhcmUKLSsgKiBjcmVhdGVkIGluIHRocmVhZF9sb29w LiBTaW5jZSB3ZSBjYW4ndCBlZmZlY3RpdmVseSBmcmVlIHRob3NlCi0rICogY29udGV4dHMgaW4g dGhyZWFkX2xvb3Agd2Uga2VlcCBhIGNvcHkgb2YgdGhvc2UgcG9pbnRlcnMgaGVyZQotKyAqIGFu ZCB0aGVuIGZyZWUgdGhlbSBpbiBzdG9wX2FuZF9qb2luX3ByZWdlbnRocmVhZHMKLSsgKiBjanIg Mi8yLzIwMjMKLSsgKi8KLStzdHJ1Y3QgYWVzX210X2N0eF9wdHJzIHsKLSsJRVZQX0NJUEhFUl9D VFggKnBvaW50ZXI7Ci0rICAgICAgICBwdGhyZWFkX3QgICAgICAgdGlkOwotKwlVVF9oYXNoX2hh bmRsZSAgaGg7Ci0rfTsKLSsKLStpbnQgYWVzX210X2RvX2NpcGhlcih2b2lkICosIHVfY2hhciAq LCBzaXplX3QgKiwgc2l6ZV90LCBjb25zdCB1X2NoYXIgKiwgc2l6ZV90KTsKLStpbnQgYWVzX210 X3N0YXJ0X3RocmVhZHModm9pZCAqLCBjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCB1X2No YXIgKiwgc2l6ZV90LCBjb25zdCBPU1NMX1BBUkFNICopOwotK3ZvaWQgYWVzX210X2ZyZWVjdHgo dm9pZCAqKTsKLSt2b2lkICphZXNfbXRfbmV3Y3R4XzI1Nih2b2lkICopOwotK3ZvaWQgKmFlc19t dF9uZXdjdHhfMTkyKHZvaWQgKik7Ci0rdm9pZCAqYWVzX210X25ld2N0eF8xMjgodm9pZCAqKTsK LSsKLSsjZW5kaWYgLyogV0lUSCBPUEVOU1NMICovCi0rI2VuZGlmIC8qIENUUl9NVF9GVU5DUyAq LwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLWN0ci1tdC1wcm92aWRlci5j IG9wZW5zc2gtMTAuMnAxL2NpcGhlci1jdHItbXQtcHJvdmlkZXIuYwotLS0tIG9wZW5zc2gtMTAu MnAxLm9yaWcvY2lwaGVyLWN0ci1tdC1wcm92aWRlci5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvY2lwaGVyLWN0ci1tdC1wcm92aWRlci5j CTIwMjYtMDMtMTggMTU6MTM6MTcuODQyMDg5MTMzICswMTAwCi1AQCAtMCwwICsxLDM5MCBAQAot Ky8qCi0rICogT3BlblNTSCBNdWx0aS10aHJlYWRlZCBBRVMtQ1RSIENpcGhlciBQcm92aWRlciBm b3IgT3BlblNTTCAzCi0rICoKLSsgKiBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5l ZHU+Ci0rICogQ29weXJpZ2h0IChjKSAyMDIyIFBpdHRzYnVyZ2ggU3VwZXJjb21wdXRpbmcgQ2Vu dGVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUGVybWlzc2lvbiB0byB1c2UsIGNv cHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0rICogcHVy cG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0 IHRoZSBhYm92ZQotKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0rICoKLSsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSsgKiBX SVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5U SUVTIE9GCi0rICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSsgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJ UkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0rICogV0hBVFNP RVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVS IElOIEFOCi0rICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJ T1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSsgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotKyAqLwotKwotKy8qIGJhc2Vk IG9uIHZpZW5lcmUuYyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm92aWRlci1jb3JuZXIvdmln ZW5lcmUgYnkKLSsgKiBSaWNoYXJkIExldml0dGUgcHJvdmlkZWQgdW5kZXIgYSBDQzAgUHVibGlj IExpY2Vuc2UuICovCi0rCi0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rCi0rLyogb25seSBmb3Ig c3lzdGVtcyB3aXRoIE9TU0wgMy4wKyAqLwotKyNpZmRlZiBXSVRIX09QRU5TU0wzCi0rCi0rI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9jb3JlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY29yZV9kaXNwYXRjaC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2NvcmVfbmFtZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsj aW5jbHVkZSAieG1hbGxvYy5oIgotKyNpbmNsdWRlICJvc3NsMy1wcm92aWRlci1lcnIuaCIKLSsj aW5jbHVkZSAibnVtLmgiCi0rI2luY2x1ZGUgImNpcGhlci1jdHItbXQtZnVuY3Rpb25zLmgiCi0r Ci0rI2RlZmluZSBFUlJfSEFORExFKGN0eCkgKChjdHgpLT5wcm92Y3R4LT5wcm92ZXJyX2hhbmRs ZSkKLSsKLSsvKiBmb3J3YXJkIGRlY2xhcnRpb24gb2YgY2lwaGVyIGZ1bmN0aW9ucyAqLwotKy8q IGNpcGhlciBjb250ZXh0IGZ1bmN0aW9ucyAqLwotK09TU0xfRlVOQ19jaXBoZXJfbmV3Y3R4X2Zu IGFlc19tdF9uZXdjdHhfMjU2OwotK09TU0xfRlVOQ19jaXBoZXJfbmV3Y3R4X2ZuIGFlc19tdF9u ZXdjdHhfMTkyOwotK09TU0xfRlVOQ19jaXBoZXJfbmV3Y3R4X2ZuIGFlc19tdF9uZXdjdHhfMTI4 OwotK09TU0xfRlVOQ19jaXBoZXJfZnJlZWN0eF9mbiBhZXNfbXRfZnJlZWN0eDsKLSsKLSsvKiBw YXJhbSByZWxhdGVkIGZ1bmN0aW9uKi8KLStzdGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9nZXRfcGFy YW1zX2ZuIGFlc19tdF9nZXRfcGFyYW1zXzI1NjsKLStzdGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9n ZXRfcGFyYW1zX2ZuIGFlc19tdF9nZXRfcGFyYW1zXzE5MjsKLStzdGF0aWMgT1NTTF9GVU5DX2Np cGhlcl9nZXRfcGFyYW1zX2ZuIGFlc19tdF9nZXRfcGFyYW1zXzEyODsKLStzdGF0aWMgT1NTTF9G VU5DX2NpcGhlcl9nZXR0YWJsZV9wYXJhbXNfZm4gYWVzX210X2dldHRhYmxlX3BhcmFtczsKLStz dGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9zZXRfY3R4X3BhcmFtc19mbiBhZXNfbXRfc2V0X2N0eF9w YXJhbXM7Ci0rc3RhdGljIE9TU0xfRlVOQ19jaXBoZXJfZ2V0X2N0eF9wYXJhbXNfZm4gYWVzX210 X2dldF9jdHhfcGFyYW1zOwotK3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX3NldHRhYmxlX2N0eF9w YXJhbXNfZm4gYWVzX210X3NldHRhYmxlX2N0eF9wYXJhbXM7Ci0rc3RhdGljIE9TU0xfRlVOQ19j aXBoZXJfZ2V0dGFibGVfY3R4X3BhcmFtc19mbiBhZXNfbXRfZ2V0dGFibGVfY3R4X3BhcmFtczsK LSsKLSsvKiBlbi9kZWNpcGhlciBmdW5jdGlvbnMgKi8KLStPU1NMX0ZVTkNfY2lwaGVyX2VuY3J5 cHRfaW5pdF9mbiBhZXNfbXRfc3RhcnRfdGhyZWFkczsKLStPU1NMX0ZVTkNfY2lwaGVyX2RlY3J5 cHRfaW5pdF9mbiBhZXNfbXRfc3RhcnRfdGhyZWFkczsKLStPU1NMX0ZVTkNfY2lwaGVyX3VwZGF0 ZV9mbiBhZXNfbXRfZG9fY2lwaGVyOwotKwotKy8qIHByb3ZpZGVyIGNvbnRleHQgKi8KLStzdGF0 aWMgT1NTTF9GVU5DX3Byb3ZpZGVyX3F1ZXJ5X29wZXJhdGlvbl9mbiBhZXNfbXRfcHJvdl9xdWVy eTsKLStzdGF0aWMgT1NTTF9GVU5DX3Byb3ZpZGVyX2dldF9yZWFzb25fc3RyaW5nc19mbiBhZXNf bXRfcHJvdl9yZWFzb25zOwotK3N0YXRpYyBPU1NMX0ZVTkNfcHJvdmlkZXJfdGVhcmRvd25fZm4g YWVzX210X3Byb3ZfdGVhcmRvd247Ci0rc3RhdGljIE9TU0xfRlVOQ19wcm92aWRlcl9nZXRfcGFy YW1zX2ZuIGFlc19tdF9wcm92X2dldF9wYXJhbXM7IAotK09TU0xfcHJvdmlkZXJfaW5pdF9mbiBP U1NMX3Byb3ZpZGVyX2luaXQ7IC8qIG5lZWQgdGhpcz8gKi8KLSsKLSsvKiBlcnJvciBmdW5jdGlv bnMgKi8KLStPU1NMX0ZVTkNfY29yZV9uZXdfZXJyb3JfZm4gKmNfbmV3X2Vycm9yOwotK09TU0xf RlVOQ19jb3JlX3NldF9lcnJvcl9kZWJ1Z19mbiAqY19zZXRfZXJyb3JfZGVidWc7Ci0rT1NTTF9G VU5DX2NvcmVfdnNldF9lcnJvcl9mbiAqY192c2V0X2Vycm9yOwotK09TU0xfRlVOQ19jb3JlX3Nl dF9lcnJvcl9tYXJrX2ZuICpjX3NldF9lcnJvcl9tYXJrOwotK09TU0xfRlVOQ19jb3JlX2NsZWFy X2xhc3RfZXJyb3JfbWFya19mbiAqY19jbGVhcl9sYXN0X2Vycm9yX21hcms7Ci0rT1NTTF9GVU5D X2NvcmVfcG9wX2Vycm9yX3RvX21hcmtfZm4gKmNfcG9wX2Vycm9yX3RvX21hcms7Ci0rCi0rLyog RXJyb3JzIHVzZWQgaW4gdGhpcyBwcm92aWRlciAqLwotKyNkZWZpbmUgQUVTX01UX0VfTUFMTE9D ICAgICAgICAgICAxCi0rI2RlZmluZSBBRVNfTVRfT05HT0lOR19PUEVSQVRJT04gIDIKLSsjZGVm aW5lIEFFU19NVF9CQURfS0VZTEVOICAgICAgICAgMwotKwotKy8qIHR5cGVkZWYgZm9yIGZ1bmN0 aW9uIHBvaW50ZXJzICovCi0rdHlwZWRlZiB2b2lkKCpmcHRyX3QpKHZvaWQpOwotKwotKy8qIGFs bCBvZiB0aGUgdmFyaW91cyBhcnJheXMgd2UgbmVlZCAqLwotKwotKy8qIEJBRF9LRVlMRU4gaXNu J3QgYmVpbmcgdXNlZCBhdCB0aGUgbW9tZW50ICovCi0rY29uc3QgT1NTTF9JVEVNIHJlYXNvbnNb XSA9IHsKLSsJeyBBRVNfTVRfRV9NQUxMT0MsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIiB9 LAotKwl7IEFFU19NVF9PTkdPSU5HX09QRVJBVElPTiwgIk9wZXJhdGlvbiB1bmRlcndheSIgfSwK LSsJeyBBRVNfTVRfQkFEX0tFWUxFTiwgIk9ubHkgMjU2LCAxOTIsIGFuZCAxMjggS2V5IGxlbmd0 aHMgYXJlIHN1cHBvcnRlZCIgfSwKLSsJeyAwLCBOVUxMIH0gLyogVGVybWluYXRpb24gKi8KLSt9 OwotKwotKy8qIGZ1bmN0aW9uIG1hcHBpbmcgZm9yIDI1NnwxOTJ8MTI4IGtleSBsZW5ndGhzICov Ci0rY29uc3QgT1NTTF9ESVNQQVRDSCBhZXNfbXRfZnVuY3NfMjU2W10gPSB7Ci0rCXsgT1NTTF9G VU5DX0NJUEhFUl9ORVdDVFgsIChmcHRyX3QpYWVzX210X25ld2N0eF8yNTYgfSAsCi0rCXsgT1NT TF9GVU5DX0NJUEhFUl9GUkVFQ1RYLCAoZnB0cl90KWFlc19tdF9mcmVlY3R4IH0sCi0rCXsgT1NT TF9GVU5DX0NJUEhFUl9FTkNSWVBUX0lOSVQsIChmcHRyX3QpYWVzX210X3N0YXJ0X3RocmVhZHMg fSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0RFQ1JZUFRfSU5JVCwgKGZwdHJfdClhZXNfbXRfc3Rh cnRfdGhyZWFkcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfVVBEQVRFLCAoZnB0cl90KWFlc19t dF9kb19jaXBoZXIgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVF9QQVJBTVMsIChmcHRyX3Qp YWVzX210X2dldF9wYXJhbXNfMjU2IH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJMRV9Q QVJBTVMsIChmcHRyX3QpYWVzX210X2dldHRhYmxlX3BhcmFtcyB9LAotKwl7IE9TU0xfRlVOQ19D SVBIRVJfR0VUX0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldF9jdHhfcGFyYW1zIH0sCi0r CXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJMRV9DVFhfUEFSQU1TLAotKwkgIChmcHRyX3QpYWVz X210X2dldHRhYmxlX2N0eF9wYXJhbXMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX1NFVF9DVFhf UEFSQU1TLCAoZnB0cl90KWFlc19tdF9zZXRfY3R4X3BhcmFtcyB9LAotKwl7IE9TU0xfRlVOQ19D SVBIRVJfU0VUVEFCTEVfQ1RYX1BBUkFNUywKLSsJICAoZnB0cl90KWFlc19tdF9zZXR0YWJsZV9j dHhfcGFyYW1zIH0sCi0rCXsgMCwgTlVMTCB9Ci0rfTsKLSsKLStjb25zdCBPU1NMX0RJU1BBVENI IGFlc19tdF9mdW5jc18xOTJbXSA9IHsKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX05FV0NUWCwgKGZw dHJfdClhZXNfbXRfbmV3Y3R4XzE5MiB9ICwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0ZSRUVDVFgs IChmcHRyX3QpYWVzX210X2ZyZWVjdHggfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0VOQ1JZUFRf SU5JVCwgKGZwdHJfdClhZXNfbXRfc3RhcnRfdGhyZWFkcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBI RVJfREVDUllQVF9JTklULCAoZnB0cl90KWFlc19tdF9zdGFydF90aHJlYWRzIH0sCi0rCXsgT1NT TF9GVU5DX0NJUEhFUl9VUERBVEUsIChmcHRyX3QpYWVzX210X2RvX2NpcGhlciB9LAotKwl7IE9T U0xfRlVOQ19DSVBIRVJfR0VUX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0X3BhcmFtc18xOTIg fSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVFRBQkxFX1BBUkFNUywgKGZwdHJfdClhZXNfbXRf Z2V0dGFibGVfcGFyYW1zIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfQ1RYX1BBUkFNUywg KGZwdHJfdClhZXNfbXRfZ2V0X2N0eF9wYXJhbXMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dF VFRBQkxFX0NUWF9QQVJBTVMsCi0rCSAgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVfY3R4X3BhcmFt cyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfU0VUX0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210 X3NldF9jdHhfcGFyYW1zIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9TRVRUQUJMRV9DVFhfUEFS QU1TLAotKwkgIChmcHRyX3QpYWVzX210X3NldHRhYmxlX2N0eF9wYXJhbXMgfSwKLSsJeyAwLCBO VUxMIH0KLSt9OwotKwotK2NvbnN0IE9TU0xfRElTUEFUQ0ggYWVzX210X2Z1bmNzXzEyOFtdID0g ewotKwl7IE9TU0xfRlVOQ19DSVBIRVJfTkVXQ1RYLCAoZnB0cl90KWFlc19tdF9uZXdjdHhfMTI4 IH0gLAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfRlJFRUNUWCwgKGZwdHJfdClhZXNfbXRfZnJlZWN0 eCB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfRU5DUllQVF9JTklULCAoZnB0cl90KWFlc19tdF9z dGFydF90aHJlYWRzIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9ERUNSWVBUX0lOSVQsIChmcHRy X3QpYWVzX210X3N0YXJ0X3RocmVhZHMgfSwKLSsJeyBPU1NMX0ZVTkNfQ0lQSEVSX1VQREFURSwg KGZwdHJfdClhZXNfbXRfZG9fY2lwaGVyIH0sCi0rCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfUEFS QU1TLCAoZnB0cl90KWFlc19tdF9nZXRfcGFyYW1zXzEyOCB9LAotKwl7IE9TU0xfRlVOQ19DSVBI RVJfR0VUVEFCTEVfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXR0YWJsZV9wYXJhbXMgfSwKLSsJ eyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXRfY3R4 X3BhcmFtcyB9LAotKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUVEFCTEVfQ1RYX1BBUkFNUywKLSsJ ICAoZnB0cl90KWFlc19tdF9nZXR0YWJsZV9jdHhfcGFyYW1zIH0sCi0rCXsgT1NTTF9GVU5DX0NJ UEhFUl9TRVRfQ1RYX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfc2V0X2N0eF9wYXJhbXMgfSwKLSsJ eyBPU1NMX0ZVTkNfQ0lQSEVSX1NFVFRBQkxFX0NUWF9QQVJBTVMsCi0rCSAgKGZwdHJfdClhZXNf bXRfc2V0dGFibGVfY3R4X3BhcmFtcyB9LAotKwl7IDAsIE5VTEwgfQotK307Ci0rCi0rLyogdGhl IGNpcGhlcnMgZm91bmQgaW4gdGhpcyBwcm92aWRlciAqLwotK2NvbnN0IE9TU0xfQUxHT1JJVEhN IGFlc19tdF9jaXBoZXJzW10gPSB7Ci0rCXsgImFlc19jdHJfbXRfMjU2IiwgInByb3ZpZGVyPWhw bnNzaCIsIGFlc19tdF9mdW5jc18yNTYsIE5VTEwgfSwKLSsJeyAiYWVzX2N0cl9tdF8xOTIiLCAi cHJvdmlkZXI9aHBuc3NoIiwgYWVzX210X2Z1bmNzXzE5MiwgTlVMTCB9LAotKwl7ICJhZXNfY3Ry X210XzEyOCIsICJwcm92aWRlcj1ocG5zc2giLCBhZXNfbXRfZnVuY3NfMTI4LCBOVUxMIH0sCi0r CXsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9Ci0rfTsKLSsKLSsvKiBmdW5jdGlvbiBtYXBwaW5n IGZvciBwcm92aWRlciBtZXRob2RzICovCi0rY29uc3QgT1NTTF9ESVNQQVRDSCBwcm92aWRlcl9m dW5jdGlvbnNbXSA9IHsKLSsJeyBPU1NMX0ZVTkNfUFJPVklERVJfVEVBUkRPV04sIChmcHRyX3Qp YWVzX210X3Byb3ZfdGVhcmRvd24gfSwKLSsJeyBPU1NMX0ZVTkNfUFJPVklERVJfUVVFUllfT1BF UkFUSU9OLCAoZnB0cl90KWFlc19tdF9wcm92X3F1ZXJ5IH0sCi0rCXsgT1NTTF9GVU5DX1BST1ZJ REVSX0dFVF9QQVJBTVMsIChmcHRyX3QpYWVzX210X3Byb3ZfZ2V0X3BhcmFtcyB9LAotKwl7IE9T U0xfRlVOQ19QUk9WSURFUl9HRVRfUkVBU09OX1NUUklOR1MsIChmcHRyX3QpYWVzX210X3Byb3Zf cmVhc29ucyB9LAotKwl7IDAsIE5VTEwgfQotK307Ci0rCi0rc3RhdGljIGNvbnN0IE9TU0xfUEFS QU0gY3R4X2dldF9wYXJhbV90YWJsZVtdID0gewotKyAgICAgICAgeyAia2V5bGVuIiwgT1NTTF9Q QVJBTV9VTlNJR05FRF9JTlRFR0VSLCBOVUxMLCBzaXplb2Yoc2l6ZV90KSwgMCB9LAotKyAgICAg ICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAwIH0sCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgT1NTTF9Q QVJBTSBjaXBoZXJfZ2V0X3BhcmFtX3RhYmxlW10gPSB7Ci0rICAgICAgICB7ICJibG9ja3NpemUi LCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIsIE5VTEwsIHNpemVvZihzaXplX3QpLCAwIH0s Ci0rICAgICAgICB7ICJrZXlsZW4iLCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIsIE5VTEws IHNpemVvZihzaXplX3QpLCAwIH0sCi0rICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIDAgfSwK LSt9OwotKwotK3N0YXRpYyBjb25zdCBPU1NMX1BBUkFNIGNpcGhlcl9zZXRfcGFyYW1fdGFibGVb XSA9IHsKLSsJeyAia2V5bGVuIiwgT1NTTF9QQVJBTV9VTlNJR05FRF9JTlRFR0VSLCBOVUxMLCBz aXplb2Yoc2l6ZV90KSwgMCB9LAotKwl7IE5VTEwsIDAsIE5VTEwsIDAsIDAgfSwKLSt9OwotKwot KwotKy8qIHByb3ZpZGVyIGZ1bmN0aW9ucyBzdGFydCBoZXJlICovCi0rCi0rc3RhdGljIHZvaWQg cHJvdmlkZXJfY3R4X2ZyZWUoc3RydWN0IHByb3ZpZGVyX2N0eF9zdCAqY3R4KQotK3sKLSsgICAg aWYgKGN0eCAhPSBOVUxMKQotKyAgICAgICAgcHJvdmVycl9mcmVlX2hhbmRsZShjdHgtPnByb3Zl cnJfaGFuZGxlKTsKLSsgICAgZnJlZShjdHgpOwotK30KLSsKLStzdGF0aWMgc3RydWN0IHByb3Zp ZGVyX2N0eF9zdCAqcHJvdmlkZXJfY3R4X25ldyhjb25zdCBPU1NMX0NPUkVfSEFORExFICpjb3Jl LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IE9TU0xfRElTUEFUQ0ggKmluKQotK3sKLSsgICAgc3RydWN0IHByb3ZpZGVyX2N0eF9zdCAqY3R4 OwotKwotKyAgICBpZiAoKGN0eCA9IG1hbGxvYyhzaXplb2YoKmN0eCkpKSAhPSBOVUxMCi0rICAg ICAgICAmJiAoY3R4LT5wcm92ZXJyX2hhbmRsZSA9IHByb3ZlcnJfbmV3X2hhbmRsZShjb3JlLCBp bikpICE9IE5VTEwpIHsKLSsgICAgICAgIGN0eC0+Y29yZV9oYW5kbGUgPSBjb3JlOwotKyAgICB9 IGVsc2UgewotKyAgICAgICAgcHJvdmlkZXJfY3R4X2ZyZWUoY3R4KTsKLSsgICAgICAgIGN0eCA9 IE5VTEw7Ci0rICAgIH0KLSsgICAgcmV0dXJuIGN0eDsKLSt9Ci0rCi0rCi0rLyogcmV0dXJucyB0 aGUgYXBwcm9wcmlhdGUgYWxnbyB0YWJsZSBmb3IgdGhlIHJlcXVlc3RlZCBmdW5jdGlvbgotKyAq IGluIHRoaXMgY2FzZSB3ZSBzaG91bGQgb25seSBiZSB3b3JraW5nIHdpdGggT1BfQ0lQSEVSICov Ci0rY29uc3QgT1NTTF9BTEdPUklUSE0gKmFlc19tdF9wcm92X3F1ZXJ5KHZvaWQgKnByb3ZjdHgs IGludCBvcGVyYXRpb25faWQsCi0rCQkJCSAgICAgaW50ICpub19zdG9yZSkKLSt7Ci0rCXN3aXRj aCAob3BlcmF0aW9uX2lkKSB7Ci0rCWNhc2UgT1NTTF9PUF9DSVBIRVI6Ci0rCQlyZXR1cm4gYWVz X210X2NpcGhlcnM7Ci0rCX0KLSsJcmV0dXJuIE5VTEw7Ci0rfQotKwotK2NvbnN0IE9TU0xfSVRF TSAqYWVzX210X3Byb3ZfcmVhc29ucyh2b2lkICpwcm92Y3R4KQotK3sKLSsJcmV0dXJuIHJlYXNv bnM7Ci0rfQotKwotK3N0YXRpYyBpbnQgYWVzX210X3Byb3ZfZ2V0X3BhcmFtcyh2b2lkICpwcm92 Y3R4LCBPU1NMX1BBUkFNICpwYXJhbXMpCi0rewotKwlPU1NMX1BBUkFNICpwOwotKwlpbnQgb2sg PSAxOwotKwotKwljaGFyICpWRVJTSU9OPSIxLjAiOwotKwljaGFyICpCVUlMRFRZUEU9ImFlc19j dHJfbXRAaHBuc3NoLm9yZyI7Ci0rCQotKwlmb3IocCA9IHBhcmFtczsgcC0+a2V5ICE9IE5VTEw7 IHArKykKLSsJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgInZlcnNpb24iKSA9PSAwKSB7Ci0rCQkJ Kihjb25zdCB2b2lkICoqKXAtPmRhdGEgPSBWRVJTSU9OOwotKwkJCXAtPnJldHVybl9zaXplID0g c3RybGVuKFZFUlNJT04pOwotKwkJfSBlbHNlIGlmIChzdHJjYXNlY21wKHAtPmtleSwgImJ1aWxk aW5mbyIpID09IDAKLSsJCQkgICAmJiBCVUlMRFRZUEVbMF0gIT0gJ1wwJykgewotKwkJCSooY29u c3Qgdm9pZCAqKilwLT5kYXRhID0gQlVJTERUWVBFOwotKwkJCXAtPnJldHVybl9zaXplID0gc3Ry bGVuKEJVSUxEVFlQRSk7Ci0rCQl9Ci0rCXJldHVybiBvazsKLSt9Ci0rCi0rLyogVGhlIGZ1bmN0 aW9uIHRoYXQgdGVhcnMgZG93biB0aGlzIHByb3ZpZGVyICovCi0rc3RhdGljIHZvaWQgYWVzX210 X3Byb3ZfdGVhcmRvd24odm9pZCAqdnByb3ZjdHgpCi0rewotKyAgICBwcm92aWRlcl9jdHhfZnJl ZSh2cHJvdmN0eCk7Ci0rfQotKwotK2ludCBPU1NMX3Byb3ZpZGVyX2luaXQoY29uc3QgT1NTTF9D T1JFX0hBTkRMRSAqY29yZSwKLSsJCSAgICAgICBjb25zdCBPU1NMX0RJU1BBVENIICppbiwKLSsJ CSAgICAgICBjb25zdCBPU1NMX0RJU1BBVENIICoqb3V0LAotKwkJICAgICAgIHZvaWQgKip2cHJv dmN0eCkKLSt7Ci0rICAgIGlmICgoKnZwcm92Y3R4ID0gcHJvdmlkZXJfY3R4X25ldyhjb3JlLCBp bikpID09IE5VTEwpCi0rCSAgICByZXR1cm4gMDsKLSsgICAgKm91dCA9IHByb3ZpZGVyX2Z1bmN0 aW9uczsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIHBhcmFtZXRlciBmdW5jdGlvbnMgZm9y IDI1NnwxOTJ8MTI4IGJpdCBrZXkgbGVuZ3RocyAqLwotK3N0YXRpYyBpbnQgYWVzX210X2dldF9w YXJhbXNfMjU2KE9TU0xfUEFSQU0gcGFyYW1zW10pCi0rewotKwlPU1NMX1BBUkFNICpwOwotKwlp bnQgb2sgPSAxOwotKwkKLSsJZm9yIChwID0gcGFyYW1zOyBwLT5rZXkgIT0gTlVMTDsgcCsrKSB7 Ci0rCQlpZiAoc3RyY2FzZWNtcChwLT5rZXksICJibG9ja3NpemUiKSA9PSAwKQotKwkJCWlmIChw cm92bnVtX3NldF9zaXplX3QocCwgQUVTX0JMT0NLX1NJWkUpIDwgMCkgewotKwkJCQlvayA9IDA7 Ci0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgImtleWxl biIpID09IDApIHsKLSsJCQlzaXplX3Qga2V5bCA9IDMyOwotKwkJCQotKwkJCWlmIChwcm92bnVt X3NldF9zaXplX3QocCwga2V5bCkgPCAwKSB7Ci0rCQkJCW9rID0gMDsKLSsJCQkJY29udGludWU7 Ci0rCQkJfQotKwkJfQotKwl9Ci0rCXJldHVybiBvazsKLSt9Ci0rCi0rc3RhdGljIGludCBhZXNf bXRfZ2V0X3BhcmFtc18xOTIoT1NTTF9QQVJBTSBwYXJhbXNbXSkKLSt7Ci0rCU9TU0xfUEFSQU0g KnA7Ci0rCWludCBvayA9IDE7Ci0rCQotKwlmb3IgKHAgPSBwYXJhbXM7IHAtPmtleSAhPSBOVUxM OyBwKyspIHsKLSsJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgImJsb2Nrc2l6ZSIpID09IDApCi0r CQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBBRVNfQkxPQ0tfU0laRSkgPCAwKSB7Ci0rCQkJ CW9rID0gMDsKLSsJCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5 LCAia2V5bGVuIikgPT0gMCkgewotKwkJCXNpemVfdCBrZXlsID0gMjQ7Ci0rCQkJCi0rCQkJaWYg KHByb3ZudW1fc2V0X3NpemVfdChwLCBrZXlsKSA8IDApIHsKLSsJCQkJb2sgPSAwOwotKwkJCQlj b250aW51ZTsKLSsJCQl9Ci0rCQl9Ci0rCX0KLSsJcmV0dXJuIG9rOwotK30KLSsKLStzdGF0aWMg aW50IGFlc19tdF9nZXRfcGFyYW1zXzEyOChPU1NMX1BBUkFNIHBhcmFtc1tdKQotK3sKLSsJT1NT TF9QQVJBTSAqcDsKLSsJaW50IG9rID0gMTsKLSsJCi0rCWZvciAocCA9IHBhcmFtczsgcC0+a2V5 ICE9IE5VTEw7IHArKykgewotKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYmxvY2tzaXplIikg PT0gMCkKLSsJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIEFFU19CTE9DS19TSVpFKSA8IDAp IHsKLSsJCQkJb2sgPSAwOwotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAoc3RyY2FzZWNt cChwLT5rZXksICJrZXlsZW4iKSA9PSAwKSB7Ci0rCQkJc2l6ZV90IGtleWwgPSAxNjsKLSsJCQkK LSsJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIGtleWwpIDwgMCkgewotKwkJCQlvayA9IDA7 Ci0rCQkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCX0KLSsJfQotKwlyZXR1cm4gb2s7Ci0rfQotKwot Ky8qIFBhcmFtZXRlcnMgdGhhdCBsaWJjcnlwdG8gY2FuIGdldCBmcm9tIHRoaXMgaW1wbGVtZW50 YXRpb24gKi8KLStzdGF0aWMgY29uc3QgT1NTTF9QQVJBTSAqYWVzX210X2dldHRhYmxlX3BhcmFt cyh2b2lkICpwcm92Y3R4KQotK3sKLSsJcmV0dXJuIGNpcGhlcl9nZXRfcGFyYW1fdGFibGU7Ci0r fQotKwotK3N0YXRpYyBjb25zdCBPU1NMX1BBUkFNICphZXNfbXRfZ2V0dGFibGVfY3R4X3BhcmFt cyh2b2lkICpjY3R4LCB2b2lkICpwcm92Y3R4KQotK3sKLSsJcmV0dXJuIGN0eF9nZXRfcGFyYW1f dGFibGU7Ci0rfQotKwotK3N0YXRpYyBpbnQgYWVzX210X2dldF9jdHhfcGFyYW1zKHZvaWQgKnZj dHgsIE9TU0xfUEFSQU0gcGFyYW1zW10pCi0rewotKyAgICBzdHJ1Y3QgYWVzX210X2N0eF9zdCAq Y3R4ID0gdmN0eDsKLSsgICAgaW50IG9rID0gMTsKLSsKLSsgICAgaWYgKGN0eC0+a2V5bGVuID4g MCkgewotKyAgICAgICAgT1NTTF9QQVJBTSAqcDsKLSsKLSsgICAgICAgIGZvciAocCA9IHBhcmFt czsgcC0+a2V5ICE9IE5VTEw7IHArKykKLSsgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChwLT5r ZXksICJrZXlsZW4iKSA9PSAwCi0rICAgICAgICAgICAgICAgICYmIHByb3ZudW1fc2V0X3NpemVf dChwLCBjdHgtPmtleWxlbikgPCAwKSB7Ci0rICAgICAgICAgICAgICAgIG9rID0gMDsKLSsgICAg ICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICAgICAgfQotKyAgICB9Ci0rICAgIHJldHVy biBvazsKLSt9Ci0rCi0rLyogUGFyYW1ldGVycyB0aGF0IGxpYmNyeXB0byBjYW4gc2VuZCB0byB0 aGlzIGltcGxlbWVudGF0aW9uICovCi0rc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gKmFlc19tdF9z ZXR0YWJsZV9jdHhfcGFyYW1zKHZvaWQgKmNjdHgsIHZvaWQgKnByb3ZjdHgpCi0rewotKyAgICBy ZXR1cm4gY2lwaGVyX3NldF9wYXJhbV90YWJsZTsKLSt9Ci0rCi0rc3RhdGljIGludCBhZXNfbXRf c2V0X2N0eF9wYXJhbXModm9pZCAqdmN0eCwgY29uc3QgT1NTTF9QQVJBTSBwYXJhbXNbXSkKLSt7 Ci0rICAgIHN0cnVjdCBhZXNfbXRfY3R4X3N0ICpjdHggPSB2Y3R4OwotKyAgICBjb25zdCBPU1NM X1BBUkFNICpwOwotKyAgICBpbnQgb2sgPSAxOwotKwotKyAgICBpZiAoY3R4LT5vbmdvaW5nKSB7 Ci0rICAgICAgICBFUlJfcmFpc2UoRVJSX0hBTkRMRShjdHgpLCBBRVNfTVRfT05HT0lOR19PUEVS QVRJT04pOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgZm9yIChwID0gcGFy YW1zOyBwLT5rZXkgIT0gTlVMTDsgcCsrKQotKyAgICAgICAgaWYgKHN0cmNhc2VjbXAocC0+a2V5 LCAia2V5bGVuIikgPT0gMCkgewotKyAgICAgICAgICAgIHNpemVfdCBrZXlsID0gMDsKLSsKLSsg ICAgICAgICAgICBpZiAocHJvdm51bV9nZXRfc2l6ZV90KCZrZXlsLCBwKSA8IDApIHsKLSsgICAg ICAgICAgICAgICAgb2sgPSAwOwotKyAgICAgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAg ICAgICB9Ci0rICAgICAgICAgICAgY3R4LT5rZXlsZW4gPSBrZXlsOwotKyAgICAgICAgfQotKyAg ICByZXR1cm4gb2s7Ci0rfQotKwotKyNlbmRpZiAvKldJVEhfT1BFTlNTTDMqLwotZGlmZiAtTnVy IG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLmggb3BlbnNzaC0xMC4ycDEvY2lwaGVyLmgKLS0t LSBvcGVuc3NoLTEwLjJwMS5vcmlnL2NpcGhlci5oCTIwMjYtMDMtMTggMTU6MTI6MDEuNzMzNzY3 NTIyICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvY2lwaGVyLmgJMjAyNi0wMy0xOCAxNToxMzox Ny44NDIyMDEwODkgKzAxMDAKLUBAIC00MiwxMSArNDIsMTcgQEAKLSAjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSAjZW5kaWYKLSAjaW5jbHVkZSAiY2lwaGVyLWNoYWNoYXBvbHkuaCIKLSsjaWZk ZWYgV0lUSF9PUEVOU1NMCi0rI2luY2x1ZGUgImNpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1t dC5oIgotKyNlbmRpZgotICNpbmNsdWRlICJjaXBoZXItYWVzY3RyLmgiCi0gCi0gI2RlZmluZSBD SVBIRVJfRU5DUllQVAkJMQotICNkZWZpbmUgQ0lQSEVSX0RFQ1JZUFQJCTAKLSAKLSsjZGVmaW5l IENJUEhFUl9NVUxUSVRIUkVBRAkxCi0rI2RlZmluZSBDSVBIRVJfU0VSSUFMCQkwCi0rCi0gc3Ry dWN0IHNzaGNpcGhlciB7Ci0gCWNoYXIJKm5hbWU7Ci0gCXVfaW50CWJsb2NrX3NpemU7Ci1AQCAt NjAsNiArNjYsNyBAQAotICNkZWZpbmUgQ0ZMQUdfTk9ORQkJKDE8PDMpCi0gI2RlZmluZSBDRkxB R19JTlRFUk5BTAkJQ0ZMQUdfTk9ORSAvKiBEb24ndCB1c2UgIm5vbmUiIGZvciBwYWNrZXRzICov Ci0gI2lmZGVmIFdJVEhfT1BFTlNTTAotKyNkZWZpbmUgQ0ZMQUdfTVQJCSgxPDw0KQotIAljb25z dCBFVlBfQ0lQSEVSCSooKmV2cHR5cGUpKHZvaWQpOwotICNlbHNlCi0gCXZvaWQJKmlnbm9yZWQ7 Ci1AQCAtNjgsMjQgKzc1LDI3IEBACi0gCi0gc3RydWN0IHNzaGNpcGhlcl9jdHg7Ci0gCi0tY29u c3Qgc3RydWN0IHNzaGNpcGhlciAqY2lwaGVyX2J5X25hbWUoY29uc3QgY2hhciAqKTsKLStzdHJ1 Y3Qgc3NoY2lwaGVyICpjaXBoZXJfYnlfbmFtZShjb25zdCBjaGFyICopOwotIGNvbnN0IGNoYXIg KmNpcGhlcl93YXJuaW5nX21lc3NhZ2UoY29uc3Qgc3RydWN0IHNzaGNpcGhlcl9jdHggKik7Ci0g aW50CSBjaXBoZXJzX3ZhbGlkKGNvbnN0IGNoYXIgKik7Ci0gY2hhcgkqY2lwaGVyX2FsZ19saXN0 KGNoYXIsIGludCk7Ci0gY29uc3QgY2hhciAqY29tcHJlc3Npb25fYWxnX2xpc3QoaW50KTsKLSBp bnQJIGNpcGhlcl9pbml0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICoqLCBjb25zdCBzdHJ1Y3Qgc3No Y2lwaGVyICosCi0tICAgIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICosIHVf aW50LCBpbnQpOwotKyAgICBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqLCB1 X2ludCwgdV9pbnQsIGludCwgaW50KTsKLSBpbnQJIGNpcGhlcl9jcnlwdChzdHJ1Y3Qgc3NoY2lw aGVyX2N0eCAqLCB1X2ludCwgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAotICAgICB1X2ludCwg dV9pbnQsIHVfaW50KTsKLSBpbnQJIGNpcGhlcl9nZXRfbGVuZ3RoKHN0cnVjdCBzc2hjaXBoZXJf Y3R4ICosIHVfaW50ICosIHVfaW50LAotICAgICBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotIHZv aWQJIGNpcGhlcl9mcmVlKHN0cnVjdCBzc2hjaXBoZXJfY3R4ICopOwotIHVfaW50CSBjaXBoZXJf YmxvY2tzaXplKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7Ci0rdWludDY0X3QgY2lwaGVyX3Jl a2V5X2Jsb2Nrcyhjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOwotIHVfaW50CSBjaXBoZXJfa2V5 bGVuKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7Ci0gdV9pbnQJIGNpcGhlcl9zZWNsZW4oY29u c3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKLSB1X2ludAkgY2lwaGVyX2F1dGhsZW4oY29uc3Qgc3Ry dWN0IHNzaGNpcGhlciAqKTsKLSB1X2ludAkgY2lwaGVyX2l2bGVuKGNvbnN0IHN0cnVjdCBzc2hj aXBoZXIgKik7Ci0gdV9pbnQJIGNpcGhlcl9pc19jYmMoY29uc3Qgc3RydWN0IHNzaGNpcGhlciAq KTsKLSt2b2lkCSBjaXBoZXJfcmVzZXRfbXVsdGl0aHJlYWRlZCh2b2lkKTsKLStjb25zdCBjaGFy ICpjaXBoZXJfY3R4X25hbWUoY29uc3Qgc3RydWN0IHNzaGNpcGhlcl9jdHggKik7Ci0gCi0gdV9p bnQJIGNpcGhlcl9jdHhfaXNfcGxhaW50ZXh0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICopOwotIAot ZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLXN3aXRjaC5jIG9wZW5zc2gtMTAu MnAxL2NpcGhlci1zd2l0Y2guYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLXN3aXRj aC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4y cDEvY2lwaGVyLXN3aXRjaC5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODQyMzE2NDIwICswMTAwCi1A QCAtMCwwICsxLDczIEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgVGhlIEJvYXJkIG9m IFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgotKyAqCi0rICogIEF1dGhv cjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKgotKyAqIFRoaXMgbGlicmFyeSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KLSsgKgotKyAqIFRoaXMg bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAotKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAq Ci0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlUIExpY2Vuc2Ug YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7Ci0rICogaWYgbm90LCBzZWUgaHR0cDovL29wZW5zb3Vy Y2Uub3JnL2xpY2Vuc2VzL01JVC4KLSsgKgotKyAqLwotKwotKy8qIFRoaXMgcHJvdmlkZXMgdGhl IGZ1bmN0aW9uIHRvIHN3aXRjaCBmcm9tIGEgc2VyaWFsIHRvIHBhcmFsbGVsCi0rICogY2lwaGVy LiBUaGlzIGhhcyBiZWVuIG1vdmVkIGludG8gaXQncyBvd24gZmlsZSBpbiBvcmRlciB0byBtYWtl IGl0Ci0rICogYXZhaWxhYmxlIHRvIGJvdGggdGhlIGNsaWVudCBhbmQgc2VydmVyIHdpdGhvdXQg aGF2aW5nIHRvIGNsdXR0ZXIKLSsgKiB1cCBvdGhlciBmaWxlcy4KLSsgKi8KLSsKLSsjaW5jbHVk ZSAiaW5jbHVkZXMuaCIKLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlICJjaXBoZXIuaCIKLSsjaW5jbHVkZSAibG9nLmgiCi0rI2luY2x1ZGUg InBhY2tldC5oIgotKwotKwotKy8qIGlmIHdlIGFyZSB1c2luZyBhIHBhcmFsbGVsIGNpcGhlciB0 aGVyZSBjYW4gYmUgaXNzdWVzIGluIGVpdGhlcgotKyAqIGEgZm9yayBvciBzYW5kYm94LiBFc3Nl bnRpYWxseSwgaWYgd2Ugc3dpdGNoIHRvbyBlYXJseSB0aGUKLSsgKiB0aHJlYWRzIGdldCBsb3N0 IGFuZCB0aGUgYXBwbGljYXRpb24gaGFuZ3MuIFNvIHdoYXQgd2UgZG8gaXMKLSsgKiB0ZXN0IGlm IGVpdGhlciB0aGUgc2VuZCBvciByZWNlaXZlIGNvbnRleHQgY2lwaGVyIG5hbWUKLSsgKiBtYXRj aGVzIHRoZSBrbm93biBhdmFpbGFibGUgcGFyYWxsZWwgY2lwaGVycy4gSWYgaXQgZG9lcwotKyAq IHRoZW4gd2UgZm9yY2UgYSByZWtleSB3aGljaCBhdXRvbWF0aWNhbGx5IGxvYWRzIHRoZSBwYXJh bGxlbAotKyAqIGNpcGhlci4gKi8KLSsKLSt2b2lkCi0rY2lwaGVyX3N3aXRjaChzdHJ1Y3Qgc3No ICpzc2gpIHsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0rCS8qIGdldCB0aGUgc2VuZCBhbmQgcmVj ZWl2ZSBjb250ZXh0IGFuZCBleHRyYWN0IHRoZSBjaXBoZXIgbmFtZSAqLwotKwljb25zdCB2b2lk ICpzZW5kX2NjID0gc3NoX3BhY2tldF9nZXRfc2VuZF9jb250ZXh0KHNzaCk7Ci0rCWNvbnN0IHZv aWQgKnJlY3ZfY2MgPSBzc2hfcGFja2V0X2dldF9yZWNlaXZlX2NvbnRleHQoc3NoKTsKLSsJY29u c3QgY2hhciAqc2VuZCA9IGNpcGhlcl9jdHhfbmFtZShzZW5kX2NjKTsKLSsJY29uc3QgY2hhciAq cmVjdiA9IGNpcGhlcl9jdHhfbmFtZShyZWN2X2NjKTsKLSsKLSsJZGVidWdfZigiU2VuZDogJXMg UmVjdjogJXMiLCBzZW5kLCByZWN2KTsKLSsJCi0rCS8qIGlmIHRoZSBuYW1lIG9mIHRoZSBjaXBo ZXIgbWF0Y2hlcyB0aGVuIHdlIHNldCB0aGUgY29udGV4dAotKwkgKiB0byBhdXRoZW50aWNhdGVk IChpdCBsaWtlbHkgYWxyZWFkeSBpcyB0aG91Z2gpIGFuZCB0aGVuCi0rCSAqIGZvcmNlIHRoZSBy ZWtleS4gRWl0aGVyIHNpZGUgY2FuIGRvIHRoaXMuIE9uZSBkb3duc2lkZSBvZgotKwkgKiB0aGlz IG1ldGhvZCBpcyB0aGF0IGJvdGggc2lkZXMgY2FuIHJlcXVlc3QgYSByZWtleSBzbyB5b3UKLSsJ ICogY2FuIGVuZCB1cCBkdXBsaWNhdGluZyB3b3JrLiBUaGlzIGlzIGFubm95aW5nIGJ1dCB0aGUK LSsJICogcGVyZm9ybWFuY2UgZ2FpbnMgbWFrZSBpdCB3b3J0aHdoaWxlLiBBbHNvIEkKLSsJICog dXNlIHN0cnN0ciBoZXJlIGJlY2F1c2Ugc3RyY21wIHdvdWxkIHJlcXVpcmUgYSA2IHBhcnQKLSsJ ICogaWYgc3RhdGVtZW50ICovCi0rCWlmIChzdHJzdHIoc2VuZCwgImN0ciIpIHx8IHN0cnN0cihy ZWN2LCAiY3RyIikpIHsKLSsJCWRlYnVnKCJTZXJpYWwgdG8gcGFyYWxsZWwgQUVTLUNUUiBjaXBo ZXIgc3dhcCIpOwotKwkJLyogY2lwaGVyX3Jlc2V0X211bHRpdGhyZWFkZWQoKTsgKi8KLSsJCXNz aF9wYWNrZXRfc2V0X2F1dGhlbnRpY2F0ZWQoc3NoKTsKLSsJCXBhY2tldF9yZXF1ZXN0X3Jla2V5 aW5nKCk7Ci0rCX0KLSsJLyogZG8gdGhlIHNhbWUgZm9yIG11bHRpdGhyZWFkZWQgY2hhY2hhMjAg YnV0IHdpdGggc3RyY21wICovCi0rCWlmICgoc3RyY21wKHNlbmQsICJjaGFjaGEyMC1wb2x5MTMw NUBvcGVuc3NoLmNvbSIpID09IDApIHx8Ci0rCSAgICAoc3RyY21wKHJlY3YsICJjaGFjaGEyMC1w b2x5MTMwNUBvcGVuc3NoLmNvbSIpID09IDApKSB7Ci0rCQlkZWJ1ZygiU2VyaWFsIHRvIHBhcmFs bGVsIENoYWNoYTIwLXBvbHkxMzA1IGNpcGhlciBzd2FwIik7Ci0rCQlzc2hfcGFja2V0X3NldF9h dXRoZW50aWNhdGVkKHNzaCk7Ci0rCQlwYWNrZXRfcmVxdWVzdF9yZWtleWluZygpOwotKwl9Ci0r I2VuZGlmCi0rfQotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvY2lwaGVyLXN3aXRjaC5o IG9wZW5zc2gtMTAuMnAxL2NpcGhlci1zd2l0Y2guaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcv Y2lwaGVyLXN3aXRjaC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzaC0xMC4ycDEvY2lwaGVyLXN3aXRjaC5oCTIwMjYtMDMtMTggMTU6MTM6MTcuODQyMzY5 MzE4ICswMTAwCi1AQCAtMCwwICsxLDE4IEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTUg VGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgotKyAq Ci0rICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKgotKyAqIFRo aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KLSsg KgotKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg TUlUIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7Ci0rICogaWYgbm90LCBzZWUgaHR0 cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KLSsgKgotKyAqLwotKwotK3ZvaWQgY2lw aGVyX3N3aXRjaCAoc3RydWN0IHNzaCAqKTsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmln L2NsaWVudGxvb3AuYyBvcGVuc3NoLTEwLjJwMS9jbGllbnRsb29wLmMKLS0tLSBvcGVuc3NoLTEw LjJwMS5vcmlnL2NsaWVudGxvb3AuYwkyMDI2LTAzLTE4IDE1OjEyOjAxLjQyODI1MDU4MiArMDEw MAotKysrIG9wZW5zc2gtMTAuMnAxL2NsaWVudGxvb3AuYwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg0 Mjk5MjM3MSArMDEwMAotQEAgLTEwNiw2ICsxMDYsNyBAQAotICNpbmNsdWRlICJtc2cuaCIKLSAj aW5jbHVkZSAic3NoZXJyLmgiCi0gI2luY2x1ZGUgImhvc3RmaWxlLmgiCi0rI2luY2x1ZGUgIm1l dHJpY3MuaCIKLSAKLSAjaWZkZWYgR1NTQVBJCi0gI2luY2x1ZGUgInNzaC1nc3MuaCIKLUBAIC0x NjQsNiArMTY1LDEwIEBACi0gCi0gc3RhdGljIHZvaWQgY2xpZW50X2luaXRfZGlzcGF0Y2goc3Ry dWN0IHNzaCAqc3NoKTsKLSBpbnQJc2Vzc2lvbl9pZGVudCA9IC0xOwotK2ludCAgICAgbWV0cmlj c19oZHJfcmVtb3RlX2ZsYWcgPSAwOwotK2ludCAgICAgbWV0cmljc19oZHJfbG9jYWxfZmxhZyA9 IDA7Ci0raW50ICAgICByZW1vdGVfbm9fcG9sbF9mbGFnID0gMDsKLStpbnQgICAgIGxvY2FsX25v X3BvbGxfZmxhZyA9IDA7Ci0gCi0gLyogVHJhY2sgZXNjYXBlIHBlciBwcm90bzIgY2hhbm5lbCAq LwotIHN0cnVjdCBlc2NhcGVfZmlsdGVyX2N0eCB7Ci1AQCAtMTkwLDYgKzE5NSw4IEBACi0gc3Rh dGljIHN0cnVjdCBnbG9iYWxfY29uZmlybXMgZ2xvYmFsX2NvbmZpcm1zID0KLSAgICAgVEFJTFFf SEVBRF9JTklUSUFMSVpFUihnbG9iYWxfY29uZmlybXMpOwotIAotK3ZvaWQgY2xpZW50X3JlcXVl c3RfbWV0cmljcyhzdHJ1Y3Qgc3NoICopOwotKwotIHN0YXRpYyB2b2lkIHF1aXRfbWVzc2FnZShj b25zdCBjaGFyICpmbXQsIC4uLikKLSAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJp bnRmLCAxLCAyKSkpOwotIAotQEAgLTE0NTUsNiArMTQ2Miw3IEBACi0gCWRvdWJsZSBzdGFydF90 aW1lLCB0b3RhbF90aW1lOwotIAlpbnQgaW50ZXJhY3RpdmUgPSAtMSwgY2hhbm5lbF9kaWRfZW5x dWV1ZSA9IDAsIHI7Ci0gCXVfaW50NjRfdCBpYnl0ZXMsIG9ieXRlczsKLSsJdGltZV90IHByZXZp b3VzX3RpbWU7Ci0gCWludCBjb25uX2luX3JlYWR5LCBjb25uX291dF9yZWFkeTsKLSAJc2lnc2V0 X3QgYnNpZ3NldCwgb3NpZ3NldDsKLSAKLUBAIC0xNDk2LDYgKzE1MDQsNyBAQAotIAljbGllbnRf cmVwbGVkZ2UoKTsKLSAKLSAJc3RhcnRfdGltZSA9IG1vbm90aW1lX2RvdWJsZSgpOwotKwlwcmV2 aW91c190aW1lID0gdGltZShOVUxMKTsgLyogZm9yIG1ldHJpY3MgcG9sbGluZyAqLwotIAotIAkv KiBJbml0aWFsaXplIHZhcmlhYmxlcy4gKi8KLSAJbGFzdF93YXNfY3IgPSAxOwotQEAgLTE1NDAs NiArMTU0OSw4IEBACi0gCX0KLSAKLSAJc2NoZWR1bGVfc2VydmVyX2FsaXZlX2NoZWNrKCk7Ci0r CWlmIChvcHRpb25zLm1ldHJpY3MpCi0rCQljbGllbnRfcmVxdWVzdF9tZXRyaWNzKHNzaCk7IC8q IGluaXRpYWwgbWV0cmljcyBwb2xsaW5nICovCi0gCi0gCWlmIChzaWdlbXB0eXNldCgmYnNpZ3Nl dCkgPT0gLTEgfHwKLSAJICAgIHNpZ2FkZHNldCgmYnNpZ3NldCwgU0lHSFVQKSA9PSAtMSB8fAot QEAgLTE1NTQsNiArMTU2NSwxMiBAQAotIAotIAkvKiBNYWluIGxvb3Agb2YgdGhlIGNsaWVudCBm b3IgdGhlIGludGVyYWN0aXZlIHNlc3Npb24gbW9kZS4gKi8KLSAJd2hpbGUgKCFxdWl0X3BlbmRp bmcpIHsKLSsJCWlmIChvcHRpb25zLm1ldHJpY3MpIHsKLSsJCQlpZiAoKHRpbWUoTlVMTCkgLSBw cmV2aW91c190aW1lKSA+PSBvcHRpb25zLm1ldHJpY3NfaW50ZXJ2YWwpIHsKLSsJCQkJY2xpZW50 X3JlcXVlc3RfbWV0cmljcyhzc2gpOwotKwkJCQlwcmV2aW91c190aW1lID0gdGltZShOVUxMKTsK LSsJCQl9Ci0rCQl9Ci0gCQljaGFubmVsX2RpZF9lbnF1ZXVlID0gMDsKLSAKLSAJCS8qIFByb2Nl c3MgYnVmZmVyZWQgcGFja2V0cyBzZW50IGJ5IHRoZSBzZXJ2ZXIuICovCi1AQCAtMTY1Niw2ICsx NjczLDEwIEBACi0gCQkJfQotIAkJfQotIAl9Ci0rCi0rCWlmIChvcHRpb25zLm1ldHJpY3MpCi0r CQljbGllbnRfcmVxdWVzdF9tZXRyaWNzKHNzaCk7IC8qIGZpbmFsIG1ldHJpY3MgcG9sbGluZyAq LwotKwotIAlmcmVlKHBmZCk7Ci0gCi0gCS8qIFRlcm1pbmF0ZSB0aGUgc2Vzc2lvbi4gKi8KLUBA IC0yNjY4LDYgKzI2ODksMTY3IEBACi0gCXJldHVybiAxOwotIH0KLSAKLSsvKiB0YWtlIHRoZSBy ZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHBhcnNlIG91dCB0aGUgZGF0YS4KLSsgKiB0aGUg X2N0eCBzaG91bGQgYmUgbnVsbC4gSXQncyBqdXN0IGhlcmUgYmVjYXVzZSB0aGUgZm9ybWF0Ci0r ICogb2YgdGhlIGNhbGxiYWNrIGhhbmRsZXIgZXhwZWN0cyBpdC4gTGlrZXdpc2UsIHNlcSBpcwot KyAqIG5vdCB1c2VkLiAqLwotK3N0YXRpYyB2b2lkCi0rY2xpZW50X3Byb2Nlc3NfcmVxdWVzdF9t ZXRyaWNzIChzdHJ1Y3Qgc3NoICpzc2gsIGludCB0eXBlLCB1X2ludDMyX3Qgc2VxLCB2b2lkICpf Y3R4KSB7Ci0rCXN0cnVjdCB0Y3BfaW5mbyBsb2NhbF90Y3BfaW5mbzsKLSsJY29uc3QgdV9jaGFy ICpibG9iOwotKwlGSUxFICpyZW1mcHRyOwotKwlGSUxFICpsb2NhbGZwdHI7Ci0rCWNoYXIgcmVt ZmlsZW5hbWVbMTAyNF07Ci0rCWNoYXIgbG9jYWxmaWxlbmFtZVsxMDI0XTsKLSsJdGltZV90IG5v dzsKLSsJc3RydWN0IHRtICppbmZvOwotKwljaGFyIHRpbWVzdGFtcFs0MF07Ci0rCWNoYXIgKm1l dHJpY3NzdHJpbmcgPSBOVUxMOwotKwlzaXplX3QgdGNwaV9sZW4sIGxlbiA9IDA7Ci0rCWJpbm4g Km1ldHJpY3NvYmogPSBOVUxMOwotKwlpbnQgciwga2VybmVsX3ZlcnNpb24gPSAwOwotKwotKwl0 aW1lKCZub3cpOwotKwlpbmZvID0gbG9jYWx0aW1lKCZub3cpOwotKwlzdHJmdGltZSh0aW1lc3Rh bXAsIDQwLCAiJWQtJW0tJVkgJUg6JU06JVMiLCBpbmZvKTsKLSsKLSsJLyogbWFsbG9jIHRoZSBz dHJpbmcgMUtCIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggKi8KLSsJbWV0cmljc3N0cmluZyA9IG1h bGxvYygxMDI0KTsKLSsKLSsJLyogZ2V0IHRoZSBsb2NhbCBzb2NrZXQgaW5mb3JtYXRpb24gKi8K LSsJaW50IHNvY2tfaW4gPSBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX2luKHNzaCk7Ci0rCi0r CS8qIHRoZSB1c2VyIGNhbiBzcGVjaWZ5IGEgbmFtZS9wYXRoIHdpdGggb3B0aW9ucy5tZXRyaWNz X3BhdGgKLSsJICogYnV0IGlmIGl0J3Mgbm90IGRlZmluZWQgd2UnbGwgdXNlIGEgZGVmYXVsdCBu YW1lLiBJbiBlaXRoZXIgY2FzZQotKwkgKiB0aGUgbmFtZSB3aWxsIGhhdmUgYSBzdWZmaXggb2Yg bG9jYWwgZm9yIHRoZSBsb2NhbCBkYXRhIGFuZCByZW1vdGUgZm9yCi0rCSAqIHRoZSByZW1vdGUg ZGF0YSAqLwotKwlpZiAob3B0aW9ucy5tZXRyaWNzX3BhdGggPT0gTlVMTCkgewotKwkJc25wcmlu dGYocmVtZmlsZW5hbWUsIDEwMjQsICIlcyIsICIuL3NzaF9zdGFja19tZXRyaWNzLnJlbW90ZSIp OwotKwkJc25wcmludGYobG9jYWxmaWxlbmFtZSwgMTAyNCwgIiVzIiwgIi4vc3NoX3N0YWNrX21l dHJpY3MubG9jYWwiKTsKLSsJfSBlbHNlIHsKLSsJCXNucHJpbnRmKHJlbWZpbGVuYW1lLCAxMDI0 LCAiJXMuJXMiLCBvcHRpb25zLm1ldHJpY3NfcGF0aCwgInJlbW90ZSIpOwotKwkJc25wcmludGYo bG9jYWxmaWxlbmFtZSwgMTAyNCwgIiVzLiVzIiwgb3B0aW9ucy5tZXRyaWNzX3BhdGgsICJsb2Nh bCIpOwotKwl9Ci0rCi0rCS8qIHNob3VsZCBiZSB0eXBlIDgxIGFuZCBpZiBpdCdzIG5vdCB0aGVu IGl0cyBsaWtsZXkgdGhhdAotKwkqIHRoZSByZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBwb2xsaW5n LiBXZSBjYW4gc3RpbGwgZ2V0IGxvY2FsIGRhdGEgdGhvdWdoCi0rCSovCi0rCWlmICh0eXBlICE9 IFNTSDJfTVNHX1JFUVVFU1RfU1VDQ0VTUykgewotKwkJaWYgKHJlbW90ZV9ub19wb2xsX2ZsYWcg PT0gMCkgewotKwkJCWVycm9yKCJSZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBzdGFjayBtZXRyaWMg cG9sbGluZy4gTG9jYWwgZGF0YSBvbmx5LiIpOwotKwkJCXJlbW90ZV9ub19wb2xsX2ZsYWcgPSAx OwotKwkJfQotKwkJZ290byBsb2NhbG9ubHk7Ci0rCX0KLSsKLSsJLyogb3BlbiB0aGUgZmlsZSBo YW5kbGUgdG8gd3JpdGUgdGhlIHJlbW90ZSBkYXRhKi8KLSsJcmVtZnB0ciA9IGZvcGVuKHJlbWZp bGVuYW1lLCAiYSIpOwotKwlpZiAocmVtZnB0ciA9PSBOVUxMKQotKwkJZmF0YWwoIkVycm9yIG9w ZW5pbmcgJXM6ICVzIiwgcmVtZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0rCi0rCS8qIHJl YWQgdGhlIGVudGlyZSBwYWNrZXQgc3RyaW5nIGludG8gYmxvYgotKwkgKiBibG9iIGhhcyB0byBi ZSBhIGNvbnN0IHVjaGFyIGFzIHRoYXQncyB3aGF0IHN0cmluZ19kaXJlY3QgZXhwZWN0cwotKwkg KiB3ZSBjYXN0IGl0IGFzIGEgdm9pZCBmb3IgdGhlIGJpbm4gZnVuY3Rpb25zICovCi0rCXNzaHBr dF9nZXRfc3RyaW5nX2RpcmVjdChzc2gsICZibG9iLCAmbGVuKTsKLSsJaWYgKGxlbiA9PSAwKSB7 Ci0rCQkvKiByZWNlaXZlZCBubyBkYXRhLiB3aGljaCBpcyB3ZWlyZCAqLwotKwkJZXJyb3IoIlJl Y2VpdmVkIG5vIHJlbW90ZSBtZXRyaWNzIGRhdGEuIENvbnRpbnVpbmcuIik7Ci0rCX0KLSsKLSsJ LyogZ2V0IHRoZSBrZXJuZWwgdmVyc2lvbiBwcmludGluZyB0aGUgaGVhZGVyICovCi0rCWtlcm5l bF92ZXJzaW9uID0gYmlubl9vYmplY3RfaW50MzIoKHZvaWQgKilibG9iLCAia2VybmVsX3ZlcnNp b24iKTsKLSsKLSsJLyogY3JlYXRlIGEgc3RyaW5nIG9mIHRoZSBkYXRhIGZyb20gdGhlIGJpbm4g b2JqZWN0IGJsb2IgKi8KLSsJbWV0cmljc19yZWFkX2Jpbm5fb2JqZWN0KCh2b2lkICopYmxvYiwg bWV0cmljc3N0cmluZyk7Ci0rCi0rCS8qIGhhdmUgd2UgcHJpbnRlZCB0aGUgaGVhZGVyPyAqLwot KwlpZiAobWV0cmljc19oZHJfcmVtb3RlX2ZsYWcgPT0gMCkgewotKwkJbWV0cmljc19wcmludF9o ZWFkZXIocmVtZnB0ciwgIlJFTU9URSBDT05ORUNUSU9OIiwga2VybmVsX3ZlcnNpb24pOwotKwkJ bWV0cmljc19oZHJfcmVtb3RlX2ZsYWcgPSAxOwotKwl9Ci0rCWZwcmludGYocmVtZnB0ciwgIiVz LCAiLCB0aW1lc3RhbXApOwotKwlmcHJpbnRmKHJlbWZwdHIsICIlc1xuIiwgbWV0cmljc3N0cmlu Zyk7Ci0rCi0rCS8qIGNsb3NlIHJlbW90ZSBmaWxlIHBvaW50ZXIqLwotKwlmY2xvc2UocmVtZnB0 cik7Ci0rCi0rCS8qIGdvdCB0aGUgcmVtb3RlIGRhdGEsIG5vdyBnZXQgdGhlIGxvY2FsICovCi0r bG9jYWxvbmx5OgotKy8qIFRDUF9JTkZPIGlzIGRlZmluZWQgaW4gbWV0cmljcy5oKi8KLSsjaWYg IWRlZmluZWQgVENQX0lORk8KLSsJaWYgKGxvY2FsX25vX3BvbGxfZmxhZyA9PSAwKSB7Ci0rCQll cnJvcigiTG9jYWwgaG9zdCBkb2VzIG5vdCBzdXBwb3J0IG1ldHJpYyBwb2xsaW5nLiBSZW1vdGUg ZGF0YSBvbmx5LiIpOwotKwkJbG9jYWxfbm9fcG9sbF9mbGFnID0gMTsKLSsJfQotKyNlbHNlCi0r CS8qIG9wZW4gZmlsZSBoYW5kbGUgZm9yIGxvY2FsIGRhdGEgKi8KLSsJbG9jYWxmcHRyID0gZm9w ZW4obG9jYWxmaWxlbmFtZSwgImEiKTsKLSsJaWYobG9jYWxmcHRyID09IE5VTEwpCi0rCQlmYXRh bCgiRXJyb3Igb3BlbmluZyAlczogJXMiLCBsb2NhbGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykp OwotKwotKwkvKiBjcmVhdGUgdGhlIGJpbm4gb2JqZWN0Ki8KLSsJbWV0cmljc29iaiA9IGJpbm5f b2JqZWN0KCk7Ci0rCWlmIChtZXRyaWNzb2JqID09IE5VTEwpIHsKLSsJCWZhdGFsKCJDb3VsZCBu b3QgY3JlYXRlIG1ldHJpY3Mgb2JqZWN0Iik7Ci0rCX0KLSsKLSsJdGNwaV9sZW4gPSAoc2l6ZV90 KXNpemVvZihsb2NhbF90Y3BfaW5mbyk7Ci0rCWlmICgociA9IGdldHNvY2tvcHQoc29ja19pbiwg SVBQUk9UT19UQ1AsIFRDUF9JTkZPLCAodm9pZCAqKSZsb2NhbF90Y3BfaW5mbywKLSsJCQkgICAg KHNvY2tsZW5fdCAqKSZ0Y3BpX2xlbikpICE9IDApewotKwkJZXJyb3IoIkNvdWxkIG5vdCByZWFk IHRjcF9pbmZvIGZyb20gc29ja2V0Iik7Ci0rCQlnb3RvIG91dDsKLSsJfQotKwotKwkvKiB3ZSB3 cml0ZSBhbmQgcmVhZCB0byBhIGJpbm4gb2JqZWN0IGJlY2F1c2UgaXQgbGV0cyB1cwotKwkgKiBm b3JtYXQgdGhlIGRhdGEgY29uc2lzdGVudGx5ICovCi0rCW1ldHJpY3Nfd3JpdGVfYmlubl9vYmpl Y3QoJmxvY2FsX3RjcF9pbmZvLCBtZXRyaWNzb2JqKTsKLSsKLSsJLyogY3JlYXRlIGEgc3RyaW5n IG9mIHRoZSBkYXRhIGZyb20gdGhlIGJpbm4gb2JqZWN0IG1ldHJpY3NvYmogKi8KLSsJbWV0cmlj c19yZWFkX2Jpbm5fb2JqZWN0KCh2b2lkICopbWV0cmljc29iaiwgbWV0cmljc3N0cmluZyk7Ci0r Ci0rCS8qIGdldCB0aGUga2VybmVsIHZlcnNpb24gcHJpbnRpbmcgdGhlIGhlYWRlciAqLwotKwlr ZXJuZWxfdmVyc2lvbiA9IGJpbm5fb2JqZWN0X2ludDMyKG1ldHJpY3NvYmosICJrZXJuZWxfdmVy c2lvbiIpOwotKwotKwlpZiAobWV0cmljc19oZHJfbG9jYWxfZmxhZyA9PSAwKSB7Ci0rCQltZXRy aWNzX3ByaW50X2hlYWRlcihsb2NhbGZwdHIsICJMT0NBTCBDT05ORUNUSU9OIiwga2VybmVsX3Zl cnNpb24pOwotKwkJbWV0cmljc19oZHJfbG9jYWxfZmxhZyA9IDE7Ci0rCX0KLSsKLSsJZnByaW50 Zihsb2NhbGZwdHIsICIlcywgIiwgdGltZXN0YW1wKTsKLSsJZnByaW50Zihsb2NhbGZwdHIsICIl c1xuIiwgbWV0cmljc3N0cmluZyk7Ci0rCWZjbG9zZSAobG9jYWxmcHRyKTsKLSsjZW5kaWYgLyog VENQX0lORk8gKi8KLStvdXQ6Ci0rCWZyZWUobWV0cmljc3N0cmluZyk7Ci0rfQotKwotKy8qIFVz ZSB0aGUgU1NIMl9NU0dfR0xPQkFMX1JFUVVFU1QgcHJvdG9jb2wgdG8KLSsgKiBhc2sgdGhlIHNl cnZlciB0byBzZW5kIG1ldHJpY3MgYmFjayB0byB0aGUgY2xpZW50LgotKyAqIHdlIHVzZSB0aGUg bm9uLWNhbm9uaWNhbCBzdHJpbmcgc3RhY2stbWV0cmljc0BocG5zc2gub3JnCi0rICogdG8gaW5k aWNhdGUgdGhlIHR5cGUgb2YgcmVxdWVzdCB3ZSB3YW50LiBJZiB0aGUgcmVjZWl2ZXIgZG9lc24n dAotKyAqIHVuZGVyc3RhbmQgaXQgdGhlbiB0aGUgcmVzcG9uc2UgaW5kaWFjdGVzIGEgZmFpbHVy ZS4KLSsgKiBJIGNhbiBwcm9iYWJseSBkbyB0aGlzIGJ5IHVzaW5nIGNsaW50X2lucHV0X2dsb2Jh bF9yZXF1ZXN0IGJ1dAotKyAqIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLgotKyAq LwotK3ZvaWQgY2xpZW50X3JlcXVlc3RfbWV0cmljcyhzdHJ1Y3Qgc3NoICpzc2gpIHsKLSsJaW50 IHI7Ci0rCi0rCWRlYnVnX2YoIkFza2luZyBzZXJ2ZXIgZm9yIFRDUCBzdGFjayBtZXRyaWNzIik7 Ci0rCS8qIGNyZWF0ZSBhIHBha2NldCBvZiBHTE9CQUxfUkVRVUVTVCB0eXBlICovCi0rCWlmICgo ciA9IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0dMT0JBTF9SRVFVRVNUKSkgIT0gMCB8fAot KwkgICAgLyogZGVmaW5lIHRoZSB0eXBlIG9mIEdMT0JBTF9SRVFVRVNUIG1lc3NhZ2UgKi8KLSsJ ICAgIChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwKLSsJICAgICJzdGFjay1tZXRyaWNzQGhw bnNzaC5vcmciKSkgIT0gMCB8fAotKwkgICAgLyogaW5kaWNhdGUgaWYgd2Ugd2FudCBhIHJlc3Bv bnNlLiAxIGZvciB5ZXMgMCBmb3Igbm8gKi8KLSsJICAgIChyID0gc3NocGt0X3B1dF91OChzc2gs IDEpKSAhPSAwKQotKwkJZmF0YWxfZnIociwgInByZXBhcmUgc3RhY2sgcmVxdWVzdCBmYWlsdXJl Iik7Ci0rCS8qIHNlbmQgdGhlIHBhY2tldCAqLwotKwlpZiAoKHIgPSBzc2hwa3Rfc2VuZChzc2gp KSAhPSAwKQotKwkJZmF0YWxfZnIociwgInNlbmQgc3RhY2sgcmVxdWVzdCIpOwotKwkvKiBpIGJl bGlldmUgdGhpcyBpbmRpY2F0ZXMgd2hhdCB3ZSBhcmUgdG8gdXNlIGZvciBhIGNhbGxiYWNrICov Ci0rCWNsaWVudF9yZWdpc3Rlcl9nbG9iYWxfY29uZmlybShjbGllbnRfcHJvY2Vzc19yZXF1ZXN0 X21ldHJpY3MsIE5VTEwpOwotK30KLSsKLSBzdGF0aWMgaW50Ci0gY2xpZW50X2lucHV0X2dsb2Jh bF9yZXF1ZXN0KGludCB0eXBlLCB1X2ludDMyX3Qgc2VxLCBzdHJ1Y3Qgc3NoICpzc2gpCi0gewot QEAgLTI3OTAsNiArMjk3Miw0MyBAQAotIAotIAlsZW4gPSBzc2hidWZfbGVuKGNtZCk7Ci0gCWlm IChsZW4gPiAwKSB7Ci0rCQkvKiB3ZSBtYXkgYmUgY29ubmVjdGluZyB0byBhIHNlcnZlciB0aGF0 IGhhcyBocG4gcHJlZml4ZWQKLSsJCSAqIGJpbmFyaWVzIGluc3RhbGxlZC4gSW4gdGhhdCBjYXNl IHdlIG5lZWQgdG8gcmV3cml0ZSBhbnkKLSsJCSAqIHNjcCBjb21tYW5kcyB0byBsb29rIGZvciBo cG5zY3AgaW5zdGVhZC4KLSsJCSAqLwotKwkJaWYgKHNzaC0+Y29tcGF0ICYgU1NIX0hQTlNTSF9Q UkVGSVgpIHsKLSsJCQljaGFyICpuZXdfY21kOwotKwkJCW5ld19jbWQgPSBtYWxsb2MobGVuKzQp OwotKwkJCS8qIHJlYWQgdGhlIGV4aXN0aW5nIGNvbW1hbmQgaW50byBhIHRlbXAgYnVmZmVyICov Ci0rCQkJc3ByaW50ZihuZXdfY21kLCAiJXMiLCAoY29uc3QgdV9jaGFyKilzc2hidWZfcHRyKGNt ZCkpOwotKwkJCWNvbnN0IGNoYXIgKnBvczsKLSsJCQkvKiBzZWUgaWYgdGhlIGNvbW1hbmQgc3Rh cnRzIHdpdGggc2NwICovCi0rCQkJcG9zID0gc3Ryc3RyKG5ld19jbWQsICJzY3AiKTsKLSsJCQkv KiBieSBzdWJzdHJhY3RpbmcgdGhlIHBvaW50ZXIgbmV3X2NtZCBmcm9tIHRoZSBwb2ludGVyCi0r CQkJICogcG9zIHdlIGVuZCB1cCB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmVlZGxlIGluIHRo ZQotKwkJCSAqIGhheXN0YWNrLiBJZiBpdCdzIDAgdGhlbiB3ZSBjYW4gbWVzcyB3aXRoIGl0Ci0r CQkJICovCi0rCQkJaWYgKHBvcyAtIG5ld19jbWQgPT0gMCkgewotKwkJCQlkZWJ1Z19mKCJSZXdy aXRpbmcgc2NwIGNvbW1hbmQgZm9yIGhwbnNjcC4iKTsKLSsJCQkJc3ByaW50ZihuZXdfY21kLCAi aHBuJXMiLCAoY29uc3QgdV9jaGFyKilzc2hidWZfcHRyKGNtZCkpOwotKwkJCQlkZWJ1Z19mKCJD b21tYW5kIHdhczogJXMgYW5kIGlzIG5vdyAlcyIsCi0rCQkJCSAgICAgIChjb25zdCB1X2NoYXIq KXNzaGJ1Zl9wdHIoY21kKSwgbmV3X2NtZCk7Ci0rCQkJCS8qIGZyZWUgdGhlIGV4aXN0aW5nIHNz aGJ1ZiAnY21kJwotKwkJCQkgKiByZWNyZWF0ZSBpdCBhbmQgdGhlbiB3cml0ZSBvdXIgbmV3X2Nt ZCBpbnRvCi0rCQkJCSAqIHRoZSBzc2hidWYgc3RydWN0Ci0rCQkJCSAqLwotKwkJCQlzc2hidWZf ZnJlZShjbWQpOwotKwkJCQlpZiAoKGNtZCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSsJCQkJ CWZhdGFsKCJzc2hidWZfbmV3IGZhaWxlZCBpbiBzY3AgcmV3cml0ZSIpOwotKwkJCQlzc2hidWZf cHV0ZihjbWQsICIlcyIsIG5ld19jbWQpOwotKwkJCQkvKiB3ZSB1c2UgbGVuIGxhdGVyIG9uIHNv IGRvbid0IGZvcmdldCB0bwotKwkJCQkgKiBpbmNyZW1lbnQgaXQgYnkgdGhlIG51bWJlciBvZiBu ZXcgY2hhcnMgaW4gdGhlCi0rCQkJCSAqIGNvbW1hbmQKLSsJCQkJICovCi0rCQkJCWxlbiArPSAz OwotKwkJCQlmcmVlKG5ld19jbWQpOwotKwkJCX0KLSsJCX0KLSAJCWlmIChsZW4gPiA5MDApCi0g CQkJbGVuID0gOTAwOwotIAkJaWYgKHdhbnRfc3Vic3lzdGVtKSB7Ci1kaWZmIC1OdXIgb3BlbnNz aC0xMC4ycDEub3JpZy9jb21wYXQuYyBvcGVuc3NoLTEwLjJwMS9jb21wYXQuYwotLS0tIG9wZW5z c2gtMTAuMnAxLm9yaWcvY29tcGF0LmMJMjAyNi0wMy0xOCAxNToxMjowMS45MTMwMDk4NDggKzAx MDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9jb21wYXQuYwkyMDI2LTAzLTE4IDE1OjUyOjEyLjk4Nzk2 MDk0MyArMDEwMAotQEAgLTEzNiw2ICsxMzYsMzUgQEAKLSAJCQlzc2gtPmNvbXBhdCA9IGNoZWNr W2ldLmJ1Z3M7Ci0gCWlmIChmb3JiaWRfc3NoX3JzYSkKLSAJCXNzaC0+Y29tcGF0IHw9IFNTSF9S SF9SU0FTSUdTSEE7Ci0rCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZW1vdGUgc2lkZSBpcyBP cGVuU1NIIGFuZCBub3QgSFBOICovCi0rCQkJLyogVE9ETzogU2VlIGlmIHdlIGNhbiB3b3JrIHRo aXMgaW50byB0aGUgbmV3IG1ldGhvZCBmb3IgYnVnIGNoZWNrcyAqLwotKwkJCWlmIChzdHJzdHIo dmVyc2lvbiwgIk9wZW5TU0giKSAhPSBOVUxMKSB7Ci0rCQkJCWlmIChzdHJzdHIodmVyc2lvbiwg ImhwbiIpKSB7Ci0rCQkJCQlzc2gtPmNvbXBhdCB8PSBTU0hfSFBOU1NIOwotKwkJCQkJZGVidWco IlJlbW90ZSBpcyBIUE4gZW5hYmxlZCIpOwotKwkJCQkJLyogdGhpcyBjaGVja3MgdG8gc2VlIGlm IHRoZSByZW1vdGUKLSsJCQkJCSAqIHZlcnNpb24gc3RyaW5nIGluZGljYXRlcyB0aGF0IHdlCi0r CQkJCQkgKiBoYXZlIGFjY2VzcyB0byBocG4gcHJlZml4ZWQgYmluYXJpZXMKLSsJCQkJCSAqIFlv dSdsbCBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvIGluY2x1ZGUKLSsJCQkJCSAqIG5ldyBtYWpvciB2 ZXJzaW9uIG51bWJlcnMuIFdoaWNoIGlzCi0rCQkJCQkgKiB3aHkgd2Ugc2hvdWxkIGZpZ3VyZSBv dXQgaG93IHRvIG1ha2UKLSsJCQkJCSAqIHRoZSBtYXRjaCBwYXR0ZXJuIGxpc3Qgd29yawotKwkJ CQkJICovCi0rCQkJCQlpZiAoKHN0cnN0cih2ZXJzaW9uLCAiaHBuMTYiKSAhPSBOVUxMKSB8fAot KwkJCQkJICAgIChzdHJzdHIodmVyc2lvbiwgImhwbjE3IikgIT0gTlVMTCkgfHwKLSsJCQkJCSAg ICAoc3Ryc3RyKHZlcnNpb24sICJocG4xOCIpICE9IE5VTEwpKSB7Ci0rCQkJCQkJc3NoLT5jb21w YXQgfD0gU1NIX0hQTlNTSF9QUkVGSVg7Ci0rCQkJCQkJZGVidWcoIlJlbW90ZSB1c2VzIEhQTlNT SCBwcmVmaXhlcy4iKTsKLSsJCQkJCX0KLSsJCQkJfQotKwkJCQkvKiBpZiBpdCdzIG9wZW5zc2gg YW5kIG5vdCBocG4gKi8KLSsJCQkJZWxzZSBpZiAoKHN0cnN0cih2ZXJzaW9uLCAiT3BlblNTSF84 LjkiKSAhPSBOVUxMKSB8fAotKwkJCQkgICAgKHN0cnN0cih2ZXJzaW9uLCAiT3BlblNTSF85Iikg IT0gTlVMTCkpIHsKLSsJCQkJCXNzaC0+Y29tcGF0IHw9IFNTSF9SRVNUUklDVF9XSU5ET1c7Ci0r CQkJCQlkZWJ1ZygiUmVzdHJpY3RpbmcgYWR2ZXJ0aXNlZCB3aW5kb3cgc2l6ZS4iKTsKLSsJCQkJ fQotKwkJCX0KLSsJCQlkZWJ1Zygic3NoLT5jb21wYXQgaXMgJXUiLCBzc2gtPmNvbXBhdCk7Ci0g CQkJcmV0dXJuOwotIAkJfQotIAl9Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9jb21w YXQuaCBvcGVuc3NoLTEwLjJwMS9jb21wYXQuaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvY29t cGF0LmgJMjAyNi0wMy0xOCAxNToxMjowMS45MTMxNDIwODkgKzAxMDAKLSsrKyBvcGVuc3NoLTEw LjJwMS9jb21wYXQuaAkyMDI2LTAzLTE4IDE1OjU0OjA1LjkyMjYzNDQ0NCArMDEwMAotQEAgLTQ2 LDE3ICs0NiwxOCBAQAotIC8qICNkZWZpbmUgdW51c2VkCQkweDAwMDEwMDAwICovCi0gLyogI2Rl ZmluZSB1bnVzZWQJCTB4MDAwMjAwMDAgKi8KLSAvKiAjZGVmaW5lIHVudXNlZAkJMHgwMDA0MDAw MCAqLwotLS8qICNkZWZpbmUgdW51c2VkCQkweDAwMTAwMDAwICovCi0rI2RlZmluZSBTU0hfSFBO U1NICQkweDAwMTAwMDAwIC8qIGJhc2ljYWxseSBhIG5vdGljZSB0aGF0IHRoaXMgaXMgSFBOIGF3 YXJlICovCi0gI2RlZmluZSBTU0hfQlVHX0VYVEVPRgkJMHgwMDIwMDAwMAotICNkZWZpbmUgU1NI X0JVR19QUk9CRQkJMHgwMDQwMDAwMAotLS8qICNkZWZpbmUgdW51c2VkCQkweDAwODAwMDAwICov Ci0rI2RlZmluZSBTU0hfUkVTVFJJQ1RfV0lORE9XCTB4MDA4MDAwMDAgLyogcmVzdHJpY3QgYWR2 ZXJ0aXNlZCB3aW5kb3cgdG8gT3BlblNTSCBjbGllbnRzICovCi0gI2RlZmluZSBTU0hfT0xEX0ZP UldBUkRfQUREUgkweDAxMDAwMDAwCi0tLyogI2RlZmluZSB1bnVzZWQJCTB4MDIwMDAwMDAgKi8K LSsjZGVmaW5lIFNTSF9IUE5TU0hfUFJFRklYCTB4MDIwMDAwMDAgLyogaW5kaWNhdGVzIHRoYXQg d2UgaGF2ZSBocG4gcHJlZml4ZXMgYmluYXJpZXMgKi8KLSAjZGVmaW5lIFNTSF9ORVdfT1BFTlNT SAkJMHgwNDAwMDAwMAotICNkZWZpbmUgU1NIX0JVR19EWU5BTUlDX1JQT1JUCTB4MDgwMDAwMDAK LSAjZGVmaW5lIFNTSF9CVUdfQ1VSVkUyNTUxOVBBRAkweDEwMDAwMDAwCi0gI2RlZmluZSBTU0hf QlVHX0hPU1RLRVlTCTB4MjAwMDAwMDAKLSAjZGVmaW5lIFNTSF9CVUdfREhHRVhfTEFSR0UJMHg0 MDAwMDAwMAotKy8qICNkZWZpbmUgdW51c2VkCQkweDgwMDAwMDAwICovCi0gCi0gc3RydWN0IHNz aDsKLSAKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL2NvbmZpZ3VyZS5hYyBvcGVuc3No LTEwLjJwMS9jb25maWd1cmUuYWMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL2NvbmZpZ3VyZS5h YwkyMDI2LTAzLTE4IDE1OjEyOjAyLjAwMTQ5NTIzMCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAx L2NvbmZpZ3VyZS5hYwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg0NDk4MDc5OCArMDEwMAotQEAgLTI3 MDMsNiArMjcwMywzOSBAQAotIAkpCi0gZmkKLSAKLSsKLSsjIFRlc3RpbmcgTVBUQ1AgU3VwcG9y dAotKyMgRG9lcyB0aGUgT1Mgc3VwcG9ydCBNUFRDUD8KLSsjIFdlIGRvbid0IHVzZSB0aGlzIGF0 IHRoZSBtb21lbnQKLSsjIGJ1dCBJIGFtIGhvbGRpbmcgaXQgaW4gcmVzcnZlIC1janIgMDQvMDQv MjAyNQotKwlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIE9TIHN1cHBvcnRzIE1QVENQXSkK LSsJQUNfUlVOX0lGRUxTRSgKLSsJCVtBQ19MQU5HX1BST0dSQU0oW1sKLSsJCSNpbmNsdWRlIDxz dGRpby5oPgotKwkJI2luY2x1ZGUgPHN0ZGxpYi5oPgotKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgot KwkJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotKwkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSsJ CSNpbmNsdWRlIDxzdGRib29sLmg+Ci0rCQkjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotKwotKwkJ XV0sIFtbCi0rCQlpbnQgc29jayA9IC0xOwotKwkJc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NL X1NUUkVBTSwgSVBQUk9UT19NUFRDUCk7Ci0rCQlpZiAoc29jayA8IDApIHsKLSsJCSAgIGV4aXQo MSk7Ci0rCQkgICB9Ci0rCQldXSldLAotKwkJWwotKwkJCUFDX01TR19SRVNVTFQoW3llc10pCi0r CQkJQUNfREVGSU5FKFtIQVZFX01QVENQXSwgWzFdLAotKwkJCSAgICBbT1MgU3VwcG9ydHMgTVBU Q1BdKQotKwkJXSwKLSsJCVsKLSsJCQlBQ19NU0dfUkVTVUxUKFtub10pCi0rCQldCi0rCSkKLSsK LSBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm8iID0gInh5ZXMiICYmIFwKLSAgICAg dGVzdCAieCRjaGVja19mb3JfaHB1eF9icm9rZW5fZ2V0YWRkcmluZm8iID0gIngxIjsgdGhlbgot IAlBQ19NU0dfQ0hFQ0tJTkcoW2lmIGdldGFkZHJpbmZvIHNlZW1zIHRvIHdvcmtdKQotQEAgLTMx MTEsOCArMzE0NCw4IEBACi0gCQkJMjAwKikgICAjIExpYnJlU1NMCi0gCQkJCWx2ZXI9YGVjaG8g IiRzc2x2ZXIiIHwgc2VkICdzLy4qbGlicmVzc2wtLy8nYAotIAkJCQljYXNlICIkbHZlciIgaW4K LS0JCQkJMip8MzAwKikgIyAyLngsIDMuMC4wCi0tCQkJCQlBQ19NU0dfRVJST1IoW0xpYnJlU1NM ID49IDMuMS4wIHJlcXVpcmVkIChoYXZlICIkc3NsX3Nob3d2ZXIiKV0pCi0rCQkJCTIqfDMwMCp8 MzAxKnwzMDIqfDMwMyp8MzA0KnwzMDYqKSAjIDIueCwgMy4wLjAKLSsJCQkJCUFDX01TR19FUlJP UihbTGlicmVTU0wgPj0gMy43LjAgcmVxdWlyZWQgKGhhdmUgIiRzc2xfc2hvd3ZlciIpXSkKLSAJ CQkJCTs7Ci0gCQkJCSopIDs7CSMgQXNzdW1lIGFsbCBvdGhlciB2ZXJzaW9ucyBhcmUgZ29vZC4K LSAJCQkJZXNhYwotQEAgLTMxMjEsNiArMzE1NCw3IEBACi0gCQkJCSMgT3BlblNTTCAzICYgNDsg d2UgdXNlIHRoZSAxLjF4IEFQSQotIAkJCQkjIGh0dHBzOi8vb3BlbnNzbC5vcmcvcG9saWNpZXMv Z2VuZXJhbC92ZXJzaW9uaW5nLXBvbGljeS5odG1sCi0gCQkJCUNQUEZMQUdTPSIkQ1BQRkxBR1Mg LURPUEVOU1NMX0FQSV9DT01QQVQ9MHgxMDEwMDAwMEwiCi0rCQkJCUFDX0RFRklORShbV0lUSF9P UEVOU1NMM10sIFsxXSwgW1dpdGggT3BlblNTTDNdKQotIAkJCQk7OwotIAkJICAgICAgICAqKQot IAkJCQlBQ19NU0dfRVJST1IoW1Vua25vd24vdW5zdXBwb3J0ZWQgT3BlblNTTCB2ZXJzaW9uICgi JHNzbF9zaG93dmVyIildKQotQEAgLTMyNDMsNiArMzI3NywyOSBAQAotIAkJRVZQX0NJUEhFUl9D VFhfc2V0X2l2IFwKLSAJXSkKLSAKLSsJIyBPcGVuU1NMIDMuMCBBUEkKLSsJIyBEb2VzIE9wZW5T U0wgc3VwcG9ydCB0aGUgRVZQX01BQyBmdW5jdGlvbnMgZm9yIFBvbHkxMzA1PwotKwlBQ19NU0df Q0hFQ0tJTkcoW3doZXRoZXIgT3BlblNTTCBzdXBwb3J0cyBQb2x5MTMwNSBNQUMgRVZQXSkKLSsJ QUNfUlVOX0lGRUxTRSgKLSsJCVtBQ19MQU5HX1BST0dSQU0oW1sKLSsJI2luY2x1ZGUgPHN0ZGxp Yi5oPgotKwkjaW5jbHVkZSA8c3RkaW8uaD4KLSsJI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0r CQldXSwgW1sKLSsJCUVWUF9NQUMgKm1hYyA9IEVWUF9NQUNfZmV0Y2goTlVMTCwgInBvbHkxMzA1 IiwgTlVMTCk7Ci0rCQlpZiAobWFjID09IE5VTEwpCi0rCQkgICBleGl0KDEpOwotKwkJXV0pXSwK LSsJCVsKLSsJCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQotKwkJCUFDX0RFRklORShbT1BFTlNTTF9I QVZFX1BPTFlfRVZQXSwgWzFdLAotKwkJCSAgICBbTGliY3J5cHRvIHN1cHBvcnRzIFBvbHkxMzA1 IE1BQyBFVlBdKQotKwkJXSwKLSsJCVsKLSsJCQlBQ19NU0dfUkVTVUxUKFtub10pCi0rCQldCi0r CSkKLSsKLSAJaWYgdGVzdCAieCRvcGVuc3NsX2VuZ2luZSIgPSAieHllcyIgOyB0aGVuCi0gCQlB Q19NU0dfQ0hFQ0tJTkcoW2ZvciBPcGVuU1NMIEVOR0lORSBzdXBwb3J0XSkKLSAJCUFDX0NPTVBJ TEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5v cmlnL2RlZmluZXMuaCBvcGVuc3NoLTEwLjJwMS9kZWZpbmVzLmgKLS0tLSBvcGVuc3NoLTEwLjJw MS5vcmlnL2RlZmluZXMuaAkyMDI1LTEwLTEwIDA0OjM4OjMxLjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2gtMTAuMnAxL2RlZmluZXMuaAkyMDI2LTAzLTE4IDE3OjU4OjExLjAwMzA5MDg2MSAr MDEwMAotQEAgLTkzOCw3ICs5MzgsMTEgQEAKLSAjZW5kaWYKLSAKLSAjaWZuZGVmIFNTSF9JT0JV RlNaCi0tIyBkZWZpbmUgU1NIX0lPQlVGU1ogODE5MgotKyMgZGVmaW5lIFNTSF9JT0JVRlNaICgz MioxMDI0KQotKyNlbmRpZgotKwotKyNpZm5kZWYgSVBQUk9UT19NUFRDUAotKyNkZWZpbmUgSVBQ Uk9UT19NUFRDUCAyNjIKLSAjZW5kaWYKLSAKLSAvKgotQEAgLTEwMDEsMyArMTAwNSwxMiBAQAot ICNlbmRpZgotIAotICNlbmRpZiAvKiBfREVGSU5FU19IICovCi0rCi0rLyogdXNlZCB0byBlbmFi bGUgY2hlY2tpbmcgbGludXgga2VybmVsIHZlcnNpb25zICovCi0rI2lmIGRlZmluZWQoX19saW51 eF9fKSAmJiAhZGVmaW5lZChfX2FscGluZV9fKQotKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ Ci0rI2VuZGlmCi0rCi0rI2lmbmRlZiBLRVJORUxfVkVSU0lPTiAvKiBzaG91bGRuJ3QgYmUgbmVj ZXNzYXJ5IHRvIGRlZmluZSB0aGlzICovCi0rI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykg KCgoYSkgPDwxNikgKyAoKGIpIDw8IDgpICsoYykpCi0rI2VuZGlmCi1kaWZmIC1OdXIgb3BlbnNz aC0xMC4ycDEub3JpZy9kaWdlc3QuaCBvcGVuc3NoLTEwLjJwMS9kaWdlc3QuaAotLS0tIG9wZW5z c2gtMTAuMnAxLm9yaWcvZGlnZXN0LmgJMjAyNS0xMC0xMCAwNDozODozMS4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9kaWdlc3QuaAkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg0Njc3 NDk2MCArMDEwMAotQEAgLTI3LDcgKzI3LDggQEAKLSAjZGVmaW5lIFNTSF9ESUdFU1RfU0hBMjU2 CTIKLSAjZGVmaW5lIFNTSF9ESUdFU1RfU0hBMzg0CTMKLSAjZGVmaW5lIFNTSF9ESUdFU1RfU0hB NTEyCTQKLS0jZGVmaW5lIFNTSF9ESUdFU1RfTUFYCQk1Ci0rI2RlZmluZSBTU0hfRElHRVNUX05V TEwJCTUKLSsjZGVmaW5lIFNTSF9ESUdFU1RfTUFYCQk2Ci0gCi0gc3RydWN0IHNzaGJ1ZjsKLSBz dHJ1Y3Qgc3NoX2RpZ2VzdF9jdHg7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9kaWdl c3Qtb3BlbnNzbC5jIG9wZW5zc2gtMTAuMnAxL2RpZ2VzdC1vcGVuc3NsLmMKLS0tLSBvcGVuc3No LTEwLjJwMS5vcmlnL2RpZ2VzdC1vcGVuc3NsLmMJMjAyNS0xMC0xMCAwNDozODozMS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9kaWdlc3Qtb3BlbnNzbC5jCTIwMjYtMDMtMTgg MTU6NTc6NDMuMDQzMDA2NzU2ICswMTAwCi1AQCAtNjEsNiArNjEsNyBAQAotIAl7IFNTSF9ESUdF U1RfU0hBMjU2LAkiU0hBMjU2IiwJMzIsCUVWUF9zaGEyNTYgfSwKLSAJeyBTU0hfRElHRVNUX1NI QTM4NCwJIlNIQTM4NCIsCTQ4LAlFVlBfc2hhMzg0IH0sCi0gCXsgU1NIX0RJR0VTVF9TSEE1MTIs CSJTSEE1MTIiLAk2NCwJRVZQX3NoYTUxMiB9LAotKwl7IFNTSF9ESUdFU1RfTlVMTCwJIk5PTkVN QUMiLAkwLAlFVlBfbWRfbnVsbH0sCi0gCXsgLTEsCQkJTlVMTCwJCTAsCU5VTEwgfSwKLSB9Owot IAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvaGFwcHlleWViYWxscy5jIG9wZW5zc2gt MTAuMnAxL2hhcHB5ZXllYmFsbHMuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvaGFwcHlleWVi YWxscy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0x MC4ycDEvaGFwcHlleWViYWxscy5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODQ3Mzc5NTUzICswMTAw Ci1AQCAtMCwwICsxLDMxMyBAQAotKy8qCi0rICogQ29weXJpZ2h0IChjKSAyMDI1IFRoZSBCb2Fy ZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KLSsgKgotKyAqICBB dXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+Ci0rICogIEF1dGhvcjogS2ltIE1p aG4gS2FwbGFuIChrYXBsYW4gYXQga2ltLW1paG4uY29tKQotKyAqCi0rICogVGhpcyBsaWJyYXJ5 IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKLSsgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgotKyAqCi0rICogVGhp cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCi0rICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0rICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0r ICoKLSsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGljZW5z ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKLSsgKiBpZiBub3QsIHNlZSBodHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvTUlULgotKyAqCi0rICovCi0rLyogVGhpcyBpcyBhbiBpbXBsZW1l bnRhdGlvbiBvZiBSRkMgODMwNSBiYXNlZCBvbiBhIHBhdGNoCi0rICogc3VwcGxpZWQgYnkgS2lt IE1pbmggS2FwbGFuIChrYXBsYW4gYXQga2ltLW1pbmguY29tKS4KLSsgKiBJbmZvcm1hdGlvbiBh Ym91dCBSRkMgODMwNSBjYW4gYmUgZm91bmQgYXQKLSsgKiBodHRwczovL3d3dy5yZmMtZWRpdG9y Lm9yZy9yZmMvcmZjODMwNQotKyAqIFRoaXMgdmVyc2lvbiAqZG9lcyBub3QqIHByb3ZpZGUgc3Vw cG9ydCBmb3IKLSsgKiBTZWN0aW9uIDMgd2hlcmUgYXN5Y2hyb25vdXMgcG9sbGluZyBvZiBETlMg c2VydmVycwotKyAqIGlzIGEgU0hPVUxELgotKyAqIFNlY3Rpb24gNCByZXF1aXJlcyBzb3J0aW5n IG9mIEROUyByZXN1bHRzIGFzIHBlcgotKyAqIFJGQyA2NzI0LiBUaGlzIGlzIHByb3ZpZGVkIGJ5 IHRoZSBnZXRhZGRyaW5mbyBjYWxsCi0rICogZnJvbSBnY2MuIFRoaXMgbWF5IG5vdCBiZSBhdmFp bGFibGUgdmlhIG11c2wuCi0rICogSW50ZXJsZWF2aW5nIG9mIGFkZHJlc3NlcyBpcyBub3QgY3Vy cmVudGx5IHN1cHBvcnRlZC4KLSsgKiBTZWN0aW9uIDUgaXMgaW1wbGVtZW50ZWQuCi0rICogU2Vj dGlvbiA2IGlzIG5vdCBpbXBsZW1lbnRlZCBvdXRzaWRlIG9mIGdldGFkZHJpbmZvCi0rICogU2Vj dGlvbiA3IGluIHVuZGVyIGNvbnNpZGVyYXRpb24KLSsgKi8KLSsKLSsKLSsvKiBOT1RFOiBUaGVy ZSBhcmUgYSBsb3Qgb2YgZGVidWcgc3RhdGVtZW50cyBpbiBoZXJlCi0rICogYmVjYXVzZSB3ZSBh cmUgc3RpbGwgdHJlYXRpbmcgdGhpcyBhcyBzb21ld2hhdAotKyAqIGV4cGVyaW1lbnRhbC4gQSBm dXR1cmUgdmVyc2lvbiB3aWxsIHByb21vdGUgdGhpcwotKyAqIHRvIHN0YWJsZSBhbmQgd2UnbGwg cmVtb3ZlIGEgbG90IG9mIHRoZSBsZXZlbCAyCi0rICogZGVidWcgc3RhdGVtZW50cyB0aGVuLgot KyAqLwotKwotKyNpbmNsdWRlICJpbmNsdWRlcy5oIgotKyNpZmRlZiBIQVZFX1NZU19USU1FX0gK LSsjIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPgot KyNpbmNsdWRlIDxuZXQvaWYuaD4KLSsjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotKyNpbmNsdWRl IDxhcnBhL2luZXQuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHVuaXN0ZC5o PgotKwotKyNpbmNsdWRlICJoYXBweWV5ZWJhbGxzLmgiCi0rI2luY2x1ZGUgInNzaGNvbm5lY3Qu aCIKLSsjaW5jbHVkZSAic3NoLmgiCi0rI2luY2x1ZGUgIm1pc2MuaCIKLSsjaW5jbHVkZSAibG9n LmgiCi0rI2luY2x1ZGUgInJlYWRjb25mLmgiCi0rCi0rLyogdGhpcyBpcyBmcm9tIHNzaGNvbm5l Y3QuYyAqLwotK2V4dGVybiBpbnQgc3NoX2NyZWF0ZV9zb2NrZXQoc3RydWN0IGFkZHJpbmZvICph aSk7Ci0rCi0rLyogZ2V0IHRoZSBvcHRpb25zIHN0cnVjdCBpZiBmb3IgdGhlIGRlbGF5IHRpbWUg Ki8KLStleHRlcm4gT3B0aW9ucyBvcHRpb25zOwotKwotKy8qIGhhdmUgd2UgdGltZWQgb3V0PyAq LwotK3N0YXRpYyBpbnQKLSt0aW1lb3V0KHN0cnVjdCB0aW1ldmFsICp0diwgaW50IHRpbWVvdXRf bXMpCi0rIHsKLSsJaWYgKHRpbWVvdXRfbXMgPD0gMCkKLSsJCXJldHVybiAwOwotKwltc19zdWJ0 cmFjdF9kaWZmKHR2LCAmdGltZW91dF9tcyk7Ci0rCXJldHVybiB0aW1lb3V0X21zIDw9IDA7Ci0r fQotKwotKy8qIHVzZWQgdG8gcHJvdmlkZSBkZWJ1ZyBtZXNzYWdlIGluIHNzaGNvbm5lY3QgKi8K LStjaGFyIGdsb2JhbF9udG9wW05JX01BWEhPU1RdOwotKwotKy8qIHVzZWQgdG8gcHJvdmlkZSBp bmZvcm1hdGlvbiBmb3IgZGVidWcgc3RhdGVtZW50cyAqLwotK2NoYXIgKnJldHVybl9mYW0oaW50 IGZhbSkgewotKwlpZiAoZmFtID09IDEwKQotKwkJcmV0dXJuICJJUHY2IjsKLSsJZWxzZQotKwkJ cmV0dXJuICJJUHY0IjsKLSt9Ci0rCi0rLyoKLSsgKiBSZXR1cm4gMCBpZiB0aGUgYWRkcmluZm8g d2FzIG5vdCB0cmllZC4gUmV0dXJuIC0xIGlmIHVzaW5nIGl0Ci0rICogZmFpbGVkLiBSZXR1cm4g MSBpZiBpdCB3YXMgdXNlZC4KLSsgKi8KLStzdGF0aWMgaW50Ci0raGFwcHlfZXllYmFsbHNfaW5p dGlhdGUoY29uc3QgY2hhciAqaG9zdCwgc3RydWN0IGFkZHJpbmZvICphaSwKLSsJCQkJICAgIGlu dCAqdGltZW91dF9tcywKLSsJCQkJICAgIHN0cnVjdCB0aW1ldmFsICppbml0aWF0ZSwKLSsJCQkJ ICAgIGludCAqbmZkcywgZmRfc2V0ICpmZHMsCi0rCQkJCSAgICBzdHJ1Y3QgYWRkcmluZm8gKmZk X2FpW10pCi0rewotKwlpbnQgb2Vycm5vLCBzb2NrOwotKwljaGFyIG50b3BbTklfTUFYSE9TVF0s IHN0cnBvcnRbTklfTUFYU0VSVl07Ci0rCi0rCWRlYnVnMl9mICgiSGFwcHkgZXllYmFsbHMgaW5p dGlhdGluZyIpOwotKwltZW1zZXQobnRvcCwgMCwgc2l6ZW9mKG50b3ApKTsKLSsJbWVtc2V0KHN0 cnBvcnQsIDAsIHNpemVvZihzdHJwb3J0KSk7Ci0rCS8qIElmICpuZmRzICE9IDAgdGhlbiAqaW5p dGlhdGUgaXMgaW5pdGlhbGlzZWQuICovCi0rCWlmICgqbmZkcyAmJgotKwkgICAgKGFpID09IE5V TEwgfHwKLSsJICAgICAhdGltZW91dChpbml0aWF0ZSwgb3B0aW9ucy5oYXBweV9kZWxheSkpKSB7 Ci0rCQkvKiBEbyBub3QgaW5pdGlhdGUgbmV3IGNvbm5lY3Rpb25zIHlldCAqLwotKwkJZGVidWcy X2YgKCJXYWl0aW5nIHRvIGluaXRpYXRlIG5ldyBjb25uZWN0aW9uIik7Ci0rCQlyZXR1cm4gMDsK LSsJfQotKwkvKiB0cnlpbmcgdG8gdXNlIGEgZmFtaWx5IHdlIGRvbid0IHN1cHBvcnQgKi8KLSsJ aWYgKGFpLT5haV9mYW1pbHkgIT0gQUZfSU5FVCAmJiBhaS0+YWlfZmFtaWx5ICE9IEFGX0lORVQ2 KSB7Ci0rCQlkZWJ1ZzJfZiAoIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiKTsKLSsJCWVy cm5vID0gRUFGTk9TVVBQT1JUOwotKwkJcmV0dXJuIC0xOwotKwl9Ci0rCi0rCWRlYnVnMl9mICgi UnVubmluZyBnZXRuYW1laW5mbyBmb3IgJXMgYW5kICVkIiwgaG9zdCwgYWktPmFpX2ZhbWlseSk7 Ci0rCWlmIChnZXRuYW1laW5mbyhhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4sCi0rCQkJbnRv cCwgc2l6ZW9mKG50b3ApLAotKwkJCXN0cnBvcnQsIHNpemVvZihzdHJwb3J0KSwKLSsJCQlOSV9O VU1FUklDSE9TVHxOSV9OVU1FUklDU0VSVikgIT0gMCkgewotKwkJb2Vycm5vID0gZXJybm87Ci0r CQllcnJvcigiJXM6IGdldG5hbWVpbmZvIGZhaWxlZCIsIF9fZnVuY19fKTsKLSsJCWVycm5vID0g b2Vycm5vOwotKwkJcmV0dXJuIC0xOwotKwl9Ci0rCW1lbWNweShnbG9iYWxfbnRvcCxudG9wLHNp emVvZihudG9wKSk7Ci0rCWRlYnVnMl9mKCJSRkMgODMwNSBjb25uZWN0aW5nIHRvICUuMjAwcyBb JS4xMDBzXSBwb3J0ICVzLiIsCi0rCSAgICAgIGhvc3QsIG50b3AsIHN0cnBvcnQpOwotKwlkZWJ1 ZzJfZigiUkZDIDgzMDU6ICUuMjAwcyIsIGdsb2JhbF9udG9wKTsKLSsJLyogQ3JlYXRlIGEgc29j a2V0IGZvciBjb25uZWN0aW5nICovCi0rCXNvY2sgPSBzc2hfY3JlYXRlX3NvY2tldChhaSk7Ci0r CWlmIChzb2NrIDwgMCkgewotKwkJLyogQW55IGVycm9yIGlzIGFscmVhZHkgb3V0cHV0ICovCi0r CQllcnJubyA9IDA7Ci0rCQlyZXR1cm4gLTE7Ci0rCX0KLSsJaWYgKHNvY2sgPj0gRkRfU0VUU0la RSkgewotKwkJZXJyb3IoInNvY2tldCBudW1iZXIgdG8gYmlnIGZvciBzZWxlY3Q6ICVkIiwgc29j ayk7Ci0rCQljbG9zZShzb2NrKTsKLSsJCXJldHVybiAtMTsKLSsJfQotKwlmZF9haVtzb2NrXSA9 IGFpOwotKwkvKiB1c2luZyBub25ibG9ja2luZyBzb2NrZXRzIHdpdGggc2VsZWN0IGFsbG93cwot KwkgKiB1cyB0byBmaXJlIG9mZiBuZXcgc29ja2V0cyB3aXRob3V0IHdhaXRpbmcgZm9yIGEKLSsJ ICogY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZC4gVGhpcyBsZXRzIHVzIGF2b2lkCi0rCSAq IHRoZSB1c2Ugb2YgdGhyZWFkcy4gc2V0X25vbmJsb2NrIGlzIGluIG1pc2MuYwotKwkgKiBhbmQg dXNlcyBmbmN0bCAqLwotKwlzZXRfbm9uYmxvY2soc29jayk7Ci0rCWRlYnVnMl9mKCJSRkMgODMw NSBwcmUtY29ubmVjdCBmb3IgJXMiLCByZXR1cm5fZmFtKGFpLT5haV9mYW1pbHkpKTsKLSsJaWYg KGNvbm5lY3Qoc29jaywgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA8IDAgJiYKLSsJICAg IGVycm5vICE9IEVJTlBST0dSRVNTKSB7Ci0rCQllcnJvcigiY29ubmVjdCB0byBhZGRyZXNzICVz IHBvcnQgJXM6ICVzIiwKLSsJCSAgICAgIG50b3AsIHN0cnBvcnQsIHN0cmVycm9yKGVycm5vKSk7 Ci0rCQllcnJubyA9IDA7Ci0rCQljbG9zZShzb2NrKTsKLSsJCXJldHVybiAtMTsKLSsJfQotKwlk ZWJ1Z19mKCJSRkMgODMwNSBwb3N0IGNvbm5lY3QgZm9yICVzIiwgcmV0dXJuX2ZhbShhaS0+YWlf ZmFtaWx5KSk7Ci0rCW1vbm90aW1lX3R2KGluaXRpYXRlKTsKLSsJRkRfU0VUKHNvY2ssIGZkcyk7 Ci0rCSpuZmRzID0gTUFYSU1VTSgqbmZkcywgc29jayArIDEpOwotKwlyZXR1cm4gMTsKLSt9Ci0r Ci0rc3RhdGljIGludAotK2hhcHB5X2V5ZWJhbGxzX3Byb2Nlc3MoaW50ICpuZmRzLCBmZF9zZXQg KmZkcywKLSsJCQkJICAgc3RydWN0IGFkZHJpbmZvICpmZF9haVtdLAotKwkJCQkgICBpbnQgcmVh ZHksIGZkX3NldCAqd2ZkcykKLSt7Ci0rCXNvY2tsZW5fdCBvcHRsZW47Ci0rCWludCBzb2NrLCBv cHR2YWwgPSAwOwotKwljaGFyIG50b3BbTklfTUFYSE9TVF0sIHN0cnBvcnRbTklfTUFYU0VSVl07 Ci0rCi0rCWRlYnVnMl9mKCJQcm9jZXNzaW5nIFJGQyA4MzA1IGNvbm5lY3Rpb25zIik7Ci0rCWZv ciAoc29jayA9ICpuZmRzIC0gMTsgcmVhZHkgPiAwICYmIHNvY2sgPj0gMDsgc29jay0tKSB7Ci0r CQlkZWJ1ZzJfZigiUkZDIDgzMDU6IFByb2Nlc3NpbmcgZm9yICVzOiAlZCIsIHJldHVybl9mYW0o ZmRfYWlbc29ja10tPmFpX2ZhbWlseSksIHNvY2spOwotKwkJaWYgKEZEX0lTU0VUKHNvY2ssIHdm ZHMpKSB7Ci0rCQkJZGVidWcyX2YoIlJGQyA4MzA1OiBGRF9JU1NFVCB0cnVlIGZvciAlZCIsIHNv Y2spOwotKwkJCXJlYWR5LS07Ci0rCQkJb3B0bGVuID0gc2l6ZW9mKG9wdHZhbCk7Ci0rCQkJZGVi dWdfZigiUkZDIDgzMDU6IG9wdHZhbCBpcyAlZCBmb3IgJWQiLCBvcHR2YWwsIHNvY2spOwotKwkJ CWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX0VSUk9SLAotKwkJCQkgICAgICAg Jm9wdHZhbCwgJm9wdGxlbikgPCAwKSB7Ci0rCQkJCW9wdHZhbCA9IGVycm5vOwotKwkJCQllcnJv cigiZ2V0c29ja29wdCBmYWlsZWQ6ICVzIiwKLSsJCQkJICAgICAgc3RyZXJyb3IoZXJybm8pKTsK LSsJCQl9IGVsc2UgaWYgKG9wdHZhbCAhPSAwKSB7Ci0rCQkJCWRlYnVnX2YoIlJGQyA4MzA1OiBD b3B5aW5nIGRhdGEgZm9yICVkIG9uICVzIiwgb3B0dmFsLCByZXR1cm5fZmFtKGZkX2FpW3NvY2td LT5haV9mYW1pbHkpKTsKLSsJCQkJbWVtc2V0KG50b3AsIDAsIHNpemVvZihudG9wKSk7Ci0rCQkJ CW1lbXNldChzdHJwb3J0LCAwLCBzaXplb2Yoc3RycG9ydCkpOwotKwkJCQlpZiAoZ2V0bmFtZWlu Zm8oZmRfYWlbc29ja10tPmFpX2FkZHIsCi0rCQkJCQkJZmRfYWlbc29ja10tPmFpX2FkZHJsZW4s Ci0rCQkJCQkJbnRvcCwgc2l6ZW9mKG50b3ApLAotKwkJCQkJCXN0cnBvcnQsIHNpemVvZihzdHJw b3J0KSwKLSsJCQkJCQlOSV9OVU1FUklDSE9TVHxOSV9OVU1FUklDU0VSVikgIT0gMCkKLSsJCQkJ CWVycm9yKCJjb25uZWN0IGZpbmFsbHkgZmFpbGVkOiAlcyIsCi0rCQkJCQkgICAgICBzdHJlcnJv cihvcHR2YWwpKTsKLSsJCQkJZWxzZQotKwkJCQkJZXJyb3IoImNvbm5lY3QgdG8gYWRkcmVzcyAl cyBwb3J0ICVzIGZpbmFsbHk6ICVzIiwKLSsJCQkJCSAgICAgIG50b3AsIHN0cnBvcnQsIHN0cmVy cm9yKG9wdHZhbCkpOwotKwkJCX0KLSsJCQlGRF9DTFIoc29jaywgZmRzKTsKLSsJCQl3aGlsZSAo Km5mZHMgPiAwICYmICEgRkRfSVNTRVQoKm5mZHMgLSAxLCBmZHMpKQotKwkJCQktLSpuZmRzOwot KwkJCWlmIChvcHR2YWwgPT0gMCkgewotKwkJCQlkZWJ1Z19mKCJSRkMgODMwNTogdW5zZXR0aW5n IG5vbmJsb2NrIGZvciAlcyBvbiAlZCIsCi0rCQkJCSAgICByZXR1cm5fZmFtKGZkX2FpW3NvY2td LT5haV9mYW1pbHkpLCBzb2NrKTsKLSsJCQkJdW5zZXRfbm9uYmxvY2soc29jayk7Ci0rCQkJCXJl dHVybiBzb2NrOwotKwkJCX0KLSsJCQljbG9zZShzb2NrKTsKLSsJCQllcnJubyA9IG9wdHZhbDsK LSsJCX0KLSsJfQotKwlyZXR1cm4gLTE7Ci0rfQotKwotK2ludAotK2hhcHB5X2V5ZWJhbGxzKGNv bnN0IGNoYXIgKiBob3N0LCBzdHJ1Y3QgYWRkcmluZm8gKmFpLAotKwkJCSAgIHN0cnVjdCBzb2Nr YWRkcl9zdG9yYWdlICpob3N0YWRkciwgaW50ICp0aW1lb3V0X21zKQotK3sKLSsJc3RydWN0IGFk ZHJpbmZvICpmZF9haVtGRF9TRVRTSVpFXTsgLyogMTAyNCAqLwotKwlzdHJ1Y3QgdGltZXZhbCBp bml0aWF0ZV90diwgc3RhcnRfdHYsIHNlbGVjdF90diwgKnR2OwotKwlmZF9zZXQgZmRzLCB3ZmRz OwotKwlpbnQgcmVzLCBvZXJybm8sIGRpZmYsIGRpZmYwLCBuZmRzID0gMCwgc29jayA9IC0xOwot KwotKwlkZWJ1Z19mKCJTdGFydGluZyBSRkMgODMwNS9IYXBweSBFeWViYWxscyBjb25uZWN0aW9u Iik7Ci0rCi0rCUZEX1pFUk8oJmZkcyk7Ci0rCWlmICgqdGltZW91dF9tcyA+IDApIC8qIGRlZmF1 bHQgdmFsdWUgb2Ygbm8gdGltZW91dCAtIHVzZSBUQ1AgZGVmYXVsdCBpbnN0ZWFkICovCi0rCQlt b25vdGltZV90digmc3RhcnRfdHYpOyAvKiBtb25vdGltZV90diBpcyBpbiBtaXNjLmMgKi8KLSsK LSsJLyogcnVuIHRocm91Z2ggcG90ZW50aWFscyB1bmxlc3Mgd2UgaGF2ZSB0aW1lZCBvdXQgKi8K LSsJLyogdGltZW91dF9tcyBiZWluZyB0aGUgdXNlciBkZWZpbmVkIGNvbm5lY3Rpb24gdGltZW91 dCBpZgotKwkgKiB0aGV5IGFyZW4ndCB1c2luZyB0aGUgdGNwIHRpbWVvdXQgKi8KLSsJd2hpbGUg KChhaSAhPSBOVUxMIHx8IG5mZHMgPiAwKSAmJgotKwkgICAgICAgISB0aW1lb3V0KCZzdGFydF90 diwgKnRpbWVvdXRfbXMpKSB7Ci0rCQkvKiBzZXQgdXAgdGhlIHNvY2tldHMgKi8KLSsJCXJlcyA9 IGhhcHB5X2V5ZWJhbGxzX2luaXRpYXRlKGhvc3QsIGFpLAotKwkJICAgICB0aW1lb3V0X21zLCAm aW5pdGlhdGVfdHYsICZuZmRzLCAmZmRzLCBmZF9haSk7Ci0rCQlpZiAocmVzICE9IDApCi0rCQkJ YWkgPSBhaS0+YWlfbmV4dDsKLSsJCWlmIChyZXMgPT0gLTEpCi0rCQkJY29udGludWU7Ci0rCQl0 diA9IE5VTEw7Ci0rCi0rCQkvKiB0aGlzIGlzIGp1c3QgdG8gZGV0ZXJtaW5lIHRoZSBwYXVzZSBi ZXR3ZWVuCi0rCQkgKiBjYWxscyB0byBzZWxlY3QuICovCi0rICAJCWlmIChhaSAhPSBOVUxMIHx8 ICp0aW1lb3V0X21zID4gMCkgewotKwkJCWRlYnVnMl9mICgiUkZDIDgzMDU6IEluIHBhdXNlLi4u Iik7Ci0rCQkJdHYgPSAmc2VsZWN0X3R2OwotKwkJCWlmIChhaSAhPSBOVUxMKSB7Ci0rCQkJCWRp ZmYgPSBvcHRpb25zLmhhcHB5X2RlbGF5OwotKwkJCQltc19zdWJ0cmFjdF9kaWZmKCZpbml0aWF0 ZV90diwgJmRpZmYpOwotKwkJCQlpZiAoKnRpbWVvdXRfbXMgPiAwKSB7Ci0rCQkJCQlkaWZmMCA9 ICp0aW1lb3V0X21zOwotKwkJCQkJbXNfc3VidHJhY3RfZGlmZigmc3RhcnRfdHYsICZkaWZmMCk7 Ci0rCQkJCQlkaWZmID0gTUlOSU1VTShkaWZmLCBkaWZmMCk7Ci0rCQkJCX0KLSsJCQl9IGVsc2Ug ewotKwkJCQlkaWZmID0gKnRpbWVvdXRfbXM7Ci0rCQkJCW1zX3N1YnRyYWN0X2RpZmYoJnN0YXJ0 X3R2LCAmZGlmZik7Ci0rCQkJfQotKwkJCXR2LT50dl9zZWMgPSBkaWZmIC8gMTAwMDsKLSsJCQl0 di0+dHZfdXNlYyA9IChkaWZmICUgMTAwMCkgKiAxMDAwOwotKwkJfQotKwotKwkJLyogY3JlYXRl IGEgd3JpdGVhYmxlIHNldCBvZiBmaWxlIGRlc2NyaXB0b3JzICovCi0rCQl3ZmRzID0gZmRzOwot KwkJLyogc2VsZWN0IHdpbGwgcGF1c2UgZm9yIHRpbWUgdHYgZGV0ZXJtaW5lZCBieSB0aGUgYWJv dmUKLSsJCSAqIHRpbWluZyBjYWN1bGF0aW9ucyAqLwotKwkJZGVidWcyX2YoIlJGQyA4MzA1OiBT dGFydGluZyBzZWxlY3QiKTsKLSsJCXJlcyA9IHNlbGVjdChuZmRzLCBOVUxMLCAmd2ZkcywgTlVM TCwgdHYpOwotKwkJZGVidWcyX2YoIlJGQyA4MzA1OiBMZWF2aW5nIHNlbGVjdCIpOwotKwotKwkJ LyogcHJlc2VydmUgYW55IGVycm9ycyAqLwotKwkJb2Vycm5vID0gZXJybm87Ci0rCQlpZiAocmVz IDwgMCkgewotKwkJCWVycm9yKCJzZWxlY3QgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7 Ci0rCQkJZXJybm8gPSBvZXJybm87Ci0rCQkJY29udGludWU7Ci0rCQl9Ci0rCQkvKiBzdGFydCBw cm9jZXNzaW5nIHRoZSBzb2NrZXRzICovCi0rCQlkZWJ1ZzJfZiAoIlJGQyA4MzA1OiBQcm9jZXNz aW5nIGhhcHB5IGV5ZWJhbGxzIGZkcyIpOwotKwkJc29jayA9IGhhcHB5X2V5ZWJhbGxzX3Byb2Nl c3MoJm5mZHMsICZmZHMsIGZkX2FpLAotKwkJCQkJCQkgIHJlcywgJndmZHMpOwotKwkJaWYgKHNv Y2sgPj0gMCkgewotKwkJCWRlYnVnX2YgKCJSRkMgODMwNSAvIEhhcHB5IEV5ZWJhbGxzIGNvbm5l Y3RlZCIpOwotKwkJCS8qIHdlIGhhdmUgYSBjb25uZWN0aW9uICovCi0rCQkJbWVtY3B5KGhvc3Rh ZGRyLCBmZF9haVtzb2NrXS0+YWlfYWRkciwKLSsJCQkgICAgICAgZmRfYWlbc29ja10tPmFpX2Fk ZHJsZW4pOwotKwkJCWJyZWFrOwotKwkJfQotKwkJZGVidWdfZigiUkZDIDgzMDU6IFJlc3RhcnRp bmcgd2hpbGUgbG9vcC4iKTsKLSsJfQotKwlvZXJybm8gPSBlcnJubzsKLSsJLyogY2xvc2Ugb3Ro ZXIgY29ubmVjdGlvbiBhdHRlbXB0cy9zb2NrZXRzICovCi0rCWRlYnVnMl9mKCJSRkMgODMwNTog TkZEUyBpcyAlZCIsIG5mZHMpOwotKwl3aGlsZSAobmZkcy0tID4gMCkgewotKwkJZGVidWcyX2Yo IlJGQyA4MzA1OiBSdW5uaW5nIEZEX0lTU0VUIG9uICVkIiwgbmZkcyk7Ci0rCQlpZiAoRkRfSVNT RVQobmZkcywgJmZkcykpCi0rCQkJY2xvc2UobmZkcyk7Ci0rCX0KLSsJLyogd2UgdGltZWQgb3V0 IHdpdGggbm8gdmFsaWQgY29ubmVjdGlvbnMgKi8KLSsJaWYgKHRpbWVvdXQoJnN0YXJ0X3R2LCAq dGltZW91dF9tcykpCi0rCQllcnJubyA9IEVUSU1FRE9VVDsKLSsJZWxzZQotKwkJZXJybm8gPSBv ZXJybm87Ci0rCXJldHVybiBzb2NrOwotK30KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmln L2hhcHB5ZXllYmFsbHMuaCBvcGVuc3NoLTEwLjJwMS9oYXBweWV5ZWJhbGxzLmgKLS0tLSBvcGVu c3NoLTEwLjJwMS5vcmlnL2hhcHB5ZXllYmFsbHMuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL2hhcHB5ZXllYmFsbHMuaAkyMDI2LTAzLTE4 IDE1OjEzOjE3Ljg0NzQ0NjAyMyArMDEwMAotQEAgLTAsMCArMSwyMyBAQAotKy8qCi0rICogQ29w eXJpZ2h0IChjKSAyMDI1IFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24g VW5pdmVyc2l0eS4KLSsgKgotKyAqICBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5l ZHU+Ci0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg TUlUIExpY2Vuc2UuCi0rICoKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSsgKiBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkg b3IKLSsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgKgotKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OwotKyAq IGlmIG5vdCwgc2VlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCi0rICoKLSsg Ki8KLSsvKgotKyAqIFJGQyA4MzA1IEhhcHB5IEV5ZWJhbGxzIFZlcnNpb24gMjogQmV0dGVyIENv bm5lY3Rpdml0eSBVc2luZyBDb25jdXJyZW5jeQotKyAqCi0rICovCi0rCi0raW50IGhhcHB5X2V5 ZWJhbGxzKGNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICosCi0rCQkgICBzdHJ1Y3Qgc29j a2FkZHJfc3RvcmFnZSAqLCBpbnQgKik7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9I UE4tUkVBRE1FIG9wZW5zc2gtMTAuMnAxL0hQTi1SRUFETUUKLS0tLSBvcGVuc3NoLTEwLjJwMS5v cmlnL0hQTi1SRUFETUUJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NoLTEwLjJwMS9IUE4tUkVBRE1FCTIwMjYtMDMtMTggMDk6Mzk6MjQuOTk3ODk5NjEyICsw MTAwCi1AQCAtMCwwICsxLDIwMCBAQAotK05vdGVzOgotKwotK0ZJUFMgTW9kZSBhbmQgUGFyYWxs ZWwgQ2lwaGVycyBpbiAxOC43LjEKLStVc2luZyBIUE4tU1NIIGluIG9wZXJhdGluZyBzeXN0ZW1z IHdvcmtpbmcgaW4gRklQUyBtb2RlIChlLmcuIFJIRUwgd2l0aAotK0ZJUFMgZW5hYmxlZCkgcHJl Y2x1ZGUgdGhlIHVzZSBvZiBwYXJhbGxlbCBjaXBoZXJzLiBUaGlzIGlzIGJlY2F1c2UKLSt0aGUg cGFyYWxsZWwgQUVTLUNUUiBpbXBsZW1lbnRhdGlvbiBpcyBub3QgRklQUyBjZXJ0aWZpZWQgYW5k IHdpbGwgY2F1c2UgRklQUwotK3RvIGV4aXQgd2l0aCBhbiBlcnJvciB3aGVuIGxvYWRlZC4gSW4g dGhlIGNhc2Ugb2YgdGhlIHBhcmFsbGVsIENoYUNoYTIwIGNpcGhlcgotK3RoZSBhbGdvcml0aG0g aXRzZWxmIGhhcyBub3QgYmVlbiBGSVBTIGNlcnRpZmllZCBhbmQgbm8gaW1wbGVtZW50YXRpb24g b2YKLStDaGFDaGEyMCBzaG91bGQgYmUgYWxsb3dlZCBpbiBGSVBTIG1vZGUuIFdlIHN1Z2dlc3Qg dGhlIHVzZSBvZiB0aGUgQUVTLUdDTQotK2NpcGhlciB3aGVuIG9wZXJhdGluZyB1bmRlciBGSVBT IG1vZGUgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UuIAotKwotK0hhcHB5IEV5ZWJhbGxzIFN1cHBv cnQgaW4gMTguNy4xIAotK0hhcHB5IEV5ZWJhbGxzIChSRkMgODMwNSkgaXMgZm9yIHVzZSBvbiBk dWFsIHN0YWNrIHN5c3RlbXMgbWVhbmluZyB0aGF0IHRoZXkgaGF2ZSBib3RoIAotK0lQdjQgYW5k IElQdjYgVENQIHN0YWNrcy4gV2hlbiBlbmFibGVkIHRoaXMgb3B0aW9uIHdpbGwgdHJ5IHRvIGNv bm5lY3QgdG8gdGhlCi0rdGFyZ2V0IG92ZXIgYm90aCBJUHY0IGFuZCBJUHY2IHdpdGggcHJlZmVy ZW5jZSBnaXZlbiB0byBJUHY2LiBUaGUgZmlyc3QgY29ubmVjdGlvbiAKLSt0aGF0IGNvbXBsZXRl cyBzdWNjZXNzZnVsbHkgd2lsbCBiZSB1c2VkLiBBbnkgb3V0c3RhbmRpbmcgY29ubmVjdGlvbiBh dHRlbXB0cyB3aWxsCi0rYmUgY2xvc2VkLiBBcyBvZiB2ZXJzaW9uIDE4LjcuMSB0aGlzIG9wdGlv biBzaG91bGQgYmUgY29uc2lkZXJlZCBzb21ld2hhdCBleHBlcmltZW50YWwuCi0rCi0rdXNhZ2U6 Ci0rLW9IYXBweUV5ZXM9W1llc3xOb10gd2lsbCBlbmFibGUgSGFwcHkgRXllYmFsbHMuIFRoZSBk ZWZhdWx0IGlzIG5vLiAKLSstb0hhcHB5RGVsYXk9W05dIHdoZXJlIE4gaXMgYSBwb3NpdGl2ZSBp bnRlZ2VyIGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMuCi0rICAgICAgICAgICAgICAgICBUaGUg ZGVmYXVsdCB2YWx1ZSBvZiAyNTBtcyBpcyBzdWdnZXN0ZWQgYnkgUkZDIDgzMDUuCi0rCi0rTVBU Q1AgU3VwcG9ydCBpbiAxOC43LjA6Ci0rTXVsdGlwYXRoIFRDUCBpcyBub3cgYXZhaWxhYmxlIGFz IGEgcnVudGltZSBvcHRpb24gZm9yIEhQTi1TU0guIE1QVENQCi0raXMgYXZhaWxhYmxlIG9ubHkg b24gTGludXggYW5kIE1hYyBPU1ggb3BlcmF0aW5nIHN5c3RlbXMuIFVzaW5nIE1QVENQIG9uIGEg c3lzdGVtIHRoYXQKLStkb2Vzbid0IHN1cHBvcnQgaXQgd2lsbCByZXN1bHQgaW4gYSBub3RpY2Ug YW5kIGZhaWx1cmUuIFRoZSB1c2UgY2FzZXMgZm9yIE1QVENQIGluY2x1ZGUKLStzZWFtbGVzcyBo YW5kb3ZlcnMgd2hlbiBjaGFuZ2luZyBuZXR3b3JrcyBhbmQgYWdncmVnYXRpbmcgbXVsdGlwbGUg aW50ZXJmYWNlcyB0byBpbXByb3ZlCi0rYXZhaWxhYmxlIGJhbmR3aWR0aC4gQXMgb2YgMTguNy4w IHRoaXMgb3B0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIHNvbWV3aGF0IGV4cGVyaW1lbnRhbC4K LSsKLStVc2FnZToKLSstb1VzZU1QVENQPVtZZXN8Tm9dIHdpbGwgZW5hYmxlIE1QVENQLiBUaGUg ZGVmYXVsdCBpcyBuby4KLSsKLStMaWJyZVNTTCBTdXBwb3J0OgotK0NoYW5nZXMgaW4gTGlicmVT U0wgdmVyc2lvbiAzLjUgYW5kIDMuNiBwcmV2ZW50IHRoZSB1c2Ugb2YgdGhlIHRocmVhZGVkIEFF UyBDVFIgY2lwaGVyLgotK0luIHRob3NlIGNhc2VzIEhQTlNTSCB3aWxsIGZhbGxiYWNrIHRvIHRo ZSBzZXJpYWwgdmVyc2lvbiBvZiB0aGUgQUVTIENUUiBjaXBoZXIuIEEgd2FybmluZwotK2lzIHBy aW50ZWQgdG8gc3RkZXJyLgotKwotK0F1dG9tYXRpYyBQb3J0IEZhbGxiYWNrIChpbiB2ZXJzaW9u IDE3djMpCi0rVGhlIGhwbnNzaCBjbGllbnQgbm93IHVzZXMgVENQIHBvcnQgMjIyMiB0byBjb25u ZWN0IGF1dG9tYXRpY2FsbHkgYXMgdGhpcyBpcyB0aGUKLStkZWZhdWx0IGhwbnNzaGQgcG9ydC4g SG93ZXZlciwgd2UgdW5kZXJzdGFuZCB0aGF0IG1hbnkgdXNlcnMgd2lsbCBiZSBlbmQgdXAgY29u bmVjdGluZwotK3N0YW5kYXJkIFNTSCBzZXJ2ZXJzIG9uIHBvcnQgMjIuIFRvIG1ha2UgdGhlIGVh c2llciBmb3IgdXNlcnMgdGhlIGNsaWVudCB3aWxsIGZhbGwgYmFjayB0bwotK3BvcnQgMjIgaW4g dGhlIGV2ZW50IHRoYXQgdGhlcmUgaXMgbm8gaHBuc3NoIHNlcnZlciBydW5uaW5nIG9uIHBvcnQg MjIyMi4gVGhlIGJlaGF2aW91ciBjYW4KLStiZSBtb2RpZmVkIGFzIGZvbGxvd3M6Ci0rLW9GYWxs YmFjaz1beWVzfG5vXSB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIHBvcnQgZmFsbGJhY2suIERlZmF1 bHQgaXMgeWVzLgotKy1vRmFsbGJhY2tQb3J0PVtOXSB3aGVyZSBOIGlzIHRoZSBwb3J0IG51bWJl ciB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBmYWxsIGJhY2suCi0rICAgIERlZmF1bHQgaXMgMjIu Ci0rCi0rVENQX0lORk8gTWV0cmljcwotK1RoaXMgZmVhdHVyZXMgYWxsb3dzIHRoZSBjbGllbnQg dG8gcmVxdWVzdCB0Y3AgbmV0d29ya2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZQotK1RDUF9JTkZP IHN0cnVjdC4gVGhpcyBpbmNsdWRlcyBkYXRhIG9uIHJldHJhbnNtaXRzLCByb3VuZCB0cmlwIHRp bWUsIGxvc3QgcGFja2V0cywKLStkYXRhIHRyYW5zZmVycmVkLCBhbmQgdGhlIGxpa2UuIFRoZSBt ZXRyaWNzIGFyZSBwb2xsZWQgcGVyaW9kaWNhbGx5IHRocm91Z2ggdGhlCi0rbGlmZSBvZiB0aGUg Y29ubmVjdGlvbi4gQnkgZGVmYXVsdCB0aGlzIGlzIGV2ZXJ5IDUgc2Vjb25kcyBidXQgdXNlcnMg Y2FuIHBpY2sgZGlmZmVyZW50Ci0rcG9sbGluZyBwZXJpb2RzLiBUaGUgcmVzdWx0aW5nIGRhdGEg aXMgc3RvcmVkIGluIHR3byBkaXN0aW5jdCBmaWxlczsgb25lIGZvciBsb2NhbAotK21ldHJpY3Mg YW5kIG9uZSBmb3IgcmVtb3RlIG1ldHJpY3MuIFJlbW90ZSBtZXRyaWNzIGFyZSBvbmx5IGF2YWls YWJsZSBpZiB0aGUgcmVtb3RlCi0rc3VwcG9ydHMgdGhpcyBmZWF0dXJlLiBUaGlzIGZlYXR1cmUg d2lsbCAqbm90KiBkaWFnbm9zZSBhIHBvb3JseSBwZXJmb3JtaW5nIGNvbm5lY3Rpb24KLStidXQg bWF5IHByb3ZpZGUgaW5zaWdodCBpbnRvIHdoYXQgaXMgaGFwcGVuaW5nIGR1cmluZyB0aGUgY29u bmVjdGlvbi4KLSsKLStVc2FnZToKLSstb01ldHJpY3M9W3llc3xub10gd2lsbCBlbmFibGUgbWV0 cmljcyBwb2xsaW5nLiBEZWZhdWx0OiBOby4KLSstb01ldHJpY3NJbnRlcnZhbD1bTl0gd2hlcmUg TiBpcyB0aGUgcG9sbGluZyBwZXJpb2QgaW4gc2Vjb25kcy4gRGVmYXVsdDogNSBzZWNvbmRzLgot Ky1vTWV0cmljc1BhdGg9Wy9maWxlcGF0aC9maWxlbmFtZV0gaXMgdGhlIG5hbWUgb2YgdGhlIGZp bGUgd2hlcmUgdGhlIHJlbW90ZSBhbmQKLSsgICAgbG9jYWwgZGF0YSB3aWxsIGJlIHN0b3JlZC4g RGVmYXVsdDogLi9zc2hfc3RhY2tfbWV0cmljcy5bbG9jYWx8cmVtb3RlXS4KLSsgICAgQW55IG90 aGVyIG9wdGlvbiBjaG9zZW4gYnkgdGhlIHVzZXIgd2lsbCBoYXZlIGEgLmxvY2FsIG9yIC5yZW1v dGUgc3VmZml4IGFwcGVuZGVkIHRvIGl0LgotKwotK1RoZSBudW1iZXIgb2YgaW5zdHJ1bWVudHMg cG9sbGVkIGJ5IHRoaXMgZmVhdHVyZXMgaXMgZGVwZW5kZW50IG9uIHRoZSBrZXJuZWwgb2YgdGhl IGhvc3QuCi0rVGhpcyBtZWFucyB0aGF0IGEgcmVtb3RlIGhvc3Qgd2l0aCBhbiBvbGRlciBrZXJu ZWwgbWF5IHJlcG9ydCBmZXdlciBpbnN0cnVtZW50cyB0aGFuIGEgY2xpZW50Ci0raG9zdCBydW5u aW5nIGEgY3VycmVudCBrZXJuZWwgb3IgdmljZSB2ZXJzYS4gSWYgdGhlcmUgaXMgYSBkaXNjcmVw ZW5jeSBpbiB0aGUgbnVtYmVyIG9mIGluc3RydW1lbnRzCi0raW4gdGhlIHNzaF9zdGFja19tZXRy aWNzLmxvY2FsIGFuZCAucmVtb3RlIGZpbGUgdGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgcmVhc29u LgotKwotK0FkZGl0aW9uYWxseSwgZGV0ZXJtaW5pbmcgd2hpY2ggZmlsZSByZXByZXNlbnRzIHNl bmRlciBzaWRlIHZlcnN1cyByZWNlaXZlciBzaWRlIGlzIGRlcGVuZGVudAotK29uIHRoZSBuYXR1 cmUgb2YgdGhlIGNvbm5lY3Rpb24uIFRoZXJmb3JlLCBpdCdzIHVwIHRvIHRoZSB1c2VyIHRvIG1h a2UgdGhhdCBkZXRlcm1pbmF0aW9uLgotKwotK0xpbnV4IE5vdGU6IEN1cnJlbnRseSB0aGlzIGlz IG9ubHkgc3VwcG9ydGVkIG9uIExpbnV4IGtlcm5lbCB2ZXJzaW9ucyAzLjcgYW5kIGdyZWF0ZXIu IE5ld2VyIGtlcm5lbHMKLSttYXkgaGF2ZSBtb3JlIGluc3RydW1lbnRzIGF2YWlsYWJsZSB0byBw b2xsIHRoYW4gb2xkZXIga2VybmVscy4KLSsKLStGcmVlQlNEIE5vdGU6IFRoaXMgaXMgc3VwcG9y dGVkIG9uIFJlbGVhc2UgNiBhbmQgaGlnaGVyLiBIb3dldmVyLCBGcmVlQlNEIGhhcyBmZXdlciBh dmFpbGFibGUKLStpbnN0cnVtZW50cyB0aGFuIG5ldyBMaW51eCBrZXJuZWxzLgotKwotK011bHRp cGxleGluZyBOb3RlOiBUaGUgbWV0cmljcyBhcmUgcmVwb3J0ZWQgZnJvbSB0aGUgVENQIHNvY2tl dCB3aGljaCBtZWFucyB0aGF0IGdhdGhlcmluZwotK21ldHJpY3MgZnJvbSBtdWx0aXBsZXhlZCBz ZXNzaW9ucyB3aWxsIHJlcG9ydCBvbiB0aGUgYWN0aXZpdHkgb2YgYWxsIHNlc3Npb25zIG9uIHRo YXQgc29ja2V0LgotK1RoaXMgd2lsbCBsaWtlbHkgcmVzdWx0IGluIGxlc3MgY2xlYXIgcmVzdWx0 cyBhbmQsIGFzIHN1Y2gsIHdlIHN1Z2dlc3Qgb25seSBnYXRoZXJpbmcgbWV0cmljcwotK2Zyb20g bm9uLW11bHRpcGxleGVkIHNlc3Npb24uCi0rCi0rSFBOU0NQIHdpdGggUmVzdW1lIGZ1bmN0aW9u YWxpdHkKLStUaGlzIGZlYXR1cmUgYWxsb3dzIGhwbnNjcCB0byByZXN1bWUgZmFpbGVkIHRyYW5z ZmVycy4gSW4gdGhlIGV2ZW50IG9mIGEgZmFpbGVkIHRyYW5zZmVyCi0raXNzdWVzIHRoZSBzYW1l IHNjcCBjb21tYW5kIHdpdGggdGhlICctUicgb3B0aW9uLiBGb3IgZXhhbXBsZSAtIGlmIHlvdSBp c3N1ZWQ6Ci0rJ2hwbnNjcCBteWh1Z2VmaWxlIG1lQGhvc3Q6ficKLSthbmQgaXQgZGllcyBoYWxm d2F5IHRocm91Z2ggdGhlIHRyYW5zZmVyIGlzc3VpbmcKLSsnaHBuc2NwIC1aIG15aHVnZWZpbGUg bWVAaG9zdDp+JwotK3dpbGwgcmVzdW1lIHRoZSB0cmFuc2ZlciBhdCB0aGUgcG9pbnQgd2hlcmUg aXQgbGVmdCBvZmYuCi0rCi0rVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZpbmcgdGhlIHNvdXJj ZSBob3N0IHNlbmQgYSBoYXNoIChibGFrZTJiNTEyKSBvZiB0aGUgZmlsZSB0byB0aGUKLSt0YXJn ZXQgaG9zdC4gVGhlIHRhcmdldCBob3N0IHRoZW4gY29tcHV0ZXMgaXQncyBvd24gaGFzaCBvZiB0 aGUgdGFyZ2V0IGZpbGUuIElmIHRoZSBoYXNoZXMgbWF0Y2gKLSt0aGVuIHRoZSBmaWxlIGlzIHNr aXBwZWQgYXMgdGhpcyBpbmRpY2F0ZXMgYSBzdWNjZXNzZnVsIHRyYW5zZmVyLiBIb3dldmVyLCBp ZiB0aGUgaGFzaGVzIGRvIG5vdAotK21hdGNoIHRoZW4gdGhlIHRhcmdldCBzZW5kcyB0aGUgc291 cmNlIGl0cyBoYXNoIGFsb25nIHdpdGggdGhlIHNpemUgb2YgdGhlIGZpbGUuIFRoZSBzb3VyY2Ug dGhlbgotK2NvbXB1dGVzIHRoZSBoYXNoIG9mIHRoZSBmaWxlICp1cCB0byogdGhlIHNpemUgb2Yg dGhlIHRhcmdldCBmaWxlLiBJZiB0aG9zZSBoYXNoZXMgbWF0Y2ggdGhlbgotK3RoZSBzb3VyY2Ug b25seSBzZW5kIHRoZSBuZWNlc3NhcnkgYnl0ZXMgdG8gY29tcGxldGUgdGhlIHRyYW5zZmVyLiBJ ZiB0aGUgaGFzaGVzIGRvIG5vdCBtYXRjaCB0aGVuCi0rdGhlIGVudGlyZSBmaWxlIGlzIHJlc2Vu dC4gSWYgdGhlIHRhcmdldCBmaWxlIGlzIGxhcmdlciB0aGVuIHRoZSBzb3VyY2UgZmlsZSB0aGVu IHRoZSBlbnRpcmUKLStzb3VyY2UgZmlsZSBpcyBzZW50IGFuZCBhbnkgZXhpc3RpbmcgdGFyZ2V0 IGZpbGUgaXMgb3ZlcndyaXR0ZW4uCi0rCi0rTVVMVEktVEhSRUFERUQgQUVTIENJUEhFUjoKLStU aGUgQUVTIGNpcGhlciBpbiBDVFIgbW9kZSBoYXMgYmVlbiBtdWx0aXRocmVhZGVkIChNVFItQUVT LUNUUikuIFRoaXMgd2lsbCBhbGxvdyBzc2ggaW5zdGFsbGF0aW9ucwotK29uIGhvc3RzIHdpdGgg bXVsdGlwbGUgY29yZXMgdG8gdXNlIG1vcmUgdGhhbiBvbmUgcHJvY2Vzc2luZyBjb3JlIGR1cmlu ZyBlbmNyeXB0aW9uLgotK1Rlc3RzIGhhdmUgc2hvdyBzaWduaWZpY2FudCB0aHJvdWdocHV0IHBl cmZvcm1hbmNlIGluY3JlYXNlcyB3aGVuIHVzaW5nIE1UUi1BRVMtQ1RSIHVwCi0rdG8gYW5kIGlu Y2x1ZGluZyBhIGZ1bGwgZ2lnYWJpdCBwZXIgc2Vjb25kIG9uIHF1YWQgY29yZSBzeXN0ZW1zLiBJ dCBzaG91bGQgYmUgcG9zc2libGUgdG8KLSthY2hpZXZlIGZ1bGwgbGluZSByYXRlIG9uIGR1YWwg Y29yZSBzeXN0ZW1zIGJ1dCBPUyBhbmQgZGF0YSBtYW5hZ2VtZW50IG92ZXJoZWFkIG1ha2VzIHRo aXMKLSttb3JlIGRpZmZpY3VsdCB0byBhY2hpZXZlLiBUaGUgY2lwaGVyIHN0cmVhbSBmcm9tIE1U Ui1BRVMtQ1RSIGlzIGVudGlyZWx5IGNvbXBhdGlibGUgd2l0aCBzaW5nbGUKLSt0aHJlYWQgQUVT LUNUUiAoU1QtQUVTLUNUUikgaW1wbGVtZW50YXRpb25zIGFuZCBzaG91bGQgYmUgMTAwJSBiYWNr d2FyZCBjb21wYXRpYmxlLiBPcHRpbWFsCi0rcGVyZm9ybWFuY2UgcmVxdWlyZXMgdGhlIE1UUi1B RVMtQ1RSIG1vZGUgYmUgZW5hYmxlZCBvbiBib3RoIGVuZHMgb2YgdGhlIGNvbm5lY3Rpb24uCi0r VGhlIE1UUi1BRVMtQ1RSIHJlcGxhY2VzIFNULUFFUy1DVFIgYW5kIGlzIHVzZWQgaW4gZXhhY3Rs eSB0aGUgc2FtZSB3YXkgd2l0aCB0aGUgc2FtZQotK25vbWVuY2xhdHVyZS4KLStVc2FnZSBleGFt cGxlczoKLSsJCXNzaCAtY2FlczEyOC1jdHIgeW91QGhvc3QuY29tCi0rCQlzY3AgLW9DaXBoZXI9 YWVzMjU2LWN0ciBmaWxlIHlvdUBob3N0LmNvbTp+L2ZpbGUKLSsKLStNVUxUSS1USFJFQURFRCBD aGFDaGEyMC1Qb2x5MTMwNSBDSVBIRVI6Ci0rVGhlIGRlZmF1bHQgY2lwaGVyIHVzZWQgYnkgSFBO LVNTSCBpcyBub3cgYSB0aHJlYWRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLStDaGFDaGEyMC1Q b2x5MTMwNSBjaXBoZXIuIEluIHRlc3RzIHRoaXMgY2lwaGVyIHJlc3VsdHMgaW4gYW4gYXBwcm94 aW1hdGVseSA5MCUgZ2FpbiBpbgotK3Rocm91Z2hwdXQgcGVyZm9ybWFuY2UgaW4gY29tcGFyaXNv biB0byB0aGUgc2VyaWFsIGltcGxlbWVudGF0aW9uIGZvdW5kIGluIE9wZW5TU0guCi0rVGhpcyBj aXBoZXIgaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGFsbCBrbm93biBleGlzdGluZyBpbXBsZW1l bnRhdGlvbnMgb2YgQ2hhQ2hhMjAtUG9seTEzMDUuCi0rCi0rSW50ZXJuYWxseSB0aGlzIGNpcGhl ciBpcyByZWZlcnJlZCB0byBhcyBjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIChDQzIw LU1UKQotK3NpbWlsYXIgdG8gaG93IHRoZSBPcGVuU1NIIGltcGxlbWVudGF0aW9uIGlzIGtub3du IGFzIGNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tCi0rKENDMjAtUyAoZm9yIHNlcmlhbCkp LiBObyBjaGFuZ2VzIGFyZSByZXF1aXJlZCBvbiB0aGUgcGFydCBvZiB0aGUgdXNlciB0byBtYWtl IHVzZSBvZiBDQzIwLU1ULgotK0hvd2V2ZXIsIGlmIHRoZSB1c2VycyBkb2Vzbid0IHdhbnQgdG8g bWFrZSB1c2Ugb2YgdGhpcyBjaXBoZXIgdGhleSBjYW4gZXhwbGljaXRseSBsb2FkIENDMjAtUyB1 c2luZwotKyctY2NoYWNoMjAtcG9seTEzMDVAb3BlbnNzaC5jb21gIG9uIHRoZSBjb21tYW5kIGxp bmUuCi0rCi0rTk9ORSBDSVBIRVI6Ci0rVG8gdXNlIHRoZSBOT05FIG9wdGlvbiB5b3UgbXVzdCBo YXZlIHRoZSBOb25lRW5hYmxlZCBzd2l0Y2ggc2V0IG9uIHRoZSBzZXJ2ZXIgYW5kCi0reW91ICpt dXN0KiBoYXZlICpib3RoKiBOb25lRW5hYmxlZCBhbmQgTm9uZVN3aXRjaCBzZXQgdG8geWVzIG9u IHRoZSBjbGllbnQuIFRoZSBOT05FCi0rZmVhdHVyZSB3b3JrcyB3aXRoIEFMTCBzc2ggc3Vic3lz dGVtcyAoYXMgZmFyIGFzIHdlIGNhbiB0ZWxsKSAqQVMgTE9ORyBBUyogYSB0dHkgaXMgbm90Ci0r c3Bhd25lZC4gSWYgYSB1c2VyIHVzZXMgdGhlIC1UIHN3aXRjaCB0byBwcmV2ZW50IGEgdHR5IGJl aW5nIGNyZWF0ZWQgdGhlIE5PTkUgY2lwaGVyIHdpbGwKLStiZSBkaXNhYmxlZC4KLSsKLStUaGUg cGVyZm9ybWFuY2UgaW5jcmVhc2Ugd2lsbCBvbmx5IGJlIGFzIGdvb2QgYXMgdGhlIG5ldHdvcmsg YW5kIFRDUCBzdGFjayB0dW5pbmcKLStvbiB0aGUgcmVjaWV2ZXIgc2lkZSBvZiB0aGUgY29ubmVj dGlvbiBhbGxvd3MuIEFzIGEgcnVsZSBvZiB0aHVtYiBhIHVzZXIgd2lsbCBuZWVkCi0rYXQgbGVh c3QgMTBNYi9zIGNvbm5lY3Rpb24gd2l0aCBhIDEwMG1zIFJUVCB0byBzZWUgYSBkb3VibGluZyBv ZiBwZXJmb3JtYW5jZS4gVGhlCi0rSFBOLVNTSCBob21lIHBhZ2UgZGVzY3JpYmVzIHRoaXMgaW4g Z3JlYXRlciBkZXRhaWwuCi0rCi0raHR0cDovL3d3dy5wc2MuZWR1L25ldHdvcmtpbmcvcHJvamVj dHMvaHBuLXNzaAotKwotK05PTkUgTUFDOgotK1N0YXJ0aW5nIHdpdGggSFBOIDE1djEgdXNlcnMg d2lsbCBoYXZlIHRoZSBvcHRpb24gdG8gZGlzYWJsZSBITUFDIChtZXNzYWdlCi0rYXV0aGVudGlj YXRpb24gY2lwaGVycykgd2hlbiB1c2luZyB0aGUgTk9ORSBjaXBoZXIuIFlvdSBtdXN0IGVuYWJs ZSB0aGUgZm9sbG93aW5nOgotK05vbmVFbmFibGVkLCBOb25lU3dpdGNoLCBhbmQgTm9uZU1hY0Vu YWJsZWQuIElmIGFsbCB0aHJlZSBhcmUgbm90IGVuYWJsZWQgdGhlIE5vbmUgTUFDCi0rd2lsbCBi ZSBhdXRvbWF0aWNhbGx5IGRpc2FibGVkLiBJbiB0ZXN0cyB0aGUgdXNlIG9mIHRoZSBOb25lIE1B QyBpbXByb3ZlZCB0aHJvdXB1dCBieQotK21vcmUgdGhhbiAzMCUuCi0rCi0rZXg6IHNjcCAtb05v bmVTd2l0Y2g9eWVzIC1vTm9uZUVuYWJsZWQ9eWVzIC1vTm9uZU1hY0VuYWJsZWQ9eWVzIGZpbGUg aG9zdDp+Ci0rCi0rSFBOIFNwZWNpZmljIENvbmZpZ3VyYXRpb24gb3B0aW9ucwotKwotK1RjcFJj dkJ1ZlBvbGw9W3llcy9ub10gY2xpZW50L3NlcnZlcgotKyAgICAgIEVuYWJsZSBvZiBkaXNhYmxl IHRoZSBwb2xsaW5nIG9mIHRoZSB0Y3AgcmVjZWl2ZSBidWZmZXIgdGhyb3VnaCB0aGUgbGlmZQot K29mIHRoZSBjb25uZWN0aW9uLiBZb3Ugd291bGQgd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGlz IG9wdGlvbiBpcyBlbmFibGVkCi0rZm9yIHN5c3RlbXMgbWFraW5nIHVzZSBvZiBhdXRvdHVuaW5n IGtlcm5lbHMgKGxpbnV4IDIuNC4yNCssIDIuNiwgTVMgVmlzdGEpCi0rZGVmYXVsdCBpcyB5ZXMu Ci0rCi0rTm9uZUVuYWJsZWQ9W3llcy9ub10gY2xpZW50L3NlcnZlcgotKyAgICAgIEVuYWJsZSBv ciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIE5vbmUgY2lwaGVyLiBDYXJlIG11c3QgYWx3YXlzIGJl IHVzZWQKLSt3aGVuIGVuYWJsaW5nIHRoaXMgYXMgaXQgd2lsbCBhbGxvdyB1c2VycyB0byBzZW5k IGRhdGEgaW4gdGhlIGNsZWFyLiBIb3dldmVyLAotK2l0IGlzIGltcG9ydGFudCB0byBub3RlIHRo YXQgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gcmVtYWlucyBlbmNyeXB0ZWQKLStldmVuIGlm IHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIFNldCB0byBubyBieSBkZWZhdWx0LgotKwotK05vbmVN YWNFbmFibGVkPVt5ZXMvbm9dIGNsaWVudC9zZXJ2ZXIKLSsgICAgICBFbmFibGUgb3IgZGlzYWJs ZSB0aGUgdXNlIG9mIHRoZSBOb25lIE1BQy4gV2hlbiB0aGlzIGlzIGVuYWJsZWQgc3NoCi0rd2ls bCAqbm90KiBwcm92aWRlIGRhdGEgaW50ZWdyaXR5IG9mIGFueSBkYXRhIGJlaW5nIHRyYW5zbWl0 dGVkIGJldHdlZW4gaG9zdHMuIFVzZQotK3dpdGggY2F1dGlvbiBhcyBpdCwgdW5saWtlIGp1c3Qg dXNpbmcgTm9uZUVuYWJsZWQsIGRvZXNuJ3QgcHJvdmlkZSBkYXRhIGludGVncml0eSBhbmQKLStw cm90ZWN0aW9uIGFnYWluc3QgbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcy4gQXMgd2l0aCBOb25l RW5hYmxlZCBhbGwgYXV0aGVudGljYXRpb24KLStyZW1haW5zIGVuY3J5cHRlZCBhbmQgaW50ZWdy aXR5IGlzIGVuc3VyZWQuIERlZmF1bHQgaXMgbm8uCi0rCi0rTm9uZVN3aXRjaD1beWVzL25vXSBj bGllbnQKLSsgICAgIFN3aXRjaCB0aGUgZW5jcnlwdGlvbiBjaXBoZXIgYmVpbmcgdXNlZCB0byB0 aGUgTm9uZSBjaXBoZXIgYWZ0ZXIKLSthdXRoZW50aWNhdGlvbiB0YWtlcyBwbGFjZS4gTm9uZUVu YWJsZWQgbXVzdCBiZSBlbmFibGVkIG9uIGJvdGggdGhlIGNsaWVudAotK2FuZCBzZXJ2ZXIgc2lk ZSBvZiB0aGUgY29ubmVjdGlvbi4gV2hlbiB0aGUgY29ubmVjdGlvbiBzd2l0Y2hlcyB0byB0aGUg Tk9ORQotK2NpcGhlciBhIHdhcm5pbmcgaXMgc2VudCB0byBTVERFUlIuIFRoZSBjb25uZWN0aW9u IGF0dGVtcHQgd2lsbCBmYWlsIHdpdGggYW4KLStlcnJvciBpZiBhIGNsaWVudCByZXF1ZXN0cyBh IE5vbmVTd2l0Y2ggZnJvbSB0aGUgc2VydmVyIHRoYXQgZG9lcyBub3QgZXhwbGljaXRseQotK2hh dmUgTm9uZUVuYWJsZWQgc2V0IHRvIHllcy4gTm90ZTogVGhlIE5PTkUgY2lwaGVyIGNhbm5vdCBi ZSB1c2VkIGluCi0raW50ZXJhY3RpdmUgKHNoZWxsKSBzZXNzaW9ucyBhbmQgaXQgd2lsbCBmYWls IHNpbGVudGx5LiBTZXQgdG8gbm8gYnkgZGVmYXVsdC4KLSsKLStIUE5EaXNhYmxlZD1beWVzL25v XSBjbGllbnQvc2VydmVyCi0rICAgICBJbiBzb21lIHNpdHVhdGlvbnMsIHN1Y2ggYXMgdHJhbnNm ZXJzIG9uIGEgbG9jYWwgYXJlYSBuZXR3b3JrLCB0aGUgaW1wYWN0Ci0rb2YgdGhlIEhQTiBjb2Rl IHByb2R1Y2VzIGEgbmV0IGRlY3JlYXNlIGluIHBlcmZvcm1hbmNlLiBJbiB0aGVzZSBjYXNlcyBp dCBpcwotK2hlbHBmdWwgdG8gZGlzYWJsZSB0aGUgSFBOIGZ1bmN0aW9uYWxpdHkuIEJ5IGRlZmF1 bHQgSFBORGlzYWJsZWQgaXMgc2V0IHRvIG5vLgotKwotK0NyZWRpdHM6IFRoaXMgcGF0Y2ggd2Fz IGNvbmNlaXZlZCwgZGVzaWduZWQsIGFuZCBsZWQgYnkgQ2hyaXMgUmFwaWVyIChyYXBpZXJAcHNj LmVkdSkKLSsgICAgICAgICBUaGUgbWFqb3JpdHkgb2YgdGhlIGFjdHVhbCBjb2RpbmcgZm9yIHZl cnNpb25zIHVwIHRvIEhQTjEydjEgd2FzIHBlcmZvcm1lZAotKyAgICAgICAgIGJ5IE1pY2hhZWwg U3RldmVucyAobXN0ZXZlbnNAYW5kcmV3LmNtdS5lZHUpLiBUaGUgTVQtQUVTLUNUUiBjaXBoZXIg d2FzCi0rICAgICAgICAgaW1wbGVtZW50ZWQgYnkgQmVuIEJlbm5ldCAoYmVuQHBzYy5lZHUpIGFu ZCBpbXByb3ZlZCBieSBNaWtlIFRhc290YQotKyAgICAgICAgICh0YXNvdGFAZ21haWwuY29tKSBh biBOU0YgUkVVIGdyYW50IHJlY2lwaWVudCBmb3IgMjAxMy4KLSsJIEFsbGFuIEp1ZGUgcHJvdmlk ZWQgdGhlIGNvZGUgZm9yIHRoZSBOb25lTWFjIGFuZCBidWZmZXIgbm9ybWFsaXphdGlvbi4KLSsg ICAgICAgICBUaGlzIHdvcmsgd2FzIGZpbmFuY2VkLCBpbiBwYXJ0LCBieSBDaXNjbyBTeXN0ZW0s IEluYy4sIHRoZSBOYXRpb25hbAotKyAgICAgICAgIExpYnJhcnkgb2YgTWVkaWNpbmUsIGFuZCB0 aGUgTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0aW9uLgotKwotK1Nwb25zb3JzOiBUaGFua3MgdG8g TmlrbGFzIEhhbWJ1Y2hlbiBmb3IgYmVpbmcgdGhlIGZpcnN0IHNwb25zb3Igb2YgSFBOLVNTSAot KwkgIHZpYSBnaXRodWIncyBzcG9uc29yIHByb2dyYW0hCi0rCi0rCi0rRWRpdGVkOiBTZXB0ZW1i ZXIgMTksIDIwMjUKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL0hQTlNTSEluc3RhbGxh dGlvbi50eHQgb3BlbnNzaC0xMC4ycDEvSFBOU1NISW5zdGFsbGF0aW9uLnR4dAotLS0tIG9wZW5z c2gtMTAuMnAxLm9yaWcvSFBOU1NISW5zdGFsbGF0aW9uLnR4dAkxOTcwLTAxLTAxIDAxOjAwOjAw LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL0hQTlNTSEluc3RhbGxhdGlvbi50 eHQJMjAyNi0wMy0xOCAxNToxMzoxNy44NDc2NjY2OTAgKzAxMDAKLUBAIC0wLDAgKzEsMzU0IEBA Ci0r77u/SFBOLVNTSCBJbnN0YWxsYXRpb24KLSsKLStUaGUgcHJvY2VzcyBvZiBpbnN0YWxsaW5n IEhQTi1TU0ggZnJvbSBzb3VyY2UgaXMgYSByZWxhdGl2ZWx5IHBhaW5sZXNzIHByb2Nlc3MKLSti dXQgZG9lcyBoYXZlIHNvbWUgbnVhbmNlcy4gVGhpcyBkb2N1bWVudCB3aWxsIGdvIHRocm91Z2gg dGhlIHByb2Nlc3Mgc3RlcCBieQotK3N0ZXAgdG8gaGVscCB5b3UgZ2V0IHRoZSBtb3N0IGZyb20g eW91ciBpbnN0YWxsYXRpb24uIElmIHlvdSBmaW5kIGFueSBlcnJvcnMKLStwbGVhc2UgY29udGFj dCB1cyBhdCBocG5zc2hAcHNjLmVkdS4KLSsKLSsKLStTdGVwIDE6IEdldCB0aGUgc291cmNlIGNv ZGUuCi0rCi0rVGhlIG9mZmljaWFsIHJlcG9zaXRvcnkgZm9yIEhQTi1TU0ggaXMgZm91bmQgYXQK LStodHRwczovL2dpdGh1Yi5jb20vcmFwaWVyMS9ocG4tc3NoLiBHZXQgYSBjb3B5IHdpdGgKLSsi Z2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9yYXBpZXIxL2hwbi1zc2jigJ0uCi0rCi0rCi0r U3RlcCAyOiBJbnN0YWxsIGRlcGVuZGVuY2llcy4KLSsKLStXaGF0IHlvdSBuZWVkIHRvIGluc3Rh bGwgaXMgZGVwZW5kZW50IG9uIHlvdXIgZGlzdHJpYnV0aW9uIGJ1dCB3aWxsIGluY2x1ZGU6Ci0r KiBPcGVuU1NMIGRldmVsb3BtZW50IHBhY2thZ2UKLSsgICAqIERlYmlhbjogbGlic3NsLWRldgot KyAgICogRmVkb3JhOiBvcGVuc3NsLWRldmVsCi0rKiBBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNl IExJYnJlU1NMCi0rICAgKiBIb3dldmVyLCBpbiB0aGlzIGNhc2Ugd2Ugc3VnZ2VzdCBjb21waWxp bmcgYW5kIGluc3RhbGxpbmcgbGlicmVzc2wgbWFudWFsbHkgYXMKLSsgICAgIHRoZXJlIGFyZSBm ZXcgbWFpbnRhaW5lZCBsaW51eCBwYWNrYWdlcyBmb3IgTGlicmVTU0wuCi0rICAgKiBBbHNvLCBM aWJyZVNTTCB2My41IGFuZCB2My42IGRvIG5vdCBzdXBwb3J0IHRoZSB0aHJlYWRlZCBBRVMtQ1RS IGNpcGhlci4KLSsgICAgIElmIHRoYXTigJlzIGltcG9ydGFudCB0byB5b3UgdGhlbiB5b3Ugc2hv dWxkIHVzZSBPcGVuU1NMLgotKyogWiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0rICAgKiBEZWJpYW46 IHpsaWIxZy1kZXYKLSsgICAqIEZlZG9yYTogemxpYi1kZXZlbAotKyogQXV0b2NvbmYKLSsqIEF1 dG9tYWtlCi0rCi0rCi0rU3RlcCAzOiBJbnN0YWxsIG9wdGlvbmFsIGRlcGVuZGVuY2llcy4KLSsK LStUaGlzIG9wdGlvbmFsIGxpYnJhcmllcyB3aWxsIGV4dGVuZCB0aGUgZnVuY3Rpb25hbGl0eSBv ZiBIUE4tU1NIIHRvIGFsbG93IHRoZSB1c2Ugb2YgUEFNCi0rYXV0aGVudGljYXRpb24sIEtlcmJl cm9zLCBncmFwaGljYWwgcGFzc3dvcmQgdG9vbHMsIGV0Yy4KLSsqIFBBTQotKyogS2VyYmVyb3MK LSsqIEdUSwotKwotKwotK1N0ZXAgNDogQnVpbGQgdGhlIGNvbmZpZ3VyZSBmaWxlCi0rCi0rZ2Vu ZXJhdGUgLi9jb25maWd1cmUgd2l0aCDigJxhdXRvcmVjb25mIC1mIC1p4oCdCi0rCi0rCi0rU3Rl cCA1OiBDb25maWd1cmF0aW9uCi0rCi0rQ29uZmlndXJlIHRoZSBpbnN0YWxsYXRpb24uIFlvdSBj YW4gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkbyB0aGlzIGJ5Ci0raXNzdWlu ZyDigJwuL2NvbmZpZ3VyZSAtLWhlbHDigJ0uIEhvd2V2ZXIsIGNvbW1vbmx5IHlvdSB3aWxsIHdh bnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbgotK2xvY2F0aW9uIG9mIHRoZSBi aW5hcmllcy4gVGhpcyBjYW4gYmUgZG9uZSB3aXRoIOKAnC0tcHJlZml4PS9bZGVzaXJlZF9wYXRo XeKAnS4gRm9yIGV4YW1wbGUsCi0raWYgeW91IHdhbnQgdGhlIGJpbmFyaWVzIGluc3RhbGxlZCBp bnRvIC91c3IvYmluIGFzIG9wcG9zZWQgdG8gdGhlIGRlZmF1bHQgb2YKLSsvdXNyL2xvY2FsL2Jp biB5b3XigJlkIHVzZSDigJwuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNy4oCdLiBPdGhlciBjb21t b24gb3B0aW9ucyB3b3VsZCBiZSB0bwotK2luY29ycG9yYXRlIHBhbSwga2VyYmVyb3MsIGFsdGVy bmF0aXZlIFNTTCBsaWJyYXJpZXMsIGFuZCBzbyBmb3J0aC4gSG93ZXZlciwgZm9yIG1vc3QgdXNl cnMKLStlaXRoZXIgbm8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgbW9kaWZ5 aW5nIHRoZSBwcmVmaXggd2lsbCBzdWZmaWNlLgotKwotKwotK1N0ZXAgNjogTWFrZQotKwotK01h a2UgdGhlIGFwcGxpY2F0aW9uIHdpdGgg4oCcbWFrZSAtaltudW0gY29yZXNd4oCdLiBTbyBpZiB5 b3UgaGF2ZSBhbiA4IGNvcmUgc3lzdGVtCi0reW914oCZZCB1c2Ug4oCcbWFrZSAtajjigJ0KLSsK LSsKLStTdGVwIDc6IFNldCB1cCB0aGUgaHBuc3NoZCB1c2VyLiAKLSsKLStUaGlzIHVzZXIgaXMg cGFydCBvZiB0aGUgcHJpdmlsZWdlIHNlcGFyYXRpb24gcm91dGluZXMgdXNlZCBpbiB0aGUgCi0r cHJlLWF1dGhlbnRpY2F0aW9uIHNhbmRib3guIEkgc3VnZ2VzdCB1c2luZyB0aGUgZm9sbG93aW5n IGNvbW1hbmQ6IAotKwotK3N1ZG8gdXNlcmFkZCAtLXN5c3RlbSAtLXNoZWxsIC91c3Ivc2Jpbi9u b2xvZ2luIC0tY29tbWVudD0iUHJpdmlsZWdlIHNlcGFyYXRlZCBIUE5TU0ggVXNlciIgXCAKLSst LWhvbWU9L3J1bi9ocG5zc2hkIGhwbnNzaGQKLSsKLStBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVz ZSB2aXB3IHRvIGFkZCB0aGUgdXNlciBtYW51YWxseS4gCi0rCi0rCi0rU3RlcCA4OiBJbnN0YWxs YXRpb24KLSsKLStBZnRlciBIUE4tU1NIIHN1Y2Nlc3NmdWxseSBidWlsZHMsIGluc3RhbGwgaXQg d2l0aCDigJxzdWRvIG1ha2UgaW5zdGFsbOKAnS4gVGhpcyB3aWxsIGluc3RhbGwgdGhlCi0rYmlu YXJpZXMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBnZW5lcmF0ZSB0aGUgdW5pcXVlIGhvc3Qg a2V5cyB1c2VkLiBBdCB0aGlzIHBvaW50IHlvdSBjYW4KLSttYWtlIGNoYW5nZXMgdG8gdGhlIHNz aCBjbGllbnQgYW5kIHNlcnZlciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIFRoZXNlIGZpbGVzIGFy ZQotK2ZvdW5kLCBnZW5lcmFsbHksIGluIC9ldGMvaHBuc3NoL3NzaF9jb25maWcgYW5kIHNzaGRf Y29uZmlnIHJlc3BlY3RpdmVseS4gWW91IG1heSB3YW50IHRvCi0rY2hhbmdlIHRoZSBkZWZhdWx0 IHBvcnQgZnJvbSAyMjIyIHRvIHNvbWUgb3RoZXIgdmFsdWUuIFlvdSBtYXkgYWxzbyB3YW50IHRv IGVuYWJsZSB0aGUKLStOb25lQ2lwaGVyIGFuZCBOb25lTWFjIG9wdGlvbnMuIEZvciBtb3JlIGlu Zm9ybWF0aW9uIHVzZSDigJxtYW4gaHBuc3NoZF9jb25maWfigJ0gYW5kCi0r4oCcbWFuIGhwbnNz aF9jb25maWfigJ0uIE5vdGU6IFRoZSBocG5zc2ggY2xpZW50IGV4cGVjdHMgdGhlIHNlcnZlciB0 byBiZSBvbiBwb3J0IDIyMjIgYnV0IHdpbGwKLStmYWxsYmFjayB0byAyMiBpZiBpdOKAmXMgbm90 IGZvdW5kIHRoZXJlLiBTbyBpZiB5b3UgZG8gY2hhbmdlIHRoZSBkZWZhdWx0IHBvcnQgeW914oCZ bGwgbmVlZCB0bwotK21ha2Ugc3VyZSB0aGUgY2xpZW50cyBwb2ludCBhdCB0aGUgY29ycmVjdCBw b3J0LgotKwotK1N0ZXAgOTogRmluaXNoaW5nIHVwLgotKwotK0F0IHRoaXMgcG9pbnQgeW91IGNh biBzdGFydCBocG5zc2hkIG1hbnVhbGx5IGJ5IHJ1bm5pbmcg4oCcc3VkbyAvdXNyL3NiaW4vaHBu c3NoZOKAnQotK29yIHdoYXRldmVyIHRoZSBmdWxsIHBhdGggdG8gdGhlIGhwbnNzaGQgYmluYXJ5 IG1pZ2h0IGJlLiBIb3dldmVyLCB0aGlzIHdvbuKAmXQKLStyZXN0YXJ0IGF1dG9tYXRpY2FsbHkg b24gcmVib290LiBUbyBkbyB0aGlzIHlvdeKAmWxsIG5lZWQgdG8gaW5zdGFsbCBhbiBhcHByb3By aWF0ZQotK3N5c3RlbWQgY29uZmlndXJhdGlvbiBmaWxlLiBJZiB0aGF0IHNlZW1zIGxpa2UgYSBn b29kIGlkZWEgdG8geW91IHRoZW4gZm9sbG93aW5nIHN0ZXBzIG1heSBiZQotK29mIGhlbHAuIE90 aGVyd2lzZSwgeW91IGFyZSBkb25lLiBFbmpveSEKLSsKLSsKLStTdGVwIDEwOiBJbnN0YWxsaW5n IGEgc3lzdGVtZCBzdGFydHVwIGZpbGUuCi0rCi0rVGhlIGNvcnJlY3Qgc3lzdGVtZCBzdGFydHVw IGZpbGUgZGVwZW5kcyBvbiB0aGUgZGlzdHJpYnV0aW9uIHlvdSBhcmUgdXNpbmcuIEZvciBzeXN0 ZW0KLSt1c2luZyBzeXN0ZW1kICh5b3Ugc3RhcnQgYSBzZXJ2aWNlIHdpdGggc3lzdGVtY3RsKSBj cmVhdGUgYSBmaWxlIGF0IC9saWIvc3lzdGVtZC9zeXN0ZW0vaHBuc3NoZC5zZXJ2aWNlCi0rd2l0 aCB0aGUgZm9sbG93aW5nIGNvbnRlbnRzIE5COiB5b3UgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSBw YXRocyB0byBtYXRjaCB5b3VyIGluc3RhbGxhdGlvbjoKLSsKLStbVW5pdF0KLStEZXNjcmlwdGlv bj1IUE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyCi0rRG9jdW1lbnRhdGlvbj1tYW46aHBu c3NoZCg4KSBtYW46aHBuc3NoZF9jb25maWcoNSkKLStBZnRlcj1uZXR3b3JrLnRhcmdldCBhdWRp dGQuc2VydmljZQotK0NvbmRpdGlvblBhdGhFeGlzdHM9IS9ldGMvaHBuc3NoL3NzaGRfbm90X3Rv X2JlX3J1bgotKwotK1tTZXJ2aWNlXQotK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9kZWZhdWx0L2hw bnNzaAotK0V4ZWNTdGFydFByZT0vdXNyL3NiaW4vaHBuc3NoZCAtdAotK0V4ZWNTdGFydD0vdXNy L3NiaW4vaHBuc3NoZCAtRCAkU1NIRF9PUFRTCi0rRXhlY1JlbG9hZD0vdXNyL3NiaW4vaHBuc3No ZCAtdAotK0V4ZWNSZWxvYWQ9L2Jpbi9raWxsIC1IVVAgJE1BSU5QSUQKLStLaWxsTW9kZT1wcm9j ZXNzCi0rUmVzdGFydD1vbi1mYWlsdXJlCi0rUmVzdGFydFByZXZlbnRFeGl0U3RhdHVzPTI1NQot K1R5cGU9bm90aWZ5Ci0rUnVudGltZURpcmVjdG9yeT1ocG5zc2hkCi0rUnVudGltZURpcmVjdG9y eU1vZGU9MDc1NQotKwotK1tJbnN0YWxsXQotK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0Ci0r QWxpYXM9aHBuc3NoZC5zZXJ2aWNlCi0rCi0rQWx0ZXJuYXRpdmVseSwgdGhlIC4vY29uZmlndXJl IGNvbW1hbmQgd2lsbCBnZW5lcmF0ZSBhIGhwbnNzaGQuc2VydmljZSBmaWxlIGZyb20KLStocG5z c2hkLnNlcnZpY2UuaW4uIFlvdSBjYW4gdXNlIHRoaXMgZmlsZSBieSBjb3B5aW5nIGl0IHRvCi0r L2xpYnN5c3RlbWQvc3lzdGVtL2hwbnNzaGQuc2VydmljZSBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhl IGFib3ZlIHRleHQuCi0rCi0rVGhlbiBjcmVhdGUgdGhlIGRlZmF1bHRzIGZpbGUgYXQgL2V0Yy9k ZWZhdWx0L2hwbnNzaGQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnQ6Ci0rIyBEZWZhdWx0IHNl dHRpbmdzIGZvciBvcGVuc3NoLXNlcnZlci4KLSsjIE9wdGlvbnMgdG8gcGFzcyB0byBzc2hkCi0r U1NIRF9PUFRTPQotKwotK0VudGVyIGFueSBydW50aW1lIG9wdGlvbnMgeW91IHdhbnQgb24gdGhl IFNTSERfT1BUUyBsaW5lLiBJZiB5b3UgY2Fu4oCZdCB0aGluayBvZiBhbnksIHNpbXBseQotK2xl YXZlIGl0IGJsYW5rLiBBIHNhbXBsZSAvZXRjL2RlZmF1bHMvaHBuc3NoIGZpbGUgbWF5IGJlIGZv dW5kIGluIGRlZmF1bHRzLmhwbnNzaGQuCi0rCi0rWW91IG11c3QgdGhlbiByZWxvYWQgdGhlIHN5 c3RlbWQgc2VydmljZSB0byBtYWtlIGl0IGF3YXJlIG9mIHRoaXMgbmV3IHNlcnZpY2Ugd2l0aAot K3N1ZG8gc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKLSsKLStJZiB5b3UgYXJlIHVzaW5nIGFuIGlu aXQuZCAoeW91IHN0YXJ0IGEgc2VydmljZSB3aXRoIOKAmHN5c3RlbeKAmSkgdGhlbiB5b3UgbmVl ZCB0byBpbnN0YWxsIGFuCi0raW5pdC5kLiBDcmVhdGUgdGhlIGZpbGUgL2V0Yy9pbml0LmQvaHBu c3NoIGFuZCBjb3B5IHRoZSBmb2xsb3dpbmcgaW50byBpdC4gTkI6IFRoZSBmb2xsb3dpbmcgaXMK LStmb3Igd2hlcmUgaHBuc3NoZCBpcyBmb3VuZCBhdCAvdXNyL3NiaW4vaHBuc3NoZC4gSWYgaXQg aXMgbm90IGluIHRoYXQgbG9jYXRpb24geW914oCZbGwgbmVlZCB0bwotK3VwZGF0ZSB0aGUgcGF0 aHMuCi0rCi0rQWx0ZXJuYXRpdmVseSwgeW91IG1heSB1c2UgdGhlIGhwbnNzaGQuaW5pdCBmaWxl IGNyZWF0ZWQgZHVyaW5nIGNvbmZpZ3VyZS4gVGhpcyB3aWxsIGJlCi0rcHJlcG9wdWxhdGVkIHdp dGggdGhlIGNvcnJlY3QgcGF0aHMgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCi0rCi0rIyEgL2Jp bi9zaAotKwotKyMjIyBCRUdJTiBJTklUIElORk8KLSsjIFByb3ZpZGVzOiAgICAgICAgICAgICAg ICBocG5zc2hkCi0rIyBSZXF1aXJlZC1TdGFydDogICAgICAgICRyZW1vdGVfZnMgJHN5c2xvZwot KyMgUmVxdWlyZWQtU3RvcDogICAgICAgICRyZW1vdGVfZnMgJHN5c2xvZwotKyMgRGVmYXVsdC1T dGFydDogICAgICAgIDIgMyA0IDUKLSsjIERlZmF1bHQtU3RvcDoKLSsjIFNob3J0LURlc2NyaXB0 aW9uOiAgICAgICAgT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIHdpdGggSFBOCi0rIyMjIEVO RCBJTklUIElORk8KLSsKLStzZXQgLWUKLSsKLSsjIC9ldGMvaW5pdC5kL2hwbnNzaDogc3RhcnQg YW5kIHN0b3AgdGhlIE9wZW5CU0QgInNlY3VyZSBzaGVsbCh0bSkiIGRhZW1vbgotKwotK3Rlc3Qg LXggL3Vzci9zYmluL2hwbnNzaGQgfHwgZXhpdCAwCi0rKCAvdXNyL3NiaW4vaHBuc3NoZCAtXD8g Mj4mMSB8IGdyZXAgLXEgT3BlblNTSCApIDI+L2Rldi9udWxsIHx8IGV4aXQgMAotKwotK3VtYXNr IDAyMgotKwotK2lmIHRlc3QgLWYgL2V0Yy9kZWZhdWx0L2hwbnNzaDsgdGhlbgotKyAgICAuIC9l dGMvZGVmYXVsdC9ocG5zc2gKLStmaQotKwotKy4gL2xpYi9sc2IvaW5pdC1mdW5jdGlvbnMKLSsK LSsKLStpZiBbIC1uICIkMiIgXTsgdGhlbgotKyAgICBTU0hEX09QVFM9IiRTU0hEX09QVFMgJDIi Ci0rZmkKLSsKLSsjIEFyZSB3ZSBydW5uaW5nIGZyb20gaW5pdD8KLStydW5fYnlfaW5pdCgpIHsK LSsgICAgKFsgIiRwcmV2aW91cyIgXSAmJiBbICIkcnVubGV2ZWwiIF0pIHx8IFsgIiRydW5sZXZl bCIgPSBTIF0KLSt9Ci0rCi0rY2hlY2tfZm9yX25vX3N0YXJ0KCkgewotKyAgICAjIGZvcmdldCBp dCBpZiB3ZSdyZSB0cnlpbmcgdG8gc3RhcnQsIGFuZCAvZXRjL2hwbnNzaC9zc2hkX25vdF90b19i ZV9ydW4gZXhpc3RzCi0rICAgIGlmIFsgLWUgL2V0Yy9ocG5zc2gvc3NoZF9ub3RfdG9fYmVfcnVu IF07IHRoZW4KLSsgICAgICAgIGlmIFsgIiQxIiA9IGxvZ19lbmRfbXNnIF07IHRoZW4KLSsgICAg ICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKLSsgICAgICAgIGZpCi0rICAgICAgICBpZiAh IHJ1bl9ieV9pbml0OyB0aGVuCi0rICAgICAgICAgICAgbG9nX2FjdGlvbl9tc2cgIkhQTi9PcGVu QlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIgbm90IGluIHVzZSAoL2V0Yy9ocG5zc2gvc3NoZF9ub3Rf dG9fYmVfcnVuKSIgfHwgdHJ1ZQotKyAgICAgICAgZmkKLSsgICAgICAgIGV4aXQgMAotKyAgICBm aQotK30KLSsKLStjaGVja19kZXZfbnVsbCgpIHsKLSsgICAgaWYgWyAhIC1jIC9kZXYvbnVsbCBd OyB0aGVuCi0rICAgICAgICBpZiBbICIkMSIgPSBsb2dfZW5kX21zZyBdOyB0aGVuCi0rICAgICAg ICAgICAgbG9nX2VuZF9tc2cgMSB8fCB0cnVlCi0rICAgICAgICBmaQotKyAgICAgICAgaWYgISBy dW5fYnlfaW5pdDsgdGhlbgotKyAgICAgICAgICAgIGxvZ19hY3Rpb25fbXNnICIvZGV2L251bGwg aXMgbm90IGEgY2hhcmFjdGVyIGRldmljZSEiIHx8IHRydWUKLSsgICAgICAgIGZpCi0rICAgICAg ICBleGl0IDEKLSsgICAgZmkKLSt9Ci0rCi0rY2hlY2tfcHJpdnNlcF9kaXIoKSB7Ci0rICAgICMg Q3JlYXRlIHRoZSBQcml2U2VwIGVtcHR5IGRpciBpZiBuZWNlc3NhcnkKLSsgICAgaWYgWyAhIC1k IC9ydW4vaHBuc3NoZCBdOyB0aGVuCi0rICAgICAgICBta2RpciAvcnVuL2hwbnNzaGQKLSsgICAg ICAgIGNobW9kIDA3NTUgL3J1bi9ocG5zc2hkCi0rICAgIGZpCi0rfQotKwotK2NoZWNrX2NvbmZp ZygpIHsKLSsgICAgaWYgWyAhIC1lIC9ldGMvaHBuc3NoL3NzaGRfbm90X3RvX2JlX3J1biBdOyB0 aGVuCi0rICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwODYKLSsgICAgICAgIC91c3Iv c2Jpbi9ocG5zc2hkICRTU0hEX09QVFMgLXQgfHwgZXhpdCAxCi0rICAgIGZpCi0rfQotKwotK2V4 cG9ydCBQQVRIPSIke1BBVEg6KyRQQVRIOn0vdXNyL3NiaW46L3NiaW4iCi0rCi0rY2FzZSAiJDEi IGluCi0rICBzdGFydCkKLSsgICAgICAgIGNoZWNrX3ByaXZzZXBfZGlyCi0rICAgICAgICBjaGVj a19mb3Jfbm9fc3RhcnQKLSsgICAgICAgIGNoZWNrX2Rldl9udWxsCi0rICAgICAgICBsb2dfZGFl bW9uX21zZyAiU3RhcnRpbmcgSFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciIgImhwbnNz aGQiIHx8IHRydWUKLSsgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjA4NgotKyAgICAg ICAgaWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tb2tub2RvIC0tY2h1aWQg MDowIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAvdXNyL3NiaW4vaHBuc3NoZCAt LSAkU1NIRF9PUFRTOyB0aGVuCi0rICAgICAgICAgICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVlCi0r ICAgICAgICBlbHNlCi0rICAgICAgICAgICAgbG9nX2VuZF9tc2cgMSB8fCB0cnVlCi0rICAgICAg ICBmaQotKyAgICAgICAgOzsKLSsgIHN0b3ApCi0rICAgICAgICBsb2dfZGFlbW9uX21zZyAiU3Rv cHBpbmcgSFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciIgImhwbnNzaGQiIHx8IHRydWUK LSsgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tb2tub2RvIC0t cGlkZmlsZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAvdXNyL3NiaW4vaHBuc3NoZDsgdGhlbgot KyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDAgfHwgdHJ1ZQotKyAgICAgICAgZWxzZQotKyAgICAg ICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQotKyAgICAgICAgZmkKLSsgICAgICAgIDs7Ci0r Ci0rCi0rICByZWxvYWR8Zm9yY2UtcmVsb2FkKQotKyAgICAgICAgY2hlY2tfZm9yX25vX3N0YXJ0 Ci0rICAgICAgICBjaGVja19jb25maWcKLSsgICAgICAgIGxvZ19kYWVtb25fbXNnICJSZWxvYWRp bmcgSFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcidzIGNvbmZpZ3VyYXRpb24iICJocG5z c2hkIiB8fCB0cnVlCi0rICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1zaWdu YWwgMSAtLXF1aWV0IC0tb2tub2RvIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAv dXNyL3NiaW4vaHBuc3NoZDsgdGhlbgotKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDAgfHwgdHJ1 ZQotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQotKyAg ICAgICAgZmkKLSsgICAgICAgIDs7Ci0rCi0rCi0rICByZXN0YXJ0KQotKyAgICAgICAgY2hlY2tf cHJpdnNlcF9kaXIKLSsgICAgICAgIGNoZWNrX2NvbmZpZwotKyAgICAgICAgbG9nX2RhZW1vbl9t c2cgIlJlc3RhcnRpbmcgSFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciIgImhwbnNzaGQi IHx8IHRydWUKLSsgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tb2tu b2RvIC0tcmV0cnkgMzAgLS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQgLS1leGVjIC91c3Ivc2Jp bi9ocG5zc2hkCi0rICAgICAgICBjaGVja19mb3Jfbm9fc3RhcnQgbG9nX2VuZF9tc2cKLSsgICAg ICAgIGNoZWNrX2Rldl9udWxsIGxvZ19lbmRfbXNnCi0rICAgICAgICAjIHNoZWxsY2hlY2sgZGlz YWJsZT1TQzIwODYKLSsgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWll dCAtLW9rbm9kbyAtLWNodWlkIDA6MCAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMg L3Vzci9zYmluL2hwbnNzaGQgLS0gJFNTSERfT1BUUzsgdGhlbgotKyAgICAgICAgICAgIGxvZ19l bmRfbXNnIDAgfHwgdHJ1ZQotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIGxvZ19lbmRfbXNn IDEgfHwgdHJ1ZQotKyAgICAgICAgZmkKLSsgICAgICAgIDs7Ci0rCi0rCi0rICB0cnktcmVzdGFy dCkKLSsgICAgICAgIGNoZWNrX3ByaXZzZXBfZGlyCi0rICAgICAgICBjaGVja19jb25maWcKLSsg ICAgICAgIGxvZ19kYWVtb25fbXNnICJSZXN0YXJ0aW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVs bCBzZXJ2ZXIiICJocG5zc2hkIiB8fCB0cnVlCi0rICAgICAgICBSRVQ9MAotKyAgICAgICAgc3Rh cnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1yZXRyeSAzMCAtLXBpZGZpbGUgL3J1bi9o cG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmluL2hwbnNzaGQgfHwgUkVUPSIkPyIKLSsgICAgICAg IGNhc2UgJFJFVCBpbgotKyAgICAgICAgICAgIDApCi0rICAgICAgICAgICAgICAgICMgb2xkIGRh ZW1vbiBzdG9wcGVkCi0rICAgICAgICAgICAgICAgIGNoZWNrX2Zvcl9ub19zdGFydCBsb2dfZW5k X21zZwotKyAgICAgICAgICAgICAgICBjaGVja19kZXZfbnVsbCBsb2dfZW5kX21zZwotKyAgICAg ICAgICAgICAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwODYKLSsgICAgICAgICAgICAgICAg aWYgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tb2tub2RvIC0tY2h1aWQgMDow IC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQucGlkIC0tZXhlYyAvdXNyL3NiaW4vaHBuc3NoZCAtLSAk U1NIRF9PUFRTOyB0aGVuCi0rICAgICAgICAgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRy dWUKLSsgICAgICAgICAgICAgICAgZWxzZQotKyAgICAgICAgICAgICAgICAgICAgbG9nX2VuZF9t c2cgMSB8fCB0cnVlCi0rICAgICAgICAgICAgICAgIGZpCi0rICAgICAgICAgICAgICAgIDs7Ci0r ICAgICAgICAgICAgMSkKLSsgICAgICAgICAgICAgICAgIyBkYWVtb24gbm90IHJ1bm5pbmcKLSsg ICAgICAgICAgICAgICAgbG9nX3Byb2dyZXNzX21zZyAiKG5vdCBydW5uaW5nKSIgfHwgdHJ1ZQot KyAgICAgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKLSsgICAgICAgICAgICAgICAg OzsKLSsgICAgICAgICAgICAqKQotKyAgICAgICAgICAgICAgICAjIGZhaWxlZCB0byBzdG9wCi0r ICAgICAgICAgICAgICAgIGxvZ19wcm9ncmVzc19tc2cgIihmYWlsZWQgdG8gc3RvcCkiIHx8IHRy dWUKLSsgICAgICAgICAgICAgICAgbG9nX2VuZF9tc2cgMSB8fCB0cnVlCi0rICAgICAgICAgICAg ICAgIDs7Ci0rICAgICAgICBlc2FjCi0rICAgICAgICA7OwotKwotKwotKyAgc3RhdHVzKQotKyAg ICAgICAgc3RhdHVzX29mX3Byb2MgLXAgL3J1bi9ocG5zc2hkLnBpZCAvdXNyL3NiaW4vaHBuc3No ZCBocG5zc2hkICYmIGV4aXQgMCB8fCBleGl0ICQ/Ci0rICAgICAgICA7OwotKwotKwotKyAgKikK LSsgICAgICAgIGxvZ19hY3Rpb25fbXNnICJVc2FnZTogL2V0Yy9pbml0LmQvaHBuc3NoIHtzdGFy dHxzdG9wfHJlbG9hZHxmb3JjZS1yZWxvYWR8cmVzdGFydHx0cnktcmVzdGFydHxzdGF0dXN9IiB8 fCB0cnVlCi0rICAgICAgICBleGl0IDEKLStlc2FjCi0rCi0rZXhpdCAwCi0rCi0rCi0rU3RlcCAx MDogV29ya2luZyB3aXRoIFNFTGludXguCi0rCi0rSWYgeW91IGFyZSB1c2luZyBTRUxpbnV4IHlv deKAmWxsIG5lZWQgdG8gcnVuIGEgZmV3IG1vcmUgY29tbWFuZHMgaW4gb3JkZXIgdG8gZ3JhbnQg aHBuc3NoIHRoZQotK25lY2Vzc2FyeSBleGNlcHRpb25zIHRvIG9wZW4gc29ja2V0cywgZmlsZXMs IHJlYWQga2V5cywgYW5kIHNvIGZvcnRoLiBSdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kcwotK3Rv IGFsbG93IHRoaXMuIE5vdGUsIEnigJltIG5vdCBzdXJlIGV2ZXJ5IHNpbmdsZSBvbmUgb2YgdGhl c2UgaXMgbmVlZGVkIHNvIGlmIHNvbWVvbmUga25vd3MgYmV0dGVyCi0rcGxlYXNlIGxldCBtZSBr bm93LiBBZ2FpbiwgZG91YmxlIGNoZWNrIHRoZSBwYXRocyBvZiB0aGUgZmlsZXMgYmVpbmcgdXBk YXRlZC4KLSsKLStzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5X3QgIC9ldGMv aHBuc3NoL3NzaF9ob3N0X2RzYV9rZXkKLStzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNz aGRfa2V5X3QgIC9ldGMvaHBuc3NoL3NzaF9ob3N0X3JzYV9rZXkKLStzZW1hbmFnZSBmY29udGV4 dCAtYSAtZiBmIC10IHNzaGRfa2V5X3QgIC9ldGMvaHBuc3NoL3NzaF9ob3N0X2VjZHNhX2tleQot K3NlbWFuYWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoZF9rZXlfdCAgL2V0Yy9ocG5zc2gvc3No X2hvc3RfZWQyNTUxOV9rZXkKLStzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5 X3QgL2V0Yy9ocG5zc2gvc3NoX2hvc3RfZHNhX2tleS5wdWIKLStzZW1hbmFnZSBmY29udGV4dCAt YSAtZiBmIC10IHNzaGRfa2V5X3QgL2V0Yy9ocG5zc2gvc3NoX2hvc3RfcnNhX2tleS5wdWIKLStz ZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5X3QgIC9ldGMvaHBuc3NoL3NzaF9o b3N0X2VjZHNhX2tleS5wdWIKLStzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5 X3QgIC9ldGMvaHBuc3NoL3NzaF9ob3N0X2VkMjU1MTlfa2V5LnB1YgotK3NlbWFuYWdlIGZjb250 ZXh0IC1hIC1mIGYgLXQgc3NoZF9leGVjX3QgL3Vzci9zYmluL2hwbnNzaGQKLStzZW1hbmFnZSBm Y29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5Z2VuX2V4ZWNfdCAvdXNyL2xpYmV4ZWMvaHBuc3No L2hwbnNzaGQta2V5Z2VuCi0rc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBiaW5fdCAvdXNy L2xpYmV4ZWMvaHBuc3NoL2hwbnNmdHAtc2VydmVyCi0rc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYg ZiAtdCBzc2hfZXhlY190IC91c3IvYmluL2hwbnNzaAotK3NlbWFuYWdlIGZjb250ZXh0IC1hIC1m IGYgLXQgc3NoX2FnZW50X2V4ZWNfdCAvdXNyL2Jpbi9ocG5zc2gtYWdlbnQKLStzZW1hbmFnZSBm Y29udGV4dCAtYSAtZiBmIC10IHNzaF9rZXlnZW5fZXhlY190IC91c3IvYmluL2hwbnNzaC1rZXln ZW4KLStzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IGV0Y190IC9ldGMvcGFtLmQvaHBuc3No ZAotK3NlbWFuYWdlIHBvcnQgLWEgLXQgc3NoX3BvcnRfdCAtcCB0Y3AgMjIyMgotK3Jlc3RvcmVj b24gL3Vzci9zYmluL2hwbnNzaGQKLStyZXN0b3JlY29uIC9ldGMvaHBuc3NoL3NzaCpfa2V5Ci0r cmVzdG9yZWNvbiAvZXRjL2hwbnNzaC9zc2gqX2tleVwucHViCi0rcmVzdG9yZWNvbiAvdXNyL2xp YmV4ZWMvaHBuc3NoL2hwbnNzaGQta2V5Z2VuCi0rcmVzdG9yZWNvbiAvdXNyL2xpYmV4ZWMvaHBu c3NoL2hwbnNmdHAtc2VydmVyCi0rcmVzdG9yZWNvbiAvdXNyL2Jpbi9ocG5zc2gKLStyZXN0b3Jl Y29uIC91c3IvYmluL2hwbnNzaC1hZ2VudAotK3Jlc3RvcmVjb24gL3Vzci9iaW4vaHBuc3NoLWtl eWdlbgotK3Jlc3RvcmVjb24gL2V0Yy9wYW0uZC9ocG5zc2hkCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4ycDEub3JpZy9rZXguYyBvcGVuc3NoLTEwLjJwMS9rZXguYwotLS0tIG9wZW5zc2gtMTAuMnAx Lm9yaWcva2V4LmMJMjAyNi0wMy0xOCAxNToxMjowMS45MTM0NDA1MjggKzAxMDAKLSsrKyBvcGVu c3NoLTEwLjJwMS9rZXguYwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg0Nzk3Nzk1NyArMDEwMAotQEAg LTY1LDYgKzY1LDcgQEAKLSAKLSAjaW5jbHVkZSAic3NoZXJyLmgiCi0gI2luY2x1ZGUgInNzaGJ1 Zi5oIgotKyNpbmNsdWRlICJjYW5vaG9zdC5oIgotICNpbmNsdWRlICJkaWdlc3QuaCIKLSAjaW5j bHVkZSAieG1hbGxvYy5oIgotICNpbmNsdWRlICJhdWRpdC5oIgotQEAgLTc3NSwxNyArNzc2LDgz IEBACi0gCWZyZWUoa2V4KTsKLSB9Ci0gCi0rLyoKLSsgKiBUaGlzIGZ1bmN0aW9uIHNlZWtzIHRo cm91Z2ggYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBhbmQgY2hlY2tzIGZvciBpbnN0YW5jZXMKLSsg KiBvZiB0aGUgbXVsdGl0aHJlYWRlZCBDQzIwIGNpcGhlci4gSWYgZm91bmQsIGl0IHRoZW4gZW5z dXJlcyB0aGF0IHRoZSBzZXJpYWwKLSsgKiBDQzIwIGNpcGhlciBpcyBhbHNvIGluIHRoZSBsaXN0 LCBhZGRpbmcgaXQgaWYgbmVjZXNzYXJ5LgotKyAqLwotK2NoYXIgKgotK3BhdGNoX2xpc3QoY2hh ciAqIG9yaWcpCi0rewotKwljaGFyICogYWRqID0geHN0cmR1cChvcmlnKTsKLSsJY2hhciAqIG1h dGNoOwotKwl1X2ludCBuZXh0OwotKwotKwljb25zdCBjaGFyICogY2Nwc3RyID0gImNoYWNoYTIw LXBvbHkxMzA1QG9wZW5zc2guY29tIjsKLSsJY29uc3QgY2hhciAqIGNjcG10c3RyID0gImNoYWNo YTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmciOwotKwotKwltYXRjaCA9IG1hdGNoX2xpc3QoY2Nw bXRzdHIsIG9yaWcsICZuZXh0KTsKLSsJaWYgKG1hdGNoICE9IE5VTEwpIHsgLyogQ0MyMC1NVCBm b3VuZCBpbiB0aGUgbGlzdCAqLwotKwkJZnJlZShtYXRjaCk7Ci0rCQltYXRjaCA9IG1hdGNoX2xp c3QoY2Nwc3RyLCBvcmlnLCBOVUxMKTsKLSsJCWlmIChtYXRjaCA9PSBOVUxMKSB7IC8qIENDMjAt U2VyaWFsIE5PVCBmb3VuZCBpbiB0aGUgbGlzdCAqLwotKwkJCWFkaiA9IHhyZWFsbG9jYXJyYXko YWRqLAotKwkJCSAgICBzdHJsZW4oYWRqKSAvKiBvcmlnaW5hbCBzdHJpbmcgbGVuZ3RoICovCi0r CQkJICAgICsgMSAvKiBmb3IgdGhlIG9yaWdpbmFsIG51bGwtdGVybWluYXRvciAqLwotKwkJCSAg ICArIHN0cmxlbihjY3BzdHIpIC8qIG1ha2Ugcm9vbSBmb3IgY2Nwc3RyICovCi0rCQkJICAgICsg MSAvKiBtYWtlIHJvb20gZm9yIHRoZSBjb21tYSBkZWxpbWl0ZXIgKi8KLSsJCQkgICAgLCBzaXpl b2YoY2hhcikpOwotKwkJCS8qCi0rCQkJICogYWRqW25leHRdIHBvaW50cyB0byB0aGUgY2hhcmFj dGVyIGFmdGVyIHRoZSBDQzIwLU1UCi0rCQkJICogc3RyaW5nLiBhZGpbbmV4dF0gbWlnaHQgYmUg JywnIG9yICdcMCcgYXQgdGhpcyBwb2ludC4KLSsJCQkgKi8KLSsJCQlhZGpbbmV4dF0gPSAnLCc7 Ci0rCQkJLyogYWRqICsgbmV4dCArIDEgaXMgdGhlIGNoYXJhY3RlciBhZnRlciB0aGF0IGNvbW1h ICovCi0rCQkJbWVtY3B5KGFkaiArIG5leHQgKyAxLCBjY3BzdHIsIHN0cmxlbihjY3BzdHIpKTsK LSsJCQkvKiByZXdyaXRlIHRoZSByZXN0IG9mIHRoZSBvcmlnaW5hbCBsaXN0ICovCi0rCQkJbWVt Y3B5KGFkaiArIG5leHQgKyAxICsgc3RybGVuKGNjcHN0ciksIG9yaWcgKyBuZXh0LAotKwkJCSAg ICBzdHJsZW4ob3JpZyArIG5leHQpICsgMSk7Ci0rCQl9IGVsc2UgeyAvKiBDQzIwLVNlcmlhbCBm b3VuZCBpbiB0aGUgbGlzdCwgbm90aGluZyB0byBkbyAqLwotKwkJCWZyZWUobWF0Y2gpOwotKwkJ fQotKwl9Ci0rCi0rCXJldHVybiBhZGo7Ci0rfQotKwotIGludAotIGtleF9yZWFkeShzdHJ1Y3Qg c3NoICpzc2gsIGNoYXIgKnByb3Bvc2FsW1BST1BPU0FMX01BWF0pCi0gewotLQlpbnQgcjsKLSsJ aW50IHIgPSAwOwotKwotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsJY2hhciAqIG9yaWdfY3RvcyA9 IHByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX0NUT1NdOwotKwljaGFyICogb3JpZ19zdG9jID0g cHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfU1RPQ107Ci0rCXByb3Bvc2FsW1BST1BPU0FMX0VO Q19BTEdTX0NUT1NdID0KLSsJICAgIHBhdGNoX2xpc3QocHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FM R1NfQ1RPU10pOwotKwlwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19TVE9DXSA9Ci0rCSAgICBw YXRjaF9saXN0KHByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdKTsKLSsKLSsJLyoKLSsJ ICogVE9ETzogTGlrZWx5IG1lbW9yeSBsZWFrIGhlcmUuIFRoZSBvcmlnaW5hbCBjb250ZW50cyBv ZgotKwkgKiBwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXSBhcmUgbm8gbG9uZ2VyIGFj Y2Vzc2libGUgb3IKLSsJICogZnJlZWFibGUuCi0rCSAqLwotKyNlbmRpZgotIAotIAlpZiAoKHIg PSBrZXhfcHJvcDJidWYoc3NoLT5rZXgtPm15LCBwcm9wb3NhbCkpICE9IDApCi0tCQlyZXR1cm4g cjsKLSsJCWdvdG8gcmVzdG9yZVByb3Bvc2FsOwotIAlzc2gtPmtleC0+ZmxhZ3MgPSBLRVhfSU5J VElBTDsKLSAJa2V4X3Jlc2V0X2Rpc3BhdGNoKHNzaCk7Ci0gCXNzaF9kaXNwYXRjaF9zZXQoc3No LCBTU0gyX01TR19LRVhJTklULCAma2V4X2lucHV0X2tleGluaXQpOwotLQlyZXR1cm4gMDsKLSsg cmVzdG9yZVByb3Bvc2FsOgotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsJZnJlZShwcm9wb3NhbFtQ Uk9QT1NBTF9FTkNfQUxHU19DVE9TXSk7Ci0rCWZyZWUocHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FM R1NfU1RPQ10pOwotKwlwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXSA9IG9yaWdfY3Rv czsKLSsJcHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfU1RPQ10gPSBvcmlnX3N0b2M7Ci0rI2Vu ZGlmCi0rCXJldHVybiByOwotIH0KLSAKLSBpbnQKLUBAIC05NzQsNiArMTA0MSwxMSBAQAotIAlp bnQgbmVuYywgbm1hYywgbmNvbXA7Ci0gCXVfaW50IG1vZGUsIGN0b3MsIG5lZWQsIGRoX25lZWQs IGF1dGhsZW47Ci0gCWludCByLCBmaXJzdF9rZXhfZm9sbG93czsKLSsJaW50IGF1dGhfZmxhZyA9 IDA7Ci0rCWludCBsb2dfZmxhZyA9IDA7Ci0rCi0rCWF1dGhfZmxhZyA9IHBhY2tldF9hdXRoZW50 aWNhdGlvbl9zdGF0ZShzc2gpOwotKwlkZWJ1ZygiQVVUSCBTVEFURSBJUyAlZCIsIGF1dGhfZmxh Zyk7Ci0gCi0gCWRlYnVnMigibG9jYWwgJXMgS0VYSU5JVCBwcm9wb3NhbCIsIGtleC0+c2VydmVy ID8gInNlcnZlciIgOiAiY2xpZW50Iik7Ci0gCWlmICgociA9IGtleF9idWYycHJvcChrZXgtPm15 LCBOVUxMLCAmbXkpKSAhPSAwKQotQEAgLTEwNTAsNiArMTEyMiwzMSBAQAotIAkJCXBlZXJbbmVu Y10gPSBOVUxMOwotIAkJCWdvdG8gb3V0OwotIAkJfQotKyNpZmRlZiBXSVRIX09QRU5TU0wKLSsJ CWlmICgoc3RyY21wKG5ld2tleXMtPmVuYy5uYW1lLCAiY2hhY2hhMjAtcG9seTEzMDVAb3BlbnNz aC5jb20iKQotKwkJICAgID09IDApICYmIChtYXRjaF9saXN0KCJjaGFjaGEyMC1wb2x5MTMwNS1t dEBocG5zc2gub3JnIiwKLSsJCSAgICBteVtuZW5jXSwgTlVMTCkgIT0gTlVMTCkpIHsKLSsJCQkv KgotKwkJCSAqIGlmIHdlJ3JlIHVzaW5nIHRoZSBzZXJpYWwgQ0MyMCBjaXBoZXIgd2hpbGUgdGhl Ci0rCQkJICogbXVsdGl0aHJlYWRlZCBpbXBsZW1lbnRhdGlvbiBpcyBhbiBvcHRpb24uLi4KLSsJ CQkgKi8KLSsJCQlmcmVlKG5ld2tleXMtPmVuYy5uYW1lKTsKLSsJCQluZXdrZXlzLT5lbmMuY2lw aGVyID0gY2lwaGVyX2J5X25hbWUoCi0rCQkJICAgICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5z c2gub3JnIik7Ci0rCQkJaWYgKG5ld2tleXMtPmVuYy5jaXBoZXIgPT0gTlVMTCkgewotKwkJCQll cnJvcl9mKCIlcyBjaXBoZXIgbm90IGZvdW5kLiIsCi0rCQkJCSAgICAiY2hhY2hhMjAtcG9seTEz MDUtbXRAaHBuc3NoLm9yZyIpOwotKwkJCQlyID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKLSsJ CQkJa2V4LT5mYWlsZWRfY2hvaWNlID0gcGVlcltuZW5jXTsKLSsJCQkJcGVlcltuZW5jXSA9IE5V TEw7Ci0rCQkJCWdvdG8gb3V0OwotKwkJCX0gZWxzZSB7Ci0rCQkJCW5ld2tleXMtPmVuYy5uYW1l ID0geHN0cmR1cCgKLSsJCQkJICAgICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIik7 Ci0rCQkJfQotKwkJCS8qIHdlIHByb21vdGUgdG8gdGhlIG11bHRpdGhyZWFkZWQgaW1wbGVtZW50 YXRpb24gKi8KLSsJCX0KLSsjZW5kaWYKLSAJCWF1dGhsZW4gPSBjaXBoZXJfYXV0aGxlbihuZXdr ZXlzLT5lbmMuY2lwaGVyKTsKLSAJCS8qIGlnbm9yZSBtYWMgZm9yIGF1dGhlbnRpY2F0ZWQgZW5j cnlwdGlvbiAqLwotIAkJaWYgKGF1dGhsZW4gPT0gMCAmJgotQEAgLTEwNjUsMTEgKzExNjIsNDMg QEAKLSAJCQlwZWVyW25jb21wXSA9IE5VTEw7Ci0gCQkJZ290byBvdXQ7Ci0gCQl9Ci0rCQlkZWJ1 ZygiUkVRVUVTVEVEIEVOQy5OQU1FIGlzICclcyciLCBuZXdrZXlzLT5lbmMubmFtZSk7Ci0rCQlk ZWJ1ZygiUkVRVUVTVEVEIE1BQy5OQU1FIGlzICclcyciLCBuZXdrZXlzLT5tYWMubmFtZSk7Ci0r CQlpZiAoc3RyY21wKG5ld2tleXMtPmVuYy5uYW1lLCAibm9uZSIpID09IDApIHsKLSsJCQlpZiAo YXV0aF9mbGFnID09IDEpIHsKLSsJCQkJZGVidWcoIk5vbmUgcmVxdWVzdGVkIHBvc3QgYXV0aGVu dGljYXRpb24uIik7Ci0rCQkJCXNzaC0+bm9uZSA9IDE7Ci0rCQkJfQotKwkJCWVsc2UKLSsJCQkJ ZmF0YWwoIlByZS1hdXRoZW50aWNhdGlvbiBub25lIGNpcGhlciByZXF1ZXN0cyBhcmUgbm90IGFs bG93ZWQuIik7Ci0rCi0rCQkJaWYgKG5ld2tleXMtPm1hYy5uYW1lICE9IE5VTEwgJiYgc3RyY21w KG5ld2tleXMtPm1hYy5uYW1lLCAibm9uZSIpID09IDApIHsKLSsJCQkJZGVidWcoIlJlcXVlc3Rp bmc6IE5PTkVNQUMuIEF1dGhmbGFnIGlzICVkIiwgYXV0aF9mbGFnKTsKLSsJCQkJc3NoLT5ub25l X21hYyA9IDE7Ci0rCQkJfQotKwkJfQotKwotIAkJZGVidWcoImtleDogJXMgY2lwaGVyOiAlcyBN QUM6ICVzIGNvbXByZXNzaW9uOiAlcyIsCi0gCQkgICAgY3RvcyA/ICJjbGllbnQtPnNlcnZlciIg OiAic2VydmVyLT5jbGllbnQiLAotIAkJICAgIG5ld2tleXMtPmVuYy5uYW1lLAotIAkJICAgIGF1 dGhsZW4gPT0gMCA/IG5ld2tleXMtPm1hYy5uYW1lIDogIjxpbXBsaWNpdD4iLAotIAkJICAgIG5l d2tleXMtPmNvbXAubmFtZSk7Ci0rCQkvKgotKwkJICogY2xpZW50IHN0YXJ0cyB3aXRoIGN0b3Mg PSAwICYmIGxvZyBmbGFnID0gMCBhbmQgbm8gbG9nLgotKwkJICogMm5kIGNsaWVudCBwYXNzIGN0 b3MgPSAxIGFuZCBmbGFnID0gMSBzbyBubyBsb2cuCi0rCQkgKiBzZXJ2ZXIgc3RhcnRzIHdpdGgg Y3RvcyA9IDEgJiYgbG9nX2ZsYWcgPSAwIHNvIGxvZy4KLSsJCSAqIDJuZCBzZXZlciBwYXNzIGN0 b3MgPSAxICYmIGxvZyBmbGFnID0gMSBzbyBubyBsb2cuCi0rCQkgKiAtY2pyCi0rCQkgKi8KLSsJ CWlmIChjdG9zICYmICFsb2dfZmxhZykgewotKwkJCWxvZ2l0KCJTU0g6IFNlcnZlcjtMdHlwZTog S2V4O1JlbW90ZTogJXMtJWQ7RW5jOiAlcztNQUM6ICVzO0NvbXA6ICVzIiwKLSsJCQkgICAgc3No X3JlbW90ZV9pcGFkZHIoc3NoKSwKLSsJCQkgICAgc3NoX3JlbW90ZV9wb3J0KHNzaCksCi0rCQkJ ICAgIG5ld2tleXMtPmVuYy5uYW1lLAotKwkJCSAgICBhdXRobGVuID09IDAgPyBuZXdrZXlzLT5t YWMubmFtZSA6ICI8aW1wbGljaXQ+IiwKLSsJCQkgICAgbmV3a2V5cy0+Y29tcC5uYW1lKTsKLSsJ CX0KLSsJCWxvZ19mbGFnID0gMTsKLSAJfQotIAluZWVkID0gZGhfbmVlZCA9IDA7Ci0gCWZvciAo bW9kZSA9IDA7IG1vZGUgPCBNT0RFX01BWDsgbW9kZSsrKSB7Ci1AQCAtMTQyOSw3ICsxNTU4LDcg QEAKLSAJaWYgKHZlcnNpb25fYWRkZW5kdW0gIT0gTlVMTCAmJiAqdmVyc2lvbl9hZGRlbmR1bSA9 PSAnXDAnKQotIAkJdmVyc2lvbl9hZGRlbmR1bSA9IE5VTEw7Ci0gCWlmICgociA9IHNzaGJ1Zl9w dXRmKG91cl92ZXJzaW9uLCAiU1NILSVkLiVkLSVzJXMlc1xyXG4iLAotLQkgICAgUFJPVE9DT0xf TUFKT1JfMiwgUFJPVE9DT0xfTUlOT1JfMiwgU1NIX1ZFUlNJT04sCi0rCSAgICBQUk9UT0NPTF9N QUpPUl8yLCBQUk9UT0NPTF9NSU5PUl8yLCBTU0hfUkVMRUFTRSwKLSAJICAgIHZlcnNpb25fYWRk ZW5kdW0gPT0gTlVMTCA/ICIiIDogIiAiLAotIAkgICAgdmVyc2lvbl9hZGRlbmR1bSA9PSBOVUxM ID8gIiIgOiB2ZXJzaW9uX2FkZGVuZHVtKSkgIT0gMCkgewotIAkJb2Vycm5vID0gZXJybm87Ci1A QCAtMTU2NSw5ICsxNjk0LDI0IEBACi0gCQlyID0gU1NIX0VSUl9JTlZBTElEX0ZPUk1BVDsKLSAJ CWdvdG8gb3V0OwotIAl9Ci0rCi0rCS8qIHJlcG9ydCB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiB0 byBzeXNsb2cgaWYgdGhpcyBpcyB0aGUgc2VydmVyICovCi0rICAgICAgICBpZiAodGltZW91dF9t cyA9PSAtMSkgeyAvKiBvbmx5IHRoZSBzZXJ2ZXIgdXNlcyB0aGlzIHZhbHVlICovCi0rCQlsb2dp dCgiU1NIOiBTZXJ2ZXI7THR5cGU6IFZlcnNpb247UmVtb3RlOiAlcy0lZDtQcm90b2NvbDogJWQu JWQ7Q2xpZW50OiAlLjEwMHMiLAotKwkJICAgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3No X3JlbW90ZV9wb3J0KHNzaCksCi0rCQkgICAgICByZW1vdGVfbWFqb3IsIHJlbW90ZV9taW5vciwg cmVtb3RlX3ZlcnNpb24pOwotKwl9Ci0rCi0gCWRlYnVnKCJSZW1vdGUgcHJvdG9jb2wgdmVyc2lv biAlZC4lZCwgcmVtb3RlIHNvZnR3YXJlIHZlcnNpb24gJS4xMDBzIiwKLSAJICAgIHJlbW90ZV9t YWpvciwgcmVtb3RlX21pbm9yLCByZW1vdGVfdmVyc2lvbik7Ci0gCWNvbXBhdF9iYW5uZXIoc3No LCByZW1vdGVfdmVyc2lvbik7Ci0rCWlmIChzc2gtPmNvbXBhdCAmIFNTSF9IUE5TU0gpCi0rCQlk ZWJ1ZygiSFBOIHRvIEhQTiBDb25uZWN0aW9uLiIpOwotKwllbHNlCi0rCQlkZWJ1ZygiTm9uLUhQ TiB0byBIUE4gQ29ubmVjdGlvbi4iKTsKLSsKLSsJaWYoc3NoLT5jb21wYXQgJiBTU0hfUkVTVFJJ Q1RfV0lORE9XKQotKwkJZGVidWcgKCJXaW5kb3cgc2l6ZSByZXN0cmljdGVkLiIpOwotIAotIAlt aXNtYXRjaCA9IDA7Ci0gCXN3aXRjaCAocmVtb3RlX21ham9yKSB7Ci1kaWZmIC1OdXIgb3BlbnNz aC0xMC4ycDEub3JpZy9sb2cuYyBvcGVuc3NoLTEwLjJwMS9sb2cuYwotLS0tIG9wZW5zc2gtMTAu MnAxLm9yaWcvbG9nLmMJMjAyNi0wMy0xOCAxNToxMjowMS41MTI0ODUxNjMgKzAxMDAKLSsrKyBv cGVuc3NoLTEwLjJwMS9sb2cuYwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg0ODY0MDIzNCArMDEwMAot QEAgLTQ4LDYgKzQ4LDExIEBACi0gI2luY2x1ZGUgPHN5c2xvZy5oPgotICNpbmNsdWRlIDx0aW1l Lmg+Ci0gI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRl ICJwYWNrZXQuaCIgLyogbmVlZGVkIGZvciBob3N0IGFuZCBwb3J0IGxvb2sgdXBzICovCi0rI2lm ZGVmIEhBVkVfU1lTX1RJTUVfSAotKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4gLyogdG8gZ2V0IGN1 cnJlbnQgdGltZSAqLwotKyNlbmRpZgotICNpZiBkZWZpbmVkKEhBVkVfU1RSTlZJUykgJiYgZGVm aW5lZChIQVZFX1ZJU19IKSAmJiAhZGVmaW5lZChCUk9LRU5fU1RSTlZJUykKLSAjIGluY2x1ZGUg PHZpcy5oPgotICNlbmRpZgotQEAgLTY3LDYgKzcyLDggQEAKLSAKLSBleHRlcm4gY2hhciAqX19w cm9nbmFtZTsKLSAKLStleHRlcm4gc3RydWN0IHNzaCAqYWN0aXZlX3N0YXRlOwotKwotICNkZWZp bmUgTE9HX1NZU0xPR19WSVMJKFZJU19DU1RZTEV8VklTX05MfFZJU19UQUJ8VklTX09DVEFMKQot ICNkZWZpbmUgTE9HX1NUREVSUl9WSVMJKFZJU19TQUZFfFZJU19PQ1RBTCkKLSAKLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjJwMS5vcmlnL21hYy5jIG9wZW5zc2gtMTAuMnAxL21hYy5jCi0tLS0gb3Bl bnNzaC0xMC4ycDEub3JpZy9tYWMuYwkyMDI2LTAzLTE4IDE1OjEyOjAxLjczNDA4NDczMyArMDEw MAotKysrIG9wZW5zc2gtMTAuMnAxL21hYy5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODQ5MDYzOTM1 ICswMTAwCi1AQCAtNjMsNiArNjMsNyBAQAotIAl7ICJobWFjLXNoYTItNTEyIiwJCQlTU0hfRElH RVNULCBTU0hfRElHRVNUX1NIQTUxMiwgMCwgMCwgMCwgMCB9LAotIAl7ICJobWFjLW1kNSIsCQkJ CVNTSF9ESUdFU1QsIFNTSF9ESUdFU1RfTUQ1LCAwLCAwLCAwLCAwIH0sCi0gCXsgImhtYWMtbWQ1 LTk2IiwJCQlTU0hfRElHRVNULCBTU0hfRElHRVNUX01ENSwgOTYsIDAsIDAsIDAgfSwKLSsJeyAi bm9uZSIsCQkJCVNTSF9ESUdFU1QsIFNTSF9ESUdFU1RfTlVMTCwgMCwgMCwgMCwgMCB9LAotIAl7 ICJ1bWFjLTY0QG9wZW5zc2guY29tIiwJCVNTSF9VTUFDLCAwLCAwLCAxMjgsIDY0LCAwIH0sCi0g CXsgInVtYWMtMTI4QG9wZW5zc2guY29tIiwJCVNTSF9VTUFDMTI4LCAwLCAwLCAxMjgsIDEyOCwg MCB9LAotIAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvTWFrZWZpbGUuaW4gb3BlbnNz aC0xMC4ycDEvTWFrZWZpbGUuaW4KLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL01ha2VmaWxlLmlu CTIwMjYtMDMtMTggMTU6MTI6MDIuMDE1MDM1MDE0ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEv TWFrZWZpbGUuaW4JMjAyNi0wMy0xOCAxNToxMzoxNy44NDk0OTA2MDMgKzAxMDAKLUBAIC01NCw3 ICs1NCw3IEBACi0gQ0ZMQUdTX05PUElFPUBDRkxBR1NfTk9QSUVACi0gQ1BQRkxBR1M9LUkuIC1J JChzcmNkaXIpIC1JJChDT01QQVRJTkNMVURFUykgQENQUEZMQUdTQCAkKFBBVEhTKSBAREVGU0AK LSBQSUNGTEFHPUBQSUNGTEFHQAotLUxJQlM9QExJQlNACi0rTElCUz1ATElCU0AgLWxwdGhyZWFk Ci0gQ0hBTk5FTExJQlM9QENIQU5ORUxMSUJTQAotIEs1TElCUz1ASzVMSUJTQAotIEdTU0xJQlM9 QEdTU0xJQlNACi1AQCAtOTMsNyArOTMsNyBAQAotIExJQlNTSF9PQkpTPSR7TElCT1BFTlNTSF9P QkpTfSBcCi0gCWF1dGhmZC5vIGF1dGhmaWxlLm8gXAotIAljYW5vaG9zdC5vIGNoYW5uZWxzLm8g Y2lwaGVyLm8gY2lwaGVyLWFlcy5vIGNpcGhlci1hZXNjdHIubyBcCi0tCWNsZWFudXAubyBcCi0r CWNsZWFudXAubyBjaXBoZXItY3RyLW10Lm8gXAotIAljb21wYXQubyBmYXRhbC5vIGhvc3RmaWxl Lm8gXAotIAlsb2cubyBtYXRjaC5vIG1vZHVsaS5vIG5jaGFuLm8gcGFja2V0Lm8gXAotIAlyZWFk cGFzcy5vIHR0eW1vZGVzLm8geG1hbGxvYy5vIGFkZHIubyBhZGRybWF0Y2gubyBcCi1AQCAtMTAz LDYgKzEwMyw3IEBACi0gCW1zZy5vIGRucy5vIGVudHJvcHkubyBnc3MtZ2Vuci5vIHVtYWMubyB1 bWFjMTI4Lm8gXAotIAlzbXVsdF9jdXJ2ZTI1NTE5X3JlZi5vIFwKLSAJcG9seTEzMDUubyBjaGFj aGEubyBjaXBoZXItY2hhY2hhcG9seS5vIGNpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by5vIFwK LSsJY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLW10Lm8gXAotIAlzc2gtZWQyNTUxOS5vIGRp Z2VzdC1vcGVuc3NsLm8gZGlnZXN0LWxpYmMubyBcCi0gCWhtYWMubyBlZDI1NTE5Lm8gaGFzaC5v IFwKLSAJa2V4Lm8ga2V4LW5hbWVzLm8ga2V4ZGgubyBrZXhnZXgubyBrZXhlY2RoLm8ga2V4YzI1 NTE5Lm8gXAotQEAgLTExMCwxNCArMTExLDE2IEBACi0gCWtleHNudHJ1cDc2MXgyNTUxOS5vIGtl eG1sa2VtNzY4eDI1NTE5Lm8gc250cnVwNzYxLm8ga2V4Z2VuLm8gXAotIAlrZXhnc3NjLm8gXAot IAlzZnRwLXJlYWxwYXRoLm8gcGxhdGZvcm0tcGxlZGdlLm8gcGxhdGZvcm0tdHJhY2luZy5vIHBs YXRmb3JtLW1pc2MubyBcCi0tCXNzaGJ1Zi1pby5vIG1pc2MtYWdlbnQubyBhdWRpdHN0dWIubwot Kwlzc2hidWYtaW8ubyBtZXRyaWNzLm8gYmlubi5vIGNpcGhlci1jdHItbXQtcHJvdmlkZXIubyBc Ci0rCWNpcGhlci1jdHItbXQtZnVuY3Rpb25zLm8gb3NzbDMtcHJvdmlkZXItZXJyLm8gbnVtLm8g XAotKwloYXBweWV5ZWJhbGxzLm8gbWlzYy1hZ2VudC5vIGF1ZGl0c3R1Yi5vCi0gCi0gUDExT0JK Uz0gc3NoLXBrY3MxMS1jbGllbnQubyBzc2gtcGtjczExLXVyaS5vCi0gCi0gU0tPQkpTPQlzc2gt c2stY2xpZW50Lm8KLSAKLSBTU0hPQkpTPSBzc2gubyByZWFkY29uZi5vIGNsaWVudGxvb3AubyBz c2h0dHkubyBcCi0tCXNzaGNvbm5lY3QubyBzc2hjb25uZWN0Mi5vIG11eC5vIHNzaC1wa2NzMTEu byBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpTKQotKwlzc2hjb25uZWN0Lm8gc3NoY29ubmVjdDIu byBtdXgubyBzc2gtcGtjczExLm8gc3NoLXBrY3MxMS11cmkubyBjaXBoZXItc3dpdGNoLm8gJChT S09CSlMpCi0gCi0gU1NIRE9CSlM9c3NoZC5vIFwKLSAJcGxhdGZvcm0tbGlzdGVuLm8gXAotQEAg LTEzNiw3ICsxMzksNyBAQAotIAlhdXRoMi1nc3MubyBnc3Mtc2Vydi5vIGdzcy1zZXJ2LWtyYjUu byBnc3Mtc2Vydi1nc2kubyBcCi0gCWxvZ2lucmVjLm8gYXV0aC1wYW0ubyBhdXRoLXNoYWRvdy5v IGF1dGgtc2lhLm8gXAotIAlzZnRwLXNlcnZlci5vIHNmdHAtY29tbW9uLm8gXAotLQl1aWRzd2Fw Lm8gcGxhdGZvcm0tbGlzdGVuLm8gJChQMTFPQkpTKSAkKFNLT0JKUykKLSsJdWlkc3dhcC5vIHBs YXRmb3JtLWxpc3Rlbi5vIGNpcGhlci1zd2l0Y2gubyAkKFAxMU9CSlMpICQoU0tPQkpTKQotIAot IFNTSERfQVVUSF9PQkpTPXNzaGQtYXV0aC5vIFwKLSAJYXV0aDItbWV0aG9kcy5vIFwKLUBAIC0x NTEsNyArMTU0LDcgQEAKLSAJc2FuZGJveC1udWxsLm8gc2FuZGJveC1ybGltaXQubyBzYW5kYm94 LWRhcndpbi5vIFwKLSAJc2FuZGJveC1zZWNjb21wLWZpbHRlci5vIHNhbmRib3gtY2Fwc2ljdW0u byAgc2FuZGJveC1zb2xhcmlzLm8gXAotIAlzZnRwLXNlcnZlci5vIHNmdHAtY29tbW9uLm8gXAot LQl1aWRzd2FwLm8gJChQMTFPQkpTKSAkKFNLT0JKUykKLSsJdWlkc3dhcC5vIGNpcGhlci1zd2l0 Y2gubyAkKFAxMU9CSlMpICQoU0tPQkpTKQotIAotIFNGVFBfQ0xJRU5UX09CSlM9c2Z0cC1jb21t b24ubyBzZnRwLWNsaWVudC5vIHNmdHAtZ2xvYi5vCi0gCi1AQCAtMjM1LDcgKzIzOCw3IEBACi0g CSQoTEQpIC1vICRAICQoU1NIRF9BVVRIX09CSlMpICQoTERGTEFHUykgLWxzc2ggLWxvcGVuYnNk LWNvbXBhdCAkKFNTSERMSUJTKSAkKExJQlMpICQoR1NTTElCUykgJChLNUxJQlMpICQoQ0hBTk5F TExJQlMpICQoTElCV1RNUERCKQotIAotIHNjcCQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNz aC5hICQoU0NQX09CSlMpCi0tCSQoTEQpIC1vICRAICQoU0NQX09CSlMpICQoTERGTEFHUykgLWxz c2ggLWxvcGVuYnNkLWNvbXBhdCAkKExJQlMpCi0rCSQoTEQpIC1vICRAICQoU0NQX09CSlMpICQo TERGTEFHUykgLWxzc2ggLWxvcGVuYnNkLWNvbXBhdCAkKExJQlMpICQoQ0hBTk5FTExJQlMpCi0g Ci0gc3NoLWFkZCQoRVhFRVhUKTogJChMSUJDT01QQVQpIGxpYnNzaC5hICQoU1NIQUREX09CSlMp Ci0gCSQoTEQpIC1vICRAICQoU1NIQUREX09CSlMpICQoTERGTEFHUykgLWxzc2ggLWxvcGVuYnNk LWNvbXBhdCAkKExJQlMpICQoQ0hBTk5FTExJQlMpCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEu b3JpZy9tZXRyaWNzLmMgb3BlbnNzaC0xMC4ycDEvbWV0cmljcy5jCi0tLS0gb3BlbnNzaC0xMC4y cDEub3JpZy9tZXRyaWNzLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NoLTEwLjJwMS9tZXRyaWNzLmMJMjAyNi0wMy0xOCAxNToxMzoxNy44NDk4MDM3NTEg KzAxMDAKLUBAIC0wLDAgKzEsNDM5IEBACi0rLyoKLSsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgVGhl IEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgotKyAqCi0r ICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KLSsgKgotKyAqIFRoaXMg bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0Ci0rICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KLSsgKgot KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLCBidXQgV0lUSE9VVAotKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgotKyAqCi0rICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlU IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7Ci0rICogaWYgbm90LCBzZWUgaHR0cDov L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlICJp bmNsdWRlcy5oIgotKyNpbmNsdWRlICJtZXRyaWNzLmgiCi0rI2luY2x1ZGUgInNzaGVyci5oIgot KyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLSsvKiBrZXJuZWwg dmVyc2lvbiBtYWNybyBtb3ZlZCB0byBkZWZpbmVzLmggKi8KLSsKLSsvKiBhZGQgdGhlIGluZm9y bWF0aW9uIGZyb20gdGhlIHRjcF9pbmZvIHN0cnVjdCB0byB0aGUKLSsgKiBzZXJpYWxpemVkIGJp bmFyeSBvYmplY3QKLSsgKi8KLSt2b2lkCi0rbWV0cmljc193cml0ZV9iaW5uX29iamVjdChzdHJ1 Y3QgdGNwX2luZm8gKmRhdGEsIHN0cnVjdCBiaW5uX3N0cnVjdCAqYmlubm9iaikgewotKyNpZiAh ZGVmaW5lZCBUQ1BfSU5GTwotKwkvKnRjcCBpbmZvIGlzbid0IHN1cHBvcnRlZCBvbiB0aGlzIHN5 c3RlbSAqLwotKwlyZXR1cm47Ci0rI2Vsc2UKLSsKLSsvKiB0aGUgYmFzZSBzZXQgb2YgdGNwaV8g bWVhc3VyZW1lbnRzIHN0YXJ0aW5nIGZyb20ga2VybmVsIDMuNy4wCi0rICogdGhlc2UgbWVhc3Vy ZW1lbnRzIGV4aXN0ZWQgaW4gcHJldmlvdXMga2VybmVscyBidXQgdGhlIG9sZGVzdCB0aGlzCi0r ICogaXMgZ29pbmcgdG8gc3VwcG9ydCBpcyAzLjcuMC4gV2UgZG8gbmVlZCB0byBzdG9yZSB0aGUg a2VybmVsIHZlcnNpb24gYXMgd2VsbCAqLwotKwotKy8qIG9idmlvdWxzeSB0aGUgdmVyc2lvbiBj b2RlIG1hY3JvIG9ubHkgZXhpc3RzIHVuZGVyIGxpbnV4IHNvCi0rICogb24gbm9uIGxpbnV4IHN5 c3RlbXMgd2Ugc2V0IHRoZSBrZXJuZWwgdmVyc2lvbiB0byAwCi0rICogd2hpY2ggd2lsbCBnZXQg dXMgdGhlIGJhc2Ugc2V0IG9mIG1ldHJpY3MgZnJvbSBuZXRpbmV0L3RjcC5oCi0rICovCi0rI2lm IChkZWZpbmVkIF9fbGludXhfXykgJiYgIWRlZmluZWQoX19hbHBpbmVfXykKLSsJYmlubl9vYmpl Y3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAia2VybmVsX3ZlcnNpb24iLCBMSU5VWF9WRVJTSU9OX0NP REUpOwotKyNlbHNlCi0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgImtlcm5lbF92 ZXJzaW9uIiwgMCk7Ci0rI2VuZGlmCi0rCi0rCS8qIHRoZSBmb2xsb3dpbmcgYXJlIGNvbW1vbiB1 bmRlciBib3RoIGxpbnV4IGFuZCBCU0QgKi8KLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5v YmosICJ0Y3BpX3NuZF93c2NhbGUiLAotKwkJCSAgICAgIGRhdGEtPnRjcGlfc25kX3dzY2FsZSk7 Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9yY3Zfd3NjYWxlIiwKLSsJ CQkgICAgICBkYXRhLT50Y3BpX3Jjdl93c2NhbGUpOwotKwliaW5uX29iamVjdF9zZXRfdWludDgo Ymlubm9iaiwgInRjcGlfc3RhdGUiLAotKwkJCSAgICAgIGRhdGEtPnRjcGlfc3RhdGUpOwotKwli aW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfb3B0aW9ucyIsCi0rCQkJICAgICAg ZGF0YS0+dGNwaV9vcHRpb25zKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV9zbmRfc3N0aHJlc2giLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3NuZF9zc3RocmVzaCk7 Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcnR0IiwKLSsJCQkgICAg ICAgZGF0YS0+dGNwaV9ydHQpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0 Y3BpX2xhc3RfZGF0YV9yZWN2IiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9sYXN0X2RhdGFfcmVj dik7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcnR0dmFyIiwKLSsJ CQkgICAgICAgZGF0YS0+dGNwaV9ydHR2YXIpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJp bm5vYmosICJ0Y3BpX3NuZF9jd25kIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9zbmRfY3duZCk7 Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X21zcyIsCi0rCQkJ ICAgICAgIGRhdGEtPnRjcGlfcmN2X21zcyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlu bm9iaiwgInRjcGlfcnRvIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9ydG8pOwotKwliaW5uX29i amVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NuZF9tc3MiLAotKwkJCSAgICAgICBkYXRh LT50Y3BpX3NuZF9tc3MpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X3Jjdl9zcGFjZSIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfcmN2X3NwYWNlKTsKLSsKLSsvKiB0 aGUgZm9sbG93aW5nIGV4aXN0IHVuZGVyIGJvdGggYnV0IHdpdGggZGlmZmVyZW50IG5hbWVzICov Ci0rI2lmZGVmIF9fbGludXhfXwotKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRj cGlfY2Ffc3RhdGUiLAotKwkJCSAgICAgIGRhdGEtPnRjcGlfY2Ffc3RhdGUpOwotKwliaW5uX29i amVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfcHJvYmVzIiwKLSsJCQkgICAgICBkYXRhLT50 Y3BpX3Byb2Jlcyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9iYWNr b2ZmIiwKLSsJCQkgICAgICBkYXRhLT50Y3BpX2JhY2tvZmYpOwotKwliaW5uX29iamVjdF9zZXRf dWludDgoYmlubm9iaiwgInRjcGlfcmV0cmFuc21pdHMiLAotKwkJCSAgICAgIGRhdGEtPnRjcGlf cmV0cmFuc21pdHMpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jj dl9zc3RocmVzaCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfcmN2X3NzdGhyZXNoKTsKLSsJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zYWNrZWQiLAotKwkJCSAgICAgICBk YXRhLT50Y3BpX3NhY2tlZCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRj cGlfcG10dSIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfcG10dSk7Ci0rCWJpbm5fb2JqZWN0X3Nl dF91aW50MzIoYmlubm9iaiwgInRjcGlfZmFja2V0cyIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlf ZmFja2V0cyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfbG9zdCIs Ci0rCQkJICAgICAgIGRhdGEtPnRjcGlfbG9zdCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIo Ymlubm9iaiwgInRjcGlfbGFzdF9hY2tfc2VudCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfbGFz dF9hY2tfc2VudCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfdW5h Y2tlZCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfdW5hY2tlZCk7Ci0rCWJpbm5fb2JqZWN0X3Nl dF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9kYXRhX3NlbnQiLAotKwkJCSAgICAgICBkYXRh LT50Y3BpX2xhc3RfZGF0YV9zZW50KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9sYXN0X2Fja19yZWN2IiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9sYXN0X2Fja19y ZWN2KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZGVyaW5n IiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9yZW9yZGVyaW5nKTsKLSsJYmlubl9vYmplY3Rfc2V0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9hZHZtc3MiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2Fk dm1zcyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmV0cmFucyIs Ci0rCQkJICAgICAgIGRhdGEtPnRjcGlfcmV0cmFucyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50 MzIoYmlubm9iaiwgInRjcGlfYXRvIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9hdG8pOwotKwli aW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9ydHQiLAotKwkJCSAgICAg ICBkYXRhLT50Y3BpX3Jjdl9ydHQpOwotKyNlbHNlCi0rCWJpbm5fb2JqZWN0X3NldF91aW50OChi aW5ub2JqLCAidGNwaV9iYWNrb2ZmIiwKLSsJCQkgICAgICBkYXRhLT5fX3RjcGlfYmFja29mZik7 Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9jYV9zdGF0ZSIsCi0rCQkJ ICAgICAgZGF0YS0+X190Y3BpX2NhX3N0YXRlKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJp bm5vYmosICJ0Y3BpX3Byb2JlcyIsCi0rCQkJICAgICAgZGF0YS0+X190Y3BpX3Byb2Jlcyk7Ci0r CWJpbm5fb2JqZWN0X3NldF91aW50OChiaW5ub2JqLCAidGNwaV9yZXRyYW5zbWl0cyIsCi0rCQkJ ICAgICAgZGF0YS0+X190Y3BpX3JldHJhbnNtaXRzKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9yY3Zfc3N0aHJlc2giLAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlf cmN2X3NzdGhyZXNoKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9z YWNrZWQiLAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfc2Fja2VkKTsKLSsJYmlubl9vYmplY3Rf c2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9wbXR1IiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3Bp X3BtdHUpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2ZhY2tldHMi LAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfZmFja2V0cyk7Ci0rCWJpbm5fb2JqZWN0X3NldF91 aW50MzIoYmlubm9iaiwgInRjcGlfbG9zdCIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV9sb3N0 KTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2Fja19zZW50 IiwKLSsJCQkgICAgICAgZGF0YS0+X190Y3BpX2xhc3RfYWNrX3NlbnQpOwotKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3VuYWNrZWQiLAotKwkJCSAgICAgICBkYXRhLT5f X3RjcGlfdW5hY2tlZCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlf bGFzdF9kYXRhX3NlbnQiLAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfbGFzdF9kYXRhX3NlbnQp OwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfYWNrX3JlY3Yi LAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfbGFzdF9hY2tfcmVjdik7Ci0rCWJpbm5fb2JqZWN0 X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRlcmluZyIsCi0rCQkJICAgICAgIGRhdGEt Pl9fdGNwaV9yZW9yZGVyaW5nKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV9hZHZtc3MiLAotKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfYWR2bXNzKTsKLSsJYmlubl9v YmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZXRyYW5zIiwKLSsJCQkgICAgICAgZGF0 YS0+X190Y3BpX3JldHJhbnMpOwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0 Y3BpX2F0byIsCi0rCQkJICAgICAgIGRhdGEtPl9fdGNwaV9hdG8pOwotKwliaW5uX29iamVjdF9z ZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9ydHQiLAotKwkJCSAgICAgICBkYXRhLT5fX3Rj cGlfcmN2X3J0dCk7Ci0rI2VuZGlmCi0rCi0rLyogVW5kZXIgQlNEIHNuZF9yZXhtaXRwYWNrIGlz IHRoZSBzYW1lIGFzIGxpbnV4IHRvdGFsX3JldHJhbnMqLwotKyNpZmRlZiBfX2xpbnV4X18KLSsJ Ymlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV90b3RhbF9yZXRyYW5zIiwKLSsJ CQkgICAgICAgZGF0YS0+dGNwaV90b3RhbF9yZXRyYW5zKTsKLSsjZWxzZQotKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3RvdGFsX3JldHJhbnMiLAotKwkJCSAgICAgICBk YXRhLT50Y3BpX3NuZF9yZXhtaXRwYWNrKTsKLSsjZW5kaWYKLSsKLSsvKiBUaGUgbGFzdCBzZWN0 aW9uIGFyZSBmb3Iga2VybmVsIHNwZWNpZmljIG1ldHJpY3MgaW4gbGludXggKi8KLSsjaWZkZWYg X19saW51eF9fCi0rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLDE1 LDApCi0rCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfbWF4X3BhY2luZ19y YXRlIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9tYXhfcGFjaW5nX3JhdGUpOwotKwliaW5uX29i amVjdF9zZXRfdWludDY0KGJpbm5vYmosICJ0Y3BpX3BhY2luZ19yYXRlIiwKLSsJCQkgICAgICAg ZGF0YS0+dGNwaV9wYWNpbmdfcmF0ZSk7Ci0rI2VuZGlmCi0rCi0rI2lmIExJTlVYX1ZFUlNJT05f Q09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDEsMCkKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChi aW5ub2JqLCAidGNwaV9ieXRlc19hY2tlZCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfYnl0ZXNf YWNrZWQpOwotKwliaW5uX29iamVjdF9zZXRfdWludDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX3Jl Y2VpdmVkIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9ieXRlc19yZWNlaXZlZCk7Ci0rI2VuZGlm Ci0rCi0rI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDIsMCkKLSsJ Ymlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zZWdzX2luIiwKLSsJCQkgICAg ICAgZGF0YS0+dGNwaV9zZWdzX2luKTsKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9zZWdzX291dCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfc2Vnc19vdXQpOwotKyNl bmRpZgotKwotKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCw2LDAp Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfbm90c2VudF9ieXRlcyIs Ci0rCQkJICAgICAgIGRhdGEtPnRjcGlfbm90c2VudF9ieXRlcyk7Ci0rCWJpbm5fb2JqZWN0X3Nl dF91aW50MzIoYmlubm9iaiwgInRjcGlfbWluX3J0dCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlf bWluX3J0dCk7Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfZGF0YV9z ZWdzX2luIiwKLSsJCQkgICAgICAgZGF0YS0+dGNwaV9kYXRhX3NlZ3NfaW4pOwotKwliaW5uX29i amVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RhdGFfc2Vnc19vdXQiLAotKwkJCSAgICAg ICBkYXRhLT50Y3BpX2RhdGFfc2Vnc19vdXQpOwotKyNlbmRpZgotKwotKyNpZiBMSU5VWF9WRVJT SU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCw5LDApCi0rCWJpbm5fb2JqZWN0X3NldF91aW50 OChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9yYXRlX2FwcF9saW1pdGVkIiwKLSsJCQkgICAgICBk YXRhLT50Y3BpX2RlbGl2ZXJ5X3JhdGVfYXBwX2xpbWl0ZWQpOwotKwliaW5uX29iamVjdF9zZXRf dWludDY0KGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJ5X3JhdGUiLAotKwkJCSAgICAgICBkYXRhLT50 Y3BpX2RlbGl2ZXJ5X3JhdGUpOwotKyNlbmRpZgotKwotKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUg Pj0gS0VSTkVMX1ZFUlNJT04oNCwxMCwwKQotKwliaW5uX29iamVjdF9zZXRfdWludDY0KGJpbm5v YmosICJ0Y3BpX2J1c3lfdGltZSIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfYnVzeV90aW1lKTsK LSsJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9zbmRidWZfbGltaXRlZCIs Ci0rCQkJICAgICAgIGRhdGEtPnRjcGlfc25kYnVmX2xpbWl0ZWQpOwotKwliaW5uX29iamVjdF9z ZXRfdWludDY0KGJpbm5vYmosICJ0Y3BpX3J3bmRfbGltaXRlZCIsCi0rCQkJICAgICAgIGRhdGEt PnRjcGlfcnduZF9saW1pdGVkKTsKLSsjZW5kaWYKLSsKLSsjaWYgTElOVVhfVkVSU0lPTl9DT0RF ID49IEtFUk5FTF9WRVJTSU9OKDQsMTgsMCkKLSsJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5u b2JqLCAidGNwaV9kZWxpdmVyZWQiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2RlbGl2ZXJlZCk7 Ci0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfZGVsaXZlcmVkX2NlIiwK LSsJCQkgICAgICAgZGF0YS0+dGNwaV9kZWxpdmVyZWRfY2UpOwotKyNlbmRpZgotKwotKyNpZiBM SU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCwxOSwwKQotKwliaW5uX29iamVj dF9zZXRfdWludDY0KGJpbm5vYmosICJ0Y3BpX2J5dGVzX3NlbnQiLAotKwkJCSAgICAgICBkYXRh LT50Y3BpX2J5dGVzX3NlbnQpOwotKwliaW5uX29iamVjdF9zZXRfdWludDY0KGJpbm5vYmosICJ0 Y3BpX2J5dGVzX3JldHJhbnMiLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX2J5dGVzX3JldHJhbnMp OwotKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RzYWNrX2R1cHMiLAot KwkJCSAgICAgICBkYXRhLT50Y3BpX2RzYWNrX2R1cHMpOwotKwliaW5uX29iamVjdF9zZXRfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX3Jlb3JkX3NlZW4iLAotKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jl b3JkX3NlZW4pOwotKyNlbmRpZgotKwotKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVM X1ZFUlNJT04oNSw0LDApCi0rCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlf c25kX3duZCIsCi0rCQkJICAgICAgIGRhdGEtPnRjcGlfc25kX3duZCk7Ci0rCWJpbm5fb2JqZWN0 X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X29vb3BhY2siLAotKwkJCSAgICAgICBkYXRh LT50Y3BpX3Jjdl9vb29wYWNrKTsKLSsjZW5kaWYKLSsKLSsjaWYgTElOVVhfVkVSU0lPTl9DT0RF ID49IEtFUk5FTF9WRVJTSU9OKDUsNSwwKQotKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9i aiwgInRjcGlfZmFzdG9wZW5fY2xpZW50X2ZhaWwiLAotKwkJCSAgICAgIGRhdGEtPnRjcGlfZmFz dG9wZW5fY2xpZW50X2ZhaWwpOwotKyNlbmRpZgotKyNlbmRpZiAvKmVuZGlmIGZvciAjaWZkZWYg X19saW51eF9fICovCi0rI2VuZGlmIC8qZW5kaWYgZm9yIFRDUF9JTkZPICovCi0rfQotKwotKy8q IHRoaXMgcmVhZHMgb3V0IHRoZSB0Y3BfaW5mbyBiaW5uIG9iamVjdCBhbmQgZm9ybWF0cyBpdCBp bnRvIGEgc2luZ2xlIGxpbmUKLSsgKiB0aGUgb2JqZWN0IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGhh dmUgYWxsIG9mIHRoZSBlbGVtZW50cy4gSWYgaXQncyBlbXB0eSBpdAotKyAqIGN1cnJlbnQganVz dCBzcGl0cyBvdXQgMC4gVGhpcyBpc24ndCBvcHRpbWFsIGFzIDAgY2FuIGFsc28gYmUgYSB2YWxp ZCB2YWx1ZSAqLwotK3ZvaWQKLSttZXRyaWNzX3JlYWRfYmlubl9vYmplY3QgKHZvaWQgKmJpbm5v YmosIGNoYXIgKm91dHB1dCkgewotKwlpbnQgbGVuID0gMDsKLSsJaW50IGJ1ZmxlbiA9IDEwMjM7 Ci0rCWludCBrZXJuZWxfdmVyc2lvbiA9IDA7Ci0rCWlmIChiaW5ub2JqID09IE5VTEwpIHsKLSsJ CWZwcmludGYoc3RkZXJyLCAiTWV0cmljIHBvbGxpbmcgcmV0dXJuZWQgYmFkIGRhdGEuXG4iKTsK LSsJCXJldHVybjsKLSsJfQotKwlrZXJuZWxfdmVyc2lvbiA9IGJpbm5fb2JqZWN0X3VpbnQzMihi aW5ub2JqLCAia2VybmVsX3ZlcnNpb24iKTsKLSsKLSsJLyogYmFzZSBzZXQgb2YgbWV0cmljcyAq LwotKwlsZW4gPSBzbnByaW50ZihvdXRwdXQsIGJ1ZmxlbiwgIiVkLCAlZCwgJWQsICVkLCAlZCwg JWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAl ZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCIsCi0rCQkg ICAgICAgYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfc3RhdGUiKSwKLSsJCSAgICAg ICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9jYV9zdGF0ZSIpLAotKwkJICAgICAg IGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3JldHJhbnNtaXRzIiksCi0rCQkgICAg ICAgYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfcHJvYmVzIiksCi0rCQkgICAgICAg Ymlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfYmFja29mZiIpLAotKwkJICAgICAgIGJp bm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX29wdGlvbnMiKSwKLSsJCSAgICAgICBiaW5u X29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9zbmRfd3NjYWxlIiksCi0rCQkgICAgICAgYmlu bl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfcmN2X3dzY2FsZSIpLAotKwkJICAgICAgIGJp bm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydG8iKSwKLSsJCSAgICAgICBiaW5uX29i amVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfYXRvIiksCi0rCQkgICAgICAgYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX3NuZF9tc3MiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X21zcyIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV91bmFja2VkIiksCi0rCQkgICAgICAgYmlubl9vYmplY3RfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX3NhY2tlZCIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9sb3N0IiksCi0rCQkgICAgICAgYmlubl9vYmplY3RfdWludDMyKGJp bm5vYmosICJ0Y3BpX3JldHJhbnMiKSwKLSsJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIoYmlu bm9iaiwgInRjcGlfZmFja2V0cyIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQzMihiaW5u b2JqLCAidGNwaV9sYXN0X2RhdGFfc2VudCIpLAotKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9sYXN0X2Fja19zZW50IiksCi0rCQkgICAgICAgYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfZGF0YV9yZWN2IiksCi0rCQkgICAgICAgYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfYWNrX3JlY3YiKSwKLSsJCSAgICAgICBi aW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcG10dSIpLAotKwkJICAgICAgIGJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3Zfc3N0aHJlc2giKSwKLSsJCSAgICAgICBi aW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcnR0IiksCi0rCQkgICAgICAgYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0dHZhciIpLAotKwkJICAgICAgIGJpbm5fb2Jq ZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfc3N0aHJlc2giKSwKLSsJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX2N3bmQiKSwKLSsJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfYWR2bXNzIiksCi0rCQkgICAgICAgYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jlb3JkZXJpbmciKSwKLSsJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3J0dCIpLAotKwkJICAgICAgIGJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3Zfc3BhY2UiKSwKLSsJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfdG90YWxfcmV0cmFucyIpCi0rCQkpOwotKwot KwkvKiBjb21wYXJlIHRoZSByZWNlaXZlZCBrZXJuZWwgdmVyc2lvbiB0byB0aGUgdmVyc2lvbiB0 aGF0IHN1cHBvcnRzCi0rCSAqIGFueSBnaXZlbiBtZXRyaWMuIFRoaXMgbWVhbnMgdGhhdCBhIHJl bW90ZSBob3N0IHRoYXQgaGFzIGEgZGlmZmVyZW50Ci0rCSAqIGtlcm5lbCB0aGF0IHRoZSBsb2Nh bCBob3N0IHdpbGwgYmUgYWJsZSB0byBwcm9jZXNzIHRoZSBkYXRhIGluIHRlcm1zIG9mCi0rCSAq IHRoZSByZW1vdGUga2VybmVsIHZlcnNpb24uIE9ubHkgbmVjZXNzYXJ5IHVuZGVyIGxpbnV4Ki8K LSsjaWZkZWYgX19saW51eF9fCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lP TigzLDE1LDApKSB7Ci0rCQlsZW4gKz0gc25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4p LCAiLCAlbGx1LCAlbGx1IiwKLSsJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmosICJ0Y3Bp X21heF9wYWNpbmdfcmF0ZSIpLAotKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRj cGlfcGFjaW5nX3JhdGUiKQotKwkJCSk7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49 IEtFUk5FTF9WRVJTSU9OKDQsMSwwKSkgewotKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4s IChidWZsZW4tbGVuKSwgIiwgJWxsdSwgJWxsdSIsCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChi aW5ub2JqLCAidGNwaV9ieXRlc19hY2tlZCIpLAotKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlu bm9iaiwgInRjcGlfYnl0ZXNfcmVjZWl2ZWQiKQotKwkJCSk7Ci0rCX0KLSsKLSsJaWYgKGtlcm5l bF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsMiwwKSkgewotKwkJbGVuICs9IHNucHJpbnRm KG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVkIiwKLSsJCQkJYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX3NlZ3NfaW4iKSwKLSsJCQkJYmlubl9vYmplY3RfdWludDMy KGJpbm5vYmosICJ0Y3BpX3NlZ3Nfb3V0IikKLSsJCQkpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxf dmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDYsMCkpIHsKLSsJCWxlbiArPSBzbnByaW50Zihv dXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkLCAlZCwgJWQsICVkIiwKLSsJCQkJYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX25vdHNlbnRfYnl0ZXMiKSwKLSsJCQkJYmlubl9v YmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX21pbl9ydHQiKSwKLSsJCQkJYmlubl9vYmplY3Rf dWludDMyKGJpbm5vYmosICJ0Y3BpX2RhdGFfc2Vnc19pbiIpLAotKwkJCQliaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfZGF0YV9zZWdzX291dCIpCi0rCQkJKTsKLSsJfQotKwotKwlp ZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCw5LDApKSB7Ci0rCQlsZW4gKz0g c25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWxsdSIsCi0rCQkJCWJp bm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJ5X3JhdGVfYXBwX2xpbWl0ZWQi KSwKLSsJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJ5X3JhdGUi KQotKwkJCSk7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9O KDQsMTAsMCkpIHsKLSsJCWxlbiArPSBzbnByaW50ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiks ICIsICVsbHUsICVsbHUsICVsbHUiLAotKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwg InRjcGlfYnVzeV90aW1lIiksCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNw aV9zbmRidWZfbGltaXRlZCIpLAotKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRj cGlfcnduZF9saW1pdGVkIikKLSsJCQkpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+ PSBLRVJORUxfVkVSU0lPTig0LDE4LDApKSB7Ci0rCQlsZW4gKz0gc25wcmludGYob3V0cHV0K2xl biwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWQiLAotKwkJCQliaW5uX29iamVjdF91aW50MzIoYmlu bm9iaiwgInRjcGlfZGVsaXZlcmVkIiksCi0rCQkJCWJpbm5fb2JqZWN0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9kZWxpdmVyZWRfY2UiKQotKwkJCSk7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJz aW9uID49IEtFUk5FTF9WRVJTSU9OKDQsMTksMCkpIHsKLSsJCWxlbiArPSBzbnByaW50ZihvdXRw dXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVsbHUsICVsbHUsICVkLCAlZCIsCi0rCQkJCWJpbm5f b2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9ieXRlc19zZW50IiksCi0rCQkJCWJpbm5fb2Jq ZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9ieXRlc19yZXRyYW5zIiksCi0rCQkJCWJpbm5fb2Jq ZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kc2Fja19kdXBzIiksCi0rCQkJCWJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZF9zZWVuIikKLSsJCQkpOwotKwl9Ci0rCi0rCWlm IChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig1LDQsMCkpIHsKLSsJCWxlbiArPSBz bnByaW50ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkLCAlZCIsCi0rCQkJCWJpbm5f b2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfd25kIiksCi0rCQkJCWJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3Zfb29vcGFjayIpCi0rCQkJKTsKLSsJfQotKwotKwlp ZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNSw1LDApKSB7Ci0rCQlsZW4gKz0g c25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCIsCi0rCQkJCWJpbm5fb2Jq ZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2Zhc3RvcGVuX2NsaWVudF9mYWlsIikKLSsJCQkpOwot Kwl9Ci0rI2VuZGlmIC8qIGlmZGVmIF9fbGludXhfXyAqLwotK30KLSsKLSsvKiBQcmludCBvdXQg dGhlIGhlYWRlciB0byB0aGUgZmlsZSBzbyB0aGF0IHRoZSBjb2x1bW4gaGVhZGVyIG1hdGNoZXMg dGhlCi0rICogZGF0YSBpbiB0aGUgbWV0cmljcyBvYmplY3QuIFRoYXQgdmFyaWVzIGJ5IGtlcm5l bCB2ZXJzaW9uIHNvIHdlIGhhdmUgdG8KLSsgKiBkbyB0ZXN0cyBmb3IgZWFjaCBwb3NzaWJsZSB2 ZXJzaW9uIHdoZXJlIHRoZXkgYWRkZWQgbmV3IHZhbHVlcyB0byB0Y3BfaW5mbwotKyAqIE5PVEU6 IFRoaXMgZG9lc24ndCBwdXQgdGhlIHZhbHVlcy9oZWFkZXJzIGluIHRoZSBtb3N0IHVzZWZ1bCBv cmRlciBidXQgdGhlCi0rICogcmVzdWx0aW5nIGZpbGUgaXMgcHJvYmFibHkgZ29pbmcgdG8gZ2V0 IHByb2Nlc3NlZCBieSBzb21ldGhpbmcgKi8KLSt2b2lkCi0rbWV0cmljc19wcmludF9oZWFkZXIo RklMRSAqZnB0ciwgY2hhciAqZXh0cmFfdGV4dCwgaW50IGtlcm5lbF92ZXJzaW9uKSB7Ci0rCWlm IChleHRyYV90ZXh0ICE9IE5VTEwpIHsKLSsJCWZwcmludGYoZnB0ciwgIiVzXG4iLCBleHRyYV90 ZXh0KTsKLSsJfQotKwlmcHJpbnRmKGZwdHIsICJ0aW1lc3RhbXAsIHN0YXRlLCBjYV9zdGF0ZSwg cmV0cmFuc21pdHMsIHByb2JlcywgYmFja29mZiwgb3B0aW9ucywgIik7Ci0rCWZwcmludGYoZnB0 ciwgInNuZF93c2NhbGUsIHJjdl93c2NhbGUsIHJ0bywgYXRvLCBzbmRfbXNzLCByY3ZfbXNzLCB1 bmFja2VkLCBzYWNrZWQsIGxvc3QsIHJldHJhbnMsICIpOwotKwlmcHJpbnRmKGZwdHIsICJmYWNr ZXRzLCBsYXN0X2RhdGFfc2VudCwgbGFzdF9hY2tfc2VudCwgbGFzdF9kYXRhX3JlY3YsICIpOwot KwlmcHJpbnRmKGZwdHIsICJsYXN0X2Fja19yZWN2LCBwbXR1LCByY3Zfc3N0aHJlc2gsIHJ0dCwg cnR0dmFyLCBzbmRfc3N0aHJlc2gsICIpOwotKwlmcHJpbnRmKGZwdHIsICJzbmRfY3duZCwgYWR2 bXNzLCByZW9yZGVyaW5nLCByY3ZfcnR0LCByY3Zfc3BhY2UsIHRvdGFsX3JldHJhbnMiKTsKLSsK LSsJLyogY29tcGFyZSB0aGUgcmVjZWl2ZWQga2VybmVsIHZlcnNpb24gdG8gdGhlIHZlcnNpb24g dGhhdCBzdXBwb3J0cwotKwkgKiBhbnkgZ2l2ZW4gbWV0cmljLiBUaGlzIHdheSB3ZSBjYW4gcHJp bnQgY29uc2lzdGVudCBoZWFkZXJzLgotKwkgKiBPbmx5IG5lY2Vzc2FyeSB1bmRlciBsaW51eCov Ci0rI2lmZGVmIF9fbGludXhfXwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJ T04oMywxNSwwKSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBtYXhfcGFjaW5nX3JhdGUsIHBhY2lu Z19yYXRlIik7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9O KDQsMSwwKSkgewotKwkJZnByaW50ZihmcHRyLCAiLCBieXRlc19hY2tlZCwgYnl0ZXNfcmVjZWl2 ZWQiKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwy LDApKSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIsIHNlZ3NfaW4sIHNlZ3Nfb3V0Iik7Ci0rCX0KLSsK LSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsNiwwKSkgewotKwkJZnBy aW50ZihmcHRyLCAiLCBub3RzZW50X2J5dGVzLCBtaW5fcnR0LCBkYXRhX3NlZ3NfaW4sIGRhdGFf c2VnX291dCIpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lP Tig0LDksMCkpIHsKLSsJCWZwcmludGYoZnB0ciwgIiwgZGVsaXZlcnlfcmF0ZV9hcHBfbGltaXRl ZCwgZGVsaXZlcnlfcmF0ZSIpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJO RUxfVkVSU0lPTig0LDEwLDApKSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIsIGJ1c3lfdGltZSwgc25k YnVmX2xpbWl0ZWQsIHJ3bmRfbGltaXRlZCIpOwotKwl9Ci0rCi0rCWlmIChrZXJuZWxfdmVyc2lv biA+PSBLRVJORUxfVkVSU0lPTig0LDE4LDApKSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIsIGRlbGl2 ZXJlZCwgZGVsaXZlcmVkX2NlIik7Ci0rCX0KLSsKLSsJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtF Uk5FTF9WRVJTSU9OKDQsMTksMCkpIHsKLSsJCWZwcmludGYoZnB0ciwgIiwgYnl0ZXNfc2VudCwg Ynl0ZXNfcmV0cmFucywgZHNhY2tfZHVwcywgcmVvcmRfc2VlbiIpOwotKwl9Ci0rCi0rCWlmIChr ZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig1LDQsMCkpIHsKLSsJCWZwcmludGYoZnB0 ciwgIiwgc25kX3duZCwgcmN2X29vb3BhY2siKTsKLSsJfQotKwotKwlpZiAoa2VybmVsX3ZlcnNp b24gPj0gS0VSTkVMX1ZFUlNJT04oNSw1LDApKSB7Ci0rCQlmcHJpbnRmKGZwdHIsICIsIGZhc3Rv cGVuX2NsaWVudF9mYWlsIik7Ci0rCX0KLSsjZW5kaWYgLyogaWZkZWYgX19saW51eF9fICovCi0r CWZwcmludGYoZnB0ciwgIlxuXG4iKTsKLSt9Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3Jp Zy9tZXRyaWNzLmggb3BlbnNzaC0xMC4ycDEvbWV0cmljcy5oCi0tLS0gb3BlbnNzaC0xMC4ycDEu b3JpZy9tZXRyaWNzLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NoLTEwLjJwMS9tZXRyaWNzLmgJMjAyNi0wMy0xOCAxNToxMzoxNy44NDk5MDcwMzcgKzAx MDAKLUBAIC0wLDAgKzEsNDUgQEAKLSsvKgotKyAqIENvcHlyaWdodCAoYykgMjAyMiBUaGUgQm9h cmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCi0rICoKLSsgKiAg QXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgotKyAqCi0rICogVGhpcyBsaWJy YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkgaXQKLSsgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgotKyAqCi0rICog VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUCi0rICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0rICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0rICoKLSsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKLSsgKiBpZiBub3QsIHNlZSBodHRwOi8vb3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgotKyAqCi0rICovCi0rCi0rI2lmbmRlZiBNRVRSSUNT X0gKLSsjZGVmaW5lIE1FVFJJQ1NfSAotKwotKyNpbmNsdWRlICJiaW5uLmgiCi0rCi0rLyogbGlu dXgsIGZyZWVic2QsIGFuZCBuZXRic2QgaGF2ZSB0Y3BfaW5mbyBzdHJ1Y3RzLgotKyAqIEkgZG9u J3Qga25vdyBhYm91dCBvdGhlciBzeXN0ZW1zIHNvIHdlIGRpc2FibGUgdGhpcwotKyAqIGZ1bmN0 aW9uYWxpdHkgZm9yIHRoZW0gKi8KLSsjaWYgZGVmaW5lZCBfX2xpbnV4X18gfHwgZGVmaW5lZCBf X0ZyZWVCU0RfXyB8fCBkZWZpbmVkIF9fTmV0QlNEX18gJiYgIWRlZmluZWQoX19hbHBpbmVfXykK LSsjZGVmaW5lIFRDUF9JTkZPIDEKLSsjaWYgZGVmaW5lZCBfX2xpbnV4X18gJiYgIWRlZmluZWQo X19hbHBpbmVfXykKLSsjaW5jbHVkZSA8bGludXgvdGNwLmg+Ci0rI2Vsc2UKLSsjaW5jbHVkZSA8 bmV0aW5ldC90Y3AuaD4KLSsjZW5kaWYKLSsjZWxzZQotKy8qIG1ha2UgYSBudWxsIHN0cnVjdCBm b3IgdGNwX2luZm8gb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgaXQqLwotK3R5cGVkZWYg c3RydWN0IHRjcF9pbmZvIHsKLSsJdm9pZCAgICAgKmR1bW15OwotK30gdGNwX2luZm87Ci0rI2Vu ZGlmCi0rCi0rdm9pZCBtZXRyaWNzX3dyaXRlX2Jpbm5fb2JqZWN0KHN0cnVjdCB0Y3BfaW5mbyAq LCBzdHJ1Y3QgYmlubl9zdHJ1Y3QgKik7Ci0rdm9pZCBtZXRyaWNzX3JlYWRfYmlubl9vYmplY3Qo dm9pZCAqLCBjaGFyICopOwotK3ZvaWQgbWV0cmljc19wcmludF9oZWFkZXIoRklMRSAqLCBjaGFy ICosIGludCk7Ci0rCi0rCi0rI2VuZGlmIC8qIGRlZmluZSBtZXRyaWNzX2ggKi8KLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjJwMS5vcmlnL21pc2MuYyBvcGVuc3NoLTEwLjJwMS9taXNjLmMKLS0tLSBv cGVuc3NoLTEwLjJwMS5vcmlnL21pc2MuYwkyMDI2LTAzLTE4IDE5OjM2OjA3LjMyMTgzMDA4NiAr MDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL21pc2MuYwkyMDI2LTAzLTE4IDE5OjQ5OjMyLjEyOTM2 MDgzNSArMDEwMAotQEAgLTY3LDYgKzY3LDgyIEBACi0gI2luY2x1ZGUgInNzaGVyci5oIgotICNp bmNsdWRlICJwbGF0Zm9ybS5oIgotIAotKy8qIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBGSVBT IGlzIGVuYWJsZWQgb3Igbm90LgotKyAqIFdlIGFzc3VtZSB0aGF0IGZpcHMgaXMgbm90IGVuYWJs ZWQgYW5kIHRoZW4gdGVzdCBmcm9tIHRoZXJlLgotKyAqIFRoZSBpZGVhIGlzIHRoYXQgaWYgdGhl cmUgaXMgYW4gZXJyb3Igb3Igd2UgY2FuJ3QgcmVhZCB0aGUgdmFsdWUKLSsgKiB0aGVuIGVpdGhl ciB0aGUgT1MgZG9lc24ndCBzdXBwb3J0IEZJUFMgb3IgdGhhdCBGSVBTIHdpbGwKLSsgKiBjYXRj aCBhbnl0aGluZyB3ZSB0cnkgdG8gZG8gdGhhdCdzIG5vdCBGSVBTIGNvbXBsaWFudC4KLSsgKiBU aGF0IHdvdWxkIGJlIGxpbWl0ZWQgdG8gdHJ5aW5nIHRvIHVzZSBvbmUgb2YgdGhlIHBhcmFsbGVs IGNpcGhlcnMuCi0rICovCi0raW50Ci0rZmlwc19lbmFibGVkKCkKLSt7Ci0rCWludCBtb2RlID0g MDsKLSsJY29uc3QgY2hhciogZmlwc19wYXRoID0gIi9wcm9jL3N5cy9jcnlwdG8vZmlwc19lbmFi bGVkIjsKLSsJRklMRSAqZmlwc19lbmFibGVkID0gTlVMTDsKLSsKLSsJZGVidWcyX2YoIkNoZWNr aW5nIGZvciBGSVBTIik7Ci0rCi0rCS8qIGlmIHdlIGNhbid0IG9wZW4gdGhlIHBhdGggdG8gZmlw c19lbmFibGVkIGl0Ci0rCSAqIGVpdGhlciBkb2Vzbid0IGV4aXN0IG9yIHRoZXJlIGlzIGFuIGVy cm9yLiBJbiBlaXRoZXIKLSsJICogY2FzZSB3ZSB0cmVhdCBpdCBhcyBpZiBmaXBzIGlzICpub3Qq IGVuYWJsZWQuCi0rCSAqIFRoaXMgaXMgYmVjYXVzZSBJIHdhbnQgdG8gZmFpbCB0b3dhcmRzIHRo ZSBtb3N0Ci0rCSAqIGNvbW1vbiBzY2VuYXJpbyB3aGljaCBpcyB0aGF0IGZpcHNfZW5hYmxlZCBl aXRoZXIKLSsJICogZG9lc24ndCBleGlzdCAobm9uLWZlZG9yYSB2YXJpYW50cykgb3IgaXNuJ3QK LSsJICogZW5hYmxlZC4KLSsJICovCi0rCWZpcHNfZW5hYmxlZCA9IGZvcGVuKGZpcHNfcGF0aCwg InIiKTsKLSsJaWYgKCFmaXBzX2VuYWJsZWQpIHsKLSsJCWRlYnVnM19mKCJDYW5ub3Qgb3BlbiBw YXRoIHRvIGZpcHNfZW5hYmxlZC4iKTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCS8qIGZpcHNf ZW5hYmxlZCBkb2VzIGV4aXN0IHNvIHJlYWQgdGhlIHZhbHVlLgotKwkgKiBJdCBzaG91bGQgYmUg ZWl0aGVyIDAgKGRpc2FibGVkKSBvciAxIChlbmFibGVkKQotKwkgKi8KLSsJaWYgKCAxICE9IGZz Y2FuZihmaXBzX2VuYWJsZWQsIiVkIiwgJm1vZGUpICkgewotKwkJLyogaWYgd2UgZ2V0IHNvbWUg ZXJyb3IgaGVyZSB0aGVuIHdlCi0rCQkgKiBhZ2FpbiBmYWlsIHRvIHJldHVybmluZyBmaXBzIGJl aW5nIGRpc2FibGVkCi0rCQkgKi8KLSsJCWRlYnVnM19mKCJFcnJvciBwcm9jZXNzaW5nIGZpcHNf ZW5hYmxlZC4iKTsKLSsJCXJldHVybiAwOwotKwl9Ci0rCi0rCS8qIGxldCB0aGUgdXNlciBrbm93 IHRoZSBzdGF0dXMgKi8KLSsJaWYgKG1vZGUgPT0gMCkKLSsJCWRlYnVnM19mKCJGSVBTIG1vZGUg aXMgZGlzYWJsZWQuIik7Ci0rCWVsc2UKLSsJCWRlYnVnM19mKCJGSVBTIG1vZGUgaXMgZW5hYmxl ZC4iKTsKLSsKLSsJcmV0dXJuIG1vZGU7Ci0rfQotKwotKy8qIGhlbHBlciBmdW5jdGlvbiB1c2Vk IHRvIGRldGVybWluZSBtZW1vcnkgdXNhZ2UgZHVyaW5nCi0rICogZGV2ZWxvcG1lbnQgcHJvY2Vz cy4gTm90IHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbi4KLSsgKi8KLSt2b2lkCi0rcmVhZF9tZW1f c3RhdHMoc3RhdG1fdCAqcmVzdWx0LCBpbnQgcG9zdF9hdXRoKQotK3sKLSsJaWYgKCFwb3N0X2F1 dGgpCi0rCQlyZXR1cm47Ci0rCi0rCWNvbnN0IGNoYXIqIHN0YXRtX3BhdGggPSAiL3Byb2Mvc2Vs Zi9zdGF0bSI7Ci0rCi0rCUZJTEUgKmYgPSBmb3BlbihzdGF0bV9wYXRoLCJyIik7Ci0rCWlmKCFm KXsKLSsJCXBlcnJvcihzdGF0bV9wYXRoKTsKLSsJCWFib3J0KCk7Ci0rCX0KLSsJaWYoNyAhPSBm c2NhbmYoZiwiJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1IiwKLSsJCSAgICAgICAmcmVzdWx0 LT5zaXplLCAmcmVzdWx0LT5yZXNpZGVudCwgJnJlc3VsdC0+c2hhcmUsICZyZXN1bHQtPnRleHQs ICZyZXN1bHQtPmxpYiwKLSsJCSAgICAgICAmcmVzdWx0LT5kYXRhLCAmcmVzdWx0LT5kdCkpCi0r CXsKLSsJCXBlcnJvcihzdGF0bV9wYXRoKTsKLSsJCWFib3J0KCk7Ci0rCX0KLSsJZmNsb3NlKGYp OwotK30KLSsKLSAvKiByZW1vdmUgbmV3bGluZSBhdCBlbmQgb2Ygc3RyaW5nICovCi0gY2hhciAq Ci0gY2hvcChjaGFyICpzKQotQEAgLTE2NzMsMjAgKzE3NDksNiBAQAotIAlyZXR1cm4gKHYpOwot IH0KLSAKLS11X2ludDMyX3QKLS1nZXRfdTMyX2xlKGNvbnN0IHZvaWQgKnZwKQotLXsKLS0JY29u c3QgdV9jaGFyICpwID0gKGNvbnN0IHVfY2hhciAqKXZwOwotLQl1X2ludDMyX3QgdjsKLS0KLS0J diAgPSAodV9pbnQzMl90KXBbMF07Ci0tCXYgfD0gKHVfaW50MzJfdClwWzFdIDw8IDg7Ci0tCXYg fD0gKHVfaW50MzJfdClwWzJdIDw8IDE2OwotLQl2IHw9ICh1X2ludDMyX3QpcFszXSA8PCAyNDsK LS0KLS0JcmV0dXJuICh2KTsKLS19Ci0tCi0gdV9pbnQxNl90Ci0gZ2V0X3UxNihjb25zdCB2b2lk ICp2cCkKLSB7Ci1AQCAtMTcyNiwxNyArMTc4OCw2IEBACi0gfQotIAotIHZvaWQKLS1wdXRfdTMy X2xlKHZvaWQgKnZwLCB1X2ludDMyX3QgdikKLS17Ci0tCXVfY2hhciAqcCA9ICh1X2NoYXIgKil2 cDsKLS0KLS0JcFswXSA9ICh1X2NoYXIpdiAmIDB4ZmY7Ci0tCXBbMV0gPSAodV9jaGFyKSh2ID4+ IDgpICYgMHhmZjsKLS0JcFsyXSA9ICh1X2NoYXIpKHYgPj4gMTYpICYgMHhmZjsKLS0JcFszXSA9 ICh1X2NoYXIpKHYgPj4gMjQpICYgMHhmZjsKLS19Ci0tCi0tdm9pZAotIHB1dF91MTYodm9pZCAq dnAsIHVfaW50MTZfdCB2KQotIHsKLSAJdV9jaGFyICpwID0gKHVfY2hhciAqKXZwOwotZGlmZiAt TnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvbWlzYy5oIG9wZW5zc2gtMTAuMnAxL21pc2MuaAotLS0t IG9wZW5zc2gtMTAuMnAxLm9yaWcvbWlzYy5oCTIwMjYtMDMtMTggMTU6MTI6MDEuNTg2MjIwNzc1 ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvbWlzYy5oCTIwMjYtMDMtMTggMTU6MTM6MTcuODUw NjI3MjE3ICswMTAwCi1AQCAtMTY4LDEyICsxNjgsNiBAQAotIHZvaWQJCXB1dF91MTYodm9pZCAq LCB1X2ludDE2X3QpCi0gICAgIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9fKCBfX21pbmJ5dGVz X18sIDEsIDIpKSk7Ci0gCi0tLyogTGl0dGxlLWVuZGlhbiBzdG9yZS9sb2FkLCB1c2VkIGJ5IHVt YWMuYyAqLwotLXVfaW50MzJfdAlnZXRfdTMyX2xlKGNvbnN0IHZvaWQgKikKLS0gICAgX19hdHRy aWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCA0KSkpOwotLXZvaWQJCXB1dF91 MzJfbGUodm9pZCAqLCB1X2ludDMyX3QpCi0tICAgIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9f KF9fbWluYnl0ZXNfXywgMSwgNCkpKTsKLS0KLSBzdHJ1Y3QgYndsaW1pdCB7Ci0gCXNpemVfdCBi dWZsZW47Ci0gCXVfaW50NjRfdCByYXRlOwkJLyogZGVzaXJlZCByYXRlIGluIGtiaXQvcyAqLwot QEAgLTI2NSw0ICsyNTksMTcgQEAKLSAvKiBPbiBPcGVuQlNEIHRpbWVfdCBpcyBpbnQ2NF90IHdo aWNoIGlzIGxvbmcgbG9uZy4gKi8KLSAvKiAjZGVmaW5lIFNTSF9USU1FX1RfTUFYIExMT05HX01B WCAqLwotIAotK3R5cGVkZWYgc3RydWN0IHN0YXRtX3QgewotKyAgdW5zaWduZWQgbG9uZyBzaXpl OwotKyAgdW5zaWduZWQgbG9uZyByZXNpZGVudDsKLSsgIHVuc2lnbmVkIGxvbmcgc2hhcmU7Ci0r ICB1bnNpZ25lZCBsb25nIHRleHQ7Ci0rICB1bnNpZ25lZCBsb25nIGxpYjsKLSsgIHVuc2lnbmVk IGxvbmcgZGF0YTsKLSsgIHVuc2lnbmVkIGxvbmcgZHQ7Ci0rfSBzdGF0bV90OwotKwotK3ZvaWQg cmVhZF9tZW1fc3RhdHMoc3RydWN0IHN0YXRtX3QgKiwgaW50KTsKLStpbnQgZmlwc19lbmFibGVk KCk7Ci0rCi0gI2VuZGlmIC8qIF9NSVNDX0ggKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5v cmlnL215cHJvcG9zYWwuaCBvcGVuc3NoLTEwLjJwMS9teXByb3Bvc2FsLmgKLS0tLSBvcGVuc3No LTEwLjJwMS5vcmlnL215cHJvcG9zYWwuaAkyMDI2LTAzLTE4IDE1OjEyOjAxLjkxNDI2NDM1NSAr MDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL215cHJvcG9zYWwuaAkyMDI2LTAzLTE4IDE1OjEzOjE3 Ljg1MDk1MzQ5MiArMDEwMAotQEAgLTcyLDEwICs3MiwyMCBAQAotIAkicnNhLXNoYTItNTEyLCIg XAotIAkicnNhLXNoYTItMjU2IgotIAotKy8qaWYgd2UgYXJlbid0IHVzaW5nIE9wZW5TU0wgd2Ug bmVlZCB0byByZW1vdmUKLSsgKiB0aGUgcGFyYWxsZWwgQ2hhQ2hhMjAgY2lwaGVyIGZyb20gdGhl IGxpc3QgKi8KLSsjaWZkZWYgV0lUSF9PUEVOU1NMCi0gI2RlZmluZQlLRVhfU0VSVkVSX0VOQ1JZ UFQgXAotKwkiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZywiICBcCi0gCSJjaGFjaGEy MC1wb2x5MTMwNUBvcGVuc3NoLmNvbSwiIFwKLSAJImFlczEyOC1nY21Ab3BlbnNzaC5jb20sYWVz MjU2LWdjbUBvcGVuc3NoLmNvbSwiIFwKLSAJImFlczEyOC1jdHIsYWVzMTkyLWN0cixhZXMyNTYt Y3RyIgotKyNlbHNlCi0rI2RlZmluZQlLRVhfU0VSVkVSX0VOQ1JZUFQgXAotKwkiY2hhY2hhMjAt cG9seTEzMDVAb3BlbnNzaC5jb20sIiAgICBcCi0rCSJhZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFl czI1Ni1nY21Ab3BlbnNzaC5jb20sIiBcCi0rCSJhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2 LWN0ciIKLSsjZW5kaWYKLSAKLSAjZGVmaW5lIEtFWF9DTElFTlRfRU5DUllQVCBLRVhfU0VSVkVS X0VOQ1JZUFQKLSAKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL251bS5jIG9wZW5zc2gt MTAuMnAxL251bS5jCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9udW0uYwkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL251bS5jCTIwMjYtMDMt MTggMTU6MTM6MTcuODUxMDY0NjkyICswMTAwCi1AQCAtMCwwICsxLDE1NiBAQAotKy8qIENDMCBs aWNlbnNlIGFwcGxpZWQsIHNlZSBMSUNFTkNFLm1kICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlICJudW0uaCIKLSsKLSsjaWZkZWYgV0lUSF9PUEVOU1NMMwotKwotK3R5cGVk ZWYgZW51bSB7IEJJRyA9IDEsIExJVFRMRSA9IC0xIH0gIGVuZGlhbl90OwotK3R5cGVkZWYgZW51 bSB7IE5FR0FUSVZFID0gMHhmZiwgUE9TSVRJVkUgPSAweDAwIH0gc2lnbl90OwotKwotK3N0YXRp YyBlbmRpYW5fdCBuYXRpdmVlbmRpYW4odm9pZCkKLSt7Ci0rICAgIGNvbnN0IGludCBlbmRpYW50 ZXN0ID0gMTsKLSsKLSsgICAgcmV0dXJuICooKGNoYXIgKikmZW5kaWFudGVzdCkgPT0gMSA/IExJ VFRMRSA6IEJJRzsKLSt9Ci0rCi0rc3RhdGljIHNpZ25fdCBwYXJhbXNpZ24oY29uc3QgT1NTTF9Q QVJBTSAqcGFyYW0pCi0rewotKyAgICBzaXplX3Qgc3JjbXNiID0gbmF0aXZlZW5kaWFuKCkgPT0g QklHID8gMCA6IHBhcmFtLT5kYXRhX3NpemUgLSAxOwotKwotKyAgICByZXR1cm4KLSsgICAgICAg IHBhcmFtLT5kYXRhX3R5cGUgPT0gT1NTTF9QQVJBTV9VTlNJR05FRF9JTlRFR0VSCi0rICAgICAg ICA/IFBPU0lUSVZFCi0rICAgICAgICA6ICgoKHVuc2lnbmVkIGNoYXIgKilwYXJhbS0+ZGF0YSlb c3JjbXNiXSAmIDB4ODAKLSsgICAgICAgICAgID8gTkVHQVRJVkUKLSsgICAgICAgICAgIDogUE9T SVRJVkUpOwotK30KLSsKLStzdHJ1Y3QgbnVtZGVzYyB7Ci0rICAgIHZvaWQgKmRhdGE7Ci0rICAg IHVuc2lnbmVkIGludCBkYXRhX3R5cGU7ICAgICAvKiBUaGUgT1NTTF9QQVJBTSBkYXRhIHR5cGUg Ki8KLSsKLSsgICAgLyogVGhlc2UgZmllbGRzIGNvbmNlcm4gdGhlIHdob2xlIG51bWJlciAqLwot KyAgICBzaXplX3Qgc2l6ZTsKLSsgICAgZW5kaWFuX3QgZW5kaWFuOwotKyAgICBzaWduX3Qgc2ln bjsKLSsKLSsgICAgLyogVGhlc2UgZmllbGRzIGNvbmNlcm4gdGhlIGxpbWJzIG9mIHRoZSBudW1i ZXIgKi8KLSsgICAgc2l6ZV90IGxpbWJzaXplOwotKyAgICBlbmRpYW5fdCBsaW1iZW5kaWFuOwot KyAgICAvKiBUaGlzIGlzIGZvciBvZGQgYXJjaHMuICovCi0rICAgIC8qIHNlZSB0aGUgbWFudWFs IGZvciBtcHpfaW1wb3J0KCkgZm9yIGFuIGluIGRlcHRoIGV4cGxhbmF0aW9uLiAqLwotKyAgICBz aXplX3QgbGltYm5haWxiaXRzOwotK307Ci0rCi0rc3RydWN0IHJlc3VsdGRlc2MgewotKyAgICBz aXplX3Qgc2l6ZTsKLSsgICAgaW50IHJlc3VsdDsgICAgICAgICAgICAgICAgIC8qIDEgb3IgKG5l Z2F0aXZlKSBlcnJvciAqLwotK307Ci0rCi0rc3RhdGljIHN0cnVjdCByZXN1bHRkZXNjIHByb3Zu dW1fY29weShzdHJ1Y3QgbnVtZGVzYyBkZXN0LCBzdHJ1Y3QgbnVtZGVzYyBzcmMpCi0rewotKyAg ICBzdHJ1Y3QgcmVzdWx0ZGVzYyByZXN1bHQgPSB7IGRlc3Quc2l6ZSwgMSwgfTsKLSsKLSsgICAg aWYgKHNyYy5kYXRhX3R5cGUgIT0gT1NTTF9QQVJBTV9JTlRFR0VSCi0rICAgICAgICAmJiBzcmMu ZGF0YV90eXBlICE9IE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUikgewotKyAgICAgICAgcmVz dWx0LnJlc3VsdCA9IFBST1ZOVU1fRV9XUk9OR19UWVBFOwotKyAgICAgICAgcmV0dXJuIHJlc3Vs dDsKLSsgICAgfQotKwotKyAgICBpZiAoc3JjLnNpemUgPT0gMCkgewotKyAgICAgICAgbWVtc2V0 KGRlc3QuZGF0YSwgMCwgZGVzdC5zaXplKTsKLSsgICAgICAgIHJldHVybiByZXN1bHQ7Ci0rICAg IH0KLSsKLSsgICAgLyogRXh0cmEgZGF0YSAqLwotKyAgICBzaXplX3Qgc3JjbXNiID0gc3JjLmVu ZGlhbiA9PSBCSUcgPyAwIDogc3JjLnNpemUgLSAxOwotKyAgICBpbnQgc3JjbXNiMmxzYiA9IHNy Yy5lbmRpYW4gPT0gQklHID8gMSA6IC0xOwotKwotKyAgICAvKgotKyAgICAgKiBJZiB0aGUgc291 cmNlIGlzIGJpZ2dlciB0aGFuIHRoZSBkZXN0aW5hdGlvbiwgYW5hbHlzZSB0byBzZWUgaWYgdGhl Ci0rICAgICAqIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBpcyBqdXN0IHBhZGRpbmcgdGhhdCBjYW4g YmUgaWdub3JlZC4KLSsgICAgICogVGhlIHJ1bGVzIHRvIGRldGVybWluZSBpZiB0aGUgbW9zdCBz aWduaWZpY2FudCBieXRlIGlzIGp1c3QgcGFkZGluZwotKyAgICAgKiBhcmU6Ci0rICAgICAqCi0r ICAgICAqIDEuIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZXF1YWxzIHNyY3NpZ25lZCwgd2hp Y2gganVzdCBzbyBoYXBwZW5zCi0rICAgICAqICAgIHRvIGhhdmUgdGhlIDIncyBjb21wbGVtZW50 IHBhZGRpbmcgdmFsdWUuCi0rICAgICAqIDIuIFRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0 aGUgbmV4dCB0byBtb3N0IHNpZ25pZmljYW50IGJ5dGUKLSsgICAgICogICAgZXF1YWxzIHRoZSBt b3N0IHNpZ25pZmljYW50IGJpdCBvZiBzcmNzaWduZWQuCi0rICAgICAqLwotKyAgICBzaXplX3Qg ZW5kID0gZGVzdC5kYXRhID09IE5VTEwgPyAxIDogZGVzdC5zaXplOwotKyAgICBmb3IgKDsgc3Jj LnNpemUgPiBlbmQ7IHNyY21zYiArPSBzcmNtc2IybHNiLCBzcmMuc2l6ZS0tKQotKyAgICAgICAg aWYgKCgodW5zaWduZWQgY2hhciAqKXNyYy5kYXRhKVtzcmNtc2JdICE9IHNyYy5zaWduCi0rICAg ICAgICAgICAgfHwgKCgoKHVuc2lnbmVkIGNoYXIgKilzcmMuZGF0YSlbc3JjbXNiICsgc3JjbXNi MmxzYl0gJiAweDgwKQotKyAgICAgICAgICAgICAgICAhPSAoc3JjLnNpZ24gJiAweDgwKSkpCi0r ICAgICAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGlmIChzcmMuc2l6ZSA+IGRlc3Quc2l6ZSkgewot KyAgICAgICAgcmVzdWx0LnJlc3VsdCA9IFBST1ZOVU1fRV9UT09CSUc7Ci0rICAgICAgICByZXR1 cm4gcmVzdWx0OwotKyAgICB9Ci0rCi0rICAgIHNpemVfdCBzcmNsc2IgPSBzcmNtc2IgKyBzcmNt c2IybHNiICogKHNyYy5zaXplIC0gMSk7Ci0rCi0rICAgIC8qIFNpbXBsZSBjYXNlLCBhbGwgc2ln bmlmaWNhbnQgZGV0YWlscyBtYXRjaCAqLwotKyAgICBpZiAoZGVzdC5lbmRpYW4gPT0gc3JjLmVu ZGlhbgotKyAgICAgICAgJiYgZGVzdC5saW1ic2l6ZSA9PSAxCi0rICAgICAgICAmJiBkZXN0Lmxp bWJuYWlsYml0cyA9PSAwCi0rICAgICAgICAmJiAoZGVzdC5kYXRhX3R5cGUgPT0gT1NTTF9QQVJB TV9JTlRFR0VSIHx8IHNyYy5zaWduID09IFBPU0lUSVZFKSkgewotKwotKyAgICAgICAgaWYgKHNy Yy5zaXplIDwgZGVzdC5zaXplKSB7Ci0rICAgICAgICAgICAgc2l6ZV90IHBhZHN0YXJ0ID0gZGVz dC5lbmRpYW4gPT0gQklHID8gMCA6IGRlc3Quc2l6ZSAtIHNyYy5zaXplOwotKwotKyAgICAgICAg ICAgIG1lbXNldCgodW5zaWduZWQgY2hhciAqKWRlc3QuZGF0YSArIHBhZHN0YXJ0LCBzcmMuc2ln biwKLSsgICAgICAgICAgICAgICAgICAgZGVzdC5zaXplIC0gc3JjLnNpemUpOwotKyAgICAgICAg fQotKwotKyAgICAgICAgc2l6ZV90IGRlc3RzdGFydCA9IGRlc3QuZW5kaWFuID09IEJJRyA/IGRl c3Quc2l6ZSAtIHNyYy5zaXplIDogMDsKLSsgICAgICAgIHNpemVfdCBzcmNzdGFydCA9IHNyYy5l bmRpYW4gPT0gQklHID8gc3JjbXNiIDogc3JjbHNiOwotKwotKyAgICAgICAgbWVtY3B5KCh1bnNp Z25lZCBjaGFyICopZGVzdC5kYXRhICsgZGVzdHN0YXJ0LAotKyAgICAgICAgICAgICAgICh1bnNp Z25lZCBjaGFyICopc3JjLmRhdGEgKyBzcmNzdGFydCwKLSsgICAgICAgICAgICAgICBzcmMuc2l6 ZSk7Ci0rICAgICAgICByZXR1cm4gcmVzdWx0OwotKyAgICB9Ci0rCi0rICAgIC8qIENvbXBsZXgg Y2FzZSwgZm9yIHNpZ24gb3IgbGltYiBjb252ZXJzaW9uLiAgQ3VycmVudGx5IHVuc3VwcG9ydGVk ICovCi0rICAgIHJlc3VsdC5yZXN1bHQgPSBQUk9WTlVNX0VfVU5TVVBQT1JURUQ7Ci0rICAgIHJl dHVybiByZXN1bHQ7Ci0rfQotKwotKyNkZWZpbmUgaW1wbGVtZW50X3Byb3ZudW0oVCwgRFQpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGludCBwcm92bnVtX2dldF8jI1Qo VCAqZGVzdCwgY29uc3QgT1NTTF9QQVJBTSAqcGFyYW0pICAgICAgIFwKLSsgICAgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgICAgZW5kaWFuX3QgZW5kaWFuID0gbmF0aXZlZW5kaWFuKCk7ICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICBzdHJ1Y3QgbnVtZGVzYyBkZXN0bmQgPSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBkZXN0LCBEVCwgc2l6ZW9mKFQpLCBlbmRp YW4sIFBPU0lUSVZFLCAxLCBlbmRpYW4sIDAgXAotKyAgICAgICAgfTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBzdHJ1Y3Qg bnVtZGVzYyBzcmNuZCA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgICAgICBwYXJhbS0+ZGF0YSwgcGFyYW0tPmRhdGFfdHlwZSwgcGFyYW0tPmRhdGFfc2l6ZSwg ICAgXAotKyAgICAgICAgICAgIGVuZGlhbiwgcGFyYW1zaWduKHBhcmFtKSwgMSwgZW5kaWFuLCAw ICAgICAgICAgICAgICBcCi0rICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgc3RydWN0IHJl c3VsdGRlc2MgcmVzdWx0ID0gcHJvdm51bV9jb3B5KGRlc3RuZCwgc3JjbmQpOyBcCi0rICAgICAg ICByZXR1cm4gcmVzdWx0LnJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICBpbnQgcHJvdm51bV9zZXRfIyNUKE9TU0xfUEFSQU0gKnBhcmFt LCBUIHNyYykgICAgICAgICBcCi0rICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIGVuZGlhbl90IGVuZGlhbiA9 IG5hdGl2ZWVuZGlhbigpOyAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgc3RydWN0 IG51bWRlc2MgZGVzdG5kID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgcGFyYW0tPmRhdGEsIHBhcmFtLT5kYXRhX3R5cGUsIHBhcmFtLT5kYXRhX3NpemUs ICAgIFwKLSsgICAgICAgICAgICBlbmRpYW4sIFBPU0lUSVZFLCAxLCBlbmRpYW4sIDAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBzdHJ1Y3QgbnVtZGVzYyBzcmNu ZCA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAmc3Jj LCBEVCwgc2l6ZW9mKFQpLCBlbmRpYW4sIFBPU0lUSVZFLCAxLCBlbmRpYW4sIDAgXAotKyAgICAg ICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgIHN0cnVjdCByZXN1bHRkZXNjIHJlc3VsdCA9IHByb3Zu dW1fY29weShkZXN0bmQsIHNyY25kKTsgXAotKyAgICAgICAgcGFyYW0tPnJldHVybl9zaXplID0g cmVzdWx0LnNpemU7ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICByZXR1cm4gcmVz dWx0LnJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfQot KwotK2ltcGxlbWVudF9wcm92bnVtKHNpemVfdCwgT1NTTF9QQVJBTV9VTlNJR05FRF9JTlRFR0VS KQotKwotKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wzICovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4y cDEub3JpZy9udW0uaCBvcGVuc3NoLTEwLjJwMS9udW0uaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9y aWcvbnVtLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3No LTEwLjJwMS9udW0uaAkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg1MTA5NjI4NyArMDEwMAotQEAgLTAs MCArMSwxNSBAQAotKy8qIENDMCBsaWNlbnNlIGFwcGxpZWQsIHNlZSBMSUNFTkNFLm1kICovCi0r Ci0rI2luY2x1ZGUgImluY2x1ZGVzLmgiCi0rI2lmZGVmIFdJVEhfT1BFTlNTTDMKLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9jb3JlLmg+Ci0rCi0rLyogQ29udmVydCBiZXR3ZWVuIE9TU0xfUEFSQU0g YW5kIHNpemVfdCAqLwotK2ludCBwcm92bnVtX2dldF9zaXplX3Qoc2l6ZV90ICpkZXN0LCBjb25z dCBPU1NMX1BBUkFNICpwYXJhbSk7Ci0raW50IHByb3ZudW1fc2V0X3NpemVfdChPU1NMX1BBUkFN ICpwYXJhbSwgc2l6ZV90IHNyYyk7Ci0rCi0rI2RlZmluZSBQUk9WTlVNX0VfV1JPTkdfVFlQRSAg ICAtMQotKyNkZWZpbmUgUFJPVk5VTV9FX1RPT0JJRyAgICAgICAgLTIKLSsjZGVmaW5lIFBST1ZO VU1fRV9VTlNVUFBPUlRFRCAgIC0zCi0rI2VuZGlmIC8qIFdJVEhfT1BFTlNTTDMgKi8KLWRpZmYg LU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL29zc2wzLXByb3ZpZGVyLWVyci5jIG9wZW5zc2gtMTAu MnAxL29zc2wzLXByb3ZpZGVyLWVyci5jCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9vc3NsMy1w cm92aWRlci1lcnIuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2gtMTAuMnAxL29zc2wzLXByb3ZpZGVyLWVyci5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODUx MTM1Mzc2ICswMTAwCi1AQCAtMCwwICsxLDEwOCBAQAotKy8qIENDMCBsaWNlbnNlIGFwcGxpZWQs IHNlZSBMSUNFTkNFLm1kICovCi0rCi0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxz dGRsaWIuaD4KLSsjaW5jbHVkZSAib3NzbDMtcHJvdmlkZXItZXJyLmgiCi0rCi0rI2lmZGVmIFdJ VEhfT1BFTlNTTDMKLSsKLStzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgewotKyAgY29uc3Qg T1NTTF9DT1JFX0hBTkRMRSAqY29yZTsKLSsgIE9TU0xfRlVOQ19jb3JlX25ld19lcnJvcl9mbiAq Y29yZV9uZXdfZXJyb3I7Ci0rICBPU1NMX0ZVTkNfY29yZV9zZXRfZXJyb3JfZGVidWdfZm4gKmNv cmVfc2V0X2Vycm9yX2RlYnVnOwotKyAgT1NTTF9GVU5DX2NvcmVfdnNldF9lcnJvcl9mbiAqY29y ZV92c2V0X2Vycm9yOwotK307Ci0rCi0rc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICoKLStw cm92ZXJyX25ld19oYW5kbGUoY29uc3QgT1NTTF9DT1JFX0hBTkRMRSAqY29yZSwgY29uc3QgT1NT TF9ESVNQQVRDSCAqZGlzcGF0Y2gpCi0rewotKyAgLyoKLSsgICAqIGxpYmNyeXB0byBnaXZlcyBw cm92aWRlcnMgdGhlIHRvb2xzIHRvIGNyZWF0ZSBlcnJvciByb3V0aW5lcyBzaW1pbGFyCi0rICAg KiB0byB0aGUgb25lcyBkZWZpbmVkIGluIDxvcGVuc3NsL2Vyci5oPgotKyAgICovCi0rICBPU1NM X0ZVTkNfY29yZV9uZXdfZXJyb3JfZm4gKmNfbmV3X2Vycm9yID0gTlVMTDsKLSsgIE9TU0xfRlVO Q19jb3JlX3NldF9lcnJvcl9kZWJ1Z19mbiAqY19zZXRfZXJyb3JfZGVidWcgPSBOVUxMOwotKyAg T1NTTF9GVU5DX2NvcmVfdnNldF9lcnJvcl9mbiAqY192c2V0X2Vycm9yID0gTlVMTDsKLSsgIHN0 cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlID0gTlVMTDsKLSsKLSsgIGFzc2VydChj b3JlICE9IE5VTEwpOwotKyAgYXNzZXJ0KGRpc3BhdGNoICE9IE5VTEwpOwotKwotKyNpZm5kZWYg REVCVUcKLSsgIGlmIChjb3JlID09IE5VTEwgfHwgZGlzcGF0Y2ggPT0gTlVMTCkKLSsgICAgcmV0 dXJuIE5VTEw7Ci0rI2VuZGlmCi0rCi0rICBmb3IgKDsgZGlzcGF0Y2gtPmZ1bmN0aW9uX2lkICE9 IDA7IGRpc3BhdGNoKyspCi0rICAgIHN3aXRjaCAoZGlzcGF0Y2gtPmZ1bmN0aW9uX2lkKSB7Ci0r ICAgIGNhc2UgT1NTTF9GVU5DX0NPUkVfTkVXX0VSUk9SOgotKyAgICAgIGNfbmV3X2Vycm9yID0g T1NTTF9GVU5DX2NvcmVfbmV3X2Vycm9yKGRpc3BhdGNoKTsKLSsgICAgICBicmVhazsKLSsgICAg Y2FzZSBPU1NMX0ZVTkNfQ09SRV9TRVRfRVJST1JfREVCVUc6Ci0rICAgICAgY19zZXRfZXJyb3Jf ZGVidWcgPSBPU1NMX0ZVTkNfY29yZV9zZXRfZXJyb3JfZGVidWcoZGlzcGF0Y2gpOwotKyAgICAg IGJyZWFrOwotKyAgICBjYXNlIE9TU0xfRlVOQ19DT1JFX1ZTRVRfRVJST1I6Ci0rICAgICAgY192 c2V0X2Vycm9yID0gT1NTTF9GVU5DX2NvcmVfdnNldF9lcnJvcihkaXNwYXRjaCk7Ci0rICAgICAg YnJlYWs7Ci0rICAgIH0KLSsKLSsgIGFzc2VydChjX25ld19lcnJvciAhPSBOVUxMKTsKLSsgIGFz c2VydChjX3NldF9lcnJvcl9kZWJ1ZyAhPSBOVUxMKTsKLSsgIGFzc2VydChjX3ZzZXRfZXJyb3Ig IT0gTlVMTCk7Ci0rCi0rI2lmZGVmIE5ERUJVRwotKyAgaWYgKGNfbmV3X2Vycm9yID09IE5VTEwg fHwgY19zZXRfZXJyb3JfZGVidWcgPT0gTlVMTCB8fCBjX3ZzZXRfZXJyb3IgPT0gTlVMTCkKLSsg ICAgcmV0dXJuIE5VTEw7Ci0rI2VuZGlmCi0rCi0rICBpZiAoKGhhbmRsZSA9IG1hbGxvYyhzaXpl b2YoKmhhbmRsZSkpKSAhPSBOVUxMKSB7Ci0rICAgIGhhbmRsZS0+Y29yZSA9IGNvcmU7Ci0rICAg IGhhbmRsZS0+Y29yZV9uZXdfZXJyb3IgPSBjX25ld19lcnJvcjsKLSsgICAgaGFuZGxlLT5jb3Jl X3NldF9lcnJvcl9kZWJ1ZyA9IGNfc2V0X2Vycm9yX2RlYnVnOwotKyAgICBoYW5kbGUtPmNvcmVf dnNldF9lcnJvciA9IGNfdnNldF9lcnJvcjsKLSsgIH0KLSsgIHJldHVybiBoYW5kbGU7Ci0rfQot KwotK3N0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCi0rcHJvdmVycl9kdXBfaGFuZGxlKHN0 cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqc3JjKQotK3sKLSsgIHN0cnVjdCBwcm92ZXJyX2Z1 bmN0aW9uc19zdCAqZHN0ID0gTlVMTDsKLSsKLSsgIGlmIChzcmMgIT0gTlVMTAotKyAgICAgICYm IChkc3QgPSBtYWxsb2Moc2l6ZW9mKCpkc3QpKSkgIT0gTlVMTCkgewotKyAgICBkc3QtPmNvcmUg PSBzcmMtPmNvcmU7Ci0rICAgIGRzdC0+Y29yZV9uZXdfZXJyb3IgPSBzcmMtPmNvcmVfbmV3X2Vy cm9yOwotKyAgICBkc3QtPmNvcmVfc2V0X2Vycm9yX2RlYnVnID0gc3JjLT5jb3JlX3NldF9lcnJv cl9kZWJ1ZzsKLSsgICAgZHN0LT5jb3JlX3ZzZXRfZXJyb3IgPSBzcmMtPmNvcmVfdnNldF9lcnJv cjsKLSsgIH0KLSsgIHJldHVybiBkc3Q7Ci0rfQotKwotK3ZvaWQgcHJvdmVycl9mcmVlX2hhbmRs ZShzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmhhbmRsZSkKLSt7Ci0rICBmcmVlKGhhbmRs ZSk7Ci0rfQotKwotK3ZvaWQgcHJvdmVycl9uZXdfZXJyb3IoY29uc3Qgc3RydWN0IHByb3ZlcnJf ZnVuY3Rpb25zX3N0ICpoYW5kbGUpCi0rewotKyAgaGFuZGxlLT5jb3JlX25ld19lcnJvcihoYW5k bGUtPmNvcmUpOwotK30KLSsKLSt2b2lkIHByb3ZlcnJfc2V0X2Vycm9yX2RlYnVnKGNvbnN0IHN0 cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMpCi0r ewotKyAgaGFuZGxlLT5jb3JlX3NldF9lcnJvcl9kZWJ1ZyhoYW5kbGUtPmNvcmUsIGZpbGUsIGxp bmUsIGZ1bmMpOwotK30KLSsKLSt2b2lkIHByb3ZlcnJfc2V0X2Vycm9yKGNvbnN0IHN0cnVjdCBw cm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlLAotKyAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgcmVhc29uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLSt7Ci0rICB2YV9saXN0IGFwOwot KwotKyAgdmFfc3RhcnQoYXAsIGZtdCk7Ci0rICBoYW5kbGUtPmNvcmVfdnNldF9lcnJvcihoYW5k bGUtPmNvcmUsIHJlYXNvbiwgZm10LCBhcCk7Ci0rICB2YV9lbmQoYXApOwotK30KLSsKLSsjZW5k aWYgLyogV0lUSF9PUEVOU1NMMyAqLwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvb3Nz bDMtcHJvdmlkZXItZXJyLmggb3BlbnNzaC0xMC4ycDEvb3NzbDMtcHJvdmlkZXItZXJyLmgKLS0t LSBvcGVuc3NoLTEwLjJwMS5vcmlnL29zc2wzLXByb3ZpZGVyLWVyci5oCTE5NzAtMDEtMDEgMDE6 MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvb3NzbDMtcHJvdmlkZXIt ZXJyLmgJMjAyNi0wMy0xOCAxNToxMzoxNy44NTExNjk3MjQgKzAxMDAKLUBAIC0wLDAgKzEsNzMg QEAKLSsvKiBDQzAgbGljZW5zZSBhcHBsaWVkLCBzZWUgTElDRU5DRS5tZCAqLwotKwotKyNpbmNs dWRlICJpbmNsdWRlcy5oIgotKyNpZmRlZiBXSVRIX09QRU5TU0wzCi0rI2luY2x1ZGUgPHN0ZGlu dC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NvcmUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jb3Jl X2Rpc3BhdGNoLmg+Ci0rCi0rLyoKLSsgKiBUaGUgaWRlYSB3aXRoIHRoaXMgbGlicmFyeSBpcyB0 byByZXBsYWNlIE9wZW5TU0wncyBFUlJfcmFpc2UoKSBhbmQKLSsgKiBFUlJfcmFpc2VfZGF0YSgp IHdpdGggdmFyaWFudHMgdGhhdCBhcmUgbW9yZSBzdWl0YWJsZSBmb3IgcHJvdmlkZXJzIHRoYXQK LSsgKiBoYXZlIHRoZWlyIG93biBlcnJvciByZWFzb24gdGFibGUuCi0rICoKLSsgKiBUaGlzIGFz c3VtZXMgdmFyaWFkaWMgZnVuY3Rpb24tbGlrZSBtYWNyb3MsIGkuZS4gQzk5IG9yIG5ld2VyLgot KyAqCi0rICogQSBtaW5pbWFsIGFtb3VudCBvZiBwcmVwYXJhdGlvbiBpcyBuZWVkZWQgb24gcHJv dmlkZXIgaW5pdGlhbGl6YXRpb24gYW5kCi0rICogdGFrZWRvd246Ci0rICoKLSsgKiAxLiAgVGhl IHByb3ZpZGVyJ3Mgb3V0Z29pbmcgT1NTTF9ESVNQQVRDSCB0YWJsZSBtdXN0IGluY2x1ZGUgYW4g ZW50cnkKLSsgKiAgICAgZ290IE9TU0xfRlVOQ19QUk9WSURFUl9HRVRfUkVBU09OX1NUUklOR1Ms IHdpdGggYSBmdW5jdGlvbiB0aGF0IHJldHVybnMKLSsgKiAgICAgdGhlIHByb3ZpZGVyJ3MgdGFi bGUgb2YgcmVhc29ucy4KLSsgKiAgICAgVGhhdCB0YWJsZSBvZiByZWFzb25zIGlzIGEgc2ltcGxl IE9TU0xfSVRFTSBhcnJheSwgd2hlcmUgZWFjaCBlbGVtZW50Ci0rICogICAgIGNvbnRhaW5zIGEg bnVtZXJpYyByZWFzb24gaWRlbnRpdHkgZm9yIHRoZSByZWFzb24sIGFuZCB0aGUgZGVzY3JpcHRp b24KLSsgKiAgICAgdGV4dCBzdHJpbmcgZm9yIHRoYXQgcmVhc29uLgotKyAqICAgICBFYWNoIG51 bWVyaWMgcmVhc29uIGlkZW50aXR5IE1VU1QgYmUgdW5pcXVlIHdpdGhpbiB0aGlzIGFycmF5Lgot KyAqCi0rICogMi4gIE9uIHByb3ZpZGVyIGluaXRpYWxpemF0aW9uLCBhbiBlcnJvciBoYW5kbGUg bXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0rICogICAgIHByb3ZlcnJfbmV3X2hhbmRsZSgpLiAgVGhl IHJldHVybmVkIHBvaW50ZXIgaXMgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50Ci0rICogICAgIHRv IEVSUl9yYWlzZSgpIGFuZCBFUlJfcmFpc2VfZGF0YSgpLgotKyAqCi0rICogMy4gIE9uIHByb3Zp ZGVyIHRha2Vkb3duLCB0aGUgZXJyb3IgaGFuZGxlIG11c3QgYmUgZnJlZWQsIHVzaW5nCi0rICog ICAgIHByb3ZlcnJfZnJlZV9oYW5kbGUoKS4KLSsgKgotKyAqIFdpdGggdGhpcyBwcmVwYXJhdGlv biwgdGhlIHByb3ZpZGVyIGNvZGUgY2FuIHVzZSBFUlJfcmFpc2UoKSBhbmQKLSsgKiBFUlJfcmFp c2VfZGF0YSgpICJhcyB1c3VhbCIsIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBmaXJzdCBh cmd1bWVudCBpcwotKyAqIHRoZSBlcnJvciBoYW5kbGUgaW5zdGVhZCBvZiBvbmUgb2YgdGhlIE9w ZW5TU0wgRVJSX0xJQl8gbWFjcm9zLgotKyAqLwotKwotKy8qCi0rICogSW4gY2FzZSA8b3BlbnNz bC9lcnIuaD4gd2FzIGluY2x1ZGVkLCB3ZSB0aHJvdyBhd2F5IGl0cyBlcnJvciByZWNvcmRpbmcK LSsgKiBtYWNyb3MuCi0rICogTm90ZSB0aGF0IEVSUl9wdXRfZXJyb3IoKSBpcyBOT1QgcmVjcmVh dGVkLiAgSXQncyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90Ci0rICogYmUgdXNlZCBhbnkgbW9y ZS4KLSsgKi8KLSsjdW5kZWYgRVJSX3B1dF9lcnJvcgotKyN1bmRlZiBFUlJfcmFpc2UKLSsjdW5k ZWYgRVJSX3JhaXNlX2RhdGEKLSsKLSsjZGVmaW5lIEVSUl9yYWlzZShoYW5kbGUsIHJlYXNvbikg RVJSX3JhaXNlX2RhdGEoKGhhbmRsZSksKHJlYXNvbiksTlVMTCkKLSsKLSsjZGVmaW5lIEVSUl9y YWlzZV9kYXRhKGhhbmRsZSwgcmVhc29uLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgKHByb3ZlcnJfbmV3X2Vycm9yKGhhbmRsZSksICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgcHJvdmVycl9zZXRfZXJyb3JfZGVi dWcoaGFuZGxlLCBPUEVOU1NMX0ZJTEUsT1BFTlNTTF9MSU5FLE9QRU5TU0xfRlVOQyksIFwKLSsg ICBwcm92ZXJyX3NldF9lcnJvcihoYW5kbGUsIHJlYXNvbiwgX19WQV9BUkdTX18pKQotKwotKy8q Ci0rICogVGhlIHN0cnVjdHVyZSB3aGVyZSB0aGUgbGliY3J5cHRvIGNvcmUgaGFuZGxlIGFuZCBj b3JlIGZ1bmN0aW9ucyBhcmUKLSsgKiBjYXB0dXJlZC4KLSsgKi8KLStzdHJ1Y3QgcHJvdmVycl9m dW5jdGlvbnNfc3Q7Ci0rCi0rc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICoKLStwcm92ZXJy X25ld19oYW5kbGUoY29uc3QgT1NTTF9DT1JFX0hBTkRMRSAqY29yZSwgY29uc3QgT1NTTF9ESVNQ QVRDSCAqaW4pOwotK3N0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCi0rcHJvdmVycl9kdXBf aGFuZGxlKHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqc3JjKTsKLSt2b2lkIHByb3ZlcnJf ZnJlZV9oYW5kbGUoc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpoYW5kbGUpOwotKwotK3Zv aWQgcHJvdmVycl9uZXdfZXJyb3IoY29uc3Qgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpo YW5kbGUpOwotK3ZvaWQgcHJvdmVycl9zZXRfZXJyb3JfZGVidWcoY29uc3Qgc3RydWN0IHByb3Zl cnJfZnVuY3Rpb25zX3N0ICpoYW5kbGUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYyk7Ci0rdm9pZCBwcm92 ZXJyX3NldF9lcnJvcihjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmhhbmRsZSwK LSsgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlYXNvbiwgY29uc3QgY2hhciAqZm10 LCAuLi4pOwotKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wzICovCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4ycDEub3JpZy9wYWNrZXQuYyBvcGVuc3NoLTEwLjJwMS9wYWNrZXQuYwotLS0tIG9wZW5zc2gt MTAuMnAxLm9yaWcvcGFja2V0LmMJMjAyNi0wMy0xOCAxNToxMjowMS43MzQ5MDUxNTYgKzAxMDAK LSsrKyBvcGVuc3NoLTEwLjJwMS9wYWNrZXQuYwkyMDI2LTAzLTE4IDE3OjQzOjAwLjU1OTc0Mjg2 MyArMDEwMAotQEAgLTU5LDYgKzU5LDkgQEAKLSAjaW5jbHVkZSA8cG9sbC5oPgotICNpbmNsdWRl IDxzaWduYWwuaD4KLSAjaW5jbHVkZSA8dGltZS5oPgotKyNpZmRlZiBIQVZFX1VUSUxfSAotKyMg aW5jbHVkZSA8dXRpbC5oPgotKyNlbmRpZgotIAotIC8qCi0gICogRXhwbGljaXRseSBpbmNsdWRl IE9wZW5TU0wgYmVmb3JlIHpsaWIgYXMgc29tZSB2ZXJzaW9ucyBvZiBPcGVuU1NMIGhhdmUKLUBA IC0xMDAsNyArMTAzLDIwIEBACi0gI2RlZmluZSBEQkcoeCkKLSAjZW5kaWYKLSAKLS0jZGVmaW5l IFBBQ0tFVF9NQVhfU0laRSAoMjU2ICogMTAyNCkKLSsvKiBPcGVuU1NIIHVzaW5ncyAyNTZLQiBw YWNrZXQgc2l6ZSBtYXggYnV0IHRoYXQgY29uc3VtZXMgYQotKyAqIGxvdCBvZiBtZW1vcnkgd2l0 aCB0aGUgYnVmZmVycyB3ZSBhcmUgdXNpbmcuIEhvd2V2ZXIsIHdlIG5lZWQKLSsgKiBhIGxhcmdl IHBhY2tldCBzaXplIGlmIHRoZSBiYW5uZXIgdGhhdCdzIGJlaW5nIHNlbnQgaXMgbGFyZ2UuCi0r ICogU28gd2UgbmVlZCBhIDI1NktCIHBhY2tldCBwcmUgYXV0aGVudGljYXRpb24gYW5kIGEgc21h bGxlciBvbmUKLSsgKiBpbiB0aGlzIGNhc2UgU1NIX0lPQlVGU1ogKyAxS0IsIGFmdGVyd2FyZHMu IFNvIHdlIGNoYW5nZQotKyAqIFBBQ0tFVF9NQVhfU0laRSBmcm9tIGEgI2RlZmluZSB0byBhIGds b2JhbC4gVGhlbiwgaW4gdGhlIGZ1bmN0aW9uCi0rICogc3NoX3BhY2tldF9zZXRfYXV0aGVudGNh dGVkIHdlIHJlZHVjZSB0aGUgc2l6ZSB0byBzb21ldGhpbmcKLSsgKiBtb3JlIG1lbW9yeSBlZmZp Y2llbnQuIC1janIgMDQvMDcvMjMKLSsgKi8KLSt1X2ludCBwYWNrZXRfbWF4X3NpemUgPSAyNTYg KiAxMDI0OwotKwotKy8qIGdsb2JhbCB0byBzdXBwb3J0IGZvcmNlZCByZWtleWluZyAqLwotK2lu dCByZWtleV9yZXF1ZXN0ZWQgPSAwOwotKwotIAotIHN0cnVjdCBwYWNrZXRfc3RhdGUgewotIAl1 X2ludDMyX3Qgc2VxbnI7Ci1AQCAtMjQ2LDEyICsyNjIsMjMgQEAKLSAJICAgIChzdGF0ZS0+b3V0 Z29pbmdfcGFja2V0ID0gc3NoYnVmX25ldygpKSA9PSBOVUxMIHx8Ci0gCSAgICAoc3RhdGUtPmlu Y29taW5nX3BhY2tldCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSAJCWdvdG8gZmFpbDsKLSsJ LyogdGhlc2UgYnVmZmVycyBhcmUgaW1wb3J0YW50IGluIHRlcm1zIG9mIHRyYWNraW5nIGJ1ZmZl ciB1c2FnZQotKwkgKiBzbyB3ZSBleHBsaWNpdGx5IGxhYmVsIGFuZCB0eXBlIHRoZW0gd2l0aCBk ZXNjcmlwdGl2ZSBuYW1lcyAqLwotKwlzc2hidWZfcmVsYWJlbChzdGF0ZS0+aW5wdXQsICJpbnB1 dCIpOwotKwlzc2hidWZfdHlwZShzdGF0ZS0+aW5wdXQsIEJVRl9QQUNLRVRfSU5QVVQpOwotKwlz c2hidWZfcmVsYWJlbChzdGF0ZS0+aW5jb21pbmdfcGFja2V0LCAiaW5wYWNrZXQiKTsKLSsJc3No YnVmX3R5cGUoc3RhdGUtPmluY29taW5nX3BhY2tldCwgQlVGX1BBQ0tFVF9JTkNPTUlORyk7Ci0r CXNzaGJ1Zl9yZWxhYmVsKHN0YXRlLT5vdXRwdXQsICJvdXRwdXQiKTsKLSsJc3NoYnVmX3R5cGUo c3RhdGUtPm91dHB1dCwgQlVGX1BBQ0tFVF9PVVRQVVQpOwotKwlzc2hidWZfcmVsYWJlbChzdGF0 ZS0+b3V0Z29pbmdfcGFja2V0LCAib3V0cGFja2V0Iik7Ci0rCXNzaGJ1Zl90eXBlKHN0YXRlLT5v dXRnb2luZ19wYWNrZXQsIEJVRl9QQUNLRVRfT1VUR09JTkcpOwotKwotIAlUQUlMUV9JTklUKCZz dGF0ZS0+b3V0Z29pbmcpOwotIAlUQUlMUV9JTklUKCZzc2gtPnByaXZhdGVfa2V5cyk7Ci0gCVRB SUxRX0lOSVQoJnNzaC0+cHVibGljX2tleXMpOwotIAlzdGF0ZS0+Y29ubmVjdGlvbl9pbiA9IC0x OwotIAlzdGF0ZS0+Y29ubmVjdGlvbl9vdXQgPSAtMTsKLS0Jc3RhdGUtPm1heF9wYWNrZXRfc2l6 ZSA9IDMyNzY4OwotKwlzdGF0ZS0+bWF4X3BhY2tldF9zaXplID0gQ0hBTl9TRVNfUEFDS0VUX0RF RkFVTFQ7Ci0gCXN0YXRlLT5wYWNrZXRfdGltZW91dF9tcyA9IC0xOwotIAlzdGF0ZS0+aW50ZXJh Y3RpdmVfbW9kZSA9IDE7Ci0gCXN0YXRlLT5xb3NfaW50ZXJhY3RpdmUgPSBzdGF0ZS0+cW9zX290 aGVyID0gLTE7Ci1AQCAtMzAxLDcgKzMyOCw3IEBACi0gc3NoX3BhY2tldF9zZXRfY29ubmVjdGlv bihzdHJ1Y3Qgc3NoICpzc2gsIGludCBmZF9pbiwgaW50IGZkX291dCkKLSB7Ci0gCXN0cnVjdCBz ZXNzaW9uX3N0YXRlICpzdGF0ZTsKLS0JY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqbm9uZSA9IGNp cGhlcl9ieV9uYW1lKCJub25lIik7Ci0rCXN0cnVjdCBzc2hjaXBoZXIgKm5vbmUgPSBjaXBoZXJf YnlfbmFtZSgibm9uZSIpOwotIAlpbnQgcjsKLSAKLSAJaWYgKG5vbmUgPT0gTlVMTCkgewotQEAg LTMxOCw5ICszNDUsMTEgQEAKLSAJc3RhdGUtPmNvbm5lY3Rpb25faW4gPSBmZF9pbjsKLSAJc3Rh dGUtPmNvbm5lY3Rpb25fb3V0ID0gZmRfb3V0OwotIAlpZiAoKHIgPSBjaXBoZXJfaW5pdCgmc3Rh dGUtPnNlbmRfY29udGV4dCwgbm9uZSwKLS0JICAgIChjb25zdCB1X2NoYXIgKikiIiwgMCwgTlVM TCwgMCwgQ0lQSEVSX0VOQ1JZUFQpKSAhPSAwIHx8Ci0rCSAgICAoY29uc3QgdV9jaGFyICopIiIs IDAsIE5VTEwsIDAsIDAsIENJUEhFUl9FTkNSWVBULAotKwkgICAgc3RhdGUtPmFmdGVyX2F1dGhl bnRpY2F0aW9uKSkgIT0gMCB8fAotIAkgICAgKHIgPSBjaXBoZXJfaW5pdCgmc3RhdGUtPnJlY2Vp dmVfY29udGV4dCwgbm9uZSwKLS0JICAgIChjb25zdCB1X2NoYXIgKikiIiwgMCwgTlVMTCwgMCwg Q0lQSEVSX0RFQ1JZUFQpKSAhPSAwKSB7Ci0rCSAgICAoY29uc3QgdV9jaGFyICopIiIsIDAsIE5V TEwsIDAsIDAsIENJUEhFUl9ERUNSWVBULAotKwkgICAgc3RhdGUtPmFmdGVyX2F1dGhlbnRpY2F0 aW9uKSkgIT0gMCkgewotIAkJZXJyb3JfZnIociwgImNpcGhlcl9pbml0IGZhaWxlZCIpOwotIAkJ ZnJlZShzc2gpOyAvKiBYWFggbmVlZCBzc2hfZnJlZV9zZXNzaW9uX3N0YXRlPyAqLwotIAkJcmV0 dXJuIE5VTEw7Ci1AQCAtMzkxLDcgKzQyMCw3IEBACi0gCi0gCWlmIChzdGF0ZS0+cGFja2V0X2Rp c2NhcmRfbWFjKSB7Ci0gCQljaGFyIGJ1ZlsxMDI0XTsKLS0JCXNpemVfdCBkbGVuID0gUEFDS0VU X01BWF9TSVpFOwotKwkJc2l6ZV90IGRsZW4gPSBwYWNrZXRfbWF4X3NpemU7Ci0gCi0gCQlpZiAo ZGxlbiA+IHN0YXRlLT5wYWNrZXRfZGlzY2FyZF9tYWNfYWxyZWFkeSkKLSAJCQlkbGVuIC09IHN0 YXRlLT5wYWNrZXRfZGlzY2FyZF9tYWNfYWxyZWFkeTsKLUBAIC05OTcsNiArMTAyNiw3IEBACi0g CWNvbnN0IGNoYXIgKndtc2c7Ci0gCWludCByLCBjcnlwdF90eXBlOwotIAljb25zdCBjaGFyICpk aXIgPSBtb2RlID09IE1PREVfT1VUID8gIm91dCIgOiAiaW4iOwotKwljaGFyIGJsb2Nrc19zW0ZN VF9TQ0FMRURfU1RSU0laRV0sIGJ5dGVzX3NbRk1UX1NDQUxFRF9TVFJTSVpFXTsKLSAKLSAJZGVi dWcyX2YoIm1vZGUgJWQiLCBtb2RlKTsKLSAKLUBAIC0xMDM1LDEyICsxMDY1LDMyIEBACi0gCQlp ZiAoKHIgPSBtYWNfaW5pdChtYWMpKSAhPSAwKQotIAkJCXJldHVybiByOwotIAl9Ci0tCW1hYy0+ ZW5hYmxlZCA9IDE7Ci0rCi0rCS8qIGlmIHdlIGFyZSB1c2luZyBOT05FIE1BQyB0aGVuIHdlIGRv bid0IG5lZWQgdG8gZW5hYmxlIHRoZQotKwkgKiBtYWMgcm91dGluZXMuIFRoaXMgZGlzYWJsZXMg dGhlbSBhbmQgd2UgY2FuIGNsYXcgYmFjayBzb21lIGN5Y2xlcwotKwkgKiBmcm9tIHRoZSBDUFUg LWNqciAzLzIxLzIwMjMgKi8KLSsJaWYgKHNzaC0+bm9uZV9tYWMgIT0gMSkKLSsJCW1hYy0+ZW5h YmxlZCA9IDE7Ci0rCi0gCURCRyhkZWJ1Z19mKCJjaXBoZXJfaW5pdDogJXMiLCBkaXIpKTsKLSAJ Y2lwaGVyX2ZyZWUoKmNjcCk7Ci0gCSpjY3AgPSBOVUxMOwotKyNpZmRlZiBXSVRIX09QRU5TU0wK LSsJaWYgKHN0cmNtcChlbmMtPm5hbWUsICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3Jn IikgPT0gMCkgewotKwkJaWYgKHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbikKLSsJCQllbmMt PmNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKAotKwkJCSAgICAiY2hhY2hhMjAtcG9seTEzMDUtbXRA aHBuc3NoLm9yZyIpOwotKwkJZWxzZQotKwkJCWVuYy0+Y2lwaGVyID0gY2lwaGVyX2J5X25hbWUo Ci0rCQkJICAgICJjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSIpOwotKwkJaWYgKGVuYy0+ Y2lwaGVyID09IE5VTEwpCi0rCQkJcmV0dXJuIHI7Ci0rCX0KLSsjZW5kaWYKLSAJaWYgKChyID0g Y2lwaGVyX2luaXQoY2NwLCBlbmMtPmNpcGhlciwgZW5jLT5rZXksIGVuYy0+a2V5X2xlbiwKLS0J ICAgIGVuYy0+aXYsIGVuYy0+aXZfbGVuLCBjcnlwdF90eXBlKSkgIT0gMCkKLSsJICAgIGVuYy0+ aXYsIGVuYy0+aXZfbGVuLAotKwkgICAgY3J5cHRfdHlwZSA/IHN0YXRlLT5wX3NlbmQuc2VxbnIg OiBzdGF0ZS0+cF9yZWFkLnNlcW5yLAotKwkgICAgY3J5cHRfdHlwZSwgc3RhdGUtPmFmdGVyX2F1 dGhlbnRpY2F0aW9uKSkgIT0gMCkKLSAJCXJldHVybiByOwotIAlpZiAoIXN0YXRlLT5jaXBoZXJf d2FybmluZ19kb25lICYmCi0gCSAgICAod21zZyA9IGNpcGhlcl93YXJuaW5nX21lc3NhZ2UoKmNj cCkpICE9IE5VTEwpIHsKLUBAIC0xMDY0LDIzICsxMTE0LDQ1IEBACi0gCQl9Ci0gCQljb21wLT5l bmFibGVkID0gMTsKLSAJfQotLQkvKgotLQkgKiBUaGUgMl4oYmxvY2tzaXplKjIpIGxpbWl0IGlz IHRvbyBleHBlbnNpdmUgZm9yIDNERVMsCi0tCSAqIHNvIGVuZm9yY2UgYSAxR0IgbGltaXQgZm9y IHNtYWxsIGJsb2Nrc2l6ZXMuCi0tCSAqIFNlZSBSRkM0MzQ0IHNlY3Rpb24gMy4yLgotLQkgKi8K LS0JaWYgKGVuYy0+YmxvY2tfc2l6ZSA+PSAxNikKLS0JCSptYXhfYmxvY2tzID0gKHVfaW50NjRf dCkxIDw8IChlbmMtPmJsb2NrX3NpemUqMik7Ci0tCWVsc2UKLS0JCSptYXhfYmxvY2tzID0gKCh1 X2ludDY0X3QpMSA8PCAzMCkgLyBlbmMtPmJsb2NrX3NpemU7Ci0rCi0rCS8qIGdldCB0aGUgbWF4 aW11bSBudW1iZXIgb2YgYmxvY2tzIHRoZSBjaXBoZXIgY2FuCi0rCSAqIGhhbmRsZSBzYWZlbHkg Ki8KLSsJKm1heF9ibG9ja3MgPSBjaXBoZXJfcmVrZXlfYmxvY2tzKGVuYy0+Y2lwaGVyKTsKLSsK LSsJLyogaWYgd2UgaGF2ZSBhIGN1c3RvbSBvUmVrZXlMaW1pdCB1c2UgdGhhdC4gKi8KLSAJaWYg KHN0YXRlLT5yZWtleV9saW1pdCkKLSAJCSptYXhfYmxvY2tzID0gTUlOSU1VTSgqbWF4X2Jsb2Nr cywKLSAJCSAgICBzdGF0ZS0+cmVrZXlfbGltaXQgLyBlbmMtPmJsb2NrX3NpemUpOwotLQlkZWJ1 ZygicmVrZXkgJXMgYWZ0ZXIgJWxsdSBibG9ja3MiLCBkaXIsCi0tCSAgICAodW5zaWduZWQgbG9u ZyBsb25nKSptYXhfYmxvY2tzKTsKLSsKLSsJLyogdGhlc2UgbGluZXMgc3VwcG9ydCB0aGUgZGVi dWcgKi8KLSsJc3RybGNweShibG9ja3NfcywgIj8iLCBzaXplb2YoYmxvY2tzX3MpKTsKLSsJc3Ry bGNweShieXRlc19zLCAiPyIsIHNpemVvZihieXRlc19zKSk7Ci0rCWlmICgqbWF4X2Jsb2NrcyAq IGVuYy0+YmxvY2tfc2l6ZSA8IExMT05HX01BWCkgewotKwkJZm10X3NjYWxlZCgobG9uZyBsb25n KSptYXhfYmxvY2tzLCBibG9ja3Nfcyk7Ci0rCQlmbXRfc2NhbGVkKChsb25nIGxvbmcpKm1heF9i bG9ja3MgKiBlbmMtPmJsb2NrX3NpemUsIGJ5dGVzX3MpOwotKwl9Ci0rCWRlYnVnKCJyZWtleSAl cyBhZnRlciAlcyBibG9ja3MgLyAlc0IgZGF0YSIsIGRpciwgYmxvY2tzX3MsIGJ5dGVzX3MpOwot KwotIAlyZXR1cm4gMDsKLSB9Ci0gCi0rLyogdGhpcyBzdXBwb3J0cyB0aGUgZm9yY2VkIHJla2V5 aW5nIHJlcXVpcmVkIGZvciB0aGUgTk9ORSBjaXBoZXIgKi8KLSt2b2lkCi0rcGFja2V0X3JlcXVl c3RfcmVrZXlpbmcodm9pZCkKLSt7Ci0rCXJla2V5X3JlcXVlc3RlZCA9IDE7Ci0rfQotKwotKy8q IHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHByZSBvciBwb3N0IGF1dGggd2hlbiByZWtleWluZyBmb3Ig YWVzLWN0cgotKyAqIGFuZCBub25lIGNpcGhlciBzd2l0Y2ggKi8KLStpbnQKLStwYWNrZXRfYXV0 aGVudGljYXRpb25fc3RhdGUoY29uc3Qgc3RydWN0IHNzaCAqc3NoKQotK3sKLSsJc3RydWN0IHNl c3Npb25fc3RhdGUgKnN0YXRlID0gc3NoLT5zdGF0ZTsKLSsKLSsJcmV0dXJuIHN0YXRlLT5hZnRl cl9hdXRoZW50aWNhdGlvbjsKLSt9Ci0rCi0gI2RlZmluZSBNQVhfUEFDS0VUUwkoMVU8PDMxKQot IHN0YXRpYyBpbnQKLSBzc2hfcGFja2V0X25lZWRfcmVrZXlpbmcoc3RydWN0IHNzaCAqc3NoLCB1 X2ludCBvdXRib3VuZF9wYWNrZXRfbGVuKQotQEAgLTExMDcsNiArMTE3OSwxNCBAQAotIAlpZiAo c3RhdGUtPnBfc2VuZC5wYWNrZXRzID09IDAgJiYgc3RhdGUtPnBfcmVhZC5wYWNrZXRzID09IDAp Ci0gCQlyZXR1cm4gMDsKLSAKLSsgICAgICAgIC8qIHVzZWQgdG8gZm9yY2UgcmVrZXlpbmcgd2hl biBjYWxsZWQgZm9yIGJ5IHRoZSBub25lCi0rICAgICAgICAgKiBjaXBoZXIgc3dpdGNoIGFuZCBh ZXMtbXQtY3RyIG1ldGhvZHMgLWNqciAqLwotKyAgICAgICAgaWYgKHJla2V5X3JlcXVlc3RlZCA9 PSAxKSB7Ci0rCQlkZWJ1Z19mKCJHb3QgdGhlIHJla2V5IHJlcXVlc3QiKTsKLSsJCXJla2V5X3Jl cXVlc3RlZCA9IDA7Ci0rICAgICAgICAgICAgICAgIHJldHVybiAxOwotKyAgICAgICAgfQotKwot IAkvKiBUaW1lLWJhc2VkIHJla2V5aW5nICovCi0gCWlmIChzdGF0ZS0+cmVrZXlfaW50ZXJ2YWwg IT0gMCAmJgotIAkgICAgKGludDY0X3Qpc3RhdGUtPnJla2V5X3RpbWUgKyBzdGF0ZS0+cmVrZXlf aW50ZXJ2YWwgPD0gbW9ub3RpbWUoKSkKLUBAIC0xNDY1LDcgKzE1NDUsNyBAQAotIAlzdHJ1Y3Qg c2Vzc2lvbl9zdGF0ZSAqc3RhdGUgPSBzc2gtPnN0YXRlOwotIAlpbnQgbGVuLCByLCBtc19yZW1h aW4gPSAwOwotIAlzdHJ1Y3QgcG9sbGZkIHBmZDsKLS0JY2hhciBidWZbODE5Ml07Ci0rCWNoYXIg YnVmW1NTSF9JT0JVRlNaXTsKLSAJc3RydWN0IHRpbWV2YWwgc3RhcnQ7Ci0gCXN0cnVjdCB0aW1l c3BlYyB0aW1lc3BlYywgKnRpbWVzcGVjcCA9IE5VTEw7Ci0gCi1AQCAtMTU2OSw3ICsxNjQ5LDcg QEAKLSAJCQlyZXR1cm4gMDsgLyogcGFja2V0IGlzIGluY29tcGxldGUgKi8KLSAJCXN0YXRlLT5w YWNrbGVuID0gUEVFS19VMzIoY3ApOwotIAkJaWYgKHN0YXRlLT5wYWNrbGVuIDwgNCArIDEgfHwK LS0JCSAgICBzdGF0ZS0+cGFja2xlbiA+IFBBQ0tFVF9NQVhfU0laRSkKLSsJCSAgICBzdGF0ZS0+ cGFja2xlbiA+IHBhY2tldF9tYXhfc2l6ZSkKLSAJCQlyZXR1cm4gU1NIX0VSUl9NRVNTQUdFX0lO Q09NUExFVEU7Ci0gCX0KLSAJbmVlZCA9IHN0YXRlLT5wYWNrbGVuICsgNDsKLUBAIC0xNjI4LDcg KzE3MDgsNyBAQAotIAkJICAgIHNzaGJ1Zl9wdHIoc3RhdGUtPmlucHV0KSwgc3NoYnVmX2xlbihz dGF0ZS0+aW5wdXQpKSAhPSAwKQotIAkJCXJldHVybiAwOwotIAkJaWYgKHN0YXRlLT5wYWNrbGVu IDwgMSArIDQgfHwKLS0JCSAgICBzdGF0ZS0+cGFja2xlbiA+IFBBQ0tFVF9NQVhfU0laRSkgewot KwkJICAgIHN0YXRlLT5wYWNrbGVuID4gcGFja2V0X21heF9zaXplKSB7Ci0gI2lmZGVmIFBBQ0tF VF9ERUJVRwotIAkJCXNzaGJ1Zl9kdW1wKHN0YXRlLT5pbnB1dCwgc3RkZXJyKTsKLSAjZW5kaWYK LUBAIC0xNjU1LDcgKzE3MzUsNyBAQAotIAkJCWdvdG8gb3V0OwotIAkJc3RhdGUtPnBhY2tsZW4g PSBQRUVLX1UzMihzc2hidWZfcHRyKHN0YXRlLT5pbmNvbWluZ19wYWNrZXQpKTsKLSAJCWlmIChz dGF0ZS0+cGFja2xlbiA8IDEgKyA0IHx8Ci0tCQkgICAgc3RhdGUtPnBhY2tsZW4gPiBQQUNLRVRf TUFYX1NJWkUpIHsKLSsJCSAgICBzdGF0ZS0+cGFja2xlbiA+IHBhY2tldF9tYXhfc2l6ZSkgewot ICNpZmRlZiBQQUNLRVRfREVCVUcKLSAJCQlmcHJpbnRmKHN0ZGVyciwgImlucHV0OiBcbiIpOwot IAkJCXNzaGJ1Zl9kdW1wKHN0YXRlLT5pbnB1dCwgc3RkZXJyKTsKLUBAIC0xNjY0LDcgKzE3NDQs NyBAQAotICNlbmRpZgotIAkJCWxvZ2l0KCJCYWQgcGFja2V0IGxlbmd0aCAldS4iLCBzdGF0ZS0+ cGFja2xlbik7Ci0gCQkJcmV0dXJuIHNzaF9wYWNrZXRfc3RhcnRfZGlzY2FyZChzc2gsIGVuYywg bWFjLCAwLAotLQkJCSAgICBQQUNLRVRfTUFYX1NJWkUpOwotKwkJCSAgICBwYWNrZXRfbWF4X3Np emUpOwotIAkJfQotIAkJaWYgKChyID0gc3NoYnVmX2NvbnN1bWUoc3RhdGUtPmlucHV0LCBibG9j a19zaXplKSkgIT0gMCkKLSAJCQlnb3RvIG91dDsKLUBAIC0xNjg3LDcgKzE3NjcsNyBAQAotIAkJ bG9naXQoInBhZGRpbmcgZXJyb3I6IG5lZWQgJWQgYmxvY2sgJWQgbW9kICVkIiwKLSAJCSAgICBu ZWVkLCBibG9ja19zaXplLCBuZWVkICUgYmxvY2tfc2l6ZSk7Ci0gCQlyZXR1cm4gc3NoX3BhY2tl dF9zdGFydF9kaXNjYXJkKHNzaCwgZW5jLCBtYWMsIDAsCi0tCQkgICAgUEFDS0VUX01BWF9TSVpF IC0gYmxvY2tfc2l6ZSk7Ci0rCQkgICAgcGFja2V0X21heF9zaXplIC0gYmxvY2tfc2l6ZSk7Ci0g CX0KLSAJLyoKLSAJICogY2hlY2sgaWYgdGhlIGVudGlyZSBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2 ZWQgYW5kCi1AQCAtMTczMSwxMSArMTgxMSwxMSBAQAotIAkJCWlmIChyICE9IFNTSF9FUlJfTUFD X0lOVkFMSUQpCi0gCQkJCWdvdG8gb3V0OwotIAkJCWxvZ2l0KCJDb3JydXB0ZWQgTUFDIG9uIGlu cHV0LiIpOwotLQkJCWlmIChuZWVkICsgYmxvY2tfc2l6ZSA+IFBBQ0tFVF9NQVhfU0laRSkKLSsJ CQlpZiAobmVlZCArIGJsb2NrX3NpemUgPiBwYWNrZXRfbWF4X3NpemUpCi0gCQkJCXJldHVybiBT U0hfRVJSX0lOVEVSTkFMX0VSUk9SOwotIAkJCXJldHVybiBzc2hfcGFja2V0X3N0YXJ0X2Rpc2Nh cmQoc3NoLCBlbmMsIG1hYywKLSAJCQkgICAgc3NoYnVmX2xlbihzdGF0ZS0+aW5jb21pbmdfcGFj a2V0KSwKLS0JCQkgICAgUEFDS0VUX01BWF9TSVpFIC0gbmVlZCAtIGJsb2NrX3NpemUpOwotKwkJ CSAgICBwYWNrZXRfbWF4X3NpemUgLSBuZWVkIC0gYmxvY2tfc2l6ZSk7Ci0gCQl9Ci0gCQkvKiBS ZW1vdmUgTUFDIGZyb20gaW5wdXQgYnVmZmVyICovCi0gCQlEQkcoZGVidWcoIk1BQyAjJWQgb2si LCBzdGF0ZS0+cF9yZWFkLnNlcW5yKSk7Ci1AQCAtMTk1OCw3ICsyMDM4LDcgQEAKLSAJaW50IHI7 Ci0gCXNpemVfdCBybGVuOwotIAotLQlpZiAoKHIgPSBzc2hidWZfcmVhZChmZCwgc3RhdGUtPmlu cHV0LCBQQUNLRVRfTUFYX1NJWkUsICZybGVuKSkgIT0gMCkKLSsJaWYgKChyID0gc3NoYnVmX3Jl YWQoZmQsIHN0YXRlLT5pbnB1dCwgcGFja2V0X21heF9zaXplLCAmcmxlbikpICE9IDApCi0gCQly ZXR1cm4gcjsKLSAKLSAJaWYgKHN0YXRlLT5wYWNrZXRfZGlzY2FyZCkgewotQEAgLTIwMzcsMTcg KzIxMTcsMjEgQEAKLSAJc3dpdGNoIChyKSB7Ci0gCWNhc2UgU1NIX0VSUl9DT05OX0NMT1NFRDoK LSAJCXNzaF9wYWNrZXRfY2xlYXJfa2V5cyhzc2gpOwotKwkJc3NocGt0X2ZpbmFsX2xvZ19lbnRy eShzc2gpOwotIAkJbG9nZGllKCJDb25uZWN0aW9uIGNsb3NlZCBieSAlcyIsIHJlbW90ZV9pZCk7 Ci0gCWNhc2UgU1NIX0VSUl9DT05OX1RJTUVPVVQ6Ci0gCQlzc2hfcGFja2V0X2NsZWFyX2tleXMo c3NoKTsKLSsJCXNzaHBrdF9maW5hbF9sb2dfZW50cnkoc3NoKTsKLSAJCWxvZ2RpZSgiQ29ubmVj dGlvbiAlcyAlcyB0aW1lZCBvdXQiLAotIAkJICAgIHNzaC0+c3RhdGUtPnNlcnZlcl9zaWRlID8g ImZyb20iIDogInRvIiwgcmVtb3RlX2lkKTsKLSAJY2FzZSBTU0hfRVJSX0RJU0NPTk5FQ1RFRDoK LSAJCXNzaF9wYWNrZXRfY2xlYXJfa2V5cyhzc2gpOwotKwkJc3NocGt0X2ZpbmFsX2xvZ19lbnRy eShzc2gpOwotIAkJbG9nZGllKCJEaXNjb25uZWN0ZWQgZnJvbSAlcyIsIHJlbW90ZV9pZCk7Ci0g CWNhc2UgU1NIX0VSUl9TWVNURU1fRVJST1I6Ci0gCQlpZiAoZXJybm8gPT0gRUNPTk5SRVNFVCkg ewotIAkJCXNzaF9wYWNrZXRfY2xlYXJfa2V5cyhzc2gpOwotKwkJCXNzaHBrdF9maW5hbF9sb2df ZW50cnkoc3NoKTsKLSAJCQlsb2dkaWUoIkNvbm5lY3Rpb24gcmVzZXQgYnkgJXMiLCByZW1vdGVf aWQpOwotIAkJfQotIAkJLyogRkFMTFRIUk9VR0ggKi8KLUBAIC0yMDg5LDYgKzIxNzMsMjQgQEAK LSAJbG9nZGllX2YoInNob3VsZCBoYXZlIGV4aXRlZCIpOwotIH0KLSAKLSsvKiB0aGlzIHByaW50 cyBvdXQgdGhlIGZpbmFsIGxvZyBlbnRyeSAqLwotK3ZvaWQKLStzc2hwa3RfZmluYWxfbG9nX2Vu dHJ5IChzdHJ1Y3Qgc3NoICpzc2gpIHsKLSsJZG91YmxlIHRvdGFsX3RpbWU7Ci0rCi0rCWlmIChz c2gtPnN0YXJ0X3RpbWUgPCAxKQotKwkJLyogdGhpcyB3aWxsIHByb2R1Y2UgYSBOYU4gaW4gdGhl IG91dHB1dC4gLWNqciAqLwotKwkJdG90YWxfdGltZSA9IDA7Ci0rCWVsc2UKLSsJCXRvdGFsX3Rp bWUgPSBtb25vdGltZV9kb3VibGUoKSAtIHNzaC0+c3RhcnRfdGltZTsKLSsKLSsJbG9naXQoIlNT SDogU2VydmVyO0xUeXBlOiBUaHJvdWdocHV0O1JlbW90ZTogJXMtJWQ7SU46ICVsdTtPVVQ6ICVs dTtEdXJhdGlvbjogJS4xZjt0UHV0X2luOiAlLjFmO3RQdXRfb3V0OiAlLjFmIiwKLSsJICAgICAg c3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNzaCksCi0rCSAgICAgIHNz aC0+c3RkaW5fYnl0ZXMsIHNzaC0+ZmRvdXRfYnl0ZXMsIHRvdGFsX3RpbWUsCi0rCSAgICAgIHNz aC0+c3RkaW5fYnl0ZXMgLyB0b3RhbF90aW1lLAotKwkgICAgICBzc2gtPmZkb3V0X2J5dGVzIC8g dG90YWxfdGltZSk7Ci0rfQotKwotIC8qCi0gICogTG9ncyB0aGUgZXJyb3IgcGx1cyBjb25zdHJ1 Y3RzIGFuZCBzZW5kcyBhIGRpc2Nvbm5lY3QgcGFja2V0LCBjbG9zZXMgdGhlCi0gICogY29ubmVj dGlvbiwgYW5kIGV4aXRzLiAgVGhpcyBmdW5jdGlvbiBuZXZlciByZXR1cm5zLiBUaGUgZXJyb3Ig bWVzc2FnZQotQEAgLTIzNDMsMTAgKzI0NDUsMTkgQEAKLSAJc3NoLT5rZXgtPnNlcnZlciA9IDE7 IC8qIFhYWCB1bmlmeT8gKi8KLSB9Ci0gCi0rLyogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVj dGlvbiB0byBwb3N0IGF1dGgKLSsgKiBXaGlsZSB3ZSBhcmUgaGVyZSBhbHNvIGRlY3JlYXNlIHRo ZSBzaXplIG9mCi0rICogcGFja2V0X21heF9zaXplIHRvIHNvbWV0aGluZyBtb3JlIHJlYXNvbmFi bGUuCi0rICogSW4gdGhpcyBjYXNlIHRoYXRzIDMzay4gV2hpY2ggaXMgdGhlIHNpemUgb2YKLSsg KiB0aGUgbGFyZ2VzdCBwYWNrZXQgd2UgZXhwZWN0IHRvIHNlZSBhbmQgc29tZSBzcGFjZQotKyAq IGZvciBvdmVyaGVhZC4gVGhpcyByZWR1Y2VzIG1lbW9yeSB1c2FnZSBpbiBoaWdoCi0rICogQkRQ IGVudmlyb25tZW50cyB3aXRob3V0IGltcGFjdGluZyBwZXJmb3JtYW5jZQotKyAqIC1janIgNC8x MS8yMyAqLwotIHZvaWQKLSBzc2hfcGFja2V0X3NldF9hdXRoZW50aWNhdGVkKHN0cnVjdCBzc2gg KnNzaCkKLSB7Ci0gCXNzaC0+c3RhdGUtPmFmdGVyX2F1dGhlbnRpY2F0aW9uID0gMTsKLSsJcGFj a2V0X21heF9zaXplID0gU1NIX0lPQlVGU1ogKyAxMDI0OwotIH0KLSAKLSB2b2lkICoKLUBAIC0y OTg0LDMgKzMwOTUsMTcgQEAKLSAJc3NoLT5zdGF0ZS0+ZXh0cmFfcGFkID0gcGFkOwotIAlyZXR1 cm4gMDsKLSB9Ci0rCi0rLyogdXNlZCBmb3IgY2lwaGVyIHN3aXRjaGluZwotKyAqIG9ubHkgY2Fs bGVkIGluIGNpcGhlci1zd3RpY2guYyAqLwotK3ZvaWQgKgotK3NzaF9wYWNrZXRfZ2V0X3NlbmRf Y29udGV4dChzdHJ1Y3Qgc3NoICpzc2gpCi0rewotKyAgICAgICAgcmV0dXJuIHNzaC0+c3RhdGUt PnNlbmRfY29udGV4dDsKLSt9Ci0rCi0rdm9pZCAqCi0rc3NoX3BhY2tldF9nZXRfcmVjZWl2ZV9j b250ZXh0KHN0cnVjdCBzc2ggKnNzaCkKLSt7Ci0rICAgICAgICByZXR1cm4gc3NoLT5zdGF0ZS0+ cmVjZWl2ZV9jb250ZXh0OwotK30KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3BhY2tl dC5oIG9wZW5zc2gtMTAuMnAxL3BhY2tldC5oCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9wYWNr ZXQuaAkyMDI2LTAzLTE4IDE1OjEyOjAxLjczNTExMjcxNiArMDEwMAotKysrIG9wZW5zc2gtMTAu MnAxL3BhY2tldC5oCTIwMjYtMDMtMTggMTY6NDI6MTMuODk5Mjg1MzA1ICswMTAwCi1AQCAtODgs NiArODgsMTcgQEAKLSAKLSAJLyogQVBQIGRhdGEgKi8KLSAJdm9pZCAqYXBwX2RhdGE7Ci0rCi0r CS8qIGxvZ2dpbmcgZGF0YSBmb3IgU2VydmVyTG9nZ2luZyBwYXRjaCovCi0rCWRvdWJsZSBzdGFy dF90aW1lOwotKwl1X2xvbmcgZmRvdXRfYnl0ZXM7Ci0rCXVfbG9uZyBzdGRpbl9ieXRlczsKLSsK LSsJLyogdHJhY2sgdGhhdCB3ZSBhcmUgaW4gYSBub25lIGNpcGhlciBzdGF0ZSAqLwotKwlpbnQg bm9uZTsKLSsKLSsJLyogdHJhY2sgaWYgd2UgaGF2ZSBkaXNhYmxlZCB0aGUgbWFjIGFzIHdlbGwg Ki8KLSsJaW50IG5vbmVfbWFjOwotIH07Ci0gCi0gdHlwZWRlZiBpbnQgKHNzaF9wYWNrZXRfaG9v a19mbikoc3RydWN0IHNzaCAqLCBzdHJ1Y3Qgc3NoYnVmICosCi1AQCAtMTU3LDYgKzE2OCw4IEBA Ci0gaW50CSBzc2hfcGFja2V0X3NldF9tYXhzaXplKHN0cnVjdCBzc2ggKiwgdV9pbnQpOwotIHVf aW50CSBzc2hfcGFja2V0X2dldF9tYXhzaXplKHN0cnVjdCBzc2ggKik7Ci0gCi0raW50CSBwYWNr ZXRfYXV0aGVudGljYXRpb25fc3RhdGUoY29uc3Qgc3RydWN0IHNzaCAqKTsKLSsKLSBpbnQJIHNz aF9wYWNrZXRfZ2V0X3N0YXRlKHN0cnVjdCBzc2ggKiwgc3RydWN0IHNzaGJ1ZiAqKTsKLSBpbnQJ IHNzaF9wYWNrZXRfc2V0X3N0YXRlKHN0cnVjdCBzc2ggKiwgc3RydWN0IHNzaGJ1ZiAqKTsKLSAK LUBAIC0xNzIsNiArMTg1LDEzIEBACi0gCi0gdm9pZAkqc3NoX3BhY2tldF9nZXRfaW5wdXQoc3Ry dWN0IHNzaCAqKTsKLSB2b2lkCSpzc2hfcGFja2V0X2dldF9vdXRwdXQoc3RydWN0IHNzaCAqKTsK LSt2b2lkCSpzc2hfcGFja2V0X2dldF9yZWNlaXZlX2NvbnRleHQoc3RydWN0IHNzaCAqKTsKLSt2 b2lkCSpzc2hfcGFja2V0X2dldF9zZW5kX2NvbnRleHQoc3RydWN0IHNzaCAqKTsKLSsKLSsvKiBm b3IgZm9yY2VkIHBhY2tldCByZWtleWluZyBwb3N0IGF1dGggKi8KLSt2b2lkCSBwYWNrZXRfcmVx dWVzdF9yZWtleWluZyh2b2lkKTsKLSsvKiBmaW5hbCBsb2cgZW50cnkgc3VwcG9ydCAqLwotK3Zv aWQgICAgc3NocGt0X2ZpbmFsX2xvZ19lbnRyeSAoc3RydWN0IHNzaCAqKTsKLSAKLSAvKiBuZXcg QVBJICovCi0gaW50CXNzaHBrdF9zdGFydChzdHJ1Y3Qgc3NoICpzc2gsIHVfY2hhciB0eXBlKTsK LWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3BvbHkxMzA1LmMgb3BlbnNzaC0xMC4ycDEv cG9seTEzMDUuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvcG9seTEzMDUuYwkyMDI1LTEwLTEw IDA0OjM4OjMxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2gtMTAuMnAxL3BvbHkxMzA1LmMJ MjAyNi0wMy0xOCAxNToxMzoxNy44NTI0MDY1NjYgKzAxMDAKLUBAIC0xMSw2ICsxMSwxNiBAQAot IAotICNpbmNsdWRlICJwb2x5MTMwNS5oIgotIAotKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9F VlAKLSt2b2lkCi0rcG9seTEzMDVfYXV0aChFVlBfTUFDX0NUWCAqcG9seV9jdHgsIHVuc2lnbmVk IGNoYXIgb3V0W1BPTFkxMzA1X1RBR0xFTl0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm0sIHNpemVf dCBpbmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbUE9MWTEzMDVfS0VZTEVOXSkgewotKwlz aXplX3QgcG9seV9vdXRfbGVuOwotKwlFVlBfTUFDX2luaXQocG9seV9jdHgsIChjb25zdCB1X2No YXIgKilrZXksIFBPTFkxMzA1X0tFWUxFTiwgTlVMTCk7Ci0rCUVWUF9NQUNfdXBkYXRlKHBvbHlf Y3R4LCBtLCBpbmxlbik7Ci0rCUVWUF9NQUNfZmluYWwocG9seV9jdHgsIG91dCwgJnBvbHlfb3V0 X2xlbiwgKHNpemVfdClQT0xZMTMwNV9UQUdMRU4pOwotK30KLSsjZWxzZQotKwotICNkZWZpbmUg bXVsMzJ4MzJfNjQoYSxiKSAoKHVpbnQ2NF90KShhKSAqIChiKSkKLSAKLSAjZGVmaW5lIFU4VE8z Ml9MRShwKSBcCi1AQCAtMjgsNyArMzgsNyBAQAotIAl9IHdoaWxlICgwKQotIAotIHZvaWQKLS1w b2x5MTMwNV9hdXRoKHVuc2lnbmVkIGNoYXIgb3V0W1BPTFkxMzA1X1RBR0xFTl0sIGNvbnN0IHVu c2lnbmVkIGNoYXIgKm0sIHNpemVfdCBpbmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbUE9M WTEzMDVfS0VZTEVOXSkgewotK3BvbHkxMzA1X2F1dGgoY2hhciAqdW51c2VkLCB1bnNpZ25lZCBj aGFyIG91dFtQT0xZMTMwNV9UQUdMRU5dLCBjb25zdCB1bnNpZ25lZCBjaGFyICptLCBzaXplX3Qg aW5sZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W1BPTFkxMzA1X0tFWUxFTl0pIHsKLSAJdWlu dDMyX3QgdDAsdDEsdDIsdDM7Ci0gCXVpbnQzMl90IGgwLGgxLGgyLGgzLGg0OwotIAl1aW50MzJf dCByMCxyMSxyMixyMyxyNDsKLUBAIC0xNTUsMyArMTY1LDQgQEAKLSAJVTMyVE84X0xFKCZvdXRb IDhdLCBmMik7IGYzICs9IChmMiA+PiAzMik7Ci0gCVUzMlRPOF9MRSgmb3V0WzEyXSwgZjMpOwot IH0KLSsjZW5kaWYgLyogT1BFTlNTTF9IQVZFX1BPTFlfRVZQICovCi1kaWZmIC1OdXIgb3BlbnNz aC0xMC4ycDEub3JpZy9wb2x5MTMwNS5oIG9wZW5zc2gtMTAuMnAxL3BvbHkxMzA1LmgKLS0tLSBv cGVuc3NoLTEwLjJwMS5vcmlnL3BvbHkxMzA1LmgJMjAyNS0xMC0xMCAwNDozODozMS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9wb2x5MTMwNS5oCTIwMjYtMDMtMTggMTU6MTM6 MTcuODUyNTA5NzY3ICswMTAwCi1AQCAtMTMsOCArMTMsMTUgQEAKLSAjZGVmaW5lIFBPTFkxMzA1 X0tFWUxFTgkJMzIKLSAjZGVmaW5lIFBPTFkxMzA1X1RBR0xFTgkJMTYKLSAKLS12b2lkIHBvbHkx MzA1X2F1dGgodV9jaGFyIG91dFtQT0xZMTMwNV9UQUdMRU5dLCBjb25zdCB1X2NoYXIgKm0sIHNp emVfdCBpbmxlbiwKLSsjaWZkZWYgT1BFTlNTTF9IQVZFX1BPTFlfRVZQCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZXZwLmg+Ci0rCi0rdm9pZCBwb2x5MTMwNV9hdXRoKEVWUF9NQUNfQ1RYICpwb2x5X2tl eSwgdV9jaGFyIG91dFtQT0xZMTMwNV9UQUdMRU5dLCBjb25zdCB1X2NoYXIgKm0sIHNpemVfdCBp bmxlbiwKLSsgICAgY29uc3QgdV9jaGFyIGtleVtQT0xZMTMwNV9LRVlMRU5dKQotKyNlbHNlCi0r dm9pZCBwb2x5MTMwNV9hdXRoKGNoYXIgKnVudXNlZCwgdV9jaGFyIG91dFtQT0xZMTMwNV9UQUdM RU5dLCBjb25zdCB1X2NoYXIgKm0sIHNpemVfdCBpbmxlbiwKLSAgICAgY29uc3QgdV9jaGFyIGtl eVtQT0xZMTMwNV9LRVlMRU5dKQotKyNlbmRpZgotICAgICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5k ZWRfXyhfX21pbmJ5dGVzX18sIDEsIFBPTFkxMzA1X1RBR0xFTikpKQotICAgICBfX2F0dHJpYnV0 ZV9fKChfX2JvdW5kZWRfXyhfX2J1ZmZlcl9fLCAyLCAzKSkpCi0gICAgIF9fYXR0cmlidXRlX18o KF9fYm91bmRlZF9fKF9fbWluYnl0ZXNfXywgNCwgUE9MWTEzMDVfS0VZTEVOKSkpOwotZGlmZiAt TnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvcHJvZ3Jlc3NtZXRlci5jIG9wZW5zc2gtMTAuMnAxL3By b2dyZXNzbWV0ZXIuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvcHJvZ3Jlc3NtZXRlci5jCTIw MjUtMTAtMTAgMDQ6Mzg6MzEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzaC0xMC4ycDEvcHJv Z3Jlc3NtZXRlci5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODUyNzI3MTEzICswMTAwCi1AQCAtNjUs NiArNjUsOCBAQAotIHN0YXRpYyBvZmZfdCBzdGFydF9wb3M7CQkvKiBpbml0aWFsIHBvc2l0aW9u IG9mIHRyYW5zZmVyICovCi0gc3RhdGljIG9mZl90IGVuZF9wb3M7CQkvKiBlbmRpbmcgcG9zaXRp b24gb2YgdHJhbnNmZXIgKi8KLSBzdGF0aWMgb2ZmX3QgY3VyX3BvczsJCS8qIHRyYW5zZmVyIHBv c2l0aW9uIGFzIG9mIGxhc3QgcmVmcmVzaCAqLwotK3N0YXRpYyBvZmZfdCBsYXN0X3BvczsKLStz dGF0aWMgb2ZmX3QgbWF4X2RlbHRhX3BvcyA9IDA7Ci0gc3RhdGljIHZvbGF0aWxlIG9mZl90ICpj b3VudGVyOwkvKiBwcm9ncmVzcyBjb3VudGVyICovCi0gc3RhdGljIGxvbmcgc3RhbGxlZDsJCS8q IGhvdyBsb25nIHdlIGhhdmUgYmVlbiBzdGFsbGVkICovCi0gc3RhdGljIGludCBieXRlc19wZXJf c2Vjb25kOwkvKiBjdXJyZW50IHNwZWVkIGluIGJ5dGVzIHBlciBzZWNvbmQgKi8KLUBAIC0xMzEs NiArMTMzLDcgQEAKLSAJaW50IGN1cl9zcGVlZDsKLSAJaW50IGhvdXJzLCBtaW51dGVzLCBzZWNv bmRzOwotIAlpbnQgZmlsZV9sZW4sIGNvbHM7Ci0rCW9mZl90IGRlbHRhX3BvczsKLSAKLSAJaWYg KGZpbGUgPT0gTlVMTCB8fCAoIWZvcmNlX3VwZGF0ZSAmJiAhYWxhcm1fZmlyZWQgJiYgIXdpbl9y ZXNpemVkKSB8fAotIAkgICAgIWNhbl9vdXRwdXQoKSkKLUBAIC0xNDcsNiArMTUwLDEwIEBACi0g CW5vdyA9IG1vbm90aW1lX2RvdWJsZSgpOwotIAlieXRlc19sZWZ0ID0gZW5kX3BvcyAtIGN1cl9w b3M7Ci0gCi0rCWRlbHRhX3BvcyA9IGN1cl9wb3MgLSBsYXN0X3BvczsKLSsJaWYgKGRlbHRhX3Bv cyA+IG1heF9kZWx0YV9wb3MpCi0rCQltYXhfZGVsdGFfcG9zID0gZGVsdGFfcG9zOwotKwotIAlp ZiAoYnl0ZXNfbGVmdCA+IDApCi0gCQllbGFwc2VkID0gbm93IC0gbGFzdF91cGRhdGU7Ci0gCWVs c2UgewotQEAgLTE3Niw3ICsxODMsNyBAQAotIAkJcmV0dXJuOwotIAotIAkvKiBmaWxlbmFtZSAq LwotLQlmaWxlX2xlbiA9IGNvbHMgPSB3aW5fc2l6ZSAtIDM2OwotKwlmaWxlX2xlbiA9IGNvbHMg PSB3aW5fc2l6ZSAtIDQ1OwotIAlpZiAoZmlsZV9sZW4gPiAwKSB7Ci0gCQlhc21wcmludGYoJmJ1 ZiwgSU5UX01BWCwgJmNvbHMsICIlLSpzIiwgZmlsZV9sZW4sIGZpbGUpOwotIAkJLyogSWYgd2Ug dXNlZCBmZXdlciBjb2x1bW5zIHRoYW4gZXhwZWN0ZWQgdGhlbiBwYWQgKi8KLUBAIC0xOTMsNiAr MjAwLDEyIEBACi0gCXhleHRlbmRmKCZidWYsIE5VTEwsICIgJTNkJSUgJXMgJXMvcyAiLCBwZXJj ZW50LCBmb3JtYXRfc2l6ZShjdXJfcG9zKSwKLSAJICAgIGZvcm1hdF9yYXRlKChvZmZfdClieXRl c19wZXJfc2Vjb25kKSk7Ci0gCi0rCS8qIGluc3RhbnRhbmVvdXMgcmF0ZSAqLwotKwlpZiAoYnl0 ZXNfbGVmdCA+IDApCi0rCQl4ZXh0ZW5kZigmYnVmLCBOVUxMLCAiJXMvcyIsIGZvcm1hdF9yYXRl KChvZmZfdClkZWx0YV9wb3MpKTsKLSsJZWxzZQotKwkJeGV4dGVuZGYoJmJ1ZiwgTlVMTCwgIiVz L3MiLCBmb3JtYXRfcmF0ZSgob2ZmX3QpbWF4X2RlbHRhX3BvcykpOwotKwotIAkvKiBFVEEgKi8K LSAJaWYgKCF0cmFuc2ZlcnJlZCkKLSAJCXN0YWxsZWQgKz0gZWxhcHNlZDsKLUBAIC0yMzUsNiAr MjQ4LDcgQEAKLSAJfQotIAlmcmVlKGJ1Zik7Ci0gCWZyZWUob2J1Zik7Ci0rCWxhc3RfcG9zID0g Y3VyX3BvczsKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5v cmlnL3JlYWRjb25mLmMgb3BlbnNzaC0xMC4ycDEvcmVhZGNvbmYuYwotLS0tIG9wZW5zc2gtMTAu MnAxLm9yaWcvcmVhZGNvbmYuYwkyMDI2LTAzLTE4IDE1OjEyOjAyLjAwNjE4NTg4MyArMDEwMAot KysrIG9wZW5zc2gtMTAuMnAxL3JlYWRjb25mLmMJMjAyNi0wMy0xOCAxNToxMzoxNy44NTMxOTUx ODkgKzAxMDAKLUBAIC02NSw2ICs2NSw3IEBACi0gI2luY2x1ZGUgInVpZHN3YXAuaCIKLSAjaW5j bHVkZSAibXlwcm9wb3NhbC5oIgotICNpbmNsdWRlICJkaWdlc3QuaCIKLSsjaW5jbHVkZSAic3No YnVmLmgiCi0gI2luY2x1ZGUgInZlcnNpb24uaCIKLSAjaW5jbHVkZSAic3NoLWdzcy5oIgotIAot QEAgLTE2OCw2ICsxNjksMTAgQEAKLSAJb0hhc2hLbm93bkhvc3RzLAotIAlvVHVubmVsLCBvVHVu bmVsRGV2aWNlLAotIAlvTG9jYWxDb21tYW5kLCBvUGVybWl0TG9jYWxDb21tYW5kLCBvUmVtb3Rl Q29tbWFuZCwKLSsJb1RjcFJjdkJ1ZlBvbGwsIG9IUE5EaXNhYmxlZCwKLSsJb05vbmVFbmFibGVk LCBvTm9uZU1hY0VuYWJsZWQsIG9Ob25lU3dpdGNoLAotKwlvRGlzYWJsZU1UQUVTLCBvVXNlTVBU Q1AsIG9IYXBweUV5ZXMsIG9IYXBweURlbGF5LAotKwlvTWV0cmljcywgb01ldHJpY3NQYXRoLCBv TWV0cmljc0ludGVydmFsLCBvRmFsbGJhY2ssIG9GYWxsYmFja1BvcnQsCi0gCW9WaXN1YWxIb3N0 S2V5LAotIAlvS2V4QWxnb3JpdGhtcywgb0lQUW9TLCBvUmVxdWVzdFRUWSwgb1Nlc3Npb25UeXBl LCBvU3RkaW5OdWxsLAotIAlvRm9ya0FmdGVyQXV0aGVudGljYXRpb24sIG9JZ25vcmVVbmtub3du LCBvUHJveHlVc2VGZHBhc3MsCi1AQCAtMzE1LDYgKzMyMCwxOCBAQAotIAl7ICJrZXhhbGdvcml0 aG1zIiwgb0tleEFsZ29yaXRobXMgfSwKLSAJeyAiaXBxb3MiLCBvSVBRb1MgfSwKLSAJeyAicmVx dWVzdHR0eSIsIG9SZXF1ZXN0VFRZIH0sCi0rCXsgIm5vbmVlbmFibGVkIiwgb05vbmVFbmFibGVk IH0sCi0rCXsgIm5vbmVtYWNlbmFibGVkIiwgb05vbmVNYWNFbmFibGVkIH0sCi0rCXsgIm5vbmVz d2l0Y2giLCBvTm9uZVN3aXRjaCB9LAotKwl7ICJ1c2VtcHRjcCIsIG9Vc2VNUFRDUH0sCi0rCXsg ImhhcHB5ZXllcyIsIG9IYXBweUV5ZXMgfSwKLSsJeyAiaGFwcHlkZWxheSIsIG9IYXBweURlbGF5 IH0sCi0rCXsgImRpc2FibGVtdGFlcyIsIG9EaXNhYmxlTVRBRVMgfSwKLSsJeyAibWV0cmljcyIs IG9NZXRyaWNzIH0sCi0rCXsgIm1ldHJpY3NwYXRoIiwgb01ldHJpY3NQYXRoIH0sCi0rCXsgIm1l dHJpY3NpbnRlcnZhbCIsIG9NZXRyaWNzSW50ZXJ2YWwgfSwKLSsJeyAiZmFsbGJhY2siLCBvRmFs bGJhY2sgfSwKLSsJeyAiZmFsbGJhY2twb3J0Iiwgb0ZhbGxiYWNrUG9ydCB9LAotIAl7ICJzZXNz aW9udHlwZSIsIG9TZXNzaW9uVHlwZSB9LAotIAl7ICJzdGRpbm51bGwiLCBvU3RkaW5OdWxsIH0s Ci0gCXsgImZvcmthZnRlcmF1dGhlbnRpY2F0aW9uIiwgb0ZvcmtBZnRlckF1dGhlbnRpY2F0aW9u IH0sCi1AQCAtMzM3LDYgKzM1NCw4IEBACi0gCXsgInByb3h5anVtcCIsIG9Qcm94eUp1bXAgfSwK LSAJeyAic2VjdXJpdHlrZXlwcm92aWRlciIsIG9TZWN1cml0eUtleVByb3ZpZGVyIH0sCi0gCXsg Imtub3duaG9zdHNjb21tYW5kIiwgb0tub3duSG9zdHNDb21tYW5kIH0sCi0rCXsgInRjcHJjdmJ1 ZnBvbGwiLCBvVGNwUmN2QnVmUG9sbCB9LAotKwl7ICJocG5kaXNhYmxlZCIsIG9IUE5EaXNhYmxl ZCB9LAotIAl7ICJyZXF1aXJlZHJzYXNpemUiLCBvUmVxdWlyZWRSU0FTaXplIH0sCi0gCXsgInJz YW1pbnNpemUiLCBvUmVxdWlyZWRSU0FTaXplIH0sIC8qIGFsaWFzICovCi0gCXsgImVuYWJsZWVz Y2FwZWNvbW1hbmRsaW5lIiwgb0VuYWJsZUVzY2FwZUNvbW1hbmRsaW5lIH0sCi1AQCAtNTM4LDcg KzU1Nyw3IEBACi0gCi0gCWlmIChwb3J0ID09IDApIHsKLSAJCXNwID0gZ2V0c2VydmJ5bmFtZShT U0hfU0VSVklDRV9OQU1FLCAidGNwIik7Ci0tCQlwb3J0ID0gc3AgPyBudG9ocyhzcC0+c19wb3J0 KSA6IFNTSF9ERUZBVUxUX1BPUlQ7Ci0rCQlwb3J0ID0gc3AgPyBudG9ocyhzcC0+c19wb3J0KSA6 IEhQTlNTSF9ERUZBVUxUX1BPUlQ7Ci0gCX0KLSAJcmV0dXJuIHBvcnQ7Ci0gfQotQEAgLTEzODcs NiArMTQwNiw3NSBAQAotIAkJaW50cHRyID0gJm9wdGlvbnMtPmNoZWNrX2hvc3RfaXA7Ci0gCQln b3RvIHBhcnNlX2ZsYWc7Ci0gCi0rCWNhc2Ugb0hQTkRpc2FibGVkOgotKwkJaW50cHRyID0gJm9w dGlvbnMtPmhwbl9kaXNhYmxlZDsKLSsJCWdvdG8gcGFyc2VfZmxhZzsKLSsKLSsJY2FzZSBvVGNw UmN2QnVmUG9sbDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsOwotKwkJ Z290byBwYXJzZV9mbGFnOwotKwotKwljYXNlIG9Ob25lRW5hYmxlZDoKLSsJCWludHB0ciA9ICZv cHRpb25zLT5ub25lX2VuYWJsZWQ7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugb05v bmVNYWNFbmFibGVkOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZDsKLSsJ CWdvdG8gcGFyc2VfZmxhZzsKLSsKLSsJY2FzZSBvVXNlTVBUQ1A6Ci0rCQlpbnRwdHIgPSAmb3B0 aW9ucy0+dXNlX21wdGNwOwotKwkJZ290byBwYXJzZV9mbGFnOwotKwotKwljYXNlIG9IYXBweUV5 ZXM6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+dXNlX2hhcHB5ZXllczsKLSsJCWdvdG8gcGFyc2Vf ZmxhZzsKLSsKLSsJY2FzZSBvSGFwcHlEZWxheToKLSsJCWludHB0ciA9ICZvcHRpb25zLT5oYXBw eV9kZWxheTsKLSsJCWdvdG8gcGFyc2VfaW50OwotKwotKwljYXNlIG9EaXNhYmxlTVRBRVM6Ci0r CQlpbnRwdHIgPSAmb3B0aW9ucy0+ZGlzYWJsZV9tdWx0aXRocmVhZGVkOwotKwkJZ290byBwYXJz ZV9mbGFnOwotKwotKwljYXNlIG9NZXRyaWNzOgotKwkJaW50cHRyID0gJm9wdGlvbnMtPm1ldHJp Y3M7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugb01ldHJpY3NJbnRlcnZhbDoKLSsJ CWludHB0ciA9ICZvcHRpb25zLT5tZXRyaWNzX2ludGVydmFsOwotKwkJZ290byBwYXJzZV9pbnQ7 Ci0rCi0rCWNhc2Ugb01ldHJpY3NQYXRoOgotKwkJY2hhcnB0ciA9ICZvcHRpb25zLT5tZXRyaWNz X3BhdGg7Ci0rCQlvcHRpb25zLT5tZXRyaWNzID0gMTsKLSsJCWdvdG8gcGFyc2Vfc3RyaW5nOwot KwotKwljYXNlIG9GYWxsYmFjazoKLSsJCWludHB0ciA9ICZvcHRpb25zLT5mYWxsYmFjazsKLSsJ CWdvdG8gcGFyc2VfZmxhZzsKLSsKLSsJY2FzZSBvRmFsbGJhY2tQb3J0OgotKwkJaW50cHRyID0g Jm9wdGlvbnMtPmZhbGxiYWNrX3BvcnQ7Ci0rCQlnb3RvIHBhcnNlX2ludDsKLSsKLSsJLyoKLSsJ ICogV2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBjb21tYW5kIGNvbWVzIGZyb20gdGhlIGNvbW1hbmQK LSsJICogbGluZSBvciBub3QuIElmIGl0IGRvZXMgdGhlbiBlbmFibGUgaXQgb3RoZXJ3aXNlIGZh aWwuCi0rCSAqICBOT05FIHNob3VsZCBuZXZlciBiZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4K LSsJICovCi0rCWNhc2Ugb05vbmVTd2l0Y2g6Ci0rCQlpZiAoc3RyY21wKGZpbGVuYW1lLCAiY29t bWFuZC1saW5lIikgPT0gMCkgewotKwkJCWludHB0ciA9ICZvcHRpb25zLT5ub25lX3N3aXRjaDsK LSsJCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCQl9IGVsc2UgewotKwkJCWVycm9yKCJOb25lU3dpdGNo IGlzIGZvdW5kIGluICUuMjAwcy5cbllvdSBtYXkgb25seSB1c2UgdGhpcyBjb25maWd1cmF0aW9u IG9wdGlvbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUiLCBmaWxlbmFtZSk7Ci0rCQkJZXJyb3IoIkNv bnRpbnVpbmcuLi4iKTsKLSsJCQlkZWJ1ZygiTm9uZVN3aXRjaCBkaXJlY3RpdmUgZm91bmQgaW4g JS4yMDBzLiIsIGZpbGVuYW1lKTsKLSsJCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSAJY2FzZSBvVmVy aWZ5SG9zdEtleUROUzoKLSAJCWludHB0ciA9ICZvcHRpb25zLT52ZXJpZnlfaG9zdF9rZXlfZG5z OwotIAkJbXVsdGlzdGF0ZV9wdHIgPSBtdWx0aXN0YXRlX3llc25vYXNrOwotQEAgLTI4MzQsNiAr MjkyMiwyMCBAQAotIAlvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPSAtMTsKLSAJb3B0aW9u cy0+aXBfcW9zX2J1bGsgPSAtMTsKLSAJb3B0aW9ucy0+cmVxdWVzdF90dHkgPSAtMTsKLSsJb3B0 aW9ucy0+bm9uZV9zd2l0Y2ggPSAtMTsKLSsJb3B0aW9ucy0+bm9uZV9lbmFibGVkID0gLTE7Ci0r CW9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZCA9IC0xOwotKwlvcHRpb25zLT51c2VfbXB0Y3AgPSAt MTsKLSsJb3B0aW9ucy0+dXNlX2hhcHB5ZXllcyA9IC0xOwotKwlvcHRpb25zLT5oYXBweV9kZWxh eSA9IC0xOwotKwlvcHRpb25zLT5kaXNhYmxlX211bHRpdGhyZWFkZWQgPSAtMTsKLSsJb3B0aW9u cy0+bWV0cmljcyA9IC0xOwotKwlvcHRpb25zLT5tZXRyaWNzX3BhdGggPSBOVUxMOwotKwlvcHRp b25zLT5tZXRyaWNzX2ludGVydmFsID0gLTE7Ci0rCW9wdGlvbnMtPmhwbl9kaXNhYmxlZCA9IC0x OwotKwlvcHRpb25zLT5mYWxsYmFjayA9IC0xOwotKwlvcHRpb25zLT5mYWxsYmFja19wb3J0ID0g LTE7Ci0rCW9wdGlvbnMtPnRjcF9yY3ZfYnVmX3BvbGwgPSAtMTsKLSAJb3B0aW9ucy0+c2Vzc2lv bl90eXBlID0gLTE7Ci0gCW9wdGlvbnMtPnN0ZGluX251bGwgPSAtMTsKLSAJb3B0aW9ucy0+Zm9y a19hZnRlcl9hdXRoZW50aWNhdGlvbiA9IC0xOwotQEAgLTMwMTUsOCArMzExNyw0NyBAQAotIAkJ b3B0aW9ucy0+c2VydmVyX2FsaXZlX2ludGVydmFsID0gMDsKLSAJaWYgKG9wdGlvbnMtPnNlcnZl cl9hbGl2ZV9jb3VudF9tYXggPT0gLTEpCi0gCQlvcHRpb25zLT5zZXJ2ZXJfYWxpdmVfY291bnRf bWF4ID0gMzsKLSsJaWYgKG9wdGlvbnMtPmhwbl9kaXNhYmxlZCA9PSAtMSkKLSsJCW9wdGlvbnMt Pmhwbl9kaXNhYmxlZCA9IDA7Ci0rCWlmIChvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsID09IC0x KQotKwkJb3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbCA9IDE7Ci0rCWlmIChvcHRpb25zLT5ub25l X3N3aXRjaCA9PSAtMSkKLSsJCW9wdGlvbnMtPm5vbmVfc3dpdGNoID0gMDsKLSsJaWYgKG9wdGlv bnMtPm5vbmVfZW5hYmxlZCA9PSAtMSkKLSsJCW9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9IDA7Ci0r CWlmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gMCAmJiBvcHRpb25zLT5ub25lX3N3aXRjaCA+ IDApIHsKLSsJCWZwcmludGYoc3RkZXJyLCAiTm9uZUVuYWJsZWQgbXVzdCBiZSBlbmFibGVkIHRv IHVzZSB0aGUgTm9uZSBTd2l0Y2ggb3B0aW9uLiBOb25lIGNpcGhlciBkaXNhYmxlZC5cbiIpOwot KwkJb3B0aW9ucy0+bm9uZV9lbmFibGVkID0gMDsKLSsJfQotKwlpZiAob3B0aW9ucy0+bm9uZW1h Y19lbmFibGVkID09IC0xKQotKwkJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0gMDsKLSsJaWYg KG9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZCA+IDAgJiYgKG9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9 PSAwIHx8Ci0rCQkJCQkgICAgIG9wdGlvbnMtPm5vbmVfc3dpdGNoID09IDApKSB7Ci0rCQlmcHJp bnRmKHN0ZGVyciwgIk5vbmUgTUFDIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgTm9uZSBjaXBo ZXIuIE5vbmUgTUFDIGRpc2FibGVkLlxuIik7Ci0rCQlvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQg PSAwOwotKwl9Ci0rCWlmIChvcHRpb25zLT51c2VfbXB0Y3AgPT0gLTEpCi0rCQlvcHRpb25zLT51 c2VfbXB0Y3AgPSAwOwotKwlpZiAob3B0aW9ucy0+dXNlX2hhcHB5ZXllcyA9PSAtMSkKLSsJCW9w dGlvbnMtPnVzZV9oYXBweWV5ZXMgPSAwOwotKwkvKiBpZiB0aGUgdXNlciB0cmllcyB0byBzZXQg dGhlIGRlbGF5IHRvIDAgdGhlbiBpbiBqdXN0IGxvb3BzIGZvcmV2ZXIKLSsJICogc28gaW5zdGVh ZCBvZiB1c2luZyB0aGUgc3RhbmRhcmQgLTEgdGVzdCB3ZSB1c2UgPCAxIHRvIG1ha2Ugc3VyZSB0 aGUKLSsJICogdXNlciBpc24ndCBiZWluZyB0b28gY2xldmVyIGZvciB0aGVpciBvd24gZ29vZAot KwkgKi8KLSsJaWYgKG9wdGlvbnMtPmhhcHB5X2RlbGF5IDwgMSkKLSsJCW9wdGlvbnMtPmhhcHB5 X2RlbGF5ID0gMjUwOyAvKiBkZWZhdWx0IDI1MG1zIGFzIHBlciBSRkMgODMwNSBTZWN0aW9uIDUg Ki8KLSsJaWYgKG9wdGlvbnMtPmRpc2FibGVfbXVsdGl0aHJlYWRlZCA9PSAtMSkKLSsJCW9wdGlv bnMtPmRpc2FibGVfbXVsdGl0aHJlYWRlZCA9IDA7Ci0rCWlmIChvcHRpb25zLT5tZXRyaWNzID09 IC0xKQotKwkJb3B0aW9ucy0+bWV0cmljcyA9IDA7Ci0rCWlmIChvcHRpb25zLT5tZXRyaWNzX2lu dGVydmFsID09IC0xKQotKwkJb3B0aW9ucy0+bWV0cmljc19pbnRlcnZhbCA9IDU7Ci0gCWlmIChv cHRpb25zLT5jb250cm9sX21hc3RlciA9PSAtMSkKLSAJCW9wdGlvbnMtPmNvbnRyb2xfbWFzdGVy ID0gMDsKLSsJaWYgKG9wdGlvbnMtPmZhbGxiYWNrID09IC0xKQotKwkJb3B0aW9ucy0+ZmFsbGJh Y2sgPSAxOwotKwlpZiAob3B0aW9ucy0+ZmFsbGJhY2tfcG9ydCA9PSAtMSkKLSsJCW9wdGlvbnMt PmZhbGxiYWNrX3BvcnQgPSBTU0hfREVGQVVMVF9QT1JUOwotIAlpZiAob3B0aW9ucy0+Y29udHJv bF9wZXJzaXN0ID09IC0xKSB7Ci0gCQlvcHRpb25zLT5jb250cm9sX3BlcnNpc3QgPSAwOwotIAkJ b3B0aW9ucy0+Y29udHJvbF9wZXJzaXN0X3RpbWVvdXQgPSAwOwotQEAgLTMwMzMsMTAgKzMxNzQs MjIgQEAKLSAJCW9wdGlvbnMtPnBlcm1pdF9sb2NhbF9jb21tYW5kID0gMDsKLSAJaWYgKG9wdGlv bnMtPnZpc3VhbF9ob3N0X2tleSA9PSAtMSkKLSAJCW9wdGlvbnMtPnZpc3VhbF9ob3N0X2tleSA9 IDA7Ci0tCWlmIChvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPT0gLTEpCi0rCS8qIGluIHRo ZSBldmVudCB3ZSBhcmUgdXNpbmcgUkZDIDgzMDUgdGhlbiB3ZQotKwkgKiBuZWVkIHRvIG92ZXJy aWRlIHRoZSBkZWZhdWx0IFFPUyBhcyB0aGVzZQotKwkgKiBpbnRlcmZlcmUgd2l0aCB0aGUgY29u bmVjdGlvbiBwcm9jZXNzIGluIG91cgotKwkgKiB0ZXN0IGVudmlyb25tZW50LiBJIGRvbid0IGtu b3cgaWYgaXQgaGFzIGEgcmVhbCB3b3JsZAotKwkgKiBpbXBhY3QgYnV0IFRPRE8gdHJ5IHRvIGZp bmQgYSByZWFsIHdvcmxkIHdheSB0byB0ZXN0IHRoaXMuCi0rCSAqLwotKwlpZiAob3B0aW9ucy0+ aXBfcW9zX2ludGVyYWN0aXZlID09IC0xKSB7Ci0gCQlvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3Rp dmUgPSBJUFRPU19EU0NQX0VGOwotLQlpZiAob3B0aW9ucy0+aXBfcW9zX2J1bGsgPT0gLTEpCi0r CQlpZiAob3B0aW9ucy0+dXNlX2hhcHB5ZXllcyA9PSAxKQotKwkJCW9wdGlvbnMtPmlwX3Fvc19p bnRlcmFjdGl2ZSA9IElQVE9TX0xPV0RFTEFZOwotKwl9Ci0rCWlmIChvcHRpb25zLT5pcF9xb3Nf YnVsayA9PSAtMSkgewotIAkJb3B0aW9ucy0+aXBfcW9zX2J1bGsgPSBJUFRPU19EU0NQX0NTMDsK LSsJCWlmIChvcHRpb25zLT51c2VfaGFwcHlleWVzID09IDEpCi0rCQkJb3B0aW9ucy0+aXBfcW9z X2J1bGsgPSBJUFRPU19USFJPVUdIUFVUOwotKwl9Ci0gCWlmIChvcHRpb25zLT5yZXF1ZXN0X3R0 eSA9PSAtMSkKLSAJCW9wdGlvbnMtPnJlcXVlc3RfdHR5ID0gUkVRVUVTVF9UVFlfQVVUTzsKLSAJ aWYgKG9wdGlvbnMtPnNlc3Npb25fdHlwZSA9PSAtMSkKLUBAIC0zNzkzLDYgKzM5NDYsMTUgQEAK LSAJZHVtcF9jZmdfZm10aW50KG9WaXN1YWxIb3N0S2V5LCBvLT52aXN1YWxfaG9zdF9rZXkpOwot IAlkdW1wX2NmZ19mbXRpbnQob1VwZGF0ZUhvc3RrZXlzLCBvLT51cGRhdGVfaG9zdGtleXMpOwot IAlkdW1wX2NmZ19mbXRpbnQob0VuYWJsZUVzY2FwZUNvbW1hbmRsaW5lLCBvLT5lbmFibGVfZXNj YXBlX2NvbW1hbmRsaW5lKTsKLSsJZHVtcF9jZmdfZm10aW50KG9UY3BSY3ZCdWZQb2xsLCBvLT50 Y3BfcmN2X2J1Zl9wb2xsKTsKLSsJZHVtcF9jZmdfZm10aW50KG9IUE5EaXNhYmxlZCwgby0+aHBu X2Rpc2FibGVkKTsKLSsJZHVtcF9jZmdfZm10aW50KG9Ob25lU3dpdGNoLCBvLT5ub25lX3N3aXRj aCk7Ci0rCWR1bXBfY2ZnX2ZtdGludChvTm9uZUVuYWJsZWQsIG8tPm5vbmVfZW5hYmxlZCk7Ci0r CWR1bXBfY2ZnX2ZtdGludChvTm9uZU1hY0VuYWJsZWQsIG8tPm5vbmVtYWNfZW5hYmxlZCk7Ci0r CWR1bXBfY2ZnX2ZtdGludChvRmFsbGJhY2ssIG8tPmZhbGxiYWNrKTsKLSsJZHVtcF9jZmdfZm10 aW50KG9NZXRyaWNzLCBvLT5tZXRyaWNzKTsKLSsJZHVtcF9jZmdfZm10aW50KG9Vc2VNUFRDUCwg by0+dXNlX21wdGNwKTsKLSsJZHVtcF9jZmdfZm10aW50KG9IYXBweUV5ZXMsIG8tPnVzZV9oYXBw eWV5ZXMpOwotIAlkdW1wX2NmZ19mbXRpbnQob1dhcm5XZWFrQ3J5cHRvLCBvLT53YXJuX3dlYWtf Y3J5cHRvKTsKLSAKLSAJLyogSW50ZWdlciBvcHRpb25zICovCi1AQCAtMzgwNSw2ICszOTY3LDkg QEAKLSAJZHVtcF9jZmdfaW50KG9SZXF1aXJlZFJTQVNpemUsIG8tPnJlcXVpcmVkX3JzYV9zaXpl KTsKLSAJZHVtcF9jZmdfaW50KG9PYnNjdXJlS2V5c3Ryb2tlVGltaW5nLAotIAkgICAgby0+b2Jz Y3VyZV9rZXlzdHJva2VfdGltaW5nX2ludGVydmFsKTsKLSsJZHVtcF9jZmdfaW50KG9NZXRyaWNz SW50ZXJ2YWwsIG8tPm1ldHJpY3NfaW50ZXJ2YWwpOwotKwlkdW1wX2NmZ19pbnQob0ZhbGxiYWNr UG9ydCwgby0+ZmFsbGJhY2tfcG9ydCk7Ci0rCWR1bXBfY2ZnX2ludChvSGFwcHlEZWxheSwgby0+ aGFwcHlfZGVsYXkpOwotIAotIAkvKiBTdHJpbmcgb3B0aW9ucyAqLwotIAlkdW1wX2NmZ19zdHJp bmcob0JpbmRBZGRyZXNzLCBvLT5iaW5kX2FkZHJlc3MpOwotQEAgLTM4MzMsNiArMzk5OCw3IEBA Ci0gCWR1bXBfY2ZnX3N0cmluZyhvWEF1dGhMb2NhdGlvbiwgby0+eGF1dGhfbG9jYXRpb24pOwot IAlkdW1wX2NmZ19zdHJpbmcob0tub3duSG9zdHNDb21tYW5kLCBvLT5rbm93bl9ob3N0c19jb21t YW5kKTsKLSAJZHVtcF9jZmdfc3RyaW5nKG9UYWcsIG8tPnRhZyk7Ci0rCWR1bXBfY2ZnX3N0cmlu ZyhvTWV0cmljc1BhdGgsIG8tPm1ldHJpY3NfcGF0aCk7Ci0gCWR1bXBfY2ZnX3N0cmluZyhvVmVy c2lvbkFkZGVuZHVtLCBvLT52ZXJzaW9uX2FkZGVuZHVtKTsKLSAKLSAJLyogRm9yd2FyZHMgKi8K LWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3JlYWRjb25mLmggb3BlbnNzaC0xMC4ycDEv cmVhZGNvbmYuaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvcmVhZGNvbmYuaAkyMDI2LTAzLTE4 IDE1OjEyOjAyLjAwNjkyODIwMSArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3JlYWRjb25mLmgJ MjAyNi0wMy0xOCAxNToxMzoxNy44NTM4MjIzMzIgKzAxMDAKLUBAIC0xMjksNiArMTI5LDIzIEBA Ci0gCWludAllbmFibGVfc3NoX2tleXNpZ247Ci0gCWludDY0X3QgcmVrZXlfbGltaXQ7Ci0gCWlu dAlyZWtleV9pbnRlcnZhbDsKLSsKLSsJLyogaHBuc3NoIG9wdGlvbnMgKi8KLSsJaW50ICAgICB0 Y3BfcmN2X2J1Zl9wb2xsOyAvKiBPcHRpb24gdG8gcG9sbCByZWN2IGJ1ZiBldmVyeSB3aW5kb3cg dHJhbnNmZXIgKi8KLSsJaW50ICAgICBocG5fZGlzYWJsZWQ7ICAgICAvKiBTd2l0Y2ggdG8gZGlz YWJsZSBIUE4gYnVmZmVyIG1hbmFnZW1lbnQgKi8KLSsJaW50ICAgICBub25lX3N3aXRjaDsgICAg LyogVXNlIG5vbmUgY2lwaGVyICovCi0rCWludCAgICAgbm9uZV9lbmFibGVkOyAgIC8qIEFsbG93 IG5vbmUgdG8gYmUgdXNlZCAqLwotKwlpbnQgICAgIG5vbmVtYWNfZW5hYmxlZDsgICAvKiBBbGxv dyBub25lIHRvIGJlIHVzZWQgKi8KLSsJaW50ICAgICBkaXNhYmxlX211bHRpdGhyZWFkZWQ7IC8q IERpc2FibGUgbXVsdGl0aHJlYWRlZCBhZXMtY3RyICovCi0rCWludCAgICAgbWV0cmljczsgLyog ZW5hYmxlIG1ldHJpY3MgKi8KLSsJaW50ICAgICBtZXRyaWNzX2ludGVydmFsOyAvKiB0aW1lIGlu IHNlY29uZHMgYmV0d2VlbiBwb2xscyAqLwotKwljaGFyICAgKm1ldHJpY3NfcGF0aDsgLyogcGF0 aCBmb3IgdGhlIG1ldHJpY3MgZmlsZXMgKi8KLSsJaW50ICAgICBmYWxsYmFjazsgLyogZW58ZGlz YWJsZSBmYWxsYmFjayBwb3J0IChkZWY6IHRydWUpICovCi0rCWludCAgICAgZmFsbGJhY2tfcG9y dDsgLyogcG9ydCB0byBmYWxsYmFjayB0byAoZGVmOiAyMikgKi8KLSsJaW50ICAgICB1c2VfbXB0 Y3A7IC8qIHVzZSBNdWx0aVBhdGggVENQICovCi0rCWludCAgICAgdXNlX2hhcHB5ZXllczsgLyog dXNlIFJGQyA4MzA1IC0gSGFwcHkgRXllYmFsbHMgKi8KLSsJaW50ICAgICBoYXBweV9kZWxheTsg LyogdXNlciBkZWZpbmVkIGRsZWF5IGZvciBSRkMgODMwNSAqLwotKwotIAlpbnQJbm9faG9zdF9h dXRoZW50aWNhdGlvbl9mb3JfbG9jYWxob3N0OwotIAlpbnQJaWRlbnRpdGllc19vbmx5OwotIAlp bnQJc2VydmVyX2FsaXZlX2ludGVydmFsOwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcv UkVBRE1FLm1kIG9wZW5zc2gtMTAuMnAxL1JFQURNRS5tZAotLS0tIG9wZW5zc2gtMTAuMnAxLm9y aWcvUkVBRE1FLm1kCTIwMjUtMTAtMTAgMDQ6Mzg6MzEuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzaC0xMC4ycDEvUkVBRE1FLm1kCTIwMjYtMDMtMTggMTU6MTM6MTcuODU0MDg3MDc5ICswMTAw Ci1AQCAtMSwxNiArMSwyMiBAQAotLSMgUG9ydGFibGUgT3BlblNTSAotKyMgSFBOU1NIOiBCYXNl ZCBvbiBQb3J0YWJsZSBPcGVuU1NICi0gCi0tWyFbQy9DKysgQ0ldKGh0dHBzOi8vZ2l0aHViLmNv bS9vcGVuc3NoL29wZW5zc2gtcG9ydGFibGUvYWN0aW9ucy93b3JrZmxvd3MvYy1jcHAueW1sL2Jh ZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoL29wZW5zc2gtcG9ydGFibGUvYWN0 aW9ucy93b3JrZmxvd3MvYy1jcHAueW1sKQotLVshW0Z1enppbmcgU3RhdHVzXShodHRwczovL29z cy1mdXp6LWJ1aWxkLWxvZ3Muc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9iYWRnZXMvb3BlbnNzaC5z dmcpXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2xpc3Q/c29y dD0tb3BlbmVkJmNhbj0xJnE9cHJvajpvcGVuc3NoKQotLVshW0NvdmVyaXR5IFN0YXR1c10oaHR0 cHM6Ly9zY2FuLmNvdmVyaXR5LmNvbS9wcm9qZWN0cy8yMTM0MS9iYWRnZS5zdmcpXShodHRwczov L3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzL29wZW5zc2gtcG9ydGFibGUpCi0rSFBOLVNTSCBp cyBhIGhpZ2ggcGVyZm9ybWFuY2Ugc29mdCBmb3JrIG9mIE9wZW5TU0ggdGhhdCBjYW4gcHJvdmlk ZSBzaWduaWZpY25hdGx5IGZhc3RlciB0aHJvdWdocHV0IGZvciBidWxrIGRhdGEgdHJhbnNmZXJz IG92ZXIgYSB3aWRlIHJhbmdlIG9mIG5ldHdvcmsgcGF0aHMuIEluIHNvbWUgc2l0dWF0aW9ucyB3 ZSd2ZSBzZWVuIHRocm91Z2hwdXQgcmF0ZXMgbW9yZSB0aGFuIDEwMCB0aW1lcyBmYXN0ZXIgdGhh biBPcGVuU1NILiBIUE4tU1NIIGlzIGFibGUgdG8gZG8gdGhpcyBieSBvcHRpbWl6aW5nIHRoZSBh cHBsaWNhdGlvbiBsYXllciByZWNlaXZlIGJ1ZmZlciB0byBtYXRjaCB0aGUgVENQIHJlY2VpdmUg YnVmZmVyLiBOb3RhYmx5LCB0byBzZWUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIEhQTi1TU0gg b25seSBuZWVkcyB0byBiZSB0aGUgZGF0YSByZWNlaXZlciBzbyB1c2VycyBjYW4gc2VlIG5vdGFi bGUgaW1wcm92ZW1lbnRzIHdpdGggbWFueSBvdGhlciBTU0ggaW1wbGVtZW50YXRpb25zLiBIUE4t U1NIIGFsc28gaW5jb3Jwb3JhdGUgdHdvIHBhcmFsbGVsaXplZCBjaXBoZXJzLCBBRVMtQ1RSIGFu ZCBDaGFjaGEyMCAodGhlIGRlZmF1bHQpLiBXaGVuIHVzaW5nIHRoZXNlIGNpcGhlcnMgYSB0aHJv dWdocHV0IHBlcmZvcm1hbmNlIGluY3JlYXNlIG9mIDMwJSBpcyB0eXBpY2FsLiBNb3JlIGluZm9y bWF0aW9uIG9uIGhvdyB3ZSBkbyB0aGlzIHdvcmsgYW5kIG90aGVyIGZlYXR1cmVzIG9mIEhQTi1T U0ggaXMgYXZhaWxhYmxlIGZyb20gW2h0dHBzOi8vaHBuc3NoLm9yZ10oaHR0cHM6Ly9ocG5zc2gu b3JnKS4gCi0gCi0tT3BlblNTSCBpcyBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBT U0ggcHJvdG9jb2wgKHZlcnNpb24gMikgZm9yIHNlY3VyZSByZW1vdGUgbG9naW4sIGNvbW1hbmQg ZXhlY3V0aW9uIGFuZCBmaWxlIHRyYW5zZmVyLiBJdCBpbmNsdWRlcyBhIGNsaWVudCBgYHNzaGBg IGFuZCBzZXJ2ZXIgYGBzc2hkYGAsIGZpbGUgdHJhbnNmZXIgdXRpbGl0aWVzIGBgc2NwYGAgYW5k IGBgc2Z0cGBgIGFzIHdlbGwgYXMgdG9vbHMgZm9yIGtleSBnZW5lcmF0aW9uIChgYHNzaC1rZXln ZW5gYCksIHJ1bi10aW1lIGtleSBzdG9yYWdlIChgYHNzaC1hZ2VudGBgKSBhbmQgYSBudW1iZXIg b2Ygc3VwcG9ydGluZyBwcm9ncmFtcy4KLStTdGFydGluZyB3aXRoIHZlcnNpb24gSFBOMTd2MCB0 aGVyZSB3aWxsIGJlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIG5hbWluZyBjb252ZW50aW9u IHVzZWQgZm9yIGV4ZWN1dGFibGVzIGFuZCBpbnN0YWxsYXRpb24gbG9jYXRpb25zLiBUaGUgbGFz dCB2ZXJzaW9uIHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGVzZSBjaGFuZ2VzIGlzIEhQTjE2djEg Y29ycmVzcG9uZGluZyB0byB0aGUgSFBOLThfOF9QMSB0YWcgb24gdGhlIG1hc3RlciBicmFuY2gu Ci0gCi0tVGhpcyBpcyBhIHBvcnQgb2YgT3BlbkJTRCdzIFtPcGVuU1NIXShodHRwczovL29wZW5z c2guY29tKSB0byBtb3N0IFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcywgaW5jbHVkaW5nIExp bnV4LCBPUyBYIGFuZCBDeWd3aW4uIFBvcnRhYmxlIE9wZW5TU0ggcG9seWZpbGxzIE9wZW5CU0Qg QVBJcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGVsc2V3aGVyZSwgYWRkcyBzc2hkIHNhbmRib3hp bmcgZm9yIG1vcmUgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIGluY2x1ZGVzIHN1cHBvcnQgZm9yIE9T LW5hdGl2ZSBhdXRoZW50aWNhdGlvbiBhbmQgYXVkaXRpbmcgKGUuZy4gdXNpbmcgUEFNKS4KLStI UE5TU0ggaXMgYSB2YXJpYW50IG9mIE9wZW5TU0guIEl0IGEgY29tcGxldGUgaW1wbGVtZW50YXRp b24gb2YgdGhlIFNTSCBwcm90b2NvbCAodmVyc2lvbiAyKSBmb3Igc2VjdXJlIHJlbW90ZSBsb2dp biwgY29tbWFuZCBleGVjdXRpb24gYW5kIGZpbGUgdHJhbnNmZXIuIEl0IGluY2x1ZGVzIGEgY2xp ZW50IGBgaHBuc3NoYGAgYW5kIHNlcnZlciBgYGhwbnNzaGRgYCwgZmlsZSB0cmFuc2ZlciB1dGls aXRpZXMgYGBocG5zY3BgYCBhbmQgYGBocG5zZnRwYGAgYXMgd2VsbCBhcyB0b29scyBmb3Iga2V5 IGdlbmVyYXRpb24gKGBgaHBuc3NoLWtleWdlbmBgKSwgcnVuLXRpbWUga2V5IHN0b3JhZ2UgKGBg aHBuc3NoLWFnZW50YGApIGFuZCBhIG51bWJlciBvZiBzdXBwb3J0aW5nIHByb2dyYW1zLiBJdCBp bmNsdWRlcyBudW1lcm91cyBwZXJmb3JtYW5jZSBhbmQgZnVuY3Rpb25hbGl0eSBlbmhhbmNlbWVu dHMgZm9jdXNlZCBvbiBoaWdoIHBlcmZvcm1hbmNlIG5ldHdvcmtzIGFuZCBjb21wdXRpbmcgZW52 cmlyb25tZW50cy4gQ29tcGxldGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBIUE4t UkVBRE1FIGZpbGUuCi0rCi0rSXQgaXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGFsbCBjb21wbGlh bnQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBTU0ggcHJvdG9jb2wgYW5kIE9wZW5TU0ggaW4gcGFy dGljdWxhci4KLSsKLStUaGlzIHZlcnNpb24gb2YgSFBOU1NIIGlzIHNpZ25pZmljYW50IGRlcGFy dHVyZSBpbiB0ZXJtcyBvZiBuYW1pbmcgZXhlY3V0YWJsZXMgYW5kIGluc3RhbGxhdGlvbiBsb2Nh dGlvbnMuIFNwZWNpZmljYWxseSwgYWxsIGV4ZWN1dGFibGVzIGFyZSBub3cgcHJlZml4ZWQgd2l0 aCBgYGhwbmBgLiBTbyBgYHNzaGBgIGJlY29tZXMgYGBocG5zc2hgYCBhbmQgYGBzY3BgYCBpcyBu b3cgYGBocG5zY3BgYC4gQ29uZmlndWF0aW9uIGZpbGVzIGFuZCBob3N0IGtleXMgY2FuIG5vdyBi ZSBmb3VuZCBpbiBgYC9ldGMvaHBuc3NoYGAuIEJ5IGRlZmF1bHQgYGBocG5zc2hkYGAgbm93IHJ1 bnMgb24gcG9ydCAyMjIyIGJ1dCB0aGlzIGlzIGNvbmZpZ3VyYWJsZS4gVGhpcyBjaGFuZ2Ugd2Fz IG1hZGUgaW4gb3JkZXIgdG8gcHJldmVudCBpbnN0YWxsYXRpb25zIG9mIGhwbnNzaCwgcGFydGlj dWxhcmx5IGZyb20gcGFja2FnZSBkaXN0cmlidXRpb25zLCBmcm9tIGludGVyZmVyaW5nIHdpdGgg ZGVmYXVsdCBpbnN0YWxsYXRpb25zIG9mIE9wZW5TU0guIEhQTlNTSCBpcyBiYWNrd2FyZHMgY29t cGF0aWJsZSB3aXRoIGFsbCB2ZXJzaW9ucyBvZiBPcGVuU1NIIGluY2x1ZGluZyBjb25maWd1cmF0 aW9uIGZpbGVzLCBrZXlzLCBhbmQgcnVuIHRpbWUgb3B0aW9ucy4gQWRkaXRpb25hbGx5LCB0aGUg Y2xpZW50IHdpbGwsIGJ5IGRlZmF1bHQgYXR0ZW1wdCB0byBjb25uZWN0IHRvIHBvcnQgMjIyMiBi dXQgd2lsbCBhdXRvbWF0aWNhbGx5IGZhbGwgYmFjayB0byBwb3J0IDIyLiBUaGlzIGlzIGFsc28g dXNlciBjb25maWd1cmFibGUuCi0rCi0rSFBOU1NIIGlzIGJhc2VkIG9uIE9wZW5TU0ggcG9ydGFi bGUuIFRoaXMgaXMgYSBwb3J0IG9mIE9wZW5CU0QncyBbT3BlblNTSF0oaHR0cHM6Ly9vcGVuc3No LmNvbSkgdG8gbW9zdCBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMsIGluY2x1ZGluZyBMaW51 eCwgT1MgWCBhbmQgQ3lnd2luLiBQb3J0YWJsZSBPcGVuU1NIIHBvbHlmaWxscyBPcGVuQlNEIEFQ SXMgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBlbHNld2hlcmUsIGFkZHMgc3NoZCBzYW5kYm94aW5n IGZvciBtb3JlIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBPUy1u YXRpdmUgYXV0aGVudGljYXRpb24gYW5kIGF1ZGl0aW5nIChlLmcuIHVzaW5nIFBBTSkuCi0rCi0r VGhpcyBkb2N1bWVudCB3aWxsIGJlIGNoYW5naW5nIG92ZXIgdGltZSB0byByZWZsZWN0IG5ldyBj aGFuZ2VzIGFuZCBmZWF0dXJlcy4gVGhpcyBkb2N1bWVudCBpcyBidWlsdCBvZmYgb2YgdGhlIE9w ZW5TU0ggUkVBRE1FLm1kCi0gCi0gIyMgRG9jdW1lbnRhdGlvbgotIAotLVRoZSBvZmZpY2lhbCBk b2N1bWVudGF0aW9uIGZvciBPcGVuU1NIIGFyZSB0aGUgbWFuIHBhZ2VzIGZvciBlYWNoIHRvb2w6 Ci0rVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gZm9yIE9wZW5TU0ggYXJlIHRoZSBtYW4gcGFn ZXMgZm9yIGVhY2ggdG9vbC4gCi0gCi0gKiBbc3NoKDEpXShodHRwczovL21hbi5vcGVuYnNkLm9y Zy9zc2guMSkKLSAqIFtzc2hkKDgpXShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zc2hkLjgpCi1A QCAtMjEsMTUgKzI3LDE1IEBACi0gKiBbc3NoLWtleXNjYW4oOCldKGh0dHBzOi8vbWFuLm9wZW5i c2Qub3JnL3NzaC1rZXlzY2FuLjgpCi0gKiBbc2Z0cC1zZXJ2ZXIoOCldKGh0dHBzOi8vbWFuLm9w ZW5ic2Qub3JnL3NmdHAtc2VydmVyLjgpCi0gCi0tIyMgU3RhYmxlIFJlbGVhc2VzCi0rQWxsIG9w dGlvbnMgaW4gT3BlblNTSCBhcmUgcmVzcGVjdGVkIGJ5IEhQTi1TU0guIFRoZSBtYW4gcGFnZXMg Zm9yIEhQTi1TU0ggdG9vbHMgYXJlIHRoZSBzYW1lIGFzIHRoZSBuYW1lIG9mIHRoZSB0b29sLgot IAotLVN0YWJsZSByZWxlYXNlIHRhcmJhbGxzIGFyZSBhdmFpbGFibGUgZnJvbSBhIG51bWJlciBv ZiBbZG93bmxvYWQgbWlycm9yc10oaHR0cHM6Ly93d3cub3BlbnNzaC5jb20vcG9ydGFibGUuaHRt bCNkb3dubG9hZHMpLiBXZSByZWNvbW1lbmQgdGhlIHVzZSBvZiBhIHN0YWJsZSByZWxlYXNlIGZv ciBtb3N0IHVzZXJzLiBQbGVhc2UgcmVhZCB0aGUgW3JlbGVhc2Ugbm90ZXNdKGh0dHBzOi8vd3d3 Lm9wZW5zc2guY29tL3JlbGVhc2Vub3Rlcy5odG1sKSBmb3IgZGV0YWlscyBvZiByZWNlbnQgY2hh bmdlcyBhbmQgcG90ZW50aWFsIGluY29tcGF0aWJpbGl0aWVzLgotKyMjIEJ1aWxkaW5nIEhQTlNT SAotIAotLSMjIEJ1aWxkaW5nIFBvcnRhYmxlIE9wZW5TU0gKLStEZXRhaWxlZCBzdGVwIGJ5IHN0 ZXAgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBmb3VuZCBhdCBodHRwczovL3BzYy5lZHUvaHBuLXNzaC1o b21lLwotIAotICMjIyBEZXBlbmRlbmNpZXMKLSAKLS1Qb3J0YWJsZSBPcGVuU1NIIGlzIGJ1aWx0 IHVzaW5nIGF1dG9jb25mIGFuZCBtYWtlLiBJdCByZXF1aXJlcyBhIHdvcmtpbmcgQyBjb21waWxl ciwgc3RhbmRhcmQgbGlicmFyeSBhbmQgaGVhZGVycy4KLStIUE5TU0ggaXMgYnVpbHQgdXNpbmcg YXV0b2NvbmYgYW5kIG1ha2UuIEl0IHJlcXVpcmVzIGEgd29ya2luZyBDIGNvbXBpbGVyLCBzdGFu ZGFyZCBsaWJyYXJ5IGFuZCBoZWFkZXJzLgotIAotIGBgbGliY3J5cHRvYGAgZnJvbSBlaXRoZXIg W0xpYnJlU1NMXShodHRwczovL3d3dy5saWJyZXNzbC5vcmcvKSBvciBbT3BlblNTTF0oaHR0cHM6 Ly93d3cub3BlbnNzbC5vcmcpIG1heSBhbHNvIGJlIHVzZWQuICBPcGVuU1NIIG1heSBiZSBidWls dCB3aXRob3V0IGVpdGhlciBvZiB0aGVzZSwgYnV0IHRoZSByZXN1bHRpbmcgYmluYXJpZXMgd2ls bCBoYXZlIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcyBub3Jt YWxseSBhdmFpbGFibGUuCi0gCi1AQCAtNDQsOCArNTAsOSBAQAotIFJlbGVhc2UgdGFyYmFsbHMg YW5kIHJlbGVhc2UgYnJhbmNoZXMgaW4gZ2l0IGluY2x1ZGUgYSBwcmUtYnVpbHQgY29weSBvZiB0 aGUgYGBjb25maWd1cmVgYCBzY3JpcHQgYW5kIG1heSBiZSBidWlsdCB1c2luZzoKLSAKLSBgYGAK LS10YXIgenh2ZiBvcGVuc3NoLVguWXBaLnRhci5negotLWNkIG9wZW5zc2gKLSt0YXIgenh2ZiBo cG5zc2gtWC5ZcFoudGFyLmd6Ci0rY2QgaHBuLXNzaAotK2F1dG9yZWNvbmYgLWYgLWkKLSAuL2Nv bmZpZ3VyZSAjIFtvcHRpb25zXQotIG1ha2UgJiYgbWFrZSB0ZXN0cwotIGBgYAotQEAgLTU3LDkg KzY0LDkgQEAKLSBJZiBidWlsZGluZyBmcm9tIHRoZSBnaXQgbWFzdGVyIGJyYW5jaCwgeW91J2xs IG5lZWQgW2F1dG9jb25mXShodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9jb25mLykg aW5zdGFsbGVkIHRvIGJ1aWxkIHRoZSBgYGNvbmZpZ3VyZWBgIHNjcmlwdC4gVGhlIGZvbGxvd2lu ZyBjb21tYW5kcyB3aWxsIGNoZWNrIG91dCBhbmQgYnVpbGQgcG9ydGFibGUgT3BlblNTSCBmcm9t IGdpdDoKLSAKLSBgYGAKLS1naXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL29wZW5zc2gvb3Bl bnNzaC1wb3J0YWJsZSAjIG9yIGh0dHBzOi8vYW5vbmdpdC5taW5kcm90Lm9yZy9vcGVuc3NoLmdp dAotLWNkIG9wZW5zc2gtcG9ydGFibGUKLS1hdXRvcmVjb25mCi0rZ2l0IGNsb25lIGh0dHBzOi8v Z2l0aHViLmNvbS9yYXBpZXIxL2hwbi1zc2gKLStjZCBocG4tc3NoCi0rYXV0b3JlY29uZiAtZiAt aQotIC4vY29uZmlndXJlCi0gbWFrZSAmJiBtYWtlIHRlc3RzCi0gYGBgCi1AQCAtNzYsNiArODMs NyBAQAotIGBgLS13aXRoLWxpYmVkaXRgYCB8IEVuYWJsZSBbbGliZWRpdF0oaHR0cHM6Ly93d3cu dGhyeXNvZWUuZGsvZWRpdGxpbmUvKSBzdXBwb3J0IGZvciBzZnRwLgotIGBgLS13aXRoLWtlcmJl cm9zNWBgIHwgRW5hYmxlIEtlcmJlcm9zL0dTU0FQSSBzdXBwb3J0LiBCb3RoIFtIZWltZGFsXSho dHRwczovL3d3dy5oNWwub3JnLykgYW5kIFtNSVRdKGh0dHBzOi8vd2ViLm1pdC5lZHUva2VyYmVy b3MvKSBLZXJiZXJvcyBpbXBsZW1lbnRhdGlvbnMgYXJlIHN1cHBvcnRlZC4KLSBgYC0td2l0aC1z ZWxpbnV4YGAgfCBFbmFibGUgW1NFTGludXhdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp L1NlY3VyaXR5LUVuaGFuY2VkX0xpbnV4KSBzdXBwb3J0LgotK2BgLS13aXRoLXNlY3VyaXR5LWtl eS1idWlsdGluYGAgfCBJbmNsdWRlIGJ1aWx0LWluIHN1cHBvcnQgZm9yIFUyRi9GSURPMiBzZWN1 cml0eSBrZXlzLiBUaGlzIHJlcXVpcmVzIFtsaWJmaWRvMl0oaHR0cHM6Ly9naXRodWIuY29tL1l1 Ymljby9saWJmaWRvMikgYmUgaW5zdGFsbGVkLgotIAotICMjIERldmVsb3BtZW50Ci0gCi1AQCAt ODQsMyArOTIsNCBAQAotICMjIFJlcG9ydGluZyBidWdzCi0gCi0gX05vbi1zZWN1cml0eV8gYnVn cyBtYXkgYmUgcmVwb3J0ZWQgdG8gdGhlIGRldmVsb3BlcnMgdmlhIFtCdWd6aWxsYV0oaHR0cHM6 Ly9idWd6aWxsYS5taW5kcm90Lm9yZy8pIG9yIHZpYSB0aGUgbWFpbGluZyBsaXN0IGFib3ZlLiBT ZWN1cml0eSBidWdzIHNob3VsZCBiZSByZXBvcnRlZCB0byBbb3BlbnNzaEBvcGVuc3NoLmNvbV0o bWFpbHRvOm9wZW5zc2gub3BlbnNzaC5jb20pLgotKwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAx Lm9yaWcvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jIG9wZW5zc2gtMTAuMnAxL3NhbmRib3gtc2Vj Y29tcC1maWx0ZXIuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvc2FuZGJveC1zZWNjb21wLWZp bHRlci5jCTIwMjYtMDMtMTggMTU6MTI6MDEuNzgwMTIxODkwICswMTAwCi0rKysgb3BlbnNzaC0x MC4ycDEvc2FuZGJveC1zZWNjb21wLWZpbHRlci5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODU0MzI4 NzM0ICswMTAwCi1AQCAtMzIzLDYgKzMyMyw5IEBACi0gI2lmZGVmIF9fTlJfZ2V0ZXVpZDMyCi0g CVNDX0FMTE9XKF9fTlJfZ2V0ZXVpZDMyKSwKLSAjZW5kaWYKLSsjaWZkZWYgX19OUl9nZXRwZWVy bmFtZSAvKiBub3QgZGVmaW5lZCBvbiBhcmNocyB0aGF0IGdvIHZpYSBzb2NrZXRjYWxsKDIpICov Ci0rCVNDX0FMTE9XKF9fTlJfZ2V0cGVlcm5hbWUpLAotKyNlbmRpZgotICNpZmRlZiBfX05SX2dl dHBnaWQKLSAJU0NfQUxMT1coX19OUl9nZXRwZ2lkKSwKLSAjZW5kaWYKLUBAIC00NDEsNiArNDQ0 LDkgQEAKLSAjaWZkZWYgX19OUl9zaWdwcm9jbWFzawotIAlTQ19BTExPVyhfX05SX3NpZ3Byb2Nt YXNrKSwKLSAjZW5kaWYKLSsjaWZkZWYgX19OUl9zb2NrZXRjYWxsCi0rCVNDX0FMTE9XKF9fTlJf c29ja2V0Y2FsbCksCi0rI2VuZGlmCi0gI2lmZGVmIF9fTlJfdGltZQotIAlTQ19BTExPVyhfX05S X3RpbWUpLAotICNlbmRpZgotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvc2NwLjEgb3Bl bnNzaC0xMC4ycDEvc2NwLjEKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL3NjcC4xCTIwMjYtMDMt MTggMTU6MTI6MDEuNjgyNzc3MTQxICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvc2NwLjEJMjAy Ni0wMy0xOCAxNToxMzoxNy44NTQ3MzA3MjcgKzAxMDAKLUBAIC0xOCw3ICsxOCw3IEBACi0gLk5k 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 IHRoZQotIC5GbCBPCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9zY3AuYyBvcGVuc3No LTEwLjJwMS9zY3AuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvc2NwLmMJMjAyNi0wMy0xOCAx NToxMjowMS42OTYyOTcyNTcgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9zY3AuYwkyMDI2LTAz LTE4IDE3OjA2OjUxLjA2NTAxNDg1MSArMDEwMAotQEAgLTE3LDYgKzE3LDcgQEAKLSAvKgotICAq IENvcHlyaWdodCAoYykgMTk5OSBUaGVvIGRlIFJhYWR0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSAgKiBDb3B5cmlnaHQgKGMpIDE5OTkgQWFyb24gQ2FtcGJlbGwuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqIENvcHlyaWdodCAoYykgMjAyMSBDaHJpcyBSYXBpZXIuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gICoKLSAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLUBAIC0xMTcsNiArMTE4 LDEyIEBACi0gI2luY2x1ZGUgIm1pc2MuaCIKLSAjaW5jbHVkZSAicHJvZ3Jlc3NtZXRlci5oIgot ICNpbmNsdWRlICJ1dGY4LmgiCi0rLyogbGlicmVzc2wgZG9lc24ndCBzdXBwb3J0IHRoZSBibGFr ZTJiNTEyIGRpZ2VzdCBzbwotKyAqIHdlIG5lZWQgdG8gcHJldmVudCBsaWJyZXNzbCBmcm9tIHVz aW5nIHRoZSByZXN1bWUgZmVhdHVyZQotKyAqIGNqciA3LzE4LzIwMjMgKi8KLSsjaWYgKGRlZmlu ZWQgV0lUSF9PUEVOU1NMKSAmJiAhZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKLSsj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjZW5kaWYKLSAjaW5jbHVkZSAic2Z0cC5oIgotIAot ICNpbmNsdWRlICJzZnRwLWNvbW1vbi5oIgotQEAgLTE1OSw2ICsxNjYsMTAgQEAKLSAvKiBUaGlz IGlzIHRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUgZm9yIHRoZSBzZWN1cmUgY29ubmVjdGlvbi4gKCJz c2giIG9yIC1TKSAqLwotIGNoYXIgKnNzaF9wcm9ncmFtID0gX1BBVEhfU1NIX1BST0dSQU07Ci0g Ci0rLyogdGhpcyBpcyBwYXRoIHRvIHRoZSByZW1vdGUgc2NwIHByb2dyYW0gYWxsb3dpbmcgdGhl IHVzZXIgdG8gc3BlY2lmeQotKyAqIGEgbm9uLWRlZmF1bHQgc2NwICovCi0rY2hhciAqcmVtb3Rl X3BhdGg7Ci0rCi0gLyogVGhpcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSBwaWQgb2Ygc3NoX3Byb2dy YW0gKi8KLSBwaWRfdCBkb19jbWRfcGlkID0gLTE7Ci0gcGlkX3QgZG9fY21kX3BpZDIgPSAtMTsK LUBAIC0xNzMsNiArMTg0LDE3IEBACi0gaW50IHNmdHBfZ2xvYihzdHJ1Y3Qgc2Z0cF9jb25uICos IGNvbnN0IGNoYXIgKiwgaW50LAotICAgICBpbnQgKCopKGNvbnN0IGNoYXIgKiwgaW50KSwgZ2xv Yl90ICopOyAvKiBwcm90byBmb3Igc2Z0cC1nbG9iLmMgKi8KLSAKLSsvKiBGbGFnIHRvIGluZGlj YXRlIHRoYXQgdGhpcyBpcyBhIGZpbGUgcmVzdW1lICovCi0raW50IHJlc3VtZV9mbGFnID0gMDsg LyogMCBpcyBvZmYsIDEgaXMgb24gKi8KLSsKLSsvKiB3ZSB3YW50IHRoZSBob3N0IG5hbWUgZm9y IGRlYnVnZ2luZyBwdXJwb3NlcyAqLwotK2NoYXIgaG9zdG5hbWVbSE9TVF9OQU1FX01BWCArIDFd OwotKwotKy8qIGRlZmluZXMgZm9yIHRoZSByZXN1bWUgZnVuY3Rpb24uIE5lZWQgdGhlbSBldmVu IGlmIG5vdCBzdXBwb3J0ZWQgKi8KLSsjZGVmaW5lIEhBU0hfTEVOIDEyOCAgICAgICAgICAgICAg IC8qNDAgc2hhMSwgNjQgYmxha2UyczI1NiAxMjggYmxha2UyYjUxMiovCi0rI2RlZmluZSBCVUZf QU5EX0hBU0ggSEFTSF9MRU4gKyA2NCAvKiBsZW5ndGggb2YgdGhlIGhhc2ggYW5kIG90aGVyIGRh dGEgdG8gZ2V0IHNpemUgb2YgYnVmZmVyICovCi0rI2RlZmluZSBIQVNIX0JVRkxFTiA4MTkyCSAg IC8qIDgxOTIgc2VlbXMgdG8gYmUgYSBnb29kIGJhbGFuY2UgYmV0d2VlbiBmcmVhZHMKLSsJCQkJ ICAgICogYW5kIHRoZSBkaWdlc3QgZnVuYyovCi0gc3RhdGljIHZvaWQKLSBraWxsY2hpbGQoaW50 IHNpZ25vKQotIHsKLUBAIC0yMjAsNiArMjQyLDkgQEAKLSAJaW50IHN0YXR1czsKLSAJcGlkX3Qg cGlkOwotIAotKyNpZmRlZiBERUJVRwotKwlmcHJpbnRmKHN0ZGVyciwgIkluIGRvX2xvY2FsX2Nt ZFxuIik7Ci0rI2VuZGlmCi0gCWlmIChhLT5udW0gPT0gMCkKLSAJCWZhdGFsKCJkb19sb2NhbF9j bWQ6IG5vIGFyZ3VtZW50cyIpOwotIAotQEAgLTQ0Niw2ICs0NzEsOCBAQAotIHZvaWQgdG9sb2Nh bChpbnQsIGNoYXIgKltdLCBlbnVtIHNjcF9tb2RlX2UsIGNoYXIgKnNmdHBfZGlyZWN0KTsKLSB2 b2lkIHRvcmVtb3RlKGludCwgY2hhciAqW10sIGVudW0gc2NwX21vZGVfZSwgY2hhciAqc2Z0cF9k aXJlY3QpOwotIHZvaWQgdXNhZ2Uodm9pZCk7Ci0rdm9pZCBjYWxjdWxhdGVfaGFzaChjaGFyICos IGNoYXIgKiwgb2ZmX3QpOyAvKmdldCB0aGUgaGFzaCBvZiBmaWxlIHRvIGxlbmd0aCovCi0rdm9p ZCByYW5kX3N0cihjaGFyICosIHNpemVfdCk7IC8qZ2VuIHJhbmRvbWUgY2hhciBzdHJpbmcgKi8K LSAKLSB2b2lkIHNvdXJjZV9zZnRwKGludCwgY2hhciAqLCBjaGFyICosIHN0cnVjdCBzZnRwX2Nv bm4gKik7Ci0gdm9pZCBzaW5rX3NmdHAoaW50LCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0 IHNmdHBfY29ubiAqKTsKLUBAIC00NjQsMTEgKzQ5MSwxOCBAQAotIAljaGFyICpzZnRwX2RpcmVj dCA9IE5VTEw7Ci0gCWxvbmcgbG9uZyBsbHY7Ci0gCi0rCS8qIHdlIHVzZSB0aGlzIHRvIHByZXBl bmQgdGhlIGRlYnVnZ2luZyBzdGF0ZW1lbnRzCi0rCSAqIHNvIHdlIGtub3cgd2hpY2ggc2lkZSBp cyBzYXlpbmcgd2hhdCAqLwotKwlnZXRob3N0bmFtZShob3N0bmFtZSwgSE9TVF9OQU1FX01BWCAr IDEpOwotKwotIAkvKiBFbnN1cmUgdGhhdCBmZHMgMCwgMSBhbmQgMiBhcmUgb3BlbiBvciBkaXJl Y3RlZCB0byAvZGV2L251bGwgKi8KLSAJc2FuaXRpc2Vfc3RkZmQoKTsKLSAKLSAJbXNldGxvY2Fs ZSgpOwotIAotKwkvKiBmb3IgdXNlIHdpdGggcmFuZCBmdW5jdGlvbiB3aGVuIHJlc3VtZSBvcHRp b24gaXMgdXNlZCovCi0rCXNyYW5kKHRpbWUoTlVMTCkpOwotKwotIAkvKiBDb3B5IGFyZ3YsIGJl Y2F1c2Ugd2UgbW9kaWZ5IGl0ICovCi0gCWFyZ3YwID0gYXJndlswXTsKLSAJbmV3YXJndiA9IHhj YWxsb2MoTUFYSU1VTShhcmdjICsgMSwgMSksIHNpemVvZigqbmV3YXJndikpOwotQEAgLTQ5Myw3 ICs1MjcsNyBAQAotIAotIAlmZmxhZyA9IFRmbGFnID0gdGZsYWcgPSAwOwotIAl3aGlsZSAoKGNo ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsCi0tCSAgICAiMTIzNDZBQkNUZGZPcHFScnN0dkQ6RjpKOk06 UDpTOmM6aTpsOm86WDoiKSkgIT0gLTEpIHsKLSsJICAgICIxMjM0NkFCQ1RkZk9wcVJyc3R2WkQ6 RjpKOk06UDpTOmM6aTpsOm86WDoiKSkgIT0gLTEpIHsKLSAJCXN3aXRjaCAoY2gpIHsKLSAJCS8q IFVzZXItdmlzaWJsZSBmbGFncy4gKi8KLSAJCWNhc2UgJzEnOgotQEAgLTU3NCwyNCArNjA4LDM2 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 CQl9Ci0gCQkJCXNmdHBfbnJlcXVlc3RzID0gKHNpemVfdClsbHY7Ci1AQCAtNjc5LDExICs3MjUs MjAgQEAKLSAJcmVtaW4gPSByZW1vdXQgPSAtMTsKLSAJZG9fY21kX3BpZCA9IC0xOwotIAkvKiBD b21tYW5kIHRvIGJlIGV4ZWN1dGVkIG9uIHJlbW90ZSBzeXN0ZW0gdXNpbmcgInNzaCIuICovCi0t CSh2b2lkKSBzbnByaW50ZihjbWQsIHNpemVvZiBjbWQsICJzY3AlcyVzJXMlcyIsCi0tCSAgICB2 ZXJib3NlX21vZGUgPyAiIC12IiA6ICIiLAotLQkgICAgaWFtcmVjdXJzaXZlID8gIiAtciIgOiAi IiwgcGZsYWcgPyAiIC1wIiA6ICIiLAotLQkgICAgdGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkgPyAi IC1kIiA6ICIiKTsKLS0KLSsJLyogSW4gdGhlIGV2ZW50IG9mIGFuIGhwbiB0byBocG4gY29ubmVj dGlvbiB0aGUgc2NwCi0rCSAqIGNvbW1hbmQgaXMgcmV3cml0dGVuIHRvIGhwbnNjcC4gVGhpcyBo YXBwZW5zIGluCi0rCSAqIGNsaWVudGxvb3AuYyAtY2pyIDEyLzEyLzIwMjIgKi8KLSsKLSsJKHZv aWQpIHNucHJpbnRmKGNtZCwgc2l6ZW9mIGNtZCwgIiVzJXMlcyVzJXMlcyIsCi0rCQkJcmVtb3Rl X3BhdGggPyByZW1vdGVfcGF0aCA6ICJzY3AiLAotKwkJCXZlcmJvc2VfbW9kZSA/ICIgLXYiIDog IiIsCi0rCQkJaWFtcmVjdXJzaXZlID8gIiAtciIgOiAiIiwKLSsJCQlwZmxhZyA/ICIgLXAiIDog IiIsCi0rCQkJdGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkgPyAiIC1kIiA6ICIiLAotKwkJCXJlc3Vt ZV9mbGFnID8gIiAtWiIgOiAiIik7Ci0rI2lmZGVmIERFQlVHCi0rCWZwcmludGYoc3RkZXJyLCAi JXM6IFNlbmRpbmcgY21kICVzXG4iLCBob3N0bmFtZSwgY21kKTsKLSsjZW5kaWYKLSAJKHZvaWQp IHNzaF9zaWduYWwoU0lHUElQRSwgbG9zdGNvbm4pOwotIAotIAlpZiAoY29sb24oYXJndlthcmdj IC0gMV0pKQkvKiBEZXN0IGlzIHJlbW90ZSBob3N0LiAqLwotQEAgLTEzMTQsNiArMTM2OSw3NCBA QAotIAlzZnRwX2ZyZWUoY29ubik7Ci0gfQotIAotKy8qIGNhbGN1bGF0ZSB0aGUgaGFzaCBvZiBh IGZpbGUgdXAgdG8gbGVuZ3RoIGJ5dGVzCi0rICogdGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBp ZiByZW1vdGUgYW5kIGxvY2FsIGZpbGUKLSsgKiBmcmFnbWVudHMgbWF0Y2guIFRoZXJlIG1heSBi ZSBhIG1vcmUgZWZmaWNpZW50IHByb2Nlc3MgZm9yIHRoZSBoYXNoaW5nCi0rICogTm90ZTogTGli cmVTU0wgZG9lc24ndCBzdXBwb3J0IGJsYWtlMmI1MTIgc28gd2UgY2FuJ3Qgb2ZmZXIgdGhlbQot KyAqIHRoZSByZXN1bWUgZmVhdHVyZSBjanIgNy8xOC8yMDIzICovCi0rI2lmIChkZWZpbmVkIFdJ VEhfT1BFTlNTTCkgJiYgIWRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCi0rdm9pZCBj YWxjdWxhdGVfaGFzaChjaGFyICpmaWxlbmFtZSwgY2hhciAqb3V0cHV0LCBvZmZfdCBsZW5ndGgp Ci0rewotKwlpbnQgbiwgbWRfbGVuOwotKwlFVlBfTURfQ1RYICpjOwotKwljb25zdCBFVlBfTUQg Km1kOwotKwljaGFyIGJ1ZltIQVNIX0JVRkxFTl07Ci0rCXNzaXplX3QgYnl0ZXM7Ci0rCXVuc2ln bmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rCWNoYXIgdG1wWzNdOwotKwlGSUxFICpm aWxlX3B0cjsKLSsJKm91dHB1dCA9ICdcMCc7Ci0rCi0rCS8qIG9wZW4gZmlsZSBmb3IgY2FsY3Vs YXRpbmcgaGFzaCAqLwotKwlmaWxlX3B0ciA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotKwlpZiAo ZmlsZV9wdHI9PU5VTEwpCi0rCXsKLSsJCWlmICh2ZXJib3NlX21vZGUpIHsKLSsJCQlmcHJpbnRm KHN0ZGVyciwgIiVzOiBlcnJvciBvcGVuaW5nIGZpbGUgJXNcbiIsIGhvc3RuYW1lLCBmaWxlbmFt ZSk7Ci0rCQkJLyogZmlsZSB0aGUgZXhwZWN0ZWQgb3V0cHV0IHdpdGggc3BhY2VzICovCi0rCQkJ c25wcmludGYob3V0cHV0LCBIQVNIX0xFTiwgIiVzIiwgICIgIik7Ci0rCQl9Ci0rCQlyZXR1cm47 Ci0rCX0KLSsKLSsJbWQgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmFtZSgiYmxha2UyYjUxMiIpOwotKwlj ID0gRVZQX01EX0NUWF9uZXcoKTsKLSsJRVZQX0RpZ2VzdEluaXRfZXgoYywgbWQsIE5VTEwpOwot KwotKwl3aGlsZSAobGVuZ3RoID4gMCkgewotKwkJaWYgKGxlbmd0aCA+IEhBU0hfQlVGTEVOKQot KwkJCS8qIGZyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyByZWFkLgotKwkJCSAq IGluIHRoaXMgY2FzZSAxLiBNdWx0aXBseSBieSB0aGUgbGVuZ3RoIHRvIGdldCB0aGUgYnl0ZXMg Ki8KLSsJCQlieXRlcz1mcmVhZChidWYsIEhBU0hfQlVGTEVOLCAxLCBmaWxlX3B0cikgKiBIQVNI X0JVRkxFTjsKLSsJCWVsc2UKLSsJCQlieXRlcz1mcmVhZChidWYsIGxlbmd0aCwgMSwgZmlsZV9w dHIpICogbGVuZ3RoOwotKwkJRVZQX0RpZ2VzdFVwZGF0ZShjLCBidWYsIGJ5dGVzKTsKLSsJCWxl bmd0aCAtPSBIQVNIX0JVRkxFTjsKLSsJfQotKwlFVlBfRGlnZXN0RmluYWwoYywgb3V0LCAmbWRf bGVuKTsKLSsJRVZQX01EX0NUWF9mcmVlKGMpOwotKwkvKiBjb252ZXJ0IHRoZSBoYXNoIGludG8g YSBzdHJpbmcgKi8KLSsJZm9yKG49MDsgbiA8IG1kX2xlbjsgbisrKSB7Ci0rCQlzbnByaW50Zih0 bXAsIDMsICIlMDJ4Iiwgb3V0W25dKTsKLSsJCXN0cm5jYXQob3V0cHV0LCB0bXAsIDMpOwotKwl9 Ci0rI2lmZGVmIERFQlVHCi0rCWZwcmludGYoc3RkZXJyLCAiJXM6IEhBU0ggSVMgJyVzJyBvZiBs ZW5ndGggJWxkXG4iLCBob3N0bmFtZSwgb3V0cHV0LCBzdHJsZW4ob3V0cHV0KSk7Ci0rI2VuZGlm Ci0rCWZjbG9zZShmaWxlX3B0cik7Ci0rfQotKyNlbHNlCi0rdm9pZCBjYWxjdWxhdGVfaGFzaChj aGFyICpmaWxlbmFtZSwgY2hhciAqb3V0cHV0LCBvZmZfdCBsZW5ndGgpCi0rewotKyAgLyogZW1w dHkgZnVuY3Rpb24gZm9yIGJ1aWxkcyB3aXRob3V0IG9wZW5zc2wgb3IgYXJlIHVzaW5nIGxpYnJl c3NsICovCi0rfQotKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wgKi8KLSsKLSsjZGVmaW5lIFRZUEVf T1ZFUkZMT1codHlwZSwgdmFsKSBcCi0rCSgoc2l6ZW9mKHR5cGUpID09IDQgJiYgKHZhbCkgPiBJ TlQzMl9NQVgpIHx8IFwKLSsJIChzaXplb2YodHlwZSkgPT0gOCAmJiAodmFsKSA+IElOVDY0X01B WCkgfHwgXAotKwkgKHNpemVvZih0eXBlKSAhPSA0ICYmIHNpemVvZih0eXBlKSAhPSA4KSkKLSsK LSAvKiBQcmVwYXJlIHJlbW90ZSBwYXRoLCBoYW5kbGluZyB+IGJ5IGFzc3VtaW5nIGN3ZCBpcyB0 aGUgaG9tZWRpciAqLwotIHN0YXRpYyBjaGFyICoKLSBwcmVwYXJlX3JlbW90ZV9wYXRoKHN0cnVj dCBzZnRwX2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhdGgpCi1AQCAtMTM5NywxNCArMTUyMCwy MyBAQAotIAlzdHJ1Y3Qgc3RhdCBzdGI7Ci0gCXN0YXRpYyBCVUYgYnVmZmVyOwotIAlCVUYgKmJw OwotLQlvZmZfdCBpLCBzdGF0Ynl0ZXM7Ci0rCW9mZl90IGksIHN0YXRieXRlcywgeGZlcl9zaXpl OwotIAlzaXplX3QgYW10LCBucjsKLSAJaW50IGZkID0gLTEsIGhhZGVyciwgaW5keDsKLS0JY2hh ciAqbGFzdCwgKm5hbWUsIGJ1ZltQQVRIX01BWCArIDEyOF0sIGVuY25hbWVbUEFUSF9NQVhdOwot KwljaGFyICpjcCwgKmxhc3QsICpuYW1lLCBidWZbUEFUSF9NQVggKyBCVUZfQU5EX0hBU0hdLCBl bmNuYW1lW1BBVEhfTUFYXTsKLSAJaW50IGxlbjsKLSsJY2hhciBoYXNoc3VtW0hBU0hfTEVOKzFd LCB0ZXN0X2hhc2hzdW1bSEFTSF9MRU4rMV07Ci0rCWNoYXIgaW5idWZbUEFUSF9NQVggKyBCVUZf QU5EX0hBU0hdOwotKwlzaXplX3QgaW5zaXplOwotKwl1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwot KwljaGFyICptYXRjaDsgLyogdXNlZCB0byBjb21tdW5pY2F0ZSBmcmFnbWVudCBtYXRjaCAqLwot KwltYXRjaCA9ICJcMCI7IC8qZGVmYXVsdCBpcyB0byBmYWlsIHRoZSBtYXRjaC4gTlVMTCBhbmQg RiBib3RoIGluZGljYXRlIGZhaWwqLwotIAotIAlmb3IgKGluZHggPSAwOyBpbmR4IDwgYXJnYzsg KytpbmR4KSB7Ci0gCQluYW1lID0gYXJndltpbmR4XTsKLSsjaWZkZWYgREVCVUcKLSsJCWZwcmlu dGYoc3RkZXJyLCAiJXMgaW5kZXggaXMgJWQsIG5hbWUgaXMgJXNcbiIsIGhvc3RuYW1lLCBpbmR4 LCBuYW1lKTsKLSsjZW5kaWYKLSAJCXN0YXRieXRlcyA9IDA7Ci0gCQlsZW4gPSBzdHJsZW4obmFt ZSk7Ci0gCQl3aGlsZSAobGVuID4gMSAmJiBuYW1lW2xlbi0xXSA9PSAnLycpCi1AQCAtMTQyNiw2 ICsxNTU4LDE0IEBACi0gCQl1bnNldF9ub25ibG9jayhmZCk7Ci0gCQlzd2l0Y2ggKHN0Yi5zdF9t b2RlICYgU19JRk1UKSB7Ci0gCQljYXNlIFNfSUZSRUc6Ci0rCQkJLyogb25seSBjYWxjdWxhdGUg aGFzaCBpZiB3ZSBhcmUgaW4gcmVzdW1lIG1vZGUgYW5kIGEgZmlsZSovCi0rCQkJaWYgKHJlc3Vt ZV9mbGFnKSB7Ci0rCQkJCWNhbGN1bGF0ZV9oYXNoKG5hbWUsIGhhc2hzdW0sIHN0Yi5zdF9zaXpl KTsKLSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50ZihzdGRlcnIsICIlczogTmFtZSBpcyAnJXMn IGFuZCBoYXNoICclcydcbiIsIGhvc3RuYW1lLCBuYW1lLCBoYXNoc3VtKTsKLSsJCQkJZnByaW50 ZiAoc3RkZXJyLCIlczogc2l6ZSBvZiAlcyBpcyAlbGRcbiIsIGhvc3RuYW1lLCBuYW1lLCBzdGIu c3Rfc2l6ZSk7Ci0rI2VuZGlmCi0rCQkJfQotIAkJCWJyZWFrOwotIAkJY2FzZSBTX0lGRElSOgot IAkJCWlmIChpYW1yZWN1cnNpdmUpIHsKLUBAIC0xNDQ3LDE0ICsxNTg3LDEzMyBAQAotIAkJCQln b3RvIG5leHQ7Ci0gCQl9Ci0gI2RlZmluZQlGSUxFTU9ERU1BU0sJKFNfSVNVSUR8U19JU0dJRHxT X0lSV1hVfFNfSVJXWEd8U19JUldYTykKLS0JCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIkMl MDRvICVsbGQgJXNcbiIsCi0tCQkgICAgKHVfaW50KSAoc3RiLnN0X21vZGUgJiBGSUxFTU9ERU1B U0spLAotLQkJICAgIChsb25nIGxvbmcpc3RiLnN0X3NpemUsIGxhc3QpOwotLQkJaWYgKHZlcmJv c2VfbW9kZSkKLS0JCQlmbXByaW50ZihzdGRlcnIsICJTZW5kaW5nIGZpbGUgbW9kZXM6ICVzIiwg YnVmKTsKLSsJCS8qIEFkZCBhIGhhc2ggb2YgdGhlIGZpbGUgYWxvbmcgd2l0aCB0aGUgZmlsZW1v ZGUgaWYgaW4gcmVzdW1lICovCi0rCQlpZiAocmVzdW1lX2ZsYWcpCi0rCQkJc25wcmludGYoYnVm LCBzaXplb2YgYnVmLCAiQyUwNG8gJWxsZCAlcyAlc1xuIiwKLSsJCQkJICh1X2ludCkgKHN0Yi5z dF9tb2RlICYgRklMRU1PREVNQVNLKSwKLSsJCQkJIChsb25nIGxvbmcpc3RiLnN0X3NpemUsIGhh c2hzdW0sIGxhc3QpOwotKwkJZWxzZQotKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIkMl MDRvICVsbGQgJXNcbiIsCi0rCQkJCSAodV9pbnQpIChzdGIuc3RfbW9kZSAmIEZJTEVNT0RFTUFT SyksCi0rCQkJCSAobG9uZyBsb25nKXN0Yi5zdF9zaXplLCBsYXN0KTsKLSsKLSsjaWZkZWYgREVC VUcKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IFNlbmRpbmcgZmlsZSBtb2RlczogJXMiLCBob3N0 bmFtZSwgYnVmKTsKLSsjZW5kaWYKLSAJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwg YnVmLCBzdHJsZW4oYnVmKSk7Ci0tCQlpZiAocmVzcG9uc2UoKSA8IDApCi0rCi0rI2lmZGVmIERF QlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbmJ1ZiBsZW5ndGggJWxkIGJ1ZiBsZW5ndGgg JWxkXG4iLCBob3N0bmFtZSwgc3RybGVuKGluYnVmKSwgc3RybGVuKGJ1ZikpOwotKyNlbmRpZgot KwkJaWYgKHJlc3VtZV9mbGFnKSB7IC8qIGdldCB0aGUgaGFzaCByZXNwb25zZSBmcm9tIHRoZSBy ZW1vdGUgKi8KLSsJCQkodm9pZCkgYXRvbWljaW8ocmVhZCwgcmVtaW4sIGluYnVmLCBCVUZfQU5E X0hBU0ggLSAxKTsKLSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50ZihzdGRlcnIsICIlczogd2Ug Z290ICclcycgaW4gaW5idWYgbGVuZ3RoICVsZCBidWYgd2FzICVsZFxuIiwKLSsJCQkJCWhvc3Ru YW1lLCBpbmJ1Ziwgc3RybGVuKGluYnVmKSwgc3RybGVuKGJ1ZikpOwotKyNlbmRpZgotKwkJfQot KwkJaWYgKHJlc3BvbnNlKCkgPCAwKSB7Ci0rI2lmZGVmIERFQlVHCi0rCQkJZnByaW50ZihzdGRl cnIsICIlczogcmVzcG9uc2UgaXMgbGVzcyB0aGFuIDBcbiIsIGhvc3RuYW1lKTsKLSsjZW5kaWYK LSAJCQlnb3RvIG5leHQ7Ci0rCQl9Ci0rCQl4ZmVyX3NpemUgPSBzdGIuc3Rfc2l6ZTsKLSsKLSsJ CS8qIHdlIG9ubHkgZG8gdGhlIGZvbGxvd2luZyBpbiByZXN1bWUgbW9kZSBiZWNhdXNlIHdlIGhh dmUgYQotKwkJICogbmV3IGJ1ZiBmcm9tIHRoZSByZW1vdGUgdG8gcGFyc2UgKi8KLSsJCWlmIChy ZXN1bWVfZmxhZykgewotKwkJCWNwID0gaW5idWY7Ci0rCQkJaWYgKCpjcCA9PSAnUicpIHsgLyog cmVzdW1lIGZpbGUgdHJhbnNmZXIqLwotKwkJCQljaGFyICppbl9oYXNoc3VtOyAvKiB3aGVyZSB0 byBob2xkIHRoZSBpbmNvbWluZyBoYXNoICovCi0rCQkJCWluX2hhc2hzdW0gPSBjYWxsb2MoSEFT SF9MRU4rMSwgc2l6ZW9mKGNoYXIpKTsKLSsJCQkJZm9yICgrK2NwOyBjcCA8IGluYnVmICsgNTsg Y3ArKykgewotKwkJCQkJLyogc2tpcCBvdmVyIHRoZSBtb2RlICovCi0rCQkJCX0KLSsJCQkJaWYg KCpjcCsrICE9ICcgJykgewotKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogbW9kZSBub3QgZGVs aW5lYXRlZCFcbiIsIGhvc3RuYW1lKTsKLSsJCQkJfQotKwotKwkJCQlpZiAoIWlzZGlnaXQoKHVu c2lnbmVkIGNoYXIpKmNwKSkKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHNpemUgbm90IHBy ZXNlbnRcbiIsIGhvc3RuYW1lKTsKLSsJCQkJdWxsID0gc3RydG91bGwoY3AsICZjcCwgMTApOwot KwkJCQlpZiAoIWNwIHx8ICpjcCsrICE9ICcgJykKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IHNpemUgbm90IGRlbGltaXRlZFxuIiwgaG9zdG5hbWUpOwotKwkJCQlpZiAoVFlQRV9PVkVSRkxP VyhvZmZfdCwgdWxsKSkKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHNpemUgb3V0IG9mIHJh bmdlXG4iLCBob3N0bmFtZSk7Ci0rCQkJCWluc2l6ZSA9IChvZmZfdCl1bGw7Ci0rCi0rI2lmZGVm IERFQlVHCi0rCQkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiByZWNlaXZlZCBzaXplIG9mICVsZFxu IiwgaG9zdG5hbWUsIGluc2l6ZSk7Ci0rI2VuZGlmCi0rCi0rCQkJCS8qIGNvcHkgdGhlIGNwIHBv aW50ZXIgYnl0ZSBieSBieXRlICovCi0rCQkJCWludCBpOwotKwkJCQlmb3IgKGkgPSAwOyBpIDwg SEFTSF9MRU47IGkrKykgewotKwkJCQkJc3RybmNhdChpbl9oYXNoc3VtLCBjcCsrLCAxKTsKLSsJ CQkJfQotKyNpZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmIChzdGRlcnIsICIlczogaW5faGFzaHN1 bSAnJXMnXG4iLCBob3N0bmFtZSwgaW5faGFzaHN1bSk7Ci0rI2VuZGlmCi0rCi0rCQkJCS8qZ2V0 IHRoZSBoYXNoIG9mIHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgYnl0ZSBsZW5ndGggd2UganVzdCBn b3QqLwotKwkJCQljYWxjdWxhdGVfaGFzaChuYW1lLCB0ZXN0X2hhc2hzdW0sIGluc2l6ZSk7Ci0r I2lmZGVmIERFQlVHCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbGN1bGF0ZWQgaGFzaHN1 bSBvZiBsb2NhbCAlcyB0byAlbGQgaXMgJXNcbiIsCi0rCQkJCQlob3N0bmFtZSwgbGFzdCwgaW5z aXplLCB0ZXN0X2hhc2hzdW0pOwotKyNlbmRpZgotKwkJCQkvKiBjb21wYXJlIHRoZSBpbmNvbWlu ZyBoYXNoIHRvIHRoZSBoYXNoIG9mIHRoZSBsb2NhbCBmaWxlKi8KLSsJCQkJaWYgKHN0cmNtcChp bl9oYXNoc3VtLCB0ZXN0X2hhc2hzdW0pID09IDApIHsKLSsJCQkJCS8qIHRoZSBmcmFnbWVudHMg bWF0Y2ggc28gd2Ugc2hvdWxkIHNlZWsgdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZQot KwkJCQkJICogbG9jYWwgZmlsZSBhbmQgc2V0IHRoZSByZW1vdGUgZmlsZSB0byBhcHBlbmQgKi8K LSsjaWZkZWYgREVCVUcKLSsJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IEZpbGUgZnJhZ21lbnRz IG1hdGNoXG4iLCBob3N0bmFtZSk7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzZWVraW5n IHRvICVsZFxuIiwgaG9zdG5hbWUsIGluc2l6ZSk7Ci0rI2VuZGlmCi0rCQkJCQl4ZmVyX3NpemUg PSBzdGIuc3Rfc2l6ZSAtIGluc2l6ZTsKLSsjaWZkZWYgREVCVUcKLSsJCQkJCWZwcmludGYoc3Rk ZXJyLCAiJXM6IHhmZXJfc2l6ZTogJWxkLCBzdGIuc3Rfc2l6ZTogJWxkIGluc2l6ZTogJWxkXG4i LAotKwkJCQkJCWhvc3RuYW1lLCB4ZmVyX3NpemUsIHN0Yi5zdF9zaXplLCBpbnNpemUpOwotKyNl bmRpZgotKwkJCQkJaWYgKGxzZWVrKGZkLCBpbnNpemUsIFNFRUtfQ1VSKSAhPSAob2ZmX3QpaW5z aXplKSB7Ci0rI2lmZGVmIERFQlVHCi0rCQkJCQkJZnByaW50ZihzdGRlcnIsICIlczogbHNlZWsg ZGlkIG5vdCByZXR1cm4gJWxkXG4iLCBob3N0bmFtZSwgaW5zaXplKSA7Ci0rI2VuZGlmCi0rCQkJ CQkJZ290byBuZXh0OwotKwkJCQkJfQotKwkJCQkJbWF0Y2ggPSAiTSI7Ci0rCQkJCX0gZWxzZSB7 Ci0rCQkJCQkvKiB0aGUgZnJhZ21lbnRzIGRvbid0IG1hdGNoIHNvIHdlIHNob3VsZCBzdGFydCBv dmVyIGZyb20gdGhlIGJlZ2luaW5nICovCi0rI2lmZGVmIERFQlVHCi0rCQkJCQlmcHJpbnRmKHN0 ZGVyciwgIiVzOiBGaWxlIGZyYWdtZW50cyBkbyBub3QgbWF0Y2ggJyVzJyhpbikgJyVzJyhsb2Nh bClcbiIsCi0rCQkJCSAgICAgICAJCWhvc3RuYW1lLCBpbl9oYXNoc3VtLCB0ZXN0X2hhc2hzdW0p OwotKyNlbmRpZgotKwkJCQkJbWF0Y2ggPSAiRiI7Ci0rCQkJCQl4ZmVyX3NpemUgPSBzdGIuc3Rf c2l6ZTsKLSsJCQkJfQotKwkJCQlmcmVlKGluX2hhc2hzdW0pOwotKwkJCX0KLSsJCQlpZiAoKmNw ID09ICdTJykgeyAvKiBza2lwIGZpbGUgKi8KLSsjaWZkZWYgREVCVUcKLSsJCQkJZnByaW50Zihz dGRlcnIsICIlczogU2hvdWxkIGJlIHNraXBwaW5nIHRoaXMgZmlsZVxuIiwgaG9zdG5hbWUpOwot KyNlbmRpZgotKwkJCQlnb3RvIG5leHQ7Ci0rCQkJfQotKwkJCWlmICgqY3AgPT0gJ0MnKSB7IC8q dHJhbnNmZXIgZW50aXJlIGZpbGUqLwotKyNpZmRlZiBERUJVRwotKwkJCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiBSZXNlbmRpbmcgZW50aXJlIGZpbGVcbiIsIGhvc3RuYW1lKTsKLSsjZW5kaWYKLSsJ CQkJeGZlcl9zaXplID0gc3RiLnN0X3NpemU7Ci0rCQkJfQotKwkJCS8qIG5lZWQgdG8gc2VuZCB0 aGUgbWF0Y2ggc3RhdHVzCi0rCQkJICogV2UgYWx3YXlzIHNlbmQgdGhlIG1hdGNoIHN0YXR1cyBv ciB3ZSBnZXQgb3V0IG9mIHN5bmMKLSsJCQkgKi8KLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRm KHN0ZGVyciwgIiVzOiBzZW5kaW5nIG1hdGNoICVzXG4iLCBob3N0bmFtZSwgbWF0Y2gpOwotKyNl bmRpZgotKwkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgbWF0Y2gsIDEpOwotKwkJ fQotKwotIAkJaWYgKChicCA9IGFsbG9jYnVmKCZidWZmZXIsIGZkLCBDT1BZX0JVRkxFTikpID09 IE5VTEwpIHsKLSBuZXh0OgkJCWlmIChmZCAhPSAtMSkgewotIAkJCQkodm9pZCkgY2xvc2UoZmQp OwotQEAgLTE0NjIsMTMgKzE3MjEsMTcgQEAKLSAJCQl9Ci0gCQkJY29udGludWU7Ci0gCQl9Ci0r Ci0rI2lmZGVmIERFQlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBnb2luZyB0byB4ZmVyICVs ZFxuIiwgaG9zdG5hbWUsIHhmZXJfc2l6ZSk7Ci0rI2VuZGlmCi0gCQlpZiAoc2hvd3Byb2dyZXNz KQotLQkJCXN0YXJ0X3Byb2dyZXNzX21ldGVyKGN1cmZpbGUsIHN0Yi5zdF9zaXplLCAmc3RhdGJ5 dGVzKTsKLSsJCQlzdGFydF9wcm9ncmVzc19tZXRlcihjdXJmaWxlLCB4ZmVyX3NpemUsICZzdGF0 Ynl0ZXMpOwotIAkJc2V0X25vbmJsb2NrKHJlbW91dCk7Ci0tCQlmb3IgKGhhZGVyciA9IGkgPSAw OyBpIDwgc3RiLnN0X3NpemU7IGkgKz0gYnAtPmNudCkgewotKwkJZm9yIChoYWRlcnIgPSBpID0g MDsgaSA8IHhmZXJfc2l6ZTsgaSArPSBicC0+Y250KSB7Ci0gCQkJYW10ID0gYnAtPmNudDsKLS0J CQlpZiAoaSArIChvZmZfdClhbXQgPiBzdGIuc3Rfc2l6ZSkKLS0JCQkJYW10ID0gc3RiLnN0X3Np emUgLSBpOwotKwkJCWlmIChpICsgKG9mZl90KWFtdCA+IHhmZXJfc2l6ZSkKLSsJCQkJYW10ID0g eGZlcl9zaXplIC0gaTsKLSAJCQlpZiAoIWhhZGVycikgewotIAkJCQlpZiAoKG5yID0gYXRvbWlj aW8ocmVhZCwgZmQsCi0gCQkJCSAgICBicC0+YnVmLCBhbXQpKSAhPSBhbXQpIHsKLUBAIC0xNjY1 LDI0ICsxOTI4LDM2IEBACi0gc2luayhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIg KnNyYykKLSB7Ci0gCXN0YXRpYyBCVUYgYnVmZmVyOwotLQlzdHJ1Y3Qgc3RhdCBzdGI7Ci0rCXN0 cnVjdCBzdGF0IHN0YiwgY3BzdGF0LCBucHN0YXQ7Ci0gCUJVRiAqYnA7Ci0gCW9mZl90IGk7Ci0g CXNpemVfdCBqLCBjb3VudDsKLSAJaW50IGFtdCwgZXhpc3RzLCBmaXJzdCwgb2ZkOwotIAltb2Rl X3QgbW9kZSwgb21vZGUsIG1hc2s7Ci0tCW9mZl90IHNpemUsIHN0YXRieXRlczsKLSsJb2ZmX3Qg c2l6ZSwgc3RhdGJ5dGVzLCB4ZmVyX3NpemU7Ci0gCXVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7Ci0g CWludCBzZXRpbWVzLCB0YXJnaXNkaXIsIHdyZXJyOwotLQljaGFyIGNoLCAqY3AsICpucCwgKnRh cmcsICp3aHksICp2ZWN0WzFdLCBidWZbMjA0OF0sIHZpc2J1ZlsyMDQ4XTsKLSsJY2hhciBjaCwg KmNwLCAqbnAsICpucF90bXAsICp0YXJnLCAqd2h5LCAqdmVjdFsxXSwgYnVmWzE2Mzg0XSwgdmlz YnVmWzE2Mzg0XTsKLSAJY2hhciAqKnBhdHRlcm5zID0gTlVMTDsKLSAJc2l6ZV90IG4sIG5wYXR0 ZXJucyA9IDA7Ci0gCXN0cnVjdCB0aW1ldmFsIHR2WzJdOwotKwljaGFyIHJlbW90ZV9oYXNoc3Vt W0hBU0hfTEVOKzFdOwotKwljaGFyIGxvY2FsX2hhc2hzdW1bSEFTSF9MRU4rMV07Ci0rCWNoYXIg dG1wYnVmW0JVRl9BTkRfSEFTSF07Ci0rCWNoYXIgb3V0YnVmW0JVRl9BTkRfSEFTSF07Ci0rCWNo YXIgbWF0Y2g7Ci0rCWludCBiYWRfbWF0Y2hfZmxhZyA9IDA7Ci0rCW5wID0gTlVMTDsgLyogdGhp cyB3YXMgb3JpZ2luYWxseSAnLzAnIGJ1dCB0aGF0J3Mgd3JvbmcgKi8KLSsJbnBfdG1wID0gTlVM TDsKLSsKLSAKLSAjZGVmaW5lCWF0aW1lCXR2WzBdCi0gI2RlZmluZQltdGltZQl0dlsxXQotICNk ZWZpbmUJU0NSRVdVUChzdHIpCXsgd2h5ID0gc3RyOyBnb3RvIHNjcmV3dXA7IH0KLSAKLSsjaWZk ZWYgREVCVUcKLSsJZnByaW50ZiAoc3RkZXJyLCAiJXM6IExPQ0FMIEluIHNpbmsgd2l0aCAlc1xu IiwgaG9zdG5hbWUsIHNyYyk7Ci0rI2VuZGlmCi0gCWlmIChUWVBFX09WRVJGTE9XKHRpbWVfdCwg MCkgfHwgVFlQRV9PVkVSRkxPVyhvZmZfdCwgMCkpCi0gCQlTQ1JFV1VQKCJVbmV4cGVjdGVkIG9m Zl90L3RpbWVfdCBzaXplIik7Ci0gCi1AQCAtMTY5OCw5ICsxOTczLDE2IEBACi0gCWlmICh0YXJn ZXRzaG91bGRiZWRpcmVjdG9yeSkKLSAJCXZlcmlmeWRpcih0YXJnKTsKLSAKLSsjaWZkZWYgREVC VUcKLSsJZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRpbmcgbnVsbCB0byByZW1vdXQuXG4iLGhv c3RuYW1lKTsKLSsjZW5kaWYKLSAJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwg MSk7Ci0gCWlmIChzdGF0KHRhcmcsICZzdGIpID09IDAgJiYgU19JU0RJUihzdGIuc3RfbW9kZSkp Ci0gCQl0YXJnaXNkaXIgPSAxOwotKwotKyNpZmRlZiBERUJVRwotKwlmcHJpbnRmKHN0ZGVyciwg IiVzOiBUYXJnZXQgaXMgJXMgd2l0aCBhIHNpemUgb2YgJWxkXG4iLCBob3N0bmFtZSwgdGFyZywg c3RiLnN0X3NpemUpOwotKyNlbmRpZgotIAlpZiAoc3JjICE9IE5VTEwgJiYgIWlhbXJlY3Vyc2l2 ZSAmJiAhVGZsYWcpIHsKLSAJCS8qCi0gCQkgKiBQcmVwYXJlIHRvIHRyeSB0byByZXN0cmljdCBp bmNvbWluZyBmaWxlbmFtZXMgdG8gbWF0Y2gKLUBAIC0xNzEwLDYgKzE5OTIsMTAgQEAKLSAJCQlm YXRhbF9mKCJjb3VsZCBub3QgZXhwYW5kIHBhdHRlcm4iKTsKLSAJfQotIAlmb3IgKGZpcnN0ID0g MTs7IGZpcnN0ID0gMCkgewotKwkJYmFkX21hdGNoX2ZsYWcgPSAwOyAvKiB1c2VkIGluIHJlc3Vt ZSBtb2RlLiAqLwotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlczogQXQgc3Rh cnQgb2YgbG9vcCBidWYgaXMgJXNcbiIsIGhvc3RuYW1lLCBidWYpOwotKyNlbmRpZgotIAkJY3Ag PSBidWY7Ci0gCQlpZiAoYXRvbWljaW8ocmVhZCwgcmVtaW4sIGNwLCAxKSAhPSAxKQotIAkJCWdv dG8gZG9uZTsKLUBAIC0xNzM3LDYgKzIwMjMsOSBAQAotIAkJCWNvbnRpbnVlOwotIAkJfQotIAkJ aWYgKGJ1ZlswXSA9PSAnRScpIHsKLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIs ICIlczogU2VuZGluZyBudWxsIHRvIHJlbW91dC5cbiIsIGhvc3RuYW1lKTsKLSsjZW5kaWYKLSAJ CQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsKLSAJCQlnb3RvIGRvbmU7 Ci0gCQl9Ci1AQCAtMTc0NCw2ICsyMDMzLDkgQEAKLSAJCQkqLS1jcCA9IDA7Ci0gCi0gCQljcCA9 IGJ1ZjsKLSsjaWZkZWYgREVCVUcKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IGJ1ZiBpcyAlc1xu IiwgaG9zdG5hbWUsIGJ1Zik7Ci0rI2VuZGlmCi0gCQlpZiAoKmNwID09ICdUJykgewotIAkJCXNl dGltZXMrKzsKLSAJCQljcCsrOwotQEAgLTE3NzEsOSArMjA2MywxOSBAQAotIAkJCWlmICghY3Ag fHwgKmNwKysgIT0gJ1wwJyB8fCBhdGltZS50dl91c2VjIDwgMCB8fAotIAkJCSAgICBhdGltZS50 dl91c2VjID4gOTk5OTk5KQotIAkJCQlTQ1JFV1VQKCJhdGltZS51c2VjIG5vdCBkZWxpbWl0ZWQi KTsKLSsKLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIsICIlczogU2VuZGluZyBu dWxsIHRvIHJlbW91dC5cbiIsIGhvc3RuYW1lKTsKLSsjZW5kaWYKLSAJCQkodm9pZCkgYXRvbWlj aW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsKLSAJCQljb250aW51ZTsKLSAJCX0KLSsJCWlmICgq Y3AgPT0gJ1InKSB7IC8qcmVzdW1lIGZpbGUgdHJhbnNmZXIgKGRvbnQnIHRoaW5rIEkgbmVlZCB0 aGlzIGhlcmUpKi8KLSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBSZWNl aXZlZCBhIFJFU1VNRSByZXF1ZXN0IHdpdGggJXNcbiIsIGhvc3RuYW1lLCBjcCk7Ci0rI2VuZGlm Ci0rCQkJcmVzdW1lX2ZsYWcgPSAxOwotKwkJfQotIAkJaWYgKCpjcCAhPSAnQycgJiYgKmNwICE9 ICdEJykgewotIAkJCS8qCi0gCQkJICogQ2hlY2sgZm9yIHRoZSBjYXNlICJyY3AgcmVtb3RlOmZv b1wqIGxvY2FsOmJhciIuCi1AQCAtMTc4OSw2ICsyMDkxLDE4IEBACi0gCQkJU0NSRVdVUCgiZXhw ZWN0ZWQgY29udHJvbCByZWNvcmQiKTsKLSAJCX0KLSAJCW1vZGUgPSAwOwotKyNpZmRlZiBERUJV RwotKwkJZnByaW50ZihzdGRlcnIsICIlczogYnVmIGlzICVzXG4iLCBob3N0bmFtZSwgYnVmKTsK LSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNwIGlzICVzXG4iLCBob3N0bmFtZSwgY3ApOwotKyNl bmRpZgotKwkJLyogd2UgbmVlZCB0byB0cmFjayBpZiB0aGlzIG9iamVjdCBpcyBhIGRpcmVjdG9y eQotKwkJICogYmVmb3JlIHdlIG1vdmUgdGhlIHBvaW50ZXIuIElmIHdlIGFyZSBpbiByZXN1bWUg bW9kZQotKwkJICogd2UgbWlnaHQgZW5kIHVwIHRyeWluZyB0byBnZXQgYW4gbWRzdW0gb24gYSBk aXJlY3RvcnkKLSsJCSAqIGFuZCB0aGF0IGRvZXNuJ3Qgd29yayAqLwotKwkJaW50IGRpcl9mbGFn ID0gMDsKLSsJCWlmICgqY3AgPT0gJ0QnKQotKwkJCWRpcl9mbGFnID0gMTsKLSsKLSAJCWZvciAo KytjcDsgY3AgPCBidWYgKyA1OyBjcCsrKSB7Ci0gCQkJaWYgKCpjcCA8ICcwJyB8fCAqY3AgPiAn NycpCi0gCQkJCVNDUkVXVVAoImJhZCBtb2RlIik7Ci1AQCAtMTc5OSw2ICsyMTEzLDEwIEBACi0g CQlpZiAoKmNwKysgIT0gJyAnKQotIAkJCVNDUkVXVVAoIm1vZGUgbm90IGRlbGltaXRlZCIpOwot IAotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlczogY3AgaXMgJXNcbiIsIGhv c3RuYW1lLCBjcCk7Ci0rI2VuZGlmCi0rCi0gCQlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIp KmNwKSkKLSAJCQlTQ1JFV1VQKCJzaXplIG5vdCBwcmVzZW50Iik7Ci0gCQl1bGwgPSBzdHJ0b3Vs bChjcCwgJmNwLCAxMCk7Ci1AQCAtMTgwOCwxMSArMjEyNiwzMiBAQAotIAkJCVNDUkVXVVAoInNp emUgb3V0IG9mIHJhbmdlIik7Ci0gCQlzaXplID0gKG9mZl90KXVsbDsKLSAKLSsjaWZkZWYgREVC VUcKLSsJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNwIGlzICVzXG4iLCBob3N0bmFtZSwgY3ApOwot KyNlbmRpZgotKwkJaWYgKHJlc3VtZV9mbGFnICYmICFkaXJfZmxhZykgewotKwkJCSpyZW1vdGVf aGFzaHN1bSA9ICdcMCc7Ci0rCQkJaW50IGk7Ci0rCQkJZm9yIChpID0gMDsgaSA8IEhBU0hfTEVO OyBpKyspIHsKLSsJCQkJc3RybmNhdCAocmVtb3RlX2hhc2hzdW0sIGNwKyssIDEpOwotKwkJCX0K LSsjaWZkZWYgREVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIsICIlczogJyVzJ1xuIiwgaG9zdG5h bWUsIHJlbW90ZV9oYXNoc3VtKTsKLSsjZW5kaWYKLSsJCQlpZiAoIWNwIHx8ICpjcCsrICE9ICcg JykKLSsJCQkJU0NSRVdVUCgiaGFzaCBub3QgZGVsaW1pdGVkIik7Ci0rCQl9Ci0rI2lmZGVmIERF QlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjcCBpcyAlc1xuIiwgaG9zdG5hbWUsIGNwKTsK LSsjZW5kaWYKLSAJCWlmICgqY3AgPT0gJ1wwJyB8fCBzdHJjaHIoY3AsICcvJykgIT0gTlVMTCB8 fAotIAkJICAgIHN0cmNtcChjcCwgIi4iKSA9PSAwIHx8IHN0cmNtcChjcCwgIi4uIikgPT0gMCkg ewotIAkJCXJ1bl9lcnIoImVycm9yOiB1bmV4cGVjdGVkIGZpbGVuYW1lOiAlcyIsIGNwKTsKLSAJ CQlleGl0KDEpOwotIAkJfQotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIsICIlcyBj cCBpcyAlc1xuIiwgaG9zdG5hbWUsIGNwKTsKLSsjZW5kaWYKLSAJCWlmIChucGF0dGVybnMgPiAw KSB7Ci0gCQkJZm9yIChuID0gMDsgbiA8IG5wYXR0ZXJuczsgbisrKSB7Ci0gCQkJCWlmIChzdHJj bXAocGF0dGVybnNbbl0sIGNwKSA9PSAwIHx8Ci1AQCAtMTg4MiwxMSArMjIyMSwxOTUgQEAKLSAJ 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 VUxMKSB7Ci0gCQkJKHZvaWQpIGNsb3NlKG9mZCk7Ci0gCQkJY29udGludWU7Ci1AQCAtMTkwMSwx MyArMjQyNCwxNyBAQAotIAkJICovCi0gCQlzdGF0Ynl0ZXMgPSAwOwotIAkJaWYgKHNob3dwcm9n cmVzcykKLS0JCQlzdGFydF9wcm9ncmVzc19tZXRlcihjdXJmaWxlLCBzaXplLCAmc3RhdGJ5dGVz KTsKLSsJCQlzdGFydF9wcm9ncmVzc19tZXRlcihjdXJmaWxlLCB4ZmVyX3NpemUsICZzdGF0Ynl0 ZXMpOwotIAkJc2V0X25vbmJsb2NrKHJlbWluKTsKLS0JCWZvciAoY291bnQgPSBpID0gMDsgaSA8 IHNpemU7IGkgKz0gYnAtPmNudCkgewotKyNpZmRlZiBERUJVRwotKwkJZnByaW50ZihzdGRlcnIs ICIlczogeGZlcl9zaXplIGlzICVsZFxuIiwgaG9zdG5hbWUsIHhmZXJfc2l6ZSk7Ci0rI2VuZGlm Ci0rCQlmb3IgKGNvdW50ID0gaSA9IDA7IGkgPCB4ZmVyX3NpemU7IGkgKz0gYnAtPmNudCkgewot IAkJCWFtdCA9IGJwLT5jbnQ7Ci0tCQkJaWYgKGkgKyBhbXQgPiBzaXplKQotLQkJCQlhbXQgPSBz aXplIC0gaTsKLSsJCQlpZiAoaSArIGFtdCA+IHhmZXJfc2l6ZSkKLSsJCQkJYW10ID0geGZlcl9z aXplIC0gaTsKLSAJCQljb3VudCArPSBhbXQ7Ci0rCQkJLyogcmVhZCB0aGUgZGF0YSBmcm9tIHRo ZSBzb2NrZXQqLwotIAkJCWRvIHsKLSAJCQkJaiA9IGF0b21pY2lvNihyZWFkLCByZW1pbiwgY3As IGFtdCwKLSAJCQkJICAgIHNjcGlvLCAmc3RhdGJ5dGVzKTsKLUBAIC0xOTQyLDggKzI0NjksNzgg 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 QEAgLTE5NzgsOCArMjU3NSwxNyBAQAotIAkJCX0KLSAJCX0KLSAJCS8qIElmIG5vIGVycm9yIHdh cyBub3RlZCB0aGVuIHNpZ25hbCBzdWNjZXNzIGZvciB0aGlzIGZpbGUgKi8KLS0JCWlmIChub3Rl X2VycihOVUxMKSA9PSAwKQotKwkJaWYgKG5vdGVfZXJyKE5VTEwpID09IDApIHsKLSsjaWZkZWYg REVCVUcKLSsJCQlmcHJpbnRmIChzdGRlcnIsICIlczogU2VuZGluZyBudWxsIHRvIHJlbW91dC5c biIsIGhvc3RuYW1lKTsKLSsjZW5kaWYKLSAJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1v dXQsICIiLCAxKTsKLSsJCX0KLSsJCS8qIHdlIGFyZSBpbiByZXN1bWUgbW9kZSBhbmQgd2UgaGF2 ZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciBucF90bXAgKi8KLSsJCWlmIChyZXN1bWVfZmxhZyAmJiBu cF90bXAgIT0gTlVMTCkgewotKwkJCWZyZWUobnBfdG1wKTsKLSsJCQlucF90bXAgPSBOVUxMOwot KwkJfQotIAl9Ci0gZG9uZToKLSAJZm9yIChuID0gMDsgbiA8IG5wYXR0ZXJuczsgbisrKQotQEAg LTIxMjMsMTEgKzI3MjksMjAgQEAKLSB2b2lkCi0gdXNhZ2Uodm9pZCkKLSB7Ci0rI2lmIChkZWZp bmVkIFdJVEhfT1BFTlNTTCkgJiYgIWRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCi0r CSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKLSsJICAgICJ1c2FnZTogc2NwIFstMzQ2QUJDT3BxUnJz VHZaXSBbLWMgY2lwaGVyXSBbLUQgc2Z0cF9zZXJ2ZXJfcGF0aF0gWy1GIHNzaF9jb25maWddXG4i Ci0rCSAgICAiICAgICAgICAgICBbLWkgaWRlbnRpdHlfZmlsZV0gWy1KIGRlc3RpbmF0aW9uXSBb LWwgbGltaXRdIFstbyBzc2hfb3B0aW9uXVxuIgotKwkgICAgIiAgICAgICAgICAgWy1QIHBvcnRd IFstUyBwcm9ncmFtXSBbLVggc2Z0cF9vcHRpb25dIHNvdXJjZSAuLi4gdGFyZ2V0XG4iKTsKLSsJ ZXhpdCgxKTsKLSsjZWxzZQotIAkodm9pZCkgZnByaW50ZihzdGRlcnIsCi0gCSAgICAidXNhZ2U6 IHNjcCBbLTM0NkFCQ09wcVJyc1R2XSBbLWMgY2lwaGVyXSBbLUQgc2Z0cF9zZXJ2ZXJfcGF0aF0g Wy1GIHNzaF9jb25maWddXG4iCi0gCSAgICAiICAgICAgICAgICBbLWkgaWRlbnRpdHlfZmlsZV0g Wy1KIGRlc3RpbmF0aW9uXSBbLWwgbGltaXRdIFstbyBzc2hfb3B0aW9uXVxuIgotIAkgICAgIiAg ICAgICAgICAgWy1QIHBvcnRdIFstUyBwcm9ncmFtXSBbLVggc2Z0cF9vcHRpb25dIHNvdXJjZSAu Li4gdGFyZ2V0XG4iKTsKLSAJZXhpdCgxKTsKLSsjZW5kaWYKLSsKLSB9Ci0gCi0gdm9pZAotQEAg LTIyNjYsNiArMjg4MSwxOCBAQAotIAkJZXhpdCgxKTsKLSB9Ci0gCi0rdm9pZCByYW5kX3N0cihj aGFyICpkZXN0LCBzaXplX3QgbGVuZ3RoKSB7Ci0rCWNoYXIgY2hhcnNldFtdID0gIjAxMjM0NTY3 ODkiCi0rCQkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0rCQkiQUJDREVGR0hJSktMTU5P UFFSU1RVVldYWVoiOwotKwotKwl3aGlsZSAobGVuZ3RoLS0gPiAwKSB7Ci0rCQlzaXplX3QgaW5k ZXggPSAoZG91YmxlKSByYW5kKCkgLyBSQU5EX01BWCAqIChzaXplb2YgY2hhcnNldCAtIDEpOwot KwkJKmRlc3QrKyA9IGNoYXJzZXRbaW5kZXhdOwotKwl9Ci0rCSpkZXN0ID0gJ1wwJzsKLSt9Ci0r Ci0gdm9pZAotIGNsZWFudXBfZXhpdChpbnQgaSkKLSB7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4y cDEub3JpZy9zZXJ2Y29uZi5jIG9wZW5zc2gtMTAuMnAxL3NlcnZjb25mLmMKLS0tLSBvcGVuc3No LTEwLjJwMS5vcmlnL3NlcnZjb25mLmMJMjAyNi0wMy0xOCAxNToxMjowMi4wMDcyMjMwOTggKzAx MDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9zZXJ2Y29uZi5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODU1 NzU1MTkyICswMTAwCi1AQCAtNjksNiArNjksNyBAQAotICNpbmNsdWRlICJhdXRoLmgiCi0gI2lu Y2x1ZGUgIm15cHJvcG9zYWwuaCIKLSAjaW5jbHVkZSAiZGlnZXN0LmgiCi0rI2luY2x1ZGUgInNz aGJ1Zi5oIgotICNpbmNsdWRlICJ2ZXJzaW9uLmgiCi0gI2luY2x1ZGUgInNzaC1nc3MuaCIKLSAK LUBAIC0yMTcsNiArMjE4LDEyIEBACi0gCW9wdGlvbnMtPmF1dGhvcml6ZWRfcHJpbmNpcGFsc19m aWxlID0gTlVMTDsKLSAJb3B0aW9ucy0+YXV0aG9yaXplZF9wcmluY2lwYWxzX2NvbW1hbmQgPSBO VUxMOwotIAlvcHRpb25zLT5hdXRob3JpemVkX3ByaW5jaXBhbHNfY29tbWFuZF91c2VyID0gTlVM TDsKLSsJb3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbCA9IC0xOwotKwlvcHRpb25zLT5ocG5fZGlz YWJsZWQgPSAtMTsKLSsJb3B0aW9ucy0+bm9uZV9lbmFibGVkID0gLTE7Ci0rCW9wdGlvbnMtPm5v bmVtYWNfZW5hYmxlZCA9IC0xOwotKwlvcHRpb25zLT51c2VfbXB0Y3AgPSAtMTsKLSsJb3B0aW9u cy0+ZGlzYWJsZV9tdWx0aXRocmVhZGVkID0gLTE7Ci0gCW9wdGlvbnMtPmlwX3Fvc19pbnRlcmFj dGl2ZSA9IC0xOwotIAlvcHRpb25zLT5pcF9xb3NfYnVsayA9IC0xOwotIAlvcHRpb25zLT52ZXJz aW9uX2FkZGVuZHVtID0gTlVMTDsKLUBAIC01MDcsNiArNTE0LDIyIEBACi0gCX0KLSAJaWYgKG9w dGlvbnMtPnBlcm1pdF90dW4gPT0gLTEpCi0gCQlvcHRpb25zLT5wZXJtaXRfdHVuID0gU1NIX1RV Tk1PREVfTk87Ci0rCWlmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gLTEpCi0rCQlvcHRpb25z LT5ub25lX2VuYWJsZWQgPSAwOwotKwlpZiAob3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID09IC0x KQotKwkJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0gMDsKLSsJaWYgKG9wdGlvbnMtPm5vbmVt YWNfZW5hYmxlZCA+IDAgJiYgb3B0aW9ucy0+bm9uZV9lbmFibGVkID09IDApIHsKLSsJCWRlYnVn ICgiQXR0ZW1wdGVkIHRvIGVuYWJsZWQgTm9uZSBNQUMgd2l0aG91dCBzZXR0aW5nIE5vbmUgRW5h YmxlZCB0byB0cnVlLiBOb25lIE1BQyBkaXNhYmxlZC4iKTsKLSsJCW9wdGlvbnMtPm5vbmVtYWNf ZW5hYmxlZCA9IDA7Ci0rCX0KLSsJaWYgKG9wdGlvbnMtPnRjcF9yY3ZfYnVmX3BvbGwgPT0gLTEp Ci0rCQlvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsID0gMTsKLSsJaWYgKG9wdGlvbnMtPmRpc2Fi bGVfbXVsdGl0aHJlYWRlZCA9PSAtMSkKLSsJCW9wdGlvbnMtPmRpc2FibGVfbXVsdGl0aHJlYWRl ZCA9IDA7Ci0rCWlmIChvcHRpb25zLT5ocG5fZGlzYWJsZWQgPT0gLTEpCi0rCQlvcHRpb25zLT5o cG5fZGlzYWJsZWQgPSAwOwotKwlpZiAob3B0aW9ucy0+dXNlX21wdGNwID09IC0xKQotKwkJb3B0 aW9ucy0+dXNlX21wdGNwID0gMDsKLSAJaWYgKG9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9 PSAtMSkKLSAJCW9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9IElQVE9TX0RTQ1BfRUY7Ci0g CWlmIChvcHRpb25zLT5pcF9xb3NfYnVsayA9PSAtMSkKLUBAIC01OTEsNiArNjE0LDggQEAKLSAJ c0tlcmJlcm9zR2V0QUZTVG9rZW4sIHNLZXJiZXJvc1VuaXF1ZUNDYWNoZSwgc0tlcmJlcm9zVXNl S3VzZXJvaywgc1Bhc3N3b3JkQXV0aGVudGljYXRpb24sCi0gCXNLYmRJbnRlcmFjdGl2ZUF1dGhl bnRpY2F0aW9uLCBzTGlzdGVuQWRkcmVzcywgc0FkZHJlc3NGYW1pbHksCi0gCXNQcmludE1vdGQs IHNQcmludExhc3RMb2csIHNJZ25vcmVSaG9zdHMsCi0rCXNOb25lRW5hYmxlZCwgc05vbmVNYWNF bmFibGVkLCBzVGNwUmN2QnVmUG9sbCwgc0hQTkRpc2FibGVkLAotKwlzRGlzYWJsZU1UQUVTLCBz VXNlTVBUQ1AsCi0gCXNYMTFGb3J3YXJkaW5nLCBzWDExRGlzcGxheU9mZnNldCwgc1gxMU1heERp c3BsYXlzLCBzWDExVXNlTG9jYWxob3N0LAotIAlzUGVybWl0VFRZLCBzU3RyaWN0TW9kZXMsIHNF bXB0eVBhc3N3ZCwgc1RDUEtlZXBBbGl2ZSwKLSAJc1Blcm1pdFVzZXJFbnZpcm9ubWVudCwgc0Fs bG93VGNwRm9yd2FyZGluZywgc0NvbXByZXNzaW9uLAotQEAgLTgwMCw2ICs4MjUsMTIgQEAKLSAJ eyAicmV2b2tlZGtleXMiLCBzUmV2b2tlZEtleXMsIFNTSENGR19BTEwgfSwKLSAJeyAidHJ1c3Rl ZHVzZXJjYWtleXMiLCBzVHJ1c3RlZFVzZXJDQUtleXMsIFNTSENGR19BTEwgfSwKLSAJeyAiYXV0 aG9yaXplZHByaW5jaXBhbHNmaWxlIiwgc0F1dGhvcml6ZWRQcmluY2lwYWxzRmlsZSwgU1NIQ0ZH X0FMTCB9LAotKwl7ICJocG5kaXNhYmxlZCIsIHNIUE5EaXNhYmxlZCwgU1NIQ0ZHX0FMTCB9LAot Kwl7ICJ0Y3ByY3ZidWZwb2xsIiwgc1RjcFJjdkJ1ZlBvbGwsIFNTSENGR19BTEwgfSwKLSsJeyAi bm9uZWVuYWJsZWQiLCBzTm9uZUVuYWJsZWQsIFNTSENGR19BTEwgfSwKLSsJeyAibm9uZW1hY2Vu YWJsZWQiLCBzTm9uZU1hY0VuYWJsZWQsIFNTSENGR19BTEwgfSwKLSsJeyAidXNlbXB0Y3AiLCBz VXNlTVBUQ1AsIFNTSENGR19HTE9CQUwgfSwKLSsJeyAiZGlzYWJsZU1UQUVTIiwgc0Rpc2FibGVN VEFFUywgU1NIQ0ZHX0FMTCB9LAotIAl7ICJrZXhhbGdvcml0aG1zIiwgc0tleEFsZ29yaXRobXMs IFNTSENGR19HTE9CQUwgfSwKLSAJeyAiaW5jbHVkZSIsIHNJbmNsdWRlLCBTU0hDRkdfQUxMIH0s Ci0gCXsgImlwcW9zIiwgc0lQUW9TLCBTU0hDRkdfQUxMIH0sCi1AQCAtODY1LDYgKzg5Niw3IEBA Ci0gCi0gCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldLm5hbWU7IGkrKykKLSAJCWlmIChzdHJjYXNl Y21wKGNwLCBrZXl3b3Jkc1tpXS5uYW1lKSA9PSAwKSB7Ci0rCQkJZGVidWcoIkNvbmZpZyB0b2tl biBpcyAlcyIsIGtleXdvcmRzW2ldLm5hbWUpOwotIAkJCSpmbGFncyA9IGtleXdvcmRzW2ldLmZs YWdzOwotIAkJCXJldHVybiBrZXl3b3Jkc1tpXS5vcGNvZGU7Ci0gCQl9Ci1AQCAtMTYzNiw2ICsx NjY4LDMxIEBACi0gCQltdWx0aXN0YXRlX3B0ciA9IG11bHRpc3RhdGVfaWdub3JlX3Job3N0czsK LSAJCWdvdG8gcGFyc2VfbXVsdGlzdGF0ZTsKLSAKLSsKLSsJY2FzZSBzVGNwUmN2QnVmUG9sbDoK LSsJCWludHB0ciA9ICZvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsOwotKwkJZ290byBwYXJzZV9m bGFnOwotKwotKwljYXNlIHNIUE5EaXNhYmxlZDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT5ocG5f ZGlzYWJsZWQ7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0rCWNhc2Ugc05vbmVFbmFibGVkOgot KwkJaW50cHRyID0gJm9wdGlvbnMtPm5vbmVfZW5hYmxlZDsKLSsJCWdvdG8gcGFyc2VfZmxhZzsK LSsKLSsJY2FzZSBzTm9uZU1hY0VuYWJsZWQ6Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+bm9uZW1h Y19lbmFibGVkOwotKwkJZ290byBwYXJzZV9mbGFnOwotKwotKwljYXNlIHNEaXNhYmxlTVRBRVM6 Ci0rCQlpbnRwdHIgPSAmb3B0aW9ucy0+ZGlzYWJsZV9tdWx0aXRocmVhZGVkOwotKwkJZ290byBw YXJzZV9mbGFnOwotKwotKwljYXNlIHNVc2VNUFRDUDoKLSsJCWludHB0ciA9ICZvcHRpb25zLT51 c2VfbXB0Y3A7Ci0rCQlnb3RvIHBhcnNlX2ZsYWc7Ci0rCi0gCWNhc2Ugc0lnbm9yZVVzZXJLbm93 bkhvc3RzOgotIAkJaW50cHRyID0gJm9wdGlvbnMtPmlnbm9yZV91c2VyX2tub3duX2hvc3RzOwot ICBwYXJzZV9mbGFnOgotQEAgLTM0MzksNiArMzQ5NiwxMSBAQAotIAlkdW1wX2NmZ19mbXRpbnQo c1N0cmVhbUxvY2FsQmluZFVubGluaywgby0+ZndkX29wdHMuc3RyZWFtbG9jYWxfYmluZF91bmxp bmspOwotIAlkdW1wX2NmZ19mbXRpbnQoc0ZpbmdlcnByaW50SGFzaCwgby0+ZmluZ2VycHJpbnRf aGFzaCk7Ci0gCWR1bXBfY2ZnX2ZtdGludChzRXhwb3NlQXV0aEluZm8sIG8tPmV4cG9zZV91c2Vy YXV0aF9pbmZvKTsKLSsJZHVtcF9jZmdfZm10aW50KHNIUE5EaXNhYmxlZCwgby0+aHBuX2Rpc2Fi bGVkKTsKLSsJZHVtcF9jZmdfZm10aW50KHNUY3BSY3ZCdWZQb2xsLCBvLT50Y3BfcmN2X2J1Zl9w b2xsKTsKLSsJZHVtcF9jZmdfZm10aW50KHNOb25lRW5hYmxlZCwgby0+bm9uZV9lbmFibGVkKTsK LSsJZHVtcF9jZmdfZm10aW50KHNOb25lTWFjRW5hYmxlZCwgby0+bm9uZW1hY19lbmFibGVkKTsK LSsJZHVtcF9jZmdfZm10aW50KHNVc2VNUFRDUCwgby0+dXNlX21wdGNwKTsKLSAJZHVtcF9jZmdf Zm10aW50KHNSZWZ1c2VDb25uZWN0aW9uLCBvLT5yZWZ1c2VfY29ubmVjdGlvbik7Ci0gCi0gCS8q IHN0cmluZyBhcmd1bWVudHMgKi8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NlcnZj b25mLmggb3BlbnNzaC0xMC4ycDEvc2VydmNvbmYuaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcv c2VydmNvbmYuaAkyMDI2LTAzLTE4IDE1OjEyOjAyLjAwNzc5ODc5MSArMDEwMAotKysrIG9wZW5z c2gtMTAuMnAxL3NlcnZjb25mLmgJMjAyNi0wMy0xOCAxNzoxMzozMS4yNjE4NTc4OTAgKzAxMDAK LUBAIC0yMjcsNiArMjI3LDE0IEBACi0gCWNoYXIgICAqcGFtX3NlcnZpY2VfbmFtZTsKLSAJaW50 CXBlcm1pdF9wYW1fdXNlcl9jaGFuZ2U7CS8qIEFsbG93IFBBTSB0byBjaGFuZ2UgdXNlciBuYW1l ICovCi0gCi0rCS8qIGhwbnNzaCBvcHRpb25zICovCi0rCWludAl0Y3BfcmN2X2J1Zl9wb2xsOwkv KiBwb2xsIHRjcCByY3Ygd2luZG93IGluIGF1dG90dW5pbmcga2VybmVscyovCi0rCWludAlocG5f ZGlzYWJsZWQ7CQkvKiBkaXNhYmxlIGhwbiBmdW5jdGlvbmFsaXR5LiBmYWxzZSBieSBkZWZhdWx0 ICovCi0rCWludAlub25lX2VuYWJsZWQ7CQkvKiBFbmFibGUgTk9ORSBjaXBoZXIgc3dpdGNoICov Ci0rCWludAlub25lbWFjX2VuYWJsZWQ7CS8qIEVuYWJsZSBOT05FIE1BQyBzd2l0Y2ggKi8KLSsJ aW50CXVzZV9tcHRjcDsJCS8qIFVzZSBNUFRDUCAtIExpbnV4IG9ubHkgKi8KLSsJaW50CWRpc2Fi bGVfbXVsdGl0aHJlYWRlZDsJLyogRGlzYWJsZSBtdWx0aXRocmVhZGVkIGFlcy1jdHIgY2lwaGVy ICovCi0rCi0gCWludAlwZXJtaXRfdHVuOwotIAotIAljaGFyICAgKipwZXJtaXR0ZWRfb3BlbnM7 CS8qIE1heSBhbHNvIGJlIG9uZSBvZiBQRVJNSVRPUEVOXyogKi8KLWRpZmYgLU51ciBvcGVuc3No LTEwLjJwMS5vcmlnL3NlcnZlcmxvb3AuYyBvcGVuc3NoLTEwLjJwMS9zZXJ2ZXJsb29wLmMKLS0t LSBvcGVuc3NoLTEwLjJwMS5vcmlnL3NlcnZlcmxvb3AuYwkyMDI2LTAzLTE4IDE1OjEyOjAxLjk4 NjA1OTY5NyArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NlcnZlcmxvb3AuYwkyMDI2LTAzLTE4 IDE1OjEzOjE3Ljg1NjQwNjEwNSArMDEwMAotQEAgLTc3LDYgKzc3LDggQEAKLSAjaW5jbHVkZSAi c2VydmVybG9vcC5oIgotICNpbmNsdWRlICJzc2hlcnIuaCIKLSAjaW5jbHVkZSAiY29tcGF0Lmgi Ci0rI2luY2x1ZGUgIm1ldHJpY3MuaCIKLSsjaW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgotIAot IGV4dGVybiBTZXJ2ZXJPcHRpb25zIG9wdGlvbnM7Ci0gCi1AQCAtMzM4LDYgKzM0MCw3IEBACi0g CXNpZ3NldF90IGJzaWdzZXQsIG9zaWdzZXQ7Ci0gCi0gCWRlYnVnKCJFbnRlcmluZyBpbnRlcmFj dGl2ZSBzZXNzaW9uIGZvciBTU0gyLiIpOwotKwlzc2gtPnN0YXJ0X3RpbWUgPSBtb25vdGltZV9k b3VibGUoKTsKLSAKLSAJaWYgKHNpZ2VtcHR5c2V0KCZic2lnc2V0KSA9PSAtMSB8fAotIAkgICAg c2lnYWRkc2V0KCZic2lnc2V0LCBTSUdDSExEKSA9PSAtMSkKLUBAIC0zOTIsOSArMzk1LDE1IEBA Ci0gCWNvbGxlY3RfY2hpbGRyZW4oc3NoKTsKLSAJZnJlZShwZmQpOwotIAotKwkvKiB3cml0ZSBm aW5hbCBsb2cgZW50cnkgKGRvIHdlIG5lZWQgdGhpcyBoZXJlPyAtY2pyKSovCi0rCXNzaHBrdF9m aW5hbF9sb2dfZW50cnkoc3NoKTsKLSsKLSAJLyogZnJlZSBhbGwgY2hhbm5lbHMsIG5vIG1vcmUg cmVhZHMgYW5kIHdyaXRlcyAqLwotIAljaGFubmVsX2ZyZWVfYWxsKHNzaCk7Ci0gCi0rCS8qIGZp bmFsIGVudHJ5IG11c3QgY29tZSBhZnRlciBjaGFubmVscyBjbG9zZSAtY2pyICovCi0rCXNzaHBr dF9maW5hbF9sb2dfZW50cnkoc3NoKTsKLSsKLSAJLyogZnJlZSByZW1haW5pbmcgc2Vzc2lvbnMs IGUuZy4gcmVtb3ZlIHd0bXAgZW50cmllcyAqLwotIAlzZXNzaW9uX2Rlc3Ryb3lfYWxsKHNzaCwg TlVMTCk7Ci0gfQotQEAgLTU5Niw2ICs2MDUsOCBAQAotIAljID0gY2hhbm5lbF9uZXcoc3NoLCAi c2Vzc2lvbiIsIFNTSF9DSEFOTkVMX0xBUlZBTCwKLSAJICAgIC0xLCAtMSwgLTEsIC8qd2luZG93 IHNpemUqLzAsIENIQU5fU0VTX1BBQ0tFVF9ERUZBVUxULAotIAkgICAgMCwgInNlcnZlci1zZXNz aW9uIiwgMSk7Ci0rCWlmICgob3B0aW9ucy50Y3BfcmN2X2J1Zl9wb2xsKSAmJiAoIW9wdGlvbnMu aHBuX2Rpc2FibGVkKSkKLSsJCWMtPmR5bmFtaWNfd2luZG93ID0gMTsKLSAJaWYgKHNlc3Npb25f b3Blbih0aGVfYXV0aGN0eHQsIGMtPnNlbGYpICE9IDEpIHsKLSAJCWRlYnVnKCJzZXNzaW9uIG9w ZW4gZmFpbGVkLCBmcmVlIGNoYW5uZWwgJWQiLCBjLT5zZWxmKTsKLSAJCWNoYW5uZWxfZnJlZShz c2gsIGMpOwotQEAgLTY2NCw2ICs2NzUsNjcgQEAKLSAJcmV0dXJuIDA7Ci0gfQotIAotKy8qIHdl IG5lZWQgdG8gZ2V0IHRoZSBhY3R1YWwgc29ja2V0IGluIHVzZSBhbmQgZnJvbSB0aGVyZQotKyAq IHJlYWQgdGhlIHZhbHVlcyBpbiB0aGUgVENQX0lORk8gc3RydWN0LgotKyAqIHNob3V0IG91dCB0 byBSZW5lIFBmaWZmZXIgZm9yIHRoZSBhcnRpY2xlIGh0dHBzOi8vbGludXhnYXpldHRlLm5ldC8x MzYvcGZlaWZmZXIuaHRtbAotKyAqIGZvciBnZXR0aW5nIG1lIHN0YXJ0ZWQuIFRoaXMgb25seSB3 b3JrcyBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGUgdGNwX2luZm8KLSsgKiBzdHJ1Y3Q7IGxp bnV4LCBmcmVlYnNkLCBuZXRic2QgYXMgb2Ygbm93LiBBcHBsZSBoYXMgb25lIGJ1dCBpdCdzIGNv bXBsZXRlbHkgZGlmZmVyZW50Ci0rICogdGhhbiBhbnkgb2YgdGhlIG90aGVycy4KLSsgKi8KLStz dGF0aWMgaW50Ci0rc2VydmVyX2lucHV0X21ldHJpY3NfcmVxdWVzdChzdHJ1Y3Qgc3NoICpzc2gs IHN0cnVjdCBzc2hidWYgKipyZXNwcCkKLSt7Ci0rCWludCBzdWNjZXNzID0gMDsKLSsJLyogVENQ X0lORk8gaXMgZGVmaW5lZCBpbiBtZXRyaWNzLmgKLSsJICogaWYgaXQncyBub3QgZGVmaW5lZCB0 aGVuIHdlIGRvbid0IHN1cHBvcnQgdGNwX2luZm8KLSsJICogc28ganVzdCByZXR1cm4gYSBmYWls dXJlIGNvZGUgKi8KLSsjaWYgIWRlZmluZWQgVENQX0lORk8KLSsJcmV0dXJuIHN1Y2Nlc3M7Ci0r I2Vsc2UKLSsJc3RydWN0IHRjcF9pbmZvIHRjcF9pbmZvOwotKwlzdHJ1Y3Qgc3NoYnVmICpyZXNw ID0gTlVMTDsKLSsJaW50IHRjcF9pbmZvX2xlbjsKLSsJLyogdGhpcyBpcyB0aGUgc29ja2V0IG9m IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KLSsJaW50IHNvY2tfaW4gPSBzc2hfcGFja2V0X2dl dF9jb25uZWN0aW9uX2luKHNzaCk7Ci0rCWludCByOwotKwliaW5uICptZXRyaWNzb2JqOwotKwot Kwl0Y3BfaW5mb19sZW4gPSBzaXplb2YodGNwX2luZm8pOyAvKmV4cGVjdCBhcm91bmQgMzMwIGJ5 dGVzICovCi0rCWlmICgocmVzcCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCkKLSsJCWZhdGFsX2Yo InNzaGJ1Zl9uZXciKTsKLSsKLSsJLyogY3JlYXRlIHRoZSBiaW5uIG9iamVjdCB0byBob2xkIHRo ZSBzZXJpYWxpemVkIG1ldHJpY3MgKi8KLSsJbWV0cmljc29iaiA9IGJpbm5fb2JqZWN0KCk7Ci0r CWlmIChtZXRyaWNzb2JqID09IE5VTEwpIHsKLSsJCWVycm9yX2YoIkNvdWxkIG5vdCBjcmVhdGUg bWV0cmljcyBvYmplY3QiKTsKLSsJCWdvdG8gb3V0OwotKwl9Ci0rCi0rCWRlYnVnKCJTdGFjayBt ZXRyaWNzIHJlcXVlc3QgZm9yIGNvbm5lY3Rpb24gJWQiLCBzb2NrX2luKTsKLSsJaWYgKChyID0g Z2V0c29ja29wdChzb2NrX2luLCBJUFBST1RPX1RDUCwgVENQX0lORk8sICh2b2lkICopJnRjcF9p bmZvLAotKwkJCSAgIChzb2NrbGVuX3QgKikmdGNwX2luZm9fbGVuKSkgIT0gMCkgewotKwkJZXJy b3JfZigiQ291bGQgbm90IHJlYWQgdGNwX2luZm8gZnJvbSBzb2NrZXQiKTsKLSsJCWdvdG8gb3V0 OwotKwl9Ci0rCS8qIHdyaXRlIHRoZSB0Y3BfaW5mbyBkYXRhIHRvIHRoZSBiaW5uIG9iamVjdCAq LwotKwltZXRyaWNzX3dyaXRlX2Jpbm5fb2JqZWN0KCZ0Y3BfaW5mbywgbWV0cmljc29iaik7Ci0r CWlmICgociA9IHNzaGJ1Zl9wdXRfc3RyaW5nKHJlc3AsIGJpbm5fcHRyKG1ldHJpY3NvYmopLAot KwkJCQkgICBiaW5uX3NpemUobWV0cmljc29iaikpKSAhPSAwKSB7Ci0rCQllcnJvcl9mcihyLCAi RmFpbGVkIHRvIGJ1aWxkIHRjcF9pbmZvIG9iamVjdCIpOwotKwkJZ290byBvdXQ7Ci0rCX0KLSsJ LyogY29weSB0aGUgcG9pbnRlciBvZiB0aGUgcmVzcG9uc2UgdG8gdGhlIHBhc3NlZCBpbiByZXNw b25zZSBwb2ludGVyICovCi0rCSpyZXNwcCA9IHJlc3A7Ci0rCXJlc3AgPSBOVUxMOyAvKiBkb24n dCBmcmVlIGl0ICovCi0rCS8qIGV2ZXJ5dGhpbmcgd29ya2VkIHNvIHNldCBzdWNjZXNzIHRvIHRy dWUgKi8KLSsJc3VjY2VzcyA9IDE7Ci0rb3V0OgotKwlzc2hidWZfZnJlZShyZXNwKTsKLSsJYmlu bl9mcmVlKG1ldHJpY3NvYmopOwotKwlyZXR1cm4gc3VjY2VzczsKLSsjZW5kaWYgLyogVENQX0lO Rk8gKi8KLSt9Ci0rCi0gc3RhdGljIGludAotIHNlcnZlcl9pbnB1dF9ob3N0a2V5c19wcm92ZShz dHJ1Y3Qgc3NoICpzc2gsIHN0cnVjdCBzc2hidWYgKipyZXNwcCkKLSB7Ci1AQCAtODQwLDYgKzkx MiwxMCBAQAotIAkJc3VjY2VzcyA9IDE7Ci0gCX0gZWxzZSBpZiAoc3RyY21wKHJ0eXBlLCAiaG9z dGtleXMtcHJvdmUtMDBAb3BlbnNzaC5jb20iKSA9PSAwKSB7Ci0gCQlzdWNjZXNzID0gc2VydmVy X2lucHV0X2hvc3RrZXlzX3Byb3ZlKHNzaCwgJnJlc3ApOwotKwl9IGVsc2UgaWYgKHN0cmNtcChy dHlwZSwgInN0YWNrLW1ldHJpY3NAaHBuc3NoLm9yZyIpID09IDApIHsKLSsJCS8qIHJlc3AgaXMg dGhlIHJlc3BvbnNlIChzc2hidWYgc3RydWN0KSBmcm9tIHRoZSBmdW5jdGlvbiB3aGljaCBpcwot KwkJICogaGFuZGxlZCBiZWxvdyBpbiB0aGUgd2FudF9yZXBseSBzdGFuemEgKi8KLSsJCXN1Y2Nl c3MgPSBzZXJ2ZXJfaW5wdXRfbWV0cmljc19yZXF1ZXN0KHNzaCwgJnJlc3ApOwotIAl9Ci0gCS8q IFhYWCBzc2hwa3RfZ2V0X2VuZCgpICovCi0gCWlmICh3YW50X3JlcGx5KSB7Ci1kaWZmIC1OdXIg b3BlbnNzaC0xMC4ycDEub3JpZy9zZXNzaW9uLmMgb3BlbnNzaC0xMC4ycDEvc2Vzc2lvbi5jCi0t LS0gb3BlbnNzaC0xMC4ycDEub3JpZy9zZXNzaW9uLmMJMjAyNi0wMy0xOCAxNToxMjowMS45NDE0 NzMwNDEgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9zZXNzaW9uLmMJMjAyNi0wMy0xOCAxNTox MzoxNy44NTY4MzIwODYgKzAxMDAKLUBAIC05MCw2ICs5MCw3IEBACi0gI2luY2x1ZGUgIm1vbml0 b3Jfd3JhcC5oIgotICNpbmNsdWRlICJzZnRwLmgiCi0gI2luY2x1ZGUgImF0b21pY2lvLmgiCi0r I2luY2x1ZGUgImNpcGhlci1zd2l0Y2guaCIKLSAKLSAjaWYgZGVmaW5lZChLUkI1KSAmJiBkZWZp bmVkKFVTRV9BRlMpCi0gI2luY2x1ZGUgPGthZnMuaD4KLUBAIC0yMTIsNiArMjEzLDcgQEAKLSAJ cmVzdG9yZV91aWQoKTsKLSAKLSAJLyogQWxsb2NhdGUgYSBjaGFubmVsIGZvciB0aGUgYXV0aGVu dGljYXRpb24gYWdlbnQgc29ja2V0LiAqLwotKwkvKiB0aGlzIHNob3VsZG4ndCBtYXR0ZXIgaWYg aXRzIGhwbiBvciBub3QgLSBjanIgKi8KLSAJbmMgPSBjaGFubmVsX25ldyhzc2gsICJhdXRoLWxp c3RlbmVyIiwKLSAJICAgIFNTSF9DSEFOTkVMX0FVVEhfU09DS0VULCBzb2NrLCBzb2NrLCAtMSwK LSAJICAgIENIQU5fWDExX1dJTkRPV19ERUZBVUxULCBDSEFOX1gxMV9QQUNLRVRfREVGQVVMVCwK LUBAIC0zNzQsNiArMzc2LDcgQEAKLSBkb19leGVjX25vX3B0eShzdHJ1Y3Qgc3NoICpzc2gsIFNl c3Npb24gKnMsIGNvbnN0IGNoYXIgKmNvbW1hbmQpCi0gewotIAlwaWRfdCBwaWQ7Ci0rCWludCBm aXBzID0gMDsKLSAjaWZkZWYgVVNFX1BJUEVTCi0gCWludCBwaW5bMl0sIHBvdXRbMl0sIHBlcnJb Ml07Ci0gCi1AQCAtNTI5LDYgKzUzMiwxNyBAQAotIAlzZXNzaW9uX3NldF9mZHMoc3NoLCBzLCBp bm91dFsxXSwgaW5vdXRbMV0sIGVyclsxXSwKLSAJICAgIHMtPmlzX3N1YnN5c3RlbSwgMCk7Ci0g I2VuZGlmCi0rCS8qIHN3aXRjaCB0byB0aGUgcGFyYWxsZWwgY2lwaGVycyBpZiBuZWNlc3NhcnkK LSsJICogSWYgRklQUyBtb2RlIGV4aXN0cyBhbmQgaXMgZW5hYmxlZCB0aGVuIG5vIHBhcmFsbGVs IGNpcGhlcnMuCi0rCSAqLwotKwlmaXBzID0gZmlwc19lbmFibGVkKCk7Ci0rCWlmIChmaXBzKQot KwkJZGVidWcyX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBk aXNhYmxlZCIpOwotKwllbHNlCi0rCQlkZWJ1ZzJfZigiRklQUyBtb2RlIG5vdCBmb3VuZCBvciBk aXNhYmxlZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZW5hYmxlZCIpOwotKwotKwlpZiAoKG9wdGlv bnMuZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IDApICYmIChmaXBzID09IDApKQotKwkJY2lwaGVy X3N3aXRjaChzc2gpOwotIAlyZXR1cm4gMDsKLSB9Ci0gCi1AQCAtNTQzLDYgKzU1Nyw3IEBACi0g ewotIAlpbnQgZmRvdXQsIHB0eWZkLCB0dHlmZCwgcHR5bWFzdGVyOwotIAlwaWRfdCBwaWQ7Ci0r CWludCBmaXBzID0gMDsKLSAKLSAJaWYgKHMgPT0gTlVMTCkKLSAJCWZhdGFsKCJkb19leGVjX3B0 eTogbm8gc2Vzc2lvbiIpOwotQEAgLTY0MCw2ICs2NTUsMTcgQEAKLSAJLyogRW50ZXIgaW50ZXJh Y3RpdmUgc2Vzc2lvbi4gKi8KLSAJcy0+cHR5bWFzdGVyID0gcHR5bWFzdGVyOwotIAlzZXNzaW9u X3NldF9mZHMoc3NoLCBzLCBwdHlmZCwgZmRvdXQsIC0xLCAxLCAxKTsKLSsJLyogc3dpdGNoIHRv IHRoZSBwYXJhbGxlbCBjaXBoZXIgaWYgYXBwcm9wcmlhdGUKLSsJICogSWYgRklQUyBtb2RlIGV4 aXN0cyBhbmQgaXMgZW5hYmxlZCB0aGVuIG5vIHBhcmFsbGVsIGNpcGhlcnMuCi0rCSAqLwotKwlm aXBzID0gZmlwc19lbmFibGVkKCk7Ci0rCWlmIChmaXBzKQotKwkJZGVidWcyX2YoIkZJUFMgbW9k ZSBpcyBlbmFibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBkaXNhYmxlZCIpOwotKwllbHNlCi0r CQlkZWJ1ZzJfZigiRklQUyBtb2RlIG5vdCBmb3VuZCBvciBkaXNhYmxlZC4gUGFyYWxsZWwgY2lw aGVycyBhcmUgZW5hYmxlZCIpOwotKwotKwlpZiAoKG9wdGlvbnMuZGlzYWJsZV9tdWx0aXRocmVh ZGVkID09IDApICYmIChmaXBzID09IDApKQotKwkJY2lwaGVyX3N3aXRjaChzc2gpOwotIAlyZXR1 cm4gMDsKLSB9Ci0gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9zZnRwLjEgb3BlbnNz aC0xMC4ycDEvc2Z0cC4xCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9zZnRwLjEJMjAyNS0xMC0x MCAwNDozODozMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9zZnRwLjEJMjAy Ni0wMy0xOCAxNzoxODoxMy4wMzgwNDMyNzYgKzAxMDAKLUBAIC01NSw2ICs1NSw5IEBACi0gdHJh bnNwb3J0LgotIEl0IG1heSBhbHNvIHVzZSBtYW55IGZlYXR1cmVzIG9mIHNzaCwgc3VjaCBhcyBw dWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uIGFuZAotIGNvbXByZXNzaW9uLgotKy5ObQotK2lzIGJp bmFyeSBjb21wYXRpYmxlIHdpdGggT3BlblNTSCdzIHNmdHAgYW5kIHVzZXMgdGhlIHNhbWUgZGly ZWN0aXZlIGFuZCBjb25maWd1cmF0aW9uCi0rb3B0aW9ucyBleGNlcHQgd2hlcmUgbm90ZWQuCi0g LlBwCi0gVGhlCi0gLkFyIGRlc3RpbmF0aW9uCi1AQCAtMzE5LDYgKzMyMiw3IEBACi0gLkl0IFR1 bm5lbAotIC5JdCBUdW5uZWxEZXZpY2UKLSAuSXQgVXBkYXRlSG9zdEtleXMKLSsuSXQgVXNlTVBU Q1AKLSAuSXQgVXNlcgotIC5JdCBVc2VyS25vd25Ib3N0c0ZpbGUKLSAuSXQgVmVyaWZ5SG9zdEtl eUROUwotQEAgLTMzOCw3ICszNDIsOCBAQAotIFNwZWNpZnkgaG93IG1hbnkgcmVxdWVzdHMgbWF5 IGJlIG91dHN0YW5kaW5nIGF0IGFueSBvbmUgdGltZS4KLSBJbmNyZWFzaW5nIHRoaXMgbWF5IHNs aWdodGx5IGltcHJvdmUgZmlsZSB0cmFuc2ZlciBzcGVlZAotIGJ1dCB3aWxsIGluY3JlYXNlIG1l bW9yeSB1c2FnZS4KLS1UaGUgZGVmYXVsdCBpcyA2NCBvdXRzdGFuZGluZyByZXF1ZXN0cy4KLStU aGUgZGVmYXVsdCBpcyAxMDI0IG91dHN0YW5kaW5nIHJlcXVlc3RzIHByb3ZpZGluZyBmb3IgMzJN QgotK29mIG91dHN0YW5kaW5nIGRhdGEgd2l0aCBhIDMyS0IgYnVmZmVyLgotIC5JdCBGbCByCi0g UmVjdXJzaXZlbHkgY29weSBlbnRpcmUgZGlyZWN0b3JpZXMgd2hlbiB1cGxvYWRpbmcgYW5kIGRv d25sb2FkaW5nLgotIE5vdGUgdGhhdAotQEAgLTM2NywxMCArMzcyLDEzIEBACi0gLkl0IENtIG5y ZXF1ZXN0cyBOcyA9IE5zIEFyIHZhbHVlCi0gQ29udHJvbHMgaG93IG1hbnkgY29uY3VycmVudCBT RlRQIHJlYWQgb3Igd3JpdGUgcmVxdWVzdHMgbWF5IGJlIGluIHByb2dyZXNzCi0gYXQgYW55IHBv aW50IGluIHRpbWUgZHVyaW5nIGEgZG93bmxvYWQgb3IgdXBsb2FkLgotLUJ5IGRlZmF1bHQgNjQg cmVxdWVzdHMgbWF5IGJlIGFjdGl2ZSBjb25jdXJyZW50bHkuCi0rVGhpcyB2YWx1ZSBtdXN0IGJl IGJldHdlZW4gMSBhbmQgODE5Mi4KLStCeSBkZWZhdWx0IDEwMjQgcmVxdWVzdHMgbWF5IGJlIGFj dGl2ZSBjb25jdXJyZW50bHkuCi0gLkl0IENtIGJ1ZmZlciBOcyA9IE5zIEFyIHZhbHVlCi0gQ29u dHJvbHMgdGhlIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIGEgc2luZ2xlIFNGVFAgcmVhZC93cml0 ZSBvcGVyYXRpb24gdXNlZAotIGR1cmluZyBkb3dubG9hZCBvciB1cGxvYWQuCi0rVGhpcyB2YWx1 ZSBtdXN0IGJlIGJldHdlZW4gMUIgYW5kIDI1NUtCLiBZb3UgbWF5IHVzZQotK3RoZSBLIHVuaXQg Zm9yIHRoZSBzaXplLiBFLmcuIDMyNzY4IG9yIDMySy4KLSBCeSBkZWZhdWx0IGEgMzJLQiBidWZm ZXIgaXMgdXNlZC4KLSAuRWwKLSAuRWwKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3Nm dHAuYyBvcGVuc3NoLTEwLjJwMS9zZnRwLmMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL3NmdHAu YwkyMDI2LTAzLTE4IDE1OjEyOjAxLjY5NzAxMzg1MSArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAx L3NmdHAuYwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg1Nzg0MDQ4MCArMDEwMAotQEAgLTI1NjQsMjAg KzI1NjQsMjUgQEAKLSAJCQkvKiBQbGVhc2Uga2VlcCBpbiBzeW5jIHdpdGggc3NoLmMgLVggKi8K LSAJCQlpZiAoc3RybmNtcChvcHRhcmcsICJidWZmZXI9IiwgNykgPT0gMCkgewotIAkJCQlyID0g c2Nhbl9zY2FsZWQob3B0YXJnICsgNywgJmxsdik7Ci0tCQkJCWlmIChyID09IDAgJiYgKGxsdiA8 PSAwIHx8IGxsdiA+IDI1NiAqIDEwMjQpKSB7Ci0rCQkJCS8qIGRvbid0IGFzayBmb3IgYSBidWZm ZXIgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0KLSsJCQkJICogc2l6ZSB0aGF0IFNGVFAgY2FuIGhh bmRsZSAqLwotKwkJCQlpZiAociA9PSAwICYmIChsbHYgPD0gMCB8fCBsbHYgPiAoU0ZUUF9NQVhf TVNHX0xFTkdUSCAtIDEwMjQpKSkgewotIAkJCQkJciA9IC0xOwotIAkJCQkJZXJybm8gPSBFSU5W QUw7Ci0gCQkJCX0KLSAJCQkJaWYgKHIgPT0gLTEpIHsKLS0JCQkJCWZhdGFsKCJJbnZhbGlkIGJ1 ZmZlciBzaXplIFwiJXNcIjogJXMiLAotLQkJCQkJICAgICBvcHRhcmcgKyA3LCBzdHJlcnJvcihl cnJubykpOwotKwkJCQkJZmF0YWwoIkludmFsaWQgYnVmZmVyIHNpemUuIE11c3QgYmUgYmV0d2Vl biAxQiBhbmQgMjU1S0IuIgotKwkJCQkJICAgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyA3LCBz dHJlcnJvcihlcnJubykpOwotIAkJCQl9Ci0gCQkJCWNvcHlfYnVmZmVyX2xlbiA9IChzaXplX3Qp bGx2OwotIAkJCX0gZWxzZSBpZiAoc3RybmNtcChvcHRhcmcsICJucmVxdWVzdHM9IiwgMTApID09 IDApIHsKLS0JCQkJbGx2ID0gc3RydG9udW0ob3B0YXJnICsgMTAsIDEsIDI1NiAqIDEwMjQsCi0r CQkJCS8qIG1vcmUgdGhhbiAxMGsgdG8gMTVrIHJlcXVlc3RzIHN0YXJ0cyBzdGFsbGluZyB0aGUg Y29ubmVjdGlvbgotKwkJCQkgKiA4MTkyICogZGVmYXVsdCBidWZmZXIgc2l6ZSBpcyAyNTZNQiBv ZiBvdXRzdGFuZGluZyBkYXRhLgotKwkJCQkgKiBpZiB1c2VycyBuZWVkIG1vcmUgdGhlbiB0aGV5 IG5lZWQgdG8gdXAgdGhlIGJ1ZmZlciBzaXplICovCi0rCQkJCWxsdiA9IHN0cnRvbnVtKG9wdGFy ZyArIDEwLCAxLCA4ICogMTAyNCwKLSAJCQkJICAgICZlcnJzdHIpOwotIAkJCQlpZiAoZXJyc3Ry ICE9IE5VTEwpIHsKLS0JCQkJCWZhdGFsKCJJbnZhbGlkIG51bWJlciBvZiByZXF1ZXN0cyAiCi0r CQkJCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMuIE11c3QgYmUgYmV0d2VlbiAx IGFuZCA4MTkyLiAiCi0gCQkJCQkgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyAxMCwgZXJyc3Ry KTsKLSAJCQkJfQotIAkJCQludW1fcmVxdWVzdHMgPSAoc2l6ZV90KWxsdjsKLWRpZmYgLU51ciBv cGVuc3NoLTEwLjJwMS5vcmlnL3NmdHAtY2xpZW50LmMgb3BlbnNzaC0xMC4ycDEvc2Z0cC1jbGll bnQuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvc2Z0cC1jbGllbnQuYwkyMDI2LTAzLTE4IDE1 OjEyOjAxLjY5NjY0MzMwMCArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NmdHAtY2xpZW50LmMJ MjAyNi0wMy0xOCAxNToxMzoxNy44NTgzMzA1MDAgKzAxMDAKLUBAIC02Miw3ICs2Miw4IEBACi0g I2RlZmluZSBERUZBVUxUX0NPUFlfQlVGTEVOCTMyNzY4Ci0gCi0gLyogRGVmYXVsdCBudW1iZXIg b2YgY29uY3VycmVudCB4ZmVyIHJlcXVlc3RzIChmaXggc2Z0cC4xIHNjcC4xIGlmIGNoYW5nZWQp ICovCi0tI2RlZmluZSBERUZBVUxUX05VTV9SRVFVRVNUUwk2NAotKy8qIDEwMjQgeGZlciByZXF1 ZXN0cyBnaXZlcyB1cyAzMk1CIG9mIHJlY2VpdmUgYnVmZmVyIHNwYWNlICovCi0rI2RlZmluZSBE RUZBVUxUX05VTV9SRVFVRVNUUwkxMDI0Ci0gCi0gLyogTWluaW11bSBhbW91bnQgb2YgZGF0YSB0 byByZWFkIGF0IGEgdGltZSAqLwotICNkZWZpbmUgTUlOX1JFQURfU0laRQk1MTIKLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaC4xIG9wZW5zc2gtMTAuMnAxL3NzaC4xCi0tLS0gb3Bl bnNzaC0xMC4ycDEub3JpZy9zc2guMQkyMDI2LTAzLTE4IDE1OjEyOjAyLjAwODA1MTA3MiArMDEw MAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaC4xCTIwMjYtMDMtMTggMTU6MTM6MTcuODU4ODA1OTI4 ICswMTAwCi1AQCAtNzcsNiArNzcsMTQgQEAKLSBYMTEgY29ubmVjdGlvbnMsIGFyYml0cmFyeSBU Q1AgcG9ydHMgYW5kCi0gLlV4IE5zIC1kb21haW4KLSBzb2NrZXRzIGNhbiBhbHNvIGJlIGZvcndh cmRlZCBvdmVyIHRoZSBzZWN1cmUgY2hhbm5lbC4KLSsuTm0KLStpcyBiaW5hcnkgY29tcGF0aWJs ZSB3aXRoIHRoZSBtb3JlIHdlbGwga25vd24gT3BlblNTSCBhbmQgdXNlcyB0aGUgc2FtZSBjb25m aWd1cmF0aW9uCi0rZGlyZWN0aXZlcywgbWV0aG9kcywgYW5kIGtleXdvcmRzIGV4Y2VwdCB3aGVy ZSBub3RlZCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGRlZmF1bHQgcG9ydC4KLStIUE4tU1NI IHNlcnZlcnMsIGJ5IGRlZmF1bHQsIHVzZSBwb3J0IDIyMjIgZm9yIGNvbm5lY3Rpb24sIGFuZCBh cyBzdWNoLAotKy5ObQotK2NsaWVudHMKLSthdHRlbXB0IHRvIGNvbm5lY3Qgb24gdGhhdCBwb3J0 LiBJZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IG9uIHBvcnQgMjIyMiBmYWlscyBpdCB3aWxsIGZh bGxiYWNrIHRvCi0rcG9ydCAyMi4gUGxlYXNlIHNlZSB0aGUgLXAgc3dpdGNoIGZvciBtb3JlIGlu Zm9ybWF0aW9uLgotIC5QcAotIC5ObQotIGNvbm5lY3RzIGFuZCBsb2dzIGludG8gdGhlIHNwZWNp ZmllZAotQEAgLTUyNywxMiArNTM1LDE0IEBACi0gLkl0IENvbnRyb2xNYXN0ZXIKLSAuSXQgQ29u dHJvbFBhdGgKLSAuSXQgQ29udHJvbFBlcnNpc3QKLSsuSXQgRGlzYWJsZU1UQUVTKgotIC5JdCBE eW5hbWljRm9yd2FyZAotIC5JdCBFbmFibGVTU0hLZXlzaWduCi0gLkl0IEVuYWJsZUVzY2FwZUNv bW1hbmRsaW5lCi0gLkl0IEVuYWJsZVNTSEtleXNpZ24KLSAuSXQgRXNjYXBlQ2hhcgotIC5JdCBF eGl0T25Gb3J3YXJkRmFpbHVyZQotKy5JdCBGYWxsYmFja1BvcnQKLSAuSXQgRmluZ2VycHJpbnRI YXNoCi0gLkl0IEZvcmtBZnRlckF1dGhlbnRpY2F0aW9uCi0gLkl0IEZvcndhcmRBZ2VudAotQEAg LTU0NSw2ICs1NTUsOCBAQAotIC5JdCBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzCi0gLkl0IEdh dGV3YXlQb3J0cwotIC5JdCBHbG9iYWxLbm93bkhvc3RzRmlsZQotKy5JdCBIYXBweUV5ZXMKLSsu SXQgSGFwcHlEZWxheQotIC5JdCBHU1NBUElLZXhBbGdvcml0aG1zCi0gLkl0IEdTU0FQSVJlbmV3 YWxGb3JjZXNSZWtleQotIC5JdCBHU1NBUElTZXJ2ZXJJZGVudGl0eQotQEAgLTU1Niw2ICs1Njgs NyBAQAotIC5JdCBIb3N0YmFzZWRBY2NlcHRlZEFsZ29yaXRobXMKLSAuSXQgSG9zdGJhc2VkQXV0 aGVudGljYXRpb24KLSAuSXQgSG9zdG5hbWUKLSsuSXQgSFBORGlzYWJsZWQqCi0gLkl0IElQUW9T Ci0gLkl0IElkZW50aXRpZXNPbmx5Ci0gLkl0IElkZW50aXR5QWdlbnQKLUBAIC01NzEsNyArNTg0 LDEzIEBACi0gLkl0IExvZ0xldmVsCi0gLkl0IExvZ1ZlcmJvc2UKLSAuSXQgTUFDcwotKy5JdCBN ZXRyaWNzCi0rLkl0IE1ldHJpY3NJbnRlcnZhbAotKy5JdCBNZXRyaWNzUGF0aAotIC5JdCBOb0hv c3RBdXRoZW50aWNhdGlvbkZvckxvY2FsaG9zdAotKy5JdCBOb25lQ2lwaGVyRW5hYmxlZCoKLSsu SXQgTm9uZUVuYWJsZWQqCi0rLkl0IE5vbmVNYWNFbmFibGVkKgotIC5JdCBOdW1iZXJPZlBhc3N3 b3JkUHJvbXB0cwotIC5JdCBPYnNjdXJlS2V5c3Ryb2tlVGltaW5nCi0gLkl0IFBLQ1MxMVByb3Zp ZGVyCi1AQCAtNjA1LDE1ICs2MjQsMTkgQEAKLSAuSXQgU3RyaWN0SG9zdEtleUNoZWNraW5nCi0g Lkl0IFN5c2xvZ0ZhY2lsaXR5Ci0gLkl0IFRDUEtlZXBBbGl2ZQotKy5JdCBUY3BSY3ZCdWZQb2xs KgotIC5JdCBUYWcKLSAuSXQgVHVubmVsCi0gLkl0IFR1bm5lbERldmljZQotIC5JdCBVcGRhdGVI b3N0S2V5cwotKy5JdCBVc2VNUFRDUAotIC5JdCBVc2VyCi0gLkl0IFVzZXJLbm93bkhvc3RzRmls ZQotIC5JdCBWZXJpZnlIb3N0S2V5RE5TCi0gLkl0IFZpc3VhbEhvc3RLZXkKLSAuSXQgWEF1dGhM b2NhdGlvbgotKy5QcAotKy5JdCAqIEhwbnNzaCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlv bi4KLSAuRWwKLSAuUHAKLSAuSXQgRmwgUCBBciB0YWcKLUBAIC02MzAsNiArNjUzLDEzIEBACi0g UG9ydCB0byBjb25uZWN0IHRvIG9uIHRoZSByZW1vdGUgaG9zdC4KLSBUaGlzIGNhbiBiZSBzcGVj aWZpZWQgb24gYQotIHBlci1ob3N0IGJhc2lzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCi0r SFBOLVNTSCB1c2VzIGEgZGVmYXVsdCBwb3J0IG9mIDIyMjIuIEl0IHdpbGwgYXV0b21hdGljYWxs eQotK2ZhbGxiYWNrIHRvIHVzZSB0aGUgU1NIIHN0YW5kYXJkIHBvcnQgMjIgaWYgaXQgY2Fubm90 IGNvbm5lY3QKLStvbiBwb3J0IDIyMjIuIFRoaXMgZmFsbGJhY2sgYmVoYXZpb3VyIGNhbiBiZSBt b2RpZmllZCB3aXRoIHRoZQotK0ZhbGxiYWNrUG9ydCBvcHRpb24uIE5vdGU6IGlmIG91dGJvdW5k IHBvcnQgMjIyMiBpcwotK2Jsb2NrZWQgaXQgbWF5IGFwcGVhciB0aGF0IHRoZSBocG5zc2ggY2xp ZW50IGlzIG5vbi1yZXNwb25zaXZlLiBJbiB0aGF0IGV2ZW50LAotK2VpdGhlciBzcGVjaWZ5IHRo ZSBjb3JyZWN0IHBvcnQgb3IgdXNlIHRoZSBDb25uZWN0VGltZW91dCBvcHRpb24KLSt0byB0cmln Z2VyIHRoZSBwb3J0IGZhbGxiYWNrIG1vcmUgcXVpY2tseS4KLSAuUHAKLSAuSXQgRmwgUSBBciBx dWVyeV9vcHRpb24KLSBRdWVyaWVzIGZvciB0aGUgYWxnb3JpdGhtcyBzdXBwb3J0ZWQgYnkgb25l IG9mIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6Ci1AQCAtMTgyMSwzICsxODUxLDcgQEAKLSBjcmVh dGVkIE9wZW5TU0guCi0gTWFya3VzIEZyaWVkbCBjb250cmlidXRlZCB0aGUgc3VwcG9ydCBmb3Ig U1NICi0gcHJvdG9jb2wgdmVyc2lvbnMgMS41IGFuZCAyLjAuCi0rQ2hyaXMgUmFwaWVyLCBNaWNo YWVsIFN0ZXZlbnMsIEJlbiBCZW5uZXQsIGFuZCBNaWtlIFRhc290YSBkZXZlbG9wZWQKLSt0aGUg SFBOIGV4dGVuc2lvbnMgYXQgdGhlIFBpdHRzYnVyZ2ggU3VwZXJjb211dGluZyBDZW50ZXIgd2l0 aCBncmFudHMKLStmcm9tIENpc2NvLCB0aGUgTmF0aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZSwg YW5kIHRoZSBOYXRpb25hbCBTY2llbmNlCi0rRm91bmRhdGlvbi4KLWRpZmYgLU51ciBvcGVuc3No LTEwLjJwMS5vcmlnL3NzaF9hcGkuYyBvcGVuc3NoLTEwLjJwMS9zc2hfYXBpLmMKLS0tLSBvcGVu c3NoLTEwLjJwMS5vcmlnL3NzaF9hcGkuYwkyMDI2LTAzLTE4IDE1OjEyOjAxLjkxNDUyNDcyOSAr MDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaF9hcGkuYwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg1 OTExNTU5OCArMDEwMAotQEAgLTQzMSw3ICs0MzEsNyBAQAotIAljaGFyICpjcDsKLSAJaW50IHI7 Ci0gCi0tCWlmICgociA9IHNzaGJ1Zl9wdXRmKGJhbm5lciwgIlNTSC0yLjAtJS4xMDBzXHJcbiIs IFNTSF9WRVJTSU9OKSkgIT0gMCkKLSsJaWYgKChyID0gc3NoYnVmX3B1dGYoYmFubmVyLCAiU1NI LTIuMC0lLjEwMHNcclxuIiwgU1NIX1JFTEVBU0UpKSAhPSAwKQotIAkJcmV0dXJuIHI7Ci0gCWlm ICgociA9IHNzaGJ1Zl9wdXRiKHNzaF9wYWNrZXRfZ2V0X291dHB1dChzc2gpLCBiYW5uZXIpKSAh PSAwKQotIAkJcmV0dXJuIHI7Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9zc2hidWYu YyBvcGVuc3NoLTEwLjJwMS9zc2hidWYuYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3NoYnVm LmMJMjAyNS0xMC0xMCAwNDozODozMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NoLTEwLjJw MS9zc2hidWYuYwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg1OTMzMDUyNSArMDEwMAotQEAgLTI3LDYg KzI3LDkgQEAKLSAjZGVmaW5lIFNTSEJVRl9JTlRFUk5BTAotICNpbmNsdWRlICJzc2hidWYuaCIK LSAjaW5jbHVkZSAibWlzYy5oIgotKy8qICNpbmNsdWRlICJsb2cuaCIgKi8KLSsKLSsjZGVmaW5l IEJVRl9XQVRFUlNIRUQgMjU2KjEwMjQKLSAKLSAjaWZkZWYgU1NIQlVGX0RFQlVHCi0gIyBkZWZp bmUgU1NIQlVGX1RFTEwod2hhdCkgZG8geyBcCi1AQCAtNDksOCArNTIsMjkgQEAKLSAJaW50IHJl YWRvbmx5OwkJLyogUmVmZXJzIHRvIGV4dGVybmFsLCBjb25zdCBkYXRhICovCi0gCXVfaW50IHJl ZmNvdW50OwkJLyogVHJhY2tzIHNlbGYgYW5kIG51bWJlciBvZiBjaGlsZCBidWZmZXJzICovCi0g CXN0cnVjdCBzc2hidWYgKnBhcmVudDsJLyogSWYgY2hpbGQsIHBvaW50ZXIgdG8gcGFyZW50ICov Ci0rCWNoYXIgbGFiZWxbTUFYX0xBQkVMX0xFTl07ICAgLyogU3RyaW5nIGZvciBidWZmZXIgbGFi ZWwgLSBkZWJ1Z2dpbmcgdXNlICovCi0rCWludCB0eXBlOyAgICAgICAgICAgICAgIC8qIHR5cGUg b2YgYnVmZmVyIGVudW0gKHNzaGJ1Zl90eXBlcykqLwotIH07Ci0gCi0rLyogdXBkYXRlIHRoZSBs YWJlbCBzdHJpbmcgZm9yIGEgZ2l2ZW4gc3NoYnVmLiBVc2VmdWwKLSsgKiBmb3IgZGVidWdnaW5n ICovCi0rdm9pZAotK3NzaGJ1Zl9yZWxhYmVsKHN0cnVjdCBzc2hidWYgKmJ1ZiwgY29uc3QgY2hh ciAqbGFiZWwpCi0rewotKwlpZiAobGFiZWwgIT0gTlVMTCkKLSsJCXN0cm5jcHkoYnVmLT5sYWJl bCwgbGFiZWwsIE1BWF9MQUJFTF9MRU4tMSk7Ci0rfQotKwotKy8qIHNldCB0aGUgdHlwZSAoZnJv bSBlbnVtIHNzaGJ1Zl90eXBlKSBvZiB0aGUgZ2l2ZW4gc3NoYnVmLgotKyAqIFRoZSBwdXJwb3Nl IGlzIHRvIGFsbG93IGRpZmZlcmVudCBjbGFzc2VzIG9mIGJ1ZmZlcnMgdG8KLSsgKiBmb2xsb3cg ZGlmZmVyZW50IGNvZGUgcGF0aHMgaWYgbmVjZXNzYXJ5ICovCi0rdm9pZAotK3NzaGJ1Zl90eXBl KHN0cnVjdCBzc2hidWYgKmJ1ZiwgaW50IHR5cGUpCi0rewotKwlpZiAodHlwZSA8IEJVRl9NQVhf VFlQRSkKLSsJCWJ1Zi0+dHlwZSA9IHR5cGU7Ci0rfQotKwotIHN0YXRpYyBpbmxpbmUgaW50Ci0g c3NoYnVmX2NoZWNrX3Nhbml0eShjb25zdCBzdHJ1Y3Qgc3NoYnVmICpidWYpCi0gewotQEAgLTkw LDcgKzExNCw3IEBACi0gfQotIAotIHN0cnVjdCBzc2hidWYgKgotLXNzaGJ1Zl9uZXcodm9pZCkK LStzc2hidWZfbmV3X2xhYmVsIChjb25zdCBjaGFyICpsYWJlbCkKLSB7Ci0gCXN0cnVjdCBzc2hi dWYgKnJldDsKLSAKLUBAIC0xMDEsNiArMTI1LDggQEAKLSAJcmV0LT5yZWFkb25seSA9IDA7Ci0g CXJldC0+cmVmY291bnQgPSAxOwotIAlyZXQtPnBhcmVudCA9IE5VTEw7Ci0rCWlmIChsYWJlbCAh PSBOVUxMKQotKwkJc3RybmNweShyZXQtPmxhYmVsLCBsYWJlbCwgTUFYX0xBQkVMX0xFTi0xKTsK LSAJaWYgKChyZXQtPmNkID0gcmV0LT5kID0gY2FsbG9jKDEsIHJldC0+YWxsb2MpKSA9PSBOVUxM KSB7Ci0gCQlmcmVlKHJldCk7Ci0gCQlyZXR1cm4gTlVMTDsKLUBAIC0yOTAsNyArMzE2LDE4IEBA Ci0gewotIAlpZiAoc3NoYnVmX2NoZWNrX3Nhbml0eShidWYpICE9IDAgfHwgYnVmLT5yZWFkb25s eSB8fCBidWYtPnJlZmNvdW50ID4gMSkKLSAJCXJldHVybiAwOwotLQlyZXR1cm4gYnVmLT5tYXhf c2l6ZSAtIChidWYtPnNpemUgLSBidWYtPm9mZik7Ci0rCS8qIHdlIG5lZWQgdG8gcmVzZXJ2ZSBh IHNtYWxsIGFtb3VudCBvZiBvdmVyaGVhZCBvbiB0aGUgaW5wdXQgYnVmZmVyCi0rCSAqIG9yIHdl IGNhbiBlbnRlciBpbnRvIGEgcGF0aG9sb2dpY2FsIHN0YXRlIGR1cmluZyBidWxrCi0rCSAqIGRh dGEgdHJhbnNmZXJzLiBXZSB1c2UgYSBmcmFjdGlvbiBvZiB0aGUgbWF4IHNpemUgYXMgd2Ugd2Fu dCBpdCB0byBzY2FsZQotKwkgKiB3aXRoIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBidWZmZXIuIElm IHdlIGRvIGl0IGZvciBhbGwgb2YgdGhlIGJ1ZmZlcnMKLSsJICogd2UgZmFpbCB0aGUgcmVncmVz c2lvbiB1bml0IHRlc3RzLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlCi0rCSAqIHNvbHV0 aW9uLiBPZiBjb3Vyc2UsIEkgc3RpbGwgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgaXMK LSsJICogaGFwcGVuaW5nIGFuZCBjb21lIHVwIHdpdGggYW4gYWN0dWFsIGZpeC4gVE9ETwotKwkg KiBjanIgNC8xOS8yMDI0ICovCi0rCWlmIChidWYtPnR5cGUgPT0gQlVGX0NIQU5ORUxfSU5QVVQp Ci0rCQlyZXR1cm4gYnVmLT5tYXhfc2l6ZSAvIDEuMDUgLSAoYnVmLT5zaXplIC0gYnVmLT5vZmYp OwotKwllbHNlCi0rCQlyZXR1cm4gYnVmLT5tYXhfc2l6ZSAtIChidWYtPnNpemUgLSBidWYtPm9m Zik7Ci0gfQotIAotIGNvbnN0IHVfY2hhciAqCi1AQCAtMzUwLDkgKzM4NywzNiBAQAotIAkgKi8K LSAJbmVlZCA9IGxlbiArIGJ1Zi0+c2l6ZSAtIGJ1Zi0+YWxsb2M7Ci0gCXJsZW4gPSBST1VORFVQ KGJ1Zi0+YWxsb2MgKyBuZWVkLCBTU0hCVUZfU0laRV9JTkMpOwotKwkvKiBXaXRoIHRoZSBjaGFu Z2VzIGluIDguOSB0aGUgb3V0cHV0IGJ1ZmZlciBlbmQgdXAgZ3Jvd2luZyBwcmV0dHkKLSsJICog c2xvd2x5LiBJdCdzIGtub3dzIHRoYXQgaXQgbmVlZHMgdG8gZ3JvdyBidXQgaXQgb25seSBkb2Vz IHNvIDMySwotKwkgKiBhdCBhIHRpbWUuIFRoaXMgbWVhbnMgYSBsb3Qgb2YgY2FsbHMgdG8gcmVh bGxvYyBhbmQgbWVtY3B5IHdoaWNoCi0rCSAqIGtpbGxzIHBlcmZvcm1hbmNlIHVudGlsIHRoZSBi dWZmZXIgcmVhY2hlcyBzb21lIG1heGltdW0gc2l6ZS4KLSsJICogU28gd2UgZXhwbGljaXRseSB0 ZXN0IGZvciBhIGJ1ZmZlciB0aGF0J3MgdHJ5aW5nIHRvIGdyb3cgYW5kCi0rCSAqIGlmIGl0IGlz IHRoZW4gd2UgcHVzaCB0aGUgZ3Jvd3RoIGJ5IDRNQiBhdCBhIHRpbWUuIFRoaXMgY2FuIHJlc3Vs dCBpbgotKwkgKiB0aGUgYnVmZmVyIGJlaW5nIG92ZXIgYWxsb2NhdGVkIChpbiB0ZXJtcyBvZiBh Y3R1YWwgbmVlZHMpIGJ1dCB0aGUKLSsJICogcHJvY2VzcyBpcyBmYXN0LiBUaGlzIHNpZ25pZmlj YW50bHkgcmVkdWNlcyBvdmVyaGVhZAotKwkgKiBhbmQgaW1wcm92ZXMgcGVyZm9ybWFuY2UuIElu IHRoaXMgY2FzZSB3ZSBsb29rIGZvciBhIGJ1ZmZlciB0aGF0IGlzIHRyeWluZwotKwkgKiB0byBn cm93IGxhcmdlciB0aGFuIEJVRl9XQVRFUlNIRUQgKDI1NioxMDI0IHRha2VuIGZyb20gUEFDS0VU X01BWF9TSVpFKQotKwkgKiBhbmQgZXhwbGNpdGx5IGNoZWNrIHRoYXQgdGhlIGJ1ZmZlciBpcyBi ZWluZyB1c2VkIGZvciBpbmJvdW5kIG91dGJvdW5kCi0rCSAqIGNoYW5uZWwgYnVmZmVyaW5nLgot KwkgKiBVcGRhdGVkIGZvciAxOC40LjEgLWNqciAwNC8yMC8yNAotKwkgKi8KLSsJaWYgKHJsZW4g PiBCVUZfV0FURVJTSEVEICYmIChidWYtPnR5cGUgPT0gQlVGX0NIQU5ORUxfT1VUUFVUIHx8IGJ1 Zi0+dHlwZSA9PSBCVUZfQ0hBTk5FTF9JTlBVVCkpIHsKLSsJCS8qIGRlYnVnX2YgKCJQcmlvcjog bGFiZWw6ICVzLCAlcCwgcmxlbiBpcyAlenUgbmVlZCBpcyAlenUgbWF4X3NpemUgaXMgJXp1IiwK LSsJCSAgIGJ1Zi0+bGFiZWwsIGJ1ZiwgcmxlbiwgbmVlZCwgYnVmLT5tYXhfc2l6ZSk7ICovCi0r CQkvKiBlYXNpZXN0IHRoaW5nIHRvIGRvIGlzIGdyb3cgdGhlIG51ZmZlciBieSA0TUIgZWFjaCB0 aW1lLiBJdCBtaWdodCBlbmQKLSsJCSAqIHVwIGJlaW5nIHNvbWV3aGF0IG92ZXJhbGxvY2F0ZWQg YnV0IHdvcmtzIHF1aWNrbHkgKi8KLSsJCW5lZWQgPSAoNCoxMDI0KjEwMjQpOwotKwkJcmxlbiA9 IFJPVU5EVVAoYnVmLT5hbGxvYyArIG5lZWQsIFNTSEJVRl9TSVpFX0lOQyk7Ci0rCQkvKiBkZWJ1 Z19mICgiUG9zdDogbGFiZWw6ICVzLCAlcCwgcmxlbiBpcyAlenUgbmVlZCBpcyAlenUgbWF4X3Np emUgaXMgJXp1IiwgKi8KLSsJCS8qIAkgYnVmLT5sYWJlbCwgYnVmLCBybGVuLCBuZWVkLCBidWYt Pm1heF9zaXplKTsgKi8KLSsJfQotIAlTU0hCVUZfREJHKCgibmVlZCAlenUgaW5pdGlhbCBybGVu ICV6dSIsIG5lZWQsIHJsZW4pKTsKLSsKLSsJLyogcmxlbiBtaWdodCBiZSBhYm92ZSB0aGUgbWF4 IGFsbG9jYXRpb24gKi8KLSAJaWYgKHJsZW4gPiBidWYtPm1heF9zaXplKQotLQkJcmxlbiA9IGJ1 Zi0+YWxsb2MgKyBuZWVkOwotKwkJcmxlbiA9IGJ1Zi0+bWF4X3NpemU7Ci0rCi0gCVNTSEJVRl9E QkcoKCJhZGp1c3RlZCBybGVuICV6dSIsIHJsZW4pKTsKLSAJaWYgKChkcCA9IHJlY2FsbG9jYXJy YXkoYnVmLT5kLCBidWYtPmFsbG9jLCBybGVuLCAxKSkgPT0gTlVMTCkgewotIAkJU1NIQlVGX0RC RygoInJlYWxsb2MgZmFpbCIpKTsKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGJ1 Zi5oIG9wZW5zc2gtMTAuMnAxL3NzaGJ1Zi5oCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9zc2hi dWYuaAkyMDI1LTEwLTEwIDA0OjM4OjMxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2gtMTAu MnAxL3NzaGJ1Zi5oCTIwMjYtMDMtMTggMTc6MTk6NDguNDU1NzY3NDAxICswMTAwCi1AQCAtMjks MTggKzI5LDQ5IEBACi0gIyBlbmRpZiAvKiBPUEVOU1NMX0hBU19FQ0MgKi8KLSAjZW5kaWYgLyog V0lUSF9PUEVOU1NMICovCi0gCi0tI2RlZmluZSBTU0hCVUZfU0laRV9NQVgJCTB4ODAwMDAwMAkv KiBIYXJkIG1heGltdW0gc2l6ZSAqLwotKyNkZWZpbmUgU1NIQlVGX1NJWkVfTUFYCQkweDgwMDAw MDAJLyogSGFyZCBtYXhpbXVtIHNpemUgMTI4TUIgKi8KLSAjZGVmaW5lIFNTSEJVRl9SRUZTX01B WAkJMHgxMDAwMDAJLyogTWF4IGNoaWxkIGJ1ZmZlcnMgKi8KLSAjZGVmaW5lIFNTSEJVRl9NQVhf QklHTlVNCSgxNjM4NCAvIDgpCS8qIE1heCBiaWdudW0gKmJ5dGVzKiAqLwotICNkZWZpbmUgU1NI QlVGX01BWF9FQ1BPSU5UCSgoNTI4ICogMiAvIDgpICsgMSkgLyogTWF4IEVDIHBvaW50ICpieXRl cyogKi8KLSsjZGVmaW5lIE1BWF9MQUJFTF9MRU4JCTY0IC8qbWF4aW11bSBzaXplIG9mIHNzaGJ1 ZiBsYWJlbCAqLwotKyNkZWZpbmUgc3NoYnVmX25ldygpIHNzaGJ1Zl9uZXdfbGFiZWwoX19mdW5j X18pCi0gCi0gc3RydWN0IHNzaGJ1ZjsKLSAKLStlbnVtIGJ1ZmZlcl90eXBlcyB7Ci0rCUJVRl9D SEFOTkVMX09VVFBVVCwKLSsJQlVGX0NIQU5ORUxfSU5QVVQsCi0rCUJVRl9DSEFOTkVMX0VYVEVO REVELAotKwlCVUZfUEFDS0VUX0lOUFVULAotKwlCVUZfUEFDS0VUX0lOQ09NSU5HLAotKwlCVUZf UEFDS0VUX09VVFBVVCwKLSsJQlVGX1BBQ0tFVF9PVVRHT0lORywKLSsJQlVGX01BWF9UWVBFCi0r fTsKLSsKLSAvKgotICAqIENyZWF0ZSBhIG5ldyBzc2hidWYgYnVmZmVyLgotICAqIFJldHVybnMg cG9pbnRlciB0byBidWZmZXIgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBhbGxvY2F0aW9uIGZhaWx1 cmUuCi0gICovCi0tc3RydWN0IHNzaGJ1ZiAqc3NoYnVmX25ldyh2b2lkKTsKLSsvKiBzdHJ1Y3Qg c3NoYnVmICpzc2hidWZfbmV3KHZvaWQpOyovCi0rCi0rLyoKLSsgKiBDcmVhdGUgYSBuZXcgbGFi ZWxlZCBzc2hidWYgYnVmZmVyLgotKyAqIFJldHVybnMgcG9pbnRlciB0byBidWZmZXIgb24gc3Vj Y2Vzcywgb3IgTlVMTCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCi0rICovCi0rc3RydWN0IHNzaGJ1 ZiAqc3NoYnVmX25ld19sYWJlbChjb25zdCBjaGFyICopOwotKwotKy8qCi0rICogcmVsYWJlbCB0 aGUgc3NoYnVmIHN0cnVjdAotKyAqLwotK3ZvaWQgc3NoYnVmX3JlbGFiZWwoc3RydWN0IHNzaGJ1 ZiAqLCBjb25zdCBjaGFyICopOwotKwotKy8qCi0rICogYXNzaWduIGEgdHlwZSAoZnJvbSB0aGUg YnVmZmVyX3R5cGVzIGVudW0pIHRvCi0rICogdGhlIGJ1ZmZlci4gVXNlZCB0byBxdWlja2x5IGlk ZW50aWZ5IHRoZSBwdXJwb3NlIG9mCi0rICogdGhlIGJ1ZmZlci4KLSsgKi8KLSt2b2lkIHNzaGJ1 Zl90eXBlKHN0cnVjdCBzc2hidWYgKiwgaW50KTsKLSAKLSAvKgotICAqIENyZWF0ZSBhIG5ldywg cmVhZC1vbmx5IHNzaGJ1ZiBidWZmZXIgZnJvbSBleGlzdGluZyBkYXRhLgotQEAgLTc3LDEyICsx MDgsMTMgQEAKLSB2b2lkCXNzaGJ1Zl9yZXNldChzdHJ1Y3Qgc3NoYnVmICpidWYpOwotIAotIC8q Ci0tICogUmV0dXJuIHRoZSBtYXhpbXVtIHNpemUgb2YgYnVmCi0rICogUmV0dXJuIHRoZSBtYXhp bXVtIHVzYWJsZSBzaXplIG9mIGJ1ZgotICAqLwotIHNpemVfdAlzc2hidWZfbWF4X3NpemUoY29u c3Qgc3RydWN0IHNzaGJ1ZiAqYnVmKTsKLSAKLSAvKgotLSAqIFNldCB0aGUgbWF4aW11bSBzaXpl IG9mIGJ1ZgotKyAqIFNldCB0aGUgbWF4aW11bSB1c2FibGUgc2l6ZSBvZiBidWYuIE5vdGUgdGhh dCB0aGUgYnVmZmVyIG1heSBjb25zdW1lIHVwCi0rICogdG8gMnggdGhpcyBtZW1vcnkgcGx1cyBi b29ra2VlcGluZyBvdmVyaGVhZC4KLSAgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdh dGl2ZSBTU0hfRVJSXyogZXJyb3IgY29kZSBvbiBmYWlsdXJlLgotICAqLwotIGludAlzc2hidWZf c2V0X21heF9zaXplKHN0cnVjdCBzc2hidWYgKmJ1Ziwgc2l6ZV90IG1heF9zaXplKTsKLUBAIC0z NTgsNiArMzkwLDkgQEAKLSAJCSgodV9jaGFyICopKHApKVsxXSA9IF9fdiAmIDB4ZmY7IFwKLSAJ fSB3aGlsZSAoMCkKLSAKLSsKLSt2b2lkIHNzaGJ1Zl9zZXRfd2luZG93X21heChzdHJ1Y3Qgc3No YnVmICpidWYgLCBzaXplX3QgbGVuKTsKLSsKLSAvKiBJbnRlcm5hbCBkZWZpbml0aW9ucyBmb2xs b3cuIEV4cG9zZWQgZm9yIHJlZ3Jlc3MgdGVzdHMgKi8KLSAjaWZkZWYgU1NIQlVGX0lOVEVSTkFM Ci0gCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9zc2guYyBvcGVuc3NoLTEwLjJwMS9z c2guYwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3NoLmMJMjAyNi0wMy0xOCAxNToxMjowMi4w MDg0NjYwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9zc2guYwkyMDI2LTAzLTE4IDE3OjI1 OjMyLjg2Nzc3MTcxMCArMDEwMAotQEAgLTEwNyw2ICsxMDcsNyBAQAotICNpbmNsdWRlICJteXBy b3Bvc2FsLmgiCi0gI2luY2x1ZGUgInV0ZjguaCIKLSAjaW5jbHVkZSAiaG9zdGZpbGUuaCIKLSsj aW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgotIAotICNpZmRlZiBFTkFCTEVfUEtDUzExCi0gI2lu Y2x1ZGUgInNzaC1wa2NzMTEuaCIKLUBAIC0xMTM2LDYgKzExMzcsMTAgQEAKLSAJCQlicmVhazsK LSAJCWNhc2UgJ1QnOgotIAkJCW9wdGlvbnMucmVxdWVzdF90dHkgPSBSRVFVRVNUX1RUWV9OTzsK LSsJCQkvKiBlbnN1cmUgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHRyeSB0byBiYWNrZG9vciBhICov Ci0rCQkJLyogbnVsbCBjaXBoZXIgc3dpdGNoIG9uIGFuIGludGVyYWN0aXZlIHNlc3Npb24gKi8K LSsJCQkvKiBzbyBleHBsaWNpdGx5IGRpc2FibGUgaXQgbm8gbWF0dGVyIHdoYXQgKi8KLSsJCQlv cHRpb25zLm5vbmVfc3dpdGNoPTA7Ci0gCQkJYnJlYWs7Ci0gCQljYXNlICdvJzoKLSAJCQlsaW5l ID0geHN0cmR1cChvcHRhcmcpOwotQEAgLTE3NzIsMTAgKzE3NzcsMzYgQEAKLSAJfQotIAotIAkv KiBPcGVuIGEgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIGhvc3QuICovCi0rCS8qIHdlIHRyeSBp bml0aWFsbHkgb24gdGhlIGRlZmF1bHQgaHBuc3NoIHBvcnQgcmV0dXJuZWQgYnkKLSsJICogZGVm YXVsdF9zc2hfcG9ydCgpIHdoaWNoIG5vdyByZXR1cm5zIEhQTlNTSF9ERUZBVUxUX1BPUlQKLSsJ ICogaWYgdGhhdCBmYWlscyB3ZSByZXNldCB0aGUgcG9ydCB0byBTU0hfREVGQVVMVF9QT1JUCi0r CSAqIC1janIgOC8xNy8yMDIyCi0rCSAqLwotK3RyeWFnYWluOgotIAlpZiAoc3NoX2Nvbm5lY3Qo c3NoLCBob3N0LCBvcHRpb25zLmhvc3RfYXJnLCBhZGRycywgJmhvc3RhZGRyLAotIAkgICAgb3B0 aW9ucy5wb3J0LCBvcHRpb25zLmNvbm5lY3Rpb25fYXR0ZW1wdHMsCi0tCSAgICAmdGltZW91dF9t cywgb3B0aW9ucy50Y3Bfa2VlcF9hbGl2ZSkgIT0gMCkKLSsJICAgICZ0aW1lb3V0X21zLCBvcHRp b25zLnRjcF9rZWVwX2FsaXZlKSAhPSAwKSB7Ci0rCQkvKiBjb3VsZCBub3QgY29ubmVjdC4gSWYg dGhlIHBvcnQgcmVxdWVzdGVkIGlzIHRoZSBzYW1lIGFzCi0rCQkgKiBocG5zc2ggZGVmYXVsdCBw b3J0IHRoZW4gZmFsbGJhY2suIE90aGVyd2lzZSwgZXhpdCAqLwotKwkJaWYgKChvcHRpb25zLnBv cnQgPT0gZGVmYXVsdF9zc2hfcG9ydCgpKSAmJiBvcHRpb25zLmZhbGxiYWNrKSB7Ci0rCQkJaW50 IHBvcnQgPSBvcHRpb25zLmZhbGxiYWNrX3BvcnQ7Ci0rCQkJb3B0aW9ucy5wb3J0ID0gcG9ydDsK LSsJCQlmcHJpbnRmKHN0ZGVyciwgIkhQTlNTSCBzZXJ2ZXIgbm90IGF2YWlsYWJsZSBvbiBkZWZh dWx0IHBvcnQgJWRcbiIsCi0rCQkJCWRlZmF1bHRfc3NoX3BvcnQoKSk7Ci0rCQkJaWYgKHBvcnQg PT0gMjIpCi0rCQkJCWZwcmludGYoc3RkZXJyLCAiRmFsbGluZyBiYWNrIHRvIE9wZW5TU0ggZGVm YXVsdCBwb3J0ICVkXG4iLAotKwkJCQkJcG9ydCk7Ci0rCQkJZWxzZQotKwkJCQlmcHJpbnRmKHN0 ZGVyciwgIkZhbGxpbmcgYmFjayB0byB1c2VyIGRlZmluZWQgcG9ydCAlZFxuIiwKLSsJCQkJCXBv cnQpOwotKwkJCWFkZHJzID0gcmVzb2x2ZV9ob3N0KGhvc3QsIHBvcnQsIDEsCi0rCQkJCQkgICAg IGNuYW1lLCBzaXplb2YoY25hbWUpKTsKLSsJCQlnb3RvIHRyeWFnYWluOwotKwkJfSBlbHNlIHsK LSsJCQlleGl0KDI1NSk7Ci0rCQl9Ci0gCQlleGl0KDI1NSk7Ci0rCX0KLSAKLSAKLSAJc3NoX3Bh Y2tldF9zZXRfdGltZW91dChzc2gsIG9wdGlvbnMuc2VydmVyX2FsaXZlX2ludGVydmFsLAotQEAg LTE5NzgsOCArMjAwOSwxMCBAQAotIAotIC8qIERvIGZvcmsoKSBhZnRlciBhdXRoZW50aWNhdGlv bi4gVXNlZCBieSAic3NoIC1mIiAqLwotIHN0YXRpYyB2b2lkCi0tZm9ya19wb3N0YXV0aCh2b2lk KQotK2ZvcmtfcG9zdGF1dGgoc3RydWN0IHNzaCAqc3NoKQotIHsKLSsJaW50IGZpcHMgPSAwOwot KwotIAlpZiAobmVlZF9jb250cm9scGVyc2lzdF9kZXRhY2gpCi0gCQljb250cm9sX3BlcnNpc3Rf ZGV0YWNoKCk7Ci0gCWRlYnVnKCJmb3JraW5nIHRvIGJhY2tncm91bmQiKTsKLUBAIC0xOTg4LDE3 ICsyMDIxLDI5IEBACi0gCQlmYXRhbCgiZGFlbW9uKCkgZmFpbGVkOiAlLjIwMHMiLCBzdHJlcnJv cihlcnJubykpOwotIAlpZiAoc3RkZmRfZGV2bnVsbCgxLCAxLCAhKGxvZ19pc19vbl9zdGRlcnIo KSAmJiBkZWJ1Z19mbGFnKSkgPT0gLTEpCi0gCQllcnJvcl9mKCJzdGRmZF9kZXZudWxsIGZhaWxl ZCIpOwotKwkvKiB3ZSBkbyB0aGUgY2lwaGVyIHN3aXRjaCBoZXJlIGluIHRoZSBldmVudCB0aGF0 IHRoZSBjbGllbnQKLSsJICogaXMgZm9ya2luZyBvciBoYXMgYSBkZWxheWVkIGZvcmsuCi0rCSAq IElmIEZJUFMgbW9kZSBleGlzdHMgYW5kIGlzIGVuYWJsZWQgdGhlbiBubyBwYXJhbGxlbCBjaXBo ZXJzLgotKwkgKi8KLSsJZmlwcyA9IGZpcHNfZW5hYmxlZCgpOwotKwlpZiAoZmlwcykKLSsJCWRl YnVnMl9mKCJGSVBTIG1vZGUgaXMgZW5hYmxlZC4gUGFyYWxsZWwgY2lwaGVycyBhcmUgZGlzYWJs ZWQiKTsKLSsJZWxzZQotKwkJZGVidWcyX2YoIkZJUFMgbW9kZSBub3QgZm91bmQgb3IgZGlzYWJs ZWQuIFBhcmFsbGVsIGNpcGhlcnMgYXJlIGVuYWJsZWQiKTsKLSsKLSsJaWYgKChvcHRpb25zLmRp c2FibGVfbXVsdGl0aHJlYWRlZCA9PSAwKSAmJiAoZmlwcyA9PSAwKSkKLSsJCWNpcGhlcl9zd2l0 Y2goc3NoKTsKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLS1mb3J3YXJkaW5nX3N1Y2Nlc3Modm9pZCkK LStmb3J3YXJkaW5nX3N1Y2Nlc3Moc3RydWN0IHNzaCAqc3NoKQotIHsKLSAJaWYgKGZvcndhcmRf Y29uZmlybXNfcGVuZGluZyA9PSAtMSkKLSAJCXJldHVybjsKLSAJaWYgKC0tZm9yd2FyZF9jb25m aXJtc19wZW5kaW5nID09IDApIHsKLSAJCWRlYnVnX2YoImFsbCBleHBlY3RlZCBmb3J3YXJkaW5n IHJlcGxpZXMgcmVjZWl2ZWQiKTsKLSAJCWlmIChvcHRpb25zLmZvcmtfYWZ0ZXJfYXV0aGVudGlj YXRpb24pCi0tCQkJZm9ya19wb3N0YXV0aCgpOwotKwkJCWZvcmtfcG9zdGF1dGgoc3NoKTsKLSAJ fSBlbHNlIHsKLSAJCWRlYnVnMl9mKCIlZCBleHBlY3RlZCBmb3J3YXJkaW5nIHJlcGxpZXMgcmVt YWluaW5nIiwKLSAJCSAgICBmb3J3YXJkX2NvbmZpcm1zX3BlbmRpbmcpOwotQEAgLTIwNjUsNyAr MjExMCw3IEBACi0gCQkJCSAgICAiZm9yIGxpc3RlbiBwb3J0ICVkIiwgcmZ3ZC0+bGlzdGVuX3Bv cnQpOwotIAkJfQotIAl9Ci0tCWZvcndhcmRpbmdfc3VjY2VzcygpOwotKwlmb3J3YXJkaW5nX3N1 Y2Nlc3Moc3NoKTsKLSB9Ci0gCi0gc3RhdGljIHZvaWQKLUBAIC0yMDkyLDcgKzIxMzcsNyBAQAot IAl9Ci0gCi0gCWRlYnVnX2YoInR1bm5lbCBmb3J3YXJkIGVzdGFibGlzaGVkLCBpZD0lZCIsIGlk KTsKLS0JZm9yd2FyZGluZ19zdWNjZXNzKCk7Ci0rCWZvcndhcmRpbmdfc3VjY2Vzcyhzc2gpOwot IH0KLSAKLSBzdGF0aWMgdm9pZAotQEAgLTIyODgsNiArMjMzMywxNSBAQAotIAkgICAgTlVMTCwg ZmlsZW5vKHN0ZGluKSwgY29tbWFuZCwgZW52aXJvbik7Ci0gfQotIAotKy8qIHRoaXMgdXNlZCB0 byBkbyBhIGxvdCBtb3JlIGJ1dCBub3cgaXQganVzdCBjaGVja3MgdG8gc2VlCi0rICogaWYgd2Ug YXJlIGRpc2FibGluZyBocG4gKi8KLStzdGF0aWMgdm9pZAotK2hwbl9vcHRpb25zX2luaXQoc3Ry dWN0IHNzaCAqc3NoKQotK3sKLSsJY2hhbm5lbF9zZXRfaHBuX2Rpc2FibGVkKG9wdGlvbnMuaHBu X2Rpc2FibGVkKTsKLSsJZGVidWdfZigiSFBOIGRpc2FibGVkOiAlZCIsIG9wdGlvbnMuaHBuX2Rp c2FibGVkKTsKLSt9Ci0rCi0gLyogb3BlbiBuZXcgY2hhbm5lbCBmb3IgYSBzZXNzaW9uICovCi0g c3RhdGljIGludAotIHNzaF9zZXNzaW9uMl9vcGVuKHN0cnVjdCBzc2ggKnNzaCkKLUBAIC0yMzA5 LDYgKzIzNjMsNyBAQAotIAl3aW5kb3cgPSBDSEFOX1NFU19XSU5ET1dfREVGQVVMVDsKLSAJcGFj a2V0bWF4ID0gQ0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQ7Ci0gCWlmICh0dHlfZmxhZykgewotKwkJ d2luZG93ID0gQ0hBTl9TRVNfV0lORE9XX0RFRkFVTFQ7Ci0gCQl3aW5kb3cgPj49IDE7Ci0gCQlw YWNrZXRtYXggPj49IDE7Ci0gCX0KLUBAIC0yMzE2LDYgKzIzNzEsMTMgQEAKLSAJICAgICJzZXNz aW9uIiwgU1NIX0NIQU5ORUxfT1BFTklORywgaW4sIG91dCwgZXJyLAotIAkgICAgd2luZG93LCBw YWNrZXRtYXgsIENIQU5fRVhURU5ERURfV1JJVEUsCi0gCSAgICAiY2xpZW50LXNlc3Npb24iLCBD SEFOTkVMX05PTkJMT0NLX1NURElPKTsKLSsKLSsJLyogVE9ETzogSXMgdGhpcyB0aGUgcmlnaHQg cGxhY2UgZm9yIHRoZXNlIG9wdGlvbnM/ICovCi0rCWlmIChvcHRpb25zLnRjcF9yY3ZfYnVmX3Bv bGwgPiAwICYmICFvcHRpb25zLmhwbl9kaXNhYmxlZCkgewotKwkJYy0+ZHluYW1pY193aW5kb3cg PSAxOwotKwkJZGVidWcoIkVuYWJsZWQgRHluYW1pYyBXaW5kb3cgU2NhbGluZyIpOwotKwl9Ci0r Ci0gCWlmICh0dHlfZmxhZykKLSAJCWNoYW5uZWxfc2V0X3R0eShzc2gsIGMpOwotIAlkZWJ1ZzNf ZigiY2hhbm5lbF9uZXc6ICVkJXMiLCBjLT5zZWxmLCB0dHlfZmxhZyA/ICIgKHR0eSkiIDogIiIp OwotQEAgLTIzMzMsNiArMjM5NSwxNCBAQAotIHsKLSAJaW50IHIsIGlkID0gLTE7Ci0gCWNoYXIg KmNwLCAqdHVuX2Z3ZF9pZm5hbWUgPSBOVUxMOwotKwlpbnQgZmlwcyA9IDA7Ci0rCi0rCS8qCi0r CSAqIFdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGlzIGVhcmx5IGJlY2F1c2UgdGhlIGZvcndhcmRp bmcgbG9naWMgYmVsb3cKLSsJICogbWlnaHQgb3BlbiBjaGFubmVscyB0aGF0IHVzZSB0aGUgaHBu IGJ1ZmZlciBzaXplcy4gIFdlIGNhbid0IHNlbmQgYQotKwkgKiB3aW5kb3cgb2YgLTEgKHRoZSBk ZWZhdWx0KSB0byB0aGUgc2VydmVyIGFzIGl0IGJyZWFrcyB0aGluZ3MuCi0rCSAqLwotKwlocG5f b3B0aW9uc19pbml0KHNzaCk7Ci0gCi0gCS8qIFhYWCBzaG91bGQgYmUgcHJlLXNlc3Npb24gKi8K LSAJaWYgKCFvcHRpb25zLmNvbnRyb2xfcGVyc2lzdCkKLUBAIC0yNDI0LDcgKzI0OTQsMjEgQEAK LSAJCQlkZWJ1ZygiZGVmZXJyaW5nIHBvc3RhdXRoIGZvcmsgdW50aWwgcmVtb3RlIGZvcndhcmQg IgotIAkJCSAgICAiY29uZmlybWF0aW9uIHJlY2VpdmVkIik7Ci0gCQl9IGVsc2UKLS0JCQlmb3Jr X3Bvc3RhdXRoKCk7Ci0rCQkJZm9ya19wb3N0YXV0aChzc2gpOwotKwl9IGVsc2UgewotKwkJLyog Y2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBzd2l0Y2hpbmcgY2lwaGVycyB0bwotKwkJICogb25lIG9m IG91ciBwYXJhbGxlbCB2ZXJzaW9ucy4gSWYgdGhlIGNsaWVudCBpcwotKwkJICogZm9ya2luZyB0 aGVuIHdlIGhhbmRsZSBpdCBpbiBmb3JrX3Bvc3RhdXRoKCkKLSsJCSAqIElmIEZJUFMgbW9kZSBl eGlzdHMgYW5kIGlzIGVuYWJsZWQgdGhlbiBubyBwYXJhbGxlbCBjaXBoZXJzLgotKwkJICovCi0r CQlmaXBzID0gZmlwc19lbmFibGVkKCk7Ci0rCQlpZiAoZmlwcykKLSsJCQlkZWJ1ZzJfZigiRklQ UyBtb2RlIGlzIGVuYWJsZWQuIFBhcmFsbGVsIGNpcGhlcnMgYXJlIGRpc2FibGVkIik7Ci0rCQll bHNlCi0rCQkJZGVidWcyX2YoIkZJUFMgbW9kZSBub3QgZm91bmQgb3IgZGlzYWJsZWQuIFBhcmFs bGVsIGNpcGhlcnMgYXJlIGVuYWJsZWQiKTsKLSsJCWlmICgob3B0aW9ucy5kaXNhYmxlX211bHRp dGhyZWFkZWQgPT0gMCkKLSsJCSAgICAmJiAoZmlwcyA9PSAwKSkKLSsJCQljaXBoZXJfc3dpdGNo KHNzaCk7Ci0gCX0KLSAKLSAJcmV0dXJuIGNsaWVudF9sb29wKHNzaCwgdHR5X2ZsYWcsIHR0eV9m bGFnID8KLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaF9jb25maWcgb3BlbnNzaC0x MC4ycDEvc3NoX2NvbmZpZwotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3NoX2NvbmZpZwkyMDI2 LTAzLTE4IDE1OjEyOjAyLjAwOTAyMjgwMSArMDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaF9j b25maWcJMjAyNi0wMy0xOCAxNToxMzoxNy44NjAxOTM1ODkgKzAxMDAKLUBAIC00NSw2ICs0NSw4 IEBACi0gIyAgIFByb3h5Q29tbWFuZCBzc2ggLXEgLVcgJWg6JXAgZ2F0ZXdheS5leGFtcGxlLmNv bQotICMgICBSZWtleUxpbWl0IDFHIDFoCi0gIyAgIFVzZXJLbm93bkhvc3RzRmlsZSB+Ly5zc2gv a25vd25faG9zdHMuZC8lawotKyMgICBVc2VNUFRDUCBubwotKyMgICBIYXBweUV5ZXMgbm8KLSAj Ci0gIyBUaGlzIHN5c3RlbSBpcyBmb2xsb3dpbmcgc3lzdGVtLXdpZGUgY3J5cHRvIHBvbGljeS4K LSAjIFRvIG1vZGlmeSB0aGUgY3J5cHRvIHByb3BlcnRpZXMgKENpcGhlcnMsIE1BQ3MsIC4uLiks IGNyZWF0ZSBhICAqLmNvbmYKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaF9jb25m aWcuNSBvcGVuc3NoLTEwLjJwMS9zc2hfY29uZmlnLjUKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmln L3NzaF9jb25maWcuNQkyMDI2LTAzLTE4IDE1OjEyOjAyLjAwOTIxNjM4MCArMDEwMAotKysrIG9w ZW5zc2gtMTAuMnAxL3NzaF9jb25maWcuNQkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg2MDQ4Mzk5NiAr MDEwMAotQEAgLTYyLDYgKzYyLDE5IEBACi0gLlBxIFBhIC9ldGMvc3NoL3NzaF9jb25maWcKLSAu RWwKLSAuUHAKLSsuWHIgaHBuc3NoIDEKLStpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggT3BlblNT SCdzIHNzaCBhbmQgdXNlcyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGZvcm1hdCwgZGlyZWN0aXZl cywgYW5kIG9wdGlvbnMuCi0rLlhyIGhwbnNzaCAxCi0rY2FuIHVzZSB0aGUgc2FtZSBjb25maWd1 cmF0aW9uIGZpbGUgYXMKLSsuWHIgc3NoIDEKLSt0aG91Z2ggdGhlIGludmVyc2UgaXMgbm90IG5l Y2Vzc2FyaWx5IHRydWUuIFRoaXMgaXMgYmVjYXVzZQotKy5YciBocG5zc2ggMQotK2hhcyBzb21l IGFkZGl0aW9uYWwgb3B0aW9ucyB3aGljaCBhcmUgZGlzY3Vzc2VkIGJlbG93LiBBcyBzdWNoIHVz ZXJzIHNob3VsZCBlaXRoZXIgbm90Ci0rdXNlCi0rLlhyIGhwbnNzaCAxCi0rc3BlY2lmaWMgZGly ZWN0aXZlcyBpbiB0aGVpciBkZWZhdWx0IHNzaF9jb25maWcgZmlsZXMgb3IgZW5zdXJlIHRoYXQg dGhleSBhbHdheXMgdXNlIGEKLStjdXN0b20gY29uZmlnIGZpbGUuCi0rLlBwCi0gVW5sZXNzIG5v dGVkIG90aGVyd2lzZSwgZm9yIGVhY2ggcGFyYW1ldGVyLCB0aGUgZmlyc3Qgb2J0YWluZWQgdmFs dWUKLSB3aWxsIGJlIHVzZWQuCi0gVGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgY29udGFpbiBzZWN0 aW9ucyBzZXBhcmF0ZWQgYnkKLUBAIC04MzMsNiArODQ2LDkgQEAKLSBvcgotIC5DbSBubwotICh0 aGUgZGVmYXVsdCkuCi0rLkl0IENtIEZhbGxiYWNrUG9ydAotK1NwZWNpZmllcyB0aGUgcG9ydCBo cG5zc2ggc2hvdWxkIHRyeSB0byBjb25uZWN0IHRvIGlmIGl0IGZhaWxzIGNvbm5lY3RpbmcgdG8g dGhlCi0rZGVmYXVsdCBocG5zc2hkIHBvcnQgb2YgMjIyMi4gVGhlIGRlZmF1bHQgaXMgcG9ydCAy Mi4gSFBOLVNTSCBvbmx5LgotIC5JdCBDbSBGaW5nZXJwcmludEhhc2gKLSBTcGVjaWZpZXMgdGhl IGhhc2ggYWxnb3JpdGhtIHVzZWQgd2hlbiBkaXNwbGF5aW5nIGtleSBmaW5nZXJwcmludHMuCi0g VmFsaWQgb3B0aW9ucyBhcmU6Ci1AQCAtMTA1OCw2ICsxMDc0LDIzIEBACi0gd2lsbCBub3QgYmUg Y29udmVydGVkIGF1dG9tYXRpY2FsbHksCi0gYnV0IG1heSBiZSBtYW51YWxseSBoYXNoZWQgdXNp bmcKLSAuWHIgc3NoLWtleWdlbiAxIC4KLSsuSXQgQ20gSGFwcHlFeWVzCi0rSWYgc2V0IHRvCi0r LkNtIHllcwotK3RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBjbGllbnQgc2hvdWxkIHVz ZSB0aGUgSGFwcHkgRXllYmFsbHMgY29ubmVjdGlvbgotK21ldGhvZCBhcyBkZXNjcmliZWQgYnkg UkZDIDgzMDUuIFdoZW4gYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGEKLSt0YXJnZXQgdGhhdCBz dXBwb3J0cyBJUHY0IGFuZCBJUHY2IHRoZSBjbGllbnQgd2lsbCB0cnkgdG8gY29ubmVjdAotK29u IElQdjYgZmlyc3QsIGRlbGF5IGEgc2V0IHRpbWUgKDI1MG1zIGRlZmF1bHQpLCBhbmQgdGhlbiB0 cnkgSVB2NC4KLStUaGUgY2xpZW50IHdpbGwgdXNlIHdoaWNoIGV2ZXIgc29ja2V0IGlzIHJldHVy bmVkIGZpcnN0LiBOb3RlOgotK1RoaXMgcHJvY2VzcyBtYXksIHJhcmVseSwgcHJvZHVjZSBmYWxz ZSBwb3NpdGl2ZXMgaW4gc29tZSBtb25pdG9yaW5nIHRvb2xzCi0rZHVlIHRvIG11bHRpcGxlIGNv bm5lY3Rpb24gYXR0ZW1wdHMgcHJpb3IgdG8gYXV0aGVudGljYXRpb24uCi0rVGhlIGRlZmF1bHQg aXMKLSsuQ20gbm8KLSsuSXQgQ20gSGFwcHlEZWxheQotK1RoaXMgb3B0aW9ucyBzcGVjaWZpZXMg aG93IGxvbmcgdGhlIEhhcHB5RXllcyBjb25uZWN0aW9uIG1ldGhvZCBzaG91bGQKLSt3YWl0IGJl Zm9yZSB0cnlpbmcgSVB2NCBhZnRlciB0aGUgaW5pdGlhbCBJUHY2IGNvbm5lY3Rpb24uIFRoaXMg dmFsdWUgaXMKLSthIHBvc2l0aXZlIGludGVnZXIgb2YgbWlsbGlzZWNvbmRzIHdpdGggYSBkZWZh dWx0IG9mCi0rLkNtIDI1MG1zLgotIC5JdCBDbSBIb3N0YmFzZWRBY2NlcHRlZEFsZ29yaXRobXMK LSBUaGUgZGVmYXVsdCBpcyBoYW5kbGVkIHN5c3RlbS13aWRlIGJ5Ci0gLlhyIGNyeXB0by1wb2xp Y2llcyA3IC4KLUBAIC0xMTU5LDYgKzExOTIsMTEgQEAKLSAuQ20gSG9zdG5hbWUKLSBzcGVjaWZp Y2F0aW9ucykuCi0gVGhlIGRlZmF1bHQgaXMgdGhlIG5hbWUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQg bGluZS4KLSsuSXQgQ20gSFBORGlzYWJsZWQKLStJbiBzb21lIHNpdHVhdGlvbnMsIHN1Y2ggYXMg dHJhbnNmZXJzIG9uIGEgbG9jYWwgYXJlYSBuZXR3b3JrLCB0aGUgaW1wYWN0Ci0rb2YgdGhlIEhQ TiBjb2RlIHByb2R1Y2VzIGEgbmV0IGRlY3JlYXNlIGluIHBlcmZvcm1hbmNlLiBJbiB0aGVzZSBj YXNlcyBpdCBpcwotK2hlbHBmdWwgdG8gZGlzYWJsZSB0aGUgSFBOIGZ1bmN0aW9uYWxpdHkuIEJ5 IGRlZmF1bHQgSFBORGlzYWJsZWQgaXMgc2V0IHRvCi0rLkNtIG5vLiBIUE5TU0ggb25seS4KLSAu SXQgQ20gSWRlbnRpdGllc09ubHkKLSBTcGVjaWZpZXMgdGhhdAotIC5YciBzc2ggMQotQEAgLTEz NTcsNyArMTM5NSwxMiBAQAotIGZvciBpbnRlcmFjdGl2ZSBzZXNzaW9ucyBhbmQKLSAuQ20gbm9u ZQotICh0aGUgb3BlcmF0aW5nIHN5c3RlbSBkZWZhdWx0KQotLWZvciBub24taW50ZXJhY3RpdmUg c2Vzc2lvbnMuCi0rZm9yIG5vbi1pbnRlcmFjdGl2ZSBzZXNzaW9ucy4gSWYgdXNpbmcgdGhlCi0r LkNtIEhhcHB5RXllcwotK29wdGlvbiB0aGVzZSBkZWZhdWx0IHRvCi0rLkNtIGxvd2xhdGVuY3kg YW5kCi0rLm0gdGhyb3VnaHB1dCAsCi0rcmVzcGVjdGl2ZWx5LgotIC5JdCBDbSBLYmRJbnRlcmFj dGl2ZUF1dGhlbnRpY2F0aW9uCi0gU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIGtleWJvYXJkLWlu dGVyYWN0aXZlIGF1dGhlbnRpY2F0aW9uLgotIFRoZSBhcmd1bWVudCB0byB0aGlzIGtleXdvcmQg bXVzdCBiZQotQEAgLTE1NDYsNiArMTU4OSw2MyBAQAotIC5QcAotIFRoZSBsaXN0IG9mIGF2YWls YWJsZSBNQUMgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwotIC5RcSBzc2gg LVEgbWFjIC4KLSsuSXQgQ20gTWV0cmljcwotK0luZGljYXRlIHRoYXQgdGhlIHNzaCBjbGllbnQg c2hvdWxkIGdhdGhlciBhbmQgd3JpdGUgVENQIHN0YWNrIG1ldHJpY3MgZnJvbSB0aGUKLStUQ1Bf SU5GTyBzb2NrZXQgc3RydWN0dXJlIG9uIGNvbXBsaWFudCBvcGVyYXRpbmcgc3lzdGVtcyB0byBh IHRleHQgZmlsZS4KLStUaGVzZSBtZXRyaWNzIHdpbGwgYmUgY29sbGVjdGVkIGZyb20gYm90aCB0 aGUgbG9jYWwgYW5kIHJlbW90ZSBob3N0cyBpZiBtZXRyaWNzCi0rYXJlIHN1cHBvcnRlZCBieSB0 aGUgdmVyc2lvbiBvZiBTU0ggYW5kIFRDUF9JTkZPIGlzIHN1cHBvcnRlZCBieSB0aGUKLStvcGVy YXRpbmcgc3lzdGVtLiBDdXJyZW50bHkgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0IGlzIGxpbWl0 ZWQgdG8gTGludXgKLSt2ZXJzaW9uIDMuNyBhbmQgZ3JlYXRlciwgTmV0QlNELCBhbmQgRnJlZUJT RCAodmVyc2lvbiA2IG9yIGdyZWF0ZXIpLgotKwotK0lmIG9uZSBvZiB0aGUgaG9zdHMgZG9lcyBu b3Qgc3VwcG9ydCB0aGUgTWV0cmljcyBvcHRpb24gdGhlbiBvbmx5IGRhdGEKLStmcm9tIHRoZSB0 aGUgaG9zdCB0aGF0IGRvZXMgd2lsbCBiZSByZXBvcnRlZC4gU2VlIHRoZSBIUE4tUkVBRE1FIGZp bGUKLStmb3IgbW9yZSBkZXRhaWwuCi0rCi0rVGhlIGFyZ3VtZW50IHRvIHRoZSBrZXl3b3JkIG11 c3QgYmUKLSsuQ20geWVzCi0rb3IKLSsuQ20gbm8KLSsodGhlIGRlZmF1bHQpLgotKwotK1NlZQot Ky5DbSBNZXRyaWNzSW50ZXJ2YWwKLSthbmQKLSsuQ20gTWV0cmljc1BhdGgKLStmb3IgbW9yZSBt ZXRyaWNzIG9wdGlvbnMuCi0rLkNtIEhQTlNTSCBvbmx5LgotKy5JdCBDbSBNZXRyaWNzSW50ZXJ2 YWwKLStUaGUgZnJlcXVlbmN5LCBpbiBzZWNvbmRzLCB3aXRoIHdoaWNoIHRoZSBUQ1BfSU5GTyBz dHJ1Y3Qgd2lsbCBiZSBwb2xsZWQuIFRoZQotK2RlZmF1bHQgdmFsdWUgaXMgNSBzZWNvbmRzLgot KwotKy5DbSBNZXRyaWNzCi0rbXVzdCBiZSBzZXQgdG8KLSsuQ20geWVzCi0rZm90IHRoaXMgb3B0 aW9uIHRvIGhhdmUgYW55IGVmZmVjdC4KLSsuQ20gSFBOU1NIIG9ubHkuCi0rLkl0IENtIE1ldHJp Y3NQYXRoCi0rVGhlIGZpbGUgcGF0aCB3aGVyZQotKy5DbSBNZXRyaWNzCi0rc2hvdWxkIHdyaXRl IHRoZSBUQ1Agc3RhY2sgbWV0cmljcy4KLSsKLStUaGUgZGVmYXVsdCBpcwotKy5TbSBvZmYKLSsu QXIgLi9zc2hfc3RhY2tfbWV0cmljcy5sb2NhbAotKyBhbmQKLSsuQXIgLi9zc2hfc3RhY2tfbWV0 cmljcy5yZW1vdGUKLSsuU20gb24KLSsKLStUaGUgdXNlciBtYXkgc3BlY2lmeSBhbnkgb3RoZXIg ZmlsZXBhdGggYW5kIGZpbGVuYW1lIHRoYXQgdGhleSBoYXZlIHdyaXRlCi0rYWNjZXNzIHRvLiBF LmcuIE1ldHJpY3NQYXRoPS90bXAvbXlfbWV0cmljcy4gVGhlIHN1ZmZpeCBvZiAubG9jYWwKLSth bmQgLnJlbW90ZSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgcGF0aC4gRmlsZXMgYXJlCi0rLkNt IG5vdAotK292ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgbWV0cmljcyBzZXNzaW9ucy4gSW5zdGVh ZCwgZGF0YSBmcm9tIG5ldyBzZXNzaW9ucwotK3dpbGwgYmUgYXBwZW5kZWQgaWYgdGhlIGZpbGUg YWxyZWFkeSBleGlzdHMuCi0rCi0rLkNtIE1ldHJpY3MKLSttdXN0IGJlIHNldCB0bwotKy5DbSB5 ZXMKLStmb3QgdGhpcyBvcHRpb24gdG8gaGF2ZSBhbnkgZWZmZWN0LgotKy5DbSBIUE5TU0ggb25s eS4KLSAuSXQgQ20gTm9Ib3N0QXV0aGVudGljYXRpb25Gb3JMb2NhbGhvc3QKLSBEaXNhYmxlIGhv c3QgYXV0aGVudGljYXRpb24gZm9yIGxvY2FsaG9zdCAobG9vcGJhY2sgYWRkcmVzc2VzKS4KLSBU aGUgYXJndW1lbnQgdG8gdGhpcyBrZXl3b3JkIG11c3QgYmUKLUBAIC0xNTUzLDYgKzE2NTMsMzYg QEAKLSBvcgotIC5DbSBubwotICh0aGUgZGVmYXVsdCkuCi0rLkl0IENtIE5vbmVFbmFibGVkCi0r RW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBjaXBoZXIuIENhcmUgbXVzdCBh bHdheXMgYmUgdXNlZAotK3doZW4gZW5hYmxpbmcgdGhpcyBhcyBpdCB3aWxsIGFsbG93IHVzZXJz IHRvIHNlbmQgZGF0YSBpbiB0aGUgY2xlYXIuIEhvd2V2ZXIsCi0raXQgaXMgaW1wb3J0YW50IHRv IG5vdGUgdGhhdCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiByZW1haW5zIGVuY3J5cHRlZAot K2V2ZW4gaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gRGVmYXVsdCBpcwotKy5DbSBuby4gSFBO U1NIIG9ubHkuCi0rLkl0IENtIE5vbmVNYWNFbmFibGVkCi0rRW5hYmxlIG9yIGRpc2FibGUgdGhl IHVzZSBvZiB0aGUgTm9uZSBNQUMuIFdoZW4gdGhpcyBpcyBlbmFibGVkIHNzaAotK3dpbGwgKm5v dCogcHJvdmlkZSBkYXRhIGludGVncml0eSBvZiBhbnkgZGF0YSBiZWluZyB0cmFuc21pdHRlZCBi ZXR3ZWVuIGhvc3RzLiBVc2UKLSt3aXRoIGNhdXRpb24gYXMgaXQsIHVubGlrZSBqdXN0IHVzaW5n IE5vbmVFbmFibGVkLCBkb2Vzbid0IHByb3ZpZGUgZGF0YSBpbnRlZ3JpdHkgYW5kCi0rcHJvdGVj dGlvbiBhZ2FpbnN0IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIEFzIHdpdGggTm9uZUVuYWJs ZWQgYWxsIGF1dGhlbnRpY2F0aW9uCi0rcmVtYWlucyBlbmNyeXB0ZWQgYW5kIGludGVncml0eSBp cyBlbnN1cmVkLiBEZWZhdWx0IGlzCi0rLkNtIG5vLiBIUE5TU0ggb25seS4KLSsuSXQgQ20gTm9u ZVN3aXRjaAotK1N3aXRjaCB0aGUgZW5jcnlwdGlvbiBjaXBoZXIgYmVpbmcgdXNlZCB0byB0aGUg Tm9uZSBjaXBoZXIgYWZ0ZXIKLSthdXRoZW50aWNhdGlvbiB0YWtlcyBwbGFjZS4gTm9uZUVuYWJs ZWQgbXVzdCBiZSBlbmFibGVkIG9uIGJvdGggdGhlIGNsaWVudAotK2FuZCBzZXJ2ZXIgc2lkZSBv ZiB0aGUgY29ubmVjdGlvbi4gV2hlbiB0aGUgY29ubmVjdGlvbiBzd2l0Y2hlcyB0byB0aGUgTk9O RQotK2NpcGhlciBhIHdhcm5pbmcgaXMgc2VudCB0byBTVERFUlIuIFRoZSBjb25uZWN0aW9uIGF0 dGVtcHQgd2lsbCBmYWlsIHdpdGggYW4KLStlcnJvciBpZiBhIGNsaWVudCByZXF1ZXN0cyBhIE5v bmVTd2l0Y2ggZnJvbSB0aGUgc2VydmVyIHRoYXQgZG9lcyBub3QgZXhwbGljaXRseQotK2hhdmUg Tm9uZUVuYWJsZWQgc2V0IHRvIHllcy4gTm90ZTogVGhlIE5PTkUgY2lwaGVyIGNhbm5vdCBiZSB1 c2VkIGluCi0raW50ZXJhY3RpdmUgKHNoZWxsKSBzZXNzaW9ucyBhbmQgaXQgd2lsbCBmYWlsIHNp bGVudGx5LiBTZXQgdG8KLSsuQ20gbm8KLStieSBkZWZhdWx0LgotKy5DbSBIUE5TU0ggb25seS4K LSsuUHAKLSsuQ20gTm90ZToKLSt0aGlzIG9wdGlvbnMgY2Fubm90IGFjdHVhbHkgYmUgc2V0IGlu IHRoZSBzc2hfY29uZmlnIGZpbGUuIEl0IG11c3QgYmUKLStzZXQgb24gdGhlIGNvbW1hbmQgbGlu ZSB1c2UgLW9Ob25lRW5hYmxlZC4gVGhpcyBpcyB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcKLSt1 c2VkIGFjY2lkZW50YWxseS4gSXQgaXMgaW5jbHVkZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzIGFz IG5laXRoZXIgTm9uZU1hY0VuYWJsZWQKLStvciBOb25lQ2lwaGVyRW5hYmxlZCBoYXZlIGFueSBl ZmZlY3Qgd2l0aG91dCB0aGlzIG9wdGlvbi4KLSAuSXQgQ20gTnVtYmVyT2ZQYXNzd29yZFByb21w dHMKLSBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwYXNzd29yZCBwcm9tcHRzIGJlZm9yZSBnaXZp bmcgdXAuCi0gVGhlIGFyZ3VtZW50IHRvIHRoaXMga2V5d29yZCBtdXN0IGJlIGFuIGludGVnZXIu Ci1AQCAtMjEzMiw2ICsyMjYyLDEyIEBACi0gU3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gdGFnIG5h bWUgdGhhdCBtYXkgYmUgbGF0ZXIgdXNlZCBieSBhCi0gLkNtIE1hdGNoCi0gZGlyZWN0aXZlIHRv IHNlbGVjdCBhIGJsb2NrIG9mIGNvbmZpZ3VyYXRpb24uCi0rLkl0IENtIFRjcFJjdkJ1ZlBvbGwK LStFbmFibGUgb2YgZGlzYWJsZSB0aGUgcG9sbGluZyBvZiB0aGUgdGNwIHJlY2VpdmUgYnVmZmVy IHRocm91Z2ggdGhlIGxpZmUKLStvZiB0aGUgY29ubmVjdGlvbi4gWW91IHdvdWxkIHdhbnQgdG8g bWFrZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZAotK2ZvciBzeXN0ZW1zIG1ha2lu ZyB1c2Ugb2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQuMjQrLCAyLjYsIE1TIFZpc3Rh KS4KLStEZWZhdWx0IGlzCi0rLkNtIHllcy4gSFBOU1NIIG9ubHkuCi0gLkl0IENtIFR1bm5lbAot IFJlcXVlc3QKLSAuWHIgdHVuIDQKLUBAIC0yMjE3LDYgKzIzNTMsMTIgQEAKLSBmcm9tIE9wZW5T U0ggNi44IGFuZCBncmVhdGVyIHN1cHBvcnQgdGhlCi0gLlFxIGhvc3RrZXlzQG9wZW5zc2guY29t Ci0gcHJvdG9jb2wgZXh0ZW5zaW9uIHVzZWQgdG8gaW5mb3JtIHRoZSBjbGllbnQgb2YgYWxsIHRo ZSBzZXJ2ZXIncyBob3N0a2V5cy4KLSsuSXQgQ20gVXNlTVBUQ1AKLStJZiBzZXQgdG8KLSsuQ20g eWVzICwKLSt0aGlzIHdpbGwgZW5hYmxlIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBpbnN0ZWFkIG9m IFRDUCAodGhpcyBvbmx5IHdvcmtzIG9uIExpbnV4KS4KLStUaGUgZGVmYXVsdCBpcwotKy5DbSBu byAuCi0gLkl0IENtIFVzZXIKLSBTcGVjaWZpZXMgdGhlIHVzZXIgdG8gbG9nIGluIGFzLgotIFRo aXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGEgZGlmZmVyZW50IHVzZXIgbmFtZSBpcyB1c2VkIG9uIGRp ZmZlcmVudCBtYWNoaW5lcy4KLUBAIC0yNTE5LDMgKzI2NjEsMTEgQEAKLSBjcmVhdGVkIE9wZW5T U0guCi0gLkFuIE1hcmt1cyBGcmllZGwKLSBjb250cmlidXRlZCB0aGUgc3VwcG9ydCBmb3IgU1NI IHByb3RvY29sIHZlcnNpb25zIDEuNSBhbmQgMi4wLgotKy5BbiBDaHJpcyBSYXBpZXIsCi0rLkFu IE1pY2hhZWwgU3RldmVucywKLSsuQW4gQmVuIEJlbm5ldCwKLSthbmQKLSsuQW4gTWlrZSBUYXNv dGEKLStkZXZlbG9wZWQgdGhlIEhQTiBleHRlbnNpb25zIGF0IHRoZSBQaXR0c2J1cmdoIFN1cGVy Y29tdXRpbmcgQ2VudGVyCi0rd2l0aCBncmFudHMgZnJvbSBDaXNjbywgdGhlIE5hdGlvbmFsIExp YnJhcnkgb2YgTWVkaWNpbmUsIGFuZAotK3RoZSBOYXRpb25hbCBTY2llbmNlIEZvdW5kYXRpb24u Ci1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9zc2hjb25uZWN0Mi5jIG9wZW5zc2gtMTAu MnAxL3NzaGNvbm5lY3QyLmMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGNvbm5lY3QyLmMJ MjAyNi0wMy0xOCAxNToxMjowMi4wMDk3MTgyNzcgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9z c2hjb25uZWN0Mi5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODYwOTAwMzk1ICswMTAwCi1AQCAtNzYs NiArNzYsNyBAQAotICNpbmNsdWRlICJ1dGY4LmgiCi0gI2luY2x1ZGUgInNzaC1zay5oIgotICNp bmNsdWRlICJzay1hcGkuaCIKLSsjaW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgotIAotICNpZmRl ZiBHU1NBUEkKLSAjaW5jbHVkZSAic3NoLWdzcy5oIgotQEAgLTg1LDYgKzg2LDEzIEBACi0gZXh0 ZXJuIE9wdGlvbnMgb3B0aW9uczsKLSAKLSAvKgotKyAqIHR0eV9mbGFnIGlzIHNldCBpbiBzc2gu Yy4gVXNlIHRoaXMgaW4gc3NoX3VzZXJhdXRoMjoKLSsgKiBpZiBpdCBpcyBzZXQsIHRoZW4gcHJl dmVudCB0aGUgc3dpdGNoIHRvIHRoZSBudWxsIGNpcGhlci4KLSsgKi8KLSsKLStleHRlcm4gaW50 IHR0eV9mbGFnOwotKwotKy8qCi0gICogU1NIMiBrZXkgZXhjaGFuZ2UKLSAgKi8KLSAKLUBAIC01 NzYsNiArNTg0LDQyIEBACi0gCi0gCWlmICghYXV0aGN0eHQuc3VjY2VzcykKLSAJCWZhdGFsKCJB dXRoZW50aWNhdGlvbiBmYWlsZWQuIik7Ci0rCi0rCS8qCi0rCSAqIElmIHRoZSB1c2VyIHdhbnRz IHRvIHVzZSB0aGUgbm9uZSBjaXBoZXIgYW5kL29yIG5vbmUgbWFjLCBkbyBpdCBwb3N0IGF1dGhl bnRpY2F0aW9uCi0rCSAqIGFuZCBvbmx5IGlmIHRoZSByaWdodCBjb25kaXRpb25zIGFyZSBtZXQg LS0gYm90aCBvZiB0aGUgTk9ORSBjb21tYW5kcwotKwkgKiBtdXN0IGJlIHRydWUgYW5kIHRoZXJl IG11c3QgYmUgbm8gdHR5IGFsbG9jYXRlZC4KLSsJICovCi0rCWlmIChvcHRpb25zLm5vbmVfc3dp dGNoID09IDEgJiYgb3B0aW9ucy5ub25lX2VuYWJsZWQgPT0gMSkgewotKwkJY2hhciAqbXlwcm9w b3NhbFtQUk9QT1NBTF9NQVhdOwotKwkJY2hhciAqcyA9IE5VTEw7Ci0rCQljb25zdCBjaGFyICpu b25lX2NpcGhlciA9ICJub25lIjsKLSsJCWlmICghdHR5X2ZsYWcpIHsgLyogbm8gbnVsbCBvbiB0 dHkgc2Vzc2lvbnMgKi8KLSsJCQlkZWJ1ZygiUmVxdWVzdGluZyBub25lIHJla2V5aW5nLi4uIik7 Ci0rCQkJa2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMoc3NoLCBteXByb3Bvc2FsLCBzLCBu b25lX2NpcGhlciwKLSsJCQkJCQkgICAgICBvcHRpb25zLm1hY3MsCi0rCQkJCQkJICAgICAgY29t cHJlc3Npb25fYWxnX2xpc3Qob3B0aW9ucy5jb21wcmVzc2lvbiksCi0rCQkJCQkJICAgICAgb3B0 aW9ucy5ob3N0a2V5YWxnb3JpdGhtcyk7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBF TkFCTEVEIE5PTkUgQ0lQSEVSISEhXG4iKTsKLSsKLSsJCQkvKiBOT05FTUFDIGNhbiBvbmx5IGJl IHVzZWQgaW4gY29udGV4dCBvZiB0aGUgTk9ORSBDSVBIRVIgKi8KLSsJCQlpZiAob3B0aW9ucy5u b25lbWFjX2VuYWJsZWQgPT0gMSkgewotKwkJCQljb25zdCBjaGFyICpub25lX21hYyA9ICJub25l IjsKLSsJCQkJa2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMoc3NoLCBteXByb3Bvc2FsLCBz LCBub25lX2NpcGhlciwKLSsJCQkJCQkJICAgICAgbm9uZV9tYWMsCi0rCQkJCQkJCSAgICAgIGNv bXByZXNzaW9uX2FsZ19saXN0KG9wdGlvbnMuY29tcHJlc3Npb24pLAotKwkJCQkJCQkgICAgICBv cHRpb25zLmhvc3RrZXlhbGdvcml0aG1zKTsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJXQVJOSU5H OiBFTkFCTEVEIE5PTkUgTUFDXG4iKTsKLSsJCQl9Ci0rCQkJa2V4X3Byb3AyYnVmKHNzaC0+a2V4 LT5teSwgbXlwcm9wb3NhbCk7Ci0rCQkJcGFja2V0X3JlcXVlc3RfcmVrZXlpbmcoKTsKLSsJCX0g ZWxzZSB7Ci0rCQkJLyogcmVxdWVzdGVkIE5PTkUgY2lwaGVyIHdoZW4gaW4gYSB0dHkgKi8KLSsJ CQlkZWJ1ZygiQ2Fubm90IHN3aXRjaCB0byBOT05FIGNpcGhlciB3aXRoIHR0eSBhbGxvY2F0ZWQi KTsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIk5PTkUgY2lwaGVyIHN3aXRjaCBkaXNhYmxlZCB3aGVu IGEgVFRZIGlzIGFsbG9jYXRlZFxuIik7Ci0rCQl9Ci0rCX0KLSsKLSAJaWYgKHNzaF9wYWNrZXRf Y29ubmVjdGlvbl9pc19vbl9zb2NrZXQoc3NoKSkgewotIAkJdmVyYm9zZSgiQXV0aGVudGljYXRl ZCB0byAlcyAoWyVzXTolZCkgdXNpbmcgXCIlc1wiLiIsIGhvc3QsCi0gCQkgICAgc3NoX3JlbW90 ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNzaCksCi1kaWZmIC1OdXIgb3BlbnNzaC0x MC4ycDEub3JpZy9zc2hjb25uZWN0LmMgb3BlbnNzaC0xMC4ycDEvc3NoY29ubmVjdC5jCi0tLS0g b3BlbnNzaC0xMC4ycDEub3JpZy9zc2hjb25uZWN0LmMJMjAyNi0wMy0xOCAxNToxMjowMS41ODY1 NjkyODYgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9zc2hjb25uZWN0LmMJMjAyNi0wMy0xOCAx NzozMzowNi4xMzQ0NjEzNjEgKzAxMDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgInNz aGVyci5oIgotICNpbmNsdWRlICJhdXRoZmQuaCIKLSAjaW5jbHVkZSAia2V4LmgiCi0rI2luY2x1 ZGUgImhhcHB5ZXllYmFsbHMuaCIKLSAKLSBzdHJ1Y3Qgc3Noa2V5ICpwcmV2aW91c19ob3N0X2tl eSA9IE5VTEw7Ci0gCi1AQCAtNzIsNiArNzMsNyBAQAotIGV4dGVybiBpbnQgZGVidWdfZmxhZzsK LSBleHRlcm4gT3B0aW9ucyBvcHRpb25zOwotIGV4dGVybiBjaGFyICpfX3Byb2duYW1lOwotK2V4 dGVybiBjaGFyIGdsb2JhbF9udG9wW05JX01BWEhPU1RdOwotIAotIHN0YXRpYyBpbnQgc2hvd19v dGhlcl9rZXlzKHN0cnVjdCBob3N0a2V5cyAqLCBzdHJ1Y3Qgc3Noa2V5ICopOwotIHN0YXRpYyB2 b2lkIHdhcm5fY2hhbmdlZF9rZXkoc3RydWN0IHNzaGtleSAqKTsKLUBAIC0zMzksNyArMzQxLDcg QEAKLSAvKgotICAqIENyZWF0ZXMgYSBzb2NrZXQgZm9yIHVzZSBhcyB0aGUgc3NoIGNvbm5lY3Rp b24uCi0gICovCi0tc3RhdGljIGludAotK2ludAotIHNzaF9jcmVhdGVfc29ja2V0KHN0cnVjdCBh ZGRyaW5mbyAqYWkpCi0gewotIAlpbnQgc29jaywgcjsKLUBAIC0zNTEsOSArMzUzLDE2IEBACi0g I2VuZGlmCi0gCWNoYXIgbnRvcFtOSV9NQVhIT1NUXTsKLSAKLS0Jc29jayA9IHNvY2tldChhaS0+ YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsIGFpLT5haV9wcm90b2NvbCk7Ci0rCS8qIHVzZXIg cmVxdWVzdCBmb3IgTXVsdGlwYXRoIFRDUCAqLwotKwlpZiAob3B0aW9ucy51c2VfbXB0Y3ApCi0r CQlzb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgSVBQUk9UT19N UFRDUCk7Ci0rCWVsc2UKLSsJCXNvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3Nv Y2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOwotKwotIAlpZiAoc29jayA9PSAtMSkgewotIAkJZXJy b3IoInNvY2tldDogJXMiLCBzdHJlcnJvcihlcnJubykpOwotKwkJaWYgKG9wdGlvbnMudXNlX21w dGNwKQotKwkJCWVycm9yICgiWW91IGFza2VkIHRvIHVzZSBNUFRDUC4gUGxlYXNlIGVuc3VyZSBp dCBpcyBlbmFibGVkLiIpOwotIAkJcmV0dXJuIC0xOwotIAl9Ci0gCSh2b2lkKWZjbnRsKHNvY2ss IEZfU0VURkQsIEZEX0NMT0VYRUMpOwotQEAgLTQ1Niw2MCArNDY1LDc0IEBACi0gCQkJc2xlZXAo MSk7Ci0gCQkJZGVidWcoIlRyeWluZyBhZ2Fpbi4uLiIpOwotIAkJfQotLQkJLyoKLS0JCSAqIExv b3AgdGhyb3VnaCBhZGRyZXNzZXMgZm9yIHRoaXMgaG9zdCwgYW5kIHRyeSBlYWNoIG9uZSBpbgot LQkJICogc2VxdWVuY2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gc3VjY2VlZHMuCi0tCQkgKi8KLS0J CWZvciAoYWkgPSBhaXRvcDsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKLS0JCQlpZiAoYWktPmFp X2ZhbWlseSAhPSBBRl9JTkVUICYmCi0tCQkJICAgIGFpLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYp IHsKLS0JCQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0tCQkJCWNvbnRpbnVlOwotLQkJCX0KLS0J CQlpZiAoZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLAotLQkJCSAgICBu dG9wLCBzaXplb2YobnRvcCksIHN0cnBvcnQsIHNpemVvZihzdHJwb3J0KSwKLS0JCQkgICAgTklf TlVNRVJJQ0hPU1R8TklfTlVNRVJJQ1NFUlYpICE9IDApIHsKLS0JCQkJb2Vycm5vID0gZXJybm87 Ci0tCQkJCWVycm9yX2YoImdldG5hbWVpbmZvIGZhaWxlZCIpOwotLQkJCQllcnJubyA9IG9lcnJu bzsKLS0JCQkJY29udGludWU7Ci0tCQkJfQotLQkJCWlmIChvcHRpb25zLmFkZHJlc3NfZmFtaWx5 ICE9IEFGX1VOU1BFQyAmJgotLQkJCSAgICBhaS0+YWlfZmFtaWx5ICE9IG9wdGlvbnMuYWRkcmVz c19mYW1pbHkpIHsKLS0JCQkJZGVidWcyX2YoInNraXBwaW5nIGFkZHJlc3MgWyVzXTolczogIgot LQkJCQkgICAgIndyb25nIGFkZHJlc3MgZmFtaWx5IiwgbnRvcCwgc3RycG9ydCk7Ci0tCQkJCWVy cm5vID0gRUFGTk9TVVBQT1JUOwotLQkJCQljb250aW51ZTsKLSsJCWlmIChvcHRpb25zLnVzZV9o YXBweWV5ZXMgPT0gMSkgewotKwkJCWRlYnVnX2YgKCJBdHRlbXB0aW5nIFJGQyA4MzA1IC8gSGFw cHkgRXllYmFsbHMgY29ubmVjdGlvbi4iKTsKLSsJCQlzb2NrID0gaGFwcHlfZXllYmFsbHMoaG9z dCwgYWl0b3AsCi0rCQkJICAgIGhvc3RhZGRyLCB0aW1lb3V0X21zKTsKLSsJCQlpZiAoc29jayAh PSAtMSkgewotKwkJCQlkZWJ1Z19mICgiUkZDIDgzMDUgLyBIYXBweSBFeWViYWxscyBjb25uZWN0 aW9uIHN1Y2Nlc3NmdWwuIik7Ci0rCQkJCWJyZWFrOwkvKiBTdWNjZXNzZnVsIGNvbm5lY3Rpb24u ICovCi0gCQkJfQotKwkJfSBlbHNlIHsKLSsJCQkvKgotKwkJCSAqIExvb3AgdGhyb3VnaCBhZGRy ZXNzZXMgZm9yIHRoaXMgaG9zdCwgYW5kIHRyeSBlYWNoIG9uZSBpbgotKwkJCSAqIHNlcXVlbmNl IHVudGlsIHRoZSBjb25uZWN0aW9uIHN1Y2NlZWRzLgotKwkJCSAqLwotKwkJCWZvciAoYWkgPSBh aXRvcDsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKLSsJCQkJaWYgKGFpLT5haV9mYW1pbHkgIT0g QUZfSU5FVCAmJgotKwkJCQkgICAgYWktPmFpX2ZhbWlseSAhPSBBRl9JTkVUNikgewotKwkJCQkJ ZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0rCQkJCQljb250aW51ZTsKLSsJCQkJfQotKwkJCQlpZiAo Z2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLAotKwkJCQkgICAgbnRvcCwg c2l6ZW9mKG50b3ApLCBzdHJwb3J0LAotKwkJCQkgICAgc2l6ZW9mKHN0cnBvcnQpLAotKwkJCQkg ICAgTklfTlVNRVJJQ0hPU1R8TklfTlVNRVJJQ1NFUlYpICE9IDApIHsKLSsJCQkJCW9lcnJubyA9 IGVycm5vOwotKwkJCQkJZXJyb3JfZigiZ2V0bmFtZWluZm8gZmFpbGVkIik7Ci0rCQkJCQllcnJu byA9IG9lcnJubzsKLSsJCQkJCWNvbnRpbnVlOwotKwkJCQl9Ci0rCQkJCWlmIChvcHRpb25zLmFk ZHJlc3NfZmFtaWx5ICE9IEFGX1VOU1BFQyAmJgotKwkJCQkgICAgYWktPmFpX2ZhbWlseSAhPSBv cHRpb25zLmFkZHJlc3NfZmFtaWx5KSB7Ci0rCQkJCQlkZWJ1ZzJfZigic2tpcHBpbmcgYWRkcmVz cyBbJXNdOiVzOiAiCi0rCQkJCQkJICJ3cm9uZyBhZGRyZXNzIGZhbWlseSIsCi0rCQkJCQkJIG50 b3AsIHN0cnBvcnQpOwotKwkJCQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0rCQkJCQljb250aW51 ZTsKLSsJCQkJfQotIAotLQkJCWRlYnVnKCJDb25uZWN0aW5nIHRvICUuMjAwcyBbJS4xMDBzXSBw b3J0ICVzLiIsCi0tCQkJCWhvc3QsIG50b3AsIHN0cnBvcnQpOwotKwkJCQlkZWJ1ZygiQ29ubmVj dGluZyB0byAlLjIwMHMgWyUuMTAwc10gcG9ydCAlcy4iLAotKwkJCQkgICAgaG9zdCwgbnRvcCwg c3RycG9ydCk7Ci0gCi0tCQkJLyogQ3JlYXRlIGEgc29ja2V0IGZvciBjb25uZWN0aW5nLiAqLwot LQkJCXNvY2sgPSBzc2hfY3JlYXRlX3NvY2tldChhaSk7Ci0tCQkJaWYgKHNvY2sgPCAwKSB7Ci0t CQkJCS8qIEFueSBlcnJvciBpcyBhbHJlYWR5IG91dHB1dCAqLwotLQkJCQllcnJubyA9IDA7Ci0t CQkJCWNvbnRpbnVlOwotLQkJCX0KLSsJCQkJLyogQ3JlYXRlIGEgc29ja2V0IGZvciBjb25uZWN0 aW5nLiAqLwotKwkJCQlzb2NrID0gc3NoX2NyZWF0ZV9zb2NrZXQoYWkpOwotKwkJCQlpZiAoc29j ayA8IDApIHsKLSsJCQkJCS8qIEFueSBlcnJvciBpcyBhbHJlYWR5IG91dHB1dCAqLwotKwkJCQkJ ZXJybm8gPSAwOwotKwkJCQkJY29udGludWU7Ci0rCQkJCX0KLSAKLS0JCQkqdGltZW91dF9tcyA9 IHNhdmVkX3RpbWVvdXRfbXM7Ci0tCQkJaWYgKHRpbWVvdXRfY29ubmVjdChzb2NrLCBhaS0+YWlf YWRkciwgYWktPmFpX2FkZHJsZW4sCi0tCQkJICAgIHRpbWVvdXRfbXMpID49IDApIHsKLS0JCQkJ LyogU3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAqLwotLQkJCQltZW1jcHkoaG9zdGFkZHIsIGFpLT5h aV9hZGRyLCBhaS0+YWlfYWRkcmxlbik7Ci0tCQkJCWJyZWFrOwotLQkJCX0gZWxzZSB7Ci0tCQkJ CW9lcnJubyA9IGVycm5vOwotLQkJCQlkZWJ1ZygiY29ubmVjdCB0byBhZGRyZXNzICVzIHBvcnQg JXM6ICVzIiwKLS0JCQkJICAgIG50b3AsIHN0cnBvcnQsIHN0cmVycm9yKGVycm5vKSk7Ci0tCQkJ CWNsb3NlKHNvY2spOwotLQkJCQlzb2NrID0gLTE7Ci0tCQkJCWVycm5vID0gb2Vycm5vOwotKwkJ CQkqdGltZW91dF9tcyA9IHNhdmVkX3RpbWVvdXRfbXM7Ci0rCQkJCWlmICh0aW1lb3V0X2Nvbm5l Y3Qoc29jaywgYWktPmFpX2FkZHIsCi0rCQkJCSAgICBhaS0+YWlfYWRkcmxlbiwKLSsJCQkJICAg IHRpbWVvdXRfbXMpID49IDApIHsKLSsJCQkJCS8qIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4gKi8K LSsJCQkJCW1lbWNweShob3N0YWRkciwgYWktPmFpX2FkZHIsCi0rCQkJCQkgICAgICAgYWktPmFp X2FkZHJsZW4pOwotKwkJCQkJYnJlYWs7Ci0rCQkJCX0gZWxzZSB7Ci0rCQkJCQlvZXJybm8gPSBl cnJubzsKLSsJCQkJCWRlYnVnKCJjb25uZWN0IHRvIGFkZHJlc3MgJXMgcG9ydCAlczogJXMiLAot KwkJCQkJICAgIG50b3AsIHN0cnBvcnQsIHN0cmVycm9yKGVycm5vKSk7Ci0rCQkJCQljbG9zZShz b2NrKTsKLSsJCQkJCXNvY2sgPSAtMTsKLSsJCQkJCWVycm5vID0gb2Vycm5vOwotKwkJCQl9Ci0g CQkJfQotKwkJCWlmIChzb2NrICE9IC0xKQotKwkJCQlicmVhazsJLyogU3VjY2Vzc2Z1bCBjb25u ZWN0aW9uLiAqLwotIAkJfQotLQkJaWYgKHNvY2sgIT0gLTEpCi0tCQkJYnJlYWs7CS8qIFN1Y2Nl c3NmdWwgY29ubmVjdGlvbi4gKi8KLSAJfQotIAotIAkvKiBSZXR1cm4gZmFpbHVyZSBpZiB3ZSBk aWRuJ3QgZ2V0IGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAqLwotQEAgLTE2MTUsNiArMTYzOCw5 IEBACi0gCS8qIGtleSBleGNoYW5nZSAqLwotIAkvKiBhdXRoZW50aWNhdGUgdXNlciAqLwotIAlk ZWJ1ZygiQXV0aGVudGljYXRpbmcgdG8gJXM6JWQgYXMgJyVzJyIsIGhvc3QsIHBvcnQsIHNlcnZl cl91c2VyKTsKLSsJLyogaWYgdXNpbmcgUkZDIDgzMDUgY2xlYXJseSBzdGF0ZSB3aGljaCBhZGRy ZXNzIHdlIGFyZSBjb25uZWN0ZWQgdG8gKi8KLSsJaWYgKG9wdGlvbnMudXNlX2hhcHB5ZXllcyA9 PSAxKQotKwkJZGVidWcoIlJGQyA4MzA1IGF1dGhlbnRpY2F0aW5nIHRvICUuMjAwcyIsIGdsb2Jh bF9udG9wKTsKLSAJc3NoX2tleDIoc3NoLCBob3N0LCBob3N0YWRkciwgcG9ydCwgY2luZm8pOwot IAlpZiAoIW9wdGlvbnMua2V4X2FsZ29yaXRobXNfc2V0ICYmIHNzaC0+a2V4ICE9IE5VTEwgJiYK LSAJICAgIHNzaC0+a2V4LT5uYW1lICE9IE5VTEwgJiYgb3B0aW9ucy53YXJuX3dlYWtfY3J5cHRv ICYmCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy9zc2hkLjggb3BlbnNzaC0xMC4ycDEv c3NoZC44Ci0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9zc2hkLjgJMjAyNi0wMy0xOCAxNToxMjow Mi4wMTAxNzQ1MDcgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJwMS9zc2hkLjgJMjAyNi0wMy0xOCAx NToxMzoxNy44NjIxNDAwODYgKzAxMDAKLUBAIC0xMDc5LDMgKzEwNzksNyBAQAotIHByb3RvY29s IHZlcnNpb25zIDEuNSBhbmQgMi4wLgotIE5pZWxzIFByb3ZvcyBhbmQgTWFya3VzIEZyaWVkbCBj b250cmlidXRlZCBzdXBwb3J0Ci0gZm9yIHByaXZpbGVnZSBzZXBhcmF0aW9uLgotK0NocmlzIFJh cGllciwgTWljaGFlbCBTdGV2ZW5zLCBCZW4gQmVubmV0LCBhbmQgTWlrZSBUYXNvdGEgZGV2ZWxv cGVkCi0rdGhlIEhQTiBleHRlbnNpb25zIGF0IHRoZSBQaXR0c2J1cmdoIFN1cGVyY29tdXRpbmcg Q2VudGVyIHdpdGggZ3JhbnRzCi0rZnJvbSBDaXNjbywgdGhlIE5hdGlvbmFsIExpYnJhcnkgb2Yg TWVkaWNpbmUsIGFuZCB0aGUgTmF0aW9uYWwgU2NpZW5jZQotK0ZvdW5kYXRpb24uIAotZGlmZiAt TnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3NoZC1hdXRoLmMgb3BlbnNzaC0xMC4ycDEvc3NoZC1h dXRoLmMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGQtYXV0aC5jCTIwMjYtMDMtMTggMTU6 MTI6MDEuOTE0ODYzODQ0ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvc3NoZC1hdXRoLmMJMjAy Ni0wMy0xOCAxNToxMzoxNy44NjI0ODg3NDUgKzAxMDAKLUBAIC04MDYsNiArODA2LDI1IEBACi0g CXN0cnVjdCBrZXggKmtleDsKLSAJaW50IHI7Ci0gCi0rCS8qIHRoaXMgdXNlZCB0byBiZSBpbiBz c2hkLmMgd2hlbiB3ZSByZWFkIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKLSsJICogYnV0IG5lZWRl ZCB0byBiZSBtb3ZlZCBoZXJlIGFzIGRvX3NzaDJfa2V4IGluIHNzaGQtYXV0aCB3YXNuJ3QKLSsJ ICogcGlja2luZyB1cCB0aGUgbm9uZSBvcHRpb25zLiBDSlIgNC8xMC8yMDI1Ci0rCSAqLwotKwlp ZiAob3B0aW9ucy5ub25lX2VuYWJsZWQgPT0gMSkgewotKwkJZGVidWcoIldBUk5JTkc6IE5vbmUg Y2lwaGVyIGVuYWJsZWQiKTsKLSsJCWNoYXIgKm9sZF9jaXBoZXJzID0gb3B0aW9ucy5jaXBoZXJz OwotKwkJeGFzcHJpbnRmKCZvcHRpb25zLmNpcGhlcnMsICIlcyxub25lIiwgb2xkX2NpcGhlcnMp OwotKwkJZnJlZShvbGRfY2lwaGVycyk7Ci0rCi0rCQkvKiBvbmx5IGVuYWJsZSB0aGUgbm9uZSBN QUMgaW4gY29udGV4dCBvZiB0aGUgbm9uZSBjaXBoZXIgLWNqciAqLwotKwkJaWYgKG9wdGlvbnMu bm9uZW1hY19lbmFibGVkID09IDEpIHsKLSsJCQlkZWJ1ZygiV0FSTklORzogTm9uZSBNQUMgZW5h YmxlZCIpOwotKwkJCWNoYXIgKm9sZF9tYWNzID0gb3B0aW9ucy5tYWNzOwotKwkJCXhhc3ByaW50 Zigmb3B0aW9ucy5tYWNzLCAiJXMsbm9uZSIsIG9sZF9tYWNzKTsKLSsJCQlmcmVlKG9sZF9tYWNz KTsKLSsJCX0KLSsJfQotKwotIAlpZiAob3B0aW9ucy5yZWtleV9saW1pdCB8fCBvcHRpb25zLnJl a2V5X2ludGVydmFsKQotIAkJc3NoX3BhY2tldF9zZXRfcmVrZXlfbGltaXRzKHNzaCwgb3B0aW9u cy5yZWtleV9saW1pdCwKLSAJCSAgICBvcHRpb25zLnJla2V5X2ludGVydmFsKTsKLWRpZmYgLU51 ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGQuYyBvcGVuc3NoLTEwLjJwMS9zc2hkLmMKLS0tLSBv cGVuc3NoLTEwLjJwMS5vcmlnL3NzaGQuYwkyMDI2LTAzLTE4IDE1OjEyOjAxLjc4MTYyNDY1OSAr MDEwMAotKysrIG9wZW5zc2gtMTAuMnAxL3NzaGQuYwkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg2Mjg2 NjI3MCArMDEwMAotQEAgLTgyMSw2ICs4MjEsOCBAQAotIAlpbnQgcmV0LCBsaXN0ZW5fc29jazsK LSAJc3RydWN0IGFkZHJpbmZvICphaTsKLSAJY2hhciBudG9wW05JX01BWEhPU1RdLCBzdHJwb3J0 W05JX01BWFNFUlZdOwotKwlpbnQgc29ja3NpemU7Ci0rCWludCBzb2Nrc2l6ZWxlbiA9IHNpemVv ZihpbnQpOwotIAotIAlmb3IgKGFpID0gbGEtPmFkZHJzOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkg ewotIAkJaWYgKGFpLT5haV9mYW1pbHkgIT0gQUZfSU5FVCAmJiBhaS0+YWlfZmFtaWx5ICE9IEFG X0lORVQ2KQotQEAgLTgzNiwxMSArODM4LDE4IEBACi0gCQkJY29udGludWU7Ci0gCQl9Ci0gCQkv KiBDcmVhdGUgc29ja2V0IGZvciBsaXN0ZW5pbmcuICovCi0tCQlsaXN0ZW5fc29jayA9IHNvY2tl dChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCi0tCQkgICAgYWktPmFpX3Byb3RvY29s KTsKLSsJCWlmIChvcHRpb25zLnVzZV9tcHRjcCkKLSsJCQlsaXN0ZW5fc29jayA9IHNvY2tldChh aS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCi0rCQkJICAgIElQUFJPVE9fTVBUQ1ApOwot KwkJZWxzZQotKwkJCWxpc3Rlbl9zb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9z b2NrdHlwZSwKLSsJCQkgICAgYWktPmFpX3Byb3RvY29sKTsKLSsKLSAJCWlmIChsaXN0ZW5fc29j ayA9PSAtMSkgewotIAkJCS8qIGtlcm5lbCBtYXkgbm90IHN1cHBvcnQgaXB2NiAqLwotIAkJCXZl cmJvc2UoInNvY2tldDogJS4xMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJCQlpZiAob3B0aW9u cy51c2VfbXB0Y3ApCi0rCQkJCXZlcmJvc2UoIk1QVENQIHJlcXVlc3RlZCBidXQgbWF5IG5vdCBi ZSBhdmFpbGFibGUuIik7Ci0gCQkJY29udGludWU7Ci0gCQl9Ci0gCQlpZiAoc2V0X25vbmJsb2Nr KGxpc3Rlbl9zb2NrKSA9PSAtMSkgewotQEAgLTg2Niw2ICs4NzUsMTAgQEAKLSAKLSAJCWRlYnVn KCJCaW5kIHRvIHBvcnQgJXMgb24gJXMuIiwgc3RycG9ydCwgbnRvcCk7Ci0gCi0rCQlnZXRzb2Nr b3B0KGxpc3Rlbl9zb2NrLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsCi0rCQkJCSAgICZzb2Nrc2l6 ZSwgJnNvY2tzaXplbGVuKTsKLSsJCWRlYnVnKCJTZXJ2ZXIgVENQIFJXSU4gc29ja2V0IHNpemU6 ICVkIiwgc29ja3NpemUpOwotKwotIAkJLyogQmluZCB0aGUgc29ja2V0IHRvIHRoZSBkZXNpcmVk IHBvcnQuICovCi0gCQlpZiAoYmluZChsaXN0ZW5fc29jaywgYWktPmFpX2FkZHIsIGFpLT5haV9h ZGRybGVuKSA9PSAtMSkgewotIAkJCWVycm9yKCJCaW5kIHRvIHBvcnQgJXMgb24gJXMgZmFpbGVk OiAlLjIwMHMuIiwKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGRfY29uZmlnIG9w ZW5zc2gtMTAuMnAxL3NzaGRfY29uZmlnCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9zc2hkX2Nv bmZpZwkyMDI2LTAzLTE4IDE1OjEyOjAyLjAxMDUxMzEwNyArMDEwMAotKysrIG9wZW5zc2gtMTAu MnAxL3NzaGRfY29uZmlnCTIwMjYtMDMtMTggMTU6MTM6MTcuODYzMTU4NTk2ICswMTAwCi1AQCAt MTksNiArMTksNiBAQAotICMgc2VtYW5hZ2UgcG9ydCAtYSAtdCBzc2hfcG9ydF90IC1wIHRjcCAj UE9SVE5VTUJFUgotICMKLS0jUG9ydCAyMgotK1BvcnQgMjIyMgotICNBZGRyZXNzRmFtaWx5IGFu eQotICNMaXN0ZW5BZGRyZXNzIDAuMC4wLjAKLSAjTGlzdGVuQWRkcmVzcyA6OgotQEAgLTEyMiw2 ICsxMjIsNyBAQAotICNQZXJtaXRUdW5uZWwgbm8KLSAjQ2hyb290RGlyZWN0b3J5IG5vbmUKLSAj VmVyc2lvbkFkZGVuZHVtIG5vbmUKLSsjVXNlTVBUQ1Agbm8KLSAKLSAjIG5vIGRlZmF1bHQgYmFu bmVyIHBhdGgKLSAjQmFubmVyIG5vbmUKLUBAIC0xMjksNiArMTMwLDE5IEBACi0gIyBvdmVycmlk ZSBkZWZhdWx0IG9mIG5vIHN1YnN5c3RlbXMKLSBTdWJzeXN0ZW0Jc2Z0cAkvdXNyL2xpYmV4ZWMv c2Z0cC1zZXJ2ZXIKLSAKLSsjIHRoZSBmb2xsb3dpbmcgYXJlIEhQTiByZWxhdGVkIGNvbmZpZ3Vy YXRpb24gb3B0aW9ucwotKyMgdGNwIHJlY2VpdmUgYnVmZmVyIHBvbGxpbmcuIGRpc2FibGUgaW4g bm9uIGF1dG90dW5pbmcga2VybmVscwotKyNUY3BSY3ZCdWZQb2xsIHllcwotKwotKyMgZGlzYWJs ZSBocG4gcGVyZm9ybWFuY2UgYm9vc3RzCi0rI0hQTkRpc2FibGVkIG5vCi0rCi0rIyBhbGxvdyB0 aGUgdXNlIG9mIHRoZSBub25lIGNpcGhlcgotKyNOb25lRW5hYmxlZCBubwotKwotKyMgYWxsb3cg dGhlIHVzZSBvZiB0aGUgbm9uZSBNQUMKLSsjTm9uZU1hY0VuYWJsZWQgbm8KLSsKLSAjIEV4YW1w bGUgb2Ygb3ZlcnJpZGluZyBzZXR0aW5ncyBvbiBhIHBlci11c2VyIGJhc2lzCi0gI01hdGNoIFVz ZXIgYW5vbmN2cwotICMJWDExRm9yd2FyZGluZyBubwotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAx Lm9yaWcvc3NoZF9jb25maWcuNSBvcGVuc3NoLTEwLjJwMS9zc2hkX2NvbmZpZy41Ci0tLS0gb3Bl bnNzaC0xMC4ycDEub3JpZy9zc2hkX2NvbmZpZy41CTIwMjYtMDMtMTggMTU6MTI6MDIuMDEwNjgy NzEzICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvc3NoZF9jb25maWcuNQkyMDI2LTAzLTE4IDE1 OjEzOjE3Ljg2MzQ4NzY1NSArMDEwMAotQEAgLTU2LDYgKzU2LDE2IEBACi0gLlBxIFwmIgotIGlu IG9yZGVyIHRvIHJlcHJlc2VudCBhcmd1bWVudHMgY29udGFpbmluZyBzcGFjZXMuCi0gLlBwCi0r LlhyIGhwbnNzaGQgOAotK2lzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBPcGVuU1NIJ3Mgc3NoZCBh bmQgdXNlcyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGZvcm1hdCwgZGlyZWN0aXZlcywgYW5kIG9w dGlvbnMuCi0rLlhyIGhwbnNzaGQgOAotK2NhbiB1c2UgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBm aWxlIGFzCi0rLlhyIHNzaGQgOAotK3Rob3VnaCB0aGUgaW52ZXJzZSBpcyBub3QgbmVjZXNzYXJp bHkgdHJ1ZS4gVGhpcyBpcyBiZWNhdXNlCi0rLlhyIGhwbnNzaCA4Ci0raGFzIHNvbWUgYWRkaXRp b25hbCBvcHRpb25zIHdoaWNoIGFyZSBkaXNjdXNzZWQgYmVsb3cuIEFzIHN1Y2ggYWRtaW5pc3Ry YXRvcnMgc2hvdWxkIG1haW50YWluCi0rc2VwZXJhdGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3Ig ZWFjaC4KLSsuUHAKLSBUaGUgcG9zc2libGUKLSBrZXl3b3JkcyBhbmQgdGhlaXIgbWVhbmluZ3Mg YXJlIGFzIGZvbGxvd3MgKG5vdGUgdGhhdAotIGtleXdvcmRzIGFyZSBjYXNlLWluc2Vuc2l0aXZl IGFuZCBhcmd1bWVudHMgYXJlIGNhc2Utc2Vuc2l0aXZlKToKLUBAIC02NjcsNiArNjc3LDEwIEBA Ci0gVENQIGFuZCBTdHJlYW1Mb2NhbC4KLSBUaGlzIG9wdGlvbiBvdmVycmlkZXMgYWxsIG90aGVy IGZvcndhcmRpbmctcmVsYXRlZCBvcHRpb25zIGFuZCBtYXkKLSBzaW1wbGlmeSByZXN0cmljdGVk IGNvbmZpZ3VyYXRpb25zLgotKy5JdCBDbSBEaXNhYmxlTVRBRVMKLStTd2l0Y2ggdGhlIGVuY3J5 cHRpb24gY2lwaGVyIGJlaW5nIHVzZWQgZnJvbSB0aGUgbXVsdGl0aHJlYWRlZCBNVC1BRVMtQ1RS IGNpcGhlcgotK2JhY2sgdG8gdGhlIHN0b2NrIHNpbmdsZS10aHJlYWRlZCBBRVMtQ1RSIGNpcGhl ci4gRGVmYXVsdCBpcyAKLSsuQ20gbm8uIEhQTlNTSCBvbmx5LiAKLSAuSXQgQ20gRXhwb3NlQXV0 aEluZm8KLSBXcml0ZXMgYSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIGEgbGlzdCBvZiBhdXRo ZW50aWNhdGlvbiBtZXRob2RzIGFuZAotIHB1YmxpYyBjcmVkZW50aWFscyAoZS5nLiBrZXlzKSB1 c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlci4KLUBAIC05NDMsNiArOTU3LDExIEBACi0gVGhl IGRlZmF1bHQgZm9yIHRoaXMgb3B0aW9uIGlzOgotIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzaWdu YXR1cmUgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5lZCB1c2luZwotIC5RcSBzc2ggLVEg SG9zdEtleUFsZ29yaXRobXMgLgotKy5JdCBDbSBIUE5EaXNhYmxlZAotK0luIHNvbWUgc2l0dWF0 aW9ucywgc3VjaCBhcyB0cmFuc2ZlcnMgb24gYSBsb2NhbCBhcmVhIG5ldHdvcmssIHRoZSBpbXBh Y3QKLStvZiB0aGUgSFBOIGNvZGUgcHJvZHVjZXMgYSBuZXQgZGVjcmVhc2UgaW4gcGVyZm9ybWFu Y2UuIEluIHRoZXNlIGNhc2VzIGl0IGlzCi0raGVscGZ1bCB0byBkaXNhYmxlIHRoZSBIUE4gZnVu Y3Rpb25hbGl0eS4gQnkgZGVmYXVsdCBIUE5EaXNhYmxlZCBpcyBzZXQgdG8gCi0rLkNNIG5vLgot IC5JdCBDbSBJZ25vcmVSaG9zdHMKLSBTcGVjaWZpZXMgd2hldGhlciB0byBpZ25vcmUgcGVyLXVz ZXIKLSAuUGEgLnJob3N0cwotQEAgLTE0NjUsNiArMTQ4NCwxOSBAQAotIGtleSBleGNoYW5nZSBt ZXRob2RzLgotIFRoZSBkZWZhdWx0IGlzCi0gLlBhIC9ldGMvbW9kdWxpIC4KLSsuSXQgQ20gTm9u ZUVuYWJsZWQKLStFbmFibGUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBOb25lIGNpcGhlci4g Q2FyZSBtdXN0IGFsd2F5cyBiZSB1c2VkCi0rd2hlbiBlbmFibGluZyB0aGlzIGFzIGl0IHdpbGwg YWxsb3cgdXNlcnMgdG8gc2VuZCBkYXRhIGluIHRoZSBjbGVhci4gSG93ZXZlciwKLStpdCBpcyBp bXBvcnRhbnQgdG8gbm90ZSB0aGF0IGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIHJlbWFpbnMg ZW5jcnlwdGVkCi0rZXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBEZWZhdWx0IGlzIAot Ky5DbSBubwotKy5JdCBDbSBOb25lTWFjRW5hYmxlZAotK0VuYWJsZSBvciBkaXNhYmxlIHRoZSB1 c2Ugb2YgdGhlIE5vbmUgTUFDLiBXaGVuIHRoaXMgaXMgZW5hYmxlZCBzc2gKLSt3aWxsICpub3Qq IHByb3ZpZGUgZGF0YSBpbnRlZ3JpdHkgb2YgYW55IGRhdGEgYmVpbmcgdHJhbnNtaXR0ZWQgYmV0 d2VlbiBob3N0cy4gVXNlCi0rd2l0aCBjYXV0aW9uIGFzIGl0LCB1bmxpa2UganVzdCB1c2luZyBO b25lRW5hYmxlZCwgZG9lc24ndCBwcm92aWRlIGRhdGEgaW50ZWdyaXR5IGFuZAotK3Byb3RlY3Rp b24gYWdhaW5zdCBtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2tzLiBBcyB3aXRoIE5vbmVFbmFibGVk IGFsbCBhdXRoZW50aWNhdGlvbgotK3JlbWFpbnMgZW5jcnlwdGVkIGFuZCBpbnRlZ3JpdHkgaXMg ZW5zdXJlZC4gRGVmYXVsdCBpcyAKLSsuQ20gbm8uCi0gLkl0IENtIFBBTVNlcnZpY2VOYW1lCi0g U3BlY2lmaWVzIHRoZSBzZXJ2aWNlIG5hbWUgdXNlZCBmb3IgUGx1Z2dhYmxlIEF1dGhlbnRpY2F0 aW9uIE1vZHVsZXMgKFBBTSkKLSBhdXRoZW50aWNhdGlvbiwgYXV0aG9yaXNhdGlvbiBhbmQgc2Vz c2lvbiBjb250cm9scyB3aGVuCi1AQCAtMjAzMyw2ICsyMDY1LDEzIEBACi0gLlBwCi0gVG8gZGlz YWJsZSBUQ1Aga2VlcGFsaXZlIG1lc3NhZ2VzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0bwot IC5DbSBubyAuCi0rLklUIENtIFRjcFJjdkJ1ZlBvbGwKLStFbmFibGUgb2YgZGlzYWJsZSB0aGUg cG9sbGluZyBvZiB0aGUgdGNwIHJlY2VpdmUgYnVmZmVyIHRocm91Z2hvdXQgdGhlIGxpZmUKLStv ZiB0aGUgY29ubmVjdGlvbi4gTWFrZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBm b3Igc3lzdGVtcyBtYWtpbmcgCi0rdXNlIG9mIGF1dG90dW5pbmcga2VybmVscyAobGludXggMi40 LjI0KywgMi42LCBNUyBWaXN0YSkgaW4gb3JkZXIgdG8KLSttYXhpbWl6ZSB0aHJvdWdocHV0IG9u IGhpZ2ggcGVyZm9ybWFuY2UgbmV0d29ya3MuIAotK0RlZmF1bHQgaXMgCi0rLkNtIHllcy4KLSAu SXQgQ20gVHJ1c3RlZFVzZXJDQUtleXMKLSBTcGVjaWZpZXMgYSBmaWxlIGNvbnRhaW5pbmcgcHVi bGljIGtleXMgb2YgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgdGhhdCBhcmUKLSB0cnVzdGVkIHRv IHNpZ24gdXNlciBjZXJ0aWZpY2F0ZXMgZm9yIGF1dGhlbnRpY2F0aW9uLCBvcgotQEAgLTIwOTMs NiArMjEzMiwxMiBAQAotIC5DbSBNYXRjaAotIC5DbSBIb3N0Ci0gZGlyZWN0aXZlcy4KLSsuSXQg Q20gVXNlTVBUQ1AKLStJZiBzZXQgdG8KLSsuQ20geWVzICwKLSt0aGlzIHdpbGwgZW5hYmxlIE11 bHRpcGF0aCBUQ1AgKE1QVENQKSBpbnN0ZWFkIG9mIFRDUCAodGhpcyBvbmx5IHdvcmtzIG9uIExp bnV4KS4KLStUaGUgZGVmYXVsdCBpcwotKy5DbSBubyAuCi0gLkl0IENtIFVzZVBBTQotIEVuYWJs ZXMgdGhlIFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGUgaW50ZXJmYWNlLgotIElmIHNl dCB0bwotQEAgLTIzMzEsMyArMjM3NiwxMSBAQAotIGFuZAotIC5BbiBNYXJrdXMgRnJpZWRsCi0g Y29udHJpYnV0ZWQgc3VwcG9ydCBmb3IgcHJpdmlsZWdlIHNlcGFyYXRpb24uCi0rLkFuIENocmlz IFJhcGllciwgCi0rLkFuIE1pY2hhZWwgU3RldmVucywgCi0rLkFuIEJlbiBCZW5uZXQsIAotK2Fu ZCAKLSsuQW4gTWlrZSBUYXNvdGEgCi0rZGV2ZWxvcGVkIHRoZSBIUE4gZXh0ZW5zaW9ucyBhdCB0 aGUgUGl0dHNidXJnaCBTdXBlcmNvbXV0aW5nIENlbnRlciAKLSt3aXRoIGdyYW50cyBmcm9tIENp c2NvLCB0aGUgTmF0aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZSwgYW5kIAotK3RoZSBOYXRpb25h bCBTY2llbmNlIEZvdW5kYXRpb24uIAotZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3No ZC1zZXNzaW9uLmMgb3BlbnNzaC0xMC4ycDEvc3NoZC1zZXNzaW9uLmMKLS0tLSBvcGVuc3NoLTEw LjJwMS5vcmlnL3NzaGQtc2Vzc2lvbi5jCTIwMjYtMDMtMTggMTU6MTI6MDIuMDExMjQyNzcxICsw MTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvc3NoZC1zZXNzaW9uLmMJMjAyNi0wMy0xOCAxNzozNToz Ni42NjkwMjYxNTggKzAxMDAKLUBAIC0xMTM0LDYgKzExMzQsMjAgQEAKLSAJfQotIAllbmRwd2Vu dCgpOwotIAotKwkvKiBnZXQgTk9ORSBvcHRpb25zICovCi0rCWlmIChvcHRpb25zLm5vbmVfZW5h YmxlZCA9PSAxKSB7Ci0rCQljaGFyICpvbGRfY2lwaGVycyA9IG9wdGlvbnMuY2lwaGVyczsKLSsJ CXhhc3ByaW50Zigmb3B0aW9ucy5jaXBoZXJzLCAiJXMsbm9uZSIsIG9sZF9jaXBoZXJzKTsKLSsJ CWZyZWUob2xkX2NpcGhlcnMpOwotKwotKwkJLyogb25seSBlbmFibGUgdGhlIG5vbmUgTUFDIGlu IGNvbnRleHQgb2YgdGhlIG5vbmUgY2lwaGVyIC1janIgKi8KLSsJCWlmIChvcHRpb25zLm5vbmVt YWNfZW5hYmxlZCA9PSAxKSB7Ci0rCQkJY2hhciAqb2xkX21hY3MgPSBvcHRpb25zLm1hY3M7Ci0r CQkJeGFzcHJpbnRmKCZvcHRpb25zLm1hY3MsICIlcyxub25lIiwgb2xkX21hY3MpOwotKwkJCWZy ZWUob2xkX21hY3MpOwotKwkJfQotKwl9Ci0rCi0gCWlmICghZGVidWdfZmxhZyAmJiAhaW5ldGRf ZmxhZykgewotIAkJaWYgKChzdGFydHVwX3BpcGUgPSBkdXAoUkVFWEVDX0NPTkZJR19QQVNTX0ZE KSkgPT0gLTEpCi0gCQkJZmF0YWwoImludGVybmFsIGVycm9yOiBubyBzdGFydHVwIHBpcGUiKTsK LUBAIC0xMzQ3LDYgKzEzNjEsOSBAQAotIAkgICAgcmRvbWFpbiA9PSBOVUxMID8gIiIgOiAiXCIi KTsKLSAJZnJlZShsYWRkcik7Ci0gCi0rCS8qIHNldCB0aGUgSFBOIG9wdGlvbnMgZm9yIHRoZSBj aGlsZCAqLwotKwljaGFubmVsX3NldF9ocG5fZGlzYWJsZWQob3B0aW9ucy5ocG5fZGlzYWJsZWQp OwotKwotIAkvKgotIAkgKiBXZSBkb24ndCB3YW50IHRvIGxpc3RlbiBmb3JldmVyIHVubGVzcyB0 aGUgb3RoZXIgc2lkZQotIAkgKiBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlcyBpdHNlbGYuICBT byB3ZSBzZXQgdXAgYW4gYWxhcm0gd2hpY2ggaXMKLWRpZmYgLU51ciBvcGVuc3NoLTEwLjJwMS5v cmlnL3NzaC5oIG9wZW5zc2gtMTAuMnAxL3NzaC5oCi0tLS0gb3BlbnNzaC0xMC4ycDEub3JpZy9z c2guaAkyMDI1LTEwLTEwIDA0OjM4OjMxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2gtMTAu MnAxL3NzaC5oCTIwMjYtMDMtMTggMTc6Mzc6MjYuMzg2NzA4OTU1ICswMTAwCi1AQCAtMTQsNiAr MTQsNyBAQAotIAotIC8qIERlZmF1bHQgcG9ydCBudW1iZXIuICovCi0gI2RlZmluZSBTU0hfREVG QVVMVF9QT1JUCTIyCi0rI2RlZmluZSBIUE5TU0hfREVGQVVMVF9QT1JUICAgIDIyMjIKLSAKLSAv KgotICAqIE1heGltdW0gbnVtYmVyIG9mIGNlcnRpZmljYXRlIGZpbGVzIHRoYXQgY2FuIGJlIHNw ZWNpZmllZAotQEAgLTQzLDcgKzQ0LDcgQEAKLSAgKiBOYW1lIGZvciB0aGUgc2VydmljZS4gIFRo ZSBwb3J0IG5hbWVkIGJ5IHRoaXMgc2VydmljZSBvdmVycmlkZXMgdGhlCi0gICogZGVmYXVsdCBw b3J0IGlmIHByZXNlbnQuCi0gICovCi0tI2RlZmluZSBTU0hfU0VSVklDRV9OQU1FCSJzc2giCi0r I2RlZmluZSBTU0hfU0VSVklDRV9OQU1FCSJocG5zc2giCi0gCi0gLyoKLSAgKiBOYW1lIG9mIHRo ZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBwcm9jZXNzIElEIG9mIHRoZQot ZGlmZiAtTnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvc3Noa2V5LmMgb3BlbnNzaC0xMC4ycDEvc3No a2V5LmMKLS0tLSBvcGVuc3NoLTEwLjJwMS5vcmlnL3NzaGtleS5jCTIwMjYtMDMtMTggMTU6MTI6 MDEuODc2MjM5NDgwICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvc3Noa2V5LmMJMjAyNi0wMy0x OCAxNToxMzoxNy44NjQ1MTMzNTMgKzAxMDAKLUBAIC0xNzUyLDcgKzE3NTIsOCBAQAotIAkgICAg c3RkZXJyKTsKLSAjZW5kaWYKLSAJaWYgKChyID0gY2lwaGVyX2luaXQoJmNjdHgsIGNpcGhlciwg a2V5aXYsIGNpcGhlcl9rZXlsZW4oY2lwaGVyKSwKLS0JICAgIGtleWl2ICsgY2lwaGVyX2tleWxl bihjaXBoZXIpLCBjaXBoZXJfaXZsZW4oY2lwaGVyKSwgMSkpICE9IDApCi0rCSAgICBrZXlpdiAr IGNpcGhlcl9rZXlsZW4oY2lwaGVyKSwgY2lwaGVyX2l2bGVuKGNpcGhlciksIDAsCi0rCSAgICBD SVBIRVJfRU5DUllQVCwgQ0lQSEVSX1NFUklBTCkpICE9IDApCi0gCQlnb3RvIG91dDsKLSAKLSAJ LyogU2VyaWFsaXNlIGFuZCBlbmNyeXB0IHRoZSBwcml2YXRlIGtleSB1c2luZyB0aGUgZXBoZW1l cmFsIGtleSAqLwotQEAgLTE4ODYsNyArMTg4Nyw4IEBACi0gCSAgICBrZXlpdiwgU1NIX0RJR0VT VF9NQVhfTEVOR1RIKSkgIT0gMCkKLSAJCWdvdG8gb3V0OwotIAlpZiAoKHIgPSBjaXBoZXJfaW5p dCgmY2N0eCwgY2lwaGVyLCBrZXlpdiwgY2lwaGVyX2tleWxlbihjaXBoZXIpLAotLQkgICAga2V5 aXYgKyBjaXBoZXJfa2V5bGVuKGNpcGhlciksIGNpcGhlcl9pdmxlbihjaXBoZXIpLCAwKSkgIT0g MCkKLSsJICAgIGtleWl2ICsgY2lwaGVyX2tleWxlbihjaXBoZXIpLCBjaXBoZXJfaXZsZW4oY2lw aGVyKSwgMCwKLSsJICAgIENJUEhFUl9ERUNSWVBULCBDSVBIRVJfU0VSSUFMKSkgIT0gMCkKLSAJ CWdvdG8gb3V0OwotICNpZmRlZiBERUJVR19QSwotIAlmcHJpbnRmKHN0ZGVyciwgIiVzOiBrZXkr aXZcbiIsIF9fZnVuY19fKTsKLUBAIC0yOTQxLDYgKzI5NDMsMTMgQEAKLSAJCWtkZm5hbWUgPSAi bm9uZSI7Ci0gCX0gZWxzZSBpZiAoY2lwaGVybmFtZSA9PSBOVUxMKQotIAkJY2lwaGVybmFtZSA9 IERFRkFVTFRfQ0lQSEVSTkFNRTsKLSsJLyoKLSsJICogTk9URTogV2l0aG91dCBPcGVuU1NMLCB0 aGlzIHN0cmluZyBjb21wYXJpc29uIGlzIHN0aWxsIHNhZmUsIGV2ZW4KLSsJICogdGhvdWdoIGl0 IHdpbGwgbmV2ZXIgbWF0Y2ggYmVjYXVzZSB0aGUgbXVsdGl0aHJlYWRlZCBjaXBoZXIgaXMgbm90 Ci0rCSAqIGVuYWJsZWQuCi0rCSAqLwotKwllbHNlIGlmIChzdHJjbXAoY2lwaGVybmFtZSwgImNo YWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmciKSA9PSAwKQotKwkJY2lwaGVybmFtZSA9ICJj aGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSI7Ci0gCWlmICgoY2lwaGVyID0gY2lwaGVyX2J5 X25hbWUoY2lwaGVybmFtZSkpID09IE5VTEwpIHsKLSAJCXIgPSBTU0hfRVJSX0lOVkFMSURfQVJH VU1FTlQ7Ci0gCQlnb3RvIG91dDsKLUBAIC0yOTc2LDcgKzI5ODUsNyBAQAotIAkJZ290byBvdXQ7 Ci0gCX0KLSAJaWYgKChyID0gY2lwaGVyX2luaXQoJmNpcGhlcmNvbnRleHQsIGNpcGhlciwga2V5 LCBrZXlsZW4sCi0tCSAgICBrZXkgKyBrZXlsZW4sIGl2bGVuLCAxKSkgIT0gMCkKLSsJICAgIGtl eSArIGtleWxlbiwgaXZsZW4sIDAsIENJUEhFUl9FTkNSWVBULCBDSVBIRVJfU0VSSUFMKSkgIT0g MCkKLSAJCWdvdG8gb3V0OwotIAotIAlpZiAoKHIgPSBzc2hidWZfcHV0KGVuY29kZWQsIEFVVEhf TUFHSUMsIHNpemVvZihBVVRIX01BR0lDKSkpICE9IDAgfHwKLUBAIC0zMTYyLDYgKzMxNzEsOCBA QAotIAkgICAgKHIgPSBzc2hidWZfZ2V0X3UzMihkZWNvZGVkLCAmZW5jcnlwdGVkX2xlbikpICE9 IDApCi0gCQlnb3RvIG91dDsKLSAKLSsJaWYgKHN0cmNtcChjaXBoZXJuYW1lLCAiY2hhY2hhMjAt cG9seTEzMDUtbXRAaHBuc3NoLm9yZyIpID09IDApCi0rCQlzdHJjcHkoY2lwaGVybmFtZSwgImNo YWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tIik7Ci0gCWlmICgoY2lwaGVyID0gY2lwaGVyX2J5 X25hbWUoY2lwaGVybmFtZSkpID09IE5VTEwpIHsKLSAJCXIgPSBTU0hfRVJSX0tFWV9VTktOT1dO X0NJUEhFUjsKLSAJCWdvdG8gb3V0OwotQEAgLTMyMTcsNyArMzIyOCw3IEBACi0gCS8qIGRlY3J5 cHQgcHJpdmF0ZSBwb3J0aW9uIG9mIGtleSAqLwotIAlpZiAoKHIgPSBzc2hidWZfcmVzZXJ2ZShk ZWNyeXB0ZWQsIGVuY3J5cHRlZF9sZW4sICZkcCkpICE9IDAgfHwKLSAJICAgIChyID0gY2lwaGVy X2luaXQoJmNpcGhlcmNvbnRleHQsIGNpcGhlciwga2V5LCBrZXlsZW4sCi0tCSAgICBrZXkgKyBr ZXlsZW4sIGl2bGVuLCAwKSkgIT0gMCkKLSsJICAgIGtleSArIGtleWxlbiwgaXZsZW4sIDAsIENJ UEhFUl9ERUNSWVBULCBDSVBIRVJfU0VSSUFMKSkgIT0gMCkKLSAJCWdvdG8gb3V0OwotIAlpZiAo KHIgPSBjaXBoZXJfY3J5cHQoY2lwaGVyY29udGV4dCwgMCwgZHAsIHNzaGJ1Zl9wdHIoZGVjb2Rl ZCksCi0gCSAgICBlbmNyeXB0ZWRfbGVuLCAwLCBhdXRobGVuKSkgIT0gMCkgewotZGlmZiAtTnVy IG9wZW5zc2gtMTAuMnAxLm9yaWcvdW1hYy5jIG9wZW5zc2gtMTAuMnAxL3VtYWMuYwotLS0tIG9w ZW5zc2gtMTAuMnAxLm9yaWcvdW1hYy5jCTIwMjUtMTAtMTAgMDQ6Mzg6MzEuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzaC0xMC4ycDEvdW1hYy5jCTIwMjYtMDMtMTggMTU6MTM6MTcuODY1ODcx MTUwICswMTAwCi1AQCAtMTM3LDE1ICsxMzcsNDggQEAKLSAvKiAtLS0gRW5kaWFuIENvbnZlcnNp b24gLS0tIEZvcmNpbmcgYXNzZW1ibHkgb24gc29tZSBwbGF0Zm9ybXMgICAgICAgICAgICovCi0g LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSAqLwotIAotKwotKy8qIFVzaW5nIGxvY2FsIHN0YXRpY2FsbHkgZGVm aW5lZCB2ZXJzaW9ucyBvZiB0aGUgZ2V0L3B1dCBmdW5jdGlvbnMKLSsgKiBmb3VuZCBpbiBtaXNj LmMgYWxsb3dzIHRoZW0gdG8gYmUgaW5saW5lZC4gVGhpcyBpbXByb3ZlcyB0aHJvdWdocHV0Ci0r ICogcGVyZm9ybWFuY2UgYnkgMTAlIHRvIDE1JSBvbiB3ZWxsIGNvbm5lY3RlZCAoMTBHYi9zKykg c3lzdGVtcy4gCi0rICogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4gMjAyMi0wMy0wOSAq LwotKwotK3N0YXRpYyAgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAx LCA0KSkpCi0rdV9pbnQzMl90IHVtYWNfZ2V0X3UzMl9sZShjb25zdCB2b2lkICp2cCkKLSt7Ci0r ICAgICAgICBjb25zdCB1X2NoYXIgKnAgPSAoY29uc3QgdV9jaGFyICopdnA7Ci0rICAgICAgICB1 X2ludDMyX3QgdjsKLSsKLSsgICAgICAgIHYgID0gKHVfaW50MzJfdClwWzBdOwotKyAgICAgICAg diB8PSAodV9pbnQzMl90KXBbMV0gPDwgODsKLSsgICAgICAgIHYgfD0gKHVfaW50MzJfdClwWzJd IDw8IDE2OwotKyAgICAgICAgdiB8PSAodV9pbnQzMl90KXBbM10gPDwgMjQ7Ci0rCi0rICAgICAg ICByZXR1cm4gKHYpOwotK30KLSsKLSsjaWYgMCAvKiBjb21waWxlIHRpbWUgd2FybmluZyB0aHJv d24gb3RoZXJ3aXNlICovCi0rc3RhdGljIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9fKF9fbWlu Ynl0ZXNfXywgMSwgNCkpKTsKLSt2b2lkIHVtYWNfcHV0X3UzMl9sZSh2b2lkICp2cCwgdV9pbnQz Ml90IHYpCi0rewotKyAgICAgICAgdV9jaGFyICpwID0gKHVfY2hhciAqKXZwOwotKwotKyAgICAg ICAgcFswXSA9ICh1X2NoYXIpdiAmIDB4ZmY7Ci0rICAgICAgICBwWzFdID0gKHVfY2hhcikodiA+ PiA4KSAmIDB4ZmY7Ci0rICAgICAgICBwWzJdID0gKHVfY2hhcikodiA+PiAxNikgJiAweGZmOwot KyAgICAgICAgcFszXSA9ICh1X2NoYXIpKHYgPj4gMjQpICYgMHhmZjsKLSt9Ci0rI2VuZGlmCi0r Ci0gI2lmIChfX0xJVFRMRV9FTkRJQU5fXykKLSAjZGVmaW5lIExPQURfVUlOVDMyX1JFVkVSU0VE KHApCQlnZXRfdTMyKHApCi0gI2RlZmluZSBTVE9SRV9VSU5UMzJfUkVWRVJTRUQocCx2KQlwdXRf dTMyKHAsdikKLSAjZWxzZQotLSNkZWZpbmUgTE9BRF9VSU5UMzJfUkVWRVJTRUQocCkJCWdldF91 MzJfbGUocCkKLS0jZGVmaW5lIFNUT1JFX1VJTlQzMl9SRVZFUlNFRChwLHYpCXB1dF91MzJfbGUo cCx2KQotKyNkZWZpbmUgTE9BRF9VSU5UMzJfUkVWRVJTRUQocCkJCXVtYWNfZ2V0X3UzMl9sZShw KQotKyNkZWZpbmUgU1RPUkVfVUlOVDMyX1JFVkVSU0VEKHAsdikJdW1hY19wdXRfdTMyX2xlKHAs dikKLSAjZW5kaWYKLSAKLS0jZGVmaW5lIExPQURfVUlOVDMyX0xJVFRMRShwKQkJKGdldF91MzJf bGUocCkpCi0rI2RlZmluZSBMT0FEX1VJTlQzMl9MSVRUTEUocCkJCSh1bWFjX2dldF91MzJfbGUo cCkpCi0gI2RlZmluZSBTVE9SRV9VSU5UMzJfQklHKHAsdikJCXB1dF91MzIocCwgdikKLSAKLSAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCi1kaWZmIC1OdXIgb3BlbnNzaC0xMC4ycDEub3JpZy91dGhhc2gu aCBvcGVuc3NoLTEwLjJwMS91dGhhc2guaAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvdXRoYXNo LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NoLTEwLjJw MS91dGhhc2guaAkyMDI2LTAzLTE4IDE1OjEzOjE3Ljg2NjMwMjkzOSArMDEwMAotQEAgLTAsMCAr MSwxMTQwIEBACi0rLyoKLStDb3B5cmlnaHQgKGMpIDIwMDMtMjAyMiwgVHJveSBELiBIYW5zb24g IGh0dHBzOi8vdHJveWRoYW5zb24uZ2l0aHViLmlvL3V0aGFzaC8KLStBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKwotK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotKwotKyAgICAqIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgotKwotK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCi0rSVMiIEFORCBBTlkgRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0rVE8sIFRI RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB Ci0rUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQ09QWVJJR0hUIE9XTkVSCi0rT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0rRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotK1BST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUgotK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YKLStMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotK05FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotK1NPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyov Ci0rCi0rI2lmbmRlZiBVVEhBU0hfSAotKyNkZWZpbmUgVVRIQVNIX0gKLSsKLSsjZGVmaW5lIFVU SEFTSF9WRVJTSU9OIDIuMy4wCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPiAgIC8qIG1lbWNtcCwg bWVtc2V0LCBzdHJsZW4gKi8KLSsjaW5jbHVkZSA8c3RkZGVmLmg+ICAgLyogcHRyZGlmZl90ICov Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPiAgIC8qIGV4aXQgKi8KLSsKLSsjaWYgZGVmaW5lZChIQVNI X0RFRklORV9PV05fU1RESU5UKSAmJiBIQVNIX0RFRklORV9PV05fU1RESU5UCi0rLyogVGhpcyBj b2RlcGF0aCBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYnV0IEkgcGxh biB0byByZW1vdmUgaXQuICovCi0rI3dhcm5pbmcgIkhBU0hfREVGSU5FX09XTl9TVERJTlQgaXMg ZGVwcmVjYXRlZDsgcGxlYXNlIHVzZSBIQVNIX05PX1NURElOVCBpbnN0ZWFkIgotK3R5cGVkZWYg dW5zaWduZWQgaW50IHVpbnQzMl90OwotK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owot KyNlbGlmIGRlZmluZWQoSEFTSF9OT19TVERJTlQpICYmIEhBU0hfTk9fU1RESU5UCi0rI2Vsc2UK LSsjaW5jbHVkZSA8c3RkaW50Lmg+ICAgLyogdWludDhfdCwgdWludDMyX3QgKi8KLSsjZW5kaWYK LSsKLSsvKiBUaGVzZSBtYWNyb3MgdXNlIGRlY2x0eXBlIG9yIHRoZSBlYXJsaWVyIF9fdHlwZW9m IEdOVSBleHRlbnNpb24uCi0rICAgQXMgZGVjbHR5cGUgaXMgb25seSBhdmFpbGFibGUgaW4gbmV3 ZXIgY29tcGlsZXJzIChWUzIwMTAgb3IgZ2NjIDQuMysKLSsgICB3aGVuIGNvbXBpbGluZyBjKysg c291cmNlKSB0aGlzIGNvZGUgdXNlcyB3aGF0ZXZlciBtZXRob2QgaXMgbmVlZGVkCi0rICAgb3Is IGZvciBWUzIwMDggd2hlcmUgbmVpdGhlciBpcyBhdmFpbGFibGUsIHVzZXMgY2FzdGluZyB3b3Jr YXJvdW5kcy4gKi8KLSsjaWYgIWRlZmluZWQoREVDTFRZUEUpICYmICFkZWZpbmVkKE5PX0RFQ0xU WVBFKQotKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAgIC8qIE1TIGNvbXBpbGVyICovCi0rI2lmIF9N U0NfVkVSID49IDE2MDAgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykgIC8qIFZTMjAxMCBvciBuZXdl ciBpbiBDKysgbW9kZSAqLwotKyNkZWZpbmUgREVDTFRZUEUoeCkgKGRlY2x0eXBlKHgpKQotKyNl bHNlICAgICAgICAgICAgICAgICAgIC8qIFZTMjAwOCBvciBvbGRlciAob3IgVlMyMDEwIGluIEMg bW9kZSkgKi8KLSsjZGVmaW5lIE5PX0RFQ0xUWVBFCi0rI2VuZGlmCi0rI2VsaWYgZGVmaW5lZChf X01DU1RfXykgIC8qIEVsYnJ1cyBDIENvbXBpbGVyICovCi0rI2RlZmluZSBERUNMVFlQRSh4KSAo X190eXBlb2YoeCkpCi0rI2VsaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19J Q0NBUk1fXykgfHwgZGVmaW5lZChfX0xDQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKQotKyNk ZWZpbmUgTk9fREVDTFRZUEUKLSsjZWxzZSAgICAgICAgICAgICAgICAgICAvKiBHTlUsIFN1biBh bmQgb3RoZXIgY29tcGlsZXJzICovCi0rI2RlZmluZSBERUNMVFlQRSh4KSAoX190eXBlb2YoeCkp Ci0rI2VuZGlmCi0rI2VuZGlmCi0rCi0rI2lmZGVmIE5PX0RFQ0xUWVBFCi0rI2RlZmluZSBERUNM VFlQRSh4KQotKyNkZWZpbmUgREVDTFRZUEVfQVNTSUdOKGRzdCxzcmMpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICBjaGFyICoqX2RhX2RzdCA9IChjaGFyKiopKCYoZHN0KSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKl9kYV9kc3QgPSAoY2hhciop KHNyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSt9IHdoaWxlICgwKQotKyNlbHNlCi0rI2RlZmluZSBERUNMVFlQRV9BU1NJR04oZHN0 LHNyYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot K2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChkc3QpID0gREVDTFRZUEUoZHN0KShzcmMp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r fSB3aGlsZSAoMCkKLSsjZW5kaWYKLSsKLSsjaWZuZGVmIHV0aGFzaF9tYWxsb2MKLSsjZGVmaW5l IHV0aGFzaF9tYWxsb2Moc3opIG1hbGxvYyhzeikgICAgICAvKiBtYWxsb2MgZmNuICAgICAgICAg ICAgICAgICAgICAgICovCi0rI2VuZGlmCi0rI2lmbmRlZiB1dGhhc2hfZnJlZQotKyNkZWZpbmUg dXRoYXNoX2ZyZWUocHRyLHN6KSBmcmVlKHB0cikgICAgIC8qIGZyZWUgZmNuICAgICAgICAgICAg ICAgICAgICAgICAgKi8KLSsjZW5kaWYKLSsjaWZuZGVmIHV0aGFzaF9iemVybwotKyNkZWZpbmUg dXRoYXNoX2J6ZXJvKGEsbikgbWVtc2V0KGEsJ1wwJyxuKQotKyNlbmRpZgotKyNpZm5kZWYgdXRo YXNoX3N0cmxlbgotKyNkZWZpbmUgdXRoYXNoX3N0cmxlbihzKSBzdHJsZW4ocykKLSsjZW5kaWYK LSsKLSsjaWZuZGVmIEhBU0hfRlVOQ1RJT04KLSsjZGVmaW5lIEhBU0hfRlVOQ1RJT04oa2V5cHRy LGtleWxlbixoYXNodikgSEFTSF9KRU4oa2V5cHRyLCBrZXlsZW4sIGhhc2h2KQotKyNlbmRpZgot KwotKyNpZm5kZWYgSEFTSF9LRVlDTVAKLSsjZGVmaW5lIEhBU0hfS0VZQ01QKGEsYixuKSBtZW1j bXAoYSxiLG4pCi0rI2VuZGlmCi0rCi0rI2lmbmRlZiB1dGhhc2hfbm9leHBhbmRfZnlpCi0rI2Rl ZmluZSB1dGhhc2hfbm9leHBhbmRfZnlpKHRibCkgICAgICAgICAgLyogY2FuIGJlIGRlZmluZWQg dG8gbG9nIG5vZXhwYW5kICAqLwotKyNlbmRpZgotKyNpZm5kZWYgdXRoYXNoX2V4cGFuZF9meWkK LSsjZGVmaW5lIHV0aGFzaF9leHBhbmRfZnlpKHRibCkgICAgICAgICAgICAvKiBjYW4gYmUgZGVm aW5lZCB0byBsb2cgZXhwYW5kcyAgICovCi0rI2VuZGlmCi0rCi0rI2lmbmRlZiBIQVNIX05PTkZB VEFMX09PTQotKyNkZWZpbmUgSEFTSF9OT05GQVRBTF9PT00gMAotKyNlbmRpZgotKwotKyNpZiBI QVNIX05PTkZBVEFMX09PTQotKy8qIG1hbGxvYyBmYWlsdXJlcyBjYW4gYmUgcmVjb3ZlcmVkIGZy b20gKi8KLSsKLSsjaWZuZGVmIHV0aGFzaF9ub25mYXRhbF9vb20KLSsjZGVmaW5lIHV0aGFzaF9u b25mYXRhbF9vb20ob2JqKSBkbyB7fSB3aGlsZSAoMCkgICAgLyogbm9uLWZhdGFsIE9PTSBlcnJv ciAqLwotKyNlbmRpZgotKwotKyNkZWZpbmUgSEFTSF9SRUNPUkRfT09NKG9vbWVkKSBkbyB7IChv b21lZCkgPSAxOyB9IHdoaWxlICgwKQotKyNkZWZpbmUgSUZfSEFTSF9OT05GQVRBTF9PT00oeCkg eAotKwotKyNlbHNlCi0rLyogbWFsbG9jIGZhaWx1cmVzIHJlc3VsdCBpbiBsb3N0IG1lbW9yeSwg aGFzaCB0YWJsZXMgYXJlIHVudXNhYmxlICovCi0rCi0rI2lmbmRlZiB1dGhhc2hfZmF0YWwKLSsj ZGVmaW5lIHV0aGFzaF9mYXRhbChtc2cpIGV4aXQoLTEpICAgICAgICAvKiBmYXRhbCBPT00gZXJy b3IgKi8KLSsjZW5kaWYKLSsKLSsjZGVmaW5lIEhBU0hfUkVDT1JEX09PTShvb21lZCkgdXRoYXNo X2ZhdGFsKCJvdXQgb2YgbWVtb3J5IikKLSsjZGVmaW5lIElGX0hBU0hfTk9ORkFUQUxfT09NKHgp Ci0rCi0rI2VuZGlmCi0rCi0rLyogaW5pdGlhbCBudW1iZXIgb2YgYnVja2V0cyAqLwotKyNkZWZp bmUgSEFTSF9JTklUSUFMX05VTV9CVUNLRVRTIDMyVSAgICAgLyogaW5pdGlhbCBudW1iZXIgb2Yg YnVja2V0cyAgICAgICAgKi8KLSsjZGVmaW5lIEhBU0hfSU5JVElBTF9OVU1fQlVDS0VUU19MT0cy IDVVIC8qIGxnMiBvZiBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzICovCi0rI2RlZmluZSBIQVNI X0JLVF9DQVBBQ0lUWV9USFJFU0ggMTBVICAgICAvKiBleHBhbmQgd2hlbiBidWNrZXQgY291bnQg cmVhY2hlcyAqLwotKwotKy8qIGNhbGN1bGF0ZSB0aGUgZWxlbWVudCB3aG9zZSBoYXNoIGhhbmRs ZSBhZGRyZXNzIGlzIGhocCAqLwotKyNkZWZpbmUgRUxNVF9GUk9NX0hIKHRibCxoaHApICgodm9p ZCopKCgoY2hhciopKGhocCkpIC0gKCh0YmwpLT5oaG8pKSkKLSsvKiBjYWxjdWxhdGUgdGhlIGhh c2ggaGFuZGxlIGZyb20gZWxlbWVudCBhZGRyZXNzIGVscCAqLwotKyNkZWZpbmUgSEhfRlJPTV9F TE1UKHRibCxlbHApICgoVVRfaGFzaF9oYW5kbGUqKSh2b2lkKikoKChjaGFyKikoZWxwKSkgKyAo KHRibCktPmhobykpKQotKwotKyNkZWZpbmUgSEFTSF9ST0xMQkFDS19CS1QoaGgsIGhlYWQsIGl0 ZW1wdHJoaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKl9oZF9oaF9pdGVtID0g KGl0ZW1wdHJoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQg X2hkX2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIEhBU0hfVE9fQktUKF9oZF9oaF9pdGVtLT5oYXNodiwgKGhlYWQp LT5oaC50YmwtPm51bV9idWNrZXRzLCBfaGRfYmt0KTsgICAgICAgICBcCi0rICAoaGVhZCktPmho LnRibC0+YnVja2V0c1tfaGRfYmt0XS5jb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgX2hkX2hoX2l0ZW0tPmhoX25leHQgPSBOVUxMOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIF9oZF9oaF9pdGVt LT5oaF9wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfVkFMVUUoa2V5cHRy LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9GVU5DVElPTihrZXlwdHIsIGtl eWxlbiwgaGFzaHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9GSU5EX0JZSEFTSFZBTFVFKGhoLGhlYWQs a2V5cHRyLGtleWxlbixoYXNodmFsLG91dCkgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAob3V0KSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKGhlYWQp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX2hmX2JrdDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfVE9f QktUKGhhc2h2YWwsIChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hmX2JrdCk7ICAgICAg ICAgICAgICAgICAgXAotKyAgICBpZiAoSEFTSF9CTE9PTV9URVNUKChoZWFkKS0+aGgudGJsLCBo YXNodmFsKSAhPSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBIQVNIX0ZJ TkRfSU5fQktUKChoZWFkKS0+aGgudGJsLCBoaCwgKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbIF9o Zl9ia3QgXSwga2V5cHRyLCBrZXlsZW4sIGhhc2h2YWwsIG91dCk7IFwKLSsgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0r Ci0rI2RlZmluZSBIQVNIX0ZJTkQoaGgsaGVhZCxrZXlwdHIsa2V5bGVuLG91dCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIChvdXQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBpZiAoaGVhZCkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICB1bnNpZ25lZCBfaGZfaGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9WQUxVRShrZXlwdHIsIGtleWxl biwgX2hmX2hhc2h2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgIEhBU0hfRklORF9CWUhBU0hWQUxVRShoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW4sIF9oZl9o YXNodiwgb3V0KTsgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9 IHdoaWxlICgwKQotKwotKyNpZmRlZiBIQVNIX0JMT09NCi0rI2RlZmluZSBIQVNIX0JMT09NX0JJ VExFTiAoMVVMIDw8IEhBU0hfQkxPT00pCi0rI2RlZmluZSBIQVNIX0JMT09NX0JZVEVMRU4gKEhB U0hfQkxPT01fQklUTEVOLzhVTCkgKyAoKChIQVNIX0JMT09NX0JJVExFTiU4VUwpIT0wVUwpID8g MVVMIDogMFVMKQotKyNkZWZpbmUgSEFTSF9CTE9PTV9NQUtFKHRibCxvb21lZCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAodGJsKS0+Ymxvb21fbmJpdHMgPSBIQVNIX0JMT09NOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKHRibCktPmJsb29tX2J2 ID0gKHVpbnQ4X3QqKXV0aGFzaF9tYWxsb2MoSEFTSF9CTE9PTV9CWVRFTEVOKTsgICAgICAgICAg ICAgICAgIFwKLSsgIGlmICghKHRibCktPmJsb29tX2J2KSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfUkVDT1JEX09P TShvb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdXRoYXNoX2J6ZXJvKCh0 YmwpLT5ibG9vbV9idiwgSEFTSF9CTE9PTV9CWVRFTEVOKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICh0YmwpLT5ibG9vbV9zaWcgPSBIQVNIX0JMT09NX1NJR05BVFVSRTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9CTE9PTV9GUkVFKHRibCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB1dGhhc2hfZnJlZSgodGJsKS0+Ymxvb21fYnYsIEhB U0hfQkxPT01fQllURUxFTik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hp bGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0JMT09NX0JJVFNFVChidixpZHgpIChidlsoaWR4KS84 VV0gfD0gKDFVIDw8ICgoaWR4KSU4VSkpKQotKyNkZWZpbmUgSEFTSF9CTE9PTV9CSVRURVNUKGJ2 LGlkeCkgKGJ2WyhpZHgpLzhVXSAmICgxVSA8PCAoKGlkeCklOFUpKSkKLSsKLSsjZGVmaW5lIEhB U0hfQkxPT01fQUREKHRibCxoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBIQVNIX0JMT09NX0JJVFNFVCgodGJsKS0+Ymxvb21fYnYsICgo aGFzaHYpICYgKHVpbnQzMl90KSgoMVVMIDw8ICh0YmwpLT5ibG9vbV9uYml0cykgLSAxVSkpKQot KwotKyNkZWZpbmUgSEFTSF9CTE9PTV9URVNUKHRibCxoYXNodikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hfQkxPT01fQklUVEVTVCgodGJs KS0+Ymxvb21fYnYsICgoaGFzaHYpICYgKHVpbnQzMl90KSgoMVVMIDw8ICh0YmwpLT5ibG9vbV9u Yml0cykgLSAxVSkpKQotKwotKyNlbHNlCi0rI2RlZmluZSBIQVNIX0JMT09NX01BS0UodGJsLG9v bWVkKQotKyNkZWZpbmUgSEFTSF9CTE9PTV9GUkVFKHRibCkKLSsjZGVmaW5lIEhBU0hfQkxPT01f QUREKHRibCxoYXNodikKLSsjZGVmaW5lIEhBU0hfQkxPT01fVEVTVCh0YmwsaGFzaHYpICgxKQot KyNkZWZpbmUgSEFTSF9CTE9PTV9CWVRFTEVOIDBVCi0rI2VuZGlmCi0rCi0rI2RlZmluZSBIQVNI X01BS0VfVEFCTEUoaGgsaGVhZCxvb21lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChoZWFkKS0+aGgu dGJsID0gKFVUX2hhc2hfdGFibGUqKXV0aGFzaF9tYWxsb2Moc2l6ZW9mKFVUX2hhc2hfdGFibGUp KTsgICAgICAgICBcCi0rICBpZiAoIShoZWFkKS0+aGgudGJsKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX1JFQ09S RF9PT00ob29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHV0aGFzaF9iemVy bygoaGVhZCktPmhoLnRibCwgc2l6ZW9mKFVUX2hhc2hfdGFibGUpKTsgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAoaGVhZCktPmhoLnRibC0+dGFpbCA9ICYoKGhlYWQpLT5oaCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGhlYWQpLT5oaC50 YmwtPm51bV9idWNrZXRzID0gSEFTSF9JTklUSUFMX05VTV9CVUNLRVRTOyAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgIChoZWFkKS0+aGgudGJsLT5sb2cyX251bV9idWNrZXRzID0gSEFTSF9J TklUSUFMX05VTV9CVUNLRVRTX0xPRzI7ICAgICAgICAgICAgXAotKyAgICAoaGVhZCktPmhoLnRi bC0+aGhvID0gKGNoYXIqKSgmKGhlYWQpLT5oaCkgLSAoY2hhciopKGhlYWQpOyAgICAgICAgICAg ICAgICAgIFwKLSsgICAgKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHMgPSAoVVRfaGFzaF9idWNrZXQq KXV0aGFzaF9tYWxsb2MoICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBIQVNIX0lOSVRJ QUxfTlVNX0JVQ0tFVFMgKiBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAgICAgICAg ICAgICAgXAotKyAgICAoaGVhZCktPmhoLnRibC0+c2lnbmF0dXJlID0gSEFTSF9TSUdOQVRVUkU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgaWYgKCEoaGVhZCktPmho LnRibC0+YnVja2V0cykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgSEFTSF9SRUNPUkRfT09NKG9vbWVkKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIHV0aGFzaF9mcmVlKCho ZWFkKS0+aGgudGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgdXRoYXNoX2J6ZXJvKCho ZWFkKS0+aGgudGJsLT5idWNrZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgICBIQVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFMgKiBzaXplb2Yoc3RydWN0 IFVUX2hhc2hfYnVja2V0KSk7ICAgICAgICAgICAgIFwKLSsgICAgICBIQVNIX0JMT09NX01BS0Uo KGhlYWQpLT5oaC50YmwsIG9vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgaWYgKG9vbWVkKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgdXRoYXNoX2ZyZWUoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHMsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICBIQVNIX0lOSVRJ QUxfTlVNX0JVQ0tFVFMqc2l6ZW9mKHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkpOyAgICAgICAgICAg XAotKyAgICAgICAgICB1dGhhc2hfZnJlZSgoaGVhZCktPmhoLnRibCwgc2l6ZW9mKFVUX2hhc2hf dGFibGUpKTsgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhB U0hfUkVQTEFDRV9CWUhBU0hWQUxVRV9JTk9SREVSKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9p bixoYXNodmFsLGFkZCxyZXBsYWNlZCxjbXBmY24pIFwKLStkbyB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAocmVwbGFjZWQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9GSU5EX0JZSEFTSFZBTFVF KGhoLCBoZWFkLCAmKChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIHJlcGxh Y2VkKTsgXAotKyAgaWYgKHJlcGxhY2VkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9ERUxFVEUoaGgs IGhlYWQsIHJlcGxhY2VkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfS0VZUFRSX0JZ SEFTSFZBTFVFX0lOT1JERVIoaGgsIGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9p biwgaGFzaHZhbCwgYWRkLCBjbXBmY24pOyBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhB U0hfUkVQTEFDRV9CWUhBU0hWQUxVRShoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4saGFzaHZh bCxhZGQscmVwbGFjZWQpIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAocmVwbGFj ZWQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgSEFTSF9GSU5EX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChh ZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIHJlcGxhY2VkKTsgXAotKyAgaWYg KHJlcGxhY2VkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9ERUxFVEUoaGgsIGhlYWQsIHJlcGxhY2Vk KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFKGhoLCBo ZWFkLCAmKChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCk7IFwKLSt9 IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9SRVBMQUNFKGhoLGhlYWQsZmllbGRuYW1lLGtl eWxlbl9pbixhZGQscmVwbGFjZWQpICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaHJfaGFzaHY7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9WQUxVRSgm KChhZGQpLT5maWVsZG5hbWUpLCBrZXlsZW5faW4sIF9ocl9oYXNodik7ICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIEhBU0hfUkVQTEFDRV9CWUhBU0hWQUxVRShoaCwgaGVhZCwgZmllbGRu YW1lLCBrZXlsZW5faW4sIF9ocl9oYXNodiwgYWRkLCByZXBsYWNlZCk7IFwKLSt9IHdoaWxlICgw KQotKwotKyNkZWZpbmUgSEFTSF9SRVBMQUNFX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5 bGVuX2luLGFkZCxyZXBsYWNlZCxjbXBmY24pICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICB1bnNpZ25lZCBfaHJfaGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9WQUxVRSgmKChhZGQpLT5m aWVsZG5hbWUpLCBrZXlsZW5faW4sIF9ocl9oYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIEhBU0hfUkVQTEFDRV9CWUhBU0hWQUxVRV9JTk9SREVSKGhoLCBoZWFkLCBmaWVsZG5h bWUsIGtleWxlbl9pbiwgX2hyX2hhc2h2LCBhZGQsIHJlcGxhY2VkLCBjbXBmY24pOyBcCi0rfSB3 aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhBU0hfQVBQRU5EX0xJU1QoaGgsIGhlYWQsIGFkZCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgKGFkZCktPmhoLm5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChhZGQpLT5oaC5wcmV2 ID0gRUxNVF9GUk9NX0hIKChoZWFkKS0+aGgudGJsLCAoaGVhZCktPmhoLnRibC0+dGFpbCk7ICAg ICAgICAgICBcCi0rICAoaGVhZCktPmhoLnRibC0+dGFpbC0+bmV4dCA9IChhZGQpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGhlYWQpLT5oaC50Ymwt PnRhaWwgPSAmKChhZGQpLT5oaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9BS0JJX0lOTkVSX0xPT1Ao aGgsaGVhZCxhZGQsY21wZmNuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICBpZiAoY21wZmNuKERFQ0xUWVBFKGhlYWQpKF9oc19pdGVyKSwgYWRkKSA+IDApIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSB3aGlsZSAoKF9oc19pdGVyID0gSEhfRlJPTV9F TE1UKChoZWFkKS0+aGgudGJsLCBfaHNfaXRlciktPm5leHQpKTsgICAgICAgICAgIFwKLSt9IHdo aWxlICgwKQotKwotKyNpZmRlZiBOT19ERUNMVFlQRQotKyN1bmRlZiBIQVNIX0FLQklfSU5ORVJf TE9PUAotKyNkZWZpbmUgSEFTSF9BS0JJX0lOTkVSX0xPT1AoaGgsaGVhZCxhZGQsY21wZmNuKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICBjaGFyICpfaHNfc2F2ZWRfaGVhZCA9IChjaGFyKikoaGVhZCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgZG8geyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgREVDTFRZUEVfQVNTSUdOKGhlYWQsIF9oc19pdGVyKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmIChjbXBmY24oaGVhZCwgYWRk KSA+IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgIERFQ0xUWVBFX0FTU0lHTihoZWFkLCBfaHNfc2F2ZWRfaGVhZCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBicmVhazsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBERUNMVFlQRV9BU1NJR04oaGVhZCwg X2hzX3NhdmVkX2hlYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIH0gd2hpbGUgKChfaHNfaXRlciA9IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hz X2l0ZXIpLT5uZXh0KSk7ICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsjZW5kaWYKLSsKLSsj aWYgSEFTSF9OT05GQVRBTF9PT00KLSsKLSsjZGVmaW5lIEhBU0hfQUREX1RPX1RBQkxFKGhoLGhl YWQsa2V5cHRyLGtleWxlbl9pbixoYXNodmFsLGFkZCxvb21lZCkgICAgICAgICAgICBcCi0rZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKCEob29tZWQpKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg dW5zaWduZWQgX2hhX2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMrKzsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBI QVNIX1RPX0JLVChoYXNodmFsLCAoaGVhZCktPmhoLnRibC0+bnVtX2J1Y2tldHMsIF9oYV9ia3Qp OyAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9BRERfVE9fQktUKChoZWFkKS0+aGgudGJs LT5idWNrZXRzW19oYV9ia3RdLCBoaCwgJihhZGQpLT5oaCwgb29tZWQpOyAgICBcCi0rICAgIGlm IChvb21lZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgIEhBU0hfUk9MTEJBQ0tfQktUKGhoLCBoZWFkLCAm KGFkZCktPmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBI QVNIX0RFTEVURV9ISChoaCwgaGVhZCwgJihhZGQpLT5oaCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgKGFkZCktPmhoLnRibCA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIHV0 aGFzaF9ub25mYXRhbF9vb20oYWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgSEFT SF9CTE9PTV9BREQoKGhlYWQpLT5oaC50YmwsIGhhc2h2YWwpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgIEhBU0hfRU1JVF9LRVkoaGgsIGhlYWQsIGtleXB0ciwg a2V5bGVuX2luKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoYWRkKS0+ aGgudGJsID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgdXRoYXNoX25vbmZhdGFsX29vbShhZGQpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2Vsc2UKLSsKLSsjZGVmaW5lIEhBU0hf QUREX1RPX1RBQkxFKGhoLGhlYWQsa2V5cHRyLGtleWxlbl9pbixoYXNodmFsLGFkZCxvb21lZCkg ICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hh X2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMrKzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX1RPX0JLVCho YXNodmFsLCAoaGVhZCktPmhoLnRibC0+bnVtX2J1Y2tldHMsIF9oYV9ia3QpOyAgICAgICAgICAg ICAgICAgICAgXAotKyAgSEFTSF9BRERfVE9fQktUKChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19o YV9ia3RdLCBoaCwgJihhZGQpLT5oaCwgb29tZWQpOyAgICAgIFwKLSsgIEhBU0hfQkxPT01fQURE KChoZWFkKS0+aGgudGJsLCBoYXNodmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICBIQVNIX0VNSVRfS0VZKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0r I2VuZGlmCi0rCi0rCi0rI2RlZmluZSBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUVfSU5PUkRF UihoaCxoZWFkLGtleXB0cixrZXlsZW5faW4saGFzaHZhbCxhZGQsY21wZmNuKSBcCi0rZG8geyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGludCBfaGFfb29t ZWQgPSAwOyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChhZGQp LT5oaC5oYXNodiA9IChoYXNodmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAoYWRkKS0+aGgua2V5ID0gKGNoYXIqKSAoa2V5cHRyKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgKGFkZCkt PmhoLmtleWxlbiA9ICh1bnNpZ25lZCkgKGtleWxlbl9pbik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIGlmICghKGhlYWQpKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChhZGQp LT5oaC5uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAoYWRkKS0+aGgucHJldiA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9N QUtFX1RBQkxFKGhoLCBhZGQsIF9oYV9vb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIElGX0hBU0hfTk9ORkFUQUxfT09NKCBpZiAoIV9oYV9vb21l ZCkgeyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIChoZWFk KSA9IChhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oIH0gKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICB2b2lkICpfaHNfaXRlciA9IChoZWFkKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGFkZCktPmho LnRibCA9IChoZWFkKS0+aGgudGJsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgIEhBU0hfQUtCSV9JTk5FUl9MT09QKGhoLCBoZWFkLCBhZGQsIGNt cGZjbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBpZiAoX2hzX2l0 ZXIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAoYWRkKS0+aGgubmV4dCA9IF9oc19pdGVyOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgaWYgKCgoYWRk KS0+aGgucHJldiA9IEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX2l0ZXIpLT5wcmV2 KSkgeyAgICAgXAotKyAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCAoYWRkKS0+ aGgucHJldiktPm5leHQgPSAoYWRkKTsgICAgICAgICAgICAgIFwKLSsgICAgICB9IGVsc2UgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAoaGVhZCkgPSAoYWRkKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19pdGVyKS0+ cHJldiA9IChhZGQpOyAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgIEhBU0hfQVBQRU5EX0xJU1QoaGgsIGhlYWQsIGFkZCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfVE9fVEFCTEUo aGgsIGhlYWQsIGtleXB0ciwga2V5bGVuX2luLCBoYXNodmFsLCBhZGQsIF9oYV9vb21lZCk7ICAg ICAgIFwKLSsgIEhBU0hfRlNDSyhoaCwgaGVhZCwgIkhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxV RV9JTk9SREVSIik7ICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVm aW5lIEhBU0hfQUREX0tFWVBUUl9JTk9SREVSKGhoLGhlYWQsa2V5cHRyLGtleWxlbl9pbixhZGQs Y21wZmNuKSAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5z aWduZWQgX2hzX2hhc2h2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hfVkFMVUUoa2V5cHRyLCBrZXlsZW5faW4sIF9o c19oYXNodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNI X0FERF9LRVlQVFJfQllIQVNIVkFMVUVfSU5PUkRFUihoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW5f aW4sIF9oc19oYXNodiwgYWRkLCBjbXBmY24pOyBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5l IEhBU0hfQUREX0JZSEFTSFZBTFVFX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2lu LGhhc2h2YWwsYWRkLGNtcGZjbikgXAotKyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lO T1JERVIoaGgsIGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwg YWRkLCBjbXBmY24pCi0rCi0rI2RlZmluZSBIQVNIX0FERF9JTk9SREVSKGhoLGhlYWQsZmllbGRu YW1lLGtleWxlbl9pbixhZGQsY21wZmNuKSAgICAgICAgICAgICAgICAgXAotKyAgSEFTSF9BRERf S0VZUFRSX0lOT1JERVIoaGgsIGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwg YWRkLCBjbXBmY24pCi0rCi0rI2RlZmluZSBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUUoaGgs aGVhZCxrZXlwdHIsa2V5bGVuX2luLGhhc2h2YWwsYWRkKSAgICAgICAgXAotK2RvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgIElGX0hBU0hfTk9ORkFUQUxfT09NKCBpbnQgX2hhX29vbWVkID0g MDsgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAoYWRkKS0+aGgu aGFzaHYgPSAoaGFzaHZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgKGFkZCktPmhoLmtleSA9IChjb25zdCB2b2lkKikgKGtleXB0cik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChhZGQpLT5oaC5r ZXlsZW4gPSAodW5zaWduZWQpIChrZXlsZW5faW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICBpZiAoIShoZWFkKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoYWRkKS0+aGgu bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgKGFkZCktPmhoLnByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfTUFLRV9U QUJMRShoaCwgYWRkLCBfaGFfb29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICBJRl9IQVNIX05PTkZBVEFMX09PTSggaWYgKCFfaGFfb29tZWQpIHsg KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAoaGVhZCkgPSAo YWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgIElGX0hBU0hfTk9ORkFUQUxfT09NKCB9ICkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgKGFkZCktPmhoLnRibCA9IChoZWFkKS0+aGgudGJsOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfQVBQRU5EX0xJ U1QoaGgsIGhlYWQsIGFkZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIEhBU0hfQUREX1RPX1RBQkxF KGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbiwgaGFzaHZhbCwgYWRkLCBfaGFfb29tZWQpOyAg ICAgICBcCi0rICBIQVNIX0ZTQ0soaGgsIGhlYWQsICJIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFM VUUiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2Rl ZmluZSBIQVNIX0FERF9LRVlQVFIoaGgsaGVhZCxrZXlwdHIsa2V5bGVuX2luLGFkZCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVu c2lnbmVkIF9oYV9oYXNodjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX1ZBTFVFKGtleXB0ciwga2V5bGVuX2luLCBf aGFfaGFzaHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgSEFT SF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbiwgX2hh X2hhc2h2LCBhZGQpOyAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9BRERf QllIQVNIVkFMVUUoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGhhc2h2YWwsYWRkKSAgICAg ICAgICAgIFwKLSsgIEhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRShoaCwgaGVhZCwgJigoYWRk KS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBoYXNodmFsLCBhZGQpCi0rCi0rI2RlZmluZSBIQVNI X0FERChoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4sYWRkKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgSEFTSF9BRERfS0VZUFRSKGhoLCBoZWFkLCAmKChhZGQpLT5maWVs ZG5hbWUpLCBrZXlsZW5faW4sIGFkZCkKLSsKLSsjZGVmaW5lIEhBU0hfVE9fQktUKGhhc2h2LG51 bV9ia3RzLGJrdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgYmt0ID0gKChoYXNodikgJiAoKG51bV9ia3Rz KSAtIDFVKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9 IHdoaWxlICgwKQotKwotKy8qIGRlbGV0ZSAiZGVscHRyIiBmcm9tIHRoZSBoYXNoIHRhYmxlLgot KyAqICJ0aGUgdXN1YWwiIHBhdGNoLXVwIHByb2Nlc3MgZm9yIHRoZSBhcHAtb3JkZXIgZG91Ymx5 LWxpbmtlZC1saXN0LgotKyAqIFRoZSB1c2Ugb2YgX2hkX2hoX2RlbCBiZWxvdyBkZXNlcnZlcyBz cGVjaWFsIGV4cGxhbmF0aW9uLgotKyAqIFRoZXNlIHVzZWQgdG8gYmUgZXhwcmVzc2VkIHVzaW5n IChkZWxwdHIpIGJ1dCB0aGF0IGxlZCB0byBhIGJ1ZwotKyAqIGlmIHNvbWVvbmUgdXNlZCB0aGUg c2FtZSBzeW1ib2wgZm9yIHRoZSBoZWFkIGFuZCBkZWxldGVlLCBsaWtlCi0rICogIEhBU0hfREVM RVRFKGhoLHVzZXJzLHVzZXJzKTsKLSsgKiBXZSB3YW50IHRoYXQgdG8gd29yaywgYnV0IGJ5IGNo YW5naW5nIHRoZSBoZWFkICh1c2VycykgYmVsb3cKLSsgKiB3ZSB3ZXJlIGZvcmZlaXRpbmcgb3Vy IGFiaWxpdHkgdG8gZnVydGhlciByZWZlciB0byB0aGUgZGVsZXRlZSAodXNlcnMpCi0rICogaW4g dGhlIHBhdGNoLXVwIHByb2Nlc3MuIFNvbHV0aW9uOiB1c2Ugc2NyYXRjaCBzcGFjZSB0bwotKyAq IGNvcHkgdGhlIGRlbGV0ZWUgcG9pbnRlciwgdGhlbiB0aGUgbGF0dGVyIHJlZmVyZW5jZXMgYXJl IHZpYSB0aGF0Ci0rICogc2NyYXRjaCBwb2ludGVyIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIHJl cG9pbnRlZCAodXNlcnMpIHN5bWJvbC4KLSsgKi8KLSsjZGVmaW5lIEhBU0hfREVMRVRFKGhoLGhl YWQsZGVscHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIEhBU0hfREVMRVRFX0hIKGhoLCBoZWFkLCAmKGRlbHB0ciktPmhoKQotKwotKyNkZWZp bmUgSEFTSF9ERUxFVEVfSEgoaGgsaGVhZCxkZWxwdHJoaCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBjb25z dCBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKl9oZF9oaF9kZWwgPSAoZGVscHRyaGgpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKChfaGRfaGhfZGVsLT5wcmV2ID09IE5VTEwpICYm IChfaGRfaGhfZGVsLT5uZXh0ID09IE5VTEwpKSB7ICAgICAgICAgICAgICAgIFwKLSsgICAgSEFT SF9CTE9PTV9GUkVFKChoZWFkKS0+aGgudGJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIHV0aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLT5idWNr ZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICAgICAgICAoaGVhZCktPmhoLnRibC0+bnVtX2J1Y2tldHMgKiBzaXplb2Yoc3RydWN0IFVUX2hh c2hfYnVja2V0KSk7ICAgIFwKLSsgICAgdXRoYXNoX2ZyZWUoKGhlYWQpLT5oaC50YmwsIHNpemVv ZihVVF9oYXNoX3RhYmxlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIChoZWFk KSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5zaWdu ZWQgX2hkX2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIGlmIChfaGRfaGhfZGVsID09IChoZWFkKS0+aGgudGJsLT50 YWlsKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIChoZWFk KS0+aGgudGJsLT50YWlsID0gSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaGRfaGhfZGVs LT5wcmV2KTsgICAgIFwKLSsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmIChfaGRf aGhfZGVsLT5wcmV2ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hkX2ho X2RlbC0+cHJldiktPm5leHQgPSBfaGRfaGhfZGVsLT5uZXh0OyAgIFwKLSsgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgREVDTFRZUEVfQVNTSUdOKGhlYWQsIF9oZF9oaF9kZWwtPm5l eHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgaWYgKF9oZF9oaF9kZWwtPm5leHQgIT0gTlVMTCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgSEhfRlJPTV9F TE1UKChoZWFkKS0+aGgudGJsLCBfaGRfaGhfZGVsLT5uZXh0KS0+cHJldiA9IF9oZF9oaF9kZWwt PnByZXY7ICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9UT19CS1Qo X2hkX2hoX2RlbC0+aGFzaHYsIChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hkX2JrdCk7 ICAgICAgICBcCi0rICAgIEhBU0hfREVMX0lOX0JLVCgoaGVhZCktPmhoLnRibC0+YnVja2V0c1tf aGRfYmt0XSwgX2hkX2hoX2RlbCk7ICAgICAgICAgICAgICAgXAotKyAgICAoaGVhZCktPmhoLnRi bC0+bnVtX2l0ZW1zLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBIQVNIX0ZTQ0soaGgsIGhl YWQsICJIQVNIX0RFTEVURV9ISCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rLyogY29udmVuaWVuY2UgZm9ybXMgb2YgSEFTSF9G SU5EL0hBU0hfQUREL0hBU0hfREVMICovCi0rI2RlZmluZSBIQVNIX0ZJTkRfU1RSKGhlYWQsZmlu ZHN0cixvdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2Rv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX3V0aGFzaF9oZnN0cl9rZXls ZW4gPSAodW5zaWduZWQpdXRoYXNoX3N0cmxlbihmaW5kc3RyKTsgICAgICAgICAgICBcCi0rICAg IEhBU0hfRklORChoaCwgaGVhZCwgZmluZHN0ciwgX3V0aGFzaF9oZnN0cl9rZXlsZW4sIG91dCk7 ICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rI2RlZmluZSBIQVNIX0FERF9T VFIoaGVhZCxzdHJmaWVsZCxhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX3V0aGFz aF9oYXN0cl9rZXlsZW4gPSAodW5zaWduZWQpdXRoYXNoX3N0cmxlbigoYWRkKS0+c3RyZmllbGQp OyAgICBcCi0rICAgIEhBU0hfQUREKGhoLCBoZWFkLCBzdHJmaWVsZFswXSwgX3V0aGFzaF9oYXN0 cl9rZXlsZW4sIGFkZCk7ICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rI2RlZmlu ZSBIQVNIX1JFUExBQ0VfU1RSKGhlYWQsc3RyZmllbGQsYWRkLHJlcGxhY2VkKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5z aWduZWQgX3V0aGFzaF9ocnN0cl9rZXlsZW4gPSAodW5zaWduZWQpdXRoYXNoX3N0cmxlbigoYWRk KS0+c3RyZmllbGQpOyAgICBcCi0rICAgIEhBU0hfUkVQTEFDRShoaCwgaGVhZCwgc3RyZmllbGRb MF0sIF91dGhhc2hfaHJzdHJfa2V5bGVuLCBhZGQsIHJlcGxhY2VkKTsgICAgXAotK30gd2hpbGUg KDApCi0rI2RlZmluZSBIQVNIX0ZJTkRfSU5UKGhlYWQsZmluZGludCxvdXQpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX0ZJTkQoaGgsaGVhZCxm aW5kaW50LHNpemVvZihpbnQpLG91dCkKLSsjZGVmaW5lIEhBU0hfQUREX0lOVChoZWFkLGludGZp ZWxkLGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IEhBU0hfQUREKGhoLGhlYWQsaW50ZmllbGQsc2l6ZW9mKGludCksYWRkKQotKyNkZWZpbmUgSEFT SF9SRVBMQUNFX0lOVChoZWFkLGludGZpZWxkLGFkZCxyZXBsYWNlZCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9SRVBMQUNFKGhoLGhlYWQsaW50ZmllbGQsc2l6ZW9m KGludCksYWRkLHJlcGxhY2VkKQotKyNkZWZpbmUgSEFTSF9GSU5EX1BUUihoZWFkLGZpbmRwdHIs b3V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFT SF9GSU5EKGhoLGhlYWQsZmluZHB0cixzaXplb2Yodm9pZCAqKSxvdXQpCi0rI2RlZmluZSBIQVNI X0FERF9QVFIoaGVhZCxwdHJmaWVsZCxhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICBIQVNIX0FERChoaCxoZWFkLHB0cmZpZWxkLHNpemVvZih2b2lk ICopLGFkZCkKLSsjZGVmaW5lIEhBU0hfUkVQTEFDRV9QVFIoaGVhZCxwdHJmaWVsZCxhZGQscmVw bGFjZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfUkVQTEFDRSho aCxoZWFkLHB0cmZpZWxkLHNpemVvZih2b2lkICopLGFkZCxyZXBsYWNlZCkKLSsjZGVmaW5lIEhB U0hfREVMKGhlYWQsZGVscHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfREVMRVRFKGhoLGhlYWQsZGVscHRyKQotKwotKy8q IEhBU0hfRlNDSyBjaGVja3MgaGFzaCBpbnRlZ3JpdHkgb24gZXZlcnkgYWRkL2RlbGV0ZSB3aGVu IEhBU0hfREVCVUcgaXMgZGVmaW5lZC4KLSsgKiBUaGlzIGlzIGZvciB1dGhhc2ggZGV2ZWxvcGVy IG9ubHk7IGl0IGNvbXBpbGVzIGF3YXkgaWYgSEFTSF9ERUJVRyBpc24ndCBkZWZpbmVkLgotKyAq LwotKyNpZmRlZiBIQVNIX0RFQlVHCi0rI2luY2x1ZGUgPHN0ZGlvLmg+ICAgLyogZnByaW50Ziwg c3RkZXJyICovCi0rI2RlZmluZSBIQVNIX09PUFMoLi4uKSBkbyB7IGZwcmludGYoc3RkZXJyLCBf X1ZBX0FSR1NfXyk7IGV4aXQoLTEpOyB9IHdoaWxlICgwKQotKyNkZWZpbmUgSEFTSF9GU0NLKGho LGhlYWQsd2hlcmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBzdHJ1Y3QgVVRfaGFzaF9oYW5k bGUgKl90aGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgaWYgKGhlYWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgdW5zaWduZWQgX2JrdF9pOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgIHVuc2lnbmVkIF9jb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBjaGFyICpfcHJldjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgZm9yIChfYmt0X2kgPSAwOyBfYmt0X2kgPCAoaGVhZCktPmhoLnRibC0+bnVtX2J1 Y2tldHM7ICsrX2JrdF9pKSB7ICAgICAgICAgICBcCi0rICAgICAgdW5zaWduZWQgX2JrdF9jb3Vu dCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgIF90aGggPSAoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfYmt0X2ldLmhoX2hlYWQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBfcHJldiA9IE5VTEw7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgd2hpbGUgKF90aGgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgaWYgKF9wcmV2ICE9IChjaGFy KikoX3RoaC0+aGhfcHJldikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgSEFTSF9PT1BTKCIlczogaW52YWxpZCBoaF9wcmV2ICVwLCBhY3R1YWwgJXBc biIsICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAod2hlcmUpLCAodm9p ZCopX3RoaC0+aGhfcHJldiwgKHZvaWQqKV9wcmV2KTsgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9ia3RfY291bnQrKzsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICBfcHJldiA9IChjaGFyKikoX3RoaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgX3RoaCA9IF90aGgtPmhoX25leHQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgX2NvdW50ICs9IF9ia3RfY291bnQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgIGlmICgoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfYmt0X2ldLmNvdW50ICE9ICBfYmt0X2Nv dW50KSB7ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIEhBU0hfT09QUygiJXM6IGludmFsaWQg YnVja2V0IGNvdW50ICV1LCBhY3R1YWwgJXVcbiIsICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgKHdoZXJlKSwgKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbX2JrdF9pXS5jb3VudCwg X2JrdF9jb3VudCk7ICAgICAgICAgXAotKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmIChfY291bnQgIT0gKGhlYWQpLT5oaC50Ymwt Pm51bV9pdGVtcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg IEhBU0hfT09QUygiJXM6IGludmFsaWQgaGggaXRlbSBjb3VudCAldSwgYWN0dWFsICV1XG4iLCAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgKHdoZXJlKSwgKGhlYWQpLT5oaC50Ymwt Pm51bV9pdGVtcywgX2NvdW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICBfY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX3By ZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgIF90aGggPSAgJihoZWFkKS0+aGg7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB3aGls ZSAoX3RoaCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICBfY291bnQrKzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgaWYg KF9wcmV2ICE9IChjaGFyKilfdGhoLT5wcmV2KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgSEFTSF9PT1BTKCIlczogaW52YWxpZCBwcmV2ICVw LCBhY3R1YWwgJXBcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAg ICAod2hlcmUpLCAodm9pZCopX3RoaC0+cHJldiwgKHZvaWQqKV9wcmV2KTsgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIF9wcmV2 ID0gKGNoYXIqKUVMTVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX3RoaCk7ICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICBfdGhoID0gKF90aGgtPm5leHQgPyBISF9GUk9NX0VMTVQo KGhlYWQpLT5oaC50YmwsIF90aGgtPm5leHQpIDogTlVMTCk7ICAgICBcCi0rICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICBpZiAoX2NvdW50ICE9IChoZWFkKS0+aGgudGJsLT5udW1faXRl bXMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBIQVNIX09P UFMoIiVzOiBpbnZhbGlkIGFwcCBpdGVtIGNvdW50ICV1LCBhY3R1YWwgJXVcbiIsICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICAgICh3aGVyZSksIChoZWFkKS0+aGgudGJsLT5udW1faXRl bXMsIF9jb3VudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsj ZWxzZQotKyNkZWZpbmUgSEFTSF9GU0NLKGhoLGhlYWQsd2hlcmUpCi0rI2VuZGlmCi0rCi0rLyog V2hlbiBjb21waWxlZCB3aXRoIC1ESEFTSF9FTUlUX0tFWVMsIGxlbmd0aC1wcmVmaXhlZCBrZXlz IGFyZSBlbWl0dGVkIHRvCi0rICogdGhlIGRlc2NyaXB0b3IgdG8gd2hpY2ggdGhpcyBtYWNybyBp cyBkZWZpbmVkIGZvciB0dW5pbmcgdGhlIGhhc2ggZnVuY3Rpb24uCi0rICogVGhlIGFwcCBjYW4g I2luY2x1ZGUgPHVuaXN0ZC5oPiB0byBnZXQgdGhlIHByb3RvdHlwZSBmb3Igd3JpdGUoMikuICov Ci0rI2lmZGVmIEhBU0hfRU1JVF9LRVlTCi0rI2RlZmluZSBIQVNIX0VNSVRfS0VZKGhoLGhlYWQs a2V5cHRyLGZpZWxkbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2Rv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHVuc2lnbmVkIF9rbGVuID0gZmllbGRsZW47ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB3 cml0ZShIQVNIX0VNSVRfS0VZUywgJl9rbGVuLCBzaXplb2YoX2tsZW4pKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgd3JpdGUoSEFTSF9FTUlUX0tFWVMsIGtleXB0ciwg KHVuc2lnbmVkIGxvbmcpZmllbGRsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdo aWxlICgwKQotKyNlbHNlCi0rI2RlZmluZSBIQVNIX0VNSVRfS0VZKGhoLGhlYWQsa2V5cHRyLGZp ZWxkbGVuKQotKyNlbmRpZgotKwotKy8qIFRoZSBCZXJuc3RlaW4gaGFzaCBmdW5jdGlvbiwgdXNl ZCBpbiBQZXJsIHByaW9yIHRvIHY1LjYuIE5vdGUgKHg8PDUreCk9eCozMy4gKi8KLSsjZGVmaW5l IEhBU0hfQkVSKGtleSxrZXlsZW4saGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWdu ZWQgX2hiX2tleWxlbiA9ICh1bnNpZ25lZClrZXlsZW47ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9oYl9rZXkgPSAoY29u c3QgdW5zaWduZWQgY2hhciopKGtleSk7ICAgICAgICAgICAgICAgICAgICBcCi0rICAoaGFzaHYp ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgd2hpbGUgKF9oYl9rZXlsZW4tLSAhPSAwVSkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGhhc2h2 KSA9ICgoKGhhc2h2KSA8PCA1KSArIChoYXNodikpICsgKl9oYl9rZXkrKzsgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDAp Ci0rCi0rCi0rLyogU0FYL0ZOVi9PQVQvSkVOIGhhc2ggZnVuY3Rpb25zIGFyZSBtYWNybyB2YXJp YW50cyBvZiB0aG9zZSBsaXN0ZWQgYXQKLSsgKiBodHRwOi8vZXRlcm5hbGx5Y29uZnV6emxlZC5j b20vdHV0cy9hbGdvcml0aG1zL2pzd190dXRfaGFzaGluZy5hc3B4Ci0rICogKGFyY2hpdmUgbGlu azogaHR0cHM6Ly9hcmNoaXZlLmlzL0l2Y2FuICkKLSsgKi8KLSsjZGVmaW5lIEhBU0hfU0FYKGtl eSxrZXlsZW4saGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX3N4X2k7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9oc19rZXkgPSAoY29uc3QgdW5zaWduZWQg Y2hhciopKGtleSk7ICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNodiA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgZm9yIChfc3hfaT0wOyBfc3hfaSA8IGtleWxlbjsgX3N4X2krKykgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgaGFzaHYgXj0gKGhhc2h2IDw8 IDUpICsgKGhhc2h2ID4+IDIpICsgX2hzX2tleVtfc3hfaV07ICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rLyogRk5WLTFh IHZhcmlhdGlvbiAqLwotKyNkZWZpbmUgSEFTSF9GTlYoa2V5LGtleWxlbixoYXNodikgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfZm5faTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgY29uc3QgdW5zaWdu ZWQgY2hhciAqX2hmX2tleSA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikoa2V5KTsgICAgICAgICAg ICAgICAgICAgIFwKLSsgIChoYXNodikgPSAyMTY2MTM2MjYxVTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBmb3IgKF9mbl9pPTA7 IF9mbl9pIDwga2V5bGVuOyBfZm5faSsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICBoYXNodiA9IGhhc2h2IF4gX2hmX2tleVtfZm5faV07ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgaGFzaHYgPSBoYXNo diAqIDE2Nzc3NjE5VTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0r I2RlZmluZSBIQVNIX09BVChrZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg IHVuc2lnbmVkIF9ob19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBjb25zdCB1bnNpZ25lZCBjaGFyICpfaG9fa2V5 PShjb25zdCB1bnNpZ25lZCBjaGFyKikoa2V5KTsgICAgICAgICAgICAgICAgICAgICAgXAotKyAg aGFzaHYgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGZvcihfaG9faT0wOyBfaG9faSA8IGtleWxlbjsg X2hvX2krKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgaGFzaHYgKz0gX2hvX2tleVtfaG9faV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIGhhc2h2ICs9IChoYXNodiA8PCAxMCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICBoYXNodiBePSAoaGFzaHYgPj4gNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaGFz aHYgKz0gKGhhc2h2IDw8IDMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2IF49IChoYXNodiA+PiAxMSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNo diArPSAoaGFzaHYgPDwgMTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rI2RlZmluZSBIQVNIX0pFTl9N SVgoYSxiLGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGEgLT0gYjsgYSAtPSBjOyBh IF49ICggYyA+PiAxMyApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICBiIC09IGM7IGIgLT0gYTsgYiBePSAoIGEgPDwgOCApOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgYyAtPSBhOyBjIC09IGI7IGMg Xj0gKCBiID4+IDEzICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIGEgLT0gYjsgYSAtPSBjOyBhIF49ICggYyA+PiAxMiApOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBiIC09IGM7IGIgLT0gYTsgYiBe PSAoIGEgPDwgMTYgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgYyAtPSBhOyBjIC09IGI7IGMgXj0gKCBiID4+IDUgKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGEgLT0gYjsgYSAtPSBjOyBhIF49 ICggYyA+PiAzICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICBiIC09IGM7IGIgLT0gYTsgYiBePSAoIGEgPDwgMTAgKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgYyAtPSBhOyBjIC09IGI7IGMgXj0g KCBiID4+IDE1ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSt9IHdoaWxlICgwKQotKwotKyNkZWZpbmUgSEFTSF9KRU4oa2V5LGtleWxlbixoYXNodikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfaGpfaSxfaGpfaixfaGpfazsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWdu ZWQgY29uc3QgY2hhciAqX2hqX2tleT0odW5zaWduZWQgY29uc3QgY2hhciopKGtleSk7ICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2ID0gMHhmZWVkYmVlZnU7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBfaGpfaSA9 IF9oal9qID0gMHg5ZTM3NzliOXU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgX2hqX2sgPSAodW5zaWduZWQpKGtleWxlbik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIHdoaWxlIChf aGpfayA+PSAxMlUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIF9oal9pICs9ICAgIChfaGpfa2V5WzBdICsgKCAodW5zaWdu ZWQpX2hqX2tleVsxXSA8PCA4ICkgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgKyAo ICh1bnNpZ25lZClfaGpfa2V5WzJdIDw8IDE2ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgICsgKCAodW5zaWduZWQpX2hqX2tleVszXSA8PCAyNCAp ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9oal9qICs9 ICAgIChfaGpfa2V5WzRdICsgKCAodW5zaWduZWQpX2hqX2tleVs1XSA8PCA4ICkgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzZdIDw8IDE2ICkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICsgKCAo dW5zaWduZWQpX2hqX2tleVs3XSA8PCAyNCApICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgIGhhc2h2ICs9IChfaGpfa2V5WzhdICsgKCAodW5zaWduZWQpX2hq X2tleVs5XSA8PCA4ICkgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgKyAoICh1 bnNpZ25lZClfaGpfa2V5WzEwXSA8PCAxNiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICsgKCAodW5zaWduZWQpX2hqX2tleVsxMV0gPDwgMjQgKSAp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgSEFTSF9KRU5fTUlYKF9oal9pLCBfaGpfaiwgaGFzaHYpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICBfaGpfa2V5ICs9IDEyOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgX2hqX2sgLT0gMTJV OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNodiArPSAodW5zaWdu ZWQpKGtleWxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgc3dpdGNoICggX2hqX2sgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgY2FzZSAxMTogaGFzaHYg Kz0gKCAodW5zaWduZWQpX2hqX2tleVsxMF0gPDwgMjQgKTsgLyogRkFMTFRIUk9VR0ggKi8gICAg ICAgICBcCi0rICAgIGNhc2UgMTA6IGhhc2h2ICs9ICggKHVuc2lnbmVkKV9oal9rZXlbOV0gPDwg MTYgKTsgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAotKyAgICBjYXNlIDk6ICBoYXNodiAr PSAoICh1bnNpZ25lZClfaGpfa2V5WzhdIDw8IDggKTsgICAvKiBGQUxMVEhST1VHSCAqLyAgICAg ICAgIFwKLSsgICAgY2FzZSA4OiAgX2hqX2ogKz0gKCAodW5zaWduZWQpX2hqX2tleVs3XSA8PCAy NCApOyAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCi0rICAgIGNhc2UgNzogIF9oal9qICs9 ICggKHVuc2lnbmVkKV9oal9rZXlbNl0gPDwgMTYgKTsgIC8qIEZBTExUSFJPVUdIICovICAgICAg ICAgXAotKyAgICBjYXNlIDY6ICBfaGpfaiArPSAoICh1bnNpZ25lZClfaGpfa2V5WzVdIDw8IDgg KTsgICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKLSsgICAgY2FzZSA1OiAgX2hqX2ogKz0g X2hqX2tleVs0XTsgICAgICAgICAgICAgICAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAg ICBcCi0rICAgIGNhc2UgNDogIF9oal9pICs9ICggKHVuc2lnbmVkKV9oal9rZXlbM10gPDwgMjQg KTsgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAotKyAgICBjYXNlIDM6ICBfaGpfaSArPSAo ICh1bnNpZ25lZClfaGpfa2V5WzJdIDw8IDE2ICk7ICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAg IFwKLSsgICAgY2FzZSAyOiAgX2hqX2kgKz0gKCAodW5zaWduZWQpX2hqX2tleVsxXSA8PCA4ICk7 ICAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCi0rICAgIGNhc2UgMTogIF9oal9pICs9IF9o al9rZXlbMF07ICAgICAgICAgICAgICAgICAgICAgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAg XAotKyAgICBkZWZhdWx0OiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICBIQVNIX0pFTl9NSVgoX2hqX2ksIF9oal9qLCBoYXNodik7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rLyogVGhlIFBh dWwgSHNpZWggaGFzaCBmdW5jdGlvbiAqLwotKyN1bmRlZiBnZXQxNmJpdHMKLSsjaWYgKGRlZmlu ZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19pMzg2X18pKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19f KSAgICAgICAgICAgICBcCi0rICB8fCBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkIChfX0JP UkxBTkRDX18pIHx8IGRlZmluZWQgKF9fVFVSQk9DX18pCi0rI2RlZmluZSBnZXQxNmJpdHMoZCkg KCooKGNvbnN0IHVpbnQxNl90ICopIChkKSkpCi0rI2VuZGlmCi0rCi0rI2lmICFkZWZpbmVkIChn ZXQxNmJpdHMpCi0rI2RlZmluZSBnZXQxNmJpdHMoZCkgKCgoKHVpbnQzMl90KSgoKGNvbnN0IHVp bnQ4X3QgKikoZCkpWzFdKSkgPDwgOCkgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICAg ICAgICAgKyh1aW50MzJfdCkoKChjb25zdCB1aW50OF90ICopKGQpKVswXSkgKQotKyNlbmRpZgot KyNkZWZpbmUgSEFTSF9TRkgoa2V5LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICB1bnNpZ25lZCBjb25zdCBjaGFyICpfc2ZoX2tleT0odW5zaWduZWQgY29uc3QgY2hhciopKGtl eSk7ICAgICAgICAgICAgICAgICAgICAgXAotKyAgdWludDMyX3QgX3NmaF90bXAsIF9zZmhfbGVu ID0gKHVpbnQzMl90KWtleWxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB1bnNpZ25lZCBfc2ZoX3JlbSA9IF9zZmhfbGVu ICYgM1U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg X3NmaF9sZW4gPj49IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2ID0gMHhjYWZlYmFiZXU7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgLyogTWFpbiBsb29wICovICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGZv ciAoO19zZmhfbGVuID4gMFU7IF9zZmhfbGVuLS0pIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGhhc2h2ICAgICs9IGdldDE2Yml0cyAoX3NmaF9r ZXkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBf c2ZoX3RtcCAgPSAoKHVpbnQzMl90KShnZXQxNmJpdHMgKF9zZmhfa2V5KzIpKSA8PCAxMSkgXiBo YXNodjsgICAgICAgICAgICAgIFwKLSsgICAgaGFzaHYgICAgID0gKGhhc2h2IDw8IDE2KSBeIF9z ZmhfdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIF9z Zmhfa2V5ICs9IDJVKnNpemVvZiAodWludDE2X3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICBoYXNodiAgICArPSBoYXNodiA+PiAxMTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgLyogSGFu ZGxlIGVuZCBjYXNlcyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgIHN3aXRjaCAoX3NmaF9yZW0pIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGNhc2Ug MzogaGFzaHYgKz0gZ2V0MTZiaXRzIChfc2ZoX2tleSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIGhhc2h2IF49IGhhc2h2IDw8IDE2OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAg ICBoYXNodiBePSAodWludDMyX3QpKF9zZmhfa2V5W3NpemVvZiAodWludDE2X3QpXSkgPDwgMTg7 ICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgaGFzaHYgKz0gaGFzaHYgPj4gMTE7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAg IGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgY2FzZSAyOiBoYXNodiArPSBnZXQxNmJpdHMgKF9zZmhfa2V5 KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAg aGFzaHYgXj0gaGFzaHYgPDwgMTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgICAgICAgIGhhc2h2ICs9IGhhc2h2ID4+IDE3OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBi cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgIGNhc2UgMTogaGFzaHYgKz0gKl9zZmhfa2V5OyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIGhh c2h2IF49IGhhc2h2IDw8IDEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgICBoYXNodiArPSBoYXNodiA+PiAxOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgYnJl YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICBkZWZhdWx0OiA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgLyogRm9yY2UgImF2YWxh bmNoaW5nIiBvZiBmaW5hbCAxMjcgYml0cyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIGhhc2h2IF49IGhhc2h2IDw8IDM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBoYXNodiArPSBoYXNodiA+ PiA1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgaGFzaHYgXj0gaGFzaHYgPDwgNDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGhhc2h2ICs9IGhhc2h2ID4+ IDE3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICBoYXNodiBePSBoYXNodiA8PCAyNTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaGFzaHYgKz0gaGFzaHYgPj4g NjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSt9IHdoaWxlICgwKQotKwotKy8qIGl0ZXJhdGUgb3ZlciBpdGVtcyBpbiBhIGtub3du IGJ1Y2tldCB0byBmaW5kIGRlc2lyZWQgaXRlbSAqLwotKyNkZWZpbmUgSEFTSF9GSU5EX0lOX0JL VCh0YmwsaGgsaGVhZCxrZXlwdHIsa2V5bGVuX2luLGhhc2h2YWwsb3V0KSAgICAgICAgICAgICAg IFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBpZiAoKGhlYWQpLmhoX2hlYWQgIT0g TlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICBERUNMVFlQRV9BU1NJR04ob3V0LCBFTE1UX0ZST01fSEgodGJsLCAoaGVhZCkuaGhf aGVhZCkpOyAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIChvdXQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIHdoaWxlICgob3V0KSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGlmICgob3V0KS0+aGguaGFzaHYgPT0g KGhhc2h2YWwpICYmIChvdXQpLT5oaC5rZXlsZW4gPT0gKGtleWxlbl9pbikpIHsgICAgICAgXAot KyAgICAgIGlmIChIQVNIX0tFWUNNUCgob3V0KS0+aGgua2V5LCBrZXlwdHIsIGtleWxlbl9pbikg PT0gMCkgeyAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgaWYgKChvdXQpLT5oaC5oaF9uZXh0ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgREVDTFRZUEVfQVNTSUdOKG91dCwgRUxN VF9GUk9NX0hIKHRibCwgKG91dCktPmhoLmhoX25leHQpKTsgICAgICAgICAgICAgICAgXAotKyAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAob3V0KSA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSt9IHdo aWxlICgwKQotKwotKy8qIGFkZCBhbiBpdGVtIHRvIGEgYnVja2V0ICAqLwotKyNkZWZpbmUgSEFT SF9BRERfVE9fQktUKGhlYWQsaGgsYWRkaGgsb29tZWQpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBVVF9oYXNoX2J1 Y2tldCAqX2hhX2hlYWQgPSAmKGhlYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgX2hhX2hlYWQtPmNvdW50Kys7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIChhZGRoaCktPmho X25leHQgPSBfaGFfaGVhZC0+aGhfaGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAoYWRkaGgpLT5oaF9wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKF9oYV9oZWFk LT5oaF9oZWFkICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgX2hhX2hlYWQtPmhoX2hlYWQtPmhoX3ByZXYgPSAoYWRkaGgpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgX2hhX2hlYWQtPmhoX2hlYWQgPSAoYWRkaGgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIGlmICgoX2hhX2hlYWQt PmNvdW50ID49ICgoX2hhX2hlYWQtPmV4cGFuZF9tdWx0ICsgMVUpICogSEFTSF9CS1RfQ0FQQUNJ VFlfVEhSRVNIKSkgXAotKyAgICAgICYmICEoYWRkaGgpLT50YmwtPm5vZXhwYW5kKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgSEFTSF9FWFBB TkRfQlVDS0VUUyhhZGRoaCwoYWRkaGgpLT50YmwsIG9vbWVkKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgIElGX0hBU0hfTk9ORkFUQUxfT09NKCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgIGlmIChvb21l ZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgIEhBU0hfREVMX0lOX0JLVChoZWFkLGFkZGhoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsvKiByZW1vdmUgYW4gaXRlbSBmcm9tIGEgZ2l2 ZW4gYnVja2V0ICovCi0rI2RlZmluZSBIQVNIX0RFTF9JTl9CS1QoaGVhZCxkZWxoaCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgIFVUX2hhc2hfYnVja2V0ICpfaGRfaGVhZCA9ICYoaGVhZCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBfaGRfaGVhZC0+Y291 bnQtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgaWYgKF9oZF9oZWFkLT5oaF9oZWFkID09IChkZWxoaCkpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX2hkX2hlYWQtPmho X2hlYWQgPSAoZGVsaGgpLT5oaF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgaWYgKChkZWxoaCktPmho X3ByZXYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgKGRlbGhoKS0+aGhfcHJldi0+aGhfbmV4dCA9IChkZWxoaCktPmhoX25l eHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgaWYgKChkZWxoaCktPmhoX25leHQpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgKGRlbGhoKS0+aGhfbmV4 dC0+aGhfcHJldiA9IChkZWxoaCktPmhoX3ByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDApCi0rCi0rLyog QnVja2V0IGV4cGFuc2lvbiBoYXMgdGhlIGVmZmVjdCBvZiBkb3VibGluZyB0aGUgbnVtYmVyIG9m IGJ1Y2tldHMKLSsgKiBhbmQgcmVkaXN0cmlidXRpbmcgdGhlIGl0ZW1zIGludG8gdGhlIG5ldyBi dWNrZXRzLiBJZGVhbGx5IHRoZQotKyAqIGl0ZW1zIHdpbGwgZGlzdHJpYnV0ZSBtb3JlIG9yIGxl c3MgZXZlbmx5IGludG8gdGhlIG5ldyBidWNrZXRzCi0rICogKHRoZSBleHRlbnQgdG8gd2hpY2gg dGhpcyBpcyB0cnVlIGlzIGEgbWVhc3VyZSBvZiB0aGUgcXVhbGl0eSBvZgotKyAqIHRoZSBoYXNo IGZ1bmN0aW9uIGFzIGl0IGFwcGxpZXMgdG8gdGhlIGtleSBkb21haW4pLgotKyAqCi0rICogV2l0 aCB0aGUgaXRlbXMgZGlzdHJpYnV0ZWQgaW50byBtb3JlIGJ1Y2tldHMsIHRoZSBjaGFpbiBsZW5n dGgKLSsgKiAoaXRlbSBjb3VudCkgaW4gZWFjaCBidWNrZXQgaXMgcmVkdWNlZC4gVGh1cyBieSBl eHBhbmRpbmcgYnVja2V0cwotKyAqIHRoZSBoYXNoIGtlZXBzIGEgYm91bmQgb24gdGhlIGNoYWlu IGxlbmd0aC4gVGhpcyBib3VuZGVkIGNoYWluCi0rICogbGVuZ3RoIGlzIHRoZSBlc3NlbmNlIG9m IGhvdyBhIGhhc2ggcHJvdmlkZXMgY29uc3RhbnQgdGltZSBsb29rdXAuCi0rICoKLSsgKiBUaGUg Y2FsY3VsYXRpb24gb2YgdGJsLT5pZGVhbF9jaGFpbl9tYXhsZW4gYmVsb3cgZGVzZXJ2ZXMgc29t ZQotKyAqIGV4cGxhbmF0aW9uLiBGaXJzdCwga2VlcCBpbiBtaW5kIHRoYXQgd2UncmUgY2FsY3Vs YXRpbmcgdGhlIGlkZWFsCi0rICogbWF4aW11bSBjaGFpbiBsZW5ndGggYmFzZWQgb24gdGhlICpu ZXcqIChkb3VibGVkKSBidWNrZXQgY291bnQuCi0rICogSW4gZnJhY3Rpb25zIHRoaXMgaXMganVz dCBuL2IgKG49bnVtYmVyIG9mIGl0ZW1zLGI9bmV3IG51bSBidWNrZXRzKS4KLSsgKiBTaW5jZSB0 aGUgaWRlYWwgY2hhaW4gbGVuZ3RoIGlzIGFuIGludGVnZXIsIHdlIHdhbnQgdG8gY2FsY3VsYXRl Ci0rICogY2VpbChuL2IpLiBXZSBkb24ndCBkZXBlbmQgb24gZmxvYXRpbmcgcG9pbnQgYXJpdGht ZXRpYyBpbiB0aGlzCi0rICogaGFzaCwgc28gdG8gY2FsY3VsYXRlIGNlaWwobi9iKSB3aXRoIGlu dGVnZXJzIHdlIGNvdWxkIHdyaXRlCi0rICoKLSsgKiAgICAgIGNlaWwobi9iKSA9IChuL2IpICsg KChuJWIpPzE6MCkKLSsgKgotKyAqIGFuZCBpbiBmYWN0IGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0 aGlzIGhhc2ggZGlkIGp1c3QgdGhhdC4KLSsgKiBCdXQgbm93IHdlIGhhdmUgaW1wcm92ZWQgdGhp bmdzIGEgYml0IGJ5IHJlY29nbml6aW5nIHRoYXQgYiBpcwotKyAqIGFsd2F5cyBhIHBvd2VyIG9m IHR3by4gV2Uga2VlcCBpdHMgYmFzZSAyIGxvZyBoYW5keSAoY2FsbCBpdCBsYiksCi0rICogc28g bm93IHdlIGNhbiB3cml0ZSB0aGlzIHdpdGggYSBiaXQgc2hpZnQgYW5kIGxvZ2ljYWwgQU5EOgot KyAqCi0rICogICAgICBjZWlsKG4vYikgPSAobj4+bGIpICsgKCAobiAmIChiLTEpKSA/IDE6MCkK LSsgKgotKyAqLwotKyNkZWZpbmUgSEFTSF9FWFBBTkRfQlVDS0VUUyhoaCx0Ymwsb29tZWQpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICB1bnNpZ25lZCBfaGVfYmt0OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hlX2Jr dF9pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqX2hlX3RoaCwgKl9oZV9oaF9ueHQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBVVF9oYXNoX2J1Y2tldCAq X2hlX25ld19idWNrZXRzLCAqX2hlX25ld2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgX2hlX25ld19idWNrZXRzID0gKFVUX2hhc2hfYnVja2V0Kil1dGhhc2hfbWFs bG9jKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgIHNpemVvZihz dHJ1Y3QgVVRfaGFzaF9idWNrZXQpICogKHRibCktPm51bV9idWNrZXRzICogMlUpOyAgICAgICAg ICAgICBcCi0rICBpZiAoIV9oZV9uZXdfYnVja2V0cykgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICBIQVNIX1JFQ09SRF9PT00o b29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIHV0aGFzaF9iemVybyhfaGVf bmV3X2J1Y2tldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgc2l6ZW9mKHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkgKiAodGJsKS0+bnVt X2J1Y2tldHMgKiAyVSk7ICAgICAgICAgICAgICAgIFwKLSsgICAgKHRibCktPmlkZWFsX2NoYWlu X21heGxlbiA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICgodGJsKS0+bnVtX2l0ZW1zID4+ICgodGJsKS0+bG9nMl9udW1fYnVja2V0 cysxVSkpICsgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAoKCgodGJsKS0+bnVtX2l0 ZW1zICYgKCgodGJsKS0+bnVtX2J1Y2tldHMqMlUpLTFVKSkgIT0gMFUpID8gMVUgOiAwVSk7ICAg IFwKLSsgICAgKHRibCktPm5vbmlkZWFsX2l0ZW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIGZvciAoX2hlX2JrdF9pID0gMDsg X2hlX2JrdF9pIDwgKHRibCktPm51bV9idWNrZXRzOyBfaGVfYmt0X2krKykgeyAgICAgICAgICAg XAotKyAgICAgIF9oZV90aGggPSAodGJsKS0+YnVja2V0c1sgX2hlX2JrdF9pIF0uaGhfaGVhZDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICB3aGlsZSAoX2hlX3RoaCAhPSBO VUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICBfaGVfaGhfbnh0ID0gX2hlX3RoaC0+aGhfbmV4dDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgSEFTSF9UT19CS1QoX2hlX3Ro aC0+aGFzaHYsICh0YmwpLT5udW1fYnVja2V0cyAqIDJVLCBfaGVfYmt0KTsgICAgICAgICAgIFwK LSsgICAgICAgIF9oZV9uZXdia3QgPSAmKF9oZV9uZXdfYnVja2V0c1tfaGVfYmt0XSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBpZiAoKysoX2hlX25ld2JrdC0+ Y291bnQpID4gKHRibCktPmlkZWFsX2NoYWluX21heGxlbikgeyAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICAodGJsKS0+bm9uaWRlYWxfaXRlbXMrKzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgaWYgKF9oZV9uZXdia3QtPmNv dW50ID4gX2hlX25ld2JrdC0+ZXhwYW5kX211bHQgKiAodGJsKS0+aWRlYWxfY2hhaW5fbWF4bGVu KSB7IFwKLSsgICAgICAgICAgICBfaGVfbmV3Ymt0LT5leHBhbmRfbXVsdCsrOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9oZV90aGgtPmhoX3By ZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICBfaGVfdGhoLT5oaF9uZXh0ID0gX2hlX25ld2JrdC0+aGhfaGVhZDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgaWYgKF9oZV9uZXdia3Qt PmhoX2hlYWQgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgX2hlX25ld2JrdC0+aGhfaGVhZC0+aGhfcHJldiA9IF9oZV90aGg7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgX2hlX25ld2JrdC0+aGhfaGVhZCA9IF9oZV90aGg7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIF9oZV90aGggPSBfaGVfaGhf bnh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgdXRoYXNoX2ZyZWUoKHRibCktPmJ1Y2tldHMsICh0YmwpLT5udW1fYnVja2V0cyAqIHNp emVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQpKTsgXAotKyAgICAodGJsKS0+bnVtX2J1Y2tldHMg Kj0gMlU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgKHRibCktPmxvZzJfbnVtX2J1Y2tldHMrKzsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICh0YmwpLT5idWNrZXRzID0gX2hl X25ld19idWNrZXRzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAodGJsKS0+aW5lZmZfZXhwYW5kcyA9ICgodGJsKS0+bm9uaWRlYWxfaXRlbXMgPiAo KHRibCktPm51bV9pdGVtcyA+PiAxKSkgPyAgIFwKLSsgICAgICAgICgodGJsKS0+aW5lZmZfZXhw YW5kcysxVSkgOiAwVTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgIGlmICgodGJsKS0+aW5lZmZfZXhwYW5kcyA+IDFVKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICh0YmwpLT5ub2V4cGFuZCA9IDE7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICB1dGhhc2hfbm9leHBhbmRfZnlpKHRibCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICB1dGhhc2hfZXhwYW5kX2Z5aSh0YmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r fSB3aGlsZSAoMCkKLSsKLSsKLSsvKiBUaGlzIGlzIGFuIGFkYXB0YXRpb24gb2YgU2ltb24gVGF0 aGFtJ3MgTyhuIGxvZyhuKSkgbWVyZ2Vzb3J0ICovCi0rLyogTm90ZSB0aGF0IEhBU0hfU09SVCBh c3N1bWVzIHRoZSBoYXNoIGhhbmRsZSBuYW1lIHRvIGJlIGhoLgotKyAqIEhBU0hfU1JUIHdhcyBh ZGRlZCB0byBhbGxvdyB0aGUgaGFzaCBoYW5kbGUgbmFtZSB0byBiZSBwYXNzZWQgaW4uICovCi0r I2RlZmluZSBIQVNIX1NPUlQoaGVhZCxjbXBmY24pIEhBU0hfU1JUKGhoLGhlYWQsY21wZmNuKQot KyNkZWZpbmUgSEFTSF9TUlQoaGgsaGVhZCxjbXBmY24pICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICB1bnNpZ25lZCBfaHNfaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdW5zaWduZWQgX2hzX2xvb3BpbmcsX2hzX25t ZXJnZXMsX2hzX2luc2l6ZSxfaHNfcHNpemUsX2hzX3FzaXplOyAgICAgICAgICAgICAgIFwKLSsg IHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqX2hzX3AsICpfaHNfcSwgKl9oc19lLCAqX2hzX2xpc3Qs ICpfaHNfdGFpbDsgICAgICAgICAgICBcCi0rICBpZiAoaGVhZCAhPSBOVUxMKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICBfaHNfaW5zaXplID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgX2hzX2xvb3BpbmcgPSAxOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg IF9oc19saXN0ID0gJigoaGVhZCktPmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICB3aGlsZSAoX2hzX2xvb3BpbmcgIT0gMFUpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICBfaHNfcCA9IF9oc19saXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgX2hzX2xpc3QgPSBOVUxMOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg IF9oc190YWlsID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBfaHNfbm1lcmdlcyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg d2hpbGUgKF9oc19wICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgX2hzX25tZXJnZXMrKzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg IF9oc19xID0gX2hzX3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfaHNfcHNpemUgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg Zm9yIChfaHNfaSA9IDA7IF9oc19pIDwgX2hzX2luc2l6ZTsgKytfaHNfaSkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgX2hzX3BzaXplKys7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAg IF9oc19xID0gKChfaHNfcS0+bmV4dCAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRi bCwgX2hzX3EtPm5leHQpIDogTlVMTCk7ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAg aWYgKF9oc19xID09IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSsgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfaHNf cXNpemUgPSBfaHNfaW5zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotKyAgICAgICAgd2hpbGUgKChfaHNfcHNpemUgIT0gMFUpIHx8ICgoX2hz X3FzaXplICE9IDBVKSAmJiAoX2hzX3EgIT0gTlVMTCkpKSB7ICAgIFwKLSsgICAgICAgICAgaWYg KF9oc19wc2l6ZSA9PSAwVSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hzX2UgPSBfaHNfcTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9o c19xID0gKChfaHNfcS0+bmV4dCAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwg X2hzX3EtPm5leHQpIDogTlVMTCk7ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hz X3FzaXplLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotKyAgICAgICAgICB9IGVsc2UgaWYgKChfaHNfcXNpemUgPT0gMFUpIHx8IChf aHNfcSA9PSBOVUxMKSkgeyAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBfaHNf ZSA9IF9oc19wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0rICAgICAgICAgICAgaWYgKF9oc19wICE9IE5VTEwpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgX2hz X3AgPSAoKF9oc19wLT5uZXh0ICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSsgICAgICAgICAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBf aHNfcC0+bmV4dCkgOiBOVUxMKTsgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotKyAgICAgICAgICAgIF9oc19wc2l6ZS0tOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgfSBlbHNlIGlm ICgoY21wZmNuKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICAgICAgICAgICAgICAgIERFQ0xUWVBFKGhlYWQpKEVMTVRfRlJPTV9ISCgoaGVh ZCktPmhoLnRibCwgX2hzX3ApKSwgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgICBERUNM VFlQRShoZWFkKShFTE1UX0ZST01fSEgoKGhlYWQpLT5oaC50YmwsIF9oc19xKSkgICAgICAgICAg ICAgIFwKLSsgICAgICAgICAgICAgICAgKSkgPD0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgX2hzX2UgPSBf aHNfcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotKyAgICAgICAgICAgIGlmIChfaHNfcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIF9oc19wID0g KChfaHNfcC0+bmV4dCAhPSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0rICAgICAgICAgICAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3At Pm5leHQpIDogTlVMTCk7ICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgICAgICBfaHNfcHNpemUtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgICAgIF9oc19lID0gX2hzX3E7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBfaHNfcSA9ICgoX2hz X3EtPm5leHQgIT0gTlVMTCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICAgICAgICBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19xLT5uZXh0 KSA6IE5VTEwpOyAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9oc19xc2l6ZS0tOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIGlmICggX2hzX3RhaWwgIT0g TlVMTCApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICAgIF9oc190YWlsLT5uZXh0ID0gKChfaHNfZSAhPSBOVUxMKSA/ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIEVMTVRfRlJPTV9ISCgo aGVhZCktPmhoLnRibCwgX2hzX2UpIDogTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9oc19saXN0ID0gX2hzX2U7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIGlmIChfaHNfZSAhPSBOVUxMKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgICAgICAgIF9oc19lLT5wcmV2ID0gKChfaHNfdGFpbCAhPSBOVUxMKSA/ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIEVMTVRfRlJPTV9ISCgoaGVh ZCktPmhoLnRibCwgX2hzX3RhaWwpIDogTlVMTCk7ICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICBfaHNfdGFpbCA9IF9oc19lOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfaHNfcCA9IF9oc19xOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBpZiAoX2hzX3RhaWwgIT0gTlVMTCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICBfaHNfdGFpbC0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICBp ZiAoX2hzX25tZXJnZXMgPD0gMVUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfaHNfbG9vcGluZyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg KGhlYWQpLT5oaC50YmwtPnRhaWwgPSBfaHNfdGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIERFQ0xUWVBFX0FTU0lHTihoZWFkLCBFTE1UX0ZS T01fSEgoKGhlYWQpLT5oaC50YmwsIF9oc19saXN0KSk7ICAgICAgICAgICBcCi0rICAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICAgIF9oc19pbnNpemUgKj0gMlU7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfRlNDSyhoaCwgaGVhZCwgIkhBU0hfU1JUIik7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSt9IHdoaWxlICgwKQotKwotKy8qIFRoaXMgZnVuY3Rpb24gc2VsZWN0 cyBpdGVtcyBmcm9tIG9uZSBoYXNoIGludG8gYW5vdGhlciBoYXNoLgotKyAqIFRoZSBlbmQgcmVz dWx0IGlzIHRoYXQgdGhlIHNlbGVjdGVkIGl0ZW1zIGhhdmUgZHVhbCBwcmVzZW5jZQotKyAqIGlu IGJvdGggaGFzaGVzLiBUaGVyZSBpcyBubyBjb3B5IG9mIHRoZSBpdGVtcyBtYWRlOyByYXRoZXIK LSsgKiB0aGV5IGFyZSBhZGRlZCBpbnRvIHRoZSBuZXcgaGFzaCB0aHJvdWdoIGEgc2Vjb25kYXJ5 IGhhc2gKLSsgKiBoYXNoIGhhbmRsZSB0aGF0IG11c3QgYmUgcHJlc2VudCBpbiB0aGUgc3RydWN0 dXJlLiAqLwotKyNkZWZpbmUgSEFTSF9TRUxFQ1QoaGhfZHN0LCBkc3QsIGhoX3NyYywgc3JjLCBj b25kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0rICB1bnNpZ25lZCBfc3JjX2JrdCwgX2RzdF9ia3Q7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgdm9pZCAqX2xhc3RfZWx0ID0g TlVMTCwgKl9lbHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSsgIFVUX2hhc2hfaGFuZGxlICpfc3JjX2hoLCAqX2RzdF9oaCwgKl9sYXN0X2VsdF9o aD1OVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICBwdHJkaWZmX3QgX2RzdF9oaG8g PSAoKGNoYXIqKSgmKGRzdCktPmhoX2RzdCkgLSAoY2hhciopKGRzdCkpOyAgICAgICAgICAgICAg ICAgXAotKyAgaWYgKChzcmMpICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgZm9yIChfc3JjX2JrdD0wOyBf c3JjX2JrdCA8IChzcmMpLT5oaF9zcmMudGJsLT5udW1fYnVja2V0czsgX3NyY19ia3QrKykgeyAg ICBcCi0rICAgICAgZm9yIChfc3JjX2hoID0gKHNyYyktPmhoX3NyYy50YmwtPmJ1Y2tldHNbX3Ny Y19ia3RdLmhoX2hlYWQ7ICAgICAgICAgICAgICAgXAotKyAgICAgICAgX3NyY19oaCAhPSBOVUxM OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgICAgICAgIF9zcmNfaGggPSBfc3JjX2hoLT5oaF9uZXh0KSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICBfZWx0ID0gRUxNVF9GUk9N X0hIKChzcmMpLT5oaF9zcmMudGJsLCBfc3JjX2hoKTsgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICAgICAgaWYgKGNvbmQoX2VsdCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgSUZfSEFTSF9OT05GQVRB TF9PT00oIGludCBfaHNfb29tZWQgPSAwOyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0rICAgICAgICAgIF9kc3RfaGggPSAoVVRfaGFzaF9oYW5kbGUqKSh2b2lkKikoKChjaGFyKilf ZWx0KSArIF9kc3RfaGhvKTsgICAgICAgICAgXAotKyAgICAgICAgICBfZHN0X2hoLT5rZXkgPSBf c3JjX2hoLT5rZXk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgICAgICAgICAgX2RzdF9oaC0+a2V5bGVuID0gX3NyY19oaC0+a2V5bGVuOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIF9kc3RfaGgtPmhhc2h2ID0g X3NyY19oaC0+aGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot KyAgICAgICAgICBfZHN0X2hoLT5wcmV2ID0gX2xhc3RfZWx0OyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgX2RzdF9oaC0+bmV4dCA9IE5V TEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0r ICAgICAgICAgIGlmIChfbGFzdF9lbHRfaGggIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgIF9sYXN0X2VsdF9oaC0+bmV4 dCA9IF9lbHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsg ICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIGlmICgoZHN0KSA9PSBOVUxMKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAg ICAgICAgICAgIERFQ0xUWVBFX0FTU0lHTihkc3QsIF9lbHQpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICBIQVNIX01BS0VfVEFCTEUoaGhf ZHN0LCBkc3QsIF9oc19vb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgaWYgKF9oc19vb21lZCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgICAgICAgICAgdXRoYXNoX25vbmZhdGFsX29vbShfZWx0KTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICAgIChkc3QpID0gTlVMTDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg ICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICAgICBfZHN0X2hoLT50YmwgPSAoZHN0KS0+aGhfZHN0LnRibDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICBIQVNIX1RPX0JLVChfZHN0X2hoLT5oYXNodiwgX2RzdF9oaC0+dGJsLT5udW1fYnVja2V0cywg X2RzdF9ia3QpOyAgICAgIFwKLSsgICAgICAgICAgSEFTSF9BRERfVE9fQktUKF9kc3RfaGgtPnRi bC0+YnVja2V0c1tfZHN0X2JrdF0sIGhoX2RzdCwgX2RzdF9oaCwgX2hzX29vbWVkKTsgXAotKyAg ICAgICAgICAoZHN0KS0+aGhfZHN0LnRibC0+bnVtX2l0ZW1zKys7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgSUZfSEFTSF9OT05GQVRBTF9PT00o ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAg ICAgICAgICAgaWYgKF9oc19vb21lZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICAgICAgSEFTSF9ST0xMQkFDS19CS1Qo aGhfZHN0LCBkc3QsIF9kc3RfaGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAg ICAgICAgICAgIEhBU0hfREVMRVRFX0hIKGhoX2RzdCwgZHN0LCBfZHN0X2hoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgICAgICBfZHN0X2hoLT50YmwgPSBOVUxM OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAg ICAgICAgICAgdXRoYXNoX25vbmZhdGFsX29vbShfZWx0KTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAg ICAgSEFTSF9CTE9PTV9BREQoX2RzdF9oaC0+dGJsLCBfZHN0X2hoLT5oYXNodik7ICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0rICAgICAgICAgIF9sYXN0X2VsdCA9IF9lbHQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAgICAg ICBfbGFzdF9lbHRfaGggPSBfZHN0X2hoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSsgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICBIQVNIX0ZTQ0soaGhfZHN0LCBkc3QsICJIQVNIX1NFTEVDVCIp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK30gd2hpbGUgKDAp Ci0rCi0rI2RlZmluZSBIQVNIX0NMRUFSKGhoLGhlYWQpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSsgIGlmICgoaGVhZCkgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rICAgIEhBU0hfQkxPT01fRlJFRSgoaGVh ZCktPmhoLnRibCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotKyAgICB1dGhhc2hfZnJlZSgoaGVhZCktPmhoLnRibC0+YnVja2V0cywgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSsgICAgICAgICAgICAgICAgKGhlYWQpLT5o aC50YmwtPm51bV9idWNrZXRzKnNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQpKTsgICAgICBc Ci0rICAgIHV0aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkp OyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAgICAoaGVhZCkgPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSsgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rfSB3aGlsZSAoMCkKLSsKLSsjZGVmaW5lIEhB U0hfT1ZFUkhFQUQoaGgsaGVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0rICgoKGhlYWQpICE9IE5VTEwpID8gKCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKyAoc2l6ZV90KSgo KGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcyAgICogc2l6ZW9mKFVUX2hhc2hfaGFuZGxlKSkgICAr ICAgICAgICAgICAgIFwKLSsgICAgICAgICAgKChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cyAq IHNpemVvZihVVF9oYXNoX2J1Y2tldCkpICAgKyAgICAgICAgICAgICBcCi0rICAgICAgICAgICBz aXplb2YoVVRfaGFzaF90YWJsZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg ICAgICAgICAgICAgXAotKyAgICAgICAgICAgKEhBU0hfQkxPT01fQllURUxFTikpKSA6IDBVKQot KwotKyNpZmRlZiBOT19ERUNMVFlQRQotKyNkZWZpbmUgSEFTSF9JVEVSKGhoLGhlYWQsZWwsdG1w KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLStmb3Io KChlbCk9KGhlYWQpKSwgKCgqKGNoYXIqKikoJih0bXApKSk9KGNoYXIqKSgoaGVhZCE9TlVMTCk/ KGhlYWQpLT5oaC5uZXh0Ok5VTEwpKTsgXAotKyAgKGVsKSAhPSBOVUxMOyAoKGVsKT0odG1wKSks ICgoKihjaGFyKiopKCYodG1wKSkpPShjaGFyKikoKHRtcCE9TlVMTCk/KHRtcCktPmhoLm5leHQ6 TlVMTCkpKQotKyNlbHNlCi0rI2RlZmluZSBIQVNIX0lURVIoaGgsaGVhZCxlbCx0bXApICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotK2ZvcigoKGVsKT0o aGVhZCkpLCAoKHRtcCk9REVDTFRZUEUoZWwpKChoZWFkIT1OVUxMKT8oaGVhZCktPmhoLm5leHQ6 TlVMTCkpOyAgICAgIFwKLSsgIChlbCkgIT0gTlVMTDsgKChlbCk9KHRtcCkpLCAoKHRtcCk9REVD TFRZUEUoZWwpKCh0bXAhPU5VTEwpPyh0bXApLT5oaC5uZXh0Ok5VTEwpKSkKLSsjZW5kaWYKLSsK LSsvKiBvYnRhaW4gYSBjb3VudCBvZiBpdGVtcyBpbiB0aGUgaGFzaCAqLwotKyNkZWZpbmUgSEFT SF9DT1VOVChoZWFkKSBIQVNIX0NOVChoaCxoZWFkKQotKyNkZWZpbmUgSEFTSF9DTlQoaGgsaGVh ZCkgKChoZWFkICE9IE5VTEwpPygoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1zKTowVSkKLSsKLSt0 eXBlZGVmIHN0cnVjdCBVVF9oYXNoX2J1Y2tldCB7Ci0rICAgc3RydWN0IFVUX2hhc2hfaGFuZGxl ICpoaF9oZWFkOwotKyAgIHVuc2lnbmVkIGNvdW50OwotKwotKyAgIC8qIGV4cGFuZF9tdWx0IGlz IG5vcm1hbGx5IHNldCB0byAwLiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIG1heCBjaGFpbiBsZW5n dGgKLSsgICAgKiB0aHJlc2hvbGQgaXMgZW5mb3JjZWQgYXQgaXRzIGRlZmF1bHQgdmFsdWUsIEhB U0hfQktUX0NBUEFDSVRZX1RIUkVTSC4gKElmCi0rICAgICogdGhlIGJ1Y2tldCdzIGNoYWluIGV4 Y2VlZHMgdGhpcyBsZW5ndGgsIGJ1Y2tldCBleHBhbnNpb24gaXMgdHJpZ2dlcmVkKS4KLSsgICAg KiBIb3dldmVyLCBzZXR0aW5nIGV4cGFuZF9tdWx0IHRvIGEgbm9uLXplcm8gdmFsdWUgZGVsYXlz IGJ1Y2tldCBleHBhbnNpb24KLSsgICAgKiAodGhhdCB3b3VsZCBiZSB0cmlnZ2VyZWQgYnkgYWRk aXRpb25zIHRvIHRoaXMgcGFydGljdWxhciBidWNrZXQpCi0rICAgICogdW50aWwgaXRzIGNoYWlu IGxlbmd0aCByZWFjaGVzIGEgKm11bHRpcGxlKiBvZiBIQVNIX0JLVF9DQVBBQ0lUWV9USFJFU0gu Ci0rICAgICogKFRoZSBtdWx0aXBsaWVyIGlzIHNpbXBseSBleHBhbmRfbXVsdCsxKS4gVGhlIHdo b2xlIGlkZWEgb2YgdGhpcwotKyAgICAqIG11bHRpcGxpZXIgaXMgdG8gcmVkdWNlIGJ1Y2tldCBl eHBhbnNpb25zLCBzaW5jZSB0aGV5IGFyZSBleHBlbnNpdmUsIGluCi0rICAgICogc2l0dWF0aW9u cyB3aGVyZSB3ZSBrbm93IHRoYXQgYSBwYXJ0aWN1bGFyIGJ1Y2tldCB0ZW5kcyB0byBiZSBvdmVy dXNlZC4KLSsgICAgKiBJdCBpcyBiZXR0ZXIgdG8gbGV0IGl0cyBjaGFpbiBsZW5ndGggZ3JvdyB0 byBhIGxvbmdlciB5ZXQtc3RpbGwtYm91bmRlZAotKyAgICAqIHZhbHVlLCB0aGFuIHRvIGRvIGFu IE8obikgYnVja2V0IGV4cGFuc2lvbiB0b28gb2Z0ZW4uCi0rICAgICovCi0rICAgdW5zaWduZWQg ZXhwYW5kX211bHQ7Ci0rCi0rfSBVVF9oYXNoX2J1Y2tldDsKLSsKLSsvKiByYW5kb20gc2lnbmF0 dXJlIHVzZWQgb25seSB0byBmaW5kIGhhc2ggdGFibGVzIGluIGV4dGVybmFsIGFuYWx5c2lzICov Ci0rI2RlZmluZSBIQVNIX1NJR05BVFVSRSAweGEwMTExZmUxdQotKyNkZWZpbmUgSEFTSF9CTE9P TV9TSUdOQVRVUkUgMHhiMTIyMjBmMnUKLSsKLSt0eXBlZGVmIHN0cnVjdCBVVF9oYXNoX3RhYmxl IHsKLSsgICBVVF9oYXNoX2J1Y2tldCAqYnVja2V0czsKLSsgICB1bnNpZ25lZCBudW1fYnVja2V0 cywgbG9nMl9udW1fYnVja2V0czsKLSsgICB1bnNpZ25lZCBudW1faXRlbXM7Ci0rICAgc3RydWN0 IFVUX2hhc2hfaGFuZGxlICp0YWlsOyAvKiB0YWlsIGhoIGluIGFwcCBvcmRlciwgZm9yIGZhc3Qg YXBwZW5kICAgICovCi0rICAgcHRyZGlmZl90IGhobzsgLyogaGFzaCBoYW5kbGUgb2Zmc2V0IChi eXRlIHBvcyBvZiBoYXNoIGhhbmRsZSBpbiBlbGVtZW50ICovCi0rCi0rICAgLyogaW4gYW4gaWRl YWwgc2l0dWF0aW9uIChhbGwgYnVja2V0cyB1c2VkIGVxdWFsbHkpLCBubyBidWNrZXQgd291bGQg aGF2ZQotKyAgICAqIG1vcmUgdGhhbiBjZWlsKCNpdGVtcy8jYnVja2V0cykgaXRlbXMuIHRoYXQn cyB0aGUgaWRlYWwgY2hhaW4gbGVuZ3RoLiAqLwotKyAgIHVuc2lnbmVkIGlkZWFsX2NoYWluX21h eGxlbjsKLSsKLSsgICAvKiBub25pZGVhbF9pdGVtcyBpcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGlu IHRoZSBoYXNoIHdob3NlIGNoYWluIHBvc2l0aW9uCi0rICAgICogZXhjZWVkcyB0aGUgaWRlYWwg Y2hhaW4gbWF4bGVuLiB0aGVzZSBpdGVtcyBwYXkgdGhlIHBlbmFsdHkgZm9yIGFuIHVuZXZlbgot KyAgICAqIGhhc2ggZGlzdHJpYnV0aW9uOyByZWFjaGluZyB0aGVtIGluIGEgY2hhaW4gdHJhdmVy c2FsIHRha2VzID5pZGVhbCBzdGVwcyAqLwotKyAgIHVuc2lnbmVkIG5vbmlkZWFsX2l0ZW1zOwot KwotKyAgIC8qIGluZWZmZWN0aXZlIGV4cGFuZHMgb2NjdXIgd2hlbiBhIGJ1Y2tldCBkb3VibGlu ZyB3YXMgcGVyZm9ybWVkLCBidXQKLSsgICAgKiBhZnRlcndhcmQsIG1vcmUgdGhhbiBoYWxmIHRo ZSBpdGVtcyBpbiB0aGUgaGFzaCBoYWQgbm9uaWRlYWwgY2hhaW4KLSsgICAgKiBwb3NpdGlvbnMu IElmIHRoaXMgaGFwcGVucyBvbiB0d28gY29uc2VjdXRpdmUgZXhwYW5zaW9ucyB3ZSBpbmhpYml0 IGFueQotKyAgICAqIGZ1cnRoZXIgZXhwYW5zaW9uLCBhcyBpdCdzIG5vdCBoZWxwaW5nOyB0aGlz IGhhcHBlbnMgd2hlbiB0aGUgaGFzaAotKyAgICAqIGZ1bmN0aW9uIGlzbid0IGEgZ29vZCBmaXQg Zm9yIHRoZSBrZXkgZG9tYWluLiBXaGVuIGV4cGFuc2lvbiBpcyBpbmhpYml0ZWQKLSsgICAgKiB0 aGUgaGFzaCB3aWxsIHN0aWxsIHdvcmssIGFsYmVpdCBubyBsb25nZXIgaW4gY29uc3RhbnQgdGlt ZS4gKi8KLSsgICB1bnNpZ25lZCBpbmVmZl9leHBhbmRzLCBub2V4cGFuZDsKLSsKLSsgICB1aW50 MzJfdCBzaWduYXR1cmU7IC8qIHVzZWQgb25seSB0byBmaW5kIGhhc2ggdGFibGVzIGluIGV4dGVy bmFsIGFuYWx5c2lzICovCi0rI2lmZGVmIEhBU0hfQkxPT00KLSsgICB1aW50MzJfdCBibG9vbV9z aWc7IC8qIHVzZWQgb25seSB0byB0ZXN0IGJsb29tIGV4aXN0cyBpbiBleHRlcm5hbCBhbmFseXNp cyAqLwotKyAgIHVpbnQ4X3QgKmJsb29tX2J2OwotKyAgIHVpbnQ4X3QgYmxvb21fbmJpdHM7Ci0r I2VuZGlmCi0rCi0rfSBVVF9oYXNoX3RhYmxlOwotKwotK3R5cGVkZWYgc3RydWN0IFVUX2hhc2hf aGFuZGxlIHsKLSsgICBzdHJ1Y3QgVVRfaGFzaF90YWJsZSAqdGJsOwotKyAgIHZvaWQgKnByZXY7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmV2IGVsZW1lbnQgaW4gYXBwIG9yZGVyICAgICAg Ki8KLSsgICB2b2lkICpuZXh0OyAgICAgICAgICAgICAgICAgICAgICAgLyogbmV4dCBlbGVtZW50 IGluIGFwcCBvcmRlciAgICAgICovCi0rICAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpoaF9wcmV2 OyAgIC8qIHByZXZpb3VzIGhoIGluIGJ1Y2tldCBvcmRlciAgICAqLwotKyAgIHN0cnVjdCBVVF9o YXNoX2hhbmRsZSAqaGhfbmV4dDsgICAvKiBuZXh0IGhoIGluIGJ1Y2tldCBvcmRlciAgICAgICAg Ki8KLSsgICBjb25zdCB2b2lkICprZXk7ICAgICAgICAgICAgICAgICAgLyogcHRyIHRvIGVuY2xv c2luZyBzdHJ1Y3QncyBrZXkgICovCi0rICAgdW5zaWduZWQga2V5bGVuOyAgICAgICAgICAgICAg ICAgIC8qIGVuY2xvc2luZyBzdHJ1Y3QncyBrZXkgbGVuICAgICAqLwotKyAgIHVuc2lnbmVkIGhh c2h2OyAgICAgICAgICAgICAgICAgICAvKiByZXN1bHQgb2YgaGFzaC1mY24oa2V5KSAgICAgICAg Ki8KLSt9IFVUX2hhc2hfaGFuZGxlOwotKwotKyNlbmRpZiAvKiBVVEhBU0hfSCAqLwotZGlmZiAt TnVyIG9wZW5zc2gtMTAuMnAxLm9yaWcvdmVyc2lvbi5oIG9wZW5zc2gtMTAuMnAxL3ZlcnNpb24u aAotLS0tIG9wZW5zc2gtMTAuMnAxLm9yaWcvdmVyc2lvbi5oCTIwMjYtMDMtMTggMTU6MTI6MDIu MDExNzU3MDE0ICswMTAwCi0rKysgb3BlbnNzaC0xMC4ycDEvdmVyc2lvbi5oCTIwMjYtMDMtMTgg MTU6MjE6MjkuMzExMjk2Mjk1ICswMTAwCi1AQCAtMTYsNSArMTYsNiBAQAotIAotICNkZWZpbmUg U1NIX1BPUlRBQkxFCSJwMSIKLSAjZGVmaW5lIEdTSV9QT1JUQUJMRQkiYy1HU0kiCi0tI2RlZmlu ZSBTU0hfUkVMRUFTRQlTU0hfVkVSU0lPTiBTU0hfUE9SVEFCTEUgR1NJX1BPUlRBQkxFIFwKLSsj ZGVmaW5lIFNTSF9IUE4JCSJfaHBuMTguOC4wIgotKyNkZWZpbmUgU1NIX1JFTEVBU0UJU1NIX1ZF UlNJT04gU1NIX1BPUlRBQkxFIEdTSV9QT1JUQUJMRSBTU0hfSFBOIFwKLSAJCQlHU0lfVkVSU0lP TiBLUkI1X1ZFUlNJT04KCmRpZmYgLS1naXQgYS8yMDAxLW9wZW5zc2gtMTAuM3AxLWhwbi0xOC45 LjAucGF0Y2ggYi8yMDAxLW9wZW5zc2gtMTAuM3AxLWhwbi0xOC45LjAucGF0Y2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2MWMzZQotLS0gL2Rldi9udWxsCisrKyBiLzIw MDEtb3BlbnNzaC0xMC4zcDEtaHBuLTE4LjkuMC5wYXRjaApAQCAtMCwwICsxLDE1Njc5IEBACitk aWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9hdXRoMi5jIG9wZW5zc2gtMTAuM3AxL2F1dGgy LmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2F1dGgyLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4x MDQxOTU0NDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9hdXRoMi5jCTIwMjYtMDctMDIgMDc6 MDI6MDQuMjYwOTEwMzIwICswMjAwCitAQCAtNTIsNiArNTIsOCBAQAorICNpbmNsdWRlICJkaXNw YXRjaC5oIgorICNpbmNsdWRlICJwYXRobmFtZXMuaCIKKyAjaW5jbHVkZSAic3NoZXJyLmgiCisr I2luY2x1ZGUgImNhbm9ob3N0LmgiCisrCisgI2lmZGVmIEdTU0FQSQorICNpbmNsdWRlICJzc2gt Z3NzLmgiCisgI2VuZGlmCitAQCAtNzUsNiArNzcsOCBAQAorIGV4dGVybiBBdXRobWV0aG9kIG1l dGhvZF9nc3NhcGk7CisgI2VuZGlmCisgCisrc3RhdGljIGludCBsb2dfZmxhZyA9IDA7CisrCisg QXV0aG1ldGhvZCAqYXV0aG1ldGhvZHNbXSA9IHsKKyAJJm1ldGhvZF9ub25lLAorIAkmbWV0aG9k X3B1YmtleSwKK0BAIC0xMDQsNiArMTA4LDkgQEAKKyAjZGVmaW5lIE1BVENIX1BBUlRJQUwJMwkv KiBtZXRob2QgbWF0Y2hlcywgc3VibWV0aG9kIGNhbid0IGJlIGNoZWNrZWQgKi8KKyBzdGF0aWMg aW50IGxpc3Rfc3RhcnRzX3dpdGgoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CisgCisrLyogcmVhZCB0aGUgdXNlciBiYW5uZXIgZnJvbSB0aGUgcGF0aCBpbiBzc2hk X2NvbmZpZworKyAqIHRoaXMgaXNuJ3QgdG8gcmVhZCBpdCBvbiB0aGUgY2xpZW50IHNpZGUgYnV0 IHRvIHJlYWQKKysgKiBpdCBpbnRvIHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQgb24gdGhlIHNl cnZlciBzaWRlICovCisgY2hhciAqCisgYXV0aDJfcmVhZF9iYW5uZXIodm9pZCkKKyB7CitAQCAt MzA4LDYgKzMxNSwxMSBAQAorIAorIAlkZWJ1ZygidXNlcmF1dGgtcmVxdWVzdCBmb3IgdXNlciAl cyBzZXJ2aWNlICVzIG1ldGhvZCAlcyIsCisgCSAgICB1c2VyWzBdID8gdXNlciA6ICI8aW1wbGlj aXQ+Iiwgc2VydmljZSwgbWV0aG9kKTsKKysJaWYgKCFsb2dfZmxhZykgeworKwkJbG9naXQoIlNT SDogU2VydmVyO0x0eXBlOiBBdXRobmFtZTtSZW1vdGU6ICVzLSVkO05hbWU6ICVzIiwKKysJCSAg ICBzc2hfcmVtb3RlX2lwYWRkcihzc2gpLCBzc2hfcmVtb3RlX3BvcnQoc3NoKSwgdXNlcik7Cisr CQlsb2dfZmxhZyA9IDE7CisrCX0KKyAJZGVidWcoImF0dGVtcHQgJWQgZmFpbHVyZXMgJWQiLCBh dXRoY3R4dC0+YXR0ZW1wdCwgYXV0aGN0eHQtPmZhaWx1cmVzKTsKKyAKKyAjaWZkZWYgV0lUSF9T RUxJTlVYCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9iaW5uLmMgb3BlbnNzaC0xMC4z cDEvYmlubi5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9iaW5uLmMJMTk3MC0wMS0wMSAwMTow MDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9iaW5uLmMJMjAyNi0wNy0w MiAwMDoyNzoyOS43MTg2MDQ2NDAgKzAyMDAKK0BAIC0wLDAgKzEsMzU0MSBAQAorKyNpbmNsdWRl IDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxtZW1vcnkuaD4KKysjaW5jbHVkZSAiYmlu bi5oIgorKworKyNkZWZpbmUgVU5VU0VEKHgpICh2b2lkKSh4KQorKyNkZWZpbmUgcm91bmR2YWwo ZGJsKSBkYmwgPj0gMC4wID8gKGludCkoZGJsICsgMC41KSA6ICgoZGJsIC0gKGRvdWJsZSkoaW50 KWRibCkgPD0gLTAuNSA/IChpbnQpZGJsIDogKGludCkoZGJsIC0gMC41KSkKKysKKysvLyBtYWdp YyBudW1iZXI6ICAweDFGIDB4YjEgMHgyMiAweDFGICA9PiAgMHgxRkIxMjIxRiBvciAweDFGMjJC MTFGCisrLy8gYmVjYXVzZSB0aGUgQklOTl9TVE9SQUdFX05PQllURVMgKGJpbmFyeSAwMDApIG1h eSBub3QgaGF2ZSBzbyBtYW55IHN1Yi10eXBlcyAoQklOTl9TVE9SQUdFX0hBU19NT1JFID0gMHgx MCkKKysjZGVmaW5lIEJJTk5fTUFHSUMgICAgICAgICAgICAweDFGMjJCMTFGCisrCisrI2RlZmlu ZSBNQVhfQklOTl9IRUFERVIgICAgICAgOSAgLy8gWzE6dHlwZV1bNDpzaXplXVs0OmNvdW50XQor KyNkZWZpbmUgTUlOX0JJTk5fU0laRSAgICAgICAgIDMgIC8vIFsxOnR5cGVdWzE6c2l6ZV1bMTpj b3VudF0KKysjZGVmaW5lIENIVU5LX1NJWkUgICAgICAgICAgICAyNTYgIC8vIDEwMjQKKysKKysj ZGVmaW5lIEJJTk5fU1RSVUNUICAgICAgICAxCisrI2RlZmluZSBCSU5OX0JVRkZFUiAgICAgICAg MgorKworK3ZvaWQqICgqbWFsbG9jX2ZuKShzaXplX3QgbGVuKSA9IDA7Cisrdm9pZCogKCpyZWFs bG9jX2ZuKSh2b2lkICpwdHIsIHNpemVfdCBsZW4pID0gMDsKKyt2b2lkICAoKmZyZWVfZm4pKHZv aWQgKnB0cikgPSAwOworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2lmIGRlZmluZWQo X19hbHBoYV9fKSB8fCBkZWZpbmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBk ZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykKKysjZGVmaW5lIEJJTk5f T05MWV9BTElHTkVEX0FDQ0VTUworKyNlbGlmICggZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVk KF9fYWFyY2g2NF9fKSApICYmICFkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEKQorKyNk ZWZpbmUgQklOTl9PTkxZX0FMSUdORURfQUNDRVNTCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQo X1dJTjMyKQorKyNkZWZpbmUgQklHX0VORElBTiAgICAgIDB4MTAwMAorKyNkZWZpbmUgTElUVExF X0VORElBTiAgIDB4MDAwMQorKyNkZWZpbmUgQllURV9PUkRFUiAgICAgIExJVFRMRV9FTkRJQU4K KysjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKysvKiBtYWNyb3MgYWxyZWFkeSBkZWZpbmVkICov CisrI2VsaWYgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBk ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisrI2luY2x1ZGUg PHN5cy9lbmRpYW4uaD4KKysjZWxpZiBkZWZpbmVkKF9BSVgpCisrI2luY2x1ZGUgPHN5cy9tYWNo aW5lLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2VuZGlmCisrCisrI2lmbmRl ZiBCWVRFX09SREVSCisrI2Vycm9yICJCWVRFX09SREVSIG5vdCBkZWZpbmVkIgorKyNlbmRpZgor KyNpZm5kZWYgQklHX0VORElBTgorKyNlcnJvciAiQklHX0VORElBTiBub3QgZGVmaW5lZCIKKysj ZW5kaWYKKysjaWZuZGVmIExJVFRMRV9FTkRJQU4KKysjZXJyb3IgIkxJVFRMRV9FTkRJQU4gbm90 IGRlZmluZWQiCisrI2VuZGlmCisrI2lmIEJJR19FTkRJQU4gPT0gTElUVExFX0VORElBTgorKyNl cnJvciAiQklHX0VORElBTiA9PSBMSVRUTEVfRU5ESUFOIgorKyNlbmRpZgorKyNpZiBCWVRFX09S REVSIT1CSUdfRU5ESUFOICYmIEJZVEVfT1JERVIhPUxJVFRMRV9FTkRJQU4KKysjZXJyb3IgIkJZ VEVfT1JERVIgbm90IHN1cHBvcnRlZCIKKysjZW5kaWYKKysKKyt0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IGludCAgICAgdTE2OworK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICB1MzI7Cisr dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHU2NDsKKysKKytCSU5OX1BSSVZBVEUgdm9p ZCBjb3B5X2JlMTYodTE2ICpwZGVzdCwgdTE2ICpwc291cmNlKSB7CisrI2lmIEJZVEVfT1JERVIg PT0gTElUVExFX0VORElBTgorKyAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNo YXIgKikgcHNvdXJjZTsKKysgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAq KSBwZGVzdDsKKysgIGRlc3RbMF0gPSBzb3VyY2VbMV07CisrICBkZXN0WzFdID0gc291cmNlWzBd OworKyNlbHNlIC8vIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorKyNpZmRlZiBCSU5OX09O TFlfQUxJR05FRF9BQ0NFU1MKKysgIGlmICgodWludHB0cl90KXBzb3VyY2UgJSAyID09IDApeyAg Ly8gYWRkcmVzcyBhbGlnbmVkIHRvIDE2IGJpdAorKyAgICAqcGRlc3QgPSAqcHNvdXJjZTsKKysg IH0gZWxzZSB7CisrICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9ICh1bnNpZ25lZCBjaGFyICop IHBzb3VyY2U7CisrICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBw ZGVzdDsKKysgICAgZGVzdFswXSA9IHNvdXJjZVswXTsgIC8vIGluZGV4ZXMgYXJlIHRoZSBzYW1l CisrICAgIGRlc3RbMV0gPSBzb3VyY2VbMV07CisrICB9CisrI2Vsc2UKKysgICpwZGVzdCA9ICpw c291cmNlOworKyNlbmRpZgorKyNlbmRpZgorK30KKysKKytCSU5OX1BSSVZBVEUgdm9pZCBjb3B5 X2JlMzIodTMyICpwZGVzdCwgdTMyICpwc291cmNlKSB7CisrI2lmIEJZVEVfT1JERVIgPT0gTElU VExFX0VORElBTgorKyAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikg cHNvdXJjZTsKKysgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciAqKSBwZGVz dDsKKysgIGRlc3RbMF0gPSBzb3VyY2VbM107CisrICBkZXN0WzFdID0gc291cmNlWzJdOworKyAg ZGVzdFsyXSA9IHNvdXJjZVsxXTsKKysgIGRlc3RbM10gPSBzb3VyY2VbMF07CisrI2Vsc2UgLy8g aWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisrI2lmZGVmIEJJTk5fT05MWV9BTElHTkVEX0FD Q0VTUworKyAgaWYgKCh1aW50cHRyX3QpcHNvdXJjZSAlIDQgPT0gMCl7ICAvLyBhZGRyZXNzIGFs aWduZWQgdG8gMzIgYml0CisrICAgICpwZGVzdCA9ICpwc291cmNlOworKyAgfSBlbHNlIHsKKysg ICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIgKikgcHNvdXJjZTsKKysg ICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OworKyAgICBk ZXN0WzBdID0gc291cmNlWzBdOyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUKKysgICAgZGVzdFsx XSA9IHNvdXJjZVsxXTsKKysgICAgZGVzdFsyXSA9IHNvdXJjZVsyXTsKKysgICAgZGVzdFszXSA9 IHNvdXJjZVszXTsKKysgIH0KKysjZWxzZQorKyAgKnBkZXN0ID0gKnBzb3VyY2U7CisrI2VuZGlm CisrI2VuZGlmCisrfQorKworK0JJTk5fUFJJVkFURSB2b2lkIGNvcHlfYmU2NCh1NjQgKnBkZXN0 LCB1NjQgKnBzb3VyY2UpIHsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisrICB1 bnNpZ25lZCBjaGFyICpzb3VyY2UgPSAodW5zaWduZWQgY2hhciAqKSBwc291cmNlOworKyAgdW5z aWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopIHBkZXN0OworKyAgaW50IGk7Cisr ICBmb3IgKGk9MDsgaSA8IDg7IGkrKykgeworKyAgICBkZXN0W2ldID0gc291cmNlWzctaV07Cisr ICB9CisrI2Vsc2UgLy8gaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisrI2lmZGVmIEJJTk5f T05MWV9BTElHTkVEX0FDQ0VTUworKyAgaWYgKCh1aW50cHRyX3QpcHNvdXJjZSAlIDggPT0gMCl7 ICAvLyBhZGRyZXNzIGFsaWduZWQgdG8gNjQgYml0CisrICAgICpwZGVzdCA9ICpwc291cmNlOwor KyAgfSBlbHNlIHsKKysgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVkIGNoYXIg KikgcHNvdXJjZTsKKysgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICop IHBkZXN0OworKyAgICBpbnQgaTsKKysgICAgZm9yIChpPTA7IGkgPCA4OyBpKyspIHsKKysgICAg ICBkZXN0W2ldID0gc291cmNlW2ldOyAgLy8gaW5kZXhlcyBhcmUgdGhlIHNhbWUKKysgICAgfQor KyAgfQorKyNlbHNlCisrICAqcGRlc3QgPSAqcHNvdXJjZTsKKysjZW5kaWYKKysjZW5kaWYKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysjaWZuZGVmIF9NU0NfVkVSCisrI2RlZmlu ZSBzdHJpY21wIHN0cmNhc2VjbXAKKysjZGVmaW5lIHN0cm5pY21wIHN0cm5jYXNlY21wCisrI2Vu ZGlmCisrCisrQklOTl9QUklWQVRFIEJPT0wgSXNWYWxpZEJpbm5IZWFkZXIoY29uc3Qgdm9pZCAq cGJ1ZiwgaW50ICpwdHlwZSwgaW50ICpwY291bnQsIGludCAqcHNpemUsIGludCAqcGhlYWRlcnNp emUpOworKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrY2hhciAqIEFQSUVOVFJZIGJpbm5f dmVyc2lvbigpIHsKKysgIHJldHVybiBCSU5OX1ZFUlNJT047CisrfQorKworKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisrCisrdm9pZCBBUElFTlRSWSBiaW5uX3NldF9hbGxvY19mdW5jdGlvbnModm9p ZCogKCpuZXdfbWFsbG9jKShzaXplX3QpLCB2b2lkKiAoKm5ld19yZWFsbG9jKSh2b2lkKixzaXpl X3QpLCB2b2lkICgqbmV3X2ZyZWUpKHZvaWQqKSkgeworKworKyAgbWFsbG9jX2ZuID0gbmV3X21h bGxvYzsKKysgIHJlYWxsb2NfZm4gPSBuZXdfcmVhbGxvYzsKKysgIGZyZWVfZm4gPSBuZXdfZnJl ZTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgdm9p ZCBjaGVja19hbGxvY19mdW5jdGlvbnMoKSB7CisrCisrICBpZiAobWFsbG9jX2ZuID09IDApIG1h bGxvY19mbiA9ICZtYWxsb2M7CisrICBpZiAocmVhbGxvY19mbiA9PSAwKSByZWFsbG9jX2ZuID0g JnJlYWxsb2M7CisrICBpZiAoZnJlZV9mbiA9PSAwKSBmcmVlX2ZuID0gJmZyZWU7CisrCisrfQor KworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIHZvaWQgKiBiaW5uX21h bGxvYyhpbnQgc2l6ZSkgeworKyAgY2hlY2tfYWxsb2NfZnVuY3Rpb25zKCk7CisrICByZXR1cm4g bWFsbG9jX2ZuKHNpemUpOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5f UFJJVkFURSB2b2lkICogYmlubl9tZW1kdXAoY29uc3Qgdm9pZCAqc3JjLCBpbnQgc2l6ZSkgewor KyAgdm9pZCAqZGVzdDsKKysKKysgIGlmIChzcmMgPT0gTlVMTCB8fCBzaXplIDw9IDApIHJldHVy biBOVUxMOworKyAgZGVzdCA9IGJpbm5fbWFsbG9jKHNpemUpOworKyAgaWYgKGRlc3QgPT0gTlVM TCkgcmV0dXJuIE5VTEw7CisrICBtZW1jcHkoZGVzdCwgc3JjLCBzaXplKTsKKysgIHJldHVybiBk ZXN0OworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBz aXplX3Qgc3RybGVuMihjaGFyICpzdHIpIHsKKysKKysgIGlmIChzdHIgPT0gTlVMTCkgcmV0dXJu IDA7CisrICByZXR1cm4gc3RybGVuKHN0cik7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisraW50IEFQSUVOVFJZIGJpbm5fY3JlYXRlX3R5cGUoaW50IHN0b3JhZ2VfdHlwZSwg aW50IGRhdGFfdHlwZV9pbmRleCkgeworKyAgaWYgKGRhdGFfdHlwZV9pbmRleCA8IDApIHJldHVy biAtMTsKKysgIGlmIChzdG9yYWdlX3R5cGUgPCBCSU5OX1NUT1JBR0VfTUlOIHx8IHN0b3JhZ2Vf dHlwZSA+IEJJTk5fU1RPUkFHRV9NQVgpIHJldHVybiAtMTsKKysgIGlmIChkYXRhX3R5cGVfaW5k ZXggPCAxNikKKysgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZSB8IGRhdGFfdHlwZV9pbmRleDsKKysg IGVsc2UgaWYgKGRhdGFfdHlwZV9pbmRleCA8IDQwOTYpIHsKKysgICAgc3RvcmFnZV90eXBlIHw9 IEJJTk5fU1RPUkFHRV9IQVNfTU9SRTsKKysgICAgc3RvcmFnZV90eXBlIDw8PSA4OworKyAgICBk YXRhX3R5cGVfaW5kZXggPj49IDQ7CisrICAgIHJldHVybiBzdG9yYWdlX3R5cGUgfCBkYXRhX3R5 cGVfaW5kZXg7CisrICB9IGVsc2UKKysgICAgcmV0dXJuIC0xOworK30KKysKKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfdHlwZV9pbmZvKGludCBsb25n X3R5cGUsIGludCAqcHN0b3JhZ2VfdHlwZSwgaW50ICpwZXh0cmFfdHlwZSkgeworKyAgaW50IHN0 b3JhZ2VfdHlwZSwgZXh0cmFfdHlwZTsKKysgIEJPT0wgcmV0dmFsPVRSVUU7CisrCisrYWdhaW46 CisrCisrICBpZiAobG9uZ190eXBlIDwgMCkgeworKyAgICBnb3RvIGxvY19pbnZhbGlkOworKyAg fSBlbHNlIGlmIChsb25nX3R5cGUgPD0gMHhmZikgeworKyAgICBzdG9yYWdlX3R5cGUgPSBsb25n X3R5cGUgJiBCSU5OX1NUT1JBR0VfTUFTSzsKKysgICAgZXh0cmFfdHlwZSA9IGxvbmdfdHlwZSAm IEJJTk5fVFlQRV9NQVNLOworKyAgfSBlbHNlIGlmIChsb25nX3R5cGUgPD0gMHhmZmZmKSB7Cisr ICAgIHN0b3JhZ2VfdHlwZSA9IGxvbmdfdHlwZSAmIEJJTk5fU1RPUkFHRV9NQVNLMTY7CisrICAg IHN0b3JhZ2VfdHlwZSA+Pj0gODsKKysgICAgZXh0cmFfdHlwZSA9IGxvbmdfdHlwZSAmIEJJTk5f VFlQRV9NQVNLMTY7CisrICAgIGV4dHJhX3R5cGUgPj49IDQ7CisrICB9IGVsc2UgaWYgKGxvbmdf dHlwZSAmIEJJTk5fU1RPUkFHRV9WSVJUVUFMKSB7CisrICAgIC8vc3RvcmFnZV90eXBlID0gQklO Tl9TVE9SQUdFX1ZJUlRVQUw7CisrICAgIC8vZXh0cmFfdHlwZSA9IHh4eDsKKysgICAgbG9uZ190 eXBlICY9IDB4ZmZmZjsKKysgICAgZ290byBhZ2FpbjsKKysgIH0gZWxzZSB7CisrbG9jX2ludmFs aWQ6CisrICAgIHN0b3JhZ2VfdHlwZSA9IC0xOworKyAgICBleHRyYV90eXBlID0gLTE7CisrICAg IHJldHZhbCA9IEZBTFNFOworKyAgfQorKworKyAgaWYgKHBzdG9yYWdlX3R5cGUpICpwc3RvcmFn ZV90eXBlID0gc3RvcmFnZV90eXBlOworKyAgaWYgKHBleHRyYV90eXBlKSAqcGV4dHJhX3R5cGUg PSBleHRyYV90eXBlOworKworKyAgcmV0dXJuIHJldHZhbDsKKysKKyt9CisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fY3JlYXRlKGJpbm4gKml0ZW0sIGlu dCB0eXBlLCBpbnQgc2l6ZSwgdm9pZCAqcG9pbnRlcikgeworKyAgQk9PTCByZXR2YWw9RkFMU0U7 CisrCisrICBzd2l0Y2ggKHR5cGUpIHsKKysgICAgY2FzZSBCSU5OX0xJU1Q6CisrICAgIGNhc2Ug QklOTl9NQVA6CisrICAgIGNhc2UgQklOTl9PQkpFQ1Q6CisrICAgICAgYnJlYWs7CisrICAgIGRl ZmF1bHQ6CisrICAgICAgZ290byBsb2NfZXhpdDsKKysgIH0KKysKKysgIGlmIChpdGVtID09IE5V TEwgfHwgc2l6ZSA8IDApIGdvdG8gbG9jX2V4aXQ7CisrICBpZiAoc2l6ZSA8IE1JTl9CSU5OX1NJ WkUpIHsKKysgICAgaWYgKHBvaW50ZXIpIGdvdG8gbG9jX2V4aXQ7CisrICAgIGVsc2Ugc2l6ZSA9 IDA7CisrICB9CisrCisrICBtZW1zZXQoaXRlbSwgMCwgc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlm IChwb2ludGVyKSB7CisrICAgIGl0ZW0tPnByZV9hbGxvY2F0ZWQgPSBUUlVFOworKyAgfSBlbHNl IHsKKysgICAgaXRlbS0+cHJlX2FsbG9jYXRlZCA9IEZBTFNFOworKyAgICBpZiAoc2l6ZSA9PSAw KSBzaXplID0gQ0hVTktfU0laRTsKKysgICAgcG9pbnRlciA9IGJpbm5fbWFsbG9jKHNpemUpOwor KyAgICBpZiAocG9pbnRlciA9PSAwKSByZXR1cm4gSU5WQUxJRF9CSU5OOworKyAgfQorKworKyAg aXRlbS0+cGJ1ZiA9IHBvaW50ZXI7CisrICBpdGVtLT5hbGxvY19zaXplID0gc2l6ZTsKKysKKysg IGl0ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7CisrICAvL2l0ZW0tPmFsbG9jYXRlZCA9IEZBTFNF OyAgIC0tIGFscmVhZHkgemVyb2VkCisrICBpdGVtLT53cml0YWJsZSA9IFRSVUU7CisrICBpdGVt LT51c2VkX3NpemUgPSBNQVhfQklOTl9IRUFERVI7ICAvLyBzYXZlIHNwYWNlIGZvciB0aGUgaGVh ZGVyCisrICBpdGVtLT50eXBlID0gdHlwZTsKKysgIC8vaXRlbS0+Y291bnQgPSAwOyAgICAgICAg ICAgLS0gYWxyZWFkeSB6ZXJvZWQKKysgIGl0ZW0tPmRpcnR5ID0gVFJVRTsgICAgICAgICAgLy8g dGhlIGhlYWRlciBpcyBub3Qgd3JpdHRlbiB0byB0aGUgYnVmZmVyCisrCisrICByZXR2YWwgPSBU UlVFOworKworK2xvY19leGl0OgorKyAgcmV0dXJuIHJldHZhbDsKKysKKyt9CisrCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9uZXcoaW50IHR5cGUsIGlu dCBzaXplLCB2b2lkICpwb2ludGVyKSB7CisrICBiaW5uICppdGVtOworKworKyAgaXRlbSA9IChi aW5uKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChiaW5uX2NyZWF0ZShp dGVtLCB0eXBlLCBzaXplLCBwb2ludGVyKSA9PSBGQUxTRSkgeworKyAgICBmcmVlX2ZuKGl0ZW0p OworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIGl0ZW0tPmFsbG9jYXRlZCA9IFRSVUU7 CisrICByZXR1cm4gaXRlbTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9saXN0KGJpbm4gKmxpc3QpIHsKKysK KysgIHJldHVybiBiaW5uX2NyZWF0ZShsaXN0LCBCSU5OX0xJU1QsIDAsIE5VTEwpOworKworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJp bm5fY3JlYXRlX21hcChiaW5uICptYXApIHsKKysKKysgIHJldHVybiBiaW5uX2NyZWF0ZShtYXAs IEJJTk5fTUFQLCAwLCBOVUxMKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9vYmplY3QoYmlubiAqb2JqZWN0 KSB7CisrCisrICByZXR1cm4gYmlubl9jcmVhdGUob2JqZWN0LCBCSU5OX09CSkVDVCwgMCwgTlVM TCk7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZ IGJpbm5fbGlzdCgpIHsKKysgIHJldHVybiBiaW5uX25ldyhCSU5OX0xJU1QsIDAsIDApOworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcCgp IHsKKysgIHJldHVybiBiaW5uX25ldyhCSU5OX01BUCwgMCwgMCk7CisrfQorKworKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0KCkgeworKyAgcmV0 dXJuIGJpbm5fbmV3KEJJTk5fT0JKRUNULCAwLCAwKTsKKyt9CisrCisrLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9jb3B5KGNvbnN0IHZvaWQgKm9sZCkgewor KyAgaW50IHR5cGUsIGNvdW50LCBzaXplLCBoZWFkZXJfc2l6ZTsKKysgIHVuc2lnbmVkIGNoYXIg Km9sZF9wdHIgPSBiaW5uX3B0cihvbGQpOworKyAgYmlubiAqaXRlbTsKKysKKysgIHNpemUgPSAw OworKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihvbGRfcHRyLCAmdHlwZSwgJmNvdW50LCAmc2l6 ZSwgJmhlYWRlcl9zaXplKSkgcmV0dXJuIE5VTEw7CisrCisrICBpdGVtID0gYmlubl9uZXcodHlw ZSwgc2l6ZSAtIGhlYWRlcl9zaXplICsgTUFYX0JJTk5fSEVBREVSLCBOVUxMKTsKKysgIGlmKCBp dGVtICl7CisrICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Q7CisrICAgIGRlc3QgPSAoKHVuc2lnbmVk IGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBNQVhfQklOTl9IRUFERVI7CisrICAgIG1lbWNweShkZXN0 LCBvbGRfcHRyICsgaGVhZGVyX3NpemUsIHNpemUgLSBoZWFkZXJfc2l6ZSk7CisrICAgIGl0ZW0t PnVzZWRfc2l6ZSA9IE1BWF9CSU5OX0hFQURFUiArIHNpemUgLSBoZWFkZXJfc2l6ZTsKKysgICAg aXRlbS0+Y291bnQgPSBjb3VudDsKKysgIH0KKysgIHJldHVybiBpdGVtOworKworK30KKysKKysv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysvLyBkZXByZWNhdGVkOiB1bnNlY3Vy ZS4gdGhlIHNpemUgY2FuIGJlIGNvcnJ1cHRlZCBhY2NpZGVudGFsbHkgb3IgaW50ZW50aW9uYWxs eQorK0JPT0wgQVBJRU5UUlkgYmlubl9sb2FkKGNvbnN0IHZvaWQgKmRhdGEsIGJpbm4gKnZhbHVl KSB7CisrCisrICBpZiAoZGF0YSA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxT RTsKKysgIG1lbXNldCh2YWx1ZSwgMCwgc2l6ZW9mKGJpbm4pKTsKKysgIHZhbHVlLT5oZWFkZXIg PSBCSU5OX01BR0lDOworKyAgLy92YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAtLSAgYWxyZWFk eSB6ZXJvZWQKKysgIC8vdmFsdWUtPndyaXRhYmxlID0gRkFMU0U7CisrCisrICBpZiAoYmlubl9p c192YWxpZChkYXRhLCAmdmFsdWUtPnR5cGUsICZ2YWx1ZS0+Y291bnQsICZ2YWx1ZS0+c2l6ZSkg PT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysgIHZhbHVlLT5wdHIgPSAodm9pZCopIGRhdGE7Cisr ICByZXR1cm4gVFJVRTsKKysKKyt9CisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2xvYWRfZXgoY29u c3Qgdm9pZCAqZGF0YSwgaW50IHNpemUsIGJpbm4gKnZhbHVlKSB7CisrCisrICBpZiAoZGF0YSA9 PSBOVUxMIHx8IHZhbHVlID09IE5VTEwgfHwgc2l6ZSA8PSAwKSByZXR1cm4gRkFMU0U7CisrICBt ZW1zZXQodmFsdWUsIDAsIHNpemVvZihiaW5uKSk7CisrICB2YWx1ZS0+aGVhZGVyID0gQklOTl9N QUdJQzsKKysgIC8vdmFsdWUtPmFsbG9jYXRlZCA9IEZBTFNFOyAgLS0gIGFscmVhZHkgemVyb2Vk CisrICAvL3ZhbHVlLT53cml0YWJsZSA9IEZBTFNFOworKworKyAgaWYgKGJpbm5faXNfdmFsaWRf ZXgoZGF0YSwgJnZhbHVlLT50eXBlLCAmdmFsdWUtPmNvdW50LCAmc2l6ZSkgPT0gRkFMU0UpIHJl dHVybiBGQUxTRTsKKysgIHZhbHVlLT5wdHIgPSAodm9pZCopIGRhdGE7CisrICB2YWx1ZS0+c2l6 ZSA9IHNpemU7CisrICByZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fb3Blbihjb25zdCB2b2lkICpk YXRhKSB7CisrICBiaW5uICppdGVtOworKworKyAgaXRlbSA9IChiaW5uKikgYmlubl9tYWxsb2Mo c2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChiaW5uX2xvYWQoZGF0YSwgaXRlbSkgPT0gRkFMU0Up IHsKKysgICAgZnJlZV9mbihpdGVtKTsKKysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrCisrICBp dGVtLT5hbGxvY2F0ZWQgPSBUUlVFOworKyAgcmV0dXJuIGl0ZW07CisrCisrfQorKworK2Jpbm4g KiBBUElFTlRSWSBiaW5uX29wZW5fZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUpIHsKKysg IGJpbm4gKml0ZW07CisrCisrICBpdGVtID0gKGJpbm4qKSBiaW5uX21hbGxvYyhzaXplb2YoYmlu bikpOworKworKyAgaWYgKGJpbm5fbG9hZF9leChkYXRhLCBzaXplLCBpdGVtKSA9PSBGQUxTRSkg eworKyAgICBmcmVlX2ZuKGl0ZW0pOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIGl0 ZW0tPmFsbG9jYXRlZCA9IFRSVUU7CisrICByZXR1cm4gaXRlbTsKKysKKyt9CisrCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgaW50IGJpbm5fZ2V0X3B0cl90eXBlKGNv bnN0IHZvaWQgKnB0cikgeworKworKyAgaWYgKHB0ciA9PSBOVUxMKSByZXR1cm4gMDsKKysKKysg IHN3aXRjaCAoKih1bnNpZ25lZCBpbnQgKilwdHIpIHsKKysgIGNhc2UgQklOTl9NQUdJQzoKKysg ICAgcmV0dXJuIEJJTk5fU1RSVUNUOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEJJTk5fQlVG RkVSOworKyAgfQorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJ RU5UUlkgYmlubl9pc19zdHJ1Y3QoY29uc3Qgdm9pZCAqcHRyKSB7CisrCisrICBpZiAocHRyID09 IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICgoKih1bnNpZ25lZCBpbnQgKilwdHIpID09 IEJJTk5fTUFHSUMpIHsKKysgICAgcmV0dXJuIFRSVUU7CisrICB9IGVsc2UgeworKyAgICByZXR1 cm4gRkFMU0U7CisrICB9CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklO Tl9QUklWQVRFIGludCBDYWxjQWxsb2NhdGlvbihpbnQgbmVlZGVkX3NpemUsIGludCBhbGxvY19z aXplKSB7CisrICBpbnQgY2FsY19zaXplOworKworKyAgY2FsY19zaXplID0gYWxsb2Nfc2l6ZTsK KysgIHdoaWxlIChjYWxjX3NpemUgPCBuZWVkZWRfc2l6ZSkgeworKyAgICBjYWxjX3NpemUgPDw9 IDE7ICAvLyBzYW1lIGFzICo9IDIKKysgICAgLy9jYWxjX3NpemUgKz0gQ0hVTktfU0laRTsgIC0t IHRoaXMgaXMgc2xvd2VyIHRoYW4gdGhlIGFib3ZlIGxpbmUsIGJlY2F1c2UgdGhlcmUgYXJlIG1v cmUgcmVhbGxvY2F0aW9ucworKyAgfQorKyAgcmV0dXJuIGNhbGNfc2l6ZTsKKysKKyt9CisrCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBDaGVja0FsbG9jYXRp b24oYmlubiAqaXRlbSwgaW50IGFkZF9zaXplKSB7CisrICBpbnQgIGFsbG9jX3NpemU7CisrICB2 b2lkICpwdHI7CisrCisrICBpZiAoaXRlbS0+dXNlZF9zaXplICsgYWRkX3NpemUgPiBpdGVtLT5h bGxvY19zaXplKSB7CisrICAgIGlmIChpdGVtLT5wcmVfYWxsb2NhdGVkKSByZXR1cm4gRkFMU0U7 CisrICAgIGFsbG9jX3NpemUgPSBDYWxjQWxsb2NhdGlvbihpdGVtLT51c2VkX3NpemUgKyBhZGRf c2l6ZSwgaXRlbS0+YWxsb2Nfc2l6ZSk7CisrICAgIHB0ciA9IHJlYWxsb2NfZm4oaXRlbS0+cGJ1 ZiwgYWxsb2Nfc2l6ZSk7CisrICAgIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKyAg ICBpdGVtLT5wYnVmID0gcHRyOworKyAgICBpdGVtLT5hbGxvY19zaXplID0gYWxsb2Nfc2l6ZTsK KysgIH0KKysKKysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKworKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKysKKytCSU5OX1BSSVZBVEUgaW50 IGdldF9zdG9yYWdlX3NpemUoaW50IHN0b3JhZ2VfdHlwZSkgeworKworKyAgc3dpdGNoIChzdG9y YWdlX3R5cGUpIHsKKysgIGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6CisrICAgIHJldHVybiAw OworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKKysgICAgcmV0dXJuIDE7CisrICBjYXNlIEJJ Tk5fU1RPUkFHRV9XT1JEOgorKyAgICByZXR1cm4gMjsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0RX T1JEOgorKyAgICByZXR1cm4gNDsKKysgIGNhc2UgQklOTl9TVE9SQUdFX1FXT1JEOgorKyAgICBy ZXR1cm4gODsKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiAwOworKyAgfQorKworK30KKysKKysj ZW5kaWYKKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSB1bnNpZ25l ZCBjaGFyICogQWR2YW5jZURhdGFQb3ModW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgY2hhciAq cGxpbWl0KSB7CisrICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisrICBpbnQgIHN0b3JhZ2VfdHlwZSwg RGF0YVNpemU7CisrCisrICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIDA7CisrCisrICBieXRlID0g KnA7IHArKzsKKysgIHN0b3JhZ2VfdHlwZSA9IGJ5dGUgJiBCSU5OX1NUT1JBR0VfTUFTSzsKKysg IGlmIChieXRlICYgQklOTl9TVE9SQUdFX0hBU19NT1JFKSBwKys7CisrCisrICBzd2l0Y2ggKHN0 b3JhZ2VfdHlwZSkgeworKyAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKKysgICAgLy9wICs9 IDA7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQllURToKKysgICAgcCArKzsK KysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgorKyAgICBwICs9IDI7Cisr ICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfRFdPUkQ6CisrICAgIHAgKz0gNDsKKysg ICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKKysgICAgcCArPSA4OworKyAg ICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0JMT0I6CisrICBjYXNlIEJJTk5fU1RPUkFH RV9TVFJJTkc6CisrICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gMDsKKysgICAgRGF0YVNpemUg PSAqKCh1bnNpZ25lZCBjaGFyKilwKTsKKysgICAgaWYgKERhdGFTaXplICYgMHg4MCkgeworKyAg ICAgIGlmIChwICsgc2l6ZW9mKGludCkgLSAxID4gcGxpbWl0KSByZXR1cm4gMDsKKysgICAgICBj b3B5X2JlMzIoKHUzMiopJkRhdGFTaXplLCAodTMyKilwKTsKKysgICAgICBEYXRhU2l6ZSAmPSAw eDdGRkZGRkZGOworKyAgICAgIHArPTQ7CisrICAgIH0gZWxzZSB7CisrICAgICAgcCsrOworKyAg ICB9CisrICAgIHAgKz0gRGF0YVNpemU7CisrICAgIGlmIChzdG9yYWdlX3R5cGUgPT0gQklOTl9T VE9SQUdFX1NUUklORykgeworKyAgICAgIHArKzsgIC8vIG51bGwgdGVybWluYXRvci4KKysgICAg fQorKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKKysgICAgaWYg KHAgPiBwbGltaXQpIHJldHVybiAwOworKyAgICBEYXRhU2l6ZSA9ICooKHVuc2lnbmVkIGNoYXIq KXApOworKyAgICBpZiAoRGF0YVNpemUgJiAweDgwKSB7CisrICAgICAgaWYgKHAgKyBzaXplb2Yo aW50KSAtIDEgPiBwbGltaXQpIHJldHVybiAwOworKyAgICAgIGNvcHlfYmUzMigodTMyKikmRGF0 YVNpemUsICh1MzIqKXApOworKyAgICAgIERhdGFTaXplICY9IDB4N0ZGRkZGRkY7CisrICAgIH0K KysgICAgRGF0YVNpemUtLTsgIC8vIHJlbW92ZSB0aGUgdHlwZSBieXRlIGFscmVhZHkgYWRkZWQg YmVmb3JlCisrICAgIHAgKz0gRGF0YVNpemU7CisrICAgIGJyZWFrOworKyAgZGVmYXVsdDoKKysg ICAgcmV0dXJuIDA7CisrICB9CisrCisrICByZXR1cm4gcDsKKysKKyt9CisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKysvKgorKworK1RoZSBpZCBjYW4gYmUgc3RvcmVkIHdpdGggMSB0byA1 IGJ5dGVzCisrCisrUyA9IHNpZ25hbCBiaXQKKytYID0gYml0IHBhcnQgb2YgaWQKKysKKysgIDBT WFggWFhYWAorKyAgMTAwUyBYWFhYICsgMSBieXRlCisrICAxMDFTIFhYWFggKyAyIGJ5dGVzCisr ICAxMTBTIFhYWFggKyAzIGJ5dGVzCisrICAxMTEwIDAwMDAgKyA0IGJ5dGVzCisrCisrKi8KKytC SU5OX1BSSVZBVEUgaW50IHJlYWRfbWFwX2lkKHVuc2lnbmVkIGNoYXIgKipwcCwgdW5zaWduZWQg Y2hhciAqcGxpbWl0KSB7CisrICB1bnNpZ25lZCBjaGFyICpwLCBjLCBzaWduLCB0eXBlOworKyAg aW50IGlkLCBleHRyYV9ieXRlczsKKysKKysgIHAgPSAqcHA7CisrICBpZiAocCA+IHBsaW1pdCkg cmV0dXJuIDA7CisrCisrICBjID0gKnArKzsKKysKKysgIGlmIChjICYgMHg4MCkgeworKyAgICBl eHRyYV9ieXRlcyA9ICgoYyAmIDB4NjApID4+IDUpICsgMTsKKysgICAgaWYgKHAgKyBleHRyYV9i eXRlcyA+IHBsaW1pdCApIHsKKysgICAgICAqcHAgPSBwICsgZXh0cmFfYnl0ZXM7CisrICAgICAg cmV0dXJuIDA7CisrICAgIH0KKysgIH0KKysKKysgIHR5cGUgPSBjICYgMHhFMDsKKysgIHNpZ24g PSBjICYgMHgxMDsKKysKKysgIGlmICgoYyAmIDB4ODApID09IDApIHsKKysgICAgc2lnbiA9IGMg JiAweDQwOworKyAgICBpZCA9IGMgJiAweDNGOworKyAgfSBlbHNlIGlmICh0eXBlID09IDB4ODAp IHsKKysgICAgaWQgPSBjICYgMHgwRjsKKysgICAgaWQgPSAoaWQgPDwgOCkgfCAqcCsrOworKyAg fSBlbHNlIGlmICh0eXBlID09IDB4QTApIHsKKysgICAgaWQgPSBjICYgMHgwRjsKKysgICAgaWQg PSAoaWQgPDwgOCkgfCAqcCsrOworKyAgICBpZCA9IChpZCA8PCA4KSB8ICpwKys7CisrICB9IGVs c2UgaWYgKHR5cGUgPT0gMHhDMCkgeworKyAgICBpZCA9IGMgJiAweDBGOworKyAgICBpZCA9IChp ZCA8PCA4KSB8ICpwKys7CisrICAgIGlkID0gKGlkIDw8IDgpIHwgKnArKzsKKysgICAgaWQgPSAo aWQgPDwgOCkgfCAqcCsrOworKyAgfSBlbHNlIGlmICh0eXBlID09IDB4RTApIHsKKysgICAgY29w eV9iZTMyKCh1MzIqKSZpZCwgKHUzMiopcCk7CisrICAgIHAgKz0gNDsKKysgIH0gZWxzZSB7Cisr ICAgICpwcCA9IHBsaW1pdCArIDI7CisrICAgIHJldHVybiAwOworKyAgfQorKworKyAgaWYgKHNp Z24pIGlkID0gLWlkOworKworKyAgKnBwID0gcDsKKysKKysgIHJldHVybiBpZDsKKyt9CisrCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgdW5zaWduZWQgY2hhciAqIFNl YXJjaEZvcklEKHVuc2lnbmVkIGNoYXIgKnAsIGludCBoZWFkZXJfc2l6ZSwgaW50IHNpemUsIGlu dCBudW1pdGVtcywgaW50IGlkKSB7CisrICB1bnNpZ25lZCBjaGFyICpwbGltaXQsICpiYXNlOwor KyAgaW50ICBpLCBpbnQzMjsKKysKKysgIGJhc2UgPSBwOworKyAgcGxpbWl0ID0gcCArIHNpemUg LSAxOworKyAgcCArPSBoZWFkZXJfc2l6ZTsKKysKKysgIC8vIHNlYXJjaCBmb3IgdGhlIElEIGlu IGFsbCB0aGUgYXJndW1lbnRzLgorKyAgZm9yIChpID0gMDsgaSA8IG51bWl0ZW1zOyBpKyspIHsK KysgICAgaW50MzIgPSByZWFkX21hcF9pZCgmcCwgcGxpbWl0KTsKKysgICAgaWYgKHAgPiBwbGlt aXQpIGJyZWFrOworKyAgICAvLyBDb21wYXJlIGlmIHRoZSBJRHMgYXJlIGVxdWFsLgorKyAgICBp ZiAoaW50MzIgPT0gaWQpIHJldHVybiBwOworKyAgICAvLyB4eHgKKysgICAgcCA9IEFkdmFuY2VE YXRhUG9zKHAsIHBsaW1pdCk7CisrICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2UpIGJyZWFrOwor KyAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrCisrQklOTl9QUklWQVRFIHVuc2lnbmVkIGNoYXIgKiBTZWFyY2hGb3JLZXkodW5zaWduZWQg Y2hhciAqcCwgaW50IGhlYWRlcl9zaXplLCBpbnQgc2l6ZSwgaW50IG51bWl0ZW1zLCBjb25zdCBj aGFyICprZXkpIHsKKysgIHVuc2lnbmVkIGNoYXIgbGVuLCAqcGxpbWl0LCAqYmFzZTsKKysgIGlu dCAgaSwga2V5bGVuOworKworKyAgYmFzZSA9IHA7CisrICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7 CisrICBwICs9IGhlYWRlcl9zaXplOworKworKyAga2V5bGVuID0gc3RybGVuKGtleSk7CisrCisr ICAvLyBzZWFyY2ggZm9yIHRoZSBrZXkgaW4gYWxsIHRoZSBhcmd1bWVudHMuCisrICBmb3IgKGkg PSAwOyBpIDwgbnVtaXRlbXM7IGkrKykgeworKyAgICBpZiAocCA+IHBsaW1pdCkgYnJlYWs7Cisr ICAgIGxlbiA9ICooKHVuc2lnbmVkIGNoYXIgKilwKTsKKysgICAgcCsrOworKyAgICBpZiAocCAr IGxlbiA+IHBsaW1pdCkgYnJlYWs7CisrICAgIC8vIENvbXBhcmUgaWYgdGhlIHN0cmluZ3MgYXJl IGVxdWFsLgorKyAgICBpZiAobGVuID4gMCkgeworKyAgICAgIGlmIChzdHJuaWNtcCgoY2hhciop cCwga2V5LCBsZW4pID09IDApIHsgICAvLyBub3RlIHRoYXQgdGhlcmUgaXMgbm8gbnVsbCB0ZXJt aW5hdG9yIGhlcmUKKysgICAgICAgIGlmIChrZXlsZW4gPT0gbGVuKSB7CisrICAgICAgICAgIHAg Kz0gbGVuOworKyAgICAgICAgICByZXR1cm4gcDsKKysgICAgICAgIH0KKysgICAgICB9CisrICAg ICAgcCArPSBsZW47CisrICAgIH0gZWxzZSBpZiAobGVuID09IGtleWxlbikgeyAgIC8vIGluIHRo ZSBjYXNlIG9mIGVtcHR5IHN0cmluZzogIiIKKysgICAgICByZXR1cm4gcDsKKysgICAgfQorKyAg ICAvLyB4eHgKKysgICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7CisrICAgIGlmIChw ID09IDAgfHwgcCA8IGJhc2UpIGJyZWFrOworKyAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrCisr fQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgQWRkVmFs dWUoYmlubiAqaXRlbSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpOworKworKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9saXN0X2FkZF9y YXcoYmlubiAqaXRlbSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpIHsKKysKKysg IGlmIChpdGVtID09IE5VTEwgfHwgaXRlbS0+dHlwZSAhPSBCSU5OX0xJU1QgfHwgaXRlbS0+d3Jp dGFibGUgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIC8vaWYgKENoZWNrQWxsb2NhdGlv bihpdGVtLCA0KSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOyAgLy8gNCBieXRlcyB1c2VkIGZvciBk YXRhX3N0b3JlIGFuZCBkYXRhX2Zvcm1hdC4KKysKKysgIGlmIChBZGRWYWx1ZShpdGVtLCB0eXBl LCBwdmFsdWUsIHNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpdGVtLT5jb3Vu dCsrOworKworKyAgcmV0dXJuIFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9vYmplY3Rfc2V0X3JhdyhiaW5uICppdGVtLCBj b25zdCBjaGFyICprZXksIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKSB7CisrICB1 bnNpZ25lZCBjaGFyICpwLCBsZW47CisrICBpbnQgaW50MzI7CisrCisrICBpZiAoaXRlbSA9PSBO VUxMIHx8IGl0ZW0tPnR5cGUgIT0gQklOTl9PQkpFQ1QgfHwgaXRlbS0+d3JpdGFibGUgPT0gRkFM U0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmIChrZXkgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOwor KyAgaW50MzIgPSBzdHJsZW4oa2V5KTsKKysgIGlmIChpbnQzMiA+IDI1NSkgcmV0dXJuIEZBTFNF OworKworKyAgLy8gaXMgdGhlIGtleSBhbHJlYWR5IGluIGl0PworKyAgcCA9IFNlYXJjaEZvcktl eShpdGVtLT5wYnVmLCBNQVhfQklOTl9IRUFERVIsIGl0ZW0tPnVzZWRfc2l6ZSwgaXRlbS0+Y291 bnQsIGtleSk7CisrICBpZiAocCkgcmV0dXJuIEZBTFNFOworKworKyAgLy8gc3RhcnQgYWRkaW5n IGl0CisrCisrICBpZiAoQ2hlY2tBbGxvY2F0aW9uKGl0ZW0sIDEgKyBpbnQzMikgPT0gRkFMU0Up IHJldHVybiBGQUxTRTsgIC8vIGJ5dGVzIHVzZWQgZm9yIHRoZSBrZXkgc2l6ZSBhbmQgdGhlIGtl eSBpdHNlbGYuCisrCisrICBwID0gKCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBidWYpICsgaXRl bS0+dXNlZF9zaXplOworKyAgbGVuID0gaW50MzI7CisrICAqcCA9IGxlbjsKKysgIHArKzsKKysg IG1lbWNweShwLCBrZXksIGludDMyKTsKKysgIGludDMyKys7ICAvLyBub3cgY29udGFpbnMgdGhl IHN0cmxlbiArIDEgYnl0ZSBmb3IgdGhlIGxlbgorKyAgaXRlbS0+dXNlZF9zaXplICs9IGludDMy OworKworKyAgaWYgKEFkZFZhbHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6ZSkgPT0gRkFMU0Up IHsKKysgICAgaXRlbS0+dXNlZF9zaXplIC09IGludDMyOworKyAgICByZXR1cm4gRkFMU0U7Cisr ICB9CisrCisrICBpdGVtLT5jb3VudCsrOworKworKyAgcmV0dXJuIFRSVUU7CisrCisrfQorKwor Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9tYXBfc2V0 X3JhdyhiaW5uICppdGVtLCBpbnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXpl KSB7CisrICB1bnNpZ25lZCBjaGFyICpiYXNlLCAqcCwgc2lnbjsKKysgIGludCBpZF9zaXplOwor KworKyAgaWYgKGl0ZW0gPT0gTlVMTCB8fCBpdGVtLT50eXBlICE9IEJJTk5fTUFQIHx8IGl0ZW0t PndyaXRhYmxlID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICAvLyBpcyB0aGUgSUQgYWxy ZWFkeSBpbiBpdD8KKysgIHAgPSBTZWFyY2hGb3JJRChpdGVtLT5wYnVmLCBNQVhfQklOTl9IRUFE RVIsIGl0ZW0tPnVzZWRfc2l6ZSwgaXRlbS0+Y291bnQsIGlkKTsKKysgIGlmIChwKSByZXR1cm4g RkFMU0U7CisrCisrICAvLyBzdGFydCBhZGRpbmcgaXQKKysKKysgIGlmIChDaGVja0FsbG9jYXRp b24oaXRlbSwgNSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsgIC8vIG1heCA1IGJ5dGVzIHVzZWQg Zm9yIHRoZSBpZC4KKysKKysgIHAgPSBiYXNlID0gKCh1bnNpZ25lZCBjaGFyICopIGl0ZW0tPnBi dWYpICsgaXRlbS0+dXNlZF9zaXplOworKworKyAgc2lnbiA9IChpZCA8IDApOworKyAgaWYgKHNp Z24pIGlkID0gLWlkOworKworKyAgaWYgKGlkIDw9IDB4M0YpIHsKKysgICAgKnArKyA9IChzaWdu IDw8IDYpIHwgaWQ7CisrICB9IGVsc2UgaWYgKGlkIDw9IDB4RkZGKSB7CisrICAgICpwKysgPSAw eDgwIHwgKHNpZ24gPDwgNCkgfCAoKGlkICYgMHhGMDApID4+IDgpOworKyAgICAqcCsrID0gaWQg JiAweEZGOworKyAgfSBlbHNlIGlmIChpZCA8PSAweEZGRkZGKSB7CisrICAgICpwKysgPSAweEEw IHwgKHNpZ24gPDwgNCkgfCAoKGlkICYgMHhGMDAwMCkgPj4gMTYpOworKyAgICAqcCsrID0gKGlk ICYgMHhGRjAwKSA+PiA4OworKyAgICAqcCsrID0gaWQgJiAweEZGOworKyAgfSBlbHNlIGlmIChp ZCA8PSAweEZGRkZGRkYpIHsKKysgICAgKnArKyA9IDB4QzAgfCAoc2lnbiA8PCA0KSB8ICgoaWQg JiAweEYwMDAwMDApID4+IDI0KTsKKysgICAgKnArKyA9IChpZCAmIDB4RkYwMDAwKSA+PiAxNjsK KysgICAgKnArKyA9IChpZCAmIDB4RkYwMCkgPj4gODsKKysgICAgKnArKyA9IGlkICYgMHhGRjsK KysgIH0gZWxzZSB7CisrICAgICpwKysgPSAweEUwOworKyAgICBpZiAoc2lnbikgaWQgPSAtaWQ7 CisrICAgIGNvcHlfYmUzMigodTMyKilwLCAodTMyKikmaWQpOworKyAgICBwICs9IDQ7CisrICB9 CisrCisrICBpZF9zaXplID0gKHAgLSBiYXNlKTsKKysgIGl0ZW0tPnVzZWRfc2l6ZSArPSBpZF9z aXplOworKworKyAgaWYgKEFkZFZhbHVlKGl0ZW0sIHR5cGUsIHB2YWx1ZSwgc2l6ZSkgPT0gRkFM U0UpIHsKKysgICAgaXRlbS0+dXNlZF9zaXplIC09IGlkX3NpemU7CisrICAgIHJldHVybiBGQUxT RTsKKysgIH0KKysKKysgIGl0ZW0tPmNvdW50Kys7CisrCisrICByZXR1cm4gVFJVRTsKKysKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgdm9pZCAqIGNvbXBy ZXNzX2ludChpbnQgKnBzdG9yYWdlX3R5cGUsIGludCAqcHR5cGUsIHZvaWQgKnBzb3VyY2UpIHsK KysgIGludCBzdG9yYWdlX3R5cGUsIHN0b3JhZ2VfdHlwZTIsIHR5cGUsIHR5cGUyPTA7CisrICBp bnQ2NCAgdmludCA9IDA7CisrICB1aW50NjQgdnVpbnQ7CisrICBjaGFyICpwdmFsdWU7CisrI2lm IEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorKyAgaW50IHNpemUxLCBzaXplMjsKKysjZW5kaWYK KysKKysgIHN0b3JhZ2VfdHlwZSA9ICpwc3RvcmFnZV90eXBlOworKyAgaWYgKHN0b3JhZ2VfdHlw ZSA9PSBCSU5OX1NUT1JBR0VfQllURSkgcmV0dXJuIHBzb3VyY2U7CisrCisrICB0eXBlID0gKnB0 eXBlOworKworKyAgc3dpdGNoICh0eXBlKSB7CisrICBjYXNlIEJJTk5fSU5UNjQ6CisrICAgIHZp bnQgPSAqKGludDY0Kilwc291cmNlOworKyAgICBnb3RvIGxvY19zaWduZWQ7CisrICBjYXNlIEJJ Tk5fSU5UMzI6CisrICAgIHZpbnQgPSAqKGludCopcHNvdXJjZTsKKysgICAgZ290byBsb2Nfc2ln bmVkOworKyAgY2FzZSBCSU5OX0lOVDE2OgorKyAgICB2aW50ID0gKihzaG9ydCopcHNvdXJjZTsK KysgICAgZ290byBsb2Nfc2lnbmVkOworKyAgY2FzZSBCSU5OX1VJTlQ2NDoKKysgICAgdnVpbnQg PSAqKHVpbnQ2NCopcHNvdXJjZTsKKysgICAgZ290byBsb2NfcG9zaXRpdmU7CisrICBjYXNlIEJJ Tk5fVUlOVDMyOgorKyAgICB2dWludCA9ICoodW5zaWduZWQgaW50Kilwc291cmNlOworKyAgICBn b3RvIGxvY19wb3NpdGl2ZTsKKysgIGNhc2UgQklOTl9VSU5UMTY6CisrICAgIHZ1aW50ID0gKih1 bnNpZ25lZCBzaG9ydCopcHNvdXJjZTsKKysgICAgZ290byBsb2NfcG9zaXRpdmU7CisrICB9Cisr CisrbG9jX3NpZ25lZDoKKysKKysgIGlmICh2aW50ID49IDApIHsKKysgICAgdnVpbnQgPSB2aW50 OworKyAgICBnb3RvIGxvY19wb3NpdGl2ZTsKKysgIH0KKysKKysvL2xvY19uZWdhdGl2ZToKKysK KysgIGlmICh2aW50ID49IElOVDhfTUlOKSB7CisrICAgIHR5cGUyID0gQklOTl9JTlQ4OworKyAg fSBlbHNlCisrICBpZiAodmludCA+PSBJTlQxNl9NSU4pIHsKKysgICAgdHlwZTIgPSBCSU5OX0lO VDE2OworKyAgfSBlbHNlCisrICBpZiAodmludCA+PSBJTlQzMl9NSU4pIHsKKysgICAgdHlwZTIg PSBCSU5OX0lOVDMyOworKyAgfQorKyAgZ290byBsb2NfZXhpdDsKKysKKytsb2NfcG9zaXRpdmU6 CisrCisrICBpZiAodnVpbnQgPD0gVUlOVDhfTUFYKSB7CisrICAgIHR5cGUyID0gQklOTl9VSU5U ODsKKysgIH0gZWxzZQorKyAgaWYgKHZ1aW50IDw9IFVJTlQxNl9NQVgpIHsKKysgICAgdHlwZTIg PSBCSU5OX1VJTlQxNjsKKysgIH0gZWxzZQorKyAgaWYgKHZ1aW50IDw9IFVJTlQzMl9NQVgpIHsK KysgICAgdHlwZTIgPSBCSU5OX1VJTlQzMjsKKysgIH0KKysKKytsb2NfZXhpdDoKKysKKysgIHB2 YWx1ZSA9IChjaGFyICopIHBzb3VyY2U7CisrCisrICBpZiAodHlwZTIgJiYgdHlwZTIgIT0gdHlw ZSkgeworKyAgICAqcHR5cGUgPSB0eXBlMjsKKysgICAgc3RvcmFnZV90eXBlMiA9IGJpbm5fZ2V0 X3dyaXRlX3N0b3JhZ2UodHlwZTIpOworKyAgICAqcHN0b3JhZ2VfdHlwZSA9IHN0b3JhZ2VfdHlw ZTI7CisrI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorKyAgICBzaXplMSA9IGdldF9zdG9y YWdlX3NpemUoc3RvcmFnZV90eXBlKTsKKysgICAgc2l6ZTIgPSBnZXRfc3RvcmFnZV9zaXplKHN0 b3JhZ2VfdHlwZTIpOworKyAgICBwdmFsdWUgKz0gKHNpemUxIC0gc2l6ZTIpOworKyNlbmRpZgor KyAgfQorKworKyAgcmV0dXJuIHB2YWx1ZTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysKKytCSU5OX1BSSVZBVEUgaW50IHR5cGVfZmFtaWx5KGludCB0eXBlKTsKKysKKytCSU5O X1BSSVZBVEUgQk9PTCBBZGRWYWx1ZShiaW5uICppdGVtLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVl LCBpbnQgc2l6ZSkgeworKyAgaW50IGludDMyLCBBcmdTaXplLCBzdG9yYWdlX3R5cGUsIGV4dHJh X3R5cGU7CisrICB1bnNpZ25lZCBjaGFyICpwOworKworKyAgYmlubl9nZXRfdHlwZV9pbmZvKHR5 cGUsICZzdG9yYWdlX3R5cGUsICZleHRyYV90eXBlKTsKKysKKysgIGlmIChwdmFsdWUgPT0gTlVM TCkgeworKyAgICBzd2l0Y2ggKHN0b3JhZ2VfdHlwZSkgeworKyAgICAgIGNhc2UgQklOTl9TVE9S QUdFX05PQllURVM6CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEJJTk5fU1RPUkFHRV9C TE9COgorKyAgICAgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKKysgICAgICAgIGlmIChzaXpl ID09IDApIGJyZWFrOyAvLyB0aGUgMiBhYm92ZSBhcmUgYWxsb3dlZCB0byBoYXZlIDAgbGVuZ3Ro CisrCS8qIGZhbGwgdGhyb3VnaCAqLworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICByZXR1cm4g RkFMU0U7CisrICAgIH0KKysgIH0KKysKKysgIGlmICh0eXBlX2ZhbWlseSh0eXBlKSA9PSBCSU5O X0ZBTUlMWV9JTlQgJiYgaXRlbS0+ZGlzYWJsZV9pbnRfY29tcHJlc3Npb24gPT0gRkFMU0UpCisr ICAgIHB2YWx1ZSA9IGNvbXByZXNzX2ludCgmc3RvcmFnZV90eXBlLCAmdHlwZSwgcHZhbHVlKTsK KysKKysgIHN3aXRjaCAoc3RvcmFnZV90eXBlKSB7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX05P QllURVM6CisrICAgICAgc2l6ZSA9IDA7CisrICAgICAgQXJnU2l6ZSA9IHNpemU7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6CisrICAgICAgc2l6ZSA9IDE7Cisr ICAgICAgQXJnU2l6ZSA9IHNpemU7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9S QUdFX1dPUkQ6CisrICAgICAgc2l6ZSA9IDI7CisrICAgICAgQXJnU2l6ZSA9IHNpemU7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgorKyAgICAgIHNpemUgPSA0 OworKyAgICAgIEFyZ1NpemUgPSBzaXplOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJJTk5f U1RPUkFHRV9RV09SRDoKKysgICAgICBzaXplID0gODsKKysgICAgICBBcmdTaXplID0gc2l6ZTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKKysgICAgICBpZiAo c2l6ZSA8IDApIHJldHVybiBGQUxTRTsKKysgICAgICAvL2lmIChzaXplID09IDApIC4uLgorKyAg ICAgIEFyZ1NpemUgPSBzaXplICsgNDsgLy8gYXQgbGVhc3QgdGhpcyBzaXplCisrICAgICAgYnJl YWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKKysgICAgICBpZiAoc2l6ZSA8IDAp IHJldHVybiBGQUxTRTsKKysgICAgICBpZiAoc2l6ZSA9PSAwKSBzaXplID0gc3RybGVuMiggKGNo YXIgKikgcHZhbHVlKTsKKysgICAgICBBcmdTaXplID0gc2l6ZSArIDU7IC8vIGF0IGxlYXN0IHRo aXMgc2l6ZQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9DT05UQUlORVI6 CisrICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuIEZBTFNFOworKyAgICAgIEFyZ1NpemUgPSBz aXplOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBGQUxTRTsK KysgIH0KKysKKysgIEFyZ1NpemUgKz0gMjsgIC8vIGF0IGxlYXN0IDIgYnl0ZXMgdXNlZCBmb3Ig ZGF0YV90eXBlLgorKyAgaWYgKENoZWNrQWxsb2NhdGlvbihpdGVtLCBBcmdTaXplKSA9PSBGQUxT RSkgcmV0dXJuIEZBTFNFOworKworKyAgLy8gR2V0cyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBw bGFjZSBpbiBidWZmZXIKKysgIHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBp dGVtLT51c2VkX3NpemU7CisrCisrICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgYSBjb250YWluZXIs IHN0b3JlIHRoZSBkYXRhIHR5cGUKKysgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklOTl9TVE9SQUdF X0NPTlRBSU5FUikgeworKyAgICBpZiAodHlwZSA+IDI1NSkgeworKyAgICAgIHUxNiB0eXBlMTYg PSB0eXBlOworKyAgICAgIGNvcHlfYmUxNigodTE2KilwLCAodTE2KikmdHlwZTE2KTsKKysgICAg ICBwICs9IDI7CisrICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDI7CisrICAgIH0gZWxzZSB7Cisr ICAgICAgKnAgPSB0eXBlOworKyAgICAgIHArKzsKKysgICAgICBpdGVtLT51c2VkX3NpemUrKzsK KysgICAgfQorKyAgfQorKworKyAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKKysgICAgY2FzZSBC SU5OX1NUT1JBR0VfTk9CWVRFUzoKKysgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9CWVRFOgorKyAgICAgICooKGNoYXIgKikgcCkg PSAqKChjaGFyICopIHB2YWx1ZSk7CisrICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDE7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6CisrICAgICAgY29weV9iZTE2 KCh1MTYqKXAsICh1MTYqKXB2YWx1ZSk7CisrICAgICAgaXRlbS0+dXNlZF9zaXplICs9IDI7Cisr ICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX0RXT1JEOgorKyAgICAgIGNvcHlf YmUzMigodTMyKilwLCAodTMyKilwdmFsdWUpOworKyAgICAgIGl0ZW0tPnVzZWRfc2l6ZSArPSA0 OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKKysgICAgICBj b3B5X2JlNjQoKHU2NCopcCwgKHU2NCopcHZhbHVlKTsKKysgICAgICBpdGVtLT51c2VkX3NpemUg Kz0gODsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoKKysgICAg Y2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgorKyAgICAgIGlmIChzaXplID4gMTI3KSB7CisrICAg ICAgICBpbnQzMiA9IHNpemUgfCAweDgwMDAwMDAwOworKyAgICAgICAgY29weV9iZTMyKCh1MzIq KXAsICh1MzIqKSZpbnQzMik7CisrICAgICAgICBwICs9IDQ7CisrICAgICAgICBpdGVtLT51c2Vk X3NpemUgKz0gNDsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgKigodW5zaWduZWQgY2hhciAq KSBwKSA9IHNpemU7CisrICAgICAgICBwKys7CisrICAgICAgICBpdGVtLT51c2VkX3NpemUrKzsK KysgICAgICB9CisrICAgICAgbWVtY3B5KHAsIHB2YWx1ZSwgc2l6ZSk7CisrICAgICAgaWYgKHN0 b3JhZ2VfdHlwZSA9PSBCSU5OX1NUT1JBR0VfU1RSSU5HKSB7CisrICAgICAgICBwICs9IHNpemU7 CisrICAgICAgICAqKChjaGFyICopIHApID0gKGNoYXIpIDA7CisrICAgICAgICBzaXplKys7ICAv LyBudWxsIHRlcm1pbmF0b3IKKysgICAgICB9CisrICAgICAgaXRlbS0+dXNlZF9zaXplICs9IHNp emU7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9TVE9SQUdFX0NPTlRBSU5FUjoKKysg ICAgICBtZW1jcHkocCwgcHZhbHVlLCBzaXplKTsKKysgICAgICBpdGVtLT51c2VkX3NpemUgKz0g c2l6ZTsKKysgICAgICBicmVhazsKKysgIH0KKysKKysgIGl0ZW0tPmRpcnR5ID0gVFJVRTsKKysK KysgIHJldHVybiBUUlVFOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5f UFJJVkFURSBCT09MIGJpbm5fc2F2ZV9oZWFkZXIoYmlubiAqaXRlbSkgeworKyAgdW5zaWduZWQg Y2hhciBieXRlLCAqcDsKKysgIGludCBpbnQzMiwgc2l6ZTsKKysKKysgIGlmIChpdGVtID09IE5V TEwpIHJldHVybiBGQUxTRTsKKysKKysjaWZuZGVmIEJJTk5fRElTQUJMRV9TTUFMTF9IRUFERVIK KysKKysgIHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgaXRlbS0+cGJ1ZikgKyBNQVhfQklOTl9IRUFE RVI7CisrICBzaXplID0gaXRlbS0+dXNlZF9zaXplIC0gTUFYX0JJTk5fSEVBREVSICsgMzsgIC8v IGF0IGxlYXN0IDMgYnl0ZXMgZm9yIHRoZSBoZWFkZXIKKysKKysgIC8vIHdyaXRlIHRoZSBjb3Vu dAorKyAgaWYgKGl0ZW0tPmNvdW50ID4gMTI3KSB7CisrICAgIHAgLT0gNDsKKysgICAgc2l6ZSAr PSAzOworKyAgICBpbnQzMiA9IGl0ZW0tPmNvdW50IHwgMHg4MDAwMDAwMDsKKysgICAgY29weV9i ZTMyKCh1MzIqKXAsICh1MzIqKSZpbnQzMik7CisrICB9IGVsc2UgeworKyAgICBwLS07CisrICAg ICpwID0gKHVuc2lnbmVkIGNoYXIpIGl0ZW0tPmNvdW50OworKyAgfQorKworKyAgLy8gd3JpdGUg dGhlIHNpemUKKysgIGlmIChzaXplID4gMTI3KSB7CisrICAgIHAgLT0gNDsKKysgICAgc2l6ZSAr PSAzOworKyAgICBpbnQzMiA9IHNpemUgfCAweDgwMDAwMDAwOworKyAgICBjb3B5X2JlMzIoKHUz MiopcCwgKHUzMiopJmludDMyKTsKKysgIH0gZWxzZSB7CisrICAgIHAtLTsKKysgICAgKnAgPSAo dW5zaWduZWQgY2hhcikgc2l6ZTsKKysgIH0KKysKKysgIC8vIHdyaXRlIHRoZSB0eXBlLgorKyAg cC0tOworKyAgKnAgPSAodW5zaWduZWQgY2hhcikgaXRlbS0+dHlwZTsKKysKKysgIC8vIHNldCB0 aGUgdmFsdWVzCisrICBpdGVtLT5wdHIgPSBwOworKyAgaXRlbS0+c2l6ZSA9IHNpemU7CisrCisr ICBVTlVTRUQoYnl0ZSk7CisrCisrI2Vsc2UKKysKKysgIHAgPSAodW5zaWduZWQgY2hhciAqKSBp dGVtLT5wYnVmOworKworKyAgLy8gd3JpdGUgdGhlIHR5cGUuCisrICBieXRlID0gaXRlbS0+dHlw ZTsKKysgICpwID0gYnl0ZTsgcCsrOworKyAgLy8gd3JpdGUgdGhlIHNpemUKKysgIGludDMyID0g aXRlbS0+dXNlZF9zaXplIHwgMHg4MDAwMDAwMDsKKysgIGNvcHlfYmUzMigodTMyKilwLCAodTMy KikmaW50MzIpOworKyAgcCs9NDsKKysgIC8vIHdyaXRlIHRoZSBjb3VudAorKyAgaW50MzIgPSBp dGVtLT5jb3VudCB8IDB4ODAwMDAwMDA7CisrICBjb3B5X2JlMzIoKHUzMiopcCwgKHUzMiopJmlu dDMyKTsKKysKKysgIGl0ZW0tPnB0ciA9IGl0ZW0tPnBidWY7CisrICBpdGVtLT5zaXplID0gaXRl bS0+dXNlZF9zaXplOworKworKyNlbmRpZgorKworKyAgaXRlbS0+ZGlydHkgPSBGQUxTRTsKKysK KysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3Zv aWQgQVBJRU5UUlkgYmlubl9mcmVlKGJpbm4gKml0ZW0pIHsKKysKKysgIGlmIChpdGVtID09IE5V TEwpIHJldHVybjsKKysKKysgIGlmIChpdGVtLT53cml0YWJsZSAmJiBpdGVtLT5wcmVfYWxsb2Nh dGVkID09IEZBTFNFKSB7CisrICAgIGZyZWVfZm4oaXRlbS0+cGJ1Zik7CisrICB9CisrCisrICBp ZiAoaXRlbS0+ZnJlZWZuKSBpdGVtLT5mcmVlZm4oaXRlbS0+cHRyKTsKKysKKysgIGlmIChpdGVt LT5hbGxvY2F0ZWQpIHsKKysgICAgZnJlZV9mbihpdGVtKTsKKysgIH0gZWxzZSB7CisrICAgIG1l bXNldChpdGVtLCAwLCBzaXplb2YoYmlubikpOworKyAgICBpdGVtLT5oZWFkZXIgPSBCSU5OX01B R0lDOworKyAgfQorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8vIGZyZWUgdGhl IGJpbm4gc3RydWN0dXJlIGJ1dCBrZWVwcyB0aGUgYmlubiBidWZmZXIgYWxsb2NhdGVkLCByZXR1 cm5pbmcgYSBwb2ludGVyIHRvIGl0LiB1c2UgdGhlIGZyZWUgZnVuY3Rpb24gdG8gcmVsZWFzZSB0 aGUgYnVmZmVyIGxhdGVyCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fcmVsZWFzZShiaW5uICppdGVt KSB7CisrICB2b2lkICpkYXRhOworKworKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJuIE5VTEw7 CisrCisrICBkYXRhID0gYmlubl9wdHIoaXRlbSk7CisrCisrICBpZiAoZGF0YSA+IGl0ZW0tPnBi dWYpIHsKKysgICAgbWVtbW92ZShpdGVtLT5wYnVmLCBkYXRhLCBpdGVtLT5zaXplKTsKKysgICAg ZGF0YSA9IGl0ZW0tPnBidWY7CisrICB9CisrCisrICBpZiAoaXRlbS0+YWxsb2NhdGVkKSB7Cisr ICAgIGZyZWVfZm4oaXRlbSk7CisrICB9IGVsc2UgeworKyAgICBtZW1zZXQoaXRlbSwgMCwgc2l6 ZW9mKGJpbm4pKTsKKysgICAgaXRlbS0+aGVhZGVyID0gQklOTl9NQUdJQzsKKysgIH0KKysKKysg IHJldHVybiBkYXRhOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5f UFJJVkFURSBCT09MIElzVmFsaWRCaW5uSGVhZGVyKGNvbnN0IHZvaWQgKnBidWYsIGludCAqcHR5 cGUsIGludCAqcGNvdW50LCBpbnQgKnBzaXplLCBpbnQgKnBoZWFkZXJzaXplKSB7CisrICB1bnNp Z25lZCBjaGFyIGJ5dGUsICpwLCAqcGxpbWl0PTA7CisrICBpbnQgaW50MzIsIHR5cGUsIHNpemUs IGNvdW50OworKworKyAgaWYgKHBidWYgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgcCA9 ICh1bnNpZ25lZCBjaGFyICopIHBidWY7CisrCisrICBpZiAocHNpemUgJiYgKnBzaXplID4gMCkg eworKyAgICBpZiAoKnBzaXplIDwgTUlOX0JJTk5fU0laRSkgcmV0dXJuIEZBTFNFOworKyAgICBw bGltaXQgPSBwICsgKnBzaXplIC0gMTsKKysgIH0KKysKKysgIC8vIGdldCB0aGUgdHlwZQorKyAg Ynl0ZSA9ICpwOyBwKys7CisrICBpZiAoKGJ5dGUgJiBCSU5OX1NUT1JBR0VfTUFTSykgIT0gQklO Tl9TVE9SQUdFX0NPTlRBSU5FUikgcmV0dXJuIEZBTFNFOworKyAgaWYgKGJ5dGUgJiBCSU5OX1NU T1JBR0VfSEFTX01PUkUpIHJldHVybiBGQUxTRTsKKysgIHR5cGUgPSBieXRlOworKworKyAgc3dp dGNoICh0eXBlKSB7CisrICAgIGNhc2UgQklOTl9MSVNUOgorKyAgICBjYXNlIEJJTk5fTUFQOgor KyAgICBjYXNlIEJJTk5fT0JKRUNUOgorKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAg ICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysKKysgIC8vIGdldCB0aGUgc2l6ZQorKyAgaWYgKHBs aW1pdCAmJiBwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICBpbnQzMiA9ICooKHVuc2lnbmVk IGNoYXIqKXApOworKyAgaWYgKGludDMyICYgMHg4MCkgeworKyAgICBpZiAocGxpbWl0ICYmIHAg KyBzaXplb2YoaW50KSAtIDEgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgICAgY29weV9iZTMy KCh1MzIqKSZpbnQzMiwgKHUzMiopcCk7CisrICAgIGludDMyICY9IDB4N0ZGRkZGRkY7CisrICAg IHArPTQ7CisrICB9IGVsc2UgeworKyAgICBwKys7CisrICB9CisrICBzaXplID0gaW50MzI7Cisr CisrICAvLyBnZXQgdGhlIGNvdW50CisrICBpZiAocGxpbWl0ICYmIHAgPiBwbGltaXQpIHJldHVy biBGQUxTRTsKKysgIGludDMyID0gKigodW5zaWduZWQgY2hhciopcCk7CisrICBpZiAoaW50MzIg JiAweDgwKSB7CisrICAgIGlmIChwbGltaXQgJiYgcCArIHNpemVvZihpbnQpIC0gMSA+IHBsaW1p dCkgcmV0dXJuIEZBTFNFOworKyAgICBjb3B5X2JlMzIoKHUzMiopJmludDMyLCAodTMyKilwKTsK KysgICAgaW50MzIgJj0gMHg3RkZGRkZGRjsKKysgICAgcCs9NDsKKysgIH0gZWxzZSB7CisrICAg IHArKzsKKysgIH0KKysgIGNvdW50ID0gaW50MzI7CisrCisrICBpZiAoc2l6ZSA8IE1JTl9CSU5O X1NJWkUgfHwgY291bnQgPCAwKSByZXR1cm4gRkFMU0U7CisrCisrICAvLyByZXR1cm4gdGhlIHZh bHVlcworKyAgaWYgKHB0eXBlKSAgKnB0eXBlICA9IHR5cGU7CisrICBpZiAocGNvdW50KSAqcGNv dW50ID0gY291bnQ7CisrICBpZiAocHNpemUpICAqcHNpemUgID0gc2l6ZTsKKysgIGlmIChwaGVh ZGVyc2l6ZSkgKnBoZWFkZXJzaXplID0gKGludCkgKHAgLSAodW5zaWduZWQgY2hhciopcGJ1Zik7 CisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5O X1BSSVZBVEUgaW50IGJpbm5fYnVmX3R5cGUoY29uc3Qgdm9pZCAqcGJ1ZikgeworKyAgaW50ICB0 eXBlOworKworKyAgaWYgKCFJc1ZhbGlkQmlubkhlYWRlcihwYnVmLCAmdHlwZSwgTlVMTCwgTlVM TCwgTlVMTCkpIHJldHVybiBJTlZBTElEX0JJTk47CisrCisrICByZXR1cm4gdHlwZTsKKysKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgaW50IGJpbm5fYnVm X2NvdW50KGNvbnN0IHZvaWQgKnBidWYpIHsKKysgIGludCAgbml0ZW1zOworKworKyAgaWYgKCFJ c1ZhbGlkQmlubkhlYWRlcihwYnVmLCBOVUxMLCAmbml0ZW1zLCBOVUxMLCBOVUxMKSkgcmV0dXJu IDA7CisrCisrICByZXR1cm4gbml0ZW1zOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKworK0JJTk5fUFJJVkFURSBpbnQgYmlubl9idWZfc2l6ZShjb25zdCB2b2lkICpwYnVmKSB7 CisrICBpbnQgIHNpemU9MDsKKysKKysgIGlmICghSXNWYWxpZEJpbm5IZWFkZXIocGJ1ZiwgTlVM TCwgTlVMTCwgJnNpemUsIE5VTEwpKSByZXR1cm4gMDsKKysKKysgIHJldHVybiBzaXplOworKwor K30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX3B0 cihjb25zdCB2b2lkICpwdHIpIHsKKysgIGJpbm4gKml0ZW07CisrCisrICBzd2l0Y2ggKGJpbm5f Z2V0X3B0cl90eXBlKHB0cikpIHsKKysgIGNhc2UgQklOTl9TVFJVQ1Q6CisrICAgIGl0ZW0gPSAo YmlubiopIHB0cjsKKysgICAgaWYgKGl0ZW0tPndyaXRhYmxlICYmIGl0ZW0tPmRpcnR5KSB7Cisr ICAgICAgYmlubl9zYXZlX2hlYWRlcihpdGVtKTsKKysgICAgfQorKyAgICByZXR1cm4gaXRlbS0+ cHRyOworKyAgY2FzZSBCSU5OX0JVRkZFUjoKKysgICAgcmV0dXJuICh2b2lkKilwdHI7CisrICBk ZWZhdWx0OgorKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKyt9CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytpbnQgQVBJRU5UUlkgYmlubl9zaXplKGNvbnN0IHZvaWQgKnB0cikgewor KyAgYmlubiAqaXRlbTsKKysKKysgIHN3aXRjaCAoYmlubl9nZXRfcHRyX3R5cGUocHRyKSkgewor KyAgY2FzZSBCSU5OX1NUUlVDVDoKKysgICAgaXRlbSA9IChiaW5uKikgcHRyOworKyAgICBpZiAo aXRlbS0+d3JpdGFibGUgJiYgaXRlbS0+ZGlydHkpIHsKKysgICAgICBiaW5uX3NhdmVfaGVhZGVy KGl0ZW0pOworKyAgICB9CisrICAgIHJldHVybiBpdGVtLT5zaXplOworKyAgY2FzZSBCSU5OX0JV RkZFUjoKKysgICAgcmV0dXJuIGJpbm5fYnVmX3NpemUocHRyKTsKKysgIGRlZmF1bHQ6CisrICAg IHJldHVybiAwOworKyAgfQorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK2lu dCBBUElFTlRSWSBiaW5uX3R5cGUoY29uc3Qgdm9pZCAqcHRyKSB7CisrICBiaW5uICppdGVtOwor KworKyAgc3dpdGNoIChiaW5uX2dldF9wdHJfdHlwZShwdHIpKSB7CisrICBjYXNlIEJJTk5fU1RS VUNUOgorKyAgICBpdGVtID0gKGJpbm4qKSBwdHI7CisrICAgIHJldHVybiBpdGVtLT50eXBlOwor KyAgY2FzZSBCSU5OX0JVRkZFUjoKKysgICAgcmV0dXJuIGJpbm5fYnVmX3R5cGUocHRyKTsKKysg IGRlZmF1bHQ6CisrICAgIHJldHVybiAtMTsKKysgIH0KKysKKyt9CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytpbnQgQVBJRU5UUlkgYmlubl9jb3VudChjb25zdCB2b2lkICpwdHIpIHsK KysgIGJpbm4gKml0ZW07CisrCisrICBzd2l0Y2ggKGJpbm5fZ2V0X3B0cl90eXBlKHB0cikpIHsK KysgIGNhc2UgQklOTl9TVFJVQ1Q6CisrICAgIGl0ZW0gPSAoYmlubiopIHB0cjsKKysgICAgcmV0 dXJuIGl0ZW0tPmNvdW50OworKyAgY2FzZSBCSU5OX0JVRkZFUjoKKysgICAgcmV0dXJuIGJpbm5f YnVmX2NvdW50KHB0cik7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gLTE7CisrICB9CisrCisr fQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrLy8gdGhlIGNvbnRhaW5lciBjYW4gYmUg c21hbGxlciB0aGFuIHRoZSBpbmZvcm1lZCBzaXplCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9p c192YWxpZF9leDIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50 ICpwc2l6ZSkgeworKyAgaW50ICBpLCB0eXBlLCBjb3VudCwgc2l6ZSwgaGVhZGVyX3NpemU7Cisr ICB1bnNpZ25lZCBjaGFyICpwLCAqcGxpbWl0LCAqYmFzZSwgbGVuOworKworKyAgaWYgKHB0ciA9 PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrCisrICAvLyBpcyB0aGVyZSBhbiBpbmZvcm1lZCBzaXpl PworKyAgaWYgKHBzaXplICYmICpwc2l6ZSA+IDApIHsKKysgICAgc2l6ZSA9ICpwc2l6ZTsKKysg IH0gZWxzZSB7CisrICAgIHNpemUgPSAwOworKyAgfQorKworKyAgaWYgKCFJc1ZhbGlkQmlubkhl YWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3NpemUpKSByZXR1cm4gRkFM U0U7CisrCisrICAvLyBpcyB0aGVyZSBhbiBpbmZvcm1lZCBzaXplPworKyAgaWYgKHBzaXplICYm ICpwc2l6ZSA+IDApIHsKKysgICAgLy8gaXMgaXQgYmlnZ2VyIHRoYW4gdGhlIGJ1ZmZlcj8KKysg ICAgaWYgKHNpemUgPiAqcHNpemUpIHJldHVybiBGQUxTRTsKKysgIH0KKysgIC8vIGlzIHRoZXJl IGFuIGluZm9ybWVkIGNvdW50PworKyAgaWYgKHBjb3VudCAmJiAqcGNvdW50ID4gMCkgeworKyAg ICAvLyBpcyBpdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluIHRoZSBidWZmZXI/CisrICAgIGlmIChj b3VudCAhPSAqcGNvdW50KSByZXR1cm4gRkFMU0U7CisrICB9CisrICAvLyBpcyB0aGVyZSBhbiBp bmZvcm1lZCB0eXBlPworKyAgaWYgKHB0eXBlICYmICpwdHlwZSAhPSAwKSB7CisrICAgIC8vIGlz IGl0IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gdGhlIGJ1ZmZlcj8KKysgICAgaWYgKHR5cGUgIT0g KnB0eXBlKSByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICBwID0gKHVuc2lnbmVkIGNoYXIgKilw dHI7CisrICBiYXNlID0gcDsKKysgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKKysKKysgIHAgKz0g aGVhZGVyX3NpemU7CisrCisrICAvLyBwcm9jZXNzIGVhY2ggKGtleSBhbmQpIHZhbHVlCisrICBm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworKyAgICBzd2l0Y2ggKHR5cGUpIHsKKysgICAg ICBjYXNlIEJJTk5fT0JKRUNUOgorKyAgICAgICAgaWYgKHAgPiBwbGltaXQpIGdvdG8gSW52YWxp ZDsKKysgICAgICAgIC8vIGdldCB0aGUga2V5IChzdHJpbmcpIHNpemUKKysgICAgICAgIGxlbiA9 ICpwOworKyAgICAgICAgcCsrOworKyAgICAgICAgLy9pZiAobGVuID09IDApIGdvdG8gSW52YWxp ZDsKKysgICAgICAgIC8vIGFkdmFuY2Ugb3ZlciB0aGUga2V5CisrICAgICAgICBwICs9IGxlbjsK KysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgQklOTl9NQVA6CisrICAgICAgICAvLyBhZHZh bmNlIG92ZXIgdGhlIGtleQorKyAgICAgICAgcmVhZF9tYXBfaWQoJnAsIHBsaW1pdCk7CisrICAg ICAgICBicmVhazsKKysgICAgICBjYXNlIEJJTk5fTElTVDoKKysgICAgICAgIC8vIG5vIGtleQor KyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIGdvdG8gSW52YWxpZDsK KysgICAgfQorKyAgICAvLyBjaGVjayB0aGUgdmFsdWUKKysgICAgaWYgKHAgPiBwbGltaXQpIGdv dG8gSW52YWxpZDsKKysgICAgaWYgKCgqcCAmIEJJTk5fU1RPUkFHRV9NQVNLKSA9PSBCSU5OX1NU T1JBR0VfQ09OVEFJTkVSKSB7CisrICAgICAgLy8gcmVjdXJzaXZlbHkgY2hlY2sgdGhlIGludGVy bmFsIGNvbnRhaW5lcgorKyAgICAgIGludCBzaXplMiA9IHBsaW1pdCAtIHAgKyAxOyAgLy8gbWF4 aW11bSBjb250YWluZXIgc2l6ZQorKyAgICAgIGlmIChiaW5uX2lzX3ZhbGlkX2V4MihwLCBOVUxM LCBOVUxMLCAmc2l6ZTIpID09IEZBTFNFKSBnb3RvIEludmFsaWQ7CisrICAgICAgcCArPSBzaXpl MjsKKysgICAgfSBlbHNlIHsKKysgICAgICAvLyBhZHZhbmNlIG92ZXIgdGhlIHZhbHVlCisrICAg ICAgcCA9IEFkdmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7CisrICAgICAgaWYgKHAgPT0gMCB8fCBw IDwgYmFzZSkgZ290byBJbnZhbGlkOworKyAgICB9CisrICB9CisrCisrICBpZiAocHR5cGUgICYm ICpwdHlwZT09MCkgKnB0eXBlID0gdHlwZTsKKysgIGlmIChwY291bnQgJiYgKnBjb3VudD09MCkg KnBjb3VudCA9IGNvdW50OworKyAgaWYgKHBzaXplKSAqcHNpemUgPSBzaXplOworKyAgcmV0dXJu IFRSVUU7CisrCisrSW52YWxpZDoKKysgIHJldHVybiBGQUxTRTsKKysKKyt9CisrCisrLy8gdGhl IGNvbnRhaW5lciBtdXN0IGhhdmUgdGhlIGluZm9ybWVkIHNpemUsIGlmIGluZm9ybWVkCisrQk9P TCBBUElFTlRSWSBiaW5uX2lzX3ZhbGlkX2V4KGNvbnN0IHZvaWQgKnB0ciwgaW50ICpwdHlwZSwg aW50ICpwY291bnQsIGludCAqcHNpemUpIHsKKysgIGludCBzaXplOworKworKyAgaWYgKHBzaXpl ICYmICpwc2l6ZSA+IDApIHsKKysgICAgc2l6ZSA9ICpwc2l6ZTsKKysgIH0gZWxzZSB7CisrICAg IHNpemUgPSAwOworKyAgfQorKworKyAgaWYgKGJpbm5faXNfdmFsaWRfZXgyKHB0ciwgcHR5cGUs IHBjb3VudCwgJnNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAocHNpemUp IHsKKysgICAgaWYgKCpwc2l6ZSA+IDApIHsKKysgICAgICBpZiAoc2l6ZSAhPSAqcHNpemUpIHJl dHVybiBGQUxTRTsKKysgICAgfSBlbHNlIGlmICgqcHNpemU9PTApIHsKKysgICAgICAqcHNpemUg PSBzaXplOworKyAgICB9CisrICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5faXNfdmFsaWQoY29uc3Qgdm9p ZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwgaW50ICpwc2l6ZSkgeworKworKyAgaWYg KHB0eXBlKSAgKnB0eXBlICA9IDA7CisrICBpZiAocGNvdW50KSAqcGNvdW50ID0gMDsKKysgIGlm IChwc2l6ZSkgICpwc2l6ZSAgPSAwOworKworKyAgcmV0dXJuIGJpbm5faXNfdmFsaWRfZXgocHRy LCBwdHlwZSwgcGNvdW50LCBwc2l6ZSk7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrLyoqKiBJTlRFUk5BTCBGVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5f UFJJVkFURSBCT09MIEdldFZhbHVlKHVuc2lnbmVkIGNoYXIgKnAsIHVuc2lnbmVkIGNoYXIgKnBs aW1pdCwgYmlubiAqdmFsdWUpIHsKKysgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKKysgIGludCAgIGRh dGFfdHlwZSwgc3RvcmFnZV90eXBlOyAgLy8sIGV4dHJhX3R5cGU7CisrICBpbnQgICBEYXRhU2l6 ZTsKKysgIHZvaWQgKnAyOworKworKyAgaWYgKHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsK KysgIG1lbXNldCh2YWx1ZSwgMCwgc2l6ZW9mKGJpbm4pKTsKKysgIHZhbHVlLT5oZWFkZXIgPSBC SU5OX01BR0lDOworKyAgLy92YWx1ZS0+YWxsb2NhdGVkID0gRkFMU0U7ICAtLSAgYWxyZWFkeSB6 ZXJvZWQKKysgIC8vdmFsdWUtPndyaXRhYmxlID0gRkFMU0U7CisrCisrICAvLyBzYXZlcyBmb3Ig dXNlIHdpdGggQklOTl9TVE9SQUdFX0NPTlRBSU5FUgorKyAgcDIgPSBwOworKworKyAgLy8gcmVh ZCB0aGUgZGF0YSB0eXBlCisrICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgYnl0 ZSA9ICpwOyBwKys7CisrICBzdG9yYWdlX3R5cGUgPSBieXRlICYgQklOTl9TVE9SQUdFX01BU0s7 CisrICBpZiAoYnl0ZSAmIEJJTk5fU1RPUkFHRV9IQVNfTU9SRSkgeworKyAgICBkYXRhX3R5cGUg PSBieXRlIDw8IDg7CisrICAgIGlmIChwID4gcGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgIGJ5 dGUgPSAqcDsgcCsrOworKyAgICBkYXRhX3R5cGUgfD0gYnl0ZTsKKysgICAgLy9leHRyYV90eXBl ID0gZGF0YV90eXBlICYgQklOTl9UWVBFX01BU0sxNjsKKysgIH0gZWxzZSB7CisrICAgIGRhdGFf dHlwZSA9IGJ5dGU7CisrICAgIC8vZXh0cmFfdHlwZSA9IGJ5dGUgJiBCSU5OX1RZUEVfTUFTSzsK KysgIH0KKysKKysgIC8vdmFsdWUtPnN0b3JhZ2VfdHlwZSA9IHN0b3JhZ2VfdHlwZTsKKysgIHZh bHVlLT50eXBlID0gZGF0YV90eXBlOworKworKyAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKKysg IGNhc2UgQklOTl9TVE9SQUdFX05PQllURVM6CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NU T1JBR0VfQllURToKKysgICAgaWYgKHAgPiBwbGltaXQpIHJldHVybiBGQUxTRTsKKysgICAgdmFs dWUtPnZ1aW50OCA9ICooKHVuc2lnbmVkIGNoYXIgKikgcCk7CisrICAgIHZhbHVlLT5wdHIgPSBw OyAgIC8vdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dnVpbnQ4OworKyAgICBicmVhazsKKysgIGNhc2Ug QklOTl9TVE9SQUdFX1dPUkQ6CisrICAgIGlmIChwICsgMSA+IHBsaW1pdCkgcmV0dXJuIEZBTFNF OworKyAgICBjb3B5X2JlMTYoKHUxNiopJnZhbHVlLT52aW50MTYsICh1MTYqKXApOworKyAgICB2 YWx1ZS0+cHRyID0gJnZhbHVlLT52aW50MTY7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NU T1JBR0VfRFdPUkQ6CisrICAgIGlmIChwICsgMyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAg ICBjb3B5X2JlMzIoKHUzMiopJnZhbHVlLT52aW50MzIsICh1MzIqKXApOworKyAgICB2YWx1ZS0+ cHRyID0gJnZhbHVlLT52aW50MzI7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0Vf UVdPUkQ6CisrICAgIGlmIChwICsgNyA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICBjb3B5 X2JlNjQoKHU2NCopJnZhbHVlLT52aW50NjQsICh1NjQqKXApOworKyAgICB2YWx1ZS0+cHRyID0g JnZhbHVlLT52aW50NjQ7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQkxPQjoK KysgIGNhc2UgQklOTl9TVE9SQUdFX1NUUklORzoKKysgICAgaWYgKHAgPiBwbGltaXQpIHJldHVy biBGQUxTRTsKKysgICAgRGF0YVNpemUgPSAqKCh1bnNpZ25lZCBjaGFyKilwKTsKKysgICAgaWYg KERhdGFTaXplICYgMHg4MCkgeworKyAgICAgIGlmIChwICsgMyA+IHBsaW1pdCkgcmV0dXJuIEZB TFNFOworKyAgICAgIGNvcHlfYmUzMigodTMyKikmRGF0YVNpemUsICh1MzIqKXApOworKyAgICAg IERhdGFTaXplICY9IDB4N0ZGRkZGRkY7CisrICAgICAgcCs9NDsKKysgICAgfSBlbHNlIHsKKysg ICAgICBwKys7CisrICAgIH0KKysgICAgaWYgKHAgKyBEYXRhU2l6ZSAtIDEgPiBwbGltaXQpIHJl dHVybiBGQUxTRTsKKysgICAgdmFsdWUtPnNpemUgPSBEYXRhU2l6ZTsKKysgICAgdmFsdWUtPnB0 ciA9IHA7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUT1JBR0VfQ09OVEFJTkVSOgorKyAg ICB2YWx1ZS0+cHRyID0gcDI7ICAvLyA8LS0gaXQgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUg Y29udGFpbmVyLCBub3QgdGhlIGRhdGEKKysgICAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHAyLCBO VUxMLCAmdmFsdWUtPmNvdW50LCAmdmFsdWUtPnNpemUsIE5VTEwpID09IEZBTFNFKSByZXR1cm4g RkFMU0U7CisrICAgIGJyZWFrOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEZBTFNFOworKyAg fQorKworKyAgLy8gY29udmVydCB0aGUgcmV0dXJuZWQgdmFsdWUsIGlmIG5lZWRlZAorKworKyAg c3dpdGNoICh2YWx1ZS0+dHlwZSkgeworKyAgICBjYXNlIEJJTk5fVFJVRToKKysgICAgICB2YWx1 ZS0+dHlwZSA9IEJJTk5fQk9PTDsKKysgICAgICB2YWx1ZS0+dmJvb2wgPSBUUlVFOworKyAgICAg IHZhbHVlLT5wdHIgPSAmdmFsdWUtPnZib29sOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEJJ Tk5fRkFMU0U6CisrICAgICAgdmFsdWUtPnR5cGUgPSBCSU5OX0JPT0w7CisrICAgICAgdmFsdWUt PnZib29sID0gRkFMU0U7CisrICAgICAgdmFsdWUtPnB0ciA9ICZ2YWx1ZS0+dmJvb2w7CisrICAg ICAgYnJlYWs7CisrI2lmZGVmIEJJTk5fRVhURU5ERUQKKysgICAgY2FzZSBCSU5OX1NJTkdMRV9T VFI6CisrICAgICAgdmFsdWUtPnR5cGUgPSBCSU5OX1NJTkdMRTsKKysgICAgICB2YWx1ZS0+dmZs b2F0ID0gKGZsb2F0KSBhdG9mKChjb25zdCBjaGFyKil2YWx1ZS0+cHRyKTsgIC8vIGNvbnZlcnRz IGZyb20gc3RyaW5nIHRvIGRvdWJsZSwgYW5kIHRoZW4gdG8gZmxvYXQKKysgICAgICB2YWx1ZS0+ cHRyID0gJnZhbHVlLT52ZmxvYXQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9ET1VC TEVfU1RSOgorKyAgICAgIHZhbHVlLT50eXBlID0gQklOTl9ET1VCTEU7CisrICAgICAgdmFsdWUt PnZkb3VibGUgPSBhdG9mKChjb25zdCBjaGFyKil2YWx1ZS0+cHRyKTsgIC8vIGNvbnZlcnRzIGZy b20gc3RyaW5nIHRvIGRvdWJsZQorKyAgICAgIHZhbHVlLT5wdHIgPSAmdmFsdWUtPnZkb3VibGU7 CisrICAgICAgYnJlYWs7CisrI2VuZGlmCisrICAgIC8qCisrICAgIGNhc2UgQklOTl9ERUNJTUFM OgorKyAgICBjYXNlIEJJTk5fQ1VSUkVOQ1lTVFI6CisrICAgIGNhc2UgQklOTl9EQVRFOgorKyAg ICBjYXNlIEJJTk5fREFURVRJTUU6CisrICAgIGNhc2UgQklOTl9USU1FOgorKyAgICAqLworKyAg fQorKworKyAgcmV0dXJuIFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorKworKy8vIG9uIGxpdHRsZS1lbmRp YW4gZGV2aWNlcyB3ZSBzdG9yZSB0aGUgdmFsdWUgc28gd2UgY2FuIHJldHVybiBhIHBvaW50ZXIg dG8gaW50ZWdlcnMuCisrLy8gaXQncyB2YWxpZCBvbmx5IGZvciBzaW5nbGUtdGhyZWFkZWQgYXBw cy4gbXVsdGktdGhyZWFkZWQgYXBwcyBtdXN0IHVzZSB0aGUgX2dldF8gZnVuY3Rpb25zIGluc3Rl YWQuCisrCisrYmlubiBsb2NhbF92YWx1ZTsKKysKKytCSU5OX1BSSVZBVEUgdm9pZCAqIHN0b3Jl X3ZhbHVlKGJpbm4gKnZhbHVlKSB7CisrCisrICBtZW1jcHkoJmxvY2FsX3ZhbHVlLCB2YWx1ZSwg c2l6ZW9mKGJpbm4pKTsKKysKKysgIHN3aXRjaCAoYmlubl9nZXRfcmVhZF9zdG9yYWdlKHZhbHVl LT50eXBlKSkgeworKyAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKKysgICAgLy8gcmV0dXJu IGEgdmFsaWQgcG9pbnRlcgorKyAgY2FzZSBCSU5OX1NUT1JBR0VfV09SRDoKKysgIGNhc2UgQklO Tl9TVE9SQUdFX0RXT1JEOgorKyAgY2FzZSBCSU5OX1NUT1JBR0VfUVdPUkQ6CisrICAgIHJldHVy biAmbG9jYWxfdmFsdWUudmludDMyOyAgLy8gcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgY29u dmVydGVkIHZhbHVlLCBmcm9tIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbgorKyAgfQorKwor KyAgcmV0dXJuIHZhbHVlLT5wdHI7ICAgLy8gcmV0dXJucyBmcm9tIHRoZSBvbiBzdGFjayB2YWx1 ZSB0byBiZSB0aHJlYWQtc2FmZSAoZm9yIGxpc3QsIG1hcCwgb2JqZWN0LCBzdHJpbmcgYW5kIGJs b2IpCisrCisrfQorKworKyNlbmRpZgorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBS RUFEIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkg Ymlubl9vYmplY3RfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQgKnB0ciwgY29uc3QgY2hhciAqa2V5LCBi aW5uICp2YWx1ZSkgeworKyAgaW50IHR5cGUsIGNvdW50LCBzaXplPTAsIGhlYWRlcl9zaXplOwor KyAgdW5zaWduZWQgY2hhciAqcCwgKnBsaW1pdDsKKysKKysgIHB0ciA9IGJpbm5fcHRyKHB0cik7 CisrICBpZiAocHRyID09IE5VTEwgfHwga2V5ID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkgcmV0 dXJuIEZBTFNFOworKworKyAgLy8gY2hlY2sgdGhlIGhlYWRlcgorKyAgaWYgKElzVmFsaWRCaW5u SGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFkZXJfc2l6ZSkgPT0gRkFMU0Up IHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlICE9IEJJTk5fT0JKRUNUKSByZXR1cm4gRkFM U0U7CisrICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIEZBTFNFOworKworKyAgcCA9ICh1bnNpZ25l ZCBjaGFyICopIHB0cjsKKysgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKKysKKysgIHAgPSBTZWFy Y2hGb3JLZXkocCwgaGVhZGVyX3NpemUsIHNpemUsIGNvdW50LCBrZXkpOworKyAgaWYgKHAgPT0g RkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZh bHVlKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZ IGJpbm5fbWFwX2dldF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGludCBpZCwgYmlubiAqdmFsdWUp IHsKKysgIGludCB0eXBlLCBjb3VudCwgc2l6ZT0wLCBoZWFkZXJfc2l6ZTsKKysgIHVuc2lnbmVk IGNoYXIgKnAsICpwbGltaXQ7CisrCisrICBwdHIgPSBiaW5uX3B0cihwdHIpOworKyAgaWYgKHB0 ciA9PSBOVUxMIHx8IHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIC8vIGNoZWNr IHRoZSBoZWFkZXIKKysgIGlmIChJc1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQs ICZzaXplLCAmaGVhZGVyX3NpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAo dHlwZSAhPSBCSU5OX01BUCkgcmV0dXJuIEZBTFNFOworKyAgaWYgKGNvdW50ID09IDApIHJldHVy biBGQUxTRTsKKysKKysgIHAgPSAodW5zaWduZWQgY2hhciAqKSBwdHI7CisrICBwbGltaXQgPSBw ICsgc2l6ZSAtIDE7CisrCisrICBwID0gU2VhcmNoRm9ySUQocCwgaGVhZGVyX3NpemUsIHNpemUs IGNvdW50LCBpZCk7CisrICBpZiAocCA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgcmV0 dXJuIEdldFZhbHVlKHAsIHBsaW1pdCwgdmFsdWUpOworKworK30KKysKKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2dldF92YWx1ZShjb25zdCB2b2lk ICpwdHIsIGludCBwb3MsIGJpbm4gKnZhbHVlKSB7CisrICBpbnQgIGksIHR5cGUsIGNvdW50LCBz aXplPTAsIGhlYWRlcl9zaXplOworKyAgdW5zaWduZWQgY2hhciAqcCwgKnBsaW1pdCwgKmJhc2U7 CisrCisrICBwdHIgPSBiaW5uX3B0cihwdHIpOworKyAgaWYgKHB0ciA9PSBOVUxMIHx8IHZhbHVl ID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIC8vIGNoZWNrIHRoZSBoZWFkZXIKKysgIGlm IChJc1ZhbGlkQmlubkhlYWRlcihwdHIsICZ0eXBlLCAmY291bnQsICZzaXplLCAmaGVhZGVyX3Np emUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAodHlwZSAhPSBCSU5OX0xJU1Qp IHJldHVybiBGQUxTRTsKKysgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gRkFMU0U7CisrICBpZiAo cG9zIDw9IDAgfHwgcG9zID4gY291bnQpIHJldHVybiBGQUxTRTsKKysgIHBvcy0tOyAgLy8gY29u dmVydCBmcm9tIGJhc2UgMSB0byBiYXNlIDAKKysKKysgIHAgPSAodW5zaWduZWQgY2hhciAqKSBw dHI7CisrICBiYXNlID0gcDsKKysgIHBsaW1pdCA9IHAgKyBzaXplIC0gMTsKKysgIHAgKz0gaGVh ZGVyX3NpemU7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgcG9zOyBpKyspIHsKKysgICAgcCA9IEFk dmFuY2VEYXRhUG9zKHAsIHBsaW1pdCk7CisrICAgIGlmIChwID09IDAgfHwgcCA8IGJhc2UpIHJl dHVybiBGQUxTRTsKKysgIH0KKysKKysgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZhbHVl KTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqIFJFQUQgUEFJUiBCWSBQ T1NJVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9yZWFk X3BhaXIoaW50IGV4cGVjdGVkX3R5cGUsIGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpw aWQsIGNoYXIgKnBrZXksIGJpbm4gKnZhbHVlKSB7CisrICBpbnQgIHR5cGUsIGNvdW50LCBzaXpl PTAsIGhlYWRlcl9zaXplOworKyAgaW50ICBpLCBpbnQzMiwgaWQgPSAwLCBjb3VudGVyPTA7Cisr ICB1bnNpZ25lZCBjaGFyICpwLCAqcGxpbWl0LCAqYmFzZSwgKmtleSA9IE5VTEwsIGxlbiA9IDA7 CisrCisrICBwdHIgPSBiaW5uX3B0cihwdHIpOworKworKyAgLy8gY2hlY2sgdGhlIGhlYWRlcgor KyAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUsICZoZWFk ZXJfc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlICE9IGV4cGVj dGVkX3R5cGUgfHwgY291bnQgPT0gMCB8fCBwb3MgPCAxIHx8IHBvcyA+IGNvdW50KSByZXR1cm4g RkFMU0U7CisrCisrICBwID0gKHVuc2lnbmVkIGNoYXIgKikgcHRyOworKyAgYmFzZSA9IHA7Cisr ICBwbGltaXQgPSBwICsgc2l6ZSAtIDE7CisrICBwICs9IGhlYWRlcl9zaXplOworKworKyAgZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKysgICAgc3dpdGNoICh0eXBlKSB7CisrICAgICAg Y2FzZSBCSU5OX01BUDoKKysgICAgICAgIGludDMyID0gcmVhZF9tYXBfaWQoJnAsIHBsaW1pdCk7 CisrICAgICAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICAgICAgaWQgPSBp bnQzMjsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgQklOTl9PQkpFQ1Q6CisrICAgICAg ICBsZW4gPSAqKCh1bnNpZ25lZCBjaGFyICopcCk7IHArKzsKKysgICAgICAgIGlmIChwID4gcGxp bWl0KSByZXR1cm4gRkFMU0U7CisrICAgICAgICBrZXkgPSBwOworKyAgICAgICAgcCArPSBsZW47 CisrICAgICAgICBpZiAocCA+IHBsaW1pdCkgcmV0dXJuIEZBTFNFOworKyAgICAgICAgYnJlYWs7 CisrICAgIH0KKysgICAgY291bnRlcisrOworKyAgICBpZiAoY291bnRlciA9PSBwb3MpIGdvdG8g Zm91bmQ7CisrICAgIC8vCisrICAgIHAgPSBBZHZhbmNlRGF0YVBvcyhwLCBwbGltaXQpOworKyAg ICBpZiAocCA9PSAwIHx8IHAgPCBiYXNlKSByZXR1cm4gRkFMU0U7CisrICB9CisrCisrICByZXR1 cm4gRkFMU0U7CisrCisrZm91bmQ6CisrCisrICBzd2l0Y2ggKHR5cGUpIHsKKysgICAgY2FzZSBC SU5OX01BUDoKKysgICAgICBpZiAocGlkKSAqcGlkID0gaWQ7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2UgQklOTl9PQkpFQ1Q6CisrICAgICAgaWYgKHBrZXkpIHsKKysgICAgICAgIG1lbWNweShw a2V5LCBrZXksIGxlbik7CisrICAgICAgICBwa2V5W2xlbl0gPSAwOworKyAgICAgIH0KKysgICAg ICBicmVhazsKKysgIH0KKysKKysgIHJldHVybiBHZXRWYWx1ZShwLCBwbGltaXQsIHZhbHVlKTsK KysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5f bWFwX2dldF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpwaWQsIGJpbm4gKnZh bHVlKSB7CisrCisrICByZXR1cm4gYmlubl9yZWFkX3BhaXIoQklOTl9NQVAsIHB0ciwgcG9zLCBw aWQsIE5VTEwsIHZhbHVlKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytC T09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBv cywgY2hhciAqcGtleSwgYmlubiAqdmFsdWUpIHsKKysKKysgIHJldHVybiBiaW5uX3JlYWRfcGFp cihCSU5OX09CSkVDVCwgcHRyLCBwb3MsIE5VTEwsIHBrZXksIHZhbHVlKTsKKysKKyt9CisrCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9tYXBfcGFpcihj b25zdCB2b2lkICptYXAsIGludCBwb3MsIGludCAqcGlkKSB7CisrICBiaW5uICp2YWx1ZTsKKysK KysgIHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlm IChiaW5uX3JlYWRfcGFpcihCSU5OX01BUCwgbWFwLCBwb3MsIHBpZCwgTlVMTCwgdmFsdWUpID09 IEZBTFNFKSB7CisrICAgIGZyZWVfZm4odmFsdWUpOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0K KysKKysgIHZhbHVlLT5hbGxvY2F0ZWQgPSBUUlVFOworKyAgcmV0dXJuIHZhbHVlOworKworK30K KysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVj dF9wYWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtleSkgeworKyAgYmlubiAq dmFsdWU7CisrCisrICB2YWx1ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7 CisrCisrICBpZiAoYmlubl9yZWFkX3BhaXIoQklOTl9PQkpFQ1QsIG9iaiwgcG9zLCBOVUxMLCBw a2V5LCB2YWx1ZSkgPT0gRkFMU0UpIHsKKysgICAgZnJlZV9mbih2YWx1ZSk7CisrICAgIHJldHVy biBOVUxMOworKyAgfQorKworKyAgdmFsdWUtPmFsbG9jYXRlZCA9IFRSVUU7CisrICByZXR1cm4g dmFsdWU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfcmVhZF9wYWlyKGNvbnN0IHZvaWQg KnB0ciwgaW50IHBvcywgaW50ICpwaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKKysgIGJp bm4gdmFsdWU7CisrCisrICBpZiAoYmlubl9tYXBfZ2V0X3BhaXIocHRyLCBwb3MsIHBpZCwgJnZh bHVlKSA9PSBGQUxTRSkgcmV0dXJuIE5VTEw7CisrICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVl LnR5cGU7CisrICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7CisrI2lmIEJZVEVfT1JE RVIgPT0gTElUVExFX0VORElBTgorKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7CisrI2Vs c2UKKysgIHJldHVybiB2YWx1ZS5wdHI7CisrI2VuZGlmCisrCisrfQorKworKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3JlYWRfcGFpcihjb25z dCB2b2lkICpwdHIsIGludCBwb3MsIGNoYXIgKnBrZXksIGludCAqcHR5cGUsIGludCAqcHNpemUp IHsKKysgIGJpbm4gdmFsdWU7CisrCisrICBpZiAoYmlubl9vYmplY3RfZ2V0X3BhaXIocHRyLCBw b3MsIHBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOworKyAgaWYgKHB0eXBlKSAq cHR5cGUgPSB2YWx1ZS50eXBlOworKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOwor KyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKysgIHJldHVybiBzdG9yZV92YWx1ZSgm dmFsdWUpOworKyNlbHNlCisrICByZXR1cm4gdmFsdWUucHRyOworKyNlbmRpZgorKworK30KKysK KysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworKy8qKiogU0VRVUVOVElBTCBSRUFEIEZVTkNUSU9OUyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5faXRlcl9pbml0KGJpbm5faXRlciAq aXRlciwgY29uc3Qgdm9pZCAqcHRyLCBpbnQgZXhwZWN0ZWRfdHlwZSkgeworKyAgaW50ICB0eXBl LCBjb3VudCwgc2l6ZT0wLCBoZWFkZXJfc2l6ZTsKKysKKysgIHB0ciA9IGJpbm5fcHRyKHB0cik7 CisrICBpZiAocHRyID09IE5VTEwgfHwgaXRlciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrICBt ZW1zZXQoaXRlciwgMCwgc2l6ZW9mKGJpbm5faXRlcikpOworKworKyAgLy8gY2hlY2sgdGhlIGhl YWRlcgorKyAgaWYgKElzVmFsaWRCaW5uSGVhZGVyKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUs ICZoZWFkZXJfc2l6ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlICE9 IGV4cGVjdGVkX3R5cGUpIHJldHVybiBGQUxTRTsKKysgIC8vaWYgKGNvdW50ID09IDApIHJldHVy biBGQUxTRTsgIC0tIHNob3VsZCBub3QgYmUgdXNlZAorKworKyAgaXRlci0+cGxpbWl0ID0gKHVu c2lnbmVkIGNoYXIgKilwdHIgKyBzaXplIC0gMTsKKysgIGl0ZXItPnBuZXh0ID0gKHVuc2lnbmVk IGNoYXIgKilwdHIgKyBoZWFkZXJfc2l6ZTsKKysgIGl0ZXItPmNvdW50ID0gY291bnQ7CisrICBp dGVyLT5jdXJyZW50ID0gMDsKKysgIGl0ZXItPnR5cGUgPSB0eXBlOworKworKyAgcmV0dXJuIFRS VUU7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5u X2xpc3RfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGJpbm4gKnZhbHVlKSB7CisrICB1bnNpZ25lZCBj aGFyICpwbm93OworKworKyAgaWYgKGl0ZXIgPT0gTlVMTCB8fCBpdGVyLT5wbmV4dCA9PSBOVUxM IHx8IGl0ZXItPnBuZXh0ID4gaXRlci0+cGxpbWl0IHx8IGl0ZXItPmN1cnJlbnQgPiBpdGVyLT5j b3VudCB8fCBpdGVyLT50eXBlICE9IEJJTk5fTElTVCkgcmV0dXJuIEZBTFNFOworKworKyAgaXRl ci0+Y3VycmVudCsrOworKyAgaWYgKGl0ZXItPmN1cnJlbnQgPiBpdGVyLT5jb3VudCkgcmV0dXJu IEZBTFNFOworKworKyAgcG5vdyA9IGl0ZXItPnBuZXh0OworKyAgaXRlci0+cG5leHQgPSBBZHZh bmNlRGF0YVBvcyhwbm93LCBpdGVyLT5wbGltaXQpOworKyAgaWYgKGl0ZXItPnBuZXh0ICE9IDAg JiYgaXRlci0+cG5leHQgPCBwbm93KSByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4gR2V0VmFs dWUocG5vdywgaXRlci0+cGxpbWl0LCB2YWx1ZSk7CisrCisrfQorKworKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgYmlubl9yZWFkX25leHRfcGFpcihpbnQgZXhw ZWN0ZWRfdHlwZSwgYmlubl9pdGVyICppdGVyLCBpbnQgKnBpZCwgY2hhciAqcGtleSwgYmlubiAq dmFsdWUpIHsKKysgIGludCAgaW50MzIsIGlkOworKyAgdW5zaWduZWQgY2hhciAqcCwgKmtleTsK KysgIHVuc2lnbmVkIHNob3J0IGxlbjsKKysKKysgIGlmIChpdGVyID09IE5VTEwgfHwgaXRlci0+ cG5leHQgPT0gTlVMTCB8fCBpdGVyLT5wbmV4dCA+IGl0ZXItPnBsaW1pdCB8fCBpdGVyLT5jdXJy ZW50ID4gaXRlci0+Y291bnQgfHwgaXRlci0+dHlwZSAhPSBleHBlY3RlZF90eXBlKSByZXR1cm4g RkFMU0U7CisrCisrICBpdGVyLT5jdXJyZW50Kys7CisrICBpZiAoaXRlci0+Y3VycmVudCA+IGl0 ZXItPmNvdW50KSByZXR1cm4gRkFMU0U7CisrCisrICBwID0gaXRlci0+cG5leHQ7CisrCisrICBz d2l0Y2ggKGV4cGVjdGVkX3R5cGUpIHsKKysgICAgY2FzZSBCSU5OX01BUDoKKysgICAgICBpbnQz MiA9IHJlYWRfbWFwX2lkKCZwLCBpdGVyLT5wbGltaXQpOworKyAgICAgIGlmIChwID4gaXRlci0+ cGxpbWl0KSByZXR1cm4gRkFMU0U7CisrICAgICAgaWQgPSBpbnQzMjsKKysgICAgICBpZiAocGlk KSAqcGlkID0gaWQ7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQklOTl9PQkpFQ1Q6CisrICAg ICAgbGVuID0gKigodW5zaWduZWQgY2hhciAqKXApOyBwKys7CisrICAgICAga2V5ID0gcDsKKysg ICAgICBwICs9IGxlbjsKKysgICAgICBpZiAocCA+IGl0ZXItPnBsaW1pdCkgcmV0dXJuIEZBTFNF OworKyAgICAgIGlmIChwa2V5KSB7CisrICAgICAgICBtZW1jcHkocGtleSwga2V5LCBsZW4pOwor KyAgICAgICAgcGtleVtsZW5dID0gMDsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICB9Cisr CisrICBpdGVyLT5wbmV4dCA9IEFkdmFuY2VEYXRhUG9zKHAsIGl0ZXItPnBsaW1pdCk7CisrICBp ZiAoaXRlci0+cG5leHQgIT0gMCAmJiBpdGVyLT5wbmV4dCA8IHApIHJldHVybiBGQUxTRTsKKysK KysgIHJldHVybiBHZXRWYWx1ZShwLCBpdGVyLT5wbGltaXQsIHZhbHVlKTsKKysKKyt9CisrCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbWFwX25leHQoYmlu bl9pdGVyICppdGVyLCBpbnQgKnBpZCwgYmlubiAqdmFsdWUpIHsKKysKKysgIHJldHVybiBiaW5u X3JlYWRfbmV4dF9wYWlyKEJJTk5fTUFQLCBpdGVyLCBwaWQsIE5VTEwsIHZhbHVlKTsKKysKKyt9 CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0 X25leHQoYmlubl9pdGVyICppdGVyLCBjaGFyICpwa2V5LCBiaW5uICp2YWx1ZSkgeworKworKyAg cmV0dXJuIGJpbm5fcmVhZF9uZXh0X3BhaXIoQklOTl9PQkpFQ1QsIGl0ZXIsIE5VTEwsIHBrZXks IHZhbHVlKTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3RfbmV4dF92YWx1ZShiaW5uX2l0 ZXIgKml0ZXIpIHsKKysgIGJpbm4gKnZhbHVlOworKworKyAgdmFsdWUgPSAoYmlubiAqKSBiaW5u X21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYgKGJpbm5fbGlzdF9uZXh0KGl0ZXIsIHZh bHVlKSA9PSBGQUxTRSkgeworKyAgICBmcmVlX2ZuKHZhbHVlKTsKKysgICAgcmV0dXJuIE5VTEw7 CisrICB9CisrCisrICB2YWx1ZS0+YWxsb2NhdGVkID0gVFJVRTsKKysgIHJldHVybiB2YWx1ZTsK KysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlu bl9tYXBfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkKSB7CisrICBiaW5uICp2 YWx1ZTsKKysKKysgIHZhbHVlID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsK KysKKysgIGlmIChiaW5uX21hcF9uZXh0KGl0ZXIsIHBpZCwgdmFsdWUpID09IEZBTFNFKSB7Cisr ICAgIGZyZWVfZm4odmFsdWUpOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIHZhbHVl LT5hbGxvY2F0ZWQgPSBUUlVFOworKyAgcmV0dXJuIHZhbHVlOworKworK30KKysKKysvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29iamVjdF9uZXh0X3ZhbHVl KGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSkgeworKyAgYmlubiAqdmFsdWU7CisrCisrICB2 YWx1ZSA9IChiaW5uICopIGJpbm5fbWFsbG9jKHNpemVvZihiaW5uKSk7CisrCisrICBpZiAoYmlu bl9vYmplY3RfbmV4dChpdGVyLCBwa2V5LCB2YWx1ZSkgPT0gRkFMU0UpIHsKKysgICAgZnJlZV9m bih2YWx1ZSk7CisrICAgIHJldHVybiBOVUxMOworKyAgfQorKworKyAgdmFsdWUtPmFsbG9jYXRl ZCA9IFRSVUU7CisrICByZXR1cm4gdmFsdWU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0 X3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsKKysg IGJpbm4gdmFsdWU7CisrCisrICBpZiAoYmlubl9saXN0X25leHQoaXRlciwgJnZhbHVlKSA9PSBG QUxTRSkgcmV0dXJuIE5VTEw7CisrICBpZiAocHR5cGUpICpwdHlwZSA9IHZhbHVlLnR5cGU7Cisr ICBpZiAocHNpemUpICpwc2l6ZSA9IHZhbHVlLnNpemU7CisrI2lmIEJZVEVfT1JERVIgPT0gTElU VExFX0VORElBTgorKyAgcmV0dXJuIHN0b3JlX3ZhbHVlKCZ2YWx1ZSk7CisrI2Vsc2UKKysgIHJl dHVybiB2YWx1ZS5wdHI7CisrI2VuZGlmCisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWRfbmV4dChiaW5uX2l0ZXIgKml0ZXIs IGludCAqcGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7CisrICBiaW5uIHZhbHVlOworKwor KyAgaWYgKGJpbm5fbWFwX25leHQoaXRlciwgcGlkLCAmdmFsdWUpID09IEZBTFNFKSByZXR1cm4g TlVMTDsKKysgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKKysgIGlmIChwc2l6ZSkg KnBzaXplID0gdmFsdWUuc2l6ZTsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisr ICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKKysjZWxzZQorKyAgcmV0dXJuIHZhbHVlLnB0 cjsKKysjZW5kaWYKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKyt2b2lkICog QVBJRU5UUlkgYmlubl9vYmplY3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtl eSwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgeworKyAgYmlubiB2YWx1ZTsKKysKKysgIGlmIChi aW5uX29iamVjdF9uZXh0KGl0ZXIsIHBrZXksICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxM OworKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOworKyAgaWYgKHBzaXplKSAqcHNp emUgPSB2YWx1ZS5zaXplOworKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKysgIHJl dHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOworKyNlbHNlCisrICByZXR1cm4gdmFsdWUucHRyOwor KyNlbmRpZgorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioq KioqIEVYVEVOREVEIElOVEVSRkFDRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysvKioqKioqIG5vbmUgb2YgdGhlIGZ1bmN0aW9u cyBhYm92ZSBjYWxsIHRoZSBmdW5jdGlvbnMgYmVsb3cgKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytpbnQgQVBJRU5UUlkgYmlu bl9nZXRfd3JpdGVfc3RvcmFnZShpbnQgdHlwZSkgeworKyAgaW50IHN0b3JhZ2VfdHlwZTsKKysK KysgIHN3aXRjaCAodHlwZSkgeworKyAgICBjYXNlIEJJTk5fU0lOR0xFX1NUUjoKKysgICAgY2Fz ZSBCSU5OX0RPVUJMRV9TVFI6CisrICAgICAgcmV0dXJuIEJJTk5fU1RPUkFHRV9TVFJJTkc7Cisr CisrICAgIGNhc2UgQklOTl9CT09MOgorKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfTk9CWVRF UzsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBiaW5uX2dldF90eXBlX2luZm8odHlwZSwgJnN0 b3JhZ2VfdHlwZSwgTlVMTCk7CisrICAgICAgcmV0dXJuIHN0b3JhZ2VfdHlwZTsKKysgIH0KKysK Kyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisraW50IEFQSUVOVFJZ IGJpbm5fZ2V0X3JlYWRfc3RvcmFnZShpbnQgdHlwZSkgeworKyAgaW50IHN0b3JhZ2VfdHlwZTsK KysKKysgIHN3aXRjaCAodHlwZSkgeworKyNpZmRlZiBCSU5OX0VYVEVOREVECisrICAgIGNhc2Ug QklOTl9TSU5HTEVfU1RSOgorKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfRFdPUkQ7CisrICAg IGNhc2UgQklOTl9ET1VCTEVfU1RSOgorKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfUVdPUkQ7 CisrI2VuZGlmCisrICAgIGNhc2UgQklOTl9CT09MOgorKyAgICBjYXNlIEJJTk5fVFJVRToKKysg ICAgY2FzZSBCSU5OX0ZBTFNFOgorKyAgICAgIHJldHVybiBCSU5OX1NUT1JBR0VfRFdPUkQ7Cisr ICAgIGRlZmF1bHQ6CisrICAgICAgYmlubl9nZXRfdHlwZV9pbmZvKHR5cGUsICZzdG9yYWdlX3R5 cGUsIE5VTEwpOworKyAgICAgIHJldHVybiBzdG9yYWdlX3R5cGU7CisrICB9CisrCisrfQorKwor Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBCT09MIEdl dFdyaXRlQ29udmVydGVkRGF0YShpbnQgKnB0eXBlLCB2b2lkICoqcHB2YWx1ZSwgaW50ICpwc2l6 ZSkgeworKyAgaW50ICB0eXBlOworKyAgZmxvYXQgIGYxOworKyAgZG91YmxlIGQxOworKyAgY2hh ciBwc3RyWzEyOF07CisrCisrICBVTlVTRUQocHN0cik7CisrICBVTlVTRUQoZDEpOworKyAgVU5V U0VEKGYxKTsKKysKKysgIHR5cGUgPSAqcHR5cGU7CisrCisrICBpZiAoKnBwdmFsdWUgPT0gTlVM TCkgeworKyAgICBzd2l0Y2ggKHR5cGUpIHsKKysgICAgICBjYXNlIEJJTk5fTlVMTDoKKysgICAg ICBjYXNlIEJJTk5fVFJVRToKKysgICAgICBjYXNlIEJJTk5fRkFMU0U6CisrICAgICAgICBicmVh azsKKysgICAgICBjYXNlIEJJTk5fU1RSSU5HOgorKyAgICAgIGNhc2UgQklOTl9CTE9COgorKyAg ICAgICAgaWYgKCpwc2l6ZSA9PSAwKSBicmVhazsKKysJLyogZmFsbCB0aHJvdWdoICovCisrICAg ICAgZGVmYXVsdDoKKysgICAgICAgIHJldHVybiBGQUxTRTsKKysgICAgfQorKyAgfQorKworKyAg c3dpdGNoICh0eXBlKSB7CisrI2lmZGVmIEJJTk5fRVhURU5ERUQKKysgICAgY2FzZSBCSU5OX1NJ TkdMRToKKysgICAgICBmMSA9ICoqKGZsb2F0KiopcHB2YWx1ZTsKKysgICAgICBkMSA9IGYxOyAg Ly8gY29udmVydCBmcm9tIGZsb2F0ICgzMmJpdHMpIHRvIGRvdWJsZSAoNjRiaXRzKQorKyAgICAg IHR5cGUgPSBCSU5OX1NJTkdMRV9TVFI7CisrICAgICAgZ290byBjb252X2RvdWJsZTsKKysgICAg Y2FzZSBCSU5OX0RPVUJMRToKKysgICAgICBkMSA9ICoqKGRvdWJsZSoqKXBwdmFsdWU7CisrICAg ICAgdHlwZSA9IEJJTk5fRE9VQkxFX1NUUjsKKytjb252X2RvdWJsZToKKysgICAgICAvLyB0aGUg JyUuMTdlJyBpcyBtb3JlIHByZWNpc2UgdGhhbiB0aGUgJyVnJworKyAgICAgIHNucHJpbnRmKHBz dHIsIDEyNywgIiUuMTdlIiwgZDEpOworKyAgICAgICpwcHZhbHVlID0gcHN0cjsKKysgICAgICAq cHR5cGUgPSB0eXBlOworKyAgICAgIGJyZWFrOworKyNlbmRpZgorKyAgICBjYXNlIEJJTk5fREVD SU1BTDoKKysgICAgY2FzZSBCSU5OX0NVUlJFTkNZU1RSOgorKyAgICAgIC8qCisrICAgICAgaWYg KGJpbm5fbWFsbG9jX2V4dHB0cigxMjgpID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysgICAgICBz bnByaW50ZihzcHRyLCAxMjcsICIlRSIsICoqcHB2YWx1ZSk7CisrICAgICAgKnBwdmFsdWUgPSBz cHRyOworKyAgICAgICovCisrICAgICAgcmV0dXJuIFRSVUU7ICAvLyEgdGVtcG9yYXJ5CisrICAg ICAgYnJlYWs7CisrCisrICAgIGNhc2UgQklOTl9EQVRFOgorKyAgICBjYXNlIEJJTk5fREFURVRJ TUU6CisrICAgIGNhc2UgQklOTl9USU1FOgorKyAgICAgIHJldHVybiBUUlVFOyAgLy8hIHRlbXBv cmFyeQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIEJJTk5fQk9PTDoKKysgICAgICBpZiAo KiooKEJPT0wqKilwcHZhbHVlKSA9PSBGQUxTRSkgeworKyAgICAgICAgdHlwZSA9IEJJTk5fRkFM U0U7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHR5cGUgPSBCSU5OX1RSVUU7CisrICAgICAg fQorKyAgICAgICpwdHlwZSA9IHR5cGU7CisrICAgICAgYnJlYWs7CisrCisrICB9CisrCisrICBy ZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrQklOTl9QUklWQVRFIGludCB0eXBlX2ZhbWlseShpbnQgdHlwZSkgIHsKKysKKysgIHN3aXRj aCAodHlwZSkgeworKyAgICBjYXNlIEJJTk5fTElTVDoKKysgICAgY2FzZSBCSU5OX01BUDoKKysg ICAgY2FzZSBCSU5OX09CSkVDVDoKKysgICAgICByZXR1cm4gQklOTl9GQU1JTFlfQklOTjsKKysK KysgICAgY2FzZSBCSU5OX0lOVDg6CisrICAgIGNhc2UgQklOTl9JTlQxNjoKKysgICAgY2FzZSBC SU5OX0lOVDMyOgorKyAgICBjYXNlIEJJTk5fSU5UNjQ6CisrICAgIGNhc2UgQklOTl9VSU5UODoK KysgICAgY2FzZSBCSU5OX1VJTlQxNjoKKysgICAgY2FzZSBCSU5OX1VJTlQzMjoKKysgICAgY2Fz ZSBCSU5OX1VJTlQ2NDoKKysgICAgICByZXR1cm4gQklOTl9GQU1JTFlfSU5UOworKworKyAgICBj YXNlIEJJTk5fRkxPQVQzMjoKKysgICAgY2FzZSBCSU5OX0ZMT0FUNjQ6CisrICAgIC8vY2FzZSBC SU5OX1NJTkdMRToKKysgICAgY2FzZSBCSU5OX1NJTkdMRV9TVFI6CisrICAgIC8vY2FzZSBCSU5O X0RPVUJMRToKKysgICAgY2FzZSBCSU5OX0RPVUJMRV9TVFI6CisrICAgICAgcmV0dXJuIEJJTk5f RkFNSUxZX0ZMT0FUOworKworKyAgICBjYXNlIEJJTk5fU1RSSU5HOgorKyAgICBjYXNlIEJJTk5f SFRNTDoKKysgICAgY2FzZSBCSU5OX0NTUzoKKysgICAgY2FzZSBCSU5OX1hNTDoKKysgICAgY2Fz ZSBCSU5OX0pTT046CisrICAgIGNhc2UgQklOTl9KQVZBU0NSSVBUOgorKyAgICAgIHJldHVybiBC SU5OX0ZBTUlMWV9TVFJJTkc7CisrCisrICAgIGNhc2UgQklOTl9CTE9COgorKyAgICBjYXNlIEJJ Tk5fSlBFRzoKKysgICAgY2FzZSBCSU5OX0dJRjoKKysgICAgY2FzZSBCSU5OX1BORzoKKysgICAg Y2FzZSBCSU5OX0JNUDoKKysgICAgICByZXR1cm4gQklOTl9GQU1JTFlfQkxPQjsKKysKKysgICAg Y2FzZSBCSU5OX0RFQ0lNQUw6CisrICAgIGNhc2UgQklOTl9DVVJSRU5DWToKKysgICAgY2FzZSBC SU5OX0RBVEU6CisrICAgIGNhc2UgQklOTl9USU1FOgorKyAgICBjYXNlIEJJTk5fREFURVRJTUU6 CisrICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX1NUUklORzsKKysKKysgICAgY2FzZSBCSU5OX0JP T0w6CisrICAgICAgcmV0dXJuIEJJTk5fRkFNSUxZX0JPT0w7CisrCisrICAgIGNhc2UgQklOTl9O VUxMOgorKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9OVUxMOworKworKyAgICBkZWZhdWx0Ogor KyAgICAgIC8vIGlmIGl0IHdhc24ndCBmb3VuZAorKyAgICAgIHJldHVybiBCSU5OX0ZBTUlMWV9O T05FOworKyAgfQorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysK KytCSU5OX1BSSVZBVEUgaW50IGludF90eXBlKGludCB0eXBlKSAgeworKworKyAgc3dpdGNoICh0 eXBlKSB7CisrICBjYXNlIEJJTk5fSU5UODoKKysgIGNhc2UgQklOTl9JTlQxNjoKKysgIGNhc2Ug QklOTl9JTlQzMjoKKysgIGNhc2UgQklOTl9JTlQ2NDoKKysgICAgcmV0dXJuIEJJTk5fU0lHTkVE X0lOVDsKKysKKysgIGNhc2UgQklOTl9VSU5UODoKKysgIGNhc2UgQklOTl9VSU5UMTY6CisrICBj YXNlIEJJTk5fVUlOVDMyOgorKyAgY2FzZSBCSU5OX1VJTlQ2NDoKKysgICAgcmV0dXJuIEJJTk5f VU5TSUdORURfSU5UOworKworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIDA7CisrICB9CisrCisr fQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBC T09MIGNvcHlfcmF3X3ZhbHVlKGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQg ZGF0YV9zdG9yZSkgeworKworKyAgc3dpdGNoIChkYXRhX3N0b3JlKSB7CisrICBjYXNlIEJJTk5f U1RPUkFHRV9OT0JZVEVTOgorKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0JZVEU6 CisrICAgICooKGNoYXIgKikgcGRlc3QpID0gKihjaGFyICopcHNvdXJjZTsKKysgICAgYnJlYWs7 CisrICBjYXNlIEJJTk5fU1RPUkFHRV9XT1JEOgorKyAgICAqKChzaG9ydCAqKSBwZGVzdCkgPSAq KHNob3J0ICopcHNvdXJjZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9EV09S RDoKKysgICAgKigoaW50ICopIHBkZXN0KSA9ICooaW50ICopcHNvdXJjZTsKKysgICAgYnJlYWs7 CisrICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKKysgICAgKigodWludDY0ICopIHBkZXN0KSA9 ICoodWludDY0ICopcHNvdXJjZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9C TE9COgorKyAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgorKyAgY2FzZSBCSU5OX1NUT1JBR0Vf Q09OVEFJTkVSOgorKyAgICAqKChjaGFyICoqKSBwZGVzdCkgPSAoY2hhciAqKXBzb3VyY2U7Cisr ICAgIGJyZWFrOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEZBTFNFOworKyAgfQorKworKyAg cmV0dXJuIFRSVUU7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor KworK0JJTk5fUFJJVkFURSBCT09MIGNvcHlfaW50X3ZhbHVlKGNvbnN0IHZvaWQgKnBzb3VyY2Us IHZvaWQgKnBkZXN0LCBpbnQgc291cmNlX3R5cGUsIGludCBkZXN0X3R5cGUpIHsKKysgIHVpbnQ2 NCB2dWludDY0ID0gMDsgaW50NjQgdmludDY0ID0gMDsKKysKKysgIHN3aXRjaCAoc291cmNlX3R5 cGUpIHsKKysgIGNhc2UgQklOTl9JTlQ4OgorKyAgICB2aW50NjQgPSAqKHNpZ25lZCBjaGFyICop cHNvdXJjZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fSU5UMTY6CisrICAgIHZpbnQ2NCA9 ICooc2hvcnQgKilwc291cmNlOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9JTlQzMjoKKysg ICAgdmludDY0ID0gKihpbnQgKilwc291cmNlOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9J TlQ2NDoKKysgICAgdmludDY0ID0gKihpbnQ2NCAqKXBzb3VyY2U7CisrICAgIGJyZWFrOworKwor KyAgY2FzZSBCSU5OX1VJTlQ4OgorKyAgICB2dWludDY0ID0gKih1bnNpZ25lZCBjaGFyICopcHNv dXJjZTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fVUlOVDE2OgorKyAgICB2dWludDY0ID0g Kih1bnNpZ25lZCBzaG9ydCAqKXBzb3VyY2U7CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1VJ TlQzMjoKKysgICAgdnVpbnQ2NCA9ICoodW5zaWduZWQgaW50ICopcHNvdXJjZTsKKysgICAgYnJl YWs7CisrICBjYXNlIEJJTk5fVUlOVDY0OgorKyAgICB2dWludDY0ID0gKih1aW50NjQgKilwc291 cmNlOworKyAgICBicmVhazsKKysKKysgIGRlZmF1bHQ6CisrICAgIHJldHVybiBGQUxTRTsKKysg IH0KKysKKysKKysgIC8vIGNvcHkgZnJvbSBpbnQ2NCB0byB1aW50NjQsIGlmIHBvc3NpYmxlCisr CisrICBpZiAoaW50X3R5cGUoc291cmNlX3R5cGUpID09IEJJTk5fVU5TSUdORURfSU5UICYmIGlu dF90eXBlKGRlc3RfdHlwZSkgPT0gQklOTl9TSUdORURfSU5UKSB7CisrICAgIGlmICh2dWludDY0 ID4gSU5UNjRfTUFYKSByZXR1cm4gRkFMU0U7CisrICAgIHZpbnQ2NCA9IHZ1aW50NjQ7CisrICB9 IGVsc2UgaWYgKGludF90eXBlKHNvdXJjZV90eXBlKSA9PSBCSU5OX1NJR05FRF9JTlQgJiYgaW50 X3R5cGUoZGVzdF90eXBlKSA9PSBCSU5OX1VOU0lHTkVEX0lOVCkgeworKyAgICBpZiAodmludDY0 IDwgMCkgcmV0dXJuIEZBTFNFOworKyAgICB2dWludDY0ID0gdmludDY0OworKyAgfQorKworKwor KyAgc3dpdGNoIChkZXN0X3R5cGUpIHsKKysgIGNhc2UgQklOTl9JTlQ4OgorKyAgICBpZiAodmlu dDY0IDwgSU5UOF9NSU4gfHwgdmludDY0ID4gSU5UOF9NQVgpIHJldHVybiBGQUxTRTsKKysgICAg KihzaWduZWQgY2hhciAqKXBkZXN0ID0gKHNpZ25lZCBjaGFyKSB2aW50NjQ7CisrICAgIGJyZWFr OworKyAgY2FzZSBCSU5OX0lOVDE2OgorKyAgICBpZiAodmludDY0IDwgSU5UMTZfTUlOIHx8IHZp bnQ2NCA+IElOVDE2X01BWCkgcmV0dXJuIEZBTFNFOworKyAgICAqKHNob3J0ICopcGRlc3QgPSAo c2hvcnQpIHZpbnQ2NDsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fSU5UMzI6CisrICAgIGlm ICh2aW50NjQgPCBJTlQzMl9NSU4gfHwgdmludDY0ID4gSU5UMzJfTUFYKSByZXR1cm4gRkFMU0U7 CisrICAgICooaW50ICopcGRlc3QgPSAoaW50KSB2aW50NjQ7CisrICAgIGJyZWFrOworKyAgY2Fz ZSBCSU5OX0lOVDY0OgorKyAgICAqKGludDY0ICopcGRlc3QgPSB2aW50NjQ7CisrICAgIGJyZWFr OworKworKyAgY2FzZSBCSU5OX1VJTlQ4OgorKyAgICBpZiAodnVpbnQ2NCA+IFVJTlQ4X01BWCkg cmV0dXJuIEZBTFNFOworKyAgICAqKHVuc2lnbmVkIGNoYXIgKilwZGVzdCA9ICh1bnNpZ25lZCBj aGFyKSB2dWludDY0OworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9VSU5UMTY6CisrICAgIGlm ICh2dWludDY0ID4gVUlOVDE2X01BWCkgcmV0dXJuIEZBTFNFOworKyAgICAqKHVuc2lnbmVkIHNo b3J0ICopcGRlc3QgPSAodW5zaWduZWQgc2hvcnQpIHZ1aW50NjQ7CisrICAgIGJyZWFrOworKyAg Y2FzZSBCSU5OX1VJTlQzMjoKKysgICAgaWYgKHZ1aW50NjQgPiBVSU5UMzJfTUFYKSByZXR1cm4g RkFMU0U7CisrICAgICoodW5zaWduZWQgaW50ICopcGRlc3QgPSAodW5zaWduZWQgaW50KSB2dWlu dDY0OworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9VSU5UNjQ6CisrICAgICoodWludDY0ICop cGRlc3QgPSB2dWludDY0OworKyAgICBicmVhazsKKysKKysgIGRlZmF1bHQ6CisrICAgIHJldHVy biBGQUxTRTsKKysgIH0KKysKKysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBjb3B5X2Zsb2F0X3Zh bHVlKGNvbnN0IHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgc291cmNlX3R5cGUsIGlu dCBkZXN0X3R5cGUpIHsKKysKKysgIHN3aXRjaCAoc291cmNlX3R5cGUpIHsKKysgIGNhc2UgQklO Tl9GTE9BVDMyOgorKyAgICAqKGRvdWJsZSAqKXBkZXN0ID0gKihmbG9hdCAqKXBzb3VyY2U7Cisr ICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX0ZMT0FUNjQ6CisrICAgICooZmxvYXQgKilwZGVzdCA9 IChmbG9hdCkgKihkb3VibGUgKilwc291cmNlOworKyAgICBicmVhazsKKysgIGRlZmF1bHQ6Cisr ICAgIHJldHVybiBGQUxTRTsKKysgIH0KKysKKysgIHJldHVybiBUUlVFOworKworK30KKysKKysv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgdm9pZCB6ZXJv X3ZhbHVlKGNvbnN0IHZvaWQgKnB2YWx1ZSwgaW50IHR5cGUpIHsKKysgIC8vaW50IHNpemU9MDsK KysKKysgIHN3aXRjaCAoYmlubl9nZXRfcmVhZF9zdG9yYWdlKHR5cGUpKSB7CisrICBjYXNlIEJJ Tk5fU1RPUkFHRV9OT0JZVEVTOgorKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX0JZ VEU6CisrICAgICooKGNoYXIgKikgcHZhbHVlKSA9IDA7CisrICAgIC8vc2l6ZT0xOworKyAgICBi cmVhazsKKysgIGNhc2UgQklOTl9TVE9SQUdFX1dPUkQ6CisrICAgICooKHNob3J0ICopIHB2YWx1 ZSkgPSAwOworKyAgICAvL3NpemU9MjsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFH RV9EV09SRDoKKysgICAgKigoaW50ICopIHB2YWx1ZSkgPSAwOworKyAgICAvL3NpemU9NDsKKysg ICAgYnJlYWs7CisrICBjYXNlIEJJTk5fU1RPUkFHRV9RV09SRDoKKysgICAgKigodWludDY0ICop IHB2YWx1ZSkgPSAwOworKyAgICAvL3NpemU9ODsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5f U1RPUkFHRV9CTE9COgorKyAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgorKyAgY2FzZSBCSU5O X1NUT1JBR0VfQ09OVEFJTkVSOgorKyAgICAqKGNoYXIgKiopcHZhbHVlID0gTlVMTDsKKysgICAg YnJlYWs7CisrICB9CisrCisrICAvL2lmIChzaXplPjApIG1lbXNldChwdmFsdWUsIDAsIHNpemUp OworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BS SVZBVEUgQk9PTCBjb3B5X3ZhbHVlKHZvaWQgKnBzb3VyY2UsIHZvaWQgKnBkZXN0LCBpbnQgc291 cmNlX3R5cGUsIGludCBkZXN0X3R5cGUsIGludCBkYXRhX3N0b3JlKSB7CisrCisrICBpZiAodHlw ZV9mYW1pbHkoc291cmNlX3R5cGUpICE9IHR5cGVfZmFtaWx5KGRlc3RfdHlwZSkpIHJldHVybiBG QUxTRTsKKysKKysgIGlmICh0eXBlX2ZhbWlseShzb3VyY2VfdHlwZSkgPT0gQklOTl9GQU1JTFlf SU5UICYmIHNvdXJjZV90eXBlICE9IGRlc3RfdHlwZSkgeworKyAgICByZXR1cm4gY29weV9pbnRf dmFsdWUocHNvdXJjZSwgcGRlc3QsIHNvdXJjZV90eXBlLCBkZXN0X3R5cGUpOworKyAgfSBlbHNl IGlmICh0eXBlX2ZhbWlseShzb3VyY2VfdHlwZSkgPT0gQklOTl9GQU1JTFlfRkxPQVQgJiYgc291 cmNlX3R5cGUgIT0gZGVzdF90eXBlKSB7CisrICAgIHJldHVybiBjb3B5X2Zsb2F0X3ZhbHVlKHBz b3VyY2UsIHBkZXN0LCBzb3VyY2VfdHlwZSwgZGVzdF90eXBlKTsKKysgIH0gZWxzZSB7CisrICAg IHJldHVybiBjb3B5X3Jhd192YWx1ZShwc291cmNlLCBwZGVzdCwgZGF0YV9zdG9yZSk7CisrICB9 CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKiogV1JJVEUg RlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwor K0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZChiaW5uICpsaXN0LCBpbnQgdHlwZSwgdm9pZCAq cHZhbHVlLCBpbnQgc2l6ZSkgeworKworKyAgaWYgKEdldFdyaXRlQ29udmVydGVkRGF0YSgmdHlw ZSwgJnB2YWx1ZSwgJnNpemUpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4g Ymlubl9saXN0X2FkZF9yYXcobGlzdCwgdHlwZSwgcHZhbHVlLCBzaXplKTsKKysKKyt9CisrCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX21h cF9zZXQoYmlubiAqbWFwLCBpbnQgaWQsIGludCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXpl KSB7CisrCisrICBpZiAoR2V0V3JpdGVDb252ZXJ0ZWREYXRhKCZ0eXBlLCAmcHZhbHVlLCAmc2l6 ZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIHJldHVybiBiaW5uX21hcF9zZXRfcmF3 KG1hcCwgaWQsIHR5cGUsIHB2YWx1ZSwgc2l6ZSk7CisrCisrfQorKworKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0KGJpbm4g Km9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6ZSkg eworKworKyAgaWYgKEdldFdyaXRlQ29udmVydGVkRGF0YSgmdHlwZSwgJnB2YWx1ZSwgJnNpemUp ID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrCisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0X3Jh dyhvYmosIGtleSwgdHlwZSwgcHZhbHVlLCBzaXplKTsKKysKKyt9CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisrCisrLy8gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSB3 cmFwcGVycworK0JPT0wgQVBJRU5UUlkgYmlubl9hZGRfdmFsdWUoYmlubiAqaXRlbSwgaW50IGJp bm5fdHlwZSwgaW50IGlkLCBjaGFyICpuYW1lLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQg c2l6ZSkgeworKworKyAgc3dpdGNoIChiaW5uX3R5cGUpIHsKKysgICAgY2FzZSBCSU5OX0xJU1Q6 CisrICAgICAgcmV0dXJuIGJpbm5fbGlzdF9hZGQoaXRlbSwgdHlwZSwgcHZhbHVlLCBzaXplKTsK KysgICAgY2FzZSBCSU5OX01BUDoKKysgICAgICByZXR1cm4gYmlubl9tYXBfc2V0KGl0ZW0sIGlk LCB0eXBlLCBwdmFsdWUsIHNpemUpOworKyAgICBjYXNlIEJJTk5fT0JKRUNUOgorKyAgICAgIHJl dHVybiBiaW5uX29iamVjdF9zZXQoaXRlbSwgbmFtZSwgdHlwZSwgcHZhbHVlLCBzaXplKTsKKysg ICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRkFMU0U7CisrICB9CisrCisrfQorKworKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKworK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZF9uZXcoYmlubiAqbGlzdCwgYmlubiAq dmFsdWUpIHsKKysgIEJPT0wgcmV0dmFsOworKworKyAgcmV0dmFsID0gYmlubl9saXN0X2FkZF92 YWx1ZShsaXN0LCB2YWx1ZSk7CisrICBpZiAodmFsdWUpIGZyZWVfZm4odmFsdWUpOworKyAgcmV0 dXJuIHJldHZhbDsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrQk9PTCBBUElFTlRSWSBiaW5uX21hcF9zZXRfbmV3KGJpbm4gKm1hcCwgaW50IGlkLCBiaW5u ICp2YWx1ZSkgeworKyAgQk9PTCByZXR2YWw7CisrCisrICByZXR2YWwgPSBiaW5uX21hcF9zZXRf dmFsdWUobWFwLCBpZCwgdmFsdWUpOworKyAgaWYgKHZhbHVlKSBmcmVlX2ZuKHZhbHVlKTsKKysg IHJldHVybiByZXR2YWw7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKworK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0X25ldyhiaW5uICpvYmosIGNvbnN0 IGNoYXIgKmtleSwgYmlubiAqdmFsdWUpIHsKKysgIEJPT0wgcmV0dmFsOworKworKyAgcmV0dmFs ID0gYmlubl9vYmplY3Rfc2V0X3ZhbHVlKG9iaiwga2V5LCB2YWx1ZSk7CisrICBpZiAodmFsdWUp IGZyZWVfZm4odmFsdWUpOworKyAgcmV0dXJuIHJldHZhbDsKKysKKyt9CisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBSRUFEIEZVTkNUSU9OUyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5f bGlzdF92YWx1ZShjb25zdCB2b2lkICpwdHIsIGludCBwb3MpIHsKKysgIGJpbm4gKnZhbHVlOwor KworKyAgdmFsdWUgPSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAg aWYgKGJpbm5fbGlzdF9nZXRfdmFsdWUocHRyLCBwb3MsIHZhbHVlKSA9PSBGQUxTRSkgeworKyAg ICBmcmVlX2ZuKHZhbHVlKTsKKysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrCisrICB2YWx1ZS0+ YWxsb2NhdGVkID0gVFJVRTsKKysgIHJldHVybiB2YWx1ZTsKKysKKyt9CisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3ZhbHVl KGNvbnN0IHZvaWQgKnB0ciwgaW50IGlkKSB7CisrICBiaW5uICp2YWx1ZTsKKysKKysgIHZhbHVl ID0gKGJpbm4gKikgYmlubl9tYWxsb2Moc2l6ZW9mKGJpbm4pKTsKKysKKysgIGlmIChiaW5uX21h cF9nZXRfdmFsdWUocHRyLCBpZCwgdmFsdWUpID09IEZBTFNFKSB7CisrICAgIGZyZWVfZm4odmFs dWUpOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIHZhbHVlLT5hbGxvY2F0ZWQgPSBU UlVFOworKyAgcmV0dXJuIHZhbHVlOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKysKKytiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfdmFsdWUoY29uc3Qgdm9p ZCAqcHRyLCBjb25zdCBjaGFyICprZXkpIHsKKysgIGJpbm4gKnZhbHVlOworKworKyAgdmFsdWUg PSAoYmlubiAqKSBiaW5uX21hbGxvYyhzaXplb2YoYmlubikpOworKworKyAgaWYgKGJpbm5fb2Jq ZWN0X2dldF92YWx1ZShwdHIsIGtleSwgdmFsdWUpID09IEZBTFNFKSB7CisrICAgIGZyZWVfZm4o dmFsdWUpOworKyAgICByZXR1cm4gTlVMTDsKKysgIH0KKysKKysgIHZhbHVlLT5hbGxvY2F0ZWQg PSBUUlVFOworKyAgcmV0dXJuIHZhbHVlOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlzdF9y ZWFkKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCAqcHR5cGUsIGludCAqcHNpemUpIHsK KysgIGJpbm4gdmFsdWU7CisrCisrICBpZiAoYmlubl9saXN0X2dldF92YWx1ZShsaXN0LCBwb3Ms ICZ2YWx1ZSkgPT0gRkFMU0UpIHJldHVybiBOVUxMOworKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2 YWx1ZS50eXBlOworKyAgaWYgKHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOworKyNpZiBCWVRF X09SREVSID09IExJVFRMRV9FTkRJQU4KKysgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOwor KyNlbHNlCisrICByZXR1cm4gdmFsdWUucHRyOworKyNlbmRpZgorKworK30KKysKKysvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX21hcF9yZWFkKGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKSB7CisrICBiaW5uIHZhbHVl OworKworKyAgaWYgKGJpbm5fbWFwX2dldF92YWx1ZShtYXAsIGlkLCAmdmFsdWUpID09IEZBTFNF KSByZXR1cm4gTlVMTDsKKysgIGlmIChwdHlwZSkgKnB0eXBlID0gdmFsdWUudHlwZTsKKysgIGlm IChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKKysjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVf RU5ESUFOCisrICByZXR1cm4gc3RvcmVfdmFsdWUoJnZhbHVlKTsKKysjZWxzZQorKyAgcmV0dXJu IHZhbHVlLnB0cjsKKysjZW5kaWYKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysK Kyt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfcmVhZChjb25zdCB2b2lkICpvYmosIGNvbnN0 IGNoYXIgKmtleSwgaW50ICpwdHlwZSwgaW50ICpwc2l6ZSkgeworKyAgYmlubiB2YWx1ZTsKKysK KysgIGlmIChiaW5uX29iamVjdF9nZXRfdmFsdWUob2JqLCBrZXksICZ2YWx1ZSkgPT0gRkFMU0Up IHJldHVybiBOVUxMOworKyAgaWYgKHB0eXBlKSAqcHR5cGUgPSB2YWx1ZS50eXBlOworKyAgaWYg KHBzaXplKSAqcHNpemUgPSB2YWx1ZS5zaXplOworKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9F TkRJQU4KKysgIHJldHVybiBzdG9yZV92YWx1ZSgmdmFsdWUpOworKyNlbHNlCisrICByZXR1cm4g dmFsdWUucHRyOworKyNlbmRpZgorKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfZ2V0KGNvbnN0 IHZvaWQgKnB0ciwgaW50IHBvcywgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSkg eworKyAgYmlubiB2YWx1ZTsKKysgIGludCBzdG9yYWdlX3R5cGU7CisrCisrICBzdG9yYWdlX3R5 cGUgPSBiaW5uX2dldF9yZWFkX3N0b3JhZ2UodHlwZSk7CisrICBpZiAoc3RvcmFnZV90eXBlICE9 IEJJTk5fU1RPUkFHRV9OT0JZVEVTICYmIHB2YWx1ZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7Cisr CisrICB6ZXJvX3ZhbHVlKHB2YWx1ZSwgdHlwZSk7CisrCisrICBpZiAoYmlubl9saXN0X2dldF92 YWx1ZShwdHIsIHBvcywgJnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgaWYg KGNvcHlfdmFsdWUodmFsdWUucHRyLCBwdmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2Vf dHlwZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysKKysgIGlmIChwc2l6ZSkgKnBzaXplID0g dmFsdWUuc2l6ZTsKKysKKysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfZ2V0KGNvbnN0IHZvaWQgKnB0ciwg aW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgKnBzaXplKSB7CisrICBiaW5uIHZh bHVlOworKyAgaW50IHN0b3JhZ2VfdHlwZTsKKysKKysgIHN0b3JhZ2VfdHlwZSA9IGJpbm5fZ2V0 X3JlYWRfc3RvcmFnZSh0eXBlKTsKKysgIGlmIChzdG9yYWdlX3R5cGUgIT0gQklOTl9TVE9SQUdF X05PQllURVMgJiYgcHZhbHVlID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIHplcm9fdmFs dWUocHZhbHVlLCB0eXBlKTsKKysKKysgIGlmIChiaW5uX21hcF9nZXRfdmFsdWUocHRyLCBpZCwg JnZhbHVlKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOworKworKyAgaWYgKGNvcHlfdmFsdWUodmFs dWUucHRyLCBwdmFsdWUsIHZhbHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlwZSkgPT0gRkFMU0Up IHJldHVybiBGQUxTRTsKKysKKysgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKKysK KysgIHJldHVybiBUUlVFOworKworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKy8v ICAgaWYgKGJpbm5fb2JqZWN0X2dldChvYmosICJtdWx0aXBsaWVyIiwgQklOTl9JTlQzMiwgJm11 bHRpcGxpZXIsIE5VTEwpID09IEZBTFNFKSB4eHg7CisrCisrQk9PTCBBUElFTlRSWSBiaW5uX29i amVjdF9nZXQoY29uc3Qgdm9pZCAqcHRyLCBjb25zdCBjaGFyICprZXksIGludCB0eXBlLCB2b2lk ICpwdmFsdWUsIGludCAqcHNpemUpIHsKKysgIGJpbm4gdmFsdWU7CisrICBpbnQgc3RvcmFnZV90 eXBlOworKworKyAgc3RvcmFnZV90eXBlID0gYmlubl9nZXRfcmVhZF9zdG9yYWdlKHR5cGUpOwor KyAgaWYgKHN0b3JhZ2VfdHlwZSAhPSBCSU5OX1NUT1JBR0VfTk9CWVRFUyAmJiBwdmFsdWUgPT0g TlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgemVyb192YWx1ZShwdmFsdWUsIHR5cGUpOworKwor KyAgaWYgKGJpbm5fb2JqZWN0X2dldF92YWx1ZShwdHIsIGtleSwgJnZhbHVlKSA9PSBGQUxTRSkg cmV0dXJuIEZBTFNFOworKworKyAgaWYgKGNvcHlfdmFsdWUodmFsdWUucHRyLCBwdmFsdWUsIHZh bHVlLnR5cGUsIHR5cGUsIHN0b3JhZ2VfdHlwZSkgPT0gRkFMU0UpIHJldHVybiBGQUxTRTsKKysK KysgIGlmIChwc2l6ZSkgKnBzaXplID0gdmFsdWUuc2l6ZTsKKysKKysgIHJldHVybiBUUlVFOwor KworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisr CisrLy8gdGhlc2UgZnVuY3Rpb25zIGJlbG93IG1heSBub3QgYmUgaW1wbGVtZW50ZWQgYXMgaW5s aW5lIGZ1bmN0aW9ucywgYmVjYXVzZQorKy8vIHRoZXkgdXNlIGEgbG90IG9mIHNwYWNlLCBldmVu IGZvciB0aGUgdmFyaWFibGUuIHNvIHRoZXkgd2lsbCBiZSBleHBvcnRlZC4KKysKKysvLyBidXQg d2hhdCBhYm91dCB1c2luZyBhcyBzdGF0aWM/CisrLy8gICAgaXMgdGhlcmUgYW55IHByb2JsZW0g d2l0aCB3cmFwcGVycz8gY2FuIHRoZXNlIHdyYXBwZXJzIGltcGxlbWVudCB0aGVzZSBmdW5jdGlv bnMgdXNpbmcgdGhlIGhlYWRlcj8KKysvLyAgICBpZiBhcyBzdGF0aWMsIHdpbGwgdGhleSBiZSBw cmVzZW50IGV2ZW4gb24gbW9kdWxlcyB0aGF0IGRvbid0IHVzZSB0aGUgZnVuY3Rpb25zPworKwor K3NpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGlu dCBwb3MpIHsKKysgIHNpZ25lZCBjaGFyIHZhbHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0 LCBwb3MsIEJJTk5fSU5UOCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9 CisrCisrc2hvcnQgQVBJRU5UUlkgYmlubl9saXN0X2ludDE2KGNvbnN0IHZvaWQgKmxpc3QsIGlu dCBwb3MpIHsKKysgIHNob3J0IHZhbHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3Ms IEJJTk5fSU5UMTYsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKwor K2ludCBBUElFTlRSWSBiaW5uX2xpc3RfaW50MzIoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykg eworKyAgaW50IHZhbHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fSU5U MzIsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK2ludDY0IEFQ SUVOVFJZIGJpbm5fbGlzdF9pbnQ2NChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7CisrICBp bnQ2NCB2YWx1ZTsKKysKKysgIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDY0LCAm dmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt1bnNpZ25lZCBjaGFy IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7Cisr ICB1bnNpZ25lZCBjaGFyIHZhbHVlOworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJ Tk5fVUlOVDgsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3Vu c2lnbmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50MTYoY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcykgeworKyAgdW5zaWduZWQgc2hvcnQgdmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0 KGxpc3QsIHBvcywgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFs dWU7CisrfQorKworK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX2xpc3RfdWludDMyKGNvbnN0 IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIHVuc2lnbmVkIGludCB2YWx1ZTsKKysKKysgIGJp bm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQzMiwgJnZhbHVlLCBOVUxMKTsKKysKKysg IHJldHVybiB2YWx1ZTsKKyt9CisrCisrdWludDY0IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50NjQo Y29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgeworKyAgdWludDY0IHZhbHVlOworKworKyAgYmlu bl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAg cmV0dXJuIHZhbHVlOworK30KKysKKytmbG9hdCBBUElFTlRSWSBiaW5uX2xpc3RfZmxvYXQoY29u c3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgeworKyAgZmxvYXQgdmFsdWU7CisrCisrICBiaW5uX2xp c3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0 dXJuIHZhbHVlOworK30KKysKKytkb3VibGUgQVBJRU5UUlkgYmlubl9saXN0X2RvdWJsZShjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zKSB7CisrICBkb3VibGUgdmFsdWU7CisrCisrICBiaW5uX2xp c3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0 dXJuIHZhbHVlOworK30KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbGlzdF9ib29sKGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MpIHsKKysgIEJPT0wgdmFsdWUgPSBUUlVFOworKworKyAgYmlubl9s aXN0X2dldChsaXN0LCBwb3MsIEJJTk5fQk9PTCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVy biB2YWx1ZTsKKyt9CisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2xpc3RfbnVsbChjb25zdCB2b2lk ICpsaXN0LCBpbnQgcG9zKSB7CisrCisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3Ms IEJJTk5fTlVMTCwgTlVMTCwgTlVMTCk7CisrCisrfQorKworK2NoYXIgKiBBUElFTlRSWSBiaW5u X2xpc3Rfc3RyKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIGNoYXIgKnZhbHVlOwor KworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fU1RSSU5HLCAmdmFsdWUsIE5VTEwp OworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9saXN0 X2Jsb2IoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwc2l6ZSkgeworKyAgdm9pZCAq dmFsdWU7CisrCisrICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9CTE9CLCAmdmFsdWUs IHBzaXplKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZIGJp bm5fbGlzdF9saXN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIHZvaWQgKnZhbHVl OworKworKyAgYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fTElTVCwgJnZhbHVlLCBOVUxM KTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbGlz dF9tYXAoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcykgeworKyAgdm9pZCAqdmFsdWU7CisrCisr ICBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9NQVAsICZ2YWx1ZSwgTlVMTCk7CisrCisr ICByZXR1cm4gdmFsdWU7CisrfQorKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX2xpc3Rfb2JqZWN0 KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpIHsKKysgIHZvaWQgKnZhbHVlOworKworKyAgYmlu bl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5VTEwpOworKworKyAg cmV0dXJuIHZhbHVlOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3NpZ25lZCBj aGFyIEFQSUVOVFJZIGJpbm5fbWFwX2ludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysg IHNpZ25lZCBjaGFyIHZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5U OCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrc2hvcnQgQVBJ RU5UUlkgYmlubl9tYXBfaW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysgIHNob3J0 IHZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UMTYsICZ2YWx1ZSwg TlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK2ludCBBUElFTlRSWSBiaW5uX21h cF9pbnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgaW50IHZhbHVlOworKworKyAg Ymlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7CisrCisrICBy ZXR1cm4gdmFsdWU7CisrfQorKworK2ludDY0IEFQSUVOVFJZIGJpbm5fbWFwX2ludDY0KGNvbnN0 IHZvaWQgKm1hcCwgaW50IGlkKSB7CisrICBpbnQ2NCB2YWx1ZTsKKysKKysgIGJpbm5fbWFwX2dl dChtYXAsIGlkLCBCSU5OX0lOVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVl OworK30KKysKKyt1bnNpZ25lZCBjaGFyIEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQ4KGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkKSB7CisrICB1bnNpZ25lZCBjaGFyIHZhbHVlOworKworKyAgYmlubl9t YXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDgsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4g dmFsdWU7CisrfQorKworK3Vuc2lnbmVkIHNob3J0IEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQxNihj b25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgdW5zaWduZWQgc2hvcnQgdmFsdWU7CisrCisr ICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7CisrCisr ICByZXR1cm4gdmFsdWU7CisrfQorKworK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX21hcF91 aW50MzIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysgIHVuc2lnbmVkIGludCB2YWx1ZTsK KysKKysgIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1VJTlQzMiwgJnZhbHVlLCBOVUxMKTsK KysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdWludDY0IEFQSUVOVFJZIGJpbm5fbWFwX3Vp bnQ2NChjb25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgdWludDY0IHZhbHVlOworKworKyAg Ymlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fVUlOVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAg cmV0dXJuIHZhbHVlOworK30KKysKKytmbG9hdCBBUElFTlRSWSBiaW5uX21hcF9mbG9hdChjb25z dCB2b2lkICptYXAsIGludCBpZCkgeworKyAgZmxvYXQgdmFsdWU7CisrCisrICBiaW5uX21hcF9n ZXQobWFwLCBpZCwgQklOTl9GTE9BVDMyLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZh bHVlOworK30KKysKKytkb3VibGUgQVBJRU5UUlkgYmlubl9tYXBfZG91YmxlKGNvbnN0IHZvaWQg Km1hcCwgaW50IGlkKSB7CisrICBkb3VibGUgdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFw LCBpZCwgQklOTl9GTE9BVDY0LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOwor K30KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2Jvb2woY29uc3Qgdm9pZCAqbWFwLCBpbnQg aWQpIHsKKysgIEJPT0wgdmFsdWUgPSBUUlVFOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQs IEJJTk5fQk9PTCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisr Qk9PTCBBUElFTlRSWSBiaW5uX21hcF9udWxsKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKSB7Cisr CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTlVMTCwgTlVMTCwgTlVMTCk7 CisrCisrfQorKworK2NoYXIgKiBBUElFTlRSWSBiaW5uX21hcF9zdHIoY29uc3Qgdm9pZCAqbWFw LCBpbnQgaWQpIHsKKysgIGNoYXIgKnZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQs IEJJTk5fU1RSSU5HLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysK Kyt2b2lkICogQVBJRU5UUlkgYmlubl9tYXBfYmxvYihjb25zdCB2b2lkICptYXAsIGludCBpZCwg aW50ICpwc2l6ZSkgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBp ZCwgQklOTl9CTE9CLCAmdmFsdWUsIHBzaXplKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9Cisr Cisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX2xpc3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQp IHsKKysgIHZvaWQgKnZhbHVlOworKworKyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTElT VCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQ SUVOVFJZIGJpbm5fbWFwX21hcChjb25zdCB2b2lkICptYXAsIGludCBpZCkgeworKyAgdm9pZCAq dmFsdWU7CisrCisrICBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9NQVAsICZ2YWx1ZSwgTlVM TCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX21h cF9vYmplY3QoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpIHsKKysgIHZvaWQgKnZhbHVlOworKwor KyAgYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fT0JKRUNULCAmdmFsdWUsIE5VTEwpOworKwor KyAgcmV0dXJuIHZhbHVlOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK3NpZ25l ZCBjaGFyIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDgoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBj aGFyICprZXkpIHsKKysgIHNpZ25lZCBjaGFyIHZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0 KG9iaiwga2V5LCBCSU5OX0lOVDgsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7 CisrfQorKworK3Nob3J0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDE2KGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5KSB7CisrICBzaG9ydCB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0 X2dldChvYmosIGtleSwgQklOTl9JTlQxNiwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2 YWx1ZTsKKyt9CisrCisraW50IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDMyKGNvbnN0IHZvaWQg Km9iaiwgY29uc3QgY2hhciAqa2V5KSB7CisrICBpbnQgdmFsdWU7CisrCisrICBiaW5uX29iamVj dF9nZXQob2JqLCBrZXksIEJJTk5fSU5UMzIsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4g dmFsdWU7CisrfQorKworK2ludDY0IEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDY0KGNvbnN0IHZv aWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7CisrICBpbnQ2NCB2YWx1ZTsKKysKKysgIGJpbm5f b2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQ2NCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJl dHVybiB2YWx1ZTsKKyt9CisrCisrdW5zaWduZWQgY2hhciBBUElFTlRSWSBiaW5uX29iamVjdF91 aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSkgeworKyAgdW5zaWduZWQgY2hh ciB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UOCwgJnZh bHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdW5zaWduZWQgc2hvcnQg QVBJRU5UUlkgYmlubl9vYmplY3RfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAq a2V5KSB7CisrICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChv YmosIGtleSwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7 CisrfQorKworK3Vuc2lnbmVkIGludCBBUElFTlRSWSBiaW5uX29iamVjdF91aW50MzIoY29uc3Qg dm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysgIHVuc2lnbmVkIGludCB2YWx1ZTsKKysK KysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgTlVMTCk7 CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK3VpbnQ2NCBBUElFTlRSWSBiaW5uX29iamVj dF91aW50NjQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysgIHVpbnQ2NCB2 YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9VSU5UNjQsICZ2YWx1 ZSwgTlVMTCk7CisrCisrICByZXR1cm4gdmFsdWU7CisrfQorKworK2Zsb2F0IEFQSUVOVFJZIGJp bm5fb2JqZWN0X2Zsb2F0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KSB7CisrICBm bG9hdCB2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9GTE9BVDMy LCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytkb3VibGUgQVBJ RU5UUlkgYmlubl9vYmplY3RfZG91YmxlKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5 KSB7CisrICBkb3VibGUgdmFsdWU7CisrCisrICBiaW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJ Tk5fRkxPQVQ2NCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisr Qk9PTCBBUElFTlRSWSBiaW5uX29iamVjdF9ib29sKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5KSB7CisrICBCT09MIHZhbHVlID0gVFJVRTsKKysKKysgIGJpbm5fb2JqZWN0X2dldChv YmosIGtleSwgQklOTl9CT09MLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOwor K30KKysKKytCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X251bGwoY29uc3Qgdm9pZCAqb2JqLCBj b25zdCBjaGFyICprZXkpIHsKKysKKysgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXks IEJJTk5fTlVMTCwgTlVMTCwgTlVMTCk7CisrCisrfQorKworK2NoYXIgKiBBUElFTlRSWSBiaW5u X29iamVjdF9zdHIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpIHsKKysgIGNoYXIg KnZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1NUUklORywgJnZh bHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrdm9pZCAqIEFQSUVOVFJZ IGJpbm5fb2JqZWN0X2Jsb2IoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGludCAq cHNpemUpIHsKKysgIHZvaWQgKnZhbHVlOworKworKyAgYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5 LCBCSU5OX0JMT0IsICZ2YWx1ZSwgcHNpemUpOworKworKyAgcmV0dXJuIHZhbHVlOworK30KKysK Kyt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3RfbGlzdChjb25zdCB2b2lkICpvYmosIGNvbnN0 IGNoYXIgKmtleSkgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5uX29iamVjdF9nZXQob2Jq LCBrZXksIEJJTk5fTElTVCwgJnZhbHVlLCBOVUxMKTsKKysKKysgIHJldHVybiB2YWx1ZTsKKyt9 CisrCisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fb2JqZWN0X21hcChjb25zdCB2b2lkICpvYmosIGNv bnN0IGNoYXIgKmtleSkgeworKyAgdm9pZCAqdmFsdWU7CisrCisrICBiaW5uX29iamVjdF9nZXQo b2JqLCBrZXksIEJJTk5fTUFQLCAmdmFsdWUsIE5VTEwpOworKworKyAgcmV0dXJuIHZhbHVlOwor K30KKysKKyt2b2lkICogQVBJRU5UUlkgYmlubl9vYmplY3Rfb2JqZWN0KGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5KSB7CisrICB2b2lkICp2YWx1ZTsKKysKKysgIGJpbm5fb2JqZWN0 X2dldChvYmosIGtleSwgQklOTl9PQkpFQ1QsICZ2YWx1ZSwgTlVMTCk7CisrCisrICByZXR1cm4g dmFsdWU7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworKworK0JJTk5fUFJJVkFURSBiaW5uICogYmlubl9hbGxv Y19pdGVtKCkgeworKyAgYmlubiAqaXRlbTsKKysgIGl0ZW0gPSAoYmlubiAqKSBiaW5uX21hbGxv YyhzaXplb2YoYmlubikpOworKyAgaWYgKGl0ZW0pIHsKKysgICAgbWVtc2V0KGl0ZW0sIDAsIHNp emVvZihiaW5uKSk7CisrICAgIGl0ZW0tPmhlYWRlciA9IEJJTk5fTUFHSUM7CisrICAgIGl0ZW0t PmFsbG9jYXRlZCA9IFRSVUU7CisrICAgIC8vaXRlbS0+d3JpdGFibGUgPSBGQUxTRTsgIC0tIGFs cmVhZHkgemVyb2VkCisrICB9CisrICByZXR1cm4gaXRlbTsKKyt9CisrCisrLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisrCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fdmFsdWUoaW50IHR5 cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUsIGJpbm5fbWVtX2ZyZWUgZnJlZWZuKSB7CisrICBp bnQgc3RvcmFnZV90eXBlOworKyAgYmlubiAqaXRlbSA9IGJpbm5fYWxsb2NfaXRlbSgpOworKyAg aWYgKGl0ZW0pIHsKKysgICAgaXRlbS0+dHlwZSA9IHR5cGU7CisrICAgIGJpbm5fZ2V0X3R5cGVf aW5mbyh0eXBlLCAmc3RvcmFnZV90eXBlLCBOVUxMKTsKKysgICAgc3dpdGNoIChzdG9yYWdlX3R5 cGUpIHsKKysgICAgY2FzZSBCSU5OX1NUT1JBR0VfTk9CWVRFUzoKKysgICAgICBicmVhazsKKysg ICAgY2FzZSBCSU5OX1NUT1JBR0VfU1RSSU5HOgorKyAgICAgIGlmIChzaXplID09IDApIHNpemUg PSBzdHJsZW4oKGNoYXIqKXB2YWx1ZSkgKyAxOworKyAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwor KyAgICBjYXNlIEJJTk5fU1RPUkFHRV9CTE9COgorKyAgICBjYXNlIEJJTk5fU1RPUkFHRV9DT05U QUlORVI6CisrICAgICAgaWYgKGZyZWVmbiA9PSBCSU5OX1RSQU5TSUVOVCkgeworKyAgICAgICAg aXRlbS0+cHRyID0gYmlubl9tZW1kdXAocHZhbHVlLCBzaXplKTsKKysgICAgICAgIGlmIChpdGVt LT5wdHIgPT0gTlVMTCkgeworKyAgICAgICAgICBmcmVlX2ZuKGl0ZW0pOworKyAgICAgICAgICBy ZXR1cm4gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgIGl0ZW0tPmZyZWVmbiA9IGZyZWVfZm47 CisrICAgICAgICBpZiAoc3RvcmFnZV90eXBlID09IEJJTk5fU1RPUkFHRV9TVFJJTkcpIHNpemUt LTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgaXRlbS0+cHRyID0gcHZhbHVlOworKyAgICAg ICAgaXRlbS0+ZnJlZWZuID0gZnJlZWZuOworKyAgICAgIH0KKysgICAgICBpdGVtLT5zaXplID0g c2l6ZTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBpdGVtLT5wdHIgPSAm aXRlbS0+dmludDMyOworKyAgICAgIGNvcHlfcmF3X3ZhbHVlKHB2YWx1ZSwgaXRlbS0+cHRyLCBz dG9yYWdlX3R5cGUpOworKyAgICB9CisrICB9CisrICByZXR1cm4gaXRlbTsKKyt9CisrCisrLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX3NldF9z dHJpbmcoYmlubiAqaXRlbSwgY2hhciAqc3RyLCBiaW5uX21lbV9mcmVlIHBmcmVlKSB7CisrCisr ICBpZiAoaXRlbSA9PSBOVUxMIHx8IHN0ciA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrCisrICBp ZiAocGZyZWUgPT0gQklOTl9UUkFOU0lFTlQpIHsKKysgICAgaXRlbS0+cHRyID0gYmlubl9tZW1k dXAoc3RyLCBzdHJsZW4oc3RyKSArIDEpOworKyAgICBpZiAoaXRlbS0+cHRyID09IE5VTEwpIHJl dHVybiBGQUxTRTsKKysgICAgaXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKKysgIH0gZWxzZSB7Cisr ICAgIGl0ZW0tPnB0ciA9IHN0cjsKKysgICAgaXRlbS0+ZnJlZWZuID0gcGZyZWU7CisrICB9Cisr CisrICBpdGVtLT50eXBlID0gQklOTl9TVFJJTkc7CisrICByZXR1cm4gVFJVRTsKKysKKyt9Cisr CisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5u X3NldF9ibG9iKGJpbm4gKml0ZW0sIHZvaWQgKnB0ciwgaW50IHNpemUsIGJpbm5fbWVtX2ZyZWUg cGZyZWUpIHsKKysKKysgIGlmIChpdGVtID09IE5VTEwgfHwgcHRyID09IE5VTEwpIHJldHVybiBG QUxTRTsKKysKKysgIGlmIChwZnJlZSA9PSBCSU5OX1RSQU5TSUVOVCkgeworKyAgICBpdGVtLT5w dHIgPSBiaW5uX21lbWR1cChwdHIsIHNpemUpOworKyAgICBpZiAoaXRlbS0+cHRyID09IE5VTEwp IHJldHVybiBGQUxTRTsKKysgICAgaXRlbS0+ZnJlZWZuID0gZnJlZV9mbjsKKysgIH0gZWxzZSB7 CisrICAgIGl0ZW0tPnB0ciA9IHB0cjsKKysgICAgaXRlbS0+ZnJlZWZuID0gcGZyZWU7CisrICB9 CisrCisrICBpdGVtLT50eXBlID0gQklOTl9CTE9COworKyAgaXRlbS0+c2l6ZSA9IHNpemU7Cisr ICByZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CisrLyoqKiBSRUFEIENPTlZFUlRFRCBWQUxVRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisrCisrI2lmZGVmIF9NU0NfVkVSCisrI2RlZmluZSBhdG9pNjQgX2F0b2k2NAor KyNlbHNlCisraW50NjQgYXRvaTY0KGNoYXIgKnN0cikgeworKyAgaW50NjQgcmV0dmFsOworKyAg aW50IGlzX25lZ2F0aXZlPTA7CisrCisrICBpZiAoKnN0ciA9PSAnLScpIHsKKysgICAgaXNfbmVn YXRpdmUgPSAxOworKyAgICBzdHIrKzsKKysgIH0KKysgIHJldHZhbCA9IDA7CisrICBmb3IgKDsg KnN0cjsgc3RyKyspIHsKKysgICAgcmV0dmFsID0gMTAgKiByZXR2YWwgKyAoKnN0ciAtICcwJyk7 CisrICB9CisrICBpZiAoaXNfbmVnYXRpdmUpIHJldHZhbCAqPSAtMTsKKysgIHJldHVybiByZXR2 YWw7CisrfQorKyNlbmRpZgorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BS SVZBVEUgQk9PTCBpc19pbnRlZ2VyKGNoYXIgKnApIHsKKysgIEJPT0wgcmV0dmFsOworKworKyAg aWYgKHAgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKyAgaWYgKCpwID09ICctJykgcCsrOworKyAg aWYgKCpwID09IDApIHJldHVybiBGQUxTRTsKKysKKysgIHJldHZhbCA9IFRSVUU7CisrCisrICBm b3IgKDsgKnA7IHArKykgeworKyAgICBpZiAoICgqcCA8ICcwJyB8fCAqcCA+ICc5JykgKSB7Cisr ICAgICAgcmV0dmFsID0gRkFMU0U7CisrICAgIH0KKysgIH0KKysKKysgIHJldHVybiByZXR2YWw7 CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytCSU5OX1BSSVZBVEUgQk9PTCBp c19mbG9hdChjaGFyICpwKSB7CisrICBCT09MIHJldHZhbCwgbnVtYmVyX2ZvdW5kPUZBTFNFOwor KworKyAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKyAgaWYgKCpwID09ICctJykgcCsr OworKyAgaWYgKCpwID09IDApIHJldHVybiBGQUxTRTsKKysKKysgIHJldHZhbCA9IFRSVUU7Cisr CisrICBmb3IgKDsgKnA7IHArKykgeworKyAgICBpZiAoKnAgPT0gJy4nIHx8ICpwID09ICcsJykg eworKyAgICAgIGlmICghbnVtYmVyX2ZvdW5kKSByZXR2YWwgPSBGQUxTRTsKKysgICAgfSBlbHNl IGlmICggKnAgPj0gJzAnICYmICpwIDw9ICc5JyApIHsKKysgICAgICBudW1iZXJfZm91bmQgPSBU UlVFOworKyAgICB9IGVsc2UgeworKyAgICAgIHJldHVybiBGQUxTRTsKKysgICAgfQorKyAgfQor KworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrQklOTl9QUklWQVRFIEJPT0wgaXNfYm9vbF9zdHIoY2hhciAqc3RyLCBCT09MICpw Ym9vbCkgeworKyAgaW50NjQgIHZpbnQ7CisrICBkb3VibGUgdmRvdWJsZTsKKysKKysgIGlmIChz dHIgPT0gTlVMTCB8fCBwYm9vbCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisrCisrICBpZiAoc3Ry aWNtcChzdHIsICJ0cnVlIikgPT0gMCkgZ290byBsb2NfdHJ1ZTsKKysgIGlmIChzdHJpY21wKHN0 ciwgInllcyIpID09IDApIGdvdG8gbG9jX3RydWU7CisrICBpZiAoc3RyaWNtcChzdHIsICJvbiIp ID09IDApIGdvdG8gbG9jX3RydWU7CisrICAvL2lmIChzdHJpY21wKHN0ciwgIjEiKSA9PSAwKSBn b3RvIGxvY190cnVlOworKworKyAgaWYgKHN0cmljbXAoc3RyLCAiZmFsc2UiKSA9PSAwKSBnb3Rv IGxvY19mYWxzZTsKKysgIGlmIChzdHJpY21wKHN0ciwgIm5vIikgPT0gMCkgZ290byBsb2NfZmFs c2U7CisrICBpZiAoc3RyaWNtcChzdHIsICJvZmYiKSA9PSAwKSBnb3RvIGxvY19mYWxzZTsKKysg IC8vaWYgKHN0cmljbXAoc3RyLCAiMCIpID09IDApIGdvdG8gbG9jX2ZhbHNlOworKworKyAgaWYg KGlzX2ludGVnZXIoc3RyKSkgeworKyAgICB2aW50ID0gYXRvaTY0KHN0cik7CisrICAgICpwYm9v bCA9ICh2aW50ICE9IDApID8gVFJVRSA6IEZBTFNFOworKyAgICByZXR1cm4gVFJVRTsKKysgIH0g ZWxzZSBpZiAoaXNfZmxvYXQoc3RyKSkgeworKyAgICB2ZG91YmxlID0gYXRvZihzdHIpOworKyAg ICAqcGJvb2wgPSAodmRvdWJsZSAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKKysgICAgcmV0dXJuIFRS VUU7CisrICB9CisrCisrICByZXR1cm4gRkFMU0U7CisrCisrbG9jX3RydWU6CisrICAqcGJvb2wg PSBUUlVFOworKyAgcmV0dXJuIFRSVUU7CisrCisrbG9jX2ZhbHNlOgorKyAgKnBib29sID0gRkFM U0U7CisrICByZXR1cm4gVFJVRTsKKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2dldF9pbnQzMihiaW5uICp2YWx1ZSwgaW50 ICpwaW50KSB7CisrCisrICBpZiAodmFsdWUgPT0gTlVMTCB8fCBwaW50ID09IE5VTEwpIHJldHVy biBGQUxTRTsKKysKKysgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1J TFlfSU5UKSB7CisrICAgIHJldHVybiBjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCBwaW50LCB2 YWx1ZS0+dHlwZSwgQklOTl9JTlQzMik7CisrICB9CisrCisrICBzd2l0Y2ggKHZhbHVlLT50eXBl KSB7CisrICBjYXNlIEJJTk5fRkxPQVQ6CisrICAgIGlmICh2YWx1ZS0+dmZsb2F0IDwgKGZsb2F0 KUlOVDMyX01JTiB8fCB2YWx1ZS0+dmZsb2F0ID4gKGZsb2F0KUlOVDMyX01BWCkgcmV0dXJuIEZB TFNFOworKyAgICAqcGludCA9IHJvdW5kdmFsKHZhbHVlLT52ZmxvYXQpOworKyAgICBicmVhazsK KysgIGNhc2UgQklOTl9ET1VCTEU6CisrICAgIGlmICh2YWx1ZS0+dmRvdWJsZSA8IChkb3VibGUp SU5UMzJfTUlOIHx8IHZhbHVlLT52ZG91YmxlID4gKGRvdWJsZSlJTlQzMl9NQVgpIHJldHVybiBG QUxTRTsKKysgICAgKnBpbnQgPSByb3VuZHZhbCh2YWx1ZS0+dmRvdWJsZSk7CisrICAgIGJyZWFr OworKyAgY2FzZSBCSU5OX1NUUklORzoKKysgICAgaWYgKGlzX2ludGVnZXIoKGNoYXIqKXZhbHVl LT5wdHIpKQorKyAgICAgICpwaW50ID0gYXRvaSgoY2hhciopdmFsdWUtPnB0cik7CisrICAgIGVs c2UgaWYgKGlzX2Zsb2F0KChjaGFyKil2YWx1ZS0+cHRyKSkKKysgICAgICAqcGludCA9IHJvdW5k dmFsKGF0b2YoKGNoYXIqKXZhbHVlLT5wdHIpKTsKKysgICAgZWxzZQorKyAgICAgIHJldHVybiBG QUxTRTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fQk9PTDoKKysgICAgKnBpbnQgPSB2YWx1 ZS0+dmJvb2w7CisrICAgIGJyZWFrOworKyAgZGVmYXVsdDoKKysgICAgcmV0dXJuIEZBTFNFOwor KyAgfQorKworKyAgcmV0dXJuIFRSVUU7CisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9nZXRfaW50NjQoYmlubiAqdmFsdWUsIGlu dDY0ICpwaW50KSB7CisrCisrICBpZiAodmFsdWUgPT0gTlVMTCB8fCBwaW50ID09IE5VTEwpIHJl dHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlX2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9G QU1JTFlfSU5UKSB7CisrICAgIHJldHVybiBjb3B5X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCBwaW50 LCB2YWx1ZS0+dHlwZSwgQklOTl9JTlQ2NCk7CisrICB9CisrCisrICBzd2l0Y2ggKHZhbHVlLT50 eXBlKSB7CisrICBjYXNlIEJJTk5fRkxPQVQ6CisrICAgIGlmICh2YWx1ZS0+dmZsb2F0IDwgKGZs b2F0KUlOVDY0X01JTiB8fCB2YWx1ZS0+dmZsb2F0ID4gKGZsb2F0KUlOVDY0X01BWCkgcmV0dXJu IEZBTFNFOworKyAgICAqcGludCA9IHJvdW5kdmFsKHZhbHVlLT52ZmxvYXQpOworKyAgICBicmVh azsKKysgIGNhc2UgQklOTl9ET1VCTEU6CisrICAgIGlmICh2YWx1ZS0+dmRvdWJsZSA8IChkb3Vi bGUpSU5UNjRfTUlOIHx8IHZhbHVlLT52ZG91YmxlID4gKGRvdWJsZSlJTlQ2NF9NQVgpIHJldHVy biBGQUxTRTsKKysgICAgKnBpbnQgPSByb3VuZHZhbCh2YWx1ZS0+dmRvdWJsZSk7CisrICAgIGJy ZWFrOworKyAgY2FzZSBCSU5OX1NUUklORzoKKysgICAgaWYgKGlzX2ludGVnZXIoKGNoYXIqKXZh bHVlLT5wdHIpKQorKyAgICAgICpwaW50ID0gYXRvaTY0KChjaGFyKil2YWx1ZS0+cHRyKTsKKysg ICAgZWxzZSBpZiAoaXNfZmxvYXQoKGNoYXIqKXZhbHVlLT5wdHIpKQorKyAgICAgICpwaW50ID0g cm91bmR2YWwoYXRvZigoY2hhciopdmFsdWUtPnB0cikpOworKyAgICBlbHNlCisrICAgICAgcmV0 dXJuIEZBTFNFOworKyAgICBicmVhazsKKysgIGNhc2UgQklOTl9CT09MOgorKyAgICAqcGludCA9 IHZhbHVlLT52Ym9vbDsKKysgICAgYnJlYWs7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4gRkFM U0U7CisrICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2dldF9kb3VibGUoYmlubiAqdmFs dWUsIGRvdWJsZSAqcGZsb2F0KSB7CisrICBpbnQ2NCB2aW50OworKworKyAgaWYgKHZhbHVlID09 IE5VTEwgfHwgcGZsb2F0ID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBlX2Zh bWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7CisrICAgIGlmIChjb3B5X2lu dF92YWx1ZSh2YWx1ZS0+cHRyLCAmdmludCwgdmFsdWUtPnR5cGUsIEJJTk5fSU5UNjQpID09IEZB TFNFKSByZXR1cm4gRkFMU0U7CisrICAgICpwZmxvYXQgPSAoZG91YmxlKSB2aW50OworKyAgICBy ZXR1cm4gVFJVRTsKKysgIH0KKysKKysgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsKKysgIGNhc2Ug QklOTl9GTE9BVDoKKysgICAgKnBmbG9hdCA9IHZhbHVlLT52ZmxvYXQ7CisrICAgIGJyZWFrOwor KyAgY2FzZSBCSU5OX0RPVUJMRToKKysgICAgKnBmbG9hdCA9IHZhbHVlLT52ZG91YmxlOworKyAg ICBicmVhazsKKysgIGNhc2UgQklOTl9TVFJJTkc6CisrICAgIGlmIChpc19pbnRlZ2VyKChjaGFy Kil2YWx1ZS0+cHRyKSkKKysgICAgICAqcGZsb2F0ID0gKGRvdWJsZSkgYXRvaTY0KChjaGFyKil2 YWx1ZS0+cHRyKTsKKysgICAgZWxzZSBpZiAoaXNfZmxvYXQoKGNoYXIqKXZhbHVlLT5wdHIpKQor KyAgICAgICpwZmxvYXQgPSBhdG9mKChjaGFyKil2YWx1ZS0+cHRyKTsKKysgICAgZWxzZQorKyAg ICAgIHJldHVybiBGQUxTRTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fQk9PTDoKKysgICAg KnBmbG9hdCA9IHZhbHVlLT52Ym9vbDsKKysgICAgYnJlYWs7CisrICBkZWZhdWx0OgorKyAgICBy ZXR1cm4gRkFMU0U7CisrICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisrCisrQk9PTCBBUElFTlRSWSBiaW5uX2dldF9ib29sKGJp bm4gKnZhbHVlLCBCT09MICpwYm9vbCkgeworKyAgaW50NjQgdmludDsKKysKKysgIGlmICh2YWx1 ZSA9PSBOVUxMIHx8IHBib29sID09IE5VTEwpIHJldHVybiBGQUxTRTsKKysKKysgIGlmICh0eXBl X2ZhbWlseSh2YWx1ZS0+dHlwZSkgPT0gQklOTl9GQU1JTFlfSU5UKSB7CisrICAgIGlmIChjb3B5 X2ludF92YWx1ZSh2YWx1ZS0+cHRyLCAmdmludCwgdmFsdWUtPnR5cGUsIEJJTk5fSU5UNjQpID09 IEZBTFNFKSByZXR1cm4gRkFMU0U7CisrICAgICpwYm9vbCA9ICh2aW50ICE9IDApID8gVFJVRSA6 IEZBTFNFOworKyAgICByZXR1cm4gVFJVRTsKKysgIH0KKysKKysgIHN3aXRjaCAodmFsdWUtPnR5 cGUpIHsKKysgIGNhc2UgQklOTl9CT09MOgorKyAgICAqcGJvb2wgPSB2YWx1ZS0+dmJvb2w7Cisr ICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX0ZMT0FUOgorKyAgICAqcGJvb2wgPSAodmFsdWUtPnZm bG9hdCAhPSAwKSA/IFRSVUUgOiBGQUxTRTsKKysgICAgYnJlYWs7CisrICBjYXNlIEJJTk5fRE9V QkxFOgorKyAgICAqcGJvb2wgPSAodmFsdWUtPnZkb3VibGUgIT0gMCkgPyBUUlVFIDogRkFMU0U7 CisrICAgIGJyZWFrOworKyAgY2FzZSBCSU5OX1NUUklORzoKKysgICAgcmV0dXJuIGlzX2Jvb2xf c3RyKChjaGFyKil2YWx1ZS0+cHRyLCBwYm9vbCk7CisrICBkZWZhdWx0OgorKyAgICByZXR1cm4g RkFMU0U7CisrICB9CisrCisrICByZXR1cm4gVFJVRTsKKyt9CisrCisrLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrCisrY2hhciAqIEFQSUVOVFJZIGJpbm5fZ2V0X3N0cihiaW5uICp2 YWx1ZSkgeworKyAgaW50NjQgdmludDsKKysgIGNoYXIgYnVmWzEyOF07CisrCisrICBpZiAodmFs dWUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisrCisrICBpZiAodHlwZV9mYW1pbHkodmFsdWUtPnR5 cGUpID09IEJJTk5fRkFNSUxZX0lOVCkgeworKyAgICBpZiAoY29weV9pbnRfdmFsdWUodmFsdWUt PnB0ciwgJnZpbnQsIHZhbHVlLT50eXBlLCBCSU5OX0lOVDY0KSA9PSBGQUxTRSkgcmV0dXJuIE5V TEw7CisrICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1ZiwgIiUiIElOVDY0X0ZPUk1BVCwgdmlu dCk7CisrICAgIGdvdG8gbG9jX2NvbnZlcnRfdmFsdWU7CisrICB9CisrCisrICBzd2l0Y2ggKHZh bHVlLT50eXBlKSB7CisrICBjYXNlIEJJTk5fRkxPQVQ6CisrICAgIHZhbHVlLT52ZG91YmxlID0g dmFsdWUtPnZmbG9hdDsKKysgICAgLyogZmFsbCB0aHJvdWdoICovCisrICBjYXNlIEJJTk5fRE9V QkxFOgorKyAgICBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlZyIsIHZhbHVlLT52ZG91Ymxl KTsKKysgICAgZ290byBsb2NfY29udmVydF92YWx1ZTsKKysgIGNhc2UgQklOTl9TVFJJTkc6Cisr ICAgIHJldHVybiAoY2hhciopIHZhbHVlLT5wdHI7CisrICBjYXNlIEJJTk5fQk9PTDoKKysgICAg aWYgKHZhbHVlLT52Ym9vbCkKKysgICAgICBzdHJjcHkoYnVmLCAidHJ1ZSIpOworKyAgICBlbHNl CisrICAgICAgc3RyY3B5KGJ1ZiwgImZhbHNlIik7CisrICAgIGdvdG8gbG9jX2NvbnZlcnRfdmFs dWU7CisrICB9CisrCisrICByZXR1cm4gTlVMTDsKKysKKytsb2NfY29udmVydF92YWx1ZToKKysK KysgIC8vdmFsdWUtPnZpbnQ2NCA9IDA7CisrICB2YWx1ZS0+cHRyID0gc3RyZHVwKGJ1Zik7Cisr ICBpZiAodmFsdWUtPnB0ciA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKysgIHZhbHVlLT5mcmVlZm4g PSBmcmVlOworKyAgdmFsdWUtPnR5cGUgPSBCSU5OX1NUUklORzsKKysgIHJldHVybiAoY2hhciop IHZhbHVlLT5wdHI7CisrCisrfQorKworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor Ky8qKiogR0VORVJBTCBGVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworKworK0JPT0wgQVBJRU5UUlkgYmlubl9pc19jb250YWluZXIoYmlubiAqaXRlbSkg eworKworKyAgaWYgKGl0ZW0gPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworKworKyAgc3dpdGNoIChp dGVtLT50eXBlKSB7CisrICBjYXNlIEJJTk5fTElTVDoKKysgIGNhc2UgQklOTl9NQVA6CisrICBj YXNlIEJJTk5fT0JKRUNUOgorKyAgICByZXR1cm4gVFJVRTsKKysgIGRlZmF1bHQ6CisrICAgIHJl dHVybiBGQUxTRTsKKysgIH0KKysKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9iaW5uLmggb3BlbnNzaC0xMC4zcDEv Ymlubi5oCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9iaW5uLmgJMTk3MC0wMS0wMSAwMTowMDow MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9iaW5uLmgJMjAyNi0wNy0wMiAw MDoyNzoyOS43MTg5NDQwODggKzAyMDAKK0BAIC0wLDAgKzEsOTQ1IEBACisrCisrLy8gVE8gRU5B QkxFIElOTElORSBGVU5DVElPTlM6CisrLy8gICBPTiBNU1ZDOiBlbmFibGUgdGhlICdJbmxpbmUg RnVuY3Rpb24gRXhwYW5zaW9uJyAoL09iMikgY29tcGlsZXIgb3B0aW9uLCBhbmQgbWF5YmUgdGhl CisrLy8gICAgICAgICAgICAnV2hvbGUgUHJvZ3JhbSBPcHRpbWl0YXppb24nICgvR0wpLCB0aGF0 IHJlcXVpcmVzIHRoZQorKy8vICAgICAgICAgICAgJ0xpbmsgVGltZSBDb2RlIEdlbmVyYXRpb24n ICgvTFRDRykgbGlua2VyIG9wdGlvbiB0byBiZSBlbmFibGVkIHRvbworKworKyNpZm5kZWYgQklO Tl9ICisrI2RlZmluZSBCSU5OX0gKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMi IHsKKysjZW5kaWYKKysKKysjZGVmaW5lIEJJTk5fVkVSU0lPTiAiMy4wLjAiICAvKiB1c2luZyBz ZW1hbnRpYyB2ZXJzaW9uaW5nICovCisrCisrI2lmbmRlZiBOVUxMCisrI2lmZGVmIF9fY3BsdXNw bHVzCisrI2RlZmluZSBOVUxMICAgIDAKKysjZWxzZQorKyNkZWZpbmUgTlVMTCAgICAoKHZvaWQg KikwKQorKyNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgVFJVRQorKyNkZWZpbmUgVFJVRSAg MQorKyNlbmRpZgorKworKyNpZm5kZWYgRkFMU0UKKysjZGVmaW5lIEZBTFNFIDAKKysjZW5kaWYK KysKKysjaWZuZGVmIEJPT0wKKyt0eXBlZGVmIGludCBCT09MOworKyNlbmRpZgorKworKyNpZm5k ZWYgQVBJRU5UUlkKKysgI2lmZGVmIF9XSU4zMgorKyAgI2RlZmluZSBBUElFTlRSWSBfX3N0ZGNh bGwKKysgI2Vsc2UKKysgIC8vI2RlZmluZSBBUElFTlRSWSBfX2F0dHJpYnV0ZV9fKChzdGRjYWxs KSkKKysgICNkZWZpbmUgQVBJRU5UUlkgCisrICNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYg QklOTl9QUklWQVRFCisrICNpZmRlZiBERUJVRworKyAgI2RlZmluZSBCSU5OX1BSSVZBVEUKKysg I2Vsc2UKKysgICNkZWZpbmUgQklOTl9QUklWQVRFICBzdGF0aWMKKysgI2VuZGlmCisrI2VuZGlm CisrCisrI2lmZGVmIF9NU0NfVkVSCisrICAjZGVmaW5lIElOTElORSAgICAgICAgIF9faW5saW5l CisrICAjZGVmaW5lIEFMV0FZU19JTkxJTkUgIF9fZm9yY2VpbmxpbmUKKysjZWxzZQorKyAgLy8g eW91IGNhbiBjaGFuZ2UgdG8gJ2V4dGVybiBpbmxpbmUnIGlmIHVzaW5nIHRoZSBnY2Mgb3B0aW9u IC1mbHRvCisrICAjZGVmaW5lIElOTElORSAgICAgICAgIHN0YXRpYyBpbmxpbmUKKysgICNkZWZp bmUgQUxXQVlTX0lOTElORSAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5s aW5lKSkKKysjZW5kaWYKKysKKysjaWZuZGVmIGludDY0CisrI2lmIGRlZmluZWQoX01TQ19WRVIp IHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQorKyAgdHlwZWRlZiBfX2ludDY0IGludDY0OworKyAg dHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NDsKKysjZWxzZQorKyAgdHlwZWRlZiBsb25n IGxvbmcgaW50IGludDY0OworKyAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2 NDsKKysjZW5kaWYKKysjZW5kaWYKKysKKysjaWZkZWYgX1dJTjMyCisrI2RlZmluZSBJTlQ2NF9G T1JNQVQgICJJNjRpIgorKyNkZWZpbmUgVUlOVDY0X0ZPUk1BVCAiSTY0dSIKKysjZGVmaW5lIElO VDY0X0hFWF9GT1JNQVQgICJJNjR4IgorKyNlbHNlCisrI2RlZmluZSBJTlQ2NF9GT1JNQVQgICJs bGkiCisrI2RlZmluZSBVSU5UNjRfRk9STUFUICJsbHUiCisrI2RlZmluZSBJTlQ2NF9IRVhfRk9S TUFUICAibGx4IgorKyNlbmRpZgorKworKworKy8vIEJJTk4gQ09OU1RBTlRTICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrI2RlZmluZSBJTlZBTElEX0JJTk4g ICAgICAgICAwCisrCisrLy8gU3RvcmFnZSBEYXRhIFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKysKKysjZGVmaW5lIEJJTk5fU1RPUkFHRV9OT0JZVEVTICAgMHgw MAorKyNkZWZpbmUgQklOTl9TVE9SQUdFX0JZVEUgICAgICAweDIwICAvLyAgOCBiaXRzCisrI2Rl ZmluZSBCSU5OX1NUT1JBR0VfV09SRCAgICAgIDB4NDAgIC8vIDE2IGJpdHMgLS0gdGhlIGVuZGlh bmVzcyAoYnl0ZSBvcmRlcikgaXMgYXV0b21hdGljYWxseSBjb3JyZWN0ZWQKKysjZGVmaW5lIEJJ Tk5fU1RPUkFHRV9EV09SRCAgICAgMHg2MCAgLy8gMzIgYml0cyAtLSB0aGUgZW5kaWFuZXNzIChi eXRlIG9yZGVyKSBpcyBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZAorKyNkZWZpbmUgQklOTl9TVE9S QUdFX1FXT1JEICAgICAweDgwICAvLyA2NCBiaXRzIC0tIHRoZSBlbmRpYW5lc3MgKGJ5dGUgb3Jk ZXIpIGlzIGF1dG9tYXRpY2FsbHkgY29ycmVjdGVkCisrI2RlZmluZSBCSU5OX1NUT1JBR0VfU1RS SU5HICAgIDB4QTAgIC8vIEFyZSBzdG9yZWQgd2l0aCBudWxsIHRlcm1pbmF0aW9uCisrI2RlZmlu ZSBCSU5OX1NUT1JBR0VfQkxPQiAgICAgIDB4QzAKKysjZGVmaW5lIEJJTk5fU1RPUkFHRV9DT05U QUlORVIgMHhFMAorKyNkZWZpbmUgQklOTl9TVE9SQUdFX1ZJUlRVQUwgICAweDgwMDAwCisrCisr I2RlZmluZSBCSU5OX1NUT1JBR0VfTUlOICAgICAgIEJJTk5fU1RPUkFHRV9OT0JZVEVTCisrI2Rl ZmluZSBCSU5OX1NUT1JBR0VfTUFYICAgICAgIEJJTk5fU1RPUkFHRV9DT05UQUlORVIKKysKKysj ZGVmaW5lIEJJTk5fU1RPUkFHRV9NQVNLICAgICAgMHhFMAorKyNkZWZpbmUgQklOTl9TVE9SQUdF X01BU0sxNiAgICAweEUwMDAKKysjZGVmaW5lIEJJTk5fU1RPUkFHRV9IQVNfTU9SRSAgMHgxMAor KyNkZWZpbmUgQklOTl9UWVBFX01BU0sgICAgICAgICAweDBGCisrI2RlZmluZSBCSU5OX1RZUEVf TUFTSzE2ICAgICAgIDB4MEZGRgorKworKyNkZWZpbmUgQklOTl9NQVhfVkFMVUVfTUFTSyAgICAw eEZGRkZGCisrCisrCisrLy8gRGF0YSBGb3JtYXRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKysKKysjZGVmaW5lIEJJTk5fTElTVCAgICAgIDB4RTAKKysjZGVm aW5lIEJJTk5fTUFQICAgICAgIDB4RTEKKysjZGVmaW5lIEJJTk5fT0JKRUNUICAgIDB4RTIKKysK KysjZGVmaW5lIEJJTk5fTlVMTCAgICAgIDB4MDAKKysjZGVmaW5lIEJJTk5fVFJVRSAgICAgIDB4 MDEKKysjZGVmaW5lIEJJTk5fRkFMU0UgICAgIDB4MDIKKysKKysjZGVmaW5lIEJJTk5fVUlOVDgg ICAgIDB4MjAgIC8vIChCWVRFKSAodW5zaWduZWQgYnl0ZSkgSXMgdGhlIGRlZmF1bHQgZm9ybWF0 IGZvciB0aGUgQllURSB0eXBlCisrI2RlZmluZSBCSU5OX0lOVDggICAgICAweDIxICAvLyAoQllU RSkgKHNpZ25lZCBieXRlLCBmcm9tIC0xMjggdG8gKzEyNy4gVGhlIDB4ODAgaXMgdGhlIHNpZ24g Yml0LCBzbyB0aGUgcmFuZ2UgaW4gaGV4IGlzIGZyb20gMHg4MCBbLTEyOF0gdG8gMHg3RiBbMTI3 XSwgYmVpbmcgMHgwMCA9IDAgYW5kIDB4RkYgPSAtMSkKKysjZGVmaW5lIEJJTk5fVUlOVDE2ICAg IDB4NDAgIC8vIChXT1JEKSAodW5zaWduZWQgaW50ZWdlcikgSXMgdGhlIGRlZmF1bHQgZm9ybWF0 IGZvciB0aGUgV09SRCB0eXBlCisrI2RlZmluZSBCSU5OX0lOVDE2ICAgICAweDQxICAvLyAoV09S RCkgKHNpZ25lZCBpbnRlZ2VyKQorKyNkZWZpbmUgQklOTl9VSU5UMzIgICAgMHg2MCAgLy8gKERX T1JEKSAodW5zaWduZWQgaW50ZWdlcikgSXMgdGhlIGRlZmF1bHQgZm9ybWF0IGZvciB0aGUgRFdP UkQgdHlwZQorKyNkZWZpbmUgQklOTl9JTlQzMiAgICAgMHg2MSAgLy8gKERXT1JEKSAoc2lnbmVk IGludGVnZXIpCisrI2RlZmluZSBCSU5OX1VJTlQ2NCAgICAweDgwICAvLyAoUVdPUkQpICh1bnNp Z25lZCBpbnRlZ2VyKSBJcyB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yIHRoZSBRV09SRCB0eXBlCisr I2RlZmluZSBCSU5OX0lOVDY0ICAgICAweDgxICAvLyAoUVdPUkQpIChzaWduZWQgaW50ZWdlcikK KysKKysjZGVmaW5lIEJJTk5fU0NIQVIgICAgIEJJTk5fSU5UOAorKyNkZWZpbmUgQklOTl9VQ0hB UiAgICAgQklOTl9VSU5UOAorKworKyNkZWZpbmUgQklOTl9TVFJJTkcgICAgMHhBMCAgLy8gKFNU UklORykgUmF3IFN0cmluZworKyNkZWZpbmUgQklOTl9EQVRFVElNRSAgMHhBMSAgLy8gKFNUUklO RykgaXNvODYwMSBmb3JtYXQgLS0gWVlZWS1NTS1ERCBISDpNTTpTUworKyNkZWZpbmUgQklOTl9E QVRFICAgICAgMHhBMiAgLy8gKFNUUklORykgaXNvODYwMSBmb3JtYXQgLS0gWVlZWS1NTS1ERAor KyNkZWZpbmUgQklOTl9USU1FICAgICAgMHhBMyAgLy8gKFNUUklORykgaXNvODYwMSBmb3JtYXQg LS0gSEg6TU06U1MKKysjZGVmaW5lIEJJTk5fREVDSU1BTCAgIDB4QTQgIC8vIChTVFJJTkcpIEhp Z2ggcHJlY2lzaW9uIG51bWJlciAtIHVzZWQgZm9yIGdlbmVyaWMgZGVjaW1hbCB2YWx1ZXMgYW5k IGZvciB0aG9zZSBvbmVzIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIHRoZSBmbG9hdDY0 IGZvcm1hdC4KKysjZGVmaW5lIEJJTk5fQ1VSUkVOQ1lTVFIgIDB4QTUgIC8vIChTVFJJTkcpIFdp dGggY3VycmVuY3kgdW5pdC9zeW1ib2wgLSBjaGVjayBmb3Igc29tZSBpc28gc3RhbmRhcmQgZm9y bWF0CisrI2RlZmluZSBCSU5OX1NJTkdMRV9TVFIgICAweEE2ICAvLyAoU1RSSU5HKSBDYW4gYmUg cmVzdG9yZWQgdG8gZmxvYXQzMgorKyNkZWZpbmUgQklOTl9ET1VCTEVfU1RSICAgMHhBNyAgLy8g KFNUUklORykgTWF5IGJlIHJlc3RvcmVkIHRvIGZsb2F0NjQKKysKKysjZGVmaW5lIEJJTk5fRkxP QVQzMiAgIDB4NjIgIC8vIChEV09SRCkgCisrI2RlZmluZSBCSU5OX0ZMT0FUNjQgICAweDgyICAv LyAoUVdPUkQpIAorKyNkZWZpbmUgQklOTl9GTE9BVCAgICAgQklOTl9GTE9BVDMyCisrI2RlZmlu ZSBCSU5OX1NJTkdMRSAgICBCSU5OX0ZMT0FUMzIKKysjZGVmaW5lIEJJTk5fRE9VQkxFICAgIEJJ Tk5fRkxPQVQ2NAorKworKyNkZWZpbmUgQklOTl9DVVJSRU5DWSAgMHg4MyAgLy8gKFFXT1JEKQor KworKyNkZWZpbmUgQklOTl9CTE9CICAgICAgMHhDMCAgLy8gKEJMT0IpIFJhdyBCbG9iCisrCisr CisrLy8gdmlydHVhbCB0eXBlczoKKysKKysjZGVmaW5lIEJJTk5fQk9PTCAgICAgIDB4ODAwNjEg IC8vIChEV09SRCkgVGhlIHZhbHVlIG1heSBiZSAwIG9yIDEKKysKKysjaWZkZWYgQklOTl9FWFRF TkRFRAorKy8vI2RlZmluZSBCSU5OX1NJTkdMRSAgICAweDgwMEExICAvLyAoU1RSSU5HKSBDYW4g YmUgcmVzdG9yZWQgdG8gZmxvYXQzMgorKy8vI2RlZmluZSBCSU5OX0RPVUJMRSAgICAweDgwMEEy ICAvLyAoU1RSSU5HKSBNYXkgYmUgcmVzdG9yZWQgdG8gZmxvYXQ2NAorKyNlbmRpZgorKworKy8v I2RlZmluZSBCSU5OX0JJTk4gICAgICAweDgwMEUxICAvLyAoQ09OVEFJTkVSKQorKy8vI2RlZmlu ZSBCSU5OX0JJTk5fQlVGRkVSICAweDgwMEMxICAvLyAoQkxPQikgdXNlciBiaW5uLiBpdCdzIG5v dCBvcGVuIGJ5IHRoZSBwYXJzZXIKKysKKysKKysvLyBleHRlbmRlZCBjb250ZW50IHR5cGVzOgor KworKy8vIHN0cmluZ3M6CisrCisrI2RlZmluZSBCSU5OX0hUTUwgICAgICAweEIwMDEKKysjZGVm aW5lIEJJTk5fWE1MICAgICAgIDB4QjAwMgorKyNkZWZpbmUgQklOTl9KU09OICAgICAgMHhCMDAz CisrI2RlZmluZSBCSU5OX0pBVkFTQ1JJUFQgMHhCMDA0CisrI2RlZmluZSBCSU5OX0NTUyAgICAg ICAweEIwMDUKKysKKysvLyBibG9iczoKKysKKysjZGVmaW5lIEJJTk5fSlBFRyAgICAgIDB4RDAw MQorKyNkZWZpbmUgQklOTl9HSUYgICAgICAgMHhEMDAyCisrI2RlZmluZSBCSU5OX1BORyAgICAg ICAweEQwMDMKKysjZGVmaW5lIEJJTk5fQk1QICAgICAgIDB4RDAwNAorKworKworKy8vIHR5cGUg ZmFtaWxpZXMKKysjZGVmaW5lIEJJTk5fRkFNSUxZX05PTkUgICAweDAwCisrI2RlZmluZSBCSU5O X0ZBTUlMWV9OVUxMICAgMHhmMQorKyNkZWZpbmUgQklOTl9GQU1JTFlfSU5UICAgIDB4ZjIKKysj ZGVmaW5lIEJJTk5fRkFNSUxZX0ZMT0FUICAweGYzCisrI2RlZmluZSBCSU5OX0ZBTUlMWV9TVFJJ TkcgMHhmNAorKyNkZWZpbmUgQklOTl9GQU1JTFlfQkxPQiAgIDB4ZjUKKysjZGVmaW5lIEJJTk5f RkFNSUxZX0JPT0wgICAweGY2CisrI2RlZmluZSBCSU5OX0ZBTUlMWV9CSU5OICAgMHhmNworKwor Ky8vIGludGVnZXIgdHlwZXMgcmVsYXRlZCB0byBzaWduYWwKKysjZGVmaW5lIEJJTk5fU0lHTkVE X0lOVCAgICAgMTEKKysjZGVmaW5lIEJJTk5fVU5TSUdORURfSU5UICAgMjIKKysKKysKKyt0eXBl ZGVmIHZvaWQgKCpiaW5uX21lbV9mcmVlKSh2b2lkKik7CisrI2RlZmluZSBCSU5OX1NUQVRJQyAg ICAgICgoYmlubl9tZW1fZnJlZSkwKQorKyNkZWZpbmUgQklOTl9UUkFOU0lFTlQgICAoKGJpbm5f bWVtX2ZyZWUpLTEpCisrCisrCisrLy8gLS0tIEJJTk4gU1RSVUNUVVJFIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrCisr c3RydWN0IGJpbm5fc3RydWN0IHsKKysgIGludCAgICBoZWFkZXI7ICAgICAvLyB0aGlzIHN0cnVj dCBoZWFkZXIgaG9sZHMgdGhlIG1hZ2ljIG51bWJlciAoQklOTl9NQUdJQykgdGhhdCBpZGVudGlm aWVzIHRoaXMgbWVtb3J5IGJsb2NrIGFzIGEgYmlubiBzdHJ1Y3R1cmUKKysgIEJPT0wgICBhbGxv Y2F0ZWQ7ICAvLyB0aGUgc3RydWN0IGNhbiBiZSBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jX2ZuKCkg b3IgY2FuIGJlIG9uIHRoZSBzdGFjaworKyAgQk9PTCAgIHdyaXRhYmxlOyAgIC8vIGRpZCBpdCB3 YXMgY3JlYXRlIGZvciB3cml0aW5nPyBpdCBjYW4gdXNlIHRoZSBwYnVmIGlmIG5vdCB1bmlmaWVk IHdpdGggcHRyCisrICBCT09MICAgZGlydHk7ICAgICAgLy8gdGhlIGNvbnRhaW5lciBoZWFkZXIg aXMgbm90IHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlcgorKyAgLy8KKysgIHZvaWQgICpwYnVmOyAgICAg ICAvLyB1c2UgKnB0ciBiZWxvdz8KKysgIEJPT0wgICBwcmVfYWxsb2NhdGVkOworKyAgaW50ICAg IGFsbG9jX3NpemU7CisrICBpbnQgICAgdXNlZF9zaXplOworKyAgLy8KKysgIGludCAgICB0eXBl OworKyAgdm9pZCAgKnB0cjsKKysgIGludCAgICBzaXplOworKyAgaW50ICAgIGNvdW50OworKyAg Ly8KKysgIGJpbm5fbWVtX2ZyZWUgZnJlZWZuOyAgLy8gdXNlZCBvbmx5IHdoZW4gdHlwZSA9PSBC SU5OX1NUUklORyBvciBCSU5OX0JMT0IKKysgIC8vCisrICB1bmlvbiB7CisrICAgIHNpZ25lZCBj aGFyICAgIHZpbnQ4OworKyAgICBzaWduZWQgc2hvcnQgICB2aW50MTY7CisrICAgIHNpZ25lZCBp bnQgICAgIHZpbnQzMjsKKysgICAgaW50NjQgICAgICAgICAgdmludDY0OworKyAgICB1bnNpZ25l ZCBjaGFyICB2dWludDg7CisrICAgIHVuc2lnbmVkIHNob3J0IHZ1aW50MTY7CisrICAgIHVuc2ln bmVkIGludCAgIHZ1aW50MzI7CisrICAgIHVpbnQ2NCAgICAgICAgIHZ1aW50NjQ7CisrICAgIC8v CisrICAgIHNpZ25lZCBjaGFyICAgIHZjaGFyOworKyAgICB1bnNpZ25lZCBjaGFyICB2dWNoYXI7 CisrICAgIHNpZ25lZCBzaG9ydCAgIHZzaG9ydDsKKysgICAgdW5zaWduZWQgc2hvcnQgdnVzaG9y dDsKKysgICAgc2lnbmVkIGludCAgICAgdmludDsKKysgICAgdW5zaWduZWQgaW50ICAgdnVpbnQ7 CisrICAgIC8vCisrICAgIGZsb2F0ICAgICAgICAgIHZmbG9hdDsKKysgICAgZG91YmxlICAgICAg ICAgdmRvdWJsZTsKKysgICAgLy8KKysgICAgQk9PTCAgICAgICAgICAgdmJvb2w7CisrICB9Owor KyAgLy8KKysgIEJPT0wgICBkaXNhYmxlX2ludF9jb21wcmVzc2lvbjsKKyt9OworKworK3R5cGVk ZWYgc3RydWN0IGJpbm5fc3RydWN0IGJpbm47CisrCisrCisrCisrLy8gLS0tIEdFTkVSQUwgRlVO Q1RJT05TICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisrCisrY2hhciAqIEFQSUVOVFJZIGJpbm5fdmVyc2lvbigpOworKworK3ZvaWQg ICBBUElFTlRSWSBiaW5uX3NldF9hbGxvY19mdW5jdGlvbnModm9pZCogKCpuZXdfbWFsbG9jKShz aXplX3QpLCB2b2lkKiAoKm5ld19yZWFsbG9jKSh2b2lkKixzaXplX3QpLCB2b2lkICgqbmV3X2Zy ZWUpKHZvaWQqKSk7CisrCisraW50ICAgIEFQSUVOVFJZIGJpbm5fY3JlYXRlX3R5cGUoaW50IHN0 b3JhZ2VfdHlwZSwgaW50IGRhdGFfdHlwZV9pbmRleCk7CisrQk9PTCAgIEFQSUVOVFJZIGJpbm5f Z2V0X3R5cGVfaW5mbyhpbnQgbG9uZ190eXBlLCBpbnQgKnBzdG9yYWdlX3R5cGUsIGludCAqcGV4 dHJhX3R5cGUpOworKworK2ludCAgICBBUElFTlRSWSBiaW5uX2dldF93cml0ZV9zdG9yYWdlKGlu dCB0eXBlKTsKKytpbnQgICAgQVBJRU5UUlkgYmlubl9nZXRfcmVhZF9zdG9yYWdlKGludCB0eXBl KTsKKysKKytCT09MICAgQVBJRU5UUlkgYmlubl9pc19jb250YWluZXIoYmlubiAqaXRlbSk7Cisr CisrCisrLy8gLS0tIFdSSVRFIEZVTkNUSU9OUyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrLy8gY3JlYXRlIGEgbmV3IGJp bm4gYWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSBzdHJ1Y3R1cmUKKytiaW5uICogQVBJRU5UUlkg Ymlubl9uZXcoaW50IHR5cGUsIGludCBzaXplLCB2b2lkICpidWZmZXIpOworK2Jpbm4gKiBBUElF TlRSWSBiaW5uX2xpc3QoKTsKKytiaW5uICogQVBJRU5UUlkgYmlubl9tYXAoKTsKKytiaW5uICog QVBJRU5UUlkgYmlubl9vYmplY3QoKTsKKysKKysvLyBjcmVhdGUgYSBuZXcgYmlubiBzdG9yaW5n IHRoZSBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrCisrQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZShi aW5uICppdGVtLCBpbnQgdHlwZSwgaW50IHNpemUsIHZvaWQgKmJ1ZmZlcik7CisrQk9PTCBBUElF TlRSWSBiaW5uX2NyZWF0ZV9saXN0KGJpbm4gKmxpc3QpOworK0JPT0wgQVBJRU5UUlkgYmlubl9j cmVhdGVfbWFwKGJpbm4gKm1hcCk7CisrQk9PTCBBUElFTlRSWSBiaW5uX2NyZWF0ZV9vYmplY3Qo YmlubiAqb2JqZWN0KTsKKysKKysvLyBjcmVhdGUgYSBuZXcgYmlubiBhcyBhIGNvcHkgZnJvbSBh bm90aGVyCisrYmlubiAqIEFQSUVOVFJZIGJpbm5fY29weShjb25zdCB2b2lkICpvbGQpOworKwor KworK0JPT0wgQVBJRU5UUlkgYmlubl9saXN0X2FkZF9uZXcoYmlubiAqbGlzdCwgYmlubiAqdmFs dWUpOworK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfc2V0X25ldyhiaW5uICptYXAsIGludCBpZCwg YmlubiAqdmFsdWUpOworK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3Rfc2V0X25ldyhiaW5uICpv YmosIGNvbnN0IGNoYXIgKmtleSwgYmlubiAqdmFsdWUpOworKworKworKy8vIGV4dGVuZGVkIGlu dGVyZmFjZQorKworK0JPT0wgICBBUElFTlRSWSBiaW5uX2xpc3RfYWRkKGJpbm4gKmxpc3QsIGlu dCB0eXBlLCB2b2lkICpwdmFsdWUsIGludCBzaXplKTsKKytCT09MICAgQVBJRU5UUlkgYmlubl9t YXBfc2V0KGJpbm4gKm1hcCwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgc2l6 ZSk7CisrQk9PTCAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X3NldChiaW5uICpvYmosIGNvbnN0IGNo YXIgKmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUpOworKworKworKy8vIHJl bGVhc2UgbWVtb3J5CisrCisrdm9pZCAgIEFQSUVOVFJZIGJpbm5fZnJlZShiaW5uICppdGVtKTsK Kyt2b2lkICogQVBJRU5UUlkgYmlubl9yZWxlYXNlKGJpbm4gKml0ZW0pOyAvLyBmcmVlIHRoZSBi aW5uIHN0cnVjdHVyZSBidXQga2VlcHMgdGhlIGJpbm4gYnVmZmVyIGFsbG9jYXRlZCwgcmV0dXJu aW5nIGEgcG9pbnRlciB0byBpdC4gdXNlIHRoZSBmcmVlIGZ1bmN0aW9uIHRvIHJlbGVhc2UgdGhl IGJ1ZmZlciBsYXRlcgorKworKworKy8vIC0tLSBDUkVBVElORyBWQUxVRVMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrYmlubiAqIEFQSUVO VFJZIGJpbm5fdmFsdWUoaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50IHNpemUsIGJpbm5fbWVt X2ZyZWUgZnJlZWZuKTsKKysKKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2ludDgoc2lnbmVk IGNoYXIgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UOCwgJnZhbHVlLCAw LCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9pbnQxNihzaG9ydCB2YWx1 ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9JTlQxNiwgJnZhbHVlLCAwLCBOVUxMKTsK Kyt9CisrQUxXQVlTX0lOTElORSBiaW5uICogYmlubl9pbnQzMihpbnQgdmFsdWUpIHsKKysgIHJl dHVybiBiaW5uX3ZhbHVlKEJJTk5fSU5UMzIsICZ2YWx1ZSwgMCwgTlVMTCk7CisrfQorK0FMV0FZ U19JTkxJTkUgYmlubiAqIGJpbm5faW50NjQoaW50NjQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5u X3ZhbHVlKEJJTk5fSU5UNjQsICZ2YWx1ZSwgMCwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUg YmlubiAqIGJpbm5fdWludDgodW5zaWduZWQgY2hhciB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5f dmFsdWUoQklOTl9VSU5UOCwgJnZhbHVlLCAwLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBi aW5uICogYmlubl91aW50MTYodW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5u X3ZhbHVlKEJJTk5fVUlOVDE2LCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5F IGJpbm4gKiBiaW5uX3VpbnQzMih1bnNpZ25lZCBpbnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5u X3ZhbHVlKEJJTk5fVUlOVDMyLCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5F IGJpbm4gKiBiaW5uX3VpbnQ2NCh1aW50NjQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVl KEJJTk5fVUlOVDY0LCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4g KiBiaW5uX2Zsb2F0KGZsb2F0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl92YWx1ZShCSU5OX0ZM T0FULCAmdmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2Rv dWJsZShkb3VibGUgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fRE9VQkxFLCAm dmFsdWUsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2Jvb2woQk9P TCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fdmFsdWUoQklOTl9CT09MLCAmdmFsdWUsIDAsIE5V TEwpOworK30KKytBTFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX251bGwoKSB7CisrICByZXR1cm4g Ymlubl92YWx1ZShCSU5OX05VTEwsIE5VTEwsIDAsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5F IGJpbm4gKiBiaW5uX3N0cmluZyhjaGFyICpzdHIsIGJpbm5fbWVtX2ZyZWUgZnJlZWZuKSB7Cisr ICByZXR1cm4gYmlubl92YWx1ZShCSU5OX1NUUklORywgc3RyLCAwLCBmcmVlZm4pOworK30KKytB TFdBWVNfSU5MSU5FIGJpbm4gKiBiaW5uX2Jsb2Iodm9pZCAqcHRyLCBpbnQgc2l6ZSwgYmlubl9t ZW1fZnJlZSBmcmVlZm4pIHsKKysgIHJldHVybiBiaW5uX3ZhbHVlKEJJTk5fQkxPQiwgcHRyLCBz aXplLCBmcmVlZm4pOworK30KKysKKysKKysvLyAtLS0gUkVBRCBGVU5DVElPTlMgIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysK KysvLyB0aGVzZSBmdW5jdGlvbnMgYWNjZXB0IHBvaW50ZXIgdG8gdGhlIGJpbm4gc3RydWN0dXJl IGFuZCBwb2ludGVyIHRvIHRoZSBiaW5uIGJ1ZmZlcgorK3ZvaWQgKiBBUElFTlRSWSBiaW5uX3B0 cihjb25zdCB2b2lkICpwdHIpOworK2ludCAgICBBUElFTlRSWSBiaW5uX3NpemUoY29uc3Qgdm9p ZCAqcHRyKTsKKytpbnQgICAgQVBJRU5UUlkgYmlubl90eXBlKGNvbnN0IHZvaWQgKnB0cik7Cisr aW50ICAgIEFQSUVOVFJZIGJpbm5fY291bnQoY29uc3Qgdm9pZCAqcHRyKTsKKysKKytCT09MICAg QVBJRU5UUlkgYmlubl9pc192YWxpZChjb25zdCB2b2lkICpwdHIsIGludCAqcHR5cGUsIGludCAq cGNvdW50LCBpbnQgKnBzaXplKTsKKysvKiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWVz ICh0eXBlLCBjb3VudCBhbmQgc2l6ZSkgYW5kIHRoZXkgZG9uJ3QgbmVlZCB0byBiZQorKyAgIGlu aXRpYWxpemVkLiB0aGVzZSB2YWx1ZXMgYXJlIHJlYWQgZnJvbSB0aGUgYnVmZmVyLiBleGFtcGxl OgorKworKyAgIGludCB0eXBlLCBjb3VudCwgc2l6ZTsKKysgICByZXN1bHQgPSBiaW5uX2lzX3Zh bGlkKHB0ciwgJnR5cGUsICZjb3VudCwgJnNpemUpOworKyovCisrQk9PTCAgIEFQSUVOVFJZIGJp bm5faXNfdmFsaWRfZXgoY29uc3Qgdm9pZCAqcHRyLCBpbnQgKnB0eXBlLCBpbnQgKnBjb3VudCwg aW50ICpwc2l6ZSk7CisrLyogaWYgc29tZSB2YWx1ZSBpcyBpbmZvcm1lZCAodHlwZSwgY291bnQg b3Igc2l6ZSkgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBjaGVjayBpZiAKKysgICB0aGUgdmFsdWUg cmV0dXJuZWQgZnJvbSB0aGUgc2VyaWFsaXplZCBkYXRhIG1hdGNoZXMgdGhlIGluZm9ybWVkIHZh bHVlLiBvdGhlcndpc2UKKysgICB0aGUgdmFsdWVzIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gemVy by4gZXhhbXBsZToKKysKKysgICBpbnQgdHlwZT0wLCBjb3VudD0wLCBzaXplID0ga25vd25fc2l6 ZTsKKysgICByZXN1bHQgPSBiaW5uX2lzX3ZhbGlkX2V4KHB0ciwgJnR5cGUsICZjb3VudCwgJnNp emUpOworKyovCisrCisrQk9PTCAgIEFQSUVOVFJZIGJpbm5faXNfc3RydWN0KGNvbnN0IHZvaWQg KnB0cik7CisrCisrCisrLy8gTG9hZGluZyBhIGJpbm4gYnVmZmVyIGludG8gYSBiaW5uIHZhbHVl IC0gdGhpcyBpcyBvcHRpb25hbAorKworK2Jpbm4gKiBBUElFTlRSWSBiaW5uX29wZW4oY29uc3Qg dm9pZCAqZGF0YSk7ICAgICAgICAgICAgICAvLyBhbGxvY2F0ZWQgLSB1bnNlY3VyZQorK2Jpbm4g KiBBUElFTlRSWSBiaW5uX29wZW5fZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUpOyAvLyBh bGxvY2F0ZWQgLSBzZWN1cmUKKytCT09MICAgQVBJRU5UUlkgYmlubl9sb2FkKGNvbnN0IHZvaWQg KmRhdGEsIGJpbm4gKml0ZW0pOyAgLy8gb24gc3RhY2sgLSB1bnNlY3VyZQorK0JPT0wgICBBUElF TlRSWSBiaW5uX2xvYWRfZXgoY29uc3Qgdm9pZCAqZGF0YSwgaW50IHNpemUsIGJpbm4gKnZhbHVl KTsgLy8gc2VjdXJlCisrCisrCisrLy8gZWFzaWVzdCBpbnRlcmZhY2UgdG8gdXNlLCBidXQgZG9u J3QgY2hlY2sgaWYgdGhlIHZhbHVlIGlzIHRoZXJlCisrCisrc2lnbmVkIGNoYXIgICAgQVBJRU5U UlkgYmlubl9saXN0X2ludDgoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Cisrc2hvcnQgICAg ICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2ludDE2KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3Mp OworK2ludCAgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9pbnQzMihjb25zdCB2b2lkICps aXN0LCBpbnQgcG9zKTsKKytpbnQ2NCAgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfaW50NjQo Y29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7CisrdW5zaWduZWQgY2hhciAgQVBJRU5UUlkgYmlu bl9saXN0X3VpbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOworK3Vuc2lnbmVkIHNob3J0 IEFQSUVOVFJZIGJpbm5fbGlzdF91aW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Cisr dW5zaWduZWQgaW50ICAgQVBJRU5UUlkgYmlubl9saXN0X3VpbnQzMihjb25zdCB2b2lkICpsaXN0 LCBpbnQgcG9zKTsKKyt1aW50NjQgICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3RfdWludDY0KGNv bnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOworK2Zsb2F0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5f bGlzdF9mbG9hdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zKTsKKytkb3VibGUgICAgICAgICBB UElFTlRSWSBiaW5uX2xpc3RfZG91YmxlKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOworK0JP T0wgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9ib29sKGNvbnN0IHZvaWQgKmxpc3QsIGlu dCBwb3MpOworK0JPT0wgICAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9udWxsKGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MpOworK2NoYXIgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbGlzdF9z dHIoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcyk7Cisrdm9pZCAqICAgICAgICAgQVBJRU5UUlkg Ymlubl9saXN0X2Jsb2IoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpwc2l6ZSk7Cisr dm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X2xpc3QoY29uc3Qgdm9pZCAqbGlzdCwg aW50IHBvcyk7Cisrdm9pZCAqICAgICAgICAgQVBJRU5UUlkgYmlubl9saXN0X21hcChjb25zdCB2 b2lkICpsaXN0LCBpbnQgcG9zKTsKKyt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX2xpc3Rf b2JqZWN0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MpOworKworK3NpZ25lZCBjaGFyICAgIEFQ SUVOVFJZIGJpbm5fbWFwX2ludDgoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK3Nob3J0ICAg ICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2ludDE2KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsK KytpbnQgICAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9pbnQzMihjb25zdCB2b2lkICptYXAs IGludCBpZCk7CisraW50NjQgICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfaW50NjQoY29uc3Qg dm9pZCAqbWFwLCBpbnQgaWQpOworK3Vuc2lnbmVkIGNoYXIgIEFQSUVOVFJZIGJpbm5fbWFwX3Vp bnQ4KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKyt1bnNpZ25lZCBzaG9ydCBBUElFTlRSWSBi aW5uX21hcF91aW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK3Vuc2lnbmVkIGludCAg IEFQSUVOVFJZIGJpbm5fbWFwX3VpbnQzMihjb25zdCB2b2lkICptYXAsIGludCBpZCk7CisrdWlu dDY0ICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfdWludDY0KGNvbnN0IHZvaWQgKm1hcCwgaW50 IGlkKTsKKytmbG9hdCAgICAgICAgICBBUElFTlRSWSBiaW5uX21hcF9mbG9hdChjb25zdCB2b2lk ICptYXAsIGludCBpZCk7CisrZG91YmxlICAgICAgICAgQVBJRU5UUlkgYmlubl9tYXBfZG91Ymxl KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKytCT09MICAgICAgICAgICBBUElFTlRSWSBiaW5u X21hcF9ib29sKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKytCT09MICAgICAgICAgICBBUElF TlRSWSBiaW5uX21hcF9udWxsKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKytjaGFyICogICAg ICAgICBBUElFTlRSWSBiaW5uX21hcF9zdHIoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK3Zv aWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2Jsb2IoY29uc3Qgdm9pZCAqbWFwLCBpbnQg aWQsIGludCAqcHNpemUpOworK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fbWFwX2xpc3Qo Y29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQpOworK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5f bWFwX21hcChjb25zdCB2b2lkICptYXAsIGludCBpZCk7Cisrdm9pZCAqICAgICAgICAgQVBJRU5U UlkgYmlubl9tYXBfb2JqZWN0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkKTsKKysKKytzaWduZWQg Y2hhciAgICBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQ4KGNvbnN0IHZvaWQgKm9iaiwgY29uc3Qg Y2hhciAqa2V5KTsKKytzaG9ydCAgICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9pbnQxNihj b25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisraW50ICAgICAgICAgICAgQVBJRU5U UlkgYmlubl9vYmplY3RfaW50MzIoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOwor K2ludDY0ICAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2ludDY0KGNvbnN0IHZvaWQgKm9i aiwgY29uc3QgY2hhciAqa2V5KTsKKyt1bnNpZ25lZCBjaGFyICBBUElFTlRSWSBiaW5uX29iamVj dF91aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisrdW5zaWduZWQgc2hv cnQgQVBJRU5UUlkgYmlubl9vYmplY3RfdWludDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hh ciAqa2V5KTsKKyt1bnNpZ25lZCBpbnQgICBBUElFTlRSWSBiaW5uX29iamVjdF91aW50MzIoY29u c3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOworK3VpbnQ2NCAgICAgICAgIEFQSUVOVFJZ IGJpbm5fb2JqZWN0X3VpbnQ2NChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7Cisr ZmxvYXQgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfZmxvYXQoY29uc3Qgdm9pZCAqb2Jq LCBjb25zdCBjaGFyICprZXkpOworK2RvdWJsZSAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0 X2RvdWJsZShjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisrQk9PTCAgICAgICAg ICAgQVBJRU5UUlkgYmlubl9vYmplY3RfYm9vbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIg KmtleSk7CisrQk9PTCAgICAgICAgICAgQVBJRU5UUlkgYmlubl9vYmplY3RfbnVsbChjb25zdCB2 b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisrY2hhciAqICAgICAgICAgQVBJRU5UUlkgYmlu bl9vYmplY3Rfc3RyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKyt2b2lkICog ICAgICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9ibG9iKGNvbnN0IHZvaWQgKm9iaiwgY29uc3Qg Y2hhciAqa2V5LCBpbnQgKnBzaXplKTsKKyt2b2lkICogICAgICAgICBBUElFTlRSWSBiaW5uX29i amVjdF9saXN0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5KTsKKyt2b2lkICogICAg ICAgICBBUElFTlRSWSBiaW5uX29iamVjdF9tYXAoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFy ICprZXkpOworK3ZvaWQgKiAgICAgICAgIEFQSUVOVFJZIGJpbm5fb2JqZWN0X29iamVjdChjb25z dCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSk7CisrCisrCisrLy8gcmV0dXJuIGEgcG9pbnRl ciB0byBhbiBhbGxvY2F0ZWQgYmlubiBzdHJ1Y3R1cmUgLSBtdXN0IGJlIHJlbGVhc2VkIHdpdGgg dGhlIGZyZWUoKSBmdW5jdGlvbiBvciBlcXVpdmFsZW50IHNldCBpbiBiaW5uX3NldF9hbGxvY19m dW5jdGlvbnMoKQorK2Jpbm4gKiBBUElFTlRSWSBiaW5uX2xpc3RfdmFsdWUoY29uc3Qgdm9pZCAq bGlzdCwgaW50IHBvcyk7CisrYmlubiAqIEFQSUVOVFJZIGJpbm5fbWFwX3ZhbHVlKGNvbnN0IHZv aWQgKm1hcCwgaW50IGlkKTsKKytiaW5uICogQVBJRU5UUlkgYmlubl9vYmplY3RfdmFsdWUoY29u c3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXkpOworKworKy8vIHJlYWQgdGhlIHZhbHVlIHRv IGEgYmlubiBzdHJ1Y3R1cmUgb24gdGhlIHN0YWNrCisrQk9PTCBBUElFTlRSWSBiaW5uX2xpc3Rf Z2V0X3ZhbHVlKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGJpbm4gKnZhbHVlKTsKKytCT09M IEFQSUVOVFJZIGJpbm5fbWFwX2dldF92YWx1ZShjb25zdCB2b2lkICptYXAsIGludCBpZCwgYmlu biAqdmFsdWUpOworK0JPT0wgQVBJRU5UUlkgYmlubl9vYmplY3RfZ2V0X3ZhbHVlKGNvbnN0IHZv aWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBiaW5uICp2YWx1ZSk7CisrCisrLy8gc2luZ2xlIGlu dGVyZmFjZSAtIHRoZXNlIGZ1bmN0aW9ucyBjaGVjayB0aGUgZGF0YSB0eXBlCisrQk9PTCBBUElF TlRSWSBiaW5uX2xpc3RfZ2V0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGludCB0eXBlLCB2 b2lkICpwdmFsdWUsIGludCAqcHNpemUpOworK0JPT0wgQVBJRU5UUlkgYmlubl9tYXBfZ2V0KGNv bnN0IHZvaWQgKm1hcCwgaW50IGlkLCBpbnQgdHlwZSwgdm9pZCAqcHZhbHVlLCBpbnQgKnBzaXpl KTsKKytCT09MIEFQSUVOVFJZIGJpbm5fb2JqZWN0X2dldChjb25zdCB2b2lkICpvYmosIGNvbnN0 IGNoYXIgKmtleSwgaW50IHR5cGUsIHZvaWQgKnB2YWx1ZSwgaW50ICpwc2l6ZSk7CisrCisrLy8g dGhlc2UgMyBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYW5kIHRoZSBk YXRhIHR5cGUKKysvLyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFuIGRldmljZXMK KysvLyBvbiBsaXR0bGUtZW5kaWFuIGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNhZmUgb25seSB0 byByZXR1cm4gcG9pbnRlcnMgdG8gbGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5kIHN0cmluZ3MK KysvLyB0aGUgcmV0dXJuZWQgcG9pbnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMgdmFsdWVzIG11 c3QgYmUgdXNlZCBvbmx5IGJ5IHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMKKyt2b2lkICog QVBJRU5UUlkgYmlubl9saXN0X3JlYWQoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgaW50ICpw dHlwZSwgaW50ICpwc2l6ZSk7Cisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWQoY29uc3Qg dm9pZCAqbWFwLCBpbnQgaWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpOworK3ZvaWQgKiBBUElF TlRSWSBiaW5uX29iamVjdF9yZWFkKGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBp bnQgKnB0eXBlLCBpbnQgKnBzaXplKTsKKysKKysKKysvLyBSRUFEIFBBSVIgRlVOQ1RJT05TCisr CisrLy8gdGhlc2UgZnVuY3Rpb25zIHVzZSBiYXNlIDEgaW4gdGhlICdwb3MnIGFyZ3VtZW50Cisr CisrLy8gb24gc3RhY2sKKytCT09MIEFQSUVOVFJZIGJpbm5fbWFwX2dldF9wYWlyKGNvbnN0IHZv aWQgKm1hcCwgaW50IHBvcywgaW50ICpwaWQsIGJpbm4gKnZhbHVlKTsKKytCT09MIEFQSUVOVFJZ IGJpbm5fb2JqZWN0X2dldF9wYWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtl eSwgYmlubiAqdmFsdWUpOyAgLy8gdGhlIGtleSBtdXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtl eVsyNTZdOworKworKy8vIGFsbG9jYXRlZAorK2Jpbm4gKiBBUElFTlRSWSBiaW5uX21hcF9wYWly KGNvbnN0IHZvaWQgKm1hcCwgaW50IHBvcywgaW50ICpwaWQpOworK2Jpbm4gKiBBUElFTlRSWSBi aW5uX29iamVjdF9wYWlyKGNvbnN0IHZvaWQgKm9iaiwgaW50IHBvcywgY2hhciAqcGtleSk7ICAv LyB0aGUga2V5IG11c3QgYmUgZGVjbGFyZWQgYXM6IGNoYXIga2V5WzI1Nl07CisrCisrLy8gdGhl c2UgMiBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdmFsdWUgYW5kIHRoZSBkYXRh IHR5cGUKKysvLyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbiBiaWctZW5kaWFuIGRldmljZXMKKysv LyBvbiBsaXR0bGUtZW5kaWFuIGRldmljZXMgdGhleSBhcmUgdGhyZWFkLXNhZmUgb25seSB0byBy ZXR1cm4gcG9pbnRlcnMgdG8gbGlzdCwgbWFwLCBvYmplY3QsIGJsb2IgYW5kIHN0cmluZ3MKKysv LyB0aGUgcmV0dXJuZWQgcG9pbnRlciB0byAxNiwgMzIgYW5kIDY0IGJpdHMgdmFsdWVzIG11c3Qg YmUgdXNlZCBvbmx5IGJ5IHNpbmdsZS10aHJlYWRlZCBhcHBsaWNhdGlvbnMKKyt2b2lkICogQVBJ RU5UUlkgYmlubl9tYXBfcmVhZF9wYWlyKGNvbnN0IHZvaWQgKnB0ciwgaW50IHBvcywgaW50ICpw aWQsIGludCAqcHR5cGUsIGludCAqcHNpemUpOworK3ZvaWQgKiBBUElFTlRSWSBiaW5uX29iamVj dF9yZWFkX3BhaXIoY29uc3Qgdm9pZCAqcHRyLCBpbnQgcG9zLCBjaGFyICpwa2V5LCBpbnQgKnB0 eXBlLCBpbnQgKnBzaXplKTsKKysKKysKKysvLyBTRVFVRU5USUFMIFJFQUQgRlVOQ1RJT05TCisr CisrdHlwZWRlZiBzdHJ1Y3QgYmlubl9pdGVyX3N0cnVjdCB7CisrICAgIHVuc2lnbmVkIGNoYXIg KnBuZXh0OworKyAgICB1bnNpZ25lZCBjaGFyICpwbGltaXQ7CisrICAgIGludCAgIHR5cGU7Cisr ICAgIGludCAgIGNvdW50OworKyAgICBpbnQgICBjdXJyZW50OworK30gYmlubl9pdGVyOworKwor K0JPT0wgICBBUElFTlRSWSBiaW5uX2l0ZXJfaW5pdChiaW5uX2l0ZXIgKml0ZXIsIGNvbnN0IHZv aWQgKnBidWYsIGludCB0eXBlKTsKKysKKysvLyBhbGxvY2F0ZWQKKytiaW5uICogQVBJRU5UUlkg Ymlubl9saXN0X25leHRfdmFsdWUoYmlubl9pdGVyICppdGVyKTsKKytiaW5uICogQVBJRU5UUlkg Ymlubl9tYXBfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGludCAqcGlkKTsKKytiaW5uICog QVBJRU5UUlkgYmlubl9vYmplY3RfbmV4dF92YWx1ZShiaW5uX2l0ZXIgKml0ZXIsIGNoYXIgKnBr ZXkpOyAgLy8gdGhlIGtleSBtdXN0IGJlIGRlY2xhcmVkIGFzOiBjaGFyIGtleVsyNTZdOworKwor Ky8vIG9uIHN0YWNrCisrQk9PTCAgIEFQSUVOVFJZIGJpbm5fbGlzdF9uZXh0KGJpbm5faXRlciAq aXRlciwgYmlubiAqdmFsdWUpOworK0JPT0wgICBBUElFTlRSWSBiaW5uX21hcF9uZXh0KGJpbm5f aXRlciAqaXRlciwgaW50ICpwaWQsIGJpbm4gKnZhbHVlKTsKKytCT09MICAgQVBJRU5UUlkgYmlu bl9vYmplY3RfbmV4dChiaW5uX2l0ZXIgKml0ZXIsIGNoYXIgKnBrZXksIGJpbm4gKnZhbHVlKTsg IC8vIHRoZSBrZXkgbXVzdCBiZSBkZWNsYXJlZCBhczogY2hhciBrZXlbMjU2XTsKKysKKysvLyB0 aGVzZSAzIGZ1bmN0aW9ucyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBhbmQgdGhlIGRh dGEgdHlwZQorKy8vIHRoZXkgYXJlIHRocmVhZC1zYWZlIG9uIGJpZy1lbmRpYW4gZGV2aWNlcwor Ky8vIG9uIGxpdHRsZS1lbmRpYW4gZGV2aWNlcyB0aGV5IGFyZSB0aHJlYWQtc2FmZSBvbmx5IHRv IHJldHVybiBwb2ludGVycyB0byBsaXN0LCBtYXAsIG9iamVjdCwgYmxvYiBhbmQgc3RyaW5ncwor Ky8vIHRoZSByZXR1cm5lZCBwb2ludGVyIHRvIDE2LCAzMiBhbmQgNjQgYml0cyB2YWx1ZXMgbXVz dCBiZSB1c2VkIG9ubHkgYnkgc2luZ2xlLXRocmVhZGVkIGFwcGxpY2F0aW9ucworK3ZvaWQgKiBB UElFTlRSWSBiaW5uX2xpc3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgaW50ICpwdHlwZSwg aW50ICpwc2l6ZSk7Cisrdm9pZCAqIEFQSUVOVFJZIGJpbm5fbWFwX3JlYWRfbmV4dChiaW5uX2l0 ZXIgKml0ZXIsIGludCAqcGlkLCBpbnQgKnB0eXBlLCBpbnQgKnBzaXplKTsKKyt2b2lkICogQVBJ RU5UUlkgYmlubl9vYmplY3RfcmVhZF9uZXh0KGJpbm5faXRlciAqaXRlciwgY2hhciAqcGtleSwg aW50ICpwdHlwZSwgaW50ICpwc2l6ZSk7ICAvLyB0aGUga2V5IG11c3QgYmUgZGVjbGFyZWQgYXM6 IGNoYXIga2V5WzI1Nl07CisrCisrCisrLy8gLS0tIE1BQ1JPUyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKysKKysjZGVmaW5l IGJpbm5faXNfd3JpdGFibGUoaXRlbSkgKGl0ZW0pLT53cml0YWJsZTsKKysKKysKKysvLyBzZXQg dmFsdWVzIG9uIHN0YWNrIGFsbG9jYXRlZCBiaW5uIHN0cnVjdHVyZXMKKysKKysjZGVmaW5lIGJp bm5fc2V0X251bGwoaXRlbSkgICAgICAgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fTlVMTDsg fSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIGJpbm5fc2V0X2Jvb2woaXRlbSx2YWx1ZSkgICBkbyB7 IChpdGVtKS0+dHlwZSA9IEJJTk5fQk9PTDsgKGl0ZW0pLT52Ym9vbCA9IHZhbHVlOyAoaXRlbSkt PnB0ciA9ICYoKGl0ZW0pLT52Ym9vbCk7IH0gd2hpbGUgKDApCisrCisrI2RlZmluZSBiaW5uX3Nl dF9pbnQoaXRlbSx2YWx1ZSkgICAgZG8geyAoaXRlbSktPnR5cGUgPSBCSU5OX0lOVDMyOyAoaXRl bSktPnZpbnQzMiA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52aW50MzIpOyB9IHdo aWxlICgwKQorKyNkZWZpbmUgYmlubl9zZXRfaW50NjQoaXRlbSx2YWx1ZSkgIGRvIHsgKGl0ZW0p LT50eXBlID0gQklOTl9JTlQ2NDsgKGl0ZW0pLT52aW50NjQgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIg PSAmKChpdGVtKS0+dmludDY0KTsgfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIGJpbm5fc2V0X3Vp bnQoaXRlbSx2YWx1ZSkgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fVUlOVDMyOyAoaXRlbSkt PnZ1aW50MzIgPSB2YWx1ZTsgKGl0ZW0pLT5wdHIgPSAmKChpdGVtKS0+dnVpbnQzMik7IH0gd2hp bGUgKDApCisrI2RlZmluZSBiaW5uX3NldF91aW50NjQoaXRlbSx2YWx1ZSkgZG8geyAoaXRlbSkt PnR5cGUgPSBCSU5OX1VJTlQ2NDsgKGl0ZW0pLT52dWludDY0ID0gdmFsdWU7IChpdGVtKS0+cHRy ID0gJigoaXRlbSktPnZ1aW50NjQpOyB9IHdoaWxlICgwKQorKworKyNkZWZpbmUgYmlubl9zZXRf ZmxvYXQoaXRlbSx2YWx1ZSkgIGRvIHsgKGl0ZW0pLT50eXBlID0gQklOTl9GTE9BVDsgIChpdGVt KS0+dmZsb2F0ICA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZmxvYXQpOyB9IHdo aWxlICgwKQorKyNkZWZpbmUgYmlubl9zZXRfZG91YmxlKGl0ZW0sdmFsdWUpIGRvIHsgKGl0ZW0p LT50eXBlID0gQklOTl9ET1VCTEU7IChpdGVtKS0+dmRvdWJsZSA9IHZhbHVlOyAoaXRlbSktPnB0 ciA9ICYoKGl0ZW0pLT52ZG91YmxlKTsgfSB3aGlsZSAoMCkKKysKKysvLyNkZWZpbmUgYmlubl9z ZXRfc3RyaW5nKGl0ZW0sc3RyLHBmcmVlKSAgICBkbyB7IChpdGVtKS0+dHlwZSA9IEJJTk5fU1RS SU5HOyAoaXRlbSktPnB0ciA9IHN0cjsgKGl0ZW0pLT5mcmVlZm4gPSBwZnJlZTsgfSB3aGlsZSAo MCkKKysvLyNkZWZpbmUgYmlubl9zZXRfYmxvYihpdGVtLHB0cixzaXplLHBmcmVlKSBkbyB7IChp dGVtKS0+dHlwZSA9IEJJTk5fQkxPQjsgICAoaXRlbSktPnB0ciA9IHB0cjsgKGl0ZW0pLT5mcmVl Zm4gPSBwZnJlZTsgKGl0ZW0pLT5zaXplID0gc2l6ZTsgfSB3aGlsZSAoMCkKKytCT09MIEFQSUVO VFJZIGJpbm5fc2V0X3N0cmluZyhiaW5uICppdGVtLCBjaGFyICpzdHIsIGJpbm5fbWVtX2ZyZWUg cGZyZWUpOworK0JPT0wgQVBJRU5UUlkgYmlubl9zZXRfYmxvYihiaW5uICppdGVtLCB2b2lkICpw dHIsIGludCBzaXplLCBiaW5uX21lbV9mcmVlIHBmcmVlKTsKKysKKysKKysvLyNkZWZpbmUgYmlu bl9kb3VibGUodmFsdWUpIHsgICAgICAgKGl0ZW0pLT50eXBlID0gQklOTl9ET1VCTEU7IChpdGVt KS0+dmRvdWJsZSA9IHZhbHVlOyAoaXRlbSktPnB0ciA9ICYoKGl0ZW0pLT52ZG91YmxlKSB9Cisr CisrCisrCisrLy8gRk9SRUFDSCBNQUNST1MKKysvLyAtLS0tLS0tLS0tLS0tLQorKy8vCisrLy8g V2UgbXVzdCB1c2UgdGhlc2UgZGVjbGFyYXRpb25zIGluc2lkZSB0aGUgZnVuY3Rpb25zIHRoYXQg d2lsbCB1c2UgdGhlIG1hY3JvczoKKysvLworKy8vICBiaW5uX2l0ZXIgaXRlcjsKKysvLyAgYmlu biB2YWx1ZTsKKysvLyAgY2hhciBrZXlbMjU2XTsgIC8vIG9ubHkgZm9yIG9iamVjdHMKKysvLyAg aW50ICBpZDsgICAgICAgIC8vIG9ubHkgZm9yIG1hcHMKKysKKysjZGVmaW5lIGJpbm5fb2JqZWN0 X2ZvcmVhY2gob2JqZWN0LCBrZXksIHZhbHVlKSAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0 ZXIsIG9iamVjdCwgQklOTl9PQkpFQ1QpOyAgIFwKKysgICAgd2hpbGUgKGJpbm5fb2JqZWN0X25l eHQoJml0ZXIsIGtleSwgJnZhbHVlKSkKKysKKysjZGVmaW5lIGJpbm5fbWFwX2ZvcmVhY2gobWFw LCBpZCwgdmFsdWUpICAgICAgICAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIsIG1hcCwg QklOTl9NQVApOyAgICAgICAgIFwKKysgICAgd2hpbGUgKGJpbm5fbWFwX25leHQoJml0ZXIsICZp ZCwgJnZhbHVlKSkKKysKKysjZGVmaW5lIGJpbm5fbGlzdF9mb3JlYWNoKGxpc3QsIHZhbHVlKSAg ICAgICAgICAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIsIGxpc3QsIEJJTk5fTElTVCk7 ICAgICAgIFwKKysgICAgd2hpbGUgKGJpbm5fbGlzdF9uZXh0KCZpdGVyLCAmdmFsdWUpKQorKwor Ky8vIElmIHlvdSBuZWVkIG5lc3RlZCBmb3JlYWNoIGxvb3BzLCB1c2UgdGhlIG1hY3JvcyBiZWxv dyBmb3IgdGhlIG5lc3RlZCBsb29wCisrLy8gQWxzbyB3ZSBuZWVkIHRvIGFkZCBhbiBhZGRpdGlv bmFsIGRlY2xhcmF0aW9uIG9uIHRoZSBmdW5jdGlvbiB0byBob2xkIHRoZSBpdGVyYXRvcgorKy8v IFdlIGNhbiBhZGQgaW4gdGhlIHNhbWUgbGluZSBhcyB0aGUgZmlyc3QgaXRlcmF0b3I6CisrLy8K KysvLyAgYmlubl9pdGVyIGl0ZXIsIGl0ZXIyOworKworKyNkZWZpbmUgYmlubl9vYmplY3RfZm9y ZWFjaDIob2JqZWN0LCBrZXksIHZhbHVlKSAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIy LCBvYmplY3QsIEJJTk5fT0JKRUNUKTsgICBcCisrICAgIHdoaWxlIChiaW5uX29iamVjdF9uZXh0 KCZpdGVyMiwga2V5LCAmdmFsdWUpKQorKworKyNkZWZpbmUgYmlubl9tYXBfZm9yZWFjaDIobWFw LCBpZCwgdmFsdWUpICAgICAgICAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBtYXAs IEJJTk5fTUFQKTsgICAgICAgICBcCisrICAgIHdoaWxlIChiaW5uX21hcF9uZXh0KCZpdGVyMiwg JmlkLCAmdmFsdWUpKQorKworKyNkZWZpbmUgYmlubl9saXN0X2ZvcmVhY2gyKGxpc3QsIHZhbHVl KSAgICAgICAgICAgIFwKKysgICAgYmlubl9pdGVyX2luaXQoJml0ZXIyLCBsaXN0LCBCSU5OX0xJ U1QpOyAgICAgICBcCisrICAgIHdoaWxlIChiaW5uX2xpc3RfbmV4dCgmaXRlcjIsICZ2YWx1ZSkp CisrCisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBTRVQgRlVOQ1RJ T05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQUxX QVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfaW50OChiaW5uICpsaXN0LCBzaWduZWQgY2hh ciB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9JTlQ4LCAmdmFs dWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9pbnQxNihiaW5u ICpsaXN0LCBzaG9ydCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklO Tl9JTlQxNiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9h ZGRfaW50MzIoYmlubiAqbGlzdCwgaW50IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2Fk ZChsaXN0LCBCSU5OX0lOVDMyLCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wg Ymlubl9saXN0X2FkZF9pbnQ2NChiaW5uICpsaXN0LCBpbnQ2NCB2YWx1ZSkgeworKyAgcmV0dXJu IGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9JTlQ2NCwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlT X0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWludDgoYmlubiAqbGlzdCwgdW5zaWduZWQgY2hh ciB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9VSU5UOCwgJnZh bHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9hZGRfdWludDE2KGJp bm4gKmxpc3QsIHVuc2lnbmVkIHNob3J0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2Fk ZChsaXN0LCBCSU5OX1VJTlQxNiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fbGlzdF9hZGRfdWludDMyKGJpbm4gKmxpc3QsIHVuc2lnbmVkIGludCB2YWx1ZSkgewor KyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgMCk7Cisr fQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX3VpbnQ2NChiaW5uICpsaXN0LCB1 aW50NjQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fVUlOVDY0 LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9mbG9h dChiaW5uICpsaXN0LCBmbG9hdCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlz dCwgQklOTl9GTE9BVDMyLCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlu bl9saXN0X2FkZF9kb3VibGUoYmlubiAqbGlzdCwgZG91YmxlIHZhbHVlKSB7CisrICByZXR1cm4g Ymlubl9saXN0X2FkZChsaXN0LCBCSU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX2Jvb2woYmlubiAqbGlzdCwgQk9PTCB2YWx1ZSkg eworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgQklOTl9CT09MLCAmdmFsdWUsIDApOwor K30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9udWxsKGJpbm4gKmxpc3QpIHsK KysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fTlVMTCwgTlVMTCwgMCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xpc3RfYWRkX3N0cihiaW5uICpsaXN0LCBjaGFyICpz dHIpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJTk5fU1RSSU5HLCBzdHIsIDAp OworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9ibG9iKGJpbm4gKmxpc3Qs IHZvaWQgKnB0ciwgaW50IHNpemUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfYWRkKGxpc3QsIEJJ Tk5fQkxPQiwgcHRyLCBzaXplKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9h ZGRfbGlzdChiaW5uICpsaXN0LCB2b2lkICpsaXN0MikgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9h ZGQobGlzdCwgQklOTl9MSVNULCBiaW5uX3B0cihsaXN0MiksIGJpbm5fc2l6ZShsaXN0MikpOwor K30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF9tYXAoYmlubiAqbGlzdCwgdm9p ZCAqbWFwKSB7CisrICByZXR1cm4gYmlubl9saXN0X2FkZChsaXN0LCBCSU5OX01BUCwgYmlubl9w dHIobWFwKSwgYmlubl9zaXplKG1hcCkpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9s aXN0X2FkZF9vYmplY3QoYmlubiAqbGlzdCwgdm9pZCAqb2JqKSB7CisrICByZXR1cm4gYmlubl9s aXN0X2FkZChsaXN0LCBCSU5OX09CSkVDVCwgYmlubl9wdHIob2JqKSwgYmlubl9zaXplKG9iaikp OworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2FkZF92YWx1ZShiaW5uICpsaXN0 LCBiaW5uICp2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9hZGQobGlzdCwgdmFsdWUtPnR5 cGUsIGJpbm5fcHRyKHZhbHVlKSwgYmlubl9zaXplKHZhbHVlKSk7CisrfQorKworKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworKworK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9z ZXRfaW50OChiaW5uICptYXAsIGludCBpZCwgc2lnbmVkIGNoYXIgdmFsdWUpIHsKKysgIHJldHVy biBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9JTlQ4LCAmdmFsdWUsIDApOworK30KKytBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2ludDE2KGJpbm4gKm1hcCwgaW50IGlkLCBzaG9y dCB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0lOVDE2LCAm dmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2ludDMyKGJp bm4gKm1hcCwgaW50IGlkLCBpbnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFw LCBpZCwgQklOTl9JTlQzMiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJp bm5fbWFwX3NldF9pbnQ2NChiaW5uICptYXAsIGludCBpZCwgaW50NjQgdmFsdWUpIHsKKysgIHJl dHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9JTlQ2NCwgJnZhbHVlLCAwKTsKKyt9Cisr QUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF91aW50OChiaW5uICptYXAsIGludCBpZCwg dW5zaWduZWQgY2hhciB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBC SU5OX1VJTlQ4LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBf c2V0X3VpbnQxNihiaW5uICptYXAsIGludCBpZCwgdW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKKysg IHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9VSU5UMTYsICZ2YWx1ZSwgMCk7Cisr fQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfdWludDMyKGJpbm4gKm1hcCwgaW50 IGlkLCB1bnNpZ25lZCBpbnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBp ZCwgQklOTl9VSU5UMzIsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5u X21hcF9zZXRfdWludDY0KGJpbm4gKm1hcCwgaW50IGlkLCB1aW50NjQgdmFsdWUpIHsKKysgIHJl dHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9VSU5UNjQsICZ2YWx1ZSwgMCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfZmxvYXQoYmlubiAqbWFwLCBpbnQgaWQs IGZsb2F0IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIEJJTk5fRkxP QVQzMiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX3NldF9k b3VibGUoYmlubiAqbWFwLCBpbnQgaWQsIGRvdWJsZSB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5f bWFwX3NldChtYXAsIGlkLCBCSU5OX0ZMT0FUNjQsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfYm9vbChiaW5uICptYXAsIGludCBpZCwgQk9PTCB2YWx1 ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX0JPT0wsICZ2YWx1ZSwg MCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfbnVsbChiaW5uICptYXAs IGludCBpZCkgeworKyAgcmV0dXJuIGJpbm5fbWFwX3NldChtYXAsIGlkLCBCSU5OX05VTEwsIE5V TEwsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X3N0cihiaW5uICpt YXAsIGludCBpZCwgY2hhciAqc3RyKSB7CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQs IEJJTk5fU1RSSU5HLCBzdHIsIDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBf c2V0X2Jsb2IoYmlubiAqbWFwLCBpbnQgaWQsIHZvaWQgKnB0ciwgaW50IHNpemUpIHsKKysgIHJl dHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9CTE9CLCBwdHIsIHNpemUpOworK30KKytB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X2xpc3QoYmlubiAqbWFwLCBpbnQgaWQsIHZv aWQgKmxpc3QpIHsKKysgIHJldHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9MSVNULCBi aW5uX3B0cihsaXN0KSwgYmlubl9zaXplKGxpc3QpKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fbWFwX3NldF9tYXAoYmlubiAqbWFwLCBpbnQgaWQsIHZvaWQgKm1hcDIpIHsKKysgIHJl dHVybiBiaW5uX21hcF9zZXQobWFwLCBpZCwgQklOTl9NQVAsIGJpbm5fcHRyKG1hcDIpLCBiaW5u X3NpemUobWFwMikpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfc2V0X29iamVj dChiaW5uICptYXAsIGludCBpZCwgdm9pZCAqb2JqKSB7CisrICByZXR1cm4gYmlubl9tYXBfc2V0 KG1hcCwgaWQsIEJJTk5fT0JKRUNULCBiaW5uX3B0cihvYmopLCBiaW5uX3NpemUob2JqKSk7Cisr fQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9zZXRfdmFsdWUoYmlubiAqbWFwLCBpbnQg aWQsIGJpbm4gKnZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfc2V0KG1hcCwgaWQsIHZhbHVl LT50eXBlLCBiaW5uX3B0cih2YWx1ZSksIGJpbm5fc2l6ZSh2YWx1ZSkpOworK30KKysKKysvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9v YmplY3Rfc2V0X2ludDgoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHNpZ25lZCBjaGFyIHZh bHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDgsICZ2 YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfaW50MTYo YmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHNob3J0IHZhbHVlKSB7CisrICByZXR1cm4gYmlu bl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDE2LCAmdmFsdWUsIDApOworK30KKytBTFdB WVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2ludDMyKGJpbm4gKm9iaiwgY29uc3QgY2hh ciAqa2V5LCBpbnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXks IEJJTk5fSU5UMzIsICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29i amVjdF9zZXRfaW50NjQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGludDY0IHZhbHVlKSB7 CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0lOVDY0LCAmdmFsdWUs IDApOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm4g Km9iaiwgY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBjaGFyIHZhbHVlKSB7CisrICByZXR1cm4g Ymlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX1VJTlQ4LCAmdmFsdWUsIDApOworK30KKytB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQxNihiaW5uICpvYmosIGNvbnN0 IGNoYXIgKmtleSwgdW5zaWduZWQgc2hvcnQgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVj dF9zZXQob2JqLCBrZXksIEJJTk5fVUlOVDE2LCAmdmFsdWUsIDApOworK30KKytBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtl eSwgdW5zaWduZWQgaW50IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwg a2V5LCBCSU5OX1VJTlQzMiwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJp bm5fb2JqZWN0X3NldF91aW50NjQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIHVpbnQ2NCB2 YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9VSU5UNjQs ICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfZmxv YXQoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGZsb2F0IHZhbHVlKSB7CisrICByZXR1cm4g Ymlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0ZMT0FUMzIsICZ2YWx1ZSwgMCk7CisrfQor K0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfZG91YmxlKGJpbm4gKm9iaiwgY29u c3QgY2hhciAqa2V5LCBkb3VibGUgdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQo b2JqLCBrZXksIEJJTk5fRkxPQVQ2NCwgJnZhbHVlLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBC T09MIGJpbm5fb2JqZWN0X3NldF9ib29sKGJpbm4gKm9iaiwgY29uc3QgY2hhciAqa2V5LCBCT09M IHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBCSU5OX0JPT0ws ICZ2YWx1ZSwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfbnVs bChiaW5uICpvYmosIGNvbnN0IGNoYXIgKmtleSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3Nl dChvYmosIGtleSwgQklOTl9OVUxMLCBOVUxMLCAwKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09M IGJpbm5fb2JqZWN0X3NldF9zdHIoYmlubiAqb2JqLCBjb25zdCBjaGFyICprZXksIGNoYXIgKnN0 cikgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9TVFJJTkcsIHN0 ciwgMCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfYmxvYihiaW5u ICpvYmosIGNvbnN0IGNoYXIgKmtleSwgdm9pZCAqcHRyLCBpbnQgc2l6ZSkgeworKyAgcmV0dXJu IGJpbm5fb2JqZWN0X3NldChvYmosIGtleSwgQklOTl9CTE9CLCBwdHIsIHNpemUpOworK30KKytB TFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3Rfc2V0X2xpc3QoYmlubiAqb2JqLCBjb25zdCBj aGFyICprZXksIHZvaWQgKmxpc3QpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBr ZXksIEJJTk5fTElTVCwgYmlubl9wdHIobGlzdCksIGJpbm5fc2l6ZShsaXN0KSk7CisrfQorK0FM V0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfbWFwKGJpbm4gKm9iaiwgY29uc3QgY2hh ciAqa2V5LCB2b2lkICptYXApIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9zZXQob2JqLCBrZXks IEJJTk5fTUFQLCBiaW5uX3B0cihtYXApLCBiaW5uX3NpemUobWFwKSk7CisrfQorK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfb2JqZWN0KGJpbm4gKm9iaiwgY29uc3QgY2hhciAq a2V5LCB2b2lkICpvYmoyKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5LCBC SU5OX09CSkVDVCwgYmlubl9wdHIob2JqMiksIGJpbm5fc2l6ZShvYmoyKSk7CisrfQorK0FMV0FZ U19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9zZXRfdmFsdWUoYmlubiAqb2JqLCBjb25zdCBjaGFy ICprZXksIGJpbm4gKnZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rfc2V0KG9iaiwga2V5 LCB2YWx1ZS0+dHlwZSwgYmlubl9wdHIodmFsdWUpLCBiaW5uX3NpemUodmFsdWUpKTsKKyt9Cisr CisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrLyoqKiBHRVQgRlVOQ1RJT05TICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrQUxXQVlTX0lO TElORSBCT09MIGJpbm5fbGlzdF9nZXRfaW50OChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBz aWduZWQgY2hhciAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3Ms IEJJTk5fSU5UOCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5f bGlzdF9nZXRfaW50MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgc2hvcnQgKnB2YWx1ZSkg eworKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDE2LCBwdmFsdWUs IE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9pbnQzMihjb25z dCB2b2lkICpsaXN0LCBpbnQgcG9zLCBpbnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlz dF9nZXQobGlzdCwgcG9zLCBCSU5OX0lOVDMyLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9pbnQ2NChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9z LCBpbnQ2NCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJ Tk5fSU5UNjQsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xp c3RfZ2V0X3VpbnQ4KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHVuc2lnbmVkIGNoYXIgKnB2 YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQ4LCBw dmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF91aW50 MTYoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgdW5zaWduZWQgc2hvcnQgKnB2YWx1ZSkgewor KyAgcmV0dXJuIGJpbm5fbGlzdF9nZXQobGlzdCwgcG9zLCBCSU5OX1VJTlQxNiwgcHZhbHVlLCBO VUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfdWludDMyKGNvbnN0 IHZvaWQgKmxpc3QsIGludCBwb3MsIHVuc2lnbmVkIGludCAqcHZhbHVlKSB7CisrICByZXR1cm4g Ymlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fVUlOVDMyLCBwdmFsdWUsIE5VTEwpOworK30K KytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF91aW50NjQoY29uc3Qgdm9pZCAqbGlz dCwgaW50IHBvcywgdWludDY0ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxp c3QsIHBvcywgQklOTl9VSU5UNjQsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX2xpc3RfZ2V0X2Zsb2F0KGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIGZsb2F0 ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9B VDMyLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dl dF9kb3VibGUoY29uc3Qgdm9pZCAqbGlzdCwgaW50IHBvcywgZG91YmxlICpwdmFsdWUpIHsKKysg IHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9GTE9BVDY0LCBwdmFsdWUsIE5V TEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dldF9ib29sKGNvbnN0IHZv aWQgKmxpc3QsIGludCBwb3MsIEJPT0wgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbGlzdF9n ZXQobGlzdCwgcG9zLCBCSU5OX0JPT0wsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJ TkUgQk9PTCBiaW5uX2xpc3RfZ2V0X3N0cihjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCBjaGFy ICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fU1RS SU5HLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9saXN0X2dl dF9ibG9iKGNvbnN0IHZvaWQgKmxpc3QsIGludCBwb3MsIHZvaWQgKipwdmFsdWUsIGludCAqcHNp emUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywgQklOTl9CTE9CLCBwdmFs dWUsIHBzaXplKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfbGlzdChj b25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlu bl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fTElTVCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxX QVlTX0lOTElORSBCT09MIGJpbm5fbGlzdF9nZXRfbWFwKGNvbnN0IHZvaWQgKmxpc3QsIGludCBw b3MsIHZvaWQgKipwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX2xpc3RfZ2V0KGxpc3QsIHBvcywg QklOTl9NQVAsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX2xp c3RfZ2V0X29iamVjdChjb25zdCB2b2lkICpsaXN0LCBpbnQgcG9zLCB2b2lkICoqcHZhbHVlKSB7 CisrICByZXR1cm4gYmlubl9saXN0X2dldChsaXN0LCBwb3MsIEJJTk5fT0JKRUNULCBwdmFsdWUs IE5VTEwpOworK30KKysKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX21hcF9nZXRfaW50OChjb25zdCB2b2lkICptYXAsIGludCBpZCwgc2lnbmVkIGNo YXIgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDgs IHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfaW50 MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHNob3J0ICpwdmFsdWUpIHsKKysgIHJldHVybiBi aW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9JTlQxNiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxX QVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9pbnQzMihjb25zdCB2b2lkICptYXAsIGludCBp ZCwgaW50ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9J TlQzMiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dl dF9pbnQ2NChjb25zdCB2b2lkICptYXAsIGludCBpZCwgaW50NjQgKnB2YWx1ZSkgeworKyAgcmV0 dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0lOVDY0LCBwdmFsdWUsIE5VTEwpOworK30K KytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X3VpbnQ4KGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkLCB1bnNpZ25lZCBjaGFyICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQo bWFwLCBpZCwgQklOTl9VSU5UOCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBC T09MIGJpbm5fbWFwX2dldF91aW50MTYoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIHVuc2lnbmVk IHNob3J0ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwgQklOTl9V SU5UMTYsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9n ZXRfdWludDMyKGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB1bnNpZ25lZCBpbnQgKnB2YWx1ZSkg eworKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1VJTlQzMiwgcHZhbHVlLCBO VUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF91aW50NjQoY29uc3Qg dm9pZCAqbWFwLCBpbnQgaWQsIHVpbnQ2NCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBf Z2V0KG1hcCwgaWQsIEJJTk5fVUlOVDY0LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9tYXBfZ2V0X2Zsb2F0KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCBmbG9h dCAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fRkxPQVQz MiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9k b3VibGUoY29uc3Qgdm9pZCAqbWFwLCBpbnQgaWQsIGRvdWJsZSAqcHZhbHVlKSB7CisrICByZXR1 cm4gYmlubl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fRkxPQVQ2NCwgcHZhbHVlLCBOVUxMKTsKKyt9 CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9ib29sKGNvbnN0IHZvaWQgKm1hcCwg aW50IGlkLCBCT09MICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX21hcF9nZXQobWFwLCBpZCwg QklOTl9CT09MLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9t YXBfZ2V0X3N0cihjb25zdCB2b2lkICptYXAsIGludCBpZCwgY2hhciAqKnB2YWx1ZSkgeworKyAg cmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX1NUUklORywgcHZhbHVlLCBOVUxMKTsK Kyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fbWFwX2dldF9ibG9iKGNvbnN0IHZvaWQgKm1h cCwgaW50IGlkLCB2b2lkICoqcHZhbHVlLCBpbnQgKnBzaXplKSB7CisrICByZXR1cm4gYmlubl9t YXBfZ2V0KG1hcCwgaWQsIEJJTk5fQkxPQiwgcHZhbHVlLCBwc2l6ZSk7CisrfQorK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfbGlzdChjb25zdCB2b2lkICptYXAsIGludCBpZCwgdm9p ZCAqKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX0xJU1Qs IHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX21hcF9nZXRfbWFw KGNvbnN0IHZvaWQgKm1hcCwgaW50IGlkLCB2b2lkICoqcHZhbHVlKSB7CisrICByZXR1cm4gYmlu bl9tYXBfZ2V0KG1hcCwgaWQsIEJJTk5fTUFQLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNf SU5MSU5FIEJPT0wgYmlubl9tYXBfZ2V0X29iamVjdChjb25zdCB2b2lkICptYXAsIGludCBpZCwg dm9pZCAqKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fbWFwX2dldChtYXAsIGlkLCBCSU5OX09C SkVDVCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrCisrLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysKKysv LyB1c2FnZToKKysvLyAgIGlmIChiaW5uX29iamVjdF9nZXRfaW50MzIob2JqLCAia2V5IiwgJnZh bHVlKSA9PSBGQUxTRSkgeHh4OworKworK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9n ZXRfaW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgc2lnbmVkIGNoYXIgKnB2 YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQ4LCBw dmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2lu dDE2KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBzaG9ydCAqcHZhbHVlKSB7Cisr ICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0lOVDE2LCBwdmFsdWUsIE5V TEwpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2ludDMyKGNvbnN0 IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBpbnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJp bm5fb2JqZWN0X2dldChvYmosIGtleSwgQklOTl9JTlQzMiwgcHZhbHVlLCBOVUxMKTsKKyt9Cisr QUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9pbnQ2NChjb25zdCB2b2lkICpvYmos IGNvbnN0IGNoYXIgKmtleSwgaW50NjQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0 X2dldChvYmosIGtleSwgQklOTl9JTlQ2NCwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lO TElORSBCT09MIGJpbm5fb2JqZWN0X2dldF91aW50OChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSwgdW5zaWduZWQgY2hhciAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3Rf Z2V0KG9iaiwga2V5LCBCSU5OX1VJTlQ4LCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5M SU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X3VpbnQxNihjb25zdCB2b2lkICpvYmosIGNvbnN0IGNo YXIgKmtleSwgdW5zaWduZWQgc2hvcnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0 X2dldChvYmosIGtleSwgQklOTl9VSU5UMTYsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfdWludDMyKGNvbnN0IHZvaWQgKm9iaiwgY29uc3Qg Y2hhciAqa2V5LCB1bnNpZ25lZCBpbnQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0 X2dldChvYmosIGtleSwgQklOTl9VSU5UMzIsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19J TkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfdWludDY0KGNvbnN0IHZvaWQgKm9iaiwgY29uc3Qg Y2hhciAqa2V5LCB1aW50NjQgKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChv YmosIGtleSwgQklOTl9VSU5UNjQsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUg Qk9PTCBiaW5uX29iamVjdF9nZXRfZmxvYXQoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICpr ZXksIGZsb2F0ICpwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9nZXQob2JqLCBrZXks IEJJTk5fRkxPQVQzMiwgcHZhbHVlLCBOVUxMKTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJp bm5fb2JqZWN0X2dldF9kb3VibGUoY29uc3Qgdm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIGRv dWJsZSAqcHZhbHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5O X0ZMT0FUNjQsIHB2YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29i amVjdF9nZXRfYm9vbChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIgKmtleSwgQk9PTCAqcHZh bHVlKSB7CisrICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0JPT0wsIHB2 YWx1ZSwgTlVMTCk7CisrfQorK0FMV0FZU19JTkxJTkUgQk9PTCBiaW5uX29iamVjdF9nZXRfc3Ry KGNvbnN0IHZvaWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCBjaGFyICoqcHZhbHVlKSB7CisrICBy ZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX1NUUklORywgcHZhbHVlLCBOVUxM KTsKKyt9CisrQUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9ibG9iKGNvbnN0IHZv aWQgKm9iaiwgY29uc3QgY2hhciAqa2V5LCB2b2lkICoqcHZhbHVlLCBpbnQgKnBzaXplKSB7Cisr ICByZXR1cm4gYmlubl9vYmplY3RfZ2V0KG9iaiwga2V5LCBCSU5OX0JMT0IsIHB2YWx1ZSwgcHNp emUpOworK30KKytBTFdBWVNfSU5MSU5FIEJPT0wgYmlubl9vYmplY3RfZ2V0X2xpc3QoY29uc3Qg dm9pZCAqb2JqLCBjb25zdCBjaGFyICprZXksIHZvaWQgKipwdmFsdWUpIHsKKysgIHJldHVybiBi aW5uX29iamVjdF9nZXQob2JqLCBrZXksIEJJTk5fTElTVCwgcHZhbHVlLCBOVUxMKTsKKyt9Cisr QUxXQVlTX0lOTElORSBCT09MIGJpbm5fb2JqZWN0X2dldF9tYXAoY29uc3Qgdm9pZCAqb2JqLCBj b25zdCBjaGFyICprZXksIHZvaWQgKipwdmFsdWUpIHsKKysgIHJldHVybiBiaW5uX29iamVjdF9n ZXQob2JqLCBrZXksIEJJTk5fTUFQLCBwdmFsdWUsIE5VTEwpOworK30KKytBTFdBWVNfSU5MSU5F IEJPT0wgYmlubl9vYmplY3RfZ2V0X29iamVjdChjb25zdCB2b2lkICpvYmosIGNvbnN0IGNoYXIg KmtleSwgdm9pZCAqKnB2YWx1ZSkgeworKyAgcmV0dXJuIGJpbm5fb2JqZWN0X2dldChvYmosIGtl eSwgQklOTl9PQkpFQ1QsIHB2YWx1ZSwgTlVMTCk7CisrfQorKworKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisrCisrQk9PTCAgIEFQSUVOVFJZIGJpbm5fZ2V0X2ludDMyKGJpbm4gKnZhbHVlLCBpbnQg KnBpbnQpOworK0JPT0wgICBBUElFTlRSWSBiaW5uX2dldF9pbnQ2NChiaW5uICp2YWx1ZSwgaW50 NjQgKnBpbnQpOworK0JPT0wgICBBUElFTlRSWSBiaW5uX2dldF9kb3VibGUoYmlubiAqdmFsdWUs IGRvdWJsZSAqcGZsb2F0KTsKKytCT09MICAgQVBJRU5UUlkgYmlubl9nZXRfYm9vbChiaW5uICp2 YWx1ZSwgQk9PTCAqcGJvb2wpOworK2NoYXIgKiBBUElFTlRSWSBiaW5uX2dldF9zdHIoYmlubiAq dmFsdWUpOworKworKy8vIGJvb2xlYW4gc3RyaW5nIHZhbHVlczoKKysvLyAxLCB0cnVlLCB5ZXMs IG9uCisrLy8gMCwgZmFsc2UsIG5vLCBvZmYKKysKKysvLyBib29sZWFuIG51bWJlciB2YWx1ZXM6 CisrLy8gIT0wIFt0cnVlXQorKy8vID09MCBbZmFsc2VdCisrCisrCisrI2lmZGVmIF9fY3BsdXNw bHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvL0JJTk5fSAorZGlmZiAtTnVyIG9wZW5zc2gt MTAuM3AxLm9yaWcvY2hhbm5lbHMuYyBvcGVuc3NoLTEwLjNwMS9jaGFubmVscy5jCistLS0gb3Bl bnNzaC0xMC4zcDEub3JpZy9jaGFubmVscy5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3 ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvY2hhbm5lbHMuYwkyMDI2LTA3LTAyIDA4OjAxOjUx LjQ2MzAxMDg0OSArMDIwMAorQEAgLTkwLDYgKzkwLDExIEBACisgLyogTWF4aW11bSBudW1iZXIg b2YgZmFrZSBYMTEgZGlzcGxheXMgdG8gdHJ5LiAqLworICNkZWZpbmUgTUFYX0RJU1BMQVlTICAx MDAwCisgCisrLyogaW4gdmVyc2lvbiBvZiBPcGVuU1NIIGxhdGVyIHRoYW4gOC44IGlmIHdlIGFk dmVydGlzZSBhIHdpbmRvdworKyAqIDE2TUIgb3IgbGFyZ2VyIGlzIGNhdXNlcyBhIHBhdGhvbG9n aWNhbCBiZWhhdmlvdXIgdGhhdCByZWR1Y2VzCisrICogdGhyb3VnaHB1dC4gVGhpcyBpcyBub3Qg YSBncmVhdCBzb2x1dGlvbi4gKi8KKysjZGVmaW5lIE5PTl9IUE5fV0lORE9XX01BWCAoMTUgKiAx MDI0ICogMTAyNCkKKysKKyAvKiBQZXItY2hhbm5lbCBjYWxsYmFjayBmb3IgcHJlL3Bvc3QgSU8g YWN0aW9ucyAqLworIHR5cGVkZWYgdm9pZCBjaGFuX2ZuKHN0cnVjdCBzc2ggKiwgQ2hhbm5lbCAq Yyk7CisgCitAQCAtMjIyLDYgKzIyNyw5IEBACisgLyogU2V0dXAgaGVscGVyICovCisgc3RhdGlj IHZvaWQgY2hhbm5lbF9oYW5kbGVyX2luaXQoc3RydWN0IHNzaF9jaGFubmVscyAqc2MpOworIAor Ky8qIGRlZmF1bHQgdmFsdWVzIHRvIGVuYWJsZSBocG4gYW5kIHRoZSBpbml0aWFsIGJ1ZmZlciBz aXplICovCisrc3RhdGljIGludCBocG5fZGlzYWJsZWQgPSAwOworKworIC8qIC0tIGNoYW5uZWwg Y29yZSAqLworIAorIHZvaWQKK0BAIC01MzgsNiArNTQ2LDE2IEBACisgCSAgICAoYy0+b3V0cHV0 ID0gc3NoYnVmX25ldygpKSA9PSBOVUxMIHx8CisgCSAgICAoYy0+ZXh0ZW5kZWQgPSBzc2hidWZf bmV3KCkpID09IE5VTEwpCisgCQlmYXRhbF9mKCJzc2hidWZfbmV3IGZhaWxlZCIpOworKworKwkv KiB0aGVzZSBidWZmZXJzIGFyZSBpbXBvcnRhbnQgaW4gdGVybXMgb2YgdHJhY2tpbmcgY2hhbm5l bAorKwkgKiBidWZmZXIgdXNhZ2Ugc28gbGFiZWwgYW5kIHR5cGUgdGhlbSB3aXRoIGRlc2NyaXB0 aXZlIG5hbWVzICovCisrCXNzaGJ1Zl9yZWxhYmVsKGMtPmlucHV0LCAiY2hhbm5lbCBpbnB1dCIp OworKwlzc2hidWZfdHlwZShjLT5pbnB1dCwgQlVGX0NIQU5ORUxfSU5QVVQpOworKwlzc2hidWZf cmVsYWJlbChjLT5vdXRwdXQsICJjaGFubmVsIG91dHB1dCIpOworKwlzc2hidWZfdHlwZShjLT5v dXRwdXQsIEJVRl9DSEFOTkVMX09VVFBVVCk7CisrCXNzaGJ1Zl9yZWxhYmVsKGMtPmV4dGVuZGVk LCAiY2hhbm5lbCBleHRlbmRlZCIpOworKwlzc2hidWZfdHlwZShjLT5leHRlbmRlZCwgQlVGX0NI QU5ORUxfRVhURU5ERUQpOworKworIAlpZiAoKHIgPSBzc2hidWZfc2V0X21heF9zaXplKGMtPmlu cHV0LCBDSEFOX0lOUFVUX01BWCkpICE9IDApCisgCQlmYXRhbF9mcihyLCAic3NoYnVmX3NldF9t YXhfc2l6ZSIpOworIAljLT5vc3RhdGUgPSBDSEFOX09VVFBVVF9PUEVOOworQEAgLTU0OSw2ICs1 NjcsNyBAQAorIAljLT5sb2NhbF93aW5kb3cgPSB3aW5kb3c7CisgCWMtPmxvY2FsX3dpbmRvd19t YXggPSB3aW5kb3c7CisgCWMtPmxvY2FsX21heHBhY2tldCA9IG1heHBhY2s7CisrCWMtPmR5bmFt aWNfd2luZG93ID0gMDsKKyAJYy0+cmVtb3RlX25hbWUgPSB4c3RyZHVwKHJlbW90ZV9uYW1lKTsK KyAJYy0+Y3RsX2NoYW4gPSAtMTsKKyAJYy0+ZGVsYXllZCA9IDE7CQkvKiBwcmV2ZW50IGNhbGwg dG8gY2hhbm5lbF9wb3N0IGhhbmRsZXIgKi8KK0BAIC0xMzIzLDYgKzEzNDIsNDIgQEAKKyAJYy0+ aW9fd2FudCA9IFNTSF9DSEFOX0lPX1NPQ0tfVzsKKyB9CisgCisrc3RhdGljIGludAorK2NoYW5u ZWxfdGNwd2luc3ooc3RydWN0IHNzaCAqc3NoKQorK3sKKysJdV9pbnQzMl90IHRjcHdpbnN6ID0g MDsKKysJc29ja2xlbl90IG9wdHN6ID0gc2l6ZW9mKHRjcHdpbnN6KTsKKysJaW50IHJldCA9IC0x OworKworKwkvKiBpZiB3ZSBhcmVuJ3Qgb24gYSBzb2NrZXQgcmV0dXJuIDEyOEtCICovCisrCWlm ICghc3NoX3BhY2tldF9jb25uZWN0aW9uX2lzX29uX3NvY2tldChzc2gpKQorKwkJcmV0dXJuIDEy OCAqIDEwMjQ7CisrCisrCS8qIGdldCB0aGUgY3VycmVudCBzaXplIG9mIHRoZSByZWNlaXZlIGJ1 ZmZlciAqLworKwlyZXQgPSBnZXRzb2Nrb3B0KHNzaF9wYWNrZXRfZ2V0X2Nvbm5lY3Rpb25faW4o c3NoKSwKKysJICAgIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJnRjcHdpbnN6LCAmb3B0c3opOwor KworKwkvKiBlcnJvciBvbiB0aGUgc29ja2V0IC0gdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICov CisrCS8qIHJldHVybiBPcGVuU1NIJ3MgbWF4IHdpbmRvdyBzaXplICovCisrCWlmIChyZXQgIT0g MCkgeworKwkJZGVidWdfZigiZ2V0c29ja29wdCBTT19SQ1ZCVUYgZmFpbGVkOiAlcyIsIHN0cmVy cm9yKGVycm5vKSk7CisrCQlyZXR1cm4gKDIgKiAxMDI0ICogMTAyNCk7CisrCX0KKysKKysJLyog cmV0dXJuIG5vIG1vcmUgdGhhbiBTU0hCVUZfU0laRV9NQVggKGN1cnJlbnRseSAxMjhNQikgKi8K KysJaWYgKHRjcHdpbnN6ID4gU1NIQlVGX1NJWkVfTUFYKQorKwkJdGNwd2luc3ogPSBTU0hCVUZf U0laRV9NQVg7CisrCisrCS8qIGlmIHRoZSByZW1vdGUgc2lkZSBpcyBPcGVuU1NIIGFmdGVyIHZl cnNpb24gOC44IHdlIG5lZWQgdG8gcmVzdHJpY3QKKysJICogdGhlIHNpemUgb2YgdGhlIGFkdmVy dGlzZWQgd2luZG93LiBOb3cgdGhpcyBtZWFucyB0aGF0IGFueSBIUE4gdG8gbm9uLUhQTgorKwkg KiBjb25uZWN0aW9uIHdpbGwgYmUgd2luZG93IGxpbWl0ZWQgdG8gMTVNQiBvZiByZWNlaXZlIHNw YWNlLiBUaGlzIGlzIGEKKysJICogbm9uLW9wdGltYWwgc29sdXRpb24uCisrCSAqLworKwlpZiAo KHNzaC0+Y29tcGF0ICYgU1NIX1JFU1RSSUNUX1dJTkRPVykgJiYgKHRjcHdpbnN6ID4gTk9OX0hQ Tl9XSU5ET1dfTUFYKSkKKysJCXRjcHdpbnN6ID0gTk9OX0hQTl9XSU5ET1dfTUFYOworKwlyZXR1 cm4gKHRjcHdpbnN6KTsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBjaGFubmVsX3ByZV9vcGVuKHN0 cnVjdCBzc2ggKnNzaCwgQ2hhbm5lbCAqYykKKyB7CitAQCAtMjE3OCw4ICsyMjMzLDYgQEAKKyBz dGF0aWMgaW50CisgY2hhbm5lbF9oYW5kbGVfcmZkKHN0cnVjdCBzc2ggKnNzaCwgQ2hhbm5lbCAq YykKKyB7CistCWNoYXIgYnVmW0NIQU5fUkJVRl07CistCXNzaXplX3QgbGVuOworIAlpbnQgciwg Zm9yY2U7CisgCXNpemVfdCBuciA9IDAsIGhhdmUsIGF2YWlsLCBtYXhsZW4gPSBDSEFOTkVMX01B WF9SRUFEOworIAlpbnQgcHR5X3plcm9yZWFkID0gMDsKK0BAIC0yMjIzLDYgKzIyNzYsMzAgQEAK KyAJCXJldHVybiAxOworIAl9CisgCisrCS8qCisrCSAqIERhdGFncmFtIG9yIGZpbHRlcmVkIGNo YW5uZWwgcGF0aDogbmVlZHMgYSB0ZW1wb3Jhcnkgc3RhY2sgYnVmZmVyCisrCSAqIGJlY2F1c2Ug dGhlIGRhdGEgbXVzdCBwYXNzIHRocm91Z2ggaW5wdXRfZmlsdGVyKCkgb3IgYmUgZnJhbWVkIGFz CisrCSAqIGEgZGF0YWdyYW0gYmVmb3JlIGVudGVyaW5nIGMtPmlucHV0LgorKwkgKgorKwkgKiBi dWZbXSAoQ0hBTl9SQlVGID0gMzJLQikgaXMgZGVjbGFyZWQgaW4gdGhpcyBpbm5lciBzY29wZSBy YXRoZXIKKysJICogdGhhbiBhdCBmdW5jdGlvbiBsZXZlbCB0byBhdm9pZCBhIHBlcmZvcm1hbmNl IHBlbmFsdHkgZnJvbQorKwkgKiAtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvLCB3aGljaCBj YXVzZXMgdGhlIGNvbXBpbGVyIHRvIGVtaXQKKysJICogYSBtZW1zZXQoKSBmb3IgZXZlcnkgbG9j YWwgdmFyaWFibGUgb24gZnVuY3Rpb24gZW50cnkuICBXaXRoIGJ1ZgorKwkgKiBhdCBmdW5jdGlv biBzY29wZSB0aGUgMzJLQiB6ZXJvaW5nIGhhcHBlbnMgb24gZXZlcnkgY2FsbCwgZXZlbgorKwkg KiB0aG91Z2ggdGhlIHNpbXBsZS1jaGFubmVsIGZhc3QgcGF0aCBhYm92ZSAodGhlIGNvbW1vbiBj YXNlIGZvcgorKwkgKiBidWxrIGRhdGEpIG5ldmVyIHRvdWNoZXMgYnVmLiAgQ1BVIHByb2ZpbGlu ZyBzaG93ZWQgdGhpcyBkZWFkCisrCSAqIHplcm9pbmcgY29uc3VtaW5nIH4xMCUgb2YgY2xpZW50 IENQVSBkdXJpbmcgaGlnaC10aHJvdWdocHV0CisrCSAqIHRyYW5zZmVycy4gIE1vdmluZyBidWYg aW50byB0aGlzIHNjb3BlIGxpbWl0cyB0aGUgemVyb2luZyB0bworKwkgKiBjYWxscyB0aGF0IGFj dHVhbGx5IHRha2UgdGhlIGRhdGFncmFtL2ZpbHRlciBwYXRoLgorKwkgKgorKwkgKiBTZWN1cml0 eSBub3RlOiBidWYgaXMgc3RpbGwgemVyb2VkIGJ5IHRoZSBjb21waWxlciBiZWZvcmUgdXNlIGlu CisrCSAqIHRoaXMgcGF0aC4gIFRoZSBzaW1wbGUtY2hhbm5lbCBwYXRoIG5ldmVyIGFsbG9jYXRl cyBidWYgYXQgYWxsLAorKwkgKiBzbyB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBl eHBvc3VyZS4KKysJICovCisrCXsKKysJY2hhciBidWZbQ0hBTl9SQlVGXTsKKysJc3NpemVfdCBs ZW47CisrCisgCWVycm5vID0gMDsKKyAJbGVuID0gcmVhZChjLT5yZmQsIGJ1Ziwgc2l6ZW9mKGJ1 ZikpOworIAkvKiBmaXh1cCBBSVggemVyby1sZW5ndGggcmVhZCB3aXRoIGVycm5vIHNldCB0byBs b29rIG1vcmUgbGlrZSBlcnJvcnMgKi8KK0BAIC0yMjM1LDE1ICsyMzEyLDcgQEAKKyAJCWRlYnVn MigiY2hhbm5lbCAlZDogcmVhZDw9MCByZmQgJWQgbGVuICV6ZDogJXMiLAorIAkJICAgIGMtPnNl bGYsIGMtPnJmZCwgbGVuLAorIAkJICAgIGxlbiA9PSAwID8gImNsb3NlZCIgOiBzdHJlcnJvcihl cnJubykpOworLSByZmFpbDoKKy0JCWlmIChjLT50eXBlICE9IFNTSF9DSEFOTkVMX09QRU4pIHsK Ky0JCQlkZWJ1ZzIoImNoYW5uZWwgJWQ6IG5vdCBvcGVuIiwgYy0+c2VsZik7CistCQkJY2hhbl9t YXJrX2RlYWQoc3NoLCBjKTsKKy0JCQlyZXR1cm4gLTE7CistCQl9IGVsc2UgeworLQkJCWNoYW5f cmVhZF9mYWlsZWQoc3NoLCBjKTsKKy0JCX0KKy0JCXJldHVybiAtMTsKKysJCWdvdG8gcmZhaWw7 CisgCX0KKyAJY2hhbm5lbF9zZXRfdXNlZF90aW1lKHNzaCwgYyk7CisgCWlmIChjLT5pbnB1dF9m aWx0ZXIgIT0gTlVMTCkgeworQEAgLTIyNTgsNiArMjMyNywxNyBAQAorIAkJZmF0YWxfZnIociwg ImNoYW5uZWwgJWk6IHB1dCBkYXRhIiwgYy0+c2VsZik7CisgCisgCXJldHVybiAxOworKwl9IC8q IGVuZCBkYXRhZ3JhbS9maWx0ZXIgYnVmW10gc2NvcGUgKi8KKysKKysgcmZhaWw6CisrCWlmIChj LT50eXBlICE9IFNTSF9DSEFOTkVMX09QRU4pIHsKKysJCWRlYnVnMigiY2hhbm5lbCAlZDogbm90 IG9wZW4iLCBjLT5zZWxmKTsKKysJCWNoYW5fbWFya19kZWFkKHNzaCwgYyk7CisrCQlyZXR1cm4g LTE7CisrCX0gZWxzZSB7CisrCQljaGFuX3JlYWRfZmFpbGVkKHNzaCwgYyk7CisrCX0KKysJcmV0 dXJuIC0xOworIH0KKyAKKyBzdGF0aWMgaW50CitAQCAtMjQzOCwxOCArMjUxOCwyOSBAQAorIAkg ICAgYy0+bG9jYWxfbWF4cGFja2V0KjMpIHx8CisgCSAgICBjLT5sb2NhbF93aW5kb3cgPCBjLT5s b2NhbF93aW5kb3dfbWF4LzIpICYmCisgCSAgICBjLT5sb2NhbF9jb25zdW1lZCA+IDApIHsKKysJ CWludCBhZGRpdGlvbiA9IDA7CisrCQl1X2ludDMyX3QgdGNwd2luc3ogPSBjaGFubmVsX3RjcHdp bnN6KHNzaCk7CisrCQkvKiBhZGp1c3QgbWF4IHdpbmRvdyBzaXplIGlmIHdlIGFyZSBpbiBhIGR5 bmFtaWMgZW52aXJvbm1lbnQKKysJCSAqIGFuZCB0aGUgdGNwIHJlY2VpdmUgYnVmZmVyIGlzIGxh cmdlciB0aGFuIHRoZSBzc2ggd2luZG93ICovCisrCQlpZiAoYy0+ZHluYW1pY193aW5kb3cgJiYg KHRjcHdpbnN6ID4gYy0+bG9jYWxfd2luZG93X21heCkpIHsKKysJCQkvKiBhZ2dyZXNzaXZlbHkg Z3JvdyB0aGUgd2luZG93ICovCisrCQkJYWRkaXRpb24gPSB0Y3B3aW5zeiAtIGMtPmxvY2FsX3dp bmRvd19tYXg7CisrCQkJYy0+bG9jYWxfd2luZG93X21heCArPSBhZGRpdGlvbjsKKysJCQlkZWJ1 Z19mKCJDaGFubmVsICVkOiBXaW5kb3cgZ3Jvd3RoIHRvICVkIGJ5ICVkIGJ5dGVzIixjLT5zZWxm LAorKwkJCSAgICAgIGMtPmxvY2FsX3dpbmRvd19tYXgsIGFkZGl0aW9uKTsKKysJCX0KKyAJCWlm ICghYy0+aGF2ZV9yZW1vdGVfaWQpCisgCQkJZmF0YWxfZigiY2hhbm5lbCAlZDogbm8gcmVtb3Rl IGlkIiwgYy0+c2VsZik7CisgCQlpZiAoKHIgPSBzc2hwa3Rfc3RhcnQoc3NoLAorIAkJICAgIFNT SDJfTVNHX0NIQU5ORUxfV0lORE9XX0FESlVTVCkpICE9IDAgfHwKKyAJCSAgICAociA9IHNzaHBr dF9wdXRfdTMyKHNzaCwgYy0+cmVtb3RlX2lkKSkgIT0gMCB8fAorLQkJICAgIChyID0gc3NocGt0 X3B1dF91MzIoc3NoLCBjLT5sb2NhbF9jb25zdW1lZCkpICE9IDAgfHwKKysJCSAgICAociA9IHNz aHBrdF9wdXRfdTMyKHNzaCwgYy0+bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlvbikpICE9IDAgfHwK KyAJCSAgICAociA9IHNzaHBrdF9zZW5kKHNzaCkpICE9IDApIHsKKyAJCQlmYXRhbF9mcihyLCAi Y2hhbm5lbCAlaSIsIGMtPnNlbGYpOworIAkJfQorIAkJZGVidWcyKCJjaGFubmVsICVkOiB3aW5k b3cgJWQgc2VudCBhZGp1c3QgJWQiLCBjLT5zZWxmLAorLQkJICAgIGMtPmxvY2FsX3dpbmRvdywg Yy0+bG9jYWxfY29uc3VtZWQpOworLQkJYy0+bG9jYWxfd2luZG93ICs9IGMtPmxvY2FsX2NvbnN1 bWVkOworKwkJICAgIGMtPmxvY2FsX3dpbmRvdywgYy0+bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlv bik7CisrCQljLT5sb2NhbF93aW5kb3cgKz0gYy0+bG9jYWxfY29uc3VtZWQgKyBhZGRpdGlvbjsK KyAJCWMtPmxvY2FsX2NvbnN1bWVkID0gMDsKKyAJfQorIAlyZXR1cm4gMTsKK0BAIC0zMDM4LDkg KzMxMjksNyBAQAorIAkJCSAqIGluIHVzZS4KKyAJCQkgKi8KKyAJCQlpZiAoQ0hBTk5FTF9FRkRf SU5QVVRfQUNUSVZFKGMpKQorLQkJCQlkZWJ1ZzIoImNoYW5uZWwgJWQ6ICIKKy0JCQkJICAgICJp YnVmX2VtcHR5IGRlbGF5ZWQgZWZkICVkLyglenUpIiwKKy0JCQkJICAgIGMtPnNlbGYsIGMtPmVm ZCwgc3NoYnVmX2xlbihjLT5leHRlbmRlZCkpOworKwkJCQl7fQorIAkJCWVsc2UKKyAJCQkJY2hh bl9pYnVmX2VtcHR5KHNzaCwgYyk7CisgCQl9CitAQCAtMzc1Miw3ICszODQxLDcgQEAKKyAJCWVy cm9yX2ZyKHIsICJwYXJzZSBhZGp1c3QiKTsKKyAJCXNzaF9wYWNrZXRfZGlzY29ubmVjdChzc2gs ICJJbnZhbGlkIHdpbmRvdyBhZGp1c3QgbWVzc2FnZSIpOworIAl9CistCWRlYnVnMigiY2hhbm5l bCAlZDogcmN2ZCBhZGp1c3QgJXUiLCBjLT5zZWxmLCBhZGp1c3QpOworKwlkZWJ1ZzNfZigiY2hh bm5lbCAlZDogcmN2ZCBhZGp1c3QgJXUiLCBjLT5zZWxmLCBhZGp1c3QpOworIAlpZiAoKG5ld19y d2luID0gYy0+cmVtb3RlX3dpbmRvdyArIGFkanVzdCkgPCBjLT5yZW1vdGVfd2luZG93KSB7Cisg CQlmYXRhbCgiY2hhbm5lbCAlZDogYWRqdXN0ICV1IG92ZXJmbG93cyByZW1vdGUgd2luZG93ICV1 IiwKKyAJCSAgICBjLT5zZWxmLCBhZGp1c3QsIGMtPnJlbW90ZV93aW5kb3cpOworQEAgLTM4Njcs NiArMzk1NiwxMyBAQAorIAlyZXR1cm4gYWRkcjsKKyB9CisgCisrdm9pZAorK2NoYW5uZWxfc2V0 X2hwbl9kaXNhYmxlZChpbnQgZXh0ZXJuYWxfaHBuX2Rpc2FibGVkKQorK3sKKysJaHBuX2Rpc2Fi bGVkID0gZXh0ZXJuYWxfaHBuX2Rpc2FibGVkOworKwlkZWJ1ZygiSFBOIERpc2FibGVkOiAlZCIs IGhwbl9kaXNhYmxlZCk7CisrfQorKworIHN0YXRpYyBpbnQKKyBjaGFubmVsX3NldHVwX2Z3ZF9s aXN0ZW5lcl90Y3BpcChzdHJ1Y3Qgc3NoICpzc2gsIGludCB0eXBlLAorICAgICBzdHJ1Y3QgRm9y d2FyZCAqZndkLCBpbnQgKmFsbG9jYXRlZF9saXN0ZW5fcG9ydCwKK2RpZmYgLU51ciBvcGVuc3No LTEwLjNwMS5vcmlnL2NoYW5uZWxzLmggb3BlbnNzaC0xMC4zcDEvY2hhbm5lbHMuaAorLS0tIG9w ZW5zc2gtMTAuM3AxLm9yaWcvY2hhbm5lbHMuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0 NyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL2NoYW5uZWxzLmgJMjAyNi0wNy0wMiAwMDoyNzoy OS43MjA1NzU1MzQgKzAyMDAKK0BAIC0xODAsNiArMTgwLDcgQEAKKyAJdV9pbnQJbG9jYWxfd2lu ZG93X21heDsKKyAJdV9pbnQJbG9jYWxfY29uc3VtZWQ7CisgCXVfaW50CWxvY2FsX21heHBhY2tl dDsKKysJaW50CWR5bmFtaWNfd2luZG93OworIAlpbnQgICAgIGV4dGVuZGVkX3VzYWdlOworIAlp bnQJYWdlbnRfbmV3OwkvKiBGb3IgYWdlbnQgbGlzdGVuZXJzLCB1c2UgUkZDIFhYWCByZXFlc3Rz ICovCisgCWludAlzaW5nbGVfY29ubmVjdGlvbjsKK0BAIC0yNjMsNyArMjY0LDcgQEAKKyAjZGVm aW5lIFNTSF9DSEFOX0lPX1NPQ0sJCShTU0hfQ0hBTl9JT19TT0NLX1J8U1NIX0NIQU5fSU9fU09D S19XKQorIAorIC8qIFJlYWQgYnVmZmVyIHNpemUgKi8KKy0jZGVmaW5lIENIQU5fUkJVRgkoMTYq MTAyNCkKKysjZGVmaW5lIENIQU5fUkJVRglDSEFOX1NFU19QQUNLRVRfREVGQVVMVAorIAorIC8q IE1heGltdW0gc2l6ZSBmb3IgZGlyZWN0IHJlYWRzIHRvIGJ1ZmZlcnMgKi8KKyAjZGVmaW5lIENI QU5ORUxfTUFYX1JFQUQJQ0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQKK0BAIC00MTMsNCArNDE0LDYg QEAKKyB2b2lkCSBjaGFuX3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgc3NoICosIENoYW5uZWwgKik7Cisg dm9pZAkgY2hhbl9vYnVmX2VtcHR5KHN0cnVjdCBzc2ggKiwgQ2hhbm5lbCAqKTsKKyAKKysvKiBo cG4gaGFuZGxlciAqLworK3ZvaWQJIGNoYW5uZWxfc2V0X2hwbl9kaXNhYmxlZChpbnQpOworICNl bmRpZgorZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLmMgb3BlbnNzaC0xMC4z cDEvY2lwaGVyLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci5jCTIwMjYtMDctMDIg MDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLmMJMjAy Ni0wNy0wMiAwODowNTozNS42NTE3OTIxMDYgKzAyMDAKK0BAIC00NywyMyArNDcsNDAgQEAKKyAj aW5jbHVkZSAibWlzYy5oIgorICNpbmNsdWRlICJzc2hidWYuaCIKKyAjaW5jbHVkZSAic3NoZXJy LmgiCisrI2luY2x1ZGUgImRpZ2VzdC5oIgorKyNpbmNsdWRlICJsb2cuaCIKKyAKKyAjaW5jbHVk ZSAib3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaCIKKyAKKysvKiBmb3IgcHJvdmlkZXIg ZnVuY3Rpb25zICovCisrI2lmZGVmIFdJVEhfT1BFTlNTTDMKKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9wYXJhbXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9w cm92aWRlci5oPgorKyNlbmRpZgorKworICNpZm5kZWYgV0lUSF9PUEVOU1NMCisgI2RlZmluZSBF VlBfQ0lQSEVSX0NUWCB2b2lkCisrI2RlZmluZSBFVlBfQ0lQSEVSIHZvaWQKKysjZWxzZQorKy8q IGZvciBtdWx0aS10aHJlYWRlZCBhZXMtY3RyIGNpcGhlciAqLworK2V4dGVybiBjb25zdCBFVlBf Q0lQSEVSICpldnBfYWVzX2N0cl9tdCh2b2lkKTsKKyAjZW5kaWYKKyAKKyBzdHJ1Y3Qgc3NoY2lw aGVyX2N0eCB7CisgCWludAlwbGFpbnRleHQ7CisgCWludAllbmNyeXB0OworIAlFVlBfQ0lQSEVS X0NUWCAqZXZwOworKwljb25zdCBFVlBfQ0lQSEVSICptZXRoX3B0cjsgLyp1c2VkIHRvIGZyZWUg bWVtb3J5IGluIGFlc19jdHJfbXQgKi8KKyAJc3RydWN0IGNoYWNoYXBvbHlfY3R4ICpjcF9jdHg7 CisrI2lmZGVmIFdJVEhfT1BFTlNTTAorKwlzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKmNwX2N0 eF9tdDsKKysjZW5kaWYKKyAJc3RydWN0IGFlc2N0cl9jdHggYWNfY3R4OyAvKiBYWFggdW5pb24g d2l0aCBldnA/ICovCisgCWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmNpcGhlcjsKKyB9OworIAor LXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyIGNpcGhlcnNbXSA9IHsKKytzdGF0aWMgc3Ry dWN0IHNzaGNpcGhlciBjaXBoZXJzW10gPSB7CisgI2lmZGVmIFdJVEhfT1BFTlNTTAorICNpZm5k ZWYgT1BFTlNTTF9OT19ERVMKKyAJeyAiM2Rlcy1jYmMiLAkJOCwgMjQsIDAsIDAsIENGTEFHX0NC QywgRVZQX2Rlc19lZGUzX2NiYyB9LAorQEAgLTg1LDYgKzEwMiwxMCBAQAorICNlbmRpZgorIAl7 ICJjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSIsCisgCQkJCTgsIDY0LCAwLCAxNiwgQ0ZM QUdfQ0hBQ0hBUE9MWSwgTlVMTCB9LAorKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJeyAiY2hhY2hh MjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIsCisrCQkJCTgsIDY0LCAwLCAxNiwgQ0ZMQUdfQ0hB Q0hBUE9MWXxDRkxBR19NVCwgTlVMTCB9LAorKyNlbmRpZgorIAl7ICJub25lIiwJCTgsIDAsIDAs IDAsIENGTEFHX05PTkUsIE5VTEwgfSwKKyAKKyAJeyBOVUxMLAkJCTAsIDAsIDAsIDAsIDAsIE5V TEwgfQorQEAgLTEyMSwxMiArMTQyLDYzIEBACisgI2VuZGlmCisgfQorIAorKy8qIHVzZWQgdG8g Z2V0IHRoZSBjaXBoZXIgbmFtZSB3aGVuIHdlIGFyZSB0ZXN0aW5nIHRvCisrICogc2VlIGlmIHdl IGNhbiBtb3ZlIGZyb20gYSBzZXJpYWwgdG8gcGFyYWxsZWwgY2lwaGVyCisrICogb25seSBjYWxs ZWQgaW4gY2lwaGVyLXN3aXRjaC5jCisrICovCisrY29uc3QgY2hhciAqCisrY2lwaGVyX2N0eF9u YW1lKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXJfY3R4ICpjYykKKyt7CisrCXJldHVybiBjYy0+Y2lw aGVyLT5uYW1lOworK30KKysKKyB1X2ludAorIGNpcGhlcl9ibG9ja3NpemUoY29uc3Qgc3RydWN0 IHNzaGNpcGhlciAqYykKKyB7CisgCXJldHVybiAoYy0+YmxvY2tfc2l6ZSk7CisgfQorIAorK3Vp bnQ2NF90CisrY2lwaGVyX3Jla2V5X2Jsb2Nrcyhjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjKQor K3sKKysJLyoKKysJICogQ2hhY2hhMjAtUG9seTEzMDUgZG9lcyBub3QgYmVuZWZpdCBmcm9tIGRh dGEtYmFzZWQgcmVrZXlpbmcsCisrCSAqIHBlciAiVGhlIFNlY3VyaXR5IG9mIENoYUNoYTIwLVBv bHkxMzA1IGluIHRoZSBNdWx0aS11c2VyIFNldHRpbmciLAorKwkgKiBEZWdhYnJpZWxlLCBKLiBQ LiwgR292aW5kZW4sIEosIEd1bnRoZXIsIEYuIGFuZCBQYXRlcnNvbiBLLgorKwkgKiBBQ00gQ0NT IDIwMjE7IGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMjMvMDg1LnBkZgorKwkgKgorKwkgKiBD cnlwdGFuYWx5c2lzIGFzaWRlLCB3ZSBkbyBzdGlsbCB3YW50IGRvIG5lZWQgdG8gcHJldmVudCB0 aGUgU1NICisrCSAqIHNlcXVlbmNlIG51bWJlciB3cmFwcGluZyBhbmQgYWxzbyB0byByZWtleSB0 byBwcm92aWRlIHNvbWUKKysJICogcHJvdGVjdGlvbiBmb3IgbG9uZyBsaXZlZCBzZXNzaW9ucyBh Z2FpbnN0IGtleSBkaXNjbG9zdXJlIGF0IHRoZQorKwkgKiBlbmRwb2ludHMsIHNvIGFycmFuZ2Ug Zm9yIHJla2V5aW5nIGV2ZXJ5IDIqKjMyIGJsb2NrcyBhcyB0aGUKKysJICogMTI4LWJpdCBibG9j ayBjaXBoZXJzIGRvIChpLmUuIGV2ZXJ5IDMyR0IgZGF0YSkuCisrCSAqLworKwlpZiAoKGMtPmZs YWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkKKysJCXJldHVybiAodWludDY0X3QpMSA8PCAz MjsKKysKKysJLyogdGhlcmUgaXMgbm8gYWN0dWFsIG5lZWQgdG8gcmVrZXkgdGhlIE5VTEwgY2lw aGVyIGJ1dAorKwkgKiByZWtleWluZyBpcyBhIG5lY2Vzc2FyeSBzdGVwLiBJbiBwYXJ0LCBhcyBt ZW50aW9uZWQgYWJvdmUsCisrCSAqIHRvIGtlZXAgdGhlIHNlcW5yIGZyb20gd3JhcHBpbmcuIFNv IHdlIHNldCBpdCB0byB0aGUKKysJICogbWF4aW11bSBwb3NzaWJsZSAtY2pyIDQvMTAvMjMgKi8K KysJaWYgKChjLT5mbGFncyAmIENGTEFHX05PTkUpICE9IDApCisrCQlyZXR1cm4gKHVpbnQ2NF90 KTEgPDwgMzI7CisrCisrCS8qCisrCSAqIFRoZSAyXihibG9ja3NpemUqMikgbGltaXQgaXMgdG9v IGV4cGVuc2l2ZSBmb3IgM0RFUywKKysJICogc28gZW5mb3JjZSBhIDFHQiBkYXRhIGxpbWl0IGZv ciBzbWFsbCBibG9ja3NpemVzLgorKwkgKiBTZWUgZGlzY3Vzc2lvbiBpbiBSRkM0MzQ0IHNlY3Rp b24gMy4yLgorKwkgKi8KKysJaWYgKGMtPmJsb2NrX3NpemUgPCAxNikKKysJCXJldHVybiAoKHVp bnQ2NF90KTEgPDwgMzApIC8gYy0+YmxvY2tfc2l6ZTsKKysJLyoKKysJICogT3RoZXJ3aXNlLCB1 c2UgdGhlIFJGQzQzNDQgczMuMiByZWNvbW1lbmRhdGlvbiBvZiAyKiooTC80KSBibG9ja3MKKysJ ICogYmVmb3JlIHJla2V5aW5nIHdoZXJlIEwgaXMgdGhlIGJsb2Nrc2l6ZSBpbiBiaXRzLgorKwkg KiBNb3N0IG90aGVyIGNpcGhlcnMgaGF2ZSBhIDEyOCBiaXQgYmxvY2tzaXplLCBzbyB0aGlzIGVx dWF0ZXMgdG8KKysJICogMioqMzIgYmxvY2tzIC8gNjRHQiBkYXRhLgorKwkgKi8KKysJcmV0dXJu ICh1aW50NjRfdCkxIDw8IChjLT5ibG9ja19zaXplICogMik7CisrfQorKworIHVfaW50CisgY2lw aGVyX2tleWxlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjKQorIHsKK0BAIC0xNzAsMTAgKzI0 MiwxMCBAQAorIAlyZXR1cm4gY2MtPnBsYWludGV4dDsKKyB9CisgCistY29uc3Qgc3RydWN0IHNz aGNpcGhlciAqCisrc3RydWN0IHNzaGNpcGhlciAqCisgY2lwaGVyX2J5X25hbWUoY29uc3QgY2hh ciAqbmFtZSkKKyB7CistCWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKmM7CisrCXN0cnVjdCBzc2hj aXBoZXIgKmM7CisgCWZvciAoYyA9IGNpcGhlcnM7IGMtPm5hbWUgIT0gTlVMTDsgYysrKQorIAkJ aWYgKHN0cmNtcChjLT5uYW1lLCBuYW1lKSA9PSAwKQorIAkJCXJldHVybiBjOworQEAgLTE5NSw3 ICsyNjcsOCBAQAorIAlmb3IgKChwID0gc3Ryc2VwKCZjcCwgQ0lQSEVSX1NFUCkpOyBwICYmICpw ICE9ICdcMCc7CisgCSAgICAocCA9IHN0cnNlcCgmY3AsIENJUEhFUl9TRVApKSkgeworIAkJYyA9 IGNpcGhlcl9ieV9uYW1lKHApOworLQkJaWYgKGMgPT0gTlVMTCB8fCAoYy0+ZmxhZ3MgJiBDRkxB R19JTlRFUk5BTCkgIT0gMCkgeworKwkJaWYgKGMgPT0gTlVMTCB8fCAoKGMtPmZsYWdzICYgQ0ZM QUdfSU5URVJOQUwpICE9IDAgJiYKKysJCQkJICAoYy0+ZmxhZ3MgJiBDRkxBR19OT05FKSAhPSAw KSkgeworIAkJCWZyZWUoY2lwaGVyX2xpc3QpOworIAkJCXJldHVybiAwOworIAkJfQorQEAgLTIx Niw3ICsyODksNyBAQAorIGludAorIGNpcGhlcl9pbml0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICoq Y2NwLCBjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjaXBoZXIsCisgICAgIGNvbnN0IHVfY2hhciAq a2V5LCB1X2ludCBrZXlsZW4sIGNvbnN0IHVfY2hhciAqaXYsIHVfaW50IGl2bGVuLAorLSAgICBp bnQgZG9fZW5jcnlwdCkKKysgICAgdV9pbnQgc2VxbnIsIGludCBkb19lbmNyeXB0LCBpbnQgZW5h YmxlX3RocmVhZHMpCisgeworIAlzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqY2MgPSBOVUxMOworIAlp bnQgcmV0ID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKK0BAIC0yMzEsNiArMzA0LDcgQEAKKyAK KyAJY2MtPnBsYWludGV4dCA9IChjaXBoZXItPmZsYWdzICYgQ0ZMQUdfTk9ORSkgIT0gMDsKKyAJ Y2MtPmVuY3J5cHQgPSBkb19lbmNyeXB0OworKwljYy0+bWV0aF9wdHIgPSBOVUxMOworIAorIAlp ZiAoa2V5bGVuIDwgY2lwaGVyLT5rZXlfbGVuIHx8CisgCSAgICAoaXYgIT0gTlVMTCAmJiBpdmxl biA8IGNpcGhlcl9pdmxlbihjaXBoZXIpKSkgeworQEAgLTI0MCw4ICszMTQsMTkgQEAKKyAKKyAJ Y2MtPmNpcGhlciA9IGNpcGhlcjsKKyAJaWYgKChjYy0+Y2lwaGVyLT5mbGFncyAmIENGTEFHX0NI QUNIQVBPTFkpICE9IDApIHsKKysjaWZkZWYgV0lUSF9PUEVOU1NMCisrCQlpZiAoKGNjLT5jaXBo ZXItPmZsYWdzICYgQ0ZMQUdfTVQpICE9IDApIHsKKysJCQljYy0+Y3BfY3R4X210ID0gY2hhY2hh cG9seV9uZXdfbXQoc2VxbnIsIGtleSwga2V5bGVuKTsKKysJCQlyZXQgPSBjYy0+Y3BfY3R4X210 ICE9IE5VTEwgPyAwIDoKKysJCQkgICAgU1NIX0VSUl9JTlZBTElEX0FSR1VNRU5UOworKwkJfSBl bHNlIHsKKysJCQljYy0+Y3BfY3R4ID0gY2hhY2hhcG9seV9uZXcoa2V5LCBrZXlsZW4pOworKwkJ CXJldCA9IGNjLT5jcF9jdHggIT0gTlVMTCA/IDAgOiBTU0hfRVJSX0lOVkFMSURfQVJHVU1FTlQ7 CisrCQl9CisrI2Vsc2UKKyAJCWNjLT5jcF9jdHggPSBjaGFjaGFwb2x5X25ldyhrZXksIGtleWxl bik7CisgCQlyZXQgPSBjYy0+Y3BfY3R4ICE9IE5VTEwgPyAwIDogU1NIX0VSUl9JTlZBTElEX0FS R1VNRU5UOworKyNlbmRpZgorIAkJZ290byBvdXQ7CisgCX0KKyAJaWYgKChjYy0+Y2lwaGVyLT5m bGFncyAmIENGTEFHX05PTkUpICE9IDApIHsKK0BAIC0yNjMsNiArMzQ4LDUzIEBACisgCQlyZXQg PSBTU0hfRVJSX0FMTE9DX0ZBSUw7CisgCQlnb3RvIG91dDsKKyAJfQorKwkvKiB0aGUgZm9sbG93 aW5nIGJsb2NrIGlzIGZvciBBRVMtQ1RSLU1UIGNpcGhlciBzd2l0Y2hpbmcKKysJICogaWYgd2Ug YXJlIHVzaW5nIHRoZSBjdHIgY2lwaGVyIGFuZCB3ZSBhcmUgcG9zdC1hdXRoIHRoZW4KKysJICog c3RhcnQgdGhlIHRocmVhZGVkIGNpcGhlci4gSWYgT1NTTCBzdXBwb3J0cyBwcm92aWRlcnMgKE9T U0wgMy4wKykgdGhlbgorKwkgKiB3ZSBsb2FkIG91ciBocG5zc2ggcHJvdmlkZXIuIElmIGl0IGRv ZXNuJ3QgKE9TU0wgPCAxLjEpIHRoZW4gd2UgdXNlIHRoZQorKwkgKiBfbWV0aF9uZXcgcHJvY2Vz cyBmb3VuZCBpbiBjaXBoZXItY3RyLW10LmMgKi8KKysJaWYgKHN0cnN0cihjYy0+Y2lwaGVyLT5u YW1lLCAiY3RyIikgJiYgZW5hYmxlX3RocmVhZHMpIHsKKysjaWZkZWYgV0lUSF9PUEVOU1NMMwor KwkJLyogdGhpcyB2ZXJzaW9uIG9mIG9wZW5zc2wgdXNlcyBwcm92aWRlcnMgKi8KKysJCU9TU0xf TElCX0NUWCAqYWVzX2xpYiA9IE5VTEw7IC8qIHByb2JhYmx5IG5vdCBuZWVkZWQgKi8KKysJCU9T U0xfUFJPVklERVIgKmFlc19tdF9wcm92aWRlciA9IE5VTEw7CisrCQl0eXBlID0gTlVMTDsKKysK KysJCWlmIChPU1NMX1BST1ZJREVSX2FkZF9idWlsdGluKGFlc19saWIsICJocG5zc2giLAorKwkJ CQkJICAgICAgT1NTTF9wcm92aWRlcl9pbml0KSAhPSAxKSB7CisrCQkJZmF0YWwoIkZhaWxlZCB0 byBhZGQgSFBOU1NIIHByb3ZpZGVyIGZvciBBRVMtQ1RSIik7CisrCQl9CisrCQlhZXNfbXRfcHJv dmlkZXIgPSBPU1NMX1BST1ZJREVSX2xvYWQoYWVzX2xpYiwgImhwbnNzaCIpOworKworKwkJaWYg KGFlc19tdF9wcm92aWRlciAhPSBOVUxMKSB7CisrCQkJLyogdXNlIHRoZSBwcmV2aW91cyBrZXkg bGVuZ3RoIHRvIGRldGVybWluZSB3aGljaCBjaXBoZXIgdG8gbG9hZCAqLworKwkJCWlmIChjaXBo ZXItPmtleV9sZW4gPT0gMzIpCisrCQkJCXR5cGUgPSBFVlBfQ0lQSEVSX2ZldGNoKGFlc19saWIs ICJhZXNfY3RyX210XzI1NiIsIE5VTEwpOworKwkJCWlmIChjaXBoZXItPmtleV9sZW4gPT0gMjQp CisrCQkJCXR5cGUgPSBFVlBfQ0lQSEVSX2ZldGNoKGFlc19saWIsICJhZXNfY3RyX210XzE5MiIs IE5VTEwpOworKwkJCWlmIChjaXBoZXItPmtleV9sZW4gPT0gMTYpCisrCQkJCXR5cGUgPSBFVlBf Q0lQSEVSX2ZldGNoKGFlc19saWIsICJhZXNfY3RyX210XzEyOCIsIE5VTEwpOworKwkJCWlmICh0 eXBlID09IE5VTEwpIHsKKysJCQkJRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOworKwkJCQlm YXRhbCgiRkFJTEVEIFRPIExPQUQgYWVzX2N0cl9tdCIpOworKwkJCX0gZWxzZSB7CisrCQkJCWRl YnVnKCJMT0FERUQgYWVzX2N0cl9tdCIpOworKwkJCX0KKysJCX0KKysJCWVsc2UgeworKwkJCUVS Ul9wcmludF9lcnJvcnNfZnAoc3RkZXJyKTsKKysJCQlmYXRhbCgiRmFpbGVkIHRvIGxvYWQgSFBO LVNTSCBBRVMtQ1RSLU1UIHByb3ZpZGVyLiIpOworKwkJfQorKyNlbHNlCisrCQl0eXBlID0gKCpl dnBfYWVzX2N0cl9tdCkoKTsgLyogc2VlIGNpcGhlci1jdHItbXQuYyAqLworKwkJLyogd2UgbmVl ZCB0byBmcmVlIHRoaXMgbGF0ZXIgaWYgdXNpbmcgYWVzX2N0cl9tdAorKwkJICogdW5kZXIgT1NT TCAxLjEuIEhvbmVzdGx5LCB3ZSBjb3VsZCBhdm9pZCB0aGlzIGJ5IG1ha2luZworKwkJICogaXQg YSBnbG9iYWwgaW4gY2lwaGVyLWN0cl9tdC5jIGFuZCBleHBvcnRpbmcgaXQgaGVyZQorKwkJICog dGhlbiB3ZSdkIG9ubHkgaGF2ZSB0byBjYWxsIEVWUF9DSVBIRVJfbWV0aCBvbmNlIGJ1dCB0aGlz CisrCQkgKiB3b3JrcyBmb3Igbm93LiBUT0RPOiBUaGlzLiBjanIgMDIuMjIuMjAyMyAqLworKwkJ Y2MtPm1ldGhfcHRyID0gdHlwZTsKKysjZW5kaWYgLyogV0lUSF9PUEVOU1NMMyAqLworKwl9IC8q IGlmIChzdHJzdHIoKSkgKi8KKyAJaWYgKEVWUF9DaXBoZXJJbml0KGNjLT5ldnAsIHR5cGUsIE5V TEwsICh1X2NoYXIgKilpdiwKKyAJICAgIChkb19lbmNyeXB0ID09IENJUEhFUl9FTkNSWVBUKSkg PT0gMCkgeworIAkJcmV0ID0gU1NIX0VSUl9MSUJDUllQVE9fRVJST1I7CitAQCAtMzE3LDYgKzQ0 OSwxMiBAQAorICAgIGNvbnN0IHVfY2hhciAqc3JjLCB1X2ludCBsZW4sIHVfaW50IGFhZGxlbiwg dV9pbnQgYXV0aGxlbikKKyB7CisgCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19DSEFD SEFQT0xZKSAhPSAwKSB7CisrI2lmZGVmIFdJVEhfT1BFTlNTTAorKwkJaWYgKChjYy0+Y2lwaGVy LT5mbGFncyAmIENGTEFHX01UKSAhPSAwKSB7CisrCQkJcmV0dXJuIGNoYWNoYXBvbHlfY3J5cHRf bXQoY2MtPmNwX2N0eF9tdCwgc2VxbnIsIGRlc3QsCisrCQkJICAgIHNyYywgbGVuLCBhYWRsZW4s IGF1dGhsZW4sIGNjLT5lbmNyeXB0KTsKKysJCX0KKysjZW5kaWYKKyAJCXJldHVybiBjaGFjaGFw b2x5X2NyeXB0KGNjLT5jcF9jdHgsIHNlcW5yLCBkZXN0LCBzcmMsCisgCQkgICAgbGVuLCBhYWRs ZW4sIGF1dGhsZW4sIGNjLT5lbmNyeXB0KTsKKyAJfQorQEAgLTM3OSw5ICs1MTcsMTYgQEAKKyBj aXBoZXJfZ2V0X2xlbmd0aChzdHJ1Y3Qgc3NoY2lwaGVyX2N0eCAqY2MsIHVfaW50ICpwbGVucCwg dV9pbnQgc2VxbnIsCisgICAgIGNvbnN0IHVfY2hhciAqY3AsIHVfaW50IGxlbikKKyB7CistCWlm ICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19DSEFDSEFQT0xZKSAhPSAwKQorKwlpZiAoKGNj LT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkgeworKyNpZmRlZiBXSVRI X09QRU5TU0wKKysJCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19NVCkgIT0gMCkgewor KwkJCXJldHVybiBjaGFjaGFwb2x5X2dldF9sZW5ndGhfbXQoY2MtPmNwX2N0eF9tdCwgcGxlbnAs CisrCQkJICAgIHNlcW5yLCBjcCwgbGVuKTsKKysJCX0KKysjZW5kaWYKKyAJCXJldHVybiBjaGFj aGFwb2x5X2dldF9sZW5ndGgoY2MtPmNwX2N0eCwgcGxlbnAsIHNlcW5yLAorIAkJICAgIGNwLCBs ZW4pOworKwl9CisgCWlmIChsZW4gPCA0KQorIAkJcmV0dXJuIFNTSF9FUlJfTUVTU0FHRV9JTkNP TVBMRVRFOworIAkqcGxlbnAgPSBQRUVLX1UzMihjcCk7CitAQCAtMzk0LDEzICs1MzksMzUgQEAK KyAJaWYgKGNjID09IE5VTEwgfHwgY2MtPmNpcGhlciA9PSBOVUxMKQorIAkJcmV0dXJuOworIAlp ZiAoKGNjLT5jaXBoZXItPmZsYWdzICYgQ0ZMQUdfQ0hBQ0hBUE9MWSkgIT0gMCkgeworKyNpZmRl ZiBXSVRIX09QRU5TU0wKKysJCWlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19NVCkgIT0g MCkgeworKwkJCWNoYWNoYXBvbHlfZnJlZV9tdChjYy0+Y3BfY3R4X210KTsKKysJCQljYy0+Y3Bf Y3R4X210ID0gTlVMTDsKKysJCX0gZWxzZSB7CisrCQkJY2hhY2hhcG9seV9mcmVlKGNjLT5jcF9j dHgpOworKwkJCWNjLT5jcF9jdHggPSBOVUxMOworKwkJfQorKyNlbHNlCisgCQljaGFjaGFwb2x5 X2ZyZWUoY2MtPmNwX2N0eCk7CisgCQljYy0+Y3BfY3R4ID0gTlVMTDsKKysjZW5kaWYKKyAJfSBl bHNlIGlmICgoY2MtPmNpcGhlci0+ZmxhZ3MgJiBDRkxBR19BRVNDVFIpICE9IDApCisgCQlleHBs aWNpdF9iemVybygmY2MtPmFjX2N0eCwgc2l6ZW9mKGNjLT5hY19jdHgpKTsKKyAjaWZkZWYgV0lU SF9PUEVOU1NMCisgCUVWUF9DSVBIRVJfQ1RYX2ZyZWUoY2MtPmV2cCk7CisgCWNjLT5ldnAgPSBO VUxMOworKwkvKiBpZiBtZXRoX3B0ciBpc24ndCBudWxsIHRoZW4gd2UgYXJlIHVzaW5nIHRoZSBh ZXNfY3RyX210CisrCSAqIGV2cF9jaXBoZXJfbWV0aF9uZXcoKSBpbiBjaXBoZXItY3RyLW10LmMg dW5kZXIgT1NTTCAxLjEKKysJICogaWYgd2UgZG9uJ3QgZXhwbGljaXRseSBmcmVlIGl0IHRoZW4s IGV2ZW4gdGhvdWdoIHdlIGZyZWUKKysJICogdGhlIGN0eCBpdCBpcyBhIHBhcnQgb2YgaXQgZG9l c24ndCBnZXQgZnJlZWQuIFNvLi4uCisrCSAqIGNqciAyLzcvMjAyMworKwkgKi8KKysjaWYgIWRl ZmluZWQoV0lUSF9PUEVOU1NMMykKKysJaWYgKGNjLT5tZXRoX3B0ciAhPSBOVUxMKSB7CisrCQlF VlBfQ0lQSEVSX21ldGhfZnJlZSgodm9pZCAqKShFVlBfQ0lQSEVSICopY2MtPm1ldGhfcHRyKTsK KysJCWNjLT5tZXRoX3B0ciA9IE5VTEw7CisrCX0KKysjZW5kaWYKKyAjZW5kaWYKKyAJZnJlZXpl cm8oY2MsIHNpemVvZigqY2MpKTsKKyB9CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9j aXBoZXItY2hhY2hhcG9seS5jIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LmMKKy0t LSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LmMJMjAyNi0wNy0wMiAwMDoy NzowNi4wOTI1ODg3ODMgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY2hhY2hhcG9s eS5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIxMTQ0NDk2ICswMjAwCitAQCAtODgsNyArODgsNyBA QAorIAlpZiAoIWRvX2VuY3J5cHQpIHsKKyAJCWNvbnN0IHVfY2hhciAqdGFnID0gc3JjICsgYWFk bGVuICsgbGVuOworIAorLQkJcG9seTEzMDVfYXV0aChleHBlY3RlZF90YWcsIHNyYywgYWFkbGVu ICsgbGVuLCBwb2x5X2tleSk7CisrCQlwb2x5MTMwNV9hdXRoKE5VTEwsIGV4cGVjdGVkX3RhZywg c3JjLCBhYWRsZW4gKyBsZW4sIHBvbHlfa2V5KTsKKyAJCWlmICh0aW1pbmdzYWZlX2JjbXAoZXhw ZWN0ZWRfdGFnLCB0YWcsIFBPTFkxMzA1X1RBR0xFTikgIT0gMCkgeworIAkJCXIgPSBTU0hfRVJS X01BQ19JTlZBTElEOworIAkJCWdvdG8gb3V0OworQEAgLTEwOCw3ICsxMDgsNyBAQAorIAorIAkv KiBJZiBlbmNyeXB0aW5nLCBjYWxjdWxhdGUgYW5kIGFwcGVuZCB0YWcgKi8KKyAJaWYgKGRvX2Vu Y3J5cHQpIHsKKy0JCXBvbHkxMzA1X2F1dGgoZGVzdCArIGFhZGxlbiArIGxlbiwgZGVzdCwgYWFk bGVuICsgbGVuLAorKwkJcG9seTEzMDVfYXV0aChOVUxMLCBkZXN0ICsgYWFkbGVuICsgbGVuLCBk ZXN0LCBhYWRsZW4gKyBsZW4sCisgCQkgICAgcG9seV9rZXkpOworIAl9CisgCXIgPSAwOworZGlm ZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLmMg b3BlbnNzaC0xMC4zcDEvY2lwaGVyLWNoYWNoYXBvbHktbGliY3J5cHRvLmMKKy0tLSBvcGVuc3No LTEwLjNwMS5vcmlnL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by5jCTIwMjYtMDctMDIgMDA6 Mjc6MDYuMDkyNTg4NzgzICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLWNoYWNoYXBv bHktbGliY3J5cHRvLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjEzMzUxNjcgKzAyMDAKK0BAIC0z Miw4ICszMiwxOCBAQAorICNpbmNsdWRlICJzc2hlcnIuaCIKKyAjaW5jbHVkZSAiY2lwaGVyLWNo YWNoYXBvbHkuaCIKKyAKKysKKysvKiB1c2luZyB0aGUgRVZQX01BQyBpbnRlcmZhY2UgZm9yIHBv bHkxMzA1IGlzIHNpZ25pZmljYW50bHkKKysgKiBmYXN0ZXIgdGhhbiB0aGUgdmVyc2lvbiBidW5k bGVkIHdpdGggT3BlblNTSC4gSG93ZXZlciwKKysgKiB0aGlzIGludGVyZmFjZSBpcyBvbmx5IGF2 YWlsYWJsZSBpbiBPcGVuU1NMIDMuMCsKKysgKiAtY2pyIDEwLzIxLzIwMjIgKi8KKyBzdHJ1Y3Qg Y2hhY2hhcG9seV9jdHggeworIAlFVlBfQ0lQSEVSX0NUWCAqbWFpbl9ldnAsICpoZWFkZXJfZXZw OworKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKKysJRVZQX01BQ19DVFggICAgKnBvbHlf Y3R4OworKyNlbHNlCisrCWNoYXIgICAgICAgICAgICpwb2x5X2N0eDsKKysjZW5kaWYKKyB9Owor IAorIHN0cnVjdCBjaGFjaGFwb2x5X2N0eCAqCitAQCAtNTQsNiArNjQsMTUgQEAKKyAJCWdvdG8g ZmFpbDsKKyAJaWYgKEVWUF9DSVBIRVJfQ1RYX2l2X2xlbmd0aChjdHgtPmhlYWRlcl9ldnApICE9 IDE2KQorIAkJZ290byBmYWlsOworKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9FVlAKKysJRVZQ X01BQyAqbWFjID0gTlVMTDsKKysJaWYgKChtYWMgPSBFVlBfTUFDX2ZldGNoKE5VTEwsICJQT0xZ MTMwNSIsIE5VTEwpKSA9PSBOVUxMKQorKwkJZ290byBmYWlsOworKwlpZiAoKGN0eC0+cG9seV9j dHggPSBFVlBfTUFDX0NUWF9uZXcobWFjKSkgPT0gTlVMTCkKKysJCWdvdG8gZmFpbDsKKysjZWxz ZQorKwljdHgtPnBvbHlfY3R4ID0gTlVMTDsKKysjZW5kaWYKKyAJcmV0dXJuIGN0eDsKKyAgZmFp bDoKKyAJY2hhY2hhcG9seV9mcmVlKGN0eCk7CitAQCAtNjcsNiArODYsOSBAQAorIAkJcmV0dXJu OworIAlFVlBfQ0lQSEVSX0NUWF9mcmVlKGNwY3R4LT5tYWluX2V2cCk7CisgCUVWUF9DSVBIRVJf Q1RYX2ZyZWUoY3BjdHgtPmhlYWRlcl9ldnApOworKyNpZmRlZiBPUEVOU1NMX0hBVkVfUE9MWV9F VlAKKysJRVZQX01BQ19DVFhfZnJlZShjcGN0eC0+cG9seV9jdHgpOworKyNlbmRpZgorIAlmcmVl emVybyhjcGN0eCwgc2l6ZW9mKCpjcGN0eCkpOworIH0KKyAKK0BAIC0xMDUsNyArMTI3LDcgQEAK KyAJaWYgKCFkb19lbmNyeXB0KSB7CisgCQljb25zdCB1X2NoYXIgKnRhZyA9IHNyYyArIGFhZGxl biArIGxlbjsKKyAKKy0JCXBvbHkxMzA1X2F1dGgoZXhwZWN0ZWRfdGFnLCBzcmMsIGFhZGxlbiAr IGxlbiwgcG9seV9rZXkpOworKwkJcG9seTEzMDVfYXV0aChjdHgtPnBvbHlfY3R4LCBleHBlY3Rl ZF90YWcsIHNyYywgYWFkbGVuICsgbGVuLCBwb2x5X2tleSk7CisgCQlpZiAodGltaW5nc2FmZV9i Y21wKGV4cGVjdGVkX3RhZywgdGFnLCBQT0xZMTMwNV9UQUdMRU4pICE9IDApIHsKKyAJCQlyID0g U1NIX0VSUl9NQUNfSU5WQUxJRDsKKyAJCQlnb3RvIG91dDsKK0BAIC0xMzEsNyArMTUzLDcgQEAK KyAKKyAJLyogSWYgZW5jcnlwdGluZywgY2FsY3VsYXRlIGFuZCBhcHBlbmQgdGFnICovCisgCWlm IChkb19lbmNyeXB0KSB7CistCQlwb2x5MTMwNV9hdXRoKGRlc3QgKyBhYWRsZW4gKyBsZW4sIGRl c3QsIGFhZGxlbiArIGxlbiwKKysJCXBvbHkxMzA1X2F1dGgoY3R4LT5wb2x5X2N0eCwgZGVzdCAr IGFhZGxlbiArIGxlbiwgZGVzdCwgYWFkbGVuICsgbGVuLAorIAkJICAgIHBvbHlfa2V5KTsKKyAJ fQorIAlyID0gMDsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jaGFjaGFw b2x5LWxpYmNyeXB0by1tdC5jIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNy eXB0by1tdC5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY2hhY2hhcG9seS1saWJj cnlwdG8tbXQuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5jCTIwMjYtMDctMDIgMDA6 Mjc6MjkuNzIxNTQxMDI0ICswMjAwCitAQCAtMCwwICsxLDcwNSBAQAorKy8qCisrICogQ29weXJp Z2h0IChjKSAyMDIzIFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5p dmVyc2l0eS4KKysgKgorKyAqICBBdXRob3I6IE1pdGNoZWxsIERvcnJlbGwgPG13ZEBwc2MuZWR1 PgorKyAqICBBdXRob3I6IENocmlzIFJhcGllciAgPHJhcGllckBwc2MuZWR1PgorKyAqCisrICog VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQKKysgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgor KyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisrICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKKysgKiBpZiBub3QsIHNlZSBo dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgorKyAqCisrICovCisrCisrLyogVE9E TzogYXVkaXQgaW5jbHVkZXMgKi8KKysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKysjaWZkZWYg V0lUSF9PUEVOU1NMCisrI2luY2x1ZGUgIm9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0Lmgi CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoSEFWRV9FVlBfQ0hBQ0hBMjApICYmICFkZWZpbmVk KEhBVkVfQlJPS0VOX0NIQUNIQTIwKQorKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5j bHVkZSA8dW5pc3RkLmg+IC8qIG5lZWRlZCBmb3IgZ2V0cGlkIHVuZGVyIEM5OSAqLworKyNpbmNs dWRlIDxzdGRhcmcuaD4gLyogbmVlZGVkIGZvciBsb2cuaCAqLworKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIG5lZWRlZCBmb3IgbWlzYy5oICovCisrI2luY2x1 ZGUgPHB0aHJlYWQuaD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaW5jbHVk ZSAiZGVmaW5lcy5oIgorKyNpbmNsdWRlICJsb2cuaCIKKysjaW5jbHVkZSAic3NoYnVmLmgiCisr I2luY2x1ZGUgInNzaGVyci5oIgorKworKyNpbmNsdWRlICJ4bWFsbG9jLmgiCisrI2luY2x1ZGUg ImNpcGhlci1jaGFjaGFwb2x5LmgiCisrI2luY2x1ZGUgImNpcGhlci1jaGFjaGFwb2x5LWxpYmNy eXB0by1tdC5oIgorKworKyNpZm5kZWYgbGlrZWx5CisrIyBkZWZpbmUgbGlrZWx5KHgpICAgX19i dWlsdGluX2V4cGVjdCghISh4KSwgMSkKKysjZW5kaWYKKysjaWZuZGVmIHVubGlrZWx5CisrIyBk ZWZpbmUgdW5saWtlbHkoeCkgX19idWlsdGluX2V4cGVjdCghISh4KSwgMCkKKysjZW5kaWYKKysK KysvKiBTaXplIG9mIGtleXN0cmVhbSB0byBwcmVnZW5lcmF0ZSwgbWVhc3VyZWQgaW4gYnl0ZXMK KysgKiB3ZSB3YW50IHRvIHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0IGNoYWNoYSBibG9jayBhbmQg aGF2ZQorKyAqIDEyOCBieXRlcyBmb3Igb3ZlcmhlYWQgKi8KKysjZGVmaW5lIFJPVU5EX1VQKHgs eSkgKCgoKCh4KS0xKS8oeSkpKzEpKih5KSkKKysjZGVmaW5lIEtFWVNUUkVBTUxFTiAoUk9VTkRf VVAoKFNTSF9JT0JVRlNaKSArIDEyOCwgKENIQUNIQV9CTE9DS0xFTikpKQorKworKy8qIEJFR0lO IFRVTkFCTEVTICovCisrCisrLyogTnVtYmVyIG9mIHdvcmtlciB0aHJlYWRzIHRvIHNwYXduLiAq LworKy8qIHRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IG1haW4gaXMgbmV2ZXIKKysgKiB3YWl0 aW5nIG9uIHRoZSB3b3JrZXIgdGhyZWFkcyBmb3Iga2V5c3RyZWFtIGRhdGEgKi8KKysjZGVmaW5l IE5VTVRIUkVBRFMgMQorKworKy8qIDY0IHNlZW1zIHRvIGJlIGEgcHJldHR5IGJsYW5jZSBiZXR3 ZWVuIG1lbW9yeSBhbmQgcGVyZm9ybWFuY2UKKysgKiAxMjggaXMgYW5vdGhlciBvcHRpb24gd2l0 aCBzb21ld2hhdCBoaWdoZXIgbWVtb3J5IGNvbnN1bXB0aW9uICovCisrI2RlZmluZSBOVU1TVFJF QU1TIDY0CisrCisrLyogRU5EIFRVTkFCTEVTICovCisrCisrc3RydWN0IG10X2tleXN0cmVhbSB7 CisrCXVfY2hhciBwb2x5X2tleVtQT0xZMTMwNV9LRVlMRU5dOyAgICAgLyogUE9MWTEzMDVfS0VZ TEVOID09IDMyICovCisrCXVfY2hhciBoZWFkZXJTdHJlYW1bQ0hBQ0hBX0JMT0NLTEVOXTsgLyog Q0hBQ0hBX0JMT0NLTEVOID09IDY0ICovCisrCXVfY2hhciBtYWluU3RyZWFtW0tFWVNUUkVBTUxF Tl07ICAgICAgLyogS0VZU1RSRUFNTEVOID09IDMyNzY4ICovCisrfTsKKysKKytzdHJ1Y3QgdGhy ZWFkRGF0YSB7CisrCUVWUF9DSVBIRVJfQ1RYICogbWFpbl9ldnA7CisrCUVWUF9DSVBIRVJfQ1RY ICogaGVhZGVyX2V2cDsKKysJdV9jaGFyIHNlcWJ1ZlsxNl07CisrfTsKKysKKytzdHJ1Y3QgbXRf a2V5c3RyZWFtX2JhdGNoIHsKKysJdV9pbnQgYmF0Y2hJRDsKKysJc3RydWN0IHRocmVhZERhdGEg dGRzW05VTVRIUkVBRFNdOworKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtIHN0cmVhbXNbTlVNU1RSRUFN U107CisrfTsKKysKKytzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgeworKwl1X2ludCBzZXFucjsK KysJdV9pbnQgYmF0Y2hJRDsKKysKKysJc3RydWN0IG10X2tleXN0cmVhbV9iYXRjaCBiYXRjaGVz WzJdOworKworKwlwdGhyZWFkX3QgbWFuYWdlcl90aWRbMl07CisrCXB0aHJlYWRfdCBzZWxmX3Rp ZDsKKysKKysJcGlkX3QgbWFpbnBpZDsKKysJdV9jaGFyIHplcm9zW0tFWVNUUkVBTUxFTl07IC8q IEtFWVNUUkVBTUxFTiA9PSAzMjc2OCAqLworKworKyAgLyogaWYgT3BlblNTTCBoYXMgc3VwcG9y dCBmb3IgUG9seTEzMDUgaW4gdGhlIE1BQyBFVlBzCisrICAgKiB1c2UgdGhhdCAoT1NTTCA+PSAz LjApIGlmIG5vdCB0aGVuIGl0J3MgT1NTTCAxLjEgc28KKysgICAqIHVzZSB0aGUgUG9seTEzMDUg ZGlnZXN0IG1ldGhvZHMuIEZhaWxpbmcgdGhhdCB1c2UgdGhlCisrICAgKiBpbnRlcm5hbCBwb2x5 MTMwNSBtZXRob2RzICovCisrI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAorKwlFVlBfTUFD X0NUWCAgICAqcG9seV9jdHg7CisrI2VsaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVm aW5lZChFVlBfUEtFWV9QT0xZMTMwNSkKKysJRVZQX1BLRVlfQ1RYICAgKnBvbHlfY3R4OworKwlF VlBfTURfQ1RYICAgICAqbWRfY3R4OworKwlFVlBfUEtFWSAgICAgICAqcGtleTsKKysJc2l6ZV90 ICAgICAgICAgcHRhZ2xlbjsKKysjZWxzZQorKwljaGFyICAgICAgICAgICAqcG9seV9jdHg7Cisr I2VuZGlmCisrfTsKKysKKytzdHJ1Y3QgbWFuYWdlcl90aHJlYWRfYXJncyB7CisrCXN0cnVjdCBj aGFjaGFwb2x5X2N0eF9tdCAqIGN0eF9tdDsKKysJdV9pbnQgb2xkQmF0Y2hJRDsKKysJaW50IHJl dHZhbDsKKyt9OworKworK3N0cnVjdCB3b3JrZXJfdGhyZWFkX2FyZ3MgeworKwl1X2ludCBiYXRj aElEOworKwlzdHJ1Y3QgbXRfa2V5c3RyZWFtX2JhdGNoICogYmF0Y2g7CisrCWludCB0aHJlYWRJ bmRleDsKKysJdV9jaGFyICogemVyb3M7CisrCWludCByZXR2YWw7CisrfTsKKysKKysvKiBnZW5l cmF0ZSB0aGUga2V5c3RyZWFtIGFuZCBoZWFkZXIKKysgKiB3ZSB1c2UgbnVsbHMgZm9yIHRoZSAi ZGF0YSIgKHRoZSB6ZXJvcyB2YXJpYWJsZSkgaW4gb3JkZXIgdG8KKysgKiBnZXQgdGhlIHJhdyBr ZXlzdHJlYW0KKysgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZSAqLwor K2ludAorK2dlbmVyYXRlX2tleXN0cmVhbShzdHJ1Y3QgbXRfa2V5c3RyZWFtICoga3MsIHVfaW50 IHNlcW5yLAorKyAgICBzdHJ1Y3QgdGhyZWFkRGF0YSAqIHRkLCB1X2NoYXIgKiB6ZXJvcykKKyt7 CisrCS8qIGdlbmVyYXRlIHBvbHkxMzA1IGtleSAqLworKwltZW1zZXQodGQtPnNlcWJ1ZiwgMCwg c2l6ZW9mKHRkLT5zZXFidWYpKTsKKysJUE9LRV9VNjQodGQtPnNlcWJ1ZiArIDgsIHNlcW5yKTsK KysJbWVtc2V0KGtzLT5wb2x5X2tleSAsIDAsIHNpemVvZihrcy0+cG9seV9rZXkpKTsKKysJaWYg KCFFVlBfQ2lwaGVySW5pdCh0ZC0+bWFpbl9ldnAsIE5VTEwsIE5VTEwsIHRkLT5zZXFidWYsIDEp IHx8CisrCSAgICBFVlBfQ2lwaGVyKHRkLT5tYWluX2V2cCwga3MtPnBvbHlfa2V5LCBrcy0+cG9s eV9rZXksCisrCSAgICBzaXplb2Yoa3MtPnBvbHlfa2V5KSkgPCAwKQorKwkJcmV0dXJuIC0xOwor KworKwkvKiBnZW5lcmF0ZSBoZWFkZXIga2V5c3RyZWFtIGZvciBlbmNyeXB0aW5nIHBheWxvYWQg bGVuZ3RoICovCisrCWlmICghRVZQX0NpcGhlckluaXQodGQtPmhlYWRlcl9ldnAsIE5VTEwsIE5V TEwsIHRkLT5zZXFidWYsIDEpIHx8CisrCSAgICBFVlBfQ2lwaGVyKHRkLT5oZWFkZXJfZXZwLCBr cy0+aGVhZGVyU3RyZWFtLCB6ZXJvcywgQ0hBQ0hBX0JMT0NLTEVOKQorKwkgICAgPCAwICkKKysJ CXJldHVybiAtMTsKKysKKysJLyogZ2VuZXJhdGUgbWFpbiBrZXlzdHJlYW0gZm9yIGVuY3J5cHRp bmcgcGF5bG9hZCAqLworKwl0ZC0+c2VxYnVmWzBdID0gMTsKKysJaWYgKCFFVlBfQ2lwaGVySW5p dCh0ZC0+bWFpbl9ldnAsIE5VTEwsIE5VTEwsIHRkLT5zZXFidWYsIDEpIHx8CisrCSAgICBFVlBf Q2lwaGVyKHRkLT5tYWluX2V2cCwga3MtPm1haW5TdHJlYW0sIHplcm9zLCBLRVlTVFJFQU1MRU4p IDwgMCkKKysJCXJldHVybiAtMTsKKysKKysJcmV0dXJuIDA7CisrfQorKworKy8qIGZyZWUgdGhl IEVWUCBjb250ZXh0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmUgdGhyZWFkICovCisrdm9pZAor K2ZyZWVfdGhyZWFkRGF0YShzdHJ1Y3QgdGhyZWFkRGF0YSAqIHRkKQorK3sKKysJaWYgKHRkID09 IE5VTEwpCisrCQlyZXR1cm47CisrCWlmICh0ZC0+bWFpbl9ldnApIC8qIGZhbHNlIGlmIGluaXRp YWxpemF0aW9uIGRpZG4ndCBnZXQgdGhpcyBmYXIgKi8KKysJCUVWUF9DSVBIRVJfQ1RYX2ZyZWUo dGQtPm1haW5fZXZwKTsKKysJaWYgKHRkLT5oZWFkZXJfZXZwKSAvKiBmYWxzZSBpZiBpbml0aWFs aXphdGlvbiBkaWRuJ3QgZ2V0IHRoaXMgZmFyICovCisrCQlFVlBfQ0lQSEVSX0NUWF9mcmVlKHRk LT5oZWFkZXJfZXZwKTsKKysJZXhwbGljaXRfYnplcm8odGQsIHNpemVvZigqdGQpKTsKKyt9Cisr CisrLyogaW5pdGlhbGl6ZSB0aGUgRVZQcyB1c2VkIGJ5IHRoZSB3b3JrZXIgdGhyZWFkCisrICAg UmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUgKi8KKytpbnQKKytpbml0aWFs aXplX3RocmVhZERhdGEoc3RydWN0IHRocmVhZERhdGEgKiB0ZCwgY29uc3QgdV9jaGFyICprZXkp CisreworKwltZW1zZXQodGQsMCxzaXplb2YoKnRkKSk7CisrCWlmICgodGQtPm1haW5fZXZwID0g RVZQX0NJUEhFUl9DVFhfbmV3KCkpID09IE5VTEwgfHwKKysJICAgICh0ZC0+aGVhZGVyX2V2cCA9 IEVWUF9DSVBIRVJfQ1RYX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBmYWlsOworKwlpZiAoIUVW UF9DaXBoZXJJbml0KHRkLT5tYWluX2V2cCwgRVZQX2NoYWNoYTIwKCksIGtleSwgTlVMTCwgMSkp CisrCQlnb3RvIGZhaWw7CisrCWlmICghRVZQX0NpcGhlckluaXQodGQtPmhlYWRlcl9ldnAsIEVW UF9jaGFjaGEyMCgpLCBrZXkgKyAzMiwgTlVMTCwgMSkpCisrCQlnb3RvIGZhaWw7CisrCWlmIChF VlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgodGQtPmhlYWRlcl9ldnApICE9IDE2KQorKwkJZ290byBm YWlsOworKwlyZXR1cm4gMDsKKysgZmFpbDoKKysJZnJlZV90aHJlYWREYXRhKHRkKTsKKysJcmV0 dXJuIC0xOworK30KKysKKytzdHJ1Y3Qgd29ya2VyX3RocmVhZF9hcmdzICoKKyt3b3JrZXJfdGhy ZWFkKHN0cnVjdCB3b3JrZXJfdGhyZWFkX2FyZ3MgKiBhcmdzKQorK3sKKysJLyogY2hlY2sgZmly c3QgKi8KKysJaWYgKGFyZ3MgPT0gTlVMTCkKKysJCXJldHVybiBOVUxMOworKwlpZiAoYXJncy0+ YmF0Y2ggPT0gTlVMTCB8fCBhcmdzLT56ZXJvcyA9PSBOVUxMKSB7CisrCQlhcmdzLT5yZXR2YWwg PSAxOworKwkJcmV0dXJuIGFyZ3M7CisrCX0KKysKKysJaW50IHRocmVhZEluZGV4ID0gYXJncy0+ dGhyZWFkSW5kZXg7CisrCXN0cnVjdCB0aHJlYWREYXRhICogdGQgPSAmKGFyZ3MtPmJhdGNoLT50 ZHNbdGhyZWFkSW5kZXhdKTsKKysJdV9pbnQgcmVmc2VxbnIgPSBhcmdzLT5iYXRjaElEICogTlVN U1RSRUFNUzsKKysKKysJZm9yIChpbnQgaSA9IHRocmVhZEluZGV4OyBpIDwgTlVNU1RSRUFNUzsg aSArPSBOVU1USFJFQURTKSB7CisrCQlpZiAoZ2VuZXJhdGVfa2V5c3RyZWFtKCYoYXJncy0+YmF0 Y2gtPnN0cmVhbXNbaV0pLCByZWZzZXFuciArIGksCisrCQkgICAgdGQsIGFyZ3MtPnplcm9zKSA9 PSAtMSkgeworKwkJCWFyZ3MtPnJldHZhbCA9IDE7CisrCQkJcmV0dXJuIGFyZ3M7CisrCQl9Cisr CX0KKysKKysJYXJncy0+cmV0dmFsID0gMDsKKysJcmV0dXJuIGFyZ3M7CisrfQorKworK2ludAor K2pvaW5fbWFuYWdlcl90aHJlYWQocHRocmVhZF90IG1hbmFnZXJfdGlkKQorK3sKKysJc3RydWN0 IG1hbmFnZXJfdGhyZWFkX2FyZ3MgKiBhcmdzOworKwlpZiAocHRocmVhZF9qb2luKG1hbmFnZXJf dGlkLCAodm9pZCAqKikgJmFyZ3MpID09IDApIHsKKysJCWlmIChhcmdzID09IE5VTEwpIHsKKysJ CQlkZWJ1Z19mKCJNYW5hZ2VyIHRocmVhZCByZXR1cm5lZCBOVUxMISIpOworKwkJCXJldHVybiAx OworKwkJfSBlbHNlIGlmIChhcmdzID09IFBUSFJFQURfQ0FOQ0VMRUQpIHsKKysJCQlkZWJ1Z19m KCJNYW5hZ2VyIHRocmVhZCBjYW5jZWxlZCEiKTsKKysJCQlyZXR1cm4gMTsKKysJCX0gZWxzZSBp ZiAoYXJncy0+cmV0dmFsICE9IDApIHsKKysJCQlkZWJ1Z19mKCJNYW5hZ2VyIHRocmVhZCBlcnJv ciAoJWQpIiwgYXJncy0+cmV0dmFsKTsKKysJCQlmcmVlKGFyZ3MpOworKwkJCXJldHVybiAxOwor KwkJfSBlbHNlIHsKKysJCQlmcmVlKGFyZ3MpOworKwkJCXJldHVybiAwOworKwkJfQorKwl9IGVs c2UgeworKwkJZGVidWdfZigicHRocmVhZF9qb2luIGVycm9yISIpOworKwkJcmV0dXJuIDE7Cisr CX0KKyt9CisrCisrdm9pZAorK2NoYWNoYXBvbHlfZnJlZV9tdChzdHJ1Y3QgY2hhY2hhcG9seV9j dHhfbXQgKiBjdHhfbXQpCisreworKwlpZiAoY3R4X210ID09IE5VTEwpCisrCQlyZXR1cm47Cisr CisrI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VWUAorKwlpZiAoY3R4X210LT5wb2x5X2N0eCAh PSBOVUxMKSB7CisrCQlFVlBfTUFDX0NUWF9mcmVlKGN0eF9tdC0+cG9seV9jdHgpOworKwkJY3R4 X210LT5wb2x5X2N0eCA9IE5VTEw7CisrCX0KKysjZWxpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wz KSAmJiBkZWZpbmVkKEVWUF9QS0VZX1BPTFkxMzA1KQorKwlpZiAoY3R4X210LT5tZF9jdHggIT0g TlVMTCkgeworKwkJRVZQX01EX0NUWF9mcmVlKGN0eF9tdC0+bWRfY3R4KTsKKysJCWN0eF9tdC0+ bWRfY3R4ID0gTlVMTDsKKysJfQorKwlpZiAoY3R4X210LT5wa2V5ICE9IE5VTEwpIHsKKysJCUVW UF9QS0VZX2ZyZWUoY3R4X210LT5wa2V5KTsKKysJCWN0eF9tdC0+cGtleSA9IE5VTEw7CisrCX0K KysjZW5kaWYKKysKKysJLyoKKysJICogT25seSBjbGVhbnVwIHRoZSBtYW5hZ2VyIHRocmVhZHMg aWYgd2UgYXJlIHRoZSBQSUQgdGhhdCBpbml0aWFsaXplZAorKwkgKiB0aGVtISBJZiB3ZSdyZSBh IGZvcmssIHRoZSB0aHJlYWRzIGRvbid0IHJlYWxseSBleGlzdC4KKysJICovCisrCisrCWlmIChn ZXRwaWQoKSA9PSBjdHhfbXQtPm1haW5waWQpIHsKKysJCWlmIChjdHhfbXQtPm1hbmFnZXJfdGlk WzBdICE9IGN0eF9tdC0+c2VsZl90aWQpIHsKKysJCQlqb2luX21hbmFnZXJfdGhyZWFkKGN0eF9t dC0+bWFuYWdlcl90aWRbMF0pOworKwkJCWN0eF9tdC0+bWFuYWdlcl90aWRbMF0gPSBjdHhfbXQt PnNlbGZfdGlkOworKwkJfQorKwkJaWYgKGN0eF9tdC0+bWFuYWdlcl90aWRbMV0gIT0gY3R4X210 LT5zZWxmX3RpZCkgeworKwkJCWpvaW5fbWFuYWdlcl90aHJlYWQoY3R4X210LT5tYW5hZ2VyX3Rp ZFsxXSk7CisrCQkJY3R4X210LT5tYW5hZ2VyX3RpZFsxXSA9IGN0eF9tdC0+c2VsZl90aWQ7Cisr CQl9CisrCX0KKysKKysJLyogQ2xlYW51cCB0aHJlYWQgZGF0YSBzdHJ1Y3R1cmVzLiAqLworKwlm b3IgKGludCBpPTA7IGk8MjsgaSsrKQorKwkJZm9yIChpbnQgaj0wOyBqPE5VTVRIUkVBRFM7IGor KykKKysJCQlmcmVlX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbaV0udGRzW2pdKSk7Cisr CisrCS8qIFplcm8gYW5kIGZyZWUgdGhlIHdob2xlIG11bHRpdGhyZWFkZWQgY2lwaGVyIGNvbnRl eHQuICovCisrCWZyZWV6ZXJvKGN0eF9tdCwgc2l6ZW9mKCpjdHhfbXQpKTsKKysKKysJcmV0dXJu OworK30KKysKKytzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKgorK2NoYWNoYXBvbHlfbmV3X210 KHVfaW50IHN0YXJ0c2VxbnIsIGNvbnN0IHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuKQorK3sK KysJc3RydWN0IGNoYWNoYXBvbHlfY3R4X210ICogY3R4X210ID0geG1hbGxvYyhzaXplb2YoKmN0 eF9tdCkpOworKwltZW1zZXQoY3R4X210LCAwLCBzaXplb2YoKmN0eF9tdCkpOworKwkvKiBJbml0 aWFsaXplIHRoZSBzZXF1ZW5jZSBudW1iZXIuIFdoZW4gcmVrZXlpbmcsIHRoaXMgd29uJ3QgYmUg emVyby4gKi8KKysJY3R4X210LT5zZXFuciA9IHN0YXJ0c2VxbnI7CisrCWN0eF9tdC0+YmF0Y2hJ RCA9IHN0YXJ0c2VxbnIgLyBOVU1TVFJFQU1TOworKwlzdHJ1Y3QgdGhyZWFkRGF0YSBtYWluRGF0 YTsKKysJaW50IHREYXRhSTsKKysJaW50IGdlbktTZmFpbGVkID0gMDsKKysKKysjaWZkZWYgT1BF TlNTTF9IQVZFX1BPTFlfRVZQCisrCUVWUF9NQUMgKm1hYyA9IE5VTEw7CisrCWlmICgobWFjID0g RVZQX01BQ19mZXRjaChOVUxMLCAiUE9MWTEzMDUiLCBOVUxMKSkgPT0gTlVMTCkKKysJCWdvdG8g ZmFpbDsKKysJaWYgKChjdHhfbXQtPnBvbHlfY3R4ID0gRVZQX01BQ19DVFhfbmV3KG1hYykpID09 IE5VTEwpCisrCQlnb3RvIGZhaWw7CisrI2VsaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYg ZGVmaW5lZChFVlBfUEtFWV9QT0xZMTMwNSkKKysJaWYgKChjdHhfbXQtPm1kX2N0eCA9IEVWUF9N RF9DVFhfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGZhaWw7CisrCWlmICgoY3R4X210LT5wa2V5 ID0gRVZQX1BLRVlfbmV3X21hY19rZXkoRVZQX1BLRVlfUE9MWTEzMDUsIE5VTEwsCisrCSAgICBj dHhfbXQtPnplcm9zLCBQT0xZMTMwNV9LRVlMRU4pKSA9PSBOVUxMKQorKwkJZ290byBmYWlsOwor KwlpZiAoRVZQX0RpZ2VzdFNpZ25Jbml0KGN0eF9tdC0+bWRfY3R4LCAmY3R4X210LT5wb2x5X2N0 eCwgTlVMTCwgTlVMTCwKKysJICAgIGN0eF9tdC0+cGtleSkgPT0gMCkKKysJCWdvdG8gZmFpbDsK KysjZWxzZQorKwljdHhfbXQtPnBvbHlfY3R4ID0gTlVMTDsKKysjZW5kaWYKKysKKysJY3R4X210 LT5iYXRjaGVzW2N0eF9tdC0+YmF0Y2hJRCAlIDJdLmJhdGNoSUQgPSBjdHhfbXQtPmJhdGNoSUQ7 CisrCWN0eF9tdC0+YmF0Y2hlc1soY3R4X210LT5iYXRjaElEICsgMSkgJSAyXS5iYXRjaElEID0K KysJICAgIGN0eF9tdC0+YmF0Y2hJRCArIDE7CisrCisrCS8qIGluaXRpYWxpemUgYmF0Y2hlc1sw XSB0ZHMgKi8KKysJZm9yICh0RGF0YUkgPSAwOyB0RGF0YUkgPCBOVU1USFJFQURTOyB0RGF0YUkr KykgeworKwkJaWYgKGluaXRpYWxpemVfdGhyZWFkRGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1swXS50 ZHNbdERhdGFJXSksCisrCQkgICAga2V5KSAhPSAwKQorKwkJCWJyZWFrOworKwl9CisrCWlmICh0 RGF0YUkgPCBOVU1USFJFQURTKSB7CisrCQkvKiBCYWNrdHJhY2sgc3RhcnRpbmcgd2l0aCAndERh dGFJIC0gMScgKi8KKysJCWZvciAodERhdGFJLS07IHREYXRhSSA+PSAwOyB0RGF0YUktLSkKKysJ CQlmcmVlX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbMF0udGRzW3REYXRhSV0pKTsKKysJ CWdvdG8gZmFpbDsKKysJfQorKwkvKiBpbml0aWFsaXplIGJhdGNoZXNbMV0gdGRzICovCisrCWZv ciAodERhdGFJID0gMDsgdERhdGFJIDwgTlVNVEhSRUFEUzsgdERhdGFJKyspIHsKKysJCWlmIChp bml0aWFsaXplX3RocmVhZERhdGEoJihjdHhfbXQtPmJhdGNoZXNbMV0udGRzW3REYXRhSV0pLAor KwkJICAgIGtleSkgIT0gMCkKKysJCQlicmVhazsKKysJfQorKwlpZiAodERhdGFJIDwgTlVNVEhS RUFEUykgeworKwkJLyogQmFja3RyYWNrIHN0YXJ0aW5nIHdpdGggJ3REYXRhSSAtIDEnICovCisr CQlmb3IgKHREYXRhSS0tOyB0RGF0YUkgPj0gMDsgdERhdGFJLS0pCisrCQkJZnJlZV90aHJlYWRE YXRhKCYoY3R4X210LT5iYXRjaGVzWzFdLnRkc1t0RGF0YUldKSk7CisrCQkvKiBGcmVlIHRoZSBi YXRjaGVzWzBdIHRkcyB0b28gKi8KKysJCWZvciAodERhdGFJID0gTlVNVEhSRUFEUzsgdERhdGFJ ID49IDA7IHREYXRhSS0tKQorKwkJCWZyZWVfdGhyZWFkRGF0YSgmKGN0eF9tdC0+YmF0Y2hlc1sw XS50ZHNbdERhdGFJXSkpOworKwkJZ290byBmYWlsOworKwl9CisrCisrCWlmIChpbml0aWFsaXpl X3RocmVhZERhdGEoJm1haW5EYXRhLCBrZXkpICE9IDApIHsKKysJCWNoYWNoYXBvbHlfZnJlZV9t dChjdHhfbXQpOworKwkJZXhwbGljaXRfYnplcm8oJnN0YXJ0c2VxbnIsIHNpemVvZihzdGFydHNl cW5yKSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlmb3IgKGludCBpPTA7IGk8MjsgaSsr KSB7CisrCQl1X2ludCByZWZzZXFuciA9IGN0eF9tdC0+YmF0Y2hlc1tpXS5iYXRjaElEICogTlVN U1RSRUFNUzsKKysJCWZvciAoaW50IGogPSBzdGFydHNlcW5yID4gcmVmc2VxbnIgPyBzdGFydHNl cW5yIC0gcmVmc2VxbnIgOiAwOworKwkJICAgICBqPE5VTVNUUkVBTVM7IGorKykgeworKwkJCWlm IChnZW5lcmF0ZV9rZXlzdHJlYW0oJihjdHhfbXQtPmJhdGNoZXNbaV0uc3RyZWFtc1tqXSksCisr CQkJICAgIHJlZnNlcW5yICsgaiwgJm1haW5EYXRhLCBjdHhfbXQtPnplcm9zKSA9PSAtMSkgewor KwkJCQlkZWJ1Z19mKCJnZW5lcmF0ZV9rZXlzdHJlYW0gZmFpbGVkIGluICIKKysJCQkJICAgICJj aGFjaGEyMC1wb2x5MTMwNUBocG5zc2gub3JnIik7CisrCQkJCWdlbktTZmFpbGVkID0gMTsKKysJ CQkJYnJlYWs7IC8qIGltcGVyZmVjdCwgYnV0IGl0IGhlbHBzICovCisrCQkJfQorKwkJfQorKwl9 CisrCisrCWZyZWVfdGhyZWFkRGF0YSgmbWFpbkRhdGEpOworKworKwlpZiAoZ2VuS1NmYWlsZWQg IT0gMCkgeworKwkJY2hhY2hhcG9seV9mcmVlX210KGN0eF9tdCk7CisrCQlleHBsaWNpdF9iemVy bygmc3RhcnRzZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIpKTsKKysJCXJldHVybiBOVUxMOworKwl9 CisrCisrCS8qIFN0b3JlIHRoZSBQSUQgc28gdGhhdCBpbiB0aGUgZnV0dXJlLCB3ZSBjYW4gdGVs bCBpZiB3ZSdyZSBhIGZvcmsgKi8KKysJY3R4X210LT5tYWlucGlkID0gZ2V0cGlkKCk7CisrCWN0 eF9tdC0+c2VsZl90aWQgPSBwdGhyZWFkX3NlbGYoKTsKKysJY3R4X210LT5tYW5hZ2VyX3RpZFsw XSA9IGN0eF9tdC0+c2VsZl90aWQ7CisrCWN0eF9tdC0+bWFuYWdlcl90aWRbMV0gPSBjdHhfbXQt PnNlbGZfdGlkOworKwkvKiB3YXMgcmVwb3J0aW5nIHRoZSBUSUQgdXNpbmcgZ2V0dGlkKCkgYnV0 IGl0J3Mgbm90IHBvcnRhYmxlICovCisrCWRlYnVnMl9mKCI8bWFpbiB0aHJlYWQ6IHBpZD0ldSwg cHRpZD0weCVseD4iLCBnZXRwaWQoKSwgcHRocmVhZF9zZWxmKCkpOworKworKwkvKiBTdWNjZXNz ISAqLworKwlleHBsaWNpdF9iemVybygmc3RhcnRzZXFuciwgc2l6ZW9mKHN0YXJ0c2VxbnIpKTsK KysJcmV0dXJuIGN0eF9tdDsKKysKKysgZmFpbDoKKysjaWZkZWYgT1BFTlNTTF9IQVZFX1BPTFlf RVZQCisrCWlmIChjdHhfbXQtPnBvbHlfY3R4ICE9IE5VTEwpIHsKKysJCUVWUF9NQUNfQ1RYX2Zy ZWUoY3R4X210LT5wb2x5X2N0eCk7CisrCQljdHhfbXQtPnBvbHlfY3R4ID0gTlVMTDsKKysJfQor KyNlbGlmICFkZWZpbmVkKFdJVEhfT1BFTlNTTDMpICYmIGRlZmluZWQoRVZQX1BLRVlfUE9MWTEz MDUpCisrCWlmIChjdHhfbXQtPm1kX2N0eCAhPSBOVUxMKSB7CisrCQlFVlBfTURfQ1RYX2ZyZWUo Y3R4X210LT5tZF9jdHgpOworKwkJY3R4X210LT5tZF9jdHggPSBOVUxMOworKwl9CisrCWlmIChj dHhfbXQtPnBrZXkgIT0gTlVMTCkgeworKwkJRVZQX1BLRVlfZnJlZShjdHhfbXQtPnBrZXkpOwor KwkJY3R4X210LT5wa2V5ID0gTlVMTDsKKysJfQorKyNlbmRpZgorKwlmcmVlemVybyhjdHhfbXQs IHNpemVvZigqY3R4X210KSk7CisrCWV4cGxpY2l0X2J6ZXJvKCZzdGFydHNlcW5yLCBzaXplb2Yo c3RhcnRzZXFucikpOworKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrLyogUG9ydGFibGUgRmFzdFhP UiB1c2luZyBtZW1jcHkgdG8gYXZvaWQgc3RyaWN0LWFsaWFzaW5nIGFuZCBhbGlnbm1lbnQgVUIu CisrICogVXNlcyAxMjgtYml0IGNodW5rcyBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IF9fdWlu dDEyOF90IChHQ0MvQ2xhbmcgb24KKysgKiA2NC1iaXQgcGxhdGZvcm1zKSwgZmFsbHMgYmFjayB0 byB1aW50NjRfdCBlbHNld2hlcmUuICovCisrc3RhdGljIGlubGluZSB2b2lkCisrZmFzdFhPUjIo dV9jaGFyICpkZXN0LCBjb25zdCB1X2NoYXIgKnNyYywgY29uc3QgdV9jaGFyICprZXlzdHJlYW0s IHVfaW50IGxlbikKKyt7CisrI2lmIGRlZmluZWQoX19TSVpFT0ZfSU5UMTI4X18pCisrCXR5cGVk ZWYgX191aW50MTI4X3QgY2h1bms7CisrI2Vsc2UKKysJdHlwZWRlZiB1aW50NjRfdCBjaHVuazsK KysjZW5kaWYKKysJc2l6ZV90IGkgPSAwOworKwl3aGlsZSAoaSArIHNpemVvZihjaHVuaykgPD0g bGVuKSB7CisrCQljaHVuayBhLCBiLCByOworKwkJbWVtY3B5KCZhLCBzcmMgKyBpLCBzaXplb2Yo YSkpOworKwkJbWVtY3B5KCZiLCBrZXlzdHJlYW0gKyBpLCBzaXplb2YoYikpOworKwkJciA9IGEg XiBiOworKwkJbWVtY3B5KGRlc3QgKyBpLCAmciwgc2l6ZW9mKHIpKTsKKysJCWkgKz0gc2l6ZW9m KGNodW5rKTsKKysJfQorKwl3aGlsZSAoaSA8IGxlbikgeworKwkJZGVzdFtpXSA9IHNyY1tpXSBe IGtleXN0cmVhbVtpXTsKKysJCWkrKzsKKysJfQorK30KKysKKytzdHJ1Y3QgbWFuYWdlcl90aHJl YWRfYXJncyAqCisrbWFuYWdlcl90aHJlYWQoc3RydWN0IG1hbmFnZXJfdGhyZWFkX2FyZ3MgKiBt YXJncykgeworKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2YWxpZCBkYXRhIGJlZm9yZSBwcm9jZWVk aW5nICovCisrCWlmIChtYXJncyA9PSBOVUxMKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCXN0cnVj dCBjaGFjaGFwb2x5X2N0eF9tdCAqIGN0eF9tdCA9IG1hcmdzLT5jdHhfbXQ7CisrCWlmIChjdHhf bXQgPT0gTlVMTCkgeworKwkJbWFyZ3MtPnJldHZhbCA9IDE7CisrCQlyZXR1cm4gbWFyZ3M7Cisr CX0KKysKKysJdV9pbnQgb2xkQmF0Y2hJRCA9IG1hcmdzLT5vbGRCYXRjaElEOworKworKwlzdHJ1 Y3QgbXRfa2V5c3RyZWFtX2JhdGNoICogYmF0Y2ggPSAmKGN0eF9tdC0+YmF0Y2hlc1tvbGRCYXRj aElEICUgMl0pOworKwlpZiAoYmF0Y2gtPmJhdGNoSUQgIT0gb2xkQmF0Y2hJRCkgeworKwkJZGVi dWdfZigiUG9zdC1jcnlwdCBiYXRjaCBtaXNzISBTZWVraW5nICV1LCBmb3VuZCAldS4gRmFpbGlu Zy4iLAorKwkJICAgIG9sZEJhdGNoSUQsIGJhdGNoLT5iYXRjaElEKTsKKysJCW1hcmdzLT5yZXR2 YWwgPSAxOworKwkJcmV0dXJuIG1hcmdzOworKwl9CisrCisrCW1hcmdzLT5yZXR2YWwgPSAwOwor Kwl1X2ludCBiYXRjaElEID0gb2xkQmF0Y2hJRCArIDI7CisrCisrCXB0aHJlYWRfdCB0aWRbTlVN VEhSRUFEU107CisrCXN0cnVjdCB3b3JrZXJfdGhyZWFkX2FyZ3MgKiB3YXJncyA9IG1hbGxvYyhO VU1USFJFQURTICogc2l6ZW9mKCp3YXJncykpOworKwlpbnQgdGk7CisrCisrCWZvciAodGkgPSAw OyB0aSA8IE5VTVRIUkVBRFM7IHRpKyspIHsKKysJCXdhcmdzW3RpXS5iYXRjaElEID0gYmF0Y2hJ RDsKKysJCXdhcmdzW3RpXS5iYXRjaCA9IGJhdGNoOworKwkJd2FyZ3NbdGldLnRocmVhZEluZGV4 ID0gdGk7CisrCQl3YXJnc1t0aV0uemVyb3MgPSBjdHhfbXQtPnplcm9zOworKwkJaWYgKHB0aHJl YWRfY3JlYXRlKCYodGlkW3RpXSksIE5VTEwsICh2b2lkICopIHdvcmtlcl90aHJlYWQsCisrCQkg ICAgJih3YXJnc1t0aV0pKSAhPSAwKSB7CisrCQkJbWFyZ3MtPnJldHZhbCA9IDE7CisrCQkJYnJl YWs7CisrCQl9CisrCX0KKysJZm9yICg7IHRpIDwgTlVNVEhSRUFEUzsgdGkrKykgLyogZm9yIGVy cm9yIGNvbmRpdGlvbiAqLworKwkJdGlkW3RpXSA9IHB0aHJlYWRfc2VsZigpOworKworKwlzdHJ1 Y3Qgd29ya2VyX3RocmVhZF9hcmdzICogcmV0d2FyZ3M7CisrCisrCWZvciAodGkgPSAwOyB0aSA8 IE5VTVRIUkVBRFM7IHRpKyspIHsKKysJCWlmICh0aWRbdGldID09IHB0aHJlYWRfc2VsZigpKSB7 CisrCQkJbWFyZ3MtPnJldHZhbCA9IDE7IC8qIHJlZHVuZGFudCwgYnV0IGhhcm1sZXNzICovCisr CQkJY29udGludWU7CisrCQl9CisrCQlpZiAocHRocmVhZF9qb2luKHRpZFt0aV0sICh2b2lkICoq KSAmcmV0d2FyZ3MpID09IDApIHsKKysJCQlpZiAocmV0d2FyZ3MgPT0gTlVMTCkgeworKwkJCQlk ZWJ1Z19mKCJXb3JrZXIgdGhyZWFkIHJldHVybmVkIE5VTEwhIik7CisrCQkJCW1hcmdzLT5yZXR2 YWwgPSAxOworKwkJCX0gZWxzZSBpZiAocmV0d2FyZ3MgPT0gUFRIUkVBRF9DQU5DRUxFRCkgewor KwkJCQlkZWJ1Z19mKCJXb3JrZXIgdGhyZWFkIGNhbmNlbGVkISIpOworKwkJCQltYXJncy0+cmV0 dmFsID0gMTsKKysJCQl9IGVsc2UgeworKwkJCQlpZiAocmV0d2FyZ3MtPnJldHZhbCAhPSAwKSB7 CisrCQkJCQlkZWJ1Z19mKCJXb3JrZXIgdGhyZWFkIGVycm9yICglZCkiLAorKwkJCQkJICAgIHJl dHdhcmdzLT5yZXR2YWwpOworKwkJCQkJbWFyZ3MtPnJldHZhbCA9IDE7CisrCQkJCX0KKysJCQkJ aWYgKHJldHdhcmdzICE9ICYod2FyZ3NbdGldKSkgeworKwkJCQkJZGVidWdfZigiV29ya2VyIHRo cmVhZCBkaWRuJ3QgcmV0dXJuICIKKysJCQkJCSAgICAiZXhwZWN0ZWQgc3RydWN0dXJlISIpOwor KwkJCQkJbWFyZ3MtPnJldHZhbCA9IDE7CisrCQkJCX0KKysJCQl9CisrCQl9IGVsc2UgeworKwkJ CWRlYnVnX2YoInB0aHJlYWRfam9pbiBlcnJvciEiKTsKKysJCQltYXJncy0+cmV0dmFsID0gMTsK KysJCX0KKysJfQorKwlmcmVlKHdhcmdzKTsKKysKKysJaWYgKG1hcmdzLT5yZXR2YWwgPT0gMCkg eworKwkJYmF0Y2gtPmJhdGNoSUQgPSBiYXRjaElEOworKwl9CisrCisrCXJldHVybiBtYXJnczsK Kyt9CisrCisraW50CisrY2hhY2hhcG9seV9jcnlwdF9tdChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhf bXQgKmN0eF9tdCwgdV9pbnQgc2VxbnIsIHVfY2hhciAqZGVzdCwKKysgICAgY29uc3QgdV9jaGFy ICpzcmMsIHVfaW50IGxlbiwgdV9pbnQgYWFkbGVuLCB1X2ludCBhdXRobGVuLCBpbnQgZG9fZW5j cnlwdCkKKyt7CisrI2lmZGVmIFNBRkVUWQorKwlpZiAoY3R4X210LT5tYWlucGlkICE9IGdldHBp ZCgpKSB7IC8qIHdlJ3JlIGEgZm9yayAqLworKwkJLyoKKysJCSAqIFRPRE86IHRoaXMgaXMgRVhU UkVNRUxZIFJBUkUsIG1heSBuZXZlciBoYXBwZW4gYXQgYWxsIChvbmx5CisrCQkgKiBpZiB0aGUg Zm9yayBjYWxscyBjcnlwdCksIHNvIHdlIHNob3VsZCB0ZWxsIHRoZSBjb21waWxlci4KKysJCSAq LworKwkJLyogVGhlIHdvcmtlciB0aHJlYWRzIGRvbid0IGV4aXN0LCB3ZSBjb3VsZCBzcGF3biB0 aGVtPyAqLworKwkJZGVidWdfZigiRm9yayBjYWxsZWQgY3J5cHQgd2l0aG91dCB3b3JrZXJzISIp OworKwkJY2hhY2hhcG9seV9mcmVlX210KGN0eF9tdCk7CisrCQlyZXR1cm4gU1NIX0VSUl9JTlRF Uk5BTF9FUlJPUjsKKysJfQorKyNlbmRpZgorKworKwlwdGhyZWFkX3QgKiBtYW5hZ2VyX3RpZCA9 ICYoY3R4X210LT5tYW5hZ2VyX3RpZFtjdHhfbXQtPmJhdGNoSUQgJSAyXSk7CisrCWlmICh1bmxp a2VseSgqbWFuYWdlcl90aWQgIT0gY3R4X210LT5zZWxmX3RpZCkpIHsKKysJCWludCByZXQgPSBq b2luX21hbmFnZXJfdGhyZWFkKCptYW5hZ2VyX3RpZCk7CisrCQkqbWFuYWdlcl90aWQgPSBjdHhf bXQtPnNlbGZfdGlkOworKwkJaWYgKHJldCAhPSAwKQorKwkJCXJldHVybiBTU0hfRVJSX0lOVEVS TkFMX0VSUk9SOworKwl9CisrCisrCXN0cnVjdCBtdF9rZXlzdHJlYW1fYmF0Y2ggKiBiYXRjaCA9 CisrCSAgICAmKGN0eF9tdC0+YmF0Y2hlc1tjdHhfbXQtPmJhdGNoSUQgJSAyXSk7CisrCisrCXN0 cnVjdCBtdF9rZXlzdHJlYW0gKiBrcyA9ICYoYmF0Y2gtPnN0cmVhbXNbc2VxbnIgJSBOVU1TVFJF QU1TXSk7CisrCisrCWludCByID0gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysKKysjaWZkZWYg U0FGRVRZCisrCWlmIChiYXRjaC0+YmF0Y2hJRCA9PSBjdHhfbXQtPmJhdGNoSUQpIHsgLyogU2Fm ZXR5IGNoZWNrICovCisrI2VuZGlmCisrCQkvKiBjaGVjayB0YWcgYmVmb3JlIGFueXRoaW5nIGVs c2UgKi8KKysJCWlmICghZG9fZW5jcnlwdCkgeworKwkJCWNvbnN0IHVfY2hhciAqdGFnID0gc3Jj ICsgYWFkbGVuICsgbGVuOworKwkJCXVfY2hhciBleHBlY3RlZF90YWdbUE9MWTEzMDVfVEFHTEVO XTsKKysjaWYgIWRlZmluZWQoV0lUSF9PUEVOU1NMMykgJiYgZGVmaW5lZChFVlBfUEtFWV9QT0xZ MTMwNSkKKysJCQlpZiAoKEVWUF9QS0VZX0NUWF9jdHJsKGN0eF9tdC0+cG9seV9jdHgsIC0xLAor KwkJCSAgICBFVlBfUEtFWV9PUF9TSUdOQ1RYLCBFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZLAor KwkJCSAgICBQT0xZMTMwNV9LRVlMRU4sIGtzLT5wb2x5X2tleSkgPD0gMCkgfHwKKysJCQkgICAg KEVWUF9EaWdlc3RTaWduVXBkYXRlKGN0eF9tdC0+bWRfY3R4LCBzcmMsIGFhZGxlbiArIGxlbikg PT0gMCkpIHsKKysJCQkJZGVidWdfZigiU1NMIGVycm9yIHdoaWxlIGRlY3J5cHRpbmcgcG9seTEz MDUgdGFnIik7CisrCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKwkJCX0KKysJ CQljdHhfbXQtPnB0YWdsZW4gPSBQT0xZMTMwNV9UQUdMRU47CisrCQkJaWYgKEVWUF9EaWdlc3RT aWduRmluYWwoY3R4X210LT5tZF9jdHgsIGV4cGVjdGVkX3RhZywKKysJCQkgICAgJmN0eF9tdC0+ cHRhZ2xlbikgPT0gMCkgeworKwkJCQlkZWJ1Z19mKCJTU0wgZXJyb3Igd2hpbGUgZmluYWxpemlu ZyBkZWN5cnB0ZWQgcG9seTEzMDUiKTsKKysJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJS T1I7CisrCQkJfQorKyNlbHNlCisrCQkJcG9seTEzMDVfYXV0aChjdHhfbXQtPnBvbHlfY3R4LCBl eHBlY3RlZF90YWcsIHNyYywKKysJCQkgICAgYWFkbGVuICsgbGVuLCBrcy0+cG9seV9rZXkpOwor KyNlbmRpZgorKwkJCWlmICh0aW1pbmdzYWZlX2JjbXAoZXhwZWN0ZWRfdGFnLCB0YWcsIFBPTFkx MzA1X1RBR0xFTikKKysJCQkgICAgIT0gMCkKKysJCQkJciA9IFNTSF9FUlJfTUFDX0lOVkFMSUQ7 CisrCQkJZXhwbGljaXRfYnplcm8oZXhwZWN0ZWRfdGFnLCBzaXplb2YoZXhwZWN0ZWRfdGFnKSk7 CisrCQl9CisrCQlpZiAociAhPSBTU0hfRVJSX01BQ19JTlZBTElEKSB7CisrCQkJLyogQ3J5cHQg YWRkaXRpb25hbCBkYXRhIChpLmUuLCBwYWNrZXQgbGVuZ3RoKSAqLworKwkJCS8qIFRPRE86IGlz IGFhZGxlbiBhbHdheXMgZm91ciBieXRlcz8gKi8KKysJCQkvKiBUT0RPOiBkbyB3ZSBhbHdheXMg aGF2ZSBhbiBhYWRsZW4/ICovCisrCQkJaWYgKGFhZGxlbikKKysJCQkJZm9yICh1X2ludCBpPTA7 IGk8YWFkbGVuOyBpKyspCisrCQkJCQlkZXN0W2ldID0ga3MtPmhlYWRlclN0cmVhbVtpXSBeIHNy Y1tpXTsKKysJCQkvKiBDcnlwdCBwYXlsb2FkICovCisrCQkJZmFzdFhPUjIoZGVzdCthYWRsZW4s c3JjK2FhZGxlbixrcy0+bWFpblN0cmVhbSxsZW4pOworKwkJCS8qIGNhbGN1bGF0ZSBhbmQgYXBw ZW5kIHRhZyAqLworKyNpZiAhZGVmaW5lZChXSVRIX09QRU5TU0wzKSAmJiBkZWZpbmVkKEVWUF9Q S0VZX1BPTFkxMzA1KQorKwkJCWlmIChkb19lbmNyeXB0KSB7CisrCQkJCWlmICgoRVZQX1BLRVlf Q1RYX2N0cmwoY3R4X210LT5wb2x5X2N0eCwgLTEsCisrCQkJCSAgICBFVlBfUEtFWV9PUF9TSUdO Q1RYLCBFVlBfUEtFWV9DVFJMX1NFVF9NQUNfS0VZLAorKwkJCQkgICAgUE9MWTEzMDVfS0VZTEVO LCBrcy0+cG9seV9rZXkpIDw9MCkgfHwKKysJCQkJICAgIChFVlBfRGlnZXN0U2lnblVwZGF0ZShj dHhfbXQtPm1kX2N0eCwgZGVzdCwgYWFkbGVuICsgbGVuKSA9PSAwKSkgeworKwkJCQkJZGVidWdf ZiAoIlNTTCBlcnJvciB3aGlsZSBlbmNyeXB0aW5nIHBvbHkxMzA1IHRhZyIpOworKwkJCQkJcmV0 dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCQkJCX0KKysJCQkJY3R4X210LT5wdGFnbGVu ID0gUE9MWTEzMDVfVEFHTEVOOworKwkJCQlpZiAoRVZQX0RpZ2VzdFNpZ25GaW5hbChjdHhfbXQt Pm1kX2N0eCwgZGVzdCthYWRsZW4rbGVuLAorKwkJCQkgICAgJmN0eF9tdC0+cHRhZ2xlbikgPT0g MCkgeworKwkJCQkJZGVidWdfZigiU1NMIGVycm9yIHdoaWxlIGZpbmFsaXppbmcgZGVjeXJwdGVk IHBvbHkxMzA1Iik7CisrCQkJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJCQkJ fQorKwkJCX0KKysjZWxzZQorKwkJCWlmIChkb19lbmNyeXB0KQorKwkJCQlwb2x5MTMwNV9hdXRo KGN0eF9tdC0+cG9seV9jdHgsIGRlc3QrYWFkbGVuK2xlbiwKKysJCQkJICAgIGRlc3QsIGFhZGxl bitsZW4sIGtzLT5wb2x5X2tleSk7CisrI2VuZGlmCisrCQkJcj0wOyAvKiBTdWNjZXNzISAqLwor KwkJfQorKwkJaWYgKHIpIC8qIEFueXRoaW5nIG5vbnplcm8gaXMgYW4gZXJyb3IuICovCisrCQkJ cmV0dXJuIHI7CisrCisrCQljdHhfbXQtPnNlcW5yID0gc2VxbnIgKyAxOworKworKwkJaWYgKHVu bGlrZWx5KGN0eF9tdC0+c2VxbnIgLyBOVU1TVFJFQU1TID4gY3R4X210LT5iYXRjaElEKSkgewor KwkJCXN0cnVjdCBtYW5hZ2VyX3RocmVhZF9hcmdzICogYXJncyA9CisrCQkJICAgIG1hbGxvYyhz aXplb2YoKmFyZ3MpKTsKKysJCQlpZiAoYXJncyA9PSBOVUxMKSB7CisrCQkJCXJldHVybiBTU0hf RVJSX0lOVEVSTkFMX0VSUk9SOworKwkJCX0KKysJCQlhcmdzLT5jdHhfbXQgPSBjdHhfbXQ7Cisr CQkJYXJncy0+b2xkQmF0Y2hJRCA9IGN0eF9tdC0+YmF0Y2hJRDsKKysJCQlpZiAocHRocmVhZF9j cmVhdGUoJihjdHhfbXQtPm1hbmFnZXJfdGlkW2N0eF9tdC0+YmF0Y2hJRAorKwkJCSAgICAlIDJd KSwgTlVMTCwgKHZvaWQgKikgbWFuYWdlcl90aHJlYWQsIGFyZ3MpICE9IDApIHsKKysJCQkJZnJl ZShhcmdzKTsKKysJCQkJcmV0dXJuIFNTSF9FUlJfSU5URVJOQUxfRVJST1I7CisrCQkJfQorKwkJ CWN0eF9tdC0+YmF0Y2hJRCA9IGN0eF9tdC0+c2VxbnIgLyBOVU1TVFJFQU1TOworKwkJfQorKwor KwkJLyogVE9ETzogTm90aGluZyB3ZSBuZWVkIHRvIHNhbml0aXplIGhlcmU/ICovCisrCisrCQly ZXR1cm4gMDsKKysjaWZkZWYgU0FGRVRZCisrCX0gZWxzZSB7IC8qIEJhZCwgaXQncyB0aGUgd3Jv bmcgYmF0Y2guICovCisrCQlkZWJ1Z19mKCAiUHJlLWNyeXB0IGJhdGNoIG1pc3MhIFNlZWtpbmcg JXUsIGZvdW5kICV1LiBGYWlsaW5nLiIsCisrCQkgICAgY3R4X210LT5iYXRjaElELCBiYXRjaC0+ YmF0Y2hJRCk7CisrCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsKKysJfQorKyNlbmRp ZgorK30KKysKKytpbnQKKytjaGFjaGFwb2x5X2dldF9sZW5ndGhfbXQoc3RydWN0IGNoYWNoYXBv bHlfY3R4X210ICpjdHhfbXQsIHVfaW50ICpwbGVucCwKKysgICAgdV9pbnQgc2VxbnIsIGNvbnN0 IHVfY2hhciAqY3AsIHVfaW50IGxlbikKKyt7CisrCS8qIFRPRE86IGFkZCBjb21waWxlciBoaW50 cyAqLworKyNpZmRlZiBTQUZFVFkKKysJaWYgKGN0eF9tdC0+bWFpbnBpZCAhPSBnZXRwaWQoKSkg eyAvKiBVc2Ugc2VyaWFsIG1vZGUgaWYgd2UncmUgYSBmb3JrICovCisrCQlkZWJ1Z19mKCJXZSdy ZSBhIGZvcmsuIEZhaWxpbmcuIik7CisrCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsK KysJfQorKyNlbmRpZgorKworKwlpZiAobGVuIDwgNCkKKysJCXJldHVybiBTU0hfRVJSX01FU1NB R0VfSU5DT01QTEVURTsKKysKKysJcHRocmVhZF90ICogbWFuYWdlcl90aWQgPSAmKGN0eF9tdC0+ bWFuYWdlcl90aWRbY3R4X210LT5iYXRjaElEICUgMl0pOworKwlpZiAodW5saWtlbHkoKm1hbmFn ZXJfdGlkICE9IGN0eF9tdC0+c2VsZl90aWQpKSB7CisrCQlpbnQgcmV0ID0gam9pbl9tYW5hZ2Vy X3RocmVhZCgqbWFuYWdlcl90aWQpOworKwkJKm1hbmFnZXJfdGlkID0gY3R4X210LT5zZWxmX3Rp ZDsKKysJCWlmIChyZXQgIT0gMCkKKysJCQlyZXR1cm4gU1NIX0VSUl9JTlRFUk5BTF9FUlJPUjsK KysJfQorKworKwl1X2NoYXIgYnVmWzRdOworKyNpZmRlZiBTQUZFVFkKKysJdV9pbnQgc291Z2h0 X2JhdGNoSUQgPSBzZXFuciAvIE5VTVNUUkVBTVM7CisrI2VuZGlmCisrCXN0cnVjdCBtdF9rZXlz dHJlYW1fYmF0Y2ggKiBiYXRjaCA9CisrCSAgICAmKGN0eF9tdC0+YmF0Y2hlc1tjdHhfbXQtPmJh dGNoSUQgJSAyXSk7CisrCXN0cnVjdCBtdF9rZXlzdHJlYW0gKiBrcyA9ICYoYmF0Y2gtPnN0cmVh bXNbc2VxbnIgJSBOVU1TVFJFQU1TXSk7CisrI2lmZGVmIFNBRkVUWQorKwlpZiAoYmF0Y2gtPmJh dGNoSUQgPT0gc291Z2h0X2JhdGNoSUQpIHsKKysjZW5kaWYKKysJCWZvciAodV9pbnQgaT0wOyBp IDwgc2l6ZW9mKGJ1Zik7IGkrKykKKysJCQlidWZbaV09a3MtPmhlYWRlclN0cmVhbVtpXSBeIGNw W2ldOworKwkJKnBsZW5wID0gUEVFS19VMzIoYnVmKTsKKysJCXJldHVybiAwOworKyNpZmRlZiBT QUZFVFkKKysJfSBlbHNlIHsKKysJCWRlYnVnX2YoIkJhdGNoIG1pc3MhIFNlZWtpbmcgJXUsIGZv dW5kICV1LiBGYWlsaW5nLiIsCisrCQkgICAgc291Z2h0X2JhdGNoSUQsIGJhdGNoLT5iYXRjaElE KTsKKysJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9SOworKwl9CisrI2VuZGlmCisrfQor KyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfRVZQX0NIQUNIQTIwKSAmJiAhZGVmaW5lZChIQVZFX0JS T0tFTl9DSEFDSEEyMCkgKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1j aGFjaGFwb2x5LWxpYmNyeXB0by1tdC5oIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5 LWxpYmNyeXB0by1tdC5oCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY2hhY2hhcG9s eS1saWJjcnlwdG8tbXQuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by1tdC5oCTIwMjYtMDct MDIgMDA6Mjc6MjkuNzIxNjI3MzAyICswMjAwCitAQCAtMCwwICsxLDQ1IEBACisrLyoKKysgKiBD b3B5cmlnaHQgKGMpIDIwMjMgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxv biBVbml2ZXJzaXR5LgorKyAqCisrICogIEF1dGhvcjogTWl0Y2hlbGwgRG9ycmVsbCA8bXdkQHBz Yy5lZHU+CisrICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyICA8cmFwaWVyQHBzYy5lZHU+CisrICoK KysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vu c2UuCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKysgKiBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKysgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OworKyAqIGlmIG5vdCwg c2VlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCisrICoKKysgKi8KKysKKysj aWZuZGVmIENIQUNIQV9QT0xZX0xJQkNSWVBUT19NVF9ICisrI2RlZmluZSBDSEFDSEFfUE9MWV9M SUJDUllQVE9fTVRfSAorKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSAiY2hh Y2hhLmgiCisrI2luY2x1ZGUgInBvbHkxMzA1LmgiCisrCisrI2lmbmRlZiBDSEFDSEFfS0VZTEVO CisrI2RlZmluZSBDSEFDSEFfS0VZTEVOCTMyIC8qIE9ubHkgMjU2IGJpdCBrZXlzIHVzZWQgaGVy ZSAqLworKyNlbmRpZgorKworK3N0cnVjdCBjaGFjaGFwb2x5X2N0eF9tdDsgLyogZGVmaW5lZCBp biBjaXBoZXItY2hhY2hhcG9seS1saWJjcnlwdG8tbXQuYyAqLworKworK3N0cnVjdCBjaGFjaGFw b2x5X2N0eF9tdCAqY2hhY2hhcG9seV9uZXdfbXQodV9pbnQgc3RhcnRzZXFuciwgY29uc3QgdV9j aGFyICprZXksIHVfaW50IGtleWxlbikKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fYm91bmRlZF9fKF9fYnVmZmVyX18sIDIsIDMp KSk7CisrCisrdm9pZCAgIGNoYWNoYXBvbHlfZnJlZV9tdChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhf bXQgKmNwY3R4KTsKKysKKytpbnQgICAgY2hhY2hhcG9seV9jcnlwdF9tdChzdHJ1Y3QgY2hhY2hh cG9seV9jdHhfbXQgKmNwY3R4LCB1X2ludCBzZXFuciwKKysJCQkgICB1X2NoYXIgKmRlc3QsIGNv bnN0IHVfY2hhciAqc3JjLCB1X2ludCBsZW4sIHVfaW50IGFhZGxlbiwKKysJCQkgICB1X2ludCBh dXRobGVuLCBpbnQgZG9fZW5jcnlwdCk7CisrCisraW50ICAgIGNoYWNoYXBvbHlfZ2V0X2xlbmd0 aF9tdChzdHJ1Y3QgY2hhY2hhcG9seV9jdHhfbXQgKmNwY3R4LAorKwkJCQl1X2ludCAqcGxlbnAs IHVfaW50IHNlcW5yLCBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCBsZW4pCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX2J1ZmZlcl9f LCA0LCA1KSkpOworKworKyNlbmRpZiAvKiBDSEFDSEFfUE9MWV9MSUJDUllQVE9fTVRfSCAqLwor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWN0ci1tdC5jIG9wZW5zc2gtMTAu M3AxL2NpcGhlci1jdHItbXQuYworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLWN0ci1t dC5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC4z cDEvY2lwaGVyLWN0ci1tdC5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIxNzU3NDA3ICswMjAwCitA QCAtMCwwICsxLDY4MSBAQAorKy8qCisrICogT3BlblNTSCBNdWx0aS10aHJlYWRlZCBBRVMtQ1RS IENpcGhlcgorKyAqCisrICogQXV0aG9yOiBCZW5qYW1pbiBCZW5uZXR0IDxiZW5AcHNjLmVkdT4K KysgKiBBdXRob3I6IE1pa2UgVGFzb3RhIDx0YXNvdGFAZ21haWwuY29tPgorKyAqIEF1dGhvcjog Q2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAy MSBQaXR0c2J1cmdoIFN1cGVyY29tcHV0aW5nIENlbnRlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqIEJhc2VkIG9uIG9yaWdpbmFsIE9wZW5TU0ggQUVTLUNUUiBjaXBoZXIuIFNtYWxs IHBvcnRpb25zIHJlbWFpbiB1bmNoYW5nZWQsCisrICogQ29weXJpZ2h0IChjKSAyMDAzIE1hcmt1 cyBGcmllZGwgPG1hcmt1c0BvcGVuYnNkLm9yZz4KKysgKgorKyAqIFBlcm1pc3Npb24gdG8gdXNl LCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorKyAq IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQg dGhhdCB0aGUgYWJvdmUKKysgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorKyAqCisrICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisr ICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FS UkFOVElFUyBPRgorKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQg U0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisrICogQU5ZIFNQRUNJQUwsIERJUkVDVCwg SU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworKyAqIFdI QVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hF VEhFUiBJTiBBTgorKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBU T1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisrICogT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysgKi8KKysjaW5jbHVk ZSAiaW5jbHVkZXMuaCIKKysKKysjaWYgZGVmaW5lZChXSVRIX09QRU5TU0wpICYmICFkZWZpbmVk KFdJVEhfT1BFTlNTTDMpCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKyNpbmNsdWRlIDxz dGRhcmcuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+CisrCisrI2luY2x1ZGUgInhtYWxsb2MuaCIKKysjaW5jbHVkZSAibG9nLmgiCisrI2luY2x1 ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlICJ1dGhhc2guaCIKKysKKysvKiBjb21wYXRpYmlsaXR5 IHdpdGggb2xkIG9yIGJyb2tlbiBPcGVuU1NMIHZlcnNpb25zICovCisrI2luY2x1ZGUgIm9wZW5i c2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmgiCisrCisrI2lmbmRlZiBVU0VfQlVJTFRJTl9SSUpO REFFTAorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxw dGhyZWFkLmg+CisrCisrI2lmZGVmIF9fQVBQTEVfXworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K KysjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorKyNlbmRpZgorKworKy8qIG5vdGUgcmVnYXJkaW5n IHRocmVhZHMgYW5kIHF1ZXVlcyAqLworKy8qIGluaXRpYWxseSB0aGlzIGNpcGhlciB3YXMgd3Jp dHRlbiBpbiBhIHdheSB0aGF0CisrICogdGhlIGtleSBzdHJlYW0gd2FzIGdlbmVyYXRlZCBpbiBh IHBlciBjaXBoZXIgYmxvY2sKKysgKiBsb29wLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGtleSBzdHJl YW0gcXVldWUgbGVuZ3RoIHdhcworKyAqIDE2ayBhbmQgdGhlIGNpcGhlciBibG9jayBzaXplIHdh cyAxNiBieXRlcyBpdCB3b3VsZAorKyAqIGZpbGwgdGhlIHF1ZXVlIDE2IGJ5dGVzIGF0IGEgdGlt ZS4gTWl0Y2ggRG9ycmVsbCBwb2ludGVkCisrICogb3V0IHRoYXQgd2UgY291bGQgZmlsbCB0aGUg cXVldWUgaW4gb25jZSBjYWxsIGVsaW1pbmF0aW5nCisrICogbG9vcCBhbmQgbXVsdGlwbGUgY2Fs bHMgdG8gRVZQX0VuY3J5cHRVcGRhdGUuIERvaW5nIHNvCisrICogZHJhbWF0aWNhbGx5IHJlZHVj ZWQgQ1BVIGxvYWQgaW4gdGhlIHRocmVhZHMgYW5kIGluZGljYXRlZAorKyAqIHRoYXQgd2UgY291 bGQgYWxzbyBlbGltaW5hdGUgbW9zdCBvZiB0aGUgdGhyZWFkcyBhbmQgcXVldWVzCisrICogYXMg aXQgd291bGQgdGFrZSBmYXIgbGVzcyB0aW1lIGZvciBhIHF1ZXVlIHRvIGVidGVyIEtRX0ZVTEwK KysgKiBzdGF0ZS4gQXMgc3VjaCwgd2UndmUgcmVkdWNlZCB0aGUgZGVmYXVsdCBudW1iZXIgb2Yg dGhyZWFkcworKyAqIGFuZCBxdWV1ZXMgZnJvbSAyIGFuZCA4IChyZXNwZWN0aXZlbHkpIHRvIDEg YW5kIDIuIFdlJ3ZlIGFsc28KKysgKiBlbGltbmF0ZWQgdGhlIG5lZWQgdG8gZGV0ZXJtaW5lIHRo ZSBwaHlzaWNhbCBudW1iZXIgb2YgY29yZXMgb24KKysgKiB0aGUgc3lzdGVtIGFuZCwgaWYgdGhl IHVzZXIgZGVzaXJlcywgY2FuIHNwaW4gdXAgbW9yZSB0aHJlYWRzCisrICogdXNpbmcgYW4gZW52 aXJvbm1lbnQgdmFyaWFibGUuIEFkZGl0aW9uYWxseSwgcXVldWVzIGlzIG5vdyBmaXhlZAorKyAq IGF0IHRocmVhZF9jb3VudCArIDEuCisrICogY2pyIDEwLzE5LzIwMjIgKi8KKysKKysvKi0tLS0t LS0tLS0tLS0tLS0tLS0tIFRVTkFCTEVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysvKiBtYXhp bXVtIG51bWJlciBvZiB0aHJlYWRzIGFuZCBxdWV1ZXMgKi8KKysjZGVmaW5lIE1BWF9USFJFQURT ICAgICAgNAorKyNkZWZpbmUgTUFYX05VTUtRICAgICAgICAoTUFYX1RIUkVBRFMgKyAxKQorKwor Ky8qIE51bWJlciBvZiBwcmVnZW4gdGhyZWFkcyB0byB1c2UgKi8KKysvKiB0aGlzIGlzIGEgZGVm YXVsdCB2YWx1ZS4gVGhlIGFjdHVhbCBudW1iZXIgaXMKKysgKiBkZXRlcm1pbmVkIGR1cmluZyBp bml0IGFzIGEgZnVuY3Rpb24gb2YgdGhlIG51bWJlcgorKyAqIG9mIGF2YWlsYWJsZSBjb3JlcyAq LworK2ludCBjaXBoZXJfdGhyZWFkcyA9IDE7CisrCisrLyogTnVtYmVyIG9mIGtleXN0cmVhbSBx dWV1ZXMgKi8KKysvKiBpZGVhbGx5IHRoaXMgc2hvdWxkIGJlIGxhcmdlIGVub3VnaCBzbyB0aGF0 IHRoZXJlIGlzCisrICogYWx3YXlzIGEga2V5IHF1ZXVlIGZvciBhIHRocmVhZCB0byB3b3JrIG9u CisrICogc28gbWF5YmUgZG91YmxlIG9mIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4gQWdhaW4gdGhp cworKyAqIGlzIGEgZGVmYXVsdCBhbmQgdGhlIGFjdHVhbCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGlu IGluaXQqLworK2ludCBudW1rcSA9IDI7CisrCisrLyogTGVuZ3RoIG9mIGEga2V5c3RyZWFtIHF1 ZXVlICovCisrLyogb25lIHF1ZXVlIGhvbGRzIDUxMktCICgxMDI0ICogMzIgKiAxNikgb2Yga2V5 IGRhdGEKKysgKiBiZWluZyB0aGF0IHRoZSBxdWV1ZXMgYXJlIGRlc3Ryb3llZCBhZnRlciBhIHJl a2V5CisrICogYW5kIGF0IGxlYXRzIG9uZSBoYXMgdG8gYmUgZnVsbHkgZmlsbGVkIHByaW9yIHRv CisrICogZW5jaXBoZXJpbmcgZGF0YSB3ZSBkb24ndCB3YW50IHRoaXMgdG8gYmUgdG9vIGxhcmdl ICovCisrI2RlZmluZSBLUUxFTiAoMTAyNCAqIDMyKQorKworKy8qIFByb2Nlc3NvciBjYWNoZWxp bmUgbGVuZ3RoICovCisrI2RlZmluZSBDQUNIRUxJTkVfTEVOCTY0CisrCisrLyogQ2FuIHRoZSBz eXN0ZW0gZG8gdW5hbGlnbmVkIGxvYWRzIG5hdGl2ZWx5PyAqLworKyNpZiBkZWZpbmVkKF9fYWFy Y2g2NF9fKSB8fCBcCisrICAgIGRlZmluZWQoX19pMzg2X18pICAgIHx8IFwKKysgICAgZGVmaW5l ZChfX3Bvd2VycGNfXykgfHwgXAorKyAgICBkZWZpbmVkKF9feDg2XzY0X18pCisrIyBkZWZpbmUg Q0lQSEVSX1VOQUxJR05FRF9PSworKyNlbmRpZgorKyNpZiBkZWZpbmVkKF9fU0laRU9GX0lOVDEy OF9fKQorKyMgZGVmaW5lIENJUEhFUl9JTlQxMjhfT0sKKysjZW5kaWYKKysvKi0tLS0tLS0tLS0t LS0tLS0tLS0tIEVORCBUVU5BQkxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrI2RlZmlu ZSBIQVZFX05PTkUgICAgICAgMAorKyNkZWZpbmUgSEFWRV9LRVkgICAgICAgIDEKKysjZGVmaW5l IEhBVkVfSVYgICAgICAgICAyCisraW50IFggPSAwOworKworK2NvbnN0IEVWUF9DSVBIRVIgKmV2 cF9hZXNfY3RyX210KHZvaWQpOworKworKy8qIEtleXN0cmVhbSBRdWV1ZSBzdGF0ZSAqLworK2Vu dW0geworKwlLUUlOSVQsCisrCUtRRU1QVFksCisrCUtRRklMTElORywKKysJS1FGVUxMLAorKwlL UURSQUlOSU5HCisrfTsKKysKKysvKiBLZXlzdHJlYW0gUXVldWUgc3RydWN0ICovCisrc3RydWN0 IGtxIHsKKysJdV9jaGFyCQlrZXlzW0tRTEVOXVtBRVNfQkxPQ0tfU0laRV07IC8qIFszMjc2OF1b MTZCXSAqLworKwl1X2NoYXIJCWN0cltBRVNfQkxPQ0tfU0laRV07IC8qIDE2QiAqLworKwl1X2No YXIgICAgICAgICAgcGFkMFtDQUNIRUxJTkVfTEVOXTsKKysJcHRocmVhZF9tdXRleF90CWxvY2s7 CisrCXB0aHJlYWRfY29uZF90CWNvbmQ7CisrCWludCAgICAgICAgICAgICBxc3RhdGU7CisrCXVf Y2hhciAgICAgICAgICBwYWQxW0NBQ0hFTElORV9MRU5dOworK307CisrCisrLyogQ29udGV4dCBz dHJ1Y3QgKi8KKytzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210CisreworKwlsb25nIHVuc2lnbmVk IGludCBzdHJ1Y3RfaWQ7CisrCWludCAgICAgICAgICAgICAgIGtleWxlbjsKKysJaW50CQkgIHN0 YXRlOworKwlpbnQJCSAgcWlkeDsKKysJaW50CQkgIHJpZHg7CisrCWludCAgICAgICAgICAgICAg IGlkW01BWF9USFJFQURTXTsgLyogMzIgKi8KKysJQUVTX0tFWSAgICAgICAgICAgYWVzX2tleTsK KysJY29uc3QgdV9jaGFyICAgICAqb3JpZ19rZXk7CisrCXVfY2hhcgkJICBhZXNfY291bnRlcltB RVNfQkxPQ0tfU0laRV07IC8qIDE2QiAqLworKwlwdGhyZWFkX3QJICB0aWRbTUFYX1RIUkVBRFNd OyAvKiAzMiAqLworKwlwdGhyZWFkX3J3bG9ja190ICB0aWRfbG9jazsKKysJc3RydWN0IGtxCSAg cVtNQVhfTlVNS1FdOyAvKiAzMyAqLworKyNpZmRlZiBfX0FQUExFX18KKysJcHRocmVhZF9yd2xv Y2tfdCAgc3RvcF9sb2NrOworKwlpbnQJCSAgZXhpdF9mbGFnOworKyNlbmRpZiAvKiBfX0FQUExF X18gKi8KKyt9OworKworKy8qIHRoaXMgZGVmaW5lcyB0aGUgaGFzaCBhbmQgZWxlbWVudHMgb2Yg ZXZwIGNvbnRleHQgcG9pbnRlcnMKKysgKiB0aGF0IGFyZSBjcmVhdGVkIGluIHRocmVhZF9sb29w LiBXZSB1c2UgdGhpcyB0byBjbGVhciBhbmQKKysgKiBmcmVlIHRoZSBjb250ZXh0cyBpbiBzdG9w X2FuZF9wcmVqb2luCisrICovCisrc3RydWN0IGFlc19tdF9jdHhfcHRycyB7CisrCXB0aHJlYWRf dCAgICAgICB0aWQ7CisrCUVWUF9DSVBIRVJfQ1RYICpwb2ludGVyOyAvKiAzMiAqLworKwlVVF9o YXNoX2hhbmRsZSBoaDsKKyt9OworKworKy8qIGdsb2JhbHMgKi8KKysvKiBob3cgd2UgaW5jcmVt ZW50IHRoZSBpZCB0aGUgc3RydWN0cyB3ZSBjcmVhdGUgKi8KKytsb25nIHVuc2lnbmVkIGludCBn bG9iYWxfc3RydWN0X2lkID0gMDsKKysKKysvKiBrZWVwIGEgY29weSBvZiB0aGUgcG9pbnRlcnMg Y3JlYXRlZCBpbiB0aHJlYWRfbG9vcCB0byBmcmVlIGxhdGVyICovCisrc3RydWN0IGFlc19tdF9j dHhfcHRycyAqZXZwX3B0cnMgPSBOVUxMOworKworKy8qCisrICogQWRkIG51bSB0byBjb3VudGVy ICdjdHInCisrICovCisrc3RhdGljIHZvaWQKKytzc2hfY3RyX2FkZCh1X2NoYXIgKmN0ciwgdWlu dDMyX3QgbnVtLCB1X2ludCBsZW4pCisreworKwlpbnQgaTsKKysJdWludDE2X3QgbjsKKysKKysJ Zm9yIChuID0gMCwgaSA9IGxlbiAtIDE7IGkgPj0gMCAmJiAobnVtIHx8IG4pOyBpLS0pIHsKKysJ CW4gPSBjdHJbaV0gKyAobnVtICYgMHhmZikgKyBuOworKwkJbnVtID4+PSA4OworKwkJY3RyW2ld ID0gbiAmIDB4ZmY7CisrCQluID4+PSA4OworKwl9CisrfQorKworKy8qCisrICogVGhyZWFkcyBt YXkgYmUgY2FuY2VsbGVkIGluIGEgcHRocmVhZF9jb25kX3dhaXQsIHdlIG11c3QgZnJlZSB0aGUg bXV0ZXgKKysgKi8KKytzdGF0aWMgdm9pZAorK3RocmVhZF9sb29wX2NsZWFudXAodm9pZCAqeCkK Kyt7CisrCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211dGV4X3QgKil4KTsKKyt9Cisr CisrI2lmZGVmIF9fQVBQTEVfXworKy8qIENoZWNrIGlmIHdlIHNob3VsZCBleGl0LCB3ZSBhcmUg ZG9pbmcgYm90aCBjYW5jZWwgYW5kIGV4aXQgY29uZGl0aW9uCisrICogc2luY2Ugb24gT1NYIHRo cmVhZHMgc2VlbSB0byBvY2Nhc2lvbmFsbHkgZmFpbCB0byBub3RpY2Ugd2hlbiB0aGV5IGhhdmUK KysgKiBiZWVuIGNhbmNlbGxlZC4gV2Ugd2FudCB0byBoYXZlIGEgYmFja3VwIHRvIG1ha2Ugc3Vy ZSB0aGF0IHdlIHdvbid0IGhhbmcKKysgKiB3aGVuIHRoZSBtYWluIHByb2Nlc3Mgam9pbigpLXMg dGhlIGNhbmNlbGxlZCB0aHJlYWQuCisrICovCisrc3RhdGljIHZvaWQKKyt0aHJlYWRfbG9vcF9j aGVja19leGl0KHN0cnVjdCBzc2hfYWVzX2N0cl9jdHhfbXQgKmMpCisreworKwlpbnQgZXhpdF9m bGFnOworKworKwlwdGhyZWFkX3J3bG9ja19yZGxvY2soJmMtPnN0b3BfbG9jayk7CisrCWV4aXRf ZmxhZyA9IGMtPmV4aXRfZmxhZzsKKysJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZjLT5zdG9wX2xv Y2spOworKworKwlpZiAoZXhpdF9mbGFnKQorKwkJcHRocmVhZF9leGl0KE5VTEwpOworK30KKysj ZWxzZQorKyMgZGVmaW5lIHRocmVhZF9sb29wX2NoZWNrX2V4aXQocykKKysjZW5kaWYgLyogX19B UFBMRV9fICovCisrCisrLyoKKysgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdGVybWluYXRlIHRoZSBo ZWxwZXIgdGhyZWFkcworKyAqLworK3N0YXRpYyB2b2lkCisrc3RvcF9hbmRfam9pbl9wcmVnZW5f dGhyZWFkcyhzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjKQorK3sKKysJaW50IGk7CisrCisr I2lmZGVmIF9fQVBQTEVfXworKwkvKiBub3RpZnkgdGhyZWFkcyB0aGF0IHRoZXkgc2hvdWxkIGV4 aXQgKi8KKysJcHRocmVhZF9yd2xvY2tfd3Jsb2NrKCZjLT5zdG9wX2xvY2spOworKwljLT5leGl0 X2ZsYWcgPSBUUlVFOworKwlwdGhyZWFkX3J3bG9ja191bmxvY2soJmMtPnN0b3BfbG9jayk7Cisr I2VuZGlmIC8qIF9fQVBQTEVfXyAqLworKworKwkvKiBDYW5jZWwgcHJlZ2VuIHRocmVhZHMgKi8K KysJZm9yIChpID0gMDsgaSA8IGNpcGhlcl90aHJlYWRzOyBpKyspIHsKKysJCWRlYnVnICgiQ2Fu Y2VsZWQgJWx1ICglbHUsJWQpIiwgYy0+dGlkW2ldLCBjLT5zdHJ1Y3RfaWQsIGMtPmlkW2ldKTsK KysJCXB0aHJlYWRfY2FuY2VsKGMtPnRpZFtpXSk7CisrCX0KKysgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBudW1rcTsgaSsrKSB7CisrICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygm Yy0+cVtpXS5sb2NrKTsKKysgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgm Yy0+cVtpXS5jb25kKTsKKysgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmMt PnFbaV0ubG9jayk7CisrICAgICAgICB9CisrCWZvciAoaSA9IDA7IGkgPCBjaXBoZXJfdGhyZWFk czsgaSsrKSB7CisrCQlpZiAocHRocmVhZF9raWxsKGMtPnRpZFtpXSwgMCkgIT0gMCkKKysJCQlk ZWJ1ZzMoIkFFUy1DVFIgTVQgcHRocmVhZF9qb2luIGZhaWx1cmU6IEludmFsaWQgdGhyZWFkIGlk ICVsdSBpbiAlcyIsCisrCQkJICAgICAgIGMtPnRpZFtpXSwgX19GVU5DVElPTl9fKTsKKysJCWVs c2UgeworKwkJCWRlYnVnICgiSm9pbmluZyAlbHUgKCVsdSwgJWQpIiwgYy0+dGlkW2ldLCBjLT5z dHJ1Y3RfaWQsIGMtPmlkW2ldKTsKKysJCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmMtPnFbaV0u bG9jayk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJmMt PnFbaV0uY29uZCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9qb2luKGMtPnRp ZFtpXSwgTlVMTCk7CisrCQkJLyogdGhpcyBmaW5kcyB0aGUgZW50cnkgaW4gdGhlIGhhc2ggdGhh dCBjb3JyZXNwb25kaW5nIHRvIHRoZQorKwkJCSAqIHRocmVhZCBpZC4gVGhhdCdzIHVzZWQgdG8g ZmluZCB0aGUgcG9pbnRlciB0byB0aGUgY2lwaGVyIHN0cnVjdAorKwkJCSAqIGNyZWF0ZWQgaW4g dGhyZWFkX2xvb3AuICovCisrCQkJc3RydWN0IGFlc19tdF9jdHhfcHRycyAqcHRyOworKwkJCUhB U0hfRklORF9JTlQoZXZwX3B0cnMsICZjLT50aWRbaV0sIHB0cik7CisrCQkJRVZQX0NJUEhFUl9D VFhfZnJlZShwdHItPnBvaW50ZXIpOworKwkJCUhBU0hfREVMKGV2cF9wdHJzLCBwdHIpOworKwkJ CWZyZWUocHRyKTsgICAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysJcHRocmVhZF9yd2xvY2tf ZGVzdHJveSgmYy0+dGlkX2xvY2spOworK30KKysKKysvKgorKyAqIFRoZSBsaWZlIG9mIGEgcHJl Z2VuIHRocmVhZDoKKysgKiAgICBGaW5kIGVtcHR5IGtleXN0cmVhbSBxdWV1ZXMgYW5kIGZpbGwg dGhlbSB1c2luZyB0aGVpciBjb3VudGVyLgorKyAqICAgIFdoZW4gZG9uZSwgdXBkYXRlIGNvdW50 ZXIgZm9yIHRoZSBuZXh0IGZpbGwuCisrICovCisrLyogcHJldmlvdXNseSB0aGlzIHVzZWQgdGhl IGxvdyBsZXZlbCBpbnRlcmZhY2Ugd2hpY2ggaXMsIHNhZGx5LAorKyAqIHNsb3dlciB0aGFuIHRo ZSBFVlAgaW50ZXJmYWNlIGJ5IGEgbG9uZyBzaG90LiBUaGUgb3JpZ2luYWwgY3R4IChmcm9tIHRo ZQorKyAqIGJvZHkgb2YgdGhlIGNvZGUpIGlzbid0IHBhc3NlZCBpbiBoZXJlIGJ1dCB3ZSBoYXZl IHRoZSBrZXkgYW5kIHRoZSBjb3VudGVyCisrICogd2hpY2ggbWVhbnMgd2Ugc2hvdWxkIGJlIGFi bGUgdG8gY3JlYXRlIHRoZSBleGFjdCBzYW1lIGN0eCBhbmQgdXNlIHRoYXQgdG8KKysgKiBmaWxs IHRoZSBrZXlzdHJlYW0gcXVldWVzLiBJJ20gY29uY2VybmVkIGFib3V0IGFkZGl0aW9uYWwgb3Zl cmhlYWQgYnV0IHRoZQorKyAqIGFkZGl0aW9uYWwgc3BlZWQgZnJvbSBBRVNOSSBzaG91bGQgbWFr ZSB1cCBmb3IgaXQuICAqLworKy8qIFRoZSBhYm92ZSBjb21tZW50IHdhcyBtYWRlIHdoZW4gSSB0 aG91Z2h0IEkgbmVlZGVkIHRvIGRvIGEgbmV3IEVWUCBpbml0IGZvcgorKyAqIGVhY2ggY291bnRl ciBpbmNyZW1lbnQuIFR1cm5zIG91dCBub3QgdG8gYmUgdGhlIGNhc2UgLWNqciAxMC8xNS8yMSov CisrCisrc3RhdGljIHZvaWQgKgorK3RocmVhZF9sb29wKHZvaWQgKngpCisreworKwlFVlBfQ0lQ SEVSX0NUWCAqIHZvbGF0aWxlIGFlc25pX2N0eDsKKysJc3RydWN0IHNzaF9hZXNfY3RyX2N0eF9t dCAqYyA9IHg7CisrCXN0cnVjdCBrcSAqcTsKKysJc3RydWN0IGFlc19tdF9jdHhfcHRycyAqcHRy OworKwlpbnQgcWlkeDsKKysJcHRocmVhZF90IGZpcnN0X3RpZDsKKysJaW50IG91dGxlbjsKKysJ dV9jaGFyIG15bnVsbFtLUUxFTiAqIEFFU19CTE9DS19TSVpFXTsKKysJbWVtc2V0KCZteW51bGws IDAsIEtRTEVOICogQUVTX0JMT0NLX1NJWkUpOworKworKwkvKiBnZXQgdGhlIHRocmVhZCBpZCB0 byBzZWUgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgb25lICovCisrCXB0aHJlYWRfcndsb2NrX3JkbG9j aygmYy0+dGlkX2xvY2spOworKwlmaXJzdF90aWQgPSBjLT50aWRbMF07CisrCXB0aHJlYWRfcnds b2NrX3VubG9jaygmYy0+dGlkX2xvY2spOworKworKwkvKiBjcmVhdGUgdGhlIGNvbnRleHQgZm9y IHRoaXMgdGhyZWFkICovCisrCWFlc25pX2N0eCA9IEVWUF9DSVBIRVJfQ1RYX25ldygpOworKwor KwkvKiBrZWVwIHRyYWNrIG9mIHRoZSBwb2ludGVyIGZvciB0aGUgZXZwIGluIHRoaXMgc3RydWN0 CisrCSAqIHNvIHdlIGNhbiBmcmVlIGl0IGxhdGVyLiBTbyB3ZSBwbGFjZSBpdCBpbiBhIGhhc2gg aW5kZXhlZCBvbiB0aGUKKysJICogdGhyZWFkIGlkLCB3aGljaCBpcyBhdmFpbGFibGUgdG8gdXMg aW4gdGhlIGZyZWUgZnVuY3Rpb24uCisrCSAqIE5vdGUsIHRoZSB0aHJlYWQgaWQgaXNuJ3QgbmVj ZXNzYXJ5IHVuaXF1ZSBhY3Jvc3MgcmVrZXlzIGJ1dAorKwkgKiB0aGF0J3Mgb2theSBhcyB0aGV5 IGFyZSB1bmlxdWUgZHVyaW5nIGEga2V5LiAqLworKwlwdHIgPSBtYWxsb2Moc2l6ZW9mICpwdHIp OyAvKmZyZWVkIGluIHN0b3AgJiBwcmVqb2luICovCisrCXB0ci0+dGlkID0gcHRocmVhZF9zZWxm KCk7IC8qIGluZGV4IGZvciBoYXNoICovCisrCXB0ci0+cG9pbnRlciA9IGFlc25pX2N0eDsKKysJ SEFTSF9BRERfSU5UKGV2cF9wdHJzLCB0aWQsIHB0cik7CisrCisrCS8qIGluaXRpYWxpemUgdGhl IGNpcGhlciBjdHggd2l0aCB0aGUga2V5IHByb3ZpZGVkCisrCSAqIGRldGVybWluZSB3aGljaCBj aXBoZXIgdG8gdXNlIGJhc2VkIG9uIHRoZSBrZXkgc2l6ZSAqLworKwlpZiAoYy0+a2V5bGVuID09 IDI1NikKKysJCUVWUF9FbmNyeXB0SW5pdF9leChhZXNuaV9jdHgsIEVWUF9hZXNfMjU2X2N0cigp LCBOVUxMLCBjLT5vcmlnX2tleSwgTlVMTCk7CisrCWVsc2UgaWYgKGMtPmtleWxlbiA9PSAxMjgp CisrCQlFVlBfRW5jcnlwdEluaXRfZXgoYWVzbmlfY3R4LCBFVlBfYWVzXzEyOF9jdHIoKSwgTlVM TCwgYy0+b3JpZ19rZXksIE5VTEwpOworKwllbHNlIGlmIChjLT5rZXlsZW4gPT0gMTkyKQorKwkJ RVZQX0VuY3J5cHRJbml0X2V4KGFlc25pX2N0eCwgRVZQX2Flc18xOTJfY3RyKCksIE5VTEwsIGMt Pm9yaWdfa2V5LCBOVUxMKTsKKysJZWxzZSB7CisrCQlsb2dpdCgiSW52YWxpZCBrZXkgbGVuZ3Ro IG9mICVkIGluIEFFUyBDVFIgTVQuIEV4aXRpbmciLCBjLT5rZXlsZW4pOworKwkJZXhpdCgxKTsK KysJfQorKworKwkvKgorKwkgKiBIYW5kbGUgdGhlIHNwZWNpYWwgY2FzZSBvZiBzdGFydHVwLCBv bmUgdGhyZWFkIG11c3QgZmlsbAorKwkgKiB0aGUgZmlyc3QgS1EgdGhlbiBtYXJrIGl0IGFzIGRy YWluaW5nLiBMb2NrIGhlbGQgdGhyb3VnaG91dC4KKysJICovCisrCisrCWlmIChwdGhyZWFkX2Vx dWFsKHB0aHJlYWRfc2VsZigpLCBmaXJzdF90aWQpKSB7CisrCQkvKiBnZXQgdGhlIGZpcnN0IGVs ZW1lbnQgb2YgdGhlIGtleXF1ZSBzdHJ1Y3QgKi8KKysJCXEgPSAmYy0+cVswXTsKKysJCXB0aHJl YWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7CisrCQkvKiBpZiB3ZSBhcmUgaW4gdGhlIElOSVQgc3Rh dGUgdGhlbiBmaWxsIHRoZSBxdWV1ZSAqLworKwkJaWYgKHEtPnFzdGF0ZSA9PSBLUUlOSVQpIHsK KysJCQkvKiBzZXQgdGhlIGluaXRpYWwgY291bnRlciAqLworKwkJCUVWUF9FbmNyeXB0SW5pdF9l eChhZXNuaV9jdHgsIE5VTEwsIE5VTEwsIE5VTEwsIHEtPmN0cik7CisrCisrCQkJLyogZW5jeXBo ZXIgYSBibG9jayBzaXplZCBudWxsIHN0cmluZyAobXludWxsKSB3aXRoIHRoZSBrZXkuIFRoaXMK KysJCQkgKiByZXR1cm5zIHRoZSBrZXlzdHJlYW0gYmVjYXVzZSB4b3JpbmcgdGhlIGtleXN0cmVh bQorKwkJCSAqIGFnYWluc3QgbnVsbCByZXR1cm5zIHRoZSBrZXlzdHJlYW0uIFN0b3JlIHRoYXQg aW4gdGhlIGFwcHJvcHJpYXRlIHF1ZXVlICovCisrCQkJRVZQX0VuY3J5cHRVcGRhdGUoYWVzbmlf Y3R4LCBxLT5rZXlzWzBdLCAmb3V0bGVuLCBteW51bGwsIEtRTEVOICogQUVTX0JMT0NLX1NJWkUp OworKworKwkJCS8qIGFkZCB0aGUgbnVtYmVyIG9mIGJsb2NrcyBjcmVhdGVzIHRvIHRoZSBhZXMg Y291bnRlciAqLworKwkJCXNzaF9jdHJfYWRkKHEtPmN0ciwgS1FMRU4gKiBudW1rcSwgQUVTX0JM T0NLX1NJWkUpOworKwkJCXEtPnFzdGF0ZSA9IEtRRFJBSU5JTkc7CisrCQkJcHRocmVhZF9jb25k X2Jyb2FkY2FzdCgmcS0+Y29uZCk7CisrCQl9CisrCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+ bG9jayk7CisrCX0KKysKKysJLyoKKysJICogTm9ybWFsIGNhc2UgaXMgdG8gZmluZCBlbXB0eSBx dWV1ZXMgYW5kIGZpbGwgdGhlbSwgc2tpcHBpbmcgb3ZlcgorKwkgKiBxdWV1ZXMgYWxyZWFkeSBm aWxsZWQgYnkgb3RoZXIgdGhyZWFkcyBhbmQgc3RvcHBpbmcgdG8gd2FpdCBmb3IKKysJICogYSBk cmFpbmluZyBxdWV1ZSB0byBiZWNvbWUgZW1wdHkuCisrCSAqCisrCSAqIE11bHRpcGxlIHRocmVh ZHMgbWF5IGJlIHdhaXRpbmcgb24gYSBkcmFpbmluZyBxdWV1ZSBhbmQgYXdva2VuCisrCSAqIHdo ZW4gZW1wdHkuICBUaGUgZmlyc3QgdGhyZWFkIHRvIHdha2Ugd2lsbCBtYXJrIGl0IGFzIGZpbGxp bmcsCisrCSAqIG90aGVycyB3aWxsIG1vdmUgb24gdG8gZmlsbCwgc2tpcCwgb3Igd2FpdCBvbiB0 aGUgbmV4dCBxdWV1ZS4KKysJICovCisrCWZvciAocWlkeCA9IDE7OyBxaWR4ID0gKHFpZHggKyAx KSAlIG51bWtxKSB7CisrCQkvKiBDaGVjayBpZiBJIHdhcyBjYW5jZWxsZWQsIGFsc28gY2hlY2tl ZCBpbiBjb25kX3dhaXQgKi8KKysJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOworKworKwkJLyogQ2hl Y2sgaWYgd2Ugc2hvdWxkIGV4aXQgYXMgd2VsbCAqLworKwkJdGhyZWFkX2xvb3BfY2hlY2tfZXhp dChjKTsKKysKKysJCS8qIExvY2sgcXVldWUgYW5kIGJsb2NrIGlmIGl0cyBkcmFpbmluZyAqLwor KwkJcSA9ICZjLT5xW3FpZHhdOworKwkJcHRocmVhZF9tdXRleF9sb2NrKCZxLT5sb2NrKTsKKysJ CXB0aHJlYWRfY2xlYW51cF9wdXNoKHRocmVhZF9sb29wX2NsZWFudXAsICZxLT5sb2NrKTsKKysJ CXdoaWxlIChxLT5xc3RhdGUgPT0gS1FEUkFJTklORyB8fCBxLT5xc3RhdGUgPT0gS1FJTklUKSB7 CisrCQkJdGhyZWFkX2xvb3BfY2hlY2tfZXhpdChjKTsKKysJCQlwdGhyZWFkX2NvbmRfd2FpdCgm cS0+Y29uZCwgJnEtPmxvY2spOworKwkJfQorKwkJcHRocmVhZF9jbGVhbnVwX3BvcCgwKTsKKysK KysJCS8qIElmIGZpbGxpbmcgb3IgZnVsbCwgc29tZWJvZHkgZWxzZSBnb3QgaXQsIHNraXAgKi8K KysJCWlmIChxLT5xc3RhdGUgIT0gS1FFTVBUWSkgeworKwkJCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZxLT5sb2NrKTsKKysJCQljb250aW51ZTsKKysJCX0KKysKKysJCS8qCisrCQkgKiBFbXB0eSwg bGV0J3MgZmlsbCBpdC4KKysJCSAqIFF1ZXVlIGxvY2sgaXMgcmVsaW5xdWlzaGVkIHdoaWxlIHdl IGRvIHRoaXMgc28gb3RoZXJzCisrCQkgKiBjYW4gc2VlIHRoYXQgaXQncyBiZWluZyBmaWxsZWQu CisrCQkgKi8KKysJCXEtPnFzdGF0ZSA9IEtRRklMTElORzsKKysJCXB0aHJlYWRfY29uZF9icm9h ZGNhc3QoJnEtPmNvbmQpOworKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnEtPmxvY2spOworKwor KwkJLyogc2V0IHRoZSBpbml0aWFsIGNvdW50ZXIgKi8KKysJCUVWUF9FbmNyeXB0SW5pdF9leChh ZXNuaV9jdHgsIE5VTEwsIE5VTEwsIE5VTEwsIHEtPmN0cik7CisrCisrCQkvKiBzZWUgY29yZXNw b25kaW5nIGJsb2NrIGFib3ZlIGZvciB1c2VmdWwgY29tbWVudHMgKi8KKysJCUVWUF9FbmNyeXB0 VXBkYXRlKGFlc25pX2N0eCwgcS0+a2V5c1swXSwgJm91dGxlbiwgbXludWxsLCBLUUxFTiAqIEFF U19CTE9DS19TSVpFKTsKKysKKysJCS8qIFJlLWxvY2ssIG1hcmsgZnVsbCBhbmQgc2lnbmFsIGNv bnN1bWVyICovCisrCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2spOworKwkJc3NoX2N0cl9h ZGQocS0+Y3RyLCBLUUxFTiAqIG51bWtxLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlxLT5xc3RhdGUg PSBLUUZVTEw7CisrCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5jb25kKTsKKysJCXB0aHJl YWRfbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKysJfQorKworKwlyZXR1cm4gTlVMTDsKKyt9Cisr CisrLyogdGhpcyBpcyB3aGVyZSB0aGUgZGF0YSBpcyBhY3R1YWxseSBlbmNpcGhlcmVkIGFuZCBk ZWNpcGhlcmVkICovCisrLyogdGhpcyBtYXkgYWxzbyBiZW5lZml0IGZyb20gdXBncmFkaW5nIHRv IHRoZSBFVlAgQVBJICovCisrc3RhdGljIGludAorK3NzaF9hZXNfY3RyKEVWUF9DSVBIRVJfQ1RY ICpjdHgsIHVfY2hhciAqZGVzdCwgY29uc3QgdV9jaGFyICpzcmMsCisrICAgIHNpemVfdCBsZW4p CisreworKwl0eXBlZGVmIHVuaW9uIHsKKysjaWZkZWYgQ0lQSEVSX0lOVDEyOF9PSworKwkJX191 aW50MTI4X3QgKnUxMjg7CisrI2VuZGlmCisrCQl1aW50NjRfdCAqdTY0OworKwkJdWludDMyX3Qg KnUzMjsKKysJCXVpbnQ4X3QgKnU4OworKwkJY29uc3QgdWludDhfdCAqY3U4OworKwkJdWludHB0 cl90IHU7CisrCX0gcHRyc190OworKwlwdHJzX3QgZGVzdHAsIHNyY3AsIGJ1ZnA7CisrCXVpbnRw dHJfdCBhbGlnbjsKKysJc3RydWN0IHNzaF9hZXNfY3RyX2N0eF9tdCAqYzsKKysJc3RydWN0IGtx ICpxLCAqb2xkcTsKKysJaW50IHJpZHg7CisrCXVfY2hhciAqYnVmOworKworKwlpZiAobGVuID09 IDApCisrCQlyZXR1cm4gMTsKKysJaWYgKChjID0gRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRh KGN0eCkpID09IE5VTEwpCisrCQlyZXR1cm4gMDsKKysKKysJcSA9ICZjLT5xW2MtPnFpZHhdOwor KwlyaWR4ID0gYy0+cmlkeDsKKysKKysJLyogc3JjIGFscmVhZHkgcGFkZGVkIHRvIGJsb2NrIG11 bHRpcGxlICovCisrCXNyY3AuY3U4ID0gc3JjOworKwlkZXN0cC51OCA9IGRlc3Q7CisrCWRvIHsg LyogZG8gdW50aWwgbGVuIGlzIDAgKi8KKysJCWJ1ZiA9IHEtPmtleXNbcmlkeF07CisrCQlidWZw LnU4ID0gYnVmOworKworKwkJLyogZmlndXJlIG91dCB0aGUgYWxpZ25tZW50IG9uIHRoZSBmbHkg Ki8KKysjaWZkZWYgQ0lQSEVSX1VOQUxJR05FRF9PSworKwkJYWxpZ24gPSAwOworKyNlbHNlCisr CQlhbGlnbiA9IGRlc3RwLnUgfCBzcmNwLnUgfCBidWZwLnU7CisrI2VuZGlmCisrCisrCQkvKiB4 b3IgdGhlIHNyYyBhZ2FpbnN0IHRoZSBrZXkgKGJ1ZikKKysJCSAqIGRpZmZlcmVudCBzeXN0ZW1z IGNhbiBkbyBhbGwgMTYgYnl0ZXMgYXQgb25jZSBvcgorKwkJICogbWF5IG5lZWQgdG8gZG8gaXQg aW4gOCBvciA0IGJ5dGVzIGNodW5rcworKwkJICogd29yc3QgY2FzZSBpcyBkb2luZyBpdCBhcyBh IGxvb3AgKi8KKysjaWZkZWYgQ0lQSEVSX0lOVDEyOF9PSworKwkJLyogd2l0aCBHQ0MgMTMgd2Ug aGF2ZSBoYXZpbmcgY29uc2lzdGVudCBzZWcgZmF1bHRzCisrCQkgKiBpbiB0aGlzIHNlY3Rpb24g b2YgY29kZS4gU2luY2UgdGhpcyBpcyBhIGNyaXRpY2FsCisrCQkgKiBjb2RlIHBhdGggd2UgYXJl IHJlbW92aW5nIHRoaXMgdW50aWwgd2UgaGF2ZSBhIHNvbHV0aW9uCisrCQkgKiBpbiBwbGFjZSAt Y2pyIDAyLzIyLzI0CisrCQkgKiBUT0RPOiBGSVggVEhJUworKwkJICovCisrCQkvKiBpZiAoKGFs aWduICYgMHhmKSA9PSAwKSB7ICovCisrCQkvKiAJZGVzdHAudTEyOFswXSA9IHNyY3AudTEyOFsw XSBeIGJ1ZnAudTEyOFswXTsgKi8KKysJCS8qIH0gZWxzZSAqLworKyNlbmRpZgorKwkJLyogdGhp cyBpcyBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gc2FuaXRpemVycworKwkJICogdGhp cyBpcyBhbm5veWluZyBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQKKysJCSAqIGJ1dCBVQiBp cyBub3Qgc29tZXRoaW5nIEkgd2FudCB0byByZXRhaW4gKi8KKysJCS8qIDY0IGJpdHMgKi8KKysJ CS8qIGlmICgoYWxpZ24gJiAweDcpID09IDApIHsgKi8KKysJCS8qIAlkZXN0cC51NjRbMF0gPSBz cmNwLnU2NFswXSBeIGJ1ZnAudTY0WzBdOyAqLworKwkJLyogCWRlc3RwLnU2NFsxXSA9IHNyY3Au dTY0WzFdIF4gYnVmcC51NjRbMV07ICovCisrCQkvKiAvXCogMzIgYml0cyAqXC8gKi8KKysJCS8q IH0gZWxzZSAqLworKwkJaWYgKChhbGlnbiAmIDB4MykgPT0gMCkgeworKwkJCWRlc3RwLnUzMlsw XSA9IHNyY3AudTMyWzBdIF4gYnVmcC51MzJbMF07CisrCQkJZGVzdHAudTMyWzFdID0gc3JjcC51 MzJbMV0gXiBidWZwLnUzMlsxXTsKKysJCQlkZXN0cC51MzJbMl0gPSBzcmNwLnUzMlsyXSBeIGJ1 ZnAudTMyWzJdOworKwkJCWRlc3RwLnUzMlszXSA9IHNyY3AudTMyWzNdIF4gYnVmcC51MzJbM107 CisrCQl9IGVsc2UgeworKwkJCS8qMSBieXRlIGF0IGEgdGltZSovCisrCQkJc2l6ZV90IGk7Cisr CQkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFOyArK2kpCisrCQkJCWRlc3RbaV0gPSBz cmNbaV0gXiBidWZbaV07CisrCQl9CisrCisrCQkvKiBpbmMvZGVjcmVtZW50IHRoZSBwb2ludGVy cyBieSB0aGUgYmxvY2sgc2l6ZSAoMTYpKi8KKysJCWRlc3RwLnUgKz0gQUVTX0JMT0NLX1NJWkU7 CisrCQlzcmNwLnUgKz0gQUVTX0JMT0NLX1NJWkU7CisrCisrCQkvKiBJbmNyZW1lbnQgcmVhZCBp bmRleCwgc3dpdGNoIHF1ZXVlcyBvbiByb2xsb3ZlciAqLworKwkJaWYgKChyaWR4ID0gKHJpZHgg KyAxKSAlIEtRTEVOKSA9PSAwKSB7CisrCQkJb2xkcSA9IHE7CisrCisrCQkJLyogTWFyayBuZXh0 IHF1ZXVlIGRyYWluaW5nLCBtYXkgbmVlZCB0byB3YWl0ICovCisrCQkJYy0+cWlkeCA9IChjLT5x aWR4ICsgMSkgJSBudW1rcTsKKysJCQlxID0gJmMtPnFbYy0+cWlkeF07CisrCQkJcHRocmVhZF9t dXRleF9sb2NrKCZxLT5sb2NrKTsKKysJCQl3aGlsZSAocS0+cXN0YXRlICE9IEtRRlVMTCkgewor KwkJCQlwdGhyZWFkX2NvbmRfd2FpdCgmcS0+Y29uZCwgJnEtPmxvY2spOworKwkJCX0KKysJCQlx LT5xc3RhdGUgPSBLUURSQUlOSU5HOworKwkJCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnEtPmNv bmQpOworKwkJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKysKKysJCQkvKiBNYXJr IGNvbnN1bWVkIHF1ZXVlIGVtcHR5IGFuZCBzaWduYWwgcHJvZHVjZXJzICovCisrCQkJcHRocmVh ZF9tdXRleF9sb2NrKCZvbGRxLT5sb2NrKTsKKysJCQlvbGRxLT5xc3RhdGUgPSBLUUVNUFRZOwor KwkJCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJm9sZHEtPmNvbmQpOworKwkJCXB0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZvbGRxLT5sb2NrKTsKKysJCX0KKysJfSB3aGlsZSAobGVuIC09IEFFU19CTE9D S19TSVpFKTsKKysJYy0+cmlkeCA9IHJpZHg7CisrCXJldHVybiAxOworK30KKysKKytzdGF0aWMg aW50Cisrc3NoX2Flc19jdHJfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1X2NoYXIg KmtleSwgY29uc3QgdV9jaGFyICppdiwKKysgICAgaW50IGVuYykKKyt7CisrCXN0cnVjdCBzc2hf YWVzX2N0cl9jdHhfbXQgKmM7CisrCWludCBpOworKworKwljaGFyICphZXNfdGhyZWFkcyA9IGdl dGVudigiU1NIX0NJUEhFUl9USFJFQURTIik7CisrICAgICAgICBpZiAoYWVzX3RocmVhZHMgIT0g TlVMTCAmJiBzdHJsZW4oYWVzX3RocmVhZHMpICE9IDApCisrCQljaXBoZXJfdGhyZWFkcyA9IGF0 b2koYWVzX3RocmVhZHMpOworKwllbHNlCisrCQljaXBoZXJfdGhyZWFkcyA9IDE7CisrCisrCWlm IChjaXBoZXJfdGhyZWFkcyA8IDEpCisrIAkJY2lwaGVyX3RocmVhZHMgPSAxOworKworKwlpZiAo Y2lwaGVyX3RocmVhZHMgPiBNQVhfVEhSRUFEUykKKysJCWNpcGhlcl90aHJlYWRzID0gTUFYX1RI UkVBRFM7CisrCisrCW51bWtxID0gY2lwaGVyX3RocmVhZHMgKyAxOworKworKwlpZiAobnVta3Eg PiBNQVhfTlVNS1EpCisrCQludW1rcSA9IE1BWF9OVU1LUTsKKysKKysJZGVidWcoIlN0YXJ0aW5n ICVkIHRocmVhZHMgYW5kICVkIHF1ZXVlc1xuIiwgY2lwaGVyX3RocmVhZHMsIG51bWtxKTsKKysK KysJLyogc2V0IHVwIHRoZSBpbml0aWFsIHN0YXRlIG9mIGMgKG91ciBjaXBoZXIgc3RyZWFtIHN0 cnVjdCkgKi8KKysgCWlmICgoYyA9IEVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShjdHgpKSA9 PSBOVUxMKSB7CisrCQljID0geG1hbGxvYyhzaXplb2YoKmMpKTsKKysJCXB0aHJlYWRfcndsb2Nr X2luaXQoJmMtPnRpZF9sb2NrLCBOVUxMKTsKKysjaWZkZWYgX19BUFBMRV9fCisrCQlwdGhyZWFk X3J3bG9ja19pbml0KCZjLT5zdG9wX2xvY2ssIE5VTEwpOworKwkJYy0+ZXhpdF9mbGFnID0gRkFM U0U7CisrI2VuZGlmIC8qIF9fQVBQTEVfXyAqLworKworKwkJYy0+c3RhdGUgPSBIQVZFX05PTkU7 CisrCisrCQkvKiBpbml0aWFsaXplIHRoZSBtdXRleHMgYW5kIGNvbmRpdGlvbnMgZm9yIGVhY2gg bG9jayBpbiBvdXIgc3RydWN0ICovCisrCQlmb3IgKGkgPSAwOyBpIDwgbnVta3E7IGkrKykgewor KwkJCXB0aHJlYWRfbXV0ZXhfaW5pdCgmYy0+cVtpXS5sb2NrLCBOVUxMKTsKKysJCQlwdGhyZWFk X2NvbmRfaW5pdCgmYy0+cVtpXS5jb25kLCBOVUxMKTsKKysJCX0KKysKKysJCS8qIGF0dGFjaCBv dXIgc3RydWN0IHRvIHRoZSBjb250ZXh0ICovCisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2Rh dGEoY3R4LCBjKTsKKysJfQorKworKwkvKiB3ZSBhcmUgaW5pdGlhbGl6aW5nIGJ1dCB0aGUgY3Vy cmVudCBzdHJ1Y3R1cmUgYWxyZWFkeQorKwkgICBoYXMgYW4gSVYgYW5kIGtleSBzbyB3ZSB3YW50 IHRvIGtpbGwgdGhlIGV4aXN0aW5nIGtleSBkYXRhCisrCSAgIGFuZCBzdGFydCBvdmVyLiBUaGlz IGlzIGltcG9ydGFudCB3aGVuIHdlIG5lZWQgdG8gcmVrZXkgdGhlIGRhdGEgc3RyZWFtICovCisr CWlmIChjLT5zdGF0ZSA9PSAoSEFWRV9LRVkgfCBIQVZFX0lWKSkgeworKwkJLyogdGVsbCB0aGUg cHJlZ2VuIHRocmVhZHMgdG8gZXhpdCAqLworKwkJc3RvcF9hbmRfam9pbl9wcmVnZW5fdGhyZWFk cyhjKTsKKysKKysjaWZkZWYgX19BUFBMRV9fCisrCQkvKiByZXNldCB0aGUgZXhpdCBmbGFnICov CisrCQljLT5leGl0X2ZsYWcgPSBGQUxTRTsKKysjZW5kaWYgLyogX19BUFBMRV9fICovCisrCisr CQkvKiBTdGFydCBvdmVyIGdldHRpbmcga2V5ICYgaXYgKi8KKysJCWMtPnN0YXRlID0gSEFWRV9O T05FOworKwl9CisrCisrCS8qIHNldCB0aGUgaW5pdGlhbCBrZXkgZm9yIHRoaXMga2V5IHN0cmVh bSBxdWV1ZSAqLworKwlpZiAoa2V5ICE9IE5VTEwpIHsKKysJCUFFU19zZXRfZW5jcnlwdF9rZXko a2V5LCBFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoKGN0eCkgKiA4LAorKwkJICAgJmMtPmFlc19r ZXkpOworKwkJYy0+b3JpZ19rZXkgPSBrZXk7CisrCQljLT5rZXlsZW4gPSBFVlBfQ0lQSEVSX0NU WF9rZXlfbGVuZ3RoKGN0eCkgKiA4OworKwkJYy0+c3RhdGUgfD0gSEFWRV9LRVk7CisrCX0KKysK KysJLyogc2V0IHRoZSBJViAqLworKwlpZiAoaXYgIT0gTlVMTCkgeworKwkJLyogaW5pdCB0aGUg Y291bnRlciB0aGlzIGlzIGp1c3QgYSAxNmJ5dGUgdWNoYXIgKi8KKysJCW1lbWNweShjLT5hZXNf Y291bnRlciwgaXYsIEFFU19CTE9DS19TSVpFKTsKKysJCWMtPnN0YXRlIHw9IEhBVkVfSVY7Cisr CX0KKysKKysJaWYgKGMtPnN0YXRlID09IChIQVZFX0tFWSB8IEhBVkVfSVYpKSB7CisrCQkvKiBD bGVhciBxdWV1ZXMgKi8KKysJCS8qIHNldCB0aGUgZmlyc3Qga2V5IGluIHRoZSBrZXkgcXVldWUg dG8gdGhlIGN1cnJlbnQgY291bnRlciAqLworKwkJbWVtY3B5KGMtPnFbMF0uY3RyLCBjLT5hZXNf Y291bnRlciwgQUVTX0JMT0NLX1NJWkUpOworKwkJLyogaW5kaWNhdGUgdGhhdCBpdCBuZWVkcyB0 byBiZSBpbml0aWFsaXplZCAqLworKwkJYy0+cVswXS5xc3RhdGUgPSBLUUlOSVQ7CisrCQkvKiBm b3IgZWFjaCBvZiB0aGUgcmVtYWluaW5nIHF1ZXVlcyBzZXQgdGhlIGZpcnN0IGNvdW50ZXIgdG8g dGhlCisrCQkgKiBjb3VudGVyIGFuZCB0aGVuIGFkZCB0aGUgc2l6ZSBvZiB0aGUgcXVldWUgdG8g dGhlIGNvdW50ZXIgKi8KKysJCWZvciAoaSA9IDE7IGkgPCBudW1rcTsgaSsrKSB7CisrCQkJbWVt Y3B5KGMtPnFbaV0uY3RyLCBjLT5hZXNfY291bnRlciwgQUVTX0JMT0NLX1NJWkUpOworKwkJCXNz aF9jdHJfYWRkKGMtPnFbaV0uY3RyLCBpICogS1FMRU4sIEFFU19CTE9DS19TSVpFKTsKKysJCQlj LT5xW2ldLnFzdGF0ZSA9IEtRRU1QVFk7CisrCQl9CisrCQljLT5xaWR4ID0gMDsKKysJCWMtPnJp ZHggPSAwOworKwkJYy0+c3RydWN0X2lkID0gZ2xvYmFsX3N0cnVjdF9pZCsrOworKworKworKwkJ LyogU3RhcnQgdGhyZWFkcyAqLworKyNkZWZpbmUgU1RBQ0tfU0laRSAoMTAyNCAqIDEwMjQpCisr CQlwdGhyZWFkX2F0dHJfdCBhdHRyOworKwkJcHRocmVhZF9hdHRyX2luaXQoJmF0dHIpOworKwkJ cHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0ciwgU1RBQ0tfU0laRSk7CisrCQlmb3IgKGkg PSAwOyBpIDwgY2lwaGVyX3RocmVhZHM7IGkrKykgeworKwkJCXB0aHJlYWRfcndsb2NrX3dybG9j aygmYy0+dGlkX2xvY2spOworKwkJCWlmIChwdGhyZWFkX2NyZWF0ZSgmYy0+dGlkW2ldLCAmYXR0 ciwgdGhyZWFkX2xvb3AsIGMpICE9IDApCisrCQkJCWZhdGFsICgiQUVTLUNUUiBNVCBDb3VsZCBu b3QgY3JlYXRlIHRocmVhZCBpbiAlcyIsIF9fRlVOQ1RJT05fXyk7CisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKnNob3VsZCBkaWUgaGVyZSAqLworKwkJCWVsc2UgeworKwkJCQlj LT5pZFtpXSA9IGk7CisrCQkJCWRlYnVnICgiQUVTLUNUUiBNVCBzcGF3bmVkIGEgdGhyZWFkIHdp dGggaWQgJWx1IGluICVzICglbHUsICVkKSIsCisrCQkJCSAgICAgICBjLT50aWRbaV0sIF9fRlVO Q1RJT05fXywgYy0+c3RydWN0X2lkLCBjLT5pZFtpXSk7CisrCQkJfQorKwkJCXB0aHJlYWRfcnds b2NrX3VubG9jaygmYy0+dGlkX2xvY2spOworKwkJfQorKwkJcHRocmVhZF9tdXRleF9sb2NrKCZj LT5xWzBdLmxvY2spOworKwkJLy8gd2FpdCBmb3IgYWxsIG9mIHRoZSB0aHJlYWRzIHRvIGJlIGlu aXRpYWxpemVkCisrCQl3aGlsZSAoYy0+cVswXS5xc3RhdGUgPT0gS1FJTklUKQorKwkJCXB0aHJl YWRfY29uZF93YWl0KCZjLT5xWzBdLmNvbmQsICZjLT5xWzBdLmxvY2spOworKwkJcHRocmVhZF9t dXRleF91bmxvY2soJmMtPnFbMF0ubG9jayk7CisrCX0KKysJcmV0dXJuIDE7CisrfQorKworK3N0 YXRpYyBpbnQKKytzc2hfYWVzX2N0cl9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjdHgpCisrewor KwlzdHJ1Y3Qgc3NoX2Flc19jdHJfY3R4X210ICpjOworKworKwlpZiAoKGMgPSBFVlBfQ0lQSEVS X0NUWF9nZXRfYXBwX2RhdGEoY3R4KSkgIT0gTlVMTCkgeworKwkJc3RvcF9hbmRfam9pbl9wcmVn ZW5fdGhyZWFkcyhjKTsKKysKKysJCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKysJCWZyZWUo Yyk7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGEoY3R4LCBOVUxMKTsKKysJfQorKwly ZXR1cm4gMTsKKyt9CisrCisrLyogPGZyaWVkbD4gKi8KKytjb25zdCBFVlBfQ0lQSEVSICoKKytl dnBfYWVzX2N0cl9tdCh2b2lkKQorK3sKKysJc3RhdGljIEVWUF9DSVBIRVIgKmFlc19jdHI7Cisr CWFlc19jdHIgPSBFVlBfQ0lQSEVSX21ldGhfbmV3KE5JRF91bmRlZiwgMTYvKmJsb2NrKi8sIDE2 LyprZXkqLyk7CisrCUVWUF9DSVBIRVJfbWV0aF9zZXRfaXZfbGVuZ3RoKGFlc19jdHIsIEFFU19C TE9DS19TSVpFKTsKKysJRVZQX0NJUEhFUl9tZXRoX3NldF9pbml0KGFlc19jdHIsIHNzaF9hZXNf Y3RyX2luaXQpOworKwlFVlBfQ0lQSEVSX21ldGhfc2V0X2NsZWFudXAoYWVzX2N0ciwgc3NoX2Fl c19jdHJfY2xlYW51cCk7CisrCUVWUF9DSVBIRVJfbWV0aF9zZXRfZG9fY2lwaGVyKGFlc19jdHIs IHNzaF9hZXNfY3RyKTsKKysjICBpZm5kZWYgU1NIX09MRF9FVlAKKysJRVZQX0NJUEhFUl9tZXRo X3NldF9mbGFncyhhZXNfY3RyLCBFVlBfQ0lQSF9DQkNfTU9ERQorKwkJCQkgICAgICB8IEVWUF9D SVBIX1ZBUklBQkxFX0xFTkdUSAorKwkJCQkgICAgICB8IEVWUF9DSVBIX0FMV0FZU19DQUxMX0lO SVQKKysJCQkJICAgICAgfCBFVlBfQ0lQSF9DVVNUT01fSVYpOworKyMgIGVuZGlmIC8qU1NIX09M RF9FVlAqLworKwlyZXR1cm4gYWVzX2N0cjsKKyt9CisrI2VuZGlmIC8qIE9TU0wgQ2hlY2sgKi8K K2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhlci1jdHItbXQtZnVuY3Rpb25zLmMg b3BlbnNzaC0xMC4zcDEvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuYworLS0tIG9wZW5zc2gtMTAu M3AxLm9yaWcvY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuM3AxL2NpcGhlci1jdHItbXQtZnVuY3Rpb25z LmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjE5MTg5ODcgKzAyMDAKK0BAIC0wLDAgKzEsNjgyIEBA CisrLyoKKysgKiBPcGVuU1NIIE11bHRpLXRocmVhZGVkIEFFUy1DVFIgQ2lwaGVyIFByb3ZpZGVy IGZvciBPcGVuU1NMIDMKKysgKgorKyAqIEF1dGhvcjogQmVuamFtaW4gQmVubmV0dCA8YmVuQHBz Yy5lZHU+CisrICogQXV0aG9yOiBNaWtlIFRhc290YSA8dGFzb3RhQGdtYWlsLmNvbT4KKysgKiBB dXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+CisrICogQ29weXJpZ2h0IChjKSAy MDA4LTIwMjIgUGl0dHNidXJnaCBTdXBlcmNvbXB1dGluZyBDZW50ZXIuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBCYXNlZCBvbiBvcmlnaW5hbCBPcGVuU1NIIEFFUy1DVFIgY2lwaGVy LiBTbWFsbCBwb3J0aW9ucyByZW1haW4gdW5jaGFuZ2VkLAorKyAqIENvcHlyaWdodCAoYykgMjAw MyBNYXJrdXMgRnJpZWRsIDxtYXJrdXNAb3BlbmJzZC5vcmc+CisrICoKKysgKiBQZXJtaXNzaW9u IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBh bnkKKysgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHBy b3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKysgKgorKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFO VElFUworKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBM SUVEIFdBUlJBTlRJRVMgT0YKKysgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorKyAqIEFOWSBTUEVDSUFMLCBE SVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMK KysgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJ VFMsIFdIRVRIRVIgSU4gQU4KKysgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Ig T1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorKyAqIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisrICovCisr CisrI2luY2x1ZGUgImluY2x1ZGVzLmgiCisrCisrLyogb25seSBmb3Igc3lzdGVtcyB3aXRoIE9T U0wgMyAqLworKyNpZmRlZiBXSVRIX09QRU5TU0wzCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNp bmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSAi eG1hbGxvYy5oIgorKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSAiY2lwaGVyLWN0ci1t dC1mdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAibG9nLmgiCisrCisrLyogZm9yIHByb3ZpZGVyIGVy cm9yIHN0cnVjdCAqLworKyNpbmNsdWRlICJvc3NsMy1wcm92aWRlci1lcnIuaCIKKysjaW5jbHVk ZSAibnVtLmgiCisrCisrLyogbm90ZSByZWdhcmRpbmcgdGhyZWFkcyBhbmQgcXVldWVzICovCisr LyogaW5pdGlhbGx5IHRoaXMgY2lwaGVyIHdhcyB3cml0dGVuIGluIGEgd2F5IHRoYXQKKysgKiB0 aGUga2V5IHN0cmVhbSB3YXMgZ2VuZXJhdGVkIGluIGEgcGVyIGNpcGhlciBibG9jaworKyAqIGxv b3AuIEZvciBleGFtcGxlLCBpZiB0aGUga2V5IHN0cmVhbSBxdWV1ZSBsZW5ndGggd2FzCisrICog MTZrIGFuZCB0aGUgY2lwaGVyIGJsb2NrIHNpemUgd2FzIDE2IGJ5dGVzIGl0IHdvdWxkCisrICog ZmlsbCB0aGUgcXVldWUgMTYgYnl0ZXMgYXQgYSB0aW1lLiBNaXRjaCBEb3JyZWxsIHBvaW50ZWQK KysgKiBvdXQgdGhhdCB3ZSBjb3VsZCBmaWxsIHRoZSBxdWV1ZSBpbiBvbmNlIGNhbGwgZWxpbWlu YXRpbmcKKysgKiBsb29wIGFuZCBtdWx0aXBsZSBjYWxscyB0byBFVlBfRW5jcnlwdFVwZGF0ZS4g RG9pbmcgc28KKysgKiBkcmFtYXRpY2FsbHkgcmVkdWNlZCBDUFUgbG9hZCBpbiB0aGUgdGhyZWFk cyBhbmQgaW5kaWNhdGVkCisrICogdGhhdCB3ZSBjb3VsZCBhbHNvIGVsaW1pbmF0ZSBtb3N0IG9m IHRoZSB0aHJlYWRzIGFuZCBxdWV1ZXMKKysgKiBhcyBpdCB3b3VsZCB0YWtlIGZhciBsZXNzIHRp bWUgZm9yIGEgcXVldWUgdG8gZWJ0ZXIgS1FfRlVMTAorKyAqIHN0YXRlLiBBcyBzdWNoLCB3ZSd2 ZSByZWR1Y2VkIHRoZSBkZWZhdWx0IG51bWJlciBvZiB0aHJlYWRzCisrICogYW5kIHF1ZXVlcyBm cm9tIDIgYW5kIDggKHJlc3BlY3RpdmVseSkgdG8gMSBhbmQgMi4gV2UndmUgYWxzbworKyAqIGVs aW1uYXRlZCB0aGUgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHBoeXNpY2FsIG51bWJlciBvZiBjb3Jl cyBvbgorKyAqIHRoZSBzeXN0ZW0gYW5kLCBpZiB0aGUgdXNlciBkZXNpcmVzLCBjYW4gc3BpbiB1 cCBtb3JlIHRocmVhZHMKKysgKiB1c2luZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gQWRkaXRp b25hbGx5LCBxdWV1ZXMgaXMgbm93IGZpeGVkCisrICogYXQgdGhyZWFkX2NvdW50ICsgMS4KKysg KiBjanIgMTAvMTkvMjAyMiAqLworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0gVFVOQUJMRVMg LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKy8qIE51bWJlciBvZiBwcmVnZW4gdGhyZWFkcyB0byB1 c2UgKi8KKysvKiB0aGlzIGlzIGEgZGVmYXVsdCB2YWx1ZS4gVGhlIGFjdHVhbCBudW1iZXIgaXMK KysgKiBkZXRlcm1pbmVkIGR1cmluZyBpbml0IGFzIGEgZnVuY3Rpb24gb2YgdGhlIG51bWJlcgor KyAqIG9mIGF2YWlsYWJsZSBjb3JlcyAqLworK2ludCBjaXBoZXJfdGhyZWFkcyA9IDE7CisrCisr LyogTnVtYmVyIG9mIGtleXN0cmVhbSBxdWV1ZXMgKi8KKysvKiBpZGVhbGx5IHRoaXMgc2hvdWxk IGJlIGxhcmdlIGVub3VnaCBzbyB0aGF0IHRoZXJlIGlzCisrICogYWx3YXlzIGEga2V5IHF1ZXVl IGZvciBhIHRocmVhZCB0byB3b3JrIG9uCisrICogc28gbWF5YmUgZG91YmxlIG9mIHRoZSBudW1i ZXIgb2YgdGhyZWFkcy4gQWdhaW4gdGhpcworKyAqIGlzIGEgZGVmYXVsdCBhbmQgdGhlIGFjdHVh bCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGluIGluaXQqLworK2ludCBudW1rcSA9IDI7CisrLyotLS0t LS0tLS0tLS0tLS0tLS0tLSBFTkQgVFVOQUJMRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKwor Ky8qIGdsb2JhbHMgKi8KKysvKiBob3cgd2UgaW5jcmVtZW50IHRoZSBpZCB0aGUgc3RydWN0cyB3 ZSBjcmVhdGUgKi8KKytsb25nIHVuc2lnbmVkIGludCBnbG9iYWxfc3RydWN0X2lkID0gMDsKKysK KysvKiBrZWVwIGEgY29weSBvZiB0aGUgcG9pbnRlcnMgY3JlYXRlZCBpbiB0aHJlYWRfbG9vcCB0 byBmcmVlIGxhdGVyICovCisrc3RydWN0IGFlc19tdF9jdHhfcHRycyAqZXZwX3B0cnMgPSBOVUxM OworKworKy8qIHByaXZhdGUgZnVuY3Rpb25zICovCisrCisrLyoKKysgKiBBZGQgbnVtIHRvIGNv dW50ZXIgJ2N0cicKKysgKi8KKytzdGF0aWMgdm9pZAorK3NzaF9jdHJfYWRkKHVfY2hhciAqY3Ry LCB1aW50MzJfdCBudW0sIHVfaW50IGxlbikKKyt7CisrCWludCBpOworKwl1aW50MTZfdCBuOwor KworKwlmb3IgKG4gPSAwLCBpID0gbGVuIC0gMTsgaSA+PSAwICYmIChudW0gfHwgbik7IGktLSkg eworKwkJbiA9IGN0cltpXSArIChudW0gJiAweGZmKSArIG47CisrCQludW0gPj49IDg7CisrCQlj dHJbaV0gPSBuICYgMHhmZjsKKysJCW4gPj49IDg7CisrCX0KKyt9CisrCisrLyoKKysgKiBUaHJl YWRzIG1heSBiZSBjYW5jZWxsZWQgaW4gYSBwdGhyZWFkX2NvbmRfd2FpdCwgd2UgbXVzdCBmcmVl IHRoZSBtdXRleAorKyAqLworK3N0YXRpYyB2b2lkCisrdGhyZWFkX2xvb3BfY2xlYW51cCh2b2lk ICp4KQorK3sKKysJcHRocmVhZF9tdXRleF91bmxvY2soKHB0aHJlYWRfbXV0ZXhfdCAqKXgpOwor K30KKysKKysjaWZkZWYgX19BUFBMRV9fCisrLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIGV4aXQsIHdl IGFyZSBkb2luZyBib3RoIGNhbmNlbCBhbmQgZXhpdCBjb25kaXRpb24KKysgKiBzaW5jZSBvbiBP U1ggdGhyZWFkcyBzZWVtIHRvIG9jY2FzaW9uYWxseSBmYWlsIHRvIG5vdGljZSB3aGVuIHRoZXkg aGF2ZQorKyAqIGJlZW4gY2FuY2VsbGVkLiBXZSB3YW50IHRvIGhhdmUgYSBiYWNrdXAgdG8gbWFr ZSBzdXJlIHRoYXQgd2Ugd29uJ3QgaGFuZworKyAqIHdoZW4gdGhlIG1haW4gcHJvY2VzcyBqb2lu KCktcyB0aGUgY2FuY2VsbGVkIHRocmVhZC4KKysgKi8KKytzdGF0aWMgdm9pZAorK3RocmVhZF9s b29wX2NoZWNrX2V4aXQoc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHgpCisreworKwlp bnQgZXhpdF9mbGFnOworKworKwlwdGhyZWFkX3J3bG9ja19yZGxvY2soJmFlc19tdF9jdHgtPnN0 b3BfbG9jayk7CisrCWV4aXRfZmxhZyA9IGFlc19tdF9jdHgtPmV4aXRfZmxhZzsKKysJcHRocmVh ZF9yd2xvY2tfdW5sb2NrKCZhZXNfbXRfY3R4LT5zdG9wX2xvY2spOworKworKwlpZiAoZXhpdF9m bGFnKQorKwkJcHRocmVhZF9leGl0KE5VTEwpOworK30KKysjZWxzZQorKyMgZGVmaW5lIHRocmVh ZF9sb29wX2NoZWNrX2V4aXQocykKKysjZW5kaWYgLyogX19BUFBMRV9fICovCisrCisrLyoKKysg KiBIZWxwZXIgZnVuY3Rpb24gdG8gdGVybWluYXRlIHRoZSBoZWxwZXIgdGhyZWFkcworKyAqLwor K3N0YXRpYyB2b2lkCisrc3RvcF9hbmRfam9pbl9wcmVnZW5fdGhyZWFkcyhzdHJ1Y3QgYWVzX210 X2N0eF9zdCAqYWVzX210X2N0eCkKKyt7CisrCWludCBpOworKworKyNpZmRlZiBfX0FQUExFX18K KysJLyogbm90aWZ5IHRocmVhZHMgdGhhdCB0aGV5IHNob3VsZCBleGl0ICovCisrCXB0aHJlYWRf cndsb2NrX3dybG9jaygmYWVzX210X2N0eC0+c3RvcF9sb2NrKTsKKysJYWVzX210X2N0eC0+ZXhp dF9mbGFnID0gVFJVRTsKKysJcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZhZXNfbXRfY3R4LT5zdG9w X2xvY2spOworKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKysKKysJLyogQ2FuY2VsIHByZWdlbiB0 aHJlYWRzICovCisrCWZvciAoaSA9IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsgaSsrKSB7CisrCQlk ZWJ1Z19mICgiQ2FuY2VsZWQgJWx1ICglbHUsJWQpIiwgYWVzX210X2N0eC0+dGlkW2ldLCBhZXNf bXRfY3R4LT5zdHJ1Y3RfaWQsCisrCQkgICAgICAgYWVzX210X2N0eC0+aWRbaV0pOworKwkJcHRo cmVhZF9jYW5jZWwoYWVzX210X2N0eC0+dGlkW2ldKTsKKysJfQorKwlmb3IgKGkgPSAwOyBpIDwg Y2lwaGVyX3RocmVhZHM7IGkrKykgeworKwkJaWYgKHB0aHJlYWRfa2lsbChhZXNfbXRfY3R4LT50 aWRbaV0sIDApICE9IDApCisrCQkJZGVidWczKCJBRVMtQ1RSIE1UIHB0aHJlYWRfam9pbiBmYWls dXJlOiBJbnZhbGlkIHRocmVhZCBpZCAlbHUgaW4gJXMiLAorKwkJCSAgICAgICBhZXNfbXRfY3R4 LT50aWRbaV0sIF9fZnVuY19fKTsKKysJCWVsc2UgeworKwkJCWRlYnVnX2YgKCJKb2luaW5nICVs dSAoJWx1LCAlZCkiLCBhZXNfbXRfY3R4LT50aWRbaV0sIGFlc19tdF9jdHgtPnN0cnVjdF9pZCwK KysJCQkJIGFlc19tdF9jdHgtPmlkW2ldKTsKKysJCQlwdGhyZWFkX2pvaW4oYWVzX210X2N0eC0+ dGlkW2ldLCBOVUxMKTsKKysJCQkvKiB0aGlzIGZpbmRzIHRoZSBlbnRyeSBpbiB0aGUgaGFzaCB0 aGF0IGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrCQkJICogdGhyZWFkIGlkLiBUaGF0J3MgdXNlZCB0 byBmaW5kIHRoZSBwb2ludGVyIHRvIHRoZSBjaXBoZXIgc3RydWN0CisrCQkJICogY3JlYXRlZCBp biB0aHJlYWRfbG9vcC4gKi8KKysJCQlzdHJ1Y3QgYWVzX210X2N0eF9wdHJzICpwdHI7CisrCQkJ SEFTSF9GSU5EX0lOVChldnBfcHRycywgJmFlc19tdF9jdHgtPnRpZFtpXSwgcHRyKTsKKysJCQlF VlBfQ0lQSEVSX0NUWF9mcmVlKHB0ci0+cG9pbnRlcik7CisrCQkJSEFTSF9ERUwoZXZwX3B0cnMs IHB0cik7CisrCQkJZnJlZShwdHIpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICB9Cisr CXB0aHJlYWRfcndsb2NrX2Rlc3Ryb3koJmFlc19tdF9jdHgtPnRpZF9sb2NrKTsKKyt9CisrCisr LyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byB1c2UKKysgKiBUZXN0aW5nIGlu ZGljYXRlcyB0aGF0IGluIG1vc3QgYWxsIHNpdHVhdGlvbnMgdGhlIG9wdGltYWwgbnVtYmVyIG9m CisrICogdGhyZWFkcyBpcyAxIG1lYW5pbmcgMSBmb3IgaW5ib3VuZCBhbmQgMSBmb3Igb3V0Ym91 bmQuIFRoZSBvcHRpbWFsCisrICogcXVldWUgY291bnQgaGFzIGFsc28gYmVlbiBkZXRlcm1pbmVk IHRvIGJlIHRocmVhZF9jb3VudCArIDEuCisrICogbm90ZSB0aGlzIGZ1bmN0aW9uIHVwZGF0ZXMg dHdvIGdsb2JhbHMgLSBudW1rcSBhbmQgY2lwaGVyX3RocmVhZHMKKysgKiBpdCByZXR1cm5zIHRo ZSB2YWx1ZSBvZiBjaXBoZXJfdGhyZWFkcyBidXQgaXQgZG9lc24ndCBuZWVkIHRvICovCisrc3Rh dGljIGludCBnZXRfdGhyZWFkX2NvdW50KCkgeworKworKwljaGFyICogYWVzX3RocmVhZHMgPSBn ZXRlbnYoIlNTSF9DSVBIRVJfVEhSRUFEUyIpOworKwlkZWJ1Z19mICgiU1NIIHRocmVhZCBjb3Vu dCBpcyAlcyIsIGFlc190aHJlYWRzKTsKKysgICAgICAgIGlmIChhZXNfdGhyZWFkcyAhPSBOVUxM ICYmIHN0cmxlbihhZXNfdGhyZWFkcykgIT0gMCkKKysJCWNpcGhlcl90aHJlYWRzID0gYXRvaShh ZXNfdGhyZWFkcyk7CisrCWVsc2UKKysJCWNpcGhlcl90aHJlYWRzID0gMTsKKysKKysJaWYgKGNp cGhlcl90aHJlYWRzIDwgMSkKKysgCQljaXBoZXJfdGhyZWFkcyA9IDE7CisrCisrCWlmIChjaXBo ZXJfdGhyZWFkcyA+IE1BWF9USFJFQURTKQorKwkJY2lwaGVyX3RocmVhZHMgPSBNQVhfVEhSRUFE UzsKKysKKysJbnVta3EgPSBjaXBoZXJfdGhyZWFkcyArIDE7CisrCisrCWlmIChudW1rcSA+IE1B WF9OVU1LUSkKKysJCW51bWtxID0gTUFYX05VTUtROworKworKwlkZWJ1Z19mICgiU3RhcnRpbmcg JWQgdGhyZWFkcyBhbmQgJWQgcXVldWVzXG4iLCBjaXBoZXJfdGhyZWFkcywgbnVta3EpOworKwor KwlyZXR1cm4gKGNpcGhlcl90aHJlYWRzKTsKKyt9CisrCisrCisrLyoKKysgKiBUaGUgbGlmZSBv ZiBhIHByZWdlbiB0aHJlYWQ6CisrICogICAgRmluZCBlbXB0eSBrZXlzdHJlYW0gcXVldWVzIGFu ZCBmaWxsIHRoZW0gdXNpbmcgdGhlaXIgY291bnRlci4KKysgKiAgICBXaGVuIGRvbmUsIHVwZGF0 ZSBjb3VudGVyIGZvciB0aGUgbmV4dCBmaWxsLgorKyAqLworK3N0YXRpYyB2b2lkICoKKyt0aHJl YWRfbG9vcCh2b2lkICpqb2IpCisreworKwlFVlBfQ0lQSEVSX0NUWCAqIHZvbGF0aWxlIGV2cF9j dHg7CisrCXN0cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4ID0gam9iOworKwlzdHJ1Y3Qg a3EgKnE7CisrCXN0cnVjdCBhZXNfbXRfY3R4X3B0cnMgKnB0cjsKKysJcHRocmVhZF90IGZpcnN0 X3RpZDsKKysJaW50IG91dGxlbjsKKysJdV9jaGFyIG15bnVsbFtLUUxFTiAqIEFFU19CTE9DS19T SVpFXTsKKysJbWVtc2V0KCZteW51bGwsIDAsIEtRTEVOICogQUVTX0JMT0NLX1NJWkUpOworKwor KwkvKiBnZXQgdGhlIHRocmVhZCBpZCB0byBzZWUgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgb25lICov CisrCXB0aHJlYWRfcndsb2NrX3JkbG9jaygmYWVzX210X2N0eC0+dGlkX2xvY2spOworKwlmaXJz dF90aWQgPSBhZXNfbXRfY3R4LT50aWRbMF07CisrCXB0aHJlYWRfcndsb2NrX3VubG9jaygmYWVz X210X2N0eC0+dGlkX2xvY2spOworKworKwkvKiBjcmVhdGUgdGhlIGNvbnRleHQgZm9yIHRoaXMg dGhyZWFkICovCisrCWV2cF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9uZXcoKTsKKysKKysJLyoga2Vl cCB0cmFjayBvZiB0aGUgcG9pbnRlciBmb3IgdGhlIGV2cCBpbiB0aGlzIHN0cnVjdAorKwkgKiBz byB3ZSBjYW4gZnJlZSBpdCBsYXRlci4gU28gd2UgcGxhY2UgaXQgaW4gYSBoYXNoIGluZGV4ZWQg b24gdGhlCisrCSAqIHRocmVhZCBpZCwgd2hpY2ggaXMgYXZhaWxhYmxlIHRvIHVzIGluIHRoZSBm cmVlIGZ1bmN0aW9uLgorKwkgKiBOb3RlLCB0aGUgdGhyZWFkIGlkIGlzbid0IG5lY2Vzc2FyeSB1 bmlxdWUgYWNyb3NzIHJla2V5cyBidXQKKysJICogdGhhdCdzIG9rYXkgYXMgdGhleSBhcmUgdW5p cXVlIGR1cmluZyBhIGtleS4gKi8KKysJcHRyID0gbWFsbG9jKHNpemVvZiAqcHRyKTsgLypmcmVl ZCBpbiBzdG9wICYgcHJlam9pbiAqLworKwlwdHItPnRpZCA9IHB0aHJlYWRfc2VsZigpOyAvKiBp bmRleCBmb3IgaGFzaCAqLworKwlwdHItPnBvaW50ZXIgPSBldnBfY3R4OworKwlIQVNIX0FERF9J TlQoZXZwX3B0cnMsIHRpZCwgcHRyKTsKKysKKysJLyogaW5pdGlhbGl6ZSB0aGUgY2lwaGVyIGN0 eCB3aXRoIHRoZSBrZXkgcHJvdmlkZWQKKysJICogZGV0ZXJtaW5iZSB3aGljaCBjaXBoZXIgdG8g dXNlIGJhc2VkIG9uIHRoZSBrZXkgc2l6ZSAqLworKwlpZiAoYWVzX210X2N0eC0+a2V5bGVuID09 IDI1NikKKysJCUVWUF9FbmNyeXB0SW5pdF9leChldnBfY3R4LCBFVlBfYWVzXzI1Nl9jdHIoKSwg TlVMTCwgYWVzX210X2N0eC0+b3JpZ19rZXksIE5VTEwpOworKwllbHNlIGlmIChhZXNfbXRfY3R4 LT5rZXlsZW4gPT0gMTI4KQorKwkJRVZQX0VuY3J5cHRJbml0X2V4KGV2cF9jdHgsIEVWUF9hZXNf MTI4X2N0cigpLCBOVUxMLCBhZXNfbXRfY3R4LT5vcmlnX2tleSwgTlVMTCk7CisrCWVsc2UgaWYg KGFlc19tdF9jdHgtPmtleWxlbiA9PSAxOTIpCisrCQlFVlBfRW5jcnlwdEluaXRfZXgoZXZwX2N0 eCwgRVZQX2Flc18xOTJfY3RyKCksIE5VTEwsIGFlc19tdF9jdHgtPm9yaWdfa2V5LCBOVUxMKTsK KysJZWxzZQorKwkJZmF0YWwoIkludmFsaWQga2V5IGxlbmd0aCBvZiAlZCBpbiBBRVMgQ1RSIE1U LiBFeGl0aW5nIiwgYWVzX210X2N0eC0+a2V5bGVuKTsKKysKKysJLyoKKysJICogSGFuZGxlIHRo ZSBzcGVjaWFsIGNhc2Ugb2Ygc3RhcnR1cCwgb25lIHRocmVhZCBtdXN0IGZpbGwKKysJICogdGhl IGZpcnN0IEtRIHRoZW4gbWFyayBpdCBhcyBkcmFpbmluZy4gTG9jayBoZWxkIHRocm91Z2hvdXQu CisrCSAqLworKwlpZiAocHRocmVhZF9lcXVhbChwdGhyZWFkX3NlbGYoKSwgZmlyc3RfdGlkKSkg eworKwkJLyogZ2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBrZXkgcXVldWUgc3RydWN0ICov CisrCQlxID0gJmFlc19tdF9jdHgtPnFbMF07CisrCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxv Y2spOworKwkJLyogaWYgd2UgYXJlIGluIHRoZSBJTklUIHN0YXRlIHRoZW4gZmlsbCB0aGUgcXVl dWUgKi8KKysJCWlmIChxLT5xc3RhdGUgPT0gS1FJTklUKSB7CisrCQkJLyogc2V0IHRoZSBpbml0 aWFsIGNvdW50ZXIgKi8KKysJCQlFVlBfRW5jcnlwdEluaXRfZXgoZXZwX2N0eCwgTlVMTCwgTlVM TCwgTlVMTCwgcS0+Y3RyKTsKKysJCQkvKiBlbmN5cGhlciBhIGJsb2NrIHNpemVkIG51bGwgc3Ry aW5nIChteW51bGwpIHdpdGggdGhlIGtleS4gVGhpcworKwkJCSAqIHJldHVybnMgdGhlIGtleXN0 cmVhbSBiZWNhdXNlIHhvcmluZyB0aGUga2V5c3RyZWFtCisrCQkJICogYWdhaW5zdCBudWxsIHJl dHVybnMgdGhlIGtleXN0cmVhbS4gU3RvcmUgdGhhdCBpbiB0aGUgYXBwcm9wcmlhdGUgcXVldWUg Ki8KKysJCQlFVlBfRW5jcnlwdFVwZGF0ZShldnBfY3R4LCBxLT5rZXlzWzBdLCAmb3V0bGVuLCBt eW51bGwsIEtRTEVOICogQUVTX0JMT0NLX1NJWkUpOworKwkJCS8qIFVwZGF0ZSB0aGUgYWVzIGNv dW50ZXIgKi8KKysJCQlzc2hfY3RyX2FkZChxLT5jdHIsIEtRTEVOICogbnVta3EsIEFFU19CTE9D S19TSVpFKTsKKysJCQkvKiBzaW5jZSB0aGlzIGlzIHRoZSBmaXJzdCB0aHJlYWQgc2V0IGl0IHRv IGRyYWluaW5nICovCisrCQkJcS0+cXN0YXRlID0gS1FEUkFJTklORzsKKysJCQlwdGhyZWFkX2Nv bmRfYnJvYWRjYXN0KCZxLT5jb25kKTsKKysJCX0KKysJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZx LT5sb2NrKTsKKysJfQorKworKwkvKgorKwkgKiBOb3JtYWwgY2FzZSBpcyB0byBmaW5kIGVtcHR5 IHF1ZXVlcyBhbmQgZmlsbCB0aGVtLCBza2lwcGluZyBvdmVyCisrCSAqIHF1ZXVlcyBhbHJlYWR5 IGZpbGxlZCBieSBvdGhlciB0aHJlYWRzIGFuZCBzdG9wcGluZyB0byB3YWl0IGZvcgorKwkgKiBh IGRyYWluaW5nIHF1ZXVlIHRvIGJlY29tZSBlbXB0eS4KKysJICoKKysJICogTXVsdGlwbGUgdGhy ZWFkcyBtYXkgYmUgd2FpdGluZyBvbiBhIGRyYWluaW5nIHF1ZXVlIGFuZCBhd29rZW4KKysJICog d2hlbiBlbXB0eS4gVGhlIGZpcnN0IHRocmVhZCB0byB3YWtlIHdpbGwgbWFyayBpdCBhcyBmaWxs aW5nLAorKwkgKiBvdGhlcnMgd2lsbCBtb3ZlIG9uIHRvIGZpbGwsIHNraXAsIG9yIHdhaXQgb24g dGhlIG5leHQgcXVldWUuCisrCSAqIFdlIGluaXQgcWlkeCBoZXJlIGJlY2F1c2UgaWYgd2UgZG8g aXQgYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24KKysJICogd2UgZ2V0IGEgd2FybmluZyBhYm91 dCBpdCBwb3NzaWJseSBiZWluZyBjbG9iYmVyZWQuIFRoZSBleGFjdCByZWFzb24KKysJICogZG9l c24ndCBtYWtlIGEgbG90IG9mIHNlbnNlIGJ1dCBpdCBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQor KwkgKiBmaXJzdCBwdGhyZWFkX3J3bG9ja19yZGxvY2soKS4gTWlnaHQgaGF2ZSBzb21ldGhpbmcg dG8gZG8gd2l0aAorKwkgKiBpbmNvcnJlY3QgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4KKysJICov CisrCWludCBxaWR4OworKwlmb3IgKHFpZHggPSAxOzsgcWlkeCA9IChxaWR4ICsgMSkgJSBudW1r cSkgeworKwkJLyogQ2hlY2sgaWYgSSB3YXMgY2FuY2VsbGVkLCBhbHNvIGNoZWNrZWQgaW4gY29u ZF93YWl0ICovCisrCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKKysKKysJCS8qIENoZWNrIGlmIHdl IHNob3VsZCBleGl0IGFzIHdlbGwgKi8KKysJCXRocmVhZF9sb29wX2NoZWNrX2V4aXQoYWVzX210 X2N0eCk7CisrCisrCQkvKiBMb2NrIHF1ZXVlIGFuZCBibG9jayBpZiBpdHMgZHJhaW5pbmcgKi8K KysJCXEgPSAmYWVzX210X2N0eC0+cVtxaWR4XTsKKysJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+ bG9jayk7CisrCQlwdGhyZWFkX2NsZWFudXBfcHVzaCh0aHJlYWRfbG9vcF9jbGVhbnVwLCAmcS0+ bG9jayk7CisrCQl3aGlsZSAocS0+cXN0YXRlID09IEtRRFJBSU5JTkcgfHwgcS0+cXN0YXRlID09 IEtRSU5JVCkgeworKwkJCXRocmVhZF9sb29wX2NoZWNrX2V4aXQoYWVzX210X2N0eCk7CisrCQkJ cHRocmVhZF9jb25kX3dhaXQoJnEtPmNvbmQsICZxLT5sb2NrKTsKKysJCX0KKysJCXB0aHJlYWRf Y2xlYW51cF9wb3AoMCk7CisrCisrCQkvKiBJZiBmaWxsaW5nIG9yIGZ1bGwsIHNvbWVib2R5IGVs c2UgZ290IGl0LCBza2lwICovCisrCQlpZiAocS0+cXN0YXRlICE9IEtRRU1QVFkpIHsKKysJCQlw dGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7CisrCQkJY29udGludWU7CisrCQl9CisrCisr CQkvKgorKwkJICogRW1wdHksIGxldCdzIGZpbGwgaXQuCisrCQkgKiBRdWV1ZSBsb2NrIGlzIHJl bGlucXVpc2hlZCB3aGlsZSB3ZSBkbyB0aGlzIHNvIG90aGVycworKwkJICogY2FuIHNlZSB0aGF0 IGl0J3MgYmVpbmcgZmlsbGVkLgorKwkJICovCisrCQlxLT5xc3RhdGUgPSBLUUZJTExJTkc7Cisr CQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5jb25kKTsKKysJCXB0aHJlYWRfbXV0ZXhfdW5s b2NrKCZxLT5sb2NrKTsKKysKKysJCS8qIHNldCB0aGUgaW5pdGlhbCBjb3VudGVyICovCisrCQlF VlBfRW5jcnlwdEluaXRfZXgoZXZwX2N0eCwgTlVMTCwgTlVMTCwgTlVMTCwgcS0+Y3RyKTsKKysK KysJCS8qIHNlZSBjb3Jlc3BvbmRpbmcgYmxvY2sgYWJvdmUgZm9yIHVzZWZ1bCBjb21tZW50cyAq LworKwkJRVZQX0VuY3J5cHRVcGRhdGUoZXZwX2N0eCwgcS0+a2V5c1swXSwgJm91dGxlbiwgbXlu dWxsLCBLUUxFTiAqIEFFU19CTE9DS19TSVpFKTsKKysKKysJCS8qIFJlLWxvY2ssIG1hcmsgZnVs bCBhbmQgc2lnbmFsIGNvbnN1bWVyICovCisrCQlwdGhyZWFkX211dGV4X2xvY2soJnEtPmxvY2sp OworKwkJc3NoX2N0cl9hZGQocS0+Y3RyLCBLUUxFTiAqIG51bWtxLCBBRVNfQkxPQ0tfU0laRSk7 CisrCQlxLT5xc3RhdGUgPSBLUUZVTEw7CisrCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZxLT5j b25kKTsKKysJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZxLT5sb2NrKTsKKysJfQorKworKwlyZXR1 cm4gTlVMTDsKKyt9CisrCisrCisrLyogT3VyIHZlcnNpb24gb2YgdGhlIEVWUCBmdW5jdGlvbnMK KysgKiB0aGVzZSBhcmUgcHVibGljIGFzIHRoZXkgYXJlIHVzZWQgYnkgdGhlIHByb3ZpZGVyICov CisrCisrLyogaW5zdGFudGlhdGUgdGhlIGNpcGhlciBjb250ZXh0LgorKyAqIGluIHRoaXMgd2Ug Y3JlYXRlIHRoZSBFVlAgY3R4IGFuZCB0aGUgQUVTIGN0eCwgc2V0dXAgdGhlIEFFUyBjdHgKKysg KiBpbml0aWFsaXplIHRoZSBFVlAgYW5kIHRoZW4gYXR0YWNoIHRoZSBBRVMgY3R4IHRvIHRoZSBF VlAgY3R4LgorKyAqIFRoZSAqb25seSogZGlmZmVyZW5jZSBiZXR3ZWVuIGFlc19tdF9uZXdjdHhf MjU2fDE5MnwxMjggaXMgdGhlCisrICoga2V5bGVuZ3RoIG9mIHRoZSBjaXBoZXIgdXNlZCBpbiBF VlBfQ2lwaGVySW5pdAorKyAqIHBhcmFtZXRlcnM6IHByb3ZpZGVyIGNvbnRleHQKKysgKiByZXR1 cm5zOiBFVlAgY29udGV4dAorKyAqLworKy8qIGhvbmVzdGx5IHRoZSB3YXkgdGhpcyB3b3JrcyBt YWtlcyBtZSB0aGluayB0aGF0IHRoZXJlIGhhcyB0byBiZQorKyAqIGEgYmV0dGVyIHdheSBvZiBk b2luZyB0aGlzIGhvd2V2ZXIsIEkndmUgeWV0IHRvIGZpbmQgb25lIHRoYXQgZG9lc24ndAorKyAq IGludm9sdmUgbW9yZSBtYWRuZXNzLiBJIHRoaW5rIHRoYXQncyBtb3N0bHkgYmVjYXNlIEkgZG9u J3QgdW5kZXJzdGFuZAorKyAqIGhvdyBwYXJhbXMgd29yayBwcm9wZXJseS4gSSBmZWVsIGxpa2Ug SSBzaG91ZGwgYmUgYWJsZSB0byB1c2UgdGhlbQorKyAqIHRvIHNwZWNpZnkgdGhlIGtleSBsZW5n dGggYnV0Li4uIGFsc28sIEknZCB0aGluayBJJ2QgYmUgYWJsZSB0bworKyAqIHNldCBhZXNfbXRf Y3R4X3N0LT5rZXlsZW4gdG8gdGhlIGtleWxlbmd0aCBidXQgdGhhdCBkb2Vzbid0IHNlZW0gdG8K KysgKiB3b3JrIGVpdGhlci4gVGhhdCBzYWlkLCB0aGlzIGRvZXMgd29yayBldmVuIGlmIGl0J3Mg YSBiaXQgY2x1bmt5LgorKyAqIC1janIgMDkvMDgvMjAyMiAqLworK3ZvaWQgKmFlc19tdF9uZXdj dHhfMjU2KHZvaWQgKnByb3ZjdHgpCisreworKwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVzX210 X2N0eCA9IG1hbGxvYyhzaXplb2YoKmFlc19tdF9jdHgpKTsKKysJRVZQX0NJUEhFUl9DVFggKmV2 cF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9uZXcoKTsKKysKKysJaWYgKChhZXNfbXRfY3R4ICE9IE5V TEwpICYmIChldnBfY3R4ICE9IE5VTEwpKSB7CisrCQlnZXRfdGhyZWFkX2NvdW50KCk7IC8qIHVw ZGF0ZSBjaXBoZXJfdGhyZWFkcyBhbmQgbnVta3EgKi8KKysJCXB0aHJlYWRfcndsb2NrX2luaXQo JmFlc19tdF9jdHgtPnRpZF9sb2NrLCBOVUxMKTsKKysjaWZkZWYgX19BUFBMRV9fCisrCQlwdGhy ZWFkX3J3bG9ja19pbml0KCZhZXNfbXRfY3R4LT5zdG9wX2xvY2ssIE5VTEwpOworKwkJYWVzX210 X2N0eC0+ZXhpdF9mbGFnID0gRkFMU0U7CisrI2VuZGlmIC8qIF9fQVBQTEVfXyAqLworKworKwkJ YWVzX210X2N0eC0+c3RhdGUgPSBIQVZFX05PTkU7CisrCisrCQkvKiBpbml0aWFsaXplIHRoZSBt dXRleHMgYW5kIGNvbmRpdGlvbnMgZm9yIGVhY2ggbG9jayBpbiBvdXIgc3RydWN0ICovCisrCQlm b3IgKGludCBpID0gMDsgaSA8IG51bWtxOyBpKyspIHsKKysJCQlwdGhyZWFkX211dGV4X2luaXQo JmFlc19tdF9jdHgtPnFbaV0ubG9jaywgTlVMTCk7CisrCQkJcHRocmVhZF9jb25kX2luaXQoJmFl c19tdF9jdHgtPnFbaV0uY29uZCwgTlVMTCk7CisrCQl9CisrCQlhZXNfbXRfY3R4LT5wcm92Y3R4 ID0gcHJvdmN0eDsKKysJCUVWUF9DaXBoZXJJbml0KGV2cF9jdHgsIEVWUF9hZXNfMjU2X2N0cigp LCBOVUxMLCBOVUxMLCAwKTsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9hcHBfZGF0YShldnBfY3R4 LCBhZXNfbXRfY3R4KTsKKysJCXJldHVybiBldnBfY3R4OworKwl9CisrCXJldHVybiBOVUxMOwor K30KKysKKyt2b2lkICphZXNfbXRfbmV3Y3R4XzE5Mih2b2lkICpwcm92Y3R4KQorK3sKKysJc3Ry dWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHggPSBtYWxsb2Moc2l6ZW9mKCphZXNfbXRfY3R4 KSk7CisrCUVWUF9DSVBIRVJfQ1RYICpldnBfY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7Cisr CisrCWlmICgoYWVzX210X2N0eCAhPSBOVUxMKSAmJiAoZXZwX2N0eCAhPSBOVUxMKSkgeworKwkJ Z2V0X3RocmVhZF9jb3VudCgpOyAvKiB1cGRhdGUgY2lwaGVyX3RocmVhZHMgYW5kIG51bWtxICov CisrCQlwdGhyZWFkX3J3bG9ja19pbml0KCZhZXNfbXRfY3R4LT50aWRfbG9jaywgTlVMTCk7Cisr I2lmZGVmIF9fQVBQTEVfXworKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYWVzX210X2N0eC0+c3Rv cF9sb2NrLCBOVUxMKTsKKysJCWFlc19tdF9jdHgtPmV4aXRfZmxhZyA9IEZBTFNFOworKyNlbmRp ZiAvKiBfX0FQUExFX18gKi8KKysKKysJCWFlc19tdF9jdHgtPnN0YXRlID0gSEFWRV9OT05FOwor KworKwkJLyogaW5pdGlhbGl6ZSB0aGUgbXV0ZXhzIGFuZCBjb25kaXRpb25zIGZvciBlYWNoIGxv Y2sgaW4gb3VyIHN0cnVjdCAqLworKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1rcTsgaSsrKSB7 CisrCQkJcHRocmVhZF9tdXRleF9pbml0KCZhZXNfbXRfY3R4LT5xW2ldLmxvY2ssIE5VTEwpOwor KwkJCXB0aHJlYWRfY29uZF9pbml0KCZhZXNfbXRfY3R4LT5xW2ldLmNvbmQsIE5VTEwpOworKwkJ fQorKwkJYWVzX210X2N0eC0+cHJvdmN0eCA9IHByb3ZjdHg7CisrCQlFVlBfQ2lwaGVySW5pdChl dnBfY3R4LCBFVlBfYWVzXzE5Ml9jdHIoKSwgTlVMTCwgTlVMTCwgMCk7CisrCQlFVlBfQ0lQSEVS X0NUWF9zZXRfYXBwX2RhdGEoZXZwX2N0eCwgYWVzX210X2N0eCk7CisrCQlyZXR1cm4gZXZwX2N0 eDsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZCAqYWVzX210X25ld2N0eF8xMjgo dm9pZCAqcHJvdmN0eCkKKyt7CisrCXN0cnVjdCBhZXNfbXRfY3R4X3N0ICphZXNfbXRfY3R4ID0g bWFsbG9jKHNpemVvZigqYWVzX210X2N0eCkpOworKwlFVlBfQ0lQSEVSX0NUWCAqZXZwX2N0eCA9 IEVWUF9DSVBIRVJfQ1RYX25ldygpOworKworKwlpZiAoKGFlc19tdF9jdHggIT0gTlVMTCkgJiYg KGV2cF9jdHggIT0gTlVMTCkpIHsKKysJCWdldF90aHJlYWRfY291bnQoKTsgLyogdXBkYXRlIGNp cGhlcl90aHJlYWRzIGFuZCBudW1rcSAqLworKwkJcHRocmVhZF9yd2xvY2tfaW5pdCgmYWVzX210 X2N0eC0+dGlkX2xvY2ssIE5VTEwpOworKyNpZmRlZiBfX0FQUExFX18KKysJCXB0aHJlYWRfcnds b2NrX2luaXQoJmFlc19tdF9jdHgtPnN0b3BfbG9jaywgTlVMTCk7CisrCQlhZXNfbXRfY3R4LT5l eGl0X2ZsYWcgPSBGQUxTRTsKKysjZW5kaWYgLyogX19BUFBMRV9fICovCisrCisrCQlhZXNfbXRf Y3R4LT5zdGF0ZSA9IEhBVkVfTk9ORTsKKysKKysJCS8qIGluaXRpYWxpemUgdGhlIG11dGV4cyBh bmQgY29uZGl0aW9ucyBmb3IgZWFjaCBsb2NrIGluIG91ciBzdHJ1Y3QgKi8KKysJCWZvciAoaW50 IGkgPSAwOyBpIDwgbnVta3E7IGkrKykgeworKwkJCXB0aHJlYWRfbXV0ZXhfaW5pdCgmYWVzX210 X2N0eC0+cVtpXS5sb2NrLCBOVUxMKTsKKysJCQlwdGhyZWFkX2NvbmRfaW5pdCgmYWVzX210X2N0 eC0+cVtpXS5jb25kLCBOVUxMKTsKKysJCX0KKysJCWFlc19tdF9jdHgtPnByb3ZjdHggPSBwcm92 Y3R4OworKwkJRVZQX0NpcGhlckluaXQoZXZwX2N0eCwgRVZQX2Flc18xMjhfY3RyKCksIE5VTEws IE5VTEwsIDApOworKwkJRVZQX0NJUEhFUl9DVFhfc2V0X2FwcF9kYXRhKGV2cF9jdHgsIGFlc19t dF9jdHgpOworKwkJcmV0dXJuIGV2cF9jdHg7CisrCX0KKysJcmV0dXJuIE5VTEw7CisrfQorKwor Ky8qIHRoaXMgZnVuY3Rpb24gZXhwZWN0cyBhIHZvaWQgYnV0IHdlIG5lZWQgdGhlIGFjdHVhbCBj b250ZXh0CisrICogdG8gZ2V0IHRoZSBhcHBfZGF0YS4KKysgKi8KKyt2b2lkIGFlc19tdF9mcmVl Y3R4KHZvaWQgKnZldnBfY3R4KQorK3sKKysJRVZQX0NJUEhFUl9DVFggKmV2cF9jdHggPSB2ZXZw X2N0eDsKKysJc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHg7CisrCisrCWlmICgoYWVz X210X2N0eCA9IEVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShldnBfY3R4KSkgIT0gTlVMTCkg eworKwkJc3RvcF9hbmRfam9pbl9wcmVnZW5fdGhyZWFkcyhhZXNfbXRfY3R4KTsKKysKKysJCW1l bXNldChhZXNfbXRfY3R4LCAwLCBzaXplb2YoKmFlc19tdF9jdHgpKTsKKysJCWZyZWUoYWVzX210 X2N0eCk7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGEoZXZwX2N0eCwgTlVMTCk7Cisr CX0KKysJRVZQX0NJUEhFUl9DVFhfZnJlZShldnBfY3R4KTsKKyt9CisrCisrLyogdGhpcyBmdW5j dGlvbiB0YWtlcyB0aGUgRVZQIGNvbnRleHQsIGdldHMgdGhlIEFFUyBjb250ZXh0CisrICogYW5k IHN0YXJ0cyB0aGUgdmFyaW91cyB0aHJlYWRzIHdlIG5lZWQgKi8KKytpbnQgYWVzX210X3N0YXJ0 X3RocmVhZHModm9pZCAqdmV2cF9jdHgsIGNvbnN0IHVfY2hhciAqa2V5LAorKwkJCSBzaXplX3Qg a2V5bGVuLCBjb25zdCB1X2NoYXIgKml2LAorKwkJCSBzaXplX3QgaXZsZW4sIGNvbnN0IE9TU0xf UEFSQU0gKm9zc2xfcGFyYW1zKQorK3sKKysJRVZQX0NJUEhFUl9DVFggKmV2cF9jdHggPSB2ZXZw X2N0eDsKKysJc3RydWN0IGFlc19tdF9jdHhfc3QgKmFlc19tdF9jdHg7CisrCisrCisrCS8qIGdl dCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhZXNfbXRfY3R4IChvdXIgY2lwaGVyIHN0cmVhbSBzdHJ1 Y3QpICovCisrIAlpZiAoKGFlc19tdF9jdHggPSBFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEo ZXZwX2N0eCkpID09IE5VTEwpIHsKKysJCWZhdGFsKCJNaXNzaW5nIEFFUyBNVCBjb250ZXh0IGRh dGEhIik7CisrCX0KKysKKysJLyogd2UgYXJlIGluaXRpYWxpemluZyBidXQgdGhlIGN1cnJlbnQg c3RydWN0dXJlIGFscmVhZHkKKysJICogaGFzIGFuIElWIGFuZCBrZXkgc28gd2Ugd2FudCB0byBr aWxsIHRoZSBleGlzdGluZyBrZXkgZGF0YQorKwkgKiBhbmQgc3RhcnQgb3Zlci4gVGhpcyBpcyBp bXBvcnRhbnQgd2hlbiB3ZSBuZWVkIHRvIHJla2V5IHRoZSBkYXRhIHN0cmVhbSAqLworKwlpZiAo YWVzX210X2N0eC0+c3RhdGUgPT0gKEhBVkVfS0VZIHwgSEFWRV9JVikpIHsKKysJCS8qIHRlbGwg dGhlIHByZWdlbiB0aHJlYWRzIHRvIGV4aXQgKi8KKysJCXN0b3BfYW5kX2pvaW5fcHJlZ2VuX3Ro cmVhZHMoYWVzX210X2N0eCk7CisrCisrI2lmZGVmIF9fQVBQTEVfXworKwkJLyogcmVzZXQgdGhl IGV4aXQgZmxhZyAqLworKwkJYWVzX210X2N0eC0+ZXhpdF9mbGFnID0gRkFMU0U7CisrI2VuZGlm IC8qIF9fQVBQTEVfXyAqLworKworKwkJLyogU3RhcnQgb3ZlciBnZXR0aW5nIGtleSAmIGl2ICov CisrCQlhZXNfbXRfY3R4LT5zdGF0ZSA9IEhBVkVfTk9ORTsKKysJfQorKworKwkvKiBzZXQgdGhl IGluaXRpYWwga2V5IGZvciB0aGlzIGtleSBzdHJlYW0gcXVldWUgKi8KKysJaWYgKGtleSAhPSBO VUxMKSB7CisrCQlhZXNfbXRfY3R4LT5rZXlsZW4gPSBFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3Ro KGV2cF9jdHgpICogODsKKysJCWFlc19tdF9jdHgtPm9yaWdfa2V5ID0ga2V5OworKwkJYWVzX210 X2N0eC0+c3RhdGUgfD0gSEFWRV9LRVk7CisrCX0KKysKKysJLyogc2V0IHRoZSBJViAqLworKwlp ZiAoaXYgIT0gTlVMTCkgeworKwkJLyogaW5pdCB0aGUgY291bnRlciB0aGlzIGlzIGp1c3QgYSAx NmJ5dGUgdWNoYXIgKi8KKysJCW1lbWNweShhZXNfbXRfY3R4LT5hZXNfY291bnRlciwgaXYsIEFF U19CTE9DS19TSVpFKTsKKysJCWFlc19tdF9jdHgtPnN0YXRlIHw9IEhBVkVfSVY7CisrCX0KKysK KysJaWYgKGFlc19tdF9jdHgtPnN0YXRlID09IChIQVZFX0tFWSB8IEhBVkVfSVYpKSB7CisrCQkv KiBDbGVhciBxdWV1ZXMgKi8KKysJCS8qIHNldCB0aGUgZmlyc3Qga2V5IGluIHRoZSBrZXkgcXVl dWUgdG8gdGhlIGN1cnJlbnQgY291bnRlciAqLworKwkJbWVtY3B5KGFlc19tdF9jdHgtPnFbMF0u Y3RyLCBhZXNfbXRfY3R4LT5hZXNfY291bnRlciwgQUVTX0JMT0NLX1NJWkUpOworKwkJLyogaW5k aWNhdGUgdGhhdCBpdCBuZWVkcyB0byBiZSBpbml0aWFsaXplZCAqLworKwkJYWVzX210X2N0eC0+ cVswXS5xc3RhdGUgPSBLUUlOSVQ7CisrCQkvKiBmb3IgZWFjaCBvZiB0aGUgcmVtYWluaW5nIHF1 ZXVlcyBzZXQgdGhlIGZpcnN0IGNvdW50ZXIgdG8gdGhlCisrCQkgKiBjb3VudGVyIGFuZCB0aGVu IGFkZCB0aGUgc2l6ZSBvZiB0aGUgcXVldWUgdG8gdGhlIGNvdW50ZXIgKi8KKysJCWZvciAoaW50 IGkgPSAxOyBpIDwgbnVta3E7IGkrKykgeworKwkJCW1lbWNweShhZXNfbXRfY3R4LT5xW2ldLmN0 ciwgYWVzX210X2N0eC0+YWVzX2NvdW50ZXIsIEFFU19CTE9DS19TSVpFKTsKKysJCQlzc2hfY3Ry X2FkZChhZXNfbXRfY3R4LT5xW2ldLmN0ciwgaSAqIEtRTEVOLCBBRVNfQkxPQ0tfU0laRSk7Cisr CQkJYWVzX210X2N0eC0+cVtpXS5xc3RhdGUgPSBLUUVNUFRZOworKwkJfQorKwkJYWVzX210X2N0 eC0+cWlkeCA9IDA7CisrCQlhZXNfbXRfY3R4LT5yaWR4ID0gMDsKKysJCWFlc19tdF9jdHgtPnN0 cnVjdF9pZCA9IGdsb2JhbF9zdHJ1Y3RfaWQrKzsKKysKKysJCS8qIFN0YXJ0IHRocmVhZHMuIE1h a2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzdGFjayBzcGFjZSAodW5kZXIgYWxwaW5lKQorKwkJKiBh bmQgYXJlbid0IHVzaW5nIG1vcmUgdGhhbiB3ZSBuZWVkIChsaW51eCkuIFRoaXMgY2FuIGJlIGFz IGxvdyBhcworKwkJKiA1MTJLQiBidXQgdGhhdCdzIGEgbWluaW11bS4gMTAyNEtCIGdpdmVzIHVz IGEgbGl0dGxlIGhlYWRyb29tIGlmIHdlCisrCQkqIG5lZWQgaXQgKi8KKysjZGVmaW5lIFNUQUNL X1NJWkUgKDEwMjQgKiAxMDI0KQorKyAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfdCBhdHRy OworKyAgICAgICAgICAgICAgICBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cik7CisrICAgICAgICAg ICAgICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJmF0dHIsIFNUQUNLX1NJWkUpOworKwkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBjaXBoZXJfdGhyZWFkczsgaSsrKSB7CisrCQkJcHRocmVhZF9y d2xvY2tfd3Jsb2NrKCZhZXNfbXRfY3R4LT50aWRfbG9jayk7CisrCQkJaWYgKHB0aHJlYWRfY3Jl YXRlKCZhZXNfbXRfY3R4LT50aWRbaV0sICZhdHRyLCB0aHJlYWRfbG9vcCwgYWVzX210X2N0eCkg IT0gMCkKKysJCQkJZmF0YWwgKCJBRVMtQ1RSIE1UIENvdWxkIG5vdCBjcmVhdGUgdGhyZWFkIGlu ICVzIiwgX19mdW5jX18pOworKwkJCWVsc2UgeworKwkJCQlhZXNfbXRfY3R4LT5pZFtpXSA9IGk7 CisrCQkJCWRlYnVnX2YgKCJBRVMtQ1RSIE1UIHNwYXduZWQgYSB0aHJlYWQgd2l0aCBpZCAlbHUg KCVsdSwgJWQpIiwKKysJCQkJCSBhZXNfbXRfY3R4LT50aWRbaV0sIGFlc19tdF9jdHgtPnN0cnVj dF9pZCwKKysJCQkJCSBhZXNfbXRfY3R4LT5pZFtpXSk7CisrCQkJfQorKwkJCXB0aHJlYWRfcnds b2NrX3VubG9jaygmYWVzX210X2N0eC0+dGlkX2xvY2spOworKwkJfQorKwkJcHRocmVhZF9tdXRl eF9sb2NrKCZhZXNfbXRfY3R4LT5xWzBdLmxvY2spOworKwkJLy8gd2FpdCBmb3IgYWxsIG9mIHRo ZSB0aHJlYWRzIHRvIGJlIGluaXRpYWxpemVkCisrCQl3aGlsZSAoYWVzX210X2N0eC0+cVswXS5x c3RhdGUgPT0gS1FJTklUKQorKwkJCXB0aHJlYWRfY29uZF93YWl0KCZhZXNfbXRfY3R4LT5xWzBd LmNvbmQsICZhZXNfbXRfY3R4LT5xWzBdLmxvY2spOworKwkJcHRocmVhZF9tdXRleF91bmxvY2so JmFlc19tdF9jdHgtPnFbMF0ubG9jayk7CisrCX0KKysJcmV0dXJuIDE7CisrfQorKworKy8qIHRo aXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gc3NoX2Flc19jdHIKKysgKiBPU1NMX0NPUkVfTUFLRV9G VU5DKGludCwgY2lwaGVyX2NpcGhlciwKKysgKiAgICAgICAgICAgICAgICAgICAgICh2b2lkICpj Y3R4LAorKyAqICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qg Km91dGwsIHNpemVfdCBvdXRzaXplLAorKyAqICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpKQorKyAqLworKworK2ludCBhZXNfbXRfZG9fY2lw aGVyKHZvaWQgKnZldnBfY3R4LAorKwkJCSAgICB1X2NoYXIgKmRlc3QsIHNpemVfdCAqZGVzdGxl biwgc2l6ZV90IGRlc3RzaXplLAorKwkJCSAgICBjb25zdCB1X2NoYXIgKnNyYywgc2l6ZV90IGxl bikKKyt7CisrCXR5cGVkZWYgdW5pb24geworKyNpZmRlZiBDSVBIRVJfSU5UMTI4X09LCisrCQlf X3VpbnQxMjhfdCAqdTEyODsKKysjZW5kaWYKKysJCXVpbnQ2NF90ICp1NjQ7CisrCQl1aW50MzJf dCAqdTMyOworKwkJdWludDhfdCAqdTg7CisrCQljb25zdCB1aW50OF90ICpjdTg7CisrCQl1aW50 cHRyX3QgdTsKKysJfSBwdHJzX3Q7CisrCXB0cnNfdCBkZXN0cCwgc3JjcCwgYnVmcDsKKysJdWlu dHB0cl90IGFsaWduOworKwlzdHJ1Y3QgYWVzX210X2N0eF9zdCAqYWVzX210X2N0eDsKKysJc3Ry dWN0IGtxICpxLCAqb2xkcTsKKysJaW50IHJpZHg7CisrCXVfY2hhciAqYnVmOworKwlFVlBfQ0lQ SEVSX0NUWCAqZXZwX2N0eCA9IHZldnBfY3R4OworKwl1aW50NjRfdCBzcmNfYSwga2V5X2E7Cisr CQorKwlpZiAobGVuID09IDApCisrCQlyZXR1cm4gMTsKKysKKysJaWYgKChhZXNfbXRfY3R4ID0g RVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGV2cF9jdHgpKSA9PSBOVUxMKQorKwkJcmV0dXJu IDA7CisrCisrCXEgPSAmYWVzX210X2N0eC0+cVthZXNfbXRfY3R4LT5xaWR4XTsKKysJcmlkeCA9 IGFlc19tdF9jdHgtPnJpZHg7CisrCisrCS8qIHNyYyBhbHJlYWR5IHBhZGRlZCB0byBibG9jayBt dWx0aXBsZSAqLworKwlzcmNwLmN1OCA9IHNyYzsKKysJZGVzdHAudTggPSBkZXN0OworKwlkbyB7 IC8qIGRvIHVudGlsIGxlbiBpcyAwICovCisrCQlidWYgPSBxLT5rZXlzW3JpZHhdOworKwkJYnVm cC51OCA9IGJ1ZjsKKysKKysJCS8qIGZpZ3VyZSBvdXQgdGhlIGFsaWdubWVudCBvbiB0aGUgZmx5 ICovCisrI2lmZGVmIENJUEhFUl9VTkFMSUdORURfT0sKKysJCWFsaWduID0gMDsKKysjZWxzZQor KwkJYWxpZ24gPSBkZXN0cC51IHwgc3JjcC51IHwgYnVmcC51OworKyNlbmRpZgorKworKwkJLyog eG9yIHRoZSBzcmMgYWdhaW5zdCB0aGUga2V5IChidWYpCisrCQkgKiBkaWZmZXJlbnQgc3lzdGVt cyBjYW4gZG8gYWxsIDE2IGJ5dGVzIGF0IG9uY2Ugb3IKKysJCSAqIG1heSBuZWVkIHRvIGRvIGl0 IGluIDggb3IgNCBieXRlcyBjaHVua3MKKysJCSAqIHdvcnN0IGNhc2UgaXMgZG9pbmcgaXQgYXMg YSBsb29wICovCisrI2lmZGVmIENJUEhFUl9JTlQxMjhfT0sKKysJCS8qIHdpdGggR0NDIDEzIHdl IGhhdmUgaGF2aW5nIGNvbnNpc3RlbnQgc2VnIGZhdWx0cworKwkJICogaW4gdGhpcyBzZWN0aW9u IG9mIGNvZGUuIFNpbmNlIHRoaXMgaXMgYSBjcml0aWNhbAorKwkJICogY29kZSBwYXRoIHdlIGFy ZSByZW1vdmluZyB0aGlzIHVudGlsIHdlIGhhdmUgYSBzb2x1dGlvbgorKwkJICogaW4gcGxhY2Ug LWNqciAwMi8yMi8yNAorKwkJICogVE9ETzogRklYIFRISVMKKysJCSAqLworKwkJLyogaWYgKChh bGlnbiAmIDB4ZikgPT0gMCkgeyAqLworKwkJLyogCWRlc3RwLnUxMjhbMF0gPSBzcmNwLnUxMjhb MF0gXiBidWZwLnUxMjhbMF07ICovCisrCQkvKiB9IGVsc2UgKi8KKysjZW5kaWYKKysJCS8qIDY0 IGJpdHMgKi8KKysJCS8qIHRoaXMgaXMgY2F1c2luZyB1bmRlZmluZWQgYmVoYXZpb3VyIGluIHNh bml0aXplcnMKKysJCSAqIHRoaXMgaXMgYW5ub3lpbmcgYmVjYXVzZSBpdCdzIG1vcmUgZWZmaWNp ZW50CisrCQkgKiBidXQgVUIgaXMgbm90IHNvbWV0aGluZyBJIHdhbnQgdG8gcmV0YWluICovCisr CQlpZiAoKGFsaWduICYgMHg3KSA9PSAwKSB7CisrCQkJLyogdGhpcyBzaG91bGQgcmVzb2x2ZSB0 aGUgc3RyaWN0IGFsaWFzaW5nIFVCCisrCQkJICogYW5kIHRoZSBwZXJmb3JtYW5jZSBkb2Vzbid0 IHNlZW0gdG8gY2hhbmdlIG11Y2gKKysJCQkgKiBidXQgdGhlIG1lbWNweXMgYXJlIGtpbGxpbmcg bWUgMy01LTI2IGNqciovCisrCQkJbWVtY3B5KCZzcmNfYSwgJnNyY3AudTY0WzBdLCBzaXplb2Yo dWludDY0X3QpKTsKKysJCQltZW1jcHkoJmtleV9hLCAmYnVmcC51NjRbMF0sIHNpemVvZih1aW50 NjRfdCkpOworKwkJCWRlc3RwLnU2NFswXSA9IHNyY19hIF4ga2V5X2E7CisrCQkJbWVtY3B5KCZz cmNfYSwgJnNyY3AudTY0WzFdLCBzaXplb2YodWludDY0X3QpKTsKKysJCQltZW1jcHkoJmtleV9h LCAmYnVmcC51NjRbMV0sIHNpemVvZih1aW50NjRfdCkpOworKwkJCWRlc3RwLnU2NFsxXSA9IHNy Y19hIF4ga2V5X2E7CisrCQkJLyogZGVzdHAudTY0WzBdID0gc3JjcC51NjRbMF0gXiBidWZwLnU2 NFswXTsgKi8KKysJCQkvKiBkZXN0cC51NjRbMV0gPSBzcmNwLnU2NFsxXSBeIGJ1ZnAudTY0WzFd OyAqLworKyAgICAgICAgICAgICAgICAvKiAzMiBiaXRzICovCisrCQl9IGVsc2UKKysJCWlmICgo YWxpZ24gJiAweDMpID09IDApIHsKKysJCQlkZXN0cC51MzJbMF0gPSBzcmNwLnUzMlswXSBeIGJ1 ZnAudTMyWzBdOworKwkJCWRlc3RwLnUzMlsxXSA9IHNyY3AudTMyWzFdIF4gYnVmcC51MzJbMV07 CisrCQkJZGVzdHAudTMyWzJdID0gc3JjcC51MzJbMl0gXiBidWZwLnUzMlsyXTsKKysJCQlkZXN0 cC51MzJbM10gPSBzcmNwLnUzMlszXSBeIGJ1ZnAudTMyWzNdOworKwkJfSBlbHNlIHsKKysJCQkv KjEgYnl0ZSBhdCBhIHRpbWUqLworKwkJCXNpemVfdCBpOworKwkJCWZvciAoaSA9IDA7IGkgPCBB RVNfQkxPQ0tfU0laRTsgKytpKQorKwkJCQlkZXN0W2ldID0gc3JjW2ldIF4gYnVmW2ldOworKwkJ fQorKworKwkJLyogaW5jL2RlY3JlbWVudCB0aGUgcG9pbnRlcnMgYnkgdGhlIGJsb2NrIHNpemUg KDE2KSovCisrCQlkZXN0cC51ICs9IEFFU19CTE9DS19TSVpFOworKwkJc3JjcC51ICs9IEFFU19C TE9DS19TSVpFOworKworKwkJLyogSW5jcmVtZW50IHJlYWQgaW5kZXgsIHN3aXRjaCBxdWV1ZXMg b24gcm9sbG92ZXIgKi8KKysJCWlmICgocmlkeCA9IChyaWR4ICsgMSkgJSBLUUxFTikgPT0gMCkg eworKwkJCW9sZHEgPSBxOworKworKwkJCS8qIE1hcmsgbmV4dCBxdWV1ZSBkcmFpbmluZywgbWF5 IG5lZWQgdG8gd2FpdCAqLworKwkJCWFlc19tdF9jdHgtPnFpZHggPSAoYWVzX210X2N0eC0+cWlk eCArIDEpICUgbnVta3E7CisrCQkJcSA9ICZhZXNfbXRfY3R4LT5xW2Flc19tdF9jdHgtPnFpZHhd OworKwkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcS0+bG9jayk7CisrCQkJd2hpbGUgKHEtPnFzdGF0 ZSAhPSBLUUZVTEwpIHsKKysJCQkJcHRocmVhZF9jb25kX3dhaXQoJnEtPmNvbmQsICZxLT5sb2Nr KTsKKysJCQl9CisrCQkJcS0+cXN0YXRlID0gS1FEUkFJTklORzsKKysJCQlwdGhyZWFkX2NvbmRf YnJvYWRjYXN0KCZxLT5jb25kKTsKKysJCQlwdGhyZWFkX211dGV4X3VubG9jaygmcS0+bG9jayk7 CisrCisrCQkJLyogTWFyayBjb25zdW1lZCBxdWV1ZSBlbXB0eSBhbmQgc2lnbmFsIHByb2R1Y2Vy cyAqLworKwkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmb2xkcS0+bG9jayk7CisrCQkJb2xkcS0+cXN0 YXRlID0gS1FFTVBUWTsKKysJCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZvbGRxLT5jb25kKTsK KysJCQlwdGhyZWFkX211dGV4X3VubG9jaygmb2xkcS0+bG9jayk7CisrCQl9CisrCX0gd2hpbGUg KGxlbiAtPSBBRVNfQkxPQ0tfU0laRSk7CisrCWFlc19tdF9jdHgtPnJpZHggPSByaWR4OworKwly ZXR1cm4gMTsKKyt9CisrCisrI2VuZGlmIC8qV0lUSF9PUEVOU1NMMyovCitkaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5oIG9wZW5zc2gtMTAuM3Ax L2NpcGhlci1jdHItbXQtZnVuY3Rpb25zLmgKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NpcGhl ci1jdHItbXQtZnVuY3Rpb25zLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItY3RyLW10LWZ1bmN0aW9ucy5oCTIwMjYtMDctMDIg MDA6Mjc6MjkuNzIyMDExNDkyICswMjAwCitAQCAtMCwwICsxLDE0MiBAQAorKy8qCisrICogT3Bl blNTSCBNdWx0aS10aHJlYWRlZCBBRVMtQ1RSIENpcGhlciBQcm92aWRlciBmb3IgT3BlblNTTCAz CisrICoKKysgKiBBdXRob3I6IEJlbmphbWluIEJlbm5ldHQgPGJlbkBwc2MuZWR1PgorKyAqIEF1 dGhvcjogTWlrZSBUYXNvdGEgPHRhc290YUBnbWFpbC5jb20+CisrICogQXV0aG9yOiBDaHJpcyBS YXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDIyIFBpdHRz YnVyZ2ggU3VwZXJjb21wdXRpbmcgQ2VudGVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogQmFzZWQgb24gb3JpZ2luYWwgT3BlblNTSCBBRVMtQ1RSIGNpcGhlci4gU21hbGwgcG9ydGlv bnMgcmVtYWluIHVuY2hhbmdlZCwKKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWFya3VzIEZyaWVk bCA8bWFya3VzQG9wZW5ic2Qub3JnPgorKyAqCisrICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHks IG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisrICogcHVycG9z ZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRo ZSBhYm92ZQorKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug YXBwZWFyIGluIGFsbCBjb3BpZXMuCisrICoKKysgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKysgKiBXSVRI IFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVT IE9GCisrICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKysgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVD VCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisrICogV0hBVFNPRVZF UiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElO IEFOCisrICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VT IEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKysgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVT RSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyAqLworKworKyNpZm5kZWYgQ1RS X01UX0ZVTkNTCisrI2RlZmluZSBDVFJfTVRfRlVOQ1MKKysKKysvKiBpbmNsdWRlcyAqLworKyNp bmNsdWRlICJpbmNsdWRlcy5oIiAvKiBuZWVkZWQgdG8gZ2V0IHZlcnNpb24gbnVtYmVyICovCisr I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisrI2luY2x1ZGUg ImNpcGhlci1hZXNjdHIuaCIKKysjaW5jbHVkZSAidXRoYXNoLmgiCisrCisrI2lmbmRlZiBVU0Vf QlVJTFRJTl9SSUpOREFFTAorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNlbmRpZgorKwor Ky8qIG9ubHkgZm9yIHN5c3RlbXMgd2l0aCBPU1NMIDMgKi8KKysjaWZkZWYgV0lUSF9PUEVOU1NM MworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0gVFVOQUJMRVMgLS0tLS0tLS0tLS0tLS0tLS0t LS0qLworKy8qIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgYW5kIHF1ZXVlcyAqLworKyNkZWZp bmUgTUFYX1RIUkVBRFMgICAgICAzMgorKyNkZWZpbmUgTUFYX05VTUtRICAgICAgICAoTUFYX1RI UkVBRFMgKyAxKQorKworKy8qIG9uZSBxdWV1ZSBob2xkcyA4MTkyICogNCAqIDE2QiAoNTEyS0Ip ICBvZiBrZXkgZGF0YSAKKysgKiBiZWluZyB0aGF0IHRoZSBxdWV1ZXMgYXJlIGRlc3Ryb3llZCBh ZnRlciBhIHJla2V5CisrICogYW5kIGF0IGxlYXRzIG9uZSBoYXMgdG8gYmUgZnVsbHkgZmlsbGVk IHByaW9yIHRvCisrICogZW5jaXBoZXJpbmcgZGF0YSB3ZSBkb24ndCB3YW50IHRoaXMgdG8gYmUg dG9vIGxhcmdlICovCisrI2RlZmluZSBLUUxFTiAoODE5MiAqIDQpCisrCisrLyogUHJvY2Vzc29y IGNhY2hlbGluZSBsZW5ndGggKi8KKysjZGVmaW5lIENBQ0hFTElORV9MRU4JNjQKKysKKysvKiBD YW4gdGhlIHN5c3RlbSBkbyB1bmFsaWduZWQgbG9hZHMgbmF0aXZlbHk/ICovCisrI2lmIGRlZmlu ZWQoX19hYXJjaDY0X18pIHx8IFwKKysgICAgZGVmaW5lZChfX2kzODZfXykgICAgfHwgXAorKyAg ICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBcCisrICAgIGRlZmluZWQoX194ODZfNjRfXykKKysj IGRlZmluZSBDSVBIRVJfVU5BTElHTkVEX09LCisrI2VuZGlmCisrI2lmIGRlZmluZWQoX19TSVpF T0ZfSU5UMTI4X18pCisrIyBkZWZpbmUgQ0lQSEVSX0lOVDEyOF9PSworKyNlbmRpZgorKworKy8q IGNvbnRleHQgc3RhdGVzICovCisrI2RlZmluZSBIQVZFX05PTkUgICAgICAgMAorKyNkZWZpbmUg SEFWRV9LRVkgICAgICAgIDEKKysjZGVmaW5lIEhBVkVfSVYgICAgICAgICAyCisrCisrLyogS2V5 c3RyZWFtIFF1ZXVlIHN0YXRlICovCisrZW51bSB7CisrCUtRSU5JVCwKKysJS1FFTVBUWSwKKysJ S1FGSUxMSU5HLAorKwlLUUZVTEwsCisrCUtRRFJBSU5JTkcKKyt9OworKworKy8qIHN0cnVjdHMg Ki8KKysKKysvKiBwcm92aWRlciBzdHJ1Y3QgKi8KKytzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0IHsK KysJY29uc3QgT1NTTF9DT1JFX0hBTkRMRSAqY29yZV9oYW5kbGU7CisrCXN0cnVjdCBwcm92ZXJy X2Z1bmN0aW9uc19zdCAqcHJvdmVycl9oYW5kbGU7CisrfTsKKysKKysvKiBLZXlzdHJlYW0gUXVl dWUgc3RydWN0ICovCisrc3RydWN0IGtxIHsKKysJdV9jaGFyCQlrZXlzW0tRTEVOXVtBRVNfQkxP Q0tfU0laRV07IC8qIFszMjc2OF1bMTZCXSAqLworKwl1X2NoYXIJCWN0cltBRVNfQkxPQ0tfU0la RV07IC8qIDE2QiAqLworKwl1X2NoYXIgICAgICAgICAgcGFkMFtDQUNIRUxJTkVfTEVOXTsKKysJ cHRocmVhZF9tdXRleF90CWxvY2s7CisrCXB0aHJlYWRfY29uZF90CWNvbmQ7CisrCWludCAgICAg ICAgICAgICBxc3RhdGU7CisrCXVfY2hhciAgICAgICAgICBwYWQxW0NBQ0hFTElORV9MRU5dOwor K307CisrCisrLyogQUVTIE1UIGNvbnRleHQgc3RydWN0ICovCisrc3RydWN0IGFlc19tdF9jdHhf c3QgeworKwlzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0ICpwcm92Y3R4OworKwlsb25nIHVuc2lnbmVk IGludCAgICAgICBzdHJ1Y3RfaWQ7CisrCWludCAgICAgICAgICAgICAgICAgICAgIGtleWxlbjsK KysJaW50CQkgICAgICAgIHN0YXRlOworKwlpbnQJCSAgICAgICAgcWlkeDsKKysJaW50CQkgICAg ICAgIHJpZHg7CisrCWludCAgICAgICAgICAgICAgICAgICAgIGlkW01BWF9USFJFQURTXTsgLyog MzIgKi8KKysJQUVTX0tFWSAgICAgICAgICAgICAgICAgYWVzX2tleTsKKysJY29uc3QgdV9jaGFy ICAgICAgICAgICAqb3JpZ19rZXk7CisrCXVfY2hhcgkJICAgICAgICBhZXNfY291bnRlcltBRVNf QkxPQ0tfU0laRV07IC8qIDE2QiAqLworKwlwdGhyZWFkX3QJICAgICAgICB0aWRbTUFYX1RIUkVB RFNdOyAvKiAzMiAqLworKwlwdGhyZWFkX3J3bG9ja190ICAgICAgICB0aWRfbG9jazsKKysJc3Ry dWN0IGtxCSAgICAgICAgcVtNQVhfTlVNS1FdOyAvKiAzMyAqLworKyNpZmRlZiBfX0FQUExFX18K KysJcHRocmVhZF9yd2xvY2tfdCAgICAgICAgc3RvcF9sb2NrOworKwlpbnQJCSAgICAgICAgZXhp dF9mbGFnOworKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKysJaW50ICAgICAgICAgICAgICAgICAg ICAgb25nb2luZzsgLyogcG9zc2libHkgbm90IG5lZWRlZCAqLworK307CisrCisrLyogdGhpcyBo b2xkcyBhbiBhcnJheSBvZiBldnAgY29udGV4dCBwb2ludGVycyB0aGF0IGFyZQorKyAqIGNyZWF0 ZWQgaW4gdGhyZWFkX2xvb3AuIFNpbmNlIHdlIGNhbid0IGVmZmVjdGl2ZWx5IGZyZWUgdGhvc2UK KysgKiBjb250ZXh0cyBpbiB0aHJlYWRfbG9vcCB3ZSBrZWVwIGEgY29weSBvZiB0aG9zZSBwb2lu dGVycyBoZXJlCisrICogYW5kIHRoZW4gZnJlZSB0aGVtIGluIHN0b3BfYW5kX2pvaW5fcHJlZ2Vu dGhyZWFkcworKyAqIGNqciAyLzIvMjAyMworKyAqLworK3N0cnVjdCBhZXNfbXRfY3R4X3B0cnMg eworKwlFVlBfQ0lQSEVSX0NUWCAqcG9pbnRlcjsKKysgICAgICAgIHB0aHJlYWRfdCAgICAgICB0 aWQ7CisrCVVUX2hhc2hfaGFuZGxlICBoaDsKKyt9OworKworK2ludCBhZXNfbXRfZG9fY2lwaGVy KHZvaWQgKiwgdV9jaGFyICosIHNpemVfdCAqLCBzaXplX3QsIGNvbnN0IHVfY2hhciAqLCBzaXpl X3QpOworK2ludCBhZXNfbXRfc3RhcnRfdGhyZWFkcyh2b2lkICosIGNvbnN0IHVfY2hhciAqLCBz aXplX3QsIGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IE9TU0xfUEFSQU0gKik7Cisrdm9p ZCBhZXNfbXRfZnJlZWN0eCh2b2lkICopOworK3ZvaWQgKmFlc19tdF9uZXdjdHhfMjU2KHZvaWQg Kik7Cisrdm9pZCAqYWVzX210X25ld2N0eF8xOTIodm9pZCAqKTsKKyt2b2lkICphZXNfbXRfbmV3 Y3R4XzEyOCh2b2lkICopOworKworKyNlbmRpZiAvKiBXSVRIIE9QRU5TU0wgKi8KKysjZW5kaWYg LyogQ1RSX01UX0ZVTkNTICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXIt Y3RyLW10LXByb3ZpZGVyLmMgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLWN0ci1tdC1wcm92aWRlci5j CistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItY3RyLW10LXByb3ZpZGVyLmMJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXIt Y3RyLW10LXByb3ZpZGVyLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjIxMDUzNDcgKzAyMDAKK0BA IC0wLDAgKzEsMzkwIEBACisrLyoKKysgKiBPcGVuU1NIIE11bHRpLXRocmVhZGVkIEFFUy1DVFIg Q2lwaGVyIFByb3ZpZGVyIGZvciBPcGVuU1NMIDMKKysgKgorKyAqIEF1dGhvcjogQ2hyaXMgUmFw aWVyIDxyYXBpZXJAcHNjLmVkdT4KKysgKiBDb3B5cmlnaHQgKGMpIDIwMjIgUGl0dHNidXJnaCBT dXBlcmNvbXB1dGluZyBDZW50ZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBQZXJt aXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJl IGZvciBhbnkKKysgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50 ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKysgKgorKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwg V0FSUkFOVElFUworKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFM TCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKysgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mu IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorKyAqIEFOWSBTUEVD SUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERB TUFHRVMKKysgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9S IFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKysgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VO Q0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorKyAqIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisr ICovCisrCisrLyogYmFzZWQgb24gdmllbmVyZS5jIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3By b3ZpZGVyLWNvcm5lci92aWdlbmVyZSBieQorKyAqIFJpY2hhcmQgTGV2aXR0ZSBwcm92aWRlZCB1 bmRlciBhIENDMCBQdWJsaWMgTGljZW5zZS4gKi8KKysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIK KysKKysvKiBvbmx5IGZvciBzeXN0ZW1zIHdpdGggT1NTTCAzLjArICovCisrI2lmZGVmIFdJVEhf T1BFTlNTTDMKKysKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2NvcmUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jb3JlX2Rp c3BhdGNoLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY29yZV9uYW1lcy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJ4bWFsbG9jLmgiCisrI2luY2x1ZGUgIm9zc2wzLXBy b3ZpZGVyLWVyci5oIgorKyNpbmNsdWRlICJudW0uaCIKKysjaW5jbHVkZSAiY2lwaGVyLWN0ci1t dC1mdW5jdGlvbnMuaCIKKysKKysjZGVmaW5lIEVSUl9IQU5ETEUoY3R4KSAoKGN0eCktPnByb3Zj dHgtPnByb3ZlcnJfaGFuZGxlKQorKworKy8qIGZvcndhcmQgZGVjbGFydGlvbiBvZiBjaXBoZXIg ZnVuY3Rpb25zICovCisrLyogY2lwaGVyIGNvbnRleHQgZnVuY3Rpb25zICovCisrT1NTTF9GVU5D X2NpcGhlcl9uZXdjdHhfZm4gYWVzX210X25ld2N0eF8yNTY7CisrT1NTTF9GVU5DX2NpcGhlcl9u ZXdjdHhfZm4gYWVzX210X25ld2N0eF8xOTI7CisrT1NTTF9GVU5DX2NpcGhlcl9uZXdjdHhfZm4g YWVzX210X25ld2N0eF8xMjg7CisrT1NTTF9GVU5DX2NpcGhlcl9mcmVlY3R4X2ZuIGFlc19tdF9m cmVlY3R4OworKworKy8qIHBhcmFtIHJlbGF0ZWQgZnVuY3Rpb24qLworK3N0YXRpYyBPU1NMX0ZV TkNfY2lwaGVyX2dldF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMjU2OworK3N0YXRpYyBP U1NMX0ZVTkNfY2lwaGVyX2dldF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMTkyOworK3N0 YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX2dldF9wYXJhbXNfZm4gYWVzX210X2dldF9wYXJhbXNfMTI4 OworK3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX2dldHRhYmxlX3BhcmFtc19mbiBhZXNfbXRfZ2V0 dGFibGVfcGFyYW1zOworK3N0YXRpYyBPU1NMX0ZVTkNfY2lwaGVyX3NldF9jdHhfcGFyYW1zX2Zu IGFlc19tdF9zZXRfY3R4X3BhcmFtczsKKytzdGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9nZXRfY3R4 X3BhcmFtc19mbiBhZXNfbXRfZ2V0X2N0eF9wYXJhbXM7Cisrc3RhdGljIE9TU0xfRlVOQ19jaXBo ZXJfc2V0dGFibGVfY3R4X3BhcmFtc19mbiBhZXNfbXRfc2V0dGFibGVfY3R4X3BhcmFtczsKKytz dGF0aWMgT1NTTF9GVU5DX2NpcGhlcl9nZXR0YWJsZV9jdHhfcGFyYW1zX2ZuIGFlc19tdF9nZXR0 YWJsZV9jdHhfcGFyYW1zOworKworKy8qIGVuL2RlY2lwaGVyIGZ1bmN0aW9ucyAqLworK09TU0xf RlVOQ19jaXBoZXJfZW5jcnlwdF9pbml0X2ZuIGFlc19tdF9zdGFydF90aHJlYWRzOworK09TU0xf RlVOQ19jaXBoZXJfZGVjcnlwdF9pbml0X2ZuIGFlc19tdF9zdGFydF90aHJlYWRzOworK09TU0xf RlVOQ19jaXBoZXJfdXBkYXRlX2ZuIGFlc19tdF9kb19jaXBoZXI7CisrCisrLyogcHJvdmlkZXIg Y29udGV4dCAqLworK3N0YXRpYyBPU1NMX0ZVTkNfcHJvdmlkZXJfcXVlcnlfb3BlcmF0aW9uX2Zu IGFlc19tdF9wcm92X3F1ZXJ5OworK3N0YXRpYyBPU1NMX0ZVTkNfcHJvdmlkZXJfZ2V0X3JlYXNv bl9zdHJpbmdzX2ZuIGFlc19tdF9wcm92X3JlYXNvbnM7Cisrc3RhdGljIE9TU0xfRlVOQ19wcm92 aWRlcl90ZWFyZG93bl9mbiBhZXNfbXRfcHJvdl90ZWFyZG93bjsKKytzdGF0aWMgT1NTTF9GVU5D X3Byb3ZpZGVyX2dldF9wYXJhbXNfZm4gYWVzX210X3Byb3ZfZ2V0X3BhcmFtczsgCisrT1NTTF9w cm92aWRlcl9pbml0X2ZuIE9TU0xfcHJvdmlkZXJfaW5pdDsgLyogbmVlZCB0aGlzPyAqLworKwor Ky8qIGVycm9yIGZ1bmN0aW9ucyAqLworK09TU0xfRlVOQ19jb3JlX25ld19lcnJvcl9mbiAqY19u ZXdfZXJyb3I7CisrT1NTTF9GVU5DX2NvcmVfc2V0X2Vycm9yX2RlYnVnX2ZuICpjX3NldF9lcnJv cl9kZWJ1ZzsKKytPU1NMX0ZVTkNfY29yZV92c2V0X2Vycm9yX2ZuICpjX3ZzZXRfZXJyb3I7Cisr T1NTTF9GVU5DX2NvcmVfc2V0X2Vycm9yX21hcmtfZm4gKmNfc2V0X2Vycm9yX21hcms7CisrT1NT TF9GVU5DX2NvcmVfY2xlYXJfbGFzdF9lcnJvcl9tYXJrX2ZuICpjX2NsZWFyX2xhc3RfZXJyb3Jf bWFyazsKKytPU1NMX0ZVTkNfY29yZV9wb3BfZXJyb3JfdG9fbWFya19mbiAqY19wb3BfZXJyb3Jf dG9fbWFyazsKKysKKysvKiBFcnJvcnMgdXNlZCBpbiB0aGlzIHByb3ZpZGVyICovCisrI2RlZmlu ZSBBRVNfTVRfRV9NQUxMT0MgICAgICAgICAgIDEKKysjZGVmaW5lIEFFU19NVF9PTkdPSU5HX09Q RVJBVElPTiAgMgorKyNkZWZpbmUgQUVTX01UX0JBRF9LRVlMRU4gICAgICAgICAzCisrCisrLyog dHlwZWRlZiBmb3IgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyt0eXBlZGVmIHZvaWQoKmZwdHJfdCko dm9pZCk7CisrCisrLyogYWxsIG9mIHRoZSB2YXJpb3VzIGFycmF5cyB3ZSBuZWVkICovCisrCisr LyogQkFEX0tFWUxFTiBpc24ndCBiZWluZyB1c2VkIGF0IHRoZSBtb21lbnQgKi8KKytjb25zdCBP U1NMX0lURU0gcmVhc29uc1tdID0geworKwl7IEFFU19NVF9FX01BTExPQywgIk1lbW9yeSBhbGxv Y2F0aW9uIGZhaWx1cmUiIH0sCisrCXsgQUVTX01UX09OR09JTkdfT1BFUkFUSU9OLCAiT3BlcmF0 aW9uIHVuZGVyd2F5IiB9LAorKwl7IEFFU19NVF9CQURfS0VZTEVOLCAiT25seSAyNTYsIDE5Miwg YW5kIDEyOCBLZXkgbGVuZ3RocyBhcmUgc3VwcG9ydGVkIiB9LAorKwl7IDAsIE5VTEwgfSAvKiBU ZXJtaW5hdGlvbiAqLworK307CisrCisrLyogZnVuY3Rpb24gbWFwcGluZyBmb3IgMjU2fDE5Mnwx Mjgga2V5IGxlbmd0aHMgKi8KKytjb25zdCBPU1NMX0RJU1BBVENIIGFlc19tdF9mdW5jc18yNTZb XSA9IHsKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX05FV0NUWCwgKGZwdHJfdClhZXNfbXRfbmV3Y3R4 XzI1NiB9ICwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0ZSRUVDVFgsIChmcHRyX3QpYWVzX210X2Zy ZWVjdHggfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0VOQ1JZUFRfSU5JVCwgKGZwdHJfdClhZXNf bXRfc3RhcnRfdGhyZWFkcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfREVDUllQVF9JTklULCAo ZnB0cl90KWFlc19tdF9zdGFydF90aHJlYWRzIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9VUERB VEUsIChmcHRyX3QpYWVzX210X2RvX2NpcGhlciB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VU X1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0X3BhcmFtc18yNTYgfSwKKysJeyBPU1NMX0ZVTkNf Q0lQSEVSX0dFVFRBQkxFX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVfcGFyYW1zIH0s CisrCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfQ1RYX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfZ2V0 X2N0eF9wYXJhbXMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0dFVFRBQkxFX0NUWF9QQVJBTVMs CisrCSAgKGZwdHJfdClhZXNfbXRfZ2V0dGFibGVfY3R4X3BhcmFtcyB9LAorKwl7IE9TU0xfRlVO Q19DSVBIRVJfU0VUX0NUWF9QQVJBTVMsIChmcHRyX3QpYWVzX210X3NldF9jdHhfcGFyYW1zIH0s CisrCXsgT1NTTF9GVU5DX0NJUEhFUl9TRVRUQUJMRV9DVFhfUEFSQU1TLAorKwkgIChmcHRyX3Qp YWVzX210X3NldHRhYmxlX2N0eF9wYXJhbXMgfSwKKysJeyAwLCBOVUxMIH0KKyt9OworKworK2Nv bnN0IE9TU0xfRElTUEFUQ0ggYWVzX210X2Z1bmNzXzE5MltdID0geworKwl7IE9TU0xfRlVOQ19D SVBIRVJfTkVXQ1RYLCAoZnB0cl90KWFlc19tdF9uZXdjdHhfMTkyIH0gLAorKwl7IE9TU0xfRlVO Q19DSVBIRVJfRlJFRUNUWCwgKGZwdHJfdClhZXNfbXRfZnJlZWN0eCB9LAorKwl7IE9TU0xfRlVO Q19DSVBIRVJfRU5DUllQVF9JTklULCAoZnB0cl90KWFlc19tdF9zdGFydF90aHJlYWRzIH0sCisr CXsgT1NTTF9GVU5DX0NJUEhFUl9ERUNSWVBUX0lOSVQsIChmcHRyX3QpYWVzX210X3N0YXJ0X3Ro cmVhZHMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX1VQREFURSwgKGZwdHJfdClhZXNfbXRfZG9f Y2lwaGVyIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRfUEFSQU1TLCAoZnB0cl90KWFlc19t dF9nZXRfcGFyYW1zXzE5MiB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUVEFCTEVfUEFSQU1T LCAoZnB0cl90KWFlc19tdF9nZXR0YWJsZV9wYXJhbXMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVS X0dFVF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9nZXRfY3R4X3BhcmFtcyB9LAorKwl7IE9T U0xfRlVOQ19DSVBIRVJfR0VUVEFCTEVfQ1RYX1BBUkFNUywKKysJICAoZnB0cl90KWFlc19tdF9n ZXR0YWJsZV9jdHhfcGFyYW1zIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9TRVRfQ1RYX1BBUkFN UywgKGZwdHJfdClhZXNfbXRfc2V0X2N0eF9wYXJhbXMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVS X1NFVFRBQkxFX0NUWF9QQVJBTVMsCisrCSAgKGZwdHJfdClhZXNfbXRfc2V0dGFibGVfY3R4X3Bh cmFtcyB9LAorKwl7IDAsIE5VTEwgfQorK307CisrCisrY29uc3QgT1NTTF9ESVNQQVRDSCBhZXNf bXRfZnVuY3NfMTI4W10gPSB7CisrCXsgT1NTTF9GVU5DX0NJUEhFUl9ORVdDVFgsIChmcHRyX3Qp YWVzX210X25ld2N0eF8xMjggfSAsCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9GUkVFQ1RYLCAoZnB0 cl90KWFlc19tdF9mcmVlY3R4IH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9FTkNSWVBUX0lOSVQs IChmcHRyX3QpYWVzX210X3N0YXJ0X3RocmVhZHMgfSwKKysJeyBPU1NMX0ZVTkNfQ0lQSEVSX0RF Q1JZUFRfSU5JVCwgKGZwdHJfdClhZXNfbXRfc3RhcnRfdGhyZWFkcyB9LAorKwl7IE9TU0xfRlVO Q19DSVBIRVJfVVBEQVRFLCAoZnB0cl90KWFlc19tdF9kb19jaXBoZXIgfSwKKysJeyBPU1NMX0ZV TkNfQ0lQSEVSX0dFVF9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldF9wYXJhbXNfMTI4IH0sCisr CXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJMRV9QQVJBTVMsIChmcHRyX3QpYWVzX210X2dldHRh YmxlX3BhcmFtcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfR0VUX0NUWF9QQVJBTVMsIChmcHRy X3QpYWVzX210X2dldF9jdHhfcGFyYW1zIH0sCisrCXsgT1NTTF9GVU5DX0NJUEhFUl9HRVRUQUJM RV9DVFhfUEFSQU1TLAorKwkgIChmcHRyX3QpYWVzX210X2dldHRhYmxlX2N0eF9wYXJhbXMgfSwK KysJeyBPU1NMX0ZVTkNfQ0lQSEVSX1NFVF9DVFhfUEFSQU1TLCAoZnB0cl90KWFlc19tdF9zZXRf Y3R4X3BhcmFtcyB9LAorKwl7IE9TU0xfRlVOQ19DSVBIRVJfU0VUVEFCTEVfQ1RYX1BBUkFNUywK KysJICAoZnB0cl90KWFlc19tdF9zZXR0YWJsZV9jdHhfcGFyYW1zIH0sCisrCXsgMCwgTlVMTCB9 CisrfTsKKysKKysvKiB0aGUgY2lwaGVycyBmb3VuZCBpbiB0aGlzIHByb3ZpZGVyICovCisrY29u c3QgT1NTTF9BTEdPUklUSE0gYWVzX210X2NpcGhlcnNbXSA9IHsKKysJeyAiYWVzX2N0cl9tdF8y NTYiLCAicHJvdmlkZXI9aHBuc3NoIiwgYWVzX210X2Z1bmNzXzI1NiwgTlVMTCB9LAorKwl7ICJh ZXNfY3RyX210XzE5MiIsICJwcm92aWRlcj1ocG5zc2giLCBhZXNfbXRfZnVuY3NfMTkyLCBOVUxM IH0sCisrCXsgImFlc19jdHJfbXRfMTI4IiwgInByb3ZpZGVyPWhwbnNzaCIsIGFlc19tdF9mdW5j c18xMjgsIE5VTEwgfSwKKysJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KKyt9OworKworKy8q IGZ1bmN0aW9uIG1hcHBpbmcgZm9yIHByb3ZpZGVyIG1ldGhvZHMgKi8KKytjb25zdCBPU1NMX0RJ U1BBVENIIHByb3ZpZGVyX2Z1bmN0aW9uc1tdID0geworKwl7IE9TU0xfRlVOQ19QUk9WSURFUl9U RUFSRE9XTiwgKGZwdHJfdClhZXNfbXRfcHJvdl90ZWFyZG93biB9LAorKwl7IE9TU0xfRlVOQ19Q Uk9WSURFUl9RVUVSWV9PUEVSQVRJT04sIChmcHRyX3QpYWVzX210X3Byb3ZfcXVlcnkgfSwKKysJ eyBPU1NMX0ZVTkNfUFJPVklERVJfR0VUX1BBUkFNUywgKGZwdHJfdClhZXNfbXRfcHJvdl9nZXRf cGFyYW1zIH0sCisrCXsgT1NTTF9GVU5DX1BST1ZJREVSX0dFVF9SRUFTT05fU1RSSU5HUywgKGZw dHJfdClhZXNfbXRfcHJvdl9yZWFzb25zIH0sCisrCXsgMCwgTlVMTCB9CisrfTsKKysKKytzdGF0 aWMgY29uc3QgT1NTTF9QQVJBTSBjdHhfZ2V0X3BhcmFtX3RhYmxlW10gPSB7CisrICAgICAgICB7 ICJrZXlsZW4iLCBPU1NMX1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIsIE5VTEwsIHNpemVvZihzaXpl X3QpLCAwIH0sCisrICAgICAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIDAgfSwKKyt9OworKworK3N0 YXRpYyBjb25zdCBPU1NMX1BBUkFNIGNpcGhlcl9nZXRfcGFyYW1fdGFibGVbXSA9IHsKKysgICAg ICAgIHsgImJsb2Nrc2l6ZSIsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUiwgTlVMTCwgc2l6 ZW9mKHNpemVfdCksIDAgfSwKKysgICAgICAgIHsgImtleWxlbiIsIE9TU0xfUEFSQU1fVU5TSUdO RURfSU5URUdFUiwgTlVMTCwgc2l6ZW9mKHNpemVfdCksIDAgfSwKKysgICAgICAgIHsgTlVMTCwg MCwgTlVMTCwgMCwgMCB9LAorK307CisrCisrc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gY2lwaGVy X3NldF9wYXJhbV90YWJsZVtdID0geworKwl7ICJrZXlsZW4iLCBPU1NMX1BBUkFNX1VOU0lHTkVE X0lOVEVHRVIsIE5VTEwsIHNpemVvZihzaXplX3QpLCAwIH0sCisrCXsgTlVMTCwgMCwgTlVMTCwg MCwgMCB9LAorK307CisrCisrCisrLyogcHJvdmlkZXIgZnVuY3Rpb25zIHN0YXJ0IGhlcmUgKi8K KysKKytzdGF0aWMgdm9pZCBwcm92aWRlcl9jdHhfZnJlZShzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0 ICpjdHgpCisreworKyAgICBpZiAoY3R4ICE9IE5VTEwpCisrICAgICAgICBwcm92ZXJyX2ZyZWVf aGFuZGxlKGN0eC0+cHJvdmVycl9oYW5kbGUpOworKyAgICBmcmVlKGN0eCk7CisrfQorKworK3N0 YXRpYyBzdHJ1Y3QgcHJvdmlkZXJfY3R4X3N0ICpwcm92aWRlcl9jdHhfbmV3KGNvbnN0IE9TU0xf Q09SRV9IQU5ETEUgKmNvcmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgT1NTTF9ESVNQQVRDSCAqaW4pCisreworKyAgICBzdHJ1Y3QgcHJv dmlkZXJfY3R4X3N0ICpjdHg7CisrCisrICAgIGlmICgoY3R4ID0gbWFsbG9jKHNpemVvZigqY3R4 KSkpICE9IE5VTEwKKysgICAgICAgICYmIChjdHgtPnByb3ZlcnJfaGFuZGxlID0gcHJvdmVycl9u ZXdfaGFuZGxlKGNvcmUsIGluKSkgIT0gTlVMTCkgeworKyAgICAgICAgY3R4LT5jb3JlX2hhbmRs ZSA9IGNvcmU7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBwcm92aWRlcl9jdHhfZnJlZShjdHgp OworKyAgICAgICAgY3R4ID0gTlVMTDsKKysgICAgfQorKyAgICByZXR1cm4gY3R4OworK30KKysK KysKKysvKiByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBhbGdvIHRhYmxlIGZvciB0aGUgcmVxdWVz dGVkIGZ1bmN0aW9uCisrICogaW4gdGhpcyBjYXNlIHdlIHNob3VsZCBvbmx5IGJlIHdvcmtpbmcg d2l0aCBPUF9DSVBIRVIgKi8KKytjb25zdCBPU1NMX0FMR09SSVRITSAqYWVzX210X3Byb3ZfcXVl cnkodm9pZCAqcHJvdmN0eCwgaW50IG9wZXJhdGlvbl9pZCwKKysJCQkJICAgICBpbnQgKm5vX3N0 b3JlKQorK3sKKysJc3dpdGNoIChvcGVyYXRpb25faWQpIHsKKysJY2FzZSBPU1NMX09QX0NJUEhF UjoKKysJCXJldHVybiBhZXNfbXRfY2lwaGVyczsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9Cisr CisrY29uc3QgT1NTTF9JVEVNICphZXNfbXRfcHJvdl9yZWFzb25zKHZvaWQgKnByb3ZjdHgpCisr eworKwlyZXR1cm4gcmVhc29uczsKKyt9CisrCisrc3RhdGljIGludCBhZXNfbXRfcHJvdl9nZXRf cGFyYW1zKHZvaWQgKnByb3ZjdHgsIE9TU0xfUEFSQU0gKnBhcmFtcykKKyt7CisrCU9TU0xfUEFS QU0gKnA7CisrCWludCBvayA9IDE7CisrCisrCWNoYXIgKlZFUlNJT049IjEuMCI7CisrCWNoYXIg KkJVSUxEVFlQRT0iYWVzX2N0cl9tdEBocG5zc2gub3JnIjsKKysJCisrCWZvcihwID0gcGFyYW1z OyBwLT5rZXkgIT0gTlVMTDsgcCsrKQorKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAidmVyc2lv biIpID09IDApIHsKKysJCQkqKGNvbnN0IHZvaWQgKiopcC0+ZGF0YSA9IFZFUlNJT047CisrCQkJ cC0+cmV0dXJuX3NpemUgPSBzdHJsZW4oVkVSU0lPTik7CisrCQl9IGVsc2UgaWYgKHN0cmNhc2Vj bXAocC0+a2V5LCAiYnVpbGRpbmZvIikgPT0gMAorKwkJCSAgICYmIEJVSUxEVFlQRVswXSAhPSAn XDAnKSB7CisrCQkJKihjb25zdCB2b2lkICoqKXAtPmRhdGEgPSBCVUlMRFRZUEU7CisrCQkJcC0+ cmV0dXJuX3NpemUgPSBzdHJsZW4oQlVJTERUWVBFKTsKKysJCX0KKysJcmV0dXJuIG9rOworK30K KysKKysvKiBUaGUgZnVuY3Rpb24gdGhhdCB0ZWFycyBkb3duIHRoaXMgcHJvdmlkZXIgKi8KKytz dGF0aWMgdm9pZCBhZXNfbXRfcHJvdl90ZWFyZG93bih2b2lkICp2cHJvdmN0eCkKKyt7CisrICAg IHByb3ZpZGVyX2N0eF9mcmVlKHZwcm92Y3R4KTsKKyt9CisrCisraW50IE9TU0xfcHJvdmlkZXJf aW5pdChjb25zdCBPU1NMX0NPUkVfSEFORExFICpjb3JlLAorKwkJICAgICAgIGNvbnN0IE9TU0xf RElTUEFUQ0ggKmluLAorKwkJICAgICAgIGNvbnN0IE9TU0xfRElTUEFUQ0ggKipvdXQsCisrCQkg ICAgICAgdm9pZCAqKnZwcm92Y3R4KQorK3sKKysgICAgaWYgKCgqdnByb3ZjdHggPSBwcm92aWRl cl9jdHhfbmV3KGNvcmUsIGluKSkgPT0gTlVMTCkKKysJICAgIHJldHVybiAwOworKyAgICAqb3V0 ID0gcHJvdmlkZXJfZnVuY3Rpb25zOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogcGFyYW1l dGVyIGZ1bmN0aW9ucyBmb3IgMjU2fDE5MnwxMjggYml0IGtleSBsZW5ndGhzICovCisrc3RhdGlj IGludCBhZXNfbXRfZ2V0X3BhcmFtc18yNTYoT1NTTF9QQVJBTSBwYXJhbXNbXSkKKyt7CisrCU9T U0xfUEFSQU0gKnA7CisrCWludCBvayA9IDE7CisrCQorKwlmb3IgKHAgPSBwYXJhbXM7IHAtPmtl eSAhPSBOVUxMOyBwKyspIHsKKysJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgImJsb2Nrc2l6ZSIp ID09IDApCisrCQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBBRVNfQkxPQ0tfU0laRSkgPCAw KSB7CisrCQkJCW9rID0gMDsKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKHN0cmNhc2Vj bXAocC0+a2V5LCAia2V5bGVuIikgPT0gMCkgeworKwkJCXNpemVfdCBrZXlsID0gMzI7CisrCQkJ CisrCQkJaWYgKHByb3ZudW1fc2V0X3NpemVfdChwLCBrZXlsKSA8IDApIHsKKysJCQkJb2sgPSAw OworKwkJCQljb250aW51ZTsKKysJCQl9CisrCQl9CisrCX0KKysJcmV0dXJuIG9rOworK30KKysK KytzdGF0aWMgaW50IGFlc19tdF9nZXRfcGFyYW1zXzE5MihPU1NMX1BBUkFNIHBhcmFtc1tdKQor K3sKKysJT1NTTF9QQVJBTSAqcDsKKysJaW50IG9rID0gMTsKKysJCisrCWZvciAocCA9IHBhcmFt czsgcC0+a2V5ICE9IE5VTEw7IHArKykgeworKwkJaWYgKHN0cmNhc2VjbXAocC0+a2V5LCAiYmxv Y2tzaXplIikgPT0gMCkKKysJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIEFFU19CTE9DS19T SVpFKSA8IDApIHsKKysJCQkJb2sgPSAwOworKwkJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAo c3RyY2FzZWNtcChwLT5rZXksICJrZXlsZW4iKSA9PSAwKSB7CisrCQkJc2l6ZV90IGtleWwgPSAy NDsKKysJCQkKKysJCQlpZiAocHJvdm51bV9zZXRfc2l6ZV90KHAsIGtleWwpIDwgMCkgeworKwkJ CQlvayA9IDA7CisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysJCX0KKysJfQorKwlyZXR1cm4gb2s7 CisrfQorKworK3N0YXRpYyBpbnQgYWVzX210X2dldF9wYXJhbXNfMTI4KE9TU0xfUEFSQU0gcGFy YW1zW10pCisreworKwlPU1NMX1BBUkFNICpwOworKwlpbnQgb2sgPSAxOworKwkKKysJZm9yIChw ID0gcGFyYW1zOyBwLT5rZXkgIT0gTlVMTDsgcCsrKSB7CisrCQlpZiAoc3RyY2FzZWNtcChwLT5r ZXksICJibG9ja3NpemUiKSA9PSAwKQorKwkJCWlmIChwcm92bnVtX3NldF9zaXplX3QocCwgQUVT X0JMT0NLX1NJWkUpIDwgMCkgeworKwkJCQlvayA9IDA7CisrCQkJCWNvbnRpbnVlOworKwkJCX0K KysJCWlmIChzdHJjYXNlY21wKHAtPmtleSwgImtleWxlbiIpID09IDApIHsKKysJCQlzaXplX3Qg a2V5bCA9IDE2OworKwkJCQorKwkJCWlmIChwcm92bnVtX3NldF9zaXplX3QocCwga2V5bCkgPCAw KSB7CisrCQkJCW9rID0gMDsKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJfQorKwl9CisrCXJl dHVybiBvazsKKyt9CisrCisrLyogUGFyYW1ldGVycyB0aGF0IGxpYmNyeXB0byBjYW4gZ2V0IGZy b20gdGhpcyBpbXBsZW1lbnRhdGlvbiAqLworK3N0YXRpYyBjb25zdCBPU1NMX1BBUkFNICphZXNf bXRfZ2V0dGFibGVfcGFyYW1zKHZvaWQgKnByb3ZjdHgpCisreworKwlyZXR1cm4gY2lwaGVyX2dl dF9wYXJhbV90YWJsZTsKKyt9CisrCisrc3RhdGljIGNvbnN0IE9TU0xfUEFSQU0gKmFlc19tdF9n ZXR0YWJsZV9jdHhfcGFyYW1zKHZvaWQgKmNjdHgsIHZvaWQgKnByb3ZjdHgpCisreworKwlyZXR1 cm4gY3R4X2dldF9wYXJhbV90YWJsZTsKKyt9CisrCisrc3RhdGljIGludCBhZXNfbXRfZ2V0X2N0 eF9wYXJhbXModm9pZCAqdmN0eCwgT1NTTF9QQVJBTSBwYXJhbXNbXSkKKyt7CisrICAgIHN0cnVj dCBhZXNfbXRfY3R4X3N0ICpjdHggPSB2Y3R4OworKyAgICBpbnQgb2sgPSAxOworKworKyAgICBp ZiAoY3R4LT5rZXlsZW4gPiAwKSB7CisrICAgICAgICBPU1NMX1BBUkFNICpwOworKworKyAgICAg ICAgZm9yIChwID0gcGFyYW1zOyBwLT5rZXkgIT0gTlVMTDsgcCsrKQorKyAgICAgICAgICAgIGlm IChzdHJjYXNlY21wKHAtPmtleSwgImtleWxlbiIpID09IDAKKysgICAgICAgICAgICAgICAgJiYg cHJvdm51bV9zZXRfc2l6ZV90KHAsIGN0eC0+a2V5bGVuKSA8IDApIHsKKysgICAgICAgICAgICAg ICAgb2sgPSAwOworKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICB9Cisr ICAgIH0KKysgICAgcmV0dXJuIG9rOworK30KKysKKysvKiBQYXJhbWV0ZXJzIHRoYXQgbGliY3J5 cHRvIGNhbiBzZW5kIHRvIHRoaXMgaW1wbGVtZW50YXRpb24gKi8KKytzdGF0aWMgY29uc3QgT1NT TF9QQVJBTSAqYWVzX210X3NldHRhYmxlX2N0eF9wYXJhbXModm9pZCAqY2N0eCwgdm9pZCAqcHJv dmN0eCkKKyt7CisrICAgIHJldHVybiBjaXBoZXJfc2V0X3BhcmFtX3RhYmxlOworK30KKysKKytz dGF0aWMgaW50IGFlc19tdF9zZXRfY3R4X3BhcmFtcyh2b2lkICp2Y3R4LCBjb25zdCBPU1NMX1BB UkFNIHBhcmFtc1tdKQorK3sKKysgICAgc3RydWN0IGFlc19tdF9jdHhfc3QgKmN0eCA9IHZjdHg7 CisrICAgIGNvbnN0IE9TU0xfUEFSQU0gKnA7CisrICAgIGludCBvayA9IDE7CisrCisrICAgIGlm IChjdHgtPm9uZ29pbmcpIHsKKysgICAgICAgIEVSUl9yYWlzZShFUlJfSEFORExFKGN0eCksIEFF U19NVF9PTkdPSU5HX09QRVJBVElPTik7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKwor KyAgICBmb3IgKHAgPSBwYXJhbXM7IHAtPmtleSAhPSBOVUxMOyBwKyspCisrICAgICAgICBpZiAo c3RyY2FzZWNtcChwLT5rZXksICJrZXlsZW4iKSA9PSAwKSB7CisrICAgICAgICAgICAgc2l6ZV90 IGtleWwgPSAwOworKworKyAgICAgICAgICAgIGlmIChwcm92bnVtX2dldF9zaXplX3QoJmtleWws IHApIDwgMCkgeworKyAgICAgICAgICAgICAgICBvayA9IDA7CisrICAgICAgICAgICAgICAgIGNv bnRpbnVlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjdHgtPmtleWxlbiA9IGtleWw7 CisrICAgICAgICB9CisrICAgIHJldHVybiBvazsKKyt9CisrCisrI2VuZGlmIC8qV0lUSF9PUEVO U1NMMyovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXIuaCBvcGVuc3NoLTEw LjNwMS9jaXBoZXIuaAorLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2lwaGVyLmgJMjAyNi0wNy0w MiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXIuaAky MDI2LTA3LTAyIDAwOjQ2OjMzLjI4Nzc2Njc1OCArMDIwMAorQEAgLTQyLDExICs0MiwxNyBAQAor ICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNlbmRpZgorICNpbmNsdWRlICJjaXBoZXItY2hh Y2hhcG9seS5oIgorKyNpZmRlZiBXSVRIX09QRU5TU0wKKysjaW5jbHVkZSAiY2lwaGVyLWNoYWNo YXBvbHktbGliY3J5cHRvLW10LmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImNpcGhlci1hZXNjdHIu aCIKKyAKKyAjZGVmaW5lIENJUEhFUl9FTkNSWVBUCQkxCisgI2RlZmluZSBDSVBIRVJfREVDUllQ VAkJMAorIAorKyNkZWZpbmUgQ0lQSEVSX01VTFRJVEhSRUFECTEKKysjZGVmaW5lIENJUEhFUl9T RVJJQUwJCTAKKysKKyBzdHJ1Y3Qgc3NoY2lwaGVyIHsKKyAJY2hhcgkqbmFtZTsKKyAJdV9pbnQJ YmxvY2tfc2l6ZTsKK0BAIC02MCw2ICs2Niw3IEBACisgI2RlZmluZSBDRkxBR19OT05FCQkoMTw8 MykKKyAjZGVmaW5lIENGTEFHX0lOVEVSTkFMCQlDRkxBR19OT05FIC8qIERvbid0IHVzZSAibm9u ZSIgZm9yIHBhY2tldHMgKi8KKyAjaWZkZWYgV0lUSF9PUEVOU1NMCisrI2RlZmluZSBDRkxBR19N VAkJKDE8PDQpCisgCWNvbnN0IEVWUF9DSVBIRVIJKigqZXZwdHlwZSkodm9pZCk7CisgI2Vsc2UK KyAJdm9pZAkqaWdub3JlZDsKK0BAIC02OCwyNCArNzUsMjcgQEAKKyAKKyBzdHJ1Y3Qgc3NoY2lw aGVyX2N0eDsKKyAKKy1jb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICpjaXBoZXJfYnlfbmFtZShjb25z dCBjaGFyICopOworK3N0cnVjdCBzc2hjaXBoZXIgKmNpcGhlcl9ieV9uYW1lKGNvbnN0IGNoYXIg Kik7CisgY29uc3QgY2hhciAqY2lwaGVyX3dhcm5pbmdfbWVzc2FnZShjb25zdCBzdHJ1Y3Qgc3No Y2lwaGVyX2N0eCAqKTsKKyBpbnQJIGNpcGhlcnNfdmFsaWQoY29uc3QgY2hhciAqKTsKKyBjaGFy CSpjaXBoZXJfYWxnX2xpc3QoY2hhciwgaW50KTsKKyBjb25zdCBjaGFyICpjb21wcmVzc2lvbl9h bGdfbGlzdChpbnQpOworIGludAkgY2lwaGVyX2luaXQoc3RydWN0IHNzaGNpcGhlcl9jdHggKios IGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKiwKKy0gICAgY29uc3QgdV9jaGFyICosIHVfaW50LCBj b25zdCB1X2NoYXIgKiwgdV9pbnQsIGludCk7CisrICAgIGNvbnN0IHVfY2hhciAqLCB1X2ludCwg Y29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCwgaW50LCBpbnQpOworIGludAkgY2lwaGVyX2Ny eXB0KHN0cnVjdCBzc2hjaXBoZXJfY3R4ICosIHVfaW50LCB1X2NoYXIgKiwgY29uc3QgdV9jaGFy ICosCisgICAgIHVfaW50LCB1X2ludCwgdV9pbnQpOworIGludAkgY2lwaGVyX2dldF9sZW5ndGgo c3RydWN0IHNzaGNpcGhlcl9jdHggKiwgdV9pbnQgKiwgdV9pbnQsCisgICAgIGNvbnN0IHVfY2hh ciAqLCB1X2ludCk7Cisgdm9pZAkgY2lwaGVyX2ZyZWUoc3RydWN0IHNzaGNpcGhlcl9jdHggKik7 CisgdV9pbnQJIGNpcGhlcl9ibG9ja3NpemUoY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKKyt1 aW50NjRfdCBjaXBoZXJfcmVrZXlfYmxvY2tzKGNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKik7Cisg dV9pbnQJIGNpcGhlcl9rZXlsZW4oY29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKKyB1X2ludAkg Y2lwaGVyX3NlY2xlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOworIHVfaW50CSBjaXBoZXJf YXV0aGxlbihjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVyICopOworIHVfaW50CSBjaXBoZXJfaXZsZW4o Y29uc3Qgc3RydWN0IHNzaGNpcGhlciAqKTsKKyB1X2ludAkgY2lwaGVyX2lzX2NiYyhjb25zdCBz dHJ1Y3Qgc3NoY2lwaGVyICopOworK3ZvaWQJIGNpcGhlcl9yZXNldF9tdWx0aXRocmVhZGVkKHZv aWQpOworK2NvbnN0IGNoYXIgKmNpcGhlcl9jdHhfbmFtZShjb25zdCBzdHJ1Y3Qgc3NoY2lwaGVy X2N0eCAqKTsKKyAKKyB1X2ludAkgY2lwaGVyX2N0eF9pc19wbGFpbnRleHQoc3RydWN0IHNzaGNp cGhlcl9jdHggKik7CisgCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9jaXBoZXItc3dp dGNoLmMgb3BlbnNzaC0xMC4zcDEvY2lwaGVyLXN3aXRjaC5jCistLS0gb3BlbnNzaC0xMC4zcDEu b3JpZy9jaXBoZXItc3dpdGNoLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItc3dpdGNoLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43 MjIzNjMyNjggKzAyMDAKK0BAIC0wLDAgKzEsNzMgQEAKKysvKgorKyAqIENvcHlyaWdodCAoYykg MjAyMyBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHku CisrICoKKysgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqCisr ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKKysgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNl LgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisrICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKKysgKiBpZiBub3QsIHNl ZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgorKyAqCisrICovCisrCisrLyog VGhpcyBwcm92aWRlcyB0aGUgZnVuY3Rpb24gdG8gc3dpdGNoIGZyb20gYSBzZXJpYWwgdG8gcGFy YWxsZWwKKysgKiBjaXBoZXIuIFRoaXMgaGFzIGJlZW4gbW92ZWQgaW50byBpdCdzIG93biBmaWxl IGluIG9yZGVyIHRvIG1ha2UgaXQKKysgKiBhdmFpbGFibGUgdG8gYm90aCB0aGUgY2xpZW50IGFu ZCBzZXJ2ZXIgd2l0aG91dCBoYXZpbmcgdG8gY2x1dHRlcgorKyAqIHVwIG90aGVyIGZpbGVzLgor KyAqLworKworKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgImNpcGhlci5oIgorKyNpbmNsdWRlICJs b2cuaCIKKysjaW5jbHVkZSAicGFja2V0LmgiCisrCisrCisrLyogaWYgd2UgYXJlIHVzaW5nIGEg cGFyYWxsZWwgY2lwaGVyIHRoZXJlIGNhbiBiZSBpc3N1ZXMgaW4gZWl0aGVyCisrICogYSBmb3Jr IG9yIHNhbmRib3guIEVzc2VudGlhbGx5LCBpZiB3ZSBzd2l0Y2ggdG9vIGVhcmx5IHRoZQorKyAq IHRocmVhZHMgZ2V0IGxvc3QgYW5kIHRoZSBhcHBsaWNhdGlvbiBoYW5ncy4gU28gd2hhdCB3ZSBk byBpcworKyAqIHRlc3QgaWYgZWl0aGVyIHRoZSBzZW5kIG9yIHJlY2VpdmUgY29udGV4dCBjaXBo ZXIgbmFtZQorKyAqIG1hdGNoZXMgdGhlIGtub3duIGF2YWlsYWJsZSBwYXJhbGxlbCBjaXBoZXJz LiBJZiBpdCBkb2VzCisrICogdGhlbiB3ZSBmb3JjZSBhIHJla2V5IHdoaWNoIGF1dG9tYXRpY2Fs bHkgbG9hZHMgdGhlIHBhcmFsbGVsCisrICogY2lwaGVyLiAqLworKworK3ZvaWQKKytjaXBoZXJf c3dpdGNoKHN0cnVjdCBzc2ggKnNzaCkgeworKyNpZmRlZiBXSVRIX09QRU5TU0wKKysJLyogZ2V0 IHRoZSBzZW5kIGFuZCByZWNlaXZlIGNvbnRleHQgYW5kIGV4dHJhY3QgdGhlIGNpcGhlciBuYW1l ICovCisrCWNvbnN0IHZvaWQgKnNlbmRfY2MgPSBzc2hfcGFja2V0X2dldF9zZW5kX2NvbnRleHQo c3NoKTsKKysJY29uc3Qgdm9pZCAqcmVjdl9jYyA9IHNzaF9wYWNrZXRfZ2V0X3JlY2VpdmVfY29u dGV4dChzc2gpOworKwljb25zdCBjaGFyICpzZW5kID0gY2lwaGVyX2N0eF9uYW1lKHNlbmRfY2Mp OworKwljb25zdCBjaGFyICpyZWN2ID0gY2lwaGVyX2N0eF9uYW1lKHJlY3ZfY2MpOworKworKwlk ZWJ1Z19mKCJTZW5kOiAlcyBSZWN2OiAlcyIsIHNlbmQsIHJlY3YpOworKwkKKysJLyogaWYgdGhl IG5hbWUgb2YgdGhlIGNpcGhlciBtYXRjaGVzIHRoZW4gd2Ugc2V0IHRoZSBjb250ZXh0CisrCSAq IHRvIGF1dGhlbnRpY2F0ZWQgKGl0IGxpa2VseSBhbHJlYWR5IGlzIHRob3VnaCkgYW5kIHRoZW4K KysJICogZm9yY2UgdGhlIHJla2V5LiBFaXRoZXIgc2lkZSBjYW4gZG8gdGhpcy4gT25lIGRvd25z aWRlIG9mCisrCSAqIHRoaXMgbWV0aG9kIGlzIHRoYXQgYm90aCBzaWRlcyBjYW4gcmVxdWVzdCBh IHJla2V5IHNvIHlvdQorKwkgKiBjYW4gZW5kIHVwIGR1cGxpY2F0aW5nIHdvcmsuIFRoaXMgaXMg YW5ub3lpbmcgYnV0IHRoZQorKwkgKiBwZXJmb3JtYW5jZSBnYWlucyBtYWtlIGl0IHdvcnRod2hp bGUuIEFsc28gSQorKwkgKiB1c2Ugc3Ryc3RyIGhlcmUgYmVjYXVzZSBzdHJjbXAgd291bGQgcmVx dWlyZSBhIDYgcGFydAorKwkgKiBpZiBzdGF0ZW1lbnQgKi8KKysJaWYgKHN0cnN0cihzZW5kLCAi Y3RyIikgfHwgc3Ryc3RyKHJlY3YsICJjdHIiKSkgeworKwkJZGVidWcoIlNlcmlhbCB0byBwYXJh bGxlbCBBRVMtQ1RSIGNpcGhlciBzd2FwIik7CisrCQkvKiBjaXBoZXJfcmVzZXRfbXVsdGl0aHJl YWRlZCgpOyAqLworKwkJc3NoX3BhY2tldF9zZXRfYXV0aGVudGljYXRlZChzc2gpOworKwkJcGFj a2V0X3JlcXVlc3RfcmVrZXlpbmcoKTsKKysJfQorKwkvKiBkbyB0aGUgc2FtZSBmb3IgbXVsdGl0 aHJlYWRlZCBjaGFjaGEyMCBidXQgd2l0aCBzdHJjbXAgKi8KKysJaWYgKChzdHJjbXAoc2VuZCwg ImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tIikgPT0gMCkgfHwKKysJICAgIChzdHJjbXAo cmVjdiwgImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5zc2guY29tIikgPT0gMCkpIHsKKysJCWRlYnVn KCJTZXJpYWwgdG8gcGFyYWxsZWwgQ2hhY2hhMjAtcG9seTEzMDUgY2lwaGVyIHN3YXAiKTsKKysJ CXNzaF9wYWNrZXRfc2V0X2F1dGhlbnRpY2F0ZWQoc3NoKTsKKysJCXBhY2tldF9yZXF1ZXN0X3Jl a2V5aW5nKCk7CisrCX0KKysjZW5kaWYKKyt9CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9jaXBoZXItc3dpdGNoLmggb3BlbnNzaC0xMC4zcDEvY2lwaGVyLXN3aXRjaC5oCistLS0gb3Bl bnNzaC0xMC4zcDEub3JpZy9jaXBoZXItc3dpdGNoLmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9jaXBoZXItc3dpdGNoLmgJMjAyNi0wNy0w MiAwMDoyNzoyOS43MjI0MTAzNDEgKzAyMDAKK0BAIC0wLDAgKzEsMTggQEAKKysvKgorKyAqIENv cHlyaWdodCAoYykgMjAxNSBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9u IFVuaXZlcnNpdHkuCisrICoKKysgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2Mu ZWR1PgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhl IE1JVCBMaWNlbnNlLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisrICogQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZ IG9yCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIE1JVCBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsKKysg KiBpZiBub3QsIHNlZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlULgorKyAqCisr ICovCisrCisrdm9pZCBjaXBoZXJfc3dpdGNoIChzdHJ1Y3Qgc3NoICopOworZGlmZiAtTnVyIG9w ZW5zc2gtMTAuM3AxLm9yaWcvY2xpZW50bG9vcC5jIG9wZW5zc2gtMTAuM3AxL2NsaWVudGxvb3Au YworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY2xpZW50bG9vcC5jCTIwMjYtMDctMDIgMDA6Mjc6 MDYuMTAzMjc1MzA3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvY2xpZW50bG9vcC5jCTIwMjYt MDctMDIgMDA6Mjc6MjkuNzIyNjAxNDYxICswMjAwCitAQCAtMTAwLDYgKzEwMCw3IEBACisgI2lu Y2x1ZGUgIm1hdGNoLmgiCisgI2luY2x1ZGUgInNzaGVyci5oIgorICNpbmNsdWRlICJob3N0Zmls ZS5oIgorKyNpbmNsdWRlICJtZXRyaWNzLmgiCisgCisgI2lmZGVmIEdTU0FQSQorICNpbmNsdWRl ICJzc2gtZ3NzLmgiCitAQCAtMTU4LDYgKzE1OSwxMCBAQAorIAorIHN0YXRpYyB2b2lkIGNsaWVu dF9pbml0X2Rpc3BhdGNoKHN0cnVjdCBzc2ggKnNzaCk7CisgaW50CXNlc3Npb25faWRlbnQgPSAt MTsKKytpbnQJbWV0cmljc19oZHJfcmVtb3RlX2ZsYWcgPSAwOworK2ludAltZXRyaWNzX2hkcl9s b2NhbF9mbGFnID0gMDsKKytpbnQJcmVtb3RlX25vX3BvbGxfZmxhZyA9IDA7CisraW50CWxvY2Fs X25vX3BvbGxfZmxhZyA9IDA7CisgCisgLyogVHJhY2sgZXNjYXBlIHBlciBwcm90bzIgY2hhbm5l bCAqLworIHN0cnVjdCBlc2NhcGVfZmlsdGVyX2N0eCB7CitAQCAtMTg0LDYgKzE4OSw4IEBACisg c3RhdGljIHN0cnVjdCBnbG9iYWxfY29uZmlybXMgZ2xvYmFsX2NvbmZpcm1zID0KKyAgICAgVEFJ TFFfSEVBRF9JTklUSUFMSVpFUihnbG9iYWxfY29uZmlybXMpOworIAorK3ZvaWQgY2xpZW50X3Jl cXVlc3RfbWV0cmljcyhzdHJ1Y3Qgc3NoICopOworKworIHN0YXRpYyB2b2lkIHF1aXRfbWVzc2Fn ZShjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAo cHJpbnRmLCAxLCAyKSkpOworIAorQEAgLTE0NjAsNiArMTQ2Nyw3IEBACisgCWRvdWJsZSBzdGFy dF90aW1lLCB0b3RhbF90aW1lOworIAlpbnQgaW50ZXJhY3RpdmUgPSAtMSwgY2hhbm5lbF9kaWRf ZW5xdWV1ZSA9IDAsIHI7CisgCXVpbnQ2NF90IGlieXRlcywgb2J5dGVzOworKwl0aW1lX3QgcHJl dmlvdXNfdGltZTsKKyAJaW50IGNvbm5faW5fcmVhZHksIGNvbm5fb3V0X3JlYWR5OworIAlzaWdz ZXRfdCBic2lnc2V0LCBvc2lnc2V0OworIAorQEAgLTE1MDMsNiArMTUxMSw3IEBACisgCWNsaWVu dF9yZXBsZWRnZSgpOworIAorIAlzdGFydF90aW1lID0gbW9ub3RpbWVfZG91YmxlKCk7CisrCXBy ZXZpb3VzX3RpbWUgPSB0aW1lKE5VTEwpOyAvKiBmb3IgbWV0cmljcyBwb2xsaW5nICovCisgCisg CS8qIEluaXRpYWxpemUgdmFyaWFibGVzLiAqLworIAlsYXN0X3dhc19jciA9IDE7CitAQCAtMTU0 Nyw2ICsxNTU2LDggQEAKKyAJfQorIAorIAlzY2hlZHVsZV9zZXJ2ZXJfYWxpdmVfY2hlY2soKTsK KysJaWYgKG9wdGlvbnMubWV0cmljcykKKysJCWNsaWVudF9yZXF1ZXN0X21ldHJpY3Moc3NoKTsg LyogaW5pdGlhbCBtZXRyaWNzIHBvbGxpbmcgKi8KKyAKKyAJaWYgKHNpZ2VtcHR5c2V0KCZic2ln c2V0KSA9PSAtMSB8fAorIAkgICAgc2lnYWRkc2V0KCZic2lnc2V0LCBTSUdIVVApID09IC0xIHx8 CitAQCAtMTU1OSw4ICsxNTcwLDI3IEBACisgCQllcnJvcl9mKCJic2lnc2V0IHNldHVwOiAlcyIs IHN0cmVycm9yKGVycm5vKSk7CisgI2VuZGlmCisgCisrCS8qCisrCSAqIEJsb2NrIHRlcm1pbmF0 aW9uL2luZm8gc2lnbmFscyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBtYWluIGxvb3AuCisrCSAq IHBwb2xsKCkgYXRvbWljYWxseSByZXN0b3JlcyB0aGUgb2xkIG1hc2sgKG9zaWdzZXQpIHdoaWxl IHdhaXRpbmcsCisrCSAqIHNvIHNpZ25hbHMgYXJlIHN0aWxsIGRlbGl2ZXJlZCBwcm9tcHRseSBk dXJpbmcgdGhlIHBvbGwuICBLZWVwaW5nCisrCSAqIHRoZW0gYmxvY2tlZCBkdXJpbmcgdGhlIGRh dGEtcHJvY2Vzc2luZyBwaGFzZSBhdm9pZHMgdHdvCisrCSAqIHNpZ3Byb2NtYXNrIHN5c2NhbGxz IHBlciBpdGVyYXRpb24gKH43Nmsvc2VjIGR1cmluZyBidWxrIHRyYW5zZmVyLAorKwkgKiB+NS42 JSBvZiBDUFUgaW4gcHJvZmlsZXMpLiAgU2lnbmFsLWZsYWcgY2hlY2tzIChxdWl0X3BlbmRpbmcs CisrCSAqIHNpZ2luZm9fcmVjZWl2ZWQpIHN0aWxsIHdvcmsgYmVjYXVzZSB0aGUgaGFuZGxlcnMg cnVuIGluc2lkZQorKwkgKiBwcG9sbCdzIGF0b21pYyB1bmJsb2NrIHdpbmRvdy4KKysJICovCisr CWlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZic2lnc2V0LCAmb3NpZ3NldCkgPT0gLTEpCisr CQllcnJvcl9mKCJic2lnc2V0IHNpZ3Byb2NtYXNrOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cisr CisgCS8qIE1haW4gbG9vcCBvZiB0aGUgY2xpZW50IGZvciB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lv biBtb2RlLiAqLworIAl3aGlsZSAoIXF1aXRfcGVuZGluZykgeworKwkJaWYgKG9wdGlvbnMubWV0 cmljcykgeworKwkJCWlmICgodGltZShOVUxMKSAtIHByZXZpb3VzX3RpbWUpID49IG9wdGlvbnMu bWV0cmljc19pbnRlcnZhbCkgeworKwkJCQljbGllbnRfcmVxdWVzdF9tZXRyaWNzKHNzaCk7Cisr CQkJCXByZXZpb3VzX3RpbWUgPSB0aW1lKE5VTEwpOworKwkJCX0KKysJCX0KKyAJCWNoYW5uZWxf ZGlkX2VucXVldWUgPSAwOworIAorIAkJLyogUHJvY2VzcyBidWZmZXJlZCBwYWNrZXRzIHNlbnQg YnkgdGhlIHNlcnZlci4gKi8KK0BAIC0xNTk1LDggKzE2MjUsNiBAQAorIAkJICogV2FpdCB1bnRp bCB3ZSBoYXZlIHNvbWV0aGluZyB0byBkbyAoc29tZXRoaW5nIGJlY29tZXMKKyAJCSAqIGF2YWls YWJsZSBvbiBvbmUgb2YgdGhlIGRlc2NyaXB0b3JzKS4KKyAJCSAqLworLQkJaWYgKHNpZ3Byb2Nt YXNrKFNJR19CTE9DSywgJmJzaWdzZXQsICZvc2lnc2V0KSA9PSAtMSkKKy0JCQllcnJvcl9mKCJi c2lnc2V0IHNpZ3Byb2NtYXNrOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgCQlpZiAoc2lnaW5m b19yZWNlaXZlZCkgeworIAkJCXNpZ2luZm9fcmVjZWl2ZWQgPSAwOworIAkJCWNoYW5uZWxfcmVw b3J0X29wZW4oc3NoLCBTWVNMT0dfTEVWRUxfSU5GTyk7CitAQCAtMTYwNiw4ICsxNjM0LDYgQEAK KyAJCWNsaWVudF93YWl0X3VudGlsX2Nhbl9kb19zb21ldGhpbmcoc3NoLCAmcGZkLCAmbnBmZF9h bGxvYywKKyAJCSAgICAmbnBmZF9hY3RpdmUsIGNoYW5uZWxfZGlkX2VucXVldWUsICZvc2lnc2V0 LAorIAkJICAgICZjb25uX2luX3JlYWR5LCAmY29ubl9vdXRfcmVhZHkpOworLQkJaWYgKHNpZ3By b2NtYXNrKFNJR19TRVRNQVNLLCAmb3NpZ3NldCwgTlVMTCkgPT0gLTEpCistCQkJZXJyb3JfZigi b3NpZ3NldCBzaWdwcm9jbWFzazogJXMiLCBzdHJlcnJvcihlcnJubykpOworIAorIAkJaWYgKHF1 aXRfcGVuZGluZykKKyAJCQlicmVhazsKK0BAIC0xNjYzLDYgKzE2ODksMTQgQEAKKyAJCQl9Cisg CQl9CisgCX0KKysKKysJLyogUmVzdG9yZSB0aGUgcHJlLWxvb3Agc2lnbmFsIG1hc2sgbm93IHRo YXQgd2UgYXJlIGRvbmUgcG9sbGluZy4gKi8KKysJaWYgKHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNL LCAmb3NpZ3NldCwgTlVMTCkgPT0gLTEpCisrCQllcnJvcl9mKCJvc2lnc2V0IHNpZ3Byb2NtYXNr OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisrCisrCWlmIChvcHRpb25zLm1ldHJpY3MpCisrCQlj bGllbnRfcmVxdWVzdF9tZXRyaWNzKHNzaCk7IC8qIGZpbmFsIG1ldHJpY3MgcG9sbGluZyAqLwor KworIAlmcmVlKHBmZCk7CisgCisgCS8qIFRlcm1pbmF0ZSB0aGUgc2Vzc2lvbi4gKi8KK0BAIC0y Njc2LDYgKzI3MTAsMTY3IEBACisgCXJldHVybiAxOworIH0KKyAKKysvKiB0YWtlIHRoZSByZXNw b25zZSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHBhcnNlIG91dCB0aGUgZGF0YS4KKysgKiB0aGUgX2N0 eCBzaG91bGQgYmUgbnVsbC4gSXQncyBqdXN0IGhlcmUgYmVjYXVzZSB0aGUgZm9ybWF0CisrICog b2YgdGhlIGNhbGxiYWNrIGhhbmRsZXIgZXhwZWN0cyBpdC4gTGlrZXdpc2UsIHNlcSBpcworKyAq IG5vdCB1c2VkLiAqLworK3N0YXRpYyB2b2lkCisrY2xpZW50X3Byb2Nlc3NfcmVxdWVzdF9tZXRy aWNzIChzdHJ1Y3Qgc3NoICpzc2gsIGludCB0eXBlLCB1X2ludDMyX3Qgc2VxLCB2b2lkICpfY3R4 KSB7CisrCXN0cnVjdCB0Y3BfaW5mbyBsb2NhbF90Y3BfaW5mbzsKKysJY29uc3QgdV9jaGFyICpi bG9iOworKwlGSUxFICpyZW1mcHRyOworKwlGSUxFICpsb2NhbGZwdHI7CisrCWNoYXIgcmVtZmls ZW5hbWVbMTAyNF07CisrCWNoYXIgbG9jYWxmaWxlbmFtZVsxMDI0XTsKKysJdGltZV90IG5vdzsK KysJc3RydWN0IHRtICppbmZvOworKwljaGFyIHRpbWVzdGFtcFs0MF07CisrCWNoYXIgKm1ldHJp Y3NzdHJpbmcgPSBOVUxMOworKwlzaXplX3QgdGNwaV9sZW4sIGxlbiA9IDA7CisrCWJpbm4gKm1l dHJpY3NvYmogPSBOVUxMOworKwlpbnQgciwga2VybmVsX3ZlcnNpb24gPSAwOworKworKwl0aW1l KCZub3cpOworKwlpbmZvID0gbG9jYWx0aW1lKCZub3cpOworKwlzdHJmdGltZSh0aW1lc3RhbXAs IDQwLCAiJWQtJW0tJVkgJUg6JU06JVMiLCBpbmZvKTsKKysKKysJLyogbWFsbG9jIHRoZSBzdHJp bmcgMUtCIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggKi8KKysJbWV0cmljc3N0cmluZyA9IG1hbGxv YygxMDI0KTsKKysKKysJLyogZ2V0IHRoZSBsb2NhbCBzb2NrZXQgaW5mb3JtYXRpb24gKi8KKysJ aW50IHNvY2tfaW4gPSBzc2hfcGFja2V0X2dldF9jb25uZWN0aW9uX2luKHNzaCk7CisrCisrCS8q IHRoZSB1c2VyIGNhbiBzcGVjaWZ5IGEgbmFtZS9wYXRoIHdpdGggb3B0aW9ucy5tZXRyaWNzX3Bh dGgKKysJICogYnV0IGlmIGl0J3Mgbm90IGRlZmluZWQgd2UnbGwgdXNlIGEgZGVmYXVsdCBuYW1l LiBJbiBlaXRoZXIgY2FzZQorKwkgKiB0aGUgbmFtZSB3aWxsIGhhdmUgYSBzdWZmaXggb2YgbG9j YWwgZm9yIHRoZSBsb2NhbCBkYXRhIGFuZCByZW1vdGUgZm9yCisrCSAqIHRoZSByZW1vdGUgZGF0 YSAqLworKwlpZiAob3B0aW9ucy5tZXRyaWNzX3BhdGggPT0gTlVMTCkgeworKwkJc25wcmludGYo cmVtZmlsZW5hbWUsIDEwMjQsICIlcyIsICIuL3NzaF9zdGFja19tZXRyaWNzLnJlbW90ZSIpOwor KwkJc25wcmludGYobG9jYWxmaWxlbmFtZSwgMTAyNCwgIiVzIiwgIi4vc3NoX3N0YWNrX21ldHJp Y3MubG9jYWwiKTsKKysJfSBlbHNlIHsKKysJCXNucHJpbnRmKHJlbWZpbGVuYW1lLCAxMDI0LCAi JXMuJXMiLCBvcHRpb25zLm1ldHJpY3NfcGF0aCwgInJlbW90ZSIpOworKwkJc25wcmludGYobG9j YWxmaWxlbmFtZSwgMTAyNCwgIiVzLiVzIiwgb3B0aW9ucy5tZXRyaWNzX3BhdGgsICJsb2NhbCIp OworKwl9CisrCisrCS8qIHNob3VsZCBiZSB0eXBlIDgxIGFuZCBpZiBpdCdzIG5vdCB0aGVuIGl0 cyBsaWtsZXkgdGhhdAorKwkqIHRoZSByZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBwb2xsaW5nLiBX ZSBjYW4gc3RpbGwgZ2V0IGxvY2FsIGRhdGEgdGhvdWdoCisrCSovCisrCWlmICh0eXBlICE9IFNT SDJfTVNHX1JFUVVFU1RfU1VDQ0VTUykgeworKwkJaWYgKHJlbW90ZV9ub19wb2xsX2ZsYWcgPT0g MCkgeworKwkJCWVycm9yKCJSZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBzdGFjayBtZXRyaWMgcG9s bGluZy4gTG9jYWwgZGF0YSBvbmx5LiIpOworKwkJCXJlbW90ZV9ub19wb2xsX2ZsYWcgPSAxOwor KwkJfQorKwkJZ290byBsb2NhbG9ubHk7CisrCX0KKysKKysJLyogb3BlbiB0aGUgZmlsZSBoYW5k bGUgdG8gd3JpdGUgdGhlIHJlbW90ZSBkYXRhKi8KKysJcmVtZnB0ciA9IGZvcGVuKHJlbWZpbGVu YW1lLCAiYSIpOworKwlpZiAocmVtZnB0ciA9PSBOVUxMKQorKwkJZmF0YWwoIkVycm9yIG9wZW5p bmcgJXM6ICVzIiwgcmVtZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisrCisrCS8qIHJlYWQg dGhlIGVudGlyZSBwYWNrZXQgc3RyaW5nIGludG8gYmxvYgorKwkgKiBibG9iIGhhcyB0byBiZSBh IGNvbnN0IHVjaGFyIGFzIHRoYXQncyB3aGF0IHN0cmluZ19kaXJlY3QgZXhwZWN0cworKwkgKiB3 ZSBjYXN0IGl0IGFzIGEgdm9pZCBmb3IgdGhlIGJpbm4gZnVuY3Rpb25zICovCisrCXNzaHBrdF9n ZXRfc3RyaW5nX2RpcmVjdChzc2gsICZibG9iLCAmbGVuKTsKKysJaWYgKGxlbiA9PSAwKSB7Cisr CQkvKiByZWNlaXZlZCBubyBkYXRhLiB3aGljaCBpcyB3ZWlyZCAqLworKwkJZXJyb3IoIlJlY2Vp dmVkIG5vIHJlbW90ZSBtZXRyaWNzIGRhdGEuIENvbnRpbnVpbmcuIik7CisrCX0KKysKKysJLyog Z2V0IHRoZSBrZXJuZWwgdmVyc2lvbiBwcmludGluZyB0aGUgaGVhZGVyICovCisrCWtlcm5lbF92 ZXJzaW9uID0gYmlubl9vYmplY3RfaW50MzIoKHZvaWQgKilibG9iLCAia2VybmVsX3ZlcnNpb24i KTsKKysKKysJLyogY3JlYXRlIGEgc3RyaW5nIG9mIHRoZSBkYXRhIGZyb20gdGhlIGJpbm4gb2Jq ZWN0IGJsb2IgKi8KKysJbWV0cmljc19yZWFkX2Jpbm5fb2JqZWN0KCh2b2lkICopYmxvYiwgbWV0 cmljc3N0cmluZyk7CisrCisrCS8qIGhhdmUgd2UgcHJpbnRlZCB0aGUgaGVhZGVyPyAqLworKwlp ZiAobWV0cmljc19oZHJfcmVtb3RlX2ZsYWcgPT0gMCkgeworKwkJbWV0cmljc19wcmludF9oZWFk ZXIocmVtZnB0ciwgIlJFTU9URSBDT05ORUNUSU9OIiwga2VybmVsX3ZlcnNpb24pOworKwkJbWV0 cmljc19oZHJfcmVtb3RlX2ZsYWcgPSAxOworKwl9CisrCWZwcmludGYocmVtZnB0ciwgIiVzLCAi LCB0aW1lc3RhbXApOworKwlmcHJpbnRmKHJlbWZwdHIsICIlc1xuIiwgbWV0cmljc3N0cmluZyk7 CisrCisrCS8qIGNsb3NlIHJlbW90ZSBmaWxlIHBvaW50ZXIqLworKwlmY2xvc2UocmVtZnB0cik7 CisrCisrCS8qIGdvdCB0aGUgcmVtb3RlIGRhdGEsIG5vdyBnZXQgdGhlIGxvY2FsICovCisrbG9j YWxvbmx5OgorKy8qIFRDUF9JTkZPIGlzIGRlZmluZWQgaW4gbWV0cmljcy5oKi8KKysjaWYgIWRl ZmluZWQgVENQX0lORk8KKysJaWYgKGxvY2FsX25vX3BvbGxfZmxhZyA9PSAwKSB7CisrCQllcnJv cigiTG9jYWwgaG9zdCBkb2VzIG5vdCBzdXBwb3J0IG1ldHJpYyBwb2xsaW5nLiBSZW1vdGUgZGF0 YSBvbmx5LiIpOworKwkJbG9jYWxfbm9fcG9sbF9mbGFnID0gMTsKKysJfQorKyNlbHNlCisrCS8q IG9wZW4gZmlsZSBoYW5kbGUgZm9yIGxvY2FsIGRhdGEgKi8KKysJbG9jYWxmcHRyID0gZm9wZW4o bG9jYWxmaWxlbmFtZSwgImEiKTsKKysJaWYobG9jYWxmcHRyID09IE5VTEwpCisrCQlmYXRhbCgi RXJyb3Igb3BlbmluZyAlczogJXMiLCBsb2NhbGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwor KworKwkvKiBjcmVhdGUgdGhlIGJpbm4gb2JqZWN0Ki8KKysJbWV0cmljc29iaiA9IGJpbm5fb2Jq ZWN0KCk7CisrCWlmIChtZXRyaWNzb2JqID09IE5VTEwpIHsKKysJCWZhdGFsKCJDb3VsZCBub3Qg Y3JlYXRlIG1ldHJpY3Mgb2JqZWN0Iik7CisrCX0KKysKKysJdGNwaV9sZW4gPSAoc2l6ZV90KXNp emVvZihsb2NhbF90Y3BfaW5mbyk7CisrCWlmICgociA9IGdldHNvY2tvcHQoc29ja19pbiwgSVBQ Uk9UT19UQ1AsIFRDUF9JTkZPLCAodm9pZCAqKSZsb2NhbF90Y3BfaW5mbywKKysJCQkgICAgKHNv Y2tsZW5fdCAqKSZ0Y3BpX2xlbikpICE9IDApeworKwkJZXJyb3IoIkNvdWxkIG5vdCByZWFkIHRj cF9pbmZvIGZyb20gc29ja2V0Iik7CisrCQlnb3RvIG91dDsKKysJfQorKworKwkvKiB3ZSB3cml0 ZSBhbmQgcmVhZCB0byBhIGJpbm4gb2JqZWN0IGJlY2F1c2UgaXQgbGV0cyB1cworKwkgKiBmb3Jt YXQgdGhlIGRhdGEgY29uc2lzdGVudGx5ICovCisrCW1ldHJpY3Nfd3JpdGVfYmlubl9vYmplY3Qo JmxvY2FsX3RjcF9pbmZvLCBtZXRyaWNzb2JqKTsKKysKKysJLyogY3JlYXRlIGEgc3RyaW5nIG9m IHRoZSBkYXRhIGZyb20gdGhlIGJpbm4gb2JqZWN0IG1ldHJpY3NvYmogKi8KKysJbWV0cmljc19y ZWFkX2Jpbm5fb2JqZWN0KCh2b2lkICopbWV0cmljc29iaiwgbWV0cmljc3N0cmluZyk7CisrCisr CS8qIGdldCB0aGUga2VybmVsIHZlcnNpb24gcHJpbnRpbmcgdGhlIGhlYWRlciAqLworKwlrZXJu ZWxfdmVyc2lvbiA9IGJpbm5fb2JqZWN0X2ludDMyKG1ldHJpY3NvYmosICJrZXJuZWxfdmVyc2lv biIpOworKworKwlpZiAobWV0cmljc19oZHJfbG9jYWxfZmxhZyA9PSAwKSB7CisrCQltZXRyaWNz X3ByaW50X2hlYWRlcihsb2NhbGZwdHIsICJMT0NBTCBDT05ORUNUSU9OIiwga2VybmVsX3ZlcnNp b24pOworKwkJbWV0cmljc19oZHJfbG9jYWxfZmxhZyA9IDE7CisrCX0KKysKKysJZnByaW50Zihs b2NhbGZwdHIsICIlcywgIiwgdGltZXN0YW1wKTsKKysJZnByaW50Zihsb2NhbGZwdHIsICIlc1xu IiwgbWV0cmljc3N0cmluZyk7CisrCWZjbG9zZSAobG9jYWxmcHRyKTsKKysjZW5kaWYgLyogVENQ X0lORk8gKi8KKytvdXQ6CisrCWZyZWUobWV0cmljc3N0cmluZyk7CisrfQorKworKy8qIFVzZSB0 aGUgU1NIMl9NU0dfR0xPQkFMX1JFUVVFU1QgcHJvdG9jb2wgdG8KKysgKiBhc2sgdGhlIHNlcnZl ciB0byBzZW5kIG1ldHJpY3MgYmFjayB0byB0aGUgY2xpZW50LgorKyAqIHdlIHVzZSB0aGUgbm9u LWNhbm9uaWNhbCBzdHJpbmcgc3RhY2stbWV0cmljc0BocG5zc2gub3JnCisrICogdG8gaW5kaWNh dGUgdGhlIHR5cGUgb2YgcmVxdWVzdCB3ZSB3YW50LiBJZiB0aGUgcmVjZWl2ZXIgZG9lc24ndAor KyAqIHVuZGVyc3RhbmQgaXQgdGhlbiB0aGUgcmVzcG9uc2UgaW5kaWFjdGVzIGEgZmFpbHVyZS4K KysgKiBJIGNhbiBwcm9iYWJseSBkbyB0aGlzIGJ5IHVzaW5nIGNsaW50X2lucHV0X2dsb2JhbF9y ZXF1ZXN0IGJ1dAorKyAqIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLgorKyAqLwor K3ZvaWQgY2xpZW50X3JlcXVlc3RfbWV0cmljcyhzdHJ1Y3Qgc3NoICpzc2gpIHsKKysJaW50IHI7 CisrCisrCWRlYnVnX2YoIkFza2luZyBzZXJ2ZXIgZm9yIFRDUCBzdGFjayBtZXRyaWNzIik7Cisr CS8qIGNyZWF0ZSBhIHBha2NldCBvZiBHTE9CQUxfUkVRVUVTVCB0eXBlICovCisrCWlmICgociA9 IHNzaHBrdF9zdGFydChzc2gsIFNTSDJfTVNHX0dMT0JBTF9SRVFVRVNUKSkgIT0gMCB8fAorKwkg ICAgLyogZGVmaW5lIHRoZSB0eXBlIG9mIEdMT0JBTF9SRVFVRVNUIG1lc3NhZ2UgKi8KKysJICAg IChyID0gc3NocGt0X3B1dF9jc3RyaW5nKHNzaCwKKysJICAgICJzdGFjay1tZXRyaWNzQGhwbnNz aC5vcmciKSkgIT0gMCB8fAorKwkgICAgLyogaW5kaWNhdGUgaWYgd2Ugd2FudCBhIHJlc3BvbnNl LiAxIGZvciB5ZXMgMCBmb3Igbm8gKi8KKysJICAgIChyID0gc3NocGt0X3B1dF91OChzc2gsIDEp KSAhPSAwKQorKwkJZmF0YWxfZnIociwgInByZXBhcmUgc3RhY2sgcmVxdWVzdCBmYWlsdXJlIik7 CisrCS8qIHNlbmQgdGhlIHBhY2tldCAqLworKwlpZiAoKHIgPSBzc2hwa3Rfc2VuZChzc2gpKSAh PSAwKQorKwkJZmF0YWxfZnIociwgInNlbmQgc3RhY2sgcmVxdWVzdCIpOworKwkvKiBpIGJlbGll dmUgdGhpcyBpbmRpY2F0ZXMgd2hhdCB3ZSBhcmUgdG8gdXNlIGZvciBhIGNhbGxiYWNrICovCisr CWNsaWVudF9yZWdpc3Rlcl9nbG9iYWxfY29uZmlybShjbGllbnRfcHJvY2Vzc19yZXF1ZXN0X21l dHJpY3MsIE5VTEwpOworK30KKysKKyBzdGF0aWMgaW50CisgY2xpZW50X2lucHV0X2dsb2JhbF9y ZXF1ZXN0KGludCB0eXBlLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzc2ggKnNzaCkKKyB7CitAQCAt Mjc5OCw2ICsyOTkzLDQzIEBACisgCisgCWxlbiA9IHNzaGJ1Zl9sZW4oY21kKTsKKyAJaWYgKGxl biA+IDApIHsKKysJCS8qIHdlIG1heSBiZSBjb25uZWN0aW5nIHRvIGEgc2VydmVyIHRoYXQgaGFz IGhwbiBwcmVmaXhlZAorKwkJICogYmluYXJpZXMgaW5zdGFsbGVkLiBJbiB0aGF0IGNhc2Ugd2Ug bmVlZCB0byByZXdyaXRlIGFueQorKwkJICogc2NwIGNvbW1hbmRzIHRvIGxvb2sgZm9yIGhwbnNj cCBpbnN0ZWFkLgorKwkJICovCisrCQlpZiAoc3NoLT5jb21wYXQgJiBTU0hfSFBOU1NIX1BSRUZJ WCkgeworKwkJCWNoYXIgKm5ld19jbWQ7CisrCQkJbmV3X2NtZCA9IG1hbGxvYyhsZW4rNCk7Cisr CQkJLyogcmVhZCB0aGUgZXhpc3RpbmcgY29tbWFuZCBpbnRvIGEgdGVtcCBidWZmZXIgKi8KKysJ CQlzcHJpbnRmKG5ld19jbWQsICIlcyIsIChjb25zdCB1X2NoYXIqKXNzaGJ1Zl9wdHIoY21kKSk7 CisrCQkJY29uc3QgY2hhciAqcG9zOworKwkJCS8qIHNlZSBpZiB0aGUgY29tbWFuZCBzdGFydHMg d2l0aCBzY3AgKi8KKysJCQlwb3MgPSBzdHJzdHIobmV3X2NtZCwgInNjcCIpOworKwkJCS8qIGJ5 IHN1YnN0cmFjdGluZyB0aGUgcG9pbnRlciBuZXdfY21kIGZyb20gdGhlIHBvaW50ZXIKKysJCQkg KiBwb3Mgd2UgZW5kIHVwIHdpdGggdGhlIHBvc2l0aW9uIG9mIHRoZSBuZWVkbGUgaW4gdGhlCisr CQkJICogaGF5c3RhY2suIElmIGl0J3MgMCB0aGVuIHdlIGNhbiBtZXNzIHdpdGggaXQKKysJCQkg Ki8KKysJCQlpZiAocG9zIC0gbmV3X2NtZCA9PSAwKSB7CisrCQkJCWRlYnVnX2YoIlJld3JpdGlu ZyBzY3AgY29tbWFuZCBmb3IgaHBuc2NwLiIpOworKwkJCQlzcHJpbnRmKG5ld19jbWQsICJocG4l cyIsIChjb25zdCB1X2NoYXIqKXNzaGJ1Zl9wdHIoY21kKSk7CisrCQkJCWRlYnVnX2YoIkNvbW1h bmQgd2FzOiAlcyBhbmQgaXMgbm93ICVzIiwKKysJCQkJICAgICAgKGNvbnN0IHVfY2hhciopc3No YnVmX3B0cihjbWQpLCBuZXdfY21kKTsKKysJCQkJLyogZnJlZSB0aGUgZXhpc3Rpbmcgc3NoYnVm ICdjbWQnCisrCQkJCSAqIHJlY3JlYXRlIGl0IGFuZCB0aGVuIHdyaXRlIG91ciBuZXdfY21kIGlu dG8KKysJCQkJICogdGhlIHNzaGJ1ZiBzdHJ1Y3QKKysJCQkJICovCisrCQkJCXNzaGJ1Zl9mcmVl KGNtZCk7CisrCQkJCWlmICgoY21kID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQorKwkJCQkJZmF0 YWwoInNzaGJ1Zl9uZXcgZmFpbGVkIGluIHNjcCByZXdyaXRlIik7CisrCQkJCXNzaGJ1Zl9wdXRm KGNtZCwgIiVzIiwgbmV3X2NtZCk7CisrCQkJCS8qIHdlIHVzZSBsZW4gbGF0ZXIgb24gc28gZG9u J3QgZm9yZ2V0IHRvCisrCQkJCSAqIGluY3JlbWVudCBpdCBieSB0aGUgbnVtYmVyIG9mIG5ldyBj aGFycyBpbiB0aGUKKysJCQkJICogY29tbWFuZAorKwkJCQkgKi8KKysJCQkJbGVuICs9IDM7Cisr CQkJCWZyZWUobmV3X2NtZCk7CisrCQkJfQorKwkJfQorIAkJaWYgKGxlbiA+IDkwMCkKKyAJCQls ZW4gPSA5MDA7CisgCQlpZiAod2FudF9zdWJzeXN0ZW0pIHsKK2RpZmYgLU51ciBvcGVuc3NoLTEw LjNwMS5vcmlnL2NvbXBhdC5jIG9wZW5zc2gtMTAuM3AxL2NvbXBhdC5jCistLS0gb3BlbnNzaC0x MC4zcDEub3JpZy9jb21wYXQuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAor KysrIG9wZW5zc2gtMTAuM3AxL2NvbXBhdC5jCTIwMjYtMDctMDIgMDc6NTM6MjcuMjU4NTAyODY4 ICswMjAwCitAQCAtMjksNiArMjksNyBAQAorIAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5j bHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRhcmcu aD4KKyAKKyAjaW5jbHVkZSAieG1hbGxvYy5oIgorQEAgLTEzNiw2ICsxMzcsMzUgQEAKKyAJCQlz c2gtPmNvbXBhdCA9IGNoZWNrW2ldLmJ1Z3M7CisgCWlmIChmb3JiaWRfc3NoX3JzYSkKKyAJCXNz aC0+Y29tcGF0IHw9IFNTSF9SSF9SU0FTSUdTSEE7CisrCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRo ZSByZW1vdGUgc2lkZSBpcyBPcGVuU1NIIGFuZCBub3QgSFBOICovCisrCQkJLyogVE9ETzogU2Vl IGlmIHdlIGNhbiB3b3JrIHRoaXMgaW50byB0aGUgbmV3IG1ldGhvZCBmb3IgYnVnIGNoZWNrcyAq LworKwkJCWlmIChzdHJzdHIodmVyc2lvbiwgIk9wZW5TU0giKSAhPSBOVUxMKSB7CisrCQkJCS8q IGNoZWNrIGlmIHRoZSByZW1vdGUgaXMgaHBuIGFuZCBpZiB0aGUgdmVyc2lvbgorKwkJCQkgKiB1 c2VzIGhwbiBwcmVmaXhlZCBiaW5hcmllcyAqLworKwkJCQljb25zdCBjaGFyICpvcDsKKysJCQkJ aWYgKChvcCA9IHN0cnN0cih2ZXJzaW9uLCAiaHBuIikpICE9IE5VTEwpIHsKKysJCQkJCWludCBo cG52ZXIgPSAwOworKwkJCQkJc3NoLT5jb21wYXQgfD0gU1NIX0hQTlNTSDsKKysJCQkJCWRlYnVn KCJSZW1vdGUgaXMgSFBOIGVuYWJsZWQiKTsKKysJCQkJCWlmIChzc2NhbmYob3AsICJocG4lZCIs ICZocG52ZXIpID09IDEgJiYKKysJCQkJCSAgICBocG52ZXIgPj0gMTYpIHsKKysJCQkJCQlzc2gt PmNvbXBhdCB8PSBTU0hfSFBOU1NIX1BSRUZJWDsKKysJCQkJCQlkZWJ1ZygiUmVtb3RlIHVzZXMg SFBOU1NIIHByZWZpeGVzLiIpOworKwkJCQkJfQorKwkJCQl9CisrCQkJCS8qIFJlc3RyaWN0IGFk dmVydGlzZWQgd2luZG93IGZvciBub24tSFBOIE9wZW5TU0ggPj0gOC45LiAqLworKwkJCQlpZiAo IShzc2gtPmNvbXBhdCAmIFNTSF9IUE5TU0gpKSB7CisrCQkJCQljb25zdCBjaGFyICpvcDsKKysJ CQkJCWludCBvbWFqID0gMCwgb21pbiA9IDA7CisrCQkJCQlpZiAoKG9wID0gc3Ryc3RyKHZlcnNp b24sICJPcGVuU1NIXyIpKSAhPSBOVUxMICYmCisrCQkJCQkgICAgc3NjYW5mKG9wLCAiT3BlblNT SF8lZC4lZCIsICZvbWFqLCAmb21pbikgPT0gMiAmJgorKwkJCQkJICAgIChvbWFqID49IDkgfHwg KG9tYWogPT0gOCAmJiBvbWluID49IDkpKSkgeworKwkJCQkJCXNzaC0+Y29tcGF0IHw9IFNTSF9S RVNUUklDVF9XSU5ET1c7CisrCQkJCQkJZGVidWcoIlJlc3RyaWN0aW5nIGFkdmVydGlzZWQgd2lu ZG93IHNpemUuIik7CisrCQkJCQl9CisrCQkJCX0KKysJCQl9CisrCQkJZGVidWcoInNzaC0+Y29t cGF0IGlzICV1Iiwgc3NoLT5jb21wYXQpOworIAkJCXJldHVybjsKKyAJCX0KKyAJfQorZGlmZiAt TnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY29tcGF0Lmggb3BlbnNzaC0xMC4zcDEvY29tcGF0LmgK Ky0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2NvbXBhdC5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0 MTk1NDQ3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvY29tcGF0LmgJMjAyNi0wNy0wMiAwODo1 Mzo0NS4yNDg2NTgzNjMgKzAyMDAKK0BAIC00NiwxMiArNDYsMTIgQEAKKyAvKiAjZGVmaW5lIHVu dXNlZAkJMHgwMDAxMDAwMCAqLworIC8qICNkZWZpbmUgdW51c2VkCQkweDAwMDIwMDAwICovCisg LyogI2RlZmluZSB1bnVzZWQJCTB4MDAwNDAwMDAgKi8KKy0vKiAjZGVmaW5lIHVudXNlZAkJMHgw MDEwMDAwMCAqLworKyNkZWZpbmUgU1NIX0hQTlNTSAkJMHgwMDEwMDAwMCAvKiBiYXNpY2FsbHkg YSBub3RpY2UgdGhhdCB0aGlzIGlzIEhQTiBhd2FyZSAqLworICNkZWZpbmUgU1NIX0JVR19FWFRF T0YJCTB4MDAyMDAwMDAKKyAjZGVmaW5lIFNTSF9CVUdfUFJPQkUJCTB4MDA0MDAwMDAKKy0vKiAj ZGVmaW5lIHVudXNlZAkJMHgwMDgwMDAwMCAqLworKyNkZWZpbmUgU1NIX1JFU1RSSUNUX1dJTkRP VwkweDAwODAwMDAwIC8qIHJlc3RyaWN0IGFkdmVydGlzZWQgd2luZG93IHRvIE9wZW5TU0ggY2xp ZW50cyAqLworICNkZWZpbmUgU1NIX09MRF9GT1JXQVJEX0FERFIJMHgwMTAwMDAwMAorLS8qICNk ZWZpbmUgdW51c2VkCQkweDAyMDAwMDAwICovCisrI2RlZmluZSBTU0hfSFBOU1NIX1BSRUZJWAkw eDAyMDAwMDAwIC8qIGluZGljYXRlcyB0aGF0IHdlIGhhdmUgaHBuIHByZWZpeGVzIGJpbmFyaWVz ICovCisgI2RlZmluZSBTU0hfTkVXX09QRU5TU0gJCTB4MDQwMDAwMDAKKyAjZGVmaW5lIFNTSF9C VUdfRFlOQU1JQ19SUE9SVAkweDA4MDAwMDAwCisgI2RlZmluZSBTU0hfQlVHX0NVUlZFMjU1MTlQ QUQJMHgxMDAwMDAwMAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvY29uZmlndXJlLmFj IG9wZW5zc2gtMTAuM3AxL2NvbmZpZ3VyZS5hYworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvY29u ZmlndXJlLmFjCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCisrKysgb3BlbnNz aC0xMC4zcDEvY29uZmlndXJlLmFjCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIzNDU3Njk3ICswMjAw CitAQCAtMjc2Miw2ICsyNzYyLDM5IEBACisgCSkKKyBmaQorIAorKworKyMgVGVzdGluZyBNUFRD UCBTdXBwb3J0CisrIyBEb2VzIHRoZSBPUyBzdXBwb3J0IE1QVENQPworKyMgV2UgZG9uJ3QgdXNl IHRoaXMgYXQgdGhlIG1vbWVudAorKyMgYnV0IEkgYW0gaG9sZGluZyBpdCBpbiByZXNydmUgLWNq ciAwNC8wNC8yMDI1CisrCUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgT1Mgc3VwcG9ydHMg TVBUQ1BdKQorKwlBQ19SVU5fSUZFTFNFKAorKwkJW0FDX0xBTkdfUFJPR1JBTShbWworKwkJI2lu Y2x1ZGUgPHN0ZGlvLmg+CisrCQkjaW5jbHVkZSA8c3RkbGliLmg+CisrCQkjaW5jbHVkZSA8dW5p c3RkLmg+CisrCQkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCQkjaW5jbHVkZSA8c3lzL3NvY2tl dC5oPgorKwkJI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysJCSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+ CisrCisrCQldXSwgW1sKKysJCWludCBzb2NrID0gLTE7CisrCQlzb2NrID0gc29ja2V0KEFGX0lO RVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX01QVENQKTsKKysJCWlmIChzb2NrIDwgMCkgeworKwkJ ICAgZXhpdCgxKTsKKysJCSAgIH0KKysJCV1dKV0sCisrCQlbCisrCQkJQUNfTVNHX1JFU1VMVChb eWVzXSkKKysJCQlBQ19ERUZJTkUoW0hBVkVfTVBUQ1BdLCBbMV0sCisrCQkJICAgIFtPUyBTdXBw b3J0cyBNUFRDUF0pCisrCQldLAorKwkJWworKwkJCUFDX01TR19SRVNVTFQoW25vXSkKKysJCV0K KysJKQorKworIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRhZGRyaW5mbyIgPSAieHllcyIgJiYg XAorICAgICB0ZXN0ICJ4JGNoZWNrX2Zvcl9ocHV4X2Jyb2tlbl9nZXRhZGRyaW5mbyIgPSAieDEi OyB0aGVuCisgCUFDX01TR19DSEVDS0lORyhbaWYgZ2V0YWRkcmluZm8gc2VlbXMgdG8gd29ya10p CitAQCAtMzE3Nyw4ICszMjEwLDggQEAKKyAJCQkyMDAqKSAgICMgTGlicmVTU0wKKyAJCQkJbHZl cj1gZWNobyAiJHNzbHZlciIgfCBzZWQgJ3MvLipsaWJyZXNzbC0vLydgCisgCQkJCWNhc2UgIiRs dmVyIiBpbgorLQkJCQkyKnwzMDAqKSAjIDIueCwgMy4wLjAKKy0JCQkJCUFDX01TR19FUlJPUihb TGlicmVTU0wgPj0gMy4xLjAgcmVxdWlyZWQgKGhhdmUgIiRzc2xfc2hvd3ZlciIpXSkKKysJCQkJ Mip8MzAwKnwzMDEqfDMwMip8MzAzKnwzMDQqfDMwNiopICMgMi54LCAzLjAuMAorKwkJCQkJQUNf TVNHX0VSUk9SKFtMaWJyZVNTTCA+PSAzLjcuMCByZXF1aXJlZCAoaGF2ZSAiJHNzbF9zaG93dmVy IildKQorIAkJCQkJOzsKKyAJCQkJKikgOzsJIyBBc3N1bWUgYWxsIG90aGVyIHZlcnNpb25zIGFy ZSBnb29kLgorIAkJCQllc2FjCitAQCAtMzE4Nyw2ICszMjIwLDcgQEAKKyAJCQkJIyBPcGVuU1NM IDMgJiA0OyB3ZSB1c2UgdGhlIDEuMXggQVBJCisgCQkJCSMgaHR0cHM6Ly9vcGVuc3NsLm9yZy9w b2xpY2llcy9nZW5lcmFsL3ZlcnNpb25pbmctcG9saWN5Lmh0bWwKKyAJCQkJQ1BQRkxBR1M9IiRD UFBGTEFHUyAtRE9QRU5TU0xfQVBJX0NPTVBBVD0weDEwMTAwMDAwTCIKKysJCQkJQUNfREVGSU5F KFtXSVRIX09QRU5TU0wzXSwgWzFdLCBbV2l0aCBPcGVuU1NMM10pCisgCQkJCTs7CisgCQkgICAg ICAgICopCisgCQkJCUFDX01TR19FUlJPUihbVW5rbm93bi91bnN1cHBvcnRlZCBPcGVuU1NMIHZl cnNpb24gKCIkc3NsX3Nob3d2ZXIiKV0pCitAQCAtMzMwMCw2ICszMzM0LDI5IEBACisgCQlFVlBf Q0lQSEVSX0NUWF9zZXRfaXYgXAorIAldKQorIAorKwkjIE9wZW5TU0wgMy4wIEFQSQorKwkjIERv ZXMgT3BlblNTTCBzdXBwb3J0IHRoZSBFVlBfTUFDIGZ1bmN0aW9ucyBmb3IgUG9seTEzMDU/Cisr CUFDX01TR19DSEVDS0lORyhbd2hldGhlciBPcGVuU1NMIHN1cHBvcnRzIFBvbHkxMzA1IE1BQyBF VlBdKQorKwlBQ19SVU5fSUZFTFNFKAorKwkJW0FDX0xBTkdfUFJPR1JBTShbWworKwkjaW5jbHVk ZSA8c3RkbGliLmg+CisrCSNpbmNsdWRlIDxzdGRpby5oPgorKwkjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysJCV1dLCBbWworKwkJRVZQX01BQyAqbWFjID0gRVZQX01BQ19mZXRjaChOVUxMLCAi cG9seTEzMDUiLCBOVUxMKTsKKysJCWlmIChtYWMgPT0gTlVMTCkKKysJCSAgIGV4aXQoMSk7Cisr CQldXSldLAorKwkJWworKwkJCUFDX01TR19SRVNVTFQoW3llc10pCisrCQkJQUNfREVGSU5FKFtP UEVOU1NMX0hBVkVfUE9MWV9FVlBdLCBbMV0sCisrCQkJICAgIFtMaWJjcnlwdG8gc3VwcG9ydHMg UG9seTEzMDUgTUFDIEVWUF0pCisrCQldLAorKwkJWworKwkJCUFDX01TR19SRVNVTFQoW25vXSkK KysJCV0KKysJKQorKworIAlpZiB0ZXN0ICJ4JG9wZW5zc2xfZW5naW5lIiA9ICJ4eWVzIiA7IHRo ZW4KKyAJCUFDX01TR19DSEVDS0lORyhbZm9yIE9wZW5TU0wgRU5HSU5FIHN1cHBvcnRdKQorIAkJ QUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworZGlmZiAtTnVyIG9wZW5zc2gt MTAuM3AxLm9yaWcvZGVmaW5lcy5oIG9wZW5zc2gtMTAuM3AxL2RlZmluZXMuaAorLS0tIG9wZW5z c2gtMTAuM3AxLm9yaWcvZGVmaW5lcy5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMDkyNTg4NzgzICsw MjAwCisrKysgb3BlbnNzaC0xMC4zcDEvZGVmaW5lcy5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzIz ODgzMzY5ICswMjAwCitAQCAtOTQ0LDcgKzk0NCwxMSBAQAorICNlbmRpZgorIAorICNpZm5kZWYg U1NIX0lPQlVGU1oKKy0jIGRlZmluZSBTU0hfSU9CVUZTWiA4MTkyCisrIyBkZWZpbmUgU1NIX0lP QlVGU1ogKDMyKjEwMjQpCisrI2VuZGlmCisrCisrI2lmbmRlZiBJUFBST1RPX01QVENQCisrI2Rl ZmluZSBJUFBST1RPX01QVENQIDI2MgorICNlbmRpZgorIAorIC8qCitAQCAtMTAwMCwzICsxMDA0 LDEyIEBACisgI2VuZGlmCisgCisgI2VuZGlmIC8qIF9ERUZJTkVTX0ggKi8KKysKKysvKiB1c2Vk IHRvIGVuYWJsZSBjaGVja2luZyBsaW51eCBrZXJuZWwgdmVyc2lvbnMgKi8KKysjaWYgZGVmaW5l ZChfX2xpbnV4X18pICYmICFkZWZpbmVkKF9fYWxwaW5lX18pCisrI2luY2x1ZGUgPGxpbnV4L3Zl cnNpb24uaD4KKysjZW5kaWYKKysKKysjaWZuZGVmIEtFUk5FTF9WRVJTSU9OIC8qIHNob3VsZG4n dCBiZSBuZWNlc3NhcnkgdG8gZGVmaW5lIHRoaXMgKi8KKysjZGVmaW5lIEtFUk5FTF9WRVJTSU9O KGEsYixjKSAoKChhKSA8PDE2KSArICgoYikgPDwgOCkgKyhjKSkKKysjZW5kaWYKK2RpZmYgLU51 ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2RpZ2VzdC5oIG9wZW5zc2gtMTAuM3AxL2RpZ2VzdC5oCist LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9kaWdlc3QuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjA5MjU4 ODc4MyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL2RpZ2VzdC5oCTIwMjYtMDctMDIgMDA6Mjc6 MjkuNzI0MTcwNjA3ICswMjAwCitAQCAtMjcsNyArMjcsOCBAQAorICNkZWZpbmUgU1NIX0RJR0VT VF9TSEEyNTYJMgorICNkZWZpbmUgU1NIX0RJR0VTVF9TSEEzODQJMworICNkZWZpbmUgU1NIX0RJ R0VTVF9TSEE1MTIJNAorLSNkZWZpbmUgU1NIX0RJR0VTVF9NQVgJCTUKKysjZGVmaW5lIFNTSF9E SUdFU1RfTlVMTAkJNQorKyNkZWZpbmUgU1NIX0RJR0VTVF9NQVgJCTYKKyAKKyBzdHJ1Y3Qgc3No YnVmOworIHN0cnVjdCBzc2hfZGlnZXN0X2N0eDsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5v cmlnL2RpZ2VzdC1vcGVuc3NsLmMgb3BlbnNzaC0xMC4zcDEvZGlnZXN0LW9wZW5zc2wuYworLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcvZGlnZXN0LW9wZW5zc2wuYwkyMDI2LTA3LTAyIDAwOjI3OjA2 LjA5MjU4ODc4MyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL2RpZ2VzdC1vcGVuc3NsLmMJMjAy Ni0wNy0wMiAwMDoyNzoyOS43MjQyNTQ1ODEgKzAyMDAKK0BAIC02MSw2ICs2MSw3IEBACisgCXsg U1NIX0RJR0VTVF9TSEEyNTYsCSJTSEEyNTYiLAkzMiwJRVZQX3NoYTI1NiB9LAorIAl7IFNTSF9E SUdFU1RfU0hBMzg0LAkiU0hBMzg0IiwJNDgsCUVWUF9zaGEzODQgfSwKKyAJeyBTU0hfRElHRVNU X1NIQTUxMiwJIlNIQTUxMiIsCTY0LAlFVlBfc2hhNTEyIH0sCisrCXsgU1NIX0RJR0VTVF9OVUxM LAkiTk9ORU1BQyIsCTAsCUVWUF9tZF9udWxsfSwKKyAJeyAtMSwJCQlOVUxMLAkJMCwJTlVMTCB9 LAorIH07CisgCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9GVU5ESU5HLnltbCBvcGVu c3NoLTEwLjNwMS9GVU5ESU5HLnltbAorLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvRlVORElORy55 bWwJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjNw MS9GVU5ESU5HLnltbAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNDM5NjE2NyArMDIwMAorQEAgLTAs MCArMSwxMiBAQAorKyMgVGhlc2UgYXJlIHN1cHBvcnRlZCBmdW5kaW5nIG1vZGVsIHBsYXRmb3Jt cworKworK2dpdGh1YjpyYXBpZXIxICMgUmVwbGFjZSB3aXRoIHVwIHRvIDQgR2l0SHViIFNwb25z b3JzLWVuYWJsZWQgdXNlcm5hbWVzIGUuZy4sIFt1c2VyMSwgdXNlcjJdCisrI3BhdHJlb246ICMg UmVwbGFjZSB3aXRoIGEgc2luZ2xlIFBhdHJlb24gdXNlcm5hbWUKKysjb3Blbl9jb2xsZWN0aXZl OiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBPcGVuIENvbGxlY3RpdmUgdXNlcm5hbWUKKysja29f Zmk6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIEtvLWZpIHVzZXJuYW1lCisrI3RpZGVsaWZ0OiAj IFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBUaWRlbGlmdCBwbGF0Zm9ybS1uYW1lL3BhY2thZ2UtbmFt ZSBlLmcuLCBucG0vYmFiZWwKKysjY29tbXVuaXR5X2JyaWRnZTogIyBSZXBsYWNlIHdpdGggYSBz aW5nbGUgQ29tbXVuaXR5IEJyaWRnZSBwcm9qZWN0LW5hbWUgZS5nLiwgY2xvdWQtZm91bmRyeQor KyNsaWJlcmFwYXk6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIExpYmVyYXBheSB1c2VybmFtZQor KyNpc3N1ZWh1bnQ6ICMgUmVwbGFjZSB3aXRoIGEgc2luZ2xlIElzc3VlSHVudCB1c2VybmFtZQor KyNvdGVjaGllOiAjIFJlcGxhY2Ugd2l0aCBhIHNpbmdsZSBPdGVjaGllIHVzZXJuYW1lCisrI2N1 c3RvbTogIyBSZXBsYWNlIHdpdGggdXAgdG8gNCBjdXN0b20gc3BvbnNvcnNoaXAgVVJMcyBlLmcu LCBbJ2xpbmsxJywgJ2xpbmsyJ10KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL2hhcHB5 ZXllYmFsbHMuYyBvcGVuc3NoLTEwLjNwMS9oYXBweWV5ZWJhbGxzLmMKKy0tLSBvcGVuc3NoLTEw LjNwMS5vcmlnL2hhcHB5ZXllYmFsbHMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2gtMTAuM3AxL2hhcHB5ZXllYmFsbHMuYwkyMDI2LTA3LTAyIDAwOjI3 OjI5LjcyNDQ4Mjk1NCArMDIwMAorQEAgLTAsMCArMSwzMTMgQEAKKysvKgorKyAqIENvcHlyaWdo dCAoYykgMjAyNSBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZl cnNpdHkuCisrICoKKysgKiAgQXV0aG9yOiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1Pgor KyAqICBBdXRob3I6IEtpbSBNaWhuIEthcGxhbiAoa2FwbGFuIGF0IGtpbS1taWhuLmNvbSkKKysg KgorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGlj ZW5zZS4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorKyAqIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgTUlUIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7CisrICogaWYgbm90 LCBzZWUgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KKysgKgorKyAqLworKy8q IFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUkZDIDgzMDUgYmFzZWQgb24gYSBwYXRjaAor KyAqIHN1cHBsaWVkIGJ5IEtpbSBNaW5oIEthcGxhbiAoa2FwbGFuIGF0IGtpbS1taW5oLmNvbSku CisrICogSW5mb3JtYXRpb24gYWJvdXQgUkZDIDgzMDUgY2FuIGJlIGZvdW5kIGF0CisrICogaHR0 cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzgzMDUKKysgKiBUaGlzIHZlcnNpb24gKmRv ZXMgbm90KiBwcm92aWRlIHN1cHBvcnQgZm9yCisrICogU2VjdGlvbiAzIHdoZXJlIGFzeWNocm9u b3VzIHBvbGxpbmcgb2YgRE5TIHNlcnZlcnMKKysgKiBpcyBhIFNIT1VMRC4KKysgKiBTZWN0aW9u IDQgcmVxdWlyZXMgc29ydGluZyBvZiBETlMgcmVzdWx0cyBhcyBwZXIKKysgKiBSRkMgNjcyNC4g VGhpcyBpcyBwcm92aWRlZCBieSB0aGUgZ2V0YWRkcmluZm8gY2FsbAorKyAqIGZyb20gZ2NjLiBU aGlzIG1heSBub3QgYmUgYXZhaWxhYmxlIHZpYSBtdXNsLgorKyAqIEludGVybGVhdmluZyBvZiBh ZGRyZXNzZXMgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisrICogU2VjdGlvbiA1IGlzIGlt cGxlbWVudGVkLgorKyAqIFNlY3Rpb24gNiBpcyBub3QgaW1wbGVtZW50ZWQgb3V0c2lkZSBvZiBn ZXRhZGRyaW5mbworKyAqIFNlY3Rpb24gNyBpbiB1bmRlciBjb25zaWRlcmF0aW9uCisrICovCisr CisrCisrLyogTk9URTogVGhlcmUgYXJlIGEgbG90IG9mIGRlYnVnIHN0YXRlbWVudHMgaW4gaGVy ZQorKyAqIGJlY2F1c2Ugd2UgYXJlIHN0aWxsIHRyZWF0aW5nIHRoaXMgYXMgc29tZXdoYXQKKysg KiBleHBlcmltZW50YWwuIEEgZnV0dXJlIHZlcnNpb24gd2lsbCBwcm9tb3RlIHRoaXMKKysgKiB0 byBzdGFibGUgYW5kIHdlJ2xsIHJlbW92ZSBhIGxvdCBvZiB0aGUgbGV2ZWwgMgorKyAqIGRlYnVn IHN0YXRlbWVudHMgdGhlbi4KKysgKi8KKysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKysjaWZk ZWYgSEFWRV9TWVNfVElNRV9ICisrIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyNlbmRpZgorKyNp bmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8bmV0L2lmLmg+CisrI2luY2x1ZGUgPG5ldGlu ZXQvaW4uaD4KKysjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDx1bmlzdGQuaD4KKysKKysjaW5jbHVkZSAiaGFwcHlleWViYWxscy5oIgorKyNp bmNsdWRlICJzc2hjb25uZWN0LmgiCisrI2luY2x1ZGUgInNzaC5oIgorKyNpbmNsdWRlICJtaXNj LmgiCisrI2luY2x1ZGUgImxvZy5oIgorKyNpbmNsdWRlICJyZWFkY29uZi5oIgorKworKy8qIHRo aXMgaXMgZnJvbSBzc2hjb25uZWN0LmMgKi8KKytleHRlcm4gaW50IHNzaF9jcmVhdGVfc29ja2V0 KHN0cnVjdCBhZGRyaW5mbyAqYWkpOworKworKy8qIGdldCB0aGUgb3B0aW9ucyBzdHJ1Y3QgaWYg Zm9yIHRoZSBkZWxheSB0aW1lICovCisrZXh0ZXJuIE9wdGlvbnMgb3B0aW9uczsKKysKKysvKiBo YXZlIHdlIHRpbWVkIG91dD8gKi8KKytzdGF0aWMgaW50CisrdGltZW91dChzdHJ1Y3QgdGltZXZh bCAqdHYsIGludCB0aW1lb3V0X21zKQorKyB7CisrCWlmICh0aW1lb3V0X21zIDw9IDApCisrCQly ZXR1cm4gMDsKKysJbXNfc3VidHJhY3RfZGlmZih0diwgJnRpbWVvdXRfbXMpOworKwlyZXR1cm4g dGltZW91dF9tcyA8PSAwOworK30KKysKKysvKiB1c2VkIHRvIHByb3ZpZGUgZGVidWcgbWVzc2Fn ZSBpbiBzc2hjb25uZWN0ICovCisrY2hhciBnbG9iYWxfbnRvcFtOSV9NQVhIT1NUXTsKKysKKysv KiB1c2VkIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gZm9yIGRlYnVnIHN0YXRlbWVudHMgKi8KKytj aGFyICpyZXR1cm5fZmFtKGludCBmYW0pIHsKKysJaWYgKGZhbSA9PSAxMCkKKysJCXJldHVybiAi SVB2NiI7CisrCWVsc2UKKysJCXJldHVybiAiSVB2NCI7CisrfQorKworKy8qCisrICogUmV0dXJu IDAgaWYgdGhlIGFkZHJpbmZvIHdhcyBub3QgdHJpZWQuIFJldHVybiAtMSBpZiB1c2luZyBpdAor KyAqIGZhaWxlZC4gUmV0dXJuIDEgaWYgaXQgd2FzIHVzZWQuCisrICovCisrc3RhdGljIGludAor K2hhcHB5X2V5ZWJhbGxzX2luaXRpYXRlKGNvbnN0IGNoYXIgKmhvc3QsIHN0cnVjdCBhZGRyaW5m byAqYWksCisrCQkJCSAgICBpbnQgKnRpbWVvdXRfbXMsCisrCQkJCSAgICBzdHJ1Y3QgdGltZXZh bCAqaW5pdGlhdGUsCisrCQkJCSAgICBpbnQgKm5mZHMsIGZkX3NldCAqZmRzLAorKwkJCQkgICAg c3RydWN0IGFkZHJpbmZvICpmZF9haVtdKQorK3sKKysJaW50IG9lcnJubywgc29jazsKKysJY2hh ciBudG9wW05JX01BWEhPU1RdLCBzdHJwb3J0W05JX01BWFNFUlZdOworKworKwlkZWJ1ZzJfZiAo IkhhcHB5IGV5ZWJhbGxzIGluaXRpYXRpbmciKTsKKysJbWVtc2V0KG50b3AsIDAsIHNpemVvZihu dG9wKSk7CisrCW1lbXNldChzdHJwb3J0LCAwLCBzaXplb2Yoc3RycG9ydCkpOworKwkvKiBJZiAq bmZkcyAhPSAwIHRoZW4gKmluaXRpYXRlIGlzIGluaXRpYWxpc2VkLiAqLworKwlpZiAoKm5mZHMg JiYKKysJICAgIChhaSA9PSBOVUxMIHx8CisrCSAgICAgIXRpbWVvdXQoaW5pdGlhdGUsIG9wdGlv bnMuaGFwcHlfZGVsYXkpKSkgeworKwkJLyogRG8gbm90IGluaXRpYXRlIG5ldyBjb25uZWN0aW9u cyB5ZXQgKi8KKysJCWRlYnVnMl9mICgiV2FpdGluZyB0byBpbml0aWF0ZSBuZXcgY29ubmVjdGlv biIpOworKwkJcmV0dXJuIDA7CisrCX0KKysJLyogdHJ5aW5nIHRvIHVzZSBhIGZhbWlseSB3ZSBk b24ndCBzdXBwb3J0ICovCisrCWlmIChhaS0+YWlfZmFtaWx5ICE9IEFGX0lORVQgJiYgYWktPmFp X2ZhbWlseSAhPSBBRl9JTkVUNikgeworKwkJZGVidWcyX2YgKCJBZGRyZXNzIGZhbWlseSBub3Qg c3VwcG9ydGVkIik7CisrCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKysJCXJldHVybiAtMTsKKysJ fQorKworKwlkZWJ1ZzJfZiAoIlJ1bm5pbmcgZ2V0bmFtZWluZm8gZm9yICVzIGFuZCAlZCIsIGhv c3QsIGFpLT5haV9mYW1pbHkpOworKwlpZiAoZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5h aV9hZGRybGVuLAorKwkJCW50b3AsIHNpemVvZihudG9wKSwKKysJCQlzdHJwb3J0LCBzaXplb2Yo c3RycG9ydCksCisrCQkJTklfTlVNRVJJQ0hPU1R8TklfTlVNRVJJQ1NFUlYpICE9IDApIHsKKysJ CW9lcnJubyA9IGVycm5vOworKwkJZXJyb3IoIiVzOiBnZXRuYW1laW5mbyBmYWlsZWQiLCBfX2Z1 bmNfXyk7CisrCQllcnJubyA9IG9lcnJubzsKKysJCXJldHVybiAtMTsKKysJfQorKwltZW1jcHko Z2xvYmFsX250b3AsbnRvcCxzaXplb2YobnRvcCkpOworKwlkZWJ1ZzJfZigiUkZDIDgzMDUgY29u bmVjdGluZyB0byAlLjIwMHMgWyUuMTAwc10gcG9ydCAlcy4iLAorKwkgICAgICBob3N0LCBudG9w LCBzdHJwb3J0KTsKKysJZGVidWcyX2YoIlJGQyA4MzA1OiAlLjIwMHMiLCBnbG9iYWxfbnRvcCk7 CisrCS8qIENyZWF0ZSBhIHNvY2tldCBmb3IgY29ubmVjdGluZyAqLworKwlzb2NrID0gc3NoX2Ny ZWF0ZV9zb2NrZXQoYWkpOworKwlpZiAoc29jayA8IDApIHsKKysJCS8qIEFueSBlcnJvciBpcyBh bHJlYWR5IG91dHB1dCAqLworKwkJZXJybm8gPSAwOworKwkJcmV0dXJuIC0xOworKwl9CisrCWlm IChzb2NrID49IEZEX1NFVFNJWkUpIHsKKysJCWVycm9yKCJzb2NrZXQgbnVtYmVyIHRvIGJpZyBm b3Igc2VsZWN0OiAlZCIsIHNvY2spOworKwkJY2xvc2Uoc29jayk7CisrCQlyZXR1cm4gLTE7Cisr CX0KKysJZmRfYWlbc29ja10gPSBhaTsKKysJLyogdXNpbmcgbm9uYmxvY2tpbmcgc29ja2V0cyB3 aXRoIHNlbGVjdCBhbGxvd3MKKysJICogdXMgdG8gZmlyZSBvZmYgbmV3IHNvY2tldHMgd2l0aG91 dCB3YWl0aW5nIGZvciBhCisrCSAqIGNvbm5lY3Rpb24gdG8gYmUgZXN0YWJsaXNoZWQuIFRoaXMg bGV0cyB1cyBhdm9pZAorKwkgKiB0aGUgdXNlIG9mIHRocmVhZHMuIHNldF9ub25ibG9jayBpcyBp biBtaXNjLmMKKysJICogYW5kIHVzZXMgZm5jdGwgKi8KKysJc2V0X25vbmJsb2NrKHNvY2spOwor KwlkZWJ1ZzJfZigiUkZDIDgzMDUgcHJlLWNvbm5lY3QgZm9yICVzIiwgcmV0dXJuX2ZhbShhaS0+ YWlfZmFtaWx5KSk7CisrCWlmIChjb25uZWN0KHNvY2ssIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRk cmxlbikgPCAwICYmCisrCSAgICBlcnJubyAhPSBFSU5QUk9HUkVTUykgeworKwkJZXJyb3IoImNv bm5lY3QgdG8gYWRkcmVzcyAlcyBwb3J0ICVzOiAlcyIsCisrCQkgICAgICBudG9wLCBzdHJwb3J0 LCBzdHJlcnJvcihlcnJubykpOworKwkJZXJybm8gPSAwOworKwkJY2xvc2Uoc29jayk7CisrCQly ZXR1cm4gLTE7CisrCX0KKysJZGVidWdfZigiUkZDIDgzMDUgcG9zdCBjb25uZWN0IGZvciAlcyIs IHJldHVybl9mYW0oYWktPmFpX2ZhbWlseSkpOworKwltb25vdGltZV90dihpbml0aWF0ZSk7Cisr CUZEX1NFVChzb2NrLCBmZHMpOworKwkqbmZkcyA9IE1BWElNVU0oKm5mZHMsIHNvY2sgKyAxKTsK KysJcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQKKytoYXBweV9leWViYWxsc19wcm9jZXNz KGludCAqbmZkcywgZmRfc2V0ICpmZHMsCisrCQkJCSAgIHN0cnVjdCBhZGRyaW5mbyAqZmRfYWlb XSwKKysJCQkJICAgaW50IHJlYWR5LCBmZF9zZXQgKndmZHMpCisreworKwlzb2NrbGVuX3Qgb3B0 bGVuOworKwlpbnQgc29jaywgb3B0dmFsID0gMDsKKysJY2hhciBudG9wW05JX01BWEhPU1RdLCBz dHJwb3J0W05JX01BWFNFUlZdOworKworKwlkZWJ1ZzJfZigiUHJvY2Vzc2luZyBSRkMgODMwNSBj b25uZWN0aW9ucyIpOworKwlmb3IgKHNvY2sgPSAqbmZkcyAtIDE7IHJlYWR5ID4gMCAmJiBzb2Nr ID49IDA7IHNvY2stLSkgeworKwkJZGVidWcyX2YoIlJGQyA4MzA1OiBQcm9jZXNzaW5nIGZvciAl czogJWQiLCByZXR1cm5fZmFtKGZkX2FpW3NvY2tdLT5haV9mYW1pbHkpLCBzb2NrKTsKKysJCWlm IChGRF9JU1NFVChzb2NrLCB3ZmRzKSkgeworKwkJCWRlYnVnMl9mKCJSRkMgODMwNTogRkRfSVNT RVQgdHJ1ZSBmb3IgJWQiLCBzb2NrKTsKKysJCQlyZWFkeS0tOworKwkJCW9wdGxlbiA9IHNpemVv ZihvcHR2YWwpOworKwkJCWRlYnVnX2YoIlJGQyA4MzA1OiBvcHR2YWwgaXMgJWQgZm9yICVkIiwg b3B0dmFsLCBzb2NrKTsKKysJCQlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19F UlJPUiwKKysJCQkJICAgICAgICZvcHR2YWwsICZvcHRsZW4pIDwgMCkgeworKwkJCQlvcHR2YWwg PSBlcnJubzsKKysJCQkJZXJyb3IoImdldHNvY2tvcHQgZmFpbGVkOiAlcyIsCisrCQkJCSAgICAg IHN0cmVycm9yKGVycm5vKSk7CisrCQkJfSBlbHNlIGlmIChvcHR2YWwgIT0gMCkgeworKwkJCQlk ZWJ1Z19mKCJSRkMgODMwNTogQ29weWluZyBkYXRhIGZvciAlZCBvbiAlcyIsIG9wdHZhbCwgcmV0 dXJuX2ZhbShmZF9haVtzb2NrXS0+YWlfZmFtaWx5KSk7CisrCQkJCW1lbXNldChudG9wLCAwLCBz aXplb2YobnRvcCkpOworKwkJCQltZW1zZXQoc3RycG9ydCwgMCwgc2l6ZW9mKHN0cnBvcnQpKTsK KysJCQkJaWYgKGdldG5hbWVpbmZvKGZkX2FpW3NvY2tdLT5haV9hZGRyLAorKwkJCQkJCWZkX2Fp W3NvY2tdLT5haV9hZGRybGVuLAorKwkJCQkJCW50b3AsIHNpemVvZihudG9wKSwKKysJCQkJCQlz dHJwb3J0LCBzaXplb2Yoc3RycG9ydCksCisrCQkJCQkJTklfTlVNRVJJQ0hPU1R8TklfTlVNRVJJ Q1NFUlYpICE9IDApCisrCQkJCQllcnJvcigiY29ubmVjdCBmaW5hbGx5IGZhaWxlZDogJXMiLAor KwkJCQkJICAgICAgc3RyZXJyb3Iob3B0dmFsKSk7CisrCQkJCWVsc2UKKysJCQkJCWVycm9yKCJj b25uZWN0IHRvIGFkZHJlc3MgJXMgcG9ydCAlcyBmaW5hbGx5OiAlcyIsCisrCQkJCQkgICAgICBu dG9wLCBzdHJwb3J0LCBzdHJlcnJvcihvcHR2YWwpKTsKKysJCQl9CisrCQkJRkRfQ0xSKHNvY2ss IGZkcyk7CisrCQkJd2hpbGUgKCpuZmRzID4gMCAmJiAhIEZEX0lTU0VUKCpuZmRzIC0gMSwgZmRz KSkKKysJCQkJLS0qbmZkczsKKysJCQlpZiAob3B0dmFsID09IDApIHsKKysJCQkJZGVidWdfZigi UkZDIDgzMDU6IHVuc2V0dGluZyBub25ibG9jayBmb3IgJXMgb24gJWQiLAorKwkJCQkgICAgcmV0 dXJuX2ZhbShmZF9haVtzb2NrXS0+YWlfZmFtaWx5KSwgc29jayk7CisrCQkJCXVuc2V0X25vbmJs b2NrKHNvY2spOworKwkJCQlyZXR1cm4gc29jazsKKysJCQl9CisrCQkJY2xvc2Uoc29jayk7Cisr CQkJZXJybm8gPSBvcHR2YWw7CisrCQl9CisrCX0KKysJcmV0dXJuIC0xOworK30KKysKKytpbnQK KytoYXBweV9leWViYWxscyhjb25zdCBjaGFyICogaG9zdCwgc3RydWN0IGFkZHJpbmZvICphaSwK KysJCQkgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaG9zdGFkZHIsIGludCAqdGltZW91dF9t cykKKyt7CisrCXN0cnVjdCBhZGRyaW5mbyAqZmRfYWlbRkRfU0VUU0laRV07IC8qIDEwMjQgKi8K KysJc3RydWN0IHRpbWV2YWwgaW5pdGlhdGVfdHYsIHN0YXJ0X3R2LCBzZWxlY3RfdHYsICp0djsK KysJZmRfc2V0IGZkcywgd2ZkczsKKysJaW50IHJlcywgb2Vycm5vLCBkaWZmLCBkaWZmMCwgbmZk cyA9IDAsIHNvY2sgPSAtMTsKKysKKysJZGVidWdfZigiU3RhcnRpbmcgUkZDIDgzMDUvSGFwcHkg RXllYmFsbHMgY29ubmVjdGlvbiIpOworKworKwlGRF9aRVJPKCZmZHMpOworKwlpZiAoKnRpbWVv dXRfbXMgPiAwKSAvKiBkZWZhdWx0IHZhbHVlIG9mIG5vIHRpbWVvdXQgLSB1c2UgVENQIGRlZmF1 bHQgaW5zdGVhZCAqLworKwkJbW9ub3RpbWVfdHYoJnN0YXJ0X3R2KTsgLyogbW9ub3RpbWVfdHYg aXMgaW4gbWlzYy5jICovCisrCisrCS8qIHJ1biB0aHJvdWdoIHBvdGVudGlhbHMgdW5sZXNzIHdl IGhhdmUgdGltZWQgb3V0ICovCisrCS8qIHRpbWVvdXRfbXMgYmVpbmcgdGhlIHVzZXIgZGVmaW5l ZCBjb25uZWN0aW9uIHRpbWVvdXQgaWYKKysJICogdGhleSBhcmVuJ3QgdXNpbmcgdGhlIHRjcCB0 aW1lb3V0ICovCisrCXdoaWxlICgoYWkgIT0gTlVMTCB8fCBuZmRzID4gMCkgJiYKKysJICAgICAg ICEgdGltZW91dCgmc3RhcnRfdHYsICp0aW1lb3V0X21zKSkgeworKwkJLyogc2V0IHVwIHRoZSBz b2NrZXRzICovCisrCQlyZXMgPSBoYXBweV9leWViYWxsc19pbml0aWF0ZShob3N0LCBhaSwKKysJ CSAgICAgdGltZW91dF9tcywgJmluaXRpYXRlX3R2LCAmbmZkcywgJmZkcywgZmRfYWkpOworKwkJ aWYgKHJlcyAhPSAwKQorKwkJCWFpID0gYWktPmFpX25leHQ7CisrCQlpZiAocmVzID09IC0xKQor KwkJCWNvbnRpbnVlOworKwkJdHYgPSBOVUxMOworKworKwkJLyogdGhpcyBpcyBqdXN0IHRvIGRl dGVybWluZSB0aGUgcGF1c2UgYmV0d2VlbgorKwkJICogY2FsbHMgdG8gc2VsZWN0LiAqLworKyAg CQlpZiAoYWkgIT0gTlVMTCB8fCAqdGltZW91dF9tcyA+IDApIHsKKysJCQlkZWJ1ZzJfZiAoIlJG QyA4MzA1OiBJbiBwYXVzZS4uLiIpOworKwkJCXR2ID0gJnNlbGVjdF90djsKKysJCQlpZiAoYWkg IT0gTlVMTCkgeworKwkJCQlkaWZmID0gb3B0aW9ucy5oYXBweV9kZWxheTsKKysJCQkJbXNfc3Vi dHJhY3RfZGlmZigmaW5pdGlhdGVfdHYsICZkaWZmKTsKKysJCQkJaWYgKCp0aW1lb3V0X21zID4g MCkgeworKwkJCQkJZGlmZjAgPSAqdGltZW91dF9tczsKKysJCQkJCW1zX3N1YnRyYWN0X2RpZmYo JnN0YXJ0X3R2LCAmZGlmZjApOworKwkJCQkJZGlmZiA9IE1JTklNVU0oZGlmZiwgZGlmZjApOwor KwkJCQl9CisrCQkJfSBlbHNlIHsKKysJCQkJZGlmZiA9ICp0aW1lb3V0X21zOworKwkJCQltc19z dWJ0cmFjdF9kaWZmKCZzdGFydF90diwgJmRpZmYpOworKwkJCX0KKysJCQl0di0+dHZfc2VjID0g ZGlmZiAvIDEwMDA7CisrCQkJdHYtPnR2X3VzZWMgPSAoZGlmZiAlIDEwMDApICogMTAwMDsKKysJ CX0KKysKKysJCS8qIGNyZWF0ZSBhIHdyaXRlYWJsZSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyAq LworKwkJd2ZkcyA9IGZkczsKKysJCS8qIHNlbGVjdCB3aWxsIHBhdXNlIGZvciB0aW1lIHR2IGRl dGVybWluZWQgYnkgdGhlIGFib3ZlCisrCQkgKiB0aW1pbmcgY2FjdWxhdGlvbnMgKi8KKysJCWRl YnVnMl9mKCJSRkMgODMwNTogU3RhcnRpbmcgc2VsZWN0Iik7CisrCQlyZXMgPSBzZWxlY3QobmZk cywgTlVMTCwgJndmZHMsIE5VTEwsIHR2KTsKKysJCWRlYnVnMl9mKCJSRkMgODMwNTogTGVhdmlu ZyBzZWxlY3QiKTsKKysKKysJCS8qIHByZXNlcnZlIGFueSBlcnJvcnMgKi8KKysJCW9lcnJubyA9 IGVycm5vOworKwkJaWYgKHJlcyA8IDApIHsKKysJCQllcnJvcigic2VsZWN0IGZhaWxlZDogJXMi LCBzdHJlcnJvcihlcnJubykpOworKwkJCWVycm5vID0gb2Vycm5vOworKwkJCWNvbnRpbnVlOwor KwkJfQorKwkJLyogc3RhcnQgcHJvY2Vzc2luZyB0aGUgc29ja2V0cyAqLworKwkJZGVidWcyX2Yg KCJSRkMgODMwNTogUHJvY2Vzc2luZyBoYXBweSBleWViYWxscyBmZHMiKTsKKysJCXNvY2sgPSBo YXBweV9leWViYWxsc19wcm9jZXNzKCZuZmRzLCAmZmRzLCBmZF9haSwKKysJCQkJCQkJICByZXMs ICZ3ZmRzKTsKKysJCWlmIChzb2NrID49IDApIHsKKysJCQlkZWJ1Z19mICgiUkZDIDgzMDUgLyBI YXBweSBFeWViYWxscyBjb25uZWN0ZWQiKTsKKysJCQkvKiB3ZSBoYXZlIGEgY29ubmVjdGlvbiAq LworKwkJCW1lbWNweShob3N0YWRkciwgZmRfYWlbc29ja10tPmFpX2FkZHIsCisrCQkJICAgICAg IGZkX2FpW3NvY2tdLT5haV9hZGRybGVuKTsKKysJCQlicmVhazsKKysJCX0KKysJCWRlYnVnX2Yo IlJGQyA4MzA1OiBSZXN0YXJ0aW5nIHdoaWxlIGxvb3AuIik7CisrCX0KKysJb2Vycm5vID0gZXJy bm87CisrCS8qIGNsb3NlIG90aGVyIGNvbm5lY3Rpb24gYXR0ZW1wdHMvc29ja2V0cyAqLworKwlk ZWJ1ZzJfZigiUkZDIDgzMDU6IE5GRFMgaXMgJWQiLCBuZmRzKTsKKysJd2hpbGUgKG5mZHMtLSA+ IDApIHsKKysJCWRlYnVnMl9mKCJSRkMgODMwNTogUnVubmluZyBGRF9JU1NFVCBvbiAlZCIsIG5m ZHMpOworKwkJaWYgKEZEX0lTU0VUKG5mZHMsICZmZHMpKQorKwkJCWNsb3NlKG5mZHMpOworKwl9 CisrCS8qIHdlIHRpbWVkIG91dCB3aXRoIG5vIHZhbGlkIGNvbm5lY3Rpb25zICovCisrCWlmICh0 aW1lb3V0KCZzdGFydF90diwgKnRpbWVvdXRfbXMpKQorKwkJZXJybm8gPSBFVElNRURPVVQ7Cisr CWVsc2UKKysJCWVycm5vID0gb2Vycm5vOworKwlyZXR1cm4gc29jazsKKyt9CitkaWZmIC1OdXIg b3BlbnNzaC0xMC4zcDEub3JpZy9oYXBweWV5ZWJhbGxzLmggb3BlbnNzaC0xMC4zcDEvaGFwcHll eWViYWxscy5oCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9oYXBweWV5ZWJhbGxzLmgJMTk3MC0w MS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9oYXBweWV5 ZWJhbGxzLmgJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjQ1NDMzMzggKzAyMDAKK0BAIC0wLDAgKzEs MjMgQEAKKysvKgorKyAqIENvcHlyaWdodCAoYykgMjAyNSBUaGUgQm9hcmQgb2YgVHJ1c3RlZXMg b2YgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkuCisrICoKKysgKiAgQXV0aG9yOiBDaHJpcyBS YXBpZXIgPHJhcGllckBwc2MuZWR1PgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgKiB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIE1JVCBMaWNlbnNlLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisrICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZIG9yCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIE1JVCBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBNSVQgTGljZW5zZSBhbG9uZyB3aXRo IHRoaXMgbGlicmFyeTsKKysgKiBpZiBub3QsIHNlZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj ZW5zZXMvTUlULgorKyAqCisrICovCisrLyoKKysgKiBSRkMgODMwNSBIYXBweSBFeWViYWxscyBW ZXJzaW9uIDI6IEJldHRlciBDb25uZWN0aXZpdHkgVXNpbmcgQ29uY3VycmVuY3kKKysgKgorKyAq LworKworK2ludCBoYXBweV9leWViYWxscyhjb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAq LAorKwkJICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKiwgaW50ICopOworZGlmZiAtTnVyIG9w ZW5zc2gtMTAuM3AxLm9yaWcvSFBOLVJFQURNRSBvcGVuc3NoLTEwLjNwMS9IUE4tUkVBRE1FCist LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9IUE4tUkVBRE1FCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC4zcDEvSFBOLVJFQURNRQkyMDI2LTA3LTAyIDAw OjI3OjI5LjcyNDYyMjU0NyArMDIwMAorQEAgLTAsMCArMSwyMDAgQEAKKytOb3RlczoKKysKKytG SVBTIE1vZGUgYW5kIFBhcmFsbGVsIENpcGhlcnMgaW4gMTguNy4xCisrVXNpbmcgSFBOLVNTSCBp biBvcGVyYXRpbmcgc3lzdGVtcyB3b3JraW5nIGluIEZJUFMgbW9kZSAoZS5nLiBSSEVMIHdpdGgK KytGSVBTIGVuYWJsZWQpIHByZWNsdWRlIHRoZSB1c2Ugb2YgcGFyYWxsZWwgY2lwaGVycy4gVGhp cyBpcyBiZWNhdXNlCisrdGhlIHBhcmFsbGVsIEFFUy1DVFIgaW1wbGVtZW50YXRpb24gaXMgbm90 IEZJUFMgY2VydGlmaWVkIGFuZCB3aWxsIGNhdXNlIEZJUFMKKyt0byBleGl0IHdpdGggYW4gZXJy b3Igd2hlbiBsb2FkZWQuIEluIHRoZSBjYXNlIG9mIHRoZSBwYXJhbGxlbCBDaGFDaGEyMCBjaXBo ZXIKKyt0aGUgYWxnb3JpdGhtIGl0c2VsZiBoYXMgbm90IGJlZW4gRklQUyBjZXJ0aWZpZWQgYW5k IG5vIGltcGxlbWVudGF0aW9uIG9mCisrQ2hhQ2hhMjAgc2hvdWxkIGJlIGFsbG93ZWQgaW4gRklQ UyBtb2RlLiBXZSBzdWdnZXN0IHRoZSB1c2Ugb2YgdGhlIEFFUy1HQ00KKytjaXBoZXIgd2hlbiBv cGVyYXRpbmcgdW5kZXIgRklQUyBtb2RlIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLiAKKysKKytI YXBweSBFeWViYWxscyBTdXBwb3J0IGluIDE4LjcuMSAKKytIYXBweSBFeWViYWxscyAoUkZDIDgz MDUpIGlzIGZvciB1c2Ugb24gZHVhbCBzdGFjayBzeXN0ZW1zIG1lYW5pbmcgdGhhdCB0aGV5IGhh dmUgYm90aCAKKytJUHY0IGFuZCBJUHY2IFRDUCBzdGFja3MuIFdoZW4gZW5hYmxlZCB0aGlzIG9w dGlvbiB3aWxsIHRyeSB0byBjb25uZWN0IHRvIHRoZQorK3RhcmdldCBvdmVyIGJvdGggSVB2NCBh bmQgSVB2NiB3aXRoIHByZWZlcmVuY2UgZ2l2ZW4gdG8gSVB2Ni4gVGhlIGZpcnN0IGNvbm5lY3Rp b24gCisrdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IHdpbGwgYmUgdXNlZC4gQW55IG91dHN0 YW5kaW5nIGNvbm5lY3Rpb24gYXR0ZW1wdHMgd2lsbAorK2JlIGNsb3NlZC4gQXMgb2YgdmVyc2lv biAxOC43LjEgdGhpcyBvcHRpb24gc2hvdWxkIGJlIGNvbnNpZGVyZWQgc29tZXdoYXQgZXhwZXJp bWVudGFsLgorKworK3VzYWdlOgorKy1vSGFwcHlFeWVzPVtZZXN8Tm9dIHdpbGwgZW5hYmxlIEhh cHB5IEV5ZWJhbGxzLiBUaGUgZGVmYXVsdCBpcyBuby4gCisrLW9IYXBweURlbGF5PVtOXSB3aGVy ZSBOIGlzIGEgcG9zaXRpdmUgaW50ZWdlciBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzLgorKyAg ICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgMjUwbXMgaXMgc3VnZ2VzdGVkIGJ5 IFJGQyA4MzA1LgorKworK01QVENQIFN1cHBvcnQgaW4gMTguNy4wOgorK011bHRpcGF0aCBUQ1Ag aXMgbm93IGF2YWlsYWJsZSBhcyBhIHJ1bnRpbWUgb3B0aW9uIGZvciBIUE4tU1NILiBNUFRDUAor K2lzIGF2YWlsYWJsZSBvbmx5IG9uIExpbnV4IGFuZCBNYWMgT1NYIG9wZXJhdGluZyBzeXN0ZW1z LiBVc2luZyBNUFRDUCBvbiBhIHN5c3RlbSB0aGF0CisrZG9lc24ndCBzdXBwb3J0IGl0IHdpbGwg cmVzdWx0IGluIGEgbm90aWNlIGFuZCBmYWlsdXJlLiBUaGUgdXNlIGNhc2VzIGZvciBNUFRDUCBp bmNsdWRlCisrc2VhbWxlc3MgaGFuZG92ZXJzIHdoZW4gY2hhbmdpbmcgbmV0d29ya3MgYW5kIGFn Z3JlZ2F0aW5nIG11bHRpcGxlIGludGVyZmFjZXMgdG8gaW1wcm92ZQorK2F2YWlsYWJsZSBiYW5k d2lkdGguIEFzIG9mIDE4LjcuMCB0aGlzIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBzb21l d2hhdCBleHBlcmltZW50YWwuCisrCisrVXNhZ2U6CisrLW9Vc2VNUFRDUD1bWWVzfE5vXSB3aWxs IGVuYWJsZSBNUFRDUC4gVGhlIGRlZmF1bHQgaXMgbm8uCisrCisrTGlicmVTU0wgU3VwcG9ydDoK KytDaGFuZ2VzIGluIExpYnJlU1NMIHZlcnNpb24gMy41IGFuZCAzLjYgcHJldmVudCB0aGUgdXNl IG9mIHRoZSB0aHJlYWRlZCBBRVMgQ1RSIGNpcGhlci4KKytJbiB0aG9zZSBjYXNlcyBIUE5TU0gg d2lsbCBmYWxsYmFjayB0byB0aGUgc2VyaWFsIHZlcnNpb24gb2YgdGhlIEFFUyBDVFIgY2lwaGVy LiBBIHdhcm5pbmcKKytpcyBwcmludGVkIHRvIHN0ZGVyci4KKysKKytBdXRvbWF0aWMgUG9ydCBG YWxsYmFjayAoaW4gdmVyc2lvbiAxN3YzKQorK1RoZSBocG5zc2ggY2xpZW50IG5vdyB1c2VzIFRD UCBwb3J0IDIyMjIgdG8gY29ubmVjdCBhdXRvbWF0aWNhbGx5IGFzIHRoaXMgaXMgdGhlCisrZGVm YXVsdCBocG5zc2hkIHBvcnQuIEhvd2V2ZXIsIHdlIHVuZGVyc3RhbmQgdGhhdCBtYW55IHVzZXJz IHdpbGwgYmUgZW5kIHVwIGNvbm5lY3RpbmcKKytzdGFuZGFyZCBTU0ggc2VydmVycyBvbiBwb3J0 IDIyLiBUbyBtYWtlIHRoZSBlYXNpZXIgZm9yIHVzZXJzIHRoZSBjbGllbnQgd2lsbCBmYWxsIGJh Y2sgdG8KKytwb3J0IDIyIGluIHRoZSBldmVudCB0aGF0IHRoZXJlIGlzIG5vIGhwbnNzaCBzZXJ2 ZXIgcnVubmluZyBvbiBwb3J0IDIyMjIuIFRoZSBiZWhhdmlvdXIgY2FuCisrYmUgbW9kaWZlZCBh cyBmb2xsb3dzOgorKy1vRmFsbGJhY2s9W3llc3xub10gd2lsbCBlbmFibGUgb3IgZGlzYWJsZSBw b3J0IGZhbGxiYWNrLiBEZWZhdWx0IGlzIHllcy4KKystb0ZhbGxiYWNrUG9ydD1bTl0gd2hlcmUg TiBpcyB0aGUgcG9ydCBudW1iZXIgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgZmFsbCBiYWNrLgor KyAgICBEZWZhdWx0IGlzIDIyLgorKworK1RDUF9JTkZPIE1ldHJpY3MKKytUaGlzIGZlYXR1cmVz IGFsbG93cyB0aGUgY2xpZW50IHRvIHJlcXVlc3QgdGNwIG5ldHdvcmtpbmcgaW5mb3JtYXRpb24g ZnJvbSB0aGUKKytUQ1BfSU5GTyBzdHJ1Y3QuIFRoaXMgaW5jbHVkZXMgZGF0YSBvbiByZXRyYW5z bWl0cywgcm91bmQgdHJpcCB0aW1lLCBsb3N0IHBhY2tldHMsCisrZGF0YSB0cmFuc2ZlcnJlZCwg YW5kIHRoZSBsaWtlLiBUaGUgbWV0cmljcyBhcmUgcG9sbGVkIHBlcmlvZGljYWxseSB0aHJvdWdo IHRoZQorK2xpZmUgb2YgdGhlIGNvbm5lY3Rpb24uIEJ5IGRlZmF1bHQgdGhpcyBpcyBldmVyeSA1 IHNlY29uZHMgYnV0IHVzZXJzIGNhbiBwaWNrIGRpZmZlcmVudAorK3BvbGxpbmcgcGVyaW9kcy4g VGhlIHJlc3VsdGluZyBkYXRhIGlzIHN0b3JlZCBpbiB0d28gZGlzdGluY3QgZmlsZXM7IG9uZSBm b3IgbG9jYWwKKyttZXRyaWNzIGFuZCBvbmUgZm9yIHJlbW90ZSBtZXRyaWNzLiBSZW1vdGUgbWV0 cmljcyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhlIHJlbW90ZQorK3N1cHBvcnRzIHRoaXMgZmVh dHVyZS4gVGhpcyBmZWF0dXJlIHdpbGwgKm5vdCogZGlhZ25vc2UgYSBwb29ybHkgcGVyZm9ybWlu ZyBjb25uZWN0aW9uCisrYnV0IG1heSBwcm92aWRlIGluc2lnaHQgaW50byB3aGF0IGlzIGhhcHBl bmluZyBkdXJpbmcgdGhlIGNvbm5lY3Rpb24uCisrCisrVXNhZ2U6CisrLW9NZXRyaWNzPVt5ZXN8 bm9dIHdpbGwgZW5hYmxlIG1ldHJpY3MgcG9sbGluZy4gRGVmYXVsdDogTm8uCisrLW9NZXRyaWNz SW50ZXJ2YWw9W05dIHdoZXJlIE4gaXMgdGhlIHBvbGxpbmcgcGVyaW9kIGluIHNlY29uZHMuIERl ZmF1bHQ6IDUgc2Vjb25kcy4KKystb01ldHJpY3NQYXRoPVsvZmlsZXBhdGgvZmlsZW5hbWVdIGlz IHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdoZXJlIHRoZSByZW1vdGUgYW5kCisrICAgIGxvY2FsIGRh dGEgd2lsbCBiZSBzdG9yZWQuIERlZmF1bHQ6IC4vc3NoX3N0YWNrX21ldHJpY3MuW2xvY2FsfHJl bW90ZV0uCisrICAgIEFueSBvdGhlciBvcHRpb24gY2hvc2VuIGJ5IHRoZSB1c2VyIHdpbGwgaGF2 ZSBhIC5sb2NhbCBvciAucmVtb3RlIHN1ZmZpeCBhcHBlbmRlZCB0byBpdC4KKysKKytUaGUgbnVt YmVyIG9mIGluc3RydW1lbnRzIHBvbGxlZCBieSB0aGlzIGZlYXR1cmVzIGlzIGRlcGVuZGVudCBv biB0aGUga2VybmVsIG9mIHRoZSBob3N0LgorK1RoaXMgbWVhbnMgdGhhdCBhIHJlbW90ZSBob3N0 IHdpdGggYW4gb2xkZXIga2VybmVsIG1heSByZXBvcnQgZmV3ZXIgaW5zdHJ1bWVudHMgdGhhbiBh IGNsaWVudAorK2hvc3QgcnVubmluZyBhIGN1cnJlbnQga2VybmVsIG9yIHZpY2UgdmVyc2EuIElm IHRoZXJlIGlzIGEgZGlzY3JlcGVuY3kgaW4gdGhlIG51bWJlciBvZiBpbnN0cnVtZW50cworK2lu IHRoZSBzc2hfc3RhY2tfbWV0cmljcy5sb2NhbCBhbmQgLnJlbW90ZSBmaWxlIHRoaXMgaXMgdGhl IG1vc3QgbGlrZWx5IHJlYXNvbi4KKysKKytBZGRpdGlvbmFsbHksIGRldGVybWluaW5nIHdoaWNo IGZpbGUgcmVwcmVzZW50cyBzZW5kZXIgc2lkZSB2ZXJzdXMgcmVjZWl2ZXIgc2lkZSBpcyBkZXBl bmRlbnQKKytvbiB0aGUgbmF0dXJlIG9mIHRoZSBjb25uZWN0aW9uLiBUaGVyZm9yZSwgaXQncyB1 cCB0byB0aGUgdXNlciB0byBtYWtlIHRoYXQgZGV0ZXJtaW5hdGlvbi4KKysKKytMaW51eCBOb3Rl OiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBvbiBMaW51eCBrZXJuZWwgdmVyc2lv bnMgMy43IGFuZCBncmVhdGVyLiBOZXdlciBrZXJuZWxzCisrbWF5IGhhdmUgbW9yZSBpbnN0cnVt ZW50cyBhdmFpbGFibGUgdG8gcG9sbCB0aGFuIG9sZGVyIGtlcm5lbHMuCisrCisrRnJlZUJTRCBO b3RlOiBUaGlzIGlzIHN1cHBvcnRlZCBvbiBSZWxlYXNlIDYgYW5kIGhpZ2hlci4gSG93ZXZlciwg RnJlZUJTRCBoYXMgZmV3ZXIgYXZhaWxhYmxlCisraW5zdHJ1bWVudHMgdGhhbiBuZXcgTGludXgg a2VybmVscy4KKysKKytNdWx0aXBsZXhpbmcgTm90ZTogVGhlIG1ldHJpY3MgYXJlIHJlcG9ydGVk IGZyb20gdGhlIFRDUCBzb2NrZXQgd2hpY2ggbWVhbnMgdGhhdCBnYXRoZXJpbmcKKyttZXRyaWNz IGZyb20gbXVsdGlwbGV4ZWQgc2Vzc2lvbnMgd2lsbCByZXBvcnQgb24gdGhlIGFjdGl2aXR5IG9m IGFsbCBzZXNzaW9ucyBvbiB0aGF0IHNvY2tldC4KKytUaGlzIHdpbGwgbGlrZWx5IHJlc3VsdCBp biBsZXNzIGNsZWFyIHJlc3VsdHMgYW5kLCBhcyBzdWNoLCB3ZSBzdWdnZXN0IG9ubHkgZ2F0aGVy aW5nIG1ldHJpY3MKKytmcm9tIG5vbi1tdWx0aXBsZXhlZCBzZXNzaW9uLgorKworK0hQTlNDUCB3 aXRoIFJlc3VtZSBmdW5jdGlvbmFsaXR5CisrVGhpcyBmZWF0dXJlIGFsbG93cyBocG5zY3AgdG8g cmVzdW1lIGZhaWxlZCB0cmFuc2ZlcnMuIEluIHRoZSBldmVudCBvZiBhIGZhaWxlZCB0cmFuc2Zl cgorK2lzc3VlcyB0aGUgc2FtZSBzY3AgY29tbWFuZCB3aXRoIHRoZSAnLVInIG9wdGlvbi4gRm9y IGV4YW1wbGUgLSBpZiB5b3UgaXNzdWVkOgorKydocG5zY3AgbXlodWdlZmlsZSBtZUBob3N0On4n CisrYW5kIGl0IGRpZXMgaGFsZndheSB0aHJvdWdoIHRoZSB0cmFuc2ZlciBpc3N1aW5nCisrJ2hw bnNjcCAtWiBteWh1Z2VmaWxlIG1lQGhvc3Q6ficKKyt3aWxsIHJlc3VtZSB0aGUgdHJhbnNmZXIg YXQgdGhlIHBvaW50IHdoZXJlIGl0IGxlZnQgb2ZmLgorKworK1RoaXMgaXMgaW1wbGVtZW50ZWQg YnkgaGF2aW5nIHRoZSBzb3VyY2UgaG9zdCBzZW5kIGEgaGFzaCAoYmxha2UyYjUxMikgb2YgdGhl IGZpbGUgdG8gdGhlCisrdGFyZ2V0IGhvc3QuIFRoZSB0YXJnZXQgaG9zdCB0aGVuIGNvbXB1dGVz IGl0J3Mgb3duIGhhc2ggb2YgdGhlIHRhcmdldCBmaWxlLiBJZiB0aGUgaGFzaGVzIG1hdGNoCisr dGhlbiB0aGUgZmlsZSBpcyBza2lwcGVkIGFzIHRoaXMgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bCB0 cmFuc2Zlci4gSG93ZXZlciwgaWYgdGhlIGhhc2hlcyBkbyBub3QKKyttYXRjaCB0aGVuIHRoZSB0 YXJnZXQgc2VuZHMgdGhlIHNvdXJjZSBpdHMgaGFzaCBhbG9uZyB3aXRoIHRoZSBzaXplIG9mIHRo ZSBmaWxlLiBUaGUgc291cmNlIHRoZW4KKytjb21wdXRlcyB0aGUgaGFzaCBvZiB0aGUgZmlsZSAq dXAgdG8qIHRoZSBzaXplIG9mIHRoZSB0YXJnZXQgZmlsZS4gSWYgdGhvc2UgaGFzaGVzIG1hdGNo IHRoZW4KKyt0aGUgc291cmNlIG9ubHkgc2VuZCB0aGUgbmVjZXNzYXJ5IGJ5dGVzIHRvIGNvbXBs ZXRlIHRoZSB0cmFuc2Zlci4gSWYgdGhlIGhhc2hlcyBkbyBub3QgbWF0Y2ggdGhlbgorK3RoZSBl bnRpcmUgZmlsZSBpcyByZXNlbnQuIElmIHRoZSB0YXJnZXQgZmlsZSBpcyBsYXJnZXIgdGhlbiB0 aGUgc291cmNlIGZpbGUgdGhlbiB0aGUgZW50aXJlCisrc291cmNlIGZpbGUgaXMgc2VudCBhbmQg YW55IGV4aXN0aW5nIHRhcmdldCBmaWxlIGlzIG92ZXJ3cml0dGVuLgorKworK01VTFRJLVRIUkVB REVEIEFFUyBDSVBIRVI6CisrVGhlIEFFUyBjaXBoZXIgaW4gQ1RSIG1vZGUgaGFzIGJlZW4gbXVs dGl0aHJlYWRlZCAoTVRSLUFFUy1DVFIpLiBUaGlzIHdpbGwgYWxsb3cgc3NoIGluc3RhbGxhdGlv bnMKKytvbiBob3N0cyB3aXRoIG11bHRpcGxlIGNvcmVzIHRvIHVzZSBtb3JlIHRoYW4gb25lIHBy b2Nlc3NpbmcgY29yZSBkdXJpbmcgZW5jcnlwdGlvbi4KKytUZXN0cyBoYXZlIHNob3cgc2lnbmlm aWNhbnQgdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBpbmNyZWFzZXMgd2hlbiB1c2luZyBNVFItQUVT LUNUUiB1cAorK3RvIGFuZCBpbmNsdWRpbmcgYSBmdWxsIGdpZ2FiaXQgcGVyIHNlY29uZCBvbiBx dWFkIGNvcmUgc3lzdGVtcy4gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvCisrYWNoaWV2ZSBmdWxs IGxpbmUgcmF0ZSBvbiBkdWFsIGNvcmUgc3lzdGVtcyBidXQgT1MgYW5kIGRhdGEgbWFuYWdlbWVu dCBvdmVyaGVhZCBtYWtlcyB0aGlzCisrbW9yZSBkaWZmaWN1bHQgdG8gYWNoaWV2ZS4gVGhlIGNp cGhlciBzdHJlYW0gZnJvbSBNVFItQUVTLUNUUiBpcyBlbnRpcmVseSBjb21wYXRpYmxlIHdpdGgg c2luZ2xlCisrdGhyZWFkIEFFUy1DVFIgKFNULUFFUy1DVFIpIGltcGxlbWVudGF0aW9ucyBhbmQg c2hvdWxkIGJlIDEwMCUgYmFja3dhcmQgY29tcGF0aWJsZS4gT3B0aW1hbAorK3BlcmZvcm1hbmNl IHJlcXVpcmVzIHRoZSBNVFItQUVTLUNUUiBtb2RlIGJlIGVuYWJsZWQgb24gYm90aCBlbmRzIG9m IHRoZSBjb25uZWN0aW9uLgorK1RoZSBNVFItQUVTLUNUUiByZXBsYWNlcyBTVC1BRVMtQ1RSIGFu ZCBpcyB1c2VkIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IHdpdGggdGhlIHNhbWUKKytub21lbmNs YXR1cmUuCisrVXNhZ2UgZXhhbXBsZXM6CisrCQlzc2ggLWNhZXMxMjgtY3RyIHlvdUBob3N0LmNv bQorKwkJc2NwIC1vQ2lwaGVyPWFlczI1Ni1jdHIgZmlsZSB5b3VAaG9zdC5jb206fi9maWxlCisr CisrTVVMVEktVEhSRUFERUQgQ2hhQ2hhMjAtUG9seTEzMDUgQ0lQSEVSOgorK1RoZSBkZWZhdWx0 IGNpcGhlciB1c2VkIGJ5IEhQTi1TU0ggaXMgbm93IGEgdGhyZWFkZWQgaW1wbGVtZW50YXRpb24g b2YgdGhlCisrQ2hhQ2hhMjAtUG9seTEzMDUgY2lwaGVyLiBJbiB0ZXN0cyB0aGlzIGNpcGhlciBy ZXN1bHRzIGluIGFuIGFwcHJveGltYXRlbHkgOTAlIGdhaW4gaW4KKyt0aHJvdWdocHV0IHBlcmZv cm1hbmNlIGluIGNvbXBhcmlzb24gdG8gdGhlIHNlcmlhbCBpbXBsZW1lbnRhdGlvbiBmb3VuZCBp biBPcGVuU1NILgorK1RoaXMgY2lwaGVyIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBhbGwga25v d24gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIG9mIENoYUNoYTIwLVBvbHkxMzA1LgorKworK0lu dGVybmFsbHkgdGhpcyBjaXBoZXIgaXMgcmVmZXJyZWQgdG8gYXMgY2hhY2hhMjAtcG9seTEzMDUt bXRAaHBuc3NoLm9yZyAoQ0MyMC1NVCkKKytzaW1pbGFyIHRvIGhvdyB0aGUgT3BlblNTSCBpbXBs ZW1lbnRhdGlvbiBpcyBrbm93biBhcyBjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbQorKyhD QzIwLVMgKGZvciBzZXJpYWwpKS4gTm8gY2hhbmdlcyBhcmUgcmVxdWlyZWQgb24gdGhlIHBhcnQg b2YgdGhlIHVzZXIgdG8gbWFrZSB1c2Ugb2YgQ0MyMC1NVC4KKytIb3dldmVyLCBpZiB0aGUgdXNl cnMgZG9lc24ndCB3YW50IHRvIG1ha2UgdXNlIG9mIHRoaXMgY2lwaGVyIHRoZXkgY2FuIGV4cGxp Y2l0bHkgbG9hZCBDQzIwLVMgdXNpbmcKKysnLWNjaGFjaDIwLXBvbHkxMzA1QG9wZW5zc2guY29t YCBvbiB0aGUgY29tbWFuZCBsaW5lLgorKworK05PTkUgQ0lQSEVSOgorK1RvIHVzZSB0aGUgTk9O RSBvcHRpb24geW91IG11c3QgaGF2ZSB0aGUgTm9uZUVuYWJsZWQgc3dpdGNoIHNldCBvbiB0aGUg c2VydmVyIGFuZAorK3lvdSAqbXVzdCogaGF2ZSAqYm90aCogTm9uZUVuYWJsZWQgYW5kIE5vbmVT d2l0Y2ggc2V0IHRvIHllcyBvbiB0aGUgY2xpZW50LiBUaGUgTk9ORQorK2ZlYXR1cmUgd29ya3Mg d2l0aCBBTEwgc3NoIHN1YnN5c3RlbXMgKGFzIGZhciBhcyB3ZSBjYW4gdGVsbCkgKkFTIExPTkcg QVMqIGEgdHR5IGlzIG5vdAorK3NwYXduZWQuIElmIGEgdXNlciB1c2VzIHRoZSAtVCBzd2l0Y2gg dG8gcHJldmVudCBhIHR0eSBiZWluZyBjcmVhdGVkIHRoZSBOT05FIGNpcGhlciB3aWxsCisrYmUg ZGlzYWJsZWQuCisrCisrVGhlIHBlcmZvcm1hbmNlIGluY3JlYXNlIHdpbGwgb25seSBiZSBhcyBn b29kIGFzIHRoZSBuZXR3b3JrIGFuZCBUQ1Agc3RhY2sgdHVuaW5nCisrb24gdGhlIHJlY2lldmVy IHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24gYWxsb3dzLiBBcyBhIHJ1bGUgb2YgdGh1bWIgYSB1c2Vy IHdpbGwgbmVlZAorK2F0IGxlYXN0IDEwTWIvcyBjb25uZWN0aW9uIHdpdGggYSAxMDBtcyBSVFQg dG8gc2VlIGEgZG91Ymxpbmcgb2YgcGVyZm9ybWFuY2UuIFRoZQorK0hQTi1TU0ggaG9tZSBwYWdl IGRlc2NyaWJlcyB0aGlzIGluIGdyZWF0ZXIgZGV0YWlsLgorKworK2h0dHA6Ly93d3cucHNjLmVk dS9uZXR3b3JraW5nL3Byb2plY3RzL2hwbi1zc2gKKysKKytOT05FIE1BQzoKKytTdGFydGluZyB3 aXRoIEhQTiAxNXYxIHVzZXJzIHdpbGwgaGF2ZSB0aGUgb3B0aW9uIHRvIGRpc2FibGUgSE1BQyAo bWVzc2FnZQorK2F1dGhlbnRpY2F0aW9uIGNpcGhlcnMpIHdoZW4gdXNpbmcgdGhlIE5PTkUgY2lw aGVyLiBZb3UgbXVzdCBlbmFibGUgdGhlIGZvbGxvd2luZzoKKytOb25lRW5hYmxlZCwgTm9uZVN3 aXRjaCwgYW5kIE5vbmVNYWNFbmFibGVkLiBJZiBhbGwgdGhyZWUgYXJlIG5vdCBlbmFibGVkIHRo ZSBOb25lIE1BQworK3dpbGwgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZC4gSW4gdGVzdHMgdGhl IHVzZSBvZiB0aGUgTm9uZSBNQUMgaW1wcm92ZWQgdGhyb3VwdXQgYnkKKyttb3JlIHRoYW4gMzAl LgorKworK2V4OiBzY3AgLW9Ob25lU3dpdGNoPXllcyAtb05vbmVFbmFibGVkPXllcyAtb05vbmVN YWNFbmFibGVkPXllcyBmaWxlIGhvc3Q6fgorKworK0hQTiBTcGVjaWZpYyBDb25maWd1cmF0aW9u IG9wdGlvbnMKKysKKytUY3BSY3ZCdWZQb2xsPVt5ZXMvbm9dIGNsaWVudC9zZXJ2ZXIKKysgICAg ICBFbmFibGUgb2YgZGlzYWJsZSB0aGUgcG9sbGluZyBvZiB0aGUgdGNwIHJlY2VpdmUgYnVmZmVy IHRocm91Z2ggdGhlIGxpZmUKKytvZiB0aGUgY29ubmVjdGlvbi4gWW91IHdvdWxkIHdhbnQgdG8g bWFrZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZAorK2ZvciBzeXN0ZW1zIG1ha2lu ZyB1c2Ugb2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQuMjQrLCAyLjYsIE1TIFZpc3Rh KQorK2RlZmF1bHQgaXMgeWVzLgorKworK05vbmVFbmFibGVkPVt5ZXMvbm9dIGNsaWVudC9zZXJ2 ZXIKKysgICAgICBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBOb25lIGNpcGhlci4g Q2FyZSBtdXN0IGFsd2F5cyBiZSB1c2VkCisrd2hlbiBlbmFibGluZyB0aGlzIGFzIGl0IHdpbGwg YWxsb3cgdXNlcnMgdG8gc2VuZCBkYXRhIGluIHRoZSBjbGVhci4gSG93ZXZlciwKKytpdCBpcyBp bXBvcnRhbnQgdG8gbm90ZSB0aGF0IGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIHJlbWFpbnMg ZW5jcnlwdGVkCisrZXZlbiBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLiBTZXQgdG8gbm8gYnkg ZGVmYXVsdC4KKysKKytOb25lTWFjRW5hYmxlZD1beWVzL25vXSBjbGllbnQvc2VydmVyCisrICAg ICAgRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBNQUMuIFdoZW4gdGhpcyBp cyBlbmFibGVkIHNzaAorK3dpbGwgKm5vdCogcHJvdmlkZSBkYXRhIGludGVncml0eSBvZiBhbnkg ZGF0YSBiZWluZyB0cmFuc21pdHRlZCBiZXR3ZWVuIGhvc3RzLiBVc2UKKyt3aXRoIGNhdXRpb24g YXMgaXQsIHVubGlrZSBqdXN0IHVzaW5nIE5vbmVFbmFibGVkLCBkb2Vzbid0IHByb3ZpZGUgZGF0 YSBpbnRlZ3JpdHkgYW5kCisrcHJvdGVjdGlvbiBhZ2FpbnN0IG1hbi1pbi10aGUtbWlkZGxlIGF0 dGFja3MuIEFzIHdpdGggTm9uZUVuYWJsZWQgYWxsIGF1dGhlbnRpY2F0aW9uCisrcmVtYWlucyBl bmNyeXB0ZWQgYW5kIGludGVncml0eSBpcyBlbnN1cmVkLiBEZWZhdWx0IGlzIG5vLgorKworK05v bmVTd2l0Y2g9W3llcy9ub10gY2xpZW50CisrICAgICBTd2l0Y2ggdGhlIGVuY3J5cHRpb24gY2lw aGVyIGJlaW5nIHVzZWQgdG8gdGhlIE5vbmUgY2lwaGVyIGFmdGVyCisrYXV0aGVudGljYXRpb24g dGFrZXMgcGxhY2UuIE5vbmVFbmFibGVkIG11c3QgYmUgZW5hYmxlZCBvbiBib3RoIHRoZSBjbGll bnQKKythbmQgc2VydmVyIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uIFdoZW4gdGhlIGNvbm5lY3Rp b24gc3dpdGNoZXMgdG8gdGhlIE5PTkUKKytjaXBoZXIgYSB3YXJuaW5nIGlzIHNlbnQgdG8gU1RE RVJSLiBUaGUgY29ubmVjdGlvbiBhdHRlbXB0IHdpbGwgZmFpbCB3aXRoIGFuCisrZXJyb3IgaWYg YSBjbGllbnQgcmVxdWVzdHMgYSBOb25lU3dpdGNoIGZyb20gdGhlIHNlcnZlciB0aGF0IGRvZXMg bm90IGV4cGxpY2l0bHkKKytoYXZlIE5vbmVFbmFibGVkIHNldCB0byB5ZXMuIE5vdGU6IFRoZSBO T05FIGNpcGhlciBjYW5ub3QgYmUgdXNlZCBpbgorK2ludGVyYWN0aXZlIChzaGVsbCkgc2Vzc2lv bnMgYW5kIGl0IHdpbGwgZmFpbCBzaWxlbnRseS4gU2V0IHRvIG5vIGJ5IGRlZmF1bHQuCisrCisr SFBORGlzYWJsZWQ9W3llcy9ub10gY2xpZW50L3NlcnZlcgorKyAgICAgSW4gc29tZSBzaXR1YXRp b25zLCBzdWNoIGFzIHRyYW5zZmVycyBvbiBhIGxvY2FsIGFyZWEgbmV0d29yaywgdGhlIGltcGFj dAorK29mIHRoZSBIUE4gY29kZSBwcm9kdWNlcyBhIG5ldCBkZWNyZWFzZSBpbiBwZXJmb3JtYW5j ZS4gSW4gdGhlc2UgY2FzZXMgaXQgaXMKKytoZWxwZnVsIHRvIGRpc2FibGUgdGhlIEhQTiBmdW5j dGlvbmFsaXR5LiBCeSBkZWZhdWx0IEhQTkRpc2FibGVkIGlzIHNldCB0byBuby4KKysKKytDcmVk aXRzOiBUaGlzIHBhdGNoIHdhcyBjb25jZWl2ZWQsIGRlc2lnbmVkLCBhbmQgbGVkIGJ5IENocmlz IFJhcGllciAocmFwaWVyQHBzYy5lZHUpCisrICAgICAgICAgVGhlIG1ham9yaXR5IG9mIHRoZSBh Y3R1YWwgY29kaW5nIGZvciB2ZXJzaW9ucyB1cCB0byBIUE4xMnYxIHdhcyBwZXJmb3JtZWQKKysg ICAgICAgICBieSBNaWNoYWVsIFN0ZXZlbnMgKG1zdGV2ZW5zQGFuZHJldy5jbXUuZWR1KS4gVGhl IE1ULUFFUy1DVFIgY2lwaGVyIHdhcworKyAgICAgICAgIGltcGxlbWVudGVkIGJ5IEJlbiBCZW5u ZXQgKGJlbkBwc2MuZWR1KSBhbmQgaW1wcm92ZWQgYnkgTWlrZSBUYXNvdGEKKysgICAgICAgICAo dGFzb3RhQGdtYWlsLmNvbSkgYW4gTlNGIFJFVSBncmFudCByZWNpcGllbnQgZm9yIDIwMTMuCisr CSBBbGxhbiBKdWRlIHByb3ZpZGVkIHRoZSBjb2RlIGZvciB0aGUgTm9uZU1hYyBhbmQgYnVmZmVy IG5vcm1hbGl6YXRpb24uCisrICAgICAgICAgVGhpcyB3b3JrIHdhcyBmaW5hbmNlZCwgaW4gcGFy dCwgYnkgQ2lzY28gU3lzdGVtLCBJbmMuLCB0aGUgTmF0aW9uYWwKKysgICAgICAgICBMaWJyYXJ5 IG9mIE1lZGljaW5lLCBhbmQgdGhlIE5hdGlvbmFsIFNjaWVuY2UgRm91bmRhdGlvbi4KKysKKytT cG9uc29yczogVGhhbmtzIHRvIE5pa2xhcyBIYW1idWNoZW4gZm9yIGJlaW5nIHRoZSBmaXJzdCBz cG9uc29yIG9mIEhQTi1TU0gKKysJICB2aWEgZ2l0aHViJ3Mgc3BvbnNvciBwcm9ncmFtIQorKwor KworK0VkaXRlZDogU2VwdGVtYmVyIDE5LCAyMDI1CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEu b3JpZy9IUE5TU0hJbnN0YWxsYXRpb24udHh0IG9wZW5zc2gtMTAuM3AxL0hQTlNTSEluc3RhbGxh dGlvbi50eHQKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL0hQTlNTSEluc3RhbGxhdGlvbi50eHQJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9I UE5TU0hJbnN0YWxsYXRpb24udHh0CTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI0NzI0ODQ0ICswMjAw CitAQCAtMCwwICsxLDM1NCBAQAorK++7v0hQTi1TU0ggSW5zdGFsbGF0aW9uCisrCisrVGhlIHBy b2Nlc3Mgb2YgaW5zdGFsbGluZyBIUE4tU1NIIGZyb20gc291cmNlIGlzIGEgcmVsYXRpdmVseSBw YWlubGVzcyBwcm9jZXNzCisrYnV0IGRvZXMgaGF2ZSBzb21lIG51YW5jZXMuIFRoaXMgZG9jdW1l bnQgd2lsbCBnbyB0aHJvdWdoIHRoZSBwcm9jZXNzIHN0ZXAgYnkKKytzdGVwIHRvIGhlbHAgeW91 IGdldCB0aGUgbW9zdCBmcm9tIHlvdXIgaW5zdGFsbGF0aW9uLiBJZiB5b3UgZmluZCBhbnkgZXJy b3JzCisrcGxlYXNlIGNvbnRhY3QgdXMgYXQgaHBuc3NoQHBzYy5lZHUuCisrCisrCisrU3RlcCAx OiBHZXQgdGhlIHNvdXJjZSBjb2RlLgorKworK1RoZSBvZmZpY2lhbCByZXBvc2l0b3J5IGZvciBI UE4tU1NIIGlzIGZvdW5kIGF0CisraHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBuLXNzaC4g R2V0IGEgY29weSB3aXRoCisrImdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vcmFwaWVyMS9o cG4tc3No4oCdLgorKworKworK1N0ZXAgMjogSW5zdGFsbCBkZXBlbmRlbmNpZXMuCisrCisrV2hh dCB5b3UgbmVlZCB0byBpbnN0YWxsIGlzIGRlcGVuZGVudCBvbiB5b3VyIGRpc3RyaWJ1dGlvbiBi dXQgd2lsbCBpbmNsdWRlOgorKyogT3BlblNTTCBkZXZlbG9wbWVudCBwYWNrYWdlCisrICAgKiBE ZWJpYW46IGxpYnNzbC1kZXYKKysgICAqIEZlZG9yYTogb3BlbnNzbC1kZXZlbAorKyogQWx0ZXJu YXRpdmVseSB5b3UgY2FuIHVzZSBMSWJyZVNTTAorKyAgICogSG93ZXZlciwgaW4gdGhpcyBjYXNl IHdlIHN1Z2dlc3QgY29tcGlsaW5nIGFuZCBpbnN0YWxsaW5nIGxpYnJlc3NsIG1hbnVhbGx5IGFz CisrICAgICB0aGVyZSBhcmUgZmV3IG1haW50YWluZWQgbGludXggcGFja2FnZXMgZm9yIExpYnJl U1NMLgorKyAgICogQWxzbywgTGlicmVTU0wgdjMuNSBhbmQgdjMuNiBkbyBub3Qgc3VwcG9ydCB0 aGUgdGhyZWFkZWQgQUVTLUNUUiBjaXBoZXIuCisrICAgICBJZiB0aGF04oCZcyBpbXBvcnRhbnQg dG8geW91IHRoZW4geW91IHNob3VsZCB1c2UgT3BlblNTTC4KKysqIFogY29tcHJlc3Npb24gbGli cmFyeQorKyAgICogRGViaWFuOiB6bGliMWctZGV2CisrICAgKiBGZWRvcmE6IHpsaWItZGV2ZWwK KysqIEF1dG9jb25mCisrKiBBdXRvbWFrZQorKworKworK1N0ZXAgMzogSW5zdGFsbCBvcHRpb25h bCBkZXBlbmRlbmNpZXMuCisrCisrVGhpcyBvcHRpb25hbCBsaWJyYXJpZXMgd2lsbCBleHRlbmQg dGhlIGZ1bmN0aW9uYWxpdHkgb2YgSFBOLVNTSCB0byBhbGxvdyB0aGUgdXNlIG9mIFBBTQorK2F1 dGhlbnRpY2F0aW9uLCBLZXJiZXJvcywgZ3JhcGhpY2FsIHBhc3N3b3JkIHRvb2xzLCBldGMuCisr KiBQQU0KKysqIEtlcmJlcm9zCisrKiBHVEsKKysKKysKKytTdGVwIDQ6IEJ1aWxkIHRoZSBjb25m aWd1cmUgZmlsZQorKworK2dlbmVyYXRlIC4vY29uZmlndXJlIHdpdGgg4oCcYXV0b3JlY29uZiAt ZiAtaeKAnQorKworKworK1N0ZXAgNTogQ29uZmlndXJhdGlvbgorKworK0NvbmZpZ3VyZSB0aGUg aW5zdGFsbGF0aW9uLiBZb3UgY2FuIGdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8g ZG8gdGhpcyBieQorK2lzc3Vpbmcg4oCcLi9jb25maWd1cmUgLS1oZWxw4oCdLiBIb3dldmVyLCBj b21tb25seSB5b3Ugd2lsbCB3YW50IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24K Kytsb2NhdGlvbiBvZiB0aGUgYmluYXJpZXMuIFRoaXMgY2FuIGJlIGRvbmUgd2l0aCDigJwtLXBy ZWZpeD0vW2Rlc2lyZWRfcGF0aF3igJ0uIEZvciBleGFtcGxlLAorK2lmIHlvdSB3YW50IHRoZSBi aW5hcmllcyBpbnN0YWxsZWQgaW50byAvdXNyL2JpbiBhcyBvcHBvc2VkIHRvIHRoZSBkZWZhdWx0 IG9mCisrL3Vzci9sb2NhbC9iaW4geW914oCZZCB1c2Ug4oCcLi9jb25maWd1cmUgLS1wcmVmaXg9 L3VzcuKAnS4gT3RoZXIgY29tbW9uIG9wdGlvbnMgd291bGQgYmUgdG8KKytpbmNvcnBvcmF0ZSBw YW0sIGtlcmJlcm9zLCBhbHRlcm5hdGl2ZSBTU0wgbGlicmFyaWVzLCBhbmQgc28gZm9ydGguIEhv d2V2ZXIsIGZvciBtb3N0IHVzZXJzCisrZWl0aGVyIG5vIGFkZGl0aW9uYWwgY29uZmlndXJhdGlv biBvcHRpb25zIG9yIG1vZGlmeWluZyB0aGUgcHJlZml4IHdpbGwgc3VmZmljZS4KKysKKysKKytT dGVwIDY6IE1ha2UKKysKKytNYWtlIHRoZSBhcHBsaWNhdGlvbiB3aXRoIOKAnG1ha2UgLWpbbnVt IGNvcmVzXeKAnS4gU28gaWYgeW91IGhhdmUgYW4gOCBjb3JlIHN5c3RlbQorK3lvdeKAmWQgdXNl IOKAnG1ha2UgLWo44oCdCisrCisrCisrU3RlcCA3OiBTZXQgdXAgdGhlIGhwbnNzaGQgdXNlci4g CisrCisrVGhpcyB1c2VyIGlzIHBhcnQgb2YgdGhlIHByaXZpbGVnZSBzZXBhcmF0aW9uIHJvdXRp bmVzIHVzZWQgaW4gdGhlIAorK3ByZS1hdXRoZW50aWNhdGlvbiBzYW5kYm94LiBJIHN1Z2dlc3Qg dXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOiAKKysKKytzdWRvIHVzZXJhZGQgLS1zeXN0ZW0g LS1zaGVsbCAvdXNyL3NiaW4vbm9sb2dpbiAtLWNvbW1lbnQ9IlByaXZpbGVnZSBzZXBhcmF0ZWQg SFBOU1NIIFVzZXIiIFwgCisrLS1ob21lPS9ydW4vaHBuc3NoZCBocG5zc2hkCisrCisrQWx0ZXJu YXRpdmVseSwgeW91IGNhbiB1c2UgdmlwdyB0byBhZGQgdGhlIHVzZXIgbWFudWFsbHkuIAorKwor KworK1N0ZXAgODogSW5zdGFsbGF0aW9uCisrCisrQWZ0ZXIgSFBOLVNTSCBzdWNjZXNzZnVsbHkg YnVpbGRzLCBpbnN0YWxsIGl0IHdpdGgg4oCcc3VkbyBtYWtlIGluc3RhbGzigJ0uIFRoaXMgd2ls bCBpbnN0YWxsIHRoZQorK2JpbmFyaWVzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgZ2VuZXJh dGUgdGhlIHVuaXF1ZSBob3N0IGtleXMgdXNlZC4gQXQgdGhpcyBwb2ludCB5b3UgY2FuCisrbWFr ZSBjaGFuZ2VzIHRvIHRoZSBzc2ggY2xpZW50IGFuZCBzZXJ2ZXIgZGVmYXVsdCBjb25maWd1cmF0 aW9uLiBUaGVzZSBmaWxlcyBhcmUKKytmb3VuZCwgZ2VuZXJhbGx5LCBpbiAvZXRjL2hwbnNzaC9z c2hfY29uZmlnIGFuZCBzc2hkX2NvbmZpZyByZXNwZWN0aXZlbHkuIFlvdSBtYXkgd2FudCB0bwor K2NoYW5nZSB0aGUgZGVmYXVsdCBwb3J0IGZyb20gMjIyMiB0byBzb21lIG90aGVyIHZhbHVlLiBZ b3UgbWF5IGFsc28gd2FudCB0byBlbmFibGUgdGhlCisrTm9uZUNpcGhlciBhbmQgTm9uZU1hYyBv cHRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiB1c2Ug4oCcbWFuIGhwbnNzaGRfY29uZmln4oCd IGFuZAorK+KAnG1hbiBocG5zc2hfY29uZmln4oCdLiBOb3RlOiBUaGUgaHBuc3NoIGNsaWVudCBl eHBlY3RzIHRoZSBzZXJ2ZXIgdG8gYmUgb24gcG9ydCAyMjIyIGJ1dCB3aWxsCisrZmFsbGJhY2sg dG8gMjIgaWYgaXTigJlzIG5vdCBmb3VuZCB0aGVyZS4gU28gaWYgeW91IGRvIGNoYW5nZSB0aGUg ZGVmYXVsdCBwb3J0IHlvdeKAmWxsIG5lZWQgdG8KKyttYWtlIHN1cmUgdGhlIGNsaWVudHMgcG9p bnQgYXQgdGhlIGNvcnJlY3QgcG9ydC4KKysKKytTdGVwIDk6IEZpbmlzaGluZyB1cC4KKysKKytB dCB0aGlzIHBvaW50IHlvdSBjYW4gc3RhcnQgaHBuc3NoZCBtYW51YWxseSBieSBydW5uaW5nIOKA nHN1ZG8gL3Vzci9zYmluL2hwbnNzaGTigJ0KKytvciB3aGF0ZXZlciB0aGUgZnVsbCBwYXRoIHRv IHRoZSBocG5zc2hkIGJpbmFyeSBtaWdodCBiZS4gSG93ZXZlciwgdGhpcyB3b27igJl0CisrcmVz dGFydCBhdXRvbWF0aWNhbGx5IG9uIHJlYm9vdC4gVG8gZG8gdGhpcyB5b3XigJlsbCBuZWVkIHRv IGluc3RhbGwgYW4gYXBwcm9wcmlhdGUKKytzeXN0ZW1kIGNvbmZpZ3VyYXRpb24gZmlsZS4gSWYg dGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBpZGVhIHRvIHlvdSB0aGVuIGZvbGxvd2luZyBzdGVwcyBt YXkgYmUKKytvZiBoZWxwLiBPdGhlcndpc2UsIHlvdSBhcmUgZG9uZS4gRW5qb3khCisrCisrCisr U3RlcCAxMDogSW5zdGFsbGluZyBhIHN5c3RlbWQgc3RhcnR1cCBmaWxlLgorKworK1RoZSBjb3Jy ZWN0IHN5c3RlbWQgc3RhcnR1cCBmaWxlIGRlcGVuZHMgb24gdGhlIGRpc3RyaWJ1dGlvbiB5b3Ug YXJlIHVzaW5nLiBGb3Igc3lzdGVtCisrdXNpbmcgc3lzdGVtZCAoeW91IHN0YXJ0IGEgc2Vydmlj ZSB3aXRoIHN5c3RlbWN0bCkgY3JlYXRlIGEgZmlsZSBhdCAvbGliL3N5c3RlbWQvc3lzdGVtL2hw bnNzaGQuc2VydmljZQorK3dpdGggdGhlIGZvbGxvd2luZyBjb250ZW50cyBOQjogeW91IG1heSBu ZWVkIHRvIHVwZGF0ZSB0aGUgcGF0aHMgdG8gbWF0Y2ggeW91ciBpbnN0YWxsYXRpb246CisrCisr W1VuaXRdCisrRGVzY3JpcHRpb249SFBOL09wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcgorK0Rv Y3VtZW50YXRpb249bWFuOmhwbnNzaGQoOCkgbWFuOmhwbnNzaGRfY29uZmlnKDUpCisrQWZ0ZXI9 bmV0d29yay50YXJnZXQgYXVkaXRkLnNlcnZpY2UKKytDb25kaXRpb25QYXRoRXhpc3RzPSEvZXRj L2hwbnNzaC9zc2hkX25vdF90b19iZV9ydW4KKysKKytbU2VydmljZV0KKytFbnZpcm9ubWVudEZp bGU9LS9ldGMvZGVmYXVsdC9ocG5zc2gKKytFeGVjU3RhcnRQcmU9L3Vzci9zYmluL2hwbnNzaGQg LXQKKytFeGVjU3RhcnQ9L3Vzci9zYmluL2hwbnNzaGQgLUQgJFNTSERfT1BUUworK0V4ZWNSZWxv YWQ9L3Vzci9zYmluL2hwbnNzaGQgLXQKKytFeGVjUmVsb2FkPS9iaW4va2lsbCAtSFVQICRNQUlO UElECisrS2lsbE1vZGU9cHJvY2VzcworK1Jlc3RhcnQ9b24tZmFpbHVyZQorK1Jlc3RhcnRQcmV2 ZW50RXhpdFN0YXR1cz0yNTUKKytUeXBlPW5vdGlmeQorK1J1bnRpbWVEaXJlY3Rvcnk9aHBuc3No ZAorK1J1bnRpbWVEaXJlY3RvcnlNb2RlPTA3NTUKKysKKytbSW5zdGFsbF0KKytXYW50ZWRCeT1t dWx0aS11c2VyLnRhcmdldAorK0FsaWFzPWhwbnNzaGQuc2VydmljZQorKworK0FsdGVybmF0aXZl bHksIHRoZSAuL2NvbmZpZ3VyZSBjb21tYW5kIHdpbGwgZ2VuZXJhdGUgYSBocG5zc2hkLnNlcnZp Y2UgZmlsZSBmcm9tCisraHBuc3NoZC5zZXJ2aWNlLmluLiBZb3UgY2FuIHVzZSB0aGlzIGZpbGUg YnkgY29weWluZyBpdCB0bworKy9saWJzeXN0ZW1kL3N5c3RlbS9ocG5zc2hkLnNlcnZpY2UgaW5z dGVhZCBvZiBjb3B5aW5nIHRoZSBhYm92ZSB0ZXh0LgorKworK1RoZW4gY3JlYXRlIHRoZSBkZWZh dWx0cyBmaWxlIGF0IC9ldGMvZGVmYXVsdC9ocG5zc2hkIHdpdGggdGhlIGZvbGxvd2luZyBjb250 ZW50OgorKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3Igb3BlbnNzaC1zZXJ2ZXIuCisrIyBPcHRpb25z IHRvIHBhc3MgdG8gc3NoZAorK1NTSERfT1BUUz0KKysKKytFbnRlciBhbnkgcnVudGltZSBvcHRp b25zIHlvdSB3YW50IG9uIHRoZSBTU0hEX09QVFMgbGluZS4gSWYgeW91IGNhbuKAmXQgdGhpbmsg b2YgYW55LCBzaW1wbHkKKytsZWF2ZSBpdCBibGFuay4gQSBzYW1wbGUgL2V0Yy9kZWZhdWxzL2hw bnNzaCBmaWxlIG1heSBiZSBmb3VuZCBpbiBkZWZhdWx0cy5ocG5zc2hkLgorKworK1lvdSBtdXN0 IHRoZW4gcmVsb2FkIHRoZSBzeXN0ZW1kIHNlcnZpY2UgdG8gbWFrZSBpdCBhd2FyZSBvZiB0aGlz IG5ldyBzZXJ2aWNlIHdpdGgKKytzdWRvIHN5c3RlbWN0bCBkYWVtb24tcmVsb2FkCisrCisrSWYg eW91IGFyZSB1c2luZyBhbiBpbml0LmQgKHlvdSBzdGFydCBhIHNlcnZpY2Ugd2l0aCDigJhzeXN0 ZW3igJkpIHRoZW4geW91IG5lZWQgdG8gaW5zdGFsbCBhbgorK2luaXQuZC4gQ3JlYXRlIHRoZSBm aWxlIC9ldGMvaW5pdC5kL2hwbnNzaCBhbmQgY29weSB0aGUgZm9sbG93aW5nIGludG8gaXQuIE5C OiBUaGUgZm9sbG93aW5nIGlzCisrZm9yIHdoZXJlIGhwbnNzaGQgaXMgZm91bmQgYXQgL3Vzci9z YmluL2hwbnNzaGQuIElmIGl0IGlzIG5vdCBpbiB0aGF0IGxvY2F0aW9uIHlvdeKAmWxsIG5lZWQg dG8KKyt1cGRhdGUgdGhlIHBhdGhzLgorKworK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgdXNlIHRo ZSBocG5zc2hkLmluaXQgZmlsZSBjcmVhdGVkIGR1cmluZyBjb25maWd1cmUuIFRoaXMgd2lsbCBi ZQorK3ByZXBvcHVsYXRlZCB3aXRoIHRoZSBjb3JyZWN0IHBhdGhzIGJ5IHRoZSBjb25maWd1cmUg c2NyaXB0LgorKworKyMhIC9iaW4vc2gKKysKKysjIyMgQkVHSU4gSU5JVCBJTkZPCisrIyBQcm92 aWRlczogICAgICAgICAgICAgICAgaHBuc3NoZAorKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICAgICAk cmVtb3RlX2ZzICRzeXNsb2cKKysjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICRz eXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6 CisrIyBTaG9ydC1EZXNjcmlwdGlvbjogICAgICAgIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZl ciB3aXRoIEhQTgorKyMjIyBFTkQgSU5JVCBJTkZPCisrCisrc2V0IC1lCisrCisrIyAvZXRjL2lu aXQuZC9ocG5zc2g6IHN0YXJ0IGFuZCBzdG9wIHRoZSBPcGVuQlNEICJzZWN1cmUgc2hlbGwodG0p IiBkYWVtb24KKysKKyt0ZXN0IC14IC91c3Ivc2Jpbi9ocG5zc2hkIHx8IGV4aXQgMAorKyggL3Vz ci9zYmluL2hwbnNzaGQgLVw/IDI+JjEgfCBncmVwIC1xIE9wZW5TU0ggKSAyPi9kZXYvbnVsbCB8 fCBleGl0IDAKKysKKyt1bWFzayAwMjIKKysKKytpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9ocG5z c2g7IHRoZW4KKysgICAgLiAvZXRjL2RlZmF1bHQvaHBuc3NoCisrZmkKKysKKysuIC9saWIvbHNi L2luaXQtZnVuY3Rpb25zCisrCisrCisraWYgWyAtbiAiJDIiIF07IHRoZW4KKysgICAgU1NIRF9P UFRTPSIkU1NIRF9PUFRTICQyIgorK2ZpCisrCisrIyBBcmUgd2UgcnVubmluZyBmcm9tIGluaXQ/ CisrcnVuX2J5X2luaXQoKSB7CisrICAgIChbICIkcHJldmlvdXMiIF0gJiYgWyAiJHJ1bmxldmVs IiBdKSB8fCBbICIkcnVubGV2ZWwiID0gUyBdCisrfQorKworK2NoZWNrX2Zvcl9ub19zdGFydCgp IHsKKysgICAgIyBmb3JnZXQgaXQgaWYgd2UncmUgdHJ5aW5nIHRvIHN0YXJ0LCBhbmQgL2V0Yy9o cG5zc2gvc3NoZF9ub3RfdG9fYmVfcnVuIGV4aXN0cworKyAgICBpZiBbIC1lIC9ldGMvaHBuc3No L3NzaGRfbm90X3RvX2JlX3J1biBdOyB0aGVuCisrICAgICAgICBpZiBbICIkMSIgPSBsb2dfZW5k X21zZyBdOyB0aGVuCisrICAgICAgICAgICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVlCisrICAgICAg ICBmaQorKyAgICAgICAgaWYgISBydW5fYnlfaW5pdDsgdGhlbgorKyAgICAgICAgICAgIGxvZ19h Y3Rpb25fbXNnICJIUE4vT3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIG5vdCBpbiB1c2UgKC9l dGMvaHBuc3NoL3NzaGRfbm90X3RvX2JlX3J1bikiIHx8IHRydWUKKysgICAgICAgIGZpCisrICAg ICAgICBleGl0IDAKKysgICAgZmkKKyt9CisrCisrY2hlY2tfZGV2X251bGwoKSB7CisrICAgIGlm IFsgISAtYyAvZGV2L251bGwgXTsgdGhlbgorKyAgICAgICAgaWYgWyAiJDEiID0gbG9nX2VuZF9t c2cgXTsgdGhlbgorKyAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQorKyAgICAgICAg ZmkKKysgICAgICAgIGlmICEgcnVuX2J5X2luaXQ7IHRoZW4KKysgICAgICAgICAgICBsb2dfYWN0 aW9uX21zZyAiL2Rldi9udWxsIGlzIG5vdCBhIGNoYXJhY3RlciBkZXZpY2UhIiB8fCB0cnVlCisr ICAgICAgICBmaQorKyAgICAgICAgZXhpdCAxCisrICAgIGZpCisrfQorKworK2NoZWNrX3ByaXZz ZXBfZGlyKCkgeworKyAgICAjIENyZWF0ZSB0aGUgUHJpdlNlcCBlbXB0eSBkaXIgaWYgbmVjZXNz YXJ5CisrICAgIGlmIFsgISAtZCAvcnVuL2hwbnNzaGQgXTsgdGhlbgorKyAgICAgICAgbWtkaXIg L3J1bi9ocG5zc2hkCisrICAgICAgICBjaG1vZCAwNzU1IC9ydW4vaHBuc3NoZAorKyAgICBmaQor K30KKysKKytjaGVja19jb25maWcoKSB7CisrICAgIGlmIFsgISAtZSAvZXRjL2hwbnNzaC9zc2hk X25vdF90b19iZV9ydW4gXTsgdGhlbgorKyAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0My MDg2CisrICAgICAgICAvdXNyL3NiaW4vaHBuc3NoZCAkU1NIRF9PUFRTIC10IHx8IGV4aXQgMQor KyAgICBmaQorK30KKysKKytleHBvcnQgUEFUSD0iJHtQQVRIOiskUEFUSDp9L3Vzci9zYmluOi9z YmluIgorKworK2Nhc2UgIiQxIiBpbgorKyAgc3RhcnQpCisrICAgICAgICBjaGVja19wcml2c2Vw X2RpcgorKyAgICAgICAgY2hlY2tfZm9yX25vX3N0YXJ0CisrICAgICAgICBjaGVja19kZXZfbnVs bAorKyAgICAgICAgbG9nX2RhZW1vbl9tc2cgIlN0YXJ0aW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBT aGVsbCBzZXJ2ZXIiICJocG5zc2hkIiB8fCB0cnVlCisrICAgICAgICAjIHNoZWxsY2hlY2sgZGlz YWJsZT1TQzIwODYKKysgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWll dCAtLW9rbm9kbyAtLWNodWlkIDA6MCAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMg L3Vzci9zYmluL2hwbnNzaGQgLS0gJFNTSERfT1BUUzsgdGhlbgorKyAgICAgICAgICAgIGxvZ19l bmRfbXNnIDAgfHwgdHJ1ZQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGxvZ19lbmRfbXNn IDEgfHwgdHJ1ZQorKyAgICAgICAgZmkKKysgICAgICAgIDs7CisrICBzdG9wKQorKyAgICAgICAg bG9nX2RhZW1vbl9tc2cgIlN0b3BwaW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIi ICJocG5zc2hkIiB8fCB0cnVlCisrICAgICAgICBpZiBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3Ag LS1xdWlldCAtLW9rbm9kbyAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9z YmluL2hwbnNzaGQ7IHRoZW4KKysgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKKysg ICAgICAgIGVsc2UKKysgICAgICAgICAgICBsb2dfZW5kX21zZyAxIHx8IHRydWUKKysgICAgICAg IGZpCisrICAgICAgICA7OworKworKworKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKysgICAgICAg IGNoZWNrX2Zvcl9ub19zdGFydAorKyAgICAgICAgY2hlY2tfY29uZmlnCisrICAgICAgICBsb2df ZGFlbW9uX21zZyAiUmVsb2FkaW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIncyBj b25maWd1cmF0aW9uIiAiaHBuc3NoZCIgfHwgdHJ1ZQorKyAgICAgICAgaWYgc3RhcnQtc3RvcC1k YWVtb24gLS1zdG9wIC0tc2lnbmFsIDEgLS1xdWlldCAtLW9rbm9kbyAtLXBpZGZpbGUgL3J1bi9o cG5zc2hkLnBpZCAtLWV4ZWMgL3Vzci9zYmluL2hwbnNzaGQ7IHRoZW4KKysgICAgICAgICAgICBs b2dfZW5kX21zZyAwIHx8IHRydWUKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBsb2dfZW5k X21zZyAxIHx8IHRydWUKKysgICAgICAgIGZpCisrICAgICAgICA7OworKworKworKyAgcmVzdGFy dCkKKysgICAgICAgIGNoZWNrX3ByaXZzZXBfZGlyCisrICAgICAgICBjaGVja19jb25maWcKKysg ICAgICAgIGxvZ19kYWVtb25fbXNnICJSZXN0YXJ0aW5nIEhQTi9PcGVuQlNEIFNlY3VyZSBTaGVs bCBzZXJ2ZXIiICJocG5zc2hkIiB8fCB0cnVlCisrICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAt LXN0b3AgLS1xdWlldCAtLW9rbm9kbyAtLXJldHJ5IDMwIC0tcGlkZmlsZSAvcnVuL2hwbnNzaGQu cGlkIC0tZXhlYyAvdXNyL3NiaW4vaHBuc3NoZAorKyAgICAgICAgY2hlY2tfZm9yX25vX3N0YXJ0 IGxvZ19lbmRfbXNnCisrICAgICAgICBjaGVja19kZXZfbnVsbCBsb2dfZW5kX21zZworKyAgICAg ICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2CisrICAgICAgICBpZiBzdGFydC1zdG9wLWRh ZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1va25vZG8gLS1jaHVpZCAwOjAgLS1waWRmaWxlIC9ydW4v aHBuc3NoZC5waWQgLS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hkIC0tICRTU0hEX09QVFM7IHRoZW4K KysgICAgICAgICAgICBsb2dfZW5kX21zZyAwIHx8IHRydWUKKysgICAgICAgIGVsc2UKKysgICAg ICAgICAgICBsb2dfZW5kX21zZyAxIHx8IHRydWUKKysgICAgICAgIGZpCisrICAgICAgICA7Owor KworKworKyAgdHJ5LXJlc3RhcnQpCisrICAgICAgICBjaGVja19wcml2c2VwX2RpcgorKyAgICAg ICAgY2hlY2tfY29uZmlnCisrICAgICAgICBsb2dfZGFlbW9uX21zZyAiUmVzdGFydGluZyBIUE4v T3BlbkJTRCBTZWN1cmUgU2hlbGwgc2VydmVyIiAiaHBuc3NoZCIgfHwgdHJ1ZQorKyAgICAgICAg UkVUPTAKKysgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkg MzAgLS1waWRmaWxlIC9ydW4vaHBuc3NoZC5waWQgLS1leGVjIC91c3Ivc2Jpbi9ocG5zc2hkIHx8 IFJFVD0iJD8iCisrICAgICAgICBjYXNlICRSRVQgaW4KKysgICAgICAgICAgICAwKQorKyAgICAg ICAgICAgICAgICAjIG9sZCBkYWVtb24gc3RvcHBlZAorKyAgICAgICAgICAgICAgICBjaGVja19m b3Jfbm9fc3RhcnQgbG9nX2VuZF9tc2cKKysgICAgICAgICAgICAgICAgY2hlY2tfZGV2X251bGwg bG9nX2VuZF9tc2cKKysgICAgICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2 CisrICAgICAgICAgICAgICAgIGlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAt LW9rbm9kbyAtLWNodWlkIDA6MCAtLXBpZGZpbGUgL3J1bi9ocG5zc2hkLnBpZCAtLWV4ZWMgL3Vz ci9zYmluL2hwbnNzaGQgLS0gJFNTSERfT1BUUzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAg bG9nX2VuZF9tc2cgMCB8fCB0cnVlCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAg ICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwgdHJ1ZQorKyAgICAgICAgICAgICAgICBmaQorKyAg ICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgIDEpCisrICAgICAgICAgICAgICAgICMgZGFl bW9uIG5vdCBydW5uaW5nCisrICAgICAgICAgICAgICAgIGxvZ19wcm9ncmVzc19tc2cgIihub3Qg cnVubmluZykiIHx8IHRydWUKKysgICAgICAgICAgICAgICAgbG9nX2VuZF9tc2cgMCB8fCB0cnVl CisrICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgICAg IyBmYWlsZWQgdG8gc3RvcAorKyAgICAgICAgICAgICAgICBsb2dfcHJvZ3Jlc3NfbXNnICIoZmFp bGVkIHRvIHN0b3ApIiB8fCB0cnVlCisrICAgICAgICAgICAgICAgIGxvZ19lbmRfbXNnIDEgfHwg dHJ1ZQorKyAgICAgICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgICAgOzsKKysK KysKKysgIHN0YXR1cykKKysgICAgICAgIHN0YXR1c19vZl9wcm9jIC1wIC9ydW4vaHBuc3NoZC5w aWQgL3Vzci9zYmluL2hwbnNzaGQgaHBuc3NoZCAmJiBleGl0IDAgfHwgZXhpdCAkPworKyAgICAg ICAgOzsKKysKKysKKysgICopCisrICAgICAgICBsb2dfYWN0aW9uX21zZyAiVXNhZ2U6IC9ldGMv aW5pdC5kL2hwbnNzaCB7c3RhcnR8c3RvcHxyZWxvYWR8Zm9yY2UtcmVsb2FkfHJlc3RhcnR8dHJ5 LXJlc3RhcnR8c3RhdHVzfSIgfHwgdHJ1ZQorKyAgICAgICAgZXhpdCAxCisrZXNhYworKworK2V4 aXQgMAorKworKworK1N0ZXAgMTA6IFdvcmtpbmcgd2l0aCBTRUxpbnV4LgorKworK0lmIHlvdSBh cmUgdXNpbmcgU0VMaW51eCB5b3XigJlsbCBuZWVkIHRvIHJ1biBhIGZldyBtb3JlIGNvbW1hbmRz IGluIG9yZGVyIHRvIGdyYW50IGhwbnNzaCB0aGUKKytuZWNlc3NhcnkgZXhjZXB0aW9ucyB0byBv cGVuIHNvY2tldHMsIGZpbGVzLCByZWFkIGtleXMsIGFuZCBzbyBmb3J0aC4gUnVuIHRoZSBmb2xs b3dpbmcgY29tbWFuZHMKKyt0byBhbGxvdyB0aGlzLiBOb3RlLCBJ4oCZbSBub3Qgc3VyZSBldmVy eSBzaW5nbGUgb25lIG9mIHRoZXNlIGlzIG5lZWRlZCBzbyBpZiBzb21lb25lIGtub3dzIGJldHRl cgorK3BsZWFzZSBsZXQgbWUga25vdy4gQWdhaW4sIGRvdWJsZSBjaGVjayB0aGUgcGF0aHMgb2Yg dGhlIGZpbGVzIGJlaW5nIHVwZGF0ZWQuCisrCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAt dCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9kc2Ffa2V5Cisrc2VtYW5hZ2UgZmNv bnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9yc2Ffa2V5 Cisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9z c2hfaG9zdF9lY2RzYV9rZXkKKytzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfa2V5 X3QgIC9ldGMvaHBuc3NoL3NzaF9ob3N0X2VkMjU1MTlfa2V5Cisrc2VtYW5hZ2UgZmNvbnRleHQg LWEgLWYgZiAtdCBzc2hkX2tleV90IC9ldGMvaHBuc3NoL3NzaF9ob3N0X2RzYV9rZXkucHViCisr c2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90IC9ldGMvaHBuc3NoL3NzaF9o b3N0X3JzYV9rZXkucHViCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleV90 ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9lY2RzYV9rZXkucHViCisrc2VtYW5hZ2UgZmNvbnRleHQg LWEgLWYgZiAtdCBzc2hkX2tleV90ICAvZXRjL2hwbnNzaC9zc2hfaG9zdF9lZDI1NTE5X2tleS5w dWIKKytzZW1hbmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaGRfZXhlY190IC91c3Ivc2Jpbi9o cG5zc2hkCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hkX2tleWdlbl9leGVjX3Qg L3Vzci9saWJleGVjL2hwbnNzaC9ocG5zc2hkLWtleWdlbgorK3NlbWFuYWdlIGZjb250ZXh0IC1h IC1mIGYgLXQgYmluX3QgL3Vzci9saWJleGVjL2hwbnNzaC9ocG5zZnRwLXNlcnZlcgorK3NlbWFu YWdlIGZjb250ZXh0IC1hIC1mIGYgLXQgc3NoX2V4ZWNfdCAvdXNyL2Jpbi9ocG5zc2gKKytzZW1h bmFnZSBmY29udGV4dCAtYSAtZiBmIC10IHNzaF9hZ2VudF9leGVjX3QgL3Vzci9iaW4vaHBuc3No LWFnZW50Cisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBzc2hfa2V5Z2VuX2V4ZWNfdCAv dXNyL2Jpbi9ocG5zc2gta2V5Z2VuCisrc2VtYW5hZ2UgZmNvbnRleHQgLWEgLWYgZiAtdCBldGNf dCAvZXRjL3BhbS5kL2hwbnNzaGQKKytzZW1hbmFnZSBwb3J0IC1hIC10IHNzaF9wb3J0X3QgLXAg dGNwIDIyMjIKKytyZXN0b3JlY29uIC91c3Ivc2Jpbi9ocG5zc2hkCisrcmVzdG9yZWNvbiAvZXRj L2hwbnNzaC9zc2gqX2tleQorK3Jlc3RvcmVjb24gL2V0Yy9ocG5zc2gvc3NoKl9rZXlcLnB1Ygor K3Jlc3RvcmVjb24gL3Vzci9saWJleGVjL2hwbnNzaC9ocG5zc2hkLWtleWdlbgorK3Jlc3RvcmVj b24gL3Vzci9saWJleGVjL2hwbnNzaC9ocG5zZnRwLXNlcnZlcgorK3Jlc3RvcmVjb24gL3Vzci9i aW4vaHBuc3NoCisrcmVzdG9yZWNvbiAvdXNyL2Jpbi9ocG5zc2gtYWdlbnQKKytyZXN0b3JlY29u IC91c3IvYmluL2hwbnNzaC1rZXlnZW4KKytyZXN0b3JlY29uIC9ldGMvcGFtLmQvaHBuc3NoZAor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcva2V4LmMgb3BlbnNzaC0xMC4zcDEva2V4LmMK Ky0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2tleC5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1 NDQ3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEva2V4LmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43 MjQ4NzMxODMgKzAyMDAKK0BAIC02Myw2ICs2Myw3IEBACisgCisgI2luY2x1ZGUgInNzaGVyci5o IgorICNpbmNsdWRlICJzc2hidWYuaCIKKysjaW5jbHVkZSAiY2Fub2hvc3QuaCIKKyAjaW5jbHVk ZSAiZGlnZXN0LmgiCisgI2luY2x1ZGUgInhtYWxsb2MuaCIKKyAjaW5jbHVkZSAiYXVkaXQuaCIK K0BAIC03ODEsMTcgKzc4Miw4MyBAQAorIAlmcmVlKGtleCk7CisgfQorIAorKy8qCisrICogVGhp cyBmdW5jdGlvbiBzZWVrcyB0aHJvdWdoIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgYW5kIGNoZWNr cyBmb3IgaW5zdGFuY2VzCisrICogb2YgdGhlIG11bHRpdGhyZWFkZWQgQ0MyMCBjaXBoZXIuIElm IGZvdW5kLCBpdCB0aGVuIGVuc3VyZXMgdGhhdCB0aGUgc2VyaWFsCisrICogQ0MyMCBjaXBoZXIg aXMgYWxzbyBpbiB0aGUgbGlzdCwgYWRkaW5nIGl0IGlmIG5lY2Vzc2FyeS4KKysgKi8KKytjaGFy ICoKKytwYXRjaF9saXN0KGNoYXIgKiBvcmlnKQorK3sKKysJY2hhciAqIGFkaiA9IHhzdHJkdXAo b3JpZyk7CisrCWNoYXIgKiBtYXRjaDsKKysJdV9pbnQgbmV4dDsKKysKKysJY29uc3QgY2hhciAq IGNjcHN0ciA9ICJjaGFjaGEyMC1wb2x5MTMwNUBvcGVuc3NoLmNvbSI7CisrCWNvbnN0IGNoYXIg KiBjY3BtdHN0ciA9ICJjaGFjaGEyMC1wb2x5MTMwNS1tdEBocG5zc2gub3JnIjsKKysKKysJbWF0 Y2ggPSBtYXRjaF9saXN0KGNjcG10c3RyLCBvcmlnLCAmbmV4dCk7CisrCWlmIChtYXRjaCAhPSBO VUxMKSB7IC8qIENDMjAtTVQgZm91bmQgaW4gdGhlIGxpc3QgKi8KKysJCWZyZWUobWF0Y2gpOwor KwkJbWF0Y2ggPSBtYXRjaF9saXN0KGNjcHN0ciwgb3JpZywgTlVMTCk7CisrCQlpZiAobWF0Y2gg PT0gTlVMTCkgeyAvKiBDQzIwLVNlcmlhbCBOT1QgZm91bmQgaW4gdGhlIGxpc3QgKi8KKysJCQlh ZGogPSB4cmVhbGxvY2FycmF5KGFkaiwKKysJCQkgICAgc3RybGVuKGFkaikgLyogb3JpZ2luYWwg c3RyaW5nIGxlbmd0aCAqLworKwkJCSAgICArIDEgLyogZm9yIHRoZSBvcmlnaW5hbCBudWxsLXRl cm1pbmF0b3IgKi8KKysJCQkgICAgKyBzdHJsZW4oY2Nwc3RyKSAvKiBtYWtlIHJvb20gZm9yIGNj cHN0ciAqLworKwkJCSAgICArIDEgLyogbWFrZSByb29tIGZvciB0aGUgY29tbWEgZGVsaW1pdGVy ICovCisrCQkJICAgICwgc2l6ZW9mKGNoYXIpKTsKKysJCQkvKgorKwkJCSAqIGFkaltuZXh0XSBw b2ludHMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgQ0MyMC1NVAorKwkJCSAqIHN0cmluZy4g YWRqW25leHRdIG1pZ2h0IGJlICcsJyBvciAnXDAnIGF0IHRoaXMgcG9pbnQuCisrCQkJICovCisr CQkJYWRqW25leHRdID0gJywnOworKwkJCS8qIGFkaiArIG5leHQgKyAxIGlzIHRoZSBjaGFyYWN0 ZXIgYWZ0ZXIgdGhhdCBjb21tYSAqLworKwkJCW1lbWNweShhZGogKyBuZXh0ICsgMSwgY2Nwc3Ry LCBzdHJsZW4oY2Nwc3RyKSk7CisrCQkJLyogcmV3cml0ZSB0aGUgcmVzdCBvZiB0aGUgb3JpZ2lu YWwgbGlzdCAqLworKwkJCW1lbWNweShhZGogKyBuZXh0ICsgMSArIHN0cmxlbihjY3BzdHIpLCBv cmlnICsgbmV4dCwKKysJCQkgICAgc3RybGVuKG9yaWcgKyBuZXh0KSArIDEpOworKwkJfSBlbHNl IHsgLyogQ0MyMC1TZXJpYWwgZm91bmQgaW4gdGhlIGxpc3QsIG5vdGhpbmcgdG8gZG8gKi8KKysJ CQlmcmVlKG1hdGNoKTsKKysJCX0KKysJfQorKworKwlyZXR1cm4gYWRqOworK30KKysKKyBpbnQK KyBrZXhfcmVhZHkoc3RydWN0IHNzaCAqc3NoLCBjaGFyICpwcm9wb3NhbFtQUk9QT1NBTF9NQVhd KQorIHsKKy0JaW50IHI7CisrCWludCByID0gMDsKKysKKysjaWZkZWYgV0lUSF9PUEVOU1NMCisr CWNoYXIgKiBvcmlnX2N0b3MgPSBwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXTsKKysJ Y2hhciAqIG9yaWdfc3RvYyA9IHByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdOworKwlw cm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19DVE9TXSA9CisrCSAgICBwYXRjaF9saXN0KHByb3Bv c2FsW1BST1BPU0FMX0VOQ19BTEdTX0NUT1NdKTsKKysJcHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FM R1NfU1RPQ10gPQorKwkgICAgcGF0Y2hfbGlzdChwcm9wb3NhbFtQUk9QT1NBTF9FTkNfQUxHU19T VE9DXSk7CisrCisrCS8qCisrCSAqIFRPRE86IExpa2VseSBtZW1vcnkgbGVhayBoZXJlLiBUaGUg b3JpZ2luYWwgY29udGVudHMgb2YKKysJICogcHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfQ1RP U10gYXJlIG5vIGxvbmdlciBhY2Nlc3NpYmxlIG9yCisrCSAqIGZyZWVhYmxlLgorKwkgKi8KKysj ZW5kaWYKKyAKKyAJaWYgKChyID0ga2V4X3Byb3AyYnVmKHNzaC0+a2V4LT5teSwgcHJvcG9zYWwp KSAhPSAwKQorLQkJcmV0dXJuIHI7CisrCQlnb3RvIHJlc3RvcmVQcm9wb3NhbDsKKyAJc3NoLT5r ZXgtPmZsYWdzID0gS0VYX0lOSVRJQUw7CisgCWtleF9yZXNldF9kaXNwYXRjaChzc2gpOworIAlz c2hfZGlzcGF0Y2hfc2V0KHNzaCwgU1NIMl9NU0dfS0VYSU5JVCwgJmtleF9pbnB1dF9rZXhpbml0 KTsKKy0JcmV0dXJuIDA7CisrIHJlc3RvcmVQcm9wb3NhbDoKKysjaWZkZWYgV0lUSF9PUEVOU1NM CisrCWZyZWUocHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FMR1NfQ1RPU10pOworKwlmcmVlKHByb3Bv c2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0NdKTsKKysJcHJvcG9zYWxbUFJPUE9TQUxfRU5DX0FM R1NfQ1RPU10gPSBvcmlnX2N0b3M7CisrCXByb3Bvc2FsW1BST1BPU0FMX0VOQ19BTEdTX1NUT0Nd ID0gb3JpZ19zdG9jOworKyNlbmRpZgorKwlyZXR1cm4gcjsKKyB9CisgCisgaW50CitAQCAtOTgw LDYgKzEwNDcsMTEgQEAKKyAJaW50IG5lbmMsIG5tYWMsIG5jb21wOworIAl1X2ludCBtb2RlLCBj dG9zLCBuZWVkLCBkaF9uZWVkLCBhdXRobGVuOworIAlpbnQgciwgZmlyc3Rfa2V4X2ZvbGxvd3M7 CisrCWludCBhdXRoX2ZsYWcgPSAwOworKwlpbnQgbG9nX2ZsYWcgPSAwOworKworKwlhdXRoX2Zs YWcgPSBwYWNrZXRfYXV0aGVudGljYXRpb25fc3RhdGUoc3NoKTsKKysJZGVidWcoIkFVVEggU1RB VEUgSVMgJWQiLCBhdXRoX2ZsYWcpOworIAorIAlkZWJ1ZzIoImxvY2FsICVzIEtFWElOSVQgcHJv cG9zYWwiLCBrZXgtPnNlcnZlciA/ICJzZXJ2ZXIiIDogImNsaWVudCIpOworIAlpZiAoKHIgPSBr ZXhfYnVmMnByb3Aoa2V4LT5teSwgTlVMTCwgJm15KSkgIT0gMCkKK0BAIC0xMDU2LDYgKzExMjgs MzEgQEAKKyAJCQlwZWVyW25lbmNdID0gTlVMTDsKKyAJCQlnb3RvIG91dDsKKyAJCX0KKysjaWZk ZWYgV0lUSF9PUEVOU1NMCisrCQlpZiAoKHN0cmNtcChuZXdrZXlzLT5lbmMubmFtZSwgImNoYWNo YTIwLXBvbHkxMzA1QG9wZW5zc2guY29tIikKKysJCSAgICA9PSAwKSAmJiAobWF0Y2hfbGlzdCgi Y2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIsCisrCQkgICAgbXlbbmVuY10sIE5VTEwp ICE9IE5VTEwpKSB7CisrCQkJLyoKKysJCQkgKiBpZiB3ZSdyZSB1c2luZyB0aGUgc2VyaWFsIEND MjAgY2lwaGVyIHdoaWxlIHRoZQorKwkJCSAqIG11bHRpdGhyZWFkZWQgaW1wbGVtZW50YXRpb24g aXMgYW4gb3B0aW9uLi4uCisrCQkJICovCisrCQkJZnJlZShuZXdrZXlzLT5lbmMubmFtZSk7Cisr CQkJbmV3a2V5cy0+ZW5jLmNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKAorKwkJCSAgICAiY2hhY2hh MjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIpOworKwkJCWlmIChuZXdrZXlzLT5lbmMuY2lwaGVy ID09IE5VTEwpIHsKKysJCQkJZXJyb3JfZigiJXMgY2lwaGVyIG5vdCBmb3VuZC4iLAorKwkJCQkg ICAgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmciKTsKKysJCQkJciA9IFNTSF9FUlJf SU5URVJOQUxfRVJST1I7CisrCQkJCWtleC0+ZmFpbGVkX2Nob2ljZSA9IHBlZXJbbmVuY107Cisr CQkJCXBlZXJbbmVuY10gPSBOVUxMOworKwkJCQlnb3RvIG91dDsKKysJCQl9IGVsc2UgeworKwkJ CQluZXdrZXlzLT5lbmMubmFtZSA9IHhzdHJkdXAoCisrCQkJCSAgICAiY2hhY2hhMjAtcG9seTEz MDUtbXRAaHBuc3NoLm9yZyIpOworKwkJCX0KKysJCQkvKiB3ZSBwcm9tb3RlIHRvIHRoZSBtdWx0 aXRocmVhZGVkIGltcGxlbWVudGF0aW9uICovCisrCQl9CisrI2VuZGlmCisgCQlhdXRobGVuID0g Y2lwaGVyX2F1dGhsZW4obmV3a2V5cy0+ZW5jLmNpcGhlcik7CisgCQkvKiBpZ25vcmUgbWFjIGZv ciBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gKi8KKyAJCWlmIChhdXRobGVuID09IDAgJiYKK0BA IC0xMDcxLDExICsxMTY4LDQzIEBACisgCQkJcGVlcltuY29tcF0gPSBOVUxMOworIAkJCWdvdG8g b3V0OworIAkJfQorKwkJZGVidWcoIlJFUVVFU1RFRCBFTkMuTkFNRSBpcyAnJXMnIiwgbmV3a2V5 cy0+ZW5jLm5hbWUpOworKwkJZGVidWcoIlJFUVVFU1RFRCBNQUMuTkFNRSBpcyAnJXMnIiwgbmV3 a2V5cy0+bWFjLm5hbWUpOworKwkJaWYgKHN0cmNtcChuZXdrZXlzLT5lbmMubmFtZSwgIm5vbmUi KSA9PSAwKSB7CisrCQkJaWYgKGF1dGhfZmxhZyA9PSAxKSB7CisrCQkJCWRlYnVnKCJOb25lIHJl cXVlc3RlZCBwb3N0IGF1dGhlbnRpY2F0aW9uLiIpOworKwkJCQlzc2gtPm5vbmUgPSAxOworKwkJ CX0KKysJCQllbHNlCisrCQkJCWZhdGFsKCJQcmUtYXV0aGVudGljYXRpb24gbm9uZSBjaXBoZXIg cmVxdWVzdHMgYXJlIG5vdCBhbGxvd2VkLiIpOworKworKwkJCWlmIChuZXdrZXlzLT5tYWMubmFt ZSAhPSBOVUxMICYmIHN0cmNtcChuZXdrZXlzLT5tYWMubmFtZSwgIm5vbmUiKSA9PSAwKSB7Cisr CQkJCWRlYnVnKCJSZXF1ZXN0aW5nOiBOT05FTUFDLiBBdXRoZmxhZyBpcyAlZCIsIGF1dGhfZmxh Zyk7CisrCQkJCXNzaC0+bm9uZV9tYWMgPSAxOworKwkJCX0KKysJCX0KKysKKyAJCWRlYnVnKCJr ZXg6ICVzIGNpcGhlcjogJXMgTUFDOiAlcyBjb21wcmVzc2lvbjogJXMiLAorIAkJICAgIGN0b3Mg PyAiY2xpZW50LT5zZXJ2ZXIiIDogInNlcnZlci0+Y2xpZW50IiwKKyAJCSAgICBuZXdrZXlzLT5l bmMubmFtZSwKKyAJCSAgICBhdXRobGVuID09IDAgPyBuZXdrZXlzLT5tYWMubmFtZSA6ICI8aW1w bGljaXQ+IiwKKyAJCSAgICBuZXdrZXlzLT5jb21wLm5hbWUpOworKwkJLyoKKysJCSAqIGNsaWVu dCBzdGFydHMgd2l0aCBjdG9zID0gMCAmJiBsb2cgZmxhZyA9IDAgYW5kIG5vIGxvZy4KKysJCSAq IDJuZCBjbGllbnQgcGFzcyBjdG9zID0gMSBhbmQgZmxhZyA9IDEgc28gbm8gbG9nLgorKwkJICog c2VydmVyIHN0YXJ0cyB3aXRoIGN0b3MgPSAxICYmIGxvZ19mbGFnID0gMCBzbyBsb2cuCisrCQkg KiAybmQgc2V2ZXIgcGFzcyBjdG9zID0gMSAmJiBsb2cgZmxhZyA9IDEgc28gbm8gbG9nLgorKwkJ ICogLWNqcgorKwkJICovCisrCQlpZiAoY3RvcyAmJiAhbG9nX2ZsYWcpIHsKKysJCQlsb2dpdCgi U1NIOiBTZXJ2ZXI7THR5cGU6IEtleDtSZW1vdGU6ICVzLSVkO0VuYzogJXM7TUFDOiAlcztDb21w OiAlcyIsCisrCQkJICAgIHNzaF9yZW1vdGVfaXBhZGRyKHNzaCksCisrCQkJICAgIHNzaF9yZW1v dGVfcG9ydChzc2gpLAorKwkJCSAgICBuZXdrZXlzLT5lbmMubmFtZSwKKysJCQkgICAgYXV0aGxl biA9PSAwID8gbmV3a2V5cy0+bWFjLm5hbWUgOiAiPGltcGxpY2l0PiIsCisrCQkJICAgIG5ld2tl eXMtPmNvbXAubmFtZSk7CisrCQl9CisrCQlsb2dfZmxhZyA9IDE7CisgCX0KKyAJbmVlZCA9IGRo X25lZWQgPSAwOworIAlmb3IgKG1vZGUgPSAwOyBtb2RlIDwgTU9ERV9NQVg7IG1vZGUrKykgewor QEAgLTE0MzUsNyArMTU2NCw3IEBACisgCWlmICh2ZXJzaW9uX2FkZGVuZHVtICE9IE5VTEwgJiYg KnZlcnNpb25fYWRkZW5kdW0gPT0gJ1wwJykKKyAJCXZlcnNpb25fYWRkZW5kdW0gPSBOVUxMOwor IAlpZiAoKHIgPSBzc2hidWZfcHV0ZihvdXJfdmVyc2lvbiwgIlNTSC0lZC4lZC0lcyVzJXNcclxu IiwKKy0JICAgIFBST1RPQ09MX01BSk9SXzIsIFBST1RPQ09MX01JTk9SXzIsIFNTSF9WRVJTSU9O LAorKwkgICAgUFJPVE9DT0xfTUFKT1JfMiwgUFJPVE9DT0xfTUlOT1JfMiwgU1NIX1JFTEVBU0Us CisgCSAgICB2ZXJzaW9uX2FkZGVuZHVtID09IE5VTEwgPyAiIiA6ICIgIiwKKyAJICAgIHZlcnNp b25fYWRkZW5kdW0gPT0gTlVMTCA/ICIiIDogdmVyc2lvbl9hZGRlbmR1bSkpICE9IDApIHsKKyAJ CW9lcnJubyA9IGVycm5vOworQEAgLTE1NzEsOSArMTcwMCwyNCBAQAorIAkJciA9IFNTSF9FUlJf SU5WQUxJRF9GT1JNQVQ7CisgCQlnb3RvIG91dDsKKyAJfQorKworKwkvKiByZXBvcnQgdGhlIHZl cnNpb24gaW5mb3JtYXRpb24gdG8gc3lzbG9nIGlmIHRoaXMgaXMgdGhlIHNlcnZlciAqLworKyAg ICAgICAgaWYgKHRpbWVvdXRfbXMgPT0gLTEpIHsgLyogb25seSB0aGUgc2VydmVyIHVzZXMgdGhp cyB2YWx1ZSAqLworKwkJbG9naXQoIlNTSDogU2VydmVyO0x0eXBlOiBWZXJzaW9uO1JlbW90ZTog JXMtJWQ7UHJvdG9jb2w6ICVkLiVkO0NsaWVudDogJS4xMDBzIiwKKysJCSAgICAgIHNzaF9yZW1v dGVfaXBhZGRyKHNzaCksIHNzaF9yZW1vdGVfcG9ydChzc2gpLAorKwkJICAgICAgcmVtb3RlX21h am9yLCByZW1vdGVfbWlub3IsIHJlbW90ZV92ZXJzaW9uKTsKKysJfQorKworIAlkZWJ1ZygiUmVt b3RlIHByb3RvY29sIHZlcnNpb24gJWQuJWQsIHJlbW90ZSBzb2Z0d2FyZSB2ZXJzaW9uICUuMTAw cyIsCisgCSAgICByZW1vdGVfbWFqb3IsIHJlbW90ZV9taW5vciwgcmVtb3RlX3ZlcnNpb24pOwor IAljb21wYXRfYmFubmVyKHNzaCwgcmVtb3RlX3ZlcnNpb24pOworKwlpZiAoc3NoLT5jb21wYXQg JiBTU0hfSFBOU1NIKQorKwkJZGVidWcoIkhQTiB0byBIUE4gQ29ubmVjdGlvbi4iKTsKKysJZWxz ZQorKwkJZGVidWcoIk5vbi1IUE4gdG8gSFBOIENvbm5lY3Rpb24uIik7CisrCisrCWlmKHNzaC0+ Y29tcGF0ICYgU1NIX1JFU1RSSUNUX1dJTkRPVykKKysJCWRlYnVnICgiV2luZG93IHNpemUgcmVz dHJpY3RlZC4iKTsKKyAKKyAJbWlzbWF0Y2ggPSAwOworIAlzd2l0Y2ggKHJlbW90ZV9tYWpvcikg eworZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvbG9nLmMgb3BlbnNzaC0xMC4zcDEvbG9n LmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL2xvZy5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTAz Mjc1MzA3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvbG9nLmMJMjAyNi0wNy0wMiAwMDoyNzoy OS43MjUxMjU0ODEgKzAyMDAKK0BAIC00Nyw2ICs0NywxMSBAQAorICNpbmNsdWRlIDxzdHJpbmcu aD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRl IDxlcnJuby5oPgorKyNpbmNsdWRlICJwYWNrZXQuaCIgLyogbmVlZGVkIGZvciBob3N0IGFuZCBw b3J0IGxvb2sgdXBzICovCisrI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorKyMgaW5jbHVkZSA8c3lz L3RpbWUuaD4gLyogdG8gZ2V0IGN1cnJlbnQgdGltZSAqLworKyNlbmRpZgorICNpZiBkZWZpbmVk KEhBVkVfU1RSTlZJUykgJiYgZGVmaW5lZChIQVZFX1ZJU19IKSAmJiAhZGVmaW5lZChCUk9LRU5f U1RSTlZJUykKKyAjIGluY2x1ZGUgPHZpcy5oPgorICNlbmRpZgorQEAgLTY1LDYgKzcwLDggQEAK KyBzdGF0aWMgc2l6ZV90IG5sb2dfdmVyYm9zZTsKKyBleHRlcm4gY2hhciAqX19wcm9nbmFtZTsK KyAKKytleHRlcm4gc3RydWN0IHNzaCAqYWN0aXZlX3N0YXRlOworKworICNkZWZpbmUgTE9HX1NZ U0xPR19WSVMJKFZJU19DU1RZTEV8VklTX05MfFZJU19UQUJ8VklTX09DVEFMKQorICNkZWZpbmUg TE9HX1NUREVSUl9WSVMJKFZJU19TQUZFfFZJU19PQ1RBTCkKKyAKK2RpZmYgLU51ciBvcGVuc3No LTEwLjNwMS5vcmlnL21hYy5jIG9wZW5zc2gtMTAuM3AxL21hYy5jCistLS0gb3BlbnNzaC0xMC4z cDEub3JpZy9tYWMuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAorKysrIG9w ZW5zc2gtMTAuM3AxL21hYy5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI1MzYyNDU1ICswMjAwCitA QCAtNjMsNiArNjMsNyBAQAorIAl7ICJobWFjLXNoYTItNTEyIiwJCQlTU0hfRElHRVNULCBTU0hf RElHRVNUX1NIQTUxMiwgMCwgMCwgMCwgMCB9LAorIAl7ICJobWFjLW1kNSIsCQkJCVNTSF9ESUdF U1QsIFNTSF9ESUdFU1RfTUQ1LCAwLCAwLCAwLCAwIH0sCisgCXsgImhtYWMtbWQ1LTk2IiwJCQlT U0hfRElHRVNULCBTU0hfRElHRVNUX01ENSwgOTYsIDAsIDAsIDAgfSwKKysJeyAibm9uZSIsCQkJ CVNTSF9ESUdFU1QsIFNTSF9ESUdFU1RfTlVMTCwgMCwgMCwgMCwgMCB9LAorIAl7ICJ1bWFjLTY0 QG9wZW5zc2guY29tIiwJCVNTSF9VTUFDLCAwLCAwLCAxMjgsIDY0LCAwIH0sCisgCXsgInVtYWMt MTI4QG9wZW5zc2guY29tIiwJCVNTSF9VTUFDMTI4LCAwLCAwLCAxMjgsIDEyOCwgMCB9LAorIAor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvTWFrZWZpbGUuaW4gb3BlbnNzaC0xMC4zcDEv TWFrZWZpbGUuaW4KKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL01ha2VmaWxlLmluCTIwMjYtMDct MDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvTWFrZWZpbGUu aW4JMjAyNi0wNy0wMiAwMToxODoyNy43NDA1NzIyMTcgKzAyMDAKK0BAIC01NCw3ICs1NCw3IEBA CisgQ0ZMQUdTX05PUElFPUBDRkxBR1NfTk9QSUVACisgQ1BQRkxBR1M9LUkuIC1JJChzcmNkaXIp IC1JJChDT01QQVRJTkNMVURFUykgQENQUEZMQUdTQCAkKFBBVEhTKSBAREVGU0AKKyBQSUNGTEFH PUBQSUNGTEFHQAorLUxJQlM9QExJQlNACisrTElCUz1ATElCU0AgLWxwdGhyZWFkCisgQ0hBTk5F TExJQlM9QENIQU5ORUxMSUJTQAorIEs1TElCUz1ASzVMSUJTQAorIEdTU0xJQlM9QEdTU0xJQlNA CitAQCAtOTMsNyArOTMsNyBAQAorIExJQlNTSF9PQkpTPSR7TElCT1BFTlNTSF9PQkpTfSBcCisg CWF1dGhmZC5vIGF1dGhmaWxlLm8gXAorIAljYW5vaG9zdC5vIGNoYW5uZWxzLm8gY2lwaGVyLm8g Y2lwaGVyLWFlcy5vIGNpcGhlci1hZXNjdHIubyBcCistCWNsZWFudXAubyBcCisrCWNsZWFudXAu byBjaXBoZXItY3RyLW10Lm8gXAorIAljb21wYXQubyBmYXRhbC5vIGhvc3RmaWxlLm8gXAorIAls b2cubyBtYXRjaC5vIG1vZHVsaS5vIG5jaGFuLm8gcGFja2V0Lm8gXAorIAlyZWFkcGFzcy5vIHR0 eW1vZGVzLm8geG1hbGxvYy5vIGFkZHIubyBhZGRybWF0Y2gubyBcCitAQCAtMTAzLDYgKzEwMyw3 IEBACisgCW1zZy5vIGRucy5vIGVudHJvcHkubyBnc3MtZ2Vuci5vIHVtYWMubyB1bWFjMTI4Lm8g XAorIAlzbXVsdF9jdXJ2ZTI1NTE5X3JlZi5vIFwKKyAJcG9seTEzMDUubyBjaGFjaGEubyBjaXBo ZXItY2hhY2hhcG9seS5vIGNpcGhlci1jaGFjaGFwb2x5LWxpYmNyeXB0by5vIFwKKysJY2lwaGVy LWNoYWNoYXBvbHktbGliY3J5cHRvLW10Lm8gXAorIAlzc2gtZWQyNTUxOS5vIGRpZ2VzdC1vcGVu c3NsLm8gZGlnZXN0LWxpYmMubyBcCisgCWhtYWMubyBlZDI1NTE5Lm8gZWQyNTUxOS1vcGVuc3Ns Lm8gXAorIAlrZXgubyBrZXgtbmFtZXMubyBrZXhkaC5vIGtleGdleC5vIGtleGVjZGgubyBrZXhj MjU1MTkubyBcCitAQCAtMTEwLDE0ICsxMTEsMTYgQEAKKyAJa2V4c250cnVwNzYxeDI1NTE5Lm8g a2V4bWxrZW03Njh4MjU1MTkubyBzbnRydXA3NjEubyBrZXhnZW4ubyBcCisgCWtleGdzc2MubyBc CisgCXNmdHAtcmVhbHBhdGgubyBwbGF0Zm9ybS1wbGVkZ2UubyBwbGF0Zm9ybS10cmFjaW5nLm8g cGxhdGZvcm0tbWlzYy5vIFwKKy0Jc3NoYnVmLWlvLm8gbWlzYy1hZ2VudC5vIHNzaGVyci1saWJj cnlwdG8ubyBhdWRpdHN0dWIubworKwlzc2hidWYtaW8ubyBtaXNjLWFnZW50Lm8gc3NoZXJyLWxp YmNyeXB0by5vIGF1ZGl0c3R1Yi5vIFwKKysJbWV0cmljcy5vIGJpbm4ubyBoYXBweWV5ZWJhbGxz Lm8gY2lwaGVyLWN0ci1tdC1wcm92aWRlci5vIFwKKysJY2lwaGVyLWN0ci1tdC1mdW5jdGlvbnMu byBvc3NsMy1wcm92aWRlci1lcnIubyBudW0ubworIAorIFAxMU9CSlM9IHNzaC1wa2NzMTEtY2xp ZW50Lm8gc3NoLXBrY3MxMS11cmkubworIAorIFNLT0JKUz0Jc3NoLXNrLWNsaWVudC5vCisgCisg U1NIT0JKUz0gc3NoLm8gcmVhZGNvbmYubyBjbGllbnRsb29wLm8gc3NodHR5Lm8gXAorLQlzc2hj b25uZWN0Lm8gc3NoY29ubmVjdDIubyBtdXgubyBzc2gtcGtjczExLm8gc3NoLXBrY3MxMS11cmku byAkKFNLT0JKUykKKysJc3NoY29ubmVjdC5vIHNzaGNvbm5lY3QyLm8gbXV4Lm8gY2lwaGVyLXN3 aXRjaC5vIHNzaC1wa2NzMTEubyBzc2gtcGtjczExLXVyaS5vICQoU0tPQkpTKQorIAorIFNTSERP QkpTPXNzaGQubyBcCisgCXBsYXRmb3JtLWxpc3Rlbi5vIFwKK0BAIC0xMzYsNyArMTM5LDcgQEAK KyAJYXV0aDItZ3NzLm8gZ3NzLXNlcnYubyBnc3Mtc2Vydi1rcmI1Lm8gZ3NzLXNlcnYtZ3NpLm8g XAorIAlsb2dpbnJlYy5vIGF1dGgtcGFtLm8gYXV0aC1zaGFkb3cubyBhdXRoLXNpYS5vIFwKKyAJ c2Z0cC1zZXJ2ZXIubyBzZnRwLWNvbW1vbi5vIFwKKy0JdWlkc3dhcC5vIHBsYXRmb3JtLWxpc3Rl bi5vICQoUDExT0JKUykgJChTS09CSlMpCisrCXVpZHN3YXAubyBwbGF0Zm9ybS1saXN0ZW4ubyBj aXBoZXItc3dpdGNoLm8gJChQMTFPQkpTKSAkKFNLT0JKUykKKyAKKyBTU0hEX0FVVEhfT0JKUz1z c2hkLWF1dGgubyBcCisgCWF1dGgyLW1ldGhvZHMubyBcCitAQCAtMTUxLDcgKzE1NCw3IEBACisg CXNhbmRib3gtbnVsbC5vIHNhbmRib3gtcmxpbWl0Lm8gc2FuZGJveC1kYXJ3aW4ubyBcCisgCXNh bmRib3gtc2VjY29tcC1maWx0ZXIubyBzYW5kYm94LWNhcHNpY3VtLm8gIHNhbmRib3gtc29sYXJp cy5vIFwKKyAJc2Z0cC1zZXJ2ZXIubyBzZnRwLWNvbW1vbi5vIFwKKy0JdWlkc3dhcC5vICQoUDEx T0JKUykgJChTS09CSlMpCisrCXVpZHN3YXAubyBjaXBoZXItc3dpdGNoLm8gJChQMTFPQkpTKSAk KFNLT0JKUykKKyAKKyBTRlRQX0NMSUVOVF9PQkpTPXNmdHAtY29tbW9uLm8gc2Z0cC1jbGllbnQu byBzZnRwLWdsb2IubyBzc2hlcnItbm9saWJjcnlwdG8ubworIAorQEAgLTIzNSw3ICsyMzgsNyBA QAorIAkkKExEKSAtbyAkQCAkKFNTSERfQVVUSF9PQkpTKSAkKExERkxBR1MpIC1sc3NoIC1sb3Bl bmJzZC1jb21wYXQgJChTU0hETElCUykgJChMSUJTKSAkKEdTU0xJQlMpICQoSzVMSUJTKSAkKENI QU5ORUxMSUJTKSAkKExJQldUTVBEQikKKyAKKyBzY3AkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBs aWJzc2guYSAkKFNDUF9PQkpTKQorLQkkKExEKSAtbyAkQCAkKFNDUF9PQkpTKSAkKExERkxBR1Mp IC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKQorKwkkKExEKSAtbyAkQCAkKFNDUF9PQkpT KSAkKExERkxBR1MpIC1sc3NoIC1sb3BlbmJzZC1jb21wYXQgJChMSUJTKSAkKENIQU5ORUxMSUJT KQorIAorIHNzaC1hZGQkKEVYRUVYVCk6ICQoTElCQ09NUEFUKSBsaWJzc2guYSAkKFNTSEFERF9P QkpTKQorIAkkKExEKSAtbyAkQCAkKFNTSEFERF9PQkpTKSAkKExERkxBR1MpIC1sc3NoIC1sb3Bl bmJzZC1jb21wYXQgJChMSUJTKSAkKENIQU5ORUxMSUJTKQorZGlmZiAtTnVyIG9wZW5zc2gtMTAu M3AxLm9yaWcvbWV0cmljcy5jIG9wZW5zc2gtMTAuM3AxL21ldHJpY3MuYworLS0tIG9wZW5zc2gt MTAuM3AxLm9yaWcvbWV0cmljcy5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzaC0xMC4zcDEvbWV0cmljcy5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI1ODY5 MDI2ICswMjAwCitAQCAtMCwwICsxLDQzOSBAQAorKy8qCisrICogQ29weXJpZ2h0IChjKSAyMDIy IFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZiBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4KKysg KgorKyAqICBBdXRob3I6IENocmlzIFJhcGllciA8cmFwaWVyQHBzYy5lZHU+CisrICoKKysgKiBU aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdAorKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCisr ICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKysgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKysgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgTUlUIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKysgKgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IE1JVCBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OworKyAqIGlmIG5vdCwgc2VlIGh0 dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQuCisrICoKKysgKi8KKysKKysjaW5jbHVk ZSAiaW5jbHVkZXMuaCIKKysjaW5jbHVkZSAibWV0cmljcy5oIgorKyNpbmNsdWRlICJzc2hlcnIu aCIKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrLyoga2Vy bmVsIHZlcnNpb24gbWFjcm8gbW92ZWQgdG8gZGVmaW5lcy5oICovCisrCisrLyogYWRkIHRoZSBp bmZvcm1hdGlvbiBmcm9tIHRoZSB0Y3BfaW5mbyBzdHJ1Y3QgdG8gdGhlCisrICogc2VyaWFsaXpl ZCBiaW5hcnkgb2JqZWN0CisrICovCisrdm9pZAorK21ldHJpY3Nfd3JpdGVfYmlubl9vYmplY3Qo c3RydWN0IHRjcF9pbmZvICpkYXRhLCBzdHJ1Y3QgYmlubl9zdHJ1Y3QgKmJpbm5vYmopIHsKKysj aWYgIWRlZmluZWQgVENQX0lORk8KKysJLyp0Y3AgaW5mbyBpc24ndCBzdXBwb3J0ZWQgb24gdGhp cyBzeXN0ZW0gKi8KKysJcmV0dXJuOworKyNlbHNlCisrCisrLyogdGhlIGJhc2Ugc2V0IG9mIHRj cGlfIG1lYXN1cmVtZW50cyBzdGFydGluZyBmcm9tIGtlcm5lbCAzLjcuMAorKyAqIHRoZXNlIG1l YXN1cmVtZW50cyBleGlzdGVkIGluIHByZXZpb3VzIGtlcm5lbHMgYnV0IHRoZSBvbGRlc3QgdGhp cworKyAqIGlzIGdvaW5nIHRvIHN1cHBvcnQgaXMgMy43LjAuIFdlIGRvIG5lZWQgdG8gc3RvcmUg dGhlIGtlcm5lbCB2ZXJzaW9uIGFzIHdlbGwgKi8KKysKKysvKiBvYnZpb3Vsc3kgdGhlIHZlcnNp b24gY29kZSBtYWNybyBvbmx5IGV4aXN0cyB1bmRlciBsaW51eCBzbworKyAqIG9uIG5vbiBsaW51 eCBzeXN0ZW1zIHdlIHNldCB0aGUga2VybmVsIHZlcnNpb24gdG8gMAorKyAqIHdoaWNoIHdpbGwg Z2V0IHVzIHRoZSBiYXNlIHNldCBvZiBtZXRyaWNzIGZyb20gbmV0aW5ldC90Y3AuaAorKyAqLwor KyNpZiAoZGVmaW5lZCBfX2xpbnV4X18pICYmICFkZWZpbmVkKF9fYWxwaW5lX18pCisrCWJpbm5f b2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgImtlcm5lbF92ZXJzaW9uIiwgTElOVVhfVkVSU0lP Tl9DT0RFKTsKKysjZWxzZQorKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJrZXJu ZWxfdmVyc2lvbiIsIDApOworKyNlbmRpZgorKworKwkvKiB0aGUgZm9sbG93aW5nIGFyZSBjb21t b24gdW5kZXIgYm90aCBsaW51eCBhbmQgQlNEICovCisrCWJpbm5fb2JqZWN0X3NldF91aW50OChi aW5ub2JqLCAidGNwaV9zbmRfd3NjYWxlIiwKKysJCQkgICAgICBkYXRhLT50Y3BpX3NuZF93c2Nh bGUpOworKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfcmN2X3dzY2FsZSIs CisrCQkJICAgICAgZGF0YS0+dGNwaV9yY3Zfd3NjYWxlKTsKKysJYmlubl9vYmplY3Rfc2V0X3Vp bnQ4KGJpbm5vYmosICJ0Y3BpX3N0YXRlIiwKKysJCQkgICAgICBkYXRhLT50Y3BpX3N0YXRlKTsK KysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX29wdGlvbnMiLAorKwkJCSAg ICAgIGRhdGEtPnRjcGlfb3B0aW9ucyk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9i aiwgInRjcGlfc25kX3NzdGhyZXNoIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9zbmRfc3N0aHJl c2gpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0dCIsCisrCQkJ ICAgICAgIGRhdGEtPnRjcGlfcnR0KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9sYXN0X2RhdGFfcmVjdiIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfbGFzdF9kYXRh X3JlY3YpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0dHZhciIs CisrCQkJICAgICAgIGRhdGEtPnRjcGlfcnR0dmFyKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9zbmRfY3duZCIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfc25kX2N3 bmQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9tc3MiLAor KwkJCSAgICAgICBkYXRhLT50Y3BpX3Jjdl9tc3MpOworKwliaW5uX29iamVjdF9zZXRfdWludDMy KGJpbm5vYmosICJ0Y3BpX3J0byIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfcnRvKTsKKysJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfbXNzIiwKKysJCQkgICAgICAg ZGF0YS0+dGNwaV9zbmRfbXNzKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAi dGNwaV9yY3Zfc3BhY2UiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jjdl9zcGFjZSk7CisrCisr LyogdGhlIGZvbGxvd2luZyBleGlzdCB1bmRlciBib3RoIGJ1dCB3aXRoIGRpZmZlcmVudCBuYW1l cyAqLworKyNpZmRlZiBfX2xpbnV4X18KKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmos ICJ0Y3BpX2NhX3N0YXRlIiwKKysJCQkgICAgICBkYXRhLT50Y3BpX2NhX3N0YXRlKTsKKysJYmlu bl9vYmplY3Rfc2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Byb2JlcyIsCisrCQkJICAgICAgZGF0 YS0+dGNwaV9wcm9iZXMpOworKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlf YmFja29mZiIsCisrCQkJICAgICAgZGF0YS0+dGNwaV9iYWNrb2ZmKTsKKysJYmlubl9vYmplY3Rf c2V0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3JldHJhbnNtaXRzIiwKKysJCQkgICAgICBkYXRhLT50 Y3BpX3JldHJhbnNtaXRzKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNw aV9yY3Zfc3N0aHJlc2giLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3Jjdl9zc3RocmVzaCk7Cisr CWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Fja2VkIiwKKysJCQkgICAg ICAgZGF0YS0+dGNwaV9zYWNrZWQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmos ICJ0Y3BpX3BtdHUiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3BtdHUpOworKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2ZhY2tldHMiLAorKwkJCSAgICAgICBkYXRhLT50 Y3BpX2ZhY2tldHMpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xv c3QiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2xvc3QpOworKwliaW5uX29iamVjdF9zZXRfdWlu dDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfYWNrX3NlbnQiLAorKwkJCSAgICAgICBkYXRhLT50Y3Bp X2xhc3RfYWNrX3NlbnQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3Bp X3VuYWNrZWQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3VuYWNrZWQpOworKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xhc3RfZGF0YV9zZW50IiwKKysJCQkgICAgICAg ZGF0YS0+dGNwaV9sYXN0X2RhdGFfc2VudCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlu bm9iaiwgInRjcGlfbGFzdF9hY2tfcmVjdiIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfbGFzdF9h Y2tfcmVjdik7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRl cmluZyIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfcmVvcmRlcmluZyk7CisrCWJpbm5fb2JqZWN0 X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfYWR2bXNzIiwKKysJCQkgICAgICAgZGF0YS0+dGNw aV9hZHZtc3MpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3JldHJh bnMiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3JldHJhbnMpOworKwliaW5uX29iamVjdF9zZXRf dWludDMyKGJpbm5vYmosICJ0Y3BpX2F0byIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfYXRvKTsK KysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfcnR0IiwKKysJCQkg ICAgICAgZGF0YS0+dGNwaV9yY3ZfcnR0KTsKKysjZWxzZQorKwliaW5uX29iamVjdF9zZXRfdWlu dDgoYmlubm9iaiwgInRjcGlfYmFja29mZiIsCisrCQkJICAgICAgZGF0YS0+X190Y3BpX2JhY2tv ZmYpOworKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfY2Ffc3RhdGUiLAor KwkJCSAgICAgIGRhdGEtPl9fdGNwaV9jYV9zdGF0ZSk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50 OChiaW5ub2JqLCAidGNwaV9wcm9iZXMiLAorKwkJCSAgICAgIGRhdGEtPl9fdGNwaV9wcm9iZXMp OworKwliaW5uX29iamVjdF9zZXRfdWludDgoYmlubm9iaiwgInRjcGlfcmV0cmFuc21pdHMiLAor KwkJCSAgICAgIGRhdGEtPl9fdGNwaV9yZXRyYW5zbWl0cyk7CisrCWJpbm5fb2JqZWN0X3NldF91 aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NzdGhyZXNoIiwKKysJCQkgICAgICAgZGF0YS0+X190 Y3BpX3Jjdl9zc3RocmVzaCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRj cGlfc2Fja2VkIiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX3NhY2tlZCk7CisrCWJpbm5fb2Jq ZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcG10dSIsCisrCQkJICAgICAgIGRhdGEtPl9f dGNwaV9wbXR1KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9mYWNr ZXRzIiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX2ZhY2tldHMpOworKwliaW5uX29iamVjdF9z ZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2xvc3QiLAorKwkJCSAgICAgICBkYXRhLT5fX3RjcGlf bG9zdCk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tf c2VudCIsCisrCQkJICAgICAgIGRhdGEtPl9fdGNwaV9sYXN0X2Fja19zZW50KTsKKysJYmlubl9v YmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV91bmFja2VkIiwKKysJCQkgICAgICAgZGF0 YS0+X190Y3BpX3VuYWNrZWQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0 Y3BpX2xhc3RfZGF0YV9zZW50IiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX2xhc3RfZGF0YV9z ZW50KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2Fja19y ZWN2IiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX2xhc3RfYWNrX3JlY3YpOworKwliaW5uX29i amVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jlb3JkZXJpbmciLAorKwkJCSAgICAgICBk YXRhLT5fX3RjcGlfcmVvcmRlcmluZyk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9i aiwgInRjcGlfYWR2bXNzIiwKKysJCQkgICAgICAgZGF0YS0+X190Y3BpX2Fkdm1zcyk7CisrCWJp bm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfcmV0cmFucyIsCisrCQkJICAgICAg IGRhdGEtPl9fdGNwaV9yZXRyYW5zKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2Jq LCAidGNwaV9hdG8iLAorKwkJCSAgICAgICBkYXRhLT5fX3RjcGlfYXRvKTsKKysJYmlubl9vYmpl Y3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yY3ZfcnR0IiwKKysJCQkgICAgICAgZGF0YS0+ X190Y3BpX3Jjdl9ydHQpOworKyNlbmRpZgorKworKy8qIFVuZGVyIEJTRCBzbmRfcmV4bWl0cGFj ayBpcyB0aGUgc2FtZSBhcyBsaW51eCB0b3RhbF9yZXRyYW5zKi8KKysjaWZkZWYgX19saW51eF9f CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfdG90YWxfcmV0cmFucyIs CisrCQkJICAgICAgIGRhdGEtPnRjcGlfdG90YWxfcmV0cmFucyk7CisrI2Vsc2UKKysJYmlubl9v YmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV90b3RhbF9yZXRyYW5zIiwKKysJCQkgICAg ICAgZGF0YS0+dGNwaV9zbmRfcmV4bWl0cGFjayk7CisrI2VuZGlmCisrCisrLyogVGhlIGxhc3Qg c2VjdGlvbiBhcmUgZm9yIGtlcm5lbCBzcGVjaWZpYyBtZXRyaWNzIGluIGxpbnV4ICovCisrI2lm ZGVmIF9fbGludXhfXworKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04o MywxNSwwKQorKwliaW5uX29iamVjdF9zZXRfdWludDY0KGJpbm5vYmosICJ0Y3BpX21heF9wYWNp bmdfcmF0ZSIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfbWF4X3BhY2luZ19yYXRlKTsKKysJYmlu bl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9wYWNpbmdfcmF0ZSIsCisrCQkJICAg ICAgIGRhdGEtPnRjcGlfcGFjaW5nX3JhdGUpOworKyNlbmRpZgorKworKyNpZiBMSU5VWF9WRVJT SU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCwxLDApCisrCWJpbm5fb2JqZWN0X3NldF91aW50 NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfYWNrZWQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2J5 dGVzX2Fja2VkKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9ieXRl c19yZWNlaXZlZCIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfYnl0ZXNfcmVjZWl2ZWQpOworKyNl bmRpZgorKworKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNCwyLDAp CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlubm9iaiwgInRjcGlfc2Vnc19pbiIsCisrCQkJ ICAgICAgIGRhdGEtPnRjcGlfc2Vnc19pbik7CisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIoYmlu bm9iaiwgInRjcGlfc2Vnc19vdXQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3NlZ3Nfb3V0KTsK KysjZW5kaWYKKysKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQs NiwwKQorKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX25vdHNlbnRfYnl0 ZXMiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX25vdHNlbnRfYnl0ZXMpOworKwliaW5uX29iamVj dF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX21pbl9ydHQiLAorKwkJCSAgICAgICBkYXRhLT50 Y3BpX21pbl9ydHQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2Rh dGFfc2Vnc19pbiIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfZGF0YV9zZWdzX2luKTsKKysJYmlu bl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kYXRhX3NlZ3Nfb3V0IiwKKysJCQkg ICAgICAgZGF0YS0+dGNwaV9kYXRhX3NlZ3Nfb3V0KTsKKysjZW5kaWYKKysKKysjaWYgTElOVVhf VkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsOSwwKQorKwliaW5uX29iamVjdF9zZXRf dWludDgoYmlubm9iaiwgInRjcGlfZGVsaXZlcnlfcmF0ZV9hcHBfbGltaXRlZCIsCisrCQkJICAg ICAgZGF0YS0+dGNwaV9kZWxpdmVyeV9yYXRlX2FwcF9saW1pdGVkKTsKKysJYmlubl9vYmplY3Rf c2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9yYXRlIiwKKysJCQkgICAgICAgZGF0 YS0+dGNwaV9kZWxpdmVyeV9yYXRlKTsKKysjZW5kaWYKKysKKysjaWYgTElOVVhfVkVSU0lPTl9D T0RFID49IEtFUk5FTF9WRVJTSU9OKDQsMTAsMCkKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChi aW5ub2JqLCAidGNwaV9idXN5X3RpbWUiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX2J1c3lfdGlt ZSk7CisrCWJpbm5fb2JqZWN0X3NldF91aW50NjQoYmlubm9iaiwgInRjcGlfc25kYnVmX2xpbWl0 ZWQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3NuZGJ1Zl9saW1pdGVkKTsKKysJYmlubl9vYmpl Y3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9yd25kX2xpbWl0ZWQiLAorKwkJCSAgICAgICBk YXRhLT50Y3BpX3J3bmRfbGltaXRlZCk7CisrI2VuZGlmCisrCisrI2lmIExJTlVYX1ZFUlNJT05f Q09ERSA+PSBLRVJORUxfVkVSU0lPTig0LDE4LDApCisrCWJpbm5fb2JqZWN0X3NldF91aW50MzIo Ymlubm9iaiwgInRjcGlfZGVsaXZlcmVkIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9kZWxpdmVy ZWQpOworKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJlZF9j ZSIsCisrCQkJICAgICAgIGRhdGEtPnRjcGlfZGVsaXZlcmVkX2NlKTsKKysjZW5kaWYKKysKKysj aWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDQsMTksMCkKKysJYmlubl9v YmplY3Rfc2V0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9ieXRlc19zZW50IiwKKysJCQkgICAgICAg ZGF0YS0+dGNwaV9ieXRlc19zZW50KTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ2NChiaW5ub2Jq LCAidGNwaV9ieXRlc19yZXRyYW5zIiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9ieXRlc19yZXRy YW5zKTsKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kc2Fja19kdXBz IiwKKysJCQkgICAgICAgZGF0YS0+dGNwaV9kc2Fja19kdXBzKTsKKysJYmlubl9vYmplY3Rfc2V0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZF9zZWVuIiwKKysJCQkgICAgICAgZGF0YS0+dGNw aV9yZW9yZF9zZWVuKTsKKysjZW5kaWYKKysKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtF Uk5FTF9WRVJTSU9OKDUsNCwwKQorKwliaW5uX29iamVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0 Y3BpX3NuZF93bmQiLAorKwkJCSAgICAgICBkYXRhLT50Y3BpX3NuZF93bmQpOworKwliaW5uX29i amVjdF9zZXRfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9vb29wYWNrIiwKKysJCQkgICAgICAg ZGF0YS0+dGNwaV9yY3Zfb29vcGFjayk7CisrI2VuZGlmCisrCisrI2lmIExJTlVYX1ZFUlNJT05f Q09ERSA+PSBLRVJORUxfVkVSU0lPTig1LDUsMCkKKysJYmlubl9vYmplY3Rfc2V0X3VpbnQ4KGJp bm5vYmosICJ0Y3BpX2Zhc3RvcGVuX2NsaWVudF9mYWlsIiwKKysJCQkgICAgICBkYXRhLT50Y3Bp X2Zhc3RvcGVuX2NsaWVudF9mYWlsKTsKKysjZW5kaWYKKysjZW5kaWYgLyplbmRpZiBmb3IgI2lm ZGVmIF9fbGludXhfXyAqLworKyNlbmRpZiAvKmVuZGlmIGZvciBUQ1BfSU5GTyAqLworK30KKysK KysvKiB0aGlzIHJlYWRzIG91dCB0aGUgdGNwX2luZm8gYmlubiBvYmplY3QgYW5kIGZvcm1hdHMg aXQgaW50byBhIHNpbmdsZSBsaW5lCisrICogdGhlIG9iamVjdCB3aWxsIG5vdCBuZWNlc3Nhcmls eSBoYXZlIGFsbCBvZiB0aGUgZWxlbWVudHMuIElmIGl0J3MgZW1wdHkgaXQKKysgKiBjdXJyZW50 IGp1c3Qgc3BpdHMgb3V0IDAuIFRoaXMgaXNuJ3Qgb3B0aW1hbCBhcyAwIGNhbiBhbHNvIGJlIGEg dmFsaWQgdmFsdWUgKi8KKyt2b2lkCisrbWV0cmljc19yZWFkX2Jpbm5fb2JqZWN0ICh2b2lkICpi aW5ub2JqLCBjaGFyICpvdXRwdXQpIHsKKysJaW50IGxlbiA9IDA7CisrCWludCBidWZsZW4gPSAx MDIzOworKwlpbnQga2VybmVsX3ZlcnNpb24gPSAwOworKwlpZiAoYmlubm9iaiA9PSBOVUxMKSB7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1ldHJpYyBwb2xsaW5nIHJldHVybmVkIGJhZCBkYXRhLlxu Iik7CisrCQlyZXR1cm47CisrCX0KKysJa2VybmVsX3ZlcnNpb24gPSBiaW5uX29iamVjdF91aW50 MzIoYmlubm9iaiwgImtlcm5lbF92ZXJzaW9uIik7CisrCisrCS8qIGJhc2Ugc2V0IG9mIG1ldHJp Y3MgKi8KKysJbGVuID0gc25wcmludGYob3V0cHV0LCBidWZsZW4sICIlZCwgJWQsICVkLCAlZCwg JWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAl ZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWQiLAor KwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3N0YXRlIiksCisrCQkg ICAgICAgYmlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfY2Ffc3RhdGUiKSwKKysJCSAg ICAgICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9yZXRyYW5zbWl0cyIpLAorKwkJ ICAgICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Byb2JlcyIpLAorKwkJICAg ICAgIGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX2JhY2tvZmYiKSwKKysJCSAgICAg ICBiaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9vcHRpb25zIiksCisrCQkgICAgICAg Ymlubl9vYmplY3RfdWludDgoYmlubm9iaiwgInRjcGlfc25kX3dzY2FsZSIpLAorKwkJICAgICAg IGJpbm5fb2JqZWN0X3VpbnQ4KGJpbm5vYmosICJ0Y3BpX3Jjdl93c2NhbGUiKSwKKysJCSAgICAg ICBiaW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcnRvIiksCisrCQkgICAgICAgYmlu bl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2F0byIpLAorKwkJICAgICAgIGJpbm5fb2Jq ZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zbmRfbXNzIiksCisrCQkgICAgICAgYmlubl9vYmpl Y3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9tc3MiKSwKKysJCSAgICAgICBiaW5uX29iamVj dF91aW50MzIoYmlubm9iaiwgInRjcGlfdW5hY2tlZCIpLAorKwkJICAgICAgIGJpbm5fb2JqZWN0 X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zYWNrZWQiKSwKKysJCSAgICAgICBiaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfbG9zdCIpLAorKwkJICAgICAgIGJpbm5fb2JqZWN0X3VpbnQz MihiaW5ub2JqLCAidGNwaV9yZXRyYW5zIiksCisrCQkgICAgICAgYmlubl9vYmplY3RfdWludDMy KGJpbm5vYmosICJ0Y3BpX2ZhY2tldHMiKSwKKysJCSAgICAgICBiaW5uX29iamVjdF91aW50MzIo Ymlubm9iaiwgInRjcGlfbGFzdF9kYXRhX3NlbnQiKSwKKysJCSAgICAgICBiaW5uX29iamVjdF91 aW50MzIoYmlubm9iaiwgInRjcGlfbGFzdF9hY2tfc2VudCIpLAorKwkJICAgICAgIGJpbm5fb2Jq ZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2RhdGFfcmVjdiIpLAorKwkJICAgICAgIGJp bm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9sYXN0X2Fja19yZWN2IiksCisrCQkgICAg ICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3BtdHUiKSwKKysJCSAgICAgICBi aW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NzdGhyZXNoIiksCisrCQkgICAg ICAgYmlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3J0dCIpLAorKwkJICAgICAgIGJp bm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ydHR2YXIiKSwKKysJCSAgICAgICBiaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX3NzdGhyZXNoIiksCisrCQkgICAgICAg Ymlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3NuZF9jd25kIiksCisrCQkgICAgICAg Ymlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2Fkdm1zcyIpLAorKwkJICAgICAgIGJp bm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9yZW9yZGVyaW5nIiksCisrCQkgICAgICAg Ymlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3Jjdl9ydHQiKSwKKysJCSAgICAgICBi aW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X3NwYWNlIiksCisrCQkgICAgICAg Ymlubl9vYmplY3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX3RvdGFsX3JldHJhbnMiKQorKwkJKTsK KysKKysJLyogY29tcGFyZSB0aGUgcmVjZWl2ZWQga2VybmVsIHZlcnNpb24gdG8gdGhlIHZlcnNp b24gdGhhdCBzdXBwb3J0cworKwkgKiBhbnkgZ2l2ZW4gbWV0cmljLiBUaGlzIG1lYW5zIHRoYXQg YSByZW1vdGUgaG9zdCB0aGF0IGhhcyBhIGRpZmZlcmVudAorKwkgKiBrZXJuZWwgdGhhdCB0aGUg bG9jYWwgaG9zdCB3aWxsIGJlIGFibGUgdG8gcHJvY2VzcyB0aGUgZGF0YSBpbiB0ZXJtcyBvZgor KwkgKiB0aGUgcmVtb3RlIGtlcm5lbCB2ZXJzaW9uLiBPbmx5IG5lY2Vzc2FyeSB1bmRlciBsaW51 eCovCisrI2lmZGVmIF9fbGludXhfXworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZF UlNJT04oMywxNSwwKSkgeworKwkJbGVuICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4t bGVuKSwgIiwgJWxsdSwgJWxsdSIsCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAi dGNwaV9tYXhfcGFjaW5nX3JhdGUiKSwKKysJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmos ICJ0Y3BpX3BhY2luZ19yYXRlIikKKysJCQkpOworKwl9CisrCisrCWlmIChrZXJuZWxfdmVyc2lv biA+PSBLRVJORUxfVkVSU0lPTig0LDEsMCkpIHsKKysJCWxlbiArPSBzbnByaW50ZihvdXRwdXQr bGVuLCAoYnVmbGVuLWxlbiksICIsICVsbHUsICVsbHUiLAorKwkJCQliaW5uX29iamVjdF91aW50 NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfYWNrZWQiKSwKKysJCQkJYmlubl9vYmplY3RfdWludDY0 KGJpbm5vYmosICJ0Y3BpX2J5dGVzX3JlY2VpdmVkIikKKysJCQkpOworKwl9CisrCisrCWlmIChr ZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDIsMCkpIHsKKysJCWxlbiArPSBzbnBy aW50ZihvdXRwdXQrbGVuLCAoYnVmbGVuLWxlbiksICIsICVkLCAlZCIsCisrCQkJCWJpbm5fb2Jq ZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9zZWdzX2luIiksCisrCQkJCWJpbm5fb2JqZWN0X3Vp bnQzMihiaW5ub2JqLCAidGNwaV9zZWdzX291dCIpCisrCQkJKTsKKysJfQorKworKwlpZiAoa2Vy bmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCw2LDApKSB7CisrCQlsZW4gKz0gc25wcmlu dGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWQsICVkLCAlZCIsCisrCQkJCWJp bm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9ub3RzZW50X2J5dGVzIiksCisrCQkJCWJp bm5fb2JqZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9taW5fcnR0IiksCisrCQkJCWJpbm5fb2Jq ZWN0X3VpbnQzMihiaW5ub2JqLCAidGNwaV9kYXRhX3NlZ3NfaW4iKSwKKysJCQkJYmlubl9vYmpl Y3RfdWludDMyKGJpbm5vYmosICJ0Y3BpX2RhdGFfc2Vnc19vdXQiKQorKwkJCSk7CisrCX0KKysK KysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDQsOSwwKSkgeworKwkJbGVu ICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVsbHUiLAorKwkJ CQliaW5uX29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9yYXRlX2FwcF9saW1p dGVkIiksCisrCQkJCWJpbm5fb2JqZWN0X3VpbnQ2NChiaW5ub2JqLCAidGNwaV9kZWxpdmVyeV9y YXRlIikKKysJCQkpOworKwl9CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVS U0lPTig0LDEwLDApKSB7CisrCQlsZW4gKz0gc25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1s ZW4pLCAiLCAlbGx1LCAlbGx1LCAlbGx1IiwKKysJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5v YmosICJ0Y3BpX2J1c3lfdGltZSIpLAorKwkJCQliaW5uX29iamVjdF91aW50NjQoYmlubm9iaiwg InRjcGlfc25kYnVmX2xpbWl0ZWQiKSwKKysJCQkJYmlubl9vYmplY3RfdWludDY0KGJpbm5vYmos ICJ0Y3BpX3J3bmRfbGltaXRlZCIpCisrCQkJKTsKKysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNp b24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxOCwwKSkgeworKwkJbGVuICs9IHNucHJpbnRmKG91dHB1 dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQsICVkIiwKKysJCQkJYmlubl9vYmplY3RfdWludDMy KGJpbm5vYmosICJ0Y3BpX2RlbGl2ZXJlZCIpLAorKwkJCQliaW5uX29iamVjdF91aW50MzIoYmlu bm9iaiwgInRjcGlfZGVsaXZlcmVkX2NlIikKKysJCQkpOworKwl9CisrCisrCWlmIChrZXJuZWxf dmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDE5LDApKSB7CisrCQlsZW4gKz0gc25wcmludGYo b3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlbGx1LCAlbGx1LCAlZCwgJWQiLAorKwkJCQli aW5uX29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfc2VudCIpLAorKwkJCQliaW5u X29iamVjdF91aW50NjQoYmlubm9iaiwgInRjcGlfYnl0ZXNfcmV0cmFucyIpLAorKwkJCQliaW5u X29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfZHNhY2tfZHVwcyIpLAorKwkJCQliaW5uX29i amVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmVvcmRfc2VlbiIpCisrCQkJKTsKKysJfQorKwor KwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNSw0LDApKSB7CisrCQlsZW4g Kz0gc25wcmludGYob3V0cHV0K2xlbiwgKGJ1Zmxlbi1sZW4pLCAiLCAlZCwgJWQiLAorKwkJCQli aW5uX29iamVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfc25kX3duZCIpLAorKwkJCQliaW5uX29i amVjdF91aW50MzIoYmlubm9iaiwgInRjcGlfcmN2X29vb3BhY2siKQorKwkJCSk7CisrCX0KKysK KysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNSwwKSkgeworKwkJbGVu ICs9IHNucHJpbnRmKG91dHB1dCtsZW4sIChidWZsZW4tbGVuKSwgIiwgJWQiLAorKwkJCQliaW5u X29iamVjdF91aW50OChiaW5ub2JqLCAidGNwaV9mYXN0b3Blbl9jbGllbnRfZmFpbCIpCisrCQkJ KTsKKysJfQorKyNlbmRpZiAvKiBpZmRlZiBfX2xpbnV4X18gKi8KKyt9CisrCisrLyogUHJpbnQg b3V0IHRoZSBoZWFkZXIgdG8gdGhlIGZpbGUgc28gdGhhdCB0aGUgY29sdW1uIGhlYWRlciBtYXRj aGVzIHRoZQorKyAqIGRhdGEgaW4gdGhlIG1ldHJpY3Mgb2JqZWN0LiBUaGF0IHZhcmllcyBieSBr ZXJuZWwgdmVyc2lvbiBzbyB3ZSBoYXZlIHRvCisrICogZG8gdGVzdHMgZm9yIGVhY2ggcG9zc2li bGUgdmVyc2lvbiB3aGVyZSB0aGV5IGFkZGVkIG5ldyB2YWx1ZXMgdG8gdGNwX2luZm8KKysgKiBO T1RFOiBUaGlzIGRvZXNuJ3QgcHV0IHRoZSB2YWx1ZXMvaGVhZGVycyBpbiB0aGUgbW9zdCB1c2Vm dWwgb3JkZXIgYnV0IHRoZQorKyAqIHJlc3VsdGluZyBmaWxlIGlzIHByb2JhYmx5IGdvaW5nIHRv IGdldCBwcm9jZXNzZWQgYnkgc29tZXRoaW5nICovCisrdm9pZAorK21ldHJpY3NfcHJpbnRfaGVh ZGVyKEZJTEUgKmZwdHIsIGNoYXIgKmV4dHJhX3RleHQsIGludCBrZXJuZWxfdmVyc2lvbikgewor KwlpZiAoZXh0cmFfdGV4dCAhPSBOVUxMKSB7CisrCQlmcHJpbnRmKGZwdHIsICIlc1xuIiwgZXh0 cmFfdGV4dCk7CisrCX0KKysJZnByaW50ZihmcHRyLCAidGltZXN0YW1wLCBzdGF0ZSwgY2Ffc3Rh dGUsIHJldHJhbnNtaXRzLCBwcm9iZXMsIGJhY2tvZmYsIG9wdGlvbnMsICIpOworKwlmcHJpbnRm KGZwdHIsICJzbmRfd3NjYWxlLCByY3Zfd3NjYWxlLCBydG8sIGF0bywgc25kX21zcywgcmN2X21z cywgdW5hY2tlZCwgc2Fja2VkLCBsb3N0LCByZXRyYW5zLCAiKTsKKysJZnByaW50ZihmcHRyLCAi ZmFja2V0cywgbGFzdF9kYXRhX3NlbnQsIGxhc3RfYWNrX3NlbnQsIGxhc3RfZGF0YV9yZWN2LCAi KTsKKysJZnByaW50ZihmcHRyLCAibGFzdF9hY2tfcmVjdiwgcG10dSwgcmN2X3NzdGhyZXNoLCBy dHQsIHJ0dHZhciwgc25kX3NzdGhyZXNoLCAiKTsKKysJZnByaW50ZihmcHRyLCAic25kX2N3bmQs IGFkdm1zcywgcmVvcmRlcmluZywgcmN2X3J0dCwgcmN2X3NwYWNlLCB0b3RhbF9yZXRyYW5zIik7 CisrCisrCS8qIGNvbXBhcmUgdGhlIHJlY2VpdmVkIGtlcm5lbCB2ZXJzaW9uIHRvIHRoZSB2ZXJz aW9uIHRoYXQgc3VwcG9ydHMKKysJICogYW55IGdpdmVuIG1ldHJpYy4gVGhpcyB3YXkgd2UgY2Fu IHByaW50IGNvbnNpc3RlbnQgaGVhZGVycy4KKysJICogT25seSBuZWNlc3NhcnkgdW5kZXIgbGlu dXgqLworKyNpZmRlZiBfX2xpbnV4X18KKysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9W RVJTSU9OKDMsMTUsMCkpIHsKKysJCWZwcmludGYoZnB0ciwgIiwgbWF4X3BhY2luZ19yYXRlLCBw YWNpbmdfcmF0ZSIpOworKwl9CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVS U0lPTig0LDEsMCkpIHsKKysJCWZwcmludGYoZnB0ciwgIiwgYnl0ZXNfYWNrZWQsIGJ5dGVzX3Jl Y2VpdmVkIik7CisrCX0KKysKKysJaWYgKGtlcm5lbF92ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9O KDQsMiwwKSkgeworKwkJZnByaW50ZihmcHRyLCAiLCBzZWdzX2luLCBzZWdzX291dCIpOworKwl9 CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+PSBLRVJORUxfVkVSU0lPTig0LDYsMCkpIHsKKysJ CWZwcmludGYoZnB0ciwgIiwgbm90c2VudF9ieXRlcywgbWluX3J0dCwgZGF0YV9zZWdzX2luLCBk YXRhX3NlZ19vdXQiKTsKKysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZF UlNJT04oNCw5LDApKSB7CisrCQlmcHJpbnRmKGZwdHIsICIsIGRlbGl2ZXJ5X3JhdGVfYXBwX2xp bWl0ZWQsIGRlbGl2ZXJ5X3JhdGUiKTsKKysJfQorKworKwlpZiAoa2VybmVsX3ZlcnNpb24gPj0g S0VSTkVMX1ZFUlNJT04oNCwxMCwwKSkgeworKwkJZnByaW50ZihmcHRyLCAiLCBidXN5X3RpbWUs IHNuZGJ1Zl9saW1pdGVkLCByd25kX2xpbWl0ZWQiKTsKKysJfQorKworKwlpZiAoa2VybmVsX3Zl cnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNCwxOCwwKSkgeworKwkJZnByaW50ZihmcHRyLCAiLCBk ZWxpdmVyZWQsIGRlbGl2ZXJlZF9jZSIpOworKwl9CisrCisrCWlmIChrZXJuZWxfdmVyc2lvbiA+ PSBLRVJORUxfVkVSU0lPTig0LDE5LDApKSB7CisrCQlmcHJpbnRmKGZwdHIsICIsIGJ5dGVzX3Nl bnQsIGJ5dGVzX3JldHJhbnMsIGRzYWNrX2R1cHMsIHJlb3JkX3NlZW4iKTsKKysJfQorKworKwlp ZiAoa2VybmVsX3ZlcnNpb24gPj0gS0VSTkVMX1ZFUlNJT04oNSw0LDApKSB7CisrCQlmcHJpbnRm KGZwdHIsICIsIHNuZF93bmQsIHJjdl9vb29wYWNrIik7CisrCX0KKysKKysJaWYgKGtlcm5lbF92 ZXJzaW9uID49IEtFUk5FTF9WRVJTSU9OKDUsNSwwKSkgeworKwkJZnByaW50ZihmcHRyLCAiLCBm YXN0b3Blbl9jbGllbnRfZmFpbCIpOworKwl9CisrI2VuZGlmIC8qIGlmZGVmIF9fbGludXhfXyAq LworKwlmcHJpbnRmKGZwdHIsICJcblxuIik7CisrfQorZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvbWV0cmljcy5oIG9wZW5zc2gtMTAuM3AxL21ldHJpY3MuaAorLS0tIG9wZW5zc2gtMTAu M3AxLm9yaWcvbWV0cmljcy5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzaC0xMC4zcDEvbWV0cmljcy5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI1OTQ2MDA0 ICswMjAwCitAQCAtMCwwICsxLDQ1IEBACisrLyoKKysgKiBDb3B5cmlnaHQgKGMpIDIwMjIgVGhl IEJvYXJkIG9mIFRydXN0ZWVzIG9mIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5LgorKyAqCisr ICogIEF1dGhvcjogQ2hyaXMgUmFwaWVyIDxyYXBpZXJAcHNjLmVkdT4KKysgKgorKyAqIFRoaXMg bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0CisrICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgTGljZW5zZS4KKysgKgor KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLCBidXQgV0lUSE9VVAorKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorKyAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBNSVQgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTUlU IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7CisrICogaWYgbm90LCBzZWUgaHR0cDov L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVC4KKysgKgorKyAqLworKworKyNpZm5kZWYgTUVU UklDU19ICisrI2RlZmluZSBNRVRSSUNTX0gKKysKKysjaW5jbHVkZSAiYmlubi5oIgorKworKy8q IGxpbnV4LCBmcmVlYnNkLCBhbmQgbmV0YnNkIGhhdmUgdGNwX2luZm8gc3RydWN0cy4KKysgKiBJ IGRvbid0IGtub3cgYWJvdXQgb3RoZXIgc3lzdGVtcyBzbyB3ZSBkaXNhYmxlIHRoaXMKKysgKiBm dW5jdGlvbmFsaXR5IGZvciB0aGVtICovCisrI2lmIGRlZmluZWQgX19saW51eF9fIHx8IGRlZmlu ZWQgX19GcmVlQlNEX18gfHwgZGVmaW5lZCBfX05ldEJTRF9fICYmICFkZWZpbmVkKF9fYWxwaW5l X18pCisrI2RlZmluZSBUQ1BfSU5GTyAxCisrI2lmIGRlZmluZWQgX19saW51eF9fICYmICFkZWZp bmVkKF9fYWxwaW5lX18pCisrI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorKyNlbHNlCisrI2luY2x1 ZGUgPG5ldGluZXQvdGNwLmg+CisrI2VuZGlmCisrI2Vsc2UKKysvKiBtYWtlIGEgbnVsbCBzdHJ1 Y3QgZm9yIHRjcF9pbmZvIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0Ki8KKyt0eXBl ZGVmIHN0cnVjdCB0Y3BfaW5mbyB7CisrCXZvaWQgICAgICpkdW1teTsKKyt9IHRjcF9pbmZvOwor KyNlbmRpZgorKworK3ZvaWQgbWV0cmljc193cml0ZV9iaW5uX29iamVjdChzdHJ1Y3QgdGNwX2lu Zm8gKiwgc3RydWN0IGJpbm5fc3RydWN0ICopOworK3ZvaWQgbWV0cmljc19yZWFkX2Jpbm5fb2Jq ZWN0KHZvaWQgKiwgY2hhciAqKTsKKyt2b2lkIG1ldHJpY3NfcHJpbnRfaGVhZGVyKEZJTEUgKiwg Y2hhciAqLCBpbnQpOworKworKworKyNlbmRpZiAvKiBkZWZpbmUgbWV0cmljc19oICovCitkaWZm IC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9taXNjLmMgb3BlbnNzaC0xMC4zcDEvbWlzYy5jCist LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9taXNjLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0 NDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9taXNjLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43 MjYwODQ5MjMgKzAyMDAKK0BAIC02Niw2ICs2Niw4MiBAQAorICNpbmNsdWRlICJzc2hlcnIuaCIK KyAjaW5jbHVkZSAicGxhdGZvcm0uaCIKKyAKKysvKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYg RklQUyBpcyBlbmFibGVkIG9yIG5vdC4KKysgKiBXZSBhc3N1bWUgdGhhdCBmaXBzIGlzIG5vdCBl bmFibGVkIGFuZCB0aGVuIHRlc3QgZnJvbSB0aGVyZS4KKysgKiBUaGUgaWRlYSBpcyB0aGF0IGlm IHRoZXJlIGlzIGFuIGVycm9yIG9yIHdlIGNhbid0IHJlYWQgdGhlIHZhbHVlCisrICogdGhlbiBl aXRoZXIgdGhlIE9TIGRvZXNuJ3Qgc3VwcG9ydCBGSVBTIG9yIHRoYXQgRklQUyB3aWxsCisrICog Y2F0Y2ggYW55dGhpbmcgd2UgdHJ5IHRvIGRvIHRoYXQncyBub3QgRklQUyBjb21wbGlhbnQuCisr ICogVGhhdCB3b3VsZCBiZSBsaW1pdGVkIHRvIHRyeWluZyB0byB1c2Ugb25lIG9mIHRoZSBwYXJh bGxlbCBjaXBoZXJzLgorKyAqLworK2ludAorK2ZpcHNfZW5hYmxlZCgpCisreworKwlpbnQgbW9k ZSA9IDA7CisrCWNvbnN0IGNoYXIqIGZpcHNfcGF0aCA9ICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNf ZW5hYmxlZCI7CisrCUZJTEUgKmZpcHNfZW5hYmxlZCA9IE5VTEw7CisrCisrCWRlYnVnMl9mKCJD aGVja2luZyBmb3IgRklQUyIpOworKworKwkvKiBpZiB3ZSBjYW4ndCBvcGVuIHRoZSBwYXRoIHRv IGZpcHNfZW5hYmxlZCBpdAorKwkgKiBlaXRoZXIgZG9lc24ndCBleGlzdCBvciB0aGVyZSBpcyBh biBlcnJvci4gSW4gZWl0aGVyCisrCSAqIGNhc2Ugd2UgdHJlYXQgaXQgYXMgaWYgZmlwcyBpcyAq bm90KiBlbmFibGVkLgorKwkgKiBUaGlzIGlzIGJlY2F1c2UgSSB3YW50IHRvIGZhaWwgdG93YXJk cyB0aGUgbW9zdAorKwkgKiBjb21tb24gc2NlbmFyaW8gd2hpY2ggaXMgdGhhdCBmaXBzX2VuYWJs ZWQgZWl0aGVyCisrCSAqIGRvZXNuJ3QgZXhpc3QgKG5vbi1mZWRvcmEgdmFyaWFudHMpIG9yIGlz bid0CisrCSAqIGVuYWJsZWQuCisrCSAqLworKwlmaXBzX2VuYWJsZWQgPSBmb3BlbihmaXBzX3Bh dGgsICJyIik7CisrCWlmICghZmlwc19lbmFibGVkKSB7CisrCQlkZWJ1ZzNfZigiQ2Fubm90IG9w ZW4gcGF0aCB0byBmaXBzX2VuYWJsZWQuIik7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwkvKiBm aXBzX2VuYWJsZWQgZG9lcyBleGlzdCBzbyByZWFkIHRoZSB2YWx1ZS4KKysJICogSXQgc2hvdWxk IGJlIGVpdGhlciAwIChkaXNhYmxlZCkgb3IgMSAoZW5hYmxlZCkKKysJICovCisrCWlmICggMSAh PSBmc2NhbmYoZmlwc19lbmFibGVkLCIlZCIsICZtb2RlKSApIHsKKysJCS8qIGlmIHdlIGdldCBz b21lIGVycm9yIGhlcmUgdGhlbiB3ZQorKwkJICogYWdhaW4gZmFpbCB0byByZXR1cm5pbmcgZmlw cyBiZWluZyBkaXNhYmxlZAorKwkJICovCisrCQlkZWJ1ZzNfZigiRXJyb3IgcHJvY2Vzc2luZyBm aXBzX2VuYWJsZWQuIik7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwkvKiBsZXQgdGhlIHVzZXIg a25vdyB0aGUgc3RhdHVzICovCisrCWlmIChtb2RlID09IDApCisrCQlkZWJ1ZzNfZigiRklQUyBt b2RlIGlzIGRpc2FibGVkLiIpOworKwllbHNlCisrCQlkZWJ1ZzNfZigiRklQUyBtb2RlIGlzIGVu YWJsZWQuIik7CisrCisrCXJldHVybiBtb2RlOworK30KKysKKysvKiBoZWxwZXIgZnVuY3Rpb24g dXNlZCB0byBkZXRlcm1pbmUgbWVtb3J5IHVzYWdlIGR1cmluZworKyAqIGRldmVsb3BtZW50IHBy b2Nlc3MuIE5vdCB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24uCisrICovCisrdm9pZAorK3JlYWRf bWVtX3N0YXRzKHN0YXRtX3QgKnJlc3VsdCwgaW50IHBvc3RfYXV0aCkKKyt7CisrCWlmICghcG9z dF9hdXRoKQorKwkJcmV0dXJuOworKworKwljb25zdCBjaGFyKiBzdGF0bV9wYXRoID0gIi9wcm9j L3NlbGYvc3RhdG0iOworKworKwlGSUxFICpmID0gZm9wZW4oc3RhdG1fcGF0aCwiciIpOworKwlp ZighZil7CisrCQlwZXJyb3Ioc3RhdG1fcGF0aCk7CisrCQlhYm9ydCgpOworKwl9CisrCWlmKDcg IT0gZnNjYW5mKGYsIiVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSIsCisrCQkgICAgICAgJnJl c3VsdC0+c2l6ZSwgJnJlc3VsdC0+cmVzaWRlbnQsICZyZXN1bHQtPnNoYXJlLCAmcmVzdWx0LT50 ZXh0LCAmcmVzdWx0LT5saWIsCisrCQkgICAgICAgJnJlc3VsdC0+ZGF0YSwgJnJlc3VsdC0+ZHQp KQorKwl7CisrCQlwZXJyb3Ioc3RhdG1fcGF0aCk7CisrCQlhYm9ydCgpOworKwl9CisrCWZjbG9z ZShmKTsKKyt9CisrCisgLyogcmVtb3ZlIG5ld2xpbmUgYXQgZW5kIG9mIHN0cmluZyAqLworIGNo YXIgKgorIGNob3AoY2hhciAqcykKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL21pc2Mu aCBvcGVuc3NoLTEwLjNwMS9taXNjLmgKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL21pc2MuaAky MDI2LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL21p c2MuaAkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNjYxMDI1NCArMDIwMAorQEAgLTI3Niw0ICsyNzYs MTcgQEAKKyAJCSAgICBzdHJlcnJvcihlcnJubykpOyBcCisgfSB3aGlsZSAoMCkKKyAKKyt0eXBl ZGVmIHN0cnVjdCBzdGF0bV90IHsKKysgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKysgIHVuc2lnbmVk IGxvbmcgcmVzaWRlbnQ7CisrICB1bnNpZ25lZCBsb25nIHNoYXJlOworKyAgdW5zaWduZWQgbG9u ZyB0ZXh0OworKyAgdW5zaWduZWQgbG9uZyBsaWI7CisrICB1bnNpZ25lZCBsb25nIGRhdGE7Cisr ICB1bnNpZ25lZCBsb25nIGR0OworK30gc3RhdG1fdDsKKysKKyt2b2lkIHJlYWRfbWVtX3N0YXRz KHN0cnVjdCBzdGF0bV90ICosIGludCk7CisraW50IGZpcHNfZW5hYmxlZCgpOworKworICNlbmRp ZiAvKiBfTUlTQ19IICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9teXByb3Bvc2Fs Lmggb3BlbnNzaC0xMC4zcDEvbXlwcm9wb3NhbC5oCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9t eXByb3Bvc2FsLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKKysrKyBvcGVu c3NoLTEwLjNwMS9teXByb3Bvc2FsLmgJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjY4MjQ5MDMgKzAy MDAKK0BAIC03NCwxMCArNzQsMjAgQEAKKyAJInJzYS1zaGEyLTUxMiwiIFwKKyAJInJzYS1zaGEy LTI1NiIKKyAKKysvKmlmIHdlIGFyZW4ndCB1c2luZyBPcGVuU1NMIHdlIG5lZWQgdG8gcmVtb3Zl CisrICogdGhlIHBhcmFsbGVsIENoYUNoYTIwIGNpcGhlciBmcm9tIHRoZSBsaXN0ICovCisrI2lm ZGVmIFdJVEhfT1BFTlNTTAorICNkZWZpbmUJS0VYX1NFUlZFUl9FTkNSWVBUIFwKKysJImNoYWNo YTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmcsIiAgXAorIAkiY2hhY2hhMjAtcG9seTEzMDVAb3Bl bnNzaC5jb20sIiBcCisgCSJhZXMxMjgtZ2NtQG9wZW5zc2guY29tLGFlczI1Ni1nY21Ab3BlbnNz aC5jb20sIiBcCisgCSJhZXMxMjgtY3RyLGFlczE5Mi1jdHIsYWVzMjU2LWN0ciIKKysjZWxzZQor KyNkZWZpbmUJS0VYX1NFUlZFUl9FTkNSWVBUIFwKKysJImNoYWNoYTIwLXBvbHkxMzA1QG9wZW5z c2guY29tLCIgXAorKwkiYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSxhZXMyNTYtZ2NtQG9wZW5zc2gu Y29tLCIgXAorKwkiYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIiCisrI2VuZGlmCisg CisgI2RlZmluZSBLRVhfQ0xJRU5UX0VOQ1JZUFQgS0VYX1NFUlZFUl9FTkNSWVBUCisgCitkaWZm IC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9udW0uYyBvcGVuc3NoLTEwLjNwMS9udW0uYworLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcvbnVtLmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9udW0uYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNjk3 NTk4NSArMDIwMAorQEAgLTAsMCArMSwxNTYgQEAKKysvKiBDQzAgbGljZW5zZSBhcHBsaWVkLCBz ZWUgTElDRU5DRS5tZCAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSAibnVt LmgiCisrCisrI2lmZGVmIFdJVEhfT1BFTlNTTDMKKysKKyt0eXBlZGVmIGVudW0geyBCSUcgPSAx LCBMSVRUTEUgPSAtMSB9ICBlbmRpYW5fdDsKKyt0eXBlZGVmIGVudW0geyBORUdBVElWRSA9IDB4 ZmYsIFBPU0lUSVZFID0gMHgwMCB9IHNpZ25fdDsKKysKKytzdGF0aWMgZW5kaWFuX3QgbmF0aXZl ZW5kaWFuKHZvaWQpCisreworKyAgICBjb25zdCBpbnQgZW5kaWFudGVzdCA9IDE7CisrCisrICAg IHJldHVybiAqKChjaGFyICopJmVuZGlhbnRlc3QpID09IDEgPyBMSVRUTEUgOiBCSUc7CisrfQor KworK3N0YXRpYyBzaWduX3QgcGFyYW1zaWduKGNvbnN0IE9TU0xfUEFSQU0gKnBhcmFtKQorK3sK KysgICAgc2l6ZV90IHNyY21zYiA9IG5hdGl2ZWVuZGlhbigpID09IEJJRyA/IDAgOiBwYXJhbS0+ ZGF0YV9zaXplIC0gMTsKKysKKysgICAgcmV0dXJuCisrICAgICAgICBwYXJhbS0+ZGF0YV90eXBl ID09IE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUgorKyAgICAgICAgPyBQT1NJVElWRQorKyAg ICAgICAgOiAoKCh1bnNpZ25lZCBjaGFyICopcGFyYW0tPmRhdGEpW3NyY21zYl0gJiAweDgwCisr ICAgICAgICAgICA/IE5FR0FUSVZFCisrICAgICAgICAgICA6IFBPU0lUSVZFKTsKKyt9CisrCisr c3RydWN0IG51bWRlc2MgeworKyAgICB2b2lkICpkYXRhOworKyAgICB1bnNpZ25lZCBpbnQgZGF0 YV90eXBlOyAgICAgLyogVGhlIE9TU0xfUEFSQU0gZGF0YSB0eXBlICovCisrCisrICAgIC8qIFRo ZXNlIGZpZWxkcyBjb25jZXJuIHRoZSB3aG9sZSBudW1iZXIgKi8KKysgICAgc2l6ZV90IHNpemU7 CisrICAgIGVuZGlhbl90IGVuZGlhbjsKKysgICAgc2lnbl90IHNpZ247CisrCisrICAgIC8qIFRo ZXNlIGZpZWxkcyBjb25jZXJuIHRoZSBsaW1icyBvZiB0aGUgbnVtYmVyICovCisrICAgIHNpemVf dCBsaW1ic2l6ZTsKKysgICAgZW5kaWFuX3QgbGltYmVuZGlhbjsKKysgICAgLyogVGhpcyBpcyBm b3Igb2RkIGFyY2hzLiAqLworKyAgICAvKiBzZWUgdGhlIG1hbnVhbCBmb3IgbXB6X2ltcG9ydCgp IGZvciBhbiBpbiBkZXB0aCBleHBsYW5hdGlvbi4gKi8KKysgICAgc2l6ZV90IGxpbWJuYWlsYml0 czsKKyt9OworKworK3N0cnVjdCByZXN1bHRkZXNjIHsKKysgICAgc2l6ZV90IHNpemU7CisrICAg IGludCByZXN1bHQ7ICAgICAgICAgICAgICAgICAvKiAxIG9yIChuZWdhdGl2ZSkgZXJyb3IgKi8K Kyt9OworKworK3N0YXRpYyBzdHJ1Y3QgcmVzdWx0ZGVzYyBwcm92bnVtX2NvcHkoc3RydWN0IG51 bWRlc2MgZGVzdCwgc3RydWN0IG51bWRlc2Mgc3JjKQorK3sKKysgICAgc3RydWN0IHJlc3VsdGRl c2MgcmVzdWx0ID0geyBkZXN0LnNpemUsIDEsIH07CisrCisrICAgIGlmIChzcmMuZGF0YV90eXBl ICE9IE9TU0xfUEFSQU1fSU5URUdFUgorKyAgICAgICAgJiYgc3JjLmRhdGFfdHlwZSAhPSBPU1NM X1BBUkFNX1VOU0lHTkVEX0lOVEVHRVIpIHsKKysgICAgICAgIHJlc3VsdC5yZXN1bHQgPSBQUk9W TlVNX0VfV1JPTkdfVFlQRTsKKysgICAgICAgIHJldHVybiByZXN1bHQ7CisrICAgIH0KKysKKysg ICAgaWYgKHNyYy5zaXplID09IDApIHsKKysgICAgICAgIG1lbXNldChkZXN0LmRhdGEsIDAsIGRl c3Quc2l6ZSk7CisrICAgICAgICByZXR1cm4gcmVzdWx0OworKyAgICB9CisrCisrICAgIC8qIEV4 dHJhIGRhdGEgKi8KKysgICAgc2l6ZV90IHNyY21zYiA9IHNyYy5lbmRpYW4gPT0gQklHID8gMCA6 IHNyYy5zaXplIC0gMTsKKysgICAgaW50IHNyY21zYjJsc2IgPSBzcmMuZW5kaWFuID09IEJJRyA/ IDEgOiAtMTsKKysKKysgICAgLyoKKysgICAgICogSWYgdGhlIHNvdXJjZSBpcyBiaWdnZXIgdGhh biB0aGUgZGVzdGluYXRpb24sIGFuYWx5c2UgdG8gc2VlIGlmIHRoZQorKyAgICAgKiBtb3N0IHNp Z25pZmljYW50IGJ5dGUgaXMganVzdCBwYWRkaW5nIHRoYXQgY2FuIGJlIGlnbm9yZWQuCisrICAg ICAqIFRoZSBydWxlcyB0byBkZXRlcm1pbmUgaWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBp cyBqdXN0IHBhZGRpbmcKKysgICAgICogYXJlOgorKyAgICAgKgorKyAgICAgKiAxLiB0aGUgbW9z dCBzaWduaWZpY2FudCBieXRlIGVxdWFscyBzcmNzaWduZWQsIHdoaWNoIGp1c3Qgc28gaGFwcGVu cworKyAgICAgKiAgICB0byBoYXZlIHRoZSAyJ3MgY29tcGxlbWVudCBwYWRkaW5nIHZhbHVlLgor KyAgICAgKiAyLiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIG5leHQgdG8gbW9zdCBz aWduaWZpY2FudCBieXRlCisrICAgICAqICAgIGVxdWFscyB0aGUgbW9zdCBzaWduaWZpY2FudCBi aXQgb2Ygc3Jjc2lnbmVkLgorKyAgICAgKi8KKysgICAgc2l6ZV90IGVuZCA9IGRlc3QuZGF0YSA9 PSBOVUxMID8gMSA6IGRlc3Quc2l6ZTsKKysgICAgZm9yICg7IHNyYy5zaXplID4gZW5kOyBzcmNt c2IgKz0gc3JjbXNiMmxzYiwgc3JjLnNpemUtLSkKKysgICAgICAgIGlmICgoKHVuc2lnbmVkIGNo YXIgKilzcmMuZGF0YSlbc3JjbXNiXSAhPSBzcmMuc2lnbgorKyAgICAgICAgICAgIHx8ICgoKCh1 bnNpZ25lZCBjaGFyICopc3JjLmRhdGEpW3NyY21zYiArIHNyY21zYjJsc2JdICYgMHg4MCkKKysg ICAgICAgICAgICAgICAgIT0gKHNyYy5zaWduICYgMHg4MCkpKQorKyAgICAgICAgICAgIGJyZWFr OworKworKyAgICBpZiAoc3JjLnNpemUgPiBkZXN0LnNpemUpIHsKKysgICAgICAgIHJlc3VsdC5y ZXN1bHQgPSBQUk9WTlVNX0VfVE9PQklHOworKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKysgICAg fQorKworKyAgICBzaXplX3Qgc3JjbHNiID0gc3JjbXNiICsgc3JjbXNiMmxzYiAqIChzcmMuc2l6 ZSAtIDEpOworKworKyAgICAvKiBTaW1wbGUgY2FzZSwgYWxsIHNpZ25pZmljYW50IGRldGFpbHMg bWF0Y2ggKi8KKysgICAgaWYgKGRlc3QuZW5kaWFuID09IHNyYy5lbmRpYW4KKysgICAgICAgICYm IGRlc3QubGltYnNpemUgPT0gMQorKyAgICAgICAgJiYgZGVzdC5saW1ibmFpbGJpdHMgPT0gMAor KyAgICAgICAgJiYgKGRlc3QuZGF0YV90eXBlID09IE9TU0xfUEFSQU1fSU5URUdFUiB8fCBzcmMu c2lnbiA9PSBQT1NJVElWRSkpIHsKKysKKysgICAgICAgIGlmIChzcmMuc2l6ZSA8IGRlc3Quc2l6 ZSkgeworKyAgICAgICAgICAgIHNpemVfdCBwYWRzdGFydCA9IGRlc3QuZW5kaWFuID09IEJJRyA/ IDAgOiBkZXN0LnNpemUgLSBzcmMuc2l6ZTsKKysKKysgICAgICAgICAgICBtZW1zZXQoKHVuc2ln bmVkIGNoYXIgKilkZXN0LmRhdGEgKyBwYWRzdGFydCwgc3JjLnNpZ24sCisrICAgICAgICAgICAg ICAgICAgIGRlc3Quc2l6ZSAtIHNyYy5zaXplKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHNp emVfdCBkZXN0c3RhcnQgPSBkZXN0LmVuZGlhbiA9PSBCSUcgPyBkZXN0LnNpemUgLSBzcmMuc2l6 ZSA6IDA7CisrICAgICAgICBzaXplX3Qgc3Jjc3RhcnQgPSBzcmMuZW5kaWFuID09IEJJRyA/IHNy Y21zYiA6IHNyY2xzYjsKKysKKysgICAgICAgIG1lbWNweSgodW5zaWduZWQgY2hhciAqKWRlc3Qu ZGF0YSArIGRlc3RzdGFydCwKKysgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXNyYy5k YXRhICsgc3Jjc3RhcnQsCisrICAgICAgICAgICAgICAgc3JjLnNpemUpOworKyAgICAgICAgcmV0 dXJuIHJlc3VsdDsKKysgICAgfQorKworKyAgICAvKiBDb21wbGV4IGNhc2UsIGZvciBzaWduIG9y IGxpbWIgY29udmVyc2lvbi4gIEN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLworKyAgICByZXN1bHQu cmVzdWx0ID0gUFJPVk5VTV9FX1VOU1VQUE9SVEVEOworKyAgICByZXR1cm4gcmVzdWx0OworK30K KysKKysjZGVmaW5lIGltcGxlbWVudF9wcm92bnVtKFQsIERUKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICBpbnQgcHJvdm51bV9nZXRfIyNUKFQgKmRlc3QsIGNvbnN0IE9T U0xfUEFSQU0gKnBhcmFtKSAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGVuZGlhbl90IGVu ZGlhbiA9IG5hdGl2ZWVuZGlhbigpOyAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg c3RydWN0IG51bWRlc2MgZGVzdG5kID0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgICAgZGVzdCwgRFQsIHNpemVvZihUKSwgZW5kaWFuLCBQT1NJVElWRSwgMSwg ZW5kaWFuLCAwIFwKKysgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3RydWN0IG51bWRlc2Mgc3JjbmQgPSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgcGFyYW0tPmRh dGEsIHBhcmFtLT5kYXRhX3R5cGUsIHBhcmFtLT5kYXRhX3NpemUsICAgIFwKKysgICAgICAgICAg ICBlbmRpYW4sIHBhcmFtc2lnbihwYXJhbSksIDEsIGVuZGlhbiwgMCAgICAgICAgICAgICAgXAor KyAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN0cnVjdCByZXN1bHRkZXNjIHJlc3VsdCA9 IHByb3ZudW1fY29weShkZXN0bmQsIHNyY25kKTsgXAorKyAgICAgICAgcmV0dXJuIHJlc3VsdC5y ZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgaW50IHByb3ZudW1fc2V0XyMjVChPU1NMX1BBUkFNICpwYXJhbSwgVCBzcmMpICAgICAgICAg XAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICBlbmRpYW5fdCBlbmRpYW4gPSBuYXRpdmVlbmRpYW4oKTsg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN0cnVjdCBudW1kZXNjIGRlc3RuZCA9 IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHBhcmFtLT5k YXRhLCBwYXJhbS0+ZGF0YV90eXBlLCBwYXJhbS0+ZGF0YV9zaXplLCAgICBcCisrICAgICAgICAg ICAgZW5kaWFuLCBQT1NJVElWRSwgMSwgZW5kaWFuLCAwICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgc3RydWN0IG51bWRlc2Mgc3JjbmQgPSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgJnNyYywgRFQsIHNpemVvZihUKSwg ZW5kaWFuLCBQT1NJVElWRSwgMSwgZW5kaWFuLCAwIFwKKysgICAgICAgIH07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICBzdHJ1Y3QgcmVzdWx0ZGVzYyByZXN1bHQgPSBwcm92bnVtX2NvcHkoZGVzdG5kLCBz cmNuZCk7IFwKKysgICAgICAgIHBhcmFtLT5yZXR1cm5fc2l6ZSA9IHJlc3VsdC5zaXplOyAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0KKysKKytpbXBsZW1lbnRfcHJv dm51bShzaXplX3QsIE9TU0xfUEFSQU1fVU5TSUdORURfSU5URUdFUikKKysKKysjZW5kaWYgLyog V0lUSF9PUEVOU1NMMyAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvbnVtLmggb3Bl bnNzaC0xMC4zcDEvbnVtLmgKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL251bS5oCTE5NzAtMDEt MDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzaC0xMC4zcDEvbnVtLmgJMjAy Ni0wNy0wMiAwMDoyNzoyOS43MjcwMjcwMzMgKzAyMDAKK0BAIC0wLDAgKzEsMTUgQEAKKysvKiBD QzAgbGljZW5zZSBhcHBsaWVkLCBzZWUgTElDRU5DRS5tZCAqLworKworKyNpbmNsdWRlICJpbmNs dWRlcy5oIgorKyNpZmRlZiBXSVRIX09QRU5TU0wzCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvY29y ZS5oPgorKworKy8qIENvbnZlcnQgYmV0d2VlbiBPU1NMX1BBUkFNIGFuZCBzaXplX3QgKi8KKytp bnQgcHJvdm51bV9nZXRfc2l6ZV90KHNpemVfdCAqZGVzdCwgY29uc3QgT1NTTF9QQVJBTSAqcGFy YW0pOworK2ludCBwcm92bnVtX3NldF9zaXplX3QoT1NTTF9QQVJBTSAqcGFyYW0sIHNpemVfdCBz cmMpOworKworKyNkZWZpbmUgUFJPVk5VTV9FX1dST05HX1RZUEUgICAgLTEKKysjZGVmaW5lIFBS T1ZOVU1fRV9UT09CSUcgICAgICAgIC0yCisrI2RlZmluZSBQUk9WTlVNX0VfVU5TVVBQT1JURUQg ICAtMworKyNlbmRpZiAvKiBXSVRIX09QRU5TU0wzICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4z cDEub3JpZy9vc3NsMy1wcm92aWRlci1lcnIuYyBvcGVuc3NoLTEwLjNwMS9vc3NsMy1wcm92aWRl ci1lcnIuYworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvb3NzbDMtcHJvdmlkZXItZXJyLmMJMTk3 MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9vc3Ns My1wcm92aWRlci1lcnIuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyNzA4NDE0OSArMDIwMAorQEAg LTAsMCArMSwxMDggQEAKKysvKiBDQzAgbGljZW5zZSBhcHBsaWVkLCBzZWUgTElDRU5DRS5tZCAq LworKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1 ZGUgIm9zc2wzLXByb3ZpZGVyLWVyci5oIgorKworKyNpZmRlZiBXSVRIX09QRU5TU0wzCisrCisr c3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0IHsKKysgIGNvbnN0IE9TU0xfQ09SRV9IQU5ETEUg KmNvcmU7CisrICBPU1NMX0ZVTkNfY29yZV9uZXdfZXJyb3JfZm4gKmNvcmVfbmV3X2Vycm9yOwor KyAgT1NTTF9GVU5DX2NvcmVfc2V0X2Vycm9yX2RlYnVnX2ZuICpjb3JlX3NldF9lcnJvcl9kZWJ1 ZzsKKysgIE9TU0xfRlVOQ19jb3JlX3ZzZXRfZXJyb3JfZm4gKmNvcmVfdnNldF9lcnJvcjsKKyt9 OworKworK3N0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCisrcHJvdmVycl9uZXdfaGFuZGxl KGNvbnN0IE9TU0xfQ09SRV9IQU5ETEUgKmNvcmUsIGNvbnN0IE9TU0xfRElTUEFUQ0ggKmRpc3Bh dGNoKQorK3sKKysgIC8qCisrICAgKiBsaWJjcnlwdG8gZ2l2ZXMgcHJvdmlkZXJzIHRoZSB0b29s cyB0byBjcmVhdGUgZXJyb3Igcm91dGluZXMgc2ltaWxhcgorKyAgICogdG8gdGhlIG9uZXMgZGVm aW5lZCBpbiA8b3BlbnNzbC9lcnIuaD4KKysgICAqLworKyAgT1NTTF9GVU5DX2NvcmVfbmV3X2Vy cm9yX2ZuICpjX25ld19lcnJvciA9IE5VTEw7CisrICBPU1NMX0ZVTkNfY29yZV9zZXRfZXJyb3Jf ZGVidWdfZm4gKmNfc2V0X2Vycm9yX2RlYnVnID0gTlVMTDsKKysgIE9TU0xfRlVOQ19jb3JlX3Zz ZXRfZXJyb3JfZm4gKmNfdnNldF9lcnJvciA9IE5VTEw7CisrICBzdHJ1Y3QgcHJvdmVycl9mdW5j dGlvbnNfc3QgKmhhbmRsZSA9IE5VTEw7CisrCisrICBhc3NlcnQoY29yZSAhPSBOVUxMKTsKKysg IGFzc2VydChkaXNwYXRjaCAhPSBOVUxMKTsKKysKKysjaWZuZGVmIERFQlVHCisrICBpZiAoY29y ZSA9PSBOVUxMIHx8IGRpc3BhdGNoID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKyNlbmRp ZgorKworKyAgZm9yICg7IGRpc3BhdGNoLT5mdW5jdGlvbl9pZCAhPSAwOyBkaXNwYXRjaCsrKQor KyAgICBzd2l0Y2ggKGRpc3BhdGNoLT5mdW5jdGlvbl9pZCkgeworKyAgICBjYXNlIE9TU0xfRlVO Q19DT1JFX05FV19FUlJPUjoKKysgICAgICBjX25ld19lcnJvciA9IE9TU0xfRlVOQ19jb3JlX25l d19lcnJvcihkaXNwYXRjaCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgT1NTTF9GVU5DX0NP UkVfU0VUX0VSUk9SX0RFQlVHOgorKyAgICAgIGNfc2V0X2Vycm9yX2RlYnVnID0gT1NTTF9GVU5D X2NvcmVfc2V0X2Vycm9yX2RlYnVnKGRpc3BhdGNoKTsKKysgICAgICBicmVhazsKKysgICAgY2Fz ZSBPU1NMX0ZVTkNfQ09SRV9WU0VUX0VSUk9SOgorKyAgICAgIGNfdnNldF9lcnJvciA9IE9TU0xf RlVOQ19jb3JlX3ZzZXRfZXJyb3IoZGlzcGF0Y2gpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr CisrICBhc3NlcnQoY19uZXdfZXJyb3IgIT0gTlVMTCk7CisrICBhc3NlcnQoY19zZXRfZXJyb3Jf ZGVidWcgIT0gTlVMTCk7CisrICBhc3NlcnQoY192c2V0X2Vycm9yICE9IE5VTEwpOworKworKyNp ZmRlZiBOREVCVUcKKysgIGlmIChjX25ld19lcnJvciA9PSBOVUxMIHx8IGNfc2V0X2Vycm9yX2Rl YnVnID09IE5VTEwgfHwgY192c2V0X2Vycm9yID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOwor KyNlbmRpZgorKworKyAgaWYgKChoYW5kbGUgPSBtYWxsb2Moc2l6ZW9mKCpoYW5kbGUpKSkgIT0g TlVMTCkgeworKyAgICBoYW5kbGUtPmNvcmUgPSBjb3JlOworKyAgICBoYW5kbGUtPmNvcmVfbmV3 X2Vycm9yID0gY19uZXdfZXJyb3I7CisrICAgIGhhbmRsZS0+Y29yZV9zZXRfZXJyb3JfZGVidWcg PSBjX3NldF9lcnJvcl9kZWJ1ZzsKKysgICAgaGFuZGxlLT5jb3JlX3ZzZXRfZXJyb3IgPSBjX3Zz ZXRfZXJyb3I7CisrICB9CisrICByZXR1cm4gaGFuZGxlOworK30KKysKKytzdHJ1Y3QgcHJvdmVy cl9mdW5jdGlvbnNfc3QgKgorK3Byb3ZlcnJfZHVwX2hhbmRsZShzdHJ1Y3QgcHJvdmVycl9mdW5j dGlvbnNfc3QgKnNyYykKKyt7CisrICBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKmRzdCA9 IE5VTEw7CisrCisrICBpZiAoc3JjICE9IE5VTEwKKysgICAgICAmJiAoZHN0ID0gbWFsbG9jKHNp emVvZigqZHN0KSkpICE9IE5VTEwpIHsKKysgICAgZHN0LT5jb3JlID0gc3JjLT5jb3JlOworKyAg ICBkc3QtPmNvcmVfbmV3X2Vycm9yID0gc3JjLT5jb3JlX25ld19lcnJvcjsKKysgICAgZHN0LT5j b3JlX3NldF9lcnJvcl9kZWJ1ZyA9IHNyYy0+Y29yZV9zZXRfZXJyb3JfZGVidWc7CisrICAgIGRz dC0+Y29yZV92c2V0X2Vycm9yID0gc3JjLT5jb3JlX3ZzZXRfZXJyb3I7CisrICB9CisrICByZXR1 cm4gZHN0OworK30KKysKKyt2b2lkIHByb3ZlcnJfZnJlZV9oYW5kbGUoc3RydWN0IHByb3ZlcnJf ZnVuY3Rpb25zX3N0ICpoYW5kbGUpCisreworKyAgZnJlZShoYW5kbGUpOworK30KKysKKyt2b2lk IHByb3ZlcnJfbmV3X2Vycm9yKGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFu ZGxlKQorK3sKKysgIGhhbmRsZS0+Y29yZV9uZXdfZXJyb3IoaGFuZGxlLT5jb3JlKTsKKyt9Cisr Cisrdm9pZCBwcm92ZXJyX3NldF9lcnJvcl9kZWJ1Zyhjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5j dGlvbnNfc3QgKmhhbmRsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jKQorK3sKKysgIGhhbmRsZS0+Y29y ZV9zZXRfZXJyb3JfZGVidWcoaGFuZGxlLT5jb3JlLCBmaWxlLCBsaW5lLCBmdW5jKTsKKyt9Cisr Cisrdm9pZCBwcm92ZXJyX3NldF9lcnJvcihjb25zdCBzdHJ1Y3QgcHJvdmVycl9mdW5jdGlvbnNf c3QgKmhhbmRsZSwKKysgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlYXNvbiwgY29u c3QgY2hhciAqZm10LCAuLi4pCisreworKyAgdmFfbGlzdCBhcDsKKysKKysgIHZhX3N0YXJ0KGFw LCBmbXQpOworKyAgaGFuZGxlLT5jb3JlX3ZzZXRfZXJyb3IoaGFuZGxlLT5jb3JlLCByZWFzb24s IGZtdCwgYXApOworKyAgdmFfZW5kKGFwKTsKKyt9CisrCisrI2VuZGlmIC8qIFdJVEhfT1BFTlNT TDMgKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL29zc2wzLXByb3ZpZGVyLWVyci5o IG9wZW5zc2gtMTAuM3AxL29zc2wzLXByb3ZpZGVyLWVyci5oCistLS0gb3BlbnNzaC0xMC4zcDEu b3JpZy9vc3NsMy1wcm92aWRlci1lcnIuaAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2gtMTAuM3AxL29zc2wzLXByb3ZpZGVyLWVyci5oCTIwMjYtMDctMDIg MDA6Mjc6MjkuNzI3MTM2NTUwICswMjAwCitAQCAtMCwwICsxLDczIEBACisrLyogQ0MwIGxpY2Vu c2UgYXBwbGllZCwgc2VlIExJQ0VOQ0UubWQgKi8KKysKKysjaW5jbHVkZSAiaW5jbHVkZXMuaCIK KysjaWZkZWYgV0lUSF9PUEVOU1NMMworKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9jb3JlLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY29yZV9kaXNwYXRjaC5oPgorKwor Ky8qCisrICogVGhlIGlkZWEgd2l0aCB0aGlzIGxpYnJhcnkgaXMgdG8gcmVwbGFjZSBPcGVuU1NM J3MgRVJSX3JhaXNlKCkgYW5kCisrICogRVJSX3JhaXNlX2RhdGEoKSB3aXRoIHZhcmlhbnRzIHRo YXQgYXJlIG1vcmUgc3VpdGFibGUgZm9yIHByb3ZpZGVycyB0aGF0CisrICogaGF2ZSB0aGVpciBv d24gZXJyb3IgcmVhc29uIHRhYmxlLgorKyAqCisrICogVGhpcyBhc3N1bWVzIHZhcmlhZGljIGZ1 bmN0aW9uLWxpa2UgbWFjcm9zLCBpLmUuIEM5OSBvciBuZXdlci4KKysgKgorKyAqIEEgbWluaW1h bCBhbW91bnQgb2YgcHJlcGFyYXRpb24gaXMgbmVlZGVkIG9uIHByb3ZpZGVyIGluaXRpYWxpemF0 aW9uIGFuZAorKyAqIHRha2Vkb3duOgorKyAqCisrICogMS4gIFRoZSBwcm92aWRlcidzIG91dGdv aW5nIE9TU0xfRElTUEFUQ0ggdGFibGUgbXVzdCBpbmNsdWRlIGFuIGVudHJ5CisrICogICAgIGdv dCBPU1NMX0ZVTkNfUFJPVklERVJfR0VUX1JFQVNPTl9TVFJJTkdTLCB3aXRoIGEgZnVuY3Rpb24g dGhhdCByZXR1cm5zCisrICogICAgIHRoZSBwcm92aWRlcidzIHRhYmxlIG9mIHJlYXNvbnMuCisr ICogICAgIFRoYXQgdGFibGUgb2YgcmVhc29ucyBpcyBhIHNpbXBsZSBPU1NMX0lURU0gYXJyYXks IHdoZXJlIGVhY2ggZWxlbWVudAorKyAqICAgICBjb250YWlucyBhIG51bWVyaWMgcmVhc29uIGlk ZW50aXR5IGZvciB0aGUgcmVhc29uLCBhbmQgdGhlIGRlc2NyaXB0aW9uCisrICogICAgIHRleHQg c3RyaW5nIGZvciB0aGF0IHJlYXNvbi4KKysgKiAgICAgRWFjaCBudW1lcmljIHJlYXNvbiBpZGVu dGl0eSBNVVNUIGJlIHVuaXF1ZSB3aXRoaW4gdGhpcyBhcnJheS4KKysgKgorKyAqIDIuICBPbiBw cm92aWRlciBpbml0aWFsaXphdGlvbiwgYW4gZXJyb3IgaGFuZGxlIG11c3QgYmUgY3JlYXRlZCB1 c2luZworKyAqICAgICBwcm92ZXJyX25ld19oYW5kbGUoKS4gIFRoZSByZXR1cm5lZCBwb2ludGVy IGlzIHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudAorKyAqICAgICB0byBFUlJfcmFpc2UoKSBhbmQg RVJSX3JhaXNlX2RhdGEoKS4KKysgKgorKyAqIDMuICBPbiBwcm92aWRlciB0YWtlZG93biwgdGhl IGVycm9yIGhhbmRsZSBtdXN0IGJlIGZyZWVkLCB1c2luZworKyAqICAgICBwcm92ZXJyX2ZyZWVf aGFuZGxlKCkuCisrICoKKysgKiBXaXRoIHRoaXMgcHJlcGFyYXRpb24sIHRoZSBwcm92aWRlciBj b2RlIGNhbiB1c2UgRVJSX3JhaXNlKCkgYW5kCisrICogRVJSX3JhaXNlX2RhdGEoKSAiYXMgdXN1 YWwiLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMKKysgKiB0 aGUgZXJyb3IgaGFuZGxlIGluc3RlYWQgb2Ygb25lIG9mIHRoZSBPcGVuU1NMIEVSUl9MSUJfIG1h Y3Jvcy4KKysgKi8KKysKKysvKgorKyAqIEluIGNhc2UgPG9wZW5zc2wvZXJyLmg+IHdhcyBpbmNs dWRlZCwgd2UgdGhyb3cgYXdheSBpdHMgZXJyb3IgcmVjb3JkaW5nCisrICogbWFjcm9zLgorKyAq IE5vdGUgdGhhdCBFUlJfcHV0X2Vycm9yKCkgaXMgTk9UIHJlY3JlYXRlZC4gIEl0J3MgZGVwcmVj YXRlZCBhbmQgc2hvdWxkIG5vdAorKyAqIGJlIHVzZWQgYW55IG1vcmUuCisrICovCisrI3VuZGVm IEVSUl9wdXRfZXJyb3IKKysjdW5kZWYgRVJSX3JhaXNlCisrI3VuZGVmIEVSUl9yYWlzZV9kYXRh CisrCisrI2RlZmluZSBFUlJfcmFpc2UoaGFuZGxlLCByZWFzb24pIEVSUl9yYWlzZV9kYXRhKCho YW5kbGUpLChyZWFzb24pLE5VTEwpCisrCisrI2RlZmluZSBFUlJfcmFpc2VfZGF0YShoYW5kbGUs IHJlYXNvbiwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChwcm92 ZXJyX25ld19lcnJvcihoYW5kbGUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgIHByb3ZlcnJfc2V0X2Vycm9yX2RlYnVnKGhhbmRsZSwgT1BFTlNT TF9GSUxFLE9QRU5TU0xfTElORSxPUEVOU1NMX0ZVTkMpLCBcCisrICAgcHJvdmVycl9zZXRfZXJy b3IoaGFuZGxlLCByZWFzb24sIF9fVkFfQVJHU19fKSkKKysKKysvKgorKyAqIFRoZSBzdHJ1Y3R1 cmUgd2hlcmUgdGhlIGxpYmNyeXB0byBjb3JlIGhhbmRsZSBhbmQgY29yZSBmdW5jdGlvbnMgYXJl CisrICogY2FwdHVyZWQuCisrICovCisrc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0OworKwor K3N0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqCisrcHJvdmVycl9uZXdfaGFuZGxlKGNvbnN0 IE9TU0xfQ09SRV9IQU5ETEUgKmNvcmUsIGNvbnN0IE9TU0xfRElTUEFUQ0ggKmluKTsKKytzdHJ1 Y3QgcHJvdmVycl9mdW5jdGlvbnNfc3QgKgorK3Byb3ZlcnJfZHVwX2hhbmRsZShzdHJ1Y3QgcHJv dmVycl9mdW5jdGlvbnNfc3QgKnNyYyk7Cisrdm9pZCBwcm92ZXJyX2ZyZWVfaGFuZGxlKHN0cnVj dCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlKTsKKysKKyt2b2lkIHByb3ZlcnJfbmV3X2Vy cm9yKGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAqaGFuZGxlKTsKKyt2b2lkIHBy b3ZlcnJfc2V0X2Vycm9yX2RlYnVnKGNvbnN0IHN0cnVjdCBwcm92ZXJyX2Z1bmN0aW9uc19zdCAq aGFuZGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwg aW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMpOworK3ZvaWQgcHJvdmVycl9zZXRfZXJyb3IoY29u c3Qgc3RydWN0IHByb3ZlcnJfZnVuY3Rpb25zX3N0ICpoYW5kbGUsCisrICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzJfdCByZWFzb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKysjZW5kaWYg LyogV0lUSF9PUEVOU1NMMyAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvcGFja2V0 LmMgb3BlbnNzaC0xMC4zcDEvcGFja2V0LmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3BhY2tl dC5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCisrKysgb3BlbnNzaC0xMC4z cDEvcGFja2V0LmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MjcyODI5OTQgKzAyMDAKK0BAIC04Niw2 ICs4Niw3IEBACisgI2luY2x1ZGUgIm1hYy5oIgorICNpbmNsdWRlICJsb2cuaCIKKyAjaW5jbHVk ZSAiY2Fub2hvc3QuaCIKKysjaW5jbHVkZSAiY2hhbm5lbHMuaCIKKyAjaW5jbHVkZSAibWlzYy5o IgorICNpbmNsdWRlICJwYWNrZXQuaCIKKyAjaW5jbHVkZSAic3NoZXJyLmgiCitAQCAtOTcsNyAr OTgsMjAgQEAKKyAjZGVmaW5lIERCRyh4KQorICNlbmRpZgorIAorLSNkZWZpbmUgUEFDS0VUX01B WF9TSVpFICgyNTYgKiAxMDI0KQorKy8qIE9wZW5TU0ggdXNpbmdzIDI1NktCIHBhY2tldCBzaXpl IG1heCBidXQgdGhhdCBjb25zdW1lcyBhCisrICogbG90IG9mIG1lbW9yeSB3aXRoIHRoZSBidWZm ZXJzIHdlIGFyZSB1c2luZy4gSG93ZXZlciwgd2UgbmVlZAorKyAqIGEgbGFyZ2UgcGFja2V0IHNp emUgaWYgdGhlIGJhbm5lciB0aGF0J3MgYmVpbmcgc2VudCBpcyBsYXJnZS4KKysgKiBTbyB3ZSBu ZWVkIGEgMjU2S0IgcGFja2V0IHByZSBhdXRoZW50aWNhdGlvbiBhbmQgYSBzbWFsbGVyIG9uZQor KyAqIGluIHRoaXMgY2FzZSBTU0hfSU9CVUZTWiArIDFLQiwgYWZ0ZXJ3YXJkcy4gU28gd2UgY2hh bmdlCisrICogUEFDS0VUX01BWF9TSVpFIGZyb20gYSAjZGVmaW5lIHRvIGEgZ2xvYmFsLiBUaGVu LCBpbiB0aGUgZnVuY3Rpb24KKysgKiBzc2hfcGFja2V0X3NldF9hdXRoZW50Y2F0ZWQgd2UgcmVk dWNlIHRoZSBzaXplIHRvIHNvbWV0aGluZworKyAqIG1vcmUgbWVtb3J5IGVmZmljaWVudC4gLWNq ciAwNC8wNy8yMworKyAqLworK3VfaW50IHBhY2tldF9tYXhfc2l6ZSA9IDI1NiAqIDEwMjQ7Cisr CisrLyogZ2xvYmFsIHRvIHN1cHBvcnQgZm9yY2VkIHJla2V5aW5nICovCisraW50IHJla2V5X3Jl cXVlc3RlZCA9IDA7CisrCisgCisgc3RydWN0IHBhY2tldF9zdGF0ZSB7CisgCXVpbnQzMl90IHNl cW5yOworQEAgLTI0NCwxMiArMjU4LDIzIEBACisgCSAgICAoc3RhdGUtPm91dGdvaW5nX3BhY2tl dCA9IHNzaGJ1Zl9uZXcoKSkgPT0gTlVMTCB8fAorIAkgICAgKHN0YXRlLT5pbmNvbWluZ19wYWNr ZXQgPSBzc2hidWZfbmV3KCkpID09IE5VTEwpCisgCQlnb3RvIGZhaWw7CisrCS8qIHRoZXNlIGJ1 ZmZlcnMgYXJlIGltcG9ydGFudCBpbiB0ZXJtcyBvZiB0cmFja2luZyBidWZmZXIgdXNhZ2UKKysJ ICogc28gd2UgZXhwbGljaXRseSBsYWJlbCBhbmQgdHlwZSB0aGVtIHdpdGggZGVzY3JpcHRpdmUg bmFtZXMgKi8KKysJc3NoYnVmX3JlbGFiZWwoc3RhdGUtPmlucHV0LCAiaW5wdXQiKTsKKysJc3No YnVmX3R5cGUoc3RhdGUtPmlucHV0LCBCVUZfUEFDS0VUX0lOUFVUKTsKKysJc3NoYnVmX3JlbGFi ZWwoc3RhdGUtPmluY29taW5nX3BhY2tldCwgImlucGFja2V0Iik7CisrCXNzaGJ1Zl90eXBlKHN0 YXRlLT5pbmNvbWluZ19wYWNrZXQsIEJVRl9QQUNLRVRfSU5DT01JTkcpOworKwlzc2hidWZfcmVs YWJlbChzdGF0ZS0+b3V0cHV0LCAib3V0cHV0Iik7CisrCXNzaGJ1Zl90eXBlKHN0YXRlLT5vdXRw dXQsIEJVRl9QQUNLRVRfT1VUUFVUKTsKKysJc3NoYnVmX3JlbGFiZWwoc3RhdGUtPm91dGdvaW5n X3BhY2tldCwgIm91dHBhY2tldCIpOworKwlzc2hidWZfdHlwZShzdGF0ZS0+b3V0Z29pbmdfcGFj a2V0LCBCVUZfUEFDS0VUX09VVEdPSU5HKTsKKysKKyAJVEFJTFFfSU5JVCgmc3RhdGUtPm91dGdv aW5nKTsKKyAJVEFJTFFfSU5JVCgmc3NoLT5wcml2YXRlX2tleXMpOworIAlUQUlMUV9JTklUKCZz c2gtPnB1YmxpY19rZXlzKTsKKyAJc3RhdGUtPmNvbm5lY3Rpb25faW4gPSAtMTsKKyAJc3RhdGUt PmNvbm5lY3Rpb25fb3V0ID0gLTE7CistCXN0YXRlLT5tYXhfcGFja2V0X3NpemUgPSAzMjc2ODsK KysJc3RhdGUtPm1heF9wYWNrZXRfc2l6ZSA9IENIQU5fU0VTX1BBQ0tFVF9ERUZBVUxUOworIAlz dGF0ZS0+cGFja2V0X3RpbWVvdXRfbXMgPSAtMTsKKyAJc3RhdGUtPmludGVyYWN0aXZlX21vZGUg PSAxOworIAlzdGF0ZS0+cW9zX2ludGVyYWN0aXZlID0gc3RhdGUtPnFvc19vdGhlciA9IC0xOwor QEAgLTI5OSw3ICszMjQsNyBAQAorIHNzaF9wYWNrZXRfc2V0X2Nvbm5lY3Rpb24oc3RydWN0IHNz aCAqc3NoLCBpbnQgZmRfaW4sIGludCBmZF9vdXQpCisgeworIAlzdHJ1Y3Qgc2Vzc2lvbl9zdGF0 ZSAqc3RhdGU7CistCWNvbnN0IHN0cnVjdCBzc2hjaXBoZXIgKm5vbmUgPSBjaXBoZXJfYnlfbmFt ZSgibm9uZSIpOworKwlzdHJ1Y3Qgc3NoY2lwaGVyICpub25lID0gY2lwaGVyX2J5X25hbWUoIm5v bmUiKTsKKyAJaW50IHI7CisgCisgCWlmIChub25lID09IE5VTEwpIHsKK0BAIC0zMTYsOSArMzQx LDExIEBACisgCXN0YXRlLT5jb25uZWN0aW9uX2luID0gZmRfaW47CisgCXN0YXRlLT5jb25uZWN0 aW9uX291dCA9IGZkX291dDsKKyAJaWYgKChyID0gY2lwaGVyX2luaXQoJnN0YXRlLT5zZW5kX2Nv bnRleHQsIG5vbmUsCistCSAgICAoY29uc3QgdV9jaGFyICopIiIsIDAsIE5VTEwsIDAsIENJUEhF Ul9FTkNSWVBUKSkgIT0gMCB8fAorKwkgICAgKGNvbnN0IHVfY2hhciAqKSIiLCAwLCBOVUxMLCAw LCAwLCBDSVBIRVJfRU5DUllQVCwKKysJICAgIHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbikp ICE9IDAgfHwKKyAJICAgIChyID0gY2lwaGVyX2luaXQoJnN0YXRlLT5yZWNlaXZlX2NvbnRleHQs IG5vbmUsCistCSAgICAoY29uc3QgdV9jaGFyICopIiIsIDAsIE5VTEwsIDAsIENJUEhFUl9ERUNS WVBUKSkgIT0gMCkgeworKwkgICAgKGNvbnN0IHVfY2hhciAqKSIiLCAwLCBOVUxMLCAwLCAwLCBD SVBIRVJfREVDUllQVCwKKysJICAgIHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlvbikpICE9IDAp IHsKKyAJCWVycm9yX2ZyKHIsICJjaXBoZXJfaW5pdCBmYWlsZWQiKTsKKyAJCWZyZWUoc3NoKTsg LyogWFhYIG5lZWQgc3NoX2ZyZWVfc2Vzc2lvbl9zdGF0ZT8gKi8KKyAJCXJldHVybiBOVUxMOwor QEAgLTM4OSw3ICs0MTYsNyBAQAorIAorIAlpZiAoc3RhdGUtPnBhY2tldF9kaXNjYXJkX21hYykg eworIAkJY2hhciBidWZbMTAyNF07CistCQlzaXplX3QgZGxlbiA9IFBBQ0tFVF9NQVhfU0laRTsK KysJCXNpemVfdCBkbGVuID0gcGFja2V0X21heF9zaXplOworIAorIAkJaWYgKGRsZW4gPiBzdGF0 ZS0+cGFja2V0X2Rpc2NhcmRfbWFjX2FscmVhZHkpCisgCQkJZGxlbiAtPSBzdGF0ZS0+cGFja2V0 X2Rpc2NhcmRfbWFjX2FscmVhZHk7CitAQCAtOTk1LDYgKzEwMjIsNyBAQAorIAljb25zdCBjaGFy ICp3bXNnOworIAlpbnQgciwgY3J5cHRfdHlwZTsKKyAJY29uc3QgY2hhciAqZGlyID0gbW9kZSA9 PSBNT0RFX09VVCA/ICJvdXQiIDogImluIjsKKysJY2hhciBibG9ja3Nfc1tGTVRfU0NBTEVEX1NU UlNJWkVdLCBieXRlc19zW0ZNVF9TQ0FMRURfU1RSU0laRV07CisgCisgCWRlYnVnMl9mKCJtb2Rl ICVkIiwgbW9kZSk7CisgCitAQCAtMTAzNSwxMiArMTA2MywzMiBAQAorIAkJaWYgKChyID0gbWFj X2luaXQobWFjKSkgIT0gMCkKKyAJCQlyZXR1cm4gcjsKKyAJfQorLQltYWMtPmVuYWJsZWQgPSAx OworKworKwkvKiBpZiB3ZSBhcmUgdXNpbmcgTk9ORSBNQUMgdGhlbiB3ZSBkb24ndCBuZWVkIHRv IGVuYWJsZSB0aGUKKysJICogbWFjIHJvdXRpbmVzLiBUaGlzIGRpc2FibGVzIHRoZW0gYW5kIHdl IGNhbiBjbGF3IGJhY2sgc29tZSBjeWNsZXMKKysJICogZnJvbSB0aGUgQ1BVIC1janIgMy8yMS8y MDIzICovCisrCWlmIChzc2gtPm5vbmVfbWFjICE9IDEpCisrCQltYWMtPmVuYWJsZWQgPSAxOwor KworIAlEQkcoZGVidWdfZigiY2lwaGVyX2luaXQ6ICVzIiwgZGlyKSk7CisgCWNpcGhlcl9mcmVl KCpjY3ApOworIAkqY2NwID0gTlVMTDsKKysjaWZkZWYgV0lUSF9PUEVOU1NMCisrCWlmIChzdHJj bXAoZW5jLT5uYW1lLCAiY2hhY2hhMjAtcG9seTEzMDUtbXRAaHBuc3NoLm9yZyIpID09IDApIHsK KysJCWlmIChzdGF0ZS0+YWZ0ZXJfYXV0aGVudGljYXRpb24pCisrCQkJZW5jLT5jaXBoZXIgPSBj aXBoZXJfYnlfbmFtZSgKKysJCQkgICAgImNoYWNoYTIwLXBvbHkxMzA1LW10QGhwbnNzaC5vcmci KTsKKysJCWVsc2UKKysJCQllbmMtPmNpcGhlciA9IGNpcGhlcl9ieV9uYW1lKAorKwkJCSAgICAi Y2hhY2hhMjAtcG9seTEzMDVAb3BlbnNzaC5jb20iKTsKKysJCWlmIChlbmMtPmNpcGhlciA9PSBO VUxMKQorKwkJCXJldHVybiByOworKwl9CisrI2VuZGlmCisgCWlmICgociA9IGNpcGhlcl9pbml0 KGNjcCwgZW5jLT5jaXBoZXIsIGVuYy0+a2V5LCBlbmMtPmtleV9sZW4sCistCSAgICBlbmMtPml2 LCBlbmMtPml2X2xlbiwgY3J5cHRfdHlwZSkpICE9IDApCisrCSAgICBlbmMtPml2LCBlbmMtPml2 X2xlbiwKKysJICAgIGNyeXB0X3R5cGUgPyBzdGF0ZS0+cF9zZW5kLnNlcW5yIDogc3RhdGUtPnBf cmVhZC5zZXFuciwKKysJICAgIGNyeXB0X3R5cGUsIHN0YXRlLT5hZnRlcl9hdXRoZW50aWNhdGlv bikpICE9IDApCisgCQlyZXR1cm4gcjsKKyAJaWYgKCFzdGF0ZS0+Y2lwaGVyX3dhcm5pbmdfZG9u ZSAmJgorIAkgICAgKHdtc2cgPSBjaXBoZXJfd2FybmluZ19tZXNzYWdlKCpjY3ApKSAhPSBOVUxM KSB7CitAQCAtMTA2NCwyNSArMTExMiw0NiBAQAorIAkJfQorIAkJY29tcC0+ZW5hYmxlZCA9IDE7 CisgCX0KKy0JLyoKKy0JICogVGhlIDJeKGJsb2Nrc2l6ZSoyKSBsaW1pdCBpcyB0b28gZXhwZW5z aXZlIGZvciAzREVTLAorLQkgKiBzbyBlbmZvcmNlIGEgMUdCIGxpbWl0IGZvciBzbWFsbCBibG9j a3NpemVzLgorLQkgKiBTZWUgUkZDNDM0NCBzZWN0aW9uIDMuMi4KKy0JICovCistCWlmIChlbmMt PmJsb2NrX3NpemUgPj0gMTYpCistCQkqaGFyZF9tYXhfYmxvY2tzID0gKHVpbnQ2NF90KTEgPDwg KGVuYy0+YmxvY2tfc2l6ZSoyKTsKKy0JZWxzZQorLQkJKmhhcmRfbWF4X2Jsb2NrcyA9ICgodWlu dDY0X3QpMSA8PCAzMCkgLyBlbmMtPmJsb2NrX3NpemU7CisrCS8qIGdldCB0aGUgbWF4aW11bSBu dW1iZXIgb2YgYmxvY2tzIHRoZSBjaXBoZXIgY2FuCisrCSAqIGhhbmRsZSBzYWZlbHkgKi8KKysJ KmhhcmRfbWF4X2Jsb2NrcyA9IGNpcGhlcl9yZWtleV9ibG9ja3MoZW5jLT5jaXBoZXIpOworIAkq bWF4X2Jsb2NrcyA9ICpoYXJkX21heF9ibG9ja3M7CisrCisrCS8qIGlmIHdlIGhhdmUgYSBjdXN0 b20gb1Jla2V5TGltaXQgdXNlIHRoYXQuICovCisgCWlmIChzdGF0ZS0+cmVrZXlfbGltaXQpIHsK KyAJCSptYXhfYmxvY2tzID0gTUlOSU1VTSgqbWF4X2Jsb2NrcywKKyAJCSAgICBzdGF0ZS0+cmVr ZXlfbGltaXQgLyBlbmMtPmJsb2NrX3NpemUpOworIAl9CistCWRlYnVnKCJyZWtleSAlcyBhZnRl ciAlbGx1IGJsb2NrcyIsIGRpciwKKy0JICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKm1heF9ibG9j a3MpOworKworKwkvKiB0aGVzZSBsaW5lcyBzdXBwb3J0IHRoZSBkZWJ1ZyAqLworKwlzdHJsY3B5 KGJsb2Nrc19zLCAiPyIsIHNpemVvZihibG9ja3NfcykpOworKwlzdHJsY3B5KGJ5dGVzX3MsICI/ Iiwgc2l6ZW9mKGJ5dGVzX3MpKTsKKysJaWYgKCptYXhfYmxvY2tzICogZW5jLT5ibG9ja19zaXpl IDwgTExPTkdfTUFYKSB7CisrCQlmbXRfc2NhbGVkKChsb25nIGxvbmcpKm1heF9ibG9ja3MsIGJs b2Nrc19zKTsKKysJCWZtdF9zY2FsZWQoKGxvbmcgbG9uZykqbWF4X2Jsb2NrcyAqIGVuYy0+Ymxv Y2tfc2l6ZSwgYnl0ZXNfcyk7CisrCX0KKysJZGVidWcoInJla2V5ICVzIGFmdGVyICVzIGJsb2Nr cyAvICVzQiBkYXRhIiwgZGlyLCBibG9ja3NfcywgYnl0ZXNfcyk7CisrCisgCXJldHVybiAwOwor IH0KKyAKKysvKiB0aGlzIHN1cHBvcnRzIHRoZSBmb3JjZWQgcmVrZXlpbmcgcmVxdWlyZWQgZm9y IHRoZSBOT05FIGNpcGhlciAqLworK3ZvaWQKKytwYWNrZXRfcmVxdWVzdF9yZWtleWluZyh2b2lk KQorK3sKKysJcmVrZXlfcmVxdWVzdGVkID0gMTsKKyt9CisrCisrLyogdXNlZCB0byBkZXRlcm1p bmUgaWYgcHJlIG9yIHBvc3QgYXV0aCB3aGVuIHJla2V5aW5nIGZvciBhZXMtY3RyCisrICogYW5k IG5vbmUgY2lwaGVyIHN3aXRjaCAqLworK2ludAorK3BhY2tldF9hdXRoZW50aWNhdGlvbl9zdGF0 ZShjb25zdCBzdHJ1Y3Qgc3NoICpzc2gpCisreworKwlzdHJ1Y3Qgc2Vzc2lvbl9zdGF0ZSAqc3Rh dGUgPSBzc2gtPnN0YXRlOworKworKwlyZXR1cm4gc3RhdGUtPmFmdGVyX2F1dGhlbnRpY2F0aW9u OworK30KKysKKyAjZGVmaW5lIE1BWF9QQUNLRVRTCSgxVTw8MzEpCisgLyoKKyAgKiBDaGVja3Mg d2hldGhlciB0aGUgcGFja2V0LSBvciBibG9jay0gYmFzZWQgcmVrZXlpbmcgbGltaXRzIGhhdmUg YmVlbgorQEAgLTExNDAsNiArMTIwOSwxNCBAQAorIAlpZiAoc3RhdGUtPnBfc2VuZC5wYWNrZXRz ID09IDAgJiYgc3RhdGUtPnBfcmVhZC5wYWNrZXRzID09IDApCisgCQlyZXR1cm4gMDsKKyAKKysg ICAgICAgIC8qIHVzZWQgdG8gZm9yY2UgcmVrZXlpbmcgd2hlbiBjYWxsZWQgZm9yIGJ5IHRoZSBu b25lCisrICAgICAgICAgKiBjaXBoZXIgc3dpdGNoIGFuZCBhZXMtbXQtY3RyIG1ldGhvZHMgLWNq ciAqLworKyAgICAgICAgaWYgKHJla2V5X3JlcXVlc3RlZCA9PSAxKSB7CisrCQlkZWJ1Z19mKCJH b3QgdGhlIHJla2V5IHJlcXVlc3QiKTsKKysJCXJla2V5X3JlcXVlc3RlZCA9IDA7CisrICAgICAg ICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKworIAkvKiBUaW1lLWJhc2VkIHJla2V5 aW5nICovCisgCWlmIChzdGF0ZS0+cmVrZXlfaW50ZXJ2YWwgIT0gMCAmJgorIAkgICAgKGludDY0 X3Qpc3RhdGUtPnJla2V5X3RpbWUgKyBzdGF0ZS0+cmVrZXlfaW50ZXJ2YWwgPD0gbW9ub3RpbWUo KSkKK0BAIC0xNTA2LDcgKzE1ODMsNyBAQAorIAlzdHJ1Y3Qgc2Vzc2lvbl9zdGF0ZSAqc3RhdGUg PSBzc2gtPnN0YXRlOworIAlpbnQgbGVuLCByLCBtc19yZW1haW4gPSAwOworIAlzdHJ1Y3QgcG9s bGZkIHBmZDsKKy0JY2hhciBidWZbODE5Ml07CisrCWNoYXIgYnVmW1NTSF9JT0JVRlNaXTsKKyAJ c3RydWN0IHRpbWV2YWwgc3RhcnQ7CisgCXN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlYywgKnRpbWVz cGVjcCA9IE5VTEw7CisgCitAQCAtMTYxMCw3ICsxNjg3LDcgQEAKKyAJCQlyZXR1cm4gMDsgLyog cGFja2V0IGlzIGluY29tcGxldGUgKi8KKyAJCXN0YXRlLT5wYWNrbGVuID0gUEVFS19VMzIoY3Ap OworIAkJaWYgKHN0YXRlLT5wYWNrbGVuIDwgNCArIDEgfHwKKy0JCSAgICBzdGF0ZS0+cGFja2xl biA+IFBBQ0tFVF9NQVhfU0laRSkKKysJCSAgICBzdGF0ZS0+cGFja2xlbiA+IHBhY2tldF9tYXhf c2l6ZSkKKyAJCQlyZXR1cm4gU1NIX0VSUl9NRVNTQUdFX0lOQ09NUExFVEU7CisgCX0KKyAJbmVl ZCA9IHN0YXRlLT5wYWNrbGVuICsgNDsKK0BAIC0xNjY5LDcgKzE3NDYsNyBAQAorIAkJICAgIHNz aGJ1Zl9wdHIoc3RhdGUtPmlucHV0KSwgc3NoYnVmX2xlbihzdGF0ZS0+aW5wdXQpKSAhPSAwKQor IAkJCXJldHVybiAwOworIAkJaWYgKHN0YXRlLT5wYWNrbGVuIDwgMSArIDQgfHwKKy0JCSAgICBz dGF0ZS0+cGFja2xlbiA+IFBBQ0tFVF9NQVhfU0laRSkgeworKwkJICAgIHN0YXRlLT5wYWNrbGVu ID4gcGFja2V0X21heF9zaXplKSB7CisgI2lmZGVmIFBBQ0tFVF9ERUJVRworIAkJCXNzaGJ1Zl9k dW1wKHN0YXRlLT5pbnB1dCwgc3RkZXJyKTsKKyAjZW5kaWYKK0BAIC0xNjk2LDcgKzE3NzMsNyBA QAorIAkJCWdvdG8gb3V0OworIAkJc3RhdGUtPnBhY2tsZW4gPSBQRUVLX1UzMihzc2hidWZfcHRy KHN0YXRlLT5pbmNvbWluZ19wYWNrZXQpKTsKKyAJCWlmIChzdGF0ZS0+cGFja2xlbiA8IDEgKyA0 IHx8CistCQkgICAgc3RhdGUtPnBhY2tsZW4gPiBQQUNLRVRfTUFYX1NJWkUpIHsKKysJCSAgICBz dGF0ZS0+cGFja2xlbiA+IHBhY2tldF9tYXhfc2l6ZSkgeworICNpZmRlZiBQQUNLRVRfREVCVUcK KyAJCQlmcHJpbnRmKHN0ZGVyciwgImlucHV0OiBcbiIpOworIAkJCXNzaGJ1Zl9kdW1wKHN0YXRl LT5pbnB1dCwgc3RkZXJyKTsKK0BAIC0xNzA1LDcgKzE3ODIsNyBAQAorICNlbmRpZgorIAkJCWxv Z2l0KCJCYWQgcGFja2V0IGxlbmd0aCAldS4iLCBzdGF0ZS0+cGFja2xlbik7CisgCQkJcmV0dXJu IHNzaF9wYWNrZXRfc3RhcnRfZGlzY2FyZChzc2gsIGVuYywgbWFjLCAwLAorLQkJCSAgICBQQUNL RVRfTUFYX1NJWkUpOworKwkJCSAgICBwYWNrZXRfbWF4X3NpemUpOworIAkJfQorIAkJaWYgKChy ID0gc3NoYnVmX2NvbnN1bWUoc3RhdGUtPmlucHV0LCBibG9ja19zaXplKSkgIT0gMCkKKyAJCQln b3RvIG91dDsKK0BAIC0xNzI4LDcgKzE4MDUsNyBAQAorIAkJbG9naXQoInBhZGRpbmcgZXJyb3I6 IG5lZWQgJWQgYmxvY2sgJWQgbW9kICVkIiwKKyAJCSAgICBuZWVkLCBibG9ja19zaXplLCBuZWVk ICUgYmxvY2tfc2l6ZSk7CisgCQlyZXR1cm4gc3NoX3BhY2tldF9zdGFydF9kaXNjYXJkKHNzaCwg ZW5jLCBtYWMsIDAsCistCQkgICAgUEFDS0VUX01BWF9TSVpFIC0gYmxvY2tfc2l6ZSk7CisrCQkg ICAgcGFja2V0X21heF9zaXplIC0gYmxvY2tfc2l6ZSk7CisgCX0KKyAJLyoKKyAJICogY2hlY2sg aWYgdGhlIGVudGlyZSBwYWNrZXQgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kCitAQCAtMTc3MiwxMSAr MTg0OSwxMSBAQAorIAkJCWlmIChyICE9IFNTSF9FUlJfTUFDX0lOVkFMSUQpCisgCQkJCWdvdG8g b3V0OworIAkJCWxvZ2l0KCJDb3JydXB0ZWQgTUFDIG9uIGlucHV0LiIpOworLQkJCWlmIChuZWVk ICsgYmxvY2tfc2l6ZSA+IFBBQ0tFVF9NQVhfU0laRSkKKysJCQlpZiAobmVlZCArIGJsb2NrX3Np emUgPiBwYWNrZXRfbWF4X3NpemUpCisgCQkJCXJldHVybiBTU0hfRVJSX0lOVEVSTkFMX0VSUk9S OworIAkJCXJldHVybiBzc2hfcGFja2V0X3N0YXJ0X2Rpc2NhcmQoc3NoLCBlbmMsIG1hYywKKyAJ CQkgICAgc3NoYnVmX2xlbihzdGF0ZS0+aW5jb21pbmdfcGFja2V0KSwKKy0JCQkgICAgUEFDS0VU X01BWF9TSVpFIC0gbmVlZCAtIGJsb2NrX3NpemUpOworKwkJCSAgICBwYWNrZXRfbWF4X3NpemUg LSBuZWVkIC0gYmxvY2tfc2l6ZSk7CisgCQl9CisgCQkvKiBSZW1vdmUgTUFDIGZyb20gaW5wdXQg YnVmZmVyICovCisgCQlEQkcoZGVidWcoIk1BQyAjJWQgb2siLCBzdGF0ZS0+cF9yZWFkLnNlcW5y KSk7CitAQCAtMTk5OCw3ICsyMDc1LDcgQEAKKyAJaW50IHI7CisgCXNpemVfdCBybGVuOworIAor LQlpZiAoKHIgPSBzc2hidWZfcmVhZChmZCwgc3RhdGUtPmlucHV0LCBQQUNLRVRfTUFYX1NJWkUs ICZybGVuKSkgIT0gMCkKKysJaWYgKChyID0gc3NoYnVmX3JlYWQoZmQsIHN0YXRlLT5pbnB1dCwg cGFja2V0X21heF9zaXplLCAmcmxlbikpICE9IDApCisgCQlyZXR1cm4gcjsKKyAKKyAJaWYgKHN0 YXRlLT5wYWNrZXRfZGlzY2FyZCkgeworQEAgLTIwNzcsMTcgKzIxNTQsMjEgQEAKKyAJc3dpdGNo IChyKSB7CisgCWNhc2UgU1NIX0VSUl9DT05OX0NMT1NFRDoKKyAJCXNzaF9wYWNrZXRfY2xlYXJf a2V5cyhzc2gpOworKwkJc3NocGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOworIAkJbG9nZGllKCJD b25uZWN0aW9uIGNsb3NlZCBieSAlcyIsIHJlbW90ZV9pZCk7CisgCWNhc2UgU1NIX0VSUl9DT05O X1RJTUVPVVQ6CisgCQlzc2hfcGFja2V0X2NsZWFyX2tleXMoc3NoKTsKKysJCXNzaHBrdF9maW5h bF9sb2dfZW50cnkoc3NoKTsKKyAJCWxvZ2RpZSgiQ29ubmVjdGlvbiAlcyAlcyB0aW1lZCBvdXQi LAorIAkJICAgIHNzaC0+c3RhdGUtPnNlcnZlcl9zaWRlID8gImZyb20iIDogInRvIiwgcmVtb3Rl X2lkKTsKKyAJY2FzZSBTU0hfRVJSX0RJU0NPTk5FQ1RFRDoKKyAJCXNzaF9wYWNrZXRfY2xlYXJf a2V5cyhzc2gpOworKwkJc3NocGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOworIAkJbG9nZGllKCJE aXNjb25uZWN0ZWQgZnJvbSAlcyIsIHJlbW90ZV9pZCk7CisgCWNhc2UgU1NIX0VSUl9TWVNURU1f RVJST1I6CisgCQlpZiAoZXJybm8gPT0gRUNPTk5SRVNFVCkgeworIAkJCXNzaF9wYWNrZXRfY2xl YXJfa2V5cyhzc2gpOworKwkJCXNzaHBrdF9maW5hbF9sb2dfZW50cnkoc3NoKTsKKyAJCQlsb2dk aWUoIkNvbm5lY3Rpb24gcmVzZXQgYnkgJXMiLCByZW1vdGVfaWQpOworIAkJfQorIAkJLyogRkFM TFRIUk9VR0ggKi8KK0BAIC0yMTI5LDYgKzIyMTAsMjQgQEAKKyAJbG9nZGllX2YoInNob3VsZCBo YXZlIGV4aXRlZCIpOworIH0KKyAKKysvKiB0aGlzIHByaW50cyBvdXQgdGhlIGZpbmFsIGxvZyBl bnRyeSAqLworK3ZvaWQKKytzc2hwa3RfZmluYWxfbG9nX2VudHJ5IChzdHJ1Y3Qgc3NoICpzc2gp IHsKKysJZG91YmxlIHRvdGFsX3RpbWU7CisrCisrCWlmIChzc2gtPnN0YXJ0X3RpbWUgPCAxKQor KwkJLyogdGhpcyB3aWxsIHByb2R1Y2UgYSBOYU4gaW4gdGhlIG91dHB1dC4gLWNqciAqLworKwkJ dG90YWxfdGltZSA9IDA7CisrCWVsc2UKKysJCXRvdGFsX3RpbWUgPSBtb25vdGltZV9kb3VibGUo KSAtIHNzaC0+c3RhcnRfdGltZTsKKysKKysJbG9naXQoIlNTSDogU2VydmVyO0xUeXBlOiBUaHJv dWdocHV0O1JlbW90ZTogJXMtJWQ7SU46ICVsdTtPVVQ6ICVsdTtEdXJhdGlvbjogJS4xZjt0UHV0 X2luOiAlLjFmO3RQdXRfb3V0OiAlLjFmIiwKKysJICAgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3No KSwgc3NoX3JlbW90ZV9wb3J0KHNzaCksCisrCSAgICAgIHNzaC0+c3RkaW5fYnl0ZXMsIHNzaC0+ ZmRvdXRfYnl0ZXMsIHRvdGFsX3RpbWUsCisrCSAgICAgIHNzaC0+c3RkaW5fYnl0ZXMgLyB0b3Rh bF90aW1lLAorKwkgICAgICBzc2gtPmZkb3V0X2J5dGVzIC8gdG90YWxfdGltZSk7CisrfQorKwor IC8qCisgICogTG9ncyB0aGUgZXJyb3IgcGx1cyBjb25zdHJ1Y3RzIGFuZCBzZW5kcyBhIGRpc2Nv bm5lY3QgcGFja2V0LCBjbG9zZXMgdGhlCisgICogY29ubmVjdGlvbiwgYW5kIGV4aXRzLiAgVGhp cyBmdW5jdGlvbiBuZXZlciByZXR1cm5zLiBUaGUgZXJyb3IgbWVzc2FnZQorQEAgLTIzODMsMTAg KzI0ODIsMTkgQEAKKyAJc3NoLT5rZXgtPnNlcnZlciA9IDE7IC8qIFhYWCB1bmlmeT8gKi8KKyB9 CisgCisrLyogU2V0IHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiB0byBwb3N0IGF1dGgKKysg KiBXaGlsZSB3ZSBhcmUgaGVyZSBhbHNvIGRlY3JlYXNlIHRoZSBzaXplIG9mCisrICogcGFja2V0 X21heF9zaXplIHRvIHNvbWV0aGluZyBtb3JlIHJlYXNvbmFibGUuCisrICogSW4gdGhpcyBjYXNl IHRoYXRzIDMzay4gV2hpY2ggaXMgdGhlIHNpemUgb2YKKysgKiB0aGUgbGFyZ2VzdCBwYWNrZXQg d2UgZXhwZWN0IHRvIHNlZSBhbmQgc29tZSBzcGFjZQorKyAqIGZvciBvdmVyaGVhZC4gVGhpcyBy ZWR1Y2VzIG1lbW9yeSB1c2FnZSBpbiBoaWdoCisrICogQkRQIGVudmlyb25tZW50cyB3aXRob3V0 IGltcGFjdGluZyBwZXJmb3JtYW5jZQorKyAqIC1janIgNC8xMS8yMyAqLworIHZvaWQKKyBzc2hf cGFja2V0X3NldF9hdXRoZW50aWNhdGVkKHN0cnVjdCBzc2ggKnNzaCkKKyB7CisgCXNzaC0+c3Rh dGUtPmFmdGVyX2F1dGhlbnRpY2F0aW9uID0gMTsKKysJcGFja2V0X21heF9zaXplID0gU1NIX0lP QlVGU1ogKyAxMDI0OworIH0KKyAKKyB2b2lkICoKK0BAIC0zMDI1LDYgKzMxMzMsMjAgQEAKKyAJ cmV0dXJuIDA7CisgfQorIAorKy8qIHVzZWQgZm9yIGNpcGhlciBzd2l0Y2hpbmcKKysgKiBvbmx5 IGNhbGxlZCBpbiBjaXBoZXItc3d0aWNoLmMgKi8KKyt2b2lkICoKKytzc2hfcGFja2V0X2dldF9z ZW5kX2NvbnRleHQoc3RydWN0IHNzaCAqc3NoKQorK3sKKysgICAgICAgIHJldHVybiBzc2gtPnN0 YXRlLT5zZW5kX2NvbnRleHQ7CisrfQorKworK3ZvaWQgKgorK3NzaF9wYWNrZXRfZ2V0X3JlY2Vp dmVfY29udGV4dChzdHJ1Y3Qgc3NoICpzc2gpCisreworKyAgICAgICAgcmV0dXJuIHNzaC0+c3Rh dGUtPnJlY2VpdmVfY29udGV4dDsKKyt9CisrCisgc3RhdGljIGNoYXIgKgorIGZvcm1hdF90cmFm ZmljX3N0YXRzKHN0cnVjdCBwYWNrZXRfc3RhdGUgKnBzKQorIHsKK2RpZmYgLU51ciBvcGVuc3No LTEwLjNwMS5vcmlnL3BhY2tldC5oIG9wZW5zc2gtMTAuM3AxL3BhY2tldC5oCistLS0gb3BlbnNz aC0xMC4zcDEub3JpZy9wYWNrZXQuaAkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIw MAorKysrIG9wZW5zc2gtMTAuM3AxL3BhY2tldC5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI3NjM2 MjIzICswMjAwCitAQCAtODksNiArODksMTcgQEAKKyAKKyAJLyogQVBQIGRhdGEgKi8KKyAJdm9p ZCAqYXBwX2RhdGE7CisrCisrCS8qIGxvZ2dpbmcgZGF0YSBmb3IgU2VydmVyTG9nZ2luZyBwYXRj aCovCisrCWRvdWJsZSBzdGFydF90aW1lOworKwl1X2xvbmcgZmRvdXRfYnl0ZXM7CisrCXVfbG9u ZyBzdGRpbl9ieXRlczsKKysKKysJLyogdHJhY2sgdGhhdCB3ZSBhcmUgaW4gYSBub25lIGNpcGhl ciBzdGF0ZSAqLworKwlpbnQgbm9uZTsKKysKKysJLyogdHJhY2sgaWYgd2UgaGF2ZSBkaXNhYmxl ZCB0aGUgbWFjIGFzIHdlbGwgKi8KKysJaW50IG5vbmVfbWFjOworIH07CisgCisgdHlwZWRlZiBp bnQgKHNzaF9wYWNrZXRfaG9va19mbikoc3RydWN0IHNzaCAqLCBzdHJ1Y3Qgc3NoYnVmICosCitA QCAtMTU4LDYgKzE2OSw4IEBACisgaW50CSBzc2hfcGFja2V0X3NldF9tYXhzaXplKHN0cnVjdCBz c2ggKiwgdV9pbnQpOworIHVfaW50CSBzc2hfcGFja2V0X2dldF9tYXhzaXplKHN0cnVjdCBzc2gg Kik7CisgCisraW50CSBwYWNrZXRfYXV0aGVudGljYXRpb25fc3RhdGUoY29uc3Qgc3RydWN0IHNz aCAqKTsKKysKKyBpbnQJIHNzaF9wYWNrZXRfZ2V0X3N0YXRlKHN0cnVjdCBzc2ggKiwgc3RydWN0 IHNzaGJ1ZiAqKTsKKyBpbnQJIHNzaF9wYWNrZXRfc2V0X3N0YXRlKHN0cnVjdCBzc2ggKiwgc3Ry dWN0IHNzaGJ1ZiAqKTsKKyAKK0BAIC0xNzMsNiArMTg2LDEzIEBACisgCisgdm9pZAkqc3NoX3Bh Y2tldF9nZXRfaW5wdXQoc3RydWN0IHNzaCAqKTsKKyB2b2lkCSpzc2hfcGFja2V0X2dldF9vdXRw dXQoc3RydWN0IHNzaCAqKTsKKyt2b2lkCSpzc2hfcGFja2V0X2dldF9yZWNlaXZlX2NvbnRleHQo c3RydWN0IHNzaCAqKTsKKyt2b2lkCSpzc2hfcGFja2V0X2dldF9zZW5kX2NvbnRleHQoc3RydWN0 IHNzaCAqKTsKKysKKysvKiBmb3IgZm9yY2VkIHBhY2tldCByZWtleWluZyBwb3N0IGF1dGggKi8K Kyt2b2lkCSBwYWNrZXRfcmVxdWVzdF9yZWtleWluZyh2b2lkKTsKKysvKiBmaW5hbCBsb2cgZW50 cnkgc3VwcG9ydCAqLworK3ZvaWQJIHNzaHBrdF9maW5hbF9sb2dfZW50cnkgKHN0cnVjdCBzc2gg Kik7CisgCisgLyogbmV3IEFQSSAqLworIGludAlzc2hwa3Rfc3RhcnQoc3RydWN0IHNzaCAqc3No LCB1X2NoYXIgdHlwZSk7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9wb2x5MTMwNS5j IG9wZW5zc2gtMTAuM3AxL3BvbHkxMzA1LmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3BvbHkx MzA1LmMJMjAyNi0wNy0wMiAwMDoyNzowNi4wOTcyMzQ0NjcgKzAyMDAKKysrKyBvcGVuc3NoLTEw LjNwMS9wb2x5MTMwNS5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI3OTIxNDc5ICswMjAwCitAQCAt MTEsNiArMTEsMTYgQEAKKyAKKyAjaW5jbHVkZSAicG9seTEzMDUuaCIKKyAKKysjaWZkZWYgT1BF TlNTTF9IQVZFX1BPTFlfRVZQCisrdm9pZAorK3BvbHkxMzA1X2F1dGgoRVZQX01BQ19DVFggKnBv bHlfY3R4LCB1bnNpZ25lZCBjaGFyIG91dFtQT0xZMTMwNV9UQUdMRU5dLCBjb25zdCB1bnNpZ25l ZCBjaGFyICptLCBzaXplX3QgaW5sZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W1BPTFkxMzA1 X0tFWUxFTl0pIHsKKysJc2l6ZV90IHBvbHlfb3V0X2xlbjsKKysJRVZQX01BQ19pbml0KHBvbHlf Y3R4LCAoY29uc3QgdV9jaGFyICopa2V5LCBQT0xZMTMwNV9LRVlMRU4sIE5VTEwpOworKwlFVlBf TUFDX3VwZGF0ZShwb2x5X2N0eCwgbSwgaW5sZW4pOworKwlFVlBfTUFDX2ZpbmFsKHBvbHlfY3R4 LCBvdXQsICZwb2x5X291dF9sZW4sIChzaXplX3QpUE9MWTEzMDVfVEFHTEVOKTsKKyt9CisrI2Vs c2UKKysKKyAjZGVmaW5lIG11bDMyeDMyXzY0KGEsYikgKCh1aW50NjRfdCkoYSkgKiAoYikpCisg CisgI2RlZmluZSBVOFRPMzJfTEUocCkgXAorQEAgLTI4LDcgKzM4LDcgQEAKKyAJfSB3aGlsZSAo MCkKKyAKKyB2b2lkCistcG9seTEzMDVfYXV0aCh1bnNpZ25lZCBjaGFyIG91dFtQT0xZMTMwNV9U QUdMRU5dLCBjb25zdCB1bnNpZ25lZCBjaGFyICptLCBzaXplX3QgaW5sZW4sIGNvbnN0IHVuc2ln bmVkIGNoYXIga2V5W1BPTFkxMzA1X0tFWUxFTl0pIHsKKytwb2x5MTMwNV9hdXRoKGNoYXIgKnVu dXNlZCwgdW5zaWduZWQgY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdW5zaWduZWQg Y2hhciAqbSwgc2l6ZV90IGlubGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVtQT0xZMTMwNV9L RVlMRU5dKSB7CisgCXVpbnQzMl90IHQwLHQxLHQyLHQzOworIAl1aW50MzJfdCBoMCxoMSxoMixo MyxoNDsKKyAJdWludDMyX3QgcjAscjEscjIscjMscjQ7CitAQCAtMTU1LDMgKzE2NSw0IEBACisg CVUzMlRPOF9MRSgmb3V0WyA4XSwgZjIpOyBmMyArPSAoZjIgPj4gMzIpOworIAlVMzJUTzhfTEUo Jm91dFsxMl0sIGYzKTsKKyB9CisrI2VuZGlmIC8qIE9QRU5TU0xfSEFWRV9QT0xZX0VWUCAqLwor ZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvcG9seTEzMDUuaCBvcGVuc3NoLTEwLjNwMS9w b2x5MTMwNS5oCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9wb2x5MTMwNS5oCTIwMjYtMDctMDIg MDA6Mjc6MDYuMDk3MjM0NDY3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvcG9seTEzMDUuaAky MDI2LTA3LTAyIDAwOjI3OjI5LjcyODI5OTAwNSArMDIwMAorQEAgLTEzLDggKzEzLDE1IEBACisg I2RlZmluZSBQT0xZMTMwNV9LRVlMRU4JCTMyCisgI2RlZmluZSBQT0xZMTMwNV9UQUdMRU4JCTE2 CisgCistdm9pZCBwb2x5MTMwNV9hdXRoKHVfY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29u c3QgdV9jaGFyICptLCBzaXplX3QgaW5sZW4sCisrI2lmZGVmIE9QRU5TU0xfSEFWRV9QT0xZX0VW UAorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworK3ZvaWQgcG9seTEzMDVfYXV0aChFVlBf TUFDX0NUWCAqcG9seV9rZXksIHVfY2hhciBvdXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdV9j aGFyICptLCBzaXplX3QgaW5sZW4sCisrICAgIGNvbnN0IHVfY2hhciBrZXlbUE9MWTEzMDVfS0VZ TEVOXSkKKysjZWxzZQorK3ZvaWQgcG9seTEzMDVfYXV0aChjaGFyICp1bnVzZWQsIHVfY2hhciBv dXRbUE9MWTEzMDVfVEFHTEVOXSwgY29uc3QgdV9jaGFyICptLCBzaXplX3QgaW5sZW4sCisgICAg IGNvbnN0IHVfY2hhciBrZXlbUE9MWTEzMDVfS0VZTEVOXSkKKysjZW5kaWYKKyAgICAgX19hdHRy aWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAxLCBQT0xZMTMwNV9UQUdMRU4pKSkK KyAgICAgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19idWZmZXJfXywgMiwgMykpKQorICAg ICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDQsIFBPTFkxMzA1X0tF WUxFTikpKTsKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3Byb2dyZXNzbWV0ZXIuYyBv cGVuc3NoLTEwLjNwMS9wcm9ncmVzc21ldGVyLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3By b2dyZXNzbWV0ZXIuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjA5NzIzNDQ2NyArMDIwMAorKysrIG9w ZW5zc2gtMTAuM3AxL3Byb2dyZXNzbWV0ZXIuYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjcyODQxMzMy MiArMDIwMAorQEAgLTY1LDYgKzY1LDggQEAKKyBzdGF0aWMgb2ZmX3Qgc3RhcnRfcG9zOwkJLyog aW5pdGlhbCBwb3NpdGlvbiBvZiB0cmFuc2ZlciAqLworIHN0YXRpYyBvZmZfdCBlbmRfcG9zOwkJ LyogZW5kaW5nIHBvc2l0aW9uIG9mIHRyYW5zZmVyICovCisgc3RhdGljIG9mZl90IGN1cl9wb3M7 CQkvKiB0cmFuc2ZlciBwb3NpdGlvbiBhcyBvZiBsYXN0IHJlZnJlc2ggKi8KKytzdGF0aWMgb2Zm X3QgbGFzdF9wb3M7Cisrc3RhdGljIG9mZl90IG1heF9kZWx0YV9wb3MgPSAwOworIHN0YXRpYyB2 b2xhdGlsZSBvZmZfdCAqY291bnRlcjsJLyogcHJvZ3Jlc3MgY291bnRlciAqLworIHN0YXRpYyBs b25nIHN0YWxsZWQ7CQkvKiBob3cgbG9uZyB3ZSBoYXZlIGJlZW4gc3RhbGxlZCAqLworIHN0YXRp YyBsb25nIGxvbmcgYnl0ZXNfcGVyX3NlY29uZDsgLyogY3VycmVudCBzcGVlZCBpbiBieXRlcyBw ZXIgc2Vjb25kICovCitAQCAtMTMxLDYgKzEzMyw3IEBACisgCWxvbmcgbG9uZyBjdXJfc3BlZWQ7 CisgCWludCBob3VycywgbWludXRlcywgc2Vjb25kczsKKyAJaW50IGZpbGVfbGVuLCBjb2xzOwor KwlvZmZfdCBkZWx0YV9wb3M7CisgCisgCWlmIChmaWxlID09IE5VTEwgfHwgKCFmb3JjZV91cGRh dGUgJiYgIWFsYXJtX2ZpcmVkICYmICF3aW5fcmVzaXplZCkgfHwKKyAJICAgICFjYW5fb3V0cHV0 KCkpCitAQCAtMTQ3LDYgKzE1MCwxMCBAQAorIAlub3cgPSBtb25vdGltZV9kb3VibGUoKTsKKyAJ Ynl0ZXNfbGVmdCA9IGVuZF9wb3MgLSBjdXJfcG9zOworIAorKwlkZWx0YV9wb3MgPSBjdXJfcG9z IC0gbGFzdF9wb3M7CisrCWlmIChkZWx0YV9wb3MgPiBtYXhfZGVsdGFfcG9zKQorKwkJbWF4X2Rl bHRhX3BvcyA9IGRlbHRhX3BvczsKKysKKyAJaWYgKGJ5dGVzX2xlZnQgPiAwKQorIAkJZWxhcHNl ZCA9IG5vdyAtIGxhc3RfdXBkYXRlOworIAllbHNlIHsKK0BAIC0xNzYsNyArMTgzLDcgQEAKKyAJ CXJldHVybjsKKyAKKyAJLyogZmlsZW5hbWUgKi8KKy0JZmlsZV9sZW4gPSBjb2xzID0gd2luX3Np emUgLSAzNjsKKysJZmlsZV9sZW4gPSBjb2xzID0gd2luX3NpemUgLSA0NTsKKyAJaWYgKGZpbGVf bGVuID4gMCkgeworIAkJYXNtcHJpbnRmKCZidWYsIElOVF9NQVgsICZjb2xzLCAiJS0qcyIsIGZp bGVfbGVuLCBmaWxlKTsKKyAJCS8qIElmIHdlIHVzZWQgZmV3ZXIgY29sdW1ucyB0aGFuIGV4cGVj dGVkIHRoZW4gcGFkICovCitAQCAtMTkzLDYgKzIwMCwxMiBAQAorIAl4ZXh0ZW5kZigmYnVmLCBO VUxMLCAiICUzZCUlICVzICVzL3MgIiwgcGVyY2VudCwgZm9ybWF0X3NpemUoY3VyX3BvcyksCisg CSAgICBmb3JtYXRfcmF0ZSgob2ZmX3QpYnl0ZXNfcGVyX3NlY29uZCkpOworIAorKwkvKiBpbnN0 YW50YW5lb3VzIHJhdGUgKi8KKysJaWYgKGJ5dGVzX2xlZnQgPiAwKQorKwkJeGV4dGVuZGYoJmJ1 ZiwgTlVMTCwgIiVzL3MiLCBmb3JtYXRfcmF0ZSgob2ZmX3QpZGVsdGFfcG9zKSk7CisrCWVsc2UK KysJCXhleHRlbmRmKCZidWYsIE5VTEwsICIlcy9zIiwgZm9ybWF0X3JhdGUoKG9mZl90KW1heF9k ZWx0YV9wb3MpKTsKKysKKyAJLyogRVRBICovCisgCWlmICghdHJhbnNmZXJyZWQpCisgCQlzdGFs bGVkICs9IGVsYXBzZWQ7CitAQCAtMjM1LDYgKzI0OCw3IEBACisgCX0KKyAJZnJlZShidWYpOwor IAlmcmVlKG9idWYpOworKwlsYXN0X3BvcyA9IGN1cl9wb3M7CisgfQorIAorIHN0YXRpYyB2b2lk CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9yZWFkY29uZi5jIG9wZW5zc2gtMTAuM3Ax L3JlYWRjb25mLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3JlYWRjb25mLmMJMjAyNi0wNy0w MiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9yZWFkY29uZi5j CTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI4ODU0ODk3ICswMjAwCitAQCAtNjIsNiArNjIsNyBAQAor ICNpbmNsdWRlICJtYWMuaCIKKyAjaW5jbHVkZSAibXlwcm9wb3NhbC5oIgorICNpbmNsdWRlICJk aWdlc3QuaCIKKysjaW5jbHVkZSAic3NoYnVmLmgiCisgI2luY2x1ZGUgInZlcnNpb24uaCIKKyAj aW5jbHVkZSAic3NoLWdzcy5oIgorIAorQEAgLTE2NSw2ICsxNjYsMTAgQEAKKyAJb0hhc2hLbm93 bkhvc3RzLAorIAlvVHVubmVsLCBvVHVubmVsRGV2aWNlLAorIAlvTG9jYWxDb21tYW5kLCBvUGVy bWl0TG9jYWxDb21tYW5kLCBvUmVtb3RlQ29tbWFuZCwKKysJb1RjcFJjdkJ1ZlBvbGwsIG9IUE5E aXNhYmxlZCwKKysJb05vbmVFbmFibGVkLCBvTm9uZU1hY0VuYWJsZWQsIG9Ob25lU3dpdGNoLAor KwlvRGlzYWJsZU1UQUVTLCBvVXNlTVBUQ1AsIG9IYXBweUV5ZXMsIG9IYXBweURlbGF5LAorKwlv TWV0cmljcywgb01ldHJpY3NQYXRoLCBvTWV0cmljc0ludGVydmFsLCBvRmFsbGJhY2ssIG9GYWxs YmFja1BvcnQsCisgCW9WaXN1YWxIb3N0S2V5LAorIAlvS2V4QWxnb3JpdGhtcywgb0lQUW9TLCBv UmVxdWVzdFRUWSwgb1Nlc3Npb25UeXBlLCBvU3RkaW5OdWxsLAorIAlvRm9ya0FmdGVyQXV0aGVu dGljYXRpb24sIG9JZ25vcmVVbmtub3duLCBvUHJveHlVc2VGZHBhc3MsCitAQCAtMzEyLDYgKzMx NywxOCBAQAorIAl7ICJrZXhhbGdvcml0aG1zIiwgb0tleEFsZ29yaXRobXMgfSwKKyAJeyAiaXBx b3MiLCBvSVBRb1MgfSwKKyAJeyAicmVxdWVzdHR0eSIsIG9SZXF1ZXN0VFRZIH0sCisrCXsgIm5v bmVlbmFibGVkIiwgb05vbmVFbmFibGVkIH0sCisrCXsgIm5vbmVtYWNlbmFibGVkIiwgb05vbmVN YWNFbmFibGVkIH0sCisrCXsgIm5vbmVzd2l0Y2giLCBvTm9uZVN3aXRjaCB9LAorKwl7ICJ1c2Vt cHRjcCIsIG9Vc2VNUFRDUH0sCisrCXsgImhhcHB5ZXllcyIsIG9IYXBweUV5ZXMgfSwKKysJeyAi aGFwcHlkZWxheSIsIG9IYXBweURlbGF5IH0sCisrCXsgImRpc2FibGVtdGFlcyIsIG9EaXNhYmxl TVRBRVMgfSwKKysJeyAibWV0cmljcyIsIG9NZXRyaWNzIH0sCisrCXsgIm1ldHJpY3NwYXRoIiwg b01ldHJpY3NQYXRoIH0sCisrCXsgIm1ldHJpY3NpbnRlcnZhbCIsIG9NZXRyaWNzSW50ZXJ2YWwg fSwKKysJeyAiZmFsbGJhY2siLCBvRmFsbGJhY2sgfSwKKysJeyAiZmFsbGJhY2twb3J0Iiwgb0Zh bGxiYWNrUG9ydCB9LAorIAl7ICJzZXNzaW9udHlwZSIsIG9TZXNzaW9uVHlwZSB9LAorIAl7ICJz dGRpbm51bGwiLCBvU3RkaW5OdWxsIH0sCisgCXsgImZvcmthZnRlcmF1dGhlbnRpY2F0aW9uIiwg b0ZvcmtBZnRlckF1dGhlbnRpY2F0aW9uIH0sCitAQCAtMzM0LDYgKzM1MSw4IEBACisgCXsgInBy b3h5anVtcCIsIG9Qcm94eUp1bXAgfSwKKyAJeyAic2VjdXJpdHlrZXlwcm92aWRlciIsIG9TZWN1 cml0eUtleVByb3ZpZGVyIH0sCisgCXsgImtub3duaG9zdHNjb21tYW5kIiwgb0tub3duSG9zdHND b21tYW5kIH0sCisrCXsgInRjcHJjdmJ1ZnBvbGwiLCBvVGNwUmN2QnVmUG9sbCB9LAorKwl7ICJo cG5kaXNhYmxlZCIsIG9IUE5EaXNhYmxlZCB9LAorIAl7ICJyZXF1aXJlZHJzYXNpemUiLCBvUmVx dWlyZWRSU0FTaXplIH0sCisgCXsgImVuYWJsZWVzY2FwZWNvbW1hbmRsaW5lIiwgb0VuYWJsZUVz Y2FwZUNvbW1hbmRsaW5lIH0sCisgCXsgIm9ic2N1cmVrZXlzdHJva2V0aW1pbmciLCBvT2JzY3Vy ZUtleXN0cm9rZVRpbWluZyB9LAorQEAgLTUzNCw3ICs1NTMsNyBAQAorIAorIAlpZiAocG9ydCA9 PSAwKSB7CisgCQlzcCA9IGdldHNlcnZieW5hbWUoU1NIX1NFUlZJQ0VfTkFNRSwgInRjcCIpOwor LQkJcG9ydCA9IHNwID8gbnRvaHMoc3AtPnNfcG9ydCkgOiBTU0hfREVGQVVMVF9QT1JUOworKwkJ cG9ydCA9IHNwID8gbnRvaHMoc3AtPnNfcG9ydCkgOiBIUE5TU0hfREVGQVVMVF9QT1JUOworIAl9 CisgCXJldHVybiBwb3J0OworIH0KK0BAIC0xMzg0LDYgKzE0MDMsNzUgQEAKKyAJCWludHB0ciA9 ICZvcHRpb25zLT5jaGVja19ob3N0X2lwOworIAkJZ290byBwYXJzZV9mbGFnOworIAorKwljYXNl IG9IUE5EaXNhYmxlZDoKKysJCWludHB0ciA9ICZvcHRpb25zLT5ocG5fZGlzYWJsZWQ7CisrCQln b3RvIHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ugb1RjcFJjdkJ1ZlBvbGw6CisrCQlpbnRwdHIgPSAm b3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbDsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2Fz ZSBvTm9uZUVuYWJsZWQ6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+bm9uZV9lbmFibGVkOworKwkJ Z290byBwYXJzZV9mbGFnOworKworKwljYXNlIG9Ob25lTWFjRW5hYmxlZDoKKysJCWludHB0ciA9 ICZvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQ7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisrCWNh c2Ugb1VzZU1QVENQOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPnVzZV9tcHRjcDsKKysJCWdvdG8g cGFyc2VfZmxhZzsKKysKKysJY2FzZSBvSGFwcHlFeWVzOgorKwkJaW50cHRyID0gJm9wdGlvbnMt PnVzZV9oYXBweWV5ZXM7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ugb0hhcHB5RGVs YXk6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+aGFwcHlfZGVsYXk7CisrCQlnb3RvIHBhcnNlX2lu dDsKKysKKysJY2FzZSBvRGlzYWJsZU1UQUVTOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPmRpc2Fi bGVfbXVsdGl0aHJlYWRlZDsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBvTWV0cmlj czoKKysJCWludHB0ciA9ICZvcHRpb25zLT5tZXRyaWNzOworKwkJZ290byBwYXJzZV9mbGFnOwor KworKwljYXNlIG9NZXRyaWNzSW50ZXJ2YWw6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+bWV0cmlj c19pbnRlcnZhbDsKKysJCWdvdG8gcGFyc2VfaW50OworKworKwljYXNlIG9NZXRyaWNzUGF0aDoK KysJCWNoYXJwdHIgPSAmb3B0aW9ucy0+bWV0cmljc19wYXRoOworKwkJb3B0aW9ucy0+bWV0cmlj cyA9IDE7CisrCQlnb3RvIHBhcnNlX3N0cmluZzsKKysKKysJY2FzZSBvRmFsbGJhY2s6CisrCQlp bnRwdHIgPSAmb3B0aW9ucy0+ZmFsbGJhY2s7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisrCWNh c2Ugb0ZhbGxiYWNrUG9ydDoKKysJCWludHB0ciA9ICZvcHRpb25zLT5mYWxsYmFja19wb3J0Owor KwkJZ290byBwYXJzZV9pbnQ7CisrCisrCS8qCisrCSAqIFdlIGNoZWNrIHRvIHNlZSBpZiB0aGUg Y29tbWFuZCBjb21lcyBmcm9tIHRoZSBjb21tYW5kCisrCSAqIGxpbmUgb3Igbm90LiBJZiBpdCBk b2VzIHRoZW4gZW5hYmxlIGl0IG90aGVyd2lzZSBmYWlsLgorKwkgKiAgTk9ORSBzaG91bGQgbmV2 ZXIgYmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisrCSAqLworKwljYXNlIG9Ob25lU3dpdGNo OgorKwkJaWYgKHN0cmNtcChmaWxlbmFtZSwgImNvbW1hbmQtbGluZSIpID09IDApIHsKKysJCQlp bnRwdHIgPSAmb3B0aW9ucy0+bm9uZV9zd2l0Y2g7CisrCQkJZ290byBwYXJzZV9mbGFnOworKwkJ fSBlbHNlIHsKKysJCQllcnJvcigiTm9uZVN3aXRjaCBpcyBmb3VuZCBpbiAlLjIwMHMuXG5Zb3Ug bWF5IG9ubHkgdXNlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gZnJvbSB0aGUgY29tbWFuZCBs aW5lIiwgZmlsZW5hbWUpOworKwkJCWVycm9yKCJDb250aW51aW5nLi4uIik7CisrCQkJZGVidWco Ik5vbmVTd2l0Y2ggZGlyZWN0aXZlIGZvdW5kIGluICUuMjAwcy4iLCBmaWxlbmFtZSk7CisrCQkJ cmV0dXJuIDA7CisrCQl9CisrCisgCWNhc2Ugb1ZlcmlmeUhvc3RLZXlETlM6CisgCQlpbnRwdHIg PSAmb3B0aW9ucy0+dmVyaWZ5X2hvc3Rfa2V5X2RuczsKKyAJCW11bHRpc3RhdGVfcHRyID0gbXVs dGlzdGF0ZV95ZXNub2FzazsKK0BAIC0yODU4LDYgKzI5NDYsMjAgQEAKKyAJb3B0aW9ucy0+aXBf cW9zX2ludGVyYWN0aXZlID0gLTE7CisgCW9wdGlvbnMtPmlwX3Fvc19idWxrID0gLTE7CisgCW9w dGlvbnMtPnJlcXVlc3RfdHR5ID0gLTE7CisrCW9wdGlvbnMtPm5vbmVfc3dpdGNoID0gLTE7Cisr CW9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9IC0xOworKwlvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQg PSAtMTsKKysJb3B0aW9ucy0+dXNlX21wdGNwID0gLTE7CisrCW9wdGlvbnMtPnVzZV9oYXBweWV5 ZXMgPSAtMTsKKysJb3B0aW9ucy0+aGFwcHlfZGVsYXkgPSAtMTsKKysJb3B0aW9ucy0+ZGlzYWJs ZV9tdWx0aXRocmVhZGVkID0gLTE7CisrCW9wdGlvbnMtPm1ldHJpY3MgPSAtMTsKKysJb3B0aW9u cy0+bWV0cmljc19wYXRoID0gTlVMTDsKKysJb3B0aW9ucy0+bWV0cmljc19pbnRlcnZhbCA9IC0x OworKwlvcHRpb25zLT5ocG5fZGlzYWJsZWQgPSAtMTsKKysJb3B0aW9ucy0+ZmFsbGJhY2sgPSAt MTsKKysJb3B0aW9ucy0+ZmFsbGJhY2tfcG9ydCA9IC0xOworKwlvcHRpb25zLT50Y3BfcmN2X2J1 Zl9wb2xsID0gLTE7CisgCW9wdGlvbnMtPnNlc3Npb25fdHlwZSA9IC0xOworIAlvcHRpb25zLT5z dGRpbl9udWxsID0gLTE7CisgCW9wdGlvbnMtPmZvcmtfYWZ0ZXJfYXV0aGVudGljYXRpb24gPSAt MTsKK0BAIC0zMDQwLDggKzMxNDIsNDcgQEAKKyAJCW9wdGlvbnMtPnNlcnZlcl9hbGl2ZV9pbnRl cnZhbCA9IDA7CisgCWlmIChvcHRpb25zLT5zZXJ2ZXJfYWxpdmVfY291bnRfbWF4ID09IC0xKQor IAkJb3B0aW9ucy0+c2VydmVyX2FsaXZlX2NvdW50X21heCA9IDM7CisrCWlmIChvcHRpb25zLT5o cG5fZGlzYWJsZWQgPT0gLTEpCisrCQlvcHRpb25zLT5ocG5fZGlzYWJsZWQgPSAwOworKwlpZiAo b3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9sbCA9PSAtMSkKKysJCW9wdGlvbnMtPnRjcF9yY3ZfYnVm X3BvbGwgPSAxOworKwlpZiAob3B0aW9ucy0+bm9uZV9zd2l0Y2ggPT0gLTEpCisrCQlvcHRpb25z LT5ub25lX3N3aXRjaCA9IDA7CisrCWlmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gLTEpCisr CQlvcHRpb25zLT5ub25lX2VuYWJsZWQgPSAwOworKwlpZiAob3B0aW9ucy0+bm9uZV9lbmFibGVk ID09IDAgJiYgb3B0aW9ucy0+bm9uZV9zd2l0Y2ggPiAwKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwg Ik5vbmVFbmFibGVkIG11c3QgYmUgZW5hYmxlZCB0byB1c2UgdGhlIE5vbmUgU3dpdGNoIG9wdGlv bi4gTm9uZSBjaXBoZXIgZGlzYWJsZWQuXG4iKTsKKysJCW9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9 IDA7CisrCX0KKysJaWYgKG9wdGlvbnMtPm5vbmVtYWNfZW5hYmxlZCA9PSAtMSkKKysJCW9wdGlv bnMtPm5vbmVtYWNfZW5hYmxlZCA9IDA7CisrCWlmIChvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQg PiAwICYmIChvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gMCB8fAorKwkJCQkJICAgICBvcHRpb25z LT5ub25lX3N3aXRjaCA9PSAwKSkgeworKwkJZnByaW50ZihzdGRlcnIsICJOb25lIE1BQyBjYW4g b25seSBiZSB1c2VkIHdpdGggdGhlIE5vbmUgY2lwaGVyLiBOb25lIE1BQyBkaXNhYmxlZC5cbiIp OworKwkJb3B0aW9ucy0+bm9uZW1hY19lbmFibGVkID0gMDsKKysJfQorKwlpZiAob3B0aW9ucy0+ dXNlX21wdGNwID09IC0xKQorKwkJb3B0aW9ucy0+dXNlX21wdGNwID0gMDsKKysJaWYgKG9wdGlv bnMtPnVzZV9oYXBweWV5ZXMgPT0gLTEpCisrCQlvcHRpb25zLT51c2VfaGFwcHlleWVzID0gMDsK KysJLyogaWYgdGhlIHVzZXIgdHJpZXMgdG8gc2V0IHRoZSBkZWxheSB0byAwIHRoZW4gaW4ganVz dCBsb29wcyBmb3JldmVyCisrCSAqIHNvIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YW5kYXJkIC0x IHRlc3Qgd2UgdXNlIDwgMSB0byBtYWtlIHN1cmUgdGhlCisrCSAqIHVzZXIgaXNuJ3QgYmVpbmcg dG9vIGNsZXZlciBmb3IgdGhlaXIgb3duIGdvb2QKKysJICovCisrCWlmIChvcHRpb25zLT5oYXBw eV9kZWxheSA8IDEpCisrCQlvcHRpb25zLT5oYXBweV9kZWxheSA9IDI1MDsgLyogZGVmYXVsdCAy NTBtcyBhcyBwZXIgUkZDIDgzMDUgU2VjdGlvbiA1ICovCisrCWlmIChvcHRpb25zLT5kaXNhYmxl X211bHRpdGhyZWFkZWQgPT0gLTEpCisrCQlvcHRpb25zLT5kaXNhYmxlX211bHRpdGhyZWFkZWQg PSAwOworKwlpZiAob3B0aW9ucy0+bWV0cmljcyA9PSAtMSkKKysJCW9wdGlvbnMtPm1ldHJpY3Mg PSAwOworKwlpZiAob3B0aW9ucy0+bWV0cmljc19pbnRlcnZhbCA9PSAtMSkKKysJCW9wdGlvbnMt Pm1ldHJpY3NfaW50ZXJ2YWwgPSA1OworIAlpZiAob3B0aW9ucy0+Y29udHJvbF9tYXN0ZXIgPT0g LTEpCisgCQlvcHRpb25zLT5jb250cm9sX21hc3RlciA9IDA7CisrCWlmIChvcHRpb25zLT5mYWxs YmFjayA9PSAtMSkKKysJCW9wdGlvbnMtPmZhbGxiYWNrID0gMTsKKysJaWYgKG9wdGlvbnMtPmZh bGxiYWNrX3BvcnQgPT0gLTEpCisrCQlvcHRpb25zLT5mYWxsYmFja19wb3J0ID0gU1NIX0RFRkFV TFRfUE9SVDsKKyAJaWYgKG9wdGlvbnMtPmNvbnRyb2xfcGVyc2lzdCA9PSAtMSkgeworIAkJb3B0 aW9ucy0+Y29udHJvbF9wZXJzaXN0ID0gMDsKKyAJCW9wdGlvbnMtPmNvbnRyb2xfcGVyc2lzdF90 aW1lb3V0ID0gMDsKK0BAIC0zMDU4LDEwICszMTk5LDIyIEBACisgCQlvcHRpb25zLT5wZXJtaXRf bG9jYWxfY29tbWFuZCA9IDA7CisgCWlmIChvcHRpb25zLT52aXN1YWxfaG9zdF9rZXkgPT0gLTEp CisgCQlvcHRpb25zLT52aXN1YWxfaG9zdF9rZXkgPSAwOworLQlpZiAob3B0aW9ucy0+aXBfcW9z X2ludGVyYWN0aXZlID09IC0xKQorKwkvKiBpbiB0aGUgZXZlbnQgd2UgYXJlIHVzaW5nIFJGQyA4 MzA1IHRoZW4gd2UKKysJICogbmVlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBRT1MgYXMgdGhl c2UKKysJICogaW50ZXJmZXJlIHdpdGggdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBpbiBvdXIKKysJ ICogdGVzdCBlbnZpcm9ubWVudC4gSSBkb24ndCBrbm93IGlmIGl0IGhhcyBhIHJlYWwgd29ybGQK KysJICogaW1wYWN0IGJ1dCBUT0RPIHRyeSB0byBmaW5kIGEgcmVhbCB3b3JsZCB3YXkgdG8gdGVz dCB0aGlzLgorKwkgKi8KKysJaWYgKG9wdGlvbnMtPmlwX3Fvc19pbnRlcmFjdGl2ZSA9PSAtMSkg eworIAkJb3B0aW9ucy0+aXBfcW9zX2ludGVyYWN0aXZlID0gSVBUT1NfRFNDUF9FRjsKKy0JaWYg KG9wdGlvbnMtPmlwX3Fvc19idWxrID09IC0xKQorKwkJaWYgKG9wdGlvbnMtPnVzZV9oYXBweWV5 ZXMgPT0gMSkKKysJCQlvcHRpb25zLT5pcF9xb3NfaW50ZXJhY3RpdmUgPSBJUFRPU19MT1dERUxB WTsKKysJfQorKwlpZiAob3B0aW9ucy0+aXBfcW9zX2J1bGsgPT0gLTEpIHsKKyAJCW9wdGlvbnMt PmlwX3Fvc19idWxrID0gSVBUT1NfRFNDUF9DUzA7CisrCQlpZiAob3B0aW9ucy0+dXNlX2hhcHB5 ZXllcyA9PSAxKQorKwkJCW9wdGlvbnMtPmlwX3Fvc19idWxrID0gSVBUT1NfVEhST1VHSFBVVDsK KysJfQorIAlpZiAob3B0aW9ucy0+cmVxdWVzdF90dHkgPT0gLTEpCisgCQlvcHRpb25zLT5yZXF1 ZXN0X3R0eSA9IFJFUVVFU1RfVFRZX0FVVE87CisgCWlmIChvcHRpb25zLT5zZXNzaW9uX3R5cGUg PT0gLTEpCitAQCAtMzg3MCw2ICs0MDIzLDE1IEBACisgCWR1bXBfY2ZnX2ZtdGludChvVmlzdWFs SG9zdEtleSwgby0+dmlzdWFsX2hvc3Rfa2V5KTsKKyAJZHVtcF9jZmdfZm10aW50KG9VcGRhdGVI b3N0a2V5cywgby0+dXBkYXRlX2hvc3RrZXlzKTsKKyAJZHVtcF9jZmdfZm10aW50KG9FbmFibGVF c2NhcGVDb21tYW5kbGluZSwgby0+ZW5hYmxlX2VzY2FwZV9jb21tYW5kbGluZSk7CisrCWR1bXBf Y2ZnX2ZtdGludChvVGNwUmN2QnVmUG9sbCwgby0+dGNwX3Jjdl9idWZfcG9sbCk7CisrCWR1bXBf Y2ZnX2ZtdGludChvSFBORGlzYWJsZWQsIG8tPmhwbl9kaXNhYmxlZCk7CisrCWR1bXBfY2ZnX2Zt dGludChvTm9uZVN3aXRjaCwgby0+bm9uZV9zd2l0Y2gpOworKwlkdW1wX2NmZ19mbXRpbnQob05v bmVFbmFibGVkLCBvLT5ub25lX2VuYWJsZWQpOworKwlkdW1wX2NmZ19mbXRpbnQob05vbmVNYWNF bmFibGVkLCBvLT5ub25lbWFjX2VuYWJsZWQpOworKwlkdW1wX2NmZ19mbXRpbnQob0ZhbGxiYWNr LCBvLT5mYWxsYmFjayk7CisrCWR1bXBfY2ZnX2ZtdGludChvTWV0cmljcywgby0+bWV0cmljcyk7 CisrCWR1bXBfY2ZnX2ZtdGludChvVXNlTVBUQ1AsIG8tPnVzZV9tcHRjcCk7CisrCWR1bXBfY2Zn X2ZtdGludChvSGFwcHlFeWVzLCBvLT51c2VfaGFwcHlleWVzKTsKKyAJZHVtcF9jZmdfZm10aW50 KG9XYXJuV2Vha0NyeXB0bywgby0+d2Fybl93ZWFrX2NyeXB0byk7CisgCisgCS8qIEludGVnZXIg b3B0aW9ucyAqLworQEAgLTM4ODIsNiArNDA0NCw5IEBACisgCWR1bXBfY2ZnX2ludChvUmVxdWly ZWRSU0FTaXplLCBvLT5yZXF1aXJlZF9yc2Ffc2l6ZSk7CisgCWR1bXBfY2ZnX2ludChvT2JzY3Vy ZUtleXN0cm9rZVRpbWluZywKKyAJICAgIG8tPm9ic2N1cmVfa2V5c3Ryb2tlX3RpbWluZ19pbnRl cnZhbCk7CisrCWR1bXBfY2ZnX2ludChvTWV0cmljc0ludGVydmFsLCBvLT5tZXRyaWNzX2ludGVy dmFsKTsKKysJZHVtcF9jZmdfaW50KG9GYWxsYmFja1BvcnQsIG8tPmZhbGxiYWNrX3BvcnQpOwor KwlkdW1wX2NmZ19pbnQob0hhcHB5RGVsYXksIG8tPmhhcHB5X2RlbGF5KTsKKyAKKyAJLyogU3Ry aW5nIG9wdGlvbnMgKi8KKyAJZHVtcF9jZmdfc3RyaW5nKG9CaW5kQWRkcmVzcywgby0+YmluZF9h ZGRyZXNzKTsKK0BAIC0zOTA5LDYgKzQwNzQsNyBAQAorIAlkdW1wX2NmZ19zdHJpbmcob1hBdXRo TG9jYXRpb24sIG8tPnhhdXRoX2xvY2F0aW9uKTsKKyAJZHVtcF9jZmdfc3RyaW5nKG9Lbm93bkhv c3RzQ29tbWFuZCwgby0+a25vd25faG9zdHNfY29tbWFuZCk7CisgCWR1bXBfY2ZnX3N0cmluZyhv VGFnLCBvLT50YWcpOworKwlkdW1wX2NmZ19zdHJpbmcob01ldHJpY3NQYXRoLCBvLT5tZXRyaWNz X3BhdGgpOworIAlkdW1wX2NmZ19zdHJpbmcob1ZlcnNpb25BZGRlbmR1bSwgby0+dmVyc2lvbl9h ZGRlbmR1bSk7CisgCisgCS8qIEZvcndhcmRzICovCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEu b3JpZy9yZWFkY29uZi5oIG9wZW5zc2gtMTAuM3AxL3JlYWRjb25mLmgKKy0tLSBvcGVuc3NoLTEw LjNwMS5vcmlnL3JlYWRjb25mLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAK KysrKyBvcGVuc3NoLTEwLjNwMS9yZWFkY29uZi5oCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzI5MTc2 ODA5ICswMjAwCitAQCAtMTI5LDYgKzEyOSwyMyBAQAorIAlpbnQJZW5hYmxlX3NzaF9rZXlzaWdu OworIAlpbnQ2NF90IHJla2V5X2xpbWl0OworIAlpbnQJcmVrZXlfaW50ZXJ2YWw7CisrCisrCS8q IGhwbnNzaCBvcHRpb25zICovCisrCWludCAgICAgdGNwX3Jjdl9idWZfcG9sbDsgLyogT3B0aW9u IHRvIHBvbGwgcmVjdiBidWYgZXZlcnkgd2luZG93IHRyYW5zZmVyICovCisrCWludCAgICAgaHBu X2Rpc2FibGVkOyAgICAgLyogU3dpdGNoIHRvIGRpc2FibGUgSFBOIGJ1ZmZlciBtYW5hZ2VtZW50 ICovCisrCWludCAgICAgbm9uZV9zd2l0Y2g7ICAgIC8qIFVzZSBub25lIGNpcGhlciAqLworKwlp bnQgICAgIG5vbmVfZW5hYmxlZDsgICAvKiBBbGxvdyBub25lIHRvIGJlIHVzZWQgKi8KKysJaW50 ICAgICBub25lbWFjX2VuYWJsZWQ7ICAgLyogQWxsb3cgbm9uZSB0byBiZSB1c2VkICovCisrCWlu dCAgICAgZGlzYWJsZV9tdWx0aXRocmVhZGVkOyAvKiBEaXNhYmxlIG11bHRpdGhyZWFkZWQgYWVz LWN0ciAqLworKwlpbnQgICAgIG1ldHJpY3M7IC8qIGVuYWJsZSBtZXRyaWNzICovCisrCWludCAg ICAgbWV0cmljc19pbnRlcnZhbDsgLyogdGltZSBpbiBzZWNvbmRzIGJldHdlZW4gcG9sbHMgKi8K KysJY2hhciAgICptZXRyaWNzX3BhdGg7IC8qIHBhdGggZm9yIHRoZSBtZXRyaWNzIGZpbGVzICov CisrCWludCAgICAgZmFsbGJhY2s7IC8qIGVufGRpc2FibGUgZmFsbGJhY2sgcG9ydCAoZGVmOiB0 cnVlKSAqLworKwlpbnQgICAgIGZhbGxiYWNrX3BvcnQ7IC8qIHBvcnQgdG8gZmFsbGJhY2sgdG8g KGRlZjogMjIpICovCisrCWludCAgICAgdXNlX21wdGNwOyAvKiB1c2UgTXVsdGlQYXRoIFRDUCAq LworKwlpbnQgICAgIHVzZV9oYXBweWV5ZXM7IC8qIHVzZSBSRkMgODMwNSAtIEhhcHB5IEV5ZWJh bGxzICovCisrCWludCAgICAgaGFwcHlfZGVsYXk7IC8qIHVzZXIgZGVmaW5lZCBkbGVheSBmb3Ig UkZDIDgzMDUgKi8KKysKKyAJaW50CW5vX2hvc3RfYXV0aGVudGljYXRpb25fZm9yX2xvY2FsaG9z dDsKKyAJaW50CWlkZW50aXRpZXNfb25seTsKKyAJaW50CXNlcnZlcl9hbGl2ZV9pbnRlcnZhbDsK K2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL1JFQURNRS5tZCBvcGVuc3NoLTEwLjNwMS9S RUFETUUubWQKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL1JFQURNRS5tZAkyMDI2LTA3LTAyIDAw OjI3OjA2LjA4OTM5NDI4MCArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL1JFQURNRS5tZAkyMDI2 LTA3LTAyIDA4OjQ2OjI0LjgyMDAxOTU4OCArMDIwMAorQEAgLTEsMTkgKzEsMjMgQEAKKy0jIFBv cnRhYmxlIE9wZW5TU0gKKysjIEhQTlNTSDogQmFzZWQgb24gUG9ydGFibGUgT3BlblNTSAorK0hQ Ti1TU0ggaXMgYSBoaWdoIHBlcmZvcm1hbmNlIHNvZnQgZm9yayBvZiBPcGVuU1NIIHRoYXQgY2Fu IHByb3ZpZGUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhyb3VnaHB1dCBmb3IgYnVsayBkYXRhIHRy YW5zZmVycyBvdmVyIGEgd2lkZSByYW5nZSBvZiBuZXR3b3JrIHBhdGhzLiBJbiBzb21lIHNpdHVh dGlvbnMgd2UndmUgc2VlbiB0aHJvdWdocHV0IHJhdGVzIG1vcmUgdGhhbiAxMDAgdGltZXMgZmFz dGVyIHRoYW4gT3BlblNTSC4gSFBOLVNTSCBpcyBhYmxlIHRvIGRvIHRoaXMgYnkgb3B0aW1pemlu ZyB0aGUgYXBwbGljYXRpb24gbGF5ZXIgcmVjZWl2ZSBidWZmZXIgdG8gbWF0Y2ggdGhlIFRDUCBy ZWNlaXZlIGJ1ZmZlci4gTm90YWJseSwgdG8gc2VlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBI UE4tU1NIIG9ubHkgbmVlZHMgdG8gYmUgdGhlIGRhdGEgcmVjZWl2ZXIgc28gdXNlcnMgY2FuIHNl ZSBub3RhYmxlIGltcHJvdmVtZW50cyB3aXRoIG1hbnkgb3RoZXIgU1NIIGltcGxlbWVudGF0aW9u cy4gSFBOLVNTSCBhbHNvIGluY29ycG9yYXRlcyB0d28gcGFyYWxsZWxpemVkIGNpcGhlcnMsIEFF Uy1DVFIgYW5kIENoYWNoYTIwICh0aGUgZGVmYXVsdCkuIFdoZW4gdXNpbmcgdGhlc2UgY2lwaGVy cyBhIHRocm91Z2hwdXQgcGVyZm9ybWFuY2UgaW5jcmVhc2Ugb2YgMzAlIGlzIHR5cGljYWwuIE1v cmUgaW5mb3JtYXRpb24gb24gaG93IHdlIGRvIHRoaXMgd29yayBhbmQgb3RoZXIgZmVhdHVyZXMg b2YgSFBOLVNTSCBpcyBhdmFpbGFibGUgZnJvbSBbaHR0cHM6Ly9ocG5zc2gub3JnXShodHRwczov L2hwbnNzaC5vcmcpLgorIAorLVshW0MvQysrIENJXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy9j LWNwcC55bWwvYmFkZ2Uuc3ZnKV0oLi4vLi4vYWN0aW9ucy93b3JrZmxvd3MvYy1jcHAueW1sKQor LVshW1ZNIENJXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy92bS55bWwvYmFkZ2Uuc3ZnKV0oLi4v Li4vYWN0aW9ucy93b3JrZmxvd3Mvdm0ueW1sKQorLVshW0MvQysrIENJIHNlbGYtaG9zdGVkXSho dHRwczovL2dpdGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlLXNlbGZob3N0ZWQvYWN0 aW9ucy93b3JrZmxvd3Mvc2VsZmhvc3RlZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIu Y29tL29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS1zZWxmaG9zdGVkL2FjdGlvbnMvd29ya2Zsb3dz L3NlbGZob3N0ZWQueW1sKQorLVshW0NJRnV6el0oLi4vLi4vYWN0aW9ucy93b3JrZmxvd3MvY2lm dXp6LnltbC9iYWRnZS5zdmcpXSguLi8uLi9hY3Rpb25zL3dvcmtmbG93cy9jaWZ1enoueW1sKQor LVshW0Z1enppbmcgU3RhdHVzXShodHRwczovL29zcy1mdXp6LWJ1aWxkLWxvZ3Muc3RvcmFnZS5n b29nbGVhcGlzLmNvbS9iYWRnZXMvb3BlbnNzaC5zdmcpXShodHRwczovL2lzc3Vlcy5vc3MtZnV6 ei5jb20vaXNzdWVzP3E9IlByb2plY3Q6K29wZW5zc2giK2lzOm9wZW4pCistWyFbQ292ZXJpdHkg U3RhdHVzXShodHRwczovL3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzLzIxMzQxL2JhZGdlLnN2 ZyldKGh0dHBzOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvb3BlbnNzaC1wb3J0YWJsZSkK KytTdGFydGluZyB3aXRoIHZlcnNpb24gSFBOMTd2MCB0aGVyZSB3aWxsIGJlIHNpZ25pZmljYW50 IGNoYW5nZXMgdG8gdGhlIG5hbWluZyBjb252ZW50aW9uIHVzZWQgZm9yIGV4ZWN1dGFibGVzIGFu ZCBpbnN0YWxsYXRpb24gbG9jYXRpb25zLiBUaGUgbGFzdCB2ZXJzaW9uIHRoYXQgZG9lcyBub3Qg aW5jbHVkZSB0aGVzZSBjaGFuZ2VzIGlzIEhQTjE2djEgY29ycmVzcG9uZGluZyB0byB0aGUgSFBO LThfOF9QMSB0YWcgb24gdGhlIG1hc3RlciBicmFuY2guCisgCistT3BlblNTSCBpcyBhIGNvbXBs ZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTU0ggcHJvdG9jb2wgKHZlcnNpb24gMikgZm9yIHNl Y3VyZSByZW1vdGUgbG9naW4sIGNvbW1hbmQgZXhlY3V0aW9uIGFuZCBmaWxlIHRyYW5zZmVyLiBJ dCBpbmNsdWRlcyBhIGNsaWVudCBgYHNzaGBgIGFuZCBzZXJ2ZXIgYGBzc2hkYGAsIGZpbGUgdHJh bnNmZXIgdXRpbGl0aWVzIGBgc2NwYGAgYW5kIGBgc2Z0cGBgIGFzIHdlbGwgYXMgdG9vbHMgZm9y IGtleSBnZW5lcmF0aW9uIChgYHNzaC1rZXlnZW5gYCksIHJ1bi10aW1lIGtleSBzdG9yYWdlIChg YHNzaC1hZ2VudGBgKSBhbmQgYSBudW1iZXIgb2Ygc3VwcG9ydGluZyBwcm9ncmFtcy4KKytIUE5T U0ggaXMgYSB2YXJpYW50IG9mIE9wZW5TU0guIEl0IGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24g b2YgdGhlIFNTSCBwcm90b2NvbCAodmVyc2lvbiAyKSBmb3Igc2VjdXJlIHJlbW90ZSBsb2dpbiwg Y29tbWFuZCBleGVjdXRpb24gYW5kIGZpbGUgdHJhbnNmZXIuIEl0IGluY2x1ZGVzIGEgY2xpZW50 IGBgaHBuc3NoYGAgYW5kIHNlcnZlciBgYGhwbnNzaGRgYCwgZmlsZSB0cmFuc2ZlciB1dGlsaXRp ZXMgYGBocG5zY3BgYCBhbmQgYGBocG5zZnRwYGAgYXMgd2VsbCBhcyB0b29scyBmb3Iga2V5IGdl bmVyYXRpb24gKGBgaHBuc3NoLWtleWdlbmBgKSwgcnVuLXRpbWUga2V5IHN0b3JhZ2UgKGBgaHBu c3NoLWFnZW50YGApIGFuZCBhIG51bWJlciBvZiBzdXBwb3J0aW5nIHByb2dyYW1zLiBJdCBpbmNs dWRlcyBudW1lcm91cyBwZXJmb3JtYW5jZSBhbmQgZnVuY3Rpb25hbGl0eSBlbmhhbmNlbWVudHMg Zm9jdXNlZCBvbiBoaWdoIHBlcmZvcm1hbmNlIG5ldHdvcmtzIGFuZCBjb21wdXRpbmcgZW52cmly b25tZW50cy4gQ29tcGxldGUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBIUE4tUkVB RE1FIGZpbGUuCisgCistVGhpcyBpcyBhIHBvcnQgb2YgT3BlbkJTRCdzIFtPcGVuU1NIXShodHRw czovL29wZW5zc2guY29tKSB0byBtb3N0IFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcywgaW5j bHVkaW5nIExpbnV4LCBPUyBYIGFuZCBDeWd3aW4uIFBvcnRhYmxlIE9wZW5TU0ggcG9seWZpbGxz IE9wZW5CU0QgQVBJcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGVsc2V3aGVyZSwgYWRkcyBzc2hk IHNhbmRib3hpbmcgZm9yIG1vcmUgb3BlcmF0aW5nIHN5c3RlbXMgYW5kIGluY2x1ZGVzIHN1cHBv cnQgZm9yIE9TLW5hdGl2ZSBhdXRoZW50aWNhdGlvbiBhbmQgYXVkaXRpbmcgKGUuZy4gdXNpbmcg UEFNKS4KKytJdCBpcyBmdWxseSBjb21wYXRpYmxlIHdpdGggYWxsIGNvbXBsaWFudCBpbXBsZW1l bnRhdGlvbnMgb2YgdGhlIFNTSCBwcm90b2NvbCBhbmQgT3BlblNTSCBpbiBwYXJ0aWN1bGFyLgor KworK1RoaXMgdmVyc2lvbiBvZiBIUE5TU0ggaXMgc2lnbmlmaWNhbnQgZGVwYXJ0dXJlIGluIHRl cm1zIG9mIG5hbWluZyBleGVjdXRhYmxlcyBhbmQgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucy4gU3Bl Y2lmaWNhbGx5LCBhbGwgZXhlY3V0YWJsZXMgYXJlIG5vdyBwcmVmaXhlZCB3aXRoIGBgaHBuYGAu IFNvIGBgc3NoYGAgYmVjb21lcyBgYGhwbnNzaGBgIGFuZCBgYHNjcGBgIGlzIG5vdyBgYGhwbnNj cGBgLiBDb25maWd1YXRpb24gZmlsZXMgYW5kIGhvc3Qga2V5cyBjYW4gbm93IGJlIGZvdW5kIGlu IGBgL2V0Yy9ocG5zc2hgYC4gQnkgZGVmYXVsdCBgYGhwbnNzaGRgYCBub3cgcnVucyBvbiBwb3J0 IDIyMjIgYnV0IHRoaXMgaXMgY29uZmlndXJhYmxlLiBUaGlzIGNoYW5nZSB3YXMgbWFkZSBpbiBv cmRlciB0byBwcmV2ZW50IGluc3RhbGxhdGlvbnMgb2YgaHBuc3NoLCBwYXJ0aWN1bGFybHkgZnJv bSBwYWNrYWdlIGRpc3RyaWJ1dGlvbnMsIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBkZWZhdWx0IGlu c3RhbGxhdGlvbnMgb2YgT3BlblNTSC4gSFBOU1NIIGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdp dGggYWxsIHZlcnNpb25zIG9mIE9wZW5TU0ggaW5jbHVkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMs IGtleXMsIGFuZCBydW4gdGltZSBvcHRpb25zLiBBZGRpdGlvbmFsbHksIHRoZSBjbGllbnQgd2ls bCwgYnkgZGVmYXVsdCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gcG9ydCAyMjIyIGJ1dCB3aWxsIGF1 dG9tYXRpY2FsbHkgZmFsbCBiYWNrIHRvIHBvcnQgMjIuIFRoaXMgaXMgYWxzbyB1c2VyIGNvbmZp Z3VyYWJsZS4KKysKKytIUE5TU0ggaXMgYmFzZWQgb24gT3BlblNTSCBwb3J0YWJsZS4gVGhpcyBp cyBhIHBvcnQgb2YgT3BlbkJTRCdzIFtPcGVuU1NIXShodHRwczovL29wZW5zc2guY29tKSB0byBt b3N0IFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcywgaW5jbHVkaW5nIExpbnV4LCBPUyBYIGFu ZCBDeWd3aW4uIFBvcnRhYmxlIE9wZW5TU0ggcG9seWZpbGxzIE9wZW5CU0QgQVBJcyB0aGF0IGFy ZSBub3QgYXZhaWxhYmxlIGVsc2V3aGVyZSwgYWRkcyBzc2hkIHNhbmRib3hpbmcgZm9yIG1vcmUg b3BlcmF0aW5nIHN5c3RlbXMgYW5kIGluY2x1ZGVzIHN1cHBvcnQgZm9yIE9TLW5hdGl2ZSBhdXRo ZW50aWNhdGlvbiBhbmQgYXVkaXRpbmcgKGUuZy4gdXNpbmcgUEFNKS4KKysKKytUaGlzIGRvY3Vt ZW50IHdpbGwgYmUgY2hhbmdpbmcgb3ZlciB0aW1lIHRvIHJlZmxlY3QgbmV3IGNoYW5nZXMgYW5k IGZlYXR1cmVzLiBUaGlzIGRvY3VtZW50IGlzIGJ1aWx0IG9mZiBvZiB0aGUgT3BlblNTSCBSRUFE TUUubWQKKysKKytDdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHJlbGVhc2UgZmVhdHVyZXMgYXJl IGF2YWlsYWJsZSBpbiB0aGUgSFBOLVJFQURNRSBkb2N1bWVudC4KKyAKKyAjIyBEb2N1bWVudGF0 aW9uCisgCistVGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gZm9yIE9wZW5TU0ggYXJlIHRoZSBt YW4gcGFnZXMgZm9yIGVhY2ggdG9vbDoKKytUaGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmb3Ig SFBOLVNTSCBhcmUgdGhlIG1hbiBwYWdlcyBmb3IgZWFjaCB0b29sLgorIAorICogW3NzaCgxKV0o aHR0cHM6Ly9tYW4ub3BlbmJzZC5vcmcvc3NoLjEpCisgKiBbc3NoZCg4KV0oaHR0cHM6Ly9tYW4u b3BlbmJzZC5vcmcvc3NoZC44KQorQEAgLTI0LDE3ICsyOCwxOCBAQAorICogW3NzaC1rZXlzY2Fu KDgpXShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zc2gta2V5c2Nhbi44KQorICogW3NmdHAtc2Vy dmVyKDgpXShodHRwczovL21hbi5vcGVuYnNkLm9yZy9zZnRwLXNlcnZlci44KQorIAorLSMjIFN0 YWJsZSBSZWxlYXNlcworK0FsbCBvcHRpb25zIGluIE9wZW5TU0ggYXJlIHJlc3BlY3RlZCBieSBI UE4tU1NILgorIAorLVN0YWJsZSByZWxlYXNlIHRhcmJhbGxzIGFyZSBhdmFpbGFibGUgZnJvbSBh IG51bWJlciBvZiBbZG93bmxvYWQgbWlycm9yc10oaHR0cHM6Ly93d3cub3BlbnNzaC5jb20vcG9y dGFibGUuaHRtbCNkb3dubG9hZHMpLiBXZSByZWNvbW1lbmQgdGhlIHVzZSBvZiBhIHN0YWJsZSBy ZWxlYXNlIGZvciBtb3N0IHVzZXJzLiBQbGVhc2UgcmVhZCB0aGUgW3JlbGVhc2Ugbm90ZXNdKGh0 dHBzOi8vd3d3Lm9wZW5zc2guY29tL3JlbGVhc2Vub3Rlcy5odG1sKSBmb3IgZGV0YWlscyBvZiBy ZWNlbnQgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGluY29tcGF0aWJpbGl0aWVzLgorKyMjIEJ1aWxk aW5nIEhQTlNTSAorIAorLSMjIEJ1aWxkaW5nIFBvcnRhYmxlIE9wZW5TU0gKKytEZXRhaWxlZCBz dGVwIGJ5IHN0ZXAgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBmb3VuZCBhdCBodHRwczovL3BzYy5lZHUv aHBuLXNzaC1ob21lLworIAorICMjIyBEZXBlbmRlbmNpZXMKKyAKKy1Qb3J0YWJsZSBPcGVuU1NI IGlzIGJ1aWx0IHVzaW5nIGF1dG9jb25mIGFuZCBtYWtlLiBJdCByZXF1aXJlcyBhIHdvcmtpbmcg QyBjb21waWxlciwgc3RhbmRhcmQgbGlicmFyeSBhbmQgaGVhZGVycy4KKytIUE5TU0ggaXMgYnVp bHQgdXNpbmcgYXV0b2NvbmYgYW5kIG1ha2UuIEl0IHJlcXVpcmVzIGEgd29ya2luZyBDIGNvbXBp bGVyLCBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBoZWFkZXJzLgorIAorLWBgbGliY3J5cHRvYGAgZnJv bSBvbmUgb2YgW0xpYnJlU1NMXShodHRwczovL3d3dy5saWJyZXNzbC5vcmcvKSwgW09wZW5TU0xd KGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnKSwgW0FXUy1MQ10oaHR0cHM6Ly9naXRodWIuY29tL2F3 cy9hd3MtbGMpIG9yIFtCb3JpbmdTU0xdKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvYm9yaW5n c3NsKSBtYXkgYWxzbyBiZSB1c2VkLiAgT3BlblNTSCBtYXkgYmUgYnVpbHQgd2l0aG91dCBlaXRo ZXIgb2YgdGhlc2UsIGJ1dCB0aGUgcmVzdWx0aW5nIGJpbmFyaWVzIHdpbGwgaGF2ZSBvbmx5IGEg c3Vic2V0IG9mIHRoZSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXMgbm9ybWFsbHkgYXZhaWxhYmxl LgorK2BgbGliY3J5cHRvYGAgZnJvbSBvbmUgb2YgW0xpYnJlU1NMXShodHRwczovL3d3dy5saWJy ZXNzbC5vcmcvKSwgW09wZW5TU0xdKGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnKSwgW0FXUy1MQ10o aHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtbGMpIG9yIFtCb3JpbmdTU0xdKGh0dHBzOi8vZ2l0 aHViLmNvbS9nb29nbGUvYm9yaW5nc3NsKSBtYXkgYWxzbyBiZSB1c2VkLiBIUE4tU1NIIG1heSBi ZSBidWlsdCB3aXRob3V0IGVpdGhlciBvZiB0aGVzZSwgYnV0IHRoZSByZXN1bHRpbmcgYmluYXJp ZXMgd2lsbCBoYXZlIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGht cyBub3JtYWxseSBhdmFpbGFibGUuCisrVGhlIGRldmVsb3BlcnMgb2YgSFBOLVNTSCBzdHJvbmds eSBzdWdnZXN0IHRoZSB1c2Ugb2YgT3BlblNTTCAzLjAgb3IgaGlnaGVyIHRvIHN1cHBvcnQgdGhl IGFkdmFuY2VkIGNyeXB0b2dyYXBoeSBtZXRob2RzIHVzZWQuCisgCisgW3psaWJdKGh0dHBzOi8v d3d3LnpsaWIubmV0LykgaXMgb3B0aW9uYWw7IHdpdGhvdXQgaXQgdHJhbnNwb3J0IGNvbXByZXNz aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCisgCitAQCAtNDcsOCArNTIsOSBAQAorIFJlbGVhc2UgdGFy YmFsbHMgYW5kIHJlbGVhc2UgYnJhbmNoZXMgaW4gZ2l0IGluY2x1ZGUgYSBwcmUtYnVpbHQgY29w eSBvZiB0aGUgYGBjb25maWd1cmVgYCBzY3JpcHQgYW5kIG1heSBiZSBidWlsdCB1c2luZzoKKyAK KyBgYGAKKy10YXIgenh2ZiBvcGVuc3NoLVguWXBaLnRhci5negorLWNkIG9wZW5zc2gKKyt0YXIg enh2ZiBocG5zc2gtWC5ZcFoudGFyLmd6CisrY2QgaHBuLXNzaAorK2F1dG9yZWNvbmYgLWYgLWkK KyAuL2NvbmZpZ3VyZSAjIFtvcHRpb25zXQorIG1ha2UgJiYgbWFrZSB0ZXN0cworIGBgYAorQEAg LTU3LDE5ICs2MywxOSBAQAorIAorICMjIyBCdWlsZGluZyBmcm9tIGdpdAorIAorLUlmIGJ1aWxk aW5nIGZyb20gdGhlIGdpdCBtYXN0ZXIgYnJhbmNoLCB5b3UnbGwgbmVlZCBbYXV0b2NvbmZdKGh0 dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvKSBpbnN0YWxsZWQgdG8gYnVpbGQg dGhlIGBgY29uZmlndXJlYGAgc2NyaXB0LiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHdpbGwgY2hl Y2sgb3V0IGFuZCBidWlsZCBwb3J0YWJsZSBPcGVuU1NIIGZyb20gZ2l0OgorK0lmIGJ1aWxkaW5n IGZyb20gdGhlIGdpdCBtYXN0ZXIgYnJhbmNoLCB5b3UnbGwgbmVlZCBbYXV0b2NvbmZdKGh0dHBz Oi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvKSBpbnN0YWxsZWQgdG8gYnVpbGQgdGhl IGBgY29uZmlndXJlYGAgc2NyaXB0LiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIHdpbGwgY2hlY2sg b3V0IGFuZCBidWlsZCBIUE4tU1NIIGZyb20gZ2l0OgorIAorIGBgYAorLWdpdCBjbG9uZSBodHRw czovL2dpdGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlICMgb3IgaHR0cHM6Ly9hbm9u Z2l0Lm1pbmRyb3Qub3JnL29wZW5zc2guZ2l0CistY2Qgb3BlbnNzaC1wb3J0YWJsZQorLWF1dG9y ZWNvbmYKKytnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBuLXNzaAorK2Nk IGhwbi1zc2gKKythdXRvcmVjb25mIC1mIC1pCisgLi9jb25maWd1cmUKKyBtYWtlICYmIG1ha2Ug dGVzdHMKKyBgYGAKKyAKKyAjIyMgQnVpbGQtdGltZSBDdXN0b21pc2F0aW9uCisgCistVGhlcmUg YXJlIG1hbnkgYnVpbGQtdGltZSBjdXN0b21pc2F0aW9uIG9wdGlvbnMgYXZhaWxhYmxlLiBBbGwg QXV0b2NvbmYgZGVzdGluYXRpb24gcGF0aCBmbGFncyAoZS5nLiBgYC0tcHJlZml4YGApIGFyZSBz dXBwb3J0ZWQgKGFuZCBhcmUgdXN1YWxseSByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBpbnN0YWxs IE9wZW5TU0gpLgorK1RoZXJlIGFyZSBtYW55IGJ1aWxkLXRpbWUgY3VzdG9taXNhdGlvbiBvcHRp b25zIGF2YWlsYWJsZS4gQWxsIEF1dG9jb25mIGRlc3RpbmF0aW9uIHBhdGggZmxhZ3MgKGUuZy4g YGAtLXByZWZpeGBgKSBhcmUgc3VwcG9ydGVkIChhbmQgYXJlIHVzdWFsbHkgcmVxdWlyZWQgaWYg eW91IHdhbnQgdG8gaW5zdGFsbCBIUE4tU1NIKS4KKyAKKyBGb3IgYSBmdWxsIGxpc3Qgb2YgYXZh aWxhYmxlIGZsYWdzLCBydW4gYGAuL2NvbmZpZ3VyZSAtLWhlbHBgYCBidXQgYSBmZXcgb2YgdGhl IG1vcmUgZnJlcXVlbnRseS11c2VkIG9uZXMgYXJlIGRlc2NyaWJlZCBiZWxvdy4gU29tZSBvZiB0 aGVzZSBmbGFncyB3aWxsIHJlcXVpcmUgYWRkaXRpb25hbCBsaWJyYXJpZXMgYW5kL29yIGhlYWRl cnMgYmUgaW5zdGFsbGVkLgorIAorQEAgLTc5LDExICs4NSwxMyBAQAorIGBgLS13aXRoLWxpYmVk aXRgYCB8IEVuYWJsZSBbbGliZWRpdF0oaHR0cHM6Ly93d3cudGhyeXNvZWUuZGsvZWRpdGxpbmUv KSBzdXBwb3J0IGZvciBzZnRwLgorIGBgLS13aXRoLWtlcmJlcm9zNWBgIHwgRW5hYmxlIEtlcmJl cm9zL0dTU0FQSSBzdXBwb3J0LiBCb3RoIFtIZWltZGFsXShodHRwczovL3d3dy5oNWwub3JnLykg YW5kIFtNSVRdKGh0dHBzOi8vd2ViLm1pdC5lZHUva2VyYmVyb3MvKSBLZXJiZXJvcyBpbXBsZW1l bnRhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyBgYC0td2l0aC1zZWxpbnV4YGAgfCBFbmFibGUgW1NF TGludXhdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NlY3VyaXR5LUVuaGFuY2VkX0xp bnV4KSBzdXBwb3J0LgorK2BgLS13aXRoLXNlY3VyaXR5LWtleS1idWlsdGluYGAgfCBJbmNsdWRl IGJ1aWx0LWluIHN1cHBvcnQgZm9yIFUyRi9GSURPMiBzZWN1cml0eSBrZXlzLiBUaGlzIHJlcXVp cmVzIFtsaWJmaWRvMl0oaHR0cHM6Ly9naXRodWIuY29tL1l1Ymljby9saWJmaWRvMikgYmUgaW5z dGFsbGVkLgorIAorICMjIERldmVsb3BtZW50CisgCisgUG9ydGFibGUgT3BlblNTSCBkZXZlbG9w bWVudCBpcyBkaXNjdXNzZWQgb24gdGhlIFtvcGVuc3NoLXVuaXgtZGV2IG1haWxpbmcgbGlzdF0o aHR0cHM6Ly9saXN0cy5taW5kcm90Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL29wZW5zc2gtdW5peC1k ZXYpIChbYXJjaGl2ZSBtaXJyb3JdKGh0dHBzOi8vbWFyYy5pbmZvLz9sPW9wZW5zc2gtdW5peC1k ZXYpKS4gQnVncyBhbmQgZmVhdHVyZSByZXF1ZXN0cyBhcmUgdHJhY2tlZCBvbiBvdXIgW0J1Z3pp bGxhXShodHRwczovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnLykuCisrSFBOLVNTSCBkZXZlbG9wbWVu dCBpcyBkaXNjdXNzZWQgb24gdGhlIFtocG5zc2gtY29tbXVuaXR5IG1haWxpbmcgbGlzdF0oaHR0 cHM6Ly9saXN0cy5wc2MuZWR1L21haWxtYW4vbGlzdGluZm8vaHBuc3NoLWNvbW11bml0eSkgYW5k IG9uIHRoZSBbR2l0SHViIERpc2N1c3Npb25zIHBhZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9yYXBp ZXIxL2hwbi1zc2gvZGlzY3Vzc2lvbnMpLgorIAorICMjIFJlcG9ydGluZyBidWdzCisgCistX05v bi1zZWN1cml0eV8gYnVncyBtYXkgYmUgcmVwb3J0ZWQgdG8gdGhlIGRldmVsb3BlcnMgdmlhIFtC dWd6aWxsYV0oaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy8pIG9yIHZpYSB0aGUgbWFpbGlu ZyBsaXN0IGFib3ZlLiBTZWN1cml0eSBidWdzIHNob3VsZCBiZSByZXBvcnRlZCB0byBbb3BlbnNz aEBvcGVuc3NoLmNvbV0obWFpbHRvOm9wZW5zc2gub3BlbnNzaC5jb20pLgorK19Ob24tc2VjdXJp dHlfIGJ1Z3MgbWF5IGJlIHJlcG9ydGVkIHRvIHRoZSBkZXZlbG9wZXJzIHZpYSBbR2l0SHViIElz c3Vlc10oaHR0cHM6Ly9naXRodWIuY29tL3JhcGllcjEvaHBuLXNzaC9pc3N1ZXMpIG9yIHZpYSB0 aGUgbWFpbGluZyBsaXN0IGFib3ZlLiBTZWN1cml0eSBidWdzIHNob3VsZCBiZSByZXBvcnRlZCB0 byBbaHBuc3NoQHBzYy5lZHVdKG1haWx0bzpocG5zc2hAcHNjLmVkdSkuCitkaWZmIC1OdXIgb3Bl bnNzaC0xMC4zcDEub3JpZy9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMgb3BlbnNzaC0xMC4zcDEv c2FuZGJveC1zZWNjb21wLWZpbHRlci5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zYW5kYm94 LXNlY2NvbXAtZmlsdGVyLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKKysr KyBvcGVuc3NoLTEwLjNwMS9zYW5kYm94LXNlY2NvbXAtZmlsdGVyLmMJMjAyNi0wNy0wMiAwMDoy NzoyOS43Mjk3MTI1NDggKzAyMDAKK0BAIC0zMjMsNiArMzIzLDkgQEAKKyAjaWZkZWYgX19OUl9n ZXRldWlkMzIKKyAJU0NfQUxMT1coX19OUl9nZXRldWlkMzIpLAorICNlbmRpZgorKyNpZmRlZiBf X05SX2dldHBlZXJuYW1lIC8qIG5vdCBkZWZpbmVkIG9uIGFyY2hzIHRoYXQgZ28gdmlhIHNvY2tl dGNhbGwoMikgKi8KKysJU0NfQUxMT1coX19OUl9nZXRwZWVybmFtZSksCisrI2VuZGlmCisgI2lm ZGVmIF9fTlJfZ2V0cGdpZAorIAlTQ19BTExPVyhfX05SX2dldHBnaWQpLAorICNlbmRpZgorQEAg LTQ0NCw2ICs0NDcsOSBAQAorICNpZmRlZiBfX05SX3NpZ3Byb2NtYXNrCisgCVNDX0FMTE9XKF9f TlJfc2lncHJvY21hc2spLAorICNlbmRpZgorKyNpZmRlZiBfX05SX3NvY2tldGNhbGwKKysJU0Nf QUxMT1coX19OUl9zb2NrZXRjYWxsKSwKKysjZW5kaWYKKyAjaWZkZWYgX19OUl90aW1lCisgCVND X0FMTE9XKF9fTlJfdGltZSksCisgI2VuZGlmCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9zY3AuMSBvcGVuc3NoLTEwLjNwMS9zY3AuMQorLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2Nw LjEJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNw MS9zY3AuMQkyMDI2LTA3LTAyIDA5OjE4OjIxLjAxMTUxNzM3NSArMDIwMAorQEAgLTE4LDcgKzE4 LDcgQEAKKyAuTmQgT3BlblNTSCBzZWN1cmUgZmlsZSBjb3B5CisgLlNoIFNZTk9QU0lTCisgLk5t IHNjcAorLS5PcCBGbCAzNDZBQkNPcHFScnNUdgorKy5PcCBGbCAzNDZBQkNPcHFScnNUdloKKyAu T3AgRmwgYyBBciBjaXBoZXIKKyAuT3AgRmwgRCBBciBzZnRwX3NlcnZlcl9wYXRoCisgLk9wIEZs IEYgQXIgc3NoX2NvbmZpZworQEAgLTMzLDYgKzMzLDggQEAKKyAuU2ggREVTQ1JJUFRJT04KKyAu Tm0KKyBjb3BpZXMgZmlsZXMgYmV0d2VlbiBob3N0cyBvbiBhIG5ldHdvcmsuCisrSXQgaXMgYmlu YXJ5IGNvbXBhdGlibGUgd2l0aCBPcGVuU1NIJ3Mgc2NwIGluY2x1ZGluZworK3RoZSB1c2Ugb2Yg dGhlIHNhbWUgZGlyZWN0aXZlcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGV4Y2VwdCB3aGVy ZSBub3RlZC4gCisgLlBwCisgLk5tCisgdXNlcyB0aGUgU0ZUUCBwcm90b2NvbCBvdmVyIGFuCitA QCAtMjU4LDYgKzI2MCw3IEBACisgLkl0IFR1bm5lbAorIC5JdCBUdW5uZWxEZXZpY2UKKyAuSXQg VXBkYXRlSG9zdEtleXMKKysuSXQgVXNlTVBUQ1AKKyAuSXQgVXNlcgorIC5JdCBVc2VyS25vd25I b3N0c0ZpbGUKKyAuSXQgVmVyaWZ5SG9zdEtleUROUworQEAgLTI5NCw2ICsyOTcsMTAgQEAKKyBO b3RlIHRoYXQKKyAuTm0KKyBmb2xsb3dzIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkIGluIHRo ZSB0cmVlIHRyYXZlcnNhbC4KKysuSXQgRmwgWgorK1Jlc3VtZSBmYWlsZWQgb3IgaW50ZXJydXB0 ZWQgdHJhbnNmZXIuIElkZW50aWNhbCBmaWxlcyB3aWxsIGJlIHNraXBwZWQuIFJlbW90ZSBtdXN0 IGhhdmUgcmVzdW1lIG9wdGlvbi4KKysuTm0KKytvbmx5IG9wdGlvbi4KKyAuSXQgRmwgUyBBciBw cm9ncmFtCisgTmFtZSBvZgorIC5BciBwcm9ncmFtCitAQCAtMzAxLDYgKzMwOCwxNCBAQAorIFRo ZSBwcm9ncmFtIG11c3QgdW5kZXJzdGFuZAorIC5YciBzc2ggMQorIG9wdGlvbnMuCisrLkl0IEZs IHogQXIgcHJvZ3JhbQorK1BhdGggdG8gaHBuc2NwIG9uIHJlbW90ZSBzeXN0ZW0uIFVzZWZ1bCBp ZiByZW1vdGUgaGFzIG11bHRpcGxlIHNjcCBpbnN0YWxscy4KKytGb3IgZXhhbXBsZSwgdXNpbmcg dGhlIHJlc3VtZSBvcHRpb24gYnV0IHRoZSBkZWZhdWx0IHJlbW90ZSBzY3AgZG9lcyBub3QgaGF2 ZSB0aGUgcmVzdW1lIG9wdGlvbi4KKytVc2UgLXogdG8gcG9pbnQgdGhlIHZlcnNpb24gdGhhdCBk b2VzIC0gZS5nLiAteiAvb3B0L2hwbnNzaC9iaW4vaHBuc2NwLgorKy5ObQorK29ubHkgb3B0aW9u LiAKKysuSXQgRmwgcworK1VzZSB0aGUgU0ZUUCBwcm90b2NvbCBmb3IgdHJhbnNmZXJzIHJhdGhl ciB0aGFuIHRoZSBvcmlnaW5hbCBzY3AgcHJvdG9jb2wuCisgLkl0IEZsIFQKKyBEaXNhYmxlIHN0 cmljdCBmaWxlbmFtZSBjaGVja2luZy4KKyBCeSBkZWZhdWx0IHdoZW4gY29weWluZyBmaWxlcyBm cm9tIGEgcmVtb3RlIGhvc3QgdG8gYSBsb2NhbCBkaXJlY3RvcnkKK0BAIC0zMjcsMTAgKzM0Miwx MyBAQAorIC5JdCBDbSBucmVxdWVzdHMgTnMgPSBOcyBBciB2YWx1ZQorIENvbnRyb2xzIGhvdyBt YW55IGNvbmN1cnJlbnQgU0ZUUCByZWFkIG9yIHdyaXRlIHJlcXVlc3RzIG1heSBiZSBpbiBwcm9n cmVzcworIGF0IGFueSBwb2ludCBpbiB0aW1lIGR1cmluZyBhIGRvd25sb2FkIG9yIHVwbG9hZC4K Ky1CeSBkZWZhdWx0IDY0IHJlcXVlc3RzIG1heSBiZSBhY3RpdmUgY29uY3VycmVudGx5LgorK1Ro aXMgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDgxOTIuCisrQnkgZGVmYXVsdCAxMDI0IHJl cXVlc3RzIG1heSBiZSBhY3RpdmUgY29uY3VycmVudGx5LgorIC5JdCBDbSBidWZmZXIgTnMgPSBO cyBBciB2YWx1ZQorIENvbnRyb2xzIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplIGZvciBhIHNpbmds ZSBTRlRQIHJlYWQvd3JpdGUgb3BlcmF0aW9uIHVzZWQKKyBkdXJpbmcgZG93bmxvYWQgb3IgdXBs b2FkLgorK1RoaXMgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDFCIGFuZCAyNTVLQi4gWW91IG1heSB1 c2UKKyt0aGUgSyB1bml0IGZvciB0aGUgc2l6ZS4gRS5nLiAzMjc2OCBvciAzMksuCisgQnkgZGVm YXVsdCBhIDMyS0IgYnVmZmVyIGlzIHVzZWQuCisgLkVsCisgLkVsCitAQCAtMzY0LDYgKzM4Miw3 IEBACisgLlNoIEFVVEhPUlMKKyAuQW4gVGltbyBSaW5uZSBBcSBNdCB0cmlAaWtpLmZpCisgLkFu IFRhdHUgWWxvbmVuIEFxIE10IHlsb0Bjcy5odXQuZmkKKysuQW4gQ2hyaXMgUmFwaWVyIEFxIE10 IHJhcGllckBwc2MuZWR1CisgLlNoIENBVkVBVFMKKyBUaGUgbGVnYWN5IFNDUCBwcm90b2NvbCAo c2VsZWN0ZWQgYnkgdGhlCisgLkZsIE8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nj cC5jIG9wZW5zc2gtMTAuM3AxL3NjcC5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zY3AuYwky MDI2LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3Nj cC5jCTIwMjYtMDctMDIgMTA6MTY6MTYuMzI3Mjc5NTc1ICswMjAwCitAQCAtMTcsNiArMTcsNyBA QAorIC8qCisgICogQ29weXJpZ2h0IChjKSAxOTk5IFRoZW8gZGUgUmFhZHQuICBBbGwgcmlnaHRz IHJlc2VydmVkLgorICAqIENvcHlyaWdodCAoYykgMTk5OSBBYXJvbiBDYW1wYmVsbC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICogQ29weXJpZ2h0IChjKSAyMDIxIENocmlzIFJhcGllci4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworQEAg LTExMyw2ICsxMTQsMTIgQEAKKyAjaW5jbHVkZSAibWlzYy5oIgorICNpbmNsdWRlICJwcm9ncmVz c21ldGVyLmgiCisgI2luY2x1ZGUgInV0ZjguaCIKKysvKiBsaWJyZXNzbCBkb2Vzbid0IHN1cHBv cnQgdGhlIGJsYWtlMmI1MTIgZGlnZXN0IHNvCisrICogd2UgbmVlZCB0byBwcmV2ZW50IGxpYnJl c3NsIGZyb20gdXNpbmcgdGhlIHJlc3VtZSBmZWF0dXJlCisrICogY2pyIDcvMTgvMjAyMyAqLwor KyNpZiAoZGVmaW5lZCBXSVRIX09QRU5TU0wpICYmICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05f TlVNQkVSKQorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNlbmRpZgorICNpbmNsdWRlICJz ZnRwLmgiCisgCisgI2luY2x1ZGUgInNmdHAtY29tbW9uLmgiCitAQCAtMTU1LDYgKzE2MiwxMCBA QAorIC8qIFRoaXMgaXMgdGhlIHByb2dyYW0gdG8gZXhlY3V0ZSBmb3IgdGhlIHNlY3VyZSBjb25u ZWN0aW9uLiAoInNzaCIgb3IgLVMpICovCisgY2hhciAqc3NoX3Byb2dyYW0gPSBfUEFUSF9TU0hf UFJPR1JBTTsKKyAKKysvKiB0aGlzIGlzIHBhdGggdG8gdGhlIHJlbW90ZSBzY3AgcHJvZ3JhbSBh bGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5CisrICogYSBub24tZGVmYXVsdCBzY3AgKi8KKytj aGFyICpyZW1vdGVfcGF0aDsKKysKKyAvKiBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHBpZCBv ZiBzc2hfcHJvZ3JhbSAqLworIHBpZF90IGRvX2NtZF9waWQgPSAtMTsKKyBwaWRfdCBkb19jbWRf cGlkMiA9IC0xOworQEAgLTE2OSw2ICsxODAsMTcgQEAKKyBpbnQgc2Z0cF9nbG9iKHN0cnVjdCBz ZnRwX2Nvbm4gKiwgY29uc3QgY2hhciAqLCBpbnQsCisgICAgIGludCAoKikoY29uc3QgY2hhciAq LCBpbnQpLCBnbG9iX3QgKik7IC8qIHByb3RvIGZvciBzZnRwLWdsb2IuYyAqLworIAorKy8qIEZs YWcgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGlzIGEgZmlsZSByZXN1bWUgKi8KKytpbnQgcmVzdW1l X2ZsYWcgPSAwOyAvKiAwIGlzIG9mZiwgMSBpcyBvbiAqLworKworKy8qIHdlIHdhbnQgdGhlIGhv c3QgbmFtZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCisrY2hhciBob3N0bmFtZVtIT1NUX05B TUVfTUFYICsgMV07CisrCisrLyogZGVmaW5lcyBmb3IgdGhlIHJlc3VtZSBmdW5jdGlvbi4gTmVl ZCB0aGVtIGV2ZW4gaWYgbm90IHN1cHBvcnRlZCAqLworKyNkZWZpbmUgSEFTSF9MRU4gMTI4ICAg ICAgICAgICAgICAgLyo0MCBzaGExLCA2NCBibGFrZTJzMjU2IDEyOCBibGFrZTJiNTEyKi8KKysj ZGVmaW5lIEJVRl9BTkRfSEFTSCBIQVNIX0xFTiArIDY0IC8qIGxlbmd0aCBvZiB0aGUgaGFzaCBh bmQgb3RoZXIgZGF0YSB0byBnZXQgc2l6ZSBvZiBidWZmZXIgKi8KKysjZGVmaW5lIEhBU0hfQlVG TEVOIDgxOTIJICAgLyogODE5MiBzZWVtcyB0byBiZSBhIGdvb2QgYmFsYW5jZSBiZXR3ZWVuIGZy ZWFkcworKwkJCQkgICAgKiBhbmQgdGhlIGRpZ2VzdCBmdW5jKi8KKyBzdGF0aWMgdm9pZAorIGtp bGxjaGlsZChpbnQgc2lnbm8pCisgeworQEAgLTIxNiw2ICsyMzgsOSBAQAorIAlpbnQgc3RhdHVz OworIAlwaWRfdCBwaWQ7CisgCisrI2lmZGVmIERFQlVHCisrCWZwcmludGYoc3RkZXJyLCAiSW4g ZG9fbG9jYWxfY21kXG4iKTsKKysjZW5kaWYKKyAJaWYgKGEtPm51bSA9PSAwKQorIAkJZmF0YWwo ImRvX2xvY2FsX2NtZDogbm8gYXJndW1lbnRzIik7CisgCitAQCAtNDQxLDYgKzQ2Niw4IEBACisg dm9pZCB0b2xvY2FsKGludCwgY2hhciAqW10sIGVudW0gc2NwX21vZGVfZSwgY2hhciAqc2Z0cF9k aXJlY3QpOworIHZvaWQgdG9yZW1vdGUoaW50LCBjaGFyICpbXSwgZW51bSBzY3BfbW9kZV9lLCBj aGFyICpzZnRwX2RpcmVjdCk7Cisgdm9pZCB1c2FnZSh2b2lkKTsKKyt2b2lkIGNhbGN1bGF0ZV9o YXNoKGNoYXIgKiwgY2hhciAqLCBvZmZfdCk7IC8qZ2V0IHRoZSBoYXNoIG9mIGZpbGUgdG8gbGVu Z3RoKi8KKyt2b2lkIHJhbmRfc3RyKGNoYXIgKiwgc2l6ZV90KTsgLypnZW4gcmFuZG9tZSBjaGFy IHN0cmluZyAqLworIAorIHZvaWQgc291cmNlX3NmdHAoaW50LCBjaGFyICosIGNoYXIgKiwgc3Ry dWN0IHNmdHBfY29ubiAqKTsKKyB2b2lkIHNpbmtfc2Z0cChpbnQsIGNoYXIgKiwgY29uc3QgY2hh ciAqLCBzdHJ1Y3Qgc2Z0cF9jb25uICopOworQEAgLTQ1OSwxMSArNDg2LDE4IEBACisgCWNoYXIg KnNmdHBfZGlyZWN0ID0gTlVMTDsKKyAJbG9uZyBsb25nIGxsdjsKKyAKKysJLyogd2UgdXNlIHRo aXMgdG8gcHJlcGVuZCB0aGUgZGVidWdnaW5nIHN0YXRlbWVudHMKKysJICogc28gd2Uga25vdyB3 aGljaCBzaWRlIGlzIHNheWluZyB3aGF0ICovCisrCWdldGhvc3RuYW1lKGhvc3RuYW1lLCBIT1NU X05BTUVfTUFYICsgMSk7CisrCisgCS8qIEVuc3VyZSB0aGF0IGZkcyAwLCAxIGFuZCAyIGFyZSBv cGVuIG9yIGRpcmVjdGVkIHRvIC9kZXYvbnVsbCAqLworIAlzYW5pdGlzZV9zdGRmZCgpOworIAor IAltc2V0bG9jYWxlKCk7CisgCisrCS8qIGZvciB1c2Ugd2l0aCByYW5kIGZ1bmN0aW9uIHdoZW4g cmVzdW1lIG9wdGlvbiBpcyB1c2VkKi8KKysJc3JhbmQodGltZShOVUxMKSk7CisrCisgCS8qIENv cHkgYXJndiwgYmVjYXVzZSB3ZSBtb2RpZnkgaXQgKi8KKyAJYXJndjAgPSBhcmd2WzBdOworIAlu ZXdhcmd2ID0geGNhbGxvYyhNQVhJTVVNKGFyZ2MgKyAxLCAxKSwgc2l6ZW9mKCpuZXdhcmd2KSk7 CitAQCAtNDg4LDcgKzUyMiw3IEBACisgCisgCWZmbGFnID0gVGZsYWcgPSB0ZmxhZyA9IDA7Cisg CXdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwKKy0JICAgICIxMjM0NkFCQ1RkZk9wcVJy c3R2RDpGOko6TTpQOlM6YzppOmw6bzpYOiIpKSAhPSAtMSkgeworKwkgICAgIjEyMzQ2QUJDVGRm T3BxUnJzdHZaRDpGOko6TTpQOlM6YzppOmw6bzpYOiIpKSAhPSAtMSkgeworIAkJc3dpdGNoIChj aCkgeworIAkJLyogVXNlci12aXNpYmxlIGZsYWdzLiAqLworIAkJY2FzZSAnMSc6CitAQCAtNTY5 LDI0ICs2MDMsMzYgQEAKKyAJCQlhZGRhcmdzKCZyZW1vdGVfcmVtb3RlX2FyZ3MsICItcSIpOwor IAkJCXNob3dwcm9ncmVzcyA9IDA7CisgCQkJYnJlYWs7CisrI2lmIChkZWZpbmVkIFdJVEhfT1BF TlNTTCkgJiYgIWRlZmluZWQoTElCUkVTU0xfVkVSU0lPTl9OVU1CRVIpCisrCQljYXNlICdaJzoK KysJCQkvKiBjdXJyZW50bHkgcmVzdW1lIG9ubHkgd29ya3MgaW4gU0NQIG1vZGUgKi8KKysJCQly ZXN1bWVfZmxhZyA9IDE7CisrCQkJbW9kZSA9IE1PREVfU0NQOworKwkJCWJyZWFrOworKyNlbmRp ZgorIAkJY2FzZSAnWCc6CisgCQkJLyogUGxlYXNlIGtlZXAgaW4gc3luYyB3aXRoIHNmdHAuYyAt WCAqLworIAkJCWlmIChzdHJuY21wKG9wdGFyZywgImJ1ZmZlcj0iLCA3KSA9PSAwKSB7CisgCQkJ CXIgPSBzY2FuX3NjYWxlZChvcHRhcmcgKyA3LCAmbGx2KTsKKy0JCQkJaWYgKHIgPT0gMCAmJiAo bGx2IDw9IDAgfHwgbGx2ID4gMjU2ICogMTAyNCkpIHsKKysJCQkJLyogZG9uJ3QgYXNrIGZvciBh IGJ1ZmZlciBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bQorKwkJCQkgKiBzaXplIHRoYXQgU0ZUUCBj YW4gaGFuZGxlICovCisrCQkJCWlmIChyID09IDAgJiYgKGxsdiA8PSAwIHx8IGxsdiA+IChTRlRQ X01BWF9NU0dfTEVOR1RIIC0gMTAyNCkpKSB7CisgCQkJCQlyID0gLTE7CisgCQkJCQllcnJubyA9 IEVJTlZBTDsKKyAJCQkJfQorIAkJCQlpZiAociA9PSAtMSkgeworLQkJCQkJZmF0YWwoIkludmFs aWQgYnVmZmVyIHNpemUgXCIlc1wiOiAlcyIsCistCQkJCQkgICAgIG9wdGFyZyArIDcsIHN0cmVy cm9yKGVycm5vKSk7CisrCQkJCQlmYXRhbCgiSW52YWxpZCBidWZmZXIgc2l6ZS4gTXVzdCBiZSBi ZXR3ZWVuIDFCIGFuZCAyNTVLQi4iCisrCQkJCQkgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyA3 LCBzdHJlcnJvcihlcnJubykpOworIAkJCQl9CisgCQkJCXNmdHBfY29weV9idWZsZW4gPSAoc2l6 ZV90KWxsdjsKKyAJCQl9IGVsc2UgaWYgKHN0cm5jbXAob3B0YXJnLCAibnJlcXVlc3RzPSIsIDEw KSA9PSAwKSB7CistCQkJCWxsdiA9IHN0cnRvbnVtKG9wdGFyZyArIDEwLCAxLCAyNTYgKiAxMDI0 LAorKwkJCQkvKiBtb3JlIHRoYW4gMTBrIHRvIDE1ayByZXF1ZXN0cyBzdGFydHMgc3RhbGxpbmcg dGhlIGNvbm5lY3Rpb24KKysJCQkJICogODE5MiAqIGRlZmF1bHQgYnVmZmVyIHNpemUgaXMgMjU2 TUIgb2Ygb3V0c3RhbmRpbmcgZGF0YS4KKysJCQkJICogaWYgdXNlcnMgbmVlZCBtb3JlIHRoZW4g dGhleSBuZWVkIHRvIHVwIHRoZSBidWZmZXIgc2l6ZSAqLworKwkJCQlsbHYgPSBzdHJ0b251bShv cHRhcmcgKyAxMCwgMSwgOCAqIDEwMjQsCisgCQkJCSAgICAmZXJyc3RyKTsKKyAJCQkJaWYgKGVy cnN0ciAhPSBOVUxMKSB7CistCQkJCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMg IgorKwkJCQkJZmF0YWwoIkludmFsaWQgbnVtYmVyIG9mIHJlcXVlc3RzLiBNdXN0IGJlIGJldHdl ZW4gMSBhbmQgODE5Mi4gIgorIAkJCQkJICAgICJcIiVzXCI6ICVzIiwgb3B0YXJnICsgMTAsIGVy cnN0cik7CisgCQkJCX0KKyAJCQkJc2Z0cF9ucmVxdWVzdHMgPSAoc2l6ZV90KWxsdjsKK0BAIC02 NzQsMTEgKzcyMCwxOSBAQAorIAlyZW1pbiA9IHJlbW91dCA9IC0xOworIAlkb19jbWRfcGlkID0g LTE7CisgCS8qIENvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgb24gcmVtb3RlIHN5c3RlbSB1c2luZyAi c3NoIi4gKi8KKy0JKHZvaWQpIHNucHJpbnRmKGNtZCwgc2l6ZW9mIGNtZCwgInNjcCVzJXMlcyVz IiwKKysJLyogSW4gdGhlIGV2ZW50IG9mIGFuIGhwbiB0byBocG4gY29ubmVjdGlvbiB0aGUgc2Nw CisrCSAqIGNvbW1hbmQgaXMgcmV3cml0dGVuIHRvIGhwbnNjcC4gVGhpcyBoYXBwZW5zIGluCisr CSAqIGNsaWVudGxvb3AuYyAtY2pyIDEyLzEyLzIwMjIgKi8KKysKKysJKHZvaWQpIHNucHJpbnRm KGNtZCwgc2l6ZW9mIGNtZCwgIiVzJXMlcyVzJXMlcyIsCisrCSAgICByZW1vdGVfcGF0aCA/IHJl bW90ZV9wYXRoIDogInNjcCIsCisgCSAgICB2ZXJib3NlX21vZGUgPyAiIC12IiA6ICIiLAorIAkg ICAgaWFtcmVjdXJzaXZlID8gIiAtciIgOiAiIiwgcGZsYWcgPyAiIC1wIiA6ICIiLAorLQkgICAg dGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkgPyAiIC1kIiA6ICIiKTsKKy0KKysJICAgIHRhcmdldHNo b3VsZGJlZGlyZWN0b3J5ID8gIiAtZCIgOiAiIiwKKysJICAgIHJlc3VtZV9mbGFnID8gIiAtWiIg OiAiIik7CisrI2lmZGVmIERFQlVHCisrCWZwcmludGYoc3RkZXJyLCAiJXM6IFNlbmRpbmcgY21k ICVzXG4iLCBob3N0bmFtZSwgY21kKTsKKysjZW5kaWYKKyAJKHZvaWQpIHNzaF9zaWduYWwoU0lH UElQRSwgbG9zdGNvbm4pOworIAorIAlpZiAoY29sb24oYXJndlthcmdjIC0gMV0pKQkvKiBEZXN0 IGlzIHJlbW90ZSBob3N0LiAqLworQEAgLTY4OCw2ICs3NDIsNyBAQAorIAkJCXZlcmlmeWRpcihh cmd2W2FyZ2MgLSAxXSk7CisgCQl0b2xvY2FsKGFyZ2MsIGFyZ3YsIG1vZGUsIHNmdHBfZGlyZWN0 KTsJLyogRGVzdCBpcyBsb2NhbCBob3N0LiAqLworIAl9CisrCisgCS8qCisgCSAqIEZpbmFsbHkg Y2hlY2sgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBzc2ggcHJvY2VzcywgaWYgb25lIHdhcyBmb3Jr ZWQKKyAJICogYW5kIG5vIGVycm9yIGhhcyBvY2N1cnJlZCB5ZXQKK0BAIC0xMzA5LDYgKzEzNjQs NzQgQEAKKyAJc2Z0cF9mcmVlKGNvbm4pOworIH0KKyAKKysvKiBjYWxjdWxhdGUgdGhlIGhhc2gg b2YgYSBmaWxlIHVwIHRvIGxlbmd0aCBieXRlcworKyAqIHRoaXMgaXMgdXNlZCB0byBkZXRlcm1p bmUgaWYgcmVtb3RlIGFuZCBsb2NhbCBmaWxlCisrICogZnJhZ21lbnRzIG1hdGNoLiBUaGVyZSBt YXkgYmUgYSBtb3JlIGVmZmljaWVudCBwcm9jZXNzIGZvciB0aGUgaGFzaGluZworKyAqIE5vdGU6 IExpYnJlU1NMIGRvZXNuJ3Qgc3VwcG9ydCBibGFrZTJiNTEyIHNvIHdlIGNhbid0IG9mZmVyIHRo ZW0KKysgKiB0aGUgcmVzdW1lIGZlYXR1cmUgY2pyIDcvMTgvMjAyMyAqLworKyNpZiAoZGVmaW5l ZCBXSVRIX09QRU5TU0wpICYmICFkZWZpbmVkKExJQlJFU1NMX1ZFUlNJT05fTlVNQkVSKQorK3Zv aWQgY2FsY3VsYXRlX2hhc2goY2hhciAqZmlsZW5hbWUsIGNoYXIgKm91dHB1dCwgb2ZmX3QgbGVu Z3RoKQorK3sKKysJaW50IG4sIG1kX2xlbjsKKysJRVZQX01EX0NUWCAqYzsKKysJY29uc3QgRVZQ X01EICptZDsKKysJY2hhciBidWZbSEFTSF9CVUZMRU5dOworKwlzc2l6ZV90IGJ5dGVzOworKwl1 bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKwljaGFyIHRtcFszXTsKKysJRklM RSAqZmlsZV9wdHI7CisrCSpvdXRwdXQgPSAnXDAnOworKworKwkvKiBvcGVuIGZpbGUgZm9yIGNh bGN1bGF0aW5nIGhhc2ggKi8KKysJZmlsZV9wdHIgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKysJ aWYgKGZpbGVfcHRyPT1OVUxMKQorKwl7CisrCQlpZiAodmVyYm9zZV9tb2RlKSB7CisrCQkJZnBy aW50ZihzdGRlcnIsICIlczogZXJyb3Igb3BlbmluZyBmaWxlICVzXG4iLCBob3N0bmFtZSwgZmls ZW5hbWUpOworKwkJCS8qIGZpbGUgdGhlIGV4cGVjdGVkIG91dHB1dCB3aXRoIHNwYWNlcyAqLwor KwkJCXNucHJpbnRmKG91dHB1dCwgSEFTSF9MRU4sICIlcyIsICAiICIpOworKwkJfQorKwkJcmV0 dXJuOworKwl9CisrCisrCW1kID0gRVZQX2dldF9kaWdlc3RieW5hbWUoImJsYWtlMmI1MTIiKTsK KysJYyA9IEVWUF9NRF9DVFhfbmV3KCk7CisrCUVWUF9EaWdlc3RJbml0X2V4KGMsIG1kLCBOVUxM KTsKKysKKysJd2hpbGUgKGxlbmd0aCA+IDApIHsKKysJCWlmIChsZW5ndGggPiBIQVNIX0JVRkxF TikKKysJCQkvKiBmcmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVhZC4KKysJ CQkgKiBpbiB0aGlzIGNhc2UgMS4gTXVsdGlwbHkgYnkgdGhlIGxlbmd0aCB0byBnZXQgdGhlIGJ5 dGVzICovCisrCQkJYnl0ZXM9ZnJlYWQoYnVmLCBIQVNIX0JVRkxFTiwgMSwgZmlsZV9wdHIpICog SEFTSF9CVUZMRU47CisrCQllbHNlCisrCQkJYnl0ZXM9ZnJlYWQoYnVmLCBsZW5ndGgsIDEsIGZp bGVfcHRyKSAqIGxlbmd0aDsKKysJCUVWUF9EaWdlc3RVcGRhdGUoYywgYnVmLCBieXRlcyk7Cisr CQlsZW5ndGggLT0gSEFTSF9CVUZMRU47CisrCX0KKysJRVZQX0RpZ2VzdEZpbmFsKGMsIG91dCwg Jm1kX2xlbik7CisrCUVWUF9NRF9DVFhfZnJlZShjKTsKKysJLyogY29udmVydCB0aGUgaGFzaCBp bnRvIGEgc3RyaW5nICovCisrCWZvcihuPTA7IG4gPCBtZF9sZW47IG4rKykgeworKwkJc25wcmlu dGYodG1wLCAzLCAiJTAyeCIsIG91dFtuXSk7CisrCQlzdHJuY2F0KG91dHB1dCwgdG1wLCAzKTsK KysJfQorKyNpZmRlZiBERUJVRworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiBIQVNIIElTICclcycg b2YgbGVuZ3RoICVsZFxuIiwgaG9zdG5hbWUsIG91dHB1dCwgc3RybGVuKG91dHB1dCkpOworKyNl bmRpZgorKwlmY2xvc2UoZmlsZV9wdHIpOworK30KKysjZWxzZQorK3ZvaWQgY2FsY3VsYXRlX2hh c2goY2hhciAqZmlsZW5hbWUsIGNoYXIgKm91dHB1dCwgb2ZmX3QgbGVuZ3RoKQorK3sKKysgIC8q IGVtcHR5IGZ1bmN0aW9uIGZvciBidWlsZHMgd2l0aG91dCBvcGVuc3NsIG9yIGFyZSB1c2luZyBs aWJyZXNzbCAqLworK30KKysjZW5kaWYgLyogV0lUSF9PUEVOU1NMICovCisrCisrI2RlZmluZSBU WVBFX09WRVJGTE9XKHR5cGUsIHZhbCkgXAorKwkoKHNpemVvZih0eXBlKSA9PSA0ICYmICh2YWwp ID4gSU5UMzJfTUFYKSB8fCBcCisrCSAoc2l6ZW9mKHR5cGUpID09IDggJiYgKHZhbCkgPiBJTlQ2 NF9NQVgpIHx8IFwKKysJIChzaXplb2YodHlwZSkgIT0gNCAmJiBzaXplb2YodHlwZSkgIT0gOCkp CisrCisgLyogUHJlcGFyZSByZW1vdGUgcGF0aCwgaGFuZGxpbmcgfiBieSBhc3N1bWluZyBjd2Qg aXMgdGhlIGhvbWVkaXIgKi8KKyBzdGF0aWMgY2hhciAqCisgcHJlcGFyZV9yZW1vdGVfcGF0aChz dHJ1Y3Qgc2Z0cF9jb25uICpjb25uLCBjb25zdCBjaGFyICpwYXRoKQorQEAgLTEzOTYsMTQgKzE1 MTksMjMgQEAKKyAJc3RydWN0IHN0YXQgc3RiOworIAlzdGF0aWMgQlVGIGJ1ZmZlcjsKKyAJQlVG ICpicDsKKy0Jb2ZmX3QgaSwgc3RhdGJ5dGVzOworKwlvZmZfdCBpLCBzdGF0Ynl0ZXMsIHhmZXJf c2l6ZTsKKyAJc2l6ZV90IGFtdCwgbnI7CisgCWludCBmZCA9IC0xLCBoYWRlcnIsIGluZHg7Cist CWNoYXIgKmxhc3QsICpuYW1lLCBidWZbUEFUSF9NQVggKyAxMjhdLCBlbmNuYW1lW1BBVEhfTUFY XTsKKysJY2hhciAqY3AsICpsYXN0LCAqbmFtZSwgYnVmW1BBVEhfTUFYICsgQlVGX0FORF9IQVNI XSwgZW5jbmFtZVtQQVRIX01BWF07CisgCWludCBsZW47CisrCWNoYXIgaGFzaHN1bVtIQVNIX0xF TisxXSwgdGVzdF9oYXNoc3VtW0hBU0hfTEVOKzFdOworKwljaGFyIGluYnVmW1BBVEhfTUFYICsg QlVGX0FORF9IQVNIXTsKKysJc2l6ZV90IGluc2l6ZTsKKysJdW5zaWduZWQgbG9uZyBsb25nIHVs bDsKKysJY2hhciAqbWF0Y2g7IC8qIHVzZWQgdG8gY29tbXVuaWNhdGUgZnJhZ21lbnQgbWF0Y2gg Ki8KKysJbWF0Y2ggPSAiXDAiOyAvKmRlZmF1bHQgaXMgdG8gZmFpbCB0aGUgbWF0Y2guIE5VTEwg YW5kIEYgYm90aCBpbmRpY2F0ZSBmYWlsKi8KKyAKKyAJZm9yIChpbmR4ID0gMDsgaW5keCA8IGFy Z2M7ICsraW5keCkgeworIAkJbmFtZSA9IGFyZ3ZbaW5keF07CisrI2lmZGVmIERFQlVHCisrCQlm cHJpbnRmKHN0ZGVyciwgIiVzIGluZGV4IGlzICVkLCBuYW1lIGlzICVzXG4iLCBob3N0bmFtZSwg aW5keCwgbmFtZSk7CisrI2VuZGlmCisgCQlzdGF0Ynl0ZXMgPSAwOworIAkJbGVuID0gc3RybGVu KG5hbWUpOworIAkJd2hpbGUgKGxlbiA+IDEgJiYgbmFtZVtsZW4tMV0gPT0gJy8nKQorQEAgLTE0 MjUsNiArMTU1NywxNCBAQAorIAkJdW5zZXRfbm9uYmxvY2soZmQpOworIAkJc3dpdGNoIChzdGIu c3RfbW9kZSAmIFNfSUZNVCkgeworIAkJY2FzZSBTX0lGUkVHOgorKwkJCS8qIG9ubHkgY2FsY3Vs YXRlIGhhc2ggaWYgd2UgYXJlIGluIHJlc3VtZSBtb2RlIGFuZCBhIGZpbGUqLworKwkJCWlmIChy ZXN1bWVfZmxhZykgeworKwkJCQljYWxjdWxhdGVfaGFzaChuYW1lLCBoYXNoc3VtLCBzdGIuc3Rf c2l6ZSk7CisrI2lmZGVmIERFQlVHCisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IE5hbWUgaXMg JyVzJyBhbmQgaGFzaCAnJXMnXG4iLCBob3N0bmFtZSwgbmFtZSwgaGFzaHN1bSk7CisrCQkJCWZw cmludGYgKHN0ZGVyciwiJXM6IHNpemUgb2YgJXMgaXMgJWxkXG4iLCBob3N0bmFtZSwgbmFtZSwg c3RiLnN0X3NpemUpOworKyNlbmRpZgorKwkJCX0KKyAJCQlicmVhazsKKyAJCWNhc2UgU19JRkRJ UjoKKyAJCQlpZiAoaWFtcmVjdXJzaXZlKSB7CitAQCAtMTQ0NiwxNCArMTU4NiwxMzMgQEAKKyAJ CQkJZ290byBuZXh0OworIAkJfQorICNkZWZpbmUJRklMRU1PREVNQVNLCShTX0lTVUlEfFNfSVNH SUR8U19JUldYVXxTX0lSV1hHfFNfSVJXWE8pCistCQlzbnByaW50ZihidWYsIHNpemVvZiBidWYs ICJDJTA0byAlbGxkICVzXG4iLAorLQkJICAgICh1X2ludCkgKHN0Yi5zdF9tb2RlICYgRklMRU1P REVNQVNLKSwKKy0JCSAgICAobG9uZyBsb25nKXN0Yi5zdF9zaXplLCBsYXN0KTsKKy0JCWlmICh2 ZXJib3NlX21vZGUpCistCQkJZm1wcmludGYoc3RkZXJyLCAiU2VuZGluZyBmaWxlIG1vZGVzOiAl cyIsIGJ1Zik7CisrCQkvKiBBZGQgYSBoYXNoIG9mIHRoZSBmaWxlIGFsb25nIHdpdGggdGhlIGZp bGVtb2RlIGlmIGluIHJlc3VtZSAqLworKwkJaWYgKHJlc3VtZV9mbGFnKQorKwkJCXNucHJpbnRm KGJ1Ziwgc2l6ZW9mIGJ1ZiwgIkMlMDRvICVsbGQgJXMgJXNcbiIsCisrCQkJCSAodV9pbnQpIChz dGIuc3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCisrCQkJCSAobG9uZyBsb25nKXN0Yi5zdF9zaXpl LCBoYXNoc3VtLCBsYXN0KTsKKysJCWVsc2UKKysJCQlzbnByaW50ZihidWYsIHNpemVvZiBidWYs ICJDJTA0byAlbGxkICVzXG4iLAorKwkJCQkgKHVfaW50KSAoc3RiLnN0X21vZGUgJiBGSUxFTU9E RU1BU0spLAorKwkJCQkgKGxvbmcgbG9uZylzdGIuc3Rfc2l6ZSwgbGFzdCk7CisrCisrI2lmZGVm IERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBTZW5kaW5nIGZpbGUgbW9kZXM6ICVzIiwg aG9zdG5hbWUsIGJ1Zik7CisrI2VuZGlmCisgCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1v dXQsIGJ1Ziwgc3RybGVuKGJ1ZikpOworLQkJaWYgKHJlc3BvbnNlKCkgPCAwKQorKworKyNpZmRl ZiBERUJVRworKwkJZnByaW50ZihzdGRlcnIsICIlczogaW5idWYgbGVuZ3RoICVsZCBidWYgbGVu Z3RoICVsZFxuIiwgaG9zdG5hbWUsIHN0cmxlbihpbmJ1ZiksIHN0cmxlbihidWYpKTsKKysjZW5k aWYKKysJCWlmIChyZXN1bWVfZmxhZykgeyAvKiBnZXQgdGhlIGhhc2ggcmVzcG9uc2UgZnJvbSB0 aGUgcmVtb3RlICovCisrCQkJKHZvaWQpIGF0b21pY2lvKHJlYWQsIHJlbWluLCBpbmJ1ZiwgQlVG X0FORF9IQVNIIC0gMSk7CisrI2lmZGVmIERFQlVHCisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IHdlIGdvdCAnJXMnIGluIGluYnVmIGxlbmd0aCAlbGQgYnVmIHdhcyAlbGRcbiIsCisrCQkJCQlo b3N0bmFtZSwgaW5idWYsIHN0cmxlbihpbmJ1ZiksIHN0cmxlbihidWYpKTsKKysjZW5kaWYKKysJ CX0KKysJCWlmIChyZXNwb25zZSgpIDwgMCkgeworKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYo c3RkZXJyLCAiJXM6IHJlc3BvbnNlIGlzIGxlc3MgdGhhbiAwXG4iLCBob3N0bmFtZSk7CisrI2Vu ZGlmCisgCQkJZ290byBuZXh0OworKwkJfQorKwkJeGZlcl9zaXplID0gc3RiLnN0X3NpemU7Cisr CisrCQkvKiB3ZSBvbmx5IGRvIHRoZSBmb2xsb3dpbmcgaW4gcmVzdW1lIG1vZGUgYmVjYXVzZSB3 ZSBoYXZlIGEKKysJCSAqIG5ldyBidWYgZnJvbSB0aGUgcmVtb3RlIHRvIHBhcnNlICovCisrCQlp ZiAocmVzdW1lX2ZsYWcpIHsKKysJCQljcCA9IGluYnVmOworKwkJCWlmICgqY3AgPT0gJ1InKSB7 IC8qIHJlc3VtZSBmaWxlIHRyYW5zZmVyKi8KKysJCQkJY2hhciAqaW5faGFzaHN1bTsgLyogd2hl cmUgdG8gaG9sZCB0aGUgaW5jb21pbmcgaGFzaCAqLworKwkJCQlpbl9oYXNoc3VtID0gY2FsbG9j KEhBU0hfTEVOKzEsIHNpemVvZihjaGFyKSk7CisrCQkJCWZvciAoKytjcDsgY3AgPCBpbmJ1ZiAr IDU7IGNwKyspIHsKKysJCQkJCS8qIHNraXAgb3ZlciB0aGUgbW9kZSAqLworKwkJCQl9CisrCQkJ CWlmICgqY3ArKyAhPSAnICcpIHsKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IG1vZGUgbm90 IGRlbGluZWF0ZWQhXG4iLCBob3N0bmFtZSk7CisrCQkJCX0KKysKKysJCQkJaWYgKCFpc2RpZ2l0 KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzaXplIG5v dCBwcmVzZW50XG4iLCBob3N0bmFtZSk7CisrCQkJCXVsbCA9IHN0cnRvdWxsKGNwLCAmY3AsIDEw KTsKKysJCQkJaWYgKCFjcCB8fCAqY3ArKyAhPSAnICcpCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwg IiVzOiBzaXplIG5vdCBkZWxpbWl0ZWRcbiIsIGhvc3RuYW1lKTsKKysJCQkJaWYgKFRZUEVfT1ZF UkZMT1cob2ZmX3QsIHVsbCkpCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBzaXplIG91dCBv ZiByYW5nZVxuIiwgaG9zdG5hbWUpOworKwkJCQlpbnNpemUgPSAob2ZmX3QpdWxsOworKworKyNp ZmRlZiBERUJVRworKwkJCQlmcHJpbnRmIChzdGRlcnIsICIlczogcmVjZWl2ZWQgc2l6ZSBvZiAl bGRcbiIsIGhvc3RuYW1lLCBpbnNpemUpOworKyNlbmRpZgorKworKwkJCQkvKiBjb3B5IHRoZSBj cCBwb2ludGVyIGJ5dGUgYnkgYnl0ZSAqLworKwkJCQlpbnQgaTsKKysJCQkJZm9yIChpID0gMDsg aSA8IEhBU0hfTEVOOyBpKyspIHsKKysJCQkJCXN0cm5jYXQoaW5faGFzaHN1bSwgY3ArKywgMSk7 CisrCQkJCX0KKysjaWZkZWYgREVCVUcKKysJCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IGluX2hh c2hzdW0gJyVzJ1xuIiwgaG9zdG5hbWUsIGluX2hhc2hzdW0pOworKyNlbmRpZgorKworKwkJCQkv KmdldCB0aGUgaGFzaCBvZiB0aGUgc291cmNlIGZpbGUgdG8gdGhlIGJ5dGUgbGVuZ3RoIHdlIGp1 c3QgZ290Ki8KKysJCQkJY2FsY3VsYXRlX2hhc2gobmFtZSwgdGVzdF9oYXNoc3VtLCBpbnNpemUp OworKyNpZmRlZiBERUJVRworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYWxjdWxhdGVkIGhh c2hzdW0gb2YgbG9jYWwgJXMgdG8gJWxkIGlzICVzXG4iLAorKwkJCQkJaG9zdG5hbWUsIGxhc3Qs IGluc2l6ZSwgdGVzdF9oYXNoc3VtKTsKKysjZW5kaWYKKysJCQkJLyogY29tcGFyZSB0aGUgaW5j b21pbmcgaGFzaCB0byB0aGUgaGFzaCBvZiB0aGUgbG9jYWwgZmlsZSovCisrCQkJCWlmIChzdHJj bXAoaW5faGFzaHN1bSwgdGVzdF9oYXNoc3VtKSA9PSAwKSB7CisrCQkJCQkvKiB0aGUgZnJhZ21l bnRzIG1hdGNoIHNvIHdlIHNob3VsZCBzZWVrIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0 aGUKKysJCQkJCSAqIGxvY2FsIGZpbGUgYW5kIHNldCB0aGUgcmVtb3RlIGZpbGUgdG8gYXBwZW5k ICovCisrI2lmZGVmIERFQlVHCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBGaWxlIGZyYWdt ZW50cyBtYXRjaFxuIiwgaG9zdG5hbWUpOworKwkJCQkJZnByaW50ZihzdGRlcnIsICIlczogc2Vl a2luZyB0byAlbGRcbiIsIGhvc3RuYW1lLCBpbnNpemUpOworKyNlbmRpZgorKwkJCQkJeGZlcl9z aXplID0gc3RiLnN0X3NpemUgLSBpbnNpemU7CisrI2lmZGVmIERFQlVHCisrCQkJCQlmcHJpbnRm KHN0ZGVyciwgIiVzOiB4ZmVyX3NpemU6ICVsZCwgc3RiLnN0X3NpemU6ICVsZCBpbnNpemU6ICVs ZFxuIiwKKysJCQkJCQlob3N0bmFtZSwgeGZlcl9zaXplLCBzdGIuc3Rfc2l6ZSwgaW5zaXplKTsK KysjZW5kaWYKKysJCQkJCWlmIChsc2VlayhmZCwgaW5zaXplLCBTRUVLX0NVUikgIT0gKG9mZl90 KWluc2l6ZSkgeworKyNpZmRlZiBERUJVRworKwkJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGxz ZWVrIGRpZCBub3QgcmV0dXJuICVsZFxuIiwgaG9zdG5hbWUsIGluc2l6ZSkgOworKyNlbmRpZgor KwkJCQkJCWdvdG8gbmV4dDsKKysJCQkJCX0KKysJCQkJCW1hdGNoID0gIk0iOworKwkJCQl9IGVs c2UgeworKwkJCQkJLyogdGhlIGZyYWdtZW50cyBkb24ndCBtYXRjaCBzbyB3ZSBzaG91bGQgc3Rh cnQgb3ZlciBmcm9tIHRoZSBiZWdpbmluZyAqLworKyNpZmRlZiBERUJVRworKwkJCQkJZnByaW50 ZihzdGRlcnIsICIlczogRmlsZSBmcmFnbWVudHMgZG8gbm90IG1hdGNoICclcycoaW4pICclcyco bG9jYWwpXG4iLAorKwkJCQkgICAgICAgCQlob3N0bmFtZSwgaW5faGFzaHN1bSwgdGVzdF9oYXNo c3VtKTsKKysjZW5kaWYKKysJCQkJCW1hdGNoID0gIkYiOworKwkJCQkJeGZlcl9zaXplID0gc3Ri LnN0X3NpemU7CisrCQkJCX0KKysJCQkJZnJlZShpbl9oYXNoc3VtKTsKKysJCQl9CisrCQkJaWYg KCpjcCA9PSAnUycpIHsgLyogc2tpcCBmaWxlICovCisrI2lmZGVmIERFQlVHCisrCQkJCWZwcmlu dGYoc3RkZXJyLCAiJXM6IFNob3VsZCBiZSBza2lwcGluZyB0aGlzIGZpbGVcbiIsIGhvc3RuYW1l KTsKKysjZW5kaWYKKysJCQkJZ290byBuZXh0OworKwkJCX0KKysJCQlpZiAoKmNwID09ICdDJykg eyAvKnRyYW5zZmVyIGVudGlyZSBmaWxlKi8KKysjaWZkZWYgREVCVUcKKysJCQkJZnByaW50Zihz dGRlcnIsICIlczogUmVzZW5kaW5nIGVudGlyZSBmaWxlXG4iLCBob3N0bmFtZSk7CisrI2VuZGlm CisrCQkJCXhmZXJfc2l6ZSA9IHN0Yi5zdF9zaXplOworKwkJCX0KKysJCQkvKiBuZWVkIHRvIHNl bmQgdGhlIG1hdGNoIHN0YXR1cworKwkJCSAqIFdlIGFsd2F5cyBzZW5kIHRoZSBtYXRjaCBzdGF0 dXMgb3Igd2UgZ2V0IG91dCBvZiBzeW5jCisrCQkJICovCisrI2lmZGVmIERFQlVHCisrCQkJZnBy aW50ZihzdGRlcnIsICIlczogc2VuZGluZyBtYXRjaCAlc1xuIiwgaG9zdG5hbWUsIG1hdGNoKTsK KysjZW5kaWYKKysJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIG1hdGNoLCAxKTsK KysJCX0KKysKKyAJCWlmICgoYnAgPSBhbGxvY2J1ZigmYnVmZmVyLCBmZCwgQ09QWV9CVUZMRU4p KSA9PSBOVUxMKSB7CisgbmV4dDoJCQlpZiAoZmQgIT0gLTEpIHsKKyAJCQkJKHZvaWQpIGNsb3Nl KGZkKTsKK0BAIC0xNDYxLDEzICsxNzIwLDE3IEBACisgCQkJfQorIAkJCWNvbnRpbnVlOworIAkJ fQorKworKyNpZmRlZiBERUJVRworKwkJZnByaW50ZihzdGRlcnIsICIlczogZ29pbmcgdG8geGZl ciAlbGRcbiIsIGhvc3RuYW1lLCB4ZmVyX3NpemUpOworKyNlbmRpZgorIAkJaWYgKHNob3dwcm9n cmVzcykKKy0JCQlzdGFydF9wcm9ncmVzc19tZXRlcihjdXJmaWxlLCBzdGIuc3Rfc2l6ZSwgJnN0 YXRieXRlcyk7CisrCQkJc3RhcnRfcHJvZ3Jlc3NfbWV0ZXIoY3VyZmlsZSwgeGZlcl9zaXplLCAm c3RhdGJ5dGVzKTsKKyAJCXNldF9ub25ibG9jayhyZW1vdXQpOworLQkJZm9yIChoYWRlcnIgPSBp ID0gMDsgaSA8IHN0Yi5zdF9zaXplOyBpICs9IGJwLT5jbnQpIHsKKysJCWZvciAoaGFkZXJyID0g aSA9IDA7IGkgPCB4ZmVyX3NpemU7IGkgKz0gYnAtPmNudCkgeworIAkJCWFtdCA9IGJwLT5jbnQ7 CistCQkJaWYgKGkgKyAob2ZmX3QpYW10ID4gc3RiLnN0X3NpemUpCistCQkJCWFtdCA9IHN0Yi5z dF9zaXplIC0gaTsKKysJCQlpZiAoaSArIChvZmZfdClhbXQgPiB4ZmVyX3NpemUpCisrCQkJCWFt dCA9IHhmZXJfc2l6ZSAtIGk7CisgCQkJaWYgKCFoYWRlcnIpIHsKKyAJCQkJaWYgKChuciA9IGF0 b21pY2lvKHJlYWQsIGZkLAorIAkJCQkgICAgYnAtPmJ1ZiwgYW10KSkgIT0gYW10KSB7CitAQCAt MTY2OCwyNCArMTkzMSwzNiBAQAorIHNpbmsoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBj aGFyICpzcmMpCisgeworIAlzdGF0aWMgQlVGIGJ1ZmZlcjsKKy0Jc3RydWN0IHN0YXQgc3RiOwor KwlzdHJ1Y3Qgc3RhdCBzdGIsIGNwc3RhdCwgbnBzdGF0OworIAlCVUYgKmJwOworIAlvZmZfdCBp OworIAlzaXplX3QgaiwgY291bnQ7CisgCWludCBhbXQsIGV4aXN0cywgZmlyc3QsIG9mZDsKKyAJ bW9kZV90IG1vZGUsIG9tb2RlLCBtYXNrOworLQlvZmZfdCBzaXplLCBzdGF0Ynl0ZXM7CisrCW9m Zl90IHNpemUsIHN0YXRieXRlcywgeGZlcl9zaXplOworIAl1bnNpZ25lZCBsb25nIGxvbmcgdWxs OworIAlpbnQgc2V0aW1lcywgdGFyZ2lzZGlyLCB3cmVycjsKKy0JY2hhciBjaCwgKmNwLCAqbnAs ICp0YXJnLCAqd2h5LCAqdmVjdFsxXSwgYnVmWzIwNDhdLCB2aXNidWZbMjA0OF07CisrCWNoYXIg Y2gsICpjcCwgKm5wLCAqbnBfdG1wLCAqdGFyZywgKndoeSwgKnZlY3RbMV0sIGJ1ZlsxNjM4NF0s IHZpc2J1ZlsxNjM4NF07CisgCWNoYXIgKipwYXR0ZXJucyA9IE5VTEw7CisgCXNpemVfdCBuLCBu cGF0dGVybnMgPSAwOworIAlzdHJ1Y3QgdGltZXZhbCB0dlsyXTsKKysJY2hhciByZW1vdGVfaGFz aHN1bVtIQVNIX0xFTisxXTsKKysJY2hhciBsb2NhbF9oYXNoc3VtW0hBU0hfTEVOKzFdOworKwlj aGFyIHRtcGJ1ZltCVUZfQU5EX0hBU0hdOworKwljaGFyIG91dGJ1ZltCVUZfQU5EX0hBU0hdOwor KwljaGFyIG1hdGNoOworKwlpbnQgYmFkX21hdGNoX2ZsYWcgPSAwOworKwlucCA9IE5VTEw7IC8q IHRoaXMgd2FzIG9yaWdpbmFsbHkgJy8wJyBidXQgdGhhdCdzIHdyb25nICovCisrCW5wX3RtcCA9 IE5VTEw7CisrCisgCisgI2RlZmluZQlhdGltZQl0dlswXQorICNkZWZpbmUJbXRpbWUJdHZbMV0K KyAjZGVmaW5lCVNDUkVXVVAoc3RyKQl7IHdoeSA9IHN0cjsgZ290byBzY3Jld3VwOyB9CisgCisr I2lmZGVmIERFQlVHCisrICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBMT0NBTCBJbiBzaW5r IHdpdGggJXNcbiIsIGhvc3RuYW1lLCBzcmMpOworKyNlbmRpZgorIAlpZiAoVFlQRV9PVkVSRkxP Vyh0aW1lX3QsIDApIHx8IFRZUEVfT1ZFUkZMT1cob2ZmX3QsIDApKQorIAkJU0NSRVdVUCgiVW5l eHBlY3RlZCBvZmZfdC90aW1lX3Qgc2l6ZSIpOworIAorQEAgLTE3MDMsOSArMTk3OCwxNiBAQAor IAlpZiAodGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkpCisgCQl2ZXJpZnlkaXIodGFyZyk7CisgCisr I2lmZGVmIERFQlVHCisrCWZwcmludGYgKHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwgdG8gcmVt b3V0LlxuIixob3N0bmFtZSk7CisrI2VuZGlmCisgCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJl bW91dCwgIiIsIDEpOworIAlpZiAoc3RhdCh0YXJnLCAmc3RiKSA9PSAwICYmIFNfSVNESVIoc3Ri LnN0X21vZGUpKQorIAkJdGFyZ2lzZGlyID0gMTsKKysKKysjaWZkZWYgREVCVUcKKysJZnByaW50 ZihzdGRlcnIsICIlczogVGFyZ2V0IGlzICVzIHdpdGggYSBzaXplIG9mICVsZFxuIiwgaG9zdG5h bWUsIHRhcmcsIHN0Yi5zdF9zaXplKTsKKysjZW5kaWYKKyAJaWYgKHNyYyAhPSBOVUxMICYmICFp YW1yZWN1cnNpdmUgJiYgIVRmbGFnKSB7CisgCQkvKgorIAkJICogUHJlcGFyZSB0byB0cnkgdG8g cmVzdHJpY3QgaW5jb21pbmcgZmlsZW5hbWVzIHRvIG1hdGNoCitAQCAtMTcxNCw3ICsxOTk2LDEy IEBACisgCQlpZiAoYnJhY2VfZXhwYW5kKHNyYywgJnBhdHRlcm5zLCAmbnBhdHRlcm5zKSAhPSAw KQorIAkJCWZhdGFsX2YoImNvdWxkIG5vdCBleHBhbmQgcGF0dGVybiIpOworIAl9CisrCisgCWZv ciAoZmlyc3QgPSAxOzsgZmlyc3QgPSAwKSB7CisrCQliYWRfbWF0Y2hfZmxhZyA9IDA7IC8qIHVz ZWQgaW4gcmVzdW1lIG1vZGUuICovCisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwg IiVzOiBBdCBzdGFydCBvZiBsb29wIGJ1ZiBpcyAlc1xuIiwgaG9zdG5hbWUsIGJ1Zik7CisrI2Vu ZGlmCisgCQljcCA9IGJ1ZjsKKyAJCWlmIChhdG9taWNpbyhyZWFkLCByZW1pbiwgY3AsIDEpICE9 IDEpCisgCQkJZ290byBkb25lOworQEAgLTE3NDIsNiArMjAyOSw5IEBACisgCQkJY29udGludWU7 CisgCQl9CisgCQlpZiAoYnVmWzBdID09ICdFJykgeworKyNpZmRlZiBERUJVRworKwkJCWZwcmlu dGYgKHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwgdG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOwor KyNlbmRpZgorIAkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOworIAkJ CWdvdG8gZG9uZTsKKyAJCX0KK0BAIC0xNzQ5LDYgKzIwMzksOSBAQAorIAkJCSotLWNwID0gMDsK KyAKKyAJCWNwID0gYnVmOworKyNpZmRlZiBERUJVRworKwkJZnByaW50ZihzdGRlcnIsICIlczog YnVmIGlzICVzXG4iLCBob3N0bmFtZSwgYnVmKTsKKysjZW5kaWYKKyAJCWlmICgqY3AgPT0gJ1Qn KSB7CisgCQkJc2V0aW1lcysrOworIAkJCWNwKys7CitAQCAtMTc3Niw5ICsyMDY5LDE5IEBACisg CQkJaWYgKCFjcCB8fCAqY3ArKyAhPSAnXDAnIHx8IGF0aW1lLnR2X3VzZWMgPCAwIHx8CisgCQkJ ICAgIGF0aW1lLnR2X3VzZWMgPiA5OTk5OTkpCisgCQkJCVNDUkVXVVAoImF0aW1lLnVzZWMgbm90 IGRlbGltaXRlZCIpOworKworKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYgKHN0ZGVyciwgIiVz OiBTZW5kaW5nIG51bGwgdG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOworKyNlbmRpZgorIAkJCSh2 b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOworIAkJCWNvbnRpbnVlOworIAkJ fQorKwkJaWYgKCpjcCA9PSAnUicpIHsgLypyZXN1bWUgZmlsZSB0cmFuc2ZlciAoZG9udCcgdGhp bmsgSSBuZWVkIHRoaXMgaGVyZSkqLworKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYoc3RkZXJy LCAiJXM6IFJlY2VpdmVkIGEgUkVTVU1FIHJlcXVlc3Qgd2l0aCAlc1xuIiwgaG9zdG5hbWUsIGNw KTsKKysjZW5kaWYKKysJCQlyZXN1bWVfZmxhZyA9IDE7CisrCQl9CisgCQlpZiAoKmNwICE9ICdD JyAmJiAqY3AgIT0gJ0QnKSB7CisgCQkJLyoKKyAJCQkgKiBDaGVjayBmb3IgdGhlIGNhc2UgInJj cCByZW1vdGU6Zm9vXCogbG9jYWw6YmFyIi4KK0BAIC0xNzk0LDYgKzIwOTcsMTggQEAKKyAJCQlT Q1JFV1VQKCJleHBlY3RlZCBjb250cm9sIHJlY29yZCIpOworIAkJfQorIAkJbW9kZSA9IDA7Cisr I2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBidWYgaXMgJXNcbiIsIGhvc3Ru YW1lLCBidWYpOworKwkJZnByaW50ZihzdGRlcnIsICIlczogY3AgaXMgJXNcbiIsIGhvc3RuYW1l LCBjcCk7CisrI2VuZGlmCisrCQkvKiB3ZSBuZWVkIHRvIHRyYWNrIGlmIHRoaXMgb2JqZWN0IGlz IGEgZGlyZWN0b3J5CisrCQkgKiBiZWZvcmUgd2UgbW92ZSB0aGUgcG9pbnRlci4gSWYgd2UgYXJl IGluIHJlc3VtZSBtb2RlCisrCQkgKiB3ZSBtaWdodCBlbmQgdXAgdHJ5aW5nIHRvIGdldCBhbiBt ZHN1bSBvbiBhIGRpcmVjdG9yeQorKwkJICogYW5kIHRoYXQgZG9lc24ndCB3b3JrICovCisrCQlp bnQgZGlyX2ZsYWcgPSAwOworKwkJaWYgKCpjcCA9PSAnRCcpCisrCQkJZGlyX2ZsYWcgPSAxOwor KworIAkJZm9yICgrK2NwOyBjcCA8IGJ1ZiArIDU7IGNwKyspIHsKKyAJCQlpZiAoKmNwIDwgJzAn IHx8ICpjcCA+ICc3JykKKyAJCQkJU0NSRVdVUCgiYmFkIG1vZGUiKTsKK0BAIC0xODA0LDYgKzIx MTksMTAgQEAKKyAJCWlmICgqY3ArKyAhPSAnICcpCisgCQkJU0NSRVdVUCgibW9kZSBub3QgZGVs aW1pdGVkIik7CisgCisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBjcCBp cyAlc1xuIiwgaG9zdG5hbWUsIGNwKTsKKysjZW5kaWYKKysKKyAJCWlmICghaXNkaWdpdCgodW5z aWduZWQgY2hhcikqY3ApKQorIAkJCVNDUkVXVVAoInNpemUgbm90IHByZXNlbnQiKTsKKyAJCXVs bCA9IHN0cnRvdWxsKGNwLCAmY3AsIDEwKTsKK0BAIC0xODEzLDExICsyMTMyLDMyIEBACisgCQkJ U0NSRVdVUCgic2l6ZSBvdXQgb2YgcmFuZ2UiKTsKKyAJCXNpemUgPSAob2ZmX3QpdWxsOworIAor KyNpZmRlZiBERUJVRworKwkJZnByaW50ZihzdGRlcnIsICIlczogY3AgaXMgJXNcbiIsIGhvc3Ru YW1lLCBjcCk7CisrI2VuZGlmCisrCQlpZiAocmVzdW1lX2ZsYWcgJiYgIWRpcl9mbGFnKSB7Cisr CQkJKnJlbW90ZV9oYXNoc3VtID0gJ1wwJzsKKysJCQlpbnQgaTsKKysJCQlmb3IgKGkgPSAwOyBp IDwgSEFTSF9MRU47IGkrKykgeworKwkJCQlzdHJuY2F0IChyZW1vdGVfaGFzaHN1bSwgY3ArKywg MSk7CisrCQkJfQorKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiAnJXMn XG4iLCBob3N0bmFtZSwgcmVtb3RlX2hhc2hzdW0pOworKyNlbmRpZgorKwkJCWlmICghY3AgfHwg KmNwKysgIT0gJyAnKQorKwkJCQlTQ1JFV1VQKCJoYXNoIG5vdCBkZWxpbWl0ZWQiKTsKKysJCX0K KysjaWZkZWYgREVCVUcKKysJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNwIGlzICVzXG4iLCBob3N0 bmFtZSwgY3ApOworKyNlbmRpZgorIAkJaWYgKCpjcCA9PSAnXDAnIHx8IHN0cmNocihjcCwgJy8n KSAhPSBOVUxMIHx8CisgCQkgICAgc3RyY21wKGNwLCAiLiIpID09IDAgfHwgc3RyY21wKGNwLCAi Li4iKSA9PSAwKSB7CisgCQkJcnVuX2VycigiZXJyb3I6IHVuZXhwZWN0ZWQgZmlsZW5hbWU6ICVz IiwgY3ApOworIAkJCWV4aXQoMSk7CisgCQl9CisrI2lmZGVmIERFQlVHCisrCQlmcHJpbnRmKHN0 ZGVyciwgIiVzIGNwIGlzICVzXG4iLCBob3N0bmFtZSwgY3ApOworKyNlbmRpZgorIAkJaWYgKG5w YXR0ZXJucyA+IDApIHsKKyAJCQlmb3IgKG4gPSAwOyBuIDwgbnBhdHRlcm5zOyBuKyspIHsKKyAJ CQkJaWYgKHN0cmNtcChwYXR0ZXJuc1tuXSwgY3ApID09IDAgfHwKK0BAIC0xODg3LDExICsyMjI3 LDE5NSBAQAorIAkJfQorIAkJb21vZGUgPSBtb2RlOworIAkJbW9kZSB8PSBTX0lXVVNSOworKwkJ c3RhdChjcCwgJmNwc3RhdCk7CisrCQl4ZmVyX3NpemUgPSBzaXplOworKwkJaWYgKHJlc3VtZV9m bGFnKSB7CisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZihzdGRlcnIsICIlczogbnAgaXMgJXNc biIsIGhvc3RuYW1lLCBucCk7CisrI2VuZGlmCisrCQkJLyogZG9lcyB0aGUgZmlsZSBleGlzdCBh bmQgaWYgaXQgZG9lcyBpdCB3cml0YWJsZT8gKi8KKysJCQlpZiAoc3RhdChucCwgJm5wc3RhdCkg PT0gLTEpIHsKKysjaWZkZWYgREVCVUcKKysJCQkJZnByaW50ZihzdGRlcnIsICIlcyBMb2NhbCBm aWxlIGRvZXMgbm90IGV4aXN0IHNpemUgaXMgJWxkIVxuIiwKKysJCQkJCWhvc3RuYW1lLCBucHN0 YXQuc3Rfc2l6ZSk7CisrI2VuZGlmCisrCQkJCW5wc3RhdC5zdF9zaXplID0gMDsKKysJCQl9IGVs c2UgeworKwkJCQkvKiBjaGVjayB0byBzZWUgaWYgdGhlIGZpbGUgaXMgd3JpdGVhYmxlCisrCQkJ CSAqIGlmIGl0IGlzbid0IHRoZW4gd2UgbmVlZCB0byBza2lwIGl0IGJ1dAorKwkJCQkgKiBiZWZv cmUgd2Ugc2tpcCBpdCB3ZSBuZWVkIHRvIHNlbmQgdGhlIHJlbW90ZQorKwkJCQkgKiB3aGF0IHRo ZXkgYXJlIGV4cGVjdGluZyBzbyBCVUZfQU5EX0hBU0ggYnl0ZXMgYW5kIHRoZW4KKysJCQkJICog YSBudWxsLgorKwkJCQkgKiBOT1RFISEhIFRoZSBmb3JtYXQgaW4gdGhlIHNucHJpbnRmIG5lZWRz IHRoZSBhY3R1YWwgbnVtZXJpYworKwkJCQkgKiBiZWNhdXNlIHVzaW5nIGEgZGVmaW5lIGlzbid0 IHdvcmtpbmcgKi8KKysJCQkJaWYgKGFjY2VzcyAobnAsIFdfT0spICE9IDApIHsKKysJCQkJCWZw cmludGYoc3RkZXJyLCAic2NwOiAlczogUGVybWlzc2lvbiBkZW5pZWQgb24gJXNcbiIsIG5wLCBo b3N0bmFtZSk7CisrCQkJCQlzbnByaW50ZihvdXRidWYsIEJVRl9BTkRfSEFTSCwgIlMlLSpzIiwg QlVGX0FORF9IQVNILTIsICIgIik7CisrCQkJCQkodm9pZClhdG9taWNpbyh2d3JpdGUsIHJlbW91 dCwgb3V0YnVmLCBzdHJsZW4ob3V0YnVmKSk7CisrCQkJCQkodm9pZClhdG9taWNpbyh2d3JpdGUs IHJlbW91dCwgIiIsIDEpOworKwkJCQkJY29udGludWU7CisrCQkJCX0KKysJCQl9CisrCQkJLyog dGhpcyBmaWxlIGlzIGFscmVhZHkgaGVyZSBkbyB3ZSBuZWVkIHRvIG1vdmUgaXQ/CisrCQkJICog Q2hlY2sgdG8gbWFrZSBzdXJlIG5wc3RhdC5zdF9zaXplID4gMC4gSWYgaXQgaXMgMCB0aGVuIHdl CisrCQkJICogbWF5IHRyeWluZyB0byBiZSBtb3ZpbmcgYSB6ZXJvIGJ5dGUgZmlsZSBpbiB3aGlj aCBjYXNlIHRoaXMKKysJCQkgKiBmb2xsb3dpbmcgYmxvY2sgZmFpbHMuIFNlZSBvbiAwIGJ5dGUg ZmlsZXMgdGhlIGhhc2hlcyB3aWxsCisrCQkJICogYWx3YXlzIG1hdGNoIGFuZCB0aGUgZmlsZSB3 b24ndCBiZSBjcmVhdGVkIGV2ZW4gdGhvdWdoIGl0IHNob3VsZAorKwkJCSAqLworKwkJCWlmICh4 ZmVyX3NpemUgPT0gbnBzdGF0LnN0X3NpemUgJiYgKG5wc3RhdC5zdF9zaXplID4gMCkpIHsKKysJ CQkJY2FsY3VsYXRlX2hhc2gobnAsIGxvY2FsX2hhc2hzdW0sIG5wc3RhdC5zdF9zaXplKTsKKysJ CQkJaWYgKHN0cmNtcChsb2NhbF9oYXNoc3VtLHJlbW90ZV9oYXNoc3VtKSA9PSAwKSB7CisrCQkJ CQkvKiB3ZSBjYW4gc2tpcCB0aGlzIGZpbGUgaWYgd2Ugd2FudCB0by4gKi8KKysjaWZkZWYgREVC VUcKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IEZpbGVzIGFyZSB0aGUgc2FtZVxuIiwgaG9z dG5hbWUpOworKyNlbmRpZgorKwkJCQkJLyogdGhlIHJlbW90ZSBpcyBleHBlY3Rpbmcgc29tZXRo aW5nIHNvIHdlIG5lZWQgdG8gc2VuZCB0aGVtIHNvbWV0aGluZyovCisrCQkJCQlzbnByaW50Zihv dXRidWYsIEJVRl9BTkRfSEFTSCwgIlMlLSpzIiwgQlVGX0FORF9IQVNILTIsICIgIik7CisrCQkJ CQkodm9pZClhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgb3V0YnVmLCBzdHJsZW4ob3V0YnVmKSk7 CisrI2lmZGVmIERFQlVHCisrCQkJCQlmcHJpbnRmKHN0ZGVyciwiJXM6IHNlbnQgJyVzJyB0byBy ZW1vdGVcbiIsIGhvc3RuYW1lLCBvdXRidWYpOworKyNlbmRpZgorKwkJCQkJLyogdGhlIHJlbW90 ZSBpcyB3YWl0aW5nIG9uIGFuIGFjayBzbyBzZW5kIGEgbnVsbCAqLworKwkJCQkJKHZvaWQpYXRv bWljaW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsKKysJCQkJCWlmIChzaG93cHJvZ3Jlc3MpCisr CQkJCQkJZnByaW50ZiAoc3RkZXJyLCAiU2tpcHBpbmcgaWRlbnRpY2FsIGZpbGU6ICVzXG4iLCBu cCk7CisrCQkJCQljb250aW51ZTsKKysJCQkJfSBlbHNlIHsKKysJCQkJCS8qIGZpbGUgc2l6ZXMg YXJlIHRoZSBzYW1lIGJ1dCB0aGV5IGRvbid0IG1hdGNoICovCisrI2lmZGVmIERFQlVHCisrCQkJ CQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB0YXJnZXQoJWxkKSBpcyBkaWZmZXJlbnQgdGhhbiBzb3Vy Y2UoJWxkKSFcbiIsCisrCQkJCQkJaG9zdG5hbWUsIG5wc3RhdC5zdF9zaXplLCBzaXplKTsKKysj ZW5kaWYKKysJCQkJCXNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mIG91dGJ1ZiwgIkMlMDRvICVsbGQg JXMiLAorKwkJCQkJCSAodV9pbnQpIChucHN0YXQuc3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCisr CQkJCQkJIChsb25nIGxvbmcpbnBzdGF0LnN0X3NpemUsIGxvY2FsX2hhc2hzdW0pOworKwkJCQkJ c25wcmludGYob3V0YnVmLCBCVUZfQU5EX0hBU0gsICIlLSpzIiwgQlVGX0FORF9IQVNILTEsIHRt cGJ1Zik7CisrCQkJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIG91dGJ1Ziwgc3Ry bGVuKG91dGJ1ZikpOworKwkJCQkJYmFkX21hdGNoX2ZsYWcgPSAxOworKwkJCQl9CisrCQkJfQor KwkJCS8qIGlmIG5wc3RhdC5zdF9zaXplIGlzIDAgdGhlbiB0aGUgbG9jYWwgZmlsZSBkb2Vzbid0 IGV4aXN0IGFuZAorKwkJCSAqIHdlIGhhdmUgdG8gbW92ZSBpdC4gU2luY2Ugd2UgYXJlIGluIHJl c3VtZSBtb2RlIHRyZWF0IGl0IGFzIGEgcmVzdW1lICovCisrCQkJaWYgKG5wc3RhdC5zdF9zaXpl IDwgeGZlcl9zaXplIHx8IChucHN0YXQuc3Rfc2l6ZSA9PSAwKSkgeworKwkJCQljaGFyIHJhbmRf c3RyaW5nWzldOworKyNpZmRlZiBERUJVRworKwkJCQlmcHJpbnRmIChzdGRlcnIsICIlczogJXMg aXMgc21hbGxlciB0aGFuICVzXG4iLCBob3N0bmFtZSwgbnAsIGNwKTsKKysjZW5kaWYKKysJCQkJ Y2FsY3VsYXRlX2hhc2gobnAsIGxvY2FsX2hhc2hzdW0sIG5wc3RhdC5zdF9zaXplKTsKKysjZGVm aW5lCUZJTEVNT0RFTUFTSwkoU19JU1VJRHxTX0lTR0lEfFNfSVJXWFV8U19JUldYR3xTX0lSV1hP KQorKwkJCQlzbnByaW50Zih0bXBidWYsIHNpemVvZiBvdXRidWYsICJSJTA0byAlbGxkICVzIiwK KysJCQkJCSAodV9pbnQpIChucHN0YXQuc3RfbW9kZSAmIEZJTEVNT0RFTUFTSyksCisrCQkJCQkg KGxvbmcgbG9uZylucHN0YXQuc3Rfc2l6ZSwgbG9jYWxfaGFzaHN1bSk7CisrCQkJCXNucHJpbnRm KG91dGJ1ZiwgQlVGX0FORF9IQVNILCAiJS0qcyIsIEJVRl9BTkRfSEFTSC0xLCB0bXBidWYpOwor KyNpZmRlZiBERUJVRworKwkJCQlmcHJpbnRmIChzdGRlcnIsICIlczogbmV3IGJ1ZiBpcyAlcyBv ZiBsZW5ndGggJWxkXG4iLAorKwkJCQkJIGhvc3RuYW1lLCBvdXRidWYsIHN0cmxlbihvdXRidWYp KTsKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogU2VuZGluZyBuZXcgZmlsZSAoJXMpIG1vZGVz OiAlc1xuIiwKKysJCQkJCWhvc3RuYW1lLCBucCwgb3V0YnVmKTsKKysjZW5kaWYKKysJCQkJLypu b3cgd2UgaGF2ZSB0byBzZW5kIG5wJ3MgbGVuZ3RoIGFuZCBoYXNoIHRvIHRoZSBvdGhlciBlbmQK KysJCQkJICogaWYgdGhlIGNvbXB1dGVkIGhhc2hlcyBtYXRjaCB0aGVuIHdlIHNlZWsgdG8gbnAn cyBsZW5ndGggaW4KKysJCQkJICogZmlsZSBhbmQgYXBwZW5kIHRvIG5wIHN0YXJ0aW5nIGZyb20g dGhlcmUgKi8KKysJCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBvdXRidWYsIHN0 cmxlbihvdXRidWYpKTsKKysjaWZkZWYgREVCVUcKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczog TmV3IHNpemU6ICVsZCwgc2l6ZTogJWxkLCBzdF9zaXplOiAlbGRcbiIsCisrCQkJCQlob3N0bmFt ZSwgc2l6ZSAtIG5wc3RhdC5zdF9zaXplLCBzaXplLCBucHN0YXQuc3Rfc2l6ZSk7CisrI2VuZGlm CisrCQkJCXhmZXJfc2l6ZSA9IHNpemUgLSBucHN0YXQuc3Rfc2l6ZTsKKysJCQkJcmVzdW1lX2Zs YWcgPSAxOworKwkJCQlucF90bXAgPSB4c3RyZHVwKG5wKTsKKysJCQkJLyogV2Ugc2hvdWxkIGhh dmUgYSByYW5kb20gY29tcG9uZW50IHRvIGF2b2lkIGNsb2JiZXJpbmcgYQorKwkJCQkgKiBsb2Nh bCBmaWxlICovCisrCQkJCXJhbmRfc3RyKHJhbmRfc3RyaW5nLCA4KTsKKysJCQkJc3RyY2F0KG5w LCByYW5kX3N0cmluZyk7CisrI2lmZGVmIERFQlVHCisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6 IFdpbGwgY29uY2F0ICVzIHRvICVzIGFmdGVyIHhmZXJcbiIsCisrCQkJCQlob3N0bmFtZSwgbnAs IG5wX3RtcCk7CisrI2VuZGlmCisrCQkJfSBlbHNlIGlmIChucHN0YXQuc3Rfc2l6ZSA+IHNpemUp IHsKKysJCQkvKiB0aGUgdGFyZ2V0IGZpbGUgaXMgbGFyZ2VyIHRoYW4gdGhlIHNvdXJjZS4KKysJ CQkgKiBzbyB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSBpdC4gV2UgZG9uJ3QgbmVlZCB0byBzZW5kIHRo ZSBoYXNoIHRob3VnaC4gKi8KKysjaWZkZWYgREVCVUcKKysJCQkJZnByaW50ZihzdGRlcnIsICIl czogdGFyZ2V0KCVsZCkgaXMgbGFyZ2VyIHRoYW4gc291cmNlKCVsZCkhXG4iLAorKwkJCQkJaG9z dG5hbWUsIG5wc3RhdC5zdF9zaXplLCBzaXplKTsKKysjZW5kaWYKKysJCQkJc25wcmludGYodG1w YnVmLCBzaXplb2Ygb3V0YnVmLCAiQyUwNG8gJWxsZCIsCisrCQkJCQkgKHVfaW50KSAobnBzdGF0 LnN0X21vZGUgJiBGSUxFTU9ERU1BU0spLAorKwkJCQkJIChsb25nIGxvbmcpbnBzdGF0LnN0X3Np emUpOworKwkJCQlzbnByaW50ZihvdXRidWYsIEJVRl9BTkRfSEFTSCwgIiUtKnMiLCBCVUZfQU5E X0hBU0gtMSwgdG1wYnVmKTsKKysJCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBv dXRidWYsIHN0cmxlbihvdXRidWYpKTsKKysJCQkJYmFkX21hdGNoX2ZsYWcgPSAxOworKwkJCX0K KysKKysjaWZkZWYgREVCVUcKKysJCQlmcHJpbnRmIChzdGRlcnIsICIlczogQ1AgaXMgJXMoJWxk KSBOUCBpcyAlcyglbGQpXG4iLAorKwkJCQkgaG9zdG5hbWUsIGNwLCBzaXplLCBucCwgbnBzdGF0 LnN0X3NpemUpOworKyNlbmRpZgorKwkJCS8qIHdlIGFyZSBpbiByZXN1bWUgbW9kZSBzbyB3ZSBu ZWVkIHRoaXMgKmhlcmUqIGFuZCBub3QgbGF0ZXIKKysJCQkgKiBiZWNhdXNlIHdlIG5lZWQgdG8g Z2V0IHRoZSBmaWxlIG1hdGNoIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlbW90ZQorKwkJCSAqIG91 dHNpZGUgb2YgcmVzdW1lIG1vZGUgd2UgZG9uJ3QgZ2V0IHRoYXQgc28gd2UgZ2V0IG91dCBvZiBz eW5jCisrCQkJICogc28gd2UgaGF2ZSBhIHRlc3QgZm9yIHRoZSByZXN1bWVfZmxhZyBhZnRlciB0 aGlzIGJsb2NrICovCisrI2lmZGVmIERFQlVHCisrCQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNl bmRpbmcgbnVsbCB0byByZW1vdXQuXG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisrCQkJKHZvaWQp IGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisrCisrCQkJLyogdGhlIHJlbW90ZSBp cyBhbHdheXMgZ29pbmcgdG8gc2VuZCBhIG1hdGNoIHN0YXR1cworKwkJCSAqIHNvIHdlIG5lZWQg dG8gcmVhZCBpdCBzbyB3ZSBkb24ndCBnZXQgb3V0IG9mIHN5bmMgKi8KKysJCQkodm9pZCkgYXRv bWljaW8ocmVhZCwgcmVtaW4sICZtYXRjaCwgMSk7CisrCQkJaWYgKG1hdGNoICE9ICdNJykgey8q ZnJhZ21lbnRzIGRvIG5vdCBtYXRjaCovCisrCQkJCS8qIGV4cGVjdGVkIHJlc3BvbnNlIG9mIEYs IE0gYW5kIE5VTEwgKmJ1dCoKKysJCQkJICogYW55dGhpbmcgb3RoZXIgdGhhbiBNIGlzIGEgZmFp bHVyZQorKwkJCQkgKiBpZiBpdCdzIGEgTlVMTCB0aGVuIHdlIHJlc2V0IHhmZXJfc2l6ZSBidXQK KysJCQkJICogd2UgcmV0YWluIHRoZSBmaWxlIHBvaW50ZXJzICovCisrCQkJCXhmZXJfc2l6ZSA9 IHNpemU7CisrCQkJCWJhZF9tYXRjaF9mbGFnID0gMTsKKysJCQkJaWYgKG1hdGNoID09ICdGJykg eworKwkJCQkJLyogZ290IGFuIEYgZm9yIGZhaWx1cmUgYW5kIG5vdCBOVUxMCisrCQkJCQkgKiBz byB3ZSB3YW50IHRvIHN3YXAgb3ZlciB0aGUgZmlsZW5hbWUgZnJvbQorKwkJCQkJICogdGhlIHRl bXAgYmFjayB0byB0aGUgb3JpZ2luYWwgKi8KKysjaWZkZWYgREVCVUcKKysJCQkJCWZwcmludGYo c3RkZXJyLCAiJXM6IG1hdGNoIHN0YXR1cyBpcyBGXG4iLCBob3N0bmFtZSk7CisrI2VuZGlmCisr CQkJCQlpZiAobnBfdG1wICE9IE5VTEwpCisrCQkJCQkJbnAgPSBucF90bXA7CisrCQkJCQllbHNl IHsKKysJCQkJCQljb250aW51ZTsKKysJCQkJCX0KKysJCQkJfSBlbHNlIHsKKysjaWZkZWYgREVC VUcKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IG1hdGNoIHJlY2VpdmVkIGlzIE5VTExcbiIs IGhvc3RuYW1lKTsKKysjZW5kaWYKKysJCQkJfQorKwkJCX0gZWxzZSB7CisrI2lmZGVmIERFQlVH CisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXMgbWF0Y2ggc3RhdHVzIGlzIE1cbiIsIGhvc3RuYW1l KTsKKysjZW5kaWYKKysJCQkJYmFkX21hdGNoX2ZsYWcgPSAwOyAvKiB3aGlsZSB0aGlzIGlzIHNl dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorKwkJCQkJCSAgICAgKiBsb29wIEknbSBzZXR0aW5n IGl0IGhlcmUgZXhwbGljaXRseSBhcyB3ZWxsICovCisrCQkJfQorKwkJfQorKworKyNpZmRlZiBE RUJVRworKwkJZnByaW50ZihzdGRlcnIsICIlczogQ3JlYXRpbmcgZmlsZS4gbW9kZSBpcyAlZCBm b3IgJXNcbiIsCisrCQkJaG9zdG5hbWUsIG1vZGUsIG5wKTsKKysjZW5kaWYKKyAJCWlmICgob2Zk ID0gb3BlbihucCwgT19XUk9OTFl8T19DUkVBVCwgbW9kZSkpID09IC0xKSB7CisgYmFkOgkJCXJ1 bl9lcnIoIiVzOiAlcyIsIG5wLCBzdHJlcnJvcihlcnJubykpOworIAkJCWNvbnRpbnVlOworIAkJ fQorLQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisrCisrCQkvKiBp biB0aGUgY2FzZSBvZiBub3QgdXNpbmcgdGhlIHJlc3VtZSBmdW5jdGlvbiB3ZSBuZWVkIHRoaXMg dndyaXRlIGhlcmUKKysJCSAqIGluIHRoZSBjYXNlIG9mIHVzaW5nIHRoZSByZXN1bWUgZmxhZyBp dCBjb21lcyBpbiB0aGUgYWJvdmUgaWYgKHJlc3VtZV9mbGFnKSBibG9jaworKwkJICogd2h5PyBi ZWNhdXNlIHNjcCBpcyB3ZWlyZCBhbmQgZGVwZW5kcyBvbiBhbiBpbnRyaWNhdGUgYW5kIHNpbGx5 IGRhbmNlIG9mCisrCQkgKiBjYWxsIGFuZCByZXNwb25zZSBhdCBqdXN0IHRoZSByaWdodCB0aW1l LiBUaGF0J3Mgd2h5ICovCisrCQlpZiAoIXJlc3VtZV9mbGFnKSB7CisrI2lmZGVmIERFQlVHCisr CQkJZnByaW50ZiAoc3RkZXJyLCAiJXM6IFNlbmRpbmcgbnVsbCB0byByZW1vdXQuXG4iLCBob3N0 bmFtZSk7CisrI2VuZGlmCisrCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwg MSk7CisrCQl9CisrCisgCQlpZiAoKGJwID0gYWxsb2NidWYoJmJ1ZmZlciwgb2ZkLCBDT1BZX0JV RkxFTikpID09IE5VTEwpIHsKKyAJCQkodm9pZCkgY2xvc2Uob2ZkKTsKKyAJCQljb250aW51ZTsK K0BAIC0xOTA2LDEzICsyNDMwLDE3IEBACisgCQkgKi8KKyAJCXN0YXRieXRlcyA9IDA7CisgCQlp ZiAoc2hvd3Byb2dyZXNzKQorLQkJCXN0YXJ0X3Byb2dyZXNzX21ldGVyKGN1cmZpbGUsIHNpemUs ICZzdGF0Ynl0ZXMpOworKwkJCXN0YXJ0X3Byb2dyZXNzX21ldGVyKGN1cmZpbGUsIHhmZXJfc2l6 ZSwgJnN0YXRieXRlcyk7CisgCQlzZXRfbm9uYmxvY2socmVtaW4pOworLQkJZm9yIChjb3VudCA9 IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBicC0+Y250KSB7CisrI2lmZGVmIERFQlVHCisrCQlmcHJp bnRmKHN0ZGVyciwgIiVzOiB4ZmVyX3NpemUgaXMgJWxkXG4iLCBob3N0bmFtZSwgeGZlcl9zaXpl KTsKKysjZW5kaWYKKysJCWZvciAoY291bnQgPSBpID0gMDsgaSA8IHhmZXJfc2l6ZTsgaSArPSBi cC0+Y250KSB7CisgCQkJYW10ID0gYnAtPmNudDsKKy0JCQlpZiAoaSArIGFtdCA+IHNpemUpCist CQkJCWFtdCA9IHNpemUgLSBpOworKwkJCWlmIChpICsgYW10ID4geGZlcl9zaXplKQorKwkJCQlh bXQgPSB4ZmVyX3NpemUgLSBpOworIAkJCWNvdW50ICs9IGFtdDsKKysJCQkvKiByZWFkIHRoZSBk YXRhIGZyb20gdGhlIHNvY2tldCovCisgCQkJZG8geworIAkJCQlqID0gYXRvbWljaW82KHJlYWQs IHJlbWluLCBjcCwgYW10LAorIAkJCQkgICAgc2NwaW8sICZzdGF0Ynl0ZXMpOworQEAgLTE5NDcs OCArMjQ3NSw3OCBAQAorIAkJCXdyZXJyID0gMTsKKyAJCX0KKyAJCWlmICghd3JlcnIgJiYgKCFl eGlzdHMgfHwgU19JU1JFRyhzdGIuc3RfbW9kZSkpICYmCistCQkgICAgZnRydW5jYXRlKG9mZCwg c2l6ZSkgIT0gMCkKKysJCSAgICBmdHJ1bmNhdGUob2ZkLCB4ZmVyX3NpemUpICE9IDApCisgCQkJ bm90ZV9lcnIoIiVzOiB0cnVuY2F0ZTogJXMiLCBucCwgc3RyZXJyb3IoZXJybm8pKTsKKysKKysJ CS8qIGlmIG5wX3RtcCBpc24ndCBzZXQgdGhlbiB3ZSBkb24ndCBoYXZlIGEgcmVzdW1lIGZpbGUg dG8gY2F0ICovCisrCQkvKiBsaWtld2lzZSwgYmFkIG1hdGNoIGZsYWcgbWVhbnMgbm8gcmVzdW1l IGZsYWcgKi8KKysjaWZkZWYgREVCVUcKKysJCWZwcmludGYgKHN0ZGVyciwgIiVzOiByZXN1bWVf ZmxhZzogJWQsIG5wX3RtcDogJXMsIGJhZF9tYXRjaF9mbGFnOiAlZFxuIiwKKysJCQkgaG9zdG5h bWUsIHJlc3VtZV9mbGFnLCBucF90bXAsIGJhZF9tYXRjaF9mbGFnKTsKKysjZW5kaWYKKysJCWlm IChyZXN1bWVfZmxhZyAmJiBucF90bXAgJiYgIWJhZF9tYXRjaF9mbGFnKSB7CisrCQkJRklMRSAq b3JpZywgKnJlc3VtZTsKKysJCQljaGFyIHJlc19idWZbNTEyXTsgLyogc2V0IGF0IDUxMiBqdXN0 IGJlY2F1c2UsIG1pZ2h0IHdhbnQgdG8gaW5jcmVhc2UqLworKwkJCXNzaXplX3QgcmVzX2J5dGVz ID0gMDsKKysJCQlvZmZfdCBzdW0gPSAwOworKwkJCXN0cnVjdCBzdGF0IHJlc19zdGF0OworKwkJ CSpyZXNfYnVmID0gJ1wwJzsKKysJCQlvcmlnID0gTlVMTDsgLypzdXByZXNzIHdhcm5pbmdzKi8K KysJCQlyZXN1bWUgPSBOVUxMOyAvKnN1cHJlc3Mgd2FybmluZ3MqLworKyNpZmRlZiBERUJVRwor KwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IFJlc3VtZSBmbGFnIGlzIHNldC4gR29pbmcgdG8gY29u Y2F0ICVzIHRvICVzICBub3dcbiIsCisrCQkJCWhvc3RuYW1lLCBucCwgbnBfdG1wKTsKKysjZW5k aWYKKysJCQkvKiBucC9vZmQgaXMgdGhlIHJlc3VtZSBmaWxlIHNvIG9wZW4gbnBfdG1wIGZvciBh cHBlbmRpbmcKKysJCQkgKiBjbG9zZSBvZmQgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gYmUgc2hp ZnRpbmcgaXQKKysJCQkgKiBhbmQgSSBkb24ndCB3bmF0IHRoZSBzYW1lIGZpbGUgb3BlbiBpbiBt dWx0aXBsZSBkZXNjcmlwdG9ycyAqLworKwkJCWlmIChjbG9zZShvZmQpID09IC0xKQorKwkJCQlu b3RlX2VycigiJXM6IGNsb3NlOiAlcyIsIG5wLCBzdHJlcnJvcihlcnJubykpOworKwkJCS8qIG9y aWcgaXMgdGhlIHRhcmdldCBmaWxlLCByZXN1bWUgaXMgdGhlIHRlbXAgZmlsZSAqLworKwkJCW9y aWcgPSBmb3BlbihucF90bXAsICJhIik7IC8qb3BlbiBmb3IgYXBwZW5kaW5nKi8KKysJCQlpZiAo b3JpZyA9PSBOVUxMKSB7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IENvdWxkIG5vdCBvcGVu ICVzIGZvciBhcHBlbmRpbmcuIiwgaG9zdG5hbWUsIG5wX3RtcCk7CisrCQkJCWdvdG8gc3RvcGNh dDsKKysJCQl9CisrCQkJcmVzdW1lID0gZm9wZW4obnAsICJyIik7IC8qb3BlbiBmb3IgcmVhZGlu ZyBvbmx5Ki8KKysJCQlpZiAocmVzdW1lID09IE5VTEwpIHsKKysJCQkJZnByaW50ZihzdGRlcnIs ICIlczogQ291bGQgbm90IG9wZW4gJXMgZm9yIHJlYWRpbmcuIiwgaG9zdG5hbWUsIG5wKTsKKysJ CQkJZ290byBzdG9wY2F0OworKwkJCX0KKysJCQkvKiBnZXQgdGhlIG51bWJlciBvZiBieXRlcyBp biB0aGUgdGVtcCBmaWxlKi8KKysJCQlpZiAoZnN0YXQoZmlsZW5vKHJlc3VtZSksICZyZXNfc3Rh dCkgPT0gLTEpIHsKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogQ291bGQgbm90IHN0YXQgJXMi LCBob3N0bmFtZSwgbnApOworKwkJCQlnb3RvIHN0b3BjYXQ7CisrCQkJfQorKwkJCS8qIHdoaWxl IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIHRoZSB0ZW1wIGZpbGUKKysJCQkgKiBpcyBs ZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIGZpbGUgcmVhZCBpbiBhIGNodW5rIGFuZAorKwkJCSAq IHdyaXRlIGl0IHRvIHRoZSB0YXJnZXQgZmlsZSAqLworKwkJCWRvIHsKKysJCQkJcmVzX2J5dGVz ID0gZnJlYWQocmVzX2J1ZiwgMSwgNTEyLCByZXN1bWUpOworKwkJCQlmd3JpdGUocmVzX2J1Ziwg MSwgcmVzX2J5dGVzLCBvcmlnKTsKKysJCQkJc3VtICs9IHJlc19ieXRlczsKKysJCQl9IHdoaWxl IChzdW0gPCByZXNfc3RhdC5zdF9zaXplKTsKKysKKytzdG9wY2F0OgkJaWYgKG9yaWcpCisrCQkJ CWZjbG9zZShvcmlnKTsKKysJCQlpZiAocmVzdW1lKQorKwkJCQlmY2xvc2UocmVzdW1lKTsKKysJ CQkvKiBkZWxldGUgdGhlIHJlc3VtZSBmaWxlICovCisrCQkJcmVtb3ZlKG5wKTsKKysjaWZkZWYg REVCVUcKKysJCQlmcHJpbnRmIChzdGRlcnIsICIlczogbnAoJXMpIGFuZCBucF90bXAoJXMpXG4i LCBob3N0bmFtZSwgbnAsIG5wX3RtcCk7CisrI2VuZGlmCisrCQkJbnAgPSBucF90bXA7CisrI2lm ZGVmIERFQlVHCisrCQkJZnByaW50ZiAoc3RkZXJyLCAiJXMgbnAoJXMpIGFuZCBucF90bXAoJXMp XG4iLCBob3N0bmFtZSwgbnAsIG5wX3RtcCk7CisrI2VuZGlmCisrCQkJLyogcmVzZXQgb2ZkIHRv IHRoZSBvcmlnaW5hbCBucCAqLworKwkJCWlmICgob2ZkID0gb3BlbihucF90bXAsIE9fV1JPTkxZ KSkgPT0gLTEpIHsKKysJCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3Qgb3BlbiAlcyBp biBhcHBlbmQgZnVuY3Rpb25cbiIsIGhvc3RuYW1lLCBucF90bXApOworKwkJCQlhdG9taWNpbyh2 d3JpdGUsIHJlbW91dCwgIiIsIDEpOworKwkJCQlnb3RvIGJhZDsKKysJCQl9CisrCQl9CisgCQlp ZiAocGZsYWcpIHsKKyAJCQlpZiAoZXhpc3RzIHx8IG9tb2RlICE9IG1vZGUpCisgI2lmZGVmIEhB VkVfRkNITU9ECitAQCAtMTk4Myw4ICsyNTgxLDE3IEBACisgCQkJfQorIAkJfQorIAkJLyogSWYg bm8gZXJyb3Igd2FzIG5vdGVkIHRoZW4gc2lnbmFsIHN1Y2Nlc3MgZm9yIHRoaXMgZmlsZSAqLwor LQkJaWYgKG5vdGVfZXJyKE5VTEwpID09IDApCisrCQlpZiAobm90ZV9lcnIoTlVMTCkgPT0gMCkg eworKyNpZmRlZiBERUJVRworKwkJCWZwcmludGYgKHN0ZGVyciwgIiVzOiBTZW5kaW5nIG51bGwg dG8gcmVtb3V0LlxuIiwgaG9zdG5hbWUpOworKyNlbmRpZgorIAkJCSh2b2lkKSBhdG9taWNpbyh2 d3JpdGUsIHJlbW91dCwgIiIsIDEpOworKwkJfQorKwkJLyogd2UgYXJlIGluIHJlc3VtZSBtb2Rl IGFuZCB3ZSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkgZm9yIG5wX3RtcCAqLworKwkJaWYgKHJlc3Vt ZV9mbGFnICYmIG5wX3RtcCAhPSBOVUxMKSB7CisrCQkJZnJlZShucF90bXApOworKwkJCW5wX3Rt cCA9IE5VTEw7CisrCQl9CisgCX0KKyBkb25lOgorIAlmb3IgKG4gPSAwOyBuIDwgbnBhdHRlcm5z OyBuKyspCitAQCAtMjEyOCwxMSArMjczNSwxOSBAQAorIHZvaWQKKyB1c2FnZSh2b2lkKQorIHsK KysjaWYgKGRlZmluZWQgV0lUSF9PUEVOU1NMKSAmJiAhZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9O X05VTUJFUikKKysJKHZvaWQpIGZwcmludGYoc3RkZXJyLAorKwkgICAgInVzYWdlOiBzY3AgWy0z NDZBQkNPcHFScnNUdlpdIFstYyBjaXBoZXJdIFstRCBzZnRwX3NlcnZlcl9wYXRoXSBbLUYgc3No X2NvbmZpZ11cbiIKKysJICAgICIgICAgICAgICAgIFstaSBpZGVudGl0eV9maWxlXSBbLUogZGVz dGluYXRpb25dIFstbCBsaW1pdF0gWy1vIHNzaF9vcHRpb25dXG4iCisrCSAgICAiICAgICAgICAg ICBbLVAgcG9ydF0gWy1TIHByb2dyYW1dIFstWCBzZnRwX29wdGlvbl0gc291cmNlIC4uLiB0YXJn ZXRcbiIpOworKwlleGl0KDEpOworKyNlbHNlCisgCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKKyAJ ICAgICJ1c2FnZTogc2NwIFstMzQ2QUJDT3BxUnJzVHZdIFstYyBjaXBoZXJdIFstRCBzZnRwX3Nl cnZlcl9wYXRoXSBbLUYgc3NoX2NvbmZpZ11cbiIKKyAJICAgICIgICAgICAgICAgIFstaSBpZGVu dGl0eV9maWxlXSBbLUogZGVzdGluYXRpb25dIFstbCBsaW1pdF0gWy1vIHNzaF9vcHRpb25dXG4i CisgCSAgICAiICAgICAgICAgICBbLVAgcG9ydF0gWy1TIHByb2dyYW1dIFstWCBzZnRwX29wdGlv bl0gc291cmNlIC4uLiB0YXJnZXRcbiIpOworIAlleGl0KDEpOworKyNlbmRpZgorIH0KKyAKKyB2 b2lkCitAQCAtMjI3MSw2ICsyODg2LDE4IEBACisgCQlleGl0KDEpOworIH0KKyAKKyt2b2lkIHJh bmRfc3RyKGNoYXIgKmRlc3QsIHNpemVfdCBsZW5ndGgpIHsKKysJY2hhciBjaGFyc2V0W10gPSAi MDEyMzQ1Njc4OSIKKysJCSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKysJCSJBQkNERUZH SElKS0xNTk9QUVJTVFVWV1hZWiI7CisrCisrCXdoaWxlIChsZW5ndGgtLSA+IDApIHsKKysJCXNp emVfdCBpbmRleCA9IChkb3VibGUpIHJhbmQoKSAvIFJBTkRfTUFYICogKHNpemVvZiBjaGFyc2V0 IC0gMSk7CisrCQkqZGVzdCsrID0gY2hhcnNldFtpbmRleF07CisrCX0KKysJKmRlc3QgPSAnXDAn OworK30KKysKKyB2b2lkCisgY2xlYW51cF9leGl0KGludCBpKQorIHsKK2RpZmYgLU51ciBvcGVu c3NoLTEwLjNwMS5vcmlnL3NlcnZjb25mLmMgb3BlbnNzaC0xMC4zcDEvc2VydmNvbmYuYworLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcvc2VydmNvbmYuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5 NTQ0NyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3NlcnZjb25mLmMJMjAyNi0wNy0wMiAwMTox OTo0Ny4wMzk0OTY0NTYgKzAyMDAKK0BAIC02OSw2ICs2OSw3IEBACisgI2luY2x1ZGUgImF1dGgu aCIKKyAjaW5jbHVkZSAibXlwcm9wb3NhbC5oIgorICNpbmNsdWRlICJkaWdlc3QuaCIKKysjaW5j bHVkZSAic3NoYnVmLmgiCisgI2luY2x1ZGUgInZlcnNpb24uaCIKKyAjaW5jbHVkZSAic3NoLWdz cy5oIgorIAorQEAgLTIyMiw2ICsyMjMsMTIgQEAKKyAJb3B0aW9ucy0+YXV0aG9yaXplZF9wcmlu Y2lwYWxzX2ZpbGUgPSBOVUxMOworIAlvcHRpb25zLT5hdXRob3JpemVkX3ByaW5jaXBhbHNfY29t bWFuZCA9IE5VTEw7CisgCW9wdGlvbnMtPmF1dGhvcml6ZWRfcHJpbmNpcGFsc19jb21tYW5kX3Vz ZXIgPSBOVUxMOworKwlvcHRpb25zLT50Y3BfcmN2X2J1Zl9wb2xsID0gLTE7CisrCW9wdGlvbnMt Pmhwbl9kaXNhYmxlZCA9IC0xOworKwlvcHRpb25zLT5ub25lX2VuYWJsZWQgPSAtMTsKKysJb3B0 aW9ucy0+bm9uZW1hY19lbmFibGVkID0gLTE7CisrCW9wdGlvbnMtPnVzZV9tcHRjcCA9IC0xOwor KwlvcHRpb25zLT5kaXNhYmxlX211bHRpdGhyZWFkZWQgPSAtMTsKKyAJb3B0aW9ucy0+aXBfcW9z X2ludGVyYWN0aXZlID0gLTE7CisgCW9wdGlvbnMtPmlwX3Fvc19idWxrID0gLTE7CisgCW9wdGlv bnMtPnZlcnNpb25fYWRkZW5kdW0gPSBOVUxMOworQEAgLTUxNiw2ICs1MjMsMjIgQEAKKyAJfQor IAlpZiAob3B0aW9ucy0+cGVybWl0X3R1biA9PSAtMSkKKyAJCW9wdGlvbnMtPnBlcm1pdF90dW4g PSBTU0hfVFVOTU9ERV9OTzsKKysJaWYgKG9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9PSAtMSkKKysJ CW9wdGlvbnMtPm5vbmVfZW5hYmxlZCA9IDA7CisrCWlmIChvcHRpb25zLT5ub25lbWFjX2VuYWJs ZWQgPT0gLTEpCisrCQlvcHRpb25zLT5ub25lbWFjX2VuYWJsZWQgPSAwOworKwlpZiAob3B0aW9u cy0+bm9uZW1hY19lbmFibGVkID4gMCAmJiBvcHRpb25zLT5ub25lX2VuYWJsZWQgPT0gMCkgewor KwkJZGVidWcgKCJBdHRlbXB0ZWQgdG8gZW5hYmxlZCBOb25lIE1BQyB3aXRob3V0IHNldHRpbmcg Tm9uZSBFbmFibGVkIHRvIHRydWUuIE5vbmUgTUFDIGRpc2FibGVkLiIpOworKwkJb3B0aW9ucy0+ bm9uZW1hY19lbmFibGVkID0gMDsKKysJfQorKwlpZiAob3B0aW9ucy0+dGNwX3Jjdl9idWZfcG9s bCA9PSAtMSkKKysJCW9wdGlvbnMtPnRjcF9yY3ZfYnVmX3BvbGwgPSAxOworKwlpZiAob3B0aW9u cy0+ZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IC0xKQorKwkJb3B0aW9ucy0+ZGlzYWJsZV9tdWx0 aXRocmVhZGVkID0gMDsKKysJaWYgKG9wdGlvbnMtPmhwbl9kaXNhYmxlZCA9PSAtMSkKKysJCW9w dGlvbnMtPmhwbl9kaXNhYmxlZCA9IDA7CisrCWlmIChvcHRpb25zLT51c2VfbXB0Y3AgPT0gLTEp CisrCQlvcHRpb25zLT51c2VfbXB0Y3AgPSAwOworIAlpZiAob3B0aW9ucy0+aXBfcW9zX2ludGVy YWN0aXZlID09IC0xKQorIAkJb3B0aW9ucy0+aXBfcW9zX2ludGVyYWN0aXZlID0gSVBUT1NfRFND UF9FRjsKKyAJaWYgKG9wdGlvbnMtPmlwX3Fvc19idWxrID09IC0xKQorQEAgLTYwMiw2ICs2MjUs OCBAQAorIAlzS2VyYmVyb3NHZXRBRlNUb2tlbiwgc0tlcmJlcm9zVW5pcXVlQ0NhY2hlLCBzS2Vy YmVyb3NVc2VLdXNlcm9rLCBzUGFzc3dvcmRBdXRoZW50aWNhdGlvbiwKKyAJc0tiZEludGVyYWN0 aXZlQXV0aGVudGljYXRpb24sIHNMaXN0ZW5BZGRyZXNzLCBzQWRkcmVzc0ZhbWlseSwKKyAJc1By aW50TW90ZCwgc1ByaW50TGFzdExvZywgc0lnbm9yZVJob3N0cywKKysJc05vbmVFbmFibGVkLCBz Tm9uZU1hY0VuYWJsZWQsIHNUY3BSY3ZCdWZQb2xsLCBzSFBORGlzYWJsZWQsCisrCXNEaXNhYmxl TVRBRVMsIHNVc2VNUFRDUCwKKyAJc1gxMUZvcndhcmRpbmcsIHNYMTFEaXNwbGF5T2Zmc2V0LCBz WDExTWF4RGlzcGxheXMsIHNYMTFVc2VMb2NhbGhvc3QsCisgCXNQZXJtaXRUVFksIHNTdHJpY3RN b2Rlcywgc0VtcHR5UGFzc3dkLCBzVENQS2VlcEFsaXZlLAorIAlzUGVybWl0VXNlckVudmlyb25t ZW50LCBzQWxsb3dUY3BGb3J3YXJkaW5nLCBzQ29tcHJlc3Npb24sCitAQCAtODE1LDYgKzg0MCwx MiBAQAorIAl7ICJyZXZva2Vka2V5cyIsIHNSZXZva2VkS2V5cywgU1NIQ0ZHX0FMTCB9LAorIAl7 ICJ0cnVzdGVkdXNlcmNha2V5cyIsIHNUcnVzdGVkVXNlckNBS2V5cywgU1NIQ0ZHX0FMTCB9LAor IAl7ICJhdXRob3JpemVkcHJpbmNpcGFsc2ZpbGUiLCBzQXV0aG9yaXplZFByaW5jaXBhbHNGaWxl LCBTU0hDRkdfQUxMIH0sCisrCXsgImhwbmRpc2FibGVkIiwgc0hQTkRpc2FibGVkLCBTU0hDRkdf QUxMIH0sCisrCXsgInRjcHJjdmJ1ZnBvbGwiLCBzVGNwUmN2QnVmUG9sbCwgU1NIQ0ZHX0FMTCB9 LAorKwl7ICJub25lZW5hYmxlZCIsIHNOb25lRW5hYmxlZCwgU1NIQ0ZHX0FMTCB9LAorKwl7ICJu b25lbWFjZW5hYmxlZCIsIHNOb25lTWFjRW5hYmxlZCwgU1NIQ0ZHX0FMTCB9LAorKwl7ICJ1c2Vt cHRjcCIsIHNVc2VNUFRDUCwgU1NIQ0ZHX0dMT0JBTCB9LAorKwl7ICJkaXNhYmxlTVRBRVMiLCBz RGlzYWJsZU1UQUVTLCBTU0hDRkdfQUxMIH0sCisgCXsgImtleGFsZ29yaXRobXMiLCBzS2V4QWxn b3JpdGhtcywgU1NIQ0ZHX0dMT0JBTCB9LAorIAl7ICJpbmNsdWRlIiwgc0luY2x1ZGUsIFNTSENG R19BTEwgfSwKKyAJeyAiaXBxb3MiLCBzSVBRb1MsIFNTSENGR19BTEwgfSwKK0BAIC04NzksNiAr OTEwLDcgQEAKKyAKKyAJZm9yIChpID0gMDsga2V5d29yZHNbaV0ubmFtZTsgaSsrKQorIAkJaWYg KHN0cmNhc2VjbXAoY3AsIGtleXdvcmRzW2ldLm5hbWUpID09IDApIHsKKysJCQlkZWJ1ZygiQ29u ZmlnIHRva2VuIGlzICVzIiwga2V5d29yZHNbaV0ubmFtZSk7CisgCQkJKmZsYWdzID0ga2V5d29y ZHNbaV0uZmxhZ3M7CisgCQkJcmV0dXJuIGtleXdvcmRzW2ldLm9wY29kZTsKKyAJCX0KK0BAIC0x NjUyLDYgKzE2ODQsMzAgQEAKKyAJCW11bHRpc3RhdGVfcHRyID0gbXVsdGlzdGF0ZV9pZ25vcmVf cmhvc3RzOworIAkJZ290byBwYXJzZV9tdWx0aXN0YXRlOworIAorKwljYXNlIHNUY3BSY3ZCdWZQ b2xsOgorKwkJaW50cHRyID0gJm9wdGlvbnMtPnRjcF9yY3ZfYnVmX3BvbGw7CisrCQlnb3RvIHBh cnNlX2ZsYWc7CisrCisrCWNhc2Ugc0hQTkRpc2FibGVkOgorKwkJaW50cHRyID0gJm9wdGlvbnMt Pmhwbl9kaXNhYmxlZDsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKysJY2FzZSBzTm9uZUVuYWJs ZWQ6CisrCQlpbnRwdHIgPSAmb3B0aW9ucy0+bm9uZV9lbmFibGVkOworKwkJZ290byBwYXJzZV9m bGFnOworKworKwljYXNlIHNOb25lTWFjRW5hYmxlZDoKKysJCWludHB0ciA9ICZvcHRpb25zLT5u b25lbWFjX2VuYWJsZWQ7CisrCQlnb3RvIHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ugc0Rpc2FibGVN VEFFUzoKKysJCWludHB0ciA9ICZvcHRpb25zLT5kaXNhYmxlX211bHRpdGhyZWFkZWQ7CisrCQln b3RvIHBhcnNlX2ZsYWc7CisrCisrCWNhc2Ugc1VzZU1QVENQOgorKwkJaW50cHRyID0gJm9wdGlv bnMtPnVzZV9tcHRjcDsKKysJCWdvdG8gcGFyc2VfZmxhZzsKKysKKyAJY2FzZSBzSWdub3JlVXNl cktub3duSG9zdHM6CisgCQlpbnRwdHIgPSAmb3B0aW9ucy0+aWdub3JlX3VzZXJfa25vd25faG9z dHM7CisgIHBhcnNlX2ZsYWc6CitAQCAtMzUyNiw2ICszNTgyLDExIEBACisgCWR1bXBfY2ZnX2Zt dGludChzU3RyZWFtTG9jYWxCaW5kVW5saW5rLCBvLT5md2Rfb3B0cy5zdHJlYW1sb2NhbF9iaW5k X3VubGluayk7CisgCWR1bXBfY2ZnX2ZtdGludChzRmluZ2VycHJpbnRIYXNoLCBvLT5maW5nZXJw cmludF9oYXNoKTsKKyAJZHVtcF9jZmdfZm10aW50KHNFeHBvc2VBdXRoSW5mbywgby0+ZXhwb3Nl X3VzZXJhdXRoX2luZm8pOworKwlkdW1wX2NmZ19mbXRpbnQoc0hQTkRpc2FibGVkLCBvLT5ocG5f ZGlzYWJsZWQpOworKwlkdW1wX2NmZ19mbXRpbnQoc1RjcFJjdkJ1ZlBvbGwsIG8tPnRjcF9yY3Zf YnVmX3BvbGwpOworKwlkdW1wX2NmZ19mbXRpbnQoc05vbmVFbmFibGVkLCBvLT5ub25lX2VuYWJs ZWQpOworKwlkdW1wX2NmZ19mbXRpbnQoc05vbmVNYWNFbmFibGVkLCBvLT5ub25lbWFjX2VuYWJs ZWQpOworKwlkdW1wX2NmZ19mbXRpbnQoc1VzZU1QVENQLCBvLT51c2VfbXB0Y3ApOworIAlkdW1w X2NmZ19mbXRpbnQoc1JlZnVzZUNvbm5lY3Rpb24sIG8tPnJlZnVzZV9jb25uZWN0aW9uKTsKKyAK KyAJLyogc3RyaW5nIGFyZ3VtZW50cyAqLworZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcv c2VydmNvbmYuaCBvcGVuc3NoLTEwLjNwMS9zZXJ2Y29uZi5oCistLS0gb3BlbnNzaC0xMC4zcDEu b3JpZy9zZXJ2Y29uZi5oCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA0MTk1NDQ3ICswMjAwCisrKysg b3BlbnNzaC0xMC4zcDEvc2VydmNvbmYuaAkyMDI2LTA3LTAyIDAwOjI3OjI5LjczMDU1NzYzMCAr MDIwMAorQEAgLTIzMSw2ICsyMzEsMTQgQEAKKyAJY2hhciAgICpwYW1fc2VydmljZV9uYW1lOwor IAlpbnQJcGVybWl0X3BhbV91c2VyX2NoYW5nZTsJLyogQWxsb3cgUEFNIHRvIGNoYW5nZSB1c2Vy IG5hbWUgKi8KKyAKKysJLyogaHBuc3NoIG9wdGlvbnMgKi8KKysJaW50CXRjcF9yY3ZfYnVmX3Bv bGw7CS8qIHBvbGwgdGNwIHJjdiB3aW5kb3cgaW4gYXV0b3R1bmluZyBrZXJuZWxzKi8KKysJaW50 CWhwbl9kaXNhYmxlZDsJCS8qIGRpc2FibGUgaHBuIGZ1bmN0aW9uYWxpdHkuIGZhbHNlIGJ5IGRl ZmF1bHQgKi8KKysJaW50CW5vbmVfZW5hYmxlZDsJCS8qIEVuYWJsZSBOT05FIGNpcGhlciBzd2l0 Y2ggKi8KKysJaW50CW5vbmVtYWNfZW5hYmxlZDsJLyogRW5hYmxlIE5PTkUgTUFDIHN3aXRjaCAq LworKwlpbnQJdXNlX21wdGNwOwkJLyogVXNlIE1QVENQIC0gTGludXggb25seSAqLworKwlpbnQJ ZGlzYWJsZV9tdWx0aXRocmVhZGVkOwkvKiBEaXNhYmxlIG11bHRpdGhyZWFkZWQgYWVzLWN0ciBj aXBoZXIgKi8KKysKKyAJaW50CXBlcm1pdF90dW47CisgCisgCWNoYXIgICAqKnBlcm1pdHRlZF9v cGVuczsJLyogTWF5IGFsc28gYmUgb25lIG9mIFBFUk1JVE9QRU5fKiAqLworZGlmZiAtTnVyIG9w ZW5zc2gtMTAuM3AxLm9yaWcvc2VydmVybG9vcC5jIG9wZW5zc2gtMTAuM3AxL3NlcnZlcmxvb3Au YworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2VydmVybG9vcC5jCTIwMjYtMDctMDIgMDA6Mjc6 MDYuMTA0MTk1NDQ3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvc2VydmVybG9vcC5jCTIwMjYt MDctMDIgMTA6MTE6MzQuNjM0NTE2OTg1ICswMjAwCitAQCAtNzcsNiArNzcsOCBAQAorICNpbmNs dWRlICJzZXJ2ZXJsb29wLmgiCisgI2luY2x1ZGUgInNzaGVyci5oIgorICNpbmNsdWRlICJjb21w YXQuaCIKKysjaW5jbHVkZSAibWV0cmljcy5oIgorKyNpbmNsdWRlICJjaXBoZXItc3dpdGNoLmgi CisgCisgZXh0ZXJuIFNlcnZlck9wdGlvbnMgb3B0aW9uczsKKyAKK0BAIC0zNDEsNiArMzQzLDcg QEAKKyAJc2lnc2V0X3QgYnNpZ3NldCwgb3NpZ3NldDsKKyAKKyAJZGVidWcoIkVudGVyaW5nIGlu dGVyYWN0aXZlIHNlc3Npb24gZm9yIFNTSDIuIik7CisrCXNzaC0+c3RhcnRfdGltZSA9IG1vbm90 aW1lX2RvdWJsZSgpOworIAorIAlpZiAoc2lnZW1wdHlzZXQoJmJzaWdzZXQpID09IC0xIHx8Cisg CSAgICBzaWdhZGRzZXQoJmJzaWdzZXQsIFNJR0NITEQpID09IC0xKQorQEAgLTM5NSw5ICszOTgs MTUgQEAKKyAJY29sbGVjdF9jaGlsZHJlbihzc2gpOworIAlmcmVlKHBmZCk7CisgCisrCS8qIHdy aXRlIGZpbmFsIGxvZyBlbnRyeSAoZG8gd2UgbmVlZCB0aGlzIGhlcmU/IC1janIpKi8KKysJc3No cGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOworKworIAkvKiBmcmVlIGFsbCBjaGFubmVscywgbm8g bW9yZSByZWFkcyBhbmQgd3JpdGVzICovCisgCWNoYW5uZWxfZnJlZV9hbGwoc3NoKTsKKyAKKysJ LyogZmluYWwgZW50cnkgbXVzdCBjb21lIGFmdGVyIGNoYW5uZWxzIGNsb3NlIC1janIgKi8KKysJ c3NocGt0X2ZpbmFsX2xvZ19lbnRyeShzc2gpOworKworIAkvKiBmcmVlIHJlbWFpbmluZyBzZXNz aW9ucywgZS5nLiByZW1vdmUgd3RtcCBlbnRyaWVzICovCisgCXNlc3Npb25fZGVzdHJveV9hbGwo c3NoLCBOVUxMKTsKKyB9CitAQCAtNTk5LDYgKzYwOCw4IEBACisgCWMgPSBjaGFubmVsX25ldyhz c2gsICJzZXNzaW9uIiwgU1NIX0NIQU5ORUxfTEFSVkFMLAorIAkgICAgLTEsIC0xLCAtMSwgLyp3 aW5kb3cgc2l6ZSovMCwgQ0hBTl9TRVNfUEFDS0VUX0RFRkFVTFQsCisgCSAgICAwLCAic2VydmVy LXNlc3Npb24iLCAxKTsKKysJaWYgKChvcHRpb25zLnRjcF9yY3ZfYnVmX3BvbGwpICYmICghb3B0 aW9ucy5ocG5fZGlzYWJsZWQpKQorKwkJYy0+ZHluYW1pY193aW5kb3cgPSAxOworIAlpZiAoc2Vz c2lvbl9vcGVuKHRoZV9hdXRoY3R4dCwgYy0+c2VsZikgIT0gMSkgeworIAkJZGVidWcoInNlc3Np b24gb3BlbiBmYWlsZWQsIGZyZWUgY2hhbm5lbCAlZCIsIGMtPnNlbGYpOworIAkJY2hhbm5lbF9m cmVlKHNzaCwgYyk7CitAQCAtNjY3LDYgKzY3OCw2NyBAQAorIAlyZXR1cm4gMDsKKyB9CisgCisr Lyogd2UgbmVlZCB0byBnZXQgdGhlIGFjdHVhbCBzb2NrZXQgaW4gdXNlIGFuZCBmcm9tIHRoZXJl CisrICogcmVhZCB0aGUgdmFsdWVzIGluIHRoZSBUQ1BfSU5GTyBzdHJ1Y3QuCisrICogc2hvdXQg b3V0IHRvIFJlbmUgUGZpZmZlciBmb3IgdGhlIGFydGljbGUgaHR0cHM6Ly9saW51eGdhemV0dGUu bmV0LzEzNi9wZmVpZmZlci5odG1sCisrICogZm9yIGdldHRpbmcgbWUgc3RhcnRlZC4gVGhpcyBv bmx5IHdvcmtzIG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZSB0Y3BfaW5mbworKyAqIHN0cnVj dDsgbGludXgsIGZyZWVic2QsIG5ldGJzZCBhcyBvZiBub3cuIEFwcGxlIGhhcyBvbmUgYnV0IGl0 J3MgY29tcGxldGVseSBkaWZmZXJlbnQKKysgKiB0aGFuIGFueSBvZiB0aGUgb3RoZXJzLgorKyAq LworK3N0YXRpYyBpbnQKKytzZXJ2ZXJfaW5wdXRfbWV0cmljc19yZXF1ZXN0KHN0cnVjdCBzc2gg KnNzaCwgc3RydWN0IHNzaGJ1ZiAqKnJlc3BwKQorK3sKKysJaW50IHN1Y2Nlc3MgPSAwOworKwkv KiBUQ1BfSU5GTyBpcyBkZWZpbmVkIGluIG1ldHJpY3MuaAorKwkgKiBpZiBpdCdzIG5vdCBkZWZp bmVkIHRoZW4gd2UgZG9uJ3Qgc3VwcG9ydCB0Y3BfaW5mbworKwkgKiBzbyBqdXN0IHJldHVybiBh IGZhaWx1cmUgY29kZSAqLworKyNpZiAhZGVmaW5lZCBUQ1BfSU5GTworKwlyZXR1cm4gc3VjY2Vz czsKKysjZWxzZQorKwlzdHJ1Y3QgdGNwX2luZm8gdGNwX2luZm87CisrCXN0cnVjdCBzc2hidWYg KnJlc3AgPSBOVUxMOworKwlpbnQgdGNwX2luZm9fbGVuOworKwkvKiB0aGlzIGlzIHRoZSBzb2Nr ZXQgb2YgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLworKwlpbnQgc29ja19pbiA9IHNzaF9wYWNr ZXRfZ2V0X2Nvbm5lY3Rpb25faW4oc3NoKTsKKysJaW50IHI7CisrCWJpbm4gKm1ldHJpY3NvYmo7 CisrCisrCXRjcF9pbmZvX2xlbiA9IHNpemVvZih0Y3BfaW5mbyk7IC8qZXhwZWN0IGFyb3VuZCAz MzAgYnl0ZXMgKi8KKysJaWYgKChyZXNwID0gc3NoYnVmX25ldygpKSA9PSBOVUxMKQorKwkJZmF0 YWxfZigic3NoYnVmX25ldyIpOworKworKwkvKiBjcmVhdGUgdGhlIGJpbm4gb2JqZWN0IHRvIGhv bGQgdGhlIHNlcmlhbGl6ZWQgbWV0cmljcyAqLworKwltZXRyaWNzb2JqID0gYmlubl9vYmplY3Qo KTsKKysJaWYgKG1ldHJpY3NvYmogPT0gTlVMTCkgeworKwkJZXJyb3JfZigiQ291bGQgbm90IGNy ZWF0ZSBtZXRyaWNzIG9iamVjdCIpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJZGVidWcoIlN0 YWNrIG1ldHJpY3MgcmVxdWVzdCBmb3IgY29ubmVjdGlvbiAlZCIsIHNvY2tfaW4pOworKwlpZiAo KHIgPSBnZXRzb2Nrb3B0KHNvY2tfaW4sIElQUFJPVE9fVENQLCBUQ1BfSU5GTywgKHZvaWQgKikm dGNwX2luZm8sCisrCQkJICAgKHNvY2tsZW5fdCAqKSZ0Y3BfaW5mb19sZW4pKSAhPSAwKSB7Cisr CQllcnJvcl9mKCJDb3VsZCBub3QgcmVhZCB0Y3BfaW5mbyBmcm9tIHNvY2tldCIpOworKwkJZ290 byBvdXQ7CisrCX0KKysJLyogd3JpdGUgdGhlIHRjcF9pbmZvIGRhdGEgdG8gdGhlIGJpbm4gb2Jq ZWN0ICovCisrCW1ldHJpY3Nfd3JpdGVfYmlubl9vYmplY3QoJnRjcF9pbmZvLCBtZXRyaWNzb2Jq KTsKKysJaWYgKChyID0gc3NoYnVmX3B1dF9zdHJpbmcocmVzcCwgYmlubl9wdHIobWV0cmljc29i aiksCisrCQkJCSAgIGJpbm5fc2l6ZShtZXRyaWNzb2JqKSkpICE9IDApIHsKKysJCWVycm9yX2Zy KHIsICJGYWlsZWQgdG8gYnVpbGQgdGNwX2luZm8gb2JqZWN0Iik7CisrCQlnb3RvIG91dDsKKysJ fQorKwkvKiBjb3B5IHRoZSBwb2ludGVyIG9mIHRoZSByZXNwb25zZSB0byB0aGUgcGFzc2VkIGlu IHJlc3BvbnNlIHBvaW50ZXIgKi8KKysJKnJlc3BwID0gcmVzcDsKKysJcmVzcCA9IE5VTEw7IC8q IGRvbid0IGZyZWUgaXQgKi8KKysJLyogZXZlcnl0aGluZyB3b3JrZWQgc28gc2V0IHN1Y2Nlc3Mg dG8gdHJ1ZSAqLworKwlzdWNjZXNzID0gMTsKKytvdXQ6CisrCXNzaGJ1Zl9mcmVlKHJlc3ApOwor KwliaW5uX2ZyZWUobWV0cmljc29iaik7CisrCXJldHVybiBzdWNjZXNzOworKyNlbmRpZiAvKiBU Q1BfSU5GTyAqLworK30KKysKKyBzdGF0aWMgaW50Cisgc2VydmVyX2lucHV0X2hvc3RrZXlzX3By b3ZlKHN0cnVjdCBzc2ggKnNzaCwgc3RydWN0IHNzaGJ1ZiAqKnJlc3BwKQorIHsKK0BAIC04NDMs NiArOTE1LDEwIEBACisgCQlzdWNjZXNzID0gMTsKKyAJfSBlbHNlIGlmIChzdHJjbXAocnR5cGUs ICJob3N0a2V5cy1wcm92ZS0wMEBvcGVuc3NoLmNvbSIpID09IDApIHsKKyAJCXN1Y2Nlc3MgPSBz ZXJ2ZXJfaW5wdXRfaG9zdGtleXNfcHJvdmUoc3NoLCAmcmVzcCk7CisrCX0gZWxzZSBpZiAoc3Ry Y21wKHJ0eXBlLCAic3RhY2stbWV0cmljc0BocG5zc2gub3JnIikgPT0gMCkgeworKwkJLyogcmVz cCBpcyB0aGUgcmVzcG9uc2UgKHNzaGJ1ZiBzdHJ1Y3QpIGZyb20gdGhlIGZ1bmN0aW9uIHdoaWNo IGlzCisrCQkgKiBoYW5kbGVkIGJlbG93IGluIHRoZSB3YW50X3JlcGx5IHN0YW56YSAqLworKwkJ c3VjY2VzcyA9IHNlcnZlcl9pbnB1dF9tZXRyaWNzX3JlcXVlc3Qoc3NoLCAmcmVzcCk7CisgCX0K KyAJLyogWFhYIHNzaHBrdF9nZXRfZW5kKCkgKi8KKyAJaWYgKHdhbnRfcmVwbHkpIHsKK2RpZmYg LU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nlc3Npb24uYyBvcGVuc3NoLTEwLjNwMS9zZXNzaW9u LmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3Nlc3Npb24uYwkyMDI2LTA3LTAyIDAwOjI3OjA2 LjEwNDE5NTQ0NyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3Nlc3Npb24uYwkyMDI2LTA3LTAy IDAwOjI3OjI5LjczMDk0MTczNSArMDIwMAorQEAgLTkwLDYgKzkwLDcgQEAKKyAjaW5jbHVkZSAi bW9uaXRvcl93cmFwLmgiCisgI2luY2x1ZGUgInNmdHAuaCIKKyAjaW5jbHVkZSAiYXRvbWljaW8u aCIKKysjaW5jbHVkZSAiY2lwaGVyLXN3aXRjaC5oIgorIAorICNpZiBkZWZpbmVkKEtSQjUpICYm IGRlZmluZWQoVVNFX0FGUykKKyAjaW5jbHVkZSA8a2Fmcy5oPgorQEAgLTIxMiw2ICsyMTMsNyBA QAorIAlyZXN0b3JlX3VpZCgpOworIAorIAkvKiBBbGxvY2F0ZSBhIGNoYW5uZWwgZm9yIHRoZSBh dXRoZW50aWNhdGlvbiBhZ2VudCBzb2NrZXQuICovCisrCS8qIHRoaXMgc2hvdWxkbid0IG1hdHRl ciBpZiBpdHMgaHBuIG9yIG5vdCAtIGNqciAqLworIAluYyA9IGNoYW5uZWxfbmV3KHNzaCwgImF1 dGgtbGlzdGVuZXIiLAorIAkgICAgU1NIX0NIQU5ORUxfQVVUSF9TT0NLRVQsIHNvY2ssIHNvY2ss IC0xLAorIAkgICAgQ0hBTl9YMTFfV0lORE9XX0RFRkFVTFQsIENIQU5fWDExX1BBQ0tFVF9ERUZB VUxULAorQEAgLTM3NSw2ICszNzcsNyBAQAorIGRvX2V4ZWNfbm9fcHR5KHN0cnVjdCBzc2ggKnNz aCwgU2Vzc2lvbiAqcywgY29uc3QgY2hhciAqY29tbWFuZCkKKyB7CisgCXBpZF90IHBpZDsKKysJ aW50IGZpcHMgPSAwOworICNpZmRlZiBVU0VfUElQRVMKKyAJaW50IHBpblsyXSwgcG91dFsyXSwg cGVyclsyXTsKKyAKK0BAIC01MzAsNiArNTMzLDE3IEBACisgCXNlc3Npb25fc2V0X2Zkcyhzc2gs IHMsIGlub3V0WzFdLCBpbm91dFsxXSwgZXJyWzFdLAorIAkgICAgcy0+aXNfc3Vic3lzdGVtLCAw KTsKKyAjZW5kaWYKKysJLyogc3dpdGNoIHRvIHRoZSBwYXJhbGxlbCBjaXBoZXJzIGlmIG5lY2Vz c2FyeQorKwkgKiBJZiBGSVBTIG1vZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFy YWxsZWwgY2lwaGVycy4KKysJICovCisrCWZpcHMgPSBmaXBzX2VuYWJsZWQoKTsKKysJaWYgKGZp cHMpCisrCQlkZWJ1ZzJfZigiRklQUyBtb2RlIGlzIGVuYWJsZWQuIFBhcmFsbGVsIGNpcGhlcnMg YXJlIGRpc2FibGVkIik7CisrCWVsc2UKKysJCWRlYnVnMl9mKCJGSVBTIG1vZGUgbm90IGZvdW5k IG9yIGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBlbmFibGVkIik7CisrCisrCWlmICgo b3B0aW9ucy5kaXNhYmxlX211bHRpdGhyZWFkZWQgPT0gMCkgJiYgKGZpcHMgPT0gMCkpCisrCQlj aXBoZXJfc3dpdGNoKHNzaCk7CisgCXJldHVybiAwOworIH0KKyAKK0BAIC01NDQsNiArNTU4LDcg QEAKKyB7CisgCWludCBmZG91dCwgcHR5ZmQsIHR0eWZkLCBwdHltYXN0ZXI7CisgCXBpZF90IHBp ZDsKKysJaW50IGZpcHMgPSAwOworIAorIAlpZiAocyA9PSBOVUxMKQorIAkJZmF0YWwoImRvX2V4 ZWNfcHR5OiBubyBzZXNzaW9uIik7CitAQCAtNjQxLDYgKzY1NiwxNyBAQAorIAkvKiBFbnRlciBp bnRlcmFjdGl2ZSBzZXNzaW9uLiAqLworIAlzLT5wdHltYXN0ZXIgPSBwdHltYXN0ZXI7CisgCXNl c3Npb25fc2V0X2Zkcyhzc2gsIHMsIHB0eWZkLCBmZG91dCwgLTEsIDEsIDEpOworKwkvKiBzd2l0 Y2ggdG8gdGhlIHBhcmFsbGVsIGNpcGhlciBpZiBhcHByb3ByaWF0ZQorKwkgKiBJZiBGSVBTIG1v ZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFyYWxsZWwgY2lwaGVycy4KKysJICov CisrCWZpcHMgPSBmaXBzX2VuYWJsZWQoKTsKKysJaWYgKGZpcHMpCisrCQlkZWJ1ZzJfZigiRklQ UyBtb2RlIGlzIGVuYWJsZWQuIFBhcmFsbGVsIGNpcGhlcnMgYXJlIGRpc2FibGVkIik7CisrCWVs c2UKKysJCWRlYnVnMl9mKCJGSVBTIG1vZGUgbm90IGZvdW5kIG9yIGRpc2FibGVkLiBQYXJhbGxl bCBjaXBoZXJzIGFyZSBlbmFibGVkIik7CisrCisrCWlmICgob3B0aW9ucy5kaXNhYmxlX211bHRp dGhyZWFkZWQgPT0gMCkgJiYgKGZpcHMgPT0gMCkpCisrCQljaXBoZXJfc3dpdGNoKHNzaCk7Cisg CXJldHVybiAwOworIH0KKyAKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NmdHAuMSBv cGVuc3NoLTEwLjNwMS9zZnRwLjEKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NmdHAuMQkyMDI2 LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3NmdHAu MQkyMDI2LTA3LTAyIDAwOjI3OjI5LjczMTEyMDE3NiArMDIwMAorQEAgLTU1LDYgKzU1LDkgQEAK KyB0cmFuc3BvcnQuCisgSXQgbWF5IGFsc28gdXNlIG1hbnkgZmVhdHVyZXMgb2Ygc3NoLCBzdWNo IGFzIHB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gYW5kCisgY29tcHJlc3Npb24uCisrLk5tCisr aXMgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBPcGVuU1NIJ3Mgc2Z0cCBhbmQgdXNlcyB0aGUgc2Ft ZSBkaXJlY3RpdmUgYW5kIGNvbmZpZ3VyYXRpb24KKytvcHRpb25zIGV4Y2VwdCB3aGVyZSBub3Rl ZC4gCisgLlBwCisgVGhlCisgLkFyIGRlc3RpbmF0aW9uCitAQCAtMzE5LDYgKzMyMiw3IEBACisg Lkl0IFR1bm5lbAorIC5JdCBUdW5uZWxEZXZpY2UKKyAuSXQgVXBkYXRlSG9zdEtleXMKKysuSXQg VXNlTVBUQ1AKKyAuSXQgVXNlcgorIC5JdCBVc2VyS25vd25Ib3N0c0ZpbGUKKyAuSXQgVmVyaWZ5 SG9zdEtleUROUworQEAgLTMzOCw3ICszNDIsOCBAQAorIFNwZWNpZnkgaG93IG1hbnkgcmVxdWVz dHMgbWF5IGJlIG91dHN0YW5kaW5nIGF0IGFueSBvbmUgdGltZS4KKyBJbmNyZWFzaW5nIHRoaXMg bWF5IHNsaWdodGx5IGltcHJvdmUgZmlsZSB0cmFuc2ZlciBzcGVlZAorIGJ1dCB3aWxsIGluY3Jl YXNlIG1lbW9yeSB1c2FnZS4KKy1UaGUgZGVmYXVsdCBpcyA2NCBvdXRzdGFuZGluZyByZXF1ZXN0 cy4KKytUaGUgZGVmYXVsdCBpcyAxMDI0IG91dHN0YW5kaW5nIHJlcXVlc3RzIHByb3ZpZGluZyBm b3IgMzJNQgorK29mIG91dHN0YW5kaW5nIGRhdGEgd2l0aCBhIDMyS0IgYnVmZmVyLgorIC5JdCBG bCByCisgUmVjdXJzaXZlbHkgY29weSBlbnRpcmUgZGlyZWN0b3JpZXMgd2hlbiB1cGxvYWRpbmcg YW5kIGRvd25sb2FkaW5nLgorIE5vdGUgdGhhdAorQEAgLTM2NywxMCArMzcyLDEzIEBACisgLkl0 IENtIG5yZXF1ZXN0cyBOcyA9IE5zIEFyIHZhbHVlCisgQ29udHJvbHMgaG93IG1hbnkgY29uY3Vy cmVudCBTRlRQIHJlYWQgb3Igd3JpdGUgcmVxdWVzdHMgbWF5IGJlIGluIHByb2dyZXNzCisgYXQg YW55IHBvaW50IGluIHRpbWUgZHVyaW5nIGEgZG93bmxvYWQgb3IgdXBsb2FkLgorLUJ5IGRlZmF1 bHQgNjQgcmVxdWVzdHMgbWF5IGJlIGFjdGl2ZSBjb25jdXJyZW50bHkuCisrVGhpcyB2YWx1ZSBt dXN0IGJlIGJldHdlZW4gMSBhbmQgODE5Mi4KKytCeSBkZWZhdWx0IDEwMjQgcmVxdWVzdHMgbWF5 IGJlIGFjdGl2ZSBjb25jdXJyZW50bHkuCisgLkl0IENtIGJ1ZmZlciBOcyA9IE5zIEFyIHZhbHVl CisgQ29udHJvbHMgdGhlIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIGEgc2luZ2xlIFNGVFAgcmVh ZC93cml0ZSBvcGVyYXRpb24gdXNlZAorIGR1cmluZyBkb3dubG9hZCBvciB1cGxvYWQuCisrVGhp cyB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMUIgYW5kIDI1NUtCLiBZb3UgbWF5IHVzZQorK3RoZSBL IHVuaXQgZm9yIHRoZSBzaXplLiBFLmcuIDMyNzY4IG9yIDMySy4KKyBCeSBkZWZhdWx0IGEgMzJL QiBidWZmZXIgaXMgdXNlZC4KKyAuRWwKKyAuRWwKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5v cmlnL3NmdHAuYyBvcGVuc3NoLTEwLjNwMS9zZnRwLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmln L3NmdHAuYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAorKysrIG9wZW5zc2gt MTAuM3AxL3NmdHAuYwkyMDI2LTA3LTAyIDEwOjE5OjE2LjAzNTEyODEwOSArMDIwMAorQEAgLTI1 ODksMjAgKzI1ODksMjUgQEAKKyAJCQkvKiBQbGVhc2Uga2VlcCBpbiBzeW5jIHdpdGggc3NoLmMg LVggKi8KKyAJCQlpZiAoc3RybmNtcChvcHRhcmcsICJidWZmZXI9IiwgNykgPT0gMCkgeworIAkJ CQlyID0gc2Nhbl9zY2FsZWQob3B0YXJnICsgNywgJmxsdik7CistCQkJCWlmIChyID09IDAgJiYg KGxsdiA8PSAwIHx8IGxsdiA+IDI1NiAqIDEwMjQpKSB7CisrCQkJCS8qIGRvbid0IGFzayBmb3Ig YSBidWZmZXIgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0KKysJCQkJICogc2l6ZSB0aGF0IFNGVFAg Y2FuIGhhbmRsZSAqLworKwkJCQlpZiAociA9PSAwICYmIChsbHYgPD0gMCB8fCBsbHYgPiAoU0ZU UF9NQVhfTVNHX0xFTkdUSCAtIDEwMjQpKSkgeworIAkJCQkJciA9IC0xOworIAkJCQkJZXJybm8g PSBFSU5WQUw7CisgCQkJCX0KKyAJCQkJaWYgKHIgPT0gLTEpIHsKKy0JCQkJCWZhdGFsKCJJbnZh bGlkIGJ1ZmZlciBzaXplIFwiJXNcIjogJXMiLAorLQkJCQkJICAgICBvcHRhcmcgKyA3LCBzdHJl cnJvcihlcnJubykpOworKwkJCQkJZmF0YWwoIkludmFsaWQgYnVmZmVyIHNpemUuIE11c3QgYmUg YmV0d2VlbiAxQiBhbmQgMjU1S0IuIgorKwkJCQkJICAgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcg KyA3LCBzdHJlcnJvcihlcnJubykpOworIAkJCQl9CisgCQkJCWNvcHlfYnVmZmVyX2xlbiA9IChz aXplX3QpbGx2OworIAkJCX0gZWxzZSBpZiAoc3RybmNtcChvcHRhcmcsICJucmVxdWVzdHM9Iiwg MTApID09IDApIHsKKy0JCQkJbGx2ID0gc3RydG9udW0ob3B0YXJnICsgMTAsIDEsIDI1NiAqIDEw MjQsCisrCQkJCS8qIG1vcmUgdGhhbiAxMGsgdG8gMTVrIHJlcXVlc3RzIHN0YXJ0cyBzdGFsbGlu ZyB0aGUgY29ubmVjdGlvbgorKwkJCQkgKiA4MTkyICogZGVmYXVsdCBidWZmZXIgc2l6ZSBpcyAy NTZNQiBvZiBvdXRzdGFuZGluZyBkYXRhLgorKwkJCQkgKiBpZiB1c2VycyBuZWVkIG1vcmUgdGhl biB0aGV5IG5lZWQgdG8gdXAgdGhlIGJ1ZmZlciBzaXplICovCisrCQkJCWxsdiA9IHN0cnRvbnVt KG9wdGFyZyArIDEwLCAxLCA4ICogMTAyNCwKKyAJCQkJICAgICZlcnJzdHIpOworIAkJCQlpZiAo ZXJyc3RyICE9IE5VTEwpIHsKKy0JCQkJCWZhdGFsKCJJbnZhbGlkIG51bWJlciBvZiByZXF1ZXN0 cyAiCisrCQkJCQlmYXRhbCgiSW52YWxpZCBudW1iZXIgb2YgcmVxdWVzdHMuIE11c3QgYmUgYmV0 d2VlbiAxIGFuZCA4MTkyLiAiCisgCQkJCQkgICAgIlwiJXNcIjogJXMiLCBvcHRhcmcgKyAxMCwg ZXJyc3RyKTsKKyAJCQkJfQorIAkJCQludW1fcmVxdWVzdHMgPSAoc2l6ZV90KWxsdjsKK2RpZmYg LU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NmdHAtY2xpZW50LmMgb3BlbnNzaC0xMC4zcDEvc2Z0 cC1jbGllbnQuYworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc2Z0cC1jbGllbnQuYwkyMDI2LTA3 LTAyIDAwOjI3OjA2LjEwMzI3NTMwNyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3NmdHAtY2xp ZW50LmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzE4NTUwMDEgKzAyMDAKK0BAIC02MCw3ICs2MCw4 IEBACisgI2RlZmluZSBERUZBVUxUX0NPUFlfQlVGTEVOCTMyNzY4CisgCisgLyogRGVmYXVsdCBu dW1iZXIgb2YgY29uY3VycmVudCB4ZmVyIHJlcXVlc3RzIChmaXggc2Z0cC4xIHNjcC4xIGlmIGNo YW5nZWQpICovCistI2RlZmluZSBERUZBVUxUX05VTV9SRVFVRVNUUwk2NAorKy8qIDEwMjQgeGZl ciByZXF1ZXN0cyBnaXZlcyB1cyAzMk1CIG9mIHJlY2VpdmUgYnVmZmVyIHNwYWNlICovCisrI2Rl ZmluZSBERUZBVUxUX05VTV9SRVFVRVNUUwkxMDI0CisgCisgLyogTWluaW11bSBhbW91bnQgb2Yg ZGF0YSB0byByZWFkIGF0IGEgdGltZSAqLworICNkZWZpbmUgTUlOX1JFQURfU0laRQk1MTIKK2Rp ZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC4xIG9wZW5zc2gtMTAuM3AxL3NzaC4xCist LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2guMQkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0 NyArMDIwMAorKysrIG9wZW5zc2gtMTAuM3AxL3NzaC4xCTIwMjYtMDctMDIgMDE6NDU6MjAuNjkx OTMxNTMzICswMjAwCitAQCAtNzcsNiArNzcsMTQgQEAKKyBYMTEgY29ubmVjdGlvbnMsIGFyYml0 cmFyeSBUQ1AgcG9ydHMgYW5kCisgLlV4IE5zIC1kb21haW4KKyBzb2NrZXRzIGNhbiBhbHNvIGJl IGZvcndhcmRlZCBvdmVyIHRoZSBzZWN1cmUgY2hhbm5lbC4KKysuTm0KKytpcyBiaW5hcnkgY29t cGF0aWJsZSB3aXRoIHRoZSBtb3JlIHdlbGwga25vd24gT3BlblNTSCBhbmQgdXNlcyB0aGUgc2Ft ZSBjb25maWd1cmF0aW9uCisrZGlyZWN0aXZlcywgbWV0aG9kcywgYW5kIGtleXdvcmRzIGV4Y2Vw dCB3aGVyZSBub3RlZCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGRlZmF1bHQgcG9ydC4KKytI UE4tU1NIIHNlcnZlcnMsIGJ5IGRlZmF1bHQsIHVzZSBwb3J0IDIyMjIgZm9yIGNvbm5lY3Rpb24s IGFuZCBhcyBzdWNoLAorKy5ObQorK2NsaWVudHMKKythdHRlbXB0IHRvIGNvbm5lY3Qgb24gdGhh dCBwb3J0LiBJZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IG9uIHBvcnQgMjIyMiBmYWlscyBpdCB3 aWxsIGZhbGxiYWNrIHRvCisrcG9ydCAyMi4gUGxlYXNlIHNlZSB0aGUgLXAgc3dpdGNoIGZvciBt b3JlIGluZm9ybWF0aW9uLgorIC5QcAorIC5ObQorIGNvbm5lY3RzIGFuZCBsb2dzIGludG8gdGhl IHNwZWNpZmllZAorQEAgLTUzMSwxMSArNTM5LDEzIEBACisgLkl0IENvbnRyb2xNYXN0ZXIKKyAu SXQgQ29udHJvbFBhdGgKKyAuSXQgQ29udHJvbFBlcnNpc3QKKysuSXQgRGlzYWJsZU1UQUVTKgor IC5JdCBEeW5hbWljRm9yd2FyZAorIC5JdCBFbmFibGVFc2NhcGVDb21tYW5kbGluZQorIC5JdCBF bmFibGVTU0hLZXlzaWduCisgLkl0IEVzY2FwZUNoYXIKKyAuSXQgRXhpdE9uRm9yd2FyZEZhaWx1 cmUKKysuSXQgRmFsbGJhY2tQb3J0CisgLkl0IEZpbmdlcnByaW50SGFzaAorIC5JdCBGb3JrQWZ0 ZXJBdXRoZW50aWNhdGlvbgorIC5JdCBGb3J3YXJkQWdlbnQKK0BAIC01NDgsNiArNTU4LDggQEAK KyAuSXQgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscworIC5JdCBHYXRld2F5UG9ydHMKKyAuSXQg R2xvYmFsS25vd25Ib3N0c0ZpbGUKKysuSXQgSGFwcHlFeWVzCisrLkl0IEhhcHB5RGVsYXkKKyAu SXQgR1NTQVBJS2V4QWxnb3JpdGhtcworIC5JdCBHU1NBUElSZW5ld2FsRm9yY2VzUmVrZXkKKyAu SXQgR1NTQVBJU2VydmVySWRlbnRpdHkKK0BAIC01NTksNiArNTcxLDcgQEAKKyAuSXQgSG9zdGJh c2VkQWNjZXB0ZWRBbGdvcml0aG1zCisgLkl0IEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uCisgLkl0 IEhvc3RuYW1lCisrLkl0IEhQTkRpc2FibGVkKgorIC5JdCBJUFFvUworIC5JdCBJZGVudGl0aWVz T25seQorIC5JdCBJZGVudGl0eUFnZW50CitAQCAtNTc0LDcgKzU4NywxMyBAQAorIC5JdCBMb2dM ZXZlbAorIC5JdCBMb2dWZXJib3NlCisgLkl0IE1BQ3MKKysuSXQgTWV0cmljcworKy5JdCBNZXRy aWNzSW50ZXJ2YWwKKysuSXQgTWV0cmljc1BhdGgKKyAuSXQgTm9Ib3N0QXV0aGVudGljYXRpb25G b3JMb2NhbGhvc3QKKysuSXQgTm9uZUNpcGhlckVuYWJsZWQqCisrLkl0IE5vbmVFbmFibGVkKgor Ky5JdCBOb25lTWFjRW5hYmxlZCoKKyAuSXQgTnVtYmVyT2ZQYXNzd29yZFByb21wdHMKKyAuSXQg T2JzY3VyZUtleXN0cm9rZVRpbWluZworIC5JdCBQS0NTMTFQcm92aWRlcgorQEAgLTYwNiwxNSAr NjI1LDE5IEBACisgLkl0IFN0cmljdEhvc3RLZXlDaGVja2luZworIC5JdCBTeXNsb2dGYWNpbGl0 eQorIC5JdCBUQ1BLZWVwQWxpdmUKKysuSXQgVGNwUmN2QnVmUG9sbCoKKyAuSXQgVGFnCisgLkl0 IFR1bm5lbAorIC5JdCBUdW5uZWxEZXZpY2UKKyAuSXQgVXBkYXRlSG9zdEtleXMKKysuSXQgVXNl TVBUQ1AKKyAuSXQgVXNlcgorIC5JdCBVc2VyS25vd25Ib3N0c0ZpbGUKKyAuSXQgVmVyaWZ5SG9z dEtleUROUworIC5JdCBWaXN1YWxIb3N0S2V5CisgLkl0IFhBdXRoTG9jYXRpb24KKysuUHAKKysu SXQgKiBIcG5zc2ggc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24uCisgLkVsCisgLlBwCisg Lkl0IEZsIFAgQXIgdGFnCitAQCAtNjMxLDYgKzY1NCwxMyBAQAorIFBvcnQgdG8gY29ubmVjdCB0 byBvbiB0aGUgcmVtb3RlIGhvc3QuCisgVGhpcyBjYW4gYmUgc3BlY2lmaWVkIG9uIGEKKyBwZXIt aG9zdCBiYXNpcyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorK0hQTi1TU0ggdXNlcyBhIGRl ZmF1bHQgcG9ydCBvZiAyMjIyLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkKKytmYWxsYmFjayB0byB1 c2UgdGhlIFNTSCBzdGFuZGFyZCBwb3J0IDIyIGlmIGl0IGNhbm5vdCBjb25uZWN0Cisrb24gcG9y dCAyMjIyLiBUaGlzIGZhbGxiYWNrIGJlaGF2aW91ciBjYW4gYmUgbW9kaWZpZWQgd2l0aCB0aGUK KytGYWxsYmFja1BvcnQgb3B0aW9uLiBOb3RlOiBpZiBvdXRib3VuZCBwb3J0IDIyMjIgaXMKKyti bG9ja2VkIGl0IG1heSBhcHBlYXIgdGhhdCB0aGUgaHBuc3NoIGNsaWVudCBpcyBub24tcmVzcG9u c2l2ZS4gSW4gdGhhdCBldmVudCwKKytlaXRoZXIgc3BlY2lmeSB0aGUgY29ycmVjdCBwb3J0IG9y IHVzZSB0aGUgQ29ubmVjdFRpbWVvdXQgb3B0aW9uCisrdG8gdHJpZ2dlciB0aGUgcG9ydCBmYWxs YmFjayBtb3JlIHF1aWNrbHkuCisgLlBwCisgLkl0IEZsIFEgQXIgcXVlcnlfb3B0aW9uCisgUXVl cmllcyBmb3IgdGhlIGFsZ29yaXRobXMgc3VwcG9ydGVkIGJ5IG9uZSBvZiB0aGUgZm9sbG93aW5n IGZlYXR1cmVzOgorQEAgLTE4MjQsMyArMTg1NCw3IEBACisgY3JlYXRlZCBPcGVuU1NILgorIE1h cmt1cyBGcmllZGwgY29udHJpYnV0ZWQgdGhlIHN1cHBvcnQgZm9yIFNTSAorIHByb3RvY29sIHZl cnNpb25zIDEuNSBhbmQgMi4wLgorK0NocmlzIFJhcGllciwgTWljaGFlbCBTdGV2ZW5zLCBCZW4g QmVubmV0LCBhbmQgTWlrZSBUYXNvdGEgZGV2ZWxvcGVkCisrdGhlIEhQTiBleHRlbnNpb25zIGF0 IHRoZSBQaXR0c2J1cmdoIFN1cGVyY29tdXRpbmcgQ2VudGVyIHdpdGggZ3JhbnRzCisrZnJvbSBD aXNjbywgdGhlIE5hdGlvbmFsIExpYnJhcnkgb2YgTWVkaWNpbmUsIGFuZCB0aGUgTmF0aW9uYWwg U2NpZW5jZQorK0ZvdW5kYXRpb24uCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hf YXBpLmMgb3BlbnNzaC0xMC4zcDEvc3NoX2FwaS5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9z c2hfYXBpLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKKysrKyBvcGVuc3No LTEwLjNwMS9zc2hfYXBpLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzI1NjUwMzIgKzAyMDAKK0BA IC00MzEsNyArNDMxLDcgQEAKKyAJY2hhciAqY3A7CisgCWludCByOworIAorLQlpZiAoKHIgPSBz c2hidWZfcHV0ZihiYW5uZXIsICJTU0gtMi4wLSUuMTAwc1xyXG4iLCBTU0hfVkVSU0lPTikpICE9 IDApCisrCWlmICgociA9IHNzaGJ1Zl9wdXRmKGJhbm5lciwgIlNTSC0yLjAtJS4xMDBzXHJcbiIs IFNTSF9SRUxFQVNFKSkgIT0gMCkKKyAJCXJldHVybiByOworIAlpZiAoKHIgPSBzc2hidWZfcHV0 Yihzc2hfcGFja2V0X2dldF9vdXRwdXQoc3NoKSwgYmFubmVyKSkgIT0gMCkKKyAJCXJldHVybiBy OworZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoYnVmLmMgb3BlbnNzaC0xMC4zcDEv c3NoYnVmLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGJ1Zi5jCTIwMjYtMDctMDIgMDA6 Mjc6MDYuMTAzMjc1MzA3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvc3NoYnVmLmMJMjAyNi0w Ny0wMiAwMDoyNzoyOS43MzI2NzI3MjkgKzAyMDAKK0BAIC0yOCw2ICsyOCw4IEBACisgI2luY2x1 ZGUgInNzaGJ1Zi5oIgorICNpbmNsdWRlICJtaXNjLmgiCisgCisrI2RlZmluZSBCVUZfV0FURVJT SEVEIDI1NioxMDI0CisrCisgI2lmZGVmIFNTSEJVRl9ERUJVRworICMgZGVmaW5lIFNTSEJVRl9U RUxMKHdoYXQpIGRvIHsgXAorIAkJcHJpbnRmKCIlczolZCAlczogJXMgc2l6ZSAlenUgYWxsb2Mg JXp1IG9mZiAlenUgbWF4ICV6dVxuIiwgXAorQEAgLTQ5LDggKzUxLDI5IEBACisgCWludCByZWFk b25seTsJCS8qIFJlZmVycyB0byBleHRlcm5hbCwgY29uc3QgZGF0YSAqLworIAl1X2ludCByZWZj b3VudDsJCS8qIFRyYWNrcyBzZWxmIGFuZCBudW1iZXIgb2YgY2hpbGQgYnVmZmVycyAqLworIAlz dHJ1Y3Qgc3NoYnVmICpwYXJlbnQ7CS8qIElmIGNoaWxkLCBwb2ludGVyIHRvIHBhcmVudCAqLwor KwljaGFyIGxhYmVsW01BWF9MQUJFTF9MRU5dOyAgIC8qIFN0cmluZyBmb3IgYnVmZmVyIGxhYmVs IC0gZGVidWdnaW5nIHVzZSAqLworKwlpbnQgdHlwZTsgICAgICAgICAgICAgICAvKiB0eXBlIG9m IGJ1ZmZlciBlbnVtIChzc2hidWZfdHlwZXMpKi8KKyB9OworIAorKy8qIHVwZGF0ZSB0aGUgbGFi ZWwgc3RyaW5nIGZvciBhIGdpdmVuIHNzaGJ1Zi4gVXNlZnVsCisrICogZm9yIGRlYnVnZ2luZyAq LworK3ZvaWQKKytzc2hidWZfcmVsYWJlbChzdHJ1Y3Qgc3NoYnVmICpidWYsIGNvbnN0IGNoYXIg KmxhYmVsKQorK3sKKysJaWYgKGxhYmVsICE9IE5VTEwpCisrCQlzdHJuY3B5KGJ1Zi0+bGFiZWws IGxhYmVsLCBNQVhfTEFCRUxfTEVOLTEpOworK30KKysKKysvKiBzZXQgdGhlIHR5cGUgKGZyb20g ZW51bSBzc2hidWZfdHlwZSkgb2YgdGhlIGdpdmVuIHNzaGJ1Zi4KKysgKiBUaGUgcHVycG9zZSBp cyB0byBhbGxvdyBkaWZmZXJlbnQgY2xhc3NlcyBvZiBidWZmZXJzIHRvCisrICogZm9sbG93IGRp ZmZlcmVudCBjb2RlIHBhdGhzIGlmIG5lY2Vzc2FyeSAqLworK3ZvaWQKKytzc2hidWZfdHlwZShz dHJ1Y3Qgc3NoYnVmICpidWYsIGludCB0eXBlKQorK3sKKysJaWYgKHR5cGUgPCBCVUZfTUFYX1RZ UEUpCisrCQlidWYtPnR5cGUgPSB0eXBlOworK30KKysKKyBzdGF0aWMgaW5saW5lIGludAorIHNz aGJ1Zl9jaGVja19zYW5pdHkoY29uc3Qgc3RydWN0IHNzaGJ1ZiAqYnVmKQorIHsKK0BAIC05MCw3 ICsxMTMsNyBAQAorIH0KKyAKKyBzdHJ1Y3Qgc3NoYnVmICoKKy1zc2hidWZfbmV3KHZvaWQpCisr c3NoYnVmX25ld19sYWJlbCAoY29uc3QgY2hhciAqbGFiZWwpCisgeworIAlzdHJ1Y3Qgc3NoYnVm ICpyZXQ7CisgCitAQCAtMTAxLDYgKzEyNCw4IEBACisgCXJldC0+cmVhZG9ubHkgPSAwOworIAly ZXQtPnJlZmNvdW50ID0gMTsKKyAJcmV0LT5wYXJlbnQgPSBOVUxMOworKwlpZiAobGFiZWwgIT0g TlVMTCkKKysJCXN0cm5jcHkocmV0LT5sYWJlbCwgbGFiZWwsIE1BWF9MQUJFTF9MRU4tMSk7Cisg CWlmICgocmV0LT5jZCA9IHJldC0+ZCA9IGNhbGxvYygxLCByZXQtPmFsbG9jKSkgPT0gTlVMTCkg eworIAkJZnJlZShyZXQpOworIAkJcmV0dXJuIE5VTEw7CitAQCAtMjkwLDcgKzMxNSwyMSBAQAor IHsKKyAJaWYgKHNzaGJ1Zl9jaGVja19zYW5pdHkoYnVmKSAhPSAwIHx8IGJ1Zi0+cmVhZG9ubHkg fHwgYnVmLT5yZWZjb3VudCA+IDEpCisgCQlyZXR1cm4gMDsKKy0JcmV0dXJuIGJ1Zi0+bWF4X3Np emUgLSAoYnVmLT5zaXplIC0gYnVmLT5vZmYpOworKwkvKiBSZXNlcnZlIH40Ljc2JSAoMS8yMSkg aGVhZHJvb20gb24gY2hhbm5lbCBpbnB1dCBidWZmZXJzIHRvIHByZXZlbnQKKysJICogYSBwYXRo b2xvZ2ljYWwgc3RhdGUgZHVyaW5nIGJ1bGsgZGF0YSB0cmFuc2ZlcnMuIFRoZSBoZWFkcm9vbSBz Y2FsZXMKKysJICogd2l0aCBidWZmZXIgc2l6ZSBhbmQgZ2l2ZXMgdGhlIGNoYW5uZWwgdGltZSB0 byBkcmFpbiBiZWZvcmUgYWNjZXB0aW5nCisrCSAqIG1vcmUgZGF0YSwgc21vb3RoaW5nIGZsb3cg Y29udHJvbCBhbmQgcmVkdWNpbmcgYnVmZmVyIHJlYWxsb2NhdGlvbi4KKysJICogV2hlbiB0aGUg YnVmZmVyIGlzIGZ1bGxlciB0aGFuIHRoZSBoZWFkcm9vbSBhbGxvd3Mgd2UgbXVzdCByZXR1cm4g MCwKKysJICogbm90IHVuZGVyZmxvdzogc2l6ZV90IGlzIHVuc2lnbmVkIHNvIGEgbmFpdmUgc3Vi dHJhY3Rpb24gd3JhcHMgdG8KKysJICogU0laRV9NQVgsIGNhdXNpbmcgdGhlIGNhbGxlciB0byBy ZWFkIGludG8gYSBuZWFybHktZnVsbCBidWZmZXIgYW5kCisrCSAqIHRocmFzaCB3aW5kb3cgdXBk YXRlcy4gT25seSBhcHBsaWVkIHRvIGNoYW5uZWwgaW5wdXQgYnVmZmVycyBhcworKwkgKiBvdGhl ciBidWZmZXIgdHlwZXMgZmFpbCB0aGUgcmVncmVzc2lvbiB1bml0IHRlc3RzIHdpdGggaGVhZHJv b20uICovCisrCWlmIChidWYtPnR5cGUgPT0gQlVGX0NIQU5ORUxfSU5QVVQpIHsKKysJCXNpemVf dCBoZWFkcm9vbSA9IGJ1Zi0+bWF4X3NpemUgLSBidWYtPm1heF9zaXplIC8gMjE7CisrCQlzaXpl X3QgdXNlZCA9IGJ1Zi0+c2l6ZSAtIGJ1Zi0+b2ZmOworKwkJcmV0dXJuICh1c2VkID49IGhlYWRy b29tKSA/IDAgOiBoZWFkcm9vbSAtIHVzZWQ7CisrCX0gZWxzZQorKwkJcmV0dXJuIGJ1Zi0+bWF4 X3NpemUgLSAoYnVmLT5zaXplIC0gYnVmLT5vZmYpOworIH0KKyAKKyBjb25zdCB1X2NoYXIgKgor QEAgLTM1MCw5ICszODksMzYgQEAKKyAJICovCisgCW5lZWQgPSBsZW4gKyBidWYtPnNpemUgLSBi dWYtPmFsbG9jOworIAlybGVuID0gUk9VTkRVUChidWYtPmFsbG9jICsgbmVlZCwgU1NIQlVGX1NJ WkVfSU5DKTsKKysJLyogV2l0aCB0aGUgY2hhbmdlcyBpbiA4LjkgdGhlIG91dHB1dCBidWZmZXIg ZW5kIHVwIGdyb3dpbmcgcHJldHR5CisrCSAqIHNsb3dseS4gSXQncyBrbm93cyB0aGF0IGl0IG5l ZWRzIHRvIGdyb3cgYnV0IGl0IG9ubHkgZG9lcyBzbyAzMksKKysJICogYXQgYSB0aW1lLiBUaGlz IG1lYW5zIGEgbG90IG9mIGNhbGxzIHRvIHJlYWxsb2MgYW5kIG1lbWNweSB3aGljaAorKwkgKiBr aWxscyBwZXJmb3JtYW5jZSB1bnRpbCB0aGUgYnVmZmVyIHJlYWNoZXMgc29tZSBtYXhpbXVtIHNp emUuCisrCSAqIFNvIHdlIGV4cGxpY2l0bHkgdGVzdCBmb3IgYSBidWZmZXIgdGhhdCdzIHRyeWlu ZyB0byBncm93IGFuZAorKwkgKiBpZiBpdCBpcyB0aGVuIHdlIHB1c2ggdGhlIGdyb3d0aCBieSA0 TUIgYXQgYSB0aW1lLiBUaGlzIGNhbiByZXN1bHQgaW4KKysJICogdGhlIGJ1ZmZlciBiZWluZyBv dmVyIGFsbG9jYXRlZCAoaW4gdGVybXMgb2YgYWN0dWFsIG5lZWRzKSBidXQgdGhlCisrCSAqIHBy b2Nlc3MgaXMgZmFzdC4gVGhpcyBzaWduaWZpY2FudGx5IHJlZHVjZXMgb3ZlcmhlYWQKKysJICog YW5kIGltcHJvdmVzIHBlcmZvcm1hbmNlLiBJbiB0aGlzIGNhc2Ugd2UgbG9vayBmb3IgYSBidWZm ZXIgdGhhdCBpcyB0cnlpbmcKKysJICogdG8gZ3JvdyBsYXJnZXIgdGhhbiBCVUZfV0FURVJTSEVE ICgyNTYqMTAyNCB0YWtlbiBmcm9tIFBBQ0tFVF9NQVhfU0laRSkKKysJICogYW5kIGV4cGxjaXRs eSBjaGVjayB0aGF0IHRoZSBidWZmZXIgaXMgYmVpbmcgdXNlZCBmb3IgaW5ib3VuZCBvdXRib3Vu ZAorKwkgKiBjaGFubmVsIGJ1ZmZlcmluZy4KKysJICogVXBkYXRlZCBmb3IgMTguNC4xIC1janIg MDQvMjAvMjQKKysJICovCisrCWlmIChybGVuID4gQlVGX1dBVEVSU0hFRCAmJiAoYnVmLT50eXBl ID09IEJVRl9DSEFOTkVMX09VVFBVVCB8fCBidWYtPnR5cGUgPT0gQlVGX0NIQU5ORUxfSU5QVVQp KSB7CisrCQkvKiBkZWJ1Z19mICgiUHJpb3I6IGxhYmVsOiAlcywgJXAsIHJsZW4gaXMgJXp1IG5l ZWQgaXMgJXp1IG1heF9zaXplIGlzICV6dSIsCisrCQkgICBidWYtPmxhYmVsLCBidWYsIHJsZW4s IG5lZWQsIGJ1Zi0+bWF4X3NpemUpOyAqLworKwkJLyogZWFzaWVzdCB0aGluZyB0byBkbyBpcyBn cm93IHRoZSBudWZmZXIgYnkgNE1CIGVhY2ggdGltZS4gSXQgbWlnaHQgZW5kCisrCQkgKiB1cCBi ZWluZyBzb21ld2hhdCBvdmVyYWxsb2NhdGVkIGJ1dCB3b3JrcyBxdWlja2x5ICovCisrCQluZWVk ID0gKDQqMTAyNCoxMDI0KTsKKysJCXJsZW4gPSBST1VORFVQKGJ1Zi0+YWxsb2MgKyBuZWVkLCBT U0hCVUZfU0laRV9JTkMpOworKwkJLyogZGVidWdfZiAoIlBvc3Q6IGxhYmVsOiAlcywgJXAsIHJs ZW4gaXMgJXp1IG5lZWQgaXMgJXp1IG1heF9zaXplIGlzICV6dSIsICovCisrCQkvKiAJIGJ1Zi0+ bGFiZWwsIGJ1ZiwgcmxlbiwgbmVlZCwgYnVmLT5tYXhfc2l6ZSk7ICovCisrCX0KKyAJU1NIQlVG X0RCRygoIm5lZWQgJXp1IGluaXRpYWwgcmxlbiAlenUiLCBuZWVkLCBybGVuKSk7CisrCisrCS8q IHJsZW4gbWlnaHQgYmUgYWJvdmUgdGhlIG1heCBhbGxvY2F0aW9uICovCisgCWlmIChybGVuID4g YnVmLT5tYXhfc2l6ZSkKKy0JCXJsZW4gPSBidWYtPmFsbG9jICsgbmVlZDsKKysJCXJsZW4gPSBi dWYtPm1heF9zaXplOworKworIAlTU0hCVUZfREJHKCgiYWRqdXN0ZWQgcmxlbiAlenUiLCBybGVu KSk7CisgCWlmICgoZHAgPSByZWNhbGxvY2FycmF5KGJ1Zi0+ZCwgYnVmLT5hbGxvYywgcmxlbiwg MSkpID09IE5VTEwpIHsKKyAJCVNTSEJVRl9EQkcoKCJyZWFsbG9jIGZhaWwiKSk7CitkaWZmIC1O dXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hidWYuaCBvcGVuc3NoLTEwLjNwMS9zc2hidWYuaAor LS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoYnVmLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDMy NzUzMDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2hidWYuaAkyMDI2LTA3LTAyIDA5OjQw OjAxLjc3ODA0NDgxMiArMDIwMAorQEAgLTMwLDE4ICszMCw0OSBAQAorICMgZW5kaWYgLyogT1BF TlNTTF9IQVNfRUNDICovCisgI2VuZGlmIC8qIFdJVEhfT1BFTlNTTCAqLworIAorLSNkZWZpbmUg U1NIQlVGX1NJWkVfTUFYCQkweDgwMDAwMDAJLyogSGFyZCBtYXhpbXVtIHNpemUgKi8KKysjZGVm aW5lIFNTSEJVRl9TSVpFX01BWAkJMHg4MDAwMDAwCS8qIEhhcmQgbWF4aW11bSBzaXplIDEyOE1C ICovCisgI2RlZmluZSBTU0hCVUZfUkVGU19NQVgJCTB4MTAwMDAwCS8qIE1heCBjaGlsZCBidWZm ZXJzICovCisgI2RlZmluZSBTU0hCVUZfTUFYX0JJR05VTQkoMTYzODQgLyA4KQkvKiBNYXggYmln bnVtICpieXRlcyogKi8KKyAjZGVmaW5lIFNTSEJVRl9NQVhfRUNQT0lOVAkoKDUyOCAqIDIgLyA4 KSArIDEpIC8qIE1heCBFQyBwb2ludCAqYnl0ZXMqICovCisrI2RlZmluZSBNQVhfTEFCRUxfTEVO CQk2NCAvKm1heGltdW0gc2l6ZSBvZiBzc2hidWYgbGFiZWwgKi8KKysjZGVmaW5lIHNzaGJ1Zl9u ZXcoKSBzc2hidWZfbmV3X2xhYmVsKF9fZnVuY19fKQorIAorIHN0cnVjdCBzc2hidWY7CisgCisr ZW51bSBidWZmZXJfdHlwZXMgeworKwlCVUZfQ0hBTk5FTF9PVVRQVVQsCisrCUJVRl9DSEFOTkVM X0lOUFVULAorKwlCVUZfQ0hBTk5FTF9FWFRFTkRFRCwKKysJQlVGX1BBQ0tFVF9JTlBVVCwKKysJ QlVGX1BBQ0tFVF9JTkNPTUlORywKKysJQlVGX1BBQ0tFVF9PVVRQVVQsCisrCUJVRl9QQUNLRVRf T1VUR09JTkcsCisrCUJVRl9NQVhfVFlQRQorK307CisrCisgLyoKKyAgKiBDcmVhdGUgYSBuZXcg c3NoYnVmIGJ1ZmZlci4KKyAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYnVmZmVyIG9uIHN1Y2Nlc3Ms IG9yIE5VTEwgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgorICAqLworLXN0cnVjdCBzc2hidWYgKnNz aGJ1Zl9uZXcodm9pZCk7CisrLyogc3RydWN0IHNzaGJ1ZiAqc3NoYnVmX25ldyh2b2lkKTsqLwor KworKy8qCisrICogQ3JlYXRlIGEgbmV3IGxhYmVsZWQgc3NoYnVmIGJ1ZmZlci4KKysgKiBSZXR1 cm5zIHBvaW50ZXIgdG8gYnVmZmVyIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gYWxsb2NhdGlvbiBm YWlsdXJlLgorKyAqLworK3N0cnVjdCBzc2hidWYgKnNzaGJ1Zl9uZXdfbGFiZWwoY29uc3QgY2hh ciAqKTsKKysKKysvKgorKyAqIHJlbGFiZWwgdGhlIHNzaGJ1ZiBzdHJ1Y3QKKysgKi8KKyt2b2lk IHNzaGJ1Zl9yZWxhYmVsKHN0cnVjdCBzc2hidWYgKiwgY29uc3QgY2hhciAqKTsKKysKKysvKgor KyAqIGFzc2lnbiBhIHR5cGUgKGZyb20gdGhlIGJ1ZmZlcl90eXBlcyBlbnVtKSB0bworKyAqIHRo ZSBidWZmZXIuIFVzZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcHVycG9zZSBvZgorKyAqIHRo ZSBidWZmZXIuCisrICovCisrdm9pZCBzc2hidWZfdHlwZShzdHJ1Y3Qgc3NoYnVmICosIGludCk7 CisgCisgLyoKKyAgKiBDcmVhdGUgYSBuZXcsIHJlYWQtb25seSBzc2hidWYgYnVmZmVyIGZyb20g ZXhpc3RpbmcgZGF0YS4KK0BAIC03OCwxMiArMTA5LDEzIEBACisgdm9pZAlzc2hidWZfcmVzZXQo c3RydWN0IHNzaGJ1ZiAqYnVmKTsKKyAKKyAvKgorLSAqIFJldHVybiB0aGUgbWF4aW11bSBzaXpl IG9mIGJ1ZgorKyAqIFJldHVybiB0aGUgbWF4aW11bSB1c2FibGUgc2l6ZSBvZiBidWYKKyAgKi8K KyBzaXplX3QJc3NoYnVmX21heF9zaXplKGNvbnN0IHN0cnVjdCBzc2hidWYgKmJ1Zik7CisgCisg LyoKKy0gKiBTZXQgdGhlIG1heGltdW0gc2l6ZSBvZiBidWYKKysgKiBTZXQgdGhlIG1heGltdW0g dXNhYmxlIHNpemUgb2YgYnVmLiBOb3RlIHRoYXQgdGhlIGJ1ZmZlciBtYXkgY29uc3VtZSB1cAor KyAqIHRvIDJ4IHRoaXMgbWVtb3J5IHBsdXMgYm9va2tlZXBpbmcgb3ZlcmhlYWQuCisgICogUmV0 dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgU1NIX0VSUl8qIGVycm9yIGNvZGUgb24g ZmFpbHVyZS4KKyAgKi8KKyBpbnQJc3NoYnVmX3NldF9tYXhfc2l6ZShzdHJ1Y3Qgc3NoYnVmICpi dWYsIHNpemVfdCBtYXhfc2l6ZSk7CitAQCAtMzgxLDYgKzQxMyw5IEBACisgCQkoKHVfY2hhciAq KShwKSlbMV0gPSBfX3YgJiAweGZmOyBcCisgCX0gd2hpbGUgKDApCisgCisrCisrdm9pZCBzc2hi dWZfc2V0X3dpbmRvd19tYXgoc3RydWN0IHNzaGJ1ZiAqYnVmICwgc2l6ZV90IGxlbik7CisrCisg LyogSW50ZXJuYWwgZGVmaW5pdGlvbnMgZm9sbG93LiBFeHBvc2VkIGZvciByZWdyZXNzIHRlc3Rz ICovCisgI2lmZGVmIFNTSEJVRl9JTlRFUk5BTAorIAorZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3Ax Lm9yaWcvc3NoLmMgb3BlbnNzaC0xMC4zcDEvc3NoLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmln L3NzaC5jCTIwMjYtMDctMDIgMDA6Mjc6MDYuMTA1MTk1NDQ2ICswMjAwCisrKysgb3BlbnNzaC0x MC4zcDEvc3NoLmMJMjAyNi0wNy0wMiAxMToyMjowNS44NjkzNTM5MDIgKzAyMDAKK0BAIC05OCw2 ICs5OCw3IEBACisgI2luY2x1ZGUgInNzaGVyci5oIgorICNpbmNsdWRlICJ1dGY4LmgiCisgI2lu Y2x1ZGUgImhvc3RmaWxlLmgiCisrI2luY2x1ZGUgImNpcGhlci1zd2l0Y2guaCIKKyAKKyAjaWZk ZWYgRU5BQkxFX1BLQ1MxMQorICNpbmNsdWRlICJzc2gtcGtjczExLmgiCitAQCAtMTA5NCw2ICsx MDk1LDEwIEBACisgCQkJYnJlYWs7CisgCQljYXNlICdUJzoKKyAJCQlvcHRpb25zLnJlcXVlc3Rf dHR5ID0gUkVRVUVTVF9UVFlfTk87CisrCQkJLyogZW5zdXJlIHRoYXQgdGhlIHVzZXIgZG9lc24n dCB0cnkgdG8gYmFja2Rvb3IgYSAqLworKwkJCS8qIG51bGwgY2lwaGVyIHN3aXRjaCBvbiBhbiBp bnRlcmFjdGl2ZSBzZXNzaW9uICovCisrCQkJLyogc28gZXhwbGljaXRseSBkaXNhYmxlIGl0IG5v IG1hdHRlciB3aGF0ICovCisrCQkJb3B0aW9ucy5ub25lX3N3aXRjaD0wOworIAkJCWJyZWFrOwor IAkJY2FzZSAnbyc6CisgCQkJbGluZSA9IHhzdHJkdXAob3B0YXJnKTsKK0BAIC0xNzM5LDEwICsx NzQ0LDM2IEBACisgCX0KKyAKKyAJLyogT3BlbiBhIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSBo b3N0LiAqLworKwkvKiB3ZSB0cnkgaW5pdGlhbGx5IG9uIHRoZSBkZWZhdWx0IGhwbnNzaCBwb3J0 IHJldHVybmVkIGJ5CisrCSAqIGRlZmF1bHRfc3NoX3BvcnQoKSB3aGljaCBub3cgcmV0dXJucyBI UE5TU0hfREVGQVVMVF9QT1JUCisrCSAqIGlmIHRoYXQgZmFpbHMgd2UgcmVzZXQgdGhlIHBvcnQg dG8gU1NIX0RFRkFVTFRfUE9SVAorKwkgKiAtY2pyIDgvMTcvMjAyMgorKwkgKi8KKyt0cnlhZ2Fp bjoKKyAJaWYgKHNzaF9jb25uZWN0KHNzaCwgaG9zdCwgb3B0aW9ucy5ob3N0X2FyZywgYWRkcnMs ICZob3N0YWRkciwKKyAJICAgIG9wdGlvbnMucG9ydCwgb3B0aW9ucy5jb25uZWN0aW9uX2F0dGVt cHRzLAorLQkgICAgJnRpbWVvdXRfbXMsIG9wdGlvbnMudGNwX2tlZXBfYWxpdmUpICE9IDApCisr CSAgICAmdGltZW91dF9tcywgb3B0aW9ucy50Y3Bfa2VlcF9hbGl2ZSkgIT0gMCkgeworKwkJLyog Y291bGQgbm90IGNvbm5lY3QuIElmIHRoZSBwb3J0IHJlcXVlc3RlZCBpcyB0aGUgc2FtZSBhcwor KwkJICogaHBuc3NoIGRlZmF1bHQgcG9ydCB0aGVuIGZhbGxiYWNrLiBPdGhlcndpc2UsIGV4aXQg Ki8KKysJCWlmICgob3B0aW9ucy5wb3J0ID09IGRlZmF1bHRfc3NoX3BvcnQoKSkgJiYgb3B0aW9u cy5mYWxsYmFjaykgeworKwkJCWludCBwb3J0ID0gb3B0aW9ucy5mYWxsYmFja19wb3J0OworKwkJ CW9wdGlvbnMucG9ydCA9IHBvcnQ7CisrCQkJZnByaW50ZihzdGRlcnIsICJIUE5TU0ggc2VydmVy IG5vdCBhdmFpbGFibGUgb24gZGVmYXVsdCBwb3J0ICVkXG4iLAorKwkJCQlkZWZhdWx0X3NzaF9w b3J0KCkpOworKwkJCWlmIChwb3J0ID09IDIyKQorKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkZhbGxp bmcgYmFjayB0byBPcGVuU1NIIGRlZmF1bHQgcG9ydCAlZFxuIiwKKysJCQkJCXBvcnQpOworKwkJ CWVsc2UKKysJCQkJZnByaW50ZihzdGRlcnIsICJGYWxsaW5nIGJhY2sgdG8gdXNlciBkZWZpbmVk IHBvcnQgJWRcbiIsCisrCQkJCQlwb3J0KTsKKysJCQlhZGRycyA9IHJlc29sdmVfaG9zdChob3N0 LCBwb3J0LCAxLAorKwkJCQkJICAgICBjbmFtZSwgc2l6ZW9mKGNuYW1lKSk7CisrCQkJZ290byB0 cnlhZ2FpbjsKKysJCX0gZWxzZSB7CisrCQkJZXhpdCgyNTUpOworKwkJfQorIAkJZXhpdCgyNTUp OworKwl9CisgCisgCisgCXNzaF9wYWNrZXRfc2V0X3RpbWVvdXQoc3NoLCBvcHRpb25zLnNlcnZl cl9hbGl2ZV9pbnRlcnZhbCwKK0BAIC0xOTQ1LDggKzE5NzYsMTAgQEAKKyAKKyAvKiBEbyBmb3Jr KCkgYWZ0ZXIgYXV0aGVudGljYXRpb24uIFVzZWQgYnkgInNzaCAtZiIgKi8KKyBzdGF0aWMgdm9p ZAorLWZvcmtfcG9zdGF1dGgodm9pZCkKKytmb3JrX3Bvc3RhdXRoKHN0cnVjdCBzc2ggKnNzaCkK KyB7CisrCWludCBmaXBzID0gMDsKKysKKyAJaWYgKG5lZWRfY29udHJvbHBlcnNpc3RfZGV0YWNo KQorIAkJY29udHJvbF9wZXJzaXN0X2RldGFjaCgpOworIAlkZWJ1ZygiZm9ya2luZyB0byBiYWNr Z3JvdW5kIik7CitAQCAtMTk1NSwxNyArMTk4OCwyOSBAQAorIAkJZmF0YWwoImRhZW1vbigpIGZh aWxlZDogJS4yMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAJaWYgKHN0ZGZkX2Rldm51bGwoMSwg MSwgIShsb2dfaXNfb25fc3RkZXJyKCkgJiYgZGVidWdfZmxhZykpID09IC0xKQorIAkJZXJyb3Jf Zigic3RkZmRfZGV2bnVsbCBmYWlsZWQiKTsKKysJLyogd2UgZG8gdGhlIGNpcGhlciBzd2l0Y2gg aGVyZSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgY2xpZW50CisrCSAqIGlzIGZvcmtpbmcgb3IgaGFz IGEgZGVsYXllZCBmb3JrLgorKwkgKiBJZiBGSVBTIG1vZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVk IHRoZW4gbm8gcGFyYWxsZWwgY2lwaGVycy4KKysJICovCisrCWZpcHMgPSBmaXBzX2VuYWJsZWQo KTsKKysJaWYgKGZpcHMpCisrCQlkZWJ1ZzJfZigiRklQUyBtb2RlIGlzIGVuYWJsZWQuIFBhcmFs bGVsIGNpcGhlcnMgYXJlIGRpc2FibGVkIik7CisrCWVsc2UKKysJCWRlYnVnMl9mKCJGSVBTIG1v ZGUgbm90IGZvdW5kIG9yIGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBlbmFibGVkIik7 CisrCisrCWlmICgob3B0aW9ucy5kaXNhYmxlX211bHRpdGhyZWFkZWQgPT0gMCkgJiYgKGZpcHMg PT0gMCkpCisrCQljaXBoZXJfc3dpdGNoKHNzaCk7CisgfQorIAorIHN0YXRpYyB2b2lkCistZm9y d2FyZGluZ19zdWNjZXNzKHZvaWQpCisrZm9yd2FyZGluZ19zdWNjZXNzKHN0cnVjdCBzc2ggKnNz aCkKKyB7CisgCWlmIChmb3J3YXJkX2NvbmZpcm1zX3BlbmRpbmcgPT0gLTEpCisgCQlyZXR1cm47 CisgCWlmICgtLWZvcndhcmRfY29uZmlybXNfcGVuZGluZyA9PSAwKSB7CisgCQlkZWJ1Z19mKCJh bGwgZXhwZWN0ZWQgZm9yd2FyZGluZyByZXBsaWVzIHJlY2VpdmVkIik7CisgCQlpZiAob3B0aW9u cy5mb3JrX2FmdGVyX2F1dGhlbnRpY2F0aW9uKQorLQkJCWZvcmtfcG9zdGF1dGgoKTsKKysJCQlm b3JrX3Bvc3RhdXRoKHNzaCk7CisgCX0gZWxzZSB7CisgCQlkZWJ1ZzJfZigiJWQgZXhwZWN0ZWQg Zm9yd2FyZGluZyByZXBsaWVzIHJlbWFpbmluZyIsCisgCQkgICAgZm9yd2FyZF9jb25maXJtc19w ZW5kaW5nKTsKK0BAIC0yMDMyLDcgKzIwNzcsNyBAQAorIAkJCQkgICAgImZvciBsaXN0ZW4gcG9y dCAlZCIsIHJmd2QtPmxpc3Rlbl9wb3J0KTsKKyAJCX0KKyAJfQorLQlmb3J3YXJkaW5nX3N1Y2Nl c3MoKTsKKysJZm9yd2FyZGluZ19zdWNjZXNzKHNzaCk7CisgfQorIAorIHN0YXRpYyB2b2lkCitA QCAtMjA1OSw3ICsyMTA0LDcgQEAKKyAJfQorIAorIAlkZWJ1Z19mKCJ0dW5uZWwgZm9yd2FyZCBl c3RhYmxpc2hlZCwgaWQ9JWQiLCBpZCk7CistCWZvcndhcmRpbmdfc3VjY2VzcygpOworKwlmb3J3 YXJkaW5nX3N1Y2Nlc3Moc3NoKTsKKyB9CisgCisgc3RhdGljIHZvaWQKK0BAIC0yMjUwLDYgKzIy OTUsMTUgQEAKKyAJICAgIE5VTEwsIGZpbGVubyhzdGRpbiksIGNvbW1hbmQsIGVudmlyb24pOwor IH0KKyAKKysvKiB0aGlzIHVzZWQgdG8gZG8gYSBsb3QgbW9yZSBidXQgbm93IGl0IGp1c3QgY2hl Y2tzIHRvIHNlZQorKyAqIGlmIHdlIGFyZSBkaXNhYmxpbmcgaHBuICovCisrc3RhdGljIHZvaWQK KytocG5fb3B0aW9uc19pbml0KHN0cnVjdCBzc2ggKnNzaCkKKyt7CisrCWNoYW5uZWxfc2V0X2hw bl9kaXNhYmxlZChvcHRpb25zLmhwbl9kaXNhYmxlZCk7CisrCWRlYnVnX2YoIkhQTiBkaXNhYmxl ZDogJWQiLCBvcHRpb25zLmhwbl9kaXNhYmxlZCk7CisrfQorKworIC8qIG9wZW4gbmV3IGNoYW5u ZWwgZm9yIGEgc2Vzc2lvbiAqLworIHN0YXRpYyBpbnQKKyBzc2hfc2Vzc2lvbjJfb3BlbihzdHJ1 Y3Qgc3NoICpzc2gpCitAQCAtMjI3MSw2ICsyMzI1LDcgQEAKKyAJd2luZG93ID0gQ0hBTl9TRVNf V0lORE9XX0RFRkFVTFQ7CisgCXBhY2tldG1heCA9IENIQU5fU0VTX1BBQ0tFVF9ERUZBVUxUOwor IAlpZiAodHR5X2ZsYWcpIHsKKysJCXdpbmRvdyA9IENIQU5fU0VTX1dJTkRPV19ERUZBVUxUOwor IAkJd2luZG93ID4+PSAxOworIAkJcGFja2V0bWF4ID4+PSAxOworIAl9CitAQCAtMjI3OCw2ICsy MzMzLDEzIEBACisgCSAgICAic2Vzc2lvbiIsIFNTSF9DSEFOTkVMX09QRU5JTkcsIGluLCBvdXQs IGVyciwKKyAJICAgIHdpbmRvdywgcGFja2V0bWF4LCBDSEFOX0VYVEVOREVEX1dSSVRFLAorIAkg ICAgImNsaWVudC1zZXNzaW9uIiwgQ0hBTk5FTF9OT05CTE9DS19TVERJTyk7CisrCisrCS8qIFRP RE86IElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGVzZSBvcHRpb25zPyAqLworKwlpZiAo b3B0aW9ucy50Y3BfcmN2X2J1Zl9wb2xsID4gMCAmJiAhb3B0aW9ucy5ocG5fZGlzYWJsZWQpIHsK KysJCWMtPmR5bmFtaWNfd2luZG93ID0gMTsKKysJCWRlYnVnKCJFbmFibGVkIER5bmFtaWMgV2lu ZG93IFNjYWxpbmciKTsKKysJfQorKworIAlpZiAodHR5X2ZsYWcpCisgCQljaGFubmVsX3NldF90 dHkoc3NoLCBjKTsKKyAJZGVidWczX2YoImNoYW5uZWxfbmV3OiAlZCVzIiwgYy0+c2VsZiwgdHR5 X2ZsYWcgPyAiICh0dHkpIiA6ICIiKTsKK0BAIC0yMjk1LDYgKzIzNTcsMTQgQEAKKyB7CisgCWlu dCByLCBpZCA9IC0xOworIAljaGFyICpjcCwgKnR1bl9md2RfaWZuYW1lID0gTlVMTDsKKysJaW50 IGZpcHMgPSAwOworKworKwkvKgorKwkgKiBXZSBuZWVkIHRvIGluaXRpYWxpemUgdGhpcyBlYXJs eSBiZWNhdXNlIHRoZSBmb3J3YXJkaW5nIGxvZ2ljIGJlbG93CisrCSAqIG1pZ2h0IG9wZW4gY2hh bm5lbHMgdGhhdCB1c2UgdGhlIGhwbiBidWZmZXIgc2l6ZXMuICBXZSBjYW4ndCBzZW5kIGEKKysJ ICogd2luZG93IG9mIC0xICh0aGUgZGVmYXVsdCkgdG8gdGhlIHNlcnZlciBhcyBpdCBicmVha3Mg dGhpbmdzLgorKwkgKi8KKysJaHBuX29wdGlvbnNfaW5pdChzc2gpOworIAorIAkvKiBYWFggc2hv dWxkIGJlIHByZS1zZXNzaW9uICovCisgCWlmICghb3B0aW9ucy5jb250cm9sX3BlcnNpc3QpCitA QCAtMjM4Niw3ICsyNDU2LDIxIEBACisgCQkJZGVidWcoImRlZmVycmluZyBwb3N0YXV0aCBmb3Jr IHVudGlsIHJlbW90ZSBmb3J3YXJkICIKKyAJCQkgICAgImNvbmZpcm1hdGlvbiByZWNlaXZlZCIp OworIAkJfSBlbHNlCistCQkJZm9ya19wb3N0YXV0aCgpOworKwkJCWZvcmtfcG9zdGF1dGgoc3No KTsKKysJfSBlbHNlIHsKKysJCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgc3dpdGNoaW5nIGNp cGhlcnMgdG8KKysJCSAqIG9uZSBvZiBvdXIgcGFyYWxsZWwgdmVyc2lvbnMuIElmIHRoZSBjbGll bnQgaXMKKysJCSAqIGZvcmtpbmcgdGhlbiB3ZSBoYW5kbGUgaXQgaW4gZm9ya19wb3N0YXV0aCgp CisrCQkgKiBJZiBGSVBTIG1vZGUgZXhpc3RzIGFuZCBpcyBlbmFibGVkIHRoZW4gbm8gcGFyYWxs ZWwgY2lwaGVycy4KKysJCSAqLworKwkJZmlwcyA9IGZpcHNfZW5hYmxlZCgpOworKwkJaWYgKGZp cHMpCisrCQkJZGVidWcyX2YoIkZJUFMgbW9kZSBpcyBlbmFibGVkLiBQYXJhbGxlbCBjaXBoZXJz IGFyZSBkaXNhYmxlZCIpOworKwkJZWxzZQorKwkJCWRlYnVnMl9mKCJGSVBTIG1vZGUgbm90IGZv dW5kIG9yIGRpc2FibGVkLiBQYXJhbGxlbCBjaXBoZXJzIGFyZSBlbmFibGVkIik7CisrCQlpZiAo KG9wdGlvbnMuZGlzYWJsZV9tdWx0aXRocmVhZGVkID09IDApCisrCQkgICAgJiYgKGZpcHMgPT0g MCkpCisrCQkJY2lwaGVyX3N3aXRjaChzc2gpOworIAl9CisgCisgCXJldHVybiBjbGllbnRfbG9v cChzc2gsIHR0eV9mbGFnLCB0dHlfZmxhZyA/CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9zc2hfY29uZmlnIG9wZW5zc2gtMTAuM3AxL3NzaF9jb25maWcKKy0tLSBvcGVuc3NoLTEwLjNw MS5vcmlnL3NzaF9jb25maWcJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAyMDAKKysr KyBvcGVuc3NoLTEwLjNwMS9zc2hfY29uZmlnCTIwMjYtMDctMDIgMDI6MTI6NDMuMzczODI5NzEw ICswMjAwCitAQCAtNDUsNiArNDUsOCBAQAorICMgICBQcm94eUNvbW1hbmQgc3NoIC1xIC1XICVo OiVwIGdhdGV3YXkuZXhhbXBsZS5jb20KKyAjICAgUmVrZXlMaW1pdCAxRyAxaAorICMgICBVc2Vy S25vd25Ib3N0c0ZpbGUgfi8uc3NoL2tub3duX2hvc3RzLmQvJWsKKysjICAgVXNlTVBUQ1Agbm8K KysjICAgSGFwcHlFeWVzIG5vCisgIworICMgVGhpcyBzeXN0ZW0gaXMgZm9sbG93aW5nIHN5c3Rl bS13aWRlIGNyeXB0byBwb2xpY3kuCisgIyBUbyBtb2RpZnkgdGhlIGNyeXB0byBwcm9wZXJ0aWVz IChDaXBoZXJzLCBNQUNzLCAuLi4pLCBjcmVhdGUgYSAgKi5jb25mCitkaWZmIC1OdXIgb3BlbnNz aC0xMC4zcDEub3JpZy9zc2hfY29uZmlnLjUgb3BlbnNzaC0xMC4zcDEvc3NoX2NvbmZpZy41Cist LS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hfY29uZmlnLjUJMjAyNi0wNy0wMiAwMDoyNzowNi4x MDUxOTU0NDYgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2hfY29uZmlnLjUJMjAyNi0wNy0w MiAwMDoyNzoyOS43MzM0MDAzNjcgKzAyMDAKK0BAIC02Miw2ICs2MiwxOSBAQAorIC5QcSBQYSAv ZXRjL3NzaC9zc2hfY29uZmlnCisgLkVsCisgLlBwCisrLlhyIGhwbnNzaCAxCisraXMgZnVsbHkg Y29tcGF0aWJsZSB3aXRoIE9wZW5TU0gncyBzc2ggYW5kIHVzZXMgdGhlIHNhbWUgY29uZmlndXJh dGlvbiBmb3JtYXQsIGRpcmVjdGl2ZXMsIGFuZCBvcHRpb25zLgorKy5YciBocG5zc2ggMQorK2Nh biB1c2UgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBmaWxlIGFzCisrLlhyIHNzaCAxCisrdGhvdWdo IHRoZSBpbnZlcnNlIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLiBUaGlzIGlzIGJlY2F1c2UKKysu WHIgaHBuc3NoIDEKKytoYXMgc29tZSBhZGRpdGlvbmFsIG9wdGlvbnMgd2hpY2ggYXJlIGRpc2N1 c3NlZCBiZWxvdy4gQXMgc3VjaCB1c2VycyBzaG91bGQgZWl0aGVyIG5vdAorK3VzZQorKy5YciBo cG5zc2ggMQorK3NwZWNpZmljIGRpcmVjdGl2ZXMgaW4gdGhlaXIgZGVmYXVsdCBzc2hfY29uZmln IGZpbGVzIG9yIGVuc3VyZSB0aGF0IHRoZXkgYWx3YXlzIHVzZSBhCisrY3VzdG9tIGNvbmZpZyBm aWxlLgorKy5QcAorIFVubGVzcyBub3RlZCBvdGhlcndpc2UsIGZvciBlYWNoIHBhcmFtZXRlciwg dGhlIGZpcnN0IG9idGFpbmVkIHZhbHVlCisgd2lsbCBiZSB1c2VkLgorIFRoZSBjb25maWd1cmF0 aW9uIGZpbGVzIGNvbnRhaW4gc2VjdGlvbnMgc2VwYXJhdGVkIGJ5CitAQCAtODMzLDYgKzg0Niw5 IEBACisgb3IKKyAuQ20gbm8KKyAodGhlIGRlZmF1bHQpLgorKy5JdCBDbSBGYWxsYmFja1BvcnQK KytTcGVjaWZpZXMgdGhlIHBvcnQgaHBuc3NoIHNob3VsZCB0cnkgdG8gY29ubmVjdCB0byBpZiBp dCBmYWlscyBjb25uZWN0aW5nIHRvIHRoZQorK2RlZmF1bHQgaHBuc3NoZCBwb3J0IG9mIDIyMjIu IFRoZSBkZWZhdWx0IGlzIHBvcnQgMjIuIEhQTi1TU0ggb25seS4KKyAuSXQgQ20gRmluZ2VycHJp bnRIYXNoCisgU3BlY2lmaWVzIHRoZSBoYXNoIGFsZ29yaXRobSB1c2VkIHdoZW4gZGlzcGxheWlu ZyBrZXkgZmluZ2VycHJpbnRzLgorIFZhbGlkIG9wdGlvbnMgYXJlOgorQEAgLTEwNTgsNiArMTA3 NCwyMyBAQAorIHdpbGwgbm90IGJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5LAorIGJ1dCBtYXkg YmUgbWFudWFsbHkgaGFzaGVkIHVzaW5nCisgLlhyIHNzaC1rZXlnZW4gMSAuCisrLkl0IENtIEhh cHB5RXllcworK0lmIHNldCB0bworKy5DbSB5ZXMKKyt0aGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhh dCB0aGUgY2xpZW50IHNob3VsZCB1c2UgdGhlIEhhcHB5IEV5ZWJhbGxzIGNvbm5lY3Rpb24KKytt ZXRob2QgYXMgZGVzY3JpYmVkIGJ5IFJGQyA4MzA1LiBXaGVuIGF0dGVtcHRpbmcgdG8gY29ubmVj dCB0byBhCisrdGFyZ2V0IHRoYXQgc3VwcG9ydHMgSVB2NCBhbmQgSVB2NiB0aGUgY2xpZW50IHdp bGwgdHJ5IHRvIGNvbm5lY3QKKytvbiBJUHY2IGZpcnN0LCBkZWxheSBhIHNldCB0aW1lICgyNTBt cyBkZWZhdWx0KSwgYW5kIHRoZW4gdHJ5IElQdjQuCisrVGhlIGNsaWVudCB3aWxsIHVzZSB3aGlj aCBldmVyIHNvY2tldCBpcyByZXR1cm5lZCBmaXJzdC4gTm90ZToKKytUaGlzIHByb2Nlc3MgbWF5 LCByYXJlbHksIHByb2R1Y2UgZmFsc2UgcG9zaXRpdmVzIGluIHNvbWUgbW9uaXRvcmluZyB0b29s cworK2R1ZSB0byBtdWx0aXBsZSBjb25uZWN0aW9uIGF0dGVtcHRzIHByaW9yIHRvIGF1dGhlbnRp Y2F0aW9uLgorK1RoZSBkZWZhdWx0IGlzCisrLkNtIG5vCisrLkl0IENtIEhhcHB5RGVsYXkKKytU aGlzIG9wdGlvbnMgc3BlY2lmaWVzIGhvdyBsb25nIHRoZSBIYXBweUV5ZXMgY29ubmVjdGlvbiBt ZXRob2Qgc2hvdWxkCisrd2FpdCBiZWZvcmUgdHJ5aW5nIElQdjQgYWZ0ZXIgdGhlIGluaXRpYWwg SVB2NiBjb25uZWN0aW9uLiBUaGlzIHZhbHVlIGlzCisrYSBwb3NpdGl2ZSBpbnRlZ2VyIG9mIG1p bGxpc2Vjb25kcyB3aXRoIGEgZGVmYXVsdCBvZgorKy5DbSAyNTBtcy4KKyAuSXQgQ20gSG9zdGJh c2VkQWNjZXB0ZWRBbGdvcml0aG1zCisgVGhlIGRlZmF1bHQgaXMgaGFuZGxlZCBzeXN0ZW0td2lk ZSBieQorIC5YciBjcnlwdG8tcG9saWNpZXMgNyAuCitAQCAtMTE2MSw2ICsxMTk0LDExIEBACisg LkNtIEhvc3RuYW1lCisgc3BlY2lmaWNhdGlvbnMpLgorIFRoZSBkZWZhdWx0IGlzIHRoZSBuYW1l IGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisrLkl0IENtIEhQTkRpc2FibGVkCisrSW4gc29t ZSBzaXR1YXRpb25zLCBzdWNoIGFzIHRyYW5zZmVycyBvbiBhIGxvY2FsIGFyZWEgbmV0d29yaywg dGhlIGltcGFjdAorK29mIHRoZSBIUE4gY29kZSBwcm9kdWNlcyBhIG5ldCBkZWNyZWFzZSBpbiBw ZXJmb3JtYW5jZS4gSW4gdGhlc2UgY2FzZXMgaXQgaXMKKytoZWxwZnVsIHRvIGRpc2FibGUgdGhl IEhQTiBmdW5jdGlvbmFsaXR5LiBCeSBkZWZhdWx0IEhQTkRpc2FibGVkIGlzIHNldCB0bworKy5D bSBuby4gSFBOU1NIIG9ubHkuCisgLkl0IENtIElkZW50aXRpZXNPbmx5CisgU3BlY2lmaWVzIHRo YXQKKyAuWHIgc3NoIDEKK0BAIC0xMzYwLDYgKzEzOTgsMTIgQEAKKyAuQ20gbm9uZQorICh0aGUg b3BlcmF0aW5nIHN5c3RlbSBkZWZhdWx0KQorIGZvciBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMu CisrSWYgdXNpbmcgdGhlCisrLkNtIEhhcHB5RXllcworK29wdGlvbiB0aGVzZSBkZWZhdWx0IHRv CisrLkNtIGxvd2xhdGVuY3kgYW5kCisrLm0gdGhyb3VnaHB1dCAsCisrcmVzcGVjdGl2ZWx5Lgor IC5JdCBDbSBLYmRJbnRlcmFjdGl2ZUF1dGhlbnRpY2F0aW9uCisgU3BlY2lmaWVzIHdoZXRoZXIg dG8gdXNlIGtleWJvYXJkLWludGVyYWN0aXZlIGF1dGhlbnRpY2F0aW9uLgorIFRoZSBhcmd1bWVu dCB0byB0aGlzIGtleXdvcmQgbXVzdCBiZQorQEAgLTE1NDgsNiArMTU5Miw2MyBAQAorIC5QcAor IFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBNQUMgYWxnb3JpdGhtcyBtYXkgYWxzbyBiZSBvYnRhaW5l ZCB1c2luZworIC5RcSBzc2ggLVEgbWFjIC4KKysuSXQgQ20gTWV0cmljcworK0luZGljYXRlIHRo YXQgdGhlIHNzaCBjbGllbnQgc2hvdWxkIGdhdGhlciBhbmQgd3JpdGUgVENQIHN0YWNrIG1ldHJp Y3MgZnJvbSB0aGUKKytUQ1BfSU5GTyBzb2NrZXQgc3RydWN0dXJlIG9uIGNvbXBsaWFudCBvcGVy YXRpbmcgc3lzdGVtcyB0byBhIHRleHQgZmlsZS4KKytUaGVzZSBtZXRyaWNzIHdpbGwgYmUgY29s bGVjdGVkIGZyb20gYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBob3N0cyBpZiBtZXRyaWNzCisr YXJlIHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiBTU0ggYW5kIFRDUF9JTkZPIGlzIHN1cHBv cnRlZCBieSB0aGUKKytvcGVyYXRpbmcgc3lzdGVtLiBDdXJyZW50bHkgb3BlcmF0aW5nIHN5c3Rl bSBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gTGludXgKKyt2ZXJzaW9uIDMuNyBhbmQgZ3JlYXRlciwg TmV0QlNELCBhbmQgRnJlZUJTRCAodmVyc2lvbiA2IG9yIGdyZWF0ZXIpLgorKworK0lmIG9uZSBv ZiB0aGUgaG9zdHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgTWV0cmljcyBvcHRpb24gdGhlbiBvbmx5 IGRhdGEKKytmcm9tIHRoZSB0aGUgaG9zdCB0aGF0IGRvZXMgd2lsbCBiZSByZXBvcnRlZC4gU2Vl IHRoZSBIUE4tUkVBRE1FIGZpbGUKKytmb3IgbW9yZSBkZXRhaWwuCisrCisrVGhlIGFyZ3VtZW50 IHRvIHRoZSBrZXl3b3JkIG11c3QgYmUKKysuQ20geWVzCisrb3IKKysuQ20gbm8KKysodGhlIGRl ZmF1bHQpLgorKworK1NlZQorKy5DbSBNZXRyaWNzSW50ZXJ2YWwKKythbmQKKysuQ20gTWV0cmlj c1BhdGgKKytmb3IgbW9yZSBtZXRyaWNzIG9wdGlvbnMuCisrLkNtIEhQTlNTSCBvbmx5LgorKy5J dCBDbSBNZXRyaWNzSW50ZXJ2YWwKKytUaGUgZnJlcXVlbmN5LCBpbiBzZWNvbmRzLCB3aXRoIHdo aWNoIHRoZSBUQ1BfSU5GTyBzdHJ1Y3Qgd2lsbCBiZSBwb2xsZWQuIFRoZQorK2RlZmF1bHQgdmFs dWUgaXMgNSBzZWNvbmRzLgorKworKy5DbSBNZXRyaWNzCisrbXVzdCBiZSBzZXQgdG8KKysuQ20g eWVzCisrZm90IHRoaXMgb3B0aW9uIHRvIGhhdmUgYW55IGVmZmVjdC4KKysuQ20gSFBOU1NIIG9u bHkuCisrLkl0IENtIE1ldHJpY3NQYXRoCisrVGhlIGZpbGUgcGF0aCB3aGVyZQorKy5DbSBNZXRy aWNzCisrc2hvdWxkIHdyaXRlIHRoZSBUQ1Agc3RhY2sgbWV0cmljcy4KKysKKytUaGUgZGVmYXVs dCBpcworKy5TbSBvZmYKKysuQXIgLi9zc2hfc3RhY2tfbWV0cmljcy5sb2NhbAorKyBhbmQKKysu QXIgLi9zc2hfc3RhY2tfbWV0cmljcy5yZW1vdGUKKysuU20gb24KKysKKytUaGUgdXNlciBtYXkg c3BlY2lmeSBhbnkgb3RoZXIgZmlsZXBhdGggYW5kIGZpbGVuYW1lIHRoYXQgdGhleSBoYXZlIHdy aXRlCisrYWNjZXNzIHRvLiBFLmcuIE1ldHJpY3NQYXRoPS90bXAvbXlfbWV0cmljcy4gVGhlIHN1 ZmZpeCBvZiAubG9jYWwKKythbmQgLnJlbW90ZSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgcGF0 aC4gRmlsZXMgYXJlCisrLkNtIG5vdAorK292ZXJ3cml0dGVuIGJ5IHN1YnNlcXVlbnQgbWV0cmlj cyBzZXNzaW9ucy4gSW5zdGVhZCwgZGF0YSBmcm9tIG5ldyBzZXNzaW9ucworK3dpbGwgYmUgYXBw ZW5kZWQgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuCisrCisrLkNtIE1ldHJpY3MKKyttdXN0 IGJlIHNldCB0bworKy5DbSB5ZXMKKytmb3QgdGhpcyBvcHRpb24gdG8gaGF2ZSBhbnkgZWZmZWN0 LgorKy5DbSBIUE5TU0ggb25seS4KKyAuSXQgQ20gTm9Ib3N0QXV0aGVudGljYXRpb25Gb3JMb2Nh bGhvc3QKKyBEaXNhYmxlIGhvc3QgYXV0aGVudGljYXRpb24gZm9yIGxvY2FsaG9zdCAobG9vcGJh Y2sgYWRkcmVzc2VzKS4KKyBUaGUgYXJndW1lbnQgdG8gdGhpcyBrZXl3b3JkIG11c3QgYmUKK0BA IC0xNTU1LDYgKzE2NTYsMzYgQEAKKyBvcgorIC5DbSBubworICh0aGUgZGVmYXVsdCkuCisrLkl0 IENtIE5vbmVFbmFibGVkCisrRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBj aXBoZXIuIENhcmUgbXVzdCBhbHdheXMgYmUgdXNlZAorK3doZW4gZW5hYmxpbmcgdGhpcyBhcyBp dCB3aWxsIGFsbG93IHVzZXJzIHRvIHNlbmQgZGF0YSBpbiB0aGUgY2xlYXIuIEhvd2V2ZXIsCisr aXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBy ZW1haW5zIGVuY3J5cHRlZAorK2V2ZW4gaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4gRGVmYXVs dCBpcworKy5DbSBuby4gSFBOU1NIIG9ubHkuCisrLkl0IENtIE5vbmVNYWNFbmFibGVkCisrRW5h YmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUgTm9uZSBNQUMuIFdoZW4gdGhpcyBpcyBlbmFi bGVkIHNzaAorK3dpbGwgKm5vdCogcHJvdmlkZSBkYXRhIGludGVncml0eSBvZiBhbnkgZGF0YSBi ZWluZyB0cmFuc21pdHRlZCBiZXR3ZWVuIGhvc3RzLiBVc2UKKyt3aXRoIGNhdXRpb24gYXMgaXQs IHVubGlrZSBqdXN0IHVzaW5nIE5vbmVFbmFibGVkLCBkb2Vzbid0IHByb3ZpZGUgZGF0YSBpbnRl Z3JpdHkgYW5kCisrcHJvdGVjdGlvbiBhZ2FpbnN0IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3Mu IEFzIHdpdGggTm9uZUVuYWJsZWQgYWxsIGF1dGhlbnRpY2F0aW9uCisrcmVtYWlucyBlbmNyeXB0 ZWQgYW5kIGludGVncml0eSBpcyBlbnN1cmVkLiBEZWZhdWx0IGlzCisrLkNtIG5vLiBIUE5TU0gg b25seS4KKysuSXQgQ20gTm9uZVN3aXRjaAorK1N3aXRjaCB0aGUgZW5jcnlwdGlvbiBjaXBoZXIg YmVpbmcgdXNlZCB0byB0aGUgTm9uZSBjaXBoZXIgYWZ0ZXIKKythdXRoZW50aWNhdGlvbiB0YWtl cyBwbGFjZS4gTm9uZUVuYWJsZWQgbXVzdCBiZSBlbmFibGVkIG9uIGJvdGggdGhlIGNsaWVudAor K2FuZCBzZXJ2ZXIgc2lkZSBvZiB0aGUgY29ubmVjdGlvbi4gV2hlbiB0aGUgY29ubmVjdGlvbiBz d2l0Y2hlcyB0byB0aGUgTk9ORQorK2NpcGhlciBhIHdhcm5pbmcgaXMgc2VudCB0byBTVERFUlIu IFRoZSBjb25uZWN0aW9uIGF0dGVtcHQgd2lsbCBmYWlsIHdpdGggYW4KKytlcnJvciBpZiBhIGNs aWVudCByZXF1ZXN0cyBhIE5vbmVTd2l0Y2ggZnJvbSB0aGUgc2VydmVyIHRoYXQgZG9lcyBub3Qg ZXhwbGljaXRseQorK2hhdmUgTm9uZUVuYWJsZWQgc2V0IHRvIHllcy4gTm90ZTogVGhlIE5PTkUg Y2lwaGVyIGNhbm5vdCBiZSB1c2VkIGluCisraW50ZXJhY3RpdmUgKHNoZWxsKSBzZXNzaW9ucyBh bmQgaXQgd2lsbCBmYWlsIHNpbGVudGx5LiBTZXQgdG8KKysuQ20gbm8KKytieSBkZWZhdWx0Lgor Ky5DbSBIUE5TU0ggb25seS4KKysuUHAKKysuQ20gTm90ZToKKyt0aGlzIG9wdGlvbnMgY2Fubm90 IGFjdHVhbHkgYmUgc2V0IGluIHRoZSBzc2hfY29uZmlnIGZpbGUuIEl0IG11c3QgYmUKKytzZXQg b24gdGhlIGNvbW1hbmQgbGluZSB1c2UgLW9Ob25lRW5hYmxlZC4gVGhpcyBpcyB0byBwcmV2ZW50 IGl0IGZyb20gYmVpbmcKKyt1c2VkIGFjY2lkZW50YWxseS4gSXQgaXMgaW5jbHVkZWQgaGVyZSBm b3IgY29tcGxldGVuZXNzIGFzIG5laXRoZXIgTm9uZU1hY0VuYWJsZWQKKytvciBOb25lQ2lwaGVy RW5hYmxlZCBoYXZlIGFueSBlZmZlY3Qgd2l0aG91dCB0aGlzIG9wdGlvbi4KKyAuSXQgQ20gTnVt YmVyT2ZQYXNzd29yZFByb21wdHMKKyBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwYXNzd29yZCBw cm9tcHRzIGJlZm9yZSBnaXZpbmcgdXAuCisgVGhlIGFyZ3VtZW50IHRvIHRoaXMga2V5d29yZCBt dXN0IGJlIGFuIGludGVnZXIuCitAQCAtMjEzNCw2ICsyMjY1LDEyIEBACisgU3BlY2lmeSBhIGNv bmZpZ3VyYXRpb24gdGFnIG5hbWUgdGhhdCBtYXkgYmUgbGF0ZXIgdXNlZCBieSBhCisgLkNtIE1h dGNoCisgZGlyZWN0aXZlIHRvIHNlbGVjdCBhIGJsb2NrIG9mIGNvbmZpZ3VyYXRpb24uCisrLkl0 IENtIFRjcFJjdkJ1ZlBvbGwKKytFbmFibGUgb2YgZGlzYWJsZSB0aGUgcG9sbGluZyBvZiB0aGUg dGNwIHJlY2VpdmUgYnVmZmVyIHRocm91Z2ggdGhlIGxpZmUKKytvZiB0aGUgY29ubmVjdGlvbi4g WW91IHdvdWxkIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaXMgZW5hYmxlZAor K2ZvciBzeXN0ZW1zIG1ha2luZyB1c2Ugb2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQu MjQrLCAyLjYsIE1TIFZpc3RhKS4KKytEZWZhdWx0IGlzCisrLkNtIHllcy4gSFBOU1NIIG9ubHku CisgLkl0IENtIFR1bm5lbAorIFJlcXVlc3QKKyAuWHIgdHVuIDQKK0BAIC0yMjE5LDYgKzIzNTYs MTIgQEAKKyBmcm9tIE9wZW5TU0ggNi44IGFuZCBncmVhdGVyIHN1cHBvcnQgdGhlCisgLlFxIGhv c3RrZXlzQG9wZW5zc2guY29tCisgcHJvdG9jb2wgZXh0ZW5zaW9uIHVzZWQgdG8gaW5mb3JtIHRo ZSBjbGllbnQgb2YgYWxsIHRoZSBzZXJ2ZXIncyBob3N0a2V5cy4KKysuSXQgQ20gVXNlTVBUQ1AK KytJZiBzZXQgdG8KKysuQ20geWVzICwKKyt0aGlzIHdpbGwgZW5hYmxlIE11bHRpcGF0aCBUQ1Ag KE1QVENQKSBpbnN0ZWFkIG9mIFRDUCAodGhpcyBvbmx5IHdvcmtzIG9uIExpbnV4KS4KKytUaGUg ZGVmYXVsdCBpcworKy5DbSBubyAuCisgLkl0IENtIFVzZXIKKyBTcGVjaWZpZXMgdGhlIHVzZXIg dG8gbG9nIGluIGFzLgorIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIGEgZGlmZmVyZW50IHVzZXIg bmFtZSBpcyB1c2VkIG9uIGRpZmZlcmVudCBtYWNoaW5lcy4KK0BAIC0yNTI4LDMgKzI2NzEsMTEg QEAKKyBjcmVhdGVkIE9wZW5TU0guCisgLkFuIE1hcmt1cyBGcmllZGwKKyBjb250cmlidXRlZCB0 aGUgc3VwcG9ydCBmb3IgU1NIIHByb3RvY29sIHZlcnNpb25zIDEuNSBhbmQgMi4wLgorKy5BbiBD aHJpcyBSYXBpZXIsCisrLkFuIE1pY2hhZWwgU3RldmVucywKKysuQW4gQmVuIEJlbm5ldCwKKyth bmQKKysuQW4gTWlrZSBUYXNvdGEKKytkZXZlbG9wZWQgdGhlIEhQTiBleHRlbnNpb25zIGF0IHRo ZSBQaXR0c2J1cmdoIFN1cGVyY29tdXRpbmcgQ2VudGVyCisrd2l0aCBncmFudHMgZnJvbSBDaXNj bywgdGhlIE5hdGlvbmFsIExpYnJhcnkgb2YgTWVkaWNpbmUsIGFuZAorK3RoZSBOYXRpb25hbCBT Y2llbmNlIEZvdW5kYXRpb24uCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25u ZWN0Mi5jIG9wZW5zc2gtMTAuM3AxL3NzaGNvbm5lY3QyLmMKKy0tLSBvcGVuc3NoLTEwLjNwMS5v cmlnL3NzaGNvbm5lY3QyLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAyMDAKKysr KyBvcGVuc3NoLTEwLjNwMS9zc2hjb25uZWN0Mi5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzMzNjQ5 MDgxICswMjAwCitAQCAtNzQsNiArNzQsNyBAQAorICNpbmNsdWRlICJ1dGY4LmgiCisgI2luY2x1 ZGUgInNzaC1zay5oIgorICNpbmNsdWRlICJzay1hcGkuaCIKKysjaW5jbHVkZSAiY2lwaGVyLXN3 aXRjaC5oIgorIAorICNpZmRlZiBHU1NBUEkKKyAjaW5jbHVkZSAic3NoLWdzcy5oIgorQEAgLTgz LDYgKzg0LDEzIEBACisgZXh0ZXJuIE9wdGlvbnMgb3B0aW9uczsKKyAKKyAvKgorKyAqIHR0eV9m bGFnIGlzIHNldCBpbiBzc2guYy4gVXNlIHRoaXMgaW4gc3NoX3VzZXJhdXRoMjoKKysgKiBpZiBp dCBpcyBzZXQsIHRoZW4gcHJldmVudCB0aGUgc3dpdGNoIHRvIHRoZSBudWxsIGNpcGhlci4KKysg Ki8KKysKKytleHRlcm4gaW50IHR0eV9mbGFnOworKworKy8qCisgICogU1NIMiBrZXkgZXhjaGFu Z2UKKyAgKi8KKyAKK0BAIC01NzksNiArNTg3LDQyIEBACisgCisgCWlmICghYXV0aGN0eHQuc3Vj Y2VzcykKKyAJCWZhdGFsKCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIik7CisrCisrCS8qCisrCSAq IElmIHRoZSB1c2VyIHdhbnRzIHRvIHVzZSB0aGUgbm9uZSBjaXBoZXIgYW5kL29yIG5vbmUgbWFj LCBkbyBpdCBwb3N0IGF1dGhlbnRpY2F0aW9uCisrCSAqIGFuZCBvbmx5IGlmIHRoZSByaWdodCBj b25kaXRpb25zIGFyZSBtZXQgLS0gYm90aCBvZiB0aGUgTk9ORSBjb21tYW5kcworKwkgKiBtdXN0 IGJlIHRydWUgYW5kIHRoZXJlIG11c3QgYmUgbm8gdHR5IGFsbG9jYXRlZC4KKysJICovCisrCWlm IChvcHRpb25zLm5vbmVfc3dpdGNoID09IDEgJiYgb3B0aW9ucy5ub25lX2VuYWJsZWQgPT0gMSkg eworKwkJY2hhciAqbXlwcm9wb3NhbFtQUk9QT1NBTF9NQVhdOworKwkJY2hhciAqcyA9IE5VTEw7 CisrCQljb25zdCBjaGFyICpub25lX2NpcGhlciA9ICJub25lIjsKKysJCWlmICghdHR5X2ZsYWcp IHsgLyogbm8gbnVsbCBvbiB0dHkgc2Vzc2lvbnMgKi8KKysJCQlkZWJ1ZygiUmVxdWVzdGluZyBu b25lIHJla2V5aW5nLi4uIik7CisrCQkJa2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMoc3No LCBteXByb3Bvc2FsLCBzLCBub25lX2NpcGhlciwKKysJCQkJCQkgICAgICBvcHRpb25zLm1hY3Ms CisrCQkJCQkJICAgICAgY29tcHJlc3Npb25fYWxnX2xpc3Qob3B0aW9ucy5jb21wcmVzc2lvbiks CisrCQkJCQkJICAgICAgb3B0aW9ucy5ob3N0a2V5YWxnb3JpdGhtcyk7CisrCQkJZnByaW50Zihz dGRlcnIsICJXQVJOSU5HOiBFTkFCTEVEIE5PTkUgQ0lQSEVSISEhXG4iKTsKKysKKysJCQkvKiBO T05FTUFDIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29udGV4dCBvZiB0aGUgTk9ORSBDSVBIRVIgKi8K KysJCQlpZiAob3B0aW9ucy5ub25lbWFjX2VuYWJsZWQgPT0gMSkgeworKwkJCQljb25zdCBjaGFy ICpub25lX21hYyA9ICJub25lIjsKKysJCQkJa2V4X3Byb3Bvc2FsX3BvcHVsYXRlX2VudHJpZXMo c3NoLCBteXByb3Bvc2FsLCBzLCBub25lX2NpcGhlciwKKysJCQkJCQkJICAgICAgbm9uZV9tYWMs CisrCQkJCQkJCSAgICAgIGNvbXByZXNzaW9uX2FsZ19saXN0KG9wdGlvbnMuY29tcHJlc3Npb24p LAorKwkJCQkJCQkgICAgICBvcHRpb25zLmhvc3RrZXlhbGdvcml0aG1zKTsKKysJCQkJZnByaW50 ZihzdGRlcnIsICJXQVJOSU5HOiBFTkFCTEVEIE5PTkUgTUFDXG4iKTsKKysJCQl9CisrCQkJa2V4 X3Byb3AyYnVmKHNzaC0+a2V4LT5teSwgbXlwcm9wb3NhbCk7CisrCQkJcGFja2V0X3JlcXVlc3Rf cmVrZXlpbmcoKTsKKysJCX0gZWxzZSB7CisrCQkJLyogcmVxdWVzdGVkIE5PTkUgY2lwaGVyIHdo ZW4gaW4gYSB0dHkgKi8KKysJCQlkZWJ1ZygiQ2Fubm90IHN3aXRjaCB0byBOT05FIGNpcGhlciB3 aXRoIHR0eSBhbGxvY2F0ZWQiKTsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIk5PTkUgY2lwaGVyIHN3 aXRjaCBkaXNhYmxlZCB3aGVuIGEgVFRZIGlzIGFsbG9jYXRlZFxuIik7CisrCQl9CisrCX0KKysK KyAJaWYgKHNzaF9wYWNrZXRfY29ubmVjdGlvbl9pc19vbl9zb2NrZXQoc3NoKSkgeworIAkJdmVy Ym9zZSgiQXV0aGVudGljYXRlZCB0byAlcyAoWyVzXTolZCkgdXNpbmcgXCIlc1wiLiIsIGhvc3Qs CisgCQkgICAgc3NoX3JlbW90ZV9pcGFkZHIoc3NoKSwgc3NoX3JlbW90ZV9wb3J0KHNzaCksCitk aWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25uZWN0LmMgb3BlbnNzaC0xMC4zcDEv c3NoY29ubmVjdC5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hjb25uZWN0LmMJMjAyNi0w Ny0wMiAwMDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2hjb25u ZWN0LmMJMjAyNi0wNy0wMiAxMDoyNTo0Ni41NDk3OTg5NTkgKzAyMDAKK0BAIC01NSw2ICs1NSw3 IEBACisgI2luY2x1ZGUgInNzaGVyci5oIgorICNpbmNsdWRlICJhdXRoZmQuaCIKKyAjaW5jbHVk ZSAia2V4LmgiCisrI2luY2x1ZGUgImhhcHB5ZXllYmFsbHMuaCIKKyAKKyBzdHJ1Y3Qgc3Noa2V5 ICpwcmV2aW91c19ob3N0X2tleSA9IE5VTEw7CisgCitAQCAtNjYsNiArNjcsNyBAQAorIGV4dGVy biBpbnQgZGVidWdfZmxhZzsKKyBleHRlcm4gT3B0aW9ucyBvcHRpb25zOworIGV4dGVybiBjaGFy ICpfX3Byb2duYW1lOworK2V4dGVybiBjaGFyIGdsb2JhbF9udG9wW05JX01BWEhPU1RdOworIAor IHN0YXRpYyBpbnQgc2hvd19vdGhlcl9rZXlzKHN0cnVjdCBob3N0a2V5cyAqLCBzdHJ1Y3Qgc3No a2V5ICopOworIHN0YXRpYyB2b2lkIHdhcm5fY2hhbmdlZF9rZXkoc3RydWN0IHNzaGtleSAqKTsK K0BAIC0zMzMsNyArMzM1LDcgQEAKKyAvKgorICAqIENyZWF0ZXMgYSBzb2NrZXQgZm9yIHVzZSBh cyB0aGUgc3NoIGNvbm5lY3Rpb24uCisgICovCistc3RhdGljIGludAorK2ludAorIHNzaF9jcmVh dGVfc29ja2V0KHN0cnVjdCBhZGRyaW5mbyAqYWkpCisgeworIAlpbnQgc29jaywgcjsKK0BAIC0z NDUsOSArMzQ3LDE2IEBACisgI2VuZGlmCisgCWNoYXIgbnRvcFtOSV9NQVhIT1NUXTsKKyAKKy0J c29jayA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsIGFpLT5haV9wcm90 b2NvbCk7CisrCS8qIHVzZXIgcmVxdWVzdCBmb3IgTXVsdGlwYXRoIFRDUCAqLworKwlpZiAob3B0 aW9ucy51c2VfbXB0Y3ApCisrCQlzb2NrID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9z b2NrdHlwZSwgSVBQUk9UT19NUFRDUCk7CisrCWVsc2UKKysJCXNvY2sgPSBzb2NrZXQoYWktPmFp X2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworKworIAlpZiAoc29j ayA9PSAtMSkgeworIAkJZXJyb3IoInNvY2tldDogJXMiLCBzdHJlcnJvcihlcnJubykpOworKwkJ aWYgKG9wdGlvbnMudXNlX21wdGNwKQorKwkJCWVycm9yICgiWW91IGFza2VkIHRvIHVzZSBNUFRD UC4gUGxlYXNlIGVuc3VyZSBpdCBpcyBlbmFibGVkLiIpOworIAkJcmV0dXJuIC0xOworIAl9Cisg CSh2b2lkKWZjbnRsKHNvY2ssIEZfU0VURkQsIEZEX0NMT0VYRUMpOworQEAgLTQ1MCw2ICs0NTks MTUgQEAKKyAJCQlzbGVlcCgxKTsKKyAJCQlkZWJ1ZygiVHJ5aW5nIGFnYWluLi4uIik7CisgCQl9 CisrCQlpZiAob3B0aW9ucy51c2VfaGFwcHlleWVzID09IDEpIHsKKysJCQlkZWJ1Z19mICgiQXR0 ZW1wdGluZyBSRkMgODMwNSAvIEhhcHB5IEV5ZWJhbGxzIGNvbm5lY3Rpb24uIik7CisrCQkJc29j ayA9IGhhcHB5X2V5ZWJhbGxzKGhvc3QsIGFpdG9wLAorKwkJCSAgICBob3N0YWRkciwgdGltZW91 dF9tcyk7CisrCQkJaWYgKHNvY2sgIT0gLTEpIHsKKysJCQkJZGVidWdfZiAoIlJGQyA4MzA1IC8g SGFwcHkgRXllYmFsbHMgY29ubmVjdGlvbiBzdWNjZXNzZnVsLiIpOworKwkJCQlicmVhazsJLyog U3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAqLworKyAJCQl9CisrCQl9IGVsc2UgeworIAkJLyoKKyAJ CSAqIExvb3AgdGhyb3VnaCBhZGRyZXNzZXMgZm9yIHRoaXMgaG9zdCwgYW5kIHRyeSBlYWNoIG9u ZSBpbgorIAkJICogc2VxdWVuY2UgdW50aWwgdGhlIGNvbm5lY3Rpb24gc3VjY2VlZHMuCitAQCAt NTA0LDYgKzUyMiw3IEBACisgCQl9CisgCQlpZiAoc29jayAhPSAtMSkKKyAJCQlicmVhazsJLyog U3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAqLworKwkJfQorIAl9CisgCisgCS8qIFJldHVybiBmYWls dXJlIGlmIHdlIGRpZG4ndCBnZXQgYSBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICovCitAQCAtMTYx NSw2ICsxNjM0LDkgQEAKKyAJLyoga2V5IGV4Y2hhbmdlICovCisgCS8qIGF1dGhlbnRpY2F0ZSB1 c2VyICovCisgCWRlYnVnKCJBdXRoZW50aWNhdGluZyB0byAlczolZCBhcyAnJXMnIiwgaG9zdCwg cG9ydCwgc2VydmVyX3VzZXIpOworKwkvKiBpZiB1c2luZyBSRkMgODMwNSBjbGVhcmx5IHN0YXRl IHdoaWNoIGFkZHJlc3Mgd2UgYXJlIGNvbm5lY3RlZCB0byAqLworKwlpZiAob3B0aW9ucy51c2Vf aGFwcHlleWVzID09IDEpCisrCQlkZWJ1ZygiUkZDIDgzMDUgYXV0aGVudGljYXRpbmcgdG8gJS4y MDBzIiwgZ2xvYmFsX250b3ApOworIAlzc2hfa2V4Mihzc2gsIGhvc3QsIGhvc3RhZGRyLCBwb3J0 LCBjaW5mbyk7CisgCWlmICghb3B0aW9ucy5rZXhfYWxnb3JpdGhtc19zZXQgJiYgc3NoLT5rZXgg IT0gTlVMTCAmJgorIAkgICAgc3NoLT5rZXgtPm5hbWUgIT0gTlVMTCAmJiBvcHRpb25zLndhcm5f d2Vha19jcnlwdG8gJiYKK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaGQtYXV0aC5j IG9wZW5zc2gtMTAuM3AxL3NzaGQtYXV0aC5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hk LWF1dGguYwkyMDI2LTA3LTAyIDAwOjI3OjA2LjEwNDE5NTQ0NyArMDIwMAorKysrIG9wZW5zc2gt MTAuM3AxL3NzaGQtYXV0aC5jCTIwMjYtMDctMDIgMDA6Mjc6MjkuNzM0MTEzMDgwICswMjAwCitA QCAtNzk4LDYgKzc5OCwyNSBAQAorIAlzdHJ1Y3Qga2V4ICprZXg7CisgCWludCByOworIAorKwkv KiB0aGlzIHVzZWQgdG8gYmUgaW4gc3NoZC5jIHdoZW4gd2UgcmVhZCB0aGUgY29uZmlndXJhdGlv biBmaWxlCisrCSAqIGJ1dCBuZWVkZWQgdG8gYmUgbW92ZWQgaGVyZSBhcyBkb19zc2gyX2tleCBp biBzc2hkLWF1dGggd2Fzbid0CisrCSAqIHBpY2tpbmcgdXAgdGhlIG5vbmUgb3B0aW9ucy4gQ0pS IDQvMTAvMjAyNQorKwkgKi8KKysJaWYgKG9wdGlvbnMubm9uZV9lbmFibGVkID09IDEpIHsKKysJ CWRlYnVnKCJXQVJOSU5HOiBOb25lIGNpcGhlciBlbmFibGVkIik7CisrCQljaGFyICpvbGRfY2lw aGVycyA9IG9wdGlvbnMuY2lwaGVyczsKKysJCXhhc3ByaW50Zigmb3B0aW9ucy5jaXBoZXJzLCAi JXMsbm9uZSIsIG9sZF9jaXBoZXJzKTsKKysJCWZyZWUob2xkX2NpcGhlcnMpOworKworKwkJLyog b25seSBlbmFibGUgdGhlIG5vbmUgTUFDIGluIGNvbnRleHQgb2YgdGhlIG5vbmUgY2lwaGVyIC1j anIgKi8KKysJCWlmIChvcHRpb25zLm5vbmVtYWNfZW5hYmxlZCA9PSAxKSB7CisrCQkJZGVidWco IldBUk5JTkc6IE5vbmUgTUFDIGVuYWJsZWQiKTsKKysJCQljaGFyICpvbGRfbWFjcyA9IG9wdGlv bnMubWFjczsKKysJCQl4YXNwcmludGYoJm9wdGlvbnMubWFjcywgIiVzLG5vbmUiLCBvbGRfbWFj cyk7CisrCQkJZnJlZShvbGRfbWFjcyk7CisrCQl9CisrCX0KKysKKyAJaWYgKG9wdGlvbnMucmVr ZXlfbGltaXQgfHwgb3B0aW9ucy5yZWtleV9pbnRlcnZhbCkKKyAJCXNzaF9wYWNrZXRfc2V0X3Jl a2V5X2xpbWl0cyhzc2gsIG9wdGlvbnMucmVrZXlfbGltaXQsCisgCQkgICAgb3B0aW9ucy5yZWtl eV9pbnRlcnZhbCk7CitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLmMgb3BlbnNz aC0xMC4zcDEvc3NoZC5jCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLmMJMjAyNi0wNy0w MiAwMDoyNzowNi4xMDQxOTU0NDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2hkLmMJMjAy Ni0wNy0wMiAwMDoyNzoyOS43MzQyOTg2MjEgKzAyMDAKK0BAIC04MjYsNiArODI2LDggQEAKKyAJ aW50IHJldCwgbGlzdGVuX3NvY2s7CisgCXN0cnVjdCBhZGRyaW5mbyAqYWk7CisgCWNoYXIgbnRv cFtOSV9NQVhIT1NUXSwgc3RycG9ydFtOSV9NQVhTRVJWXTsKKysJaW50IHNvY2tzaXplOworKwlp bnQgc29ja3NpemVsZW4gPSBzaXplb2YoaW50KTsKKyAKKyAJZm9yIChhaSA9IGxhLT5hZGRyczsg YWk7IGFpID0gYWktPmFpX25leHQpIHsKKyAJCWlmIChhaS0+YWlfZmFtaWx5ICE9IEFGX0lORVQg JiYgYWktPmFpX2ZhbWlseSAhPSBBRl9JTkVUNikKK0BAIC04NDEsMTEgKzg0MywxOCBAQAorIAkJ CWNvbnRpbnVlOworIAkJfQorIAkJLyogQ3JlYXRlIHNvY2tldCBmb3IgbGlzdGVuaW5nLiAqLwor LQkJbGlzdGVuX3NvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAor LQkJICAgIGFpLT5haV9wcm90b2NvbCk7CisrCQlpZiAob3B0aW9ucy51c2VfbXB0Y3ApCisrCQkJ bGlzdGVuX3NvY2sgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAorKwkJ CSAgICBJUFBST1RPX01QVENQKTsKKysJCWVsc2UKKysJCQlsaXN0ZW5fc29jayA9IHNvY2tldChh aS0+YWlfZmFtaWx5LCBhaS0+YWlfc29ja3R5cGUsCisrCQkJICAgIGFpLT5haV9wcm90b2NvbCk7 CisrCisgCQlpZiAobGlzdGVuX3NvY2sgPT0gLTEpIHsKKyAJCQkvKiBrZXJuZWwgbWF5IG5vdCBz dXBwb3J0IGlwdjYgKi8KKyAJCQl2ZXJib3NlKCJzb2NrZXQ6ICUuMTAwcyIsIHN0cmVycm9yKGVy cm5vKSk7CisrCQkJaWYgKG9wdGlvbnMudXNlX21wdGNwKQorKwkJCQl2ZXJib3NlKCJNUFRDUCBy ZXF1ZXN0ZWQgYnV0IG1heSBub3QgYmUgYXZhaWxhYmxlLiIpOworIAkJCWNvbnRpbnVlOworIAkJ fQorIAkJaWYgKHNldF9ub25ibG9jayhsaXN0ZW5fc29jaykgPT0gLTEpIHsKK0BAIC04NzEsNiAr ODgwLDEwIEBACisgCisgCQlkZWJ1ZygiQmluZCB0byBwb3J0ICVzIG9uICVzLiIsIHN0cnBvcnQs IG50b3ApOworIAorKwkJZ2V0c29ja29wdChsaXN0ZW5fc29jaywgU09MX1NPQ0tFVCwgU09fUkNW QlVGLAorKwkJCQkgICAmc29ja3NpemUsICZzb2Nrc2l6ZWxlbik7CisrCQlkZWJ1ZygiU2VydmVy IFRDUCBSV0lOIHNvY2tldCBzaXplOiAlZCIsIHNvY2tzaXplKTsKKysKKyAJCS8qIEJpbmQgdGhl IHNvY2tldCB0byB0aGUgZGVzaXJlZCBwb3J0LiAqLworIAkJaWYgKGJpbmQobGlzdGVuX3NvY2ss IGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPT0gLTEpIHsKKyAJCQllcnJvcigiQmluZCB0 byBwb3J0ICVzIG9uICVzIGZhaWxlZDogJS4yMDBzLiIsCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4z cDEub3JpZy9zc2hkX2NvbmZpZyBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZpZworLS0tIG9wZW5z c2gtMTAuM3AxLm9yaWcvc3NoZF9jb25maWcJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYg KzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZpZwkyMDI2LTA3LTAyIDAxOjQ4OjI5 LjQxNDk4ODE2NiArMDIwMAorQEAgLTE4LDcgKzE4LDcgQEAKKyAjIFNFTGludXggYWJvdXQgdGhp cyBjaGFuZ2UuCisgIyBzZW1hbmFnZSBwb3J0IC1hIC10IHNzaF9wb3J0X3QgLXAgdGNwICNQT1JU TlVNQkVSCisgIworLSNQb3J0IDIyCisrUG9ydCAyMjIyCisgI0FkZHJlc3NGYW1pbHkgYW55Cisg I0xpc3RlbkFkZHJlc3MgMC4wLjAuMAorICNMaXN0ZW5BZGRyZXNzIDo6CitAQCAtMTIyLDYgKzEy Miw3IEBACisgI1Blcm1pdFR1bm5lbCBubworICNDaHJvb3REaXJlY3Rvcnkgbm9uZQorICNWZXJz aW9uQWRkZW5kdW0gbm9uZQorKyNVc2VNUFRDUCBubworIAorICMgbm8gZGVmYXVsdCBiYW5uZXIg cGF0aAorICNCYW5uZXIgbm9uZQorQEAgLTEyOSw2ICsxMzAsMTkgQEAKKyAjIG92ZXJyaWRlIGRl ZmF1bHQgb2Ygbm8gc3Vic3lzdGVtcworIFN1YnN5c3RlbQlzZnRwCS91c3IvbGliZXhlYy9zZnRw LXNlcnZlcgorIAorKyMgdGhlIGZvbGxvd2luZyBhcmUgSFBOIHJlbGF0ZWQgY29uZmlndXJhdGlv biBvcHRpb25zCisrIyB0Y3AgcmVjZWl2ZSBidWZmZXIgcG9sbGluZy4gZGlzYWJsZSBpbiBub24g YXV0b3R1bmluZyBrZXJuZWxzCisrI1RjcFJjdkJ1ZlBvbGwgeWVzCisrCisrIyBkaXNhYmxlIGhw biBwZXJmb3JtYW5jZSBib29zdHMKKysjSFBORGlzYWJsZWQgbm8KKysKKysjIGFsbG93IHRoZSB1 c2Ugb2YgdGhlIG5vbmUgY2lwaGVyCisrI05vbmVFbmFibGVkIG5vCisrCisrIyBhbGxvdyB0aGUg dXNlIG9mIHRoZSBub25lIE1BQworKyNOb25lTWFjRW5hYmxlZCBubworKworICMgRXhhbXBsZSBv ZiBvdmVycmlkaW5nIHNldHRpbmdzIG9uIGEgcGVyLXVzZXIgYmFzaXMKKyAjTWF0Y2ggVXNlciBh bm9uY3ZzCisgIwlYMTFGb3J3YXJkaW5nIG5vCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3Jp Zy9zc2hkX2NvbmZpZy41IG9wZW5zc2gtMTAuM3AxL3NzaGRfY29uZmlnLjUKKy0tLSBvcGVuc3No LTEwLjNwMS5vcmlnL3NzaGRfY29uZmlnLjUJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYg KzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2hkX2NvbmZpZy41CTIwMjYtMDctMDIgMDA6Mjc6 MjkuNzM0NTk3NjUxICswMjAwCitAQCAtNTYsNiArNTYsMTYgQEAKKyAuUHEgXCYiCisgaW4gb3Jk ZXIgdG8gcmVwcmVzZW50IGFyZ3VtZW50cyBjb250YWluaW5nIHNwYWNlcy4KKyAuUHAKKysuWHIg aHBuc3NoZCA4CisraXMgZnVsbHkgY29tcGF0aWJsZSB3aXRoIE9wZW5TU0gncyBzc2hkIGFuZCB1 c2VzIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gZm9ybWF0LCBkaXJlY3RpdmVzLCBhbmQgb3B0aW9u cy4KKysuWHIgaHBuc3NoZCA4CisrY2FuIHVzZSB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGZpbGUg YXMKKysuWHIgc3NoZCA4CisrdGhvdWdoIHRoZSBpbnZlcnNlIGlzIG5vdCBuZWNlc3NhcmlseSB0 cnVlLiBUaGlzIGlzIGJlY2F1c2UKKysuWHIgaHBuc3NoIDgKKytoYXMgc29tZSBhZGRpdGlvbmFs IG9wdGlvbnMgd2hpY2ggYXJlIGRpc2N1c3NlZCBiZWxvdy4gQXMgc3VjaCBhZG1pbmlzdHJhdG9y cyBzaG91bGQgbWFpbnRhaW4KKytzZXBlcmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBlYWNo LgorKy5QcAorIFRoZSBwb3NzaWJsZQorIGtleXdvcmRzIGFuZCB0aGVpciBtZWFuaW5ncyBhcmUg YXMgZm9sbG93cyAobm90ZSB0aGF0Cisga2V5d29yZHMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5k IGFyZ3VtZW50cyBhcmUgY2FzZS1zZW5zaXRpdmUpOgorQEAgLTY3MSw2ICs2ODEsMTAgQEAKKyBU Q1AgYW5kIFN0cmVhbUxvY2FsLgorIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBhbGwgb3RoZXIgZm9y d2FyZGluZy1yZWxhdGVkIG9wdGlvbnMgYW5kIG1heQorIHNpbXBsaWZ5IHJlc3RyaWN0ZWQgY29u ZmlndXJhdGlvbnMuCisrLkl0IENtIERpc2FibGVNVEFFUworK1N3aXRjaCB0aGUgZW5jcnlwdGlv biBjaXBoZXIgYmVpbmcgdXNlZCBmcm9tIHRoZSBtdWx0aXRocmVhZGVkIE1ULUFFUy1DVFIgY2lw aGVyCisrYmFjayB0byB0aGUgc3RvY2sgc2luZ2xlLXRocmVhZGVkIEFFUy1DVFIgY2lwaGVyLiBE ZWZhdWx0IGlzIAorKy5DbSBuby4gSFBOU1NIIG9ubHkuIAorIC5JdCBDbSBFeHBvc2VBdXRoSW5m bworIFdyaXRlcyBhIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGF1dGhlbnRp Y2F0aW9uIG1ldGhvZHMgYW5kCisgcHVibGljIGNyZWRlbnRpYWxzIChlLmcuIGtleXMpIHVzZWQg dG8gYXV0aGVudGljYXRlIHRoZSB1c2VyLgorQEAgLTEwMjYsNiArMTA0MCwxMSBAQAorIHRoYXQg dGhlIHNlcnZlciBvZmZlcnMuCisgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHNpZ25hdHVyZSBhbGdv cml0aG1zIG1heSBhbHNvIGJlIG9idGFpbmVkIHVzaW5nCisgLlFxIHNzaCAtUSBIb3N0S2V5QWxn b3JpdGhtcyAuCisrLkl0IENtIEhQTkRpc2FibGVkCisrSW4gc29tZSBzaXR1YXRpb25zLCBzdWNo IGFzIHRyYW5zZmVycyBvbiBhIGxvY2FsIGFyZWEgbmV0d29yaywgdGhlIGltcGFjdAorK29mIHRo ZSBIUE4gY29kZSBwcm9kdWNlcyBhIG5ldCBkZWNyZWFzZSBpbiBwZXJmb3JtYW5jZS4gSW4gdGhl c2UgY2FzZXMgaXQgaXMKKytoZWxwZnVsIHRvIGRpc2FibGUgdGhlIEhQTiBmdW5jdGlvbmFsaXR5 LiBCeSBkZWZhdWx0IEhQTkRpc2FibGVkIGlzIHNldCB0byAKKysuQ20gbm8uCisgLkl0IENtIEln bm9yZVJob3N0cworIFNwZWNpZmllcyB3aGV0aGVyIHRvIGlnbm9yZSBwZXItdXNlcgorIC5QYSAu cmhvc3RzCitAQCAtMTU0OCw2ICsxNTY3LDE5IEBACisga2V5IGV4Y2hhbmdlIG1ldGhvZHMuCisg VGhlIGRlZmF1bHQgaXMKKyAuUGEgL2V0Yy9tb2R1bGkgLgorKy5JdCBDbSBOb25lRW5hYmxlZAor K0VuYWJsZSBvciBkaXNhYmxlIHRoZSB1c2Ugb2YgdGhlIE5vbmUgY2lwaGVyLiBDYXJlIG11c3Qg YWx3YXlzIGJlIHVzZWQKKyt3aGVuIGVuYWJsaW5nIHRoaXMgYXMgaXQgd2lsbCBhbGxvdyB1c2Vy cyB0byBzZW5kIGRhdGEgaW4gdGhlIGNsZWFyLiBIb3dldmVyLAorK2l0IGlzIGltcG9ydGFudCB0 byBub3RlIHRoYXQgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gcmVtYWlucyBlbmNyeXB0ZWQK KytldmVuIGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuIERlZmF1bHQgaXMgCisrLkNtIG5vCisr Lkl0IENtIE5vbmVNYWNFbmFibGVkCisrRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiB0aGUg Tm9uZSBNQUMuIFdoZW4gdGhpcyBpcyBlbmFibGVkIHNzaAorK3dpbGwgKm5vdCogcHJvdmlkZSBk YXRhIGludGVncml0eSBvZiBhbnkgZGF0YSBiZWluZyB0cmFuc21pdHRlZCBiZXR3ZWVuIGhvc3Rz LiBVc2UKKyt3aXRoIGNhdXRpb24gYXMgaXQsIHVubGlrZSBqdXN0IHVzaW5nIE5vbmVFbmFibGVk LCBkb2Vzbid0IHByb3ZpZGUgZGF0YSBpbnRlZ3JpdHkgYW5kCisrcHJvdGVjdGlvbiBhZ2FpbnN0 IG1hbi1pbi10aGUtbWlkZGxlIGF0dGFja3MuIEFzIHdpdGggTm9uZUVuYWJsZWQgYWxsIGF1dGhl bnRpY2F0aW9uCisrcmVtYWlucyBlbmNyeXB0ZWQgYW5kIGludGVncml0eSBpcyBlbnN1cmVkLiBE ZWZhdWx0IGlzIAorKy5DbSBuby4KKyAuSXQgQ20gUEFNU2VydmljZU5hbWUKKyBTcGVjaWZpZXMg dGhlIHNlcnZpY2UgbmFtZSB1c2VkIGZvciBQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxl cyAoUEFNKQorIGF1dGhlbnRpY2F0aW9uLCBhdXRob3Jpc2F0aW9uIGFuZCBzZXNzaW9uIGNvbnRy b2xzIHdoZW4KK0BAIC0yMTI0LDYgKzIxNTYsMTMgQEAKKyAuUHAKKyBUbyBkaXNhYmxlIFRDUCBr ZWVwYWxpdmUgbWVzc2FnZXMsIHRoZSB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvCisgLkNtIG5vIC4K KysuSXQgQ20gVGNwUmN2QnVmUG9sbAorK0VuYWJsZSBvZiBkaXNhYmxlIHRoZSBwb2xsaW5nIG9m IHRoZSB0Y3AgcmVjZWl2ZSBidWZmZXIgdGhyb3VnaG91dCB0aGUgbGlmZQorK29mIHRoZSBjb25u ZWN0aW9uLiBNYWtlIHN1cmUgdGhhdCB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGZvciBzeXN0ZW1z IG1ha2luZyAKKyt1c2Ugb2YgYXV0b3R1bmluZyBrZXJuZWxzIChsaW51eCAyLjQuMjQrLCAyLjYs IE1TIFZpc3RhKSBpbiBvcmRlciB0bworK21heGltaXplIHRocm91Z2hwdXQgb24gaGlnaCBwZXJm b3JtYW5jZSBuZXR3b3Jrcy4gCisrRGVmYXVsdCBpcyAKKysuQ20geWVzLgorIC5JdCBDbSBUcnVz dGVkVXNlckNBS2V5cworIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyBwdWJsaWMga2V5cyBv ZiBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyB0aGF0IGFyZQorIHRydXN0ZWQgdG8gc2lnbiB1c2Vy IGNlcnRpZmljYXRlcyBmb3IgYXV0aGVudGljYXRpb24sIG9yCitAQCAtMjE4NCw2ICsyMjIzLDEy IEBACisgLkNtIE1hdGNoCisgLkNtIEhvc3QKKyBkaXJlY3RpdmVzLgorKy5JdCBDbSBVc2VNUFRD UAorK0lmIHNldCB0bworKy5DbSB5ZXMgLAorK3RoaXMgd2lsbCBlbmFibGUgTXVsdGlwYXRoIFRD UCAoTVBUQ1ApIGluc3RlYWQgb2YgVENQICh0aGlzIG9ubHkgd29ya3Mgb24gTGludXgpLgorK1Ro ZSBkZWZhdWx0IGlzCisrLkNtIG5vIC4KKyAuSXQgQ20gVXNlUEFNCisgRW5hYmxlcyB0aGUgUGx1 Z2dhYmxlIEF1dGhlbnRpY2F0aW9uIE1vZHVsZSBpbnRlcmZhY2UuCisgSWYgc2V0IHRvCitAQCAt MjQyOSwzICsyNDc0LDExIEBACisgYW5kCisgLkFuIE1hcmt1cyBGcmllZGwKKyBjb250cmlidXRl ZCBzdXBwb3J0IGZvciBwcml2aWxlZ2Ugc2VwYXJhdGlvbi4KKysuQW4gQ2hyaXMgUmFwaWVyLCAK KysuQW4gTWljaGFlbCBTdGV2ZW5zLCAKKysuQW4gQmVuIEJlbm5ldCwgCisrYW5kIAorKy5BbiBN aWtlIFRhc290YSAKKytkZXZlbG9wZWQgdGhlIEhQTiBleHRlbnNpb25zIGF0IHRoZSBQaXR0c2J1 cmdoIFN1cGVyY29tdXRpbmcgQ2VudGVyIAorK3dpdGggZ3JhbnRzIGZyb20gQ2lzY28sIHRoZSBO YXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lLCBhbmQgCisrdGhlIE5hdGlvbmFsIFNjaWVuY2Ug Rm91bmRhdGlvbi4gCitkaWZmIC1OdXIgb3BlbnNzaC0xMC4zcDEub3JpZy9zc2hkLXNlc3Npb24u YyBvcGVuc3NoLTEwLjNwMS9zc2hkLXNlc3Npb24uYworLS0tIG9wZW5zc2gtMTAuM3AxLm9yaWcv c3NoZC1zZXNzaW9uLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYgKzAyMDAKKysrKyBv cGVuc3NoLTEwLjNwMS9zc2hkLXNlc3Npb24uYwkyMDI2LTA3LTAyIDAwOjI3OjI5LjczNDgwNDY4 MSArMDIwMAorQEAgLTExMDYsNiArMTEwNiwyMCBAQAorIAl9CisgCWVuZHB3ZW50KCk7CisgCisr CS8qIGdldCBOT05FIG9wdGlvbnMgKi8KKysJaWYgKG9wdGlvbnMubm9uZV9lbmFibGVkID09IDEp IHsKKysJCWNoYXIgKm9sZF9jaXBoZXJzID0gb3B0aW9ucy5jaXBoZXJzOworKwkJeGFzcHJpbnRm KCZvcHRpb25zLmNpcGhlcnMsICIlcyxub25lIiwgb2xkX2NpcGhlcnMpOworKwkJZnJlZShvbGRf Y2lwaGVycyk7CisrCisrCQkvKiBvbmx5IGVuYWJsZSB0aGUgbm9uZSBNQUMgaW4gY29udGV4dCBv ZiB0aGUgbm9uZSBjaXBoZXIgLWNqciAqLworKwkJaWYgKG9wdGlvbnMubm9uZW1hY19lbmFibGVk ID09IDEpIHsKKysJCQljaGFyICpvbGRfbWFjcyA9IG9wdGlvbnMubWFjczsKKysJCQl4YXNwcmlu dGYoJm9wdGlvbnMubWFjcywgIiVzLG5vbmUiLCBvbGRfbWFjcyk7CisrCQkJZnJlZShvbGRfbWFj cyk7CisrCQl9CisrCX0KKysKKyAJaWYgKCFkZWJ1Z19mbGFnICYmICFpbmV0ZF9mbGFnKSB7Cisg CQlpZiAoKHN0YXJ0dXBfcGlwZSA9IGR1cChSRUVYRUNfQ09ORklHX1BBU1NfRkQpKSA9PSAtMSkK KyAJCQlmYXRhbCgiaW50ZXJuYWwgZXJyb3I6IG5vIHN0YXJ0dXAgcGlwZSIpOworQEAgLTEzMTks NiArMTMzMyw5IEBACisgCSAgICByZG9tYWluID09IE5VTEwgPyAiIiA6ICJcIiIpOworIAlmcmVl KGxhZGRyKTsKKyAKKysJLyogc2V0IHRoZSBIUE4gb3B0aW9ucyBmb3IgdGhlIGNoaWxkICovCisr CWNoYW5uZWxfc2V0X2hwbl9kaXNhYmxlZChvcHRpb25zLmhwbl9kaXNhYmxlZCk7CisrCisgCS8q CisgCSAqIFdlIGRvbid0IHdhbnQgdG8gbGlzdGVuIGZvcmV2ZXIgdW5sZXNzIHRoZSBvdGhlciBz aWRlCisgCSAqIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVzIGl0c2VsZi4gIFNvIHdlIHNldCB1 cCBhbiBhbGFybSB3aGljaCBpcworZGlmZiAtTnVyIG9wZW5zc2gtMTAuM3AxLm9yaWcvc3NoLmgg b3BlbnNzaC0xMC4zcDEvc3NoLmgKKy0tLSBvcGVuc3NoLTEwLjNwMS5vcmlnL3NzaC5oCTIwMjYt MDctMDIgMDA6Mjc6MDYuMTAzMjc1MzA3ICswMjAwCisrKysgb3BlbnNzaC0xMC4zcDEvc3NoLmgJ MjAyNi0wNy0wMiAxMDowMjowMi40NTU5NjkzNzcgKzAyMDAKK0BAIC0xNCw2ICsxNCw3IEBACisg CisgLyogRGVmYXVsdCBwb3J0IG51bWJlci4gKi8KKyAjZGVmaW5lIFNTSF9ERUZBVUxUX1BPUlQJ MjIKKysjZGVmaW5lIEhQTlNTSF9ERUZBVUxUX1BPUlQgICAgMjIyMgorIAorIC8qCisgICogTWF4 aW11bSBudW1iZXIgb2YgY2VydGlmaWNhdGUgZmlsZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkCitA QCAtNDMsNyArNDQsNyBAQAorICAqIE5hbWUgZm9yIHRoZSBzZXJ2aWNlLiAgVGhlIHBvcnQgbmFt ZWQgYnkgdGhpcyBzZXJ2aWNlIG92ZXJyaWRlcyB0aGUKKyAgKiBkZWZhdWx0IHBvcnQgaWYgcHJl c2VudC4KKyAgKi8KKy0jZGVmaW5lIFNTSF9TRVJWSUNFX05BTUUJInNzaCIKKysjZGVmaW5lIFNT SF9TRVJWSUNFX05BTUUJImhwbnNzaCIKKyAKKyAvKgorICAqIE5hbWUgb2YgdGhlIGVudmlyb25t ZW50IHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3MgSUQgb2YgdGhlCitkaWZmIC1OdXIg b3BlbnNzaC0xMC4zcDEub3JpZy9zc2hrZXkuYyBvcGVuc3NoLTEwLjNwMS9zc2hrZXkuYworLS0t IG9wZW5zc2gtMTAuM3AxLm9yaWcvc3Noa2V5LmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDQxOTU0 NDcgKzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS9zc2hrZXkuYwkyMDI2LTA3LTAyIDAwOjI3OjI5 LjczNTA4OTE1NyArMDIwMAorQEAgLTE3NjcsNyArMTc2Nyw4IEBACisgCSAgICBzdGRlcnIpOwor ICNlbmRpZgorIAlpZiAoKHIgPSBjaXBoZXJfaW5pdCgmY2N0eCwgY2lwaGVyLCBrZXlpdiwgY2lw aGVyX2tleWxlbihjaXBoZXIpLAorLQkgICAga2V5aXYgKyBjaXBoZXJfa2V5bGVuKGNpcGhlciks IGNpcGhlcl9pdmxlbihjaXBoZXIpLCAxKSkgIT0gMCkKKysJICAgIGtleWl2ICsgY2lwaGVyX2tl eWxlbihjaXBoZXIpLCBjaXBoZXJfaXZsZW4oY2lwaGVyKSwgMCwKKysJICAgIENJUEhFUl9FTkNS WVBULCBDSVBIRVJfU0VSSUFMKSkgIT0gMCkKKyAJCWdvdG8gb3V0OworIAorIAkvKiBTZXJpYWxp c2UgYW5kIGVuY3J5cHQgdGhlIHByaXZhdGUga2V5IHVzaW5nIHRoZSBlcGhlbWVyYWwga2V5ICov CitAQCAtMTkwMSw3ICsxOTAyLDggQEAKKyAJICAgIGtleWl2LCBTU0hfRElHRVNUX01BWF9MRU5H VEgpKSAhPSAwKQorIAkJZ290byBvdXQ7CisgCWlmICgociA9IGNpcGhlcl9pbml0KCZjY3R4LCBj aXBoZXIsIGtleWl2LCBjaXBoZXJfa2V5bGVuKGNpcGhlciksCistCSAgICBrZXlpdiArIGNpcGhl cl9rZXlsZW4oY2lwaGVyKSwgY2lwaGVyX2l2bGVuKGNpcGhlciksIDApKSAhPSAwKQorKwkgICAg a2V5aXYgKyBjaXBoZXJfa2V5bGVuKGNpcGhlciksIGNpcGhlcl9pdmxlbihjaXBoZXIpLCAwLAor KwkgICAgQ0lQSEVSX0RFQ1JZUFQsIENJUEhFUl9TRVJJQUwpKSAhPSAwKQorIAkJZ290byBvdXQ7 CisgI2lmZGVmIERFQlVHX1BLCisgCWZwcmludGYoc3RkZXJyLCAiJXM6IGtleStpdlxuIiwgX19m dW5jX18pOworQEAgLTI5NDUsNiArMjk0NywxMyBAQAorIAkJa2RmbmFtZSA9ICJub25lIjsKKyAJ fSBlbHNlIGlmIChjaXBoZXJuYW1lID09IE5VTEwpCisgCQljaXBoZXJuYW1lID0gREVGQVVMVF9D SVBIRVJOQU1FOworKwkvKgorKwkgKiBOT1RFOiBXaXRob3V0IE9wZW5TU0wsIHRoaXMgc3RyaW5n IGNvbXBhcmlzb24gaXMgc3RpbGwgc2FmZSwgZXZlbgorKwkgKiB0aG91Z2ggaXQgd2lsbCBuZXZl ciBtYXRjaCBiZWNhdXNlIHRoZSBtdWx0aXRocmVhZGVkIGNpcGhlciBpcyBub3QKKysJICogZW5h YmxlZC4KKysJICovCisrCWVsc2UgaWYgKHN0cmNtcChjaXBoZXJuYW1lLCAiY2hhY2hhMjAtcG9s eTEzMDUtbXRAaHBuc3NoLm9yZyIpID09IDApCisrCQljaXBoZXJuYW1lID0gImNoYWNoYTIwLXBv bHkxMzA1QG9wZW5zc2guY29tIjsKKyAJaWYgKChjaXBoZXIgPSBjaXBoZXJfYnlfbmFtZShjaXBo ZXJuYW1lKSkgPT0gTlVMTCkgeworIAkJciA9IFNTSF9FUlJfSU5WQUxJRF9BUkdVTUVOVDsKKyAJ CWdvdG8gb3V0OworQEAgLTI5ODAsNyArMjk4OSw3IEBACisgCQlnb3RvIG91dDsKKyAJfQorIAlp ZiAoKHIgPSBjaXBoZXJfaW5pdCgmY2lwaGVyY29udGV4dCwgY2lwaGVyLCBrZXksIGtleWxlbiwK Ky0JICAgIGtleSArIGtleWxlbiwgaXZsZW4sIDEpKSAhPSAwKQorKwkgICAga2V5ICsga2V5bGVu LCBpdmxlbiwgMCwgQ0lQSEVSX0VOQ1JZUFQsIENJUEhFUl9TRVJJQUwpKSAhPSAwKQorIAkJZ290 byBvdXQ7CisgCisgCWlmICgociA9IHNzaGJ1Zl9wdXQoZW5jb2RlZCwgQVVUSF9NQUdJQywgc2l6 ZW9mKEFVVEhfTUFHSUMpKSkgIT0gMCB8fAorQEAgLTMxNjYsNiArMzE3NSw4IEBACisgCSAgICAo ciA9IHNzaGJ1Zl9nZXRfdTMyKGRlY29kZWQsICZlbmNyeXB0ZWRfbGVuKSkgIT0gMCkKKyAJCWdv dG8gb3V0OworIAorKwlpZiAoc3RyY21wKGNpcGhlcm5hbWUsICJjaGFjaGEyMC1wb2x5MTMwNS1t dEBocG5zc2gub3JnIikgPT0gMCkKKysJCXN0cmNweShjaXBoZXJuYW1lLCAiY2hhY2hhMjAtcG9s eTEzMDVAb3BlbnNzaC5jb20iKTsKKyAJaWYgKChjaXBoZXIgPSBjaXBoZXJfYnlfbmFtZShjaXBo ZXJuYW1lKSkgPT0gTlVMTCkgeworIAkJciA9IFNTSF9FUlJfS0VZX1VOS05PV05fQ0lQSEVSOwor IAkJZ290byBvdXQ7CitAQCAtMzIyMSw3ICszMjMyLDcgQEAKKyAJLyogZGVjcnlwdCBwcml2YXRl IHBvcnRpb24gb2Yga2V5ICovCisgCWlmICgociA9IHNzaGJ1Zl9yZXNlcnZlKGRlY3J5cHRlZCwg ZW5jcnlwdGVkX2xlbiwgJmRwKSkgIT0gMCB8fAorIAkgICAgKHIgPSBjaXBoZXJfaW5pdCgmY2lw aGVyY29udGV4dCwgY2lwaGVyLCBrZXksIGtleWxlbiwKKy0JICAgIGtleSArIGtleWxlbiwgaXZs ZW4sIDApKSAhPSAwKQorKwkgICAga2V5ICsga2V5bGVuLCBpdmxlbiwgMCwgQ0lQSEVSX0RFQ1JZ UFQsIENJUEhFUl9TRVJJQUwpKSAhPSAwKQorIAkJZ290byBvdXQ7CisgCWlmICgociA9IGNpcGhl cl9jcnlwdChjaXBoZXJjb250ZXh0LCAwLCBkcCwgc3NoYnVmX3B0cihkZWNvZGVkKSwKKyAJICAg IGVuY3J5cHRlZF9sZW4sIDAsIGF1dGhsZW4pKSAhPSAwKSB7CitkaWZmIC1OdXIgb3BlbnNzaC0x MC4zcDEub3JpZy91bWFjLmMgb3BlbnNzaC0xMC4zcDEvdW1hYy5jCistLS0gb3BlbnNzaC0xMC4z cDEub3JpZy91bWFjLmMJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDMyNzUzMDcgKzAyMDAKKysrKyBv cGVuc3NoLTEwLjNwMS91bWFjLmMJMjAyNi0wNy0wMiAwMDoyNzoyOS43MzU0NTAwODUgKzAyMDAK K0BAIC0xMzYsMTUgKzEzNiw0OCBAQAorIC8qIC0tLSBFbmRpYW4gQ29udmVyc2lvbiAtLS0gRm9y Y2luZyBhc3NlbWJseSBvbiBzb21lIHBsYXRmb3JtcyAgICAgICAgICAgKi8KKyAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCisgCisrCisrLyogVXNpbmcgbG9jYWwgc3RhdGljYWxseSBkZWZpbmVkIHZlcnNp b25zIG9mIHRoZSBnZXQvcHV0IGZ1bmN0aW9ucworKyAqIGZvdW5kIGluIG1pc2MuYyBhbGxvd3Mg dGhlbSB0byBiZSBpbmxpbmVkLiBUaGlzIGltcHJvdmVzIHRocm91Z2hwdXQKKysgKiBwZXJmb3Jt YW5jZSBieSAxMCUgdG8gMTUlIG9uIHdlbGwgY29ubmVjdGVkICgxMEdiL3MrKSBzeXN0ZW1zLiAK KysgKiBDaHJpcyBSYXBpZXIgPHJhcGllckBwc2MuZWR1PiAyMDIyLTAzLTA5ICovCisrCisrc3Rh dGljICBfX2F0dHJpYnV0ZV9fKChfX2JvdW5kZWRfXyhfX21pbmJ5dGVzX18sIDEsIDQpKSkKKyt1 X2ludDMyX3QgdW1hY19nZXRfdTMyX2xlKGNvbnN0IHZvaWQgKnZwKQorK3sKKysgICAgICAgIGNv bnN0IHVfY2hhciAqcCA9IChjb25zdCB1X2NoYXIgKil2cDsKKysgICAgICAgIHVfaW50MzJfdCB2 OworKworKyAgICAgICAgdiAgPSAodV9pbnQzMl90KXBbMF07CisrICAgICAgICB2IHw9ICh1X2lu dDMyX3QpcFsxXSA8PCA4OworKyAgICAgICAgdiB8PSAodV9pbnQzMl90KXBbMl0gPDwgMTY7Cisr ICAgICAgICB2IHw9ICh1X2ludDMyX3QpcFszXSA8PCAyNDsKKysKKysgICAgICAgIHJldHVybiAo dik7CisrfQorKworKyNpZiAwIC8qIGNvbXBpbGUgdGltZSB3YXJuaW5nIHRocm93biBvdGhlcndp c2UgKi8KKytzdGF0aWMgX19hdHRyaWJ1dGVfXygoX19ib3VuZGVkX18oX19taW5ieXRlc19fLCAx LCA0KSkpOworK3ZvaWQgdW1hY19wdXRfdTMyX2xlKHZvaWQgKnZwLCB1X2ludDMyX3QgdikKKyt7 CisrICAgICAgICB1X2NoYXIgKnAgPSAodV9jaGFyICopdnA7CisrCisrICAgICAgICBwWzBdID0g KHVfY2hhcil2ICYgMHhmZjsKKysgICAgICAgIHBbMV0gPSAodV9jaGFyKSh2ID4+IDgpICYgMHhm ZjsKKysgICAgICAgIHBbMl0gPSAodV9jaGFyKSh2ID4+IDE2KSAmIDB4ZmY7CisrICAgICAgICBw WzNdID0gKHVfY2hhcikodiA+PiAyNCkgJiAweGZmOworK30KKysjZW5kaWYKKysKKyAjaWYgKF9f TElUVExFX0VORElBTl9fKQorICNkZWZpbmUgTE9BRF9VSU5UMzJfUkVWRVJTRUQocCkJCWdldF91 MzIocCkKKyAjZGVmaW5lIFNUT1JFX1VJTlQzMl9SRVZFUlNFRChwLHYpCXB1dF91MzIocCx2KQor ICNlbHNlCistI2RlZmluZSBMT0FEX1VJTlQzMl9SRVZFUlNFRChwKQkJZ2V0X3UzMl9sZShwKQor LSNkZWZpbmUgU1RPUkVfVUlOVDMyX1JFVkVSU0VEKHAsdikJcHV0X3UzMl9sZShwLHYpCisrI2Rl ZmluZSBMT0FEX1VJTlQzMl9SRVZFUlNFRChwKQkJdW1hY19nZXRfdTMyX2xlKHApCisrI2RlZmlu ZSBTVE9SRV9VSU5UMzJfUkVWRVJTRUQocCx2KQl1bWFjX3B1dF91MzJfbGUocCx2KQorICNlbmRp ZgorIAorLSNkZWZpbmUgTE9BRF9VSU5UMzJfTElUVExFKHApCQkoZ2V0X3UzMl9sZShwKSkKKysj ZGVmaW5lIExPQURfVUlOVDMyX0xJVFRMRShwKQkJKHVtYWNfZ2V0X3UzMl9sZShwKSkKKyAjZGVm aW5lIFNUT1JFX1VJTlQzMl9CSUcocCx2KQkJcHV0X3UzMihwLCB2KQorIAorIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KK2RpZmYgLU51ciBvcGVuc3NoLTEwLjNwMS5vcmlnL3V0aGFzaC5oIG9wZW5zc2gt MTAuM3AxL3V0aGFzaC5oCistLS0gb3BlbnNzaC0xMC4zcDEub3JpZy91dGhhc2guaAkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2gtMTAuM3AxL3V0aGFzaC5o CTIwMjYtMDctMDIgMDA6Mjc6MjkuNzM1ODA3Mjk0ICswMjAwCitAQCAtMCwwICsxLDExNDAgQEAK KysvKgorK0NvcHlyaWdodCAoYykgMjAwMy0yMDIyLCBUcm95IEQuIEhhbnNvbiAgaHR0cHM6Ly90 cm95ZGhhbnNvbi5naXRodWIuaW8vdXRoYXNoLworK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisrCisr UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisrCisrICAgICogUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgICAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCisrCisrVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKytJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKytUTywgVEhFIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKytQQVJUSUNV TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH SFQgT1dORVIKKytPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKytFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisrUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisrUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRgorK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisrTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisrU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrKi8KKysKKysjaWZu ZGVmIFVUSEFTSF9ICisrI2RlZmluZSBVVEhBU0hfSAorKworKyNkZWZpbmUgVVRIQVNIX1ZFUlNJ T04gMi4zLjAKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+ICAgLyogbWVtY21wLCBtZW1zZXQsIHN0 cmxlbiAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBwdHJkaWZmX3QgKi8KKysjaW5jbHVk ZSA8c3RkbGliLmg+ICAgLyogZXhpdCAqLworKworKyNpZiBkZWZpbmVkKEhBU0hfREVGSU5FX09X Tl9TVERJTlQpICYmIEhBU0hfREVGSU5FX09XTl9TVERJTlQKKysvKiBUaGlzIGNvZGVwYXRoIGlz IHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBidXQgSSBwbGFuIHRvIHJlbW92 ZSBpdC4gKi8KKysjd2FybmluZyAiSEFTSF9ERUZJTkVfT1dOX1NURElOVCBpcyBkZXByZWNhdGVk OyBwbGVhc2UgdXNlIEhBU0hfTk9fU1RESU5UIGluc3RlYWQiCisrdHlwZWRlZiB1bnNpZ25lZCBp bnQgdWludDMyX3Q7CisrdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CisrI2VsaWYgZGVm aW5lZChIQVNIX05PX1NURElOVCkgJiYgSEFTSF9OT19TVERJTlQKKysjZWxzZQorKyNpbmNsdWRl IDxzdGRpbnQuaD4gICAvKiB1aW50OF90LCB1aW50MzJfdCAqLworKyNlbmRpZgorKworKy8qIFRo ZXNlIG1hY3JvcyB1c2UgZGVjbHR5cGUgb3IgdGhlIGVhcmxpZXIgX190eXBlb2YgR05VIGV4dGVu c2lvbi4KKysgICBBcyBkZWNsdHlwZSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBuZXdlciBjb21waWxl cnMgKFZTMjAxMCBvciBnY2MgNC4zKworKyAgIHdoZW4gY29tcGlsaW5nIGMrKyBzb3VyY2UpIHRo aXMgY29kZSB1c2VzIHdoYXRldmVyIG1ldGhvZCBpcyBuZWVkZWQKKysgICBvciwgZm9yIFZTMjAw OCB3aGVyZSBuZWl0aGVyIGlzIGF2YWlsYWJsZSwgdXNlcyBjYXN0aW5nIHdvcmthcm91bmRzLiAq LworKyNpZiAhZGVmaW5lZChERUNMVFlQRSkgJiYgIWRlZmluZWQoTk9fREVDTFRZUEUpCisrI2lm IGRlZmluZWQoX01TQ19WRVIpICAgLyogTVMgY29tcGlsZXIgKi8KKysjaWYgX01TQ19WRVIgPj0g MTYwMCAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAgLyogVlMyMDEwIG9yIG5ld2VyIGluIEMrKyBt b2RlICovCisrI2RlZmluZSBERUNMVFlQRSh4KSAoZGVjbHR5cGUoeCkpCisrI2Vsc2UgICAgICAg ICAgICAgICAgICAgLyogVlMyMDA4IG9yIG9sZGVyIChvciBWUzIwMTAgaW4gQyBtb2RlKSAqLwor KyNkZWZpbmUgTk9fREVDTFRZUEUKKysjZW5kaWYKKysjZWxpZiBkZWZpbmVkKF9fTUNTVF9fKSAg LyogRWxicnVzIEMgQ29tcGlsZXIgKi8KKysjZGVmaW5lIERFQ0xUWVBFKHgpIChfX3R5cGVvZih4 KSkKKysjZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX0lDQ0FSTV9fKSB8 fCBkZWZpbmVkKF9fTENDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pCisrI2RlZmluZSBOT19E RUNMVFlQRQorKyNlbHNlICAgICAgICAgICAgICAgICAgIC8qIEdOVSwgU3VuIGFuZCBvdGhlciBj b21waWxlcnMgKi8KKysjZGVmaW5lIERFQ0xUWVBFKHgpIChfX3R5cGVvZih4KSkKKysjZW5kaWYK KysjZW5kaWYKKysKKysjaWZkZWYgTk9fREVDTFRZUEUKKysjZGVmaW5lIERFQ0xUWVBFKHgpCisr I2RlZmluZSBERUNMVFlQRV9BU1NJR04oZHN0LHNyYykgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IGNoYXIgKipfZGFfZHN0ID0gKGNoYXIqKikoJihkc3QpKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAqX2RhX2RzdCA9IChjaGFyKikoc3JjKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30g d2hpbGUgKDApCisrI2Vsc2UKKysjZGVmaW5lIERFQ0xUWVBFX0FTU0lHTihkc3Qsc3JjKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgKGRzdCkgPSBERUNMVFlQRShkc3QpKHNyYyk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgw KQorKyNlbmRpZgorKworKyNpZm5kZWYgdXRoYXNoX21hbGxvYworKyNkZWZpbmUgdXRoYXNoX21h bGxvYyhzeikgbWFsbG9jKHN6KSAgICAgIC8qIG1hbGxvYyBmY24gICAgICAgICAgICAgICAgICAg ICAgKi8KKysjZW5kaWYKKysjaWZuZGVmIHV0aGFzaF9mcmVlCisrI2RlZmluZSB1dGhhc2hfZnJl ZShwdHIsc3opIGZyZWUocHRyKSAgICAgLyogZnJlZSBmY24gICAgICAgICAgICAgICAgICAgICAg ICAqLworKyNlbmRpZgorKyNpZm5kZWYgdXRoYXNoX2J6ZXJvCisrI2RlZmluZSB1dGhhc2hfYnpl cm8oYSxuKSBtZW1zZXQoYSwnXDAnLG4pCisrI2VuZGlmCisrI2lmbmRlZiB1dGhhc2hfc3RybGVu CisrI2RlZmluZSB1dGhhc2hfc3RybGVuKHMpIHN0cmxlbihzKQorKyNlbmRpZgorKworKyNpZm5k ZWYgSEFTSF9GVU5DVElPTgorKyNkZWZpbmUgSEFTSF9GVU5DVElPTihrZXlwdHIsa2V5bGVuLGhh c2h2KSBIQVNIX0pFTihrZXlwdHIsIGtleWxlbiwgaGFzaHYpCisrI2VuZGlmCisrCisrI2lmbmRl ZiBIQVNIX0tFWUNNUAorKyNkZWZpbmUgSEFTSF9LRVlDTVAoYSxiLG4pIG1lbWNtcChhLGIsbikK KysjZW5kaWYKKysKKysjaWZuZGVmIHV0aGFzaF9ub2V4cGFuZF9meWkKKysjZGVmaW5lIHV0aGFz aF9ub2V4cGFuZF9meWkodGJsKSAgICAgICAgICAvKiBjYW4gYmUgZGVmaW5lZCB0byBsb2cgbm9l eHBhbmQgICovCisrI2VuZGlmCisrI2lmbmRlZiB1dGhhc2hfZXhwYW5kX2Z5aQorKyNkZWZpbmUg dXRoYXNoX2V4cGFuZF9meWkodGJsKSAgICAgICAgICAgIC8qIGNhbiBiZSBkZWZpbmVkIHRvIGxv ZyBleHBhbmRzICAgKi8KKysjZW5kaWYKKysKKysjaWZuZGVmIEhBU0hfTk9ORkFUQUxfT09NCisr I2RlZmluZSBIQVNIX05PTkZBVEFMX09PTSAwCisrI2VuZGlmCisrCisrI2lmIEhBU0hfTk9ORkFU QUxfT09NCisrLyogbWFsbG9jIGZhaWx1cmVzIGNhbiBiZSByZWNvdmVyZWQgZnJvbSAqLworKwor KyNpZm5kZWYgdXRoYXNoX25vbmZhdGFsX29vbQorKyNkZWZpbmUgdXRoYXNoX25vbmZhdGFsX29v bShvYmopIGRvIHt9IHdoaWxlICgwKSAgICAvKiBub24tZmF0YWwgT09NIGVycm9yICovCisrI2Vu ZGlmCisrCisrI2RlZmluZSBIQVNIX1JFQ09SRF9PT00ob29tZWQpIGRvIHsgKG9vbWVkKSA9IDE7 IH0gd2hpbGUgKDApCisrI2RlZmluZSBJRl9IQVNIX05PTkZBVEFMX09PTSh4KSB4CisrCisrI2Vs c2UKKysvKiBtYWxsb2MgZmFpbHVyZXMgcmVzdWx0IGluIGxvc3QgbWVtb3J5LCBoYXNoIHRhYmxl cyBhcmUgdW51c2FibGUgKi8KKysKKysjaWZuZGVmIHV0aGFzaF9mYXRhbAorKyNkZWZpbmUgdXRo YXNoX2ZhdGFsKG1zZykgZXhpdCgtMSkgICAgICAgIC8qIGZhdGFsIE9PTSBlcnJvciAqLworKyNl bmRpZgorKworKyNkZWZpbmUgSEFTSF9SRUNPUkRfT09NKG9vbWVkKSB1dGhhc2hfZmF0YWwoIm91 dCBvZiBtZW1vcnkiKQorKyNkZWZpbmUgSUZfSEFTSF9OT05GQVRBTF9PT00oeCkKKysKKysjZW5k aWYKKysKKysvKiBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzICovCisrI2RlZmluZSBIQVNIX0lO SVRJQUxfTlVNX0JVQ0tFVFMgMzJVICAgICAvKiBpbml0aWFsIG51bWJlciBvZiBidWNrZXRzICAg ICAgICAqLworKyNkZWZpbmUgSEFTSF9JTklUSUFMX05VTV9CVUNLRVRTX0xPRzIgNVUgLyogbGcy IG9mIGluaXRpYWwgbnVtYmVyIG9mIGJ1Y2tldHMgKi8KKysjZGVmaW5lIEhBU0hfQktUX0NBUEFD SVRZX1RIUkVTSCAxMFUgICAgIC8qIGV4cGFuZCB3aGVuIGJ1Y2tldCBjb3VudCByZWFjaGVzICov CisrCisrLyogY2FsY3VsYXRlIHRoZSBlbGVtZW50IHdob3NlIGhhc2ggaGFuZGxlIGFkZHJlc3Mg aXMgaGhwICovCisrI2RlZmluZSBFTE1UX0ZST01fSEgodGJsLGhocCkgKCh2b2lkKikoKChjaGFy KikoaGhwKSkgLSAoKHRibCktPmhobykpKQorKy8qIGNhbGN1bGF0ZSB0aGUgaGFzaCBoYW5kbGUg ZnJvbSBlbGVtZW50IGFkZHJlc3MgZWxwICovCisrI2RlZmluZSBISF9GUk9NX0VMTVQodGJsLGVs cCkgKChVVF9oYXNoX2hhbmRsZSopKHZvaWQqKSgoKGNoYXIqKShlbHApKSArICgodGJsKS0+aGhv KSkpCisrCisrI2RlZmluZSBIQVNIX1JPTExCQUNLX0JLVChoaCwgaGVhZCwgaXRlbXB0cmhoKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqX2hkX2hoX2l0ZW0gPSAoaXRlbXB0cmho KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaGRfYmt0OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgSEFTSF9UT19CS1QoX2hkX2hoX2l0ZW0tPmhhc2h2LCAoaGVhZCktPmhoLnRibC0+ bnVtX2J1Y2tldHMsIF9oZF9ia3QpOyAgICAgICAgIFwKKysgIChoZWFkKS0+aGgudGJsLT5idWNr ZXRzW19oZF9ia3RdLmNvdW50Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICBfaGRfaGhfaXRlbS0+aGhfbmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgX2hkX2hoX2l0ZW0tPmhoX3ByZXYg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9WQUxVRShrZXlwdHIsa2V5bGVuLGhh c2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0ZVTkNUSU9OKGtleXB0ciwga2V5bGVuLCBoYXNo dik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUg KDApCisrCisrI2RlZmluZSBIQVNIX0ZJTkRfQllIQVNIVkFMVUUoaGgsaGVhZCxrZXlwdHIsa2V5 bGVuLGhhc2h2YWwsb3V0KSAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIChvdXQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBpZiAoaGVhZCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICB1bnNpZ25lZCBfaGZfYmt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9UT19CS1QoaGFzaHZh bCwgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzLCBfaGZfYmt0KTsgICAgICAgICAgICAgICAg ICBcCisrICAgIGlmIChIQVNIX0JMT09NX1RFU1QoKGhlYWQpLT5oaC50YmwsIGhhc2h2YWwpICE9 IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEhBU0hfRklORF9JTl9CS1Qo KGhlYWQpLT5oaC50YmwsIGhoLCAoaGVhZCktPmhoLnRibC0+YnVja2V0c1sgX2hmX2JrdCBdLCBr ZXlwdHIsIGtleWxlbiwgaGFzaHZhbCwgb3V0KTsgXAorKyAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5l IEhBU0hfRklORChoaCxoZWFkLGtleXB0cixrZXlsZW4sb3V0KSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKG91dCkg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgIGlmIChoZWFkKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHVuc2ln bmVkIF9oZl9oYXNodjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX1ZBTFVFKGtleXB0ciwga2V5bGVuLCBfaGZfaGFz aHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9G SU5EX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbiwgX2hmX2hhc2h2LCBvdXQp OyAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDAp CisrCisrI2lmZGVmIEhBU0hfQkxPT00KKysjZGVmaW5lIEhBU0hfQkxPT01fQklUTEVOICgxVUwg PDwgSEFTSF9CTE9PTSkKKysjZGVmaW5lIEhBU0hfQkxPT01fQllURUxFTiAoSEFTSF9CTE9PTV9C SVRMRU4vOFVMKSArICgoKEhBU0hfQkxPT01fQklUTEVOJThVTCkhPTBVTCkgPyAxVUwgOiAwVUwp CisrI2RlZmluZSBIQVNIX0JMT09NX01BS0UodGJsLG9vbWVkKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICh0YmwpLT5ibG9vbV9uYml0cyA9IEhBU0hfQkxPT007ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAodGJsKS0+Ymxvb21fYnYgPSAodWludDhf dCopdXRoYXNoX21hbGxvYyhIQVNIX0JMT09NX0JZVEVMRU4pOyAgICAgICAgICAgICAgICAgXAor KyAgaWYgKCEodGJsKS0+Ymxvb21fYnYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9SRUNPUkRfT09NKG9vbWVkKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1dGhhc2hfYnplcm8oKHRibCktPmJsb29t X2J2LCBIQVNIX0JMT09NX0JZVEVMRU4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgKHRibCktPmJsb29tX3NpZyA9IEhBU0hfQkxPT01fU0lHTkFUVVJFOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30g d2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX0JMT09NX0ZSRUUodGJsKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIHV0aGFzaF9mcmVlKCh0YmwpLT5ibG9vbV9idiwgSEFTSF9CTE9PTV9C WVRFTEVOKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysK KysjZGVmaW5lIEhBU0hfQkxPT01fQklUU0VUKGJ2LGlkeCkgKGJ2WyhpZHgpLzhVXSB8PSAoMVUg PDwgKChpZHgpJThVKSkpCisrI2RlZmluZSBIQVNIX0JMT09NX0JJVFRFU1QoYnYsaWR4KSAoYnZb KGlkeCkvOFVdICYgKDFVIDw8ICgoaWR4KSU4VSkpKQorKworKyNkZWZpbmUgSEFTSF9CTE9PTV9B REQodGJsLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIEhBU0hfQkxPT01fQklUU0VUKCh0YmwpLT5ibG9vbV9idiwgKChoYXNodikgJiAo dWludDMyX3QpKCgxVUwgPDwgKHRibCktPmJsb29tX25iaXRzKSAtIDFVKSkpCisrCisrI2RlZmlu ZSBIQVNIX0JMT09NX1RFU1QodGJsLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9CTE9PTV9CSVRURVNUKCh0YmwpLT5ibG9vbV9i diwgKChoYXNodikgJiAodWludDMyX3QpKCgxVUwgPDwgKHRibCktPmJsb29tX25iaXRzKSAtIDFV KSkpCisrCisrI2Vsc2UKKysjZGVmaW5lIEhBU0hfQkxPT01fTUFLRSh0Ymwsb29tZWQpCisrI2Rl ZmluZSBIQVNIX0JMT09NX0ZSRUUodGJsKQorKyNkZWZpbmUgSEFTSF9CTE9PTV9BREQodGJsLGhh c2h2KQorKyNkZWZpbmUgSEFTSF9CTE9PTV9URVNUKHRibCxoYXNodikgKDEpCisrI2RlZmluZSBI QVNIX0JMT09NX0JZVEVMRU4gMFUKKysjZW5kaWYKKysKKysjZGVmaW5lIEhBU0hfTUFLRV9UQUJM RShoaCxoZWFkLG9vbWVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGhlYWQpLT5oaC50YmwgPSAoVVRf aGFzaF90YWJsZSopdXRoYXNoX21hbGxvYyhzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAg IFwKKysgIGlmICghKGhlYWQpLT5oaC50YmwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfUkVDT1JEX09PTShvb21l ZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdXRoYXNoX2J6ZXJvKChoZWFkKS0+ aGgudGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIChoZWFkKS0+aGgudGJsLT50YWlsID0gJigoaGVhZCktPmhoKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoaGVhZCktPmhoLnRibC0+bnVtX2J1 Y2tldHMgPSBIQVNIX0lOSVRJQUxfTlVNX0JVQ0tFVFM7ICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgKGhlYWQpLT5oaC50YmwtPmxvZzJfbnVtX2J1Y2tldHMgPSBIQVNIX0lOSVRJQUxfTlVN X0JVQ0tFVFNfTE9HMjsgICAgICAgICAgICBcCisrICAgIChoZWFkKS0+aGgudGJsLT5oaG8gPSAo Y2hhciopKCYoaGVhZCktPmhoKSAtIChjaGFyKikoaGVhZCk7ICAgICAgICAgICAgICAgICAgXAor KyAgICAoaGVhZCktPmhoLnRibC0+YnVja2V0cyA9IChVVF9oYXNoX2J1Y2tldCopdXRoYXNoX21h bGxvYyggICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEhBU0hfSU5JVElBTF9OVU1fQlVD S0VUUyAqIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQpKTsgICAgICAgICAgICAgICBcCisr ICAgIChoZWFkKS0+aGgudGJsLT5zaWduYXR1cmUgPSBIQVNIX1NJR05BVFVSRTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoIShoZWFkKS0+aGgudGJsLT5idWNr ZXRzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICBIQVNIX1JFQ09SRF9PT00ob29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgdXRoYXNoX2ZyZWUoKGhlYWQpLT5oaC50 YmwsIHNpemVvZihVVF9oYXNoX3RhYmxlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB1dGhhc2hfYnplcm8oKGhlYWQpLT5oaC50 YmwtPmJ1Y2tldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgIEhBU0hfSU5JVElBTF9OVU1fQlVDS0VUUyAqIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9i dWNrZXQpKTsgICAgICAgICAgICAgXAorKyAgICAgIEhBU0hfQkxPT01fTUFLRSgoaGVhZCktPmho LnRibCwgb29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICBJRl9IQVNIX05PTkZBVEFMX09PTSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBpZiAob29tZWQpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICB1dGhhc2hfZnJlZSgoaGVhZCktPmhoLnRibC0+YnVja2V0cywgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgIEhBU0hfSU5JVElBTF9OVU1fQlVD S0VUUypzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSk7ICAgICAgICAgICBcCisrICAgICAg ICAgIHV0aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLCBzaXplb2YoVVRfaGFzaF90YWJsZSkpOyAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9SRVBMQUNF X0JZSEFTSFZBTFVFX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGhhc2h2YWws YWRkLHJlcGxhY2VkLGNtcGZjbikgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChy ZXBsYWNlZCkgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0ZJTkRfQllIQVNIVkFMVUUoaGgsIGhlYWQs ICYoKGFkZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgcmVwbGFjZWQpOyBcCisr ICBpZiAocmVwbGFjZWQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX0RFTEVURShoaCwgaGVhZCwgcmVw bGFjZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUVf SU5PUkRFUihoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBoYXNodmFs LCBhZGQsIGNtcGZjbik7IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9SRVBMQUNF X0JZSEFTSFZBTFVFKGhoLGhlYWQsZmllbGRuYW1lLGtleWxlbl9pbixoYXNodmFsLGFkZCxyZXBs YWNlZCkgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChyZXBsYWNlZCkgPSBOVUxM OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICBIQVNIX0ZJTkRfQllIQVNIVkFMVUUoaGgsIGhlYWQsICYoKGFkZCktPmZpZWxk bmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgcmVwbGFjZWQpOyBcCisrICBpZiAocmVwbGFjZWQp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICBIQVNIX0RFTEVURShoaCwgaGVhZCwgcmVwbGFjZWQpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUUoaGgsIGhlYWQsICYoKGFk ZCktPmZpZWxkbmFtZSksIGtleWxlbl9pbiwgaGFzaHZhbCwgYWRkKTsgXAorK30gd2hpbGUgKDAp CisrCisrI2RlZmluZSBIQVNIX1JFUExBQ0UoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVuX2luLGFk ZCxyZXBsYWNlZCkgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIHVuc2lnbmVkIF9ocl9oYXNodjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX1ZBTFVFKCYoKGFkZCktPmZp ZWxkbmFtZSksIGtleWxlbl9pbiwgX2hyX2hhc2h2KTsgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgSEFTSF9SRVBMQUNFX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCBmaWVsZG5hbWUsIGtleWxl bl9pbiwgX2hyX2hhc2h2LCBhZGQsIHJlcGxhY2VkKTsgXAorK30gd2hpbGUgKDApCisrCisrI2Rl ZmluZSBIQVNIX1JFUExBQ0VfSU5PUkRFUihoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4sYWRk LHJlcGxhY2VkLGNtcGZjbikgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHVu c2lnbmVkIF9ocl9oYXNodjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX1ZBTFVFKCYoKGFkZCktPmZpZWxkbmFtZSks IGtleWxlbl9pbiwgX2hyX2hhc2h2KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFT SF9SRVBMQUNFX0JZSEFTSFZBTFVFX0lOT1JERVIoaGgsIGhlYWQsIGZpZWxkbmFtZSwga2V5bGVu X2luLCBfaHJfaGFzaHYsIGFkZCwgcmVwbGFjZWQsIGNtcGZjbik7IFwKKyt9IHdoaWxlICgwKQor KworKyNkZWZpbmUgSEFTSF9BUFBFTkRfTElTVChoaCwgaGVhZCwgYWRkKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAoYWRkKS0+aGgubmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGFkZCktPmhoLnByZXYgPSBFTE1UX0ZS T01fSEgoKGhlYWQpLT5oaC50YmwsIChoZWFkKS0+aGgudGJsLT50YWlsKTsgICAgICAgICAgIFwK KysgIChoZWFkKS0+aGgudGJsLT50YWlsLT5uZXh0ID0gKGFkZCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoaGVhZCktPmhoLnRibC0+dGFpbCA9ICYo KGFkZCktPmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor K30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX0FLQklfSU5ORVJfTE9PUChoaCxoZWFkLGFk ZCxjbXBmY24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChjbXBm Y24oREVDTFRZUEUoaGVhZCkoX2hzX2l0ZXIpLCBhZGQpID4gMCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICB9IHdoaWxlICgoX2hzX2l0ZXIgPSBISF9GUk9NX0VMTVQoKGhlYWQp LT5oaC50YmwsIF9oc19pdGVyKS0+bmV4dCkpOyAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisr CisrI2lmZGVmIE5PX0RFQ0xUWVBFCisrI3VuZGVmIEhBU0hfQUtCSV9JTk5FUl9MT09QCisrI2Rl ZmluZSBIQVNIX0FLQklfSU5ORVJfTE9PUChoaCxoZWFkLGFkZCxjbXBmY24pICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGNo YXIgKl9oc19zYXZlZF9oZWFkID0gKGNoYXIqKShoZWFkKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBE RUNMVFlQRV9BU1NJR04oaGVhZCwgX2hzX2l0ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKGNtcGZjbihoZWFkLCBhZGQpID4gMCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg REVDTFRZUEVfQVNTSUdOKGhlYWQsIF9oc19zYXZlZF9oZWFkKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIERFQ0xUWVBFX0FTU0lHTihoZWFkLCBfaHNfc2F2ZWRf aGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSB3aGls ZSAoKF9oc19pdGVyID0gSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfaXRlciktPm5l eHQpKTsgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKyNlbmRpZgorKworKyNpZiBIQVNIX05P TkZBVEFMX09PTQorKworKyNkZWZpbmUgSEFTSF9BRERfVE9fVEFCTEUoaGgsaGVhZCxrZXlwdHIs a2V5bGVuX2luLGhhc2h2YWwsYWRkLG9vbWVkKSAgICAgICAgICAgIFwKKytkbyB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICBpZiAoIShvb21lZCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1bnNpZ25lZCBf aGFfYmt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcysrOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfVE9fQktU KGhhc2h2YWwsIChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hhX2JrdCk7ICAgICAgICAg ICAgICAgICAgXAorKyAgICBIQVNIX0FERF9UT19CS1QoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNb X2hhX2JrdF0sIGhoLCAmKGFkZCktPmhoLCBvb21lZCk7ICAgIFwKKysgICAgaWYgKG9vbWVkKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgSEFTSF9ST0xMQkFDS19CS1QoaGgsIGhlYWQsICYoYWRkKS0+aGgp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEhBU0hfREVMRVRF X0hIKGhoLCBoZWFkLCAmKGFkZCktPmhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAoYWRkKS0+aGgudGJsID0gTlVMTDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgdXRoYXNoX25vbmZh dGFsX29vbShhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBIQVNIX0JMT09NX0FE RCgoaGVhZCktPmhoLnRibCwgaGFzaHZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgSEFTSF9FTUlUX0tFWShoaCwgaGVhZCwga2V5cHRyLCBrZXlsZW5faW4p OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChhZGQpLT5oaC50YmwgPSBO VUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICB1dGhhc2hfbm9uZmF0YWxfb29tKGFkZCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrfSB3aGlsZSAoMCkKKysKKysjZWxzZQorKworKyNkZWZpbmUgSEFTSF9BRERfVE9fVEFC TEUoaGgsaGVhZCxrZXlwdHIsa2V5bGVuX2luLGhhc2h2YWwsYWRkLG9vbWVkKSAgICAgICAgICAg IFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaGFfYmt0OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcysrOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfVE9fQktUKGhhc2h2YWwsICho ZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cywgX2hhX2JrdCk7ICAgICAgICAgICAgICAgICAgICBc CisrICBIQVNIX0FERF9UT19CS1QoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHNbX2hhX2JrdF0sIGho LCAmKGFkZCktPmhoLCBvb21lZCk7ICAgICAgXAorKyAgSEFTSF9CTE9PTV9BREQoKGhlYWQpLT5o aC50YmwsIGhhc2h2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIEhBU0hfRU1JVF9LRVkoaGgsIGhlYWQsIGtleXB0ciwga2V5bGVuX2luKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZW5kaWYKKysK KysKKysjZGVmaW5lIEhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRV9JTk9SREVSKGhoLGhlYWQs a2V5cHRyLGtleWxlbl9pbixoYXNodmFsLGFkZCxjbXBmY24pIFwKKytkbyB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBJRl9IQVNIX05PTkZBVEFMX09PTSggaW50IF9oYV9vb21lZCA9IDA7ICkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGFkZCktPmhoLmhhc2h2 ID0gKGhhc2h2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIChhZGQpLT5oaC5rZXkgPSAoY2hhciopIChrZXlwdHIpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAoYWRkKS0+aGgua2V5bGVu ID0gKHVuc2lnbmVkKSAoa2V5bGVuX2luKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgaWYgKCEoaGVhZCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGFkZCktPmhoLm5leHQg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIChhZGQpLT5oaC5wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX01BS0VfVEFCTEUo aGgsIGFkZCwgX2hhX29vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGlmICghX2hhX29vbWVkKSB7ICkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKGhlYWQpID0gKGFkZCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICBJRl9IQVNIX05PTkZBVEFMX09PTSggfSApICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgIHZvaWQgKl9oc19pdGVyID0gKGhlYWQpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoYWRkKS0+aGgudGJsID0gKGhl YWQpLT5oaC50Ymw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgSEFTSF9BS0JJX0lOTkVSX0xPT1AoaGgsIGhlYWQsIGFkZCwgY21wZmNuKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChfaHNfaXRlcikgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgIChhZGQpLT5oaC5uZXh0ID0gX2hzX2l0ZXI7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoKChhZGQpLT5oaC5wcmV2 ID0gSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfaXRlciktPnByZXYpKSB7ICAgICBc CisrICAgICAgICBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIChhZGQpLT5oaC5wcmV2KS0+ bmV4dCA9IChhZGQpOyAgICAgICAgICAgICAgXAorKyAgICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgIChoZWFkKSA9IChhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX2l0ZXIpLT5wcmV2ID0gKGFk ZCk7ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgSEFTSF9BUFBFTkRfTElTVChoaCwgaGVhZCwgYWRkKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0FERF9UT19UQUJMRShoaCwgaGVhZCwg a2V5cHRyLCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCwgX2hhX29vbWVkKTsgICAgICAgXAorKyAg SEFTSF9GU0NLKGhoLCBoZWFkLCAiSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFX0lOT1JERVIi KTsgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9B RERfS0VZUFRSX0lOT1JERVIoaGgsaGVhZCxrZXlwdHIsa2V5bGVuX2luLGFkZCxjbXBmY24pICAg ICAgICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaHNf aGFzaHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgSEFTSF9WQUxVRShrZXlwdHIsIGtleWxlbl9pbiwgX2hzX2hhc2h2KTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfQUREX0tFWVBU Ul9CWUhBU0hWQUxVRV9JTk9SREVSKGhoLCBoZWFkLCBrZXlwdHIsIGtleWxlbl9pbiwgX2hzX2hh c2h2LCBhZGQsIGNtcGZjbik7IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9BRERf QllIQVNIVkFMVUVfSU5PUkRFUihoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4saGFzaHZhbCxh ZGQsY21wZmNuKSBcCisrICBIQVNIX0FERF9LRVlQVFJfQllIQVNIVkFMVUVfSU5PUkRFUihoaCwg aGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBoYXNodmFsLCBhZGQsIGNtcGZj bikKKysKKysjZGVmaW5lIEhBU0hfQUREX0lOT1JERVIoaGgsaGVhZCxmaWVsZG5hbWUsa2V5bGVu X2luLGFkZCxjbXBmY24pICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0FERF9LRVlQVFJfSU5P UkRFUihoaCwgaGVhZCwgJigoYWRkKS0+ZmllbGRuYW1lKSwga2V5bGVuX2luLCBhZGQsIGNtcGZj bikKKysKKysjZGVmaW5lIEhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRShoaCxoZWFkLGtleXB0 cixrZXlsZW5faW4saGFzaHZhbCxhZGQpICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgSUZfSEFTSF9OT05GQVRBTF9PT00oIGludCBfaGFfb29tZWQgPSAwOyApICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChhZGQpLT5oaC5oYXNodiA9ICho YXNodmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAoYWRkKS0+aGgua2V5ID0gKGNvbnN0IHZvaWQqKSAoa2V5cHRyKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGFkZCktPmhoLmtleWxlbiA9ICh1 bnNpZ25lZCkgKGtleWxlbl9pbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIGlmICghKGhlYWQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIChhZGQpLT5oaC5uZXh0ID0gTlVM TDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAoYWRkKS0+aGgucHJldiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9NQUtFX1RBQkxFKGhoLCBh ZGQsIF9oYV9vb21lZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIElGX0hBU0hfTk9ORkFUQUxfT09NKCBpZiAoIV9oYV9vb21lZCkgeyApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIChoZWFkKSA9IChhZGQpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oIH0gKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAoYWRkKS0+aGgudGJsID0gKGhlYWQpLT5oaC50Ymw7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9BUFBFTkRfTElTVChoaCwgaGVh ZCwgYWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgSEFTSF9BRERfVE9fVEFCTEUoaGgsIGhlYWQs IGtleXB0ciwga2V5bGVuX2luLCBoYXNodmFsLCBhZGQsIF9oYV9vb21lZCk7ICAgICAgIFwKKysg IEhBU0hfRlNDSyhoaCwgaGVhZCwgIkhBU0hfQUREX0tFWVBUUl9CWUhBU0hWQUxVRSIpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hf QUREX0tFWVBUUihoaCxoZWFkLGtleXB0cixrZXlsZW5faW4sYWRkKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2hh X2hhc2h2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIEhBU0hfVkFMVUUoa2V5cHRyLCBrZXlsZW5faW4sIF9oYV9oYXNodik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBIQVNIX0FERF9LRVlQ VFJfQllIQVNIVkFMVUUoaGgsIGhlYWQsIGtleXB0ciwga2V5bGVuX2luLCBfaGFfaGFzaHYsIGFk ZCk7ICAgICAgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBIQVNIX0FERF9CWUhBU0hWQUxV RShoaCxoZWFkLGZpZWxkbmFtZSxrZXlsZW5faW4saGFzaHZhbCxhZGQpICAgICAgICAgICAgXAor KyAgSEFTSF9BRERfS0VZUFRSX0JZSEFTSFZBTFVFKGhoLCBoZWFkLCAmKChhZGQpLT5maWVsZG5h bWUpLCBrZXlsZW5faW4sIGhhc2h2YWwsIGFkZCkKKysKKysjZGVmaW5lIEhBU0hfQUREKGhoLGhl YWQsZmllbGRuYW1lLGtleWxlbl9pbixhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICBIQVNIX0FERF9LRVlQVFIoaGgsIGhlYWQsICYoKGFkZCktPmZpZWxkbmFtZSksIGtl eWxlbl9pbiwgYWRkKQorKworKyNkZWZpbmUgSEFTSF9UT19CS1QoaGFzaHYsbnVtX2JrdHMsYmt0 KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICBia3QgPSAoKGhhc2h2KSAmICgobnVtX2JrdHMpIC0gMVUpKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDAp CisrCisrLyogZGVsZXRlICJkZWxwdHIiIGZyb20gdGhlIGhhc2ggdGFibGUuCisrICogInRoZSB1 c3VhbCIgcGF0Y2gtdXAgcHJvY2VzcyBmb3IgdGhlIGFwcC1vcmRlciBkb3VibHktbGlua2VkLWxp c3QuCisrICogVGhlIHVzZSBvZiBfaGRfaGhfZGVsIGJlbG93IGRlc2VydmVzIHNwZWNpYWwgZXhw bGFuYXRpb24uCisrICogVGhlc2UgdXNlZCB0byBiZSBleHByZXNzZWQgdXNpbmcgKGRlbHB0cikg YnV0IHRoYXQgbGVkIHRvIGEgYnVnCisrICogaWYgc29tZW9uZSB1c2VkIHRoZSBzYW1lIHN5bWJv bCBmb3IgdGhlIGhlYWQgYW5kIGRlbGV0ZWUsIGxpa2UKKysgKiAgSEFTSF9ERUxFVEUoaGgsdXNl cnMsdXNlcnMpOworKyAqIFdlIHdhbnQgdGhhdCB0byB3b3JrLCBidXQgYnkgY2hhbmdpbmcgdGhl IGhlYWQgKHVzZXJzKSBiZWxvdworKyAqIHdlIHdlcmUgZm9yZmVpdGluZyBvdXIgYWJpbGl0eSB0 byBmdXJ0aGVyIHJlZmVyIHRvIHRoZSBkZWxldGVlICh1c2VycykKKysgKiBpbiB0aGUgcGF0Y2gt dXAgcHJvY2Vzcy4gU29sdXRpb246IHVzZSBzY3JhdGNoIHNwYWNlIHRvCisrICogY29weSB0aGUg ZGVsZXRlZSBwb2ludGVyLCB0aGVuIHRoZSBsYXR0ZXIgcmVmZXJlbmNlcyBhcmUgdmlhIHRoYXQK KysgKiBzY3JhdGNoIHBvaW50ZXIgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGUgcmVwb2ludGVkICh1 c2Vycykgc3ltYm9sLgorKyAqLworKyNkZWZpbmUgSEFTSF9ERUxFVEUoaGgsaGVhZCxkZWxwdHIp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFT SF9ERUxFVEVfSEgoaGgsIGhlYWQsICYoZGVscHRyKS0+aGgpCisrCisrI2RlZmluZSBIQVNIX0RF TEVURV9ISChoaCxoZWFkLGRlbHB0cmhoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGNvbnN0IHN0cnVjdCBV VF9oYXNoX2hhbmRsZSAqX2hkX2hoX2RlbCA9IChkZWxwdHJoaCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBpZiAoKF9oZF9oaF9kZWwtPnByZXYgPT0gTlVMTCkgJiYgKF9oZF9oaF9k ZWwtPm5leHQgPT0gTlVMTCkpIHsgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX0JMT09NX0ZS RUUoKGhlYWQpLT5oaC50YmwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgdXRoYXNoX2ZyZWUoKGhlYWQpLT5oaC50YmwtPmJ1Y2tldHMsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICho ZWFkKS0+aGgudGJsLT5udW1fYnVja2V0cyAqIHNpemVvZihzdHJ1Y3QgVVRfaGFzaF9idWNrZXQp KTsgICAgXAorKyAgICB1dGhhc2hfZnJlZSgoaGVhZCktPmhoLnRibCwgc2l6ZW9mKFVUX2hhc2hf dGFibGUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKGhlYWQpID0gTlVMTDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1bnNpZ25lZCBfaGRfYmt0 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgaWYgKF9oZF9oaF9kZWwgPT0gKGhlYWQpLT5oaC50YmwtPnRhaWwpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKGhlYWQpLT5oaC50Ymwt PnRhaWwgPSBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oZF9oaF9kZWwtPnByZXYpOyAg ICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKF9oZF9oaF9kZWwtPnBy ZXYgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaGRfaGhfZGVsLT5wcmV2 KS0+bmV4dCA9IF9oZF9oaF9kZWwtPm5leHQ7ICAgXAorKyAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICBERUNMVFlQRV9BU1NJR04oaGVhZCwgX2hkX2hoX2RlbC0+bmV4dCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICBpZiAoX2hkX2hoX2RlbC0+bmV4dCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBISF9GUk9NX0VMTVQoKGhlYWQp LT5oaC50YmwsIF9oZF9oaF9kZWwtPm5leHQpLT5wcmV2ID0gX2hkX2hoX2RlbC0+cHJldjsgICBc CisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX1RPX0JLVChfaGRfaGhfZGVs LT5oYXNodiwgKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzLCBfaGRfYmt0KTsgICAgICAgIFwK KysgICAgSEFTSF9ERUxfSU5fQktUKChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19oZF9ia3RdLCBf aGRfaGhfZGVsKTsgICAgICAgICAgICAgICBcCisrICAgIChoZWFkKS0+aGgudGJsLT5udW1faXRl bXMtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hfRlNDSyhoaCwgaGVhZCwgIkhBU0hf REVMRVRFX0hIIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr fSB3aGlsZSAoMCkKKysKKysvKiBjb252ZW5pZW5jZSBmb3JtcyBvZiBIQVNIX0ZJTkQvSEFTSF9B REQvSEFTSF9ERUwgKi8KKysjZGVmaW5lIEhBU0hfRklORF9TVFIoaGVhZCxmaW5kc3RyLG91dCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICB1bnNpZ25lZCBfdXRoYXNoX2hmc3RyX2tleWxlbiA9ICh1bnNp Z25lZCl1dGhhc2hfc3RybGVuKGZpbmRzdHIpOyAgICAgICAgICAgIFwKKysgICAgSEFTSF9GSU5E KGhoLCBoZWFkLCBmaW5kc3RyLCBfdXRoYXNoX2hmc3RyX2tleWxlbiwgb3V0KTsgICAgICAgICAg ICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysjZGVmaW5lIEhBU0hfQUREX1NUUihoZWFkLHN0 cmZpZWxkLGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1bnNpZ25lZCBfdXRoYXNoX2hhc3RyX2tl eWxlbiA9ICh1bnNpZ25lZCl1dGhhc2hfc3RybGVuKChhZGQpLT5zdHJmaWVsZCk7ICAgIFwKKysg ICAgSEFTSF9BREQoaGgsIGhlYWQsIHN0cmZpZWxkWzBdLCBfdXRoYXNoX2hhc3RyX2tleWxlbiwg YWRkKTsgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysjZGVmaW5lIEhBU0hfUkVQ TEFDRV9TVFIoaGVhZCxzdHJmaWVsZCxhZGQscmVwbGFjZWQpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1bnNpZ25lZCBfdXRo YXNoX2hyc3RyX2tleWxlbiA9ICh1bnNpZ25lZCl1dGhhc2hfc3RybGVuKChhZGQpLT5zdHJmaWVs ZCk7ICAgIFwKKysgICAgSEFTSF9SRVBMQUNFKGhoLCBoZWFkLCBzdHJmaWVsZFswXSwgX3V0aGFz aF9ocnN0cl9rZXlsZW4sIGFkZCwgcmVwbGFjZWQpOyAgICBcCisrfSB3aGlsZSAoMCkKKysjZGVm aW5lIEhBU0hfRklORF9JTlQoaGVhZCxmaW5kaW50LG91dCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfRklORChoaCxoZWFkLGZpbmRpbnQsc2l6 ZW9mKGludCksb3V0KQorKyNkZWZpbmUgSEFTSF9BRERfSU5UKGhlYWQsaW50ZmllbGQsYWRkKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9BREQo aGgsaGVhZCxpbnRmaWVsZCxzaXplb2YoaW50KSxhZGQpCisrI2RlZmluZSBIQVNIX1JFUExBQ0Vf SU5UKGhlYWQsaW50ZmllbGQsYWRkLHJlcGxhY2VkKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICBIQVNIX1JFUExBQ0UoaGgsaGVhZCxpbnRmaWVsZCxzaXplb2YoaW50KSxhZGQs cmVwbGFjZWQpCisrI2RlZmluZSBIQVNIX0ZJTkRfUFRSKGhlYWQsZmluZHB0cixvdXQpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX0ZJTkQoaGgs aGVhZCxmaW5kcHRyLHNpemVvZih2b2lkICopLG91dCkKKysjZGVmaW5lIEhBU0hfQUREX1BUUiho ZWFkLHB0cmZpZWxkLGFkZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgIEhBU0hfQUREKGhoLGhlYWQscHRyZmllbGQsc2l6ZW9mKHZvaWQgKiksYWRkKQor KyNkZWZpbmUgSEFTSF9SRVBMQUNFX1BUUihoZWFkLHB0cmZpZWxkLGFkZCxyZXBsYWNlZCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9SRVBMQUNFKGhoLGhlYWQscHRy ZmllbGQsc2l6ZW9mKHZvaWQgKiksYWRkLHJlcGxhY2VkKQorKyNkZWZpbmUgSEFTSF9ERUwoaGVh ZCxkZWxwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgSEFTSF9ERUxFVEUoaGgsaGVhZCxkZWxwdHIpCisrCisrLyogSEFTSF9GU0NL IGNoZWNrcyBoYXNoIGludGVncml0eSBvbiBldmVyeSBhZGQvZGVsZXRlIHdoZW4gSEFTSF9ERUJV RyBpcyBkZWZpbmVkLgorKyAqIFRoaXMgaXMgZm9yIHV0aGFzaCBkZXZlbG9wZXIgb25seTsgaXQg Y29tcGlsZXMgYXdheSBpZiBIQVNIX0RFQlVHIGlzbid0IGRlZmluZWQuCisrICovCisrI2lmZGVm IEhBU0hfREVCVUcKKysjaW5jbHVkZSA8c3RkaW8uaD4gICAvKiBmcHJpbnRmLCBzdGRlcnIgKi8K KysjZGVmaW5lIEhBU0hfT09QUyguLi4pIGRvIHsgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19f KTsgZXhpdCgtMSk7IH0gd2hpbGUgKDApCisrI2RlZmluZSBIQVNIX0ZTQ0soaGgsaGVhZCx3aGVy ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2Rv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHN0cnVjdCBVVF9oYXNoX2hhbmRsZSAqX3RoaDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBp ZiAoaGVhZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1bnNpZ25lZCBfYmt0X2k7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg dW5zaWduZWQgX2NvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIGNoYXIgKl9wcmV2OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBm b3IgKF9ia3RfaSA9IDA7IF9ia3RfaSA8IChoZWFkKS0+aGgudGJsLT5udW1fYnVja2V0czsgKytf Ymt0X2kpIHsgICAgICAgICAgIFwKKysgICAgICB1bnNpZ25lZCBfYmt0X2NvdW50ID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg X3RoaCA9IChoZWFkKS0+aGgudGJsLT5idWNrZXRzW19ia3RfaV0uaGhfaGVhZDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB3 aGlsZSAoX3RoaCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICBpZiAoX3ByZXYgIT0gKGNoYXIqKShfdGhoLT5o aF9wcmV2KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg ICBIQVNIX09PUFMoIiVzOiBpbnZhbGlkIGhoX3ByZXYgJXAsIGFjdHVhbCAlcFxuIiwgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICh3aGVyZSksICh2b2lkKilfdGhoLT5o aF9wcmV2LCAodm9pZCopX3ByZXYpOyAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2JrdF9jb3VudCsrOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9w cmV2ID0gKGNoYXIqKShfdGhoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICBfdGhoID0gX3RoaC0+aGhfbmV4dDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICBfY291bnQgKz0gX2JrdF9jb3VudDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKCho ZWFkKS0+aGgudGJsLT5idWNrZXRzW19ia3RfaV0uY291bnQgIT0gIF9ia3RfY291bnQpIHsgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgSEFTSF9PT1BTKCIlczogaW52YWxpZCBidWNrZXQgY291 bnQgJXUsIGFjdHVhbCAldVxuIiwgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAo d2hlcmUpLCAoaGVhZCktPmhoLnRibC0+YnVja2V0c1tfYmt0X2ldLmNvdW50LCBfYmt0X2NvdW50 KTsgICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgaWYgKF9jb3VudCAhPSAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1z KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgSEFTSF9PT1BT KCIlczogaW52YWxpZCBoaCBpdGVtIGNvdW50ICV1LCBhY3R1YWwgJXVcbiIsICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgICAod2hlcmUpLCAoaGVhZCktPmhoLnRibC0+bnVtX2l0ZW1z LCBfY291bnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIF9jb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfcHJldiA9IE5VTEw7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgX3RoaCA9ICAmKGhlYWQpLT5oaDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHdoaWxlIChfdGhoKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgIF9jb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBpZiAoX3ByZXYgIT0g KGNoYXIqKV90aGgtPnByZXYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgICBIQVNIX09PUFMoIiVzOiBpbnZhbGlkIHByZXYgJXAsIGFjdHVhbCAl cFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICh3aGVyZSks ICh2b2lkKilfdGhoLT5wcmV2LCAodm9pZCopX3ByZXYpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX3ByZXYgPSAoY2hhciop RUxNVF9GUk9NX0hIKChoZWFkKS0+aGgudGJsLCBfdGhoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgIF90aGggPSAoX3RoaC0+bmV4dCA/IEhIX0ZST01fRUxNVCgoaGVhZCktPmho LnRibCwgX3RoaC0+bmV4dCkgOiBOVUxMKTsgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgIGlmIChfY291bnQgIT0gKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcykgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEhBU0hfT09QUygiJXM6IGlu dmFsaWQgYXBwIGl0ZW0gY291bnQgJXUsIGFjdHVhbCAldVxuIiwgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgICAgKHdoZXJlKSwgKGhlYWQpLT5oaC50YmwtPm51bV9pdGVtcywgX2NvdW50 KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKyNlbHNlCisrI2Rl ZmluZSBIQVNIX0ZTQ0soaGgsaGVhZCx3aGVyZSkKKysjZW5kaWYKKysKKysvKiBXaGVuIGNvbXBp bGVkIHdpdGggLURIQVNIX0VNSVRfS0VZUywgbGVuZ3RoLXByZWZpeGVkIGtleXMgYXJlIGVtaXR0 ZWQgdG8KKysgKiB0aGUgZGVzY3JpcHRvciB0byB3aGljaCB0aGlzIG1hY3JvIGlzIGRlZmluZWQg Zm9yIHR1bmluZyB0aGUgaGFzaCBmdW5jdGlvbi4KKysgKiBUaGUgYXBwIGNhbiAjaW5jbHVkZSA8 dW5pc3RkLmg+IHRvIGdldCB0aGUgcHJvdG90eXBlIGZvciB3cml0ZSgyKS4gKi8KKysjaWZkZWYg SEFTSF9FTUlUX0tFWVMKKysjZGVmaW5lIEhBU0hfRU1JVF9LRVkoaGgsaGVhZCxrZXlwdHIsZmll bGRsZW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgdW5zaWduZWQgX2tsZW4gPSBmaWVsZGxlbjsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHdyaXRlKEhBU0hf RU1JVF9LRVlTLCAmX2tsZW4sIHNpemVvZihfa2xlbikpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICB3cml0ZShIQVNIX0VNSVRfS0VZUywga2V5cHRyLCAodW5zaWduZWQg bG9uZylmaWVsZGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisr I2Vsc2UKKysjZGVmaW5lIEhBU0hfRU1JVF9LRVkoaGgsaGVhZCxrZXlwdHIsZmllbGRsZW4pCisr I2VuZGlmCisrCisrLyogVGhlIEJlcm5zdGVpbiBoYXNoIGZ1bmN0aW9uLCB1c2VkIGluIFBlcmwg cHJpb3IgdG8gdjUuNi4gTm90ZSAoeDw8NSt4KT14KjMzLiAqLworKyNkZWZpbmUgSEFTSF9CRVIo a2V5LGtleWxlbixoYXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKytkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaGJfa2V5 bGVuID0gKHVuc2lnbmVkKWtleWxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgY29uc3QgdW5zaWduZWQgY2hhciAqX2hiX2tleSA9IChjb25zdCB1bnNpZ25l ZCBjaGFyKikoa2V5KTsgICAgICAgICAgICAgICAgICAgIFwKKysgIChoYXNodikgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICB3aGlsZSAoX2hiX2tleWxlbi0tICE9IDBVKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoaGFzaHYpID0gKCgoaGFz aHYpIDw8IDUpICsgKGhhc2h2KSkgKyAqX2hiX2tleSsrOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysKKysv KiBTQVgvRk5WL09BVC9KRU4gaGFzaCBmdW5jdGlvbnMgYXJlIG1hY3JvIHZhcmlhbnRzIG9mIHRo b3NlIGxpc3RlZCBhdAorKyAqIGh0dHA6Ly9ldGVybmFsbHljb25mdXp6bGVkLmNvbS90dXRzL2Fs Z29yaXRobXMvanN3X3R1dF9oYXNoaW5nLmFzcHgKKysgKiAoYXJjaGl2ZSBsaW5rOiBodHRwczov L2FyY2hpdmUuaXMvSXZjYW4gKQorKyAqLworKyNkZWZpbmUgSEFTSF9TQVgoa2V5LGtleWxlbixo YXNodikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfc3hfaTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg Y29uc3QgdW5zaWduZWQgY2hhciAqX2hzX2tleSA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikoa2V5 KTsgICAgICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2ID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBm b3IgKF9zeF9pPTA7IF9zeF9pIDwga2V5bGVuOyBfc3hfaSsrKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBoYXNodiBePSAoaGFzaHYgPDwgNSkgKyAoaGFz aHYgPj4gMikgKyBfaHNfa2V5W19zeF9pXTsgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysvKiBGTlYtMWEgdmFyaWF0aW9u ICovCisrI2RlZmluZSBIQVNIX0ZOVihrZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIHVuc2lnbmVkIF9mbl9pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBjb25zdCB1bnNpZ25lZCBjaGFyICpf aGZfa2V5ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKShrZXkpOyAgICAgICAgICAgICAgICAgICAg XAorKyAgKGhhc2h2KSA9IDIxNjYxMzYyNjFVOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGZvciAoX2ZuX2k9MDsgX2ZuX2kgPCBr ZXlsZW47IF9mbl9pKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIGhhc2h2ID0gaGFzaHYgXiBfaGZfa2V5W19mbl9pXTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBoYXNodiA9IGhhc2h2ICogMTY3Nzc2 MTlVOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhB U0hfT0FUKGtleSxrZXlsZW4saGFzaHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdW5zaWduZWQg X2hvX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9ob19rZXk9KGNvbnN0IHVu c2lnbmVkIGNoYXIqKShrZXkpOyAgICAgICAgICAgICAgICAgICAgICBcCisrICBoYXNodiA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgZm9yKF9ob19pPTA7IF9ob19pIDwga2V5bGVuOyBfaG9faSsrKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBoYXNodiAr PSBfaG9fa2V5W19ob19pXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgaGFzaHYgKz0gKGhhc2h2IDw8IDEwKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGhhc2h2IF49 IChoYXNodiA+PiA2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBoYXNodiArPSAoaGFz aHYgPDwgMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgaGFzaHYgXj0gKGhhc2h2ID4+IDExKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2ICs9IChoYXNo diA8PCAxNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIEhBU0hfSkVOX01JWChhLGIsYykg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgYSAtPSBiOyBhIC09IGM7IGEgXj0gKCBjID4+ IDEzICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IGIgLT0gYzsgYiAtPSBhOyBiIF49ICggYSA8PCA4ICk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICBjIC09IGE7IGMgLT0gYjsgYyBePSAoIGIgPj4g MTMgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg YSAtPSBiOyBhIC09IGM7IGEgXj0gKCBjID4+IDEyICk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGIgLT0gYzsgYiAtPSBhOyBiIF49ICggYSA8PCAx NiApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBj IC09IGE7IGMgLT0gYjsgYyBePSAoIGIgPj4gNSApOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgYSAtPSBiOyBhIC09IGM7IGEgXj0gKCBjID4+IDMg KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGIg LT0gYzsgYiAtPSBhOyBiIF49ICggYSA8PCAxMCApOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICBjIC09IGE7IGMgLT0gYjsgYyBePSAoIGIgPj4gMTUg KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hp bGUgKDApCisrCisrI2RlZmluZSBIQVNIX0pFTihrZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIHVuc2lnbmVkIF9oal9pLF9oal9qLF9oal9rOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBjb25zdCBj aGFyICpfaGpfa2V5PSh1bnNpZ25lZCBjb25zdCBjaGFyKikoa2V5KTsgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgaGFzaHYgPSAweGZlZWRiZWVmdTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9oal9pID0gX2hqX2ogPSAw eDllMzc3OWI5dTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICBfaGpfayA9ICh1bnNpZ25lZCkoa2V5bGVuKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUgKF9oal9rID49IDEy VSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgX2hqX2kgKz0gICAgKF9oal9rZXlbMF0gKyAoICh1bnNpZ25lZClfaGpfa2V5 WzFdIDw8IDggKSAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICArICggKHVuc2lnbmVk KV9oal9rZXlbMl0gPDwgMTYgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzNdIDw8IDI0ICkgKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX2hqX2ogKz0gICAgKF9oal9r ZXlbNF0gKyAoICh1bnNpZ25lZClfaGpfa2V5WzVdIDw8IDggKSAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICArICggKHVuc2lnbmVkKV9oal9rZXlbNl0gPDwgMTYgKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKyAoICh1bnNpZ25lZClf aGpfa2V5WzddIDw8IDI0ICkgKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgaGFzaHYgKz0gKF9oal9rZXlbOF0gKyAoICh1bnNpZ25lZClfaGpfa2V5WzldIDw8 IDggKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICArICggKHVuc2lnbmVkKV9o al9rZXlbMTBdIDw8IDE2ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgKyAoICh1bnNpZ25lZClfaGpfa2V5WzExXSA8PCAyNCApICk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICBIQVNIX0pFTl9NSVgoX2hqX2ksIF9oal9qLCBoYXNodik7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgIF9oal9rZXkgKz0gMTI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICBfaGpfayAtPSAxMlU7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2ICs9ICh1bnNpZ25lZCkoa2V5bGVu KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBzd2l0Y2ggKCBfaGpfayApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBjYXNlIDExOiBoYXNodiArPSAoICh1bnNp Z25lZClfaGpfa2V5WzEwXSA8PCAyNCApOyAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKKysg ICAgY2FzZSAxMDogaGFzaHYgKz0gKCAodW5zaWduZWQpX2hqX2tleVs5XSA8PCAxNiApOyAgLyog RkFMTFRIUk9VR0ggKi8gICAgICAgICBcCisrICAgIGNhc2UgOTogIGhhc2h2ICs9ICggKHVuc2ln bmVkKV9oal9rZXlbOF0gPDwgOCApOyAgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAorKyAg ICBjYXNlIDg6ICBfaGpfaiArPSAoICh1bnNpZ25lZClfaGpfa2V5WzddIDw8IDI0ICk7ICAvKiBG QUxMVEhST1VHSCAqLyAgICAgICAgIFwKKysgICAgY2FzZSA3OiAgX2hqX2ogKz0gKCAodW5zaWdu ZWQpX2hqX2tleVs2XSA8PCAxNiApOyAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCisrICAg IGNhc2UgNjogIF9oal9qICs9ICggKHVuc2lnbmVkKV9oal9rZXlbNV0gPDwgOCApOyAgIC8qIEZB TExUSFJPVUdIICovICAgICAgICAgXAorKyAgICBjYXNlIDU6ICBfaGpfaiArPSBfaGpfa2V5WzRd OyAgICAgICAgICAgICAgICAgICAgICAvKiBGQUxMVEhST1VHSCAqLyAgICAgICAgIFwKKysgICAg Y2FzZSA0OiAgX2hqX2kgKz0gKCAodW5zaWduZWQpX2hqX2tleVszXSA8PCAyNCApOyAgLyogRkFM TFRIUk9VR0ggKi8gICAgICAgICBcCisrICAgIGNhc2UgMzogIF9oal9pICs9ICggKHVuc2lnbmVk KV9oal9rZXlbMl0gPDwgMTYgKTsgIC8qIEZBTExUSFJPVUdIICovICAgICAgICAgXAorKyAgICBj YXNlIDI6ICBfaGpfaSArPSAoICh1bnNpZ25lZClfaGpfa2V5WzFdIDw8IDggKTsgICAvKiBGQUxM VEhST1VHSCAqLyAgICAgICAgIFwKKysgICAgY2FzZSAxOiAgX2hqX2kgKz0gX2hqX2tleVswXTsg ICAgICAgICAgICAgICAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8gICAgICAgICBcCisrICAgIGRl ZmF1bHQ6IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEhBU0hf SkVOX01JWChfaGpfaSwgX2hqX2osIGhhc2h2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysvKiBUaGUgUGF1bCBIc2llaCBo YXNoIGZ1bmN0aW9uICovCisrI3VuZGVmIGdldDE2Yml0cworKyNpZiAoZGVmaW5lZChfX0dOVUNf XykgJiYgZGVmaW5lZChfX2kzODZfXykpIHx8IGRlZmluZWQoX19XQVRDT01DX18pICAgICAgICAg ICAgIFwKKysgIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQgKF9fQk9STEFORENfXykg fHwgZGVmaW5lZCAoX19UVVJCT0NfXykKKysjZGVmaW5lIGdldDE2Yml0cyhkKSAoKigoY29uc3Qg dWludDE2X3QgKikgKGQpKSkKKysjZW5kaWYKKysKKysjaWYgIWRlZmluZWQgKGdldDE2Yml0cykK KysjZGVmaW5lIGdldDE2Yml0cyhkKSAoKCgodWludDMyX3QpKCgoY29uc3QgdWludDhfdCAqKShk KSlbMV0pKSA8PCA4KSAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICArKHVp bnQzMl90KSgoKGNvbnN0IHVpbnQ4X3QgKikoZCkpWzBdKSApCisrI2VuZGlmCisrI2RlZmluZSBI QVNIX1NGSChrZXksa2V5bGVuLGhhc2h2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVk IGNvbnN0IGNoYXIgKl9zZmhfa2V5PSh1bnNpZ25lZCBjb25zdCBjaGFyKikoa2V5KTsgICAgICAg ICAgICAgICAgICAgICBcCisrICB1aW50MzJfdCBfc2ZoX3RtcCwgX3NmaF9sZW4gPSAodWludDMy X3Qpa2V5bGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVkIF9zZmhfcmVtID0gX3NmaF9sZW4gJiAzVTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBfc2ZoX2xlbiA+ Pj0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgaGFzaHYgPSAweGNhZmViYWJldTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAvKiBNYWluIGxvb3AgKi8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgZm9yICg7X3NmaF9s ZW4gPiAwVTsgX3NmaF9sZW4tLSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgaGFzaHYgICAgKz0gZ2V0MTZiaXRzIChfc2ZoX2tleSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9zZmhfdG1wICA9 ICgodWludDMyX3QpKGdldDE2Yml0cyAoX3NmaF9rZXkrMikpIDw8IDExKSBeIGhhc2h2OyAgICAg ICAgICAgICAgXAorKyAgICBoYXNodiAgICAgPSAoaGFzaHYgPDwgMTYpIF4gX3NmaF90bXA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX3NmaF9rZXkgKz0g MlUqc2l6ZW9mICh1aW50MTZfdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIGhhc2h2ICAgICs9IGhhc2h2ID4+IDExOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAvKiBIYW5kbGUgZW5kIGNh c2VzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgc3dpdGNoIChfc2ZoX3JlbSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgY2FzZSAzOiBoYXNodiAr PSBnZXQxNmJpdHMgKF9zZmhfa2V5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgICAgICAgaGFzaHYgXj0gaGFzaHYgPDwgMTY7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGhhc2h2IF49 ICh1aW50MzJfdCkoX3NmaF9rZXlbc2l6ZW9mICh1aW50MTZfdCldKSA8PCAxODsgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgICBoYXNodiArPSBoYXNodiA+PiAxMTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgYnJlYWs7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICBjYXNlIDI6IGhhc2h2ICs9IGdldDE2Yml0cyAoX3NmaF9rZXkpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBoYXNodiBePSBo YXNodiA8PCAxMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICAgICAgaGFzaHYgKz0gaGFzaHYgPj4gMTc7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGJyZWFrOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgY2FzZSAxOiBoYXNodiArPSAqX3NmaF9rZXk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgaGFzaHYgXj0gaGFz aHYgPDwgMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgICAgIGhhc2h2ICs9IGhhc2h2ID4+IDE7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBicmVhazsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIGRlZmF1bHQ6IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAvKiBGb3JjZSAiYXZhbGFuY2hpbmciIG9m IGZpbmFsIDEyNyBiaXRzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgaGFzaHYgXj0gaGFzaHYgPDwgMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIGhhc2h2ICs9IGhhc2h2ID4+IDU7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBoYXNodiBePSBoYXNodiA8PCA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaGFzaHYgKz0gaGFzaHYgPj4gMTc7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IGhhc2h2IF49IGhhc2h2IDw8IDI1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICBoYXNodiArPSBoYXNodiA+PiA2OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30g d2hpbGUgKDApCisrCisrLyogaXRlcmF0ZSBvdmVyIGl0ZW1zIGluIGEga25vd24gYnVja2V0IHRv IGZpbmQgZGVzaXJlZCBpdGVtICovCisrI2RlZmluZSBIQVNIX0ZJTkRfSU5fQktUKHRibCxoaCxo ZWFkLGtleXB0cixrZXlsZW5faW4saGFzaHZhbCxvdXQpICAgICAgICAgICAgICAgXAorK2RvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgIGlmICgoaGVhZCkuaGhfaGVhZCAhPSBOVUxMKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIERF Q0xUWVBFX0FTU0lHTihvdXQsIEVMTVRfRlJPTV9ISCh0YmwsIChoZWFkKS5oaF9oZWFkKSk7ICAg ICAgICAgICAgICAgICAgICAgXAorKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgKG91 dCkgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgd2hpbGUg KChvdXQpICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKChvdXQpLT5oaC5oYXNodiA9PSAoaGFzaHZhbCkg JiYgKG91dCktPmhoLmtleWxlbiA9PSAoa2V5bGVuX2luKSkgeyAgICAgICBcCisrICAgICAgaWYg KEhBU0hfS0VZQ01QKChvdXQpLT5oaC5rZXksIGtleXB0ciwga2V5bGVuX2luKSA9PSAwKSB7ICAg ICAgICAgICAgICAgICAgXAorKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoKG91 dCktPmhoLmhoX25leHQgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICBERUNMVFlQRV9BU1NJR04ob3V0LCBFTE1UX0ZST01fSEgo dGJsLCAob3V0KS0+aGguaGhfbmV4dCkpOyAgICAgICAgICAgICAgICBcCisrICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgIChvdXQpID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK30gd2hpbGUgKDApCisr CisrLyogYWRkIGFuIGl0ZW0gdG8gYSBidWNrZXQgICovCisrI2RlZmluZSBIQVNIX0FERF9UT19C S1QoaGVhZCxoaCxhZGRoaCxvb21lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIFVUX2hhc2hfYnVja2V0ICpfaGFf aGVhZCA9ICYoaGVhZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICBfaGFfaGVhZC0+Y291bnQrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGFkZGhoKS0+aGhfbmV4dCA9IF9o YV9oZWFkLT5oaF9oZWFkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIChhZGRoaCktPmhoX3ByZXYgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBpZiAoX2hhX2hlYWQtPmhoX2hlYWQg IT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICBfaGFfaGVhZC0+aGhfaGVhZC0+aGhfcHJldiA9IChhZGRoaCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICBfaGFfaGVhZC0+aGhfaGVhZCA9IChhZGRoaCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaWYgKChfaGFfaGVhZC0+Y291bnQgPj0g KChfaGFfaGVhZC0+ZXhwYW5kX211bHQgKyAxVSkgKiBIQVNIX0JLVF9DQVBBQ0lUWV9USFJFU0gp KSBcCisrICAgICAgJiYgIShhZGRoaCktPnRibC0+bm9leHBhbmQpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBIQVNIX0VYUEFORF9CVUNLRVRT KGFkZGhoLChhZGRoaCktPnRibCwgb29tZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgSUZfSEFTSF9OT05GQVRBTF9PT00oICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgaWYgKG9vbWVkKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgSEFTSF9ERUxfSU5fQktUKGhlYWQsYWRkaGgpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK Kyt9IHdoaWxlICgwKQorKworKy8qIHJlbW92ZSBhbiBpdGVtIGZyb20gYSBnaXZlbiBidWNrZXQg Ki8KKysjZGVmaW5lIEhBU0hfREVMX0lOX0JLVChoZWFkLGRlbGhoKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgVVRfaGFzaF9idWNrZXQgKl9oZF9oZWFkID0gJihoZWFkKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIF9oZF9oZWFkLT5jb3VudC0tOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICBpZiAoX2hkX2hlYWQtPmhoX2hlYWQgPT0gKGRlbGhoKSkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfaGRfaGVhZC0+aGhfaGVhZCA9IChk ZWxoaCktPmhoX25leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBpZiAoKGRlbGhoKS0+aGhfcHJldikgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAoZGVsaGgpLT5oaF9wcmV2LT5oaF9uZXh0ID0gKGRlbGhoKS0+aGhfbmV4dDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBpZiAoKGRlbGhoKS0+aGhfbmV4dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoZGVsaGgpLT5oaF9uZXh0LT5oaF9wcmV2 ID0gKGRlbGhoKS0+aGhfcHJldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysvKiBCdWNrZXQgZXhw YW5zaW9uIGhhcyB0aGUgZWZmZWN0IG9mIGRvdWJsaW5nIHRoZSBudW1iZXIgb2YgYnVja2V0cwor KyAqIGFuZCByZWRpc3RyaWJ1dGluZyB0aGUgaXRlbXMgaW50byB0aGUgbmV3IGJ1Y2tldHMuIElk ZWFsbHkgdGhlCisrICogaXRlbXMgd2lsbCBkaXN0cmlidXRlIG1vcmUgb3IgbGVzcyBldmVubHkg aW50byB0aGUgbmV3IGJ1Y2tldHMKKysgKiAodGhlIGV4dGVudCB0byB3aGljaCB0aGlzIGlzIHRy dWUgaXMgYSBtZWFzdXJlIG9mIHRoZSBxdWFsaXR5IG9mCisrICogdGhlIGhhc2ggZnVuY3Rpb24g YXMgaXQgYXBwbGllcyB0byB0aGUga2V5IGRvbWFpbikuCisrICoKKysgKiBXaXRoIHRoZSBpdGVt cyBkaXN0cmlidXRlZCBpbnRvIG1vcmUgYnVja2V0cywgdGhlIGNoYWluIGxlbmd0aAorKyAqIChp dGVtIGNvdW50KSBpbiBlYWNoIGJ1Y2tldCBpcyByZWR1Y2VkLiBUaHVzIGJ5IGV4cGFuZGluZyBi dWNrZXRzCisrICogdGhlIGhhc2gga2VlcHMgYSBib3VuZCBvbiB0aGUgY2hhaW4gbGVuZ3RoLiBU aGlzIGJvdW5kZWQgY2hhaW4KKysgKiBsZW5ndGggaXMgdGhlIGVzc2VuY2Ugb2YgaG93IGEgaGFz aCBwcm92aWRlcyBjb25zdGFudCB0aW1lIGxvb2t1cC4KKysgKgorKyAqIFRoZSBjYWxjdWxhdGlv biBvZiB0YmwtPmlkZWFsX2NoYWluX21heGxlbiBiZWxvdyBkZXNlcnZlcyBzb21lCisrICogZXhw bGFuYXRpb24uIEZpcnN0LCBrZWVwIGluIG1pbmQgdGhhdCB3ZSdyZSBjYWxjdWxhdGluZyB0aGUg aWRlYWwKKysgKiBtYXhpbXVtIGNoYWluIGxlbmd0aCBiYXNlZCBvbiB0aGUgKm5ldyogKGRvdWJs ZWQpIGJ1Y2tldCBjb3VudC4KKysgKiBJbiBmcmFjdGlvbnMgdGhpcyBpcyBqdXN0IG4vYiAobj1u dW1iZXIgb2YgaXRlbXMsYj1uZXcgbnVtIGJ1Y2tldHMpLgorKyAqIFNpbmNlIHRoZSBpZGVhbCBj aGFpbiBsZW5ndGggaXMgYW4gaW50ZWdlciwgd2Ugd2FudCB0byBjYWxjdWxhdGUKKysgKiBjZWls KG4vYikuIFdlIGRvbid0IGRlcGVuZCBvbiBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGluIHRo aXMKKysgKiBoYXNoLCBzbyB0byBjYWxjdWxhdGUgY2VpbChuL2IpIHdpdGggaW50ZWdlcnMgd2Ug Y291bGQgd3JpdGUKKysgKgorKyAqICAgICAgY2VpbChuL2IpID0gKG4vYikgKyAoKG4lYik/MTow KQorKyAqCisrICogYW5kIGluIGZhY3QgYSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoaXMgaGFzaCBk aWQganVzdCB0aGF0LgorKyAqIEJ1dCBub3cgd2UgaGF2ZSBpbXByb3ZlZCB0aGluZ3MgYSBiaXQg YnkgcmVjb2duaXppbmcgdGhhdCBiIGlzCisrICogYWx3YXlzIGEgcG93ZXIgb2YgdHdvLiBXZSBr ZWVwIGl0cyBiYXNlIDIgbG9nIGhhbmR5IChjYWxsIGl0IGxiKSwKKysgKiBzbyBub3cgd2UgY2Fu IHdyaXRlIHRoaXMgd2l0aCBhIGJpdCBzaGlmdCBhbmQgbG9naWNhbCBBTkQ6CisrICoKKysgKiAg ICAgIGNlaWwobi9iKSA9IChuPj5sYikgKyAoIChuICYgKGItMSkpID8gMTowKQorKyAqCisrICov CisrI2RlZmluZSBIQVNIX0VYUEFORF9CVUNLRVRTKGhoLHRibCxvb21lZCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIHVuc2lnbmVkIF9oZV9ia3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaGVfYmt0X2k7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgc3RydWN0IFVUX2hhc2hfaGFuZGxlICpfaGVfdGhoLCAqX2hlX2hoX254dDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIFVUX2hhc2hfYnVja2V0ICpfaGVfbmV3X2J1 Y2tldHMsICpfaGVfbmV3Ymt0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICBfaGVfbmV3X2J1Y2tldHMgPSAoVVRfaGFzaF9idWNrZXQqKXV0aGFzaF9tYWxsb2MoICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBVVF9o YXNoX2J1Y2tldCkgKiAodGJsKS0+bnVtX2J1Y2tldHMgKiAyVSk7ICAgICAgICAgICAgIFwKKysg IGlmICghX2hlX25ld19idWNrZXRzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIEhBU0hfUkVDT1JEX09PTShvb21lZCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgdXRoYXNoX2J6ZXJvKF9oZV9uZXdfYnVja2V0 cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICBzaXplb2Yoc3RydWN0IFVUX2hhc2hfYnVja2V0KSAqICh0YmwpLT5udW1fYnVja2V0cyAq IDJVKTsgICAgICAgICAgICAgICAgXAorKyAgICAodGJsKS0+aWRlYWxfY2hhaW5fbWF4bGVuID0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgKCh0YmwpLT5udW1faXRlbXMgPj4gKCh0YmwpLT5sb2cyX251bV9idWNrZXRzKzFVKSkgKyAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICgoKCh0YmwpLT5udW1faXRlbXMgJiAoKCh0 YmwpLT5udW1fYnVja2V0cyoyVSktMVUpKSAhPSAwVSkgPyAxVSA6IDBVKTsgICAgXAorKyAgICAo dGJsKS0+bm9uaWRlYWxfaXRlbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgZm9yIChfaGVfYmt0X2kgPSAwOyBfaGVfYmt0X2kg PCAodGJsKS0+bnVtX2J1Y2tldHM7IF9oZV9ia3RfaSsrKSB7ICAgICAgICAgICBcCisrICAgICAg X2hlX3RoaCA9ICh0YmwpLT5idWNrZXRzWyBfaGVfYmt0X2kgXS5oaF9oZWFkOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHdoaWxlIChfaGVfdGhoICE9IE5VTEwpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg IF9oZV9oaF9ueHQgPSBfaGVfdGhoLT5oaF9uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICBIQVNIX1RPX0JLVChfaGVfdGhoLT5oYXNodiwg KHRibCktPm51bV9idWNrZXRzICogMlUsIF9oZV9ia3QpOyAgICAgICAgICAgXAorKyAgICAgICAg X2hlX25ld2JrdCA9ICYoX2hlX25ld19idWNrZXRzW19oZV9ia3RdKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGlmICgrKyhfaGVfbmV3Ymt0LT5jb3VudCkgPiAo dGJsKS0+aWRlYWxfY2hhaW5fbWF4bGVuKSB7ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAg ICh0YmwpLT5ub25pZGVhbF9pdGVtcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBpZiAoX2hlX25ld2JrdC0+Y291bnQgPiBfaGVf bmV3Ymt0LT5leHBhbmRfbXVsdCAqICh0YmwpLT5pZGVhbF9jaGFpbl9tYXhsZW4pIHsgXAorKyAg ICAgICAgICAgIF9oZV9uZXdia3QtPmV4cGFuZF9tdWx0Kys7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2hlX3RoaC0+aGhfcHJldiA9IE5VTEw7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgIF9oZV90aGgtPmhoX25leHQgPSBfaGVfbmV3Ymt0LT5oaF9oZWFkOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBpZiAoX2hlX25ld2JrdC0+aGhfaGVhZCAh PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICBfaGVfbmV3Ymt0LT5oaF9oZWFkLT5oaF9wcmV2ID0gX2hlX3RoaDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICBfaGVfbmV3Ymt0LT5oaF9oZWFkID0gX2hlX3RoaDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2hlX3RoaCA9IF9oZV9oaF9ueHQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1dGhh c2hfZnJlZSgodGJsKS0+YnVja2V0cywgKHRibCktPm51bV9idWNrZXRzICogc2l6ZW9mKHN0cnVj dCBVVF9oYXNoX2J1Y2tldCkpOyBcCisrICAgICh0YmwpLT5udW1fYnVja2V0cyAqPSAyVTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAo dGJsKS0+bG9nMl9udW1fYnVja2V0cysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgKHRibCktPmJ1Y2tldHMgPSBfaGVfbmV3X2J1Y2tl dHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICh0 YmwpLT5pbmVmZl9leHBhbmRzID0gKCh0YmwpLT5ub25pZGVhbF9pdGVtcyA+ICgodGJsKS0+bnVt X2l0ZW1zID4+IDEpKSA/ICAgXAorKyAgICAgICAgKCh0YmwpLT5pbmVmZl9leHBhbmRzKzFVKSA6 IDBVOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgaWYg KCh0YmwpLT5pbmVmZl9leHBhbmRzID4gMVUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgKHRibCktPm5vZXhwYW5kID0gMTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHV0 aGFzaF9ub2V4cGFuZF9meWkodGJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHV0aGFz aF9leHBhbmRfZnlpKHRibCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgw KQorKworKworKy8qIFRoaXMgaXMgYW4gYWRhcHRhdGlvbiBvZiBTaW1vbiBUYXRoYW0ncyBPKG4g bG9nKG4pKSBtZXJnZXNvcnQgKi8KKysvKiBOb3RlIHRoYXQgSEFTSF9TT1JUIGFzc3VtZXMgdGhl IGhhc2ggaGFuZGxlIG5hbWUgdG8gYmUgaGguCisrICogSEFTSF9TUlQgd2FzIGFkZGVkIHRvIGFs bG93IHRoZSBoYXNoIGhhbmRsZSBuYW1lIHRvIGJlIHBhc3NlZCBpbi4gKi8KKysjZGVmaW5lIEhB U0hfU09SVChoZWFkLGNtcGZjbikgSEFTSF9TUlQoaGgsaGVhZCxjbXBmY24pCisrI2RlZmluZSBI QVNIX1NSVChoaCxoZWFkLGNtcGZjbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHVuc2lnbmVk IF9oc19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICB1bnNpZ25lZCBfaHNfbG9vcGluZyxfaHNfbm1lcmdlcyxfaHNf aW5zaXplLF9oc19wc2l6ZSxfaHNfcXNpemU7ICAgICAgICAgICAgICAgXAorKyAgc3RydWN0IFVU X2hhc2hfaGFuZGxlICpfaHNfcCwgKl9oc19xLCAqX2hzX2UsICpfaHNfbGlzdCwgKl9oc190YWls OyAgICAgICAgICAgIFwKKysgIGlmIChoZWFkICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9oc19pbnNp emUgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICBfaHNfbG9vcGluZyA9IDE7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX2hzX2xpc3Qg PSAmKChoZWFkKS0+aGgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgIHdoaWxlIChfaHNfbG9vcGluZyAhPSAwVSkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIF9oc19wID0g X2hzX2xpc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICBfaHNfbGlzdCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgX2hzX3RhaWwg PSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgIF9oc19ubWVyZ2VzID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB3aGlsZSAoX2hz X3AgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICBfaHNfbm1lcmdlcysrOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX2hzX3EgPSBf aHNfcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgIF9oc19wc2l6ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBmb3IgKF9oc19p ID0gMDsgX2hzX2kgPCBfaHNfaW5zaXplOyArK19oc19pKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgICBfaHNfcHNpemUrKzsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2hzX3EgPSAo KF9oc19xLT5uZXh0ICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcS0+ bmV4dCkgOiBOVUxMKTsgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBpZiAoX2hzX3Eg PT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9oc19xc2l6ZSA9IF9o c19pbnNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICB3aGlsZSAoKF9oc19wc2l6ZSAhPSAwVSkgfHwgKChfaHNfcXNpemUgIT0g MFUpICYmIChfaHNfcSAhPSBOVUxMKSkpIHsgICAgXAorKyAgICAgICAgICBpZiAoX2hzX3BzaXpl ID09IDBVKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgICAgICBfaHNfZSA9IF9oc19xOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgX2hzX3EgPSAoKF9o c19xLT5uZXh0ICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgICAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcS0+bmV4 dCkgOiBOVUxMKTsgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNfcXNpemUtLTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgICAgICAgIH0gZWxzZSBpZiAoKF9oc19xc2l6ZSA9PSAwVSkgfHwgKF9oc19xID09IE5V TEwpKSB7ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9oc19lID0gX2hzX3A7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICAgICAgICBpZiAoX2hzX3AgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBfaHNfcCA9ICgoX2hz X3AtPm5leHQgIT0gTlVMTCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICAgICAgICAgICAgICBISF9GUk9NX0VMTVQoKGhlYWQpLT5oaC50YmwsIF9oc19wLT5uZXh0 KSA6IE5VTEwpOyAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICAgICAgX2hzX3BzaXplLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9IGVsc2UgaWYgKChjbXBmY24o ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICAgICAgICAgREVDTFRZUEUoaGVhZCkoRUxNVF9GUk9NX0hIKChoZWFkKS0+aGgudGJs LCBfaHNfcCkpLCAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgIERFQ0xUWVBFKGhlYWQp KEVMTVRfRlJPTV9ISCgoaGVhZCktPmhoLnRibCwgX2hzX3EpKSAgICAgICAgICAgICAgXAorKyAg ICAgICAgICAgICAgICApKSA8PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBfaHNfZSA9IF9oc19wOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgICAgaWYgKF9oc19wICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgX2hzX3AgPSAoKF9oc19wLT5u ZXh0ICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgICAgICAgICAgSEhfRlJPTV9FTE1UKChoZWFkKS0+aGgudGJsLCBfaHNfcC0+bmV4dCkgOiBO VUxMKTsgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICAgIF9oc19wc2l6ZS0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAgICAgX2hzX2UgPSBfaHNfcTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9oc19xID0gKChfaHNfcS0+bmV4dCAh PSBOVUxMKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg ICAgICAgIEhIX0ZST01fRUxNVCgoaGVhZCktPmhoLnRibCwgX2hzX3EtPm5leHQpIDogTlVMTCk7 ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgX2hzX3FzaXplLS07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKCBfaHNfdGFpbCAhPSBOVUxMICkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAg ICAgX2hzX3RhaWwtPm5leHQgPSAoKF9oc19lICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgRUxNVF9GUk9NX0hIKChoZWFkKS0+aGgu dGJsLCBfaHNfZSkgOiBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgX2hzX2xpc3QgPSBfaHNfZTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKF9oc19lICE9IE5VTEwpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg X2hzX2UtPnByZXYgPSAoKF9oc190YWlsICE9IE5VTEwpID8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgRUxNVF9GUk9NX0hIKChoZWFkKS0+aGgudGJs LCBfaHNfdGFpbCkgOiBOVUxMKTsgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgIF9oc190YWlsID0gX2hzX2U7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgIF9oc19wID0gX2hzX3E7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgIGlmIChfaHNfdGFpbCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9oc190YWls LT5uZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIGlmIChfaHNfbm1l cmdlcyA8PSAxVSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgIF9oc19sb29waW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAoaGVhZCktPmho LnRibC0+dGFpbCA9IF9oc190YWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgREVDTFRZUEVfQVNTSUdOKGhlYWQsIEVMTVRfRlJPTV9ISCgoaGVh ZCktPmhoLnRibCwgX2hzX2xpc3QpKTsgICAgICAgICAgIFwKKysgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgICAgX2hzX2luc2l6ZSAqPSAyVTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgSEFTSF9GU0NLKGhoLCBoZWFkLCAiSEFTSF9TUlQiKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorK30gd2hpbGUgKDApCisrCisrLyogVGhpcyBmdW5jdGlvbiBzZWxlY3RzIGl0ZW1zIGZy b20gb25lIGhhc2ggaW50byBhbm90aGVyIGhhc2guCisrICogVGhlIGVuZCByZXN1bHQgaXMgdGhh dCB0aGUgc2VsZWN0ZWQgaXRlbXMgaGF2ZSBkdWFsIHByZXNlbmNlCisrICogaW4gYm90aCBoYXNo ZXMuIFRoZXJlIGlzIG5vIGNvcHkgb2YgdGhlIGl0ZW1zIG1hZGU7IHJhdGhlcgorKyAqIHRoZXkg YXJlIGFkZGVkIGludG8gdGhlIG5ldyBoYXNoIHRocm91Z2ggYSBzZWNvbmRhcnkgaGFzaAorKyAq IGhhc2ggaGFuZGxlIHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBzdHJ1Y3R1cmUuICovCisr I2RlZmluZSBIQVNIX1NFTEVDVChoaF9kc3QsIGRzdCwgaGhfc3JjLCBzcmMsIGNvbmQpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg IHVuc2lnbmVkIF9zcmNfYmt0LCBfZHN0X2JrdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICB2b2lkICpfbGFzdF9lbHQgPSBOVUxMLCAqX2Vs dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg VVRfaGFzaF9oYW5kbGUgKl9zcmNfaGgsICpfZHN0X2hoLCAqX2xhc3RfZWx0X2hoPU5VTEw7ICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgIHB0cmRpZmZfdCBfZHN0X2hobyA9ICgoY2hhciop KCYoZHN0KS0+aGhfZHN0KSAtIChjaGFyKikoZHN0KSk7ICAgICAgICAgICAgICAgICBcCisrICBp ZiAoKHNyYykgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBmb3IgKF9zcmNfYmt0PTA7IF9zcmNfYmt0IDwg KHNyYyktPmhoX3NyYy50YmwtPm51bV9idWNrZXRzOyBfc3JjX2JrdCsrKSB7ICAgIFwKKysgICAg ICBmb3IgKF9zcmNfaGggPSAoc3JjKS0+aGhfc3JjLnRibC0+YnVja2V0c1tfc3JjX2JrdF0uaGhf aGVhZDsgICAgICAgICAgICAgICBcCisrICAgICAgICBfc3JjX2hoICE9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgX3NyY19oaCA9IF9zcmNfaGgtPmhoX25leHQpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9lbHQgPSBFTE1UX0ZST01fSEgoKHNyYykt PmhoX3NyYy50YmwsIF9zcmNfaGgpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICBpZiAoY29uZChfZWx0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBJRl9IQVNIX05PTkZBVEFMX09PTSggaW50 IF9oc19vb21lZCA9IDA7ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg ICAgX2RzdF9oaCA9IChVVF9oYXNoX2hhbmRsZSopKHZvaWQqKSgoKGNoYXIqKV9lbHQpICsgX2Rz dF9oaG8pOyAgICAgICAgICBcCisrICAgICAgICAgIF9kc3RfaGgtPmtleSA9IF9zcmNfaGgtPmtl eTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg ICBfZHN0X2hoLT5rZXlsZW4gPSBfc3JjX2hoLT5rZXlsZW47ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgX2RzdF9oaC0+aGFzaHYgPSBfc3JjX2hoLT5o YXNodjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAg IF9kc3RfaGgtPnByZXYgPSBfbGFzdF9lbHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfZHN0X2hoLT5uZXh0ID0gTlVMTDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg aWYgKF9sYXN0X2VsdF9oaCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgX2xhc3RfZWx0X2hoLT5uZXh0ID0gX2VsdDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKChkc3QpID09IE5VTEwpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg REVDTFRZUEVfQVNTSUdOKGRzdCwgX2VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICAgIEhBU0hfTUFLRV9UQUJMRShoaF9kc3QsIGRzdCwg X2hzX29vbWVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBJ Rl9IQVNIX05PTkZBVEFMX09PTSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgICAgICBpZiAoX2hzX29vbWVkKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAg ICB1dGhhc2hfbm9uZmF0YWxfb29tKF9lbHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgKGRzdCkgPSBOVUxMOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAg IGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICApICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9kc3Rf aGgtPnRibCA9IChkc3QpLT5oaF9kc3QudGJsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIEhBU0hfVE9f QktUKF9kc3RfaGgtPmhhc2h2LCBfZHN0X2hoLT50YmwtPm51bV9idWNrZXRzLCBfZHN0X2JrdCk7 ICAgICAgXAorKyAgICAgICAgICBIQVNIX0FERF9UT19CS1QoX2RzdF9oaC0+dGJsLT5idWNrZXRz W19kc3RfYmt0XSwgaGhfZHN0LCBfZHN0X2hoLCBfaHNfb29tZWQpOyBcCisrICAgICAgICAgIChk c3QpLT5oaF9kc3QudGJsLT5udW1faXRlbXMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgICAgICBJRl9IQVNIX05PTkZBVEFMX09PTSggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBp ZiAoX2hzX29vbWVkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICAgICAgICAgICAgICBIQVNIX1JPTExCQUNLX0JLVChoaF9kc3QsIGRz dCwgX2RzdF9oaCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAg SEFTSF9ERUxFVEVfSEgoaGhfZHN0LCBkc3QsIF9kc3RfaGgpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgICAgICAgICAgIF9kc3RfaGgtPnRibCA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICB1 dGhhc2hfbm9uZmF0YWxfb29tKF9lbHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBIQVNIX0JM T09NX0FERChfZHN0X2hoLT50YmwsIF9kc3RfaGgtPmhhc2h2KTsgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgICAgICAgX2xhc3RfZWx0ID0gX2VsdDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9sYXN0X2Vs dF9oaCA9IF9kc3RfaGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIEhBU0hfRlNDSyhoaF9kc3QsIGRzdCwgIkhBU0hfU0VMRUNUIik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVm aW5lIEhBU0hfQ0xFQVIoaGgsaGVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgaWYg KChoZWFkKSAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgSEFTSF9CTE9PTV9GUkVFKChoZWFkKS0+aGgudGJs KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHV0 aGFzaF9mcmVlKChoZWFkKS0+aGgudGJsLT5idWNrZXRzLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoaGVhZCktPmhoLnRibC0+bnVt X2J1Y2tldHMqc2l6ZW9mKHN0cnVjdCBVVF9oYXNoX2J1Y2tldCkpOyAgICAgIFwKKysgICAgdXRo YXNoX2ZyZWUoKGhlYWQpLT5oaC50YmwsIHNpemVvZihVVF9oYXNoX3RhYmxlKSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgIChoZWFkKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgSEFTSF9PVkVSSEVB RChoaCxoZWFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgKCgoaGVhZCkgIT0gTlVMTCkgPyAoICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrIChzaXplX3QpKCgoaGVhZCktPmho LnRibC0+bnVtX2l0ZW1zICAgKiBzaXplb2YoVVRfaGFzaF9oYW5kbGUpKSAgICsgICAgICAgICAg ICAgXAorKyAgICAgICAgICAoKGhlYWQpLT5oaC50YmwtPm51bV9idWNrZXRzICogc2l6ZW9mKFVU X2hhc2hfYnVja2V0KSkgICArICAgICAgICAgICAgIFwKKysgICAgICAgICAgIHNpemVvZihVVF9o YXNoX3RhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgICAgICAgICAg ICBcCisrICAgICAgICAgICAoSEFTSF9CTE9PTV9CWVRFTEVOKSkpIDogMFUpCisrCisrI2lmZGVm IE5PX0RFQ0xUWVBFCisrI2RlZmluZSBIQVNIX0lURVIoaGgsaGVhZCxlbCx0bXApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorK2ZvcigoKGVsKT0oaGVh ZCkpLCAoKCooY2hhcioqKSgmKHRtcCkpKT0oY2hhciopKChoZWFkIT1OVUxMKT8oaGVhZCktPmho Lm5leHQ6TlVMTCkpOyBcCisrICAoZWwpICE9IE5VTEw7ICgoZWwpPSh0bXApKSwgKCgqKGNoYXIq KikoJih0bXApKSk9KGNoYXIqKSgodG1wIT1OVUxMKT8odG1wKS0+aGgubmV4dDpOVUxMKSkpCisr I2Vsc2UKKysjZGVmaW5lIEhBU0hfSVRFUihoaCxoZWFkLGVsLHRtcCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrZm9yKCgoZWwpPShoZWFkKSksICgo dG1wKT1ERUNMVFlQRShlbCkoKGhlYWQhPU5VTEwpPyhoZWFkKS0+aGgubmV4dDpOVUxMKSk7ICAg ICAgXAorKyAgKGVsKSAhPSBOVUxMOyAoKGVsKT0odG1wKSksICgodG1wKT1ERUNMVFlQRShlbCko KHRtcCE9TlVMTCk/KHRtcCktPmhoLm5leHQ6TlVMTCkpKQorKyNlbmRpZgorKworKy8qIG9idGFp biBhIGNvdW50IG9mIGl0ZW1zIGluIHRoZSBoYXNoICovCisrI2RlZmluZSBIQVNIX0NPVU5UKGhl YWQpIEhBU0hfQ05UKGhoLGhlYWQpCisrI2RlZmluZSBIQVNIX0NOVChoaCxoZWFkKSAoKGhlYWQg IT0gTlVMTCk/KChoZWFkKS0+aGgudGJsLT5udW1faXRlbXMpOjBVKQorKworK3R5cGVkZWYgc3Ry dWN0IFVUX2hhc2hfYnVja2V0IHsKKysgICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKmhoX2hlYWQ7 CisrICAgdW5zaWduZWQgY291bnQ7CisrCisrICAgLyogZXhwYW5kX211bHQgaXMgbm9ybWFsbHkg c2V0IHRvIDAuIEluIHRoaXMgc2l0dWF0aW9uLCB0aGUgbWF4IGNoYWluIGxlbmd0aAorKyAgICAq IHRocmVzaG9sZCBpcyBlbmZvcmNlZCBhdCBpdHMgZGVmYXVsdCB2YWx1ZSwgSEFTSF9CS1RfQ0FQ QUNJVFlfVEhSRVNILiAoSWYKKysgICAgKiB0aGUgYnVja2V0J3MgY2hhaW4gZXhjZWVkcyB0aGlz IGxlbmd0aCwgYnVja2V0IGV4cGFuc2lvbiBpcyB0cmlnZ2VyZWQpLgorKyAgICAqIEhvd2V2ZXIs IHNldHRpbmcgZXhwYW5kX211bHQgdG8gYSBub24temVybyB2YWx1ZSBkZWxheXMgYnVja2V0IGV4 cGFuc2lvbgorKyAgICAqICh0aGF0IHdvdWxkIGJlIHRyaWdnZXJlZCBieSBhZGRpdGlvbnMgdG8g dGhpcyBwYXJ0aWN1bGFyIGJ1Y2tldCkKKysgICAgKiB1bnRpbCBpdHMgY2hhaW4gbGVuZ3RoIHJl YWNoZXMgYSAqbXVsdGlwbGUqIG9mIEhBU0hfQktUX0NBUEFDSVRZX1RIUkVTSC4KKysgICAgKiAo VGhlIG11bHRpcGxpZXIgaXMgc2ltcGx5IGV4cGFuZF9tdWx0KzEpLiBUaGUgd2hvbGUgaWRlYSBv ZiB0aGlzCisrICAgICogbXVsdGlwbGllciBpcyB0byByZWR1Y2UgYnVja2V0IGV4cGFuc2lvbnMs IHNpbmNlIHRoZXkgYXJlIGV4cGVuc2l2ZSwgaW4KKysgICAgKiBzaXR1YXRpb25zIHdoZXJlIHdl IGtub3cgdGhhdCBhIHBhcnRpY3VsYXIgYnVja2V0IHRlbmRzIHRvIGJlIG92ZXJ1c2VkLgorKyAg ICAqIEl0IGlzIGJldHRlciB0byBsZXQgaXRzIGNoYWluIGxlbmd0aCBncm93IHRvIGEgbG9uZ2Vy IHlldC1zdGlsbC1ib3VuZGVkCisrICAgICogdmFsdWUsIHRoYW4gdG8gZG8gYW4gTyhuKSBidWNr ZXQgZXhwYW5zaW9uIHRvbyBvZnRlbi4KKysgICAgKi8KKysgICB1bnNpZ25lZCBleHBhbmRfbXVs dDsKKysKKyt9IFVUX2hhc2hfYnVja2V0OworKworKy8qIHJhbmRvbSBzaWduYXR1cmUgdXNlZCBv bmx5IHRvIGZpbmQgaGFzaCB0YWJsZXMgaW4gZXh0ZXJuYWwgYW5hbHlzaXMgKi8KKysjZGVmaW5l IEhBU0hfU0lHTkFUVVJFIDB4YTAxMTFmZTF1CisrI2RlZmluZSBIQVNIX0JMT09NX1NJR05BVFVS RSAweGIxMjIyMGYydQorKworK3R5cGVkZWYgc3RydWN0IFVUX2hhc2hfdGFibGUgeworKyAgIFVU X2hhc2hfYnVja2V0ICpidWNrZXRzOworKyAgIHVuc2lnbmVkIG51bV9idWNrZXRzLCBsb2cyX251 bV9idWNrZXRzOworKyAgIHVuc2lnbmVkIG51bV9pdGVtczsKKysgICBzdHJ1Y3QgVVRfaGFzaF9o YW5kbGUgKnRhaWw7IC8qIHRhaWwgaGggaW4gYXBwIG9yZGVyLCBmb3IgZmFzdCBhcHBlbmQgICAg Ki8KKysgICBwdHJkaWZmX3QgaGhvOyAvKiBoYXNoIGhhbmRsZSBvZmZzZXQgKGJ5dGUgcG9zIG9m IGhhc2ggaGFuZGxlIGluIGVsZW1lbnQgKi8KKysKKysgICAvKiBpbiBhbiBpZGVhbCBzaXR1YXRp b24gKGFsbCBidWNrZXRzIHVzZWQgZXF1YWxseSksIG5vIGJ1Y2tldCB3b3VsZCBoYXZlCisrICAg ICogbW9yZSB0aGFuIGNlaWwoI2l0ZW1zLyNidWNrZXRzKSBpdGVtcy4gdGhhdCdzIHRoZSBpZGVh bCBjaGFpbiBsZW5ndGguICovCisrICAgdW5zaWduZWQgaWRlYWxfY2hhaW5fbWF4bGVuOworKwor KyAgIC8qIG5vbmlkZWFsX2l0ZW1zIGlzIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGhhc2gg d2hvc2UgY2hhaW4gcG9zaXRpb24KKysgICAgKiBleGNlZWRzIHRoZSBpZGVhbCBjaGFpbiBtYXhs ZW4uIHRoZXNlIGl0ZW1zIHBheSB0aGUgcGVuYWx0eSBmb3IgYW4gdW5ldmVuCisrICAgICogaGFz aCBkaXN0cmlidXRpb247IHJlYWNoaW5nIHRoZW0gaW4gYSBjaGFpbiB0cmF2ZXJzYWwgdGFrZXMg PmlkZWFsIHN0ZXBzICovCisrICAgdW5zaWduZWQgbm9uaWRlYWxfaXRlbXM7CisrCisrICAgLyog aW5lZmZlY3RpdmUgZXhwYW5kcyBvY2N1ciB3aGVuIGEgYnVja2V0IGRvdWJsaW5nIHdhcyBwZXJm b3JtZWQsIGJ1dAorKyAgICAqIGFmdGVyd2FyZCwgbW9yZSB0aGFuIGhhbGYgdGhlIGl0ZW1zIGlu IHRoZSBoYXNoIGhhZCBub25pZGVhbCBjaGFpbgorKyAgICAqIHBvc2l0aW9ucy4gSWYgdGhpcyBo YXBwZW5zIG9uIHR3byBjb25zZWN1dGl2ZSBleHBhbnNpb25zIHdlIGluaGliaXQgYW55CisrICAg ICogZnVydGhlciBleHBhbnNpb24sIGFzIGl0J3Mgbm90IGhlbHBpbmc7IHRoaXMgaGFwcGVucyB3 aGVuIHRoZSBoYXNoCisrICAgICogZnVuY3Rpb24gaXNuJ3QgYSBnb29kIGZpdCBmb3IgdGhlIGtl eSBkb21haW4uIFdoZW4gZXhwYW5zaW9uIGlzIGluaGliaXRlZAorKyAgICAqIHRoZSBoYXNoIHdp bGwgc3RpbGwgd29yaywgYWxiZWl0IG5vIGxvbmdlciBpbiBjb25zdGFudCB0aW1lLiAqLworKyAg IHVuc2lnbmVkIGluZWZmX2V4cGFuZHMsIG5vZXhwYW5kOworKworKyAgIHVpbnQzMl90IHNpZ25h dHVyZTsgLyogdXNlZCBvbmx5IHRvIGZpbmQgaGFzaCB0YWJsZXMgaW4gZXh0ZXJuYWwgYW5hbHlz aXMgKi8KKysjaWZkZWYgSEFTSF9CTE9PTQorKyAgIHVpbnQzMl90IGJsb29tX3NpZzsgLyogdXNl ZCBvbmx5IHRvIHRlc3QgYmxvb20gZXhpc3RzIGluIGV4dGVybmFsIGFuYWx5c2lzICovCisrICAg dWludDhfdCAqYmxvb21fYnY7CisrICAgdWludDhfdCBibG9vbV9uYml0czsKKysjZW5kaWYKKysK Kyt9IFVUX2hhc2hfdGFibGU7CisrCisrdHlwZWRlZiBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgewor KyAgIHN0cnVjdCBVVF9oYXNoX3RhYmxlICp0Ymw7CisrICAgdm9pZCAqcHJldjsgICAgICAgICAg ICAgICAgICAgICAgIC8qIHByZXYgZWxlbWVudCBpbiBhcHAgb3JkZXIgICAgICAqLworKyAgIHZv aWQgKm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IGVsZW1lbnQgaW4gYXBwIG9y ZGVyICAgICAgKi8KKysgICBzdHJ1Y3QgVVRfaGFzaF9oYW5kbGUgKmhoX3ByZXY7ICAgLyogcHJl dmlvdXMgaGggaW4gYnVja2V0IG9yZGVyICAgICovCisrICAgc3RydWN0IFVUX2hhc2hfaGFuZGxl ICpoaF9uZXh0OyAgIC8qIG5leHQgaGggaW4gYnVja2V0IG9yZGVyICAgICAgICAqLworKyAgIGNv bnN0IHZvaWQgKmtleTsgICAgICAgICAgICAgICAgICAvKiBwdHIgdG8gZW5jbG9zaW5nIHN0cnVj dCdzIGtleSAgKi8KKysgICB1bnNpZ25lZCBrZXlsZW47ICAgICAgICAgICAgICAgICAgLyogZW5j bG9zaW5nIHN0cnVjdCdzIGtleSBsZW4gICAgICovCisrICAgdW5zaWduZWQgaGFzaHY7ICAgICAg ICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBoYXNoLWZjbihrZXkpICAgICAgICAqLworK30gVVRf aGFzaF9oYW5kbGU7CisrCisrI2VuZGlmIC8qIFVUSEFTSF9IICovCitkaWZmIC1OdXIgb3BlbnNz aC0xMC4zcDEub3JpZy92ZXJzaW9uLmggb3BlbnNzaC0xMC4zcDEvdmVyc2lvbi5oCistLS0gb3Bl bnNzaC0xMC4zcDEub3JpZy92ZXJzaW9uLmgJMjAyNi0wNy0wMiAwMDoyNzowNi4xMDUxOTU0NDYg KzAyMDAKKysrKyBvcGVuc3NoLTEwLjNwMS92ZXJzaW9uLmgJMjAyNi0wNy0wMiAwMjowNjo1NC4w OTA5NjU2MDggKzAyMDAKK0BAIC0xNiw1ICsxNiw2IEBACisgCisgI2RlZmluZSBTU0hfUE9SVEFC TEUJInAxIgorICNkZWZpbmUgR1NJX1BPUlRBQkxFCSJjLUdTSSIKKy0jZGVmaW5lIFNTSF9SRUxF QVNFCVNTSF9WRVJTSU9OIFNTSF9QT1JUQUJMRSBHU0lfUE9SVEFCTEUgXAorKyNkZWZpbmUgU1NI X0hQTgkJIl9ocG4xOC45LjAiCisrI2RlZmluZSBTU0hfUkVMRUFTRQlTU0hfVkVSU0lPTiBTU0hf UE9SVEFCTEUgR1NJX1BPUlRBQkxFIFNTSF9IUE4gXAorIAkJCUdTSV9WRVJTSU9OIEtSQjVfVkVS U0lPTgoKZGlmZiAtLWdpdCBhL2dzaS1vcGVuc3NoLnNwZWMgYi9nc2ktb3BlbnNzaC5zcGVjCmlu ZGV4IDc4NzllODkuLjc3NGZmNTggMTAwNjQ0Ci0tLSBhL2dzaS1vcGVuc3NoLnNwZWMKKysrIGIv Z3NpLW9wZW5zc2guc3BlYwpAQCAtMjMsMTIgKzIzLDEyIEBACiAjIERvIHdlIHdhbnQgbGliZWRp dCBzdXBwb3J0CiAlZ2xvYmFsIGxpYmVkaXQgMQogCi0lZ2xvYmFsIG9wZW5zc2hfdmVyIDEwLjJw MQorJWdsb2JhbCBvcGVuc3NoX3ZlciAxMC4zcDEKIAogU3VtbWFyeTogQW4gaW1wbGVtZW50YXRp b24gb2YgdGhlIFNTSCBwcm90b2NvbCB3aXRoIEdTSSBhdXRoZW50aWNhdGlvbgogTmFtZTogZ3Np LW9wZW5zc2gKIFZlcnNpb246ICV7b3BlbnNzaF92ZXJ9Ci1SZWxlYXNlOiAyJXs/ZGlzdH0KK1Jl bGVhc2U6IDElez9kaXN0fQogUHJvdmlkZXM6IGdzaXNzaCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNl fQogT2Jzb2xldGVzOiBnc2lzc2ggPCA1LjhwMi0yCiBVUkw6IGh0dHA6Ly93d3cub3BlbnNzaC5j b20vcG9ydGFibGUuaHRtbApAQCAtNDgsMTYxICs0OCw5MCBAQCBTb3VyY2UyMDogZ3Npc3NoLWhv c3Qta2V5cy1taWdyYXRpb24uc2gKIFNvdXJjZTIxOiBnc2lzc2gtaG9zdC1rZXlzLW1pZ3JhdGlv bi5zZXJ2aWNlCiBTb3VyY2U5OTogUkVBRE1FLnNzaGQtYW5kLWdzaXNzaGQKIAotI2h0dHBzOi8v YnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEgKFdPTlRGSVgpCi1QYXRj aDAwMDE6IDAwMDEtb3BlbnNzaC03LjhwMS1yb2xlLW1scy5wYXRjaAotUGF0Y2gwMDAyOiAwMDAy LW9wZW5zc2gtNi42cDEta2V5Y2F0LnBhdGNoCi0jaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9y Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NAotUGF0Y2gwMDAzOiAwMDAzLW9wZW5zc2gtNi42cDEtYWxs b3ctaXAtb3B0cy5wYXRjaAotIyhkcm9wPykgaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9z aG93X2J1Zy5jZ2k/aWQ9MTkyNQotUGF0Y2gwMDA0OiAwMDA0LW9wZW5zc2gtNS45cDEtaXB2Nm1h bi5wYXRjaAotUGF0Y2gwMDA1OiAwMDA1LW9wZW5zc2gtNS44cDItc2lncGlwZS5wYXRjaAotUGF0 Y2gwMDA2OiAwMDA2LW9wZW5zc2gtNy4ycDIteDExLnBhdGNoCi1QYXRjaDAwMDc6IDAwMDctb3Bl bnNzaC01LjFwMS1hc2twYXNzLXByb2dyZXNzLnBhdGNoCi0jaHR0cHM6Ly9idWd6aWxsYS5yZWRo YXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xOTgzMzIKLVBhdGNoMDAwODogMDAwOC1vcGVuc3NoLTQu M3AyLWFza3Bhc3MtZ3JhYi1pbmZvLnBhdGNoCi0jaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9y Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNSAoV09OVEZJWCkKLVBhdGNoMDAwOTogMDAwOS1vcGVuc3No LTguN3AxLXJlZGhhdC5wYXRjaAotIyB3YXJuIHVzZXJzIGZvciB1bnN1cHBvcnRlZCBVc2VQQU09 bm8gKCM3NTc1NDUpCi1QYXRjaDAwMTA6IDAwMTAtb3BlbnNzaC03LjhwMS1Vc2VQQU0td2Fybmlu Zy5wYXRjaAotIyBHU1NBUEkgS2V5IEV4Y2hhbmdlIChSRkMgNDQ2MiArIFJGQyA4NzMyKQotUGF0 Y2gwMDExOiAwMDExLW9wZW5zc2gtOS42cDEtZ3NzYXBpLWtleWV4LnBhdGNoCi0jaHR0cDovL3d3 dy5tYWlsLWFyY2hpdmUuY29tL2tlcmJlcm9zQG1pdC5lZHUvbXNnMTc1OTEuaHRtbAotUGF0Y2gw MDEyOiAwMDEyLW9wZW5zc2gtNi42cDEtZm9yY2Vfa3JiLnBhdGNoCi0jIEltcHJvdmUgY2NhY2hl IGhhbmRsaW5nIGluIG9wZW5zc2ggKCM5OTExODYsICMxMTk5MzYzLCAjMTU2NjQ5NCkKLSMgaHR0 cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc3NQotUGF0Y2gwMDEz OiAwMDEzLW9wZW5zc2gtNy43cDEtZ3NzYXBpLW5ldy11bmlxdWUucGF0Y2gKLSMgUmVzcGVjdCBr NWxvZ2luX2RpcmVjdG9yeSBvcHRpb24gaW4ga3JrNS5jb25mICgjMTMyODI0MykKLVBhdGNoMDAx NDogMDAxNC1vcGVuc3NoLTcuMnAyLWs1bG9naW5fZGlyZWN0b3J5LnBhdGNoCi0jaHR0cHM6Ly9i dWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MAotUGF0Y2gwMDE1OiAwMDE1 LW9wZW5zc2gtNi42cDEta3VzZXJvay5wYXRjaAotIyBVc2UgdHR5IGFsbG9jYXRpb24gZm9yIGEg cmVtb3RlIHNjcCAoIzk4NTY1MCkKLVBhdGNoMDAxNjogMDAxNi1vcGVuc3NoLTYuNHAxLWZyb210 by1yZW1vdGUucGF0Y2gKLSMgbG9nIHZpYSBtb25pdG9yIGluIGNocm9vdHMgd2l0aG91dCAvZGV2 L2xvZyAoIzI2ODEpCi1QYXRjaDAwMTc6IDAwMTctb3BlbnNzaC02LjYuMXAxLWxvZy1pbi1jaHJv b3QucGF0Y2gKLSMgc2NwIGZpbGUgaW50byBub24tZXhpc3RpbmcgZGlyZWN0b3J5ICgjMTE0MjIy MykKLVBhdGNoMDAxODogMDAxOC1vcGVuc3NoLTYuNi4xcDEtc2NwLW5vbi1leGlzdGluZy1kaXJl Y3RvcnkucGF0Y2gKLSMgYWRkIG5ldyBvcHRpb24gR1NTQVBJRW5hYmxlazV1c2VycyBhbmQgZGlz YWJsZSB1c2luZyB+Ly5rNXVzZXJzIGJ5IGRlZmF1bHQgKCMxMTY5ODQzKQotIyBDVkUtMjAxNC05 Mjc4Ci1QYXRjaDAwMTk6IDAwMTktb3BlbnNzaC02LjZwMS1HU1NBUElFbmFibGVrNXVzZXJzLnBh dGNoCi0jIGFwcGx5IHVwc3RyZWFtIHBhdGNoIGFuZCBtYWtlIHNzaGQgLVQgbW9yZSBjb25zaXN0 ZW50ICgjMTE4NzUyMSkKLVBhdGNoMDAyMDogMDAyMC1vcGVuc3NoLTYuOHAxLXNzaGRULW91dHB1 dC5wYXRjaAotIyBBZGQgc2Z0cCBvcHRpb24gdG8gZm9yY2UgbW9kZSBvZiBjcmVhdGVkIGZpbGVz ICgjMTE5MTA1NSkKLVBhdGNoMDAyMTogMDAyMS1vcGVuc3NoLTYuN3AxLXNmdHAtZm9yY2UtcGVy bWlzc2lvbi5wYXRjaAotIyBtYWtlIHMzOTAgdXNlIC9kZXYvIGNyeXB0byBkZXZpY2VzIC0tIGln bm9yZSBjbG9zZWZyb20KLVBhdGNoMDAyMjogMDAyMi1vcGVuc3NoLTcuMnAyLXMzOTAtY2xvc2Vm cm9tLnBhdGNoCi0jIFBhc3MgaW5ldGQgZmxhZ3MgZm9yIFNFTGludXggZG93biB0byBvcGVuYnNk IGNvbXBhdCBsZXZlbAotUGF0Y2gwMDIzOiAwMDIzLW9wZW5zc2gtNy42cDEtY2xlYW51cC1zZWxp bnV4LnBhdGNoCi0jIFNhbmRib3ggYWRqdXN0bWVudHMgZm9yIHMzOTAgYW5kIGF1ZGl0Ci1QYXRj aDAwMjQ6IDAwMjQtb3BlbnNzaC03LjVwMS1zYW5kYm94LnBhdGNoCi0jIFVuYnJlYWsgc2NwIGJl dHdlZW4gdHdvIElQdjYgaG9zdHMgKCMxNjIwMzMzKQotUGF0Y2gwMDI1OiAwMDI1LW9wZW5zc2gt Ny44cDEtc2NwLWlwdjYucGF0Y2gKLSMgTWVudGlvbiBjcnlwdG8tcG9saWNpZXMgaW4gbWFudWFs IHBhZ2VzICgjMTY2ODMyNSkKLSMgY2xhcmlmeSByaGJ6IzIwNjg0MjMgb24gdGhlIG1hbiBwYWdl IG9mIHNzaF9jb25maWcKLVBhdGNoMDAyNjogMDAyNi1vcGVuc3NoLTguMHAxLWNyeXB0by1wb2xp Y2llcy5wYXRjaAotIyBVc2UgT3BlblNTTCBLREYgKCMxNjMxNzYxKQotUGF0Y2gwMDI3OiAwMDI3 LW9wZW5zc2gtOC4wcDEtb3BlbnNzbC1rZGYucGF0Y2gKLSMgc2stZHVtbXkuc28gYnVpbHQgd2l0 aCAtZnZpc2liaWxpdHk9aGlkZGVuIGRvZXMgbm90IHdvcmsKLVBhdGNoMDAyODogMDAyOC1vcGVu c3NoLTguMnAxLXZpc2liaWxpdHkucGF0Y2gKLSMgRG8gbm90IGJyZWFrIFgxMSB3aXRob3V0IElQ djYKLVBhdGNoMDAyOTogMDAyOS1vcGVuc3NoLTguMnAxLXgxMS13aXRob3V0LWlwdjYucGF0Y2gK LSMgc3NoZCBwcm92aWRlcyBQQU0gYW4gaW5jb3JyZWN0IGVycm9yIGNvZGUgKCMxODc5NTAzKQot UGF0Y2gwMDMwOiAwMDMwLW9wZW5zc2gtOC4wcDEtcHJlc2VydmUtcGFtLWVycm9ycy5wYXRjaAot IyBJbXBsZW1lbnQga2lsbCBzd2l0Y2ggZm9yIFNDUCBwcm90b2NvbAotUGF0Y2gwMDMxOiAwMDMx LW9wZW5zc2gtOC43cDEtc2NwLWtpbGwtc3dpdGNoLnBhdGNoCi0jIFdvcmthcm91bmQgZm9yIGxh Y2sgb2Ygc2Z0cF9yZWFscGF0aCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBSSEVMCi0jIGh0dHBzOi8v YnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MjAzODg1NAotIyBodHRwczovL2dp dGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBvcnRhYmxlL3B1bGwvMjk5Ci0jIGRvd25zdHJlYW0g b25seQotUGF0Y2gwMDMyOiAwMDMyLW9wZW5zc2gtOC43cDEtcmVjdXJzaXZlLXNjcC5wYXRjaAot IyBEb3duc3RyZWFtIGFsaWFzIGZvciBNaW5SU0FCaXRzCi1QYXRjaDAwMzM6IDAwMzMtb3BlbnNz aC04LjdwMS1taW5yc2FiaXRzLnBhdGNoCi0jIGRvd25zdHJlYW0gb25seSwgSUJNQ0EgdGVudGF0 aXZlIGZpeAotIyBGcm9tIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/ aWQ9MTk3NjIwMiNjMTQKK1BhdGNoMDAwMTogMDAwMS1BZGQtU0VMaW51eC1yb2xlLWFuZC1NTFMt TXVsdGktTGV2ZWwtU2VjdXJpdHktc3VwcG9yLnBhdGNoCitQYXRjaDAwMDI6IDAwMDItSW1wbGVt ZW50LVNFTGludXgtZW52aXJvbm1lbnQtdmFyaWFibGUtc2V0dXAtZm9yLXN1Yi5wYXRjaAorUGF0 Y2gwMDAzOiAwMDAzLVBhc3MtaW5ldGQtZmxhZ3MtYW5kLWF1dGgtY29udGV4dC10by1zdWJwcm9j ZXNzLWNhbGwucGF0Y2gKK1BhdGNoMDAwNDogMDAwNC1vcGVuc3NoLTYuNnAxLWtleWNhdC5wYXRj aAorUGF0Y2gwMDA1OiAwMDA1LW9wZW5zc2gtNi42cDEtYWxsb3ctaXAtb3B0cy5wYXRjaAorUGF0 Y2gwMDA2OiAwMDA2LW9wZW5zc2gtNS45cDEtaXB2Nm1hbi5wYXRjaAorUGF0Y2gwMDA3OiAwMDA3 LW9wZW5zc2gtNS44cDItc2lncGlwZS5wYXRjaAorUGF0Y2gwMDA4OiAwMDA4LW9wZW5zc2gtNy4y cDIteDExLnBhdGNoCitQYXRjaDAwMDk6IDAwMDktb3BlbnNzaC01LjFwMS1hc2twYXNzLXByb2dy ZXNzLnBhdGNoCitQYXRjaDAwMTA6IDAwMTAtb3BlbnNzaC00LjNwMi1hc2twYXNzLWdyYWItaW5m by5wYXRjaAorUGF0Y2gwMDExOiAwMDExLW9wZW5zc2gtOC43cDEtcmVkaGF0LnBhdGNoCitQYXRj aDAwMTI6IDAwMTItb3BlbnNzaC03LjhwMS1Vc2VQQU0td2FybmluZy5wYXRjaAorUGF0Y2gwMDEz OiAwMDEzLW9wZW5zc2gtOS42cDEtZ3NzYXBpLWtleWV4LnBhdGNoCitQYXRjaDAwMTQ6IDAwMTQt b3BlbnNzaC02LjZwMS1mb3JjZV9rcmIucGF0Y2gKK1BhdGNoMDAxNTogMDAxNS1vcGVuc3NoLTcu N3AxLWdzc2FwaS1uZXctdW5pcXVlLnBhdGNoCitQYXRjaDAwMTY6IDAwMTYtb3BlbnNzaC03LjJw Mi1rNWxvZ2luX2RpcmVjdG9yeS5wYXRjaAorUGF0Y2gwMDE3OiAwMDE3LW9wZW5zc2gtNi42cDEt a3VzZXJvay5wYXRjaAorUGF0Y2gwMDE4OiAwMDE4LW9wZW5zc2gtNi40cDEtZnJvbXRvLXJlbW90 ZS5wYXRjaAorUGF0Y2gwMDE5OiAwMDE5LW9wZW5zc2gtNi42LjFwMS1sb2ctaW4tY2hyb290LnBh dGNoCitQYXRjaDAwMjA6IDAwMjAtb3BlbnNzaC02LjYuMXAxLXNjcC1ub24tZXhpc3RpbmctZGly ZWN0b3J5LnBhdGNoCitQYXRjaDAwMjE6IDAwMjEtb3BlbnNzaC02LjZwMS1HU1NBUElFbmFibGVr NXVzZXJzLnBhdGNoCitQYXRjaDAwMjI6IDAwMjItb3BlbnNzaC02LjhwMS1zc2hkVC1vdXRwdXQu cGF0Y2gKK1BhdGNoMDAyMzogMDAyMy1vcGVuc3NoLTYuN3AxLXNmdHAtZm9yY2UtcGVybWlzc2lv bi5wYXRjaAorUGF0Y2gwMDI0OiAwMDI0LW9wZW5zc2gtNy4ycDItczM5MC1jbG9zZWZyb20ucGF0 Y2gKK1BhdGNoMDAyNTogMDAyNS1vcGVuc3NoLTcuNXAxLXNhbmRib3gucGF0Y2gKK1BhdGNoMDAy NjogMDAyNi1vcGVuc3NoLTcuOHAxLXNjcC1pcHY2LnBhdGNoCitQYXRjaDAwMjc6IDAwMjctb3Bl bnNzaC04LjBwMS1jcnlwdG8tcG9saWNpZXMucGF0Y2gKK1BhdGNoMDAyODogMDAyOC1vcGVuc3No LTguMHAxLW9wZW5zc2wta2RmLnBhdGNoCitQYXRjaDAwMjk6IDAwMjktb3BlbnNzaC04LjJwMS12 aXNpYmlsaXR5LnBhdGNoCitQYXRjaDAwMzA6IDAwMzAtb3BlbnNzaC04LjJwMS14MTEtd2l0aG91 dC1pcHY2LnBhdGNoCitQYXRjaDAwMzE6IDAwMzEtb3BlbnNzaC04LjBwMS1wcmVzZXJ2ZS1wYW0t ZXJyb3JzLnBhdGNoCitQYXRjaDAwMzI6IDAwMzItb3BlbnNzaC04LjdwMS1zY3Ata2lsbC1zd2l0 Y2gucGF0Y2gKK1BhdGNoMDAzMzogMDAzMy1vcGVuc3NoLTguN3AxLXJlY3Vyc2l2ZS1zY3AucGF0 Y2gKIFBhdGNoMDAzNDogMDAzNC1vcGVuc3NoLTguN3AxLWlibWNhLnBhdGNoCi0jaHR0cHM6Ly9i dWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMgotIyBodHRwczovL2J1Z3pp bGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTExNzEyNDgKLSMgcmVjb3JkIHBmcz0gZmll bGQgaW4gQ1JZUFRPX1NFU1NJT04gYXVkaXQgZXZlbnQKIFBhdGNoMDAzNTogMDAzNS1vcGVuc3No LTcuNnAxLWF1ZGl0LnBhdGNoCi0jIEF1ZGl0IHJhY2UgY29uZGl0aW9uIGluIGZvcmtlZCBjaGls ZCAoIzEzMTA2ODQpCiBQYXRjaDAwMzY6IDAwMzYtb3BlbnNzaC03LjFwMi1hdWRpdC1yYWNlLWNv bmRpdGlvbi5wYXRjaAotIyBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dp P2lkPTIwNDk5NDcKIFBhdGNoMDAzNzogMDAzNy1vcGVuc3NoLTkuMHAxLWF1ZGl0LWxvZy5wYXRj aAogUGF0Y2gwMDM4OiAwMDM4LW9wZW5zc2gtNy43cDEtZmlwcy5wYXRjaAotIyBBZGQgbWlzc2lu ZyBvcHRpb25zIGZyb20gc3NoX2NvbmZpZyBpbnRvIHNzaCBtYW5wYWdlCi0jIHVwc3RyZWFtIGJ1 ZzoKLSMgaHR0cHM6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ1NQot UGF0Y2gwMDM5OiAwMDM5LW9wZW5zc2gtOC43cDEtc3NoLW1hbnBhZ2UucGF0Y2gKLSMgRG9uJ3Qg cHJvcG9zZSBkaXNhbGxvd2VkIGFsZ29yaXRobXMgZHVyaW5nIGhvc3RrZXkgbmVnb3RpYXRpb24K LSMgdXBzdHJlYW0gTVI6Ci0jIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoL29wZW5zc2gtcG9y dGFibGUvcHVsbC8zMjMKLVBhdGNoMDA0MDogMDA0MC1vcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1z dXBwb3J0ZWQtYWxncy5wYXRjaAotUGF0Y2gwMDQxOiAwMDQxLW9wZW5zc2gtOS4wcDEtZXZwLWZp cHMta2V4LnBhdGNoCi1QYXRjaDAwNDI6IDAwNDItb3BlbnNzaC04LjdwMS1ub2hvc3RzaGExcHJv b2YucGF0Y2gKLVBhdGNoMDA0MzogMDA0My1vcGVuc3NoLTkuOXAxLXNlcGFyYXRlLWtleXNpZ24u cGF0Y2gKLVBhdGNoMDA0NDogMDA0NC1vcGVuc3NoLTkuOXAxLW9wZW5zc2wtbWxrZW0ucGF0Y2gK LSMgaHR0cHM6Ly93d3cub3BlbndhbGwuY29tL2xpc3RzL29zcy1zZWN1cml0eS8yMDI1LzAyLzIy LzEKLVBhdGNoMDA0NTogMDA0NS1vcGVuc3NoLTkuOXAyLWVycm9yX3Byb2Nlc3NpbmcucGF0Y2gK LSMgaHR0cHM6Ly9naXRodWIuY29tL29wZW5zc2gvb3BlbnNzaC1wb3J0YWJsZS9wdWxsLzU2NAot UGF0Y2gwMDQ2OiAwMDQ2LVByb3ZpZGUtYmV0dGVyLWVycm9yLWZvci1ub24tc3VwcG9ydGVkLXBy aXZhdGUta2V5cy5wYXRjaAotIyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNzaC9vcGVuc3NoLXBv cnRhYmxlL3B1bGwvNTY3Ci1QYXRjaDAwNDc6IDAwNDctSWdub3JlLWJhZC1ob3N0a2V5cy1pbi1r bm93bl9ob3N0cy1maWxlLnBhdGNoCi0jIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3NoL29wZW5z c2gtcG9ydGFibGUvcHVsbC81MDAKLVBhdGNoMDA0ODogMDA0OC1zdXBwb3J0LWF1dGhlbnRpY2F0 aW9uLWluZGljYXRvcnMtaW4tR1NTQVBJLnBhdGNoCi1QYXRjaDAwNDk6IDAwNDktTklTVC1jdXJ2 ZXMtaHlicmlkLUtFWC1pbXBsZW1lbnRhdGlvbi5wYXRjaAotIyBsYW5kZWQgdXBzdHJlYW0sIHRv IGJlIHJlbW92ZWQgYWZ0ZXIgMTAuMwotUGF0Y2gwMDUwOiAwMDUwLVByb3ZpZGUtYS13YXktdG8t ZGlzYWJsZS1HU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzLXMucGF0Y2gKLSMgTW92ZSBNQVhfRElT UExBWVMgdG8gYSBjb25maWd1cmF0aW9uIG9wdGlvbiAoIzEzNDEzMDIpCi1QYXRjaDAwNTE6IDAw NTEtb3BlbnNzaC03LjNwMS14MTEtbWF4LWRpc3BsYXlzLnBhdGNoCi0jIFBLQ1MjMTEgVVJJcyAo dXBzdHJlYW0gIzI4MTcsIHNlcmlvdXNseSByZXdvcmtlZCBvbiByZWJhc2luZyB0byAxMC4yKQot IyBodHRwczovL2dpdGh1Yi5jb20vSmFrdWplL29wZW5zc2gtcG9ydGFibGUvY29tbWl0cy9qamVs ZW4tcGtjczExCi1QYXRjaDAwNTI6IDAwNTItb3BlbnNzaC0xMC4ycDEtcGtjczExLXVyaS5wYXRj aAotIyBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTI0MjM5MDAK LVBhdGNoMDA1MzogMDA1My1vcGVuc3NoLTEwLjJwMS1wYW0tYXV0aC5wYXRjaAotIyB1cHN0cmVh bSA0ODdlOGFjMTQ2ZjdkNjYxNmY2NWMxMjVkNWVkYjIxMDUxOWI4MzNhCi1QYXRjaDAwNTQ6IDAw NTQtb3BlbnNzaC05LjlwMS1zY3AtY2xlYXItc2V0dWlkLnBhdGNoCi0jIHVwc3RyZWFtIGM4MDVi OTdiNjdjNzc0ZTBiZjkyMmZmYjI5ZGZiY2RhOWQ3YjVhZGQKLVBhdGNoMDA1NTogMDA1NS1vcGVu c3NoLTkuOXAxLW11eC1hc2twYXNzLWNoZWNrLnBhdGNoCi0jIHVwc3RyZWFtIGZkMWM3ZTEzMWYz MzE5NDJkMjBmNDJmMzFlNzk5MTJkNTcwMDgxZmEKLVBhdGNoMDA1NjogMDA1Ni1vcGVuc3NoLTku OXAxLWVjZHNhLWluY29tcGxldGUtYXBwbGljYXRpb24ucGF0Y2gKLSMgdXBzdHJlYW0gZmQxYzdl MTMxZjMzMTk0MmQyMGY0MmYzMWU3OTkxMmQ1NzAwODFmYQotUGF0Y2gwMDU3OiAwMDU3LW9wZW5z c2gtOS45cDEtYXV0aG9yaXplZC1rZXlzLXByaW5jaXBsZXMtb3B0aW9uLnBhdGNoCi0jIHVwc3Ry ZWFtIDc2Njg1YzliMDlhNjY0MzVjZDJhZDgzNzMyNDZhZGYxYzUzOTc2ZDMKLSMgdXBzdHJlYW0g MGEwZWY0NTE1MzYxMTQzY2FkMjFhZmEwNzIzMTk4MjM4NTRjMWNmNgotIyB1cHN0cmVhbSA2MDdi ZDg3MWVjMDI5ZTlhYTIyZTYzMmEyMjU0NzI1MGYzY2FlMjIzCi0jIHVwc3RyZWFtIDEzNDBkM2Zh OGU0YmIxMjI5MDZhODIxNTljNGM5YjkxNTg0ZDY1Y2UKLVBhdGNoMDA1ODogMDA1OC1vcGVuc3No LTEwLjJwMS1wcm94eWp1bXAtdXNlcm5hbWUtdmFsaWRpdHktY2hlY2tzLnBhdGNoCi0jIHVwc3Ry ZWFtIDYwN2YzMzc2MzdmMjA3N2IzNGE5ZjZmOTZmYzI0MjM3MjU1ZmUxNzUKLVBhdGNoMDA1OTog MDA1OS1vcGVuc3NoLTEwLjJwMS1kb3duZ3JhZGUtdXNlbGVzcy1lcnJvci1kZWJ1Zy5wYXRjaAot I2h0dHBzOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1ODEKK1BhdGNo MDAzOTogMDAzOS1vcGVuc3NoLTguN3AxLW5lZ290aWF0ZS1zdXBwb3J0ZWQtYWxncy5wYXRjaAor UGF0Y2gwMDQwOiAwMDQwLW9wZW5zc2gtOS4wcDEtZXZwLWZpcHMta2V4LnBhdGNoCitQYXRjaDAw NDE6IDAwNDEtb3BlbnNzaC04LjdwMS1ub2hvc3RzaGExcHJvb2YucGF0Y2gKK1BhdGNoMDA0Mjog MDA0Mi1vcGVuc3NoLTkuOXAxLXNlcGFyYXRlLWtleXNpZ24ucGF0Y2gKK1BhdGNoMDA0MzogMDA0 My1vcGVuc3NoLTkuOXAxLW9wZW5zc2wtbWxrZW0ucGF0Y2gKK1BhdGNoMDA0NDogMDA0NC1vcGVu c3NoLTkuOXAyLWVycm9yX3Byb2Nlc3NpbmcucGF0Y2gKK1BhdGNoMDA0NTogMDA0NS1Qcm92aWRl LWJldHRlci1lcnJvci1mb3Itbm9uLXN1cHBvcnRlZC1wcml2YXRlLWtleXMucGF0Y2gKK1BhdGNo MDA0NjogMDA0Ni1JZ25vcmUtYmFkLWhvc3RrZXlzLWluLWtub3duX2hvc3RzLWZpbGUucGF0Y2gK K1BhdGNoMDA0NzogMDA0Ny1zdXBwb3J0LWF1dGhlbnRpY2F0aW9uLWluZGljYXRvcnMtaW4tR1NT QVBJLnBhdGNoCitQYXRjaDAwNDg6IDAwNDgtTklTVC1jdXJ2ZXMtaHlicmlkLUtFWC1pbXBsZW1l bnRhdGlvbi5wYXRjaAorUGF0Y2gwMDQ5OiAwMDQ5LW9wZW5zc2gtNy4zcDEteDExLW1heC1kaXNw bGF5cy5wYXRjaAorUGF0Y2gwMDUwOiAwMDUwLUZpeC1zc2gtcGtjczExLWNsaWVudC1oZWxwZXIt dGVybWluYXRpb24ucGF0Y2gKK1BhdGNoMDA1MTogMDA1MS1vcGVuc3NoLTEwLjJwMS1wYW0tYXV0 aC5wYXRjaAorUGF0Y2gwMDUyOiAwMDUyLWdzc2FwaS1zNHUucGF0Y2gKK1BhdGNoMDA1MzogMDA1 My1vcGVuc3NoLTEwLjJwMS1wa2NzMTEtdXJpLnBhdGNoCitQYXRjaDAwNTQ6IDAwNTQtZ3NzYXBp LXRlc3RzLnBhdGNoCiBQYXRjaDEwMDA6IDEwMDAtb3BlbnNzaC02LjdwMS1jb3Zlcml0eS5wYXRj aAogCiAjIFRoaXMgaXMgdGhlIHBhdGNoIHRoYXQgYWRkcyBHU0kgc3VwcG9ydAogIyBCYXNlZCBv biBocG5faXNzaGQtZ3NpLjcuNXAxYi5wYXRjaCBmcm9tIEdsb2J1cyB1cHN0cmVhbQotUGF0Y2gy MDAwOiAyMDAwLW9wZW5zc2gtMTAuMnAxLWdzaXNzaC5wYXRjaAorUGF0Y2gyMDAwOiAyMDAwLW9w ZW5zc2gtMTAuM3AxLWdzaXNzaC5wYXRjaAogCiAjIFRoaXMgaXMgdGhlIEhQTiBwYXRjaAotIyBC YXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vcmFwaWVyMS9ocG4tc3NoLyB0YWc6IGhwbi0xOC44 LjAKLVBhdGNoMjAwMTogMjAwMS1vcGVuc3NoLTEwLjJwMS1ocG4tMTguOC4wLnBhdGNoCisjIEJh c2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9yYXBpZXIxL2hwbi1zc2gvIHRhZzogaHBuLTE4Ljku MAorUGF0Y2gyMDAxOiAyMDAxLW9wZW5zc2gtMTAuM3AxLWhwbi0xOC45LjAucGF0Y2gKIAogTGlj ZW5zZTogQlNELTMtQ2xhdXNlIEFORCBCU0QtMi1DbGF1c2UgQU5EIElTQyBBTkQgU1NILU9wZW5T U0ggQU5EIHNzaC1rZXlzY2FuIEFORCBzbnByaW50ZiBBTkQgTGljZW5zZVJlZi1GZWRvcmEtUHVi bGljLURvbWFpbiBBTkQgWDExLWRpc3RyaWJ1dGUtbW9kaWZpY2F0aW9ucy12YXJpYW50Ci1SZXF1 aXJlczogL3NiaW4vbm9sb2dpbgotUmVxdWlyZXM6IG9wZW5zc2wtbGlicyA+PSAzLjUuMAorUmVx dWlyZXM6IG9wZW5zc2wtbGlicyA+PSAxOjMuNS4wCiAKIEJ1aWxkUmVxdWlyZXM6IGF1dG9jb25m LCBhdXRvbWFrZSwgcGVybC1pbnRlcnByZXRlciwgcGVybC1nZW5lcmF0b3JzLCB6bGliLWRldmVs CiBCdWlsZFJlcXVpcmVzOiBhdWRpdC1saWJzLWRldmVsID49IDIuMC41CiBCdWlsZFJlcXVpcmVz OiB1dGlsLWxpbnV4LCBncm9mZgogQnVpbGRSZXF1aXJlczogcGFtLWRldmVsCi1CdWlsZFJlcXVp cmVzOiBvcGVuc3NsLWRldmVsID49IDMuNS4wCitCdWlsZFJlcXVpcmVzOiBvcGVuc3NsLWRldmVs ID49IDE6My41LjAKIEJ1aWxkUmVxdWlyZXM6IHN5c3RlbWQtZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6 IHN5c3RlbWQtcnBtLW1hY3JvcwogQnVpbGRSZXF1aXJlczogZ2NjIG1ha2UKIEJ1aWxkUmVxdWly ZXM6IHAxMS1raXQtZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6IGxpYmZpZG8yLWRldmVsCiBCdWlsZFJl cXVpcmVzOiBsaWJ4Y3J5cHQtZGV2ZWwKLVJlY29tbWVuZHM6IHAxMS1raXQKIAogJWlmICV7a2Vy YmVyb3M1fQogQnVpbGRSZXF1aXJlczoga3JiNS1kZXZlbAorQnVpbGRSZXF1aXJlczoga3JiNS13 b3Jrc3RhdGlvbgorQnVpbGRSZXF1aXJlczoga3JiNS1zZXJ2ZXIKK0J1aWxkUmVxdWlyZXM6IG5z c193cmFwcGVyCiAlZW5kaWYKIAogJWlmICV7Z3NpfQpAQCAtMjQyLDYgKzE3MSw3IEBAIFN1bW1h cnk6IFNTSCBzZXJ2ZXIgZGFlbW9uIHdpdGggR1NJIGF1dGhlbnRpY2F0aW9uCiBQcm92aWRlczog Z3Npc3NoLXNlcnZlciA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQogT2Jzb2xldGVzOiBnc2lzc2gt c2VydmVyIDwgNS44cDItMgogUmVxdWlyZXM6ICV7bmFtZX0gPSAle3ZlcnNpb259LSV7cmVsZWFz ZX0KK1JlcXVpcmVzOiAvc2Jpbi9ub2xvZ2luCiBSZXF1aXJlcyhwcmUpOiAvdXNyL3NiaW4vdXNl cmFkZAogUmVxdWlyZXM6IHBhbSA+PSAxLjAuMS0zCiBSZXF1aXJlczogY3J5cHRvLXBvbGljaWVz ID49IDIwMjIwODI0LTEKQEAgLTUwOCw2ICs0MzgsOSBAQCBmaQogJWdob3N0ICVhdHRyKDA2NDQs cm9vdCxyb290KSAle19sb2NhbHN0YXRlZGlyfS9saWIvLmdzaXNzaC1ob3N0LWtleXMtbWlncmF0 aW9uCiAKICVjaGFuZ2Vsb2cKKyogV2VkIEp1bCAwMSAyMDI2IE1hdHRpYXMgRWxsZXJ0IDxtYXR0 aWFzLmVsbGVydEBwaHlzaWNzLnV1LnNlPiAtIDEwLjNwMS0xCistIEJhc2VkIG9uIG9wZW5zc2gt MTAuM3AxLTQuZmM0NQorCiAqIFR1ZSBNYXkgMjYgMjAyNiBNYXR0aWFzIEVsbGVydCA8bWF0dGlh cy5lbGxlcnRAcGh5c2ljcy51dS5zZT4gLSAxMC4ycDEtMgogLSBCYXNlZCBvbiBvcGVuc3NoLTEw LjJwMS0xMC5mYzQ0CiAKCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRleCAzMThl NDg1Li41ZDg5MjI5IDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAgLTEsMyAr MSwzIEBACi1TSEE1MTIgKG9wZW5zc2gtMTAuMnAxLnRhci5neikgPSA2NmYzZGQ2NDYxNzllNzFh YWY0MWMzM2I2ZjE0YTIwN2RjODczZDcxZDI0ZjExYzEzMGE4OWRlZTMxN2VlNDUzOThiODE4ZTVi OTQ4ODdiNTkxMzI0MDk2NGEzODYzMGQ3YmNhM2U0ODFlMGYxZWZmMmU0MWQ5ZTFjZmRiZGZjNQot U0hBNTEyIChvcGVuc3NoLTEwLjJwMS50YXIuZ3ouYXNjKSA9IGYxZjcxNzAwYjFiMGIyMTE3YWVk NTA1NDg4Yjk4YjdlYmI1MWNlMjZlNTMxODRiMDhkZjBiMDdhYTJjNWExZTU0ZGM0ZDNjYmNiZTg3 MWI1YWQ4NDlhMmEwZTIyYjAyYWYzMThmZjIyYTY4Yzk4MGFiNTNiMDRiZTAzYzliZjNjCitTSEE1 MTIgKG9wZW5zc2gtMTAuM3AxLnRhci5neikgPSBjYjJiZDY3MDg2NDkxYzI1ZTMwNTg3OWI5MjRj M2RmYTgyMzY1MDJhNjBjN2YyNTBiMmZkMTdkMmQ5YTc5ZWJmYzJlNDBiMmY0M2U0MmRjZjU5OGNj NTEwOTk2ZTAwY2MwM2RmOWI4ZTM4ZjM0YmMyZGM3MWEzZDRmZjM3ODhmYQorU0hBNTEyIChvcGVu c3NoLTEwLjNwMS50YXIuZ3ouYXNjKSA9IDJjOGFmYmU1N2Y2NzEyZjE1OWFhM2ExNjBiNmZmYzQz Zjk0NWE5OGNjZDhlMTUxZmE2YTA0N2VhMzBiMzc2ZTVlMWNhYzg0NGE2NzhhNzg5OWRhODA3MDRi M2QyM2ZlZGE2MTJmZmFkYTFlZTAwM2Y0YzdmYjgyOTFmNDg0NjAwCiBTSEE1MTIgKGdwZ2tleS03 MzYwNjBCQS5ncGcpID0gZGY0NGYzZmRiY2QxZDU5NjcwNTM0OGM3ZjVhZWQzZjczOGM1ZjYyNmE1 NTk1NWUwNjQyZjdjNmMwODI5OTVjZjM2YTFiMTg5MWJiNDFiODcxNWNiMmFmZjM0ZmVmMWM4Nzdl MGVmZjBkMzUwN2RkMDBhMDU1YmE2OTU3NTdhMjEK