From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: new upstream version fixing CVE-2012-2110 Date: Tue, 09 Jun 2026 12:42:37 GMT Message-ID: <178100895708.1.5935098274197454513.rpms-openssl-e8c18345a4ed@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: e8c18345a4ed5b547db1ffbe7d83b0a6212f157d QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IGU4YzE4MzQ1YTRlZDViNTQ3ZGIxZmZiZTdkODNi MGE2MjEyZjE1N2QKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTItMDQtMjBUMTI6MjQ6MzkrMDI6MDAKU3RhdHMgIDogKzIxMjc2Ly0yMTUx OCBpbiAxMCBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3Jw bXMvb3BlbnNzbC9jL2U4YzE4MzQ1YTRlZDViNTQ3ZGIxZmZiZTdkODNiMGE2MjEyZjE1N2Q/YnJh bmNoPXJlYmFzZV80MGJldGEKCkxvZzoKbmV3IHVwc3RyZWFtIHZlcnNpb24gZml4aW5nIENWRS0y MDEyLTIxMTAKCi0tLQpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXgg MmU1YWI1ZC4uOWEzMDY0MiAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3Jl CkBAIC04LDMgKzgsNCBAQCBvcGVuc3NsLTEuMC4wYS11c2EudGFyLmJ6MgogL29wZW5zc2wtMS4w LjEtYmV0YTItdXNhLnRhci54egogL29wZW5zc2wtMS4wLjEtYmV0YTMtdXNhLnRhci54egogL29w ZW5zc2wtMS4wLjEtdXNhLnRhci54egorL29wZW5zc2wtMS4wLjFhLXVzYS50YXIueHoKCmRpZmYg LS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LWFsZ28tZG9jLnBhdGNoIGIvb3BlbnNzbC0xLjAu MC1iZXRhNC1hbGdvLWRvYy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYx OGYzZi4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGE0LWFsZ28tZG9jLnBhdGNoCisr KyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTQvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QuYWxnby1kb2Mgb3BlbnNzbC0xLjAuMC1i ZXRhNC9kb2MvY3J5cHRvL0VWUF9EaWdlc3RJbml0LnBvZAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QuYWxnby1kb2MJMjAwOS0xMC0xNiAxNzoy OTozNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2RvYy9jcnlwdG8v RVZQX0RpZ2VzdEluaXQucG9kCTIwMDktMTEtMTIgMTQ6MTM6MjEuMDAwMDAwMDAwICswMTAwCi1A QCAtNiw3ICs2LDggQEAgRVZQX01EX0NUWF9pbml0LCBFVlBfTURfQ1RYX2NyZWF0ZSwgRVZQXwot IEVWUF9EaWdlc3RGaW5hbF9leCwgRVZQX01EX0NUWF9jbGVhbnVwLCBFVlBfTURfQ1RYX2Rlc3Ry b3ksIEVWUF9NQVhfTURfU0laRSwKLSBFVlBfTURfQ1RYX2NvcHlfZXgsIEVWUF9NRF9DVFhfY29w eSwgRVZQX01EX3R5cGUsIEVWUF9NRF9wa2V5X3R5cGUsIEVWUF9NRF9zaXplLAotIEVWUF9NRF9i bG9ja19zaXplLCBFVlBfTURfQ1RYX21kLCBFVlBfTURfQ1RYX3NpemUsIEVWUF9NRF9DVFhfYmxv Y2tfc2l6ZSwgRVZQX01EX0NUWF90eXBlLAotLUVWUF9tZF9udWxsLCBFVlBfbWQyLCBFVlBfbWQ1 LCBFVlBfc2hhLCBFVlBfc2hhMSwgRVZQX2RzcywgRVZQX2RzczEsIEVWUF9tZGMyLAotK0VWUF9t ZF9udWxsLCBFVlBfbWQyLCBFVlBfbWQ1LCBFVlBfc2hhLCBFVlBfc2hhMSwgRVZQX3NoYTIyNCwK LStFVlBfc2hhMjU2LCBFVlBfc2hhMzg0LCBFVlBfc2hhNTEyLCBFVlBfZHNzLCBFVlBfZHNzMSwg RVZQX21kYzIsCi0gRVZQX3JpcGVtZDE2MCwgRVZQX2dldF9kaWdlc3RieW5hbWUsIEVWUF9nZXRf ZGlnZXN0YnluaWQsIEVWUF9nZXRfZGlnZXN0YnlvYmogLQotIEVWUCBkaWdlc3Qgcm91dGluZXMK LSAKLUBAIC01MSw2ICs1MiwxMCBAQCBFVlAgZGlnZXN0IHJvdXRpbmVzCi0gIGNvbnN0IEVWUF9N RCAqRVZQX21kNSh2b2lkKTsKLSAgY29uc3QgRVZQX01EICpFVlBfc2hhKHZvaWQpOwotICBjb25z dCBFVlBfTUQgKkVWUF9zaGExKHZvaWQpOwotKyBjb25zdCBFVlBfTUQgKkVWUF9zaGEyMjQodm9p ZCk7Ci0rIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTI1Nih2b2lkKTsKLSsgY29uc3QgRVZQX01EICpF VlBfc2hhMzg0KHZvaWQpOwotKyBjb25zdCBFVlBfTUQgKkVWUF9zaGE1MTIodm9pZCk7Ci0gIGNv bnN0IEVWUF9NRCAqRVZQX2Rzcyh2b2lkKTsKLSAgY29uc3QgRVZQX01EICpFVlBfZHNzMSh2b2lk KTsKLSAgY29uc3QgRVZQX01EICpFVlBfbWRjMih2b2lkKTsKLUBAIC03MCw3ICs3NSw3IEBAIEVW UF9NRF9DVFhfY3JlYXRlKCkgYWxsb2NhdGVzLCBpbml0aWFsaXoKLSAKLSBFVlBfRGlnZXN0SW5p dF9leCgpIHNldHMgdXAgZGlnZXN0IGNvbnRleHQgQjxjdHg+IHRvIHVzZSBhIGRpZ2VzdAotIEI8 dHlwZT4gZnJvbSBFTkdJTkUgQjxpbXBsPi4gQjxjdHg+IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVm b3JlIGNhbGxpbmcgdGhpcwotLWZ1bmN0aW9uLiBCPHR5cGU+IHdpbGwgdHlwaWNhbGx5IGJlIHN1 cHBsaWVkIGJ5IGEgZnVuY3Rpb25zdWNoIGFzIEVWUF9zaGExKCkuCi0rZnVuY3Rpb24uIEI8dHlw ZT4gd2lsbCB0eXBpY2FsbHkgYmUgc3VwcGxpZWQgYnkgYSBmdW5jdGlvbiBzdWNoIGFzIEVWUF9z aGExKCkuCi0gSWYgQjxpbXBsPiBpcyBOVUxMIHRoZW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRp b24gb2YgZGlnZXN0IEI8dHlwZT4gaXMgdXNlZC4KLSAKLSBFVlBfRGlnZXN0VXBkYXRlKCkgaGFz aGVzIEI8Y250PiBieXRlcyBvZiBkYXRhIGF0IEI8ZD4gaW50byB0aGUKLUBAIC0xMjcsOSArMTMy LDExIEBAIHdpdGggdGhpcyBkaWdlc3QuIEZvciBleGFtcGxlIEVWUF9zaGExKCkKLSByZXR1cm4g QjxOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uPi4gVGhpcyAibGluayIgYmV0d2VlbiBkaWdlc3Rz IGFuZCBzaWduYXR1cmUKLSBhbGdvcml0aG1zIG1heSBub3QgYmUgcmV0YWluZWQgaW4gZnV0dXJl IHZlcnNpb25zIG9mIE9wZW5TU0wuCi0gCi0tRVZQX21kMigpLCBFVlBfbWQ1KCksIEVWUF9zaGEo KSwgRVZQX3NoYTEoKSwgRVZQX21kYzIoKSBhbmQgRVZQX3JpcGVtZDE2MCgpCi0tcmV0dXJuIEI8 RVZQX01EPiBzdHJ1Y3R1cmVzIGZvciB0aGUgTUQyLCBNRDUsIFNIQSwgU0hBMSwgTURDMiBhbmQg UklQRU1EMTYwIGRpZ2VzdAotLWFsZ29yaXRobXMgcmVzcGVjdGl2ZWx5LiBUaGUgYXNzb2NpYXRl ZCBzaWduYXR1cmUgYWxnb3JpdGhtIGlzIFJTQSBpbiBlYWNoIGNhc2UuCi0rRVZQX21kMigpLCBF VlBfbWQ1KCksIEVWUF9zaGEoKSwgRVZQX3NoYTEoKSwgRVZQX3NoYTIyNCgpLCBFVlBfc2hhMjU2 KCksCi0rRVZQX3NoYTM4NCgpLCBFVlBfc2hhNTEyKCksIEVWUF9tZGMyKCkgYW5kIEVWUF9yaXBl bWQxNjAoKQotK3JldHVybiBCPEVWUF9NRD4gc3RydWN0dXJlcyBmb3IgdGhlIE1EMiwgTUQ1LCBT SEEsIFNIQTEsIFNIQTIyNCwgU0hBMjU2LCBTSEEzODQsCi0rU0hBNTEyLCBNREMyIGFuZCBSSVBF TUQxNjAgZGlnZXN0IGFsZ29yaXRobXMgcmVzcGVjdGl2ZWx5LiBUaGUgYXNzb2NpYXRlZAotK3Np Z25hdHVyZSBhbGdvcml0aG0gaXMgUlNBIGluIGVhY2ggY2FzZS4KLSAKLSBFVlBfZHNzKCkgYW5k IEVWUF9kc3MxKCkgcmV0dXJuIEI8RVZQX01EPiBzdHJ1Y3R1cmVzIGZvciBTSEEgYW5kIFNIQTEg ZGlnZXN0Ci0gYWxnb3JpdGhtcyBidXQgdXNpbmcgRFNTIChEU0EpIGZvciB0aGUgc2lnbmF0dXJl IGFsZ29yaXRobS4gTm90ZTogdGhlcmUgaXMgCi1AQCAtMTU4LDcgKzE2NSw4IEBAIEVWUF9NRF9z aXplKCksIEVWUF9NRF9ibG9ja19zaXplKCksIEVWUF8KLSBFVlBfTURfQ1RYX2Jsb2NrX3NpemUo KQlhbmQgRVZQX01EX2Jsb2NrX3NpemUoKSByZXR1cm4gdGhlIGRpZ2VzdCBvciBibG9jawotIHNp emUgaW4gYnl0ZXMuCi0gCi0tRVZQX21kX251bGwoKSwgRVZQX21kMigpLCBFVlBfbWQ1KCksIEVW UF9zaGEoKSwgRVZQX3NoYTEoKSwgRVZQX2RzcygpLAotK0VWUF9tZF9udWxsKCksIEVWUF9tZDIo KSwgRVZQX21kNSgpLCBFVlBfc2hhKCksIEVWUF9zaGExKCksCi0rRVZQX3NoYTIyNCgpLCBFVlBf c2hhMjU2KCksIEVWUF9zaGEzODQoKSwgRVZQX3NoYTUxMigpLCBFVlBfZHNzKCksCi0gRVZQX2Rz czEoKSwgRVZQX21kYzIoKSBhbmQgRVZQX3JpcGVtZDE2MCgpIHJldHVybiBwb2ludGVycyB0byB0 aGUKLSBjb3JyZXNwb25kaW5nIEVWUF9NRCBzdHJ1Y3R1cmVzLgotIAotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9kb2MvY3J5cHRvL0VWUF9FbmNyeXB0SW5pdC5wb2QuYWxnby1kb2Mgb3Bl bnNzbC0xLjAuMC1iZXRhNC9kb2MvY3J5cHRvL0VWUF9FbmNyeXB0SW5pdC5wb2QKLS0tLSBvcGVu c3NsLTEuMC4wLWJldGE0L2RvYy9jcnlwdG8vRVZQX0VuY3J5cHRJbml0LnBvZC5hbGdvLWRvYwky MDA1LTA0LTE1IDE4OjAxOjM1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTQvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9kCTIwMDktMTEtMTIgMTQ6MTE6MDMuMDAw MDAwMDAwICswMTAwCi1AQCAtOTEsNiArOTEsMzIgQEAgRVZQX0NJUEhFUl9DVFhfc2V0X3BhZGRp bmcgLSBFVlAgY2lwaGVyIAotICBpbnQgRVZQX0NJUEhFUl9wYXJhbV90b19hc24xKEVWUF9DSVBI RVJfQ1RYICpjLCBBU04xX1RZUEUgKnR5cGUpOwotICBpbnQgRVZQX0NJUEhFUl9hc24xX3RvX3Bh cmFtKEVWUF9DSVBIRVJfQ1RYICpjLCBBU04xX1RZUEUgKnR5cGUpOwotIAotKyBjb25zdCBFVlBf Q0lQSEVSICpFVlBfZGVzX2VkZTModm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNf ZWRlM19lY2Iodm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jZmI2NCh2 b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzX2NmYjEodm9pZCk7Ci0rIGNv bnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jZmI4KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQ SEVSICpFVlBfZGVzX2VkZTNfb2ZiKHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfZGVz X2VkZTNfY2JjKHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9lY2Iodm9p ZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2NiYyh2b2lkKTsKLSsgY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2ZiMSh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAq RVZQX2Flc18xMjhfY2ZiOCh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhf Y2ZiMTI4KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9vZmIodm9pZCk7 Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2VjYih2b2lkKTsKLSsgY29uc3QgRVZQ X0NJUEhFUiAqRVZQX2Flc18xOTJfY2JjKHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBf YWVzXzE5Ml9jZmIxKHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jZmI4 KHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jZmIxMjgodm9pZCk7Ci0r IGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX29mYih2b2lkKTsKLSsgY29uc3QgRVZQX0NJ UEhFUiAqRVZQX2Flc18yNTZfZWNiKHZvaWQpOwotKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVz XzI1Nl9jYmModm9pZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjEodm9p ZCk7Ci0rIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjgodm9pZCk7Ci0rIGNvbnN0 IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NmYjEyOCh2b2lkKTsKLSsgY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Flc18yNTZfb2ZiKHZvaWQpOwotKwotID1oZWFkMSBERVNDUklQVElPTgotIAotIFRo ZSBFVlAgY2lwaGVyIHJvdXRpbmVzIGFyZSBhIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIHRvIGNlcnRh aW4KLUBAIC0yOTcsNiArMzIzLDE4IEBAIFRocmVlIGtleSB0cmlwbGUgREVTIGluIENCQywgRUNC LCBDRkIgYW4KLSAKLSBERVNYIGFsZ29yaXRobSBpbiBDQkMgbW9kZS4KLSAKLSs9aXRlbSBFVlBf YWVzXzEyOF9jYmModm9pZCksIEVWUF9hZXNfMTI4X2VjYigpLCBFVlBfYWVzXzEyOF9vZmIodm9p ZCksIEVWUF9hZXNfMTI4X2NmYjEodm9pZCksIEVWUF9hZXNfMTI4X2NmYjgodm9pZCksIEVWUF9h ZXNfMTI4X2NmYjEyOCh2b2lkKQotKwotK0FFUyB3aXRoIDEyOCBiaXQga2V5IGxlbmd0aCBpbiBD QkMsIEVDQiwgT0ZCIGFuZCBDRkIgbW9kZXMgcmVzcGVjdGl2ZWx5LgotKwotKz1pdGVtIEVWUF9h ZXNfMTkyX2NiYyh2b2lkKSwgRVZQX2Flc18xOTJfZWNiKCksIEVWUF9hZXNfMTkyX29mYih2b2lk KSwgRVZQX2Flc18xOTJfY2ZiMSh2b2lkKSwgRVZQX2Flc18xOTJfY2ZiOCh2b2lkKSwgRVZQX2Fl c18xOTJfY2ZiMTI4KHZvaWQpCi0rCi0rQUVTIHdpdGggMTkyIGJpdCBrZXkgbGVuZ3RoIGluIENC QywgRUNCLCBPRkIgYW5kIENGQiBtb2RlcyByZXNwZWN0aXZlbHkuCi0rCi0rPWl0ZW0gRVZQX2Fl c18yNTZfY2JjKHZvaWQpLCBFVlBfYWVzXzI1Nl9lY2IoKSwgRVZQX2Flc18yNTZfb2ZiKHZvaWQp LCBFVlBfYWVzXzI1Nl9jZmIxKHZvaWQpLCBFVlBfYWVzXzI1Nl9jZmI4KHZvaWQpLCBFVlBfYWVz XzI1Nl9jZmIxMjgodm9pZCkKLSsKLStBRVMgd2l0aCAyNTYgYml0IGtleSBsZW5ndGggaW4gQ0JD LCBFQ0IsIE9GQiBhbmQgQ0ZCIG1vZGVzIHJlc3BlY3RpdmVseS4KLSsKLSA9aXRlbSBFVlBfcmM0 KHZvaWQpCi0gCi0gUkM0IHN0cmVhbSBjaXBoZXIuIFRoaXMgaXMgYSB2YXJpYWJsZSBrZXkgbGVu Z3RoIGNpcGhlciB3aXRoIGRlZmF1bHQga2V5IGxlbmd0aCAxMjggYml0cy4KCmRpZmYgLS1naXQg YS9vcGVuc3NsLTEuMC4xLWJhY2twb3J0LnBhdGNoIGIvb3BlbnNzbC0xLjAuMS1iYWNrcG9ydC5w YXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFhZjQwZi4uMDAwMDAwMAotLS0g YS9vcGVuc3NsLTEuMC4xLWJhY2twb3J0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICsw LDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEvYXBwcy9zX2NsaWVudC5jLmJhY2twb3J0IG9w ZW5zc2wtMS4wLjEvYXBwcy9zX2NsaWVudC5jCi0tLS0gb3BlbnNzbC0xLjAuMS9hcHBzL3NfY2xp ZW50LmMuYmFja3BvcnQJMjAxMi0wMy0xNCAyMToxNTowNC43MzY4OTc0NTkgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4xL2FwcHMvc19jbGllbnQuYwkyMDEyLTA0LTA1IDE5OjQ4OjQwLjQ2OTk5ODk2 NSArMDIwMAotQEAgLTYyMiwxMyArNjIyLDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotIAlTUlBfQVJHIHNycF9hcmcgPSB7TlVMTCxOVUxMLDAsMCwwLDEwMjR9OwotICNlbmRp ZgotIAotLSNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NTTDIpICYmICFkZWZpbmVkKE9QRU5TU0xf Tk9fU1NMMykKLSAJbWV0aD1TU0x2MjNfY2xpZW50X21ldGhvZCgpOwotLSNlbGlmICFkZWZpbmVk KE9QRU5TU0xfTk9fU1NMMykKLS0JbWV0aD1TU0x2M19jbGllbnRfbWV0aG9kKCk7Ci0tI2VsaWYg IWRlZmluZWQoT1BFTlNTTF9OT19TU0wyKQotLQltZXRoPVNTTHYyX2NsaWVudF9tZXRob2QoKTsK LS0jZW5kaWYKLSAKLSAJYXBwc19zdGFydHVwKCk7Ci0gCWNfUGF1c2U9MDsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjEvYXBwcy9zX3NlcnZlci5jLmJhY2twb3J0IG9wZW5zc2wtMS4wLjEvYXBwcy9z X3NlcnZlci5jCi0tLS0gb3BlbnNzbC0xLjAuMS9hcHBzL3Nfc2VydmVyLmMuYmFja3BvcnQJMjAx Mi0wMy0xNCAyMToxNTowNC42OTA4OTY1MTYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xL2FwcHMv c19zZXJ2ZXIuYwkyMDEyLTA0LTA1IDE5OjQ4OjQwLjQ3NDk5OTA3MiArMDIwMAotQEAgLTk2OSwx NyArOTY5LDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAJY2hhciAqc3Jw dXNlcnNlZWQgPSBOVUxMOwotIAljaGFyICpzcnBfdmVyaWZpZXJfZmlsZSA9IE5VTEw7Ci0gI2Vu ZGlmCi0tI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU1NMMikgJiYgIWRlZmluZWQoT1BFTlNTTF9O T19TU0wzKQotIAltZXRoPVNTTHYyM19zZXJ2ZXJfbWV0aG9kKCk7Ci0tI2VsaWYgIWRlZmluZWQo T1BFTlNTTF9OT19TU0wzKQotLQltZXRoPVNTTHYzX3NlcnZlcl9tZXRob2QoKTsKLS0jZWxpZiAh ZGVmaW5lZChPUEVOU1NMX05PX1NTTDIpCi0tCW1ldGg9U1NMdjJfc2VydmVyX21ldGhvZCgpOwot LSNlbGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTMSkKLS0JbWV0aD1UTFN2MV9zZXJ2ZXJfbWV0 aG9kKCk7Ci0tI2Vsc2UKLS0gIC8qICAjZXJyb3Igbm8gU1NMIHZlcnNpb24gZW5hYmxlZCAqLwot LSNlbmRpZgotIAotIAlsb2NhbF9hcmdjPWFyZ2M7Ci0gCWxvY2FsX2FyZ3Y9YXJndjsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjEvY3J5cHRvL2Flcy9hc20vYWVzLWFybXY0LnBsLmJhY2twb3J0IG9w ZW5zc2wtMS4wLjEvY3J5cHRvL2Flcy9hc20vYWVzLWFybXY0LnBsCi0tLS0gb3BlbnNzbC0xLjAu MS9jcnlwdG8vYWVzL2FzbS9hZXMtYXJtdjQucGwuYmFja3BvcnQJMjAxMi0wMy0xNCAyMToxNTow NC43Nzc4OTgyOTcgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xL2NyeXB0by9hZXMvYXNtL2Flcy1h cm12NC5wbAkyMDEyLTA0LTA1IDE5OjUxOjM1LjU1NTUyODE1NSArMDIwMAotQEAgLTQwOCw2ICs0 MDgsNyBAQCBfYXJtdjRfQUVTX2VuY3J5cHQ6Ci0gLnR5cGUgICBwcml2YXRlX0FFU19zZXRfZW5j cnlwdF9rZXksJWZ1bmN0aW9uCi0gLmFsaWduCTUKLSBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9r ZXk6Ci0rX2FybXY0X0FFU19zZXRfZW5jcnlwdF9rZXk6Ci0gCXN1YglyMyxwYywjOAkJQCBBRVNf c2V0X2VuY3J5cHRfa2V5Ci0gCXRlcQlyMCwjMAotIAltb3ZlcQlyMCwjLTEKLUBAIC00MjUsNyAr NDI2LDcgQEAgcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5OgotIAlibmUJLkxhYnJ0Ci0gCi0g LkxvazoJc3RtZGIgICBzcCEse3I0LXIxMixscn0KLS0Jc3ViCSR0YmwscjMsI3ByaXZhdGVfQUVT X3NldF9lbmNyeXB0X2tleS1BRVNfVGUtMTAyNAlAIFRlNAotKwlzdWIJJHRibCxyMywjX2FybXY0 X0FFU19zZXRfZW5jcnlwdF9rZXktQUVTX1RlLTEwMjQJQCBUZTQKLSAKLSAJbW92CSRyb3VuZHMs cjAJCUAgaW5wCi0gCW1vdglscixyMQkJCUAgYml0cwotQEAgLTY4NSw3ICs2ODYsNyBAQCBwcml2 YXRlX0FFU19zZXRfZW5jcnlwdF9rZXk6Ci0gLmFsaWduCTUKLSBwcml2YXRlX0FFU19zZXRfZGVj cnlwdF9rZXk6Ci0gCXN0cglscixbc3AsIy00XSEgICAgICAgICAgICBAIHB1c2ggbHIKLS0JYmwJ cHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5Ci0rCWJsCV9hcm12NF9BRVNfc2V0X2VuY3J5cHRf a2V5Ci0gCXRlcQlyMCwjMAotIAlsZHJuZQlscixbc3BdLCM0ICAgICAgICAgICAgICBAIHBvcCBs cgotIAlibmUJLkxhYnJ0Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xL2NyeXB0by9hZXMvYXNtL2Fl cy1zMzkweC5wbC5iYWNrcG9ydCBvcGVuc3NsLTEuMC4xL2NyeXB0by9hZXMvYXNtL2Flcy1zMzkw eC5wbAotLS0tIG9wZW5zc2wtMS4wLjEvY3J5cHRvL2Flcy9hc20vYWVzLXMzOTB4LnBsLmJhY2tw b3J0CTIwMTItMDMtMTQgMjE6MTU6MDQuNzgyODk4NDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MS9jcnlwdG8vYWVzL2FzbS9hZXMtczM5MHgucGwJMjAxMi0wNC0wNSAxOTo1MDo0MS4yOTA1OTMy NjcgKzAyMDAKLUBAIC03ODMsNiArNzgzLDcgQEAgJGNvZGUuPTw8X19fOwotIC50eXBlCXByaXZh dGVfQUVTX3NldF9lbmNyeXB0X2tleSxcQGZ1bmN0aW9uCi0gLmFsaWduCTE2Ci0gcHJpdmF0ZV9B RVNfc2V0X2VuY3J5cHRfa2V5OgotK19zMzkweF9BRVNfc2V0X2VuY3J5cHRfa2V5OgotIAlsZ2hp CSR0MCwwCi0gCWNsJHtnfXIJJGlucCwkdDAKLSAJamUJLkxtaW51czEKLUBAIC0xMDY4LDcgKzEw NjksNyBAQCAkY29kZS49PDxfX187Ci0gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5OgotIAlz dCR7Z30JJGtleSw0KiRTSVpFX1QoJHNwKQkjIEkgcmVseSBvbiBBRVNfc2V0X2VuY3J5cHRfa2V5 IHRvCi0gCXN0JHtnfQkkcmEsMTQqJFNJWkVfVCgkc3ApCSMgc2F2ZSBub24tdm9sYXRpbGUgcmVn aXN0ZXJzIQotLQlicmFzCSRyYSxBRVNfc2V0X2VuY3J5cHRfa2V5Ci0rCWJyYXMJJHJhLF9zMzkw eF9BRVNfc2V0X2VuY3J5cHRfa2V5Ci0gCWwke2d9CSRrZXksNCokU0laRV9UKCRzcCkKLSAJbCR7 Z30JJHJhLDE0KiRTSVpFX1QoJHNwKQotIAlsdGdyCSVyMiwlcjIKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjEvY3J5cHRvL2Flcy9hc20vdnBhZXMteDg2XzY0LnBsLmJhY2twb3J0IG9wZW5zc2wtMS4w LjEvY3J5cHRvL2Flcy9hc20vdnBhZXMteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0xLjAuMS9jcnlw dG8vYWVzL2FzbS92cGFlcy14ODZfNjQucGwuYmFja3BvcnQJMjAxMi0wMy0xNCAyMToxNTowNC43 Nzc4OTgyOTcgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xL2NyeXB0by9hZXMvYXNtL3ZwYWVzLXg4 Nl82NC5wbAkyMDEyLTA0LTA1IDE5OjQ4OjIyLjAzNjYwMzE1NyArMDIwMAotQEAgLTI2Myw3ICsy NjMsNyBAQCBfdnBhZXNfZGVjcnlwdF9jb3JlOgotIAlwc2h1ZmIgICV4bW0yLCAgJXhtbTQJIyA0 ID0gc2JvdQotIAlweG9yCSV4bW0wLCAgJXhtbTQJIyA0ID0gc2IxdSArIGsKLSAJbW92ZHFhCTB4 NzAoJXIxMCksICV4bW0wCSMgMCA6IHNib3QKLS0JbW92ZHFhCS5Ma19zci0uTGtfZHNiZCglcjEx KSwgJXhtbTIKLSsJbW92ZHFhCS0weDE2MCglcjExKSwgJXhtbTIJIyAuTGtfc3ItLkxrX2RzYmQ9 LTB4MTYwCi0gCXBzaHVmYiAgJXhtbTMsCSV4bW0wCSMgMCA9IHNiMXQKLSAJcHhvcgkleG1tNCwJ JXhtbTAJIyAwID0gQQotIAlwc2h1ZmIJJXhtbTIsCSV4bW0wCi1AQCAtODY5LDYgKzg2OSw4IEBA ICR7UFJFRklYfV9jYmNfZW5jcnlwdDoKLSBfX18KLSAoJGxlbiwka2V5KT0oJGtleSwkbGVuKTsK LSAkY29kZS49PDxfX187Ci0rCXN1YglcJDE2LCRsZW4KLSsJamMJLkxjYmNfYWJvcnQKLSBfX18K LSAkY29kZS49PDxfX18gaWYgKCR3aW42NCk7Ci0gCWxlYQktMHhiOCglcnNwKSwlcnNwCi1AQCAt ODg3LDcgKzg4OSw2IEBAIF9fXwotICRjb2RlLj08PF9fXzsKLSAJbW92ZHF1CSgkaXZwKSwleG1t NgkJIyBsb2FkIElWCi0gCXN1YgkkaW5wLCRvdXQKLS0Jc3ViCVwkMTYsJGxlbgotIAljYWxsCV92 cGFlc19wcmVoZWF0Ci0gCWNtcAlcJDAsJHtlbmN9ZAotIAlqZQkuTGNiY19kZWNfbG9vcAotQEAg LTkzMiw2ICs5MzMsNyBAQCAkY29kZS49PDxfX18gaWYgKCR3aW42NCk7Ci0gLkxjYmNfZXBpbG9n dWU6Ci0gX19fCi0gJGNvZGUuPTw8X19fOwotKy5MY2JjX2Fib3J0OgotIAlyZXQKLSAuc2l6ZQkk e1BSRUZJWH1fY2JjX2VuY3J5cHQsLi0ke1BSRUZJWH1fY2JjX2VuY3J5cHQKLSBfX18KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjEvY3J5cHRvL2Flcy9hc20vdnBhZXMteDg2LnBsLmJhY2twb3J0IG9w ZW5zc2wtMS4wLjEvY3J5cHRvL2Flcy9hc20vdnBhZXMteDg2LnBsCi0tLS0gb3BlbnNzbC0xLjAu MS9jcnlwdG8vYWVzL2FzbS92cGFlcy14ODYucGwuYmFja3BvcnQJMjAxMi0wMy0xNCAyMToxNTow NC43NzU4OTgyNTcgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xL2NyeXB0by9hZXMvYXNtL3ZwYWVz LXg4Ni5wbAkyMDEyLTA0LTA1IDE5OjQ4OjIyLjAzNjYwMzE1NyArMDIwMAotQEAgLTg0Myw2ICs4 NDMsOCBAQCAka19kc2JvPTB4MmMwOwkJIyBkZWNyeXB0aW9uIHNib3ggZmluYWwKLSAJJm1vdgko JG91dCwmd3BhcmFtKDEpKTsJCSMgb3V0Ci0gCSZtb3YJKCRyb3VuZCwmd3BhcmFtKDIpKTsJCSMg bGVuCi0gCSZtb3YJKCRrZXksJndwYXJhbSgzKSk7CQkjIGtleQotKwkmc3ViCSgkcm91bmQsMTYp OwotKwkmamMJKCZsYWJlbCgiY2JjX2Fib3J0IikpOwotIAkmbGVhCSgkYmFzZSwmRFdQKC01Niwi ZXNwIikpOwotIAkmbW92CSgkY29uc3QsJndwYXJhbSg0KSk7CQkjIGl2cAotIAkmYW5kCSgkYmFz ZSwtMTYpOwotQEAgLTg1Myw3ICs4NTUsNiBAQCAka19kc2JvPTB4MmMwOwkJIyBkZWNyeXB0aW9u IHNib3ggZmluYWwKLSAJJm1vdgkoJkRXUCg0OCwiZXNwIiksJGJhc2UpOwotIAotIAkmbW92CSgm RFdQKDAsImVzcCIpLCRvdXQpOwkJIyBzYXZlIG91dAotLQkmc3ViCSgkcm91bmQsMTYpOwotIAkm bW92CSgmRFdQKDQsImVzcCIpLCRrZXkpCQkjIHNhdmUga2V5Ci0gCSZtb3YJKCZEV1AoOCwiZXNw IiksJGNvbnN0KTsJCSMgc2F2ZSBpdnAKLSAJJm1vdgkoJG91dCwkcm91bmQpOwkJCSMgJG91dCB3 b3JrcyBhcyAkbGVuCi1AQCAtODk2LDYgKzg5Nyw3IEBAICRrX2RzYm89MHgyYzA7CQkjIGRlY3J5 cHRpb24gc2JveCBmaW5hbAotIAkmbW92CSgkYmFzZSwmRFdQKDgsImVzcCIpKTsJCSMgcmVzdG9y ZSBpdnAKLSAJJm1vdgkoImVzcCIsJkRXUCg0OCwiZXNwIikpOwotIAkmbW92ZHF1CSgmUVdQKDAs JGJhc2UpLCJ4bW0xIik7CQkjIHdyaXRlIElWCi0rJnNldF9sYWJlbCgiY2JjX2Fib3J0Iik7Ci0g JmZ1bmN0aW9uX2VuZCgiJHtQUkVGSVh9X2NiY19lbmNyeXB0Iik7Ci0gCi0gJmFzbV9maW5pc2go KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEvY3J5cHRvL2V2cC9wNV9jcnB0LmMuYmFja3BvcnQg b3BlbnNzbC0xLjAuMS9jcnlwdG8vZXZwL3A1X2NycHQuYwotLS0tIG9wZW5zc2wtMS4wLjEvY3J5 cHRvL2V2cC9wNV9jcnB0LmMuYmFja3BvcnQJMjAxMS0wNi0wMyAyMjo1Mjo1Ny4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xL2NyeXB0by9ldnAvcDVfY3JwdC5jCTIwMTItMDQtMDUg MTk6NDk6MDEuNTEyNDUwNzk1ICswMjAwCi1AQCAtMTM4LDUgKzEzOCw2IEBAIGludCBQS0NTNV9Q QkVfa2V5aXZnZW4oRVZQX0NJUEhFUl9DVFggKmMKLSAJT1BFTlNTTF9jbGVhbnNlKGl2LCBFVlBf TUFYX0lWX0xFTkdUSCk7Ci0gCXJ2ID0gMTsKLSAJZXJyOgotKwlFVlBfTURfQ1RYX2NsZWFudXAo JmN0eCk7Ci0gCXJldHVybiBydjsKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xL2NyeXB0by9w a2NzNy9wazdfZG9pdC5jLmJhY2twb3J0IG9wZW5zc2wtMS4wLjEvY3J5cHRvL3BrY3M3L3BrN19k b2l0LmMKLS0tLSBvcGVuc3NsLTEuMC4xL2NyeXB0by9wa2NzNy9wazdfZG9pdC5jLmJhY2twb3J0 CTIwMTItMDMtMTIgMTc6Mjc6NTAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS9j cnlwdG8vcGtjczcvcGs3X2RvaXQuYwkyMDEyLTA0LTA1IDE5OjQ5OjQwLjU5MTI4OTkxMSArMDIw MAotQEAgLTQzMCw2ICs0MzAsOCBAQCBCSU8gKlBLQ1M3X2RhdGFEZWNvZGUoUEtDUzcgKnA3LCBF VlBfUEtFCi0gCVNUQUNLX09GKFg1MDlfQUxHT1IpICptZF9zaz1OVUxMOwotIAlTVEFDS19PRihQ S0NTN19SRUNJUF9JTkZPKSAqcnNrPU5VTEw7Ci0gCVBLQ1M3X1JFQ0lQX0lORk8gKnJpPU5VTEw7 Ci0rICAgICAgIHVuc2lnbmVkIGNoYXIgKmVrID0gTlVMTCwgKnRrZXkgPSBOVUxMOwotKyAgICAg ICBpbnQgZWtsZW4gPSAwLCB0a2V5bGVuID0gMDsKLSAKLSAJaT1PQkpfb2JqMm5pZChwNy0+dHlw ZSk7Ci0gCXA3LT5zdGF0ZT1QS0NTN19TX0hFQURFUjsKLUBAIC01MDcsOCArNTA5LDYgQEAgQklP ICpQS0NTN19kYXRhRGVjb2RlKFBLQ1M3ICpwNywgRVZQX1BLRQotIAkJaW50IG1heDsKLSAJCVg1 MDlfT0JKRUNUIHJldDsKLSAjZW5kaWYKLS0JCXVuc2lnbmVkIGNoYXIgKmVrID0gTlVMTCwgKnRr ZXkgPSBOVUxMOwotLQkJaW50IGVrbGVuLCB0a2V5bGVuOwotIAotIAkJaWYgKChldG1wPUJJT19u ZXcoQklPX2ZfY2lwaGVyKCkpKSA9PSBOVUxMKQotIAkJCXsKLUBAIC02MDksMTEgKzYwOSwxMyBA QCBCSU8gKlBLQ1M3X2RhdGFEZWNvZGUoUEtDUzcgKnA3LCBFVlBfUEtFCi0gCQkJewotIAkJCU9Q RU5TU0xfY2xlYW5zZShlayxla2xlbik7Ci0gCQkJT1BFTlNTTF9mcmVlKGVrKTsKLSsgICAgICAg ICAgICAgICAgICAgICAgIGVrID0gTlVMTDsKLSAJCQl9Ci0gCQlpZiAodGtleSkKLSAJCQl7Ci0g CQkJT1BFTlNTTF9jbGVhbnNlKHRrZXksdGtleWxlbik7Ci0gCQkJT1BFTlNTTF9mcmVlKHRrZXkp OwotKyAgICAgICAgICAgICAgICAgICAgICAgdGtleSA9IE5VTEw7Ci0gCQkJfQotIAotIAkJaWYg KG91dCA9PSBOVUxMKQotQEAgLTY1Niw2ICs2NTgsMTYgQEAgQklPICpQS0NTN19kYXRhRGVjb2Rl KFBLQ1M3ICpwNywgRVZQX1BLRQotIAlpZiAoMCkKLSAJCXsKLSBlcnI6Ci0rICAgICAgICAgICAg ICAgaWYgKGVrKQotKyAgICAgICAgICAgICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgICAg ICAgICAgT1BFTlNTTF9jbGVhbnNlKGVrLGVrbGVuKTsKLSsgICAgICAgICAgICAgICAgICAgICAg IE9QRU5TU0xfZnJlZShlayk7Ci0rICAgICAgICAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAg ICAgICAgaWYgKHRrZXkpCi0rICAgICAgICAgICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAg ICAgICAgICAgICBPUEVOU1NMX2NsZWFuc2UodGtleSx0a2V5bGVuKTsKLSsgICAgICAgICAgICAg ICAgICAgICAgIE9QRU5TU0xfZnJlZSh0a2V5KTsKLSsgICAgICAgICAgICAgICAgICAgICAgIH0K LSAJCWlmIChvdXQgIT0gTlVMTCkgQklPX2ZyZWVfYWxsKG91dCk7Ci0gCQlpZiAoYnRtcCAhPSBO VUxMKSBCSU9fZnJlZV9hbGwoYnRtcCk7Ci0gCQlpZiAoZXRtcCAhPSBOVUxMKSBCSU9fZnJlZV9h bGwoZXRtcCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xL3NzbC9kMV9zcnZyLmMuYmFja3BvcnQg b3BlbnNzbC0xLjAuMS9zc2wvZDFfc3J2ci5jCi0tLS0gb3BlbnNzbC0xLjAuMS9zc2wvZDFfc3J2 ci5jLmJhY2twb3J0CTIwMTItMDMtMDYgMTQ6MjQ6MTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMS9zc2wvZDFfc3J2ci5jCTIwMTItMDQtMDUgMTk6NDc6MzYuODEyNjMyMDkxICsw MjAwCi1AQCAtOTIwLDcgKzkyMCw3IEBAIGludCBkdGxzMV9zZW5kX3NlcnZlcl9oZWxsbyhTU0wg KnMpCi0gCQlwPXMtPnMzLT5zZXJ2ZXJfcmFuZG9tOwotIAkJVGltZT0odW5zaWduZWQgbG9uZyl0 aW1lKE5VTEwpOwkJCS8qIFRpbWUgKi8KLSAJCWwybihUaW1lLHApOwotLQkJUkFORF9wc2V1ZG9f Ynl0ZXMocCxTU0wzX1JBTkRPTV9TSVpFLXNpemVvZihUaW1lKSk7Ci0rCQlSQU5EX3BzZXVkb19i eXRlcyhwLFNTTDNfUkFORE9NX1NJWkUtNCk7Ci0gCQkvKiBEbyB0aGUgbWVzc2FnZSB0eXBlIGFu ZCBsZW5ndGggbGFzdCAqLwotIAkJZD1wPSAmKGJ1ZltEVExTMV9ITV9IRUFERVJfTEVOR1RIXSk7 Ci0gCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMS1iZXRhMy1maXBzLnBhdGNoIGIvb3BlbnNz bC0xLjAuMS1iZXRhMy1maXBzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm MmJiMzQwLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjEtYmV0YTMtZmlwcy5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDIxMTQ1ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvYXBwcy9wa2NzMTIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvYXBwcy9wa2NzMTIuYwot LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvYXBwcy9wa2NzMTIuYy5maXBzCTIwMTEtMDMtMTMgMTk6 MjA6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9hcHBzL3BrY3Mx Mi5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzczMjk0NzE2ICswMTAwCi1AQCAtNjcsNiArNjcsOSBA QAotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgot ICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gI2RlZmluZSBQUk9HIHBrY3MxMl9t YWluCi0gCi1AQCAtMTMwLDYgKzEzMywxMSBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi0gCi0gICAgIGFwcHNfc3RhcnR1cCgpOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsg ICAgaWYgKEZJUFNfbW9kZSgpKQotKwljZXJ0X3BiZSA9IGtleV9wYmU7IC8qIGNhbm5vdCB1c2Ug UkMyIGluIHRoZSBGSVBTIG1vZGUgKi8KLSsjZW5kaWYKLSsKLSAgICAgZW5jID0gRVZQX2Rlc19l ZGUzX2NiYygpOwotICAgICBpZiAoYmlvX2VyciA9PSBOVUxMICkgYmlvX2VyciA9IEJJT19uZXdf ZnAgKHN0ZGVyciwgQklPX05PQ0xPU0UpOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRh My9hcHBzL3NwZWVkLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2FwcHMvc3BlZWQuYwotLS0t IG9wZW5zc2wtMS4wLjEtYmV0YTMvYXBwcy9zcGVlZC5jLmZpcHMJMjAxMi0wMS0xMSAyMjo0OTox Ni4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2FwcHMvc3BlZWQuYwky MDEyLTAyLTI5IDEwOjMzOjAyLjc3NDI5NDcyNCArMDEwMAotQEAgLTE5NSw3ICsxOTUsNiBAQAot ICNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKLSAjdW5kZWYgQUVTX3NldF9lbmNyeXB0 X2tleQotICN1bmRlZiBBRVNfc2V0X2RlY3J5cHRfa2V5Ci0tI3VuZGVmIERFU19zZXRfa2V5X3Vu Y2hlY2tlZAotICNlbmRpZgotICNkZWZpbmUgQkZfc2V0X2tleQlwcml2YXRlX0JGX3NldF9rZXkK LSAjZGVmaW5lIENBU1Rfc2V0X2tleQlwcml2YXRlX0NBU1Rfc2V0X2tleQotQEAgLTIwMyw3ICsy MDIsNiBAQAotICNkZWZpbmUgU0VFRF9zZXRfa2V5CXByaXZhdGVfU0VFRF9zZXRfa2V5Ci0gI2Rl ZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5Ci0gI2RlZmluZSBSQzRfc2V0X2tl eQlwcml2YXRlX1JDNF9zZXRfa2V5Ci0tI2RlZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQJcHJp dmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQKLSAjZGVmaW5lIEFFU19zZXRfZW5jcnlwdF9rZXkJ cHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5Ci0gI2RlZmluZSBBRVNfc2V0X2RlY3J5cHRfa2V5 CXByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleQotICNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleQlw cml2YXRlX0NhbWVsbGlhX3NldF9rZXkKLUBAIC05NDEsNyArOTM5LDEyIEBAIGludCBNQUlOKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gCQkJaWYgKHN0 cmNtcCgqYXJndiwicnNhIikgPT0gMCkKLSAJCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJ CQlpZiAoIUZJUFNfbW9kZSgpKQotKyNlbmRpZgotKwkJCQl7Ci0gCQkJcnNhX2RvaXRbUl9SU0Ff NTEyXT0xOwotKwkJCQl9Ci0gCQkJcnNhX2RvaXRbUl9SU0FfMTAyNF09MTsKLSAJCQlyc2FfZG9p dFtSX1JTQV8yMDQ4XT0xOwotIAkJCXJzYV9kb2l0W1JfUlNBXzQwOTZdPTE7Ci1AQCAtOTUxLDcg Kzk1NCwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gI2lmbmRlZiBPUEVO U1NMX05PX0RTQQotIAkJCWlmIChzdHJjbXAoKmFyZ3YsImRzYSIpID09IDApCi0gCQkJewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQkJaWYgKCFGSVBTX21vZGUoKSkKLSsjZW5kaWYKLSsJCQkJ ewotIAkJCWRzYV9kb2l0W1JfRFNBXzUxMl09MTsKLSsJCQkJfQotIAkJCWRzYV9kb2l0W1JfRFNB XzEwMjRdPTE7Ci0gCQkJZHNhX2RvaXRbUl9EU0FfMjA0OF09MTsKLSAJCQl9Ci1AQCAtMTIyNiwz MCArMTIzNCw1NCBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCUFFU19zZXRf ZW5jcnlwdF9rZXkoa2V5MzIsMjU2LCZhZXNfa3MzKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5T U0xfTk9fQ0FNRUxMSUEKLSsJaWYgKGRvaXRbRF9DQkNfMTI4X0NNTF0gfHwgZG9pdFtEX0NCQ18x OTJfQ01MXSB8fCBkb2l0W0RfQ0JDXzI1Nl9DTUxdKQotKwkgICAgewotIAlDYW1lbGxpYV9zZXRf a2V5KGtleTE2LDEyOCwmY2FtZWxsaWFfa3MxKTsKLSAJQ2FtZWxsaWFfc2V0X2tleShja2V5MjQs MTkyLCZjYW1lbGxpYV9rczIpOwotIAlDYW1lbGxpYV9zZXRfa2V5KGNrZXkzMiwyNTYsJmNhbWVs bGlhX2tzMyk7Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0lERUEKLSsJ aWYgKGRvaXRbRF9DQkNfSURFQV0pCi0rCSAgICB7Ci0gCWlkZWFfc2V0X2VuY3J5cHRfa2V5KGtl eTE2LCZpZGVhX2tzKTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0VF RAotKwlpZiAoZG9pdFtEX0NCQ19TRUVEXSkKLSsJICAgIHsKLSAJU0VFRF9zZXRfa2V5KGtleTE2 LCZzZWVkX2tzKTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUkM0Ci0r CWlmIChkb2l0W0RfUkM0XSkKLSsJICAgIHsKLSAJUkM0X3NldF9rZXkoJnJjNF9rcywxNixrZXkx Nik7Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JDMgotKwlpZiAoZG9p dFtEX0NCQ19SQzJdKQotKwkgICAgewotIAlSQzJfc2V0X2tleSgmcmMyX2tzLDE2LGtleTE2LDEy OCk7Ci0rCSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JDNQotKwlpZiAoZG9p dFtEX0NCQ19SQzVdKQotKwkgICAgewotIAlSQzVfMzJfc2V0X2tleSgmcmM1X2tzLDE2LGtleTE2 LDEyKTsKLSsJICAgIH0KLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQkYKLSsJaWYgKGRv aXRbRF9DQkNfQkZdKQotKwkgICAgewotIAlCRl9zZXRfa2V5KCZiZl9rcywxNixrZXkxNik7Ci0r CSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NBU1QKLSsJaWYgKGRvaXRbRF9D QkNfQ0FTVF0pCi0rCSAgICB7Ci0gCUNBU1Rfc2V0X2tleSgmY2FzdF9rcywxNixrZXkxNik7Ci0r CSAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotIAltZW1zZXQocnNhX2Ms MCxzaXplb2YocnNhX2MpKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvQ29uZmlndXJl LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4xLWJl dGEzL0NvbmZpZ3VyZS5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzM4Mjk0NDE2ICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMS1iZXRhMy9Db25maWd1cmUJMjAxMi0wMi0yOSAxMDozMzowMi43NzUy OTQ3MzIgKzAxMDAKLUBAIC05OTMsMTEgKzk5Myw2IEBAIGlmIChkZWZpbmVkKCRkaXNhYmxlZHsi bWQ1In0pIHx8IGRlZmluZWQKLSAJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKLSAJfQot IAotLWlmICgkZmlwcyAmJiAkZmlwc2xpYmRpciBlcSAiIikKLS0JewotLQkkZmlwc2xpYmRpciA9 ICRmaXBzZGlyIC4gIi9saWIvIjsKLS0JfQotLQotICMgUlNBWCBFTkdJTkUgc2V0cyBkZWZhdWx0 IG5vbi1GSVBTIFJTQSBtZXRob2QuCi0gaWYgKCRmaXBzKQotIAl7Ci1AQCAtMTQ3OCw3ICsxNDcz LDYgQEAgJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX0dGMm0iIGlmICgkYgotIGlmICgkZmlw cykKLSAJewotIAkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNc biI7Ci0tCSRjZmxhZ3MgLj0gIiAtSVwkKEZJUFNESVIpL2luY2x1ZGUiOwotIAl9Ci0gCi0gJGNw dWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKLUBAIC0x NjY1LDkgKzE2NTksMTIgQEAgd2hpbGUgKDxJTj4pCi0gCi0gCXMvXkZJUFNESVI9LiovRklQU0RJ Uj0kZmlwc2Rpci87Ci0gCXMvXkZJUFNMSUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87 Ci0tCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOwotIAlz L15CQVNFQUREUj0uKi9CQVNFQUREUj0kYmFzZWFkZHIvOwotIAotKwlpZiAoJGZpcHMpCi0rCQl7 Ci0rCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsKLSsJCX0KLSAJcy9eU0hMSUJfVEFSR0VUPS4qL1NI TElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87Ci0gCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFS Sz0kc2hhcmVkX21hcmsvOwotIAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFS RURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vYWVzL2Flc19taXNjLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTEtMDYtMDUgMTk6MzY6MzMuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vYWVzL2Flc19taXNjLmMJMjAxMi0w Mi0yOSAxMDozMzowMi43NzYyOTQ3NDEgKzAxMDAKLUBAIC02OSwxNyArNjksMTEgQEAgY29uc3Qg Y2hhciAqQUVTX29wdGlvbnModm9pZCkgewotIGludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotIAkJCUFFU19LRVkgKmtl eSkKLSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsK LS0jZW5kaWYKLSAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBi aXRzLCBrZXkpOwotIAl9Ci0gCi0gaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWdu ZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0gCQkJQUVTX0tFWSAqa2V5KQotIAl7 Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlmaXBzX2NpcGhlcl9hYm9ydChBRVMpOwotLSNlbmRp ZgotIAlyZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtl eSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2NtYWMvY21hYy5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vY21hYy9jbWFjLmMKLS0tLSBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9jbWFjL2NtYWMuYy5maXBzCTIwMTEtMDYtMTIgMTc6MDc6MjUu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vY21hYy9jbWFj LmMJMjAxMi0wMi0yOSAxMDozMzowMi43NzYyOTQ3NDEgKzAxMDAKLUBAIC0xMDcsMTMgKzEwNyw2 IEBAIENNQUNfQ1RYICpDTUFDX0NUWF9uZXcodm9pZCkKLSAKLSB2b2lkIENNQUNfQ1RYX2NsZWFu dXAoQ01BQ19DVFggKmN0eCkKLSAJewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNf bW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQotLQkJewotLQkJRklQU19jbWFjX2N0eF9jbGVh bnVwKGN0eCk7Ci0tCQlyZXR1cm47Ci0tCQl9Ci0tI2VuZGlmCi0gCUVWUF9DSVBIRVJfQ1RYX2Ns ZWFudXAoJmN0eC0+Y2N0eCk7Ci0gCU9QRU5TU0xfY2xlYW5zZShjdHgtPnRibCwgRVZQX01BWF9C TE9DS19MRU5HVEgpOwotIAlPUEVOU1NMX2NsZWFuc2UoY3R4LT5rMSwgRVZQX01BWF9CTE9DS19M RU5HVEgpOwotQEAgLTE2NCwxMSArMTU3LDYgQEAgaW50IENNQUNfSW5pdChDTUFDX0NUWCAqY3R4 LCBjb25zdCB2b2lkCi0gCQkJRVZQZXJyKEVWUF9GX0NNQUNfSU5JVCwgRVZQX1JfRElTQUJMRURf Rk9SX0ZJUFMpOwotIAkJCXJldHVybiAwOwotIAkJCX0KLS0JCS8qIE90aGVyIGFsZ29yaXRobSBi bG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2luaXQsCi0tCQkgKiB2aWEgRklQU19j aXBoZXJpbml0KCkuCi0tCQkgKi8KLS0JCWlmICghaW1wbCAmJiAhY3R4LT5jY3R4LmVuZ2luZSkK LS0JCQlyZXR1cm4gRklQU19jbWFjX2luaXQoY3R4LCBrZXksIGtleWxlbiwgY2lwaGVyLCBOVUxM KTsKLSAJCX0KLSAjZW5kaWYKLSAJLyogQWxsIHplcm9zIG1lYW5zIHJlc3RhcnQgKi8KLUBAIC0y MTQsMTAgKzIwMiw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2kK LSAJewotIAljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gaW47Ci0gCXNpemVfdCBibDsKLS0j aWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2lu ZSkKLS0JCXJldHVybiBGSVBTX2NtYWNfdXBkYXRlKGN0eCwgaW4sIGRsZW4pOwotLSNlbmRpZgot IAlpZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKLSAJCXJldHVybiAwOwotIAlpZiAoZGxlbiA9 PSAwKQotQEAgLTI1OSwxMCArMjQzLDYgQEAgaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgs IGNvbnN0IHZvaQotIGludCBDTUFDX0ZpbmFsKENNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90ICpwb3V0bGVuKQotIAl7Ci0gCWludCBpLCBibCwgbGI7Ci0tI2lmZGVmIE9Q RU5TU0xfRklQUwotLQlpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCi0tCQly ZXR1cm4gRklQU19jbWFjX2ZpbmFsKGN0eCwgb3V0LCBwb3V0bGVuKTsKLS0jZW5kaWYKLSAJaWYg KGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCi0gCQlyZXR1cm4gMDsKLSAJYmwgPSBFVlBfQ0lQSEVS X0NUWF9ibG9ja19zaXplKCZjdHgtPmNjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9jcnlwdG8u aAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2NyeXB0by5oLmZpcHMJMjAxMi0wMi0y OSAxMDozMzowMi41MzgyOTI2OTYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9jcnlwdG8uaAkyMDEyLTAyLTI5IDEwOjMzOjAyLjc3NzI5NDc1MCArMDEwMAotQEAgLTU1Mywy NCArNTUzLDI5IEBAIGludCBGSVBTX21vZGVfc2V0KGludCByKTsKLSB2b2lkIE9QRU5TU0xfaW5p dCh2b2lkKTsKLSAKLSAjZGVmaW5lIGZpcHNfbWRfaW5pdChhbGcpIGZpcHNfbWRfaW5pdF9jdHgo YWxnLCBhbGcpCi0rI2RlZmluZSBub25maXBzX21kX2luaXQoYWxnKSBub25maXBzX21kX2luaXRf Y3R4KGFsZywgYWxnKQotKyNkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0rCWlu dCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQotIAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0jZGVm aW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAotKyNkZWZpbmUgbm9uZmlwc19tZF9pbml0 X2N0eChhbGcsIGN4KSBcCi0gCWludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKSBcCi0gCXsgXAot IAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0tCQki TG93IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBt b2RlISIpOyBcCi0rCQkiRGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7 IFwKLSAJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCi0gCX0gXAotIAlpbnQgcHJp dmF0ZV8jI2FsZyMjX0luaXQoY3gjI19DVFggKmMpCi0gCi0gI2RlZmluZSBmaXBzX2NpcGhlcl9h Ym9ydChhbGcpIFwKLSAJaWYgKEZJUFNfbW9kZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJ TkVfXywgXAotLQkJIkxvdyBsZXZlbCBBUEkgY2FsbCB0byBjaXBoZXIgIiAjYWxnICIgZm9yYmlk ZGVuIGluIEZJUFMgbW9kZSEiKQotKwkJIkNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQ UyBtb2RlISIpCi0rCi0rLyogZGllIGlmIEZJUFMgc2VsZnRlc3QgZmFpbGVkICovCi0rdm9pZCBG SVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwotIAotICNlbHNlCi0tI2RlZmluZSBmaXBzX21kX2lu aXRfY3R4KGFsZywgY3gpIFwKLS0JaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCi0rI2RlZmlu ZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkK LSAjZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgd2hpbGUoMCkKLSAjZW5kaWYKLSAKLUBA IC01ODAsNiArNTg1LDkgQEAgdm9pZCBPUEVOU1NMX2luaXQodm9pZCk7Ci0gICovCi0gdm9pZCBF UlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKLSAKLSsjZGVmaW5lIE9QRU5TU0xfSEFWRV9J TklUCTEKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpOwotKwotIC8qIEVycm9yIGNv ZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rlcy4g Ki8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Rlcy9kZXMuaC5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Rlcy9kZXMuaAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2Rlcy9kZXMuaC5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNjA1MjkzMjcyICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGVzL2Rlcy5oCTIwMTItMDItMjkg MTA6MzM6MDIuNzc3Mjk0NzUwICswMTAwCi1AQCAtMjI0LDkgKzIyNCw2IEBAIGludCBERVNfc2V0 X2tleShjb25zdF9ERVNfY2Jsb2NrICprZXksREUKLSBpbnQgREVTX2tleV9zY2hlZChjb25zdF9E RVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwotIGludCBERVNfc2V0 X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hl ZHVsZSk7Ci0gdm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5 LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tdm9p ZCBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVT X2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwotLSNlbmRpZgotIHZvaWQgREVTX3N0cmluZ190b19r ZXkoY29uc3QgY2hhciAqc3RyLERFU19jYmxvY2sgKmtleSk7Ci0gdm9pZCBERVNfc3RyaW5nX3Rv XzJrZXlzKGNvbnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkxLERFU19jYmxvY2sgKmtleTIp OwotIHZvaWQgREVTX2NmYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWdu ZWQgY2hhciAqb3V0LGxvbmcgbGVuZ3RoLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vZGVzL3NldF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Rlcy9z ZXRfa2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kZXMvc2V0X2tleS5jLmZp cHMJMjAxMS0wNi0wMSAxODo1NDowNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9kZXMvc2V0X2tleS5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzc3Mjk0NzUw ICswMTAwCi1AQCAtMzM3LDEzICszMzcsNiBAQCBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25z dF9ERVNfY2Jsb2NrCi0gCX0KLSAKLSB2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9E RVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0JewotLQlmaXBzX2NpcGhlcl9hYm9ydChERVMpOwotLQlwcml2YXRlX0RFU19z ZXRfa2V5X3VuY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKLS0JfQotLXZvaWQgcHJpdmF0ZV9ERVNf c2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxl ICpzY2hlZHVsZSkKLS0jZW5kaWYKLSAJewotIAlzdGF0aWMgY29uc3QgaW50IHNoaWZ0czJbMTZd PXswLDAsMSwxLDEsMSwxLDEsMCwxLDEsMSwxLDEsMSwwfTsKLSAJcmVnaXN0ZXIgREVTX0xPTkcg YyxkLHQscyx0MjsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RoL2RoX2dl bi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGgvZGhfZ2VuLmMKLS0tLSBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTc6MjE6 NDYuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGgvZGhf Z2VuLmMJMjAxMi0wMi0yOSAxMDozMzowMi43NzgyOTQ3NTkgKzAxMDAKLUBAIC04NCwxMSArODQs NiBAQCBpbnQgREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAqcmV0LCBpCi0gI2VuZGlmCi0g CWlmKHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQotIAkJcmV0dXJuIHJldC0+bWV0aC0+Z2Vu ZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKLS0jaWZkZWYgT1BF TlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXJldHVybiBGSVBTX2RoX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgocmV0LCBwcmltZV9sZW4sCi0tCQkJCQkJCWdlbmVyYXRvciwgY2IpOwot LSNlbmRpZgotIAlyZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdl bmVyYXRvciwgY2IpOwotIAl9Ci0gCi1AQCAtMTIzLDYgKzExOCwyMCBAQCBzdGF0aWMgaW50IGRo X2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCi0gCWludCBnLG9rPSAtMTsKLSAJQk5fQ1RYICpj dHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyxGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCWlmIChG SVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJ VFMpKQotKwkJewotKwkJREhlcnIoREhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlf U0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1C Tl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFy dChjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGgvZGguaC5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RoL2RoLmgKLS0tLSBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi40ODMyOTIyMjMgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kaC9kaC5oCTIwMTItMDItMjkgMTA6 MzM6MDIuNzc4Mjk0NzU5ICswMTAwCi1AQCAtNzcsNiArNzcsOCBAQAotICMgZGVmaW5lIE9QRU5T U0xfREhfTUFYX01PRFVMVVNfQklUUwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUgT1BFTlNT TF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAotKwotICNkZWZpbmUgREhfRkxBR19DQUNI RV9NT05UX1AgICAgIDB4MDEKLSAjZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAy IC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERICi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0 aW1lCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kaC9kaF9rZXkuYy5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RoL2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwkyMDExLTExLTE0IDE1OjE2OjA5LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RoL2RoX2tleS5jCTIw MTItMDItMjkgMTA6MzM6MDIuNzc5Mjk0NzY4ICswMTAwCi1AQCAtNjEsNiArNjEsOSBAQAotICNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNs dWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgp OwotIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdO VU0gKnB1Yl9rZXksIERIICpkaCk7Ci1AQCAtMTA0LDcgKzEwNyw3IEBAIGNvbXB1dGVfa2V5LAot IGRoX2JuX21vZF9leHAsCi0gZGhfaW5pdCwKLSBkaF9maW5pc2gsCi0tMCwKLStESF9GTEFHX0ZJ UFNfTUVUSE9ELAotIE5VTEwsCi0gTlVMTAotIH07Ci1AQCAtMTIzLDYgKzEyNiwxNCBAQCBzdGF0 aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCi0gCUJOX01PTlRfQ1RYICptb250PU5VTEw7Ci0g CUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVOU1NM X0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlESGVycihESF9GX0dFTkVSQVRF X0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2Vu ZGlmCi0rCi0gCWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVy cjsKLSAKLUBAIC0yMTMsNiArMjI0LDEzIEBAIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWdu ZWQgY2hhciAqa2UKLSAJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksREhfUl9NT0RVTFVTX1RPT19M QVJHRSk7Ci0gCQlnb3RvIGVycjsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChG SVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9N T0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhfUl9LRVlf U0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCi0gCWN0eCA9 IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLUBAIC0yODAsNiAr Mjk4LDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0IERIICpkaCwgQgotIAotIHN0 YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJZGgtPmZsYWdzIHw9IERIX0ZMQUdfQ0FD SEVfTU9OVF9QOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZGgv ZGhfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kaC9kaF9saWIuYy5maXBz CTIwMTEtMDYtMjAgMjE6NDE6MTEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZGgvZGhfbGliLmMJMjAxMi0wMi0yOSAxMDozMzowMi43NzkyOTQ3NjggKzAx MDAKLUBAIC04MSwxNCArODEsNyBAQCBjb25zdCBESF9NRVRIT0QgKkRIX2dldF9kZWZhdWx0X21l dGhvZCh2Ci0gCXsKLSAJaWYoIWRlZmF1bHRfREhfbWV0aG9kKQotIAkJewotLSNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0JCWlmIChGSVBTX21vZGUoKSkKLS0JCQlyZXR1cm4gRklQU19kaF9vcGVuc3Ns KCk7Ci0tCQllbHNlCi0tCQkJcmV0dXJuIERIX09wZW5TU0woKTsKLS0jZWxzZQotIAkJZGVmYXVs dF9ESF9tZXRob2QgPSBESF9PcGVuU1NMKCk7Ci0tI2VuZGlmCi0gCQl9Ci0gCXJldHVybiBkZWZh dWx0X0RIX21ldGhvZDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v ZHNhL2RzYV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2FfZXJy LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAx MS0xMC0xMCAwMToxMzo0OS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9kc2EvZHNhX2Vyci5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzc5Mjk0NzY4ICswMTAw Ci1AQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVuY3Rz W109Ci0ge0VSUl9GVU5DKERTQV9GX0RPX0RTQV9QUklOVCksCSJET19EU0FfUFJJTlQifSwKLSB7 RVJSX0ZVTkMoRFNBX0ZfRFNBUEFSQU1TX1BSSU5UKSwJIkRTQXBhcmFtc19wcmludCJ9LAotIHtF UlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlApLAkiRFNBcGFyYW1zX3ByaW50X2ZwIn0s Ci0re0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiksCSJkc2FfYnVpbHRpbl9rZXln ZW4ifSwKLSt7RVJSX0ZVTkMoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4pLAkiZHNhX2J1aWx0 aW5fcGFyYW1nZW4ifSwKLSB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0RPX1NJR04pLAkiRFNBX2RvX3Np Z24ifSwKLSB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0s Ci0ge0VSUl9GVU5DKERTQV9GX0RTQV9HRU5FUkFURV9LRVkpLAkiRFNBX2dlbmVyYXRlX2tleSJ9 LAotQEAgLTEwNiw2ICsxMDgsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVh c29uc1tdCi0ge0VSUl9SRUFTT04oRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKSwi ZGF0YSB0b28gbGFyZ2UgZm9yIGtleSBzaXplIn0sCi0ge0VSUl9SRUFTT04oRFNBX1JfREVDT0RF X0VSUk9SKSAgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAotIHtFUlJfUkVBU09OKERTQV9SX0lO VkFMSURfRElHRVNUX1RZUEUpICAgLCJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0sCi0re0VSUl9SRUFT T04oRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCkgICAgICAsImtleSBzaXplIGludmFsaWQifSwKLSt7 RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNt YWxsIn0sCi0ge0VSUl9SRUFTT04oRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTKSAgICAsIm1pc3Np bmcgcGFyYW1ldGVycyJ9LAotIHtFUlJfUkVBU09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSAg ICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAotIHtFUlJfUkVBU09OKERTQV9SX05FRURfTkVXX1NF VFVQX1ZBTFVFUykgLCJuZWVkIG5ldyBzZXR1cCB2YWx1ZXMifSwKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9kc2EvZHNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNh L2RzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkgMTc6MjE6NDYuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDEyLTAyLTI5IDEwOjMz OjAyLjc4MDI5NDc3NyArMDEwMAotQEAgLTg1LDYgKzg1LDE0IEBACi0gI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotICNlbmRpZgotIAotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGlu dCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBx Yml0cywKLSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsIGludCBz ZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwgaW50ICpjb3VudGVy X3JldCwgQk5fR0VOQ0IgKmNiKTsKLStzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5f Q1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAotKwkJQklHTlVNICoqZ19yZXQsIHVuc2ln bmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotKyNlbmRpZgotKwotIGludCBEU0FfZ2Vu ZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJpdHMsCi0gCQljb25zdCB1bnNpZ25l ZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4sCi0gCQlpbnQgKmNvdW50ZXJfcmV0LCB1bnNp Z25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotQEAgLTEwMCwxNCArMTA4LDYgQEAgaW50 IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERTQSAqcmV0LAotIAlpZihyZXQtPm1ldGgtPmRz YV9wYXJhbWdlbikKLSAJCXJldHVybiByZXQtPm1ldGgtPmRzYV9wYXJhbWdlbihyZXQsIGJpdHMs IHNlZWRfaW4sIHNlZWRfbGVuLAotIAkJCQljb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLS0jaWZk ZWYgT1BFTlNTTF9GSVBTCi0tCWVsc2UgaWYgKEZJUFNfbW9kZSgpKQotLQkJewotLQkJcmV0dXJu IEZJUFNfZHNhX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBiaXRzLCAKLS0JCQkJCQkJc2Vl ZF9pbiwgc2VlZF9sZW4sCi0tCQkJCQkJCWNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotLQkJfQot LSNlbmRpZgotIAllbHNlCi0gCQl7Ci0gCQljb25zdCBFVlBfTUQgKmV2cG1kOwotQEAgLTEyNSwy NyArMTI1LDExOSBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsCi0g CQkJfQotIAotIAkJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJpdHMs IGV2cG1kLAotLQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBOVUxMLCBjb3VudGVyX3JldCwgaF9yZXQs IGNiKTsKLSsJCQkJc2VlZF9pbiwgc2VlZF9sZW4sIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwot IAkJfQotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBGSVBTX2RzYV9idWlsdGlu X3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwljb25zdCBF VlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9s ZW4sCi0rCWludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAq Y2IpCi0rCXsKLSsJcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJpdHMs Ci0rCQlldnBtZCwgc2VlZF9pbiwgc2VlZF9sZW4sCi0rCQljb3VudGVyX3JldCwgaF9yZXQsIGNi KTsKLSsJfQotKyNlbmRpZgotKwotIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwg c2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSAJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3Qg dW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAotLQl1bnNpZ25lZCBjaGFy ICpzZWVkX291dCwKLSAJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJO X0dFTkNCICpjYikKLSAJewotIAlpbnQgb2s9MDsKLSAJdW5zaWduZWQgY2hhciBzZWVkW1NIQTI1 Nl9ESUdFU1RfTEVOR1RIXTsKLSsJQklHTlVNICpnPU5VTEwsKnE9TlVMTCwqcD1OVUxMOwotKwlz aXplX3QgcXNpemUgPSBxYml0cyA+PiAzOwotKwlCTl9DVFggKmN0eD1OVUxMOwotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLAotKwkJICAgIEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICBnb3RvIGVycjsKLSsJICAgIH0KLSsKLSsJaWYg KEZJUFNfbW9kdWxlX21vZGUoKSAmJgotKwkgICAgKGJpdHMgIT0gMTAyNCB8fCBxYml0cyAhPSAx NjApICYmCi0rCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDIyNCkgJiYKLSsJICAgIChi aXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjU2KSAmJgotKwkgICAgKGJpdHMgIT0gMzA3MiB8fCBx Yml0cyAhPSAyNTYpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VO LCBEU0FfUl9LRVlfU0laRV9JTlZBTElEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgot KwlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkpCi0rCQlzZWVkX2lu ID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KLSsJaWYgKHNl ZWRfbGVuID4gc2l6ZW9mKHNlZWQpKSAKLSsJCXNlZWRfbGVuID0gc2l6ZW9mKHNlZWQpOwkvKiBB cHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotKwkJCQkJCSAqIGJ1 dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAyNTYgYml0cyovCi0rCWlm IChzZWVkX2luICE9IE5VTEwpCi0rCQltZW1jcHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9sZW4pOwot KwllbHNlCi0rCQlzZWVkX2xlbiA9IDA7Ci0rCi0rCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0g TlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsKLSsJaWYgKCFG SVBTX2RzYV9nZW5lcmF0ZV9wcShjdHgsIGJpdHMsIHFiaXRzLCBldnBtZCwKLSsJCXNlZWQsIHNl ZWRfbGVuLCAmcCwgJnEsIGNvdW50ZXJfcmV0LCBjYikpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYg KCFGSVBTX2RzYV9nZW5lcmF0ZV9nKGN0eCwgcCwgcSwgJmcsIGhfcmV0LCBjYikpCi0rCQlnb3Rv IGVycjsKLSsKLSsJb2s9MTsKLStlcnI6Ci0rCWlmIChvaykKLSsJCXsKLSsJCWlmKHJldC0+cCkK LSsJCQl7Ci0rCQkJQk5fZnJlZShyZXQtPnApOwotKwkJCXJldC0+cCA9IE5VTEw7Ci0rCQkJfQot KwkJaWYocmV0LT5xKQotKwkJCXsKLSsJCQlCTl9mcmVlKHJldC0+cSk7Ci0rCQkJcmV0LT5xID0g TlVMTDsKLSsJCQl9Ci0rCQlpZihyZXQtPmcpCi0rCQkJewotKwkJCUJOX2ZyZWUocmV0LT5nKTsK LSsJCQlyZXQtPmcgPSBOVUxMOwotKwkJCX0KLSsJCXJldC0+cD1CTl9kdXAocCk7Ci0rCQlyZXQt PnE9Qk5fZHVwKHEpOwotKwkJcmV0LT5nPUJOX2R1cChnKTsKLSsJCWlmIChyZXQtPnAgPT0gTlVM TCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKLSsJCQlvaz0wOwotKwkJfQot KwlpZihjdHgpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgp OwotKwkJfQotKwlyZXR1cm4gb2s7Ci0rCX0KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0 YXRpYwotKyNlbmRpZgotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6 ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSsJCWNvbnN0IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVk IGNoYXIgKnNlZWQsIGludCBzZWVkX2xlbiwKLSsJCUJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipx X3JldCwgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCBvaz0wOwot IAl1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLS0JdW5zaWduZWQgY2hh ciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdLGJ1ZjJbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwot Kwl1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0gCUJJR05VTSAqcjAs KlcsKlgsKmMsKnRlc3Q7Ci0tCUJJR05VTSAqZz1OVUxMLCpxPU5VTEwsKnA9TlVMTDsKLS0JQk5f TU9OVF9DVFggKm1vbnQ9TlVMTDsKLS0JaW50IGksIGssIG49MCwgbT0wLCBxc2l6ZSA9IHFiaXRz ID4+IDM7Ci0rCUJJR05VTSAqcT1OVUxMLCpwPU5VTEw7Ci0rCWludCBpLCBrLCBiLCBuPTAsIG09 MCwgcXNpemUgPSBxYml0cyA+PiAzOwotIAlpbnQgY291bnRlcj0wOwotIAlpbnQgcj0wOwotLQlC Tl9DVFggKmN0eD1OVUxMOwotLQl1bnNpZ25lZCBpbnQgaD0yOwotIAotIAlpZiAocXNpemUgIT0g U0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEggJiYKLSAJ ICAgIHFzaXplICE9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQotQEAgLTE1Myw1MSArMjQ1LDQzIEBA IGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJCXJldHVybiAwOwot IAotIAlpZiAoZXZwbWQgPT0gTlVMTCkKLS0JCS8qIHVzZSBTSEExIGFzIGRlZmF1bHQgKi8KLS0J CWV2cG1kID0gRVZQX3NoYTEoKTsKLSsJICAgIHsKLSsJCWlmIChxYml0cyA8PSAxNjApCi0rCQkJ ZXZwbWQgPSBFVlBfc2hhMSgpOwotKwkJZWxzZSBpZiAocWJpdHMgPD0gMjI0KQotKwkJCWV2cG1k ID0gRVZQX3NoYTIyNCgpOwotKwkJZWxzZQotKwkJCWV2cG1kID0gRVZQX3NoYTI1NigpOwotKwkg ICAgfQotIAotIAlpZiAoYml0cyA8IDUxMikKLSAJCWJpdHMgPSA1MTI7Ci0gCi0gCWJpdHMgPSAo Yml0cys2MykvNjQqNjQ7Ci0gCi0tCS8qIE5COiBzZWVkX2xlbiA9PSAwIGlzIHNwZWNpYWwgY2Fz ZTogY29weSBnZW5lcmF0ZWQgc2VlZCB0bwotLSAJICogc2VlZF9pbiBpZiBpdCBpcyBub3QgTlVM TC4KLS0gCSAqLwotLQlpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkp Ci0tCQlzZWVkX2luID0gTlVMTDsJCS8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUg Ki8KLS0JaWYgKHNlZWRfbGVuID4gKHNpemVfdClxc2l6ZSkgCi0tCQlzZWVkX2xlbiA9IHFzaXpl OwkvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotLQkJCQkJ ICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDE2MCBiaXRzKi8K LS0JaWYgKHNlZWRfaW4gIT0gTlVMTCkKLS0JCW1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVkX2xl bik7Ci0tCi0tCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKLS0JCWdvdG8gZXJyOwot LQotLQlpZiAoKG1vbnQ9Qk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCi0tCQlnb3RvIGVycjsK LS0KLS0JQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gCXIwID0gQk5fQ1RYX2dldChjdHgpOwotLQlnID0g Qk5fQ1RYX2dldChjdHgpOwotIAlXID0gQk5fQ1RYX2dldChjdHgpOwotLQlxID0gQk5fQ1RYX2dl dChjdHgpOwotKwkqcV9yZXQgPSBxID0gQk5fQ1RYX2dldChjdHgpOwotIAlYID0gQk5fQ1RYX2dl dChjdHgpOwotIAljID0gQk5fQ1RYX2dldChjdHgpOwotLQlwID0gQk5fQ1RYX2dldChjdHgpOwot KwkqcF9yZXQgPSBwID0gQk5fQ1RYX2dldChjdHgpOwotIAl0ZXN0ID0gQk5fQ1RYX2dldChjdHgp OwotIAotIAlpZiAoIUJOX2xzaGlmdCh0ZXN0LEJOX3ZhbHVlX29uZSgpLGJpdHMtMSkpCi0gCQln b3RvIGVycjsKLSAKLSsJLyogc3RlcCAzIG4gPSBcbGNlaWwgYml0cyAvIHFiaXRzIFxyY2VpbCAt IDEgKi8KLSsJbiA9IChiaXRzK3FiaXRzLTEpL3FiaXRzIC0gMTsKLSsJLyogc3RlcCA0IGIgPSBi aXRzIC0gMSAtIG4gKiBxYml0cyAqLwotKwliID0gYml0cyAtIDEgLSBuKnFiaXRzOwotKwotIAlm b3IgKDs7KQotIAkJewotIAkJZm9yICg7OykgLyogZmluZCBxICovCi0gCQkJewotIAkJCWludCBz ZWVkX2lzX3JhbmRvbTsKLSAKLS0JCQkvKiBzdGVwIDEgKi8KLSsJCQkvKiBzdGVwIDUgZ2VuZXJh dGUgc2VlZCAqLwotIAkJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAwLCBtKyspKQotIAkJCQlnb3Rv IGVycjsKLSAKLUBAIC0yMTIsMzAgKzI5NiwxOCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4o RFNBICpyZXQsIHNpemVfCi0gCQkJCXNlZWRfbGVuPTA7IC8qIHVzZSByYW5kb20gc2VlZCBpZiAn c2VlZF9pbicgdHVybnMgb3V0IHRvIGJlIGJhZCovCi0gCQkJCX0KLSAJCQltZW1jcHkoYnVmICwg c2VlZCwgcXNpemUpOwotLQkJCW1lbWNweShidWYyLCBzZWVkLCBxc2l6ZSk7Ci0tCQkJLyogcHJl Y29tcHV0ZSAiU0VFRCArIDEiIGZvciBzdGVwIDc6ICovCi0tCQkJZm9yIChpID0gcXNpemUtMTsg aSA+PSAwOyBpLS0pCi0tCQkJCXsKLS0JCQkJYnVmW2ldKys7Ci0tCQkJCWlmIChidWZbaV0gIT0g MCkKLS0JCQkJCWJyZWFrOwotLQkJCQl9Ci0gCi0tCQkJLyogc3RlcCAyICovCi0rCQkJLyogc3Rl cCA2IFUgPSBoYXNoKHNlZWQpICovCi0gCQkJaWYgKCFFVlBfRGlnZXN0KHNlZWQsIHFzaXplLCBt ZCwgICBOVUxMLCBldnBtZCwgTlVMTCkpCi0gCQkJCWdvdG8gZXJyOwotLQkJCWlmICghRVZQX0Rp Z2VzdChidWYsICBxc2l6ZSwgYnVmMiwgTlVMTCwgZXZwbWQsIE5VTEwpKQotLQkJCQlnb3RvIGVy cjsKLS0JCQlmb3IgKGkgPSAwOyBpIDwgcXNpemU7IGkrKykKLS0JCQkJbWRbaV1ePWJ1ZjJbaV07 Ci0gCi0tCQkJLyogc3RlcCAzICovCi0rCQkJLyogc3RlcCA3IHEgPSAyXihxYml0cy0xKSArIFUg KyAxIC0gKFUgbW9kIDIpICovCi0gCQkJbWRbMF0gfD0gMHg4MDsKLSAJCQltZFtxc2l6ZS0xXSB8 PSAweDAxOwotIAkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcSkpCi0gCQkJCWdvdG8gZXJy OwotIAotLQkJCS8qIHN0ZXAgNCAqLwotKwkJCS8qIHN0ZXAgOCB0ZXN0IGZvciBwcmltZSAoNjQg cm91bmQgb2YgUmFiaW4tTWlsbGVyKSAqLwotIAkJCXIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9l eChxLCBEU1NfcHJpbWVfY2hlY2tzLCBjdHgsCi0gCQkJCQlzZWVkX2lzX3JhbmRvbSwgY2IpOwot IAkJCWlmIChyID4gMCkKLUBAIC0yNDMsMjcgKzMxNSwyMiBAQCBpbnQgZHNhX2J1aWx0aW5fcGFy YW1nZW4oRFNBICpyZXQsIHNpemVfCi0gCQkJaWYgKHIgIT0gMCkKLSAJCQkJZ290byBlcnI7Ci0g Ci0tCQkJLyogZG8gYSBjYWxsYmFjayBjYWxsICovCi0tCQkJLyogc3RlcCA1ICovCi0gCQkJfQot IAotIAkJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDApKSBnb3RvIGVycjsKLSAJCWlmKCFCTl9H RU5DQl9jYWxsKGNiLCAzLCAwKSkgZ290byBlcnI7Ci0gCi0tCQkvKiBzdGVwIDYgKi8KLSsJCS8q IHN0ZXAgMTEgKi8KLSAJCWNvdW50ZXI9MDsKLS0JCS8qICJvZmZzZXQgPSAyIiAqLwotLQotLQkJ bj0oYml0cy0xKS8xNjA7Ci0rCQkvKiAib2Zmc2V0ID0gMSIgKi8KLSAKLSAJCWZvciAoOzspCi0g CQkJewotIAkJCWlmICgoY291bnRlciAhPSAwKSAmJiAhQk5fR0VOQ0JfY2FsbChjYiwgMCwgY291 bnRlcikpCi0gCQkJCWdvdG8gZXJyOwotIAotLQkJCS8qIHN0ZXAgNyAqLwotKwkJCS8qIHN0ZXAg MTEuMSwgMTEuMiBvYnRhaW4gVyAqLwotIAkJCUJOX3plcm8oVyk7Ci0tCQkJLyogbm93ICdidWYn IGNvbnRhaW5zICJTRUVEICsgb2Zmc2V0IC0gMSIgKi8KLSAJCQlmb3IgKGs9MDsgazw9bjsgaysr KQotIAkJCQl7Ci0gCQkJCS8qIG9idGFpbiAiU0VFRCArIG9mZnNldCArIGsiIGJ5IGluY3JlbWVu dGluZzogKi8KLUBAIC0yNzgsMjggKzM0NSwzMCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4o RFNBICpyZXQsIHNpemVfCi0gCQkJCQkJCQkJTlVMTCkpCi0gCQkJCQlnb3RvIGVycjsKLSAKLS0J CQkJLyogc3RlcCA4ICovCi0gCQkJCWlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcjApKQotIAkJ CQkJZ290byBlcnI7Ci0tCQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLChxc2l6ZSA8PCAzKSprKSkg Z290byBlcnI7Ci0rCQkJCWlmIChrID09IG4pCi0rCQkJCQlCTl9tYXNrX2JpdHMocjAsYik7Ci0r CQkJCWlmICghQk5fbHNoaWZ0KHIwLHIwLHFiaXRzKmspKSBnb3RvIGVycjsKLSAJCQkJaWYgKCFC Tl9hZGQoVyxXLHIwKSkgZ290byBlcnI7Ci0gCQkJCX0KLSAKLS0JCQkvKiBtb3JlIG9mIHN0ZXAg OCAqLwotLQkJCWlmICghQk5fbWFza19iaXRzKFcsYml0cy0xKSkgZ290byBlcnI7Ci0rCQkJLyog c3RlcCAxMS4zIFggPSBXICsgMl4oTC0xKSAqLwotIAkJCWlmICghQk5fY29weShYLFcpKSBnb3Rv IGVycjsKLSAJCQlpZiAoIUJOX2FkZChYLFgsdGVzdCkpIGdvdG8gZXJyOwotIAotLQkJCS8qIHN0 ZXAgOSAqLwotKwkJCS8qIHN0ZXAgMTEuNCBjID0gWCBtb2QgMipxICovCi0gCQkJaWYgKCFCTl9s c2hpZnQxKHIwLHEpKSBnb3RvIGVycjsKLSAJCQlpZiAoIUJOX21vZChjLFgscjAsY3R4KSkgZ290 byBlcnI7Ci0rCi0rCQkJLyogc3RlcCAxMS41IHAgPSBYIC0gKGMgLSAxKSAqLwotIAkJCWlmICgh Qk5fc3ViKHIwLGMsQk5fdmFsdWVfb25lKCkpKSBnb3RvIGVycjsKLSAJCQlpZiAoIUJOX3N1Yihw LFgscjApKSBnb3RvIGVycjsKLSAKLS0JCQkvKiBzdGVwIDEwICovCi0rCQkJLyogc3RlcCAxMS42 ICovCi0gCQkJaWYgKEJOX2NtcChwLHRlc3QpID49IDApCi0gCQkJCXsKLS0JCQkJLyogc3RlcCAx MSAqLwotKwkJCQkvKiBzdGVwIDExLjcgKi8KLSAJCQkJciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0 X2V4KHAsIERTU19wcmltZV9jaGVja3MsCi0gCQkJCQkJY3R4LCAxLCBjYik7Ci0gCQkJCWlmIChy ID4gMCkKLUBAIC0zMDgsMTkgKzM3Nyw0NSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNB ICpyZXQsIHNpemVfCi0gCQkJCQlnb3RvIGVycjsKLSAJCQkJfQotIAotLQkJCS8qIHN0ZXAgMTMg Ki8KLSsJCQkvKiBzdGVwIDExLjkgKi8KLSAJCQljb3VudGVyKys7Ci0gCQkJLyogIm9mZnNldCA9 IG9mZnNldCArIG4gKyAxIiAqLwotIAotLQkJCS8qIHN0ZXAgMTQgKi8KLS0JCQlpZiAoY291bnRl ciA+PSA0MDk2KSBicmVhazsKLSsJCQkvKiBzdGVwIDEyICovCi0rCQkJaWYgKGNvdW50ZXIgPj0g NCpiaXRzKSBicmVhazsKLSAJCQl9Ci0gCQl9Ci0gZW5kOgotIAlpZighQk5fR0VOQ0JfY2FsbChj YiwgMiwgMSkpCi0gCQlnb3RvIGVycjsKLSAKLS0JLyogV2Ugbm93IG5lZWQgdG8gZ2VuZXJhdGUg ZyAqLwotKwlvaz0xOwotK2VycjoKLSsJaWYgKG9rKQotKwkJewotKwkJaWYgKGNvdW50ZXJfcmV0 ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOwotKwkJfQotKwlyZXR1cm4gb2s7Ci0rCX0K LSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYwotKyNlbmRpZgotK2ludCBGSVBTX2Rz YV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsJCUJJR05V TSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWlu dCBvaz0wOwotKwlCSUdOVU0gKnIwLCAqdGVzdCwgKmcgPSBOVUxMOwotKwlCTl9NT05UX0NUWCAq bW9udDsKLSsJdW5zaWduZWQgaW50IGg9MjsKLSsKLSsJaWYgKChtb250PUJOX01PTlRfQ1RYX25l dygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCXIwID0gQk5fQ1RYX2dldChjdHgpOwot KwkqZ19yZXQgPSBnID0gQk5fQ1RYX2dldChjdHgpOwotKwl0ZXN0ID0gQk5fQ1RYX2dldChjdHgp OwotKwotIAkvKiBTZXQgcjA9KHAtMSkvcSAqLwotIAlpZiAoIUJOX3N1Yih0ZXN0LHAsQk5fdmFs dWVfb25lKCkpKSBnb3RvIGVycjsKLSAJaWYgKCFCTl9kaXYocjAsTlVMTCx0ZXN0LHEsY3R4KSkg Z290byBlcnI7Ci1AQCAtMzQ0LDI2ICs0MzksNyBAQCBlbmQ6Ci0gZXJyOgotIAlpZiAob2spCi0g CQl7Ci0tCQlpZihyZXQtPnApIEJOX2ZyZWUocmV0LT5wKTsKLS0JCWlmKHJldC0+cSkgQk5fZnJl ZShyZXQtPnEpOwotLQkJaWYocmV0LT5nKSBCTl9mcmVlKHJldC0+Zyk7Ci0tCQlyZXQtPnA9Qk5f ZHVwKHApOwotLQkJcmV0LT5xPUJOX2R1cChxKTsKLS0JCXJldC0+Zz1CTl9kdXAoZyk7Ci0tCQlp ZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5VTEwpCi0t CQkJewotLQkJCW9rPTA7Ci0tCQkJZ290byBlcnI7Ci0tCQkJfQotLQkJaWYgKGNvdW50ZXJfcmV0 ICE9IE5VTEwpICpjb3VudGVyX3JldD1jb3VudGVyOwotIAkJaWYgKGhfcmV0ICE9IE5VTEwpICpo X3JldD1oOwotLQkJaWYgKHNlZWRfb3V0KQotLQkJCW1lbWNweShzZWVkX291dCwgc2VlZCwgcXNp emUpOwotLQkJfQotLQlpZihjdHgpCi0tCQl7Ci0tCQlCTl9DVFhfZW5kKGN0eCk7Ci0tCQlCTl9D VFhfZnJlZShjdHgpOwotIAkJfQotIAlpZiAobW9udCAhPSBOVUxMKSBCTl9NT05UX0NUWF9mcmVl KG1vbnQpOwotIAlyZXR1cm4gb2s7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhLmgKLS0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhLmguZmlwcwkyMDEyLTAyLTI5IDEw OjMzOjAyLjMxMDI5MDczNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Rz YS9kc2EuaAkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4MDI5NDc3NyArMDEwMAotQEAgLTg4LDYgKzg4 LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCi0gI2Vu ZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAot KwotICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKLSAjZGVmaW5lIERTQV9GTEFH X05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWls dC1pbiBEU0EKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1AQCAtMjY0LDYgKzI2Niwx NyBAQCBpbnQJRFNBX3ByaW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCi0gREggKkRTQV9k dXBfREgoY29uc3QgRFNBICpyKTsKLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r aW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXpl X3QgcWJpdHMsCi0rCWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNl ZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKLSsJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9u ZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7Ci0raW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NU WCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKwkJY29uc3QgRVZQX01EICpldnBt ZCwgdW5zaWduZWQgY2hhciAqc2VlZCwgaW50IHNlZWRfbGVuLAotKwkJQklHTlVNICoqcF9yZXQs IEJJR05VTSAqKnFfcmV0LCBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOwotK2ludCBG SVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsJ CUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKLSsj ZW5kaWYKLSsKLSAjZGVmaW5lIEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4 LCBuYml0cykgXAotIAlFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BL RVlfT1BfUEFSQU1HRU4sIFwKLSAJCQkJRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5fQklUUywg bmJpdHMsIE5VTEwpCi1AQCAtMjg1LDEwICsyOTgsMTMgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3Ry aW5ncyh2b2lkKTsKLSAjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0Ci0gI2RlZmlu ZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlQJCQkJIDEwMAotICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1T X1BSSU5UX0ZQCQkJIDEwMQotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOCQkJIDEy NAotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTIzCi0gI2RlZmluZSBE U0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCi0gI2RlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZCQkJ CSAxMTMKLS0jZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9LRVkJCQkJIDEyNAotLSNkZWZpbmUg RFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVgJCSAxMjMKLSsjZGVmaW5lIERTQV9GX0RT QV9HRU5FUkFURV9LRVkJCQkJIDEyNgotKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFN RVRFUlNfRVgJCSAxMjcKLSsjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTCS8q IHVudXNlZCAqLwkgMTI1Ci0gI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAzCi0g I2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKLSAjZGVmaW5lIERTQV9GX0RT QV9QUklOVF9GUAkJCQkgMTA1Ci1AQCAtMzE0LDExICszMzAsMTUgQEAgdm9pZCBFUlJfbG9hZF9E U0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlf U0laRQkJIDEwMAotICNkZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQKLSAjZGVmaW5l IERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUJCQkgMTA2Ci0rI2RlZmluZSBEU0FfUl9LRVlfU0la RV9JTlZBTElECQkJCSAxMTMKLSsjZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAx MTAKLSAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKLSAjZGVmaW5lIERT QV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKLS0jZGVmaW5lIERTQV9SX05FRURfTkVXX1NF VFVQX1ZBTFVFUwkJCSAxMTAKLSsjZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUwkJ CSAxMTIKLSAjZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QJCQkgMTExCi0rI2RlZmlu ZSBEU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDExMQotICNkZWZpbmUgRFNBX1JfTk9fUEFSQU1F VEVSU19TRVQJCQkJIDEwNwotKyNkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lO X0ZJUFNfTU9ERSAvKiB1bnVzZWQgKi8gMTEyCi0gI2RlZmluZSBEU0FfUl9QQVJBTUVURVJfRU5D T0RJTkdfRVJST1IJCQkgMTA1Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9kc2EvZHNhX2tleS5jLmZpcHMJMjAxMS0wNi0wOSAxNzoyMTo0Ni4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTItMDItMjkg MTA6MzM6MDIuNzgxMjk0Nzg2ICswMTAwCi1AQCAtNjYsNiArNjYsMjQgQEAKLSAKLSAjaWZkZWYg T1BFTlNTTF9GSVBTCi0gI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKwotK3N0YXRpYyBpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCi0rCXsK LSsJRVZQX1BLRVkgcGs7Ci0rCXVuc2lnbmVkIGNoYXIgdGJzW10gPSAiRFNBIFBhaXJ3aXNlIENo ZWNrIERhdGEiOwotKyAgICAJcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsgICAgCXBrLnBrZXku ZHNhID0gZHNhOwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdCgmcGssIHRicywg MCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKwkJZmlwc19zZXRfc2Vs ZnRlc3RfZmFpbCgpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0g I2VuZGlmCi0gCi0gc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOwotQEAg LTgyLDEwICsxMDAsNiBAQCBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkKLSAjZW5kaWYK LSAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5Z2VuKQotIAkJcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2tl eWdlbihkc2EpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0JaWYgKEZJUFNfbW9kZSgpKQotLQkJ cmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX2tleShkc2EpOwotLSNlbmRpZgotIAlyZXR1cm4gZHNh X2J1aWx0aW5fa2V5Z2VuKGRzYSk7Ci0gCX0KLSAKLUBAIC05NSw2ICsxMDksMTUgQEAgc3RhdGlj IGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCi0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0g CUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9G SVBTX0FMTE9XKQotKwkJJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tF WUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNl bmRpZgotKwotIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOwotIAot IAlpZiAoZHNhLT5wcml2X2tleSA9PSBOVUxMKQotQEAgLTEzMyw2ICsxNTYsMTQgQEAgc3RhdGlj IGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCi0gCi0gCWRzYS0+cHJpdl9rZXk9cHJp dl9rZXk7Ci0gCWRzYS0+cHViX2tleT1wdWJfa2V5OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYoRklQU19tb2RlKCkgJiYgIWZpcHNfY2hlY2tfZHNhKGRzYSkpCi0rCQl7Ci0rCQlkc2EtPnB1 Yl9rZXkgPSBOVUxMOwotKwkJZHNhLT5wcml2X2tleSA9IE5VTEw7Ci0rCSAgICAJZ290byBlcnI7 Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7Ci0gCi0gZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2RzYS9kc2FfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNh X2xpYi5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjowOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhX2xpYi5jCTIwMTItMDItMjkgMTA6MzM6MDIu NzgxMjk0Nzg2ICswMTAwCi1AQCAtODcsMTQgKzg3LDcgQEAgY29uc3QgRFNBX01FVEhPRCAqRFNB X2dldF9kZWZhdWx0X21ldGhvZAotIAl7Ci0gCWlmKCFkZWZhdWx0X0RTQV9tZXRob2QpCi0gCQl7 Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKEZJUFNfbW9kZSgpKQotLQkJCXJldHVybiBG SVBTX2RzYV9vcGVuc3NsKCk7Ci0tCQllbHNlCi0tCQkJcmV0dXJuIERTQV9PcGVuU1NMKCk7Ci0t I2Vsc2UKLSAJCWRlZmF1bHRfRFNBX21ldGhvZCA9IERTQV9PcGVuU1NMKCk7Ci0tI2VuZGlmCi0g CQl9Ci0gCXJldHVybiBkZWZhdWx0X0RTQV9tZXRob2Q7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZHNhL2RzYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9k c2EvZHNhX2xvY2wuaC5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuMzEzMjkwNzYyICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9sb2NsLmgJMjAxMi0wMi0yOSAx MDozMzowMi43ODEyOTQ3ODYgKzAxMDAKLUBAIC01Niw1ICs1Niw0IEBACi0gCi0gaW50IGRzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotIAlj b25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qg c2VlZF9sZW4sCi0tCXVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAotIAlpbnQgKmNvdW50ZXJfcmV0 LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9k c2EvZHNhX29zc2wuYy5maXBzCTIwMTEtMDItMDEgMTM6NTM6NDcuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYV9vc3NsLmMJMjAxMi0wMi0yOSAx MDozMzowMi43ODIyOTQ3OTUgKzAxMDAKLUBAIC02NSw2ICs2NSw5IEBACi0gI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2FzbjEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNp Z25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOwotIHN0YXRpYyBpbnQgZHNhX3Np Z25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBCSUdOVU0gKipraW52cCwgQklHTlVN ICoqcnApOwotQEAgLTgyLDcgKzg1LDcgQEAgTlVMTCwgLyogZHNhX21vZF9leHAsICovCi0gTlVM TCwgLyogZHNhX2JuX21vZF9leHAsICovCi0gZHNhX2luaXQsCi0gZHNhX2ZpbmlzaCwKLS0wLAot K0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAotIE5VTEwsCi0gTlVMTCwKLSBOVUxMCi1AQCAtMTM4LDYg KzE0MSwyMSBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduCi0gCURT QV9TSUcgKnJldD1OVUxMOwotIAlpbnQgbm9yZWRvID0gMDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJy KEZJUFNfRl9EU0FfRE9fU0lHTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAg cmV0dXJuIE5VTEw7Ci0rCSAgICB9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+Zmxh Z3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykgCi0rCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5w KSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIo RFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4g TlVMTDsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJQk5faW5pdCgmbSk7Ci0gCUJOX2luaXQoJnhyKTsK LSAKLUBAIC0zMjUsNiArMzQzLDIxIEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1 bnNpZ25lZAotIAkJcmV0dXJuIC0xOwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19G X0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVy biAtMTsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERT QV9GTEFHX05PTl9GSVBTX0FMTE9XKSAKLSsJCSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BF TlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9E U0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIC0xOwot KwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA+IE9QRU5TU0xfRFNB X01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSxE U0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtMzk5LDYgKzQzMiw5IEBAIHN0YXRpYyBpbnQg ZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAotIHN0YXRpYyBpbnQgZHNhX2luaXQoRFNB ICpkc2EpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygp OwotKyNlbmRpZgotIAlkc2EtPmZsYWdzfD1EU0FfRkxBR19DQUNIRV9NT05UX1A7Ci0gCXJldHVy bigxKTsKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhX3Bt ZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKLS0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcwkyMDExLTA2 LTIwIDIyOjA1OjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2RzYS9kc2FfcG1ldGguYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4MjI5NDc5NSArMDEwMAot QEAgLTI1NSw3ICsyNTUsNyBAQCBzdGF0aWMgaW50IHBrZXlfZHNhX3BhcmFtZ2VuKEVWUF9QS0VZ X0NUCi0gCWlmICghZHNhKQotIAkJcmV0dXJuIDA7Ci0gCXJldCA9IGRzYV9idWlsdGluX3BhcmFt Z2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFiaXRzLCBkY3R4LT5wbWQsCi0tCSAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIHBjYik7Ci0rCSAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIHBjYik7Ci0gCWlm IChyZXQpCi0gCQlFVlBfUEtFWV9hc3NpZ25fRFNBKHBrZXksIGRzYSk7Ci0gCWVsc2UKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9kc2EvZHNhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzCTIwMDgtMDgtMDYgMTc6NTQ6MTEuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZHNhL2RzYXRlc3QuYwkyMDEy LTAyLTI5IDEwOjMzOjAyLjc4MjI5NDc5NSArMDEwMAotQEAgLTk2LDM2ICs5Niw0MSBAQCBzdGF0 aWMgaW50IE1TX0NBTExCQUNLIGRzYV9jYihpbnQgcCwgaW50Ci0gLyogc2VlZCwgb3V0X3AsIG91 dF9xLCBvdXRfZyBhcmUgdGFrZW4gZnJvbSB0aGUgdXBkYXRlZCBBcHBlbmRpeCA1IHRvCi0gICog RklQUyBQVUIgMTg2IGFuZCBhbHNvIGFwcGVhciBpbiBBcHBlbmRpeCA1IHRvIEZJUFMgUElCIDE4 Ni0xICovCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF09ewotLQkweGQ1LDB4MDEsMHg0 ZSwweDRiLDB4NjAsMHhlZiwweDJiLDB4YTgsMHhiNiwweDIxLDB4MWIsMHg0MCwKLS0JMHg2Miww eGJhLDB4MzIsMHgyNCwweGUwLDB4NDIsMHg3ZCwweGQzLAotKwkweDAyLDB4NDcsMHgxMSwweDky LDB4MTEsMHg4OCwweEM4LDB4RkIsMHhBRiwweDQ4LDB4NEMsMHg2MiwKLSsJMHhERiwweEE1LDB4 QkUsMHhBMCwweEE0LDB4M0MsMHg1NiwweEUzLAotIAl9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBj aGFyIG91dF9wW109ewotLQkweDhkLDB4ZjIsMHhhNCwweDk0LDB4NDksMHgyMiwweDc2LDB4YWEs Ci0tCTB4M2QsMHgyNSwweDc1LDB4OWIsMHhiMCwweDY4LDB4NjksMHhjYiwKLS0JMHhlYSwweGMw LDB4ZDgsMHgzYSwweGZiLDB4OGQsMHgwYywweGY3LAotLQkweGNiLDB4YjgsMHgzMiwweDRmLDB4 MGQsMHg3OCwweDgyLDB4ZTUsCi0tCTB4ZDAsMHg3NiwweDJmLDB4YzUsMHhiNywweDIxLDB4MGUs MHhhZiwKLS0JMHhjMiwweGU5LDB4YWQsMHhhYywweDMyLDB4YWIsMHg3YSwweGFjLAotLQkweDQ5 LDB4NjksMHgzZCwweGZiLDB4ZjgsMHgzNywweDI0LDB4YzIsCi0tCTB4ZWMsMHgwNywweDM2LDB4 ZWUsMHgzMSwweGM4LDB4MDIsMHg5MSwKLSsJMHhBQywweENCLDB4MUUsMHg2MywweDYwLDB4Njks MHgwQywweEZCLDB4MDYsMHgxOSwweDY4LDB4M0UsCi0rCTB4QTUsMHgwMSwweDVBLDB4QTIsMHgx NSwweDVDLDB4RTIsMHg5OSwweDJELDB4RDUsMHgzMCwweDk5LAotKwkweDdFLDB4NUYsMHg4RCww eEUyLDB4RjcsMHhDNiwweDJFLDB4OEQsMHhBMywweDlGLDB4NTgsMHhBRCwKLSsJMHhENiwweEE5 LDB4N0QsMHgwRSwweDBELDB4OTUsMHg1MywweEE2LDB4NzEsMHgzQSwweERFLDB4QUIsCi0rCTB4 QUMsMHhFOSwweEY0LDB4MzYsMHg1NSwweDlFLDB4QjksMHhENiwweDkzLDB4QkYsMHhGMywweDE4 LAotKwkweDFDLDB4MTQsMHg3QiwweEE1LDB4NDIsMHgyRSwweENELDB4MDAsMHhFQiwweDM1LDB4 M0IsMHgxQiwKLSsJMHhBOCwweDUxLDB4QkIsMHhFMSwweDU4LDB4NDIsMHg4NSwweDg0LDB4MjIs MHhBNywweDk3LDB4NUUsCi0rCTB4OTksMHg2RiwweDM4LDB4MjAsMHhCRCwweDlELDB4QjYsMHhE OSwweDMzLDB4MzcsMHgyQSwweEZELAotKwkweEJCLDB4RDQsMHhCQywweDBDLDB4MkEsMHg2Nyww eENCLDB4OUYsMHhCQiwweERGLDB4RjksMHg5MywKLSsJMHhBQSwweEQ2LDB4RjAsMHhENiwweDk1 LDB4MEIsMHg1RCwweDY1LDB4MTQsMHhEMCwweDE4LDB4OUQsCi0rCTB4QzYsMHhBRiwweEYwLDB4 QzYsMHgzNywweDdDLDB4RjMsMHg1RiwKLSAJfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hhciBv dXRfcVtdPXsKLS0JMHhjNywweDczLDB4MjEsMHg4YywweDczLDB4N2UsMHhjOCwweGVlLAotLQkw eDk5LDB4M2IsMHg0ZiwweDJkLDB4ZWQsMHgzMCwweGY0LDB4OGUsCi0tCTB4ZGEsMHhjZSwweDkx LDB4NWYsCi0rCTB4RTMsMHg4RSwweDVFLDB4NkQsMHhCRiwweDJCLDB4NzksMHhGOCwweEM1LDB4 NEIsMHg4OSwweDhCLAotKwkweEJBLDB4MkQsMHg5MSwweEMzLDB4NkMsMHg4MCwweEFDLDB4ODcs Ci0gCX07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X2dbXT17Ci0tCTB4NjIsMHg2ZCww eDAyLDB4NzgsMHgzOSwweGVhLDB4MGEsMHgxMywKLS0JMHg0MSwweDMxLDB4NjMsMHhhNSwweDVi LDB4NGMsMHhiNSwweDAwLAotLQkweDI5LDB4OWQsMHg1NSwweDIyLDB4OTUsMHg2YywweGVmLDB4 Y2IsCi0tCTB4M2IsMHhmZiwweDEwLDB4ZjMsMHg5OSwweGNlLDB4MmMsMHgyZSwKLS0JMHg3MSww eGNiLDB4OWQsMHhlNSwweGZhLDB4MjQsMHhiYSwweGJmLAotLQkweDU4LDB4ZTUsMHhiNywweDk1 LDB4MjEsMHg5MiwweDVjLDB4OWMsCi0tCTB4YzQsMHgyZSwweDlmLDB4NmYsMHg0NiwweDRiLDB4 MDgsMHg4YywKLS0JMHhjNSwweDcyLDB4YWYsMHg1MywweGU2LDB4ZDcsMHg4OCwweDAyLAotKwkw eDQyLDB4NEEsMHgwNCwweDRFLDB4NzksMHhCNCwweDk5LDB4N0YsMHhGRCwweDU4LDB4MzYsMHgy QywKLSsJMHgxQiwweDVGLDB4MTgsMHg3RSwweDBELDB4Q0MsMHhBQiwweDgxLDB4QzksMHg1RCww eDEwLDB4Q0UsCi0rCTB4NEUsMHg4MCwweDdFLDB4NTgsMHhCNCwweDM0LDB4M0YsMHhBNywweDQ1 LDB4QzcsMHhBQSwweDM2LAotKwkweDI0LDB4NDIsMHhBOSwweDNCLDB4RTgsMHgwRSwweDA0LDB4 MDIsMHgyRCwweEZCLDB4QTYsMHgxMywKLSsJMHhCOSwweEI1LDB4MTUsMHhBNSwweDU2LDB4MDcs MHgzNSwweEU0LDB4MDMsMHhCNiwweDc5LDB4N0MsCi0rCTB4NjIsMHhERCwweERGLDB4M0YsMHg3 MSwweDNBLDB4OUQsMHg4QiwweEM0LDB4RjYsMHhFNywweDFELAotKwkweDUyLDB4QTgsMHhBOSww eDQzLDB4MUQsMHgzMywweDUxLDB4ODgsMHgzOSwweEJELDB4NzMsMHhFOSwKLSsJMHg1RiwweEJF LDB4ODIsMHg0OSwweDI3LDB4RTYsMHhCNSwweDUzLDB4QzEsMHgzOCwweEFDLDB4MkYsCi0rCTB4 NkQsMHg5NywweDZDLDB4RUIsMHg2NywweEMxLDB4NUYsMHg2NywweEY4LDB4MzUsMHgwNSwweDVF LAotKwkweEQ1LDB4NjgsMHg4MCwweEFBLDB4OTYsMHhDQSwweDBCLDB4OEEsMHhFNiwweEYxLDB4 QjEsMHg0MSwKLSsJMHhDNiwweDc1LDB4OTQsMHgwQSwweDBBLDB4MkEsMHhGQSwweDI5LAotIAl9 OwotIAotIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1 Njc4OTAiOwotQEAgLTE1Nyw3ICsxNjIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi0gCUJJT19wcmludGYoYmlvX2VyciwidGVzdCBnZW5lcmF0aW9uIG9mIERTQSBwYXJhbWV0 ZXJzXG4iKTsKLSAKLSAJQk5fR0VOQ0Jfc2V0KCZjYiwgZHNhX2NiLCBiaW9fZXJyKTsKLS0JaWYo KChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eChkc2EsIDUxMiwKLSsJaWYoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2Vu ZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsCi0gCQkJCXNlZWQsIDIwLCAmY291bnRlciwg JmgsICZjYikpCi0gCQlnb3RvIGVuZDsKLSAKLUBAIC0xNzAsOSArMTc1LDkgQEAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAlCSU9fcHJpbnRmKGJpb19lcnIsIlxuY291bnRlcj0l ZCBoPSVsZFxuIixjb3VudGVyLGgpOwotIAkJCi0gCURTQV9wcmludChiaW9fZXJyLGRzYSwwKTsK LS0JaWYgKGNvdW50ZXIgIT0gMTA1KSAKLSsJaWYgKGNvdW50ZXIgIT0gMjM5KSAKLSAJCXsKLS0J CUJJT19wcmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQgYmUgMTA1XG4iKTsKLSsJCUJJT19w cmludGYoYmlvX2VyciwiY291bnRlciBzaG91bGQgYmUgMjM5XG4iKTsKLSAJCWdvdG8gZW5kOwot IAkJfQotIAlpZiAoaCAhPSAyKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v ZW5naW5lL2VuZ19hbGwuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2VuZ2luZS9l bmdfYWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5j LmZpcHMJMjAxMS0wOC0xMCAyMDo1MzoxMy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzgz Mjk0ODAzICswMTAwCi1AQCAtNTgsMTEgKzU4LDI1IEBACi0gCi0gI2luY2x1ZGUgImNyeXB0bGli LmgiCi0gI2luY2x1ZGUgImVuZ19pbnQuaCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRp bl9lbmdpbmVzKHZvaWQpCi0gCXsKLSAJLyogU29tZSBFTkdJTkVzIG5lZWQgdGhpcyAqLwotIAlP UEVOU1NMX2NwdWlkX3NldHVwKCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2lu aXRfbGlicmFyeSgpOwotKwlpZiAoRklQU19tb2RlKCkpIHsKLSsJCS8qIFdlIGFsbG93IGxvYWRp bmcgZHluYW1pYyBlbmdpbmUgYXMgYSB0aGlyZCBwYXJ0eQotKwkJICAgZW5naW5lIG1pZ2h0IGJl IEZJUFMgdmFsaWRhdGVkLgotKwkJICAgVXNlciBpcyBkaXNhbGxvd2VkIHRvIGxvYWQgbm9uLXZh bGlkYXRlZCBlbmdpbmVzCi0rCQkgICBieSBzZWN1cml0eSBwb2xpY3kuICovCi0rCQlFTkdJTkVf bG9hZF9keW5hbWljKCk7Ci0rCQlyZXR1cm47Ci0rCX0KLSsjZW5kaWYKLSAjaWYgMAotIAkvKiBU aGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgYW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3Ms IG9uZSBkYXksCi0gCSAqIGl0IGlzIHRoZSAqb25seSogd2F5IGZvciBzdGFuZGFyZCBidWlsdGlu IGltcGxlbWVudGF0aW9ucyB0byBiZSBiZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Vyci9l cnJfYWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZp cHMJMjAxMS0wNi0yMSAxODo1ODoxMC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9lcnIvZXJyX2FsbC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzgzMjk0ODAz ICswMTAwCi1AQCAtOTYsNiArOTYsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC90cy5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gI2lm bmRlZiBPUEVOU1NMX05PX0NNUwotICNpbmNsdWRlIDxvcGVuc3NsL2Ntcy5oPgotICNlbmRpZgot QEAgLTE1Myw2ICsxNTYsOSBAQCB2b2lkIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKHZvaWQpCi0g I2VuZGlmCi0gCUVSUl9sb2FkX09DU1Bfc3RyaW5ncygpOwotIAlFUlJfbG9hZF9VSV9zdHJpbmdz KCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlFUlJfbG9hZF9GSVBTX3N0cmluZ3MoKTsKLSsj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0gCUVSUl9sb2FkX0NNU19zdHJpbmdzKCk7 Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvY19hbGxj LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvY19hbGxjLmMKLS0tLSBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvY19hbGxjLmMuZmlwcwkyMDExLTExLTE0IDIyOjEz OjM1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9j X2FsbGMuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4MzI5NDgwMyArMDEwMAotQEAgLTY1LDYgKzY1 LDExIEBACi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQotIAl7Ci0gCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKwlpZighRklQU19t b2RlKCkpIAotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAJRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7Ci0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiMSgp KTsKLUBAIC0yMjcsNCArMjMyLDYwIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9p ZCkKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiQ0FNRUxMSUEy NTYiKTsKLSAJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywiY2FtZWxs aWEyNTYiKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJ CXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl X2NmYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKLSsKLSsJRVZQ X2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVz X2VkZTNfb2ZiKCkpOwotKwotKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jYmMoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2Fs aWFzKFNOX2Rlc19lZGUzX2NiYywiREVTMyIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9k ZXNfZWRlM19jYmMsImRlczMiKTsKLSsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7 Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKLSsjZW5kaWYKLSsKLSsjaWZuZGVm IE9QRU5TU0xfTk9fQUVTCi0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2VjYigpKTsKLSsJ RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzEyOF9jZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjEoKSk7Ci0r CUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X29mYigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY3RyKCkpOwot KwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X3h0cygpKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMs IkFFUzEyOCIpOwotKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiYWVzMTI4 Iik7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2VjYigpKTsKLSsJRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18xOTJfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIo KSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjEoKSk7Ci0rCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29m YigpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOwotKwlFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9nY20oKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18x OTJfY2JjLCJBRVMxOTIiKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMs ImFlczE5MiIpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfY2ZiKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmIxKCkpOwotKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jZmI4KCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9vZmIoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl94dHMoKSk7Ci0rCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCJBRVMy NTYiKTsKLSsJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsImFlczI1NiIpOwot KyNlbmRpZgotKwkJfQotKyNlbmRpZgotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAv Y19hbGxkLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvY19hbGxkLmMuZmlw cwkyMDA5LTA3LTA4IDEwOjUwOjUzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2V2cC9jX2FsbGQuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4NDI5NDgxMSAr MDEwMAotQEAgLTY0LDYgKzY0LDExIEBACi0gCi0gdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0 cyh2b2lkKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFy eSgpOwotKwlpZiAoIUZJUFNfbW9kZSgpKQotKwkJewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNT TF9OT19NRDQKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX21kNCgpKTsKLSAjZW5kaWYKLUBAIC0xMTEs NCArMTE2LDMyIEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKLSAjaWZuZGVm IE9QRU5TU0xfTk9fV0hJUkxQT09MCi0gCUVWUF9hZGRfZGlnZXN0KEVWUF93aGlybHBvb2woKSk7 Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJfQotKwllbHNlCi0rCQl7Ci0rI2lm ICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCi0r CUVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9z aGExLCJzc2wzLXNoYTEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FF bmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0rCUVW UF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FX aXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8yKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNh V2l0aFNIQTEsIkRTUzEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEs ImRzczEiKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsJRVZQX2FkZF9k aWdlc3QoRVZQX2VjZHNhKCkpOwotKyNlbmRpZgotKyNlbmRpZgotKyNpZm5kZWYgT1BFTlNTTF9O T19TSEEyNTYKLSsJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKLSsJRVZQX2FkZF9kaWdl c3QoRVZQX3NoYTI1NigpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0r CUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1 MTIoKSk7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2V2cC9kaWdlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9kaWdl c3QuYy5maXBzCTIwMTEtMDUtMjkgMTc6NTU6MTMuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNz bC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2RpZ2VzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzg0 Mjk0ODExICswMTAwCi1AQCAtMTQyLDkgKzE0Miw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQ X01EX0NUWCAqY3R4LCBjb25zCi0gCXJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUs IE5VTEwpOwotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3Nl IG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQ UwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsg Ki8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKLSsJeyBGSVBTX0VS Uk9SX0lHTk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJh ZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0r c3RhdGljIGludCBiYWRfZmluYWwoRVZQX01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KLSsKLStz dGF0aWMgY29uc3QgRVZQX01EIGJhZF9tZCA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwK LSsJYmFkX2luaXQsCi0rCWJhZF91cGRhdGUsCi0rCWJhZF9maW5hbCwKLSsJTlVMTCwKLSsJTlVM TCwKLSsJTlVMTCwKLSsJMCwKLSsJezAsMCwwLDB9LAotKwl9OwotKwotKyNlbmRpZgotKwotIGlu dCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwg RU5HSU5FICppbXBsKQotIAl7Ci0gCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9D VFhfRkxBR19DTEVBTkVEKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxG SVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOwot KwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQot IAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZp bmFsIidkIGNvbnRleHRzCi0gCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFu IEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZwotQEAgLTIwMSw2ICsyNDIsMTggQEAgaW50 IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgYwotICNlbmRpZgotIAlpZiAoY3R4 LT5kaWdlc3QgIT0gdHlwZSkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQ U19tb2RlKCkpCi0rCQkJewotKwkJCWlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQ UykgCi0rCQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExP VykpCi0rCQkJCXsKLSsJCQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9E SVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCQkJcmV0 dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rI2VuZGlmCi0gCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4 LT5kaWdlc3QtPmN0eF9zaXplKQotIAkJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJ Y3R4LT5kaWdlc3Q9dHlwZTsKLUBAIC0yMjksMjYgKzI4MiwxNSBAQCBza2lwX3RvX2luaXQ6Ci0g CQl9Ci0gCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQpCi0gCQlyZXR1 cm4gMTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSkKLS0JCXsKLS0J CWlmIChGSVBTX2RpZ2VzdGluaXQoY3R4LCB0eXBlKSkKLS0JCQlyZXR1cm4gMTsKLS0JCU9QRU5T U0xfZnJlZShjdHgtPm1kX2RhdGEpOwotLQkJY3R4LT5tZF9kYXRhID0gTlVMTDsKLS0JCXJldHVy biAwOwotLQkJfQotLSNlbmRpZgotIAlyZXR1cm4gY3R4LT5kaWdlc3QtPmluaXQoY3R4KTsKLSAJ fQotIAotIGludCBFVlBfRGlnZXN0VXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGNvdW50KQotIAl7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLQlyZXR1cm4g RklQU19kaWdlc3R1cGRhdGUoY3R4LCBkYXRhLCBjb3VudCk7Ci0tI2Vsc2UKLS0JcmV0dXJuIGN0 eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotICNl bmRpZgotKwlyZXR1cm4gY3R4LT51cGRhdGUoY3R4LGRhdGEsY291bnQpOwotIAl9Ci0gCi0gLyog VGhlIGNhbGxlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBm cm9tIHRoZSBjb250ZXh0ICovCi1AQCAtMjYzLDEwICszMDUsMTEgQEAgaW50IEVWUF9EaWdlc3RG aW5hbChFVlBfTURfQ1RYICpjdHgsIHVucwotIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0 IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLwotIGludCBF VlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5z aWduZWQgaW50ICpzaXplKQotIAl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlyZXR1cm4gRklQ U19kaWdlc3RmaW5hbChjdHgsIG1kLCBzaXplKTsKLS0jZWxzZQotIAlpbnQgcmV0OwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotKwotIAlP UEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6ZSA8PSBFVlBfTUFYX01EX1NJWkUpOwot IAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCxtZCk7Ci0gCWlmIChzaXplICE9IE5VTEwpCi1A QCAtMjc4LDcgKzMyMSw2IEBAIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4 LAotIAkJfQotIAltZW1zZXQoY3R4LT5tZF9kYXRhLDAsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsK LSAJcmV0dXJuIHJldDsKLS0jZW5kaWYKLSAJfQotIAotIGludCBFVlBfTURfQ1RYX2NvcHkoRVZQ X01EX0NUWCAqb3V0LCBjb25zdCBFVlBfTURfQ1RYICppbikKLUBAIC0zNzIsNyArNDE0LDYgQEAg dm9pZCBFVlBfTURfQ1RYX2Rlc3Ryb3koRVZQX01EX0NUWCAqY3R4KQotIC8qIFRoaXMgY2FsbCBm cmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0ICovCi0gaW50IEVWUF9N RF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCi0gCXsKLS0jaWZuZGVmIE9QRU5TU0xfRklQ UwotIAkvKiBEb24ndCBhc3N1bWUgY3R4LT5tZF9kYXRhIHdhcyBjbGVhbmVkIGluIEVWUF9EaWdl c3RfRmluYWwsCi0gCSAqIGJlY2F1c2Ugc29tZXRpbWVzIG9ubHkgY29waWVzIG9mIHRoZSBjb250 ZXh0IGFyZSBldmVyIGZpbmFsaXNlZC4KLSAJICovCi1AQCAtMzg1LDcgKzQyNiw2IEBAIGludCBF VlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQotIAkJT1BFTlNTTF9jbGVhbnNlKGN0 eC0+bWRfZGF0YSxjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpOwotIAkJT1BFTlNTTF9mcmVlKGN0eC0+ bWRfZGF0YSk7Ci0gCQl9Ci0tI2VuZGlmCi0gCWlmIChjdHgtPnBjdHgpCi0gCQlFVlBfUEtFWV9D VFhfZnJlZShjdHgtPnBjdHgpOwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLUBAIC0zOTQs OSArNDM0LDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCi0gCQkg KiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0aGlzIHJlYXNvbi4gKi8KLSAJCUVO R0lORV9maW5pc2goY3R4LT5lbmdpbmUpOwotICNlbmRpZgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMK LS0JRklQU19tZF9jdHhfY2xlYW51cChjdHgpOwotLSNlbmRpZgotIAltZW1zZXQoY3R4LCdcMCcs c2l6ZW9mICpjdHgpOwotIAotIAlyZXR1cm4gMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZw L2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZV9hZXMuYy5maXBz CTIwMTEtMTEtMTUgMTM6MTk6NTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxMi0wMi0yOSAxMDozMzowMi43ODUyOTQ4MTkgKzAx MDAKLUBAIC01Niw3ICs1Niw2IEBACi0gI2luY2x1ZGUgPGFzc2VydC5oPgotICNpbmNsdWRlIDxv cGVuc3NsL2Flcy5oPgotICNpbmNsdWRlICJldnBfbG9jbC5oIgotLSNpZm5kZWYgT1BFTlNTTF9G SVBTCi0gI2luY2x1ZGUgIm1vZGVzX2xjbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4K LSAKLUBAIC03MTYsNyArNzE1LDcgQEAgc3RhdGljIGludCBhZXNfZ2NtX2N0cmwoRVZQX0NJUEhF Ul9DVFggKgotIAkJaWYgKGFyZyA8PSAwKQotIAkJCXJldHVybiAwOwotICNpZmRlZiBPUEVOU1NM X0ZJUFMKLS0JCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBI X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgIShjLT5mbGFncyAm IEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0gCQkJCQkJICYmIGFyZyA8IDEyKQotIAkJ CXJldHVybiAwOwotICNlbmRpZgotQEAgLTExMjgsNyArMTEyNyw3IEBAIHN0YXRpYyBpbnQgYWVz X3h0c19jaXBoZXIoRVZQX0NJUEhFUl9DVFgKLSAJCXJldHVybiAwOwotICNpZmRlZiBPUEVOU1NM X0ZJUFMKLSAJLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhFICovCi0tCWlmIChGSVBTX21vZHVs ZV9tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykg JiYKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpICYmCi0gCQkJKGxlbiA+ICgxVUw8PDIwKSoxNikpCi0gCQl7Ci0gCQlFVlBl cnIoRVZQX0ZfQUVTX1hUU19DSVBIRVIsIEVWUF9SX1RPT19MQVJHRSk7Ci1AQCAtMTMxMCw0ICsx MzA5LDMgQEAgQkxPQ0tfQ0lQSEVSX2N1c3RvbShOSURfYWVzLDE5MiwxLDEyLGNjbQotIEJMT0NL X0NJUEhFUl9jdXN0b20oTklEX2FlcywyNTYsMSwxMixjY20sQ0NNLEVWUF9DSVBIX0ZMQUdfRklQ U3xDVVNUT01fRkxBR1MpCi0gCi0gI2VuZGlmCi0tI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9ldnAvZV9kZXMzLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZV9k ZXMzLmMuZmlwcwkyMDExLTA1LTI5IDAxOjAxOjI2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4 NTI5NDgxOSArMDEwMAotQEAgLTY1LDggKzY1LDYgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9kZXMu aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LS0KLSBzdGF0aWMgaW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LAotIAkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdixp bnQgZW5jKTsKLSAKLUBAIC0yMDgsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4 X2NpcGhlcihFVlBfQ0lQSAotICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwg REVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFO RF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFf aXYsCi0tCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVW UF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRl X2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNk ZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE5 LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksCi0g I2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgotIAotIEJMT0NL X0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwg OCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAK LS0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYs Ci0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19E RUZBVUxUX0FTTjEsCi0rCQkJZGVzX2VkZTNfaW5pdF9rZXksCi0rCQkJTlVMTCwgTlVMTCwgTlVM TCwKLSAJCQlkZXMzX2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVT X0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVks IGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYs Ci0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxF VlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRl c19lZGUzX2luaXRfa2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMz X2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklE X2Rlc19lZGUzLDI0LDgsOCwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2lu aXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgIEVW UF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFH X0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUzX2luaXRf a2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwpCi0gCi0g c3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmtleSwKLUBAIC0zMTMsNCArMzExLDMgQEAgY29uc3QgRVZQX0NJUEhFUiAq RVZQX2Rlc19lZGUzKHZvaWQpCi0gCXJldHVybiAmZGVzX2VkZTNfZWNiOwotIH0KLSAjZW5kaWYK LS0jZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9lX251bGwu Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9lX251bGwuYwotLS0tIG9wZW5z c2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMTEtMDYtMjAgMjI6MDA6 MTAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2Vf bnVsbC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzg1Mjk0ODE5ICswMTAwCi1AQCAtNjEsOCArNjEs NiBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVj dHMuaD4KLSAKLS0jaWZuZGVmIE9QRU5TU0xfRklQUwotLQotIHN0YXRpYyBpbnQgbnVsbF9pbml0 X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0gCWNv bnN0IHVuc2lnbmVkIGNoYXIgKml2LGludCBlbmMpOwotIHN0YXRpYyBpbnQgbnVsbF9jaXBoZXIo RVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotQEAgLTcxLDcgKzY5LDcg QEAgc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9Ci0gCXsKLSAJTklEX3VuZGVmLAot IAkxLDAsMCwKLS0JMCwKLSsJRVZQX0NJUEhfRkxBR19GSVBTLAotIAludWxsX2luaXRfa2V5LAot IAludWxsX2NpcGhlciwKLSAJTlVMTCwKLUBAIC0xMDEsNCArOTksMyBAQCBzdGF0aWMgaW50IG51 bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjCi0gCQltZW1jcHkoKGNoYXIgKilvdXQsKGNvbnN0 IGNoYXIgKilpbixpbmwpOwotIAlyZXR1cm4gMTsKLSAJfQotLSNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2V2cC9ldnBfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAxMi0wMi0xMCAxNzo1NDo1Ni4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTItMDItMjkg MTA6MzM6MDIuNzg2Mjk0ODI3ICswMTAwCi1AQCAtNjksMTcgKzY5LDU4IEBACi0gI2VuZGlmCi0g I2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSNkZWZpbmUg TV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIEZJUFNfY2lwaGVyKGN0eCwgb3V0LCBpbiwg aW5sKQotLSNlbHNlCi0gI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgY3R4 LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKLS0jZW5kaWYKLSAKLSAKLSBj b25zdCBjaGFyIEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0 cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1z IGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGlu dCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXks Ci0rCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCi0rCXsgRklQU19FUlJP Ul9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRf ZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkg Y29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0rCXsgRklQU19FUlJP Ul9JR05PUkVEKCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KLSsKLSsvKiBOQjogbm8gY2xl YW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KLSsKLStzdGF0 aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkK LSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Ci0r c3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0 eXApCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7 fQotK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGlu dCBhcmcsIHZvaWQgKnB0cikKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7 IHJldHVybiAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KLSsJ ewotKwkwLAotKwkwLAotKwkwLAotKwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX2RvX2Np cGhlciwKLSsJTlVMTCwKLSsJMCwKLSsJYmFkX3NldF9hc24xLAotKwliYWRfZ2V0X2FzbjEsCi0r CWJhZF9jdHJsLAotKwlOVUxMCi0rCX07Ci0rCi0rI2VuZGlmCi0rCi0gdm9pZCBFVlBfQ0lQSEVS X0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0KGN0eCwwLHNpemVv ZihFVlBfQ0lQSEVSX0NUWCkpOwotIAkvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLwotIAl9Ci1AQCAt MTExLDYgKzE1MiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0 Ci0gCQkJZW5jID0gMTsKLSAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKLSAJCX0KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJy KEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwot KwkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRp ZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Ig bm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cwotIAkgKiBzbyB0 aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxl YXNpbmcKLUBAIC0xNjksOSArMjE4LDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBI RVJfQ1RYICpjdAotIAkJCWN0eC0+ZW5naW5lID0gTlVMTDsKLSAjZW5kaWYKLSAKLS0jaWZkZWYg T1BFTlNTTF9GSVBTCi0tCQlyZXR1cm4gRklQU19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBrZXks IGl2LCBlbmMpOwotLSNlbHNlCi0gCQljdHgtPmNpcGhlcj1jaXBoZXI7Ci0gCQlpZiAoY3R4LT5j aXBoZXItPmN0eF9zaXplKQotIAkJCXsKLUBAIC0xOTYsNyArMjQyLDYgQEAgaW50IEVWUF9DaXBo ZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJCQlyZXR1cm4gMDsKLSAJCQkJfQotIAkJ CX0KLS0jZW5kaWYKLSAJCX0KLSAJZWxzZSBpZighY3R4LT5jaXBoZXIpCi0gCQl7Ci1AQCAtMjA2 LDkgKzI1MSw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAj aWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gc2tpcF90b19pbml0OgotICNlbmRpZgotLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKLS0JcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5 LCBpdiwgZW5jKTsKLS0jZWxzZQotIAkvKiB3ZSBhc3N1bWUgYmxvY2sgc2l6ZSBpcyBhIHBvd2Vy IG9mIDIgaW4gKmNyeXB0VXBkYXRlICovCi0gCU9QRU5TU0xfYXNzZXJ0KGN0eC0+Y2lwaGVyLT5i bG9ja19zaXplID09IDEKLSAJICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgKLUBA IC0yNDgsNiArMjkwLDIyIEBAIHNraXBfdG9faW5pdDoKLSAJCX0KLSAJfQotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVy cyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KLSsJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJ UFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KLSsJICovCi0rCWlmIChrZXkgJiYgRklQU19tb2Rl KCkpCi0rCQl7Ci0rCQlpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJ UFMpCi0rCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkK LSsJCQl7Ci0rCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxF RF9GT1JfRklQUyk7Ci0rCQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCQlyZXR1cm4g MDsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZs YWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKLSAJCWlmKCFjdHgtPmNpcGhlci0+ aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOwotIAl9Ci1AQCAtMjU1LDcgKzMxMyw2IEBA IHNraXBfdG9faW5pdDoKLSAJY3R4LT5maW5hbF91c2VkPTA7Ci0gCWN0eC0+YmxvY2tfbWFzaz1j dHgtPmNpcGhlci0+YmxvY2tfc2l6ZS0xOwotIAlyZXR1cm4gMTsKLS0jZW5kaWYKLSAJfQotIAot IGludCBFVlBfQ2lwaGVyVXBkYXRlKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgaW50ICpvdXRsLAotQEAgLTU2OCw3ICs2MjUsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RY X2ZyZWUoRVZQX0NJUEhFUl9DVFgKLSAKLSBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBf Q0lQSEVSX0NUWCAqYykKLSAJewotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0gCWlmIChjLT5jaXBo ZXIgIT0gTlVMTCkKLSAJCXsKLSAJCWlmKGMtPmNpcGhlci0+Y2xlYW51cCAmJiAhYy0+Y2lwaGVy LT5jbGVhbnVwKGMpKQotQEAgLTU3OSwxNiArNjM1LDEyIEBAIGludCBFVlBfQ0lQSEVSX0NUWF9j bGVhbnVwKEVWUF9DSVBIRVJfQ1QKLSAJCX0KLSAJaWYgKGMtPmNpcGhlcl9kYXRhKQotIAkJT1BF TlNTTF9mcmVlKGMtPmNpcGhlcl9kYXRhKTsKLS0jZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCi0gCWlmIChjLT5lbmdpbmUpCi0gCQkvKiBUaGUgRVZQX0NJUEhFUiB3ZSB1c2VkIGJl bG9uZ3MgdG8gYW4gRU5HSU5FLCByZWxlYXNlIHRoZQotIAkJICogZnVuY3Rpb25hbCByZWZlcmVu Y2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFzb24uICovCi0gCQlFTkdJTkVfZmluaXNoKGMtPmVuZ2lu ZSk7Ci0gI2VuZGlmCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlGSVBTX2NpcGhlcl9jdHhfY2xl YW51cChjKTsKLS0jZW5kaWYKLSAJbWVtc2V0KGMsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsK LSAJcmV0dXJuIDE7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2 cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9ldnAuaAotLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9ldnAuaC5maXBzCTIwMTItMDItMjkgMTA6MzM6 MDIuNTY3MjkyOTQ0ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL2V2 cC5oCTIwMTItMDItMjkgMTA6MzM6MDIuNzg3Mjk0ODM1ICswMTAwCi1AQCAtNzUsNiArNzUsMTAg QEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIC8qCi0gI2Rl ZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgotICNkZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJMTYK LUBAIC0yNzIsMTAgKzI3Niw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVh bmVkICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBm cmVlIHVwIGN0eC0+bWRfZGF0YQotIAkJCQkJCSogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0t LyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25z IGFyZSBoZXJlCi0tICogc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMg Zm9yIG90aGVyIHB1cnBvc2VzLgotLSAqLwotLQotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05P Tl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJ CQkJICogaW4gRklQUyBtb2RlICovCi0gCi1AQCAtMjg3LDYgKzI4NywxMCBAQCBzdHJ1Y3QgZW52 X21kX2N0eF9zdAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBL Q1MjMSB2MS41IG1vZGUgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEw CS8qIFg5LjMxIG1vZGUgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIw CS8qIFBTUyBtb2RlICovCi0rI2RlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgp IFwKLSsJCSgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2Rl ZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOCTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFz IGRpZ2VzdCAqLwotKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBz YWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLwotIAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0z MzgsMTUgKzM0MiwxNSBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAotIC8qIGNpcGhlciBoYW5kbGVz IHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLwotICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZCQkw eDIwMAotIC8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8K LS0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAKLSsjZGVmaW5lIAlFVlBfQ0lQ SF9DVVNUT01fQ09QWQkJMHg0MDAwCi0gLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0 IGl2ICovCi0gI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgxMDAwCi0gLyog QnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KLSAjZGVm aW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAotIC8qIE5vdGUgaWYgc3VpdGFi bGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KLS0jZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJ CTB4NDAwMAotKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0MDAKLSAvKiBBbGxvdyBu b24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCi0tI2RlZmluZQkJRVZQX0NJUEhfRkxBR19O T05fRklQU19BTExPVwkweDgwMDAKLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FM TE9XCTB4ODAwCi0gLyogQ2lwaGVyIGhhbmRsZXMgYW55IGFuZCBhbGwgcGFkZGluZyBsb2dpYyBh cyB3ZWxsCi0gICogYXMgZmluYWxpc2F0aW9uLgotICAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5 cHRvL2V2cC9ldnBfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZXZw X2xpYi5jLmZpcHMJMjAxMS0wNS0yOSAwNDozMjowNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZXZwX2xpYi5jCTIwMTItMDItMjkgMTA6MzM6MDIu Nzg3Mjk0ODM1ICswMTAwCi1AQCAtMTkwLDYgKzE5MCw5IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9i bG9ja19zaXplKGNvbnN0IEVWUF8KLSAKLSBpbnQgRVZQX0NpcGhlcihFVlBfQ0lQSEVSX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25l ZCBpbnQgaW5sKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2No ZWNrKCk7Ci0rI2VuZGlmCi0gCXJldHVybiBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQs aW4saW5sKTsKLSAJfQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZw L2V2cF9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvZXZwX2xvY2wu aAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMJMjAx Mi0wMi0yOSAxMDozMzowMi41NTgyOTI4NjcgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9ldnAvZXZwX2xvY2wuaAkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4NzI5NDgzNSArMDEw MAotQEAgLTI1OCwxMCArMjU4LDkgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19l Y2Iodm9pZAotIAlCTE9DS19DSVBIRVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVm aXgsY2JpdHMsa3N0cnVjdCxrc2NoZWQpIFwKLSAJQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVy IyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwKLSAJCQkgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5c2l6 ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCi0tCQkJICAgICAwLCBjaXBoZXIjI19pbml0 X2tleSwgTlVMTCwgXAotLQkJCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAotLQkJCSAg ICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAotLQkJCSAgICAgTlVMTCkKLSsJCQkgICAgIEVW UF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCi0rCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSsKLSAKLSBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0Ci0g CXsKLUBAIC0zNjcsMTEgKzM2Niw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5aXZnZW4oRVZQ X0NJUEhFUl8KLSAjZGVmaW5lIE1EMl9Jbml0CXByaXZhdGVfTUQyX0luaXQKLSAjZGVmaW5lIE1E QzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAotICNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFf SW5pdAotLSNkZWZpbmUgU0hBMV9Jbml0CXByaXZhdGVfU0hBMV9Jbml0Ci0tI2RlZmluZSBTSEEy MjRfSW5pdAlwcml2YXRlX1NIQTIyNF9Jbml0Ci0tI2RlZmluZSBTSEEyNTZfSW5pdAlwcml2YXRl X1NIQTI1Nl9Jbml0Ci0tI2RlZmluZSBTSEEzODRfSW5pdAlwcml2YXRlX1NIQTM4NF9Jbml0Ci0t I2RlZmluZSBTSEE1MTJfSW5pdAlwcml2YXRlX1NIQTUxMl9Jbml0Ci0gCi0gI2RlZmluZSBCRl9z ZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQotICNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVf Q0FTVF9zZXRfa2V5Ci1AQCAtMzc5LDcgKzM3Myw2IEBAIGludCBQS0NTNV92Ml9QQktERjJfa2V5 aXZnZW4oRVZQX0NJUEhFUl8KLSAjZGVmaW5lIFNFRURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0 X2tleQotICNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotICNkZWZpbmUg UkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQotLSNkZWZpbmUgREVTX3NldF9rZXlfdW5j aGVja2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCi0gI2RlZmluZSBDYW1lbGxpYV9z ZXRfa2V5CXByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQotIAotICNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZXZwL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v ZXZwL01ha2VmaWxlLmZpcHMJMjAxMS0xMi0yNyAxNTozODoyNy4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvTWFrZWZpbGUJMjAxMi0wMi0yOSAxMDoz MzowMi43ODgyOTQ4NDQgKzAxMDAKLUBAIC0yOCw3ICsyOCw3IEBAIExJQlNSQz0gZW5jb2RlLmMg ZGlnZXN0LmMgZXZwX2VuYy5jIGV2cF8KLSAJYmlvX21kLmMgYmlvX2I2NC5jIGJpb19lbmMuYyBl dnBfZXJyLmMgZV9udWxsLmMgXAotIAljX2FsbC5jIGNfYWxsYy5jIGNfYWxsZC5jIGV2cF9saWIu YyBiaW9fb2suYyBcCi0gCWV2cF9wa2V5LmMgZXZwX3BiZS5jIHA1X2NycHQuYyBwNV9jcnB0Mi5j IFwKLS0JZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIu YyBldnBfZmlwcy5jCVwKLSsJZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2du LmMgbV9zaWd2ZXIuYyBcCi0gCWVfYWVzX2NiY19obWFjX3NoYTEuYyBlX3JjNF9obWFjX21kNS5j Ci0gCi0gTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8gZXZwX2tleS5vIGV2cF9h Y25mLm8gXAotQEAgLTQxLDcgKzQxLDcgQEAgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBf ZW5jLm8gZXZwXwotIAliaW9fbWQubyBiaW9fYjY0Lm8gYmlvX2VuYy5vIGV2cF9lcnIubyBlX251 bGwubyBcCi0gCWNfYWxsLm8gY19hbGxjLm8gY19hbGxkLm8gZXZwX2xpYi5vIGJpb19vay5vIFwK LSAJZXZwX3BrZXkubyBldnBfcGJlLm8gcDVfY3JwdC5vIHA1X2NycHQyLm8gXAotLQllX29sZC5v IHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5vIGV2cF9maXBzLm8g XAotKwllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5v IFwKLSAJZV9hZXNfY2JjX2htYWNfc2hhMS5vIGVfcmM0X2htYWNfbWQ1Lm8KLSAKLSBTUkM9ICQo TElCU1JDKQotQEAgLTEwMyw0NCArMTAzLDQ2IEBAIGJpb19iNjQubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3AKLSBiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotIGJpb19iNjQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aAotLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAotLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLWJpb19iNjQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKLS1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBiaW9fYjY0LmMKLStiaW9fYjY0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK LStiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAotK2Jpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStiaW9fYjY0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaAotK2Jpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStiaW9fYjY0Lm86IC4uL2NyeXB0bGliLmgg YmlvX2I2NC5jCi0gYmlvX2VuYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaAotIGJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotIGJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0gYmlvX2VuYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0tYmlv X2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCi0tYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0tYmlvX2VuYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAotLWJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJpb19lbmMuYwotK2Jpb19lbmMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2Jpb19l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCi0rYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2Jpb19lbmMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCi0rYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2Jpb19lbmMubzogLi4vY3J5cHRsaWIuaCBiaW9fZW5j LmMKLSBiaW9fbWQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBiaW9fbWQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o Ci0tYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAotLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLS1iaW9fbWQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK LS1iaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0tYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0tYmlvX21kLm86IC4uL2Ny eXB0bGliLmggYmlvX21kLmMKLStiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2Jpb19tZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCi0rYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rYmlvX21kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2Jp b19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJp b19tZC5jCi0gYmlvX29rLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGJpb19vay5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gYmlvX29r Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaAotLWJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmgKLS1iaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tYmlvX29rLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oCi0tYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9yYW5kLmgKLS1iaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tYmlvX29rLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYmlvX29rLmMKLStiaW9f b2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKLStiaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2Jpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rYmlvX29rLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCi0rYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rYmlvX29rLm86 IC4uL2NyeXB0bGliLmggYmlvX29rLmMKLSBjX2FsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBjX2FsbC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oCi0tY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VjLmgKLS1jX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tY19hbGwubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWNfYWxsLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAot K2NfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lbmdpbmUuaAotK2NfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0gY19hbGwubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0g Y19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotQEAgLTE1MCw5ICsxNTIsOCBA QCBjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uCi0gY19hbGwubzogLi4v Y3J5cHRsaWIuaCBjX2FsbC5jCi0gY19hbGxjLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIGNfYWxsYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0 by5oCi0tY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lYy5oCi0tY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1jX2FsbGMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2NfYWxsYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStj X2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmgKLSBjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIGNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gY19hbGxj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCi1AQCAtMTYzLDkgKzE2NCw4IEBAIGNfYWxsYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wveDUwOS5oIC4KLSBjX2FsbGMubzogLi4vY3J5cHRsaWIuaCBjX2FsbGMuYwotIGNf YWxsZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKLSBjX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1 ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotLWNfYWxsZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotLWNfYWxs ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Y2RzYS5oCi0tY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKLStjX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rY19hbGxkLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gY19hbGxkLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKLSBjX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIGNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTE3Niwx MCArMTc2LDkgQEAgY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLgotIGNf YWxsZC5vOiAuLi9jcnlwdGxpYi5oIGNfYWxsZC5jCi0gZGlnZXN0Lm86IC4uLy4uL2Vfb3MuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAot IGRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCi0tZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1kaWdlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAot LWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKLStkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi0rZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStkaWdlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIGRp Z2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKLSBkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBkaWdlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgK LUBAIC0xOTAsMTggKzE4OSwxOSBAQCBkaWdlc3QubzogLi4vY3J5cHRsaWIuaCBkaWdlc3QuYwot IGVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oCi0gZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotIGVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWVfYWVzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotLWVfYWVzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tb2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmgKLS1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0tZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1lX2Flcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAotLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0tZV9hZXMubzogLi4vbW9kZXMvbW9kZXNfbGNsLmgg ZV9hZXMuYyBldnBfbG9jbC5oCi0rZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbW9kZXMuaAotK2VfYWVzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVj dHMuaAotK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2VfYWVzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL21vZGVz L21vZGVzX2xjbC5oIGVfYWVzLmMKLStlX2Flcy5vOiBldnBfbG9jbC5oCi0gZV9hZXNfY2JjX2ht YWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaAotIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCi0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKLSBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oCi0tZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgK LStlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotQEAgLTIxMSwyMCArMjExLDIzIEBAIGVfYWVz X2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGUKLSBlX2Flc19jYmNfaG1hY19zaGEx Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAotIGVfYWVzX2NiY19obWFjX3NoYTEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLSBlX2Flc19jYmNfaG1hY19zaGExLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVfYWVzX2NiY19obWFjX3NoYTEuYwotK2Vf YWVzX2NiY19obWFjX3NoYTEubzogZXZwX2xvY2wuaAotIGVfYmYubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0g ZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmxvd2Zpc2guaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYnVmZmVyLmgKLSBlX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotIGVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotLWVfYmYubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWVf YmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAotLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1lX2JmLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWVf YmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBlX2Jm LmMgZXZwX2xvY2wuaAotK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZV9iZi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaAotK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2VfYmYubzogLi4v Y3J5cHRsaWIuaCBlX2JmLmMgZXZwX2xvY2wuaAotIGVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBlX2NhbWVsbGlh Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jYW1lbGxpYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAotIGVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZV9jYW1lbGxpYS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1lX2NhbWVsbGlh Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAotK2VfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStlX2NhbWVs bGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBlX2NhbWVsbGlhLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gZV9jYW1lbGxpYS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAotIGVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi1AQCAtMjMzLDc0ICsyMzYsODAgQEAgZV9jYXN0Lm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZQotIGVfY2FzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Nhc3QuaAotIGVfY2FzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmgKLSBlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaAotLWVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0tZV9jYXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK LS1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tZV9jYXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9jYXN0LmMgZXZwX2xv Y2wuaAotK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCi0rZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2VfY2FzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAotK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStlX2Nhc3Qubzog Li4vY3J5cHRsaWIuaCBlX2Nhc3QuYyBldnBfbG9jbC5oCi0gZV9kZXMubzogLi4vLi4vZV9vcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o Ci0gZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaAotIGVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCi0gZV9kZXMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZV9kZXMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0t ZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCi0tZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLS1lX2Rlcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0t ZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oCi0tZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKLS1lX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvdWlfY29tcGF0LmggLi4vY3J5cHRsaWIuaCBlX2Rlcy5jIGV2cF9sb2NsLmgKLStlX2Rl cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAotK2VfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZV9kZXMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmgKLStlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2VfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZV9kZXMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCi0r ZV9kZXMubzogLi4vY3J5cHRsaWIuaCBlX2Rlcy5jIGV2cF9sb2NsLmgKLSBlX2RlczMubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oCi0gZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLSBlX2RlczMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0t ZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAotLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLS1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLS1l X2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3JhbmQuaAotLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLS1lX2RlczMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKLS1lX2RlczMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIC4uL2NyeXB0bGliLmggZV9kZXMz LmMgZXZwX2xvY2wuaAotK2VfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2VfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZV9kZXMzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKLStlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStlX2RlczMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStlX2RlczMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmgKLStlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCi0rZV9kZXMzLm86IC4uL2NyeXB0bGliLmggZV9kZXMz LmMgZXZwX2xvY2wuaAotIGVfaWRlYS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBlX2lkZWEubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAot IGVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmgKLS1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9pZGVhLmgKLS1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWVfaWRlYS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCi0tZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0tZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLWVfaWRlYS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGVfaWRlYS5j IGV2cF9sb2NsLmgKLStlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2lkZWEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2VfaWRlYS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgK LStlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZV9pZGVhLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oCi0rZV9pZGVhLm86IC4uL2NyeXB0bGliLmggZV9pZGVhLmMgZXZwX2xvY2wuaAotIGVf bnVsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKLSBlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1 ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotIGVfbnVsbC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1lX251 bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oCi0tZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotLWVfbnVs bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKLS1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLS1lX251bGwubzogLi4vY3J5cHRsaWIu aCBlX251bGwuYwotK2VfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2VfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZV9udWxsLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKLStlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZV9udWxsLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9udWxsLmMK LSBlX29sZC5vOiBlX29sZC5jCi0gZV9yYzIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gZV9yYzIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAotIGVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaAotLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotLWVfcmMyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oCi0tZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3JjMi5oCi0tZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tZV9yYzIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBlX3JjMi5jIGV2cF9s b2NsLmgKLStlX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHMuaAotK2VfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStlX3JjMi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0r ZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmgKLStlX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmMyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZV9yYzIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStlX3Jj Mi5vOiAuLi9jcnlwdGxpYi5oIGVfcmMyLmMgZXZwX2xvY2wuaAotIGVfcmM0Lm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaAotIGVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmgKLSBlX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1lX3JjNC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1lX3JjNC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKLS1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYzQuaAotLWVfcmM0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0 bGliLmggZV9yYzQuYyBldnBfbG9jbC5oCi0rZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX3JjNC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZV9y YzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAotK2VfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZV9yYzQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3JjNC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2Vf cmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oCi0rZV9yYzQubzogLi4vY3J5cHRsaWIuaCBlX3JjNC5jIGV2cF9sb2NsLmgK LSBlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAotIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLWVfcmM0X2htYWNf bWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bWQ1LmgKLS1lX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0rZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKLStlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbWQ1LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIGVfcmM0X2htYWNf bWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBlX3JjNF9obWFjX21kNS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIGVfcmM0X2htYWNfbWQ1Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi1AQCAtMzA4LDI5ICszMTcsMjQgQEAg ZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsLwotIGVfcmM0X2htYWNfbWQ1 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotIGVfcmM0X2htYWNfbWQ1Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0gZV9yYzRfaG1hY19tZDUubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZV9yYzRfaG1hY19tZDUuYwotLWVfcmM1Lm86IC4u Ly4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLS1lX3JjNS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0t ZV9yYzUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCi0tZV9yYzUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLS1lX3JjNS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotLWVfcmM1 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaAotLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4u L2NyeXB0bGliLmggZV9yYzUuYwotK2VfcmM1Lm86IGVfcmM1LmMKLSBlX3NlZWQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBlX3Nl ZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oCi0gZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmgKLS1lX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotLWVfc2VlZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCi0tZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0tZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2VlZC5oCi0tZV9zZWVkLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oCi0tZV9zZWVkLm86IGVfc2VlZC5jIGV2cF9sb2NsLmgKLStlX3NlZWQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2Vfc2Vl ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStlX3NlZWQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5o Ci0rZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zZWVkLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N0YWNrLmgKLStlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggZV9zZWVkLmMgZXZwX2xvY2wuaAotIGVfeGNiY19kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotIGVfeGNiY19kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzLmgKLSBl X3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oCi0gZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotLWVfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLS1lX3hjYmNf ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCi0rZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2VfeGNiY19kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2Vf eGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gZV94Y2JjX2Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLSBlX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLSBlX3hjYmNfZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvdWkuaAotQEAgLTMz OSwyOCArMzQzLDI3IEBAIGVfeGNiY19kLm86IGV2cF9sb2NsLmgKLSBlbmNvZGUubzogLi4vLi4v ZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCi0gZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLSBlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZW5jb2RlLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotLWVuY29k ZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLS1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLS1lbmNvZGUubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5o Ci0tZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oCi0tZW5jb2RlLm86IC4uL2NyeXB0bGliLmggZW5jb2RlLmMKLStl bmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmgKLStlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2VuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZW5jb2Rl Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCi0rZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2VuY29kZS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGVuY29kZS5jCi0gZXZwX2FjbmYubzog Li4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBldnBfYWNuZi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5o Ci0gZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKLSBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1ldnBfYWNuZi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1ldnBfYWNu Zi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLS1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAotK2V2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCi0rZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2V2cF9hY25mLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKLSBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotIGV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotIGV2cF9h Y25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXZw X2FjbmYuYwotIGV2cF9lbmMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmgKLSBldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYnVmZmVyLmgKLSBldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLWV2cF9lbmMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotLWV2cF9l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VuZ2luZS5oCi0tZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZXZwX2VuYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIGV2cF9l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaAotIGV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIGV2cF9lbmMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgK LUBAIC0zNzIsMjQgKzM3NSwxNyBAQCBldnBfZW5jLm86IC4uL2NyeXB0bGliLmggZXZwX2VuYy5j IGV2cF9sCi0gZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAotIGV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0gZXZwX2Vyci5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0tZXZwX2Vy ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCi0tZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0tZXZwX2Vyci5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAot LWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oCi0tZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCBldnBfZXJyLmMKLS1ldnBfZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotLWV2cF9maXBzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLWV2cF9m aXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCi0tZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLWV2cF9maXBzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o Ci0tZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLmggZXZwX2ZpcHMuYwotK2V2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2V2cF9lcnIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o Ci0rZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2V2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZXZwX2Vy ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaAotK2V2cF9lcnIubzogZXZwX2Vyci5jCi0gZXZwX2tleS5vOiAuLi8uLi9lX29z LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotIGV2cF9rZXkubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotIGV2cF9rZXku bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oCi0tZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkaC5oCi0tZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNk c2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1ldnBfa2V5Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2V2cF9rZXku bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aAotK2V2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAotIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gZXZwX2tleS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAotIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLUBAIC00MDEsMTcgKzM5NywxNyBAQCBldnBfbGliLm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wCi0gZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gZXZwX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmgKLSBldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKLS1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLS1ldnBfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKLS1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0tZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLS1ldnBfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXZwX2xpYi5j Ci0rZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCi0rZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStldnBfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oCi0rZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZXZwX2xpYi5v OiAuLi9jcnlwdGxpYi5oIGV2cF9saWIuYwotIGV2cF9wYmUubzogLi4vLi4vZV9vcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBldnBfcGJlLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAot LWV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZGguaAotLWV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0tZXZwX3BiZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStldnBfcGJlLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStldnBf cGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKLSBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIGV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBl dnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9wa2NzMTIuaAotQEAgLTQyMiw5ICs0MTgsOCBAQCBldnBfcGJlLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC94NTA5X3ZmCi0gZXZwX3BrZXkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gZXZwX3BrZXkubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0t ZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZGguaAotLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2V2cF9wa2V5Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStl dnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCi0gZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gZXZwX3BrZXkubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTQz Niw5ICs0MzEsOCBAQCBldnBfcGtleS5vOiAuLi9hc24xL2FzbjFfbG9jbC5oIC4uL2NyeXB0Ci0g bV9kc3MubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gbV9kc3MubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1 ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotIG1fZHNzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLW1fZHNz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2Ro LmgKLS1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKLS1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLSttX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rbV9kc3MubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIG1fZHNz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAotIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0gbV9kc3MubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLUBAIC00 NDksOSArNDQzLDggQEAgbV9kc3MubzogLi4vY3J5cHRsaWIuaCBtX2Rzcy5jCi0gbV9kc3MxLm86 IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaAotIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0gbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLW1fZHNzMS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0t bV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAotLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLSttX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21fZHNzMS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0gbV9kc3Mx Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAotIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotIG1fZHNzMS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAotQEAg LTQ1OSwzMSArNDUyLDIzIEBAIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0 YWMKLSBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmgKLSBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1 MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAotIG1fZHNzMS5vOiAuLi9jcnlw dGxpYi5oIG1fZHNzMS5jCi0tbV9lY2RzYS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0tbV9lY2RzYS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5o Ci0tbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKLS1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0tbV9lY2Rz YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAotLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKLS1tX2VjZHNhLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLS1t X2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oCi0tbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi0tbV9lY2RzYS5vOiAuLi9jcnlwdGxp Yi5oIG1fZWNkc2EuYwotLW1fbWQyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLSttX2VjZHNhLm86IG1fZWNkc2EuYwotK21fbWQyLm86IC4uLy4uL2Vfb3MuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAot IG1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKLSBtX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1tX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotLW1fbWQyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCi0tbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0tbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBtX21kMi5jCi0rbV9tZDIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSttX21kMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbWQy LmgKLSttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK21fbWQyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2Nz Ny5oCi0rbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAotK21fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK21fbWQyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmgKLSttX21kMi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2Ns LmggbV9tZDIuYwotIG1fbWQ0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotIG1fbWQ0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1tX21k NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWMuaAotLW1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZHNhLmgKLS1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rbV9tZDQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBtX21k NC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bWQ0LmgKLSBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotQEAgLTQ5NCw5 ICs0NzksOCBAQCBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuCi0gbV9t ZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5cHRsaWIuaCBldnBf bG9jbC5oIG1fbWQ0LmMKLSBtX21kNS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBtX21kNS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0t bV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjLmgKLS1tX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vy ci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21fbWQ1Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK21fbWQ1Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0g bV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL21kNS5oCi0gbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLUBAIC01 MDUsMjYgKzQ4OSwxNyBAQCBtX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmggLi4v Ci0gbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oCi0gbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAotIG1fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX21kNS5jCi0tbV9tZGMy Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAotK21fbWRjMi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oCi0gbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKLS1tX21kYzIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgK LS1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkc2EuaAotLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tZGMyLmgKLS1tX21kYzIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o Ci0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCi0tbV9tZGMyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKLS1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zdGFjay5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCi0tbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC91aV9jb21wYXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi0tbV9tZGMy Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZXZwX2xv Y2wuaCBtX21kYzIuYwotK21fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLSttX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSttX21kYzIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLSttX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggbV9tZGMyLmMKLSBtX251bGwubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oCi0gbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1tX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1tX251bGwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLW1f bnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oCi0rbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAotK21fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIG1fbnVsbC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gbV9udWxs Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKLSBtX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC01MzUsOSArNTEwLDggQEAg bV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeQotIG1fcmlwZW1kLm86IC4u Ly4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gbV9yaXBlbWQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAot IG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaAotLW1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLS1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLS1tX3JpcGVtZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKLSttX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oCi0rbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotIG1f cmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gbV9yaXBlbWQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLUBAIC01NDksOSArNTIzLDggQEAgbV9yaXBlbWQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3g1MDlfdgotIG1fcmlwZW1kLm86IG1fcmlwZW1kLmMKLSBtX3NoYS5vOiAuLi8u Li9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLSBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0tbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1tX3NoYS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tbV9zaGEu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aAotK21fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaAotK21fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIG1fc2hhLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKLSBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTU2Miw5ICs1MzUsOCBAQCBtX3NoYS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uCi0gbV9zaGEubzogLi4vY3J5cHRsaWIuaCBl dnBfbG9jbC5oIG1fc2hhLmMKLSBtX3NoYTEubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gbV9zaGExLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKLS1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjLmgKLS1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLW1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rbV9zaGExLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK21f c2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAotIG1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gbV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBtX3NoYTEu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLUBAIC01NzYsOSArNTQ4LDggQEAgbV9zaGExLm86IC4uL2NyeXB0bGliLmgg bV9zaGExLmMKLSBtX3NpZ3Zlci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaAotIG1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLS1tX3NpZ3Zlci5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0t bV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCi0tbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK21fc2lndmVyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK LSBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotIG1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAtNTg5LDkgKzU2MCw4IEBA IG1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3YKLSBtX3NpZ3Zlci5vOiBt X3NpZ3Zlci5jCi0gbV93cC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBtX3dwLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1tX3dwLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5o Ci0tbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lY2RzYS5oCi0tbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLSttX3dwLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0gbV93cC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0gbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTYwMiw5ICs1NzIs OCBAQCBtX3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4vCi0gbV93cC5vOiAu Li9jcnlwdGxpYi5oIGV2cF9sb2NsLmggbV93cC5jCi0gbmFtZXMubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0g bmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCi0tbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLW5hbWVzLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStuYW1lcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmgKLStuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaAotIG5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLSBuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gbmFt ZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKLUBAIC02MTUsOSArNTg0LDggQEAgbmFtZXMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3g1MDlfdmZ5LgotIHA1X2NycHQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKLSBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBwNV9jcnB0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotLXA1X2Ny cHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj ZGguaAotLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCi0tcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStwNV9jcnB0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStwNV9jcnB0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKLSBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAotIHA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLSBwNV9jcnB0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9wa2NzNy5oCi1AQCAtNjI4LDkgKzU5Niw4IEBAIHA1X2NycHQubzogLi4vY3J5cHRsaWIuaCBw NV9jcnB0LmMKLSBwNV9jcnB0Mi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaAotIHA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKLSBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKLS1wNV9jcnB0Mi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCi0t cDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCi0tcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rcDVfY3JwdDIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0g cDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotIHA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBwNV9jcnB0Mi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaAotQEAgLTY0MSw5ICs2MDgsOCBAQCBwNV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wveDUwOV92Ci0gcDVfY3JwdDIubzogcDVfY3JwdDIuYwotIHBfZGVjLm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaAotIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvY3J5cHRvLmgKLS1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAotLXBfZGVjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKLS1wX2RlYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0r cF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCi0rcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKLSBwX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gcF9kZWMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAotIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi1AQCAtNjU0LDkgKzYyMCw4IEBAIHBfZGVjLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy4KLSBwX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfZGVjLmMKLSBwX2VuYy5vOiAuLi8uLi9lX29z LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmgKLSBwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCi0tcF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1wX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCi0tcF9lbmMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK3Bf ZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAotK3BfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCi0gcF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotIHBfZW5jLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK LSBwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAotQEAgLTY3MCw5ICs2MzUsOCBAQCBwX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuCi0gcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gcF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kaC5oCi0gcF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oCi0tcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjZGguaAotLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAotLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStwX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rcF9s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKLSBwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCi0gcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIHBfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCi1AQCAtNjgzLDkgKzY0Nyw4IEBAIHBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC94NTA5LmggLi4KLSBwX2xpYi5vOiAuLi9hc24xL2FzbjFfbG9jbC5oIC4uL2NyeXB0bGliLmgg cF9saWIuYwotIHBfb3Blbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLSBwX29wZW4ubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotLXBfb3Bl bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWMuaAotLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lY2RzYS5oCi0tcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStwX29wZW4ubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rcF9vcGVuLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0g cF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKLSBwX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotIHBfb3Blbi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAotQEAgLTY5Niw5ICs2NTksOCBAQCBwX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1 MDkuaCAuCi0gcF9vcGVuLm86IC4uL2NyeXB0bGliLmggcF9vcGVuLmMKLSBwX3NlYWwubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oCi0gcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1wX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1wX3NlYWwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAotLXBf c2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oCi0rcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAotK3Bfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIHBfc2VhbC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0gcF9zZWFs Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKLSBwX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLUBAIC03MDksMzUgKzY3MSwzNiBA QCBwX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzCi0gcF9zZWFsLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcF9zZWFsLmMKLSBw X3NpZ24ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0gcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i dWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLS1wX3NpZ24ubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKLS1wX3Np Z24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkc2EuaAotLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCi0rcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK3Bfc2lnbi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIHBfc2lnbi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCi0gcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLS1wX3NpZ24u bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCi0tcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAotLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCi0tcF9zaWduLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcF9zaWduLmMKLStwX3Np Z24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JzYS5oCi0rcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2hhLmgKLStwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStwX3NpZ24ubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92Znku aAotK3Bfc2lnbi5vOiAuLi9jcnlwdGxpYi5oIHBfc2lnbi5jCi0gcF92ZXJpZnkubzogLi4vLi4v ZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLSBwX3ZlcmlmeS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gcF92 ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oCi0tcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAotLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotLXBfdmVyaWZ5Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAot K3BfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmgKLStwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0gcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0gcF92ZXJp ZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBwX3ZlcmlmeS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaAotLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotLXBfdmVyaWZ5Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94 NTA5LmgKLS1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9j cnlwdGxpYi5oIHBfdmVyaWZ5LmMKLStwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLStwX3ZlcmlmeS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oCi0r cF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmgKLStwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUw OS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCi0rcF92ZXJpZnkubzogLi4vY3J5 cHRsaWIuaCBwX3ZlcmlmeS5jCi0gcG1ldGhfZm4ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKLSBwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCi0gcG1ldGhfZm4ubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0gcG1l dGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAotLXBtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLS1wbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rcG1l dGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAotK3BtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK3BtZXRoX2ZuLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0gcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLSBwbWV0aF9m bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKLSBwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3Mu aCAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmgKLUBAIC03NDYsOSArNzA5LDkgQEAgcG1ldGhfZ24u bzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvbwotIHBtZXRoX2duLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAotIHBtZXRoX2duLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKLSBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmgKLS1wbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLS1wbWV0aF9nbi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgK LS1wbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK3BtZXRo X2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCi0rcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK3BtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLSBwbWV0 aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaAotIHBtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotIHBtZXRoX2duLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaAotQEAg LTc1Niw5ICs3MTksOCBAQCBwbWV0aF9nbi5vOiBwbWV0aF9nbi5jCi0gcG1ldGhfbGliLm86IC4u Ly4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0gcG1ldGhfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgK LSBwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oCi0tcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKLS1wbWV0aF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCi0tcG1l dGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmgKLStwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK3BtZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotIHBtZXRoX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCi0gcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLSBwbWV0 aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2V2cC9tX2RzczEuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L2V2cC9tX2RzczEuYy5maXBzCTIwMTEtMDYtMDEgMTc6MTE6MDAuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL21fZHNzMS5jCTIwMTItMDItMjkgMTA6 MzM6MDIuNzg4Mjk0ODQ0ICswMTAwCi1AQCAtNjgsOCArNjgsNiBAQAotICNpbmNsdWRlIDxvcGVu c3NsL2RzYS5oPgotICNlbmRpZgotIAotLSNpZm5kZWYgT1BFTlNTTF9GSVBTIAotLQotIHN0YXRp YyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgtPm1k X2RhdGEpOyB9Ci0gCi1AQCAtODQsNyArODIsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzczFf bWQ9Ci0gCU5JRF9kc2EsCi0gCU5JRF9kc2FXaXRoU0hBMSwKLSAJU0hBX0RJR0VTVF9MRU5HVEgs Ci0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxF VlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTEwMCw0 ICs5OCwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX2RzczEodm9pZCkKLSAJcmV0dXJuKCZkc3MxX21k KTsKLSAJfQotICNlbmRpZgotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vZXZwL21fZHNzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvbV9k c3MuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAx MS0wNi0wMSAxNzoxMTowMC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9ldnAvbV9kc3MuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4ODI5NDg0NCArMDEwMAot QEAgLTY2LDcgKzY2LDYgQEAKLSAjZW5kaWYKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBCi0t I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAKLSBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4 KQotIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotQEAgLTgyLDcgKzgxLDcg QEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc2FfbWQ9Ci0gCU5JRF9kc2FXaXRoU0hBLAotIAlOSURf ZHNhV2l0aFNIQSwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElH RVNULAotKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0 LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTk4LDQgKzk3LDMgQEAgY29uc3QgRVZQX01EICpF VlBfZHNzKHZvaWQpCi0gCXJldHVybigmZHNhX21kKTsKLSAJfQotICNlbmRpZgotLSNlbmRpZgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvbV9tZDIuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvbV9tZDIuYwkyMDEyLTAy LTI5IDEwOjMzOjAyLjc4OTI5NDg1MyArMDEwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVm IE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2lu Y2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkK LSAJeyByZXR1cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vZXZwL21fc2hhMS5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL21f c2hhMS5jLmZpcHMJMjAxMS0wNS0yOSAwMTowMToyNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvbV9zaGExLmMJMjAxMi0wMi0yOSAxMDozMzowMi43 ODkyOTQ4NTMgKzAxMDAKLUBAIC01OSw4ICs1OSw2IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0g I2luY2x1ZGUgImNyeXB0bGliLmgiCi0gCi0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLS0KLSAjaWZu ZGVmIE9QRU5TU0xfTk9fU0hBCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci1AQCAtODUs NyArODMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTFfbWQ9Ci0gCU5JRF9zaGExLAotIAlO SURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwK LSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lE X0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmlu YWwsCi1AQCAtMTIyLDcgKzEyMSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21kPQot IAlOSURfc2hhMjI0LAotIAlOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTIyNF9E SUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01E X0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRV UkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJ aW5pdDIyNCwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xNDEsNyArMTQxLDggQEAg c3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyNTZfbWQ9Ci0gCU5JRF9zaGEyNTYsCi0gCU5JRF9zaGEy NTZXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMjU2X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9G TEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0r CUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9B QlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0MjU2LAotIAl1cGRhdGUyNTYsCi0g CWZpbmFsMjU2LAotQEAgLTE3Miw3ICsxNzMsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4 NF9tZD0KLSAJTklEX3NoYTM4NCwKLSAJTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAotIAlT SEEzODRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJF fEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0Rf U0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJ UFMsCi0gCWluaXQzODQsCi0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1AQCAtMTkxLDcgKzE5 Myw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kPQotIAlOSURfc2hhNTEyLAotIAlO SURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTUxMl9ESUdFU1RfTEVOR1RILAotLQlF VlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElH QUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdDUxMiwKLSAJdXBkYXRl NTEyLAotIAlmaW5hbDUxMiwKLUBAIC0yMDYsNCArMjA5LDMgQEAgY29uc3QgRVZQX01EICpFVlBf c2hhNTEyKHZvaWQpCi0gCXsgcmV0dXJuKCZzaGE1MTJfbWQpOyB9Ci0gI2VuZGlmCS8qIGlmbmRl ZiBPUEVOU1NMX05PX1NIQTUxMiAqLwotIAotLSNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZXZwL3Bfc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL3Bfc2ln bi5jLmZpcHMJMjAxMS0wNi0wOSAxODowMjozOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9ldnAvcF9zaWduLmMJMjAxMi0wMi0yOSAxMDozMzowMi43ODky OTQ4NTMgKzAxMDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDku aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAKLSAjaWZkZWYgdW5kZWYKLSB2b2lkIEVW UF9TaWduSW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9NRCAqdHlwZSkKLUBAIC0xMDMsNiArMTA0 LDIyIEBAIGludCBFVlBfU2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWcKLSAJCQlnb3Rv IGVycjsKLSAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5k aWdlc3QpIDw9IDApCi0gCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19QQURfWDkzMSkKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhw a2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQlpZiAoY3R4 LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQotKwkJCXsKLSsJCQlpbnQgc2FsdGxl bjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1Mx X1BTU19QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQlzYWx0bGVuID0gTV9FVlBf TURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKLSsJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RY X0ZMQUdfUFNTX01ETEVOKQotKwkJCQlzYWx0bGVuID0gLTE7Ci0rCQkJZWxzZSBpZiAoc2FsdGxl biA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCi0rCQkJCXNhbHRsZW4gPSAtMjsKLSsJCQlp ZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDAp Ci0rCQkJCWdvdG8gZXJyOwotKwkJCX0KLSAJCWlmIChFVlBfUEtFWV9zaWduKHBrY3R4LCBzaWdy ZXQsICZzbHRtcCwgbSwgbV9sZW4pIDw9IDApCi0gCQkJZ290byBlcnI7Ci0gCQkqc2lnbGVuID0g c2x0bXA7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9ldnAvcF92ZXJpZnku Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCi0tLS0gb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcwkyMDExLTA2LTA5IDE4 OjAyOjM5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2V2 cC9wX3ZlcmlmeS5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzg5Mjk0ODUzICswMTAwCi1AQCAtNjEs NiArNjEsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvcnNhLmg+Ci0gCi0gaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKLSAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBf UEtFWSAqcGtleSkKLUBAIC04OCw2ICs4OSwyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9N RF9DVFggKmN0eCwgY29uCi0gCQkJZ290byBlcnI7Ci0gCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9z aWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJ aWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9Q S0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0r CQkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BT UykKLSsJCQl7Ci0rCQkJaW50IHNhbHRsZW47Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNh X3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBl cnI7Ci0rCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJ aWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKLSsJCQkJc2FsdGxlbiA9 IC0xOwotKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQot KwkJCQlzYWx0bGVuID0gLTI7Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0 bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQl9Ci0gCQlpID0g RVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOwotIAkJZXJy OgotIAkJRVZQX1BLRVlfQ1RYX2ZyZWUocGtjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzow Mi43ODkyOTQ4NTMgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2Nh dnMvZmlwc19hZXNhdnMuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc4OTI5NDg1MyArMDEwMAotQEAg LTAsMCArMSw5MzkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNCBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklTVCBBRVMgQWxnb3JpdGht IFZhbGlkYXRpb24gU3VpdGUKLSsgIFRlc3QgUHJvZ3JhbQotKwotKyAgRG9uYXRlZCB0byBPcGVu U1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3Vp dGUgMzAwCi0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5TLkEuCi0rICAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsjaW5jbHVkZSA8c3Rk aW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp bmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIEFFUyBzdXBw b3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsjZGVmaW5lIEFFU19C TE9DS19TSVpFIDE2Ci0rCi0rI2RlZmluZSBWRVJCT1NFIDAKLSsKLSsvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLStpbnQgQUVTVGVzdChFVlBf Q0lQSEVSX0NUWCAqY3R4LAotKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVk IGNoYXIgKmFLZXksIAotKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCi0rCSAgICBpbnQgZGly LCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCSAgICB1bnNpZ25lZCBjaGFyICpw bGFpbnRleHQsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCi0rICAgIHsKLSsg ICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKHN0cmNhc2Vj bXAoYW1vZGUsICJDQkMiKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJ Y2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKLSsJCWJyZWFrOwotKwot KwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsJCWJyZWFrOwot KwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKLSsJCWJyZWFr OwotKwkJfQotKwotKwl9Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9 PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBo ZXIgPSBFVlBfYWVzXzEyOF9lY2IoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQlj aXBoZXIgPSBFVlBfYWVzXzE5Ml9lY2IoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0r CQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9lY2IoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAg IGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkIxMjgiKSA9PSAwKQotKwl7Ci0rCXN3aXRj aCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9j ZmIxMjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVz XzE5Ml9jZmIxMjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBF VlBfYWVzXzI1Nl9jZmIxMjgoKTsKLSsJCWJyZWFrOwotKwkJfQotKwotKwl9Ci0rICAgIGVsc2Ug aWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKLSsJewotKwlzd2l0Y2ggKGFr ZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfb2ZiKCk7 Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfb2Zi KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZf b2ZiKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFt b2RlLCJDRkIxIikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAx OTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxKCk7Ci0rCQlicmVhazsKLSsKLSsJCWNh c2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCQl9 Ci0rCX0KLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQotKwl7Ci0rCXN3 aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEy OF9jZmI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMTkyOgotKwkJY2lwaGVyID0gRVZQX2Fl c18xOTJfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVW UF9hZXNfMjU2X2NmYjgoKTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UKLSsJewot KwlwcmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJcmV0dXJuIDA7Ci0rCX0K LSsgICAgaWYgKCFjaXBoZXIpCi0rCXsKLSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxu IiwgYWtleXN6KTsKLSsJcmV0dXJuIDA7IAotKwl9Ci0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9l eChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQotKwlyZXR1cm4gMDsK LSsgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJTV9FVlBfQ0lQSEVSX0NUWF9z ZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKLSsgICAgaWYgKGRpcikK LSsJCUVWUF9DaXBoZXIoY3R4LCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCWVsc2UK LSsJCUVWUF9DaXBoZXIoY3R4LCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCi0rY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJU RVhUIn07Ci0rY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZC OCIsIkNGQjEyOCJ9OwotK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZC MTI4fTsKLStlbnVtIFhDcnlwdCB7WERFQ1JZUFQsIFhFTkNSWVBUfTsKLSsKLSsvKj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ki8KLSsvKiAgTW9udGUgQ2FybG8gVGVzdHMgICAgICAgICAg Ki8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSsvKiNkZWZpbmUgZ2Io YSxiKSAoKChhKVsoYikvOF0gPj4gKChiKSU4KSkmMSkqLwotKy8qI2RlZmluZSBzYihhLGIsdikg KChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICgoYiklOCkpKXwoISEodikgPDwgKChiKSU4 KSkpKi8KLSsKLSsjZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICg3LShiKSU4KSkmMSkK LSsjZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKDctKGIp JTgpKSl8KCEhKHYpIDw8ICg3LShiKSU4KSkpCi0rCi0raW50IGRvX21jdChjaGFyICphbW9kZSwg Ci0rCSAgIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksdW5zaWduZWQgY2hhciAqaVZl YywKLSsJICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKLSsJICAgRklM RSAqcmZwKQotKyAgICB7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGtl eVsxMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBpdlsxMDFdW0FFU19CTE9DS19TSVpFXTsK LSsgICAgdW5zaWduZWQgY2hhciBwdGV4dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIg Y3RleHRbMTAwMV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbNjQrNF07Ci0r ICAgIGludCBpLCBqLCBuLCBuMSwgbjI7Ci0rICAgIGludCBpbW9kZSA9IDAsIG5rZXlzeiA9IGFr ZXlzei84OwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2lu aXQoJmN0eCk7Ci0rCi0rICAgIGlmIChsZW4gPiAzMikKLSsJewotKwlwcmludGYoIlxuPj4+PiBM ZW5ndGggZXhjZWVkcyAzMiBmb3IgJXMgJWQgPDw8PFxuXG4iLCAKLSsJICAgICAgIGFtb2RlLCBh a2V5c3opOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgZm9yIChpbW9kZSA9IDA7IGltb2RlIDwg NjsgKytpbW9kZSkKLSsJaWYgKHN0cmNtcChhbW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0gMCkKLSsJ ICAgIGJyZWFrOwotKyAgICBpZiAoaW1vZGUgPT0gNikKLSsJeyAKLSsJcHJpbnRmKCJVbnJlY29n bml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rCi0rICAgIG1l bWNweShrZXlbMF0sIGFLZXksIG5rZXlzeik7Ci0rICAgIGlmIChpVmVjKQotKwltZW1jcHkoaXZb MF0sIGlWZWMsIEFFU19CTE9DS19TSVpFKTsKLSsgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJ bWVtY3B5KHB0ZXh0WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBlbHNlCi0rCW1lbWNweShjdGV4dFsw XSwgdGV4dCwgbGVuKTsKLSsgICAgZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKQotKwl7Ci0rCS8q IHByaW50ZigiSXRlcmF0aW9uICVkXG4iLCBpKTsgKi8KLSsJaWYgKGkgPiAwKQotKwkgICAgewot KwkgICAgZnByaW50ZihyZnAsIkNPVU5UID0gJWRcbiIsaSk7Ci0rCSAgICBPdXRwdXRWYWx1ZSgi S0VZIixrZXlbaV0sbmtleXN6LHJmcCwwKTsKLSsJICAgIGlmIChpbW9kZSAhPSBFQ0IpICAvKiBF Q0IgKi8KLSsJCU91dHB1dFZhbHVlKCJJViIsaXZbaV0sQUVTX0JMT0NLX1NJWkUscmZwLDApOwot KwkgICAgLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KLSsJICAgIE91dHB1dFZh bHVlKHRfdGFnW2Rpcl4xXSxkaXIgPyBwdGV4dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAsCi0rCQkJ aW1vZGUgPT0gQ0ZCMSk7Ci0rCSAgICB9Ci0rCWZvciAoaiA9IDA7IGogPCAxMDAwOyArK2opCi0r CSAgICB7Ci0rCSAgICBzd2l0Y2ggKGltb2RlKQotKwkJewotKwkgICAgY2FzZSBFQ0I6Ci0rCQlp ZiAoaiA9PSAwKQotKwkJICAgIHsgLyogc2V0IHVwIGVuY3J5cHRpb24gKi8KLSsJCSAgICByZXQg PSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgTlVMTCwgCi0rCQkJCSAgZGly LCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcHRleHRbal0sIGN0ZXh0 W2pdLCBsZW4pOwotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJbWVtY3B5KHB0ZXh0 W2orMV0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQltZW1jcHkoY3RleHRbaisx XSwgcHRleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBp ZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pd LCBwdGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7 Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtq XSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4p OwotKwkJCX0KLSsJCSAgICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNhc2UgQ0JDOgotKwkgICAg Y2FzZSBPRkI6ICAKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7 Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ld LCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBw dGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJ CQltZW1jcHkocHRleHRbaisxXSwgaXZbaV0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNw eShjdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewot KwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwg Y3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtq LTFdLCBsZW4pOwotKwkJCX0KLSsJCSAgICBlbHNlCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0 eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4 dFtqLTFdLCBsZW4pOwotKwkJCX0KLSsJCSAgICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNhc2Ug Q0ZCODoKLSsJCWlmIChqID09IDApCi0rCQkgICAgewotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0 eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRl Y3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwot KwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkK LSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBl bHNlCi0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkg ICAgfQotKwkJaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGogPCAx NikKLSsJCQltZW1jcHkocHRleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOwotKwkJICAgIGVsc2UK LSsJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xNl0sIGxlbik7Ci0rCQkgICAgfQotKwkJ ZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoaiA8IDE2KQotKwkJCW1lbWNweShjdGV4dFtqKzFd LCAmaXZbaV1bal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBw dGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsKLSsJICAgIGNhc2UgQ0ZC MToKLSsJCWlmKGogPT0gMCkKLSsJCSAgICB7Ci0rI2lmIDAKLSsJCSAgICAvKiBjb21wZW5zYXRl IGZvciB3cm9uZyBlbmRpYW5uZXNzIG9mIGlucHV0IGZpbGUgKi8KLSsJCSAgICBpZihpID09IDAp Ci0rCQkJcHRleHRbMF1bMF08PD03OwotKyNlbmRpZgotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0 eCxhbW9kZSxha2V5c3osa2V5W2ldLGl2W2ldLGRpciwKLSsJCQkJcHRleHRbal0sIGN0ZXh0W2pd LCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBY RU5DUllQVCkKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsK LSsJCSAgICBlbHNlCi0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxl bik7Ci0rCi0rCQkgICAgfQotKwkJaWYoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAg ICBpZihqIDwgMTI4KQotKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAg ZWxzZQotKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihjdGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0K LSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYoaiA8IDEyOCkKLSsJCQlzYihjdGV4dFtqKzFd LDAsZ2IoaXZbaV0saikpOwotKwkJICAgIGVsc2UKLSsJCQlzYihjdGV4dFtqKzFdLDAsZ2IocHRl eHRbai0xMjhdLDApKTsKLSsJCSAgICB9Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJLS1q OyAvKiByZXNldCB0byBsYXN0IG9mIHJhbmdlICovCi0rCS8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwg UGxhaW50ZXh0ICovCi0rCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sZGlyID8gY3RleHRbal0gOiBw dGV4dFtqXSxsZW4scmZwLAotKwkJICAgIGltb2RlID09IENGQjEpOwotKwlmcHJpbnRmKHJmcCwg IlxuIik7ICAvKiBhZGQgc2VwYXJhdG9yICovCi0rCi0rCS8qIENvbXB1dGUgbmV4dCBLRVkgKi8K LSsJaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJICAgIHsKLSsJICAgIGlmIChpbW9kZSA9PSBDRkI4 KQotKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLwot KwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQot KwkJICAgIGNpcGhlcnRleHRbbjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQl9Ci0rCSAgICBlbHNl IGlmKGltb2RlID09IENGQjEpCi0rCQl7Ci0rCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwg YWtleXN6IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IoY3RleHRbai1u Ml0sMCkpOwotKwkJfQotKwkgICAgZWxzZQotKwkJc3dpdGNoIChha2V5c3opCi0rCQkgICAgewot KwkJY2FzZSAxMjg6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAxNik7Ci0r CQkgICAgYnJlYWs7Ci0rCQljYXNlIDE5MjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3Rl eHRbai0xXSs4LCA4KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBjdGV4dFtqXSwgMTYp OwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAyNTY6Ci0rCQkgICAgbWVtY3B5KGNpcGhlcnRleHQs IGN0ZXh0W2otMV0sIDE2KTsKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgY3RleHRbal0s IDE2KTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsK LSsJICAgIGlmIChpbW9kZSA9PSBDRkI4KQotKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2ot MTRdIHx8IC4uLiB8fCBDVFtqXSAqLwotKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4x IDwgbmtleXN6OyArK24xLCAtLW4yKQotKwkJICAgIGNpcGhlcnRleHRbbjFdID0gcHRleHRbai1u Ml1bMF07Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCi0rCQl7Ci0rCQlmb3Io bjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGNp cGhlcnRleHQsbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJfQotKwkgICAgZWxzZQotKwkJc3dp dGNoIChha2V5c3opCi0rCQkgICAgewotKwkJY2FzZSAxMjg6Ci0rCQkgICAgbWVtY3B5KGNpcGhl cnRleHQsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDE5MjoKLSsJCSAg ICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSs4LCA4KTsKLSsJCSAgICBtZW1jcHkoY2lw aGVydGV4dCs4LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJY2FzZSAyNTY6Ci0r CQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0sIDE2KTsKLSsJCSAgICBtZW1jcHko Y2lwaGVydGV4dCsxNiwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0r CSAgICB9Ci0rCS8qIENvbXB1dGUgbmV4dCBrZXk6IEtleVtpKzFdID0gS2V5W2ldIHhvciBjdCAq LwotKwlmb3IgKG4gPSAwOyBuIDwgbmtleXN6OyArK24pCi0rCSAgICBrZXlbaSsxXVtuXSA9IGtl eVtpXVtuXSBeIGNpcGhlcnRleHRbbl07Ci0rCQotKwkvKiBDb21wdXRlIG5leHQgSVYgYW5kIHRl eHQgKi8KLSsJaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1v ZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbal0s IEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNl IE9GQjoKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0W2pdLCBB RVNfQkxPQ0tfU0laRSk7Ci0rCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2otMV0sIEFFU19CTE9D S19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJLyogSVZbaSsxXSA9IGN0 ICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKLSsJCSAg ICBpdltpKzFdW24xXSA9IGN0ZXh0W2otbjJdWzBdOwotKwkJcHRleHRbMF1bMF0gPSBjdGV4dFtq LTE2XVswXTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkIxOgotKwkJZm9yKG4xPTAsbjI9MTI3 IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCi0rCQkgICAgc2IoaXZbaSsxXSxuMSxnYihjdGV4dFtq LW4yXSwwKSk7Ci0rCQlwdGV4dFswXVswXT1jdGV4dFtqLTEyOF1bMF0mMHg4MDsKLSsJCWJyZWFr OwotKwkJfQotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzd2l0Y2ggKGltb2RlKQot KwkJewotKwkgICAgY2FzZSBFQ0I6Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pdLCBBRVNf QkxPQ0tfU0laRSk7Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0JDOgotKwkgICAgY2FzZSBPRkI6 Ci0rCSAgICBjYXNlIENGQjEyODoKLSsJCW1lbWNweShpdltpKzFdLCBwdGV4dFtqXSwgQUVTX0JM T0NLX1NJWkUpOwotKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0la RSk7Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCODoKLSsJCWZvciAobjEgPSAwLCBuMiA9IDE1 OyBuMSA8IDE2OyArK24xLCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFdID0gcHRleHRbai1uMl1b MF07Ci0rCQljdGV4dFswXVswXSA9IHB0ZXh0W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAgICBj YXNlIENGQjE6Ci0rCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJ CSAgICBzYihpdltpKzFdLG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKLSsJCWN0ZXh0WzBdWzBdPXB0 ZXh0W2otMTI4XVswXSYweDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0KLSsgICAg Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLSsvKj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0rICAjIENvbmZpZyBpbmZvIGZvciB2LW9uZQotKyAgIyBBRVNWUyBNTVQgdGVzdCBkYXRh IGZvciBFQ0IKLSsgICMgU3RhdGUgOiBFbmNyeXB0IGFuZCBEZWNyeXB0Ci0rICAjIEtleSBMZW5n dGggOiAyNTYKLSsgICMgRnJpIEF1ZyAzMCAwNDowNzoyMiBQTQotKyAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCi0rCi0raW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJz cGZpbGUpCi0rICAgIHsKLSsgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07Ci0rICAgIEZJTEUg KmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOwotKyAgICBjaGFyIGlidWZbMjA0OF07Ci0rICAgIGNo YXIgdGJ1ZlsyMDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hhciBh bGdvWzhdID0gIiI7Ci0rICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKLSsgICAgY2hhciBhdGVzdFs4 XSA9ICIiOwotKyAgICBpbnQgYWtleXN6ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBpVmVjWzIw XSwgYUtleVs0MF07Ci0rICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7Ci0rICAg IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhl cnRleHRbMjA0OF07Ci0rICAgIGNoYXIgKnJwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0r ICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGlmICghcnFmaWxlIHx8ICEo KnJxZmlsZSkpCi0rCXsKLSsJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7Ci0rCXJldHVybiAtMTsK LSsJfQotKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOwotKwotKyAgICBpZiAoKGFmcCA9IGZvcGVu KGFmbiwgInIiKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVz LCAlc1xuIiwgCi0rCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCXJldHVybiAtMTsK LSsJfQotKyAgICBpZiAoIXJzcGZpbGUpCi0rCXsKLSsJc3RyY3B5KHJmbixhZm4pOwotKwlycD1z dHJzdHIocmZuLCJyZXEvIik7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCWlmICghcnAp Ci0rCSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOwotKyNlbmRpZgotKwlhc3NlcnQocnApOwot KwltZW1jcHkocnAsInJzcCIsMyk7Ci0rCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKLSsJbWVt Y3B5KHJwLCAiLnJzcCIsIDQpOwotKwlyc3BmaWxlID0gcmZuOwotKwl9Ci0rICAgIGlmICgocmZw ID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBv cGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0r CWZjbG9zZShhZnApOwotKwlhZnAgPSBOVUxMOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgd2hp bGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKLSsJ ewotKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7Ci0rCWlsZW4gPSBzdHJsZW4oaWJ1Zik7Ci0rCS8q ICAgICAgcHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7ICovCi0rCXN3aXRjaCAo c3RlcCkKLSsJICAgIHsKLSsJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLwotKwkgICAgaWYg KGlidWZbMF0gPT0gJ1xuJykKLSsJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCi0rCQlpZiAoKCph bGdvID09ICdcMCcpIHx8Ci0rCQkgICAgKCphbW9kZSA9PSAnXDAnKSB8fAotKwkJICAgIChha2V5 c3ogPT0gMCkpCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiTWlzc2luZyBBbGdvcml0aG0sIE1v ZGUgb3IgS2V5U2l6ZSAoJXMvJXMvJWQpXG4iLAotKwkJCSAgIGFsZ28sYW1vZGUsYWtleXN6KTsK LSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICArKyBzdGVwOwotKwkJICAgIH0KLSsJCX0KLSsJICAgIGVs c2UgaWYgKGlidWZbMF0gIT0gJyMnKQotKwkJewotKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxl IGl0ZW06ICVzXG4iLCBpYnVmKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7 IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KLSsJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7Ci0rCQlp bnQgbjsKLSsJCWlmIChha2V5c3opCi0rCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYg ZGF0ZSAqLwotKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKLSsJCSAgICBmcHJpbnRmKHJm cCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0r CQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICBpZiAoc3RybmNtcChwcCwgIkFFU1ZTICIs IDYpID09IDApCi0rCQkJewotKwkJCXN0cmNweShhbGdvLCAiQUVTIik7Ci0rCQkJLyogZ2V0IHRl c3QgdHlwZSAqLwotKwkJCXBwICs9IDY7Ci0rCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7Ci0rCQkJ biA9IHhwLXBwOwotKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKLSsJCQlhdGVzdFtuXSA9ICdc MCc7Ci0rCQkJLyogZ2V0IG1vZGUgKi8KLSsJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdl dCBtb2RlIiAqLwotKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKLSsJCQlzdHJuY3B5KGFtb2RlLCB4 cCsxLCBuKTsKLSsJCQlhbW9kZVtuXSA9ICdcMCc7Ci0rCQkJLyogYW1vZGVbM10gPSAnXDAnOyAq LwotKwkJCWlmIChWRVJCT1NFKQotKwkJCQlwcmludGYoIlRlc3QgPSAlcywgTW9kZSA9ICVzXG4i LCBhdGVzdCwgYW1vZGUpOwotKwkJCX0KLSsJCSAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChwcCwg IktleSBMZW5ndGggOiAiLCAxMykgPT0gMCkKLSsJCQl7Ci0rCQkJYWtleXN6ID0gYXRvaShwcCsx Myk7Ci0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiS2V5IHNpemUgPSAlZFxuIiwgYWtl eXN6KTsKLSsJCQl9Ci0rCQkgICAgfQotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTog IC8qIFtFTkNSWVBUXSB8IFtERUNSWVBUXSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQot KwkJewotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSsrc3RlcDsKLSsJCWlmIChzdHJuY2FzZWNt cChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAxOwotKwkJZWxzZSBp ZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0g MDsKLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVz XG4iLCBpYnVmKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQot KwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50Zigi TWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7Ci0rCQlicmVhazsKLSsJCX0KLSsJ ICAgIGVsc2UgCi0rCQlzdGVwID0gMjsKLSsKLSsJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCi0r CSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKLSsJCWJyZWFr OwotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKLSsJCWJyZWFrOwot KwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJLRVkgPSAiLCA2KSAhPSAwKQotKwkJewot KwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxz ZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKLSsJCWlmIChs ZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAg ICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiS0VZIiwg YUtleSwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQotKwkJICAgIHsK LSsJCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKLSsJCSAgICBzdGVwID0gKGRp cik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkg ICAgKytzdGVwOwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMzogLyogSVYgPSB4eHh4 ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYs ICJJViA9ICIsIDUpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOwotKwkJ ZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIq KWlidWYrNSwgaVZlYyk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRm KCJJbnZhbGlkIElWXG4iKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAg fQotKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOwotKwkJc3RlcCA9IChkaXIpPyA0OiA1 OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAq LwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAi UExBSU5URVhUID0gIiwgMTIpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgUExBSU5U RVhUXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpbnQgbm4g PSBzdHJsZW4oaWJ1ZisxMik7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAg bGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxl bj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7 Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKLSsJCSAg ICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWYgKGxlbiA+PSBzaXplb2Yo cGxhaW50ZXh0KSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIp OwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilw bGFpbnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1v bnRlIENhcmxvIFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgaWYoZG9fbWN0KGFtb2RlLCBha2V5 c3osIGFLZXksIGlWZWMsIAotKwkJCSAgICAgIGRpciwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4 dCwgbGVuLCAKLSsJCQkgICAgICByZnApIDwgMCkKLSsJCQlFWElUKDEpOwotKwkJICAgIH0KLSsJ CWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6 LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQg Ki8KLSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0VmFs dWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwi Q0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwot KwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnAp OwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDAp Ci0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0r CSAgICBlbHNlCi0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVu PWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQllbHNl Ci0rCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxlbiA8 IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKLSsJ CSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwotKwkJUHJpbnRWYWx1ZSgi Q0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNU IikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgZG9fbWN0 KGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVu LCByZnApOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVz dCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxl bik7Ci0rCQkgICAgT3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFp bnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0r CQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAo aWJ1ZlswXSAhPSAnXG4nKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0 ZXJtaW5hdG9yXG4iKTsKLSsJCX0KLSsJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIp ICE9IDApCi0rCQl7IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlm cHV0cyhpYnVmLCByZnApOwotKwkJfQotKwkgICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJ ICAgIH0KLSsJfQotKyAgICBpZiAocmZwKQotKwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkK LSsJZmNsb3NlKGFmcCk7Ci0rICAgIHJldHVybiBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMg ZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCi0rICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBh cmUgcGFzc2VkIGluIGEgZmlsZS4KLSsgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgot KyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCi0rICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQg YXM6Ci0rICAgIGFlc190ZXN0IC1kIHh4eHh4Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJl cS50eHQKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIg KnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5V TEw7Ci0rICAgIGNoYXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9v cHQgPSAwLCBkX29wdCA9IDE7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQ U19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJ fQotKyNlbmRpZgotKyAgICBpZiAoYXJnYyA+IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJn dlsxXSwgIi1kIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJ ZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAg Zl9vcHQgPSAxOwotKwkgICAgZF9vcHQgPSAwOwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0r CSAgICBwcmludGYoIkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICBy ZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGFyZ2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRm KCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYg KGRfb3B0KQotKwkgICAgcnFsaXN0ID0gYXJndlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAg c3RyY3B5KGZuLCBhcmd2WzJdKTsKLSsJICAgIHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQot Kwl9Ci0rICAgIGlmIChkX29wdCkKLSsJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICov Ci0rCWlmICghKGZwID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50 ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmlsZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAg ICB9Ci0rCXdoaWxlIChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAg c3RydG9rKGZuLCAiXHJcbiIpOwotKwkgICAgc3RyY3B5KHJmbiwgZm4pOwotKwkgICAgaWYgKFZF UkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOwotKwkgICAgaWYgKHBy b2NfZmlsZShyZm4sIHJzcGZpbGUpKQotKwkJewotKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBm YWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7Ci0rCQlFWElUKDEpOwotKwkJfQotKwkgICAgfQot KwlmY2xvc2UoZnApOwotKwl9Ci0rICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KLSsJewotKwlp ZiAoVkVSQk9TRSkKLSsJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKLSsJaWYg KHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIj4+PiBQcm9j ZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOwotKwkgICAgfQotKwl9Ci0rICAgIEVY SVQoMCk7Ci0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19jbWFjdGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMuZmlwcwky MDEyLTAyLTI5IDEwOjMzOjAyLjc5MDI5NDg2MiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43 OTAyOTQ4NjIgKzAxMDAKLUBAIC0wLDAgKzEsNTE3IEBACi0rLyogZmlwc19jbWFjdGVzdC5jICov Ci0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3Bl blNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAg IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0r ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBo aWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29t KS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NM X0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2lmbmRlZiBPUEVO U1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAg cHJpbnRmKCJObyBGSVBTIENNQUMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0r Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0rc3RhdGljIGludCBjbWFjX3Rlc3QoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVy LCBGSUxFICpvdXQsIEZJTEUgKmluLAotKwlpbnQgbW9kZSwgaW50IEtsZW5fY291bnRzX2tleXMs IGludCBrbm93bl9rZXlsZW4pOwotK3N0YXRpYyBpbnQgcHJpbnRfY21hY19nZW4oY29uc3QgRVZQ X0NJUEhFUiAqY2lwaGVyLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBL bGVuLAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuLAotKwkJaW50IFRsZW4pOwot K3N0YXRpYyBpbnQgcHJpbnRfY21hY192ZXIoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBGSUxF ICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpLZXksIGludCBLbGVuLAotKwkJdW5zaWduZWQgY2hh ciAqTXNnLCBpbnQgTXNnbGVuLAotKwkJdW5zaWduZWQgY2hhciAqTWFjLCBpbnQgTWFjbGVuLAot KwkJaW50IFRsZW4pOwotKwotKyNpZmRlZiBGSVBTX0FMR1ZTCi0raW50IGZpcHNfY21hY3Rlc3Rf bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2Vsc2UKLStpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVM TDsKLSsJaW50IG1vZGUgPSAwOwkJLyogMCA9PiBHZW5lcmF0ZSwgMSA9PiBWZXJpZnkgKi8KLSsJ aW50IEtsZW5fY291bnRzX2tleXMgPSAwOyAvKiAwID0+IEtsZW4gaXMgc2l6ZSBvZiBvbmUga2V5 Ci0rCQkJCSAgICAgMSA9PiBLbGVuIGlzIGFtb3VudCBvZiBrZXlzCi0rCQkJCSAgKi8KLSsJaW50 IGtub3duX2tleWxlbiA9IDA7CS8qIE9ubHkgc2V0IHdoZW4gS2xlbl9jb3VudHNfa2V5cyA9IDEg Ki8KLSsJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gMDsKLSsJaW50IHJldCA9IDE7Ci0rCWZp cHNfYWxndGVzdF9pbml0KCk7Ci0rCi0rCXdoaWxlIChhcmdjID4gMSAmJiBhcmd2WzFdWzBdID09 ICctJykKLSsJCXsKLSsJCXN3aXRjaCAoYXJndlsxXVsxXSkKLSsJCQl7Ci0rCQljYXNlICdhJzoK LSsJCQl7Ci0rCQkJY2hhciAqcCA9ICZhcmd2WzFdWzJdOwotKwkJCWlmICgqcCA9PSAnXDAnKQot KwkJCQl7Ci0rCQkJCWlmIChhcmdjIDw9IDIpCi0rCQkJCQl7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVy ciwgIk9wdGlvbiAlcyBuZWVkcyBhIHZhbHVlXG4iLCBhcmd2WzFdKTsKLSsJCQkJCWdvdG8gZW5k OwotKwkJCQkJfQotKwkJCQlhcmd2Kys7Ci0rCQkJCWFyZ2MtLTsKLSsJCQkJcCA9ICZhcmd2WzFd WzBdOwotKwkJCQl9Ci0rCQkJaWYgKCFzdHJjbXAocCwgImFlczEyOCIpKQotKwkJCQljaXBoZXIg PSBFVlBfYWVzXzEyOF9jYmMoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHAsICJhZXMxOTIiKSkK LSsJCQkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcChw LCAiYWVzMjU2IikpCi0rCQkJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJCWVsc2Ug aWYgKCFzdHJjbXAocCwgInRkZWEzIikgfHwgIXN0cmNtcChwLCAidGRlczMiKSkKLSsJCQkJewot KwkJCQljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7Ci0rCQkJCUtsZW5fY291bnRzX2tleXMg PSAxOwotKwkJCQlrbm93bl9rZXlsZW4gPSA4OwotKwkJCQl9Ci0rCQkJZWxzZQotKwkJCQl7Ci0r CQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBhbGdvcml0aG0gJXNcbiIsIHApOwotKwkJCQln b3RvIGVuZDsKLSsJCQkJfQotKwkJCX0KLSsJCQlicmVhazsKLSsJCWNhc2UgJ2cnOgotKwkJCW1v ZGUgPSAwOwotKwkJCWJyZWFrOwotKwkJY2FzZSAndic6Ci0rCQkJbW9kZSA9IDE7Ci0rCQkJYnJl YWs7Ci0rCQlkZWZhdWx0OgotKwkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb24gJXNc biIsIGFyZ3ZbMV0pOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFyZ3YrKzsKLSsJCWFyZ2Mt LTsKLSsJCX0KLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWlu ID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rk b3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWlu KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFjbWFjX3Rlc3QoY2lwaGVyLCBvdXQsIGluLCBt b2RlLAotKwkJCUtsZW5fY291bnRzX2tleXMsIGtub3duX2tleWxlbikpCi0rCQl7Ci0rCQlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMIGNtYWMgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdv dG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChp biAmJiAoaW4gIT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9 IHN0ZG91dCkpCi0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwot KyNkZWZpbmUgQ01BQ19URVNUX01BWExJTkVMRU4JMTUwMDAwCi0rCi0raW50IGNtYWNfdGVzdChj b25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwgRklMRSAqaW4sCi0rCWludCBtb2Rl LCBpbnQgS2xlbl9jb3VudHNfa2V5cywgaW50IGtub3duX2tleWxlbikKLSsJewotKwljaGFyICps aW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwl1 bnNpZ25lZCBjaGFyICoqS2V5cyA9IE5VTEwsICpNc2cgPSBOVUxMLCAqTWFjID0gTlVMTDsKLSsJ dW5zaWduZWQgY2hhciAqS2V5ID0gTlVMTDsKLSsJaW50IENvdW50LCBLbGVuLCBNbGVuLCBUbGVu OwotKwlsb25nIEtleWxlbiwgTXNnbGVuLCBNYWNsZW47Ci0rCWludCByZXQgPSAwOwotKwlpbnQg bG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoQ01BQ19URVNUX01BWExJ TkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoQ01BQ19URVNUX01BWExJTkVMRU4p OwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJ Q291bnQgPSAtMTsKLSsJS2xlbiA9IC0xOwotKwlNbGVuID0gLTE7Ci0rCVRsZW4gPSAtMTsKLSsK LSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBDTUFDX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJ ewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQg PSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogU2tp cCBjb21tZW50cyAqLwotKwkJaWYgKGtleXdvcmRbMF0gPT0gJyMnKQotKwkJCXsKLSsJCQlpZiAo ZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVl OwotKwkJCX0KLSsKLSsJCS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5l YnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW0w9MjBd IGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xp bmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0K LSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJ KnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkp Ci0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVl ICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9 PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwot KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkNvdW50IikpCi0rCQkJewotKwkJCWlmIChDb3VudCAh PSAtMSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlDb3VudCA9IGF0b2kodmFsdWUpOwot KwkJCWlmIChDb3VudCA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiS2xlbiIpKQotKwkJCXsKLSsJCQlpZiAoS2xlbiAhPSAt MSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlLbGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJ aWYgKEtsZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChLbGVuX2NvdW50 c19rZXlzKQotKwkJCQl7Ci0rCQkJCUtleXMgPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoKktleXMp ICogS2xlbik7Ci0rCQkJCW1lbXNldChLZXlzLCAnXDAnLCBzaXplb2YoKktleXMpICogS2xlbik7 Ci0rCQkJCX0KLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJS2V5cyA9IE9QRU5TU0xfbWFsbG9jKHNp emVvZigqS2V5cykpOwotKwkJCQltZW1zZXQoS2V5cywgJ1wwJywgc2l6ZW9mKCpLZXlzKSk7Ci0r CQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNbGVuIikpCi0rCQkJ ewotKwkJCWlmIChNbGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCU1sZW4g PSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoTWxlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiVGxlbiIpKQotKwkJCXsKLSsJ CQlpZiAoVGxlbiAhPSAtMSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlUbGVuID0gYXRv aSh2YWx1ZSk7Ci0rCQkJaWYgKFRsZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIktleSIpICYmICFLbGVuX2NvdW50c19r ZXlzKQotKwkJCXsKLSsJCQlpZiAoS2V5c1swXSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQlLZXlzWzBdID0gaGV4MmJpbl9tKHZhbHVlLCAmS2V5bGVuKTsKLSsJCQlpZiAoIUtleXNbMF0p Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cm5jbXAoa2V5 d29yZCwgIktleSIsIDMpICYmIEtsZW5fY291bnRzX2tleXMpCi0rCQkJewotKwkJCWludCBrZXlu dW0gPSBhdG9pKGtleXdvcmQgKyAzKTsKLSsJCQlpZiAoIWtleW51bSB8fCBrZXludW0gPiBLbGVu IHx8IEtleXNba2V5bnVtLTFdKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCUtleXNba2V5 bnVtLTFdID0gaGV4MmJpbl9tKHZhbHVlLCAmS2V5bGVuKTsKLSsJCQlpZiAoIUtleXNba2V5bnVt LTFdKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiTWFjIikpCi0rCQkJewotKwkJCWlmIChtb2RlID09IDApCi0rCQkJCWNvbnRpbnVlOwot KwkJCWlmIChNYWMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTWFjID0gaGV4MmJpbl9t KHZhbHVlLCAmTWFjbGVuKTsKLSsJCQlpZiAoIU1hYykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJSZXN1bHQiKSkKLSsJCQl7Ci0r CQkJaWYgKG1vZGUgPT0gMSkKLSsJCQkJY29udGludWU7Ci0rCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQl9Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9saW5l YnVmLCBvdXQpOwotKwotKwkJaWYgKEtleXMgJiYgTXNnICYmICghbW9kZSB8fCBNYWMpICYmIChU bGVuID4gMCkgJiYgKEtsZW4gPiAwKSkKLSsJCQl7Ci0rCQkJaWYgKEtsZW5fY291bnRzX2tleXMp Ci0rCQkJCXsKLSsJCQkJaW50IHg7Ci0rCQkJCUtleSA9IE9QRU5TU0xfbWFsbG9jKEtsZW4gKiBr bm93bl9rZXlsZW4pOwotKwkJCQlmb3IgKHggPSAwOyB4IDwgS2xlbjsgeCsrKQotKwkJCQkJewot KwkJCQkJbWVtY3B5KEtleSArIHggKiBrbm93bl9rZXlsZW4sCi0rCQkJCQkJS2V5c1t4XSwga25v d25fa2V5bGVuKTsKLSsJCQkJCU9QRU5TU0xfZnJlZShLZXlzW3hdKTsKLSsJCQkJCX0KLSsJCQkJ S2xlbiAqPSBrbm93bl9rZXlsZW47Ci0rCQkJCX0KLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJS2V5 ID0gT1BFTlNTTF9tYWxsb2MoS2xlbik7Ci0rCQkJCW1lbWNweShLZXksIEtleXNbMF0sIEtsZW4p OwotKwkJCQlPUEVOU1NMX2ZyZWUoS2V5c1swXSk7Ci0rCQkJCX0KLSsJCQlPUEVOU1NMX2ZyZWUo S2V5cyk7Ci0rCi0rCQkJc3dpdGNoKG1vZGUpCi0rCQkJCXsKLSsJCQljYXNlIDA6Ci0rCQkJCWlm ICghcHJpbnRfY21hY19nZW4oY2lwaGVyLCBvdXQsCi0rCQkJCQkJS2V5LCBLbGVuLAotKwkJCQkJ CU1zZywgTWxlbiwKLSsJCQkJCQlUbGVuKSkKLSsJCQkJCWdvdG8gZXJyb3I7Ci0rCQkJCWJyZWFr OwotKwkJCWNhc2UgMToKLSsJCQkJaWYgKCFwcmludF9jbWFjX3ZlcihjaXBoZXIsIG91dCwKLSsJ CQkJCQlLZXksIEtsZW4sCi0rCQkJCQkJTXNnLCBNbGVuLAotKwkJCQkJCU1hYywgTWFjbGVuLAot KwkJCQkJCVRsZW4pKQotKwkJCQkJZ290byBlcnJvcjsKLSsJCQkJYnJlYWs7Ci0rCQkJCX0KLSsK LSsJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKLSsJCQlLZXkgPSBOVUxMOwotKwkJCU9QRU5TU0xfZnJl ZShNc2cpOwotKwkJCU1zZyA9IE5VTEw7Ci0rCQkJT1BFTlNTTF9mcmVlKE1hYyk7Ci0rCQkJTWFj ID0gTlVMTDsKLSsJCQlLbGVuID0gLTE7Ci0rCQkJTWxlbiA9IC0xOwotKwkJCVRsZW4gPSAtMTsK LSsJCQlDb3VudCA9IC0xOwotKwkJCX0KLSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJ ZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0r CWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAoS2V5KQotKwkJ T1BFTlNTTF9mcmVlKEtleSk7Ci0rCWlmIChNc2cpCi0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJ aWYgKE1hYykKLSsJCU9QRU5TU0xfZnJlZShNYWMpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlw YXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9j ZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0r c3RhdGljIGludCBwcmludF9jbWFjX2dlbihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUg Km91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFy ICpNc2csIGludCBNbGVuLAotKwkJaW50IFRsZW4pCi0rCXsKLSsJaW50IHJjLCBpOwotKwlzaXpl X3QgcmVzbGVuOwotKwl1bnNpZ25lZCBjaGFyIHJlc1sxMjhdOwotKwlDTUFDX0NUWCAqY21hY19j dHggPSBDTUFDX0NUWF9uZXcoKTsKLSsKLSsJQ01BQ19Jbml0KGNtYWNfY3R4LCBLZXksIEtsZW4s IGNpcGhlciwgMCk7Ci0rCUNNQUNfVXBkYXRlKGNtYWNfY3R4LCBNc2csIE1sZW4pOwotKwlpZiAo IUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywgJnJlc2xlbikpCi0rCQl7Ci0rCQlmcHV0cygiRXJy b3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJCX0KLSsJZWxz ZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQotKwkJewotKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJv ciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBzdGRlcnIpOwotKwkJcmMgPSAwOwotKwkJfQotKwll bHNlCi0rCQl7Ci0rCQlmcHV0cygiTWFjID0gIiwgb3V0KTsKLSsJCWZvciAoaSA9IDA7IGkgPCBU bGVuOyBpKyspCi0rCQkJZnByaW50ZihvdXQsICIlMDJ4IiwgcmVzW2ldKTsKLSsJCWZwdXRzKFJF U1BfRU9MLCBvdXQpOwotKwkJcmMgPSAxOwotKwkJfQotKwlDTUFDX0NUWF9mcmVlKGNtYWNfY3R4 KTsKLSsJcmV0dXJuIHJjOwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9jbWFjX3Zlcihjb25z dCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKktleSwg aW50IEtsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNbGVuLAotKwkJdW5zaWduZWQg Y2hhciAqTWFjLCBpbnQgTWFjbGVuLAotKwkJaW50IFRsZW4pCi0rCXsKLSsJaW50IHJjID0gMTsK LSsJc2l6ZV90IHJlc2xlbjsKLSsJdW5zaWduZWQgY2hhciByZXNbMTI4XTsKLSsJQ01BQ19DVFgg KmNtYWNfY3R4ID0gQ01BQ19DVFhfbmV3KCk7Ci0rCi0rCUNNQUNfSW5pdChjbWFjX2N0eCwgS2V5 LCBLbGVuLCBjaXBoZXIsIDApOwotKwlDTUFDX1VwZGF0ZShjbWFjX2N0eCwgTXNnLCBNbGVuKTsK LSsJaWYgKCFDTUFDX0ZpbmFsKGNtYWNfY3R4LCByZXMsICZyZXNsZW4pKQotKwkJewotKwkJZnB1 dHMoIkVycm9yIGNhbGN1bGF0aW5nIENNQUNcbiIsIHN0ZGVycik7Ci0rCQlyYyA9IDA7Ci0rCQl9 Ci0rCWVsc2UgaWYgKFRsZW4gPiAoaW50KXJlc2xlbikKLSsJCXsKLSsJCWZwdXRzKCJQYXJhbWV0 ZXIgZXJyb3IsIFRsZW4gPiBDTUFDIGxlbmd0aFxuIiwgc3RkZXJyKTsKLSsJCXJjID0gMDsKLSsJ CX0KLSsJZWxzZSBpZiAoVGxlbiAhPSBNYWNsZW4pCi0rCQl7Ci0rCQlmcHV0cygiUGFyYW1ldGVy IGVycm9yLCBUbGVuICE9IHJlc3VsdGluZyBNYWMgbGVuZ3RoXG4iLCBzdGRlcnIpOwotKwkJcmMg PSAwOwotKwkJfQotKwllbHNlCi0rCQl7Ci0rCQlpZiAoIW1lbWNtcChNYWMsIHJlcywgTWFjbGVu KSkKLSsJCQlmcHV0cygiUmVzdWx0ID0gUCIgUkVTUF9FT0wsIG91dCk7Ci0rCQllbHNlCi0rCQkJ ZnB1dHMoIlJlc3VsdCA9IEYiIFJFU1BfRU9MLCBvdXQpOwotKwkJfQotKwlDTUFDX0NUWF9mcmVl KGNtYWNfY3R4KTsKLSsJcmV0dXJuIHJjOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKLS0tLSBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcwkyMDEy LTAyLTI5IDEwOjMzOjAyLjc5MDI5NDg2MiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MDI5 NDg2MiArMDEwMAotQEAgLTAsMCArMSw3MDIgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8K LSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgTklT VCBERVMgTW9kZXMgb2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCi0rICBUZXN0IFByb2dy YW0KLSsKLSsgIEJhc2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgot KyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgotKyAgVi1PTkUgQ29ycG9yYXRpb24KLSsgIDIwMjUw IENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCi0rICBHZXJtYW50b3duLCBNRCAyMDg3NAotKyAgVS5T LkEuCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K LSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxlcnJuby5oPgotKyNpbmNsdWRlIDxhc3NlcnQuaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKwotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRm KCJObyBGSVBTIERFUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxz ZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIK LSsKLSsjZGVmaW5lIERFU19CTE9DS19TSVpFIDgKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwot K2ludCBERVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50 IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVj LCAKLSsJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAg IHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCi0rICAgIHsK LSsgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKLSsKLSsgICAgaWYgKGFrZXlz eiAhPSAxOTIpCi0rCXsKLSsJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6 KTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIp ID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKLSsgICAgZWxzZSBpZiAoc3Ry Y2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2Io KTsKLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKLSsJY2lw aGVyID0gRVZQX2Rlc19lZGUzX2NmYjY0KCk7Ci0rICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFt b2RlLCAiT0ZCIiwgMykgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOwotKyAg ICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCWNpcGhlciA9IEVWUF9kZXNf ZWRlM19jZmI4KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJ Y2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjEoKTsKLSsgICAgZWxzZQotKwl7Ci0rCXByaW50Zigi VW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlm IChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8 PSAwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJ TV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRT KTsKLSsgICAgRVZQX0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7Ci0rCi0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAq dmFsLCBpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9s ZW47Ci0rICAgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgICAgcHJpbnRmKCIl cyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rICAgIH0KLSsKLSt2b2lkIHNoaWZ0aW4o dW5zaWduZWQgY2hhciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCi0rICAgIHsK LSsgICAgaW50IG47Ci0rCi0rICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCi0rICAgIG1lbW1v dmUoZHN0LGRzdCtuYml0cy84LDMqOC1uYml0cy84KTsKLSsgICAgLyogYXBwZW5kIG5ldyBkYXRh ICovCi0rICAgIG1lbWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKLSsgICAg LyogbGVmdCBzaGlmdCB0aGUgYml0cyAqLwotKyAgICBpZihuYml0cyU4KQotKwlmb3Iobj0wIDsg biA8IDMqOCA7ICsrbikKLSsJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtu KzFdID4+ICg4LW5iaXRzJTgpKTsKLSsgICAgfQkKLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5U RVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9G QiIsIkNGQjEiLCJDRkI4IiwiQ0ZCNjQifTsKLStlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENG QjEsIENGQjgsIENGQjY0fTsKLStpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07Ci0rCi0r dm9pZCBkb19tY3QoY2hhciAqYW1vZGUsIAotKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMs IHVuc2lnbmVkIGNoYXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKLSsJICAgIGludCBkaXIs IHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCi0rCSAgICBGSUxFICpyZnApCi0rICAgIHsK LSsgICAgaW50IGksaW1vZGU7Ci0rICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2Vz dCBrZXkrOCAqLwotKyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOwotKwotKyAgICBmb3IgKGlt b2RlPTAgOyBpbW9kZSA8IDYgOyArK2ltb2RlKQotKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtp bW9kZV0pKQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmlu dGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlFWElUKDEpOwotKwl9Ci0r Ci0rICAgIGZvcihpPTAgOyBpIDwgNDAwIDsgKytpKQotKwl7Ci0rCWludCBqOwotKwlpbnQgbjsK LSsJaW50IGtwPWFrZXlzei82NDsKLSsJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07Ci0rCUVWUF9D SVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJZnByaW50 ZihyZnAsIlxuQ09VTlQgPSAlZFxuIixpKTsKLSsJaWYoa3AgPT0gMSkKLSsJICAgIE91dHB1dFZh bHVlKCJLRVkiLGFrZXksOCxyZnAsMCk7Ci0rCWVsc2UKLSsJICAgIGZvcihuPTAgOyBuIDwga3Ag OyArK24pCi0rCQl7Ci0rCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7Ci0rCQlPdXRwdXRWYWx1 ZSgiIixha2V5K24qOCw4LHJmcCwwKTsKLSsJCX0KLSsKLSsJaWYoaW1vZGUgIT0gRUNCKQotKwkg ICAgT3V0cHV0VmFsdWUoIklWIixpdmVjLDgscmZwLDApOwotKwlPdXRwdXRWYWx1ZSh0X3RhZ1tk aXJeMV0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOwotKyNpZiAwCi0rCS8qIGNvbXBlbnNh dGUgZm9yIGVuZGlhbm5lc3MgKi8KLSsJaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJICAgIHRleHRbMF08 PD03OwotKyNlbmRpZgotKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKLSsKLSsJZm9yKGo9MCA7IGog PCAxMDAwMCA7ICsraikKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07 Ci0rCi0rCSAgICBtZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKLSsJICAgIGlmKGogPT0gMCkKLSsJ CXsKLSsJCW1lbWNweShvbGRfaXYsaXZlYyw4KTsKLSsJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5 c3osYWtleSxpdmVjLGRpcix0ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsK LSsJCW1lbWNweShvbGRfaXYsY3R4Lml2LDgpOwotKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4 dCxsZW4pOwotKwkJfQotKwkgICAgaWYoaiA9PSA5OTk5KQotKwkJewotKwkJT3V0cHV0VmFsdWUo dF90YWdbZGlyXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0rCQkvKgkJbWVtY3B5KGl2 ZWMsdGV4dCw4KTsgKi8KLSsJCX0KLSsJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2 LDgpOyAqLwotKwkgICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICov Ci0rCSAgICBzaGlmdGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKLSsJICAgIC8qCSAgICBEZWJ1 Z1ZhbHVlKCJuayIsbmssMjQpOyovCi0rCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8 IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQKLSsJCQl8fCBpbW9kZSA9PSBDQkMpKSB8 fCBpbW9kZSA9PSBPRkIpCi0rCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7Ci0rCi0rCSAgICBpZigh ZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQp KQotKwkJewotKwkJLyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhl IHJhdyBERVMgb3BlcmF0aW9uCi0rCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0 cnVjdCBpdC4uLiAqLwotKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJICAgIHRleHRbbl1e PW9sZF90ZXh0W25dOwotKwkJfQotKwkgICAgfQotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0r CSAgICBha2V5W25dXj1ua1sxNituXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAg YWtleVs4K25dXj1ua1s4K25dOwotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5 WzE2K25dXj1ua1tuXTsKLSsJaWYobnVta2V5cyA8IDMpCi0rCSAgICBtZW1jcHkoJmFrZXlbMio4 XSxha2V5LDgpOwotKwlpZihudW1rZXlzIDwgMikKLSsJICAgIG1lbWNweSgmYWtleVs4XSxha2V5 LDgpOwotKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKLSsJREVTX3Nl dF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOwotKwlERVNfc2V0X29kZF9wYXJp dHkoKERFU19jYmxvY2sgKikoYWtleSsxNikpOwotKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7Ci0r Ci0rCS8qIHBvaW50bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5k IG9uIHRoZQotKwkgICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0 IGl0IGlzPyAoV2hvCi0rCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KLSsJaWYoaW1vZGUg PT0gT0ZCKQotKwkgICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkJdGV4dFtuXT10ZXh0MFtu XV5vbGRfaXZbbl07Ci0rCX0KLSsgICAgfQotKyAgICAKLStpbnQgcHJvY19maWxlKGNoYXIgKnJx ZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2 XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1Zlsy MDQ4XSwgdGJ1ZlsyMDQ4XTsKLSsgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKLSsgICAgY2hh ciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKLSsgICAgaW50IGFr ZXlzej0wOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50 IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRl eHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hh ciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgaW50IG51bWtleXM9MTsKLSsg ICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgq cnFmaWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwot Kwl9Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4o YWZuLCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMs ICVzXG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwot Kwl9Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0 cnN0cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkK LSsJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0r CW1lbWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1j cHkocnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAg PSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9w ZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJ ZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGls ZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7 Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyoJ cHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KLSsJaWYoc3RlcCA9PSAzICYm ICFzdHJjbXAoYW1vZGUsIkVDQiIpKQotKwkgICAgewotKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNp emVvZihpVmVjKSk7Ci0rCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBF Q0IgKi8KLSsJICAgIH0KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6ICAvKiBy ZWFkIHByZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQg b2YgcHJlYW1ibGUgKi8KLSsJCWlmICgqYW1vZGUgPT0gJ1wwJykKLSsJCSAgICB7Ci0rCQkgICAg cHJpbnRmKCJNaXNzaW5nIE1vZGVcbiIpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJ ZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7 Ci0rCQkgICAgfQotKwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0r CQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0g MTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hh ciAqeHAsICpwcCA9IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYoKmFtb2RlKQotKwkJICAgIHsg LyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KLSsJCSAgICB0aW1lX3QgcnRpbSA9IHRp bWUoMCk7Ci0rCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKLSsJCSAg ICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAg aWYoIXN0cm5jbXAocHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKLSsJ CSAgICAgICB8fCAhc3RybmNtcChwcCwiVERFUyAiLDUpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAo cHAsIlBFUk1VVEFUSU9OICIsMTIpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRV VElPTiAiLDEzKQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQotKwkJ CXsKLSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0rCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQp KQotKwkJCSAgICBwcCs9NDsKLSsJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCi0r CQkJICAgIHBwKz01OwotKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOwotKwkJCW4gPSB4cC1wcDsK LSsJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7Ci0rCQkJYXRlc3Rbbl0gPSAnXDAnOwotKwkJCS8q IGdldCBtb2RlICovCi0rCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8K LSsJCQluID0gc3RybGVuKHhwKzEpLTE7Ci0rCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7Ci0r CQkJYW1vZGVbbl0gPSAnXDAnOwotKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KLSsJCQlpZiAo VkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsK LSsJCQl9Ci0rCQkgICAgfQotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMTogIC8qIFtF TkNSWVBUXSB8IFtERUNSWVBUXSAqLwotKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQotKwkJYnJl YWs7Ci0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnAp OwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9 PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RF Q1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9 IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEp Ci0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBr ZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwot KwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGlmKCppYnVmID09ICdcbicpCi0r CQl7Ci0rCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAg ICAgICB9Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJewot KwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAg fQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCi0rCQl7Ci0rCSAgICAg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0rCSAg ICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQotKwkJewotKwkJbnVta2V5 cz1hdG9pKGlidWYrMTApOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgCi0rCSAgICBmcHV0cyhpYnVm LCByZnApOwotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCi0rCQl7Ci0r CQlha2V5c3o9NjQ7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJ aWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwot KwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIktF WSIsIGFLZXksIGxlbik7Ci0rCQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2Fz ZWNtcChpYnVmLCJLRVlzID0gIiw3KSkKLSsJCXsKLSsJCWFrZXlzej02NCozOwotKwkJbGVuPWhl eDJiaW4oaWJ1Zis3LGFLZXkpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAgIHBy aW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwotKwkJ ICAgIH0KLSsJCW1lbWNweShhS2V5KzgsYUtleSw4KTsKLSsJCW1lbWNweShhS2V5KzE2LGFLZXks OCk7Ci0rCQlpYnVmWzRdPSdcMCc7Ci0rCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7Ci0r CQkrK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMp KQotKwkJewotKwkJaW50IG49aWJ1ZlszXS0nMSc7Ci0rCi0rCQlha2V5c3o9NjQqMzsKLSsJCWxl bj1oZXgyYmluKGlidWYrNyxhS2V5K24qOCk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0r CQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJl YWs7Ci0rCQkgICAgfQotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXks bGVuKTsKLSsJCWlmKG4gPT0gMikKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBlbHNlCi0r CQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAg ICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYs IHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJ CXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAg ZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlm IChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJ ICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIs IGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsK LSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCBy ZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0g MCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsK LSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJ CWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixu bi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxh aW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFs aWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVh azsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsK LSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRW YWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlm IChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0r CQkgICAgewotKwkJICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGly LHBsYWludGV4dCxsZW4scmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAg IGFzc2VydChkaXIgPT0gMSk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtl eXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5 cHQgKi8KLSsJCQkJICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7Ci0rCQkgICAgT3V0cHV0 VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKLSsJCQkJIXN0cmNtcChhbW9k ZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJCX0KLSsJICAgIGJyZWFrOwot KwotKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCBy ZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9 IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9 Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAg bGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Ci0rCQll bHNlCi0rCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOwotKwkJaWYgKGxl biA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsK LSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJCi0rCQlQcmludFZh bHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3Qs ICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCi0rCQkgICAgewotKwkJICAg IGRvX21jdChhbW9kZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKLSsJCQkgICBkaXIs IGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJ ICAgIGFzc2VydChkaXIgPT0gMCk7Ci0rCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwg YWtleXN6LCBhS2V5LCBpVmVjLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVu Y3J5cHQgKi8KLSsJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQkgICAgT3V0 cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwK LSsJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKLSsJCSAgICB9Ci0rCQlzdGVwID0gNjsKLSsJ CX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDY6Ci0rCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4n KQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsK LSsJCX0KLSsJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCi0rCQl7IC8q IE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCi0rCQlmcHV0cyhpYnVmLCByZnAp OwotKwkJfQotKwkgICAgc3RlcCA9IDE7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJfQotKyAg ICBpZiAocmZwKQotKwlmY2xvc2UocmZwKTsKLSsgICAgaWYgKGFmcCkKLSsJZmNsb3NlKGFmcCk7 Ci0rICAgIHJldHVybiBlcnI7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xl IGZpbGUgb3IgCi0rICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEg ZmlsZS4KLSsgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAt ZiB4eHgucmVxCi0rICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190 ZXN0IC1kIHh4eHh4Lnh4eAotKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyAgICB7Ci0rICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEu dHh0IiwgKnJzcGZpbGUgPSBOVUxMOwotKyAgICBGSUxFICpmcCA9IE5VTEw7Ci0rICAgIGNoYXIg Zm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOwotKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9 IDE7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkK LSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJRVhJVCgxKTsKLSsJfQotKyNlbmRpZgotKyAg ICBpZiAoYXJnYyA+IDEpCi0rCXsKLSsJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0g MCkKLSsJICAgIHsKLSsJICAgIGRfb3B0ID0gMTsKLSsJICAgIH0KLSsJZWxzZSBpZiAoc3RyY2Fz ZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQotKwkgICAgewotKwkgICAgZl9vcHQgPSAxOwotKwkg ICAgZF9vcHQgPSAwOwotKwkgICAgfQotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIklu dmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAg IH0KLSsJaWYgKGFyZ2MgPCAzKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFt ZXRlclxuIik7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJaWYgKGRfb3B0KQotKwkgICAg cnFsaXN0ID0gYXJndlsyXTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgc3RyY3B5KGZuLCBhcmd2 WzJdKTsKLSsJICAgIHJzcGZpbGUgPSBhcmd2WzNdOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChk X29wdCkKLSsJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCi0rCWlmICghKGZwID0g Zm9wZW4ocnFsaXN0LCAiciIpKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiQ2Fubm90IG9wZW4g cmVxIGxpc3QgZmlsZVxuIik7Ci0rCSAgICByZXR1cm4gLTE7Ci0rCSAgICB9Ci0rCXdoaWxlIChm Z2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQotKwkgICAgewotKwkgICAgc3RydG9rKGZuLCAiXHJc biIpOwotKwkgICAgc3RyY3B5KHJmbiwgZm4pOwotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAl c1xuIiwgcmZuKTsKLSsJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKLSsJCXsKLSsJ CXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwotKwkJ RVhJVCgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZmNsb3NlKGZwKTsKLSsJfQotKyAgICBlbHNlIC8q IHNpbmdsZSBmaWxlICovCi0rCXsKLSsJaWYgKFZFUkJPU0UpCi0rCQlwcmludGYoIlByb2Nlc3Np bmc6ICVzXG4iLCBmbik7Ci0rCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQotKwkgICAgewot KwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsK LSsJICAgIH0KLSsJfQotKyAgICBFWElUKDApOwotKyAgICByZXR1cm4gMDsKLSsgICAgfQotKwot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfZGh2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf ZGh2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2 cy5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTAyOTQ4NjIgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMJMjAxMi0wMi0yOSAxMDoz MzowMi43OTAyOTQ4NjIgKzAxMDAKLUBAIC0wLDAgKzEsMjkyIEBACi0rLyogZmlwcy9kaC9maXBz X2RodnMuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkK LSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERIIHN1cHBvcnRcbiIpOwotKyAgICByZXR1 cm4oMCk7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+ Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGNvbnN0IEVWUF9NRCAqcGFy c2VfbWQoY2hhciAqbGluZSkKLSsJewotKwljaGFyICpwOwotKwlpZiAobGluZVswXSAhPSAnWycg fHwgbGluZVsxXSAhPSAnRicpCi0rCQlyZXR1cm4gTlVMTDsKLSsJcCA9IHN0cmNocihsaW5lLCAn LScpOwotKwlpZiAoIXApCi0rCQlyZXR1cm4gTlVMTDsKLSsJbGluZSA9IHAgKyAxOwotKwlwID0g c3RyY2hyKGxpbmUsICddJyk7Ci0rCWlmICghcCkKLSsJCXJldHVybiBOVUxMOwotKwkqcCA9IDA7 Ci0rCXAgPSBsaW5lOwotKwl3aGlsZShpc3NwYWNlKCpwKSkKLSsJCXArKzsKLSsJaWYgKCFzdHJj bXAocCwgIlNIQTEiKSkKLSsJCXJldHVybiBFVlBfc2hhMSgpOwotKwllbHNlIGlmICghc3RyY21w KHAsICJTSEEyMjQiKSkKLSsJCXJldHVybiBFVlBfc2hhMjI0KCk7Ci0rCWVsc2UgaWYgKCFzdHJj bXAocCwgIlNIQTI1NiIpKQotKwkJcmV0dXJuIEVWUF9zaGEyNTYoKTsKLSsJZWxzZSBpZiAoIXN0 cmNtcChwLCAiU0hBMzg0IikpCi0rCQlyZXR1cm4gRVZQX3NoYTM4NCgpOwotKwllbHNlIGlmICgh c3RyY21wKHAsICJTSEE1MTIiKSkKLSsJCXJldHVybiBFVlBfc2hhNTEyKCk7Ci0rCWVsc2UKLSsJ CXJldHVybiBOVUxMOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgb3V0cHV0X1poYXNoKEZJTEUgKm91 dCwgaW50IGV4b3V0LAotKwkJCQlESCAqZGgsIEJJR05VTSAqcGVlcmtleSwgY29uc3QgRVZQX01E ICptZCwKLSsJCQkJdW5zaWduZWQgY2hhciAqcmhhc2gsIHNpemVfdCByaGFzaGxlbikKLSsJewot Kwl1bnNpZ25lZCBjaGFyICpaOwotKwl1bnNpZ25lZCBjaGFyIGNoYXNoW0VWUF9NQVhfTURfU0la RV07Ci0rCWludCBabGVuOwotKwlpZiAocmhhc2ggPT0gTlVMTCkKLSsJCXsKLSsJCXJoYXNobGVu ID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rCQlpZiAoIURIX2dlbmVyYXRlX2tleShkaCkpCi0rCQkJ ZXhpdCAoMSk7Ci0rCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlllcGhlbUlVVCIsIGRoLT5wdWJf a2V5KTsKLSsJCWlmIChleG91dCkKLSsJCQlkb19ibl9wcmludF9uYW1lKG91dCwgIlhlcGhlbUlV VCIsIGRoLT5wcml2X2tleSk7Ci0rCQl9Ci0rCVogPSBPUEVOU1NMX21hbGxvYyhCTl9udW1fYnl0 ZXMoZGgtPnApKTsKLSsJaWYgKCFaKQotKwkJZXhpdCgxKTsKLSsJWmxlbiA9IERIX2NvbXB1dGVf a2V5X3BhZGRlZChaLCBwZWVya2V5LCBkaCk7Ci0rCWlmIChleG91dCkKLSsJCU91dHB1dFZhbHVl KCJaIiwgWiwgWmxlbiwgb3V0LCAwKTsKLSsJRklQU19kaWdlc3QoWiwgWmxlbiwgY2hhc2gsIE5V TEwsIG1kKTsKLSsJT3V0cHV0VmFsdWUocmhhc2ggPyAiSVVUSGFzaFpaIiA6ICJIYXNoWloiLCBj aGFzaCwgcmhhc2hsZW4sIG91dCwgMCk7Ci0rCWlmIChyaGFzaCkKLSsJCXsKLSsJCWZwcmludGYo b3V0LCAiUmVzdWx0ID0gJXNcbiIsCi0rCQkJCW1lbWNtcChjaGFzaCwgcmhhc2gsIHJoYXNobGVu KSA/ICJGIiA6ICJQIik7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCUJOX2NsZWFyX2ZyZWUoZGgt PnByaXZfa2V5KTsKLSsJCUJOX2NsZWFyX2ZyZWUoZGgtPnB1Yl9rZXkpOwotKwkJZGgtPnByaXZf a2V5ID0gTlVMTDsKLSsJCWRoLT5wdWJfa2V5ID0gTlVMTDsKLSsJCX0KLSsJT1BFTlNTTF9jbGVh bnNlKFosIFpsZW4pOwotKwlPUEVOU1NMX2ZyZWUoWik7Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19B TEdWUwotK2ludCBmaXBzX2RodnNfbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2Vsc2UK LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJY2hhciAq KmFyZ3MgPSBhcmd2ICsgMTsKLSsJaW50IGFyZ24gPSBhcmdjIC0gMTsKLSsJRklMRSAqaW4sICpv dXQ7Ci0rCWNoYXIgYnVmWzIwNDhdLCBsYnVmWzIwNDhdOwotKwl1bnNpZ25lZCBjaGFyICpyaGFz aDsKLSsJbG9uZyByaGFzaGxlbjsKLSsJREggKmRoID0gTlVMTDsKLSsJY29uc3QgRVZQX01EICpt ZCA9IE5VTEw7Ci0rCUJJR05VTSAqcGVlcmtleSA9IE5VTEw7Ci0rCWNoYXIgKmtleXdvcmQgPSBO VUxMLCAqdmFsdWUgPSBOVUxMOwotKwlpbnQgZG9fdmVyaWZ5ID0gLTEsIGV4b3V0ID0gMDsKLSsK LSsJZmlwc19hbGd0ZXN0X2luaXQoKTsKLSsKLSsJaWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywg ImRodmVyIikpCi0rCQl7Ci0rCQlkb192ZXJpZnkgPSAxOwotKwkJYXJncysrOwotKwkJYXJnbi0t OwotKwkJfQotKwllbHNlIGlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJkaGdlbiIpKQotKwkJ ewotKwkJZG9fdmVyaWZ5ID0gMDsKLSsJCWFyZ3MrKzsKLSsJCWFyZ24tLTsKLSsJCX0KLSsKLSsJ aWYgKGFyZ24gJiYgIXN0cmNtcCgqYXJncywgIi1leG91dCIpKQotKwkJewotKwkJZXhvdXQgPSAx OwotKwkJYXJncysrOwotKwkJYXJnbi0tOwotKwkJfQotKwotKwlpZiAoZG9fdmVyaWZ5ID09IC0x KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRdIChp bmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwlpZiAo YXJnbiA9PSAyKQotKwkJewotKwkJaW4gPSBmb3BlbigqYXJncywgInIiKTsKLSsJCWlmICghaW4p Ci0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBpbnB1dCBmaWxlXG4i KTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3NbMV0sICJ3Iik7Ci0r CQlpZiAoIW91dCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91 dHB1dCBmaWxlXG4iKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJZWxzZSBpZiAoYXJn biA9PSAwKQotKwkJewotKwkJaW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91dDsKLSsJCX0KLSsJ ZWxzZQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsIiVzIFtkaHZlcnxkaGdlbnxdIFstZXhvdXRd IChpbmZpbGUgb3V0ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwlk aCA9IEZJUFNfZGhfbmV3KCk7Ci0rCi0rCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBp bikgIT0gTlVMTCkKLSsJCXsKLSsJCWZwdXRzKGJ1Ziwgb3V0KTsKLSsJCWlmIChzdHJsZW4oYnVm KSA+IDYgJiYgIXN0cm5jbXAoYnVmLCAiW0YiLCAyKSkKLSsJCQl7Ci0rCQkJbWQgPSBwYXJzZV9t ZChidWYpOwotKwkJCWlmIChtZCA9PSBOVUxMKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CWlmIChkaCkKLSsJCQkJRklQU19kaF9mcmVlKGRoKTsKLSsJCQlkaCA9IEZJUFNfZGhfbmV3KCk7 Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFs dWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAi UCIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZGgtPnAsIHZhbHVlKSkKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJRIikp Ci0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZkaC0+cSwgdmFsdWUpKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkciKSkKLSsJ CQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5nLCB2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWGVwaGVtSVVUIikp Ci0rCQkJewotKwkJCWlmICghZG9faGV4MmJuKCZkaC0+cHJpdl9rZXksIHZhbHVlKSkKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJZ ZXBoZW1JVVQiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmRoLT5wdWJfa2V5LCB2YWx1 ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiWWVwaGVtQ0FWUyIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmcGVlcmtl eSwgdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChkb192ZXJpZnkgPT0g MCkKLSsJCQkJb3V0cHV0X1poYXNoKG91dCwgZXhvdXQsIGRoLCBwZWVya2V5LCBtZCwKLSsJCQkJ CQkJTlVMTCwgMCk7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ0FWU0hh c2haWiIpKQotKwkJCXsKLSsJCQlpZiAoIW1kKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJ CXJoYXNoID0gaGV4MmJpbl9tKHZhbHVlLCAmcmhhc2hsZW4pOwotKwkJCWlmICghcmhhc2ggfHwg cmhhc2hsZW4gIT0gTV9FVlBfTURfc2l6ZShtZCkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJb3V0cHV0X1poYXNoKG91dCwgZXhvdXQsIGRoLCBwZWVya2V5LCBtZCwKLSsJCQkJCQkJcmhh c2gsIHJoYXNobGVuKTsKLSsJCQl9Ci0rCQl9Ci0rCWlmIChpbiAmJiBpbiAhPSBzdGRpbikKLSsJ CWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgb3V0ICE9IHN0ZG91dCkKLSsJCWZjbG9zZShvdXQp OwotKwlyZXR1cm4gMDsKLSsJcGFyc2VfZXJyb3I6Ci0rCWZwcmludGYoc3RkZXJyLCAiRXJyb3Ig UGFyc2luZyByZXF1ZXN0IGZpbGVcbiIpOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rI2VuZGlmCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19kcmJndnMu Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5j Ci0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3ZzLmMu ZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MDI5NDg2MiArMDEwMAotKysrIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jCTIwMTItMDItMjkgMTA6MzM6 MDIuNzkwMjk0ODYyICswMTAwCi1AQCAtMCwwICsxLDQxNiBAQAotKy8qIGZpcHMvcmFuZC9maXBz X2RyYmd2cy5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBv cGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5z aW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQ SQotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgRFJCRyBzdXBwb3J0XG4iKTsKLSsgICAg cmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IGRwYXJz ZV9tZChjaGFyICpzdHIpCi0rCXsKLSsJc3dpdGNoKGF0b2koc3RyICsgNSkpCi0rCQl7Ci0rCQlj YXNlIDE6Ci0rCQlyZXR1cm4gTklEX3NoYTE7Ci0rCi0rCQljYXNlIDIyNDoKLSsJCXJldHVybiBO SURfc2hhMjI0OwotKwotKwkJY2FzZSAyNTY6Ci0rCQlyZXR1cm4gTklEX3NoYTI1NjsKLSsKLSsJ CWNhc2UgMzg0OgotKwkJcmV0dXJuIE5JRF9zaGEzODQ7Ci0rCi0rCQljYXNlIDUxMjoKLSsJCXJl dHVybiBOSURfc2hhNTEyOwotKwotKwkJfQotKwotKwlyZXR1cm4gTklEX3VuZGVmOwotKwl9Ci0r Ci0rc3RhdGljIGludCBwYXJzZV9lYyhjaGFyICpzdHIpCi0rCXsKLSsJaW50IGN1cnZlX25pZCwg bWRfbmlkOwotKwljaGFyICptZDsKLSsJbWQgPSBzdHJjaHIoc3RyLCAnICcpOwotKwlpZiAoIW1k KQotKwkJcmV0dXJuIE5JRF91bmRlZjsKLSsJaWYgKCFzdHJuY21wKHN0ciwgIltQLTI1NiIsIDYp KQotKwkJY3VydmVfbmlkID0gTklEX1g5XzYyX3ByaW1lMjU2djE7Ci0rCWVsc2UgaWYgKCFzdHJu Y21wKHN0ciwgIltQLTM4NCIsIDYpKQotKwkJY3VydmVfbmlkID0gTklEX3NlY3AzODRyMTsKLSsJ ZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiW1AtNTIxIiwgNikpCi0rCQljdXJ2ZV9uaWQgPSBOSURf c2VjcDUyMXIxOwotKwllbHNlCi0rCQlyZXR1cm4gTklEX3VuZGVmOwotKwltZF9uaWQgPSBkcGFy c2VfbWQobWQpOwotKwlpZiAobWRfbmlkID09IE5JRF91bmRlZikKLSsJCXJldHVybiBOSURfdW5k ZWY7Ci0rCXJldHVybiAoY3VydmVfbmlkIDw8IDE2KSB8IG1kX25pZDsKLSsJfQotKwotK3N0YXRp YyBpbnQgcGFyc2VfYWVzKGNoYXIgKnN0ciwgaW50ICpwZGYpCi0rCXsKLSsKLSsJaWYgKCFzdHJu Y21wKHN0ciArIDksICJubyIsIDIpKQotKwkJKnBkZiA9IDA7Ci0rCWVsc2UKLSsJCSpwZGYgPSBE UkJHX0ZMQUdfQ1RSX1VTRV9ERjsKLSsKLSsJc3dpdGNoKGF0b2koc3RyICsgNSkpCi0rCQl7Ci0r CQljYXNlIDEyODoKLSsJCXJldHVybiBOSURfYWVzXzEyOF9jdHI7Ci0rCi0rCQljYXNlIDE5MjoK LSsJCXJldHVybiBOSURfYWVzXzE5Ml9jdHI7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCXJldHVybiBO SURfYWVzXzI1Nl9jdHI7Ci0rCi0rCQlkZWZhdWx0OgotKwkJcmV0dXJuIE5JRF91bmRlZjsKLSsK LSsJCX0KLSsJfQotKwotK3R5cGVkZWYgc3RydWN0IAotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKmVu dDsKLSsJc2l6ZV90IGVudGxlbjsKLSsJdW5zaWduZWQgY2hhciAqbm9uY2U7Ci0rCXNpemVfdCBu b25jZWxlbjsKLSsJfSBURVNUX0VOVDsKLSsKLStzdGF0aWMgc2l6ZV90IHRlc3RfZW50cm9weShE UkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVu KQotKwl7Ci0rCVRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJ KnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPmVudDsKLSsJcmV0dXJuIHQtPmVudGxlbjsKLSsJ fQotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQg Y2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9w eSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5UICp0ID0g RklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQgY2hhciAq KXQtPm5vbmNlOwotKwlyZXR1cm4gdC0+bm9uY2VsZW47Ci0rCX0KLSsKLSsjaWZkZWYgRklQU19B TEdWUwotK2ludCBmaXBzX2RyYmd2c19tYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyNlbHNl Ci0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rI2VuZGlmCi0rCXsKLSsJRklMRSAq aW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsJRFJCR19DVFggKmRjdHggPSBOVUxMOwotKwlURVNU X0VOVCB0OwotKwlpbnQgciwgbmlkID0gMDsKLSsJaW50IHByID0gMDsKLSsJY2hhciBidWZbMjA0 OF0sIGxidWZbMjA0OF07Ci0rCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsyMDQ4XTsKLSsJY2hhciAq a2V5d29yZCA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7Ci0rCi0rCXVuc2lnbmVkIGNoYXIgKmVudCA9 IE5VTEwsICpub25jZSA9IE5VTEwsICpwZXJzID0gTlVMTCwgKmFkaW4gPSBOVUxMOwotKwlsb25n IGVudGxlbiwgbm9uY2VsZW4sIHBlcnNsZW4sIGFkaW5sZW47Ci0rCWludCBkZiA9IDA7Ci0rCi0r CWVudW0gZHR5cGUgeyBEUkJHX05PTkUsIERSQkdfQ1RSLCBEUkJHX0hBU0gsIERSQkdfSE1BQywg RFJCR19EVUFMX0VDIH0KLSsJCWRyYmdfdHlwZSA9IERSQkdfTk9ORTsKLSsKLSsJaW50IHJhbmRv dXRsZW4gPSAwOwotKwotKwlpbnQgZ2VuID0gMDsKLSsKLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsK LSsKLSsJaWYgKGFyZ2MgPT0gMykKLSsJCXsKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsK LSsJCWlmICghaW4pCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBp bnB1dCBmaWxlXG4iKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCW91dCA9IGZvcGVuKGFyZ3Zb Ml0sICJ3Iik7Ci0rCQlpZiAoIW91dCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIsICJFcnJv ciBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCX0KLSsJ ZWxzZSBpZiAoYXJnYyA9PSAxKQotKwkJewotKwkJaW4gPSBzdGRpbjsKLSsJCW91dCA9IHN0ZG91 dDsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsIiVzIChpbmZpbGUgb3V0 ZmlsZSlcbiIsYXJndlswXSk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwotKwl3aGlsZSAoZmdldHMo YnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsIG91dCk7 Ci0rCQlpZiAoZHJiZ190eXBlID09IERSQkdfTk9ORSkKLSsJCQl7Ci0rCQkJaWYgKHN0cnN0cihi dWYsICJDVFJfRFJCRyIpKQotKwkJCQlkcmJnX3R5cGUgPSBEUkJHX0NUUjsKLSsJCQllbHNlIGlm IChzdHJzdHIoYnVmLCAiSGFzaF9EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9IERSQkdfSEFTSDsK LSsJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiSE1BQ19EUkJHIikpCi0rCQkJCWRyYmdfdHlwZSA9 IERSQkdfSE1BQzsKLSsJCQllbHNlIGlmIChzdHJzdHIoYnVmLCAiRHVhbF9FQ19EUkJHIikpCi0r CQkJCWRyYmdfdHlwZSA9IERSQkdfRFVBTF9FQzsKLSsJCQllbHNlCi0rCQkJCWNvbnRpbnVlOwot KwkJCX0KLSsJCWlmIChzdHJsZW4oYnVmKSA+IDQgJiYgIXN0cm5jbXAoYnVmLCAiW1NIQS0iLCA1 KSkKLSsJCQl7Ci0rCQkJbmlkID0gZHBhcnNlX21kKGJ1Zik7Ci0rCQkJaWYgKG5pZCA9PSBOSURf dW5kZWYpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJaWYgKGRyYmdfdHlwZSA9PSBEUkJHX0hNQUMpCi0r CQkJCXsKLSsJCQkJc3dpdGNoIChuaWQpCi0rCQkJCQl7Ci0rCQkJCQljYXNlIE5JRF9zaGExOgot KwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMTsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2Fz ZSBOSURfc2hhMjI0OgotKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMjI0OwotKwkJCQkJYnJl YWs7Ci0rCi0rCQkJCQljYXNlIE5JRF9zaGEyNTY6Ci0rCQkJCQluaWQgPSBOSURfaG1hY1dpdGhT SEEyNTY7Ci0rCQkJCQlicmVhazsKLSsKLSsJCQkJCWNhc2UgTklEX3NoYTM4NDoKLSsJCQkJCW5p ZCA9IE5JRF9obWFjV2l0aFNIQTM4NDsKLSsJCQkJCWJyZWFrOwotKwotKwkJCQkJY2FzZSBOSURf c2hhNTEyOgotKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBNTEyOwotKwkJCQkJYnJlYWs7Ci0r Ci0rCQkJCQlkZWZhdWx0OgotKwkJCQkJZXhpdCgxKTsKLSsJCQkJCX0KLSsJCQkJfQotKwkJCX0K LSsJCWlmIChzdHJsZW4oYnVmKSA+IDEyICYmICFzdHJuY21wKGJ1ZiwgIltBRVMtIiwgNSkpCi0r CQkJewotKwkJCW5pZCA9IHBhcnNlX2FlcyhidWYsICZkZik7Ci0rCQkJaWYgKG5pZCA9PSBOSURf dW5kZWYpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJaWYgKHN0cmxlbihidWYpID4gMTIgJiYg IXN0cm5jbXAoYnVmLCAiW1AtIiwgMykpCi0rCQkJewotKwkJCW5pZCA9IHBhcnNlX2VjKGJ1Zik7 Ci0rCQkJaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJfQotKwkJaWYg KCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQkJY29udGludWU7 Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1ByZWRpY3Rpb25SZXNpc3RhbmNlIikpCi0r CQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiVHJ1ZV0iKSkKLSsJCQkJcHIgPSAxOwotKwkJ CWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJGYWxzZV0iKSkKLSsJCQkJcHIgPSAwOwotKwkJCWVs c2UKLSsJCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50 cm9weUlucHV0IikpCi0rCQkJewotKwkJCWVudCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7 Ci0rCQkJdC5lbnQgPSBlbnQ7Ci0rCQkJdC5lbnRsZW4gPSBlbnRsZW47Ci0rCQkJfQotKwotKwkJ aWYgKCFzdHJjbXAoa2V5d29yZCwgIk5vbmNlIikpCi0rCQkJewotKwkJCW5vbmNlID0gaGV4MmJp bl9tKHZhbHVlLCAmbm9uY2VsZW4pOwotKwkJCXQubm9uY2UgPSBub25jZTsKLSsJCQl0Lm5vbmNl bGVuID0gbm9uY2VsZW47Ci0rCQkJfQotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlBlcnNv bmFsaXphdGlvblN0cmluZyIpKQotKwkJCXsKLSsJCQlwZXJzID0gaGV4MmJpbl9tKHZhbHVlLCAm cGVyc2xlbik7Ci0rCQkJaWYgKG5pZCA9PSAwKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJy LCAiRFJCRyB0eXBlIG5vdCByZWNvZ25pc2VkIVxuIik7Ci0rCQkJCWV4aXQgKDEpOwotKwkJCQl9 Ci0rCQkJZGN0eCA9IEZJUFNfZHJiZ19uZXcobmlkLCBkZiB8IERSQkdfRkxBR19URVNUKTsKLSsJ CQlpZiAoIWRjdHgpCi0rCQkJCWV4aXQgKDEpOwotKwkJCUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tz KGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwKLSsJCQkJCQkJdGVzdF9ub25jZSwgMCk7Ci0rCQkJ RklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7Ci0rCQkJcmFuZG91dGxlbiA9IChpbnQp RklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChkY3R4KTsKLSsJCQlyID0gRklQU19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHBlcnMsIHBlcnNsZW4pOwotKwkJCWlmICghcikKLSsJCQkJewotKwkJCQlm cHJpbnRmKHN0ZGVyciwgIkVycm9yIGluc3RhbnRpYXRpbmcgRFJCR1xuIik7Ci0rCQkJCWV4aXQo MSk7Ci0rCQkJCX0KLSsJCQlPUEVOU1NMX2ZyZWUocGVycyk7Ci0rCQkJT1BFTlNTTF9mcmVlKGVu dCk7Ci0rCQkJT1BFTlNTTF9mcmVlKG5vbmNlKTsKLSsJCQllbnQgPSBub25jZSA9IHBlcnMgPSBO VUxMOwotKwkJCWdlbiA9IDA7Ci0rCQkJfQotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFk ZGl0aW9uYWxJbnB1dCIpKQotKwkJCXsKLSsJCQlhZGluID0gaGV4MmJpbl9tKHZhbHVlLCAmYWRp bmxlbik7Ci0rCQkJaWYgKHByKQotKwkJCQljb250aW51ZTsKLSsJCQlyID0gRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIHJhbmRvdXQsIHJhbmRvdXRsZW4sIDAsCi0rCQkJCQkJCQlhZGluLCBhZGlu bGVuKTsKLSsJCQlpZiAoIXIpCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBn ZW5lcmF0aW5nIERSQkcgYml0c1xuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQlpZiAo IXIpCi0rCQkJCWV4aXQoMSk7Ci0rCQkJT1BFTlNTTF9mcmVlKGFkaW4pOwotKwkJCWFkaW4gPSBO VUxMOwotKwkJCWdlbisrOwotKwkJCX0KLSsKLSsJCWlmIChwcikKLSsJCQl7Ci0rCQkJaWYgKCFz dHJjbXAoa2V5d29yZCwgIkVudHJvcHlJbnB1dFBSIikpCi0rCQkJCXsKLSsJCQkJZW50ID0gaGV4 MmJpbl9tKHZhbHVlLCAmZW50bGVuKTsKLSsJCQkJdC5lbnQgPSBlbnQ7Ci0rCQkJCXQuZW50bGVu ID0gZW50bGVuOwotKwkJCQlyID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsCi0rCQkJCQkJCXJh bmRvdXQsIHJhbmRvdXRsZW4sCi0rCQkJCQkJCTEsIGFkaW4sIGFkaW5sZW4pOwotKwkJCQlpZiAo IXIpCi0rCQkJCQl7Ci0rCQkJCQlmcHJpbnRmKHN0ZGVyciwKLSsJCQkJCQkiRXJyb3IgZ2VuZXJh dGluZyBEUkJHIGJpdHNcbiIpOwotKwkJCQkJZXhpdCgxKTsKLSsJCQkJCX0KLSsJCQkJT1BFTlNT TF9mcmVlKGFkaW4pOwotKwkJCQlPUEVOU1NMX2ZyZWUoZW50KTsKLSsJCQkJYWRpbiA9IGVudCA9 IE5VTEw7Ci0rCQkJCWdlbisrOwotKwkJCQl9Ci0rCQkJfQotKwkJaWYgKCFzdHJjbXAoa2V5d29y ZCwgIkVudHJvcHlJbnB1dFJlc2VlZCIpKQotKwkJCXsKLSsJCQllbnQgPSBoZXgyYmluX20odmFs dWUsICZlbnRsZW4pOwotKwkJCXQuZW50ID0gZW50OwotKwkJCXQuZW50bGVuID0gZW50bGVuOwot KwkJCX0KLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJBZGRpdGlvbmFsSW5wdXRSZXNlZWQiKSkK LSsJCQl7Ci0rCQkJYWRpbiA9IGhleDJiaW5fbSh2YWx1ZSwgJmFkaW5sZW4pOwotKwkJCUZJUFNf ZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbik7Ci0rCQkJT1BFTlNTTF9mcmVlKGVudCk7 Ci0rCQkJT1BFTlNTTF9mcmVlKGFkaW4pOwotKwkJCWVudCA9IGFkaW4gPSBOVUxMOwotKwkJCX0K LSsJCWlmIChnZW4gPT0gMikKLSsJCQl7Ci0rCQkJT3V0cHV0VmFsdWUoIlJldHVybmVkQml0cyIs IHJhbmRvdXQsIHJhbmRvdXRsZW4sCi0rCQkJCQkJCQkJb3V0LCAwKTsKLSsJCQlGSVBTX2RyYmdf ZnJlZShkY3R4KTsKLSsJCQlkY3R4ID0gTlVMTDsKLSsJCQlnZW4gPSAwOwotKwkJCX0KLSsKLSsJ CX0KLSsJaWYgKGluICYmIGluICE9IHN0ZGluKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAm JiBvdXQgIT0gc3Rkb3V0KQotKwkJZmNsb3NlKG91dCk7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0r I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlw c19kc3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf ZHNzdnMuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rz c3ZzLmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MTI5NDg3MSArMDEwMAotKysrIG9wZW5z c2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxMi0wMi0yOSAx MDozMzowMi43OTEyOTQ4NzEgKzAxMDAKLUBAIC0wLDAgKzEsNTM3IEBACi0rI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxzdGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAg IHByaW50ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0r I2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rz YS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIHZv aWQgcGJuKGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsK LSsJdW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwl0bXAg PSBPUEVOU1NMX21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwlC Tl9ibjJiaW4oYm4sIHRtcCk7Ci0rCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKLSsJZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQotKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKLSsJZnB1dHMoIlxu Iiwgc3Rkb3V0KTsKLSsJT1BFTlNTTF9mcmVlKHRtcCk7Ci0rCXJldHVybjsKLSsJfQotKwotK3Zv aWQgcHJpbWVzKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0MF07Ci0rICAgIGNoYXIgbGJ1 ZlsxMDI0MF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsKLSsgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJ Y29udGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKLSsJICAgIHsKLSsJICAg IEJJR05VTSAqcHA7Ci0rCi0rCSAgICBwcD1CTl9uZXcoKTsKLSsJICAgIGRvX2hleDJibigmcHAs dmFsdWUpOwotKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAotKwkJICAgQk5faXNfcHJpbWVf ZXgocHAsMjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7Ci0rCSAgICB9CSAgICAKLSsJfQotKyAg ICB9Ci0rCi0rdm9pZCBwcWcoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBj aGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5t b2Q9MDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwp Ci0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0r CQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3Ry Y21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJOIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsK LSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwotKwkgICAgd2hpbGUo bi0tKQotKwkJewotKwkJdW5zaWduZWQgY2hhciBzZWVkWzIwXTsKLSsJCURTQSAqZHNhOwotKwkJ aW50IGNvdW50ZXI7Ci0rCQl1bnNpZ25lZCBsb25nIGg7Ci0rCQlkc2EgPSBGSVBTX2RzYV9uZXco KTsKLSsKLSsJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQs MCwmY291bnRlciwmaCxOVUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJ ZXhpdCgxKTsKLSsJCQl9Ci0rCQlwYm4oIlAiLGRzYS0+cCk7Ci0rCQlwYm4oIlEiLGRzYS0+cSk7 Ci0rCQlwYm4oIkciLGRzYS0+Zyk7Ci0rCQlwdigiU2VlZCIsc2VlZCwyMCk7Ci0rCQlwcmludGYo ImMgPSAlZFxuIixjb3VudGVyKTsKLSsJCXByaW50ZigiSCA9ICVseFxuIixoKTsKLSsJCXB1dGMo J1xuJyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwllbHNlCi0rCSAgICBmcHV0cyhidWYsc3Rk b3V0KTsKLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBwcWd2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIg YnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7Ci0rICAg IGludCBjb3VudGVyLCBjb3VudGVyMjsKLSsgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKLSsgICAg RFNBICpkc2E9TlVMTDsKLSsgICAgaW50IG5tb2Q9MDsKLSsgICAgdW5zaWduZWQgY2hhciBzZWVk WzEwMjRdOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK LSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWZwdXRz KGJ1Ziwgc3Rkb3V0KTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9k PWF0b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgcD1o ZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgcT1o ZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAgZz1o ZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQotKwkgICAg ewotKwkgICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKLSsJICAgIGlmIChzbGVu ICE9IDIwKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJv clxuIik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsImMiKSkKLSsJICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOwotKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiSCIpKQotKwkgICAgewotKwkgICAgaCA9IGF0b2kodmFsdWUpOwotKwkgICAg aWYgKCFwIHx8ICFxIHx8ICFnKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJv clxuIik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwot KwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAs JmNvdW50ZXIyLCZoMixOVUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJ ZXhpdCgxKTsKLSsJCQl9Ci0rICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJO X2NtcChkc2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcpCi0rCQl8fCAoY291bnRlciAhPSBj b3VudGVyMikgfHwgKGggIT0gaDIpKQotKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0r CSAgICBlbHNlCi0rCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJICAgIEJOX2ZyZWUo cCk7Ci0rCSAgICBCTl9mcmVlKHEpOwotKwkgICAgQk5fZnJlZShnKTsKLSsJICAgIHAgPSBOVUxM OwotKwkgICAgcSA9IE5VTEw7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIEZJUFNfZHNhX2ZyZWUo ZHNhKTsKLSsJICAgIGRzYSA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotKy8qIEtl eXBhaXIgdmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0 YW5kYXJkIEZJUFMxNDAtMgotKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25h bCB0ZXN0IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKLSsgKiBvdXRwdXQgb2YgdGhl IEtleVBhaXIgdGVzdC4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBu bW9kLCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpnLAotKwkJCQkJCQlCTl9DVFggKmN0 eCkKLSsgICAgewotKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7Ci0rICAgIGlmIChCTl9udW1fYml0 cyhwKSAhPSBubW9kKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2 MCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVj a3MsIGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9l eChxLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAg IHJlbSA9IEJOX25ldygpOwotKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJO X2lzX29uZShyZW0pCi0rICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQot Kwl8fCAhQk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQot Kwl7Ci0rCUJOX2ZyZWUocmVtKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsgICAgLyogVG9kbzogY2hl Y2sgZyAqLwotKyAgICBCTl9mcmVlKHJlbSk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0r dm9pZCBrZXl2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxi dWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgQklHTlVNICpwID0g TlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOwotKyAgICBC SUdOVU0gKlkyOwotKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0rICAgIGludCBubW9kPTAsIHBh cmFtY2hlY2sgPSAwOwotKwotKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7Ci0rICAgIFkyID0gQk5f bmV3KCk7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxM KQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQot KwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0 cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBpZiAocCkKLSsJCUJOX2ZyZWUo cCk7Ci0rCSAgICBwID0gTlVMTDsKLSsJICAgIGlmIChxKQotKwkJQk5fZnJlZShxKTsKLSsJICAg IHEgPSBOVUxMOwotKwkgICAgaWYgKGcpCi0rCQlCTl9mcmVlKGcpOwotKwkgICAgZyA9IE5VTEw7 Ci0rCSAgICBwYXJhbWNoZWNrID0gMDsKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICB9 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCi0rCSAgICBYPWhleDJibih2YWx1ZSk7 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICB7Ci0rCSAgICBZPWhleDJi bih2YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQot KwkgICAgcGJuKCJQIixwKTsKLSsJICAgIHBibigiUSIscSk7Ci0rCSAgICBwYm4oIkciLGcpOwot KwkgICAgcGJuKCJYIixYKTsKLSsJICAgIHBibigiWSIsWSk7Ci0rCSAgICBpZiAoIXBhcmFtY2hl Y2spCi0rCQl7Ci0rCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKLSsJ CQlwYXJhbWNoZWNrID0gMTsKLSsJCWVsc2UKLSsJCQlwYXJhbWNoZWNrID0gLTE7Ci0rCQl9Ci0r CSAgICBpZiAocGFyYW1jaGVjayAhPSAxKQotKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsK LSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8 fCBCTl9jbXAoWTIsIFkpKQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAg ICAgIGVsc2UKLSsJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJCX0KLSsJICAgIEJO X2ZyZWUoWCk7Ci0rCSAgICBCTl9mcmVlKFkpOwotKwkgICAgWCA9IE5VTEw7Ci0rCSAgICBZID0g TlVMTDsKLSsJICAgIH0KLSsJfQotKwlpZiAocCkKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCWlmIChx KQotKwkgICAgQk5fZnJlZShxKTsKLSsJaWYgKGcpCi0rCSAgICBCTl9mcmVlKGcpOwotKwlpZiAo WTIpCi0rCSAgICBCTl9mcmVlKFkyKTsKLSsgICAgfQotKwotK3ZvaWQga2V5cGFpcigpCi0rICAg IHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hh ciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0 cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQp OwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkg ICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJ ICAgIHsKLSsJICAgIERTQSAqZHNhOwotKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7Ci0rCi0rCSAg ICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25l dygpOwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVM TCwwLE5VTEwsTlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhp dCgxKTsKLSsJCX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5x KTsKLSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwot KwkgICAgd2hpbGUobi0tKQotKwkJewotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0r CQkJewotKwkJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwotKwkJ cGJuKCJYIixkc2EtPnByaXZfa2V5KTsKLSsJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJCXB1 dGMoJ1xuJyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHNp Z2dlbigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICBE U0EgKmRzYT1OVUxMOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1Ziwg YnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0r CWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZh bHVlKTsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgaWYgKGRz YSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwot KwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5V TEwsTlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsK LSsJCX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJ ICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgfQot KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25l ZCBjaGFyIG1zZ1sxMDI0XTsKLSsJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07Ci0rCSAgICB1 bnNpZ25lZCBpbnQgc2xlbjsKLSsJICAgIGludCBuOwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAg ICBFVlBfTURfQ1RYIG1jdHg7Ci0rCSAgICBEU0FfU0lHICpzaWc7Ci0rCSAgICBFVlBfTURfQ1RY X2luaXQoJm1jdHgpOwotKwotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigi TXNnIixtc2csbik7Ci0rCi0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCXsK LSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBrLnR5cGUg PSBFVlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHBibigiWSIs ZHNhLT5wdWJfa2V5KTsKLSsKLSsJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEo KSwgTlVMTCk7Ci0rCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKLSsJICAgIEVW UF9TaWduRmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGspOwotKwotKwkgICAgc2lnID0gRFNB X1NJR19uZXcoKTsKLSsJICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsK LSsKLSsJICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsJICAg IHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7Ci0rCSAgICBFVlBf TURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwkgICAgfQotKwl9Ci0rCWlmIChkc2EpCi0rCQlGSVBT X2RzYV9mcmVlKGRzYSk7Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ3ZlcigpCi0rICAgIHsKLSsgICAg RFNBICpkc2E9TlVMTDsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKLSsgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKLSsgICAgaW50IG5tb2Q9MCwgbj0wOwotKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNn OwotKwotKyAgICBzaWctPnIgPSBOVUxMOwotKyAgICBzaWctPnMgPSBOVUxMOwotKwotKyAgICB3 aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBh cnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1 ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21v ZCIpKQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIGlmKGRzYSkKLSsJ CUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKLSsJICAgIH0K LSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJICAgIGRzYS0+cD1oZXgyYm4odmFs dWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgZHNhLT5xPWhleDJi bih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICB7Ci0rCSAg ICBkc2EtPmc9aGV4MmJuKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4i LG5tb2QpOwotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwot KwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIG49aGV4 MmJpbih2YWx1ZSxtc2cpOwotKwkgICAgcHYoIk1zZyIsbXNnLG4pOwotKwkgICAgfQotKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQotKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1 ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikpCi0rCSAgICBzaWctPnI9aGV4MmJu KHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKLSsJICAgIHsKLSsJICAg IEVWUF9NRF9DVFggbWN0eDsKLSsJICAgIEVWUF9QS0VZIHBrOwotKwkgICAgdW5zaWduZWQgY2hh ciBzaWdidWZbNjBdOwotKwkgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgcjsKLSsJ ICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNB OwotKwkgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsK LSsJCi0rCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7Ci0rCSAgICBwYm4oIlIiLHNpZy0+cik7 Ci0rCSAgICBwYm4oIlMiLHNpZy0+cyk7Ci0rCi0rCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2Vu Y29kZShzaWdidWYsIHNpZyk7Ci0rCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2Rz czEoKSwgTlVMTCk7Ci0rCSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkg ICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOwotKwkgICAg RVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJCi0rCSAgICBwcmludGYoIlJlc3VsdCA9ICVj XG4iLCByID09IDEgPyAnUCcgOiAnRicpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAg ICB9Ci0rCX0KLSsgICAgfQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAg ICB7Ci0rICAgIGlmKGFyZ2MgIT0gMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1l fHBxZ3xwcWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKLSsJZXhpdCgx KTsKLSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJv cnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikp Ci0rCXByaW1lcygpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCi0rCXBx ZygpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCi0rCXBxZ3Zlcigp OwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQotKwlrZXlwYWlyKCk7 Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKLSsJa2V5dmVyKCk7Ci0r ICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKLSsJc2lnZ2VuKCk7Ci0rICAg IGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkKLSsJc2lndmVyKCk7Ci0rICAgIGVs c2UKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3Zb MV0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2Vu ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19n Y210ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19n Y210ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19n Y210ZXN0LmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MTI5NDg3MSArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYwkyMDEyLTAy LTI5IDEwOjMzOjAyLjc5MTI5NDg3MSArMDEwMAotQEAgLTAsMCArMSw1NzEgQEAKLSsvKiBmaXBz L2Flcy9maXBzX2djbXRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICov Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rCi0rI2RlZmluZSBPUEVO U1NMX0ZJUFNBUEkKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5k ZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIEdDTSBzdXBwb3J0XG4i KTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAi Zmlwc191dGwuaCIKLSsKLStzdGF0aWMgdm9pZCBnY210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQs IGludCBlbmNyeXB0KQotKwl7Ci0rCWNoYXIgYnVmWzIwNDhdOwotKwljaGFyIGxidWZbMjA0OF07 Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJaW50IGtleWxlbiA9IC0xLCBpdmxlbiA9IC0x LCBhYWRsZW4gPSAtMSwgdGFnbGVuID0gLTEsIHB0bGVuID0gLTE7Ci0rCWludCBydjsKLSsJbG9u ZyBsOwotKwl1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMLCAqaXYgPSBOVUxMLCAqYWFkID0gTlVM TCwgKnRhZyA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKmN0ID0gTlVMTCwgKnB0ID0gTlVMTDsK LSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwljb25zdCBFVlBfQ0lQSEVSICpnY20gPSBOVUxMOwot KwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsKLSsKLSsJd2hpbGUoZmdldHMoYnVmLHNpemVv ZiBidWYsaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsb3V0KTsKLSsJCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJCWNvbnRpbnVlOwotKwkJ aWYoIXN0cmNtcChrZXl3b3JkLCJbS2V5bGVuIikpCi0rCQkJewotKwkJCWtleWxlbiA9IGF0b2ko dmFsdWUpOwotKwkJCWlmIChrZXlsZW4gPT0gMTI4KQotKwkJCQlnY20gPSBFVlBfYWVzXzEyOF9n Y20oKTsKLSsJCQllbHNlIGlmIChrZXlsZW4gPT0gMTkyKQotKwkJCQlnY20gPSBFVlBfYWVzXzE5 Ml9nY20oKTsKLSsJCQllbHNlIGlmIChrZXlsZW4gPT0gMjU2KQotKwkJCQlnY20gPSBFVlBfYWVz XzI1Nl9nY20oKTsKLSsJCQllbHNlIAotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiVW5z dXBwb3J0ZWQga2V5bGVuICVkXG4iLAotKwkJCQkJCQlrZXlsZW4pOwotKwkJCQl9Ci0rCQkJa2V5 bGVuID4+PSAzOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIltJVmxlbiIp KQotKwkJCWl2bGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIltBQURsZW4iKSkKLSsJCQlhYWRsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOwotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiW1RhZ2xlbiIpKQotKwkJCXRhZ2xlbiA9IGF0b2kodmFs dWUpID4+IDM7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbUFRsZW4iKSkKLSsJCQlw dGxlbiA9IGF0b2kodmFsdWUpID4+IDM7Ci0rCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiS2V5 IikpCi0rCQkJewotKwkJCWtleSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9 IGtleWxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBLZXkg bGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJJViIpKQotKwkJCXsKLSsJCQlpdiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwp OwotKwkJCWlmIChsICE9IGl2bGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5j b25zaXN0ZW50IElWIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9Ci0r CQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUFQiKSkKLSsJCQl7Ci0rCQkJcHQgPSBoZXgyYmlu X20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSBwdGxlbikKLSsJCQkJewotKwkJCQlmcHJpbnRm KHN0ZGVyciwgIkluY29uc2lzdGVudCBQVCBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJ CQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkNUIikpCi0rCQkJewotKwkJ CWN0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0gcHRsZW4pCi0rCQkJCXsK LSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgQ1QgbGVuZ3RoXG4iKTsKLSsJCQkJ ZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJBQUQi KSkKLSsJCQl7Ci0rCQkJYWFkID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJaWYgKGwgIT0g YWFkbGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEFBRCBs ZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIlRhZyIpKQotKwkJCXsKLSsJCQl0YWcgPSBoZXgyYmluX20odmFsdWUsICZs KTsKLSsJCQlpZiAobCAhPSB0YWdsZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJ bmNvbnNpc3RlbnQgVGFnIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0KLSsJCQl9 Ci0rCQlpZiAoZW5jcnlwdCAmJiBwdCAmJiBhYWQgJiYgKGl2IHx8IGVuY3J5cHQ9PTEpKQotKwkJ CXsKLSsJCQl0YWcgPSBPUEVOU1NMX21hbGxvYyh0YWdsZW4pOwotKwkJCUZJUFNfY2lwaGVyaW5p dCgmY3R4LCBnY20sIE5VTEwsIE5VTEwsIDEpOwotKwkJCS8qIFJlbGF4IEZJUFMgY29uc3RyYWlu dHMgZm9yIHRlc3RpbmcgKi8KLSsJCQlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4LCBF VlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgm Y3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLCBpdmxlbiwgMCk7Ci0rCQkJaWYgKGVuY3J5cHQg PT0gMSkKLSsJCQkJewotKwkJCQlzdGF0aWMgdW5zaWduZWQgY2hhciBpdl9maXhlZFs0XSA9IHsx LDIsMyw0fTsKLSsJCQkJaWYgKCFpdikKLSsJCQkJCWl2ID0gT1BFTlNTTF9tYWxsb2MoaXZsZW4p OwotKwkJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBOVUxMLCAxKTsKLSsJCQkJ RklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKLSsJCQkJCQlFVlBfQ1RSTF9HQ01fU0VUX0lWX0ZJ WEVELAotKwkJCQkJCTQsIGl2X2ZpeGVkKTsKLSsJCQkJaWYgKCFGSVBTX2NpcGhlcl9jdHhfY3Ry bCgmY3R4LAotKwkJCQkJRVZQX0NUUkxfR0NNX0lWX0dFTiwgMCwgaXYpKQotKwkJCQkJewotKwkJ CQkJZnByaW50ZihzdGRlcnIsICJJViBnZW4gZXJyb3JcbiIpOwotKwkJCQkJZXhpdCgxKTsKLSsJ CQkJCX0KLSsJCQkJT3V0cHV0VmFsdWUoIklWIiwgaXYsIGl2bGVuLCBvdXQsIDApOwotKwkJCQl9 Ci0rCQkJZWxzZQotKwkJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwga2V5LCBpdiwgMSk7 Ci0rCi0rCi0rCQkJaWYgKGFhZGxlbikKLSsJCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgYWFk LCBhYWRsZW4pOwotKwkJCWlmIChwdGxlbikKLSsJCQkJewotKwkJCQljdCA9IE9QRU5TU0xfbWFs bG9jKHB0bGVuKTsKLSsJCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBjdCwgcHQsIHB0bGVuKTsK LSsJCQkJfQotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApOwotKwkJCUZJUFNf Y2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLAotKwkJCQkJCQkJdGFn bGVuLCB0YWcpOwkKLSsJCQlPdXRwdXRWYWx1ZSgiQ1QiLCBjdCwgcHRsZW4sIG91dCwgMCk7Ci0r CQkJT3V0cHV0VmFsdWUoIlRhZyIsIHRhZywgdGFnbGVuLCBvdXQsIDApOwotKwkJCWlmIChpdikK LSsJCQkJT1BFTlNTTF9mcmVlKGl2KTsKLSsJCQlpZiAoYWFkKQotKwkJCQlPUEVOU1NMX2ZyZWUo YWFkKTsKLSsJCQlpZiAoY3QpCi0rCQkJCU9QRU5TU0xfZnJlZShjdCk7Ci0rCQkJaWYgKHB0KQot KwkJCQlPUEVOU1NMX2ZyZWUocHQpOwotKwkJCWlmIChrZXkpCi0rCQkJCU9QRU5TU0xfZnJlZShr ZXkpOwotKwkJCWlmICh0YWcpCi0rCQkJCU9QRU5TU0xfZnJlZSh0YWcpOwotKwkJCWl2ID0gYWFk ID0gY3QgPSBwdCA9IGtleSA9IHRhZyA9IE5VTEw7Ci0rCQkJfQkKLSsJCWlmICghZW5jcnlwdCAm JiB0YWcpCi0rCQkJewotKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBnY20sIE5VTEwsIE5VTEws IDApOwotKwkJCS8qIFJlbGF4IEZJUFMgY29uc3RyYWludHMgZm9yIHRlc3RpbmcgKi8KLSsJCQlN X0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FM TE9XKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lW TEVOLCBpdmxlbiwgMCk7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYs IDApOwotKwkJCUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFH LCB0YWdsZW4sIHRhZyk7Ci0rCQkJaWYgKGFhZGxlbikKLSsJCQkJRklQU19jaXBoZXIoJmN0eCwg TlVMTCwgYWFkLCBhYWRsZW4pOwotKwkJCWlmIChwdGxlbikKLSsJCQkJewotKwkJCQlwdCA9IE9Q RU5TU0xfbWFsbG9jKHB0bGVuKTsKLSsJCQkJcnYgPSBGSVBTX2NpcGhlcigmY3R4LCBwdCwgY3Qs IHB0bGVuKTsKLSsJCQkJfQotKwkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwg MCk7Ci0rCQkJaWYgKHJ2IDwgMCkKLSsJCQkJZnByaW50ZihvdXQsICJGQUlMIiBSRVNQX0VPTCk7 Ci0rCQkJZWxzZQotKwkJCQlPdXRwdXRWYWx1ZSgiUFQiLCBwdCwgcHRsZW4sIG91dCwgMCk7Ci0r CQkJaWYgKGl2KQotKwkJCQlPUEVOU1NMX2ZyZWUoaXYpOwotKwkJCWlmIChhYWQpCi0rCQkJCU9Q RU5TU0xfZnJlZShhYWQpOwotKwkJCWlmIChjdCkKLSsJCQkJT1BFTlNTTF9mcmVlKGN0KTsKLSsJ CQlpZiAocHQpCi0rCQkJCU9QRU5TU0xfZnJlZShwdCk7Ci0rCQkJaWYgKGtleSkKLSsJCQkJT1BF TlNTTF9mcmVlKGtleSk7Ci0rCQkJaWYgKHRhZykKLSsJCQkJT1BFTlNTTF9mcmVlKHRhZyk7Ci0r CQkJaXYgPSBhYWQgPSBjdCA9IHB0ID0ga2V5ID0gdGFnID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0r CUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwkKLSsJfQotKwotK3N0YXRpYyB2b2lkIHh0 c3Rlc3QoRklMRSAqaW4sIEZJTEUgKm91dCkKLSsJewotKwljaGFyIGJ1ZlsyMDQ4MDBdOwotKwlj aGFyIGxidWZbMjA0ODAwXTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlpbnQgaW5sZW4g PSAwOwotKwlpbnQgZW5jcnlwdCA9IDA7Ci0rCWxvbmcgbDsKLSsJdW5zaWduZWQgY2hhciAqa2V5 ID0gTlVMTCwgKml2ID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqaW5idWYgPSBOVUxMLCAqb3V0 YnVmID0gTlVMTDsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwljb25zdCBFVlBfQ0lQSEVSICp4 dHMgPSBOVUxMOwotKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsKLSsKLSsJd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQlmcHV0cyhidWYsb3V0KTsK LSsJCWlmIChidWZbMF0gPT0gJ1snICYmIHN0cmxlbihidWYpID49IDkpCi0rCQkJewotKwkJCWlm KCFzdHJuY21wKGJ1ZiwiW0VOQ1JZUFRdIiwgOSkpCi0rCQkJCWVuY3J5cHQgPSAxOwotKwkJCWVs c2UgaWYoIXN0cm5jbXAoYnVmLCJbREVDUllQVF0iLCA5KSkKLSsJCQkJZW5jcnlwdCA9IDA7Ci0r CQkJfQotKwkJaWYgICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQot KwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkJCXsK LSsJCQlrZXkgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCA9PSAzMikKLSsJCQkJ eHRzID0gRVZQX2Flc18xMjhfeHRzKCk7Ci0rCQkJZWxzZSBpZiAobCA9PSA2NCkKLSsJCQkJeHRz ID0gRVZQX2Flc18yNTZfeHRzKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3Rk ZXJyLCAiSW5jb25zaXN0ZW50IEtleSBsZW5ndGhcbiIpOwotKwkJCQlleGl0KDEpOwotKwkJCQl9 Ci0rCQkJfQotKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsImkiKSkKLSsJCQl7Ci0rCQkJaXYg PSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpZiAobCAhPSAxNikKLSsJCQkJewotKwkJCQlm cHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBpIGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7 Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmKGVuY3J5cHQgJiYgIXN0cmNtcChrZXl3b3JkLCJQ VCIpKQotKwkJCXsKLSsJCQlpbmJ1ZiA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlubGVu ID0gbDsKLSsJCQl9Ci0rCQllbHNlIGlmKCFlbmNyeXB0ICYmICFzdHJjbXAoa2V5d29yZCwiQ1Qi KSkKLSsJCQl7Ci0rCQkJaW5idWYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKLSsJCQlpbmxlbiA9 IGw7Ci0rCQkJfQotKwkJaWYgKGluYnVmKQotKwkJCXsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0 eCwgeHRzLCBrZXksIGl2LCBlbmNyeXB0KTsKLSsJCQlvdXRidWYgPSBPUEVOU1NMX21hbGxvYyhp bmxlbik7Ci0rCQkJRklQU19jaXBoZXIoJmN0eCwgb3V0YnVmLCBpbmJ1ZiwgaW5sZW4pOwotKwkJ CU91dHB1dFZhbHVlKGVuY3J5cHQgPyAiQ1QiOiJQVCIsIG91dGJ1ZiwgaW5sZW4sIG91dCwgMCk7 Ci0rCQkJT1BFTlNTTF9mcmVlKGluYnVmKTsKLSsJCQlPUEVOU1NMX2ZyZWUob3V0YnVmKTsKLSsJ CQlPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJCQlPUEVOU1NMX2ZyZWUoaXYpOwotKwkJCWl2ID0ga2V5 ID0gaW5idWYgPSBvdXRidWYgPSBOVUxMOwotKwkJCX0JCi0rCQl9Ci0rCUZJUFNfY2lwaGVyX2N0 eF9jbGVhbnVwKCZjdHgpOwkKLSsJfQotKwotK3N0YXRpYyB2b2lkIGNjbXRlc3QoRklMRSAqaW4s IEZJTEUgKm91dCkKLSsJewotKwljaGFyIGJ1ZlsyMDAwNDhdOwotKwljaGFyIGxidWZbMjAwMDQ4 XTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlsb25nIGw7Ci0rCXVuc2lnbmVkIGNoYXIg KktleSA9IE5VTEwsICpOb25jZSA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKkFkYXRhID0gTlVM TCwgKlBheWxvYWQgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpDVCA9IE5VTEw7Ci0rCWludCBQ bGVuID0gLTEsIE5sZW4gPSAtMSwgVGxlbiA9IC0xLCBBbGVuID0gLTE7Ci0rCWludCBkZWNyID0g MDsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwljb25zdCBFVlBfQ0lQSEVSICpjY20gPSBOVUxM OwotKwlGSVBTX2NpcGhlcl9jdHhfaW5pdCgmY3R4KTsKLSsKLSsJd2hpbGUoZmdldHMoYnVmLHNp emVvZiBidWYsaW4pICE9IE5VTEwpCi0rCQl7Ci0rCQljaGFyICpwOwotKwkJZnB1dHMoYnVmLG91 dCk7Ci0rCQlyZWRvOgotKwkJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYs IGJ1ZikpCi0rCQkJY29udGludWU7Ci0rCi0rCQkvKiBJZiBzdXJyb3VuZGVkIGJ5IHNxdWFyZSBi cmFja2V0cyB6YXAgdGhlbSAqLwotKwkJaWYgKGtleXdvcmRbMF0gPT0gJ1snKQotKwkJCXsKLSsJ CQlrZXl3b3JkKys7Ci0rCQkJcCA9IHN0cmNocih2YWx1ZSwgJ10nKTsKLSsJCQlpZiAocCkKLSsJ CQkJKnAgPSAwOwotKwkJCX0KLSsJCS8qIFNlZSBpZiB3ZSBoYXZlIGEgY29tbWEgc2VwYXJhdGVk IGxpc3Qgb2YgcGFyYW1ldGVycwotKwkJICogaWYgc28gY29weSByZXN0IG9mIGxpbmUgYmFjayB0 byBidWZmZXIgYW5kIHJlZG8gbGF0ZXIuCi0rCQkgKi8KLSsJCXAgPSBzdHJjaHIodmFsdWUsICcs Jyk7Ci0rCQlpZiAocCkKLSsJCQl7Ci0rCQkJKnAgPSAwOwotKwkJCXN0cmNweShidWYsIHAgKyAx KTsKLSsJCQlzdHJjYXQoYnVmLCAiXG4iKTsKLSsJCQlkZWNyID0gMTsKLSsJCQl9Ci0rCQlpZiAo IXN0cmNtcChrZXl3b3JkLCJQbGVuIikpCi0rCQkJUGxlbiA9IGF0b2kodmFsdWUpOwotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJObGVuIikpCi0rCQkJTmxlbiA9IGF0b2kodmFsdWUpOwot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJUbGVuIikpCi0rCQkJVGxlbiA9IGF0b2kodmFs dWUpOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCJBbGVuIikpCi0rCQkJQWxlbiA9IGF0 b2kodmFsdWUpOwotKwkJaWYgKHApCi0rCQkJZ290byByZWRvOwotKwkJaWYgKCFzdHJjbXAoa2V5 d29yZCwiS2V5IikpCi0rCQkJewotKwkJCWlmIChLZXkpCi0rCQkJCU9QRU5TU0xfZnJlZShLZXkp OwotKwkJCUtleSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsID09IDE2KQotKwkJ CQljY20gPSBFVlBfYWVzXzEyOF9jY20oKTsKLSsJCQllbHNlIGlmIChsID09IDI0KQotKwkJCQlj Y20gPSBFVlBfYWVzXzE5Ml9jY20oKTsKLSsJCQllbHNlIGlmIChsID09IDMyKQotKwkJCQljY20g PSBFVlBfYWVzXzI1Nl9jY20oKTsKLSsJCQllbHNlCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRl cnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7Ci0rCQkJCWV4aXQoMSk7Ci0rCQkJCX0K LSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIk5vbmNlIikpCi0rCQkJewotKwkJ CWlmIChOb25jZSkKLSsJCQkJT1BFTlNTTF9mcmVlKE5vbmNlKTsKLSsJCQlOb25jZSA9IGhleDJi aW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChsICE9IE5sZW4pCi0rCQkJCXsKLSsJCQkJZnByaW50 ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgbm9uY2UgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsK LSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiUGF5bG9hZCIpICYm ICFkZWNyKQotKwkJCXsKLSsJCQlQYXlsb2FkID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7Ci0rCQkJ aWYgKFBsZW4gJiYgbCAhPSBQbGVuKQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLCAiSW5j b25zaXN0ZW50IFBheWxvYWQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJ CX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQWRhdGEiKSkKLSsJCQl7Ci0rCQkJaWYg KEFkYXRhKQotKwkJCQlPUEVOU1NMX2ZyZWUoQWRhdGEpOwotKwkJCUFkYXRhID0gaGV4MmJpbl9t KHZhbHVlLCAmbCk7Ci0rCQkJaWYgKEFsZW4gJiYgbCAhPSBBbGVuKQotKwkJCQl7Ci0rCQkJCWZw cmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFBheWxvYWQgbGVuZ3RoXG4iKTsKLSsJCQkJZXhp dCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwiQ1QiKSAm JiBkZWNyKQotKwkJCXsKLSsJCQlDVCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOwotKwkJCWlmIChs ICE9IChQbGVuICsgVGxlbikpCi0rCQkJCXsKLSsJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNp c3RlbnQgQ1QgbGVuZ3RoXG4iKTsKLSsJCQkJZXhpdCgxKTsKLSsJCQkJfQotKwkJCX0KLSsJCWlm IChQYXlsb2FkKQotKwkJCXsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBO VUxMLCAxKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VU X0lWTEVOLCBObGVuLCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RS TF9DQ01fU0VUX1RBRywgVGxlbiwgMCk7Ci0rCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIE5VTEws IEtleSwgTm9uY2UsIDEpOwotKwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIFBs ZW4pOwotKwkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIEFkYXRhLCBBbGVuKTsKLSsJCQlDVCA9 IE9QRU5TU0xfbWFsbG9jKFBsZW4gKyBUbGVuKTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBDVCwg UGF5bG9hZCwgUGxlbik7Ci0rCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxf Q0NNX0dFVF9UQUcsIFRsZW4sCi0rCQkJCQkJQ1QgKyBQbGVuKTsKLSsJCQlPdXRwdXRWYWx1ZSgi Q1QiLCBDVCwgUGxlbiArIFRsZW4sIG91dCwgMCk7Ci0rCQkJT1BFTlNTTF9mcmVlKENUKTsKLSsJ CQlPUEVOU1NMX2ZyZWUoUGF5bG9hZCk7Ci0rCQkJQ1QgPSBQYXlsb2FkID0gTlVMTDsKLSsJCQl9 Ci0rCQlpZiAoQ1QpCi0rCQkJewotKwkJCWludCBydjsKLSsJCQlpbnQgbGVuID0gUGxlbiA9PSAw ID8gMTogUGxlbjsKLSsJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgY2NtLCBOVUxMLCBOVUxMLCAw KTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVO LCBObGVuLCAwKTsKLSsJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01f U0VUX1RBRywKLSsJCQkJCQlUbGVuLCBDVCArIFBsZW4pOwotKwkJCUZJUFNfY2lwaGVyaW5pdCgm Y3R4LCBOVUxMLCBLZXksIE5vbmNlLCAwKTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBO VUxMLCBQbGVuKTsKLSsJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7Ci0r CQkJUGF5bG9hZCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCQkJcnYgPSBGSVBTX2NpcGhlcigm Y3R4LCBQYXlsb2FkLCBDVCwgUGxlbik7Ci0rCQkJaWYgKHJ2ID49IDApCi0rCQkJCXsKLSsJCQkJ aWYgKHJ2ID09IDApCi0rCQkJCQlQYXlsb2FkWzBdID0gMDsKLSsJCQkJZnB1dHMoIlJlc3VsdCA9 IFBhc3MiIFJFU1BfRU9MLCBvdXQpOwotKwkJCQlPdXRwdXRWYWx1ZSgiUGF5bG9hZCIsIFBheWxv YWQsIGxlbiwgb3V0LCAwKTsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJZnB1dHMoIlJlc3VsdCA9 IEZhaWwiIFJFU1BfRU9MLCBvdXQpOwotKwkJCU9QRU5TU0xfZnJlZShDVCk7Ci0rCQkJT1BFTlNT TF9mcmVlKFBheWxvYWQpOwotKwkJCUNUID0gUGF5bG9hZCA9IE5VTEw7Ci0rCQkJfQotKwkJfQot KwlpZiAoS2V5KQotKwkJT1BFTlNTTF9mcmVlKEtleSk7Ci0rCWlmIChOb25jZSkKLSsJCU9QRU5T U0xfZnJlZShOb25jZSk7Ci0rCWlmIChBZGF0YSkKLSsJCU9QRU5TU0xfZnJlZShBZGF0YSk7Ci0r CUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKCZjdHgpOwotKwl9Ci0rCi0rI2lmZGVmIEZJUFNfQUxH VlMKLStpbnQgZmlwc19nY210ZXN0X21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNlbHNl Ci0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKyNlbmRpZgotKwl7Ci0rCWludCBl bmNyeXB0OwotKwlpbnQgeHRzID0gMCwgY2NtID0gMDsKLSsJRklMRSAqaW4sICpvdXQ7Ci0rCWlm IChhcmdjID09IDQpCi0rCQl7Ci0rCQlpbiA9IGZvcGVuKGFyZ3ZbMl0sICJyIik7Ci0rCQlpZiAo IWluKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmls ZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQlvdXQgPSBmb3Blbihhcmd2WzNdLCAidyIp OwotKwkJaWYgKCFvdXQpCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3Blbmlu ZyBvdXRwdXQgZmlsZVxuIik7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UgaWYg KGFyZ2MgPT0gMikKLSsJCXsKLSsJCWluID0gc3RkaW47Ci0rCQlvdXQgPSBzdGRvdXQ7Ci0rCQl9 Ci0rCWVsc2UKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCIlcyBbLWVuY3J5cHR8LWRlY3J5cHRd XG4iLGFyZ3ZbMF0pOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJZmlwc19hbGd0ZXN0X2luaXQoKTsK LSsJaWYoIXN0cmNtcChhcmd2WzFdLCItZW5jcnlwdCIpKQotKwkJZW5jcnlwdCA9IDE7Ci0rCWVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCItZW5jcnlwdElWZXh0IikpCi0rCQllbmNyeXB0ID0gMjsK LSsJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1kZWNyeXB0IikpCi0rCQllbmNyeXB0ID0gMDsK LSsJZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sIi1jY20iKSkKLSsJCWNjbSA9IDE7Ci0rCWVsc2Ug aWYoIXN0cmNtcChhcmd2WzFdLCIteHRzIikpCi0rCQl4dHMgPSAxOwotKwllbHNlCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwkJ ZXhpdCgxKTsKLSsJCX0KLSsKLSsJaWYgKGNjbSkKLSsJCWNjbXRlc3QoaW4sIG91dCk7Ci0rCWVs c2UgaWYgKHh0cykKLSsJCXh0c3Rlc3QoaW4sIG91dCk7Ci0rCWVsc2UKLSsJCWdjbXRlc3QoaW4s IG91dCwgZW5jcnlwdCk7Ci0rCi0rCWlmIChhcmdjID09IDQpCi0rCQl7Ci0rCQlmY2xvc2UoaW4p OwotKwkJZmNsb3NlKG91dCk7Ci0rCQl9Ci0rCi0rCXJldHVybiAwOwotK30KLSsKLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3Zz LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5j Ci0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5m aXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzkxMjk0ODcxICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwkyMDEyLTAyLTI5IDEwOjMzOjAy Ljc5MTI5NDg3MSArMDEwMAotQEAgLTAsMCArMSwyMzAgQEAKLSsvKgotKyAqIENydWRlIHRlc3Qg ZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBWU1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVzCi0r ICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJOR1ZTIHByb2R1Y3QuCi0rICoKLSsgKiBOb3RlIHRo ZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZvcm1h dAotKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUgTklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBOdW1i ZXIgR2VuZXJhdG9yCi0rICogVmFsaWRhdGlvbiBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwgMjAw NC4KLSsgKgotKyAqLwotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBvcnRc biIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUw OXYzLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNp bmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3ZvaWQgdnN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAg dW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0r ICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47Ci0rCi0rICAgIGtleWxlbiA9IDA7 Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7 Ci0rCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0i LCAxMykpCi0rCQlrZXlsZW4gPSAxNjsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTky LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAyNDsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltB RVMgMjU2LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5lKCZr ZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChr ZXl3b3JkLCJLZXkiKSkKLSsJICAgIHsKLSsJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwot KwkgICAgaWYgKGkgIT0ga2V5bGVuKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlk IGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0rCQl9 Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQotKwkgICAgewotKwkg ICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJ ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9 Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0rCSAg ICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZw cmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0r Ci0rCSAgICBpZiAoIWtleSB8fCAhZHQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Np bmcga2V5IG9yIERUXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfeDkzMV9z ZXRfa2V5KGtleSwga2V5bGVuKTsKLSsJICAgIEZJUFNfeDkzMV9zZWVkKHYsMTYpOwotKwkgICAg RklQU194OTMxX3NldF9kdChkdCk7Ci0rCSAgICBpZiAoRklQU194OTMxX2J5dGVzKHJldCwxNikg PD0gMCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVl XG4iKTsKLSsJICAgICAgICByZXR1cm47Ci0rCSAgICAgICAgfQotKwotKwkgICAgcHYoIlIiLHJl dCwxNik7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0rCSAg ICBPUEVOU1NMX2ZyZWUoZHQpOwotKwkgICAgZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVl KHYpOwotKwkgICAgdiA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgbWN0 KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNpZ25l ZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAgICB1 bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxi dWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXls ZW47Ci0rICAgIGludCBqOwotKwotKyAgICBrZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0 cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0 KTsKLSsJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0g MTY7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5 bGVuID0gMjQ7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQot KwkJa2V5bGVuID0gMzI7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQotKwkJY29udGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAg ICB7Ci0rCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxl bikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3Rp bmcgJWxkXG4iLCBrZXlsZW4pOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKLSsJICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1 ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBEVCBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiViIpKQotKwkgICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUs JmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQgViBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwg IWR0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0r CQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7 Ci0rCSAgICBGSVBTX3g5MzFfc2VlZCh2LDE2KTsKLSsJICAgIGZvciAoaSA9IDA7IGkgPCAxMDAw MDsgaSsrKQotKwkJewotKwkJICAgIEZJUFNfeDkzMV9zZXRfZHQoZHQpOwotKwkJICAgIGlmIChG SVBTX3g5MzFfYnl0ZXMocmV0LDE2KSA8PSAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwg IkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7Ci0rCQkgICAgICAgIHJldHVybjsKLSsJCSAg ICAgICAgfQotKwkJICAgIC8qIEluY3JlbWVudCBEVCAqLwotKwkJICAgIGZvciAoaiA9IDE1OyBq ID49IDA7IGotLSkKLSsJCQl7Ci0rCQkJZHRbal0rKzsKLSsJCQlpZiAoZHRbal0pCi0rCQkJCWJy ZWFrOwotKwkJCX0KLSsJCX0KLSsKLSsJICAgIHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNT TF9mcmVlKGtleSk7Ci0rCSAgICBrZXkgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsK LSsJICAgIGR0ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxM OwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJn dikKLSsgICAgewotKyAgICBpZihhcmdjICE9IDIpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIiVz IFttY3R8dnN0XVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighRklQU19t b2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQot KyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKLSsgICAgaWYgKCFGSVBTX3g5MzFfdGVzdF9tb2RlKCkp Ci0rCXsKLSsJZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2RlXG4i KTsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIXN0cmNt cChhcmd2WzFdLCJtY3QiKSkKLSsJbWN0KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFd LCJ2c3QiKSkKLSsJdnN0KCk7Ci0rICAgIGVsc2UKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9u J3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAg IHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMz OjAyLjc5MTI5NDg3MSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JzYWd0ZXN0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTEyOTQ4NzEgKzAxMDAK LUBAIC0wLDAgKzEsMzkwIEBACi0rLyogZmlwc19yc2FndGVzdC5jICovCi0rLyogV3JpdHRlbiBi eSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NM Ci0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDA1LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5j bHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv YmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+ Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAg cmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot K2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50IHJzYV9wcmlu dGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwg QklHTlVNICpYcCwKLSsJCUJJR05VTSAqZSk7Ci0rc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJ TEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAq WHEpOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICpp biA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNf bW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4g PSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRv dXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4p Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVy cm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJ CWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJ ZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIp OwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsK LSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9 IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQot KwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFJT QV9URVNUX01BWExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxF ICppbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAq a2V5d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCUJJR05VTSAqWHAxID0gTlVM TCwgKlhwMiA9IE5VTEwsICpYcCA9IE5VTEw7Ci0rCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9 IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJJR05VTSAqZSA9IE5VTEw7Ci0rCWludCByZXQgPSAwOwot KwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1Rf TUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5F TEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0r Ci0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJ ewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQg PSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9v ayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJ ZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkg Ki8KLSsJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xp bmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0K LSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJ KnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkp Ci0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVl ICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9 PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwot KwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMSIpKQotKwkJCXsKLSsJCQlpZiAoWHAxIHx8ICFk b19oZXgyYm4oJlhwMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAyIikpCi0rCQkJewotKwkJCWlmIChYcDIgfHwg IWRvX2hleDJibigmWHAyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcCIpKQotKwkJCXsKLSsJCQlpZiAoWHAgfHwg IWRvX2hleDJibigmWHAsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQotKwkJCXsKLSsJCQlpZiAoWHExIHx8 ICFkb19oZXgyYm4oJlhxMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikpCi0rCQkJewotKwkJCWlmIChYcTIg fHwgIWRvX2hleDJibigmWHEyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcSIpKQotKwkJCXsKLSsJCQlpZiAoWHEg fHwgIWRvX2hleDJibigmWHEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0K LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKGUgfHwg IWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicDEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgInAyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICgh c3RyY21wKGtleXdvcmQsICJwIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJxMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAicTIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg InEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkK LSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKLSsJCQlj b250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xp bmVidWYsIG91dCk7Ci0rCi0rCQlpZiAoZSAmJiBYcDEgJiYgWHAyICYmIFhwKQotKwkJCXsKLSsJ CQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsK LSsJCQlpZiAoIXJzYV9wcmludGtleTEob3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCi0rCQkJ CWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcDEpOwotKwkJCVhwMSA9IE5VTEw7Ci0rCQkJQk5f ZnJlZShYcDIpOwotKwkJCVhwMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcCk7Ci0rCQkJWHAgPSBO VUxMOwotKwkJCUJOX2ZyZWUoZSk7Ci0rCQkJZSA9IE5VTEw7Ci0rCQkJfQotKwotKwkJaWYgKHJz YSAmJiBYcTEgJiYgWHEyICYmIFhxKQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludGtleTIob3V0 LCByc2EsIFhxMSwgWHEyLCBYcSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcTEp OwotKwkJCVhxMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcTIpOwotKwkJCVhxMiA9IE5VTEw7Ci0r CQkJQk5fZnJlZShYcSk7Ci0rCQkJWHEgPSBOVUxMOwotKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsK LSsJCQlyc2EgPSBOVUxMOwotKwkJCX0KLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6 Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChs aW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwotKwlpZiAoWHAxKQotKwkJQk5f ZnJlZShYcDEpOwotKwlpZiAoWHAyKQotKwkJQk5fZnJlZShYcDIpOwotKwlpZiAoWHApCi0rCQlC Tl9mcmVlKFhwKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMSkKLSsJ CUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMikKLSsJCUJOX2ZyZWUoWHEyKTsKLSsJaWYgKFhxKQot KwkJQk5fZnJlZShYcSk7Ci0rCWlmIChlKQotKwkJQk5fZnJlZShlKTsKLSsJaWYgKHJzYSkKLSsJ CUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2VfZXJyb3I6 Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5l ICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQg cnNhX3ByaW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcDEsIEJJR05V TSAqWHAyLCBCSUdOVU0gKlhwLAotKwkJQklHTlVNICplKQotKwl7Ci0rCWludCByZXQgPSAwOwot KwlCSUdOVU0gKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKLSsJcDEgPSBCTl9uZXcoKTsKLSsJcDIg PSBCTl9uZXcoKTsKLSsJaWYgKCFwMSB8fCAhcDIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAo IVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhw LAotKwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsK LSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShv dXQsICJwMiIsIHAyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKLSsK LSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChwMSkKLSsJCUJOX2ZyZWUocDEpOwotKwlp ZiAocDIpCi0rCQlCTl9mcmVlKHAyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3N0YXRp YyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEs IEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0g KnExID0gTlVMTCwgKnEyID0gTlVMTDsKLSsJcTEgPSBCTl9uZXcoKTsKLSsJcTIgPSBCTl9uZXco KTsKLSsJaWYgKCFxMSB8fCAhcTIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMx X2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKLSsJ CQkJCQlYcTEsIFhxMiwgWHEsIE5VTEwsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9f Ym5fcHJpbnRfbmFtZShvdXQsICJxMSIsIHExKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJx MiIsIHEyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxIiwgcnNhLT5xKTsKLSsJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJuIiwgcnNhLT5uKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJk IiwgcnNhLT5kKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChxMSkKLSsJCUJO X2ZyZWUocTEpOwotKwlpZiAocTIpCi0rCQlCTl9mcmVlKHEyKTsKLSsKLSsJcmV0dXJuIHJldDsK LSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTIyOTQ4 ODAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19y c2FzdGVzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzkyMjk0ODgwICswMTAwCi1AQCAtMCwwICsx LDM3MCBAQAotKy8qIGZpcHNfcnNhc3Rlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2pl Y3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0r ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRo aXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJp YyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4K LSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9Q RU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAg ICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQot KwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCByc2Ff c3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNh X3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVu c2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0g TlVMTDsKLSsKLSsJaW50IHJldCA9IDEsIFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9k ZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJ fQotKwotKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQot KwkJewotKwkJU2FsdGxlbiA9IGF0b2koYXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0r CQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIp OwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJ CX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQot KwkJewotKwkJU2FsdGxlbiA9IC0yOwotKwkJYXJnYy0tOwotKwkJYXJndisrOwotKwkJfQotKwot KwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihh cmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVs c2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsK LSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5k OwotKwkJfQotKwotKwlpZiAoIXJzYV9zdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4i KTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0r Ci0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAh PSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkK LSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBS U0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJ TEUgKmluLCBpbnQgU2FsdGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpw LCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCWNv bnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7Ci0r CWxvbmcgTXNnbGVuID0gLTE7Ci0rCWludCBrZXlsZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAt MTsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVO U1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVm KQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9N QVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xp bmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2Ug Ki8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3 b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1 ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0ganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJ ewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0r CQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0r CQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyog UmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAx OwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkp Ci0rCQkJKnAtLSA9IDA7Ci0rCi0rCQkvKiBMb29rIGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxl bmd0aCAqLwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlttb2QiKSkKLSsJCQl7Ci0rCQkJ cCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQkJaWYgKCpwICE9ICddJykKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQkqcCA9IDA7Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7 Ci0rCQkJaWYgKGtleWxlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0r CQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3No YTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdz dCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikp Ci0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmlu dGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4i LAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChN c2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQot KwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xl bik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwotKwkJ ZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQkvKiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2Vk LCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1YmxpYwotKwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3 IFJTQSBwcml2YXRlIGtleS4KLSsJCSAqLwotKwotKwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tl eWxlbikKLSsJCQl7Ci0rCQkJQklHTlVNICpibl9lOwotKwkJCWlmIChyc2EpCi0rCQkJCUZJUFNf cnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkK LSsJCQkJZ290byBlcnJvcjsKLSsJCQlibl9lID0gQk5fbmV3KCk7Ci0rCQkJaWYgKCFibl9lIHx8 ICFCTl9zZXRfd29yZChibl9lLCAweDEwMDEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICgh UlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KHJzYSwga2V5bGVuLCBibl9lLCBOVUxMKSkKLSsJCQkJ Z290byBlcnJvcjsKLSsJCQlCTl9mcmVlKGJuX2UpOwotKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsK LSsJCQlkb19ibl9wcmludChvdXQsIHJzYS0+bik7Ci0rCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7 Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPmUpOwotKwkJCWZwdXRzKCJcbiIsIG91dCk7Ci0r CQkJY3VycmVudF9rZXlsZW4gPSBrZXlsZW47Ci0rCQkJfQotKwotKwkJaWYgKE1zZyAmJiBkZ3N0 KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludHNpZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2ds ZW4sCi0rCQkJCQkJCQlTYWx0bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2Zy ZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJcmV0ID0gMTsK LSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1 Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAocnNh KQotKwkJRklQU19yc2FfZnJlZShyc2EpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9l cnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5n IGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGlj IGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0 LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pCi0rCXsK LSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7Ci0rCWludCBp LCBzaWdsZW47Ci0rCS8qIEVWUF9QS0VZIHN0cnVjdHVyZSAqLwotKwlFVlBfUEtFWSBwazsKLSsJ RVZQX01EX0NUWCBjdHg7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNh ID0gcnNhOwotKwotKwlzaWdsZW4gPSBSU0Ffc2l6ZShyc2EpOwotKwlzaWdidWYgPSBPUEVOU1NM X21hbGxvYyhzaWdsZW4pOwotKwlpZiAoIXNpZ2J1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVW UF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJCU1f RVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8 IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0rCQlN X0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Ci0r CWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsK LSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9y OwotKwlpZiAoIUVWUF9TaWduRmluYWwoJmN0eCwgc2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNp Z2xlbiwgJnBrKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4 KTsKLSsKLSsJZnB1dHMoIlMgPSAiLCBvdXQpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVu OyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMlgiLCBzaWdidWZbaV0pOwotKwotKwlmcHV0cygi XG4iLCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJcmV0dXJuIHJldDsK LSsJfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JzYXZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBz L2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTIyOTQ4ODAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2 dGVzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzkyMjk0ODgwICswMTAwCi1AQCAtMCwwICsxLDM3 NyBAQAotKy8qIGZpcHNfcnNhdnRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBO IEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3Qg MjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi Ci0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K LSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK LSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZ b3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsg KgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsKLSsjaWZuZGVmIE9QRU5T U0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBw cmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwot KyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0raW50IHJzYV90ZXN0KEZJTEUg Km91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihG SUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdz dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFy ICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50 IHJldCA9IDE7Ci0rCWludCBTYWx0bGVuID0gLTE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEp KQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJ aWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJ CVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJaWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJ CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQln b3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVs c2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJ CVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJCWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFy Z2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwg InIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlv dXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdv dG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChy ZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikp Ci0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9z ZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9N QVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGlu dCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwlj aGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCUJJ R05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwg KlMgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiwgU2xlbjsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBs bnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5F TEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwot KwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hp bGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQls bnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVi dWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9 IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0g b3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJ aWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwg b3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJ cSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7 Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2 YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2 YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJ CXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicg fHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAo IXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmbix2YWx1 ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi U0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlk Z3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0Iikp Ci0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwg IlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJj bXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNl IGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7 Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1 bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJ CU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIp KQotKwkJCXsKLSsJCQlpZiAoUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3Ry bGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJUyA9IGhleDJiaW5f bSh2YWx1ZSwgJlNsZW4pOwotKwkJCWlmICghUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJSZXN1bHQiKSkKLSsJCQljb250aW51 ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYs IG91dCk7Ci0rCi0rCQlpZiAobiAmJiBlICYmIE1zZyAmJiBTICYmIGRnc3QpCi0rCQkJewotKwkJ CWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwgZGdzdCwKLSsJCQkJCU1zZywgTXNnbGVuLCBT LCBTbGVuLCBTYWx0bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNn KTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCU9QRU5TU0xfZnJlZShTKTsKLSsJCQlTID0gTlVMTDsK LSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlp ZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikK LSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKG4pCi0rCQlCTl9mcmVlKG4pOwotKwlp ZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9y OgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGlu ZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50 IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNv bnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0r CQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWludCBy ZXQgPSAwLCByOwotKwkvKiBTZXR1cCBSU0EgYW5kIEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KLSsJ UlNBICpyc2FfcHVia2V5ID0gTlVMTDsKLSsJRVZQX1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4 OwotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwotKwlyc2FfcHVia2V5ID0gRklQU19yc2Ff bmV3KCk7Ci0rCWlmICghcnNhX3B1YmtleSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXJzYV9wdWJrZXkt Pm4gPSBCTl9kdXAobik7Ci0rCXJzYV9wdWJrZXktPmUgPSBCTl9kdXAoZSk7Ci0rCWlmICghcnNh X3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXBrLnR5cGUg PSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhX3B1YmtleTsKLSsKLSsJRVZQX01E X0NUWF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2FsdGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBf TURfQ1RYX3NldF9mbGFncygmY3R4LAotKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNh bHRsZW4gPDwgMTYpKTsKLSsJCX0KLSsJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQ X01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYg KCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0r CWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9y OwotKwotKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZjdHgsIFMsIFNsZW4sICZwayk7Ci0rCi0rCi0r CUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJaWYgKHIgPCAwKQotKwkJZ290byBlcnJv cjsKLSsJRVJSX2NsZWFyX2Vycm9yKCk7Ci0rCi0rCWlmIChyID09IDApCi0rCQlmcHV0cygiUmVz dWx0ID0gRlxuIiwgb3V0KTsKLSsJZWxzZQotKwkJZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7 Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocnNhX3B1YmtleSkKLSsJCUZJUFNf cnNhX2ZyZWUocnNhX3B1YmtleSk7Ci0rCWlmIChidWYpCi0rCQlPUEVOU1NMX2ZyZWUoYnVmKTsK LSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDoz MzowMi43OTIyOTQ4ODAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBz L2NhdnMvZmlwc19zaGF0ZXN0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTIyOTQ4ODAgKzAxMDAK LUBAIC0wLDAgKzEsMzg4IEBACi0rLyogZmlwc19zaGF0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5 IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wK LSsgKiBwcm9qZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRz b2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8 Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsK LSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgU0hBWFhYIHN1cHBvcnRcbiIpOwotKyAgICBy ZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0r c3RhdGljIGludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Ci0rc3RhdGljIGludCBw cmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIg Kk1zZywgaW50IE1zZ2xlbik7Ci0rc3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQg Km1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7Ci0r Ci0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVM TCwgKm91dCA9IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxOwotKwotKwlpZighRklQU19tb2RlX3Nl dCgxKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0r Ci0rCWlmIChhcmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVu KGFyZ3ZbMV0sICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJ ZWxzZQotKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsK LSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIp OwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBl bmQ7Ci0rCQl9Ci0rCi0rCWlmICghZGdzdF90ZXN0KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBkaWdlc3QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdv dG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChy ZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikp Ci0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9z ZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBTSEFfVEVTVF9N QVhfQklUUwkxMDI0MDAKLSsjZGVmaW5lIFNIQV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1Rf TUFYX0JJVFMgPj4gMykgKiAyKSArIDEwMCkKLSsKLStpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwg RklMRSAqaW4pCi0rCXsKLSsJY29uc3QgRVZQX01EICptZCA9IE5VTEw7Ci0rCWNoYXIgKmxpbmVi dWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCXVuc2ln bmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTZWVkID0gTlVMTDsKLSsJbG9uZyBNc2dMZW4gPSAtMSwg TGVuID0gLTEsIFNlZWRMZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsK LSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKLSsJ bGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAo IWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsKLSsJd2hpbGUgKGZn ZXRzKG9saW5lYnVmLCBTSEFfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7 Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0r CQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24g Ki8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3Rh cnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCkKLSsJ CQl7Ci0rCQkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwot KwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9 IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJv bSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJ CQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8K LSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwkJd2hpbGUgKCpwID09ICdcbicg fHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAo IXN0cmNtcChrZXl3b3JkLCJbTCIpICYmICpwPT0nXScpCi0rCQkJewotKwkJCXN3aXRjaCAoYXRv aSh2YWx1ZSkpCi0rCQkJCXsKLSsJCQkJY2FzZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsK LSsJCQkJY2FzZSAyODogbWQ9RVZQX3NoYTIyNCgpOyBicmVhazsKLSsJCQkJY2FzZSAzMjogbWQ9 RVZQX3NoYTI1NigpOyBicmVhazsKLSsJCQkJY2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVh azsKLSsJCQkJY2FzZSA2NDogbWQ9RVZQX3NoYTUxMigpOyBicmVhazsKLSsJCQkJZGVmYXVsdDog Z290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIkxlbiIpKQotKwkJCXsKLSsJCQlpZiAoTGVuICE9IC0xKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCUxlbiA9IGF0b2kodmFsdWUpOwotKwkJCWlmIChMZW4gPCAwKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCS8qIE9ubHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMg Ki8KLSsJCQlpZiAoTGVuICYgMHg3KQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChM ZW4gPiBTSEFfVEVTVF9NQVhfQklUUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNc2dM ZW4gPSBMZW4gPj4gMzsKLSsJCQl9Ci0rCi0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJN c2ciKSkKLSsJCQl7Ci0rCQkJbG9uZyB0bXBsZW47Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAx KQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmdG1wbGVuKTsKLSsJCQlpZiAoIU1z ZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJTZWVkIikpCi0rCQkJewotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJ KigtLXZhbHVlKSA9ICcwJzsKLSsJCQlpZiAoU2VlZCkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQlTZWVkID0gaGV4MmJpbl9tKHZhbHVlLCAmU2VlZExlbik7Ci0rCQkJaWYgKCFTZWVkKQot KwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIk1EIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsK LSsKLSsJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNn TGVuID49IDApKQotKwkJCXsKLSsJCQlpZiAoIXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dM ZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5TU0xfZnJlZShNc2cpOwotKwkJCU1zZyA9 IE5VTEw7Ci0rCQkJTXNnTGVuID0gLTE7Ci0rCQkJTGVuID0gLTE7Ci0rCQkJfQotKwkJZWxzZSBp ZiAobWQgJiYgU2VlZCAmJiAoU2VlZExlbiA+IDApKQotKwkJCXsKLSsJCQlpZiAoIXByaW50X21v bnRlKG1kLCBvdXQsIFNlZWQsIFNlZWRMZW4pKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCU9QRU5T U0xfZnJlZShTZWVkKTsKLSsJCQlTZWVkID0gTlVMTDsKLSsJCQlTZWVkTGVuID0gLTE7Ci0rCQkJ fQotKwkKLSsKLSsJCX0KLSsKLSsKLSsJcmV0ID0gMTsKLSsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlm IChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQot KwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAoTXNnKQotKwkJT1BFTlNTTF9mcmVlKE1z Zyk7Ci0rCWlmIChTZWVkKQotKwkJT1BFTlNTTF9mcmVlKFNlZWQpOwotKwotKwlyZXR1cm4gcmV0 OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBl cnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwot Kwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpv dXQsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4pCi0rCXsKLSsJaW50IGksIG1k bGVuOwotKwl1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07Ci0rCWlmICghRVZQX0Rp Z2VzdChNc2csIE1zZ2xlbiwgbWQsICh1bnNpZ25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkp Ci0rCQl7Ci0rCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKLSsJ CXJldHVybiAwOwotKwkJfQotKwlmcHV0cygiTUQgPSAiLCBvdXQpOwotKwlmb3IgKGkgPSAwOyBp IDwgbWRsZW47IGkrKykKLSsJCWZwcmludGYob3V0LCAiJTAyeCIsIG1kW2ldKTsKLSsJZnB1dHMo IlxuIiwgb3V0KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X21vbnRl KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGlu dCBTZWVkTGVuKQotKwl7Ci0rCXVuc2lnbmVkIGludCBpLCBqLCBrOwotKwlpbnQgcmV0ID0gMDsK LSsJRVZQX01EX0NUWCBjdHg7Ci0rCXVuc2lnbmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7Ci0r CXVuc2lnbmVkIGludCBtbGVuLCBtMWxlbiwgbTJsZW4sIG0zbGVuOwotKwotKwlFVlBfTURfQ1RY X2luaXQoJmN0eCk7Ci0rCi0rCWlmIChTZWVkTGVuID4gRVZQX01BWF9NRF9TSVpFKQotKwkJbWxl biA9IFNlZWRMZW47Ci0rCWVsc2UKLSsJCW1sZW4gPSBFVlBfTUFYX01EX1NJWkU7Ci0rCi0rCW0x ID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Ci0rCW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Ci0r CW0zID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Ci0rCi0rCWlmICghbTEgfHwgIW0yIHx8ICFtMykK LSsJCWdvdG8gbWNfZXJyb3I7Ci0rCi0rCW0xbGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47 Ci0rCW1lbWNweShtMSwgU2VlZCwgU2VlZExlbik7Ci0rCW1lbWNweShtMiwgU2VlZCwgU2VlZExl bik7Ci0rCW1lbWNweShtMywgU2VlZCwgU2VlZExlbik7Ci0rCi0rCWZwdXRzKCJcbiIsIG91dCk7 Ci0rCi0rCWZvciAoaiA9IDA7IGogPCAxMDA7IGorKykKLSsJCXsKLSsJCWZvciAoaSA9IDA7IGkg PCAxMDAwOyBpKyspCi0rCQkJewotKwkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxM KTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0xLCBtMWxlbik7Ci0rCQkJRVZQX0RpZ2Vz dFVwZGF0ZSgmY3R4LCBtMiwgbTJsZW4pOwotKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMs IG0zbGVuKTsKLSsJCQlwID0gbTE7Ci0rCQkJbTEgPSBtMjsKLSsJCQltMWxlbiA9IG0ybGVuOwot KwkJCW0yID0gbTM7Ci0rCQkJbTJsZW4gPSBtM2xlbjsKLSsJCQltMyA9IHA7Ci0rCQkJRVZQX0Rp Z2VzdEZpbmFsX2V4KCZjdHgsIG0zLCAmbTNsZW4pOwotKwkJCX0KLSsJCWZwcmludGYob3V0LCAi Q09VTlQgPSAlZFxuIiwgaik7Ci0rCQlmcHV0cygiTUQgPSAiLCBvdXQpOwotKwkJZm9yIChrID0g MDsgayA8IG0zbGVuOyBrKyspCi0rCQkJZnByaW50ZihvdXQsICIlMDJ4IiwgbTNba10pOwotKwkJ ZnB1dHMoIlxuXG4iLCBvdXQpOwotKwkJbWVtY3B5KG0xLCBtMywgbTNsZW4pOwotKwkJbWVtY3B5 KG0yLCBtMywgbTNsZW4pOwotKwkJbTFsZW4gPSBtMmxlbiA9IG0zbGVuOwotKwkJfQotKwotKwly ZXQgPSAxOwotKwotKwltY19lcnJvcjoKLSsJaWYgKG0xKQotKwkJT1BFTlNTTF9mcmVlKG0xKTsK LSsJaWYgKG0yKQotKwkJT1BFTlNTTF9mcmVlKG0yKTsKLSsJaWYgKG0zKQotKwkJT1BFTlNTTF9m cmVlKG0zKTsKLSsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOwotKwotKwlyZXR1cm4gcmV0 OwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2NhdnMvZmlwc191dGwuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3V0bC5oCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfdXRsLmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MjI5NDg4MCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCTIwMTItMDIt MjkgMTA6MzM6MDIuNzkyMjk0ODgwICswMTAwCi1AQCAtMCwwICsxLDM0MyBAQAotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsg KgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKgotKyAqLwotKwotK3ZvaWQgZG9fcHJpbnRfZXJyb3JzKHZvaWQpCi0rCXsKLSsJ Y29uc3QgY2hhciAqZmlsZSwgKmRhdGE7Ci0rCWludCBsaW5lLCBmbGFnczsKLSsJdW5zaWduZWQg bG9uZyBsOwotKwl3aGlsZSAoKGwgPSBFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxp bmUsICZkYXRhLCAmZmxhZ3MpKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6JWx4 OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0lZCIKLSsJCQkJIjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIs Ci0rCQkJbCwgRVJSX0dFVF9MSUIobCksIEVSUl9HRVRfRlVOQyhsKSwgRVJSX0dFVF9SRUFTT04o bCksCi0rCQkJZmlsZSwgbGluZSwgZmxhZ3MgJiBFUlJfVFhUX1NUUklORyA/IGRhdGEgOiAiIik7 Ci0rCQl9Ci0rCX0KLSsKLStpbnQgaGV4MmJpbihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hh ciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuMSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7 Ci0rCi0rICAgIGZvciAobjE9MCxuMj0wIDsgaW5bbjFdICYmIGluW24xXSAhPSAnXG4nIDsgKQot Kwl7IC8qIGZpcnN0IGJ5dGUgKi8KLSsJaWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9 ICc5JykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJzAnOwotKwllbHNlIGlmICgoaW5bbjFdID49 ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEw OwotKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQotKwkgICAg Y2ggPSBpbltuMSsrXSAtICdhJyArIDEwOwotKwllbHNlCi0rCSAgICByZXR1cm4gLTE7Ci0rCWlm KCFpbltuMV0pCi0rCSAgICB7Ci0rCSAgICBvdXRbbjIrK109Y2g7Ci0rCSAgICBicmVhazsKLSsJ ICAgIH0KLSsJb3V0W24yXSA9IGNoIDw8IDQ7Ci0rCS8qIHNlY29uZCBieXRlICovCi0rCWlmICgo aW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAt ICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJ ICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScp ICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJ ZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlvdXRbbjIrK10gfD0gY2g7Ci0rCX0KLSsgICAgcmV0 dXJuIG4yOwotKyAgICB9Ci0rCi0rdW5zaWduZWQgY2hhciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIg KmluLCBsb25nICpwbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnA7Ci0rCXAgPSBPUEVOU1NM X21hbGxvYygoc3RybGVuKGluKSArIDEpLzIpOwotKwkqcGxlbiA9IGhleDJiaW4oaW4sIHApOwot KwlyZXR1cm4gcDsKLSsJfQotKwotK2ludCBkb19oZXgyYm4oQklHTlVNICoqcHIsIGNvbnN0IGNo YXIgKmluKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnA7Ci0rCWxvbmcgcGxlbjsKLSsJaW50IHIg PSAwOwotKwlwID0gaGV4MmJpbl9tKGluLCAmcGxlbik7Ci0rCWlmICghcCkKLSsJCXJldHVybiAw OwotKwlpZiAoISpwcikKLSsJCSpwciA9IEJOX25ldygpOwotKwlpZiAoISpwcikKLSsJCXJldHVy biAwOwotKwlpZiAoQk5fYmluMmJuKHAsIHBsZW4sICpwcikpCi0rCQlyID0gMTsKLSsJT1BFTlNT TF9mcmVlKHApOwotKwlyZXR1cm4gcjsKLSsJfQotKwotK2ludCBkb19ibl9wcmludChGSUxFICpv dXQsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hhciAqdG1w OwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwlpZiAobGVuID09IDApCi0rCQl7Ci0rCQlm cHV0cygiMDAiLCBvdXQpOwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCi0rCXRtcCA9IE9QRU5TU0xf bWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1v cnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQk5fYm4yYmlu KGJuLCB0bXApOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwg IiUwMngiLCB0bXBbaV0pOwotKwlPUEVOU1NMX2ZyZWUodG1wKTsKLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLStpbnQgZG9fYm5fcHJpbnRfbmFtZShGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJ R05VTSAqYm4pCi0rCXsKLSsJaW50IHI7Ci0rCWZwcmludGYob3V0LCAiJXMgPSAiLCBuYW1lKTsK LSsJciA9IGRvX2JuX3ByaW50KG91dCwgYm4pOwotKwlpZiAoIXIpCi0rCQlyZXR1cm4gMDsKLSsJ ZnB1dHMoIlxuIiwgb3V0KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgcGFyc2VfbGluZShj aGFyICoqcGt3LCBjaGFyICoqcHZhbCwgY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0r CXsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBv bGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2Ug Ki8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29y ZCsrOwotKwotKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAn PScpOwotKwotKwkvKiBJZiBubyAnPScgZXhpdCAqLwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsK LSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0g MDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2 YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFs dWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9 IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlz c3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9IDA7Ci0rCi0rCSpwa3cgPSBrZXl3 b3JkOwotKwkqcHZhbCA9IHZhbHVlOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK0JJR05VTSAqaGV4 MmJuKGNvbnN0IGNoYXIgKmluKQotKyAgICB7Ci0rICAgIEJJR05VTSAqcD1OVUxMOwotKwotKyAg ICBpZiAoIWRvX2hleDJibigmcCwgaW4pKQotKwlyZXR1cm4gTlVMTDsKLSsKLSsgICAgcmV0dXJu IHA7Ci0rICAgIH0KLSsKLStpbnQgYmluMmhleChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQg bGVuLGNoYXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjEsIG4yOwotKyAgICB1bnNpZ25lZCBj aGFyIGNoOwotKwotKyAgICBmb3IgKG4xPTAsbjI9MCA7IG4xIDwgbGVuIDsgKytuMSkKLSsJewot KwljaD1pbltuMV0gPj4gNDsKLSsJaWYgKGNoIDw9IDB4MDkpCi0rCSAgICBvdXRbbjIrK109Y2gr JzAnOwotKwllbHNlCi0rCSAgICBvdXRbbjIrK109Y2gtMTArJ2EnOwotKwljaD1pbltuMV0gJiAw eDBmOwotKwlpZihjaCA8PSAweDA5KQotKwkgICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQot KwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKLSsJfQotKyAgICBvdXRbbjJdPSdcMCc7Ci0rICAg IHJldHVybiBuMjsKLSsgICAgfQotKwotK3ZvaWQgcHYoY29uc3QgY2hhciAqdGFnLGNvbnN0IHVu c2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsK LSsKLSsgICAgYmluMmhleCh2YWwsbGVuLG9idWYpOwotKyAgICBwcmludGYoIiVzID0gJXNcbiIs dGFnLG9idWYpOwotKyAgICB9Ci0rCi0rLyogVG8gYXZvaWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8g dGVzdCBwcm9ncmFtIGF0IHRoaXMgc3RhZ2UganVzdCBjb252ZXJ0Ci0rICogdGhlIGlucHV0IGxp bmUgaW50byBhbiBhY2NlcHRhYmxlIGZvcm0uIEtleXdvcmQgbGluZXMgY29udmVydGVkIHRvIGZv cm0KLSsgKiAia2V5d29yZCA9IHZhbHVlXG4iIG5vIG1hdHRlciB3aGF0IHdoaXRlIHNwYWNlIHBy ZXNlbnQsIGFsbCBvdGhlciBsaW5lcwotKyAqIGp1c3QgaGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGlu ZyBzcGFjZSByZW1vdmVkLgotKyAqLwotKwotK2ludCB0aWR5X2xpbmUoY2hhciAqbGluZWJ1Ziwg Y2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0r CXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBT a2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtl eXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0 cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScganVzdCBjaG9wIGxlYWRpbmcs IHRyYWlsaW5nIHdzICovCi0rCWlmICghcCkKLSsJCXsKLSsJCXAgPSBrZXl3b3JkICsgc3RybGVu KGtleXdvcmQpIC0gMTsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwkJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsK LSsJCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsKLSsJcSA9 IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFs dWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwot Kwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsK LSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsg c3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9IDA7Ci0rCi0rCXN0cmNweShvbGluZWJ1Ziwga2V5 d29yZCk7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIiA9ICIpOwotKwlzdHJjYXQob2xpbmVidWYsIHZh bHVlKTsKLSsJc3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsK LSsvKiBOQjogdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBfYml0c18gcmVhZCAqLwotK2ludCBi aW50MmJpbihjb25zdCBjaGFyICppbiwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAg ICB7Ci0rICAgIGludCBuOwotKwotKyAgICBtZW1zZXQob3V0LDAsbGVuKTsKLSsgICAgZm9yKG49 MCA7IG4gPCBsZW4gOyArK24pCi0rCWlmKGluW25dID09ICcxJykKLSsJICAgIG91dFtuLzhdfD0o MHg4MCA+PiAobiU4KSk7Ci0rICAgIHJldHVybiBsZW47Ci0rICAgIH0KLSsKLStpbnQgYmluMmJp bnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsg ICAgaW50IG47Ci0rCi0rICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQotKwlvdXRbbl09KGlu W24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ICcxJyA6ICcwJzsKLSsgICAgcmV0dXJuIG47Ci0rICAg IH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KLSsKLSt2b2lkIFByaW50VmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGlu dCBsZW4pCi0rewotKyNpZiBWRVJCT1NFCi0rICBjaGFyIG9idWZbMjA0OF07Ci0rICBpbnQgb2xl bjsKLSsgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgIHByaW50ZigiJXMgPSAl LipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyNlbmRpZgotK30KLSsKLSt2b2lkIE91dHB1dFZh bHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuLCBGSUxFICpyZnAsaW50 IGJpdG1vZGUpCi0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhdOwotKyAgICBpbnQgb2xlbjsK LSsKLSsgICAgaWYoYml0bW9kZSkKLSsJb2xlbj1iaW4yYmludCh2YWwsbGVuLG9idWYpOwotKyAg ICBlbHNlCi0rCW9sZW49YmluMmhleCh2YWwsbGVuLG9idWYpOwotKwotKyAgICBmcHJpbnRmKHJm cCwgIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsjaWYgVkVSQk9TRQotKyAgICBw cmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsjZW5kaWYKLSsgICAgfQot KwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxm dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxm dGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxm dGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTMyOTQ4ODkgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJMjAxMi0wMi0y OSAxMDozMzowMi43OTMyOTQ4ODkgKzAxMDAKLUBAIC0wLDAgKzEsMzU5IEBACi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n Ci0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S Ci0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QKLSsgICAgewotKyAgICBjb25zdCB1bnNpZ25l ZCBjaGFyIGtleVsxNl07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XTsK LSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzE2XTsKLSsgICAgfSB0ZXN0c1td PQotKwl7Ci0rCXsKLSsJeyAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcs Ci0rCSAgMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGIH0sCi0rCXsgMHgw MCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3LAotKwkgIDB4ODgsMHg5OSwweEFB LDB4QkIsMHhDQywweERELDB4RUUsMHhGRiB9LAotKwl7IDB4NjksMHhDNCwweEUwLDB4RDgsMHg2 QSwweDdCLDB4MDQsMHgzMCwKLSsJICAweEQ4LDB4Q0QsMHhCNywweDgwLDB4NzAsMHhCNCwweEM1 LDB4NUEgfSwKLSsJfSwKLSsJfTsKLSsKLStzdGF0aWMgaW50IGNvcnJ1cHRfYWVzOwotKwotK3Zv aWQgRklQU19jb3JydXB0X2FlcygpCi0rICAgIHsKLSsgICAgY29ycnVwdF9hZXMgPSAxOwotKyAg ICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsg ICAgaW50IHJldCA9IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgZm9yKG49MCA7IG4gPCAxIDsgKytuKQotKwl7Ci0r CXVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsKLSsJbWVtY3B5KGtleSwgdGVzdHNbbl0ua2V5LCBz aXplb2Yoa2V5KSk7Ci0rCWlmIChjb3JydXB0X2FlcykKLSsJCWtleVswXSsrOwotKwlpZiAoZmlw c19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwKLSsJCQkJa2V5LCBOVUxMLAot KwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQsCi0rCQkJCXRlc3RzW25dLmNpcGhlcnRleHQsCi0rCQkJ CTE2KSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgot KyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0r CSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qIEFFUy1DQ00gdGVzdCBkYXRh IGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgY2NtX2tleVtdID0gewotKwkweGNlLDB4YjAsMHgwOSwweGFlLDB4YTQsMHg0NSww eDQ0LDB4NTEsMHhmZSwweGFkLDB4ZjAsMHhlNiwKLSsJMHhiMywweDZmLDB4NDUsMHg1NSwweDVk LDB4ZDAsMHg0NywweDIzLDB4YmEsMHhhNCwweDQ4LDB4ZTgKLSt9OwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtdID0gewotKwkweDc2LDB4NDAsMHg0MywweGM0LDB4OTQs MHg2MCwweGI3Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fYWRhdGFbXSA9 IHsKLSsJMHg2ZSwweDgwLDB4ZGQsMHg3ZiwweDFiLDB4YWQsMHhmMywweGExLDB4YzksMHhhYiww eDI1LDB4YzcsCi0rCTB4NWYsMHgxMCwweGJkLDB4ZTcsMHg4YywweDIzLDB4ZmEsMHgwZSwweGI4 LDB4ZjksMHhhYSwweGE1LAotKwkweDNhLDB4ZGUsMHhmYiwweGY0LDB4Y2IsMHhmNywweDhmLDB4 ZTQKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9wdFtdID0gewotKwkweGM4 LDB4ZDIsMHg3NSwweGY5LDB4MTksMHhlMSwweDdkLDB4N2YsMHhlNiwweDljLDB4MmEsMHgxZiwK LSsJMHg1OCwweDkzLDB4OWQsMHhmZSwweDRkLDB4NDAsMHgzNywweDkxLDB4YjUsMHhkZiwweDEz LDB4MTAKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9jdFtdID0gewotKwkw eDhhLDB4MGYsMHgzZCwweDgyLDB4MjksMHhlNCwweDhlLDB4NzQsMHg4NywweGZkLDB4OTUsMHhh MiwKLSsJMHg4YSwweGQzLDB4OTIsMHhjOCwweDBiLDB4MzYsMHg4MSwweGQ0LDB4ZmIsMHhjNyww eGJiLDB4ZmQKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV90YWdbXSA9IHsK LSsJMHgyZCwweGQ2LDB4ZWYsMHgxYywweDQ1LDB4ZDQsMHhjYywweGI3LDB4MjMsMHhkYywweDA3 LDB4NDQsCi0rCTB4MTQsMHhkYiwweDUwLDB4NmQKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0 X2Flc19jY20odm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBvdXRb MTI4XSwgdGFnWzE2XTsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9p bml0KCZjdHgpOwotKwltZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0rCWlmICghRVZQX0Np cGhlckluaXQoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIDEpKQotKwkJZ290 byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VU X0lWTEVOLAotKwkJCQkJc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQotKwkJZ290byBlcnI7Ci0r CWlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKLSsJ CQkJCXNpemVvZihjY21fdGFnKSwgTlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ2lw aGVySW5pdCgmY3R4LCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDEpKQotKwkJZ290byBlcnI7 Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihjY21fcHQpKSAhPSBz aXplb2YoY2NtX3B0KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxM LCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCi0rCQlnb3RvIGVycjsKLSsJaWYg KEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSAhPSBzaXplb2Yo Y2NtX2N0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0 eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIDE2LCB0YWcpKQotKwkJZ290byBlcnI7Ci0rCWlmICht ZW1jbXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykpCi0rCQl8fCBtZW1jbXAob3V0LCBj Y21fY3QsIHNpemVvZihjY21fY3QpKSkKLSsJCWdvdG8gZXJyOwotKwotKwltZW1zZXQob3V0LCAw LCBzaXplb2Yob3V0KSk7Ci0rCi0rCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQX2Flc18x OTJfY2NtKCksIE5VTEwsIE5VTEwsIDApKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhF Ul9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLAotKwkJCQkJc2l6ZW9mKGNj bV9ub25jZSksIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCWlmICghRVZQX0NJUEhFUl9DVFhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYsIHRhZykpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDApKQot KwkJZ290byBlcnI7Ci0rCWlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihj Y21fY3QpKSAhPSBzaXplb2YoY2NtX2N0KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhl cigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCi0rCQlnb3Rv IGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihjY21fY3Qp KSAhPSBzaXplb2YoY2NtX3B0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKG91dCwg Y2NtX3B0LCBzaXplb2YoY2NtX3B0KSkpCi0rCQlnb3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsK LSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKwotKwlpZiAocmV0ID09 IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00sRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0dXJu IHJldDsKLSsKLSsJfQotKwotKy8qIEFFUy1HQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMg dGVzdCB2ZWN0b3JzICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2tleVtd ID0gewotKwkweGVlLDB4YmMsMHgxZiwweDU3LDB4NDgsMHg3ZiwweDUxLDB4OTIsMHgxYywweDA0 LDB4NjUsMHg2NiwKLSsJMHg1ZiwweDhhLDB4ZTYsMHhkMSwweDY1LDB4OGIsMHhiMiwweDZkLDB4 ZTYsMHhmOCwweGEwLDB4NjksCi0rCTB4YTMsMHg1MiwweDAyLDB4OTMsMHhhNSwweDcyLDB4MDcs MHg4ZgotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2l2W10gPSB7Ci0rCTB4 OTksMHhhYSwweDNlLDB4NjgsMHhlZCwweDgxLDB4NzMsMHhhMCwweGVlLDB4ZDAsMHg2NiwweDg0 Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fcHRbXSA9IHsKLSsJMHhmNSww eDZlLDB4ODcsMHgwNSwweDViLDB4YzMsMHgyZCwweDBlLDB4ZWIsMHgzMSwweGIyLDB4ZWEsCi0r CTB4Y2MsMHgyYiwweGYyLDB4YTUKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdj bV9hYWRbXSA9IHsKLSsJMHg0ZCwweDIzLDB4YzMsMHhjZSwweGMzLDB4MzQsMHhiNCwweDliLDB4 ZGIsMHgzNywweDBjLDB4NDMsCi0rCTB4N2YsMHhlYywweDc4LDB4ZGUKLSt9OwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGdjbV9jdFtdID0gewotKwkweGY3LDB4MjYsMHg0NCwweDEzLDB4 YTgsMHg0YywweDBlLDB4N2MsMHhkNSwweDM2LDB4ODYsMHg3ZSwKLSsJMHhiOSwweGYyLDB4MTcs MHgzNgotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3RhZ1tdID0gewotKwkw eDY3LDB4YmEsMHgwNSwweDEwLDB4MjYsMHgyYSwweGU0LDB4ODcsMHhkNywweDM3LDB4ZWUsMHg2 MiwKLSsJMHg5OCwweGY3LDB4N2UsMHgwYwotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVz X2djbSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIG91dFsxMjhd LCB0YWdbMTZdOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQo JmN0eCk7Ci0rCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsJbWVtc2V0KHRhZywgMCwg c2l6ZW9mKHRhZykpOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIEVWUF9hZXNfMjU2X2dj bSgpLCBOVUxMLCBOVUxMLCAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DSVBIRVJfQ1RY X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKLSsJCQkJCXNpemVvZihnY21faXYp LCBOVUxMKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEws IGdjbV9rZXksIGdjbV9pdiwgMSkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0 eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCi0rCQlnb3RvIGVycjsKLSsJ aWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fcHQsIHNpemVvZihnY21fcHQpKSAhPSBzaXpl b2YoZ2NtX2N0KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBO VUxMLCAwKSA8IDApCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJs KCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKLSsJCWdvdG8gZXJyOwotKwot KwlpZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1lbWNtcChvdXQsIGdjbV9jdCwgMTYp KQotKwkJZ290byBlcnI7Ci0rCi0rCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsKLSsJ aWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwg MCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9D VFJMX0dDTV9TRVRfSVZMRU4sCi0rCQkJCQlzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCi0rCQlnb3Rv IGVycjsKLSsJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRf VEFHLCAxNiwgdGFnKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgs IE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMCkpCi0rCQlnb3RvIGVycjsKLSsJaWYgKEVWUF9DaXBo ZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCi0rCQlnb3RvIGVy cjsKLSsJaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fY3QsIHNpemVvZihnY21fY3QpKSAh PSBzaXplb2YoZ2NtX3B0KSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBO VUxMLCBOVUxMLCAwKSA8IDApCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKG1lbWNtcChvdXQsIGdj bV9wdCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycjoKLSsJRVZQ X0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJ RklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfR0NNLEZJUFNfUl9TRUxGVEVTVF9GQUlM RUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldHVybiByZXQ7Ci0rCi0rCX0K LSsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2tleVtdID0gewotKwkw eGExLDB4YjksMHgwYywweGJhLDB4M2YsMHgwNiwweGFjLDB4MzUsMHgzYiwweDJjLDB4MzQsMHgz OCwKLSsJMHg3NiwweDA4LDB4MTcsMHg2MiwweDA5LDB4MDksMHgyMywweDAyLDB4NmUsMHg5MSww eDc3LDB4MTgsCi0rCTB4MTUsMHhmMiwweDlkLDB4YWIsMHgwMSwweDkzLDB4MmYsMHgyZgotK307 Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9pW10gPSB7Ci0rCTB4NGYsMHhh ZSwweGY3LDB4MTEsMHg3YywweGRhLDB4NTksMHhjNiwweDZlLDB4NGIsMHg5MiwweDAxLAotKwkw eDNlLDB4NzYsMHg4YSwweGQ1Ci0rfTsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNf MTI4X3B0W10gPSB7Ci0rCTB4ZWIsMHhhYiwweGNlLDB4OTUsMHhiMSwweDRkLDB4M2MsMHg4ZCww eDZmLDB4YjMsMHg1MCwweDM5LAotKwkweDA3LDB4OTAsMHgzMSwweDFjCi0rfTsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2N0W10gPSB7Ci0rCTB4NzcsMHg4YSwweGU4LDB4 YjQsMHgzYywweGI5LDB4OGQsMHg1YSwweDgyLDB4NTAsMHg4MSwweGQ1LAotKwkweGJlLDB4NDcs MHgxYywweDYzCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2tl eVtdID0gewotKwkweDFlLDB4YTYsMHg2MSwweGM1LDB4OGQsMHg5NCwweDNhLDB4MGUsMHg0OCww eDAxLDB4ZTQsMHgyZiwKLSsJMHg0YiwweDA5LDB4NDcsMHgxNCwweDllLDB4N2YsMHg5ZiwweDhl LDB4M2UsMHg2OCwweGQwLDB4YzcsCi0rCTB4NTAsMHg1MiwweDEwLDB4YmQsMHgzMSwweDFhLDB4 MGUsMHg3YywweGQ2LDB4ZTEsMHgzZiwweGZkLAotKwkweGYyLDB4NDEsMHg4ZCwweDhkLDB4MTks MHgxMSwweGMwLDB4MDQsMHhjZCwweGE1LDB4OGQsMHhhMywKLSsJMHhkNiwweDE5LDB4YjcsMHhl MiwweGI5LDB4MTQsMHgxZSwweDU4LDB4MzEsMHg4ZSwweGVhLDB4MzksCi0rCTB4MmMsMHhmNCww eDFiLDB4MDgKLSt9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfaVtdID0g ewotKwkweGFkLDB4ZjgsMHhkOSwweDI2LDB4MjcsMHg0NiwweDRhLDB4ZDIsMHhmMCwweDQyLDB4 OGUsMHg4NCwKLSsJMHhhOSwweGY4LDB4NzUsMHg2NAotK307Ci0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0gewotKwkweDJlLDB4ZWQsMHhlYSwweDUyLDB4Y2QsMHg4 MiwweDE1LDB4ZTEsMHhhYywweGM2LDB4NDcsMHhlOCwKLSsJMHgxMCwweGJiLDB4YzMsMHg2NCww eDJlLDB4ODcsMHgyOCwweDdmLDB4OGQsMHgyZSwweDU3LDB4ZTMsCi0rCTB4NmMsMHgwYSwweDI0 LDB4ZmIsMHhjMSwweDJhLDB4MjAsMHgyZQotK307Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgWFRTXzI1Nl9jdFtdID0gewotKwkweGNiLDB4YWEsMHhkMCwweGUyLDB4ZjYsMHhjZSwweGEz LDB4ZjUsMHgwYiwweDM3LDB4ZjksMHgzNCwKLSsJMHhkNCwweDZhLDB4OWIsMHgxMywweDBiLDB4 OWQsMHg1NCwweGYwLDB4N2UsMHgzNCwweGYzLDB4NmEsCi0rCTB4ZjcsMHg5MywweGU4LDB4NmYs MHg3MywweGM2LDB4ZDcsMHhkYgotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0cygp Ci0rCXsKLSsJaW50IHJldCA9IDE7Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Fl c18xMjhfeHRzKCksCi0rCQkJCVhUU18xMjhfa2V5LCBYVFNfMTI4X2ksIFhUU18xMjhfcHQsIFhU U18xMjhfY3QsCi0rCQkJCXNpemVvZihYVFNfMTI4X3B0KSkgPD0gMCkKLSsJCXJldCA9IDA7Ci0r Ci0rCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMjU2X3h0cygpLAotKwkJCQlY VFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBYVFNfMjU2X2N0LAotKwkJCQlzaXpl b2YoWFRTXzI1Nl9wdCkpIDw9IDApCi0rCQlyZXQgPSAwOwotKwotKwlFVlBfQ0lQSEVSX0NUWF9j bGVhbnVwKCZjdHgpOwotKwlpZiAocmV0ID09IDApCi0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX0FFU19YVFMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCXJldHVybiByZXQ7Ci0r CX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Zmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzLmMKLS0tLSBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTItMDItMjkgMTA6 MzM6MDIuNzkzMjk0ODg5ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9maXBzLmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTMyOTQ4ODkgKzAxMDAKLUBAIC0wLDAgKzEs NDg5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAg ZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgot KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0r ICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2RlZmluZSBfR05VX1NPVVJD RQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz X3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9i aW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxsaW1pdHMuaD4KLSsjaW5jbHVk ZSA8ZGxmY24uaD4KLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0r I2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rI2lmbmRlZiBQQVRIX01BWAotKyNkZWZpbmUgUEFU SF9NQVggMTAyNAotKyNlbmRpZgotKwotK3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsID0g MDsKLStzdGF0aWMgaW50IGZpcHNfbW9kZSA9IDA7Ci0rc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQg PSAwOwotKwotK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOwotK3N0YXRp YyBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsKLStzdGF0aWMgaW50IGZpcHNfY2xl YXJfb3duaW5nX3RocmVhZCh2b2lkKTsKLSsKLSsjZGVmaW5lIGZpcHNfd19sb2NrKCkJQ1JZUFRP X3dfbG9jayhDUllQVE9fTE9DS19GSVBTKQotKyNkZWZpbmUgZmlwc193X3VubG9jaygpCUNSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19GSVBTKQotKyNkZWZpbmUgZmlwc19yX2xvY2soKQlDUllQ VE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rI2RlZmluZSBmaXBzX3JfdW5sb2NrKCkJQ1JZ UFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpCi0rCi0rc3RhdGljIHZvaWQgZmlwc19zZXRf bW9kZShpbnQgb25vZmYpCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmlu Z190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfc3RhcnRlZCkKLSsJCXsKLSsJCWlmICghb3duaW5n X3RocmVhZCkgZmlwc193X2xvY2soKTsKLSsJCWZpcHNfbW9kZSA9IG9ub2ZmOwotKwkJaWYgKCFv d25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgRklQU19t b2R1bGVfbW9kZSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgb3duaW5nX3RocmVh ZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoZmlwc19zdGFydGVkKQotKwkJ ewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOwotKwkJcmV0ID0gZmlwc19t b2RlOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCQl9Ci0rCXJl dHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKLSsgICAg ewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaWYgKGZpcHNfc3RhcnRlZCkKLSsJewotKwlpbnQg b3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoIW93bmlu Z190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCXJldCA9IGZpcHNfc2VsZnRlc3RfZmFpbDsKLSsJ aWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCX0KLSsgICAgcmV0dXJuIHJl dDsKLSsgICAgfQotKwotKy8qIFNlbGZ0ZXN0IGZhaWx1cmUgZmF0YWwgZXhpdCByb3V0aW5lLiBU aGlzIHdpbGwgYmUgY2FsbGVkCi0rICogZHVyaW5nICphbnkqIGNyeXB0b2dyYXBoaWMgb3BlcmF0 aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0KLSsgKiBvdmVyaGVhZCBwb3NzaWJsZSB0byBhdm9pZCB0 b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0LgotKyAqLwotKwotK3ZvaWQgRklQU19zZWxmdGVzdF9j aGVjayh2b2lkKQotKyAgICB7Ci0rICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpCi0rCXsKLSsJ T3BlblNTTERpZShfX0ZJTEVfXyxfX0xJTkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVS RSIpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCkK LSsgICAgewotKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICB9Ci0rCi0rLyogd2Ug aW1wbGVtZW50IHdoYXQgbGliZmlwc2NoZWNrIGRvZXMgb3Vyc2VsdmVzICovCi0rCi0rc3RhdGlj IGludAotK2dldF9saWJyYXJ5X3BhdGgoY29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAq c3ltYm9sbmFtZSwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4pCi0rewotKwlEbF9pbmZvIGlu Zm87Ci0rCXZvaWQgKmRsLCAqc3ltOwotKwlpbnQgcnYgPSAtMTsKLSsKLSsgICAgICAgIGRsID0g ZGxvcGVuKGxpYm5hbWUsIFJUTERfTEFaWSk7Ci0rICAgICAgICBpZiAoZGwgPT0gTlVMTCkgewot KwkgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0gICAgICAgCi0rCi0rCXN5bSA9IGRsc3lt KGRsLCBzeW1ib2xuYW1lKTsKLSsKLSsJaWYgKHN5bSAhPSBOVUxMICYmIGRsYWRkcihzeW0sICZp bmZvKSkgewotKwkJc3RybmNweShwYXRoLCBpbmZvLmRsaV9mbmFtZSwgcGF0aGxlbi0xKTsKLSsJ CXBhdGhbcGF0aGxlbi0xXSA9ICdcMCc7Ci0rCQlydiA9IDA7Ci0rCX0KLSsKLSsJZGxjbG9zZShk bCk7CQotKwkKLSsJcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgY29uc3QgY2hhciBjb252W10g PSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0rCi0rc3RhdGljIGNoYXIgKgotK2JpbjJoZXgodm9pZCAq YnVmLCBzaXplX3QgbGVuKQotK3sKLSsJY2hhciAqaGV4LCAqcDsKLSsJdW5zaWduZWQgY2hhciAq c3JjID0gYnVmOwotKwkKLSsJaGV4ID0gbWFsbG9jKGxlbiAqIDIgKyAxKTsKLSsJaWYgKGhleCA9 PSBOVUxMKQotKwkJcmV0dXJuIE5VTEw7Ci0rCi0rCXAgPSBoZXg7Ci0rCi0rCXdoaWxlIChsZW4g PiAwKSB7Ci0rCQl1bnNpZ25lZCBjOwotKwotKwkJYyA9ICpzcmM7Ci0rCQlzcmMrKzsKLSsKLSsJ CSpwID0gY29udltjID4+IDRdOwotKwkJKytwOwotKwkJKnAgPSBjb252W2MgJiAweDBmXTsKLSsJ CSsrcDsKLSsJCS0tbGVuOwotKwl9Ci0rCSpwID0gJ1wwJzsKLSsJcmV0dXJuIGhleDsKLSt9Ci0r Ci0rI2RlZmluZSBITUFDX1BSRUZJWCAiLiIgCi0rI2RlZmluZSBITUFDX1NVRkZJWCAiLmhtYWMi IAotKyNkZWZpbmUgUkVBRF9CVUZGRVJfTEVOR1RIIDE2Mzg0Ci0rCi0rc3RhdGljIGNoYXIgKgot K21ha2VfaG1hY19wYXRoKGNvbnN0IGNoYXIgKm9yaWdwYXRoKQotK3sKLSsJY2hhciAqcGF0aCwg KnA7Ci0rCWNvbnN0IGNoYXIgKmZuOwotKwotKwlwYXRoID0gbWFsbG9jKHNpemVvZihITUFDX1BS RUZJWCkgKyBzaXplb2YoSE1BQ19TVUZGSVgpICsgc3RybGVuKG9yaWdwYXRoKSk7Ci0rCWlmKHBh dGggPT0gTlVMTCkgewotKwkJcmV0dXJuIE5VTEw7Ci0rCX0KLSsKLSsJZm4gPSBzdHJyY2hyKG9y aWdwYXRoLCAnLycpOwotKwlpZiAoZm4gPT0gTlVMTCkgewotKwkJZm4gPSBvcmlncGF0aDsKLSsJ fSBlbHNlIHsKLSsJCSsrZm47Ci0rCX0KLSsKLSsJc3RybmNweShwYXRoLCBvcmlncGF0aCwgZm4t b3JpZ3BhdGgpOwotKwlwID0gcGF0aCArIChmbiAtIG9yaWdwYXRoKTsKLSsJcCA9IHN0cGNweShw LCBITUFDX1BSRUZJWCk7Ci0rCXAgPSBzdHBjcHkocCwgZm4pOwotKwlwID0gc3RwY3B5KHAsIEhN QUNfU1VGRklYKTsKLSsKLSsJcmV0dXJuIHBhdGg7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBjaGFy IGhtYWNrZXlbXSA9ICJvcmJvRGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFyUCI7Ci0rCi0rc3Rh dGljIGludAotK2NvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKipidWYs IHNpemVfdCAqaG1hY2xlbikKLSt7Ci0rCUZJTEUgKmYgPSBOVUxMOwotKwlpbnQgcnYgPSAtMTsK LSsJdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xFTkdUSF07Ci0rCXNpemVfdCBsZW47 Ci0rCXVuc2lnbmVkIGludCBobGVuOwotKwlITUFDX0NUWCBjOwotKwotKwlITUFDX0NUWF9pbml0 KCZjKTsKLSsKLSsJZiA9IGZvcGVuKHBhdGgsICJyIik7Ci0rCi0rCWlmIChmID09IE5VTEwpIHsK LSsJCWdvdG8gZW5kOwotKwl9Ci0rCi0rCUhNQUNfSW5pdCgmYywgaG1hY2tleSwgc2l6ZW9mKGht YWNrZXkpLTEsIEVWUF9zaGEyNTYoKSk7Ci0rCi0rCXdoaWxlICgobGVuPWZyZWFkKHJidWYsIDEs IHNpemVvZihyYnVmKSwgZikpICE9IDApIHsKLSsJCUhNQUNfVXBkYXRlKCZjLCByYnVmLCBsZW4p OwotKwl9Ci0rCi0rCWxlbiA9IHNpemVvZihyYnVmKTsKLSsJLyogcmV1c2UgcmJ1ZiBmb3IgaG1h YyAqLwotKwlITUFDX0ZpbmFsKCZjLCByYnVmLCAmaGxlbik7Ci0rCi0rCSpidWYgPSBtYWxsb2Mo aGxlbik7Ci0rCWlmICgqYnVmID09IE5VTEwpIHsKLSsJCWdvdG8gZW5kOwotKwl9Ci0rCi0rCSpo bWFjbGVuID0gaGxlbjsKLSsKLSsJbWVtY3B5KCpidWYsIHJidWYsIGhsZW4pOwotKwotKwlydiA9 IDA7Ci0rZW5kOgotKwlITUFDX0NUWF9jbGVhbnVwKCZjKTsKLSsKLSsJaWYgKGYpCi0rCQlmY2xv c2UoZik7Ci0rCi0rCXJldHVybiBydjsKLSt9Ci0rCi0rc3RhdGljIGludAotK0ZJUFNDSEVDS192 ZXJpZnkoY29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSkKLSt7Ci0r CWNoYXIgcGF0aFtQQVRIX01BWCsxXTsKLSsJaW50IHJ2OwotKwlGSUxFICpoZjsKLSsJY2hhciAq aG1hY3BhdGgsICpwOwotKwljaGFyICpobWFjID0gTlVMTDsKLSsJc2l6ZV90IG47Ci0rCQotKwly diA9IGdldF9saWJyYXJ5X3BhdGgobGlibmFtZSwgc3ltYm9sbmFtZSwgcGF0aCwgc2l6ZW9mKHBh dGgpKTsKLSsKLSsJaWYgKHJ2IDwgMCkKLSsJCXJldHVybiAwOwotKwotKwlobWFjcGF0aCA9IG1h a2VfaG1hY19wYXRoKHBhdGgpOwotKwlpZiAoaG1hY3BhdGggPT0gTlVMTCkKLSsJCXJldHVybiAw OwotKwotKwloZiA9IGZvcGVuKGhtYWNwYXRoLCAiciIpOwotKwlpZiAoaGYgPT0gTlVMTCkgewot KwkJZnJlZShobWFjcGF0aCk7Ci0rCQlyZXR1cm4gMDsKLSsJfQotKwotKwlpZiAoZ2V0bGluZSgm aG1hYywgJm4sIGhmKSA+IDApIHsKLSsJCXZvaWQgKmJ1ZjsKLSsJCXNpemVfdCBobWFjbGVuOwot KwkJY2hhciAqaGV4OwotKwotKwkJaWYgKChwPXN0cmNocihobWFjLCAnXG4nKSkgIT0gTlVMTCkK LSsJCQkqcCA9ICdcMCc7Ci0rCi0rCQlpZiAoY29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1Ziwg JmhtYWNsZW4pIDwgMCkgewotKwkJCXJ2ID0gLTQ7Ci0rCQkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0r CQlpZiAoKGhleD1iaW4yaGV4KGJ1ZiwgaG1hY2xlbikpID09IE5VTEwpIHsKLSsJCQlmcmVlKGJ1 Zik7Ci0rCQkJcnYgPSAtNTsKLSsJCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJCWlmIChzdHJjbXAo aGV4LCBobWFjKSAhPSAwKSB7Ci0rCQkJcnYgPSAtMTsKLSsJCX0KLSsJCWZyZWUoYnVmKTsKLSsJ CWZyZWUoaGV4KTsKLSsJfQotKwotK2VuZDoKLSsJZnJlZShobWFjKTsKLSsJZnJlZShobWFjcGF0 aCk7Ci0rCWZjbG9zZShoZik7Ci0rCi0rCWlmIChydiA8IDApCi0rCQlyZXR1cm4gMDsKLSsKLSsJ LyogY2hlY2sgc3VjY2Vzc2Z1bCAqLwotKwlyZXR1cm4gMTsJCi0rfQotKwotK2ludCBGSVBTX21v ZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1dGgpCi0rICAgIHsKLSsgICAg aW50IHJldCA9IDA7Ci0rCi0rICAgIGZpcHNfd19sb2NrKCk7Ci0rICAgIGZpcHNfc3RhcnRlZCA9 IDE7Ci0rICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKLSsKLSsgICAgaWYob25vZmYpCi0r CXsKLSsKLSsJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsKLSsJLyogRG9uJ3QgZ28gaW50byBG SVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdpYwotKwkgICBzZWVkaW5n ICovCi0rCWlmKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpOwot KwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3Rv IGVuZDsKLSsJICAgIH0KLSsKLSsjaWZkZWYgT1BFTlNTTF9JQTMyX1NTRTIKLSsJewotKwlleHRl cm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QWzJdOwotKwlpZiAoKE9QRU5TU0xfaWEz MmNhcF9QWzBdICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9VTlNVUFBPUlRF RF9QTEFURk9STSk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0g MDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwlPUEVOU1NMX2lhMzJjYXBfUFswXSB8PSAo MTw8MjgpOwkvKiBzZXQgInNoYXJlZCBjYWNoZSIJKi8KLSsJT1BFTlNTTF9pYTMyY2FwX1BbMV0g Jj0gfigxPDwoNjAtMzIpKTsJLyogY2xlYXIgQVZYCQkqLwotKwl9Ci0rI2VuZGlmCi0rCi0rCWlm KCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJjcnlwdG8uc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwi RklQU19tb2RlX3NldCIpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RV TEVfTU9ERV9TRVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKTsKLSsJICAgIGZp cHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0r CSAgICB9Ci0rCi0rCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJzc2wuc28uIiBTSExJQl9WRVJT SU9OX05VTUJFUiwiU1NMX0NUWF9uZXciKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7 Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdv dG8gZW5kOwotKwkgICAgfQotKwotKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCi0rCSAgICBmaXBzX3Nl dF9tb2RlKG9ub2ZmKTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsJcmV0ID0g MTsKLSsJZ290byBlbmQ7Ci0rCX0KLSsgICAgZmlwc19zZXRfbW9kZSgwKTsKLSsgICAgZmlwc19z ZWxmdGVzdF9mYWlsID0gMDsKLSsgICAgcmV0ID0gMTsKLStlbmQ6Ci0rICAgIGZpcHNfY2xlYXJf b3duaW5nX3RocmVhZCgpOwotKyAgICBmaXBzX3dfdW5sb2NrKCk7Ci0rICAgIHJldHVybiByZXQ7 Ci0rICAgIH0KLSsKLStzdGF0aWMgQ1JZUFRPX1RIUkVBRElEIGZpcHNfdGhyZWFkOwotK3N0YXRp YyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKLSsKLStzdGF0aWMgaW50IGZpcHNfaXNfb3duaW5n X3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19zdGFydGVk KQotKwkJewotKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlw c190aHJlYWRfc2V0KQotKwkJCXsKLSsJCQlDUllQVE9fVEhSRUFESUQgY3VyOwotKwkJCUNSWVBU T19USFJFQURJRF9jdXJyZW50KCZjdXIpOwotKwkJCWlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgm Y3VyLCAmZmlwc190aHJlYWQpKQotKwkJCQlyZXQgPSAxOwotKwkJCX0KLSsJCUNSWVBUT19yX3Vu bG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStp bnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwot KwlpZiAoZmlwc19zdGFydGVkKQotKwkJewotKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19G SVBTMik7Ci0rCQlpZiAoIWZpcHNfdGhyZWFkX3NldCkKLSsJCQl7Ci0rCQkJQ1JZUFRPX1RIUkVB RElEX2N1cnJlbnQoJmZpcHNfdGhyZWFkKTsKLSsJCQlyZXQgPSAxOwotKwkJCWZpcHNfdGhyZWFk X3NldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK LSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJl YWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfc3RhcnRlZCkKLSsJ CXsKLSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhy ZWFkX3NldCkKLSsJCQl7Ci0rCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKLSsJCQlDUllQVE9fVEhS RUFESURfY3VycmVudCgmY3VyKTsKLSsJCQlpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwg JmZpcHNfdGhyZWFkKSkKLSsJCQkJZmlwc190aHJlYWRfc2V0ID0gMDsKLSsJCQl9Ci0rCQlDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9 Ci0rCi0rCi0rI2lmIDAKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3VyZSB0aGUg ZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgotKyAqIG5hbWUgaXMgdG8ga2VlcCB0 aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0Ci0rICovCi0rdm9pZCBoYXNoX2ZpbmFsKHZv aWQpCi0rCXsKLSsJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVU SE9EKTsKLSsJfQotKyNlbmRpZgotKwotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0y OSAxMDozMzowMi43OTMyOTQ4ODkgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzkzMjk0ODg5 ICswMTAwCi1AQCAtMCwwICsxLDE2MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu Ci0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0r ICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRl ICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3Qg ewotKwlpbnQgbmlkOwotKwljb25zdCB1bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5H VEhdOyBzaXplX3Qga2V5c2l6ZTsKLSsJY29uc3QgdW5zaWduZWQgY2hhciBtc2dbNjRdOyBzaXpl X3QgbXNnc2l6ZTsKLSsJY29uc3QgdW5zaWduZWQgY2hhciBtYWNbMzJdOyBzaXplX3QgbWFjc2l6 ZTsKLSt9IENNQUNfS0FUOwotKwotKy8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGlj YXRpb25zL25pc3RwdWJzLzgwMC0zOEIvU1BfODAwLTM4Qi5wZGYgKi8KLStzdGF0aWMgY29uc3Qg Q01BQ19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHsJTklEX2Flc18xMjhfY2JjLAkvKiBDb3VudCA9 IDMyIGZyb20gQ01BQ0dlbkFFUzEyOC50eHQgKi8KLSsJeyAweDc3LDB4YTcsMHg3ZiwweGFmLCAw eDI5LDB4MGMsMHgxZiwweGEzLAotKwkgIDB4MGMsMHg2OCwweDNkLDB4ZjEsIDB4NmIsMHhhNyww eGE3LDB4N2IsIH0sIDEyOCwKLSsJeyAweDAyLDB4MDYsMHg4MywweGUxLCAweGYwLDB4MzksMHgy ZiwweDRjLAotKwkgIDB4YWMsMHg1NCwweDMxLDB4OGIsIDB4NjAsMHgyOSwweDI1LDB4OWUsCi0r CSAgMHg5YywweDU1LDB4M2QsMHhiYywgMHg0YiwweDZhLDB4ZDksMHg5OCwKLSsJICAweGU2LDB4 NGQsMHg1OCwweGU0LCAweGU3LDB4ZGMsMHgyZSwweDEzLCB9LCAyNTYsCi0rCXsgMHhmYiwweGZl LDB4YTQsMHgxYiwgfSwgMzIKLSsgICAgfSwKLSsgICAgewlOSURfYWVzXzE5Ml9jYmMsCS8qIENv dW50ID0gMjMgZnJvbSBDTUFDR2VuQUVTMTkyLnR4dCAqLwotKwl7IDB4N2IsMHgzMiwweDM5LDB4 MTMsIDB4NjksMHhhYSwweDRjLDB4YTksCi0rCSAgMHg3NSwweDU4LDB4MDksMHg1YiwgMHhlMyww eGMzLDB4ZWMsMHg4NiwKLSsJICAweDJiLDB4ZDAsMHg1NywweGNlLCAweGYxLDB4ZTMsMHgyZCww eDYyLCB9LCAxOTIsCi0rCXsgMHgwIH0sIDAsCi0rCXsgMHhlNCwweGQ5LDB4MzQsMHgwYiwgMHgw MywweGU2LDB4N2QsMHhlZiwKLSsJICAweGQ0LDB4OTYsMHg5YywweGMxLCAweGVkLDB4MzcsMHgz NSwweGU2LCB9LCAxMjgsCi0rICAgIH0sCi0rICAgIHsJTklEX2Flc18yNTZfY2JjLAkvKiBDb3Vu dCA9IDMzIGZyb20gQ01BQ0dlbkFFUzI1Ni50eHQgKi8KLSsJeyAweDBiLDB4MTIsMHgyYSwweGM4 LCAweGYzLDB4NGUsMHhkMSwweGZlLAotKwkgIDB4MDgsMHgyYSwweDM2LDB4MjUsIDB4ZDEsMHg1 NywweDU2LDB4MTQsCi0rCSAgMHg1NCwweDE2LDB4N2EsMHhjMSwgMHg0NSwweGExLDB4MGIsMHhi ZiwKLSsJICAweDc3LDB4YzYsMHhhNywweDA1LCAweDk2LDB4ZDUsMHg3NCwweGYxLCB9LCAyNTYs Ci0rCXsgMHg0OSwweDhiLDB4NTMsMHhmZCwgMHhlYywweDg3LDB4ZWQsMHhjYiwKLSsJICAweGYw LDB4NzAsMHg5NywweGRjLCAweGNkLDB4ZTksMHgzYSwweDA4LAotKwkgIDB4NGIsMHhhZCwweDc1 LDB4MDEsIDB4YTIsMHgyNCwweGUzLDB4ODgsCi0rCSAgMHhkZiwweDM0LDB4OWMsMHhlMSwgMHg4 OSwweDU5LDB4ZmUsMHg4NCwKLSsJICAweDg1LDB4ZjgsMHhhZCwweDE1LCAweDM3LDB4ZjAsMHhk OCwweDk2LAotKwkgIDB4ZWEsMHg3MywweGJlLDB4ZGMsIDB4NzIsMHgxNCwweDcxLDB4M2YsIH0s IDM4NCwKLSsJeyAweGY2LDB4MmMsMHg0NiwweDMyLCAweDliLCB9LCA0MCwKLSsgICAgfSwKLSsg ICAgewlOSURfZGVzX2VkZTNfY2JjLAkvKiBDb3VudCA9IDQxIGZyb20gQ01BQ0dlblRERVMzLnJl cSAqLwotKwl7IDB4ODksMHhiYywweGQ5LDB4NTIsIDB4YTgsMHhjOCwweGFiLDB4MzcsCi0rCSAg MHgxYSwweGY0LDB4OGEsMHhjNywgMHhkMCwweDcwLDB4ODUsMHhkNSwKLSsJICAweGVmLDB4Zjcs MHgwMiwweGU2LCAweGQ2LDB4MmMsMHhkYywweDIzLCB9LCAxOTIsCi0rCXsgMHhmYSwweDYyLDB4 MGMsMHgxYiwgMHhiZSwweDk3LDB4MzEsMHg5ZSwKLSsJICAweDlhLDB4MGMsMHhmMCwweDQ5LCAw eDIxLDB4MjEsMHhmNywweGEyLAotKwkgIDB4MGUsMHhiMCwweDhhLDB4NmEsIDB4NzAsMHg5ZCww eGNiLDB4ZDAsCi0rCSAgMHgwYSwweGFmLDB4MzgsMHhlNCwgMHhmOSwweDllLDB4NzUsMHg0ZSwg fSwgMjU2LAotKwl7IDB4OGYsMHg0OSwweGExLDB4YjcsIDB4ZDYsMHhhYSwweDIyLDB4NTgsIH0s IDY0LAotKyAgICB9LAotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfY21hYygpCi0rCXsKLSsJ c2l6ZV90IG4sIG91dGxlbjsKLSsJdW5zaWduZWQgY2hhciAgICBvdXRbMzJdOwotKwljb25zdCBF VlBfQ0lQSEVSICpjaXBoZXI7Ci0rCUNNQUNfQ1RYICpjdHggPSBDTUFDX0NUWF9uZXcoKTsKLSsJ Y29uc3QgQ01BQ19LQVQgKnQ7Ci0rCWludCBydiA9IDE7Ci0rCi0rCWZvcihuPTAsdD12ZWN0b3I7 IG48c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCi0rCQl7Ci0rCQlj aXBoZXIgPSBGSVBTX2dldF9jaXBoZXJieW5pZCh0LT5uaWQpOwotKwkJaWYgKCFjaXBoZXIpCi0r CQkJewotKwkJCXJ2ID0gLTE7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJaWYgKCFDTUFDX0lu aXQoY3R4LCB0LT5rZXksIHQtPmtleXNpemUvOCwgY2lwaGVyLCAwKSkKLSsJCQl7Ci0rCQkJcnYg PSAtMTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCQlpZiAoIUNNQUNfVXBkYXRlKGN0eCwgdC0+ bXNnLCB0LT5tc2dzaXplLzgpKQotKwkJCXsKLSsJCQlydiA9IC0xOwotKwkJCWdvdG8gZXJyOwot KwkJCX0KLSsJCQkKLSsJCWlmICghQ01BQ19GaW5hbChjdHgsIG91dCwgJm91dGxlbikpCi0rCQkJ ewotKwkJCXJ2ID0gLTE7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJQ01BQ19DVFhfY2xlYW51 cChjdHgpOwotKwotKwkJaWYob3V0bGVuIDwgdC0+bWFjc2l6ZS84IHx8IG1lbWNtcChvdXQsdC0+ bWFjLHQtPm1hY3NpemUvOCkpCi0rCQkJewotKwkJICAgIAlydiA9IDA7Ci0rCQkgICAgCX0KLSsJ CX0KLSsKLSsJZXJyOgotKwlDTUFDX0NUWF9mcmVlKGN0eCk7Ci0rCi0rCWlmIChydiA9PSAtMSkK LSsJCXsKLSsJCXJ2ID0gMDsKLSsJCX0KLSsJaWYgKCFydikKLSsJCSAgIEZJUFNlcnIoRklQU19G X0ZJUFNfU0VMRlRFU1RfQ01BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsJcmV0dXJu IHJ2OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MzI5NDg4 OSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2Vs ZnRlc3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5MzI5NDg4OSArMDEwMAotQEAgLTAsMCArMSwx NDcgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsKLStzdGF0aWMgY29uc3Qgc3RydWN0Ci0rICAgIHsKLSsgICAgY29uc3QgdW5zaWduZWQg Y2hhciBrZXlbMTZdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsg ICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotKyAgICB9IHRlc3RzMltdPQot Kwl7Ci0rCXsKLSsJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2LDB4ZWMsCi0r CSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhhNywweGM0IH0sCi0rCXsgMHgwNiww eGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0sCi0rCXsgMHg0YywweDExLDB4MTcs MHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KLSsJfSwKLSsJewotKwl7IDB4NWQsMHg5ZSwweDAx LDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKLSsJICAweDAxLDB4MTYsMHg3YywweDg1LDB4MjMs MHhkZiwweGUwLDB4NjggfSwKLSsJeyAweDljLDB4NTAsMHgwOSwweDBmLDB4NWUsMHg3ZCwweDY5 LDB4N2UgfSwKLSsJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4ZDksMHgwZCwweDllLDB4ZmYgfSwK LSsJfQotKwl9OwotKwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QKLSsgICAgewotKyAgICBjb25zdCB1 bnNpZ25lZCBjaGFyIGtleVsyNF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 WzhdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0rICAgIH0gdGVz dHMzW109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwKLSsJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsCi0rCSAg MHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCi0rCXsgMHg4ZiwweDhm LDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCi0rCXsgMHg1OSwweDhjLDB4ZTUsMHhk MywweDZjLDB4YTIsMHhlYSwweDFiIH0sCi0rCX0sCi0rCXsKLSsJeyAweERDLDB4QkEsMHg5OCww eDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCi0rCSAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4 QUIsMHhDRCwweEVGLAotKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSwweDc0LDB4QkMsMHhD NCB9LAotKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiB9LAotKwl7 IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAotKwl9LAotKwl9Owot KwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9kZXM7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZGVz KCkKLSsgICAgewotKyAgICBjb3JydXB0X2RlcyA9IDE7Ci0rICAgIH0KLSsKLStpbnQgRklQU19z ZWxmdGVzdF9kZXMoKQotKyAgICB7Ci0rICAgIGludCBuLCByZXQgPSAwOwotKyAgICBFVlBfQ0lQ SEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rICAgIC8qIEVu Y3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2Vy cyAqLwotKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBw bGFpbnRleHRbOF07Ci0rCi0rCW1lbWNweShwbGFpbnRleHQsIHRlc3RzMltuXS5wbGFpbnRleHQs IHNpemVvZihwbGFpbnRleHQpKTsKLSsJaWYgKGNvcnJ1cHRfZGVzKQotKwkJcGxhaW50ZXh0WzBd Kys7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwKLSsJ CQkJdGVzdHMyW25dLmtleSwgTlVMTCwKLSsJCQkJcGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lwaGVy dGV4dCwgOCkpCi0rCQlnb3RvIGVycjsKLSsJfQotKwotKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQg d2l0aCAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9yKG49MCA7 IG4gPCAyIDsgKytuKQotKwl7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVz X2VkZTNfZWNiKCksCi0rCQkJCXRlc3RzM1tuXS5rZXksIE5VTEwsCi0rCQkJCXRlc3RzM1tuXS5w bGFpbnRleHQsIHRlc3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9Ci0r ICAgIHJldCA9IDE7Ci0rICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4 KTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVT VF9ERVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCi0rICAgIHJldHVybiByZXQ7Ci0rICAg IH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfY3RyLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19j dHIuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzkzMjk0ODg5ICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMJMjAxMi0wMi0yOSAxMDoz MzowMi43OTMyOTQ4ODkgKzAxMDAKLUBAIC0wLDAgKzEsNDM2IEBACi0rLyogZmlwcy9yYW5kL2Zp cHNfZHJiZ19jdHIuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3Rl dmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK LSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9u LgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxp Y2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAq Ci0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPgot KyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0r I2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLStzdGF0aWMgdm9pZCBpbmNfMTI4KERSQkdf Q1RSX0NUWCAqY2N0eCkKLSsJewotKwlpbnQgaTsKLSsJdW5zaWduZWQgY2hhciBjOwotKwl1bnNp Z25lZCBjaGFyICpwID0gY2N0eC0+ViArIDE1OwotKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykK LSsJCXsKLSsJCWMgPSAqcDsKLSsJCWMrKzsKLSsJCSpwID0gYzsKLSsJCWlmIChjKQotKwkJCXJl dHVybjsKLSsJCXAtLTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyB2b2lkIGN0cl9YT1IoRFJCR19D VFJfQ1RYICpjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQotKwl7 Ci0rCXNpemVfdCBpLCBuOwotKwkvKiBBbnkgemVybyBwYWRkaW5nIHdpbGwgaGF2ZSBubyBlZmZl Y3Qgb24gdGhlIHJlc3VsdCBhcyB3ZQotKwkgKiBhcmUgWE9SaW5nLiBTbyBqdXN0IHByb2Nlc3Mg aG93ZXZlciBtdWNoIGlucHV0IHdlIGhhdmUuCi0rCSAqLwotKwotKwlpZiAoIWluIHx8ICFpbmxl bikKLSsJCXJldHVybjsKLSsKLSsJaWYgKGlubGVuIDwgY2N0eC0+a2V5bGVuKQotKwkJbiA9IGlu bGVuOwotKwllbHNlCi0rCQluID0gY2N0eC0+a2V5bGVuOwotKwotKwlmb3IgKGkgPSAwOyBpIDwg bjsgaSsrKQotKwkJY2N0eC0+S1tpXSBePSBpbltpXTsKLSsJaWYgKGlubGVuIDw9IGNjdHgtPmtl eWxlbikKLSsJCXJldHVybjsKLSsKLSsJbiA9IGlubGVuIC0gY2N0eC0+a2V5bGVuOwotKwkvKiBT aG91bGQgbmV2ZXIgaGFwcGVuICovCi0rCWlmIChuID4gMTYpCi0rCQluID0gMTY7Ci0rCWZvciAo aSA9IDA7IGkgPCAxNjsgaSsrKQotKwkJY2N0eC0+VltpXSBePSBpbltpICsgY2N0eC0+a2V5bGVu XTsKLSsJfQotKwotKy8qIFByb2Nlc3MgYSBjb21wbGV0ZSBibG9jayB1c2luZyBCQ0MgYWxnb3Jp dGhtIG9mIFNQUCA4MDAtOTAgMTAuNC4zICovCi0rCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9j ayhEUkJHX0NUUl9DVFggKmNjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsJCQkJY29uc3QgdW5z aWduZWQgY2hhciAqaW4pCi0rCXsKLSsJaW50IGk7Ci0rCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsr KQotKwkJb3V0W2ldIF49IGluW2ldOwotKwlBRVNfZW5jcnlwdChvdXQsIG91dCwgJmNjdHgtPmRm X2tzKTsKLSsjaWYgMAotK2ZwcmludGYoc3RkZXJyLCAiQkNDIGluK291dFxuIik7Ci0rQklPX2R1 bXBfZnAoc3RkZXJyLCBpbiwgMTYpOwotK0JJT19kdW1wX2ZwKHN0ZGVyciwgb3V0LCAxNik7Ci0r I2VuZGlmCi0rCX0KLSsKLSsvKiBIYW5kbGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0aW9ucyBmb3IgYXMg bXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9yIEsgYW5kIFggKi8KLStzdGF0aWMgdm9pZCBjdHJfQkND X2Jsb2NrcyhEUkJHX0NUUl9DVFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluKQotKwl7 Ci0rCWN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGluKTsKLSsJY3RyX0JDQ19ibG9jayhj Y3R4LCBjY3R4LT5LWCArIDE2LCBpbik7Ci0rCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCi0rCQlj dHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGluKTsKLSsJfQotKy8qIEluaXRpYWxp c2UgQkNDIGJsb2NrczogdGhlc2UgaGF2ZSB0aGUgdmFsdWUgMCwxLDIgaW4gbGVmdG1vc3QgcG9z aXRpb25zOgotKyAqIHNlZSAxMC40LjIgc3RhZ2UgNy4KLSsgKi8KLStzdGF0aWMgdm9pZCBjdHJf QkNDX2luaXQoRFJCR19DVFJfQ1RYICpjY3R4KQotKwl7Ci0rCW1lbXNldChjY3R4LT5LWCwgMCwg NDgpOwotKwltZW1zZXQoY2N0eC0+Ymx0bXAsIDAsIDE2KTsKLSsJY3RyX0JDQ19ibG9jayhjY3R4 LCBjY3R4LT5LWCwgY2N0eC0+Ymx0bXApOwotKwljY3R4LT5ibHRtcFszXSA9IDE7Ci0rCWN0cl9C Q0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgY2N0eC0+Ymx0bXApOwotKwlpZiAoY2N0eC0+ a2V5bGVuICE9IDE2KQotKwkJewotKwkJY2N0eC0+Ymx0bXBbM10gPSAyOwotKwkJY3RyX0JDQ19i bG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBjY3R4LT5ibHRtcCk7Ci0rCQl9Ci0rCX0KLSsKLSsv KiBQcm9jZXNzIHNldmVyYWwgYmxvY2tzIGludG8gQkNDIGFsZ29yaXRobSwgc29tZSBwb3NzaWJs eSBwYXJ0aWFsICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ191cGRhdGUoRFJCR19DVFJfQ1RYICpj Y3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQotKwl7Ci0r CWlmICghaW4gfHwgIWlubGVuKQotKwkJcmV0dXJuOwotKwkvKiBJZiB3ZSBoYXZlIHBhcnRpYWwg YmxvY2sgaGFuZGxlIGl0IGZpcnN0ICovCi0rCWlmIChjY3R4LT5ibHRtcF9wb3MpCi0rCQl7Ci0r CQlzaXplX3QgbGVmdCA9IDE2IC0gY2N0eC0+Ymx0bXBfcG9zOwotKwkJLyogSWYgd2Ugbm93IGhh dmUgYSBjb21wbGV0ZSBibG9jayBwcm9jZXNzIGl0ICovCi0rCQlpZiAoaW5sZW4gPj0gbGVmdCkK LSsJCQl7Ci0rCQkJbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgbGVm dCk7Ci0rCQkJY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOwotKwkJCWNjdHgtPmJs dG1wX3BvcyA9IDA7Ci0rCQkJaW5sZW4gLT0gbGVmdDsKLSsJCQlpbiArPSBsZWZ0OwotKwkJCX0K LSsJCX0KLSsJLyogUHJvY2VzcyB6ZXJvIG9yIG1vcmUgY29tcGxldGUgYmxvY2tzICovCi0rCXdo aWxlIChpbmxlbiA+PSAxNikKLSsJCXsKLSsJCWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGluKTsKLSsJ CWluICs9IDE2OwotKwkJaW5sZW4gLT0gMTY7Ci0rCQl9Ci0rCS8qIENvcHkgYW55IHJlbWFpbmlu ZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCi0rCWlmIChpbmxlbiA+ IDApCi0rCQl7Ci0rCQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBp bmxlbik7Ci0rCQljY3R4LT5ibHRtcF9wb3MgKz0gaW5sZW47Ci0rCQl9Ci0rCX0KLSsKLStzdGF0 aWMgdm9pZCBjdHJfQkNDX2ZpbmFsKERSQkdfQ1RSX0NUWCAqY2N0eCkKLSsJewotKwlpZiAoY2N0 eC0+Ymx0bXBfcG9zKQotKwkJewotKwkJbWVtc2V0KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBf cG9zLCAwLCAxNiAtIGNjdHgtPmJsdG1wX3Bvcyk7Ci0rCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBj Y3R4LT5ibHRtcCk7Ci0rCQl9Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBjdHJfZGYoRFJCR19DVFJf Q1RYICpjY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwK LSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQotKwl7Ci0rCXNpemVfdCBpbmxlbjsK LSsJdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPmJsdG1wOwotKwlzdGF0aWMgdW5zaWduZWQgY2hh ciBjODAgPSAweDgwOwotKwotKwljdHJfQkNDX2luaXQoY2N0eCk7Ci0rCWlmICghaW4xKQotKwkJ aW4xbGVuID0gMDsKLSsJaWYgKCFpbjIpCi0rCQlpbjJsZW4gPSAwOwotKwlpZiAoIWluMykKLSsJ CWluM2xlbiA9IDA7Ci0rCWlubGVuID0gaW4xbGVuICsgaW4ybGVuICsgaW4zbGVuOwotKwkvKiBJ bml0aWFsaXNlIEx8fE4gaW4gdGVtcG9yYXJ5IGJsb2NrICovCi0rCSpwKysgPSAoaW5sZW4gPj4g MjQpICYgMHhmZjsKLSsJKnArKyA9IChpbmxlbiA+PiAxNikgJiAweGZmOwotKwkqcCsrID0gKGlu bGVuID4+IDgpICYgMHhmZjsKLSsJKnArKyA9IGlubGVuICYgMHhmZjsKLSsJLyogTkIga2V5bGVu IGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8KLSsJKnArKyA9IDA7Ci0rCSpwKysgPSAwOwotKwkqcCsr ID0gMDsKLSsJKnAgPSAodW5zaWduZWQgY2hhcikoKGNjdHgtPmtleWxlbiArIDE2KSAmIDB4ZmYp OwotKwljY3R4LT5ibHRtcF9wb3MgPSA4OwotKwljdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjEsIGlu MWxlbik7Ci0rCWN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMiwgaW4ybGVuKTsKLSsJY3RyX0JDQ191 cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4pOwotKwljdHJfQkNDX3VwZGF0ZShjY3R4LCAmYzgwLCAx KTsKLSsJY3RyX0JDQ19maW5hbChjY3R4KTsKLSsJLyogU2V0IHVwIGtleSBLICovCi0rCUFFU19z ZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gsIGNjdHgtPmtleWxlbiAqIDgsICZjY3R4LT5kZl9reGtz KTsKLSsJLyogWCBmb2xsb3dzIGtleSBLICovCi0rCUFFU19lbmNyeXB0KGNjdHgtPktYICsgY2N0 eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNjdHgtPmRmX2t4a3MpOwotKwlBRVNfZW5jcnlwdChjY3R4 LT5LWCwgY2N0eC0+S1ggKyAxNiwgJmNjdHgtPmRmX2t4a3MpOwotKwlpZiAoY2N0eC0+a2V5bGVu ICE9IDE2KQotKwkJQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAxNiwgY2N0eC0+S1ggKyAzMiwgJmNj dHgtPmRmX2t4a3MpOwotKyNpZiAwCi0rZnByaW50ZihzdGRlcnIsICJPdXRwdXQgb2YgY3RyX2Rm OlxuIik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICsgMTYp OwotKyNlbmRpZgotKwl9Ci0rCi0rLyogTkIgdGhlIG5vLWRmICBVcGRhdGUgaW4gU1A4MDAtOTAg c3BlY2lmaWVzIGEgY29uc3RhbnQgaW5wdXQgbGVuZ3RoCi0rICogb2Ygc2VlZGxlbiwgaG93ZXZl ciBvdGhlciB1c2VzIG9mIHRoaXMgYWxnb3JpdGhtIHBhZCB0aGUgaW5wdXQgd2l0aAotKyAqIHpl cm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhhdmUgdXAgdG8gdHdvIHBhcmFtZXRlcnMgWE9SZWQgdG9n ZXRoZXIsCi0rICogaGFuZGxlIGJvdGggY2FzZXMgaW4gdGhpcyBmdW5jdGlvbiBpbnN0ZWFkLgot KyAqLwotKwotK3N0YXRpYyB2b2lkIGN0cl9VcGRhdGUoRFJCR19DVFggKmRjdHgsCi0rCQljb25z dCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rCQljb25zdCB1bnNpZ25lZCBj aGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwg c2l6ZV90IG5vbmNlbGVuKQotKwl7Ci0rCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0 cjsKLSsJLyoga3MgaXMgYWxyZWFkeSBzZXR1cCBmb3IgY29ycmVjdCBrZXkgKi8KLSsJaW5jXzEy OChjY3R4KTsKLSsJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKLSsJ LyogSWYga2V5bGVuIGxvbmdlciB0aGFuIDEyOCBiaXRzIG5lZWQgZXh0cmEgZW5jcnlwdCAqLwot KwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKwkJewotKwkJaW5jXzEyOChjY3R4KTsKLSsJCUFF U19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksgKyAxNiwgJmNjdHgtPmtzKTsKLSsJCX0KLSsJaW5j XzEyOChjY3R4KTsKLSsJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+ViwgJmNjdHgtPmtzKTsK LSsJLyogSWYgMTkyIGJpdCBrZXkgcGFydCBvZiBWIGlzIG9uIGVuZCBvZiBLICovCi0rCWlmIChj Y3R4LT5rZXlsZW4gPT0gMjQpCi0rCQl7Ci0rCQltZW1jcHkoY2N0eC0+ViArIDgsIGNjdHgtPlYs IDgpOwotKwkJbWVtY3B5KGNjdHgtPlYsIGNjdHgtPksgKyAyNCwgOCk7Ci0rCQl9Ci0rCi0rCWlm IChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKLSsJCXsKLSsJCS8qIElmIG5v IGlucHV0IHJldXNlIGV4aXN0aW5nIGRlcml2ZWQgdmFsdWUgKi8KLSsJCWlmIChpbjEgfHwgbm9u Y2UgfHwgaW4yKQotKwkJCWN0cl9kZihjY3R4LCBpbjEsIGluMWxlbiwgbm9uY2UsIG5vbmNlbGVu LCBpbjIsIGluMmxlbik7Ci0rCQkvKiBJZiB0aGlzIGEgcmV1c2UgaW5wdXQgaW4xbGVuICE9IDAg Ki8KLSsJCWlmIChpbjFsZW4pCi0rCQkJY3RyX1hPUihjY3R4LCBjY3R4LT5LWCwgZGN0eC0+c2Vl ZGxlbik7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJCWN0cl9YT1IoY2N0eCwgaW4xLCBpbjFsZW4p OwotKwkJY3RyX1hPUihjY3R4LCBpbjIsIGluMmxlbik7Ci0rCQl9Ci0rCi0rCUFFU19zZXRfZW5j cnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7Ci0rI2lmIDAKLStm cHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciB1cGRhdGUgaXM6XG4iKTsKLStCSU9fZHVtcF9mcChz dGRlcnIsIGNjdHgtPkssIGNjdHgtPmtleWxlbik7Ci0rQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4 LT5WLCAxNik7Ci0rI2VuZGlmCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX2luc3RhbnRp YXRlKERSQkdfQ1RYICpkY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90 IGVudGxlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVu LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQotKwl7Ci0r CURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsJbWVtc2V0KGNjdHgtPkssIDAs IHNpemVvZihjY3R4LT5LKSk7Ci0rCW1lbXNldChjY3R4LT5WLCAwLCBzaXplb2YoY2N0eC0+Vikp OwotKwlBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+ a3MpOwotKwljdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBwZXJzLCBwZXJzbGVuLCBub25j ZSwgbm9uY2VsZW4pOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJf cmVzZWVkKERSQkdfQ1RYICpkY3R4LCAKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNp emVfdCBlbnRsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5s ZW4pCi0rCXsKLSsJY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgYWRpbiwgYWRpbmxlbiwg TlVMTCwgMCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl9nZW5l cmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRs ZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0rCXsK LSsJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKwlpZiAoYWRpbiAmJiBhZGlu bGVuKQotKwkJewotKwkJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBO VUxMLCAwKTsKLSsJCS8qIFRoaXMgbWVhbnMgd2UgcmV1c2UgZGVyaXZlZCB2YWx1ZSAqLwotKwkJ aWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQotKwkJCXsKLSsJCQlhZGlu ID0gTlVMTDsKLSsJCQlhZGlubGVuID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCWVsc2UKLSsJCWFkaW5s ZW4gPSAwOwotKwotKwlmb3IgKDs7KQotKwkJewotKwkJaW5jXzEyOChjY3R4KTsKLSsJCWlmICgh KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCi0rCQkJ ewotKwkJCUFFU19lbmNyeXB0KGNjdHgtPlYsIGRjdHgtPmxiLCAmY2N0eC0+a3MpOwotKwkJCWRj dHgtPmxiX3ZhbGlkID0gMTsKLSsJCQljb250aW51ZTsKLSsJCQl9Ci0rCQlpZiAob3V0bGVuIDwg MTYpCi0rCQkJewotKwkJCS8qIFVzZSBLIGFzIHRlbXAgc3BhY2UgYXMgaXQgd2lsbCBiZSB1cGRh dGVkICovCi0rCQkJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKLSsJ CQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGNjdHgtPkspKQotKwkJCQlyZXR1cm4g MDsKLSsJCQltZW1jcHkob3V0LCBjY3R4LT5LLCBvdXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0K LSsJCUFFU19lbmNyeXB0KGNjdHgtPlYsIG91dCwgJmNjdHgtPmtzKTsKLSsJCWlmICghZmlwc19k cmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKLSsJCQlyZXR1cm4gMDsKLSsJCW91dCArPSAxNjsK LSsJCW91dGxlbiAtPSAxNjsKLSsJCWlmIChvdXRsZW4gPT0gMCkKLSsJCQlicmVhazsKLSsJCX0K LSsKLSsJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsK LSsKLSsJcmV0dXJuIDE7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX3VuaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJbWVtc2V0KCZkY3R4LT5kLmN0ciwgMCwgc2l6 ZW9mKERSQkdfQ1RSX0NUWCkpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBmaXBzX2RyYmdf Y3RyX2luaXQoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRj dHgtPmQuY3RyOwotKwotKwlzaXplX3Qga2V5bGVuOwotKwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUp Ci0rCQl7Ci0rCQljYXNlIE5JRF9hZXNfMTI4X2N0cjoKLSsJCWtleWxlbiA9IDE2OwotKwkJYnJl YWs7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2N0cjoKLSsJCWtleWxlbiA9IDI0OwotKwkJYnJl YWs7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2N0cjoKLSsJCWtleWxlbiA9IDMyOwotKwkJYnJl YWs7Ci0rCi0rCQlkZWZhdWx0OgotKwkJcmV0dXJuIC0yOwotKwkJfQotKwotKwlkY3R4LT5pbnN0 YW50aWF0ZSA9IGRyYmdfY3RyX2luc3RhbnRpYXRlOwotKwlkY3R4LT5yZXNlZWQgPSBkcmJnX2N0 cl9yZXNlZWQ7Ci0rCWRjdHgtPmdlbmVyYXRlID0gZHJiZ19jdHJfZ2VuZXJhdGU7Ci0rCWRjdHgt PnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0cl91bmluc3RhbnRpYXRlOwotKwotKwljY3R4LT5rZXls ZW4gPSBrZXlsZW47Ci0rCWRjdHgtPnN0cmVuZ3RoID0ga2V5bGVuICogODsKLSsJZGN0eC0+Ymxv Y2tsZW5ndGggPSAxNjsKLSsJZGN0eC0+c2VlZGxlbiA9IGtleWxlbiArIDE2OwotKwotKwlpZiAo ZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCi0rCQl7Ci0rCQkvKiBkZiBpbml0 aWFsaXNhdGlvbiAqLwotKwkJc3RhdGljIHVuc2lnbmVkIGNoYXIgZGZfa2V5WzMyXSA9Ci0rCQkJ ewotKwkJCTB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSsJCQkweDA4 LDB4MDksMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsCi0rCQkJMHgxMCwweDExLDB4MTIs MHgxMywweDE0LDB4MTUsMHgxNiwweDE3LAotKwkJCTB4MTgsMHgxOSwweDFhLDB4MWIsMHgxYyww eDFkLDB4MWUsMHgxZiAKLSsJCQl9OwotKwkJLyogU2V0IGtleSBzY2hlZHVsZSBmb3IgZGZfa2V5 ICovCi0rCQlBRVNfc2V0X2VuY3J5cHRfa2V5KGRmX2tleSwgZGN0eC0+c3RyZW5ndGgsICZjY3R4 LT5kZl9rcyk7Ci0rCi0rCQlkY3R4LT5taW5fZW50cm9weSA9IGNjdHgtPmtleWxlbjsKLSsJCWRj dHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwkJZGN0eC0+bWluX25vbmNlID0g ZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKwkJZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVO R1RIOwotKwkJZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCQlkY3R4LT5tYXhf YWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJZGN0eC0+bWlu X2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOwotKwkJZGN0eC0+bWF4X2VudHJvcHkgPSBkY3R4LT5z ZWVkbGVuOwotKwkJLyogTm9uY2Ugbm90IHVzZWQgKi8KLSsJCWRjdHgtPm1pbl9ub25jZSA9IDA7 Ci0rCQlkY3R4LT5tYXhfbm9uY2UgPSAwOwotKwkJZGN0eC0+bWF4X3BlcnMgPSBkY3R4LT5zZWVk bGVuOwotKwkJZGN0eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVkbGVuOwotKwkJfQotKwotKwlkY3R4 LT5tYXhfcmVxdWVzdCA9IDE8PDE2OwotKwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsK LSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX2hhc2guYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2hhc2guYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzk0Mjk0ODk4ICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIw MTItMDItMjkgMTA6MzM6MDIuNzk0Mjk0ODk4ICswMTAwCi1AQCAtMCwwICsxLDM3OCBAQAotKy8q IGZpcHMvcmFuZC9maXBzX2RyYmdfaGFzaC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVu IE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVj dC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAg ICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjZGVmaW5l IE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBz X3JhbmRfbGNsLmgiCi0rCi0rLyogVGhpcyBpcyBIYXNoX2RmIGZyb20gU1AgODAwLTkwIDEwLjQu MSAqLwotKwotK3N0YXRpYyBpbnQgaGFzaF9kZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsJ CQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rCQkJY29uc3QgdW5z aWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmluNCwgc2l6ZV90IGluNGxlbikKLSsJewotKwlFVlBfTURfQ1RYICptY3R4ID0gJmRjdHgtPmQu aGFzaC5tY3R4OwotKwl1bnNpZ25lZCBjaGFyICp2dG1wID0gZGN0eC0+ZC5oYXNoLnZ0bXA7Ci0r CXVuc2lnbmVkIGNoYXIgdG1wWzZdOwotKwkvKiBTdGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2Vl ZGxlbiBieXRlcyB3aGljaCBpcyBhbHdheXMgbGVzcyB0aGFuCi0rCSAqIG1heGltdW0gcGVybWl0 dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sgbGVuZ3RoLgotKwkgKi8KLSsJc2l6ZV90IG91dGxlbiA9 IGRjdHgtPnNlZWRsZW47Ci0rCXRtcFswXSA9IDE7Ci0rCXRtcFsxXSA9ICgob3V0bGVuICogOCkg Pj4gMjQpICYgMHhmZjsKLSsJdG1wWzJdID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOwot Kwl0bXBbM10gPSAoKG91dGxlbiAqIDgpID4+IDgpICYgMHhmZjsKLSsJdG1wWzRdID0gKG91dGxl biAqIDgpICYgMHhmZjsKLSsJaWYgKCFpbjEpCi0rCQl7Ci0rCQl0bXBbNV0gPSAodW5zaWduZWQg Y2hhcilpbjFsZW47Ci0rCQlpbjEgPSB0bXAgKyA1OwotKwkJaW4xbGVuID0gMTsKLSsJCX0KLSsJ Zm9yICg7OykKLSsJCXsKLSsJCWlmICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGRjdHgtPmQuaGFz aC5tZCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRt cCwgNSkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZSht Y3R4LCBpbjEsIGluMWxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW4yICYmICFGSVBTX2Rp Z2VzdHVwZGF0ZShtY3R4LCBpbjIsIGluMmxlbikpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoaW4z ICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjMsIGluM2xlbikpCi0rCQkJcmV0dXJuIDA7 Ci0rCQlpZiAoaW40ICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCi0r CQkJcmV0dXJuIDA7Ci0rCQlpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpCi0rCQkJewot KwkJCWlmICghRklQU19kaWdlc3RmaW5hbChtY3R4LCB2dG1wLCBOVUxMKSkKLSsJCQkJcmV0dXJu IDA7Ci0rCQkJbWVtY3B5KG91dCwgdnRtcCwgb3V0bGVuKTsKLSsJCQlPUEVOU1NMX2NsZWFuc2Uo dnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwkJCXJldHVybiAxOwotKwkJCX0KLSsJCWVsc2Ug aWYoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgb3V0LCBOVUxMKSkKLSsJCQlyZXR1cm4gMDsKLSsK LSsJCW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCWlmIChvdXRsZW4gPT0gMCkKLSsJ CQlyZXR1cm4gMTsKLSsJCXRtcFswXSsrOwotKwkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwot KwkJfQotKwl9Ci0rCi0rCi0rLyogQWRkIGFuIHVuc2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZh bHVlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gYnVmLiBGb3IKLSsgKiB0aGlzIGFsZ29yaXRobSB0 aGUgbGVuZ3RoIG9mIGlucHV0IG5ldmVyIGV4Y2VlZHMgdGhlIHNlZWQgbGVuZ3RoLgotKyAqLwot KwotK3N0YXRpYyB2b2lkIGN0eF9hZGRfYnVmKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFy ICpidWYsCi0rCQkJCXVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCi0rCXsKLSsJc2l6 ZV90IGkgPSBpbmxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqcTsKLSsJdW5zaWduZWQgY2hh ciBjLCAqcDsKLSsJcCA9IGJ1ZiArIGRjdHgtPnNlZWRsZW47Ci0rCXEgPSBpbiArIGlubGVuOwot KwotKwlPUEVOU1NMX2Fzc2VydChpIDw9IGRjdHgtPnNlZWRsZW4pOwotKwotKwkvKiBTcGVjaWFs IGNhc2U6IHplcm8gbGVuZ3RoLCBqdXN0IGluY3JlbWVudCBidWZmZXIgKi8KLSsJaWYgKGkpCi0r CQljID0gMDsKLSsJZWxzZSAKLSsJCWMgPSAxOwotKwotKwl3aGlsZSAoaSkKLSsJCXsKLSsJCWlu dCByOwotKwkJcC0tOwotKwkJcS0tOwotKwkJciA9ICpwICsgKnEgKyBjOwotKwkJLyogQ2Fycnkg Ki8KLSsJCWlmIChyID4gMHhmZikKLSsJCQljID0gMTsKLSsJCWVsc2UKLSsJCQljID0gMDsKLSsJ CSpwID0gciAmIDB4ZmY7Ci0rCQlpLS07Ci0rCQl9Ci0rCi0rCWkgPSBkY3R4LT5zZWVkbGVuIC0g aW5sZW47Ci0rCi0rCS8qIElmIG5vdCBhZGRpbmcgd2hvbGUgYnVmZmVyIGhhbmRsZSBmaW5hbCBj YXJyaWVzICovCi0rCWlmIChjICYmIGkpCi0rCQl7Ci0rCQlkbwotKwkJCXsKLSsJCQlwLS07Ci0r CQkJYyA9ICpwOwotKwkJCWMrKzsKLSsJCQkqcCA9IGM7Ci0rCQkJaWYoYykKLSsJCQkJcmV0dXJu OwotKwkJCX0gd2hpbGUoaS0tKTsKLSsJCX0KLSsJfQotKwotKy8qIEZpbmFsaXNlIGFuZCBhZGQg aGFzaCB0byBWICovCi0rCQotK3N0YXRpYyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkK LSsJewotKwlpZiAoIUZJUFNfZGlnZXN0ZmluYWwoJmRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4LT5k Lmhhc2gudnRtcCwgTlVMTCkpCi0rCQkJcmV0dXJuIDA7Ci0rCWN0eF9hZGRfYnVmKGRjdHgsIGRj dHgtPmQuaGFzaC5WLCBkY3R4LT5kLmhhc2gudnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKwly ZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRjdHgsIHVu c2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpo Y3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJaWYgKG91dGxlbiA9PSAwKQotKwkJcmV0dXJuIDE7Ci0r CW1lbWNweShoY3R4LT52dG1wLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsJZm9yKDs7KQot KwkJewotKwkJRklQU19kaWdlc3Rpbml0KCZoY3R4LT5tY3R4LCBoY3R4LT5tZCk7Ci0rCQlGSVBT X2RpZ2VzdHVwZGF0ZSgmaGN0eC0+bWN0eCwgaGN0eC0+dnRtcCwgZGN0eC0+c2VlZGxlbik7Ci0r CQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlk KQotKwkJCXsKLSsJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVM TCk7Ci0rCQkJZGN0eC0+bGJfdmFsaWQgPSAxOwotKwkJCX0KLSsJCWVsc2UgaWYgKG91dGxlbiA8 IGRjdHgtPmJsb2NrbGVuZ3RoKQotKwkJCXsKLSsJCQlGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5t Y3R4LCBoY3R4LT52dG1wLCBOVUxMKTsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRj dHgsIGhjdHgtPnZ0bXApKQotKwkJCQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBoY3R4LT52 dG1wLCBvdXRsZW4pOwotKwkJCXJldHVybiAxOwotKwkJCX0KLSsJCWVsc2UKLSsJCQl7Ci0rCQkJ RklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgb3V0LCBOVUxMKTsKLSsJCQlpZiAoIWZpcHNf ZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCi0rCQkJCXJldHVybiAwOwotKwkJCW91dGxlbiAt PSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCQlpZiAob3V0bGVuID09IDApCi0rCQkJCXJldHVybiAx OwotKwkJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCQl9Ci0rCQljdHhfYWRkX2J1Zihk Y3R4LCBoY3R4LT52dG1wLCBOVUxMLCAwKTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyBpbnQgZHJi Z19oYXNoX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBj aGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25j ZSwgc2l6ZV90IG5vbmNlX2xlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6 ZV90IHBzdHJfbGVuKQotKwl7Ci0rCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNo OwotKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+ViwgCi0rCQkJZW50LCBlbnRfbGVuLCBub25j ZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbiwKLSsJCQlOVUxMLCAwKSkKLSsJCXJldHVybiAw OwotKwlpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywgCi0rCQkJTlVMTCwgMCwgaGN0eC0+Viwg ZGN0eC0+c2VlZGxlbiwKLSsJCQlOVUxMLCAwLCBOVUxMLCAwKSkKLSsJCXJldHVybiAwOwotKwot KyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKLSsJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgaW5z dGFudGlhdGU6XG4iKTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVu KTsKLSsJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYK LSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsJCi0rc3RhdGljIGludCBkcmJnX2hhc2hfcmVzZWVkKERS QkdfQ1RYICpkY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRf bGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0r CXsKLSsJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rCS8qIFYgYWJvdXQg dG8gYmUgdXBkYXRlZCBzbyB1c2UgQyBhcyBvdXRwdXQgaW5zdGVhZCAqLwotKwlpZiAoIWhhc2hf ZGYoZGN0eCwgaGN0eC0+QywKLSsJCQlOVUxMLCAxLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAot KwkJCWVudCwgZW50X2xlbiwgYWRpbiwgYWRpbl9sZW4pKQotKwkJcmV0dXJuIDA7Ci0rCW1lbWNw eShoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsJaWYgKCFoYXNoX2RmKGRjdHgs IGhjdHgtPkMsIE5VTEwsIDAsCi0rCQkJaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwg TlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCi0rCWZwcmlu dGYoc3RkZXJyLCAiVitDIGFmdGVyIHJlc2VlZDpcbiIpOwotKwloZXhwcmludChzdGRlcnIsIGhj dHgtPlYsIGRjdHgtPnNlZWRsZW4pOwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgt PnNlZWRsZW4pOwotKyNlbmRpZgotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJi Z19oYXNoX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAotKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQs IHNpemVfdCBvdXRsZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBh ZGluX2xlbikKLSsJewotKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsJ RVZQX01EX0NUWCAqbWN0eCA9ICZoY3R4LT5tY3R4OwotKwl1bnNpZ25lZCBjaGFyIHRtcFs0XTsK LSsJaWYgKGFkaW4gJiYgYWRpbl9sZW4pCi0rCQl7Ci0rCQl0bXBbMF0gPSAyOwotKwkJaWYgKCFG SVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQotKwkJCXJldHVybiAwOwotKwkJaWYgKCFF VlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIUVW UF9EaWdlc3RVcGRhdGUobWN0eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCi0rCQkJcmV0dXJu IDA7Ci0rCQlpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgYWRpbiwgYWRpbl9sZW4pKQotKwkJ CXJldHVybiAwOwotKwkJaWYgKCFjdHhfYWRkX21kKGRjdHgpKQotKwkJCXJldHVybiAwOwotKwkJ fQotKwlpZiAoIWhhc2hfZ2VuKGRjdHgsIG91dCwgb3V0bGVuKSkKLSsJCXJldHVybiAwOwotKwot Kwl0bXBbMF0gPSAzOwotKwlpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCi0r CQlyZXR1cm4gMDsKLSsJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCi0rCQly ZXR1cm4gMDsKLSsJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNl ZWRsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlmICghY3R4X2FkZF9tZChkY3R4KSkKLSsJCXJl dHVybiAwOwotKwotKwljdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5z ZWVkbGVuKTsKLSsKLSsJdG1wWzBdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4 ZmY7Ci0rCXRtcFsxXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZmOwotKwl0 bXBbMl0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gOCkgJiAweGZmOwotKwl0bXBbM10gPSBk Y3R4LT5yZXNlZWRfY291bnRlciAmIDB4ZmY7Ci0rCWN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYs IHRtcCwgNCk7Ci0rI2lmZGVmIEhBU0hfRFJCR19UUkFDRQotKwlmcHJpbnRmKHN0ZGVyciwgIlYr QyBhZnRlciBnZW5lcmF0ZTpcbiIpOwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgt PnNlZWRsZW4pOwotKwloZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwot KyNlbmRpZgotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3VuaW5z dGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJRVZQX01EX0NUWF9jbGVhbnVwKCZkY3R4 LT5kLmhhc2gubWN0eCk7Ci0rCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5oYXNoLCBzaXplb2Yo RFJCR19IQVNIX0NUWCkpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBmaXBzX2RyYmdfaGFz aF9pbml0KERSQkdfQ1RYICpkY3R4KQotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQ7Ci0rCURSQkdf SEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKwltZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5 bmlkKGRjdHgtPnR5cGUpOwotKwlpZiAoIW1kKQotKwkJcmV0dXJuIC0yOwotKwlzd2l0Y2ggKGRj dHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNlIE5JRF9zaGExOgotKwkJZGN0eC0+c3RyZW5ndGggPSAx Mjg7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgTklEX3NoYTIyNDoKLSsJCWRjdHgtPnN0cmVuZ3Ro ID0gMTkyOwotKwkJYnJlYWs7Ci0rCi0rCQlkZWZhdWx0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAy NTY7Ci0rCQlicmVhazsKLSsJCX0KLSsKLSsJZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2hhc2hf aW5zdGFudGlhdGU7Ci0rCWRjdHgtPnJlc2VlZCA9IGRyYmdfaGFzaF9yZXNlZWQ7Ci0rCWRjdHgt PmdlbmVyYXRlID0gZHJiZ19oYXNoX2dlbmVyYXRlOwotKwlkY3R4LT51bmluc3RhbnRpYXRlID0g ZHJiZ19oYXNoX3VuaW5zdGFudGlhdGU7Ci0rCi0rCWRjdHgtPmQuaGFzaC5tZCA9IG1kOwotKwlF VlBfTURfQ1RYX2luaXQoJmhjdHgtPm1jdHgpOwotKwotKwkvKiBUaGVzZSBhcmUgdGFrZW4gZnJv bSBTUCA4MDAtOTAgMTAuMSB0YWJsZSAyICovCi0rCi0rCWRjdHgtPmJsb2NrbGVuZ3RoID0gTV9F VlBfTURfc2l6ZShtZCk7Ci0rCWlmIChkY3R4LT5ibG9ja2xlbmd0aCA+IDMyKQotKwkJZGN0eC0+ c2VlZGxlbiA9IDExMTsKLSsJZWxzZQotKwkJZGN0eC0+c2VlZGxlbiA9IDU1OwotKwotKwotKwlk Y3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKLSsJZGN0eC0+bWF4X2VudHJv cHkgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0rCWRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9l bnRyb3B5IC8gMjsKLSsJZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwotKwlk Y3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKLSsJZGN0eC0+bWF4X2FkaW4gPSBEUkJH X01BWF9MRU5HVEg7Ci0rCi0rCWRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7Ci0rCWRjdHgtPnJl c2VlZF9pbnRlcnZhbCA9IDE8PDI0OwotKwotKwlyZXR1cm4gMTsKLSsJfQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jLmZpcHMgb3BlbnNz bC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCi0tLS0gb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jLmZpcHMJMjAxMi0wMi0yOSAx MDozMzowMi43OTQyOTQ4OTggKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19obWFjLmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTQyOTQ4OTggKzAxMDAK LUBAIC0wLDAgKzEsMjgxIEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19obWFjLmMgKi8KLSsv KiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3Ig dGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFj X3VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBz aXplX3QgaW4xbGVuLAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJs ZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbgotKwkJCSkK LSsJewotKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjMCA9IDAsIGMxID0gMTsKLSsJRFJCR19ITUFD X0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rCUhNQUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhj dHg7Ci0rCi0rCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVu Z3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZSho Y3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFI TUFDX1VwZGF0ZShoY3R4LCAmYzAsIDEpKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjFsZW4gJiYg IUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoaW4y bGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCi0rCQlyZXR1cm4gMDsKLSsJ aWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQotKwkJcmV0dXJu IDA7Ci0rCi0rCWlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKLSsJCXJldHVy biAwOwotKwotKwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xl bmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCWlmICghSE1BQ19VcGRhdGUo aGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlm ICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwotKwlp ZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4pCi0rCQlyZXR1cm4gMTsKLSsKLSsJaWYg KCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1k LCBOVUxMKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYs IGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUhNQUNfVXBkYXRlKGhj dHgsICZjMSwgMSkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRhdGUo aGN0eCwgaW4xLCBpbjFsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChpbjJsZW4gJiYgIUhNQUNf VXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoaW4zbGVuICYm ICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYg KCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCWlm ICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5t ZCwgTlVMTCkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5W LCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJaWYgKCFITUFDX0ZpbmFs KGhjdHgsIGhtYWMtPlYsIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwotKwot Kwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgs Ci0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAotKwkJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCi0rCXsKLSsJRFJCR19ITUFDX0NU WCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rCW1lbXNldChobWFjLT5LLCAwLCBkY3R4LT5ibG9j a2xlbmd0aCk7Ci0rCW1lbXNldChobWFjLT5WLCAxLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rCWlm ICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAotKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNl X2xlbiwgcHN0ciwgcHN0cl9sZW4pKQotKwkJcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhNQUNfRFJC R19UUkFDRQotKwlmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciBpbnN0YW50aWF0ZTpcbiIpOwot KwloZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJaGV4cHJp bnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rI2VuZGlmCi0rCXJldHVy biAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfcmVzZWVkKERSQkdfQ1RYICpkY3R4 LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rCXsKLSsJaWYgKCFk cmJnX2htYWNfdXBkYXRlKGRjdHgsCi0rCQkJZW50LCBlbnRfbGVuLCBhZGluLCBhZGluX2xlbiwg TlVMTCwgMCkpCi0rCQlyZXR1cm4gMDsKLSsKLSsjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCi0rCXsK LSsJCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKwkJZnByaW50ZihzdGRl cnIsICJLK1YgYWZ0ZXIgcmVzZWVkOlxuIik7Ci0rCQloZXhwcmludChzdGRlcnIsIGhtYWMtPkss IGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsJCWhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+ YmxvY2tsZW5ndGgpOwotKwl9Ci0rI2VuZGlmCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGlj IGludCBkcmJnX2htYWNfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsCi0rCQkJCXVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5fbGVuKQotKwl7Ci0rCURSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5o bWFjOwotKwlITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OwotKwljb25zdCB1bnNpZ25lZCBj aGFyICpWdG1wID0gaG1hYy0+VjsKLSsJaWYgKGFkaW5fbGVuICYmICFkcmJnX2htYWNfdXBkYXRl KGRjdHgsIGFkaW4sIGFkaW5fbGVuLAotKwkJCQkJCU5VTEwsIDAsIE5VTEwsIDApKQotKwkJcmV0 dXJuIDA7Ci0rCWZvciAoOzspCi0rCQl7Ci0rCQlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFj LT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwKLSsJCQkJCQkJaG1hYy0+bWQsIE5VTEwpKQotKwkJCXJl dHVybiAwOwotKwkJaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBWdG1wLCBkY3R4LT5ibG9ja2xlbmd0 aCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQlpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVT VCkgJiYgIWRjdHgtPmxiX3ZhbGlkKQotKwkJCXsKLSsJCQlpZiAoIUhNQUNfRmluYWwoaGN0eCwg ZGN0eC0+bGIsIE5VTEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlkY3R4LT5sYl92YWxpZCA9IDE7 Ci0rCQkJVnRtcCA9IGRjdHgtPmxiOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWVsc2UgaWYg KG91dGxlbiA+IGRjdHgtPmJsb2NrbGVuZ3RoKQotKwkJCXsKLSsJCQlpZiAoIUhNQUNfRmluYWwo aGN0eCwgb3V0LCBOVUxMKSkKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJaWYgKCFmaXBzX2RyYmdfY3By bmdfdGVzdChkY3R4LCBvdXQpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlWdG1wID0gb3V0OwotKwkJ CX0KLSsJCWVsc2UKLSsJCQl7Ci0rCQkJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5V TEwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgs IGhtYWMtPlYpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQltZW1jcHkob3V0LCBobWFjLT5WLCBvdXRs ZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsJCW91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJ CW91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsJCX0KLSsJaWYgKCFkcmJnX2htYWNfdXBk YXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsJCXJldHVybiAw OwotKwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX3VuaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJSE1BQ19DVFhfY2xlYW51cCgmZGN0eC0+ZC5o bWFjLmhjdHgpOwotKwlPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaG1hYywgc2l6ZW9mKERSQkdf SE1BQ19DVFgpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZmlwc19kcmJnX2htYWNfaW5p dChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJRFJC R19ITUFDX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhtYWM7Ci0rCWRjdHgtPnN0cmVuZ3RoID0gMjU2 OwotKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCi0rCQl7Ci0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTE6 Ci0rCQltZCA9IEVWUF9zaGExKCk7Ci0rCQlkY3R4LT5zdHJlbmd0aCA9IDEyODsKLSsJCWJyZWFr OwotKwotKwkJY2FzZSBOSURfaG1hY1dpdGhTSEEyMjQ6Ci0rCQltZCA9IEVWUF9zaGEyMjQoKTsK LSsJCWRjdHgtPnN0cmVuZ3RoID0gMTkyOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIE5JRF9obWFj V2l0aFNIQTI1NjoKLSsJCW1kID0gRVZQX3NoYTI1NigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNl IE5JRF9obWFjV2l0aFNIQTM4NDoKLSsJCW1kID0gRVZQX3NoYTM4NCgpOwotKwkJYnJlYWs7Ci0r Ci0rCQljYXNlIE5JRF9obWFjV2l0aFNIQTUxMjoKLSsJCW1kID0gRVZQX3NoYTUxMigpOwotKwkJ YnJlYWs7Ci0rCi0rCQlkZWZhdWx0OgotKwkJZGN0eC0+c3RyZW5ndGggPSAwOwotKwkJcmV0dXJu IC0yOwotKwkJfQotKyAgICAgICAgZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2htYWNfaW5zdGFu dGlhdGU7Ci0rICAgICAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2htYWNfcmVzZWVkOwotKyAgICAg ICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2htYWNfZ2VuZXJhdGU7Ci0rICAgICAgICBkY3R4LT51 bmluc3RhbnRpYXRlID0gZHJiZ19obWFjX3VuaW5zdGFudGlhdGU7Ci0rCUhNQUNfQ1RYX2luaXQo JmhjdHgtPmhjdHgpOwotKwloY3R4LT5tZCA9IG1kOwotKwlkY3R4LT5ibG9ja2xlbmd0aCA9IE1f RVZQX01EX3NpemUobWQpOwotKwlkY3R4LT5zZWVkbGVuID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0r Ci0rICAgICAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKLSsgICAg ICAgIGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICAgICAgZGN0 eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKyAgICAgICAgZGN0eC0+bWF4 X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICAgICAgZGN0eC0+bWF4X3BlcnMgPSBE UkJHX01BWF9MRU5HVEg7Ci0rICAgICAgICBkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdU SDsKLSsKLSsgICAgICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMTw8MTY7Ci0rICAgICAgICBkY3R4 LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMKLS0tLSBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzCTIwMTItMDItMjkg MTA6MzM6MDIuNzk0Mjk0ODk4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfbGliLmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTQyOTQ4OTggKzAxMDAK LUBAIC0wLDAgKzEsNTc4IEBACi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChz dGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg bGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5o IgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rLyogU3VwcG9ydCBmcmFtZXdvcmsg Zm9yIFNQODAwLTkwIERSQkdzICovCi0rCi0raW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpk Y3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQotKwl7Ci0rCWludCBydjsKLSsJbWVt c2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOwotKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NU QVRVU19VTklOSVRJQUxJU0VEOwotKwlkY3R4LT54ZmxhZ3MgPSBmbGFnczsKLSsJZGN0eC0+dHlw ZSA9IHR5cGU7Ci0rCi0rCWRjdHgtPmlmbGFncyA9IDA7Ci0rCWRjdHgtPmVudHJvcHlfYmxvY2ts ZW4gPSAwOwotKwlkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKLSsJZGN0eC0+aGVhbHRoX2No ZWNrX2ludGVydmFsID0gRFJCR19IRUFMVEhfSU5URVJWQUw7Ci0rCi0rCXJ2ID0gZmlwc19kcmJn X2hhc2hfaW5pdChkY3R4KTsKLSsKLSsJaWYgKHJ2ID09IC0yKQotKwkJcnYgPSBmaXBzX2RyYmdf Y3RyX2luaXQoZGN0eCk7Ci0rCWlmIChydiA9PSAtMikKLSsJCXJ2ID0gZmlwc19kcmJnX2htYWNf aW5pdChkY3R4KTsKLSsKLSsJaWYgKHJ2IDw9IDApCi0rCQl7Ci0rCQlpZiAocnYgPT0gLTIpCi0r CQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJH X1RZUEUpOwotKwkJZWxzZQotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBT X1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcpOwotKwkJfQotKwotKwkvKiBJZiBub3QgaW4gdGVz dCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBvZiB0aGUgc2FtZSB0eXBlICovCi0rCi0rCWlm ICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkKLSsJCXsKLSsJCWlmICghRklQU19k cmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9 Ci0rCQl9Ci0rCi0rCXJldHVybiBydjsKLSsJfQotKwotK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3 KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi0rCXsKLSsJRFJCR19DVFggKmRjdHg7Ci0r CWRjdHggPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoRFJCR19DVFgpKTsKLSsJaWYgKCFkY3R4KQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX05FVywgRVJSX1JfTUFMTE9DX0ZBSUxV UkUpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rCi0rCWlmICh0eXBlID09IDApCi0rCQl7Ci0r CQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCQlkY3R4LT50eXBlID0gMDsK LSsJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCQlyZXR1cm4g ZGN0eDsKLSsJCX0KLSsKLSsJaWYgKEZJUFNfZHJiZ19pbml0KGRjdHgsIHR5cGUsIGZsYWdzKSA8 PSAwKQotKwkJewotKwkJT1BFTlNTTF9mcmVlKGRjdHgpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9 Ci0rCQkKLSsJcmV0dXJuIGRjdHg7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdf Q1RYICpkY3R4KQotKwl7Ci0rCWlmIChkY3R4LT51bmluc3RhbnRpYXRlKQotKwkJZGN0eC0+dW5p bnN0YW50aWF0ZShkY3R4KTsKLSsJLyogRG9uJ3QgZnJlZSB1cCBkZWZhdWx0IERSQkcgKi8KLSsJ aWYgKGRjdHggPT0gRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpCi0rCQl7Ci0rCQltZW1zZXQoZGN0 eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Ci0rCQlkY3R4LT50eXBlID0gMDsKLSsJCWRjdHgtPnN0 YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsJ CU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsJCU9QRU5TU0xf ZnJlZShkY3R4KTsKLSsJCX0KLSsJfQotKwotK3N0YXRpYyBzaXplX3QgZmlwc19nZXRfZW50cm9w eShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5 LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciAq dG91dCwgKnA7Ci0rCXNpemVfdCBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW4sIHJ2OwotKwlp ZiAoIWRjdHgtPmdldF9lbnRyb3B5KQotKwkJcmV0dXJuIDA7Ci0rCWlmIChkY3R4LT54ZmxhZ3Mg JiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwpCi0rCQlyZXR1cm4gZGN0eC0+Z2V0X2VudHJvcHkoZGN0 eCwgcG91dCwgZW50cm9weSwgbWluX2xlbiwgbWF4X2xlbik7Ci0rCXJ2ID0gZGN0eC0+Z2V0X2Vu dHJvcHkoZGN0eCwgJnRvdXQsIGVudHJvcHkgKyBibCwKLSsJCQkJbWluX2xlbiArIGJsLCBtYXhf bGVuICsgYmwpOwotKwlpZiAodG91dCA9PSBOVUxMKQotKwkJcmV0dXJuIDA7Ci0rCSpwb3V0ID0g dG91dCArIGJsOwotKwlpZiAocnYgPCAobWluX2xlbiArIGJsKSB8fCAocnYgJSBibCkpCi0rCQly ZXR1cm4gMDsKLSsJLyogQ29tcGFyZSBjb25zZWN1dGl2ZSBibG9ja3MgZm9yIGNvbnRpbnVvdXMg UFJORyB0ZXN0ICovCi0rCWZvciAocCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYgLSBibDsgcCArPSBi bCkKLSsJCXsKLSsJCWlmICghbWVtY21wKHAsIHAgKyBibCwgYmwpKQotKwkJCXsKLSsJCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZLCBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0sp OwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsJcnYgLT0gYmw7Ci0rCWlmIChydiA+IG1h eF9sZW4pCi0rCQlyZXR1cm4gbWF4X2xlbjsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0rc3RhdGlj IHZvaWQgZmlwc19jbGVhbnVwX2VudHJvcHkoRFJCR19DVFggKmRjdHgsCi0rCQkJCQl1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKQotKwl7Ci0rCXNpemVfdCBibDsKLSsJaWYgKGRjdHgt PnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKwkJYmwgPSAwOwotKwllbHNlCi0rCQlibCA9IGRj dHgtPmVudHJvcHlfYmxvY2tsZW47Ci0rCS8qIENhbGwgY2xlYW51cCB3aXRoIG9yaWdpbmFsIGFy Z3VtZW50cyAqLwotKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkoZGN0eCwgb3V0IC0gYmwsIG9sZW4g KyBibCk7Ci0rCX0KLSsKLSsKLStpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpk Y3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKLSsJ ewotKwlzaXplX3QgZW50bGVuID0gMCwgbm9uY2VsZW4gPSAwOwotKwl1bnNpZ25lZCBjaGFyICpu b25jZSA9IE5VTEwsICplbnRyb3B5ID0gTlVMTDsKLSsKLSsjaWYgMAotKwkvKiBQdXQgaGVyZSBz byBlcnJvciBzY3JpcHQgcGlja3MgdGhlbSB1cCAqLwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfSU5TVEFOVElBVEUsCi0rCQkJCUZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19M T05HKTsKLSsJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5f RVJST1JfU1RBVEUpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJ UFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRCk7Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19J TlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWSk7Ci0rCUZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9O Q0UpOwotKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9JTlNU QU5USUFURV9FUlJPUik7Ci0rCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwg RklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEKTsKLSsjZW5kaWYKLSsKLSsJaW50IHIgPSAwOwot KwotKwlpZiAocGVyc2xlbiA+IGRjdHgtPm1heF9wZXJzKQotKwkJewotKwkJciA9IEZJUFNfUl9Q RVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0r CWlmICghZGN0eC0+aW5zdGFudGlhdGUpCi0rCQl7Ci0rCQlyID0gRklQU19SX0RSQkdfTk9UX0lO SVRJQUxJU0VEOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmIChkY3R4LT5zdGF0dXMgIT0g RFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsJCXsKLSsJCWlmIChkY3R4LT5zdGF0dXMgPT0g RFJCR19TVEFUVVNfRVJST1IpCi0rCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKLSsJCWVs c2UKLSsJCQlyID0gRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCi0rCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKwotKwllbnRsZW4g PSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKLSsJCQkJ ZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKLSsKLSsJaWYgKGVudGxlbiA8 IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KQotKwkJewot KwkJciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7Ci0rCQlnb3RvIGVuZDsKLSsJ CX0KLSsKLSsJaWYgKGRjdHgtPm1heF9ub25jZSA+IDAgJiYgZGN0eC0+Z2V0X25vbmNlKQotKwkJ ewotKwkJbm9uY2VsZW4gPSBkY3R4LT5nZXRfbm9uY2UoZGN0eCwgJm5vbmNlLAotKwkJCQkJZGN0 eC0+c3RyZW5ndGggLyAyLAotKwkJCQkJZGN0eC0+bWluX25vbmNlLCBkY3R4LT5tYXhfbm9uY2Up OwotKwotKwkJaWYgKG5vbmNlbGVuIDwgZGN0eC0+bWluX25vbmNlIHx8IG5vbmNlbGVuID4gZGN0 eC0+bWF4X25vbmNlKQotKwkJCXsKLSsJCQlyID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9O Q0U7Ci0rCQkJZ290byBlbmQ7Ci0rCQkJfQotKwotKwkJfQotKwotKwlpZiAoIWRjdHgtPmluc3Rh bnRpYXRlKGRjdHgsIAotKwkJCQllbnRyb3B5LCBlbnRsZW4sCi0rCQkJCW5vbmNlLCBub25jZWxl biwKLSsJCQkJcGVycywgcGVyc2xlbikpCi0rCQl7Ci0rCQlyID0gRklQU19SX0VSUk9SX0lOU1RB TlRJQVRJTkdfRFJCRzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwotKwlkY3R4LT5zdGF0dXMg PSBEUkJHX1NUQVRVU19SRUFEWTsKLSsJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01f UkVTRUVEKSkKLSsJCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKLSsKLSsJZW5kOgotKwotKwlp ZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCi0rCQlmaXBzX2NsZWFudXBfZW50 cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOwotKwotKwlpZiAobm9uY2UgJiYgZGN0eC0+Y2xl YW51cF9ub25jZSkKLSsJCWRjdHgtPmNsZWFudXBfbm9uY2UoZGN0eCwgbm9uY2UsIG5vbmNlbGVu KTsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKLSsJCXJldHVy biAxOwotKwotKwlpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0r CQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIHIpOwotKwotKwlyZXR1cm4g MDsKLSsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0r CQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4sIGludCBoY2hlY2sp Ci0rCXsKLSsJdW5zaWduZWQgY2hhciAqZW50cm9weSA9IE5VTEw7Ci0rCXNpemVfdCBlbnRsZW4g PSAwOwotKwlpbnQgciA9IDA7Ci0rCi0rI2lmIDAKLSsJRklQU2VycihGSVBTX0ZfRFJCR19SRVNF RUQsIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEKTsKLSsJRklQU2VycihGSVBTX0ZfRFJCR19SRVNF RUQsIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HKTsKLSsjZW5kaWYKLSsJaWYgKGRj dHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFEWQotKwkJJiYgZGN0eC0+c3RhdHVzICE9IERS QkdfU1RBVFVTX1JFU0VFRCkKLSsJCXsKLSsJCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFU VVNfRVJST1IpCi0rCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKLSsJCWVsc2UgaWYoZGN0 eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQkJciA9IEZJUFNfUl9O T1RfSU5TVEFOVElBVEVEOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghYWRpbikKLSsJ CWFkaW5sZW4gPSAwOwotKwllbHNlIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pCi0rCQl7 Ci0rCQlyID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkc7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rCS8qIFBlZm9y bSBoZWFsdGggY2hlY2sgb24gYWxsIHJlc2VlZCBvcGVyYXRpb25zIGlmIG5vdCBhIHByZWRpY3Rp b24KLSsJICogcmVzaXN0YW5jZSByZXF1ZXN0IGFuZCBub3QgaW4gdGVzdCBtb2RlLgotKwkgKi8K LSsJaWYgKGhjaGVjayAmJiAhKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkKLSsJCXsK LSsJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKLSsJCQl7Ci0rCQkJciA9IEZJ UFNfUl9TRUxGVEVTVF9GQUlMVVJFOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCX0KLSsKLSsJ ZW50bGVuID0gZmlwc19nZXRfZW50cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgs Ci0rCQkJCWRjdHgtPm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0rCi0rCWlmIChl bnRsZW4gPCBkY3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkK LSsJCXsKLSsJCXIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOwotKwkJZ290byBl bmQ7Ci0rCQl9Ci0rCi0rCWlmICghZGN0eC0+cmVzZWVkKGRjdHgsIGVudHJvcHksIGVudGxlbiwg YWRpbiwgYWRpbmxlbikpCi0rCQlnb3RvIGVuZDsKLSsKLSsJZGN0eC0+c3RhdHVzID0gRFJCR19T VEFUVVNfUkVBRFk7Ci0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkp Ci0rCQlkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7Ci0rCWVuZDoKLSsKLSsJaWYgKGVudHJvcHkg JiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQotKwkJZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwg ZW50cm9weSwgZW50bGVuKTsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19S RUFEWSkKLSsJCXJldHVybiAxOwotKwotKwlpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdf RkxBR19OT0VSUikpCi0rCQlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgcik7Ci0rCi0rCXJl dHVybiAwOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0r CQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0rCXsKLSsJcmV0 dXJuIGRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIDEpOwotKwl9Ci0rCi0rc3RhdGlj IGludCBmaXBzX2RyYmdfY2hlY2soRFJCR19DVFggKmRjdHgpCi0rCXsKLSsJaWYgKGRjdHgtPnhm bGFncyAmIERSQkdfRkxBR19URVNUKQotKwkJcmV0dXJuIDE7Ci0rCWRjdHgtPmhlYWx0aF9jaGVj a19jbnQrKzsKLSsJaWYgKGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPj0gZGN0eC0+aGVhbHRoX2No ZWNrX2ludGVydmFsKQotKwkJewotKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgp KQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0ssIEZJUFNfUl9TRUxG VEVTVF9GQUlMVVJFKTsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rCXJldHVybiAxOwot Kwl9Ci0rCi0raW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQg Y2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKwkJCWludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2Us Ci0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0rCXsKLSsJ aW50IHIgPSAwOwotKwotKwlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7 Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJaWYgKCFmaXBzX2RyYmdfY2hlY2soZGN0eCkpCi0r CQlyZXR1cm4gMDsKLSsKLSsJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFEWQot KwkJJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkKLSsJCXsKLSsJCWlmIChk Y3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCi0rCQkJciA9IEZJUFNfUl9JTl9FUlJP Ul9TVEFURTsKLSsJCWVsc2UgaWYoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElB TElTRUQpCi0rCQkJciA9IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOwotKwkJZ290byBlbmQ7Ci0r CQl9Ci0rCi0rCWlmIChvdXRsZW4gPiBkY3R4LT5tYXhfcmVxdWVzdCkKLSsJCXsKLSsJCXIgPSBG SVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkc7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsK LSsJaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikKLSsJCXsKLSsJCXIgPSBGSVBTX1JfQURE SVRJT05BTF9JTlBVVF9UT09fTE9ORzsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoZGN0 eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKQotKwkJZGN0eC0+Z2VuZXJhdGUoZGN0eCwg TlVMTCwgb3V0bGVuLCBOVUxMLCAwKTsKLSsJZWxzZSBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIg Pj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQotKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNf UkVTRUVEOwotKwotKwlpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFU0VFRCB8fCBw cmVkaWN0aW9uX3Jlc2lzdGFuY2UpCi0rCQl7Ci0rCQkvKiBJZiBwcmVkaWN0aW9uIHJlc2lzdGFu Y2UgcmVxdWVzdCBkb24ndCBkbyBoZWFsdGggY2hlY2sgKi8KLSsJCWludCBoY2hlY2sgPSBwcmVk aWN0aW9uX3Jlc2lzdGFuY2UgPyAwIDogMTsKLSsJCQotKwkJaWYgKCFkcmJnX3Jlc2VlZChkY3R4 LCBhZGluLCBhZGlubGVuLCBoY2hlY2spKQotKwkJCXsKLSsJCQlyID0gRklQU19SX1JFU0VFRF9F UlJPUjsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhZGluID0gTlVMTDsKLSsJCWFkaW5sZW4g PSAwOwotKwkJfQotKwotKwlpZiAoIWRjdHgtPmdlbmVyYXRlKGRjdHgsIG91dCwgb3V0bGVuLCBh ZGluLCBhZGlubGVuKSkKLSsJCXsKLSsJCXIgPSBGSVBTX1JfR0VORVJBVEVfRVJST1I7Ci0rCQlk Y3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwlp ZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQotKwkJewotKwkJaWYgKGRj dHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2VlZF9pbnRlcnZhbCkKLSsJCQlkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7Ci0rCQllbHNlCi0rCQkJZGN0eC0+cmVzZWVkX2Nv dW50ZXIrKzsKLSsJCX0KLSsKLSsJZW5kOgotKwlpZiAocikKLSsJCXsKLSsJCWlmICghKGRjdHgt PmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0dFTkVSQVRFLCByKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlyZXR1cm4gMTsKLSsJfQot KwotK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlp bnQgcnY7Ci0rCWlmICghZGN0eC0+dW5pbnN0YW50aWF0ZSkKLSsJCXJ2ID0gMTsKLSsJZWxzZQot KwkJcnYgPSBkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOwotKwkvKiBBbHRob3VnaCB3ZSdkIGxp a2UgdG8gY2xlYW5zZSBoZXJlIHdlIGNhbid0IGJlY2F1c2Ugd2UgaGF2ZSB0bwotKwkgKiB0ZXN0 IHRoZSB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMgdGhlIGRhdGEuCi0rCSAqLwotKwltZW1z ZXQoJmRjdHgtPmQsIDAsIHNpemVvZihkY3R4LT5kKSk7Ci0rCWRjdHgtPnN0YXR1cyA9IERSQkdf U1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rCS8qIElmIG1ldGhvZCBoYXMgcHJvYmxlbXMgdW5pbnN0 YW50aWF0aW5nLCByZXR1cm4gZXJyb3IgKi8KLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0raW50IEZJ UFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAotKwlzaXplX3QgKCpnZXRfZW50 cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRy b3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgqY2xlYW51cF9l bnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwK LSsJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCi0rCXNpemVfdCAoKmdldF9ub25jZSkoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWludCBlbnRyb3B5LCBzaXplX3Qg bWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgqY2xlYW51cF9ub25jZSkoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikpCi0rCXsKLSsJaWYgKGRj dHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKwkJcmV0dXJuIDA7Ci0r CWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSBlbnRyb3B5X2Jsb2NrbGVuOwotKwlkY3R4LT5nZXRf ZW50cm9weSA9IGdldF9lbnRyb3B5OwotKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkgPSBjbGVhbnVw X2VudHJvcHk7Ci0rCWRjdHgtPmdldF9ub25jZSA9IGdldF9ub25jZTsKLSsJZGN0eC0+Y2xlYW51 cF9ub25jZSA9IGNsZWFudXBfbm9uY2U7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IEZJUFNf ZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rCXNpemVfdCAoKmdldF9h ZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCksCi0rCXZvaWQgKCpjbGVh bnVwX2FkaW4pKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4p LAotKwlpbnQgKCpyYW5kX3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1Ziwg aW50IG51bSksCi0rCWludCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAotKwkJCQljb25z dCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KSkKLSsJewotKwlpZiAoZGN0eC0+ c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rCQlyZXR1cm4gMDsKLSsJZGN0 eC0+Z2V0X2FkaW4gPSBnZXRfYWRpbjsKLSsJZGN0eC0+Y2xlYW51cF9hZGluID0gY2xlYW51cF9h ZGluOwotKwlkY3R4LT5yYW5kX3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7Ci0rCWRjdHgtPnJhbmRf YWRkX2NiID0gcmFuZF9hZGRfY2I7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rdm9pZCAqRklQU19k cmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlyZXR1cm4gZGN0eC0+YXBw X2RhdGE7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFggKmRj dHgsIHZvaWQgKmFwcF9kYXRhKQotKwl7Ci0rCWRjdHgtPmFwcF9kYXRhID0gYXBwX2RhdGE7Ci0r CX0KLSsKLStzaXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCkK LSsJewotKwlyZXR1cm4gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rCX0KLSsKLStpbnQgRklQU19kcmJn X2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCkKLSsJewotKwlyZXR1cm4gZGN0eC0+c3RyZW5n dGg7Ci0rCX0KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFgg KmRjdHgsIGludCBpbnRlcnZhbCkKLSsJewotKwlkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwg PSBpbnRlcnZhbDsKLSsJfQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwo RFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKLSsJewotKwlkY3R4LT5yZXNlZWRfaW50ZXJ2 YWwgPSBpbnRlcnZhbDsKLSsJfQotKwotK3N0YXRpYyBpbnQgZHJiZ19zdGljayA9IDA7Ci0rCi0r dm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKQotKwl7Ci0rCWRyYmdfc3RpY2sgPSBvbm9m ZjsKLSsJfQotKwotKy8qIENvbnRpbnVvdXMgRFJCRyB1dGlsaXR5IGZ1bmN0aW9uICovCi0raW50 IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFy ICpvdXQpCi0rCXsKLSsJLyogTm8gQ1BSTkcgaW4gdGVzdCBtb2RlICovCi0rCWlmIChkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkKLSsJCXJldHVybiAxOwotKwkvKiBDaGVjayBibG9jayBp cyB2YWxpZDogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotKwlpZiAoZGN0eC0+bGJfdmFsaWQgPT0g MCkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBGSVBTX1Jf SU5URVJOQUxfRVJST1IpOwotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rCWlmIChkcmJnX3N0aWNrKQotKwkJbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRj dHgtPmJsb2NrbGVuZ3RoKTsKLSsJLyogQ2hlY2sgYWdhaW5zdCBsYXN0IGJsb2NrOiBmYWlsIGlm IG1hdGNoICovCi0rCWlmICghbWVtY21wKGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3Ro KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBGSVBTX1Jf RFJCR19TVFVDSyk7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsJLyogU2F2ZSBsYXN0IGJsb2NrIGZvciBuZXh0IGNvbXBhcmlzb24gKi8KLSsJbWVt Y3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsJcmV0dXJuIDE7Ci0rCX0K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQu Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYwot LS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBz CTIwMTItMDItMjkgMTA6MzM6MDIuNzk0Mjk0ODk4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzk0 Mjk0ODk4ICswMTAwCi1AQCAtMCwwICsxLDE3MiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdf cmFuZC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVu c3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5n QE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNp bmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rLyogTWFwcGluZyBvZiBTUDgwMC05MCBEUkJH cyB0byBPcGVuU1NMIFJBTkRfTUVUSE9EICovCi0rCi0rLyogU2luY2Ugd2Ugb25seSBoYXZlIG9u ZSBnbG9iYWwgUFJORyB1c2VkIGF0IGFueSB0aW1lIGluIE9wZW5TU0wgdXNlIGEgZ2xvYmFsCi0r ICogdmFyaWFibGUgdG8gc3RvcmUgY29udGV4dC4KLSsgKi8KLSsKLStzdGF0aWMgRFJCR19DVFgg b3NzbF9kY3R4OwotKwotK0RSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCkKLSsJ ewotKwlyZXR1cm4gJm9zc2xfZGN0eDsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2J5 dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4 ID0gJm9zc2xfZGN0eDsKLSsJaW50IHJ2ID0gMDsKLSsJdW5zaWduZWQgY2hhciAqYWRpbiA9IE5V TEw7Ci0rCXNpemVfdCBhZGlubGVuID0gMDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19S QU5EKTsKLSsJZG8gCi0rCQl7Ci0rCQlzaXplX3QgcmNudDsKLSsJCWlmIChjb3VudCA+IChpbnQp ZGN0eC0+bWF4X3JlcXVlc3QpCi0rCQkJcmNudCA9IGRjdHgtPm1heF9yZXF1ZXN0OwotKwkJZWxz ZQotKwkJCXJjbnQgPSBjb3VudDsKLSsJCWlmIChkY3R4LT5nZXRfYWRpbikKLSsJCQl7Ci0rCQkJ YWRpbmxlbiA9IGRjdHgtPmdldF9hZGluKGRjdHgsICZhZGluKTsKLSsJCQlpZiAoYWRpbmxlbiAm JiAhYWRpbikKLSsJCQkJewotKwkJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQllURVMsIEZJ UFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxfSU5QVVQpOwotKwkJCQlnb3RvIGVycjsK LSsJCQkJfQotKwkJCX0KLSsJCXJ2ID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIG91dCwgcmNu dCwgMCwgYWRpbiwgYWRpbmxlbik7Ci0rCQlpZiAoYWRpbikKLSsJCQl7Ci0rCQkJaWYgKGRjdHgt PmNsZWFudXBfYWRpbikKLSsJCQkJZGN0eC0+Y2xlYW51cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5s ZW4pOwotKwkJCWFkaW4gPSBOVUxMOwotKwkJCX0KLSsJCWlmICghcnYpCi0rCQkJZ290byBlcnI7 Ci0rCQlvdXQgKz0gcmNudDsKLSsJCWNvdW50IC09IHJjbnQ7Ci0rCQl9Ci0rCXdoaWxlIChjb3Vu dCk7Ci0rCXJ2ID0gMTsKLSsJZXJyOgotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7Ci0rCXJldHVybiBydjsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1 bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKLSsJewotKwlpZiAoZmlwc19kcmJnX2J5dGVz KG91dCwgY291bnQpIDw9IDApCi0rCQlyZXR1cm4gLTE7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0r c3RhdGljIGludCBmaXBzX2RyYmdfc3RhdHVzKHZvaWQpCi0rCXsKLSsJRFJCR19DVFggKmRjdHgg PSAmb3NzbF9kY3R4OwotKwlpbnQgcnY7Ci0rCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7Ci0rCXJ2ID0gZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZID8gMSA6IDA7Ci0r CUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0r Ci0rc3RhdGljIHZvaWQgZmlwc19kcmJnX2NsZWFudXAodm9pZCkKLSsJewotKwlEUkJHX0NUWCAq ZGN0eCA9ICZvc3NsX2RjdHg7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0r CUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRP X0xPQ0tfUkFORCk7Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zZWVkKGNvbnN0IHZv aWQgKnNlZWQsIGludCBzZWVkbGVuKQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0 eDsKLSsJaWYgKGRjdHgtPnJhbmRfc2VlZF9jYikKLSsJCXJldHVybiBkY3R4LT5yYW5kX3NlZWRf Y2IoZGN0eCwgc2VlZCwgc2VlZGxlbik7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGlu dCBmaXBzX2RyYmdfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLAotKwkJCQkJZG91 YmxlIGFkZF9lbnRyb3B5KQotKwl7Ci0rCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsJ aWYgKGRjdHgtPnJhbmRfYWRkX2NiKQotKwkJcmV0dXJuIGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgs IHNlZWQsIHNlZWRsZW4sIGFkZF9lbnRyb3B5KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0 aWMgY29uc3QgUkFORF9NRVRIT0QgcmFuZF9kcmJnX21ldGggPQotKwl7Ci0rCWZpcHNfZHJiZ19z ZWVkLAotKwlmaXBzX2RyYmdfYnl0ZXMsCi0rCWZpcHNfZHJiZ19jbGVhbnVwLAotKwlmaXBzX2Ry YmdfYWRkLAotKwlmaXBzX2RyYmdfcHNldWRvLAotKwlmaXBzX2RyYmdfc3RhdHVzCi0rCX07Ci0r Ci0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCkKLSsJewotKwlyZXR1 cm4gJnJhbmRfZHJiZ19tZXRoOwotKwl9Ci0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMz OjAyLjc5NTI5NDkwNyArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX3NlbGZ0ZXN0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTUyOTQ5MDcgKzAxMDAK LUBAIC0wLDAgKzEsODYyIEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19zZWxmdGVzdC5jICov Ci0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq IENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsjaW5jbHVkZSAi Zmlwc19sb2NsLmgiCi0rCi0rI2luY2x1ZGUgImZpcHNfZHJiZ19zZWxmdGVzdC5oIgotKwotK3R5 cGVkZWYgc3RydWN0IHsKLSsJaW50IHBvc3Q7Ci0rCWludCBuaWQ7Ci0rCXVuc2lnbmVkIGludCBm bGFnczsKLSsKLSsJLyogS0FUIGRhdGEgZm9yIG5vIFBSICovCi0rCWNvbnN0IHVuc2lnbmVkIGNo YXIgKmVudDsKLSsJc2l6ZV90IGVudGxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7 Ci0rCXNpemVfdCBub25jZWxlbjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqcGVyczsKLSsJc2l6 ZV90IHBlcnNsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW47Ci0rCXNpemVfdCBhZGlu bGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRyZXNlZWQ7Ci0rCXNpemVfdCBlbnRyZXNl ZWRsZW47Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5yZXNlZWQ7Ci0rCXNpemVfdCBhZGlu cmVzZWVkbGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluMjsKLSsJc2l6ZV90IGFkaW4y bGVuOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXQ7Ci0rCXNpemVfdCBrYXRsZW47Ci0rCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmthdDI7Ci0rCXNpemVfdCBrYXQybGVuOwotKwotKwkvKiBLQVQg ZGF0YSBmb3IgUFIgKi8KLSsJY29uc3QgdW5zaWduZWQgY2hhciAqZW50X3ByOwotKwlzaXplX3Qg ZW50bGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZV9wcjsKLSsJc2l6ZV90IG5v bmNlbGVuX3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzX3ByOwotKwlzaXplX3QgcGVy c2xlbl9wcjsKLSsJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbl9wcjsKLSsJc2l6ZV90IGFkaW5s ZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHByX3ByOwotKwlzaXplX3QgZW50cHJs ZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5nX3ByOwotKwlzaXplX3QgYWRpbmds ZW5fcHI7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudGdfcHI7Ci0rCXNpemVfdCBlbnRnbGVu X3ByOwotKwljb25zdCB1bnNpZ25lZCBjaGFyICprYXRfcHI7Ci0rCXNpemVfdCBrYXRsZW5fcHI7 Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDJfcHI7Ci0rCXNpemVfdCBrYXQybGVuX3ByOwot KwotKwl9IERSQkdfU0VMRlRFU1RfREFUQTsKLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2Rh dGEobmlkLCBmbGFnLCBwciwgcCkge3AsIG5pZCwgZmxhZyB8IERSQkdfRkxBR19URVNULCBcCi0r CXByIyNfZW50cm9weWlucHV0LCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXQpLCBcCi0rCXByIyNf bm9uY2UsIHNpemVvZihwciMjX25vbmNlKSwgXAotKwlwciMjX3BlcnNvbmFsaXphdGlvbnN0cmlu Zywgc2l6ZW9mKHByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAotKwlwciMjX2FkZGl0aW9u YWxpbnB1dCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0KSwgXAotKwlwciMjX2VudHJvcHlp bnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0cmVzZWVkKSwgXAotKwlwciMjX2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkKSwg XAotKwlwciMjX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dDIp LCBcCi0rCXByIyNfaW50X3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfaW50X3JldHVybmVkYml0 cyksIFwKLSsJcHIjI19yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3JldHVybmVkYml0cyksIFwK LSsJcHIjI19wcl9lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dCksIFwK LSsJcHIjI19wcl9ub25jZSwgc2l6ZW9mKHByIyNfcHJfbm9uY2UpLCBcCi0rCXByIyNfcHJfcGVy c29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcp LCBcCi0rCXByIyNfcHJfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19wcl9hZGRpdGlvbmFs aW5wdXQpLCBcCi0rCXByIyNfcHJfZW50cm9weWlucHV0cHIsIHNpemVvZihwciMjX3ByX2VudHJv cHlpbnB1dHByKSwgXAotKwlwciMjX3ByX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX3By X2FkZGl0aW9uYWxpbnB1dDIpLCBcCi0rCXByIyNfcHJfZW50cm9weWlucHV0cHIyLCBzaXplb2Yo cHIjI19wcl9lbnRyb3B5aW5wdXRwcjIpLCBcCi0rCXByIyNfcHJfaW50X3JldHVybmVkYml0cywg c2l6ZW9mKHByIyNfcHJfaW50X3JldHVybmVkYml0cyksIFwKLSsJcHIjI19wcl9yZXR1cm5lZGJp dHMsIHNpemVvZihwciMjX3ByX3JldHVybmVkYml0cyksIFwKLSsJfQotKwotKyNkZWZpbmUgbWFr ZV9kcmJnX3Rlc3RfZGF0YV9kZihuaWQsIHByLCBwKSBcCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEo bmlkLCBEUkJHX0ZMQUdfQ1RSX1VTRV9ERiwgcHIsIHApCi0rCi0rI2RlZmluZSBtYWtlX2RyYmdf dGVzdF9kYXRhX2VjKGN1cnZlLCBtZCwgcHIsIHApIFwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YSgo Y3VydmUgPDwgMTYpIHwgbWQgLCAwLCBwciwgcCkKLSsKLStzdGF0aWMgRFJCR19TRUxGVEVTVF9E QVRBIGRyYmdfdGVzdFtdID0gewotKwltYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9hZXNfMTI4 X2N0ciwgYWVzXzEyOF91c2VfZGYsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9h ZXNfMTkyX2N0ciwgYWVzXzE5Ml91c2VfZGYsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhX2Rm KE5JRF9hZXNfMjU2X2N0ciwgYWVzXzI1Nl91c2VfZGYsIDEpLAotKwltYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9hZXNfMTI4X2N0ciwgMCwgYWVzXzEyOF9ub19kZiwgMCksCi0rCW1ha2VfZHJiZ190 ZXN0X2RhdGEoTklEX2Flc18xOTJfY3RyLCAwLCBhZXNfMTkyX25vX2RmLCAwKSwKLSsJbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfYWVzXzI1Nl9jdHIsIDAsIGFlc18yNTZfbm9fZGYsIDEpLAotKwlt YWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGExLCAwLCBzaGExLCAwKSwKLSsJbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfc2hhMjI0LCAwLCBzaGEyMjQsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRh KE5JRF9zaGEyNTYsIDAsIHNoYTI1NiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3No YTM4NCwgMCwgc2hhMzg0LCAwKSwKLSsJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhNTEyLCAw LCBzaGE1MTIsIDApLAotKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTEsIDAs IGhtYWNfc2hhMSwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMjI0 LCAwLCBobWFjX3NoYTIyNCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRo U0hBMjU2LCAwLCBobWFjX3NoYTI1NiwgMSksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2ht YWNXaXRoU0hBMzg0LCAwLCBobWFjX3NoYTM4NCwgMCksCi0rCW1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX2htYWNXaXRoU0hBNTEyLCAwLCBobWFjX3NoYTUxMiwgMCksCi0rCXswLDAsMH0KLSsJfTsK LSsKLSt0eXBlZGVmIHN0cnVjdCAKLSsJewotKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7Ci0r CXNpemVfdCBlbnRsZW47Ci0rCWludCBlbnRjbnQ7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5v bmNlOwotKwlzaXplX3Qgbm9uY2VsZW47Ci0rCWludCBub25jZWNudDsKLSsJfSBURVNUX0VOVDsK LSsKLStzdGF0aWMgc2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQg Y2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9w eSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotKwl7Ci0rCVRFU1RfRU5UICp0ID0g RklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsJKnBvdXQgPSAodW5zaWduZWQgY2hhciAq KXQtPmVudDsKLSsJdC0+ZW50Y250Kys7Ci0rCXJldHVybiB0LT5lbnRsZW47Ci0rCX0KLSsKLStz dGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipw b3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVf dCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSsJewotKwlURVNUX0VOVCAqdCA9IEZJUFNfZHJi Z19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rCSpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5ub25j ZTsKLSsJdC0+bm9uY2VjbnQrKzsKLSsJcmV0dXJuIHQtPm5vbmNlbGVuOwotKwl9Ci0rCi0rc3Rh dGljIGludCBmaXBzX2RyYmdfc2luZ2xlX2thdChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVT VF9EQVRBICp0ZCwKLSsJCQkJCQkJCWludCBxdWljaykKLSsJewotKwlURVNUX0VOVCB0OwotKwlp bnQgcnYgPSAwOwotKwlzaXplX3QgYWRpbmxlbjsKLSsJdW5zaWduZWQgY2hhciByYW5kb3V0WzEw MjRdOwotKwotKwkvKiBJbml0aWFsIHRlc3Qgd2l0aG91dCBQUiAqLwotKwotKwkvKiBJbnN0YW50 aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0aW9uCi0r CSAqIHN0cmluZy4KLSsJICovCi0rCi0rCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5p ZCwgdGQtPmZsYWdzKSkKLSsJCXJldHVybiAwOwotKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJh Y2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0rCQlyZXR1cm4g MDsKLSsKLSsJRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7Ci0rCi0rCXQuZW50ID0g dGQtPmVudDsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50bGVuOwotKwl0Lm5vbmNlID0gdGQtPm5vbmNl OwotKwl0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOwotKwl0LmVudGNudCA9IDA7Ci0rCXQubm9u Y2VjbnQgPSAwOwotKwotKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVy cywgdGQtPnBlcnNsZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIE5vdGUgZm9yIENUUiB3aXRo b3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKLSsJICogaWdub3JlIGJ5dGVzIGFm dGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCi0rCSAqIHRvIGhhbGYgdG8gZW5z dXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCi0rCSAqLwotKwlpZiAoIWZpcHNfcG9zdF9jb3Jy dXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKLSsJCWFkaW5s ZW4gPSB0ZC0+YWRpbmxlbiAvIDI7Ci0rCWVsc2UKLSsJCWFkaW5sZW4gPSB0ZC0+YWRpbmxlbjsK LSsKLSsJLyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4 cGVjdGVkIGRhdGEgKi8KLSsJaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwg dGQtPmthdGxlbiwgMCwKLSsJCQkJdGQtPmFkaW4sIGFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0r Ci0rCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdCwgdGQtPmthdGxlbikpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDFfRkFJ TFVSRSk7Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCS8qIElmIGFiYnJldmlhdGVkIFBPU1QgZW5k IG9mIHRlc3QgKi8KLSsJaWYgKHF1aWNrKQotKwkJewotKwkJcnYgPSAxOwotKwkJZ290byBlcnI7 Ci0rCQl9Ci0rCS8qIFJlc2VlZCBEUkJHIHdpdGggdGVzdCBlbnRyb3B5IGFuZCBhZGRpdGlvbmFs IGlucHV0ICovCi0rCXQuZW50ID0gdGQtPmVudHJlc2VlZDsKLSsJdC5lbnRsZW4gPSB0ZC0+ZW50 cmVzZWVkbGVuOwotKwotKwlpZiAoIUZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW5yZXNl ZWQsIHRkLT5hZGlucmVzZWVkbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBHZW5lcmF0ZSB3 aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLwotKwlp ZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0MmxlbiwgMCwKLSsJ CQkJdGQtPmFkaW4yLCB0ZC0+YWRpbjJsZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmIChtZW1j bXAocmFuZG91dCwgdGQtPmthdDIsIHRkLT5rYXQybGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJFKTsKLSsJ CWdvdG8gZXJyMjsKLSsJCX0KLSsKLSsJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0r Ci0rCS8qIE5vdyB0ZXN0IHdpdGggUFIgKi8KLSsKLSsJLyogSW5zdGFudGlhdGUgRFJCRyB3aXRo IHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgotKwkgKiBzdHJpbmcuCi0r CSAqLwotKwlpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0r CQlyZXR1cm4gMDsKLSsJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2Vu dHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUZJUFNfZHJi Z19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwotKwotKwl0LmVudCA9IHRkLT5lbnRfcHI7Ci0rCXQu ZW50bGVuID0gdGQtPmVudGxlbl9wcjsKLSsJdC5ub25jZSA9IHRkLT5ub25jZV9wcjsKLSsJdC5u b25jZWxlbiA9IHRkLT5ub25jZWxlbl9wcjsKLSsJdC5lbnRjbnQgPSAwOwotKwl0Lm5vbmNlY250 ID0gMDsKLSsKLSsJaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnNfcHIs IHRkLT5wZXJzbGVuX3ByKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBOb3cgZ2VuZXJhdGUgd2l0 aCBQUjogd2UgbmVlZCB0byBzdXBwbHkgZW50cm9weSBhcyB0aGlzIHdpbGwKLSsJICogcGVyZm9y bSBhIHJlc2VlZCBvcGVyYXRpb24uIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVl LgotKwkgKi8KLSsKLSsJdC5lbnQgPSB0ZC0+ZW50cHJfcHI7Ci0rCXQuZW50bGVuID0gdGQtPmVu dHBybGVuX3ByOwotKwotKwkvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9u YWwgaW5wdXQgdmFsdWVzCi0rCSAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBz byByZWR1Y2UgYWRpbmxlbgotKwkgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMg ZmVkIGluLgotKwkgKi8KLSsJaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywg ZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCi0rCQlhZGlubGVuID0gdGQtPmFkaW5sZW5fcHIg LyAyOwotKwllbHNlCi0rCQlhZGlubGVuID0gdGQtPmFkaW5sZW5fcHI7Ci0rCWlmICghRklQU19k cmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW5fcHIsIDEsCi0rCQkJCXRkLT5h ZGluX3ByLCBhZGlubGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAobWVtY21wKHJhbmRvdXQs IHRkLT5rYXRfcHIsIHRkLT5rYXRsZW5fcHIpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMV9GQUlMVVJFKTsKLSsJCWdvdG8gZXJy MjsKLSsJCX0KLSsKLSsJLyogTm93IGdlbmVyYXRlIGFnYWluIHdpdGggUFI6IHN1cHBseSBuZXcg ZW50cm9weSBhZ2Fpbi4KLSsJICogQ2hlY2sgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUu Ci0rCSAqLwotKwotKwl0LmVudCA9IHRkLT5lbnRnX3ByOwotKwl0LmVudGxlbiA9IHRkLT5lbnRn bGVuX3ByOwotKwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+ a2F0Mmxlbl9wciwgMSwKLSsJCQkJdGQtPmFkaW5nX3ByLCB0ZC0+YWRpbmdsZW5fcHIpKQotKwkJ Z290byBlcnI7Ci0rCi0rCWlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdDJfcHIsIHRkLT5rYXQy bGVuX3ByKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBG SVBTX1JfUFJfVEVTVDJfRkFJTFVSRSk7Ci0rCQlnb3RvIGVycjI7Ci0rCQl9Ci0rCS8qIEFsbCBP SywgdGVzdCBjb21wbGV0ZSAqLwotKwlydiA9IDE7Ci0rCi0rCWVycjoKLSsJaWYgKHJ2ID09IDAp Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1NFTEZURVNU X0ZBSUxFRCk7Ci0rCWVycjI6Ci0rCUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwkK LSsJcmV0dXJuIHJ2OwotKwotKwl9Ci0rCi0rLyogSW5pdGlhbGlzZSBhIERSQkcgYmFzZWQgb24g c2VsZnRlc3QgZGF0YSAqLwotKwotK3N0YXRpYyBpbnQgZG9fZHJiZ19pbml0KERSQkdfQ1RYICpk Y3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLCBURVNUX0VOVCAqdCkKLSsJewotKwotKwlpZiAo IUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0rCQlyZXR1cm4gMDsK LSsKLSsJaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAs IDAsIHRlc3Rfbm9uY2UsIDApKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUZJUFNfZHJiZ19zZXRfYXBw X2RhdGEoZGN0eCwgdCk7Ci0rCi0rCXQtPmVudCA9IHRkLT5lbnQ7Ci0rCXQtPmVudGxlbiA9IHRk LT5lbnRsZW47Ci0rCXQtPm5vbmNlID0gdGQtPm5vbmNlOwotKwl0LT5ub25jZWxlbiA9IHRkLT5u b25jZWxlbjsKLSsJdC0+ZW50Y250ID0gMDsKLSsJdC0+bm9uY2VjbnQgPSAwOwotKwlyZXR1cm4g MTsKLSsJfQotKwotKy8qIEluaXRpYWxpc2UgYW5kIGluc3RhbnRpYXRlIERSQkcgYmFzZWQgb24g c2VsZnRlc3QgZGF0YSAqLwotK3N0YXRpYyBpbnQgZG9fZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NU WCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICp0ZCwKLSsJCQkJCQkJCVRFU1RfRU5UICp0KQot Kwl7Ci0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCB0KSkKLSsJCXJldHVybiAwOwotKwlp ZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pKQot KwkJcmV0dXJuIDA7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0rCi0rLyogVGhpcyBmdW5jdGlvbiBw ZXJmb3JtcyBleHRlbnNpdmUgZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgU1A4MDAtOTAu Ci0rICogSW5kdWNlIHNldmVyYWwgZmFpbHVyZSBtb2RlcyBhbmQgY2hlY2sgYW4gZXJyb3IgY29u ZGl0aW9uIGlzIHNldC4KLSsgKiBUaGlzIGZ1bmN0aW9uIGFsb25nIHdpdGggZmlwc19kcmJnX3Np bmdsZV9rYXQgcGVmb3JtcyB0aGUgaGVhbHRoIGNoZWNraW5nCi0rICogb3BlcmF0aW9uLgotKyAq LwotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2Vycm9yX2NoZWNrKERSQkdfQ1RYICpkY3R4LCBE UkJHX1NFTEZURVNUX0RBVEEgKnRkKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0 XTsKLSsJVEVTVF9FTlQgdDsKLSsJc2l6ZV90IGk7Ci0rCXVuc2lnbmVkIGludCByZXNlZWRfY291 bnRlcl90bXA7Ci0rCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWRjdHg7Ci0r Ci0rCS8qIEluaXRpYWxpc2UgRFJCRyAqLwotKwotKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0 ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIERvbid0IHJlcG9ydCBpbmR1Y2VkIGVycm9y cyAqLwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKwkvKiBQZXJzb25h bGlzYXRpb24gc3RyaW5nIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZGV0ZWN0aW9uIG9mIHRvbyBs YXJnZSBwZXJzb25saXNhdGlvbiBzdHJpbmcgKi8KLSsKLSsJaWYgKEZJUFNfZHJiZ19pbnN0YW50 aWF0ZShkY3R4LCB0ZC0+cGVycywgZGN0eC0+bWF4X3BlcnMgKyAxKSA+IDApCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9QRVJTT05BTElTQVRJ T05fRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogRW50cm9w eSBzb3VyY2UgdGVzdHMgKi8KLSsKLSsJLyogVGVzdCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlIGRl dGVjaW9uOiBpLmUuIHJldHVybnMgbm8gZGF0YSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0r CWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+ IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8q IFRyeSB0byBnZW5lcmF0ZSBvdXRwdXQgZnJvbSB1bmluc3RhbnRpYXRlZCBEUkJHICovCi0rCWlm IChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKLSsJCQkJ dGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290 byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwlp ZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0r CQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkK LSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwot KwkvKiBUZXN0IGluc3VmZmljaWVudCBlbnRyb3B5ICovCi0rCi0rCXQuZW50bGVuID0gZGN0eC0+ bWluX2VudHJvcHkgLSAxOwotKwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRk LT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdv dG8gZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJ aWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwot KwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgdG9vIG11Y2ggZW50cm9weSAqLwotKwot KwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJZ290byBlcnI7Ci0rCi0rCWRj dHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rCXQuZW50bGVuID0gZGN0eC0+bWF4 X2VudHJvcHkgKyAxOwotKwotKwlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5w ZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwotKwlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsJaWYg KCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIE5vbmNlIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgdG9v IHNtYWxsIG5vbmNlICovCi0rCi0rCWlmIChkY3R4LT5taW5fbm9uY2UpCi0rCQl7Ci0rCi0rCQlp ZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwotKwkJZGN0 eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJCXQubm9uY2VsZW4gPSBkY3R4LT5t aW5fbm9uY2UgLSAxOwotKwotKwkJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+ cGVycywgdGQtPnBlcnNsZW4pID4gMCkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQkJZ290 byBlcnI7Ci0rCQkJfQotKwotKwkJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0r CQlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9S KTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCS8qIFRlc3QgdG9vIGxhcmdl IG5vbmNlICovCi0rCi0rCWlmIChkY3R4LT5tYXhfbm9uY2UpCi0rCQl7Ci0rCi0rCQlpZiAoIWRv X2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKwkJCWdvdG8gZXJyOwotKwotKwkJZGN0eC0+aWZs YWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJCXQubm9uY2VsZW4gPSBkY3R4LT5tYXhfbm9u Y2UgKyAxOwotKwotKwkJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywg dGQtPnBlcnNsZW4pID4gMCkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rCQkJZ290byBlcnI7 Ci0rCQkJfQotKwotKwkJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCQlpZiAo IUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJ CQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCS8qIEluc3RhbnRpYXRlIHdpdGggdmFs aWQgZGF0YS4gKi8KLSsJaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0r CQkJZ290byBlcnI7Ci0rCi0rCS8qIENoZWNrIGdlbmVyYXRpb24gaXMgbm93IE9LICovCi0rCWlm ICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJ CXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQlnb3RvIGVycjsKLSsKLSsJZGN0eC0+aWZsYWdz IHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJLyogUmVxdWVzdCB0b28gbXVjaCBkYXRhIGZvciBv bmUgcmVxdWVzdCAqLwotKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIGRj dHgtPm1heF9yZXF1ZXN0ICsgMSwgMCwKLSsJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsJ CXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFUVVF U1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCS8q IFRyeSB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLwotKwlpZiAoRklQU19kcmJnX2dlbmVy YXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rCQkJCXRkLT5hZGluLCBkY3R4LT5t YXhfYWRpbiArIDEpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwotKwkvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBm YWlscyBpZiBlbnRyb3B5IHNvdXJjZQotKwkgKiBmYWlsdXJlLgotKwkgKi8KLSsKLSsJdC5lbnRs ZW4gPSAwOwotKwotKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5r YXRsZW4sIDEsCi0rCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rCQl7Ci0rCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVU RUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCQkKLSsJZGN0eC0+aWZsYWdzICY9IH5EUkJH X0ZMQUdfTk9FUlI7Ci0rCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RB TlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwotKwkvKiBJbnN0YW50aWF0 ZSBhZ2FpbiB3aXRoIHZhbGlkIGRhdGEgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luc3RhbnRpYXRl KGRjdHgsIHRkLCAmdCkpCi0rCQkJZ290byBlcnI7Ci0rCS8qIFRlc3QgcmVzZWVkIGNvdW50ZXIg d29ya3MgKi8KLSsJLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVyICovCi0rCXJlc2VlZF9j b3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOwotKwkvKiBTZXQgcmVzZWVkIGNvdW50 ZXIgdG8gYmV5b25kIGludGVydmFsICovCi0rCWRjdHgtPnJlc2VlZF9jb3VudGVyID0gZGN0eC0+ cmVzZWVkX2ludGVydmFsOwotKwotKwkvKiBHZW5lcmF0ZSBvdXRwdXQgYW5kIGNoZWNrIGVudHJv cHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KLSsJdC5lbnRjbnQgPSAwOwotKwlp ZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKwkJ CQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0rCWlmICh0LmVudGNudCAh PSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBT X1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOwotKwkJZ290byBlcnI7Ci0rCQl9 Ci0rCS8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICovCi0rCWlmIChkY3R4 LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAxKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVTRUVEX0NPVU5URVJf RVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlmbGFncyAmPSB+RFJCR19G TEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogQ2hlY2sgcHJlZGljdGlv biByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKLSsJICogZmFpbHVy ZS4KLSsJICovCi0rCi0rCXQuZW50bGVuID0gMDsKLSsKLSsJZGN0eC0+aWZsYWdzIHw9IERSQkdf RkxBR19OT0VSUjsKLSsJaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+ a2F0bGVuLCAxLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJewotKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRF VEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwkJCi0rCWRjdHgtPmlmbGFncyAmPSB+RFJC R19GTEFHX05PRVJSOwotKwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQot KwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsKLSsJaWYgKCFkb19k cmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0rCQkJZ290byBlcnI7Ci0rCS8qIFRlc3Qg cmVzZWVkIGNvdW50ZXIgd29ya3MgKi8KLSsJLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVy ICovCi0rCXJlc2VlZF9jb3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOwotKwkvKiBT ZXQgcmVzZWVkIGNvdW50ZXIgdG8gYmV5b25kIGludGVydmFsICovCi0rCWRjdHgtPnJlc2VlZF9j b3VudGVyID0gZGN0eC0+cmVzZWVkX2ludGVydmFsOwotKwotKwkvKiBHZW5lcmF0ZSBvdXRwdXQg YW5kIGNoZWNrIGVudHJvcHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KLSsJdC5l bnRjbnQgPSAwOwotKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+ a2F0bGVuLCAwLAotKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKwkJZ290byBlcnI7Ci0r CWlmICh0LmVudGNudCAhPSAxKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rCS8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0 ICovCi0rCWlmIChkY3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAx KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf UkVTRUVEX0NPVU5URVJfRVJST1IpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWRjdHgtPmlm bGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRl KGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBG SVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyog RXhwbGljaXQgcmVzZWVkIHRlc3RzICovCi0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdp dGggdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsJaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFH X05PRVJSOwotKwotKwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgZGN0eC0+ bWF4X2FkaW4gKyAxKSA+IDApCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQpOwotKwkJ Z290byBlcnI7Ci0rCQl9Ci0rCi0rCS8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggZW50cm9w eSBzb3VyY2UgZmFpbHVyZSAqLwotKwotKwl0LmVudGxlbiA9IDA7Ci0rCi0rCWlmIChGSVBTX2Ry YmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9V TkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlpZiAoIUZJUFNfZHJiZ191bmlu c3RhbnRpYXRlKGRjdHgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0K LSsKLSsJLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbXVjaCBlbnRyb3B5ICovCi0r Ci0rCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJ ZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsJdC5lbnRsZW4gPSBkY3R4LT5t YXhfZW50cm9weSArIDE7Ci0rCi0rCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlu LCB0ZC0+YWRpbmxlbikgPiAwKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsJCWdvdG8gZXJy OwotKwkJfQotKwotKwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJLyogVGVzdCBleHBsaWNpdCBy ZXNlZWQgd2l0aCB0b28gbGl0dGxlIGVudHJvcHkgKi8KLSsKLSsJaWYgKCFkb19kcmJnX2luaXQo ZGN0eCwgdGQsICZ0KSkKLSsJCWdvdG8gZXJyOwotKwotKwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19G TEFHX05PRVJSOwotKwotKwl0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKLSsKLSsJ aWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCi0r CQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRS T1BZX0VSUk9SX1VOREVURUNURUQpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghRklQ U19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsJCWdvdG8g ZXJyOwotKwkJfQotKwotKwlwID0gKHVuc2lnbmVkIGNoYXIgKikmZGN0eC0+ZDsKLSsJLyogU3Rh bmRhcmQgc2F5cyB3ZSBoYXZlIHRvIGNoZWNrIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcwot KwkgKiB0aGUgZGF0YS4uLgotKwkgKi8KLSsJZm9yIChpID0gMDsgaSA8IHNpemVvZihkY3R4LT5k KTsgaSsrKQotKwkJewotKwkJaWYgKCpwICE9IDApCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJP Uik7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwkJcCsrOwotKwkJfQotKwotKwlyZXR1cm4gMTsK LSsKLSsJZXJyOgotKwkvKiBBIHJlYWwgZXJyb3IgYXMgb3Bwb3NlZCB0byBhbiBpbmR1Y2VkIG9u ZTogdW5kZXJseWluZyBmdW5jdGlvbiB3aWxsCi0rCSAqIGluZGljYXRlIHRoZSBlcnJvci4KLSsJ ICovCi0rCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rCQlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9GVU5DVElPTl9FUlJPUik7Ci0r CUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwot K2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQg ZmxhZ3MpCi0rCXsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsJZmxhZ3MgfD0gRFJCR19G TEFHX1RFU1Q7Ci0rCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKLSsJ CXsKLSsJCWlmICh0ZC0+bmlkID09IG5pZCAmJiB0ZC0+ZmxhZ3MgPT0gZmxhZ3MpCi0rCQkJewot KwkJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQotKwkJCQlyZXR1cm4g MDsKLSsJCQlyZXR1cm4gZmlwc19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKTsKLSsJCQl9Ci0r CQl9Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0raW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJC R19DVFggKmRjdHgpCi0rCXsKLSsJaW50IHJ2OwotKwlEUkJHX0NUWCAqdGN0eCA9IE5VTEw7Ci0r CXRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwotKwlmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RF U1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rCWlmICghdGN0eCkKLSsJCXJl dHVybiAwOwotKwlydiA9IGZpcHNfZHJiZ19rYXQodGN0eCwgZGN0eC0+dHlwZSwgZGN0eC0+eGZs YWdzKTsKLSsJaWYgKHRjdHgpCi0rCQlGSVBTX2RyYmdfZnJlZSh0Y3R4KTsKLSsJaWYgKHJ2KQot KwkJZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54 ZmxhZ3MpOwotKwllbHNlCi0rCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4 LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKLSsJaWYgKCFydikKLSsJCWRjdHgtPnN0YXR1cyA9IERS QkdfU1RBVFVTX0VSUk9SOwotKwllbHNlCi0rCQlkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsK LSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2b2lkKQotKwl7 Ci0rCURSQkdfQ1RYICpkY3R4OwotKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwotKwlpbnQgcnYg PSAxOwotKwlkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsJaWYgKCFkY3R4KQotKwkJcmV0 dXJuIDA7Ci0rCWZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKLSsJCXsK LSsJCWlmICh0ZC0+cG9zdCAhPSAxKQotKwkJCWNvbnRpbnVlOwotKwkJaWYgKCFmaXBzX3Bvc3Rf c3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCi0rCQkJcmV0dXJu IDE7Ci0rCQlpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAxKSkKLSsJCQl7Ci0r CQkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7 Ci0rCQkJcnYgPSAwOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsJCWlmICghZmlwc19wb3N0X3N1 Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKwkJCXJldHVybiAw OwotKwkJfQotKwlGSVBTX2RyYmdfZnJlZShkY3R4KTsKLSsJcmV0dXJuIHJ2OwotKwl9Ci0rCi0r Ci0raW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCkKLSsJewotKwlEUkJHX0NUWCAqZGN0 eDsKLSsJRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsJaW50IHJ2ID0gMTsKLSsJZGN0eCA9IEZJ UFNfZHJiZ19uZXcoMCwgMCk7Ci0rCWlmICghZGN0eCkKLSsJCXJldHVybiAwOwotKwlmb3IgKHRk ID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspCi0rCQl7Ci0rCQlpZiAoIWZpcHNfcG9z dF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsJCQlyZXR1 cm4gMTsKLSsJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQotKwkJCXsK LSsJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdz KTsKLSsJCQlydiA9IDA7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwkJaWYgKCFmaXBzX2RyYmdf ZXJyb3JfY2hlY2soZGN0eCwgdGQpKQotKwkJCXsKLSsJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNf VEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsJCQlydiA9IDA7Ci0rCQkJY29udGlu dWU7Ci0rCQkJfQotKwkJaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQt Pm5pZCwgJnRkLT5mbGFncykpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfZHJiZ19mcmVl KGRjdHgpOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCi0tLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzCTIwMTItMDItMjkgMTA6 MzM6MDIuNzk2Mjk0OTE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlw cy9maXBzX2RyYmdfc2VsZnRlc3QuaAkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NjI5NDkxNSArMDEw MAotQEAgLTAsMCArMSwyMzM1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZS5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKy8qIFNlbGZ0ZXN0 IGFuZCBoZWFsdGggY2hlY2sgZGF0YSBmb3IgdGhlIFNQODAwLTkwIERSQkcgKi8KLSsKLSsjZGVm aW5lIF9fZmlwc19jb25zdHNlZwotKwotKy8qIEFFUy0xMjggdXNlIGRmIFBSICAqLwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3By X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweDYxLDB4NTIsMHg3YywweGUzLDB4MjMsMHg3ZCww eDBhLDB4MDcsMHgxMCwweDBjLDB4NTAsMHgzMywKLSsJMHhjOCwweGRiLDB4ZmYsMHgxMgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NTEsMHgwZCwweDg1LDB4NzcsMHhlZCww eDIyLDB4OTcsMHgyOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K LSsJewotKwkweDU5LDB4OWYsMHhiYiwweGNkLDB4ZDUsMHgyNSwweDY5LDB4YjUsMHhjYiwweGI1 LDB4MDMsMHhmZSwKLSsJMHhkNywweGQ3LDB4MDEsMHg2NwotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0KLSsJewotKwkweGVmLDB4ODgsMHg3NiwweDAxLDB4YWYsMHgzYywweGZl LDB4OGIsMHhhZiwweDI2LDB4MDYsMHg5ZSwKLSsJMHg5YSwweDQ3LDB4MDgsMHg3NgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZTIsMHg3NiwweGY5LDB4ZjYs MHgzYSwweGJhLDB4MTAsMHg5ZiwweGJmLDB4NDcsMHgwZSwweDUxLAotKwkweDA5LDB4ZmIsMHhh MywweGI2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGQ0 LDB4OTgsMHg4YSwweDQ2LDB4ODAsMHg0YywweGRiLDB4YTMsMHg1OSwweDAyLDB4NTcsMHg1MiwK LSsJMHg2NiwweDFjLDB4ZWEsMHg1YgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9Ci0rCXsKLSsJMHg4OCwweDhjLDB4OTEsMHhkNiwweGJlLDB4NTYsMHg2ZSwweDA4LDB4OWEs MHg2MiwweDJiLDB4MTEsCi0rCTB4M2YsMHg1ZSwweDMxLDB4MDYKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJMHhjMCwweDVjLDB4NmIsMHg5OCwweDAxLDB4MGQs MHg1OCwweDE4LDB4NTEsMHgxOCwweDk2LDB4YWUsCi0rCTB4YTcsMHhlMywweGE4LDB4NjcKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhjZiwweDAxLDB4YWMsMHgy MiwweDMxLDB4MDYsMHg4ZSwweGZjLDB4Y2UsMHg1NiwweGVhLDB4MjQsCi0rCTB4MGYsMHgzOCww eDQzLDB4YzYKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMTI4IHVzZSBkZiBObyBQUiAgKi8KLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9l bnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxZiwweDhlLDB4MzQsMHg4MiwweDBjLDB4YjcsMHhi ZSwweGM1LDB4MDEsMHgzZSwweGQwLDB4YTMsCi0rCTB4OWQsMHg3ZCwweDFjLDB4OWIKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9ub25jZVtdID0KLSsJewotKwkweGQ1LDB4NGQsMHhiZCwweDRhLDB4OTMsMHg3Ziww eGI4LDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJ MHhhYiwweGQ2LDB4M2YsMHgwNCwweGZlLDB4MjcsMHg2YiwweDJkLDB4ZDcsMHhjMywweDFjLDB4 ZjMsCi0rCTB4MzgsMHg2NiwweGJhLDB4MWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRb XSA9Ci0rCXsKLSsJMHhmZSwweGY0LDB4MDksMHhhOCwweGI3LDB4NzMsMHgyNywweDljLDB4NWYs MHhhNywweGVhLDB4NDYsCi0rCTB4YjUsMHhlMiwweGIyLDB4NDEKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9pbnRf cmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4NDIsMHhlNCwweDRlLDB4N2IsMHgyNywweGRkLDB4 Y2IsMHhiYywweDBhLDB4Y2YsMHhhNiwweDY3LAotKwkweGU3LDB4NTcsMHgxMSwweGI0Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4MTQsMHgyNiwweDY5LDB4 ZDksMHhmMywweDY1LDB4MDMsMHhkNiwweDZiLDB4YjksMHg0NCwweDBiLAotKwkweGM3LDB4YzQs MHg5ZSwweDM5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0r CTB4NTUsMHgyZSwweDYwLDB4OWEsMHgwNSwweDcyLDB4OGEsMHhhOCwweGVmLDB4MjIsMHg4MSww eDVhLAotKwkweGM4LDB4OTMsMHhmYSwweDg0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0 MltdID0KLSsJewotKwkweDNjLDB4NDAsMHhjOCwweGM0LDB4MTYsMHgwYywweDIxLDB4YTQsMHgz NywweDJjLDB4OGYsMHhhNSwKLSsJMHgwNiwweDBjLDB4MTUsMHgyYwotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3Jl dHVybmVkYml0c1tdID0KLSsJewotKwkweGUxLDB4M2UsMHg5OSwweDk4LDB4ODYsMHg2NywweDBi LDB4NjMsMHg3YiwweGJlLDB4M2YsMHg4OCwKLSsJMHg0NiwweDgxLDB4YzcsMHgxOQotKwl9Owot KwotKwotKy8qIEFFUy0xOTIgdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0K LSsJewotKwkweDJiLDB4NGUsMHg4YiwweGUxLDB4ZjEsMHgzNCwweDgwLDB4NTYsMHg4MSwweGY5 LDB4NzQsMHhlYywKLSsJMHgxNywweDQ0LDB4MmEsMHhmMSwweDE0LDB4YjAsMHhiZiwweDk3LDB4 MzksMHhiNywweDA0LDB4N2QKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9ub25jZVtdID0KLSsJewotKwkweGQ2 LDB4OWQsMHhlYiwweDE0LDB4NGUsMHg2YywweDMwLDB4MWUsMHgzOSwweDU1LDB4NzMsMHhkMCwK LSsJMHhkMSwweDgwLDB4NzgsMHhmYQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0KLSsJewotKwkweGZjLDB4NDMsMHg0YSwweGY4LDB4OWEsMHg1NSwweGIzLDB4NTMs MHg4MywweGUyLDB4MTgsMHgxNiwKLSsJMHgwYywweGRjLDB4Y2QsMHg1ZSwweDRmLDB4YTAsMHgw MywweDAxLDB4MmIsMHg5ZiwweGU0LDB4ZDUsCi0rCTB4N2QsMHg0OSwweGYwLDB4NDEsMHg5ZSww eDNkLDB4OTksMHgwNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewot KwkweDVlLDB4OWYsMHg0OSwweDZmLDB4MjEsMHg4YiwweDFkLDB4MzIsMHhkNSwweDg0LDB4NWMs MHhhYywKLSsJMHhhZiwweGRmLDB4ZTQsMHg3OSwweDllLDB4YWYsMHhhOSwweDgyLDB4ZDAsMHhm OCwweDRmLDB4Y2IsCi0rCTB4NjksMHgxMCwweDBhLDB4N2UsMHg4MSwweDU3LDB4YjUsMHgzNgot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZDQsMHg4MSwweDBj LDB4ZDcsMHg2NiwweDM5LDB4ZWMsMHg0MiwweDUzLDB4ODcsMHg0MSwweGE1LAotKwkweDFlLDB4 N2QsMHg4MCwweDkxLDB4OGUsMHhiYiwweGVkLDB4YWMsMHgxNCwweDAyLDB4MWEsMHhkNQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhkZiwweDFkLDB4Mzks MHg0NSwweDdjLDB4OWIsMHhjNiwweDJiLDB4N2QsMHg4YywweDkzLDB4ZTksCi0rCTB4MTksMHgz MCwweDZiLDB4NjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0r CTB4MDAsMHg3MSwweDI3LDB4NGUsMHhkMywweDE0LDB4ZjEsMHgyMCwweDdmLDB4NGEsMHg0MSww eDMyLAotKwkweDJhLDB4OTcsMHgxMSwweDQzLDB4OGYsMHg0YSwweDE1LDB4N2IsMHg5YiwweDUx LDB4NzksMHhkYSwKLSsJMHg0OSwweDNkLDB4ZGUsMHhlOCwweGJjLDB4OTMsMHg5MSwweDk5Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4OTAsMHhlZSwweDc2 LDB4YTEsMHg0NSwweDhkLDB4YjcsMHg0MCwweGIwLDB4MTEsMHhiZiwweGQwLAotKwkweDY1LDB4 ZDcsMHgzYywweDdjLDB4NGYsMHgyMCwweDNmLDB4NGUsMHgxMSwweDlkLDB4YjMsMHg1ZQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDI0LDB4M2IsMHgyMCwweGE0 LDB4MzcsMHg2NiwweGJhLDB4NzIsMHgzOSwweDNmLDB4Y2YsMHgzYywKLSsJMHg3ZSwweDFhLDB4 MmIsMHg4MwotKwl9OwotKwotKwotKy8qIEFFUy0xOTIgdXNlIGRmIE5vIFBSICAqLwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2Vu dHJvcHlpbnB1dFtdID0KLSsJewotKwkweDhkLDB4NzQsMHhhNCwweDUwLDB4MWEsMHgwMiwweDY4 LDB4MGMsMHgyYSwweDY5LDB4YzQsMHg4MiwKLSsJMHgzYiwweGJiLDB4ZGEsMHgwZSwweDdmLDB4 NzcsMHhhMywweDE3LDB4NzgsMHg1NywweGIyLDB4N2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9ub25jZVtdID0K LSsJewotKwkweDc1LDB4ZDUsMHgxZiwweGFjLDB4YTQsMHg4ZCwweDQyLDB4NzgsMHhkNywweDY5 LDB4ODYsMHg5ZCwKLSsJMHg3NywweGQ3LDB4NDEsMHgwZQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDRlLDB4MzMsMHg0MSwweDNjLDB4OWMsMHhjMiww eGQyLDB4NTMsMHhhZiwweDkwLDB4ZWEsMHhjZiwKLSsJMHgxOSwweDUwLDB4MWUsMHhlNiwweDZm LDB4NjMsMHhjOCwweDMyLDB4MjIsMHhkYywweDA3LDB4NjUsCi0rCTB4OWMsMHhkMywweGY4LDB4 MzAsMHg5ZSwweGVkLDB4MzUsMHg3MAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0K LSsJewotKwkweDVkLDB4OGIsMHg4YywweGMxLDB4ZGYsMHgwZSwweDAyLDB4NzgsMHhmYiwweDE5 LDB4YjgsMHg2OSwKLSsJMHg3OCwweDRlLDB4OWMsMHg1MiwweGJjLDB4YzcsMHgyMCwweGM5LDB4 ZTYsMHg1ZSwweDc3LDB4MjIsCi0rCTB4MjgsMHgzZCwweDBjLDB4OWUsMHg2OCwweGE4LDB4NDUs MHhkNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhkNSwweGU3 LDB4MDgsMHhjNSwweDE5LDB4OTksMHhkNSwweDMxLDB4MDMsMHgwYSwweDc0LDB4YjYsCi0rCTB4 YjcsMHhlZCwweGU5LDB4ZWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9Ci0r CXsKLSsJMHg5YywweDI2LDB4ZGEsMHhmMSwweGFjLDB4ZDksMHg1YSwweGQ2LDB4YTgsMHg2NSww eGY1LDB4MDIsCi0rCTB4OGYsMHhkYywweGEyLDB4MDksMHg1NCwweGE2LDB4ZTIsMHhhNCwweGRl LDB4MzIsMHhlMCwweDAxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQot Kwl7Ci0rCTB4OWIsMHg5MCwweGIwLDB4M2EsMHgwZSwweDNhLDB4ODAsMHgwNywweDRhLDB4ZjQs MHhkYSwweDc2LAotKwkweDI4LDB4MzAsMHgzYywweGVlLDB4NTQsMHgxYiwweDk0LDB4NTksMHg1 MSwweDQzLDB4NTYsMHg3NywKLSsJMHhhZiwweDg4LDB4ZGQsMHg2MywweDg5LDB4NDcsMHgwNiww eDY1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDNjLDB4MTEs MHg2NCwweDdhLDB4OTYsMHhmNSwweGQ4LDB4YjgsMHhhZSwweGQ2LDB4NzAsMHg0ZSwKLSsJMHgx NiwweDk2LDB4ZGUsMHhlOSwweDYyLDB4YmMsMHhlZSwweDI4LDB4MmYsMHgyNiwweGE2LDB4ZjAs Ci0rCTB4NTYsMHhlZiwweGEzLDB4ZjEsMHg2YiwweGExLDB4YjEsMHg3NwotKwl9OwotKwotK19f Zmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2Rm X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDBiLDB4ZTIsMHg1NiwweDAzLDB4MWUsMHhkYiww eDJjLDB4NmQsMHg3ZiwweDFiLDB4MTUsMHg1OCwKLSsJMHgxYSwweGY5LDB4MTMsMHgyOAotKwl9 OwotKwotKwotKy8qIEFFUy0yNTYgdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtd ID0KLSsJewotKwkweDYxLDB4NjgsMHhmYywweDFhLDB4ZjAsMHhiNSwweDk1LDB4NmIsMHg4NSww eDA5LDB4OWIsMHg3NCwKLSsJMHgzZiwweDEzLDB4NzgsMHg0OSwweDNiLDB4ODUsMHhlYywweDkz LDB4MTMsMHgzYiwweGE5LDB4NGYsCi0rCTB4OTYsMHhhYiwweDJjLDB4ZTQsMHhjOCwweDhmLDB4 ZGQsMHg2YQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX25vbmNlW10gPQotKwl7Ci0rCTB4YWQsMHhkMiwweGJi LDB4YmEsMHhiNywweDY1LDB4ODksMHhjMywweDIxLDB4NmMsMHg1NSwweDMzLAotKwkweDJiLDB4 MzYsMHhmZiwweGE0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQot Kwl7Ci0rCTB4NmUsMHhjYSwweGU3LDB4MjAsMHg3MiwweGQzLDB4ODQsMHg1YSwweDMyLDB4ZDMs MHg0YiwweDI0LAotKwkweDcyLDB4YzQsMHg2MywweDJiLDB4OWQsMHgxMiwweDI0LDB4MGMsMHgy MywweDI2LDB4OGUsMHg4MywKLSsJMHgxNiwweDM3LDB4MGIsMHhkMSwweDA2LDB4NGYsMHg2OCww eDZkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4N2UsMHgw OCwweDRhLDB4YmIsMHhlMywweDIxLDB4N2MsMHhjOSwweDIzLDB4ZDIsMHhmOCwweGIwLAotKwkw eDczLDB4OTgsMHhiYSwweDg0LDB4NzQsMHgyMywweGFiLDB4MDYsMHg4YSwweGUyLDB4MjIsMHhk MywKLSsJMHg3YiwweGNlLDB4OWIsMHhkMiwweDRhLDB4NzYsMHhiOCwweGRlCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2Vf ZGZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgwYiwweDIzLDB4YWYsMHhkZiwweGYx LDB4NjIsMHhkNywweGQzLDB4NDMsMHg5NywweGY4LDB4NzcsCi0rCTB4MDQsMHhhOCwweDQyLDB4 MjAsMHhiZCwweGY2LDB4MGYsMHhjMSwweDE3LDB4MmYsMHg5ZiwweDU0LAotKwkweGJiLDB4NTYs MHgxNywweDg2LDB4NjgsMHgwZSwweGJhLDB4YTkKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4MzEsMHg4ZSwweGFkLDB4YWYsMHg0MCwweGViLDB4NmIsMHg3 NCwweDMxLDB4NDYsMHg4MCwweGM3LAotKwkweDE3LDB4YWIsMHgzYywweDdhCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2Vf ZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDk0LDB4NmIsMHhjOSwweDlmLDB4 YWIsMHg4ZCwweGM1LDB4ZWMsMHg3MSwweDg4LDB4MWQsMHgwMCwKLSsJMHg4YywweDg5LDB4Njgs MHhlNCwweGM4LDB4MDcsMHg3NywweDM2LDB4MTcsMHg2ZCwweDc5LDB4NzgsCi0rCTB4YzcsMHgw NiwweDRlLDB4OTksMHgwNCwweDI4LDB4MjksMHhjMwotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlp bnB1dHByMltdID0KLSsJewotKwkweGJmLDB4NmMsMHg1OSwweDJhLDB4MGQsMHg0NCwweDBmLDB4 YWUsMHg5YSwweDVlLDB4MDMsMHg3MywKLSsJMHhkOCwweGE2LDB4ZTEsMHhjZiwweDI1LDB4NjEs MHgzOCwweDI0LDB4ODYsMHg5ZSwweDUzLDB4ZTgsCi0rCTB4YTQsMHhkZiwweDU2LDB4ZjQsMHgw NiwweDA3LDB4OWMsMHgwZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KLSsJewot KwkweDIyLDB4NGEsMHhiNCwweGI4LDB4YjYsMHhlZSwweDdkLDB4YjEsMHg5ZSwweGM5LDB4Zjks MHhhMCwKLSsJMHhkOSwweGUyLDB4OTcsMHgwMAotKwl9OwotKwotKwotKy8qIEFFUy0yNTYgdXNl IGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGE1LDB4M2UsMHgz NywweDEwLDB4MTcsMHg0MywweDkxLDB4OTMsMHg1OSwweDFlLDB4NDcsMHg1MCwKLSsJMHg4Nyww eGFhLDB4ZGQsMHhkNSwweGMxLDB4YzMsMHg4NiwweGNkLDB4Y2EsMHgwZCwweGRiLDB4NjgsCi0r CTB4ZTAsMHgwMiwweGQ4LDB4MGYsMHhkYywweDQwLDB4MWEsMHg0NwotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX25v bmNlW10gPQotKwl7Ci0rCTB4YTksMHg0ZCwweGE1LDB4NWEsMHhmZCwweGM1LDB4MGMsMHhlNSww eDFjLDB4OWEsMHgzYiwweDhhLAotKwkweDRjLDB4NDQsMHg4NCwweDQwCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OGIsMHg1MiwweGEyLDB4NGEsMHg5 MywweGMzLDB4NGUsMHhhNywweDFlLDB4MWMsMHhhNywweDA1LAotKwkweGViLDB4ODIsMHg5Yiww eGE2LDB4NWQsMHhlNCwweGQ0LDB4ZTAsMHg3ZiwweGEzLDB4ZDgsMHg2YiwKLSsJMHgzNywweDg0 LDB4NWYsMHhmMSwweGM3LDB4ZDUsMHhmNiwweGQyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlu cHV0W10gPQotKwl7Ci0rCTB4MjAsMHhmNCwweDIyLDB4ZWQsMHhmOCwweDVjLDB4YTEsMHg2YSww eDAxLDB4Y2YsMHhiZSwweDVmLAotKwkweDhkLDB4NmMsMHg5NCwweDdmLDB4YWUsMHgxMiwweGE4 LDB4NTcsMHhkYiwweDJhLDB4YTksMHhiZiwKLSsJMHhjNywweGIzLDB4NjUsMHg4MSwweDgwLDB4 OGQsMHgwZCwweDQ2Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eDRlLDB4NDQsMHhmZCwweGYzLDB4OWUsMHgyOSwweGEyLDB4YjgsMHgwZiwweDVkLDB4NmMsMHhl MSwKLSsJMHgyOCwweDBjLDB4M2IsMHhjMQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0KLSsJewotKwkweGRkLDB4NDAsMHhlNSwweDk4LDB4N2IsMHgyNywweDE2LDB4NzMsMHgx NSwweDY4LDB4ZDIsMHg3NiwKLSsJMHhiZiwweDBjLDB4NjcsMHgxNSwweDc1LDB4NzksMHgwMyww eGQzLDB4ZGUsMHhkZSwweDkxLDB4NDYsCi0rCTB4NDIsMHhkZCwweGQ0LDB4NjcsMHhjOCwweDc5 LDB4YzgsMHgxZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewot KwkweDdmLDB4ZDgsMHgxZiwweGJkLDB4MmEsMHhiNSwweDFjLDB4MTEsMHg1ZCwweDgzLDB4NGUs MHg5OSwKLSsJMHhmNiwweDVjLDB4YTUsMHg0MCwweDIwLDB4ZWQsMHgzOCwweDhlLDB4ZDUsMHg5 ZSwweGUwLDB4NzUsCi0rCTB4OTMsMHhmZSwweDEyLDB4NWUsMHg1ZCwweDczLDB4ZmIsMHg3NQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhjZCwweDJjLDB4ZmYs MHgxNCwweDY5LDB4M2UsMHg0YywweDllLDB4ZmQsMHhmZSwweDI2LDB4MGQsCi0rCTB4ZTksMHg4 NiwweDAwLDB4NDksMHgzMCwweGJhLDB4YjEsMHhjNiwweDUwLDB4NTcsMHg3NywweDJhLAotKwkw eDYyLDB4MzksMHgyYywweDNiLDB4NzQsMHhlYiwweGM5LDB4MGQKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9yZXR1 cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0ZiwweDc4LDB4YmUsMHhiOSwweDRkLDB4OTcsMHg4Yyww eGU5LDB4ZDAsMHg5NywweGZlLDB4YWQsCi0rCTB4ZmEsMHhmZCwweDM1LDB4NWUKLSsJfTsKLSsK LSsKLSsvKiBBRVMtMTI4IG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7 Ci0rCTB4OWEsMHgyNSwweDY1LDB4MTAsMHg2NywweGQ1LDB4YjYsMHg2YiwweDcwLDB4YTEsMHhi MywweGE0LAotKwkweDQzLDB4OTUsMHg4MCwweGMwLDB4ODQsMHgwYSwweDc5LDB4YjAsMHg4OCww eDc0LDB4ZjIsMHhiZiwKLSsJMHgzMSwweDZjLDB4MzMsMHgzOCwweDBiLDB4MDAsMHhiMiwweDVh Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9wcl9ub25jZVtdID0KLSsJewotKwkweDc4LDB4NDcsMHg2YiwweGY3LDB4 OTAsMHg4ZSwweDg3LDB4ZjEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KLSsJewotKwkweGY3LDB4MjIsMHgxZCwweDNhLDB4YmUsMHgxZCwweGNhLDB4MzIsMHgxYiww eGJkLDB4ODcsMHgwYywKLSsJMHg1MSwweDI0LDB4MTksMHhlZSwweGEzLDB4MjMsMHgwOSwweDYz LDB4MzMsMHgzZCwweGE4LDB4MGMsCi0rCTB4MWMsMHhmYSwweDQyLDB4ODksMHhjYywweDZmLDB4 YTAsMHhhOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQotKwl7Ci0rCTB4Yzks MHhlMCwweDgwLDB4YmYsMHg4YywweDQ1LDB4NTgsMHgzOSwweGZmLDB4MDAsMHhhYiwweDAyLAot KwkweDRjLDB4M2UsMHgzYSwweDk1LDB4OWIsMHg4MCwweGE4LDB4MjEsMHgyYSwweGVlLDB4YmEs MHg3MywKLSsJMHhiMSwweGQ5LDB4Y2YsMHgyOCwweGY2LDB4OGYsMHg5YiwweDEyCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDRjLDB4YTgsMHhjNSwweGYwLDB4 NTksMHg5ZSwweGE2LDB4OGQsMHgyNiwweDUzLDB4ZDcsMHg4YSwKLSsJMHhhOSwweGQ4LDB4Zjcs MHhlZCwweGIyLDB4ZjksMHgxMiwweDQyLDB4ZTEsMHhlNSwweGJkLDB4ZTcsCi0rCTB4ZTcsMHgx ZCwweDc0LDB4OTksMHgwMCwweDlkLDB4MzEsMHgzZQotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfaW50X3JldHVy bmVkYml0c1tdID0KLSsJewotKwkweGUyLDB4YWMsMHgyMCwweGYwLDB4ODAsMHhlNywweGJjLDB4 N2UsMHg5YywweDdiLDB4NjUsMHg3MSwKLSsJMHhhZiwweDE5LDB4MzIsMHgxNgotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9f ZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDMyLDB4N2YsMHgzOCwweDhiLDB4 NzMsMHgwYSwweDc4LDB4ODMsMHhkYywweDMwLDB4YmUsMHg5ZiwKLSsJMHgxMCwweDFmLDB4ZjUs MHgxZiwweGNhLDB4MDAsMHhiNSwweDBkLDB4ZDYsMHg5ZCwweDYwLDB4ODMsCi0rCTB4NTEsMHg1 NCwweDdkLDB4MzgsMHgyMywweDNhLDB4NTIsMHg1MAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlu cHV0cHIyW10gPQotKwl7Ci0rCTB4MTgsMHg2MSwweDUzLDB4NTYsMHhlZCwweGVkLDB4ZDcsMHgy MCwweGZiLDB4NzEsMHgwNCwweDdhLAotKwkweGIyLDB4YWMsMHhjMSwweDI4LDB4Y2QsMHhmMiww eGMyLDB4ZmMsMHhhYSwweGIxLDB4MDYsMHgwNywKLSsJMHhlOSwweDQ2LDB4OTUsMHgwMiwweDQ4 LDB4MDEsMHg3OCwweGY5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJ MHgyOSwweGM4LDB4MWIsMHgxNSwweGIxLDB4ZDEsMHhjMiwweGY2LDB4NzEsMHg4NiwweDY4LDB4 MzMsCi0rCTB4NTcsMHg4MiwweDMzLDB4YWYKLSsJfTsKLSsKLSsKLSsvKiBBRVMtMTI4IG5vIGRm IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YzksMHhjNSwweDc5LDB4 YmMsMHhlOCwweGM1LDB4MTksMHhkOCwweGJjLDB4NjYsMHg3MywweDY3LAotKwkweGY2LDB4ZDMs MHg3MiwweGFhLDB4YTYsMHgxNiwweGI4LDB4NTAsMHhiNywweDQ3LDB4M2EsMHg0MiwKLSsJMHhh YiwweGY0LDB4MTYsMHhiMiwweDk2LDB4ZDIsMHhiNiwweDYwCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9ub25jZVtd ID0KLSsJewotKwkweDVmLDB4YmYsMHg5NywweDBjLDB4NGIsMHhhNCwweDg3LDB4MTMKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweGNlLDB4ZmIsMHg3Yiww eDNmLDB4ZDQsMHg2YiwweDI5LDB4MGQsMHg2OSwweDA2LDB4ZmYsMHhiYiwKLSsJMHhmMiwweGU1 LDB4YzYsMHg2YywweDBhLDB4MTAsMHhhMCwweGNmLDB4MWEsMHg0OCwweGM3LDB4OGIsCi0rCTB4 M2MsMHgxNiwweDg4LDB4ZWQsMHg1MCwweDEzLDB4ODEsMHhjZQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRp b25hbGlucHV0W10gPQotKwl7Ci0rCTB4NGIsMHgyMiwweDQ2LDB4MTgsMHgwMiwweDdiLDB4ZDIs MHgxYiwweDIyLDB4NDIsMHg3YywweDM3LAotKwkweGQ5LDB4ZjYsMHhlOCwweDliLDB4MTIsMHgz MCwweDVmLDB4ZTksMHg5MCwweGU4LDB4MDgsMHgyNCwKLSsJMHg0ZiwweDA2LDB4NjYsMHhkYiww eDE5LDB4MmIsMHgxMywweDk1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7 Ci0rCTB4MmUsMHg5NiwweDcwLDB4NjQsMHhmYSwweGRmLDB4ZGYsMHg1NywweGI1LDB4ODIsMHhl ZSwweGQ2LAotKwkweGVkLDB4M2UsMHg2NSwweGMyCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRy ZXNlZWRbXSA9Ci0rCXsKLSsJMHgyNiwweGMwLDB4NzIsMHgxNiwweDNhLDB4NGIsMHhiNywweDk5 LDB4ZDQsMHgwNywweGFmLDB4NjYsCi0rCTB4NjIsMHgzNiwweDk2LDB4YTQsMHg1MSwweDE3LDB4 ZmEsMHgwNywweDhiLDB4MTcsMHg1ZSwweGExLAotKwkweDJmLDB4M2MsMHgxMCwweGU3LDB4OTAs MHhkMCwweDQ2LDB4MDAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJ ewotKwkweDgzLDB4MzksMHgzNywweDdiLDB4MDIsMHgwNiwweGQyLDB4MTIsMHgxMywweDhkLDB4 OGIsMHhmMiwKLSsJMHhmMCwweGY2LDB4MjYsMHhlYiwweGE0LDB4MjIsMHg3YiwweGMyLDB4ZTcs MHhiYSwweDc5LDB4ZTQsCi0rCTB4M2IsMHg3NywweDVkLDB4NGQsMHg0NywweGIyLDB4MmQsMHhi NAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDBiLDB4YjksMHg2 NywweDM3LDB4ZGIsMHg4MywweGRmLDB4Y2EsMHg4MSwweDhiLDB4ZjksMHgzZiwKLSsJMHhmMSww eDExLDB4MWIsMHgyZiwweGYwLDB4NjEsMHhhNiwweGRmLDB4YmEsMHhhMywweGIxLDB4YWMsCi0r CTB4ZDMsMHhlNiwweDA5LDB4YjgsMHgyYywweDZhLDB4NjcsMHhkNgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcmV0 dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MWUsMHhhNywweGE0LDB4ZTQsMHhlMSwweGE2LDB4N2Ms MHg2OSwweDlhLDB4NDQsMHg2YywweDM2LAotKwkweDgxLDB4MzcsMHgxOSwweGQ0Ci0rCX07Ci0r Ci0rCi0rLyogQUVTLTE5MiBubyBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJ ewotKwkweDlkLDB4MmMsMHhkMiwweDU1LDB4NjYsMHhlYSwweGUwLDB4YmUsMHgxOCwweGI3LDB4 NzYsMHhlNywKLSsJMHg3MywweDM1LDB4ZDgsMHgxZiwweGFkLDB4M2EsMHhlMywweDgxLDB4MGUs MHg5MiwweGQwLDB4NjEsCi0rCTB4YzksMHgxMiwweDI2LDB4ZjYsMHgxYywweGRmLDB4ZmUsMHg0 NywweGFhLDB4ZmUsMHg3ZCwweDVhLAotKwkweDE3LDB4MWYsMHg4ZCwweDlhCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9wcl9ub25jZVtdID0KLSsJewotKwkweDQ0LDB4ODIsMHhlZCwweGU4LDB4NGMsMHgyOCwweDVh LDB4MTQsMHhmZiwweDg4LDB4OGQsMHgxOSwKLSsJMHg2MSwweDVjLDB4ZWUsMHgwZgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf bm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NDcsMHhkNywweDli LDB4OTksMHhhYSwweGNiLDB4ZTcsMHhkMiwweDU3LDB4NjYsMHgyYywweGUxLAotKwkweDc4LDB4 ZDYsMHgyYywweGVhLDB4YTMsMHgyMywweDVmLDB4MmEsMHhjMSwweDNhLDB4ZjAsMHhhNCwKLSsJ MHgyMCwweDNiLDB4ZmEsMHgwNywweGQ1LDB4MDUsMHgwMiwweGU0LDB4NTcsMHgwMSwweGI2LDB4 MTAsCi0rCTB4NTcsMHgyZSwweGU3LDB4NTUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1 dFtdID0KLSsJewotKwkweDRiLDB4NzQsMHgwYiwweDQwLDB4Y2UsMHg2YiwweGMyLDB4NmEsMHgy NCwweGI0LDB4ZjMsMHhhZCwKLSsJMHg3YSwweGE1LDB4N2EsMHhhMiwweDE1LDB4ZTIsMHhjOCww eDYxLDB4MTUsMHhjNiwweGI3LDB4ODUsCi0rCTB4NjksMHgxMSwweGFkLDB4N2IsMHgxNCwweGQy LDB4ZjYsMHgxMiwweGExLDB4OTUsMHg1ZCwweDNmLAotKwkweGUyLDB4ZDAsMHgwYywweDJmCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDBjLDB4OWMsMHhhZCww eDA1LDB4ZWUsMHhhZSwweDQ4LDB4MjMsMHg4OSwweDU5LDB4YTEsMHg5NCwKLSsJMHhkNywweGQ4 LDB4NzUsMHhkNSwweDU0LDB4OTMsMHhjNywweDRhLDB4ZDksMHgyNiwweGRlLDB4ZWIsCi0rCTB4 YmEsMHhiMCwweDdlLDB4MzAsMHgxZCwweDVmLDB4NjksMHg0MCwweDljLDB4M2IsMHgxNywweDU4 LAotKwkweDFkLDB4MzAsMHhiMywweDc4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQotKwl7Ci0rCTB4ZjcsMHg5MywweGIwLDB4NmQsMHg3NywweDgzLDB4ZDUsMHgzOCwweDAx LDB4ZTEsMHg1MiwweDQwLAotKwkweDdlLDB4M2UsMHgwYywweDI2Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9h ZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4YmMsMHg0YiwweDM3LDB4NDQsMHgxYywweGM1 LDB4NDUsMHg1ZiwweDhmLDB4NTEsMHg2MiwweDhhLAotKwkweDg1LDB4MzAsMHgxZCwweDdjLDB4 ZTQsMHhjZiwweGY3LDB4NDQsMHhjZSwweDMyLDB4M2UsMHg1NywKLSsJMHg5NSwweGE0LDB4MmEs MHhkZiwweGZkLDB4OWUsMHgzOCwweDQxLDB4YjMsMHhmNiwweGM1LDB4ZWUsCi0rCTB4MGMsMHg0 YiwweGVlLDB4NmUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkw eGVjLDB4YWYsMHhmNiwweDRmLDB4YjEsMHhhMCwweDU0LDB4YjUsMHg1YiwweGUzLDB4NDYsMHhi MCwKLSsJMHg3NiwweDVhLDB4N2MsMHgzZiwweDdiLDB4OTQsMHg2OSwweDIxLDB4NTEsMHgwMiww eGU1LDB4OWYsCi0rCTB4MDQsMHg1OSwweDAyLDB4OTgsMHhjNiwweDQzLDB4MmMsMHhjYywweDI2 LDB4NGMsMHg4NywweDZiLAotKwkweDhlLDB4MGEsMHg4MywweGRmCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9y ZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg3NCwweDQ1LDB4ZmIsMHg1MywweDg0LDB4OTYsMHhi ZSwweGZmLDB4MTUsMHhjYywweDQxLDB4OTEsCi0rCTB4YjksMHhhMSwweDIxLDB4NjgKLSsJfTsK LSsKLSsKLSsvKiBBRVMtMTkyIG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0W10gPQot Kwl7Ci0rCTB4M2MsMHg3ZCwweGI1LDB4ZTAsMHg1NCwweGQ5LDB4NmUsMHg4YywweGE5LDB4ODYs MHhjZSwweDRlLAotKwkweDZiLDB4YWYsMHhlYiwweDJmLDB4ZTcsMHg3NSwweGUwLDB4OGIsMHhh NCwweDNiLDB4MDcsMHhmZSwKLSsJMHhiZSwweDMzLDB4NzUsMHg5MywweDgwLDB4MjcsMHhiNSww eDI5LDB4NDcsMHg4YiwweGM3LDB4MjgsCi0rCTB4OTQsMHhjMywweDU5LDB4NjMKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX25vbmNlW10gPQotKwl7Ci0rCTB4NDMsMHhmMSwweDdkLDB4YjgsMHhjMywweGZlLDB4ZDAs MHgyMywweDZiLDB4YjQsMHg5MiwweGRiLAotKwkweDI5LDB4ZmQsMHg0NSwweDcxCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9u b19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg5ZiwweDI0LDB4MjksMHg5 OSwweDllLDB4MDEsMHhhYiwweGU5LDB4MTksMHhkOCwweDIzLDB4MDgsCi0rCTB4YjcsMHhkNiww eDdlLDB4OGMsMHhjMCwweDllLDB4N2YsMHg2ZSwweDViLDB4MzMsMHgyMCwweDk2LAotKwkweDBi LDB4MjMsMHgyYywweGE1LDB4NmEsMHhmOCwweDFiLDB4MDQsMHgyNiwweGRiLDB4MmUsMHgyYiwK LSsJMHgzYiwweDg4LDB4Y2UsMHgzNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPQot Kwl7Ci0rCTB4OTQsMHhlOSwweDdjLDB4M2QsMHhhNywweGRiLDB4NjAsMHg4MywweDFmLDB4OTgs MHgzZiwweDBiLAotKwkweDg4LDB4NTksMHg1NywweDUxLDB4ODgsMHg5ZiwweDc2LDB4NDksMHg5 ZiwweGE2LDB4ZGEsMHg3MSwKLSsJMHgxZCwweDBkLDB4NDcsMHgxNiwweDYzLDB4YzUsMHg2OCww eGU0LDB4NWQsMHgzOSwweDY5LDB4YjMsCi0rCTB4M2UsMHhiZSwweGQ0LDB4OGUKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhmOSwweGQ3LDB4YWQsMHg2OSwweGFi LDB4OGYsMHgyMywweDU2LDB4NzAsMHgxNywweDRmLDB4MmEsCi0rCTB4NDUsMHhlNywweDRhLDB4 YzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGE2LDB4NzEs MHg2YSwweDNkLDB4YmEsMHhkMSwweGU4LDB4NjYsMHhhNiwweGVmLDB4YjIsMHgwZSwKLSsJMHhh OCwweDljLDB4YWEsMHg0ZSwweGFmLDB4MTcsMHg4OSwweDUwLDB4MDAsMHhkYSwweGExLDB4YjEs Ci0rCTB4MGIsMHhhNCwweGQ5LDB4MzUsMHg4OSwweGM4LDB4ZTUsMHhiMCwweGQ5LDB4YjcsMHhj NCwweDMzLAotKwkweDliLDB4Y2IsMHg3ZSwweDc1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5w dXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHgyNywweDIxLDB4ZmMsMHhjMiwweGJkLDB4ZjMsMHgzYyww eGNlLDB4YzMsMHhjYSwweGMxLDB4MDEsCi0rCTB4ZTAsMHhmZiwweDkzLDB4MTIsMHg3ZCwweDU0 LDB4NDIsMHhlMywweDlmLDB4MDMsMHhkZiwweDI3LAotKwkweDA0LDB4MDcsMHgzYywweDUzLDB4 N2YsMHhhOCwweDY2LDB4YzgsMHg5NywweDRiLDB4NjEsMHg0MCwKLSsJMHg1ZCwweDdhLDB4MjUs MHg3OQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDJkLDB4OGUs MHgxNiwweDVkLDB4MGIsMHg5ZiwweGViLDB4YWEsMHhkNiwweGVjLDB4MjgsMHg3MSwKLSsJMHg3 YywweDBiLDB4YzEsMHgxZCwweGQ0LDB4NDQsMHgxOSwweDQ3LDB4ZmQsMHgxZCwweDdjLDB4ZTUs Ci0rCTB4ZjMsMHgyNywweGUxLDB4YjYsMHg3MiwweDBhLDB4ZTAsMHhlYywweDBlLDB4Y2QsMHhl ZiwweDFhLAotKwkweDkxLDB4NmEsMHhlMywweDVmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHhlNSwweGRhLDB4YjgsMHhlMCwweDYzLDB4NTksMHg1YSwweGNjLDB4M2Qs MHhkYywweDlmLDB4ZTgsCi0rCTB4NjYsMHg2NywweDJjLDB4OTIKLSsJfTsKLSsKLSsKLSsvKiBB RVMtMjU2IG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTUs MHhjNywweDVkLDB4Y2IsMHg0MSwweDRiLDB4MTYsMHgwMSwweDNhLDB4ZDEsMHg0NCwweGU4LAot KwkweDIyLDB4MzIsMHhjNiwweDljLDB4M2YsMHhlNywweDQzLDB4ZjUsMHg5YSwweGQzLDB4ZWEs MHhmMiwKLSsJMHhkNywweDRlLDB4NmUsMHg2YSwweDU1LDB4NzMsMHg0MCwweGVmLDB4ODksMHhh ZCwweDBkLDB4MDMsCi0rCTB4OTYsMHg3ZSwweDc4LDB4ODEsMHgyZiwweDkxLDB4MWIsMHg0NCww eGIwLDB4MDIsMHhiYSwweDFjCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9ub25jZVtdID0KLSsJewotKwkweGRj LDB4ZTQsMHhkNCwweDI3LDB4N2EsMHg5MCwweGQ3LDB4OTksMHg0MywweGExLDB4M2MsMHgzMCwK LSsJMHhjYywweDRiLDB4ZWUsMHgyZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQotKwl7Ci0rCTB4ZTMsMHhlNiwweGI5LDB4MTEsMHhlNCwweDdhLDB4YTQsMHg0MCww eDZiLDB4ZjgsMHg3MywweGY3LAotKwkweDdlLDB4ZWMsMHhjNywweGI5LDB4OTcsMHhiZiwweGY4 LDB4MjUsMHg3YiwweGJlLDB4MTEsMHg5YiwKLSsJMHg1YiwweDZhLDB4MGMsMHgyZSwweDJiLDB4 MDEsMHg1MSwweGNkLDB4NDEsMHg0YiwweDZiLDB4YWMsCi0rCTB4MzEsMHhhOCwweDBiLDB4Zjcs MHhlNiwweDU5LDB4NDIsMHhiOCwweDAzLDB4MGMsMHhmOCwweDA2Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg2YSwweDlmLDB4MDAsMHg5MSwweGFlLDB4ZmUs MHhjZiwweDg0LDB4OTksMHhjZSwweGIxLDB4NDAsCi0rCTB4NmQsMHg1ZCwweDMzLDB4MjgsMHg4 NCwweGY0LDB4OGMsMHg2MywweDRjLDB4N2UsMHhiZCwweDJjLAotKwkweDgwLDB4NzYsMHhlZSww eDVhLDB4YWEsMHgxNSwweDA3LDB4MzEsMHhkOCwweGJiLDB4OGMsMHg2OSwKLSsJMHg5ZCwweDlk LDB4YmMsMHg3ZSwweDQ5LDB4YWUsMHhlYywweDM5LDB4NmIsMHhkMSwweDFmLDB4N2UKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2 X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4ZjMsMHhiOSwweDc1LDB4OWMs MHhiZCwweDg4LDB4ZWEsMHhhMiwweDUwLDB4YWQsMHhkNiwweDE2LAotKwkweDFhLDB4MTIsMHgz YywweDg2LDB4NjgsMHhhZiwweDZmLDB4YmUsMHgxOSwweGYyLDB4ZWUsMHhjYywKLSsJMHhhNSww eDcwLDB4ODQsMHg1MywweDUwLDB4Y2IsMHg5ZiwweDE0LDB4YTksMHhlNSwweGVlLDB4YjksCi0r CTB4NDgsMHg0NSwweDQwLDB4ZTIsMHhjNywweGM5LDB4OWEsMHg3NCwweGZmLDB4OGMsMHg5OSww eDFmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MmUsMHhm MiwweDQ1LDB4NGMsMHg2MiwweDJlLDB4MGEsMHhiOSwweDZiLDB4YTIsMHhmZCwweDU2LAotKwkw eDc5LDB4NjAsMHg5MywweGNmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQot Kwl7Ci0rCTB4YWYsMHg2OSwweDIwLDB4ZTksMHgzYiwweDM3LDB4OWQsMHgzZiwweGI0LDB4ODAs MHgwMiwweDdhLAotKwkweDI1LDB4N2QsMHhiOCwweGRlLDB4NzEsMHhjNSwweDA2LDB4MGMsMHhi NCwweGUyLDB4OGYsMHgzNSwKLSsJMHhkOCwweDE0LDB4MGQsMHg3ZiwweDc2LDB4NjMsMHg0ZSww eGI1LDB4ZWUsMHhlOSwweDZmLDB4MzQsCi0rCTB4YzcsMHg1ZiwweDU2LDB4MTQsMHg0YSwweGU4 LDB4NzMsMHg5NSwweDViLDB4MWMsMHhiOSwweGNiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9Ci0rCXsKLSsJMHhlNSwweGIwLDB4MmUsMHg3ZSwweDUyLDB4MzAsMHhlMywweDYz LDB4ODIsMHhiNiwweDQ0LDB4ZDMsCi0rCTB4MjUsMHgxOSwweDA1LDB4MjQsMHg5YSwweDlmLDB4 NWYsMHgyNywweDZhLDB4MjksMHhhYiwweGZhLAotKwkweDA3LDB4YTIsMHg0MiwweDBmLDB4YzUs MHhhOCwweDk0LDB4N2MsMHgxNywweDdiLDB4ODUsMHg4MywKLSsJMHgwYywweDI1LDB4MGUsMHg2 MywweDBiLDB4ZTksMHgxMiwweDYwLDB4Y2QsMHhlZiwweDgwLDB4MGYKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3By X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDVlLDB4ZjIsMHgyNiwweGVmLDB4OWYsMHg1OCww eDVkLDB4ZDUsMHg0YSwweDEwLDB4ZmUsMHhhNywKLSsJMHgyZCwweDVmLDB4NGEsMHg0NgotKwl9 OwotKwotKwotKy8qIEFFUy0yNTYgbm8gZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRbXSA9 Ci0rCXsKLSsJMHhmYiwweGNmLDB4MWIsMHg2MSwweDE2LDB4ODksMHg3OCwweDIzLDB4ZjUsMHhk OCwweDk2LDB4ZTMsCi0rCTB4NGUsMHg2NCwweDBiLDB4MjksMHg5YSwweDNmLDB4ZjgsMHhhNSww eGVkLDB4ZjIsMHhmZSwweGRiLAotKwkweDE2LDB4Y2EsMHg3ZiwweDEwLDB4ZmEsMHg1ZSwweDE4 LDB4NzYsMHgyYywweDYzLDB4NWUsMHg5NiwKLSsJMHhjZiwweGIzLDB4ZDYsMHhmYywweGFmLDB4 OTksMHgzOSwweDI4LDB4OWMsMHg2MSwweGU4LDB4YjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX25vbmNlW10gPQot Kwl7Ci0rCTB4MTIsMHg5NiwweGYwLDB4NTIsMHhmMywweDhkLDB4ODEsMHhjZiwweGRlLDB4ODYs MHhmMiwweDk5LAotKwkweDQzLDB4OTYsMHhiOSwweGYwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg2MywweDBkLDB4NzgsMHhmNSwweDkwLDB4OGUsMHgz MiwweDQ3LDB4YjAsMHg0ZCwweDM3LDB4NjAsCi0rCTB4MDksMHg5NiwweGJjLDB4YmYsMHg5Nyww eDdhLDB4NjIsMHgxNCwweDQ1LDB4YmQsMHg4ZCwweGNjLAotKwkweDY5LDB4ZmIsMHgwMywweGUx LDB4ODAsMHgxYywweGM3LDB4ZTIsMHgyYSwweGY5LDB4MzcsMHgzZiwKLSsJMHg2NiwweDRkLDB4 NjIsMHhkOSwweDEwLDB4ZTAsMHhhZCwweGM4LDB4OWEsMHhmMCwweGE4LDB4NmQKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDM2LDB4YzYsMHgxMywweDYwLDB4YmIs MHgxNCwweGFkLDB4MjIsMHhiMCwweDM4LDB4YWMsMHhhNiwKLSsJMHgxOCwweDE2LDB4OTMsMHgy NSwweDg2LDB4YjcsMHhkYywweGRjLDB4MzYsMHg5OCwweDJiLDB4ZjksCi0rCTB4NjgsMHgzMyww eGQzLDB4YzYsMHhmZiwweGNlLDB4OGQsMHgxNSwweDU5LDB4ODIsMHg3NiwweGVkLAotKwkweDZm LDB4OGQsMHg0OSwweDc0LDB4MmYsMHhkYSwweGRjLDB4MWYsMHgxNywweGQwLDB4ZGUsMHgxNwot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDE2LDB4MmYsMHg4ZSww eDNmLDB4MjEsMHg3YSwweDFjLDB4MjAsMHg1NiwweGQxLDB4OTIsMHhmNiwKLSsJMHhkMiwweDI1 LDB4NzUsMHgwZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4 OTEsMHg3OSwweDc2LDB4ZWUsMHhlMCwweGNmLDB4OWUsMHhjMiwweGQ1LDB4ZDQsMHgyMywweDli LAotKwkweDEyLDB4OGMsMHg3ZSwweDBhLDB4YjcsMHhkMiwweDhiLDB4ZDYsMHg3YywweGEzLDB4 YzYsMHhlNSwKLSsJMHgwZSwweGFhLDB4YzcsMHg2YiwweGFlLDB4MGQsMHhmYSwweDUzLDB4MDYs MHg3OSwweGExLDB4ZWQsCi0rCTB4NGQsMHg2YSwweDBlLDB4ZDgsMHg5ZCwweGJlLDB4MWIsMHgz MSwweDkzLDB4N2IsMHhlYywweGZiCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRb XSA9Ci0rCXsKLSsJMHhkMiwweDQ2LDB4NTAsMHgyMiwweDEwLDB4MTQsMHg2MywweGY3LDB4ZWEs MHgwZiwweGI5LDB4N2UsCi0rCTB4MGQsMHhlMSwweDk0LDB4MDcsMHhhZiwweDA5LDB4NDQsMHgz MSwweGVhLDB4NjQsMHhhNCwweDE4LAotKwkweDViLDB4ZjksMHhkOCwweGMyLDB4ZmEsMHgwMyww eDQ3LDB4YzUsMHgzOSwweDQzLDB4ZDUsMHgzYiwKLSsJMHg2MiwweDg2LDB4NjQsMHhlYSwweDJj LDB4NzMsMHg4YywweGFlLDB4OWQsMHg5OCwweDk4LDB4MjkKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9u YWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg4YywweGFiLDB4MTgsMHhmOCwweGMzLDB4ZWMsMHgxOCww eDVjLDB4YjMsMHgxZSwweDlkLDB4YmUsCi0rCTB4M2YsMHgwMywweGI0LDB4MDAsMHg5OCwweDlk LDB4YWUsMHhlYiwweGY0LDB4OTQsMHhmOCwweDQyLAotKwkweDhmLDB4ZTMsMHgzOSwweDA3LDB4 ZTEsMHhjOSwweGFkLDB4MGIsMHgxZiwweGVkLDB4YzAsMHhiYSwKLSsJMHhmNiwweGQxLDB4ZWMs MHgyNywweDg2LDB4N2IsMHhkNiwweDU1LDB4OWIsMHg2MCwweGE1LDB4YzYKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2Rm X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGVmLDB4ZDIsMHhkOCwweDVjLDB4ZGMsMHg2Miww eDI1LDB4OWYsMHhhYSwweDFlLDB4MmMsMHg2NywKLSsJMHhmNiwweDAyLDB4MzIsMHhlMgotKwl9 OwotKwotKwotKy8qIFNIQS0xIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4ZDIsMHgz NiwweGE1LDB4MjcsMHgzMSwweDczLDB4ZGQsMHgxMSwweDRmLDB4OTMsMHhiZCwweGUyLAotKwkw eDMxLDB4YTUsMHg5MSwweDEzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9ub25jZVtdID0KLSsJewotKwkweGI1LDB4YjMsMHg2 MCwweGVmLDB4ZjcsMHg2MywweDMxLDB4ZjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0KLSsJewotKwkweGQ0LDB4YmIsMHgwMiwweDEwLDB4YjIsMHg3MSwweGRiLDB4ODEsMHhkNiww eGYwLDB4NDIsMHg2MCwKLSsJMHhkYSwweGVhLDB4NzcsMHg1MgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25hbGlu cHV0W10gPQotKwl7Ci0rCTB4NGQsMHhkMiwweDZjLDB4ODcsMHhmYiwweDJjLDB4NGYsMHhhNiww eDhkLDB4MTYsMHg2MywweDIyLAotKwkweDZhLDB4NTEsMHhlMywweGY4Ci0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5 aW5wdXRwcltdID0KLSsJewotKwkweGM5LDB4ODMsMHg5ZSwweDE2LDB4ZjYsMHgxYywweDBmLDB4 YjIsMHhlYywweDYwLDB4MzEsMHhhOSwKLSsJMHhjYiwweGE5LDB4MzYsMHg3YQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfaW50 X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGE4LDB4MTMsMHg0ZiwweGY0LDB4MzEsMHgwMiww eDQ0LDB4ZTMsMHhkMywweDNkLDB4NjEsMHg5ZSwKLSsJMHhlNSwweGM2LDB4M2UsMHg4OSwweGI1 LDB4OWIsMHgwZiwweDM1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4Zjks MHhlOCwweGQyLDB4NzIsMHgxMywweDM0LDB4OTUsMHg2ZiwweDE1LDB4NDksMHg0NywweDk5LAot KwkweDE2LDB4MDMsMHgxOSwweDQ3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJ MHg0ZSwweDhjLDB4NDksMHg5YiwweDRhLDB4NWMsMHg5YiwweDljLDB4M2EsMHhlZSwweGZiLDB4 ZDIsCi0rCTB4YWUsMHhjZCwweDhjLDB4YzQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3JldHVybmVkYml0c1tdID0KLSsJewot KwkweDUwLDB4YjQsMHhiNCwweGNkLDB4NjgsMHg1NywweGZjLDB4MmUsMHhjMSwweDUyLDB4Y2Ms MHhmNiwKLSsJMHg2OCwweGE0LDB4ODEsMHhlZCwweDdlLDB4ZTQsMHgxZCwweDg3Ci0rCX07Ci0r Ci0rCi0rLyogU0hBLTEgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHhhOSwweDQ3LDB4 MWIsMHgyOSwweDJkLDB4MWMsMHgwNSwweGRmLDB4NzYsMHhkMCwweDYyLDB4ZjksCi0rCTB4ZTIs MHg3ZiwweDRjLDB4N2IKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX25vbmNlW10gPQotKwl7Ci0rCTB4NTMsMHgyMywweDI0LDB4ZTMs MHhlYywweDBjLDB4NTQsMHgxNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0r CTB4N2EsMHg4NywweGExLDB4YWMsMHgxYywweGZkLDB4YWIsMHhhZSwweGY3LDB4ZDYsMHhmYiww eDc2LAotKwkweDI4LDB4ZWMsMHg2ZCwweGNhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsK LSsJMHhmYywweDkyLDB4MzUsMHhkNiwweDdlLDB4YjcsMHgyNCwweDY1LDB4ZmQsMHgxMiwweDI3 LDB4MzUsCi0rCTB4YzAsMHg3MiwweGNhLDB4MjgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0r CXsKLSsJMHg1NywweDg4LDB4ODIsMHhlNSwweDI1LDB4YTUsMHgyYywweDRhLDB4MDYsMHgyMCww eDZjLDB4NzIsCi0rCTB4NTUsMHg2MSwweGRkLDB4OTAsMHg3MSwweDlmLDB4OTUsMHhlYQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf ZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4NjksMHhhNSwweDQwLDB4NjIsMHg5OCww eDQ3LDB4NTYsMHg3MywweDRhLDB4OGYsMHg2MCwweDk2LAotKwkweGQ2LDB4OTksMHgyNywweGVk Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhlNSwweDQwLDB4NGUsMHhi ZCwweDUwLDB4MDAsMHhmNSwweDE1LDB4YTYsMHhlZSwweDQ1LDB4ZGEsCi0rCTB4ODQsMHgzZCww eGQ0LDB4YzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHgxMSwweDUxLDB4MTQs MHhmMCwweDA5LDB4MWIsMHg0ZSwweDU2LDB4MGQsMHhlOSwweGY2LDB4MWUsCi0rCTB4NTIsMHg2 NSwweGNkLDB4OTYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGExLDB4OWMsMHg5NCww eDZlLDB4MjksMHhlMSwweDMzLDB4MGQsMHgzMiwweGQ2LDB4YWEsMHhjZSwKLSsJMHg3MSwweDNm LDB4NTIsMHg3MiwweDhiLDB4NDIsMHhhOCwweGQ3Ci0rCX07Ci0rCi0rCi0rLyogU0hBLTIyNCBQ UiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4MTIsMHg2OSwweDMyLDB4NGYsMHg4Myww eGE2LDB4ZjUsMHgxNCwweGUzLDB4NDksMHgzZSwweDc1LAotKwkweDNlLDB4ZGUsMHhhZCwweGEx LDB4MjksMHhjMywweGYzLDB4MTksMHgyMCwweGI1LDB4NGMsMHhkOQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9ub25jZVtd ID0KLSsJewotKwkweDZhLDB4NzgsMHhkMCwweGViLDB4YmIsMHg1YSwweGYwLDB4ZWUsMHhlOCww eGMzLDB4YmEsMHg3MQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJ MHhkNSwweGI4LDB4YjYsMHhiYywweGMxLDB4NWIsMHg2MCwweDMxLDB4M2MsMHhmNSwweGU1LDB4 YzAsCi0rCTB4OGUsMHg1MiwweDdhLDB4YmQsMHhlYSwweDQ3LDB4YTksMHg1ZiwweDhmLDB4Zjks MHg4YiwweGFlCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDFmLDB4NTUs MHhlYywweGFlLDB4MTYsMHgxMiwweDg0LDB4YmEsMHg4NCwweDE2LDB4MTksMHg4OCwKLSsJMHg4 ZSwweGI4LDB4MzMsMHgyNSwweDU0LDB4ZmYsMHhjYSwweDc5LDB4YWYsMHgwNywweDI1LDB4NTAK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHg5MiwweGEzLDB4MzIsMHhhOCww eDlhLDB4MGEsMHg1OCwweDdjLDB4MWQsMHg1YSwweDdlLDB4ZTEsCi0rCTB4YjIsMHg3MywweGFi LDB4MGUsMHgxNiwweDc5LDB4MjMsMHhkMywweDI5LDB4ODksMHg4MSwweGUxCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhmMywweDM4LDB4OTEsMHg0MCwweDM3LDB4N2Es MHg1MSwweDcyLDB4NDIsMHg3NCwweDc4LDB4MGEsCi0rCTB4NjksMHhmZCwweGE2LDB4NDQsMHg0 MywweDQ1LDB4NmMsMHgwYywweDVhLDB4MTksMHhmZiwweGYxLAotKwkweDU0LDB4NjAsMHhlZSww eDZhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg3NSwweGYzLDB4MDQs MHgyNSwweGRkLDB4MzYsMHhhOCwweDM3LDB4NDYsMHhhZSwweDBjLDB4NTIsCi0rCTB4MDUsMHg3 OSwweDRjLDB4MjYsMHhkYiwweGU5LDB4NzEsMHgxNiwweDRjLDB4MGEsMHhmMiwweDYwCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweGVhLDB4YzUsMHgwMywweDBhLDB4NGYs MHhiMCwweDM4LDB4OGQsMHgyMywweGQ0LDB4YzgsMHg3NywKLSsJMHhlMiwweDZkLDB4OWMsMHgw YiwweDQ0LDB4ZjcsMHgyZCwweDViLDB4YmYsMHg1ZCwweDJhLDB4MTEKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfcmV0dXJu ZWRiaXRzW10gPQotKwl7Ci0rCTB4NjAsMHg1MCwweDJiLDB4ZTcsMHg4NiwweGQ4LDB4MjYsMHg3 MywweGUzLDB4MWQsMHg5NSwweDIwLAotKwkweGIzLDB4MmMsMHgzMiwweDFjLDB4ZjUsMHhjZSww eDU3LDB4YTYsMHg2NywweDJiLDB4ZGMsMHg0ZSwKLSsJMHhkZCwweDExLDB4NGMsMHhjNAotKwl9 OwotKwotKwotKy8qIFNIQS0yMjQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGIy LDB4MWMsMHg3NywweDRkLDB4ZjYsMHhkMywweGI2LDB4NDAsMHhiNywweDMwLDB4M2UsMHgyOSwK LSsJMHhiMCwweDg1LDB4MWMsMHhiZSwweDRhLDB4ZWEsMHg2YiwweDVhLDB4YjUsMHg4YSwweDk3 LDB4ZWIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfbm9uY2VbXSA9Ci0rCXsKLSsJMHg0MiwweDAyLDB4MGEsMHgxYywweDk4LDB4 OWEsMHg3NywweDllLDB4OWYsMHg4MCwweGJhLDB4ZTAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQotKwl7Ci0rCTB4OTgsMHhiOCwweDA0LDB4NDEsMHhmYywweGMxLDB4NWQsMHhjNSww eGU5LDB4YjksMHgwOCwweGRhLAotKwkweGY5LDB4ZmEsMHgwZCwweDkwLDB4Y2UsMHhkZiwweDFk LDB4MTAsMHhhOSwweDhkLDB4NTAsMHgwYwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsK LSsJMHg5YSwweDhkLDB4MzksMHg0OSwweDQyLDB4ZDUsMHgwYiwweGFlLDB4ZTEsMHhhZiwweGI3 LDB4MDAsCi0rCTB4MDIsMHhmYSwweDk2LDB4YjEsMHhhNSwweDFkLDB4MmQsMHgyNSwweDc4LDB4 ZWUsMHg4MywweDNmCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlNCwweGY1 LDB4NTMsMHg3OSwweDVhLDB4OTcsMHg1OCwweDA2LDB4MDgsMHhiYSwweDdiLDB4ZmEsCi0rCTB4 ZjAsMHg4MywweDA1LDB4OGMsMHgyMiwweGMwLDB4YzksMHhkYiwweDE1LDB4ZTcsMHhkZSwweDIw LAotKwkweDU1LDB4MjIsMHg5YSwweGFkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJ ewotKwkweDY3LDB4MDksMHg0OCwweGFhLDB4MDcsMHgxNiwweDk5LDB4ODksMHg3ZiwweDZkLDB4 YTAsMHhlNSwKLSsJMHg4ZiwweGRmLDB4YmMsMHhkYiwweGZlLDB4ZTUsMHg2YywweDdhLDB4OTUs MHg0YSwweDY2LDB4MTcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4 MGYsMHg0YiwweDFjLDB4NmYsMHhiNywweGUzLDB4NDcsMHhlNSwweDVkLDB4N2QsMHgzOCwweGQ2 LAotKwkweDI4LDB4OWIsMHhlYiwweDU1LDB4NjMsMHgwOSwweDNlLDB4N2MsMHg1NiwweGVhLDB4 ZjgsMHgxOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4MmQsMHgyNiwweDdj LDB4MzcsMHhlNCwweDdhLDB4MjgsMHg1ZSwweDVhLDB4M2MsMHhhZiwweDNkLAotKwkweDVhLDB4 OGUsMHg1NSwweGEyLDB4MWEsMHg2ZSwweGMwLDB4ZTUsMHhmNiwweDIxLDB4ZDMsMHhmNgotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0ZCwweDgzLDB4MzUsMHhkZiwweDY3LDB4YTks MHhmYywweDE3LDB4ZGEsMHg3MCwweGNjLDB4OGIsCi0rCTB4N2YsMHg3NywweGFlLDB4YTIsMHg1 ZiwweGI5LDB4N2UsMHg3NCwweDRjLDB4MjYsMHhjMSwweDdhLAotKwkweDNiLDB4YTcsMHg1Yyww eDkzCi0rCX07Ci0rCi0rCi0rLyogU0hBLTI1NiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQotKwl7 Ci0rCTB4Y2UsMHg0OSwweDAwLDB4N2EsMHg1NiwweGUzLDB4NjcsMHg4ZiwweGUxLDB4YjYsMHhh NywweGQ0LAotKwkweDRmLDB4MDgsMHg3YSwweDFiLDB4MDEsMHhmNCwweGZhLDB4NmIsMHhlZiww eGI3LDB4ZTUsMHhlYiwKLSsJMHgwNywweDNkLDB4MTEsMHgwZCwweGM4LDB4ZWEsMHgyYiwweGZl Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X3ByX25vbmNlW10gPQotKwl7Ci0rCTB4NzMsMHg0MSwweGM4LDB4OTIsMHg5NCwweGUy LDB4YzUsMHg1ZiwweDkzLDB4ZmQsMHgzOSwweDVkLAotKwkweDJiLDB4OTEsMHg0ZCwweDM4Ci0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDUwLDB4NmQsMHgwMSww eDAxLDB4MDcsMHg1YSwweDgwLDB4MzUsMHg3YSwweDU2LDB4MWEsMHg1NiwKLSsJMHgyZiwweDlh LDB4MGIsMHgzNSwweGIyLDB4YjEsMHhjOSwweGU1LDB4Y2EsMHg2OSwweDYxLDB4NDgsCi0rCTB4 ZmYsMHhmYiwweDBmLDB4ZDksMHg0YiwweDc5LDB4MWQsMHhiYQotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFs aW5wdXRbXSA9Ci0rCXsKLSsJMHgyMCwweGI4LDB4ZGYsMHg0NCwweDc3LDB4NWEsMHhiOCwweGQz LDB4YmYsMHhmNiwweGNmLDB4YWMsCi0rCTB4NWUsMHhhNiwweDk2LDB4NjIsMHg3MywweDQ0LDB4 NDAsMHg0YSwweDMwLDB4ZmIsMHgzOCwweGE1LAotKwkweDdiLDB4MGQsMHhlNCwweDBkLDB4YzYs MHhlNCwweDlhLDB4MWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9Ci0rCXsKLSsJMHgwNCww eGM0LDB4NjUsMHhmNCwweGQzLDB4YmYsMHg4MywweDRiLDB4YWIsMHhjOCwweDQxLDB4YTgsCi0r CTB4YzIsMHhlMCwweDQ0LDB4NjMsMHg3NywweDRjLDB4NmYsMHg2YywweDQ5LDB4NDYsMHhmZiww eDk0LAotKwkweDE3LDB4ZWEsMHhlNiwweDFhLDB4OWQsMHg1ZSwweDY2LDB4NzgKLSsJfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJf aW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDA3LDB4NGQsMHhhYywweDliLDB4ODYsMHhj YSwweDRhLDB4YWEsMHg2ZSwweDdhLDB4MDMsMHhhMiwKLSsJMHg1ZCwweDEwLDB4ZWEsMHgwYiww eGY5LDB4ODMsMHhjYywweGQxLDB4ZmMsMHhlMiwweDA3LDB4YzcsCi0rCTB4MDYsMHgzNCwweDYw LDB4NmYsMHg4MywweDk0LDB4OTksMHg3NgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQot Kwl7Ci0rCTB4ODksMHg0ZSwweDQ1LDB4OGMsMHgxMSwweGY5LDB4YmMsMHg1YiwweGFjLDB4NzQs MHg4YiwweDRiLAotKwkweDVmLDB4ZjcsMHgxOSwweGYzLDB4ZjUsMHgyNCwweDU0LDB4MTQsMHhk MSwweDE1LDB4YjEsMHg0MywKLSsJMHgxMiwweGE0LDB4NWYsMHhkNCwweGVjLDB4ZmMsMHhjZCww eDA5Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDBlLDB4ZWIsMHgxZiww eGQ3LDB4ZmMsMHhkMSwweDlkLDB4ZDQsMHgwNSwweDM2LDB4OGIsMHhiMiwKLSsJMHhmYiwweGU0 LDB4ZjQsMHg1MSwweDBjLDB4ODcsMHg5YiwweDAyLDB4NDQsMHhkNSwweDkyLDB4NGQsCi0rCTB4 NDQsMHhmZSwweDFhLDB4MDMsMHg0MywweDU2LDB4YmQsMHg4NgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9yZXR1cm5lZGJp dHNbXSA9Ci0rCXsKLSsJMHgwMiwweGFhLDB4YjYsMHgxZCwweDdlLDB4MmEsMHg0MCwweDAzLDB4 NjksMHgyZCwweDQ5LDB4YTMsCi0rCTB4NDEsMHhlNywweDQ0LDB4MGIsMHhhZiwweDdiLDB4ODUs MHhlNCwweDVmLDB4NTMsMHgzYiwweDY0LAotKwkweGJjLDB4ODksMHhjOCwweDgyLDB4ZDQsMHg3 OCwweDM3LDB4YTIKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMjU2IE5vIFBSICAqLwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRb XSA9Ci0rCXsKLSsJMHg1YiwweDFiLDB4ZWMsMHg0ZCwweGE5LDB4MzgsMHg3NCwweDVhLDB4MzQs MHgwYiwweDdiLDB4YzUsCi0rCTB4ZTUsMHhkNywweDY2LDB4N2MsMHhiYywweDgyLDB4YjksMHgw ZSwweDJkLDB4MWYsMHg5MiwweGQ3LAotKwkweGMxLDB4YmMsMHg2NywweDY5LDB4ZWMsMHg2Yiww eDAzLDB4M2MKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfbm9uY2VbXSA9Ci0rCXsKLSsJMHhhNCwweDBjLDB4ZDgsMHg5YywweDYx LDB4ZDgsMHhjMywweDU0LDB4ZmUsMHg1MywweGM5LDB4ZTUsCi0rCTB4NWQsMHg2ZiwweDZkLDB4 MzUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4MjIsMHg1ZSwweDYy LDB4OTMsMHg0MiwweDgzLDB4NzgsMHgyNCwweGQ4LDB4NDAsMHg4YywweGRlLAotKwkweDZmLDB4 ZjksMHhhNCwweDdhLDB4YzUsMHhhNywweDNiLDB4ODgsMHhhMywweGVlLDB4NDIsMHgyMCwKLSsJ MHhmZCwweDYxLDB4NTYsMHhjNiwweDRjLDB4MTMsMHg0MSwweDljCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxp bnB1dFtdID0KLSsJewotKwkweGJmLDB4NzQsMHg1YiwweGY2LDB4YzUsMHg2NCwweDVlLDB4OTks MHgzNCwweDhmLDB4YmMsMHhhNCwKLSsJMHhlMiwweGJkLDB4ZDgsMHg4NSwweDI2LDB4MzcsMHhl YSwweGJhLDB4NGYsMHhmMiwweDlhLDB4OWEsCi0rCTB4NjYsMHhmYywweGRmLDB4NjMsMHgyNiww eDI2LDB4MTksMHg4NwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YjMsMHhj NiwweDA3LDB4MDcsMHhkNiwweDc1LDB4ZjYsMHgyYiwweGQ2LDB4MjEsMHg5NiwweGYxLAotKwkw eGFlLDB4ZGIsMHgyYiwweGFjLDB4MjUsMHgyYSwweGFlLDB4YWUsMHg0MSwweDcyLDB4MDMsMHg1 ZSwKLSsJMHhiZiwweGQzLDB4NjQsMHhiYywweDU5LDB4ZjksMHhjMCwweDc2Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJv cHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweGJmLDB4MjAsMHgzMywweDU2LDB4MjksMHhhOCww eDM3LDB4MDQsMHgxZiwweDc4LDB4MzQsMHgzZCwKLSsJMHg4MSwweDJhLDB4YzksMHg4NiwweGM2 LDB4N2EsMHgyZiwweDg4LDB4NWUsMHhkNSwweGJlLDB4MzQsCi0rCTB4NDYsMHgyMCwweGE0LDB4 MzUsMHhlYiwweGM3LDB4ZTIsMHg5ZAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9Ci0r CXsKLSsJMHg5YiwweGFlLDB4MmQsMHgyZCwweDYxLDB4YTQsMHg4OSwweGViLDB4NDMsMHg0Niww eGE3LDB4ZGEsCi0rCTB4ZWYsMHg0MCwweGNhLDB4NGEsMHg5OSwweDExLDB4NDEsMHhkYywweDVj LDB4OTQsMHhlOSwweGFjLAotKwkweGQ0LDB4ZDAsMHhlNiwweGJkLDB4ZmIsMHgwMywweDljLDB4 YTgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDIzLDB4YWEsMHgwYywweGJk LDB4MjgsMHgzMywweGUyLDB4NTEsMHhmYywweDcxLDB4ZDIsMHgxNSwKLSsJMHgxZiwweDc2LDB4 ZmQsMHgwZCwweGUwLDB4YjcsMHhiNSwweDg0LDB4NzUsMHg1YiwweGJlLDB4ZjMsCi0rCTB4NWMs MHhjYSwweGM1LDB4MzAsMHhmMiwweDc1LDB4MWYsMHhkYQotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHg5MCwweDNjLDB4YzEsMHgxMCwweDhjLDB4MTIsMHgwMSwweGM2LDB4YTYsMHgz YSwweDBmLDB4NGQsCi0rCTB4YjYsMHgzYSwweDRmLDB4NDEsMHg5YywweDYxLDB4NzUsMHg4NCww eGU5LDB4NzQsMHg3NSwweGZkLAotKwkweGZlLDB4ZjIsMHgxZiwweDQzLDB4ZDgsMHg1ZSwweDI0 LDB4YTMKLSsJfTsKLSsKLSsKLSsvKiBTSEEtMzg0IFBSICAqLwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0r CXsKLSsJMHg3MSwweDlkLDB4YjIsMHg1YSwweDcxLDB4NmQsMHgwNCwweGU5LDB4MWUsMHhjNyww eDkyLDB4MjQsCi0rCTB4NmUsMHgxMiwweDMzLDB4YTksMHg1MiwweDY0LDB4MzEsMHhlZiwweDcx LDB4ZWIsMHgyMiwweDU1LAotKwkweDI4LDB4OTcsMHgwNiwweDZhLDB4YzAsMHgwYywweGEwLDB4 N2UKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhmNSwweDBkLDB4ZmEsMHhiMCwweGVjLDB4 NmEsMHg3YywweGQ2LDB4YmQsMHg5YiwweDA1LDB4ZmQsCi0rCTB4MzgsMHgzZSwweDJlLDB4NTYK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NzQsMHhhYywweDdl LDB4NmQsMHhiMSwweGE0LDB4ZTcsMHgyMSwweGQxLDB4MWUsMHg2ZSwweDk2LAotKwkweDZkLDB4 NGQsMHg1MywweDQ2LDB4ODIsMHg5NiwweDZlLDB4Y2YsMHhhYSwweDgxLDB4OGQsMHg3ZCwKLSsJ MHg5ZSwweGUxLDB4MGYsMHgxNSwweGVhLDB4NDEsMHhiZiwweGUzCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2FkZGl0aW9u YWxpbnB1dFtdID0KLSsJewotKwkweGRhLDB4OTUsMHhkNCwweGQwLDB4YjgsMHgxMSwweGQzLDB4 NDksMHgyNywweDVkLDB4YTksMHgzOSwKLSsJMHg2OCwweGYzLDB4YTgsMHhlOSwweDVkLDB4MTks MHg4YSwweDJiLDB4NjYsMHhlOCwweDY5LDB4MDYsCi0rCTB4N2MsMHg5ZSwweDAzLDB4YTEsMHg4 YiwweDI2LDB4MmQsMHg2ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweDQ5 LDB4ZGYsMHg0NCwweDAwLDB4ZTQsMHgxYywweDc1LDB4MGIsMHgyNiwweDVhLDB4NTksMHg2NCwK LSsJMHgxZiwweDRlLDB4YjEsMHhiMiwweDEzLDB4ZjEsMHgyMiwweDRlLDB4YjQsMHg2ZCwweDlh LDB4Y2MsCi0rCTB4YTAsMHg0OCwweGU2LDB4Y2YsMHgxZCwweGQxLDB4OTIsMHgwZAotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9w cl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YzgsMHg1MiwweGFlLDB4YmYsMHgwNCww eDNjLDB4MjcsMHhiNywweDc4LDB4MTgsMHhhYSwweDhmLAotKwkweGZmLDB4Y2YsMHhhNCwweGYx LDB4Y2MsMHhlNywweDY4LDB4ZmEsMHgyMiwweGEyLDB4MTMsMHg0NSwKLSsJMHhlOCwweGRkLDB4 ODcsMHhlNiwweGYyLDB4NmUsMHhkZCwweGM3LDB4NTIsMHg5MCwweDlmLDB4N2IsCi0rCTB4ZmEs MHg2MSwweDJkLDB4OWQsMHg5ZSwweGNmLDB4OTgsMHhhYywweDUyLDB4NDAsMHhjZSwweGFmCi0r CX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg2MSwweDdjLDB4MDMsMHg5YSww eDNlLDB4NTAsMHg1NywweDYwLDB4YzUsMHg4MywweGM5LDB4YjIsCi0rCTB4ZDEsMHg4NywweDg1 LDB4NjYsMHg5MiwweDVkLDB4ODQsMHgwZSwweDUzLDB4ZmIsMHg3MCwweDAzLAotKwkweDcyLDB4 ZmQsMHhiYSwweGFlLDB4OWMsMHg4ZiwweGY4LDB4MTgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0cHIy W10gPQotKwl7Ci0rCTB4ZjgsMHhlYiwweDg5LDB4YjEsMHg4ZCwweDc4LDB4YmUsMHgyMSwweGUw LDB4YmIsMHg5ZCwweGI3LAotKwkweDk1LDB4MGUsMHhkOSwweDQ2LDB4MGMsMHg4YywweGUyLDB4 NjMsMHhiNywweDlkLDB4NjcsMHg5MCwKLSsJMHhiZCwweGM3LDB4MGIsMHhhNSwweGNlLDB4YjIs MHg2NSwweDgxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGU2LDB4OWYsMHhm ZSwweDY4LDB4ZDYsMHhiNSwweDc5LDB4ZjEsMHgwNiwweDVmLDB4YTMsMHhiYiwKLSsJMHgyMyww eDg1LDB4ZDgsMHhmMCwweDI5LDB4NWEsMHg2OCwweDllLDB4ZjUsMHhmNCwweGE2LDB4MTIsCi0r CTB4ZTAsMHg5YSwweGUyLDB4YWMsMHgwMCwweDFkLDB4OTgsMHgyNiwweGZjLDB4NTMsMHg5NSww eDUzLAotKwkweGU0LDB4M2UsMHgxNywweGQ1LDB4MDgsMHgwYiwweDcwLDB4M2QsMHg2NywweDk5 LDB4YWMsMHg2NgotKwl9OwotKwotKwotKy8qIFNIQS0zODQgTm8gUFIgICovCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1dFtd ID0KLSsJewotKwkweDA3LDB4MTUsMHgyNywweDJhLDB4YWYsMHg3NCwweDI0LDB4MzcsMHhiYyww eGQ1LDB4MTQsMHg2OSwKLSsJMHhjZSwweDExLDB4ZmYsMHhhMiwweDZiLDB4YjgsMHgwNSwweDY3 LDB4MzQsMHhmOCwweGJkLDB4NmQsCi0rCTB4NmEsMHhjYywweGNkLDB4NjAsMHhhMywweDY4LDB4 Y2EsMHhmNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTM4NF9ub25jZVtdID0KLSsJewotKwkweDcwLDB4MTcsMHhjMiwweDViLDB4NWQs MHgyMiwweDBiLDB4MDYsMHgxNSwweDU0LDB4NzgsMHg3NywKLSsJMHg0NCwweGFmLDB4MmYsMHgw OQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHg4OSwweDM5LDB4Mjgs MHhiMCwweDYwLDB4ZWIsMHgzZCwweGRjLDB4NTUsMHg3NSwweDg2LDB4ZWIsCi0rCTB4YWUsMHhh MiwweDhmLDB4YmMsMHgxYiwweDc1LDB4ZDQsMHhlMSwweDBmLDB4YWEsMHgzOCwweGNhLAotKwkw eDYyLDB4OGIsMHhjYiwweDJjLDB4MjYsMHhmNiwweGJjLDB4YjEKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlu cHV0W10gPQotKwl7Ci0rCTB4MzAsMHgyYiwweDQyLDB4MzUsMHhlZiwweGRhLDB4NDAsMHg1NSww eDI4LDB4YzYsMHg5NSwweGZiLAotKwkweDU0LDB4MDEsMHg2MiwweGQ3LDB4ODcsMHgxNCwweDQ4 LDB4NmQsMHg5MCwweDRjLDB4YTksMHgwMiwKLSsJMHg1NCwweDQwLDB4MjIsMHhjOCwweDY2LDB4 YTUsMHg0OCwweDQ4Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4MiwweGM0 LDB4YTEsMHg5YywweDIxLDB4ZDIsMHhlNywweGE1LDB4YTYsMHhmNiwweDVmLDB4MDQsCi0rCTB4 NWMsMHhjNywweDMxLDB4OWQsMHg4ZCwweDU5LDB4NzQsMHg1MCwweDE5LDB4ODksMHgyZiwweDYz LAotKwkweGQ1LDB4YjcsMHg3ZSwweGViLDB4MTUsMHhlMywweDcwLDB4ODMsMHhhMSwweDI0LDB4 NTksMHhmYSwKLSsJMHgyYywweDU2LDB4ZjYsMHg4OCwweDNhLDB4OTIsMHg5MywweGExLDB4ZmIs MHg3OSwweGMxLDB4N2EKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4Mzks MHhhNiwweGU4LDB4NWMsMHg4MiwweDE3LDB4NzEsMHgyNiwweDU3LDB4NGYsMHg5ZiwweGMyLAot KwkweDU1LDB4ZmYsMHg1YywweDliLDB4NTMsMHgxYSwweGQxLDB4NWYsMHhiYywweDYyLDB4ZTQs MHgyNywKLSsJMHgyZCwweDMyLDB4ZjAsMHhlNCwweDUyLDB4OGMsMHhjNSwweDBjCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2Fk ZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDhkLDB4Y2IsMHg4ZCwweGNlLDB4MDgs MHhlYSwweDgwLDB4ZTgsMHg5YiwweDYxLDB4YTgsMHgwZiwKLSsJMHhhZiwweDQ5LDB4MjAsMHg5 ZSwweDc0LDB4Y2IsMHg1NywweDgwLDB4NDIsMHhiMCwweDg0LDB4NWUsCi0rCTB4MzAsMHgyYSww eDY3LDB4MDgsMHhmNCwweGUzLDB4NDAsMHgyMgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPQot Kwl7Ci0rCTB4N2MsMHg4ZiwweGMyLDB4YWUsMHgyMiwweDRhLDB4ZDYsMHhmNiwweDA1LDB4YTQs MHg3YSwweGVhLAotKwkweGJiLDB4MjUsMHhkMCwweGI3LDB4NWEsMHhkNiwweGNmLDB4OWQsMHhm MywweDZjLDB4ZTIsMHhiMiwKLSsJMHg0ZSwweGI0LDB4YmQsMHhmNCwweGU1LDB4NDAsMHg4MCww eDk0Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMzg0X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweDllLDB4N2UsMHhmYiwweDU5LDB4 YmIsMHhhYSwweDNjLDB4ZjcsMHhlMSwweGY4LDB4NzYsMHhkZCwKLSsJMHg2MywweDVmLDB4YWYs MHgyMywweGQ2LDB4NjQsMHg2MSwweGMwLDB4OWEsMHgwOSwweDQ3LDB4YzksCi0rCTB4MzMsMHhk ZiwweDZkLDB4NTUsMHg5MSwweDM0LDB4NzksMHg3MCwweGM0LDB4OTksMHg2ZSwweDU0LAotKwkw eDA5LDB4NjQsMHgyMSwweDFhLDB4YmQsMHgxZSwweDgwLDB4NDAsMHgzNCwweGFkLDB4ZmEsMHhk NwotKwl9OwotKwotKwotKy8qIFNIQS01MTIgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0KLSsJewot KwkweDEzLDB4ZjcsMHg2MSwweDc1LDB4NjUsMHgyOCwweGEyLDB4NTksMHgxMywweDVhLDB4NGEs MHg0ZiwKLSsJMHg1NiwweDYwLDB4OGMsMHg1MywweDdkLDB4YjAsMHhiZCwweDA2LDB4NGYsMHhl ZCwweGNjLDB4ZDIsCi0rCTB4YTIsMHhiNSwweGZkLDB4NWIsMHgzYSwweGFiLDB4ZWMsMHgyOAot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTUxMl9wcl9ub25jZVtdID0KLSsJewotKwkweGJlLDB4YTMsMHg5MSwweDkzLDB4MWQsMHhjMyww eDMxLDB4M2EsMHgyMywweDMzLDB4NTAsMHg2NywKLSsJMHg4OCwweGM3LDB4YTIsMHhjNAotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxZiwweDU5LDB4NGQsMHg3 YiwweGU2LDB4NDYsMHg5MSwweDQ4LDB4YzEsMHgyNSwweGZhLDB4ZmYsCi0rCTB4ODksMHgxMiww eDc3LDB4MzUsMHhkZiwweDNlLDB4ZjQsMHg4MCwweDVmLDB4ZDksMHhiMCwweDA3LAotKwkweDIy LDB4NDEsMHhkZCwweDQ4LDB4NzgsMHg2YiwweDc3LDB4MmIKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlu cHV0W10gPQotKwl7Ci0rCTB4MzAsMHhmZiwweDYzLDB4NmYsMHhhYywweGQ5LDB4ODQsMHgzOSww eDZmLDB4ZTQsMHg5OSwweGNlLAotKwkweDkxLDB4N2QsMHg3ZSwweGM4LDB4NTgsMHhmMiwweDEy LDB4YzMsMHhiNiwweGFkLDB4ZGEsMHgyMiwKLSsJMHgwNCwweGEwLDB4ZDIsMHgyMSwweGZlLDB4 ZjIsMHg5NSwweDFkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPQotKwl7Ci0rCTB4NjQsMHg1 NCwweDEzLDB4ZWMsMHg0ZiwweDc3LDB4ZGEsMHhiMiwweDkyLDB4MmUsMHg1MiwweDgwLAotKwkw eDExLDB4MTAsMHhjMiwweGY4LDB4ZTYsMHhhNywweGNkLDB4NGIsMHhmYywweDMyLDB4MmUsMHg5 ZSwKLSsJMHhlYiwweGJiLDB4YjEsMHhiZiwweDE1LDB4NWMsMHg3MywweDA4Ci0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlZiwweDFlLDB4ZGMsMHgwYSwweGE0LDB4MzYs MHg5MSwweDljLDB4M2QsMHgyNywweDk3LDB4NTAsCi0rCTB4OGQsMHgzNiwweDI5LDB4OGQsMHhj ZSwweDZhLDB4MGMsMHhmNywweDIxLDB4YzAsMHg5MSwweGFlLAotKwkweDBjLDB4OTYsMHg3Miww eGJkLDB4NTIsMHg4MSwweDU4LDB4ZmMsMHg2ZCwweGU1LDB4ZjcsMHhhNSwKLSsJMHhmZCwweDVk LDB4YTcsMHg1OCwweDY4LDB4YzgsMHg5OSwweDU4LDB4OGUsMHhjOCwweGNlLDB4OTUsCi0rCTB4 MDEsMHg3ZCwweGZmLDB4YTQsMHhjOCwweGY3LDB4NjMsMHhmZSwweDVmLDB4NjksMHg4MywweDUz LAotKwkweGUyLDB4YzYsMHg4YiwweGMzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0r CXsKLSsJMHhlNiwweDliLDB4YzQsMHg4OCwweDM0LDB4Y2EsMHhlYSwweDI5LDB4MmYsMHg5OCww eDA1LDB4YTQsCi0rCTB4ZDMsMHhjMCwweDdiLDB4MTEsMHhlOCwweGJiLDB4NzUsMHhmMiwweGJk LDB4MjksMHhiNywweDQwLAotKwkweDI1LDB4N2YsMHhjMSwweGI3LDB4YjEsMHhmMSwweDI1LDB4 NjEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4MjMsMHg2ZCwweGZmLDB4 ZGUsMHhmYiwweGQxLDB4YmEsMHgzMywweDE4LDB4ZTYsMHhiZSwweGI1LAotKwkweDQ4LDB4Nzcs MHg2ZCwweDdmLDB4YTcsMHhlMSwweDRkLDB4NDgsMHgxZSwweDNjLDB4YTcsMHgzNCwKLSsJMHgx YSwweGM4LDB4NjAsMHhkYiwweDhmLDB4OTksMHgxNSwweDk5Ci0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3JldHVybmVkYml0 c1tdID0KLSsJewotKwkweDcwLDB4MjcsMHgzMSwweGRiLDB4OTIsMHg3MCwweDIxLDB4ZmUsMHgx NiwweGI2LDB4YzgsMHg1MSwKLSsJMHgzNCwweDg3LDB4NjUsMHhkMCwweDRlLDB4ZmQsMHhmZSww eDY4LDB4ZWMsMHhhYywweGRjLDB4OTMsCi0rCTB4NDEsMHgzOCwweDkyLDB4OTAsMHhiNCwweDk0 LDB4ZjksMHgwZCwweGE0LDB4ZjcsMHg0ZSwweDgwLAotKwkweDkyLDB4NjcsMHg0OCwweDQwLDB4 YTcsMHgwOCwweGM3LDB4YmMsMHg2NiwweDAwLDB4ZmQsMHhmNywKLSsJMHg0YywweDhiLDB4MTcs MHg2ZSwweGQxLDB4OGYsMHg5YiwweGYzLDB4NmYsMHhmNiwweDM0LDB4ZGQsCi0rCTB4NjcsMHhm NywweDY4LDB4ZGQKLSsJfTsKLSsKLSsKLSsvKiBTSEEtNTEyIE5vIFBSICAqLwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5aW5wdXRb XSA9Ci0rCXsKLSsJMHhiNiwweDBiLDB4YjcsMHhiYywweDg0LDB4NTYsMHhmNiwweDEyLDB4YWYs MHg0NSwweDY3LDB4MTcsCi0rCTB4N2MsMHhkMSwweGIyLDB4NzgsMHgyYiwweGEwLDB4ZjIsMHhi ZSwweGI2LDB4NmQsMHg4YiwweDU2LAotKwkweGM2LDB4YmMsMHg0ZCwweGUxLDB4ZjcsMHhiZSww eGNlLDB4YmQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGE1MTJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg5ZCwweGVkLDB4YzAsMHhlNSwweDVh LDB4OTgsMHg2YSwweGNiLDB4NTEsMHg3ZCwweDc2LDB4MzEsCi0rCTB4NWEsMHg2NCwweGYwLDB4 ZjcKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4YzIsMHg2ZCwweGEz LDB4YzMsMHgwNiwweDc0LDB4ZTUsMHgwMSwweDVjLDB4MTAsMHgxNywweGM3LAotKwkweGFmLDB4 ODMsMHg5ZCwweDU5LDB4OGQsMHgyZCwweDI5LDB4MzgsMHhjNSwweDU5LDB4NzAsMHg4YiwKLSsJ MHg0NiwweDQ4LDB4MmQsMHhjZiwweDM2LDB4N2QsMHg1OSwweGMwCi0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxp bnB1dFtdID0KLSsJewotKwkweGVjLDB4OGMsMHhkNCwweGY3LDB4NjEsMHg2ZSwweDBkLDB4OTUs MHg3OSwweGI3LDB4MjgsMHhhZCwKLSsJMHg1ZiwweDY5LDB4NzQsMHg1ZiwweDJkLDB4MzYsMHgw NiwweDhhLDB4NmIsMHhhYywweDU0LDB4OTcsCi0rCTB4YzQsMHhhMSwweDEyLDB4ODUsMHgwYSww eGRmLDB4NGIsMHgzNAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4ODQsMHgy ZiwweDFmLDB4NjgsMHg2YSwweGEzLDB4YWQsMHgxZSwweGZiLDB4ZjQsMHgxNSwweGJkLAotKwkw eGRlLDB4MzgsMHhkNCwweDMwLDB4ODAsMHg1MSwweGU5LDB4ZDMsMHhjNywweDIwLDB4ODgsMHhl OSwKLSsJMHhmNSwweGNjLDB4ZGYsMHg1NywweDVjLDB4NDcsMHgyZiwweDU3LDB4M2MsMHg1Ziww eDEzLDB4NTYsCi0rCTB4Y2MsMHhjNSwweDRmLDB4ODQsMHhmOCwweDEwLDB4NDEsMHhkNSwweDdl LDB4NTgsMHg2ZSwweDE5LAotKwkweDE5LDB4OWUsMHhhZiwweGMyLDB4MjIsMHg1OCwweDQxLDB4 NTAsMHg3OSwweGMyLDB4ZDgsMHgwNCwKLSsJMHgyOCwweGQ0LDB4MzksMHg5YQotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRy b3B5aW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHhmYSwweDdmLDB4NDYsMHg1MSwweDgzLDB4NjIs MHg5OCwweDE2LDB4OWEsMHgxOSwweGEyLDB4NDksCi0rCTB4YTksMHhlNiwweDRhLDB4ZDgsMHg4 NSwweGU3LDB4ZDQsMHgzYiwweDJjLDB4ODIsMHhjNSwweDgyLAotKwkweGJmLDB4MTEsMHhmOSww eDllLDB4YmMsMHhkMCwweDAxLDB4ZWUKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQot Kwl7Ci0rCTB4YjksMHgxMiwweGUwLDB4NGYsMHhmNywweGE3LDB4YzQsMHhkOCwweGQwLDB4OGUs MHg5OSwweDI5LAotKwkweDdjLDB4OWEsMHhlOSwweGNmLDB4YzQsMHg2YywweGY4LDB4YzMsMHhh NywweDQxLDB4ODMsMHhkNiwKLSsJMHgyZSwweGZhLDB4YjgsMHg1ZSwweDhlLDB4NmIsMHg3OCww eDIwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHhkNywweDA3LDB4NTIsMHhi OSwweDgzLDB4MmMsMHgwMywweDcxLDB4ZWUsMHhjOSwweGMwLDB4ODUsCi0rCTB4ZTEsMHg1Nyww eGIyLDB4Y2QsMHgzYSwweGYwLDB4YzksMHgzNCwweDI0LDB4NDEsMHgxYywweDQyLAotKwkweDk5 LDB4YjIsMHg4NCwweGU5LDB4MTcsMHhkMiwweDc2LDB4OTIKLSsJfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4MzYsMHgxNywweDVkLDB4OTgsMHgyYiwweDY1LDB4MjUsMHg4ZSwweGM4LDB4 MjksMHhkZiwweDI3LAotKwkweDA1LDB4MzYsMHgyNiwweDEyLDB4OGEsMHg2OCwweDc0LDB4Mjcs MHgzNywweGQ0LDB4N2YsMHgzMiwKLSsJMHhiMSwweDEyLDB4ZDYsMHg4NSwweDgzLDB4ZWIsMHgy ZSwweGEwLDB4ZWQsMHg0YiwweGI1LDB4N2IsCi0rCTB4NmYsMHgzOSwweDNjLDB4NzEsMHg3Nyww eDAyLDB4MTIsMHhjYywweDJjLDB4M2EsMHg4ZSwweDYzLAotKwkweGRmLDB4NGEsMHhiZCwweDZm LDB4NmUsMHgyZSwweGVkLDB4MGEsMHg4NSwweGE1LDB4MmYsMHhhMiwKLSsJMHg2OCwweGRlLDB4 NDIsMHhiNQotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTEgUFIgICovCi0rX19maXBzX2NvbnN0 c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1 dFtdID0KLSsJewotKwkweDI2LDB4NWYsMHgzNiwweDE0LDB4ZmYsMHgzZCwweDgzLDB4ZmEsMHg3 MywweDVlLDB4NzUsMHhkYywKLSsJMHgyYywweDE4LDB4MTcsMHgxYgotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9ub25j ZVtdID0KLSsJewotKwkweGM4LDB4ZTMsMHg1NywweGE1LDB4N2IsMHg3NCwweDg2LDB4NmUKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4NmUsMHhkYiwweDBk LDB4ZmUsMHg3ZCwweGFjLDB4NzksMHhkMCwweGE1LDB4M2EsMHg0OCwweDg1LAotKwkweDgwLDB4 ZTIsMHg3ZiwweDJhCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KLSsJewotKwkweDMx LDB4Y2QsMHg1ZSwweDQzLDB4ZGMsMHhmYiwweDdhLDB4NzksMHhjYSwweDg4LDB4ZGUsMHgxZiwK LSsJMHhkNywweGJiLDB4NDIsMHgwOQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJ ewotKwkweDdjLDB4MjMsMHg5NSwweDM4LDB4MDAsMHg5NSwweGMxLDB4NzgsMHgxZiwweDhmLDB4 ZDcsMHg2MywKLSsJMHgyMywweDg3LDB4MmEsMHhlZAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9pbnRfcmV0dXJuZWRi aXRzW10gPQotKwl7Ci0rCTB4YmIsMHgzNCwweGU3LDB4OTMsMHhhMywweDAyLDB4MmMsMHg0YSww eGQwLDB4ODksMHhkYSwweDdmLAotKwkweGVkLDB4ZjQsMHg0YywweGRlLDB4MTcsMHhlYywweGU1 LDB4NmMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDQ5LDB4YmMs MHgyZCwweDJjLDB4YjcsMHgzMiwweGNiLDB4MjAsMHhkZiwweGY1LDB4NzcsMHg1OCwKLSsJMHhh MCwweDRiLDB4OTMsMHg2ZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9Ci0rCXsKLSsJ MHgzYywweGFhLDB4YjAsMHgyMSwweDQyLDB4YjAsMHhkZCwweDM0LDB4ZjAsMHgxNiwweDdmLDB4 MGMsCi0rCTB4MGYsMHhmZiwweDJlLDB4YWYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4OGUsMHhjYiwweGEzLDB4NjQsMHhiMiwweGI4LDB4MzMsMHg2YywweDY0LDB4M2Is MHg3OCwweDE2LAotKwkweDk5LDB4MzUsMHhjOCwweDMwLDB4Y2IsMHgzZSwweGEwLDB4ZDgKLSsJ fTsKLSsKLSsKLSsvKiBITUFDIFNIQS0xIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsK LSsJMHgzMiwweDlhLDB4MmEsMHg4NywweDdiLDB4ODksMHg3YywweGY2LDB4Y2IsMHg5NSwweGQ1 LDB4NDAsCi0rCTB4MTcsMHhmZSwweDQ3LDB4NzAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfbm9uY2VbXSA9Ci0rCXsKLSsJ MHgxNiwweGQ4LDB4ZTAsMHhjNywweDUyLDB4Y2YsMHg0YSwweDI1Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0KLSsJewotKwkweDM1LDB4MzUsMHhhOSwweGE1LDB4NDAsMHhiZSww eDliLDB4ZDEsMHg1NiwweGRkLDB4NDQsMHgwMCwKLSsJMHg3MiwweGY3LDB4ZDMsMHg1ZQotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgxYiwweDJjLDB4ODQsMHgyZCwweDRh LDB4ODksMHg4ZiwweDY5LDB4MTksMHhmMSwweGYzLDB4ZGIsCi0rCTB4YmIsMHhlMywweGFhLDB4 ZWEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGNmLDB4ZmEsMHg3ZCww eDcyLDB4MGYsMHhlNiwweGM3LDB4OTYsMHhhMCwweDY5LDB4MzEsMHgxMSwKLSsJMHg5YiwweDBi LDB4MWEsMHgyMCwweDFmLDB4M2YsMHhhYSwweGQxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0KLSsJewotKwkweDkwLDB4NzUsMHgxNSwweDA0LDB4OTUsMHhmMSwweGJhLDB4ODEsMHgw YywweDM3LDB4OTQsMHg2ZiwKLSsJMHg4NiwweDUyLDB4NmQsMHg5YwotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlv bmFsaW5wdXRyZXNlZWRbXSA9Ci0rCXsKLSsJMHg1YiwweDQwLDB4YmEsMHg1ZiwweDE3LDB4NzAs MHhmMCwweDRiLDB4ZGYsMHhjOSwweDk3LDB4OTIsCi0rCTB4NzksMHhjNSwweDgyLDB4MjgKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTFfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewotKwkweDk3LDB4YzgsMHg4MCwweDkwLDB4 YjMsMHhhYSwweDZlLDB4NjAsMHhlYSwweDgzLDB4N2EsMHhlMywKLSsJMHg4YSwweGNhLDB4YTQs MHg3ZgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMV9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg5MCwweGJkLDB4MDUsMHg1 NiwweDZkLDB4YjUsMHgyMiwweGQ1LDB4YjksMHg1YSwweDI5LDB4MmQsCi0rCTB4ZTksMHgwYiww eGUxLDB4YWMsMHhkZSwweDI3LDB4MGIsMHhiMAotKwl9OwotKwotKwotKy8qIEhNQUMgU0hBLTIy NCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgxNywweDMyLDB4MmIsMHgy ZSwweDZmLDB4MWIsMHg5YywweDZkLDB4MzEsMHhlMCwweDM0LDB4MDcsCi0rCTB4Y2YsMHhlZCww eGY2LDB4YjYsMHg1YSwweDc2LDB4NGMsMHhiYywweDYyLDB4ODUsMHgwMSwweDkwCi0rCX07Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy MjRfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHgzOCwweGJmLDB4NWYsMHgyMCwweGIzLDB4NjgsMHgy ZiwweDQzLDB4NjEsMHgwNSwweDhmLDB4MjMKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9Ci0rCXsKLSsJMHhjMCwweGM5LDB4NDUsMHhhYywweDhkLDB4MjcsMHg3NywweDA4 LDB4MGIsMHgxNywweDZkLDB4ZWQsCi0rCTB4YzEsMHg3ZCwweGQ1LDB4MDcsMHg5ZCwweDZlLDB4 ZjgsMHgyMywweDJhLDB4MjIsMHgxMywweGJkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0 W10gPQotKwl7Ci0rCTB4YTQsMHgzYywweGU3LDB4M2IsMHhlYSwweDE5LDB4NDUsMHgzMiwweGMy LDB4ODMsMHg2ZCwweDIxLAotKwkweDhhLDB4YzAsMHhlZSwweDY3LDB4NDUsMHhkZSwweDEzLDB4 N2QsMHg5ZCwweDYxLDB4MDAsMHgzYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByW10gPQot Kwl7Ci0rCTB4MTUsMHgwNSwweDc0LDB4NGEsMHg3ZiwweDhkLDB4NWMsMHg2MCwweDE2LDB4ZTUs MHg3YiwweGFkLAotKwkweGY1LDB4NDEsMHg4ZiwweDU1LDB4NjAsMHhjNCwweDA5LDB4ZWUsMHgx ZSwweDExLDB4ODEsMHhhYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsK LSsJMHg2ZiwweGY1LDB4OWEsMHhlMiwweDU0LDB4NTMsMHgzMCwweDNkLDB4NWEsMHgyNywweDI5 LDB4MzgsCi0rCTB4MjcsMHhmMiwweDBkLDB4MDUsMHhlOSwweDI2LDB4Y2IsMHgxNiwweGMzLDB4 NTEsMHg1ZiwweDEzLAotKwkweDQxLDB4ZmUsMHg5OSwweGYyCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRp b25hbGlucHV0MltdID0KLSsJewotKwkweDczLDB4ODEsMHg4OCwweDg0LDB4OGYsMHhlZCwweDZm LDB4MTAsMHg5ZiwweDkzLDB4YmYsMHgxNywKLSsJMHgzNSwweDdjLDB4ZWYsMHhkNSwweDhkLDB4 MjYsMHhhNiwweDdhLDB4ZTgsMHgwOSwweDM2LDB4NGYKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5w dXRwcjJbXSA9Ci0rCXsKLSsJMHhlNiwweGNmLDB4Y2YsMHg3ZSwweDEyLDB4ZTUsMHg0MywweGQy LDB4MzgsMHhkOCwweDI0LDB4NmYsCi0rCTB4NWEsMHgzNywweDY4LDB4YmYsMHg0ZiwweGEwLDB4 ZmYsMHhkNSwweDYxLDB4OGEsMHg5MywweGUwCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcmV0dXJuZWRiaXRzW10g PQotKwl7Ci0rCTB4YWYsMHhmOSwweGQ4LDB4MTksMHg5MSwweDMwLDB4ODIsMHg2ZiwweGE5LDB4 MWUsMHg5ZCwweGQ3LAotKwkweGYzLDB4NTAsMHhlMCwweGM3LDB4ZDUsMHg2NCwweDk2LDB4N2Qs MHg0YywweDRkLDB4NzgsMHgwMywKLSsJMHg2ZCwweGQ4LDB4OWUsMHg3MgotKwl9OwotKwotKwot Ky8qIEhNQUMgU0hBLTIyNCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRbXSA9Ci0rCXsKLSsJMHgx MSwweDgyLDB4ZmQsMHhkOSwweDQyLDB4ZjQsMHhmYSwweGM4LDB4ZjIsMHg0MSwweGU2LDB4NTQs Ci0rCTB4MDEsMHhhZSwweDIyLDB4NmUsMHhjNiwweGFmLDB4YWYsMHhkMCwweGE2LDB4YjIsMHhl MiwweDZkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyMjRfbm9uY2VbXSA9Ci0rCXsKLSsJMHhhOSwweDQ4LDB4ZDcsMHg5Miww eDM5LDB4N2UsMHgyYSwweGRjLDB4MzAsMHgxZiwweDBlLDB4MmIKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxMSwweGQ1LDB4ZjQsMHhiZCwweDY3LDB4OGMs MHgzMSwweGNmLDB4YTMsMHgzZiwweDFlLDB4NmIsCi0rCTB4YTgsMHgwNywweDAyLDB4MGIsMHhj OCwweDJlLDB4NmMsMHg2NCwweDQxLDB4NWIsMHhjOCwweDM3Ci0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25h bGlucHV0W10gPQotKwl7Ci0rCTB4NjgsMHgxOCwweGMyLDB4MDYsMHhlYiwweDNlLDB4MDQsMHg5 NSwweDQ0LDB4NWUsMHhmYiwweGU2LAotKwkweDQxLDB4YzEsMHg1YywweGNjLDB4NDAsMHgyZiww eGI3LDB4ZDIsMHgwZiwweGYzLDB4NmIsMHhlNwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNb XSA9Ci0rCXsKLSsJMHg3ZiwweDQ1LDB4YzcsMHg1ZCwweDMyLDB4ZTYsMHgxNywweDYwLDB4YmEs MHhkYywweGI4LDB4NDIsCi0rCTB4MWIsMHg5YywweGYxLDB4ZmEsMHgzYiwweDRkLDB4MjksMHg1 NCwweGM2LDB4OTAsMHhmZiwweDVjLAotKwkweGNkLDB4ZDYsMHhhOSwweGNjCi0rCX07Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRf ZW50cm9weWlucHV0cmVzZWVkW10gPQotKwl7Ci0rCTB4YzQsMHg4ZSwweDM3LDB4OTUsMHg2OSww eDUzLDB4MjgsMHhkNywweDM3LDB4YmIsMHg3MCwweDk1LAotKwkweDFjLDB4MDcsMHgxZCwweGQ5 LDB4YjcsMHhlNiwweDFiLDB4YmIsMHhmZSwweDQxLDB4ZWIsMHhjOQotKwl9OwotKwotK19fZmlw c19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0 aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDUzLDB4MTcsMHhhMSwweDZhLDB4ZmEsMHg3 NywweDQ3LDB4YjAsMHg5NSwweDU2LDB4OWEsMHgyMCwKLSsJMHg1NywweGRlLDB4NWMsMHg4OSww eDlmLDB4N2YsMHhlMiwweGRlLDB4MTcsMHgzYSwweDUwLDB4MjMKLSsJfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlv bmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4M2EsMHgzMiwweGY5LDB4ODUsMHgwYywweGMxLDB4ZWQs MHg3NiwweDJkLDB4ZGYsMHg0MCwweGMzLAotKwkweDA2LDB4MjIsMHg2NiwweGQ0LDB4OWEsMHg5 YSwweGZmLDB4NWEsMHg3ZSwweDdhLDB4ZjMsMHg5NgotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3JldHVybmVkYml0c1td ID0KLSsJewotKwkweDQzLDB4YjQsMHg1NywweDVjLDB4MzgsMHgyNSwweDlkLDB4YWUsMHhlYyww eDk2LDB4ZDEsMHg4NSwKLSsJMHgzYSwweDg0LDB4OGQsMHhmZSwweDY4LDB4ZDUsMHgwZSwweDVj LDB4OGYsMHg2NSwweGE1LDB4NGUsCi0rCTB4NDUsMHg4NCwweGE4LDB4OTQKLSsJfTsKLSsKLSsK LSsvKiBITUFDIFNIQS0yNTYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4 NGQsMHhiMCwweDQzLDB4ZDgsMHgzNCwweDRiLDB4MTAsMHg3MCwweGIxLDB4OGIsMHhlZCwweGVh LAotKwkweDA3LDB4OTIsMHg5ZiwweDZjLDB4NzksMHgzMSwweGFmLDB4ODEsMHgyOSwweGViLDB4 NmUsMHhjYSwKLSsJMHgzMiwweDQ4LDB4MjgsMHhlNywweDAyLDB4NWQsMHhhNiwweGE2Ci0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHgzYSwweGFlLDB4MTUsMHhhOSwweDk5LDB4ZGMs MHhlNCwweDY3LDB4MzQsMHgzYiwweDcwLDB4MTUsCi0rCTB4YWEsMHhkMywweDMwLDB4OWEKLSsJ fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHgxMywweDFkLDB4 MjQsMHgwNCwweGIwLDB4MTgsMHg4MSwweDE1LDB4MjEsMHg1MSwweDJhLDB4MjQsCi0rCTB4NTIs MHg2MSwweGJlLDB4NjQsMHg4MiwweDZiLDB4NTUsMHgyZiwweGUyLDB4ZjEsMHg0MCwweDdkLAot KwkweDcxLDB4ZDgsMHgwMSwweDg2LDB4MTUsMHhiNywweDhiLDB4YjUKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg4ZiwweGE2LDB4NTQsMHg1ZiwweGIxLDB4ZDAs MHhkOCwweGMzLDB4ZTcsMHgwYywweDE1LDB4YTksCi0rCTB4MjMsMHg2ZSwweGZlLDB4ZmIsMHg5 MywweGY3LDB4M2EsMHhiZCwweDU5LDB4MDEsMHhmYSwweDE4LAotKwkweDhlLDB4ZTksMHgxYSww eGE5LDB4NzgsMHhmYywweDc5LDB4MGIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0K LSsJewotKwkweGNmLDB4MjQsMHhiOSwweGViLDB4YjMsMHhkNCwweGNkLDB4MTcsMHgzNywweDM4 LDB4NzUsMHg3OSwKLSsJMHgxNSwweGNiLDB4MmQsMHg3NSwweDUxLDB4ZjEsMHhjYywweGFhLDB4 MzIsMHhhNCwweGE3LDB4MzYsCi0rCTB4N2MsMHg1YywweGU0LDB4NDcsMHhmMSwweDNlLDB4MWQs MHhlNQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg1MiwweDQy LDB4ZmEsMHhlYiwweDg1LDB4ZTAsMHgzMCwweDIyLDB4NzksMHgwMCwweDE2LDB4YjIsCi0rCTB4 ODgsMHgyZiwweDE0LDB4NmEsMHhiNywweGZjLDB4YjcsMHg1MywweGRjLDB4NGEsMHgxMiwweGVm LAotKwkweDU0LDB4ZDYsMHgzMywweGU5LDB4MjAsMHhkNiwweGZkLDB4NTYKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4ZjQsMHhmNiwweDQ5LDB4YTEsMHgyZCww eDY0LDB4MmIsMHgzMCwweDU4LDB4ZjgsMHhiZCwweGI4LAotKwkweDc1LDB4ZWIsMHhiYiwweDVl LDB4MWMsMHg5YiwweDgxLDB4NmEsMHhkYSwweDE0LDB4ODYsMHg2ZSwKLSsJMHhkMCwweGRhLDB4 MTgsMHhiNywweDg4LDB4ZmIsMHg1OSwweGYzCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHIy W10gPQotKwl7Ci0rCTB4MjEsMHhjZCwweDZlLDB4NDYsMHhhZCwweDk5LDB4MDcsMHgxNywweGI0 LDB4M2QsMHg3NiwweDBhLAotKwkweGZmLDB4NWIsMHg1MiwweDUwLDB4NzgsMHhkZiwweDFmLDB4 MjQsMHgwNiwweDBkLDB4M2YsMHg3NCwKLSsJMHhhOSwweGM5LDB4MzcsMHhjZiwweGQ4LDB4MjYs MHgyNSwweDkxCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4YTcsMHhh ZiwweDJmLDB4MjksMHhlMCwweDNhLDB4NzIsMHg5NSwweDk2LDB4MWMsMHhhOSwweGYwLAotKwkw eDRhLDB4MTcsMHg0ZCwweDY2LDB4MDYsMHgxMCwweGJmLDB4MzksMHg4OSwweDg4LDB4YjgsMHg5 MSwKLSsJMHgzNywweDE4LDB4OTksMHhjZiwweDhjLDB4NTMsMHgzYiwweDdlCi0rCX07Ci0rCi0r Ci0rLyogSE1BQyBTSEEtMjU2IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkw eDk2LDB4YjcsMHg1MywweDIyLDB4MWUsMHg1MiwweDJhLDB4OTYsMHhiMSwweDE1LDB4M2MsMHgz NSwKLSsJMHg1YSwweDhiLDB4ZDMsMHg0YSwweGE2LDB4NmMsMHg4MywweDBhLDB4N2QsMHhhMyww eDIzLDB4M2QsCi0rCTB4NDMsMHhhMSwweDA3LDB4MmMsMHgyZCwweGUzLDB4ODEsMHhjYwotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X25vbmNlW10gPQotKwl7Ci0rCTB4ZjEsMHhhYywweDk3LDB4Y2IsMHg1ZSwweDA2LDB4 NDgsMHhkMiwweDk0LDB4YmUsMHgxNSwweDJlLAotKwkweGM3LDB4ZmMsMHhjMiwweDAxCi0rCX07 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4OTgsMHhjNSwweDFlLDB4 MzUsMHg1ZSwweDg5LDB4MGQsMHhjZSwweDY0LDB4NmQsMHgxOCwweGE3LAotKwkweDVhLDB4YzYs MHhmMywweGU3LDB4ZDYsMHg5ZSwweGMwLDB4ZWEsMHhiNywweDNhLDB4OGQsMHg2NSwKLSsJMHhi OCwweGViLDB4MTAsMHhkNywweDU3LDB4MTgsMHhhMCwweDMyCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25h bGlucHV0W10gPQotKwl7Ci0rCTB4MWIsMHgxMCwweGFmLDB4YWMsMHhkMCwweDY1LDB4OTUsMHhh ZCwweDA0LDB4YWQsMHgwMywweDFjLAotKwkweGUwLDB4NDAsMHhkNiwweDNlLDB4MWMsMHg0Niww eDUzLDB4MzksMHg3YywweGUyLDB4YmMsMHhkYSwKLSsJMHg4YywweGEyLDB4MzMsMHhhNywweDlh LDB4MjYsMHhkMywweDI3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkw eGJhLDB4NjEsMHgwZSwweDU1LDB4ZmUsMHgxMSwweDhhLDB4OWUsMHgwZiwweDgwLDB4ZGYsMHgx ZCwKLSsJMHgwMywweDBhLDB4ZmUsMHgxNSwweDk0LDB4MjgsMHg0YiwweGJhLDB4ZjQsMHg5Ziww eDUxLDB4MjUsCi0rCTB4ODgsMHhlNSwweDRlLDB4ZmIsMHhhZiwweGNlLDB4NjksMHg5MAotKwl9 OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDYyLDB4N2YsMHgxZSwweDZi LDB4ZTgsMHg4ZSwweGUxLDB4MzUsMHg3ZCwweDliLDB4NGYsMHhjNywKLSsJMHhlYywweGM4LDB4 YWMsMHhlZiwweDZiLDB4MTMsMHg5ZSwweDA1LDB4NTYsMHhjMSwweDA4LDB4ZjksCi0rCTB4MmYs MHgwZiwweDI3LDB4OWMsMHhkNCwweDE1LDB4ZWQsMHgyZAotKwl9OwotKwotK19fZmlwc19jb25z dHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxp bnB1dHJlc2VlZFtdID0KLSsJewotKwkweGM3LDB4NzYsMHg2ZSwweGE5LDB4ZDIsMHhiMiwweDc2 LDB4NDAsMHg4MiwweDI1LDB4MmMsMHhiMywKLSsJMHg2ZiwweGFjLDB4ZTksMHg3NCwweGVmLDB4 OGYsMHgzYywweDhlLDB4Y2QsMHhmMSwweGJmLDB4YjMsCi0rCTB4NDksMHg3NywweDM0LDB4ODgs MHg1MiwweDM2LDB4ZTYsMHgyZQotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsK LSsJMHg4ZCwweGI4LDB4MGMsMHhkMSwweGJmLDB4NzAsMHhmNiwweDE5LDB4YzMsMHg0MSwweDgw LDB4OWYsCi0rCTB4ZTEsMHhhNSwweGE0LDB4MWYsMHgyYywweDI2LDB4YjEsMHhlNSwweGQ4LDB4 ZWIsMHhiZSwweGY4LAotKwkweGRmLDB4ODgsMHg2YSwweDg5LDB4ZDYsMHgwNSwweGQ4LDB4OWQK LSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg0MywweDEyLDB4MmEsMHgyYyww eDQwLDB4NTMsMHgyZSwweDdjLDB4NjYsMHgzNCwweGFjLDB4YzMsCi0rCTB4NDMsMHhlMywweGUw LDB4NmEsMHhmYywweGZhLDB4ZWEsMHg4NywweDIxLDB4MWYsMHhlMiwweDI2LAotKwkweGM0LDB4 ZjksMHgwOSwweDlhLDB4MGQsMHg2ZSwweDdmLDB4ZTAKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNI QS0zODQgUFIgICovCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NjksMHg4MSwweDk4 LDB4ODgsMHg0NCwweGY1LDB4ZDYsMHgyZSwweDAwLDB4MDgsMHgzYiwweGM1LAotKwkweGZiLDB4 ZDcsMHg4ZSwweDZmLDB4MjMsMHhmOCwweDZkLDB4MDksMHhkNiwweDg1LDB4NDksMHhkMSwKLSsJ MHhmOCwweDZkLDB4YTQsMHg1OCwweDU0LDB4ZmQsMHg4OCwweGE5Ci0rCX07Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfbm9u Y2VbXSA9Ci0rCXsKLSsJMHg2ZSwweDM4LDB4ODEsMHhjYSwweGI3LDB4ZTgsMHg2ZSwweDY2LDB4 NDksMHg4YSwweGIyLDB4NTksCi0rCTB4ZWUsMHgxNiwweGM5LDB4ZGUKLSsJfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Ci0rCXsKLSsJMHhmZSwweDRjLDB4ZDksMHhmNCwweDc4 LDB4M2IsMHgwOCwweDQxLDB4OGQsMHg4ZiwweDU1LDB4YzQsCi0rCTB4NDMsMHg1NiwweGI2LDB4 MTIsMHgzNiwweDZiLDB4MzAsMHhiNywweDVlLDB4ZTEsMHhiOSwweDQ3LAotKwkweDA0LDB4YjEs MHg0ZSwweGE5LDB4MDAsMHhhMSwweDUyLDB4YTEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5w dXRbXSA9Ci0rCXsKLSsJMHg4OSwweGU5LDB4Y2MsMHg4ZiwweDI3LDB4M2MsMHgyNiwweGQxLDB4 OTUsMHhjOCwweDdkLDB4MGYsCi0rCTB4NWIsMHgxYSwweGYwLDB4NzgsMHgzOSwweDU2LDB4NmYs MHhhNCwweDIzLDB4ZTcsMHhkMSwweGRhLAotKwkweDdjLDB4NjYsMHgzMywweGEwLDB4OTAsMHhj OSwweDkyLDB4ODgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGJl LDB4M2QsMHg3YywweDBkLDB4Y2EsMHhkYSwweDdjLDB4NDksMHhiOCwweDEyLDB4MzYsMHhjMCwK LSsJMHhkYiwweGFkLDB4MzUsMHhhOCwweGM3LDB4MGIsMHgyYSwweDJjLDB4NjksMHg2ZCwweDI1 LDB4NTYsCi0rCTB4NjMsMHg4MiwweDExLDB4M2UsMHhhNywweDMzLDB4NzAsMHg3MgotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh Mzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHg4MiwweDNkLDB4ZTYsMHg1NCww eDgwLDB4NDIsMHhmOCwweGJhLDB4OTAsMHg0ZiwweDA2LDB4YTYsCi0rCTB4ZDIsMHg3ZiwweGJm LDB4NzksMHg3YywweDEyLDB4N2QsMHhhNiwweGEyLDB4NjYsMHhlOCwweGE2LAotKwkweGMwLDB4 ZDYsMHg0YSwweDU1LDB4YmYsMHhkOCwweDBhLDB4YzUsMHhmOCwweDAzLDB4ODgsMHhkZCwKLSsJ MHg4ZSwweDg3LDB4ZDEsMHg1YSwweDQ4LDB4MjYsMHg3MiwweDJhLDB4OGUsMHhjZiwweGVlLDB4 YmEKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQotKwl7Ci0rCTB4OGYsMHhmZiww eGQ5LDB4ODQsMHhiYiwweDg1LDB4M2EsMHg2NiwweGExLDB4MjEsMHhjZSwweGIyLAotKwkweDNh LDB4M2EsMHgxNywweDIyLDB4MTksMHhhZSwweGM3LDB4YjYsMHg2MywweDgxLDB4ZDUsMHhmZiwK LSsJMHgwZCwweGM4LDB4ZTEsMHhhZiwweDU3LDB4ZDIsMHhjYiwweDYwCi0rCX07Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJf ZW50cm9weWlucHV0cHIyW10gPQotKwl7Ci0rCTB4ZDcsMHhmYiwweGM5LDB4ZTgsMHhlMiwweGYy LDB4YWEsMHg0YywweGI4LDB4NTEsMHgyZiwweGUxLAotKwkweDIyLDB4YmEsMHhmMywweGRhLDB4 MGEsMHgxOSwweDc2LDB4NzEsMHg1NywweGIyLDB4MWQsMHg5NCwKLSsJMHgwOSwweDY5LDB4NmMs MHhkMywweDk3LDB4NTEsMHg4MSwweDg3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPQot Kwl7Ci0rCTB4ZTYsMHgxOSwweDI4LDB4YTgsMHgyMSwweGNlLDB4NWUsMHhkYiwweDI0LDB4Nzks MHg4YywweDc2LAotKwkweDVkLDB4NzMsMHhiMiwweGRmLDB4YWMsMHhlZiwweDg1LDB4YTcsMHgz YiwweDE5LDB4MDksMHg4YiwKLSsJMHg3ZiwweDk4LDB4MjgsMHhhOSwweDkzLDB4ZDgsMHg3YSww eGFkLDB4NTUsMHg4YiwweDI0LDB4OWQsCi0rCTB4ZTYsMHg5OCwweGZlLDB4NDcsMHhkNSwweDQ4 LDB4YzEsMHgyMywweGQ4LDB4MWQsMHg2MiwweDc1Ci0rCX07Ci0rCi0rCi0rLyogSE1BQyBTSEEt Mzg0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dFtdID0KLSsJewotKwkweGMzLDB4NTYsMHgyYiww eDFkLDB4YzIsMHhiYiwweGE4LDB4ZjAsMHhhZSwweDFiLDB4MGQsMHhkMywKLSsJMHg1YSwweDZj LDB4ZGEsMHg1NywweDhlLDB4YTUsMHg4YSwweDBkLDB4NmMsMHg0YiwweDE4LDB4YjEsCi0rCTB4 MDQsMHgzZSwweGI0LDB4OTksMHgzNSwweGM0LDB4YzAsMHg1ZgotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X25vbmNlW10g PQotKwl7Ci0rCTB4YzUsMHg0OSwweDFlLDB4NjYsMHgyNywweDkyLDB4YmUsMHhlYywweGI1LDB4 MWUsMHg0YiwweGIxLAotKwkweDM4LDB4ZTMsMHhlYiwweDYyCi0rCX07Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQotKwl7Ci0rCTB4YmUsMHhlNywweDZiLDB4NTcsMHhkZSwweDg4LDB4 MTEsMHg5NiwweDliLDB4NmUsMHhlYSwweGU1LAotKwkweDYzLDB4ODMsMHg0YywweGI2LDB4OGQs MHg2NiwweGFhLDB4MWYsMHg4YiwweDU0LDB4ZTcsMHg2MiwKLSsJMHg2ZCwweDVhLDB4ZmMsMHhi ZiwweDk3LDB4YmEsMHhjZCwweDc3Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0W10gPQotKwl7 Ci0rCTB4ZTUsMHgyOCwweDVmLDB4NDMsMHhmNSwweDgzLDB4NmUsMHgwYSwweDgzLDB4NWMsMHhl MywweDgxLAotKwkweDAzLDB4ZjIsMHhmOCwweDc4LDB4MDAsMHg3YywweDk1LDB4ODcsMHgxNiww eGQ2LDB4NmMsMHg1OCwKLSsJMHgzMywweDZjLDB4NTMsMHgzNSwweDBkLDB4NjYsMHhlMywweGNl Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEzODRfaW50X3JldHVybmVkYml0c1tdID0KLSsJewotKwkweGUyLDB4MWYsMHhmMyww eGRhLDB4MGQsMHgxOSwweDk5LDB4ODcsMHhjNCwweDkwLDB4YTIsMHgzMSwKLSsJMHhjYSwweDJh LDB4ODksMHg1OCwweDQzLDB4NDQsMHhiOCwweGRlLDB4Y2YsMHhhNCwweGJlLDB4M2IsCi0rCTB4 NTMsMHgyNiwweDIyLDB4MzEsMHg3NiwweDQxLDB4MjIsMHhiNSwweGE4LDB4NzAsMHgyZiwweDRi LAotKwkweDY0LDB4OTUsMHg0ZCwweDQ4LDB4OTYsMHgzNSwweGU2LDB4YmQsMHgzYywweDM0LDB4 ZGIsMHgxYgotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDc3LDB4 NjEsMHhiYSwweGJjLDB4ZjIsMHhjMSwweGYzLDB4NGIsMHg4NiwweDY1LDB4ZmQsMHg0OCwKLSsJ MHgwZSwweDNjLDB4MDIsMHg1ZSwweGEyLDB4N2EsMHg2YiwweDdjLDB4ZWQsMHgyMSwweDVlLDB4 ZjksCi0rCTB4Y2QsMHhjZCwweDc3LDB4MDcsMHgyYiwweGJlLDB4YzUsMHg1YwotKwl9OwotKwot K19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDE4LDB4MjQsMHg1ZiwweGM2LDB4 ODQsMHhkMSwweDY3LDB4YzMsMHg5YSwweDExLDB4YTUsMHg4YywKLSsJMHgwNywweDM5LDB4MjEs MHg4MywweDRkLDB4MDQsMHhjNCwweDZhLDB4MjgsMHgxOSwweGNmLDB4OTIsCi0rCTB4MjEsMHhk OSwweDllLDB4NDEsMHg3MiwweDZjLDB4OWUsMHg2MwotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1 dDJbXSA9Ci0rCXsKLSsJMHg5NiwweDY3LDB4NDEsMHgyOCwweDliLDB4YjcsMHg5MiwweDhkLDB4 NjQsMHgzYiwweGU0LDB4Y2YsCi0rCTB4N2UsMHhhYSwweDFlLDB4YjEsMHg0YiwweDFkLDB4MDks MHg1NiwweDY3LDB4OWMsMHhjNiwweDZkLAotKwkweDNiLDB4ZTgsMHg5MSwweDlkLDB4ZTEsMHg4 YSwweGI3LDB4MzIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9yZXR1cm5lZGJpdHNbXSA9Ci0rCXsKLSsJMHhlMywweDU5 LDB4NjEsMHgzOCwweDkyLDB4ZWMsMHhlMiwweDNjLDB4ZmYsMHhiNywweGRiLDB4MTksCi0rCTB4 MGYsMHg1YiwweDkzLDB4NjgsMHgwZCwweGE0LDB4OTQsMHg0MCwweDcyLDB4MGIsMHhlMCwweGVk LAotKwkweDRkLDB4Y2QsMHg2OCwweGEwLDB4MWUsMHhmZSwweDY3LDB4YjIsMHhmYSwweDIxLDB4 NTYsMHg3NCwKLSsJMHhhNCwweGFkLDB4Y2YsMHhiNywweDYwLDB4NjYsMHgyZSwweDQwLDB4ZGUs MHg4MiwweGNhLDB4ZmIKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS01MTIgUFIgICovCi0rX19m aXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJf ZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4YWEsMHg5ZSwweDQ1LDB4NjcsMHgwZSwweDAwLDB4 MmEsMHg2NywweDk4LDB4ZDYsMHhkYSwweDBiLAotKwkweDBmLDB4MTcsMHg3ZSwweGFjLDB4ZmQs MHgyNywweGM0LDB4Y2EsMHg4NCwweGRmLDB4ZGUsMHhiYSwKLSsJMHg4NSwweGQ5LDB4YmUsMHg4 ZiwweGYzLDB4ZmYsMHg5MSwweDRkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfbm9uY2VbXSA9Ci0rCXsKLSsJMHg4 YywweDQ5LDB4MmYsMHg1OCwweDFlLDB4N2EsMHhkYSwweDRiLDB4N2UsMHg4YSwweDMwLDB4N2Is Ci0rCTB4ODYsMHhlYSwweGFmLDB4YTIKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9Ci0rCXsKLSsJMHg3MSwweGUxLDB4YmIsMHhhZCwweGE3LDB4NGIsMHgyZSwweDMxLDB4 M2IsMHgwYiwweGVjLDB4MjQsCi0rCTB4OTksMHgzOCwweGJjLDB4YWEsMHgwNSwweDRjLDB4NDYs MHg0NCwweGZhLDB4YWQsMHg4ZSwweDAyLAotKwkweGMxLDB4N2UsMHhhZCwweGVjLDB4NTQsMHhh NiwweGQwLDB4YWQKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHgz ZCwweDZlLDB4YTYsMHhhOCwweDI5LDB4MmEsMHhiMiwweGY1LDB4OTgsMHg0MiwweGU0LDB4OTIs Ci0rCTB4NzgsMHgyMiwweDY3LDB4ZmQsMHgxYiwweDE1LDB4MWUsMHgyOSwweGFhLDB4NzEsMHgz YywweDNjLAotKwkweGU3LDB4MDUsMHgyMCwweGE5LDB4MjksMHhjNiwweDc1LDB4NzEKLSsJfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0KLSsJewotKwkweGFiLDB4YjksMHgxNiwweGQ4LDB4 NTUsMHgzNSwweDU0LDB4YjcsMHg5NywweDNmLDB4OTQsMHhiYywKLSsJMHgyZiwweDdjLDB4NzAs MHhjNywweGQwLDB4ZWQsMHhiNywweDRiLDB4ZjcsMHhmNiwweDZjLDB4MDMsCi0rCTB4MGMsMHhi MCwweDAzLDB4ZDgsMHhiYiwweDcxLDB4ZDksMHgxMAotKwl9OwotKwotK19fZmlwc19jb25zdHNl ZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2ludF9yZXR1cm5l ZGJpdHNbXSA9Ci0rCXsKLSsJMHg4ZSwweGQzLDB4ZmQsMHg1MiwweDllLDB4ODMsMHgwOCwweDQ5 LDB4MTgsMHg2ZSwweDIzLDB4NTYsCi0rCTB4NWMsMHg0NSwweDkzLDB4MzQsMHgwNSwweGUyLDB4 OTgsMHg4ZiwweDBjLDB4ZDQsMHgzMiwweDBjLAotKwkweGZkLDB4ZGEsMHg1ZiwweDkyLDB4M2Es MHg4YywweDgxLDB4YmQsMHhmNiwweDZjLDB4NTUsMHhmZCwKLSsJMHhiOCwweDIwLDB4Y2UsMHg4 ZCwweDk3LDB4MjcsMHhlOCwweGU4LDB4ZTAsMHhiMywweDg1LDB4NTAsCi0rCTB4YTIsMHhjMiww eGIyLDB4OTUsMHgxZCwweDQ4LDB4ZDMsMHg3YiwweDRiLDB4NzgsMHgxMywweDM1LAotKwkweDA1 LDB4MTcsMHhiZSwweDBkCi0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0KLSsJewot KwkweGMzLDB4ZmMsMHg5NSwweGFhLDB4NjksMHgwNiwweGFlLDB4NTksMHg0MSwweGNlLDB4MjYs MHgwOCwKLSsJMHgyOSwweDZkLDB4NDUsMHhkYSwweGU4LDB4YjMsMHg2YywweDk1LDB4NjAsMHgw ZiwweDcwLDB4MmMsCi0rCTB4MTAsMHhiYSwweDM4LDB4OGMsMHhjZiwweDI5LDB4OTksMHhhYQot Kwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByMltdID0KLSsJewotKwkweDNiLDB4OWEsMHgyNSww eGNlLDB4ZDcsMHhmOSwweDVjLDB4ZDEsMHgzYSwweDNlLDB4YWEsMHg3MSwKLSsJMHgxNCwweDNl LDB4MTksMHhlOCwweGNlLDB4ZTYsMHhmZSwweDUxLDB4ODQsMHhlOSwweDFiLDB4ZmUsCi0rCTB4 M2YsMHhhNywweGYyLDB4ZmQsMHg3NiwweDVmLDB4NmEsMHhlNwotKwl9OwotKwotK19fZmlwc19j b25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3JldHVy bmVkYml0c1tdID0KLSsJewotKwkweGI3LDB4ODIsMHhhOSwweDU3LDB4ODEsMHg2NywweDUzLDB4 YjUsMHhhMSwweGU5LDB4M2QsMHgzNSwKLSsJMHhmOSwweGU0LDB4OTcsMHhiZSwweGE2LDB4Y2Es MHhmMSwweDAxLDB4MTMsMHgwOSwweGU3LDB4MjEsCi0rCTB4YzAsMHhlZCwweDkzLDB4NWQsMHg0 YiwweGY0LDB4ZWIsMHg4ZCwweDUzLDB4MjUsMHg4YSwweGM0LAotKwkweGIxLDB4NmYsMHg2ZSww eDM3LDB4Y2QsMHgyZSwweGFjLDB4MzksMHhiMiwweGI2LDB4OTksMHhhMywKLSsJMHg4MiwweDAw LDB4YjAsMHgyMSwweGYwLDB4YzcsMHgyZiwweDRjLDB4NzMsMHg5MiwweGZkLDB4MDAsCi0rCTB4 YjYsMHhhZiwweGJjLDB4ZDMKLSsJfTsKLSsKLSsKLSsvKiBITUFDIFNIQS01MTIgTm8gUFIgICov Ci0rX19maXBzX2NvbnN0c2VnCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfZW50cm9weWlucHV0W10gPQotKwl7Ci0rCTB4NmUsMHg4NSwweGU2LDB4MjUsMHg5NiwweDI5 LDB4YTcsMHg1MiwweDViLDB4NjAsMHhiYSwweGFhLAotKwkweGRlLDB4ZGIsMHgzNiwweDBhLDB4 NTEsMHg5YSwweDE1LDB4YWUsMHg2ZSwweDE4LDB4ZDMsMHhmZSwKLSsJMHgzOSwweGI5LDB4NGEs MHg5NiwweGY4LDB4NzcsMHhjYiwweDk1Ci0rCX07Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfbm9uY2VbXSA9Ci0rCXsKLSsJMHhl MCwweGE2LDB4NWQsMHgwOCwweGMzLDB4N2MsMHhhZSwweDI1LDB4MmUsMHg4MCwweGQxLDB4M2Us Ci0rCTB4ZDksMHhhZiwweDQzLDB4M2MKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9Ci0rCXsKLSsJMHg1MywweDk5LDB4NTIsMHg1ZiwweDExLDB4YTksMHg2NCwweDY2LDB4MjAs MHg1ZSwweDFiLDB4NWYsCi0rCTB4NDIsMHhiMywweGY0LDB4ZGEsMHhlZCwweGJiLDB4NjMsMHhj MSwweDIzLDB4YWYsMHhkMCwweDAxLAotKwkweDkwLDB4M2IsMHhkMCwweDc4LDB4ZTQsMHgwYiww eGE3LDB4MjAKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9Ci0rCXsKLSsJMHg4NSwweDkw LDB4ODAsMHhkMywweDk4LDB4ZjEsMHg1MywweDZkLDB4NjgsMHgxNSwweDhmLDB4ZTUsCi0rCTB4 NjAsMHgzZiwweDE3LDB4MjksMHg1NSwweDhkLDB4MzMsMHhiMSwweDQ1LDB4NjQsMHg2NCwweDhk LAotKwkweDUwLDB4MjEsMHg4OSwweGFlLDB4ZjYsMHhmZCwweDMyLDB4NzMKLSsJfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9p bnRfcmV0dXJuZWRiaXRzW10gPQotKwl7Ci0rCTB4MjgsMHg1NiwweDMwLDB4NmYsMHhmNCwweGEx LDB4NDgsMHhlMCwweGM5LDB4ZjUsMHg3NSwweDkwLAotKwkweGNjLDB4ZmIsMHhkZiwweGRmLDB4 NzEsMHgzZCwweDBhLDB4OWEsMHgwMywweDY1LDB4M2IsMHgxOCwKLSsJMHg2MSwweGUzLDB4ZDEs MHhkYSwweGNjLDB4NGEsMHhmZSwweDU1LDB4MzgsMHhmOCwweDIxLDB4NmIsCi0rCTB4ZmEsMHgx OCwweDAxLDB4NDIsMHgzOSwweDJmLDB4OTksMHg1MywweDM4LDB4MTUsMHg4MiwweDM0LAotKwkw eGM1LDB4OTMsMHg5MiwweGJjLDB4NGQsMHg3NSwweDFhLDB4NWYsMHgyMSwweDI3LDB4Y2MsMHhh MSwKLSsJMHhiMSwweDU3LDB4NjksMHhlOAotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtd ID0KLSsJewotKwkweDhjLDB4NTIsMHg3ZSwweDc3LDB4NzIsMHgzZiwweGEzLDB4MDQsMHg5Nyww eDEwLDB4OWIsMHg0MSwKLSsJMHhiZCwweGU4LDB4ZmYsMHg4OSwweGVkLDB4ODAsMHhlMywweGJk LDB4YWEsMHgxMiwweDJkLDB4Y2EsCi0rCTB4NzUsMHg4MiwweDM2LDB4NzcsMHg4OCwweGNkLDB4 YTYsMHg3MwotKwl9OwotKwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KLSsJewotKwkweDdl LDB4MzIsMHhlMywweDY5LDB4NjksMHgwNywweDM0LDB4YTIsMHgxNiwweGEyLDB4NWQsMHgxYSwK LSsJMHgxMCwweDkxLDB4ZDMsMHhlMiwweDIxLDB4YTIsMHhhMywweGRkLDB4Y2QsMHgwYywweDA5 LDB4ODYsCi0rCTB4MTEsMHhlMSwweDUwLDB4ZmYsMHg1YywweGI3LDB4ZWIsMHg1YwotKwl9Owot KwotK19fZmlwc19jb25zdHNlZwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh NTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9Ci0rCXsKLSsJMHg3ZiwweDc4LDB4NjYsMHhkOCwweGZi LDB4NjcsMHhjZiwweDhkLDB4OGMsMHgwOCwweDMwLDB4YTUsCi0rCTB4ZjgsMHg3ZCwweGNmLDB4 NDQsMHg1OSwweGNlLDB4ZjgsMHhkZiwweDU4LDB4ZDMsMHg2MCwweGNiLAotKwkweGE4LDB4NjAs MHhiOSwweDA3LDB4YzQsMHhiMSwweDk1LDB4NDgKLSsJfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9yZXR1cm5lZGJpdHNbXSA9 Ci0rCXsKLSsJMHhkZiwweGE3LDB4MzYsMHhkNCwweGRjLDB4NWQsMHg0ZCwweDMxLDB4YWQsMHg2 OSwweDQ2LDB4OWYsCi0rCTB4ZjEsMHg3YywweGQ3LDB4M2IsMHg0ZiwweDU1LDB4ZjIsMHhkNyww eGI5LDB4OWQsMHhhZCwweDdhLAotKwkweDc5LDB4MDgsMHg1OSwweGE1LDB4ZGMsMHg3NCwweGY1 LDB4OWIsMHg3MywweGQyLDB4MTMsMHgyNSwKLSsJMHgwYiwweDgxLDB4MDgsMHgwOCwweDI1LDB4 ZmIsMHgzOSwweGYyLDB4ZjAsMHhhMywweGE0LDB4OGQsCi0rCTB4ZWYsMHgwNSwweDllLDB4Yjgs MHhjNywweDUyLDB4ZTQsMHgwZSwweDQyLDB4YWEsMHg3YywweDc5LAotKwkweGMyLDB4ZDYsMHhm ZCwweGE1Ci0rCX07Ci0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBz L2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBz L2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBz L2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NjI5NDkxNSAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRl c3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NjI5NDkxNSArMDEwMAotQEAgLTAsMCArMSwxOTMg QEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0r ICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0 cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgot KyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0r ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgot KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS Ci0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1 ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3BbXSA9IHsKLSsJMHhhOCwweDUzLDB4Nzgs MHhkOCwweGZkLDB4M2YsMHg4ZCwweDcyLDB4ZWMsMHg3NCwweDE4LDB4MDgsCi0rCTB4MGQsMHhh MiwweDEzLDB4MTcsMHhlNCwweDNlLDB4YzQsMHhiNiwweDJiLDB4YTgsMHhjOCwweDYyLAotKwkw eDNiLDB4N2UsMHg0ZCwweDA0LDB4NDQsMHgxZCwweGQxLDB4YTAsMHg2NSwweDg2LDB4NjIsMHg1 OSwKLSsJMHg2NCwweDkzLDB4Y2EsMHg4ZSwweDllLDB4OGYsMHhiYiwweDdlLDB4MzQsMHhhYSww eGRkLDB4YjYsCi0rCTB4MmUsMHg1ZCwweDY3LDB4YjYsMHhkMCwweDlhLDB4NmUsMHg2MSwweGI3 LDB4NjksMHhlNywweGMzLAotKwkweDUyLDB4YWEsMHgyYiwweDEwLDB4ZTIsMHgwYywweGEwLDB4 NjMsMHg2OSwweDYzLDB4YjUsMHg1MiwKLSsJMHgzZSwweDg2LDB4NDcsMHgwZCwweGVjLDB4YmIs MHhlZCwweGEwLDB4MjcsMHhlNywweDk3LDB4ZTcsCi0rCTB4YjYsMHg3NiwweDM1LDB4ZDQsMHhk NCwweDljLDB4MzAsMHg3MCwweDBlLDB4NzQsMHhhZiwweDhhLAotKwkweDBmLDB4ZjEsMHg1Niww eGE4LDB4MDEsMHhhZiwweDU3LDB4YTIsMHg2ZSwweDcwLDB4NzgsMHhmMSwKLSsJMHhkOCwweDJm LDB4NzQsMHg5MCwweDhlLDB4Y2IsMHg2ZCwweDA3LDB4ZTcsMHgwYiwweDM1LDB4MDMsCi0rCTB4 ZWUsMHhkOSwweDRmLDB4YTMsMHgyYywweGYxLDB4N2EsMHg3ZiwweGMzLDB4ZDYsMHhjZiwweDQw LAotKwkweGRjLDB4N2IsMHgwMCwweDgzLDB4MGUsMHg2YSwweDI1LDB4NjYsMHhkYywweDA3LDB4 M2UsMHgzNCwKLSsJMHgzMywweDEyLDB4NTEsMHg3YywweDZhLDB4YTUsMHgxNSwweDJiLDB4NGIs MHhmZSwweGNkLDB4MmUsCi0rCTB4NTUsMHgxZiwweGVlLDB4MzQsMHg2MywweDE4LDB4YTEsMHg1 MywweDQyLDB4M2MsMHg5OSwweDZiLAotKwkweDBkLDB4NWQsMHhjYiwweDkxLDB4MDIsMHhhZSww eGRkLDB4MzgsMHg3OSwweDg2LDB4MTYsMHhmMSwKLSsJMHhmMSwweGUwLDB4ZDYsMHhjNCwweDAz LDB4NTIsMHg1YiwweDFmLDB4OWIsMHgzZCwweDRkLDB4YzcsCi0rCTB4NjYsMHhkZSwweDJkLDB4 ZmMsMHg0YSwweDU2LDB4ZDcsMHhiOCwweGJhLDB4NTksMHg2MywweGQ2LAotKwkweDBmLDB4M2Us MHgxNiwweDMxLDB4ODgsMHg3MCwweGFkLDB4NDMsMHg2OSwweDUyLDB4ZTUsMHg1NywKLSsJMHg2 NSwweDM3LDB4NGUsMHhhYiwweDg1LDB4ZTgsMHhlYywweDE3LDB4ZDYsMHhiOSwweGE0LDB4NTQs Ci0rCTB4N2IsMHg5YiwweDVmLDB4MjcsMHg1MiwweGYzLDB4MTAsMHg1YiwweGU4LDB4MDksMHhi MiwweDNhLAotKwkweDJjLDB4OGQsMHg3NCwweDY5LDB4ZGIsMHgwMiwweGUyLDB4NGQsMHg1OSww eDIzLDB4OTQsMHhhNywKLSsJMHhkYiwweGEwLDB4NjksMHhlOQotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9xW10gPSB7Ci0rCTB4ZDIsMHg3NywweDA0 LDB4NGUsMHg1MCwweGY1LDB4YTQsMHhlMywweGY1LDB4MTAsMHhhNSwweDBhLAotKwkweDBiLDB4 ODQsMHhmZCwweGZmLDB4YmMsMHhhMCwweDQ3LDB4ZWQsMHgyNywweDYwLDB4MjAsMHg1NiwKLSsJ MHg3NCwweDQxLDB4YTAsMHhhNQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg ZHNhX3Rlc3RfMjA0OF9nW10gPSB7Ci0rCTB4MTMsMHhkNywweDU0LDB4ZTIsMHgxZiwweGQyLDB4 NDEsMHg2NSwweDVkLDB4YTgsMHg5MSwweGM1LAotKwkweDIyLDB4YTYsMHg1YSwweDcyLDB4YTgs MHg5YiwweGRjLDB4NjQsMHhlYywweDliLDB4NTQsMHhhOCwKLSsJMHgyMSwweGVkLDB4NGEsMHg4 OSwweDhiLDB4NDksMHgwZSwweDBjLDB4NGYsMHhjYiwweDcyLDB4MTksCi0rCTB4MmEsMHg0YSww eDIwLDB4ZjUsMHg0MSwweGYzLDB4ZjIsMHg5MiwweDUzLDB4OTksMHhmMCwweGJhLAotKwkweGVj LDB4ZjksMHgyOSwweGFhLDB4ZmIsMHhmNywweDlkLDB4ZmUsMHg0MywweDMyLDB4MzksMHgzYiwK LSsJMHgzMiwweGNkLDB4MmUsMHgyZiwweGNmLDB4MjcsMHgyZiwweDMyLDB4YTYsMHgyNywweDQz LDB4NGEsCi0rCTB4MGQsMHhmMiwweDQyLDB4YjcsMHg1YiwweDQxLDB4NGQsMHhmMywweDcyLDB4 MTIsMHgxZSwweDUzLAotKwkweGE1LDB4NTMsMHhmMiwweDIyLDB4ZjgsMHgzNiwweGIwLDB4MDAs MHhmMCwweDE2LDB4NDgsMHg1YiwKLSsJMHg2YiwweGQwLDB4ODksMHg4NCwweDUxLDB4ODAsMHgx ZCwweGNkLDB4OGQsMHhlNiwweDRjLDB4ZDUsCi0rCTB4MzYsMHg1NiwweDk2LDB4ZmYsMHhjNSww eDMyLDB4ZDUsMHgyOCwweGM1LDB4MDYsMHg2MiwweDBhLAotKwkweDk0LDB4MmEsMHgwMywweDA1 LDB4MDQsMHg2ZCwweDhmLDB4MTgsMHg3NiwweDM0LDB4MWYsMHgxZSwKLSsJMHg1NywweDBiLDB4 YzMsMHg5NywweDRiLDB4YTYsMHhiOSwweGE0LDB4MzgsMHhlOSwweDcwLDB4MjMsCi0rCTB4MDIs MHhhMiwweGU2LDB4ZTYsMHg3YiwweGZkLDB4MDYsMHhkMywweDJiLDB4YzYsMHg3OSwweDk2LAot KwkweDIyLDB4NzEsMHhkNywweGI0LDB4MGMsMHhkNywweDJmLDB4MzgsMHg2ZSwweDY0LDB4ZTAs MHhkNywKLSsJMHhlZiwweDg2LDB4Y2EsMHg4YywweGE1LDB4ZDEsMHg0MiwweDI4LDB4ZGMsMHgy YSwweDRmLDB4MTYsCi0rCTB4ZTMsMHgxOCwweDk4LDB4ODYsMHhiNSwweDk5LDB4MDYsMHg3NCww eGY0LDB4MjAsMHgwZiwweDNhLAotKwkweDRjLDB4ZjYsMHg1YSwweDNmLDB4MGQsMHhkYiwweGEx LDB4ZmEsMHg2NywweDJkLDB4ZmYsMHgyZiwKLSsJMHg1ZSwweDE0LDB4M2QsMHgxMCwweGU0LDB4 ZTksMHg3YSwweGU4LDB4NGYsMHg2ZCwweGEwLDB4OTUsCi0rCTB4MzUsMHhkNSwweGI5LDB4ZGYs MHgyNSwweDkxLDB4ODEsMHhhNywweDliLDB4NjMsMHhiMCwweDY5LAotKwkweGU5LDB4NDksMHg5 NywweDJiLDB4MDIsMHhiYSwweDM2LDB4YjMsMHg1OCwweDZhLDB4YWIsMHg3ZSwKLSsJMHg0NSww eGYzLDB4MjIsMHhmOCwweDJlLDB4NGUsMHg4NSwweGNhLDB4M2EsMHhiOCwweDU1LDB4OTEsCi0r CTB4YjMsMHhjMiwweGE5LDB4NjYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGRzYV90ZXN0XzIwNDhfcHViX2tleVtdID0gewotKwkweDI0LDB4NTIsMHhmMywweGNjLDB4YmUs MHg5ZSwweGQ1LDB4Y2EsMHg3ZCwweGM3LDB4NGMsMHg2MCwKLSsJMHgyYiwweDk5LDB4MjIsMHg2 ZSwweDhmLDB4MmYsMHhhYiwweDM4LDB4ZTcsMHhkNywweGRkLDB4ZmIsCi0rCTB4NzUsMHg1Myww eDliLDB4MTcsMHgxNSwweDVlLDB4OWYsMHhjZiwweGQxLDB4YWIsMHhhNSwweDY0LAotKwkweGVi LDB4ODUsMHgzNSwweGQ4LDB4MTIsMHhjOSwweGMyLDB4ZGMsMHhmOSwweDcyLDB4ODQsMHg0NCwK LSsJMHgxYiwweGM0LDB4ODIsMHgyNCwweDM2LDB4MjQsMHhjNywweGY0LDB4NTcsMHg1OCwweDBj LDB4MWMsCi0rCTB4MzgsMHhhNSwweDdjLDB4NDYsMHhjNCwweDU3LDB4MzksMHgyNCwweDcwLDB4 ZWQsMHhiNSwweDJjLAotKwkweGI1LDB4YTYsMHhlMCwweDNmLDB4ZTYsMHgyOCwweDdiLDB4YjYs MHhmNCwweDlhLDB4NDIsMHhhMiwKLSsJMHgwNiwweDVhLDB4MDUsMHg0ZiwweDAzLDB4MDgsMHgz OSwweGRmLDB4MWYsMHhkMywweDE0LDB4OWMsCi0rCTB4NGMsMHhhMCwweDUzLDB4MWQsMHhkOCww eGNhLDB4OGEsMHhhYSwweDljLDB4YzcsMHgzMywweDcxLAotKwkweDkzLDB4MzgsMHg3MywweDQ4 LDB4MzMsMHg2MSwweDE4LDB4MjIsMHg0NSwweDQ1LDB4ZTgsMHg4YywKLSsJMHg4MCwweGZmLDB4 ZDgsMHg3NiwweDVkLDB4NzQsMHgzNiwweDAzLDB4MzMsMHhjYywweGFiLDB4OTksCi0rCTB4NzIs MHg3NywweDliLDB4NjUsMHgyNSwweGE2LDB4NWIsMHhkZCwweDBkLDB4MTAsMHhjNiwweDc1LAot KwkweGMxLDB4MDksMHhiYiwweGQzLDB4ZTUsMHhiZSwweDRkLDB4NzIsMHhlZiwweDZlLDB4YmEs MHg2ZSwKLSsJMHg0MywweDhkLDB4NTIsMHgyNiwweDIzLDB4N2QsMHhiOCwweDg4LDB4MzcsMHg5 YywweDVmLDB4Y2MsCi0rCTB4NDcsMHhhMywweDg0LDB4N2YsMHhmNiwweDM3LDB4MTEsMHhiYSww eGVkLDB4NmQsMHgwMywweGFmLAotKwkweGU4LDB4MWUsMHg2OSwweDRhLDB4NDEsMHgzYiwweDY4 LDB4MGIsMHhkMywweDhhLDB4YjQsMHg5MCwKLSsJMHgzZiwweDgzLDB4NzAsMHhhNywweDA3LDB4 ZWYsMHg1NSwweDFkLDB4NDksMHg0MSwweDAyLDB4NmQsCi0rCTB4OTUsMHg3OSwweGQ2LDB4OTEs MHhkZSwweDhlLDB4ZGEsMHhhMSwweDYxLDB4MDUsMHhlYiwweDlkLAotKwkweGJhLDB4M2MsMHgy ZiwweDRjLDB4MWIsMHhlYywweDUwLDB4ODIsMHg3NSwweGFhLDB4MDIsMHgwNywKLSsJMHhlMiww eDUxLDB4YjUsMHhlYywweGNiLDB4MjgsMHg2YSwweDRiLDB4MDEsMHhkNCwweDQ5LDB4ZDMsCi0r CTB4MGEsMHhjYiwweDY3LDB4MzcsMHgxNywweGEwLDB4ZDIsMHhmYiwweDNiLDB4NTAsMHhjOCww eDkzLAotKwkweGY3LDB4ZGEsMHhiMSwweDRmCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3ByaXZfa2V5W10gPSB7Ci0rCTB4MGMsMHg0YiwweDMwLDB4 ODksMHhkMSwweGI4LDB4NjIsMHhjYiwweDNjLDB4NDMsMHg2NCwweDkxLAotKwkweGYwLDB4OTEs MHg1NCwweDcwLDB4YzUsMHgyNywweDk2LDB4ZTMsMHhhYywweGJlLDB4ZTgsMHgwMCwKLSsJMHhl YywweDU1LDB4ZjYsMHhjYwotK307Ci0rCi0rc3RhdGljIGludCBjb3JydXB0X2RzYTsKLSsKLSt2 b2lkIEZJUFNfY29ycnVwdF9kc2EoKQotKyAgICB7Ci0rICAgIGNvcnJ1cHRfZHNhID0gMTsKLSsg ICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCi0rCXsKLSsJRFNBICpkc2EgPSBOVUxM OwotKwlFVlBfUEtFWSAqcGsgPSBOVUxMOwotKwlpbnQgcmV0ID0gMDsKLSsKLSsJZHNhID0gRFNB X25ldygpOwotKwotKwlpZihkc2EgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlmaXBzX2xv YWRfa2V5X2NvbXBvbmVudChkc2EsIHAsIGRzYV90ZXN0XzIwNDgpOwotKwlmaXBzX2xvYWRfa2V5 X2NvbXBvbmVudChkc2EsIHEsIGRzYV90ZXN0XzIwNDgpOwotKwlmaXBzX2xvYWRfa2V5X2NvbXBv bmVudChkc2EsIGcsIGRzYV90ZXN0XzIwNDgpOwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChk c2EsIHB1Yl9rZXksIGRzYV90ZXN0XzIwNDgpOwotKwlmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChk c2EsIHByaXZfa2V5LCBkc2FfdGVzdF8yMDQ4KTsKLSsKLSsJaWYgKGNvcnJ1cHRfZHNhKQotKwkJ Qk5fc2V0X2JpdChkc2EtPnB1Yl9rZXksIDIwNDcpOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25l dygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX2Fzc2lnbl9EU0EocGss IGRzYSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBOVUxMLCAwLAot KwkJCQkJTlVMTCwgMCwgRVZQX3NoYTI1NigpLCAwLAotKwkJCQkJIkRTQSBTSEEyNTYiKSkKLSsJ CWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZ X2ZyZWUocGspOwotKwllbHNlIGlmIChkc2EpCi0rCQlEU0FfZnJlZShkc2EpOwotKwlyZXR1cm4g cmV0OwotKwl9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNf ZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlw cwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NjI5NDkxNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NjI5NDkx NSArMDEwMAotQEAgLTAsMCArMSwxOTEgQEAKLSsvKiBmaXBlL2V2cC9maXBzX2VuYy5jICovCi0r LyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20p Ci0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBT U0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNv ZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29u Zm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg Zm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhl IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24s IGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVz dCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRo IHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1z Ci0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMg c3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJl IHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmlj IFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2Yg dGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZv cm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9j dW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2Uu Ci0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5n IChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNh biBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVp bmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91 IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJl b2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5 b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBg YEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsg KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICog VGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZh aWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUg Y2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5k IHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0 aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2NvbnN0IEVW UF9DSVBIRVIgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpCi0rCXsKLSsJc3dpdGNoIChu aWQpCi0rCQl7Ci0rCQljYXNlIE5JRF9hZXNfMTI4X2NiYzoKLSsJCXJldHVybiBFVlBfYWVzXzEy OF9jYmMoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2NtOgotKwkJcmV0dXJuIEVWUF9hZXNf MTI4X2NjbSgpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9jZmIxOgotKwkJcmV0dXJuIEVWUF9h ZXNfMTI4X2NmYjEoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY2ZiMTI4OgotKwkJcmV0dXJu IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9jZmI4OgotKwkJ cmV0dXJuIEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhfY3RyOgot KwkJcmV0dXJuIEVWUF9hZXNfMTI4X2N0cigpOwotKwotKwkJY2FzZSBOSURfYWVzXzEyOF9lY2I6 Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfZWNiKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTI4X2dj bToKLSsJCXJldHVybiBFVlBfYWVzXzEyOF9nY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xMjhf b2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTI4X29mYigpOwotKwotKwkJY2FzZSBOSURfYWVz XzEyOF94dHM6Ci0rCQlyZXR1cm4gRVZQX2Flc18xMjhfeHRzKCk7Ci0rCi0rCQljYXNlIE5JRF9h ZXNfMTkyX2NiYzoKLSsJCXJldHVybiBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsKLSsJCWNhc2UgTklE X2Flc18xOTJfY2NtOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NjbSgpOwotKwotKwkJY2FzZSBO SURfYWVzXzE5Ml9jZmIxOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsKLSsJCWNh c2UgTklEX2Flc18xOTJfY2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEyOCgpOwot KwotKwkJY2FzZSBOSURfYWVzXzE5Ml9jZmI4OgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjgo KTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfY3RyOgotKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2N0 cigpOwotKwotKwkJY2FzZSBOSURfYWVzXzE5Ml9lY2I6Ci0rCQlyZXR1cm4gRVZQX2Flc18xOTJf ZWNiKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMTkyX2djbToKLSsJCXJldHVybiBFVlBfYWVzXzE5 Ml9nY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18xOTJfb2ZiMTI4OgotKwkJcmV0dXJuIEVWUF9h ZXNfMTkyX29mYigpOwotKwotKwkJY2FzZSBOSURfYWVzXzI1Nl9jYmM6Ci0rCQlyZXR1cm4gRVZQ X2Flc18yNTZfY2JjKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NjbToKLSsJCXJldHVybiBF VlBfYWVzXzI1Nl9jY20oKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY2ZiMToKLSsJCXJldHVy biBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2X2NmYjEyODoKLSsJ CXJldHVybiBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18yNTZfY2Zi ODoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jZmI4KCk7Ci0rCi0rCQljYXNlIE5JRF9hZXNfMjU2 X2N0cjoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9jdHIoKTsKLSsKLSsJCWNhc2UgTklEX2Flc18y NTZfZWNiOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2VjYigpOwotKwotKwkJY2FzZSBOSURfYWVz XzI1Nl9nY206Ci0rCQlyZXR1cm4gRVZQX2Flc18yNTZfZ2NtKCk7Ci0rCi0rCQljYXNlIE5JRF9h ZXNfMjU2X29mYjEyODoKLSsJCXJldHVybiBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsKLSsJCWNhc2Ug TklEX2Flc18yNTZfeHRzOgotKwkJcmV0dXJuIEVWUF9hZXNfMjU2X3h0cygpOwotKwotKwkJY2Fz ZSBOSURfZGVzX2VkZV9lY2I6Ci0rCQlyZXR1cm4gRVZQX2Rlc19lZGUoKTsKLSsKLSsJCWNhc2Ug TklEX2Rlc19lZGUzX2VjYjoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTMoKTsKLSsKLSsJCWNhc2Ug TklEX2Rlc19lZGUzX2NiYzoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2JjKCk7Ci0rCi0rCQlj YXNlIE5JRF9kZXNfZWRlM19jZmIxOgotKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmIxKCk7Ci0r Ci0rCQljYXNlIE5JRF9kZXNfZWRlM19jZmI2NDoKLSsJCXJldHVybiBFVlBfZGVzX2VkZTNfY2Zi NjQoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjg6Ci0rCQlyZXR1cm4gRVZQX2Rlc19l ZGUzX2NmYjgoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGUzX29mYjY0OgotKwkJcmV0dXJuIEVW UF9kZXNfZWRlM19vZmIoKTsKLSsKLSsJCWNhc2UgTklEX2Rlc19lZGVfY2JjOgotKwkJcmV0dXJu IEVWUF9kZXNfZWRlX2NiYygpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZV9jZmI2NDoKLSsJCXJl dHVybiBFVlBfZGVzX2VkZV9jZmI2NCgpOwotKwotKwkJY2FzZSBOSURfZGVzX2VkZV9vZmI2NDoK LSsJCXJldHVybiBFVlBfZGVzX2VkZV9vZmIoKTsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4g TlVMTDsKLSsKLSsJCX0KLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHMu aAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMJMjAxMi0w Mi0yOSAxMDozMzowMi43OTcyOTQ5MjMgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2Ny eXB0by9maXBzL2ZpcHMuaAkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NzI5NDkyMyArMDEwMAotQEAg LTAsMCArMSwyNzkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNp bmNsdWRlIDxzdGRhcmcuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNlcnJvciBGSVBT IGlzIGRpc2FibGVkLgotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaWZk ZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0rc3RydWN0IGRzYV9z dDsKLStzdHJ1Y3QgcnNhX3N0OwotK3N0cnVjdCBldnBfcGtleV9zdDsKLStzdHJ1Y3QgZW52X21k X3N0OwotK3N0cnVjdCBlbnZfbWRfY3R4X3N0OwotK3N0cnVjdCBldnBfY2lwaGVyX3N0OwotK3N0 cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKLStzdHJ1Y3QgZGhfbWV0aG9kOwotK3N0cnVjdCBDTUFD X0NUWF9zdDsKLStzdHJ1Y3QgaG1hY19jdHhfc3Q7Ci0rCi0raW50IEZJUFNfbW9kdWxlX21vZGVf c2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCk7Ci0raW50IEZJUFNfbW9kdWxlX21vZGUo dm9pZCk7Ci0rY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpOwotK2ludCBGSVBTX3Nl bGZ0ZXN0KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKLSt2b2lkIEZJ UFNfY29ycnVwdF9zaGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Ci0r aW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9hZXModm9p ZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2NjbSh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVz dF9hZXNfZ2NtKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHModm9pZCk7Ci0raW50 IEZJUFNfc2VsZnRlc3RfYWVzKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsK LStpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKHZv aWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7Ci0raW50IEZJUFNfc2Vs ZnRlc3RfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKLSt2b2lkIEZJ UFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lk KTsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Ci0rdm9pZCBGSVBTX3JuZ19zdGljayh2 b2lkKTsKLSt2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQgb25vZmYpOwotK3ZvaWQgRklQU19kcmJn X3N0aWNrKGludCBvbm9mZik7Ci0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpOwotK2ludCBG SVBTX3NlbGZ0ZXN0X3g5MzEodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lkKTsK LStpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdf YWxsKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2NtYWModm9pZCk7Ci0rCi0rdm9pZCBGSVBT X2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cik7Ci0r Ci0rI2RlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBf X0xJTkVfXywgXAotKwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVy cm9yIGlnbm9yZWQiKTsKLSsKLStpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHN0cnVjdCBl dnBfcGtleV9zdCAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNs ZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAot KwkJCWNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdz LAotKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKLSsKLStpbnQgZmlwc19jaXBoZXJfdGVzdChz dHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKLSsJCQljb25zdCBzdHJ1Y3QgZXZwX2NpcGhl cl9zdCAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsJCQljb25zdCB1 bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCi0r CQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKLSsJCQlpbnQgbGVuKTsKLSsKLSt2 b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7Ci0rCi0rY29uc3Qgc3RydWN0IGVudl9t ZF9zdCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCk7Ci0rCi0rY29uc3Qgc3RydWN0IGV2 cF9jaXBoZXJfc3QgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOwotKwotKwotKy8qIEJF R0lOIEVSUk9SIENPREVTICovCi0rLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5l cmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKLSsgKiBtYWRlIGFmdGVy IHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1 bi4KLSsgKi8KLSt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKLSsKLSsvKiBFcnJv ciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLwotKwotKy8qIEZ1bmN0aW9uIGNvZGVz LiAqLwotKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwMAotKyNkZWZp bmUgRklQU19GX0RIX0lOSVQJCQkJCSAxNDgKLSsjZGVmaW5lIEZJUFNfRl9EUkJHX1JFU0VFRAkJ CQkgMTYyCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTAxCi0rI2Rl ZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yCQkJIDEwNwotKyNkZWZpbmUgRklQU19G X0RTQV9ET19TSUdOCQkJCSAxMDIKLSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZCQkJCSAx MDMKLSsjZGVmaW5lIEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZCQkJCSAxNjMKLSsjZGVmaW5lIEZJ UFNfRl9FQ0RTQV9ET19TSUdOCQkJCSAxNjQKLSsjZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19WRVJJ RlkJCQkJIDE2NQotKyNkZWZpbmUgRklQU19GX0VDX0tFWV9HRU5FUkFURV9LRVkJCQkgMTY2Ci0r I2RlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkgMTI0Ci0rI2RlZmluZSBGSVBTX0Zf RVZQX0RJR0VTVElOSVRfRVgJCQkgMTI1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJ CQkJIDEwNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBX1BSTkcJCQkgMTUxCi0rI2Rl ZmluZSBGSVBTX0ZfRklQU19DSEVDS19FQwkJCQkgMTQyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19D SEVDS19FQ19QUk5HCQkJIDE1MgotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJ TkdFUlBSSU5UCQkgMTA1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EJCQkJIDEwNgot KyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBX1BSTkcJCQkgMTUwCi0rI2RlZmluZSBGSVBT X0ZfRklQU19DSVBIRVIJCQkJIDE2MAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSSU5JVAkJ CQkgMTQzCi0rI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJfQ1RYX0NUUkwJCQkgMTYxCi0rI2Rl ZmluZSBGSVBTX0ZfRklQU19ESUdFU1RGSU5BTAkJCQkgMTU4Ci0rI2RlZmluZSBGSVBTX0ZfRklQ U19ESUdFU1RJTklUCQkJCSAxMjgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVFVQREFURQkJ CSAxNTkKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQllURVMJCQkJIDEzMQotKyNkZWZpbmUg RklQU19GX0ZJUFNfRFJCR19DSEVDSwkJCQkgMTQ2Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJH X0NQUk5HX1RFU1QJCQkgMTMyCi0rI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL CQkJIDEzNgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURQkJCSAxMzQKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5JVAkJCQkgMTM1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19E UkJHX0lOU1RBTlRJQVRFCQkJIDEzOAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19ORVcJCQkJ IDEzOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19SRVNFRUQJCQkJIDE0MAotKyNkZWZpbmUg RklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FUCQkJIDE0MQotKyNkZWZpbmUgRklQU19GX0ZJUFNf RFNBX0NIRUNLCQkvKiB1bnVzZWQgKi8JIDEwNwotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1NJ R05fRElHRVNUCQkJIDE1NAotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1ZFUklGWV9ESUdFU1QJ CQkgMTU1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19HRVRfRU5UUk9QWQkJCQkgMTQ3Ci0rI2RlZmlu ZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJLyogdW51c2VkICovCSAxMDgKLSsjZGVmaW5lIEZJUFNf Rl9GSVBTX01PRFVMRV9NT0RFX1NFVAkJCSAxMDgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlf U0lHTkFUVVJFX1RFU1QJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0FERAkJCQkg MTM3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0JZVEVTCQkJCSAxMjIKLSsjZGVmaW5lIEZJ UFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTCQkJIDE2NwotKyNkZWZpbmUgRklQU19GX0ZJUFNf UkFORF9TRUVECQkJCSAxNjgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRAkJ CSAxMjYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTCQkJCSAxMjcKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX1JTQV9TSUdOX0RJR0VTVAkJCSAxNTYKLSsjZGVmaW5lIEZJUFNfRl9GSVBT X1JTQV9WRVJJRllfRElHRVNUCQkJIDE1NwotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf QUVTCQkJIDExMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTQkJCSAxNDUK LSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19HQ00JCQkgMTI5Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTCQkJIDE0NAotKyNkZWZpbmUgRklQU19GX0ZJUFNf U0VMRlRFU1RfQ01BQwkJCSAxMzAKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJ CSAxMTEKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKLSsjZGVmaW5l IEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBCQkJIDEzMwotKyNkZWZpbmUgRklQU19GX0ZJUFNf U0VMRlRFU1RfSE1BQwkJCSAxMTMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORwkv KiB1bnVzZWQgKi8JIDExNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMQkJCSAx MTUKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEJCQkgMTE0Ci0rI2RlZmluZSBG SVBTX0ZfRklQU19TRVRfUFJOR19LRVkJCQkgMTUzCi0rI2RlZmluZSBGSVBTX0ZfSEFTSF9GSU5B TAkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOCQkJIDExNgotKyNk ZWZpbmUgRklQU19GX1JTQV9FQVlfSU5JVAkJCQkgMTQ5Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VB WV9QUklWQVRFX0RFQ1JZUFQJCQkgMTE3Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRF X0VOQ1JZUFQJCQkgMTE4Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJ CSAxMTkKLSsjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUCQkJIDEyMAotKyNk ZWZpbmUgRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKLSsjZGVmaW5lIEZJ UFNfRl9TU0xFQVlfUkFORF9CWVRFUwkvKiB1bnVzZWQgKi8JIDEyMgotKwotKy8qIFJlYXNvbiBj b2Rlcy4gKi8KLSsjZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNU RUQJIDE1MAotKyNkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcJCSAxMjUK LSsjZGVmaW5lIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRAkJCSAxMzQKLSsjZGVmaW5lIEZJ UFNfUl9BVVRIRU5USUNBVElPTl9GQUlMVVJFCQkJIDE1MQotKyNkZWZpbmUgRklQU19SX0NBTk5P VF9SRUFEX0VYRQkJLyogdW51c2VkICovCSAxMDMKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVB RF9FWEVfRElHRVNUCS8qIHVudXNlZCAqLwkgMTA0Ci0rI2RlZmluZSBGSVBTX1JfQ09OVFJBRElD VElOR19FVklERU5DRQkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNF RAkJCSAxNTIKLSsjZGVmaW5lIEZJUFNfUl9EUkJHX1NUVUNLCQkJCSAxMDMKLSsjZGVmaW5lIEZJ UFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQJCQkgMTA0Ci0rI2RlZmluZSBGSVBTX1JfRU5U Uk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQJCSAxMDUKLSsjZGVmaW5lIEZJUFNfUl9FTlRS T1BZX1NPVVJDRV9TVFVDSwkJCSAxNDIKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTklUSUFMSVNJ TkdfRFJCRwkJCSAxMTUKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJ CQkgMTI3Ci0rI2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVU CSAxMjQKLSsjZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkJCQkgMTIyCi0r I2RlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRQkJCSAxNDAKLSsjZGVmaW5lIEZJ UFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENIICAgLyogdW51c2VkICovCSAxMDUKLSsjZGVm aW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAotKyNkZWZpbmUgRklQ U19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCi0rI2Rl ZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAx MTIKLSsjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCi0rI2RlZmlu ZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2Ci0rI2RlZmluZSBGSVBTX1JfRlVO Q1RJT05fRVJST1IJCQkJIDExNgotKyNkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SCQkJCSAx MzcKLSsjZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVECQkgMTE4Ci0rI2Rl ZmluZSBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IJCQkgMTE5Ci0rI2RlZmluZSBGSVBTX1JfSU5T VUZGSUNJRU5UX1NFQ1VSSVRZX1NUUkVOR1RICQkgMTIwCi0rI2RlZmluZSBGSVBTX1JfSU5URVJO QUxfRVJST1IJCQkJIDEyMQotKyNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAx MDkKLSsjZGVmaW5lIEZJUFNfUl9JTlZBTElEX1BBUkFNRVRFUlMJCQkgMTQ0Ci0rI2RlZmluZSBG SVBTX1JfSU5fRVJST1JfU1RBVEUJCQkJIDEyMwotKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hP UlQJCQkJIDEwOAotKyNkZWZpbmUgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQJCQkgMTQ5 Ci0rI2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDAKLSsjZGVmaW5lIEZJUFNf Ul9OT1BSX1RFU1QxX0ZBSUxVUkUJCQkgMTQ1Ci0rI2RlZmluZSBGSVBTX1JfTk9QUl9URVNUMl9G QUlMVVJFCQkJIDE0NgotKyNkZWZpbmUgRklQU19SX05PVF9JTlNUQU5USUFURUQJCQkJIDEyNgot KyNkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVECQkJIDEwNwotKyNkZWZpbmUgRklQ U19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVECQkgMTI4Ci0rI2RlZmluZSBGSVBT X1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORwkJIDEyOQotKyNkZWZpbmUgRklQU19S X1BSTkdfU1RSRU5HVEhfVE9PX0xPVwkJCSAxNDMKLSsjZGVmaW5lIEZJUFNfUl9QUl9URVNUMV9G QUlMVVJFCQkJCSAxNDcKLSsjZGVmaW5lIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFCQkJCSAxNDgK LSsjZGVmaW5lIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVECQkgMTMwCi0r I2RlZmluZSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkcJCSAxMzEKLSsjZGVmaW5l IEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUgkJCSAxMzIKLSsjZGVmaW5lIEZJUFNfUl9SRVNF RURfRVJST1IJCQkJIDEzMwotKyNkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCS8qIHVu dXNlZCAqLwkgMTE1Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJLyogdW51c2Vk ICovCSAxMTYKLSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQJCQkJIDEwMQotKyNkZWZp bmUgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUJCQkJIDEzNQotKyNkZWZpbmUgRklQU19SX1NUUkVO R1RIX0VSUk9SX1VOREVURUNURUQJCSAxMzYKLSsjZGVmaW5lIEZJUFNfUl9URVNUX0ZBSUxVUkUJ CQkJIDExNwotKyNkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IJCQkgMTQxCi0rI2Rl ZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SCQkgMTM4Ci0rI2RlZmluZSBG SVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFCQkJIDEzOQotKyNkZWZpbmUgRklQU19SX1VOU1VQ UE9SVEVEX1BMQVRGT1JNCQkJIDExMwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2Vu ZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2Zp cHNfaG1hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9m aXBzX2htYWNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Zmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NzI5NDkyMyAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0 ZXN0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTcyOTQ5MjMgKzAxMDAKLUBAIC0wLDAgKzEsMTM3 IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoK LSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rCWNvbnN0IEVWUF9N RCAqKCphbGcpKHZvaWQpOwotKwljb25zdCBjaGFyICprZXksICppdjsKLSsJdW5zaWduZWQgY2hh ciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOwotK30gSE1BQ19LQVQ7Ci0rCi0rc3RhdGljIGNvbnN0 IEhNQUNfS0FUIHZlY3RvcltdID0gewotKyAgICB7CUVWUF9zaGExLAotKwkvKiBmcm9tIGh0dHA6 Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAq LwotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDA5LDB4 MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4MTksCi0rCSAgMHg0ZiwweDgyLDB4YTQsMHg1 OCwweDMwLDB4NzMsMHg3ZCwweDVjLAotKwkgIDB4YzYsMHhjNywweDVkLDB4MjQgfQotKyAgICB9 LAotKyAgICB7CUVWUF9zaGEyMjQsCi0rCS8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3Zl Li4uICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4 ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4NTAsMHhmYiwKLSsJICAweDZlLDB4ZTYsMHhj ZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCi0rCSAgMHgwOCwweGYzLDB4MDcsMHg3NSwweDg3 LDB4YjgsMHhhZCwweDFiLAotKwkgIDB4OGMsMHg4ZCwweDEyLDB4YzcgfQotKyAgICB9LAotKyAg ICB7CUVWUF9zaGEyNTYsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIi LAotKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0MSwweGVhLDB4NDMsMHgwOSwKLSsJICAweGNh LDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4LDB4MzQsCi0rCSAgMHhmNywweDFmLDB4YmUs MHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAotKwkgIDB4MGQsMHhjMSwweDdlLDB4YWUsMHg2YSww eDM0LDB4NTEsMHhkOSB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTM4NCwKLSsJIjAxMjM0NTY3 ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHgwOCwweGJjLDB4YjAsMHhkYSww eDQ5LDB4MWUsMHg4NywweGFkLAotKwkgIDB4OWEsMHgxZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4 MGIsMHhmNiwKLSsJICAweGI3LDB4MTgsMHgwNiwweGE1LDB4NzcsMHhjZCwweDQ5LDB4MDQsCi0r CSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4NTEsMHg1MSwweDlmLAotKwkgIDB4ODUsMHg1 NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1MCwKLSsJICAweGE0LDB4NWYsMHgyOSwweGUz LDB4OTMsMHhmMCwweGU4LDB4N2YgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGE1MTIsCi0rCSIw MTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4ODAsMHg5ZCwweDQ0 LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKLSsJICAweDA1LDB4YmQsMHgwNCwweDEzLDB4MTYs MHhkYiwweDBmLDB4YWMsCi0rCSAgMHg0NCwweGQ1LDB4YTQsMHhkNSwweGQwLDB4ODksMHgyYiww eGQwLAotKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIsMHhjMCwweDkwLDB4NzcsMHg2OCwKLSsJICAw eGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSwweDJjLDB4MmYsCi0rCSAgMHgyMSwweGE1LDB4 YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAotKwkgIDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5 YiwweDUxLDB4ZjEsMHg0NSwKLSsJICAweGJkLDB4NGYsMHgyNSwweDI3LDB4NDIsMHg5OCwweDk5 LDB4MDUgfQotKyAgICB9LAotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfaG1hYygpCi0rICAg IHsKLSsgICAgaW50IG47Ci0rICAgIHVuc2lnbmVkIGludCAgICBvdXRsZW47Ci0rICAgIHVuc2ln bmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgY29uc3QgRVZQX01EICAgKm1k OwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsKLSsKLSsgICAgZm9yKG49MCx0PXZlY3Rvcjsgbjxz aXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBdKTsgbisrLHQrKykKLSsJewotKwltZCA9ICgq dC0+YWxnKSgpOwotKwlITUFDKG1kLHQtPmtleSxzdHJsZW4odC0+a2V5KSwKLSsJCShjb25zdCB1 bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQtPml2KSwKLSsJCW91dCwmb3V0bGVuKTsKLSsK LSsJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRsZW4pKQotKwkgICAgewotKwkgICAgRklQU2Vy cihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkg ICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgu ZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCi0tLS0gb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzCTIwMTItMDItMjkg MTA6MzM6MDIuNzk3Mjk0OTIzICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v Zmlwcy9maXBzX2xvY2wuaAkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NzI5NDkyMyArMDEwMAotQEAg LTAsMCArMSw3MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlm Ci0rCi0rI2RlZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFCTMyCi0rI2RlZmluZSBmaXBz X2xvYWRfa2V5X2NvbXBvbmVudChrZXksIGNvbXAsIHByZSkgXAotKwlrZXktPmNvbXAgPSBCTl9i aW4yYm4ocHJlIyNfIyNjb21wLCBzaXplb2YocHJlIyNfIyNjb21wKSwga2V5LT5jb21wKTsgXAot KwlpZiAoIWtleS0+Y29tcCkgXAotKwkJZ290byBlcnIKLSsKLSsjZGVmaW5lIGZpcHNfcG9zdF9z dGFydGVkKGlkLCBzdWJpZCwgZXgpIDEKLSsjZGVmaW5lIGZpcHNfcG9zdF9zdWNjZXNzKGlkLCBz dWJpZCwgZXgpIDEKLSsjZGVmaW5lIGZpcHNfcG9zdF9mYWlsZWQoaWQsIHN1YmlkLCBleCkgMQot KyNkZWZpbmUgZmlwc19wb3N0X2NvcnJ1cHQoaWQsIHN1YmlkLCBleCkgMQotKyNkZWZpbmUgZmlw c19wb3N0X3N0YXR1cygpIDEKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX21k LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfbWQuYwotLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZpcHMJMjAxMi0wMi0yOSAx MDozMzowMi43OTcyOTQ5MjMgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfbWQuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5NzI5NDkyMyArMDEwMAotQEAgLTAs MCArMSwxNDUgQEAKLSsvKiBmaXBzL2V2cC9maXBzX21kLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMp IDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlv biB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRo ZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2Nh cGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBh bmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBs eSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwg UlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4g IFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRp b24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhh dCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsg KiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmln aHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJ ZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJl IGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhl IGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwg bWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxp bmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQu Y29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlm IHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3Qg Y3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2lu ZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAg ICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUg YW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsg KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF Ci0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQg ZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBv cgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0 aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3Ro ZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExp Y2VuY2UuXQotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAxOTk4LTIw MDEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoK LSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVu IGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsvKiBNaW5pbWFsIHN0YW5kYWxvbmUgRklQUyB2ZXJzaW9u cyBvZiBEaWdlc3Qgb3BlcmF0aW9ucyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0r Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL29iamVjdHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rY29uc3QgRVZQ X01EICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKQotKwl7Ci0rCXN3aXRjaCAobmlkKQot KwkJewotKwkJY2FzZSBOSURfc2hhMToKLSsJCXJldHVybiBFVlBfc2hhMSgpOwotKwotKwkJY2Fz ZSBOSURfc2hhMjI0OgotKwkJcmV0dXJuIEVWUF9zaGEyMjQoKTsKLSsKLSsJCWNhc2UgTklEX3No YTI1NjoKLSsJCXJldHVybiBFVlBfc2hhMjU2KCk7Ci0rCi0rCQljYXNlIE5JRF9zaGEzODQ6Ci0r CQlyZXR1cm4gRVZQX3NoYTM4NCgpOwotKwotKwkJY2FzZSBOSURfc2hhNTEyOgotKwkJcmV0dXJu IEVWUF9zaGE1MTIoKTsKLSsKLSsJCWRlZmF1bHQ6Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsJ fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMKLS0tLSBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMJMjAxMi0wMi0yOSAx MDozMzowMi43OTcyOTQ5MjMgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfcG9zdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuNzk3Mjk0OTIzICswMTAwCi1AQCAt MCwwICsxLDIwNSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNkZWZpbmUgT1BF TlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5o PgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBQb3dlciBvbiBzZWxmIHRlc3QgKFBP U1QpIHN1cHBvcnQgZnVuY3Rpb25zICovCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsvKiBSdW4gYWxsIHNlbGZ0ZXN0cyAqLwotK2lu dCBGSVBTX3NlbGZ0ZXN0KHZvaWQpCi0rCXsKLSsJaW50IHJ2ID0gMTsKLSsJaWYgKCFGSVBTX3Nl bGZ0ZXN0X2RyYmcoKSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X3g5MzEoKSkK LSsJCXJ2ID0gMDsKLSsgICAgCWlmICghRklQU19zZWxmdGVzdF9zaGExKCkpCi0rCQlydiA9IDA7 Ci0rICAgIAlpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMigpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJ UFNfc2VsZnRlc3RfaG1hYygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfY21h YygpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzKCkpCi0rCQlydiA9IDA7 Ci0rCWlmICghRklQU19zZWxmdGVzdF9hZXNfY2NtKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQ U19zZWxmdGVzdF9hZXNfZ2NtKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9h ZXNfeHRzKCkpCi0rCQlydiA9IDA7Ci0rCWlmICghRklQU19zZWxmdGVzdF9kZXMoKSkKLSsJCXJ2 ID0gMDsKLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X3JzYSgpKQotKwkJcnYgPSAwOwotKwlpZiAoIUZJ UFNfc2VsZnRlc3RfZHNhKCkpCi0rCQlydiA9IDA7Ci0rCXJldHVybiBydjsKLSsJfQotKwotKy8q IEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZpZXMg dGhlIGRhdGEKLSsgKiBzdXBwbGllZCBpbiB0YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQg c2V0dGluZyBvcHRpb24gZGlnZXN0Ci0rICogZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0JyBw YXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAotKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0aGUg c2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24gYW5zd2VyIHRlc3QKLSsgKiBUaGUgc3RyaW5n ICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2FzZQot KyAqIG9mIGZhaWx1cmUuIElmICJwa2V5IiBpcyBOVUxMIGp1c3QgcGVyZm9ybSBhIG1lc3NhZ2Ug ZGlnZXN0IGNoZWNrLgotKyAqLwotKwotK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQ X1BLRVkgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAot KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKLSsJCQlj b25zdCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAotKwkJCWNvbnN0IGNo YXIgKmZhaWxfc3RyKQotKwl7CQotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBzaWd0 bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKLSsJdW5zaWduZWQgaW50IHNpZ2xlbjsKLSsJRVZQX01E X0NUWCBtY3R4OwotKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKwotKwlpZiAoZGlnZXN0ID09 IE5VTEwpCi0rCQlkaWdlc3QgPSBFVlBfc2hhMjU2KCk7Ci0rCi0rCWlmICgocGtleS0+dHlwZSA9 PSBFVlBfUEtFWV9SU0EpCi0rCQkmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2EpID4gc2l6ZW9m KHNpZ3RtcCkpKQotKwkJewotKwkJc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocGtleS0+ cGtleS5yc2EpKTsKLSsJCWlmICghc2lnKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBT X1BLRVlfU0lHTkFUVVJFX1RFU1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKwkJCXJldHVybiAw OwotKwkJCX0KLSsJCX0KLSsKLSsJaWYgKHRic2xlbiA9PSAtMSkKLSsJCXRic2xlbiA9IHN0cmxl bigoY2hhciAqKXRicyk7Ci0rCi0rCWlmIChtZF9mbGFncykKLSsJCUVWUF9NRF9DVFhfc2V0X2Zs YWdzKCZtY3R4LCBtZF9mbGFncyk7Ci0rCi0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBk aWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0 eCwgdGJzLCB0YnNsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnbkZpbmFsKCZt Y3R4LCBzaWcsICZzaWdsZW4sIHBrZXkpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKGthdCAm JiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChrYXQsIHNpZywga2F0bGVuKSkpCi0rCQln b3RvIGVycm9yOwotKwotKwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5V TEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCB0YnMs IHRic2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlyZXQgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgs IHNpZywgc2lnbGVuLCBwa2V5KTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChzaWcgIT0gc2lndG1wKQot KwkJT1BFTlNTTF9mcmVlKHNpZyk7Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCWlm IChyZXQgIT0gMSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVf VEVTVCxGSVBTX1JfVEVTVF9GQUlMVVJFKTsKLSsJCWlmIChmYWlsX3N0cikKLSsJCQlFUlJfYWRk X2Vycm9yX2RhdGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CXJldHVybiAxOwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0 IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJlc3VsdAotKyAqIGFnYWluc3Qga25vd24g YW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxhaW50ZXh0LgotKyAq LwotKwotK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVW UF9DSVBIRVIgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkJY29u c3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0 LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJaW50IGxlbikKLSsJ ewotKwl1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKwl1 bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKwotKwlPUEVO U1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCW1lbXNldChw bHRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCW1lbXNldChjaXRtcCwgMCwg RklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCi0rCWlmIChFVlBfQ2lwaGVySW5pdF9leChj dHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlpZiAo RVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbikgPD0gMCkKLSsJCXJldHVybiAw OwotKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0r CWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMCkgPD0g MCkKLSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVu KSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgbGVu KSkKLSsJCXJldHVybiAwOwotKwlyZXR1cm4gMTsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4w LjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTgyOTQ5 MzEgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5j CTIwMTItMDItMjkgMTA6MzM6MDIuNzk4Mjk0OTMxICswMTAwCi1AQCAtMCwwICsxLDQ1NyBAQAot Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgot KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1 dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKy8qCi0rICogVGhpcyBpcyBhIEZJUFMgYXBw cm92ZWQgQUVTIFBSTkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsjaW5jbHVk ZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKy8qIElmIHdlIGRv bid0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24ndAot KyAgIGJlIGRlZmluZWQgYW5kIGdldHRpbWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdpdGgg c3RyaWN0IGNvbXBpbGVycwotKyAgIGxpa2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLwotKyNp Zm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAotKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRF TkRFRCAxCi0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpZiAhKGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpIHx8 IGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykpCi0rIyBpbmNsdWRlIDxzeXMvdGltZS5oPgot KyNlbmRpZgotKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rIyBpbmNsdWRlIDx0 aW1lLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpZm5kZWYgT1BFTlNTTF9T WVNfV0lOMzIKLSsjIGlmZGVmIE9QRU5TU0xfVU5JU1RECi0rIyAgaW5jbHVkZSBPUEVOU1NMX1VO SVNURAotKyMgZWxzZQotKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgotKyMgZW5kaWYKLSsjZW5kaWYK LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNs dWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rdm9pZCAqT1BF TlNTTF9zdGRlcnIodm9pZCk7Ci0rCi0rI2RlZmluZSBBRVNfQkxPQ0tfTEVOR1RICTE2Ci0rCi0r Ci0rLyogQUVTIEZJUFMgUFJORyBpbXBsZW1lbnRhdGlvbiAqLwotKwotK3R5cGVkZWYgc3RydWN0 IAotKwl7Ci0rCWludCBzZWVkZWQ7Ci0rCWludCBrZXllZDsKLSsJaW50IHRlc3RfbW9kZTsKLSsJ aW50IHNlY29uZDsKLSsJaW50IGVycm9yOwotKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7Ci0rCUFF U19LRVkga3M7Ci0rCWludCB2cG9zOwotKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5IGlm IGl0IGVxdWFscyBzZWVkIGxlbmd0aCAqLwotKwl1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVTX0JM T0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5z aWduZWQgY2hhciBEVFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBsYXN0W0FF U19CTE9DS19MRU5HVEhdOwotKwl9IEZJUFNfUFJOR19DVFg7Ci0rCi0rc3RhdGljIEZJUFNfUFJO R19DVFggc2N0eDsKLSsKLStzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKLSsKLSt2b2lk IEZJUFNfeDkzMV9zdGljayhpbnQgb25vZmYpCi0rCXsKLSsJZmlwc19wcm5nX2ZhaWwgPSBvbm9m ZjsKLSsJfQotKwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKLSsJewotKwlGSVBTX3g5MzFf c3RpY2soMSk7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBT X1BSTkdfQ1RYICpjdHgpCi0rCXsKLSsJY3R4LT5zZWVkZWQgPSAwOwotKwljdHgtPmtleWVkID0g MDsKLSsJY3R4LT50ZXN0X21vZGUgPSAwOwotKwljdHgtPmNvdW50ZXIgPSAwOwotKwljdHgtPnNl Y29uZCA9IDA7Ci0rCWN0eC0+ZXJyb3IgPSAwOwotKwljdHgtPnZwb3MgPSAwOwotKwlPUEVOU1NM X2NsZWFuc2UoY3R4LT5WLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJT1BFTlNTTF9jbGVhbnNlKCZj dHgtPmtzLCBzaXplb2YoQUVTX0tFWSkpOwotKwl9Ci0rCQotKwotK3N0YXRpYyBpbnQgZmlwc19z ZXRfcHJuZ19rZXkoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKLSsJewotKwlpZiAoRklQU19zZWxmdGVzdF9mYWls ZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZLCBGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoa2V5bGVuICE9IDE2 ICYmIGtleWxlbiAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpCi0rCQl7Ci0rCQkvKiBlcnJvcjogaW52 YWxpZCBrZXkgc2l6ZSAqLwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUFFU19zZXRfZW5jcnlwdF9r ZXkoa2V5LCBrZXlsZW4gPDwgMywgJmN0eC0+a3MpOwotKwlpZiAoa2V5bGVuID09IDE2KQotKwkJ ewotKwkJbWVtY3B5KGN0eC0+dG1wX2tleSwga2V5LCAxNik7Ci0rCQljdHgtPmtleWVkID0gMjsK LSsJCX0KLSsJZWxzZQotKwkJY3R4LT5rZXllZCA9IDE7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJ Y3R4LT5zZWNvbmQgPSAwOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19z ZXRfcHJuZ19zZWVkKEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFy ICpzZWVkLCB1bnNpZ25lZCBpbnQgc2VlZGxlbikKLSsJewotKwl1bnNpZ25lZCBpbnQgaTsKLSsJ aWYgKCFjdHgtPmtleWVkKQotKwkJcmV0dXJuIDA7Ci0rCS8qIEluIHRlc3QgbW9kZSBzZWVkIGlz IGp1c3Qgc3VwcGxpZWQgZGF0YSAqLwotKwlpZiAoY3R4LT50ZXN0X21vZGUpCi0rCQl7Ci0rCQlp ZiAoc2VlZGxlbiAhPSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXJldHVybiAwOwotKwkJbWVtY3B5 KGN0eC0+Viwgc2VlZCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQljdHgtPnNlZWRlZCA9IDE7Ci0r CQlyZXR1cm4gMTsKLSsJCX0KLSsJLyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRh dGEgd2l0aCBleGlzdGluZyBzZWVkICovCi0rCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKysp Ci0rCQl7Ci0rCQljdHgtPlZbY3R4LT52cG9zKytdIF49IHNlZWRbaV07Ci0rCQlpZiAoY3R4LT52 cG9zID09IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCWN0eC0+dnBvcyA9IDA7Ci0rCQkJ LyogU3BlY2lhbCBjYXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCi0rIAkJ CSAqIGJsb2NrIHNpemUgY2hlY2sga2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KLSsgCQkJICov IAotKwkJCWlmIChjdHgtPmtleWVkID09IDIpCi0rCQkJCXsKLSsJCQkJaWYgKCFtZW1jbXAoY3R4 LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkKLSsJCQkJCXsKLSsJCQkJCVJBTkRlcnIoUkFORF9GX0ZJ UFNfU0VUX1BSTkdfU0VFRCwKLSsJCQkJCQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENI X0tFWSk7Ci0rCQkJCQlyZXR1cm4gMDsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9jbGVhbnNlKGN0 eC0+dG1wX2tleSwgMTYpOwotKwkJCQljdHgtPmtleWVkID0gMTsKLSsJCQkJfQotKwkJCWN0eC0+ c2VlZGVkID0gMTsKLSsJCQl9Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGlu dCBmaXBzX3NldF90ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqY3R4KQotKwl7Ci0rCWlmIChjdHgt PmtleWVkKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLFJBTkRf Ul9QUk5HX0tFWUVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwljdHgtPnRlc3RfbW9kZSA9IDE7 Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IEZJUFNfeDkzMV90ZXN0X21vZGUodm9pZCkKLSsJ ewotKwlyZXR1cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKLSsJfQotKwotK2ludCBGSVBT X3JhbmRfdGVzdF9tb2RlKHZvaWQpCi0rCXsKLSsJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgm c2N0eCk7Ci0rCX0KLSsKLSsKLStpbnQgRklQU194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpk dCkKLSsJewotKwlpZiAoIXNjdHgudGVzdF9tb2RlKQotKwkJewotKwkJUkFORGVycihSQU5EX0Zf RklQU19YOTMxX1NFVF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsJbWVtY3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJcmV0dXJu IDE7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKLSsJ ewotKwlpZiAoIXNjdHgudGVzdF9tb2RlKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19S QU5EX1NFVF9EVCxSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0K LSsJbWVtY3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJcmV0dXJuIDE7Ci0r CX0KLSsKLSt2b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25l ZCBsb25nICpwY3RyKQotKwl7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUZJTEVUSU1F IGZ0OwotKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsgICAgICAgIHN0cnVj dCB0aW1lc3BlYyB0czsKLSsjZWxzZQotKwlzdHJ1Y3QgdGltZXZhbCB0djsKLSsjZW5kaWYKLSsK LSsjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKwl1bnNpZ25lZCBsb25nIHBpZDsKLSsj ZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJR2V0U3lzdGVtVGltZUFzRmls ZVRpbWUoJmZ0KTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0hpZ2hEYXRlVGlt ZSAmIDB4ZmYpOwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGlt ZSA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hE YXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQu ZHdIaWdoRGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFy KSAoZnQuZHdMb3dEYXRlVGltZSAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikg KChmdC5kd0xvd0RhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBj aGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNp Z25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rI2VsaWYgZGVm aW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQotKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1F LCAmdHMpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHRzLnR2X3NlYyAmIDB4ZmYpOwot KwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJ YnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHMudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwli dWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1 Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHMudHZfbnNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAo dW5zaWduZWQgY2hhcikgKCh0cy50dl9uc2VjID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gMjQpICYgMHhmZik7Ci0rI2Vsc2UKLSsJZ2V0 dGltZW9mZGF5KCZ0dixOVUxMKTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl9z ZWMgJiAweGZmKTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDgp ICYgMHhmZik7Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAxNikg JiAweGZmKTsKLSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDI0KSAm IDB4ZmYpOwotKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3VzZWMgJiAweGZmKTsK LSsJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiA4KSAmIDB4ZmYpOwot KwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOwot KwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOwot KyNlbmRpZgotKwlidWZbOF0gPSAodW5zaWduZWQgY2hhcikgKCpwY3RyICYgMHhmZik7Ci0rCWJ1 Zls5XSA9ICh1bnNpZ25lZCBjaGFyKSAoKCpwY3RyID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsxMF0g PSAodW5zaWduZWQgY2hhcikgKCgqcGN0ciA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzExXSA9ICh1 bnNpZ25lZCBjaGFyKSAoKCpwY3RyID4+IDI0KSAmIDB4ZmYpOwotKwotKwkoKnBjdHIpKys7Ci0r Ci0rCi0rI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsJcGlkPSh1bnNpZ25lZCBsb25n KWdldHBpZCgpOwotKwlidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpIChwaWQgJiAweGZmKTsKLSsJ YnVmWzEzXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTRd ID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbMTVdID0gKHVu c2lnbmVkIGNoYXIpICgocGlkID4+IDI0KSAmIDB4ZmYpOwotKyNlbmRpZgotKyAgICB9Ci0rCi0r c3RhdGljIGludCBmaXBzX3JhbmQoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCXVuc2lnbmVkIGNo YXIgKm91dCwgdW5zaWduZWQgaW50IG91dGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbQUVT X0JMT0NLX0xFTkdUSF0sIElbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgdG1w W0FFU19CTE9DS19MRU5HVEhdOwotKwlpbnQgaTsKLSsJaWYgKGN0eC0+ZXJyb3IpCi0rCQl7Ci0r CQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfRVJST1IpOwotKwkJcmV0dXJu IDA7Ci0rCQl9Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJ UFNfUkFORCxSQU5EX1JfTk9fS0VZX1NFVCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFj dHgtPnNlZWRlZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJO R19OT1RfU0VFREVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlmb3IgKDs7KQotKwkJewotKwkJ aWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsJCQlGSVBTX2dldF90aW1ldmVjKGN0eC0+RFQsICZjdHgt PmNvdW50ZXIpOwotKwkJQUVTX2VuY3J5cHQoY3R4LT5EVCwgSSwgJmN0eC0+a3MpOwotKwkJZm9y IChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBJW2ldIF4g Y3R4LT5WW2ldOwotKwkJQUVTX2VuY3J5cHQodG1wLCBSLCAmY3R4LT5rcyk7Ci0rCQlmb3IgKGkg PSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ld OwotKwkJQUVTX2VuY3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKLSsJCS8qIENvbnRpbnVv dXMgUFJORyB0ZXN0ICovCi0rCQlpZiAoY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWlmIChmaXBz X3BybmdfZmFpbCkKLSsJCQkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7 Ci0rCQkJaWYgKCFtZW1jbXAoUiwgY3R4LT5sYXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkKLSsJCQkJ ewotKwkgICAgCQkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsK LSsJCQkJY3R4LT5lcnJvciA9IDE7Ci0rCQkJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJ CQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9Ci0rCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNf QkxPQ0tfTEVOR1RIKTsKLSsJCWlmICghY3R4LT5zZWNvbmQpCi0rCQkJewotKwkJCWN0eC0+c2Vj b25kID0gMTsKLSsJCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQotKwkJCQljb250aW51ZTsKLSsJCQl9 Ci0rCi0rCQlpZiAob3V0bGVuIDw9IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJewotKwkJCW1lbWNw eShvdXQsIFIsIG91dGxlbik7Ci0rCQkJYnJlYWs7Ci0rCQkJfQotKwotKwkJbWVtY3B5KG91dCwg UiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCW91 dGxlbiAtPSBBRVNfQkxPQ0tfTEVOR1RIOwotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotKwot K2ludCBGSVBTX3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXls ZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsK LSsJcmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5bGVuKTsKLSsJQ1JZUFRP X3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50 IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJ WkVfVCBrZXlsZW4pCi0rCXsKLSsJcmV0dXJuIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVu KTsKLSsJfQotKwotK2ludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2Vl ZGxlbikKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlyZXQgPSBmaXBzX3NldF9wcm5nX3NlZWQoJnNjdHgsIHNlZWQsIHNlZWRsZW4pOwotKwlD UllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsK LSsKLStpbnQgRklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQot Kwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJl dCA9IGZpcHNfcmFuZCgmc2N0eCwgb3V0LCBjb3VudCk7Ci0rCUNSWVBUT193X3VubG9jayhDUllQ VE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3g5MzFfc3Rh dHVzKHZvaWQpCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19S QU5EKTsKLSsJcmV0ID0gc2N0eC5zZWVkZWQ7Ci0rCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9D S19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK3ZvaWQgRklQU194OTMxX3Jlc2V0KHZv aWQpCi0rCXsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJZmlwc19yYW5k X3BybmdfcmVzZXQoJnNjdHgpOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 Ci0rCX0KLSsKLStzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQs IGludCBzZWVkbGVuKQotKwl7Ci0rCUZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwly ZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lk ICpzZWVkLCBpbnQgc2VlZGxlbiwKLSsJCQkJCWRvdWJsZSBhZGRfZW50cm9weSkKLSsJewotKwlG SVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0 aWMgY29uc3QgUkFORF9NRVRIT0QgcmFuZF94OTMxX21ldGg9Ci0rICAgIHsKLSsgICAgZmlwc19k b19yYW5kX3NlZWQsCi0rICAgIEZJUFNfeDkzMV9ieXRlcywKLSsgICAgRklQU194OTMxX3Jlc2V0 LAotKyAgICBmaXBzX2RvX3JhbmRfYWRkLAotKyAgICBGSVBTX3g5MzFfYnl0ZXMsCi0rICAgIEZJ UFNfeDkzMV9zdGF0dXMKLSsgICAgfTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU194OTMx X21ldGhvZCh2b2lkKQotK3sKLSsgIHJldHVybiAmcmFuZF94OTMxX21ldGg7Ci0rfQotKwotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmQu aC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKLS0tLSBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMJMjAxMi0wMi0y OSAxMDozMzowMi43OTgyOTQ5MzEgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5oCTIwMTItMDItMjkgMTA6MzM6MDIuNzk4Mjk0OTMxICswMTAwCi1A QCAtMCwwICsxLDE0NSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAz IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZm5kZWYg SEVBREVSX0ZJUFNfUkFORF9ICi0rI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0r I2VuZGlmCi0rCi0raW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwgaW50IGtleWxlbik7Ci0raW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50 IG51bSk7Ci0raW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBvdXRs ZW4pOwotKwotK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU194OTMx X3Jlc2V0KHZvaWQpOwotK2ludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsK LSsKLStpbnQgRklQU194OTMxX3N0YXR1cyh2b2lkKTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAq RklQU194OTMxX21ldGhvZCh2b2lkKTsKLSsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0eF9zdCBE UkJHX0NUWDsKLSsvKiBEUkJHIGV4dGVybmFsIGZsYWdzICovCi0rLyogRmxhZyBmb3IgQ1RSIG1v ZGUgb25seTogdXNlIGRlcml2YXRpb24gZnVuY3Rpb24gY3RyX2RmICovCi0rI2RlZmluZQlEUkJH X0ZMQUdfQ1RSX1VTRV9ERgkJMHgxCi0rLyogUFJORyBpcyBpbiB0ZXN0IHN0YXRlICovCi0rI2Rl ZmluZQlEUkJHX0ZMQUdfVEVTVAkJCTB4MgotKwotK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGlu dCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NU WCAqZGN0eCwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0raW50IEZJUFNfZHJiZ19p bnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVy cywgc2l6ZV90IHBlcnNsZW4pOwotK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4 LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0raW50IEZJUFNf ZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qg b3V0bGVuLAotKwkJCWludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCi0rCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotKwotK2ludCBGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShEUkJHX0NUWCAqZGN0eCk7Ci0rdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAq ZGN0eCk7Ci0rCi0raW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAot KwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBv dXQsCi0rCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAot Kwl2b2lkICgqY2xlYW51cF9lbnRyb3B5KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsIHNpemVfdCBvbGVuKSwKLSsJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCi0rCXNpemVfdCAo KmdldF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rCQkJCWlu dCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAotKwl2b2lkICgqY2xl YW51cF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xl bikpOwotKwotK2ludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4 LAotKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBv dXQpLAotKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFy ICpvdXQsIHNpemVfdCBvbGVuKSwKLSsJaW50ICgqcmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4 LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pLAotKwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19D VFggKmN0eCwKLSsJCQkJY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkp OwotKwotK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCk7Ci0rdm9p ZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgsIHZvaWQgKmFwcF9kYXRhKTsK LStzaXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCk7Ci0raW50 IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpOwotK3ZvaWQgRklQU19kcmJn X3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKLSt2b2lk IEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2 YWwpOwotKwotK2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KTsKLSsK LStEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpOwotK2NvbnN0IFJBTkRfTUVU SE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpOwotKwotKwotK2ludCBGSVBTX3JhbmRfc2V0X21l dGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCk7Ci0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNf cmFuZF9nZXRfbWV0aG9kKHZvaWQpOwotKwotK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBu Yml0cyk7Ci0rCi0raW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKTsKLSsKLSsvKiAxLjAuMCBj b21wYXQgZnVuY3Rpb25zICovCi0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVk IGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOwotK2ludCBGSVBTX3JhbmRfc2Vl ZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKLStpbnQgRklQU19yYW5k X2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOwotK2lu dCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQp OwotK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLStpbnQgRklQU19y YW5kX3N0YXR1cyh2b2lkKTsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2 b2lkKTsKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmRf bGNsLmguZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wu aAotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZp cHMJMjAxMi0wMi0yOSAxMDozMzowMi43OTgyOTQ5MzEgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaAkyMDEyLTAyLTI5IDEwOjMzOjAyLjc5 ODI5NDkzMSArMDEwMAotQEAgLTAsMCArMSwyMTkgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19yYW5k X2xjbC5oICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVu c3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5n QE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2hhc2hfY3R4 X3N0IERSQkdfSEFTSF9DVFg7Ci0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdCBEUkJH X0hNQUNfQ1RYOwotK3R5cGVkZWYgc3RydWN0IGRyYmdfY3RyX2N0eF9zdCBEUkJHX0NUUl9DVFg7 Ci0rCi0rLyogODg4IGJpdHMgZnJvbSAxMC4xIHRhYmxlIDIgKi8KLSsjZGVmaW5lIEhBU0hfUFJO R19NQVhfU0VFRExFTgkxMTEKLSsKLStzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdAotKwl7Ci0rCWNv bnN0IEVWUF9NRCAqbWQ7Ci0rCUVWUF9NRF9DVFggbWN0eDsKLSsJdW5zaWduZWQgY2hhciBWW0hB U0hfUFJOR19NQVhfU0VFRExFTl07Ci0rCXVuc2lnbmVkIGNoYXIgQ1tIQVNIX1BSTkdfTUFYX1NF RURMRU5dOwotKwkvKiBUZW1wb3JhcnkgdmFsdWUgc3RvcmFnZTogc2hvdWxkIGFsd2F5cyBleGNl ZWQgbWF4IGRpZ2VzdCBsZW5ndGggKi8KLSsJdW5zaWduZWQgY2hhciB2dG1wW0hBU0hfUFJOR19N QVhfU0VFRExFTl07Ci0rCX07Ci0rCi0rc3RydWN0IGRyYmdfaG1hY19jdHhfc3QKLSsJewotKwlj b25zdCBFVlBfTUQgKm1kOwotKwlITUFDX0NUWCBoY3R4OwotKwl1bnNpZ25lZCBjaGFyIEtbRVZQ X01BWF9NRF9TSVpFXTsKLSsJdW5zaWduZWQgY2hhciBWW0VWUF9NQVhfTURfU0laRV07Ci0rCX07 Ci0rCi0rc3RydWN0IGRyYmdfY3RyX2N0eF9zdAotKwl7Ci0rCUFFU19LRVkga3M7Ci0rCXNpemVf dCBrZXlsZW47Ci0rCXVuc2lnbmVkIGNoYXIgS1szMl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07 Ci0rCS8qIFRlbXAgdmFyaWFibGVzIHVzZWQgYnkgZGVyaXZhdGlvbiBmdW5jdGlvbiAqLwotKwlB RVNfS0VZIGRmX2tzOwotKwlBRVNfS0VZIGRmX2t4a3M7Ci0rCS8qIFRlbXBvcmFyeSBibG9jayBz dG9yYWdlIHVzZWQgYnkgY3RyX2RmICovCi0rCXVuc2lnbmVkIGNoYXIgYmx0bXBbMTZdOwotKwlz aXplX3QgYmx0bXBfcG9zOwotKwl1bnNpZ25lZCBjaGFyIEtYWzQ4XTsKLSsJfTsKLSsKLSsvKiBE UkJHIGludGVybmFsIGZsYWdzICovCi0rCi0rLyogRnVuY3Rpb25zIHNob3VsZG4ndCBjYWxsIGVy ciBsaWJyYXJ5ICovCi0rI2RlZmluZQlEUkJHX0ZMQUdfTk9FUlIJCQkweDEKLSsvKiBDdXN0b20g cmVzZWVkIGNoZWNraW5nICovCi0rI2RlZmluZQlEUkJHX0NVU1RPTV9SRVNFRUQJCTB4MgotKwot Ky8qIERSQkcgc3RhdHVzIHZhbHVlcyAqLwotKy8qIG5vdCBpbml0aWFsaXNlZCAqLwotKyNkZWZp bmUgRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRAkwCi0rLyogb2sgYW5kIHJlYWR5IHRvIGdlbmVy YXRlIHJhbmRvbSBiaXRzICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19SRUFEWQkJMQotKy8qIHJl c2VlZCByZXF1aXJlZCAqLwotKyNkZWZpbmUgRFJCR19TVEFUVVNfUkVTRUVECQkyCi0rLyogZmF0 YWwgZXJyb3IgY29uZGl0aW9uICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19FUlJPUgkJMwotKwot Ky8qIEEgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aDogbGFyZ2VyIHRoYW4gYW55IHJlYXNvbmFibGUg dmFsdWUgdXNlZCBpbiBwcmF0aWNlICovCi0rCi0rI2RlZmluZSBEUkJHX01BWF9MRU5HVEgJCQkw eDdmZmZmZmYwCi0rLyogTWF4aW11bSBEUkJHIGJsb2NrIGxlbmd0aDogYWxsIG1kIHNpemVzIGFy ZSBiaWdnZXIgdGhhbiBjaXBoZXIgYmxvY2tzIHNpemVzCi0rICogc28gdXNlIG1heCBkaWdlc3Qg bGVuZ3RoLgotKyAqLwotKyNkZWZpbmUgRFJCR19NQVhfQkxPQ0sJCQlFVlBfTUFYX01EX1NJWkUK LSsKLSsjZGVmaW5lIERSQkdfSEVBTFRIX0lOVEVSVkFMCQkoMSA8PCAyNCkKLSsKLSsvKiBEUkJH IGNvbnRleHQgc3RydWN0dXJlICovCi0rCi0rc3RydWN0IGRyYmdfY3R4X3N0Ci0rCXsKLSsJLyog Rmlyc3QgdHlwZXMgY29tbW9uIHRvIGFsbCBpbXBsZW1lbnRhdGlvbnMgKi8KLSsJLyogRFJCRyB0 eXBlOiBhIE5JRCBmb3IgdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtICovCi0rCWludCB0eXBlOwot KwkvKiBWYXJpb3VzIGV4dGVybmFsIGZsYWdzICovCi0rCXVuc2lnbmVkIGludCB4ZmxhZ3M7Ci0r CS8qIFZhcmlvdXMgaW50ZXJuYWwgdXNlIG9ubHkgZmxhZ3MgKi8KLSsJdW5zaWduZWQgaW50IGlm bGFnczsKLSsJLyogVXNlZCBmb3IgcGVyaW9kaWMgaGVhbHRoIGNoZWNrcyAqLwotKwlpbnQgaGVh bHRoX2NoZWNrX2NudCwgaGVhbHRoX2NoZWNrX2ludGVydmFsOwotKwotKwkvKiBUaGUgZm9sbG93 aW5nIHBhcmFtZXRlcnMgYXJlIHNldHVwIGJ5IG1lY2hhbmlzbSBkcmJnX2luaXQoKSBjYWxsICov Ci0rCWludCBzdHJlbmd0aDsKLSsJc2l6ZV90IGJsb2NrbGVuZ3RoOwotKwlzaXplX3QgbWF4X3Jl cXVlc3Q7Ci0rCi0rCXNpemVfdCBtaW5fZW50cm9weSwgbWF4X2VudHJvcHk7Ci0rCXNpemVfdCBt aW5fbm9uY2UsIG1heF9ub25jZTsKLSsJc2l6ZV90IG1heF9wZXJzLCBtYXhfYWRpbjsKLSsJdW5z aWduZWQgaW50IHJlc2VlZF9jb3VudGVyOwotKwl1bnNpZ25lZCBpbnQgcmVzZWVkX2ludGVydmFs OwotKwlzaXplX3Qgc2VlZGxlbjsKLSsJaW50IHN0YXR1czsKLSsJLyogQXBwbGljYXRpb24gZGF0 YTogdHlwaWNhbGx5IHVzZWQgYnkgdGVzdCBnZXRfZW50cm9weSAqLwotKwl2b2lkICphcHBfZGF0 YTsKLSsJLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3RydWN0dXJlcyAqLwotKwl1bmlvbiAK LSsJCXsKLSsJCURSQkdfSEFTSF9DVFggaGFzaDsKLSsJCURSQkdfSE1BQ19DVFggaG1hYzsKLSsJ CURSQkdfQ1RSX0NUWCAgY3RyOwotKwkJfSBkOwotKwkvKiBJbml0aWFsaWFzZSBQUk5HIGFuZCBz ZXR1cCBjYWxsYmFja3MgYmVsb3cgKi8KLSsJaW50ICgqaW5pdCkoRFJCR19DVFggKmN0eCwgaW50 IG5pZCwgaW50IHNlY3VyaXR5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotKwkvKiBJbnRhbnRpYXRl IFBSTkcgKi8KLSsJaW50ICgqaW5zdGFudGlhdGUpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKLSsJCQkJY29uc3QgdW5zaWduZWQgY2hhciAq cGVycywgc2l6ZV90IHBlcnNsZW4pOwotKwkvKiByZXNlZWQgKi8KLSsJaW50ICgqcmVzZWVkKShE UkJHX0NUWCAqY3R4LAotKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRs ZW4sCi0rCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKLSsJ LyogZ2VuZXJhdCBvdXRwdXQgKi8KLSsJaW50ICgqZ2VuZXJhdGUpKERSQkdfQ1RYICpjdHgsCi0r CQkJCXVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsJCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotKwkvKiB1bmluc3RhbnRpYXRlICovCi0r CWludCAoKnVuaW5zdGFudGlhdGUpKERSQkdfQ1RYICpjdHgpOwotKwotKwkvKiBFbnRyb3B5IHNv dXJjZSBibG9jayBsZW5ndGggKi8KLSsJc2l6ZV90IGVudHJvcHlfYmxvY2tsZW47Ci0rCi0rCS8q IGVudHJvcHkgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCi0rCXNpemVfdCAoKmdldF9lbnRyb3B5KShE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsJCQkJaW50IGVudHJvcHksIHNp emVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7Ci0rCS8qIEluZGljYXRlcyB3ZSBoYXZlIGZp bmlzaGVkIHdpdGggZW50cm9weSBidWZmZXIgKi8KLSsJdm9pZCAoKmNsZWFudXBfZW50cm9weSko RFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7Ci0rCi0rCS8q IG5vbmNlIGdhdGhlcmluZyBmdW5jdGlvbiAqLwotKwlzaXplX3QgKCpnZXRfbm9uY2UpKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKwkJCQlpbnQgZW50cm9weSwgc2l6ZV90 IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKLSsJLyogSW5kaWNhdGVzIHdlIGhhdmUgZmluaXNo ZWQgd2l0aCBub25jZSBidWZmZXIgKi8KLSsJdm9pZCAoKmNsZWFudXBfbm9uY2UpKERSQkdfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOwotKwotKwkvKiBDb250aW51 b3VzIHJhbmRvbSBudW1iZXIgdGVzdCB0ZW1wb3JhcnkgYXJlYSAqLwotKwkvKiBMYXN0IGJsb2Nr ICovCQotKwl1bnNpZ25lZCBjaGFyIGxiW0VWUF9NQVhfTURfU0laRV07Ci0rCS8qIHNldCBpZiBs YiBpcyB2YWxpZCAqLwotKwlpbnQgbGJfdmFsaWQ7Ci0rCi0rCS8qIENhbGxiYWNrcyB1c2VkIHdo ZW4gY2FsbGVkIHRocm91Z2ggUkFORCBpbnRlcmZhY2UgKi8KLSsJLyogR2V0IGFueSBhZGRpdGlv bmFsIGlucHV0IGZvciBnZW5lcmF0ZSAqLwotKwlzaXplX3QgKCpnZXRfYWRpbikoRFJCR19DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpOwotKwl2b2lkICgqY2xlYW51cF9hZGluKShEUkJH X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKLSsJLyogQ2FsbGJh Y2sgZm9yIFJBTkRfc2VlZCgpLCBSQU5EX2FkZCgpICovCi0rCWludCAoKnJhbmRfc2VlZF9jYiko RFJCR19DVFggKmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKLSsJaW50ICgqcmFuZF9h ZGRfY2IpKERSQkdfQ1RYICpjdHgsCi0rCQkJCWNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91 YmxlIGVudHJvcHkpOwotKwl9OwotKwotKwotK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19D VFggKmRjdHgpOwotK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KTsKLStp bnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IGZpcHNfZHJiZ19r YXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0raW50IGZp cHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpv dXQpOwotKwotK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGlu dCBuaWQpOwotKwotK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpGSVBTX2dldF9jaXBoZXJi eW5pZChpbnQgbmlkKTsKLSsKLSsjZGVmaW5lIEZJUFNfZGlnZXN0aW5pdCBFVlBfRGlnZXN0SW5p dAotKyNkZWZpbmUgRklQU19kaWdlc3R1cGRhdGUgRVZQX0RpZ2VzdFVwZGF0ZQotKyNkZWZpbmUg RklQU19kaWdlc3RmaW5hbCBFVlBfRGlnZXN0RmluYWwKLSsjZGVmaW5lIE1fRVZQX01EX3NpemUg RVZQX01EX3NpemUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlw c19yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3Jh bmRfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9s aWIuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzk4Mjk0OTMxICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMJMjAxMi0wMi0yOSAxMDoz MzowMi43OTgyOTQ5MzEgKzAxMDAKLUBAIC0wLDAgKzEsMTkxIEBACi0rLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICog ICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK LSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot KyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAi ZV9vcy5oIgotKwotKy8qIEZJUFMgQVBJIGZvciBQUk5HIHVzZS4gU2ltaWxhciB0byBSQU5EIGZ1 bmN0aW9uYWxpdHkgYnV0IHdpdGhvdXQKLSsgKiBFTkdJTkUgYW5kIGFkZGl0aW9uYWwgY2hlY2tp bmcgZm9yIG5vbi1GSVBTIHJhbmQgbWV0aG9kcy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgUkFO RF9NRVRIT0QgKmZpcHNfcmFuZF9tZXRoID0gTlVMTDsKLStzdGF0aWMgaW50IGZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoID0gMDsKLStzdGF0aWMgaW50IGZpcHNfcmFuZF9iaXRzID0gMDsKLSsKLSsv KiBBbGxvd3MgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgbnVtYmVyIG9mIGJpdHMgYW5kIHVzZXMg bm9uLUZJUFMgbWV0aG9kcyAqLwotK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cykK LSsJewotKwlmaXBzX3JhbmRfYml0cyA9IG5iaXRzOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9z ZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKQotKwl7Ci0rCWlmICghZmlwc19yYW5k X2JpdHMpCi0rCQl7Ci0rCQlpZiAobWV0aCA9PSBGSVBTX2RyYmdfbWV0aG9kKCkpCi0rCQkJZmlw c19hcHByb3ZlZF9yYW5kX21ldGggPSAxOwotKwkJZWxzZSBpZiAobWV0aCA9PSBGSVBTX3g5MzFf bWV0aG9kKCkpCi0rCQkJZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAyOwotKwkJZWxzZQotKwkJ CXsKLSsJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDA7Ci0rCQkJaWYgKEZJUFNfbW9kdWxl X21vZGUoKSkKLSsJCQkJewotKwkJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhP RCwKLSsJCQkJCQlGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJ CX0KLSsJCQl9Ci0rCQl9Ci0rCWZpcHNfcmFuZF9tZXRoID0gbWV0aDsKLSsJcmV0dXJuIDE7Ci0r CX0KLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCkKLSsJ ewotKwlyZXR1cm4gZmlwc19yYW5kX21ldGg7Ci0rCX0KLSsKLStjb25zdCBSQU5EX01FVEhPRCAq RklQU19yYW5kX21ldGhvZCh2b2lkKQotKwl7Ci0rCXJldHVybiBGSVBTX3JhbmRfZ2V0X21ldGhv ZCgpOwotKwl9Ci0rCi0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKLSsJewotKwlpZiAoZmlw c19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmNsZWFudXApCi0rCQlmaXBzX3JhbmRfbWV0 aC0+Y2xlYW51cCgpOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1 ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pCi0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRf bWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBT X1JBTkRfU0VFRCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0K LSsJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zZWVkKQotKwkJZmlwc19y YW5kX21ldGgtPnNlZWQoYnVmLG51bSk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rdm9pZCBGSVBT X3JhbmRfYWRkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpCi0rCXsK LSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpCi0r CQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQURELCBGSVBTX1JfTk9OX0ZJUFNfTUVU SE9EKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFu ZF9tZXRoLT5hZGQpCi0rCQlmaXBzX3JhbmRfbWV0aC0+YWRkKGJ1ZixudW0sZW50cm9weSk7Ci0r CX0KLSsKLStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgRklQU19SQU5E X1NJWkVfVCBudW0pCi0rCXsKLSsJaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBT X21vZHVsZV9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQllURVMs IEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBz X3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMpCi0rCQlyZXR1cm4gZmlwc19yYW5k X21ldGgtPmJ5dGVzKGJ1ZixudW0pOwotKwlyZXR1cm4gMDsKLSsJfQotKwotK2ludCBGSVBTX3Jh bmRfcHNldWRvX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSkKLSsJewotKwlpZiAo IWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKLSsJCXsKLSsJ CUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9QU0VVRE9fQllURVMsIEZJUFNfUl9OT05fRklQU19N RVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBz X3JhbmRfbWV0aC0+cHNldWRvcmFuZCkKLSsJCXJldHVybiBmaXBzX3JhbmRfbWV0aC0+cHNldWRv cmFuZChidWYsbnVtKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0 dXModm9pZCkKLSsJewotKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9k dWxlX21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TVEFUVVMsIEZJ UFNfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmIChmaXBzX3Jh bmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c3RhdHVzKQotKwkJcmV0dXJuIGZpcHNfcmFuZF9t ZXRoLT5zdGF0dXMoKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsKLSsvKiBSZXR1cm4gaW5zdGFudGlh dGVkIHN0cmVuZ3RoIG9mIFBSTkcuIEZvciBEUkJHIHRoaXMgaXMgYW4gaW50ZXJuYWwKLSsgKiBw YXJhbWV0ZXIuIEZvciBYOS4zMSBQUk5HIGl0IGlzIDgwIGJpdHMgKGZyb20gU1A4MDAtMTMxKS4g QW55IG90aGVyCi0rICogdHlwZSBvZiBQUk5HIGlzIG5vdCBhcHByb3ZlZCBhbmQgcmV0dXJucyAw IGluIEZJUFMgbW9kZSBhbmQgbWF4aW11bQotKyAqIDI1NiBvdXRzaWRlIEZJUFMgbW9kZS4KLSsg Ki8KLSsKLStpbnQgRklQU19yYW5kX3N0cmVuZ3RoKHZvaWQpCi0rCXsKLSsJaWYgKGZpcHNfcmFu ZF9iaXRzKQotKwkJcmV0dXJuIGZpcHNfcmFuZF9iaXRzOwotKwlpZiAoZmlwc19hcHByb3ZlZF9y YW5kX21ldGggPT0gMSkKLSsJCXJldHVybiBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKEZJUFNfZ2V0 X2RlZmF1bHRfZHJiZygpKTsKLSsJZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0g MikKLSsJCXJldHVybiA4MDsKLSsJZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0g MCkKLSsJCXsKLSsJCWlmIChGSVBTX21vZHVsZV9tb2RlKCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQll bHNlCi0rCQkJcmV0dXJuIDI1NjsKLSsJCX0KLSsJcmV0dXJuIDA7Ci0rCX0KLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBz CTIwMTItMDItMjkgMTA6MzM6MDIuNzk4Mjk0OTMxICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDEyLTAyLTI5IDEwOjMzOjAy Ljc5ODI5NDkzMSArMDEwMAotQEAgLTAsMCArMSwxODMgQEAKLSsvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq IENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoK LSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgi Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKwotKwotK3R5cGVkZWYgc3RydWN0Ci0rCXsK LSsJdW5zaWduZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rCXVuc2ln bmVkIGNoYXIgUlsxNl07Ci0rCX0gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0 ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsK LStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4ZjMsMHhiMSww eDY2LDB4NmQsMHgxMywweDYwLDB4NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4 YjgsMHhkNCwweDYyLDB4MDJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2ID0g Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMyww eGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwK LSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkv KiBSICovCi0rCQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhjMCwweDU1LAotKwkJ IDB4ODQsMHg3OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJfTsKLSsKLStzdGF0 aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX2tleVsyNF0gPQotKwkJezB4MTUsMHhkOCwweDc4LDB4 MGQsMHg2MiwweGQzLDB4MjUsMHg2ZSwKLSsJCSAweDQ0LDB4NjQsMHgxMCwweDEzLDB4NjAsMHgy YiwweGE5LDB4YmMsCi0rCQkgMHg0YSwweGZiLDB4Y2EsMHhlYiwweDRjLDB4OGIsMHg5OSwweDNi fTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzE5Ml90diA9IAotKwl7Ci0rCQkJCS8qIERU ICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4 YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Yn0sCi0rCQkJCS8qIFYgKi8KLSsJ CXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MTcs MHgwNywweGQ1LDB4MjgsMHgxOSwweDc5LDB4MWUsMHhlZiwKLSsJCSAweGE1LDB4MGMsMHhiZiww eDI1LDB4ZTUsMHg1NiwweGI0LDB4OTN9Ci0rCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9rZXlbMzJdID0KLSsJCXsweDZkLDB4MTQsMHgwNiwweDZjLDB4YjYsMHhkOCwweDIx LDB4MmQsCi0rCQkgMHg4MiwweDhkLDB4ZmEsMHhmMiwweDdhLDB4MDMsMHhiNywweDlmLAotKwkJ IDB4MGMsMHhjNywweDNlLDB4Y2QsMHg3NiwweGViLDB4ZWUsMHhiNSwKLSsJCSAweDIxLDB4MDUs MHg4YywweDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBh ZXNfMjU2X3R2ID0KLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMs MHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSww eDllLDB4ODh9LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDM1LDB4YzcsMHhlZiwweGE3LDB4NzgsMHg0ZCwweDI5 LDB4YmMsCi0rCQkgMHg4MiwweDc5LDB4OTksMHhmYiwweGQwLDB4YjMsMHgzYiwweDcyfQotKwl9 OwotKwotK3ZvaWQgRklQU19jb3JydXB0X3JuZygpCi0rICAgIHsKLSsgICAgYWVzXzE5Ml90di5W WzBdKys7Ci0rICAgIH0KLSsKLSsjZGVmaW5lIGZpcHNfeDkzMV90ZXN0KGtleSwgdHYpIFwKLSsJ ZG9feDkzMV90ZXN0KGtleSwgc2l6ZW9mIGtleSwgJnR2KQotKwotK3N0YXRpYyBpbnQgZG9feDkz MV90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKLSsJCQlBRVNfUFJOR19UViAq dHYpCi0rCXsKLSsJdW5zaWduZWQgY2hhciBSWzE2XSwgVlsxNl07Ci0rCWludCBydiA9IDE7Ci0r CW1lbWNweShWLCB0di0+Viwgc2l6ZW9mKFYpKTsKLSsJaWYgKCFGSVBTX3g5MzFfc2V0X2tleShr ZXksIGtleWxlbikpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBT X1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKLSsJCXJldHVybiAxOwotKwlpZiAoIWZpcHNfcG9z dF9jb3JydXB0KEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQotKwkJVlswXSsrOwotKwlG SVBTX3g5MzFfc2VlZChWLCAxNik7Ci0rCUZJUFNfeDkzMV9zZXRfZHQodHYtPkRUKTsKLSsJRklQ U194OTMxX2J5dGVzKFIsIDE2KTsKLSsJaWYgKG1lbWNtcChSLCB0di0+UiwgMTYpKQotKwkJewot KwkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKTsKLSsJCXJ2 ID0gMDsKLSsJCX0KLSsJZWxzZSBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9YOTMx LCBrZXlsZW4sIE5VTEwpKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVybiBydjsKLSsJfQotKwotK2lu dCBGSVBTX3NlbGZ0ZXN0X3g5MzEoKQotKwl7Ci0rCWludCBydiA9IDE7Ci0rCUZJUFNfeDkzMV9y ZXNldCgpOwotKwlpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUoKSkKLSsJCXsKLSsJCUZJUFNlcnIo RklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJl dHVybiAwOwotKwkJfQotKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhf dHYpKQotKwkJcnYgPSAwOwotKwlpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xOTJfa2V5LCBhZXNf MTkyX3R2KSkKLSsJCXJ2ID0gMDsKLSsJaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMjU2X2tleSwg YWVzXzI1Nl90dikpCi0rCQlydiA9IDA7Ci0rCUZJUFNfeDkzMV9yZXNldCgpOwotKwlpZiAoIXJ2 KQotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOwotKwlyZXR1cm4gcnY7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9p ZCkKLSsJewotKwlyZXR1cm4gRklQU19zZWxmdGVzdF94OTMxKCk7Ci0rCX0KLSsKLSsjZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMKLS0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzCTIw MTItMDItMjkgMTA6MzM6MDIuNzk4Mjk0OTMxICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTkyOTQ5 MzkgKzAxMDAKLUBAIC0wLDAgKzEsMjUwIEBACi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgg RXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgot KyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50 YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0r ICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21t ZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBh aGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNv ZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBs aGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRv Y3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVy ZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRl ciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0 IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMg aW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNr YWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRy aWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVz ZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQg cHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1 YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBz b2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUg d3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICog ICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5l cyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBo aWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lm aWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMg ZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xl ZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4g YnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJF U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G Ci0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlv biB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJp dmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNh bm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1 dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsg Ki8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0r ICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0 cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgot KyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0r ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgot KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS Ci0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlw ZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz X3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBT IFJBTkQgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsj aW5jbHVkZSAiZmlwc191dGwuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rdHlw ZWRlZiBzdHJ1Y3QKLSsJewotKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKLSsJdW5zaWduZWQgY2hh ciBWWzE2XTsKLSsJdW5zaWduZWQgY2hhciBSWzE2XTsKLSsJfSBBRVNfUFJOR19NQ1Q7Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9Ci0rCXsweDlm LDB4NWIsMHg1MSwweDIwLDB4MGIsMHhmMywweDM0LDB4YjUsCi0rCSAweGQ4LDB4MmIsMHhlOCww eGMzLDB4NzIsMHg1NSwweGM4LDB4NDh9OwotKwotK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1Qg YWVzXzEyOF9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4NjMsMHg3NiwweGJiLDB4ZTUs MHgyOSwweDAyLDB4YmEsMHgzYiwKLSsJIDB4NjcsMHhjOSwweDI1LDB4ZmEsMHg3MCwweDFmLDB4 MTEsMHhhY30sCi0rCQkJLyogViAqLwotKwl7MHg1NywweDJjLDB4OGUsMHg3NiwweDg3LDB4MjYs MHg0NywweDk3LAotKwkgMHg3ZSwweDc0LDB4ZmIsMHhkZCwweGM0LDB4OTUsMHgwMSwweGQxfSwK LSsJCQkvKiBSICovCi0rCXsweDQ4LDB4ZTksMHhiZCwweDBkLDB4MDYsMHhlZSwweDE4LDB4ZmIs Ci0rCSAweGU0LDB4NTcsMHg5MCwweGQ1LDB4YzMsMHhmYywweDliLDB4NzN9Ci0rfTsKLSsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX21jdF9rZXlbMjRdID0KLSsJezB4Yjcs MHg2YywweDM0LDB4ZDEsMHgwOSwweDY3LDB4YWIsMHg3MywKLSsJIDB4NGQsMHg1YSwweGQ1LDB4 MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwKLSsJIDB4YmMsMHgzNSwweDUxLDB4MTYsMHg2YiwweGFl LDB4OTMsMHg4YX07Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMTkyX21jdF90 diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7MHg4NCwweGNlLDB4MjIsMHg3ZCwweDkxLDB4NWEsMHhh MywweGM5LAotKwkgMHg4NCwweDNjLDB4MGEsMHhiMywweGE5LDB4NjMsMHgxNSwweDUyfSwKLSsJ CQkvKiBWICovCi0rCXsweGI2LDB4YWYsMHhlNiwweDhmLDB4OTksMHg5ZSwweDkwLDB4NjQsCi0r CSAweGRkLDB4YzcsMHg3YSwweGMxLDB4YmIsMHg5MCwweDNhLDB4NmR9LAotKwkJCS8qIFIgKi8K LSsJezB4ZmMsMHg4NSwweDYwLDB4OWEsMHgyOSwweDZmLDB4ZWYsMHgyMSwKLSsJIDB4ZGQsMHg4 NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4NmYsMHg0N30KLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQotKwl7MHg5YiwweDA1LDB4YzgsMHg2 OCwweGZmLDB4NDcsMHhmOCwweDNhLAotKwkgMHhhNiwweDNhLDB4YTgsMHhjYiwweDRlLDB4NzEs MHhiMiwweGUwLAotKwkgMHhiOCwweDdlLDB4ZjEsMHgzNywweGI2LDB4YjQsMHhmNiwweDZkLAot KwkgMHg4NiwweDMyLDB4ZmMsMHgxZiwweDVlLDB4MWQsMHgxZSwweDUwfTsKLSsKLStzdGF0aWMg Y29uc3QgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsw eDMxLDB4NmUsMHgzNSwweDlhLDB4YjEsMHg0NCwweGYwLDB4ZWUsCi0rCSAweDYyLDB4NmQsMHgw NCwweDQ2LDB4ZTAsMHhhMywweDkyLDB4NGN9LAotKwkJCS8qIFYgKi8KLSsJezB4NGYsMHhjZCww eGMxLDB4ODcsMHg4MiwweDFmLDB4NGQsMHhhMSwKLSsJIDB4M2UsMHgwZSwweDU2LDB4NDQsMHg1 OSwweGU4LDB4ODMsMHhjYX0sCi0rCQkJLyogUiAqLwotKwl7MHhjOCwweDg3LDB4YzIsMHg2MSww eDViLDB4ZDAsMHhiOSwweGUxLAotKwkgMHhlNywweGYzLDB4OGIsMHhkNywweDViLDB4ZDUsMHhm MSwweDhkfQotK307Ci0rCi0rc3RhdGljIHZvaWQgZHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpi LGludCBuKQotKyAgICB7Ci0rICAgIHdoaWxlKG4tLSA+IDApCi0rCXsKLSsJcHJpbnRmKCIgJTAy eCIsKmIrKyk7Ci0rCX0KLSsgICAgfQotKwotK3N0YXRpYyB2b2lkIGNvbXBhcmUoY29uc3QgdW5z aWduZWQgY2hhciAqcmVzdWx0LGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVkLAotKwkJICAg IGludCBuKQotKyAgICB7Ci0rICAgIGludCBpOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IG4gOyAr K2kpCi0rCWlmKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkKLSsJICAgIHsKLSsJICAgIHB1dHMo IlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOwotKwkgICAgZHVtcChyZXN1bHQsbik7Ci0rCSAg ICBwdXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOwotKwkgICAgZHVtcChleHBlY3Rl ZCxuKTsKLSsJICAgIHB1dGNoYXIoJ1xuJyk7Ci0rCSAgICBFWElUKDEpOwotKwkgICAgfQotKyAg ICB9Ci0rCi0rCi0rc3RhdGljIHZvaWQgcnVuX3Rlc3QoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LCBpbnQga2V5bGVuLAotKwkJCQkJCQljb25zdCBBRVNfUFJOR19NQ1QgKnR2KQotKyAgICB7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSwgZHRbMTZdOwotKyAgICBpbnQgaSwgajsKLSsgICAg RklQU194OTMxX3Jlc2V0KCk7Ci0rICAgIEZJUFNfeDkzMV90ZXN0X21vZGUoKTsKLSsgICAgRklQ U194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKyAgICBGSVBTX3g5MzFfc2VlZCh0di0+Viwg MTYpOwotKyAgICBtZW1jcHkoZHQsIHR2LT5EVCwgMTYpOwotKyAgICBmb3IgKGkgPSAwOyBpIDwg MTAwMDA7IGkrKykKLSsJewotKyAgICAJRklQU194OTMxX3NldF9kdChkdCk7Ci0rCUZJUFNfeDkz MV9ieXRlcyhidWYsIDE2KTsKLSsJLyogSW5jcmVtZW50IERUICovCi0rCWZvciAoaiA9IDE1OyBq ID49IDA7IGotLSkKLSsJCXsKLSsJCWR0W2pdKys7Ci0rCQlpZiAoZHRbal0pCi0rCQkJYnJlYWs7 Ci0rCQl9Ci0rCX0KLSsKLSsgICAgY29tcGFyZShidWYsdHYtPlIsIDE2KTsKLSsgICAgfQotKwot K2ludCBtYWluKCkKLSsJewotKwlydW5fdGVzdChhZXNfMTI4X21jdF9rZXksIDE2LCAmYWVzXzEy OF9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7Ci0rCXJ1bl90 ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQsICZhZXNfMTkyX21jdF90dik7Ci0rCXByaW50ZigiRklQ UyBQUk5HIHRlc3QgMiBkb25lXG4iKTsKLSsJcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwg JmFlc18yNTZfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOwot KwlyZXR1cm4gMDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAxMDozMzow Mi43OTkyOTQ5MzkgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL2Zp cHNfcnNhX3NlbGZ0ZXN0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTkyOTQ5MzkgKzAxMDAKLUBA IC0wLDAgKzEsNDQ0IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMt MjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5T U0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8 b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG5bXSA9Ci0rIlx4 MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhB OFx4NzEiCi0rIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhC Nlx4RjBceDc0XHg1NFx4RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhB Qlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2 MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4N0ZceEFGXHhC OFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCi0r Ilx4ODRceEVFXHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1 XHg5OFx4MzkiCi0rIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdB XHg5QVx4NDFceEY2XHhDMVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhG XHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwotK3N0YXRpYyBp bnQgY29ycnVwdF9yc2E7Ci0rCi0rc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCi0rICAg IHsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOwotKwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkW10gPQotKyJceDAwXHhBNVx4REFceEZDXHg1 M1x4NDFceEZBXHhGMlx4ODlceEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgotKyJceEY4XHgz Rlx4MzFceDI1XHgxRVx4MDZceDY4XHhCNFx4MjdceDg0XHg4MVx4MzhceDAxXHg1N1x4OTZceDQx IgotKyJceEIyXHg5NFx4MTBceEIzXHhDN1x4OTlceDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVceDVD XHgzOVx4MjZceDY5IgotKyJceEQ2XHg4N1x4MERceEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdG XHhEQ1x4QjhceDJFXHhDOVx4M0VceERBIgotKyJceEM5XHg3Rlx4RjNceEFEXHg1OVx4NTBceEFD XHhDRlx4QkNceDExXHgxQ1x4NzZceEYxXHhBOVx4NTJceDk0IgotKyJceDQ0XHhFNVx4NkFceEFG XHg2OFx4QzVceDZDXHgwOVx4MkNceEQzXHg4RFx4QzNceEJFXHhGNVx4RDJceDBBIgotKyJceDkz XHg5OVx4MjZceEVEXHg0Rlx4NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhc eDk0IgotKyJceEFGXHg5NFx4MjhceEMyXHhCN1x4QjhceDg4XHgzRlx4RTRceDQ2XHgzQVx4NEJc eEM4XHg1Qlx4MUNceEIzIgotKyJceEMxIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgcFtdID0KLSsiXHgwMFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgwOFx4 ODFceDBCXHgxMFx4QTFceEI1XHg2MCIKLSsiXHgwMVx4OTlceEVCXHg5Rlx4NDRceEFFXHhGNFx4 RkRceEE0XHg5M1x4QjhceDFBXHg5RVx4M0RceDg0XHhGNiIKLSsiXHgzMlx4MTJceDRFXHhGMFx4 MjNceDZFXHg1RFx4MUVceDNCXHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKLSsiXHgyRFx4 NUJceDI1XHgyMVx4NzZceDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2 NSIKLSsiXHg5OSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHFbXSA9Ci0r Ilx4MDBceEM5XHg3Rlx4QjFceEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgzM1x4RUFceEFB XHhEMVx4RDkiCi0rIlx4MzVceDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhEMFx4NUFceDBG XHgyMFx4MzVceDAyXHg4Qlx4OUQiCi0rIlx4ODZceDk4XHg0MFx4QjRceDE2XHg2Nlx4QjRceDJF XHg5Mlx4RUFceDBEXHhBM1x4QjRceDMyXHgwNFx4QjUiCi0rIlx4Q0ZceENFXHgzM1x4NTJceDUy XHg0RFx4MDRceDE2XHhBNVx4QTRceDQxXHhFN1x4MDBceEFGXHg0Nlx4MTUiCi0rIlx4MDMiOwot KwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXAxW10gPQotKyJceDU0XHg0OVx4 NENceEE2XHgzRVx4QkFceDAzXHgzN1x4RTRceEUyXHg0MFx4MjNceEZDXHhENlx4OUFceDVBIgot KyJceEVCXHgwN1x4RERceERDXHgwMVx4ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhG Mlx4QjFceDNFIgotKyJceEQ5XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhD MVx4RjdceDY5XHgyRVx4OUFceDJFIgotKyJceDIwXHgyQlx4MzhceEZDXHg5MVx4MEFceDQ3XHg0 MVx4NzRceEFEXHhDOVx4M0NceDFGXHg2N1x4QzlceDgxIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZG1xMVtdID0KLSsiXHg0N1x4MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4 NzVceDAzXHg1MVx4QjdceEY4XHg3OFx4ODZceDRDXHhBOSIKLSsiXHg2MVx4QURceEJEXHgzQVx4 OEFceDdFXHg5OVx4MUNceDVDXHgwNVx4NTZceEE5XHg0Q1x4MzFceDQ2XHhBNyIKLSsiXHhGOVx4 ODBceDNGXHg4Rlx4NkZceDhBXHhFM1x4NDJceEU5XHgzMVx4RkRceDhBXHhFNFx4N0FceDIyXHgw RCIKLSsiXHgxQlx4OTlceEE0XHg5NVx4ODRceDk4XHgwN1x4RkVceDM5XHhGOVx4MjRceDVBXHg5 OFx4MzZceERBXHgzRCI7Ci0rICAgIAotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBp cW1wW10gPQotKyJceDAwXHhCMFx4NkNceDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4 NUJceERCXHhBRVx4OTRceDIzIgotKyJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4 NTBceDkzXHgwN1x4N0ZceENEXHgzOVx4RTJceDExIgotKyJceDlGXHhDOVx4ODZceDMyXHgxNVx4 NEZceDU4XHg4M1x4QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgotKyJceDlFXHgyRVx4 MEZceDk2XHg1Nlx4RTZceDk4XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5Igot KyJceEY3IjsKLSsKLSsgICAga2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKS0xLCBrZXkt Pm4pOwotKyAgICBpZiAoY29ycnVwdF9yc2EpCi0rCUJOX3NldF9iaXQoa2V5LT5uLCAxMDI0KTsK LSsgICAga2V5LT5lID0gQk5fYmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOwotKyAgICBr ZXktPmQgPSBCTl9iaW4yYm4oZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7Ci0rICAgIGtleS0+cCA9 IEJOX2JpbjJibihwLCBzaXplb2YocCktMSwga2V5LT5wKTsKLSsgICAga2V5LT5xID0gQk5fYmlu MmJuKHEsIHNpemVvZihxKS0xLCBrZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4o ZG1wMSwgc2l6ZW9mKGRtcDEpLTEsIGtleS0+ZG1wMSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2Jp bjJibihkbXExLCBzaXplb2YoZG1xMSktMSwga2V5LT5kbXExKTsKLSsgICAga2V5LT5pcW1wID0g Qk5fYmluMmJuKGlxbXAsIHNpemVvZihpcW1wKS0xLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4g MTsKLSsgICAgfQotKwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSgpCi0rICAgIHsKLSsgICAgY29y cnVwdF9yc2EgPSAxOwotKyAgICB9Ci0rCi0rLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0 YSBmb3IgdGhlIGFib3ZlIFJTQSBwcml2YXRlIGtleSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsg Ki8KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBG SVBTIDE0MC0yIFB1YmxpYyBLZXkgUlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9QU1NfU0hBMVtdID0gewotKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwg MHg5OCwgMHhGQiwgMHg4QSwgMHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKLSsgIDB4MDEs IDB4MUUsIDB4MzcsIDB4OTMsIDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4 OTAsIDB4QkIsCi0rICAweEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAw eEU4LCAweDBDLCAweEI3LCAweEY4LCAweEQzLAotKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwg MHg4MCwgMHgwNSwgMHhDMywgMHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKLSsgIDB4N0Ys IDB4NDksIDB4RkIsIDB4M0YsIDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4 RDAsIDB4QTcsCi0rICAweDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAw eEUzLCAweDVFLCAweDNGLCAweDlCLCAweEY1LAotKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwg MHg3NCwgMHhDOSwgMHg4MywgMHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLSsgIDB4MEEs IDB4RTksIDB4OEUsIDB4MzgsIDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4 QjcsIDB4MzEsCi0rICAweEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAw eEU2LCAweERCLCAweDlGLCAweEJBLCAweEU4LAotKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywg MHgwOCwgMHhFQSwgMHhENSwgMHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLSsgIDB4MjYs IDB4QzYsIDB4NzksIDB4QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgMHgzOSwg MHg0QSwgMHg2QSwgMHgyMCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1 OCwgMHhBNywKLSsgIDB4RkUsIDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4 ODIsIDB4OTgsIDB4MDgsIDB4OTUsIDB4RkEsCi0rICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAw eDYxLCAweDg3LCAweDIxLCAweDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAotKyAgMHgzMCwg MHg5RCwgMHgwRCwgMHg0QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgx QywgMHg4OSwKLSsgIDB4ODMsIDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4 MTYsIDB4Q0MsIDB4ODYsIDB4MDUsIDB4RUUsCi0rICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAw eDE2LCAweDc1LCAweDBELCAweDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIyLAotKyAgMHgxNSwg MHg3OCwgMHg2QiwgMHg2RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhE MSwgMHhCNSwKLSsgIDB4MzcsIDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4 QkQsIDB4QUEsIDB4MzgsIDB4MjQsIDB4NDksCi0rICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAw eEY0LCAweEI1LCAweDkzLCAweDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJELAotKyAgMHhDOCwg MHg1MiwgMHhGQSwgMHhDRiwgMHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhD MCwgMHgwMCwKLSsgIDB4NTQsIDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4 QzAKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1 NltdID0gewotKyAgMHg2RCwgMHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgx NCwgMHhGMCwgMHgzMSwgMHhFMywgMHg4OSwKLSsgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4 NzEsIDB4MjgsIDB4RTUsIDB4MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYsCi0rICAweDdCLCAw eEM1LCAweEE4LCAweDRBLCAweDc0LCAweDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDcz LCAweDI4LAotKyAgMHhDMSwgMHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgw MCwgMHhBMywgMHg5NiwgMHg3MywgMHg0RSwKLSsgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4 NjgsIDB4OEMsIDB4OEUsIDB4REYsIDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCi0rICAweEFCLCAw eEY1LCAweDAxLCAweEQ2LCAweDgxLCAweDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2 LCAweEJBLAotKyAgMHgyRiwgMHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhE OSwgMHg1QSwgMHhGMywgMHhEQSwgMHhCNiwKLSsgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4 OTAsIDB4REMsIDB4QzgsIDB4RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCi0rICAweDIxLCAw eEI3LCAweDdFLCAweEFELCAweDdDLCAweDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0 LCAweDZELAotKyAgMHg1RiwgMHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhB OSwgMHg5RSwgMHg0OSwgMHhCOSwgMHhGNiwKLSsgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4 ODgsIDB4MUUsIDB4MkQsIDB4MUMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfUFNTX1NIQTM4NFtdID0gewotKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhG NCwgMHhCMiwgMHg0MCwgMHg5QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKLSsgIDB4RUMsIDB4 MUMsIDB4QzQsIDB4QzgsIDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0Qs IDB4NUUsCi0rICAweDg2LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdB LCAweDcxLCAweDQ0LCAweDlBLCAweENELAotKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhG QywgMHhGMCwgMHg3NSwgMHhEOSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKLSsgIDB4NkYsIDB4 MDIsIDB4RUYsIDB4QzEsIDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIs IDB4NkMsCi0rICAweEIyLCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcx LCAweEYzLCAweEFDLCAweDRGLCAweEZCLAotKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhF RiwgMHg2QiwgMHg5RCwgMHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKLSsgIDB4M0EsIDB4 QkUsIDB4ODksIDB4MzgsIDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIs IDB4ODksCi0rICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFD LCAweDg3LCAweDFGLCAweENBLCAweDZGLAotKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0 NSwgMHhFRSwgMHhBRSwgMHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKLSsgIDB4NDgsIDB4 NDQsIDB4RUUsIDB4MUYsIDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTUxMltdID0gewotKyAgMHgwNywgMHgx RSwgMHhEOCwgMHhENSwgMHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2Mywg MHg4QywKLSsgIDB4QzYsIDB4ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYs IDB4OEYsIDB4MTIsIDB4NTMsIDB4OUEsCi0rICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMx LCAweDFELCAweDIzLCAweDRELCAweDUxLCAweEVELCAweDlFLCAweERELAotKyAgMHg0QiwgMHhG MywgMHg0NiwgMHg5QiwgMHg2QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywg MHgzOSwKLSsgIDB4MDEsIDB4MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEs IDB4NjcsIDB4NUYsIDB4RkUsIDB4RDcsCi0rICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERC LCAweDg3LCAweEJCLCAweEYwLCAweDNELCAweDc4LCAweDU1LCAweDYxLAotKyAgMHg1NywgMHhF MywgMHgwRiwgMHhFMywgMHhEMiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwg MHgxMywKLSsgIDB4QzUsIDB4NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUs IDB4OUEsIDB4NkEsIDB4MzksIDB4NjMsCi0rICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERG LCAweDhBLCAweDQ4LCAweDRCLCAweEJGLCAweEY0LCAweEE4LCAweEZFLAotKyAgMHg3NiwgMHhG MiwgMHgzMiwgMHgxQiwgMHg5QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwg MHg4OCwKLSsgIDB4NUMsIDB4OTcsIDB4NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIK LSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0gewot KyAgMHg3MSwgMHhFRSwgMHgxQSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwg MHg1QywgMHhGMiwgMHg0QywKLSsgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQs IDB4QjEsIDB4NkQsIDB4NjEsIDB4MzMsIDB4OEQsIDB4OUIsCi0rICAweEU3LCAweEZELCAweDYw LCAweEEzLCAweDgzLCAweEI1LCAweEEzLCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAot KyAgMHhEQywgMHgyMiwgMHgzNywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywg MHgzRCwgMHgxRSwgMHhGOCwKLSsgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEs IDB4RDcsIDB4NkIsIDB4ODgsIDB4OEIsIDB4OEIsIDB4QTEsCi0rICAweDIwLCAweDIyLCAweEJF LCAweDU5LCAweDVCLCAweEUwLCAweDIzLCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAot KyAgMHhBOSwgMHg5RSwgMHhFOCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwg MHhDQSwgMHgyRSwgMHg0RSwKLSsgIDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4Qjcs IDB4OUYsIDB4MUQsIDB4MDQsIDB4NDQsIDB4RTUsIDB4NUYsCi0rICAweDM1LCAweDA3LCAweDEx LCAweEJDLCAweEVELCAweDE5LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAot KyAgMHg3MiwgMHgwNSwgMHhERSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3Niwg MHg0QiwgMHgyRiwgMHg5NSwKLSsgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDks IDB4NDYsIDB4QjQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff U0hBMjI0W10gPSB7Ci0rICAweDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVG LCAweDhDLCAweEJCLCAweEI3LCAweDE1LCAweEY5LAotKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhE NCwgMHgzQSwgMHgzNCwgMHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgIDB4 NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEs IDB4QzUsIDB4ODksCi0rICAweDA4LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3 LCAweDc2LCAweDMwLCAweDJDLCAweDlFLCAweENELAotKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhC MSwgMHg2RCwgMHg0NCwgMHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgIDB4 RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIs IDB4QTksIDB4Q0MsCi0rICAweERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcw LCAweDg2LCAweDg0LCAweDAyLCAweEM2LCAweDNCLAotKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0 NiwgMHg5NSwgMHhGNCwgMHhGOCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgIDB4 NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYs IDB4RTYsIDB4MzUsCi0rICAweEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDcz LCAweDA0LCAweDc3LCAweDgyLCAweEU2LCAweERDLAotKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4 QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9TSEEyNTZbXSA9IHsKLSsgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4 ODEsIDB4REIsIDB4OEUsIDB4ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCi0rICAweEU3LCAw eDNCLCAweDFELCAweEFGLCAweEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFB LCAweDIzLAotKyAgMHg5MiwgMHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhE QywgMHhCRSwgMHhBRCwgMHg2RiwgMHgzNSwKLSsgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4 QkYsIDB4RDksIDB4OEEsIDB4MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUsCi0rICAweDJDLCAw eDQ0LCAweDlCLCAweDkwLCAweEYxLCAweEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJE LCAweDE4LAotKyAgMHgwRSwgMHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhC MywgMHg1OCwgMHg3QSwgMHg5MSwgMHgzMCwKLSsgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4 RUMsIDB4QzMsIDB4MDksIDB4NUQsIDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCi0rICAweDdDLCAw eDg1LCAweEI0LCAweEJDLCAweEQxLCAweEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2 LCAweDM4LAotKyAgMHhCOCwgMHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3 QywgMHgyQywgMHhFRSwgMHhEMSwgMHhEQSwKLSsgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4 QUIsIDB4QjksIDB4RjcsIDB4ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCi0rICAweEJELCAw eDQ0LCAweDk3LCAweDYwLCAweENELCAweDU3LCAweEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTM4NFtdID0gewotKyAgMHgxRCwgMHhFMywg MHg2QSwgMHhERCwgMHgyNywgMHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgx RiwKLSsgIDB4RDIsIDB4OTEsIDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4 NjMsIDB4NTYsIDB4NDcsIDB4QzcsCi0rICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAw eEY5LCAweDE4LCAweEE5LCAweENBLCAweEZBLCAweDVELCAweDVDLAotKyAgMHhBNywgMHg2NSwg MHg1MiwgMHg4QSwgMHhDOCwgMHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1 NSwKLSsgIDB4NjUsIDB4M0UsIDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4 MjgsIDB4N0YsIDB4QjYsIDB4Q0YsCi0rICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAw eEIxLCAweEJDLCAweEUyLCAweDE5LCAweDJCLCAweDMwLCAweEMyLAotKyAgMHgxQiwgMHgyQiwg MHhCMCwgMHg4MiwgMHg0NiwgMHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4 QywKLSsgIDB4RkYsIDB4OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4 OEYsIDB4OEIsIDB4OUMsIDB4Q0QsCi0rICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAw eDFDLCAweEE3LCAweEVCLCAweEQwLCAweDhGLCAweDk5LCAweEYxLAotKyAgMHgxNiwgMHgyOCwg MHgyNCwgMHg2NCwgMHgwNCwgMHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgw NCwKLSsgIDB4QkQsIDB4MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0r ICAweDY5LCAweDUyLCAweDFCLCAweDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAw eDUxLCAweDVELCAweENGLAotKyAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3Nywg MHg0QywgMHgzNiwgMHg0MCwgMHhGOCwgMHhCMiwgMHg5QSwKLSsgIDB4MTUsIDB4RUEsIDB4NUMs IDB4RTUsIDB4RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0r ICAweDA0LCAweEMxLCAweDVBLCAweDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAw eDU0LCAweDlGLCAweEQ4LAotKyAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5Qywg MHg4MiwgMHgzRiwgMHhBNiwgMHg1MywgMHg2MiwgMHhCNSwKLSsgIDB4ODAsIDB4RTIsIDB4QkMs IDB4REQsIDB4NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0r ICAweEFGLCAweDYyLCAweDdDLCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAw eDFELCAweDQ3LCAweEU2LAotKyAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwg MHg3NywgMHg3OCwgMHgxNiwgMHg2MywgMHg4NCwgMHgwNSwKLSsgIDB4NkYsIDB4MEUsIDB4MkIs IDB4MzEsIDB4OUQsIDB4RjcsIDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0r ICAweDNFLCAweDYyLCAweENFLCAweEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAw eDk4LCAweDY1LCAweDkxLAotKyAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwg MHhBQiwgMHg4NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9Y OTMxX1NIQTFbXSA9IHsKLSsgIDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4 QjYsIDB4N0MsIDB4NDIsIDB4NDUsIDB4NEQsIDB4REYsCi0rICAweEU5LCAweDJELCAweEUxLCAw eDgzLCAweDVGLCAweEI1LCAweDJGLCAweEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAotKyAg MHg4MCwgMHhBNCwgMHhGMSwgMHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgx NCwgMHhCOCwgMHhBQywKLSsgIDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4 MzgsIDB4NEQsIDB4MDQsIDB4RUUsIDB4QTksIDB4OTcsCi0rICAweDcwLCAweEZCLCAweDVFLCAw eEU3LCAweEI3LCAweEUzLCAweDYyLCAweDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAg MHg1MywgMHgxNSwgMHhGNywgMHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgx QSwgMHgxMSwgMHgxOSwKLSsgIDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4 NjMsIDB4MjksIDB4NjMsIDB4MEMsIDB4NTksIDB4RDcsCi0rICAweDZGLCAweDRDLCAweDNDLCAw eDM3LCAweDVCLCAweDM3LCAweDAzLCAweDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAotKyAg MHg0OCwgMHhBRiwgMHg4MiwgMHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhF QSwgMHhFRCwgMHg3NiwKLSsgIDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4 QkEsIDB4MzAsIDB4ODQsIDB4MUMsIDB4QjMsIDB4NjcsCi0rICAweEEzLCAweDI5LCAweDgwLCAw eDcwLCAweDU0LCAweDY4LCAweDdELCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMjU2W10gPSB7Ci0rICAweDdFLCAweEEyLCAweDc3LCAw eEZFLCAweEI4LCAweDU0LCAweDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAg MHhFNSwgMHg1MiwgMHgxNSwgMHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5 MiwgMHgxQywgMHhERCwKLSsgIDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4 MDAsIDB4NDksIDB4MDUsIDB4OTUsIDB4NzMsIDB4Q0YsCi0rICAweDE2LCAweDc2LCAweDY4LCAw eEY2LCAweEM2LCAweDVFLCAweDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAg MHhDNiwgMHg1MywgMHg4OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhC OCwgMHhGMCwgMHg0QiwKLSsgIDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4 RUIsIDB4MjAsIDB4QzQsIDB4MzgsIDB4MEUsIDB4OTgsCi0rICAweEFELCAweDRFLCAweDQ5LCAw eDJDLCAweEQ3LCAweDY1LCAweEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAg MHg3RSwgMHg3NSwgMHg4OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4 RCwgMHhBMCwgMHg4QywKLSsgIDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4 NjksIDB4ODgsIDB4MzUsIDB4QTEsIDB4NDIsIDB4QkQsCi0rICAweDIxLCAweEVELCAweDhELCAw eEJDLCAweEJDLCAweERCLCAweDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAotKyAg MHhFMywgMHhFMiwgMHhFOCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0gewotKyAg MHg1QywgMHg3RCwgMHg5NiwgMHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3 QiwgMHhFQywgMHg3QiwKLSsgIDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4 RDgsIDB4QUUsIDB4RDcsIDB4MzksIDB4MzcsIDB4Q0IsCi0rICAweEU2LCAweDRGLCAweDVFLCAw eDBBLCAweDEzLCAweEU0LCAweDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAotKyAg MHhFRiwgMHg3OCwgMHg4MywgMHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0 QSwgMHg2MywgMHhGNiwKLSsgIDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4 Q0YsIDB4Q0EsIDB4OTksIDB4NjYsIDB4RUUsIDB4MzEsCi0rICAweEQ4LCAweDY5LCAweEU5LCAw eEFCLCAweDEzLCAweDI3LCAweDdCLCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAotKyAg MHgzRSwgMHg5QywgMHgzNSwgMHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2 MCwgMHg0MSwgMHg3OSwKLSsgIDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4 NTMsIDB4RjYsIDB4MzQsIDB4RDUsIDB4N0MsIDB4RkYsCi0rICAweDBFLCAweDA5LCAweEVFLCAw eDJFLCAweEUyLCAweDM3LCAweEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAg MHhFRiwgMHgwMSwgMHhFNiwgMHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhE QywgMHhDNiwgMHg2RCwKLSsgIDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4 NjUsIDB4MjgKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkz MV9TSEE1MTJbXSA9IHsKLSsgIDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4 ODYsIDB4Q0IsIDB4NjQsIDB4M0EsIDB4QzEsIDB4NjMsCi0rICAweEZDLCAweEExLCAweEFBLCAw eENCLCAweDlCLCAweDc5LCAweERELCAweDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAg MHhFNywgMHg0NywgMHgwOSwgMHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5 RSwgMHg3NywgMHhENywKLSsgIDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4 RTYsIDB4MEYsIDB4NUUsIDB4RjksIDB4MTQsIDB4MjgsCi0rICAweEEwLCAweDk5LCAweDc0LCAw eDY0LCAweDcwLCAweDRFLCAweEYyLCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAg MHg2RSwgMHgyQiwgMHg3OSwgMHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1 MywgMHhEMiwgMHhBRiwKLSsgIDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4 MDQsIDB4NzIsIDB4MTAsIDB4RTAsIDB4RjYsIDB4RDAsCi0rICAweENFLCAweDhBLCAweDZGLCAw eEExLCAweDk1LCAweDg5LCAweEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAg MHg5RiwgMHgwOSwgMHhDQSwgMHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgy RCwgMHhGQiwgMHg3QywKLSsgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4 OTIsIDB4NDIsIDB4MTEsIDB4MzAsIDB4NzEsIDB4MUIsCi0rICAweDYwLCAweDgzLCAweDE4LCAw eDg4LCAweEEzLCAweEY1LCAweDU5LCAweEMzCi0rfTsKLSsKLSsKLStpbnQgRklQU19zZWxmdGVz dF9yc2EoKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlSU0EgKmtleTsKLSsJRVZQX1BLRVkgKnBr ID0gTlVMTDsKLSsKLSsJaWYgKChrZXk9UlNBX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7 Ci0rCXNldHJzYWtleShrZXkpOwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQot KwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX2Fzc2lnbl9SU0EocGssIGtleSk7Ci0rCi0rCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAotKwkJCQlrYXRfUlNBX1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAotKwkJCQlFVlBf c2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTEgUEtDUyMx IikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGth dF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yo a2F0X1JTQV9TSEEyMjQpLAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURf UEtDUzEsCi0rCQkJCSJSU0EgU0hBMjI0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICgh Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAx LAotKwkJCQlrYXRfUlNBX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKLSsJCQkJRVZQ X3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTI1NiBQ S0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEzODQsIHNp emVvZihrYXRfUlNBX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFH X1BBRF9QS0NTMSwKLSsJCQkJIlJTQSBTSEEzODQgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKwkJ CQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hB NTEyIFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BT U19TSEExLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMSksCi0rCQkJCUVWUF9zaGExKCksIEVWUF9N RF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTEgUFNTIikpCi0rCQlnb3RvIGVycjsK LSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NI QTIyNCksCi0rCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJ CSJSU0EgU0hBMjI0IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNB X1BTU19TSEEyNTYsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyNTYpLAotKwkJCQlFVlBfc2hhMjU2 KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywg c2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0 X1JTQV9QU1NfU0hBMzg0KSwKLSsJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BTUywKLSsJCQkJIlJTQSBTSEEzODQgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0r CQkJCWthdF9SU0FfUFNTX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCi0rCQkJ CUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBNTEy IFBTUyIpKQotKwkJZ290byBlcnI7Ci0rCi0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9T SEExLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTEpLAotKwkJCUVWUF9zaGExKCksIEVWUF9NRF9D VFhfRkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNIQTEgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0r CS8qIE5COiBTSEEyMjQgbm90IHN1cHBvcnRlZCBpbiBYOS4zMSAqLwotKwlpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlr YXRfUlNBX1g5MzFfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCi0rCQkJRVZQ X3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEyNTYgWDkz MSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNp emVvZihrYXRfUlNBX1g5MzFfU0hBMzg0KSwKLSsJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhf RkxBR19QQURfWDkzMSwKLSsJCQkiUlNBIFNIQTM4NCBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCi0rCQkJa2F0X1JTQV9YOTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1 MTIpLAotKwkJCUVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJS U0EgU0hBNTEyIFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlyZXQgPSAxOwotKwotKwll cnI6Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChrZXkpCi0r CQlSU0FfZnJlZShrZXkpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmIC8qIGRlZiBP UEVOU1NMX0ZJUFMgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMv Zmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlw c19yc2FfeDkzMWcuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19y c2FfeDkzMWcuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzk5Mjk0OTM5ICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMTItMDIt MjkgMTA6MzM6MDIuNzk5Mjk0OTM5ICswMTAwCi1AQCAtMCwwICsxLDI4MiBAQAotKy8qIGNyeXB0 by9yc2EvcnNhX2dlbi5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2Fz IHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICog VGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVz ZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRv LiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQg aW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVT LCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRp b24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhl IHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0g SHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMg RXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0 aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVz ZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgot KyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICog VGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBz dGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3Zp ZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQot KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdv cmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRo ZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRl ZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAo b3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5 IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VD SCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBm b3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9m IHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1w bHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNl bmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsj aW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHRpbWUu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rZXh0ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJz YSk7Ci0rI2VuZGlmCi0rCi0rLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0 aW9uICovCi0rCi0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwg QklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhw MSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVN ICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJ R05VTSAqZSwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwq cjI9TlVMTCwqcjM9TlVMTDsKLSsJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1OVUxMOwotKwotKwlp ZiAoIXJzYSkgCi0rCQlnb3RvIGVycjsKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAo IWN0eCkgCi0rCQlnb3RvIGVycjsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCi0rCXIwID0gQk5f Q1RYX2dldChjdHgpOwotKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjIgPSBCTl9DVFhfZ2V0 KGN0eCk7Ci0rCXIzID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAocjMgPT0gTlVMTCkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoIXJzYS0+ZSkKLSsJCXsKLSsJCXJzYS0+ZSA9IEJOX2R1cChlKTsK LSsJCWlmICghcnNhLT5lKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwllbHNlCi0rCQllID0gcnNh LT5lOwotKwotKwkvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0 ZSB3aGF0IHdlIGNhbi4KLSsJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQg c2VsZWN0aXZlIHBhcmFtZXRlcnMuCi0rCSAqLwotKwotKwlpZiAoWHAgJiYgIXJzYS0+cCkKLSsJ CXsKLSsJCXJzYS0+cCA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnApCi0rCQkJZ290byBlcnI7 Ci0rCi0rCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAotKwkJ CQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJ aWYgKFhxICYmICFyc2EtPnEpCi0rCQl7Ci0rCQlyc2EtPnEgPSBCTl9uZXcoKTsKLSsJCWlmICgh cnNhLT5xKQotKwkJCWdvdG8gZXJyOwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChy c2EtPnEsIHExLCBxMiwKLSsJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikpCi0rCQkJZ290 byBlcnI7Ci0rCQl9Ci0rCi0rCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQl7Ci0rCQlCTl9D VFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJcmV0dXJuIDI7Ci0rCQl9Ci0r Ci0rCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxs IHJlbWFpbmluZyAKLSsJICogY29tcG9uZW50cy4KLSsJICovCi0rCi0rCS8qIGNhbGN1bGF0ZSBu ICovCi0rCXJzYS0+bj1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+biA9PSBOVUxMKQotKwkJZ290byBl cnI7Ci0rCWlmICghQk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkpCi0rCQlnb3RvIGVy cjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgKi8KLSsJaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3Zh bHVlX29uZSgpKSkKLSsJCWdvdG8gZXJyOwkvKiBwLTEgKi8KLSsJaWYgKCFCTl9zdWIocjIscnNh LT5xLEJOX3ZhbHVlX29uZSgpKSkKLSsJCWdvdG8gZXJyOwkvKiBxLTEgKi8KLSsJaWYgKCFCTl9t dWwocjAscjEscjIsY3R4KSkKLSsJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCi0rCi0rCWlm ICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9k aXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKLSsJCWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0x KSkgKi8KLSsKLSsJY3R4MiA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgyKQotKwkJZ290byBl cnI7Ci0rCi0rCXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyog ZCAqLwotKwlpZiAocnNhLT5kID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3Vs YXRlIGQgbW9kIChwLTEpICovCi0rCXJzYS0+ZG1wMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ZG1w MSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQs cjEsY3R4KSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8K LSsJcnNhLT5kbXExPUJOX25ldygpOwotKwlpZiAocnNhLT5kbXExID09IE5VTEwpCi0rCQlnb3Rv IGVycjsKLSsJaWYgKCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgpKQotKwkJZ290byBl cnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KLSsJcnNhLT5pcW1w PUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKLSsKLSsJZXJyOgotKwlp ZiAoY3R4KQotKwkJewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsK LSsJCX0KLSsJaWYgKGN0eDIpCi0rCQlCTl9DVFhfZnJlZShjdHgyKTsKLSsJLyogSWYgdGhpcyBp cyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8KLSsJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0g TlVMTCkKLSsJCXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwotK2ludCBSU0Ff WDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUs IEJOX0dFTkNCICpjYikKLSsJewotKwlpbnQgb2sgPSAwOwotKwlCSUdOVU0gKlhwID0gTlVMTCwg KlhxID0gTlVMTDsKLSsJQk5fQ1RYICpjdHggPSBOVUxMOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBT X0FMTE9XKSAmJiAKLSsJCShiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRT KSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9F WCxGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsKLSsJ aWYgKGJpdHMgJiAweGZmKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFf R0VORVJBVEVfS0VZX0VYLEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOwotKwkgICAgcmV0dXJu IDA7Ci0rCSAgICB9Ci0rCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0r CSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0ZJUFNf U0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKyNlbmRpZgotKwot KwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4KQotKwkJZ290byBlcnJvcjsKLSsKLSsJ Qk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCVhwID0gQk5fQ1RYX2dldChjdHgpOwotKwlYcSA9IEJOX0NU WF9nZXQoY3R4KTsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEsIGJpdHMsIGN0 eCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJcnNhLT5xID0g Qk5fbmV3KCk7Ci0rCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQlnb3RvIGVycm9yOwotKwot KwkvKiBHZW5lcmF0ZSB0d28gcHJpbWVzIGZyb20gWHAsIFhxICovCi0rCi0rCWlmICghQk5fWDkz MV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhwLAot KwkJCQkJZSwgY3R4LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIUJOX1g5MzFfZ2Vu ZXJhdGVfcHJpbWVfZXgocnNhLT5xLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcSwKLSsJCQkJ CWUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJLyogU2luY2UgcnNhLT5wIGFuZCBy c2EtPnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCi0rCSAqIHJlbWFpbmlu ZyBSU0EgY29tcG9uZW50cy4KLSsJICovCi0rCi0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4KHJz YSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgZSwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQotKwkgICAgZ290byBlcnJvcjsKLSsjZW5k aWYKLSsKLSsJb2sgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJOX0NU WF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCi0rCWlmIChvaykKLSsJ CXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wMi0yOSAx MDozMzowMi43OTkyOTQ5MzkgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9m aXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMJMjAxMi0wMi0yOSAxMDozMzowMi43OTkyOTQ5MzkgKzAx MDAKLUBAIC0wLDAgKzEsMTQwIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lu Y2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RbXVs2MF09Ci0rICAgIHsKLSsgICAg IiIsCi0rICAgICJhYmMiLAotKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtp amtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCi0rICAgIH07Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgcmV0W11bU0hBX0RJR0VTVF9MRU5HVEhdPQotKyAgICB7Ci0rICAgIHsgMHhkYSww eDM5LDB4YTMsMHhlZSwweDVlLDB4NmIsMHg0YiwweDBkLDB4MzIsMHg1NSwKLSsgICAgICAweGJm LDB4ZWYsMHg5NSwweDYwLDB4MTgsMHg5MCwweGFmLDB4ZDgsMHgwNywweDA5IH0sCi0rICAgIHsg MHhhOSwweDk5LDB4M2UsMHgzNiwweDQ3LDB4MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwKLSsgICAg ICAweDI1LDB4NzEsMHg3OCwweDUwLDB4YzIsMHg2YywweDljLDB4ZDAsMHhkOCwweDlkIH0sCi0r ICAgIHsgMHg4NCwweDk4LDB4M2UsMHg0NCwweDFjLDB4M2IsMHhkMiwweDZlLDB4YmEsMHhhZSwK LSsgICAgICAweDRhLDB4YTEsMHhmOSwweDUxLDB4MjksMHhlNSwweGU1LDB4NDYsMHg3MCwweGYx IH0sCi0rICAgIH07Ci0rCi0rc3RhdGljIGludCBjb3JydXB0X3NoYTsKLSsKLSt2b2lkIEZJUFNf Y29ycnVwdF9zaGExKCkKLSsgICAgewotKyAgICBjb3JydXB0X3NoYSA9IDE7Ci0rICAgIH0KLSsK LStpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAg Zm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsrbikKLSsJewotKwl1 bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKLSsKLSsJRVZQX0RpZ2VzdCh0ZXN0 W25dLHN0cmxlbih0ZXN0W25dKStjb3JydXB0X3NoYSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVM TCk7Ci0rCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6ZW9mIG1kKSkKLSsJICAgIHsKLSsJICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK LSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwl9Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTI1NltdID0geyAweGZhLCAweDQ4 LCAweDU5LCAweDJhLCAweGUxLCAweGFlLCAweDFmLCAweDMwLAotKwkJCQkJICAgIDB4ZmMgfTsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhMjU2W10gPSB7IDB4ZjcsIDB4MjYs IDB4ZDgsIDB4OTgsIDB4NDcsIDB4OTEsIDB4NjgsIDB4NWIsCi0rCQkJCQkgICAgMHg5ZSwgMHgz OSwgMHhiMiwgMHg1OCwgMHhiYiwgMHg3NSwgMHhiZiwgMHgwMSwKLSsJCQkJCSAgICAweDE3LCAw eDBjLCAweDg0LCAweDAwLCAweDAxLCAweDdhLCAweDk0LCAweDgzLAotKwkJCQkJICAgIDB4ZjMs IDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4NjksIDB4ODgsIDB4OGEgfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhNTEyW10gPSB7IDB4MzcsIDB4ZDEsIDB4MzUsIDB4 OWQsIDB4MTgsIDB4NDEsIDB4ZTksIDB4YjcsCi0rCQkJCQkgICAgMHg2ZCwgMHg5YSwgMHgxMywg MHhkYSwgMHg1ZiwgMHhmMywgMHhiZCB9OwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRp Z19zaGE1MTJbXSA9IHsgMHgxMSwgMHgxMywgMHhjNCwgMHgxOSwgMHhlZCwgMHgyYiwgMHgxZCwg MHgxNiwKLSsJCQkJCSAgICAweDExLCAweGViLCAweDliLCAweGJlLCAweGYwLCAweDdmLCAweGNm LCAweDQ0LAotKwkJCQkJICAgIDB4OGIsIDB4ZDcsIDB4NTcsIDB4YmQsIDB4OGQsIDB4YTksIDB4 MjUsIDB4YjAsCi0rCQkJCQkgICAgMHg0NywgMHgyNSwgMHhkNiwgMHg2YywgMHg5YSwgMHg1NCwg MHg3ZiwgMHg4ZiwKLSsJCQkJCSAgICAweDBiLCAweDUzLCAweDFhLCAweDEwLCAweDY4LCAweDMy LCAweDAzLCAweDM4LAotKwkJCQkJICAgIDB4ODIsIDB4YzQsIDB4ODcsIDB4YzQsIDB4ZWEsIDB4 MGUsIDB4ZDEsIDB4MDQsCi0rCQkJCQkgICAgMHhhOSwgMHg5OCwgMHhjMSwgMHgwNSwgMHhhMywg MHhmMywgMHhmOCwgMHhiMSwKLSsJCQkJCSAgICAweGFmLCAweGJjLCAweGQ5LCAweDc4LCAweDdl LCAweGVlLCAweDNkLCAweDQzIH07Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKQot Kwl7Ci0rCXVuc2lnbmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOwotKwotKwlFVlBf RGlnZXN0KG1zZ19zaGEyNTYsIHNpemVvZihtc2dfc2hhMjU2KSwgbWQsIE5VTEwsIEVWUF9zaGEy NTYoKSwgTlVMTCk7Ci0rCWlmKG1lbWNtcChkaWdfc2hhMjU2LCBtZCwgc2l6ZW9mKGRpZ19zaGEy NTYpKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCi0rCUVWUF9EaWdlc3QobXNnX3No YTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIpLCBtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKTsK LSsJaWYobWVtY21wKGRpZ19zaGE1MTIsIG1kLCBzaXplb2YoZGlnX3NoYTUxMikpKQotKwkJewot KwkJRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7 Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsjZW5kaWYKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2ht YWMuYy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25l X2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFs b25lX2htYWMuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuNzk5Mjk0OTM5ICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jCTIw MTItMDItMjkgMTA6MzM6MDIuNzk5Mjk0OTM5ICswMTAwCi1AQCAtMCwwICsxLDE4MCBAQAotKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlv bi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu Ci0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRl IDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3Bl bnNzbGNvbmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+Ci0rCi0rI2lmbmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpIHsgcmV0dXJuIDA7IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQot K3ZvaWQgT1BFTlNTTF9jbGVhbnNlKHZvaWQgKnAsc2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsK LSsjaWYJZGVmaW5lZChfX2kzODYpICAgfHwgZGVmaW5lZChfX2kzODZfXykgICB8fCBkZWZpbmVk KF9NX0lYODYpIHx8IFwKLSsJZGVmaW5lZChfX0lOVEVMX18pIHx8IFwKLSsJZGVmaW5lZChfX3g4 Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZp bmVkKF9NX1g2NCkKLSsKLSt1bnNpZ25lZCBpbnQgIE9QRU5TU0xfaWEzMmNhcF9QWzJdOwotKyNl bmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgdm9pZCBobWFjX2luaXQo U0hBMjU2X0NUWCAqbWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4LAotKwkJICAgICAgY29uc3QgY2hh ciAqa2V5KQotKyAgICB7Ci0rICAgIHNpemVfdCBsZW49c3RybGVuKGtleSk7Ci0rICAgIGludCBp OwotKyAgICB1bnNpZ25lZCBjaGFyIGtleW1kW0hNQUNfTUFYX01EX0NCTE9DS107Ci0rICAgIHVu c2lnbmVkIGNoYXIgcGFkW0hNQUNfTUFYX01EX0NCTE9DS107Ci0rCi0rICAgIGlmIChsZW4gPiBT SEFfQ0JMT0NLKQotKwl7Ci0rCVNIQTI1Nl9Jbml0KG1kX2N0eCk7Ci0rCVNIQTI1Nl9VcGRhdGUo bWRfY3R4LGtleSxsZW4pOwotKwlTSEEyNTZfRmluYWwoa2V5bWQsbWRfY3R4KTsKLSsJbGVuPVNI QTI1Nl9ESUdFU1RfTEVOR1RIOwotKwl9Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGtleW1kLGtleSxs ZW4pOwotKyAgICBtZW1zZXQoJmtleW1kW2xlbl0sJ1wwJyxITUFDX01BWF9NRF9DQkxPQ0stbGVu KTsKLSsKLSsgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCi0rCXBh ZFtpXT0weDM2XmtleW1kW2ldOwotKyAgICBTSEEyNTZfSW5pdChtZF9jdHgpOwotKyAgICBTSEEy NTZfVXBkYXRlKG1kX2N0eCxwYWQsU0hBMjU2X0NCTE9DSyk7Ci0rCi0rICAgIGZvcihpPTAgOyBp IDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKLSsg ICAgU0hBMjU2X0luaXQob19jdHgpOwotKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LHBhZCxTSEEy NTZfQ0JMT0NLKTsKLSsgICAgfQotKwotK3N0YXRpYyB2b2lkIGhtYWNfZmluYWwodW5zaWduZWQg Y2hhciAqbWQsU0hBMjU2X0NUWCAqbWRfY3R4LFNIQTI1Nl9DVFggKm9fY3R4KQotKyAgICB7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgU0hB MjU2X0ZpbmFsKGJ1ZixtZF9jdHgpOwotKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LGJ1ZixzaXpl b2YgYnVmKTsKLSsgICAgU0hBMjU2X0ZpbmFsKG1kLG9fY3R4KTsKLSsgICAgfQotKwotKyNlbmRp ZgotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyAgICBzdGF0aWMgY2hhciBrZXlbXT0ib3Jib0RlSklUSVRlanNpcnBBRE9O aXZpcnBVa3ZhclAiOwotKyAgICBpbnQgbixiaW5hcnk9MDsKLSsKLSsgICAgaWYoYXJnYyA8IDIp Ci0rCXsKLSsJZnByaW50ZihzdGRlcnIsIiVzIFs8ZmlsZT5dK1xuIixhcmd2WzBdKTsKLSsJZXhp dCgxKTsKLSsJfQotKwotKyAgICBuPTE7Ci0rICAgIGlmICghc3RyY21wKGFyZ3Zbbl0sIi1iaW5h cnkiKSkKLSsJewotKwluKys7Ci0rCWJpbmFyeT0xOwkvKiBlbWl0IGJpbmFyeSBmaW5nZXJwcmlu dC4uLiAqLwotKwl9Ci0rCi0rICAgIGZvcig7IG4gPCBhcmdjIDsgKytuKQotKwl7Ci0rCUZJTEUg KmY9Zm9wZW4oYXJndltuXSwicmIiKTsKLSsJU0hBMjU2X0NUWCBtZF9jdHgsb19jdHg7Ci0rCXVu c2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwlpbnQgaTsKLSsKLSsJaWYo IWYpCi0rCSAgICB7Ci0rCSAgICBwZXJyb3IoYXJndltuXSk7Ci0rCSAgICBleGl0KDIpOwotKwkg ICAgfQotKwotKwlobWFjX2luaXQoJm1kX2N0eCwmb19jdHgsa2V5KTsKLSsJZm9yKCA7IDsgKQot KwkgICAgewotKwkgICAgY2hhciBidWZbMTAyNF07Ci0rCSAgICBzaXplX3QgbD1mcmVhZChidWYs MSxzaXplb2YgYnVmLGYpOwotKwotKwkgICAgaWYobCA9PSAwKQotKwkJewotKwkJaWYoZmVycm9y KGYpKQotKwkJICAgIHsKLSsJCSAgICBwZXJyb3IoYXJndltuXSk7Ci0rCQkgICAgZXhpdCgzKTsK LSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgYnJlYWs7Ci0rCQl9Ci0rCSAgICBTSEEyNTZfVXBk YXRlKCZtZF9jdHgsYnVmLGwpOwotKwkgICAgfQotKwlobWFjX2ZpbmFsKG1kLCZtZF9jdHgsJm9f Y3R4KTsKLSsKLSsJaWYgKGJpbmFyeSkKLSsJICAgIHsKLSsJICAgIGZ3cml0ZShtZCxTSEEyNTZf RElHRVNUX0xFTkdUSCwxLHN0ZG91dCk7Ci0rCSAgICBicmVhazsJLyogLi4uIGZvciBzaW5nbGUo ISkgZmlsZSAqLwotKwkgICAgfQotKwotKy8qCXByaW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2 W25dKTsgKi8KLSsJZm9yKGk9MCA7IGkgPCBTSEEyNTZfRElHRVNUX0xFTkdUSCA7ICsraSkKLSsJ ICAgIHByaW50ZigiJTAyeCIsbWRbaV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsjZW5kaWYK LSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzCTIwMTItMDItMjkgMTA6MzM6MDIuODAw Mjk0OTQ3ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9maXBzX3Rl c3Rfc3VpdGUuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMDI5NDk0NyArMDEwMAotQEAgLTAsMCAr MSw1ODggQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqCi0rICogVGhpcyBj b21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0 aW5nCi0rICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9uc3Ry YXRlcyB0aGUgdXNlIG9mIHRoZQotKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBhIHZh cmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKLSsgKiBmdW5jdGlvbnMuICBBIHBvd2VyLXVw IHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5Ci0rICogcG9pbnRpbmcg dG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKLSsgKgotKyAqIENvbnRyaWJ1dGVkIGJ5IFN0 ZXZlIE1hcnF1ZXNzLgotKyAqCi0rICovCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUg PGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv c2hhLmg+Ci0rCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQotKyAgICB7Ci0rICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsK LSsgICAgcmV0dXJuKDApOwotKyAgICB9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rLyogQUVTOiBlbmNyeXB0IGFuZCBk ZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBs YWludGV4dAotKyovCi0rc3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCi0rCXsKLSsJaW50 IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFyIGNp dG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBrZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwx MCwxMSwxMiwxMywxNCwxNSwxNn07Ci0rCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJl dGFvbnJpc2hkbGN1IjsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9p bml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNi KCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBoZXIo JmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0 eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290byBl cnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAxNik7Ci0rCWlmIChtZW1jbXAo cGx0bXAsIHBsYWludGV4dCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVycjoK LSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwot K3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJ dW5zaWduZWQgY2hhciBwbHRtcFs4XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFs4XTsKLSsgICAg CXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0 LDE1LDE2LDE3LDE4LAotKwkJICAgICAgICAgICAgICAxOSwyMCwyMSwyMiwyMywyNH07Ci0rICAg IAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycsICduJywg J3InLCAnaScsICdzJyB9OwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RY X2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNf ZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBo ZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgm Y3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290 byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKLSsJaWYgKG1lbWNt cChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwllcnI6 Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsK LSsvKgotKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWlu dGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewot KyAgICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICB1bnNpZ25lZCBj aGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07 Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBpbnQgciA9IDA7Ci0rICAgIEVWUF9NRF9D VFggbWN0eDsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5p dCgmbWN0eCk7Ci0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsgICAgaWYgKCFkc2EpCi0rCWdvdG8g ZW5kOwotKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxOVUxM LDAsTlVMTCxOVUxMLE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJhdGVf a2V5KGRzYSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dvcmQo ZHNhLT5wdWJfa2V5LCAxKTsKLSsKLSsgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsgICAg cGsucGtleS5kc2EgPSBkc2E7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBF VlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUo Jm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFF VlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsKLSsg ICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdv dG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihk Z3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwg YnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0 eCk7Ci0rICAgIGlmIChkc2EpCi0rICAJICBEU0FfZnJlZShkc2EpOwotKyAgICBpZiAociAhPSAx KQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKgotKyAqIFJTQTog Z2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStz dGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAgICBSU0EgKmtleTsK LSsgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7Ci0rICAg IHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBC SUdOVU0gKmJuOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAg ICBpbnQgciA9IDA7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RY X2luaXQoJm1jdHgpOwotKyAgICBrZXkgPSBSU0FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7 Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJu LCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4sTlVM TCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgaWYgKGJhZCkKLSsJICAg IEJOX2FkZF93b3JkKGtleS0+biwgMSk7Ci0rCi0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7 Ci0rICAgIHBrLnBrZXkucnNhID0ga2V5OwotKwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgm bWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWdu VXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKwln b3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGsp KQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQ X3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUo Jm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8gZW5k OwotKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAg IGVuZDoKLSsgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGtleSkKLSsg IAkgICAgUlNBX2ZyZWUoa2V5KTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAg IHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBk aWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0 IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVu c2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4MTEs IDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4 OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTgg fTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5z aWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJv cigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVMTCwg RVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxz aXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQot KwotKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNv bXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRp YyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdl c3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KLSsJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4YjgsIDB4 Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhlYSwg MHg0MCwgMHg5MSwKLSsJIDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwg MHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307Ci0r ICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVk IGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVW UF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxz aXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQot KwotKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNv bXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRp YyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdl c3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KLSsJezB4OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4 ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4NjQs IDB4MjgsIDB4Y2EsCi0rCSAweDE2LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAweDBm LCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRhLAot KwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwg MHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKLSsJIDB4NDksIDB4NTQs IDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsIDB4 ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0g ImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVO R1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChz dHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1cm4g MDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTE6IGdlbmVyYXRl IGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJl Y29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGExX3Rl c3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNo YXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDczLCAweGY3LCAweGEwLCAweDQ4LCAw eGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAweDYx LCAweDJlLCAweDcwLAotKwkgMHhiMiwgMHhmYiwgMHhlYywgMHhjNn07Ci0rCi0rICAgIHVuc2ln bmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47 Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEoKSxr ZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsK LSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwot KyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNo IG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1 dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rlc3Qo KQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAg IHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIg a2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAweDU1 LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYwLCAw eDIwLCAweDM1LAotKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhmYywg MHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0 W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVS Ul9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXplb2Yo a2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAo bWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVy biAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24g ZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVj dCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCi0rICAgIHsK LSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQg Y2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBf TUFYX01EX1NJWkVdID0KLSsJezB4ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4 NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcs Ci0rCSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlm LCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0LCAweGY0fTsKLSsKLSsgICAgdW5z aWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxl bjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMjU2 KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJu IDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTM4NDogZ2VuZXJhdGUg aGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVj b21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4NF90 ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwot KyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBj aGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwg MHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwgMHhl ZiwgMHgzYiwgMHgxMCwKLSsJIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4 MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4MDgs Ci0rCSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAweGZi LCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4LCAweDFjfTsKLSsKLSsgICAgdW5z aWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxl bjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMzg0 KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJu IDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTUxMjogZ2VuZXJhdGUg aGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVj b21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUxMl90 ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwot KyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBj aGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1MSwg MHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwgMHg4 NSwgMHhhOSwgMHhlNiwKLSsJIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4 OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEs Ci0rCSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBi LCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAweGViLCAweDljLAotKwkgMHg0NywgMHg4 NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5Niwg MHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0 W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVS Ul9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXplb2Yo a2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBpZiAo bWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVy biAxOwotKyAgICB9Ci0rCi0rCi0rLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJzCi0r Ki8KLStzdGF0aWMgaW50IGRoX3Rlc3QoKQotKyAgICB7Ci0rICAgIERIICpkaDsKLSsgICAgRVJS X2NsZWFyX2Vycm9yKCk7Ci0rICAgIGRoID0gRklQU19kaF9uZXcoKTsKLSsgICAgaWYgKCFkaCkK LSsJcmV0dXJuIDA7Ci0rICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwgMTAy NCwgMiwgTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBGSVBTX2RoX2ZyZWUoZGgpOwotKyAgICBy ZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFplcm9pemUKLSsqLwotK3N0YXRpYyBpbnQgWmVyb2l6 ZSgpCi0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIHVuc2ln bmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKLSsJeyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAweDNh LCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIxLCAw eDA5LCAweDY4IH07Ci0rICAgIGludCBpLCBuOwotKwotKyAgICBrZXkgPSBGSVBTX3JzYV9uZXco KTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1cm4g MDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJhdGVf a2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUoYm4p OwotKyAgICAKLSsgICAgbiA9IEJOX251bV9ieXRlcyhrZXktPmQpOwotKyAgICBwcmludGYoIiBH ZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4pOwotKyAgICBwcmludGYoIlx0 Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQs IGtleS0+ZCk7Ci0rICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwtMSwwKTsKLSsgICAgcHJpbnRmKCJc dEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQs IGtleS0+ZCk7Ci0rCi0rICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3 cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBp KyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIpOwot KyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vya2V5KTsKLSsgICAgcHJpbnRmKCJc dGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZvcihp ID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ld KTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsK LStzdGF0aWMgaW50IEVycm9yOwotK2NvbnN0IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1zZykK LSsgICAgewotKyAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgRXJyb3IrKzsKLSsgICAgcmV0 dXJuIG1zZzsgCi0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsg ICAgewotKwotKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9k c2Ffa2V5Z2VuID0gMDsKLSsgICAgaW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKLSsgICAg aW50IGRvX3JuZ19zdGljayA9IDA7Ci0rICAgIGludCBub19leGl0ID0gMDsKLSsKLSsgICAgcHJp bnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIpOwotKwotKyAgICAvKiBMb2Fk IGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8KLSsgICAgUkFORF9sb2FkX2Zp bGUoIi5ybmQiLCAxMDI0KTsKLSsKLSsgICAgaWYgKGFyZ3ZbMV0pIHsKLSsgICAgICAgIC8qIENv cnJ1cHRlZCBLQVQgdGVzdHMgKi8KLSsgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMi KSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMoKTsKLSsgICAgICAgICAgICBwcmlu dGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsK LSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKLSsgICAgICAg ICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBl bmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikpIHsKLSsgICAgICAgICAgICBGSVBT X2NvcnJ1cHRfZHNhKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24g YW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAg ICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYSIpKSB7Ci0rICAgICAgICAgICAg RklQU19jb3JydXB0X3JzYSgpOwotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0 aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwot KyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgewotKyAgICAg ICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlv biB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAgYmFkX3JzYSA9IDE7Ci0rCSAgICBu b19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5 Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7Ci0rCSAgICBub19leGl0 ID0gMTsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0 dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKLSsgICAgICAgIH0g ZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5IikpIHsKLSsgICAgICAgICAgICBwcmlu dGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3Jy dXB0ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJhZF9kc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7 Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7Ci0r CSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rICAg ICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0 aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFz dHJjbXAoYXJndlsxXSwgInNoYTEiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9zaGEx KCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtBVC4u LlxuIik7Ci0rCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKLSsJICAgIEZJ UFNfY29ycnVwdF9ybmcoKTsKLSsJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdzdGlj ayIpKSB7Ci0rCSAgICBkb19ybmdfc3RpY2sgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0rCSAg ICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsKLSsg ICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIlc1wi XG4iLCBhcmd2WzFdKTsKLSsgICAgICAgICAgICBleGl0KDEpOwotKyAgICAgICAgfQotKwlpZiAo IW5vX2V4aXQpIHsKLSsgICAgICAgIAlpZiAoIUZJUFNfbW9kZV9zZXQoMSkpIHsKLSsgCQkgICAg ZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAgICAJICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0 ZXN0IGZhaWxlZFxuIik7Ci0rCQkgICAgZXhpdCgxKTsKLSsJCX0KLSsgICAgICAgIAlwcmludGYo IlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsKLSsgICAgICAgIAlleGl0KDApOwot Kwl9Ci0rICAgIH0KLSsKLSsgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0 aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMg b3BlcmF0aW9uIHRlc3QuLi5cbiIpOwotKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3Jp dGhtIChELUgpLi4uIik7Ci0rICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0Ci0r ICAgICovCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBwcmludGYoIjIuIEF1dG9tYXRp YyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKLSsgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEpKQot Kwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxFRCFc biIpKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOwotKyAg ICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9k c2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19jb3JydXB0X3JzYV9rZXlnZW4pCi0rICAgICAgICAg ICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX3JuZ19zdGljaykKLSsg ICAgICAgICAgICBGSVBTX3JuZ19zdGljaygpOwotKwotKyAgICAvKiBBRVMgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVjcnlw dGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBh bmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNC4gUlNBIGtl eSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRm KCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVE IVxuIikgKTsKLSsKLSsgICAgLyogREVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAg Ki8KLSsgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwot KyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJG QUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVy ZSB2YWxpZGF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9u IGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfZHNhX3Rl c3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwot KyAgICAvKiBTSEEtMSBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2EuIFNIQS0xIGhhc2gu Li4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAg RmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTI1NiBoYXNoCi0rICAgICovCi0r ICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hh MjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0r ICAgIC8qIFNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhh c2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxu IiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0xIGhhc2gKLSsg ICAgKi8KLSsgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50 ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVE IVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjI0IGhhc2gKLSsgICAgKi8KLSsgICAgcHJp bnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNf c2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0r Ci0rICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2YuIEhN QUMtU0hBLTI1NiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBI TUFDLVNIQS0zODQgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQg aGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1Y2Nl c3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtNTEy IGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsK LSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDog IEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFw aGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlw dG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIEluY2x1 ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNj ZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFc biIpICk7Ci0rCi0rICAgIC8qIFplcm9pemF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiOS4g WmVyby1pemF0aW9uLi4uXG4iKTsKLSsgICAgcHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNjZXNz ZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZIVxu IikgKTsKLSsKLSsgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJv cnNcbiIsIEVycm9yKTsKLSsgICAgcmV0dXJuIEVycm9yID8gMSA6IDA7Ci0rICAgIH0KLSsKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2ZpcHMvTWFrZWZpbGUu ZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9maXBzL01ha2VmaWxlCi0tLS0gb3BlbnNz bC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzCTIwMTItMDItMjkgMTA6MzM6 MDIuODAwMjk0OTQ3ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vZmlwcy9N YWtlZmlsZQkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMDI5NDk0NyArMDEwMAotQEAgLTAsMCArMSwz NDAgQEAKLSsjCi0rIyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCi0rIwotKwotK0RJUj0J ZmlwcwotK1RPUD0JLi4vLi4KLStDQz0JY2MKLStJTkNMVURFUz0KLStDRkxBRz0tZwotK01BS0VG SUxFPQlNYWtlZmlsZQotK0FSPQkJYXIgcgotKwotK0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxB RykKLSsKLStHRU5FUkFMPU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBzX3Jh bmR0ZXN0LmMKLStBUFBTPQotKwotK1BST0dSQU09IGZpcHNfc3RhbmRhbG9uZV9obWFjCi0rRVhF PSAkKFBST0dSQU0pJChFWEVfRVhUKQotKwotK0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKLStMSUJT UkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxm dGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBm aXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5jICBmaXBzX3JhbmQu YyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMgZmlwc19wb3N0LmMgZmlwc19kcmJnX2N0ci5jIGZp cHNfZHJiZ19oYXNoLmMgZmlwc19kcmJnX2htYWMuYyBcCi0rICAgIGZpcHNfZHJiZ19saWIuYyBm aXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxmdGVzdC5jIGZpcHNfcmFuZF9saWIuYyBcCi0r ICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5jCi0rCi0rTElCT0JK PWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBzX2htYWNfc2VsZnRl c3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8gZmlw c19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5kLm8g XAotKyAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNfcG9zdC5vIGZpcHNfZHJiZ19jdHIubyBmaXBz X2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8gXAotKyAgICBmaXBzX2RyYmdfbGliLm8gZmlw c19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRlc3QubyBmaXBzX3JhbmRfbGliLm8gXAotKyAg ICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubwotKwotK0xJQkNSWVBU Tz0tTC4uIC1sY3J5cHRvCi0rCi0rU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFsb25lX2htYWMu YwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLStIRUFERVI9CSQoRVhIRUFERVIp Ci0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSsKLSt0b3A6Ci0rCShj ZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKLSsKLSth bGw6CWxpYiBleGUKLSsKLStsaWI6CSQoTElCT0JKKQotKwkkKEFSKSAkKExJQikgJChMSUJPQkop Ci0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotKwlAdG91Y2ggbGliCi0r Ci0rZXhlOgkkKEVYRSkKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5w bCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVSTCkgJChUT1Ap L3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotKwlAJChQ RVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0rCUAkKFBFUkwp ICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStpbnN0YWxsOgot KwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxl Li4uCi0rCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7 IFwKLSsJZG8gIFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5j bHVkZS9vcGVuc3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RB TExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwotK3RhZ3M6Ci0rCWN0 YWdzICQoU1JDKQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5UICQoSU5DTFVE RVMpICQoU1JDKT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0g IyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURFUEVORCkgLS0g JChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLSsK LStkY2xlYW46Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5F Lykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLSsJbXYgLWYg TWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICoubyAqLm9iaiBs aWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0rJChFWEUpOiAk KFBST0dSQU0pLm8KLSsJRklQU19TSEFfQVNNPSIiOyBmb3IgaSBpbiAkKFNIQTFfQVNNX09CSikg c2hhMjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vc2hhLyQkaSIgOyBk b25lOyBcCi0rCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKFBST0dSQU0pLm8gJCRGSVBTX1NIQV9B U00KLSsKLSsjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMg b24gaXQuCi0rCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwcy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9obWFjLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzLmMgZmlwc19sb2NsLmgKLStmaXBzX2Flc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlw c19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2Fl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19hZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfYWVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19hZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2Flc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfYWVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfYWVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19hZXNfc2VsZnRlc3Qu YwotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19kZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK LStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBm aXBzX2Rlc19zZWxmdGVzdC5jCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19jdHIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfZHJi Z19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK LStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStmaXBzX2RyYmdf Y3RyLm86IGZpcHNfZHJiZ19jdHIuYyBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfaGFzaC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX2RyYmdf aGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kcmJnX2hhc2gubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2Zp cHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlw c19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2Ry YmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3Mu aCBmaXBzX2RyYmdfaGFzaC5jCi0rZmlwc19kcmJnX2hhc2gubzogZmlwc19yYW5kX2xjbC5oCi0r Zmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX2htYWMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2Zp cHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNf ZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2htYWMuYwotK2ZpcHNfZHJiZ19obWFjLm86IGZp cHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fl cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStm aXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1h Yy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v c3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmgKLStmaXBzX2RyYmdfbGliLm86IGZpcHNfZHJiZ19saWIuYyBmaXBzX2xvY2wuaCBmaXBzX3Jh bmRfbGNsLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBz X2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStm aXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19k cmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kcmJnX3Jh bmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cmFuZC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStm aXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Ry YmdfcmFuZC5jCi0rZmlwc19kcmJnX3JhbmQubzogZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0r Zmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAot K2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlw c19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNf ZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNf ZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNf ZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJn X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHJiZ19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfc2Vs ZnRlc3QuYwotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiBmaXBzX2RyYmdfc2VsZnRlc3QuaCBmaXBz X2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfZHNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHNhX3NlbGZ0ZXN0LmMKLStmaXBzX2RzYV9zZWxmdGVz dC5vOiBmaXBzX2xvY2wuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfaG1hY19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2htYWNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2htYWNfc2VsZnRlc3QuYwotK2ZpcHNfcG9zdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9k c2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19w b3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHNfcmFuZC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlw c19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19wb3N0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNf cG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2xvY2wuaCBmaXBz X3Bvc3QuYwotK2ZpcHNfcmFuZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Flcy5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAotK2ZpcHNfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0r Zmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9o bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5o Ci0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlw c19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9y YW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oCi0rZmlwc19yYW5kLm86IGZpcHNfbG9jbC5oIGZpcHNfcmFuZC5jCi0rZmlwc19yYW5kX2xp Yi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oCi0rZmlwc19yYW5k X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9iaW8uaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19y YW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcmFuZF9saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19yYW5kX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3JhbmRfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oCi0rZmlwc19yYW5kX2xpYi5vOiBmaXBzX3JhbmRfbGliLmMKLStmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBz X3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzX3Jh bmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3JhbmRf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19yYW5k X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yYW5k X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19yYW5k X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX3JhbmRfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19yYW5kX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfbG9jbC5oCi0rZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IGZpcHNfcmFuZF9zZWxmdGVzdC5jCi0rZmlwc19yc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStm aXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cnNhLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0 YWNrLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5o IGZpcHNfcnNhX3NlbGZ0ZXN0LmMKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcnNhX3g5MzFn Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcnNh X3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yc2FfeDkz MWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3JzYS5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK LStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBz X3JzYV94OTMxZy5jCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgK LStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3NoYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3NoYV9zZWxmdGVzdC5j Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2htYWMvaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDExLTA2LTEyIDE3OjA3OjI2LjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL2htYWMvaG1hYy5jCTIwMTIt MDItMjkgMTA6MzM6MDIuODAwMjk0OTQ3ICswMTAwCi1AQCAtODEsMTEgKzgxLDYgQEAgaW50IEhN QUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bwotIAkJCUVWUGVycihFVlBfRl9ITUFD X0lOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSAJCQlyZXR1cm4gMDsKLSAJCQl9 Ci0tCQkvKiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21h Y19pbml0LAotLQkJICogdmlhIEZJUFNfaG1hY19pbml0X2V4KCkuCi0tCQkgKi8KLS0JCWlmICgh aW1wbCAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tCQkJcmV0dXJuIEZJUFNfaG1hY19pbml0X2V4 KGN0eCwga2V5LCBsZW4sIG1kLCBOVUxMKTsKLSAJCX0KLSAjZW5kaWYKLSAKLUBAIC05OSw2ICs5 NCwxMyBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCi0gCi0gCWlm IChrZXkgIT0gTlVMTCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19t b2RlKCkgJiYgIShtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQotKwkJJiYgKCEoY3R4LT5t ZF9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkgfHwgIShj dHgtPmlfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJIHx8 ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpKQot KwkJCWdvdG8gZXJyOwotKyNlbmRpZgotIAkJcmVzZXQ9MTsKLSAJCWo9RVZQX01EX2Jsb2NrX3Np emUobWQpOwotIAkJT1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOwot QEAgLTE1NSwxMCArMTU3LDYgQEAgaW50IEhNQUNfSW5pdChITUFDX0NUWCAqY3R4LCBjb25zdCB2 b2lkCi0gCi0gaW50IEhNQUNfVXBkYXRlKEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmRhdGEsIHNpemVfdCBsZW4pCi0gCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChG SVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tCQlyZXR1cm4gRklQU19obWFjX3Vw ZGF0ZShjdHgsIGRhdGEsIGxlbik7Ci0tI2VuZGlmCi0gCXJldHVybiBFVlBfRGlnZXN0VXBkYXRl KCZjdHgtPm1kX2N0eCxkYXRhLGxlbik7Ci0gCX0KLSAKLUBAIC0xNjYsMTAgKzE2NCw2IEBAIGlu dCBITUFDX0ZpbmFsKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGMKLSAJewotIAl1bnNpZ25lZCBp bnQgaTsKLSAJdW5zaWduZWQgY2hhciBidWZbRVZQX01BWF9NRF9TSVpFXTsKLS0jaWZkZWYgT1BF TlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tCQly ZXR1cm4gRklQU19obWFjX2ZpbmFsKGN0eCwgbWQsIGxlbik7Ci0tI2VuZGlmCi0gCi0gCWlmICgh RVZQX0RpZ2VzdEZpbmFsX2V4KCZjdHgtPm1kX2N0eCxidWYsJmkpKQotIAkJZ290byBlcnI7Ci1A QCAtMjA5LDEzICsyMDMsNiBAQCBpbnQgSE1BQ19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1B Q19DCi0gCi0gdm9pZCBITUFDX0NUWF9jbGVhbnVwKEhNQUNfQ1RYICpjdHgpCi0gCXsKLS0jaWZk ZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUp Ci0tCQl7Ci0tCQlGSVBTX2htYWNfY3R4X2NsZWFudXAoY3R4KTsKLS0JCXJldHVybjsKLS0JCX0K LS0jZW5kaWYKLSAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPmlfY3R4KTsKLSAJRVZQX01EX0NU WF9jbGVhbnVwKCZjdHgtPm9fY3R4KTsKLSAJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPm1kX2N0 eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL21kMi9tZDJfZGdzdC5jCi0tLS0gb3BlbnNz bC0xLjAuMS1iZXRhMy9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5 OjQzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL21kMi9t ZDJfZGdzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuODAwMjk0OTQ3ICswMTAwCi1AQCAtNjIsNiAr NjIsMTEgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3Nsdi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0gCi0gY29uc3QgY2hhciBNRDJfdmVyc2lvbltdPSJNRDIiIE9QRU5T U0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC0xMTYsNyArMTIxLDcgQEAgY29uc3QgY2hhciAqTUQy X29wdGlvbnModm9pZCkKLSAJCXJldHVybigibWQyKGludCkiKTsKLSAJfQotIAotLWZpcHNfbWRf aW5pdChNRDIpCi0rbm9uZmlwc19tZF9pbml0KE1EMikKLSAJewotIAljLT5udW09MDsKLSAJbWVt c2V0KGMtPnN0YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEt YmV0YTMvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vbWQ0L21kNF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9tZDQvbWQ0 X2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMJMjAxMi0wMi0yOSAxMDozMzow Mi44MDEyOTQ5NTYgKzAxMDAKLUBAIC03MSw3ICs3MSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNp b25bXT0iTUQ0IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25n KTB4OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1 NDc2TAotIAotLWZpcHNfbWRfaW5pdChNRDQpCi0rbm9uZmlwc19tZF9pbml0KE1ENCkKLSAJewot IAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAx Mi0wMi0yOSAxMDozMzowMi44MDEyOTQ5NTYgKzAxMDAKLUBAIC03MSw3ICs3MSw3IEBAIGNvbnN0 IGNoYXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFUQV9D ICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWdu ZWQgbG9uZykweDEwMzI1NDc2TAotIAotLWZpcHNfbWRfaW5pdChNRDUpCi0rbm9uZmlwc19tZF9p bml0KE1ENSkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1JTklUX0RB VEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL21kYzIvbWRjMmRnc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMTEtMDYtMDEg MTU6Mzk6NDQuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8v bWRjMi9tZGMyZGdzdC5jCTIwMTItMDItMjkgMTA6MzM6MDIuODAxMjk0OTU2ICswMTAwCi1AQCAt NzYsNyArNzYsNyBAQAotIAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4 ZmYpKQotIAotIHN0YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOwotLWZpcHNfbWRfaW5pdChNREMyKQotK25vbmZpcHNf bWRfaW5pdChNREMyKQotIAl7Ci0gCWMtPm51bT0wOwotIAljLT5wYWRfdHlwZT0xOwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vb19pbml0LmMuZmlwcyBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL29f aW5pdC5jLmZpcHMJMjAxMS0wNS0yNiAxNjoxOToxOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9vX2luaXQuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMTI5 NDk1NiArMDEwMAotQEAgLTU1LDI4ICs1NSw2MyBAQAotICNpbmNsdWRlIDxlX29zLmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxz eXMvdHlwZXMuaD4KLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjaW5jbHVkZSA8ZmNudGwuaD4K LSsjaW5jbHVkZSA8dW5pc3RkLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPHN0 ZGxpYi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+Ci0rCi0rI2RlZmluZSBGSVBTX01PREVfU1dJVENIX0ZJTEUgIi9wcm9jL3N5cy9jcnlw dG8vZmlwc19lbmFibGVkIgotKwotK3N0YXRpYyB2b2lkIGluaXRfZmlwc19tb2RlKHZvaWQpCi0r CXsKLSsJY2hhciBidWZbMl0gPSAiMCI7Ci0rCWludCBmZDsKLSsJCi0rCWlmIChnZXRlbnYoIk9Q RU5TU0xfRk9SQ0VfRklQU19NT0RFIikgIT0gTlVMTCkKLSsJCXsKLSsJCWJ1ZlswXSA9ICcxJzsK LSsJCX0KLSsJZWxzZSBpZiAoKGZkID0gb3BlbihGSVBTX01PREVfU1dJVENIX0ZJTEUsIE9fUkRP TkxZKSkgPj0gMCkKLSsJCXsKLSsJCXdoaWxlIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA8 IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotKwkJY2xvc2UoZmQpOwotKwkJfQotKwkvKiBGYWlsdXJl IHJlYWRpbmcgdGhlIGZpcHMgbW9kZSBzd2l0Y2ggZmlsZSBtZWFucyBqdXN0IG5vdAotKwkgKiBz d2l0Y2hpbmcgaW50byBGSVBTIG1vZGUuIFdlIHdvdWxkIGJyZWFrIHRvbyBtYW55IHRoaW5ncwot KwkgKiBvdGhlcndpc2UuIAotKwkgKi8KLSsJCi0rCWlmIChidWZbMF0gPT0gJzEnKQotKwkJewot KwkJRklQU19tb2RlX3NldCgxKTsKLSsJCX0KLSsJfQotICNlbmRpZgotIAotIC8qIFBlcmZvcm0g YW55IGVzc2VudGlhbCBPcGVuU1NMIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbnMuCi0gICogQ3Vy cmVudGx5IG9ubHkgc2V0cyBGSVBTIGNhbGxiYWNrcwotICAqLwotIAotLXZvaWQgT1BFTlNTTF9p bml0KHZvaWQpCi0rdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKQotIAl7Ci0gCXN0YXRp YyBpbnQgZG9uZSA9IDA7Ci0gCWlmIChkb25lKQotIAkJcmV0dXJuOwotIAlkb25lID0gMTsKLSAj aWZkZWYgT1BFTlNTTF9GSVBTCi0tCUZJUFNfc2V0X2xvY2tpbmdfY2FsbGJhY2tzKENSWVBUT19s b2NrLCBDUllQVE9fYWRkX2xvY2spOwotLQlGSVBTX3NldF9lcnJvcl9jYWxsYmFja3MoRVJSX3B1 dF9lcnJvciwgRVJSX2FkZF9lcnJvcl92ZGF0YSk7Ci0tCUZJUFNfc2V0X21hbGxvY19jYWxsYmFj a3MoQ1JZUFRPX21hbGxvYywgQ1JZUFRPX2ZyZWUpOwotIAlSQU5EX2luaXRfZmlwcygpOwotKwlp bml0X2ZpcHNfbW9kZSgpOwotICNlbmRpZgotICNpZiAwCi0gCWZwcmludGYoc3RkZXJyLCAiQ2Fs bGVkIE9QRU5TU0xfaW5pdFxuIik7Ci0gI2VuZGlmCi0gCX0KLSAKLSt2b2lkIE9QRU5TU0xfaW5p dCh2b2lkKQotKwl7Ci0rCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rCX0KLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcyBvcGVuc3NsLTEu MC4xLWJldGEzL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCi0tLS0gb3BlbnNzbC0xLjAuMS1iZXRh My9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzCTIwMDUtMTItMTYgMTE6Mzc6MjMuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vb3BlbnNzbGNvbmYuaC5p bgkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMTI5NDk1NiArMDEwMAotQEAgLTEsNSArMSwyMCBAQAot IC8qIGNyeXB0by9vcGVuc3NsY29uZi5oLmluICovCi0gCi0rI2lmZGVmIE9QRU5TU0xfRE9JTkdf TUFLRURFUEVORAotKwotKy8qIEluY2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8g YmUgZXhwbGljaXRseSBzZXQgdG8gZW5hYmxlIGEgZmVhdHVyZQotKyAqIHRoYXQgc2hvdWxkIGJl IHZpc2libGUgdG8gbWFrZWRlcGVuZC4KLSsgKgotKyAqIFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vz bid0IGFjdHVhbGx5IGxvb2sgYXQgdGhpcywgd2UgdXNlIGFjdHVhbCBidWlsZCBzZXR0aW5ncwot KyAqIGluc3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3Rv cmllcyB3aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQotKyAqLwotKwotKyNpZm5kZWYgT1BFTlNT TF9GSVBTCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFMKLSsjZW5kaWYKLSsKLSsjZW5kaWYKLSsKLSAv KiBHZW5lcmF0ZSA4MDM4NiBjb2RlPyAqLwotICN1bmRlZiBJMzg2X09OTFkKLSAKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcyBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCi0tLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzCTIwMDktMDMtMDkgMTQ6MDg6MDQuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcGtjczEyL3AxMl9j cnQuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwMTI5NDk1NiArMDEwMAotQEAgLTU5LDYgKzU5LDEw IEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1 ZGUgPG9wZW5zc2wvcGtjczEyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSAKLSBzdGF0aWMgaW50IHBrY3MxMl9hZGRf YmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJfU0FGRUJBRyAqYmFn KTsKLUBAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVhdGUoY2hhciAqcGFzcywg Y2hhciAqCi0gCi0gCS8qIFNldCBkZWZhdWx0cyAqLwotIAlpZiAoIW5pZF9jZXJ0KQotKwkJewot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSkKLSsJCQluaWRfY2VydCA9 IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOwotKwkJZWxzZQotKyNlbmRp ZgotIAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzJfQ0JDOwotKwkJfQot IAlpZiAoIW5pZF9rZXkpCi0gCQluaWRfa2V5ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNfS2V5X1Ry aXBsZURFU19DQkM7Ci0gCWlmICghaXRlcikKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMv Y3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcmFu ZC9tZF9yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yYW5kL21kX3JhbmQu Yy5maXBzCTIwMTEtMDEtMjYgMTU6NTU6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDEy OTQ5NTYgKzAxMDAKLUBAIC0zODksNyArMzg5LDEwIEBAIHN0YXRpYyBpbnQgc3NsZWF5X3JhbmRf Ynl0ZXModW5zaWduZWQgY2gKLSAJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQyKTsK LSAJY3J5cHRvX2xvY2tfcmFuZCA9IDE7Ci0gCi0tCWlmICghaW5pdGlhbGl6ZWQpCi0rCS8qIGFs d2F5cyBwb2xsIGZvciBleHRlcm5hbCBlbnRyb3B5IGluIEZJUFMgbW9kZSwgZHJiZyBwcm92aWRl cyB0aGUgCi0rCSAqIGV4cGFuc2lvbgotKwkgKi8KLSsJaWYgKCFpbml0aWFsaXplZCB8fCBGSVBT X21vZHVsZV9tb2RlKCkpIAotIAkJewotIAkJUkFORF9wb2xsKCk7Ci0gCQlpbml0aWFsaXplZCA9 IDE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yYW5kL3JhbmQuaC5maXBz IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZC5oCi0tLS0gb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjI4MzI5 MDUwNCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JhbmQvcmFuZC5oCTIw MTItMDItMjkgMTA6MzM6MDIuODAyMjk0OTY1ICswMTAwCi1AQCAtMTMzLDE1ICsxMzMsMzMgQEAg dm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7Ci0gLyogRXJyb3IgY29kZXMgZm9yIHRo ZSBSQU5EIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjZGVmaW5l IFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTA4Ci0rI2RlZmluZSBSQU5EX0Zf RklQU19SQU5ECQkJCSAxMDMKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfQllURVMJCQkJIDEw MgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJCQkJIDEwNgotKyNkZWZpbmUgUkFO RF9GX0ZJUFNfWDkzMV9TRVRfRFQJCQkJIDEwNgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX0RU CQkJCSAxMDQKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQJCQkgMTA3Ci0rI2Rl ZmluZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJIDEwNQotICNkZWZpbmUgUkFORF9GX1JB TkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwMQotLSNkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBT CQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUwkJCQkgMTA5Ci0gI2RlZmlu ZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAwCi0gCi0gLyogUmVhc29uIGNvZGVzLiAq LwotLSNkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHCQkJIDEwMgotLSNkZWZp bmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRwkJCSAxMDMKLS0jZGVmaW5lIFJBTkRf Ul9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUCQkgMTAxCi0rI2RlZmluZSBSQU5EX1JfRVJST1Jf SU5JVElBTElTSU5HX0RSQkcJCQkgMTEyCi0rI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElB VElOR19EUkJHCQkJIDExMwotKyNkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTA1 Ci0rI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2Ci0rI2RlZmluZSBSQU5E X1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVAkJIDExMQotKyNkZWZpbmUgUkFORF9SX05PX0tF WV9TRVQJCQkJIDEwNwotKyNkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSAkJ CSAxMDEKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKLSsjZGVmaW5lIFJBTkRf Ul9QUk5HX0tFWUVECQkJCSAxMDkKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRUtFWUVECQkJ CSAxMDIKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMKLSAjZGVmaW5l IFJBTkRfUl9QUk5HX05PVF9TRUVERUQJCQkJIDEwMAotKyNkZWZpbmUgUkFORF9SX1BSTkdfU0VF RF9NVVNUX05PVF9NQVRDSF9LRVkJCSAxMTAKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NUVUNLCQkJ CSAxMDQKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MS1iZXRhMy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NC4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwkyMDEy LTAyLTI5IDEwOjMzOjAyLjgwMjI5NDk2NSArMDEwMAotQEAgLTcwLDcgKzcwLDcgQEAgY29uc3Qg Y2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIgotICAgICAgdm9pZCByaXBlbWQxNjBf YmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKLSAj ICBlbmRpZgotIAotLWZpcHNfbWRfaW5pdChSSVBFTUQxNjApCi0rbm9uZmlwc19tZF9pbml0KFJJ UEVNRDE2MCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1SSVBFTUQx NjBfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfY3JwdC5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKLS0tLSBvcGVu c3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzCTIwMTEtMDYtMDIgMjA6 MjI6NDIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNh L3JzYV9jcnB0LmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDIyOTQ5NjUgKzAxMDAKLUBAIC05MCwx MCArOTAsOSBAQCBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QKLSAJICAg ICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCi0gCXsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlm IChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhP RCkKLS0JCQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0rCWlm KEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkK LSAJCXsKLS0JCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9OT05fRklQ U19SU0FfTUVUSE9EKTsKLSsJCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULCBSU0Ff Ul9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSAJCXJldHVybiAtMTsKLSAJ CX0KLSAjZW5kaWYKLUBAIC0xMTgsMTAgKzExNyw5IEBAIGludCBSU0FfcHVibGljX2RlY3J5cHQo aW50IGZsZW4sIGNvbnN0IHUKLSAJICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCi0gCXsKLSAj aWZkZWYgT1BFTlNTTF9GSVBTCi0tCWlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+Zmxh Z3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKLS0JCQkmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19OT05fRklQU19BTExPVykpCi0rCWlmKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJT QV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSAJCXsKLS0JCVJTQWVycihSU0FfRl9SU0FfUFVCTElD X0RFQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwotKwkJUlNBZXJyKFJTQV9GX1JT QV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9E RSk7Ci0gCQlyZXR1cm4gLTE7Ci0gCQl9Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlw dG8vcnNhL3JzYV9lYXkuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2Ff ZWF5LmMuZmlwcwkyMDExLTEwLTE5IDE2OjU4OjU5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxMi0wMi0yOSAxMDozMzowMi44 MDIyOTQ5NjUgKzAxMDAKLUBAIC0xMTQsNiArMTE0LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSAjaWZuZGVmIFJTQV9OVUxMCi0g Ci1AQCAtMTM4LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9lYXlfbWV0 aD17Ci0gCUJOX21vZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNob3VsZCBub3QgdXNl IE1vbnRnb21lcnkgaWYgIGUgPT0gMyAqLwotIAlSU0FfZWF5X2luaXQsCi0gCVJTQV9lYXlfZmlu aXNoLAotLQkwLCAvKiBmbGFncyAqLwotKwlSU0FfRkxBR19GSVBTX01FVEhPRCwgLyogZmxhZ3Mg Ki8KLSAJTlVMTCwKLSAJMCwgLyogcnNhX3NpZ24gKi8KLSAJMCwgLyogcnNhX3ZlcmlmeSAqLwot QEAgLTE1OCw2ICsxNjIsMjQgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0KGlu dCBmbAotIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYgKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlf UFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVy cjsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5D UllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQot KwkJfQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf RU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTM2MSw2ICszODMsMjQgQEAg c3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgotIAlCSUdOVU0gKnVuYmxp bmQgPSBOVUxMOwotIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVz dF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VO Q1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJ fQotKwotKwkJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKwkJ CSYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULCBS U0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0r I2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0g CUJOX0NUWF9zdGFydChjdHgpOwotIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci1AQCAtNTA0LDYg KzU0NCwyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCi0gCUJJ R05VTSAqdW5ibGluZCA9IE5VTEw7Ci0gCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Ci0g Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZ X1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCXJldHVy biAtMTsKLSsJCQl9Ci0rCi0rCQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCi0rCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRF X0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJ CX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkg Z290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotIAlmICAgPSBCTl9DVFhfZ2V0KGN0eCk7 Ci1AQCAtNjM5LDYgKzY5NywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQo aW50IGZsCi0gCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1OVUxMOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VB WV9QVUJMSUNfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8g ZXJyOwotKwkJCX0KLSsKLSsJCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykKLSsJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19E RUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9 Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9S U0FfTUFYX01PRFVMVVNfQklUUykKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJ Q19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtODQ3LDEyICs5MjMsMTIg QEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklHTlVNICpyMCwgYwotIAlpZiAoIUJOX21v ZChyMCxwcjEscnNhLT5wLGN0eCkpIGdvdG8gZXJyOwotIAotIAkvKiBJZiBwIDwgcSBpdCBpcyBv Y2Nhc2lvbmFsbHkgcG9zc2libGUgZm9yIHRoZSBjb3JyZWN0aW9uIG9mCi0tICAgICAgICAgKiBh ZGRpbmcgJ3AnIGlmIHIwIGlzIG5lZ2F0aXZlIGFib3ZlIHRvIGxlYXZlIHRoZSByZXN1bHQgc3Rp bGwKLSsJICogYWRkaW5nICdwJyBpZiByMCBpcyBuZWdhdGl2ZSBhYm92ZSB0byBsZWF2ZSB0aGUg cmVzdWx0IHN0aWxsCi0gCSAqIG5lZ2F0aXZlLiBUaGlzIGNhbiBicmVhayB0aGUgcHJpdmF0ZSBr ZXkgb3BlcmF0aW9uczogdGhlIGZvbGxvd2luZwotIAkgKiBzZWNvbmQgY29ycmVjdGlvbiBzaG91 bGQgKmFsd2F5cyogY29ycmVjdCB0aGlzIHJhcmUgb2NjdXJyZW5jZS4KLSAJICogVGhpcyB3aWxs ICpuZXZlciogaGFwcGVuIHdpdGggT3BlblNTTCBnZW5lcmF0ZWQga2V5cyBiZWNhdXNlCi0tICAg ICAgICAgKiB0aGV5IGVuc3VyZSBwID4gcSBbc3RldmVdCi0tICAgICAgICAgKi8KLSsJICogdGhl eSBlbnN1cmUgcCA+IHEgW3N0ZXZlXQotKwkgKi8KLSAJaWYgKEJOX2lzX25lZ2F0aXZlKHIwKSkK LSAJCWlmICghQk5fYWRkKHIwLHIwLHJzYS0+cCkpIGdvdG8gZXJyOwotIAlpZiAoIUJOX211bChy MSxyMCxyc2EtPnEsY3R4KSkgZ290byBlcnI7Ci1AQCAtODk3LDYgKzk3Myw5IEBAIGVycjoKLSAK LSBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKLSAJewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlyc2EtPmZsYWdzfD1S U0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJVkFURTsKLSAJcmV0dXJuKDEp OwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNhX2Vyci5j LmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9lcnIuYwotLS0tIG9wZW5z c2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDExLTEwLTEwIDAxOjEz OjUwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9y c2FfZXJyLmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDIyOTQ5NjUgKzAxMDAKLUBAIC0xMjEsNiAr MTIxLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQotIHtFUlJf RlVOQyhSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX3B1YmxpY19lbmNyeXB0In0sCi0g e0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJfREVDT0RFIn0sCi0ge0VS Ul9GVU5DKFJTQV9GX1JTQV9TRVRVUF9CTElORElORyksCSJSU0Ffc2V0dXBfYmxpbmRpbmcifSwK LSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCksCSJSU0Ffc2V0X2RlZmF1 bHRfbWV0aG9kIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVUSE9EKSwJIlJTQV9zZXRf bWV0aG9kIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwJIlJTQV9zaWduIn0sCi0ge0VS Ul9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwJIlJTQV9zaWduX0FTTjFf T0NURVRfU1RSSU5HIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRlkpLAkiUlNBX3Zlcmlm eSJ9LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKLS0tLSBvcGVuc3Ns LTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAxMS0wNi0wOSAxNToxODow Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNh X2dlbi5jCTIwMTItMDItMjkgMTA6MzM6MDIuODAzMjk0OTc0ICswMTAwCi1AQCAtNjksNiArNjks NzggQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0g I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotK3N0YXRpYyBpbnQgZmlwc19yc2FfcGFpcndpc2Vf ZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKQotKwl7Ci0r CWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9Ci0rCi0raW50IGZpcHNfY2hlY2tfcnNh KFJTQSAqcnNhKQotKwl7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgdGJzW10gPSAiUlNBIFBhaXJ3 aXNlIENoZWNrIERhdGEiOwotKwl1bnNpZ25lZCBjaGFyICpjdGJ1ZiA9IE5VTEwsICpwdGJ1ZiA9 IE5VTEw7Ci0rCWludCBsZW4sIHJldCA9IDA7Ci0rCUVWUF9QS0VZICpwazsKLSsKLSsJaWYgKChw az1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9z ZXQxX1JTQShwaywgcnNhKTsKLSsKLSsJLyogUGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBz aWduYXR1cmUgdGVzdCAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJz LCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1Mx LCBOVUxMKQotKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJ CQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsIE5VTEwpCi0r CQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAs IEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBOVUxMKSkKLSsJCWdvdG8gZXJy OwotKwkvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBlbmNyeXB0L2RlY3J5cHQg dGVzdCAqLwotKwljdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOwotKwlpZiAo IWN0YnVmKQotKwkJZ290byBlcnI7Ci0rCi0rCWxlbiA9IFJTQV9wdWJsaWNfZW5jcnlwdChzaXpl b2YodGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKwlpZiAo bGVuIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJLyogQ2hlY2sgY2lwaGVydGV4dCBkb2Vzbid0IG1h dGNoIHBsYWludGV4dCAqLwotKwlpZiAoKGxlbiA9PSAoc2l6ZW9mKHRicykgLSAxKSkgJiYgIW1l bWNtcCh0YnMsIGN0YnVmLCBsZW4pKQotKwkJZ290byBlcnI7Ci0rCXB0YnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCi0rCWlmICghcHRidWYpCi0rCQlnb3RvIGVycjsKLSsJ bGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0YnVmLCBwdGJ1ZiwgcnNhLCBSU0FfUEtD UzFfUEFERElORyk7Ci0rCWlmIChsZW4gIT0gKHNpemVvZih0YnMpIC0gMSkpCi0rCQlnb3RvIGVy cjsKLSsJaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCXJl dCA9IDE7Ci0rCi0rCWlmICghcHRidWYpCi0rCQlnb3RvIGVycjsKLSsJCi0rCWVycjoKLSsJaWYg KHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJRklQU2Vy cihGSVBTX0ZfRklQU19DSEVDS19SU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJ CX0KLSsKLSsJaWYgKGN0YnVmKQotKwkJT1BFTlNTTF9mcmVlKGN0YnVmKTsKLSsJaWYgKHB0YnVm KQotKwkJT1BFTlNTTF9mcmVlKHB0YnVmKTsKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShw ayk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSAjZW5kaWYKLSAKLSBzdGF0aWMgaW50IHJzYV9i dWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5fR0VO Q0IgKmNiKTsKLUBAIC04MSw3ICsxNTMsNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdl bihSU0EgKnJzYSwKLSBpbnQgUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMs IEJJR05VTSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKQotIAl7Ci0gI2lmZGVmIE9QRU5TU0xfRklQ UwotLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQ U19NRVRIT0QpCi0rCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdz ICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCi0gCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKQotIAkJewotIAkJUlNBZXJyKFJTQV9GX1JTQV9HRU5FUkFURV9LRVlf RVgsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwotQEAgLTkwLDEwICsxNjIsNiBAQCBpbnQg UlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpCi0gI2VuZGlmCi0gCWlmKHJzYS0+ bWV0aC0+cnNhX2tleWdlbikKLSAJCXJldHVybiByc2EtPm1ldGgtPnJzYV9rZXlnZW4ocnNhLCBi aXRzLCBlX3ZhbHVlLCBjYik7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQlpZiAoRklQU19tb2Rl KCkpCi0tCQlyZXR1cm4gRklQU19yc2FfZ2VuZXJhdGVfa2V5X2V4KHJzYSwgYml0cywgZV92YWx1 ZSwgY2IpOwotLSNlbmRpZgotIAlyZXR1cm4gcnNhX2J1aWx0aW5fa2V5Z2VuKHJzYSwgYml0cywg ZV92YWx1ZSwgY2IpOwotIAl9Ci0gCi1AQCAtMTA1LDYgKzE3MywyMyBAQCBzdGF0aWMgaW50IHJz YV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKLSAJaW50IGJpdHNwLGJpdHNxLG9rPSAtMSxuPTA7 Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQ U19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJ ICAgIAl7Ci0rCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICAJcmV0dXJuIDA7Ci0rCSAgICAJfQotKwotKwkJ aWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0rCQkgICAgewot KwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfS0VZX1RPT19T SE9SVCk7Ci0rCQkgICAgcmV0dXJuIDA7Ci0rCQkgICAgfQotKwkJfQotKyNlbmRpZgotKwotIAlj dHg9Qk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9DVFhf c3RhcnQoY3R4KTsKLUBAIC0yMTYsNiArMzAxLDE3IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5f a2V5Z2VuKFJTQSAqcnNhLAotIAkJcCA9IHJzYS0+cDsKLSAJaWYgKCFCTl9tb2RfaW52ZXJzZShy c2EtPmlxbXAscnNhLT5xLHAsY3R4KSkgZ290byBlcnI7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQotKwkJewotKwkJaWYgKGZpcHNfcnNhX3BhaXJ3 aXNlX2ZhaWwpCi0rCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsKLSsKLSsJCWlmKCFmaXBzX2No ZWNrX3JzYShyc2EpKQotKwkJICAgIGdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlvaz0x OwotIGVycjoKLSAJaWYgKG9rID09IC0xKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9j cnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYS5o Ci0tLS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJMjAxMi0wMi0y OSAxMDozMzowMi41NzcyOTMwMzAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9yc2EvcnNhLmgJMjAxMi0wMi0yOSAxMDozMzowMi44MDMyOTQ5NzQgKzAxMDAKLUBAIC0xNjQs NiArMTY0LDggQEAgc3RydWN0IHJzYV9zdAotICMgZGVmaW5lIE9QRU5TU0xfUlNBX01BWF9NT0RV TFVTX0JJVFMJMTYzODQKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUyAxMDI0Ci0rCi0gI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVT X0JJVFMKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJMzA3MgotICNl bmRpZgotQEAgLTI5MCw2ICsyOTIsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tleShpbnQgYml0 cywgdW5zaWduZQotIAotIC8qIE5ldyB2ZXJzaW9uICovCi0gaW50CVJTQV9nZW5lcmF0ZV9rZXlf ZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJT QV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVN ICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpY cDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05V TSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0Ig KmNiKTsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywg Y29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotIAotIGludAlSU0FfY2hlY2tfa2V5KGNv bnN0IFJTQSAqKTsKLSAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwotQEAgLTQ4Nyw3 ICs0OTQsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNB X0ZfUlNBX1BBRERJTkdfQUREX05PTkUJCQkgMTA3Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElO R19BRERfUEtDUzFfT0FFUAkJIDEyMQotICNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BL Q1MxX1BTUwkJCSAxMjUKLS0jZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1Nf TUdGMQkJIDE0OAotKyNkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0Yx CQkgMTU4Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8xCQkgMTA4 Ci0gI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8yCQkgMTA5Ci0gI2Rl ZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfU1NMVjIzCQkJIDExMAotQEAgLTUwMCwyMCArNTA3 LDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfRl9S U0FfUEFERElOR19DSEVDS19YOTMxCQkJIDEyOAotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UCQkJ CQkgMTE1Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAJCQkJIDExNgotLSNkZWZpbmUgUlNB X0ZfUlNBX1BSSVZBVEVfREVDUllQVAkJCSAxNTAKLS0jZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRF X0VOQ1JZUFQJCQkgMTUxCi0rI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUCQkJIDE1 NwotKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNDgKLSAjZGVmaW5lIFJT QV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9FTkNP REUJCQkJIDEzOAotLSNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE1MgotKyNk ZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQotICNkZWZpbmUgUlNBX0ZfUlNB X1BVQkxJQ19FTkNSWVBUCQkJIDE1MwotICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUJCQkJ IDEzOQotICNkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgotKyNkZWZpbmUg UlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRAkJCSAxNTAKLSsjZGVmaW5lIFJTQV9GX1JTQV9T RVRfTUVUSE9ECQkJCSAxNTEKLSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkgMTE3Ci0gI2Rl ZmluZSBSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAotICNkZWZpbmUgUlNB X0ZfUlNBX1ZFUklGWQkJCQkgMTE5Ci0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX0FTTjFfT0NU RVRfU1RSSU5HCQkgMTIwCi0gI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTUwkJCSAx MjYKLS0jZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01HRjEJCQkgMTQ5Ci0rI2Rl ZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxCQkJIDE1MgotIAotIC8qIFJlYXNv biBjb2Rlcy4gKi8KLSAjZGVmaW5lIFJTQV9SX0FMR09SSVRITV9NSVNNQVRDSAkJCSAxMDAKLUBA IC01NDIsMjEgKzU1MSwyMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNk ZWZpbmUgUlNBX1JfSU5WQUxJRF9NR0YxX01ECQkJCSAxNTYKLSAjZGVmaW5lIFJTQV9SX0lOVkFM SURfUEFERElORwkJCQkgMTM4Ci0gI2RlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJTkdfTU9ERQkJ CSAxNDEKLS0jZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJCQkgMTQ5Ci0rI2Rl ZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTCQkJIDE1NwotICNkZWZpbmUgUlNBX1Jf SU5WQUxJRF9QU1NfU0FMVExFTgkJCSAxNDYKLS0jZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FMVF9M RU5HVEgJCQkgMTUwCi0rI2RlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RICQkJIDE1OAot ICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9UUkFJTEVSCQkJCSAxMzkKLSAjZGVmaW5lIFJTQV9SX0lO VkFMSURfWDkzMV9ESUdFU1QJCQkgMTQyCi0gI2RlZmluZSBSU0FfUl9JUU1QX05PVF9JTlZFUlNF X09GX1EJCQkgMTI2Ci0gI2RlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTIwCi0g I2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0Ci0gI2RlZmluZSBSU0FfUl9N T0RVTFVTX1RPT19MQVJHRQkJCQkgMTA1Ci0tI2RlZmluZSBSU0FfUl9OT05fRklQU19SU0FfTUVU SE9ECQkJIDE1NwotKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRAkJCSAxNDkKLSsj ZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTQ5Ci0gI2RlZmluZSBSU0FfUl9OT19Q VUJMSUNfRVhQT05FTlQJCQkgMTQwCi0gI2RlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19N SVNTSU5HCQkJIDExMwotICNkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EJCQkgMTI3 Ci0gI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SCQkJIDEyMQotLSNkZWZpbmUgUlNB X1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTU4Ci0rI2RlZmluZSBSU0Ff Ul9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKLSAjZGVmaW5lIFJTQV9S X09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAotICNkZWZpbmUg UlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0Ci0gI2RlZmluZSBSU0FfUl9QX05PVF9Q UklNRQkJCQkgMTI4Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNh X2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9saWIuYwotLS0t IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwkyMDExLTA2LTIw IDIxOjQxOjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L3JzYS9yc2FfbGliLmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDMyOTQ5NzQgKzAxMDAKLUBAIC04 NCw2ICs4NCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2b2lkIFJTQV9zZXRfZGVmYXVs dF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01F VEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwgUlNB X1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybjsKLSsJCX0KLSsjZW5kaWYKLSAJZGVmYXVs dF9SU0FfbWV0aCA9IG1ldGg7Ci0gCX0KLSAKLUBAIC05MSwxOCArOTgsMTEgQEAgY29uc3QgUlNB X01FVEhPRCAqUlNBX2dldF9kZWZhdWx0X21ldGhvZAotIAl7Ci0gCWlmIChkZWZhdWx0X1JTQV9t ZXRoID09IE5VTEwpCi0gCQl7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQkJaWYgKEZJUFNfbW9k ZSgpKQotLQkJCXJldHVybiBGSVBTX3JzYV9wa2NzMV9zc2xlYXkoKTsKLS0JCWVsc2UKLS0JCQly ZXR1cm4gUlNBX1BLQ1MxX1NTTGVheSgpOwotLSNlbHNlCi0gI2lmZGVmIFJTQV9OVUxMCi0gCQlk ZWZhdWx0X1JTQV9tZXRoPVJTQV9udWxsX21ldGhvZCgpOwotICNlbHNlCi0gCQlkZWZhdWx0X1JT QV9tZXRoPVJTQV9QS0NTMV9TU0xlYXkoKTsKLSAjZW5kaWYKLS0jZW5kaWYKLSAJCX0KLSAKLSAJ cmV0dXJuIGRlZmF1bHRfUlNBX21ldGg7Ci1AQCAtMTE4LDYgKzExOCwxMyBAQCBpbnQgUlNBX3Nl dF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9NCi0gCS8qIE5COiBUaGUgY2FsbGVyIGlzIHNw ZWNpZmljYWxseSBzZXR0aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cwotIAkgKiB0 byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCi0gCWNvbnN0IFJTQV9N RVRIT0QgKm10bXA7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYg IShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKLSsJCXsKLSsJCVJTQWVycihS U0FfRl9SU0FfU0VUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAw OwotKwkJfQotKyNlbmRpZgotIAltdG1wID0gcnNhLT5tZXRoOwotIAlpZiAobXRtcC0+ZmluaXNo KSBtdG1wLT5maW5pc2gocnNhKTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1AQCAtMTcw LDYgKzE3NywxOCBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQotIAkJCX0K LSAJCX0KLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAm JiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlS U0FlcnIoUlNBX0ZfUlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rI2lm bmRlZiBPUEVOU1NMX05PX0VOR0lORQotKwkJaWYgKHJldC0+ZW5naW5lKQotKwkJCUVOR0lORV9m aW5pc2gocmV0LT5lbmdpbmUpOwotKyNlbmRpZgotKwkJT1BFTlNTTF9mcmVlKHJldCk7Ci0rCQly ZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJcmV0LT5wYWQ9MDsKLSAJcmV0LT52ZXJz aW9uPTA7Ci1AQCAtMTg4LDcgKzIwNyw3IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICpl bmdpbmUpCi0gCXJldC0+YmxpbmRpbmc9TlVMTDsKLSAJcmV0LT5tdF9ibGluZGluZz1OVUxMOwot IAlyZXQtPmJpZ251bV9kYXRhPU5VTEw7Ci0tCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFncyAm IH5SU0FfRkxBR19OT05fRklQU19BTExPVzsKLSsJcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZsYWdz OwotIAlpZiAoIUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNBLCByZXQsICZy ZXQtPmV4X2RhdGEpKQotIAkJewotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzCTIwMTItMDItMTUgMTU6MTQ6MDEuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9wbWV0aC5j CTIwMTItMDItMjkgMTA6MzQ6NTYuMjkwMzIwMDQ2ICswMTAwCi1AQCAtMjA2LDIyICsyMDYsNiBA QCBzdGF0aWMgaW50IHBrZXlfcnNhX3NpZ24oRVZQX1BLRVlfQ1RYICpjCi0gCQkJCQlSU0FfUl9J TlZBTElEX0RJR0VTVF9MRU5HVEgpOwotIAkJCXJldHVybiAtMTsKLSAJCQl9Ci0tI2lmZGVmIE9Q RU5TU0xfRklQUwotLQkJaWYgKHJldCA+IDApCi0tCQkJewotLQkJCXVuc2lnbmVkIGludCBzbGVu OwotLQkJCXJldCA9IEZJUFNfcnNhX3NpZ25fZGlnZXN0KHJzYSwgdGJzLCB0YnNsZW4sIHJjdHgt Pm1kLAotLQkJCQkJCQlyY3R4LT5wYWRfbW9kZSwKLS0JCQkJCQkJcmN0eC0+c2FsdGxlbiwKLS0J CQkJCQkJcmN0eC0+bWdmMW1kLAotLQkJCQkJCQlzaWcsICZzbGVuKTsKLS0JCQlpZiAocmV0ID4g MCkKLS0JCQkJKnNpZ2xlbiA9IHNsZW47Ci0tCQkJZWxzZQotLQkJCQkqc2lnbGVuID0gMDsKLS0J CQlyZXR1cm4gcmV0OwotLQkJCX0KLS0jZW5kaWYKLSAKLSAJCWlmIChFVlBfTURfdHlwZShyY3R4 LT5tZCkgPT0gTklEX21kYzIpCi0gCQkJewotQEAgLTM1NCwxOSArMzM4LDYgQEAgc3RhdGljIGlu dCBwa2V5X3JzYV92ZXJpZnkoRVZQX1BLRVlfQ1RYCi0gI2VuZGlmCi0gCWlmIChyY3R4LT5tZCkK LSAJCXsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tCQlpZiAocnYgPiAwKQotLQkJCXsKLS0JCQly ZXR1cm4gRklQU19yc2FfdmVyaWZ5X2RpZ2VzdChyc2EsCi0tCQkJCQkJCXRicywgdGJzbGVuLAot LQkJCQkJCQlyY3R4LT5tZCwKLS0JCQkJCQkJcmN0eC0+cGFkX21vZGUsCi0tCQkJCQkJCXJjdHgt PnNhbHRsZW4sCi0tCQkJCQkJCXJjdHgtPm1nZjFtZCwKLS0JCQkJCQkJc2lnLCBzaWdsZW4pOwot LQkJCQkJCQkKLS0JCQl9Ci0tI2VuZGlmCi0gCQlpZiAocmN0eC0+cGFkX21vZGUgPT0gUlNBX1BL Q1MxX1BBRERJTkcpCi0gCQkJcmV0dXJuIFJTQV92ZXJpZnkoRVZQX01EX3R5cGUocmN0eC0+bWQp LCB0YnMsIHRic2xlbiwKLSAJCQkJCXNpZywgc2lnbGVuLCByc2EpOwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMS1iZXRhMy9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJl dGEzL2NyeXB0by9yc2EvcnNhX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAxMi0wMi0xNSAxNTowMDowOS4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDEyLTAyLTI5 IDEwOjM3OjU0LjkxNjg1NzQyNCArMDEwMAotQEAgLTEzOCw3ICsxMzgsOCBAQCBpbnQgUlNBX3Np Z24oaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGNoCi0gCQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7 Ci0gCQlzPXRtcHM7Ci0gCX0KLS0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNh LFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGly ZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRoLT5yc2FfcHJp dl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFf UEFERElORykgOiAwOwotIAlpZiAoaSA8PSAwKQotIAkJcmV0PTA7Ci0gCWVsc2UKLUBAIC0xNzgs OCArMTc5LDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotIAot IAlpZigoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBybSkKLSAJCXsKLS0JCWkgPSBSU0FfcHVi bGljX2RlY3J5cHQoKGludClzaWdsZW4sCi0tCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9Q QURESU5HKTsKLSsJCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2Ff cHViX2RlYygoaW50KXNpZ2xlbiwKLSsJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpIDogMDsKLSAJCWlmIChpIDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0gCQkqcHJtX2xlbiA9IGk7 Ci1AQCAtMTk2LDcgKzE5Nyw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0 IHVuc2kKLSAJCQlSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJRF9NRVNT QUdFX0xFTkdUSCk7Ci0gCQkJZ290byBlcnI7Ci0gCX0KLS0JaT1SU0FfcHVibGljX2RlY3J5cHQo KGludClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNh bGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwot KwlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGlu dClzaWdsZW4sc2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCi0gCWlmIChp IDw9IDApIGdvdG8gZXJyOwotIAkvKiBPZGRiYWxsIE1EQzIgY2FzZTogc2lnbmF0dXJlIGNhbiBi ZSBPQ1RFVCBTVFJJTkcuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9zaGEv c2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9zaGEvc2hhMjU2LmMKLS0t LSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDExLTA2LTAx IDE1OjM5OjQ0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRv L3NoYS9zaGEyNTYuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwNDI5NDk4MyArMDEwMAotQEAgLTEy LDEyICsxMiwxOSBAQAotIAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNpbmNsdWRl IDxvcGVuc3NsL3NoYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSAK LSBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9Q VEVYVDsKLSAKLSBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQotIAl7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNl dCAoYywwLHNpemVvZigqYykpOwotIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2 N2NkNTA3VUw7Ci0gCWMtPmhbMl09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsK LUBAIC0yOSw2ICszNiw5IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCi0gCi0g Zmlwc19tZF9pbml0KFNIQTI1NikKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19z ZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJ Yy0+aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOwotIAljLT5oWzJdPTB4 M2M2ZWYzNzJVTDsJYy0+aFszXT0weGE1NGZmNTNhVUw7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4x LWJldGEzL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcyBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0 by9zaGEvc2hhNTEyLmMKLS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9zaGEvc2hhNTEy LmMuZmlwcwkyMDExLTExLTE0IDIxOjU4OjAxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGE1MTIuYwkyMDEyLTAyLTI5IDEwOjMzOjAyLjgwNDI5 NDk4MyArMDEwMAotQEAgLTUsNiArNSwxMCBAQAotICAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICovCi0gI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpZiAhZGVmaW5lZChPUEVOU1NM X05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEE1MTIpCi0gLyoKLSAgKiBJTVBMRU1F TlRBVElPTiBOT1RFUy4KLUBAIC02MSw2ICs2NSw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNp b25bXT0iU0hBLTUxMiIgT1AKLSAKLSBmaXBzX21kX2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQot IAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2Vu ZGlmCi0gCWMtPmhbMF09VTY0KDB4Y2JiYjlkNWRjMTA1OWVkOCk7Ci0gCWMtPmhbMV09VTY0KDB4 NjI5YTI5MmEzNjdjZDUwNyk7Ci0gCWMtPmhbMl09VTY0KDB4OTE1OTAxNWEzMDcwZGQxNyk7Ci1A QCAtNzcsNiArODQsOSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQotIAotIGZp cHNfbWRfaW5pdChTSEE1MTIpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJYy0+aFswXT1VNjQoMHg2YTA5ZTY2N2YzYmNjOTA4 KTsKLSAJYy0+aFsxXT1VNjQoMHhiYjY3YWU4NTg0Y2FhNzNiKTsKLSAJYy0+aFsyXT1VNjQoMHgz YzZlZjM3MmZlOTRmODJiKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3No YS9zaGEuaC5maXBzIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGEuaAotLS0tIG9w ZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIwMTItMDItMjkgMTA6MzM6 MDIuMTA4Mjg4OTk3ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vc2hhL3No YS5oCTIwMTItMDItMjkgMTA6MzM6MDIuODA0Mjk0OTgzICswMTAwCi1AQCAtMTE2LDkgKzExNiw2 IEBAIHVuc2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25lZCBjaGFyICoKLSB2b2lkIFNIQV9U cmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gI2VuZGlm Ci0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50IHBy aXZhdGVfU0hBMV9Jbml0KFNIQV9DVFggKmMpOwotLSNlbmRpZgotIGludCBTSEExX0luaXQoU0hB X0NUWCAqYyk7Ci0gaW50IFNIQTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBsZW4pOwotIGludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RY ICpjKTsKLUBAIC0xNDEsMTAgKzEzOCw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0 Ci0gCX0gU0hBMjU2X0NUWDsKLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0tI2lmZGVm IE9QRU5TU0xfRklQUwotLWludCBwcml2YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOwot LWludCBwcml2YXRlX1NIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmMpOwotLSNlbmRpZgotIGludCBT SEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKLSBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RY ICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMjI0X0ZpbmFsKHVu c2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKLUBAIC0xOTIsMTAgKzE4NSw2IEBAIHR5 cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0Ci0gI2VuZGlmCi0gCi0gI2lmbmRlZiBPUEVOU1NM X05PX1NIQTUxMgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEEzODRfSW5p dChTSEE1MTJfQ1RYICpjKTsKLS1pbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpj KTsKLS0jZW5kaWYKLSBpbnQgU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7Ci0gaW50IFNIQTM4 NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0g aW50IFNIQTM4NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5z c2wtMS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMy9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwkyMDEyLTAyLTI5IDEwOjMzOjAyLjExNDI4 OTA1MSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3NoYS9zaGFfbG9jbC5o CTIwMTItMDItMjkgMTA6MzM6MDIuODA0Mjk0OTgzICswMTAwCi1AQCAtMTIzLDExICsxMjMsMTQg QEAgdm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsCi0gI2RlZmluZSBJTklU X0RBVEFfaDQgMHhjM2QyZTFmMFVMCi0gCi0gI2lmZGVmIFNIQV8wCi0tZmlwc19tZF9pbml0KFNI QSkKLStub25maXBzX21kX2luaXQoU0hBKQotICNlbHNlCi0gZmlwc19tZF9pbml0X2N0eChTSEEx LCBTSEEpCi0gI2VuZGlmCi0gCXsKLSsjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVO U1NMX0ZJUFMpCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChj LDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmgwPUlOSVRfREFUQV9oMDsKLSAJYy0+aDE9SU5JVF9EQVRB X2gxOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vd2hybHBvb2wvd3BfZGdz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jCi0t LS0gb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJMjAx MS0wNi0wMSAxNTozOTo0NS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4xLWJldGEz L2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMJMjAxMi0wMi0yOSAxMDozMzowMi44MDUyOTQ5OTIg KzAxMDAKLUBAIC01NSw3ICs1NSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0g I2luY2x1ZGUgPHN0cmluZy5oPgotIAotLWZpcHNfbWRfaW5pdChXSElSTFBPT0wpCi0rbm9uZmlw c19tZF9pbml0KFdISVJMUE9PTCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJ cmV0dXJuKDEpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMy9NYWtlZmlsZS5vcmcuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEzL01ha2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0 YTMvTWFrZWZpbGUub3JnLmZpcHMJMjAxMi0wMi0yOSAxMDozMzowMi43NDYyOTQ0ODQgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4xLWJldGEzL01ha2VmaWxlLm9yZwkyMDEyLTAyLTI5IDEwOjMzOjAy LjgwNTI5NDk5MiArMDEwMAotQEAgLTEzNiw2ICsxMzYsOSBAQCBGSVBTQ0FOTElCPQotIAotIEJB U0VBRERSPQotIAotKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxlZAotK0ZJUFM9Ci0rCi0gRElS Uz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xzCi0gRU5HRElSUz0gY2Nnb3N0 Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3NsCi1AQCAtMTQ4LDcgKzE1MSw3IEBAIFNESVJTPSAgXAot IAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2luZSBcCi0gCWJ1ZmZlciBiaW8g c3RhY2sgbGhhc2ggcmFuZCBlcnIgXAotIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0 eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKLS0JY21zIHBxdWV1ZSB0cyBq cGFrZSBzcnAgc3RvcmUgY21hYwotKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFj IGZpcHMKLSAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5 IC4vQ29uZmlndXJlCi0gIyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgotIAotQEAg LTIzNyw2ICsyNDAsNyBAQCBCVUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNT Ci0gCQlGSVBTTElCRElSPScke0ZJUFNMSUJESVJ9JwkJCVwKLSAJCUZJUFNESVI9JyR7RklQU0RJ Un0nCQkJCVwKLSAJCUZJUFNDQU5MSUI9IiQke0ZJUFNDQU5MSUI6LSQoRklQU0NBTkxJQil9Iglc Ci0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAotIAkJVEhJUz0kJHtUSElTOi0kQH0gTUFL RUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KLSAjIE1BS0VPVkVSUklERVM9IGVmZmVjdGl2 ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKLSAjIHdo aWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1lbnQg d2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvc3NsL3NzbF9hbGdzLmMuZmlw cyBvcGVuc3NsLTEuMC4xLWJldGEzL3NzbC9zc2xfYWxncy5jCi0tLS0gb3BlbnNzbC0xLjAuMS1i ZXRhMy9zc2wvc3NsX2FsZ3MuYy5maXBzCTIwMTItMDEtMTUgMTQ6NDI6NTAuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMy9zc2wvc3NsX2FsZ3MuYwkyMDEyLTAyLTI5IDEw OjMzOjAyLjgwNTI5NDk5MiArMDEwMAotQEAgLTY0LDYgKzY0LDEyIEBACi0gaW50IFNTTF9saWJy YXJ5X2luaXQodm9pZCkKLSAJewotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9p bml0X2xpYnJhcnkoKTsKLSsJaWYgKCFGSVBTX21vZGUoKSkKLSsJCXsKLSsjZW5kaWYKLSsKLSAj aWZuZGVmIE9QRU5TU0xfTk9fREVTCi0gCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2JjKCkpOwot IAlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOwotQEAgLTEzNiw2ICsxNDIsNTAg QEAgaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgp KTsKLSAJRVZQX2FkZF9kaWdlc3QoRVZQX2RzcygpKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCQl9Ci0rCWVsc2UKLSsJCXsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rCUVW UF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVO U1NMX05PX0FFUwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKLSsJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18y NTZfY2JjKCkpOwotKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7Ci0rCUVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xf Tk9fTUQ1Ci0rCS8qIG5lZWRlZCBldmVuIGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUyBNQUMgKi8K LSsJRVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f bWQ1LCJzc2wyLW1kNSIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDMtbWQ1 Iik7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQQotKwlFVlBfYWRkX2RpZ2VzdChF VlBfc2hhMSgpKTsgLyogUlNBIHdpdGggc2hhMSAqLwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhT Tl9zaGExLCJzc2wzLXNoYTEiKTsKLSsJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhS U0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKLSsjZW5kaWYKLSsjaWZuZGVmIE9QRU5TU0xf Tk9fU0hBMjU2Ci0rCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0rCUVWUF9hZGRfZGln ZXN0KEVWUF9zaGEyNTYoKSk7Ci0rI2VuZGlmCi0rI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgot KwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOwotKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hh NTEyKCkpOwotKyNlbmRpZgotKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmlu ZWQoT1BFTlNTTF9OT19EU0EpCi0rCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Eg d2l0aCBzaGExICovCi0rCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2Rz YVdpdGhTSEExXzIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNT MSIpOwotKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOwotKyNl bmRpZgotKyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNk c2EoKSk7Ci0rI2VuZGlmCi0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAK LSAJLyogVGhpcyB3aWxsIGluaXRpYWxpc2UgdGhlIGJ1aWx0LWluIGNvbXByZXNzaW9uIGFsZ29y aXRobXMuCi0gCSAgIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBhIFNUQUNLX09GKFNTTF9DT01QKSwg YnV0IHRoYXQgY2FuCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMS1iZXRhMy1zMzkweGJ1aWxk LnBhdGNoIGIvb3BlbnNzbC0xLjAuMS1iZXRhMy1zMzkweGJ1aWxkLnBhdGNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBiOTM3ZTJmLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjEt YmV0YTMtczM5MHhidWlsZC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjEtYmV0YTMvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLnMz OTB4YnVpbGQgb3BlbnNzbC0xLjAuMS1iZXRhMy9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwK LS0tLSBvcGVuc3NsLTEuMC4xLWJldGEzL2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbC5zMzkw eGJ1aWxkCTIwMTItMDItMjkgMTc6NDA6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMS1iZXRhMy9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwJMjAxMi0wMi0yOSAyMDowMzoz OS42NDIxODI5MDYgKzAxMDAKLUBAIC0xNzEsMTAgKzE3MSwxMCBAQCAkaWtleT0iJXI3IjsKLSAk aWlucD0iJXI4IjsKLSAKLSAkY29kZS49PDxfX187Ci0tLmdsb2JsCVJDNF9zZXRfa2V5Ci0tLnR5 cGUJUkM0X3NldF9rZXksXEBmdW5jdGlvbgotKy5nbG9ibAlwcml2YXRlX1JDNF9zZXRfa2V5Ci0r LnR5cGUJcHJpdmF0ZV9SQzRfc2V0X2tleSxcQGZ1bmN0aW9uCi0gLmFsaWduCTY0Ci0tUkM0X3Nl dF9rZXk6Ci0rcHJpdmF0ZV9SQzRfc2V0X2tleToKLSAJc3RtJHtnfQklcjYsJXI4LDYqJFNJWkVf VCgkc3ApCi0gCWxoaQkkY250LDI1NgotIAlsYQkkaWR4LDAoJXIwKQotQEAgLTIxMCw3ICsyMTAs NyBAQCBSQzRfc2V0X2tleToKLSAuTGRvbmU6Ci0gCWxtJHtnfQklcjYsJXI4LDYqJFNJWkVfVCgk c3ApCi0gCWJyCSRycAotLS5zaXplCVJDNF9zZXRfa2V5LC4tUkM0X3NldF9rZXkKLSsuc2l6ZQlw cml2YXRlX1JDNF9zZXRfa2V5LC4tcHJpdmF0ZV9SQzRfc2V0X2tleQotIAotIF9fXwotIH0KCmRp ZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4xYS1hbGdvLWRvYy5wYXRjaCBiL29wZW5zc2wtMS4wLjFh LWFsZ28tZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YWFh ODkKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4xYS1hbGdvLWRvYy5wYXRjaApAQCAt MCwwICsxLDc3IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9kb2MvY3J5cHRvL0VWUF9EaWdl c3RJbml0LnBvZC5hbGdvLWRvYyBvcGVuc3NsLTEuMC4xYS9kb2MvY3J5cHRvL0VWUF9EaWdlc3RJ bml0LnBvZAorLS0tIG9wZW5zc2wtMS4wLjFhL2RvYy9jcnlwdG8vRVZQX0RpZ2VzdEluaXQucG9k LmFsZ28tZG9jCTIwMTItMDQtMTEgMDA6Mjg6MjIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMWEvZG9jL2NyeXB0by9FVlBfRGlnZXN0SW5pdC5wb2QJMjAxMi0wNC0yMCAwOToxNDow MS44NjUxNjcwMTEgKzAyMDAKK0BAIC03NSw3ICs3NSw3IEBAIEVWUF9NRF9DVFhfY3JlYXRlKCkg YWxsb2NhdGVzLCBpbml0aWFsaXoKKyAKKyBFVlBfRGlnZXN0SW5pdF9leCgpIHNldHMgdXAgZGln ZXN0IGNvbnRleHQgQjxjdHg+IHRvIHVzZSBhIGRpZ2VzdAorIEI8dHlwZT4gZnJvbSBFTkdJTkUg QjxpbXBsPi4gQjxjdHg+IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgdGhpcwor LWZ1bmN0aW9uLiBCPHR5cGU+IHdpbGwgdHlwaWNhbGx5IGJlIHN1cHBsaWVkIGJ5IGEgZnVuY3Rp b25zdWNoIGFzIEVWUF9zaGExKCkuCisrZnVuY3Rpb24uIEI8dHlwZT4gd2lsbCB0eXBpY2FsbHkg YmUgc3VwcGxpZWQgYnkgYSBmdW5jdGlvbiBzdWNoIGFzIEVWUF9zaGExKCkuCisgSWYgQjxpbXBs PiBpcyBOVUxMIHRoZW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZGlnZXN0IEI8dHlw ZT4gaXMgdXNlZC4KKyAKKyBFVlBfRGlnZXN0VXBkYXRlKCkgaGFzaGVzIEI8Y250PiBieXRlcyBv ZiBkYXRhIGF0IEI8ZD4gaW50byB0aGUKK0BAIC0xNjUsNyArMTY1LDggQEAgRVZQX01EX3NpemUo KSwgRVZQX01EX2Jsb2NrX3NpemUoKSwgRVZQXworIEVWUF9NRF9DVFhfYmxvY2tfc2l6ZSgpCWFu ZCBFVlBfTURfYmxvY2tfc2l6ZSgpIHJldHVybiB0aGUgZGlnZXN0IG9yIGJsb2NrCisgc2l6ZSBp biBieXRlcy4KKyAKKy1FVlBfbWRfbnVsbCgpLCBFVlBfbWQyKCksIEVWUF9tZDUoKSwgRVZQX3No YSgpLCBFVlBfc2hhMSgpLCBFVlBfZHNzKCksCisrRVZQX21kX251bGwoKSwgRVZQX21kMigpLCBF VlBfbWQ1KCksIEVWUF9zaGEoKSwgRVZQX3NoYTEoKSwKKytFVlBfc2hhMjI0KCksIEVWUF9zaGEy NTYoKSwgRVZQX3NoYTM4NCgpLCBFVlBfc2hhNTEyKCksIEVWUF9kc3MoKSwKKyBFVlBfZHNzMSgp LCBFVlBfbWRjMigpIGFuZCBFVlBfcmlwZW1kMTYwKCkgcmV0dXJuIHBvaW50ZXJzIHRvIHRoZQor IGNvcnJlc3BvbmRpbmcgRVZQX01EIHN0cnVjdHVyZXMuCisgCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xYS9kb2MvY3J5cHRvL0VWUF9FbmNyeXB0SW5pdC5wb2QuYWxnby1kb2Mgb3BlbnNzbC0xLjAu MWEvZG9jL2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9kCistLS0gb3BlbnNzbC0xLjAuMWEvZG9j L2NyeXB0by9FVlBfRW5jcnlwdEluaXQucG9kLmFsZ28tZG9jCTIwMDUtMDQtMTUgMTg6MDE6MzUu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvZG9jL2NyeXB0by9FVlBfRW5jcnlw dEluaXQucG9kCTIwMTItMDQtMjAgMDk6MTA6NTkuMTE0NzM2NDY1ICswMjAwCitAQCAtOTEsNiAr OTEsMzIgQEAgRVZQX0NJUEhFUl9DVFhfc2V0X3BhZGRpbmcgLSBFVlAgY2lwaGVyCisgIGludCBF VlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl9DVFggKmMsIEFTTjFfVFlQRSAqdHlw ZSk7CisgIGludCBFVlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW0oRVZQX0NJUEhFUl9DVFggKmMsIEFT TjFfVFlQRSAqdHlwZSk7CisgCisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlMyh2b2lk KTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzX2VjYih2b2lkKTsKKysgY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzX2NmYjY0KHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVS ICpFVlBfZGVzX2VkZTNfY2ZiMSh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19l ZGUzX2NmYjgodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19vZmIodm9p ZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9kZXNfZWRlM19jYmModm9pZCk7CisrIGNvbnN0 IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2VjYih2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAq RVZQX2Flc18xMjhfY2JjKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9j ZmIxKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jZmI4KHZvaWQpOwor KyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF9jZmIxMjgodm9pZCk7CisrIGNvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMTI4X29mYih2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQ X2Flc18xOTJfZWNiKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9jYmMo dm9pZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NmYjEodm9pZCk7CisrIGNv bnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NmYjgodm9pZCk7CisrIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9hZXNfMTkyX2NmYjEyOCh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Fl c18xOTJfb2ZiKHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9lY2Iodm9p ZCk7CisrIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NiYyh2b2lkKTsKKysgY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfY2ZiMSh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAq RVZQX2Flc18yNTZfY2ZiOCh2b2lkKTsKKysgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZf Y2ZiMTI4KHZvaWQpOworKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9vZmIodm9pZCk7 CisrCisgPWhlYWQxIERFU0NSSVBUSU9OCisgCisgVGhlIEVWUCBjaXBoZXIgcm91dGluZXMgYXJl IGEgaGlnaCBsZXZlbCBpbnRlcmZhY2UgdG8gY2VydGFpbgorQEAgLTI5Nyw2ICszMjMsMTggQEAg VGhyZWUga2V5IHRyaXBsZSBERVMgaW4gQ0JDLCBFQ0IsIENGQiBhbgorIAorIERFU1ggYWxnb3Jp dGhtIGluIENCQyBtb2RlLgorIAorKz1pdGVtIEVWUF9hZXNfMTI4X2NiYyh2b2lkKSwgRVZQX2Fl c18xMjhfZWNiKCksIEVWUF9hZXNfMTI4X29mYih2b2lkKSwgRVZQX2Flc18xMjhfY2ZiMSh2b2lk KSwgRVZQX2Flc18xMjhfY2ZiOCh2b2lkKSwgRVZQX2Flc18xMjhfY2ZiMTI4KHZvaWQpCisrCisr QUVTIHdpdGggMTI4IGJpdCBrZXkgbGVuZ3RoIGluIENCQywgRUNCLCBPRkIgYW5kIENGQiBtb2Rl cyByZXNwZWN0aXZlbHkuCisrCisrPWl0ZW0gRVZQX2Flc18xOTJfY2JjKHZvaWQpLCBFVlBfYWVz XzE5Ml9lY2IoKSwgRVZQX2Flc18xOTJfb2ZiKHZvaWQpLCBFVlBfYWVzXzE5Ml9jZmIxKHZvaWQp LCBFVlBfYWVzXzE5Ml9jZmI4KHZvaWQpLCBFVlBfYWVzXzE5Ml9jZmIxMjgodm9pZCkKKysKKytB RVMgd2l0aCAxOTIgYml0IGtleSBsZW5ndGggaW4gQ0JDLCBFQ0IsIE9GQiBhbmQgQ0ZCIG1vZGVz IHJlc3BlY3RpdmVseS4KKysKKys9aXRlbSBFVlBfYWVzXzI1Nl9jYmModm9pZCksIEVWUF9hZXNf MjU2X2VjYigpLCBFVlBfYWVzXzI1Nl9vZmIodm9pZCksIEVWUF9hZXNfMjU2X2NmYjEodm9pZCks IEVWUF9hZXNfMjU2X2NmYjgodm9pZCksIEVWUF9hZXNfMjU2X2NmYjEyOCh2b2lkKQorKworK0FF UyB3aXRoIDI1NiBiaXQga2V5IGxlbmd0aCBpbiBDQkMsIEVDQiwgT0ZCIGFuZCBDRkIgbW9kZXMg cmVzcGVjdGl2ZWx5LgorKworID1pdGVtIEVWUF9yYzQodm9pZCkKKyAKKyBSQzQgc3RyZWFtIGNp cGhlci4gVGhpcyBpcyBhIHZhcmlhYmxlIGtleSBsZW5ndGggY2lwaGVyIHdpdGggZGVmYXVsdCBr ZXkgbGVuZ3RoIDEyOCBiaXRzLgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFhLWJhY2twb3J0 LnBhdGNoIGIvb3BlbnNzbC0xLjAuMWEtYmFja3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYjJjZDc2OQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4w LjFhLWJhY2twb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9ldnAvZV9yYzRfaG1hY19tZDUuYy5iYWNrcG9ydCBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZXZwL2VfcmM0X2htYWNfbWQ1LmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZw L2VfcmM0X2htYWNfbWQ1LmMuYmFja3BvcnQJMjAxMi0wNC0xOCAxOTo1MTozMy4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2VfcmM0X2htYWNfbWQ1LmMJMjAx Mi0wNC0yMCAwOToyMDoyOS40MTE4NjExMzAgKzAyMDAKK0BAIC0xMjEsNiArMTIxLDcgQEAgc3Rh dGljIGludCByYzRfaG1hY19tZDVfY2lwaGVyKEVWUF9DSVBIRQorIAkJbWQ1X29mZiA9IE1ENV9D QkxPQ0sta2V5LT5tZC5udW0sCisgCQlibG9ja3M7CisgCXVuc2lnbmVkIGludCBsOworKwlleHRl cm4gdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QW107CisgI2VuZGlmCisgCXNpemVfdAlw bGVuID0ga2V5LT5wYXlsb2FkX2xlbmd0aDsKKyAKK0BAIC0xMzIsNyArMTMzLDggQEAgc3RhdGlj IGludCByYzRfaG1hY19tZDVfY2lwaGVyKEVWUF9DSVBIRQorIAkJLyogY2lwaGVyIGhhcyB0byAi ZmFsbCBiZWhpbmQiICovCisgCQlpZiAocmM0X29mZj5tZDVfb2ZmKSBtZDVfb2ZmKz1NRDVfQ0JM T0NLOworIAorLQkJaWYgKHBsZW4+bWQ1X29mZiAmJiAoYmxvY2tzPShwbGVuLW1kNV9vZmYpL01E NV9DQkxPQ0spKSB7CisrCQlpZiAocGxlbj5tZDVfb2ZmICYmIChibG9ja3M9KHBsZW4tbWQ1X29m ZikvTUQ1X0NCTE9DSykgJiYKKysJCSAgICAoT1BFTlNTTF9pYTMyY2FwX1BbMF0mKDE8PDIwKSk9 PTApIHsKKyAJCQlNRDVfVXBkYXRlKCZrZXktPm1kLGluLG1kNV9vZmYpOworIAkJCVJDNCgma2V5 LT5rcyxyYzRfb2ZmLGluLG91dCk7CisgCitAQCAtMTcyLDcgKzE3NCw4IEBAIHN0YXRpYyBpbnQg cmM0X2htYWNfbWQ1X2NpcGhlcihFVlBfQ0lQSEUKKyAJCWlmIChtZDVfb2ZmPnJjNF9vZmYpCXJj NF9vZmYgKz0gMipNRDVfQ0JMT0NLOworIAkJZWxzZQkJCXJjNF9vZmYgKz0gTUQ1X0NCTE9DSzsK KyAKKy0JCWlmIChsZW4+cmM0X29mZiAmJiAoYmxvY2tzPShsZW4tcmM0X29mZikvTUQ1X0NCTE9D SykpIHsKKysJCWlmIChsZW4+cmM0X29mZiAmJiAoYmxvY2tzPShsZW4tcmM0X29mZikvTUQ1X0NC TE9DSykgJiYKKysJCSAgICAoT1BFTlNTTF9pYTMyY2FwX1BbMF0mKDE8PDIwKSk9PTApIHsKKyAJ CQlSQzQoJmtleS0+a3MscmM0X29mZixpbixvdXQpOworIAkJCU1ENV9VcGRhdGUoJmtleS0+bWQs b3V0LG1kNV9vZmYpOworIAorQEAgLTI4OSw4ICsyOTIsNiBAQCBzdGF0aWMgRVZQX0NJUEhFUiBy NF9obWFjX21kNV9jaXBoZXI9CisgCisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX3JjNF9obWFjX21k NSh2b2lkKQorIAl7CistCWV4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbXTsK Ky0JLyogUkM0X0NIQVIgZmxhZyAtLS0tLS0tLS0tLS12dnZ2diAqLworLQlyZXR1cm4oT1BFTlNT TF9pYTMyY2FwX1BbMF0mKDE8PDIwKSA/IE5VTEwgOiAmcjRfaG1hY19tZDVfY2lwaGVyKTsKKysJ cmV0dXJuKCZyNF9obWFjX21kNV9jaXBoZXIpOworIAl9CisgI2VuZGlmCgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjAuMWEtZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjFhLWZpcHMucGF0Y2gKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc1NDQ5NQotLS0gL2Rldi9udWxsCisr KyBiL29wZW5zc2wtMS4wLjFhLWZpcHMucGF0Y2gKQEAgLTAsMCArMSwyMTE0NyBAQAorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWEvYXBwcy9wa2NzMTIuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2FwcHMv cGtjczEyLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9hcHBzL3BrY3MxMi5jLmZpcHMJMjAxMS0wMy0x MyAxOToyMDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9hcHBzL3BrY3Mx Mi5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjI5Nzg0OTQ4ICswMjAwCitAQCAtNjcsNiArNjcsOSBA QAorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgI2RlZmluZSBQUk9HIHBrY3MxMl9t YWluCisgCitAQCAtMTMwLDYgKzEzMywxMSBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCisgCisgICAgIGFwcHNfc3RhcnR1cCgpOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysg ICAgaWYgKEZJUFNfbW9kZSgpKQorKwljZXJ0X3BiZSA9IGtleV9wYmU7IC8qIGNhbm5vdCB1c2Ug UkMyIGluIHRoZSBGSVBTIG1vZGUgKi8KKysjZW5kaWYKKysKKyAgICAgZW5jID0gRVZQX2Rlc19l ZGUzX2NiYygpOworICAgICBpZiAoYmlvX2VyciA9PSBOVUxMICkgYmlvX2VyciA9IEJJT19uZXdf ZnAgKHN0ZGVyciwgQklPX05PQ0xPU0UpOworIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvYXBw cy9zcGVlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvYXBwcy9zcGVlZC5jCistLS0gb3BlbnNzbC0x LjAuMWEvYXBwcy9zcGVlZC5jLmZpcHMJMjAxMi0wMS0xMSAyMjo0OToxNi4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xYS9hcHBzL3NwZWVkLmMJMjAxMi0wNC0yMCAwOTowNzowNi4y MzA3ODQ5NjkgKzAyMDAKK0BAIC0xOTUsNyArMTk1LDYgQEAKKyAjaWZkZWYgT1BFTlNTTF9ET0lO R19NQUtFREVQRU5ECisgI3VuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkKKyAjdW5kZWYgQUVTX3Nl dF9kZWNyeXB0X2tleQorLSN1bmRlZiBERVNfc2V0X2tleV91bmNoZWNrZWQKKyAjZW5kaWYKKyAj ZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5CisgI2RlZmluZSBDQVNUX3NldF9r ZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0yMDMsNyArMjAyLDYgQEAKKyAjZGVmaW5lIFNF RURfc2V0X2tleQlwcml2YXRlX1NFRURfc2V0X2tleQorICNkZWZpbmUgUkMyX3NldF9rZXkJcHJp dmF0ZV9SQzJfc2V0X2tleQorICNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tl eQorLSNkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkCXByaXZhdGVfREVTX3NldF9rZXlfdW5j aGVja2VkCisgI2RlZmluZSBBRVNfc2V0X2VuY3J5cHRfa2V5CXByaXZhdGVfQUVTX3NldF9lbmNy eXB0X2tleQorICNkZWZpbmUgQUVTX3NldF9kZWNyeXB0X2tleQlwcml2YXRlX0FFU19zZXRfZGVj cnlwdF9rZXkKKyAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9zZXRf a2V5CitAQCAtOTQxLDcgKzkzOSwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CisgI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorIAkJCWlmIChzdHJjbXAoKmFyZ3YsInJzYSIpID09 IDApCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkJaWYgKCFGSVBTX21vZGUoKSkK KysjZW5kaWYKKysJCQkJeworIAkJCXJzYV9kb2l0W1JfUlNBXzUxMl09MTsKKysJCQkJfQorIAkJ CXJzYV9kb2l0W1JfUlNBXzEwMjRdPTE7CisgCQkJcnNhX2RvaXRbUl9SU0FfMjA0OF09MTsKKyAJ CQlyc2FfZG9pdFtSX1JTQV80MDk2XT0xOworQEAgLTk1MSw3ICs5NTQsMTIgQEAgaW50IE1BSU4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICNpZm5kZWYgT1BFTlNTTF9OT19EU0EKKyAJCQlpZiAo c3RyY21wKCphcmd2LCJkc2EiKSA9PSAwKQorIAkJCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CQkJCWlmICghRklQU19tb2RlKCkpCisrI2VuZGlmCisrCQkJCXsKKyAJCQlkc2FfZG9pdFtSX0RT QV81MTJdPTE7CisrCQkJCX0KKyAJCQlkc2FfZG9pdFtSX0RTQV8xMDI0XT0xOworIAkJCWRzYV9k b2l0W1JfRFNBXzIwNDhdPTE7CisgCQkJfQorQEAgLTEyMjYsMzAgKzEyMzQsNTQgQEAgaW50IE1B SU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlBRVNfc2V0X2VuY3J5cHRfa2V5KGtleTMyLDI1 NiwmYWVzX2tzMyk7CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCisrCWlm IChkb2l0W0RfQ0JDXzEyOF9DTUxdIHx8IGRvaXRbRF9DQkNfMTkyX0NNTF0gfHwgZG9pdFtEX0NC Q18yNTZfQ01MXSkKKysJICAgIHsKKyAJQ2FtZWxsaWFfc2V0X2tleShrZXkxNiwxMjgsJmNhbWVs bGlhX2tzMSk7CisgCUNhbWVsbGlhX3NldF9rZXkoY2tleTI0LDE5MiwmY2FtZWxsaWFfa3MyKTsK KyAJQ2FtZWxsaWFfc2V0X2tleShja2V5MzIsMjU2LCZjYW1lbGxpYV9rczMpOworKwkgICAgfQor ICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19JREVBCisrCWlmIChkb2l0W0RfQ0JDX0lERUFd KQorKwkgICAgeworIAlpZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwmaWRlYV9rcyk7CisrCSAg ICB9CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1NFRUQKKysJaWYgKGRvaXRbRF9DQkNf U0VFRF0pCisrCSAgICB7CisgCVNFRURfc2V0X2tleShrZXkxNiwmc2VlZF9rcyk7CisrCSAgICB9 CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1JDNAorKwlpZiAoZG9pdFtEX1JDNF0pCisr CSAgICB7CisgCVJDNF9zZXRfa2V5KCZyYzRfa3MsMTYsa2V5MTYpOworKwkgICAgfQorICNlbmRp ZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzIKKysJaWYgKGRvaXRbRF9DQkNfUkMyXSkKKysJICAg IHsKKyAJUkMyX3NldF9rZXkoJnJjMl9rcywxNixrZXkxNiwxMjgpOworKwkgICAgfQorICNlbmRp ZgorICNpZm5kZWYgT1BFTlNTTF9OT19SQzUKKysJaWYgKGRvaXRbRF9DQkNfUkM1XSkKKysJICAg IHsKKyAJUkM1XzMyX3NldF9rZXkoJnJjNV9rcywxNixrZXkxNiwxMik7CisrCSAgICB9CisgI2Vu ZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0JGCisrCWlmIChkb2l0W0RfQ0JDX0JGXSkKKysJICAg IHsKKyAJQkZfc2V0X2tleSgmYmZfa3MsMTYsa2V5MTYpOworKwkgICAgfQorICNlbmRpZgorICNp Zm5kZWYgT1BFTlNTTF9OT19DQVNUCisrCWlmIChkb2l0W0RfQ0JDX0NBU1RdKQorKwkgICAgewor IAlDQVNUX3NldF9rZXkoJmNhc3Rfa3MsMTYsa2V5MTYpOworKwkgICAgfQorICNlbmRpZgorICNp Zm5kZWYgT1BFTlNTTF9OT19SU0EKKyAJbWVtc2V0KHJzYV9jLDAsc2l6ZW9mKHJzYV9jKSk7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4xYS9Db25maWd1cmUuZmlwcyBvcGVuc3NsLTEuMC4xYS9Db25m aWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4xYS9Db25maWd1cmUuZmlwcwkyMDEyLTA0LTIwIDA5OjA3 OjA2LjE5MDc4NDExMSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL0NvbmZpZ3VyZQkyMDEyLTA0 LTIwIDA5OjA3OjA2LjIzMjc4NTAxMSArMDIwMAorQEAgLTk5MywxMSArOTkzLDYgQEAgaWYgKGRl ZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZAorIAkkZGlzYWJsZWR7InNzbDIifSA9 ICJmb3JjZWQiOworIAl9CisgCistaWYgKCRmaXBzICYmICRmaXBzbGliZGlyIGVxICIiKQorLQl7 CistCSRmaXBzbGliZGlyID0gJGZpcHNkaXIgLiAiL2xpYi8iOworLQl9CistCisgIyBSU0FYIEVO R0lORSBzZXRzIGRlZmF1bHQgbm9uLUZJUFMgUlNBIG1ldGhvZC4KKyBpZiAoJGZpcHMpCisgCXsK K0BAIC0xNDcyLDcgKzE0NjcsNiBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fR0YybSIg aWYgKCRiCisgaWYgKCRmaXBzKQorIAl7CisgCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVm aW5lIE9QRU5TU0xfRklQU1xuIjsKKy0JJGNmbGFncyAuPSAiIC1JXCQoRklQU0RJUikvaW5jbHVk ZSI7CisgCX0KKyAKKyAkY3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVzcyAoJGNwdWlkX29iaiA9 fiAvXC5vJC8pOworQEAgLTE2NTksOSArMTY1MywxMiBAQCB3aGlsZSAoPElOPikKKyAKKyAJcy9e RklQU0RJUj0uKi9GSVBTRElSPSRmaXBzZGlyLzsKKyAJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElC RElSPSRmaXBzbGliZGlyLzsKKy0Jcy9eRklQU0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmNyeXB0 by8gaWYgJGZpcHM7CisgCXMvXkJBU0VBRERSPS4qL0JBU0VBRERSPSRiYXNlYWRkci87CisgCisr CWlmICgkZmlwcykKKysJCXsKKysJCXMvXkZJUFM9LiovRklQUz15ZXMvOworKwkJfQorIAlzL15T SExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKKyAJcy9eU0hMSUJf TUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87CisgCXMvXlNIQVJFRF9MSUJTPS4qL1NI QVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFy ZWQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCistLS0gb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMJMjAxMS0wNi0wNSAxOTozNjozMy4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vYWVzL2Flc19taXNjLmMJMjAxMi0wNC0y MCAwOTowNzowNi4yMzI3ODUwMTEgKzAyMDAKK0BAIC02OSwxNyArNjksMTEgQEAgY29uc3QgY2hh ciAqQUVTX29wdGlvbnModm9pZCkgeworIGludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVu c2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAkJCUFFU19LRVkgKmtleSkK KyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKKy0j ZW5kaWYKKyAJcmV0dXJuIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRz LCBrZXkpOworIAl9CisgCisgaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQg Y2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgCQkJQUVTX0tFWSAqa2V5KQorIAl7Cist I2lmZGVmIE9QRU5TU0xfRklQUworLQlmaXBzX2NpcGhlcl9hYm9ydChBRVMpOworLSNlbmRpZgor IAlyZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7 CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9jbWFjL2NtYWMuYy5maXBzIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9jbWFjL2NtYWMuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9jbWFjL2NtYWMuYy5maXBzCTIwMTItMDQtMTEgMTc6MTE6MTYuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2NtYWMvY21hYy5jCTIwMTItMDQtMjAgMDk6MDc6MDYu MjMzNzg1MDMzICswMjAwCitAQCAtMTA3LDEzICsxMDcsNiBAQCBDTUFDX0NUWCAqQ01BQ19DVFhf bmV3KHZvaWQpCisgCisgdm9pZCBDTUFDX0NUWF9jbGVhbnVwKENNQUNfQ1RYICpjdHgpCisgCXsK Ky0jaWZkZWYgT1BFTlNTTF9GSVBTCistCWlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVu Z2luZSkKKy0JCXsKKy0JCUZJUFNfY21hY19jdHhfY2xlYW51cChjdHgpOworLQkJcmV0dXJuOwor LQkJfQorLSNlbmRpZgorIAlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgtPmNjdHgpOworIAlP UEVOU1NMX2NsZWFuc2UoY3R4LT50YmwsIEVWUF9NQVhfQkxPQ0tfTEVOR1RIKTsKKyAJT1BFTlNT TF9jbGVhbnNlKGN0eC0+azEsIEVWUF9NQVhfQkxPQ0tfTEVOR1RIKTsKK0BAIC0xNjQsMTEgKzE1 Nyw2IEBAIGludCBDTUFDX0luaXQoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pZAorIAkJCUVWUGVy cihFVlBfRl9DTUFDX0lOSVQsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKyAJCQlyZXR1cm4g MDsKKyAJCQl9CistCQkvKiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGlu IEZJUFNfY21hY19pbml0LAorLQkJICogdmlhIEZJUFNfY2lwaGVyaW5pdCgpLgorLQkJICovCist CQlpZiAoIWltcGwgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCistCQkJcmV0dXJuIEZJUFNfY21hY19p bml0KGN0eCwga2V5LCBrZXlsZW4sIGNpcGhlciwgTlVMTCk7CisgCQl9CisgI2VuZGlmCisgCS8q IEFsbCB6ZXJvcyBtZWFucyByZXN0YXJ0ICovCitAQCAtMjE2LDEwICsyMDQsNiBAQCBpbnQgQ01B Q19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pCisgCXsKKyAJY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSA9IGluOworIAlzaXplX3QgYmw7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlp ZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCistCQlyZXR1cm4gRklQU19jbWFj X3VwZGF0ZShjdHgsIGluLCBkbGVuKTsKKy0jZW5kaWYKKyAJaWYgKGN0eC0+bmxhc3RfYmxvY2sg PT0gLTEpCisgCQlyZXR1cm4gMDsKKyAJaWYgKGRsZW4gPT0gMCkKK0BAIC0yNjEsMTAgKzI0NSw2 IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2kKKyBpbnQgQ01BQ19G aW5hbChDTUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCAqcG91dGxlbikK KyAJeworIAlpbnQgaSwgYmwsIGxiOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNf bW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQorLQkJcmV0dXJuIEZJUFNfY21hY19maW5hbChj dHgsIG91dCwgcG91dGxlbik7CistI2VuZGlmCisgCWlmIChjdHgtPm5sYXN0X2Jsb2NrID09IC0x KQorIAkJcmV0dXJuIDA7CisgCWJsID0gRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSgmY3R4LT5j Y3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9jcnlwdG8uaC5maXBzIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9jcnlwdG8uaAorLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9jcnlw dG8uaC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDUuOTU5Nzc5MTU5ICswMjAwCisrKysgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2NyeXB0by5oCTIwMTItMDQtMjAgMDk6MDc6MDYuMjMzNzg1MDMzICsw MjAwCitAQCAtNTUzLDI0ICs1NTMsMjkgQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50IHIpOworIHZv aWQgT1BFTlNTTF9pbml0KHZvaWQpOworIAorICNkZWZpbmUgZmlwc19tZF9pbml0KGFsZykgZmlw c19tZF9pbml0X2N0eChhbGcsIGFsZykKKysjZGVmaW5lIG5vbmZpcHNfbWRfaW5pdChhbGcpIG5v bmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCisrI2RlZmluZSBmaXBzX21kX2luaXRfY3R4KGFs ZywgY3gpIFwKKysJaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCisgCisgI2lmZGVmIE9QRU5T U0xfRklQUworLSNkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisrI2RlZmluZSBu b25maXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKyAJaW50IGFsZyMjX0luaXQoY3gjI19DVFgg KmMpIFwKKyAJeyBcCisgCWlmIChGSVBTX21vZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19M SU5FX18sIFwKKy0JCSJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gZGlnZXN0ICIgI2FsZyAiIGZvcmJp ZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKKysJCSJEaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGlu IEZJUFMgbW9kZSEiKTsgXAorIAlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKyAJ fSBcCisgCWludCBwcml2YXRlXyMjYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKyAKKyAjZGVmaW5l IGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgXAorIAlpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUo X19GSUxFX18sIF9fTElORV9fLCBcCistCQkiTG93IGxldmVsIEFQSSBjYWxsIHRvIGNpcGhlciAi ICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCisrCQkiQ2lwaGVyICIgI2FsZyAiIGZv cmJpZGRlbiBpbiBGSVBTIG1vZGUhIikKKysKKysvKiBkaWUgaWYgRklQUyBzZWxmdGVzdCBmYWls ZWQgKi8KKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7CisgCisgI2Vsc2UKKy0jZGVm aW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAorLQlpbnQgYWxnIyNfSW5pdChjeCMjX0NU WCAqYykKKysjZGVmaW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgZmlwc19tZF9pbml0 X2N0eChhbGcsIGN4KQorICNkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSB3aGlsZSgwKQor ICNlbmRpZgorIAorQEAgLTU4MCw2ICs1ODUsOSBAQCB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsK KyAgKi8KKyB2b2lkIEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOworIAorKyNkZWZpbmUg T1BFTlNTTF9IQVZFX0lOSVQJMQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Cisr CisgLyogRXJyb3IgY29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1 bmN0aW9uIGNvZGVzLiAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Rlcy9kZXMu aC5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kZXMvZGVzLmgKKy0tLSBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZGVzL2Rlcy5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4wMzA3ODA2ODEgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGVzL2Rlcy5oCTIwMTItMDQtMjAgMDk6MDc6 MDYuMjM0Nzg1MDU1ICswMjAwCitAQCAtMjI0LDkgKzIyNCw2IEBAIGludCBERVNfc2V0X2tleShj b25zdF9ERVNfY2Jsb2NrICprZXksREUKKyBpbnQgREVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Js b2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOworIGludCBERVNfc2V0X2tleV9j aGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7 Cisgdm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19r ZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistdm9pZCBwcml2 YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9z Y2hlZHVsZSAqc2NoZWR1bGUpOworLSNlbmRpZgorIHZvaWQgREVTX3N0cmluZ190b19rZXkoY29u c3QgY2hhciAqc3RyLERFU19jYmxvY2sgKmtleSk7Cisgdm9pZCBERVNfc3RyaW5nX3RvXzJrZXlz KGNvbnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkxLERFU19jYmxvY2sgKmtleTIpOworIHZv aWQgREVTX2NmYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hh ciAqb3V0LGxvbmcgbGVuZ3RoLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Rlcy9z ZXRfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGVzL3NldF9rZXkuYworLS0tIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMJMjAxMS0wNi0wMSAxODo1NDow NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGVzL3NldF9rZXku YwkyMDEyLTA0LTIwIDA5OjA3OjA2LjIzNDc4NTA1NSArMDIwMAorQEAgLTMzNywxMyArMzM3LDYg QEAgaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9jaworIAl9CisgCisgdm9p ZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3Nj aGVkdWxlICpzY2hlZHVsZSkKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistCXsKKy0JZmlwc19jaXBo ZXJfYWJvcnQoREVTKTsKKy0JcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoa2V5LCBzY2hl ZHVsZSk7CistCX0KKy12b2lkIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RF U19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCistI2VuZGlmCisgCXsK KyAJc3RhdGljIGNvbnN0IGludCBzaGlmdHMyWzE2XT17MCwwLDEsMSwxLDEsMSwxLDAsMSwxLDEs MSwxLDEsMH07CisgCXJlZ2lzdGVyIERFU19MT05HIGMsZCx0LHMsdDI7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v ZGgvZGhfZ2VuLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcwky MDExLTA2LTA5IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9kaC9kaF9nZW4uYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjIzNTc4NTA3NyArMDIwMAorQEAg LTg0LDExICs4NCw2IEBAIGludCBESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERIICpyZXQsIGkK KyAjZW5kaWYKKyAJaWYocmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMpCisgCQlyZXR1cm4gcmV0 LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOwor LSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJuIEZJUFNf ZGhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChyZXQsIHByaW1lX2xlbiwKKy0JCQkJCQkJZ2VuZXJh dG9yLCBjYik7CistI2VuZGlmCisgCXJldHVybiBkaF9idWlsdGluX2dlbnBhcmFtcyhyZXQsIHBy aW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7CisgCX0KKyAKK0BAIC0xMjMsNiArMTE4LDIwIEBAIHN0 YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwKKyAJaW50IGcsb2s9IC0xOwor IAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VO UEFSQU1TLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0K KysKKysJaWYgKEZJUFNfbW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlO X01PRFVMVVNfQklUUykpCisrCQl7CisrCQlESGVycihESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1T LCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYK KysKKyAJY3R4PUJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAJ Qk5fQ1RYX3N0YXJ0KGN0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgvZGgu aC5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2RoL2RoLmguZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA1Ljg5ODc3Nzg1MiArMDIwMAor KysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kaC9kaC5oCTIwMTItMDQtMjAgMDk6MDc6MDYuMjM1 Nzg1MDc3ICswMjAwCitAQCAtNzcsNiArNzcsOCBAQAorICMgZGVmaW5lIE9QRU5TU0xfREhfTUFY X01PRFVMVVNfQklUUwkxMDAwMAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNTTF9ESF9GSVBT X01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1Ag ICAgIDB4MDEKKyAjZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAyIC8qIG5ldyB3 aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERICisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCitkaWZm IC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZGgvZGhfa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgvZGhfa2V5 LmMuZmlwcwkyMDExLTExLTE0IDE1OjE2OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9kaC9kaF9rZXkuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjIzNTc4NTA3NyAr MDIwMAorQEAgLTYxLDYgKzYxLDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNs dWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3Rh dGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVu c2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpOworQEAgLTEw NCw3ICsxMDcsNyBAQCBjb21wdXRlX2tleSwKKyBkaF9ibl9tb2RfZXhwLAorIGRoX2luaXQsCisg ZGhfZmluaXNoLAorLTAsCisrREhfRkxBR19GSVBTX01FVEhPRCwKKyBOVUxMLAorIE5VTEwKKyB9 OworQEAgLTEyMyw2ICsxMjYsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQor IAlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9r ZXk9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAo Qk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQor KwkJeworKwkJREhlcnIoREhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxM KTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorKworIAljdHggPSBCTl9DVFhfbmV3KCk7 CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CisgCitAQCAtMjEzLDYgKzIyNCwxMyBAQCBz dGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCisgCQlESGVycihESF9GX0NP TVBVVEVfS0VZLERIX1JfTU9EVUxVU19UT09fTEFSR0UpOworIAkJZ290byBlcnI7CisgCQl9Cisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRo LT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJy KERIX0ZfQ09NUFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJy OworKwkJfQorKyNlbmRpZgorIAorIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0g TlVMTCkgZ290byBlcnI7CitAQCAtMjgwLDYgKzI5OCw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9k X2V4cChjb25zdCBESCAqZGgsIEIKKyAKKyBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQorIAl7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlm CisgCWRoLT5mbGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIAl9 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgvZGhfbGliLmMuZmlwcyBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vZGgvZGhfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZGgv ZGhfbGliLmMuZmlwcwkyMDExLTA2LTIwIDIxOjQxOjExLjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9kaC9kaF9saWIuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjIzNjc4 NTA5OSArMDIwMAorQEAgLTgxLDE0ICs4MSw3IEBAIGNvbnN0IERIX01FVEhPRCAqREhfZ2V0X2Rl ZmF1bHRfbWV0aG9kKHYKKyAJeworIAlpZighZGVmYXVsdF9ESF9tZXRob2QpCisgCQl7CistI2lm ZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNfbW9kZSgpKQorLQkJCXJldHVybiBGSVBTX2Ro X29wZW5zc2woKTsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gREhfT3BlblNTTCgpOworLSNlbHNlCisg CQlkZWZhdWx0X0RIX21ldGhvZCA9IERIX09wZW5TU0woKTsKKy0jZW5kaWYKKyAJCX0KKyAJcmV0 dXJuIGRlZmF1bHRfREhfbWV0aG9kOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZHNhL2RzYV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX2Vyci5j CistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcwkyMDExLTEwLTEw IDAxOjEzOjQ5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2Ev ZHNhX2Vyci5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjM2Nzg1MDk5ICswMjAwCitAQCAtNzQsNiAr NzQsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVuY3RzW109Cisge0VSUl9G VU5DKERTQV9GX0RPX0RTQV9QUklOVCksCSJET19EU0FfUFJJTlQifSwKKyB7RVJSX0ZVTkMoRFNB X0ZfRFNBUEFSQU1TX1BSSU5UKSwJIkRTQXBhcmFtc19wcmludCJ9LAorIHtFUlJfRlVOQyhEU0Ff Rl9EU0FQQVJBTVNfUFJJTlRfRlApLAkiRFNBcGFyYW1zX3ByaW50X2ZwIn0sCisre0VSUl9GVU5D KERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiksCSJkc2FfYnVpbHRpbl9rZXlnZW4ifSwKKyt7RVJS X0ZVTkMoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4pLAkiZHNhX2J1aWx0aW5fcGFyYW1nZW4i fSwKKyB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0RPX1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKKyB7RVJS X0ZVTkMoRFNBX0ZfRFNBX0RPX1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0sCisge0VSUl9GVU5D KERTQV9GX0RTQV9HRU5FUkFURV9LRVkpLAkiRFNBX2dlbmVyYXRlX2tleSJ9LAorQEAgLTEwNiw2 ICsxMDgsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCisge0VS Ul9SRUFTT04oRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFKSwiZGF0YSB0b28gbGFy Z2UgZm9yIGtleSBzaXplIn0sCisge0VSUl9SRUFTT04oRFNBX1JfREVDT0RFX0VSUk9SKSAgICAg ICAgICAsImRlY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfRElHRVNU X1RZUEUpICAgLCJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0sCisre0VSUl9SRUFTT04oRFNBX1JfS0VZ X1NJWkVfSU5WQUxJRCkgICAgICAsImtleSBzaXplIGludmFsaWQifSwKKyt7RVJSX1JFQVNPTihE U0FfUl9LRVlfU0laRV9UT09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VS Ul9SRUFTT04oRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTKSAgICAsIm1pc3NpbmcgcGFyYW1ldGVy cyJ9LAorIHtFUlJfUkVBU09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgLCJtb2R1bHVz IHRvbyBsYXJnZSJ9LAorIHtFUlJfUkVBU09OKERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUykg LCJuZWVkIG5ldyBzZXR1cCB2YWx1ZXMifSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9kc2EvZHNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2FfZ2VuLmMK Ky0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMTEtMDYtMDkg MTc6MjE6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9k c2FfZ2VuLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yMzc3ODUxMjAgKzAyMDAKK0BAIC04NSw2ICs4 NSwxNCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKyAjZW5kaWYKKyAKKysjaWZuZGVm IE9QRU5TU0xfRklQUworK3N0YXRpYyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpj dHgsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisrCQljb25zdCBFVlBfTUQgKmV2cG1kLCB1 bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCisrCQlCSUdOVU0gKipwX3JldCwgQklH TlVNICoqcV9yZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYik7Cisrc3RhdGljIGlu dCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwK KysJCUJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsK KysjZW5kaWYKKysKKyBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGlu dCBiaXRzLAorIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgaW50IHNlZWRfbGVuLAor IAkJaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikK K0BAIC0xMDAsMTQgKzEwOCw2IEBAIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0Eg KnJldCwKKyAJaWYocmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4pCisgCQlyZXR1cm4gcmV0LT5tZXRo LT5kc2FfcGFyYW1nZW4ocmV0LCBiaXRzLCBzZWVkX2luLCBzZWVkX2xlbiwKKyAJCQkJY291bnRl cl9yZXQsIGhfcmV0LCBjYik7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQllbHNlIGlmIChGSVBT X21vZGUoKSkKKy0JCXsKKy0JCXJldHVybiBGSVBTX2RzYV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KHJldCwgYml0cywgCistCQkJCQkJCXNlZWRfaW4sIHNlZWRfbGVuLAorLQkJCQkJCQljb3VudGVy X3JldCwgaF9yZXQsIGNiKTsKKy0JCX0KKy0jZW5kaWYKKyAJZWxzZQorIAkJeworIAkJY29uc3Qg RVZQX01EICpldnBtZDsKK0BAIC0xMjUsMjcgKzEyNSwxMTkgQEAgaW50IERTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KERTQSAqcmV0LAorIAkJCX0KKyAKKyAJCXJldHVybiBkc2FfYnVpbHRpbl9w YXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLCBldnBtZCwKKy0JCQlzZWVkX2luLCBzZWVkX2xlbiwg TlVMTCwgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CisrCQkJCXNlZWRfaW4sIHNlZWRfbGVuLCBj b3VudGVyX3JldCwgaF9yZXQsIGNiKTsKKyAJCX0KKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKytpbnQgRklQU19kc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMs IHNpemVfdCBxYml0cywKKysJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hh ciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAorKwlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25l ZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCXJldHVybiBkc2FfYnVpbHRpbl9w YXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLAorKwkJZXZwbWQsIHNlZWRfaW4sIHNlZWRfbGVuLAor KwkJY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CisrCX0KKysjZW5kaWYKKysKKyBpbnQgZHNhX2J1 aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisgCWNv bnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVfdCBz ZWVkX2xlbiwKKy0JdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCisgCWludCAqY291bnRlcl9yZXQs IHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCisgCXsKKyAJaW50IG9rPTA7Cisg CXVuc2lnbmVkIGNoYXIgc2VlZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCUJJR05VTSAqZz1O VUxMLCpxPU5VTEwsKnA9TlVMTDsKKysJc2l6ZV90IHFzaXplID0gcWJpdHMgPj4gMzsKKysJQk5f Q1RYICpjdHg9TlVMTDsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfQlVJTFRJTl9Q QVJBTUdFTiwKKysJCSAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgZ290 byBlcnI7CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYKKysJICAgIChi aXRzICE9IDEwMjQgfHwgcWJpdHMgIT0gMTYwKSAmJgorKwkgICAgKGJpdHMgIT0gMjA0OCB8fCBx Yml0cyAhPSAyMjQpICYmCisrCSAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDI1NikgJiYK KysJICAgIChiaXRzICE9IDMwNzIgfHwgcWJpdHMgIT0gMjU2KSkKKysJCXsKKysJCURTQWVycihE U0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCk7CisrCQln b3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysJaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChz aXplX3QpcXNpemUpKQorKwkJc2VlZF9pbiA9IE5VTEw7CQkvKiBzZWVkIGJ1ZmZlciB0b28gc21h bGwgLS0gaWdub3JlICovCisrCWlmIChzZWVkX2xlbiA+IHNpemVvZihzZWVkKSkgCisrCQlzZWVk X2xlbiA9IHNpemVvZihzZWVkKTsJLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBs YXJnZXIgU0VFRCwKKysJCQkJCQkgKiBidXQgb3VyIGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3Ry aWN0ZWQgdG8gMjU2IGJpdHMqLworKwlpZiAoc2VlZF9pbiAhPSBOVUxMKQorKwkJbWVtY3B5KHNl ZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKKysJZWxzZQorKwkJc2VlZF9sZW4gPSAwOworKworKwlp ZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJQk5fQ1RY X3N0YXJ0KGN0eCk7CisrCisrCWlmICghRklQU19kc2FfZ2VuZXJhdGVfcHEoY3R4LCBiaXRzLCBx Yml0cywgZXZwbWQsCisrCQlzZWVkLCBzZWVkX2xlbiwgJnAsICZxLCBjb3VudGVyX3JldCwgY2Ip KQorKwkJZ290byBlcnI7CisrCisrCWlmICghRklQU19kc2FfZ2VuZXJhdGVfZyhjdHgsIHAsIHEs ICZnLCBoX3JldCwgY2IpKQorKwkJZ290byBlcnI7CisrCisrCW9rPTE7CisrZXJyOgorKwlpZiAo b2spCisrCQl7CisrCQlpZihyZXQtPnApCisrCQkJeworKwkJCUJOX2ZyZWUocmV0LT5wKTsKKysJ CQlyZXQtPnAgPSBOVUxMOworKwkJCX0KKysJCWlmKHJldC0+cSkKKysJCQl7CisrCQkJQk5fZnJl ZShyZXQtPnEpOworKwkJCXJldC0+cSA9IE5VTEw7CisrCQkJfQorKwkJaWYocmV0LT5nKQorKwkJ CXsKKysJCQlCTl9mcmVlKHJldC0+Zyk7CisrCQkJcmV0LT5nID0gTlVMTDsKKysJCQl9CisrCQly ZXQtPnA9Qk5fZHVwKHApOworKwkJcmV0LT5xPUJOX2R1cChxKTsKKysJCXJldC0+Zz1CTl9kdXAo Zyk7CisrCQlpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09 IE5VTEwpCisrCQkJb2s9MDsKKysJCX0KKysJaWYoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChj dHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0KKysJcmV0dXJuIG9rOworKwl9CisrCisr I2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMKKysjZW5kaWYKKytpbnQgRklQU19kc2FfZ2Vu ZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisrCQljb25z dCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCisrCQlC SUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9yZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNC ICpjYikKKysJeworKwlpbnQgb2s9MDsKKyAJdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNU X0xFTkdUSF07CistCXVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSxidWYy W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VT VF9MRU5HVEhdOworIAlCSUdOVU0gKnIwLCpXLCpYLCpjLCp0ZXN0OworLQlCSUdOVU0gKmc9TlVM TCwqcT1OVUxMLCpwPU5VTEw7CistCUJOX01PTlRfQ1RYICptb250PU5VTEw7CistCWludCBpLCBr LCBuPTAsIG09MCwgcXNpemUgPSBxYml0cyA+PiAzOworKwlCSUdOVU0gKnE9TlVMTCwqcD1OVUxM OworKwlpbnQgaSwgaywgYiwgbj0wLCBtPTAsIHFzaXplID0gcWJpdHMgPj4gMzsKKyAJaW50IGNv dW50ZXI9MDsKKyAJaW50IHI9MDsKKy0JQk5fQ1RYICpjdHg9TlVMTDsKKy0JdW5zaWduZWQgaW50 IGg9MjsKKyAKKyAJaWYgKHFzaXplICE9IFNIQV9ESUdFU1RfTEVOR1RIICYmIHFzaXplICE9IFNI QTIyNF9ESUdFU1RfTEVOR1RIICYmCisgCSAgICBxc2l6ZSAhPSBTSEEyNTZfRElHRVNUX0xFTkdU SCkKK0BAIC0xNTMsNTEgKzI0NSw0MyBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpy ZXQsIHNpemVfCisgCQlyZXR1cm4gMDsKKyAKKyAJaWYgKGV2cG1kID09IE5VTEwpCistCQkvKiB1 c2UgU0hBMSBhcyBkZWZhdWx0ICovCistCQlldnBtZCA9IEVWUF9zaGExKCk7CisrCSAgICB7Cisr CQlpZiAocWJpdHMgPD0gMTYwKQorKwkJCWV2cG1kID0gRVZQX3NoYTEoKTsKKysJCWVsc2UgaWYg KHFiaXRzIDw9IDIyNCkKKysJCQlldnBtZCA9IEVWUF9zaGEyMjQoKTsKKysJCWVsc2UKKysJCQll dnBtZCA9IEVWUF9zaGEyNTYoKTsKKysJICAgIH0KKyAKKyAJaWYgKGJpdHMgPCA1MTIpCisgCQli aXRzID0gNTEyOworIAorIAliaXRzID0gKGJpdHMrNjMpLzY0KjY0OworIAorLQkvKiBOQjogc2Vl ZF9sZW4gPT0gMCBpcyBzcGVjaWFsIGNhc2U6IGNvcHkgZ2VuZXJhdGVkIHNlZWQgdG8KKy0gCSAq IHNlZWRfaW4gaWYgaXQgaXMgbm90IE5VTEwuCistIAkgKi8KKy0JaWYgKHNlZWRfbGVuICYmIChz ZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQorLQkJc2VlZF9pbiA9IE5VTEw7CQkvKiBzZWVkIGJ1 ZmZlciB0b28gc21hbGwgLS0gaWdub3JlICovCistCWlmIChzZWVkX2xlbiA+IChzaXplX3QpcXNp emUpIAorLQkJc2VlZF9sZW4gPSBxc2l6ZTsJLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFs bG93cyBsYXJnZXIgU0VFRCwKKy0JCQkJCSAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUg cmVzdHJpY3RlZCB0byAxNjAgYml0cyovCistCWlmIChzZWVkX2luICE9IE5VTEwpCistCQltZW1j cHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9sZW4pOworLQorLQlpZiAoKGN0eD1CTl9DVFhfbmV3KCkp ID09IE5VTEwpCistCQlnb3RvIGVycjsKKy0KKy0JaWYgKChtb250PUJOX01PTlRfQ1RYX25ldygp KSA9PSBOVUxMKQorLQkJZ290byBlcnI7CistCistCUJOX0NUWF9zdGFydChjdHgpOworIAlyMCA9 IEJOX0NUWF9nZXQoY3R4KTsKKy0JZyA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJVyA9IEJOX0NUWF9n ZXQoY3R4KTsKKy0JcSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJKnFfcmV0ID0gcSA9IEJOX0NUWF9n ZXQoY3R4KTsKKyAJWCA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJYyA9IEJOX0NUWF9nZXQoY3R4KTsK Ky0JcCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJKnBfcmV0ID0gcCA9IEJOX0NUWF9nZXQoY3R4KTsK KyAJdGVzdCA9IEJOX0NUWF9nZXQoY3R4KTsKKyAKKyAJaWYgKCFCTl9sc2hpZnQodGVzdCxCTl92 YWx1ZV9vbmUoKSxiaXRzLTEpKQorIAkJZ290byBlcnI7CisgCisrCS8qIHN0ZXAgMyBuID0gXGxj ZWlsIGJpdHMgLyBxYml0cyBccmNlaWwgLSAxICovCisrCW4gPSAoYml0cytxYml0cy0xKS9xYml0 cyAtIDE7CisrCS8qIHN0ZXAgNCBiID0gYml0cyAtIDEgLSBuICogcWJpdHMgKi8KKysJYiA9IGJp dHMgLSAxIC0gbipxYml0czsKKysKKyAJZm9yICg7OykKKyAJCXsKKyAJCWZvciAoOzspIC8qIGZp bmQgcSAqLworIAkJCXsKKyAJCQlpbnQgc2VlZF9pc19yYW5kb207CisgCistCQkJLyogc3RlcCAx ICovCisrCQkJLyogc3RlcCA1IGdlbmVyYXRlIHNlZWQgKi8KKyAJCQlpZighQk5fR0VOQ0JfY2Fs bChjYiwgMCwgbSsrKSkKKyAJCQkJZ290byBlcnI7CisgCitAQCAtMjEyLDMwICsyOTYsMTggQEAg aW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJCQlzZWVkX2xlbj0w OyAvKiB1c2UgcmFuZG9tIHNlZWQgaWYgJ3NlZWRfaW4nIHR1cm5zIG91dCB0byBiZSBiYWQqLwor IAkJCQl9CisgCQkJbWVtY3B5KGJ1ZiAsIHNlZWQsIHFzaXplKTsKKy0JCQltZW1jcHkoYnVmMiwg c2VlZCwgcXNpemUpOworLQkJCS8qIHByZWNvbXB1dGUgIlNFRUQgKyAxIiBmb3Igc3RlcCA3OiAq LworLQkJCWZvciAoaSA9IHFzaXplLTE7IGkgPj0gMDsgaS0tKQorLQkJCQl7CistCQkJCWJ1Zltp XSsrOworLQkJCQlpZiAoYnVmW2ldICE9IDApCistCQkJCQlicmVhazsKKy0JCQkJfQorIAorLQkJ CS8qIHN0ZXAgMiAqLworKwkJCS8qIHN0ZXAgNiBVID0gaGFzaChzZWVkKSAqLworIAkJCWlmICgh RVZQX0RpZ2VzdChzZWVkLCBxc2l6ZSwgbWQsICAgTlVMTCwgZXZwbWQsIE5VTEwpKQorIAkJCQln b3RvIGVycjsKKy0JCQlpZiAoIUVWUF9EaWdlc3QoYnVmLCAgcXNpemUsIGJ1ZjIsIE5VTEwsIGV2 cG1kLCBOVUxMKSkKKy0JCQkJZ290byBlcnI7CistCQkJZm9yIChpID0gMDsgaSA8IHFzaXplOyBp KyspCistCQkJCW1kW2ldXj1idWYyW2ldOworIAorLQkJCS8qIHN0ZXAgMyAqLworKwkJCS8qIHN0 ZXAgNyBxID0gMl4ocWJpdHMtMSkgKyBVICsgMSAtIChVIG1vZCAyKSAqLworIAkJCW1kWzBdIHw9 IDB4ODA7CisgCQkJbWRbcXNpemUtMV0gfD0gMHgwMTsKKyAJCQlpZiAoIUJOX2JpbjJibihtZCwg cXNpemUsIHEpKQorIAkJCQlnb3RvIGVycjsKKyAKKy0JCQkvKiBzdGVwIDQgKi8KKysJCQkvKiBz dGVwIDggdGVzdCBmb3IgcHJpbWUgKDY0IHJvdW5kIG9mIFJhYmluLU1pbGxlcikgKi8KKyAJCQly ID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocSwgRFNTX3ByaW1lX2NoZWNrcywgY3R4LAorIAkJ CQkJc2VlZF9pc19yYW5kb20sIGNiKTsKKyAJCQlpZiAociA+IDApCitAQCAtMjQzLDI3ICszMTUs MjIgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJCWlmIChy ICE9IDApCisgCQkJCWdvdG8gZXJyOworIAorLQkJCS8qIGRvIGEgY2FsbGJhY2sgY2FsbCAqLwor LQkJCS8qIHN0ZXAgNSAqLworIAkJCX0KKyAKKyAJCWlmKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAw KSkgZ290byBlcnI7CisgCQlpZighQk5fR0VOQ0JfY2FsbChjYiwgMywgMCkpIGdvdG8gZXJyOwor IAorLQkJLyogc3RlcCA2ICovCisrCQkvKiBzdGVwIDExICovCisgCQljb3VudGVyPTA7CistCQkv KiAib2Zmc2V0ID0gMiIgKi8KKy0KKy0JCW49KGJpdHMtMSkvMTYwOworKwkJLyogIm9mZnNldCA9 IDEiICovCisgCisgCQlmb3IgKDs7KQorIAkJCXsKKyAJCQlpZiAoKGNvdW50ZXIgIT0gMCkgJiYg IUJOX0dFTkNCX2NhbGwoY2IsIDAsIGNvdW50ZXIpKQorIAkJCQlnb3RvIGVycjsKKyAKKy0JCQkv KiBzdGVwIDcgKi8KKysJCQkvKiBzdGVwIDExLjEsIDExLjIgb2J0YWluIFcgKi8KKyAJCQlCTl96 ZXJvKFcpOworLQkJCS8qIG5vdyAnYnVmJyBjb250YWlucyAiU0VFRCArIG9mZnNldCAtIDEiICov CisgCQkJZm9yIChrPTA7IGs8PW47IGsrKykKKyAJCQkJeworIAkJCQkvKiBvYnRhaW4gIlNFRUQg KyBvZmZzZXQgKyBrIiBieSBpbmNyZW1lbnRpbmc6ICovCitAQCAtMjc4LDI4ICszNDUsMzAgQEAg aW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJCQkJCQkJCU5VTEwp KQorIAkJCQkJZ290byBlcnI7CisgCistCQkJCS8qIHN0ZXAgOCAqLworIAkJCQlpZiAoIUJOX2Jp bjJibihtZCwgcXNpemUsIHIwKSkKKyAJCQkJCWdvdG8gZXJyOworLQkJCQlpZiAoIUJOX2xzaGlm dChyMCxyMCwocXNpemUgPDwgMykqaykpIGdvdG8gZXJyOworKwkJCQlpZiAoayA9PSBuKQorKwkJ CQkJQk5fbWFza19iaXRzKHIwLGIpOworKwkJCQlpZiAoIUJOX2xzaGlmdChyMCxyMCxxYml0cypr KSkgZ290byBlcnI7CisgCQkJCWlmICghQk5fYWRkKFcsVyxyMCkpIGdvdG8gZXJyOworIAkJCQl9 CisgCistCQkJLyogbW9yZSBvZiBzdGVwIDggKi8KKy0JCQlpZiAoIUJOX21hc2tfYml0cyhXLGJp dHMtMSkpIGdvdG8gZXJyOworKwkJCS8qIHN0ZXAgMTEuMyBYID0gVyArIDJeKEwtMSkgKi8KKyAJ CQlpZiAoIUJOX2NvcHkoWCxXKSkgZ290byBlcnI7CisgCQkJaWYgKCFCTl9hZGQoWCxYLHRlc3Qp KSBnb3RvIGVycjsKKyAKKy0JCQkvKiBzdGVwIDkgKi8KKysJCQkvKiBzdGVwIDExLjQgYyA9IFgg bW9kIDIqcSAqLworIAkJCWlmICghQk5fbHNoaWZ0MShyMCxxKSkgZ290byBlcnI7CisgCQkJaWYg KCFCTl9tb2QoYyxYLHIwLGN0eCkpIGdvdG8gZXJyOworKworKwkJCS8qIHN0ZXAgMTEuNSBwID0g WCAtIChjIC0gMSkgKi8KKyAJCQlpZiAoIUJOX3N1YihyMCxjLEJOX3ZhbHVlX29uZSgpKSkgZ290 byBlcnI7CisgCQkJaWYgKCFCTl9zdWIocCxYLHIwKSkgZ290byBlcnI7CisgCistCQkJLyogc3Rl cCAxMCAqLworKwkJCS8qIHN0ZXAgMTEuNiAqLworIAkJCWlmIChCTl9jbXAocCx0ZXN0KSA+PSAw KQorIAkJCQl7CistCQkJCS8qIHN0ZXAgMTEgKi8KKysJCQkJLyogc3RlcCAxMS43ICovCisgCQkJ CXIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChwLCBEU1NfcHJpbWVfY2hlY2tzLAorIAkJCQkJ CWN0eCwgMSwgY2IpOworIAkJCQlpZiAociA+IDApCitAQCAtMzA4LDE5ICszNzcsNDUgQEAgaW50 IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAkJCQkJZ290byBlcnI7Cisg CQkJCX0KKyAKKy0JCQkvKiBzdGVwIDEzICovCisrCQkJLyogc3RlcCAxMS45ICovCisgCQkJY291 bnRlcisrOworIAkJCS8qICJvZmZzZXQgPSBvZmZzZXQgKyBuICsgMSIgKi8KKyAKKy0JCQkvKiBz dGVwIDE0ICovCistCQkJaWYgKGNvdW50ZXIgPj0gNDA5NikgYnJlYWs7CisrCQkJLyogc3RlcCAx MiAqLworKwkJCWlmIChjb3VudGVyID49IDQqYml0cykgYnJlYWs7CisgCQkJfQorIAkJfQorIGVu ZDoKKyAJaWYoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDEpKQorIAkJZ290byBlcnI7CisgCistCS8q IFdlIG5vdyBuZWVkIHRvIGdlbmVyYXRlIGcgKi8KKysJb2s9MTsKKytlcnI6CisrCWlmIChvaykK KysJCXsKKysJCWlmIChjb3VudGVyX3JldCAhPSBOVUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsK KysJCX0KKysJcmV0dXJuIG9rOworKwl9CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0 aWMKKysjZW5kaWYKKytpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVN ICpwLCBCSUdOVU0gKnEsCisrCQlCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQs IEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2s9MDsKKysJQklHTlVNICpyMCwgKnRlc3QsICpn ID0gTlVMTDsKKysJQk5fTU9OVF9DVFggKm1vbnQ7CisrCXVuc2lnbmVkIGludCBoPTI7CisrCisr CWlmICgobW9udD1CTl9NT05UX0NUWF9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwor KwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJKmdfcmV0ID0gZyA9IEJOX0NUWF9nZXQoY3R4KTsK KysJdGVzdCA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKyAJLyogU2V0IHIwPShwLTEpL3EgKi8KKyAJ aWYgKCFCTl9zdWIodGVzdCxwLEJOX3ZhbHVlX29uZSgpKSkgZ290byBlcnI7CisgCWlmICghQk5f ZGl2KHIwLE5VTEwsdGVzdCxxLGN0eCkpIGdvdG8gZXJyOworQEAgLTM0NCwyNiArNDM5LDcgQEAg ZW5kOgorIGVycjoKKyAJaWYgKG9rKQorIAkJeworLQkJaWYocmV0LT5wKSBCTl9mcmVlKHJldC0+ cCk7CistCQlpZihyZXQtPnEpIEJOX2ZyZWUocmV0LT5xKTsKKy0JCWlmKHJldC0+ZykgQk5fZnJl ZShyZXQtPmcpOworLQkJcmV0LT5wPUJOX2R1cChwKTsKKy0JCXJldC0+cT1CTl9kdXAocSk7Cist CQlyZXQtPmc9Qk5fZHVwKGcpOworLQkJaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBO VUxMIHx8IHJldC0+ZyA9PSBOVUxMKQorLQkJCXsKKy0JCQlvaz0wOworLQkJCWdvdG8gZXJyOwor LQkJCX0KKy0JCWlmIChjb3VudGVyX3JldCAhPSBOVUxMKSAqY291bnRlcl9yZXQ9Y291bnRlcjsK KyAJCWlmIChoX3JldCAhPSBOVUxMKSAqaF9yZXQ9aDsKKy0JCWlmIChzZWVkX291dCkKKy0JCQlt ZW1jcHkoc2VlZF9vdXQsIHNlZWQsIHFzaXplKTsKKy0JCX0KKy0JaWYoY3R4KQorLQkJeworLQkJ Qk5fQ1RYX2VuZChjdHgpOworLQkJQk5fQ1RYX2ZyZWUoY3R4KTsKKyAJCX0KKyAJaWYgKG1vbnQg IT0gTlVMTCkgQk5fTU9OVF9DVFhfZnJlZShtb250KTsKKyAJcmV0dXJuIG9rOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9kc2EvZHNhLmgKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAx Mi0wNC0yMCAwOTowNzowNS43MTA3NzM4MjAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZHNhL2RzYS5oCTIwMTItMDQtMjAgMDk6MDc6MDYuMjM4Nzg1MTQxICswMjAwCitAQCAtODgs NiArODgsOCBAQAorICMgZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAK KyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAx MDI0CisrCisgI2RlZmluZSBEU0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQorICNkZWZpbmUgRFNB X0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAgICAgICAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhl IGJ1aWx0LWluIERTQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqIGltcGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKK0BAIC0yNjQsNiAr MjY2LDE3IEBAIGludAlEU0FfcHJpbnRfZnAoRklMRSAqYnAsIGNvbnN0IERTQSAqeCwKKyBESCAq RFNBX2R1cF9ESChjb25zdCBEU0EgKnIpOworICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKytpbnQgRklQU19kc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMs IHNpemVfdCBxYml0cywKKysJY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hh ciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAorKwlpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25l ZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEo Qk5fQ1RYICpjdHgsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisrCQljb25zdCBFVlBfTUQg KmV2cG1kLCB1bnNpZ25lZCBjaGFyICpzZWVkLCBpbnQgc2VlZF9sZW4sCisrCQlCSUdOVU0gKipw X3JldCwgQklHTlVNICoqcV9yZXQsIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpjYik7Cisr aW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpx LAorKwkJQklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2Ip OworKyNlbmRpZgorKworICNkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9kc2FfcGFyYW1nZW5fYml0 cyhjdHgsIG5iaXRzKSBcCisgCUVWUF9QS0VZX0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfRFNBLCBF VlBfUEtFWV9PUF9QQVJBTUdFTiwgXAorIAkJCQlFVlBfUEtFWV9DVFJMX0RTQV9QQVJBTUdFTl9C SVRTLCBuYml0cywgTlVMTCkKK0BAIC0yODUsMTAgKzI5OCwxMyBAQCB2b2lkIEVSUl9sb2FkX0RT QV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKKyAj ZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVAkJCQkgMTAwCisgI2RlZmluZSBEU0FfRl9EU0FQ QVJBTVNfUFJJTlRfRlAJCQkgMTAxCisrI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4J CQkgMTI0CisrI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMKKyAjZGVm aW5lIERTQV9GX0RTQV9ET19TSUdOCQkJCSAxMTIKKyAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJ RlkJCQkJIDExMworLSNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWQkJCQkgMTI0CistI2Rl ZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSU19FWAkJIDEyMworKyNkZWZpbmUgRFNB X0ZfRFNBX0dFTkVSQVRFX0tFWQkJCQkgMTI2CisrI2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVf UEFSQU1FVEVSU19FWAkJIDEyNworKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRF UlMJLyogdW51c2VkICovCSAxMjUKKyAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAx MDMKKyAjZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQorICNkZWZpbmUgRFNB X0ZfRFNBX1BSSU5UX0ZQCQkJCSAxMDUKK0BAIC0zMTQsMTEgKzMzMCwxNSBAQCB2b2lkIEVSUl9s b2FkX0RTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9S X0tFWV9TSVpFCQkgMTAwCisgI2RlZmluZSBEU0FfUl9ERUNPREVfRVJST1IJCQkJIDEwNAorICNk ZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKKysjZGVmaW5lIERTQV9SX0tF WV9TSVpFX0lOVkFMSUQJCQkJIDExMworKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxM CQkJIDExMAorICNkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMQorICNkZWZp bmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMworLSNkZWZpbmUgRFNBX1JfTkVFRF9O RVdfU0VUVVBfVkFMVUVTCQkJIDExMAorKyNkZWZpbmUgRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFM VUVTCQkJIDExMgorICNkZWZpbmUgRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRAkJCSAxMTEKKysj ZGVmaW5lIERTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTExCisgI2RlZmluZSBEU0FfUl9OT19Q QVJBTUVURVJTX1NFVAkJCQkgMTA3CisrI2RlZmluZSBEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9X RURfSU5fRklQU19NT0RFIC8qIHVudXNlZCAqLyAxMTIKKyAjZGVmaW5lIERTQV9SX1BBUkFNRVRF Ul9FTkNPRElOR19FUlJPUgkJCSAxMDUKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9kc2EvZHNhX2tleS5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2Ff a2V5LmMuZmlwcwkyMDExLTA2LTA5IDE3OjIxOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjM4Nzg1 MTQxICswMjAwCitAQCAtNjYsNiArNjYsMjQgQEAKKyAKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisg I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKwor K3N0YXRpYyBpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCisrCXsKKysJRVZQX1BLRVkgcGs7 CisrCXVuc2lnbmVkIGNoYXIgdGJzW10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOworKyAg ICAJcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysgICAgCXBrLnBrZXkuZHNhID0gZHNhOworKwor KwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdCgmcGssIHRicywgMCwgTlVMTCwgMCwgTlVM TCwgMCwgTlVMTCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBT X1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwor KwkJcmV0dXJuIDA7CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisgI2VuZGlmCisgCisgc3Rh dGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOworQEAgLTgyLDEwICsxMDAsNiBA QCBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkKKyAjZW5kaWYKKyAJaWYoZHNhLT5tZXRo LT5kc2Ffa2V5Z2VuKQorIAkJcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2tleWdlbihkc2EpOworLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJuIEZJUFNfZHNh X2dlbmVyYXRlX2tleShkc2EpOworLSNlbmRpZgorIAlyZXR1cm4gZHNhX2J1aWx0aW5fa2V5Z2Vu KGRzYSk7CisgCX0KKyAKK0BAIC05NSw2ICsxMDksMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRp bl9rZXlnZW4oRFNBICpkc2EpCisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCUJJR05VTSAqcHViX2tl eT1OVUxMLCpwcml2X2tleT1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJ UFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJ JiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJ VFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlpZiAo KGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAorIAlpZiAoZHNhLT5wcml2 X2tleSA9PSBOVUxMKQorQEAgLTEzMyw2ICsxNTYsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRp bl9rZXlnZW4oRFNBICpkc2EpCisgCisgCWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7CisgCWRzYS0+ cHViX2tleT1wdWJfa2V5OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkg JiYgIWZpcHNfY2hlY2tfZHNhKGRzYSkpCisrCQl7CisrCQlkc2EtPnB1Yl9rZXkgPSBOVUxMOwor KwkJZHNhLT5wcml2X2tleSA9IE5VTEw7CisrCSAgICAJZ290byBlcnI7CisrCQl9CisrI2VuZGlm CisgCW9rPTE7CisgCisgZXJyOgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9k c2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9saWIuYworLS0tIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZpcHMJMjAxMS0xMS0xNCAxNToxNjow OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9saWIu YwkyMDEyLTA0LTIwIDA5OjA3OjA2LjIzOTc4NTE2MiArMDIwMAorQEAgLTg3LDE0ICs4Nyw3IEBA IGNvbnN0IERTQV9NRVRIT0QgKkRTQV9nZXRfZGVmYXVsdF9tZXRob2QKKyAJeworIAlpZighZGVm YXVsdF9EU0FfbWV0aG9kKQorIAkJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlmIChGSVBT X21vZGUoKSkKKy0JCQlyZXR1cm4gRklQU19kc2Ffb3BlbnNzbCgpOworLQkJZWxzZQorLQkJCXJl dHVybiBEU0FfT3BlblNTTCgpOworLSNlbHNlCisgCQlkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0Ff T3BlblNTTCgpOworLSNlbmRpZgorIAkJfQorIAlyZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOwor IAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA1LjcxNDc3MzkwNiAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX2xvY2wuaAkyMDEyLTA0LTIw IDA5OjA3OjA2LjIzOTc4NTE2MiArMDIwMAorQEAgLTU2LDUgKzU2LDQgQEAKKyAKKyBpbnQgZHNh X2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisg CWNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIHNpemVf dCBzZWVkX2xlbiwKKy0JdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCisgCWludCAqY291bnRlcl9y ZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2RzYS9kc2Ffb3NzbC5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2RzYS9kc2Ffb3NzbC5j LmZpcHMJMjAxMS0wMi0wMSAxMzo1Mzo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yMzk3ODUxNjIg KzAyMDAKK0BAIC02NSw2ICs2NSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2lu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAor IHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBp bnQgZGxlbiwgRFNBICpkc2EpOworIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2Es IEJOX0NUWCAqY3R4X2luLCBCSUdOVU0gKipraW52cCwgQklHTlVNICoqcnApOworQEAgLTgyLDcg Kzg1LDcgQEAgTlVMTCwgLyogZHNhX21vZF9leHAsICovCisgTlVMTCwgLyogZHNhX2JuX21vZF9l eHAsICovCisgZHNhX2luaXQsCisgZHNhX2ZpbmlzaCwKKy0wLAorK0RTQV9GTEFHX0ZJUFNfTUVU SE9ELAorIE5VTEwsCisgTlVMTCwKKyBOVUxMCitAQCAtMTM4LDYgKzE0MSwyMSBAQCBzdGF0aWMg RFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduCisgCURTQV9TSUcgKnJldD1OVUxMOwor IAlpbnQgbm9yZWRvID0gMDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lH TixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIE5VTEw7CisrCSAg ICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05f RklQU19BTExPVykgCisrCQkmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJ UFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04s IERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysjZW5k aWYKKysKKyAJQk5faW5pdCgmbSk7CisgCUJOX2luaXQoJnhyKTsKKyAKK0BAIC0zMjUsNiArMzQz LDIxIEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAorIAkJcmV0dXJu IC0xOworIAkJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19zZWxmdGVzdF9m YWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysK KysJaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FM TE9XKSAKKysJCSYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0Ff Ul9LRVlfU0laRV9UT09fU01BTEwpOworKwkJcmV0dXJuIC0xOworKwkJfQorKyNlbmRpZgorKwor IAlpZiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA+IE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMp CisgCQl7CisgCQlEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSxEU0FfUl9NT0RVTFVTX1RPT19M QVJHRSk7CitAQCAtMzk5LDYgKzQzMiw5IEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25z dCB1bnNpZ25lZAorIAorIHN0YXRpYyBpbnQgZHNhX2luaXQoRFNBICpkc2EpCisgeworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlkc2Et PmZsYWdzfD1EU0FfRkxBR19DQUNIRV9NT05UX1A7CisgCXJldHVybigxKTsKKyB9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2RzYS9kc2FfcG1ldGguYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2Ev ZHNhX3BtZXRoLmMuZmlwcwkyMDExLTA2LTIwIDIyOjA1OjEzLjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMJMjAxMi0wNC0yMCAwOTowNzow Ni4yNDA3ODUxODMgKzAyMDAKK0BAIC0yNTUsNyArMjU1LDcgQEAgc3RhdGljIGludCBwa2V5X2Rz YV9wYXJhbWdlbihFVlBfUEtFWV9DVAorIAlpZiAoIWRzYSkKKyAJCXJldHVybiAwOworIAlyZXQg PSBkc2FfYnVpbHRpbl9wYXJhbWdlbihkc2EsIGRjdHgtPm5iaXRzLCBkY3R4LT5xYml0cywgZGN0 eC0+cG1kLAorLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxM LCBOVUxMLCBwY2IpOworKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxM LCBOVUxMLCBwY2IpOworIAlpZiAocmV0KQorIAkJRVZQX1BLRVlfYXNzaWduX0RTQShwa2V5LCBk c2EpOworIAllbHNlCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZHNhL2RzYXRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhdGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcwkyMDA4LTA4LTA2IDE3OjU0OjExLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9kc2EvZHNhdGVzdC5jCTIwMTIt MDQtMjAgMDk6MDc6MDYuMjQwNzg1MTgzICswMjAwCitAQCAtOTYsMzYgKzk2LDQxIEBAIHN0YXRp YyBpbnQgTVNfQ0FMTEJBQ0sgZHNhX2NiKGludCBwLCBpbnQKKyAvKiBzZWVkLCBvdXRfcCwgb3V0 X3EsIG91dF9nIGFyZSB0YWtlbiBmcm9tIHRoZSB1cGRhdGVkIEFwcGVuZGl4IDUgdG8KKyAgKiBG SVBTIFBVQiAxODYgYW5kIGFsc28gYXBwZWFyIGluIEFwcGVuZGl4IDUgdG8gRklQUyBQSUIgMTg2 LTEgKi8KKyBzdGF0aWMgdW5zaWduZWQgY2hhciBzZWVkWzIwXT17CistCTB4ZDUsMHgwMSwweDRl LDB4NGIsMHg2MCwweGVmLDB4MmIsMHhhOCwweGI2LDB4MjEsMHgxYiwweDQwLAorLQkweDYyLDB4 YmEsMHgzMiwweDI0LDB4ZTAsMHg0MiwweDdkLDB4ZDMsCisrCTB4MDIsMHg0NywweDExLDB4OTIs MHgxMSwweDg4LDB4QzgsMHhGQiwweEFGLDB4NDgsMHg0QywweDYyLAorKwkweERGLDB4QTUsMHhC RSwweEEwLDB4QTQsMHgzQywweDU2LDB4RTMsCisgCX07CisgCisgc3RhdGljIHVuc2lnbmVkIGNo YXIgb3V0X3BbXT17CistCTB4OGQsMHhmMiwweGE0LDB4OTQsMHg0OSwweDIyLDB4NzYsMHhhYSwK Ky0JMHgzZCwweDI1LDB4NzUsMHg5YiwweGIwLDB4NjgsMHg2OSwweGNiLAorLQkweGVhLDB4YzAs MHhkOCwweDNhLDB4ZmIsMHg4ZCwweDBjLDB4ZjcsCistCTB4Y2IsMHhiOCwweDMyLDB4NGYsMHgw ZCwweDc4LDB4ODIsMHhlNSwKKy0JMHhkMCwweDc2LDB4MmYsMHhjNSwweGI3LDB4MjEsMHgwZSww eGFmLAorLQkweGMyLDB4ZTksMHhhZCwweGFjLDB4MzIsMHhhYiwweDdhLDB4YWMsCistCTB4NDks MHg2OSwweDNkLDB4ZmIsMHhmOCwweDM3LDB4MjQsMHhjMiwKKy0JMHhlYywweDA3LDB4MzYsMHhl ZSwweDMxLDB4YzgsMHgwMiwweDkxLAorKwkweEFDLDB4Q0IsMHgxRSwweDYzLDB4NjAsMHg2OSww eDBDLDB4RkIsMHgwNiwweDE5LDB4NjgsMHgzRSwKKysJMHhBNSwweDAxLDB4NUEsMHhBMiwweDE1 LDB4NUMsMHhFMiwweDk5LDB4MkQsMHhENSwweDMwLDB4OTksCisrCTB4N0UsMHg1RiwweDhELDB4 RTIsMHhGNywweEM2LDB4MkUsMHg4RCwweEEzLDB4OUYsMHg1OCwweEFELAorKwkweEQ2LDB4QTks MHg3RCwweDBFLDB4MEQsMHg5NSwweDUzLDB4QTYsMHg3MSwweDNBLDB4REUsMHhBQiwKKysJMHhB QywweEU5LDB4RjQsMHgzNiwweDU1LDB4OUUsMHhCOSwweEQ2LDB4OTMsMHhCRiwweEYzLDB4MTgs CisrCTB4MUMsMHgxNCwweDdCLDB4QTUsMHg0MiwweDJFLDB4Q0QsMHgwMCwweEVCLDB4MzUsMHgz QiwweDFCLAorKwkweEE4LDB4NTEsMHhCQiwweEUxLDB4NTgsMHg0MiwweDg1LDB4ODQsMHgyMiww eEE3LDB4OTcsMHg1RSwKKysJMHg5OSwweDZGLDB4MzgsMHgyMCwweEJELDB4OUQsMHhCNiwweEQ5 LDB4MzMsMHgzNywweDJBLDB4RkQsCisrCTB4QkIsMHhENCwweEJDLDB4MEMsMHgyQSwweDY3LDB4 Q0IsMHg5RiwweEJCLDB4REYsMHhGOSwweDkzLAorKwkweEFBLDB4RDYsMHhGMCwweEQ2LDB4OTUs MHgwQiwweDVELDB4NjUsMHgxNCwweEQwLDB4MTgsMHg5RCwKKysJMHhDNiwweEFGLDB4RjAsMHhD NiwweDM3LDB4N0MsMHhGMywweDVGLAorIAl9OworIAorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91 dF9xW109eworLQkweGM3LDB4NzMsMHgyMSwweDhjLDB4NzMsMHg3ZSwweGM4LDB4ZWUsCistCTB4 OTksMHgzYiwweDRmLDB4MmQsMHhlZCwweDMwLDB4ZjQsMHg4ZSwKKy0JMHhkYSwweGNlLDB4OTEs MHg1ZiwKKysJMHhFMywweDhFLDB4NUUsMHg2RCwweEJGLDB4MkIsMHg3OSwweEY4LDB4QzUsMHg0 QiwweDg5LDB4OEIsCisrCTB4QkEsMHgyRCwweDkxLDB4QzMsMHg2QywweDgwLDB4QUMsMHg4NywK KyAJfTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfZ1tdPXsKKy0JMHg2MiwweDZkLDB4 MDIsMHg3OCwweDM5LDB4ZWEsMHgwYSwweDEzLAorLQkweDQxLDB4MzEsMHg2MywweGE1LDB4NWIs MHg0YywweGI1LDB4MDAsCistCTB4MjksMHg5ZCwweDU1LDB4MjIsMHg5NSwweDZjLDB4ZWYsMHhj YiwKKy0JMHgzYiwweGZmLDB4MTAsMHhmMywweDk5LDB4Y2UsMHgyYywweDJlLAorLQkweDcxLDB4 Y2IsMHg5ZCwweGU1LDB4ZmEsMHgyNCwweGJhLDB4YmYsCistCTB4NTgsMHhlNSwweGI3LDB4OTUs MHgyMSwweDkyLDB4NWMsMHg5YywKKy0JMHhjNCwweDJlLDB4OWYsMHg2ZiwweDQ2LDB4NGIsMHgw OCwweDhjLAorLQkweGM1LDB4NzIsMHhhZiwweDUzLDB4ZTYsMHhkNywweDg4LDB4MDIsCisrCTB4 NDIsMHg0QSwweDA0LDB4NEUsMHg3OSwweEI0LDB4OTksMHg3RiwweEZELDB4NTgsMHgzNiwweDJD LAorKwkweDFCLDB4NUYsMHgxOCwweDdFLDB4MEQsMHhDQywweEFCLDB4ODEsMHhDOSwweDVELDB4 MTAsMHhDRSwKKysJMHg0RSwweDgwLDB4N0UsMHg1OCwweEI0LDB4MzQsMHgzRiwweEE3LDB4NDUs MHhDNywweEFBLDB4MzYsCisrCTB4MjQsMHg0MiwweEE5LDB4M0IsMHhFOCwweDBFLDB4MDQsMHgw MiwweDJELDB4RkIsMHhBNiwweDEzLAorKwkweEI5LDB4QjUsMHgxNSwweEE1LDB4NTYsMHgwNyww eDM1LDB4RTQsMHgwMywweEI2LDB4NzksMHg3QywKKysJMHg2MiwweERELDB4REYsMHgzRiwweDcx LDB4M0EsMHg5RCwweDhCLDB4QzQsMHhGNiwweEU3LDB4MUQsCisrCTB4NTIsMHhBOCwweEE5LDB4 NDMsMHgxRCwweDMzLDB4NTEsMHg4OCwweDM5LDB4QkQsMHg3MywweEU5LAorKwkweDVGLDB4QkUs MHg4MiwweDQ5LDB4MjcsMHhFNiwweEI1LDB4NTMsMHhDMSwweDM4LDB4QUMsMHgyRiwKKysJMHg2 RCwweDk3LDB4NkMsMHhFQiwweDY3LDB4QzEsMHg1RiwweDY3LDB4RjgsMHgzNSwweDA1LDB4NUUs CisrCTB4RDUsMHg2OCwweDgwLDB4QUEsMHg5NiwweENBLDB4MEIsMHg4QSwweEU2LDB4RjEsMHhC MSwweDQxLAorKwkweEM2LDB4NzUsMHg5NCwweDBBLDB4MEEsMHgyQSwweEZBLDB4MjksCisgCX07 CisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2 Nzg5MCI7CitAQCAtMTU3LDcgKzE2Miw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKKyAJQklPX3ByaW50ZihiaW9fZXJyLCJ0ZXN0IGdlbmVyYXRpb24gb2YgRFNBIHBhcmFtZXRl cnNcbiIpOworIAorIAlCTl9HRU5DQl9zZXQoJmNiLCBkc2FfY2IsIGJpb19lcnIpOworLQlpZigo KGRzYSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KGRzYSwgNTEyLAorKwlpZigoKGRzYSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5l cmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCwKKyAJCQkJc2VlZCwgMjAsICZjb3VudGVyLCAm aCwgJmNiKSkKKyAJCWdvdG8gZW5kOworIAorQEAgLTE3MCw5ICsxNzUsOSBAQCBpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCUJJT19wcmludGYoYmlvX2VyciwiXG5jb3VudGVyPSVk IGg9JWxkXG4iLGNvdW50ZXIsaCk7CisgCQkKKyAJRFNBX3ByaW50KGJpb19lcnIsZHNhLDApOwor LQlpZiAoY291bnRlciAhPSAxMDUpIAorKwlpZiAoY291bnRlciAhPSAyMzkpIAorIAkJeworLQkJ QklPX3ByaW50ZihiaW9fZXJyLCJjb3VudGVyIHNob3VsZCBiZSAxMDVcbiIpOworKwkJQklPX3By aW50ZihiaW9fZXJyLCJjb3VudGVyIHNob3VsZCBiZSAyMzlcbiIpOworIAkJZ290byBlbmQ7Cisg CQl9CisgCWlmIChoICE9IDIpCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZW5naW5l L2VuZ19hbGwuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCist LS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcwkyMDExLTA4LTEw IDIwOjUzOjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9lbmdp bmUvZW5nX2FsbC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjQxNzg1MjA1ICswMjAwCitAQCAtNTgs MTEgKzU4LDI1IEBACisgCisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgImVuZ19p bnQuaCIKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNlbmRpZgorIAorIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCisgCXsK KyAJLyogU29tZSBFTkdJTkVzIG5lZWQgdGhpcyAqLworIAlPUEVOU1NMX2NwdWlkX3NldHVwKCk7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZiAo RklQU19tb2RlKCkpIHsKKysJCS8qIFdlIGFsbG93IGxvYWRpbmcgZHluYW1pYyBlbmdpbmUgYXMg YSB0aGlyZCBwYXJ0eQorKwkJICAgZW5naW5lIG1pZ2h0IGJlIEZJUFMgdmFsaWRhdGVkLgorKwkJ ICAgVXNlciBpcyBkaXNhbGxvd2VkIHRvIGxvYWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCisrCQkg ICBieSBzZWN1cml0eSBwb2xpY3kuICovCisrCQlFTkdJTkVfbG9hZF9keW5hbWljKCk7CisrCQly ZXR1cm47CisrCX0KKysjZW5kaWYKKyAjaWYgMAorIAkvKiBUaGVyZSdzIG5vIGxvbmdlciBhbnkg bmVlZCBmb3IgYW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksCisgCSAqIGl0IGlz IHRoZSAqb25seSogd2F5IGZvciBzdGFuZGFyZCBidWlsdGluIGltcGxlbWVudGF0aW9ucyB0byBi ZSBiZQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZXJyL2Vycl9hbGwuYworLS0tIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9lcnIvZXJyX2FsbC5jLmZpcHMJMjAxMS0wNi0yMSAxODo1ODoxMC4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXJyL2Vycl9hbGwuYwkyMDEyLTA0LTIwIDA5 OjA3OjA2LjI0MTc4NTIwNSArMDIwMAorQEAgLTk2LDYgKzk2LDkgQEAKKyAjaW5jbHVkZSA8b3Bl bnNzbC9vY3NwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvdHMuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKKyAjaW5jbHVkZSA8b3BlbnNzbC9j bXMuaD4KKyAjZW5kaWYKK0BAIC0xNTMsNiArMTU2LDkgQEAgdm9pZCBFUlJfbG9hZF9jcnlwdG9f c3RyaW5ncyh2b2lkKQorICNlbmRpZgorIAlFUlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKKyAJRVJS X2xvYWRfVUlfc3RyaW5ncygpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRVJSX2xvYWRfRklQ U19zdHJpbmdzKCk7CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NNUworIAlFUlJfbG9h ZF9DTVNfc3RyaW5ncygpOworICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2V2cC9jX2FsbGMuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvY19hbGxjLmMKKy0t LSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMJMjAxMS0xMS0xNCAyMjox MzozNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2NfYWxs Yy5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjQyNzg1MjI3ICswMjAwCitAQCAtNjUsNiArNjUsMTEg QEAKKyB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgCXsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrCWlmKCFGSVBTX21vZGUo KSkgCisrCQl7CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0RFUworIAlFVlBfYWRkX2Np cGhlcihFVlBfZGVzX2NmYigpKTsKKyAJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIxKCkpOwor QEAgLTIyNyw0ICsyMzIsNjAgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQor IAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCJDQU1FTExJQTI1NiIp OworIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCJjYW1lbGxpYTI1 NiIpOworICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCX0KKysJZWxzZQorKwkJewor KyNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfY2Zi KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2ZiKCkpOworKworKwlFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2VkZV9vZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl M19vZmIoKSk7CisrCisrCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2NiYygpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMo U05fZGVzX2VkZTNfY2JjLCJERVMzIik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19l ZGUzX2NiYywiZGVzMyIpOworKworKwlFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZSgpKTsKKysJ RVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkpOworKyNlbmRpZgorKworKyNpZm5kZWYgT1BF TlNTTF9OT19BRVMKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZWNiKCkpOworKwlFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X2NmYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiMSgpKTsKKysJRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiOCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xMjhfb2ZiKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7CisrCUVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xMjhfeHRzKCkpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywiQUVT MTI4Iik7CisrCUVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCJhZXMxMjgiKTsK KysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZWNiKCkpOworKwlFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9jYmMoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYigpKTsK KysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2ZiMSgpKTsKKysJRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfY2ZiOCgpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfb2ZiKCkp OworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jdHIoKSk7CisrCUVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTkyX2djbSgpKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9j YmMsIkFFUzE5MiIpOworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywiYWVz MTkyIik7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2VjYigpKTsKKysJRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9j ZmIoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjEoKSk7CisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMjU2X2NmYjgoKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2 X29mYigpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY3RyKCkpOworKwlFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7CisrCUVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2 X3h0cygpKTsKKysJRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsIkFFUzI1NiIp OworKwlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywiYWVzMjU2Iik7CisrI2Vu ZGlmCisrCQl9CisrI2VuZGlmCisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9l dnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2NfYWxsZC5jCistLS0g b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzCTIwMDktMDctMDggMTA6NTA6 NTMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9jX2FsbGQu YwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0Mjc4NTIyNyArMDIwMAorQEAgLTY0LDYgKzY0LDExIEBA CisgCisgdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorIAl7CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwlpZiAoIUZJUFNfbW9kZSgp KQorKwkJeworKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19NRDQKKyAJRVZQX2FkZF9kaWdl c3QoRVZQX21kNCgpKTsKKyAjZW5kaWYKK0BAIC0xMTEsNCArMTE2LDMyIEBAIHZvaWQgT3BlblNT TF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKKyAjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCisg CUVWUF9hZGRfZGlnZXN0KEVWUF93aGlybHBvb2woKSk7CisgI2VuZGlmCisrI2lmZGVmIE9QRU5T U0xfRklQUworKwkJfQorKwllbHNlCisrCQl7CisrI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB KSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEx KCkpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCJzc2wzLXNoYTEiKTsKKysJRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLFNOX3NoYTFXaXRoUlNB KTsKKysjaWZuZGVmIE9QRU5TU0xfTk9fRFNBCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkp OworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSxTTl9kc2FXaXRoU0hBMV8y KTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIkRTUzEiKTsKKysJRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsImRzczEiKTsKKysjZW5kaWYKKysjaWZu ZGVmIE9QRU5TU0xfTk9fRUNEU0EKKysJRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOworKyNl bmRpZgorKyNlbmRpZgorKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKysJRVZQX2FkZF9kaWdl c3QoRVZQX3NoYTIyNCgpKTsKKysJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKKysjZW5k aWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEz ODQoKSk7CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7CisrI2VuZGlmCisrCQl9Cisr I2VuZGlmCisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZGlnZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2RpZ2VzdC5jCistLS0gb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMTEtMDUtMjkgMTc6NTU6MTMuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9kaWdlc3QuYwkyMDEyLTA0LTIw IDA5OjA3OjA2LjI0Mzc4NTI0OSArMDIwMAorQEAgLTE0Miw5ICsxNDIsNTAgQEAgaW50IEVWUF9E aWdlc3RJbml0KEVWUF9NRF9DVFggKmN0eCwgY29ucworIAlyZXR1cm4gRVZQX0RpZ2VzdEluaXRf ZXgoY3R4LCB0eXBlLCBOVUxMKTsKKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysv KiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0 byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRo ZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgp CisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgaW5pdCIpOyByZXR1cm4gMDt9CisrCisr c3RhdGljIGludCBiYWRfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpkYXRhLHNp emVfdCBjb3VudCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCB1cGRhdGUiKTsgcmV0 dXJuIDA7fQorKworK3N0YXRpYyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCx1bnNpZ25l ZCBjaGFyICptZCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBGaW5hbCIpOyByZXR1 cm4gMDt9CisrCisrc3RhdGljIGNvbnN0IEVWUF9NRCBiYWRfbWQgPQorKwl7CisrCTAsCisrCTAs CisrCTAsCisrCTAsCisrCWJhZF9pbml0LAorKwliYWRfdXBkYXRlLAorKwliYWRfZmluYWwsCisr CU5VTEwsCisrCU5VTEwsCisrCU5VTEwsCisrCTAsCisrCXswLDAsMCwwfSwKKysJfTsKKysKKysj ZW5kaWYKKysKKyBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBF VlBfTUQgKnR5cGUsIEVOR0lORSAqaW1wbCkKKyAJeworIAlFVlBfTURfQ1RYX2NsZWFyX2ZsYWdz KGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRVZQX0RJ R0VTVElOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCWN0eC0+ZGlnZXN0 ID0gJmJhZF9tZDsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNT TF9OT19FTkdJTkUKKyAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBi ZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFs cmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0yMDEsNiAr MjQyLDE4IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAjZW5k aWYKKyAJaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwkJaWYgKEZJUFNfbW9kZSgpKQorKwkJCXsKKysJCQlpZiAoISh0eXBlLT5mbGFncyAmIEVW UF9NRF9GTEFHX0ZJUFMpIAorKwkJCSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKQorKwkJCQl7CisrCQkJCUVWUGVycihFVlBfRl9FVlBfRElHRVNUSU5J VF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworKwkJCQljdHgtPmRpZ2VzdCA9ICZiYWRf bWQ7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKyNlbmRpZgorIAkJaWYgKGN0eC0+ ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAJCQlPUEVOU1NMX2ZyZWUoY3R4LT5t ZF9kYXRhKTsKKyAJCWN0eC0+ZGlnZXN0PXR5cGU7CitAQCAtMjI5LDI2ICsyODIsMTUgQEAgc2tp cF90b19pbml0OgorIAkJfQorIAlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT19J TklUKQorIAkJcmV0dXJuIDE7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2Rl KCkpCistCQl7CistCQlpZiAoRklQU19kaWdlc3Rpbml0KGN0eCwgdHlwZSkpCistCQkJcmV0dXJu IDE7CistCQlPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKy0JCWN0eC0+bWRfZGF0YSA9IE5V TEw7CistCQlyZXR1cm4gMDsKKy0JCX0KKy0jZW5kaWYKKyAJcmV0dXJuIGN0eC0+ZGlnZXN0LT5p bml0KGN0eCk7CisgCX0KKyAKKyBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgs IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJ UFMKKy0JcmV0dXJuIEZJUFNfZGlnZXN0dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOworLSNlbHNl CistCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7CisrCUZJUFNfc2VsZnRlc3Rf Y2hlY2soKTsKKyAjZW5kaWYKKysJcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCxkYXRhLGNvdW50KTsK KyAJfQorIAorIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkg c2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLworQEAgLTI2MywxMCArMzA1LDExIEBAIGlu dCBFVlBfRGlnZXN0RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnMKKyAvKiBUaGUgY2FsbGVyIGNh biBhc3N1bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRl eHQgKi8KKyBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQg Y2hhciAqbWQsIHVuc2lnbmVkIGludCAqc2l6ZSkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMK Ky0JcmV0dXJuIEZJUFNfZGlnZXN0ZmluYWwoY3R4LCBtZCwgc2l6ZSk7CistI2Vsc2UKKyAJaW50 IHJldDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysj ZW5kaWYKKysKKyAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01B WF9NRF9TSVpFKTsKKyAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOworIAlpZiAoc2l6 ZSAhPSBOVUxMKQorQEAgLTI3OCw3ICszMjEsNiBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVW UF9NRF9DVFggKmN0eCwKKyAJCX0KKyAJbWVtc2V0KGN0eC0+bWRfZGF0YSwwLGN0eC0+ZGlnZXN0 LT5jdHhfc2l6ZSk7CisgCXJldHVybiByZXQ7CistI2VuZGlmCisgCX0KKyAKKyBpbnQgRVZQX01E X0NUWF9jb3B5KEVWUF9NRF9DVFggKm91dCwgY29uc3QgRVZQX01EX0NUWCAqaW4pCitAQCAtMzcy LDcgKzQxNCw2IEBAIHZvaWQgRVZQX01EX0NUWF9kZXN0cm95KEVWUF9NRF9DVFggKmN0eCkKKyAv KiBUaGlzIGNhbGwgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udGV4dCAq LworIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQorIAl7CistI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKKyAJLyogRG9uJ3QgYXNzdW1lIGN0eC0+bWRfZGF0YSB3YXMgY2xlYW5l ZCBpbiBFVlBfRGlnZXN0X0ZpbmFsLAorIAkgKiBiZWNhdXNlIHNvbWV0aW1lcyBvbmx5IGNvcGll cyBvZiB0aGUgY29udGV4dCBhcmUgZXZlciBmaW5hbGlzZWQuCisgCSAqLworQEAgLTM4NSw3ICs0 MjYsNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKKyAJCU9QRU5T U0xfY2xlYW5zZShjdHgtPm1kX2RhdGEsY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAJCU9QRU5T U0xfZnJlZShjdHgtPm1kX2RhdGEpOworIAkJfQorLSNlbmRpZgorIAlpZiAoY3R4LT5wY3R4KQor IAkJRVZQX1BLRVlfQ1RYX2ZyZWUoY3R4LT5wY3R4KTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5H SU5FCitAQCAtMzk0LDkgKzQzNCw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NU WCAqY3R4KQorIAkJICogZnVuY3Rpb25hbCByZWZlcmVuY2Ugd2UgaGVsZCBmb3IgdGhpcyByZWFz b24uICovCisgCQlFTkdJTkVfZmluaXNoKGN0eC0+ZW5naW5lKTsKKyAjZW5kaWYKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistCUZJUFNfbWRfY3R4X2NsZWFudXAoY3R4KTsKKy0jZW5kaWYKKyAJbWVt c2V0KGN0eCwnXDAnLHNpemVvZiAqY3R4KTsKKyAKKyAJcmV0dXJuIDE7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v ZXZwL2VfYWVzLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcwky MDExLTExLTE1IDEzOjE5OjU2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9ldnAvZV9hZXMuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0Mzc4NTI0OSArMDIwMAorQEAg LTU2LDcgKzU2LDYgQEAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv YWVzLmg+CisgI2luY2x1ZGUgImV2cF9sb2NsLmgiCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAj aW5jbHVkZSAibW9kZXNfbGNsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorIAorQEAg LTcxNiw3ICs3MTUsNyBAQCBzdGF0aWMgaW50IGFlc19nY21fY3RybChFVlBfQ0lQSEVSX0NUWCAq CisgCQlpZiAoYXJnIDw9IDApCisgCQkJcmV0dXJuIDA7CisgI2lmZGVmIE9QRU5TU0xfRklQUwor LQkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19O T05fRklQU19BTExPVykKKysJCWlmIChGSVBTX21vZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJ UEhfRkxBR19OT05fRklQU19BTExPVykKKyAJCQkJCQkgJiYgYXJnIDwgMTIpCisgCQkJcmV0dXJu IDA7CisgI2VuZGlmCitAQCAtMTEyOCw3ICsxMTI3LDcgQEAgc3RhdGljIGludCBhZXNfeHRzX2Np cGhlcihFVlBfQ0lQSEVSX0NUWAorIAkJcmV0dXJuIDA7CisgI2lmZGVmIE9QRU5TU0xfRklQUwor IAkvKiBSZXF1aXJlbWVudCBvZiBTUDgwMC0zOEUgKi8KKy0JaWYgKEZJUFNfbW9kdWxlX21vZGUo KSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgorKwlp ZiAoRklQU19tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19B TExPVykgJiYKKyAJCQkobGVuID4gKDFVTDw8MjApKjE2KSkKKyAJCXsKKyAJCUVWUGVycihFVlBf Rl9BRVNfWFRTX0NJUEhFUiwgRVZQX1JfVE9PX0xBUkdFKTsKK0BAIC0xMzEwLDQgKzEzMDksMyBA QCBCTE9DS19DSVBIRVJfY3VzdG9tKE5JRF9hZXMsMTkyLDEsMTIsY2NtCisgQkxPQ0tfQ0lQSEVS X2N1c3RvbShOSURfYWVzLDI1NiwxLDEyLGNjbSxDQ00sRVZQX0NJUEhfRkxBR19GSVBTfENVU1RP TV9GTEFHUykKKyAKKyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2VfZGVzMy5j CistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzCTIwMTEtMDUtMjkg MDE6MDE6MjYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9l X2RlczMuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0NDc4NTI3MCArMDIwMAorQEAgLTY1LDggKzY1 LDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+CisgCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKy0KKyBzdGF0aWMgaW50IGRlc19lZGVfaW5p dF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorIAkJ CSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKKyAKK0BAIC0yMDgsOSArMjA2 LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAorICAgICB9Cisg CisgQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4 LCAxNiwgOCwgNjQsCistCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5V TEwsIAorLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhFUl9nZXRfYXNu MV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9G TEFHX0RFRkFVTFRfQVNOMSwKKysJCQlkZXNfZWRlX2luaXRfa2V5LAorKwkJCU5VTEwsIE5VTEws IE5VTEwsCisgCQkJZGVzM19jdHJsKQorIAorICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVy IGRlc19lZGVfY2ZiNjRfY2lwaGVyCitAQCAtMjE5LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVS X2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksCisgI2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVy IGRlc19lZGVfZWNiX2NpcGhlcgorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNf RURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCistCQkJRVZQX0NJUEhfUkFORF9L RVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2 LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBf Q0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZTNf aW5pdF9rZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgQkxP Q0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgs MSwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCist CQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2Fz bjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhf RkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBO VUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2Rl Zl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsOCwKKy0JCSAgICAg RVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9D SVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlF VlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxU X0FTTjEsCisrCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBO VUxMLAorIAkJICAgICBkZXMzX2N0cmwpCisgCisgc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5 KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKK0BAIC0zMTMs NCArMzExLDMgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Rlc19lZGUzKHZvaWQpCisgCXJldHVy biAmZGVzX2VkZTNfZWNiOworIH0KKyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZw L2VfbnVsbC5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIw MTEtMDYtMjAgMjI6MDA6MTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL2V2cC9lX251bGwuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0NDc4NTI3MCArMDIwMAorQEAg LTYxLDggKzYxLDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC9vYmplY3RzLmg+CisgCistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKy0KKyBzdGF0aWMgaW50 IG51bGxfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAq a2V5LAorIAljb25zdCB1bnNpZ25lZCBjaGFyICppdixpbnQgZW5jKTsKKyBzdGF0aWMgaW50IG51 bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKK0BAIC03 MSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyPQorIAl7CisgCU5J RF91bmRlZiwKKyAJMSwwLDAsCistCTAsCisrCUVWUF9DSVBIX0ZMQUdfRklQUywKKyAJbnVsbF9p bml0X2tleSwKKyAJbnVsbF9jaXBoZXIsCisgCU5VTEwsCitAQCAtMTAxLDQgKzk5LDMgQEAgc3Rh dGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqYworIAkJbWVtY3B5KChjaGFyICop b3V0LChjb25zdCBjaGFyICopaW4saW5sKTsKKyAJcmV0dXJuIDE7CisgCX0KKy0jZW5kaWYKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2V2cC9ldnBfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZw L2V2cF9lbmMuYy5maXBzCTIwMTItMDQtMTkgMDA6NDE6NTAuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAxMi0wNC0yMCAwOTowODowMy42 OTYwMTcwNDMgKzAyMDAKK0BAIC02OSwxNyArNjksNTggQEAKKyAjZW5kaWYKKyAjaW5jbHVkZSAi ZXZwX2xvY2wuaCIKKyAKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistI2RlZmluZSBNX2RvX2NpcGhl cihjdHgsIG91dCwgaW4sIGlubCkgRklQU19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCistI2Vs c2UKKyAjZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBjdHgtPmNpcGhlci0+ ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQorLSNlbmRpZgorIAorIAorIGNvbnN0IGNoYXIg RVZQX3ZlcnNpb25bXT0iRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKworKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3Jh bXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29yaXRobXMgaW4gRklQUyBt b2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJhZF9pbml0 KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysJCSAgICBj b25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQo IkNpcGhlciBpbml0Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9kb19jaXBoZXIo RVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJCSBjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQo IkNpcGhlciB1cGRhdGUiKTsgcmV0dXJuIDA7fQorKworKy8qIE5COiBubyBjbGVhbnVwIGJlY2F1 c2UgaXQgaXMgYWxsb3dlZCBhZnRlciBmYWlsZWQgaW5pdCAqLworKworK3N0YXRpYyBpbnQgYmFk X3NldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQorKwl7IEZJUFNf RVJST1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24xIik7IHJldHVybiAwO30KKytzdGF0aWMgaW50 IGJhZF9nZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBnZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGlj IGludCBiYWRfY3RybChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9p ZCAqcHRyKQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsgcmV0dXJuIDA7 fQorKworK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPQorKwl7CisrCTAsCisr CTAsCisrCTAsCisrCTAsCisrCTAsCisrCWJhZF9pbml0LAorKwliYWRfZG9fY2lwaGVyLAorKwlO VUxMLAorKwkwLAorKwliYWRfc2V0X2FzbjEsCisrCWJhZF9nZXRfYXNuMSwKKysJYmFkX2N0cmws CisrCU5VTEwKKysJfTsKKysKKysjZW5kaWYKKysKKyB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQo RVZQX0NJUEhFUl9DVFggKmN0eCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19z ZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQoY3R4LDAsc2l6ZW9mKEVWUF9DSVBI RVJfQ1RYKSk7CisgCS8qIGN0eC0+Y2lwaGVyPU5VTEw7ICovCisgCX0KK0BAIC0xMTEsNiArMTUy LDE0IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQllbmMg PSAxOworIAkJY3R4LT5lbmNyeXB0ID0gZW5jOworIAkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VW UF9DSVBIRVJJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmNp cGhlciA9ICZiYWRfY2lwaGVyOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgI2lmbmRl ZiBPUEVOU1NMX05PX0VOR0lORQorIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0 cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCisgCSAqIHNvIHRoaXMgY29udGV4 dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZworQEAg LTE2OSwxMCArMjE4LDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpj dAorIAkJCWN0eC0+ZW5naW5lID0gTlVMTDsKKyAjZW5kaWYKKyAKKy0jaWZkZWYgT1BFTlNTTF9G SVBTCistCQlpZiAoRklQU19tb2RlKCkpCistCQkJcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgs IGNpcGhlciwga2V5LCBpdiwgZW5jKTsKKy0jZWxzZQorIAkJY3R4LT5jaXBoZXI9Y2lwaGVyOwor IAkJaWYgKGN0eC0+Y2lwaGVyLT5jdHhfc2l6ZSkKKyAJCQl7CitAQCAtMTk3LDcgKzI0Miw2IEBA IGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQkJcmV0dXJuIDA7 CisgCQkJCX0KKyAJCQl9CistI2VuZGlmCisgCQl9CisgCWVsc2UgaWYoIWN0eC0+Y2lwaGVyKQor IAkJeworQEAgLTIwNywxMCArMjUxLDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBI RVJfQ1RYICpjdAorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyBza2lwX3RvX2luaXQ6Cisg I2VuZGlmCistI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2RlKCkpCistCQlyZXR1 cm4gRklQU19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOworLSNlbHNlCisg CS8qIHdlIGFzc3VtZSBibG9jayBzaXplIGlzIGEgcG93ZXIgb2YgMiBpbiAqY3J5cHRVcGRhdGUg Ki8KKyAJT1BFTlNTTF9hc3NlcnQoY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gMQorIAkgICAg fHwgY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gOAorQEAgLTI1MCw2ICsyOTAsMjIgQEAgc2tp cF90b19pbml0OgorIAkJfQorIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkvKiBBZnRl ciAna2V5JyBpcyBzZXQgbm8gZnVydGhlciBwYXJhbWV0ZXJzIGNoYW5nZXMgYXJlIHBlcm1pc3Np YmxlLgorKwkgKiBTbyBvbmx5IGNoZWNrIGZvciBub24gRklQUyBlbmFibGluZyBhdCB0aGlzIHBv aW50LgorKwkgKi8KKysJaWYgKGtleSAmJiBGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmICghKGN0 eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykKKysJCQkmICEoY3R4LT5mbGFn cyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJCXsKKysJCQlFVlBlcnIoRVZQ X0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysJCQljdHgt PmNpcGhlciA9ICZiYWRfY2lwaGVyOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysjZW5k aWYKKysKKyAJaWYoa2V5IHx8IChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9BTFdBWVNf Q0FMTF9JTklUKSkgeworIAkJaWYoIWN0eC0+Y2lwaGVyLT5pbml0KGN0eCxrZXksaXYsZW5jKSkg cmV0dXJuIDA7CisgCX0KK0BAIC0yNTcsNyArMzEzLDYgQEAgc2tpcF90b19pbml0OgorIAljdHgt PmZpbmFsX3VzZWQ9MDsKKyAJY3R4LT5ibG9ja19tYXNrPWN0eC0+Y2lwaGVyLT5ibG9ja19zaXpl LTE7CisgCXJldHVybiAxOworLSNlbmRpZgorIAl9CisgCisgaW50IEVWUF9DaXBoZXJVcGRhdGUo RVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBpbnQgKm91dGwsCitAQCAt NTcwLDcgKzYyNSw2IEBAIHZvaWQgRVZQX0NJUEhFUl9DVFhfZnJlZShFVlBfQ0lQSEVSX0NUWAor IAorIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjKQorIAl7Cist I2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAJaWYgKGMtPmNpcGhlciAhPSBOVUxMKQorIAkJeworIAkJ aWYoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNsZWFudXAoYykpCitAQCAtNTgx LDE2ICs2MzUsMTIgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhFUl9DVAor IAkJfQorIAlpZiAoYy0+Y2lwaGVyX2RhdGEpCisgCQlPUEVOU1NMX2ZyZWUoYy0+Y2lwaGVyX2Rh dGEpOworLSNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJaWYgKGMtPmVuZ2lu ZSkKKyAJCS8qIFRoZSBFVlBfQ0lQSEVSIHdlIHVzZWQgYmVsb25ncyB0byBhbiBFTkdJTkUsIHJl bGVhc2UgdGhlCisgCQkgKiBmdW5jdGlvbmFsIHJlZmVyZW5jZSB3ZSBoZWxkIGZvciB0aGlzIHJl YXNvbi4gKi8KKyAJCUVOR0lORV9maW5pc2goYy0+ZW5naW5lKTsKKyAjZW5kaWYKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistCUZJUFNfY2lwaGVyX2N0eF9jbGVhbnVwKGMpOworLSNlbmRpZgorIAlt ZW1zZXQoYywwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOworIAlyZXR1cm4gMTsKKyAJfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9ldnAvZXZwLmgKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL2V2cC5oLmZp cHMJMjAxMi0wNC0yMCAwOTowNzowNS45OTA3Nzk4MjQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZXZwL2V2cC5oCTIwMTItMDQtMjAgMDk6MDc6MDYuMjQ2Nzg1MzEyICswMjAwCitA QCAtNzUsNiArNzUsMTAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyAjZW5kaWYKKyAK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorKworIC8qCisgI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgorICNkZWZpbmUgRVZQX1JD NF9LRVlfU0laRQkJMTYKK0BAIC0yNzIsMTAgKzI3Niw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0 CisgCQkJCQkJKiBjbGVhbmVkICovCisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4 MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0YQorIAkJCQkJCSogaW4gRVZQX01EX0NU WF9jbGVhbnVwICovCistLyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4w LjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCistICogc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJl dXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgorLSAqLworLQorICNkZWZpbmUgRVZQ X01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJ UFMgZGlnZXN0CisgCQkJCQkJICogaW4gRklQUyBtb2RlICovCisgCitAQCAtMjg3LDYgKzI4Nywx MCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAorICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9Q S0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxB R19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1vZGUgKi8KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2RlICovCisrI2RlZmluZSBNX0VWUF9NRF9DVFhfRkxB R19QU1NfU0FMVChjdHgpIFwKKysJCSgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQg bGVuZ3RoICovCisrI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOCTB4RkZGRgkvKiBz YWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19N UkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLworIAorICNkZWZpbmUg RVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0aWFsaXplIG1kX2Rh dGEgKi8KKyAKK0BAIC0zMzgsMTUgKzM0MiwxNSBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdAorIC8q IGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLworICNkZWZpbmUgCUVWUF9D SVBIX1JBTkRfS0VZCQkweDIwMAorIC8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNv cHlpbmcgbG9naWMgKi8KKy0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAKKysj ZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCisgLyogQWxsb3cgdXNlIGRlZmF1 bHQgQVNOMSBnZXQvc2V0IGl2ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FT TjEJMHgxMDAwCisgLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2Rl IG9ubHkgKi8KKyAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAorIC8q IE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KKy0jZGVmaW5lCQlFVlBf Q0lQSF9GTEFHX0ZJUFMJCTB4NDAwMAorKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJMHg0 MDAKKyAvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCistI2RlZmluZQkJ RVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMDAKKysjZGVmaW5lCQlFVlBfQ0lQSF9G TEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCisgLyogQ2lwaGVyIGhhbmRsZXMgYW55IGFuZCBhbGwg cGFkZGluZyBsb2dpYyBhcyB3ZWxsCisgICogYXMgZmluYWxpc2F0aW9uLgorICAqLworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZXZwL2V2cF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZXZw X2xpYi5jLmZpcHMJMjAxMS0wNS0yOSAwNDozMjowNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0Njc4 NTMxMiArMDIwMAorQEAgLTE5MCw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tf c2l6ZShjb25zdCBFVlBfCisgCisgaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwg dW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50 IGlubCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygp OworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlu bCk7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZXZwX2xvY2wu aC5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvZXZwX2xvY2wuaAorLS0tIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDUuOTgw Nzc5NjA5ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCTIw MTItMDQtMjAgMDk6MDc6MDYuMjQ3Nzg1MzMzICswMjAwCitAQCAtMjU4LDEwICsyNTgsOSBAQCBj b25zdCBFVlBfQ0lQSEVSICpFVlBfIyNjbmFtZSMjX2VjYih2b2lkCisgCUJMT0NLX0NJUEhFUl9m dW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkg XAorIAlCTE9DS19DSVBIRVJfZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAor IAkJCSAgICAgTklEXyMjY2lwaGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2Jp dHMsIFwKKy0JCQkgICAgIDAsIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCistCQkJICAgICBF VlBfQ0lQSEVSX3NldF9hc24xX2l2LCBcCistCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2 LCBcCistCQkJICAgICBOVUxMKQorKwkJCSAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEs IFwKKysJCQkgICAgIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQor KworIAorIHN0cnVjdCBldnBfcGtleV9jdHhfc3QKKyAJeworQEAgLTM2NywxMSArMzY2LDYgQEAg aW50IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQSEVSXworICNkZWZpbmUgTUQyX0lu aXQJcHJpdmF0ZV9NRDJfSW5pdAorICNkZWZpbmUgTURDMl9Jbml0CXByaXZhdGVfTURDMl9Jbml0 CisgI2RlZmluZSBTSEFfSW5pdAlwcml2YXRlX1NIQV9Jbml0CistI2RlZmluZSBTSEExX0luaXQJ cHJpdmF0ZV9TSEExX0luaXQKKy0jZGVmaW5lIFNIQTIyNF9Jbml0CXByaXZhdGVfU0hBMjI0X0lu aXQKKy0jZGVmaW5lIFNIQTI1Nl9Jbml0CXByaXZhdGVfU0hBMjU2X0luaXQKKy0jZGVmaW5lIFNI QTM4NF9Jbml0CXByaXZhdGVfU0hBMzg0X0luaXQKKy0jZGVmaW5lIFNIQTUxMl9Jbml0CXByaXZh dGVfU0hBNTEyX0luaXQKKyAKKyAjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5 CisgI2RlZmluZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0zNzksNyAr MzczLDYgQEAgaW50IFBLQ1M1X3YyX1BCS0RGMl9rZXlpdmdlbihFVlBfQ0lQSEVSXworICNkZWZp bmUgU0VFRF9zZXRfa2V5CXByaXZhdGVfU0VFRF9zZXRfa2V5CisgI2RlZmluZSBSQzJfc2V0X2tl eQlwcml2YXRlX1JDMl9zZXRfa2V5CisgI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9z ZXRfa2V5CistI2RlZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQJcHJpdmF0ZV9ERVNfc2V0X2tl eV91bmNoZWNrZWQKKyAjZGVmaW5lIENhbWVsbGlhX3NldF9rZXkJcHJpdmF0ZV9DYW1lbGxpYV9z ZXRfa2V5CisgCisgI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL01h a2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9NYWtlZmlsZQorLS0tIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9ldnAvTWFrZWZpbGUuZmlwcwkyMDExLTEyLTI3IDE1OjM4OjI3LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvTWFrZWZpbGUJMjAx Mi0wNC0yMCAwOTowNzowNi4yNDg3ODUzNTQgKzAyMDAKK0BAIC0yOCw3ICsyOCw3IEBAIExJQlNS Qz0gZW5jb2RlLmMgZGlnZXN0LmMgZXZwX2VuYy5jIGV2cF8KKyAJYmlvX21kLmMgYmlvX2I2NC5j IGJpb19lbmMuYyBldnBfZXJyLmMgZV9udWxsLmMgXAorIAljX2FsbC5jIGNfYWxsYy5jIGNfYWxs ZC5jIGV2cF9saWIuYyBiaW9fb2suYyBcCisgCWV2cF9wa2V5LmMgZXZwX3BiZS5jIHA1X2NycHQu YyBwNV9jcnB0Mi5jIFwKKy0JZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9mbi5jIHBtZXRoX2du LmMgbV9zaWd2ZXIuYyBldnBfZmlwcy5jCVwKKysJZV9vbGQuYyBwbWV0aF9saWIuYyBwbWV0aF9m bi5jIHBtZXRoX2duLmMgbV9zaWd2ZXIuYyBcCisgCWVfYWVzX2NiY19obWFjX3NoYTEuYyBlX3Jj NF9obWFjX21kNS5jCisgCisgTElCT0JKPQllbmNvZGUubyBkaWdlc3QubyBldnBfZW5jLm8gZXZw X2tleS5vIGV2cF9hY25mLm8gXAorQEAgLTQxLDcgKzQxLDcgQEAgTElCT0JKPQllbmNvZGUubyBk aWdlc3QubyBldnBfZW5jLm8gZXZwXworIAliaW9fbWQubyBiaW9fYjY0Lm8gYmlvX2VuYy5vIGV2 cF9lcnIubyBlX251bGwubyBcCisgCWNfYWxsLm8gY19hbGxjLm8gY19hbGxkLm8gZXZwX2xpYi5v IGJpb19vay5vIFwKKyAJZXZwX3BrZXkubyBldnBfcGJlLm8gcDVfY3JwdC5vIHA1X2NycHQyLm8g XAorLQllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24ubyBtX3NpZ3Zlci5v IGV2cF9maXBzLm8gXAorKwllX29sZC5vIHBtZXRoX2xpYi5vIHBtZXRoX2ZuLm8gcG1ldGhfZ24u byBtX3NpZ3Zlci5vIFwKKyAJZV9hZXNfY2JjX2htYWNfc2hhMS5vIGVfcmM0X2htYWNfbWQ1Lm8K KyAKKyBTUkM9ICQoTElCU1JDKQorQEAgLTEwMyw0NCArMTAzLDQ2IEBAIGJpb19iNjQubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3AKKyBiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBiaW9fYjY0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aAorIGJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAorLWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorLWJpb19iNjQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAor LWJpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmgKKy1iaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLWJpb19iNjQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBiaW9fYjY0LmMKKyti aW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKKytiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2Jpb19iNjQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK KytiaW9fYjY0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2Jpb19iNjQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytiaW9fYjY0Lm86IC4u L2NyeXB0bGliLmggYmlvX2I2NC5jCisgYmlvX2VuYy5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaAorIGJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIGJpb19lbmMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisgYmlv X2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oCistYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCistYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCistYmlvX2Vu Yy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorLWJpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistYmlvX2VuYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGJpb19lbmMuYworK2Jpb19lbmMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorK2Jpb19lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2Jpb19l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCisrYmlvX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2Jpb19lbmMubzogLi4vY3J5cHRs aWIuaCBiaW9fZW5jLmMKKyBiaW9fbWQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgYmlvX21kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK KyBiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCistYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorLWJpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1iaW9fbWQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKKy1iaW9fbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCistYmlvX21kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistYmlv X21kLm86IC4uL2NyeXB0bGliLmggYmlvX21kLmMKKytiaW9fbWQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytiaW9fbWQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAorK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrYmlvX21kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrYmlvX21kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAorK2Jpb19tZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9j cnlwdGxpYi5oIGJpb19tZC5jCisgYmlvX29rLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGJpb19vay5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0 by5oCisgYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lcnIuaAorLWJpb19vay5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKy1iaW9fb2subzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCistYmlvX29r Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCistYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKy1iaW9fb2subzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistYmlv X29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggYmlv X29rLmMKKytiaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmgKKytiaW9fb2subzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2Jpb19vay5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CisrYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrYmlvX29rLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9y YW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrYmlvX29rLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5o CisrYmlvX29rLm86IC4uL2NyeXB0bGliLmggYmlvX29rLmMKKyBjX2FsbC5vOiAuLi8uLi9lX29z LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlv LmgKKyBjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCistY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1jX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistY19hbGwubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAor LWNfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAorK2NfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAorK2NfYWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytjX2FsbC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisgY19hbGwu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCisgY19hbGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKyBjX2FsbC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcGtjczcuaAorQEAgLTE1 MCw5ICsxNTIsOCBAQCBjX2FsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uCisg Y19hbGwubzogLi4vY3J5cHRsaWIuaCBjX2FsbC5jCisgY19hbGxjLm86IC4uLy4uL2Vfb3MuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAor IGNfYWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCistY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1jX2FsbGMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2Nf YWxsYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKKytjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBjX2FsbGMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIGNfYWxsYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCisgY19hbGxjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtMTYzLDkgKzE2NCw4IEBAIGNfYWxsYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4KKyBjX2FsbGMubzogLi4vY3J5cHRsaWIuaCBj X2FsbGMuYworIGNfYWxsZC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBjX2FsbGQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorLWNfYWxs ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWMuaAorLWNfYWxsZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lY2RzYS5oCistY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytjX2FsbGQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrY19hbGxkLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisg Y19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKKyBjX2FsbGQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIGNfYWxsZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAorQEAgLTE3NiwxMCArMTc2LDkgQEAgY19hbGxkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94 NTA5LmggLgorIGNfYWxsZC5vOiAuLi9jcnlwdGxpYi5oIGNfYWxsZC5jCisgZGlnZXN0Lm86IC4u Ly4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorIGRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistZGlnZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistZGlnZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1k aWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAorLWRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VuZ2luZS5oCisrZGlnZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytkaWdl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorIGRpZ2VzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBkaWdlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKyBkaWdl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3BrY3M3LmgKK0BAIC0xOTAsMTggKzE4OSwxOSBAQCBkaWdlc3QubzogLi4vY3J5cHRsaWIu aCBkaWdlc3QuYworIGVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oCisgZV9hZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfYWVzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWVfYWVzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAorLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tb2Rlcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKy1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCistZV9hZXMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmgKKy1lX2Flcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAorLWVfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistZV9hZXMubzogLi4vbW9kZXMv bW9kZXNfbGNsLmggZV9hZXMuYyBldnBfbG9jbC5oCisrZV9hZXMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX2Flcy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbW9kZXMuaAor K2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAorK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZV9hZXMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAor K2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAorK2VfYWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIC4uL21vZGVzL21vZGVzX2xjbC5oIGVfYWVzLmMKKytlX2Flcy5vOiBldnBfbG9jbC5oCisg ZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oCisgZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKKyBlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oCistZV9hZXNfY2JjX2htYWNfc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXZwLmgKKytlX2Flc19jYmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisgZV9hZXNfY2JjX2htYWNfc2hh MS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgZV9hZXNfY2JjX2htYWNfc2hh MS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgZV9hZXNfY2JjX2htYWNfc2hh MS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorQEAgLTIxMSwyMCArMjEx LDIzIEBAIGVfYWVzX2NiY19obWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGUKKyBlX2Flc19j YmNfaG1hY19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaAorIGVfYWVzX2NiY19o bWFjX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBlX2Flc19jYmNfaG1h Y19zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGVfYWVzX2NiY19obWFj X3NoYTEuYworK2VfYWVzX2NiY19obWFjX3NoYTEubzogZXZwX2xvY2wuaAorIGVfYmYubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oCisgZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmxvd2Zpc2guaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBlX2JmLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorIGVfYmYubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLWVfYmYu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaAorLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKy1lX2JmLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAorLWVfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5 cHRsaWIuaCBlX2JmLmMgZXZwX2xvY2wuaAorK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2VfYmYubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisr ZV9iZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAorK2VfYmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZV9iZi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAor K2VfYmYubzogLi4vY3J5cHRsaWIuaCBlX2JmLmMgZXZwX2xvY2wuaAorIGVfY2FtZWxsaWEubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KyBlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jYW1lbGxpYS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZV9jYW1lbGxpYS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK Ky1lX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2VfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX2NhbWVsbGlhLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKKytlX2NhbWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBlX2Nh bWVsbGlhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgZV9jYW1lbGxp YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorIGVfY2FtZWxsaWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCitAQCAtMjMzLDc0ICsyMzYsODAg QEAgZV9jYXN0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZQorIGVfY2FzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Nhc3Qu aAorIGVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmgKKyBlX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLWVfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCistZV9jYXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKy1lX2Nhc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2Lmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKy1lX2Nhc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZV9j YXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9j YXN0LmMgZXZwX2xvY2wuaAorK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZV9jYXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2VfY2Fz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAorK2VfY2FzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytlX2Nhc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgK KytlX2Nhc3QubzogLi4vY3J5cHRsaWIuaCBlX2Nhc3QuYyBldnBfbG9jbC5oCisgZV9kZXMubzog Li4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oCisgZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9kZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oCisgZV9kZXMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCist ZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oCistZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCistZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKy1lX2Rl cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcmFuZC5oCistZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmgKKy1lX2Rlcy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvdWlfY29tcGF0LmggLi4vY3J5cHRsaWIuaCBlX2Rlcy5jIGV2cF9s b2NsLmgKKytlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2ZpcHMuaAorK2VfZGVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytlX2Rlcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisr ZV9kZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmgKKytlX2Rlcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2VfZGVzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZV9k ZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Vp X2NvbXBhdC5oCisrZV9kZXMubzogLi4vY3J5cHRsaWIuaCBlX2Rlcy5jIGV2cF9sb2NsLmgKKyBl X2RlczMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i dWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlX2RlczMubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgKKyBl X2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCistZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAorLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1lX2RlczMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKy1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorLWVfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKy1lX2RlczMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Vp LmgKKy1lX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oIC4uL2NyeXB0 bGliLmggZV9kZXMzLmMgZXZwX2xvY2wuaAorK2VfZGVzMy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2VfZGVzMy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisr ZV9kZXMzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKytlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytlX2RlczMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKKytlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytlX2RlczMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Vp LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3VpX2NvbXBhdC5oCisrZV9kZXMzLm86IC4uL2NyeXB0 bGliLmggZV9kZXMzLmMgZXZwX2xvY2wuaAorIGVfaWRlYS5vOiAuLi8uLi9lX29zLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBlX2lk ZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAorIGVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1lX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9pZGVhLmgKKy1lX2lkZWEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorLWVf aWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCistZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZV9pZGVhLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2su aAorLWVfaWRlYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxp Yi5oIGVfaWRlYS5jIGV2cF9sb2NsLmgKKytlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX2lkZWEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2lkZWEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2VfaWRl YS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKKytlX2lkZWEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytlX2lkZWEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5o CisrZV9pZGVhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oCisrZV9pZGVhLm86IC4uL2NyeXB0bGliLmggZV9pZGVhLmMgZXZw X2xvY2wuaAorIGVfbnVsbC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBlX251bGwubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIGVfbnVs bC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmgKKy1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9saGFzaC5oCistZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorLWVfbnVsbC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAorLWVfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKy1lX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKy1lX251bGwubzog Li4vY3J5cHRsaWIuaCBlX251bGwuYworK2VfbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2VfbnVsbC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZV9u dWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKKytlX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytlX251bGwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o CisrZV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGli LmggZV9udWxsLmMKKyBlX29sZC5vOiBlX29sZC5jCisgZV9yYzIubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisg ZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAorIGVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorLWVfcmMyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAor LWVfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjMi5oCistZV9yYzIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCist ZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBl X3JjMi5jIGV2cF9sb2NsLmgKKytlX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2VfcmMyLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytlX3JjMi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisrZV9yYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytlX3JjMi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvcmMyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZV9yYzIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmgKKytlX3JjMi5vOiAuLi9jcnlwdGxpYi5oIGVfcmMyLmMgZXZwX2xvY2wuaAorIGVfcmM0 Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAorIGVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlX3JjNC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1lX3JjNC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK Ky1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKKy1lX3JjNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorLWVfcmM0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYzQuaAor LWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAorLWVfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oIC4uL2NyeXB0bGliLmggZV9yYzQuYyBldnBfbG9jbC5oCisrZV9yYzQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX3JjNC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oCisrZV9yYzQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2VfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZV9yYzQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JjNC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAorK2VfcmM0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZV9yYzQubzogLi4vY3J5cHRsaWIuaCBlX3JjNC5j IGV2cF9sb2NsLmgKKyBlX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAor LWVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbWQ1LmgKKy1lX3JjNF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisrZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlX3JjNF9obWFjX21kNS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbWQ1LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAor IGVfcmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBlX3Jj NF9obWFjX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIGVfcmM0 X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCitAQCAtMzA4LDI5 ICszMTcsMjQgQEAgZV9yYzRfaG1hY19tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsLworIGVf cmM0X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorIGVfcmM0 X2htYWNfbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisgZV9yYzRfaG1hY19t ZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZV9yYzRfaG1hY19tZDUuYwor LWVfcmM1Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKy1lX3Jj NS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCistZV9yYzUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZV9yYzUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKy1lX3JjNS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorLWVfcmM1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZV9yYzUuYworK2VfcmM1Lm86IGVfcmM1LmMKKyBlX3Nl ZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKKyBlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oCisgZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKy1lX3NlZWQubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorLWVfc2Vl ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCistZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZV9zZWVkLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2VlZC5oCist ZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oCistZV9zZWVkLm86IGVfc2VlZC5jIGV2cF9sb2NsLmgKKytlX3NlZWQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorK2Vfc2VlZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytlX3NlZWQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCisrZV9zZWVkLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zZWVkLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytlX3NlZWQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggZV9zZWVkLmMgZXZwX2xvY2wuaAorIGVfeGNiY19kLm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisgZV94Y2JjX2QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorIGVfeGNi Y19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZGVzLmgKKyBlX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZGVzX29sZC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisgZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorLWVfeGNiY19kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmgKKy1lX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2VfeGNiY19kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2VfeGNiY19kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CisgZV94Y2JjX2QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKyBlX3hjYmNfZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBlX3hjYmNfZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv dWkuaAorQEAgLTMzOSwyOCArMzQzLDI3IEBAIGVfeGNiY19kLm86IGV2cF9sb2NsLmgKKyBlbmNv ZGUubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oCisgZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZm ZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBlbmNvZGUubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZW5jb2Rl Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorLWVuY29kZS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1lbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKy1lbmNvZGUu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCistZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistZW5jb2RlLm86IC4uL2NyeXB0bGliLmgg ZW5jb2RlLmMKKytlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytlbmNvZGUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2VuY29kZS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCisrZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZW5jb2RlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2VuY29kZS5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGVuY29kZS5jCisg ZXZwX2FjbmYubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBl dnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2J1ZmZlci5oCisgZXZwX2FjbmYubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NvbmYuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1ldnBfYWNuZi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKKy1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKy1ldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAorK2V2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZXZwX2FjbmYubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2V2cF9h Y25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKKyBldnBfYWNuZi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorIGV2cF9hY25mLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAorIGV2cF9hY25mLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2Ny eXB0bGliLmggZXZwX2FjbmYuYworIGV2cF9lbmMubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hc24xLmgKKyBldnBfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBldnBfZW5jLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorLWV2cF9l bmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vj ZGguaAorLWV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VuZ2luZS5oCistZXZwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZXZwX2VuYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZXZwX2Vu Yy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAorIGV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29ial9tYWMuaAorIGV2cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIGV2cF9lbmMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKK0BAIC0zNzIsMjQgKzM3NSwxNyBAQCBldnBfZW5jLm86IC4uL2NyeXB0bGli LmggZXZwX2VuYy5jIGV2cF9sCisgZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIGV2cF9lcnIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisgZXZwX2Vy ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCistZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCistZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCistZXZwX2Vyci5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAorLWV2cF9lcnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaCBldnBfZXJyLmMKKy1ldnBfZmlwcy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorLWV2cF9maXBzLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaAorLWV2cF9maXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCistZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorLWV2cF9maXBz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCistZXZwX2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistZXZwX2ZpcHMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZXZwX2ZpcHMuYworK2V2cF9lcnIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2V2cF9l cnIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2V2cF9lcnIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCisrZXZwX2Vyci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2V2cF9lcnIubzogZXZwX2Vyci5jCisgZXZwX2tleS5v OiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorIGV2cF9rZXkubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIu aAorIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oCistZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oCistZXZwX2tleS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1ldnBfa2V5Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aAorK2V2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAorK2V2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgZXZwX2tl eS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAorIGV2cF9rZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKK0BAIC00MDEsMTcgKzM5NywxNyBA QCBldnBfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wCisgZXZwX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5o CisgZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmgKKyBldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKy1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKy1ldnBfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKKy1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns di5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistZXZwX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgK Ky1ldnBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGli LmggZXZwX2xpYi5jCisrZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytldnBfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCisrZXZwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytldnBfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5o CisrZXZwX2xpYi5vOiAuLi9jcnlwdGxpYi5oIGV2cF9saWIuYworIGV2cF9wYmUubzogLi4vLi4v ZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBldnBfcGJlLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBldnBf cGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaAorLWV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLWV2cF9wYmUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistZXZwX3BiZS5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytldnBf cGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmgKKytldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKKyBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIGV2cF9wYmUubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKyBldnBfcGJlLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzMTIuaAorQEAgLTQyMiw5ICs0MTgsOCBAQCBldnBfcGJl Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmCisgZXZwX3BrZXkubzogLi4vLi4vZV9v cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBldnBfcGtleS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCisgZXZwX3Br ZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oCistZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLWV2cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLWV2cF9wa2V5Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2V2 cF9wa2V5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmgKKytldnBfcGtleS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisgZXZwX3BrZXkubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgZXZwX3BrZXku bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBldnBfcGtleS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorQEAgLTQzNiw5ICs0MzEsOCBAQCBldnBfcGtleS5vOiAuLi9hc24xL2FzbjFfbG9jbC5o IC4uL2NyeXB0CisgbV9kc3MubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgbV9kc3MubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorIG1fZHNz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaAorLW1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lY2RoLmgKKy1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1tX2Rzcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyttX2Rzcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV9kc3Mu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorIG1fZHNzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisgbV9kc3Mubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Br Y3M3LmgKK0BAIC00NDksOSArNDQzLDggQEAgbV9kc3MubzogLi4vY3J5cHRsaWIuaCBtX2Rzcy5j CisgbV9kc3MxLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisgbV9kc3MxLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAor LW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZWNkaC5oCistbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLW1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKyttX2RzczEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK21fZHNzMS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCisgbV9kc3MxLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorIG1fZHNzMS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cGtjczcuaAorQEAgLTQ1OSwzMSArNDUyLDIzIEBAIG1fZHNzMS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWMKKyBtX2RzczEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKyBtX2RzczEubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaAorIG1fZHNz MS5vOiAuLi9jcnlwdGxpYi5oIG1fZHNzMS5jCistbV9lY2RzYS5vOiAuLi8uLi9lX29zLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaAorLW1fZWNkc2EubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o CistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZWNkaC5oCistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorLW1fZWNkc2EubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorLW1fZWNkc2EubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmgKKy1tX2VjZHNh Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2hhLmgKKy1tX2VjZHNhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCistbV9lY2RzYS5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCistbV9lY2RzYS5v OiAuLi9jcnlwdGxpYi5oIG1fZWNkc2EuYworLW1fbWQyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKKyttX2VjZHNhLm86IG1fZWNkc2EuYworK21fbWQyLm86IC4u Ly4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9iaW8uaAorIG1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKyBtX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1tX21kMi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYu aAorLW1fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCistbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistbV9tZDIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggLi4vY3J5cHRsaWIuaCBtX21kMi5jCisrbV9tZDIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbWQyLmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor K21fbWQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9wa2NzNy5oCisrbV9tZDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK21fbWQyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK21fbWQyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5 LmgKKyttX21kMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxp Yi5oIGV2cF9sb2NsLmggbV9tZDIuYworIG1fbWQ0Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorIG1fbWQ0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKKy1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWMuaAorLW1fbWQ0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgKKy1tX21kNC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV9tZDQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrbV9t ZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKKyBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbWQ0LmgKKyBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBtX21kNC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aAorQEAgLTQ5NCw5ICs0NzksOCBAQCBtX21kNC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuCisgbV9tZDQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmggLi4vY3J5 cHRsaWIuaCBldnBfbG9jbC5oIG1fbWQ0LmMKKyBtX21kNS5vOiAuLi8uLi9lX29zLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBtX21k NS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2NyeXB0by5oCistbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1tX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNk aC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistbV9tZDUubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK21fbWQ1Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAor K21fbWQ1Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oCisgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL21kNS5oCisgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i al9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisgbV9tZDUubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmgKK0BAIC01MDUsMjYgKzQ4OSwxNyBAQCBtX21kNS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcnNhLmggLi4vCisgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisgbV9tZDUubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaAorIG1fbWQ1Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggZXZwX2xvY2wuaCBtX21k NS5jCistbV9tZGMyLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK21fbWRjMi5vOiAuLi8uLi9lX29zLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1tX21kYzIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Rlcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kZXNfb2xkLmgK Ky1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2VjLmgKKy1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLW1fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCistbV9tZGMyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9tZGMyLmgKKy1tX21k YzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCistbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCistbV9tZGMyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9wa2NzNy5oCist bV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKKy1tX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCistbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC91aS5oCistbV9tZGMyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC91aV9jb21wYXQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUw OS5oCistbV9tZGMyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0 bGliLmggZXZwX2xvY2wuaCBtX21kYzIuYworK21fbWRjMi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKyttX21kYzIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKKyttX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKyttX21kYzIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrbV9tZGMyLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggbV9tZGMyLmMKKyBt X251bGwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i dWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1tX251bGwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1tX251 bGwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkc2EuaAorLW1fbnVsbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK21fbnVsbC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIG1fbnVsbC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCisgbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBtX251bGwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC01MzUs OSArNTEwLDggQEAgbV9udWxsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeQorIG1f cmlwZW1kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisgbV9y aXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9idWZmZXIuaAorIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorLW1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKKy1tX3JpcGVtZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgK Ky1tX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKKyttX3JpcGVtZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorIG1fcmlwZW1kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorIG1fcmlwZW1kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CisgbV9yaXBlbWQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC01NDksOSArNTIzLDggQEAgbV9yaXBlbWQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdgorIG1fcmlwZW1kLm86IG1fcmlwZW1kLmMKKyBt X3NoYS5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmgKKyBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVm ZmVyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistbV9zaGEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1tX3NoYS5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2Rz YS5oCistbV9zaGEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAorK21fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK21fc2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisgbV9zaGEubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIG1f c2hhLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKKyBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorQEAgLTU2Miw5ICs1MzUsOCBA QCBtX3NoYS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oIC4uCisgbV9zaGEubzogLi4v Y3J5cHRsaWIuaCBldnBfbG9jbC5oIG1fc2hhLmMKKyBtX3NoYTEubzogLi4vLi4vZV9vcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisg bV9zaGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKKy1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1tX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLW1fc2hhMS5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV9z aGExLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAorK21fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAorIG1fc2hhMS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgbV9zaGExLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKKyBtX3NoYTEubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC01NzYsOSArNTQ4LDggQEAgbV9zaGExLm86IC4u L2NyeXB0bGliLmggbV9zaGExLmMKKyBtX3NpZ3Zlci5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaAorIG1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBtX3NpZ3Zlci5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1t X3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZWNkaC5oCistbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistbV9zaWd2ZXIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrbV9zaWd2ZXIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK21f c2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKKyBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKyBtX3NpZ3Zlci5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIG1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtNTg5 LDkgKzU2MCw4IEBAIG1fc2lndmVyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3YKKyBt X3NpZ3Zlci5vOiBtX3NpZ3Zlci5jCisgbV93cC5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBtX3dwLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKKy1tX3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lYy5oCistbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrbV93cC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKyttX3dwLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisg bV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisgbV93cC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgbV93cC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorQEAg LTYwMiw5ICs1NzIsOCBAQCBtX3dwLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5LmggLi4v CisgbV93cC5vOiAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmggbV93cC5jCisgbmFtZXMubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oCisgbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorLW5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lYy5oCistbmFtZXMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkc2EuaAorLW5hbWVz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmgKKytuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKKytuYW1lcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIG5hbWVzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBuYW1lcy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCisgbmFtZXMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC02MTUsOSArNTg0LDggQEAgbmFtZXMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LgorIHA1X2NycHQubzogLi4vLi4vZV9vcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBwNV9jcnB0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaAorLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2VjZGguaAorLXA1X2NycHQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNh LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistcDVfY3JwdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytwNV9jcnB0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgK KytwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKKyBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFj LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorIHA1X2NycHQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKKyBwNV9jcnB0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9wa2NzNy5oCitAQCAtNjI4LDkgKzU5Niw4IEBAIHA1X2NycHQubzogLi4v Y3J5cHRsaWIuaCBwNV9jcnB0LmMKKyBwNV9jcnB0Mi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaAorIHA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgKKyBwNV9jcnB0Mi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKy1w NV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZWNkaC5oCistcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCistcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytwNV9jcnB0Mi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrcDVf Y3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvaG1hYy5oCisgcDVfY3JwdDIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIHA1X2NycHQyLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBw NV9jcnB0Mi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorQEAgLTY0MSw5ICs2MDgsOCBAQCBwNV9jcnB0Mi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wveDUwOV92CisgcDVfY3JwdDIubzogcDVfY3JwdDIuYworIHBfZGVj Lm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAorIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1wX2RlYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWMuaAorLXBfZGVjLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgK Ky1wX2RlYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oCisrcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrcF9kZWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKyBwX2RlYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgcF9kZWMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAorIHBfZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtNjU0LDkgKzYyMCw4IEBAIHBf ZGVjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy4KKyBwX2RlYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wveDUwOV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfZGVjLmMKKyBwX2VuYy5v OiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKKyBwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYnVmZmVyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCistcF9lbmMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1wX2VuYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZWNkaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCist cF9lbmMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaAorK3BfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lcnIuaAorK3BfZW5jLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisgcF9lbmMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorIHBfZW5jLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKyBwX2VuYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorQEAgLTY3MCw5ICs2MzUsOCBAQCBwX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMV9tYWMuCisgcF9saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCisgcF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9k aC5oCisgcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oCistcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLXBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaAorLXBfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytwX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZW5naW5lLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oCisrcF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmgKKyBwX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2gu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisgcF9saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAor IHBfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oCitAQCAtNjgzLDkgKzY0Nyw4IEBAIHBfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC94NTA5LmggLi4KKyBwX2xpYi5vOiAuLi9hc24xL2FzbjFfbG9jbC5oIC4u L2NyeXB0bGliLmggcF9saWIuYworIHBfb3Blbi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKyBwX29wZW4ubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAorLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWMuaAorLXBfb3Blbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZWNkaC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oCistcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytwX29wZW4ubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisr cF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oCisgcF9vcGVuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKyBwX29wZW4ubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorIHBfb3Bl bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorQEAgLTY5Niw5ICs2NTksOCBAQCBwX29wZW4ubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3g1MDkuaCAuCisgcF9vcGVuLm86IC4uL2NyeXB0bGliLmggcF9vcGVuLmMKKyBw X3NlYWwubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i dWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1wX3NlYWwubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjLmgKKy1wX3Nl YWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZWNkc2EuaAorLXBfc2VhbC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oCisrcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3Bfc2VhbC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIHBfc2VhbC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCisgcF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBwX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKK0BAIC03MDks MzUgKzY3MSwzNiBAQCBwX3NlYWwubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzCisg cF9zZWFsLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmgg cF9zZWFsLmMKKyBwX3NpZ24ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisgcF9zaWduLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKy1wX3Np Z24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VjLmgKKy1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZWNkc2EuaAorLXBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJy LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrcF9zaWduLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3Bfc2lnbi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAor IHBfc2lnbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisgcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3Rz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBwX3NpZ24ubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmgKKy1wX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCistcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z aGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorLXBfc2lnbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUwOS5oCistcF9z aWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oIC4uL2NyeXB0bGliLmggcF9z aWduLmMKKytwX3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3BrY3M3LmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3JzYS5oCisrcF9zaWduLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmgKKytwX3NpZ24ubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytw X3NpZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wveDUwOV92ZnkuaAorK3Bfc2lnbi5vOiAuLi9jcnlwdGxpYi5oIHBfc2lnbi5jCisgcF92ZXJp ZnkubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBwX3Zlcmlm eS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1 ZmZlci5oCisgcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2VjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZGguaAorLXBfdmVyaWZ5Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lY2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorLXBf dmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAorK3BfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisgcF92ZXJpZnkubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCisgcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKyBw X3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorLXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9w a2NzNy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorLXBfdmVyaWZ5Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAor LXBfdmVyaWZ5Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC94NTA5LmgKKy1wX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wveDUw OV92ZnkuaCAuLi9jcnlwdGxpYi5oIHBfdmVyaWZ5LmMKKytwX3ZlcmlmeS5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcGtjczcuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytwX3Zlcmlm eS5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NoYS5oCisrcF92ZXJpZnkubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytwX3ZlcmlmeS5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wveDUwOS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC94NTA5X3ZmeS5oCisrcF92ZXJp ZnkubzogLi4vY3J5cHRsaWIuaCBwX3ZlcmlmeS5jCisgcG1ldGhfZm4ubzogLi4vLi4vZV9vcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKyBwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2J1ZmZlci5oCisgcG1ldGhfZm4u bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oCisgcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaAorLXBtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKy1wbWV0aF9mbi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCisrcG1ldGhfZm4ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAorK3BtZXRoX2ZuLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK3BtZXRoX2ZuLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisgcG1ldGhfZm4ubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmgKKyBwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKyBwbWV0aF9mbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCAuLi9jcnlwdGxpYi5oIGV2cF9sb2NsLmgKK0BAIC03NDYsOSArNzA5LDkg QEAgcG1ldGhfZ24ubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvbworIHBtZXRoX2duLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaAor IHBtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvY3J5cHRvLmgKKyBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKy1wbWV0aF9nbi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKy1wbWV0aF9n bi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKKy1wbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNv bmYuaAorK3BtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCisrcG1ldGhfZ24ubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK3BtZXRoX2duLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKyBwbWV0aF9nbi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorIHBtZXRoX2duLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorIHBtZXRo X2duLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIC4uL2NyeXB0bGliLmggZXZw X2xvY2wuaAorQEAgLTc1Niw5ICs3MTksOCBAQCBwbWV0aF9nbi5vOiBwbWV0aF9nbi5jCisgcG1l dGhfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisgcG1l dGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYnVmZmVyLmgKKyBwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCistcG1ldGhfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lY2RoLmgKKy1wbWV0aF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vu Z2luZS5oCistcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmgKKytwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2VuZ2luZS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK3BtZXRoX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorIHBt ZXRoX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisgcG1ldGhfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKKyBwbWV0aF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vZXZwL21fZHNzMS5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2 cC9tX2RzczEuYy5maXBzCTIwMTEtMDYtMDEgMTc6MTE6MDAuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9tX2RzczEuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0 OTc4NTM3NiArMDIwMAorQEAgLTY4LDggKzY4LDYgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9kc2Eu aD4KKyAjZW5kaWYKKyAKKy0jaWZuZGVmIE9QRU5TU0xfRklQUyAKKy0KKyBzdGF0aWMgaW50IGlu aXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBTSEExX0luaXQoY3R4LT5tZF9kYXRhKTsg fQorIAorQEAgLTg0LDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kPQorIAlO SURfZHNhLAorIAlOSURfZHNhV2l0aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBf TURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZM QUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK0BAIC0xMDAsNCArOTgsMyBA QCBjb25zdCBFVlBfTUQgKkVWUF9kc3MxKHZvaWQpCisgCXJldHVybigmZHNzMV9tZCk7CisgCX0K KyAjZW5kaWYKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvbV9k c3MuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvbV9kc3MuYworLS0tIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzCTIwMTEtMDYtMDEgMTc6MTE6MDAuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTItMDQt MjAgMDk6MDc6MDYuMjQ5Nzg1Mzc2ICswMjAwCitAQCAtNjYsNyArNjYsNiBAQAorICNlbmRpZgor IAorICNpZm5kZWYgT1BFTlNTTF9OT19TSEEKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworIAorIHN0 YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0dXJuIFNIQTFfSW5pdChjdHgt Pm1kX2RhdGEpOyB9CitAQCAtODIsNyArODEsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzYV9t ZD0KKyAJTklEX2RzYVdpdGhTSEEsCisgCU5JRF9kc2FXaXRoU0hBLAorIAlTSEFfRElHRVNUX0xF TkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCisrCUVWUF9NRF9GTEFHX1BLRVlfRElH RVNUfEVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQsCisgCXVwZGF0ZSwKKyAJZmluYWwsCitAQCAt OTgsNCArOTcsMyBAQCBjb25zdCBFVlBfTUQgKkVWUF9kc3Modm9pZCkKKyAJcmV0dXJuKCZkc2Ff bWQpOworIAl9CisgI2VuZGlmCistI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZXZwL21fbWQyLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL21fbWQyLmMKKy0t LSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3 OjMyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvbV9tZDIu YwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI0OTc4NTM3NiArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAK KyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2Vu ZGlmCisrI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9D VFggKmN0eCkKKyAJeyByZXR1cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9ldnAvbV9zaGExLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL21fc2hhMS5j LmZpcHMJMjAxMS0wNS0yOSAwMTowMToyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZXZwL21fc2hhMS5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUwNzg1Mzk4ICsw MjAwCitAQCAtNTksOCArNTksNiBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJj cnlwdGxpYi5oIgorIAorLSNpZm5kZWYgT1BFTlNTTF9GSVBTCistCisgI2lmbmRlZiBPUEVOU1NM X05PX1NIQQorIAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorQEAgLTg1LDcgKzgzLDggQEAg c3RhdGljIGNvbnN0IEVWUF9NRCBzaGExX21kPQorIAlOSURfc2hhMSwKKyAJTklEX3NoYTFXaXRo UlNBRW5jcnlwdGlvbiwKKyAJU0hBX0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9G TEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Cisr CQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAorQEAgLTEy Miw3ICsxMjEsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZD0KKyAJTklEX3NoYTIy NCwKKyAJTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEyMjRfRElHRVNUX0xFTkdU SCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FM R0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9G TEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQyMjQsCisg CXVwZGF0ZTI1NiwKKyAJZmluYWwyNTYsCitAQCAtMTQxLDcgKzE0MSw4IEBAIHN0YXRpYyBjb25z dCBFVlBfTUQgc2hhMjU2X21kPQorIAlOSURfc2hhMjU2LAorIAlOSURfc2hhMjU2V2l0aFJTQUVu Y3J5cHRpb24sCisgCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01F VEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxB R19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJ RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDI1NiwKKyAJdXBkYXRlMjU2LAorIAlmaW5hbDI1NiwK K0BAIC0xNzIsNyArMTczLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQ9CisgCU5J RF9zaGEzODQsCisgCU5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMzg0X0RJR0VT VF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxF VlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0 Mzg0LAorIAl1cGRhdGU1MTIsCisgCWZpbmFsNTEyLAorQEAgLTE5MSw3ICsxOTMsOCBAQCBzdGF0 aWMgY29uc3QgRVZQX01EIHNoYTUxMl9tZD0KKyAJTklEX3NoYTUxMiwKKyAJTklEX3NoYTUxMldp dGhSU0FFbmNyeXB0aW9uLAorIAlTSEE1MTJfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdf UEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQ1MTIsCisgCXVwZGF0ZTUxMiwKKyAJZmlu YWw1MTIsCitAQCAtMjA2LDQgKzIwOSwzIEBAIGNvbnN0IEVWUF9NRCAqRVZQX3NoYTUxMih2b2lk KQorIAl7IHJldHVybigmc2hhNTEyX21kKTsgfQorICNlbmRpZgkvKiBpZm5kZWYgT1BFTlNTTF9O T19TSEE1MTIgKi8KKyAKKy0jZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9l dnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZXZwL3Bfc2lnbi5jCistLS0g b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzCTIwMTEtMDYtMDkgMTg6MDI6 MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2V2cC9wX3NpZ24u YwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1MDc4NTM5OCArMDIwMAorQEAgLTYxLDYgKzYxLDcgQEAK KyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgor IAorICNpZmRlZiB1bmRlZgorIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQ X01EICp0eXBlKQorQEAgLTEwMyw2ICsxMDQsMjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01E X0NUWCAqY3R4LCB1bnNpZworIAkJCWdvdG8gZXJyOworIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRf c2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQlnb3RvIGVycjsKKysJ CWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKwkJCWlmIChFVlBf UEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQor KwkJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MpCisrCQkJeworKwkJCWludCBzYWx0bGVuOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8g ZXJyOworKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKwkJ CWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisrCQkJCXNhbHRsZW4g PSAtMTsKKysJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykK KysJCQkJc2FsdGxlbiA9IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2Fs dGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJfQorIAkJaWYg KEVWUF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKKyAJ CQlnb3RvIGVycjsKKyAJCSpzaWdsZW4gPSBzbHRtcDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvcF92 ZXJpZnkuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIw MTEtMDYtMDkgMTg6MDI6MzkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL2V2cC9wX3ZlcmlmeS5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUwNzg1Mzk4ICswMjAwCitA QCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxv cGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+CisgCisgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKKyAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVu LCBFVlBfUEtFWSAqcGtleSkKK0BAIC04OCw2ICs4OSwyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFs KEVWUF9NRF9DVFggKmN0eCwgY29uCisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RY X3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJy OworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYg KEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9 IDApCisrCQkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUykKKysJCQl7CisrCQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9z ZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJ Z290byBlcnI7CisrCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7 CisrCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2Fs dGxlbiA9IC0xOworKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19N UkVDKQorKwkJCQlzYWx0bGVuID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bz c19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9Cisg CQlpID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOwor IAkJZXJyOgorIAkJRVZQX1BLRVlfQ1RYX2ZyZWUocGtjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTE3ODU0 MjAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZz LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTE3ODU0MjAgKzAyMDAKK0BAIC0wLDAgKzEsOTM5IEBA CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIE5JU1QgQUVTIEFsZ29yaXRobSBWYWxpZGF0aW9uIFN1 aXRlCisrICBUZXN0IFByb2dyYW0KKysKKysgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKKysgIFYt T05FIENvcnBvcmF0aW9uCisrICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAorKyAgR2Vy bWFudG93biwgTUQgMjA4NzQKKysgIFUuUy5BLgorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1 ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4K KysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSAiZV9vcy5o IgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBBRVMgc3VwcG9ydFxuIik7CisrICAg IHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgor KworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraW50IEFFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0 eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAK KysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNy eXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNp Z25lZCBjaGFyICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNvbnN0IEVWUF9D SVBIRVIgKmNpcGhlciA9IE5VTEw7CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JD IikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJ Y2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgor KwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2 OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7CisrCQlicmVhazsKKysJCX0KKysKKysJ fQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJeworKwlz d2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18x MjhfZWNiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Fl c18xOTJfZWNiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQ X2Flc18yNTZfZWNiKCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlmIChzdHJj YXNlY21wKGFtb2RlLCAiQ0ZCMTI4IikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJ CXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMTI4KCk7CisrCQli cmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMTI4KCk7 CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2Zi MTI4KCk7CisrCQlicmVhazsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJuY2FzZWNt cChhbW9kZSwgIk9GQiIsIDMpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7Cisr CQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X29mYigpOworKwkJYnJlYWs7Cisr CisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX29mYigpOworKwkJYnJlYWs7 CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X29mYigpOworKwkJYnJl YWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQor Kwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBF VlBfYWVzXzEyOF9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVy ID0gRVZQX2Flc18xOTJfY2ZiMSgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNp cGhlciA9IEVWUF9hZXNfMjU2X2NmYjEoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVs c2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikK KysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiOCgpOworKwkJ YnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjgoKTsK KysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmI4 KCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtu b3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVybiAwOworKwl9CisrICAgIGlmICghY2lw aGVyKQorKwl7CisrCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7Cisr CXJldHVybiAwOyAKKysJfQorKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIs IE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKKysJcmV0dXJuIDA7CisrICAgIGlmKCFzdHJj YXNlY21wKGFtb2RlLCJDRkIxIikpCisrCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwg RVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7CisrICAgIGlmIChkaXIpCisrCQlFVlBfQ2lwaGVy KGN0eCwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOworKwllbHNlCisrCQlFVlBfQ2lwaGVy KGN0eCwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKyAgICByZXR1cm4gMTsKKysgICAg fQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIg KnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkIxMjgifTsK KytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjEyOH07CisrZW51bSBY Q3J5cHQge1hERUNSWVBULCBYRU5DUllQVH07CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSovCisrLyogIE1vbnRlIENhcmxvIFRlc3RzICAgICAgICAgICovCisrLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrLyojZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIp LzhdID4+ICgoYiklOCkpJjEpKi8KKysvKiNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgo YSlbKGIpLzhdJn4oMSA8PCAoKGIpJTgpKSl8KCEhKHYpIDw8ICgoYiklOCkpKSovCisrCisrI2Rl ZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoNy0oYiklOCkpJjEpCisrI2RlZmluZSBzYihh LGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICg3LShiKSU4KSkpfCghISh2KSA8 PCAoNy0oYiklOCkpKQorKworK2ludCBkb19tY3QoY2hhciAqYW1vZGUsIAorKwkgICBpbnQgYWtl eXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMsCisrCSAgIGludCBk aXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCisrCSAgIEZJTEUgKnJmcCkKKysgICAg eworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTAxXVszMl07Cisr ICAgIHVuc2lnbmVkIGNoYXIgaXZbMTAxXVtBRVNfQkxPQ0tfU0laRV07CisrICAgIHVuc2lnbmVk IGNoYXIgcHRleHRbMTAwMV1bMzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGN0ZXh0WzEwMDFdWzMy XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzY0KzRdOworKyAgICBpbnQgaSwgaiwg biwgbjEsIG4yOworKyAgICBpbnQgaW1vZGUgPSAwLCBua2V5c3ogPSBha2V5c3ovODsKKysgICAg RVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwor KyAgICBpZiAobGVuID4gMzIpCisrCXsKKysJcHJpbnRmKCJcbj4+Pj4gTGVuZ3RoIGV4Y2VlZHMg MzIgZm9yICVzICVkIDw8PDxcblxuIiwgCisrCSAgICAgICBhbW9kZSwgYWtleXN6KTsKKysJcmV0 dXJuIC0xOworKwl9CisrICAgIGZvciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7ICsraW1vZGUpCisr CWlmIChzdHJjbXAoYW1vZGUsIHRfbW9kZVtpbW9kZV0pID09IDApCisrCSAgICBicmVhazsKKysg ICAgaWYgKGltb2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVz XG4iLCBhbW9kZSk7CisrCXJldHVybiAtMTsKKysJfQorKworKyAgICBtZW1jcHkoa2V5WzBdLCBh S2V5LCBua2V5c3opOworKyAgICBpZiAoaVZlYykKKysJbWVtY3B5KGl2WzBdLCBpVmVjLCBBRVNf QkxPQ0tfU0laRSk7CisrICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCW1lbWNweShwdGV4dFsw XSwgdGV4dCwgbGVuKTsKKysgICAgZWxzZQorKwltZW1jcHkoY3RleHRbMF0sIHRleHQsIGxlbik7 CisrICAgIGZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkKKysJeworKwkvKiBwcmludGYoIkl0ZXJh dGlvbiAlZFxuIiwgaSk7ICovCisrCWlmIChpID4gMCkKKysJICAgIHsKKysJICAgIGZwcmludGYo cmZwLCJDT1VOVCA9ICVkXG4iLGkpOworKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsa2V5W2ldLG5r ZXlzeixyZnAsMCk7CisrCSAgICBpZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNCICovCisrCQlPdXRw dXRWYWx1ZSgiSVYiLGl2W2ldLEFFU19CTE9DS19TSVpFLHJmcCwwKTsKKysJICAgIC8qIE91dHB1 dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCisrCSAgICBPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJe MV0sZGlyID8gcHRleHRbMF0gOiBjdGV4dFswXSxsZW4scmZwLAorKwkJCWltb2RlID09IENGQjEp OworKwkgICAgfQorKwlmb3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKQorKwkgICAgeworKwkgICAg c3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJaWYgKGogPT0gMCkKKysJ CSAgICB7IC8qIHNldCB1cCBlbmNyeXB0aW9uICovCisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4 LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIE5VTEwsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNy eXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJ CSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtq XSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBs ZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5D UllQVCkKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxl bik7CisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJCSAg ICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBs ZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQl9CisrCQkg ICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOiAgCisr CSAgICBjYXNlIENGQjEyODoKKysJCWlmIChqID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9 IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGly LCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0 W2pdLCBsZW4pOworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0 W2orMV0sIGl2W2ldLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwg aXZbaV0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGly ID09IFhFTkNSWVBUKQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4 dFtqXSwgbGVuKTsKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xXSwgbGVuKTsKKysJ CQl9CisrCQkgICAgZWxzZQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBj dGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xXSwgbGVuKTsK KysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjg6CisrCQlpZiAo aiA9PSAwKQorKwkJICAgIHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5 c3osIGtleVtpXSwgaXZbaV0sIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5j cnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQll bHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQX0NpcGhl cigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCUVWUF9D aXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWlmIChk aXIgPT0gWEVOQ1JZUFQpCisrCQkgICAgeworKwkJICAgIGlmIChqIDwgMTYpCisrCQkJbWVtY3B5 KHB0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KHB0 ZXh0W2orMV0sIGN0ZXh0W2otMTZdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7 CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1jcHkoY3RleHRbaisxXSwgJml2W2ldW2pdLCBs ZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xNl0sIGxl bik7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjE6CisrCQlpZihqID09 IDApCisrCQkgICAgeworKyNpZiAwCisrCQkgICAgLyogY29tcGVuc2F0ZSBmb3Igd3JvbmcgZW5k aWFubmVzcyBvZiBpbnB1dCBmaWxlICovCisrCQkgICAgaWYoaSA9PSAwKQorKwkJCXB0ZXh0WzBd WzBdPDw9NzsKKysjZW5kaWYKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6 LGtleVtpXSxpdltpXSxkaXIsCisrCQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAg ICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJ RVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQor KwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKworKwkJICAg IH0KKysJCWlmKGRpciA9PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkK KysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVsc2UKKysJCQlzYihw dGV4dFtqKzFdLDAsZ2IoY3RleHRbai0xMjhdLDApKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkg ICAgeworKwkJICAgIGlmKGogPCAxMjgpCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKGl2W2ldLGop KTsKKysJCSAgICBlbHNlCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0W2otMTI4XSwwKSk7 CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9CisrCSAgICB9CisrCS0tajsgLyogcmVzZXQgdG8g bGFzdCBvZiByYW5nZSAqLworKwkvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwor KwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLGRpciA/IGN0ZXh0W2pdIDogcHRleHRbal0sbGVuLHJm cCwKKysJCSAgICBpbW9kZSA9PSBDRkIxKTsKKysJZnByaW50ZihyZnAsICJcbiIpOyAgLyogYWRk IHNlcGFyYXRvciAqLworKworKwkvKiBDb21wdXRlIG5leHQgS0VZICovCisrCWlmIChkaXIgPT0g WEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3Qg PSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAw LCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0 ZXh0W24xXSA9IGN0ZXh0W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBD RkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEs LS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKKysJCX0K KysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4Ogor KwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOwor KwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0rOCwgOCk7 CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVh azsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdLCAx Nik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAg YnJlYWs7CisrCQkgICAgfQorKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBpZiAoaW1v ZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwg Q1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytu MSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJfQor KwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6 LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdi KHB0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQor KwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtq XSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhl cnRleHQsIHB0ZXh0W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgcHRl eHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBwdGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYs IHB0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQorKwkvKiBD b21wdXRlIG5leHQga2V5OiBLZXlbaSsxXSA9IEtleVtpXSB4b3IgY3QgKi8KKysJZm9yIChuID0g MDsgbiA8IG5rZXlzejsgKytuKQorKwkgICAga2V5W2krMV1bbl0gPSBrZXlbaV1bbl0gXiBjaXBo ZXJ0ZXh0W25dOworKwkKKysJLyogQ29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0ICovCisrCWlmIChk aXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkg ICAgY2FzZSBFQ0I6CisrCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0la RSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBj YXNlIENGQjEyODoKKysJCW1lbWNweShpdltpKzFdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUp OworKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQli cmVhazsKKysJICAgIGNhc2UgQ0ZCODoKKysJCS8qIElWW2krMV0gPSBjdCAqLworKwkJZm9yIChu MSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCisrCQkgICAgaXZbaSsxXVtuMV0g PSBjdGV4dFtqLW4yXVswXTsKKysJCXB0ZXh0WzBdWzBdID0gY3RleHRbai0xNl1bMF07CisrCQli cmVhazsKKysJICAgIGNhc2UgQ0ZCMToKKysJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsg KytuMSwtLW4yKQorKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJ cHRleHRbMF1bMF09Y3RleHRbai0xMjhdWzBdJjB4ODA7CisrCQlicmVhazsKKysJCX0KKysJICAg IH0KKysJZWxzZQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNh c2UgRUNCOgorKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwor KwkJYnJlYWs7CisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOgorKwkgICAgY2FzZSBD RkIxMjg6CisrCQltZW1jcHkoaXZbaSsxXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKKysJ CW1lbWNweShjdGV4dFswXSwgcHRleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJYnJlYWs7 CisrCSAgICBjYXNlIENGQjg6CisrCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytu MSwgLS1uMikKKysJCSAgICBpdltpKzFdW24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJY3RleHRb MF1bMF0gPSBwdGV4dFtqLTE2XVswXTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJ Zm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsx XSxuMSxnYihwdGV4dFtqLW4yXSwwKSk7CisrCQljdGV4dFswXVswXT1wdGV4dFtqLTEyOF1bMF0m MHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIAorKyAgICByZXR1cm4g cmV0OworKyAgICB9CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0qLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgIyBDb25m aWcgaW5mbyBmb3Igdi1vbmUKKysgICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBmb3IgRUNCCisrICAj IFN0YXRlIDogRW5jcnlwdCBhbmQgRGVjcnlwdAorKyAgIyBLZXkgTGVuZ3RoIDogMjU2CisrICAj IEZyaSBBdWcgMzAgMDQ6MDc6MjIgUE0KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworKworK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7 CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAq cmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdOworKyAgICBjaGFyIHRidWZbMjA0OF07 CisrICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIgYWxnb1s4XSA9ICIiOwor KyAgICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbOF0gPSAiIjsKKysgICAg aW50IGFrZXlzeiA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOwor KyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25lZCBjaGFy IHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOwor KyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVS X0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQorKwl7 CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgc3Ry Y3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09 IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkg ICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgaWYg KCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwicmVx LyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9c3Ry c3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJwLCJy c3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwgIi5yc3Ai LCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZp bGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywg JXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2UoYWZwKTsK KysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJyICYmIChm Z2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9saW5l KHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKiAgICAgIHByaW50Zigi c3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyAqLworKwlzd2l0Y2ggKHN0ZXApCisrCSAgICB7 CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdc bicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCgqYWxnbyA9PSAnXDAnKSB8 fAorKwkJICAgICgqYW1vZGUgPT0gJ1wwJykgfHwKKysJCSAgICAoYWtleXN6ID09IDApKQorKwkJ ICAgIHsKKysJCSAgICBwcmludGYoIk1pc3NpbmcgQWxnb3JpdGhtLCBNb2RlIG9yIEtleVNpemUg KCVzLyVzLyVkKVxuIiwKKysJCQkgICBhbGdvLGFtb2RlLGFrZXlzeik7CisrCQkgICAgZXJyID0g MTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7 CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChpYnVmWzBd ICE9ICcjJykKKysJCXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwg aWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9jZXNzIHBy ZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47CisrCQlpZiAo YWtleXN6KQorKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJCSAg ICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7CisrCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3Rp bWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGli dWYsIHJmcCk7CisrCQkgICAgaWYgKHN0cm5jbXAocHAsICJBRVNWUyAiLCA2KSA9PSAwKQorKwkJ CXsKKysJCQlzdHJjcHkoYWxnbywgIkFFUyIpOworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJ CQlwcCArPSA2OworKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1wcDsKKysJ CQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJCS8qIGdl dCBtb2RlICovCisrCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJ CQluID0gc3RybGVuKHhwKzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7CisrCQkJ YW1vZGVbbl0gPSAnXDAnOworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVS Qk9TRSkKKysJCQkJcHJpbnRmKCJUZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwgYXRlc3QsIGFtb2Rl KTsKKysJCQl9CisrCQkgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAocHAsICJLZXkgTGVuZ3RoIDog IiwgMTMpID09IDApCisrCQkJeworKwkJCWFrZXlzeiA9IGF0b2kocHArMTMpOworKwkJCWlmIChW RVJCT1NFKQorKwkJCQlwcmludGYoIktleSBzaXplID0gJWRcbiIsIGFrZXlzeik7CisrCQkJfQor KwkJICAgIH0KKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDE6ICAvKiBbRU5DUllQVF0g fCBbREVDUllQVF0gKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJCWZwdXRz KGlidWYsIHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNS WVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5jYXNlY21w KGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQllbHNlCisr CQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7Cisr CQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgaWYg KGRpciA9PSAtMSkKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgRU5DUllQ VC9ERUNSWVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIAorKwkJ c3RlcCA9IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKKysJICAgIGlmKCppYnVmID09ICdcbicpCisrCQlicmVhazsKKysJICAgIGlmKCFz dHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisrCQlicmVhazsKKysKKysJICAgIGlmIChz dHJuY2FzZWNtcChpYnVmLCAiS0VZID0gIiwgNikgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlz c2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxl biA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAg ICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyID0xOworKwkJ ICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxlbik7Cisr CQlpZiAoc3RyY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJCSAgICB7CisrCQkgICAgbWVtc2V0 KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7CisrCQkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyog bm8gaXZlYyBmb3IgRUNCICovCisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgICsrc3RlcDsKKysJ CX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAh PSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7CisrCQl9 CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMp OworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxu Iik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFs dWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0KKysJICAg IGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRz KGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIs IDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7CisrCQll cnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVuKGlidWYr MTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihp YnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJpbihpYnVm KzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0xOworKwkJ ICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCisr CQkgICAgeworKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAgICB9Cisr CQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4p OworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0 ICovCisrCQkgICAgeworKwkJICAgIGlmKGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVj LCAKKysJCQkgICAgICBkaXIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbiwgCisrCQkJ ICAgICAgcmZwKSA8IDApCisrCQkJRVhJVCgxKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAg eworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywg CisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxh aW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhU IixjaXBoZXJ0ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkg ICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA1OiAvKiBD SVBIRVJURVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChz dHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQorKwkJeworKwkJcHJp bnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJ eworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVm KzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbiA9 IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsK KysJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7CisrCQkgICAgZXJyID0xOwor KwkJICAgIGJyZWFrOworKwkJICAgIH0KKysKKysJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBj aXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBN b250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSwgYWtleXN6 LCBhS2V5LCBpVmVjLCAKKysJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKKysJCSAg ICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUs IGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91 dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAs CisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9IDY7Cisr CQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA2OgorKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xu JykKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7 CisrCQl9CisrCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQorKwkJeyAv KiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLworKwkJZnB1dHMoaWJ1ZiwgcmZw KTsKKysJCX0KKysJICAgIHN0ZXAgPSAxOworKwkgICAgYnJlYWs7CisrCSAgICB9CisrCX0KKysg ICAgaWYgKHJmcCkKKysJZmNsb3NlKHJmcCk7CisrICAgIGlmIChhZnApCisrCWZjbG9zZShhZnAp OworKyAgICByZXR1cm4gZXJyOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmds ZSBmaWxlIG9yIAorKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBh IGZpbGUuCisrICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3Qg LWYgeHh4LnJlcQorKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNf dGVzdCAtZCB4eHh4eC54eHgKKysgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0CisrLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgeworKyAgICBjaGFyICpycWxpc3QgPSAicmVx LnR4dCIsICpyc3BmaWxlID0gTlVMTDsKKysgICAgRklMRSAqZnAgPSBOVUxMOworKyAgICBjaGFy IGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQg PSAxOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkp CisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCUVYSVQoMSk7CisrCX0KKysjZW5kaWYKKysg ICAgaWYgKGFyZ2MgPiAxKQorKwl7CisrCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09 IDApCisrCSAgICB7CisrCSAgICBkX29wdCA9IDE7CisrCSAgICB9CisrCWVsc2UgaWYgKHN0cmNh c2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKKysJICAgIHsKKysJICAgIGZfb3B0ID0gMTsKKysJ ICAgIGRfb3B0ID0gMDsKKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgcHJpbnRmKCJJ bnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOworKwkgICAgcmV0dXJuIDA7CisrCSAg ICB9CisrCWlmIChhcmdjIDwgMykKKysJICAgIHsKKysJICAgIHByaW50ZigiTWlzc2luZyBwYXJh bWV0ZXJcbiIpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChkX29wdCkKKysJICAg IHJxbGlzdCA9IGFyZ3ZbMl07CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN0cmNweShmbiwgYXJn dlsyXSk7CisrCSAgICByc3BmaWxlID0gYXJndlszXTsKKysJICAgIH0KKysJfQorKyAgICBpZiAo ZF9vcHQpCisrCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLworKwlpZiAoIShmcCA9 IGZvcGVuKHJxbGlzdCwgInIiKSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIkNhbm5vdCBvcGVu IHJlcSBsaXN0IGZpbGVcbiIpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKwl3aGlsZSAo ZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKKysJICAgIHsKKysJICAgIHN0cnRvayhmbiwgIlxy XG4iKTsKKysJICAgIHN0cmNweShyZm4sIGZuKTsKKysJICAgIGlmIChWRVJCT1NFKQorKwkJcHJp bnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKKysJICAgIGlmIChwcm9jX2ZpbGUocmZuLCBy c3BmaWxlKSkKKysJCXsKKysJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMg PDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsKKysJCX0KKysJICAgIH0KKysJZmNsb3NlKGZwKTsK KysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCisrCXsKKysJaWYgKFZFUkJPU0UpCisr CSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7CisrCWlmIChwcm9jX2ZpbGUoZm4s IHJzcGZpbGUpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQg Zm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAgIH0KKysJfQorKyAgICBFWElUKDApOworKyAgICBy ZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX2NtYWN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBz L2NhdnMvZmlwc19jbWFjdGVzdC5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTI3ODU0NDIg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfY21hY3Rlc3Qu YwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1Mjc4NTQ0MiArMDIwMAorQEAgLTAsMCArMSw1MTcgQEAK KysvKiBmaXBzX2NtYWN0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5z b24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUu CisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoK KysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcK KysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysg Ki8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRpby5oPgor KyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9jbWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgQ01BQyBzdXBwb3J0XG4iKTsK KysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgaW50IGNtYWNfdGVzdChj b25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwgRklMRSAqaW4sCisrCWludCBtb2Rl LCBpbnQgS2xlbl9jb3VudHNfa2V5cywgaW50IGtub3duX2tleWxlbik7Cisrc3RhdGljIGludCBw cmludF9jbWFjX2dlbihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKKysJCXVu c2lnbmVkIGNoYXIgKktleSwgaW50IEtsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBN c2dsZW4sCisrCQlpbnQgVGxlbik7Cisrc3RhdGljIGludCBwcmludF9jbWFjX3Zlcihjb25zdCBF VlBfQ0lQSEVSICpjaXBoZXIsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKktleSwgaW50 IEtsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4sCisrCQl1bnNpZ25lZCBj aGFyICpNYWMsIGludCBNYWNsZW4sCisrCQlpbnQgVGxlbik7CisrCisrI2lmZGVmIEZJUFNfQUxH VlMKKytpbnQgZmlwc19jbWFjdGVzdF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZWxz ZQorK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwlGSUxF ICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKwlpbnQgbW9kZSA9IDA7CQkvKiAwID0+IEdlbmVy YXRlLCAxID0+IFZlcmlmeSAqLworKwlpbnQgS2xlbl9jb3VudHNfa2V5cyA9IDA7IC8qIDAgPT4g S2xlbiBpcyBzaXplIG9mIG9uZSBrZXkKKysJCQkJICAgICAxID0+IEtsZW4gaXMgYW1vdW50IG9m IGtleXMKKysJCQkJICAqLworKwlpbnQga25vd25fa2V5bGVuID0gMDsJLyogT25seSBzZXQgd2hl biBLbGVuX2NvdW50c19rZXlzID0gMSAqLworKwljb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSAw OworKwlpbnQgcmV0ID0gMTsKKysJZmlwc19hbGd0ZXN0X2luaXQoKTsKKysKKysJd2hpbGUgKGFy Z2MgPiAxICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKQorKwkJeworKwkJc3dpdGNoIChhcmd2WzFdWzFd KQorKwkJCXsKKysJCWNhc2UgJ2EnOgorKwkJCXsKKysJCQljaGFyICpwID0gJmFyZ3ZbMV1bMl07 CisrCQkJaWYgKCpwID09ICdcMCcpCisrCQkJCXsKKysJCQkJaWYgKGFyZ2MgPD0gMikKKysJCQkJ CXsKKysJCQkJCWZwcmludGYoc3RkZXJyLCAiT3B0aW9uICVzIG5lZWRzIGEgdmFsdWVcbiIsIGFy Z3ZbMV0pOworKwkJCQkJZ290byBlbmQ7CisrCQkJCQl9CisrCQkJCWFyZ3YrKzsKKysJCQkJYXJn Yy0tOworKwkJCQlwID0gJmFyZ3ZbMV1bMF07CisrCQkJCX0KKysJCQlpZiAoIXN0cmNtcChwLCAi YWVzMTI4IikpCisrCQkJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOworKwkJCWVsc2UgaWYg KCFzdHJjbXAocCwgImFlczE5MiIpKQorKwkJCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsK KysJCQllbHNlIGlmICghc3RyY21wKHAsICJhZXMyNTYiKSkKKysJCQkJY2lwaGVyID0gRVZQX2Fl c18yNTZfY2JjKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcChwLCAidGRlYTMiKSB8fCAhc3RyY21w KHAsICJ0ZGVzMyIpKQorKwkJCQl7CisrCQkJCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsK KysJCQkJS2xlbl9jb3VudHNfa2V5cyA9IDE7CisrCQkJCWtub3duX2tleWxlbiA9IDg7CisrCQkJ CX0KKysJCQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGFsZ29y aXRobSAlc1xuIiwgcCk7CisrCQkJCWdvdG8gZW5kOworKwkJCQl9CisrCQkJfQorKwkJCWJyZWFr OworKwkJY2FzZSAnZyc6CisrCQkJbW9kZSA9IDA7CisrCQkJYnJlYWs7CisrCQljYXNlICd2JzoK KysJCQltb2RlID0gMTsKKysJCQlicmVhazsKKysJCWRlZmF1bHQ6CisrCQkJZnByaW50ZihzdGRl cnIsICJVbmtub3duIG9wdGlvbiAlc1xuIiwgYXJndlsxXSk7CisrCQkJZ290byBlbmQ7CisrCQkJ fQorKwkJYXJndisrOworKwkJYXJnYy0tOworKwkJfQorKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4g PSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAo YXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3Zb Ml0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwor KwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRp YWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIWNtYWNf dGVzdChjaXBoZXIsIG91dCwgaW4sIG1vZGUsCisrCQkJS2xlbl9jb3VudHNfa2V5cywga25vd25f a2V5bGVuKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgY21hYyBmaWxlIHByb2Nl c3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7 CisrCisrCWVuZDoKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4p OworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwly ZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBDTUFDX1RFU1RfTUFYTElORUxFTgkxNTAw MDAKKysKKytpbnQgY21hY190ZXN0KGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0 LCBGSUxFICppbiwKKysJaW50IG1vZGUsIGludCBLbGVuX2NvdW50c19rZXlzLCBpbnQga25vd25f a2V5bGVuKQorKwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFy ICprZXl3b3JkLCAqdmFsdWU7CisrCXVuc2lnbmVkIGNoYXIgKipLZXlzID0gTlVMTCwgKk1zZyA9 IE5VTEwsICpNYWMgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMOworKwlpbnQg Q291bnQsIEtsZW4sIE1sZW4sIFRsZW47CisrCWxvbmcgS2V5bGVuLCBNc2dsZW4sIE1hY2xlbjsK KysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NM X21hbGxvYyhDTUFDX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxv YyhDTUFDX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYp CisrCQlnb3RvIGVycm9yOworKworKwlDb3VudCA9IC0xOworKwlLbGVuID0gLTE7CisrCU1sZW4g PSAtMTsKKysJVGxlbiA9IC0xOworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIENNQUNfVEVT VF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwg b2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3Bh Y2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlr ZXl3b3JkKys7CisrCisrCQkvKiBTa2lwIGNvbW1lbnRzICovCisrCQlpZiAoa2V5d29yZFswXSA9 PSAnIycpCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdv dG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJLyogTG9vayBmb3IgPSBzaWdu ICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0 YXJ0cyB3aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisr CQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7 CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3Zl IHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkp CisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJ LyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkg LSAxOworKworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikq cCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiQ291bnQiKSkK KysJCQl7CisrCQkJaWYgKENvdW50ICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJ CUNvdW50ID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKENvdW50IDwgMCkKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJLbGVuIikpCisr CQkJeworKwkJCWlmIChLbGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUts ZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoS2xlbiA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJaWYgKEtsZW5fY291bnRzX2tleXMpCisrCQkJCXsKKysJCQkJS2V5cyA9IE9QRU5T U0xfbWFsbG9jKHNpemVvZigqS2V5cykgKiBLbGVuKTsKKysJCQkJbWVtc2V0KEtleXMsICdcMCcs IHNpemVvZigqS2V5cykgKiBLbGVuKTsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJeworKwkJCQlL ZXlzID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKCpLZXlzKSk7CisrCQkJCW1lbXNldChLZXlzLCAn XDAnLCBzaXplb2YoKktleXMpKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIk1sZW4iKSkKKysJCQl7CisrCQkJaWYgKE1sZW4gIT0gLTEpCisrCQkJCWdvdG8g cGFyc2VfZXJyb3I7CisrCQkJTWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChNbGVuIDwgMCkK KysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJUbGVuIikpCisrCQkJeworKwkJCWlmIChUbGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCVRsZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoVGxlbiA8IDApCisrCQkJ CWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi S2V5IikgJiYgIUtsZW5fY291bnRzX2tleXMpCisrCQkJeworKwkJCWlmIChLZXlzWzBdKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCUtleXNbMF0gPSBoZXgyYmluX20odmFsdWUsICZLZXls ZW4pOworKwkJCWlmICghS2V5c1swXSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RybmNtcChrZXl3b3JkLCAiS2V5IiwgMykgJiYgS2xlbl9jb3VudHNfa2V5 cykKKysJCQl7CisrCQkJaW50IGtleW51bSA9IGF0b2koa2V5d29yZCArIDMpOworKwkJCWlmICgh a2V5bnVtIHx8IGtleW51bSA+IEtsZW4gfHwgS2V5c1trZXludW0tMV0pCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJS2V5c1trZXludW0tMV0gPSBoZXgyYmluX20odmFsdWUsICZLZXlsZW4p OworKwkJCWlmICghS2V5c1trZXludW0tMV0pCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ fQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChN c2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAm TXNnbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNYWMiKSkKKysJCQl7CisrCQkJaWYgKG1vZGUg PT0gMCkKKysJCQkJY29udGludWU7CisrCQkJaWYgKE1hYykKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQlNYWMgPSBoZXgyYmluX20odmFsdWUsICZNYWNsZW4pOworKwkJCWlmICghTWFjKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlJlc3VsdCIpKQorKwkJCXsKKysJCQlpZiAobW9kZSA9PSAxKQorKwkJCQljb250aW51ZTsK KysJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vy cm9yOworKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAoS2V5cyAmJiBNc2cg JiYgKCFtb2RlIHx8IE1hYykgJiYgKFRsZW4gPiAwKSAmJiAoS2xlbiA+IDApKQorKwkJCXsKKysJ CQlpZiAoS2xlbl9jb3VudHNfa2V5cykKKysJCQkJeworKwkJCQlpbnQgeDsKKysJCQkJS2V5ID0g T1BFTlNTTF9tYWxsb2MoS2xlbiAqIGtub3duX2tleWxlbik7CisrCQkJCWZvciAoeCA9IDA7IHgg PCBLbGVuOyB4KyspCisrCQkJCQl7CisrCQkJCQltZW1jcHkoS2V5ICsgeCAqIGtub3duX2tleWxl biwKKysJCQkJCQlLZXlzW3hdLCBrbm93bl9rZXlsZW4pOworKwkJCQkJT1BFTlNTTF9mcmVlKEtl eXNbeF0pOworKwkJCQkJfQorKwkJCQlLbGVuICo9IGtub3duX2tleWxlbjsKKysJCQkJfQorKwkJ CWVsc2UKKysJCQkJeworKwkJCQlLZXkgPSBPUEVOU1NMX21hbGxvYyhLbGVuKTsKKysJCQkJbWVt Y3B5KEtleSwgS2V5c1swXSwgS2xlbik7CisrCQkJCU9QRU5TU0xfZnJlZShLZXlzWzBdKTsKKysJ CQkJfQorKwkJCU9QRU5TU0xfZnJlZShLZXlzKTsKKysKKysJCQlzd2l0Y2gobW9kZSkKKysJCQkJ eworKwkJCWNhc2UgMDoKKysJCQkJaWYgKCFwcmludF9jbWFjX2dlbihjaXBoZXIsIG91dCwKKysJ CQkJCQlLZXksIEtsZW4sCisrCQkJCQkJTXNnLCBNbGVuLAorKwkJCQkJCVRsZW4pKQorKwkJCQkJ Z290byBlcnJvcjsKKysJCQkJYnJlYWs7CisrCQkJY2FzZSAxOgorKwkJCQlpZiAoIXByaW50X2Nt YWNfdmVyKGNpcGhlciwgb3V0LAorKwkJCQkJCUtleSwgS2xlbiwKKysJCQkJCQlNc2csIE1sZW4s CisrCQkJCQkJTWFjLCBNYWNsZW4sCisrCQkJCQkJVGxlbikpCisrCQkJCQlnb3RvIGVycm9yOwor KwkJCQlicmVhazsKKysJCQkJfQorKworKwkJCU9QRU5TU0xfZnJlZShLZXkpOworKwkJCUtleSA9 IE5VTEw7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVO U1NMX2ZyZWUoTWFjKTsKKysJCQlNYWMgPSBOVUxMOworKwkJCUtsZW4gPSAtMTsKKysJCQlNbGVu ID0gLTE7CisrCQkJVGxlbiA9IC0xOworKwkJCUNvdW50ID0gLTE7CisrCQkJfQorKwkJfQorKwor KworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BF TlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGlu ZWJ1Zik7CisrCWlmIChLZXkpCisrCQlPUEVOU1NMX2ZyZWUoS2V5KTsKKysJaWYgKE1zZykKKysJ CU9QRU5TU0xfZnJlZShNc2cpOworKwlpZiAoTWFjKQorKwkJT1BFTlNTTF9mcmVlKE1hYyk7Cisr CisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdv dG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHByaW50X2NtYWNfZ2VuKGNvbnN0IEVW UF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQg S2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1sZW4sCisrCQlpbnQgVGxlbikKKysJ eworKwlpbnQgcmMsIGk7CisrCXNpemVfdCByZXNsZW47CisrCXVuc2lnbmVkIGNoYXIgcmVzWzEy OF07CisrCUNNQUNfQ1RYICpjbWFjX2N0eCA9IENNQUNfQ1RYX25ldygpOworKworKwlDTUFDX0lu aXQoY21hY19jdHgsIEtleSwgS2xlbiwgY2lwaGVyLCAwKTsKKysJQ01BQ19VcGRhdGUoY21hY19j dHgsIE1zZywgTWxlbik7CisrCWlmICghQ01BQ19GaW5hbChjbWFjX2N0eCwgcmVzLCAmcmVzbGVu KSkKKysJCXsKKysJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBDTUFDXG4iLCBzdGRlcnIpOwor KwkJcmMgPSAwOworKwkJfQorKwllbHNlIGlmIChUbGVuID4gKGludClyZXNsZW4pCisrCQl7Cisr CQlmcHV0cygiUGFyYW1ldGVyIGVycm9yLCBUbGVuID4gQ01BQyBsZW5ndGhcbiIsIHN0ZGVycik7 CisrCQlyYyA9IDA7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZwdXRzKCJNYWMgPSAiLCBvdXQp OworKwkJZm9yIChpID0gMDsgaSA8IFRsZW47IGkrKykKKysJCQlmcHJpbnRmKG91dCwgIiUwMngi LCByZXNbaV0pOworKwkJZnB1dHMoUkVTUF9FT0wsIG91dCk7CisrCQlyYyA9IDE7CisrCQl9Cisr CUNNQUNfQ1RYX2ZyZWUoY21hY19jdHgpOworKwlyZXR1cm4gcmM7CisrCX0KKysKKytzdGF0aWMg aW50IHByaW50X2NtYWNfdmVyKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwgRklMRSAqb3V0LAor KwkJdW5zaWduZWQgY2hhciAqS2V5LCBpbnQgS2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywg aW50IE1sZW4sCisrCQl1bnNpZ25lZCBjaGFyICpNYWMsIGludCBNYWNsZW4sCisrCQlpbnQgVGxl bikKKysJeworKwlpbnQgcmMgPSAxOworKwlzaXplX3QgcmVzbGVuOworKwl1bnNpZ25lZCBjaGFy IHJlc1sxMjhdOworKwlDTUFDX0NUWCAqY21hY19jdHggPSBDTUFDX0NUWF9uZXcoKTsKKysKKysJ Q01BQ19Jbml0KGNtYWNfY3R4LCBLZXksIEtsZW4sIGNpcGhlciwgMCk7CisrCUNNQUNfVXBkYXRl KGNtYWNfY3R4LCBNc2csIE1sZW4pOworKwlpZiAoIUNNQUNfRmluYWwoY21hY19jdHgsIHJlcywg JnJlc2xlbikpCisrCQl7CisrCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgQ01BQ1xuIiwgc3Rk ZXJyKTsKKysJCXJjID0gMDsKKysJCX0KKysJZWxzZSBpZiAoVGxlbiA+IChpbnQpcmVzbGVuKQor KwkJeworKwkJZnB1dHMoIlBhcmFtZXRlciBlcnJvciwgVGxlbiA+IENNQUMgbGVuZ3RoXG4iLCBz dGRlcnIpOworKwkJcmMgPSAwOworKwkJfQorKwllbHNlIGlmIChUbGVuICE9IE1hY2xlbikKKysJ CXsKKysJCWZwdXRzKCJQYXJhbWV0ZXIgZXJyb3IsIFRsZW4gIT0gcmVzdWx0aW5nIE1hYyBsZW5n dGhcbiIsIHN0ZGVycik7CisrCQlyYyA9IDA7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWlmICgh bWVtY21wKE1hYywgcmVzLCBNYWNsZW4pKQorKwkJCWZwdXRzKCJSZXN1bHQgPSBQIiBSRVNQX0VP TCwgb3V0KTsKKysJCWVsc2UKKysJCQlmcHV0cygiUmVzdWx0ID0gRiIgUkVTUF9FT0wsIG91dCk7 CisrCQl9CisrCUNNQUNfQ1RYX2ZyZWUoY21hY19jdHgpOworKwlyZXR1cm4gcmM7CisrCX0KKysK KysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19k ZXNtb3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92 cy5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5m aXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUyNzg1NDQyICswMjAwCisrKysgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1 Mjc4NTQ0MiArMDIwMAorQEAgLTAsMCArMSw3MDIgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysg Ki8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAg TklTVCBERVMgTW9kZXMgb2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCisrICBUZXN0IFBy b2dyYW0KKysKKysgIEJhc2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2Fz OgorKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgorKyAgVi1PTkUgQ29ycG9yYXRpb24KKysgIDIw MjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCisrICBHZXJtYW50b3duLCBNRCAyMDg3NAorKyAg VS5TLkEuCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4K KysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRlZiBPUEVOU1NM X0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJp bnRmKCJObyBGSVBTIERFUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysj ZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwu aCIKKysKKysjZGVmaW5lIERFU19CTE9DS19TSVpFIDgKKysKKysjZGVmaW5lIFZFUkJPU0UgMAor KworK2ludCBERVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCisrCSAgICBjaGFyICphbW9kZSwg aW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCisrCSAgICB1bnNpZ25lZCBjaGFyICpp VmVjLCAKKysJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJ ICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCisrICAg IHsKKysgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKKysKKysgICAgaWYgKGFr ZXlzeiAhPSAxOTIpCisrCXsKKysJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtl eXN6KTsKKysJRVhJVCgxKTsKKysJfQorKworKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNC QyIpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKKysgICAgZWxzZSBpZiAo c3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19l Y2IoKTsKKysgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKKysJ Y2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjY0KCk7CisrICAgIGVsc2UgaWYgKHN0cm5jYXNlY21w KGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOwor KyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCisrCWNpcGhlciA9IEVWUF9k ZXNfZWRlM19jZmI4KCk7CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkK KysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjEoKTsKKysgICAgZWxzZQorKwl7CisrCXByaW50 ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOworKwlFWElUKDEpOworKwl9CisrCisrICAg IGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGly KSA8PSAwKQorKwlyZXR1cm4gMDsKKysgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkK KysJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9C SVRTKTsKKysgICAgRVZQX0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7CisrCisrICAgIHJldHVy biAxOworKyAgICB9CisrCisrdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hh ciAqdmFsLCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgICAgaW50 IG9sZW47CisrICAgIG9sZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKKysgICAgcHJpbnRm KCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7CisrICAgIH0KKysKKyt2b2lkIHNoaWZ0 aW4odW5zaWduZWQgY2hhciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCisrICAg IHsKKysgICAgaW50IG47CisrCisrICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCisrICAgIG1l bW1vdmUoZHN0LGRzdCtuYml0cy84LDMqOC1uYml0cy84KTsKKysgICAgLyogYXBwZW5kIG5ldyBk YXRhICovCisrICAgIG1lbWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKKysg ICAgLyogbGVmdCBzaGlmdCB0aGUgYml0cyAqLworKyAgICBpZihuYml0cyU4KQorKwlmb3Iobj0w IDsgbiA8IDMqOCA7ICsrbikKKysJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRz dFtuKzFdID4+ICg4LW5iaXRzJTgpKTsKKysgICAgfQkKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytjaGFyICp0X3RhZ1syXSA9IHsiUExB SU5URVhUIiwgIkNJUEhFUlRFWFQifTsKKytjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIs Ik9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCNjQifTsKKytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIs IENGQjEsIENGQjgsIENGQjY0fTsKKytpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07Cisr Cisrdm9pZCBkb19tY3QoY2hhciAqYW1vZGUsIAorKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtl eXMsIHVuc2lnbmVkIGNoYXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKKysJICAgIGludCBk aXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCisrCSAgICBGSUxFICpyZnApCisrICAg IHsKKysgICAgaW50IGksaW1vZGU7CisrICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9u Z2VzdCBrZXkrOCAqLworKyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOworKworKyAgICBmb3Ig KGltb2RlPTAgOyBpbW9kZSA8IDYgOyArK2ltb2RlKQorKwlpZighc3RyY21wKGFtb2RlLHRfbW9k ZVtpbW9kZV0pKQorKwkgICAgYnJlYWs7CisrICAgIGlmIChpbW9kZSA9PSA2KQorKwl7IAorKwlw cmludGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOworKwlFWElUKDEpOworKwl9 CisrCisrICAgIGZvcihpPTAgOyBpIDwgNDAwIDsgKytpKQorKwl7CisrCWludCBqOworKwlpbnQg bjsKKysJaW50IGtwPWFrZXlzei82NDsKKysJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07CisrCUVW UF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysJZnBy aW50ZihyZnAsIlxuQ09VTlQgPSAlZFxuIixpKTsKKysJaWYoa3AgPT0gMSkKKysJICAgIE91dHB1 dFZhbHVlKCJLRVkiLGFrZXksOCxyZnAsMCk7CisrCWVsc2UKKysJICAgIGZvcihuPTAgOyBuIDwg a3AgOyArK24pCisrCQl7CisrCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7CisrCQlPdXRwdXRW YWx1ZSgiIixha2V5K24qOCw4LHJmcCwwKTsKKysJCX0KKysKKysJaWYoaW1vZGUgIT0gRUNCKQor KwkgICAgT3V0cHV0VmFsdWUoIklWIixpdmVjLDgscmZwLDApOworKwlPdXRwdXRWYWx1ZSh0X3Rh Z1tkaXJeMV0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOworKyNpZiAwCisrCS8qIGNvbXBl bnNhdGUgZm9yIGVuZGlhbm5lc3MgKi8KKysJaWYoaW1vZGUgPT0gQ0ZCMSkKKysJICAgIHRleHRb MF08PD03OworKyNlbmRpZgorKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKKysKKysJZm9yKGo9MCA7 IGogPCAxMDAwMCA7ICsraikKKysJICAgIHsKKysJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRb OF07CisrCisrCSAgICBtZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKKysJICAgIGlmKGogPT0gMCkK KysJCXsKKysJCW1lbWNweShvbGRfaXYsaXZlYyw4KTsKKysJCURFU1Rlc3QoJmN0eCxhbW9kZSxh a2V5c3osYWtleSxpdmVjLGRpcix0ZXh0LHRleHQsbGVuKTsKKysJCX0KKysJICAgIGVsc2UKKysJ CXsKKysJCW1lbWNweShvbGRfaXYsY3R4Lml2LDgpOworKwkJRVZQX0NpcGhlcigmY3R4LHRleHQs dGV4dCxsZW4pOworKwkJfQorKwkgICAgaWYoaiA9PSA5OTk5KQorKwkJeworKwkJT3V0cHV0VmFs dWUodF90YWdbZGlyXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrCQkvKgkJbWVtY3B5 KGl2ZWMsdGV4dCw4KTsgKi8KKysJCX0KKysJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4 Lml2LDgpOyAqLworKwkgICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5 ICovCisrCSAgICBzaGlmdGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKKysJICAgIC8qCSAgICBE ZWJ1Z1ZhbHVlKCJuayIsbmssMjQpOyovCisrCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIx IHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQKKysJCQl8fCBpbW9kZSA9PSBDQkMp KSB8fCBpbW9kZSA9PSBPRkIpCisrCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7CisrCisrCSAgICBp ZighZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZC NjQpKQorKwkJeworKwkJLyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2Yg dGhlIHJhdyBERVMgb3BlcmF0aW9uCisrCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNv bnN0cnVjdCBpdC4uLiAqLworKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkJICAgIHRleHRb bl1ePW9sZF90ZXh0W25dOworKwkJfQorKwkgICAgfQorKwlmb3Iobj0wIDsgbiA8IDggOyArK24p CisrCSAgICBha2V5W25dXj1ua1sxNituXTsKKysJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkg ICAgYWtleVs4K25dXj1ua1s4K25dOworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBh a2V5WzE2K25dXj1ua1tuXTsKKysJaWYobnVta2V5cyA8IDMpCisrCSAgICBtZW1jcHkoJmFrZXlb Mio4XSxha2V5LDgpOworKwlpZihudW1rZXlzIDwgMikKKysJICAgIG1lbWNweSgmYWtleVs4XSxh a2V5LDgpOworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKKysJREVT X3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOworKwlERVNfc2V0X29kZF9w YXJpdHkoKERFU19jYmxvY2sgKikoYWtleSsxNikpOworKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7 CisrCisrCS8qIHBvaW50bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVw ZW5kIG9uIHRoZQorKwkgICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3 aGF0IGl0IGlzPyAoV2hvCisrCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KKysJaWYoaW1v ZGUgPT0gT0ZCKQorKwkgICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkJdGV4dFtuXT10ZXh0 MFtuXV5vbGRfaXZbbl07CisrCX0KKysgICAgfQorKyAgICAKKytpbnQgcHJvY19maWxlKGNoYXIg KnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKKysgICAgeworKyAgICBjaGFyIGFmblsyNTZdLCByZm5b MjU2XTsKKysgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7CisrICAgIGNoYXIgaWJ1 ZlsyMDQ4XSwgdGJ1ZlsyMDQ4XTsKKysgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAg Y2hhciBhbW9kZVs4XSA9ICIiOworKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKKysgICAgaW50 IGFrZXlzej0wOworKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKKysgICAg aW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBwbGFp bnRleHRbMjA0OF07CisrICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKKysgICAg Y2hhciAqcnA7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgaW50IG51bWtleXM9MTsK KysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysgICAgaWYgKCFycWZpbGUgfHwg ISgqcnFmaWxlKSkKKysJeworKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKKysJcmV0dXJuIC0x OworKwl9CisrICAgIHN0cmNweShhZm4sIHJxZmlsZSk7CisrCisrICAgIGlmICgoYWZwID0gZm9w ZW4oYWZuLCAiciIpKSA9PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTog JXMsICVzXG4iLCAKKysJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJcmV0dXJuIC0x OworKwl9CisrICAgIGlmICghcnNwZmlsZSkKKysJeworKwlzdHJjcHkocmZuLGFmbik7CisrCXJw PXN0cnN0cihyZm4sInJlcS8iKTsKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJaWYgKCFy cCkKKysJICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7CisrI2VuZGlmCisrCWFzc2VydChycCk7 CisrCW1lbWNweShycCwicnNwIiwzKTsKKysJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOworKwlt ZW1jcHkocnAsICIucnNwIiwgNCk7CisrCXJzcGZpbGUgPSByZm47CisrCX0KKysgICAgaWYgKChy ZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90 IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKKysJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsK KysJZmNsb3NlKGFmcCk7CisrCWFmcCA9IE5VTEw7CisrCXJldHVybiAtMTsKKysJfQorKyAgICB3 aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQor Kwl7CisrCXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKKysJaWxlbiA9IHN0cmxlbihpYnVmKTsKKysJ LyoJcHJpbnRmKCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KKysJaWYoc3RlcCA9PSAz ICYmICFzdHJjbXAoYW1vZGUsIkVDQiIpKQorKwkgICAgeworKwkgICAgbWVtc2V0KGlWZWMsIDAs IHNpemVvZihpVmVjKSk7CisrCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZv ciBFQ0IgKi8KKysJICAgIH0KKysJc3dpdGNoIChzdGVwKQorKwkgICAgeworKwljYXNlIDA6ICAv KiByZWFkIHByZWFtYmxlICovCisrCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQorKwkJeyAvKiBl bmQgb2YgcHJlYW1ibGUgKi8KKysJCWlmICgqYW1vZGUgPT0gJ1wwJykKKysJCSAgICB7CisrCQkg ICAgcHJpbnRmKCJNaXNzaW5nIE1vZGVcbiIpOworKwkJICAgIGVyciA9IDE7CisrCQkgICAgfQor KwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkJICAgICsrIHN0 ZXA7CisrCQkgICAgfQorKwkJfQorKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCisrCQl7 CisrCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOworKwkJZXJy ID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLworKwkJ Y2hhciAqeHAsICpwcCA9IGlidWYrMjsKKysJCWludCBuOworKwkJaWYoKmFtb2RlKQorKwkJICAg IHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9 IHRpbWUoMCk7CisrCQkgICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJ CSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkg ICAgaWYoIXN0cm5jbXAocHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkK KysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiVERFUyAiLDUpCisrCQkgICAgICAgfHwgIXN0cm5j bXAocHAsIlBFUk1VVEFUSU9OICIsMTIpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNU SVRVVElPTiAiLDEzKQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQor KwkJCXsKKysJCQkvKiBnZXQgdGVzdCB0eXBlICovCisrCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAi LDQpKQorKwkJCSAgICBwcCs9NDsKKysJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkp CisrCQkJICAgIHBwKz01OworKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1w cDsKKysJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJ CS8qIGdldCBtb2RlICovCisrCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIg Ki8KKysJCQluID0gc3RybGVuKHhwKzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7 CisrCQkJYW1vZGVbbl0gPSAnXDAnOworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlp ZiAoVkVSQk9TRSkKKysJCQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2Rl KTsKKysJCQl9CisrCQkgICAgfQorKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8q IFtFTkNSWVBUXSB8IFtERUNSWVBUXSAqLworKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQorKwkJ YnJlYWs7CisrCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCisrCQl7CisrCQlmcHV0cyhpYnVmLCBy ZnApOworKwkJKytzdGVwOworKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5 KSA9PSAwKQorKwkJICAgIGRpciA9IDE7CisrCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAi W0RFQ1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAwOworKwkJZWxzZQorKwkJICAgIHsK KysJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOworKwkJICAgIGVy ciA9IDE7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIGlmIChkaXIgPT0g LTEpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQ VCBrZXl3b3JkXG4iKTsKKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSAKKysJCXN0ZXAgPSAy OworKworKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KKysJICAgIGlmKCppYnVmID09ICdcbicp CisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAg ICAgICAgICB9CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQorKwkJ eworKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQlicmVhazsKKysgICAgICAgICAgICAg ICAgfQorKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCisrCQl7CisrCSAg ICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9Cisr CSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQorKwkJeworKwkJbnVt a2V5cz1hdG9pKGlidWYrMTApOworKwkJYnJlYWs7CisrCQl9CisrCSAgCisrCSAgICBmcHV0cyhp YnVmLCByZnApOworKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCisrCQl7 CisrCQlha2V5c3o9NjQ7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwor KwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIp OworKwkJICAgIGVycj0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUo IktFWSIsIGFLZXksIGxlbik7CisrCQkrK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlIGlmKCFzdHJu Y2FzZWNtcChpYnVmLCJLRVlzID0gIiw3KSkKKysJCXsKKysJCWFrZXlzej02NCozOworKwkJbGVu PWhleDJiaW4oaWJ1Zis3LGFLZXkpOworKwkJaWYobGVuICE9IDgpCisrCQkgICAgeworKwkJICAg IHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVycj0xOworKwkJICAgIGJyZWFrOwor KwkJICAgIH0KKysJCW1lbWNweShhS2V5KzgsYUtleSw4KTsKKysJCW1lbWNweShhS2V5KzE2LGFL ZXksOCk7CisrCQlpYnVmWzRdPSdcMCc7CisrCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7 CisrCQkrK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVki LDMpKQorKwkJeworKwkJaW50IG49aWJ1ZlszXS0nMSc7CisrCisrCQlha2V5c3o9NjQqMzsKKysJ CWxlbj1oZXgyYmluKGlidWYrNyxhS2V5K24qOCk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7 CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAg YnJlYWs7CisrCQkgICAgfQorKwkJaWJ1Zls0XT0nXDAnOworKwkJUHJpbnRWYWx1ZShpYnVmLGFL ZXksbGVuKTsKKysJCWlmKG4gPT0gMikKKysJCSAgICArK3N0ZXA7CisrCQl9CisrCSAgICBlbHNl CisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9Cisr CSAgICBicmVhazsKKysKKysJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KKysJICAgIGZwdXRzKGli dWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkK KysJCXsKKysJCXByaW50ZigiTWlzc2luZyBJVlxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkg ICAgZWxzZQorKwkJeworKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKKysJ CWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwor KwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJJ ViIsIGlWZWMsIGxlbik7CisrCQlzdGVwID0gKGRpcik/IDQ6IDU7CisrCQl9CisrCSAgICBicmVh azsKKysKKysJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVm LCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikg IT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOworKwkJZXJyID0g MTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsK KysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1Zisx Mixubi0xLHBsYWludGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwg cGxhaW50ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIklu dmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBi cmVhazsKKysJCSAgICB9CisrCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQorKwkJICAg IHsKKysJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7CisrCQkgICAgfQorKwkJUHJp bnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKKysJ CWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICov CisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMs ZGlyLHBsYWludGV4dCxsZW4scmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJ ICAgIGFzc2VydChkaXIgPT0gMSk7CisrCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwg YWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVu Y3J5cHQgKi8KKysJCQkJICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCQkgICAgT3V0 cHV0VmFsdWUoIkNJUEhFUlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChh bW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFr OworKworKwljYXNlIDU6IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVm LCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMp ICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7Cisr CQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkg ICAgbGVuPWJpbnQyYmluKGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7Cisr CQllbHNlCisrCQkgICAgbGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYg KGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4i KTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJCisrCQlQcmlu dFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRl c3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJ ICAgIGRvX21jdChhbW9kZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKKysJCQkgICBk aXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgewor KwkJICAgIGFzc2VydChkaXIgPT0gMCk7CisrCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9k ZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9 IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAg T3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJm cCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsK KysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAn XG4nKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4i KTsKKysJCX0KKysJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7 IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCBy ZnApOworKwkJfQorKwkgICAgc3RlcCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQor KyAgICBpZiAocmZwKQorKwlmY2xvc2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFm cCk7CisrICAgIHJldHVybiBlcnI7CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2lu Z2xlIGZpbGUgb3IgCisrICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGlu IGEgZmlsZS4KKysgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVz dCAtZiB4eHgucmVxCisrICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFl c190ZXN0IC1kIHh4eHh4Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJy ZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNo YXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29w dCA9IDE7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgx KSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgor KyAgICBpZiAoYXJnYyA+IDEpCisrCXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikg PT0gMCkKKysJICAgIHsKKysJICAgIGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3Ry Y2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOwor KwkgICAgZF9vcHQgPSAwOworKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYo IkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJ ICAgIH0KKysJaWYgKGFyZ2MgPCAzKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBh cmFtZXRlclxuIik7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkg ICAgcnFsaXN0ID0gYXJndlsyXTsKKysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBh cmd2WzJdKTsKKysJICAgIHJzcGZpbGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlm IChkX29wdCkKKysJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZw ID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9w ZW4gcmVxIGxpc3QgZmlsZVxuIik7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxl IChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAi XHJcbiIpOworKwkgICAgc3RyY3B5KHJmbiwgZm4pOworKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5n OiAlc1xuIiwgcmZuKTsKKysJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsK KysJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOwor KwkJRVhJVCgxKTsKKysJCX0KKysJICAgIH0KKysJZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNl IC8qIHNpbmdsZSBmaWxlICovCisrCXsKKysJaWYgKFZFUkJPU0UpCisrCQlwcmludGYoIlByb2Nl c3Npbmc6ICVzXG4iLCBmbik7CisrCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkgICAg eworKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZu KTsKKysJICAgIH0KKysJfQorKyAgICBFWElUKDApOworKyAgICByZXR1cm4gMDsKKysgICAgfQor KworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X2RodnMuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19kaHZzLmMK Ky0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jLmZpcHMJMjAx Mi0wNC0yMCAwOTowNzowNi4yNTM3ODU0NjMgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZGh2cy5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjUzNzg1NDYzICsw MjAwCitAQCAtMCwwICsxLDI5MiBAQAorKy8qIGZpcHMvZGgvZmlwc19kaHZzLmMgKi8KKysvKiBX cml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhl IE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJp Z2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqLworKworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxz dGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHBy aW50ZigiTm8gRklQUyBESCBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysjZWxz ZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJm aXBzX3V0bC5oIgorKworK3N0YXRpYyBjb25zdCBFVlBfTUQgKnBhcnNlX21kKGNoYXIgKmxpbmUp CisrCXsKKysJY2hhciAqcDsKKysJaWYgKGxpbmVbMF0gIT0gJ1snIHx8IGxpbmVbMV0gIT0gJ0Yn KQorKwkJcmV0dXJuIE5VTEw7CisrCXAgPSBzdHJjaHIobGluZSwgJy0nKTsKKysJaWYgKCFwKQor KwkJcmV0dXJuIE5VTEw7CisrCWxpbmUgPSBwICsgMTsKKysJcCA9IHN0cmNocihsaW5lLCAnXScp OworKwlpZiAoIXApCisrCQlyZXR1cm4gTlVMTDsKKysJKnAgPSAwOworKwlwID0gbGluZTsKKysJ d2hpbGUoaXNzcGFjZSgqcCkpCisrCQlwKys7CisrCWlmICghc3RyY21wKHAsICJTSEExIikpCisr CQlyZXR1cm4gRVZQX3NoYTEoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBMjI0IikpCisr CQlyZXR1cm4gRVZQX3NoYTIyNCgpOworKwllbHNlIGlmICghc3RyY21wKHAsICJTSEEyNTYiKSkK KysJCXJldHVybiBFVlBfc2hhMjU2KCk7CisrCWVsc2UgaWYgKCFzdHJjbXAocCwgIlNIQTM4NCIp KQorKwkJcmV0dXJuIEVWUF9zaGEzODQoKTsKKysJZWxzZSBpZiAoIXN0cmNtcChwLCAiU0hBNTEy IikpCisrCQlyZXR1cm4gRVZQX3NoYTUxMigpOworKwllbHNlCisrCQlyZXR1cm4gTlVMTDsKKysJ fQorKworK3N0YXRpYyB2b2lkIG91dHB1dF9aaGFzaChGSUxFICpvdXQsIGludCBleG91dCwKKysJ CQkJREggKmRoLCBCSUdOVU0gKnBlZXJrZXksIGNvbnN0IEVWUF9NRCAqbWQsCisrCQkJCXVuc2ln bmVkIGNoYXIgKnJoYXNoLCBzaXplX3Qgcmhhc2hsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAq WjsKKysJdW5zaWduZWQgY2hhciBjaGFzaFtFVlBfTUFYX01EX1NJWkVdOworKwlpbnQgWmxlbjsK KysJaWYgKHJoYXNoID09IE5VTEwpCisrCQl7CisrCQlyaGFzaGxlbiA9IE1fRVZQX01EX3NpemUo bWQpOworKwkJaWYgKCFESF9nZW5lcmF0ZV9rZXkoZGgpKQorKwkJCWV4aXQgKDEpOworKwkJZG9f Ym5fcHJpbnRfbmFtZShvdXQsICJZZXBoZW1JVVQiLCBkaC0+cHViX2tleSk7CisrCQlpZiAoZXhv dXQpCisrCQkJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJYZXBoZW1JVVQiLCBkaC0+cHJpdl9rZXkp OworKwkJfQorKwlaID0gT1BFTlNTTF9tYWxsb2MoQk5fbnVtX2J5dGVzKGRoLT5wKSk7CisrCWlm ICghWikKKysJCWV4aXQoMSk7CisrCVpsZW4gPSBESF9jb21wdXRlX2tleV9wYWRkZWQoWiwgcGVl cmtleSwgZGgpOworKwlpZiAoZXhvdXQpCisrCQlPdXRwdXRWYWx1ZSgiWiIsIFosIFpsZW4sIG91 dCwgMCk7CisrCUZJUFNfZGlnZXN0KFosIFpsZW4sIGNoYXNoLCBOVUxMLCBtZCk7CisrCU91dHB1 dFZhbHVlKHJoYXNoID8gIklVVEhhc2haWiIgOiAiSGFzaFpaIiwgY2hhc2gsIHJoYXNobGVuLCBv dXQsIDApOworKwlpZiAocmhhc2gpCisrCQl7CisrCQlmcHJpbnRmKG91dCwgIlJlc3VsdCA9ICVz XG4iLAorKwkJCQltZW1jbXAoY2hhc2gsIHJoYXNoLCByaGFzaGxlbikgPyAiRiIgOiAiUCIpOwor KwkJfQorKwllbHNlCisrCQl7CisrCQlCTl9jbGVhcl9mcmVlKGRoLT5wcml2X2tleSk7CisrCQlC Tl9jbGVhcl9mcmVlKGRoLT5wdWJfa2V5KTsKKysJCWRoLT5wcml2X2tleSA9IE5VTEw7CisrCQlk aC0+cHViX2tleSA9IE5VTEw7CisrCQl9CisrCU9QRU5TU0xfY2xlYW5zZShaLCBabGVuKTsKKysJ T1BFTlNTTF9mcmVlKFopOworKwl9CisrCisrI2lmZGVmIEZJUFNfQUxHVlMKKytpbnQgZmlwc19k aHZzX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyNlbHNlCisraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQorKyNlbmRpZgorKwl7CisrCWNoYXIgKiphcmdzID0gYXJndiArIDE7 CisrCWludCBhcmduID0gYXJnYyAtIDE7CisrCUZJTEUgKmluLCAqb3V0OworKwljaGFyIGJ1Zlsy MDQ4XSwgbGJ1ZlsyMDQ4XTsKKysJdW5zaWduZWQgY2hhciAqcmhhc2g7CisrCWxvbmcgcmhhc2hs ZW47CisrCURIICpkaCA9IE5VTEw7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwlCSUdO VU0gKnBlZXJrZXkgPSBOVUxMOworKwljaGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVM TDsKKysJaW50IGRvX3ZlcmlmeSA9IC0xLCBleG91dCA9IDA7CisrCisrCWZpcHNfYWxndGVzdF9p bml0KCk7CisrCisrCWlmIChhcmduICYmICFzdHJjbXAoKmFyZ3MsICJkaHZlciIpKQorKwkJewor KwkJZG9fdmVyaWZ5ID0gMTsKKysJCWFyZ3MrKzsKKysJCWFyZ24tLTsKKysJCX0KKysJZWxzZSBp ZiAoYXJnbiAmJiAhc3RyY21wKCphcmdzLCAiZGhnZW4iKSkKKysJCXsKKysJCWRvX3ZlcmlmeSA9 IDA7CisrCQlhcmdzKys7CisrCQlhcmduLS07CisrCQl9CisrCisrCWlmIChhcmduICYmICFzdHJj bXAoKmFyZ3MsICItZXhvdXQiKSkKKysJCXsKKysJCWV4b3V0ID0gMTsKKysJCWFyZ3MrKzsKKysJ CWFyZ24tLTsKKysJCX0KKysKKysJaWYgKGRvX3ZlcmlmeSA9PSAtMSkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCIlcyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUpXG4i LGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJaWYgKGFyZ24gPT0gMikKKysJCXsK KysJCWluID0gZm9wZW4oKmFyZ3MsICJyIik7CisrCQlpZiAoIWluKQorKwkJCXsKKysJCQlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgaW5wdXQgZmlsZVxuIik7CisrCQkJZXhpdCgxKTsK KysJCQl9CisrCQlvdXQgPSBmb3BlbihhcmdzWzFdLCAidyIpOworKwkJaWYgKCFvdXQpCisrCQkJ eworKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igb3BlbmluZyBvdXRwdXQgZmlsZVxuIik7Cisr CQkJZXhpdCgxKTsKKysJCQl9CisrCQl9CisrCWVsc2UgaWYgKGFyZ24gPT0gMCkKKysJCXsKKysJ CWluID0gc3RkaW47CisrCQlvdXQgPSBzdGRvdXQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCIlcyBbZGh2ZXJ8ZGhnZW58XSBbLWV4b3V0XSAoaW5maWxlIG91dGZpbGUp XG4iLGFyZ3ZbMF0pOworKwkJZXhpdCgxKTsKKysJCX0KKysKKysJZGggPSBGSVBTX2RoX25ldygp OworKworKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgaW4pICE9IE5VTEwpCisrCQl7 CisrCQlmcHV0cyhidWYsIG91dCk7CisrCQlpZiAoc3RybGVuKGJ1ZikgPiA2ICYmICFzdHJuY21w KGJ1ZiwgIltGIiwgMikpCisrCQkJeworKwkJCW1kID0gcGFyc2VfbWQoYnVmKTsKKysJCQlpZiAo bWQgPT0gTlVMTCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoZGgpCisrCQkJCUZJ UFNfZGhfZnJlZShkaCk7CisrCQkJZGggPSBGSVBTX2RoX25ldygpOworKwkJCWNvbnRpbnVlOwor KwkJCX0KKysJCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQor KwkJCWNvbnRpbnVlOworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlAiKSkKKysJCQl7CisrCQkJ aWYgKCFkb19oZXgyYm4oJmRoLT5wLCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUSIpKQorKwkJCXsKKysJCQlpZiAo IWRvX2hleDJibigmZGgtPnEsIHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9 CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJHIikpCisrCQkJeworKwkJCWlmICghZG9f aGV4MmJuKCZkaC0+ZywgdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhlcGhlbUlVVCIpKQorKwkJCXsKKysJCQlpZiAo IWRvX2hleDJibigmZGgtPnByaXZfa2V5LCB2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWWVwaGVtSVVUIikpCisrCQkJ eworKwkJCWlmICghZG9faGV4MmJuKCZkaC0+cHViX2tleSwgdmFsdWUpKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlllcGhlbUNB VlMiKSkKKysJCQl7CisrCQkJaWYgKCFkb19oZXgyYm4oJnBlZXJrZXksIHZhbHVlKSkKKysJCQkJ Z290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoZG9fdmVyaWZ5ID09IDApCisrCQkJCW91dHB1dF9a aGFzaChvdXQsIGV4b3V0LCBkaCwgcGVlcmtleSwgbWQsCisrCQkJCQkJCU5VTEwsIDApOworKwkJ CX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkNBVlNIYXNoWloiKSkKKysJCQl7Cisr CQkJaWYgKCFtZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlyaGFzaCA9IGhleDJiaW5f bSh2YWx1ZSwgJnJoYXNobGVuKTsKKysJCQlpZiAoIXJoYXNoIHx8IHJoYXNobGVuICE9IE1fRVZQ X01EX3NpemUobWQpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCW91dHB1dF9aaGFzaChv dXQsIGV4b3V0LCBkaCwgcGVlcmtleSwgbWQsCisrCQkJCQkJCXJoYXNoLCByaGFzaGxlbik7Cisr CQkJfQorKwkJfQorKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4pCisrCQlmY2xvc2UoaW4pOworKwlp ZiAob3V0ICYmIG91dCAhPSBzdGRvdXQpCisrCQlmY2xvc2Uob3V0KTsKKysJcmV0dXJuIDA7Cisr CXBhcnNlX2Vycm9yOgorKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIFBhcnNpbmcgcmVxdWVzdCBm aWxlXG4iKTsKKysJZXhpdCgxKTsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2RyYmd2cy5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTM3ODU0 NjMgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHJiZ3Zz LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTM3ODU0NjMgKzAyMDAKK0BAIC0wLDAgKzEsNDE2IEBA CisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ3ZzLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBo ZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9q ZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKworKyNk ZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K KysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBEUkJH IHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0 cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgor KworK3N0YXRpYyBpbnQgZHBhcnNlX21kKGNoYXIgKnN0cikKKysJeworKwlzd2l0Y2goYXRvaShz dHIgKyA1KSkKKysJCXsKKysJCWNhc2UgMToKKysJCXJldHVybiBOSURfc2hhMTsKKysKKysJCWNh c2UgMjI0OgorKwkJcmV0dXJuIE5JRF9zaGEyMjQ7CisrCisrCQljYXNlIDI1NjoKKysJCXJldHVy biBOSURfc2hhMjU2OworKworKwkJY2FzZSAzODQ6CisrCQlyZXR1cm4gTklEX3NoYTM4NDsKKysK KysJCWNhc2UgNTEyOgorKwkJcmV0dXJuIE5JRF9zaGE1MTI7CisrCisrCQl9CisrCisrCXJldHVy biBOSURfdW5kZWY7CisrCX0KKysKKytzdGF0aWMgaW50IHBhcnNlX2VjKGNoYXIgKnN0cikKKysJ eworKwlpbnQgY3VydmVfbmlkLCBtZF9uaWQ7CisrCWNoYXIgKm1kOworKwltZCA9IHN0cmNocihz dHIsICcgJyk7CisrCWlmICghbWQpCisrCQlyZXR1cm4gTklEX3VuZGVmOworKwlpZiAoIXN0cm5j bXAoc3RyLCAiW1AtMjU2IiwgNikpCisrCQljdXJ2ZV9uaWQgPSBOSURfWDlfNjJfcHJpbWUyNTZ2 MTsKKysJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiW1AtMzg0IiwgNikpCisrCQljdXJ2ZV9uaWQg PSBOSURfc2VjcDM4NHIxOworKwllbHNlIGlmICghc3RybmNtcChzdHIsICJbUC01MjEiLCA2KSkK KysJCWN1cnZlX25pZCA9IE5JRF9zZWNwNTIxcjE7CisrCWVsc2UKKysJCXJldHVybiBOSURfdW5k ZWY7CisrCW1kX25pZCA9IGRwYXJzZV9tZChtZCk7CisrCWlmIChtZF9uaWQgPT0gTklEX3VuZGVm KQorKwkJcmV0dXJuIE5JRF91bmRlZjsKKysJcmV0dXJuIChjdXJ2ZV9uaWQgPDwgMTYpIHwgbWRf bmlkOworKwl9CisrCisrc3RhdGljIGludCBwYXJzZV9hZXMoY2hhciAqc3RyLCBpbnQgKnBkZikK KysJeworKworKwlpZiAoIXN0cm5jbXAoc3RyICsgOSwgIm5vIiwgMikpCisrCQkqcGRmID0gMDsK KysJZWxzZQorKwkJKnBkZiA9IERSQkdfRkxBR19DVFJfVVNFX0RGOworKworKwlzd2l0Y2goYXRv aShzdHIgKyA1KSkKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJcmV0dXJuIE5JRF9hZXNfMTI4X2N0 cjsKKysKKysJCWNhc2UgMTkyOgorKwkJcmV0dXJuIE5JRF9hZXNfMTkyX2N0cjsKKysKKysJCWNh c2UgMjU2OgorKwkJcmV0dXJuIE5JRF9hZXNfMjU2X2N0cjsKKysKKysJCWRlZmF1bHQ6CisrCQly ZXR1cm4gTklEX3VuZGVmOworKworKwkJfQorKwl9CisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsK KysJdW5zaWduZWQgY2hhciAqZW50OworKwlzaXplX3QgZW50bGVuOworKwl1bnNpZ25lZCBjaGFy ICpub25jZTsKKysJc2l6ZV90IG5vbmNlbGVuOworKwl9IFRFU1RfRU5UOworKworK3N0YXRpYyBz aXplX3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWlu X2xlbiwgc2l6ZV90IG1heF9sZW4pCisrCXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0 X2FwcF9kYXRhKGRjdHgpOworKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+ZW50OworKwly ZXR1cm4gdC0+ZW50bGVuOworKwl9CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdf Q1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisr CXsKKysJVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkqcG91 dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7CisrCXJldHVybiB0LT5ub25jZWxlbjsKKysJ fQorKworKyNpZmRlZiBGSVBTX0FMR1ZTCisraW50IGZpcHNfZHJiZ3ZzX21haW4oaW50IGFyZ2Ms Y2hhciAqKmFyZ3YpCisrI2Vsc2UKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysj ZW5kaWYKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKwlEUkJHX0NUWCAq ZGN0eCA9IE5VTEw7CisrCVRFU1RfRU5UIHQ7CisrCWludCByLCBuaWQgPSAwOworKwlpbnQgcHIg PSAwOworKwljaGFyIGJ1ZlsyMDQ4XSwgbGJ1ZlsyMDQ4XTsKKysJdW5zaWduZWQgY2hhciByYW5k b3V0WzIwNDhdOworKwljaGFyICprZXl3b3JkID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKKysKKysJ dW5zaWduZWQgY2hhciAqZW50ID0gTlVMTCwgKm5vbmNlID0gTlVMTCwgKnBlcnMgPSBOVUxMLCAq YWRpbiA9IE5VTEw7CisrCWxvbmcgZW50bGVuLCBub25jZWxlbiwgcGVyc2xlbiwgYWRpbmxlbjsK KysJaW50IGRmID0gMDsKKysKKysJZW51bSBkdHlwZSB7IERSQkdfTk9ORSwgRFJCR19DVFIsIERS QkdfSEFTSCwgRFJCR19ITUFDLCBEUkJHX0RVQUxfRUMgfQorKwkJZHJiZ190eXBlID0gRFJCR19O T05FOworKworKwlpbnQgcmFuZG91dGxlbiA9IDA7CisrCisrCWludCBnZW4gPSAwOworKworKwlm aXBzX2FsZ3Rlc3RfaW5pdCgpOworKworKwlpZiAoYXJnYyA9PSAzKQorKwkJeworKwkJaW4gPSBm b3Blbihhcmd2WzFdLCAiciIpOworKwkJaWYgKCFpbikKKysJCQl7CisrCQkJZnByaW50ZihzdGRl cnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7CisrCQkJfQor KwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysJCWlmICghb3V0KQorKwkJCXsKKysJCQlm cHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOworKwkJCWV4aXQo MSk7CisrCQkJfQorKwkJfQorKwllbHNlIGlmIChhcmdjID09IDEpCisrCQl7CisrCQlpbiA9IHN0 ZGluOworKwkJb3V0ID0gc3Rkb3V0OworKwkJfQorKwllbHNlCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwiJXMgKGluZmlsZSBvdXRmaWxlKVxuIixhcmd2WzBdKTsKKysJCWV4aXQoMSk7CisrCQl9 CisrCisrCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBpbikgIT0gTlVMTCkKKysJCXsK KysJCWZwdXRzKGJ1Ziwgb3V0KTsKKysJCWlmIChkcmJnX3R5cGUgPT0gRFJCR19OT05FKQorKwkJ CXsKKysJCQlpZiAoc3Ryc3RyKGJ1ZiwgIkNUUl9EUkJHIikpCisrCQkJCWRyYmdfdHlwZSA9IERS QkdfQ1RSOworKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJIYXNoX0RSQkciKSkKKysJCQkJZHJi Z190eXBlID0gRFJCR19IQVNIOworKwkJCWVsc2UgaWYgKHN0cnN0cihidWYsICJITUFDX0RSQkci KSkKKysJCQkJZHJiZ190eXBlID0gRFJCR19ITUFDOworKwkJCWVsc2UgaWYgKHN0cnN0cihidWYs ICJEdWFsX0VDX0RSQkciKSkKKysJCQkJZHJiZ190eXBlID0gRFJCR19EVUFMX0VDOworKwkJCWVs c2UKKysJCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKHN0cmxlbihidWYpID4gNCAmJiAhc3Ry bmNtcChidWYsICJbU0hBLSIsIDUpKQorKwkJCXsKKysJCQluaWQgPSBkcGFyc2VfbWQoYnVmKTsK KysJCQlpZiAobmlkID09IE5JRF91bmRlZikKKysJCQkJZXhpdCgxKTsKKysJCQlpZiAoZHJiZ190 eXBlID09IERSQkdfSE1BQykKKysJCQkJeworKwkJCQlzd2l0Y2ggKG5pZCkKKysJCQkJCXsKKysJ CQkJCWNhc2UgTklEX3NoYTE6CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEExOworKwkJCQkJ YnJlYWs7CisrCisrCQkJCQljYXNlIE5JRF9zaGEyMjQ6CisrCQkJCQluaWQgPSBOSURfaG1hY1dp dGhTSEEyMjQ7CisrCQkJCQlicmVhazsKKysKKysJCQkJCWNhc2UgTklEX3NoYTI1NjoKKysJCQkJ CW5pZCA9IE5JRF9obWFjV2l0aFNIQTI1NjsKKysJCQkJCWJyZWFrOworKworKwkJCQkJY2FzZSBO SURfc2hhMzg0OgorKwkJCQkJbmlkID0gTklEX2htYWNXaXRoU0hBMzg0OworKwkJCQkJYnJlYWs7 CisrCisrCQkJCQljYXNlIE5JRF9zaGE1MTI6CisrCQkJCQluaWQgPSBOSURfaG1hY1dpdGhTSEE1 MTI7CisrCQkJCQlicmVhazsKKysKKysJCQkJCWRlZmF1bHQ6CisrCQkJCQlleGl0KDEpOworKwkJ CQkJfQorKwkJCQl9CisrCQkJfQorKwkJaWYgKHN0cmxlbihidWYpID4gMTIgJiYgIXN0cm5jbXAo YnVmLCAiW0FFUy0iLCA1KSkKKysJCQl7CisrCQkJbmlkID0gcGFyc2VfYWVzKGJ1ZiwgJmRmKTsK KysJCQlpZiAobmlkID09IE5JRF91bmRlZikKKysJCQkJZXhpdCgxKTsKKysJCQl9CisrCQlpZiAo c3RybGVuKGJ1ZikgPiAxMiAmJiAhc3RybmNtcChidWYsICJbUC0iLCAzKSkKKysJCQl7CisrCQkJ bmlkID0gcGFyc2VfZWMoYnVmKTsKKysJCQlpZiAobmlkID09IE5JRF91bmRlZikKKysJCQkJZXhp dCgxKTsKKysJCQl9CisrCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1Ziwg YnVmKSkKKysJCQljb250aW51ZTsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJbUHJlZGlj dGlvblJlc2lzdGFuY2UiKSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJUcnVlXSIp KQorKwkJCQlwciA9IDE7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIkZhbHNlXSIpKQor KwkJCQlwciA9IDA7CisrCQkJZWxzZQorKwkJCQlleGl0KDEpOworKwkJCX0KKysKKysJCWlmICgh c3RyY21wKGtleXdvcmQsICJFbnRyb3B5SW5wdXQiKSkKKysJCQl7CisrCQkJZW50ID0gaGV4MmJp bl9tKHZhbHVlLCAmZW50bGVuKTsKKysJCQl0LmVudCA9IGVudDsKKysJCQl0LmVudGxlbiA9IGVu dGxlbjsKKysJCQl9CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiTm9uY2UiKSkKKysJCQl7 CisrCQkJbm9uY2UgPSBoZXgyYmluX20odmFsdWUsICZub25jZWxlbik7CisrCQkJdC5ub25jZSA9 IG5vbmNlOworKwkJCXQubm9uY2VsZW4gPSBub25jZWxlbjsKKysJCQl9CisrCisrCQlpZiAoIXN0 cmNtcChrZXl3b3JkLCAiUGVyc29uYWxpemF0aW9uU3RyaW5nIikpCisrCQkJeworKwkJCXBlcnMg PSBoZXgyYmluX20odmFsdWUsICZwZXJzbGVuKTsKKysJCQlpZiAobmlkID09IDApCisrCQkJCXsK KysJCQkJZnByaW50ZihzdGRlcnIsICJEUkJHIHR5cGUgbm90IHJlY29nbmlzZWQhXG4iKTsKKysJ CQkJZXhpdCAoMSk7CisrCQkJCX0KKysJCQlkY3R4ID0gRklQU19kcmJnX25ldyhuaWQsIGRmIHwg RFJCR19GTEFHX1RFU1QpOworKwkJCWlmICghZGN0eCkKKysJCQkJZXhpdCAoMSk7CisrCQkJRklQ U19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLAorKwkJCQkJCQl0 ZXN0X25vbmNlLCAwKTsKKysJCQlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKKysJ CQlyYW5kb3V0bGVuID0gKGludClGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKGRjdHgpOworKwkJ CXIgPSBGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgcGVycywgcGVyc2xlbik7CisrCQkJaWYg KCFyKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgaW5zdGFudGlhdGluZyBE UkJHXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCU9QRU5TU0xfZnJlZShwZXJzKTsK KysJCQlPUEVOU1NMX2ZyZWUoZW50KTsKKysJCQlPUEVOU1NMX2ZyZWUobm9uY2UpOworKwkJCWVu dCA9IG5vbmNlID0gcGVycyA9IE5VTEw7CisrCQkJZ2VuID0gMDsKKysJCQl9CisrCisrCQlpZiAo IXN0cmNtcChrZXl3b3JkLCAiQWRkaXRpb25hbElucHV0IikpCisrCQkJeworKwkJCWFkaW4gPSBo ZXgyYmluX20odmFsdWUsICZhZGlubGVuKTsKKysJCQlpZiAocHIpCisrCQkJCWNvbnRpbnVlOwor KwkJCXIgPSBGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgcmFuZG91dGxlbiwgMCwK KysJCQkJCQkJCWFkaW4sIGFkaW5sZW4pOworKwkJCWlmICghcikKKysJCQkJeworKwkJCQlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIGdlbmVyYXRpbmcgRFJCRyBiaXRzXG4iKTsKKysJCQkJZXhpdCgx KTsKKysJCQkJfQorKwkJCWlmICghcikKKysJCQkJZXhpdCgxKTsKKysJCQlPUEVOU1NMX2ZyZWUo YWRpbik7CisrCQkJYWRpbiA9IE5VTEw7CisrCQkJZ2VuKys7CisrCQkJfQorKworKwkJaWYgKHBy KQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0UFIiKSkKKysJ CQkJeworKwkJCQllbnQgPSBoZXgyYmluX20odmFsdWUsICZlbnRsZW4pOworKwkJCQl0LmVudCA9 IGVudDsKKysJCQkJdC5lbnRsZW4gPSBlbnRsZW47CisrCQkJCXIgPSBGSVBTX2RyYmdfZ2VuZXJh dGUoZGN0eCwKKysJCQkJCQkJcmFuZG91dCwgcmFuZG91dGxlbiwKKysJCQkJCQkJMSwgYWRpbiwg YWRpbmxlbik7CisrCQkJCWlmICghcikKKysJCQkJCXsKKysJCQkJCWZwcmludGYoc3RkZXJyLAor KwkJCQkJCSJFcnJvciBnZW5lcmF0aW5nIERSQkcgYml0c1xuIik7CisrCQkJCQlleGl0KDEpOwor KwkJCQkJfQorKwkJCQlPUEVOU1NMX2ZyZWUoYWRpbik7CisrCQkJCU9QRU5TU0xfZnJlZShlbnQp OworKwkJCQlhZGluID0gZW50ID0gTlVMTDsKKysJCQkJZ2VuKys7CisrCQkJCX0KKysJCQl9Cisr CQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiRW50cm9weUlucHV0UmVzZWVkIikpCisrCQkJeworKwkJ CWVudCA9IGhleDJiaW5fbSh2YWx1ZSwgJmVudGxlbik7CisrCQkJdC5lbnQgPSBlbnQ7CisrCQkJ dC5lbnRsZW4gPSBlbnRsZW47CisrCQkJfQorKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFkZGl0 aW9uYWxJbnB1dFJlc2VlZCIpKQorKwkJCXsKKysJCQlhZGluID0gaGV4MmJpbl9tKHZhbHVlLCAm YWRpbmxlbik7CisrCQkJRklQU19kcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuKTsKKysJ CQlPUEVOU1NMX2ZyZWUoZW50KTsKKysJCQlPUEVOU1NMX2ZyZWUoYWRpbik7CisrCQkJZW50ID0g YWRpbiA9IE5VTEw7CisrCQkJfQorKwkJaWYgKGdlbiA9PSAyKQorKwkJCXsKKysJCQlPdXRwdXRW YWx1ZSgiUmV0dXJuZWRCaXRzIiwgcmFuZG91dCwgcmFuZG91dGxlbiwKKysJCQkJCQkJCQlvdXQs IDApOworKwkJCUZJUFNfZHJiZ19mcmVlKGRjdHgpOworKwkJCWRjdHggPSBOVUxMOworKwkJCWdl biA9IDA7CisrCQkJfQorKworKwkJfQorKwlpZiAoaW4gJiYgaW4gIT0gc3RkaW4pCisrCQlmY2xv c2UoaW4pOworKwlpZiAob3V0ICYmIG91dCAhPSBzdGRvdXQpCisrCQlmY2xvc2Uob3V0KTsKKysJ cmV0dXJuIDA7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Rzc3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfZHNzdnMuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU0Nzg1NDg0ICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxMi0wNC0yMCAw OTowNzowNi4yNTQ3ODU0ODQgKzAyMDAKK0BAIC0wLDAgKzEsNTM3IEBACisrI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRl IDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAg IHByaW50ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9Cisr I2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rz YS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIHZv aWQgcGJuKGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsK KysJdW5zaWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwl0bXAg PSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwlC Tl9ibjJiaW4oYm4sIHRtcCk7CisrCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKKysJZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQorKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKKysJZnB1dHMoIlxu Iiwgc3Rkb3V0KTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7CisrCXJldHVybjsKKysJfQorKworK3Zv aWQgcHJpbWVzKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0MF07CisrICAgIGNoYXIgbGJ1 ZlsxMDI0MF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysKKysgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91 dCk7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJ Y29udGludWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKKysJICAgIHsKKysJICAg IEJJR05VTSAqcHA7CisrCisrCSAgICBwcD1CTl9uZXcoKTsKKysJICAgIGRvX2hleDJibigmcHAs dmFsdWUpOworKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAorKwkJICAgQk5faXNfcHJpbWVf ZXgocHAsMjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7CisrCSAgICB9CSAgICAKKysJfQorKyAg ICB9CisrCisrdm9pZCBwcWcoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBj aGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5t b2Q9MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwp CisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisr CQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3Ry Y21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJOIikpCisrCSAgICB7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsK KysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKworKwkgICAgd2hpbGUo bi0tKQorKwkJeworKwkJdW5zaWduZWQgY2hhciBzZWVkWzIwXTsKKysJCURTQSAqZHNhOworKwkJ aW50IGNvdW50ZXI7CisrCQl1bnNpZ25lZCBsb25nIGg7CisrCQlkc2EgPSBGSVBTX2RzYV9uZXco KTsKKysKKysJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQs MCwmY291bnRlciwmaCxOVUxMKSkKKysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJ ZXhpdCgxKTsKKysJCQl9CisrCQlwYm4oIlAiLGRzYS0+cCk7CisrCQlwYm4oIlEiLGRzYS0+cSk7 CisrCQlwYm4oIkciLGRzYS0+Zyk7CisrCQlwdigiU2VlZCIsc2VlZCwyMCk7CisrCQlwcmludGYo ImMgPSAlZFxuIixjb3VudGVyKTsKKysJCXByaW50ZigiSCA9ICVseFxuIixoKTsKKysJCXB1dGMo J1xuJyxzdGRvdXQpOworKwkJfQorKwkgICAgfQorKwllbHNlCisrCSAgICBmcHV0cyhidWYsc3Rk b3V0KTsKKysJfQorKyAgICB9CisrCisrdm9pZCBwcWd2ZXIoKQorKyAgICB7CisrICAgIGNoYXIg YnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKKysgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7CisrICAg IGludCBjb3VudGVyLCBjb3VudGVyMjsKKysgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKKysgICAg RFNBICpkc2E9TlVMTDsKKysgICAgaW50IG5tb2Q9MDsKKysgICAgdW5zaWduZWQgY2hhciBzZWVk WzEwMjRdOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK KysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWZwdXRz KGJ1Ziwgc3Rkb3V0KTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9k PWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1o ZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1o ZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1o ZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQorKwkgICAg eworKwkgICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKKysJICAgIGlmIChzbGVu ICE9IDIwKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJv clxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsImMiKSkKKysJICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOworKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiSCIpKQorKwkgICAgeworKwkgICAgaCA9IGF0b2kodmFsdWUpOworKwkgICAg aWYgKCFwIHx8ICFxIHx8ICFnKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJv clxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwor KwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAs JmNvdW50ZXIyLCZoMixOVUxMKSkKKysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJ ZXhpdCgxKTsKKysJCQl9CisrICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJO X2NtcChkc2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcpCisrCQl8fCAoY291bnRlciAhPSBj b3VudGVyMikgfHwgKGggIT0gaDIpKQorKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Cisr CSAgICBlbHNlCisrCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJICAgIEJOX2ZyZWUo cCk7CisrCSAgICBCTl9mcmVlKHEpOworKwkgICAgQk5fZnJlZShnKTsKKysJICAgIHAgPSBOVUxM OworKwkgICAgcSA9IE5VTEw7CisrCSAgICBnID0gTlVMTDsKKysJICAgIEZJUFNfZHNhX2ZyZWUo ZHNhKTsKKysJICAgIGRzYSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKy8qIEtl eXBhaXIgdmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0 YW5kYXJkIEZJUFMxNDAtMgorKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25h bCB0ZXN0IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKKysgKiBvdXRwdXQgb2YgdGhl IEtleVBhaXIgdGVzdC4KKysgKi8KKysKKytzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBu bW9kLCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpnLAorKwkJCQkJCQlCTl9DVFggKmN0 eCkKKysgICAgeworKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7CisrICAgIGlmIChCTl9udW1fYml0 cyhwKSAhPSBubW9kKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2 MCkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVj a3MsIGN0eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9l eChxLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAg IHJlbSA9IEJOX25ldygpOworKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJO X2lzX29uZShyZW0pCisrICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQor Kwl8fCAhQk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQor Kwl7CisrCUJOX2ZyZWUocmVtKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgLyogVG9kbzogY2hl Y2sgZyAqLworKyAgICBCTl9mcmVlKHJlbSk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisr dm9pZCBrZXl2ZXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxi dWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpwID0g TlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOworKyAgICBC SUdOVU0gKlkyOworKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7CisrICAgIGludCBubW9kPTAsIHBh cmFtY2hlY2sgPSAwOworKworKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7CisrICAgIFkyID0gQk5f bmV3KCk7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxM KQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQor KwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0 cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICB7CisrCSAgICBpZiAocCkKKysJCUJOX2ZyZWUo cCk7CisrCSAgICBwID0gTlVMTDsKKysJICAgIGlmIChxKQorKwkJQk5fZnJlZShxKTsKKysJICAg IHEgPSBOVUxMOworKwkgICAgaWYgKGcpCisrCQlCTl9mcmVlKGcpOworKwkgICAgZyA9IE5VTEw7 CisrCSAgICBwYXJhbWNoZWNrID0gMDsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICB9 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBwPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBxPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICBnPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCisrCSAgICBYPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCisrCSAgICB7CisrCSAgICBZPWhleDJi bih2YWx1ZSk7CisrCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQor KwkgICAgcGJuKCJQIixwKTsKKysJICAgIHBibigiUSIscSk7CisrCSAgICBwYm4oIkciLGcpOwor KwkgICAgcGJuKCJYIixYKTsKKysJICAgIHBibigiWSIsWSk7CisrCSAgICBpZiAoIXBhcmFtY2hl Y2spCisrCQl7CisrCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKKysJ CQlwYXJhbWNoZWNrID0gMTsKKysJCWVsc2UKKysJCQlwYXJhbWNoZWNrID0gLTE7CisrCQl9Cisr CSAgICBpZiAocGFyYW1jaGVjayAhPSAxKQorKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsK KysJICAgIGVsc2UKKysJCXsKKysJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8 fCBCTl9jbXAoWTIsIFkpKQorKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAg ICAgIGVsc2UKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJCX0KKysJICAgIEJO X2ZyZWUoWCk7CisrCSAgICBCTl9mcmVlKFkpOworKwkgICAgWCA9IE5VTEw7CisrCSAgICBZID0g TlVMTDsKKysJICAgIH0KKysJfQorKwlpZiAocCkKKysJICAgIEJOX2ZyZWUocCk7CisrCWlmIChx KQorKwkgICAgQk5fZnJlZShxKTsKKysJaWYgKGcpCisrCSAgICBCTl9mcmVlKGcpOworKwlpZiAo WTIpCisrCSAgICBCTl9mcmVlKFkyKTsKKysgICAgfQorKworK3ZvaWQga2V5cGFpcigpCisrICAg IHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hh ciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKworKyAgICB3aGlsZShmZ2V0 cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQp OworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkg ICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKKysJ ICAgIHsKKysJICAgIERTQSAqZHNhOworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAg ICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25l dygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVM TCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhp dCgxKTsKKysJCX0KKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5x KTsKKysJICAgIHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwor KwkgICAgd2hpbGUobi0tKQorKwkJeworKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisr CQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJ cGJuKCJYIixkc2EtPnByaXZfa2V5KTsKKysJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJCXB1 dGMoJ1xuJyxzdGRvdXQpOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lkIHNp Z2dlbigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKyAgICBE U0EgKmRzYT1OVUxMOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1Ziwg YnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9Cisr CWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZh bHVlKTsKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgaWYgKGRz YSkKKysJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwor KwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5V TEwsTlVMTCxOVUxMKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsK KysJCX0KKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJ ICAgIHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICB1bnNpZ25l ZCBjaGFyIG1zZ1sxMDI0XTsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07CisrCSAgICB1 bnNpZ25lZCBpbnQgc2xlbjsKKysJICAgIGludCBuOworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAg ICBFVlBfTURfQ1RYIG1jdHg7CisrCSAgICBEU0FfU0lHICpzaWc7CisrCSAgICBFVlBfTURfQ1RY X2luaXQoJm1jdHgpOworKworKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7CisrCSAgICBwdigi TXNnIixtc2csbik7CisrCisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJCXsK KysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBrLnR5cGUg PSBFVlBfUEtFWV9EU0E7CisrCSAgICBway5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHBibigiWSIs ZHNhLT5wdWJfa2V5KTsKKysKKysJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEo KSwgTlVMTCk7CisrCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIEVW UF9TaWduRmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGspOworKworKwkgICAgc2lnID0gRFNB X1NJR19uZXcoKTsKKysJICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsK KysKKysJICAgIHBibigiUiIsc2lnLT5yKTsKKysJICAgIHBibigiUyIsc2lnLT5zKTsKKysJICAg IHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7CisrCSAgICBFVlBf TURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwkgICAgfQorKwl9CisrCWlmIChkc2EpCisrCQlGSVBT X2RzYV9mcmVlKGRzYSk7CisrICAgIH0KKysKKyt2b2lkIHNpZ3ZlcigpCisrICAgIHsKKysgICAg RFNBICpkc2E9TlVMTDsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKKysgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKKysgICAgaW50IG5tb2Q9MCwgbj0wOworKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNn OworKworKyAgICBzaWctPnIgPSBOVUxMOworKyAgICBzaWctPnMgPSBOVUxMOworKworKyAgICB3 aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBh cnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1 ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21v ZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIGlmKGRzYSkKKysJ CUZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKKysJICAgIH0K KysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIGRzYS0+cD1oZXgyYm4odmFs dWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgZHNhLT5xPWhleDJi bih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICB7CisrCSAg ICBkc2EtPmc9aGV4MmJuKHZhbHVlKTsKKysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4i LG5tb2QpOworKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOwor KwkgICAgcGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIG49aGV4 MmJpbih2YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIsbXNnLG4pOworKwkgICAgfQorKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikpCisrCSAgICBzaWctPnI9aGV4MmJu KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKKysJICAgIHsKKysJICAg IEVWUF9NRF9DVFggbWN0eDsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgdW5zaWduZWQgY2hh ciBzaWdidWZbNjBdOworKwkgICAgdW5zaWduZWQgaW50IHNsZW47CisrCSAgICBpbnQgcjsKKysJ ICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNB OworKwkgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsK KysJCisrCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCSAgICBwYm4oIlIiLHNpZy0+cik7 CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7CisrCisrCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2Vu Y29kZShzaWdidWYsIHNpZyk7CisrCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2Rz czEoKSwgTlVMTCk7CisrCSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkg ICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOworKwkgICAg RVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysJCisrCSAgICBwcmludGYoIlJlc3VsdCA9ICVj XG4iLCByID09IDEgPyAnUCcgOiAnRicpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAg ICB9CisrCX0KKysgICAgfQorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAg ICB7CisrICAgIGlmKGFyZ2MgIT0gMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1l fHBxZ3xwcWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKKysJZXhpdCgx KTsKKysJfQorKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJv cnMoKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikp CisrCXByaW1lcygpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCisrCXBx ZygpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCisrCXBxZ3Zlcigp OworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQorKwlrZXlwYWlyKCk7 CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKKysJa2V5dmVyKCk7Cisr ICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKKysJc2lnZ2VuKCk7CisrICAg IGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkKKysJc2lndmVyKCk7CisrICAgIGVs c2UKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3Zb MV0pOworKwlleGl0KDEpOworKwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZ2NtdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2djbXRlc3QuYwor LS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMuZmlwcwky MDEyLTA0LTIwIDA5OjA3OjA2LjI1NDc4NTQ4NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2NhdnMvZmlwc19nY210ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTQ3ODU0 ODQgKzAyMDAKK0BAIC0wLDAgKzEsNTcxIEBACisrLyogZmlwcy9hZXMvZmlwc19nY210ZXN0LmMg Ki8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3Jn KSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNT TC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqLworKworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrI2luY2x1 ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7 CisrICAgIHByaW50ZigiTm8gRklQUyBHQ00gc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsK Kyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3Rh dGljIHZvaWQgZ2NtdGVzdChGSUxFICppbiwgRklMRSAqb3V0LCBpbnQgZW5jcnlwdCkKKysJewor KwljaGFyIGJ1ZlsyMDQ4XTsKKysJY2hhciBsYnVmWzIwNDhdOworKwljaGFyICprZXl3b3JkLCAq dmFsdWU7CisrCWludCBrZXlsZW4gPSAtMSwgaXZsZW4gPSAtMSwgYWFkbGVuID0gLTEsIHRhZ2xl biA9IC0xLCBwdGxlbiA9IC0xOworKwlpbnQgcnY7CisrCWxvbmcgbDsKKysJdW5zaWduZWQgY2hh ciAqa2V5ID0gTlVMTCwgKml2ID0gTlVMTCwgKmFhZCA9IE5VTEwsICp0YWcgPSBOVUxMOworKwl1 bnNpZ25lZCBjaGFyICpjdCA9IE5VTEwsICpwdCA9IE5VTEw7CisrCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKKysJY29uc3QgRVZQX0NJUEhFUiAqZ2NtID0gTlVMTDsKKysJRklQU19jaXBoZXJfY3R4X2lu aXQoJmN0eCk7CisrCisrCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxMKQor KwkJeworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2 YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250aW51ZTsKKysJCWlmKCFzdHJjbXAoa2V5d29yZCwi W0tleWxlbiIpKQorKwkJCXsKKysJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoa2V5 bGVuID09IDEyOCkKKysJCQkJZ2NtID0gRVZQX2Flc18xMjhfZ2NtKCk7CisrCQkJZWxzZSBpZiAo a2V5bGVuID09IDE5MikKKysJCQkJZ2NtID0gRVZQX2Flc18xOTJfZ2NtKCk7CisrCQkJZWxzZSBp ZiAoa2V5bGVuID09IDI1NikKKysJCQkJZ2NtID0gRVZQX2Flc18yNTZfZ2NtKCk7CisrCQkJZWxz ZSAKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVuc3VwcG9ydGVkIGtleWxlbiAlZFxu IiwKKysJCQkJCQkJa2V5bGVuKTsKKysJCQkJfQorKwkJCWtleWxlbiA+Pj0gMzsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbSVZsZW4iKSkKKysJCQlpdmxlbiA9IGF0b2ko dmFsdWUpID4+IDM7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJbQUFEbGVuIikpCisr CQkJYWFkbGVuID0gYXRvaSh2YWx1ZSkgPj4gMzsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIltUYWdsZW4iKSkKKysJCQl0YWdsZW4gPSBhdG9pKHZhbHVlKSA+PiAzOworKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiW1BUbGVuIikpCisrCQkJcHRsZW4gPSBhdG9pKHZhbHVlKSA+ PiAzOworKwkJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkJCXsKKysJCQlrZXkg PSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBrZXlsZW4pCisrCQkJCXsKKysJ CQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3RlbnQgS2V5IGxlbmd0aFxuIik7CisrCQkJCWV4 aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiSVYiKSkK KysJCQl7CisrCQkJaXYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSBpdmxl bikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBJViBsZW5ndGhc biIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIlBUIikpCisrCQkJeworKwkJCXB0ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJ aWYgKGwgIT0gcHRsZW4pCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNvbnNpc3Rl bnQgUFQgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJDVCIpKQorKwkJCXsKKysJCQljdCA9IGhleDJiaW5fbSh2YWx1 ZSwgJmwpOworKwkJCWlmIChsICE9IHB0bGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJy LCAiSW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJ CQl9CisrCQllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiQUFEIikpCisrCQkJeworKwkJCWFhZCA9 IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChsICE9IGFhZGxlbikKKysJCQkJeworKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBBQUQgbGVuZ3RoXG4iKTsKKysJCQkJZXhp dCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJUYWciKSkK KysJCQl7CisrCQkJdGFnID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgIT0gdGFn bGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IFRhZyBsZW5n dGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJaWYgKGVuY3J5cHQgJiYg cHQgJiYgYWFkICYmIChpdiB8fCBlbmNyeXB0PT0xKSkKKysJCQl7CisrCQkJdGFnID0gT1BFTlNT TF9tYWxsb2ModGFnbGVuKTsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBO VUxMLCAxKTsKKysJCQkvKiBSZWxheCBGSVBTIGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCisr CQkJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQ U19BTExPVyk7CisrCQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NF VF9JVkxFTiwgaXZsZW4sIDApOworKwkJCWlmIChlbmNyeXB0ID09IDEpCisrCQkJCXsKKysJCQkJ c3RhdGljIHVuc2lnbmVkIGNoYXIgaXZfZml4ZWRbNF0gPSB7MSwyLDMsNH07CisrCQkJCWlmICgh aXYpCisrCQkJCQlpdiA9IE9QRU5TU0xfbWFsbG9jKGl2bGVuKTsKKysJCQkJRklQU19jaXBoZXJp bml0KCZjdHgsIE5VTEwsIGtleSwgTlVMTCwgMSk7CisrCQkJCUZJUFNfY2lwaGVyX2N0eF9jdHJs KCZjdHgsCisrCQkJCQkJRVZQX0NUUkxfR0NNX1NFVF9JVl9GSVhFRCwKKysJCQkJCQk0LCBpdl9m aXhlZCk7CisrCQkJCWlmICghRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwKKysJCQkJCUVWUF9D VFJMX0dDTV9JVl9HRU4sIDAsIGl2KSkKKysJCQkJCXsKKysJCQkJCWZwcmludGYoc3RkZXJyLCAi SVYgZ2VuIGVycm9yXG4iKTsKKysJCQkJCWV4aXQoMSk7CisrCQkJCQl9CisrCQkJCU91dHB1dFZh bHVlKCJJViIsIGl2LCBpdmxlbiwgb3V0LCAwKTsKKysJCQkJfQorKwkJCWVsc2UKKysJCQkJRklQ U19jaXBoZXJpbml0KCZjdHgsIE5VTEwsIGtleSwgaXYsIDEpOworKworKworKwkJCWlmIChhYWRs ZW4pCisrCQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsKKysJCQlpZiAo cHRsZW4pCisrCQkJCXsKKysJCQkJY3QgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7CisrCQkJCXJ2 ID0gRklQU19jaXBoZXIoJmN0eCwgY3QsIHB0LCBwdGxlbik7CisrCQkJCX0KKysJCQlGSVBTX2Np cGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKTsKKysJCQlGSVBTX2NpcGhlcl9jdHhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywKKysJCQkJCQkJCXRhZ2xlbiwgdGFnKTsJCisrCQkJT3V0 cHV0VmFsdWUoIkNUIiwgY3QsIHB0bGVuLCBvdXQsIDApOworKwkJCU91dHB1dFZhbHVlKCJUYWci LCB0YWcsIHRhZ2xlbiwgb3V0LCAwKTsKKysJCQlpZiAoaXYpCisrCQkJCU9QRU5TU0xfZnJlZShp dik7CisrCQkJaWYgKGFhZCkKKysJCQkJT1BFTlNTTF9mcmVlKGFhZCk7CisrCQkJaWYgKGN0KQor KwkJCQlPUEVOU1NMX2ZyZWUoY3QpOworKwkJCWlmIChwdCkKKysJCQkJT1BFTlNTTF9mcmVlKHB0 KTsKKysJCQlpZiAoa2V5KQorKwkJCQlPUEVOU1NMX2ZyZWUoa2V5KTsKKysJCQlpZiAodGFnKQor KwkJCQlPUEVOU1NMX2ZyZWUodGFnKTsKKysJCQlpdiA9IGFhZCA9IGN0ID0gcHQgPSBrZXkgPSB0 YWcgPSBOVUxMOworKwkJCX0JCisrCQlpZiAoIWVuY3J5cHQgJiYgdGFnKQorKwkJCXsKKysJCQlG SVBTX2NpcGhlcmluaXQoJmN0eCwgZ2NtLCBOVUxMLCBOVUxMLCAwKTsKKysJCQkvKiBSZWxheCBG SVBTIGNvbnN0cmFpbnRzIGZvciB0ZXN0aW5nICovCisrCQkJTV9FVlBfQ0lQSEVSX0NUWF9zZXRf ZmxhZ3MoJmN0eCwgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyk7CisrCQkJRklQU19jaXBo ZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwgaXZsZW4sIDApOworKwkJ CUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBrZXksIGl2LCAwKTsKKysJCQlGSVBTX2NpcGhl cl9jdHhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX1RBRywgdGFnbGVuLCB0YWcpOworKwkJ CWlmIChhYWRsZW4pCisrCQkJCUZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIGFhZCwgYWFkbGVuKTsK KysJCQlpZiAocHRsZW4pCisrCQkJCXsKKysJCQkJcHQgPSBPUEVOU1NMX21hbGxvYyhwdGxlbik7 CisrCQkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgcHQsIGN0LCBwdGxlbik7CisrCQkJCX0KKysJ CQlydiA9IEZJUFNfY2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApOworKwkJCWlmIChydiA8IDAp CisrCQkJCWZwcmludGYob3V0LCAiRkFJTCIgUkVTUF9FT0wpOworKwkJCWVsc2UKKysJCQkJT3V0 cHV0VmFsdWUoIlBUIiwgcHQsIHB0bGVuLCBvdXQsIDApOworKwkJCWlmIChpdikKKysJCQkJT1BF TlNTTF9mcmVlKGl2KTsKKysJCQlpZiAoYWFkKQorKwkJCQlPUEVOU1NMX2ZyZWUoYWFkKTsKKysJ CQlpZiAoY3QpCisrCQkJCU9QRU5TU0xfZnJlZShjdCk7CisrCQkJaWYgKHB0KQorKwkJCQlPUEVO U1NMX2ZyZWUocHQpOworKwkJCWlmIChrZXkpCisrCQkJCU9QRU5TU0xfZnJlZShrZXkpOworKwkJ CWlmICh0YWcpCisrCQkJCU9QRU5TU0xfZnJlZSh0YWcpOworKwkJCWl2ID0gYWFkID0gY3QgPSBw dCA9IGtleSA9IHRhZyA9IE5VTEw7CisrCQkJfQorKwkJfQorKwlGSVBTX2NpcGhlcl9jdHhfY2xl YW51cCgmY3R4KTsJCisrCX0KKysKKytzdGF0aWMgdm9pZCB4dHN0ZXN0KEZJTEUgKmluLCBGSUxF ICpvdXQpCisrCXsKKysJY2hhciBidWZbMjA0ODAwXTsKKysJY2hhciBsYnVmWzIwNDgwMF07Cisr CWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJaW50IGlubGVuID0gMDsKKysJaW50IGVuY3J5cHQg PSAwOworKwlsb25nIGw7CisrCXVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEwsICppdiA9IE5VTEw7 CisrCXVuc2lnbmVkIGNoYXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7CisrCUVWUF9D SVBIRVJfQ1RYIGN0eDsKKysJY29uc3QgRVZQX0NJUEhFUiAqeHRzID0gTlVMTDsKKysJRklQU19j aXBoZXJfY3R4X2luaXQoJmN0eCk7CisrCisrCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGlu KSAhPSBOVUxMKQorKwkJeworKwkJZnB1dHMoYnVmLG91dCk7CisrCQlpZiAoYnVmWzBdID09ICdb JyAmJiBzdHJsZW4oYnVmKSA+PSA5KQorKwkJCXsKKysJCQlpZighc3RybmNtcChidWYsIltFTkNS WVBUXSIsIDkpKQorKwkJCQllbmNyeXB0ID0gMTsKKysJCQllbHNlIGlmKCFzdHJuY21wKGJ1Ziwi W0RFQ1JZUFRdIiwgOSkpCisrCQkJCWVuY3J5cHQgPSAwOworKwkJCX0KKysJCWlmICAoIXBhcnNl X2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCQljb250aW51ZTsKKysJCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJCQl7CisrCQkJa2V5ID0gaGV4MmJpbl9t KHZhbHVlLCAmbCk7CisrCQkJaWYgKGwgPT0gMzIpCisrCQkJCXh0cyA9IEVWUF9hZXNfMTI4X3h0 cygpOworKwkJCWVsc2UgaWYgKGwgPT0gNjQpCisrCQkJCXh0cyA9IEVWUF9hZXNfMjU2X3h0cygp OworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBL ZXkgbGVuZ3RoXG4iKTsKKysJCQkJZXhpdCgxKTsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJpIikpCisrCQkJeworKwkJCWl2ID0gaGV4MmJpbl9tKHZhbHVlLCAm bCk7CisrCQkJaWYgKGwgIT0gMTYpCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsICJJbmNv bnNpc3RlbnQgaSBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJ ZWxzZSBpZihlbmNyeXB0ICYmICFzdHJjbXAoa2V5d29yZCwiUFQiKSkKKysJCQl7CisrCQkJaW5i dWYgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpbmxlbiA9IGw7CisrCQkJfQorKwkJZWxz ZSBpZighZW5jcnlwdCAmJiAhc3RyY21wKGtleXdvcmQsIkNUIikpCisrCQkJeworKwkJCWluYnVm ID0gaGV4MmJpbl9tKHZhbHVlLCAmbCk7CisrCQkJaW5sZW4gPSBsOworKwkJCX0KKysJCWlmIChp bmJ1ZikKKysJCQl7CisrCQkJRklQU19jaXBoZXJpbml0KCZjdHgsIHh0cywga2V5LCBpdiwgZW5j cnlwdCk7CisrCQkJb3V0YnVmID0gT1BFTlNTTF9tYWxsb2MoaW5sZW4pOworKwkJCUZJUFNfY2lw aGVyKCZjdHgsIG91dGJ1ZiwgaW5idWYsIGlubGVuKTsKKysJCQlPdXRwdXRWYWx1ZShlbmNyeXB0 ID8gIkNUIjoiUFQiLCBvdXRidWYsIGlubGVuLCBvdXQsIDApOworKwkJCU9QRU5TU0xfZnJlZShp bmJ1Zik7CisrCQkJT1BFTlNTTF9mcmVlKG91dGJ1Zik7CisrCQkJT1BFTlNTTF9mcmVlKGtleSk7 CisrCQkJT1BFTlNTTF9mcmVlKGl2KTsKKysJCQlpdiA9IGtleSA9IGluYnVmID0gb3V0YnVmID0g TlVMTDsKKysJCQl9CQorKwkJfQorKwlGSVBTX2NpcGhlcl9jdHhfY2xlYW51cCgmY3R4KTsJCisr CX0KKysKKytzdGF0aWMgdm9pZCBjY210ZXN0KEZJTEUgKmluLCBGSUxFICpvdXQpCisrCXsKKysJ Y2hhciBidWZbMjAwMDQ4XTsKKysJY2hhciBsYnVmWzIwMDA0OF07CisrCWNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysJbG9uZyBsOworKwl1bnNpZ25lZCBjaGFyICpLZXkgPSBOVUxMLCAqTm9uY2Ug PSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpBZGF0YSA9IE5VTEwsICpQYXlsb2FkID0gTlVMTDsK KysJdW5zaWduZWQgY2hhciAqQ1QgPSBOVUxMOworKwlpbnQgUGxlbiA9IC0xLCBObGVuID0gLTEs IFRsZW4gPSAtMSwgQWxlbiA9IC0xOworKwlpbnQgZGVjciA9IDA7CisrCUVWUF9DSVBIRVJfQ1RY IGN0eDsKKysJY29uc3QgRVZQX0NJUEhFUiAqY2NtID0gTlVMTDsKKysJRklQU19jaXBoZXJfY3R4 X2luaXQoJmN0eCk7CisrCisrCXdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLGluKSAhPSBOVUxM KQorKwkJeworKwkJY2hhciAqcDsKKysJCWZwdXRzKGJ1ZixvdXQpOworKwkJcmVkbzoKKysJCWlm ICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJCWNvbnRpbnVl OworKworKwkJLyogSWYgc3Vycm91bmRlZCBieSBzcXVhcmUgYnJhY2tldHMgemFwIHRoZW0gKi8K KysJCWlmIChrZXl3b3JkWzBdID09ICdbJykKKysJCQl7CisrCQkJa2V5d29yZCsrOworKwkJCXAg PSBzdHJjaHIodmFsdWUsICddJyk7CisrCQkJaWYgKHApCisrCQkJCSpwID0gMDsKKysJCQl9Cisr CQkvKiBTZWUgaWYgd2UgaGF2ZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMK KysJCSAqIGlmIHNvIGNvcHkgcmVzdCBvZiBsaW5lIGJhY2sgdG8gYnVmZmVyIGFuZCByZWRvIGxh dGVyLgorKwkJICovCisrCQlwID0gc3RyY2hyKHZhbHVlLCAnLCcpOworKwkJaWYgKHApCisrCQkJ eworKwkJCSpwID0gMDsKKysJCQlzdHJjcHkoYnVmLCBwICsgMSk7CisrCQkJc3RyY2F0KGJ1Ziwg IlxuIik7CisrCQkJZGVjciA9IDE7CisrCQkJfQorKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwiUGxl biIpKQorKwkJCVBsZW4gPSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwiTmxlbiIpKQorKwkJCU5sZW4gPSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwiVGxlbiIpKQorKwkJCVRsZW4gPSBhdG9pKHZhbHVlKTsKKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwiQWxlbiIpKQorKwkJCUFsZW4gPSBhdG9pKHZhbHVlKTsKKysJCWlmIChw KQorKwkJCWdvdG8gcmVkbzsKKysJCWlmICghc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkJCXsK KysJCQlpZiAoS2V5KQorKwkJCQlPUEVOU1NMX2ZyZWUoS2V5KTsKKysJCQlLZXkgPSBoZXgyYmlu X20odmFsdWUsICZsKTsKKysJCQlpZiAobCA9PSAxNikKKysJCQkJY2NtID0gRVZQX2Flc18xMjhf Y2NtKCk7CisrCQkJZWxzZSBpZiAobCA9PSAyNCkKKysJCQkJY2NtID0gRVZQX2Flc18xOTJfY2Nt KCk7CisrCQkJZWxzZSBpZiAobCA9PSAzMikKKysJCQkJY2NtID0gRVZQX2Flc18yNTZfY2NtKCk7 CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IEtl eSBsZW5ndGhcbiIpOworKwkJCQlleGl0KDEpOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCJOb25jZSIpKQorKwkJCXsKKysJCQlpZiAoTm9uY2UpCisrCQkJCU9Q RU5TU0xfZnJlZShOb25jZSk7CisrCQkJTm9uY2UgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJ CQlpZiAobCAhPSBObGVuKQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0 ZW50IG5vbmNlIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsIlBheWxvYWQiKSAmJiAhZGVjcikKKysJCQl7CisrCQkJ UGF5bG9hZCA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlmIChQbGVuICYmIGwgIT0gUGxl bikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29uc2lzdGVudCBQYXlsb2FkIGxl bmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsIkFkYXRhIikpCisrCQkJeworKwkJCWlmIChBZGF0YSkKKysJCQkJT1BFTlNT TF9mcmVlKEFkYXRhKTsKKysJCQlBZGF0YSA9IGhleDJiaW5fbSh2YWx1ZSwgJmwpOworKwkJCWlm IChBbGVuICYmIGwgIT0gQWxlbikKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkluY29u c2lzdGVudCBQYXlsb2FkIGxlbmd0aFxuIik7CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9 CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsIkNUIikgJiYgZGVjcikKKysJCQl7CisrCQkJ Q1QgPSBoZXgyYmluX20odmFsdWUsICZsKTsKKysJCQlpZiAobCAhPSAoUGxlbiArIFRsZW4pKQor KwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiSW5jb25zaXN0ZW50IENUIGxlbmd0aFxuIik7 CisrCQkJCWV4aXQoMSk7CisrCQkJCX0KKysJCQl9CisrCQlpZiAoUGF5bG9hZCkKKysJCQl7Cisr CQkJRklQU19jaXBoZXJpbml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwgMSk7CisrCQkJRklQU19j aXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7Cisr CQkJRklQU19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIFRsZW4s IDApOworKwkJCUZJUFNfY2lwaGVyaW5pdCgmY3R4LCBOVUxMLCBLZXksIE5vbmNlLCAxKTsKKysK KysJCQlGSVBTX2NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBQbGVuKTsKKysJCQlGSVBTX2NpcGhl cigmY3R4LCBOVUxMLCBBZGF0YSwgQWxlbik7CisrCQkJQ1QgPSBPUEVOU1NMX21hbGxvYyhQbGVu ICsgVGxlbik7CisrCQkJRklQU19jaXBoZXIoJmN0eCwgQ1QsIFBheWxvYWQsIFBsZW4pOworKwkJ CUZJUFNfY2lwaGVyX2N0eF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFHLCBUbGVuLAor KwkJCQkJCUNUICsgUGxlbik7CisrCQkJT3V0cHV0VmFsdWUoIkNUIiwgQ1QsIFBsZW4gKyBUbGVu LCBvdXQsIDApOworKwkJCU9QRU5TU0xfZnJlZShDVCk7CisrCQkJT1BFTlNTTF9mcmVlKFBheWxv YWQpOworKwkJCUNUID0gUGF5bG9hZCA9IE5VTEw7CisrCQkJfQorKwkJaWYgKENUKQorKwkJCXsK KysJCQlpbnQgcnY7CisrCQkJaW50IGxlbiA9IFBsZW4gPT0gMCA/IDE6IFBsZW47CisrCQkJRklQ U19jaXBoZXJpbml0KCZjdHgsIGNjbSwgTlVMTCwgTlVMTCwgMCk7CisrCQkJRklQU19jaXBoZXJf Y3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwgTmxlbiwgMCk7CisrCQkJRklQ U19jaXBoZXJfY3R4X2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsCisrCQkJCQkJVGxl biwgQ1QgKyBQbGVuKTsKKysJCQlGSVBTX2NpcGhlcmluaXQoJmN0eCwgTlVMTCwgS2V5LCBOb25j ZSwgMCk7CisrCQkJRklQU19jaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgUGxlbik7CisrCQkJRklQ U19jaXBoZXIoJmN0eCwgTlVMTCwgQWRhdGEsIEFsZW4pOworKwkJCVBheWxvYWQgPSBPUEVOU1NM X21hbGxvYyhsZW4pOworKwkJCXJ2ID0gRklQU19jaXBoZXIoJmN0eCwgUGF5bG9hZCwgQ1QsIFBs ZW4pOworKwkJCWlmIChydiA+PSAwKQorKwkJCQl7CisrCQkJCWlmIChydiA9PSAwKQorKwkJCQkJ UGF5bG9hZFswXSA9IDA7CisrCQkJCWZwdXRzKCJSZXN1bHQgPSBQYXNzIiBSRVNQX0VPTCwgb3V0 KTsKKysJCQkJT3V0cHV0VmFsdWUoIlBheWxvYWQiLCBQYXlsb2FkLCBsZW4sIG91dCwgMCk7Cisr CQkJCX0KKysJCQllbHNlCisrCQkJCWZwdXRzKCJSZXN1bHQgPSBGYWlsIiBSRVNQX0VPTCwgb3V0 KTsKKysJCQlPUEVOU1NMX2ZyZWUoQ1QpOworKwkJCU9QRU5TU0xfZnJlZShQYXlsb2FkKTsKKysJ CQlDVCA9IFBheWxvYWQgPSBOVUxMOworKwkJCX0KKysJCX0KKysJaWYgKEtleSkKKysJCU9QRU5T U0xfZnJlZShLZXkpOworKwlpZiAoTm9uY2UpCisrCQlPUEVOU1NMX2ZyZWUoTm9uY2UpOworKwlp ZiAoQWRhdGEpCisrCQlPUEVOU1NMX2ZyZWUoQWRhdGEpOworKwlGSVBTX2NpcGhlcl9jdHhfY2xl YW51cCgmY3R4KTsKKysJfQorKworKyNpZmRlZiBGSVBTX0FMR1ZTCisraW50IGZpcHNfZ2NtdGVz dF9tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysjZWxzZQorK2ludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKKysjZW5kaWYKKysJeworKwlpbnQgZW5jcnlwdDsKKysJaW50IHh0cyA9 IDAsIGNjbSA9IDA7CisrCUZJTEUgKmluLCAqb3V0OworKwlpZiAoYXJnYyA9PSA0KQorKwkJewor KwkJaW4gPSBmb3Blbihhcmd2WzJdLCAiciIpOworKwkJaWYgKCFpbikKKysJCQl7CisrCQkJZnBy aW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGlucHV0IGZpbGVcbiIpOworKwkJCWV4aXQoMSk7 CisrCQkJfQorKwkJb3V0ID0gZm9wZW4oYXJndlszXSwgInciKTsKKysJCWlmICghb3V0KQorKwkJ CXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGVcbiIpOwor KwkJCWV4aXQoMSk7CisrCQkJfQorKwkJfQorKwllbHNlIGlmIChhcmdjID09IDIpCisrCQl7Cisr CQlpbiA9IHN0ZGluOworKwkJb3V0ID0gc3Rkb3V0OworKwkJfQorKwllbHNlCisrCQl7CisrCQlm cHJpbnRmKHN0ZGVyciwiJXMgWy1lbmNyeXB0fC1kZWNyeXB0XVxuIixhcmd2WzBdKTsKKysJCWV4 aXQoMSk7CisrCQl9CisrCWZpcHNfYWxndGVzdF9pbml0KCk7CisrCWlmKCFzdHJjbXAoYXJndlsx XSwiLWVuY3J5cHQiKSkKKysJCWVuY3J5cHQgPSAxOworKwllbHNlIGlmKCFzdHJjbXAoYXJndlsx XSwiLWVuY3J5cHRJVmV4dCIpKQorKwkJZW5jcnlwdCA9IDI7CisrCWVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCItZGVjcnlwdCIpKQorKwkJZW5jcnlwdCA9IDA7CisrCWVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCItY2NtIikpCisrCQljY20gPSAxOworKwllbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwi LXh0cyIpKQorKwkJeHRzID0gMTsKKysJZWxzZQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsIkRv bid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCisr CWlmIChjY20pCisrCQljY210ZXN0KGluLCBvdXQpOworKwllbHNlIGlmICh4dHMpCisrCQl4dHN0 ZXN0KGluLCBvdXQpOworKwllbHNlCisrCQlnY210ZXN0KGluLCBvdXQsIGVuY3J5cHQpOworKwor KwlpZiAoYXJnYyA9PSA0KQorKwkJeworKwkJZmNsb3NlKGluKTsKKysJCWZjbG9zZShvdXQpOwor KwkJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2Ny eXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1NTc4NTUwNSAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCTIw MTItMDQtMjAgMDk6MDc6MDYuMjU1Nzg1NTA1ICswMjAwCitAQCAtMCwwICsxLDIzMCBAQAorKy8q CisrICogQ3J1ZGUgdGVzdCBkcml2ZXIgZm9yIHByb2Nlc3NpbmcgdGhlIFZTVCBhbmQgTUNUIHRl c3R2ZWN0b3IgZmlsZXMKKysgKiBnZW5lcmF0ZWQgYnkgdGhlIENNVlAgUk5HVlMgcHJvZHVjdC4K KysgKgorKyAqIE5vdGUgdGhlIGlucHV0IGZpbGVzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBfdmVy eV8gc3BlY2lmaWMgZm9ybWF0CisrICogYXMgZGVzY3JpYmVkIGluIHRoZSBOSVNUIGRvY3VtZW50 ICJUaGUgUmFuZG9tIE51bWJlciBHZW5lcmF0b3IKKysgKiBWYWxpZGF0aW9uIFN5c3RlbSAoUk5H VlMpIiwgTWF5IDI1LCAyMDA0LgorKyAqCisrICovCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgor KworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8g RklQUyBSTkcgc3VwcG9ydFxuIik7CisrICAgIHJldHVybiAwOworK30KKysjZWxzZQorKworKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrdm9pZCB2c3QoKQorKyAg ICB7CisrICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIg KnYgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7CisrICAgIHVuc2lnbmVk IGNoYXIgcmV0WzE2XTsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBsb25nIGksIGtleWxlbjsKKysK KysgICAga2V5bGVuID0gMDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3Rk aW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1 ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDE2OworKwllbHNlIGlmKCFzdHJu Y21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDI0OworKwllbHNlIGlm KCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDMyOworKwlp ZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVl OworKwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkgICAgeworKwkgICAga2V5PWhleDJi aW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSBrZXlsZW4pCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsK KysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRU IikpCisrCSAgICB7CisrCSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkg IT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsK KysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYi KSkKKysJICAgIHsKKysJICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9 IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJ CXJldHVybjsKKysJCX0KKysKKysJICAgIGlmICgha2V5IHx8ICFkdCkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwor KwkgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOworKwkgICAgRklQU194OTMxX3Nl ZWQodiwxNik7CisrCSAgICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKKysJICAgIGlmIChGSVBTX3g5 MzFfYnl0ZXMocmV0LDE2KSA8PSAwKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBn ZXR0aW5nIFBSTkcgdmFsdWVcbiIpOworKwkgICAgICAgIHJldHVybjsKKysJICAgICAgICB9Cisr CisrCSAgICBwdigiUiIscmV0LDE2KTsKKysJICAgIE9QRU5TU0xfZnJlZShrZXkpOworKwkgICAg a2V5ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZShkdCk7CisrCSAgICBkdCA9IE5VTEw7Cisr CSAgICBPUEVOU1NMX2ZyZWUodik7CisrCSAgICB2ID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAg ICB9CisrCisrdm9pZCBtY3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5V TEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICpk dCA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsKKysgICAgY2hhciBidWZbMTAy NF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwor KyAgICBsb25nIGksIGtleWxlbjsKKysgICAgaW50IGo7CisrCisrICAgIGtleWxlbiA9IDA7Cisr CisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7Cisr CWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAx MykpCisrCQlrZXlsZW4gPSAxNjsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtl eV0iLCAxMykpCisrCQlrZXlsZW4gPSAyNDsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMg MjU2LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAzMjsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3 b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQljb250aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3 b3JkLCJLZXkiKSkKKysJICAgIHsKKysJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOworKwkg ICAgaWYgKGkgIT0ga2V5bGVuKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtl eSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7CisrCQlyZXR1cm47CisrCQl9Cisr CSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQorKwkgICAgeworKwkgICAg ZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9Cisr CSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCisrCSAgICB7CisrCSAgICB2 PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisr CSAgICBpZiAoIWtleSB8fCAhZHQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcg a2V5IG9yIERUXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJICAgIEZJUFNfeDkzMV9zZXRf a2V5KGtleSwga2V5bGVuKTsKKysJICAgIEZJUFNfeDkzMV9zZWVkKHYsMTYpOworKwkgICAgZm9y IChpID0gMDsgaSA8IDEwMDAwOyBpKyspCisrCQl7CisrCQkgICAgRklQU194OTMxX3NldF9kdChk dCk7CisrCQkgICAgaWYgKEZJUFNfeDkzMV9ieXRlcyhyZXQsMTYpIDw9IDApCisrCQkJeworKwkJ CWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKKysJCSAgICAg ICAgcmV0dXJuOworKwkJICAgICAgICB9CisrCQkgICAgLyogSW5jcmVtZW50IERUICovCisrCQkg ICAgZm9yIChqID0gMTU7IGogPj0gMDsgai0tKQorKwkJCXsKKysJCQlkdFtqXSsrOworKwkJCWlm IChkdFtqXSkKKysJCQkJYnJlYWs7CisrCQkJfQorKwkJfQorKworKwkgICAgcHYoIlIiLHJldCwx Nik7CisrCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKKysJICAgIGtleSA9IE5VTEw7CisrCSAgICBP UEVOU1NMX2ZyZWUoZHQpOworKwkgICAgZHQgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKHYp OworKwkgICAgdiA9IE5VTEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworK2ludCBtYWluKGlu dCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGlmKGFyZ2MgIT0gMikKKysJeworKwlm cHJpbnRmKHN0ZGVyciwiJXMgW21jdHx2c3RdXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9 CisrICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOwor KwlleGl0KDEpOworKwl9CisrICAgIEZJUFNfeDkzMV9yZXNldCgpOworKyAgICBpZiAoIUZJUFNf eDkzMV90ZXN0X21vZGUoKSkKKysJeworKwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNldHRpbmcg UFJORyB0ZXN0IG1vZGVcbiIpOworKwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJ fQorKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sIm1jdCIpKQorKwltY3QoKTsKKysgICAgZWxzZSBp Zighc3RyY21wKGFyZ3ZbMV0sInZzdCIpKQorKwl2c3QoKTsKKysgICAgZWxzZQorKwl7CisrCWZw cmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7CisrCWV4aXQo MSk7CisrCX0KKysKKysgICAgcmV0dXJuIDA7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMKKy0tLSBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzCTIwMTItMDQtMjAgMDk6 MDc6MDYuMjU1Nzg1NTA1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3JzYWd0ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTU3ODU1MDUgKzAyMDAKK0BA IC0wLDAgKzEsMzkwIEBACisrLyogZmlwc19yc2FndGVzdC5jICovCisrLyogV3JpdHRlbiBieSBE ciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisr ICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDA1LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVk ZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlv Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Cisr CisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0 dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK2lu dCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKKytzdGF0aWMgaW50IHJzYV9wcmludGtl eTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwgQklH TlVNICpYcCwKKysJCUJJR05VTSAqZSk7Cisrc3RhdGljIGludCByc2FfcHJpbnRrZXkyKEZJTEUg Km91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIsIEJJR05VTSAqWHEp OworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9 IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNfbW9k ZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJ fQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBm b3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7 CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9y XG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdv dG8gZW5kOworKwkJfQorKworKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4pKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOwor KwkJZ290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJ aWYgKHJldCkKKysJCWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0 ZGluKSkKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJ ZmNsb3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9U RVNUX01BWExJTkVMRU4JMTAyNDAKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICpp bikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5 d29yZCwgKnZhbHVlOworKwlSU0EgKnJzYSA9IE5VTEw7CisrCUJJR05VTSAqWHAxID0gTlVMTCwg KlhwMiA9IE5VTEwsICpYcCA9IE5VTEw7CisrCUJJR05VTSAqWHExID0gTlVMTCwgKlhxMiA9IE5V TEwsICpYcSA9IE5VTEw7CisrCUJJR05VTSAqZSA9IE5VTEw7CisrCWludCByZXQgPSAwOworKwlp bnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFY TElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVO KTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisr CXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJewor KwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBs aW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBm b3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBu byA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8K KysJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVi dWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysK KysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAg PSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisr CQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICov CisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAn XG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJ aWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMSIpKQorKwkJCXsKKysJCQlpZiAoWHAxIHx8ICFkb19o ZXgyYm4oJlhwMSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAyIikpCisrCQkJeworKwkJCWlmIChYcDIgfHwgIWRv X2hleDJibigmWHAyLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcCIpKQorKwkJCXsKKysJCQlpZiAoWHAgfHwgIWRv X2hleDJibigmWHAsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQorKwkJCXsKKysJCQlpZiAoWHExIHx8ICFk b19oZXgyYm4oJlhxMSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikpCisrCQkJeworKwkJCWlmIChYcTIgfHwg IWRvX2hleDJibigmWHEyLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9Cisr CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcSIpKQorKwkJCXsKKysJCQlpZiAoWHEgfHwg IWRvX2hleDJibigmWHEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKGUgfHwgIWRv X2hleDJibigmZSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicDEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgInAyIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJwIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJxMSIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAicTIiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInEi KSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJ CQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImQiKSkKKysJCQljb250 aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJZnB1dHMob2xpbmVi dWYsIG91dCk7CisrCisrCQlpZiAoZSAmJiBYcDEgJiYgWHAyICYmIFhwKQorKwkJCXsKKysJCQly c2EgPSBGSVBTX3JzYV9uZXcoKTsKKysJCQlpZiAoIXJzYSkKKysJCQkJZ290byBlcnJvcjsKKysJ CQlpZiAoIXJzYV9wcmludGtleTEob3V0LCByc2EsIFhwMSwgWHAyLCBYcCwgZSkpCisrCQkJCWdv dG8gZXJyb3I7CisrCQkJQk5fZnJlZShYcDEpOworKwkJCVhwMSA9IE5VTEw7CisrCQkJQk5fZnJl ZShYcDIpOworKwkJCVhwMiA9IE5VTEw7CisrCQkJQk5fZnJlZShYcCk7CisrCQkJWHAgPSBOVUxM OworKwkJCUJOX2ZyZWUoZSk7CisrCQkJZSA9IE5VTEw7CisrCQkJfQorKworKwkJaWYgKHJzYSAm JiBYcTEgJiYgWHEyICYmIFhxKQorKwkJCXsKKysJCQlpZiAoIXJzYV9wcmludGtleTIob3V0LCBy c2EsIFhxMSwgWHEyLCBYcSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJlZShYcTEpOwor KwkJCVhxMSA9IE5VTEw7CisrCQkJQk5fZnJlZShYcTIpOworKwkJCVhxMiA9IE5VTEw7CisrCQkJ Qk5fZnJlZShYcSk7CisrCQkJWHEgPSBOVUxMOworKwkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysJ CQlyc2EgPSBOVUxMOworKwkJCX0KKysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6Cisr CisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5l YnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKworKwlpZiAoWHAxKQorKwkJQk5fZnJl ZShYcDEpOworKwlpZiAoWHAyKQorKwkJQk5fZnJlZShYcDIpOworKwlpZiAoWHApCisrCQlCTl9m cmVlKFhwKTsKKysJaWYgKFhxMSkKKysJCUJOX2ZyZWUoWHExKTsKKysJaWYgKFhxMSkKKysJCUJO X2ZyZWUoWHExKTsKKysJaWYgKFhxMikKKysJCUJOX2ZyZWUoWHEyKTsKKysJaWYgKFhxKQorKwkJ Qk5fZnJlZShYcSk7CisrCWlmIChlKQorKwkJQk5fZnJlZShlKTsKKysJaWYgKHJzYSkKKysJCUZJ UFNfcnNhX2ZyZWUocnNhKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6Cisr CisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVk XG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcnNh X3ByaW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcDEsIEJJR05VTSAq WHAyLCBCSUdOVU0gKlhwLAorKwkJQklHTlVNICplKQorKwl7CisrCWludCByZXQgPSAwOworKwlC SUdOVU0gKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKKysJcDEgPSBCTl9uZXcoKTsKKysJcDIgPSBC Tl9uZXcoKTsKKysJaWYgKCFwMSB8fCAhcDIpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIVJT QV9YOTMxX2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAxLCBYcDIsIFhwLAor KwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysKKysJ ZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQs ICJwMiIsIHAyKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwIiwgcnNhLT5wKTsKKysKKysJ cmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChwMSkKKysJCUJOX2ZyZWUocDEpOworKwlpZiAo cDIpCisrCQlCTl9mcmVlKHAyKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKworK3N0YXRpYyBp bnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEsIEJJ R05VTSAqWHEyLCBCSUdOVU0gKlhxKQorKwl7CisrCWludCByZXQgPSAwOworKwlCSUdOVU0gKnEx ID0gTlVMTCwgKnEyID0gTlVMTDsKKysJcTEgPSBCTl9uZXcoKTsKKysJcTIgPSBCTl9uZXcoKTsK KysJaWYgKCFxMSB8fCAhcTIpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIVJTQV9YOTMxX2Rl cml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwgTlVMTCwgTlVMTCwgTlVMTCwKKysJCQkJ CQlYcTEsIFhxMiwgWHEsIE5VTEwsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysKKysJZG9fYm5f cHJpbnRfbmFtZShvdXQsICJxMSIsIHExKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMiIs IHEyKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxIiwgcnNhLT5xKTsKKysJZG9fYm5fcHJp bnRfbmFtZShvdXQsICJuIiwgcnNhLT5uKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJkIiwg cnNhLT5kKTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChxMSkKKysJCUJOX2Zy ZWUocTEpOworKwlpZiAocTIpCisrCQlCTl9mcmVlKHEyKTsKKysKKysJcmV0dXJuIHJldDsKKysJ fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3JzYXN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf cnNhc3Rlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2Fz dGVzdC5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTY3ODU1MjYgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwkyMDEyLTA0LTIwIDA5 OjA3OjA2LjI1Njc4NTUyNiArMDIwMAorQEAgLTAsMCArMSwzNzAgQEAKKysvKiBmaXBzX3JzYXN0 ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5z c2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vu c2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5 cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0 c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGlt CisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBz dXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRl ICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAq aW4sIGludCBTYWx0bGVuKTsKKytzdGF0aWMgaW50IHJzYV9wcmludHNpZyhGSUxFICpvdXQsIFJT QSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcg TXNnbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAx LCBTYWx0bGVuID0gLTE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9f cHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKChhcmdjID4gMikg JiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSBhdG9p KGFyZ3ZbMl0pOworKwkJaWYgKFNhbHRsZW4gPCAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9 CisrCQlhcmdjIC09IDI7CisrCQlhcmd2ICs9IDI7CisrCQl9CisrCWVsc2UgaWYgKChhcmdjID4g MSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSAtMjsK KysJCWFyZ2MtLTsKKysJCWFyZ3YrKzsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWlu ID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYg KGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2 WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRB TCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysK KysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0 aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2Ff c3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IFJTQVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0K KysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0KQorKwkJZG9fcHJp bnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGlu KTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJ cmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0 MAorKworK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pCisr CXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxM OworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOworKwlsb25nIE1zZ2xlbiA9IC0xOworKwlp bnQga2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0gLTE7CisrCWludCByZXQgPSAwOworKwlp bnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFY TElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVO KTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisr CXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJewor KwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBs aW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBm b3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBu byA9IGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsKKysJCQlpZiAoZnB1dHMob2xpbmVi dWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysK KysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAg PSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisr CQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICov CisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdoaWxlICgqcCA9PSAn XG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJ LyogTG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBsZW5ndGggKi8KKysKKysJCWlmICghc3Ry Y21wKGtleXdvcmQsICJbbW9kIikpCisrCQkJeworKwkJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1 ZSkgLSAxOworKwkJCWlmICgqcCAhPSAnXScpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ KnAgPSAwOworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChrZXlsZW4gPCAwKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKKysJ CQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIy NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFs dWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJCQllbHNlIGlmICgh c3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7CisrCQkJ ZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTUx MigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwKKysJCQkJCSJGQVRB TDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJCXZhbHVlKTsKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsK KysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlmICghTXNnKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwor KworKwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdlZCwgZ2VuZXJhdGUgYW5kIG91dHB1dCBw dWJsaWMKKysJCSAqIGtleSBjb21wb25lbnRzIG9mIG5ldyBSU0EgcHJpdmF0ZSBrZXkuCisrCQkg Ki8KKysKKysJCWlmIChrZXlsZW4gIT0gY3VycmVudF9rZXlsZW4pCisrCQkJeworKwkJCUJJR05V TSAqYm5fZTsKKysJCQlpZiAocnNhKQorKwkJCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCQkJcnNh ID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJ Ym5fZSA9IEJOX25ldygpOworKwkJCWlmICghYm5fZSB8fCAhQk5fc2V0X3dvcmQoYm5fZSwgMHgx MDAxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlpZiAoIVJTQV9YOTMxX2dlbmVyYXRlX2tleV9l eChyc2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJl ZShibl9lKTsKKysJCQlmcHV0cygibiA9ICIsIG91dCk7CisrCQkJZG9fYm5fcHJpbnQob3V0LCBy c2EtPm4pOworKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQpOworKwkJCWRvX2JuX3ByaW50KG91dCwg cnNhLT5lKTsKKysJCQlmcHV0cygiXG4iLCBvdXQpOworKwkJCWN1cnJlbnRfa2V5bGVuID0ga2V5 bGVuOworKwkJCX0KKysKKysJCWlmIChNc2cgJiYgZGdzdCkKKysJCQl7CisrCQkJaWYgKCFyc2Ff cHJpbnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNnbGVuLAorKwkJCQkJCQkJU2FsdGxlbikp CisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVM TDsKKysJCQl9CisrCisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlpZiAo b2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJ CU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKHJzYSkKKysJCUZJUFNfcnNhX2ZyZWUocnNh KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysK KysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUg Km91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1z ZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNp Z25lZCBjaGFyICpzaWdidWYgPSBOVUxMOworKwlpbnQgaSwgc2lnbGVuOworKwkvKiBFVlBfUEtF WSBzdHJ1Y3R1cmUgKi8KKysJRVZQX1BLRVkgcGs7CisrCUVWUF9NRF9DVFggY3R4OworKwlway50 eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYTsKKysKKysJc2lnbGVuID0g UlNBX3NpemUocnNhKTsKKysJc2lnYnVmID0gT1BFTlNTTF9tYWxsb2Moc2lnbGVuKTsKKysJaWYg KCFzaWdidWYpCisrCQlnb3RvIGVycm9yOworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7Cisr CisrCWlmIChTYWx0bGVuID49IDApCisrCQl7CisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZj dHgsCisrCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAxNikpOworKwkJ fQorKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQorKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygm Y3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOworKwlpZiAoIUVWUF9TaWduSW5pdF9leCgm Y3R4LCBkZ3N0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1NpZ25VcGRhdGUo JmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBfU2lnbkZpbmFs KCZjdHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZzaWdsZW4sICZwaykpCisrCQlnb3RvIGVy cm9yOworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWZwdXRzKCJTID0gIiwg b3V0KTsKKysKKysJZm9yIChpID0gMDsgaSA8IHNpZ2xlbjsgaSsrKQorKwkJZnByaW50ZihvdXQs ICIlMDJYIiwgc2lnYnVmW2ldKTsKKysKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysKKysJcmV0ID0g MTsKKysKKysJZXJyb3I6CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMKKy0tLSBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIwMTItMDQtMjAg MDk6MDc6MDYuMjU2Nzg1NTI2ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JzYXZ0ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTY3ODU1MjYgKzAyMDAK K0BAIC0wLDAgKzEsMzc3IEBACisrLyogZmlwc19yc2F2dGVzdC5jICovCisrLyogV3JpdHRlbiBi eSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NM CisrICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3Jp dHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0 c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUg PGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKwor KyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVy bigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQg cnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IHNhbHRsZW4pOworK3N0YXRpYyBpbnQg cnNhX3ByaW50dmVyKEZJTEUgKm91dCwKKysJCUJJR05VTSAqbiwgQklHTlVNICplLAorKwkJY29u c3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKKysJ CXVuc2lnbmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pOworKworK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBO VUxMOworKworKwlpbnQgcmV0ID0gMTsKKysJaW50IFNhbHRsZW4gPSAtMTsKKysKKysJaWYoIUZJ UFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5k OworKwkJfQorKworKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3Zb MV0pKQorKwkJeworKwkJU2FsdGxlbiA9IGF0b2koYXJndlsyXSk7CisrCQlpZiAoU2FsdGxlbiA8 IDApCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5n dGhcbiIpOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCWFyZ2MgLT0gMjsKKysJCWFyZ3YgKz0g MjsKKysJCX0KKysJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3Zb MV0pKQorKwkJeworKwkJU2FsdGxlbiA9IC0yOworKwkJYXJnYy0tOworKwkJYXJndisrOworKwkJ fQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBm b3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7 CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9y XG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdv dG8gZW5kOworKwkJfQorKworKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQorKwkJ eworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FWVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJy b3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVu ZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYg KGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRv dXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVm aW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0 LCBGSUxFICppbiwgaW50IFNhbHRsZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVm LCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJY29uc3QgRVZQX01EICpkZ3N0 ID0gTlVMTDsKKysJQklHTlVNICpuID0gTlVMTCwgKmUgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFy ICpNc2cgPSBOVUxMLCAqUyA9IE5VTEw7CisrCWxvbmcgTXNnbGVuLCBTbGVuOworKwlpbnQgcmV0 ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJT QV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1Rf TUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVy cm9yOworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGlu KSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlr ZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJ CS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKwor KwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVz dCBjb3B5ICovCisrCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZw dXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsK KysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2Ug Ki8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsK KysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGlu ZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikq dmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJv bSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGls ZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0g MDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJuIikpCisrCQkJeworKwkJCWlmICghZG9f aGV4MmJuKCZuLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZl LHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJTSEFBbGciKSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJT SEExIikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMSgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFs dWUsICJTSEEyMjQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKKysJCQllbHNlIGlmICgh c3RyY21wKHZhbHVlLCAiU0hBMjU2IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7CisrCQkJ ZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTM4 NCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKKysJCQkJZGdzdCA9 IEVWUF9zaGE1MTIoKTsKKysJCQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsCisr CQkJCQkiRkFUQUw6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCisrCQkJCQkJCQl2 YWx1ZSk7CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1 ZSkgPSAnMCc7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlpZiAo IU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21w KGtleXdvcmQsICJTIikpCisrCQkJeworKwkJCWlmIChTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJ CQlTID0gaGV4MmJpbl9tKHZhbHVlLCAmU2xlbik7CisrCQkJaWYgKCFTKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIp KQorKwkJCWNvbnRpbnVlOworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlm cHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChuICYmIGUgJiYgTXNnICYmIFMgJiYgZGdz dCkKKysJCQl7CisrCQkJaWYgKCFyc2FfcHJpbnR2ZXIob3V0LCBuLCBlLCBkZ3N0LAorKwkJCQkJ TXNnLCBNc2dsZW4sIFMsIFNsZW4sIFNhbHRsZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9Q RU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7CisrCQkJT1BFTlNTTF9mcmVlKFMpOwor KwkJCVMgPSBOVUxMOworKwkJCX0KKysKKysJCX0KKysKKysKKysJcmV0ID0gMTsKKysKKysKKysJ ZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Cisr CWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAobikKKysJCUJO X2ZyZWUobik7CisrCWlmIChlKQorKwkJQk5fZnJlZShlKTsKKysKKysJcmV0dXJuIHJldDsKKysK KysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3Ig cHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQor KworK3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJTEUgKm91dCwKKysJCUJJR05VTSAqbiwgQklH TlVNICplLAorKwkJY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBs b25nIE1zZ2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4p CisrCXsKKysJaW50IHJldCA9IDAsIHI7CisrCS8qIFNldHVwIFJTQSBhbmQgRVZQX1BLRVkgc3Ry dWN0dXJlcyAqLworKwlSU0EgKnJzYV9wdWJrZXkgPSBOVUxMOworKwlFVlBfUEtFWSBwazsKKysJ RVZQX01EX0NUWCBjdHg7CisrCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisrCXJzYV9wdWJr ZXkgPSBGSVBTX3JzYV9uZXcoKTsKKysJaWYgKCFyc2FfcHVia2V5KQorKwkJZ290byBlcnJvcjsK KysJcnNhX3B1YmtleS0+biA9IEJOX2R1cChuKTsKKysJcnNhX3B1YmtleS0+ZSA9IEJOX2R1cChl KTsKKysJaWYgKCFyc2FfcHVia2V5LT5uIHx8ICFyc2FfcHVia2V5LT5lKQorKwkJZ290byBlcnJv cjsKKysJcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKKysJcGsucGtleS5yc2EgPSByc2FfcHVia2V5 OworKworKwlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVuID49IDApCisr CQl7CisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9GTEFH X1BBRF9QU1MgfCAoU2FsdGxlbiA8PCAxNikpOworKwkJfQorKwllbHNlIGlmIChTYWx0bGVuID09 IC0yKQorKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1g5MzEpOworKwlpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQorKwkJ Z290byBlcnJvcjsKKysJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkK KysJCWdvdG8gZXJyb3I7CisrCisrCXIgPSBFVlBfVmVyaWZ5RmluYWwoJmN0eCwgUywgU2xlbiwg JnBrKTsKKysKKysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAociA8IDAp CisrCQlnb3RvIGVycm9yOworKwlFUlJfY2xlYXJfZXJyb3IoKTsKKysKKysJaWYgKHIgPT0gMCkK KysJCWZwdXRzKCJSZXN1bHQgPSBGXG4iLCBvdXQpOworKwllbHNlCisrCQlmcHV0cygiUmVzdWx0 ID0gUFxuIiwgb3V0KTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChyc2FfcHVi a2V5KQorKwkJRklQU19yc2FfZnJlZShyc2FfcHVia2V5KTsKKysJaWYgKGJ1ZikKKysJCU9QRU5T U0xfZnJlZShidWYpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYworLS0tIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3 OjA2LjI1Nzc4NTU0NyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2NhdnMv Zmlwc19zaGF0ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTc3ODU1NDcgKzAyMDAKK0BAIC0w LDAgKzEsMzg4IEBACisrLyogZmlwc19zaGF0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBw cm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIw MDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Cisr ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysg KiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUu aD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZu ZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisr eworKyAgICBwcmludGYoIk5vIEZJUFMgU0hBWFhYIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4o MCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGlj IGludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCBwcmludF9k Z3N0KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywg aW50IE1zZ2xlbik7Cisrc3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQgKm1kLCBG SUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7CisrCisraW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91 dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKworKwlpZighRklQU19tb2RlX3NldCgxKSkK KysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlm IChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3Zb MV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQor KwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJ Z290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7Cisr CQl9CisrCisrCWlmICghZGdzdF90ZXN0KG91dCwgaW4pKQorKwkJeworKwkJZnByaW50ZihzdGRl cnIsICJGQVRBTCBkaWdlc3QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5k OworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisr CQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlm Y2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQp OworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBTSEFfVEVTVF9NQVhfQklU UwkxMDI0MDAKKysjZGVmaW5lIFNIQV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1RfTUFYX0JJ VFMgPj4gMykgKiAyKSArIDEwMCkKKysKKytpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAq aW4pCisrCXsKKysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCWNoYXIgKmxpbmVidWYsICpv bGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCXVuc2lnbmVkIGNo YXIgKk1zZyA9IE5VTEwsICpTZWVkID0gTlVMTDsKKysJbG9uZyBNc2dMZW4gPSAtMSwgTGVuID0g LTEsIFNlZWRMZW4gPSAtMTsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJ b2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1 ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVi dWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysKKysJd2hpbGUgKGZnZXRzKG9s aW5lYnVmLCBTSEFfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlz dHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBT a2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpr ZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJ CXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdp dGggWyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7Cisr CQkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJcSA9 IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7Cisr CQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1 ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1 ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNt cChrZXl3b3JkLCJbTCIpICYmICpwPT0nXScpCisrCQkJeworKwkJCXN3aXRjaCAoYXRvaSh2YWx1 ZSkpCisrCQkJCXsKKysJCQkJY2FzZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsKKysJCQkJ Y2FzZSAyODogbWQ9RVZQX3NoYTIyNCgpOyBicmVhazsKKysJCQkJY2FzZSAzMjogbWQ9RVZQX3No YTI1NigpOyBicmVhazsKKysJCQkJY2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVhazsKKysJ CQkJY2FzZSA2NDogbWQ9RVZQX3NoYTUxMigpOyBicmVhazsKKysJCQkJZGVmYXVsdDogZ290byBw YXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IkxlbiIpKQorKwkJCXsKKysJCQlpZiAoTGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCUxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChMZW4gPCAwKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCS8qIE9ubHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMgKi8KKysJ CQlpZiAoTGVuICYgMHg3KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChMZW4gPiBT SEFfVEVTVF9NQVhfQklUUykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNc2dMZW4gPSBM ZW4gPj4gMzsKKysJCQl9CisrCisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkK KysJCQl7CisrCQkJbG9uZyB0bXBsZW47CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJ CQkqKC0tdmFsdWUpID0gJzAnOworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmdG1wbGVuKTsKKysJCQlpZiAoIU1zZykKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJTZWVkIikpCisrCQkJeworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZh bHVlKSA9ICcwJzsKKysJCQlpZiAoU2VlZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlT ZWVkID0gaGV4MmJpbl9tKHZhbHVlLCAmU2VlZExlbik7CisrCQkJaWYgKCFTZWVkKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1E IikpCisrCQkJY29udGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysKKysJ CWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNnTGVuID49 IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dMZW4pKQor KwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9IE5VTEw7 CisrCQkJTXNnTGVuID0gLTE7CisrCQkJTGVuID0gLTE7CisrCQkJfQorKwkJZWxzZSBpZiAobWQg JiYgU2VlZCAmJiAoU2VlZExlbiA+IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X21vbnRlKG1k LCBvdXQsIFNlZWQsIFNlZWRMZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJl ZShTZWVkKTsKKysJCQlTZWVkID0gTlVMTDsKKysJCQlTZWVkTGVuID0gLTE7CisrCQkJfQorKwkK KysKKysJCX0KKysKKysKKysJcmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGlu ZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BF TlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAoTXNnKQorKwkJT1BFTlNTTF9mcmVlKE1zZyk7Cisr CWlmIChTZWVkKQorKwkJT1BFTlNTTF9mcmVlKFNlZWQpOworKworKwlyZXR1cm4gcmV0OworKwor KwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBw cm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9Cisr Cisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpvdXQsCisr CQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4pCisrCXsKKysJaW50IGksIG1kbGVuOwor Kwl1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07CisrCWlmICghRVZQX0RpZ2VzdChN c2csIE1zZ2xlbiwgbWQsICh1bnNpZ25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkpCisrCQl7 CisrCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKKysJCXJldHVy biAwOworKwkJfQorKwlmcHV0cygiTUQgPSAiLCBvdXQpOworKwlmb3IgKGkgPSAwOyBpIDwgbWRs ZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAyeCIsIG1kW2ldKTsKKysJZnB1dHMoIlxuIiwg b3V0KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0 IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVk TGVuKQorKwl7CisrCXVuc2lnbmVkIGludCBpLCBqLCBrOworKwlpbnQgcmV0ID0gMDsKKysJRVZQ X01EX0NUWCBjdHg7CisrCXVuc2lnbmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7CisrCXVuc2ln bmVkIGludCBtbGVuLCBtMWxlbiwgbTJsZW4sIG0zbGVuOworKworKwlFVlBfTURfQ1RYX2luaXQo JmN0eCk7CisrCisrCWlmIChTZWVkTGVuID4gRVZQX01BWF9NRF9TSVpFKQorKwkJbWxlbiA9IFNl ZWRMZW47CisrCWVsc2UKKysJCW1sZW4gPSBFVlBfTUFYX01EX1NJWkU7CisrCisrCW0xID0gT1BF TlNTTF9tYWxsb2MobWxlbik7CisrCW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCW0zID0g T1BFTlNTTF9tYWxsb2MobWxlbik7CisrCisrCWlmICghbTEgfHwgIW0yIHx8ICFtMykKKysJCWdv dG8gbWNfZXJyb3I7CisrCisrCW0xbGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47CisrCW1l bWNweShtMSwgU2VlZCwgU2VlZExlbik7CisrCW1lbWNweShtMiwgU2VlZCwgU2VlZExlbik7Cisr CW1lbWNweShtMywgU2VlZCwgU2VlZExlbik7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7CisrCisr CWZvciAoaiA9IDA7IGogPCAxMDA7IGorKykKKysJCXsKKysJCWZvciAoaSA9IDA7IGkgPCAxMDAw OyBpKyspCisrCQkJeworKwkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxMKTsKKysJ CQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0xLCBtMWxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0 ZSgmY3R4LCBtMiwgbTJsZW4pOworKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMsIG0zbGVu KTsKKysJCQlwID0gbTE7CisrCQkJbTEgPSBtMjsKKysJCQltMWxlbiA9IG0ybGVuOworKwkJCW0y ID0gbTM7CisrCQkJbTJsZW4gPSBtM2xlbjsKKysJCQltMyA9IHA7CisrCQkJRVZQX0RpZ2VzdEZp bmFsX2V4KCZjdHgsIG0zLCAmbTNsZW4pOworKwkJCX0KKysJCWZwcmludGYob3V0LCAiQ09VTlQg PSAlZFxuIiwgaik7CisrCQlmcHV0cygiTUQgPSAiLCBvdXQpOworKwkJZm9yIChrID0gMDsgayA8 IG0zbGVuOyBrKyspCisrCQkJZnByaW50ZihvdXQsICIlMDJ4IiwgbTNba10pOworKwkJZnB1dHMo IlxuXG4iLCBvdXQpOworKwkJbWVtY3B5KG0xLCBtMywgbTNsZW4pOworKwkJbWVtY3B5KG0yLCBt MywgbTNsZW4pOworKwkJbTFsZW4gPSBtMmxlbiA9IG0zbGVuOworKwkJfQorKworKwlyZXQgPSAx OworKworKwltY19lcnJvcjoKKysJaWYgKG0xKQorKwkJT1BFTlNTTF9mcmVlKG0xKTsKKysJaWYg KG0yKQorKwkJT1BFTlNTTF9mcmVlKG0yKTsKKysJaWYgKG0zKQorKwkJT1BFTlNTTF9mcmVlKG0z KTsKKysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlyZXR1cm4gcmV0OworKwl9 CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfdXRsLmguZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgK Ky0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcwkyMDEy LTA0LTIwIDA5OjA3OjA2LjI1Nzc4NTU0NyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9maXBzL2NhdnMvZmlwc191dGwuaAkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1Nzc4NTU0NyArMDIw MAorQEAgLTAsMCArMSwzNDMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKyt2b2lk IGRvX3ByaW50X2Vycm9ycyh2b2lkKQorKwl7CisrCWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOwor KwlpbnQgbGluZSwgZmxhZ3M7CisrCXVuc2lnbmVkIGxvbmcgbDsKKysJd2hpbGUgKChsID0gRVJS X2dldF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkpCisrCQl7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiVseDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQi CisrCQkJCSI6ZmlsZT0lczpsaW5lPSVkOiVzXG4iLAorKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBF UlJfR0VUX0ZVTkMobCksIEVSUl9HRVRfUkVBU09OKGwpLAorKwkJCWZpbGUsIGxpbmUsIGZsYWdz ICYgRVJSX1RYVF9TVFJJTkcgPyBkYXRhIDogIiIpOworKwkJfQorKwl9CisrCisraW50IGhleDJi aW4oY29uc3QgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQg bjEsIG4yOworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4xPTAsbjI9MCA7 IGluW24xXSAmJiBpbltuMV0gIT0gJ1xuJyA7ICkKKysJeyAvKiBmaXJzdCBieXRlICovCisrCWlm ICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQorKwkgICAgY2ggPSBpbltuMSsr XSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkK KysJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAn YScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsK KysJZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwlpZighaW5bbjFdKQorKwkgICAgeworKwkgICAg b3V0W24yKytdPWNoOworKwkgICAgYnJlYWs7CisrCSAgICB9CisrCW91dFtuMl0gPSBjaCA8PCA0 OworKwkvKiBzZWNvbmQgYnl0ZSAqLworKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0g PD0gJzknKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnMCc7CisrCWVsc2UgaWYgKChpbltuMV0g Pj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsg MTA7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCisrCSAg ICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7CisrCWVsc2UKKysJICAgIHJldHVybiAtMTsKKysJ b3V0W24yKytdIHw9IGNoOworKwl9CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKworK3Vuc2ln bmVkIGNoYXIgKmhleDJiaW5fbShjb25zdCBjaGFyICppbiwgbG9uZyAqcGxlbikKKysJeworKwl1 bnNpZ25lZCBjaGFyICpwOworKwlwID0gT1BFTlNTTF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8y KTsKKysJKnBsZW4gPSBoZXgyYmluKGluLCBwKTsKKysJcmV0dXJuIHA7CisrCX0KKysKKytpbnQg ZG9faGV4MmJuKEJJR05VTSAqKnByLCBjb25zdCBjaGFyICppbikKKysJeworKwl1bnNpZ25lZCBj aGFyICpwOworKwlsb25nIHBsZW47CisrCWludCByID0gMDsKKysJcCA9IGhleDJiaW5fbShpbiwg JnBsZW4pOworKwlpZiAoIXApCisrCQlyZXR1cm4gMDsKKysJaWYgKCEqcHIpCisrCQkqcHIgPSBC Tl9uZXcoKTsKKysJaWYgKCEqcHIpCisrCQlyZXR1cm4gMDsKKysJaWYgKEJOX2JpbjJibihwLCBw bGVuLCAqcHIpKQorKwkJciA9IDE7CisrCU9QRU5TU0xfZnJlZShwKTsKKysJcmV0dXJuIHI7Cisr CX0KKysKKytpbnQgZG9fYm5fcHJpbnQoRklMRSAqb3V0LCBCSUdOVU0gKmJuKQorKwl7CisrCWlu dCBsZW4sIGk7CisrCXVuc2lnbmVkIGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJu KTsKKysJaWYgKGxlbiA9PSAwKQorKwkJeworKwkJZnB1dHMoIjAwIiwgb3V0KTsKKysJCXJldHVy biAxOworKwkJfQorKworKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwor KwkJcmV0dXJuIDA7CisrCQl9CisrCUJOX2JuMmJpbihibiwgdG1wKTsKKysJZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgdG1wW2ldKTsKKysJT1BFTlNT TF9mcmVlKHRtcCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IGRvX2JuX3ByaW50X25hbWUo RklMRSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCByOwor KwlmcHJpbnRmKG91dCwgIiVzID0gIiwgbmFtZSk7CisrCXIgPSBkb19ibl9wcmludChvdXQsIGJu KTsKKysJaWYgKCFyKQorKwkJcmV0dXJuIDA7CisrCWZwdXRzKCJcbiIsIG91dCk7CisrCXJldHVy biAxOworKwl9CisrCisraW50IHBhcnNlX2xpbmUoY2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNo YXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1 ZSwgKnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGlu ZWJ1ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsKKysKKysJLyogTG9vayBmb3IgPSBz aWduICovCisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGV4 aXQgKi8KKysJaWYgKCFwKQorKwkJcmV0dXJuIDA7CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyog UmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSpxKSkKKysJCSpxLS0gPSAwOworKworKwkqcCA9IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisr CS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCXZhbHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAx OworKworKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkK KysJCSpwLS0gPSAwOworKworKwkqcGt3ID0ga2V5d29yZDsKKysJKnB2YWwgPSB2YWx1ZTsKKysJ cmV0dXJuIDE7CisrCX0KKysKKytCSUdOVU0gKmhleDJibihjb25zdCBjaGFyICppbikKKysgICAg eworKyAgICBCSUdOVU0gKnA9TlVMTDsKKysKKysgICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkK KysJcmV0dXJuIE5VTEw7CisrCisrICAgIHJldHVybiBwOworKyAgICB9CisrCisraW50IGJpbjJo ZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCisrICAgIHsKKysg ICAgaW50IG4xLCBuMjsKKysgICAgdW5zaWduZWQgY2hhciBjaDsKKysKKysgICAgZm9yIChuMT0w LG4yPTAgOyBuMSA8IGxlbiA7ICsrbjEpCisrCXsKKysJY2g9aW5bbjFdID4+IDQ7CisrCWlmIChj aCA8PSAweDA5KQorKwkgICAgb3V0W24yKytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24y KytdPWNoLTEwKydhJzsKKysJY2g9aW5bbjFdICYgMHgwZjsKKysJaWYoY2ggPD0gMHgwOSkKKysJ ICAgIG91dFtuMisrXT1jaCsnMCc7CisrCWVsc2UKKysJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7 CisrCX0KKysgICAgb3V0W24yXT0nXDAnOworKyAgICByZXR1cm4gbjI7CisrICAgIH0KKysKKyt2 b2lkIHB2KGNvbnN0IGNoYXIgKnRhZyxjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikK KysgICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07CisrCisrICAgIGJpbjJoZXgodmFsLGxlbixv YnVmKTsKKysgICAgcHJpbnRmKCIlcyA9ICVzXG4iLHRhZyxvYnVmKTsKKysgICAgfQorKworKy8q IFRvIGF2b2lkIGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdl IGp1c3QgY29udmVydAorKyAqIHRoZSBpbnB1dCBsaW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3Jt LiBLZXl3b3JkIGxpbmVzIGNvbnZlcnRlZCB0byBmb3JtCisrICogImtleXdvcmQgPSB2YWx1ZVxu IiBubyBtYXR0ZXIgd2hhdCB3aGl0ZSBzcGFjZSBwcmVzZW50LCBhbGwgb3RoZXIgbGluZXMKKysg KiBqdXN0IGhhdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgcmVtb3ZlZC4KKysgKi8KKysK KytpbnQgdGlkeV9saW5lKGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7CisrCWNo YXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYp OworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsKKysJ LyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJ LyogSWYgbm8gJz0nIGp1c3QgY2hvcCBsZWFkaW5nLCB0cmFpbGluZyB3cyAqLworKwlpZiAoIXAp CisrCQl7CisrCQlwID0ga2V5d29yZCArIHN0cmxlbihrZXl3b3JkKSAtIDE7CisrCQl3aGlsZSAo KnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsK KysJCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCQlzdHJjYXQob2xpbmVidWYsICJcbiIp OworKwkJcmV0dXJuIDE7CisrCQl9CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJ CSpxLS0gPSAwOworKworKwkqcCA9IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92 ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnZhbHVlKSkKKysJCXZhbHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFj ZSBmcm9tIHZhbHVlICovCisrCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3 aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0g PSAwOworKworKwlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOworKwlzdHJjYXQob2xpbmVidWYs ICIgPSAiKTsKKysJc3RyY2F0KG9saW5lYnVmLCB2YWx1ZSk7CisrCXN0cmNhdChvbGluZWJ1Ziwg IlxuIik7CisrCisrCXJldHVybiAxOworKwl9CisrCisrLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBu dW1iZXIgb2YgX2JpdHNfIHJlYWQgKi8KKytpbnQgYmludDJiaW4oY29uc3QgY2hhciAqaW4sIGlu dCBsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAg bWVtc2V0KG91dCwwLGxlbik7CisrICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQorKwlpZihp bltuXSA9PSAnMScpCisrCSAgICBvdXRbbi84XXw9KDB4ODAgPj4gKG4lOCkpOworKyAgICByZXR1 cm4gbGVuOworKyAgICB9CisrCisraW50IGJpbjJiaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu LGludCBsZW4sY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuOworKworKyAgICBmb3Iobj0w IDsgbiA8IGxlbiA7ICsrbikKKysJb3V0W25dPShpbltuLzhdJigweDgwID4+IChuJTgpKSkgPyAn MScgOiAnMCc7CisrICAgIHJldHVybiBuOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrdm9pZCBQcmludFZhbHVlKGNo YXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQorK3sKKysjaWYgVkVSQk9TRQor KyAgY2hhciBvYnVmWzIwNDhdOworKyAgaW50IG9sZW47CisrICBvbGVuID0gYmluMmhleCh2YWws IGxlbiwgb2J1Zik7CisrICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsK KysjZW5kaWYKKyt9CisrCisrdm9pZCBPdXRwdXRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNo YXIgKnZhbCwgaW50IGxlbiwgRklMRSAqcmZwLGludCBiaXRtb2RlKQorKyAgICB7CisrICAgIGNo YXIgb2J1ZlsyMDQ4XTsKKysgICAgaW50IG9sZW47CisrCisrICAgIGlmKGJpdG1vZGUpCisrCW9s ZW49YmluMmJpbnQodmFsLGxlbixvYnVmKTsKKysgICAgZWxzZQorKwlvbGVuPWJpbjJoZXgodmFs LGxlbixvYnVmKTsKKysKKysgICAgZnByaW50ZihyZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xl biwgb2J1Zik7CisrI2lmIFZFUkJPU0UKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywg b2xlbiwgb2J1Zik7CisrI2VuZGlmCisrICAgIH0KKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2Zp cHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU4Nzg1NTY5 ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu YwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI1ODc4NTU2OSArMDIwMAorQEAgLTAsMCArMSwzNTkgQEAK KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoK KysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmli dXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIGNvbnN0IHN0cnVjdAorKyAgICB7CisrICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFp bnRleHRbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOworKyAg ICB9IHRlc3RzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1 LDB4MDYsMHgwNywKKysJICAweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYg fSwKKysJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsCisrCSAgMHg4 OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZGIH0sCisrCXsgMHg2OSwweEM0LDB4 RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAorKwkgIDB4RDgsMHhDRCwweEI3LDB4ODAsMHg3 MCwweEI0LDB4QzUsMHg1QSB9LAorKwl9LAorKwl9OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9h ZXM7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKKysgICAgeworKyAgICBjb3JydXB0X2Fl cyA9IDE7CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9hZXMoKQorKyAgICB7CisrICAg IGludCBuOworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAg ICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBmb3Iobj0wIDsgbiA8IDEgOyAr K24pCisrCXsKKysJdW5zaWduZWQgY2hhciBrZXlbMTZdOworKworKwltZW1jcHkoa2V5LCB0ZXN0 c1tuXS5rZXksIHNpemVvZihrZXkpKTsKKysJaWYgKGNvcnJ1cHRfYWVzKQorKwkJa2V5WzBdKys7 CisrCWlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAorKwkJCQlr ZXksIE5VTEwsCisrCQkJCXRlc3RzW25dLnBsYWludGV4dCwKKysJCQkJdGVzdHNbbl0uY2lwaGVy dGV4dCwKKysJCQkJMTYpIDw9IDApCisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOwor KyAgICBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChy ZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLEZJUFNfUl9T RUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrCisrLyogQUVTLUND TSB0ZXN0IGRhdGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KKysKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBjY21fa2V5W10gPSB7CisrCTB4Y2UsMHhiMCwweDA5LDB4YWUs MHhhNCwweDQ1LDB4NDQsMHg1MSwweGZlLDB4YWQsMHhmMCwweGU2LAorKwkweGIzLDB4NmYsMHg0 NSwweDU1LDB4NWQsMHhkMCwweDQ3LDB4MjMsMHhiYSwweGE0LDB4NDgsMHhlOAorK307Cisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX25vbmNlW10gPSB7CisrCTB4NzYsMHg0MCwweDQz LDB4YzQsMHg5NCwweDYwLDB4YjcKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNj bV9hZGF0YVtdID0geworKwkweDZlLDB4ODAsMHhkZCwweDdmLDB4MWIsMHhhZCwweGYzLDB4YTEs MHhjOSwweGFiLDB4MjUsMHhjNywKKysJMHg1ZiwweDEwLDB4YmQsMHhlNywweDhjLDB4MjMsMHhm YSwweDBlLDB4YjgsMHhmOSwweGFhLDB4YTUsCisrCTB4M2EsMHhkZSwweGZiLDB4ZjQsMHhjYiww eGY3LDB4OGYsMHhlNAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3B0W10g PSB7CisrCTB4YzgsMHhkMiwweDc1LDB4ZjksMHgxOSwweGUxLDB4N2QsMHg3ZiwweGU2LDB4OWMs MHgyYSwweDFmLAorKwkweDU4LDB4OTMsMHg5ZCwweGZlLDB4NGQsMHg0MCwweDM3LDB4OTEsMHhi NSwweGRmLDB4MTMsMHgxMAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2N0 W10gPSB7CisrCTB4OGEsMHgwZiwweDNkLDB4ODIsMHgyOSwweGU0LDB4OGUsMHg3NCwweDg3LDB4 ZmQsMHg5NSwweGEyLAorKwkweDhhLDB4ZDMsMHg5MiwweGM4LDB4MGIsMHgzNiwweDgxLDB4ZDQs MHhmYiwweGM3LDB4YmIsMHhmZAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2Nt X3RhZ1tdID0geworKwkweDJkLDB4ZDYsMHhlZiwweDFjLDB4NDUsMHhkNCwweGNjLDB4YjcsMHgy MywweGRjLDB4MDcsMHg0NCwKKysJMHgxNCwweGRiLDB4NTAsMHg2ZAorK307CisrCisraW50IEZJ UFNfc2VsZnRlc3RfYWVzX2NjbSh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25l ZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9D SVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCW1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysJ aWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSwgTlVMTCwgTlVMTCwg MSkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9D VFJMX0NDTV9TRVRfSVZMRU4sCisrCQkJCQlzaXplb2YoY2NtX25vbmNlKSwgTlVMTCkpCisrCQln b3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9T RVRfVEFHLAorKwkJCQkJc2l6ZW9mKGNjbV90YWcpLCBOVUxMKSkKKysJCWdvdG8gZXJyOworKwlp ZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMSkpCisr CQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgc2l6ZW9mKGNj bV9wdCkpICE9IHNpemVvZihjY21fcHQpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVy KCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6ZW9mKGNjbV9hZGF0YSkpIDwgMCkKKysJCWdvdG8g ZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGNjbV9wdCwgc2l6ZW9mKGNjbV9wdCkp ICE9IHNpemVvZihjY21fY3QpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghRVZQX0NJUEhFUl9D VFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fR0VUX1RBRywgMTYsIHRhZykpCisrCQlnb3RvIGVy cjsKKysJaWYgKG1lbWNtcCh0YWcsIGNjbV90YWcsIHNpemVvZihjY21fdGFnKSkKKysJCXx8IG1l bWNtcChvdXQsIGNjbV9jdCwgc2l6ZW9mKGNjbV9jdCkpKQorKwkJZ290byBlcnI7CisrCisrCW1l bXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysKKysJaWYgKCFFVlBfQ2lwaGVySW5pdCgmY3R4 LCBFVlBfYWVzXzE5Ml9jY20oKSwgTlVMTCwgTlVMTCwgMCkpCisrCQlnb3RvIGVycjsKKysJaWYg KCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sCisrCQkJ CQlzaXplb2YoY2NtX25vbmNlKSwgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJaWYgKCFFVlBfQ0lQ SEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLCAxNiwgdGFnKSkKKysJCWdv dG8gZXJyOworKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEwsIGNjbV9rZXksIGNjbV9u b25jZSwgMCkpCisrCQlnb3RvIGVycjsKKysJaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVM TCwgc2l6ZW9mKGNjbV9jdCkpICE9IHNpemVvZihjY21fY3QpKQorKwkJZ290byBlcnI7CisrCWlm IChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6ZW9mKGNjbV9hZGF0YSkpIDwg MCkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGNjbV9jdCwgc2l6 ZW9mKGNjbV9jdCkpICE9IHNpemVvZihjY21fcHQpKQorKwkJZ290byBlcnI7CisrCisrCWlmICht ZW1jbXAob3V0LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSkKKysJCWdvdG8gZXJyOworKworKwly ZXQgPSAxOworKworKwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisr CWlmIChyZXQgPT0gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVT X0NDTSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwllbHNl CisrCQlyZXR1cm4gcmV0OworKworKwl9CisrCisrLyogQUVTLUdDTSB0ZXN0IGRhdGEgZnJvbSBO SVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBnY21fa2V5W10gPSB7CisrCTB4ZWUsMHhiYywweDFmLDB4NTcsMHg0OCwweDdmLDB4NTEsMHg5 MiwweDFjLDB4MDQsMHg2NSwweDY2LAorKwkweDVmLDB4OGEsMHhlNiwweGQxLDB4NjUsMHg4Yiww eGIyLDB4NmQsMHhlNiwweGY4LDB4YTAsMHg2OSwKKysJMHhhMywweDUyLDB4MDIsMHg5MywweGE1 LDB4NzIsMHgwNywweDhmCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21faXZb XSA9IHsKKysJMHg5OSwweGFhLDB4M2UsMHg2OCwweGVkLDB4ODEsMHg3MywweGEwLDB4ZWUsMHhk MCwweDY2LDB4ODQKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9wdFtdID0g eworKwkweGY1LDB4NmUsMHg4NywweDA1LDB4NWIsMHhjMywweDJkLDB4MGUsMHhlYiwweDMxLDB4 YjIsMHhlYSwKKysJMHhjYywweDJiLDB4ZjIsMHhhNQorK307Cisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZ2NtX2FhZFtdID0geworKwkweDRkLDB4MjMsMHhjMywweGNlLDB4YzMsMHgzNCww eGI0LDB4OWIsMHhkYiwweDM3LDB4MGMsMHg0MywKKysJMHg3ZiwweGVjLDB4NzgsMHhkZQorK307 Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2N0W10gPSB7CisrCTB4ZjcsMHgyNiww eDQ0LDB4MTMsMHhhOCwweDRjLDB4MGUsMHg3YywweGQ1LDB4MzYsMHg4NiwweDdlLAorKwkweGI5 LDB4ZjIsMHgxNywweDM2CisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fdGFn W10gPSB7CisrCTB4NjcsMHhiYSwweDA1LDB4MTAsMHgyNiwweDJhLDB4ZTQsMHg4NywweGQ3LDB4 MzcsMHhlZSwweDYyLAorKwkweDk4LDB4ZjcsMHg3ZSwweDBjCisrfTsKKysKKytpbnQgRklQU19z ZWxmdGVzdF9hZXNfZ2NtKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNo YXIgb3V0WzEyOF0sIHRhZ1sxNl07CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKKysJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKwltZW1z ZXQodGFnLCAwLCBzaXplb2YodGFnKSk7CisrCWlmICghRVZQX0NpcGhlckluaXQoJmN0eCwgRVZQ X2Flc18yNTZfZ2NtKCksIE5VTEwsIE5VTEwsIDEpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQ X0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLAorKwkJCQkJc2l6 ZW9mKGdjbV9pdiksIE5VTEwpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NpcGhlckluaXQo JmN0eCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2LCAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAoRVZQ X0NpcGhlcigmY3R4LCBOVUxMLCBnY21fYWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwgMCkKKysJCWdv dG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGdjbV9wdCwgc2l6ZW9mKGdjbV9w dCkpICE9IHNpemVvZihnY21fY3QpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lwaGVyKCZj dHgsIE5VTEwsIE5VTEwsIDApIDwgMCkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUVWUF9DSVBI RVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX0dFVF9UQUcsIDE2LCB0YWcpKQorKwkJZ290 byBlcnI7CisrCisrCWlmIChtZW1jbXAodGFnLCBnY21fdGFnLCAxNikgfHwgbWVtY21wKG91dCwg Z2NtX2N0LCAxNikpCisrCQlnb3RvIGVycjsKKysKKysJbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91 dCkpOworKworKwlpZiAoIUVWUF9DaXBoZXJJbml0KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBO VUxMLCBOVUxMLCAwKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwo JmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKKysJCQkJCXNpemVvZihnY21faXYpLCBOVUxM KSkKKysJCWdvdG8gZXJyOworKwlpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NU UkxfR0NNX1NFVF9UQUcsIDE2LCB0YWcpKQorKwkJZ290byBlcnI7CisrCWlmICghRVZQX0NpcGhl ckluaXQoJmN0eCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2LCAwKSkKKysJCWdvdG8gZXJyOworKwlp ZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBnY21fYWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwgMCkK KysJCWdvdG8gZXJyOworKwlpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGdjbV9jdCwgc2l6ZW9m KGdjbV9jdCkpICE9IHNpemVvZihnY21fcHQpKQorKwkJZ290byBlcnI7CisrCWlmIChFVlBfQ2lw aGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApIDwgMCkKKysJCWdvdG8gZXJyOworKworKwlpZiAobWVt Y21wKG91dCwgZ2NtX3B0LCAxNikpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJ ZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAocmV0ID09IDAp CisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19HQ00sRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZWxzZQorKwkJcmV0dXJuIHJl dDsKKysKKysJfQorKworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfa2V5 W10gPSB7CisrCTB4YTEsMHhiOSwweDBjLDB4YmEsMHgzZiwweDA2LDB4YWMsMHgzNSwweDNiLDB4 MmMsMHgzNCwweDM4LAorKwkweDc2LDB4MDgsMHgxNywweDYyLDB4MDksMHgwOSwweDIzLDB4MDIs MHg2ZSwweDkxLDB4NzcsMHgxOCwKKysJMHgxNSwweGYyLDB4OWQsMHhhYiwweDAxLDB4OTMsMHgy ZiwweDJmCisrfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2lbXSA9IHsK KysJMHg0ZiwweGFlLDB4ZjcsMHgxMSwweDdjLDB4ZGEsMHg1OSwweGM2LDB4NmUsMHg0YiwweDky LDB4MDEsCisrCTB4M2UsMHg3NiwweDhhLDB4ZDUKKyt9OworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIFhUU18xMjhfcHRbXSA9IHsKKysJMHhlYiwweGFiLDB4Y2UsMHg5NSwweGIxLDB4NGQs MHgzYywweDhkLDB4NmYsMHhiMywweDUwLDB4MzksCisrCTB4MDcsMHg5MCwweDMxLDB4MWMKKyt9 OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfY3RbXSA9IHsKKysJMHg3Nyww eDhhLDB4ZTgsMHhiNCwweDNjLDB4YjksMHg4ZCwweDVhLDB4ODIsMHg1MCwweDgxLDB4ZDUsCisr CTB4YmUsMHg0NywweDFjLDB4NjMKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IFhUU18yNTZfa2V5W10gPSB7CisrCTB4MWUsMHhhNiwweDYxLDB4YzUsMHg4ZCwweDk0LDB4M2Es MHgwZSwweDQ4LDB4MDEsMHhlNCwweDJmLAorKwkweDRiLDB4MDksMHg0NywweDE0LDB4OWUsMHg3 ZiwweDlmLDB4OGUsMHgzZSwweDY4LDB4ZDAsMHhjNywKKysJMHg1MCwweDUyLDB4MTAsMHhiZCww eDMxLDB4MWEsMHgwZSwweDdjLDB4ZDYsMHhlMSwweDNmLDB4ZmQsCisrCTB4ZjIsMHg0MSwweDhk LDB4OGQsMHgxOSwweDExLDB4YzAsMHgwNCwweGNkLDB4YTUsMHg4ZCwweGEzLAorKwkweGQ2LDB4 MTksMHhiNywweGUyLDB4YjksMHgxNCwweDFlLDB4NTgsMHgzMSwweDhlLDB4ZWEsMHgzOSwKKysJ MHgyYywweGY0LDB4MWIsMHgwOAorK307Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRT XzI1Nl9pW10gPSB7CisrCTB4YWQsMHhmOCwweGQ5LDB4MjYsMHgyNywweDQ2LDB4NGEsMHhkMiww eGYwLDB4NDIsMHg4ZSwweDg0LAorKwkweGE5LDB4ZjgsMHg3NSwweDY0CisrfTsKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X3B0W10gPSB7CisrCTB4MmUsMHhlZCwweGVhLDB4 NTIsMHhjZCwweDgyLDB4MTUsMHhlMSwweGFjLDB4YzYsMHg0NywweGU4LAorKwkweDEwLDB4YmIs MHhjMywweDY0LDB4MmUsMHg4NywweDI4LDB4N2YsMHg4ZCwweDJlLDB4NTcsMHhlMywKKysJMHg2 YywweDBhLDB4MjQsMHhmYiwweGMxLDB4MmEsMHgyMCwweDJlCisrfTsKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBYVFNfMjU2X2N0W10gPSB7CisrCTB4Y2IsMHhhYSwweGQwLDB4ZTIsMHhm NiwweGNlLDB4YTMsMHhmNSwweDBiLDB4MzcsMHhmOSwweDM0LAorKwkweGQ0LDB4NmEsMHg5Yiww eDEzLDB4MGIsMHg5ZCwweDU0LDB4ZjAsMHg3ZSwweDM0LDB4ZjMsMHg2YSwKKysJMHhmNywweDkz LDB4ZTgsMHg2ZiwweDczLDB4YzYsMHhkNywweGRiCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVz dF9hZXNfeHRzKCkKKysJeworKwlpbnQgcmV0ID0gMTsKKysJRVZQX0NJUEhFUl9DVFggY3R4Owor KwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgm Y3R4LCBFVlBfYWVzXzEyOF94dHMoKSwKKysJCQkJWFRTXzEyOF9rZXksIFhUU18xMjhfaSwgWFRT XzEyOF9wdCwgWFRTXzEyOF9jdCwKKysJCQkJc2l6ZW9mKFhUU18xMjhfcHQpKSA8PSAwKQorKwkJ cmV0ID0gMDsKKysKKysJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18yNTZfeHRz KCksCisrCQkJCVhUU18yNTZfa2V5LCBYVFNfMjU2X2ksIFhUU18yNTZfcHQsIFhUU18yNTZfY3Qs CisrCQkJCXNpemVvZihYVFNfMjU2X3B0KSkgPD0gMCkKKysJCXJldCA9IDA7CisrCisrCUVWUF9D SVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCWlmIChyZXQgPT0gMCkKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hUUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJcmV0 dXJuIHJldDsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwcy5jCistLS0g b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzow Ni4yNTg3ODU1NjkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzLmMJ MjAxMi0wNC0yMCAwOTowNzowNi4yNTg3ODU1NjkgKzAyMDAKK0BAIC0wLDAgKzEsNDg5IEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8ZGxmY24u aD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUg ImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrCisrI2lmbmRlZiBQQVRIX01BWAorKyNkZWZpbmUgUEFUSF9NQVggMTAy NAorKyNlbmRpZgorKworK3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKytzdGF0 aWMgaW50IGZpcHNfbW9kZSA9IDA7Cisrc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworKwor K3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOworK3N0YXRpYyBpbnQgZmlw c19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsKKytzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3duaW5n X3RocmVhZCh2b2lkKTsKKysKKysjZGVmaW5lIGZpcHNfd19sb2NrKCkJQ1JZUFRPX3dfbG9jayhD UllQVE9fTE9DS19GSVBTKQorKyNkZWZpbmUgZmlwc193X3VubG9jaygpCUNSWVBUT193X3VubG9j ayhDUllQVE9fTE9DS19GSVBTKQorKyNkZWZpbmUgZmlwc19yX2xvY2soKQlDUllQVE9fcl9sb2Nr KENSWVBUT19MT0NLX0ZJUFMpCisrI2RlZmluZSBmaXBzX3JfdW5sb2NrKCkJQ1JZUFRPX3JfdW5s b2NrKENSWVBUT19MT0NLX0ZJUFMpCisrCisrc3RhdGljIHZvaWQgZmlwc19zZXRfbW9kZShpbnQg b25vZmYpCisrCXsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQo KTsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkKKysJCXsKKysJCWlmICghb3duaW5nX3RocmVhZCkg Zmlwc193X2xvY2soKTsKKysJCWZpcHNfbW9kZSA9IG9ub2ZmOworKwkJaWYgKCFvd25pbmdfdGhy ZWFkKSBmaXBzX3dfdW5sb2NrKCk7CisrCQl9CisrCX0KKysKKytpbnQgRklQU19tb2R1bGVfbW9k ZSh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNf aXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJeworKwkJaWYg KCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwkJcmV0ID0gZmlwc19tb2RlOworKwkJ aWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7CisrCQl9CisrCXJldHVybiByZXQ7 CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKKysgICAgeworKyAgICBp bnQgcmV0ID0gMDsKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkKKysJeworKwlpbnQgb3duaW5nX3Ro cmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoIW93bmluZ190aHJlYWQp IGZpcHNfcl9sb2NrKCk7CisrCXJldCA9IGZpcHNfc2VsZnRlc3RfZmFpbDsKKysJaWYgKCFvd25p bmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7CisrCX0KKysgICAgcmV0dXJuIHJldDsKKysgICAg fQorKworKy8qIFNlbGZ0ZXN0IGZhaWx1cmUgZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwg YmUgY2FsbGVkCisrICogZHVyaW5nICphbnkqIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBo YXMgdGhlIG1pbmltdW0KKysgKiBvdmVyaGVhZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEg cGVyZm9ybWFuY2UgaGl0LgorKyAqLworKworK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lk KQorKyAgICB7CisrICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpCisrCXsKKysJT3BlblNTTERp ZShfX0ZJTEVfXyxfX0xJTkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOworKwl9 CisrICAgIH0KKysKKyt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKKysgICAgewor KyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKyAgICB9CisrCisrLyogd2UgaW1wbGVtZW50 IHdoYXQgbGliZmlwc2NoZWNrIGRvZXMgb3Vyc2VsdmVzICovCisrCisrc3RhdGljIGludAorK2dl dF9saWJyYXJ5X3BhdGgoY29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFt ZSwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4pCisreworKwlEbF9pbmZvIGluZm87CisrCXZv aWQgKmRsLCAqc3ltOworKwlpbnQgcnYgPSAtMTsKKysKKysgICAgICAgIGRsID0gZGxvcGVuKGxp Ym5hbWUsIFJUTERfTEFaWSk7CisrICAgICAgICBpZiAoZGwgPT0gTlVMTCkgeworKwkgICAgICAg IHJldHVybiAtMTsKKysgICAgICAgIH0gICAgICAgCisrCisrCXN5bSA9IGRsc3ltKGRsLCBzeW1i b2xuYW1lKTsKKysKKysJaWYgKHN5bSAhPSBOVUxMICYmIGRsYWRkcihzeW0sICZpbmZvKSkgewor KwkJc3RybmNweShwYXRoLCBpbmZvLmRsaV9mbmFtZSwgcGF0aGxlbi0xKTsKKysJCXBhdGhbcGF0 aGxlbi0xXSA9ICdcMCc7CisrCQlydiA9IDA7CisrCX0KKysKKysJZGxjbG9zZShkbCk7CQorKwkK KysJcmV0dXJuIHJ2OworK30KKysKKytzdGF0aWMgY29uc3QgY2hhciBjb252W10gPSAiMDEyMzQ1 Njc4OWFiY2RlZiI7CisrCisrc3RhdGljIGNoYXIgKgorK2JpbjJoZXgodm9pZCAqYnVmLCBzaXpl X3QgbGVuKQorK3sKKysJY2hhciAqaGV4LCAqcDsKKysJdW5zaWduZWQgY2hhciAqc3JjID0gYnVm OworKwkKKysJaGV4ID0gbWFsbG9jKGxlbiAqIDIgKyAxKTsKKysJaWYgKGhleCA9PSBOVUxMKQor KwkJcmV0dXJuIE5VTEw7CisrCisrCXAgPSBoZXg7CisrCisrCXdoaWxlIChsZW4gPiAwKSB7Cisr CQl1bnNpZ25lZCBjOworKworKwkJYyA9ICpzcmM7CisrCQlzcmMrKzsKKysKKysJCSpwID0gY29u dltjID4+IDRdOworKwkJKytwOworKwkJKnAgPSBjb252W2MgJiAweDBmXTsKKysJCSsrcDsKKysJ CS0tbGVuOworKwl9CisrCSpwID0gJ1wwJzsKKysJcmV0dXJuIGhleDsKKyt9CisrCisrI2RlZmlu ZSBITUFDX1BSRUZJWCAiLiIgCisrI2RlZmluZSBITUFDX1NVRkZJWCAiLmhtYWMiIAorKyNkZWZp bmUgUkVBRF9CVUZGRVJfTEVOR1RIIDE2Mzg0CisrCisrc3RhdGljIGNoYXIgKgorK21ha2VfaG1h Y19wYXRoKGNvbnN0IGNoYXIgKm9yaWdwYXRoKQorK3sKKysJY2hhciAqcGF0aCwgKnA7CisrCWNv bnN0IGNoYXIgKmZuOworKworKwlwYXRoID0gbWFsbG9jKHNpemVvZihITUFDX1BSRUZJWCkgKyBz aXplb2YoSE1BQ19TVUZGSVgpICsgc3RybGVuKG9yaWdwYXRoKSk7CisrCWlmKHBhdGggPT0gTlVM TCkgeworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJZm4gPSBzdHJyY2hyKG9yaWdwYXRoLCAn LycpOworKwlpZiAoZm4gPT0gTlVMTCkgeworKwkJZm4gPSBvcmlncGF0aDsKKysJfSBlbHNlIHsK KysJCSsrZm47CisrCX0KKysKKysJc3RybmNweShwYXRoLCBvcmlncGF0aCwgZm4tb3JpZ3BhdGgp OworKwlwID0gcGF0aCArIChmbiAtIG9yaWdwYXRoKTsKKysJcCA9IHN0cGNweShwLCBITUFDX1BS RUZJWCk7CisrCXAgPSBzdHBjcHkocCwgZm4pOworKwlwID0gc3RwY3B5KHAsIEhNQUNfU1VGRklY KTsKKysKKysJcmV0dXJuIHBhdGg7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyIGhtYWNrZXlb XSA9ICJvcmJvRGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFyUCI7CisrCisrc3RhdGljIGludAor K2NvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVfdCAq aG1hY2xlbikKKyt7CisrCUZJTEUgKmYgPSBOVUxMOworKwlpbnQgcnYgPSAtMTsKKysJdW5zaWdu ZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xFTkdUSF07CisrCXNpemVfdCBsZW47CisrCXVuc2ln bmVkIGludCBobGVuOworKwlITUFDX0NUWCBjOworKworKwlITUFDX0NUWF9pbml0KCZjKTsKKysK KysJZiA9IGZvcGVuKHBhdGgsICJyIik7CisrCisrCWlmIChmID09IE5VTEwpIHsKKysJCWdvdG8g ZW5kOworKwl9CisrCisrCUhNQUNfSW5pdCgmYywgaG1hY2tleSwgc2l6ZW9mKGhtYWNrZXkpLTEs IEVWUF9zaGEyNTYoKSk7CisrCisrCXdoaWxlICgobGVuPWZyZWFkKHJidWYsIDEsIHNpemVvZihy YnVmKSwgZikpICE9IDApIHsKKysJCUhNQUNfVXBkYXRlKCZjLCByYnVmLCBsZW4pOworKwl9Cisr CisrCWxlbiA9IHNpemVvZihyYnVmKTsKKysJLyogcmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLworKwlI TUFDX0ZpbmFsKCZjLCByYnVmLCAmaGxlbik7CisrCisrCSpidWYgPSBtYWxsb2MoaGxlbik7Cisr CWlmICgqYnVmID09IE5VTEwpIHsKKysJCWdvdG8gZW5kOworKwl9CisrCisrCSpobWFjbGVuID0g aGxlbjsKKysKKysJbWVtY3B5KCpidWYsIHJidWYsIGhsZW4pOworKworKwlydiA9IDA7CisrZW5k OgorKwlITUFDX0NUWF9jbGVhbnVwKCZjKTsKKysKKysJaWYgKGYpCisrCQlmY2xvc2UoZik7Cisr CisrCXJldHVybiBydjsKKyt9CisrCisrc3RhdGljIGludAorK0ZJUFNDSEVDS192ZXJpZnkoY29u c3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSkKKyt7CisrCWNoYXIgcGF0 aFtQQVRIX01BWCsxXTsKKysJaW50IHJ2OworKwlGSUxFICpoZjsKKysJY2hhciAqaG1hY3BhdGgs ICpwOworKwljaGFyICpobWFjID0gTlVMTDsKKysJc2l6ZV90IG47CisrCQorKwlydiA9IGdldF9s aWJyYXJ5X3BhdGgobGlibmFtZSwgc3ltYm9sbmFtZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKKysK KysJaWYgKHJ2IDwgMCkKKysJCXJldHVybiAwOworKworKwlobWFjcGF0aCA9IG1ha2VfaG1hY19w YXRoKHBhdGgpOworKwlpZiAoaG1hY3BhdGggPT0gTlVMTCkKKysJCXJldHVybiAwOworKworKwlo ZiA9IGZvcGVuKGhtYWNwYXRoLCAiciIpOworKwlpZiAoaGYgPT0gTlVMTCkgeworKwkJZnJlZSho bWFjcGF0aCk7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwlpZiAoZ2V0bGluZSgmaG1hYywgJm4s IGhmKSA+IDApIHsKKysJCXZvaWQgKmJ1ZjsKKysJCXNpemVfdCBobWFjbGVuOworKwkJY2hhciAq aGV4OworKworKwkJaWYgKChwPXN0cmNocihobWFjLCAnXG4nKSkgIT0gTlVMTCkKKysJCQkqcCA9 ICdcMCc7CisrCisrCQlpZiAoY29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4p IDwgMCkgeworKwkJCXJ2ID0gLTQ7CisrCQkJZ290byBlbmQ7CisrCQl9CisrCisrCQlpZiAoKGhl eD1iaW4yaGV4KGJ1ZiwgaG1hY2xlbikpID09IE5VTEwpIHsKKysJCQlmcmVlKGJ1Zik7CisrCQkJ cnYgPSAtNTsKKysJCQlnb3RvIGVuZDsKKysJCX0KKysKKysJCWlmIChzdHJjbXAoaGV4LCBobWFj KSAhPSAwKSB7CisrCQkJcnYgPSAtMTsKKysJCX0KKysJCWZyZWUoYnVmKTsKKysJCWZyZWUoaGV4 KTsKKysJfQorKworK2VuZDoKKysJZnJlZShobWFjKTsKKysJZnJlZShobWFjcGF0aCk7CisrCWZj bG9zZShoZik7CisrCisrCWlmIChydiA8IDApCisrCQlyZXR1cm4gMDsKKysKKysJLyogY2hlY2sg c3VjY2Vzc2Z1bCAqLworKwlyZXR1cm4gMTsJCisrfQorKworK2ludCBGSVBTX21vZHVsZV9tb2Rl X3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1dGgpCisrICAgIHsKKysgICAgaW50IHJldCA9 IDA7CisrCisrICAgIGZpcHNfd19sb2NrKCk7CisrICAgIGZpcHNfc3RhcnRlZCA9IDE7CisrICAg IGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKKysKKysgICAgaWYob25vZmYpCisrCXsKKysKKysJ Zmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKysKKysJLyogRG9uJ3QgZ28gaW50byBGSVBTIG1vZGUg dHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdpYworKwkgICBzZWVkaW5nICovCisrCWlm KEZJUFNfbW9kdWxlX21vZGUoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf TU9EVUxFX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpOworKwkgICAgZmlw c19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJ ICAgIH0KKysKKysjaWZkZWYgT1BFTlNTTF9JQTMyX1NTRTIKKysJeworKwlleHRlcm4gdW5zaWdu ZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QWzJdOworKwlpZiAoKE9QRU5TU0xfaWEzMmNhcF9QWzBd ICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkKKysJICAgIHsKKysJICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9S TSk7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAg IGdvdG8gZW5kOworKwkgICAgfQorKwlPUEVOU1NMX2lhMzJjYXBfUFswXSB8PSAoMTw8MjgpOwkv KiBzZXQgInNoYXJlZCBjYWNoZSIJKi8KKysJT1BFTlNTTF9pYTMyY2FwX1BbMV0gJj0gfigxPDwo NjAtMzIpKTsJLyogY2xlYXIgQVZYCQkqLworKwl9CisrI2VuZGlmCisrCisrCWlmKCFGSVBTQ0hF Q0tfdmVyaWZ5KCJsaWJjcnlwdG8uc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwiRklQU19tb2Rl X3NldCIpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9T RVQsRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKTsKKysJICAgIGZpcHNfc2VsZnRl c3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9Cisr CisrCWlmKCFGSVBTQ0hFQ0tfdmVyaWZ5KCJsaWJzc2wuc28uIiBTSExJQl9WRVJTSU9OX05VTUJF UiwiU1NMX0NUWF9uZXciKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9E VUxFX01PREVfU0VULEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7CisrCSAgICBm aXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOwor KwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCisrCSAgICBmaXBzX3NldF9tb2RlKG9u b2ZmKTsKKysJZWxzZQorKwkgICAgeworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJ ICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysJcmV0ID0gMTsKKysJZ290 byBlbmQ7CisrCX0KKysgICAgZmlwc19zZXRfbW9kZSgwKTsKKysgICAgZmlwc19zZWxmdGVzdF9m YWlsID0gMDsKKysgICAgcmV0ID0gMTsKKytlbmQ6CisrICAgIGZpcHNfY2xlYXJfb3duaW5nX3Ro cmVhZCgpOworKyAgICBmaXBzX3dfdW5sb2NrKCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0K KysKKytzdGF0aWMgQ1JZUFRPX1RIUkVBRElEIGZpcHNfdGhyZWFkOworK3N0YXRpYyBpbnQgZmlw c190aHJlYWRfc2V0ID0gMDsKKysKKytzdGF0aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2 b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlwc19zdGFydGVkKQorKwkJewor KwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWRf c2V0KQorKwkJCXsKKysJCQlDUllQVE9fVEhSRUFESUQgY3VyOworKwkJCUNSWVBUT19USFJFQURJ RF9jdXJyZW50KCZjdXIpOworKwkJCWlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCAmZmlw c190aHJlYWQpKQorKwkJCQlyZXQgPSAxOworKwkJCX0KKysJCUNSWVBUT19yX3VubG9jayhDUllQ VE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgZmlwc19z ZXRfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlpZiAoZmlw c19zdGFydGVkKQorKwkJeworKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Cisr CQlpZiAoIWZpcHNfdGhyZWFkX3NldCkKKysJCQl7CisrCQkJQ1JZUFRPX1RIUkVBRElEX2N1cnJl bnQoJmZpcHNfdGhyZWFkKTsKKysJCQlyZXQgPSAxOworKwkJCWZpcHNfdGhyZWFkX3NldCA9IDE7 CisrCQkJfQorKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJ cmV0dXJuIHJldDsKKysJfQorKworK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkK KysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGZpcHNfc3RhcnRlZCkKKysJCXsKKysJCUNS WVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhyZWFkX3NldCkK KysJCQl7CisrCQkJQ1JZUFRPX1RIUkVBRElEIGN1cjsKKysJCQlDUllQVE9fVEhSRUFESURfY3Vy cmVudCgmY3VyKTsKKysJCQlpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhy ZWFkKSkKKysJCQkJZmlwc190aHJlYWRfc2V0ID0gMDsKKysJCQl9CisrCQlDUllQVE9fd191bmxv Y2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9CisrCisrCisr I2lmIDAKKysvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3VyZSB0aGUgZXJyb3IgY29k ZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgorKyAqIG5hbWUgaXMgdG8ga2VlcCB0aGUgZXJyb3Ig Y2hlY2tpbmcgc2NyaXB0IHF1aWV0CisrICovCisrdm9pZCBoYXNoX2ZpbmFsKHZvaWQpCisrCXsK KysJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJ fQorKyNlbmRpZgorKworKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlw cy9maXBzX2NtYWNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2Zp cHNfY21hY19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNTk3ODU1OTEgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYwky MDEyLTA0LTIwIDA5OjA3OjA2LjI1OTc4NTU5MSArMDIwMAorQEAgLTAsMCArMSwxNjEgQEAKKysv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRp b24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2NtYWMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsKKysJaW50IG5pZDsKKysJY29uc3QgdW5zaWdu ZWQgY2hhciBrZXlbRVZQX01BWF9LRVlfTEVOR1RIXTsgc2l6ZV90IGtleXNpemU7CisrCWNvbnN0 IHVuc2lnbmVkIGNoYXIgbXNnWzY0XTsgc2l6ZV90IG1zZ3NpemU7CisrCWNvbnN0IHVuc2lnbmVk IGNoYXIgbWFjWzMyXTsgc2l6ZV90IG1hY3NpemU7CisrfSBDTUFDX0tBVDsKKysKKysvKiBmcm9t IGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtMzhCL1NQXzgw MC0zOEIucGRmICovCisrc3RhdGljIGNvbnN0IENNQUNfS0FUIHZlY3RvcltdID0geworKyAgICB7 CU5JRF9hZXNfMTI4X2NiYywJLyogQ291bnQgPSAzMiBmcm9tIENNQUNHZW5BRVMxMjgudHh0ICov CisrCXsgMHg3NywweGE3LDB4N2YsMHhhZiwgMHgyOSwweDBjLDB4MWYsMHhhMywKKysJICAweDBj LDB4NjgsMHgzZCwweGYxLCAweDZiLDB4YTcsMHhhNywweDdiLCB9LCAxMjgsCisrCXsgMHgwMiww eDA2LDB4ODMsMHhlMSwgMHhmMCwweDM5LDB4MmYsMHg0YywKKysJICAweGFjLDB4NTQsMHgzMSww eDhiLCAweDYwLDB4MjksMHgyNSwweDllLAorKwkgIDB4OWMsMHg1NSwweDNkLDB4YmMsIDB4NGIs MHg2YSwweGQ5LDB4OTgsCisrCSAgMHhlNiwweDRkLDB4NTgsMHhlNCwgMHhlNywweGRjLDB4MmUs MHgxMywgfSwgMjU2LAorKwl7IDB4ZmIsMHhmZSwweGE0LDB4MWIsIH0sIDMyCisrICAgIH0sCisr ICAgIHsJTklEX2Flc18xOTJfY2JjLAkvKiBDb3VudCA9IDIzIGZyb20gQ01BQ0dlbkFFUzE5Mi50 eHQgKi8KKysJeyAweDdiLDB4MzIsMHgzOSwweDEzLCAweDY5LDB4YWEsMHg0YywweGE5LAorKwkg IDB4NzUsMHg1OCwweDA5LDB4NWIsIDB4ZTMsMHhjMywweGVjLDB4ODYsCisrCSAgMHgyYiwweGQw LDB4NTcsMHhjZSwgMHhmMSwweGUzLDB4MmQsMHg2MiwgfSwgMTkyLAorKwl7IDB4MCB9LCAwLAor Kwl7IDB4ZTQsMHhkOSwweDM0LDB4MGIsIDB4MDMsMHhlNiwweDdkLDB4ZWYsCisrCSAgMHhkNCww eDk2LDB4OWMsMHhjMSwgMHhlZCwweDM3LDB4MzUsMHhlNiwgfSwgMTI4LAorKyAgICB9LAorKyAg ICB7CU5JRF9hZXNfMjU2X2NiYywJLyogQ291bnQgPSAzMyBmcm9tIENNQUNHZW5BRVMyNTYudHh0 ICovCisrCXsgMHgwYiwweDEyLDB4MmEsMHhjOCwgMHhmMywweDRlLDB4ZDEsMHhmZSwKKysJICAw eDA4LDB4MmEsMHgzNiwweDI1LCAweGQxLDB4NTcsMHg1NiwweDE0LAorKwkgIDB4NTQsMHgxNiww eDdhLDB4YzEsIDB4NDUsMHhhMSwweDBiLDB4YmYsCisrCSAgMHg3NywweGM2LDB4YTcsMHgwNSwg MHg5NiwweGQ1LDB4NzQsMHhmMSwgfSwgMjU2LAorKwl7IDB4NDksMHg4YiwweDUzLDB4ZmQsIDB4 ZWMsMHg4NywweGVkLDB4Y2IsCisrCSAgMHhmMCwweDcwLDB4OTcsMHhkYywgMHhjZCwweGU5LDB4 M2EsMHgwOCwKKysJICAweDRiLDB4YWQsMHg3NSwweDAxLCAweGEyLDB4MjQsMHhlMywweDg4LAor KwkgIDB4ZGYsMHgzNCwweDljLDB4ZTEsIDB4ODksMHg1OSwweGZlLDB4ODQsCisrCSAgMHg4NSww eGY4LDB4YWQsMHgxNSwgMHgzNywweGYwLDB4ZDgsMHg5NiwKKysJICAweGVhLDB4NzMsMHhiZSww eGRjLCAweDcyLDB4MTQsMHg3MSwweDNmLCB9LCAzODQsCisrCXsgMHhmNiwweDJjLDB4NDYsMHgz MiwgMHg5YiwgfSwgNDAsCisrICAgIH0sCisrICAgIHsJTklEX2Rlc19lZGUzX2NiYywJLyogQ291 bnQgPSA0MSBmcm9tIENNQUNHZW5UREVTMy5yZXEgKi8KKysJeyAweDg5LDB4YmMsMHhkOSwweDUy LCAweGE4LDB4YzgsMHhhYiwweDM3LAorKwkgIDB4MWEsMHhmNCwweDhhLDB4YzcsIDB4ZDAsMHg3 MCwweDg1LDB4ZDUsCisrCSAgMHhlZiwweGY3LDB4MDIsMHhlNiwgMHhkNiwweDJjLDB4ZGMsMHgy MywgfSwgMTkyLAorKwl7IDB4ZmEsMHg2MiwweDBjLDB4MWIsIDB4YmUsMHg5NywweDMxLDB4OWUs CisrCSAgMHg5YSwweDBjLDB4ZjAsMHg0OSwgMHgyMSwweDIxLDB4ZjcsMHhhMiwKKysJICAweDBl LDB4YjAsMHg4YSwweDZhLCAweDcwLDB4OWQsMHhjYiwweGQwLAorKwkgIDB4MGEsMHhhZiwweDM4 LDB4ZTQsIDB4ZjksMHg5ZSwweDc1LDB4NGUsIH0sIDI1NiwKKysJeyAweDhmLDB4NDksMHhhMSww eGI3LCAweGQ2LDB4YWEsMHgyMiwweDU4LCB9LCA2NCwKKysgICAgfSwKKyt9OworKworK2ludCBG SVBTX3NlbGZ0ZXN0X2NtYWMoKQorKwl7CisrCXNpemVfdCBuLCBvdXRsZW47CisrCXVuc2lnbmVk IGNoYXIgICAgb3V0WzMyXTsKKysJY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyOworKwlDTUFDX0NU WCAqY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrCWNvbnN0IENNQUNfS0FUICp0OworKwlpbnQgcnYg PSAxOworKworKwlmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0 b3JbMF0pOyBuKyssdCsrKQorKwkJeworKwkJY2lwaGVyID0gRklQU19nZXRfY2lwaGVyYnluaWQo dC0+bmlkKTsKKysJCWlmICghY2lwaGVyKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8g ZXJyOworKwkJCX0KKysJCWlmICghQ01BQ19Jbml0KGN0eCwgdC0+a2V5LCB0LT5rZXlzaXplLzgs IGNpcGhlciwgMCkpCisrCQkJeworKwkJCXJ2ID0gLTE7CisrCQkJZ290byBlcnI7CisrCQkJfQor KwkJaWYgKCFDTUFDX1VwZGF0ZShjdHgsIHQtPm1zZywgdC0+bXNnc2l6ZS84KSkKKysJCQl7Cisr CQkJcnYgPSAtMTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCQkJCisrCQlpZiAoIUNNQUNfRmlu YWwoY3R4LCBvdXQsICZvdXRsZW4pKQorKwkJCXsKKysJCQlydiA9IC0xOworKwkJCWdvdG8gZXJy OworKwkJCX0KKysJCUNNQUNfQ1RYX2NsZWFudXAoY3R4KTsKKysKKysJCWlmKG91dGxlbiA8IHQt Pm1hY3NpemUvOCB8fCBtZW1jbXAob3V0LHQtPm1hYyx0LT5tYWNzaXplLzgpKQorKwkJCXsKKysJ CSAgICAJcnYgPSAwOworKwkJICAgIAl9CisrCQl9CisrCisrCWVycjoKKysJQ01BQ19DVFhfZnJl ZShjdHgpOworKworKwlpZiAocnYgPT0gLTEpCisrCQl7CisrCQlydiA9IDA7CisrCQl9CisrCWlm ICghcnYpCisrCQkgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7CisrCisrCXJldHVybiBydjsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yMCAwOTow NzowNi4yNTk3ODU1OTEgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBz X2Rlc19zZWxmdGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjU5Nzg1NTkxICswMjAwCitAQCAt MCwwICsxLDE0NyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor KyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK KysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QKKysgICAgeworKyAgICBjb25zdCB1 bnNpZ25lZCBjaGFyIGtleVsxNl07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0 WzhdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrICAgIH0gdGVz dHMyW109CisrCXsKKysJeworKwl7IDB4N2MsMHg0ZiwweDZlLDB4ZjcsMHhhMiwweDA0LDB4MTYs MHhlYywKKysJICAweDBiLDB4NmIsMHg3YywweDllLDB4NWUsMHgxOSwweGE3LDB4YzQgfSwKKysJ eyAweDA2LDB4YTcsMHhkOCwweDc5LDB4YWEsMHhjZSwweDY5LDB4ZWYgfSwKKysJeyAweDRjLDB4 MTEsMHgxNywweDU1LDB4YmYsMHhjNCwweDRlLDB4ZmQgfQorKwl9LAorKwl7CisrCXsgMHg1ZCww eDllLDB4MDEsMHhkMywweDI1LDB4YzcsMHgzZSwweDM0LAorKwkgIDB4MDEsMHgxNiwweDdjLDB4 ODUsMHgyMywweGRmLDB4ZTAsMHg2OCB9LAorKwl7IDB4OWMsMHg1MCwweDA5LDB4MGYsMHg1ZSww eDdkLDB4NjksMHg3ZSB9LAorKwl7IDB4ZDIsMHgwYiwweDE4LDB4ZGYsMHhkOSwweDBkLDB4OWUs MHhmZiB9LAorKwl9CisrCX07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdAorKyAgICB7CisrICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBw bGFpbnRleHRbOF07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKysg ICAgfSB0ZXN0czNbXT0KKysJeworKwl7CisrCXsgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLAorKwkgIDB4RkUsMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgx MCwKKysJICAweDEyLDB4MzQsMHg1NiwweDc4LDB4OWEsMHhiYywweGRlLDB4ZjAgfSwKKysJeyAw eDhmLDB4OGYsMHhiZiwweDliLDB4NWQsMHg0OCwweGI0LDB4MWMgfSwKKysJeyAweDU5LDB4OGMs MHhlNSwweGQzLDB4NmMsMHhhMiwweGVhLDB4MWIgfSwKKysJfSwKKysJeworKwl7IDB4REMsMHhC QSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsMHhGRSwKKysJICAweDAxLDB4MjMsMHg0NSwweDY3 LDB4ODksMHhBQiwweENELDB4RUYsCisrCSAgMHhFRCwweDM5LDB4RDksMHg1MCwweEZBLDB4NzQs MHhCQywweEM0IH0sCisrCXsgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVG IH0sCisrCXsgMHgxMSwweDI1LDB4YjAsMHgzNSwweGJlLDB4YTAsMHg4MiwweDg2IH0sCisrCX0s CisrCX07CisrCisrCisrc3RhdGljIGludCBjb3JydXB0X2RlczsKKysKKyt2b2lkIEZJUFNfY29y cnVwdF9kZXMoKQorKyAgICB7CisrICAgIGNvcnJ1cHRfZGVzID0gMTsKKysgICAgfQorKworK2lu dCBGSVBTX3NlbGZ0ZXN0X2RlcygpCisrICAgIHsKKysgICAgaW50IG4sIHJldCA9IDA7CisrICAg IEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysg ICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBhbmQgY29tcGFyZSB0byBrbm93 biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKKysJeworKwl1bnNpZ25l ZCBjaGFyIHBsYWludGV4dFs4XTsKKysKKysJbWVtY3B5KHBsYWludGV4dCwgdGVzdHMyW25dLnBs YWludGV4dCwgc2l6ZW9mKHBsYWludGV4dCkpOworKwlpZiAoY29ycnVwdF9kZXMpCisrCQlwbGFp bnRleHRbMF0rKzsKKysJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2Vj YigpLAorKwkJCQl0ZXN0czJbbl0ua2V5LCBOVUxMLAorKwkJCQlwbGFpbnRleHQsIHRlc3RzMltu XS5jaXBoZXJ0ZXh0LCA4KSkKKysJCWdvdG8gZXJyOworKwl9CisrCisrICAgIC8qIEVuY3J5cHQv ZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLworKyAgICBm b3Iobj0wIDsgbiA8IDIgOyArK24pCisrCXsKKysJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgs IEVWUF9kZXNfZWRlM19lY2IoKSwKKysJCQkJdGVzdHMzW25dLmtleSwgTlVMTCwKKysJCQkJdGVz dHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBlcnI7 CisrCX0KKysgICAgcmV0ID0gMTsKKysgICAgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKCZjdHgpOworKyAgICBpZiAocmV0ID09IDApCisrCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysKKysgICAgcmV0dXJuIHJl dDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X2N0ci5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZp cHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjA3ODU2MTMgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjA3ODU2 MTMgKzAyMDAKK0BAIC0wLDAgKzEsNDM2IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19jdHIu YyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5v cmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVu U1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZp cHNfcmFuZF9sY2wuaCIKKysKKytzdGF0aWMgdm9pZCBpbmNfMTI4KERSQkdfQ1RSX0NUWCAqY2N0 eCkKKysJeworKwlpbnQgaTsKKysJdW5zaWduZWQgY2hhciBjOworKwl1bnNpZ25lZCBjaGFyICpw ID0gY2N0eC0+ViArIDE1OworKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKysJCXsKKysJCWMg PSAqcDsKKysJCWMrKzsKKysJCSpwID0gYzsKKysJCWlmIChjKQorKwkJCXJldHVybjsKKysJCXAt LTsKKysJCX0KKysJfQorKworK3N0YXRpYyB2b2lkIGN0cl9YT1IoRFJCR19DVFJfQ1RYICpjY3R4 LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorKwl7CisrCXNpemVfdCBp LCBuOworKwkvKiBBbnkgemVybyBwYWRkaW5nIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHJl c3VsdCBhcyB3ZQorKwkgKiBhcmUgWE9SaW5nLiBTbyBqdXN0IHByb2Nlc3MgaG93ZXZlciBtdWNo IGlucHV0IHdlIGhhdmUuCisrCSAqLworKworKwlpZiAoIWluIHx8ICFpbmxlbikKKysJCXJldHVy bjsKKysKKysJaWYgKGlubGVuIDwgY2N0eC0+a2V5bGVuKQorKwkJbiA9IGlubGVuOworKwllbHNl CisrCQluID0gY2N0eC0+a2V5bGVuOworKworKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorKwkJ Y2N0eC0+S1tpXSBePSBpbltpXTsKKysJaWYgKGlubGVuIDw9IGNjdHgtPmtleWxlbikKKysJCXJl dHVybjsKKysKKysJbiA9IGlubGVuIC0gY2N0eC0+a2V5bGVuOworKwkvKiBTaG91bGQgbmV2ZXIg aGFwcGVuICovCisrCWlmIChuID4gMTYpCisrCQluID0gMTY7CisrCWZvciAoaSA9IDA7IGkgPCAx NjsgaSsrKQorKwkJY2N0eC0+VltpXSBePSBpbltpICsgY2N0eC0+a2V5bGVuXTsKKysJfQorKwor Ky8qIFByb2Nlc3MgYSBjb21wbGV0ZSBibG9jayB1c2luZyBCQ0MgYWxnb3JpdGhtIG9mIFNQUCA4 MDAtOTAgMTAuNC4zICovCisrCisrc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9jayhEUkJHX0NUUl9D VFggKmNjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAq aW4pCisrCXsKKysJaW50IGk7CisrCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKwkJb3V0W2ld IF49IGluW2ldOworKwlBRVNfZW5jcnlwdChvdXQsIG91dCwgJmNjdHgtPmRmX2tzKTsKKysjaWYg MAorK2ZwcmludGYoc3RkZXJyLCAiQkNDIGluK291dFxuIik7CisrQklPX2R1bXBfZnAoc3RkZXJy LCBpbiwgMTYpOworK0JJT19kdW1wX2ZwKHN0ZGVyciwgb3V0LCAxNik7CisrI2VuZGlmCisrCX0K KysKKysvKiBIYW5kbGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0aW9ucyBmb3IgYXMgbXVjaCBkYXRhIGFz IHdlIG5lZWQgZm9yIEsgYW5kIFggKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrcyhEUkJH X0NUUl9DVFggKmNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluKQorKwl7CisrCWN0cl9CQ0Nf YmxvY2soY2N0eCwgY2N0eC0+S1gsIGluKTsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5L WCArIDE2LCBpbik7CisrCWlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrCQljdHJfQkNDX2Jsb2Nr KGNjdHgsIGNjdHgtPktYICsgMzIsIGluKTsKKysJfQorKy8qIEluaXRpYWxpc2UgQkNDIGJsb2Nr czogdGhlc2UgaGF2ZSB0aGUgdmFsdWUgMCwxLDIgaW4gbGVmdG1vc3QgcG9zaXRpb25zOgorKyAq IHNlZSAxMC40LjIgc3RhZ2UgNy4KKysgKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2luaXQoRFJC R19DVFJfQ1RYICpjY3R4KQorKwl7CisrCW1lbXNldChjY3R4LT5LWCwgMCwgNDgpOworKwltZW1z ZXQoY2N0eC0+Ymx0bXAsIDAsIDE2KTsKKysJY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwg Y2N0eC0+Ymx0bXApOworKwljY3R4LT5ibHRtcFszXSA9IDE7CisrCWN0cl9CQ0NfYmxvY2soY2N0 eCwgY2N0eC0+S1ggKyAxNiwgY2N0eC0+Ymx0bXApOworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2 KQorKwkJeworKwkJY2N0eC0+Ymx0bXBbM10gPSAyOworKwkJY3RyX0JDQ19ibG9jayhjY3R4LCBj Y3R4LT5LWCArIDMyLCBjY3R4LT5ibHRtcCk7CisrCQl9CisrCX0KKysKKysvKiBQcm9jZXNzIHNl dmVyYWwgYmxvY2tzIGludG8gQkNDIGFsZ29yaXRobSwgc29tZSBwb3NzaWJseSBwYXJ0aWFsICov Cisrc3RhdGljIHZvaWQgY3RyX0JDQ191cGRhdGUoRFJCR19DVFJfQ1RYICpjY3R4LAorKwkJCQlj b25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorKwl7CisrCWlmICghaW4gfHwg IWlubGVuKQorKwkJcmV0dXJuOworKwkvKiBJZiB3ZSBoYXZlIHBhcnRpYWwgYmxvY2sgaGFuZGxl IGl0IGZpcnN0ICovCisrCWlmIChjY3R4LT5ibHRtcF9wb3MpCisrCQl7CisrCQlzaXplX3QgbGVm dCA9IDE2IC0gY2N0eC0+Ymx0bXBfcG9zOworKwkJLyogSWYgd2Ugbm93IGhhdmUgYSBjb21wbGV0 ZSBibG9jayBwcm9jZXNzIGl0ICovCisrCQlpZiAoaW5sZW4gPj0gbGVmdCkKKysJCQl7CisrCQkJ bWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgbGVmdCk7CisrCQkJY3Ry X0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOworKwkJCWNjdHgtPmJsdG1wX3BvcyA9IDA7 CisrCQkJaW5sZW4gLT0gbGVmdDsKKysJCQlpbiArPSBsZWZ0OworKwkJCX0KKysJCX0KKysJLyog UHJvY2VzcyB6ZXJvIG9yIG1vcmUgY29tcGxldGUgYmxvY2tzICovCisrCXdoaWxlIChpbmxlbiA+ PSAxNikKKysJCXsKKysJCWN0cl9CQ0NfYmxvY2tzKGNjdHgsIGluKTsKKysJCWluICs9IDE2Owor KwkJaW5sZW4gLT0gMTY7CisrCQl9CisrCS8qIENvcHkgYW55IHJlbWFpbmluZyBwYXJ0aWFsIGJs b2NrIHRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCisrCWlmIChpbmxlbiA+IDApCisrCQl7Cisr CQltZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBpbmxlbik7CisrCQlj Y3R4LT5ibHRtcF9wb3MgKz0gaW5sZW47CisrCQl9CisrCX0KKysKKytzdGF0aWMgdm9pZCBjdHJf QkNDX2ZpbmFsKERSQkdfQ1RSX0NUWCAqY2N0eCkKKysJeworKwlpZiAoY2N0eC0+Ymx0bXBfcG9z KQorKwkJeworKwkJbWVtc2V0KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCAwLCAxNiAt IGNjdHgtPmJsdG1wX3Bvcyk7CisrCQljdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7 CisrCQl9CisrCX0KKysKKytzdGF0aWMgdm9pZCBjdHJfZGYoRFJCR19DVFJfQ1RYICpjY3R4LAor KwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysJCQljb25zdCB1 bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqaW4zLCBzaXplX3QgaW4zbGVuKQorKwl7CisrCXNpemVfdCBpbmxlbjsKKysJdW5zaWduZWQg Y2hhciAqcCA9IGNjdHgtPmJsdG1wOworKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjODAgPSAweDgw OworKworKwljdHJfQkNDX2luaXQoY2N0eCk7CisrCWlmICghaW4xKQorKwkJaW4xbGVuID0gMDsK KysJaWYgKCFpbjIpCisrCQlpbjJsZW4gPSAwOworKwlpZiAoIWluMykKKysJCWluM2xlbiA9IDA7 CisrCWlubGVuID0gaW4xbGVuICsgaW4ybGVuICsgaW4zbGVuOworKwkvKiBJbml0aWFsaXNlIEx8 fE4gaW4gdGVtcG9yYXJ5IGJsb2NrICovCisrCSpwKysgPSAoaW5sZW4gPj4gMjQpICYgMHhmZjsK KysJKnArKyA9IChpbmxlbiA+PiAxNikgJiAweGZmOworKwkqcCsrID0gKGlubGVuID4+IDgpICYg MHhmZjsKKysJKnArKyA9IGlubGVuICYgMHhmZjsKKysJLyogTkIga2V5bGVuIGlzIGF0IG1vc3Qg MzIgYnl0ZXMgKi8KKysJKnArKyA9IDA7CisrCSpwKysgPSAwOworKwkqcCsrID0gMDsKKysJKnAg PSAodW5zaWduZWQgY2hhcikoKGNjdHgtPmtleWxlbiArIDE2KSAmIDB4ZmYpOworKwljY3R4LT5i bHRtcF9wb3MgPSA4OworKwljdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjEsIGluMWxlbik7CisrCWN0 cl9CQ0NfdXBkYXRlKGNjdHgsIGluMiwgaW4ybGVuKTsKKysJY3RyX0JDQ191cGRhdGUoY2N0eCwg aW4zLCBpbjNsZW4pOworKwljdHJfQkNDX3VwZGF0ZShjY3R4LCAmYzgwLCAxKTsKKysJY3RyX0JD Q19maW5hbChjY3R4KTsKKysJLyogU2V0IHVwIGtleSBLICovCisrCUFFU19zZXRfZW5jcnlwdF9r ZXkoY2N0eC0+S1gsIGNjdHgtPmtleWxlbiAqIDgsICZjY3R4LT5kZl9reGtzKTsKKysJLyogWCBm b2xsb3dzIGtleSBLICovCisrCUFFU19lbmNyeXB0KGNjdHgtPktYICsgY2N0eC0+a2V5bGVuLCBj Y3R4LT5LWCwgJmNjdHgtPmRmX2t4a3MpOworKwlBRVNfZW5jcnlwdChjY3R4LT5LWCwgY2N0eC0+ S1ggKyAxNiwgJmNjdHgtPmRmX2t4a3MpOworKwlpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKwkJ QUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAxNiwgY2N0eC0+S1ggKyAzMiwgJmNjdHgtPmRmX2t4a3Mp OworKyNpZiAwCisrZnByaW50ZihzdGRlcnIsICJPdXRwdXQgb2YgY3RyX2RmOlxuIik7CisrQklP X2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICsgMTYpOworKyNlbmRpZgor Kwl9CisrCisrLyogTkIgdGhlIG5vLWRmICBVcGRhdGUgaW4gU1A4MDAtOTAgc3BlY2lmaWVzIGEg Y29uc3RhbnQgaW5wdXQgbGVuZ3RoCisrICogb2Ygc2VlZGxlbiwgaG93ZXZlciBvdGhlciB1c2Vz IG9mIHRoaXMgYWxnb3JpdGhtIHBhZCB0aGUgaW5wdXQgd2l0aAorKyAqIHplcm9lcyBpZiBuZWNl c3NhcnkgYW5kIGhhdmUgdXAgdG8gdHdvIHBhcmFtZXRlcnMgWE9SZWQgdG9nZXRoZXIsCisrICog aGFuZGxlIGJvdGggY2FzZXMgaW4gdGhpcyBmdW5jdGlvbiBpbnN0ZWFkLgorKyAqLworKworK3N0 YXRpYyB2b2lkIGN0cl9VcGRhdGUoRFJCR19DVFggKmRjdHgsCisrCQljb25zdCB1bnNpZ25lZCBj aGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNp emVfdCBpbjJsZW4sCisrCQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNl bGVuKQorKwl7CisrCURSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysJLyoga3Mg aXMgYWxyZWFkeSBzZXR1cCBmb3IgY29ycmVjdCBrZXkgKi8KKysJaW5jXzEyOChjY3R4KTsKKysJ QUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKKysJLyogSWYga2V5bGVu IGxvbmdlciB0aGFuIDEyOCBiaXRzIG5lZWQgZXh0cmEgZW5jcnlwdCAqLworKwlpZiAoY2N0eC0+ a2V5bGVuICE9IDE2KQorKwkJeworKwkJaW5jXzEyOChjY3R4KTsKKysJCUFFU19lbmNyeXB0KGNj dHgtPlYsIGNjdHgtPksgKyAxNiwgJmNjdHgtPmtzKTsKKysJCX0KKysJaW5jXzEyOChjY3R4KTsK KysJQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+ViwgJmNjdHgtPmtzKTsKKysJLyogSWYgMTky IGJpdCBrZXkgcGFydCBvZiBWIGlzIG9uIGVuZCBvZiBLICovCisrCWlmIChjY3R4LT5rZXlsZW4g PT0gMjQpCisrCQl7CisrCQltZW1jcHkoY2N0eC0+ViArIDgsIGNjdHgtPlYsIDgpOworKwkJbWVt Y3B5KGNjdHgtPlYsIGNjdHgtPksgKyAyNCwgOCk7CisrCQl9CisrCisrCWlmIChkY3R4LT54Zmxh Z3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikKKysJCXsKKysJCS8qIElmIG5vIGlucHV0IHJldXNl IGV4aXN0aW5nIGRlcml2ZWQgdmFsdWUgKi8KKysJCWlmIChpbjEgfHwgbm9uY2UgfHwgaW4yKQor KwkJCWN0cl9kZihjY3R4LCBpbjEsIGluMWxlbiwgbm9uY2UsIG5vbmNlbGVuLCBpbjIsIGluMmxl bik7CisrCQkvKiBJZiB0aGlzIGEgcmV1c2UgaW5wdXQgaW4xbGVuICE9IDAgKi8KKysJCWlmIChp bjFsZW4pCisrCQkJY3RyX1hPUihjY3R4LCBjY3R4LT5LWCwgZGN0eC0+c2VlZGxlbik7CisrCQl9 CisrCWVsc2UKKysJCXsKKysJCWN0cl9YT1IoY2N0eCwgaW4xLCBpbjFsZW4pOworKwkJY3RyX1hP UihjY3R4LCBpbjIsIGluMmxlbik7CisrCQl9CisrCisrCUFFU19zZXRfZW5jcnlwdF9rZXkoY2N0 eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7CisrI2lmIDAKKytmcHJpbnRmKHN0ZGVy ciwgIksrViBhZnRlciB1cGRhdGUgaXM6XG4iKTsKKytCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgt PkssIGNjdHgtPmtleWxlbik7CisrQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5WLCAxNik7Cisr I2VuZGlmCisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX2luc3RhbnRpYXRlKERSQkdfQ1RY ICpkY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAorKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQorKwl7CisrCURSQkdfQ1RSX0NU WCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysJbWVtc2V0KGNjdHgtPkssIDAsIHNpemVvZihjY3R4 LT5LKSk7CisrCW1lbXNldChjY3R4LT5WLCAwLCBzaXplb2YoY2N0eC0+VikpOworKwlBRVNfc2V0 X2VuY3J5cHRfa2V5KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKwljdHJf VXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBwZXJzLCBwZXJzbGVuLCBub25jZSwgbm9uY2VsZW4p OworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfcmVzZWVkKERSQkdf Q1RYICpkY3R4LCAKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4s CisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJ Y3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCk7Cisr CXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2N0cl9nZW5lcmF0ZShEUkJHX0NU WCAqZGN0eCwKKysJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJRFJCR19DVFJf Q1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOworKwlpZiAoYWRpbiAmJiBhZGlubGVuKQorKwkJewor KwkJY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKKysJ CS8qIFRoaXMgbWVhbnMgd2UgcmV1c2UgZGVyaXZlZCB2YWx1ZSAqLworKwkJaWYgKGRjdHgtPnhm bGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKQorKwkJCXsKKysJCQlhZGluID0gTlVMTDsKKysJ CQlhZGlubGVuID0gMTsKKysJCQl9CisrCQl9CisrCWVsc2UKKysJCWFkaW5sZW4gPSAwOworKwor Kwlmb3IgKDs7KQorKwkJeworKwkJaW5jXzEyOChjY3R4KTsKKysJCWlmICghKGRjdHgtPnhmbGFn cyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCisrCQkJeworKwkJCUFFU19l bmNyeXB0KGNjdHgtPlYsIGRjdHgtPmxiLCAmY2N0eC0+a3MpOworKwkJCWRjdHgtPmxiX3ZhbGlk ID0gMTsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAob3V0bGVuIDwgMTYpCisrCQkJewor KwkJCS8qIFVzZSBLIGFzIHRlbXAgc3BhY2UgYXMgaXQgd2lsbCBiZSB1cGRhdGVkICovCisrCQkJ QUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKKysJCQlpZiAoIWZpcHNf ZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGNjdHgtPkspKQorKwkJCQlyZXR1cm4gMDsKKysJCQltZW1j cHkob3V0LCBjY3R4LT5LLCBvdXRsZW4pOworKwkJCWJyZWFrOworKwkJCX0KKysJCUFFU19lbmNy eXB0KGNjdHgtPlYsIG91dCwgJmNjdHgtPmtzKTsKKysJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rl c3QoZGN0eCwgb3V0KSkKKysJCQlyZXR1cm4gMDsKKysJCW91dCArPSAxNjsKKysJCW91dGxlbiAt PSAxNjsKKysJCWlmIChvdXRsZW4gPT0gMCkKKysJCQlicmVhazsKKysJCX0KKysKKysJY3RyX1Vw ZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKKysKKysJcmV0dXJu IDE7CisrCisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX3VuaW5zdGFudGlhdGUoRFJCR19D VFggKmRjdHgpCisrCXsKKysJbWVtc2V0KCZkY3R4LT5kLmN0ciwgMCwgc2l6ZW9mKERSQkdfQ1RS X0NUWCkpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJC R19DVFggKmRjdHgpCisrCXsKKysJRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwor KworKwlzaXplX3Qga2V5bGVuOworKworKwlzd2l0Y2ggKGRjdHgtPnR5cGUpCisrCQl7CisrCQlj YXNlIE5JRF9hZXNfMTI4X2N0cjoKKysJCWtleWxlbiA9IDE2OworKwkJYnJlYWs7CisrCisrCQlj YXNlIE5JRF9hZXNfMTkyX2N0cjoKKysJCWtleWxlbiA9IDI0OworKwkJYnJlYWs7CisrCisrCQlj YXNlIE5JRF9hZXNfMjU2X2N0cjoKKysJCWtleWxlbiA9IDMyOworKwkJYnJlYWs7CisrCisrCQlk ZWZhdWx0OgorKwkJcmV0dXJuIC0yOworKwkJfQorKworKwlkY3R4LT5pbnN0YW50aWF0ZSA9IGRy YmdfY3RyX2luc3RhbnRpYXRlOworKwlkY3R4LT5yZXNlZWQgPSBkcmJnX2N0cl9yZXNlZWQ7Cisr CWRjdHgtPmdlbmVyYXRlID0gZHJiZ19jdHJfZ2VuZXJhdGU7CisrCWRjdHgtPnVuaW5zdGFudGlh dGUgPSBkcmJnX2N0cl91bmluc3RhbnRpYXRlOworKworKwljY3R4LT5rZXlsZW4gPSBrZXlsZW47 CisrCWRjdHgtPnN0cmVuZ3RoID0ga2V5bGVuICogODsKKysJZGN0eC0+YmxvY2tsZW5ndGggPSAx NjsKKysJZGN0eC0+c2VlZGxlbiA9IGtleWxlbiArIDE2OworKworKwlpZiAoZGN0eC0+eGZsYWdz ICYgRFJCR19GTEFHX0NUUl9VU0VfREYpCisrCQl7CisrCQkvKiBkZiBpbml0aWFsaXNhdGlvbiAq LworKwkJc3RhdGljIHVuc2lnbmVkIGNoYXIgZGZfa2V5WzMyXSA9CisrCQkJeworKwkJCTB4MDAs MHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKKysJCQkweDA4LDB4MDksMHgwYSww eDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsCisrCQkJMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4 MTUsMHgxNiwweDE3LAorKwkJCTB4MTgsMHgxOSwweDFhLDB4MWIsMHgxYywweDFkLDB4MWUsMHgx ZiAKKysJCQl9OworKwkJLyogU2V0IGtleSBzY2hlZHVsZSBmb3IgZGZfa2V5ICovCisrCQlBRVNf c2V0X2VuY3J5cHRfa2V5KGRmX2tleSwgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5kZl9rcyk7Cisr CisrCQlkY3R4LT5taW5fZW50cm9weSA9IGNjdHgtPmtleWxlbjsKKysJCWRjdHgtPm1heF9lbnRy b3B5ID0gRFJCR19NQVhfTEVOR1RIOworKwkJZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2Vu dHJvcHkgLyAyOworKwkJZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOworKwkJZGN0 eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7CisrCQlkY3R4LT5tYXhfYWRpbiA9IERSQkdf TUFYX0xFTkdUSDsKKysJCX0KKysJZWxzZQorKwkJeworKwkJZGN0eC0+bWluX2VudHJvcHkgPSBk Y3R4LT5zZWVkbGVuOworKwkJZGN0eC0+bWF4X2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOworKwkJ LyogTm9uY2Ugbm90IHVzZWQgKi8KKysJCWRjdHgtPm1pbl9ub25jZSA9IDA7CisrCQlkY3R4LT5t YXhfbm9uY2UgPSAwOworKwkJZGN0eC0+bWF4X3BlcnMgPSBkY3R4LT5zZWVkbGVuOworKwkJZGN0 eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVkbGVuOworKwkJfQorKworKwlkY3R4LT5tYXhfcmVxdWVz dCA9IDE8PDE2OworKwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKKysKKysJcmV0dXJu IDE7CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19o YXNoLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCist LS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzCTIwMTIt MDQtMjAgMDk6MDc6MDYuMjYwNzg1NjEzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX2hhc2guYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2MTc4NTYzNSArMDIw MAorQEAgLTAsMCArMSwzNzggQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2hhc2guYyAqLwor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8 c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz X3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworKy8qIFRoaXMgaXMgSGFz aF9kZiBmcm9tIFNQIDgwMC05MCAxMC40LjEgKi8KKysKKytzdGF0aWMgaW50IGhhc2hfZGYoRFJC R19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFy ICppbjEsIHNpemVfdCBpbjFsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXpl X3QgaW4ybGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbiwK KysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppbjQsIHNpemVfdCBpbjRsZW4pCisrCXsKKysJRVZQ X01EX0NUWCAqbWN0eCA9ICZkY3R4LT5kLmhhc2gubWN0eDsKKysJdW5zaWduZWQgY2hhciAqdnRt cCA9IGRjdHgtPmQuaGFzaC52dG1wOworKwl1bnNpZ25lZCBjaGFyIHRtcFs2XTsKKysJLyogU3Rh bmRhcmQgb25seSBldmVyIG5lZWRzIHNlZWRsZW4gYnl0ZXMgd2hpY2ggaXMgYWx3YXlzIGxlc3Mg dGhhbgorKwkgKiBtYXhpbXVtIHBlcm1pdHRlZCBzbyBubyBuZWVkIHRvIGNoZWNrIGxlbmd0aC4K KysJICovCisrCXNpemVfdCBvdXRsZW4gPSBkY3R4LT5zZWVkbGVuOworKwl0bXBbMF0gPSAxOwor Kwl0bXBbMV0gPSAoKG91dGxlbiAqIDgpID4+IDI0KSAmIDB4ZmY7CisrCXRtcFsyXSA9ICgob3V0 bGVuICogOCkgPj4gMTYpICYgMHhmZjsKKysJdG1wWzNdID0gKChvdXRsZW4gKiA4KSA+PiA4KSAm IDB4ZmY7CisrCXRtcFs0XSA9IChvdXRsZW4gKiA4KSAmIDB4ZmY7CisrCWlmICghaW4xKQorKwkJ eworKwkJdG1wWzVdID0gKHVuc2lnbmVkIGNoYXIpaW4xbGVuOworKwkJaW4xID0gdG1wICsgNTsK KysJCWluMWxlbiA9IDE7CisrCQl9CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAoIUZJUFNfZGln ZXN0aW5pdChtY3R4LCBkY3R4LT5kLmhhc2gubWQpKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFG SVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCB0bXAsIDUpKQorKwkJCXJldHVybiAwOworKwkJaWYgKGlu MSAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4xLCBpbjFsZW4pKQorKwkJCXJldHVybiAw OworKwkJaWYgKGluMiAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4yLCBpbjJsZW4pKQor KwkJCXJldHVybiAwOworKwkJaWYgKGluMyAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4z LCBpbjNsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKGluNCAmJiAhRklQU19kaWdlc3R1cGRh dGUobWN0eCwgaW40LCBpbjRsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKG91dGxlbiA8IGRj dHgtPmJsb2NrbGVuZ3RoKQorKwkJCXsKKysJCQlpZiAoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwg dnRtcCwgTlVMTCkpCisrCQkJCXJldHVybiAwOworKwkJCW1lbWNweShvdXQsIHZ0bXAsIG91dGxl bik7CisrCQkJT1BFTlNTTF9jbGVhbnNlKHZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJCQly ZXR1cm4gMTsKKysJCQl9CisrCQllbHNlIGlmKCFGSVBTX2RpZ2VzdGZpbmFsKG1jdHgsIG91dCwg TlVMTCkpCisrCQkJcmV0dXJuIDA7CisrCisrCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7 CisrCQlpZiAob3V0bGVuID09IDApCisrCQkJcmV0dXJuIDE7CisrCQl0bXBbMF0rKzsKKysJCW91 dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysJCX0KKysJfQorKworKworKy8qIEFkZCBhbiB1bnNp Z25lZCBidWZmZXIgdG8gdGhlIGJ1ZiB2YWx1ZSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIGJ1Zi4g Rm9yCisrICogdGhpcyBhbGdvcml0aG0gdGhlIGxlbmd0aCBvZiBpbnB1dCBuZXZlciBleGNlZWRz IHRoZSBzZWVkIGxlbmd0aC4KKysgKi8KKysKKytzdGF0aWMgdm9pZCBjdHhfYWRkX2J1ZihEUkJH X0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqYnVmLAorKwkJCQl1bnNpZ25lZCBjaGFyICppbiwg c2l6ZV90IGlubGVuKQorKwl7CisrCXNpemVfdCBpID0gaW5sZW47CisrCWNvbnN0IHVuc2lnbmVk IGNoYXIgKnE7CisrCXVuc2lnbmVkIGNoYXIgYywgKnA7CisrCXAgPSBidWYgKyBkY3R4LT5zZWVk bGVuOworKwlxID0gaW4gKyBpbmxlbjsKKysKKysJT1BFTlNTTF9hc3NlcnQoaSA8PSBkY3R4LT5z ZWVkbGVuKTsKKysKKysJLyogU3BlY2lhbCBjYXNlOiB6ZXJvIGxlbmd0aCwganVzdCBpbmNyZW1l bnQgYnVmZmVyICovCisrCWlmIChpKQorKwkJYyA9IDA7CisrCWVsc2UgCisrCQljID0gMTsKKysK KysJd2hpbGUgKGkpCisrCQl7CisrCQlpbnQgcjsKKysJCXAtLTsKKysJCXEtLTsKKysJCXIgPSAq cCArICpxICsgYzsKKysJCS8qIENhcnJ5ICovCisrCQlpZiAociA+IDB4ZmYpCisrCQkJYyA9IDE7 CisrCQllbHNlCisrCQkJYyA9IDA7CisrCQkqcCA9IHIgJiAweGZmOworKwkJaS0tOworKwkJfQor KworKwlpID0gZGN0eC0+c2VlZGxlbiAtIGlubGVuOworKworKwkvKiBJZiBub3QgYWRkaW5nIHdo b2xlIGJ1ZmZlciBoYW5kbGUgZmluYWwgY2FycmllcyAqLworKwlpZiAoYyAmJiBpKQorKwkJewor KwkJZG8KKysJCQl7CisrCQkJcC0tOworKwkJCWMgPSAqcDsKKysJCQljKys7CisrCQkJKnAgPSBj OworKwkJCWlmKGMpCisrCQkJCXJldHVybjsKKysJCQl9IHdoaWxlKGktLSk7CisrCQl9CisrCX0K KysKKysvKiBGaW5hbGlzZSBhbmQgYWRkIGhhc2ggdG8gViAqLworKwkKKytzdGF0aWMgaW50IGN0 eF9hZGRfbWQoRFJCR19DVFggKmRjdHgpCisrCXsKKysJaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKCZk Y3R4LT5kLmhhc2gubWN0eCwgZGN0eC0+ZC5oYXNoLnZ0bXAsIE5VTEwpKQorKwkJCXJldHVybiAw OworKwljdHhfYWRkX2J1ZihkY3R4LCBkY3R4LT5kLmhhc2guViwgZGN0eC0+ZC5oYXNoLnZ0bXAs IGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGhh c2hfZ2VuKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4p CisrCXsKKysJRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCWlmIChvdXRs ZW4gPT0gMCkKKysJCXJldHVybiAxOworKwltZW1jcHkoaGN0eC0+dnRtcCwgaGN0eC0+ViwgZGN0 eC0+c2VlZGxlbik7CisrCWZvcig7OykKKysJCXsKKysJCUZJUFNfZGlnZXN0aW5pdCgmaGN0eC0+ bWN0eCwgaGN0eC0+bWQpOworKwkJRklQU19kaWdlc3R1cGRhdGUoJmhjdHgtPm1jdHgsIGhjdHgt PnZ0bXAsIGRjdHgtPnNlZWRsZW4pOworKwkJaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFH X1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkKKysJCQl7CisrCQkJRklQU19kaWdlc3RmaW5hbCgm aGN0eC0+bWN0eCwgZGN0eC0+bGIsIE5VTEwpOworKwkJCWRjdHgtPmxiX3ZhbGlkID0gMTsKKysJ CQl9CisrCQllbHNlIGlmIChvdXRsZW4gPCBkY3R4LT5ibG9ja2xlbmd0aCkKKysJCQl7CisrCQkJ RklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgaGN0eC0+dnRtcCwgTlVMTCk7CisrCQkJaWYg KCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBoY3R4LT52dG1wKSkKKysJCQkJcmV0dXJuIDA7 CisrCQkJbWVtY3B5KG91dCwgaGN0eC0+dnRtcCwgb3V0bGVuKTsKKysJCQlyZXR1cm4gMTsKKysJ CQl9CisrCQllbHNlCisrCQkJeworKwkJCUZJUFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIG91 dCwgTlVMTCk7CisrCQkJaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQorKwkJ CQlyZXR1cm4gMDsKKysJCQlvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7CisrCQkJaWYgKG91 dGxlbiA9PSAwKQorKwkJCQlyZXR1cm4gMTsKKysJCQlvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7 CisrCQkJfQorKwkJY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+dnRtcCwgTlVMTCwgMCk7CisrCQl9 CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaGFzaF9pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0 eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJ Y29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZV9sZW4sCisrCQkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKKysJeworKwlEUkJHX0hBU0hf Q1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPlYs IAorKwkJCWVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4sCisr CQkJTlVMTCwgMCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMs IAorKwkJCU5VTEwsIDAsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sCisrCQkJTlVMTCwgMCwgTlVM TCwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCisrCWZwcmlu dGYoc3RkZXJyLCAiVitDIGFmdGVyIGluc3RhbnRpYXRlOlxuIik7CisrCWhleHByaW50KHN0ZGVy ciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7CisrCWhleHByaW50KHN0ZGVyciwgaGN0eC0+Qywg ZGN0eC0+c2VlZGxlbik7CisrI2VuZGlmCisrCXJldHVybiAxOworKwl9CisrCisrCQorK3N0YXRp YyBpbnQgZHJiZ19oYXNoX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysJCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbiwgc2l6ZV90IGFkaW5fbGVuKQorKwl7CisrCURSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0 eC0+ZC5oYXNoOworKwkvKiBWIGFib3V0IHRvIGJlIHVwZGF0ZWQgc28gdXNlIEMgYXMgb3V0cHV0 IGluc3RlYWQgKi8KKysJaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsCisrCQkJTlVMTCwgMSwg aGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwKKysJCQllbnQsIGVudF9sZW4sIGFkaW4sIGFkaW5fbGVu KSkKKysJCXJldHVybiAwOworKwltZW1jcHkoaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxl bik7CisrCWlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLCBOVUxMLCAwLAorKwkJCWhjdHgtPlYs IGRjdHgtPnNlZWRsZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorKwkJcmV0dXJuIDA7CisrI2lmZGVm IEhBU0hfRFJCR19UUkFDRQorKwlmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciByZXNlZWQ6XG4i KTsKKysJaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJaGV4cHJp bnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7 CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaGFzaF9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwK KysJCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCQljb25zdCB1bnNp Z25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisrCXsKKysJRFJCR19IQVNIX0NUWCAq aGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrCUVWUF9NRF9DVFggKm1jdHggPSAmaGN0eC0+bWN0eDsK KysJdW5zaWduZWQgY2hhciB0bXBbNF07CisrCWlmIChhZGluICYmIGFkaW5fbGVuKQorKwkJewor KwkJdG1wWzBdID0gMjsKKysJCWlmICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGhjdHgtPm1kKSkK KysJCQlyZXR1cm4gMDsKKysJCWlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQor KwkJCXJldHVybiAwOworKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRj dHgtPnNlZWRsZW4pKQorKwkJCXJldHVybiAwOworKwkJaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1j dHgsIGFkaW4sIGFkaW5fbGVuKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghY3R4X2FkZF9tZChk Y3R4KSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFoYXNoX2dlbihkY3R4LCBvdXQsIG91 dGxlbikpCisrCQlyZXR1cm4gMDsKKysKKysJdG1wWzBdID0gMzsKKysJaWYgKCFGSVBTX2RpZ2Vz dGluaXQobWN0eCwgaGN0eC0+bWQpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRVZQX0RpZ2VzdFVw ZGF0ZShtY3R4LCB0bXAsIDEpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRVZQX0RpZ2VzdFVwZGF0 ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKSkKKysJCXJldHVybiAwOworKworKwlpZiAo IWN0eF9hZGRfbWQoZGN0eCkpCisrCQlyZXR1cm4gMDsKKysKKysJY3R4X2FkZF9idWYoZGN0eCwg aGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrCisrCXRtcFswXSA9IChkY3R4LT5y ZXNlZWRfY291bnRlciA+PiAyNCkgJiAweGZmOworKwl0bXBbMV0gPSAoZGN0eC0+cmVzZWVkX2Nv dW50ZXIgPj4gMTYpICYgMHhmZjsKKysJdG1wWzJdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+ IDgpICYgMHhmZjsKKysJdG1wWzNdID0gZGN0eC0+cmVzZWVkX2NvdW50ZXIgJiAweGZmOworKwlj dHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCB0bXAsIDQpOworKyNpZmRlZiBIQVNIX0RSQkdfVFJB Q0UKKysJZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgZ2VuZXJhdGU6XG4iKTsKKysJaGV4cHJp bnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysJaGV4cHJpbnQoc3RkZXJyLCBo Y3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytz dGF0aWMgaW50IGRyYmdfaGFzaF91bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQorKwl7Cisr CUVWUF9NRF9DVFhfY2xlYW51cCgmZGN0eC0+ZC5oYXNoLm1jdHgpOworKwlPUEVOU1NMX2NsZWFu c2UoJmRjdHgtPmQuaGFzaCwgc2l6ZW9mKERSQkdfSEFTSF9DVFgpKTsKKysJcmV0dXJuIDE7Cisr CX0KKysKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCkKKysJeworKwlj b25zdCBFVlBfTUQgKm1kOworKwlEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsK KysJbWQgPSBGSVBTX2dldF9kaWdlc3RieW5pZChkY3R4LT50eXBlKTsKKysJaWYgKCFtZCkKKysJ CXJldHVybiAtMjsKKysJc3dpdGNoIChkY3R4LT50eXBlKQorKwkJeworKwkJY2FzZSBOSURfc2hh MToKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTI4OworKwkJYnJlYWs7CisrCisrCQljYXNlIE5JRF9z aGEyMjQ6CisrCQlkY3R4LT5zdHJlbmd0aCA9IDE5MjsKKysJCWJyZWFrOworKworKwkJZGVmYXVs dDoKKysJCWRjdHgtPnN0cmVuZ3RoID0gMjU2OworKwkJYnJlYWs7CisrCQl9CisrCisrCWRjdHgt Pmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX2luc3RhbnRpYXRlOworKwlkY3R4LT5yZXNlZWQgPSBk cmJnX2hhc2hfcmVzZWVkOworKwlkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaGFzaF9nZW5lcmF0ZTsK KysJZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF91bmluc3RhbnRpYXRlOworKworKwlk Y3R4LT5kLmhhc2gubWQgPSBtZDsKKysJRVZQX01EX0NUWF9pbml0KCZoY3R4LT5tY3R4KTsKKysK KysJLyogVGhlc2UgYXJlIHRha2VuIGZyb20gU1AgODAwLTkwIDEwLjEgdGFibGUgMiAqLworKwor KwlkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01EX3NpemUobWQpOworKwlpZiAoZGN0eC0+Ymxv Y2tsZW5ndGggPiAzMikKKysJCWRjdHgtPnNlZWRsZW4gPSAxMTE7CisrCWVsc2UKKysJCWRjdHgt PnNlZWRsZW4gPSA1NTsKKysKKysKKysJZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0 aCAvIDg7CisrCWRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOworKworKwlkY3R4 LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7CisrCWRjdHgtPm1heF9ub25jZSA9 IERSQkdfTUFYX0xFTkdUSDsKKysKKysJZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7 CisrCWRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOworKworKwlkY3R4LT5tYXhfcmVx dWVzdCA9IDE8PDE2OworKwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxPDwyNDsKKysKKysJcmV0 dXJuIDE7CisrCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5j CistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBzCTIw MTItMDQtMjAgMDk6MDc6MDYuMjYxNzg1NjM1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2MTc4NTYzNSAr MDIwMAorQEAgLTAsMCArMSwyODEgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2htYWMuYyAq LworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcp IGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0Ogor KyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NM Lm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z CisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVz Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrc3RhdGljIGludCBkcmJn X2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpp bjEsIHNpemVfdCBpbjFsZW4sCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90 IGluMmxlbiwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuCisr CQkJKQorKwl7CisrCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGMwID0gMCwgYzEgPSAxOworKwlEUkJH X0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysJSE1BQ19DVFggKmhjdHggPSAmaG1h Yy0+aGN0eDsKKysKKysJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+Ymxv Y2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBk YXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOworKwlp ZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZjMCwgMSkpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluMWxl biAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlm IChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKKysJCXJldHVybiAw OworKwlpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCisrCQly ZXR1cm4gMDsKKysKKysJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQorKwkJ cmV0dXJuIDA7CisrCisrCWlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJs b2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysJaWYgKCFITUFDX1Vw ZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrCQlyZXR1cm4gMDsKKysK KysJaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQorKwkJcmV0dXJuIDA7Cisr CisrCWlmICghaW4xbGVuICYmICFpbjJsZW4gJiYgIWluM2xlbikKKysJCXJldHVybiAxOworKwor KwlpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1h Yy0+bWQsIE5VTEwpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1h Yy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKwkJcmV0dXJuIDA7CisrCWlmICghSE1BQ19VcGRh dGUoaGN0eCwgJmMxLCAxKSkKKysJCXJldHVybiAwOworKwlpZiAoaW4xbGVuICYmICFITUFDX1Vw ZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCisrCQlyZXR1cm4gMDsKKysJaWYgKGluMmxlbiAmJiAh SE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbjNs ZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4zbGVuKSkKKysJCXJldHVybiAwOworKwor KwlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+SywgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysK KysJaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGht YWMtPm1kLCBOVUxMKSkKKysJCXJldHVybiAwOworKwlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGht YWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXJldHVybiAwOworKworKwlpZiAoIUhNQUNf RmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7 CisrCisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY19pbnN0YW50aWF0ZShEUkJHX0NUWCAq ZGN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysJ CQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZV9sZW4sCisrCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKKysJeworKwlEUkJHX0hN QUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysJbWVtc2V0KGhtYWMtPkssIDAsIGRjdHgt PmJsb2NrbGVuZ3RoKTsKKysJbWVtc2V0KGhtYWMtPlYsIDEsIGRjdHgtPmJsb2NrbGVuZ3RoKTsK KysJaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCisrCQkJZW50LCBlbnRfbGVuLCBub25jZSwg bm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbikpCisrCQlyZXR1cm4gMDsKKysKKysjaWZkZWYgSE1B Q19EUkJHX1RSQUNFCisrCWZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIGluc3RhbnRpYXRlOlxu Iik7CisrCWhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOworKwlo ZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysjZW5kaWYKKysJ cmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY19yZXNlZWQoRFJCR19DVFgg KmRjdHgsCisrCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisr CQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKysJeworKwlp ZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKKysJCQllbnQsIGVudF9sZW4sIGFkaW4sIGFkaW5f bGVuLCBOVUxMLCAwKSkKKysJCXJldHVybiAwOworKworKyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UK KysJeworKwkJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrCQlmcHJpbnRm KHN0ZGVyciwgIksrViBhZnRlciByZXNlZWQ6XG4iKTsKKysJCWhleHByaW50KHN0ZGVyciwgaG1h Yy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOworKwkJaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBo bWFjLT5ibG9ja2xlbmd0aCk7CisrCX0KKysjZW5kaWYKKysJcmV0dXJuIDE7CisrCX0KKysKKytz dGF0aWMgaW50IGRyYmdfaG1hY19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKKysJCQkJdW5zaWdu ZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICph ZGluLCBzaXplX3QgYWRpbl9sZW4pCisrCXsKKysJRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4 LT5kLmhtYWM7CisrCUhNQUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhjdHg7CisrCWNvbnN0IHVuc2ln bmVkIGNoYXIgKlZ0bXAgPSBobWFjLT5WOworKwlpZiAoYWRpbl9sZW4gJiYgIWRyYmdfaG1hY191 cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sCisrCQkJCQkJTlVMTCwgMCwgTlVMTCwgMCkpCisr CQlyZXR1cm4gMDsKKysJZm9yICg7OykKKysJCXsKKysJCWlmICghSE1BQ19Jbml0X2V4KGhjdHgs IGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLAorKwkJCQkJCQlobWFjLT5tZCwgTlVMTCkpCisr CQkJcmV0dXJuIDA7CisrCQlpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIFZ0bXAsIGRjdHgtPmJsb2Nr bGVuZ3RoKSkKKysJCQlyZXR1cm4gMDsKKysJCWlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxB R19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpCisrCQkJeworKwkJCWlmICghSE1BQ19GaW5hbCho Y3R4LCBkY3R4LT5sYiwgTlVMTCkpCisrCQkJCXJldHVybiAwOworKwkJCWRjdHgtPmxiX3ZhbGlk ID0gMTsKKysJCQlWdG1wID0gZGN0eC0+bGI7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJZWxz ZSBpZiAob3V0bGVuID4gZGN0eC0+YmxvY2tsZW5ndGgpCisrCQkJeworKwkJCWlmICghSE1BQ19G aW5hbChoY3R4LCBvdXQsIE5VTEwpKQorKwkJCQlyZXR1cm4gMDsKKysJCQlpZiAoIWZpcHNfZHJi Z19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisrCQkJCXJldHVybiAwOworKwkJCVZ0bXAgPSBvdXQ7 CisrCQkJfQorKwkJZWxzZQorKwkJCXsKKysJCQlpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ ViwgTlVMTCkpCisrCQkJCXJldHVybiAwOworKwkJCWlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3Qo ZGN0eCwgaG1hYy0+VikpCisrCQkJCXJldHVybiAwOworKwkJCW1lbWNweShvdXQsIGhtYWMtPlYs IG91dGxlbik7CisrCQkJYnJlYWs7CisrCQkJfQorKwkJb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3Ro OworKwkJb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOworKwkJfQorKwlpZiAoIWRyYmdfaG1h Y191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorKwkJcmV0 dXJuIDA7CisrCisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfdW5p bnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKysJeworKwlITUFDX0NUWF9jbGVhbnVwKCZkY3R4 LT5kLmhtYWMuaGN0eCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5obWFjLCBzaXplb2Yo RFJCR19ITUFDX0NUWCkpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBzX2RyYmdfaG1h Y19pbml0KERSQkdfQ1RYICpkY3R4KQorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOwor KwlEUkJHX0hNQUNfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaG1hYzsKKysJZGN0eC0+c3RyZW5ndGgg PSAyNTY7CisrCXN3aXRjaCAoZGN0eC0+dHlwZSkKKysJCXsKKysJCWNhc2UgTklEX2htYWNXaXRo U0hBMToKKysJCW1kID0gRVZQX3NoYTEoKTsKKysJCWRjdHgtPnN0cmVuZ3RoID0gMTI4OworKwkJ YnJlYWs7CisrCisrCQljYXNlIE5JRF9obWFjV2l0aFNIQTIyNDoKKysJCW1kID0gRVZQX3NoYTIy NCgpOworKwkJZGN0eC0+c3RyZW5ndGggPSAxOTI7CisrCQlicmVhazsKKysKKysJCWNhc2UgTklE X2htYWNXaXRoU0hBMjU2OgorKwkJbWQgPSBFVlBfc2hhMjU2KCk7CisrCQlicmVhazsKKysKKysJ CWNhc2UgTklEX2htYWNXaXRoU0hBMzg0OgorKwkJbWQgPSBFVlBfc2hhMzg0KCk7CisrCQlicmVh azsKKysKKysJCWNhc2UgTklEX2htYWNXaXRoU0hBNTEyOgorKwkJbWQgPSBFVlBfc2hhNTEyKCk7 CisrCQlicmVhazsKKysKKysJCWRlZmF1bHQ6CisrCQlkY3R4LT5zdHJlbmd0aCA9IDA7CisrCQly ZXR1cm4gLTI7CisrCQl9CisrICAgICAgICBkY3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY19p bnN0YW50aWF0ZTsKKysgICAgICAgIGRjdHgtPnJlc2VlZCA9IGRyYmdfaG1hY19yZXNlZWQ7Cisr ICAgICAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1hY19nZW5lcmF0ZTsKKysgICAgICAgIGRj dHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2htYWNfdW5pbnN0YW50aWF0ZTsKKysJSE1BQ19DVFhf aW5pdCgmaGN0eC0+aGN0eCk7CisrCWhjdHgtPm1kID0gbWQ7CisrCWRjdHgtPmJsb2NrbGVuZ3Ro ID0gTV9FVlBfTURfc2l6ZShtZCk7CisrCWRjdHgtPnNlZWRsZW4gPSBNX0VWUF9NRF9zaXplKG1k KTsKKysKKysgICAgICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c3RyZW5ndGggLyA4Owor KyAgICAgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgICAg ICBkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7CisrICAgICAgICBkY3R4 LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgICAgICBkY3R4LT5tYXhfcGVy cyA9IERSQkdfTUFYX0xFTkdUSDsKKysgICAgICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhf TEVOR1RIOworKworKyAgICAgICAgZGN0eC0+bWF4X3JlcXVlc3QgPSAxPDwxNjsKKysgICAgICAg IGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDE8PDI0OworKworKwlyZXR1cm4gMTsKKysJfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jCistLS0gb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4y NjI3ODU2NTYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RyYmdf bGliLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjI3ODU2NTYgKzAyMDAKK0BAIC0wLDAgKzEsNTc4 IEBACisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9y ZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKyNpbmNsdWRlICJm aXBzX3JhbmRfbGNsLmgiCisrCisrLyogU3VwcG9ydCBmcmFtZXdvcmsgZm9yIFNQODAwLTkwIERS QkdzICovCisrCisraW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwg dW5zaWduZWQgaW50IGZsYWdzKQorKwl7CisrCWludCBydjsKKysJbWVtc2V0KGRjdHgsIDAsIHNp emVvZihEUkJHX0NUWCkpOworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJ U0VEOworKwlkY3R4LT54ZmxhZ3MgPSBmbGFnczsKKysJZGN0eC0+dHlwZSA9IHR5cGU7CisrCisr CWRjdHgtPmlmbGFncyA9IDA7CisrCWRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSAwOworKwlkY3R4 LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKKysJZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0g RFJCR19IRUFMVEhfSU5URVJWQUw7CisrCisrCXJ2ID0gZmlwc19kcmJnX2hhc2hfaW5pdChkY3R4 KTsKKysKKysJaWYgKHJ2ID09IC0yKQorKwkJcnYgPSBmaXBzX2RyYmdfY3RyX2luaXQoZGN0eCk7 CisrCWlmIChydiA9PSAtMikKKysJCXJ2ID0gZmlwc19kcmJnX2htYWNfaW5pdChkY3R4KTsKKysK KysJaWYgKHJ2IDw9IDApCisrCQl7CisrCQlpZiAocnYgPT0gLTIpCisrCQkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpOworKwkJZWxz ZQorKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfRVJST1JfSU5JVElB TElTSU5HX0RSQkcpOworKwkJfQorKworKwkvKiBJZiBub3QgaW4gdGVzdCBtb2RlIHJ1biBzZWxm dGVzdHMgb24gRFJCRyBvZiB0aGUgc2FtZSB0eXBlICovCisrCisrCWlmICghKGRjdHgtPnhmbGFn cyAmIERSQkdfRkxBR19URVNUKSkKKysJCXsKKysJCWlmICghRklQU19kcmJnX2hlYWx0aF9jaGVj ayhkY3R4KSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNf Ul9TRUxGVEVTVF9GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCisrCXJl dHVybiBydjsKKysJfQorKworK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNp Z25lZCBpbnQgZmxhZ3MpCisrCXsKKysJRFJCR19DVFggKmRjdHg7CisrCWRjdHggPSBPUEVOU1NM X21hbGxvYyhzaXplb2YoRFJCR19DVFgpKTsKKysJaWYgKCFkY3R4KQorKwkJeworKwkJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX05FVywgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworKwkJcmV0dXJu IE5VTEw7CisrCQl9CisrCisrCWlmICh0eXBlID09IDApCisrCQl7CisrCQltZW1zZXQoZGN0eCwg MCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrCQlkY3R4LT50eXBlID0gMDsKKysJCWRjdHgtPnN0YXR1 cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrCQlyZXR1cm4gZGN0eDsKKysJCX0KKysK KysJaWYgKEZJUFNfZHJiZ19pbml0KGRjdHgsIHR5cGUsIGZsYWdzKSA8PSAwKQorKwkJeworKwkJ T1BFTlNTTF9mcmVlKGRjdHgpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrCQkKKysJcmV0dXJu IGRjdHg7CisrCX0KKysKKyt2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpkY3R4KQorKwl7 CisrCWlmIChkY3R4LT51bmluc3RhbnRpYXRlKQorKwkJZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4 KTsKKysJLyogRG9uJ3QgZnJlZSB1cCBkZWZhdWx0IERSQkcgKi8KKysJaWYgKGRjdHggPT0gRklQ U19nZXRfZGVmYXVsdF9kcmJnKCkpCisrCQl7CisrCQltZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERS QkdfQ1RYKSk7CisrCQlkY3R4LT50eXBlID0gMDsKKysJCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RB VFVTX1VOSU5JVElBTElTRUQ7CisrCQl9CisrCWVsc2UKKysJCXsKKysJCU9QRU5TU0xfY2xlYW5z ZSgmZGN0eC0+ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKKysJCU9QRU5TU0xfZnJlZShkY3R4KTsKKysJ CX0KKysJfQorKworK3N0YXRpYyBzaXplX3QgZmlwc19nZXRfZW50cm9weShEUkJHX0NUWCAqZGN0 eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xl biwgc2l6ZV90IG1heF9sZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAqdG91dCwgKnA7CisrCXNp emVfdCBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW4sIHJ2OworKwlpZiAoIWRjdHgtPmdldF9l bnRyb3B5KQorKwkJcmV0dXJuIDA7CisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVT VCB8fCAhYmwpCisrCQlyZXR1cm4gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgcG91dCwgZW50cm9w eSwgbWluX2xlbiwgbWF4X2xlbik7CisrCXJ2ID0gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgJnRv dXQsIGVudHJvcHkgKyBibCwKKysJCQkJbWluX2xlbiArIGJsLCBtYXhfbGVuICsgYmwpOworKwlp ZiAodG91dCA9PSBOVUxMKQorKwkJcmV0dXJuIDA7CisrCSpwb3V0ID0gdG91dCArIGJsOworKwlp ZiAocnYgPCAobWluX2xlbiArIGJsKSB8fCAocnYgJSBibCkpCisrCQlyZXR1cm4gMDsKKysJLyog Q29tcGFyZSBjb25zZWN1dGl2ZSBibG9ja3MgZm9yIGNvbnRpbnVvdXMgUFJORyB0ZXN0ICovCisr CWZvciAocCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYgLSBibDsgcCArPSBibCkKKysJCXsKKysJCWlm ICghbWVtY21wKHAsIHAgKyBibCwgYmwpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0dFVF9FTlRST1BZLCBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0spOworKwkJCXJldHVybiAw OworKwkJCX0KKysJCX0KKysJcnYgLT0gYmw7CisrCWlmIChydiA+IG1heF9sZW4pCisrCQlyZXR1 cm4gbWF4X2xlbjsKKysJcmV0dXJuIHJ2OworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19jbGVh bnVwX2VudHJvcHkoRFJCR19DVFggKmRjdHgsCisrCQkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvbGVuKQorKwl7CisrCXNpemVfdCBibDsKKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdf RkxBR19URVNUKQorKwkJYmwgPSAwOworKwllbHNlCisrCQlibCA9IGRjdHgtPmVudHJvcHlfYmxv Y2tsZW47CisrCS8qIENhbGwgY2xlYW51cCB3aXRoIG9yaWdpbmFsIGFyZ3VtZW50cyAqLworKwlk Y3R4LT5jbGVhbnVwX2VudHJvcHkoZGN0eCwgb3V0IC0gYmwsIG9sZW4gKyBibCk7CisrCX0KKysK KysKKytpbnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKwkJCQljb25z dCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKKysJeworKwlzaXplX3QgZW50 bGVuID0gMCwgbm9uY2VsZW4gPSAwOworKwl1bnNpZ25lZCBjaGFyICpub25jZSA9IE5VTEwsICpl bnRyb3B5ID0gTlVMTDsKKysKKysjaWYgMAorKwkvKiBQdXQgaGVyZSBzbyBlcnJvciBzY3JpcHQg cGlja3MgdGhlbSB1cCAqLworKwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUs CisrCQkJCUZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HKTsKKysJRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5fRVJST1JfU1RBVEUpOwor KwlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9BTFJFQURZX0lO U1RBTlRJQVRFRCk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQ U19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWSk7CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0UpOworKwlGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUik7 CisrCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0RSQkdfTk9U X0lOSVRJQUxJU0VEKTsKKysjZW5kaWYKKysKKysJaW50IHIgPSAwOworKworKwlpZiAocGVyc2xl biA+IGRjdHgtPm1heF9wZXJzKQorKwkJeworKwkJciA9IEZJUFNfUl9QRVJTT05BTElTQVRJT05f U1RSSU5HX1RPT19MT05HOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghZGN0eC0+aW5z dGFudGlhdGUpCisrCQl7CisrCQlyID0gRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEOworKwkJ Z290byBlbmQ7CisrCQl9CisrCisrCWlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5J TklUSUFMSVNFRCkKKysJCXsKKysJCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJS T1IpCisrCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKKysJCWVsc2UKKysJCQlyID0gRklQ U19SX0FMUkVBRFlfSU5TVEFOVElBVEVEOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWRjdHgt PnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKworKwllbnRsZW4gPSBmaXBzX2dldF9lbnRy b3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKKysJCQkJZGN0eC0+bWluX2VudHJv cHksIGRjdHgtPm1heF9lbnRyb3B5KTsKKysKKysJaWYgKGVudGxlbiA8IGRjdHgtPm1pbl9lbnRy b3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KQorKwkJeworKwkJciA9IEZJUFNfUl9F UlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGRj dHgtPm1heF9ub25jZSA+IDAgJiYgZGN0eC0+Z2V0X25vbmNlKQorKwkJeworKwkJbm9uY2VsZW4g PSBkY3R4LT5nZXRfbm9uY2UoZGN0eCwgJm5vbmNlLAorKwkJCQkJZGN0eC0+c3RyZW5ndGggLyAy LAorKwkJCQkJZGN0eC0+bWluX25vbmNlLCBkY3R4LT5tYXhfbm9uY2UpOworKworKwkJaWYgKG5v bmNlbGVuIDwgZGN0eC0+bWluX25vbmNlIHx8IG5vbmNlbGVuID4gZGN0eC0+bWF4X25vbmNlKQor KwkJCXsKKysJCQlyID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0U7CisrCQkJZ290byBl bmQ7CisrCQkJfQorKworKwkJfQorKworKwlpZiAoIWRjdHgtPmluc3RhbnRpYXRlKGRjdHgsIAor KwkJCQllbnRyb3B5LCBlbnRsZW4sCisrCQkJCW5vbmNlLCBub25jZWxlbiwKKysJCQkJcGVycywg cGVyc2xlbikpCisrCQl7CisrCQlyID0gRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRzsK KysJCWdvdG8gZW5kOworKwkJfQorKworKworKwlkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19S RUFEWTsKKysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKKysJCWRj dHgtPnJlc2VlZF9jb3VudGVyID0gMTsKKysKKysJZW5kOgorKworKwlpZiAoZW50cm9weSAmJiBk Y3R4LT5jbGVhbnVwX2VudHJvcHkpCisrCQlmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRy b3B5LCBlbnRsZW4pOworKworKwlpZiAobm9uY2UgJiYgZGN0eC0+Y2xlYW51cF9ub25jZSkKKysJ CWRjdHgtPmNsZWFudXBfbm9uY2UoZGN0eCwgbm9uY2UsIG5vbmNlbGVuKTsKKysKKysJaWYgKGRj dHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKKysJCXJldHVybiAxOworKworKwlpZiAo ciAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCisrCQlGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIHIpOworKworKwlyZXR1cm4gMDsKKysKKysJfQorKwor K3N0YXRpYyBpbnQgZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4sIGludCBoY2hlY2spCisrCXsKKysJdW5zaWdu ZWQgY2hhciAqZW50cm9weSA9IE5VTEw7CisrCXNpemVfdCBlbnRsZW4gPSAwOworKwlpbnQgciA9 IDA7CisrCisrI2lmIDAKKysJRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJUFNfUl9OT1Rf SU5TVEFOVElBVEVEKTsKKysJRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJUFNfUl9BRERJ VElPTkFMX0lOUFVUX1RPT19MT05HKTsKKysjZW5kaWYKKysJaWYgKGRjdHgtPnN0YXR1cyAhPSBE UkJHX1NUQVRVU19SRUFEWQorKwkJJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VF RCkKKysJCXsKKysJCWlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCisrCQkJ ciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKKysJCWVsc2UgaWYoZGN0eC0+c3RhdHVzID09IERS QkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisrCQkJciA9IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVE OworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghYWRpbikKKysJCWFkaW5sZW4gPSAwOwor KwllbHNlIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pCisrCQl7CisrCQlyID0gRklQU19S X0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkc7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7CisrCS8qIFBlZm9ybSBoZWFsdGggY2hlY2sg b24gYWxsIHJlc2VlZCBvcGVyYXRpb25zIGlmIG5vdCBhIHByZWRpY3Rpb24KKysJICogcmVzaXN0 YW5jZSByZXF1ZXN0IGFuZCBub3QgaW4gdGVzdCBtb2RlLgorKwkgKi8KKysJaWYgKGhjaGVjayAm JiAhKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkKKysJCXsKKysJCWlmICghRklQU19k cmJnX2hlYWx0aF9jaGVjayhkY3R4KSkKKysJCQl7CisrCQkJciA9IEZJUFNfUl9TRUxGVEVTVF9G QUlMVVJFOworKwkJCWdvdG8gZW5kOworKwkJCX0KKysJCX0KKysKKysJZW50bGVuID0gZmlwc19n ZXRfZW50cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCisrCQkJCWRjdHgtPm1p bl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7CisrCisrCWlmIChlbnRsZW4gPCBkY3R4LT5t aW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkKKysJCXsKKysJCXIgPSBG SVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOworKwkJZ290byBlbmQ7CisrCQl9CisrCisr CWlmICghZGN0eC0+cmVzZWVkKGRjdHgsIGVudHJvcHksIGVudGxlbiwgYWRpbiwgYWRpbmxlbikp CisrCQlnb3RvIGVuZDsKKysKKysJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVBRFk7Cisr CWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisrCQlkY3R4LT5yZXNl ZWRfY291bnRlciA9IDE7CisrCWVuZDoKKysKKysJaWYgKGVudHJvcHkgJiYgZGN0eC0+Y2xlYW51 cF9lbnRyb3B5KQorKwkJZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50cm9weSwgZW50bGVu KTsKKysKKysJaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKKysJCXJldHVy biAxOworKworKwlpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCisr CQlGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgcik7CisrCisrCXJldHVybiAwOworKwl9Cisr CisraW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJcmV0dXJuIGRyYmdfcmVzZWVk KGRjdHgsIGFkaW4sIGFkaW5sZW4sIDEpOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdf Y2hlY2soRFJCR19DVFggKmRjdHgpCisrCXsKKysJaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxB R19URVNUKQorKwkJcmV0dXJuIDE7CisrCWRjdHgtPmhlYWx0aF9jaGVja19jbnQrKzsKKysJaWYg KGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPj0gZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsKQor KwkJeworKwkJaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKQorKwkJCXsKKysJCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0ssIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsK KysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisraW50IEZJ UFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXpl X3Qgb3V0bGVuLAorKwkJCWludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCisrCQkJY29uc3QgdW5z aWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisrCXsKKysJaW50IHIgPSAwOworKwor KwlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19HRU5FUkFURSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsK KysJCX0KKysKKysJaWYgKCFmaXBzX2RyYmdfY2hlY2soZGN0eCkpCisrCQlyZXR1cm4gMDsKKysK KysJaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFEWQorKwkJJiYgZGN0eC0+c3Rh dHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkKKysJCXsKKysJCWlmIChkY3R4LT5zdGF0dXMgPT0g RFJCR19TVEFUVVNfRVJST1IpCisrCQkJciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKKysJCWVs c2UgaWYoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCisrCQkJciA9 IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmIChv dXRsZW4gPiBkY3R4LT5tYXhfcmVxdWVzdCkKKysJCXsKKysJCXIgPSBGSVBTX1JfUkVRVUVTVF9U T09fTEFSR0VfRk9SX0RSQkc7CisrCQlyZXR1cm4gMDsKKysJCX0KKysKKysJaWYgKGFkaW5sZW4g PiBkY3R4LT5tYXhfYWRpbikKKysJCXsKKysJCXIgPSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9U T09fTE9ORzsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoZGN0eC0+aWZsYWdzICYgRFJC R19DVVNUT01fUkVTRUVEKQorKwkJZGN0eC0+Z2VuZXJhdGUoZGN0eCwgTlVMTCwgb3V0bGVuLCBO VUxMLCAwKTsKKysJZWxzZSBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVk X2ludGVydmFsKQorKwkJZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVTRUVEOworKworKwlp ZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFU0VFRCB8fCBwcmVkaWN0aW9uX3Jlc2lz dGFuY2UpCisrCQl7CisrCQkvKiBJZiBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBkb24n dCBkbyBoZWFsdGggY2hlY2sgKi8KKysJCWludCBoY2hlY2sgPSBwcmVkaWN0aW9uX3Jlc2lzdGFu Y2UgPyAwIDogMTsKKysJCQorKwkJaWYgKCFkcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVu LCBoY2hlY2spKQorKwkJCXsKKysJCQlyID0gRklQU19SX1JFU0VFRF9FUlJPUjsKKysJCQlnb3Rv IGVuZDsKKysJCQl9CisrCQlhZGluID0gTlVMTDsKKysJCWFkaW5sZW4gPSAwOworKwkJfQorKwor KwlpZiAoIWRjdHgtPmdlbmVyYXRlKGRjdHgsIG91dCwgb3V0bGVuLCBhZGluLCBhZGlubGVuKSkK KysJCXsKKysJCXIgPSBGSVBTX1JfR0VORVJBVEVfRVJST1I7CisrCQlkY3R4LT5zdGF0dXMgPSBE UkJHX1NUQVRVU19FUlJPUjsKKysJCWdvdG8gZW5kOworKwkJfQorKwlpZiAoIShkY3R4LT5pZmxh Z3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQorKwkJeworKwkJaWYgKGRjdHgtPnJlc2VlZF9jb3Vu dGVyID49IGRjdHgtPnJlc2VlZF9pbnRlcnZhbCkKKysJCQlkY3R4LT5zdGF0dXMgPSBEUkJHX1NU QVRVU19SRVNFRUQ7CisrCQllbHNlCisrCQkJZGN0eC0+cmVzZWVkX2NvdW50ZXIrKzsKKysJCX0K KysKKysJZW5kOgorKwlpZiAocikKKysJCXsKKysJCWlmICghKGRjdHgtPmlmbGFncyAmIERSQkdf RkxBR19OT0VSUikpCisrCQkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCByKTsK KysJCXJldHVybiAwOworKwkJfQorKworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKysJeworKwlpbnQgcnY7CisrCWlmICgh ZGN0eC0+dW5pbnN0YW50aWF0ZSkKKysJCXJ2ID0gMTsKKysJZWxzZQorKwkJcnYgPSBkY3R4LT51 bmluc3RhbnRpYXRlKGRjdHgpOworKwkvKiBBbHRob3VnaCB3ZSdkIGxpa2UgdG8gY2xlYW5zZSBo ZXJlIHdlIGNhbid0IGJlY2F1c2Ugd2UgaGF2ZSB0bworKwkgKiB0ZXN0IHRoZSB1bmluc3RhbnRp YXRlIHJlYWxseSB6ZXJvZXMgdGhlIGRhdGEuCisrCSAqLworKwltZW1zZXQoJmRjdHgtPmQsIDAs IHNpemVvZihkY3R4LT5kKSk7CisrCWRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElB TElTRUQ7CisrCS8qIElmIG1ldGhvZCBoYXMgcHJvYmxlbXMgdW5pbnN0YW50aWF0aW5nLCByZXR1 cm4gZXJyb3IgKi8KKysJcmV0dXJuIHJ2OworKwl9CisrCisraW50IEZJUFNfZHJiZ19zZXRfY2Fs bGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJCR19DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWlu X2xlbiwgc2l6ZV90IG1heF9sZW4pLAorKwl2b2lkICgqY2xlYW51cF9lbnRyb3B5KShEUkJHX0NU WCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKKysJc2l6ZV90IGVudHJv cHlfYmxvY2tsZW4sCisrCXNpemVfdCAoKmdldF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWdu ZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90 IG1heF9sZW4pLAorKwl2b2lkICgqY2xlYW51cF9ub25jZSkoRFJCR19DVFggKmN0eCwgdW5zaWdu ZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikpCisrCXsKKysJaWYgKGRjdHgtPnN0YXR1cyAhPSBE UkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKwkJcmV0dXJuIDA7CisrCWRjdHgtPmVudHJvcHlf YmxvY2tsZW4gPSBlbnRyb3B5X2Jsb2NrbGVuOworKwlkY3R4LT5nZXRfZW50cm9weSA9IGdldF9l bnRyb3B5OworKwlkY3R4LT5jbGVhbnVwX2VudHJvcHkgPSBjbGVhbnVwX2VudHJvcHk7CisrCWRj dHgtPmdldF9ub25jZSA9IGdldF9ub25jZTsKKysJZGN0eC0+Y2xlYW51cF9ub25jZSA9IGNsZWFu dXBfbm9uY2U7CisrCXJldHVybiAxOworKwl9CisrCisraW50IEZJUFNfZHJiZ19zZXRfcmFuZF9j YWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrCXNpemVfdCAoKmdldF9hZGluKShEUkJHX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCksCisrCXZvaWQgKCpjbGVhbnVwX2FkaW4pKERSQkdf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pLAorKwlpbnQgKCpyYW5k X3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSksCisrCWlu dCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB2b2lkICpidWYsIGlu dCBudW0sIGRvdWJsZSBlbnRyb3B5KSkKKysJeworKwlpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdf U1RBVFVTX1VOSU5JVElBTElTRUQpCisrCQlyZXR1cm4gMDsKKysJZGN0eC0+Z2V0X2FkaW4gPSBn ZXRfYWRpbjsKKysJZGN0eC0+Y2xlYW51cF9hZGluID0gY2xlYW51cF9hZGluOworKwlkY3R4LT5y YW5kX3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7CisrCWRjdHgtPnJhbmRfYWRkX2NiID0gcmFuZF9h ZGRfY2I7CisrCXJldHVybiAxOworKwl9CisrCisrdm9pZCAqRklQU19kcmJnX2dldF9hcHBfZGF0 YShEUkJHX0NUWCAqZGN0eCkKKysJeworKwlyZXR1cm4gZGN0eC0+YXBwX2RhdGE7CisrCX0KKysK Kyt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFggKmRjdHgsIHZvaWQgKmFwcF9k YXRhKQorKwl7CisrCWRjdHgtPmFwcF9kYXRhID0gYXBwX2RhdGE7CisrCX0KKysKKytzaXplX3Qg RklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCkKKysJeworKwlyZXR1cm4g ZGN0eC0+YmxvY2tsZW5ndGg7CisrCX0KKysKKytpbnQgRklQU19kcmJnX2dldF9zdHJlbmd0aChE UkJHX0NUWCAqZGN0eCkKKysJeworKwlyZXR1cm4gZGN0eC0+c3RyZW5ndGg7CisrCX0KKysKKyt2 b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRl cnZhbCkKKysJeworKwlkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKysJ fQorKworK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgs IGludCBpbnRlcnZhbCkKKysJeworKwlkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSBpbnRlcnZhbDsK KysJfQorKworK3N0YXRpYyBpbnQgZHJiZ19zdGljayA9IDA7CisrCisrdm9pZCBGSVBTX2RyYmdf c3RpY2soaW50IG9ub2ZmKQorKwl7CisrCWRyYmdfc3RpY2sgPSBvbm9mZjsKKysJfQorKworKy8q IENvbnRpbnVvdXMgRFJCRyB1dGlsaXR5IGZ1bmN0aW9uICovCisraW50IGZpcHNfZHJiZ19jcHJu Z190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvdXQpCisrCXsKKysJ LyogTm8gQ1BSTkcgaW4gdGVzdCBtb2RlICovCisrCWlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZM QUdfVEVTVCkKKysJCXJldHVybiAxOworKwkvKiBDaGVjayBibG9jayBpcyB2YWxpZDogc2hvdWxk IG5ldmVyIGhhcHBlbiAqLworKwlpZiAoZGN0eC0+bGJfdmFsaWQgPT0gMCkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBGSVBTX1JfSU5URVJOQUxfRVJST1Ip OworKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlm IChkcmJnX3N0aWNrKQorKwkJbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3Ro KTsKKysJLyogQ2hlY2sgYWdhaW5zdCBsYXN0IGJsb2NrOiBmYWlsIGlmIG1hdGNoICovCisrCWlm ICghbWVtY21wKGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBGSVBTX1JfRFJCR19TVFVDSyk7Cisr CQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJLyogU2F2 ZSBsYXN0IGJsb2NrIGZvciBuZXh0IGNvbXBhcmlzb24gKi8KKysJbWVtY3B5KGRjdHgtPmxiLCBv dXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysJcmV0dXJuIDE7CisrCX0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjYzNzg1Njc3 ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYwky MDEyLTA0LTIwIDA5OjA3OjA2LjI2Mzc4NTY3NyArMDIwMAorQEAgLTAsMCArMSwxNzIgQEAKKysv KiBmaXBzL3JhbmQvZmlwc19kcmJnX3JhbmQuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2pl Y3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworKy8qIE1h cHBpbmcgb2YgU1A4MDAtOTAgRFJCR3MgdG8gT3BlblNTTCBSQU5EX01FVEhPRCAqLworKworKy8q IFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgZ2xvYmFsIFBSTkcgdXNlZCBhdCBhbnkgdGltZSBpbiBP cGVuU1NMIHVzZSBhIGdsb2JhbAorKyAqIHZhcmlhYmxlIHRvIHN0b3JlIGNvbnRleHQuCisrICov CisrCisrc3RhdGljIERSQkdfQ1RYIG9zc2xfZGN0eDsKKysKKytEUkJHX0NUWCAqRklQU19nZXRf ZGVmYXVsdF9kcmJnKHZvaWQpCisrCXsKKysJcmV0dXJuICZvc3NsX2RjdHg7CisrCX0KKysKKytz dGF0aWMgaW50IGZpcHNfZHJiZ19ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkK KysJeworKwlEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWludCBydiA9IDA7CisrCXVu c2lnbmVkIGNoYXIgKmFkaW4gPSBOVUxMOworKwlzaXplX3QgYWRpbmxlbiA9IDA7CisrCUNSWVBU T193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCWRvIAorKwkJeworKwkJc2l6ZV90IHJjbnQ7 CisrCQlpZiAoY291bnQgPiAoaW50KWRjdHgtPm1heF9yZXF1ZXN0KQorKwkJCXJjbnQgPSBkY3R4 LT5tYXhfcmVxdWVzdDsKKysJCWVsc2UKKysJCQlyY250ID0gY291bnQ7CisrCQlpZiAoZGN0eC0+ Z2V0X2FkaW4pCisrCQkJeworKwkJCWFkaW5sZW4gPSBkY3R4LT5nZXRfYWRpbihkY3R4LCAmYWRp bik7CisrCQkJaWYgKGFkaW5sZW4gJiYgIWFkaW4pCisrCQkJCXsKKysJCQkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0JZVEVTLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lO UFVUKTsKKysJCQkJZ290byBlcnI7CisrCQkJCX0KKysJCQl9CisrCQlydiA9IEZJUFNfZHJiZ19n ZW5lcmF0ZShkY3R4LCBvdXQsIHJjbnQsIDAsIGFkaW4sIGFkaW5sZW4pOworKwkJaWYgKGFkaW4p CisrCQkJeworKwkJCWlmIChkY3R4LT5jbGVhbnVwX2FkaW4pCisrCQkJCWRjdHgtPmNsZWFudXBf YWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsKKysJCQlhZGluID0gTlVMTDsKKysJCQl9CisrCQlp ZiAoIXJ2KQorKwkJCWdvdG8gZXJyOworKwkJb3V0ICs9IHJjbnQ7CisrCQljb3VudCAtPSByY250 OworKwkJfQorKwl3aGlsZSAoY291bnQpOworKwlydiA9IDE7CisrCWVycjoKKysJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcnY7CisrCX0KKysKKytzdGF0aWMg aW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisrCXsK KysJaWYgKGZpcHNfZHJiZ19ieXRlcyhvdXQsIGNvdW50KSA8PSAwKQorKwkJcmV0dXJuIC0xOwor KwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3N0YXR1cyh2b2lkKQor Kwl7CisrCURSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysJaW50IHJ2OworKwlDUllQVE9f cl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlydiA9IGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NU QVRVU19SRUFEWSA/IDEgOiAwOworKwlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 CisrCXJldHVybiBydjsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfZHJiZ19jbGVhbnVwKHZv aWQpCisrCXsKKysJRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OworKwlDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX1JBTkQpOworKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysJ Q1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwl9CisrCisrc3RhdGljIGludCBm aXBzX2RyYmdfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKKysJeworKwlEUkJH X0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrCWlmIChkY3R4LT5yYW5kX3NlZWRfY2IpCisrCQly ZXR1cm4gZGN0eC0+cmFuZF9zZWVkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4pOworKwlyZXR1cm4g MTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2FkZChjb25zdCB2b2lkICpzZWVkLCBp bnQgc2VlZGxlbiwKKysJCQkJCWRvdWJsZSBhZGRfZW50cm9weSkKKysJeworKwlEUkJHX0NUWCAq ZGN0eCA9ICZvc3NsX2RjdHg7CisrCWlmIChkY3R4LT5yYW5kX2FkZF9jYikKKysJCXJldHVybiBk Y3R4LT5yYW5kX2FkZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuLCBhZGRfZW50cm9weSk7CisrCXJl dHVybiAxOworKwl9CisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZHJiZ19tZXRo ID0KKysJeworKwlmaXBzX2RyYmdfc2VlZCwKKysJZmlwc19kcmJnX2J5dGVzLAorKwlmaXBzX2Ry YmdfY2xlYW51cCwKKysJZmlwc19kcmJnX2FkZCwKKysJZmlwc19kcmJnX3BzZXVkbywKKysJZmlw c19kcmJnX3N0YXR1cworKwl9OworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0 aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuICZyYW5kX2RyYmdfbWV0aDsKKysJfQorKworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMuZmlwcyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYworLS0tIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0y MCAwOTowNzowNi4yNjQ3ODU2OTggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlw cy9maXBzX2RyYmdfc2VsZnRlc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2NDc4NTY5OCArMDIw MAorQEAgLTAsMCArMSw4NjIgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3NlbGZ0ZXN0LmMg Ki8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3Jn KSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNT TC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKyNpbmNsdWRl ICJmaXBzX2xvY2wuaCIKKysKKysjaW5jbHVkZSAiZmlwc19kcmJnX3NlbGZ0ZXN0LmgiCisrCisr dHlwZWRlZiBzdHJ1Y3QgeworKwlpbnQgcG9zdDsKKysJaW50IG5pZDsKKysJdW5zaWduZWQgaW50 IGZsYWdzOworKworKwkvKiBLQVQgZGF0YSBmb3Igbm8gUFIgKi8KKysJY29uc3QgdW5zaWduZWQg Y2hhciAqZW50OworKwlzaXplX3QgZW50bGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICpub25j ZTsKKysJc2l6ZV90IG5vbmNlbGVuOworKwljb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzOworKwlz aXplX3QgcGVyc2xlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjsKKysJc2l6ZV90IGFk aW5sZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHJlc2VlZDsKKysJc2l6ZV90IGVudHJl c2VlZGxlbjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbnJlc2VlZDsKKysJc2l6ZV90IGFk aW5yZXNlZWRsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4yOworKwlzaXplX3QgYWRp bjJsZW47CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDsKKysJc2l6ZV90IGthdGxlbjsKKysJ Y29uc3QgdW5zaWduZWQgY2hhciAqa2F0MjsKKysJc2l6ZV90IGthdDJsZW47CisrCisrCS8qIEtB VCBkYXRhIGZvciBQUiAqLworKwljb25zdCB1bnNpZ25lZCBjaGFyICplbnRfcHI7CisrCXNpemVf dCBlbnRsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlX3ByOworKwlzaXplX3Qg bm9uY2VsZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnNfcHI7CisrCXNpemVfdCBw ZXJzbGVuX3ByOworKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGluX3ByOworKwlzaXplX3QgYWRp bmxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50cHJfcHI7CisrCXNpemVfdCBlbnRw cmxlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbmdfcHI7CisrCXNpemVfdCBhZGlu Z2xlbl9wcjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqZW50Z19wcjsKKysJc2l6ZV90IGVudGds ZW5fcHI7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdF9wcjsKKysJc2l6ZV90IGthdGxlbl9w cjsKKysJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0Ml9wcjsKKysJc2l6ZV90IGthdDJsZW5fcHI7 CisrCisrCX0gRFJCR19TRUxGVEVTVF9EQVRBOworKworKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3Rf ZGF0YShuaWQsIGZsYWcsIHByLCBwKSB7cCwgbmlkLCBmbGFnIHwgRFJCR19GTEFHX1RFU1QsIFwK KysJcHIjI19lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dCksIFwKKysJcHIj I19ub25jZSwgc2l6ZW9mKHByIyNfbm9uY2UpLCBcCisrCXByIyNfcGVyc29uYWxpemF0aW9uc3Ry aW5nLCBzaXplb2YocHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBcCisrCXByIyNfYWRkaXRp b25hbGlucHV0LCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQpLCBcCisrCXByIyNfZW50cm9w eWlucHV0cmVzZWVkLCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXRyZXNlZWQpLCBcCisrCXByIyNf YWRkaXRpb25hbGlucHV0cmVzZWVkLCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXRyZXNlZWQp LCBcCisrCXByIyNfYWRkaXRpb25hbGlucHV0Miwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0 MiksIFwKKysJcHIjI19pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19pbnRfcmV0dXJuZWRi aXRzKSwgXAorKwlwciMjX3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcmV0dXJuZWRiaXRzKSwg XAorKwlwciMjX3ByX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0KSwg XAorKwlwciMjX3ByX25vbmNlLCBzaXplb2YocHIjI19wcl9ub25jZSksIFwKKysJcHIjI19wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu ZyksIFwKKysJcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihwciMjX3ByX2FkZGl0aW9u YWxpbnB1dCksIFwKKysJcHIjI19wcl9lbnRyb3B5aW5wdXRwciwgc2l6ZW9mKHByIyNfcHJfZW50 cm9weWlucHV0cHIpLCBcCisrCXByIyNfcHJfYWRkaXRpb25hbGlucHV0Miwgc2l6ZW9mKHByIyNf cHJfYWRkaXRpb25hbGlucHV0MiksIFwKKysJcHIjI19wcl9lbnRyb3B5aW5wdXRwcjIsIHNpemVv ZihwciMjX3ByX2VudHJvcHlpbnB1dHByMiksIFwKKysJcHIjI19wcl9pbnRfcmV0dXJuZWRiaXRz LCBzaXplb2YocHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzKSwgXAorKwlwciMjX3ByX3JldHVybmVk Yml0cywgc2l6ZW9mKHByIyNfcHJfcmV0dXJuZWRiaXRzKSwgXAorKwl9CisrCisrI2RlZmluZSBt YWtlX2RyYmdfdGVzdF9kYXRhX2RmKG5pZCwgcHIsIHApIFwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0 YShuaWQsIERSQkdfRkxBR19DVFJfVVNFX0RGLCBwciwgcCkKKysKKysjZGVmaW5lIG1ha2VfZHJi Z190ZXN0X2RhdGFfZWMoY3VydmUsIG1kLCBwciwgcCkgXAorKwltYWtlX2RyYmdfdGVzdF9kYXRh KChjdXJ2ZSA8PCAxNikgfCBtZCAsIDAsIHByLCBwKQorKworK3N0YXRpYyBEUkJHX1NFTEZURVNU X0RBVEEgZHJiZ190ZXN0W10gPSB7CisrCW1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18x MjhfY3RyLCBhZXNfMTI4X3VzZV9kZiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklE X2Flc18xOTJfY3RyLCBhZXNfMTkyX3VzZV9kZiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGFf ZGYoTklEX2Flc18yNTZfY3RyLCBhZXNfMjU2X3VzZV9kZiwgMSksCisrCW1ha2VfZHJiZ190ZXN0 X2RhdGEoTklEX2Flc18xMjhfY3RyLCAwLCBhZXNfMTI4X25vX2RmLCAwKSwKKysJbWFrZV9kcmJn X3Rlc3RfZGF0YShOSURfYWVzXzE5Ml9jdHIsIDAsIGFlc18xOTJfbm9fZGYsIDApLAorKwltYWtl X2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMjU2X2N0ciwgMCwgYWVzXzI1Nl9ub19kZiwgMSksCisr CW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTEsIDAsIHNoYTEsIDApLAorKwltYWtlX2RyYmdf dGVzdF9kYXRhKE5JRF9zaGEyMjQsIDAsIHNoYTIyNCwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2Rh dGEoTklEX3NoYTI1NiwgMCwgc2hhMjU2LCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURf c2hhMzg0LCAwLCBzaGEzODQsIDApLAorKwltYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGE1MTIs IDAsIHNoYTUxMiwgMCksCisrCW1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMSwg MCwgaG1hY19zaGExLCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEy MjQsIDAsIGhtYWNfc2hhMjI0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dp dGhTSEEyNTYsIDAsIGhtYWNfc2hhMjU2LCAxKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURf aG1hY1dpdGhTSEEzODQsIDAsIGhtYWNfc2hhMzg0LCAwKSwKKysJbWFrZV9kcmJnX3Rlc3RfZGF0 YShOSURfaG1hY1dpdGhTSEE1MTIsIDAsIGhtYWNfc2hhNTEyLCAwKSwKKysJezAsMCwwfQorKwl9 OworKworK3R5cGVkZWYgc3RydWN0IAorKwl7CisrCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudDsK KysJc2l6ZV90IGVudGxlbjsKKysJaW50IGVudGNudDsKKysJY29uc3QgdW5zaWduZWQgY2hhciAq bm9uY2U7CisrCXNpemVfdCBub25jZWxlbjsKKysJaW50IG5vbmNlY250OworKwl9IFRFU1RfRU5U OworKworK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25l ZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRy b3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisrCXsKKysJVEVTVF9FTlQgKnQg PSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKwkqcG91dCA9ICh1bnNpZ25lZCBjaGFy ICopdC0+ZW50OworKwl0LT5lbnRjbnQrKzsKKysJcmV0dXJuIHQtPmVudGxlbjsKKysJfQorKwor K3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAq KnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6 ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorKwl7CisrCVRFU1RfRU5UICp0ID0gRklQU19k cmJnX2dldF9hcHBfZGF0YShkY3R4KTsKKysJKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPm5v bmNlOworKwl0LT5ub25jZWNudCsrOworKwlyZXR1cm4gdC0+bm9uY2VsZW47CisrCX0KKysKKytz dGF0aWMgaW50IGZpcHNfZHJiZ19zaW5nbGVfa2F0KERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZU RVNUX0RBVEEgKnRkLAorKwkJCQkJCQkJaW50IHF1aWNrKQorKwl7CisrCVRFU1RfRU5UIHQ7Cisr CWludCBydiA9IDA7CisrCXNpemVfdCBhZGlubGVuOworKwl1bnNpZ25lZCBjaGFyIHJhbmRvdXRb MTAyNF07CisrCisrCS8qIEluaXRpYWwgdGVzdCB3aXRob3V0IFBSICovCisrCisrCS8qIEluc3Rh bnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24K KysJICogc3RyaW5nLgorKwkgKi8KKysKKysJaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+ bmlkLCB0ZC0+ZmxhZ3MpKQorKwkJcmV0dXJuIDA7CisrCWlmICghRklQU19kcmJnX3NldF9jYWxs YmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKKysJCXJldHVy biAwOworKworKwlGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKKysKKysJdC5lbnQg PSB0ZC0+ZW50OworKwl0LmVudGxlbiA9IHRkLT5lbnRsZW47CisrCXQubm9uY2UgPSB0ZC0+bm9u Y2U7CisrCXQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47CisrCXQuZW50Y250ID0gMDsKKysJdC5u b25jZWNudCA9IDA7CisrCisrCWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5w ZXJzLCB0ZC0+cGVyc2xlbikpCisrCQlnb3RvIGVycjsKKysKKysJLyogTm90ZSBmb3IgQ1RSIHdp dGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcworKwkgKiBpZ25vcmUgYnl0ZXMg YWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KKysJICogdG8gaGFsZiB0byBl bnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KKysJICovCisrCWlmICghZmlwc19wb3N0X2Nv cnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQorKwkJYWRp bmxlbiA9IHRkLT5hZGlubGVuIC8gMjsKKysJZWxzZQorKwkJYWRpbmxlbiA9IHRkLT5hZGlubGVu OworKworKwkvKiBHZW5lcmF0ZSB3aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMg ZXhwZWN0ZWQgZGF0YSAqLworKwlpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0 LCB0ZC0+a2F0bGVuLCAwLAorKwkJCQl0ZC0+YWRpbiwgYWRpbmxlbikpCisrCQlnb3RvIGVycjsK KysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0LCB0ZC0+a2F0bGVuKSkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMV9G QUlMVVJFKTsKKysJCWdvdG8gZXJyMjsKKysJCX0KKysJLyogSWYgYWJicmV2aWF0ZWQgUE9TVCBl bmQgb2YgdGVzdCAqLworKwlpZiAocXVpY2spCisrCQl7CisrCQlydiA9IDE7CisrCQlnb3RvIGVy cjsKKysJCX0KKysJLyogUmVzZWVkIERSQkcgd2l0aCB0ZXN0IGVudHJvcHkgYW5kIGFkZGl0aW9u YWwgaW5wdXQgKi8KKysJdC5lbnQgPSB0ZC0+ZW50cmVzZWVkOworKwl0LmVudGxlbiA9IHRkLT5l bnRyZXNlZWRsZW47CisrCisrCWlmICghRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbnJl c2VlZCwgdGQtPmFkaW5yZXNlZWRsZW4pKQorKwkJZ290byBlcnI7CisrCisrCS8qIEdlbmVyYXRl IHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCisr CWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuLCAwLAor KwkJCQl0ZC0+YWRpbjIsIHRkLT5hZGluMmxlbikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKG1l bWNtcChyYW5kb3V0LCB0ZC0+a2F0MiwgdGQtPmthdDJsZW4pKQorKwkJeworKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUpOwor KwkJZ290byBlcnIyOworKwkJfQorKworKwlGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsK KysKKysJLyogTm93IHRlc3Qgd2l0aCBQUiAqLworKworKwkvKiBJbnN0YW50aWF0ZSBEUkJHIHdp dGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0aW9uCisrCSAqIHN0cmluZy4K KysJICovCisrCWlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkK KysJCXJldHVybiAwOworKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3Rf ZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysJRklQU19k cmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7CisrCisrCXQuZW50ID0gdGQtPmVudF9wcjsKKysJ dC5lbnRsZW4gPSB0ZC0+ZW50bGVuX3ByOworKwl0Lm5vbmNlID0gdGQtPm5vbmNlX3ByOworKwl0 Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuX3ByOworKwl0LmVudGNudCA9IDA7CisrCXQubm9uY2Vj bnQgPSAwOworKworKwlpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVyc19w ciwgdGQtPnBlcnNsZW5fcHIpKQorKwkJZ290byBlcnI7CisrCisrCS8qIE5vdyBnZW5lcmF0ZSB3 aXRoIFBSOiB3ZSBuZWVkIHRvIHN1cHBseSBlbnRyb3B5IGFzIHRoaXMgd2lsbAorKwkgKiBwZXJm b3JtIGEgcmVzZWVkIG9wZXJhdGlvbi4gQ2hlY2sgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFs dWUuCisrCSAqLworKworKwl0LmVudCA9IHRkLT5lbnRwcl9wcjsKKysJdC5lbnRsZW4gPSB0ZC0+ ZW50cHJsZW5fcHI7CisrCisrCS8qIE5vdGUgZm9yIENUUiB3aXRob3V0IERGIHNvbWUgYWRkaXRp b25hbCBpbnB1dCB2YWx1ZXMKKysJICogaWdub3JlIGJ5dGVzIGFmdGVyIHRoZSBrZXlsZW5ndGg6 IHNvIHJlZHVjZSBhZGlubGVuCisrCSAqIHRvIGhhbGYgdG8gZW5zdXJlIGludmFsaWQgZGF0YSBp cyBmZWQgaW4uCisrCSAqLworKwlpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9EUkJH LCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKKysJCWFkaW5sZW4gPSB0ZC0+YWRpbmxlbl9w ciAvIDI7CisrCWVsc2UKKysJCWFkaW5sZW4gPSB0ZC0+YWRpbmxlbl9wcjsKKysJaWYgKCFGSVBT X2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbl9wciwgMSwKKysJCQkJdGQt PmFkaW5fcHIsIGFkaW5sZW4pKQorKwkJZ290byBlcnI7CisrCisrCWlmIChtZW1jbXAocmFuZG91 dCwgdGQtPmthdF9wciwgdGQtPmthdGxlbl9wcikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUpOworKwkJZ290byBl cnIyOworKwkJfQorKworKwkvKiBOb3cgZ2VuZXJhdGUgYWdhaW4gd2l0aCBQUjogc3VwcGx5IG5l dyBlbnRyb3B5IGFnYWluLgorKwkgKiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1 ZS4KKysJICovCisrCisrCXQuZW50ID0gdGQtPmVudGdfcHI7CisrCXQuZW50bGVuID0gdGQtPmVu dGdsZW5fcHI7CisrCisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRk LT5rYXQybGVuX3ByLCAxLAorKwkJCQl0ZC0+YWRpbmdfcHIsIHRkLT5hZGluZ2xlbl9wcikpCisr CQlnb3RvIGVycjsKKysKKysJaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0Ml9wciwgdGQtPmth dDJsZW5fcHIpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQs IEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFKTsKKysJCWdvdG8gZXJyMjsKKysJCX0KKysJLyogQWxs IE9LLCB0ZXN0IGNvbXBsZXRlICovCisrCXJ2ID0gMTsKKysKKysJZXJyOgorKwlpZiAocnYgPT0g MCkKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKKysJZXJyMjoKKysJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Cisr CQorKwlyZXR1cm4gcnY7CisrCisrCX0KKysKKysvKiBJbml0aWFsaXNlIGEgRFJCRyBiYXNlZCBv biBzZWxmdGVzdCBkYXRhICovCisrCisrc3RhdGljIGludCBkb19kcmJnX2luaXQoRFJCR19DVFgg KmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqdGQsIFRFU1RfRU5UICp0KQorKwl7CisrCisrCWlm ICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKKysJCXJldHVybiAw OworKworKwlpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwg MCwgMCwgdGVzdF9ub25jZSwgMCkpCisrCQlyZXR1cm4gMDsKKysKKysJRklQU19kcmJnX3NldF9h cHBfZGF0YShkY3R4LCB0KTsKKysKKysJdC0+ZW50ID0gdGQtPmVudDsKKysJdC0+ZW50bGVuID0g dGQtPmVudGxlbjsKKysJdC0+bm9uY2UgPSB0ZC0+bm9uY2U7CisrCXQtPm5vbmNlbGVuID0gdGQt Pm5vbmNlbGVuOworKwl0LT5lbnRjbnQgPSAwOworKwl0LT5ub25jZWNudCA9IDA7CisrCXJldHVy biAxOworKwl9CisrCisrLyogSW5pdGlhbGlzZSBhbmQgaW5zdGFudGlhdGUgRFJCRyBiYXNlZCBv biBzZWxmdGVzdCBkYXRhICovCisrc3RhdGljIGludCBkb19kcmJnX2luc3RhbnRpYXRlKERSQkdf Q1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKnRkLAorKwkJCQkJCQkJVEVTVF9FTlQgKnQp CisrCXsKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsIHQpKQorKwkJcmV0dXJuIDA7Cisr CWlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikp CisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBUaGlzIGZ1bmN0aW9u IHBlcmZvcm1zIGV4dGVuc2l2ZSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBieSBTUDgwMC05 MC4KKysgKiBJbmR1Y2Ugc2V2ZXJhbCBmYWlsdXJlIG1vZGVzIGFuZCBjaGVjayBhbiBlcnJvciBj b25kaXRpb24gaXMgc2V0LgorKyAqIFRoaXMgZnVuY3Rpb24gYWxvbmcgd2l0aCBmaXBzX2RyYmdf c2luZ2xlX2thdCBwZWZvcm1zIHRoZSBoZWFsdGggY2hlY2tpbmcKKysgKiBvcGVyYXRpb24uCisr ICovCisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfZXJyb3JfY2hlY2soRFJCR19DVFggKmRjdHgs IERSQkdfU0VMRlRFU1RfREFUQSAqdGQpCisrCXsKKysJdW5zaWduZWQgY2hhciByYW5kb3V0WzEw MjRdOworKwlURVNUX0VOVCB0OworKwlzaXplX3QgaTsKKysJdW5zaWduZWQgaW50IHJlc2VlZF9j b3VudGVyX3RtcDsKKysJdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopZGN0eDsK KysKKysJLyogSW5pdGlhbGlzZSBEUkJHICovCisrCisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgs IHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogRG9uJ3QgcmVwb3J0IGluZHVjZWQgZXJy b3JzICovCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrCS8qIFBlcnNv bmFsaXNhdGlvbiBzdHJpbmcgdGVzdHMgKi8KKysKKysJLyogVGVzdCBkZXRlY3Rpb24gb2YgdG9v IGxhcmdlIHBlcnNvbmxpc2F0aW9uIHN0cmluZyAqLworKworKwlpZiAoRklQU19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHRkLT5wZXJzLCBkY3R4LT5tYXhfcGVycyArIDEpID4gMCkKKysJCXsKKysJ CUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1BFUlNPTkFMSVNB VElPTl9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBFbnRy b3B5IHNvdXJjZSB0ZXN0cyAqLworKworKwkvKiBUZXN0IGVudHJvcHkgc291cmNlIGZhaWx1cmUg ZGV0ZWNpb246IGkuZS4gcmV0dXJucyBubyBkYXRhICovCisrCisrCXQuZW50bGVuID0gMDsKKysK KysJaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4p ID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQ U19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJ LyogVHJ5IHRvIGdlbmVyYXRlIG91dHB1dCBmcm9tIHVuaW5zdGFudGlhdGVkIERSQkcgKi8KKysJ aWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAorKwkJ CQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfR0VORVJBVEVfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQln b3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Cisr CWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsK KysJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQp KQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Cisr CisrCS8qIFRlc3QgaW5zdWZmaWNpZW50IGVudHJvcHkgKi8KKysKKysJdC5lbnRsZW4gPSBkY3R4 LT5taW5fZW50cm9weSAtIDE7CisrCisrCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwg dGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJ Z290byBlcnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwor KwlpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7 CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVGVzdCB0b28gbXVjaCBlbnRyb3B5ICovCisr CisrCWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQlnb3RvIGVycjsKKysKKysJ ZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysJdC5lbnRsZW4gPSBkY3R4LT5t YXhfZW50cm9weSArIDE7CisrCisrCWlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQt PnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290 byBlcnI7CisrCQl9CisrCisrCWRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKwlp ZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKQorKwkJeworKwkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Cisr CQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogTm9uY2UgdGVzdHMgKi8KKysKKysJLyogVGVzdCB0 b28gc21hbGwgbm9uY2UgKi8KKysKKysJaWYgKGRjdHgtPm1pbl9ub25jZSkKKysJCXsKKysKKysJ CWlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQkJZ290byBlcnI7CisrCisrCQlk Y3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkJdC5ub25jZWxlbiA9IGRjdHgt Pm1pbl9ub25jZSAtIDE7CisrCisrCQlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRk LT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCQln b3RvIGVycjsKKysJCQl9CisrCisrCQlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsK KysJCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQkJeworKwkJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJS T1IpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCX0KKysKKysJLyogVGVzdCB0b28gbGFy Z2Ugbm9uY2UgKi8KKysKKysJaWYgKGRjdHgtPm1heF9ub25jZSkKKysJCXsKKysKKysJCWlmICgh ZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrCQkJZ290byBlcnI7CisrCisrCQlkY3R4LT5p ZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkJdC5ub25jZWxlbiA9IGRjdHgtPm1heF9u b25jZSArIDE7CisrCisrCQlpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJz LCB0ZC0+cGVyc2xlbikgPiAwKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVEKTsKKysJCQlnb3RvIGVy cjsKKysJCQl9CisrCisrCQlkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysJCWlm ICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwor KwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCX0KKysKKysJLyogSW5zdGFudGlhdGUgd2l0aCB2 YWxpZCBkYXRhLiAqLworKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkK KysJCQlnb3RvIGVycjsKKysKKysJLyogQ2hlY2sgZ2VuZXJhdGlvbiBpcyBub3cgT0sgKi8KKysJ aWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJ CQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCWdvdG8gZXJyOworKworKwlkY3R4LT5pZmxh Z3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwkvKiBSZXF1ZXN0IHRvbyBtdWNoIGRhdGEgZm9y IG9uZSByZXF1ZXN0ICovCisrCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwg ZGN0eC0+bWF4X3JlcXVlc3QgKyAxLCAwLAorKwkJCQl0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVR VUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJ LyogVHJ5IHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCisrCWlmIChGSVBTX2RyYmdfZ2Vu ZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysJCQkJdGQtPmFkaW4sIGRjdHgt Pm1heF9hZGluICsgMSkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1Jf Q0hFQ0ssIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290 byBlcnI7CisrCQl9CisrCisrCS8qIENoZWNrIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0 IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCisrCSAqIGZhaWx1cmUuCisrCSAqLworKworKwl0LmVu dGxlbiA9IDA7CisrCisrCWlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQt PmthdGxlbiwgMSwKKysJCQkJdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysJCXsKKysJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VOVFJPUFlfRVJST1JfVU5E RVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysJCQorKwlkY3R4LT5pZmxhZ3MgJj0gfkRS QkdfRkxBR19OT0VSUjsKKysJaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5T VEFOVElBVEVfRVJST1IpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCisrCS8qIEluc3RhbnRp YXRlIGFnYWluIHdpdGggdmFsaWQgZGF0YSAqLworKworKwlpZiAoIWRvX2RyYmdfaW5zdGFudGlh dGUoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysJLyogVGVzdCByZXNlZWQgY291bnRl ciB3b3JrcyAqLworKwkvKiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KKysJcmVzZWVk X2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7CisrCS8qIFNldCByZXNlZWQgY291 bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KKysJZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4 LT5yZXNlZWRfaW50ZXJ2YWw7CisrCisrCS8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50 cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLworKwl0LmVudGNudCA9IDA7Cisr CWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisr CQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQlnb3RvIGVycjsKKysJaWYgKHQuZW50Y250 ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCk7CisrCQlnb3RvIGVycjsKKysJ CX0KKysJLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgKi8KKysJaWYgKGRj dHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3VudGVyX3RtcCArIDEpCisrCQl7CisrCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09VTlRF Ul9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+aWZsYWdzICY9IH5EUkJH X0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RB TlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBDaGVjayBwcmVkaWN0 aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBpZiBlbnRyb3B5IHNvdXJjZQorKwkgKiBmYWls dXJlLgorKwkgKi8KKysKKysJdC5lbnRsZW4gPSAwOworKworKwlkY3R4LT5pZmxhZ3MgfD0gRFJC R19GTEFHX05PRVJSOworKwlpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRk LT5rYXRsZW4sIDEsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQl7CisrCQlGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCQkKKysJZGN0eC0+aWZsYWdzICY9IH5E UkJHX0ZMQUdfTk9FUlI7CisrCisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkp CisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9V TklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKworKwlpZiAoIWRv X2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKKysJCQlnb3RvIGVycjsKKysJLyogVGVz dCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKwkvKiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50 ZXIgKi8KKysJcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7CisrCS8q IFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KKysJZGN0eC0+cmVzZWVk X2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7CisrCisrCS8qIEdlbmVyYXRlIG91dHB1 dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLworKwl0 LmVudGNudCA9IDA7CisrCWlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRk LT5rYXRsZW4sIDAsCisrCQkJCXRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrCQlnb3RvIGVycjsK KysJaWYgKHQuZW50Y250ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysJLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJlZW4gcmVz ZXQgKi8KKysJaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3VudGVyX3RtcCAr IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9SRVNFRURfQ09VTlRFUl9FUlJPUik7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJZGN0eC0+ aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkv KiBFeHBsaWNpdCByZXNlZWQgdGVzdHMgKi8KKysKKysJLyogVGVzdCBleHBsaWNpdCByZXNlZWQg d2l0aCB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLworKwlpZiAoIWRvX2RyYmdfaW5pdChk Y3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJHX0ZM QUdfTk9FUlI7CisrCisrCWlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCBkY3R4 LT5tYXhfYWRpbiArIDEpID4gMCkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysKKysJLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCBlbnRy b3B5IHNvdXJjZSBmYWlsdXJlICovCisrCisrCXQuZW50bGVuID0gMDsKKysKKysJaWYgKEZJUFNf ZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApCisrCQl7CisrCQlG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9S X1VOREVURUNURUQpOworKwkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKworKwkvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBtdWNoIGVudHJvcHkgKi8K KysKKysJaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysJCWdvdG8gZXJyOworKwor KwlkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKwl0LmVudGxlbiA9IGRjdHgt Pm1heF9lbnRyb3B5ICsgMTsKKysKKysJaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFk aW4sIHRkLT5hZGlubGVuKSA+IDApCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKwkJZ290byBl cnI7CisrCQl9CisrCisrCWlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpCisrCQl7 CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RB TlRJQVRFX0VSUk9SKTsKKysJCWdvdG8gZXJyOworKwkJfQorKworKwkvKiBUZXN0IGV4cGxpY2l0 IHJlc2VlZCB3aXRoIHRvbyBsaXR0bGUgZW50cm9weSAqLworKworKwlpZiAoIWRvX2RyYmdfaW5p dChkY3R4LCB0ZCwgJnQpKQorKwkJZ290byBlcnI7CisrCisrCWRjdHgtPmlmbGFncyB8PSBEUkJH X0ZMQUdfTk9FUlI7CisrCisrCXQuZW50bGVuID0gZGN0eC0+bWluX2VudHJvcHkgLSAxOworKwor KwlpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkK KysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0VO VFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKwkJZ290 byBlcnI7CisrCQl9CisrCisrCXAgPSAodW5zaWduZWQgY2hhciAqKSZkY3R4LT5kOworKwkvKiBT dGFuZGFyZCBzYXlzIHdlIGhhdmUgdG8gY2hlY2sgdW5pbnN0YW50aWF0ZSByZWFsbHkgemVyb2Vz CisrCSAqIHRoZSBkYXRhLi4uCisrCSAqLworKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRjdHgt PmQpOyBpKyspCisrCQl7CisrCQlpZiAoKnAgIT0gMCkKKysJCQl7CisrCQkJRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VS Uk9SKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCQlwKys7CisrCQl9CisrCisrCXJldHVybiAx OworKworKwllcnI6CisrCS8qIEEgcmVhbCBlcnJvciBhcyBvcHBvc2VkIHRvIGFuIGluZHVjZWQg b25lOiB1bmRlcmx5aW5nIGZ1bmN0aW9uIHdpbGwKKysJICogaW5kaWNhdGUgdGhlIGVycm9yLgor KwkgKi8KKysJaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysJCUZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0ZVTkNUSU9OX0VSUk9SKTsK KysJRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCXJldHVybiAwOworKworKwl9Cisr CisraW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVkIGlu dCBmbGFncykKKysJeworKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKwlmbGFncyB8PSBEUkJH X0ZMQUdfVEVTVDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQor KwkJeworKwkJaWYgKHRkLT5uaWQgPT0gbmlkICYmIHRkLT5mbGFncyA9PSBmbGFncykKKysJCQl7 CisrCQkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMCkpCisrCQkJCXJldHVy biAwOworKwkJCXJldHVybiBmaXBzX2RyYmdfZXJyb3JfY2hlY2soZGN0eCwgdGQpOworKwkJCX0K KysJCX0KKysJcmV0dXJuIDA7CisrCX0KKysKKytpbnQgRklQU19kcmJnX2hlYWx0aF9jaGVjayhE UkJHX0NUWCAqZGN0eCkKKysJeworKwlpbnQgcnY7CisrCURSQkdfQ1RYICp0Y3R4ID0gTlVMTDsK KysJdGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7CisrCWZpcHNfcG9zdF9zdGFydGVkKEZJUFNf VEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysJaWYgKCF0Y3R4KQorKwkJ cmV0dXJuIDA7CisrCXJ2ID0gZmlwc19kcmJnX2thdCh0Y3R4LCBkY3R4LT50eXBlLCBkY3R4LT54 ZmxhZ3MpOworKwlpZiAodGN0eCkKKysJCUZJUFNfZHJiZ19mcmVlKHRjdHgpOworKwlpZiAocnYp CisrCQlmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgt PnhmbGFncyk7CisrCWVsc2UKKysJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIGRj dHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOworKwlpZiAoIXJ2KQorKwkJZGN0eC0+c3RhdHVzID0g RFJCR19TVEFUVVNfRVJST1I7CisrCWVsc2UKKysJCWRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAw OworKwlyZXR1cm4gcnY7CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpCisr CXsKKysJRFJCR19DVFggKmRjdHg7CisrCURSQkdfU0VMRlRFU1RfREFUQSAqdGQ7CisrCWludCBy diA9IDE7CisrCWRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOworKwlpZiAoIWRjdHgpCisrCQly ZXR1cm4gMDsKKysJZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKQorKwkJ eworKwkJaWYgKHRkLT5wb3N0ICE9IDEpCisrCQkJY29udGludWU7CisrCQlpZiAoIWZpcHNfcG9z dF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1 cm4gMTsKKysJCWlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDEpKQorKwkJCXsK KysJCQlmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdz KTsKKysJCQlydiA9IDA7CisrCQkJY29udGludWU7CisrCQkJfQorKwkJaWYgKCFmaXBzX3Bvc3Rf c3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCisrCQkJcmV0dXJu IDA7CisrCQl9CisrCUZJUFNfZHJiZ19mcmVlKGRjdHgpOworKwlyZXR1cm4gcnY7CisrCX0KKysK KysKKytpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKQorKwl7CisrCURSQkdfQ1RYICpk Y3R4OworKwlEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKwlpbnQgcnYgPSAxOworKwlkY3R4ID0g RklQU19kcmJnX25ldygwLCAwKTsKKysJaWYgKCFkY3R4KQorKwkJcmV0dXJuIDA7CisrCWZvciAo dGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykKKysJCXsKKysJCWlmICghZmlwc19w b3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKwkJCXJl dHVybiAxOworKwkJaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMCkpCisrCQkJ eworKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+Zmxh Z3MpOworKwkJCXJ2ID0gMDsKKysJCQljb250aW51ZTsKKysJCQl9CisrCQlpZiAoIWZpcHNfZHJi Z19lcnJvcl9jaGVjayhkY3R4LCB0ZCkpCisrCQkJeworKwkJCWZpcHNfcG9zdF9mYWlsZWQoRklQ U19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKwkJCXJ2ID0gMDsKKysJCQljb250 aW51ZTsKKysJCQl9CisrCQlpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0 ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJRklQU19kcmJnX2Zy ZWUoZGN0eCk7CisrCXJldHVybiBydjsKKysJfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEv Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAorLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjY3ODU3 NDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRl c3QuaAkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2Njc4NTc0MCArMDIwMAorQEAgLTAsMCArMSwyMzM1 IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIG9wZW5zc2wtY29yZS5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu CisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KKysgKgorKyAqLworKworKy8qIFNlbGZ0ZXN0IGFuZCBoZWFsdGggY2hlY2sg ZGF0YSBmb3IgdGhlIFNQODAwLTkwIERSQkcgKi8KKysKKysjZGVmaW5lIF9fZmlwc19jb25zdHNl ZworKworKy8qIEFFUy0xMjggdXNlIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0K KysJeworKwkweDYxLDB4NTIsMHg3YywweGUzLDB4MjMsMHg3ZCwweDBhLDB4MDcsMHgxMCwweDBj LDB4NTAsMHgzMywKKysJMHhjOCwweGRiLDB4ZmYsMHgxMgorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX25vbmNl W10gPQorKwl7CisrCTB4NTEsMHgwZCwweDg1LDB4NzcsMHhlZCwweDIyLDB4OTcsMHgyOAorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweDU5LDB4OWYs MHhiYiwweGNkLDB4ZDUsMHgyNSwweDY5LDB4YjUsMHhjYiwweGI1LDB4MDMsMHhmZSwKKysJMHhk NywweGQ3LDB4MDEsMHg2NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJ eworKwkweGVmLDB4ODgsMHg3NiwweDAxLDB4YWYsMHgzYywweGZlLDB4OGIsMHhhZiwweDI2LDB4 MDYsMHg5ZSwKKysJMHg5YSwweDQ3LDB4MDgsMHg3NgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlp bnB1dHByW10gPQorKwl7CisrCTB4ZTIsMHg3NiwweGY5LDB4ZjYsMHgzYSwweGJhLDB4MTAsMHg5 ZiwweGJmLDB4NDcsMHgwZSwweDUxLAorKwkweDA5LDB4ZmIsMHhhMywweGI2CisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2Vf ZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGQ0LDB4OTgsMHg4YSwweDQ2LDB4 ODAsMHg0YywweGRiLDB4YTMsMHg1OSwweDAyLDB4NTcsMHg1MiwKKysJMHg2NiwweDFjLDB4ZWEs MHg1YgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4OCww eDhjLDB4OTEsMHhkNiwweGJlLDB4NTYsMHg2ZSwweDA4LDB4OWEsMHg2MiwweDJiLDB4MTEsCisr CTB4M2YsMHg1ZSwweDMxLDB4MDYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9 CisrCXsKKysJMHhjMCwweDVjLDB4NmIsMHg5OCwweDAxLDB4MGQsMHg1OCwweDE4LDB4NTEsMHgx OCwweDk2LDB4YWUsCisrCTB4YTcsMHhlMywweGE4LDB4NjcKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHhjZiwweDAxLDB4YWMsMHgyMiwweDMxLDB4MDYsMHg4ZSww eGZjLDB4Y2UsMHg1NiwweGVhLDB4MjQsCisrCTB4MGYsMHgzOCwweDQzLDB4YzYKKysJfTsKKysK KysKKysvKiBBRVMtMTI4IHVzZSBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9Cisr CXsKKysJMHgxZiwweDhlLDB4MzQsMHg4MiwweDBjLDB4YjcsMHhiZSwweGM1LDB4MDEsMHgzZSww eGQwLDB4YTMsCisrCTB4OWQsMHg3ZCwweDFjLDB4OWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9ub25jZVtdID0K KysJeworKwkweGQ1LDB4NGQsMHhiZCwweDRhLDB4OTMsMHg3ZiwweGI4LDB4OTYKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3Vz ZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhhYiwweGQ2LDB4M2YsMHgw NCwweGZlLDB4MjcsMHg2YiwweDJkLDB4ZDcsMHhjMywweDFjLDB4ZjMsCisrCTB4MzgsMHg2Niww eGJhLDB4MWIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhmZSww eGY0LDB4MDksMHhhOCwweGI3LDB4NzMsMHgyNywweDljLDB4NWYsMHhhNywweGVhLDB4NDYsCisr CTB4YjUsMHhlMiwweGIyLDB4NDEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQor Kwl7CisrCTB4NDIsMHhlNCwweDRlLDB4N2IsMHgyNywweGRkLDB4Y2IsMHhiYywweDBhLDB4Y2Ys MHhhNiwweDY3LAorKwkweGU3LDB4NTcsMHgxMSwweGI0CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlu cHV0cmVzZWVkW10gPQorKwl7CisrCTB4MTQsMHgyNiwweDY5LDB4ZDksMHhmMywweDY1LDB4MDMs MHhkNiwweDZiLDB4YjksMHg0NCwweDBiLAorKwkweGM3LDB4YzQsMHg5ZSwweDM5CisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91 c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4NTUsMHgyZSwweDYwLDB4 OWEsMHgwNSwweDcyLDB4OGEsMHhhOCwweGVmLDB4MjIsMHg4MSwweDVhLAorKwkweGM4LDB4OTMs MHhmYSwweDg0CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDNj LDB4NDAsMHhjOCwweGM0LDB4MTYsMHgwYywweDIxLDB4YTQsMHgzNywweDJjLDB4OGYsMHhhNSwK KysJMHgwNiwweDBjLDB4MTUsMHgyYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3JldHVybmVkYml0c1tdID0KKysJ eworKwkweGUxLDB4M2UsMHg5OSwweDk4LDB4ODYsMHg2NywweDBiLDB4NjMsMHg3YiwweGJlLDB4 M2YsMHg4OCwKKysJMHg0NiwweDgxLDB4YzcsMHgxOQorKwl9OworKworKworKy8qIEFFUy0xOTIg dXNlIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDJiLDB4NGUs MHg4YiwweGUxLDB4ZjEsMHgzNCwweDgwLDB4NTYsMHg4MSwweGY5LDB4NzQsMHhlYywKKysJMHgx NywweDQ0LDB4MmEsMHhmMSwweDE0LDB4YjAsMHhiZiwweDk3LDB4MzksMHhiNywweDA0LDB4N2QK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9wcl9ub25jZVtdID0KKysJeworKwkweGQ2LDB4OWQsMHhlYiwweDE0LDB4 NGUsMHg2YywweDMwLDB4MWUsMHgzOSwweDU1LDB4NzMsMHhkMCwKKysJMHhkMSwweDgwLDB4Nzgs MHhmYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkw eGZjLDB4NDMsMHg0YSwweGY4LDB4OWEsMHg1NSwweGIzLDB4NTMsMHg4MywweGUyLDB4MTgsMHgx NiwKKysJMHgwYywweGRjLDB4Y2QsMHg1ZSwweDRmLDB4YTAsMHgwMywweDAxLDB4MmIsMHg5Ziww eGU0LDB4ZDUsCisrCTB4N2QsMHg0OSwweGYwLDB4NDEsMHg5ZSwweDNkLDB4OTksMHgwNAorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDVlLDB4OWYsMHg0OSww eDZmLDB4MjEsMHg4YiwweDFkLDB4MzIsMHhkNSwweDg0LDB4NWMsMHhhYywKKysJMHhhZiwweGRm LDB4ZTQsMHg3OSwweDllLDB4YWYsMHhhOSwweDgyLDB4ZDAsMHhmOCwweDRmLDB4Y2IsCisrCTB4 NjksMHgxMCwweDBhLDB4N2UsMHg4MSwweDU3LDB4YjUsMHgzNgorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2Vu dHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4ZDQsMHg4MSwweDBjLDB4ZDcsMHg2NiwweDM5LDB4 ZWMsMHg0MiwweDUzLDB4ODcsMHg0MSwweGE1LAorKwkweDFlLDB4N2QsMHg4MCwweDkxLDB4OGUs MHhiYiwweGVkLDB4YWMsMHgxNCwweDAyLDB4MWEsMHhkNQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhkZiwweDFkLDB4MzksMHg0NSwweDdjLDB4OWIsMHhj NiwweDJiLDB4N2QsMHg4YywweDkzLDB4ZTksCisrCTB4MTksMHgzMCwweDZiLDB4NjcKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MDAsMHg3MSwweDI3LDB4 NGUsMHhkMywweDE0LDB4ZjEsMHgyMCwweDdmLDB4NGEsMHg0MSwweDMyLAorKwkweDJhLDB4OTcs MHgxMSwweDQzLDB4OGYsMHg0YSwweDE1LDB4N2IsMHg5YiwweDUxLDB4NzksMHhkYSwKKysJMHg0 OSwweDNkLDB4ZGUsMHhlOCwweGJjLDB4OTMsMHg5MSwweDk5CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50 cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4OTAsMHhlZSwweDc2LDB4YTEsMHg0NSwweDhkLDB4 YjcsMHg0MCwweGIwLDB4MTEsMHhiZiwweGQwLAorKwkweDY1LDB4ZDcsMHgzYywweDdjLDB4NGYs MHgyMCwweDNmLDB4NGUsMHgxMSwweDlkLDB4YjMsMHg1ZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3JldHVy bmVkYml0c1tdID0KKysJeworKwkweDI0LDB4M2IsMHgyMCwweGE0LDB4MzcsMHg2NiwweGJhLDB4 NzIsMHgzOSwweDNmLDB4Y2YsMHgzYywKKysJMHg3ZSwweDFhLDB4MmIsMHg4MworKwl9OworKwor KworKy8qIEFFUy0xOTIgdXNlIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0KKysJ eworKwkweDhkLDB4NzQsMHhhNCwweDUwLDB4MWEsMHgwMiwweDY4LDB4MGMsMHgyYSwweDY5LDB4 YzQsMHg4MiwKKysJMHgzYiwweGJiLDB4ZGEsMHgwZSwweDdmLDB4NzcsMHhhMywweDE3LDB4Nzgs MHg1NywweGIyLDB4N2IKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9ub25jZVtdID0KKysJeworKwkweDc1LDB4ZDUs MHgxZiwweGFjLDB4YTQsMHg4ZCwweDQyLDB4NzgsMHhkNywweDY5LDB4ODYsMHg5ZCwKKysJMHg3 NywweGQ3LDB4NDEsMHgwZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K KysJeworKwkweDRlLDB4MzMsMHg0MSwweDNjLDB4OWMsMHhjMiwweGQyLDB4NTMsMHhhZiwweDkw LDB4ZWEsMHhjZiwKKysJMHgxOSwweDUwLDB4MWUsMHhlNiwweDZmLDB4NjMsMHhjOCwweDMyLDB4 MjIsMHhkYywweDA3LDB4NjUsCisrCTB4OWMsMHhkMywweGY4LDB4MzAsMHg5ZSwweGVkLDB4MzUs MHg3MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDVkLDB4OGIs MHg4YywweGMxLDB4ZGYsMHgwZSwweDAyLDB4NzgsMHhmYiwweDE5LDB4YjgsMHg2OSwKKysJMHg3 OCwweDRlLDB4OWMsMHg1MiwweGJjLDB4YzcsMHgyMCwweGM5LDB4ZTYsMHg1ZSwweDc3LDB4MjIs CisrCTB4MjgsMHgzZCwweDBjLDB4OWUsMHg2OCwweGE4LDB4NDUsMHhkNworKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2Rm X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhkNSwweGU3LDB4MDgsMHhjNSwweDE5LDB4 OTksMHhkNSwweDMxLDB4MDMsMHgwYSwweDc0LDB4YjYsCisrCTB4YjcsMHhlZCwweGU5LDB4ZWEK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg5YywweDI2LDB4 ZGEsMHhmMSwweGFjLDB4ZDksMHg1YSwweGQ2LDB4YTgsMHg2NSwweGY1LDB4MDIsCisrCTB4OGYs MHhkYywweGEyLDB4MDksMHg1NCwweGE2LDB4ZTIsMHhhNCwweGRlLDB4MzIsMHhlMCwweDAxCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OWIsMHg5MCww eGIwLDB4M2EsMHgwZSwweDNhLDB4ODAsMHgwNywweDRhLDB4ZjQsMHhkYSwweDc2LAorKwkweDI4 LDB4MzAsMHgzYywweGVlLDB4NTQsMHgxYiwweDk0LDB4NTksMHg1MSwweDQzLDB4NTYsMHg3NywK KysJMHhhZiwweDg4LDB4ZGQsMHg2MywweDg5LDB4NDcsMHgwNiwweDY1CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZf YWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDNjLDB4MTEsMHg2NCwweDdhLDB4OTYsMHhm NSwweGQ4LDB4YjgsMHhhZSwweGQ2LDB4NzAsMHg0ZSwKKysJMHgxNiwweDk2LDB4ZGUsMHhlOSww eDYyLDB4YmMsMHhlZSwweDI4LDB4MmYsMHgyNiwweGE2LDB4ZjAsCisrCTB4NTYsMHhlZiwweGEz LDB4ZjEsMHg2YiwweGExLDB4YjEsMHg3NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3JldHVybmVkYml0c1tdID0K KysJeworKwkweDBiLDB4ZTIsMHg1NiwweDAzLDB4MWUsMHhkYiwweDJjLDB4NmQsMHg3ZiwweDFi LDB4MTUsMHg1OCwKKysJMHgxYSwweGY5LDB4MTMsMHgyOAorKwl9OworKworKworKy8qIEFFUy0y NTYgdXNlIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDYxLDB4 NjgsMHhmYywweDFhLDB4ZjAsMHhiNSwweDk1LDB4NmIsMHg4NSwweDA5LDB4OWIsMHg3NCwKKysJ MHgzZiwweDEzLDB4NzgsMHg0OSwweDNiLDB4ODUsMHhlYywweDkzLDB4MTMsMHgzYiwweGE5LDB4 NGYsCisrCTB4OTYsMHhhYiwweDJjLDB4ZTQsMHhjOCwweDhmLDB4ZGQsMHg2YQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX3ByX25vbmNlW10gPQorKwl7CisrCTB4YWQsMHhkMiwweGJiLDB4YmEsMHhiNywweDY1LDB4 ODksMHhjMywweDIxLDB4NmMsMHg1NSwweDMzLAorKwkweDJiLDB4MzYsMHhmZiwweGE0CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NmUsMHhjYSww eGU3LDB4MjAsMHg3MiwweGQzLDB4ODQsMHg1YSwweDMyLDB4ZDMsMHg0YiwweDI0LAorKwkweDcy LDB4YzQsMHg2MywweDJiLDB4OWQsMHgxMiwweDI0LDB4MGMsMHgyMywweDI2LDB4OGUsMHg4MywK KysJMHgxNiwweDM3LDB4MGIsMHhkMSwweDA2LDB4NGYsMHg2OCwweDZkCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf cHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4N2UsMHgwOCwweDRhLDB4YmIsMHhlMyww eDIxLDB4N2MsMHhjOSwweDIzLDB4ZDIsMHhmOCwweGIwLAorKwkweDczLDB4OTgsMHhiYSwweDg0 LDB4NzQsMHgyMywweGFiLDB4MDYsMHg4YSwweGUyLDB4MjIsMHhkMywKKysJMHg3YiwweGNlLDB4 OWIsMHhkMiwweDRhLDB4NzYsMHhiOCwweGRlCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0 cHJbXSA9CisrCXsKKysJMHgwYiwweDIzLDB4YWYsMHhkZiwweGYxLDB4NjIsMHhkNywweGQzLDB4 NDMsMHg5NywweGY4LDB4NzcsCisrCTB4MDQsMHhhOCwweDQyLDB4MjAsMHhiZCwweGY2LDB4MGYs MHhjMSwweDE3LDB4MmYsMHg5ZiwweDU0LAorKwkweGJiLDB4NTYsMHgxNywweDg2LDB4NjgsMHgw ZSwweGJhLDB4YTkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7Cisr CTB4MzEsMHg4ZSwweGFkLDB4YWYsMHg0MCwweGViLDB4NmIsMHg3NCwweDMxLDB4NDYsMHg4MCww eGM3LAorKwkweDE3LDB4YWIsMHgzYywweDdhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlu cHV0MltdID0KKysJeworKwkweDk0LDB4NmIsMHhjOSwweDlmLDB4YWIsMHg4ZCwweGM1LDB4ZWMs MHg3MSwweDg4LDB4MWQsMHgwMCwKKysJMHg4YywweDg5LDB4NjgsMHhlNCwweGM4LDB4MDcsMHg3 NywweDM2LDB4MTcsMHg2ZCwweDc5LDB4NzgsCisrCTB4YzcsMHgwNiwweDRlLDB4OTksMHgwNCww eDI4LDB4MjksMHhjMworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJewor KwkweGJmLDB4NmMsMHg1OSwweDJhLDB4MGQsMHg0NCwweDBmLDB4YWUsMHg5YSwweDVlLDB4MDMs MHg3MywKKysJMHhkOCwweGE2LDB4ZTEsMHhjZiwweDI1LDB4NjEsMHgzOCwweDI0LDB4ODYsMHg5 ZSwweDUzLDB4ZTgsCisrCTB4YTQsMHhkZiwweDU2LDB4ZjQsMHgwNiwweDA3LDB4OWMsMHgwZgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDIyLDB4NGEsMHhiNCww eGI4LDB4YjYsMHhlZSwweDdkLDB4YjEsMHg5ZSwweGM5LDB4ZjksMHhhMCwKKysJMHhkOSwweGUy LDB4OTcsMHgwMAorKwl9OworKworKworKy8qIEFFUy0yNTYgdXNlIGRmIE5vIFBSICAqLworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2Rm X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGE1LDB4M2UsMHgzNywweDEwLDB4MTcsMHg0Myww eDkxLDB4OTMsMHg1OSwweDFlLDB4NDcsMHg1MCwKKysJMHg4NywweGFhLDB4ZGQsMHhkNSwweGMx LDB4YzMsMHg4NiwweGNkLDB4Y2EsMHgwZCwweGRiLDB4NjgsCisrCTB4ZTAsMHgwMiwweGQ4LDB4 MGYsMHhkYywweDQwLDB4MWEsMHg0NworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX25vbmNlW10gPQorKwl7CisrCTB4 YTksMHg0ZCwweGE1LDB4NWEsMHhmZCwweGM1LDB4MGMsMHhlNSwweDFjLDB4OWEsMHgzYiwweDhh LAorKwkweDRjLDB4NDQsMHg4NCwweDQwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPQorKwl7CisrCTB4OGIsMHg1MiwweGEyLDB4NGEsMHg5MywweGMzLDB4NGUsMHhhNyww eDFlLDB4MWMsMHhhNywweDA1LAorKwkweGViLDB4ODIsMHg5YiwweGE2LDB4NWQsMHhlNCwweGQ0 LDB4ZTAsMHg3ZiwweGEzLDB4ZDgsMHg2YiwKKysJMHgzNywweDg0LDB4NWYsMHhmMSwweGM3LDB4 ZDUsMHhmNiwweGQyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4 MjAsMHhmNCwweDIyLDB4ZWQsMHhmOCwweDVjLDB4YTEsMHg2YSwweDAxLDB4Y2YsMHhiZSwweDVm LAorKwkweDhkLDB4NmMsMHg5NCwweDdmLDB4YWUsMHgxMiwweGE4LDB4NTcsMHhkYiwweDJhLDB4 YTksMHhiZiwKKysJMHhjNywweGIzLDB4NjUsMHg4MSwweDgwLDB4OGQsMHgwZCwweDQ2CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDRlLDB4NDQsMHhmZCwweGYz LDB4OWUsMHgyOSwweGEyLDB4YjgsMHgwZiwweDVkLDB4NmMsMHhlMSwKKysJMHgyOCwweDBjLDB4 M2IsMHhjMQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGRk LDB4NDAsMHhlNSwweDk4LDB4N2IsMHgyNywweDE2LDB4NzMsMHgxNSwweDY4LDB4ZDIsMHg3NiwK KysJMHhiZiwweDBjLDB4NjcsMHgxNSwweDc1LDB4NzksMHgwMywweGQzLDB4ZGUsMHhkZSwweDkx LDB4NDYsCisrCTB4NDIsMHhkZCwweGQ0LDB4NjcsMHhjOCwweDc5LDB4YzgsMHgxZQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf dXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDdmLDB4ZDgsMHgxZiww eGJkLDB4MmEsMHhiNSwweDFjLDB4MTEsMHg1ZCwweDgzLDB4NGUsMHg5OSwKKysJMHhmNiwweDVj LDB4YTUsMHg0MCwweDIwLDB4ZWQsMHgzOCwweDhlLDB4ZDUsMHg5ZSwweGUwLDB4NzUsCisrCTB4 OTMsMHhmZSwweDEyLDB4NWUsMHg1ZCwweDczLDB4ZmIsMHg3NQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhjZCwweDJjLDB4ZmYsMHgxNCwweDY5LDB4M2UsMHg0 YywweDllLDB4ZmQsMHhmZSwweDI2LDB4MGQsCisrCTB4ZTksMHg4NiwweDAwLDB4NDksMHgzMCww eGJhLDB4YjEsMHhjNiwweDUwLDB4NTcsMHg3NywweDJhLAorKwkweDYyLDB4MzksMHgyYywweDNi LDB4NzQsMHhlYiwweGM5LDB4MGQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsK KysJMHg0ZiwweDc4LDB4YmUsMHhiOSwweDRkLDB4OTcsMHg4YywweGU5LDB4ZDAsMHg5NywweGZl LDB4YWQsCisrCTB4ZmEsMHhmZCwweDM1LDB4NWUKKysJfTsKKysKKysKKysvKiBBRVMtMTI4IG5v IGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4OWEsMHgyNSwweDY1 LDB4MTAsMHg2NywweGQ1LDB4YjYsMHg2YiwweDcwLDB4YTEsMHhiMywweGE0LAorKwkweDQzLDB4 OTUsMHg4MCwweGMwLDB4ODQsMHgwYSwweDc5LDB4YjAsMHg4OCwweDc0LDB4ZjIsMHhiZiwKKysJ MHgzMSwweDZjLDB4MzMsMHgzOCwweDBiLDB4MDAsMHhiMiwweDVhCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9u b25jZVtdID0KKysJeworKwkweDc4LDB4NDcsMHg2YiwweGY3LDB4OTAsMHg4ZSwweDg3LDB4ZjEK KysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGY3LDB4 MjIsMHgxZCwweDNhLDB4YmUsMHgxZCwweGNhLDB4MzIsMHgxYiwweGJkLDB4ODcsMHgwYywKKysJ MHg1MSwweDI0LDB4MTksMHhlZSwweGEzLDB4MjMsMHgwOSwweDYzLDB4MzMsMHgzZCwweGE4LDB4 MGMsCisrCTB4MWMsMHhmYSwweDQyLDB4ODksMHhjYywweDZmLDB4YTAsMHhhOAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9f ZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4YzksMHhlMCwweDgwLDB4YmYsMHg4 YywweDQ1LDB4NTgsMHgzOSwweGZmLDB4MDAsMHhhYiwweDAyLAorKwkweDRjLDB4M2UsMHgzYSww eDk1LDB4OWIsMHg4MCwweGE4LDB4MjEsMHgyYSwweGVlLDB4YmEsMHg3MywKKysJMHhiMSwweGQ5 LDB4Y2YsMHgyOCwweGY2LDB4OGYsMHg5YiwweDEyCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5w dXRwcltdID0KKysJeworKwkweDRjLDB4YTgsMHhjNSwweGYwLDB4NTksMHg5ZSwweGE2LDB4OGQs MHgyNiwweDUzLDB4ZDcsMHg4YSwKKysJMHhhOSwweGQ4LDB4ZjcsMHhlZCwweGIyLDB4ZjksMHgx MiwweDQyLDB4ZTEsMHhlNSwweGJkLDB4ZTcsCisrCTB4ZTcsMHgxZCwweDc0LDB4OTksMHgwMCww eDlkLDB4MzEsMHgzZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0KKysJewor KwkweGUyLDB4YWMsMHgyMCwweGYwLDB4ODAsMHhlNywweGJjLDB4N2UsMHg5YywweDdiLDB4NjUs MHg3MSwKKysJMHhhZiwweDE5LDB4MzIsMHgxNgorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlu cHV0MltdID0KKysJeworKwkweDMyLDB4N2YsMHgzOCwweDhiLDB4NzMsMHgwYSwweDc4LDB4ODMs MHhkYywweDMwLDB4YmUsMHg5ZiwKKysJMHgxMCwweDFmLDB4ZjUsMHgxZiwweGNhLDB4MDAsMHhi NSwweDBkLDB4ZDYsMHg5ZCwweDYwLDB4ODMsCisrCTB4NTEsMHg1NCwweDdkLDB4MzgsMHgyMyww eDNhLDB4NTIsMHg1MAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7Cisr CTB4MTgsMHg2MSwweDUzLDB4NTYsMHhlZCwweGVkLDB4ZDcsMHgyMCwweGZiLDB4NzEsMHgwNCww eDdhLAorKwkweGIyLDB4YWMsMHhjMSwweDI4LDB4Y2QsMHhmMiwweGMyLDB4ZmMsMHhhYSwweGIx LDB4MDYsMHgwNywKKysJMHhlOSwweDQ2LDB4OTUsMHgwMiwweDQ4LDB4MDEsMHg3OCwweGY5Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgyOSwweGM4LDB4MWIsMHgx NSwweGIxLDB4ZDEsMHhjMiwweGY2LDB4NzEsMHg4NiwweDY4LDB4MzMsCisrCTB4NTcsMHg4Miww eDMzLDB4YWYKKysJfTsKKysKKysKKysvKiBBRVMtMTI4IG5vIGRmIE5vIFBSICAqLworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50 cm9weWlucHV0W10gPQorKwl7CisrCTB4YzksMHhjNSwweDc5LDB4YmMsMHhlOCwweGM1LDB4MTks MHhkOCwweGJjLDB4NjYsMHg3MywweDY3LAorKwkweGY2LDB4ZDMsMHg3MiwweGFhLDB4YTYsMHgx NiwweGI4LDB4NTAsMHhiNywweDQ3LDB4M2EsMHg0MiwKKysJMHhhYiwweGY0LDB4MTYsMHhiMiww eDk2LDB4ZDIsMHhiNiwweDYwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9ub25jZVtdID0KKysJeworKwkweDVmLDB4 YmYsMHg5NywweDBjLDB4NGIsMHhhNCwweDg3LDB4MTMKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KKysJeworKwkweGNlLDB4ZmIsMHg3YiwweDNmLDB4ZDQsMHg2YiwweDI5 LDB4MGQsMHg2OSwweDA2LDB4ZmYsMHhiYiwKKysJMHhmMiwweGU1LDB4YzYsMHg2YywweDBhLDB4 MTAsMHhhMCwweGNmLDB4MWEsMHg0OCwweGM3LDB4OGIsCisrCTB4M2MsMHgxNiwweDg4LDB4ZWQs MHg1MCwweDEzLDB4ODEsMHhjZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7 CisrCTB4NGIsMHgyMiwweDQ2LDB4MTgsMHgwMiwweDdiLDB4ZDIsMHgxYiwweDIyLDB4NDIsMHg3 YywweDM3LAorKwkweGQ5LDB4ZjYsMHhlOCwweDliLDB4MTIsMHgzMCwweDVmLDB4ZTksMHg5MCww eGU4LDB4MDgsMHgyNCwKKysJMHg0ZiwweDA2LDB4NjYsMHhkYiwweDE5LDB4MmIsMHgxMywweDk1 CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MmUsMHg5NiwweDcw LDB4NjQsMHhmYSwweGRmLDB4ZGYsMHg1NywweGI1LDB4ODIsMHhlZSwweGQ2LAorKwkweGVkLDB4 M2UsMHg2NSwweGMyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9CisrCXsKKysJ MHgyNiwweGMwLDB4NzIsMHgxNiwweDNhLDB4NGIsMHhiNywweDk5LDB4ZDQsMHgwNywweGFmLDB4 NjYsCisrCTB4NjIsMHgzNiwweDk2LDB4YTQsMHg1MSwweDE3LDB4ZmEsMHgwNywweDhiLDB4MTcs MHg1ZSwweGExLAorKwkweDJmLDB4M2MsMHgxMCwweGU3LDB4OTAsMHhkMCwweDQ2LDB4MDAKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDgzLDB4MzksMHgz NywweDdiLDB4MDIsMHgwNiwweGQyLDB4MTIsMHgxMywweDhkLDB4OGIsMHhmMiwKKysJMHhmMCww eGY2LDB4MjYsMHhlYiwweGE0LDB4MjIsMHg3YiwweGMyLDB4ZTcsMHhiYSwweDc5LDB4ZTQsCisr CTB4M2IsMHg3NywweDVkLDB4NGQsMHg0NywweGIyLDB4MmQsMHhiNAorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRk aXRpb25hbGlucHV0MltdID0KKysJeworKwkweDBiLDB4YjksMHg2NywweDM3LDB4ZGIsMHg4Myww eGRmLDB4Y2EsMHg4MSwweDhiLDB4ZjksMHgzZiwKKysJMHhmMSwweDExLDB4MWIsMHgyZiwweGYw LDB4NjEsMHhhNiwweGRmLDB4YmEsMHhhMywweGIxLDB4YWMsCisrCTB4ZDMsMHhlNiwweDA5LDB4 YjgsMHgyYywweDZhLDB4NjcsMHhkNgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcmV0dXJuZWRiaXRzW10gPQorKwl7 CisrCTB4MWUsMHhhNywweGE0LDB4ZTQsMHhlMSwweGE2LDB4N2MsMHg2OSwweDlhLDB4NDQsMHg2 YywweDM2LAorKwkweDgxLDB4MzcsMHgxOSwweGQ0CisrCX07CisrCisrCisrLyogQUVTLTE5MiBu byBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDlkLDB4MmMsMHhk MiwweDU1LDB4NjYsMHhlYSwweGUwLDB4YmUsMHgxOCwweGI3LDB4NzYsMHhlNywKKysJMHg3Myww eDM1LDB4ZDgsMHgxZiwweGFkLDB4M2EsMHhlMywweDgxLDB4MGUsMHg5MiwweGQwLDB4NjEsCisr CTB4YzksMHgxMiwweDI2LDB4ZjYsMHgxYywweGRmLDB4ZmUsMHg0NywweGFhLDB4ZmUsMHg3ZCww eDVhLAorKwkweDE3LDB4MWYsMHg4ZCwweDlhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9ub25jZVtdID0KKysJ eworKwkweDQ0LDB4ODIsMHhlZCwweGU4LDB4NGMsMHgyOCwweDVhLDB4MTQsMHhmZiwweDg4LDB4 OGQsMHgxOSwKKysJMHg2MSwweDVjLDB4ZWUsMHgwZgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NDcsMHhkNywweDliLDB4OTksMHhhYSwweGNiLDB4 ZTcsMHhkMiwweDU3LDB4NjYsMHgyYywweGUxLAorKwkweDc4LDB4ZDYsMHgyYywweGVhLDB4YTMs MHgyMywweDVmLDB4MmEsMHhjMSwweDNhLDB4ZjAsMHhhNCwKKysJMHgyMCwweDNiLDB4ZmEsMHgw NywweGQ1LDB4MDUsMHgwMiwweGU0LDB4NTcsMHgwMSwweGI2LDB4MTAsCisrCTB4NTcsMHgyZSww eGU3LDB4NTUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDRi LDB4NzQsMHgwYiwweDQwLDB4Y2UsMHg2YiwweGMyLDB4NmEsMHgyNCwweGI0LDB4ZjMsMHhhZCwK KysJMHg3YSwweGE1LDB4N2EsMHhhMiwweDE1LDB4ZTIsMHhjOCwweDYxLDB4MTUsMHhjNiwweGI3 LDB4ODUsCisrCTB4NjksMHgxMSwweGFkLDB4N2IsMHgxNCwweGQyLDB4ZjYsMHgxMiwweGExLDB4 OTUsMHg1ZCwweDNmLAorKwkweGUyLDB4ZDAsMHgwYywweDJmCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0KKysJeworKwkweDBjLDB4OWMsMHhhZCwweDA1LDB4ZWUsMHhhZSwweDQ4 LDB4MjMsMHg4OSwweDU5LDB4YTEsMHg5NCwKKysJMHhkNywweGQ4LDB4NzUsMHhkNSwweDU0LDB4 OTMsMHhjNywweDRhLDB4ZDksMHgyNiwweGRlLDB4ZWIsCisrCTB4YmEsMHhiMCwweDdlLDB4MzAs MHgxZCwweDVmLDB4NjksMHg0MCwweDljLDB4M2IsMHgxNywweDU4LAorKwkweDFkLDB4MzAsMHhi MywweDc4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4Zjcs MHg5MywweGIwLDB4NmQsMHg3NywweDgzLDB4ZDUsMHgzOCwweDAxLDB4ZTEsMHg1MiwweDQwLAor KwkweDdlLDB4M2UsMHgwYywweDI2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10g PQorKwl7CisrCTB4YmMsMHg0YiwweDM3LDB4NDQsMHgxYywweGM1LDB4NDUsMHg1ZiwweDhmLDB4 NTEsMHg2MiwweDhhLAorKwkweDg1LDB4MzAsMHgxZCwweDdjLDB4ZTQsMHhjZiwweGY3LDB4NDQs MHhjZSwweDMyLDB4M2UsMHg1NywKKysJMHg5NSwweGE0LDB4MmEsMHhkZiwweGZkLDB4OWUsMHgz OCwweDQxLDB4YjMsMHhmNiwweGM1LDB4ZWUsCisrCTB4MGMsMHg0YiwweGVlLDB4NmUKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0KKysJeworKwkweGVjLDB4YWYsMHhmNiwweDRm LDB4YjEsMHhhMCwweDU0LDB4YjUsMHg1YiwweGUzLDB4NDYsMHhiMCwKKysJMHg3NiwweDVhLDB4 N2MsMHgzZiwweDdiLDB4OTQsMHg2OSwweDIxLDB4NTEsMHgwMiwweGU1LDB4OWYsCisrCTB4MDQs MHg1OSwweDAyLDB4OTgsMHhjNiwweDQzLDB4MmMsMHhjYywweDI2LDB4NGMsMHg4NywweDZiLAor KwkweDhlLDB4MGEsMHg4MywweGRmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9Cisr CXsKKysJMHg3NCwweDQ1LDB4ZmIsMHg1MywweDg0LDB4OTYsMHhiZSwweGZmLDB4MTUsMHhjYyww eDQxLDB4OTEsCisrCTB4YjksMHhhMSwweDIxLDB4NjgKKysJfTsKKysKKysKKysvKiBBRVMtMTky IG5vIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4M2MsMHg3ZCww eGI1LDB4ZTAsMHg1NCwweGQ5LDB4NmUsMHg4YywweGE5LDB4ODYsMHhjZSwweDRlLAorKwkweDZi LDB4YWYsMHhlYiwweDJmLDB4ZTcsMHg3NSwweGUwLDB4OGIsMHhhNCwweDNiLDB4MDcsMHhmZSwK KysJMHhiZSwweDMzLDB4NzUsMHg5MywweDgwLDB4MjcsMHhiNSwweDI5LDB4NDcsMHg4YiwweGM3 LDB4MjgsCisrCTB4OTQsMHhjMywweDU5LDB4NjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX25vbmNlW10gPQorKwl7 CisrCTB4NDMsMHhmMSwweDdkLDB4YjgsMHhjMywweGZlLDB4ZDAsMHgyMywweDZiLDB4YjQsMHg5 MiwweGRiLAorKwkweDI5LDB4ZmQsMHg0NSwweDcxCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9CisrCXsKKysJMHg5ZiwweDI0LDB4MjksMHg5OSwweDllLDB4MDEsMHhhYiww eGU5LDB4MTksMHhkOCwweDIzLDB4MDgsCisrCTB4YjcsMHhkNiwweDdlLDB4OGMsMHhjMCwweDll LDB4N2YsMHg2ZSwweDViLDB4MzMsMHgyMCwweDk2LAorKwkweDBiLDB4MjMsMHgyYywweGE1LDB4 NmEsMHhmOCwweDFiLDB4MDQsMHgyNiwweGRiLDB4MmUsMHgyYiwKKysJMHgzYiwweDg4LDB4Y2Us MHgzNQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4OTQsMHhlOSww eDdjLDB4M2QsMHhhNywweGRiLDB4NjAsMHg4MywweDFmLDB4OTgsMHgzZiwweDBiLAorKwkweDg4 LDB4NTksMHg1NywweDUxLDB4ODgsMHg5ZiwweDc2LDB4NDksMHg5ZiwweGE2LDB4ZGEsMHg3MSwK KysJMHgxZCwweDBkLDB4NDcsMHgxNiwweDYzLDB4YzUsMHg2OCwweGU0LDB4NWQsMHgzOSwweDY5 LDB4YjMsCisrCTB4M2UsMHhiZSwweGQ0LDB4OGUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2ludF9yZXR1cm5lZGJp dHNbXSA9CisrCXsKKysJMHhmOSwweGQ3LDB4YWQsMHg2OSwweGFiLDB4OGYsMHgyMywweDU2LDB4 NzAsMHgxNywweDRmLDB4MmEsCisrCTB4NDUsMHhlNywweDRhLDB4YzUKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2Vu dHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweGE2LDB4NzEsMHg2YSwweDNkLDB4YmEsMHhk MSwweGU4LDB4NjYsMHhhNiwweGVmLDB4YjIsMHgwZSwKKysJMHhhOCwweDljLDB4YWEsMHg0ZSww eGFmLDB4MTcsMHg4OSwweDUwLDB4MDAsMHhkYSwweGExLDB4YjEsCisrCTB4MGIsMHhhNCwweGQ5 LDB4MzUsMHg4OSwweGM4LDB4ZTUsMHhiMCwweGQ5LDB4YjcsMHhjNCwweDMzLAorKwkweDliLDB4 Y2IsMHg3ZSwweDc1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsK KysJMHgyNywweDIxLDB4ZmMsMHhjMiwweGJkLDB4ZjMsMHgzYywweGNlLDB4YzMsMHhjYSwweGMx LDB4MDEsCisrCTB4ZTAsMHhmZiwweDkzLDB4MTIsMHg3ZCwweDU0LDB4NDIsMHhlMywweDlmLDB4 MDMsMHhkZiwweDI3LAorKwkweDA0LDB4MDcsMHgzYywweDUzLDB4N2YsMHhhOCwweDY2LDB4Yzgs MHg5NywweDRiLDB4NjEsMHg0MCwKKysJMHg1ZCwweDdhLDB4MjUsMHg3OQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf YWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDJkLDB4OGUsMHgxNiwweDVkLDB4MGIsMHg5 ZiwweGViLDB4YWEsMHhkNiwweGVjLDB4MjgsMHg3MSwKKysJMHg3YywweDBiLDB4YzEsMHgxZCww eGQ0LDB4NDQsMHgxOSwweDQ3LDB4ZmQsMHgxZCwweDdjLDB4ZTUsCisrCTB4ZjMsMHgyNywweGUx LDB4YjYsMHg3MiwweDBhLDB4ZTAsMHhlYywweDBlLDB4Y2QsMHhlZiwweDFhLAorKwkweDkxLDB4 NmEsMHhlMywweDVmCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlNSww eGRhLDB4YjgsMHhlMCwweDYzLDB4NTksMHg1YSwweGNjLDB4M2QsMHhkYywweDlmLDB4ZTgsCisr CTB4NjYsMHg2NywweDJjLDB4OTIKKysJfTsKKysKKysKKysvKiBBRVMtMjU2IG5vIGRmIFBSICAq LworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf bm9fZGZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4MTUsMHhjNywweDVkLDB4Y2IsMHg0 MSwweDRiLDB4MTYsMHgwMSwweDNhLDB4ZDEsMHg0NCwweGU4LAorKwkweDIyLDB4MzIsMHhjNiww eDljLDB4M2YsMHhlNywweDQzLDB4ZjUsMHg5YSwweGQzLDB4ZWEsMHhmMiwKKysJMHhkNywweDRl LDB4NmUsMHg2YSwweDU1LDB4NzMsMHg0MCwweGVmLDB4ODksMHhhZCwweDBkLDB4MDMsCisrCTB4 OTYsMHg3ZSwweDc4LDB4ODEsMHgyZiwweDkxLDB4MWIsMHg0NCwweGIwLDB4MDIsMHhiYSwweDFj CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9wcl9ub25jZVtdID0KKysJeworKwkweGRjLDB4ZTQsMHhkNCwweDI3LDB4 N2EsMHg5MCwweGQ3LDB4OTksMHg0MywweGExLDB4M2MsMHgzMCwKKysJMHhjYywweDRiLDB4ZWUs MHgyZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4 ZTMsMHhlNiwweGI5LDB4MTEsMHhlNCwweDdhLDB4YTQsMHg0MCwweDZiLDB4ZjgsMHg3MywweGY3 LAorKwkweDdlLDB4ZWMsMHhjNywweGI5LDB4OTcsMHhiZiwweGY4LDB4MjUsMHg3YiwweGJlLDB4 MTEsMHg5YiwKKysJMHg1YiwweDZhLDB4MGMsMHgyZSwweDJiLDB4MDEsMHg1MSwweGNkLDB4NDEs MHg0YiwweDZiLDB4YWMsCisrCTB4MzEsMHhhOCwweDBiLDB4ZjcsMHhlNiwweDU5LDB4NDIsMHhi OCwweDAzLDB4MGMsMHhmOCwweDA2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9 CisrCXsKKysJMHg2YSwweDlmLDB4MDAsMHg5MSwweGFlLDB4ZmUsMHhjZiwweDg0LDB4OTksMHhj ZSwweGIxLDB4NDAsCisrCTB4NmQsMHg1ZCwweDMzLDB4MjgsMHg4NCwweGY0LDB4OGMsMHg2Myww eDRjLDB4N2UsMHhiZCwweDJjLAorKwkweDgwLDB4NzYsMHhlZSwweDVhLDB4YWEsMHgxNSwweDA3 LDB4MzEsMHhkOCwweGJiLDB4OGMsMHg2OSwKKysJMHg5ZCwweDlkLDB4YmMsMHg3ZSwweDQ5LDB4 YWUsMHhlYywweDM5LDB4NmIsMHhkMSwweDFmLDB4N2UKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlp bnB1dHByW10gPQorKwl7CisrCTB4ZjMsMHhiOSwweDc1LDB4OWMsMHhiZCwweDg4LDB4ZWEsMHhh MiwweDUwLDB4YWQsMHhkNiwweDE2LAorKwkweDFhLDB4MTIsMHgzYywweDg2LDB4NjgsMHhhZiww eDZmLDB4YmUsMHgxOSwweGYyLDB4ZWUsMHhjYywKKysJMHhhNSwweDcwLDB4ODQsMHg1MywweDUw LDB4Y2IsMHg5ZiwweDE0LDB4YTksMHhlNSwweGVlLDB4YjksCisrCTB4NDgsMHg0NSwweDQwLDB4 ZTIsMHhjNywweGM5LDB4OWEsMHg3NCwweGZmLDB4OGMsMHg5OSwweDFmCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9w cl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MmUsMHhmMiwweDQ1LDB4NGMsMHg2Miww eDJlLDB4MGEsMHhiOSwweDZiLDB4YTIsMHhmZCwweDU2LAorKwkweDc5LDB4NjAsMHg5MywweGNm CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4YWYsMHg2OSww eDIwLDB4ZTksMHgzYiwweDM3LDB4OWQsMHgzZiwweGI0LDB4ODAsMHgwMiwweDdhLAorKwkweDI1 LDB4N2QsMHhiOCwweGRlLDB4NzEsMHhjNSwweDA2LDB4MGMsMHhiNCwweGUyLDB4OGYsMHgzNSwK KysJMHhkOCwweDE0LDB4MGQsMHg3ZiwweDc2LDB4NjMsMHg0ZSwweGI1LDB4ZWUsMHhlOSwweDZm LDB4MzQsCisrCTB4YzcsMHg1ZiwweDU2LDB4MTQsMHg0YSwweGU4LDB4NzMsMHg5NSwweDViLDB4 MWMsMHhiOSwweGNiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJ MHhlNSwweGIwLDB4MmUsMHg3ZSwweDUyLDB4MzAsMHhlMywweDYzLDB4ODIsMHhiNiwweDQ0LDB4 ZDMsCisrCTB4MjUsMHgxOSwweDA1LDB4MjQsMHg5YSwweDlmLDB4NWYsMHgyNywweDZhLDB4Mjks MHhhYiwweGZhLAorKwkweDA3LDB4YTIsMHg0MiwweDBmLDB4YzUsMHhhOCwweDk0LDB4N2MsMHgx NywweDdiLDB4ODUsMHg4MywKKysJMHgwYywweDI1LDB4MGUsMHg2MywweDBiLDB4ZTksMHgxMiww eDYwLDB4Y2QsMHhlZiwweDgwLDB4MGYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0K KysJeworKwkweDVlLDB4ZjIsMHgyNiwweGVmLDB4OWYsMHg1OCwweDVkLDB4ZDUsMHg0YSwweDEw LDB4ZmUsMHhhNywKKysJMHgyZCwweDVmLDB4NGEsMHg0NgorKwl9OworKworKworKy8qIEFFUy0y NTYgbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhmYiwweGNm LDB4MWIsMHg2MSwweDE2LDB4ODksMHg3OCwweDIzLDB4ZjUsMHhkOCwweDk2LDB4ZTMsCisrCTB4 NGUsMHg2NCwweDBiLDB4MjksMHg5YSwweDNmLDB4ZjgsMHhhNSwweGVkLDB4ZjIsMHhmZSwweGRi LAorKwkweDE2LDB4Y2EsMHg3ZiwweDEwLDB4ZmEsMHg1ZSwweDE4LDB4NzYsMHgyYywweDYzLDB4 NWUsMHg5NiwKKysJMHhjZiwweGIzLDB4ZDYsMHhmYywweGFmLDB4OTksMHgzOSwweDI4LDB4OWMs MHg2MSwweGU4LDB4YjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX25vbmNlW10gPQorKwl7CisrCTB4MTIsMHg5Niww eGYwLDB4NTIsMHhmMywweDhkLDB4ODEsMHhjZiwweGRlLDB4ODYsMHhmMiwweDk5LAorKwkweDQz LDB4OTYsMHhiOSwweGYwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9Cisr CXsKKysJMHg2MywweDBkLDB4NzgsMHhmNSwweDkwLDB4OGUsMHgzMiwweDQ3LDB4YjAsMHg0ZCww eDM3LDB4NjAsCisrCTB4MDksMHg5NiwweGJjLDB4YmYsMHg5NywweDdhLDB4NjIsMHgxNCwweDQ1 LDB4YmQsMHg4ZCwweGNjLAorKwkweDY5LDB4ZmIsMHgwMywweGUxLDB4ODAsMHgxYywweGM3LDB4 ZTIsMHgyYSwweGY5LDB4MzcsMHgzZiwKKysJMHg2NiwweDRkLDB4NjIsMHhkOSwweDEwLDB4ZTAs MHhhZCwweGM4LDB4OWEsMHhmMCwweGE4LDB4NmQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1 dFtdID0KKysJeworKwkweDM2LDB4YzYsMHgxMywweDYwLDB4YmIsMHgxNCwweGFkLDB4MjIsMHhi MCwweDM4LDB4YWMsMHhhNiwKKysJMHgxOCwweDE2LDB4OTMsMHgyNSwweDg2LDB4YjcsMHhkYyww eGRjLDB4MzYsMHg5OCwweDJiLDB4ZjksCisrCTB4NjgsMHgzMywweGQzLDB4YzYsMHhmZiwweGNl LDB4OGQsMHgxNSwweDU5LDB4ODIsMHg3NiwweGVkLAorKwkweDZmLDB4OGQsMHg0OSwweDc0LDB4 MmYsMHhkYSwweGRjLDB4MWYsMHgxNywweGQwLDB4ZGUsMHgxNworKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfaW50X3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweDE2LDB4MmYsMHg4ZSwweDNmLDB4MjEsMHg3YSwweDFj LDB4MjAsMHg1NiwweGQxLDB4OTIsMHhmNiwKKysJMHhkMiwweDI1LDB4NzUsMHgwZQorKwl9Owor KworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf bm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4OTEsMHg3OSwweDc2LDB4ZWUs MHhlMCwweGNmLDB4OWUsMHhjMiwweGQ1LDB4ZDQsMHgyMywweDliLAorKwkweDEyLDB4OGMsMHg3 ZSwweDBhLDB4YjcsMHhkMiwweDhiLDB4ZDYsMHg3YywweGEzLDB4YzYsMHhlNSwKKysJMHgwZSww eGFhLDB4YzcsMHg2YiwweGFlLDB4MGQsMHhmYSwweDUzLDB4MDYsMHg3OSwweGExLDB4ZWQsCisr CTB4NGQsMHg2YSwweDBlLDB4ZDgsMHg5ZCwweGJlLDB4MWIsMHgzMSwweDkzLDB4N2IsMHhlYyww eGZiCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHhkMiww eDQ2LDB4NTAsMHgyMiwweDEwLDB4MTQsMHg2MywweGY3LDB4ZWEsMHgwZiwweGI5LDB4N2UsCisr CTB4MGQsMHhlMSwweDk0LDB4MDcsMHhhZiwweDA5LDB4NDQsMHgzMSwweGVhLDB4NjQsMHhhNCww eDE4LAorKwkweDViLDB4ZjksMHhkOCwweGMyLDB4ZmEsMHgwMywweDQ3LDB4YzUsMHgzOSwweDQz LDB4ZDUsMHgzYiwKKysJMHg2MiwweDg2LDB4NjQsMHhlYSwweDJjLDB4NzMsMHg4YywweGFlLDB4 OWQsMHg5OCwweDk4LDB4MjkKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsK KysJMHg4YywweGFiLDB4MTgsMHhmOCwweGMzLDB4ZWMsMHgxOCwweDVjLDB4YjMsMHgxZSwweDlk LDB4YmUsCisrCTB4M2YsMHgwMywweGI0LDB4MDAsMHg5OCwweDlkLDB4YWUsMHhlYiwweGY0LDB4 OTQsMHhmOCwweDQyLAorKwkweDhmLDB4ZTMsMHgzOSwweDA3LDB4ZTEsMHhjOSwweGFkLDB4MGIs MHgxZiwweGVkLDB4YzAsMHhiYSwKKysJMHhmNiwweGQxLDB4ZWMsMHgyNywweDg2LDB4N2IsMHhk NiwweDU1LDB4OWIsMHg2MCwweGE1LDB4YzYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3JldHVybmVkYml0c1tdID0K KysJeworKwkweGVmLDB4ZDIsMHhkOCwweDVjLDB4ZGMsMHg2MiwweDI1LDB4OWYsMHhhYSwweDFl LDB4MmMsMHg2NywKKysJMHhmNiwweDAyLDB4MzIsMHhlMgorKwl9OworKworKworKy8qIFNIQS0x IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4ZDIsMHgzNiwweGE1LDB4MjcsMHgzMSww eDczLDB4ZGQsMHgxMSwweDRmLDB4OTMsMHhiZCwweGUyLAorKwkweDMxLDB4YTUsMHg5MSwweDEz CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9wcl9ub25jZVtdID0KKysJeworKwkweGI1LDB4YjMsMHg2MCwweGVmLDB4ZjcsMHg2Myww eDMxLDB4ZjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0KKysJeworKwkweGQ0LDB4 YmIsMHgwMiwweDEwLDB4YjIsMHg3MSwweGRiLDB4ODEsMHhkNiwweGYwLDB4NDIsMHg2MCwKKysJ MHhkYSwweGVhLDB4NzcsMHg1MgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4 NGQsMHhkMiwweDZjLDB4ODcsMHhmYiwweDJjLDB4NGYsMHhhNiwweDhkLDB4MTYsMHg2MywweDIy LAorKwkweDZhLDB4NTEsMHhlMywweGY4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJewor KwkweGM5LDB4ODMsMHg5ZSwweDE2LDB4ZjYsMHgxYywweDBmLDB4YjIsMHhlYywweDYwLDB4MzEs MHhhOSwKKysJMHhjYiwweGE5LDB4MzYsMHg3YQorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfaW50X3JldHVybmVkYml0c1tdID0K KysJeworKwkweGE4LDB4MTMsMHg0ZiwweGY0LDB4MzEsMHgwMiwweDQ0LDB4ZTMsMHhkMywweDNk LDB4NjEsMHg5ZSwKKysJMHhlNSwweGM2LDB4M2UsMHg4OSwweGI1LDB4OWIsMHgwZiwweDM1Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4ZjksMHhlOCwweGQyLDB4NzIsMHgx MywweDM0LDB4OTUsMHg2ZiwweDE1LDB4NDksMHg0NywweDk5LAorKwkweDE2LDB4MDMsMHgxOSww eDQ3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHg0ZSwweDhjLDB4NDksMHg5 YiwweDRhLDB4NWMsMHg5YiwweDljLDB4M2EsMHhlZSwweGZiLDB4ZDIsCisrCTB4YWUsMHhjZCww eDhjLDB4YzQKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDUwLDB4YjQsMHhiNCww eGNkLDB4NjgsMHg1NywweGZjLDB4MmUsMHhjMSwweDUyLDB4Y2MsMHhmNiwKKysJMHg2OCwweGE0 LDB4ODEsMHhlZCwweDdlLDB4ZTQsMHgxZCwweDg3CisrCX07CisrCisrCisrLyogU0hBLTEgTm8g UFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MV9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhhOSwweDQ3LDB4MWIsMHgyOSwweDJkLDB4MWMs MHgwNSwweGRmLDB4NzYsMHhkMCwweDYyLDB4ZjksCisrCTB4ZTIsMHg3ZiwweDRjLDB4N2IKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X25vbmNlW10gPQorKwl7CisrCTB4NTMsMHgyMywweDI0LDB4ZTMsMHhlYywweDBjLDB4NTQsMHgx NAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4N2EsMHg4NywweGExLDB4 YWMsMHgxYywweGZkLDB4YWIsMHhhZSwweGY3LDB4ZDYsMHhmYiwweDc2LAorKwkweDI4LDB4ZWMs MHg2ZCwweGNhCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHhmYywweDkyLDB4MzUs MHhkNiwweDdlLDB4YjcsMHgyNCwweDY1LDB4ZmQsMHgxMiwweDI3LDB4MzUsCisrCTB4YzAsMHg3 MiwweGNhLDB4MjgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg1NywweDg4LDB4 ODIsMHhlNSwweDI1LDB4YTUsMHgyYywweDRhLDB4MDYsMHgyMCwweDZjLDB4NzIsCisrCTB4NTUs MHg2MSwweGRkLDB4OTAsMHg3MSwweDlmLDB4OTUsMHhlYQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfZW50cm9weWlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4NjksMHhhNSwweDQwLDB4NjIsMHg5OCwweDQ3LDB4NTYsMHg3MywweDRh LDB4OGYsMHg2MCwweDk2LAorKwkweGQ2LDB4OTksMHgyNywweGVkCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5w dXRyZXNlZWRbXSA9CisrCXsKKysJMHhlNSwweDQwLDB4NGUsMHhiZCwweDUwLDB4MDAsMHhmNSww eDE1LDB4YTYsMHhlZSwweDQ1LDB4ZGEsCisrCTB4ODQsMHgzZCwweGQ0LDB4YzAKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHgxMSwweDUxLDB4MTQsMHhmMCwweDA5LDB4MWIsMHg0 ZSwweDU2LDB4MGQsMHhlOSwweGY2LDB4MWUsCisrCTB4NTIsMHg2NSwweGNkLDB4OTYKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweGExLDB4OWMsMHg5NCwweDZlLDB4MjksMHhlMSwweDMz LDB4MGQsMHgzMiwweGQ2LDB4YWEsMHhjZSwKKysJMHg3MSwweDNmLDB4NTIsMHg3MiwweDhiLDB4 NDIsMHhhOCwweGQ3CisrCX07CisrCisrCisrLyogU0hBLTIyNCBQUiAgKi8KKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0 W10gPQorKwl7CisrCTB4MTIsMHg2OSwweDMyLDB4NGYsMHg4MywweGE2LDB4ZjUsMHgxNCwweGUz LDB4NDksMHgzZSwweDc1LAorKwkweDNlLDB4ZGUsMHhhZCwweGExLDB4MjksMHhjMywweGYzLDB4 MTksMHgyMCwweGI1LDB4NGMsMHhkOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9ub25jZVtdID0KKysJeworKwkweDZhLDB4 NzgsMHhkMCwweGViLDB4YmIsMHg1YSwweGYwLDB4ZWUsMHhlOCwweGMzLDB4YmEsMHg3MQorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHhkNSwweGI4LDB4YjYsMHhi YywweGMxLDB4NWIsMHg2MCwweDMxLDB4M2MsMHhmNSwweGU1LDB4YzAsCisrCTB4OGUsMHg1Miww eDdhLDB4YmQsMHhlYSwweDQ3LDB4YTksMHg1ZiwweDhmLDB4ZjksMHg4YiwweGFlCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3By X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDFmLDB4NTUsMHhlYywweGFlLDB4MTYsMHgx MiwweDg0LDB4YmEsMHg4NCwweDE2LDB4MTksMHg4OCwKKysJMHg4ZSwweGI4LDB4MzMsMHgyNSww eDU0LDB4ZmYsMHhjYSwweDc5LDB4YWYsMHgwNywweDI1LDB4NTAKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlu cHV0cHJbXSA9CisrCXsKKysJMHg5MiwweGEzLDB4MzIsMHhhOCwweDlhLDB4MGEsMHg1OCwweDdj LDB4MWQsMHg1YSwweDdlLDB4ZTEsCisrCTB4YjIsMHg3MywweGFiLDB4MGUsMHgxNiwweDc5LDB4 MjMsMHhkMywweDI5LDB4ODksMHg4MSwweGUxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHhmMywweDM4LDB4OTEsMHg0MCwweDM3LDB4N2EsMHg1MSwweDcyLDB4NDIsMHg3 NCwweDc4LDB4MGEsCisrCTB4NjksMHhmZCwweGE2LDB4NDQsMHg0MywweDQ1LDB4NmMsMHgwYyww eDVhLDB4MTksMHhmZiwweGYxLAorKwkweDU0LDB4NjAsMHhlZSwweDZhCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0 aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg3NSwweGYzLDB4MDQsMHgyNSwweGRkLDB4MzYsMHhh OCwweDM3LDB4NDYsMHhhZSwweDBjLDB4NTIsCisrCTB4MDUsMHg3OSwweDRjLDB4MjYsMHhkYiww eGU5LDB4NzEsMHgxNiwweDRjLDB4MGEsMHhmMiwweDYwCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dHBy MltdID0KKysJeworKwkweGVhLDB4YzUsMHgwMywweDBhLDB4NGYsMHhiMCwweDM4LDB4OGQsMHgy MywweGQ0LDB4YzgsMHg3NywKKysJMHhlMiwweDZkLDB4OWMsMHgwYiwweDQ0LDB4ZjcsMHgyZCww eDViLDB4YmYsMHg1ZCwweDJhLDB4MTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7Cisr CTB4NjAsMHg1MCwweDJiLDB4ZTcsMHg4NiwweGQ4LDB4MjYsMHg3MywweGUzLDB4MWQsMHg5NSww eDIwLAorKwkweGIzLDB4MmMsMHgzMiwweDFjLDB4ZjUsMHhjZSwweDU3LDB4YTYsMHg2NywweDJi LDB4ZGMsMHg0ZSwKKysJMHhkZCwweDExLDB4NGMsMHhjNAorKwl9OworKworKworKy8qIFNIQS0y MjQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweGIyLDB4MWMsMHg3NywweDRkLDB4 ZjYsMHhkMywweGI2LDB4NDAsMHhiNywweDMwLDB4M2UsMHgyOSwKKysJMHhiMCwweDg1LDB4MWMs MHhiZSwweDRhLDB4ZWEsMHg2YiwweDVhLDB4YjUsMHg4YSwweDk3LDB4ZWIKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfbm9uY2Vb XSA9CisrCXsKKysJMHg0MiwweDAyLDB4MGEsMHgxYywweDk4LDB4OWEsMHg3NywweDllLDB4OWYs MHg4MCwweGJhLDB4ZTAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4 OTgsMHhiOCwweDA0LDB4NDEsMHhmYywweGMxLDB4NWQsMHhjNSwweGU5LDB4YjksMHgwOCwweGRh LAorKwkweGY5LDB4ZmEsMHgwZCwweDkwLDB4Y2UsMHhkZiwweDFkLDB4MTAsMHhhOSwweDhkLDB4 NTAsMHgwYworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg5YSwweDhkLDB4Mzks MHg0OSwweDQyLDB4ZDUsMHgwYiwweGFlLDB4ZTEsMHhhZiwweGI3LDB4MDAsCisrCTB4MDIsMHhm YSwweDk2LDB4YjEsMHhhNSwweDFkLDB4MmQsMHgyNSwweDc4LDB4ZWUsMHg4MywweDNmCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlNCwweGY1LDB4NTMsMHg3OSwweDVhLDB4 OTcsMHg1OCwweDA2LDB4MDgsMHhiYSwweDdiLDB4ZmEsCisrCTB4ZjAsMHg4MywweDA1LDB4OGMs MHgyMiwweGMwLDB4YzksMHhkYiwweDE1LDB4ZTcsMHhkZSwweDIwLAorKwkweDU1LDB4MjIsMHg5 YSwweGFkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDY3LDB4MDksMHg0 OCwweGFhLDB4MDcsMHgxNiwweDk5LDB4ODksMHg3ZiwweDZkLDB4YTAsMHhlNSwKKysJMHg4Ziww eGRmLDB4YmMsMHhkYiwweGZlLDB4ZTUsMHg2YywweDdhLDB4OTUsMHg0YSwweDY2LDB4MTcKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4MGYsMHg0YiwweDFjLDB4NmYs MHhiNywweGUzLDB4NDcsMHhlNSwweDVkLDB4N2QsMHgzOCwweGQ2LAorKwkweDI4LDB4OWIsMHhl YiwweDU1LDB4NjMsMHgwOSwweDNlLDB4N2MsMHg1NiwweGVhLDB4ZjgsMHgxOQorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRp dGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4MmQsMHgyNiwweDdjLDB4MzcsMHhlNCwweDdhLDB4 MjgsMHg1ZSwweDVhLDB4M2MsMHhhZiwweDNkLAorKwkweDVhLDB4OGUsMHg1NSwweGEyLDB4MWEs MHg2ZSwweGMwLDB4ZTUsMHhmNiwweDIxLDB4ZDMsMHhmNgorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHg0ZCwweDgzLDB4MzUsMHhkZiwweDY3LDB4YTksMHhmYywweDE3LDB4ZGEsMHg3 MCwweGNjLDB4OGIsCisrCTB4N2YsMHg3NywweGFlLDB4YTIsMHg1ZiwweGI5LDB4N2UsMHg3NCww eDRjLDB4MjYsMHhjMSwweDdhLAorKwkweDNiLDB4YTcsMHg1YywweDkzCisrCX07CisrCisrCisr LyogU0hBLTI1NiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4Y2UsMHg0OSwweDAw LDB4N2EsMHg1NiwweGUzLDB4NjcsMHg4ZiwweGUxLDB4YjYsMHhhNywweGQ0LAorKwkweDRmLDB4 MDgsMHg3YSwweDFiLDB4MDEsMHhmNCwweGZhLDB4NmIsMHhlZiwweGI3LDB4ZTUsMHhlYiwKKysJ MHgwNywweDNkLDB4MTEsMHgwZCwweGM4LDB4ZWEsMHgyYiwweGZlCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX25vbmNlW10g PQorKwl7CisrCTB4NzMsMHg0MSwweGM4LDB4OTIsMHg5NCwweGUyLDB4YzUsMHg1ZiwweDkzLDB4 ZmQsMHgzOSwweDVkLAorKwkweDJiLDB4OTEsMHg0ZCwweDM4CisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0KKysJeworKwkweDUwLDB4NmQsMHgwMSwweDAxLDB4MDcsMHg1YSwweDgw LDB4MzUsMHg3YSwweDU2LDB4MWEsMHg1NiwKKysJMHgyZiwweDlhLDB4MGIsMHgzNSwweGIyLDB4 YjEsMHhjOSwweGU1LDB4Y2EsMHg2OSwweDYxLDB4NDgsCisrCTB4ZmYsMHhmYiwweDBmLDB4ZDks MHg0YiwweDc5LDB4MWQsMHhiYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJ MHgyMCwweGI4LDB4ZGYsMHg0NCwweDc3LDB4NWEsMHhiOCwweGQzLDB4YmYsMHhmNiwweGNmLDB4 YWMsCisrCTB4NWUsMHhhNiwweDk2LDB4NjIsMHg3MywweDQ0LDB4NDAsMHg0YSwweDMwLDB4ZmIs MHgzOCwweGE1LAorKwkweDdiLDB4MGQsMHhlNCwweDBkLDB4YzYsMHhlNCwweDlhLDB4MWYKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy NTZfcHJfZW50cm9weWlucHV0cHJbXSA9CisrCXsKKysJMHgwNCwweGM0LDB4NjUsMHhmNCwweGQz LDB4YmYsMHg4MywweDRiLDB4YWIsMHhjOCwweDQxLDB4YTgsCisrCTB4YzIsMHhlMCwweDQ0LDB4 NjMsMHg3NywweDRjLDB4NmYsMHg2YywweDQ5LDB4NDYsMHhmZiwweDk0LAorKwkweDE3LDB4ZWEs MHhlNiwweDFhLDB4OWQsMHg1ZSwweDY2LDB4NzgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1td ID0KKysJeworKwkweDA3LDB4NGQsMHhhYywweDliLDB4ODYsMHhjYSwweDRhLDB4YWEsMHg2ZSww eDdhLDB4MDMsMHhhMiwKKysJMHg1ZCwweDEwLDB4ZWEsMHgwYiwweGY5LDB4ODMsMHhjYywweGQx LDB4ZmMsMHhlMiwweDA3LDB4YzcsCisrCTB4MDYsMHgzNCwweDYwLDB4NmYsMHg4MywweDk0LDB4 OTksMHg3NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4ODksMHg0ZSww eDQ1LDB4OGMsMHgxMSwweGY5LDB4YmMsMHg1YiwweGFjLDB4NzQsMHg4YiwweDRiLAorKwkweDVm LDB4ZjcsMHgxOSwweGYzLDB4ZjUsMHgyNCwweDU0LDB4MTQsMHhkMSwweDE1LDB4YjEsMHg0MywK KysJMHgxMiwweGE0LDB4NWYsMHhkNCwweGVjLDB4ZmMsMHhjZCwweDA5CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJv cHlpbnB1dHByMltdID0KKysJeworKwkweDBlLDB4ZWIsMHgxZiwweGQ3LDB4ZmMsMHhkMSwweDlk LDB4ZDQsMHgwNSwweDM2LDB4OGIsMHhiMiwKKysJMHhmYiwweGU0LDB4ZjQsMHg1MSwweDBjLDB4 ODcsMHg5YiwweDAyLDB4NDQsMHhkNSwweDkyLDB4NGQsCisrCTB4NDQsMHhmZSwweDFhLDB4MDMs MHg0MywweDU2LDB4YmQsMHg4NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHgw MiwweGFhLDB4YjYsMHgxZCwweDdlLDB4MmEsMHg0MCwweDAzLDB4NjksMHgyZCwweDQ5LDB4YTMs CisrCTB4NDEsMHhlNywweDQ0LDB4MGIsMHhhZiwweDdiLDB4ODUsMHhlNCwweDVmLDB4NTMsMHgz YiwweDY0LAorKwkweGJjLDB4ODksMHhjOCwweDgyLDB4ZDQsMHg3OCwweDM3LDB4YTIKKysJfTsK KysKKysKKysvKiBTSEEtMjU2IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg1Yiww eDFiLDB4ZWMsMHg0ZCwweGE5LDB4MzgsMHg3NCwweDVhLDB4MzQsMHgwYiwweDdiLDB4YzUsCisr CTB4ZTUsMHhkNywweDY2LDB4N2MsMHhiYywweDgyLDB4YjksMHgwZSwweDJkLDB4MWYsMHg5Miww eGQ3LAorKwkweGMxLDB4YmMsMHg2NywweDY5LDB4ZWMsMHg2YiwweDAzLDB4M2MKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfbm9u Y2VbXSA9CisrCXsKKysJMHhhNCwweDBjLDB4ZDgsMHg5YywweDYxLDB4ZDgsMHhjMywweDU0LDB4 ZmUsMHg1MywweGM5LDB4ZTUsCisrCTB4NWQsMHg2ZiwweDZkLDB4MzUKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4MjIsMHg1ZSwweDYyLDB4OTMsMHg0MiwweDgzLDB4 NzgsMHgyNCwweGQ4LDB4NDAsMHg4YywweGRlLAorKwkweDZmLDB4ZjksMHhhNCwweDdhLDB4YzUs MHhhNywweDNiLDB4ODgsMHhhMywweGVlLDB4NDIsMHgyMCwKKysJMHhmZCwweDYxLDB4NTYsMHhj NiwweDRjLDB4MTMsMHg0MSwweDljCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkw eGJmLDB4NzQsMHg1YiwweGY2LDB4YzUsMHg2NCwweDVlLDB4OTksMHgzNCwweDhmLDB4YmMsMHhh NCwKKysJMHhlMiwweGJkLDB4ZDgsMHg4NSwweDI2LDB4MzcsMHhlYSwweGJhLDB4NGYsMHhmMiww eDlhLDB4OWEsCisrCTB4NjYsMHhmYywweGRmLDB4NjMsMHgyNiwweDI2LDB4MTksMHg4NworKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1 Nl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YjMsMHhjNiwweDA3LDB4MDcsMHhkNiww eDc1LDB4ZjYsMHgyYiwweGQ2LDB4MjEsMHg5NiwweGYxLAorKwkweGFlLDB4ZGIsMHgyYiwweGFj LDB4MjUsMHgyYSwweGFlLDB4YWUsMHg0MSwweDcyLDB4MDMsMHg1ZSwKKysJMHhiZiwweGQzLDB4 NjQsMHhiYywweDU5LDB4ZjksMHhjMCwweDc2CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0K KysJeworKwkweGJmLDB4MjAsMHgzMywweDU2LDB4MjksMHhhOCwweDM3LDB4MDQsMHgxZiwweDc4 LDB4MzQsMHgzZCwKKysJMHg4MSwweDJhLDB4YzksMHg4NiwweGM2LDB4N2EsMHgyZiwweDg4LDB4 NWUsMHhkNSwweGJlLDB4MzQsCisrCTB4NDYsMHgyMCwweGE0LDB4MzUsMHhlYiwweGM3LDB4ZTIs MHg5ZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9CisrCXsKKysJMHg5YiwweGFlLDB4 MmQsMHgyZCwweDYxLDB4YTQsMHg4OSwweGViLDB4NDMsMHg0NiwweGE3LDB4ZGEsCisrCTB4ZWYs MHg0MCwweGNhLDB4NGEsMHg5OSwweDExLDB4NDEsMHhkYywweDVjLDB4OTQsMHhlOSwweGFjLAor KwkweGQ0LDB4ZDAsMHhlNiwweGJkLDB4ZmIsMHgwMywweDljLDB4YTgKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25h bGlucHV0MltdID0KKysJeworKwkweDIzLDB4YWEsMHgwYywweGJkLDB4MjgsMHgzMywweGUyLDB4 NTEsMHhmYywweDcxLDB4ZDIsMHgxNSwKKysJMHgxZiwweDc2LDB4ZmQsMHgwZCwweGUwLDB4Yjcs MHhiNSwweDg0LDB4NzUsMHg1YiwweGJlLDB4ZjMsCisrCTB4NWMsMHhjYSwweGM1LDB4MzAsMHhm MiwweDc1LDB4MWYsMHhkYQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg5MCwweDNj LDB4YzEsMHgxMCwweDhjLDB4MTIsMHgwMSwweGM2LDB4YTYsMHgzYSwweDBmLDB4NGQsCisrCTB4 YjYsMHgzYSwweDRmLDB4NDEsMHg5YywweDYxLDB4NzUsMHg4NCwweGU5LDB4NzQsMHg3NSwweGZk LAorKwkweGZlLDB4ZjIsMHgxZiwweDQzLDB4ZDgsMHg1ZSwweDI0LDB4YTMKKysJfTsKKysKKysK KysvKiBTSEEtMzg0IFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHg3MSwweDlkLDB4 YjIsMHg1YSwweDcxLDB4NmQsMHgwNCwweGU5LDB4MWUsMHhjNywweDkyLDB4MjQsCisrCTB4NmUs MHgxMiwweDMzLDB4YTksMHg1MiwweDY0LDB4MzEsMHhlZiwweDcxLDB4ZWIsMHgyMiwweDU1LAor KwkweDI4LDB4OTcsMHgwNiwweDZhLDB4YzAsMHgwYywweGEwLDB4N2UKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfbm9uY2Vb XSA9CisrCXsKKysJMHhmNSwweDBkLDB4ZmEsMHhiMCwweGVjLDB4NmEsMHg3YywweGQ2LDB4YmQs MHg5YiwweDA1LDB4ZmQsCisrCTB4MzgsMHgzZSwweDJlLDB4NTYKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NzQsMHhhYywweDdlLDB4NmQsMHhiMSwweGE0LDB4 ZTcsMHgyMSwweGQxLDB4MWUsMHg2ZSwweDk2LAorKwkweDZkLDB4NGQsMHg1MywweDQ2LDB4ODIs MHg5NiwweDZlLDB4Y2YsMHhhYSwweDgxLDB4OGQsMHg3ZCwKKysJMHg5ZSwweGUxLDB4MGYsMHgx NSwweGVhLDB4NDEsMHhiZiwweGUzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJewor KwkweGRhLDB4OTUsMHhkNCwweGQwLDB4YjgsMHgxMSwweGQzLDB4NDksMHgyNywweDVkLDB4YTks MHgzOSwKKysJMHg2OCwweGYzLDB4YTgsMHhlOSwweDVkLDB4MTksMHg4YSwweDJiLDB4NjYsMHhl OCwweDY5LDB4MDYsCisrCTB4N2MsMHg5ZSwweDAzLDB4YTEsMHg4YiwweDI2LDB4MmQsMHg2ZQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDQ5LDB4ZGYsMHg0NCwweDAwLDB4 ZTQsMHgxYywweDc1LDB4MGIsMHgyNiwweDVhLDB4NTksMHg2NCwKKysJMHgxZiwweDRlLDB4YjEs MHhiMiwweDEzLDB4ZjEsMHgyMiwweDRlLDB4YjQsMHg2ZCwweDlhLDB4Y2MsCisrCTB4YTAsMHg0 OCwweGU2LDB4Y2YsMHgxZCwweGQxLDB4OTIsMHgwZAorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPQorKwl7CisrCTB4YzgsMHg1MiwweGFlLDB4YmYsMHgwNCwweDNjLDB4MjcsMHhiNywweDc4 LDB4MTgsMHhhYSwweDhmLAorKwkweGZmLDB4Y2YsMHhhNCwweGYxLDB4Y2MsMHhlNywweDY4LDB4 ZmEsMHgyMiwweGEyLDB4MTMsMHg0NSwKKysJMHhlOCwweGRkLDB4ODcsMHhlNiwweGYyLDB4NmUs MHhkZCwweGM3LDB4NTIsMHg5MCwweDlmLDB4N2IsCisrCTB4ZmEsMHg2MSwweDJkLDB4OWQsMHg5 ZSwweGNmLDB4OTgsMHhhYywweDUyLDB4NDAsMHhjZSwweGFmCisrCX07CisrCisrX19maXBzX2Nv bnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2FkZGl0aW9uYWxp bnB1dDJbXSA9CisrCXsKKysJMHg2MSwweDdjLDB4MDMsMHg5YSwweDNlLDB4NTAsMHg1NywweDYw LDB4YzUsMHg4MywweGM5LDB4YjIsCisrCTB4ZDEsMHg4NywweDg1LDB4NjYsMHg5MiwweDVkLDB4 ODQsMHgwZSwweDUzLDB4ZmIsMHg3MCwweDAzLAorKwkweDcyLDB4ZmQsMHhiYSwweGFlLDB4OWMs MHg4ZiwweGY4LDB4MTgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4Zjgs MHhlYiwweDg5LDB4YjEsMHg4ZCwweDc4LDB4YmUsMHgyMSwweGUwLDB4YmIsMHg5ZCwweGI3LAor KwkweDk1LDB4MGUsMHhkOSwweDQ2LDB4MGMsMHg4YywweGUyLDB4NjMsMHhiNywweDlkLDB4Njcs MHg5MCwKKysJMHhiZCwweGM3LDB4MGIsMHhhNSwweGNlLDB4YjIsMHg2NSwweDgxCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3By X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGU2LDB4OWYsMHhmZSwweDY4LDB4ZDYsMHhiNSww eDc5LDB4ZjEsMHgwNiwweDVmLDB4YTMsMHhiYiwKKysJMHgyMywweDg1LDB4ZDgsMHhmMCwweDI5 LDB4NWEsMHg2OCwweDllLDB4ZjUsMHhmNCwweGE2LDB4MTIsCisrCTB4ZTAsMHg5YSwweGUyLDB4 YWMsMHgwMCwweDFkLDB4OTgsMHgyNiwweGZjLDB4NTMsMHg5NSwweDUzLAorKwkweGU0LDB4M2Us MHgxNywweGQ1LDB4MDgsMHgwYiwweDcwLDB4M2QsMHg2NywweDk5LDB4YWMsMHg2NgorKwl9Owor KworKworKy8qIFNIQS0zODQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDA3LDB4 MTUsMHgyNywweDJhLDB4YWYsMHg3NCwweDI0LDB4MzcsMHhiYywweGQ1LDB4MTQsMHg2OSwKKysJ MHhjZSwweDExLDB4ZmYsMHhhMiwweDZiLDB4YjgsMHgwNSwweDY3LDB4MzQsMHhmOCwweGJkLDB4 NmQsCisrCTB4NmEsMHhjYywweGNkLDB4NjAsMHhhMywweDY4LDB4Y2EsMHhmNAorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9ub25j ZVtdID0KKysJeworKwkweDcwLDB4MTcsMHhjMiwweDViLDB4NWQsMHgyMiwweDBiLDB4MDYsMHgx NSwweDU0LDB4NzgsMHg3NywKKysJMHg0NCwweGFmLDB4MmYsMHgwOQorKwl9OworKworK19fZmlw c19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg4OSwweDM5LDB4MjgsMHhiMCwweDYwLDB4ZWIsMHgz ZCwweGRjLDB4NTUsMHg3NSwweDg2LDB4ZWIsCisrCTB4YWUsMHhhMiwweDhmLDB4YmMsMHgxYiww eDc1LDB4ZDQsMHhlMSwweDBmLDB4YWEsMHgzOCwweGNhLAorKwkweDYyLDB4OGIsMHhjYiwweDJj LDB4MjYsMHhmNiwweGJjLDB4YjEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4 MzAsMHgyYiwweDQyLDB4MzUsMHhlZiwweGRhLDB4NDAsMHg1NSwweDI4LDB4YzYsMHg5NSwweGZi LAorKwkweDU0LDB4MDEsMHg2MiwweGQ3LDB4ODcsMHgxNCwweDQ4LDB4NmQsMHg5MCwweDRjLDB4 YTksMHgwMiwKKysJMHg1NCwweDQwLDB4MjIsMHhjOCwweDY2LDB4YTUsMHg0OCwweDQ4CisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0 X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg4MiwweGM0LDB4YTEsMHg5YywweDIxLDB4 ZDIsMHhlNywweGE1LDB4YTYsMHhmNiwweDVmLDB4MDQsCisrCTB4NWMsMHhjNywweDMxLDB4OWQs MHg4ZCwweDU5LDB4NzQsMHg1MCwweDE5LDB4ODksMHgyZiwweDYzLAorKwkweGQ1LDB4YjcsMHg3 ZSwweGViLDB4MTUsMHhlMywweDcwLDB4ODMsMHhhMSwweDI0LDB4NTksMHhmYSwKKysJMHgyYyww eDU2LDB4ZjYsMHg4OCwweDNhLDB4OTIsMHg5MywweGExLDB4ZmIsMHg3OSwweGMxLDB4N2EKKysJ fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEz ODRfZW50cm9weWlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4MzksMHhhNiwweGU4LDB4NWMsMHg4 MiwweDE3LDB4NzEsMHgyNiwweDU3LDB4NGYsMHg5ZiwweGMyLAorKwkweDU1LDB4ZmYsMHg1Yyww eDliLDB4NTMsMHgxYSwweGQxLDB4NWYsMHhiYywweDYyLDB4ZTQsMHgyNywKKysJMHgyZCwweDMy LDB4ZjAsMHhlNCwweDUyLDB4OGMsMHhjNSwweDBjCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dHJlc2Vl ZFtdID0KKysJeworKwkweDhkLDB4Y2IsMHg4ZCwweGNlLDB4MDgsMHhlYSwweDgwLDB4ZTgsMHg5 YiwweDYxLDB4YTgsMHgwZiwKKysJMHhhZiwweDQ5LDB4MjAsMHg5ZSwweDc0LDB4Y2IsMHg1Nyww eDgwLDB4NDIsMHhiMCwweDg0LDB4NWUsCisrCTB4MzAsMHgyYSwweDY3LDB4MDgsMHhmNCwweGUz LDB4NDAsMHgyMgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4N2MsMHg4Ziww eGMyLDB4YWUsMHgyMiwweDRhLDB4ZDYsMHhmNiwweDA1LDB4YTQsMHg3YSwweGVhLAorKwkweGJi LDB4MjUsMHhkMCwweGI3LDB4NWEsMHhkNiwweGNmLDB4OWQsMHhmMywweDZjLDB4ZTIsMHhiMiwK KysJMHg0ZSwweGI0LDB4YmQsMHhmNCwweGU1LDB4NDAsMHg4MCwweDk0CisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3JldHVybmVk Yml0c1tdID0KKysJeworKwkweDllLDB4N2UsMHhmYiwweDU5LDB4YmIsMHhhYSwweDNjLDB4Zjcs MHhlMSwweGY4LDB4NzYsMHhkZCwKKysJMHg2MywweDVmLDB4YWYsMHgyMywweGQ2LDB4NjQsMHg2 MSwweGMwLDB4OWEsMHgwOSwweDQ3LDB4YzksCisrCTB4MzMsMHhkZiwweDZkLDB4NTUsMHg5MSww eDM0LDB4NzksMHg3MCwweGM0LDB4OTksMHg2ZSwweDU0LAorKwkweDA5LDB4NjQsMHgyMSwweDFh LDB4YmQsMHgxZSwweDgwLDB4NDAsMHgzNCwweGFkLDB4ZmEsMHhkNworKwl9OworKworKworKy8q IFNIQS01MTIgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDEzLDB4ZjcsMHg2MSww eDc1LDB4NjUsMHgyOCwweGEyLDB4NTksMHgxMywweDVhLDB4NGEsMHg0ZiwKKysJMHg1NiwweDYw LDB4OGMsMHg1MywweDdkLDB4YjAsMHhiZCwweDA2LDB4NGYsMHhlZCwweGNjLDB4ZDIsCisrCTB4 YTIsMHhiNSwweGZkLDB4NWIsMHgzYSwweGFiLDB4ZWMsMHgyOAorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9ub25jZVtdID0K KysJeworKwkweGJlLDB4YTMsMHg5MSwweDkzLDB4MWQsMHhjMywweDMxLDB4M2EsMHgyMywweDMz LDB4NTAsMHg2NywKKysJMHg4OCwweGM3LDB4YTIsMHhjNAorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9CisrCXsKKysJMHgxZiwweDU5LDB4NGQsMHg3YiwweGU2LDB4NDYsMHg5MSww eDQ4LDB4YzEsMHgyNSwweGZhLDB4ZmYsCisrCTB4ODksMHgxMiwweDc3LDB4MzUsMHhkZiwweDNl LDB4ZjQsMHg4MCwweDVmLDB4ZDksMHhiMCwweDA3LAorKwkweDIyLDB4NDEsMHhkZCwweDQ4LDB4 NzgsMHg2YiwweDc3LDB4MmIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4 MzAsMHhmZiwweDYzLDB4NmYsMHhhYywweGQ5LDB4ODQsMHgzOSwweDZmLDB4ZTQsMHg5OSwweGNl LAorKwkweDkxLDB4N2QsMHg3ZSwweGM4LDB4NTgsMHhmMiwweDEyLDB4YzMsMHhiNiwweGFkLDB4 ZGEsMHgyMiwKKysJMHgwNCwweGEwLDB4ZDIsMHgyMSwweGZlLDB4ZjIsMHg5NSwweDFkCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4NjQsMHg1NCwweDEzLDB4ZWMsMHg0Ziww eDc3LDB4ZGEsMHhiMiwweDkyLDB4MmUsMHg1MiwweDgwLAorKwkweDExLDB4MTAsMHhjMiwweGY4 LDB4ZTYsMHhhNywweGNkLDB4NGIsMHhmYywweDMyLDB4MmUsMHg5ZSwKKysJMHhlYiwweGJiLDB4 YjEsMHhiZiwweDE1LDB4NWMsMHg3MywweDA4CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 CisrCXsKKysJMHhlZiwweDFlLDB4ZGMsMHgwYSwweGE0LDB4MzYsMHg5MSwweDljLDB4M2QsMHgy NywweDk3LDB4NTAsCisrCTB4OGQsMHgzNiwweDI5LDB4OGQsMHhjZSwweDZhLDB4MGMsMHhmNyww eDIxLDB4YzAsMHg5MSwweGFlLAorKwkweDBjLDB4OTYsMHg3MiwweGJkLDB4NTIsMHg4MSwweDU4 LDB4ZmMsMHg2ZCwweGU1LDB4ZjcsMHhhNSwKKysJMHhmZCwweDVkLDB4YTcsMHg1OCwweDY4LDB4 YzgsMHg5OSwweDU4LDB4OGUsMHhjOCwweGNlLDB4OTUsCisrCTB4MDEsMHg3ZCwweGZmLDB4YTQs MHhjOCwweGY3LDB4NjMsMHhmZSwweDVmLDB4NjksMHg4MywweDUzLAorKwkweGUyLDB4YzYsMHg4 YiwweGMzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHhlNiwweDliLDB4 YzQsMHg4OCwweDM0LDB4Y2EsMHhlYSwweDI5LDB4MmYsMHg5OCwweDA1LDB4YTQsCisrCTB4ZDMs MHhjMCwweDdiLDB4MTEsMHhlOCwweGJiLDB4NzUsMHhmMiwweGJkLDB4MjksMHhiNywweDQwLAor KwkweDI1LDB4N2YsMHhjMSwweGI3LDB4YjEsMHhmMSwweDI1LDB4NjEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9w eWlucHV0cHIyW10gPQorKwl7CisrCTB4MjMsMHg2ZCwweGZmLDB4ZGUsMHhmYiwweGQxLDB4YmEs MHgzMywweDE4LDB4ZTYsMHhiZSwweGI1LAorKwkweDQ4LDB4NzcsMHg2ZCwweDdmLDB4YTcsMHhl MSwweDRkLDB4NDgsMHgxZSwweDNjLDB4YTcsMHgzNCwKKysJMHgxYSwweGM4LDB4NjAsMHhkYiww eDhmLDB4OTksMHgxNSwweDk5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3JldHVybmVkYml0c1tdID0KKysJeworKwkweDcw LDB4MjcsMHgzMSwweGRiLDB4OTIsMHg3MCwweDIxLDB4ZmUsMHgxNiwweGI2LDB4YzgsMHg1MSwK KysJMHgzNCwweDg3LDB4NjUsMHhkMCwweDRlLDB4ZmQsMHhmZSwweDY4LDB4ZWMsMHhhYywweGRj LDB4OTMsCisrCTB4NDEsMHgzOCwweDkyLDB4OTAsMHhiNCwweDk0LDB4ZjksMHgwZCwweGE0LDB4 ZjcsMHg0ZSwweDgwLAorKwkweDkyLDB4NjcsMHg0OCwweDQwLDB4YTcsMHgwOCwweGM3LDB4YmMs MHg2NiwweDAwLDB4ZmQsMHhmNywKKysJMHg0YywweDhiLDB4MTcsMHg2ZSwweGQxLDB4OGYsMHg5 YiwweGYzLDB4NmYsMHhmNiwweDM0LDB4ZGQsCisrCTB4NjcsMHhmNywweDY4LDB4ZGQKKysJfTsK KysKKysKKysvKiBTSEEtNTEyIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHhiNiww eDBiLDB4YjcsMHhiYywweDg0LDB4NTYsMHhmNiwweDEyLDB4YWYsMHg0NSwweDY3LDB4MTcsCisr CTB4N2MsMHhkMSwweGIyLDB4NzgsMHgyYiwweGEwLDB4ZjIsMHhiZSwweGI2LDB4NmQsMHg4Yiww eDU2LAorKwkweGM2LDB4YmMsMHg0ZCwweGUxLDB4ZjcsMHhiZSwweGNlLDB4YmQKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfbm9u Y2VbXSA9CisrCXsKKysJMHg5ZCwweGVkLDB4YzAsMHhlNSwweDVhLDB4OTgsMHg2YSwweGNiLDB4 NTEsMHg3ZCwweDc2LDB4MzEsCisrCTB4NWEsMHg2NCwweGYwLDB4ZjcKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4YzIsMHg2ZCwweGEzLDB4YzMsMHgwNiwweDc0LDB4 ZTUsMHgwMSwweDVjLDB4MTAsMHgxNywweGM3LAorKwkweGFmLDB4ODMsMHg5ZCwweDU5LDB4OGQs MHgyZCwweDI5LDB4MzgsMHhjNSwweDU5LDB4NzAsMHg4YiwKKysJMHg0NiwweDQ4LDB4MmQsMHhj ZiwweDM2LDB4N2QsMHg1OSwweGMwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkw eGVjLDB4OGMsMHhkNCwweGY3LDB4NjEsMHg2ZSwweDBkLDB4OTUsMHg3OSwweGI3LDB4MjgsMHhh ZCwKKysJMHg1ZiwweDY5LDB4NzQsMHg1ZiwweDJkLDB4MzYsMHgwNiwweDhhLDB4NmIsMHhhYyww eDU0LDB4OTcsCisrCTB4YzQsMHhhMSwweDEyLDB4ODUsMHgwYSwweGRmLDB4NGIsMHgzNAorKwl9 OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ODQsMHgyZiwweDFmLDB4NjgsMHg2YSww eGEzLDB4YWQsMHgxZSwweGZiLDB4ZjQsMHgxNSwweGJkLAorKwkweGRlLDB4MzgsMHhkNCwweDMw LDB4ODAsMHg1MSwweGU5LDB4ZDMsMHhjNywweDIwLDB4ODgsMHhlOSwKKysJMHhmNSwweGNjLDB4 ZGYsMHg1NywweDVjLDB4NDcsMHgyZiwweDU3LDB4M2MsMHg1ZiwweDEzLDB4NTYsCisrCTB4Y2Ms MHhjNSwweDRmLDB4ODQsMHhmOCwweDEwLDB4NDEsMHhkNSwweDdlLDB4NTgsMHg2ZSwweDE5LAor KwkweDE5LDB4OWUsMHhhZiwweGMyLDB4MjIsMHg1OCwweDQxLDB4NTAsMHg3OSwweGMyLDB4ZDgs MHgwNCwKKysJMHgyOCwweGQ0LDB4MzksMHg5YQorKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9 CisrCXsKKysJMHhmYSwweDdmLDB4NDYsMHg1MSwweDgzLDB4NjIsMHg5OCwweDE2LDB4OWEsMHgx OSwweGEyLDB4NDksCisrCTB4YTksMHhlNiwweDRhLDB4ZDgsMHg4NSwweGU3LDB4ZDQsMHgzYiww eDJjLDB4ODIsMHhjNSwweDgyLAorKwkweGJmLDB4MTEsMHhmOSwweDllLDB4YmMsMHhkMCwweDAx LDB4ZWUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPQorKwl7CisrCTB4YjksMHgxMiww eGUwLDB4NGYsMHhmNywweGE3LDB4YzQsMHhkOCwweGQwLDB4OGUsMHg5OSwweDI5LAorKwkweDdj LDB4OWEsMHhlOSwweGNmLDB4YzQsMHg2YywweGY4LDB4YzMsMHhhNywweDQxLDB4ODMsMHhkNiwK KysJMHgyZSwweGZhLDB4YjgsMHg1ZSwweDhlLDB4NmIsMHg3OCwweDIwCisrCX07CisrCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9u YWxpbnB1dDJbXSA9CisrCXsKKysJMHhkNywweDA3LDB4NTIsMHhiOSwweDgzLDB4MmMsMHgwMyww eDcxLDB4ZWUsMHhjOSwweGMwLDB4ODUsCisrCTB4ZTEsMHg1NywweGIyLDB4Y2QsMHgzYSwweGYw LDB4YzksMHgzNCwweDI0LDB4NDEsMHgxYywweDQyLAorKwkweDk5LDB4YjIsMHg4NCwweGU5LDB4 MTcsMHhkMiwweDc2LDB4OTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4MzYsMHgx NywweDVkLDB4OTgsMHgyYiwweDY1LDB4MjUsMHg4ZSwweGM4LDB4MjksMHhkZiwweDI3LAorKwkw eDA1LDB4MzYsMHgyNiwweDEyLDB4OGEsMHg2OCwweDc0LDB4MjcsMHgzNywweGQ0LDB4N2YsMHgz MiwKKysJMHhiMSwweDEyLDB4ZDYsMHg4NSwweDgzLDB4ZWIsMHgyZSwweGEwLDB4ZWQsMHg0Yiww eGI1LDB4N2IsCisrCTB4NmYsMHgzOSwweDNjLDB4NzEsMHg3NywweDAyLDB4MTIsMHhjYywweDJj LDB4M2EsMHg4ZSwweDYzLAorKwkweGRmLDB4NGEsMHhiZCwweDZmLDB4NmUsMHgyZSwweGVkLDB4 MGEsMHg4NSwweGE1LDB4MmYsMHhhMiwKKysJMHg2OCwweGRlLDB4NDIsMHhiNQorKwl9OworKwor KworKy8qIEhNQUMgU0hBLTEgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDI2 LDB4NWYsMHgzNiwweDE0LDB4ZmYsMHgzZCwweDgzLDB4ZmEsMHg3MywweDVlLDB4NzUsMHhkYywK KysJMHgyYywweDE4LDB4MTcsMHgxYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9ub25jZVtdID0KKysJeworKwkweGM4 LDB4ZTMsMHg1NywweGE1LDB4N2IsMHg3NCwweDg2LDB4NmUKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPQorKwl7CisrCTB4NmUsMHhkYiwweDBkLDB4ZmUsMHg3ZCwweGFjLDB4 NzksMHhkMCwweGE1LDB4M2EsMHg0OCwweDg1LAorKwkweDgwLDB4ZTIsMHg3ZiwweDJhCisrCX07 CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0KKysJeworKwkweDMxLDB4Y2QsMHg1ZSwweDQzLDB4 ZGMsMHhmYiwweDdhLDB4NzksMHhjYSwweDg4LDB4ZGUsMHgxZiwKKysJMHhkNywweGJiLDB4NDIs MHgwOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweDdjLDB4MjMsMHg5 NSwweDM4LDB4MDAsMHg5NSwweGMxLDB4NzgsMHgxZiwweDhmLDB4ZDcsMHg2MywKKysJMHgyMyww eDg3LDB4MmEsMHhlZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4 YmIsMHgzNCwweGU3LDB4OTMsMHhhMywweDAyLDB4MmMsMHg0YSwweGQwLDB4ODksMHhkYSwweDdm LAorKwkweGVkLDB4ZjQsMHg0YywweGRlLDB4MTcsMHhlYywweGU1LDB4NmMKKysJfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJf YWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweDQ5LDB4YmMsMHgyZCwweDJjLDB4YjcsMHgz MiwweGNiLDB4MjAsMHhkZiwweGY1LDB4NzcsMHg1OCwKKysJMHhhMCwweDRiLDB4OTMsMHg2ZQor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJMHgzYywweGFhLDB4YjAsMHgy MSwweDQyLDB4YjAsMHhkZCwweDM0LDB4ZjAsMHgxNiwweDdmLDB4MGMsCisrCTB4MGYsMHhmZiww eDJlLDB4YWYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTFfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4OGUsMHhjYiww eGEzLDB4NjQsMHhiMiwweGI4LDB4MzMsMHg2YywweDY0LDB4M2IsMHg3OCwweDE2LAorKwkweDk5 LDB4MzUsMHhjOCwweDMwLDB4Y2IsMHgzZSwweGEwLDB4ZDgKKysJfTsKKysKKysKKysvKiBITUFD IFNIQS0xIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgzMiwweDlhLDB4MmEs MHg4NywweDdiLDB4ODksMHg3YywweGY2LDB4Y2IsMHg5NSwweGQ1LDB4NDAsCisrCTB4MTcsMHhm ZSwweDQ3LDB4NzAKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfbm9uY2VbXSA9CisrCXsKKysJMHgxNiwweGQ4LDB4ZTAsMHhj NywweDUyLDB4Y2YsMHg0YSwweDI1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0K KysJeworKwkweDM1LDB4MzUsMHhhOSwweGE1LDB4NDAsMHhiZSwweDliLDB4ZDEsMHg1NiwweGRk LDB4NDQsMHgwMCwKKysJMHg3MiwweGY3LDB4ZDMsMHg1ZQorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5w dXRbXSA9CisrCXsKKysJMHgxYiwweDJjLDB4ODQsMHgyZCwweDRhLDB4ODksMHg4ZiwweDY5LDB4 MTksMHhmMSwweGYzLDB4ZGIsCisrCTB4YmIsMHhlMywweGFhLDB4ZWEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfaW50X3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweGNmLDB4ZmEsMHg3ZCwweDcyLDB4MGYsMHhlNiwweGM3 LDB4OTYsMHhhMCwweDY5LDB4MzEsMHgxMSwKKysJMHg5YiwweDBiLDB4MWEsMHgyMCwweDFmLDB4 M2YsMHhhYSwweGQxCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDkw LDB4NzUsMHgxNSwweDA0LDB4OTUsMHhmMSwweGJhLDB4ODEsMHgwYywweDM3LDB4OTQsMHg2ZiwK KysJMHg4NiwweDUyLDB4NmQsMHg5YworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 CisrCXsKKysJMHg1YiwweDQwLDB4YmEsMHg1ZiwweDE3LDB4NzAsMHhmMCwweDRiLDB4ZGYsMHhj OSwweDk3LDB4OTIsCisrCTB4NzksMHhjNSwweDgyLDB4MjgKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlu cHV0MltdID0KKysJeworKwkweDk3LDB4YzgsMHg4MCwweDkwLDB4YjMsMHhhYSwweDZlLDB4NjAs MHhlYSwweDgzLDB4N2EsMHhlMywKKysJMHg4YSwweGNhLDB4YTQsMHg3ZgorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9yZXR1 cm5lZGJpdHNbXSA9CisrCXsKKysJMHg5MCwweGJkLDB4MDUsMHg1NiwweDZkLDB4YjUsMHgyMiww eGQ1LDB4YjksMHg1YSwweDI5LDB4MmQsCisrCTB4ZTksMHgwYiwweGUxLDB4YWMsMHhkZSwweDI3 LDB4MGIsMHhiMAorKwl9OworKworKworKy8qIEhNQUMgU0hBLTIyNCBQUiAgKi8KKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRy b3B5aW5wdXRbXSA9CisrCXsKKysJMHgxNywweDMyLDB4MmIsMHgyZSwweDZmLDB4MWIsMHg5Yyww eDZkLDB4MzEsMHhlMCwweDM0LDB4MDcsCisrCTB4Y2YsMHhlZCwweGY2LDB4YjYsMHg1YSwweDc2 LDB4NGMsMHhiYywweDYyLDB4ODUsMHgwMSwweDkwCisrCX07CisrCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfbm9uY2VbXSA9Cisr CXsKKysJMHgzOCwweGJmLDB4NWYsMHgyMCwweGIzLDB4NjgsMHgyZiwweDQzLDB4NjEsMHgwNSww eDhmLDB4MjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJ MHhjMCwweGM5LDB4NDUsMHhhYywweDhkLDB4MjcsMHg3NywweDA4LDB4MGIsMHgxNywweDZkLDB4 ZWQsCisrCTB4YzEsMHg3ZCwweGQ1LDB4MDcsMHg5ZCwweDZlLDB4ZjgsMHgyMywweDJhLDB4MjIs MHgxMywweGJkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4YTQs MHgzYywweGU3LDB4M2IsMHhlYSwweDE5LDB4NDUsMHgzMiwweGMyLDB4ODMsMHg2ZCwweDIxLAor KwkweDhhLDB4YzAsMHhlZSwweDY3LDB4NDUsMHhkZSwweDEzLDB4N2QsMHg5ZCwweDYxLDB4MDAs MHgzYgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByW10gPQorKwl7CisrCTB4MTUsMHgwNSww eDc0LDB4NGEsMHg3ZiwweDhkLDB4NWMsMHg2MCwweDE2LDB4ZTUsMHg3YiwweGFkLAorKwkweGY1 LDB4NDEsMHg4ZiwweDU1LDB4NjAsMHhjNCwweDA5LDB4ZWUsMHgxZSwweDExLDB4ODEsMHhhYgor Kwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg2ZiwweGY1LDB4OWEs MHhlMiwweDU0LDB4NTMsMHgzMCwweDNkLDB4NWEsMHgyNywweDI5LDB4MzgsCisrCTB4MjcsMHhm MiwweDBkLDB4MDUsMHhlOSwweDI2LDB4Y2IsMHgxNiwweGMzLDB4NTEsMHg1ZiwweDEzLAorKwkw eDQxLDB4ZmUsMHg5OSwweGYyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJ eworKwkweDczLDB4ODEsMHg4OCwweDg0LDB4OGYsMHhlZCwweDZmLDB4MTAsMHg5ZiwweDkzLDB4 YmYsMHgxNywKKysJMHgzNSwweDdjLDB4ZWYsMHhkNSwweDhkLDB4MjYsMHhhNiwweDdhLDB4ZTgs MHgwOSwweDM2LDB4NGYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9CisrCXsKKysJ MHhlNiwweGNmLDB4Y2YsMHg3ZSwweDEyLDB4ZTUsMHg0MywweGQyLDB4MzgsMHhkOCwweDI0LDB4 NmYsCisrCTB4NWEsMHgzNywweDY4LDB4YmYsMHg0ZiwweGEwLDB4ZmYsMHhkNSwweDYxLDB4OGEs MHg5MywweGUwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YWYsMHhm OSwweGQ4LDB4MTksMHg5MSwweDMwLDB4ODIsMHg2ZiwweGE5LDB4MWUsMHg5ZCwweGQ3LAorKwkw eGYzLDB4NTAsMHhlMCwweGM3LDB4ZDUsMHg2NCwweDk2LDB4N2QsMHg0YywweDRkLDB4NzgsMHgw MywKKysJMHg2ZCwweGQ4LDB4OWUsMHg3MgorKwl9OworKworKworKy8qIEhNQUMgU0hBLTIyNCBO byBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRbXSA9CisrCXsKKysJMHgxMSwweDgyLDB4ZmQsMHhkOSww eDQyLDB4ZjQsMHhmYSwweGM4LDB4ZjIsMHg0MSwweGU2LDB4NTQsCisrCTB4MDEsMHhhZSwweDIy LDB4NmUsMHhjNiwweGFmLDB4YWYsMHhkMCwweGE2LDB4YjIsMHhlMiwweDZkCisrCX07CisrCisr X19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRf bm9uY2VbXSA9CisrCXsKKysJMHhhOSwweDQ4LDB4ZDcsMHg5MiwweDM5LDB4N2UsMHgyYSwweGRj LDB4MzAsMHgxZiwweDBlLDB4MmIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 CisrCXsKKysJMHgxMSwweGQ1LDB4ZjQsMHhiZCwweDY3LDB4OGMsMHgzMSwweGNmLDB4YTMsMHgz ZiwweDFlLDB4NmIsCisrCTB4YTgsMHgwNywweDAyLDB4MGIsMHhjOCwweDJlLDB4NmMsMHg2NCww eDQxLDB4NWIsMHhjOCwweDM3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPQorKwl7Cisr CTB4NjgsMHgxOCwweGMyLDB4MDYsMHhlYiwweDNlLDB4MDQsMHg5NSwweDQ0LDB4NWUsMHhmYiww eGU2LAorKwkweDQxLDB4YzEsMHg1YywweGNjLDB4NDAsMHgyZiwweGI3LDB4ZDIsMHgwZiwweGYz LDB4NmIsMHhlNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg3Ziww eDQ1LDB4YzcsMHg1ZCwweDMyLDB4ZTYsMHgxNywweDYwLDB4YmEsMHhkYywweGI4LDB4NDIsCisr CTB4MWIsMHg5YywweGYxLDB4ZmEsMHgzYiwweDRkLDB4MjksMHg1NCwweGM2LDB4OTAsMHhmZiww eDVjLAorKwkweGNkLDB4ZDYsMHhhOSwweGNjCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0cmVzZWVk W10gPQorKwl7CisrCTB4YzQsMHg4ZSwweDM3LDB4OTUsMHg2OSwweDUzLDB4MjgsMHhkNywweDM3 LDB4YmIsMHg3MCwweDk1LAorKwkweDFjLDB4MDcsMHgxZCwweGQ5LDB4YjcsMHhlNiwweDFiLDB4 YmIsMHhmZSwweDQxLDB4ZWIsMHhjOQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtd ID0KKysJeworKwkweDUzLDB4MTcsMHhhMSwweDZhLDB4ZmEsMHg3NywweDQ3LDB4YjAsMHg5NSww eDU2LDB4OWEsMHgyMCwKKysJMHg1NywweGRlLDB4NWMsMHg4OSwweDlmLDB4N2YsMHhlMiwweGRl LDB4MTcsMHgzYSwweDUwLDB4MjMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7 CisrCTB4M2EsMHgzMiwweGY5LDB4ODUsMHgwYywweGMxLDB4ZWQsMHg3NiwweDJkLDB4ZGYsMHg0 MCwweGMzLAorKwkweDA2LDB4MjIsMHg2NiwweGQ0LDB4OWEsMHg5YSwweGZmLDB4NWEsMHg3ZSww eDdhLDB4ZjMsMHg5NgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3JldHVybmVkYml0c1tdID0KKysJeworKwkweDQzLDB4 YjQsMHg1NywweDVjLDB4MzgsMHgyNSwweDlkLDB4YWUsMHhlYywweDk2LDB4ZDEsMHg4NSwKKysJ MHgzYSwweDg0LDB4OGQsMHhmZSwweDY4LDB4ZDUsMHgwZSwweDVjLDB4OGYsMHg2NSwweGE1LDB4 NGUsCisrCTB4NDUsMHg4NCwweGE4LDB4OTQKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0yNTYg UFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfcHJfZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NGQsMHhiMCwweDQzLDB4ZDgs MHgzNCwweDRiLDB4MTAsMHg3MCwweGIxLDB4OGIsMHhlZCwweGVhLAorKwkweDA3LDB4OTIsMHg5 ZiwweDZjLDB4NzksMHgzMSwweGFmLDB4ODEsMHgyOSwweGViLDB4NmUsMHhjYSwKKysJMHgzMiww eDQ4LDB4MjgsMHhlNywweDAyLDB4NWQsMHhhNiwweGE2CisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfbm9uY2VbXSA9 CisrCXsKKysJMHgzYSwweGFlLDB4MTUsMHhhOSwweDk5LDB4ZGMsMHhlNCwweDY3LDB4MzQsMHgz YiwweDcwLDB4MTUsCisrCTB4YWEsMHhkMywweDMwLDB4OWEKKysJfTsKKysKKytfX2ZpcHNfY29u c3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHgxMywweDFkLDB4MjQsMHgwNCwweGIwLDB4MTgs MHg4MSwweDE1LDB4MjEsMHg1MSwweDJhLDB4MjQsCisrCTB4NTIsMHg2MSwweGJlLDB4NjQsMHg4 MiwweDZiLDB4NTUsMHgyZiwweGUyLDB4ZjEsMHg0MCwweDdkLAorKwkweDcxLDB4ZDgsMHgwMSww eDg2LDB4MTUsMHhiNywweDhiLDB4YjUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9 CisrCXsKKysJMHg4ZiwweGE2LDB4NTQsMHg1ZiwweGIxLDB4ZDAsMHhkOCwweGMzLDB4ZTcsMHgw YywweDE1LDB4YTksCisrCTB4MjMsMHg2ZSwweGZlLDB4ZmIsMHg5MywweGY3LDB4M2EsMHhiZCww eDU5LDB4MDEsMHhmYSwweDE4LAorKwkweDhlLDB4ZTksMHgxYSwweGE5LDB4NzgsMHhmYywweDc5 LDB4MGIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweGNmLDB4MjQs MHhiOSwweGViLDB4YjMsMHhkNCwweGNkLDB4MTcsMHgzNywweDM4LDB4NzUsMHg3OSwKKysJMHgx NSwweGNiLDB4MmQsMHg3NSwweDUxLDB4ZjEsMHhjYywweGFhLDB4MzIsMHhhNCwweGE3LDB4MzYs CisrCTB4N2MsMHg1YywweGU0LDB4NDcsMHhmMSwweDNlLDB4MWQsMHhlNQorKwl9OworKworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3By X2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHg1MiwweDQyLDB4ZmEsMHhlYiwweDg1LDB4 ZTAsMHgzMCwweDIyLDB4NzksMHgwMCwweDE2LDB4YjIsCisrCTB4ODgsMHgyZiwweDE0LDB4NmEs MHhiNywweGZjLDB4YjcsMHg1MywweGRjLDB4NGEsMHgxMiwweGVmLAorKwkweDU0LDB4ZDYsMHgz MywweGU5LDB4MjAsMHhkNiwweGZkLDB4NTYKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPQorKwl7CisrCTB4ZjQsMHhmNiwweDQ5LDB4YTEsMHgyZCwweDY0LDB4MmIsMHgzMCwweDU4 LDB4ZjgsMHhiZCwweGI4LAorKwkweDc1LDB4ZWIsMHhiYiwweDVlLDB4MWMsMHg5YiwweDgxLDB4 NmEsMHhkYSwweDE0LDB4ODYsMHg2ZSwKKysJMHhkMCwweGRhLDB4MTgsMHhiNywweDg4LDB4ZmIs MHg1OSwweGYzCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHIyW10gPQorKwl7CisrCTB4MjEs MHhjZCwweDZlLDB4NDYsMHhhZCwweDk5LDB4MDcsMHgxNywweGI0LDB4M2QsMHg3NiwweDBhLAor KwkweGZmLDB4NWIsMHg1MiwweDUwLDB4NzgsMHhkZiwweDFmLDB4MjQsMHgwNiwweDBkLDB4M2Ys MHg3NCwKKysJMHhhOSwweGM5LDB4MzcsMHhjZiwweGQ4LDB4MjYsMHgyNSwweDkxCisrCX07Cisr CisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy NTZfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4YTcsMHhhZiwweDJmLDB4MjksMHhlMCww eDNhLDB4NzIsMHg5NSwweDk2LDB4MWMsMHhhOSwweGYwLAorKwkweDRhLDB4MTcsMHg0ZCwweDY2 LDB4MDYsMHgxMCwweGJmLDB4MzksMHg4OSwweDg4LDB4YjgsMHg5MSwKKysJMHgzNywweDE4LDB4 OTksMHhjZiwweDhjLDB4NTMsMHgzYiwweDdlCisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMjU2 IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dFtdID0KKysJeworKwkweDk2LDB4YjcsMHg1MywweDIy LDB4MWUsMHg1MiwweDJhLDB4OTYsMHhiMSwweDE1LDB4M2MsMHgzNSwKKysJMHg1YSwweDhiLDB4 ZDMsMHg0YSwweGE2LDB4NmMsMHg4MywweDBhLDB4N2QsMHhhMywweDIzLDB4M2QsCisrCTB4NDMs MHhhMSwweDA3LDB4MmMsMHgyZCwweGUzLDB4ODEsMHhjYworKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X25vbmNlW10gPQor Kwl7CisrCTB4ZjEsMHhhYywweDk3LDB4Y2IsMHg1ZSwweDA2LDB4NDgsMHhkMiwweDk0LDB4YmUs MHgxNSwweDJlLAorKwkweGM3LDB4ZmMsMHhjMiwweDAxCisrCX07CisrCisrX19maXBzX2NvbnN0 c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPQorKwl7CisrCTB4OTgsMHhjNSwweDFlLDB4MzUsMHg1ZSwweDg5LDB4MGQs MHhjZSwweDY0LDB4NmQsMHgxOCwweGE3LAorKwkweDVhLDB4YzYsMHhmMywweGU3LDB4ZDYsMHg5 ZSwweGMwLDB4ZWEsMHhiNywweDNhLDB4OGQsMHg2NSwKKysJMHhiOCwweGViLDB4MTAsMHhkNyww eDU3LDB4MTgsMHhhMCwweDMyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0W10gPQorKwl7Cisr CTB4MWIsMHgxMCwweGFmLDB4YWMsMHhkMCwweDY1LDB4OTUsMHhhZCwweDA0LDB4YWQsMHgwMyww eDFjLAorKwkweGUwLDB4NDAsMHhkNiwweDNlLDB4MWMsMHg0NiwweDUzLDB4MzksMHg3YywweGUy LDB4YmMsMHhkYSwKKysJMHg4YywweGEyLDB4MzMsMHhhNywweDlhLDB4MjYsMHhkMywweDI3Cisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfaW50X3JldHVybmVkYml0c1tdID0KKysJeworKwkweGJhLDB4NjEsMHgwZSwweDU1 LDB4ZmUsMHgxMSwweDhhLDB4OWUsMHgwZiwweDgwLDB4ZGYsMHgxZCwKKysJMHgwMywweDBhLDB4 ZmUsMHgxNSwweDk0LDB4MjgsMHg0YiwweGJhLDB4ZjQsMHg5ZiwweDUxLDB4MjUsCisrCTB4ODgs MHhlNSwweDRlLDB4ZmIsMHhhZiwweGNlLDB4NjksMHg5MAorKwl9OworKworK19fZmlwc19jb25z dHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1 dHJlc2VlZFtdID0KKysJeworKwkweDYyLDB4N2YsMHgxZSwweDZiLDB4ZTgsMHg4ZSwweGUxLDB4 MzUsMHg3ZCwweDliLDB4NGYsMHhjNywKKysJMHhlYywweGM4LDB4YWMsMHhlZiwweDZiLDB4MTMs MHg5ZSwweDA1LDB4NTYsMHhjMSwweDA4LDB4ZjksCisrCTB4MmYsMHgwZiwweDI3LDB4OWMsMHhk NCwweDE1LDB4ZWQsMHgyZAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJ eworKwkweGM3LDB4NzYsMHg2ZSwweGE5LDB4ZDIsMHhiMiwweDc2LDB4NDAsMHg4MiwweDI1LDB4 MmMsMHhiMywKKysJMHg2ZiwweGFjLDB4ZTksMHg3NCwweGVmLDB4OGYsMHgzYywweDhlLDB4Y2Qs MHhmMSwweGJmLDB4YjMsCisrCTB4NDksMHg3NywweDM0LDB4ODgsMHg1MiwweDM2LDB4ZTYsMHgy ZQorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg4ZCwweGI4LDB4MGMs MHhkMSwweGJmLDB4NzAsMHhmNiwweDE5LDB4YzMsMHg0MSwweDgwLDB4OWYsCisrCTB4ZTEsMHhh NSwweGE0LDB4MWYsMHgyYywweDI2LDB4YjEsMHhlNSwweGQ4LDB4ZWIsMHhiZSwweGY4LAorKwkw eGRmLDB4ODgsMHg2YSwweDg5LDB4ZDYsMHgwNSwweGQ4LDB4OWQKKysJfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHg0MywweDEyLDB4MmEsMHgyYywweDQwLDB4NTMsMHgyZSwweDdj LDB4NjYsMHgzNCwweGFjLDB4YzMsCisrCTB4NDMsMHhlMywweGUwLDB4NmEsMHhmYywweGZhLDB4 ZWEsMHg4NywweDIxLDB4MWYsMHhlMiwweDI2LAorKwkweGM0LDB4ZjksMHgwOSwweDlhLDB4MGQs MHg2ZSwweDdmLDB4ZTAKKysJfTsKKysKKysKKysvKiBITUFDIFNIQS0zODQgUFIgICovCisrX19m aXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJf ZW50cm9weWlucHV0W10gPQorKwl7CisrCTB4NjksMHg4MSwweDk4LDB4ODgsMHg0NCwweGY1LDB4 ZDYsMHgyZSwweDAwLDB4MDgsMHgzYiwweGM1LAorKwkweGZiLDB4ZDcsMHg4ZSwweDZmLDB4MjMs MHhmOCwweDZkLDB4MDksMHhkNiwweDg1LDB4NDksMHhkMSwKKysJMHhmOCwweDZkLDB4YTQsMHg1 OCwweDU0LDB4ZmQsMHg4OCwweGE5CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg2 ZSwweDM4LDB4ODEsMHhjYSwweGI3LDB4ZTgsMHg2ZSwweDY2LDB4NDksMHg4YSwweGIyLDB4NTks CisrCTB4ZWUsMHgxNiwweGM5LDB4ZGUKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9CisrCXsKKysJMHhmZSwweDRjLDB4ZDksMHhmNCwweDc4LDB4M2IsMHgwOCwweDQxLDB4 OGQsMHg4ZiwweDU1LDB4YzQsCisrCTB4NDMsMHg1NiwweGI2LDB4MTIsMHgzNiwweDZiLDB4MzAs MHhiNywweDVlLDB4ZTEsMHhiOSwweDQ3LAorKwkweDA0LDB4YjEsMHg0ZSwweGE5LDB4MDAsMHhh MSwweDUyLDB4YTEKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg4 OSwweGU5LDB4Y2MsMHg4ZiwweDI3LDB4M2MsMHgyNiwweGQxLDB4OTUsMHhjOCwweDdkLDB4MGYs CisrCTB4NWIsMHgxYSwweGYwLDB4NzgsMHgzOSwweDU2LDB4NmYsMHhhNCwweDIzLDB4ZTcsMHhk MSwweGRhLAorKwkweDdjLDB4NjYsMHgzMywweGEwLDB4OTAsMHhjOSwweDkyLDB4ODgKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0KKysJeworKwkweGJlLDB4M2QsMHg3YywweDBkLDB4 Y2EsMHhkYSwweDdjLDB4NDksMHhiOCwweDEyLDB4MzYsMHhjMCwKKysJMHhkYiwweGFkLDB4MzUs MHhhOCwweGM3LDB4MGIsMHgyYSwweDJjLDB4NjksMHg2ZCwweDI1LDB4NTYsCisrCTB4NjMsMHg4 MiwweDExLDB4M2UsMHhhNywweDMzLDB4NzAsMHg3MgorKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2ludF9yZXR1cm5l ZGJpdHNbXSA9CisrCXsKKysJMHg4MiwweDNkLDB4ZTYsMHg1NCwweDgwLDB4NDIsMHhmOCwweGJh LDB4OTAsMHg0ZiwweDA2LDB4YTYsCisrCTB4ZDIsMHg3ZiwweGJmLDB4NzksMHg3YywweDEyLDB4 N2QsMHhhNiwweGEyLDB4NjYsMHhlOCwweGE2LAorKwkweGMwLDB4ZDYsMHg0YSwweDU1LDB4YmYs MHhkOCwweDBhLDB4YzUsMHhmOCwweDAzLDB4ODgsMHhkZCwKKysJMHg4ZSwweDg3LDB4ZDEsMHg1 YSwweDQ4LDB4MjYsMHg3MiwweDJhLDB4OGUsMHhjZiwweGVlLDB4YmEKKysJfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9h ZGRpdGlvbmFsaW5wdXQyW10gPQorKwl7CisrCTB4OGYsMHhmZiwweGQ5LDB4ODQsMHhiYiwweDg1 LDB4M2EsMHg2NiwweGExLDB4MjEsMHhjZSwweGIyLAorKwkweDNhLDB4M2EsMHgxNywweDIyLDB4 MTksMHhhZSwweGM3LDB4YjYsMHg2MywweDgxLDB4ZDUsMHhmZiwKKysJMHgwZCwweGM4LDB4ZTEs MHhhZiwweDU3LDB4ZDIsMHhjYiwweDYwCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0cHIyW10g PQorKwl7CisrCTB4ZDcsMHhmYiwweGM5LDB4ZTgsMHhlMiwweGYyLDB4YWEsMHg0YywweGI4LDB4 NTEsMHgyZiwweGUxLAorKwkweDIyLDB4YmEsMHhmMywweGRhLDB4MGEsMHgxOSwweDc2LDB4NzEs MHg1NywweGIyLDB4MWQsMHg5NCwKKysJMHgwOSwweDY5LDB4NmMsMHhkMywweDk3LDB4NTEsMHg4 MSwweDg3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPQorKwl7CisrCTB4ZTYsMHgxOSww eDI4LDB4YTgsMHgyMSwweGNlLDB4NWUsMHhkYiwweDI0LDB4NzksMHg4YywweDc2LAorKwkweDVk LDB4NzMsMHhiMiwweGRmLDB4YWMsMHhlZiwweDg1LDB4YTcsMHgzYiwweDE5LDB4MDksMHg4YiwK KysJMHg3ZiwweDk4LDB4MjgsMHhhOSwweDkzLDB4ZDgsMHg3YSwweGFkLDB4NTUsMHg4YiwweDI0 LDB4OWQsCisrCTB4ZTYsMHg5OCwweGZlLDB4NDcsMHhkNSwweDQ4LDB4YzEsMHgyMywweGQ4LDB4 MWQsMHg2MiwweDc1CisrCX07CisrCisrCisrLyogSE1BQyBTSEEtMzg0IE5vIFBSICAqLworK19f Zmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2Vu dHJvcHlpbnB1dFtdID0KKysJeworKwkweGMzLDB4NTYsMHgyYiwweDFkLDB4YzIsMHhiYiwweGE4 LDB4ZjAsMHhhZSwweDFiLDB4MGQsMHhkMywKKysJMHg1YSwweDZjLDB4ZGEsMHg1NywweDhlLDB4 YTUsMHg4YSwweDBkLDB4NmMsMHg0YiwweDE4LDB4YjEsCisrCTB4MDQsMHgzZSwweGI0LDB4OTks MHgzNSwweGM0LDB4YzAsMHg1ZgorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X25vbmNlW10gPQorKwl7CisrCTB4YzUsMHg0 OSwweDFlLDB4NjYsMHgyNywweDkyLDB4YmUsMHhlYywweGI1LDB4MWUsMHg0YiwweGIxLAorKwkw eDM4LDB4ZTMsMHhlYiwweDYyCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPQor Kwl7CisrCTB4YmUsMHhlNywweDZiLDB4NTcsMHhkZSwweDg4LDB4MTEsMHg5NiwweDliLDB4NmUs MHhlYSwweGU1LAorKwkweDYzLDB4ODMsMHg0YywweGI2LDB4OGQsMHg2NiwweGFhLDB4MWYsMHg4 YiwweDU0LDB4ZTcsMHg2MiwKKysJMHg2ZCwweDVhLDB4ZmMsMHhiZiwweDk3LDB4YmEsMHhjZCww eDc3CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0W10gPQorKwl7CisrCTB4ZTUsMHgyOCwweDVm LDB4NDMsMHhmNSwweDgzLDB4NmUsMHgwYSwweDgzLDB4NWMsMHhlMywweDgxLAorKwkweDAzLDB4 ZjIsMHhmOCwweDc4LDB4MDAsMHg3YywweDk1LDB4ODcsMHgxNiwweGQ2LDB4NmMsMHg1OCwKKysJ MHgzMywweDZjLDB4NTMsMHgzNSwweDBkLDB4NjYsMHhlMywweGNlCisrCX07CisrCisrX19maXBz X2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfaW50X3Jl dHVybmVkYml0c1tdID0KKysJeworKwkweGUyLDB4MWYsMHhmMywweGRhLDB4MGQsMHgxOSwweDk5 LDB4ODcsMHhjNCwweDkwLDB4YTIsMHgzMSwKKysJMHhjYSwweDJhLDB4ODksMHg1OCwweDQzLDB4 NDQsMHhiOCwweGRlLDB4Y2YsMHhhNCwweGJlLDB4M2IsCisrCTB4NTMsMHgyNiwweDIyLDB4MzEs MHg3NiwweDQxLDB4MjIsMHhiNSwweGE4LDB4NzAsMHgyZiwweDRiLAorKwkweDY0LDB4OTUsMHg0 ZCwweDQ4LDB4OTYsMHgzNSwweGU2LDB4YmQsMHgzYywweDM0LDB4ZGIsMHgxYgorKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0 X2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDc3LDB4NjEsMHhiYSwweGJjLDB4ZjIs MHhjMSwweGYzLDB4NGIsMHg4NiwweDY1LDB4ZmQsMHg0OCwKKysJMHgwZSwweDNjLDB4MDIsMHg1 ZSwweGEyLDB4N2EsMHg2YiwweDdjLDB4ZWQsMHgyMSwweDVlLDB4ZjksCisrCTB4Y2QsMHhjZCww eDc3LDB4MDcsMHgyYiwweGJlLDB4YzUsMHg1YworKwl9OworKworK19fZmlwc19jb25zdHNlZwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dHJl c2VlZFtdID0KKysJeworKwkweDE4LDB4MjQsMHg1ZiwweGM2LDB4ODQsMHhkMSwweDY3LDB4YzMs MHg5YSwweDExLDB4YTUsMHg4YywKKysJMHgwNywweDM5LDB4MjEsMHg4MywweDRkLDB4MDQsMHhj NCwweDZhLDB4MjgsMHgxOSwweGNmLDB4OTIsCisrCTB4MjEsMHhkOSwweDllLDB4NDEsMHg3Miww eDZjLDB4OWUsMHg2MworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9CisrCXsKKysJMHg5 NiwweDY3LDB4NDEsMHgyOCwweDliLDB4YjcsMHg5MiwweDhkLDB4NjQsMHgzYiwweGU0LDB4Y2Ys CisrCTB4N2UsMHhhYSwweDFlLDB4YjEsMHg0YiwweDFkLDB4MDksMHg1NiwweDY3LDB4OWMsMHhj NiwweDZkLAorKwkweDNiLDB4ZTgsMHg5MSwweDlkLDB4ZTEsMHg4YSwweGI3LDB4MzIKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhlMywweDU5LDB4NjEsMHgzOCwweDkyLDB4 ZWMsMHhlMiwweDNjLDB4ZmYsMHhiNywweGRiLDB4MTksCisrCTB4MGYsMHg1YiwweDkzLDB4Njgs MHgwZCwweGE0LDB4OTQsMHg0MCwweDcyLDB4MGIsMHhlMCwweGVkLAorKwkweDRkLDB4Y2QsMHg2 OCwweGEwLDB4MWUsMHhmZSwweDY3LDB4YjIsMHhmYSwweDIxLDB4NTYsMHg3NCwKKysJMHhhNCww eGFkLDB4Y2YsMHhiNywweDYwLDB4NjYsMHgyZSwweDQwLDB4ZGUsMHg4MiwweGNhLDB4ZmIKKysJ fTsKKysKKysKKysvKiBITUFDIFNIQS01MTIgUFIgICovCisrX19maXBzX2NvbnN0c2VnCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0W10gPQor Kwl7CisrCTB4YWEsMHg5ZSwweDQ1LDB4NjcsMHgwZSwweDAwLDB4MmEsMHg2NywweDk4LDB4ZDYs MHhkYSwweDBiLAorKwkweDBmLDB4MTcsMHg3ZSwweGFjLDB4ZmQsMHgyNywweGM0LDB4Y2EsMHg4 NCwweGRmLDB4ZGUsMHhiYSwKKysJMHg4NSwweGQ5LDB4YmUsMHg4ZiwweGYzLDB4ZmYsMHg5MSww eDRkCisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGE1MTJfcHJfbm9uY2VbXSA9CisrCXsKKysJMHg4YywweDQ5LDB4MmYsMHg1OCww eDFlLDB4N2EsMHhkYSwweDRiLDB4N2UsMHg4YSwweDMwLDB4N2IsCisrCTB4ODYsMHhlYSwweGFm LDB4YTIKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg3 MSwweGUxLDB4YmIsMHhhZCwweGE3LDB4NGIsMHgyZSwweDMxLDB4M2IsMHgwYiwweGVjLDB4MjQs CisrCTB4OTksMHgzOCwweGJjLDB4YWEsMHgwNSwweDRjLDB4NDYsMHg0NCwweGZhLDB4YWQsMHg4 ZSwweDAyLAorKwkweGMxLDB4N2UsMHhhZCwweGVjLDB4NTQsMHhhNiwweGQwLDB4YWQKKysJfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHgzZCwweDZlLDB4YTYsMHhhOCww eDI5LDB4MmEsMHhiMiwweGY1LDB4OTgsMHg0MiwweGU0LDB4OTIsCisrCTB4NzgsMHgyMiwweDY3 LDB4ZmQsMHgxYiwweDE1LDB4MWUsMHgyOSwweGFhLDB4NzEsMHgzYywweDNjLAorKwkweGU3LDB4 MDUsMHgyMCwweGE5LDB4MjksMHhjNiwweDc1LDB4NzEKKysJfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5w dXRwcltdID0KKysJeworKwkweGFiLDB4YjksMHgxNiwweGQ4LDB4NTUsMHgzNSwweDU0LDB4Yjcs MHg5NywweDNmLDB4OTQsMHhiYywKKysJMHgyZiwweDdjLDB4NzAsMHhjNywweGQwLDB4ZWQsMHhi NywweDRiLDB4ZjcsMHhmNiwweDZjLDB4MDMsCisrCTB4MGMsMHhiMCwweDAzLDB4ZDgsMHhiYiww eDcxLDB4ZDksMHgxMAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJ MHg4ZSwweGQzLDB4ZmQsMHg1MiwweDllLDB4ODMsMHgwOCwweDQ5LDB4MTgsMHg2ZSwweDIzLDB4 NTYsCisrCTB4NWMsMHg0NSwweDkzLDB4MzQsMHgwNSwweGUyLDB4OTgsMHg4ZiwweDBjLDB4ZDQs MHgzMiwweDBjLAorKwkweGZkLDB4ZGEsMHg1ZiwweDkyLDB4M2EsMHg4YywweDgxLDB4YmQsMHhm NiwweDZjLDB4NTUsMHhmZCwKKysJMHhiOCwweDIwLDB4Y2UsMHg4ZCwweDk3LDB4MjcsMHhlOCww eGU4LDB4ZTAsMHhiMywweDg1LDB4NTAsCisrCTB4YTIsMHhjMiwweGIyLDB4OTUsMHgxZCwweDQ4 LDB4ZDMsMHg3YiwweDRiLDB4NzgsMHgxMywweDM1LAorKwkweDA1LDB4MTcsMHhiZSwweDBkCisr CX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0KKysJeworKwkweGMzLDB4ZmMsMHg5NSww eGFhLDB4NjksMHgwNiwweGFlLDB4NTksMHg0MSwweGNlLDB4MjYsMHgwOCwKKysJMHgyOSwweDZk LDB4NDUsMHhkYSwweGU4LDB4YjMsMHg2YywweDk1LDB4NjAsMHgwZiwweDcwLDB4MmMsCisrCTB4 MTAsMHhiYSwweDM4LDB4OGMsMHhjZiwweDI5LDB4OTksMHhhYQorKwl9OworKworK19fZmlwc19j b25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJv cHlpbnB1dHByMltdID0KKysJeworKwkweDNiLDB4OWEsMHgyNSwweGNlLDB4ZDcsMHhmOSwweDVj LDB4ZDEsMHgzYSwweDNlLDB4YWEsMHg3MSwKKysJMHgxNCwweDNlLDB4MTksMHhlOCwweGNlLDB4 ZTYsMHhmZSwweDUxLDB4ODQsMHhlOSwweDFiLDB4ZmUsCisrCTB4M2YsMHhhNywweGYyLDB4ZmQs MHg3NiwweDVmLDB4NmEsMHhlNworKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3JldHVybmVkYml0c1tdID0KKysJewor KwkweGI3LDB4ODIsMHhhOSwweDU3LDB4ODEsMHg2NywweDUzLDB4YjUsMHhhMSwweGU5LDB4M2Qs MHgzNSwKKysJMHhmOSwweGU0LDB4OTcsMHhiZSwweGE2LDB4Y2EsMHhmMSwweDAxLDB4MTMsMHgw OSwweGU3LDB4MjEsCisrCTB4YzAsMHhlZCwweDkzLDB4NWQsMHg0YiwweGY0LDB4ZWIsMHg4ZCww eDUzLDB4MjUsMHg4YSwweGM0LAorKwkweGIxLDB4NmYsMHg2ZSwweDM3LDB4Y2QsMHgyZSwweGFj LDB4MzksMHhiMiwweGI2LDB4OTksMHhhMywKKysJMHg4MiwweDAwLDB4YjAsMHgyMSwweGYwLDB4 YzcsMHgyZiwweDRjLDB4NzMsMHg5MiwweGZkLDB4MDAsCisrCTB4YjYsMHhhZiwweGJjLDB4ZDMK KysJfTsKKysKKysKKysvKiBITUFDIFNIQS01MTIgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2Vn Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0W10g PQorKwl7CisrCTB4NmUsMHg4NSwweGU2LDB4MjUsMHg5NiwweDI5LDB4YTcsMHg1MiwweDViLDB4 NjAsMHhiYSwweGFhLAorKwkweGRlLDB4ZGIsMHgzNiwweDBhLDB4NTEsMHg5YSwweDE1LDB4YWUs MHg2ZSwweDE4LDB4ZDMsMHhmZSwKKysJMHgzOSwweGI5LDB4NGEsMHg5NiwweGY4LDB4NzcsMHhj YiwweDk1CisrCX07CisrCisrX19maXBzX2NvbnN0c2VnCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGE1MTJfbm9uY2VbXSA9CisrCXsKKysJMHhlMCwweGE2LDB4NWQsMHgwOCww eGMzLDB4N2MsMHhhZSwweDI1LDB4MmUsMHg4MCwweGQxLDB4M2UsCisrCTB4ZDksMHhhZiwweDQz LDB4M2MKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9CisrCXsKKysJMHg1Myww eDk5LDB4NTIsMHg1ZiwweDExLDB4YTksMHg2NCwweDY2LDB4MjAsMHg1ZSwweDFiLDB4NWYsCisr CTB4NDIsMHhiMywweGY0LDB4ZGEsMHhlZCwweGJiLDB4NjMsMHhjMSwweDIzLDB4YWYsMHhkMCww eDAxLAorKwkweDkwLDB4M2IsMHhkMCwweDc4LDB4ZTQsMHgwYiwweGE3LDB4MjAKKysJfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUx Ml9hZGRpdGlvbmFsaW5wdXRbXSA9CisrCXsKKysJMHg4NSwweDkwLDB4ODAsMHhkMywweDk4LDB4 ZjEsMHg1MywweDZkLDB4NjgsMHgxNSwweDhmLDB4ZTUsCisrCTB4NjAsMHgzZiwweDE3LDB4Mjks MHg1NSwweDhkLDB4MzMsMHhiMSwweDQ1LDB4NjQsMHg2NCwweDhkLAorKwkweDUwLDB4MjEsMHg4 OSwweGFlLDB4ZjYsMHhmZCwweDMyLDB4NzMKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10g PQorKwl7CisrCTB4MjgsMHg1NiwweDMwLDB4NmYsMHhmNCwweGExLDB4NDgsMHhlMCwweGM5LDB4 ZjUsMHg3NSwweDkwLAorKwkweGNjLDB4ZmIsMHhkZiwweGRmLDB4NzEsMHgzZCwweDBhLDB4OWEs MHgwMywweDY1LDB4M2IsMHgxOCwKKysJMHg2MSwweGUzLDB4ZDEsMHhkYSwweGNjLDB4NGEsMHhm ZSwweDU1LDB4MzgsMHhmOCwweDIxLDB4NmIsCisrCTB4ZmEsMHgxOCwweDAxLDB4NDIsMHgzOSww eDJmLDB4OTksMHg1MywweDM4LDB4MTUsMHg4MiwweDM0LAorKwkweGM1LDB4OTMsMHg5MiwweGJj LDB4NGQsMHg3NSwweDFhLDB4NWYsMHgyMSwweDI3LDB4Y2MsMHhhMSwKKysJMHhiMSwweDU3LDB4 NjksMHhlOAorKwl9OworKworK19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDhjLDB4 NTIsMHg3ZSwweDc3LDB4NzIsMHgzZiwweGEzLDB4MDQsMHg5NywweDEwLDB4OWIsMHg0MSwKKysJ MHhiZCwweGU4LDB4ZmYsMHg4OSwweGVkLDB4ODAsMHhlMywweGJkLDB4YWEsMHgxMiwweDJkLDB4 Y2EsCisrCTB4NzUsMHg4MiwweDM2LDB4NzcsMHg4OCwweGNkLDB4YTYsMHg3MworKwl9OworKwor K19fZmlwc19jb25zdHNlZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEy X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0KKysJeworKwkweDdlLDB4MzIsMHhlMywweDY5LDB4 NjksMHgwNywweDM0LDB4YTIsMHgxNiwweGEyLDB4NWQsMHgxYSwKKysJMHgxMCwweDkxLDB4ZDMs MHhlMiwweDIxLDB4YTIsMHhhMywweGRkLDB4Y2QsMHgwYywweDA5LDB4ODYsCisrCTB4MTEsMHhl MSwweDUwLDB4ZmYsMHg1YywweGI3LDB4ZWIsMHg1YworKwl9OworKworK19fZmlwc19jb25zdHNl ZworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1 dDJbXSA9CisrCXsKKysJMHg3ZiwweDc4LDB4NjYsMHhkOCwweGZiLDB4NjcsMHhjZiwweDhkLDB4 OGMsMHgwOCwweDMwLDB4YTUsCisrCTB4ZjgsMHg3ZCwweGNmLDB4NDQsMHg1OSwweGNlLDB4Zjgs MHhkZiwweDU4LDB4ZDMsMHg2MCwweGNiLAorKwkweGE4LDB4NjAsMHhiOSwweDA3LDB4YzQsMHhi MSwweDk1LDB4NDgKKysJfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9yZXR1cm5lZGJpdHNbXSA9CisrCXsKKysJMHhkZiwweGE3 LDB4MzYsMHhkNCwweGRjLDB4NWQsMHg0ZCwweDMxLDB4YWQsMHg2OSwweDQ2LDB4OWYsCisrCTB4 ZjEsMHg3YywweGQ3LDB4M2IsMHg0ZiwweDU1LDB4ZjIsMHhkNywweGI5LDB4OWQsMHhhZCwweDdh LAorKwkweDc5LDB4MDgsMHg1OSwweGE1LDB4ZGMsMHg3NCwweGY1LDB4OWIsMHg3MywweGQyLDB4 MTMsMHgyNSwKKysJMHgwYiwweDgxLDB4MDgsMHgwOCwweDI1LDB4ZmIsMHgzOSwweGYyLDB4ZjAs MHhhMywweGE0LDB4OGQsCisrCTB4ZWYsMHgwNSwweDllLDB4YjgsMHhjNywweDUyLDB4ZTQsMHgw ZSwweDQyLDB4YWEsMHg3YywweDc5LAorKwkweGMyLDB4ZDYsMHhmZCwweGE1CisrCX07CisrCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYworLS0tIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA0 LTIwIDA5OjA3OjA2LjI2Nzc4NTc2MiArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9m aXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjc3ODU3NjIgKzAy MDAKK0BAIC0wLDAgKzEsMTkzIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7 CisrCTB4YTgsMHg1MywweDc4LDB4ZDgsMHhmZCwweDNmLDB4OGQsMHg3MiwweGVjLDB4NzQsMHgx OCwweDA4LAorKwkweDBkLDB4YTIsMHgxMywweDE3LDB4ZTQsMHgzZSwweGM0LDB4YjYsMHgyYiww eGE4LDB4YzgsMHg2MiwKKysJMHgzYiwweDdlLDB4NGQsMHgwNCwweDQ0LDB4MWQsMHhkMSwweGEw LDB4NjUsMHg4NiwweDYyLDB4NTksCisrCTB4NjQsMHg5MywweGNhLDB4OGUsMHg5ZSwweDhmLDB4 YmIsMHg3ZSwweDM0LDB4YWEsMHhkZCwweGI2LAorKwkweDJlLDB4NWQsMHg2NywweGI2LDB4ZDAs MHg5YSwweDZlLDB4NjEsMHhiNywweDY5LDB4ZTcsMHhjMywKKysJMHg1MiwweGFhLDB4MmIsMHgx MCwweGUyLDB4MGMsMHhhMCwweDYzLDB4NjksMHg2MywweGI1LDB4NTIsCisrCTB4M2UsMHg4Niww eDQ3LDB4MGQsMHhlYywweGJiLDB4ZWQsMHhhMCwweDI3LDB4ZTcsMHg5NywweGU3LAorKwkweGI2 LDB4NzYsMHgzNSwweGQ0LDB4ZDQsMHg5YywweDMwLDB4NzAsMHgwZSwweDc0LDB4YWYsMHg4YSwK KysJMHgwZiwweGYxLDB4NTYsMHhhOCwweDAxLDB4YWYsMHg1NywweGEyLDB4NmUsMHg3MCwweDc4 LDB4ZjEsCisrCTB4ZDgsMHgyZiwweDc0LDB4OTAsMHg4ZSwweGNiLDB4NmQsMHgwNywweGU3LDB4 MGIsMHgzNSwweDAzLAorKwkweGVlLDB4ZDksMHg0ZiwweGEzLDB4MmMsMHhmMSwweDdhLDB4N2Ys MHhjMywweGQ2LDB4Y2YsMHg0MCwKKysJMHhkYywweDdiLDB4MDAsMHg4MywweDBlLDB4NmEsMHgy NSwweDY2LDB4ZGMsMHgwNywweDNlLDB4MzQsCisrCTB4MzMsMHgxMiwweDUxLDB4N2MsMHg2YSww eGE1LDB4MTUsMHgyYiwweDRiLDB4ZmUsMHhjZCwweDJlLAorKwkweDU1LDB4MWYsMHhlZSwweDM0 LDB4NjMsMHgxOCwweGExLDB4NTMsMHg0MiwweDNjLDB4OTksMHg2YiwKKysJMHgwZCwweDVkLDB4 Y2IsMHg5MSwweDAyLDB4YWUsMHhkZCwweDM4LDB4NzksMHg4NiwweDE2LDB4ZjEsCisrCTB4ZjEs MHhlMCwweGQ2LDB4YzQsMHgwMywweDUyLDB4NWIsMHgxZiwweDliLDB4M2QsMHg0ZCwweGM3LAor KwkweDY2LDB4ZGUsMHgyZCwweGZjLDB4NGEsMHg1NiwweGQ3LDB4YjgsMHhiYSwweDU5LDB4NjMs MHhkNiwKKysJMHgwZiwweDNlLDB4MTYsMHgzMSwweDg4LDB4NzAsMHhhZCwweDQzLDB4NjksMHg1 MiwweGU1LDB4NTcsCisrCTB4NjUsMHgzNywweDRlLDB4YWIsMHg4NSwweGU4LDB4ZWMsMHgxNyww eGQ2LDB4YjksMHhhNCwweDU0LAorKwkweDdiLDB4OWIsMHg1ZiwweDI3LDB4NTIsMHhmMywweDEw LDB4NWIsMHhlOCwweDA5LDB4YjIsMHgzYSwKKysJMHgyYywweDhkLDB4NzQsMHg2OSwweGRiLDB4 MDIsMHhlMiwweDRkLDB4NTksMHgyMywweDk0LDB4YTcsCisrCTB4ZGIsMHhhMCwweDY5LDB4ZTkK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcVtdID0g eworKwkweGQyLDB4NzcsMHgwNCwweDRlLDB4NTAsMHhmNSwweGE0LDB4ZTMsMHhmNSwweDEwLDB4 YTUsMHgwYSwKKysJMHgwYiwweDg0LDB4ZmQsMHhmZiwweGJjLDB4YTAsMHg0NywweGVkLDB4Mjcs MHg2MCwweDIwLDB4NTYsCisrCTB4NzQsMHg0MSwweGEwLDB4YTUKKyt9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfZ1tdID0geworKwkweDEzLDB4ZDcsMHg1 NCwweGUyLDB4MWYsMHhkMiwweDQxLDB4NjUsMHg1ZCwweGE4LDB4OTEsMHhjNSwKKysJMHgyMiww eGE2LDB4NWEsMHg3MiwweGE4LDB4OWIsMHhkYywweDY0LDB4ZWMsMHg5YiwweDU0LDB4YTgsCisr CTB4MjEsMHhlZCwweDRhLDB4ODksMHg4YiwweDQ5LDB4MGUsMHgwYywweDRmLDB4Y2IsMHg3Miww eDE5LAorKwkweDJhLDB4NGEsMHgyMCwweGY1LDB4NDEsMHhmMywweGYyLDB4OTIsMHg1MywweDk5 LDB4ZjAsMHhiYSwKKysJMHhlYywweGY5LDB4MjksMHhhYSwweGZiLDB4ZjcsMHg5ZCwweGZlLDB4 NDMsMHgzMiwweDM5LDB4M2IsCisrCTB4MzIsMHhjZCwweDJlLDB4MmYsMHhjZiwweDI3LDB4MmYs MHgzMiwweGE2LDB4MjcsMHg0MywweDRhLAorKwkweDBkLDB4ZjIsMHg0MiwweGI3LDB4NWIsMHg0 MSwweDRkLDB4ZjMsMHg3MiwweDEyLDB4MWUsMHg1MywKKysJMHhhNSwweDUzLDB4ZjIsMHgyMiww eGY4LDB4MzYsMHhiMCwweDAwLDB4ZjAsMHgxNiwweDQ4LDB4NWIsCisrCTB4NmIsMHhkMCwweDg5 LDB4ODQsMHg1MSwweDgwLDB4MWQsMHhjZCwweDhkLDB4ZTYsMHg0YywweGQ1LAorKwkweDM2LDB4 NTYsMHg5NiwweGZmLDB4YzUsMHgzMiwweGQ1LDB4MjgsMHhjNSwweDA2LDB4NjIsMHgwYSwKKysJ MHg5NCwweDJhLDB4MDMsMHgwNSwweDA0LDB4NmQsMHg4ZiwweDE4LDB4NzYsMHgzNCwweDFmLDB4 MWUsCisrCTB4NTcsMHgwYiwweGMzLDB4OTcsMHg0YiwweGE2LDB4YjksMHhhNCwweDM4LDB4ZTks MHg3MCwweDIzLAorKwkweDAyLDB4YTIsMHhlNiwweGU2LDB4N2IsMHhmZCwweDA2LDB4ZDMsMHgy YiwweGM2LDB4NzksMHg5NiwKKysJMHgyMiwweDcxLDB4ZDcsMHhiNCwweDBjLDB4ZDcsMHgyZiww eDM4LDB4NmUsMHg2NCwweGUwLDB4ZDcsCisrCTB4ZWYsMHg4NiwweGNhLDB4OGMsMHhhNSwweGQx LDB4NDIsMHgyOCwweGRjLDB4MmEsMHg0ZiwweDE2LAorKwkweGUzLDB4MTgsMHg5OCwweDg2LDB4 YjUsMHg5OSwweDA2LDB4NzQsMHhmNCwweDIwLDB4MGYsMHgzYSwKKysJMHg0YywweGY2LDB4NWEs MHgzZiwweDBkLDB4ZGIsMHhhMSwweGZhLDB4NjcsMHgyZCwweGZmLDB4MmYsCisrCTB4NWUsMHgx NCwweDNkLDB4MTAsMHhlNCwweGU5LDB4N2EsMHhlOCwweDRmLDB4NmQsMHhhMCwweDk1LAorKwkw eDM1LDB4ZDUsMHhiOSwweGRmLDB4MjUsMHg5MSwweDgxLDB4YTcsMHg5YiwweDYzLDB4YjAsMHg2 OSwKKysJMHhlOSwweDQ5LDB4OTcsMHgyYiwweDAyLDB4YmEsMHgzNiwweGIzLDB4NTgsMHg2YSww eGFiLDB4N2UsCisrCTB4NDUsMHhmMywweDIyLDB4ZjgsMHgyZSwweDRlLDB4ODUsMHhjYSwweDNh LDB4YjgsMHg1NSwweDkxLAorKwkweGIzLDB4YzIsMHhhOSwweDY2CisrfTsKKysKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3B1Yl9rZXlbXSA9IHsKKysJMHgyNCww eDUyLDB4ZjMsMHhjYywweGJlLDB4OWUsMHhkNSwweGNhLDB4N2QsMHhjNywweDRjLDB4NjAsCisr CTB4MmIsMHg5OSwweDIyLDB4NmUsMHg4ZiwweDJmLDB4YWIsMHgzOCwweGU3LDB4ZDcsMHhkZCww eGZiLAorKwkweDc1LDB4NTMsMHg5YiwweDE3LDB4MTUsMHg1ZSwweDlmLDB4Y2YsMHhkMSwweGFi LDB4YTUsMHg2NCwKKysJMHhlYiwweDg1LDB4MzUsMHhkOCwweDEyLDB4YzksMHhjMiwweGRjLDB4 ZjksMHg3MiwweDg0LDB4NDQsCisrCTB4MWIsMHhjNCwweDgyLDB4MjQsMHgzNiwweDI0LDB4Yzcs MHhmNCwweDU3LDB4NTgsMHgwYywweDFjLAorKwkweDM4LDB4YTUsMHg3YywweDQ2LDB4YzQsMHg1 NywweDM5LDB4MjQsMHg3MCwweGVkLDB4YjUsMHgyYywKKysJMHhiNSwweGE2LDB4ZTAsMHgzZiww eGU2LDB4MjgsMHg3YiwweGI2LDB4ZjQsMHg5YSwweDQyLDB4YTIsCisrCTB4MDYsMHg1YSwweDA1 LDB4NGYsMHgwMywweDA4LDB4MzksMHhkZiwweDFmLDB4ZDMsMHgxNCwweDljLAorKwkweDRjLDB4 YTAsMHg1MywweDFkLDB4ZDgsMHhjYSwweDhhLDB4YWEsMHg5YywweGM3LDB4MzMsMHg3MSwKKysJ MHg5MywweDM4LDB4NzMsMHg0OCwweDMzLDB4NjEsMHgxOCwweDIyLDB4NDUsMHg0NSwweGU4LDB4 OGMsCisrCTB4ODAsMHhmZiwweGQ4LDB4NzYsMHg1ZCwweDc0LDB4MzYsMHgwMywweDMzLDB4Y2Ms MHhhYiwweDk5LAorKwkweDcyLDB4NzcsMHg5YiwweDY1LDB4MjUsMHhhNiwweDViLDB4ZGQsMHgw ZCwweDEwLDB4YzYsMHg3NSwKKysJMHhjMSwweDA5LDB4YmIsMHhkMywweGU1LDB4YmUsMHg0ZCww eDcyLDB4ZWYsMHg2ZSwweGJhLDB4NmUsCisrCTB4NDMsMHg4ZCwweDUyLDB4MjYsMHgyMywweDdk LDB4YjgsMHg4OCwweDM3LDB4OWMsMHg1ZiwweGNjLAorKwkweDQ3LDB4YTMsMHg4NCwweDdmLDB4 ZjYsMHgzNywweDExLDB4YmEsMHhlZCwweDZkLDB4MDMsMHhhZiwKKysJMHhlOCwweDFlLDB4Njks MHg0YSwweDQxLDB4M2IsMHg2OCwweDBiLDB4ZDMsMHg4YSwweGI0LDB4OTAsCisrCTB4M2YsMHg4 MywweDcwLDB4YTcsMHgwNywweGVmLDB4NTUsMHgxZCwweDQ5LDB4NDEsMHgwMiwweDZkLAorKwkw eDk1LDB4NzksMHhkNiwweDkxLDB4ZGUsMHg4ZSwweGRhLDB4YTEsMHg2MSwweDA1LDB4ZWIsMHg5 ZCwKKysJMHhiYSwweDNjLDB4MmYsMHg0YywweDFiLDB4ZWMsMHg1MCwweDgyLDB4NzUsMHhhYSww eDAyLDB4MDcsCisrCTB4ZTIsMHg1MSwweGI1LDB4ZWMsMHhjYiwweDI4LDB4NmEsMHg0YiwweDAx LDB4ZDQsMHg0OSwweGQzLAorKwkweDBhLDB4Y2IsMHg2NywweDM3LDB4MTcsMHhhMCwweGQyLDB4 ZmIsMHgzYiwweDUwLDB4YzgsMHg5MywKKysJMHhmNywweGRhLDB4YjEsMHg0ZgorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wcml2X2tleVtdID0gewor KwkweDBjLDB4NGIsMHgzMCwweDg5LDB4ZDEsMHhiOCwweDYyLDB4Y2IsMHgzYywweDQzLDB4NjQs MHg5MSwKKysJMHhmMCwweDkxLDB4NTQsMHg3MCwweGM1LDB4MjcsMHg5NiwweGUzLDB4YWMsMHhi ZSwweGU4LDB4MDAsCisrCTB4ZWMsMHg1NSwweGY2LDB4Y2MKKyt9OworKworK3N0YXRpYyBpbnQg Y29ycnVwdF9kc2E7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKCkKKysgICAgeworKyAgICBj b3JydXB0X2RzYSA9IDE7CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9kc2EoKQorKwl7 CisrCURTQSAqZHNhID0gTlVMTDsKKysJRVZQX1BLRVkgKnBrID0gTlVMTDsKKysJaW50IHJldCA9 IDA7CisrCisrCWRzYSA9IERTQV9uZXcoKTsKKysKKysJaWYoZHNhID09IE5VTEwpCisrCQlnb3Rv IGVycjsKKysKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwLCBkc2FfdGVzdF8yMDQ4 KTsKKysJZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBxLCBkc2FfdGVzdF8yMDQ4KTsKKysJ Zmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBnLCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19s b2FkX2tleV9jb21wb25lbnQoZHNhLCBwdWJfa2V5LCBkc2FfdGVzdF8yMDQ4KTsKKysJZmlwc19s b2FkX2tleV9jb21wb25lbnQoZHNhLCBwcml2X2tleSwgZHNhX3Rlc3RfMjA0OCk7CisrCisrCWlm IChjb3JydXB0X2RzYSkKKysJCUJOX3NldF9iaXQoZHNhLT5wdWJfa2V5LCAyMDQ3KTsKKysKKysJ aWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlFVlBf UEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywgTlVMTCwgMCwKKysJCQkJCU5VTEwsIDAsIEVWUF9zaGEyNTYoKSwgMCwKKysJCQkJ CSJEU0EgU0hBMjU2IikpCisrCQlnb3RvIGVycjsKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlp ZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysJZWxzZSBpZiAoZHNhKQorKwkJRFNBX2Zy ZWUoZHNhKTsKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9m aXBzL2ZpcHNfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2VuYy5j LmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjc3ODU3NjIgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY3Nzg1NzYy ICswMjAwCitAQCAtMCwwICsxLDE5MSBAQAorKy8qIGZpcGUvZXZwL2ZpcHNfZW5jLmMgKi8KKysv KiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkK KysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNT TCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25m b3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBm b3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwg YmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0 IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGgg dGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMK KysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBz dWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUg cmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMg WW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0 aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9y bSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1 bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4K KysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcg KGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2Fu IGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWlu ZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3Ug aW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVv ZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlv dSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNv bSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBg QVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAq IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBU aGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFp bGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBj aGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQg cHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRo ZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNp bmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrY29uc3QgRVZQ X0NJUEhFUiAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCkKKysJeworKwlzd2l0Y2ggKG5p ZCkKKysJCXsKKysJCWNhc2UgTklEX2Flc18xMjhfY2JjOgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4 X2NiYygpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9jY206CisrCQlyZXR1cm4gRVZQX2Flc18x MjhfY2NtKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2NmYjE6CisrCQlyZXR1cm4gRVZQX2Fl c18xMjhfY2ZiMSgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9jZmIxMjg6CisrCQlyZXR1cm4g RVZQX2Flc18xMjhfY2ZiMTI4KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2NmYjg6CisrCQly ZXR1cm4gRVZQX2Flc18xMjhfY2ZiOCgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9jdHI6Cisr CQlyZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTI4X2VjYjoK KysJCXJldHVybiBFVlBfYWVzXzEyOF9lY2IoKTsKKysKKysJCWNhc2UgTklEX2Flc18xMjhfZ2Nt OgorKwkJcmV0dXJuIEVWUF9hZXNfMTI4X2djbSgpOworKworKwkJY2FzZSBOSURfYWVzXzEyOF9v ZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xMjhfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9hZXNf MTI4X3h0czoKKysJCXJldHVybiBFVlBfYWVzXzEyOF94dHMoKTsKKysKKysJCWNhc2UgTklEX2Fl c18xOTJfY2JjOgorKwkJcmV0dXJuIEVWUF9hZXNfMTkyX2NiYygpOworKworKwkJY2FzZSBOSURf YWVzXzE5Ml9jY206CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2NtKCk7CisrCisrCQljYXNlIE5J RF9hZXNfMTkyX2NmYjE6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2ZiMSgpOworKworKwkJY2Fz ZSBOSURfYWVzXzE5Ml9jZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2ZiMTI4KCk7Cisr CisrCQljYXNlIE5JRF9hZXNfMTkyX2NmYjg6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY2ZiOCgp OworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9jdHI6CisrCQlyZXR1cm4gRVZQX2Flc18xOTJfY3Ry KCk7CisrCisrCQljYXNlIE5JRF9hZXNfMTkyX2VjYjoKKysJCXJldHVybiBFVlBfYWVzXzE5Ml9l Y2IoKTsKKysKKysJCWNhc2UgTklEX2Flc18xOTJfZ2NtOgorKwkJcmV0dXJuIEVWUF9hZXNfMTky X2djbSgpOworKworKwkJY2FzZSBOSURfYWVzXzE5Ml9vZmIxMjg6CisrCQlyZXR1cm4gRVZQX2Fl c18xOTJfb2ZiKCk7CisrCisrCQljYXNlIE5JRF9hZXNfMjU2X2NiYzoKKysJCXJldHVybiBFVlBf YWVzXzI1Nl9jYmMoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY2NtOgorKwkJcmV0dXJuIEVW UF9hZXNfMjU2X2NjbSgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jZmIxOgorKwkJcmV0dXJu IEVWUF9hZXNfMjU2X2NmYjEoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZfY2ZiMTI4OgorKwkJ cmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEyOCgpOworKworKwkJY2FzZSBOSURfYWVzXzI1Nl9jZmI4 OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjgoKTsKKysKKysJCWNhc2UgTklEX2Flc18yNTZf Y3RyOgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X2N0cigpOworKworKwkJY2FzZSBOSURfYWVzXzI1 Nl9lY2I6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfZWNiKCk7CisrCisrCQljYXNlIE5JRF9hZXNf MjU2X2djbToKKysJCXJldHVybiBFVlBfYWVzXzI1Nl9nY20oKTsKKysKKysJCWNhc2UgTklEX2Fl c18yNTZfb2ZiMTI4OgorKwkJcmV0dXJuIEVWUF9hZXNfMjU2X29mYigpOworKworKwkJY2FzZSBO SURfYWVzXzI1Nl94dHM6CisrCQlyZXR1cm4gRVZQX2Flc18yNTZfeHRzKCk7CisrCisrCQljYXNl IE5JRF9kZXNfZWRlX2VjYjoKKysJCXJldHVybiBFVlBfZGVzX2VkZSgpOworKworKwkJY2FzZSBO SURfZGVzX2VkZTNfZWNiOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlMygpOworKworKwkJY2FzZSBO SURfZGVzX2VkZTNfY2JjOgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jYmMoKTsKKysKKysJCWNh c2UgTklEX2Rlc19lZGUzX2NmYjE6CisrCQlyZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjEoKTsKKysK KysJCWNhc2UgTklEX2Rlc19lZGUzX2NmYjY0OgorKwkJcmV0dXJuIEVWUF9kZXNfZWRlM19jZmI2 NCgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfY2ZiODoKKysJCXJldHVybiBFVlBfZGVzX2Vk ZTNfY2ZiOCgpOworKworKwkJY2FzZSBOSURfZGVzX2VkZTNfb2ZiNjQ6CisrCQlyZXR1cm4gRVZQ X2Rlc19lZGUzX29mYigpOworKworKwkJY2FzZSBOSURfZGVzX2VkZV9jYmM6CisrCQlyZXR1cm4g RVZQX2Rlc19lZGVfY2JjKCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX2NmYjY0OgorKwkJcmV0 dXJuIEVWUF9kZXNfZWRlX2NmYjY0KCk7CisrCisrCQljYXNlIE5JRF9kZXNfZWRlX29mYjY0Ogor KwkJcmV0dXJuIEVWUF9kZXNfZWRlX29mYigpOworKworKwkJZGVmYXVsdDoKKysJCXJldHVybiBO VUxMOworKworKwkJfQorKwl9CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlw cy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzLmgKKy0tLSBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2 ODc4NTc4NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHMuaAkyMDEy LTA0LTIwIDA5OjA3OjA2LjI2ODc4NTc4NCArMDIwMAorQEAgLTAsMCArMSwyNzkgQEAKKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgor KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisr ICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs CisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNlcnJvciBGSVBTIGlzIGRpc2FibGVkLgorKyNlbmRp ZgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0 ZXJuICJDIiB7CisrI2VuZGlmCisrCisrc3RydWN0IGRzYV9zdDsKKytzdHJ1Y3QgcnNhX3N0Owor K3N0cnVjdCBldnBfcGtleV9zdDsKKytzdHJ1Y3QgZW52X21kX3N0OworK3N0cnVjdCBlbnZfbWRf Y3R4X3N0OworK3N0cnVjdCBldnBfY2lwaGVyX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX2N0eF9z dDsKKytzdHJ1Y3QgZGhfbWV0aG9kOworK3N0cnVjdCBDTUFDX0NUWF9zdDsKKytzdHJ1Y3QgaG1h Y19jdHhfc3Q7CisrCisraW50IEZJUFNfbW9kdWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3Qg Y2hhciAqYXV0aCk7CisraW50IEZJUFNfbW9kdWxlX21vZGUodm9pZCk7CisrY29uc3Qgdm9pZCAq RklQU19yYW5kX2NoZWNrKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpOworK2ludCBG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9zaGExKHZvaWQp OworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rfc2hh Mih2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9hZXModm9pZCk7CisraW50IEZJUFNfc2VsZnRl c3RfYWVzX2NjbSh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9hZXNfZ2NtKHZvaWQpOworK2lu dCBGSVBTX3NlbGZ0ZXN0X2Flc194dHModm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfYWVzKHZv aWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9k ZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKHZvaWQpOworK3ZvaWQgRklQU19jb3Jy dXB0X3JzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfcnNhKHZvaWQpOworK3Zv aWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2Vu KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVw dF9ybmcodm9pZCk7Cisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKTsKKyt2b2lkIEZJUFNfeDkz MV9zdGljayhpbnQgb25vZmYpOworK3ZvaWQgRklQU19kcmJnX3N0aWNrKGludCBvbm9mZik7Cisr aW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3g5MzEodm9p ZCk7CisraW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9k cmJnKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpOworK2ludCBGSVBT X3NlbGZ0ZXN0X2NtYWModm9pZCk7CisrCisrdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVk IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cik7CisrCisrI2RlZmluZSBGSVBTX0VSUk9S X0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorKwkJYWxnICIg cHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVycm9yIGlnbm9yZWQiKTsKKysKKytp bnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHN0cnVjdCBldnBfcGtleV9zdCAqcGtleSwKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCisrCQkJY29uc3QgdW5zaWdu ZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAorKwkJCWNvbnN0IHN0cnVjdCBlbnZf bWRfc3QgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIgKmZh aWxfc3RyKTsKKysKKytpbnQgZmlwc19jaXBoZXJfdGVzdChzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhf c3QgKmN0eCwKKysJCQljb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqY2lwaGVyLAorKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCisrCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqY2lwaGVydGV4dCwKKysJCQlpbnQgbGVuKTsKKysKKyt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0 X2ZhaWwodm9pZCk7CisrCisrY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqRklQU19nZXRfZGlnZXN0 YnluaWQoaW50IG5pZCk7CisrCisrY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKkZJUFNfZ2V0 X2NpcGhlcmJ5bmlkKGludCBuaWQpOworKworKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisr LyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBt a2Vyci5wbC4gQW55IGNoYW5nZXMKKysgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92 ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KKysgKi8KKyt2b2lkIEVSUl9s b2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKKysKKysvKiBFcnJvciBjb2RlcyBmb3IgdGhlIEZJUFMg ZnVuY3Rpb25zLiAqLworKworKy8qIEZ1bmN0aW9uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19G X0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwMAorKyNkZWZpbmUgRklQU19GX0RIX0lOSVQJCQkJ CSAxNDgKKysjZGVmaW5lIEZJUFNfRl9EUkJHX1JFU0VFRAkJCQkgMTYyCisrI2RlZmluZSBGSVBT X0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTAxCisrI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxU SU5fUEFSQU1HRU4yCQkJIDEwNworKyNkZWZpbmUgRklQU19GX0RTQV9ET19TSUdOCQkJCSAxMDIK KysjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMDMKKysjZGVmaW5lIEZJUFNfRl9F Q0RIX0NPTVBVVEVfS0VZCQkJCSAxNjMKKysjZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19TSUdOCQkJ CSAxNjQKKysjZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19WRVJJRlkJCQkJIDE2NQorKyNkZWZpbmUg RklQU19GX0VDX0tFWV9HRU5FUkFURV9LRVkJCQkgMTY2CisrI2RlZmluZSBGSVBTX0ZfRVZQX0NJ UEhFUklOSVRfRVgJCQkgMTI0CisrI2RlZmluZSBGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgJCQkg MTI1CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJCQkJIDEwNAorKyNkZWZpbmUgRklQ U19GX0ZJUFNfQ0hFQ0tfRFNBX1BSTkcJCQkgMTUxCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVD S19FQwkJCQkgMTQyCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19FQ19QUk5HCQkJIDE1Mgor KyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UCQkgMTA1CisrI2Rl ZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EJCQkJIDEwNgorKyNkZWZpbmUgRklQU19GX0ZJUFNf Q0hFQ0tfUlNBX1BSTkcJCQkgMTUwCisrI2RlZmluZSBGSVBTX0ZfRklQU19DSVBIRVIJCQkJIDE2 MAorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSSU5JVAkJCQkgMTQzCisrI2RlZmluZSBGSVBT X0ZfRklQU19DSVBIRVJfQ1RYX0NUUkwJCQkgMTYxCisrI2RlZmluZSBGSVBTX0ZfRklQU19ESUdF U1RGSU5BTAkJCQkgMTU4CisrI2RlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RJTklUCQkJCSAxMjgK KysjZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVFVQREFURQkJCSAxNTkKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX0RSQkdfQllURVMJCQkJIDEzMQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DSEVD SwkJCQkgMTQ2CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QJCQkgMTMyCisr I2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLCQkJIDEzNgorKyNkZWZpbmUgRklQ U19GX0ZJUFNfRFJCR19HRU5FUkFURQkJCSAxMzQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdf SU5JVAkJCQkgMTM1CisrI2RlZmluZSBGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFCQkJIDEz OAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19ORVcJCQkJIDEzOQorKyNkZWZpbmUgRklQU19G X0ZJUFNfRFJCR19SRVNFRUQJCQkJIDE0MAorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19TSU5H TEVfS0FUCQkJIDE0MQorKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX0NIRUNLCQkvKiB1bnVzZWQg Ki8JIDEwNworKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1NJR05fRElHRVNUCQkJIDE1NAorKyNk ZWZpbmUgRklQU19GX0ZJUFNfRFNBX1ZFUklGWV9ESUdFU1QJCQkgMTU1CisrI2RlZmluZSBGSVBT X0ZfRklQU19HRVRfRU5UUk9QWQkJCQkgMTQ3CisrI2RlZmluZSBGSVBTX0ZfRklQU19NT0RFX1NF VAkJLyogdW51c2VkICovCSAxMDgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NF VAkJCSAxMDgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QJCQkgMTA5 CisrI2RlZmluZSBGSVBTX0ZfRklQU19SQU5EX0FERAkJCQkgMTM3CisrI2RlZmluZSBGSVBTX0Zf RklQU19SQU5EX0JZVEVTCQkJCSAxMjIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfUFNFVURP X0JZVEVTCQkJIDE2NworKyNkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TRUVECQkJCSAxNjgKKysj ZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRAkJCSAxMjYKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1JBTkRfU1RBVFVTCQkJCSAxMjcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9TSUdO X0RJR0VTVAkJCSAxNTYKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9WRVJJRllfRElHRVNUCQkJ IDE1NworKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTCQkJIDExMAorKyNkZWZpbmUg RklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTQkJCSAxNDUKKysjZGVmaW5lIEZJUFNfRl9GSVBT X1NFTEZURVNUX0FFU19HQ00JCQkgMTI5CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9B RVNfWFRTCQkJIDE0NAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQwkJCSAxMzAK KysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJCSAxMTEKKysjZGVmaW5lIEZJUFNf Rl9GSVBTX1NFTEZURVNUX0RTQQkJCSAxMTIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNU X0VDRFNBCQkJIDEzMworKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQwkJCSAxMTMK KysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORwkvKiB1bnVzZWQgKi8JIDExNAorKyNk ZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMQkJCSAxMTUKKysjZGVmaW5lIEZJUFNfRl9G SVBTX1NFTEZURVNUX1g5MzEJCQkgMTE0CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRVRfUFJOR19L RVkJCQkgMTUzCisrI2RlZmluZSBGSVBTX0ZfSEFTSF9GSU5BTAkJCQkgMTIzCisrI2RlZmluZSBG SVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOCQkJIDExNgorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlf SU5JVAkJCQkgMTQ5CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQJCQkg MTE3CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQJCQkgMTE4CisrI2Rl ZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJCSAxMTkKKysjZGVmaW5lIEZJUFNf Rl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUCQkJIDEyMAorKyNkZWZpbmUgRklQU19GX1JTQV9YOTMx X0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKKysjZGVmaW5lIEZJUFNfRl9TU0xFQVlfUkFORF9CWVRF UwkvKiB1bnVzZWQgKi8JIDEyMgorKworKy8qIFJlYXNvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIEZJ UFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQJIDE1MAorKyNkZWZpbmUgRklQ U19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcJCSAxMjUKKysjZGVmaW5lIEZJUFNfUl9BTFJF QURZX0lOU1RBTlRJQVRFRAkJCSAxMzQKKysjZGVmaW5lIEZJUFNfUl9BVVRIRU5USUNBVElPTl9G QUlMVVJFCQkJIDE1MQorKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRQkJLyogdW51c2Vk ICovCSAxMDMKKysjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUCS8qIHVudXNl ZCAqLwkgMTA0CisrI2RlZmluZSBGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRQkJCSAxMTQK KysjZGVmaW5lIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRAkJCSAxNTIKKysjZGVmaW5lIEZJ UFNfUl9EUkJHX1NUVUNLCQkJCSAxMDMKKysjZGVmaW5lIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQJCQkgMTA0CisrI2RlZmluZSBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZP Ul9SRVNFRUQJCSAxMDUKKysjZGVmaW5lIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSwkJCSAx NDIKKysjZGVmaW5lIEZJUFNfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMTUKKysjZGVm aW5lIEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTI3CisrI2RlZmluZSBGSVBT X1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUCSAxMjQKKysjZGVmaW5lIEZJUFNf Ul9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkJCQkgMTIyCisrI2RlZmluZSBGSVBTX1JfRVJST1Jf UkVUUklFVklOR19OT05DRQkJCSAxNDAKKysjZGVmaW5lIEZJUFNfUl9FWEVfRElHRVNUX0RPRVNf Tk9UX01BVENIICAgLyogdW51c2VkICovCSAxMDUKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklO VF9ET0VTX05PVF9NQVRDSAkJIDExMAorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNf Tk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJ TlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAxMTIKKysjZGVmaW5lIEZJUFNfUl9G SVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCisrI2RlZmluZSBGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQJCQkgMTA2CisrI2RlZmluZSBGSVBTX1JfRlVOQ1RJT05fRVJST1IJCQkJIDExNgor KyNkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SCQkJCSAxMzcKKysjZGVmaW5lIEZJUFNfUl9H RU5FUkFURV9FUlJPUl9VTkRFVEVDVEVECQkgMTE4CisrI2RlZmluZSBGSVBTX1JfSU5TVEFOVElB VEVfRVJST1IJCQkgMTE5CisrI2RlZmluZSBGSVBTX1JfSU5TVUZGSUNJRU5UX1NFQ1VSSVRZX1NU UkVOR1RICQkgMTIwCisrI2RlZmluZSBGSVBTX1JfSU5URVJOQUxfRVJST1IJCQkJIDEyMQorKyNk ZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAxMDkKKysjZGVmaW5lIEZJUFNfUl9J TlZBTElEX1BBUkFNRVRFUlMJCQkgMTQ0CisrI2RlZmluZSBGSVBTX1JfSU5fRVJST1JfU1RBVEUJ CQkJIDEyMworKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJIDEwOAorKyNkZWZpbmUg RklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQJCQkgMTQ5CisrI2RlZmluZSBGSVBTX1JfTk9O X0ZJUFNfTUVUSE9ECQkJCSAxMDAKKysjZGVmaW5lIEZJUFNfUl9OT1BSX1RFU1QxX0ZBSUxVUkUJ CQkgMTQ1CisrI2RlZmluZSBGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJFCQkJIDE0NgorKyNkZWZp bmUgRklQU19SX05PVF9JTlNUQU5USUFURUQJCQkJIDEyNgorKyNkZWZpbmUgRklQU19SX1BBSVJX SVNFX1RFU1RfRkFJTEVECQkJIDEwNworKyNkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElPTl9F UlJPUl9VTkRFVEVDVEVECQkgMTI4CisrI2RlZmluZSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NU UklOR19UT09fTE9ORwkJIDEyOQorKyNkZWZpbmUgRklQU19SX1BSTkdfU1RSRU5HVEhfVE9PX0xP VwkJCSAxNDMKKysjZGVmaW5lIEZJUFNfUl9QUl9URVNUMV9GQUlMVVJFCQkJCSAxNDcKKysjZGVm aW5lIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFCQkJCSAxNDgKKysjZGVmaW5lIEZJUFNfUl9SRVFV RVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVECQkgMTMwCisrI2RlZmluZSBGSVBTX1JfUkVRVUVT VF9UT09fTEFSR0VfRk9SX0RSQkcJCSAxMzEKKysjZGVmaW5lIEZJUFNfUl9SRVNFRURfQ09VTlRF Ul9FUlJPUgkJCSAxMzIKKysjZGVmaW5lIEZJUFNfUl9SRVNFRURfRVJST1IJCQkJIDEzMworKyNk ZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCS8qIHVudXNlZCAqLwkgMTE1CisrI2RlZmlu ZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJLyogdW51c2VkICovCSAxMTYKKysjZGVmaW5lIEZJ UFNfUl9TRUxGVEVTVF9GQUlMRUQJCQkJIDEwMQorKyNkZWZpbmUgRklQU19SX1NFTEZURVNUX0ZB SUxVUkUJCQkJIDEzNQorKyNkZWZpbmUgRklQU19SX1NUUkVOR1RIX0VSUk9SX1VOREVURUNURUQJ CSAxMzYKKysjZGVmaW5lIEZJUFNfUl9URVNUX0ZBSUxVUkUJCQkJIDExNworKyNkZWZpbmUgRklQ U19SX1VOSU5TVEFOVElBVEVfRVJST1IJCQkgMTQxCisrI2RlZmluZSBGSVBTX1JfVU5JTlNUQU5U SUFURV9aRVJPSVNFX0VSUk9SCQkgMTM4CisrI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfRFJC R19UWVBFCQkJIDEzOQorKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNCQkJIDEx MworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzIG9w ZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCistLS0gb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDEyLTA0LTIw IDA5OjA3OjA2LjI2ODc4NTc4NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBz L2ZpcHNfaG1hY19zZWxmdGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY4Nzg1Nzg0ICswMjAw CitAQCAtMCwwICsxLDEzNyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxv cGVuc3NsL2htYWMuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3Qg eworKwljb25zdCBFVlBfTUQgKigqYWxnKSh2b2lkKTsKKysJY29uc3QgY2hhciAqa2V5LCAqaXY7 CisrCXVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXTsKKyt9IEhNQUNfS0FUOwor KworK3N0YXRpYyBjb25zdCBITUFDX0tBVCB2ZWN0b3JbXSA9IHsKKysgICAgewlFVlBfc2hhMSwK KysJLyogZnJvbSBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTk4 L2ZpcHMtMTk4YS5wZGYgKi8KKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAj MiIsCisrCXsgMHgwOSwweDIyLDB4ZDMsMHg0MCwweDVmLDB4YWEsMHgzZCwweDE5LAorKwkgIDB4 NGYsMHg4MiwweGE0LDB4NTgsMHgzMCwweDczLDB4N2QsMHg1YywKKysJICAweGM2LDB4YzcsMHg1 ZCwweDI0IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMjI0LAorKwkvKiBqdXN0IGtlZXAgZXh0 ZW5kaW5nIHRoZSBhYm92ZS4uLiAqLworKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2Ft cGxlICMyIiwKKysJeyAweGRkLDB4ZWYsMHgwYSwweDQwLDB4Y2IsMHg3ZCwweDUwLDB4ZmIsCisr CSAgMHg2ZSwweGU2LDB4Y2UsMHhhMSwweDIwLDB4YmEsMHgyNiwweGFhLAorKwkgIDB4MDgsMHhm MywweDA3LDB4NzUsMHg4NywweGI4LDB4YWQsMHgxYiwKKysJICAweDhjLDB4OGQsMHgxMiwweGM3 IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMjU2LAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMi LAorKwkiU2FtcGxlICMyIiwKKysJeyAweGI4LDB4ZjIsMHgwZCwweGI1LDB4NDEsMHhlYSwweDQz LDB4MDksCisrCSAgMHhjYSwweDRlLDB4YTksMHgzOCwweDBjLDB4ZDAsMHhlOCwweDM0LAorKwkg IDB4ZjcsMHgxZiwweGJlLDB4OTEsMHg3NCwweGEyLDB4NjEsMHgzOCwKKysJICAweDBkLDB4YzEs MHg3ZSwweGFlLDB4NmEsMHgzNCwweDUxLDB4ZDkgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEz ODQsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4MDgs MHhiYywweGIwLDB4ZGEsMHg0OSwweDFlLDB4ODcsMHhhZCwKKysJICAweDlhLDB4MWQsMHg2YSww eGNlLDB4MjMsMHhjNSwweDBiLDB4ZjYsCisrCSAgMHhiNywweDE4LDB4MDYsMHhhNSwweDc3LDB4 Y2QsMHg0OSwweDA0LAorKwkgIDB4ODksMHhmMSwweGU2LDB4MjMsMHg0NCwweDUxLDB4NTEsMHg5 ZiwKKysJICAweDg1LDB4NTYsMHg4MCwweDc5LDB4MGMsMHhiZCwweDRkLDB4NTAsCisrCSAgMHhh NCwweDVmLDB4MjksMHhlMywweDkzLDB4ZjAsMHhlOCwweDdmIH0KKysgICAgfSwKKysgICAgewlF VlBfc2hhNTEyLAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJ eyAweDgwLDB4OWQsMHg0NCwweDA1LDB4N2MsMHg1YiwweDk1LDB4NDEsCisrCSAgMHgwNSwweGJk LDB4MDQsMHgxMywweDE2LDB4ZGIsMHgwZiwweGFjLAorKwkgIDB4NDQsMHhkNSwweGE0LDB4ZDUs MHhkMCwweDg5LDB4MmIsMHhkMCwKKysJICAweDRlLDB4ODYsMHg2NCwweDEyLDB4YzAsMHg5MCww eDc3LDB4NjgsCisrCSAgMHhmMSwweDg3LDB4YjcsMHg3YywweDRmLDB4YWUsMHgyYywweDJmLAor KwkgIDB4MjEsMHhhNSwweGI1LDB4NjUsMHg5YSwweDRmLDB4NGIsMHhhNywKKysJICAweDQ3LDB4 MDIsMHhhMywweGRlLDB4OWIsMHg1MSwweGYxLDB4NDUsCisrCSAgMHhiZCwweDRmLDB4MjUsMHgy NywweDQyLDB4OTgsMHg5OSwweDA1IH0KKysgICAgfSwKKyt9OworKworK2ludCBGSVBTX3NlbGZ0 ZXN0X2htYWMoKQorKyAgICB7CisrICAgIGludCBuOworKyAgICB1bnNpZ25lZCBpbnQgICAgb3V0 bGVuOworKyAgICB1bnNpZ25lZCBjaGFyICAgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIGNv bnN0IEVWUF9NRCAgICptZDsKKysgICAgY29uc3QgSE1BQ19LQVQgKnQ7CisrCisrICAgIGZvcihu PTAsdD12ZWN0b3I7IG48c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0Kysp CisrCXsKKysJbWQgPSAoKnQtPmFsZykoKTsKKysJSE1BQyhtZCx0LT5rZXksc3RybGVuKHQtPmtl eSksCisrCQkoY29uc3QgdW5zaWduZWQgY2hhciAqKXQtPml2LHN0cmxlbih0LT5pdiksCisrCQlv dXQsJm91dGxlbik7CisrCisrCWlmKG1lbWNtcChvdXQsdC0+a2F2YWwsb3V0bGVuKSkKKysJICAg IHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyxGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwl9CisrICAgIHJldHVybiAx OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9m aXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCist LS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmguZmlwcwkyMDEyLTA0LTIw IDA5OjA3OjA2LjI2ODc4NTc4NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBz L2ZpcHNfbG9jbC5oCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY4Nzg1Nzg0ICswMjAwCitAQCAtMCww ICsxLDcxIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lmZGVmIE9QRU5TU0xf RklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysK KysjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUJMzIKKysjZGVmaW5lIGZpcHNfbG9h ZF9rZXlfY29tcG9uZW50KGtleSwgY29tcCwgcHJlKSBcCisrCWtleS0+Y29tcCA9IEJOX2JpbjJi bihwcmUjI18jI2NvbXAsIHNpemVvZihwcmUjI18jI2NvbXApLCBrZXktPmNvbXApOyBcCisrCWlm ICgha2V5LT5jb21wKSBcCisrCQlnb3RvIGVycgorKworKyNkZWZpbmUgZmlwc19wb3N0X3N0YXJ0 ZWQoaWQsIHN1YmlkLCBleCkgMQorKyNkZWZpbmUgZmlwc19wb3N0X3N1Y2Nlc3MoaWQsIHN1Ymlk LCBleCkgMQorKyNkZWZpbmUgZmlwc19wb3N0X2ZhaWxlZChpZCwgc3ViaWQsIGV4KSAxCisrI2Rl ZmluZSBmaXBzX3Bvc3RfY29ycnVwdChpZCwgc3ViaWQsIGV4KSAxCisrI2RlZmluZSBmaXBzX3Bv c3Rfc3RhdHVzKCkgMQorKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX21kLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2ODc4NTc4NCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfbWQuYwkyMDEyLTA0LTIw IDA5OjA3OjA2LjI2ODc4NTc4NCArMDIwMAorQEAgLTAsMCArMSwxNDUgQEAKKysvKiBmaXBzL2V2 cC9maXBzX21kLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChl YXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhp cyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3Jp dHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFz IGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBU aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0 aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0 Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgor KyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2Ft ZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmlj IFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBj b2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBp biBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICog YXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlz IGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0 dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQg d2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICog ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Cisr ICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAn Y3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxp YnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDot KS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBh IGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFw cGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29u ICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS SUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERB TUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBh bnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhp cyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBi ZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UK KysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9w ZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5 QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4g YnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysv KiBNaW5pbWFsIHN0YW5kYWxvbmUgRklQUyB2ZXJzaW9ucyBvZiBEaWdlc3Qgb3BlcmF0aW9ucyAq LworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrCisrY29uc3QgRVZQX01EICpGSVBTX2dldF9kaWdlc3RieW5p ZChpbnQgbmlkKQorKwl7CisrCXN3aXRjaCAobmlkKQorKwkJeworKwkJY2FzZSBOSURfc2hhMToK KysJCXJldHVybiBFVlBfc2hhMSgpOworKworKwkJY2FzZSBOSURfc2hhMjI0OgorKwkJcmV0dXJu IEVWUF9zaGEyMjQoKTsKKysKKysJCWNhc2UgTklEX3NoYTI1NjoKKysJCXJldHVybiBFVlBfc2hh MjU2KCk7CisrCisrCQljYXNlIE5JRF9zaGEzODQ6CisrCQlyZXR1cm4gRVZQX3NoYTM4NCgpOwor KworKwkJY2FzZSBOSURfc2hhNTEyOgorKwkJcmV0dXJuIEVWUF9zaGE1MTIoKTsKKysKKysJCWRl ZmF1bHQ6CisrCQlyZXR1cm4gTlVMTDsKKysJCX0KKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlw cy9maXBzX3Bvc3QuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5j LmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjk3ODU4MDYgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2OTc4NTgw NiArMDIwMAorQEAgLTAsMCArMSwyMDUgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdo dCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgor KyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysK KysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3Jh bmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8u aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxsaW1pdHMuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogUG93ZXIgb24g c2VsZiB0ZXN0IChQT1NUKSBzdXBwb3J0IGZ1bmN0aW9ucyAqLworKworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrLyogUnVuIGFsbCBzZWxm dGVzdHMgKi8KKytpbnQgRklQU19zZWxmdGVzdCh2b2lkKQorKwl7CisrCWludCBydiA9IDE7Cisr CWlmICghRklQU19zZWxmdGVzdF9kcmJnKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxm dGVzdF94OTMxKCkpCisrCQlydiA9IDA7CisrICAgIAlpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMSgp KQorKwkJcnYgPSAwOworKyAgICAJaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTIoKSkKKysJCXJ2ID0g MDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2htYWMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBT X3NlbGZ0ZXN0X2NtYWMoKSkKKysJCXJ2ID0gMDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flcygp KQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2NjbSgpKQorKwkJcnYgPSAw OworKwlpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2djbSgpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJ UFNfc2VsZnRlc3RfYWVzX3h0cygpKQorKwkJcnYgPSAwOworKwlpZiAoIUZJUFNfc2VsZnRlc3Rf ZGVzKCkpCisrCQlydiA9IDA7CisrCWlmICghRklQU19zZWxmdGVzdF9yc2EoKSkKKysJCXJ2ID0g MDsKKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQorKwkJcnYgPSAwOworKwlyZXR1cm4gcnY7 CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2lnbnMg YW5kIHZlcmlmaWVzIHRoZSBkYXRhCisrICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBk aWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAorKyAqIGZsYWdzIG1kX2ZsYWdzLiBJ ZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKKysgKiBhZGRpdGlvbmFs bHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0Cisr ICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBv c2VzIGluIGNhc2UKKysgKiBvZiBmYWlsdXJlLiBJZiAicGtleSIgaXMgTlVMTCBqdXN0IHBlcmZv cm0gYSBtZXNzYWdlIGRpZ2VzdCBjaGVjay4KKysgKi8KKysKKytpbnQgZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywg aW50IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBr YXRsZW4sCisrCQkJY29uc3QgRVZQX01EICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywK KysJCQljb25zdCBjaGFyICpmYWlsX3N0cikKKysJewkKKysJaW50IHJldCA9IDA7CisrCXVuc2ln bmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7CisrCXVuc2lnbmVkIGludCBzaWds ZW47CisrCUVWUF9NRF9DVFggbWN0eDsKKysJRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysKKysJ aWYgKGRpZ2VzdCA9PSBOVUxMKQorKwkJZGlnZXN0ID0gRVZQX3NoYTI1NigpOworKworKwlpZiAo KHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQorKwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXku cnNhKSA+IHNpemVvZihzaWd0bXApKSkKKysJCXsKKysJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJT QV9zaXplKHBrZXktPnBrZXkucnNhKSk7CisrCQlpZiAoIXNpZykKKysJCQl7CisrCQkJRklQU2Vy cihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsK KysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCisrCWlmICh0YnNsZW4gPT0gLTEpCisrCQl0 YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOworKworKwlpZiAobWRfZmxhZ3MpCisrCQlFVlBf TURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxhZ3MpOworKworKwlpZiAoIUVWUF9TaWduSW5p dF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1Np Z25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQ X1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkKKysJCWdvdG8gZXJyb3I7Cisr CisrCWlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGth dGxlbikpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0 eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0 ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJZ290byBlcnJvcjsKKysJcmV0ID0gRVZQX1Zlcmlm eUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtleSk7CisrCisrCWVycm9yOgorKwlpZiAoc2ln ICE9IHNpZ3RtcCkKKysJCU9QRU5TU0xfZnJlZShzaWcpOworKwlFVlBfTURfQ1RYX2NsZWFudXAo Jm1jdHgpOworKwlpZiAocmV0ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BL RVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RFU1RfRkFJTFVSRSk7CisrCQlpZiAoZmFpbF9zdHIp CisrCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsKKysJCXJldHVy biAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJp YyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSByZXN1bHQKKysgKiBh Z2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBs YWludGV4dC4KKysgKi8KKysKKytpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAq Y3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAq a2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJ CWludCBsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVT VF9TSVpFXTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpF XTsKKysKKysJT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUp OworKwltZW1zZXQocGx0bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKwltZW1z ZXQoY2l0bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOworKworKwlpZiAoRVZQX0Np cGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDEpIDw9IDApCisrCQlyZXR1 cm4gMDsKKysJaWYgKEVWUF9DaXBoZXIoY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCBsZW4pIDw9IDAp CisrCQlyZXR1cm4gMDsKKysJaWYgKG1lbWNtcChjaXRtcCwgY2lwaGVydGV4dCwgbGVuKSkKKysJ CXJldHVybiAwOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtl eSwgaXYsIDApIDw9IDApCisrCQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXIoY3R4LCBwbHRt cCwgY2l0bXAsIGxlbikgPD0gMCkKKysJCXJldHVybiAwOworKwlpZiAobWVtY21wKHBsdG1wLCBw bGFpbnRleHQsIGxlbikpCisrCQlyZXR1cm4gMDsKKysJcmV0dXJuIDE7CisrCX0KKysjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjY5Nzg1ODA2 ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMJMjAxMi0w NC0yMCAwOTowNzowNi4yNjk3ODU4MDYgKzAyMDAKK0BAIC0wLDAgKzEsNDU3IEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqCisrICovCisrCisrLyoKKysgKiBUaGlzIGlzIGEgRklQUyBhcHByb3ZlZCBB RVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5LjMxIEEuMi40LgorKyAqLworKyNpbmNsdWRlIDxvcGVu c3NsL2NyeXB0by5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrLyogSWYgd2UgZG9uJ3QgZGVm aW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVjdCB0aW1ldmFsIHdvbid0CisrICAgYmUg ZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3QgYmUgZGVjbGFyZWQgd2l0aCBzdHJpY3Qg Y29tcGlsZXJzCisrICAgbGlrZSBERUMgQyBpbiBBTlNJIEMgbW9kZS4gICovCisrI2lmbmRlZiBf WE9QRU5fU09VUkNFX0VYVEVOREVECisrI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEK KysjZW5kaWYKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+CisrI2lmICEoZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikgfHwgZGVmaW5l ZChPUEVOU1NMX1NZU19WWFdPUktTKSkKKysjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisrI2VuZGlm CisrI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKKysjIGluY2x1ZGUgPHRpbWUuaD4K KysjZW5kaWYKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4z MgorKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKKysjICBpbmNsdWRlIE9QRU5TU0xfVU5JU1RECisr IyBlbHNlCisrIyAgaW5jbHVkZSA8dW5pc3RkLmg+CisrIyBlbmRpZgorKyNlbmRpZgorKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZp cHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKyt2b2lkICpPUEVOU1NMX3N0 ZGVycih2b2lkKTsKKysKKysjZGVmaW5lIEFFU19CTE9DS19MRU5HVEgJMTYKKysKKysKKysvKiBB RVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgCisrCXsK KysJaW50IHNlZWRlZDsKKysJaW50IGtleWVkOworKwlpbnQgdGVzdF9tb2RlOworKwlpbnQgc2Vj b25kOworKwlpbnQgZXJyb3I7CisrCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKKysJQUVTX0tFWSBr czsKKysJaW50IHZwb3M7CisrCS8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBrZXkgaWYgaXQgZXF1 YWxzIHNlZWQgbGVuZ3RoICovCisrCXVuc2lnbmVkIGNoYXIgdG1wX2tleVtBRVNfQkxPQ0tfTEVO R1RIXTsKKysJdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBj aGFyIERUW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIGxhc3RbQUVTX0JMT0NL X0xFTkdUSF07CisrCX0gRklQU19QUk5HX0NUWDsKKysKKytzdGF0aWMgRklQU19QUk5HX0NUWCBz Y3R4OworKworK3N0YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAwOworKworK3ZvaWQgRklQU194 OTMxX3N0aWNrKGludCBvbm9mZikKKysJeworKwlmaXBzX3BybmdfZmFpbCA9IG9ub2ZmOworKwl9 CisrCisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQorKwl7CisrCUZJUFNfeDkzMV9zdGljaygx KTsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfcmFuZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19D VFggKmN0eCkKKysJeworKwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+a2V5ZWQgPSAwOworKwlj dHgtPnRlc3RfbW9kZSA9IDA7CisrCWN0eC0+Y291bnRlciA9IDA7CisrCWN0eC0+c2Vjb25kID0g MDsKKysJY3R4LT5lcnJvciA9IDA7CisrCWN0eC0+dnBvcyA9IDA7CisrCU9QRU5TU0xfY2xlYW5z ZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOworKwlPUEVOU1NMX2NsZWFuc2UoJmN0eC0+a3Ms IHNpemVvZihBRVNfS0VZKSk7CisrCX0KKysJCisrCisrc3RhdGljIGludCBmaXBzX3NldF9wcm5n X2tleShGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1 bnNpZ25lZCBpbnQga2V5bGVuKQorKwl7CisrCWlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQor KwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRVRfUFJOR19LRVksIEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmIChrZXlsZW4gIT0gMTYgJiYga2V5 bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikKKysJCXsKKysJCS8qIGVycm9yOiBpbnZhbGlkIGtl eSBzaXplICovCisrCQlyZXR1cm4gMDsKKysJCX0KKysJQUVTX3NldF9lbmNyeXB0X2tleShrZXks IGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7CisrCWlmIChrZXlsZW4gPT0gMTYpCisrCQl7CisrCQlt ZW1jcHkoY3R4LT50bXBfa2V5LCBrZXksIDE2KTsKKysJCWN0eC0+a2V5ZWQgPSAyOworKwkJfQor KwllbHNlCisrCQljdHgtPmtleWVkID0gMTsKKysJY3R4LT5zZWVkZWQgPSAwOworKwljdHgtPnNl Y29uZCA9IDA7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBmaXBzX3NldF9wcm5n X3NlZWQoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQs IHVuc2lnbmVkIGludCBzZWVkbGVuKQorKwl7CisrCXVuc2lnbmVkIGludCBpOworKwlpZiAoIWN0 eC0+a2V5ZWQpCisrCQlyZXR1cm4gMDsKKysJLyogSW4gdGVzdCBtb2RlIHNlZWQgaXMganVzdCBz dXBwbGllZCBkYXRhICovCisrCWlmIChjdHgtPnRlc3RfbW9kZSkKKysJCXsKKysJCWlmIChzZWVk bGVuICE9IEFFU19CTE9DS19MRU5HVEgpCisrCQkJcmV0dXJuIDA7CisrCQltZW1jcHkoY3R4LT5W LCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCWN0eC0+c2VlZGVkID0gMTsKKysJCXJldHVy biAxOworKwkJfQorKwkvKiBPdXRzaWRlIHRlc3QgbW9kZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRo IGV4aXN0aW5nIHNlZWQgKi8KKysJZm9yIChpID0gMDsgaSA8IHNlZWRsZW47IGkrKykKKysJCXsK KysJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtpXTsKKysJCWlmIChjdHgtPnZwb3MgPT0g QUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJY3R4LT52cG9zID0gMDsKKysJCQkvKiBTcGVj aWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxlbmd0aCBlcXVhbHMKKysgCQkJICogYmxv Y2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgorKyAJCQkgKi8gCisrCQkJ aWYgKGN0eC0+a2V5ZWQgPT0gMikKKysJCQkJeworKwkJCQlpZiAoIW1lbWNtcChjdHgtPnRtcF9r ZXksIGN0eC0+ViwgMTYpKQorKwkJCQkJeworKwkJCQkJUkFORGVycihSQU5EX0ZfRklQU19TRVRf UFJOR19TRUVELAorKwkJCQkJCVJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsK KysJCQkJCXJldHVybiAwOworKwkJCQkJfQorKwkJCQlPUEVOU1NMX2NsZWFuc2UoY3R4LT50bXBf a2V5LCAxNik7CisrCQkJCWN0eC0+a2V5ZWQgPSAxOworKwkJCQl9CisrCQkJY3R4LT5zZWVkZWQg PSAxOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IGZpcHNf c2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpjdHgpCisrCXsKKysJaWYgKGN0eC0+a2V5ZWQp CisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUsUkFORF9SX1BSTkdf S0VZRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWN0eC0+dGVzdF9tb2RlID0gMTsKKysJcmV0 dXJuIDE7CisrCX0KKysKKytpbnQgRklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKQorKwl7CisrCXJl dHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOworKwl9CisrCisraW50IEZJUFNfcmFuZF90 ZXN0X21vZGUodm9pZCkKKysJeworKwlyZXR1cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsK KysJfQorKworKworK2ludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQorKwl7 CisrCWlmICghc2N0eC50ZXN0X21vZGUpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1g5 MzFfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKKysJCXJldHVybiAwOworKwkJfQor KwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOworKwlyZXR1cm4gMTsKKysJ fQorKworK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQorKwl7CisrCWlm ICghc2N0eC50ZXN0X21vZGUpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VU X0RULFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKKysJCXJldHVybiAwOworKwkJfQorKwltZW1j cHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOworKwlyZXR1cm4gMTsKKysJfQorKwor K3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcg KnBjdHIpCisrCXsKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJRklMRVRJTUUgZnQ7Cisr I2VsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQorKyAgICAgICAgc3RydWN0IHRpbWVz cGVjIHRzOworKyNlbHNlCisrCXN0cnVjdCB0aW1ldmFsIHR2OworKyNlbmRpZgorKworKyNpZm5k ZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisrCXVuc2lnbmVkIGxvbmcgcGlkOworKyNlbmRpZgor KworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgm ZnQpOworKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3SGlnaERhdGVUaW1lICYgMHhm Zik7CisrCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDgp ICYgMHhmZik7CisrCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1l ID4+IDE2KSAmIDB4ZmYpOworKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hE YXRlVGltZSA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5k d0xvd0RhdGVUaW1lICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3 TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgo ZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNo YXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKKysjZWxpZiBkZWZpbmVkKE9Q RU5TU0xfU1lTX1ZYV09SS1MpCisrCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7 CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHMudHZfc2VjICYgMHhmZik7CisrCWJ1Zlsx XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbMl0g PSAodW5zaWduZWQgY2hhcikgKCh0cy50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlszXSA9 ICh1bnNpZ25lZCBjaGFyKSAoKHRzLnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysJYnVmWzRdID0g KHVuc2lnbmVkIGNoYXIpICh0cy50dl9uc2VjICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25l ZCBjaGFyKSAoKHRzLnR2X25zZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVk IGNoYXIpICgodHMudHZfbnNlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVk IGNoYXIpICgodHMudHZfbnNlYyA+PiAyNCkgJiAweGZmKTsKKysjZWxzZQorKwlnZXR0aW1lb2Zk YXkoJnR2LE5VTEwpOworKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3NlYyAmIDB4 ZmYpOworKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gOCkgJiAweGZm KTsKKysJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDE2KSAmIDB4ZmYp OworKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMjQpICYgMHhmZik7 CisrCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfdXNlYyAmIDB4ZmYpOworKwlidWZb NV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDgpICYgMHhmZik7CisrCWJ1Zls2 XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1Zls3 XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMjQpICYgMHhmZik7CisrI2VuZGlm CisrCWJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoKnBjdHIgJiAweGZmKTsKKysJYnVmWzldID0g KHVuc2lnbmVkIGNoYXIpICgoKnBjdHIgPj4gOCkgJiAweGZmKTsKKysJYnVmWzEwXSA9ICh1bnNp Z25lZCBjaGFyKSAoKCpwY3RyID4+IDE2KSAmIDB4ZmYpOworKwlidWZbMTFdID0gKHVuc2lnbmVk IGNoYXIpICgoKnBjdHIgPj4gMjQpICYgMHhmZik7CisrCisrCSgqcGN0cikrKzsKKysKKysKKysj aWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUworKwlwaWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlk KCk7CisrCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikgKHBpZCAmIDB4ZmYpOworKwlidWZbMTNd ID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgpICYgMHhmZik7CisrCWJ1ZlsxNF0gPSAodW5z aWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhmZik7CisrCWJ1ZlsxNV0gPSAodW5zaWduZWQg Y2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7CisrI2VuZGlmCisrICAgIH0KKysKKytzdGF0aWMg aW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJdW5zaWduZWQgY2hhciAqb3V0 LCB1bnNpZ25lZCBpbnQgb3V0bGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tf TEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciB0bXBbQUVTX0JM T0NLX0xFTkdUSF07CisrCWludCBpOworKwlpZiAoY3R4LT5lcnJvcikKKysJCXsKKysJCVJBTkRl cnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19FUlJPUik7CisrCQlyZXR1cm4gMDsKKysJ CX0KKysJaWYgKCFjdHgtPmtleWVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5E LFJBTkRfUl9OT19LRVlfU0VUKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+c2Vl ZGVkKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX05PVF9T RUVERUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAoIWN0 eC0+dGVzdF9tb2RlKQorKwkJCUZJUFNfZ2V0X3RpbWV2ZWMoY3R4LT5EVCwgJmN0eC0+Y291bnRl cik7CisrCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAmY3R4LT5rcyk7CisrCQlmb3IgKGkgPSAw OyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQorKwkJCXRtcFtpXSA9IElbaV0gXiBjdHgtPlZb aV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7IGkg PCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0gUltpXSBeIElbaV07CisrCQlB RVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3MpOworKwkJLyogQ29udGludW91cyBQUk5H IHRlc3QgKi8KKysJCWlmIChjdHgtPnNlY29uZCkKKysJCQl7CisrCQkJaWYgKGZpcHNfcHJuZ19m YWlsKQorKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCQlp ZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19MRU5HVEgpKQorKwkJCQl7CisrCSAg ICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfU1RVQ0spOworKwkJCQlj dHgtPmVycm9yID0gMTsKKysJCQkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJCQlyZXR1 cm4gMDsKKysJCQkJfQorKwkJCX0KKysJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19M RU5HVEgpOworKwkJaWYgKCFjdHgtPnNlY29uZCkKKysJCQl7CisrCQkJY3R4LT5zZWNvbmQgPSAx OworKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJ CWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJbWVtY3B5KG91dCwg Uiwgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9CisrCisrCQltZW1jcHkob3V0LCBSLCBBRVNf QkxPQ0tfTEVOR1RIKTsKKysJCW91dCArPSBBRVNfQkxPQ0tfTEVOR1RIOworKwkJb3V0bGVuIC09 IEFFU19CTE9DS19MRU5HVEg7CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisrCisraW50IEZJ UFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbikKKysJ eworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQg PSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBrZXlsZW4pOworKwlDUllQVE9fd191bmxv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytpbnQgRklQU19y YW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtl eWxlbikKKysJeworKwlyZXR1cm4gRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOworKwl9 CisrCisraW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQor Kwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJl dCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2VlZCwgc2VlZGxlbik7CisrCUNSWVBUT193 X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKworK2lu dCBGSVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisrCXsKKysJ aW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gZmlw c19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisraW50IEZJUFNfeDkzMV9zdGF0dXModm9p ZCkKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOwor KwlyZXQgPSBzY3R4LnNlZWRlZDsKKysJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQp OworKwlyZXR1cm4gcmV0OworKwl9CisrCisrdm9pZCBGSVBTX3g5MzFfcmVzZXQodm9pZCkKKysJ eworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlmaXBzX3JhbmRfcHJuZ19y ZXNldCgmc2N0eCk7CisrCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJfQor KworK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNl ZWRsZW4pCisrCXsKKysJRklQU194OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCXJldHVybiAx OworKwl9CisrCisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRfYWRkKGNvbnN0IHZvaWQgKnNlZWQs IGludCBzZWVkbGVuLAorKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5KQorKwl7CisrCUZJUFNfeDkz MV9zZWVkKHNlZWQsIHNlZWRsZW4pOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBjb25z dCBSQU5EX01FVEhPRCByYW5kX3g5MzFfbWV0aD0KKysgICAgeworKyAgICBmaXBzX2RvX3JhbmRf c2VlZCwKKysgICAgRklQU194OTMxX2J5dGVzLAorKyAgICBGSVBTX3g5MzFfcmVzZXQsCisrICAg IGZpcHNfZG9fcmFuZF9hZGQsCisrICAgIEZJUFNfeDkzMV9ieXRlcywKKysgICAgRklQU194OTMx X3N0YXR1cworKyAgICB9OworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9k KHZvaWQpCisreworKyAgcmV0dXJuICZyYW5kX3g5MzFfbWV0aDsKKyt9CisrCisrI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI2OTc4NTgwNiAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCTIwMTItMDQt MjAgMDk6MDc6MDYuMjY5Nzg1ODA2ICswMjAwCitAQCAtMCwwICsxLDE0NSBAQAorKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKgorKyAqLworKworKyNpZm5kZWYgSEVBREVSX0ZJUFNfUkFORF9ICisrI2RlZmlu ZSBIRUFERVJfRklQU19SQU5EX0gKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYg IF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisraW50IEZJUFNfeDkzMV9z ZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbik7CisraW50IEZJUFNf eDkzMV9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7CisraW50IEZJUFNfeDkzMV9ieXRl cyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBvdXRsZW4pOworKworK2ludCBGSVBTX3g5MzFfdGVz dF9tb2RlKHZvaWQpOworK3ZvaWQgRklQU194OTMxX3Jlc2V0KHZvaWQpOworK2ludCBGSVBTX3g5 MzFfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKKysKKytpbnQgRklQU194OTMxX3N0YXR1cyh2 b2lkKTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU194OTMxX21ldGhvZCh2b2lkKTsKKysK Kyt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0eF9zdCBEUkJHX0NUWDsKKysvKiBEUkJHIGV4dGVybmFs IGZsYWdzICovCisrLyogRmxhZyBmb3IgQ1RSIG1vZGUgb25seTogdXNlIGRlcml2YXRpb24gZnVu Y3Rpb24gY3RyX2RmICovCisrI2RlZmluZQlEUkJHX0ZMQUdfQ1RSX1VTRV9ERgkJMHgxCisrLyog UFJORyBpcyBpbiB0ZXN0IHN0YXRlICovCisrI2RlZmluZQlEUkJHX0ZMQUdfVEVTVAkJCTB4Mgor KworK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3Mp OworK2ludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgaW50IHR5cGUsIHVuc2lnbmVk IGludCBmbGFncyk7CisraW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwK KysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOworK2ludCBG SVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGlu LCBzaXplX3QgYWRpbmxlbik7CisraW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0 eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKwkJCWludCBwcmVkaWN0aW9u X3Jlc2lzdGFuY2UsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5s ZW4pOworKworK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCk7Cisr dm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAqZGN0eCk7CisrCisraW50IEZJUFNfZHJiZ19z ZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKwlzaXplX3QgKCpnZXRfZW50cm9weSkoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXpl X3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pLAorKwl2b2lkICgqY2xlYW51cF9lbnRyb3B5KShE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKKysJc2l6ZV90 IGVudHJvcHlfYmxvY2tsZW4sCisrCXNpemVfdCAoKmdldF9ub25jZSkoRFJCR19DVFggKmN0eCwg dW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwg c2l6ZV90IG1heF9sZW4pLAorKwl2b2lkICgqY2xlYW51cF9ub25jZSkoRFJCR19DVFggKmN0eCwg dW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikpOworKworK2ludCBGSVBTX2RyYmdfc2V0 X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKwlzaXplX3QgKCpnZXRfYWRpbikoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQpLAorKwl2b2lkICgqY2xlYW51cF9hZGlu KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKSwKKysJaW50 ICgqcmFuZF9zZWVkX2NiKShEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0p LAorKwlpbnQgKCpyYW5kX2FkZF9jYikoRFJCR19DVFggKmN0eCwKKysJCQkJY29uc3Qgdm9pZCAq YnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkpOworKworK3ZvaWQgKkZJUFNfZHJiZ19nZXRf YXBwX2RhdGEoRFJCR19DVFggKmN0eCk7Cisrdm9pZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERS QkdfQ1RYICpjdHgsIHZvaWQgKmFwcF9kYXRhKTsKKytzaXplX3QgRklQU19kcmJnX2dldF9ibG9j a2xlbmd0aChEUkJHX0NUWCAqZGN0eCk7CisraW50IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRFJC R19DVFggKmRjdHgpOworK3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NU WCAqZGN0eCwgaW50IGludGVydmFsKTsKKyt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVy dmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOworKworK2ludCBGSVBTX2RyYmdfaGVh bHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KTsKKysKKytEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVs dF9kcmJnKHZvaWQpOworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQp OworKworKworK2ludCBGSVBTX3JhbmRfc2V0X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0 aCk7CisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpOworKwor K3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cyk7CisrCisraW50IEZJUFNfcmFuZF9z dHJlbmd0aCh2b2lkKTsKKysKKysvKiAxLjAuMCBjb21wYXQgZnVuY3Rpb25zICovCisraW50IEZJ UFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVf VCBrZXlsZW4pOworK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFO RF9TSVpFX1QgbnVtKTsKKytpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwg RklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQp OworK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOworK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVu c2lnbmVkIGNoYXIgKmR0KTsKKytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKTsKKytjb25zdCBS QU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKTsKKysKKysjaWZkZWYgIF9fY3BsdXNw bHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19yYW5kX2xjbC5oCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlw c19yYW5kX2xjbC5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNjk3ODU4MDYgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgJMjAxMi0wNC0yMCAw OTowNzowNi4yNjk3ODU4MDYgKzAyMDAKK0BAIC0wLDAgKzEsMjE5IEBACisrLyogZmlwcy9yYW5k L2ZpcHNfcmFuZF9sY2wuaCAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAo c3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgZHJi Z19oYXNoX2N0eF9zdCBEUkJHX0hBU0hfQ1RYOworK3R5cGVkZWYgc3RydWN0IGRyYmdfaG1hY19j dHhfc3QgRFJCR19ITUFDX0NUWDsKKyt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0cl9jdHhfc3QgRFJC R19DVFJfQ1RYOworKworKy8qIDg4OCBiaXRzIGZyb20gMTAuMSB0YWJsZSAyICovCisrI2RlZmlu ZSBIQVNIX1BSTkdfTUFYX1NFRURMRU4JMTExCisrCisrc3RydWN0IGRyYmdfaGFzaF9jdHhfc3QK KysJeworKwljb25zdCBFVlBfTUQgKm1kOworKwlFVlBfTURfQ1RYIG1jdHg7CisrCXVuc2lnbmVk IGNoYXIgVltIQVNIX1BSTkdfTUFYX1NFRURMRU5dOworKwl1bnNpZ25lZCBjaGFyIENbSEFTSF9Q Uk5HX01BWF9TRUVETEVOXTsKKysJLyogVGVtcG9yYXJ5IHZhbHVlIHN0b3JhZ2U6IHNob3VsZCBh bHdheXMgZXhjZWVkIG1heCBkaWdlc3QgbGVuZ3RoICovCisrCXVuc2lnbmVkIGNoYXIgdnRtcFtI QVNIX1BSTkdfTUFYX1NFRURMRU5dOworKwl9OworKworK3N0cnVjdCBkcmJnX2htYWNfY3R4X3N0 CisrCXsKKysJY29uc3QgRVZQX01EICptZDsKKysJSE1BQ19DVFggaGN0eDsKKysJdW5zaWduZWQg Y2hhciBLW0VWUF9NQVhfTURfU0laRV07CisrCXVuc2lnbmVkIGNoYXIgVltFVlBfTUFYX01EX1NJ WkVdOworKwl9OworKworK3N0cnVjdCBkcmJnX2N0cl9jdHhfc3QKKysJeworKwlBRVNfS0VZIGtz OworKwlzaXplX3Qga2V5bGVuOworKwl1bnNpZ25lZCBjaGFyIEtbMzJdOworKwl1bnNpZ25lZCBj aGFyIFZbMTZdOworKwkvKiBUZW1wIHZhcmlhYmxlcyB1c2VkIGJ5IGRlcml2YXRpb24gZnVuY3Rp b24gKi8KKysJQUVTX0tFWSBkZl9rczsKKysJQUVTX0tFWSBkZl9reGtzOworKwkvKiBUZW1wb3Jh cnkgYmxvY2sgc3RvcmFnZSB1c2VkIGJ5IGN0cl9kZiAqLworKwl1bnNpZ25lZCBjaGFyIGJsdG1w WzE2XTsKKysJc2l6ZV90IGJsdG1wX3BvczsKKysJdW5zaWduZWQgY2hhciBLWFs0OF07CisrCX07 CisrCisrLyogRFJCRyBpbnRlcm5hbCBmbGFncyAqLworKworKy8qIEZ1bmN0aW9ucyBzaG91bGRu J3QgY2FsbCBlcnIgbGlicmFyeSAqLworKyNkZWZpbmUJRFJCR19GTEFHX05PRVJSCQkJMHgxCisr LyogQ3VzdG9tIHJlc2VlZCBjaGVja2luZyAqLworKyNkZWZpbmUJRFJCR19DVVNUT01fUkVTRUVE CQkweDIKKysKKysvKiBEUkJHIHN0YXR1cyB2YWx1ZXMgKi8KKysvKiBub3QgaW5pdGlhbGlzZWQg Ki8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQJMAorKy8qIG9rIGFuZCByZWFk eSB0byBnZW5lcmF0ZSByYW5kb20gYml0cyAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfUkVBRFkJ CTEKKysvKiByZXNlZWQgcmVxdWlyZWQgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1JFU0VFRAkJ MgorKy8qIGZhdGFsIGVycm9yIGNvbmRpdGlvbiAqLworKyNkZWZpbmUgRFJCR19TVEFUVVNfRVJS T1IJCTMKKysKKysvKiBBIGRlZmF1bHQgbWF4aW11bSBsZW5ndGg6IGxhcmdlciB0aGFuIGFueSBy ZWFzb25hYmxlIHZhbHVlIHVzZWQgaW4gcHJhdGljZSAqLworKworKyNkZWZpbmUgRFJCR19NQVhf TEVOR1RICQkJMHg3ZmZmZmZmMAorKy8qIE1heGltdW0gRFJCRyBibG9jayBsZW5ndGg6IGFsbCBt ZCBzaXplcyBhcmUgYmlnZ2VyIHRoYW4gY2lwaGVyIGJsb2NrcyBzaXplcworKyAqIHNvIHVzZSBt YXggZGlnZXN0IGxlbmd0aC4KKysgKi8KKysjZGVmaW5lIERSQkdfTUFYX0JMT0NLCQkJRVZQX01B WF9NRF9TSVpFCisrCisrI2RlZmluZSBEUkJHX0hFQUxUSF9JTlRFUlZBTAkJKDEgPDwgMjQpCisr CisrLyogRFJCRyBjb250ZXh0IHN0cnVjdHVyZSAqLworKworK3N0cnVjdCBkcmJnX2N0eF9zdAor Kwl7CisrCS8qIEZpcnN0IHR5cGVzIGNvbW1vbiB0byBhbGwgaW1wbGVtZW50YXRpb25zICovCisr CS8qIERSQkcgdHlwZTogYSBOSUQgZm9yIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobSAqLworKwlp bnQgdHlwZTsKKysJLyogVmFyaW91cyBleHRlcm5hbCBmbGFncyAqLworKwl1bnNpZ25lZCBpbnQg eGZsYWdzOworKwkvKiBWYXJpb3VzIGludGVybmFsIHVzZSBvbmx5IGZsYWdzICovCisrCXVuc2ln bmVkIGludCBpZmxhZ3M7CisrCS8qIFVzZWQgZm9yIHBlcmlvZGljIGhlYWx0aCBjaGVja3MgKi8K KysJaW50IGhlYWx0aF9jaGVja19jbnQsIGhlYWx0aF9jaGVja19pbnRlcnZhbDsKKysKKysJLyog VGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBzZXR1cCBieSBtZWNoYW5pc20gZHJiZ19pbml0 KCkgY2FsbCAqLworKwlpbnQgc3RyZW5ndGg7CisrCXNpemVfdCBibG9ja2xlbmd0aDsKKysJc2l6 ZV90IG1heF9yZXF1ZXN0OworKworKwlzaXplX3QgbWluX2VudHJvcHksIG1heF9lbnRyb3B5Owor KwlzaXplX3QgbWluX25vbmNlLCBtYXhfbm9uY2U7CisrCXNpemVfdCBtYXhfcGVycywgbWF4X2Fk aW47CisrCXVuc2lnbmVkIGludCByZXNlZWRfY291bnRlcjsKKysJdW5zaWduZWQgaW50IHJlc2Vl ZF9pbnRlcnZhbDsKKysJc2l6ZV90IHNlZWRsZW47CisrCWludCBzdGF0dXM7CisrCS8qIEFwcGxp Y2F0aW9uIGRhdGE6IHR5cGljYWxseSB1c2VkIGJ5IHRlc3QgZ2V0X2VudHJvcHkgKi8KKysJdm9p ZCAqYXBwX2RhdGE7CisrCS8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0cnVjdHVyZXMgKi8K KysJdW5pb24gCisrCQl7CisrCQlEUkJHX0hBU0hfQ1RYIGhhc2g7CisrCQlEUkJHX0hNQUNfQ1RY IGhtYWM7CisrCQlEUkJHX0NUUl9DVFggIGN0cjsKKysJCX0gZDsKKysJLyogSW5pdGlhbGlhc2Ug UFJORyBhbmQgc2V0dXAgY2FsbGJhY2tzIGJlbG93ICovCisrCWludCAoKmluaXQpKERSQkdfQ1RY ICpjdHgsIGludCBuaWQsIGludCBzZWN1cml0eSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKysJLyog SW50YW50aWF0ZSBQUk5HICovCisrCWludCAoKmluc3RhbnRpYXRlKShEUkJHX0NUWCAqY3R4LAor KwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrCQkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCisrCQkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsKKysJLyogcmVzZWVkICovCisrCWludCAo KnJlc2VlZCkoRFJCR19DVFggKmN0eCwKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBz aXplX3QgZW50bGVuLAorKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbik7CisrCS8qIGdlbmVyYXQgb3V0cHV0ICovCisrCWludCAoKmdlbmVyYXRlKShEUkJHX0NU WCAqY3R4LAorKwkJCQl1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrCQkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKysJLyogdW5pbnN0YW50 aWF0ZSAqLworKwlpbnQgKCp1bmluc3RhbnRpYXRlKShEUkJHX0NUWCAqY3R4KTsKKysKKysJLyog RW50cm9weSBzb3VyY2UgYmxvY2sgbGVuZ3RoICovCisrCXNpemVfdCBlbnRyb3B5X2Jsb2NrbGVu OworKworKwkvKiBlbnRyb3B5IGdhdGhlcmluZyBmdW5jdGlvbiAqLworKwlzaXplX3QgKCpnZXRf ZW50cm9weSkoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrCQkJCWludCBl bnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOworKwkvKiBJbmRpY2F0ZXMg d2UgaGF2ZSBmaW5pc2hlZCB3aXRoIGVudHJvcHkgYnVmZmVyICovCisrCXZvaWQgKCpjbGVhbnVw X2VudHJvcHkpKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4p OworKworKwkvKiBub25jZSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KKysJc2l6ZV90ICgqZ2V0X25v bmNlKShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysJCQkJaW50IGVudHJv cHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7CisrCS8qIEluZGljYXRlcyB3ZSBo YXZlIGZpbmlzaGVkIHdpdGggbm9uY2UgYnVmZmVyICovCisrCXZvaWQgKCpjbGVhbnVwX25vbmNl KShEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKKysKKysJ LyogQ29udGludW91cyByYW5kb20gbnVtYmVyIHRlc3QgdGVtcG9yYXJ5IGFyZWEgKi8KKysJLyog TGFzdCBibG9jayAqLwkKKysJdW5zaWduZWQgY2hhciBsYltFVlBfTUFYX01EX1NJWkVdOworKwkv KiBzZXQgaWYgbGIgaXMgdmFsaWQgKi8KKysJaW50IGxiX3ZhbGlkOworKworKwkvKiBDYWxsYmFj a3MgdXNlZCB3aGVuIGNhbGxlZCB0aHJvdWdoIFJBTkQgaW50ZXJmYWNlICovCisrCS8qIEdldCBh bnkgYWRkaXRpb25hbCBpbnB1dCBmb3IgZ2VuZXJhdGUgKi8KKysJc2l6ZV90ICgqZ2V0X2FkaW4p KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0KTsKKysJdm9pZCAoKmNsZWFudXBf YWRpbikoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7Cisr CS8qIENhbGxiYWNrIGZvciBSQU5EX3NlZWQoKSwgUkFORF9hZGQoKSAqLworKwlpbnQgKCpyYW5k X3NlZWRfY2IpKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7CisrCWlu dCAoKnJhbmRfYWRkX2NiKShEUkJHX0NUWCAqY3R4LAorKwkJCQljb25zdCB2b2lkICpidWYsIGlu dCBudW0sIGRvdWJsZSBlbnRyb3B5KTsKKysJfTsKKysKKysKKytpbnQgZmlwc19kcmJnX2N0cl9p bml0KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAq ZGN0eCk7CisraW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBm aXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgZmxhZ3Mp OworK2ludCBmaXBzX2RyYmdfY3BybmdfdGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWdu ZWQgY2hhciAqb3V0KTsKKysKKytjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdl c3RieW5pZChpbnQgbmlkKTsKKysKKytjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19n ZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7CisrCisrI2RlZmluZSBGSVBTX2RpZ2VzdGluaXQgRVZQ X0RpZ2VzdEluaXQKKysjZGVmaW5lIEZJUFNfZGlnZXN0dXBkYXRlIEVWUF9EaWdlc3RVcGRhdGUK KysjZGVmaW5lIEZJUFNfZGlnZXN0ZmluYWwgRVZQX0RpZ2VzdEZpbmFsCisrI2RlZmluZSBNX0VW UF9NRF9zaXplIEVWUF9NRF9zaXplCitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlw cy9maXBzX3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3Jh bmRfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMu ZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3MDc4NTgyOCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3MDc4 NTgyOCArMDIwMAorQEAgLTAsMCArMSwxOTEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHly aWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisr ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8K KysKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJlX29zLmgiCisr CisrLyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBTaW1pbGFyIHRvIFJBTkQgZnVuY3Rpb25hbGl0 eSBidXQgd2l0aG91dAorKyAqIEVOR0lORSBhbmQgYWRkaXRpb25hbCBjaGVja2luZyBmb3Igbm9u LUZJUFMgcmFuZCBtZXRob2RzLgorKyAqLworKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCAq Zmlwc19yYW5kX21ldGggPSBOVUxMOworK3N0YXRpYyBpbnQgZmlwc19hcHByb3ZlZF9yYW5kX21l dGggPSAwOworK3N0YXRpYyBpbnQgZmlwc19yYW5kX2JpdHMgPSAwOworKworKy8qIEFsbG93cyBh cHBsaWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIgb2YgYml0cyBhbmQgdXNlcyBub24tRklQUyBt ZXRob2RzICovCisrdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKQorKwl7CisrCWZp cHNfcmFuZF9iaXRzID0gbmJpdHM7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3NldF9tZXRob2Qo Y29uc3QgUkFORF9NRVRIT0QgKm1ldGgpCisrCXsKKysJaWYgKCFmaXBzX3JhbmRfYml0cykKKysJ CXsKKysJCWlmIChtZXRoID09IEZJUFNfZHJiZ19tZXRob2QoKSkKKysJCQlmaXBzX2FwcHJvdmVk X3JhbmRfbWV0aCA9IDE7CisrCQllbHNlIGlmIChtZXRoID09IEZJUFNfeDkzMV9tZXRob2QoKSkK KysJCQlmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDI7CisrCQllbHNlCisrCQkJeworKwkJCWZp cHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMDsKKysJCQlpZiAoRklQU19tb2R1bGVfbW9kZSgpKQor KwkJCQl7CisrCQkJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRVRfTUVUSE9ELAorKwkJCQkJ CUZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0K KysJCX0KKysJZmlwc19yYW5kX21ldGggPSBtZXRoOworKwlyZXR1cm4gMTsKKysJfQorKworK2Nv bnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2b2lkKQorKwl7CisrCXJldHVy biBmaXBzX3JhbmRfbWV0aDsKKysJfQorKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRf bWV0aG9kKHZvaWQpCisrCXsKKysJcmV0dXJuIEZJUFNfcmFuZF9nZXRfbWV0aG9kKCk7CisrCX0K KysKKyt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQorKwl7CisrCWlmIChmaXBzX3JhbmRfbWV0 aCAmJiBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCkKKysJCWZpcHNfcmFuZF9tZXRoLT5jbGVhbnVw KCk7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JB TkRfU0laRV9UIG51bSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJ UFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRUVE LCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoZmlw c19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnNlZWQpCisrCQlmaXBzX3JhbmRfbWV0aC0+ c2VlZChidWYsbnVtKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKyt2b2lkIEZJUFNfcmFuZF9hZGQo Y29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkKKysJeworKwlpZiAoIWZp cHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCXsKKysJCUZJ UFNlcnIoRklQU19GX0ZJUFNfUkFORF9BREQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwkJ cmV0dXJuOworKwkJfQorKwlpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmFk ZCkKKysJCWZpcHNfcmFuZF9tZXRoLT5hZGQoYnVmLG51bSxlbnRyb3B5KTsKKysJfQorKworK2lu dCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51 bSkKKysJeworKwlpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21v ZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9CWVRFUywgRklQU19SX05P Tl9GSVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGZpcHNfcmFuZF9tZXRo ICYmIGZpcHNfcmFuZF9tZXRoLT5ieXRlcykKKysJCXJldHVybiBmaXBzX3JhbmRfbWV0aC0+Ynl0 ZXMoYnVmLG51bSk7CisrCXJldHVybiAwOworKwl9CisrCisraW50IEZJUFNfcmFuZF9wc2V1ZG9f Ynl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVtKQorKwl7CisrCWlmICghZmlwc19hcHBy b3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKQorKwkJeworKwkJRklQU2VycihG SVBTX0ZfRklQU19SQU5EX1BTRVVET19CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Cisr CQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRo LT5wc2V1ZG9yYW5kKQorKwkJcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKGJ1Zixu dW0pOworKwlyZXR1cm4gLTE7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKQor Kwl7CisrCWlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgp KQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NUQVRVUywgRklQU19SX05PTl9G SVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKGZpcHNfcmFuZF9tZXRoICYm IGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMpCisrCQlyZXR1cm4gZmlwc19yYW5kX21ldGgtPnN0YXR1 cygpOworKwlyZXR1cm4gMDsKKysJfQorKworKy8qIFJldHVybiBpbnN0YW50aWF0ZWQgc3RyZW5n dGggb2YgUFJORy4gRm9yIERSQkcgdGhpcyBpcyBhbiBpbnRlcm5hbAorKyAqIHBhcmFtZXRlci4g Rm9yIFg5LjMxIFBSTkcgaXQgaXMgODAgYml0cyAoZnJvbSBTUDgwMC0xMzEpLiBBbnkgb3RoZXIK KysgKiB0eXBlIG9mIFBSTkcgaXMgbm90IGFwcHJvdmVkIGFuZCByZXR1cm5zIDAgaW4gRklQUyBt b2RlIGFuZCBtYXhpbXVtCisrICogMjU2IG91dHNpZGUgRklQUyBtb2RlLgorKyAqLworKworK2lu dCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCkKKysJeworKwlpZiAoZmlwc19yYW5kX2JpdHMpCisr CQlyZXR1cm4gZmlwc19yYW5kX2JpdHM7CisrCWlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9 PSAxKQorKwkJcmV0dXJuIEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRklQU19nZXRfZGVmYXVsdF9k cmJnKCkpOworKwllbHNlIGlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAyKQorKwkJcmV0 dXJuIDgwOworKwllbHNlIGlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAwKQorKwkJewor KwkJaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKysJCQlyZXR1cm4gMDsKKysJCWVsc2UKKysJCQly ZXR1cm4gMjU2OworKwkJfQorKwlyZXR1cm4gMDsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzA3 ODU4MjggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2Vs ZnRlc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3MDc4NTgyOCArMDIwMAorQEAgLTAsMCArMSwx ODMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwor KworKworK3R5cGVkZWYgc3RydWN0CisrCXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07CisrCXVu c2lnbmVkIGNoYXIgVlsxNl07CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVTX1BSTkdf VFY7CisrCisrLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5 IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4 X2tleVsxNl0gPQorKwkJezB4ZjMsMHhiMSwweDY2LDB4NmQsMHgxMywweDYwLDB4NzIsMHg0MiwK KysJCSAweGVkLDB4MDYsMHgxYywweGFiLDB4YjgsMHhkNCwweDYyLDB4MDJ9OworKworK3N0YXRp YyBBRVNfUFJOR19UViBhZXNfMTI4X3R2ID0gCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2 LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEs MHhmYiwweGIwLDB4ZTksMHgyMiwweGY5fSwKKysJCQkJLyogViAqLworKwkJezB4ODAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHg1OSwweDUzLDB4MWUsMHhk MSwweDNiLDB4YjAsMHhjMCwweDU1LAorKwkJIDB4ODQsMHg3OSwweDY2LDB4ODUsMHhjMSwweDJm LDB4NzYsMHg0MX0KKysJfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX2tleVsy NF0gPQorKwkJezB4MTUsMHhkOCwweDc4LDB4MGQsMHg2MiwweGQzLDB4MjUsMHg2ZSwKKysJCSAw eDQ0LDB4NjQsMHgxMCwweDEzLDB4NjAsMHgyYiwweGE5LDB4YmMsCisrCQkgMHg0YSwweGZiLDB4 Y2EsMHhlYiwweDRjLDB4OGIsMHg5OSwweDNifTsKKysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVz XzE5Ml90diA9IAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCww eDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4 ZjMsMHg0Yn0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw fSwKKysJCQkJLyogUiAqLworKwkJezB4MTcsMHgwNywweGQ1LDB4MjgsMHgxOSwweDc5LDB4MWUs MHhlZiwKKysJCSAweGE1LDB4MGMsMHhiZiwweDI1LDB4ZTUsMHg1NiwweGI0LDB4OTN9CisrCX07 CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0KKysJCXsweDZkLDB4 MTQsMHgwNiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQsCisrCQkgMHg4MiwweDhkLDB4ZmEsMHhm MiwweDdhLDB4MDMsMHhiNywweDlmLAorKwkJIDB4MGMsMHhjNywweDNlLDB4Y2QsMHg3NiwweGVi LDB4ZWUsMHhiNSwKKysJCSAweDIxLDB4MDUsMHg4YywweDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9 OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2ID0KKysJeworKwkJCQkvKiBEVCAq LworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYy LDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODh9LAorKwkJCQkvKiBWICovCisrCQl7 MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDM1LDB4 YzcsMHhlZiwweGE3LDB4NzgsMHg0ZCwweDI5LDB4YmMsCisrCQkgMHg4MiwweDc5LDB4OTksMHhm YiwweGQwLDB4YjMsMHgzYiwweDcyfQorKwl9OworKworK3ZvaWQgRklQU19jb3JydXB0X3JuZygp CisrICAgIHsKKysgICAgYWVzXzE5Ml90di5WWzBdKys7CisrICAgIH0KKysKKysjZGVmaW5lIGZp cHNfeDkzMV90ZXN0KGtleSwgdHYpIFwKKysJZG9feDkzMV90ZXN0KGtleSwgc2l6ZW9mIGtleSwg JnR2KQorKworK3N0YXRpYyBpbnQgZG9feDkzMV90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50 IGtleWxlbiwKKysJCQlBRVNfUFJOR19UViAqdHYpCisrCXsKKysJdW5zaWduZWQgY2hhciBSWzE2 XSwgVlsxNl07CisrCWludCBydiA9IDE7CisrCW1lbWNweShWLCB0di0+Viwgc2l6ZW9mKFYpKTsK KysJaWYgKCFGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbikpCisrCQlyZXR1cm4gMDsKKysJ aWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKKysJ CXJldHVybiAxOworKwlpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9YOTMxLCBrZXls ZW4sIE5VTEwpKQorKwkJVlswXSsrOworKwlGSVBTX3g5MzFfc2VlZChWLCAxNik7CisrCUZJUFNf eDkzMV9zZXRfZHQodHYtPkRUKTsKKysJRklQU194OTMxX2J5dGVzKFIsIDE2KTsKKysJaWYgKG1l bWNtcChSLCB0di0+UiwgMTYpKQorKwkJeworKwkJZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1Rf WDkzMSwga2V5bGVuLCBOVUxMKTsKKysJCXJ2ID0gMDsKKysJCX0KKysJZWxzZSBpZiAoIWZpcHNf cG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKwkJcmV0dXJuIDA7 CisrCXJldHVybiBydjsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3g5MzEoKQorKwl7Cisr CWludCBydiA9IDE7CisrCUZJUFNfeDkzMV9yZXNldCgpOworKwlpZiAoIUZJUFNfeDkzMV90ZXN0 X21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMSxGSVBT X1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWZpcHNfeDkz MV90ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpKQorKwkJcnYgPSAwOworKwlpZiAoIWZpcHNf eDkzMV90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2KSkKKysJCXJ2ID0gMDsKKysJaWYgKCFm aXBzX3g5MzFfdGVzdChhZXNfMjU2X2tleSwgYWVzXzI1Nl90dikpCisrCQlydiA9IDA7CisrCUZJ UFNfeDkzMV9yZXNldCgpOworKwlpZiAoIXJ2KQorKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxG VEVTVF9YOTMxLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwlyZXR1cm4gcnY7CisrCX0KKysK KytpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCkKKysJeworKwlyZXR1cm4gRklQU19zZWxmdGVz dF94OTMxKCk7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2Zp cHNfcmFuZHRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRl c3QuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjcwNzg1ODI4ICswMjAwCisrKysgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYu MjcwNzg1ODI4ICswMjAwCitAQCAtMCwwICsxLDI1MCBAQAorKy8qIENvcHlyaWdodCAoQykgMTk5 NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdy aXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGlt cGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMg U1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBu b24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRv IGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0Es CisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhl IFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBp cyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRo ZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENv cHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBu b3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRo aXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2 ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGli cmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNz YWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBv ciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20p IgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhl IHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlw dG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dz IHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRo ZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBh Y2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFO WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysg KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0 cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisr ICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMg Y29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBk aXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5j ZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlv Lmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9G SVBTCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50Zigi Tm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNl CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KworK3R5cGVkZWYgc3RydWN0CisrCXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07CisrCXVuc2ln bmVkIGNoYXIgVlsxNl07CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVTX1BSTkdfTUNU OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQor Kwl7MHg5ZiwweDViLDB4NTEsMHgyMCwweDBiLDB4ZjMsMHgzNCwweGI1LAorKwkgMHhkOCwweDJi LDB4ZTgsMHhjMywweDcyLDB4NTUsMHhjOCwweDQ4fTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BS TkdfTUNUIGFlc18xMjhfbWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDYzLDB4NzYsMHhi YiwweGU1LDB4MjksMHgwMiwweGJhLDB4M2IsCisrCSAweDY3LDB4YzksMHgyNSwweGZhLDB4NzAs MHgxZiwweDExLDB4YWN9LAorKwkJCS8qIFYgKi8KKysJezB4NTcsMHgyYywweDhlLDB4NzYsMHg4 NywweDI2LDB4NDcsMHg5NywKKysJIDB4N2UsMHg3NCwweGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEs MHhkMX0sCisrCQkJLyogUiAqLworKwl7MHg0OCwweGU5LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgx OCwweGZiLAorKwkgMHhlNCwweDU3LDB4OTAsMHhkNSwweGMzLDB4ZmMsMHg5YiwweDczfQorK307 CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5WzI0XSA9Cisr CXsweGI3LDB4NmMsMHgzNCwweGQxLDB4MDksMHg2NywweGFiLDB4NzMsCisrCSAweDRkLDB4NWEs MHhkNSwweDM0LDB4OTgsMHgxNiwweDBiLDB4OTEsCisrCSAweGJjLDB4MzUsMHg1MSwweDE2LDB4 NmIsMHhhZSwweDkzLDB4OGF9OworKworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzE5 Ml9tY3RfdHYgPSB7CisrCQkJLyogRFQgKi8KKysJezB4ODQsMHhjZSwweDIyLDB4N2QsMHg5MSww eDVhLDB4YTMsMHhjOSwKKysJIDB4ODQsMHgzYywweDBhLDB4YjMsMHhhOSwweDYzLDB4MTUsMHg1 Mn0sCisrCQkJLyogViAqLworKwl7MHhiNiwweGFmLDB4ZTYsMHg4ZiwweDk5LDB4OWUsMHg5MCww eDY0LAorKwkgMHhkZCwweGM3LDB4N2EsMHhjMSwweGJiLDB4OTAsMHgzYSwweDZkfSwKKysJCQkv KiBSICovCisrCXsweGZjLDB4ODUsMHg2MCwweDlhLDB4MjksMHg2ZiwweGVmLDB4MjEsCisrCSAw eGRkLDB4ODYsMHgyMCwweDMyLDB4OGEsMHgyOSwweDZmLDB4NDd9CisrfTsKKysKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9rZXlbMzJdID0KKysJezB4OWIsMHgwNSww eGM4LDB4NjgsMHhmZiwweDQ3LDB4ZjgsMHgzYSwKKysJIDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0 ZSwweDcxLDB4YjIsMHhlMCwKKysJIDB4YjgsMHg3ZSwweGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYs MHg2ZCwKKysJIDB4ODYsMHgzMiwweGZjLDB4MWYsMHg1ZSwweDFkLDB4MWUsMHg1MH07CisrCisr c3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMjU2X21jdF90diA9IHsKKysJCQkvKiBEVCAq LworKwl7MHgzMSwweDZlLDB4MzUsMHg5YSwweGIxLDB4NDQsMHhmMCwweGVlLAorKwkgMHg2Miww eDZkLDB4MDQsMHg0NiwweGUwLDB4YTMsMHg5MiwweDRjfSwKKysJCQkvKiBWICovCisrCXsweDRm LDB4Y2QsMHhjMSwweDg3LDB4ODIsMHgxZiwweDRkLDB4YTEsCisrCSAweDNlLDB4MGUsMHg1Niww eDQ0LDB4NTksMHhlOCwweDgzLDB4Y2F9LAorKwkJCS8qIFIgKi8KKysJezB4YzgsMHg4NywweGMy LDB4NjEsMHg1YiwweGQwLDB4YjksMHhlMSwKKysJIDB4ZTcsMHhmMywweDhiLDB4ZDcsMHg1Yiww eGQ1LDB4ZjEsMHg4ZH0KKyt9OworKworK3N0YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWduZWQg Y2hhciAqYixpbnQgbikKKysgICAgeworKyAgICB3aGlsZShuLS0gPiAwKQorKwl7CisrCXByaW50 ZigiICUwMngiLCpiKyspOworKwl9CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBjb21wYXJlKGNv bnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3RlZCwK KysJCSAgICBpbnQgbikKKysgICAgeworKyAgICBpbnQgaTsKKysKKysgICAgZm9yKGk9MCA7IGkg PCBuIDsgKytpKQorKwlpZihyZXN1bHRbaV0gIT0gZXhwZWN0ZWRbaV0pCisrCSAgICB7CisrCSAg ICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQsIGdvdDoiKTsKKysJICAgIGR1bXAocmVzdWx0LG4p OworKwkgICAgcHV0cygiXG4gICAgICAgICAgICAgICBleHBlY3RlZDoiKTsKKysJICAgIGR1bXAo ZXhwZWN0ZWQsbik7CisrCSAgICBwdXRjaGFyKCdcbicpOworKwkgICAgRVhJVCgxKTsKKysJICAg IH0KKysgICAgfQorKworKworK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwgaW50IGtleWxlbiwKKysJCQkJCQkJY29uc3QgQUVTX1BSTkdfTUNUICp0dikKKysg ICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKKysgICAgaW50IGksIGo7 CisrICAgIEZJUFNfeDkzMV9yZXNldCgpOworKyAgICBGSVBTX3g5MzFfdGVzdF9tb2RlKCk7Cisr ICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysgICAgRklQU194OTMxX3NlZWQo dHYtPlYsIDE2KTsKKysgICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKKysgICAgZm9yIChpID0g MDsgaSA8IDEwMDAwOyBpKyspCisrCXsKKysgICAgCUZJUFNfeDkzMV9zZXRfZHQoZHQpOworKwlG SVBTX3g5MzFfYnl0ZXMoYnVmLCAxNik7CisrCS8qIEluY3JlbWVudCBEVCAqLworKwlmb3IgKGog PSAxNTsgaiA+PSAwOyBqLS0pCisrCQl7CisrCQlkdFtqXSsrOworKwkJaWYgKGR0W2pdKQorKwkJ CWJyZWFrOworKwkJfQorKwl9CisrCisrICAgIGNvbXBhcmUoYnVmLHR2LT5SLCAxNik7CisrICAg IH0KKysKKytpbnQgbWFpbigpCisrCXsKKysJcnVuX3Rlc3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwg JmFlc18xMjhfbWN0X3R2KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIpOwor KwlydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0LCAmYWVzXzE5Ml9tY3RfdHYpOworKwlwcmlu dGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18yNTZfbWN0X2tl eSwgMzIsICZhZXNfMjU2X21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25l XG4iKTsKKysJcmV0dXJuIDA7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRv L2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMjcwNzg1 ODI4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRl c3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3MDc4NTgyOCArMDIwMAorQEAgLTAsMCArMSw0NDQg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA3IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbltdID0KKysiXHgwMFx4QkJceEY4XHgy Rlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4MzhceEFDXHgyQlx4OURceEE4XHg3MSIKKysiXHhG N1x4MzZceDhEXHgwN1x4RUVceEQ0XHgxMFx4NDNceEE0XHg0MFx4RDZceEI2XHhGMFx4NzRceDU0 XHhGNSIKKysiXHgxRlx4QjhceERGXHhCQVx4QUZceDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4 XHhDRVx4RUJceDZGXHhDRCIKKysiXHg0OFx4NzZceEVEXHg1Mlx4MERceDYwXHhFMVx4RUNceDQ2 XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4MCIKKysiXHg3Rlx4QUZceEI4XHhFMFx4QTNceERG XHhDN1x4MzdceDcyXHgzRVx4RTZceEI0XHhCN1x4RDlceDNBXHgyNSIKKysiXHg4NFx4RUVceDZB XHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4MzRceEIyXHg0NVx4NDVceDk4XHgzOSIKKysi XHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4QTVceDFGXHg1Mlx4N0FceDlBXHg0MVx4RjZc eEMxXHg2OCIKKysiXHg3Rlx4RTJceDUzXHg3Mlx4OThceENBXHgyQVx4OEZceDU5XHg0Nlx4Rjhc eEU1XHhGRFx4MDlceDFEXHhCRCIKKysiXHhDQiI7CisrCisrc3RhdGljIGludCBjb3JydXB0X3Jz YTsKKysKKytzdGF0aWMgaW50IHNldHJzYWtleShSU0EgKmtleSkKKysgICAgeworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgxMSI7CisrCisrICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGRbXSA9CisrIlx4MDBceEE1XHhEQVx4RkNceDUzXHg0MVx4RkFceEYy XHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0QiCisrIlx4RjhceDNGXHgzMVx4MjVceDFF XHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFceDU3XHg5Nlx4NDEiCisrIlx4QjJceDk0 XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhDNFx4NjVceDc0XHg1RVx4NUNceDM5XHgyNlx4Njki CisrIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlceDM5XHhFM1x4N0ZceERDXHhCOFx4MkVc eEM5XHgzRVx4REEiCisrIlx4QzlceDdGXHhGM1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4MTFc eDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQiCisrIlx4NDRceEU1XHg2QVx4QUZceDY4XHhDNVx4NkNc eDA5XHgyQ1x4RDNceDhEXHhDM1x4QkVceEY1XHhEMlx4MEEiCisrIlx4OTNceDk5XHgyNlx4RURc eDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUxXHhBMVx4Q0VceENDXHg0OFx4OTQiCisrIlx4QUZc eDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4NDZceDNBXHg0Qlx4QzhceDVCXHgxQ1x4 QjMiCisrIlx4QzEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPQor KyJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFceEI5XHhCM1x4QzlceDA4XHg4MVx4MEJceDEwXHhB MVx4QjVceDYwIgorKyJceDAxXHg5OVx4RUJceDlGXHg0NFx4QUVceEY0XHhGRFx4QTRceDkzXHhC OFx4MUFceDlFXHgzRFx4ODRceEY2IgorKyJceDMyXHgxMlx4NEVceEYwXHgyM1x4NkVceDVEXHgx RVx4M0JceDdFXHgyOFx4RkFceEU3XHhBQVx4MDRceDBBIgorKyJceDJEXHg1Qlx4MjVceDIxXHg3 Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4QkFceDJBXHg1OFx4RkJceDY1IgorKyJceDk5IjsK KysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcVtdID0KKysiXHgwMFx4QzlceDdG XHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgzNFx4MTJceDMzXHhFQVx4QUFceEQxXHhEOSIKKysi XHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2Nlx4QjFceEQwXHg1QVx4MEZceDIwXHgzNVx4MDJc eDhCXHg5RCIKKysiXHg4Nlx4OThceDQwXHhCNFx4MTZceDY2XHhCNFx4MkVceDkyXHhFQVx4MERc eEEzXHhCNFx4MzJceDA0XHhCNSIKKysiXHhDRlx4Q0VceDMzXHg1Mlx4NTJceDREXHgwNFx4MTZc eEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2XHgxNSIKKysiXHgwMyI7CisrCisrICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9CisrIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhC QVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4NUEiCisrIlx4RUJceDA3XHhE RFx4RENceDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhCMFx4NTFceEYyXHhCMVx4M0UiCisr Ilx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0XHhGRlx4NTlceEMxXHhGN1x4NjlceDJF XHg5QVx4MkUiCisrIlx4MjBceDJCXHgzOFx4RkNceDkxXHgwQVx4NDdceDQxXHg3NFx4QURceEM5 XHgzQ1x4MUZceDY3XHhDOVx4ODEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBkbXExW10gPQorKyJceDQ3XHgxRVx4MDJceDkwXHhGRlx4MEFceEYwXHg3NVx4MDNceDUxXHhC N1x4RjhceDc4XHg4Nlx4NENceEE5IgorKyJceDYxXHhBRFx4QkRceDNBXHg4QVx4N0VceDk5XHgx Q1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3IgorKyJceEY5XHg4MFx4M0ZceDhGXHg2 Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgorKyJceDFCXHg5 OVx4QTRceDk1XHg4NFx4OThceDA3XHhGRVx4MzlceEY5XHgyNFx4NUFceDk4XHgzNlx4REFceDNE IjsKKysgICAgCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlxbXBbXSA9CisrIlx4 MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFFXHg5 NFx4MjMiCisrIlx4QjNceDgwXHhGMlx4NzFceEY3XHgzNFx4NTNceDg4XHg1MFx4OTNceDA3XHg3 Rlx4Q0RceDM5XHhFMlx4MTEiCisrIlx4OUZceEM5XHg4Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhC MVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCisrIlx4OUVceDJFXHgwRlx4OTZceDU2XHhF Nlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5XHg4MFx4MzkiCisrIlx4RjciOworKwor KyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwgc2l6ZW9mKG4pLTEsIGtleS0+bik7CisrICAgIGlm IChjb3JydXB0X3JzYSkKKysJQk5fc2V0X2JpdChrZXktPm4sIDEwMjQpOworKyAgICBrZXktPmUg PSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ZSk7CisrICAgIGtleS0+ZCA9IEJOX2Jp bjJibihkLCBzaXplb2YoZCktMSwga2V5LT5kKTsKKysgICAga2V5LT5wID0gQk5fYmluMmJuKHAs IHNpemVvZihwKS0xLCBrZXktPnApOworKyAgICBrZXktPnEgPSBCTl9iaW4yYm4ocSwgc2l6ZW9m KHEpLTEsIGtleS0+cSk7CisrICAgIGtleS0+ZG1wMSA9IEJOX2JpbjJibihkbXAxLCBzaXplb2Yo ZG1wMSktMSwga2V5LT5kbXAxKTsKKysgICAga2V5LT5kbXExID0gQk5fYmluMmJuKGRtcTEsIHNp emVvZihkbXExKS0xLCBrZXktPmRtcTEpOworKyAgICBrZXktPmlxbXAgPSBCTl9iaW4yYm4oaXFt cCwgc2l6ZW9mKGlxbXApLTEsIGtleS0+aXFtcCk7CisrICAgIHJldHVybiAxOworKyAgICB9Cisr Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKKysgICAgeworKyAgICBjb3JydXB0X3JzYSA9IDE7 CisrICAgIH0KKysKKysvKiBLbm93biBBbnN3ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJv dmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcKKysgKiBrYXRfdGJzLgorKyAqLworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9ICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVi bGljIEtleSBSU0EgS0FUIjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1BTU19TSEExW10gPSB7CisrICAweDJELCAweEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAw eDhBLCAweEExLCAweEI5LCAweDQ2LCAweERBLCAweDBGLAorKyAgMHgwMSwgMHgxRSwgMHgzNywg MHg5MywgMHhDMiwgMHg1NSwgMHgyNywgMHhFNCwgMHgxRCwgMHhEMiwgMHg5MCwgMHhCQiwKKysg IDB4RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4MEMsIDB4 QjcsIDB4RjgsIDB4RDMsCisrICAweEQxLCAweERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1LCAw eEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1LCAweDRDLAorKyAgMHg3RiwgMHg0OSwgMHhGQiwg MHgzRiwgMHgyOSwgMHg5QiwgMHhFMSwgMHgxMiwgMHg1MSwgMHg2MCwgMHhEMCwgMHhBNywKKysg IDB4MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4NzMsIDB4RDksIDB4MDcsIDB4RTMsIDB4NUUsIDB4 M0YsIDB4OUIsIDB4RjUsCisrICAweEI2LCAweEYzLCAweEYyLCAweDVFLCAweDc0LCAweEM5LCAw eDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAorKyAgMHgwQSwgMHhFOSwgMHg4RSwg MHgzOCwgMHhENywgMHgxOCwgMHhDNiwgMHgyQSwgMHgwRiwgMHhGOCwgMHhCNywgMHgzMSwKKysg IDB4RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4ODEsIDB4RDQsIDB4RTYsIDB4REIsIDB4 OUYsIDB4QkEsIDB4RTgsCisrICAweDIzLCAweEI1LCAweDdGLCAweERDLCAweDA4LCAweEVBLCAw eEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAorKyAgMHgyNiwgMHhDNiwgMHg3OSwg MHhDOSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhBOQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7CisrICAweDM5LCAweDRBLCAweDZBLCAw eDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVGLCAweEM1LCAweDU4LCAweEE3LAorKyAg MHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwgMHgw OCwgMHg5NSwgMHhGQSwKKysgIDB4QjEsIDB4OUUsIDB4RDIsIDB4NTUsIDB4NjEsIDB4ODcsIDB4 MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCisrICAweDMwLCAweDlELCAweDBELCAw eDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAorKyAg MHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4 NiwgMHgwNSwgMHhFRSwKKysgIDB4QjEsIDB4RTYsIDB4N0IsIDB4QkEsIDB4MTYsIDB4NzUsIDB4 MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCisrICAweDE1LCAweDc4LCAweDZCLCAw eDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAweDYyLCAweEQxLCAweEI1LAorKyAg MHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgz OCwgMHgyNCwgMHg0OSwKKysgIDB4NTgsIDB4RDIsIDB4NzQsIDB4ODUsIDB4RjQsIDB4QjUsIDB4 OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCisrICAweEM4LCAweDUyLCAweEZBLCAw eENGLCAweDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAweDk1LCAweEMwLCAweDAwLAorKyAg MHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwgMHhFRSwgMHhDMAorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7CisrICAw eDZELCAweDNELCAweEJFLCAweDhGLCAweDYwLCAweDZELCAweDI1LCAweDE0LCAweEYwLCAweDMx LCAweEUzLCAweDg5LAorKyAgMHgwMCwgMHg5NywgMHhGQSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhF NSwgMHgxMCwgMHgyNSwgMHg5QSwgMHhGMywgMHg4RiwKKysgIDB4N0IsIDB4QzUsIDB4QTgsIDB4 NEEsIDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIsIDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisrICAw eEMxLCAweDc3LCAweEM2LCAweDI3LCAweDk3LCAweDAwLCAweDhCLCAweDAwLCAweEEzLCAweDk2 LCAweDczLCAweDRFLAorKyAgMHg3RCwgMHgyRSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4QywgMHg4 RSwgMHhERiwgMHg5RCwgMHg0OSwgMHg0NywgMHgwNSwKKysgIDB4QUIsIDB4RjUsIDB4MDEsIDB4 RDYsIDB4ODEsIDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisrICAw eDJGLCAweDdBLCAweDU0LCAweDUzLCAweDRFLCAweEVELCAweDcxLCAweEQ5LCAweDVBLCAweEYz LCAweERBLCAweEI2LAorKyAgMHgwQiwgMHg0NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywgMHhD OCwgMHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwgMHg5RiwKKysgIDB4MjEsIDB4QjcsIDB4N0UsIDB4 QUQsIDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisrICAw eDVGLCAweEI3LCAweDAxLCAweERGLCAweEMzLCAweDExLCAweDZDLCAweEE5LCAweDlFLCAweDQ5 LCAweEI5LCAweEY2LAorKyAgMHg3MiwgMHhGNCwgMHhGNiwgMHhFRiwgMHg4OCwgMHgxRSwgMHgy RCwgMHgxQworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1Nf U0hBMzg0W10gPSB7CisrICAweDQwLCAweEZCLCAweEExLCAweDIxLCAweEY0LCAweEIyLCAweDQw LCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAweEYyLAorKyAgMHhFQywgMHgxQywgMHhDNCwgMHhD OCwgMHg3QywgMHgyMiwgMHg2NSwgMHg5QywgMHg1NywgMHg0NSwgMHhDRCwgMHg1RSwKKysgIDB4 ODYsIDB4MDAsIDB4RjcsIDB4MjUsIDB4NzgsIDB4REUsIDB4REMsIDB4N0EsIDB4NzEsIDB4NDQs IDB4OUEsIDB4Q0QsCisrICAweEFBLCAweDI1LCAweEY0LCAweEIyLCAweEZDLCAweEYwLCAweDc1 LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAorKyAgMHg2RiwgMHgwMiwgMHhFRiwgMHhD MSwgMHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwgMHgzMSwgMHhEQywgMHg0MiwgMHg2QywKKysgIDB4 QjIsIDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIsIDB4RTYsIDB4NzEsIDB4RjMsIDB4QUMs IDB4NEYsIDB4RkIsCisrICAweDkxLCAweENBLCAweEY1LCAweDcwLCAweEVGLCAweDZCLCAweDlE LCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAorKyAgMHgzQSwgMHhCRSwgMHg4OSwgMHgz OCwgMHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwgMHgzMiwgMHhBRCwgMHg0MiwgMHg4OSwKKysgIDB4 OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAsIDB4RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4MUYs IDB4Q0EsIDB4NkYsCisrICAweDQ4LCAweEY2LCAweEFFLCAweEQ3LCAweDQ1LCAweEVFLCAweEFF LCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAorKyAgMHg0OCwgMHg0NCwgMHhFRSwgMHgx RiwgMHg5MCwgMHgxOCwgMHg0QiwgMHhGMQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10gPSB7CisrICAweDA3LCAweDFFLCAweEQ4LCAweEQ1 LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAweDU3LCAweEFFLCAweDYzLCAweDhDLAorKyAgMHhD NiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwg MHg1MywgMHg5QSwKKysgIDB4OUIsIDB4NTQsIDB4OUUsIDB4QjMsIDB4QzEsIDB4MUQsIDB4MjMs IDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4REQsCisrICAweDRCLCAweEYzLCAweDQ2LCAweDlC LCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAweDYwLCAweDc5LCAweDIzLCAweDM5LAorKyAgMHgw MSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1Riwg MHhGRSwgMHhENywKKysgIDB4N0MsIDB4RTMsIDB4N0YsIDB4RUQsIDB4REIsIDB4ODcsIDB4QkIs IDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4NjEsCisrICAweDU3LCAweEUzLCAweDBGLCAweEUz LCAweEQyLCAweDlELCAweDBDLCAweDJBLCAweDIwLCAweEIwLCAweDg1LCAweDEzLAorKyAgMHhD NSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwg MHgzOSwgMHg2MywKKysgIDB4MkQsIDB4NjAsIDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4NDgs IDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4RkUsCisrICAweDc2LCAweEYyLCAweDMyLCAweDFC LCAweDlDLCAweDdDLCAweENBLCAweEZFLCAweDdGLCAweDgwLCAweEMyLCAweDg4LAorKyAgMHg1 QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwgMHg4QgorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEExW10gPSB7CisrICAweDcxLCAweEVF LCAweDFBLCAweEMwLCAweEZFLCAweDAxLCAweDkzLCAweDU0LCAweDc5LCAweDVDLCAweEYyLCAw eDRDLAorKyAgMHg0QSwgMHhGRCwgMHgxQSwgMHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwg MHg2MSwgMHgzMywgMHg4RCwgMHg5QiwKKysgIDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMs IDB4QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4OTAsIDB4Q0YsCisrICAweERDLCAweDIy LCAweDM3LCAweDhFLCAweEQwLCAweEUxLCAweEFFLCAweDA5LCAweEUzLCAweDNELCAweDFFLCAw eEY4LAorKyAgMHg4MCwgMHhEMSwgMHg4QiwgMHhDMiwgMHhFQywgMHgwQSwgMHhENywgMHg2Qiwg MHg4OCwgMHg4QiwgMHg4QiwgMHhBMSwKKysgIDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4NUIs IDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4QkEsCisrICAweEE5LCAweDlF LCAweEU4LCAweEIxLCAweDhBLCAweDYyLCAweDE2LCAweEJGLCAweDRFLCAweENBLCAweDJFLCAw eDRFLAorKyAgMHhCQywgMHgyOSwgMHhBOCwgMHg2NywgMHgxMywgMHhCNywgMHg5RiwgMHgxRCwg MHgwNCwgMHg0NCwgMHhFNSwgMHg1RiwKKysgIDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMsIDB4RUQs IDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4MUYsCisrICAweDcyLCAweDA1 LCAweERFLCAweEU2LCAweEU4LCAweDdGLCAweDMzLCAweDhBLCAweDc2LCAweDRCLCAweDJGLCAw eDk1LAorKyAgMHhERiwgMHhGMSwgMHg1RiwgMHg4NCwgMHg4MCwgMHhEOSwgMHg0NiwgMHhCNAor K307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9IHsK KysgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4MEUsIDB4NUYsIDB4OEMsIDB4QkIs IDB4QjcsIDB4MTUsIDB4RjksCisrICAweDI1LCAweEJCLCAweEZBLCAweEQ0LCAweDNBLCAweDM0 LCAweEVELCAweDlFLCAweEEwLCAweEE5LCAweDE4LCAweDhELAorKyAgMHg1QiwgMHg1NSwgMHg5 QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwgMHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwK KysgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4NTAsIDB4MTcsIDB4NzYsIDB4MzAs IDB4MkMsIDB4OUUsIDB4Q0QsCisrICAweEE0LCAweDAyLCAweEFELCAweEIxLCAweDZELCAweDQ0 LCAweDZELCAweEQ1LCAweEM2LCAweDQ1LCAweDQxLCAweEU1LAorKyAgMHhFRSwgMHgxRiwgMHg4 RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwgMHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwgMHhDQywK KysgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4MDksIDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQs IDB4MDIsIDB4QzYsIDB4M0IsCisrICAweDBCLCAweDQ0LCAweDRDLCAweDQ2LCAweDk1LCAweEY0 LCAweEY4LCAweDVBLCAweDkxLCAweDI4LCAweDNFLCAweEIyLAorKyAgMHg1OCwgMHgyRSwgMHgw NiwgMHg0NSwgMHg0OSwgMHhFMCwgMHg5MiwgMHhFMiwgMHhDMCwgMHg2NiwgMHhFNiwgMHgzNSwK KysgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcsIDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4Nzcs IDB4ODIsIDB4RTYsIDB4REMsCisrICAweDQwLCAweDIxLCAweDg5LCAweDhCLCAweDM3LCAweDNF LCAweDFFLCAweDhECisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1NIQTI1NltdID0geworKyAgMHgwRCwgMHg1NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4 RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywKKysgIDB4RTcsIDB4M0IsIDB4MUQsIDB4 QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCisrICAw eDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUzLCAweDg1LCAweDE2LCAweERDLCAweEJFLCAweEFE LCAweDZGLCAweDM1LAorKyAgMHg5OCwgMHgyRCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4 QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwKKysgIDB4MkMsIDB4NDQsIDB4OUIsIDB4 OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisrICAw eDBFLCAweEMwLCAweDkwLCAweDEwLCAweDI0LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAweDdB LCAweDkxLCAweDMwLAorKyAgMHhCRSwgMHgyMiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgw OSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwKKysgIDB4N0MsIDB4ODUsIDB4QjQsIDB4 QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisrICAw eEI4LCAweDQyLCAweEJCLCAweDg2LCAweEM1LCAweDlELCAweENFLCAweDdDLCAweDJDLCAweEVF LCAweEQxLCAweERBLAorKyAgMHgyNywgMHg0OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhG NywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwKKysgIDB4QkQsIDB4NDQsIDB4OTcsIDB4 NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF9SU0FfU0hBMzg0W10gPSB7CisrICAweDFELCAweEUzLCAweDZBLCAweERELCAw eDI3LCAweDRDLCAweEMwLCAweEE1LCAweDI3LCAweEVGLCAweEU2LCAweDFGLAorKyAgMHhEMiwg MHg5MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhBRSwgMHhCRCwgMHg5OSwgMHg2MywgMHg1NiwgMHg0 NywgMHhDNywKKysgIDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgsIDB4 QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMsCisrICAweEE3LCAweDY1LCAweDUyLCAweDhBLCAw eEM4LCAweDQ0LCAweDdFLCAweDg2LCAweDVELCAweEE5LCAweEE2LCAweDU1LAorKyAgMHg2NSwg MHgzRSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhBOCwgMHg3OSwgMHgyOCwgMHg3RiwgMHhC NiwgMHhDRiwKKysgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4RTEsIDB4QjEsIDB4QkMsIDB4 RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIsCisrICAweDFCLCAweDJCLCAweEIwLCAweDgyLCAw eDQ2LCAweEFDLCAweDRCLCAweEQxLCAweEUyLCAweDdELCAweEVCLCAweDhDLAorKyAgMHhGRiwg MHg5NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0RCwgMHhCRiwgMHg4RiwgMHg4QiwgMHg5 QywgMHhDRCwKKysgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4REMsIDB4MUMsIDB4QTcsIDB4 RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCisrICAweDE2LCAweDI4LCAweDI0LCAweDY0LCAw eDA0LCAweDM5LCAweDJELCAweDU4LCAweDFFLCAweDM3LCAweERDLCAweDA0LAorKyAgMHhCRCwg MHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgzNSwgMHg1NiwgMHhCRgorK307CisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1MTJbXSA9IHsKKysgIDB4NjksIDB4NTIs IDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4OUIsIDB4MTYsIDB4NTEsIDB4NUQsIDB4 Q0YsCisrICAweDQ5LCAweDI1LCAweDRBLCAweEExLCAweDZBLCAweDc3LCAweDRDLCAweDM2LCAw eDQwLCAweEY4LCAweEIyLCAweDlBLAorKyAgMHgxNSwgMHhFQSwgMHg1QywgMHhFNSwgMHhFNiwg MHg4MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2QiwgMHgzMiwgMHhGMSwKKysgIDB4MDQsIDB4QzEs IDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4OUEsIDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4 RDgsCisrICAweDhELCAweENDLCAweEFDLCAweDhBLCAweEJCLCAweDlDLCAweDgyLCAweDNGLCAw eEE2LCAweDUzLCAweDYyLCAweEI1LAorKyAgMHg4MCwgMHhFMiwgMHhCQywgMHhERCwgMHg2Nywg MHgyQiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3NSwgMHg5MiwgMHg2QiwKKysgIDB4QUYsIDB4NjIs IDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4 RTYsCisrICAweDU5LCAweDU2LCAweEE1LCAweEI5LCAweDVDLCAweEU2LCAweDc3LCAweDc4LCAw eDE2LCAweDYzLCAweDg0LCAweDA1LAorKyAgMHg2RiwgMHgwRSwgMHgyQiwgMHgzMSwgMHg5RCwg MHhGNywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3MSwgMHhFMCwgMHgyRCwKKysgIDB4M0UsIDB4NjIs IDB4Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4 OTEsCisrICAweERGLCAweDcwLCAweDE0LCAweEE1LCAweDNGLCAweDM2LCAweEFCLCAweDg0Cisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtdID0g eworKyAgMHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0 MiwgMHg0NSwgMHg0RCwgMHhERiwKKysgIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4 QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCisrICAweDgwLCAweEE0LCAw eEYxLCAweDRBLCAweEU3LCAweDgzLCAweDEyLCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAweEFD LAorKyAgMHgzNSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgw NCwgMHhFRSwgMHhBOSwgMHg5NywKKysgIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4 RTMsIDB4NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYsCisrICAweDUzLCAweDE1LCAw eEY3LCAweERGLCAweDg3LCAweEI0LCAweDBFLCAweENDLCAweEIxLCAweDFBLCAweDExLCAweDE5 LAorKyAgMHhFRSwgMHg1MSwgMHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwgMHg2 MywgMHgwQywgMHg1OSwgMHhENywKKysgIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4 MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCisrICAweDQ4LCAweEFGLCAw eDgyLCAweEZFLCAweDMyLCAweDQxLCAweDlCLCAweEIyLCAweERCLCAweEVBLCAweEVELCAweDc2 LAorKyAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4 NCwgMHgxQywgMHhCMywgMHg2NywKKysgIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4 NjgsIDB4N0QsIDB4NDkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9S U0FfWDkzMV9TSEEyNTZbXSA9IHsKKysgIDB4N0UsIDB4QTIsIDB4NzcsIDB4RkUsIDB4QjgsIDB4 NTQsIDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQsIDB4NTQsIDB4ODksCisrICAweEU1LCAweDUyLCAw eDE1LCAweDhFLCAweDUyLCAweDk2LCAweDRFLCAweEE2LCAweDU4LCAweDkyLCAweDFDLCAweERE LAorKyAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2MiwgMHgwMCwgMHg0OSwgMHgw NSwgMHg5NSwgMHg3MywgMHhDRiwKKysgIDB4MTYsIDB4NzYsIDB4NjgsIDB4RjYsIDB4QzYsIDB4 NUUsIDB4ODAsIDB4QjgsIDB4QjgsIDB4N0IsIDB4QzgsIDB4OUIsCisrICAweEM2LCAweDUzLCAw eDg4LCAweDI2LCAweDIwLCAweDg4LCAweDczLCAweEI2LCAweDEzLCAweEI4LCAweEYwLCAweDRC LAorKyAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywgMHg1MCwgMHhFQiwgMHgyMCwgMHhD NCwgMHgzOCwgMHgwRSwgMHg5OCwKKysgIDB4QUQsIDB4NEUsIDB4NDksIDB4MkMsIDB4RDcsIDB4 NjUsIDB4QTUsIDB4MTksIDB4MEUsIDB4NTksIDB4MDEsIDB4RUMsCisrICAweDdFLCAweDc1LCAw eDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2LCAweDg1LCAweDQ2LCAweDhELCAweEEwLCAweDhD LAorKyAgMHgzMywgMHgxRCwgMHg4MiwgMHg4QywgMHgwMywgMHhFQSwgMHg2OSwgMHg4OCwgMHgz NSwgMHhBMSwgMHg0MiwgMHhCRCwKKysgIDB4MjEsIDB4RUQsIDB4OEQsIDB4QkMsIDB4QkMsIDB4 REIsIDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAsIDB4NUIsIDB4REMsCisrICAweEUzLCAweEUyLCAw eEU4LCAweDBBLCAweDBBLCAweDI5LCAweDk0LCAweDgwCisrfTsKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMzg0W10gPSB7CisrICAweDVDLCAweDdELCAw eDk2LCAweDM1LCAweEVDLCAweDdFLCAweDExLCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAweDdC LAorKyAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5OSwgMHhCRCwgMHhFRiwgMHhEOCwgMHhBRSwgMHhE NywgMHgzOSwgMHgzNywgMHhDQiwKKysgIDB4RTYsIDB4NEYsIDB4NUUsIDB4MEEsIDB4MTMsIDB4 RTQsIDB4MkUsIDB4NDAsIDB4QjksIDB4QkUsIDB4MkUsIDB4RTMsCisrICAweEVGLCAweDc4LCAw eDgzLCAweDE4LCAweDQ0LCAweDM1LCAweDlDLCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAweEY2 LAorKyAgMHg1NywgMHhDMiwgMHhCMCwgMHgwOCwgMHg1MSwgMHg3MywgMHhDRiwgMHhDQSwgMHg5 OSwgMHg2NiwgMHhFRSwgMHgzMSwKKysgIDB4RDgsIDB4NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4 MjcsIDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQsIDB4RjEsCisrICAweDNFLCAweDlDLCAw eDM1LCAweDk1LCAweDU4LCAweERELCAweDJCLCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5 LAorKyAgMHgyNCwgMHgyMiwgMHhFNCwgMHhCNywgMHhCRiwgMHg0NywgMHg1MywgMHhGNiwgMHgz NCwgMHhENSwgMHg3QywgMHhGRiwKKysgIDB4MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4 MzcsIDB4QjksIDB4REUsIDB4QzUsIDB4MTIsIDB4NDQsIDB4MzUsCisrICAweEVGLCAweDAxLCAw eEU2LCAweDVFLCAweDM5LCAweDMxLCAweDJELCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZE LAorKyAgMHhFMiwgMHhDRCwgMHg4NSwgMHhEQiwgMHg3MywgMHg4MiwgMHg2NSwgMHgyOAorK307 CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltdID0g eworKyAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2 NCwgMHgzQSwgMHhDMSwgMHg2MywKKysgIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4 NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4QUMsCisrICAweEU3LCAweDQ3LCAw eDA5LCAweEIyLCAweDExLCAweDRCLCAweDhBLCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAweEQ3 LAorKyAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1 RSwgMHhGOSwgMHgxNCwgMHgyOCwKKysgIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4 NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCisrICAweDZFLCAweDJCLCAw eDc5LCAweDk2LCAweDBELCAweDBDLCAweEM4LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAweEFG LAorKyAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgx MCwgMHhFMCwgMHhGNiwgMHhEMCwKKysgIDB4Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4 ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCisrICAweDlGLCAweDA5LCAw eENBLCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVELCAweDA0LCAweDJELCAweEZCLCAweDdD LAorKyAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0MiwgMHgx MSwgMHgzMCwgMHg3MSwgMHgxQiwKKysgIDB4NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4 RjUsIDB4NTksIDB4QzMKKyt9OworKworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisrCXsK KysJaW50IHJldCA9IDA7CisrCVJTQSAqa2V5OworKwlFVlBfUEtFWSAqcGsgPSBOVUxMOworKwor KwlpZiAoKGtleT1SU0FfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJc2V0cnNha2V5 KGtleSk7CisrCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsK KysKKysJRVZQX1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsKKysKKysJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWth dF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVWUF9N RF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMSBQS0NTIzEiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NIQTIy NCksCisrCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJ IlJTQSBTSEEyMjQgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9S U0FfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCksIEVW UF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMjU2IFBLQ1MjMSIpKQorKwkJ Z290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0Ff U0hBMzg0KSwKKysJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAor KwkJCQkiUlNBIFNIQTM4NCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJ a2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1MTIo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEE1MTIgUEtDUyMxIikp CisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGth dF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTEsIHNpemVv ZihrYXRfUlNBX1BTU19TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9QU1MsCisrCQkJCSJSU0EgU0hBMSBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJ CQkJa2F0X1JTQV9QU1NfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwKKysJCQkJ RVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyMjQg UFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTI1Niwg c2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NU WF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMjU2IFBTUyIpKQorKwkJZ290byBlcnI7Cisr CWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ri cykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEzODQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEz ODQpLAorKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQki UlNBIFNIQTM4NCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9Q U1NfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEE1MTIgUFNTIikpCisrCQln b3RvIGVycjsKKysKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90 YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTEsIHNpemVvZihr YXRfUlNBX1g5MzFfU0hBMSksCisrCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Y OTMxLAorKwkJCSJSU0EgU0hBMSBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJLyogTkI6IFNIQTIy NCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICovCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9T SEEyNTYsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMjU2KSwKKysJCQlFVlBfc2hhMjU2KCksIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTI1NiBYOTMxIikpCisrCQlnb3Rv IGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVv ZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0Ff WDkzMV9TSEEzODQpLAorKwkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMx LAorKwkJCSJSU0EgU0hBMzg0IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlr YXRfUlNBX1g5MzFfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTUxMiksCisrCQkJRVZQ X3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEE1MTIgWDkz MSIpKQorKwkJZ290byBlcnI7CisrCisrCisrCXJldCA9IDE7CisrCisrCWVycjoKKysJaWYgKHBr KQorKwkJRVZQX1BLRVlfZnJlZShwayk7CisrCWVsc2UgaWYgKGtleSkKKysJCVJTQV9mcmVlKGtl eSk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAq LworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5m aXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKKy0tLSBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxMi0wNC0yMCAw OTowNzowNi4yNzE3ODU4NDkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9m aXBzX3JzYV94OTMxZy5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjcxNzg1ODQ5ICswMjAwCitAQCAt MCwwICsxLDI4MiBAQAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29weXJpZ2h0 IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50 YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysg KiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5l dHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNp YWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBj b25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBS QzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNv ZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJp YnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0 IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICog CisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29w eXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisr ICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3Vs ZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9m IHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0 dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAo b25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dy YXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91 dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUg bm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55 IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisr ICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNs dWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5E CisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysg KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2Ug YW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNp b24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGku ZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBh bm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1Ymxp YyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3Ry aW5nLmg+CisrI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrZXh0ZXJuIGlu dCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7CisrI2VuZGlmCisrCisrLyogWDkuMzEgUlNBIGtl eSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCisrCisraW50IFJTQV9YOTMxX2Rlcml2ZV9l eChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpx MiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05V TSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBC SUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCUJJ R05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKKysJQk5fQ1RYICpjdHg9 TlVMTCwqY3R4Mj1OVUxMOworKworKwlpZiAoIXJzYSkgCisrCQlnb3RvIGVycjsKKysKKysJY3R4 ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkgCisrCQlnb3RvIGVycjsKKysJQk5fQ1RYX3N0 YXJ0KGN0eCk7CisrCisrCXIwID0gQk5fQ1RYX2dldChjdHgpOworKwlyMSA9IEJOX0NUWF9nZXQo Y3R4KTsKKysJcjIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIzID0gQk5fQ1RYX2dldChjdHgpOwor KworKwlpZiAocjMgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZSkKKysJCXsK KysJCXJzYS0+ZSA9IEJOX2R1cChlKTsKKysJCWlmICghcnNhLT5lKQorKwkJCWdvdG8gZXJyOwor KwkJfQorKwllbHNlCisrCQllID0gcnNhLT5lOworKworKwkvKiBJZiBub3QgYWxsIHBhcmFtZXRl cnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KKysJICogVGhpcyBhbGxvd3Mg dGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCisrCSAqLworKwor KwlpZiAoWHAgJiYgIXJzYS0+cCkKKysJCXsKKysJCXJzYS0+cCA9IEJOX25ldygpOworKwkJaWYg KCFyc2EtPnApCisrCQkJZ290byBlcnI7CisrCisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1l X2V4KHJzYS0+cCwgcDEsIHAyLAorKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKKysJ CQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKFhxICYmICFyc2EtPnEpCisrCQl7CisrCQlyc2Et PnEgPSBCTl9uZXcoKTsKKysJCWlmICghcnNhLT5xKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFC Tl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKKysJCQkJCVhxLCBYcTEsIFhx MiwgZSwgY3R4LCBjYikpCisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghcnNhLT5wIHx8 ICFyc2EtPnEpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgp OworKwkJcmV0dXJuIDI7CisrCQl9CisrCisrCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQg d2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKKysJICogY29tcG9uZW50cy4KKysJ ICovCisrCisrCS8qIGNhbGN1bGF0ZSBuICovCisrCXJzYS0+bj1CTl9uZXcoKTsKKysJaWYgKHJz YS0+biA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbXVsKHJzYS0+bixyc2EtPnAs cnNhLT5xLGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgKi8KKysJaWYg KCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBwLTEg Ki8KKysJaWYgKCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJy OwkvKiBxLTEgKi8KKysJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKKysJCWdvdG8gZXJyOwkv KiAocC0xKShxLTEpICovCisrCisrCWlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCisrCQln b3RvIGVycjsKKysKKysJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKKysJCWdv dG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkgKi8KKysKKysJY3R4MiA9IEJOX0NUWF9uZXcoKTsK KysJaWYgKCFjdHgyKQorKwkJZ290byBlcnI7CisrCisrCXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShO VUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAqLworKwlpZiAocnNhLT5kID09IE5VTEwpCisrCQln b3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCisrCXJzYS0+ZG1wMT1C Tl9uZXcoKTsKKysJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICgh Qk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBj YWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KKysJcnNhLT5kbXExPUJOX25ldygpOworKwlpZiAocnNh LT5kbXExID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXExLHJz YS0+ZCxyMixjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9m IHEgbW9kIHAgKi8KKysJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+ cCxjdHgyKTsKKysKKysJZXJyOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgp OworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJCX0KKysJaWYgKGN0eDIpCisrCQlCTl9DVFhfZnJl ZShjdHgyKTsKKysJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8KKysJ aWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4g MDsKKysKKysJfQorKworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGlu dCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2sgPSAw OworKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKKysJQk5fQ1RYICpjdHggPSBOVUxM OworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5m bGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJiAKKysJCShiaXRzIDwgT1BFTlNTTF9S U0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19G X1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfS0VZX1RPT19TSE9SVCk7CisrCSAgICBy ZXR1cm4gMDsKKysJICAgIH0KKysKKysJaWYgKGJpdHMgJiAweGZmKQorKwkgICAgeworKwkgICAg RklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9JTlZBTElEX0tF WV9MRU5HVEgpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCisrCWlmKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5F UkFURV9LRVlfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAw OworKwkgICAgfQorKyNlbmRpZgorKworKwljdHggPSBCTl9DVFhfbmV3KCk7CisrCWlmICghY3R4 KQorKwkJZ290byBlcnJvcjsKKysKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7CisrCVhwID0gQk5fQ1RY X2dldChjdHgpOworKwlYcSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJaWYgKCFCTl9YOTMxX2dlbmVy YXRlX1hwcShYcCwgWHEsIGJpdHMsIGN0eCkpCisrCQlnb3RvIGVycm9yOworKworKwlyc2EtPnAg PSBCTl9uZXcoKTsKKysJcnNhLT5xID0gQk5fbmV3KCk7CisrCWlmICghcnNhLT5wIHx8ICFyc2Et PnEpCisrCQlnb3RvIGVycm9yOworKworKwkvKiBHZW5lcmF0ZSB0d28gcHJpbWVzIGZyb20gWHAs IFhxICovCisrCisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnAsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIFhwLAorKwkJCQkJZSwgY3R4LCBjYikpCisrCQlnb3RvIGVycm9y OworKworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5xLCBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBYcSwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysK KysJLyogU2luY2UgcnNhLT5wIGFuZCByc2EtPnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3aWxsIGp1 c3QgZGVyaXZlCisrCSAqIHJlbWFpbmluZyBSU0EgY29tcG9uZW50cy4KKysJICovCisrCisrCWlm ICghUlNBX1g5MzFfZGVyaXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKysJCQkJ TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgZSwgY2IpKQorKwkJZ290byBlcnJv cjsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQor KwkgICAgZ290byBlcnJvcjsKKysjZW5kaWYKKysKKysJb2sgPSAxOworKworKwllcnJvcjoKKysJ aWYgKGN0eCkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7 CisrCQl9CisrCisrCWlmIChvaykKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJ fQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMKKy0t LSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMJMjAx Mi0wNC0yMCAwOTowNzowNi4yNzE3ODU4NDkgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlw dG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjcxNzg1ODQ5 ICswMjAwCitAQCAtMCwwICsxLDE0MCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKwor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgY29uc3QgY2hhciB0ZXN0W11bNjBdPQorKyAgICB7Cisr ICAgICIiLAorKyAgICAiYWJjIiwKKysgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpo aWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIgorKyAgICB9OworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9ESUdFU1RfTEVOR1RIXT0KKysgICAgeworKyAgICB7IDB4 ZGEsMHgzOSwweGEzLDB4ZWUsMHg1ZSwweDZiLDB4NGIsMHgwZCwweDMyLDB4NTUsCisrICAgICAg MHhiZiwweGVmLDB4OTUsMHg2MCwweDE4LDB4OTAsMHhhZiwweGQ4LDB4MDcsMHgwOSB9LAorKyAg ICB7IDB4YTksMHg5OSwweDNlLDB4MzYsMHg0NywweDA2LDB4ODEsMHg2YSwweGJhLDB4M2UsCisr ICAgICAgMHgyNSwweDcxLDB4NzgsMHg1MCwweGMyLDB4NmMsMHg5YywweGQwLDB4ZDgsMHg5ZCB9 LAorKyAgICB7IDB4ODQsMHg5OCwweDNlLDB4NDQsMHgxYywweDNiLDB4ZDIsMHg2ZSwweGJhLDB4 YWUsCisrICAgICAgMHg0YSwweGExLDB4ZjksMHg1MSwweDI5LDB4ZTUsMHhlNSwweDQ2LDB4NzAs MHhmMSB9LAorKyAgICB9OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9zaGE7CisrCisrdm9pZCBG SVBTX2NvcnJ1cHRfc2hhMSgpCisrICAgIHsKKysgICAgY29ycnVwdF9zaGEgPSAxOworKyAgICB9 CisrCisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCisrICAgIHsKKysgICAgaW50IG47CisrCisr ICAgIGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXplb2YodGVzdFswXSkgOyArK24pCisrCXsK KysJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrCUVWUF9EaWdlc3Qo dGVzdFtuXSxzdHJsZW4odGVzdFtuXSkrY29ycnVwdF9zaGEsbWQsIE5VTEwsIEVWUF9zaGExKCks IE5VTEwpOworKwlpZihtZW1jbXAobWQscmV0W25dLHNpemVvZiBtZCkpCisrCSAgICB7CisrCSAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsKKysgICAg fQorKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGEyNTZbXSA9IHsgMHhmYSwg MHg0OCwgMHg1OSwgMHgyYSwgMHhlMSwgMHhhZSwgMHgxZiwgMHgzMCwKKysJCQkJCSAgICAweGZj IH07Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTI1NltdID0geyAweGY3LCAw eDI2LCAweGQ4LCAweDk4LCAweDQ3LCAweDkxLCAweDY4LCAweDViLAorKwkJCQkJICAgIDB4OWUs IDB4MzksIDB4YjIsIDB4NTgsIDB4YmIsIDB4NzUsIDB4YmYsIDB4MDEsCisrCQkJCQkgICAgMHgx NywgMHgwYywgMHg4NCwgMHgwMCwgMHgwMSwgMHg3YSwgMHg5NCwgMHg4MywKKysJCQkJCSAgICAw eGYzLCAweDBiLCAweDE1LCAweDg0LCAweDRiLCAweDY5LCAweDg4LCAweDhhIH07CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTUxMltdID0geyAweDM3LCAweGQxLCAweDM1 LCAweDlkLCAweDE4LCAweDQxLCAweGU5LCAweGI3LAorKwkJCQkJICAgIDB4NmQsIDB4OWEsIDB4 MTMsIDB4ZGEsIDB4NWYsIDB4ZjMsIDB4YmQgfTsKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBkaWdfc2hhNTEyW10gPSB7IDB4MTEsIDB4MTMsIDB4YzQsIDB4MTksIDB4ZWQsIDB4MmIsIDB4 MWQsIDB4MTYsCisrCQkJCQkgICAgMHgxMSwgMHhlYiwgMHg5YiwgMHhiZSwgMHhmMCwgMHg3Ziwg MHhjZiwgMHg0NCwKKysJCQkJCSAgICAweDhiLCAweGQ3LCAweDU3LCAweGJkLCAweDhkLCAweGE5 LCAweDI1LCAweGIwLAorKwkJCQkJICAgIDB4NDcsIDB4MjUsIDB4ZDYsIDB4NmMsIDB4OWEsIDB4 NTQsIDB4N2YsIDB4OGYsCisrCQkJCQkgICAgMHgwYiwgMHg1MywgMHgxYSwgMHgxMCwgMHg2OCwg MHgzMiwgMHgwMywgMHgzOCwKKysJCQkJCSAgICAweDgyLCAweGM0LCAweDg3LCAweGM0LCAweGVh LCAweDBlLCAweGQxLCAweDA0LAorKwkJCQkJICAgIDB4YTksIDB4OTgsIDB4YzEsIDB4MDUsIDB4 YTMsIDB4ZjMsIDB4ZjgsIDB4YjEsCisrCQkJCQkgICAgMHhhZiwgMHhiYywgMHhkOSwgMHg3OCwg MHg3ZSwgMHhlZSwgMHgzZCwgMHg0MyB9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9p ZCkKKysJeworKwl1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysJ RVZQX0RpZ2VzdChtc2dfc2hhMjU2LCBzaXplb2YobXNnX3NoYTI1NiksIG1kLCBOVUxMLCBFVlBf c2hhMjU2KCksIE5VTEwpOworKwlpZihtZW1jbXAoZGlnX3NoYTI1NiwgbWQsIHNpemVvZihkaWdf c2hhMjU2KSkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlFVlBfRGlnZXN0KG1z Z19zaGE1MTIsIHNpemVvZihtc2dfc2hhNTEyKSwgbWQsIE5VTEwsIEVWUF9zaGE1MTIoKSwgTlVM TCk7CisrCWlmKG1lbWNtcChkaWdfc2hhNTEyLCBtZCwgc2l6ZW9mKGRpZ19zaGE1MTIpKSkKKysJ CXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlM RUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCisrCXJldHVybiAxOworKwl9CisrCisrI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1h Yy5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMu YworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMu ZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3MTc4NTg0OSArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMJMjAxMi0wNC0yMCAwOTowNzow Ni4yNzE3ODU4NDkgKzAyMDAKK0BAIC0wLDAgKzEsMTgwIEBACisrLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0Ogor KyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNp bmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysj aWZuZGVmIEZJUFNDQU5JU1RFUl9PCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkgeyByZXR1 cm4gMDsgfQorK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjaygpIHt9Cisrdm9pZCBPUEVOU1NMX2Ns ZWFuc2Uodm9pZCAqcCxzaXplX3QgbGVuKSB7fQorKyNlbmRpZgorKworKyNpZglkZWZpbmVkKF9f aTM4NikgICB8fCBkZWZpbmVkKF9faTM4Nl9fKSAgIHx8IGRlZmluZWQoX01fSVg4NikgfHwgXAor KwlkZWZpbmVkKF9fSU5URUxfXykgfHwgXAorKwlkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVk KF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQorKwor K3Vuc2lnbmVkIGludCAgT1BFTlNTTF9pYTMyY2FwX1BbMl07CisrI2VuZGlmCisrCisrI2lmZGVm IE9QRU5TU0xfRklQUworKworK3N0YXRpYyB2b2lkIGhtYWNfaW5pdChTSEEyNTZfQ1RYICptZF9j dHgsU0hBMjU2X0NUWCAqb19jdHgsCisrCQkgICAgICBjb25zdCBjaGFyICprZXkpCisrICAgIHsK KysgICAgc2l6ZV90IGxlbj1zdHJsZW4oa2V5KTsKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVk IGNoYXIga2V5bWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKKysgICAgdW5zaWduZWQgY2hhciBwYWRb SE1BQ19NQVhfTURfQ0JMT0NLXTsKKysKKysgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spCisrCXsK KysJU0hBMjU2X0luaXQobWRfY3R4KTsKKysJU0hBMjU2X1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7 CisrCVNIQTI1Nl9GaW5hbChrZXltZCxtZF9jdHgpOworKwlsZW49U0hBMjU2X0RJR0VTVF9MRU5H VEg7CisrCX0KKysgICAgZWxzZQorKwltZW1jcHkoa2V5bWQsa2V5LGxlbik7CisrICAgIG1lbXNl dCgma2V5bWRbbGVuXSwnXDAnLEhNQUNfTUFYX01EX0NCTE9DSy1sZW4pOworKworKyAgICBmb3Io aT0wIDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykKKysJcGFkW2ldPTB4MzZea2V5bWRb aV07CisrICAgIFNIQTI1Nl9Jbml0KG1kX2N0eCk7CisrICAgIFNIQTI1Nl9VcGRhdGUobWRfY3R4 LHBhZCxTSEEyNTZfQ0JMT0NLKTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9D QkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDVjXmtleW1kW2ldOworKyAgICBTSEEyNTZfSW5pdChv X2N0eCk7CisrICAgIFNIQTI1Nl9VcGRhdGUob19jdHgscGFkLFNIQTI1Nl9DQkxPQ0spOworKyAg ICB9CisrCisrc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBjaGFyICptZCxTSEEyNTZf Q1RYICptZF9jdHgsU0hBMjU2X0NUWCAqb19jdHgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hh ciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKworKyAgICBTSEEyNTZfRmluYWwoYnVmLG1k X2N0eCk7CisrICAgIFNIQTI1Nl9VcGRhdGUob19jdHgsYnVmLHNpemVvZiBidWYpOworKyAgICBT SEEyNTZfRmluYWwobWQsb19jdHgpOworKyAgICB9CisrCisrI2VuZGlmCisrCisraW50IG1haW4o aW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAg IHN0YXRpYyBjaGFyIGtleVtdPSJvcmJvRGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFyUCI7Cisr ICAgIGludCBuLGJpbmFyeT0wOworKworKyAgICBpZihhcmdjIDwgMikKKysJeworKwlmcHJpbnRm KHN0ZGVyciwiJXMgWzxmaWxlPl0rXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9CisrCisr ICAgIG49MTsKKysgICAgaWYgKCFzdHJjbXAoYXJndltuXSwiLWJpbmFyeSIpKQorKwl7CisrCW4r KzsKKysJYmluYXJ5PTE7CS8qIGVtaXQgYmluYXJ5IGZpbmdlcnByaW50Li4uICovCisrCX0KKysK KysgICAgZm9yKDsgbiA8IGFyZ2MgOyArK24pCisrCXsKKysJRklMRSAqZj1mb3Blbihhcmd2W25d LCJyYiIpOworKwlTSEEyNTZfQ1RYIG1kX2N0eCxvX2N0eDsKKysJdW5zaWduZWQgY2hhciBtZFtT SEEyNTZfRElHRVNUX0xFTkdUSF07CisrCWludCBpOworKworKwlpZighZikKKysJICAgIHsKKysJ ICAgIHBlcnJvcihhcmd2W25dKTsKKysJICAgIGV4aXQoMik7CisrCSAgICB9CisrCisrCWhtYWNf aW5pdCgmbWRfY3R4LCZvX2N0eCxrZXkpOworKwlmb3IoIDsgOyApCisrCSAgICB7CisrCSAgICBj aGFyIGJ1ZlsxMDI0XTsKKysJICAgIHNpemVfdCBsPWZyZWFkKGJ1ZiwxLHNpemVvZiBidWYsZik7 CisrCisrCSAgICBpZihsID09IDApCisrCQl7CisrCQlpZihmZXJyb3IoZikpCisrCQkgICAgewor KwkJICAgIHBlcnJvcihhcmd2W25dKTsKKysJCSAgICBleGl0KDMpOworKwkJICAgIH0KKysJCWVs c2UKKysJCSAgICBicmVhazsKKysJCX0KKysJICAgIFNIQTI1Nl9VcGRhdGUoJm1kX2N0eCxidWYs bCk7CisrCSAgICB9CisrCWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOworKworKwlpZiAo YmluYXJ5KQorKwkgICAgeworKwkgICAgZndyaXRlKG1kLFNIQTI1Nl9ESUdFU1RfTEVOR1RILDEs c3Rkb3V0KTsKKysJICAgIGJyZWFrOwkvKiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCisrCSAg ICB9CisrCisrLyoJcHJpbnRmKCJITUFDLVNIQTEoJXMpPSAiLGFyZ3Zbbl0pOyAqLworKwlmb3Io aT0wIDsgaSA8IFNIQTI1Nl9ESUdFU1RfTEVOR1RIIDsgKytpKQorKwkgICAgcHJpbnRmKCIlMDJ4 IixtZFtpXSk7CisrCXByaW50ZigiXG4iKTsKKysJfQorKyNlbmRpZgorKyAgICByZXR1cm4gMDsK KysgICAgfQorKworKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvZmlwc190 ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3Vp dGUuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZp cHMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzI3ODU4NzAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3Mjc4 NTg3MCArMDIwMAorQEAgLTAsMCArMSw1ODggQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHly aWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqCisrICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIg Zm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCisrICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFs aWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQorKyAqIE9wZW5TU0wgbGli cmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKKysgKiBm dW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJl cmF0ZWx5CisrICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKKysgKgor KyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgorKyAqCisrICovCisrI2luY2x1ZGUg PHN0ZGlvLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNp bmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv cnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGgu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMK KytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorKyAgICB7CisrICAgIHByaW50Zigi Tm8gRklQUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworKyAgICB9CisrI2Vsc2UKKysK KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisr LyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3Vs dCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAorKyovCisrc3RhdGljIGludCBGSVBTX2Flc190 ZXN0KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZd OworKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsKKysJdW5zaWduZWQgY2hhciBrZXlbMTZdID0g eyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNn07CisrCXVuc2lnbmVkIGNo YXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsKKysJRVZQX0NJUEhFUl9DVFggY3R4 OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgo JmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJZ290 byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOworKwlpZiAo RVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxM LCAwKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1w LCAxNik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQorKwkJZ290byBlcnI7 CisrCXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysJ cmV0dXJuIHJldDsKKysJfQorKworK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKKysJ eworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKKysJdW5zaWduZWQg Y2hhciBjaXRtcFs4XTsKKysgICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2 LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LAorKwkJICAgICAgICAgICAgICAxOSwy MCwyMSwyMiwyMywyNH07CisrICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScs ICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9OworKwlFVlBfQ0lQSEVSX0NUWCBj dHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJ Z290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7CisrCWlm IChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBO VUxMLCAwKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNp dG1wLCA4KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKKysJCWdvdG8gZXJy OworKwlyZXQgPSAxOworKwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Cisr CXJldHVybiByZXQ7CisrCX0KKysKKysvKgorKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2ln biwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50IEZJUFNfZHNhX3Rl c3QoaW50IGJhZCkKKysgICAgeworKyAgICBEU0EgKmRzYSA9IE5VTEw7CisrICAgIEVWUF9QS0VZ IHBrOworKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1 bnNpZ25lZCBjaGFyIGJ1Zls2MF07CisrICAgIHVuc2lnbmVkIGludCBzbGVuOworKyAgICBpbnQg ciA9IDA7CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7 CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGRzYSA9IERTQV9uZXcoKTsKKysg ICAgaWYgKCFkc2EpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0 ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQorKwlnb3RvIGVuZDsKKysg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoYmFk KQorKwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysKKysgICAgcGsudHlwZSA9 IEVWUF9QS0VZX0RTQTsKKysgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCisrICAgIGlmICghRVZQ X1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAg IGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQorKwln b3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGsp KQorKwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQ X2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUo Jm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgciA9IEVW UF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyAgICBlbmQ6CisrICAgIEVW UF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChkc2EpCisrICAJICBEU0FfZnJlZShk c2EpOworKyAgICBpZiAociAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAg IH0KKysKKysvKgorKyAqIFJTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0 IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKKysg ICAgeworKyAgICBSU0EgKmtleTsKKysgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0g ImV0YW9ucmlzaGRsYyI7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisrICAgIHVuc2ln bmVkIGludCBzbGVuOworKyAgICBCSUdOVU0gKmJuOworKyAgICBFVlBfTURfQ1RYIG1jdHg7Cisr ICAgIEVWUF9QS0VZIHBrOworKyAgICBpbnQgciA9IDA7CisrCisrICAgIEVSUl9jbGVhcl9lcnJv cigpOworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBrZXkgPSBSU0FfbmV3KCk7 CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysJcmV0dXJuIDA7 CisrICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7CisrICAgIGlmICghUlNBX2dlbmVyYXRlX2tl eV9leChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJldHVybiAwOworKyAgICBCTl9mcmVlKGJuKTsK KysgICAgaWYgKGJhZCkKKysJICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7CisrCisrICAgIHBr LnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrICAgIHBrLnBrZXkucnNhID0ga2V5OworKworKyAgICBp ZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdvdG8gZW5k OworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlu cHV0X3B0ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZt Y3R4LCBidWYsICZzbGVuLCAmcGspKQorKwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVy aWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBp ZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRl eHQpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBi dWYsIHNsZW4sICZwayk7CisrICAgIGVuZDoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4 KTsKKysgICAgaWYgKGtleSkKKysgIAkgICAgUlNBX2ZyZWUoa2V5KTsKKysgICAgaWYgKHIgIT0g MSkKKysJcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hBMTogZ2Vu ZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysg ICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGExX3Rl c3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RI XSA9CisrICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUs IDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4 ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFv bnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Cisr CisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVv ZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBp ZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAg ICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCisrICAgIHsKKysg ICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KKysJezB4ZjUs IDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhj OSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKKysJIDB4NiwgMHhlYywgMHg4ZSwgMHgx MSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwg MHg0ZiwgMHg0NywgMHg1N307CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNo ZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKwor KyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yo c3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBp ZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAg ICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCisrICAgIHsKKysg ICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KKysJezB4OTks IDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4 NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4Y2EsCisrCSAweDE2LCAweDFmLCAweDNkLCAw eGY0LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3 LCAweDBiLCAweDk0LCAweDRhLAorKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgw NiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwg MHgyMiwKKysJIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUs IDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OworKyAgICB1 bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFy IG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7Cisr ICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hh NTEyKCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9m KG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysv KiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMg aW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5 W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4 dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweDcz LCAweGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAw eGVhLCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAorKwkgMHhiMiwgMHhmYiwgMHhlYywg MHhjNn07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAg IHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBp ZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0 LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhNQUMt U0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0 byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBG SVBTX2htYWNfc2hhMjI0X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10g PSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7 CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweDc1LCAw eDU4LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJl LCAweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAorKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhi NiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07CisrCisr ICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGlu dCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQ X3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikp IHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAg cmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEyNTY6IGdl bmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisr ICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19z aGEyNTZfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJp c2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5z aWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4ZTksIDB4MTcsIDB4YzEs IDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4 ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCisrCSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAw eGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0 LCAweGY0fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysg ICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAg IGlmICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0x LG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxl bikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBI TUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBp bnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtl eVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRl eHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhi MiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2Mywg MHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwKKysJIDB4ZTIsIDB4ZGYsIDB4Zjgs IDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4 YjAsIDB4MDcsIDB4MzksIDB4MDgsCisrCSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAw eGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4 LCAweDFjfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysg ICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAg IGlmICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0x LG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxl bikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBI TUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBp bnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtl eVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRl eHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhj ZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwg MHhmMywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwKKysJIDB4ZjcsIDB4ZDEsIDB4NTEs IDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4 N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCisrCSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAw eDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAweGVi LCAweDljLAorKwkgMHg0NywgMHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhl ZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307CisrCisr ICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGlu dCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQ X3NoYTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikp IHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAg cmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrCisrLyogREg6IGdlbmVyYXRl IHNoYXJlZCBwYXJhbWV0ZXJzCisrKi8KKytzdGF0aWMgaW50IGRoX3Rlc3QoKQorKyAgICB7Cisr ICAgIERIICpkaDsKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGRoID0gRklQU19kaF9u ZXcoKTsKKysgICAgaWYgKCFkaCkKKysJcmV0dXJuIDA7CisrICAgIGlmICghREhfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCisrCXJldHVybiAwOworKyAgICBGSVBT X2RoX2ZyZWUoZGgpOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFplcm9pemUKKysq LworK3N0YXRpYyBpbnQgWmVyb2l6ZSgpCisrICAgIHsKKysgICAgUlNBICprZXk7CisrICAgIEJJ R05VTSAqYm47CisrICAgIHVuc2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKKysJeyAweDQ4LCAw eDUwLCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdm LCAweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07CisrICAgIGludCBpLCBuOworKworKyAg ICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKKysgICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFr ZXkgfHwgIWJuKQorKwlyZXR1cm4gMDsKKysgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysg ICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0dXJu IDA7CisrICAgIEJOX2ZyZWUoYm4pOworKyAgICAKKysgICAgbiA9IEJOX251bV9ieXRlcyhrZXkt PmQpOworKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIs IG4pOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOworKyAg ICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwt MSwwKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOworKyAg ICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrCisrICAgIHByaW50ZigiXHRjaGFyIGJ1 ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKKysgICAgZm9yKGkgPSAwOyBp IDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOworKyAg ICAgICAgcHJpbnRmKCJcbiIpOworKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vy a2V5KTsKKysgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzog XG5cdFx0Iik7CisrICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmlu dGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysKKysgICAg cmV0dXJuIDE7CisrICAgIH0KKysKKytzdGF0aWMgaW50IEVycm9yOworK2NvbnN0IGNoYXIgKiBG YWlsKGNvbnN0IGNoYXIgKm1zZykKKysgICAgeworKyAgICBkb19wcmludF9lcnJvcnMoKTsKKysg ICAgRXJyb3IrKzsKKysgICAgcmV0dXJuIG1zZzsgCisrICAgIH0KKysKKytpbnQgbWFpbihpbnQg YXJnYyxjaGFyICoqYXJndikKKysgICAgeworKworKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5 Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKKysgICAgaW50IGJhZF9yc2EgPSAw LCBiYWRfZHNhID0gMDsKKysgICAgaW50IGRvX3JuZ19zdGljayA9IDA7CisrICAgIGludCBub19l eGl0ID0gMDsKKysKKysgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5c biIpOworKworKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkg Ki8KKysgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKKysKKysgICAgaWYgKGFyZ3Zb MV0pIHsKKysgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KKysgICAgICAgIGlmICgh c3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMo KTsKKysgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBj b3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAiZGVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7CisrICAgICAgICAg ICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQg S0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikp IHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7CisrICAgICAgICAgICAgcHJpbnRm KCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVw dGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJz YSIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYSgpOworKyAgICAgICAgICAgIHBy aW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNv cnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0s ICJyc2FrZXkiKSkgeworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKwkgICAg YmFkX3JzYSA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKKysJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdl biA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2Vu Li4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5Iikp IHsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJl IHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJICAgIGJhZF9kc2EgPSAx OworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgImRzYWtleWdlbiIpKSB7CisrCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOworKwkg ICAgbm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24g YW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Cisr ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgeworKyAgICAgICAg ICAgIEZJUFNfY29ycnVwdF9zaGExKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNo IHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAicm5nIikpIHsKKysJICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKKysJfSBlbHNlIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7CisrCSAgICBkb19ybmdfc3RpY2sgPSAxOworKwkg ICAgbm9fZXhpdCA9IDE7CisrCSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGlu dW91cyB0ZXN0Li4uXG4iKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcHJpbnRm KCJCYWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2WzFdKTsKKysgICAgICAgICAgICBleGl0KDEp OworKyAgICAgICAgfQorKwlpZiAoIW5vX2V4aXQpIHsKKysgICAgICAgIAlpZiAoIUZJUFNfbW9k ZV9zZXQoMSkpIHsKKysgCQkgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICAJICAgIHBy aW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7CisrCQkgICAgZXhpdCgxKTsKKysJ CX0KKysgICAgICAgIAlwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsK KysgICAgICAgIAlleGl0KDApOworKwl9CisrICAgIH0KKysKKysgICAgLyogTm9uLUFwcHJvdmVk IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiMS4gTm9uLUFw cHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBwcmludGYo Ilx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAgIHByaW50ZiggZGhfdGVz dCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyog UG93ZXItdXAgc2VsZiB0ZXN0CisrICAgICovCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKKysgICAgaWYg KCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKyAgICAgICAg cHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBwcmludGYo InN1Y2Nlc3NmdWxcbiIpOworKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQorKyAgICAg ICAgICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChkb19jb3JydXB0X3Jz YV9rZXlnZW4pCisrICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKKysgICAg aWYgKGRvX3JuZ19zdGljaykKKysgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygpOworKworKyAg ICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50ZigiMy4g QUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfYWVzX3Rl c3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8q IFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisr ICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRp b24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogREVTLUNCQyBlbmNyeXB0 aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRp b24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3Vj Y2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBEU0Ega2V5IGdl bmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCisrICAgICovCisrICAgIHByaW50Zigi Ni4gRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOworKyAg ICBwcmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtMSBoYXNoCisrICAgICovCisrICAgIHBy aW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgp ID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hB LTI1NiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOwor KyAgICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwo IkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS01MTIgaGFzaAorKyAgICAqLworKyAgICBw cmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAv KiBITUFDLVNIQS0xIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBo YXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3Nm dWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjI0IGhh c2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKKysg ICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCisrICAgICov CisrICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7CisrICAgIHByaW50Zigg RklQU19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQh XG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0zODQgaGFzaAorKyAgICAqLworKyAgICBwcmlu dGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19z aGEzODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysK KysgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3aC4gSE1B Qy1TSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3Qo KSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIE5v bi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAqLworKyAgICBwcmludGYo IjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysg ICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBwcmlu dGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisrCSAgICA6IEZhaWwo ImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7CisrCisrICAgIC8qIFplcm9pemF0aW9uCisrICAg ICovCisrICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsKKysgICAgcHJpbnRmKCBa ZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisrCSAgICA6IEZhaWwoIlx0 ZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysKKysgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBj b21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsKKysgICAgcmV0dXJuIEVycm9yID8g MSA6IDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9maXBzL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMvTWFrZWZpbGUK Ky0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzCTIwMTItMDQtMjAg MDk6MDc6MDYuMjcyNzg1ODcwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ZpcHMv TWFrZWZpbGUJMjAxMi0wNC0yMCAwOTowNzowNi4yNzI3ODU4NzAgKzAyMDAKK0BAIC0wLDAgKzEs MzQwIEBACisrIworKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9NYWtlZmlsZQorKyMKKysKKytESVI9 CWZpcHMKKytUT1A9CS4uLy4uCisrQ0M9CWNjCisrSU5DTFVERVM9CisrQ0ZMQUc9LWcKKytNQUtF RklMRT0JTWFrZWZpbGUKKytBUj0JCWFyIHIKKysKKytDRkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZM QUcpCisrCisrR0VORVJBTD1NYWtlZmlsZQorK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19y YW5kdGVzdC5jCisrQVBQUz0KKysKKytQUk9HUkFNPSBmaXBzX3N0YW5kYWxvbmVfaG1hYworK0VY RT0gJChQUk9HUkFNKSQoRVhFX0VYVCkKKysKKytMSUI9JChUT1ApL2xpYmNyeXB0by5hCisrTElC U1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBmaXBzX2htYWNfc2Vs ZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMg Zmlwc19zaGFfc2VsZnRlc3QuYyBmaXBzLmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5k LmMgXAorKyAgICBmaXBzX3JzYV94OTMxZy5jIGZpcHNfcG9zdC5jIGZpcHNfZHJiZ19jdHIuYyBm aXBzX2RyYmdfaGFzaC5jIGZpcHNfZHJiZ19obWFjLmMgXAorKyAgICBmaXBzX2RyYmdfbGliLmMg Zmlwc19kcmJnX3JhbmQuYyBmaXBzX2RyYmdfc2VsZnRlc3QuYyBmaXBzX3JhbmRfbGliLmMgXAor KyAgICBmaXBzX2NtYWNfc2VsZnRlc3QuYyBmaXBzX2VuYy5jIGZpcHNfbWQuYworKworK0xJQk9C Sj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0 ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZp cHNfc2hhX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNfcmFuZC5v IFwKKysgICAgZmlwc19yc2FfeDkzMWcubyBmaXBzX3Bvc3QubyBmaXBzX2RyYmdfY3RyLm8gZmlw c19kcmJnX2hhc2gubyBmaXBzX2RyYmdfaG1hYy5vIFwKKysgICAgZmlwc19kcmJnX2xpYi5vIGZp cHNfZHJiZ19yYW5kLm8gZmlwc19kcmJnX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX2xpYi5vIFwKKysg ICAgZmlwc19jbWFjX3NlbGZ0ZXN0Lm8gZmlwc19lbmMubyBmaXBzX21kLm8KKysKKytMSUJDUllQ VE89LUwuLiAtbGNyeXB0bworKworK1NSQz0gJChMSUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9obWFj LmMKKysKKytFWEhFQURFUj0gZmlwcy5oIGZpcHNfcmFuZC5oCisrSEVBREVSPQkkKEVYSEVBREVS KQorKworK0FMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCisrCisrdG9wOgorKwko Y2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCisrCisr YWxsOglsaWIgZXhlCisrCisrbGliOgkkKExJQk9CSikKKysJJChBUikgJChMSUIpICQoTElCT0JK KQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KKysJQHRvdWNoIGxpYgor KworK2V4ZToJJChFWEUpCisrCisrZmlsZXM6CisrCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMu cGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCisrCisrbGlua3M6CisrCUAkKFBFUkwpICQoVE9Q KS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKKysJQCQo UEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQorKwlAJChQRVJM KSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCisrCisraW5zdGFsbDoK KysJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmls ZS4uLgorKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3Qg OyBcCisrCWRvICBcCisrCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2lu Y2x1ZGUvb3BlbnNzbC8kJGk7IFwKKysJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNU QUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKKysJZG9uZTsKKysKKyt0YWdzOgorKwlj dGFncyAkKFNSQykKKysKKyt0ZXN0czoKKysKKytsaW50OgorKwlsaW50IC1ETElOVCAkKElOQ0xV REVTKSAkKFNSQyk+Zmx1ZmYKKysKKytkZXBlbmQ6CisrCUBbIC1uICIkKE1BS0VERVBFTkQpIiBd ICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgorKwkkKE1BS0VERVBFTkQpIC0t ICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCisr CisrZGNsZWFuOgorKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElO RS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3CisrCW12IC1m IE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQorKworK2NsZWFuOgorKwlybSAtZiAqLm8gKi5vYmog bGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgorKworKyQoRVhFKTog JChQUk9HUkFNKS5vCisrCUZJUFNfU0hBX0FTTT0iIjsgZm9yIGkgaW4gJChTSEExX0FTTV9PQkop IHNoYTI1Ni5vOyBkbyBGSVBTX1NIQV9BU009IiQkRklQU19TSEFfQVNNIC4uL3NoYS8kJGkiIDsg ZG9uZTsgXAorKwkkKENDKSAtbyAkQCAkKENGTEFHUykgJChQUk9HUkFNKS5vICQkRklQU19TSEFf QVNNCisrCisrIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRz IG9uIGl0LgorKworK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytm aXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvaG1hYy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwcy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwcy5jIGZpcHNfbG9jbC5oCisrZmlwc19hZXNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2Zp cHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfYWVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Flc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfYWVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19hZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2Flc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2Flc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfYWVzX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfYWVzX3NlbGZ0ZXN0 LmMKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwcy5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVj dHMuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o CisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgg Zmlwc19kZXNfc2VsZnRlc3QuYworK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfY3RyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2Ry YmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5o CisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19kcmJn X2N0ci5vOiBmaXBzX2RyYmdfY3RyLmMgZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX2hhc2gu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kcmJn X2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19oYXNoLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMu aAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytm aXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2Zp cHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19k cmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zYWZlc3RhY2suaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggZmlwc19kcmJnX2hhc2guYworK2ZpcHNfZHJiZ19oYXNoLm86IGZpcHNfcmFuZF9sY2wuaAor K2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19obWFj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l dnAuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytm aXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBz X2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19obWFjLmMKKytmaXBzX2RyYmdfaG1hYy5vOiBm aXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h ZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisr Zmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX2xpYi5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ht YWMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNr cy5oCisrZmlwc19kcmJnX2xpYi5vOiBmaXBzX2RyYmdfbGliLmMgZmlwc19sb2NsLmggZmlwc19y YW5kX2xjbC5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlw c19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisr Zmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNf ZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JhbmQuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisr Zmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19k cmJnX3JhbmQuYworK2ZpcHNfZHJiZ19yYW5kLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAor K2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgK KytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2Zp cHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNf ZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBz X2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3Nl bGZ0ZXN0LmMKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogZmlwc19kcmJnX3NlbGZ0ZXN0LmggZmlw c19sb2NsLmggZmlwc19yYW5kX2xjbC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2Rz YV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX2RzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2 cC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RzYV9zZWxmdGVzdC5jCisrZmlwc19kc2Ffc2VsZnRl c3QubzogZmlwc19sb2NsLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2htYWNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19obWFjX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19obWFjX3NlbGZ0ZXN0LmMKKytmaXBzX3Bvc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3Bvc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNf cG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzX3JhbmQuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2Zp cHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcG9z dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBz X3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmggZmlw c19wb3N0LmMKKytmaXBzX3JhbmQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hZXMuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAor K2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv aG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2Zp cHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaAorK2ZpcHNfcmFuZC5vOiBmaXBzX2xvY2wuaCBmaXBzX3JhbmQuYworK2ZpcHNfcmFuZF9s aWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAorK2ZpcHNfcmFu ZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNf cmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JhbmRfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfcmFuZF9s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yYW5kX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaAorK2ZpcHNfcmFuZF9saWIubzogZmlwc19yYW5kX2xpYi5jCisrZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2Zp cHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19y YW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5k X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JhbmRf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcmFu ZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcmFuZF9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2xvY2wuaAorK2Zp cHNfcmFuZF9zZWxmdGVzdC5vOiBmaXBzX3JhbmRfc2VsZnRlc3QuYworK2ZpcHNfcnNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JzYS5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNr LmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3Mu aCBmaXBzX3JzYV9zZWxmdGVzdC5jCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JzYV94OTMx Zy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19y c2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcnNhX3g5 MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yc2EuaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o CisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlw c19yc2FfeDkzMWcuYworK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19zaGFfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19zaGFfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19zaGFfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19zaGFfc2VsZnRlc3Qu YworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL2htYWMvaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL2ht YWMvaG1hYy5jLmZpcHMJMjAxMS0wNi0xMiAxNzowNzoyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vaG1hYy9obWFjLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzM3 ODU4OTEgKzAyMDAKK0BAIC04MSwxMSArODEsNiBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RY ICpjdHgsIGNvbnN0IHZvCisgCQkJRVZQZXJyKEVWUF9GX0hNQUNfSU5JVF9FWCwgRVZQX1JfRElT QUJMRURfRk9SX0ZJUFMpOworIAkJCXJldHVybiAwOworIAkJCX0KKy0JCS8qIE90aGVyIGFsZ29y aXRobSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2luaXQsCistCQkgKiB2aWEg RklQU19obWFjX2luaXRfZXgoKS4KKy0JCSAqLworLQkJaWYgKCFpbXBsICYmICFjdHgtPmlfY3R4 LmVuZ2luZSkKKy0JCQlyZXR1cm4gRklQU19obWFjX2luaXRfZXgoY3R4LCBrZXksIGxlbiwgbWQs IE5VTEwpOworIAkJfQorICNlbmRpZgorIAorQEAgLTk5LDYgKzk0LDEzIEBAIGludCBITUFDX0lu aXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KKyAKKyAJaWYgKGtleSAhPSBOVUxMKQorIAkJ eworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSAmJiAhKG1kLT5mbGFn cyAmIEVWUF9NRF9GTEFHX0ZJUFMpCisrCQkmJiAoIShjdHgtPm1kX2N0eC5mbGFncyAmIEVWUF9N RF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+aV9jdHguZmxhZ3MgJiBF VlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkgfHwgIShjdHgtPm9fY3R4LmZsYWdz ICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCisrCQkJZ290byBlcnI7CisrI2Vu ZGlmCisgCQlyZXNldD0xOworIAkJaj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7CisgCQlPUEVOU1NM X2Fzc2VydChqIDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7CitAQCAtMTU1LDEwICsxNTcsNiBA QCBpbnQgSE1BQ19Jbml0KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQKKyAKKyBpbnQgSE1BQ19V cGRhdGUoSE1BQ19DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxl bikKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpICYmICFjdHgt PmlfY3R4LmVuZ2luZSkKKy0JCXJldHVybiBGSVBTX2htYWNfdXBkYXRlKGN0eCwgZGF0YSwgbGVu KTsKKy0jZW5kaWYKKyAJcmV0dXJuIEVWUF9EaWdlc3RVcGRhdGUoJmN0eC0+bWRfY3R4LGRhdGEs bGVuKTsKKyAJfQorIAorQEAgLTE2NiwxMCArMTY0LDYgQEAgaW50IEhNQUNfRmluYWwoSE1BQ19D VFggKmN0eCwgdW5zaWduZWQgYworIAl7CisgCXVuc2lnbmVkIGludCBpOworIAl1bnNpZ25lZCBj aGFyIGJ1ZltFVlBfTUFYX01EX1NJWkVdOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJ UFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCXJldHVybiBGSVBTX2htYWNfZmlu YWwoY3R4LCBtZCwgbGVuKTsKKy0jZW5kaWYKKyAKKyAJaWYgKCFFVlBfRGlnZXN0RmluYWxfZXgo JmN0eC0+bWRfY3R4LGJ1ZiwmaSkpCisgCQlnb3RvIGVycjsKK0BAIC0yMDksMTMgKzIwMyw2IEBA IGludCBITUFDX0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0MKKyAKKyB2b2lkIEhNQUNf Q1RYX2NsZWFudXAoSE1BQ19DVFggKmN0eCkKKyAJeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0J aWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0JCXsKKy0JCUZJUFNfaG1h Y19jdHhfY2xlYW51cChjdHgpOworLQkJcmV0dXJuOworLQkJfQorLSNlbmRpZgorIAlFVlBfTURf Q1RYX2NsZWFudXAoJmN0eC0+aV9jdHgpOworIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+b19j dHgpOworIAlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+bWRfY3R4KTsKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9tZDIvbWQyX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9tZDIvbWQyX2Rnc3Qu Yy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMWEvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjc0Nzg1OTEy ICswMjAwCitAQCAtNjIsNiArNjIsMTEgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgCisgY29uc3QgY2hhciBNRDJfdmVy c2lvbltdPSJNRDIiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC0xMTYsNyArMTIxLDcg QEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCkKKyAJCXJldHVybigibWQyKGludCkiKTsK KyAJfQorIAorLWZpcHNfbWRfaW5pdChNRDIpCisrbm9uZmlwc19tZF9pbml0KE1EMikKKyAJewor IAljLT5udW09MDsKKyAJbWVtc2V0KGMtPnN0YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9tZDQv bWQ0X2Rnc3QuYy5maXBzCTIwMTEtMDYtMDEgMTU6Mzk6NDMuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMWEvY3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYu Mjc0Nzg1OTEyICswMjAwCitAQCAtNzEsNyArNzEsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9u W109Ik1ENCIgT1BFTlNTTF9WCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykw eDk4YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3 NkwKKyAKKy1maXBzX21kX2luaXQoTUQ0KQorK25vbmZpcHNfbWRfaW5pdChNRDQpCisgCXsKKyAJ bWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4xYS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9j cnlwdG8vbWQ1L21kNV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vbWQ1L21kNV9k Z3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3NDc4 NTkxMiArMDIwMAorQEAgLTcxLDcgKzcxLDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJN RDUiIE9QRU5TU0xfVgorICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJh ZGNmZUwKKyAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisg CistZmlwc19tZF9pbml0KE1ENSkKKytub25maXBzX21kX2luaXQoTUQ1KQorIAl7CisgCW1lbXNl dCAoYywwLHNpemVvZigqYykpOworIAljLT5BPUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMWEvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vbWRjMi9tZGMyZGdz dC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjc1Nzg1 OTM0ICswMjAwCitAQCAtNzYsNyArNzYsNyBAQAorIAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFy KSgoKGwpPj4yNEwpJjB4ZmYpKQorIAorIHN0YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAq YywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOworLWZpcHNfbWRfaW5pdChN REMyKQorK25vbmZpcHNfbWRfaW5pdChNREMyKQorIAl7CisgCWMtPm51bT0wOworIAljLT5wYWRf dHlwZT0xOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL29faW5pdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMWEvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL29f aW5pdC5jLmZpcHMJMjAxMS0wNS0yNiAxNjoxOToxOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4xYS9jcnlwdG8vb19pbml0LmMJMjAxMi0wNC0yMCAwOTowNzowNi4yNzU3ODU5MzQg KzAyMDAKK0BAIC01NSwyOCArNTUsNjMgQEAKKyAjaW5jbHVkZSA8ZV9vcy5oPgorICNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgorKworKyNkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2Zp cHNfZW5hYmxlZCIKKysKKytzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQorKwl7Cisr CWNoYXIgYnVmWzJdID0gIjAiOworKwlpbnQgZmQ7CisrCQorKwlpZiAoZ2V0ZW52KCJPUEVOU1NM X0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpCisrCQl7CisrCQlidWZbMF0gPSAnMSc7CisrCQl9 CisrCWVsc2UgaWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05MWSkp ID49IDApCisrCQl7CisrCQl3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwICYm IGVycm5vID09IEVJTlRSKTsKKysJCWNsb3NlKGZkKTsKKysJCX0KKysJLyogRmFpbHVyZSByZWFk aW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKKysJICogc3dpdGNo aW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGluZ3MKKysJICog b3RoZXJ3aXNlLiAKKysJICovCisrCQorKwlpZiAoYnVmWzBdID09ICcxJykKKysJCXsKKysJCUZJ UFNfbW9kZV9zZXQoMSk7CisrCQl9CisrCX0KKyAjZW5kaWYKKyAKKyAvKiBQZXJmb3JtIGFueSBl c3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgorICAqIEN1cnJlbnRs eSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKKyAgKi8KKyAKKy12b2lkIE9QRU5TU0xfaW5pdCh2 b2lkKQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKyAJeworIAlzdGF0aWMgaW50 IGRvbmUgPSAwOworIAlpZiAoZG9uZSkKKyAJCXJldHVybjsKKyAJZG9uZSA9IDE7CisgI2lmZGVm IE9QRU5TU0xfRklQUworLQlGSVBTX3NldF9sb2NraW5nX2NhbGxiYWNrcyhDUllQVE9fbG9jaywg Q1JZUFRPX2FkZF9sb2NrKTsKKy0JRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRfZXJy b3IsIEVSUl9hZGRfZXJyb3JfdmRhdGEpOworLQlGSVBTX3NldF9tYWxsb2NfY2FsbGJhY2tzKENS WVBUT19tYWxsb2MsIENSWVBUT19mcmVlKTsKKyAJUkFORF9pbml0X2ZpcHMoKTsKKysJaW5pdF9m aXBzX21vZGUoKTsKKyAjZW5kaWYKKyAjaWYgMAorIAlmcHJpbnRmKHN0ZGVyciwgIkNhbGxlZCBP UEVOU1NMX2luaXRcbiIpOworICNlbmRpZgorIAl9CisgCisrdm9pZCBPUEVOU1NMX2luaXQodm9p ZCkKKysJeworKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKwl9CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0 by9vcGVuc3NsY29uZi5oLmluCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL29wZW5zc2xjb25m LmguaW4uZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIwMTItMDQtMjAgMDk6MDc6MDYuMjc2 Nzg1OTU2ICswMjAwCitAQCAtMSw1ICsxLDIwIEBACisgLyogY3J5cHRvL29wZW5zc2xjb25mLmgu aW4gKi8KKyAKKysjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECisrCisrLyogSW5jbHVk ZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFi bGUgYSBmZWF0dXJlCisrICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgor KyAqCisrICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlz LCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCisrICogaW5zdGVhZDsgd2Ugd2FudCB0byBt YWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3Jp dGhtcy5dCisrICovCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjZGVmaW5lIE9QRU5TU0xf RklQUworKyNlbmRpZgorKworKyNlbmRpZgorKworIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICov CisgI3VuZGVmIEkzODZfT05MWQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3Br Y3MxMi9wMTJfY3J0LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcGtjczEyL3AxMl9jcnQu YworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAwOS0w My0wOSAxNDowODowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8v cGtjczEyL3AxMl9jcnQuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3Nzc4NTk3OCArMDIwMAorQEAg LTU5LDYgKzU5LDEwIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGli LmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAKKyBzdGF0aWMgaW50 IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJf U0FGRUJBRyAqYmFnKTsKK0BAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVhdGUo Y2hhciAqcGFzcywgY2hhciAqCisgCisgCS8qIFNldCBkZWZhdWx0cyAqLworIAlpZiAoIW5pZF9j ZXJ0KQorKwkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJ CQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOworKwkJ ZWxzZQorKyNlbmRpZgorIAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzJf Q0JDOworKwkJfQorIAlpZiAoIW5pZF9rZXkpCisgCQluaWRfa2V5ID0gTklEX3BiZV9XaXRoU0hB MUFuZDNfS2V5X1RyaXBsZURFU19DQkM7CisgCWlmICghaXRlcikKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9y YW5kL21kX3JhbmQuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yYW5kL21kX3JhbmQuYy5m aXBzCTIwMTEtMDEtMjYgMTU6NTU6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjc3Nzg1OTc4ICsw MjAwCitAQCAtMzg5LDcgKzM4OSwxMCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVu c2lnbmVkIGNoCisgCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7CisgCWNyeXB0 b19sb2NrX3JhbmQgPSAxOworIAorLQlpZiAoIWluaXRpYWxpemVkKQorKwkvKiBhbHdheXMgcG9s bCBmb3IgZXh0ZXJuYWwgZW50cm9weSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAor KwkgKiBleHBhbnNpb24KKysJICovCisrCWlmICghaW5pdGlhbGl6ZWQgfHwgRklQU19tb2R1bGVf bW9kZSgpKSAKKyAJCXsKKyAJCVJBTkRfcG9sbCgpOworIAkJaW5pdGlhbGl6ZWQgPSAxOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL3JhbmQvcmFuZC5oCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JhbmQvcmFu ZC5oLmZpcHMJMjAxMi0wNC0yMCAwOTowNzowNS42ODE3NzMxOTggKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vcmFuZC9yYW5kLmgJMjAxMi0wNC0yMCAwOTowNzowNi4yNzg3ODU5OTkg KzAyMDAKK0BAIC0xMzMsMTUgKzEzMywzMyBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2 b2lkKTsKKyAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAorIC8q IEZ1bmN0aW9uIGNvZGVzLiAqLworKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01F VEhPRAkJCSAxMDgKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMworKyNkZWZpbmUg UkFORF9GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5E X1NFVF9EVAkJCQkgMTA2CisrI2RlZmluZSBSQU5EX0ZfRklQU19YOTMxX1NFVF9EVAkJCQkgMTA2 CisrI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAorKyNkZWZpbmUgUkFORF9GX0ZJ UFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01P REUJCQkgMTA1CisgI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCist I2RlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9GX1JB TkRfSU5JVF9GSVBTCQkJCSAxMDkKKyAjZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJ CSAxMDAKKyAKKyAvKiBSZWFzb24gY29kZXMuICovCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5J VElBTElTSU5HX0RSQkcJCQkgMTAyCistI2RlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElO R19EUkJHCQkJIDEwMworLSNkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQJ CSAxMDEKKysjZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRwkJCSAxMTIKKysj ZGVmaW5lIFJBTkRfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcJCQkgMTEzCisrI2RlZmluZSBS QU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUKKysjZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVT VF9NT0RFCQkJCSAxMDYKKysjZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VU CQkgMTExCisrI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3CisrI2RlZmluZSBSQU5E X1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNICQkJIDEwMQorKyNkZWZpbmUgUkFORF9SX1BSTkdf RVJST1IJCQkJIDEwOAorKyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQorKyNkZWZp bmUgUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9SX1BSTkdf Tk9UX1JFU0VFREVECQkJIDEwMworICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkg MTAwCisrI2RlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAor KyNkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAorIAorICNpZmRlZiAgX19jcGx1c3Bs dXMKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3Ns LTEuMC4xYS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDExLTA2LTAxIDE1OjM5OjQ0 LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yaXBlbWQvcm1kX2Rn c3QuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3ODc4NTk5OSArMDIwMAorQEAgLTcwLDcgKzcwLDcg QEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIgorICAgICAgdm9pZCBy aXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3Qg bnVtKTsKKyAjICBlbmRpZgorIAorLWZpcHNfbWRfaW5pdChSSVBFTUQxNjApCisrbm9uZmlwc19t ZF9pbml0KFJJUEVNRDE2MCkKKyAJeworIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+ QT1SSVBFTUQxNjBfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX2Ny cHQuYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX2NycHQuYworLS0tIG9wZW5z c2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzCTIwMTEtMDYtMDIgMjA6MjI6NDIu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfY3JwdC5j CTIwMTItMDQtMjAgMDk6MDc6MDYuMjc5Nzg2MDIwICswMjAwCitAQCAtOTAsMTAgKzkwLDkgQEAg aW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0CisgCSAgICAgUlNBICpyc2Es IGludCBwYWRkaW5nKQorIAl7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLQlpZiAoRklQU19tb2Rl KCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCistCQkJJiYg IShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwlpZihGSVBTX21vZGUo KSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisgCQl7CistCQlS U0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhP RCk7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9O X05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisgCQlyZXR1cm4gLTE7CisgCQl9CisgI2VuZGlm CitAQCAtMTE4LDEwICsxMTcsOSBAQCBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGludCBmbGVuLCBj b25zdCB1CisgCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CisgI2lmZGVmIE9QRU5T U0xfRklQUworLQlpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZM QUdfRklQU19NRVRIT0QpCistCQkJJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpKQorKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05f RklQU19BTExPVykpCisgCQl7CistCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBS U0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKKysJCVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RF Q1JZUFQsIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOworIAkJcmV0 dXJuIC0xOworIAkJfQorICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3Jz YS9yc2FfZWF5LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9lYXkuYworLS0t IG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJMjAxMS0xMC0xOSAxNjo1 ODo1OS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9l YXkuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI3OTc4NjAyMCArMDIwMAorQEAgLTExNCw2ICsxMTQs MTAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorIAorICNpZm5kZWYgUlNBX05VTEwKKyAKK0BAIC0xMzgsNyArMTQyLDcgQEAgc3RhdGljIFJT QV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRoPXsKKyAJQk5fbW9kX2V4cF9tb250LCAvKiBYWFgg cHJvYmFibHkgd2Ugc2hvdWxkIG5vdCB1c2UgTW9udGdvbWVyeSBpZiAgZSA9PSAzICovCisgCVJT QV9lYXlfaW5pdCwKKyAJUlNBX2VheV9maW5pc2gsCistCTAsIC8qIGZsYWdzICovCisrCVJTQV9G TEFHX0ZJUFNfTUVUSE9ELCAvKiBmbGFncyAqLworIAlOVUxMLAorIAkwLCAvKiByc2Ffc2lnbiAq LworIAkwLCAvKiByc2FfdmVyaWZ5ICovCitAQCAtMTU4LDYgKzE2MiwyNCBAQCBzdGF0aWMgaW50 IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxM OworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQ U19tb2RlKCkpCisrCQl7CisrCQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7Cisr CQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNhLT5u KSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJTQWVy cihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwp OworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1f Yml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJT QWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJH RSk7CitAQCAtMzYxLDYgKzM4MywyNCBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNy eXB0KGludCBmCisgCUJJR05VTSAqdW5ibGluZCA9IE5VTEw7CisgCUJOX0JMSU5ESU5HICpibGlu ZGluZyA9IE5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkp CisrCQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJy KEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCisrCQlpZiAoIShyc2EtPmZsYWdzICYgUlNB X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkJJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVO U1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0Zf UlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJ cmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25l dygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJO X0NUWF9nZXQoY3R4KTsKK0BAIC01MDQsNiArNTQ0LDI0IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9w cml2YXRlX2RlY3J5cHQoaW50IGYKKyAJQklHTlVNICp1bmJsaW5kID0gTlVMTDsKKyAJQk5fQkxJ TkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChG SVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJewor KwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysKKysJCWlmICghKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKKysJCQkmJiAoQk5fbnVtX2JpdHMocnNh LT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQkJeworKwkJCVJT QWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NN QUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZigoY3R4 ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7 CisgCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKK0BAIC02MzksNiArNjk3LDI0IEBAIHN0YXRpYyBp bnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5V TEw7CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAo RklQU19tb2RlKCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsK KysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKCEocnNhLT5m bGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJCSYmIChCTl9udW1fYml0cyhyc2Et Pm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCQl7CisrCQkJUlNB ZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKEJOX251 bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQorIAkJeworIAkJ UlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xB UkdFKTsKK0BAIC04NDcsMTIgKzkyMywxMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4cChC SUdOVU0gKnIwLCBjCisgCWlmICghQk5fbW9kKHIwLHByMSxyc2EtPnAsY3R4KSkgZ290byBlcnI7 CisgCisgCS8qIElmIHAgPCBxIGl0IGlzIG9jY2FzaW9uYWxseSBwb3NzaWJsZSBmb3IgdGhlIGNv cnJlY3Rpb24gb2YKKy0gICAgICAgICAqIGFkZGluZyAncCcgaWYgcjAgaXMgbmVnYXRpdmUgYWJv dmUgdG8gbGVhdmUgdGhlIHJlc3VsdCBzdGlsbAorKwkgKiBhZGRpbmcgJ3AnIGlmIHIwIGlzIG5l Z2F0aXZlIGFib3ZlIHRvIGxlYXZlIHRoZSByZXN1bHQgc3RpbGwKKyAJICogbmVnYXRpdmUuIFRo aXMgY2FuIGJyZWFrIHRoZSBwcml2YXRlIGtleSBvcGVyYXRpb25zOiB0aGUgZm9sbG93aW5nCisg CSAqIHNlY29uZCBjb3JyZWN0aW9uIHNob3VsZCAqYWx3YXlzKiBjb3JyZWN0IHRoaXMgcmFyZSBv Y2N1cnJlbmNlLgorIAkgKiBUaGlzIHdpbGwgKm5ldmVyKiBoYXBwZW4gd2l0aCBPcGVuU1NMIGdl bmVyYXRlZCBrZXlzIGJlY2F1c2UKKy0gICAgICAgICAqIHRoZXkgZW5zdXJlIHAgPiBxIFtzdGV2 ZV0KKy0gICAgICAgICAqLworKwkgKiB0aGV5IGVuc3VyZSBwID4gcSBbc3RldmVdCisrCSAqLwor IAlpZiAoQk5faXNfbmVnYXRpdmUocjApKQorIAkJaWYgKCFCTl9hZGQocjAscjAscnNhLT5wKSkg Z290byBlcnI7CisgCWlmICghQk5fbXVsKHIxLHIwLHJzYS0+cSxjdHgpKSBnb3RvIGVycjsKK0BA IC04OTcsNiArOTczLDkgQEAgZXJyOgorIAorIHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJTQSAq cnNhKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7 CisrI2VuZGlmCisgCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hFX1BVQkxJQ3xSU0FfRkxBR19D QUNIRV9QUklWQVRFOworIAlyZXR1cm4oMSk7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFh L2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2Ff ZXJyLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMTEt MTAtMTAgMDE6MTM6NTAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L3JzYS9yc2FfZXJyLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yODA3ODYwNDEgKzAyMDAKK0BAIC0x MjEsNiArMTIxLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQor IHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX3B1YmxpY19lbmNyeXB0 In0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJfREVDT0RFIn0s Cisge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRVUF9CTElORElORyksCSJSU0Ffc2V0dXBfYmxpbmRp bmcifSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCksCSJSU0Ffc2V0 X2RlZmF1bHRfbWV0aG9kIn0sCisre0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVUSE9EKSwJIlJT QV9zZXRfbWV0aG9kIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwJIlJTQV9zaWduIn0s Cisge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwJIlJTQV9zaWdu X0FTTjFfT0NURVRfU1RSSU5HIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRlkpLAkiUlNB X3ZlcmlmeSJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfZ2VuLmMu ZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAxMS0wNi0wOSAxNToxODowNy4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9nZW4uYwkyMDEyLTA0 LTIwIDA5OjA3OjA2LjI4MTc4NjA2MiArMDIwMAorQEAgLTY5LDYgKzY5LDc4IEBACisgI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2lmZGVmIE9QRU5TU0xfRklQUworICNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKysKKytzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOworKwor K3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkKKysJeworKwlmaXBzX3JzYV9wYWly d2lzZV9mYWlsID0gMTsKKysJfQorKworK2ludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSkKKysJ eworKwljb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVjayBEYXRh IjsKKysJdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxMOworKwlpbnQg bGVuLCByZXQgPSAwOworKwlFVlBfUEtFWSAqcGs7CisrCisrCWlmICgocGs9RVZQX1BLRVlfbmV3 KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfc2V0MV9SU0EocGssIHJz YSk7CisrCisrCS8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2lnbmF0dXJlIHRlc3Qg Ki8KKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVM TCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKKysJCXx8 ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQ X3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCBOVUxMKQorKwkJfHwgIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJLyogTm93IHBl cmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3QgKi8KKysJY3Ri dWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysJaWYgKCFjdGJ1ZikKKysJCWdv dG8gZXJyOworKworKwlsZW4gPSBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0 YnMsIGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiA8PSAwKQorKwkJ Z290byBlcnI7CisrCS8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFpbnRleHQg Ki8KKysJaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1jbXAodGJzLCBjdGJ1 ZiwgbGVuKSkKKysJCWdvdG8gZXJyOworKwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXpl KHJzYSkpOworKworKwlpZiAoIXB0YnVmKQorKwkJZ290byBlcnI7CisrCWxlbiA9IFJTQV9wcml2 YXRlX2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwor KwlpZiAobGVuICE9IChzaXplb2YodGJzKSAtIDEpKQorKwkJZ290byBlcnI7CisrCWlmIChtZW1j bXAocHRidWYsIHRicywgbGVuKSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKworKwlp ZiAoIXB0YnVmKQorKwkJZ290byBlcnI7CisrCQorKwllcnI6CisrCWlmIChyZXQgPT0gMCkKKysJ CXsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNf Q0hFQ0tfUlNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrCQl9CisrCisrCWlmIChj dGJ1ZikKKysJCU9QRU5TU0xfZnJlZShjdGJ1Zik7CisrCWlmIChwdGJ1ZikKKysJCU9QRU5TU0xf ZnJlZShwdGJ1Zik7CisrCWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKworKwlyZXR1 cm4gcmV0OworKwl9CisgI2VuZGlmCisgCisgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4o UlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYik7CitAQCAt ODEsNyArMTUzLDcgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisg aW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFs dWUsIEJOX0dFTkNCICpjYikKKyAJeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNf bW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorKwlp ZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJ UFNfTUVUSE9EKQorIAkJCSYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9X KSkKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VYLCBSU0FfUl9OT05f RklQU19SU0FfTUVUSE9EKTsKK0BAIC05MCwxMCArMTYyLDYgQEAgaW50IFJTQV9nZW5lcmF0ZV9r ZXlfZXgoUlNBICpyc2EsIGludCBiaQorICNlbmRpZgorIAlpZihyc2EtPm1ldGgtPnJzYV9rZXln ZW4pCisgCQlyZXR1cm4gcnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKHJzYSwgYml0cywgZV92YWx1ZSwg Y2IpOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JaWYgKEZJUFNfbW9kZSgpKQorLQkJcmV0dXJu IEZJUFNfcnNhX2dlbmVyYXRlX2tleV9leChyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jZW5k aWYKKyAJcmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsK KyAJfQorIAorQEAgLTEwNSw2ICsxNzMsMjMgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXln ZW4oUlNBICpyc2EsCisgCWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOworIAlCTl9DVFggKmN0 eD1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kdWxlX21vZGUo KSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICAJeworKwkJICAg IEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOworKwkgICAgCXJldHVybiAwOworKwkgICAgCX0KKysKKysJCWlmIChiaXRzIDwgT1BF TlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJICAgIHsKKysJCSAgICBGSVBTZXJy KEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkJICAg IHJldHVybiAwOworKwkJICAgIH0KKysJCX0KKysjZW5kaWYKKysKKyAJY3R4PUJOX0NUWF9uZXco KTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CitA QCAtMjE2LDYgKzMwMSwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJz YSwKKyAJCXAgPSByc2EtPnA7CisgCWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+ cSxwLGN0eCkpIGdvdG8gZXJyOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNf bW9kdWxlX21vZGUoKSkKKysJCXsKKysJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQorKwkJ CUJOX2FkZF93b3JkKHJzYS0+biwgMSk7CisrCisrCQlpZighZmlwc19jaGVja19yc2EocnNhKSkK KysJCSAgICBnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJb2s9MTsKKyBlcnI6CisgCWlm IChvayA9PSAtMSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhLmguZmlw cyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYS5oCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL3JzYS9yc2EuaC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDYuMDAwNzgwMDM4ICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2EuaAkyMDEyLTA0LTIwIDA5OjA3OjA2LjI4 MTc4NjA2MiArMDIwMAorQEAgLTE2NCw2ICsxNjQsOCBAQCBzdHJ1Y3QgcnNhX3N0CisgIyBkZWZp bmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4NAorICNlbmRpZgorIAorKyNkZWZp bmUgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjaWZuZGVmIE9Q RU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUworICMgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxM X01PRFVMVVNfQklUUwkzMDcyCisgI2VuZGlmCitAQCAtMjkwLDYgKzI5MiwxMSBAQCBSU0EgKglS U0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCisgCisgLyogTmV3IHZlcnNpb24gKi8K KyBpbnQJUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZSwg Qk5fR0VOQ0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0g KnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNvbnN0IEJJR05V TSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBC SUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrCQkJY29u c3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlf ZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Cisg CisgaW50CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOworIAkvKiBuZXh0IDQgcmV0dXJuIC0x IG9uIGVycm9yICovCitAQCAtNDg3LDcgKzQ5NCw3IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmlu Z3Modm9pZCk7CisgI2RlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfTk9ORQkJCSAxMDcKKyAj ZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9PQUVQCQkgMTIxCisgI2RlZmluZSBS U0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTCQkJIDEyNQorLSNkZWZpbmUgUlNBX0ZfUlNB X1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxCQkgMTQ4CisrI2RlZmluZSBSU0FfRl9SU0FfUEFE RElOR19BRERfUEtDUzFfUFNTX01HRjEJCSAxNTgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5H X0FERF9QS0NTMV9UWVBFXzEJCSAxMDgKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9Q S0NTMV9UWVBFXzIJCSAxMDkKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9TU0xWMjMJ CQkgMTEwCitAQCAtNTAwLDIwICs1MDcsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2 b2lkKTsKKyAjZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEJCQkgMTI4CisgI2Rl ZmluZSBSU0FfRl9SU0FfUFJJTlQJCQkJCSAxMTUKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9G UAkJCQkgMTE2CistI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUCQkJIDE1MAorLSNk ZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNTEKKysjZGVmaW5lIFJTQV9GX1JT QV9QUklWQVRFX0RFQ1JZUFQJCQkgMTU3CisrI2RlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNS WVBUCQkJIDE0OAorICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcKKyAjZGVm aW5lIFJTQV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4CistI2RlZmluZSBSU0FfRl9SU0FfUFVC TElDX0RFQ1JZUFQJCQkgMTUyCisrI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQJCQkg MTQ5CisgI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQJCQkgMTUzCisgI2RlZmluZSBS U0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5CisgI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJ TkRJTkcJCQkgMTM2CisrI2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDE1 MAorKyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQorICNkZWZpbmUgUlNBX0Zf UlNBX1NJR04JCQkJCSAxMTcKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RS SU5HCQkgMTE4CisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKKyAjZGVmaW5lIFJT QV9GX1JTQV9WRVJJRllfQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMjAKKyAjZGVmaW5lIFJTQV9GX1JT QV9WRVJJRllfUEtDUzFfUFNTCQkJIDEyNgorLSNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NT MV9QU1NfTUdGMQkJCSAxNDkKKysjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTX01H RjEJCQkgMTUyCisgCisgLyogUmVhc29uIGNvZGVzLiAqLworICNkZWZpbmUgUlNBX1JfQUxHT1JJ VEhNX01JU01BVENICQkJIDEwMAorQEAgLTU0MiwyMSArNTUxLDIyIEBAIHZvaWQgRVJSX2xvYWRf UlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX01HRjFfTUQJCQkJIDE1 NgorICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HCQkJCSAxMzgKKyAjZGVmaW5lIFJTQV9S X0lOVkFMSURfUEFERElOR19NT0RFCQkJIDE0MQorLSNkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1Nf UEFSQU1FVEVSUwkJCSAxNDkKKysjZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1BBUkFNRVRFUlMJ CQkgMTU3CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1BTU19TQUxUTEVOCQkJIDE0NgorLSNkZWZp bmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSAkJCSAxNTAKKysjZGVmaW5lIFJTQV9SX0lOVkFM SURfU0FMVF9MRU5HVEgJCQkgMTU4CisgI2RlZmluZSBSU0FfUl9JTlZBTElEX1RSQUlMRVIJCQkJ IDEzOQorICNkZWZpbmUgUlNBX1JfSU5WQUxJRF9YOTMxX0RJR0VTVAkJCSAxNDIKKyAjZGVmaW5l IFJTQV9SX0lRTVBfTk9UX0lOVkVSU0VfT0ZfUQkJCSAxMjYKKyAjZGVmaW5lIFJTQV9SX0tFWV9T SVpFX1RPT19TTUFMTAkJCSAxMjAKKyAjZGVmaW5lIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRAkJ CSAxMzQKKyAjZGVmaW5lIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDUKKy0jZGVmaW5l IFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QJCQkgMTU3CisrI2RlZmluZSBSU0FfUl9OT05fRklQ U19SU0FfTUVUSE9ECQkJIDE0OQorKyNkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAx NDkKKyAjZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJCSAxNDAKKyAjZGVmaW5lIFJT QV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCisgI2RlZmluZSBSU0FfUl9OX0RP RVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKKyAjZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJS T1IJCQkgMTIxCistI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19N T0RFCSAxNTgKKysjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01P REUJIDE1MAorICNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNf S0VZVFlQRQkgMTQ4CisgI2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQK KyAjZGVmaW5lIFJTQV9SX1BfTk9UX1BSSU1FCQkJCSAxMjgKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9y c2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzCTIw MTEtMDYtMjAgMjE6NDE6MTMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5 cHRvL3JzYS9yc2FfbGliLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yODI3ODYwODMgKzAyMDAKK0BA IC04NCw2ICs4NCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKKyAKKyB2b2lkIFJTQV9zZXRfZGVm YXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKKyAJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBT X01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwg UlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybjsKKysJCX0KKysjZW5kaWYKKyAJZGVm YXVsdF9SU0FfbWV0aCA9IG1ldGg7CisgCX0KKyAKK0BAIC05MSwxOCArOTgsMTEgQEAgY29uc3Qg UlNBX01FVEhPRCAqUlNBX2dldF9kZWZhdWx0X21ldGhvZAorIAl7CisgCWlmIChkZWZhdWx0X1JT QV9tZXRoID09IE5VTEwpCisgCQl7CistI2lmZGVmIE9QRU5TU0xfRklQUworLQkJaWYgKEZJUFNf bW9kZSgpKQorLQkJCXJldHVybiBGSVBTX3JzYV9wa2NzMV9zc2xlYXkoKTsKKy0JCWVsc2UKKy0J CQlyZXR1cm4gUlNBX1BLQ1MxX1NTTGVheSgpOworLSNlbHNlCisgI2lmZGVmIFJTQV9OVUxMCisg CQlkZWZhdWx0X1JTQV9tZXRoPVJTQV9udWxsX21ldGhvZCgpOworICNlbHNlCisgCQlkZWZhdWx0 X1JTQV9tZXRoPVJTQV9QS0NTMV9TU0xlYXkoKTsKKyAjZW5kaWYKKy0jZW5kaWYKKyAJCX0KKyAK KyAJcmV0dXJuIGRlZmF1bHRfUlNBX21ldGg7CitAQCAtMTE4LDYgKzExOCwxMyBAQCBpbnQgUlNB X3NldF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9NCisgCS8qIE5COiBUaGUgY2FsbGVyIGlz IHNwZWNpZmljYWxseSBzZXR0aW5nIGEgbWV0aG9kLCBzbyBpdCdzIG5vdCB1cCB0byB1cworIAkg KiB0byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uICovCisgCWNvbnN0IFJT QV9NRVRIT0QgKm10bXA7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkg JiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVy cihSU0FfRl9SU0FfU0VUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVy biAwOworKwkJfQorKyNlbmRpZgorIAltdG1wID0gcnNhLT5tZXRoOworIAlpZiAobXRtcC0+Zmlu aXNoKSBtdG1wLT5maW5pc2gocnNhKTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAt MTcwLDYgKzE3NywxOCBAQCBSU0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorIAkJ CX0KKyAJCX0KKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUo KSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7Cisr CQlSU0FlcnIoUlNBX0ZfUlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Cisr I2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorKwkJaWYgKHJldC0+ZW5naW5lKQorKwkJCUVOR0lO RV9maW5pc2gocmV0LT5lbmdpbmUpOworKyNlbmRpZgorKwkJT1BFTlNTTF9mcmVlKHJldCk7Cisr CQlyZXR1cm4gTlVMTDsKKysJCX0KKysjZW5kaWYKKyAKKyAJcmV0LT5wYWQ9MDsKKyAJcmV0LT52 ZXJzaW9uPTA7CitAQCAtMTg4LDcgKzIwNyw3IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5F ICplbmdpbmUpCisgCXJldC0+YmxpbmRpbmc9TlVMTDsKKyAJcmV0LT5tdF9ibGluZGluZz1OVUxM OworIAlyZXQtPmJpZ251bV9kYXRhPU5VTEw7CistCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFn cyAmIH5SU0FfRkxBR19OT05fRklQU19BTExPVzsKKysJcmV0LT5mbGFncz1yZXQtPm1ldGgtPmZs YWdzOworIAlpZiAoIUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNBLCByZXQs ICZyZXQtPmV4X2RhdGEpKQorIAkJeworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3Jz YS9yc2FfcG1ldGguYy5maXBzCTIwMTItMDItMTUgMTU6MTQ6MDEuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwkyMDEyLTA0LTIwIDA5OjA3 OjA2LjI4Mjc4NjA4MyArMDIwMAorQEAgLTIwNiwyMiArMjA2LDYgQEAgc3RhdGljIGludCBwa2V5 X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqYworIAkJCQkJUlNBX1JfSU5WQUxJRF9ESUdFU1RfTEVO R1RIKTsKKyAJCQlyZXR1cm4gLTE7CisgCQkJfQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0JCWlm IChyZXQgPiAwKQorLQkJCXsKKy0JCQl1bnNpZ25lZCBpbnQgc2xlbjsKKy0JCQlyZXQgPSBGSVBT X3JzYV9zaWduX2RpZ2VzdChyc2EsIHRicywgdGJzbGVuLCByY3R4LT5tZCwKKy0JCQkJCQkJcmN0 eC0+cGFkX21vZGUsCistCQkJCQkJCXJjdHgtPnNhbHRsZW4sCistCQkJCQkJCXJjdHgtPm1nZjFt ZCwKKy0JCQkJCQkJc2lnLCAmc2xlbik7CistCQkJaWYgKHJldCA+IDApCistCQkJCSpzaWdsZW4g PSBzbGVuOworLQkJCWVsc2UKKy0JCQkJKnNpZ2xlbiA9IDA7CistCQkJcmV0dXJuIHJldDsKKy0J CQl9CistI2VuZGlmCisgCisgCQlpZiAoRVZQX01EX3R5cGUocmN0eC0+bWQpID09IE5JRF9tZGMy KQorIAkJCXsKK0BAIC0zNTQsMTkgKzMzOCw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2FfdmVyaWZ5 KEVWUF9QS0VZX0NUWAorICNlbmRpZgorIAlpZiAocmN0eC0+bWQpCisgCQl7CistI2lmZGVmIE9Q RU5TU0xfRklQUworLQkJaWYgKHJ2ID4gMCkKKy0JCQl7CistCQkJcmV0dXJuIEZJUFNfcnNhX3Zl cmlmeV9kaWdlc3QocnNhLAorLQkJCQkJCQl0YnMsIHRic2xlbiwKKy0JCQkJCQkJcmN0eC0+bWQs CistCQkJCQkJCXJjdHgtPnBhZF9tb2RlLAorLQkJCQkJCQlyY3R4LT5zYWx0bGVuLAorLQkJCQkJ CQlyY3R4LT5tZ2YxbWQsCistCQkJCQkJCXNpZywgc2lnbGVuKTsKKy0JCQkJCQkJCistCQkJfQor LSNlbmRpZgorIAkJaWYgKHJjdHgtPnBhZF9tb2RlID09IFJTQV9QS0NTMV9QQURESU5HKQorIAkJ CXJldHVybiBSU0FfdmVyaWZ5KEVWUF9NRF90eXBlKHJjdHgtPm1kKSwgdGJzLCB0YnNsZW4sCisg CQkJCQlzaWcsIHNpZ2xlbiwgcnNhKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9y c2EvcnNhX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX3NpZ24uYwor LS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMTItMDItMTUg MTU6MDA6MDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3JzYS9y c2Ffc2lnbi5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjgzNzg2MTA1ICswMjAwCitAQCAtMTM4LDcg KzEzOCw4IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWky ZF9YNTA5X1NJRygmc2lnLCZwKTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2Vu Y3J5cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1 bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkg PSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxz aWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9 MDsKKyAJZWxzZQorQEAgLTE3OCw4ICsxNzksOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0 eXBlLCBjb25zdCB1bnNpCisgCisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQor IAkJeworLQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1 ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9k ZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJt LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4g MDsKKyAJCSpwcm1fbGVuID0gaTsKK0BAIC0xOTYsNyArMTk3LDggQEAgaW50IGludF9yc2FfdmVy aWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklG WSxSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlp PVJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BB RERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9p ZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5t ZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpIDogMDsKKyAKKyAJaWYgKGkgPD0gMCkgZ290byBlcnI7CisgCS8qIE9kZGJhbGwgTURDMiBj YXNlOiBzaWduYXR1cmUgY2FuIGJlIE9DVEVUIFNUUklORy4KK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vc2hhL3No YTI1Ni5jCistLS0gb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMTEt MDYtMDEgMTU6Mzk6NDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRv L3NoYS9zaGEyNTYuYwkyMDEyLTA0LTIwIDA5OjA3OjA2LjI4Mzc4NjEwNSArMDIwMAorQEAgLTEy LDEyICsxMiwxOSBAQAorIAorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRl IDxvcGVuc3NsL3NoYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAK KyBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9Q VEVYVDsKKyAKKyBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwgU0hBMjU2KQorIAl7CisrI2lmZGVm IE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNl dCAoYywwLHNpemVvZigqYykpOworIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2 N2NkNTA3VUw7CisgCWMtPmhbMl09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsK K0BAIC0yOSw2ICszNiw5IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCisgCisg Zmlwc19tZF9pbml0KFNIQTI1NikKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19z ZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJ Yy0+aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOworIAljLT5oWzJdPTB4 M2M2ZWYzNzJVTDsJYy0+aFszXT0weGE1NGZmNTNhVUw7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4x YS9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3NoYS9zaGE1 MTIuYworLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDExLTEx LTE0IDIxOjU4OjAxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9z aGEvc2hhNTEyLmMJMjAxMi0wNC0yMCAwOTowNzowNi4yODQ3ODYxMjcgKzAyMDAKK0BAIC01LDYg KzUsMTAgQEAKKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorICAqLworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2xjb25mLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjZW5kaWYKKysKKyAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVk KE9QRU5TU0xfTk9fU0hBNTEyKQorIC8qCisgICogSU1QTEVNRU5UQVRJT04gTk9URVMuCitAQCAt NjEsNiArNjUsOSBAQCBjb25zdCBjaGFyIFNIQTUxMl92ZXJzaW9uW109IlNIQS01MTIiIE9QCisg CisgZmlwc19tZF9pbml0X2N0eChTSEEzODQsIFNIQTUxMikKKyAJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAljLT5oWzBdPVU2NCgw eGNiYmI5ZDVkYzEwNTllZDgpOworIAljLT5oWzFdPVU2NCgweDYyOWEyOTJhMzY3Y2Q1MDcpOwor IAljLT5oWzJdPVU2NCgweDkxNTkwMTVhMzA3MGRkMTcpOworQEAgLTc3LDYgKzg0LDkgQEAgZmlw c19tZF9pbml0X2N0eChTSEEzODQsIFNIQTUxMikKKyAKKyBmaXBzX21kX2luaXQoU0hBNTEyKQor IAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2Vu ZGlmCisgCWMtPmhbMF09VTY0KDB4NmEwOWU2NjdmM2JjYzkwOCk7CisgCWMtPmhbMV09VTY0KDB4 YmI2N2FlODU4NGNhYTczYik7CisgCWMtPmhbMl09VTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAu MWEvY3J5cHRvL3NoYS9zaGEuaAorLS0tIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9zaGEvc2hhLmgu ZmlwcwkyMDEyLTA0LTIwIDA5OjA3OjA1LjQ5Mzc2OTE2OCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjFhL2NyeXB0by9zaGEvc2hhLmgJMjAxMi0wNC0yMCAwOTowNzowNi4yODU3ODYxNDkgKzAyMDAK K0BAIC0xMTYsOSArMTE2LDYgQEAgdW5zaWduZWQgY2hhciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNo YXIgKgorIHZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQorLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9TSEExX0luaXQoU0hBX0NUWCAqYyk7CistI2VuZGlmCisg aW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsKKyBpbnQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqYywg Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQTFfRmluYWwodW5zaWduZWQg Y2hhciAqbWQsIFNIQV9DVFggKmMpOworQEAgLTE0MSwxMCArMTM4LDYgQEAgdHlwZWRlZiBzdHJ1 Y3QgU0hBMjU2c3RhdGVfc3QKKyAJfSBTSEEyNTZfQ1RYOworIAorICNpZm5kZWYgT1BFTlNTTF9O T19TSEEyNTYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistaW50IHByaXZhdGVfU0hBMjI0X0luaXQo U0hBMjU2X0NUWCAqYyk7CistaW50IHByaXZhdGVfU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7 CistI2VuZGlmCisgaW50IFNIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworIGludCBTSEEyMjRf VXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGlu dCBTSEEyMjRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOworQEAgLTE5 MiwxMCArMTg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3QKKyAjZW5kaWYKKyAK KyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCistI2lmZGVmIE9QRU5TU0xfRklQUworLWludCBw cml2YXRlX1NIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOworLWludCBwcml2YXRlX1NIQTUxMl9J bml0KFNIQTUxMl9DVFggKmMpOworLSNlbmRpZgorIGludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RY ICpjKTsKKyBpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRh LCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1 MTJfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9zaGEvc2hhX2xvY2wu aC5maXBzIG9wZW5zc2wtMS4wLjFhL2NyeXB0by9zaGEvc2hhX2xvY2wuaAorLS0tIG9wZW5zc2wt MS4wLjFhL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIwMTItMDQtMjAgMDk6MDc6MDUuNDk5 NzY5Mjk2ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIw MTItMDQtMjAgMDk6MDc6MDYuMjg1Nzg2MTQ5ICswMjAwCitAQCAtMTIzLDExICsxMjMsMTQgQEAg dm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsCisgI2RlZmluZSBJTklUX0RB VEFfaDQgMHhjM2QyZTFmMFVMCisgCisgI2lmZGVmIFNIQV8wCistZmlwc19tZF9pbml0KFNIQSkK Kytub25maXBzX21kX2luaXQoU0hBKQorICNlbHNlCisgZmlwc19tZF9pbml0X2N0eChTSEExLCBT SEEpCisgI2VuZGlmCisgCXsKKysjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NM X0ZJUFMpCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7CisgCWMtPmgwPUlOSVRfREFUQV9oMDsKKyAJYy0+aDE9SU5JVF9EQVRBX2gx OworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjFhL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEu MC4xYS9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJMjAxMS0wNi0wMSAxNTozOTo0NS4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYS9jcnlwdG8vd2hybHBvb2wvd3BfZGdz dC5jCTIwMTItMDQtMjAgMDk6MDc6MDYuMjg2Nzg2MTcxICswMjAwCitAQCAtNTUsNyArNTUsNyBA QAorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAK Ky1maXBzX21kX2luaXQoV0hJUkxQT09MKQorK25vbmZpcHNfbWRfaW5pdChXSElSTFBPT0wpCisg CXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCXJldHVybigxKTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjFhL01ha2VmaWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjFhL01ha2VmaWxlLm9y ZworLS0tIG9wZW5zc2wtMS4wLjFhL01ha2VmaWxlLm9yZy5maXBzCTIwMTItMDQtMjAgMDk6MDc6 MDYuMTk5Nzg0MzA0ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWEvTWFrZWZpbGUub3JnCTIwMTIt MDQtMjAgMDk6MDc6MDYuMjg2Nzg2MTcxICswMjAwCitAQCAtMTM2LDYgKzEzNiw5IEBAIEZJUFND QU5MSUI9CisgCisgQkFTRUFERFI9CisgCisrIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVkCisr RklQUz0KKysKKyBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMKKyBF TkdESVJTPSBjY2dvc3QKKyBTSExJQkRJUlM9IGNyeXB0byBzc2wKK0BAIC0xNDgsNyArMTUxLDcg QEAgU0RJUlM9ICBcCisgCWJuIGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5lIFwK KyAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBcCisgCWV2cCBhc24xIHBlbSB4NTA5 IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAorLQlj bXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjCisrCWNtcyBwcXVldWUgdHMganBha2Ug c3JwIHN0b3JlIGNtYWMgZmlwcworICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxpc3Qg aXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKKyAjIGFjY29yZGluZyB0byBuby14eHggYXJndW1l bnRzLi4uCisgCitAQCAtMjM3LDYgKzI0MCw3IEBAIEJVSUxERU5WPQlQTEFURk9STT0nJChQTEFU Rk9STSknIFBST0NFU1MKKyAJCUZJUFNMSUJESVI9JyR7RklQU0xJQkRJUn0nCQkJXAorIAkJRklQ U0RJUj0nJHtGSVBTRElSfScJCQkJXAorIAkJRklQU0NBTkxJQj0iJCR7RklQU0NBTkxJQjotJChG SVBTQ0FOTElCKX0iCVwKKysJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElTPSQk e1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9WRVJS SURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBm bGF2b3JzLAorICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlh YmxlIHRyZWF0bWVudCB3aXRoIC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMWEvc3NsL3NzbF9h bGdzLmMuZmlwcyBvcGVuc3NsLTEuMC4xYS9zc2wvc3NsX2FsZ3MuYworLS0tIG9wZW5zc2wtMS4w LjFhL3NzbC9zc2xfYWxncy5jLmZpcHMJMjAxMi0wMS0xNSAxNDo0Mjo1MC4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4xYS9zc2wvc3NsX2FsZ3MuYwkyMDEyLTA0LTIwIDA5OjA3OjA2 LjI4Nzc4NjE5MiArMDIwMAorQEAgLTY0LDYgKzY0LDEyIEBACisgaW50IFNTTF9saWJyYXJ5X2lu aXQodm9pZCkKKyAJeworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJT1BFTlNTTF9pbml0X2xp YnJhcnkoKTsKKysJaWYgKCFGSVBTX21vZGUoKSkKKysJCXsKKysjZW5kaWYKKysKKyAjaWZuZGVm IE9QRU5TU0xfTk9fREVTCisgCUVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2JjKCkpOworIAlFVlBf YWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOworQEAgLTEzNiw2ICsxNDIsNTAgQEAgaW50 IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKKyAJRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKKyAJ RVZQX2FkZF9kaWdlc3QoRVZQX2RzcygpKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCQl9CisrCWVsc2UKKysJCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisrCUVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05P X0FFUworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKKysJRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2Jj KCkpOworKwlFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7CisrCUVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1 CisrCS8qIG5lZWRlZCBldmVuIGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUyBNQUMgKi8KKysJRVZQ X2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCJz c2wyLW1kNSIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsInNzbDMtbWQ1Iik7Cisr I2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hh MSgpKTsgLyogUlNBIHdpdGggc2hhMSAqLworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGEx LCJzc2wzLXNoYTEiKTsKKysJRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNy eXB0aW9uLFNOX3NoYTFXaXRoUlNBKTsKKysjZW5kaWYKKysjaWZuZGVmIE9QRU5TU0xfTk9fU0hB MjU2CisrCUVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7CisrCUVWUF9hZGRfZGlnZXN0KEVW UF9zaGEyNTYoKSk7CisrI2VuZGlmCisrI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorKwlFVlBf YWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKwlFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkp OworKyNlbmRpZgorKyNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BF TlNTTF9OT19EU0EpCisrCUVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Egd2l0aCBz aGExICovCisrCUVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLFNOX2RzYVdpdGhT SEExXzIpOworKwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiRFNTMSIpOwor KwlFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwiZHNzMSIpOworKyNlbmRpZgor KyNpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKwlFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7 CisrI2VuZGlmCisrCQl9CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKKyAJLyog VGhpcyB3aWxsIGluaXRpYWxpc2UgdGhlIGJ1aWx0LWluIGNvbXByZXNzaW9uIGFsZ29yaXRobXMu CisgCSAgIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBhIFNUQUNLX09GKFNTTF9DT01QKSwgYnV0IHRo YXQgY2FuCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC5zcGVjIGIvb3BlbnNzbC5zcGVjCmluZGV4IGQ4 MjFiN2UuLjc4OTMzMTIgMTAwNjQ0Ci0tLSBhL29wZW5zc2wuc3BlYworKysgYi9vcGVuc3NsLnNw ZWMKQEAgLTIwLDggKzIwLDggQEAKIAogU3VtbWFyeTogVXRpbGl0aWVzIGZyb20gdGhlIGdlbmVy YWwgcHVycG9zZSBjcnlwdG9ncmFwaHkgbGlicmFyeSB3aXRoIFRMUyBpbXBsZW1lbnRhdGlvbgog TmFtZTogb3BlbnNzbAotVmVyc2lvbjogMS4wLjEKLVJlbGVhc2U6IDMlez9kaXN0fQorVmVyc2lv bjogMS4wLjFhCitSZWxlYXNlOiAxJXs/ZGlzdH0KIEVwb2NoOiAxCiAjIFdlIGhhdmUgdG8gcmVt b3ZlIGNlcnRhaW4gcGF0ZW50ZWQgYWxnb3JpdGhtcyBmcm9tIHRoZSBvcGVuc3NsIHNvdXJjZQog IyB0YXJiYWxsIHdpdGggdGhlIGhvYmJsZS1vcGVuc3NsIHNjcmlwdCB3aGljaCBpcyBpbmNsdWRl ZCBiZWxvdy4KQEAgLTQzLDcgKzQzLDYgQEAgUGF0Y2g2OiBvcGVuc3NsLTAuOS44Yi10ZXN0LXVz ZS1sb2NhbGhvc3QucGF0Y2gKIFBhdGNoNzogb3BlbnNzbC0xLjAuMC10aW1lem9uZS5wYXRjaAog IyBCdWcgZml4ZXMKIFBhdGNoMjM6IG9wZW5zc2wtMS4wLjAtYmV0YTQtZGVmYXVsdC1wYXRocy5w YXRjaAotUGF0Y2gyNDogb3BlbnNzbC0xLjAuMS1iZXRhMy1zMzkweGJ1aWxkLnBhdGNoCiAjIEZ1 bmN0aW9uYWxpdHkgY2hhbmdlcwogUGF0Y2gzMzogb3BlbnNzbC0xLjAuMC1iZXRhNC1jYS1kaXIu cGF0Y2gKIFBhdGNoMzQ6IG9wZW5zc2wtMC45LjYteDUwOS5wYXRjaApAQCAtNTEsMTAgKzUwLDEw IEBAIFBhdGNoMzU6IG9wZW5zc2wtMC45LjhqLXZlcnNpb24tYWRkLWVuZ2luZXMucGF0Y2gKIFBh dGNoMzY6IG9wZW5zc2wtMS4wLjBlLWRvYy1ub2VvZi5wYXRjaAogUGF0Y2gzODogb3BlbnNzbC0x LjAuMS1iZXRhMi1zc2wtb3AtYWxsLnBhdGNoCiBQYXRjaDM5OiBvcGVuc3NsLTEuMC4xLWJldGEy LWlwdjYtYXBwcy5wYXRjaAotUGF0Y2g0MDogb3BlbnNzbC0xLjAuMS1iZXRhMy1maXBzLnBhdGNo CitQYXRjaDQwOiBvcGVuc3NsLTEuMC4xYS1maXBzLnBhdGNoCiBQYXRjaDQ1OiBvcGVuc3NsLTAu OS44ai1lbnYtbm96bGliLnBhdGNoCiBQYXRjaDQ3OiBvcGVuc3NsLTEuMC4wLWJldGE1LXJlYWRt ZS13YXJuaW5nLnBhdGNoCi1QYXRjaDQ5OiBvcGVuc3NsLTEuMC4wLWJldGE0LWFsZ28tZG9jLnBh dGNoCitQYXRjaDQ5OiBvcGVuc3NsLTEuMC4xYS1hbGdvLWRvYy5wYXRjaAogUGF0Y2g1MDogb3Bl bnNzbC0xLjAuMS1iZXRhMi1kdGxzMS1hYmkucGF0Y2gKIFBhdGNoNTE6IG9wZW5zc2wtMS4wLjEt dmVyc2lvbi5wYXRjaAogUGF0Y2g1Njogb3BlbnNzbC0xLjAuMGMtcnNhLXg5MzEucGF0Y2gKQEAg LTY1LDcgKzY0LDcgQEAgUGF0Y2g2NTogb3BlbnNzbC0xLjAuMGUtY2hpbC1maXhlcy5wYXRjaAog UGF0Y2g2Njogb3BlbnNzbC0xLjAuMS1wa2djb25maWcta3JiNS5wYXRjaAogIyBCYWNrcG9ydGVk IGZpeGVzIGluY2x1ZGluZyBzZWN1cml0eSBmaXhlcwogUGF0Y2g4MTogb3BlbnNzbC0xLjAuMS1i ZXRhMi1wYWRsb2NrNjQucGF0Y2gKLVBhdGNoODI6IG9wZW5zc2wtMS4wLjEtYmFja3BvcnQucGF0 Y2gKK1BhdGNoODI6IG9wZW5zc2wtMS4wLjFhLWJhY2twb3J0LnBhdGNoCiAKIExpY2Vuc2U6IE9w ZW5TU0wKIEdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCkBAIC0xNDIsNyArMTQx LDYgQEAgZnJvbSBvdGhlciBmb3JtYXRzIHRvIHRoZSBmb3JtYXRzIHVzZWQgYnkgdGhlIE9wZW5T U0wgdG9vbGtpdC4KICVwYXRjaDcgLXAxIC1iIC50aW1lem9uZQogCiAlcGF0Y2gyMyAtcDEgLWIg LmRlZmF1bHQtcGF0aHMKLSVwYXRjaDI0IC1wMSAtYiAuczM5MHhidWlsZAogCiAlcGF0Y2gzMyAt cDEgLWIgLmNhLWRpcgogJXBhdGNoMzQgLXAxIC1iIC54NTA5CkBAIC0xNjUsNiArMTYzLDcgQEAg ZnJvbSBvdGhlciBmb3JtYXRzIHRvIHRoZSBmb3JtYXRzIHVzZWQgYnkgdGhlIE9wZW5TU0wgdG9v bGtpdC4KIAogJXBhdGNoODEgLXAxIC1iIC5wYWRsb2NrNjQKICVwYXRjaDgyIC1wMSAtYiAuYmFj a3BvcnQKKwogIyBNb2RpZnkgdGhlIHZhcmlvdXMgcGVybCBzY3JpcHRzIHRvIHJlZmVyZW5jZSBw ZXJsIGluIHRoZSByaWdodCBsb2NhdGlvbi4KIHBlcmwgdXRpbC9wZXJscGF0aC5wbCBgZGlybmFt ZSAle19fcGVybH1gCiAKQEAgLTQxOSw2ICs0MTgsOSBAQCBybSAtcmYgJFJQTV9CVUlMRF9ST09U LyV7X2xpYmRpcn0vZmlwc2NhbmlzdGVyLioKICVwb3N0dW4gbGlicyAtcCAvc2Jpbi9sZGNvbmZp ZwogCiAlY2hhbmdlbG9nCisqIEZyaSBBcHIgMjAgMjAxMiBUb21hcyBNcmF6IDx0bXJhekByZWRo YXQuY29tPiAxLjAuMWEtMQorLSBuZXcgdXBzdHJlYW0gdmVyc2lvbiBmaXhpbmcgQ1ZFLTIwMTIt MjExMAorCiAqIFdlZCBBcHIgMTEgMjAxMiBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQuY29tPiAx LjAuMS0zCiAtIGFkZCBLZXJiZXJvcyA1IGxpYnJhcmllcyB0byBwa2djb25maWcgZm9yIHN0YXRp YyBsaW5raW5nICgjODA3MDUwKQogCgpkaWZmIC0tZ2l0IGEvc291cmNlcyBiL3NvdXJjZXMKaW5k ZXggMzllYjdmZC4uMWViNzcyNyAxMDA2NDQKLS0tIGEvc291cmNlcworKysgYi9zb3VyY2VzCkBA IC0xICsxIEBACi03ZGY2ZWJjOGRmZTQ2M2I3YWY3Y2U0YzRiODYzNDFlMiAgb3BlbnNzbC0xLjAu MS11c2EudGFyLnh6CisyMWEzYjhiZWUxZmRiN2U2MGNhMmU0YWE1MDUyOWY4MSAgb3BlbnNzbC0x LjAuMWEtdXNhLnRhci54ego=