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: minor upstream release 1.0.2g fixing security issues Date: Tue, 09 Jun 2026 12:43:44 GMT Message-ID: <178100902438.1.13650425645799269427.rpms-openssl-e7a0ff581f42@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: e7a0ff581f428f3fd825d4000aeec677b6f579f7 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IGU3YTBmZjU4MWY0MjhmM2ZkODI1ZDQwMDBhZWVj Njc3YjZmNTc5ZjcKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTYtMDMtMDFUMTc6MjI6MDYrMDE6MDAKU3RhdHMgIDogKzEzODQwLy0xMzgw NSBpbiAxMCBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3Jw bXMvb3BlbnNzbC9jL2U3YTBmZjU4MWY0MjhmM2ZkODI1ZDQwMDBhZWVjNjc3YjZmNTc5Zjc/YnJh bmNoPXJlYmFzZV80MGJldGEKCkxvZzoKbWlub3IgdXBzdHJlYW0gcmVsZWFzZSAxLjAuMmcgZml4 aW5nIHNlY3VyaXR5IGlzc3VlcwoKLS0tCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGln bm9yZQppbmRleCAxOWI0NzQ2Li44MjFkMzA0IDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBi Ly5naXRpZ25vcmUKQEAgLTI3LDMgKzI3LDQgQEAgb3BlbnNzbC0xLjAuMGEtdXNhLnRhci5iejIK IC9vcGVuc3NsLTEuMC4yZC1ob2JibGVkLnRhci54egogL29wZW5zc2wtMS4wLjJlLWhvYmJsZWQu dGFyLnh6CiAvb3BlbnNzbC0xLjAuMmYtaG9iYmxlZC50YXIueHoKKy9vcGVuc3NsLTEuMC4yZy1o b2JibGVkLnRhci54egoKZGlmZiAtLWdpdCBhL2VjdGVzdC5jIGIvZWN0ZXN0LmMKaW5kZXggYTM1 ZjVhZC4uNzAxZTcwNiAxMDA2NDQKLS0tIGEvZWN0ZXN0LmMKKysrIGIvZWN0ZXN0LmMKQEAgLTcz OCw3ICs3MzgsNyBAQCBzdHJ1Y3QgbmlzdHBfdGVzdF9wYXJhbXMgewogICAgIGludCBkZWdyZWU7 CiAgICAgLyoKICAgICAgKiBReCwgUXkgYW5kIEQgYXJlIHRha2VuIGZyb20KLSAgICAgKiBodHRw Oi8vY3NyY2RvY3V0Lmdvdi9ncm91cHMvU1QvdG9vbGtpdC9kb2N1bWVudHMvRXhhbXBsZXMvRUNE U0FfUHJpbWUucGRmCisgICAgICogaHR0cDovL2NzcmMubmlzdC5nb3YvZ3JvdXBzL1NUL3Rvb2xr aXQvZG9jdW1lbnRzL0V4YW1wbGVzL0VDRFNBX1ByaW1lLnBkZgogICAgICAqIE90aGVyd2lzZSwg dmFsdWVzIGFyZSBzdGFuZGFyZCBjdXJ2ZSBwYXJhbWV0ZXJzIGZyb20gRklQUyAxODAtMwogICAg ICAqLwogICAgIGNvbnN0IGNoYXIgKnAsICphLCAqYiwgKlF4LCAqUXksICpHeCwgKkd5LCAqb3Jk ZXIsICpkOwpAQCAtODgyLDkgKzg4MiwxOCBAQCBzdGF0aWMgdm9pZCBuaXN0cF9zaW5nbGVfdGVz dChjb25zdCBzdHJ1Y3QgbmlzdHBfdGVzdF9wYXJhbXMgKnRlc3QpCiAgICAgaWYgKDAgIT0gRUNf UE9JTlRfY21wKE5JU1RQLCBRLCBRX0NIRUNLLCBjdHgpKQogICAgICAgICBBQk9SVDsKIAorICAg IC8qCisgICAgICogV2UgaGF2ZSBub3QgcGVyZm9ybWVkIHByZWNvbXB1dGF0aW9uIHNvIGhhdmVf cHJlY29tcHV0ZSBtdWx0IHNob3VsZCBiZQorICAgICAqIGZhbHNlCisgICAgICovCisgICAgaWYg KEVDX0dST1VQX2hhdmVfcHJlY29tcHV0ZV9tdWx0KE5JU1RQKSkKKyAgICAgICAgQUJPUlQ7CisK ICAgICAvKiBub3cgcmVwZWF0IGFsbCB0ZXN0cyB3aXRoIHByZWNvbXB1dGF0aW9uICovCiAgICAg aWYgKCFFQ19HUk9VUF9wcmVjb21wdXRlX211bHQoTklTVFAsIGN0eCkpCiAgICAgICAgIEFCT1JU OworICAgIGlmICghRUNfR1JPVVBfaGF2ZV9wcmVjb21wdXRlX211bHQoTklTVFApKQorICAgICAg ICBBQk9SVDsKIAogICAgIC8qIGZpeGVkIHBvaW50IG11bHRpcGxpY2F0aW9uICovCiAgICAgRUNf UE9JTlRfbXVsKE5JU1RQLCBRLCBtLCBOVUxMLCBOVUxMLCBjdHgpOwoKZGlmZiAtLWdpdCBhL29w ZW5zc2wtMS4wLjJhLWRpc2FibGUtc3NsdjJ2My5wYXRjaCBiL29wZW5zc2wtMS4wLjJhLWRpc2Fi bGUtc3NsdjJ2My5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNiMDE4Zi4u MDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4yYS1kaXNhYmxlLXNzbHYydjMucGF0Y2gKKysrIC9k ZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYS9zc2wvc3Ns X2xpYi5jLnYydjMgb3BlbnNzbC0xLjAuMmEvc3NsL3NzbF9saWIuYwotLS0tIG9wZW5zc2wtMS4w LjJhL3NzbC9zc2xfbGliLmMudjJ2MwkyMDE1LTA0LTIyIDE1OjM3OjE1Ljk3NDM0NTc1NyArMDIw MAotKysrIG9wZW5zc2wtMS4wLjJhL3NzbC9zc2xfbGliLmMJMjAxNS0wNC0yMiAxNTozOTozOS4x MTQ3ODIzNjUgKzAyMDAKLUBAIC0yMDQ4LDYgKzIwNDgsOSBAQCBTU0xfQ1RYICpTU0xfQ1RYX25l dyhjb25zdCBTU0xfTUVUSE9EICptCi0gICAgICAqLwotICAgICByZXQtPm9wdGlvbnMgfD0gU1NM X09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVDsKLSAKLSsgICAgLyogRGlzYWJsZSBTU0x2MiBhbmQg U1NMdjMgYnkgZGVmYXVsdCAoYWZmZWN0cyB0aGUgU1NMdjIzX21ldGhvZCgpIG9ubHkpICovCi0r ICAgIHJldC0+b3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjIgfCBTU0xfT1BfTk9fU1NMdjM7Ci0r Ci0gICAgIHJldHVybiAocmV0KTsKLSAgZXJyOgotICAgICBTU0xlcnIoU1NMX0ZfU1NMX0NUWF9O RVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4yZC1t YW5maXgucGF0Y2ggYi9vcGVuc3NsLTEuMC4yZC1tYW5maXgucGF0Y2gKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGI1MDlhMmIuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMmQtbWFu Zml4LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmEvZG9jL2FwcHMvZWMucG9kLm1hbmZpeCBvcGVuc3NsLTEuMC4yYS9kb2MvYXBwcy9l Yy5wb2QKLS0tLSBvcGVuc3NsLTEuMC4yYS9kb2MvYXBwcy9lYy5wb2QubWFuZml4CTIwMTUtMDEt MjAgMTM6MzM6MzYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmEvZG9jL2FwcHMv ZWMucG9kCTIwMTUtMDQtMjEgMTc6Mzk6MjAuMDg0NTc0NTgwICswMjAwCi1AQCAtOTMsMTAgKzkz LDYgQEAgcHJpbnRzIG91dCB0aGUgcHVibGljLCBwcml2YXRlIGtleSBjb21wbwotIAotIHRoaXMg b3B0aW9uIHByZXZlbnRzIG91dHB1dCBvZiB0aGUgZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBrZXku Ci0gCi0tPWl0ZW0gQjwtbW9kdWx1cz4KLS0KLS10aGlzIG9wdGlvbiBwcmludHMgb3V0IHRoZSB2 YWx1ZSBvZiB0aGUgcHVibGljIGtleSBjb21wb25lbnQgb2YgdGhlIGtleS4KLS0KLSA9aXRlbSBC PC1wdWJpbj4KLSAKLSBieSBkZWZhdWx0IGEgcHJpdmF0ZSBrZXkgaXMgcmVhZCBmcm9tIHRoZSBp bnB1dCBmaWxlOiB3aXRoIHRoaXMgb3B0aW9uIGEKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJhL2Rv Yy9hcHBzL29wZW5zc2wucG9kLm1hbmZpeCBvcGVuc3NsLTEuMC4yYS9kb2MvYXBwcy9vcGVuc3Ns LnBvZAotLS0tIG9wZW5zc2wtMS4wLjJhL2RvYy9hcHBzL29wZW5zc2wucG9kLm1hbmZpeAkyMDE1 LTAxLTIwIDEzOjMzOjM2LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJhL2RvYy9h cHBzL29wZW5zc2wucG9kCTIwMTUtMDQtMjEgMTc6Mzk6MjAuMDg0NTc0NTgwICswMjAwCi1AQCAt MTYzLDcgKzE2Myw3IEBAIENyZWF0ZSBvciBleGFtaW5lIGEgbmV0c2NhcGUgY2VydGlmaWNhdGUK LSAKLSBPbmxpbmUgQ2VydGlmaWNhdGUgU3RhdHVzIFByb3RvY29sIHV0aWxpdHkuCi0gCi0tPWl0 ZW0gTDxCPHBhc3N3ZD58cGFzc3dkKDEpPgotKz1pdGVtIEw8QjxwYXNzd2Q+fHNzbHBhc3N3ZCgx KT4KLSAKLSBHZW5lcmF0aW9uIG9mIGhhc2hlZCBwYXNzd29yZHMuCi0gCi1AQCAtMTg3LDcgKzE4 Nyw3IEBAIFB1YmxpYyBrZXkgYWxnb3JpdGhtIHBhcmFtZXRlciBtYW5hZ2VtZW4KLSAKLSBQdWJs aWMga2V5IGFsZ29yaXRobSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB1dGlsaXR5LgotIAotLT1p dGVtIEw8QjxyYW5kPnxyYW5kKDEpPgotKz1pdGVtIEw8QjxyYW5kPnxzc2xyYW5kKDEpPgotIAot IEdlbmVyYXRlIHBzZXVkby1yYW5kb20gYnl0ZXMuCi0gCi1AQCAtNDAxLDkgKzQwMSw5IEBAIEw8 Y3JsKDEpfGNybCgxKT4sIEw8Y3JsMnBrY3M3KDEpfGNybDJwa2MKLSBMPGRocGFyYW0oMSl8ZGhw YXJhbSgxKT4sIEw8ZHNhKDEpfGRzYSgxKT4sIEw8ZHNhcGFyYW0oMSl8ZHNhcGFyYW0oMSk+LAot IEw8ZW5jKDEpfGVuYygxKT4sIEw8Z2VuZHNhKDEpfGdlbmRzYSgxKT4sIEw8Z2VucGtleSgxKXxn ZW5wa2V5KDEpPiwKLSBMPGdlbnJzYSgxKXxnZW5yc2EoMSk+LCBMPG5zZXEoMSl8bnNlcSgxKT4s IEw8b3BlbnNzbCgxKXxvcGVuc3NsKDEpPiwKLS1MPHBhc3N3ZCgxKXxwYXNzd2QoMSk+LAotK0w8 c3NscGFzc3dkKDEpfHNzbHBhc3N3ZCgxKT4sCi0gTDxwa2NzMTIoMSl8cGtjczEyKDEpPiwgTDxw a2NzNygxKXxwa2NzNygxKT4sIEw8cGtjczgoMSl8cGtjczgoMSk+LAotLUw8cmFuZCgxKXxyYW5k KDEpPiwgTDxyZXEoMSl8cmVxKDEpPiwgTDxyc2EoMSl8cnNhKDEpPiwKLStMPHNzbHJhbmQoMSl8 c3NscmFuZCgxKT4sIEw8cmVxKDEpfHJlcSgxKT4sIEw8cnNhKDEpfHJzYSgxKT4sCi0gTDxyc2F1 dGwoMSl8cnNhdXRsKDEpPiwgTDxzX2NsaWVudCgxKXxzX2NsaWVudCgxKT4sCi0gTDxzX3NlcnZl cigxKXxzX3NlcnZlcigxKT4sIEw8c190aW1lKDEpfHNfdGltZSgxKT4sCi0gTDxzbWltZSgxKXxz bWltZSgxKT4sIEw8c3BrYWMoMSl8c3BrYWMoMSk+LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmEv ZG9jL2FwcHMvc19jbGllbnQucG9kLm1hbmZpeCBvcGVuc3NsLTEuMC4yYS9kb2MvYXBwcy9zX2Ns aWVudC5wb2QKLS0tLSBvcGVuc3NsLTEuMC4yYS9kb2MvYXBwcy9zX2NsaWVudC5wb2QubWFuZml4 CTIwMTUtMDQtMjEgMTc6Mzk6MjAuMDg1NTc0NjAzICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmEv ZG9jL2FwcHMvc19jbGllbnQucG9kCTIwMTUtMDQtMjEgMTc6NDE6MDAuMjE1OTI0MTYyICswMjAw Ci1AQCAtMzQsNiArMzQsOSBAQCBCPG9wZW5zc2w+IEI8c19jbGllbnQ+Ci0gW0I8LXNzbDI+XQot IFtCPC1zc2wzPl0KLSBbQjwtdGxzMT5dCi0rW0I8LXRsczFfMT5dCi0rW0I8LXRsczFfMj5dCi0r W0I8LWR0bHMxPl0KLSBbQjwtbm9fc3NsMj5dCi0gW0I8LW5vX3NzbDM+XQotIFtCPC1ub190bHMx Pl0KLUBAIC0yMDAsNyArMjAzLDcgQEAgVXNlIHRoZSBQU0sga2V5IEI8a2V5PiB3aGVuIHVzaW5n IGEgUFNLCi0gZ2l2ZW4gYXMgYSBoZXhhZGVjaW1hbCBudW1iZXIgd2l0aG91dCBsZWFkaW5nIDB4 LCBmb3IgZXhhbXBsZSAtcHNrCi0gMWEyYjNjNGQuCi0gCi0tPWl0ZW0gQjwtc3NsMj4sIEI8LXNz bDM+LCBCPC10bHMxPiwgQjwtbm9fc3NsMj4sIEI8LW5vX3NzbDM+LCBCPC1ub190bHMxPiwgQjwt bm9fdGxzMV8xPiwgQjwtbm9fdGxzMV8yPgotKz1pdGVtIEI8LXNzbDI+LCBCPC1zc2wzPiwgQjwt dGxzMT4sIEI8LXRsczFfMT4sIEI8LXRsczFfMj4sIEI8LWR0bHMxPiwgQjwtbm9fc3NsMj4sIEI8 LW5vX3NzbDM+LCBCPC1ub190bHMxPiwgQjwtbm9fdGxzMV8xPiwgQjwtbm9fdGxzMV8yPgotIAot IHRoZXNlIG9wdGlvbnMgZGlzYWJsZSB0aGUgdXNlIG9mIGNlcnRhaW4gU1NMIG9yIFRMUyBwcm90 b2NvbHMuIEJ5IGRlZmF1bHQKLSB0aGUgaW5pdGlhbCBoYW5kc2hha2UgdXNlcyBhIG1ldGhvZCB3 aGljaCBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIGFsbAotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmEvZG9jL2FwcHMvc19zZXJ2ZXIucG9kLm1hbmZpeCBvcGVuc3NsLTEuMC4yYS9kb2MvYXBwcy9z X3NlcnZlci5wb2QKLS0tLSBvcGVuc3NsLTEuMC4yYS9kb2MvYXBwcy9zX3NlcnZlci5wb2QubWFu Zml4CTIwMTUtMDMtMTkgMTQ6MzA6MzYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MmEvZG9jL2FwcHMvc19zZXJ2ZXIucG9kCTIwMTUtMDQtMjEgMTc6Mzk6MjAuMDg1NTc0NjAzICsw MjAwCi1AQCAtMjEyLDcgKzIxMiw3IEBAIFVzZSB0aGUgUFNLIGtleSBCPGtleT4gd2hlbiB1c2lu ZyBhIFBTSwotIGdpdmVuIGFzIGEgaGV4YWRlY2ltYWwgbnVtYmVyIHdpdGhvdXQgbGVhZGluZyAw eCwgZm9yIGV4YW1wbGUgLXBzawotIDFhMmIzYzRkLgotIAotLT1pdGVtIEI8LXNzbDI+LCBCPC1z c2wzPiwgQjwtdGxzMT4sIEI8LW5vX3NzbDI+LCBCPC1ub19zc2wzPiwgQjwtbm9fdGxzMT4KLSs9 aXRlbSBCPC1zc2wyPiwgQjwtc3NsMz4sIEI8LXRsczE+LCBCPC10bHMxXzE+LCBCPC10bHMxXzI+ LCBCPC1kdGxzMT4sIEI8LW5vX3NzbDI+LCBCPC1ub19zc2wzPiwgQjwtbm9fdGxzMT4sIEI8LW5v X3RsczFfMT4sIEI8LW5vX3RsczFfMj4KLSAKLSB0aGVzZSBvcHRpb25zIGRpc2FibGUgdGhlIHVz ZSBvZiBjZXJ0YWluIFNTTCBvciBUTFMgcHJvdG9jb2xzLiBCeSBkZWZhdWx0Ci0gdGhlIGluaXRp YWwgaGFuZHNoYWtlIHVzZXMgYSBtZXRob2Qgd2hpY2ggc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0 aCBhbGwKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4yZS1maXBzLnBhdGNoIGIvb3BlbnNzbC0x LjAuMmUtZmlwcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU0ZTEzZC4u MDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4yZS1maXBzLnBhdGNoCisrKyAvZGV2L251bGwKQEAg LTEsMTM3MDQgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvYXBwcy9zcGVlZC5jLmZp cHMgb3BlbnNzbC0xLjAuMmUvYXBwcy9zcGVlZC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvYXBwcy9z cGVlZC5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4yZS9hcHBzL3NwZWVkLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTY1NjIzODkgKzAx MDAKLUBAIC0xOTcsNyArMTk3LDYgQEAKLSAjICBpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBF TkQKLSAjICAgdW5kZWYgQUVTX3NldF9lbmNyeXB0X2tleQotICMgICB1bmRlZiBBRVNfc2V0X2Rl Y3J5cHRfa2V5Ci0tIyAgIHVuZGVmIERFU19zZXRfa2V5X3VuY2hlY2tlZAotICMgIGVuZGlmCi0g IyAgZGVmaW5lIEJGX3NldF9rZXkgICAgICBwcml2YXRlX0JGX3NldF9rZXkKLSAjICBkZWZpbmUg Q0FTVF9zZXRfa2V5ICAgIHByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMjA1LDcgKzIwNCw2IEBA Ci0gIyAgZGVmaW5lIFNFRURfc2V0X2tleSAgICBwcml2YXRlX1NFRURfc2V0X2tleQotICMgIGRl ZmluZSBSQzJfc2V0X2tleSAgICAgcHJpdmF0ZV9SQzJfc2V0X2tleQotICMgIGRlZmluZSBSQzRf c2V0X2tleSAgICAgcHJpdmF0ZV9SQzRfc2V0X2tleQotLSMgIGRlZmluZSBERVNfc2V0X2tleV91 bmNoZWNrZWQgICBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZAotICMgIGRlZmluZSBBRVNf c2V0X2VuY3J5cHRfa2V5ICAgICBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkKLSAjICBkZWZp bmUgQUVTX3NldF9kZWNyeXB0X2tleSAgICAgcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5Ci0g IyAgZGVmaW5lIENhbWVsbGlhX3NldF9rZXkgICAgICAgIHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tl eQotQEAgLTk3NCw3ICs5NzIsMTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQot ICMgZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX1JTQQotICAgICAgICAgaWYgKHN0cmNtcCgq YXJndiwgInJzYSIpID09IDApIHsKLS0gICAgICAgICAgICByc2FfZG9pdFtSX1JTQV81MTJdID0g MTsKLSsjICBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgICAgICAgICBpZiAoIUZJUFNfbW9kZSgp KQotKyMgIGVuZGlmCi0rICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgICByc2FfZG9pdFtS X1JTQV81MTJdID0gMTsKLSsgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgcnNhX2RvaXRbUl9S U0FfMTAyNF0gPSAxOwotICAgICAgICAgICAgIHJzYV9kb2l0W1JfUlNBXzIwNDhdID0gMTsKLSAg ICAgICAgICAgICByc2FfZG9pdFtSX1JTQV80MDk2XSA9IDE7Ci1AQCAtOTgyLDcgKzk4NSwxMiBA QCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gIyBlbmRpZgotICMgaWZuZGVmIE9Q RU5TU0xfTk9fRFNBCi0gICAgICAgICBpZiAoc3RyY21wKCphcmd2LCAiZHNhIikgPT0gMCkgewot LSAgICAgICAgICAgIGRzYV9kb2l0W1JfRFNBXzUxMl0gPSAxOwotKyMgIGlmZGVmIE9QRU5TU0xf RklQUwotKyAgICAgICAgICAgIGlmICghRklQU19tb2RlKCkpCi0rIyAgZW5kaWYKLSsgICAgICAg ICAgICB7Ci0rICAgICAgICAgICAgICAgIGRzYV9kb2l0W1JfRFNBXzUxMl0gPSAxOwotKyAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV8xMDI0XSA9IDE7Ci0gICAgICAg ICAgICAgZHNhX2RvaXRbUl9EU0FfMjA0OF0gPSAxOwotICAgICAgICAgfSBlbHNlCi1AQCAtMTIz MywxMyArMTI0MSwxOSBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCi0gICAg IGlmIChqID09IDApIHsKLSAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBTEdPUl9OVU07IGkrKykg ewotLSAgICAgICAgICAgIGlmIChpICE9IERfRVZQKQotKyAgICAgICAgICAgIGlmIChpICE9IERf RVZQICYmCi0rICAgICAgICAgICAgICAgICghRklQU19tb2RlKCkgfHwgKGkgIT0gRF9XSElSTFBP T0wgJiYKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBEX01EMiAmJiBp ICE9IERfTUQ0ICYmCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gRF9N RDUgJiYgaSAhPSBEX01EQzIgJiYKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aSAhPSBEX1JNRDE2MCkpKQotICAgICAgICAgICAgICAgICBkb2l0W2ldID0gMTsKLSAgICAgICAg IH0KLSAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBSU0FfTlVNOyBpKyspCi0tICAgICAgICAgICAg cnNhX2RvaXRbaV0gPSAxOwotKyAgICAgICAgICAgIGlmICghRklQU19tb2RlKCkgfHwgaSAhPSBS X1JTQV81MTIpCi0rICAgICAgICAgICAgICAgIHJzYV9kb2l0W2ldID0gMTsKLSAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBEU0FfTlVNOyBpKyspCi0tICAgICAgICAgICAgZHNhX2RvaXRbaV0gPSAx OwotKyAgICAgICAgICAgIGlmICghRklQU19tb2RlKCkgfHwgaSAhPSBSX0RTQV81MTIpCi0rICAg ICAgICAgICAgICAgIGRzYV9kb2l0W2ldID0gMTsKLSAjIGlmbmRlZiBPUEVOU1NMX05PX0VDRFNB Ci0gICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRUNfTlVNOyBpKyspCi0gICAgICAgICAgICAgZWNk c2FfZG9pdFtpXSA9IDE7Ci1AQCAtMTI5OSwzMCArMTMxMyw0NiBAQCBpbnQgTUFJTihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCi0gICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoa2V5MzIsIDI1NiwgJmFl c19rczMpOwotICMgZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX0NBTUVMTElBCi0tICAgIENh bWVsbGlhX3NldF9rZXkoa2V5MTYsIDEyOCwgJmNhbWVsbGlhX2tzMSk7Ci0tICAgIENhbWVsbGlh X3NldF9rZXkoY2tleTI0LCAxOTIsICZjYW1lbGxpYV9rczIpOwotLSAgICBDYW1lbGxpYV9zZXRf a2V5KGNrZXkzMiwgMjU2LCAmY2FtZWxsaWFfa3MzKTsKLSsgICAgaWYgKGRvaXRbRF9DQkNfMTI4 X0NNTF0gfHwgZG9pdFtEX0NCQ18xOTJfQ01MXSB8fCBkb2l0W0RfQ0JDXzI1Nl9DTUxdKSB7Ci0r ICAgICAgICBDYW1lbGxpYV9zZXRfa2V5KGtleTE2LCAxMjgsICZjYW1lbGxpYV9rczEpOwotKyAg ICAgICAgQ2FtZWxsaWFfc2V0X2tleShja2V5MjQsIDE5MiwgJmNhbWVsbGlhX2tzMik7Ci0rICAg ICAgICBDYW1lbGxpYV9zZXRfa2V5KGNrZXkzMiwgMjU2LCAmY2FtZWxsaWFfa3MzKTsKLSsgICAg fQotICMgZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX0lERUEKLS0gICAgaWRlYV9zZXRfZW5j cnlwdF9rZXkoa2V5MTYsICZpZGVhX2tzKTsKLSsgICAgaWYgKGRvaXRbRF9DQkNfSURFQV0pIHsK LSsgICAgICAgIGlkZWFfc2V0X2VuY3J5cHRfa2V5KGtleTE2LCAmaWRlYV9rcyk7Ci0rICAgIH0K LSAjIGVuZGlmCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19TRUVECi0tICAgIFNFRURfc2V0X2tleShr ZXkxNiwgJnNlZWRfa3MpOwotKyAgICBpZiAoZG9pdFtEX0NCQ19TRUVEXSkgewotKyAgICAgICAg U0VFRF9zZXRfa2V5KGtleTE2LCAmc2VlZF9rcyk7Ci0rICAgIH0KLSAjIGVuZGlmCi0gIyBpZm5k ZWYgT1BFTlNTTF9OT19SQzQKLS0gICAgUkM0X3NldF9rZXkoJnJjNF9rcywgMTYsIGtleTE2KTsK LSsgICAgaWYgKGRvaXRbRF9SQzRdKSB7Ci0rICAgICAgICBSQzRfc2V0X2tleSgmcmM0X2tzLCAx Niwga2V5MTYpOwotKyAgICB9Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fUkMyCi0t ICAgIFJDMl9zZXRfa2V5KCZyYzJfa3MsIDE2LCBrZXkxNiwgMTI4KTsKLSsgICAgaWYgKGRvaXRb RF9DQkNfUkMyXSkgewotKyAgICAgICAgUkMyX3NldF9rZXkoJnJjMl9rcywgMTYsIGtleTE2LCAx MjgpOwotKyAgICB9Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fUkM1Ci0tICAgIFJD NV8zMl9zZXRfa2V5KCZyYzVfa3MsIDE2LCBrZXkxNiwgMTIpOwotKyAgICBpZiAoZG9pdFtEX0NC Q19SQzVdKSB7Ci0rICAgICAgICBSQzVfMzJfc2V0X2tleSgmcmM1X2tzLCAxNiwga2V5MTYsIDEy KTsKLSsgICAgfQotICMgZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX0JGCi0tICAgIEJGX3Nl dF9rZXkoJmJmX2tzLCAxNiwga2V5MTYpOwotKyAgICBpZiAoZG9pdFtEX0NCQ19CRl0pIHsKLSsg ICAgICAgIEJGX3NldF9rZXkoJmJmX2tzLCAxNiwga2V5MTYpOwotKyAgICB9Ci0gIyBlbmRpZgot ICMgaWZuZGVmIE9QRU5TU0xfTk9fQ0FTVAotLSAgICBDQVNUX3NldF9rZXkoJmNhc3Rfa3MsIDE2 LCBrZXkxNik7Ci0rICAgIGlmIChkb2l0W0RfQ0JDX0NBU1RdKSB7Ci0rICAgICAgICBDQVNUX3Nl dF9rZXkoJmNhc3Rfa3MsIDE2LCBrZXkxNik7Ci0rICAgIH0KLSAjIGVuZGlmCi0gIyBpZm5kZWYg T1BFTlNTTF9OT19SU0EKLSAgICAgbWVtc2V0KHJzYV9jLCAwLCBzaXplb2YocnNhX2MpKTsKLUBA IC0xNjA1LDYgKzE2MzUsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gICAg ICAgICBITUFDX0NUWCBoY3R4OwotIAotICAgICAgICAgSE1BQ19DVFhfaW5pdCgmaGN0eCk7Ci0r ICAgICAgICBITUFDX0NUWF9zZXRfZmxhZ3MoJmhjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQ U19BTExPVyk7Ci0gICAgICAgICBITUFDX0luaXRfZXgoJmhjdHgsICh1bnNpZ25lZCBjaGFyICop IlRoaXMgaXMgYSBrZXkuLi4iLAotICAgICAgICAgICAgICAgICAgICAgIDE2LCBFVlBfbWQ1KCks IE5VTEwpOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvQ29uZmlndXJlLmZpcHMgb3BlbnNz bC0xLjAuMmUvQ29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMmUvQ29uZmlndXJlLmZpcHMJMjAx NS0xMi0wNCAxMzo1NTo1MS45Mzk1NjE5OTIgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9Db25m aWd1cmUJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTY1NjIzODkgKzAxMDAKLUBAIC0xMDU4LDExICsx MDU4LDYgQEAgaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZAotIAkkZGlz YWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOwotIAl9Ci0gCi0taWYgKCRmaXBzICYmICRmaXBzbGli ZGlyIGVxICIiKQotLQl7Ci0tCSRmaXBzbGliZGlyID0gJGZpcHNkaXIgLiAiL2xpYi8iOwotLQl9 Ci0tCi0gIyBSU0FYIEVOR0lORSBzZXRzIGRlZmF1bHQgbm9uLUZJUFMgUlNBIG1ldGhvZC4KLSBp ZiAoJGZpcHMpCi0gCXsKLUBAIC0xNTUxLDcgKzE1NDYsNiBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNT TF9CTl9BU01fR0YybSIgaWYgKCRiCi0gaWYgKCRmaXBzKQotIAl7Ci0gCSRvcGVuc3NsX290aGVy X2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU1xuIjsKLS0JJGNmbGFncyAuPSAiIC1JXCQo RklQU0RJUikvaW5jbHVkZSI7Ci0gCX0KLSAKLSAkY3B1aWRfb2JqPSJtZW1fY2xyLm8iCXVubGVz cyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOwotQEAgLTE3NTQsOSArMTc0OCwxMiBAQCB3aGlsZSAo PElOPikKLSAKLSAJcy9eRklQU0RJUj0uKi9GSVBTRElSPSRmaXBzZGlyLzsKLSAJcy9eRklQU0xJ QkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGlyLzsKLS0Jcy9eRklQU0NBTkxJQj0uKi9GSVBT Q0FOTElCPWxpYmNyeXB0by8gaWYgJGZpcHM7Ci0gCXMvXkJBU0VBRERSPS4qL0JBU0VBRERSPSRi YXNlYWRkci87Ci0gCi0rCWlmICgkZmlwcykKLSsJCXsKLSsJCXMvXkZJUFM9LiovRklQUz15ZXMv OwotKwkJfQotIAlzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0 LzsKLSAJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87Ci0gCXMvXlNI QVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wp LyBpZiAoISRub19zaGFyZWQpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Flcy9h ZXNfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCi0tLS0g b3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Flcy9hZXNfbWlzYy5jLmZpcHMJMjAxNS0xMi0wMyAxNTow NDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vYWVzL2Flc19t aXNjLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTY1NjIzODkgKzAxMDAKLUBAIC03MCwxNyArNzAs MTEgQEAgY29uc3QgY2hhciAqQUVTX29wdGlvbnModm9pZCkKLSBpbnQgQUVTX3NldF9lbmNyeXB0 X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSAgICAg ICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCi0gewotLSNpZmRlZiBPUEVOU1NMX0ZJ UFMKLS0gICAgZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKLS0jZW5kaWYKLSAgICAgcmV0dXJuIHBy aXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOwotIH0KLSAKLSBp bnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25z dCBpbnQgYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkpCi0gewot LSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgZmlwc19jaXBoZXJfYWJvcnQoQUVTKTsKLS0jZW5k aWYKLSAgICAgcmV0dXJuIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleSh1c2VyS2V5LCBiaXRz LCBrZXkpOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9jbWFjL2NtYWMuYy5m aXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9jbWFjL2NtYWMuYwotLS0tIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9jbWFjL2NtYWMuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2NtYWMvY21hYy5jCTIwMTUtMTItMDQgMTM6 NTU6NTEuOTU3NTYyNDEyICswMTAwCi1AQCAtMTA1LDEyICsxMDUsNiBAQCBDTUFDX0NUWCAqQ01B Q19DVFhfbmV3KHZvaWQpCi0gCi0gdm9pZCBDTUFDX0NUWF9jbGVhbnVwKENNQUNfQ1RYICpjdHgp Ci0gewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9kZSgpICYmICFjdHgt PmNjdHguZW5naW5lKSB7Ci0tICAgICAgICBGSVBTX2NtYWNfY3R4X2NsZWFudXAoY3R4KTsKLS0g ICAgICAgIHJldHVybjsKLS0gICAgfQotLSNlbmRpZgotICAgICBFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKCZjdHgtPmNjdHgpOwotICAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT50YmwsIEVWUF9NQVhf QkxPQ0tfTEVOR1RIKTsKLSAgICAgT1BFTlNTTF9jbGVhbnNlKGN0eC0+azEsIEVWUF9NQVhfQkxP Q0tfTEVOR1RIKTsKLUBAIC0xNjAsMTIgKzE1NCw2IEBAIGludCBDTUFDX0luaXQoQ01BQ19DVFgg KmN0eCwgY29uc3Qgdm9pZAotICAgICAgICAgICAgIEVWUGVycihFVlBfRl9DTUFDX0lOSVQsIEVW UF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg IH0KLS0gICAgICAgIC8qCi0tICAgICAgICAgKiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2ls bCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LCB2aWEKLS0gICAgICAgICAqIEZJUFNfY2lwaGVy aW5pdCgpLgotLSAgICAgICAgICovCi0tICAgICAgICBpZiAoIWltcGwgJiYgIWN0eC0+Y2N0eC5l bmdpbmUpCi0tICAgICAgICAgICAgcmV0dXJuIEZJUFNfY21hY19pbml0KGN0eCwga2V5LCBrZXls ZW4sIGNpcGhlciwgTlVMTCk7Ci0gICAgIH0KLSAjZW5kaWYKLSAgICAgLyogQWxsIHplcm9zIG1l YW5zIHJlc3RhcnQgKi8KLUBAIC0yMTEsMTAgKzE5OSw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFD X0NUWCAqY3R4LCBjb25zdCB2b2kKLSB7Ci0gICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEg PSBpbjsKLSAgICAgc2l6ZV90IGJsOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJ UFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQotLSAgICAgICAgcmV0dXJuIEZJUFNfY21h Y191cGRhdGUoY3R4LCBpbiwgZGxlbik7Ci0tI2VuZGlmCi0gICAgIGlmIChjdHgtPm5sYXN0X2Js b2NrID09IC0xKQotICAgICAgICAgcmV0dXJuIDA7Ci0gICAgIGlmIChkbGVuID09IDApCi1AQCAt MjU0LDEwICsyMzgsNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9p Ci0gaW50IENNQUNfRmluYWwoQ01BQ19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXpl X3QgKnBvdXRsZW4pCi0gewotICAgICBpbnQgaSwgYmwsIGxiOwotLSNpZmRlZiBPUEVOU1NMX0ZJ UFMKLS0gICAgaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmNjdHguZW5naW5lKQotLSAgICAgICAg cmV0dXJuIEZJUFNfY21hY19maW5hbChjdHgsIG91dCwgcG91dGxlbik7Ci0tI2VuZGlmCi0gICAg IGlmIChjdHgtPm5sYXN0X2Jsb2NrID09IC0xKQotICAgICAgICAgcmV0dXJuIDA7Ci0gICAgIGJs ID0gRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZSgmY3R4LT5jY3R4KTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9jcnlwdG8uaC5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9jcnlw dG8uaAotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMTUtMTItMDQg MTM6NTU6NTEuODQzNTU5NzUzICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2NyeXB0 by5oCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU3NTYyNDEyICswMTAwCi1AQCAtNjAwLDI0ICs2MDAs MjkgQEAgaW50IEZJUFNfbW9kZV9zZXQoaW50IHIpOwotIHZvaWQgT1BFTlNTTF9pbml0KHZvaWQp OwotIAotICMgZGVmaW5lIGZpcHNfbWRfaW5pdChhbGcpIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBh bGcpCi0rIyBkZWZpbmUgbm9uZmlwc19tZF9pbml0KGFsZykgbm9uZmlwc19tZF9pbml0X2N0eChh bGcsIGFsZykKLSsjIGRlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKLSsgICAgICAg IGludCBhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQotIAotICMgaWZkZWYgT1BFTlNTTF9GSVBTCi0t IyAgZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAotKyMgIGRlZmluZSBub25maXBz X21kX2luaXRfY3R4KGFsZywgY3gpIFwKLSAgICAgICAgIGludCBhbGcjI19Jbml0KGN4IyNfQ1RY ICpjKSBcCi0gICAgICAgICB7IFwKLSAgICAgICAgIGlmIChGSVBTX21vZGUoKSkgT3BlblNTTERp ZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLS0gICAgICAgICAgICAgICAgIkxvdyBsZXZlbCBBUEkg Y2FsbCB0byBkaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKTsgXAotKyAg ICAgICAgICAgICAgICAiRGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7 IFwKLSAgICAgICAgIHJldHVybiBwcml2YXRlXyMjYWxnIyNfSW5pdChjKTsgXAotICAgICAgICAg fSBcCi0gICAgICAgICBpbnQgcHJpdmF0ZV8jI2FsZyMjX0luaXQoY3gjI19DVFggKmMpCi0gCi0g IyAgZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgXAotICAgICAgICAgaWYgKEZJUFNfbW9k ZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLSAgICAgICAgICAgICAgICAi TG93IGxldmVsIEFQSSBjYWxsIHRvIGNpcGhlciAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBt b2RlISIpCi0rICAgICAgICAgICAgICAgICJDaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJ UFMgbW9kZSEiKQotKwotKy8qIGRpZSBpZiBGSVBTIHNlbGZ0ZXN0IGZhaWxlZCAqLwotK3ZvaWQg RklQU19zZWxmdGVzdF9jaGVjayh2b2lkKTsKLSAKLSAjIGVsc2UKLS0jICBkZWZpbmUgZmlwc19t ZF9pbml0X2N0eChhbGcsIGN4KSBcCi0tICAgICAgICBpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAq YykKLSsjICBkZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBmaXBzX21kX2luaXRf Y3R4KGFsZywgY3gpCi0gIyAgZGVmaW5lIGZpcHNfY2lwaGVyX2Fib3J0KGFsZykgd2hpbGUoMCkK LSAjIGVuZGlmCi0gCi1AQCAtNjM3LDYgKzY0Miw5IEBAIGludCBDUllQVE9fbWVtY21wKGNvbnN0 IHZvaWQgKmEsIGNvbnN0IHYKLSAgKi8KLSB2b2lkIEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZv aWQpOwotIAotKyMgZGVmaW5lIE9QRU5TU0xfSEFWRV9JTklUICAgICAgIDEKLSt2b2lkIE9QRU5T U0xfaW5pdF9saWJyYXJ5KHZvaWQpOwotKwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRP IGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9kZXMvZGVzLmguZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGVz L2Rlcy5oCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Rlcy9kZXMuaC5maXBzCTIwMTUtMTIt MDQgMTM6NTU6NTEuODcxNTYwNDA2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Rl cy9kZXMuaAkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1NzU2MjQxMiArMDEwMAotQEAgLTIzMSwxMCAr MjMxLDYgQEAgaW50IERFU19zZXRfa2V5KGNvbnN0X0RFU19jYmxvY2sgKmtleSwgRAotIGludCBE RVNfa2V5X3NjaGVkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2No ZWR1bGUpOwotIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwg REVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwotIHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2Vk KGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOwotLSMg aWZkZWYgT1BFTlNTTF9GSVBTCi0tdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChj b25zdF9ERVNfY2Jsb2NrICprZXksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0tIyBlbmRpZgotIHZvaWQgREVTX3N0cmlu Z190b19rZXkoY29uc3QgY2hhciAqc3RyLCBERVNfY2Jsb2NrICprZXkpOwotIHZvaWQgREVTX3N0 cmluZ190b18ya2V5cyhjb25zdCBjaGFyICpzdHIsIERFU19jYmxvY2sgKmtleTEsIERFU19jYmxv Y2sgKmtleTIpOwotIHZvaWQgREVTX2NmYjY0X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAq aW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9k ZXMvc2V0X2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Rlcy9zZXRfa2V5LmMKLS0t LSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzCTIwMTUtMTItMDMgMTU6 MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Rlcy9zZXRf a2V5LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTc1NjI0MTIgKzAxMDAKLUBAIC0zNTksMTUgKzM1 OSw2IEBAIGludCBERVNfc2V0X2tleV9jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sKLSB9Ci0gCi0g dm9pZCBERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5 X3NjaGVkdWxlICpzY2hlZHVsZSkKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tewotLSAgICBmaXBz X2NpcGhlcl9hYm9ydChERVMpOwotLSAgICBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tlZChr ZXksIHNjaGVkdWxlKTsKLS19Ci0tCi0tdm9pZCBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tl ZChjb25zdF9ERVNfY2Jsb2NrICprZXksCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKLS0jZW5kaWYKLSB7Ci0gICAgIHN0YXRp YyBjb25zdCBpbnQgc2hpZnRzMlsxNl0gPQotICAgICAgICAgeyAwLCAwLCAxLCAxLCAxLCAxLCAx LCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwIH07Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGgvZGhfZ2VuLmMK LS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcwkyMDE1LTEyLTAzIDE1 OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaF9n ZW4uYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1NzU2MjQxMiArMDEwMAotQEAgLTg1LDEwICs4NSw2 IEBAIGludCBESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KERIICpyZXQsIGkKLSAjZW5kaWYKLSAg ICAgaWYgKHJldC0+bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKQotICAgICAgICAgcmV0dXJuIHJldC0+ bWV0aC0+Z2VuZXJhdGVfcGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKLS0j aWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGlmIChGSVBTX21vZGUoKSkKLS0gICAgICAgIHJldHVy biBGSVBTX2RoX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRv ciwgY2IpOwotLSNlbmRpZgotICAgICByZXR1cm4gZGhfYnVpbHRpbl9nZW5wYXJhbXMocmV0LCBw cmltZV9sZW4sIGdlbmVyYXRvciwgY2IpOwotIH0KLSAKLUBAIC0xMjYsNiArMTIyLDE4IEBAIHN0 YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwKLSAgICAgaW50IGcsIG9rID0g LTE7Ci0gICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r ICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNf Rl9ESF9CVUlMVElOX0dFTlBBUkFNUywgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAgIGlmIChGSVBTX21vZGUoKSAmJiAocHJp bWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBE SGVycihESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7 Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKyNlbmRpZgotKwotICAgICBjdHggPSBCTl9D VFhfbmV3KCk7Ci0gICAgIGlmIChjdHggPT0gTlVMTCkKLSAgICAgICAgIGdvdG8gZXJyOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RoL2RoLmguZmlwcyBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vZGgvZGguaAotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAx NS0xMi0wNCAxMzo1NTo1MS44MTY1NTkxMjQgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZGgvZGguaAkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1NzU2MjQxMiArMDEwMAotQEAgLTc3LDYg Kzc3LDggQEAKLSAjICBkZWZpbmUgT1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTICAgIDEwMDAw Ci0gIyBlbmRpZgotIAotKyMgZGVmaW5lIE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRT IDEwMjQKLSsKLSAjIGRlZmluZSBESF9GTEFHX0NBQ0hFX01PTlRfUCAgICAgMHgwMQotIAotIC8q Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3Ns LTEuMC4yZS9jcnlwdG8vZGgvZGhfa2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGgv ZGhfa2V5LmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaF9rZXkuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1ODU2 MjQzNSArMDEwMAotQEAgLTYxLDYgKzYxLDkgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgot ICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgot IAotIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCk7Ci0gc3RhdGljIGludCBjb21wdXRl X2tleSh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsK LUBAIC05Nyw3ICsxMDAsNyBAQCBpbnQgREhfY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5 LCBjCi0gaW50IERIX2NvbXB1dGVfa2V5X3BhZGRlZCh1bnNpZ25lZCBjaGFyICprZXksIGNvbnN0 IEJJR05VTSAqcHViX2tleSwgREggKmRoKQotIHsKLSAgICAgaW50IHJ2LCBwYWQ7Ci0tICAgIHJ2 ID0gZGgtPm1ldGgtPmNvbXB1dGVfa2V5KGtleSwgcHViX2tleSwgZGgpOwotKyAgICBydiA9IERI X2NvbXB1dGVfa2V5KGtleSwgcHViX2tleSwgZGgpOwotICAgICBpZiAocnYgPD0gMCkKLSAgICAg ICAgIHJldHVybiBydjsKLSAgICAgcGFkID0gQk5fbnVtX2J5dGVzKGRoLT5wKSAtIHJ2OwotQEAg LTExNSw3ICsxMTgsNyBAQCBzdGF0aWMgREhfTUVUSE9EIGRoX29zc2wgPSB7Ci0gICAgIGRoX2Ju X21vZF9leHAsCi0gICAgIGRoX2luaXQsCi0gICAgIGRoX2ZpbmlzaCwKLS0gICAgMCwKLSsgICAg REhfRkxBR19GSVBTX01FVEhPRCwKLSAgICAgTlVMTCwKLSAgICAgTlVMTAotIH07Ci1AQCAtMTM0 LDYgKzEzNywxNCBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCi0gICAgIEJOX01P TlRfQ1RYICptb250ID0gTlVMTDsKLSAgICAgQklHTlVNICpwdWJfa2V5ID0gTlVMTCwgKnByaXZf a2V5ID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUo KQotKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5f TU9EVUxVU19CSVRTKSkgewotKyAgICAgICAgREhlcnIoREhfRl9HRU5FUkFURV9LRVksIERIX1Jf S0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlm Ci0rCi0gICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxMKQotICAg ICAgICAgZ290byBlcnI7Ci1AQCAtMjE3LDYgKzIyOCwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVf a2V5KHVuc2lnbmVkIGNoYXIgKmtlCi0gICAgICAgICBESGVycihESF9GX0NPTVBVVEVfS0VZLCBE SF9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLSAgICAgICAgIGdvdG8gZXJyOwotICAgICB9Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkKLSsgICAgICAgICYmIChCTl9u dW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsg ICAgICAgIERIZXJyKERIX0ZfQ09NUFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsK LSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rI2VuZGlmCi0gCi0gICAgIGN0eCA9IEJOX0NU WF9uZXcoKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxMKQotQEAgLTI3Nyw2ICsyOTUsOSBAQCBzdGF0 aWMgaW50IGRoX2JuX21vZF9leHAoY29uc3QgREggKmRoLCBCCi0gCi0gc3RhdGljIGludCBkaF9p bml0KERIICpkaCkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBGSVBTX3NlbGZ0ZXN0 X2NoZWNrKCk7Ci0rI2VuZGlmCi0gICAgIGRoLT5mbGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRf UDsKLSAgICAgcmV0dXJuICgxKTsKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v ZGgvZGhfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGgvZGhfbGliLmMKLS0tLSBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vZGgvZGhfbGliLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIz LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaF9saWIuYwky MDE1LTEyLTA0IDEzOjU1OjUxLjk1ODU2MjQzNSArMDEwMAotQEAgLTgwLDE0ICs4MCw3IEBAIHZv aWQgREhfc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IERIX01FVEgKLSBjb25zdCBESF9NRVRIT0Qg KkRIX2dldF9kZWZhdWx0X21ldGhvZCh2b2lkKQotIHsKLSAgICAgaWYgKCFkZWZhdWx0X0RIX21l dGhvZCkgewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgICAgIGlmIChGSVBTX21vZGUoKSkK LS0gICAgICAgICAgICByZXR1cm4gRklQU19kaF9vcGVuc3NsKCk7Ci0tICAgICAgICBlbHNlCi0t ICAgICAgICAgICAgcmV0dXJuIERIX09wZW5TU0woKTsKLS0jZWxzZQotICAgICAgICAgZGVmYXVs dF9ESF9tZXRob2QgPSBESF9PcGVuU1NMKCk7Ci0tI2VuZGlmCi0gICAgIH0KLSAgICAgcmV0dXJu IGRlZmF1bHRfREhfbWV0aG9kOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9k c2EvZHNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2FfZXJyLmMKLS0t LSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9lcnIuYy5maXBzCTIwMTUtMTItMDMgMTU6 MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2Ff ZXJyLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTg1NjI0MzUgKzAxMDAKLUBAIC03NCw2ICs3NCw4 IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRFNBX3N0cl9mdW5jdHNbXQotICAgICB7RVJSX0ZV TkMoRFNBX0ZfRE9fRFNBX1BSSU5UKSwgIkRPX0RTQV9QUklOVCJ9LAotICAgICB7RVJSX0ZVTkMo RFNBX0ZfRFNBUEFSQU1TX1BSSU5UKSwgIkRTQXBhcmFtc19wcmludCJ9LAotICAgICB7RVJSX0ZV TkMoRFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQKSwgIkRTQXBhcmFtc19wcmludF9mcCJ9LAotKyAg ICB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOKSwgImRzYV9idWlsdGluX2tleWdl biJ9LAotKyAgICB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4pLCAiZHNhX2J1 aWx0aW5fcGFyYW1nZW4ifSwKLSAgICAge0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFN R0VOMiksICJEU0FfQlVJTFRJTl9QQVJBTUdFTjIifSwKLSAgICAge0VSUl9GVU5DKERTQV9GX0RT QV9ET19TSUdOKSwgIkRTQV9kb19zaWduIn0sCi0gICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfRE9f VkVSSUZZKSwgIkRTQV9kb192ZXJpZnkifSwKLUBAIC0xMDksNiArMTExLDggQEAgc3RhdGljIEVS Ul9TVFJJTkdfREFUQSBEU0Ffc3RyX3JlYXNvbnNbXQotICAgICB7RVJSX1JFQVNPTihEU0FfUl9E RUNPREVfRVJST1IpLCAiZGVjb2RlIGVycm9yIn0sCi0gICAgIHtFUlJfUkVBU09OKERTQV9SX0lO VkFMSURfRElHRVNUX1RZUEUpLCAiaW52YWxpZCBkaWdlc3QgdHlwZSJ9LAotICAgICB7RVJSX1JF QVNPTihEU0FfUl9JTlZBTElEX1BBUkFNRVRFUlMpLCAiaW52YWxpZCBwYXJhbWV0ZXJzIn0sCi0r ICAgIHtFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpLCAia2V5IHNpemUgaW52YWxp ZCJ9LAotKyAgICB7RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpLCAia2V5IHNp emUgdG9vIHNtYWxsIn0sCi0gICAgIHtFUlJfUkVBU09OKERTQV9SX01JU1NJTkdfUEFSQU1FVEVS UyksICJtaXNzaW5nIHBhcmFtZXRlcnMifSwKLSAgICAge0VSUl9SRUFTT04oRFNBX1JfTU9EVUxV U19UT09fTEFSR0UpLCAibW9kdWx1cyB0b28gbGFyZ2UifSwKLSAgICAge0VSUl9SRUFTT04oRFNB X1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTKSwgIm5lZWQgbmV3IHNldHVwIHZhbHVlcyJ9LAotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZHNhL2RzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2Ev ZHNhX2dlbi5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDE1LTEyLTA0IDEzOjU3OjM5LjEy MjA2MTQ4MSArMDEwMAotQEAgLTkxLDYgKzkxLDE2IEBACi0gIyAgaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0gIyBlbmRpZgotIAotKyMgaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYyBpbnQg RklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJp dHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1k LCB1bnNpZ25lZCBjaGFyICpzZWVkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHNlZWRfbGVuLCBCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9yZXQsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOwot K3N0YXRpYyBpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBC SUdOVU0gKnEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJR05VTSAqKmdfcmV0 LCB1bnNpZ25lZCBsb25nICpoX3JldCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Qk5fR0VOQ0IgKmNiKTsKLSsjIGVuZGlmCi0rCi0gaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJz X2V4KERTQSAqcmV0LCBpbnQgYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgaW50IHNlZWRfbGVuLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3Jl dCwKLUBAIC0xMDYsOTcgKzExNiwxNjUgQEAgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KERTQSAqcmV0LAotICAgICBpZiAocmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4pCi0gICAgICAgICBy ZXR1cm4gcmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4ocmV0LCBiaXRzLCBzZWVkX2luLCBzZWVkX2xl biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyX3JldCwg aF9yZXQsIGNiKTsKLS0jIGlmZGVmIE9QRU5TU0xfRklQUwotLSAgICBlbHNlIGlmIChGSVBTX21v ZGUoKSkgewotLSAgICAgICAgcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgo cmV0LCBiaXRzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VlZF9pbiwgc2VlZF9sZW4sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLS0gICAgfQotLSMgZW5kaWYK LSAgICAgZWxzZSB7Ci0gICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kID0gYml0cyA+PSAyMDQ4 ID8gRVZQX3NoYTI1NigpIDogRVZQX3NoYTEoKTsKLSAgICAgICAgIHNpemVfdCBxYml0cyA9IEVW UF9NRF9zaXplKGV2cG1kKSAqIDg7Ci0gCi0gICAgICAgICByZXR1cm4gZHNhX2J1aWx0aW5fcGFy YW1nZW4ocmV0LCBiaXRzLCBxYml0cywgZXZwbWQsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VlZF9pbiwgc2VlZF9sZW4sIE5VTEwsIGNvdW50ZXJfcmV0LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRfaW4sIHNlZWRfbGVuLCBjb3VudGVy X3JldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoX3JldCwgY2IpOwot ICAgICB9Ci0gfQotIAotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0 aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qg c2VlZF9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3Jl dCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Qk5fR0VOQ0IgKmNiKQotK3sKLSsgICAgcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwg Yml0cywgcWJpdHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnBtZCwgc2Vl ZF9pbiwgc2VlZF9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVy X3JldCwgaF9yZXQsIGNiKTsKLSt9Ci0rIyBlbmRpZgotKwotIGludCBkc2FfYnVpbHRpbl9wYXJh bWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2Vl ZF9pbiwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLCB1bnNpZ25l ZCBjaGFyICpzZWVkX291dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRf bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25l ZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKQotIHsKLSAgICAgaW50IG9rID0gMDsKLSAgICAg dW5zaWduZWQgY2hhciBzZWVkW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsgICAgQklHTlVNICpn ID0gTlVMTCwgKnEgPSBOVUxMLCAqcCA9IE5VTEw7Ci0rICAgIHNpemVfdCBxc2l6ZSA9IHFiaXRz ID4+IDM7Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgCi0rIyBpZmRlZiBPUEVOU1NM X0ZJUFMKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJUFNl cnIoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKEZJUFNfbW9kdWxl X21vZGUoKSAmJgotKyAgICAgICAgKGJpdHMgIT0gMTAyNCB8fCBxYml0cyAhPSAxNjApICYmCi0r ICAgICAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDIyNCkgJiYKLSsgICAgICAgIChiaXRz ICE9IDIwNDggfHwgcWJpdHMgIT0gMjU2KSAmJiAoYml0cyAhPSAzMDcyIHx8IHFiaXRzICE9IDI1 NikpIHsKLSsgICAgICAgIERTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNBX1Jf S0VZX1NJWkVfSU5WQUxJRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKyMgZW5kaWYK LSsgICAgaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQotKyAgICAg ICAgc2VlZF9pbiA9IE5VTEw7ICAgICAgICAgLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0tIGln bm9yZSAqLwotKyAgICBpZiAoc2VlZF9sZW4gPiBzaXplb2Yoc2VlZCkpCi0rICAgICAgICBzZWVk X2xlbiA9IHNpemVvZihzZWVkKTsgLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBs YXJnZXIgU0VFRCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBidXQgb3Vy IGludGVybmFsIGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gMjU2IGJpdHMqLwotKyAgICBpZiAo c2VlZF9pbiAhPSBOVUxMKQotKyAgICAgICAgbWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVu KTsKLSsgICAgZWxzZQotKyAgICAgICAgc2VlZF9sZW4gPSAwOwotKyAgICAgICAgCi0rICAgIGlm ICgoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rIAot KyAgICBCTl9DVFhfc3RhcnQoY3R4KTsKLSsgCi0rICAgIGlmICghRklQU19kc2FfZ2VuZXJhdGVf cHEoY3R4LCBiaXRzLCBxYml0cywgZXZwbWQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VlZCwgc2VlZF9sZW4sICZwLCAmcSwgY291bnRlcl9yZXQsIGNiKSkKLSsgICAgICAgIGdv dG8gZXJyOwotKyAKLSsgICAgaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9nKGN0eCwgcCwgcSwgJmcs IGhfcmV0LCBjYikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgCi0rICAgIG9rID0gMTsKLSsgZXJy OgotKyAgICBpZiAob2spIHsKLSsgICAgICAgIGlmIChyZXQtPnApIHsKLSsgICAgICAgICAgICBC Tl9mcmVlKHJldC0+cCk7Ci0rICAgICAgICAgICAgcmV0LT5wID0gTlVMTDsKLSsgICAgICAgIH0K LSsgICAgICAgIGlmIChyZXQtPnEpIHsKLSsgICAgICAgICAgICBCTl9mcmVlKHJldC0+cSk7Ci0r ICAgICAgICAgICAgcmV0LT5xID0gTlVMTDsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmIChyZXQt PmcpIHsKLSsgICAgICAgICAgICBCTl9mcmVlKHJldC0+Zyk7Ci0rICAgICAgICAgICAgcmV0LT5n ID0gTlVMTDsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldC0+cCA9IEJOX2R1cChwKTsKLSsgICAg ICAgIHJldC0+cSA9IEJOX2R1cChxKTsKLSsgICAgICAgIHJldC0+ZyA9IEJOX2R1cChnKTsKLSsg ICAgICAgIGlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0g TlVMTCkKLSsgICAgICAgICAgICBvayA9IDA7Ci0rICAgIH0KLSsgICAgaWYgKGN0eCkgewotKyAg ICAgICAgQk5fQ1RYX2VuZChjdHgpOwotKyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKLSsgICAg fQotKyAgICByZXR1cm4gb2s7Ci0rfQotKwotKyMgaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0YXRp YwotKyMgZW5kaWYKLStpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVf dCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVW UF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBzZWVkX2xlbiwgQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpCi0rewot KyAgICBpbnQgb2sgPSAwOwotICAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVO R1RIXTsKLS0gICAgdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdLCBidWYy W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJ R0VTVF9MRU5HVEhdOwotICAgICBCSUdOVU0gKnIwLCAqVywgKlgsICpjLCAqdGVzdDsKLS0gICAg QklHTlVNICpnID0gTlVMTCwgKnEgPSBOVUxMLCAqcCA9IE5VTEw7Ci0tICAgIEJOX01PTlRfQ1RY ICptb250ID0gTlVMTDsKLS0gICAgaW50IGksIGssIG4gPSAwLCBtID0gMCwgcXNpemUgPSBxYml0 cyA+PiAzOwotKyAgICBCSUdOVU0gKnEgPSBOVUxMLCAqcCA9IE5VTEw7Ci0rICAgIGludCBpLCBr LCBiLCBuID0gMCwgbSA9IDAsIHFzaXplID0gcWJpdHMgPj4gMzsKLSAgICAgaW50IGNvdW50ZXIg PSAwOwotICAgICBpbnQgciA9IDA7Ci0tICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLS0gICAgdW5z aWduZWQgaW50IGggPSAyOwotIAotICAgICBpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEgg JiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEggJiYKLSAgICAgICAgIHFzaXplICE9IFNI QTI1Nl9ESUdFU1RfTEVOR1RIKQotICAgICAgICAgLyogaW52YWxpZCBxIHNpemUgKi8KLSAgICAg ICAgIHJldHVybiAwOwotIAotLSAgICBpZiAoZXZwbWQgPT0gTlVMTCkKLS0gICAgICAgIC8qIHVz ZSBTSEExIGFzIGRlZmF1bHQgKi8KLSsgICAgaWYgKGV2cG1kID09IE5VTEwpIHsKLSsgICAgICAg IGlmIChxYml0cyA8PSAxNjApCi0gICAgICAgICBldnBtZCA9IEVWUF9zaGExKCk7Ci0rICAgICAg ICBlbHNlIGlmIChxYml0cyA8PSAyMjQpCi0rICAgICAgICAgICAgZXZwbWQgPSBFVlBfc2hhMjI0 KCk7Ci0rICAgICAgICBlbHNlCi0rICAgICAgICAgICAgZXZwbWQgPSBFVlBfc2hhMjU2KCk7Ci0r ICAgIH0KLSAKLSAgICAgaWYgKGJpdHMgPCA1MTIpCi0gICAgICAgICBiaXRzID0gNTEyOwotIAot ICAgICBiaXRzID0gKGJpdHMgKyA2MykgLyA2NCAqIDY0OwotIAotLSAgICAvKgotLSAgICAgKiBO Qjogc2VlZF9sZW4gPT0gMCBpcyBzcGVjaWFsIGNhc2U6IGNvcHkgZ2VuZXJhdGVkIHNlZWQgdG8g c2VlZF9pbiBpZgotLSAgICAgKiBpdCBpcyBub3QgTlVMTC4KLS0gICAgICovCi0tICAgIGlmIChz ZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKLS0gICAgICAgIHNlZWRfaW4g PSBOVUxMOyAgICAgICAgIC8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KLS0g ICAgaWYgKHNlZWRfbGVuID4gKHNpemVfdClxc2l6ZSkKLS0gICAgICAgIHNlZWRfbGVuID0gcXNp emU7ICAgICAgIC8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyCi0tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTRUVELCBidXQgb3VyIGludGVybmFsIGJ1 ZmZlcnMgYXJlCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXN0cmljdGVk IHRvIDE2MCBiaXRzICovCi0tICAgIGlmIChzZWVkX2luICE9IE5VTEwpCi0tICAgICAgICBtZW1j cHkoc2VlZCwgc2VlZF9pbiwgc2VlZF9sZW4pOwotLQotLSAgICBpZiAoKG1vbnQgPSBCTl9NT05U X0NUWF9uZXcoKSkgPT0gTlVMTCkKLS0gICAgICAgIGdvdG8gZXJyOwotLQotLSAgICBpZiAoKGN0 eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKLS0gICAgICAgIGdvdG8gZXJyOwotLQotLSAgICBC Tl9DVFhfc3RhcnQoY3R4KTsKLS0KLSAgICAgcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0tICAgIGcg PSBCTl9DVFhfZ2V0KGN0eCk7Ci0gICAgIFcgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0tICAgIHEgPSBC Tl9DVFhfZ2V0KGN0eCk7Ci0rICAgICpxX3JldCA9IHEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gICAg IFggPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gICAgIGMgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0tICAgIHAg PSBCTl9DVFhfZ2V0KGN0eCk7Ci0rICAgICpwX3JldCA9IHAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0g ICAgIHRlc3QgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCi0gICAgIGlmICghQk5fbHNoaWZ0KHRlc3Qs IEJOX3ZhbHVlX29uZSgpLCBiaXRzIC0gMSkpCi0gICAgICAgICBnb3RvIGVycjsKLSAKLSsgICAg Lyogc3RlcCAzIG4gPSBcbGNlaWwgYml0cyAvIHFiaXRzIFxyY2VpbCAtIDEgKi8KLSsgICAgbiA9 IChiaXRzICsgcWJpdHMgLSAxKSAvIHFiaXRzIC0gMTsKLSsgICAgLyogc3RlcCA0IGIgPSBiaXRz IC0gMSAtIG4gKiBxYml0cyAqLwotKyAgICBiID0gYml0cyAtIDEgLSBuICogcWJpdHM7Ci0rCi0g ICAgIGZvciAoOzspIHsKLSAgICAgICAgIGZvciAoOzspIHsgICAgICAgICAgICAgIC8qIGZpbmQg cSAqLwotICAgICAgICAgICAgIGludCBzZWVkX2lzX3JhbmRvbTsKLSAKLS0gICAgICAgICAgICAv KiBzdGVwIDEgKi8KLSsgICAgICAgICAgICAvKiBzdGVwIDUgZ2VuZXJhdGUgc2VlZCAqLwotICAg ICAgICAgICAgIGlmICghQk5fR0VOQ0JfY2FsbChjYiwgMCwgbSsrKSkKLSAgICAgICAgICAgICAg ICAgZ290byBlcnI7Ci0gCi0tICAgICAgICAgICAgaWYgKCFzZWVkX2xlbiB8fCAhc2VlZF9pbikg ewotKyAgICAgICAgICAgIGlmICghc2VlZF9sZW4pIHsKLSAgICAgICAgICAgICAgICAgaWYgKFJB TkRfcHNldWRvX2J5dGVzKHNlZWQsIHFzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICBn b3RvIGVycjsKLSAgICAgICAgICAgICAgICAgc2VlZF9pc19yYW5kb20gPSAxOwotQEAgLTIwNiwy OSArMjg0LDE4IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJlIGJhZCAqLwotICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICBtZW1jcHkoYnVmLCBzZWVkLCBxc2l6ZSk7Ci0tICAgICAgICAgICAg bWVtY3B5KGJ1ZjIsIHNlZWQsIHFzaXplKTsKLS0gICAgICAgICAgICAvKiBwcmVjb21wdXRlICJT RUVEICsgMSIgZm9yIHN0ZXAgNzogKi8KLS0gICAgICAgICAgICBmb3IgKGkgPSBxc2l6ZSAtIDE7 IGkgPj0gMDsgaS0tKSB7Ci0tICAgICAgICAgICAgICAgIGJ1ZltpXSsrOwotLSAgICAgICAgICAg ICAgICBpZiAoYnVmW2ldICE9IDApCi0tICAgICAgICAgICAgICAgICAgICBicmVhazsKLS0gICAg ICAgICAgICB9Ci0gCi0tICAgICAgICAgICAgLyogc3RlcCAyICovCi0rICAgICAgICAgICAgLyog c3RlcCA2IFUgPSBoYXNoKHNlZWQpICovCi0gICAgICAgICAgICAgaWYgKCFFVlBfRGlnZXN0KHNl ZWQsIHFzaXplLCBtZCwgTlVMTCwgZXZwbWQsIE5VTEwpKQotICAgICAgICAgICAgICAgICBnb3Rv IGVycjsKLS0gICAgICAgICAgICBpZiAoIUVWUF9EaWdlc3QoYnVmLCBxc2l6ZSwgYnVmMiwgTlVM TCwgZXZwbWQsIE5VTEwpKQotLSAgICAgICAgICAgICAgICBnb3RvIGVycjsKLS0gICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgcXNpemU7IGkrKykKLS0gICAgICAgICAgICAgICAgbWRbaV0gXj0g YnVmMltpXTsKLSAKLS0gICAgICAgICAgICAvKiBzdGVwIDMgKi8KLSsgICAgICAgICAgICAvKiBz dGVwIDcgcSA9IDJeKHFiaXRzLTEpICsgVSArIDEgLSAoVSBtb2QgMikgKi8KLSAgICAgICAgICAg ICBtZFswXSB8PSAweDgwOwotICAgICAgICAgICAgIG1kW3FzaXplIC0gMV0gfD0gMHgwMTsKLSAg ICAgICAgICAgICBpZiAoIUJOX2JpbjJibihtZCwgcXNpemUsIHEpKQotICAgICAgICAgICAgICAg ICBnb3RvIGVycjsKLSAKLS0gICAgICAgICAgICAvKiBzdGVwIDQgKi8KLSsgICAgICAgICAgICAv KiBzdGVwIDggdGVzdCBmb3IgcHJpbWUgKDY0IHJvdW5kIG9mIFJhYmluLU1pbGxlcikgKi8KLSAg ICAgICAgICAgICByID0gQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocSwgRFNTX3ByaW1lX2NoZWNr cywgY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkX2lz X3JhbmRvbSwgY2IpOwotICAgICAgICAgICAgIGlmIChyID4gMCkKLUBAIC0yMzYsOCArMzAzLDYg QEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotICAgICAgICAgICAg IGlmIChyICE9IDApCi0gICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotIAotLSAgICAgICAgICAg IC8qIGRvIGEgY2FsbGJhY2sgY2FsbCAqLwotLSAgICAgICAgICAgIC8qIHN0ZXAgNSAqLwotICAg ICAgICAgfQotIAotICAgICAgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAwKSkKLUBAIC0y NDUsMTkgKzMxMCwxNiBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVf Ci0gICAgICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDMsIDApKQotICAgICAgICAgICAgIGdv dG8gZXJyOwotIAotLSAgICAgICAgLyogc3RlcCA2ICovCi0rICAgICAgICAvKiBzdGVwIDExICov Ci0gICAgICAgICBjb3VudGVyID0gMDsKLS0gICAgICAgIC8qICJvZmZzZXQgPSAyIiAqLwotLQot LSAgICAgICAgbiA9IChiaXRzIC0gMSkgLyAxNjA7Ci0rICAgICAgICAvKiAib2Zmc2V0ID0gMSIg Ki8KLSAKLSAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICBpZiAoKGNvdW50ZXIgIT0g MCkgJiYgIUJOX0dFTkNCX2NhbGwoY2IsIDAsIGNvdW50ZXIpKQotICAgICAgICAgICAgICAgICBn b3RvIGVycjsKLSAKLS0gICAgICAgICAgICAvKiBzdGVwIDcgKi8KLSsgICAgICAgICAgICAvKiBz dGVwIDExLjEsIDExLjIgb2J0YWluIFcgKi8KLSAgICAgICAgICAgICBCTl96ZXJvKFcpOwotLSAg ICAgICAgICAgIC8qIG5vdyAnYnVmJyBjb250YWlucyAiU0VFRCArIG9mZnNldCAtIDEiICovCi0g ICAgICAgICAgICAgZm9yIChrID0gMDsgayA8PSBuOyBrKyspIHsKLSAgICAgICAgICAgICAgICAg LyoKLSAgICAgICAgICAgICAgICAgICogb2J0YWluICJTRUVEICsgb2Zmc2V0ICsgayIgYnkgaW5j cmVtZW50aW5nOgotQEAgLTI3MSwzNiArMzMzLDM3IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdl bihEU0EgKnJldCwgc2l6ZV8KLSAgICAgICAgICAgICAgICAgaWYgKCFFVlBfRGlnZXN0KGJ1Ziwg cXNpemUsIG1kLCBOVUxMLCBldnBtZCwgTlVMTCkpCi0gICAgICAgICAgICAgICAgICAgICBnb3Rv IGVycjsKLSAKLS0gICAgICAgICAgICAgICAgLyogc3RlcCA4ICovCi0gICAgICAgICAgICAgICAg IGlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcjApKQotICAgICAgICAgICAgICAgICAgICAgZ290 byBlcnI7Ci0tICAgICAgICAgICAgICAgIGlmICghQk5fbHNoaWZ0KHIwLCByMCwgKHFzaXplIDw8 IDMpICogaykpCi0rICAgICAgICAgICAgICAgIGlmIChrID09IG4pCi0rICAgICAgICAgICAgICAg ICAgICBCTl9tYXNrX2JpdHMocjAsIGIpOwotKyAgICAgICAgICAgICAgICBpZiAoIUJOX2xzaGlm dChyMCwgcjAsIHFiaXRzICogaykpCi0gICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAg ICAgICAgICAgICAgICAgaWYgKCFCTl9hZGQoVywgVywgcjApKQotICAgICAgICAgICAgICAgICAg ICAgZ290byBlcnI7Ci0gICAgICAgICAgICAgfQotIAotLSAgICAgICAgICAgIC8qIG1vcmUgb2Yg c3RlcCA4ICovCi0tICAgICAgICAgICAgaWYgKCFCTl9tYXNrX2JpdHMoVywgYml0cyAtIDEpKQot LSAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgICAgICAvKiBzdGVwIDExLjMgWCA9 IFcgKyAyXihMLTEpICovCi0gICAgICAgICAgICAgaWYgKCFCTl9jb3B5KFgsIFcpKQotICAgICAg ICAgICAgICAgICBnb3RvIGVycjsKLSAgICAgICAgICAgICBpZiAoIUJOX2FkZChYLCBYLCB0ZXN0 KSkKLSAgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0gCi0tICAgICAgICAgICAgLyogc3RlcCA5 ICovCi0rICAgICAgICAgICAgLyogc3RlcCAxMS40IGMgPSBYIG1vZCAyKnEgKi8KLSAgICAgICAg ICAgICBpZiAoIUJOX2xzaGlmdDEocjAsIHEpKQotICAgICAgICAgICAgICAgICBnb3RvIGVycjsK LSAgICAgICAgICAgICBpZiAoIUJOX21vZChjLCBYLCByMCwgY3R4KSkKLSAgICAgICAgICAgICAg ICAgZ290byBlcnI7Ci0rCi0rICAgICAgICAgICAgLyogc3RlcCAxMS41IHAgPSBYIC0gKGMgLSAx KSAqLwotICAgICAgICAgICAgIGlmICghQk5fc3ViKHIwLCBjLCBCTl92YWx1ZV9vbmUoKSkpCi0g ICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotICAgICAgICAgICAgIGlmICghQk5fc3ViKHAsIFgs IHIwKSkKLSAgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0gCi0tICAgICAgICAgICAgLyogc3Rl cCAxMCAqLwotKyAgICAgICAgICAgIC8qIHN0ZXAgMTEuNiAqLwotICAgICAgICAgICAgIGlmIChC Tl9jbXAocCwgdGVzdCkgPj0gMCkgewotLSAgICAgICAgICAgICAgICAvKiBzdGVwIDExICovCi0r ICAgICAgICAgICAgICAgIC8qIHN0ZXAgMTEuNyAqLwotICAgICAgICAgICAgICAgICByID0gQk5f aXNfcHJpbWVfZmFzdHRlc3RfZXgocCwgRFNTX3ByaW1lX2NoZWNrcywgY3R4LCAxLCBjYik7Ci0g ICAgICAgICAgICAgICAgIGlmIChyID4gMCkKLSAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5k OyAgIC8qIGZvdW5kIGl0ICovCi1AQCAtMzA4LDEyICszNzEsMTIgQEAgaW50IGRzYV9idWlsdGlu X3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7 Ci0gICAgICAgICAgICAgfQotIAotLSAgICAgICAgICAgIC8qIHN0ZXAgMTMgKi8KLSsgICAgICAg ICAgICAvKiBzdGVwIDExLjkgKi8KLSAgICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAg ICAgLyogIm9mZnNldCA9IG9mZnNldCArIG4gKyAxIiAqLwotIAotLSAgICAgICAgICAgIC8qIHN0 ZXAgMTQgKi8KLS0gICAgICAgICAgICBpZiAoY291bnRlciA+PSA0MDk2KQotKyAgICAgICAgICAg IC8qIHN0ZXAgMTIgKi8KLSsgICAgICAgICAgICBpZiAoY291bnRlciA+PSA0ICogYml0cykKLSAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICB9Ci0gICAgIH0KLUBAIC0zMjEsNyArMzg0 LDMzIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAgICAgaWYg KCFCTl9HRU5DQl9jYWxsKGNiLCAyLCAxKSkKLSAgICAgICAgIGdvdG8gZXJyOwotIAotLSAgICAv KiBXZSBub3cgbmVlZCB0byBnZW5lcmF0ZSBnICovCi0rICAgIG9rID0gMTsKLSsgZXJyOgotKyAg ICBpZiAob2spIHsKLSsgICAgICAgIGlmIChjb3VudGVyX3JldCAhPSBOVUxMKQotKyAgICAgICAg ICAgICpjb3VudGVyX3JldCA9IGNvdW50ZXI7Ci0rICAgIH0KLSsgICAgcmV0dXJuIG9rOwotK30K LSsKLSsjIGlmbmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMKLSsjIGVuZGlmCi0raW50IEZJUFNf ZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAotKyAgICAg ICAgICAgICAgICAgICAgICAgIEJJR05VTSAqKmdfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwg Qk5fR0VOQ0IgKmNiKQotK3sKLSsgICAgaW50IG9rID0gMDsKLSsgICAgQklHTlVNICpyMCwgKnRl c3QsICpnID0gTlVMTDsKLSsgICAgQk5fTU9OVF9DVFggKm1vbnQ7Ci0rICAgIHVuc2lnbmVkIGlu dCBoID0gMjsKLSsKLSsgICAgaWYgKChtb250ID0gQk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwp Ci0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rICAg ICpnX3JldCA9IGcgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rICAgIHRlc3QgPSBCTl9DVFhfZ2V0KGN0 eCk7Ci0rCi0gICAgIC8qIFNldCByMD0ocC0xKS9xICovCi0gICAgIGlmICghQk5fc3ViKHRlc3Qs IHAsIEJOX3ZhbHVlX29uZSgpKSkKLSAgICAgICAgIGdvdG8gZXJyOwotQEAgLTM1MCw0NiArNDM5 LDE0IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAgICAgb2sg PSAxOwotICBlcnI6Ci0gICAgIGlmIChvaykgewotLSAgICAgICAgaWYgKHJldC0+cCkKLS0gICAg ICAgICAgICBCTl9mcmVlKHJldC0+cCk7Ci0tICAgICAgICBpZiAocmV0LT5xKQotLSAgICAgICAg ICAgIEJOX2ZyZWUocmV0LT5xKTsKLS0gICAgICAgIGlmIChyZXQtPmcpCi0tICAgICAgICAgICAg Qk5fZnJlZShyZXQtPmcpOwotLSAgICAgICAgcmV0LT5wID0gQk5fZHVwKHApOwotLSAgICAgICAg cmV0LT5xID0gQk5fZHVwKHEpOwotLSAgICAgICAgcmV0LT5nID0gQk5fZHVwKGcpOwotLSAgICAg ICAgaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8IHJldC0+ZyA9PSBOVUxM KSB7Ci0tICAgICAgICAgICAgb2sgPSAwOwotLSAgICAgICAgICAgIGdvdG8gZXJyOwotLSAgICAg ICAgfQotLSAgICAgICAgaWYgKGNvdW50ZXJfcmV0ICE9IE5VTEwpCi0tICAgICAgICAgICAgKmNv dW50ZXJfcmV0ID0gY291bnRlcjsKLSAgICAgICAgIGlmIChoX3JldCAhPSBOVUxMKQotICAgICAg ICAgICAgICpoX3JldCA9IGg7Ci0tICAgICAgICBpZiAoc2VlZF9vdXQpCi0tICAgICAgICAgICAg bWVtY3B5KHNlZWRfb3V0LCBzZWVkLCBxc2l6ZSk7Ci0tICAgIH0KLS0gICAgaWYgKGN0eCkgewot LSAgICAgICAgQk5fQ1RYX2VuZChjdHgpOwotLSAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKLSAg ICAgfQotICAgICBpZiAobW9udCAhPSBOVUxMKQotICAgICAgICAgQk5fTU9OVF9DVFhfZnJlZSht b250KTsKLSAgICAgcmV0dXJuIG9rOwotIH0KLSAKLS0jIGlmZGVmIE9QRU5TU0xfRklQUwotLSMg IHVuZGVmIGZpcHNfZHNhX2J1aWx0aW5fcGFyYW1nZW4yCi0tZXh0ZXJuIGludCBmaXBzX2RzYV9i dWlsdGluX3BhcmFtZ2VuMihEU0EgKnJldCwgc2l6ZV90IEwsIHNpemVfdCBOLAotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCwKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNl ZWRfaW4sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2Vl ZF9sZW4sIGludCBpZHgsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICpzZWVkX291dCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LAotLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKTsKLS0jIGVuZGlmCi0t Ci0gLyoKLSAgKiBUaGlzIGlzIGEgcGFyYW1ldGVyIGdlbmVyYXRpb24gYWxnb3JpdGhtIGZvciB0 aGUgRFNBMiBhbGdvcml0aG0gYXMKLSAgKiBkZXNjcmliZWQgaW4gRklQUyAxODYtMy4KLUBAIC00 MTUsMTQgKzQ3Miw2IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbjIoRFNBICpyZXQsIHNpemUK LSAgICAgRVZQX01EX0NUWCBtY3R4OwotICAgICB1bnNpZ25lZCBpbnQgaCA9IDI7Ci0gCi0tIyBp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0KLS0gICAgaWYgKEZJUFNfbW9kZSgpKQotLSAgICAgICAgcmV0 dXJuIGZpcHNfZHNhX2J1aWx0aW5fcGFyYW1nZW4yKHJldCwgTCwgTiwgZXZwbWQsCi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZF9pbiwgc2VlZF9sZW4sIGlk eCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkX291dCwg Y291bnRlcl9yZXQsIGhfcmV0LCBjYik7Ci0tIyBlbmRpZgotLQotICAgICBFVlBfTURfQ1RYX2lu aXQoJm1jdHgpOwotIAotICAgICBpZiAoZXZwbWQgPT0gTlVMTCkgewotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2Ev ZHNhLmgKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAxNS0xMi0w NCAxMzo1NTo1MS43NDA1NTczNTEgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNh L2RzYS5oCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU4NTYyNDM1ICswMTAwCi1AQCAtODgsNiArODgs OCBAQAotICMgIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTICAgMTAwMDAKLSAj IGVuZGlmCi0gCi0rIyBkZWZpbmUgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEw MjQKLSsKLSAjIGRlZmluZSBEU0FfRkxBR19DQUNIRV9NT05UX1AgICAweDAxCi0gLyoKLSAgKiBu ZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EgaW1wbGVtZW50YXRpb24gbm93IHVzZXMg Y29uc3RhbnQgdGltZQotQEAgLTI2NSw2ICsyNjcsMjAgQEAgaW50IERTQV9wcmludF9mcChGSUxF ICpicCwgY29uc3QgRFNBICp4LAotIERIICpEU0FfZHVwX0RIKGNvbnN0IERTQSAqcik7Ci0gIyBl bmRpZgotIAotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5fcGFy YW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZWVkX2xlbiwgaW50ICpjb3VudGVyX3JldCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VO Q0IgKmNiKTsKLStpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVfdCBi aXRzLCBzaXplX3QgcWJpdHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9N RCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg IGludCBzZWVkX2xlbiwgQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpOwotK2ludCBG SVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklH TlVNICoqZ19yZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg KmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotKyMgZW5kaWYKLSsKLSAjIGRlZmluZSBFVlBfUEtFWV9D VFhfc2V0X2RzYV9wYXJhbWdlbl9iaXRzKGN0eCwgbmJpdHMpIFwKLSAgICAgICAgIEVWUF9QS0VZ X0NUWF9jdHJsKGN0eCwgRVZQX1BLRVlfRFNBLCBFVlBfUEtFWV9PUF9QQVJBTUdFTiwgXAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX1BLRVlfQ1RSTF9EU0FfUEFSQU1HRU5f QklUUywgbmJpdHMsIE5VTEwpCi1AQCAtMjg3LDExICszMDMsMTQgQEAgdm9pZCBFUlJfbG9hZF9E U0Ffc3RyaW5ncyh2b2lkKTsKLSAjIGRlZmluZSBEU0FfRl9ET19EU0FfUFJJTlQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTA0Ci0gIyBkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5U ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAotICMgZGVmaW5lIERTQV9GX0RTQVBBUkFN U19QUklOVF9GUCAgICAgICAgICAgICAgICAgICAgICAgICAxMDEKLS0jIGRlZmluZSBEU0FfRl9E U0FfQlVJTFRJTl9QQVJBTUdFTjIgICAgICAgICAgICAgICAgICAgICAgMTI2Ci0rIyBkZWZpbmUg RFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOICAgICAgICAgICAgICAgICAgICAgICAgIDEyNAotKyMg ZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOICAgICAgICAgICAgICAgICAgICAgICAx MjMKLSsjIGRlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIgICAgICAgICAgICAgICAg ICAgICAgMjI2Ci0gIyBkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDExMgotICMgZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxMTMKLS0jIGRlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZ ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI0Ci0tIyBkZWZpbmUgRFNBX0ZfRFNBX0dFTkVS QVRFX1BBUkFNRVRFUlNfRVggICAgICAgICAgICAgICAgIDEyMwotKyMgZGVmaW5lIERTQV9GX0RT QV9HRU5FUkFURV9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjYKLSsjIGRlZmluZSBE U0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSU19FWCAgICAgICAgICAgICAgICAgMTI3Ci0rIyBk ZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMgICAvKiB1bnVzZWQgKi8gICAgIDEy NQotICMgZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxMDMKLSAjIGRlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTE5Ci0gIyBkZWZpbmUgRFNBX0ZfRFNBX1BSSU5UX0ZQICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEwNQotQEAgLTMxNywxMiArMzM2LDE2IEBAIHZvaWQgRVJSX2xv YWRfRFNBX3N0cmluZ3Modm9pZCk7Ci0gIyBkZWZpbmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9S X0tFWV9TSVpFICAgICAgICAgICAgICAgIDEwMAotICMgZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJP UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQKLSAjIGRlZmluZSBEU0FfUl9JTlZB TElEX0RJR0VTVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgMTA2Ci0tIyBkZWZpbmUgRFNB X1JfSU5WQUxJRF9QQVJBTUVURVJTICAgICAgICAgICAgICAgICAgICAgICAgIDExMgotKyMgZGVm aW5lIERTQV9SX0lOVkFMSURfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAyMTIK LSsjIGRlZmluZSBEU0FfUl9LRVlfU0laRV9JTlZBTElEICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTEzCi0rIyBkZWZpbmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMICAgICAgICAgICAgICAg ICAgICAgICAgIDExMAotICMgZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUyAgICAgICAg ICAgICAgICAgICAgICAgICAxMDEKLSAjIGRlZmluZSBEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSAg ICAgICAgICAgICAgICAgICAgICAgICAgMTAzCi0tIyBkZWZpbmUgRFNBX1JfTkVFRF9ORVdfU0VU VVBfVkFMVUVTICAgICAgICAgICAgICAgICAgICAgIDExMAotKyMgZGVmaW5lIERTQV9SX05FRURf TkVXX1NFVFVQX1ZBTFVFUyAgICAgICAgICAgICAgICAgICAgICAxMTIKLSAjIGRlZmluZSBEU0Ff Ul9OT05fRklQU19EU0FfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgMTExCi0rIyBkZWZp bmUgRFNBX1JfTk9OX0ZJUFNfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMQot ICMgZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUICAgICAgICAgICAgICAgICAgICAgICAg ICAxMDcKLSsjIGRlZmluZSBEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RF IC8qIHVudXNlZCAqLyAxMTIKLSAjIGRlZmluZSBEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJS T1IgICAgICAgICAgICAgICAgICAgMTA1Ci0gIyBkZWZpbmUgRFNBX1JfUV9OT1RfUFJJTUUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2Rz YV9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMJMjAx NS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZHNhL2RzYV9rZXkuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1ODU2MjQzNSArMDEwMAotQEAg LTY2LDYgKzY2LDM0IEBACi0gCi0gIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSAjICBpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjICBpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotK3N0YXRpYyBp bnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCi0rewotKyAgICBFVlBfUEtFWSAqcGs7Ci0rICAg IHVuc2lnbmVkIGNoYXIgdGJzW10gPSAiRFNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwotKyAgICBp bnQgcmV0ID0gMDsKLSsKLSsgICAgaWYgKChwayA9IEVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQot KyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIEVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOwot KwotKyAgICBpZiAoZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLCBOVUxMLCAw LCBOVUxMLCAwLCBOVUxMKSkKLSsgICAgICAgIHJldCA9IDE7Ci0rCi0rIGVycjoKLSsgICAgaWYg KHJldCA9PSAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSwgRklQ U19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2Zh aWwoKTsKLSsgICAgfQotKwotKyAgICBpZiAocGspCi0rICAgICAgICBFVlBfUEtFWV9mcmVlKHBr KTsKLSsKLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0gIyBlbmRpZgotIAotIHN0YXRpYyBpbnQg ZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKLUBAIC04MSwxMCArMTA5LDYgQEAgaW50IERT QV9nZW5lcmF0ZV9rZXkoRFNBICpkc2EpCi0gIyBlbmRpZgotICAgICBpZiAoZHNhLT5tZXRoLT5k c2Ffa2V5Z2VuKQotICAgICAgICAgcmV0dXJuIGRzYS0+bWV0aC0+ZHNhX2tleWdlbihkc2EpOwot LSMgaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGlmIChGSVBTX21vZGUoKSkKLS0gICAgICAgIHJl dHVybiBGSVBTX2RzYV9nZW5lcmF0ZV9rZXkoZHNhKTsKLS0jIGVuZGlmCi0gICAgIHJldHVybiBk c2FfYnVpbHRpbl9rZXlnZW4oZHNhKTsKLSB9Ci0gCi1AQCAtOTQsNiArMTE4LDE0IEBAIHN0YXRp YyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotICAgICBCTl9DVFggKmN0eCA9IE5V TEw7Ci0gICAgIEJJR05VTSAqcHViX2tleSA9IE5VTEwsICpwcml2X2tleSA9IE5VTEw7Ci0gCi0r IyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFn cyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRz YS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBE U0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwp OwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsjIGVuZGlmCi0rCi0gICAgIGlmICgoY3R4 ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKQotICAgICAgICAgZ290byBlcnI7Ci0gCi1AQCAtMTMx LDYgKzE2MywxMyBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKLSAK LSAgICAgZHNhLT5wcml2X2tleSA9IHByaXZfa2V5OwotICAgICBkc2EtPnB1Yl9rZXkgPSBwdWJf a2V5OwotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSAmJiAhZmlw c19jaGVja19kc2EoZHNhKSkgewotKyAgICAgICAgZHNhLT5wdWJfa2V5ID0gTlVMTDsKLSsgICAg ICAgIGRzYS0+cHJpdl9rZXkgPSBOVUxMOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsj IGVuZGlmCi0gICAgIG9rID0gMTsKLSAKLSAgZXJyOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2RzYS9kc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9s aWIuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZpcHMJMjAxNS0x Mi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v ZHNhL2RzYV9saWIuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1OTU2MjQ1OCArMDEwMAotQEAgLTg2 LDE0ICs4Niw3IEBAIHZvaWQgRFNBX3NldF9kZWZhdWx0X21ldGhvZChjb25zdCBEU0FfTUUKLSBj b25zdCBEU0FfTUVUSE9EICpEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kKHZvaWQpCi0gewotICAgICBp ZiAoIWRlZmF1bHRfRFNBX21ldGhvZCkgewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgICAg IGlmIChGSVBTX21vZGUoKSkKLS0gICAgICAgICAgICByZXR1cm4gRklQU19kc2Ffb3BlbnNzbCgp OwotLSAgICAgICAgZWxzZQotLSAgICAgICAgICAgIHJldHVybiBEU0FfT3BlblNTTCgpOwotLSNl bHNlCi0gICAgICAgICBkZWZhdWx0X0RTQV9tZXRob2QgPSBEU0FfT3BlblNTTCgpOwotLSNlbmRp ZgotICAgICB9Ci0gICAgIHJldHVybiBkZWZhdWx0X0RTQV9tZXRob2Q7Ci0gfQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2FfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2RzYS9kc2FfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2Ff bG9jbC5oLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS43NDI1NTczOTggKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9sb2NsLmgJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTk1 NjI0NTggKzAxMDAKLUBAIC01Niw3ICs1Niw3IEBACi0gCi0gaW50IGRzYV9idWlsdGluX3BhcmFt Z2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVk X2luLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2VlZF9sZW4sIHVuc2lnbmVk IGNoYXIgKnNlZWRfb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2VlZF9s ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIHVuc2lnbmVk IGxvbmcgKmhfcmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBCTl9HRU5DQiAqY2IpOwot IAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMJMjAxNS0xMi0wNCAx Mzo1NTo1MS45NTk1NjI0NTggKzAxMDAKLUBAIC02NSw2ICs2NSw5IEBACi0gI2luY2x1ZGUgPG9w ZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2FzbjEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5z aWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4sIERTQSAqZHNhKTsKLSBzdGF0aWMgaW50IGRzYV9z aWduX3NldHVwKERTQSAqZHNhLCBCTl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAsCi1AQCAt ODMsNyArODYsNyBAQCBzdGF0aWMgRFNBX01FVEhPRCBvcGVuc3NsX2RzYV9tZXRoID0gewotICAg ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogZHNhX2JuX21vZF9leHAsICovCi0gICAg IGRzYV9pbml0LAotICAgICBkc2FfZmluaXNoLAotLSAgICAwLAotKyAgICBEU0FfRkxBR19GSVBT X01FVEhPRCwKLSAgICAgTlVMTCwKLSAgICAgTlVMTCwKLSAgICAgTlVMTAotQEAgLTE0MCw2ICsx NDMsMTkgQEAgc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbgotICAgICBE U0FfU0lHICpyZXQgPSBOVUxMOwotICAgICBpbnQgbm9yZWRvID0gMDsKLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Ci0rICAgICAgICBG SVBTZXJyKEZJUFNfRl9EU0FfRE9fU0lHTiwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsK LSsgICAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGlmIChGSVBTX21vZGUoKSAm JiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykKLSsgICAgICAgICYmIChC Tl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkg ewotKyAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9ET19TSUdOLCBEU0FfUl9LRVlfU0laRV9UT09f U01BTEwpOwotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsjZW5kaWYKLSsKLSAgICAg Qk5faW5pdCgmbSk7Ci0gICAgIEJOX2luaXQoJnhyKTsKLSAKLUBAIC0zMzAsNiArMzQ2LDE4IEBA IHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotICAgICAgICAgRFNBZXJy KERTQV9GX0RTQV9ET19WRVJJRlksIERTQV9SX0JBRF9RX1ZBTFVFKTsKLSAgICAgICAgIHJldHVy biAtMTsKLSAgICAgfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksIEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4gLTE7Ci0rICAgIH0K LSsKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9G SVBTX0FMTE9XKQotKyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RP X1ZFUklGWSwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAgICAgIHJldHVybiAtMTsK LSsgICAgfQotKyNlbmRpZgotIAotICAgICBpZiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA+IE9QRU5T U0xfRFNBX01BWF9NT0RVTFVTX0JJVFMpIHsKLSAgICAgICAgIERTQWVycihEU0FfRl9EU0FfRE9f VkVSSUZZLCBEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtNDEwLDYgKzQzOCw5IEBAIHN0 YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZAotIAotIHN0YXRpYyBpbnQgZHNh X2luaXQoRFNBICpkc2EpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgRklQU19zZWxm dGVzdF9jaGVjaygpOwotKyNlbmRpZgotICAgICBkc2EtPmZsYWdzIHw9IERTQV9GTEFHX0NBQ0hF X01PTlRfUDsKLSAgICAgcmV0dXJuICgxKTsKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2Ff cG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcwky MDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9kc2EvZHNhX3BtZXRoLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTk1NjI0NTggKzAxMDAK LUBAIC0yNTMsNyArMjUzLDcgQEAgc3RhdGljIGludCBwa2V5X2RzYV9wYXJhbWdlbihFVlBfUEtF WV9DVAotICAgICBpZiAoIWRzYSkKLSAgICAgICAgIHJldHVybiAwOwotICAgICByZXQgPSBkc2Ff YnVpbHRpbl9wYXJhbWdlbihkc2EsIGRjdHgtPm5iaXRzLCBkY3R4LT5xYml0cywgZGN0eC0+cG1k LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCBO VUxMLCBwY2IpOwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxM LCBOVUxMLCBwY2IpOwotICAgICBpZiAocmV0KQotICAgICAgICAgRVZQX1BLRVlfYXNzaWduX0RT QShwa2V5LCBkc2EpOwotICAgICBlbHNlCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v ZHNhL2RzYXRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhdGVzdC5jCi0t LS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcwkyMDE1LTEyLTAzIDE1 OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNh dGVzdC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU5NTYyNDU4ICswMTAwCi1AQCAtMTAwLDM2ICsx MDAsNDEgQEAgc3RhdGljIGludCBNU19DQUxMQkFDSyBkc2FfY2IoaW50IHAsIGludAotICAqIFBV QiAxODYgYW5kIGFsc28gYXBwZWFyIGluIEFwcGVuZGl4IDUgdG8gRklQUyBQSUIgMTg2LTEKLSAg Ki8KLSBzdGF0aWMgdW5zaWduZWQgY2hhciBzZWVkWzIwXSA9IHsKLS0gICAgMHhkNSwgMHgwMSwg MHg0ZSwgMHg0YiwgMHg2MCwgMHhlZiwgMHgyYiwgMHhhOCwgMHhiNiwgMHgyMSwgMHgxYiwgMHg0 MCwKLS0gICAgMHg2MiwgMHhiYSwgMHgzMiwgMHgyNCwgMHhlMCwgMHg0MiwgMHg3ZCwgMHhkMywK LSsgICAgMHgwMiwgMHg0NywgMHgxMSwgMHg5MiwgMHgxMSwgMHg4OCwgMHhDOCwgMHhGQiwgMHhB RiwgMHg0OCwgMHg0QywgMHg2MiwKLSsgICAgMHhERiwgMHhBNSwgMHhCRSwgMHhBMCwgMHhBNCwg MHgzQywgMHg1NiwgMHhFMywKLSB9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW10g PSB7Ci0tICAgIDB4OGQsIDB4ZjIsIDB4YTQsIDB4OTQsIDB4NDksIDB4MjIsIDB4NzYsIDB4YWEs Ci0tICAgIDB4M2QsIDB4MjUsIDB4NzUsIDB4OWIsIDB4YjAsIDB4NjgsIDB4NjksIDB4Y2IsCi0t ICAgIDB4ZWEsIDB4YzAsIDB4ZDgsIDB4M2EsIDB4ZmIsIDB4OGQsIDB4MGMsIDB4ZjcsCi0tICAg IDB4Y2IsIDB4YjgsIDB4MzIsIDB4NGYsIDB4MGQsIDB4NzgsIDB4ODIsIDB4ZTUsCi0tICAgIDB4 ZDAsIDB4NzYsIDB4MmYsIDB4YzUsIDB4YjcsIDB4MjEsIDB4MGUsIDB4YWYsCi0tICAgIDB4YzIs IDB4ZTksIDB4YWQsIDB4YWMsIDB4MzIsIDB4YWIsIDB4N2EsIDB4YWMsCi0tICAgIDB4NDksIDB4 NjksIDB4M2QsIDB4ZmIsIDB4ZjgsIDB4MzcsIDB4MjQsIDB4YzIsCi0tICAgIDB4ZWMsIDB4MDcs IDB4MzYsIDB4ZWUsIDB4MzEsIDB4YzgsIDB4MDIsIDB4OTEsCi0rICAgIDB4QUMsIDB4Q0IsIDB4 MUUsIDB4NjMsIDB4NjAsIDB4NjksIDB4MEMsIDB4RkIsIDB4MDYsIDB4MTksIDB4NjgsIDB4M0Us Ci0rICAgIDB4QTUsIDB4MDEsIDB4NUEsIDB4QTIsIDB4MTUsIDB4NUMsIDB4RTIsIDB4OTksIDB4 MkQsIDB4RDUsIDB4MzAsIDB4OTksCi0rICAgIDB4N0UsIDB4NUYsIDB4OEQsIDB4RTIsIDB4Rjcs IDB4QzYsIDB4MkUsIDB4OEQsIDB4QTMsIDB4OUYsIDB4NTgsIDB4QUQsCi0rICAgIDB4RDYsIDB4 QTksIDB4N0QsIDB4MEUsIDB4MEQsIDB4OTUsIDB4NTMsIDB4QTYsIDB4NzEsIDB4M0EsIDB4REUs IDB4QUIsCi0rICAgIDB4QUMsIDB4RTksIDB4RjQsIDB4MzYsIDB4NTUsIDB4OUUsIDB4QjksIDB4 RDYsIDB4OTMsIDB4QkYsIDB4RjMsIDB4MTgsCi0rICAgIDB4MUMsIDB4MTQsIDB4N0IsIDB4QTUs IDB4NDIsIDB4MkUsIDB4Q0QsIDB4MDAsIDB4RUIsIDB4MzUsIDB4M0IsIDB4MUIsCi0rICAgIDB4 QTgsIDB4NTEsIDB4QkIsIDB4RTEsIDB4NTgsIDB4NDIsIDB4ODUsIDB4ODQsIDB4MjIsIDB4QTcs IDB4OTcsIDB4NUUsCi0rICAgIDB4OTksIDB4NkYsIDB4MzgsIDB4MjAsIDB4QkQsIDB4OUQsIDB4 QjYsIDB4RDksIDB4MzMsIDB4MzcsIDB4MkEsIDB4RkQsCi0rICAgIDB4QkIsIDB4RDQsIDB4QkMs IDB4MEMsIDB4MkEsIDB4NjcsIDB4Q0IsIDB4OUYsIDB4QkIsIDB4REYsIDB4RjksIDB4OTMsCi0r ICAgIDB4QUEsIDB4RDYsIDB4RjAsIDB4RDYsIDB4OTUsIDB4MEIsIDB4NUQsIDB4NjUsIDB4MTQs IDB4RDAsIDB4MTgsIDB4OUQsCi0rICAgIDB4QzYsIDB4QUYsIDB4RjAsIDB4QzYsIDB4MzcsIDB4 N0MsIDB4RjMsIDB4NUYsCi0gfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdID0g ewotLSAgICAweGM3LCAweDczLCAweDIxLCAweDhjLCAweDczLCAweDdlLCAweGM4LCAweGVlLAot LSAgICAweDk5LCAweDNiLCAweDRmLCAweDJkLCAweGVkLCAweDMwLCAweGY0LCAweDhlLAotLSAg ICAweGRhLCAweGNlLCAweDkxLCAweDVmLAotKyAgICAweEUzLCAweDhFLCAweDVFLCAweDZELCAw eEJGLCAweDJCLCAweDc5LCAweEY4LCAweEM1LCAweDRCLCAweDg5LCAweDhCLAotKyAgICAweEJB LCAweDJELCAweDkxLCAweEMzLCAweDZDLCAweDgwLCAweEFDLCAweDg3LAotIH07Ci0gCi0gc3Rh dGljIHVuc2lnbmVkIGNoYXIgb3V0X2dbXSA9IHsKLS0gICAgMHg2MiwgMHg2ZCwgMHgwMiwgMHg3 OCwgMHgzOSwgMHhlYSwgMHgwYSwgMHgxMywKLS0gICAgMHg0MSwgMHgzMSwgMHg2MywgMHhhNSwg MHg1YiwgMHg0YywgMHhiNSwgMHgwMCwKLS0gICAgMHgyOSwgMHg5ZCwgMHg1NSwgMHgyMiwgMHg5 NSwgMHg2YywgMHhlZiwgMHhjYiwKLS0gICAgMHgzYiwgMHhmZiwgMHgxMCwgMHhmMywgMHg5OSwg MHhjZSwgMHgyYywgMHgyZSwKLS0gICAgMHg3MSwgMHhjYiwgMHg5ZCwgMHhlNSwgMHhmYSwgMHgy NCwgMHhiYSwgMHhiZiwKLS0gICAgMHg1OCwgMHhlNSwgMHhiNywgMHg5NSwgMHgyMSwgMHg5Miwg MHg1YywgMHg5YywKLS0gICAgMHhjNCwgMHgyZSwgMHg5ZiwgMHg2ZiwgMHg0NiwgMHg0YiwgMHgw OCwgMHg4YywKLS0gICAgMHhjNSwgMHg3MiwgMHhhZiwgMHg1MywgMHhlNiwgMHhkNywgMHg4OCwg MHgwMiwKLSsgICAgMHg0MiwgMHg0QSwgMHgwNCwgMHg0RSwgMHg3OSwgMHhCNCwgMHg5OSwgMHg3 RiwgMHhGRCwgMHg1OCwgMHgzNiwgMHgyQywKLSsgICAgMHgxQiwgMHg1RiwgMHgxOCwgMHg3RSwg MHgwRCwgMHhDQywgMHhBQiwgMHg4MSwgMHhDOSwgMHg1RCwgMHgxMCwgMHhDRSwKLSsgICAgMHg0 RSwgMHg4MCwgMHg3RSwgMHg1OCwgMHhCNCwgMHgzNCwgMHgzRiwgMHhBNywgMHg0NSwgMHhDNywg MHhBQSwgMHgzNiwKLSsgICAgMHgyNCwgMHg0MiwgMHhBOSwgMHgzQiwgMHhFOCwgMHgwRSwgMHgw NCwgMHgwMiwgMHgyRCwgMHhGQiwgMHhBNiwgMHgxMywKLSsgICAgMHhCOSwgMHhCNSwgMHgxNSwg MHhBNSwgMHg1NiwgMHgwNywgMHgzNSwgMHhFNCwgMHgwMywgMHhCNiwgMHg3OSwgMHg3QywKLSsg ICAgMHg2MiwgMHhERCwgMHhERiwgMHgzRiwgMHg3MSwgMHgzQSwgMHg5RCwgMHg4QiwgMHhDNCwg MHhGNiwgMHhFNywgMHgxRCwKLSsgICAgMHg1MiwgMHhBOCwgMHhBOSwgMHg0MywgMHgxRCwgMHgz MywgMHg1MSwgMHg4OCwgMHgzOSwgMHhCRCwgMHg3MywgMHhFOSwKLSsgICAgMHg1RiwgMHhCRSwg MHg4MiwgMHg0OSwgMHgyNywgMHhFNiwgMHhCNSwgMHg1MywgMHhDMSwgMHgzOCwgMHhBQywgMHgy RiwKLSsgICAgMHg2RCwgMHg5NywgMHg2QywgMHhFQiwgMHg2NywgMHhDMSwgMHg1RiwgMHg2Nywg MHhGOCwgMHgzNSwgMHgwNSwgMHg1RSwKLSsgICAgMHhENSwgMHg2OCwgMHg4MCwgMHhBQSwgMHg5 NiwgMHhDQSwgMHgwQiwgMHg4QSwgMHhFNiwgMHhGMSwgMHhCMSwgMHg0MSwKLSsgICAgMHhDNiwg MHg3NSwgMHg5NCwgMHgwQSwgMHgwQSwgMHgyQSwgMHhGQSwgMHgyOSwKLSB9OwotIAotIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0cjFbXSA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7Ci1A QCAtMTYyLDcgKzE2Nyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAg QklPX3ByaW50ZihiaW9fZXJyLCAidGVzdCBnZW5lcmF0aW9uIG9mIERTQSBwYXJhbWV0ZXJzXG4i KTsKLSAKLSAgICAgQk5fR0VOQ0Jfc2V0KCZjYiwgZHNhX2NiLCBiaW9fZXJyKTsKLS0gICAgaWYg KCgoZHNhID0gRFNBX25ldygpKSA9PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNf ZXgoZHNhLCA1MTIsCi0rICAgIGlmICgoKGRzYSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURT QV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZCwgMjAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZjb3VudGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaCwgJmNiKSkKLUBAIC0xNzYsOCAr MTgxLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotICAgICBCSU9fcHJpbnRm KGJpb19lcnIsICJcbmNvdW50ZXI9JWQgaD0lbGRcbiIsIGNvdW50ZXIsIGgpOwotIAotICAgICBE U0FfcHJpbnQoYmlvX2VyciwgZHNhLCAwKTsKLS0gICAgaWYgKGNvdW50ZXIgIT0gMTA1KSB7Ci0t ICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICJjb3VudGVyIHNob3VsZCBiZSAxMDVcbiIpOwot KyAgICBpZiAoY291bnRlciAhPSAyMzkpIHsKLSsgICAgICAgIEJJT19wcmludGYoYmlvX2Vyciwg ImNvdW50ZXIgc2hvdWxkIGJlIDIzOVxuIik7Ci0gICAgICAgICBnb3RvIGVuZDsKLSAgICAgfQot ICAgICBpZiAoaCAhPSAyKSB7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZW5naW5l L2VuZ19hbGwuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCi0t LS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcwkyMDE1LTEyLTAz IDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9lbmdp bmUvZW5nX2FsbC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU5NTYyNDU4ICswMTAwCi1AQCAtNTks MTEgKzU5LDI1IEBACi0gCi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgImVuZ19p bnQuaCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSAKLSB2b2lkIEVOR0lORV9sb2FkX2J1aWx0aW5fZW5naW5lcyh2b2lkKQotIHsK LSAgICAgLyogU29tZSBFTkdJTkVzIG5lZWQgdGhpcyAqLwotICAgICBPUEVOU1NMX2NwdWlkX3Nl dHVwKCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBPUEVOU1NMX2luaXRfbGlicmFyeSgp OwotKyAgICBpZiAoRklQU19tb2RlKCkpIHsKLSsgICAgICAgIC8qIFdlIGFsbG93IGxvYWRpbmcg ZHluYW1pYyBlbmdpbmUgYXMgYSB0aGlyZCBwYXJ0eQotKyAgICAgICAgICAgZW5naW5lIG1pZ2h0 IGJlIEZJUFMgdmFsaWRhdGVkLgotKyAgICAgICAgICAgVXNlciBpcyBkaXNhbGxvd2VkIHRvIGxv YWQgbm9uLXZhbGlkYXRlZCBlbmdpbmVzCi0rICAgICAgICAgICBieSBzZWN1cml0eSBwb2xpY3ku ICovCi0rICAgICAgICBFTkdJTkVfbG9hZF9keW5hbWljKCk7Ci0rICAgICAgICByZXR1cm47Ci0r ICAgIH0KLSsjZW5kaWYKLSAjaWYgMAotICAgICAvKgotICAgICAgKiBUaGVyZSdzIG5vIGxvbmdl ciBhbnkgbmVlZCBmb3IgYW4gIm9wZW5zc2wiIEVOR0lORSB1bmxlc3MsIG9uZSBkYXksIGl0Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMgb3BlbnNzbC0x LjAuMmUvY3J5cHRvL2V2cC9jX2FsbGMuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAv Y19hbGxjLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvY19hbGxjLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTk1 NjI0NTggKzAxMDAKLUBAIC02NSw2ICs2NSwxMCBAQAotIHZvaWQgT3BlblNTTF9hZGRfYWxsX2Np cGhlcnModm9pZCkKLSB7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBPUEVOU1NMX2lu aXRfbGlicmFyeSgpOwotKyAgICBpZiAoIUZJUFNfbW9kZSgpKSB7Ci0rI2VuZGlmCi0gI2lmbmRl ZiBPUEVOU1NMX05PX0RFUwotICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYigpKTsKLSAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIxKCkpOwotQEAgLTIzOCw0ICsyNDIsNjQgQEAg dm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQotICAgICBFVlBfYWRkX2NpcGhlcl9h bGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCAiQ0FNRUxMSUEyNTYiKTsKLSAgICAgRVZQX2FkZF9j aXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywgImNhbWVsbGlhMjU2Iik7Ci0gI2VuZGlm Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICB9IGVsc2UgewotKyMgaWZuZGVmIE9QRU5TU0xf Tk9fREVTCi0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jZmIoKSk7Ci0rICAg ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2ZiKCkpOwotKwotKyAgICAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfb2ZiKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19lZGUzX29mYigpKTsKLSsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNf ZWRlX2NiYygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7 Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsICJERVMzIik7 Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsICJkZXMzIik7 Ci0rCi0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZSgpKTsKLSsgICAgICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlMygpKTsKLSsjIGVuZGlmCi0rCi0rIyBpZm5kZWYgT1BF TlNTTF9OT19BRVMKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2VjYigpKTsK LSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NiYygpKTsKLSsgICAgICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NmYigpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTI4X2NmYjEoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF9jZmI4KCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfb2ZiKCkpOwot KyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY3RyKCkpOwotKyAgICAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xMjhfeHRzKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhf Y2NtKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfd3JhcCgpKTsKLSsg ICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCAiQUVTMTI4Iik7Ci0r ICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywgImFlczEyOCIpOwot KyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZWNiKCkpOwotKyAgICAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfY2ZiKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y2ZiMSgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjgoKSk7Ci0r ICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9vZmIoKSk7Ci0rICAgICAgICBFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jdHIoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9nY20oKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9j Y20oKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml93cmFwKCkpOwotKyAg ICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsICJBRVMxOTIiKTsKLSsg ICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCAiYWVzMTkyIik7Ci0r ICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7Ci0rICAgICAgICBFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jYmMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzI1Nl9jZmIoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9j ZmIxKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiOCgpKTsKLSsg ICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X29mYigpKTsKLSsgICAgICAgIEVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2N0cigpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMjU2X2djbSgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3h0 cygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NjbSgpKTsKLSsgICAg ICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3dyYXAoKSk7Ci0rICAgICAgICBFVlBfYWRk X2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywgIkFFUzI1NiIpOwotKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsICJhZXMyNTYiKTsKLSsjIGVuZGlmCi0rICAg IH0KLSsjZW5kaWYKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2NfYWxs ZC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9jX2FsbGQuYwotLS0tIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9ldnAvY19hbGxkLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvY19hbGxkLmMJMjAxNS0x Mi0wNCAxMzo1NTo1MS45NjA1NjI0ODIgKzAxMDAKLUBAIC02NCw1MSArNjQsODEgQEAKLSAKLSB2 b2lkIE9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzKHZvaWQpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsgICAgT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsgICAgaWYgKCFGSVBTX21vZGUoKSkg ewotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19NRDQKLS0gICAgRVZQX2FkZF9kaWdlc3Qo RVZQX21kNCgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7Ci0gI2VuZGlm Ci0gI2lmbmRlZiBPUEVOU1NMX05PX01ENQotLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfbWQ1KCkp OwotLSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJzc2wyLW1kNSIpOwotLSAgICBF VlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJzc2wzLW1kNSIpOwotKyAgICAgICAgRVZQX2Fk ZF9kaWdlc3QoRVZQX21kNSgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21k NSwgInNzbDItbWQ1Iik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJz c2wzLW1kNSIpOwotICNlbmRpZgotICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEEwKQotLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhKCkpOwot KyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKLSAjIGlmbmRlZiBPUEVOU1NMX05P X0RTQQotLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwotKyAgICAgICAgRVZQX2FkZF9k aWdlc3QoRVZQX2RzcygpKTsKLSAjIGVuZGlmCi0gI2VuZGlmCi0gI2lmICFkZWZpbmVkKE9QRU5T U0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCi0tICAgIEVWUF9hZGRfZGln ZXN0KEVWUF9zaGExKCkpOwotLSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCAic3Ns My1zaGExIik7Ci0tICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlw dGlvbiwgU05fc2hhMVdpdGhSU0EpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEo KSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCAic3NsMy1zaGExIik7 Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRpb24s IFNOX3NoYTFXaXRoUlNBKTsKLSAjIGlmbmRlZiBPUEVOU1NMX05PX0RTQQotLSAgICBFVlBfYWRk X2RpZ2VzdChFVlBfZHNzMSgpKTsKLS0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0 aFNIQTEsIFNOX2RzYVdpdGhTSEExXzIpOwotLSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9k c2FXaXRoU0hBMSwgIkRTUzEiKTsKLS0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0 aFNIQTEsICJkc3MxIik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsKLSsg ICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCBTTl9kc2FXaXRoU0hB MV8yKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiRFNT MSIpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsICJkc3Mx Iik7Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLS0gICAgRVZQX2FkZF9k aWdlc3QoRVZQX2VjZHNhKCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkp OwotICMgZW5kaWYKLSAjZW5kaWYKLSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19NREMyKSAmJiAh ZGVmaW5lZChPUEVOU1NMX05PX0RFUykKLS0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kYzIoKSk7 Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfbWRjMigpKTsKLSAjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fUklQRU1ECi0tICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9yaXBlbWQxNjAoKSk7 Ci0tICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3JpcGVtZDE2MCwgInJpcGVtZCIpOwotLSAg ICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9yaXBlbWQxNjAsICJybWQxNjAiKTsKLSsgICAgICAg IEVWUF9hZGRfZGlnZXN0KEVWUF9yaXBlbWQxNjAoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2Vz dF9hbGlhcyhTTl9yaXBlbWQxNjAsICJyaXBlbWQiKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0 X2FsaWFzKFNOX3JpcGVtZDE2MCwgInJtZDE2MCIpOwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNT TF9OT19TSEEyNTYKLS0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKLS0gICAgRVZQ X2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9z aGEyMjQoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwotICNlbmRp ZgotICNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKLS0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX3No YTM4NCgpKTsKLS0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKLSsgICAgICAgIEVW UF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBf c2hhNTEyKCkpOwotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19XSElSTFBPT0wKLS0gICAg RVZQX2FkZF9kaWdlc3QoRVZQX3doaXJscG9vbCgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0 KEVWUF93aGlybHBvb2woKSk7Ci0rI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICB9 IGVsc2UgewotKyMgaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5T U0xfTk9fU0hBMSkKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOwotKyAgICAg ICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOwotKyAgICAgICAg RVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9zaGExV2l0 aFJTQSk7Ci0rIyAgaWZuZGVmIE9QRU5TU0xfTk9fRFNBCi0rICAgICAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfZHNzMSgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhT SEExLCBTTl9kc2FXaXRoU0hBMV8yKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNO X2RzYVdpdGhTSEExLCAiRFNTMSIpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f ZHNhV2l0aFNIQTEsICJkc3MxIik7Ci0rIyAgZW5kaWYKLSsjICBpZm5kZWYgT1BFTlNTTF9OT19F Q0RTQQotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOwotKyMgIGVuZGlmCi0r IyBlbmRpZgotKyMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0rICAgICAgICBFVlBfYWRkX2Rp Z2VzdChFVlBfc2hhMjI0KCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1Nigp KTsKLSsjIGVuZGlmCi0rIyBpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKLSsgICAgICAgIEVWUF9h ZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hh NTEyKCkpOwotKyMgZW5kaWYKLSsgICAgfQotICNlbmRpZgotIH0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZw L2RpZ2VzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIw MTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2V2cC9kaWdlc3QuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MDU2MjQ4MiArMDEwMAotQEAg LTE0MywxOCArMTQzLDU1IEBAIGludCBFVlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNv bnMKLSAgICAgcmV0dXJuIEVWUF9EaWdlc3RJbml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7Ci0gfQot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0 byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0 aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGlj IGludCBiYWRfaW5pdChFVlBfTURfQ1RYICpjdHgpCi0rewotKyAgICBGSVBTX0VSUk9SX0lHTk9S RUQoIkRpZ2VzdCBpbml0Iik7Ci0rICAgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW50IGJh ZF91cGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQp Ci0rewotKyAgICBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCB1cGRhdGUiKTsKLSsgICAgcmV0 dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5z aWduZWQgY2hhciAqbWQpCi0rewotKyAgICBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBGaW5h bCIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9NRCBiYWRfbWQg PSB7Ci0rICAgIDAsCi0rICAgIDAsCi0rICAgIDAsCi0rICAgIDAsCi0rICAgIGJhZF9pbml0LAot KyAgICBiYWRfdXBkYXRlLAotKyAgICBiYWRfZmluYWwsCi0rICAgIE5VTEwsCi0rICAgIE5VTEws Ci0rICAgIE5VTEwsCi0rICAgIDAsCi0rICAgIHswLCAwLCAwLCAwfSwKLSt9OwotKwotKyNlbmRp ZgotKwotIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9N RCAqdHlwZSwgRU5HSU5FICppbXBsKQotIHsKLSAgICAgRVZQX01EX0NUWF9jbGVhcl9mbGFncyhj dHgsIEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAg IC8qIElmIEZJUFMgbW9kZSBzd2l0Y2ggdG8gYXBwcm92ZWQgaW1wbGVtZW50YXRpb24gaWYgcG9z c2libGUgKi8KLS0gICAgaWYgKEZJUFNfbW9kZSgpKSB7Ci0tICAgICAgICBjb25zdCBFVlBfTUQg KmZpcHNtZDsKLS0gICAgICAgIGlmICh0eXBlKSB7Ci0tICAgICAgICAgICAgZmlwc21kID0gZXZw X2dldF9maXBzX21kKHR5cGUpOwotLSAgICAgICAgICAgIGlmIChmaXBzbWQpCi0tICAgICAgICAg ICAgICAgIHR5cGUgPSBmaXBzbWQ7Ci0tICAgICAgICB9Ci0rICAgIGlmIChGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCwg RklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIGN0eC0+ZGlnZXN0ID0gJmJh ZF9tZDsKLSsgICAgICAgIHJldHVybiAwOwotICAgICB9Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVO U1NMX05PX0VOR0lORQotQEAgLTIxMiw2ICsyNDksMTYgQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4 KEVWUF9NRF9DVFggKmN0eCwgYwotICAgICB9Ci0gI2VuZGlmCi0gICAgIGlmIChjdHgtPmRpZ2Vz dCAhPSB0eXBlKSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICAgICAgaWYgKEZJUFNfbW9k ZSgpKSB7Ci0rICAgICAgICAgICAgaWYgKCEodHlwZS0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBT KQotKyAgICAgICAgICAgICAgICAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpKSB7Ci0rICAgICAgICAgICAgICAgIEVWUGVycihFVlBfRl9FVlBfRElHRVNU SU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotKyAgICAgICAgICAgICAgICBjdHgt PmRpZ2VzdCA9ICZiYWRfbWQ7Ci0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAg ICAgIH0KLSsgICAgICAgIH0KLSsjZW5kaWYKLSAgICAgICAgIGlmIChjdHgtPmRpZ2VzdCAmJiBj dHgtPmRpZ2VzdC0+Y3R4X3NpemUpCi0gICAgICAgICAgICAgT1BFTlNTTF9mcmVlKGN0eC0+bWRf ZGF0YSk7Ci0gICAgICAgICBjdHgtPmRpZ2VzdCA9IHR5cGU7Ci1AQCAtMjM2LDI1ICsyODMsMTUg QEAgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgYwotICAgICB9Ci0gICAg IGlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQpCi0gICAgICAgICByZXR1 cm4gMTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGlmIChGSVBTX21vZGUoKSkgewotLSAg ICAgICAgaWYgKEZJUFNfZGlnZXN0aW5pdChjdHgsIHR5cGUpKQotLSAgICAgICAgICAgIHJldHVy biAxOwotLSAgICAgICAgT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7Ci0tICAgICAgICBjdHgt Pm1kX2RhdGEgPSBOVUxMOwotLSAgICAgICAgcmV0dXJuIDA7Ci0tICAgIH0KLS0jZW5kaWYKLSAg ICAgcmV0dXJuIGN0eC0+ZGlnZXN0LT5pbml0KGN0eCk7Ci0gfQotIAotIGludCBFVlBfRGlnZXN0 VXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQot IHsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIHJldHVybiBGSVBTX2RpZ2VzdHVwZGF0ZShj dHgsIGRhdGEsIGNvdW50KTsKLS0jZWxzZQotLSAgICByZXR1cm4gY3R4LT51cGRhdGUoY3R4LCBk YXRhLCBjb3VudCk7Ci0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSAjZW5kaWYKLSsgICAg cmV0dXJuIGN0eC0+dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOwotIH0KLSAKLSAvKiBUaGUgY2Fs bGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhl IGNvbnRleHQgKi8KLUBAIC0yNjksMTEgKzMwNiwxMSBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsKEVW UF9NRF9DVFggKmN0eCwgdW5zCi0gLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyBy ZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCi0gaW50IEVWUF9EaWdl c3RGaW5hbF9leChFVlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBp bnQgKnNpemUpCi0gewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgcmV0dXJuIEZJUFNfZGln ZXN0ZmluYWwoY3R4LCBtZCwgc2l6ZSk7Ci0tI2Vsc2UKLSAgICAgaW50IHJldDsKLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAg ICAgT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUgPD0gRVZQX01BWF9NRF9TSVpF KTsKLSAgICAgcmV0ID0gY3R4LT5kaWdlc3QtPmZpbmFsKGN0eCwgbWQpOwotICAgICBpZiAoc2l6 ZSAhPSBOVUxMKQotQEAgLTI4NCw3ICszMjEsNiBAQCBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVW UF9NRF9DVFggKmN0eCwKLSAgICAgfQotICAgICBtZW1zZXQoY3R4LT5tZF9kYXRhLCAwLCBjdHgt PmRpZ2VzdC0+Y3R4X3NpemUpOwotICAgICByZXR1cm4gcmV0OwotLSNlbmRpZgotIH0KLSAKLSBp bnQgRVZQX01EX0NUWF9jb3B5KEVWUF9NRF9DVFggKm91dCwgY29uc3QgRVZQX01EX0NUWCAqaW4p Ci1AQCAtMzczLDcgKzQwOSw2IEBAIHZvaWQgRVZQX01EX0NUWF9kZXN0cm95KEVWUF9NRF9DVFgg KmN0eCkKLSAvKiBUaGlzIGNhbGwgZnJlZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUg Y29udGV4dCAqLwotIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQotIHsK LS0jaWZuZGVmIE9QRU5TU0xfRklQUwotICAgICAvKgotICAgICAgKiBEb24ndCBhc3N1bWUgY3R4 LT5tZF9kYXRhIHdhcyBjbGVhbmVkIGluIEVWUF9EaWdlc3RfRmluYWwsIGJlY2F1c2UKLSAgICAg ICogc29tZXRpbWVzIG9ubHkgY29waWVzIG9mIHRoZSBjb250ZXh0IGFyZSBldmVyIGZpbmFsaXNl ZC4KLUBAIC0zODYsNyArNDIxLDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RY ICpjdHgpCi0gICAgICAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT5tZF9kYXRhLCBjdHgtPmRpZ2Vz dC0+Y3R4X3NpemUpOwotICAgICAgICAgT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7Ci0gICAg IH0KLS0jZW5kaWYKLSAgICAgaWYgKGN0eC0+cGN0eCkKLSAgICAgICAgIEVWUF9QS0VZX0NUWF9m cmVlKGN0eC0+cGN0eCk7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotQEAgLTM5Nyw5ICs0 MzEsNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKLSAgICAgICAg ICAqLwotICAgICAgICAgRU5HSU5FX2ZpbmlzaChjdHgtPmVuZ2luZSk7Ci0gI2VuZGlmCi0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLSAgICBGSVBTX21kX2N0eF9jbGVhbnVwKGN0eCk7Ci0tI2VuZGlm Ci0gICAgIG1lbXNldChjdHgsICdcMCcsIHNpemVvZiAqY3R4KTsKLSAKLSAgICAgcmV0dXJuIDE7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVuc3Ns LTEuMC4yZS9jcnlwdG8vZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZw L2VfYWVzLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZV9hZXMuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MDU2 MjQ4MiArMDEwMAotQEAgLTYwLDkgKzYwLDYgQEAKLSAjIGluY2x1ZGUgIm1vZGVzX2xjbC5oIgot ICMgaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gCi0tIyB1bmRlZiBFVlBfQ0lQSF9GTEFHX0ZJ UFMKLS0jIGRlZmluZSBFVlBfQ0lQSF9GTEFHX0ZJUFMgMAotLQotIHR5cGVkZWYgc3RydWN0IHsK LSAgICAgdW5pb24gewotICAgICAgICAgZG91YmxlIGFsaWduOwotQEAgLTExNTksNiArMTE1Niwx MSBAQCBzdGF0aWMgaW50IGFlc19nY21fY3RybChFVlBfQ0lQSEVSX0NUWCAqCi0gICAgIGNhc2Ug RVZQX0NUUkxfR0NNX1NFVF9JVkxFTjoKLSAgICAgICAgIGlmIChhcmcgPD0gMCkKLSAgICAgICAg ICAgICByZXR1cm4gMDsKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICAgICAgaWYgKEZJUFNf bW9kdWxlX21vZGUoKSAmJiAhKGMtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExP VykKLSsgICAgICAgICAgICAmJiBhcmcgPCAxMikKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsj IGVuZGlmCi0gICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIElWIGlmIG5lZWRlZCAqLwot ICAgICAgICAgaWYgKChhcmcgPiBFVlBfTUFYX0lWX0xFTkdUSCkgJiYgKGFyZyA+IGdjdHgtPml2 bGVuKSkgewotICAgICAgICAgICAgIGlmIChnY3R4LT5pdiAhPSBjLT5pdikKLUBAIC0xNzI3LDYg KzE3MjksMTQgQEAgc3RhdGljIGludCBhZXNfeHRzX2NpcGhlcihFVlBfQ0lQSEVSX0NUWAotICAg ICAgICAgcmV0dXJuIDA7Ci0gICAgIGlmICghb3V0IHx8ICFpbiB8fCBsZW4gPCBBRVNfQkxPQ0tf U0laRSkKLSAgICAgICAgIHJldHVybiAwOwotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIC8q IFJlcXVpcmVtZW50IG9mIFNQODAwLTM4RSAqLwotKyAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgp ICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCi0rICAg ICAgICAobGVuID4gKDFVTCA8PCAyMCkgKiAxNikpIHsKLSsgICAgICAgIEVWUGVycihFVlBfRl9B RVNfWFRTX0NJUEhFUiwgRVZQX1JfVE9PX0xBUkdFKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAg ICB9Ci0rIyBlbmRpZgotICAgICBpZiAoeGN0eC0+c3RyZWFtKQotICAgICAgICAgKCp4Y3R4LT5z dHJlYW0pIChpbiwgb3V0LCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHhjdHgtPnh0 cy5rZXkxLCB4Y3R4LT54dHMua2V5MiwgY3R4LT5pdik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9lX2Rl czMuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcwkyMDE1LTEy LTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9l dnAvZV9kZXMzLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjA1NjI0ODIgKzAxMDAKLUBAIC02NSwx MCArNjUsNiBAQAotICMgaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSAjIGluY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgotIAotLS8qIEJsb2NrIHVzZSBvZiBpbXBsZW1lbnRhdGlvbnMgaW4gRklQUyBt b2RlICovCi0tIyB1bmRlZiBFVlBfQ0lQSF9GTEFHX0ZJUFMKLS0jIGRlZmluZSBFVlBfQ0lQSF9G TEFHX0ZJUFMgICAgICAwCi0tCi0gdHlwZWRlZiBzdHJ1Y3QgewotICAgICB1bmlvbiB7Ci0gICAg ICAgICBkb3VibGUgYWxpZ247Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2Vf bnVsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9lX251bGwuYwotLS0tIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZV9udWxsLmMJMjAx NS0xMi0wNCAxMzo1NTo1MS45NjA1NjI0ODIgKzAxMDAKLUBAIC02OCw3ICs2OCw3IEBAIHN0YXRp YyBpbnQgbnVsbF9jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmMKLSBzdGF0aWMgY29uc3QgRVZQX0NJ UEhFUiBuX2NpcGhlciA9IHsKLSAgICAgTklEX3VuZGVmLAotICAgICAxLCAwLCAwLAotLSAgICAw LAotKyAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMsCi0gICAgIG51bGxfaW5pdF9rZXksCi0gICAgIG51 bGxfY2lwaGVyLAotICAgICBOVUxMLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2 cC9ldnBfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cF9lbmMuYwotLS0t IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAxNS0xMi0wMyAxNTow NDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cF9l bmMuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MTU2MjUwNSArMDEwMAotQEAgLTY5LDE2ICs2OSw3 MyBAQAotICNlbmRpZgotICNpbmNsdWRlICJldnBfbG9jbC5oIgotIAotLSNpZmRlZiBPUEVOU1NM X0ZJUFMKLS0jIGRlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgRklQU19jaXBo ZXIoY3R4LCBvdXQsIGluLCBpbmwpCi0tI2Vsc2UKLS0jIGRlZmluZSBNX2RvX2NpcGhlcihjdHgs IG91dCwgaW4sIGlubCkgY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkK LS0jZW5kaWYKLSsjZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBjdHgtPmNp cGhlci0+ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQotIAotIGNvbnN0IGNoYXIgRVZQX3Zl cnNpb25bXSA9ICJFVlAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0 aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUg YW5kIGlnbm9yZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQ X0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKyAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCi0rewotKyAgICBGSVBT X0VSUk9SX0lHTk9SRUQoIkNpcGhlciBpbml0Iik7Ci0rICAgIHJldHVybiAwOwotK30KLSsKLStz dGF0aWMgaW50IGJhZF9kb19jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpp biwgdW5zaWduZWQgaW50IGlubCkKLSt7Ci0rICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVy IHVwZGF0ZSIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rLyogTkI6IG5vIGNsZWFudXAgYmVj YXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0ICovCi0rCi0rc3RhdGljIGludCBi YWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rewotKyAg ICBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIpOwotKyAgICByZXR1cm4gMDsK LSt9Ci0rCi0rc3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNO MV9UWVBFICp0eXApCi0rewotKyAgICBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBnZXRfYXNu MSIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGludCBiYWRfY3RybChFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQotK3sKLSsgICAgRklQ U19FUlJPUl9JR05PUkVEKCJDaXBoZXIgY3RybCIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0r c3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFkX2NpcGhlciA9IHsKLSsgICAgMCwKLSsgICAgMCwK LSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgYmFkX2luaXQsCi0rICAgIGJhZF9kb19j aXBoZXIsCi0rICAgIE5VTEwsCi0rICAgIDAsCi0rICAgIGJhZF9zZXRfYXNuMSwKLSsgICAgYmFk X2dldF9hc24xLAotKyAgICBiYWRfY3RybCwKLSsgICAgTlVMTAotK307Ci0rCi0rI2VuZGlmCi0r Ci0gdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCi0gewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgot ICAgICBtZW1zZXQoY3R4LCAwLCBzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKLSAgICAgLyogY3R4 LT5jaXBoZXI9TlVMTDsgKi8KLSB9Ci1AQCAtMTEwLDYgKzE2NywxMyBAQCBpbnQgRVZQX0NpcGhl ckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gICAgICAgICAgICAgZW5jID0gMTsKLSAgICAg ICAgIGN0eC0+ZW5jcnlwdCA9IGVuYzsKLSAgICAgfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsg ICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19G X0VWUF9DSVBIRVJJTklUX0VYLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAg ICAgY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9 Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotICAgICAvKgotICAgICAgKiBX aGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidk IGNvbnRleHRzIHNvCi1AQCAtMTY4LDE2ICsyMzIsNiBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgo RVZQX0NJUEhFUl9DVFggKmN0Ci0gICAgICAgICAgICAgY3R4LT5lbmdpbmUgPSBOVUxMOwotICNl bmRpZgotIAotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgICAgIGlmIChGSVBTX21vZGUoKSkg ewotLSAgICAgICAgICAgIGNvbnN0IEVWUF9DSVBIRVIgKmZjaXBoZXI7Ci0tICAgICAgICAgICAg aWYgKGNpcGhlcikKLS0gICAgICAgICAgICAgICAgZmNpcGhlciA9IGV2cF9nZXRfZmlwc19jaXBo ZXIoY2lwaGVyKTsKLS0gICAgICAgICAgICBpZiAoZmNpcGhlcikKLS0gICAgICAgICAgICAgICAg Y2lwaGVyID0gZmNpcGhlcjsKLS0gICAgICAgICAgICByZXR1cm4gRklQU19jaXBoZXJpbml0KGN0 eCwgY2lwaGVyLCBrZXksIGl2LCBlbmMpOwotLSAgICAgICAgfQotLSNlbmRpZgotICAgICAgICAg Y3R4LT5jaXBoZXIgPSBjaXBoZXI7Ci0gICAgICAgICBpZiAoY3R4LT5jaXBoZXItPmN0eF9zaXpl KSB7Ci0gICAgICAgICAgICAgY3R4LT5jaXBoZXJfZGF0YSA9IE9QRU5TU0xfbWFsbG9jKGN0eC0+ Y2lwaGVyLT5jdHhfc2l6ZSk7Ci1AQCAtMjA0LDEwICsyNTgsNiBAQCBpbnQgRVZQX0NpcGhlcklu aXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotICBz a2lwX3RvX2luaXQ6Ci0gI2VuZGlmCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQ U19tb2RlKCkpCi0tICAgICAgICByZXR1cm4gRklQU19jaXBoZXJpbml0KGN0eCwgY2lwaGVyLCBr ZXksIGl2LCBlbmMpOwotLSNlbmRpZgotICAgICAvKiB3ZSBhc3N1bWUgYmxvY2sgc2l6ZSBpcyBh IHBvd2VyIG9mIDIgaW4gKmNyeXB0VXBkYXRlICovCi0gICAgIE9QRU5TU0xfYXNzZXJ0KGN0eC0+ Y2lwaGVyLT5ibG9ja19zaXplID09IDEKLSAgICAgICAgICAgICAgICAgICAgfHwgY3R4LT5jaXBo ZXItPmJsb2NrX3NpemUgPT0gOAotQEAgLTI1Myw2ICszMDMsMTkgQEAgaW50IEVWUF9DaXBoZXJJ bml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg fQotICAgICB9Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICAvKiBBZnRlciAna2V5JyBpcyBz ZXQgbm8gZnVydGhlciBwYXJhbWV0ZXJzIGNoYW5nZXMgYXJlIHBlcm1pc3NpYmxlLgotKyAgICAg KiBTbyBvbmx5IGNoZWNrIGZvciBub24gRklQUyBlbmFibGluZyBhdCB0aGlzIHBvaW50LgotKyAg ICAgKi8KLSsgICAgaWYgKGtleSAmJiBGSVBTX21vZGUoKSkgewotKyAgICAgICAgaWYgKCEoY3R4 LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19GSVBTKQotKyAgICAgICAgICAgICYgIShj dHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpIHsKLSsgICAgICAgICAg ICBFVlBlcnIoRVZQX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBT KTsKLSsgICAgICAgICAgICBjdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOwotKyAgICAgICAgICAg IHJldHVybiAwOwotKyAgICAgICAgfQotKyAgICB9Ci0rI2VuZGlmCi0gCi0gICAgIGlmIChrZXkg fHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7Ci0g ICAgICAgICBpZiAoIWN0eC0+Y2lwaGVyLT5pbml0KGN0eCwga2V5LCBpdiwgZW5jKSkKLUBAIC01 NTQsNyArNjE3LDYgQEAgdm9pZCBFVlBfQ0lQSEVSX0NUWF9mcmVlKEVWUF9DSVBIRVJfQ1RYCi0g Ci0gaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhFUl9DVFggKmMpCi0gewotLSNp Zm5kZWYgT1BFTlNTTF9GSVBTCi0gICAgIGlmIChjLT5jaXBoZXIgIT0gTlVMTCkgewotICAgICAg ICAgaWYgKGMtPmNpcGhlci0+Y2xlYW51cCAmJiAhYy0+Y2lwaGVyLT5jbGVhbnVwKGMpKQotICAg ICAgICAgICAgIHJldHVybiAwOwotQEAgLTU2NCw3ICs2MjYsNiBAQCBpbnQgRVZQX0NJUEhFUl9D VFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUCi0gICAgIH0KLSAgICAgaWYgKGMtPmNpcGhlcl9kYXRh KQotICAgICAgICAgT1BFTlNTTF9mcmVlKGMtPmNpcGhlcl9kYXRhKTsKLS0jZW5kaWYKLSAjaWZu ZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gICAgIGlmIChjLT5lbmdpbmUpCi0gICAgICAgICAvKgot QEAgLTU3Myw5ICs2MzQsNiBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVS X0NUCi0gICAgICAgICAgKi8KLSAgICAgICAgIEVOR0lORV9maW5pc2goYy0+ZW5naW5lKTsKLSAj ZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIEZJUFNfY2lwaGVyX2N0eF9jbGVhbnVw KGMpOwotLSNlbmRpZgotICAgICBtZW1zZXQoYywgMCwgc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7 Ci0gICAgIHJldHVybiAxOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAv ZXZwLmguZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cC5oCi0tLS0gb3BlbnNzbC0x LjAuMmUvY3J5cHRvL2V2cC9ldnAuaC5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuODU1NTYwMDMz ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9ldnAuaAkyMDE1LTEyLTA0IDEz OjU1OjUxLjk2MTU2MjUwNSArMDEwMAotQEAgLTEyMiw2ICsxMjIsMTAgQEAKLSBleHRlcm4gIkMi IHsKLSAjZW5kaWYKLSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyMgIGluY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyMgZW5kaWYKLSsKLSAvKgotICAqIFR5cGUgbmVlZHMgdG8gYmUgYSBiaXQg ZmllbGQgU3ViLXR5cGUgbmVlZHMgdG8gYmUgZm9yIHZhcmlhdGlvbnMgb24gdGhlCi0gICogbWV0 aG9kLCBhcyBpbiwgY2FuIGl0IGRvIGFyYml0cmFyeSBlbmNyeXB0aW9uLi4uLgotQEAgLTI4NSwx MSArMjg5LDYgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2xlYW5lZCAqLwotICMgZGVmaW5lIEVWUF9N RF9DVFhfRkxBR19SRVVTRSAgICAgICAgICAgMHgwMDA0LyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1k X2RhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IGluIEVWUF9NRF9DVFhfY2xlYW51cCAqLwotLS8qCi0tICogRklQUyBhbmQgcGFkIG9wdGlvbnMg YXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlIHNvIHdlCi0tICogZG9u J3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1cnBvc2VzLgotLSAq LwotLQotICMgZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyAgMHgwMDA4Lyog QWxsb3cgdXNlIG9mIG5vbiBGSVBTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKiBkaWdlc3QgaW4gRklQUyBtb2RlICovCi0gCi1AQCAtMzAyLDYgKzMw MSwxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdCB7Ci0gIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFH X1BBRF9QS0NTMSAgICAgICAweDAwLyogUEtDUyMxIHYxLjUgbW9kZSAqLwotICMgZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMSAgICAgICAgMHgxMC8qIFg5LjMxIG1vZGUgKi8KLSAjIGRl ZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyAgICAgICAgIDB4MjAvKiBQU1MgbW9kZSAqLwot KyMgZGVmaW5lIE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCkgXAotKyAgICAgICAgICAg ICAgICAoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBzZWVkIGxlbmd0aCAqLwotKyMgZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4gICAgICAgMHhGRkZGLyogc2FsdCBsZW4gc2Ft ZSBhcyBkaWdlc3QgKi8KLSsjIGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMgICAgICAg IDB4RkZGRS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVjb3ZlcmVkICovCi0gCi0gIyBkZWZpbmUgRVZQ X01EX0NUWF9GTEFHX05PX0lOSVQgICAgICAgICAweDAxMDAvKiBEb24ndCBpbml0aWFsaXplIG1k X2RhdGEgKi8KLSAKLUBAIC0zNjMsMTUgKzM2NiwxNSBAQCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCB7 Ci0gLyogY2lwaGVyIGhhbmRsZXMgcmFuZG9tIGtleSBnZW5lcmF0aW9uICovCi0gIyBkZWZpbmUg ICAgICAgICBFVlBfQ0lQSF9SQU5EX0tFWSAgICAgICAgICAgICAgIDB4MjAwCi0gLyogY2lwaGVy IGhhcyBpdHMgb3duIGFkZGl0aW9uYWwgY29weWluZyBsb2dpYyAqLwotLSMgZGVmaW5lICAgICAg ICAgRVZQX0NJUEhfQ1VTVE9NX0NPUFkgICAgICAgICAgICAweDQwMAotKyMgZGVmaW5lICAgICAg ICAgRVZQX0NJUEhfQ1VTVE9NX0NPUFkgICAgICAgICAgICAweDQwMDAKLSAvKiBBbGxvdyB1c2Ug ZGVmYXVsdCBBU04xIGdldC9zZXQgaXYgKi8KLSAjIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZM QUdfREVGQVVMVF9BU04xICAgICAgMHgxMDAwCi0gLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5v dCBieXRlczogQ0ZCMSBtb2RlIG9ubHkgKi8KLSAjIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZM QUdfTEVOR1RIX0JJVFMgICAgICAgMHgyMDAwCi0gLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNl IGluIEZJUFMgbW9kZSAqLwotLSMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTICAg ICAgICAgICAgICAweDQwMDAKLSsjIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQUyAg ICAgICAgICAgICAgMHg0MDAKLSAvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2Rl ICovCi0tIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XICAgIDB4 ODAwMAotKyMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyAgICAw eDgwMAotIC8qCi0gICogQ2lwaGVyIGhhbmRsZXMgYW55IGFuZCBhbGwgcGFkZGluZyBsb2dpYyBh cyB3ZWxsIGFzIGZpbmFsaXNhdGlvbi4KLSAgKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9ldnAvZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9ldnBfbGli LmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIwMTUtMTIt MDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2 cC9ldnBfbGliLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjE1NjI1MDUgKzAxMDAKLUBAIC02MCwx MCArNjAsNiBAQAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLS0jaWZkZWYgT1BFTlNTTF9GSVBT Ci0tIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLS0jIGluY2x1ZGUgImV2cF9sb2NsLmgiCi0t I2VuZGlmCi0gCi0gaW50IEVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVSX0NUWCAq YywgQVNOMV9UWVBFICp0eXBlKQotIHsKLUBAIC0yMjQsNiArMjIwLDkgQEAgaW50IEVWUF9DSVBI RVJfQ1RYX2Jsb2NrX3NpemUoY29uc3QgRVZQXwotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJf Q1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gICAgIHJldHVybiBjdHgt PmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKTsKLSB9Ci0gCi1AQCAtMjM0LDIy ICsyMzMsMTIgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX0NJUEhFUl9DVFhfY2lwaGVyKAotIAot IHVuc2lnbmVkIGxvbmcgRVZQX0NJUEhFUl9mbGFncyhjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIp Ci0gewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgY29uc3QgRVZQX0NJUEhFUiAqZmNpcGhl cjsKLS0gICAgZmNpcGhlciA9IGV2cF9nZXRfZmlwc19jaXBoZXIoY2lwaGVyKTsKLS0gICAgaWYg KGZjaXBoZXIgJiYgZmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0tICAgICAg ICByZXR1cm4gY2lwaGVyLT5mbGFncyB8IEVWUF9DSVBIX0ZMQUdfRklQUzsKLS0jZW5kaWYKLSAg ICAgcmV0dXJuIGNpcGhlci0+ZmxhZ3M7Ci0gfQotIAotIHVuc2lnbmVkIGxvbmcgRVZQX0NJUEhF Ul9DVFhfZmxhZ3MoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCkKLSB7Ci0tI2lmZGVmIE9QRU5T U0xfRklQUwotLSAgICByZXR1cm4gRVZQX0NJUEhFUl9mbGFncyhjdHgtPmNpcGhlcik7Ci0tI2Vs c2UKLSAgICAgcmV0dXJuIGN0eC0+Y2lwaGVyLT5mbGFnczsKLS0jZW5kaWYKLSB9Ci0gCi0gdm9p ZCAqRVZQX0NJUEhFUl9DVFhfZ2V0X2FwcF9kYXRhKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgp Ci1AQCAtMzE2LDQwICszMDUsOCBAQCBpbnQgRVZQX01EX3NpemUoY29uc3QgRVZQX01EICptZCkK LSAgICAgcmV0dXJuIG1kLT5tZF9zaXplOwotIH0KLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0t Ci0tY29uc3QgRVZQX01EICpldnBfZ2V0X2ZpcHNfbWQoY29uc3QgRVZQX01EICptZCkKLS17Ci0t ICAgIGludCBuaWQgPSBFVlBfTURfdHlwZShtZCk7Ci0tICAgIGlmIChuaWQgPT0gTklEX2RzYSkK LS0gICAgICAgIHJldHVybiBGSVBTX2V2cF9kc3MxKCk7Ci0tICAgIGVsc2UgaWYgKG5pZCA9PSBO SURfZHNhV2l0aFNIQSkKLS0gICAgICAgIHJldHVybiBGSVBTX2V2cF9kc3MoKTsKLS0gICAgZWxz ZSBpZiAobmlkID09IE5JRF9lY2RzYV93aXRoX1NIQTEpCi0tICAgICAgICByZXR1cm4gRklQU19l dnBfZWNkc2EoKTsKLS0gICAgZWxzZQotLSAgICAgICAgcmV0dXJuIEZJUFNfZ2V0X2RpZ2VzdGJ5 bmlkKG5pZCk7Ci0tfQotLQotLWNvbnN0IEVWUF9DSVBIRVIgKmV2cF9nZXRfZmlwc19jaXBoZXIo Y29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyKQotLXsKLS0gICAgaW50IG5pZCA9IGNpcGhlci0+bmlk OwotLSAgICBpZiAobmlkID09IE5JRF91bmRlZikKLS0gICAgICAgIHJldHVybiBGSVBTX2V2cF9l bmNfbnVsbCgpOwotLSAgICBlbHNlCi0tICAgICAgICByZXR1cm4gRklQU19nZXRfY2lwaGVyYnlu aWQobmlkKTsKLS19Ci0tCi0tI2VuZGlmCi0tCi0gdW5zaWduZWQgbG9uZyBFVlBfTURfZmxhZ3Mo Y29uc3QgRVZQX01EICptZCkKLSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBjb25zdCBF VlBfTUQgKmZtZDsKLS0gICAgZm1kID0gZXZwX2dldF9maXBzX21kKG1kKTsKLS0gICAgaWYgKGZt ZCAmJiBmbWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKLS0gICAgICAgIHJldHVybiBtZC0+ ZmxhZ3MgfCBFVlBfTURfRkxBR19GSVBTOwotLSNlbmRpZgotICAgICByZXR1cm4gbWQtPmZsYWdz OwotIH0KLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5m aXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZXZwX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuODUxNTU5 OTQwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCTIwMTUt MTItMDQgMTM6NTU6NTEuOTYxNTYyNTA1ICswMTAwCi1AQCAtMjU4LDEwICsyNTgsOCBAQCBjb25z dCBFVlBfQ0lQSEVSICpFVlBfIyNjbmFtZSMjX2VjYih2b2lkCi0gICAgICAgICBCTE9DS19DSVBI RVJfZnVuY19jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGNwcmVmaXgsY2JpdHMsa3N0cnVjdCxrc2No ZWQpIFwKLSAgICAgICAgIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxr c3RydWN0LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfIyNjaXBoZXIjI18j I2tleXNpemUsIGtleXNpemUvOCwgaXZfbGVuLCBjYml0cywgXAotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMCwgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIFwKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsIFwKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsIFwKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwpCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBf Q0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwgXAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi0gCi0gc3RydWN0IGV2 cF9wa2V5X2N0eF9zdCB7Ci0gICAgIC8qIE1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcGVy YXRpb24gKi8KLUBAIC0zNTUsMTEgKzM1Myw2IEBAIGNvbnN0IEVWUF9DSVBIRVIgKmV2cF9nZXRf Zmlwc19jaXBoZXIoY28KLSAjIGRlZmluZSBNRDJfSW5pdCAgICAgICAgcHJpdmF0ZV9NRDJfSW5p dAotICMgZGVmaW5lIE1EQzJfSW5pdCAgICAgICBwcml2YXRlX01EQzJfSW5pdAotICMgZGVmaW5l IFNIQV9Jbml0ICAgICAgICBwcml2YXRlX1NIQV9Jbml0Ci0tIyBkZWZpbmUgU0hBMV9Jbml0ICAg ICAgIHByaXZhdGVfU0hBMV9Jbml0Ci0tIyBkZWZpbmUgU0hBMjI0X0luaXQgICAgIHByaXZhdGVf U0hBMjI0X0luaXQKLS0jIGRlZmluZSBTSEEyNTZfSW5pdCAgICAgcHJpdmF0ZV9TSEEyNTZfSW5p dAotLSMgZGVmaW5lIFNIQTM4NF9Jbml0ICAgICBwcml2YXRlX1NIQTM4NF9Jbml0Ci0tIyBkZWZp bmUgU0hBNTEyX0luaXQgICAgIHByaXZhdGVfU0hBNTEyX0luaXQKLSAKLSAjIGRlZmluZSBCRl9z ZXRfa2V5ICAgICAgcHJpdmF0ZV9CRl9zZXRfa2V5Ci0gIyBkZWZpbmUgQ0FTVF9zZXRfa2V5ICAg IHByaXZhdGVfQ0FTVF9zZXRfa2V5Ci1AQCAtMzY3LDcgKzM2MCw2IEBAIGNvbnN0IEVWUF9DSVBI RVIgKmV2cF9nZXRfZmlwc19jaXBoZXIoY28KLSAjIGRlZmluZSBTRUVEX3NldF9rZXkgICAgcHJp dmF0ZV9TRUVEX3NldF9rZXkKLSAjIGRlZmluZSBSQzJfc2V0X2tleSAgICAgcHJpdmF0ZV9SQzJf c2V0X2tleQotICMgZGVmaW5lIFJDNF9zZXRfa2V5ICAgICBwcml2YXRlX1JDNF9zZXRfa2V5Ci0t IyBkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkICAgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNo ZWNrZWQKLSAjIGRlZmluZSBDYW1lbGxpYV9zZXRfa2V5ICAgICAgICBwcml2YXRlX0NhbWVsbGlh X3NldF9rZXkKLSAKLSAjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAv bV9kc3MuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvbV9kc3MuYwotLS0tIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTUt MTItMDQgMTM6NTU6NTEuOTYxNTYyNTA1ICswMTAwCi1AQCAtODYsNyArODYsNyBAQCBzdGF0aWMg Y29uc3QgRVZQX01EIGRzYV9tZCA9IHsKLSAgICAgTklEX2RzYVdpdGhTSEEsCi0gICAgIE5JRF9k c2FXaXRoU0hBLAotICAgICBTSEFfRElHRVNUX0xFTkdUSCwKLS0gICAgRVZQX01EX0ZMQUdfUEtF WV9ESUdFU1QsCi0rICAgIEVWUF9NRF9GTEFHX1BLRVlfRElHRVNUIHwgRVZQX01EX0ZMQUdfRklQ UywKLSAgICAgaW5pdCwKLSAgICAgdXBkYXRlLAotICAgICBmaW5hbCwKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v ZXZwL21fZHNzMS5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBz CTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2V2cC9tX2RzczEuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MTU2MjUwNSArMDEwMAot QEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kID0gewotICAgICBO SURfZHNhLAotICAgICBOSURfZHNhV2l0aFNIQTEsCi0gICAgIFNIQV9ESUdFU1RfTEVOR1RILAot LSAgICBFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKLSsgICAgRVZQX01EX0ZMQUdfUEtFWV9ESUdF U1QgfCBFVlBfTURfRkxBR19GSVBTLAotICAgICBpbml0LAotICAgICB1cGRhdGUsCi0gICAgIGZp bmFsLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9tX21kMi5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRv L2V2cC9tX21kMi5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL21fbWQyLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45 NjI1NjI1MjkgKzAxMDAKLUBAIC02OCw2ICs2OCw3IEBACi0gIyBpZm5kZWYgT1BFTlNTTF9OT19S U0EKLSAjICBpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICMgZW5kaWYKLSsjIGluY2x1ZGUgImV2 cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSB7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2V2cC9tX3NoYTEuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvbV9z aGExLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9ldnAvbV9zaGExLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjI1NjI1 MjkgKzAxMDAKLUBAIC04Nyw3ICs4Nyw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZCA9 IHsKLSAgICAgTklEX3NoYTEsCi0gICAgIE5JRF9zaGExV2l0aFJTQUVuY3J5cHRpb24sCi0gICAg IFNIQV9ESUdFU1RfTEVOR1RILAotLSAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRV UkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rICAgIEVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCB8Ci0rICAgICAg ICBFVlBfTURfRkxBR19GSVBTLAotICAgICBpbml0LAotICAgICB1cGRhdGUsCi0gICAgIGZpbmFs LAotQEAgLTEzNCw3ICsxMzUsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZCA9IHsK LSAgICAgTklEX3NoYTIyNCwKLSAgICAgTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAotICAg ICBTSEEyMjRfRElHRVNUX0xFTkdUSCwKLS0gICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lH TkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKyAgICBFVlBfTURfRkxBR19Q S0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfAotKyAg ICAgICAgRVZQX01EX0ZMQUdfRklQUywKLSAgICAgaW5pdDIyNCwKLSAgICAgdXBkYXRlMjU2LAot ICAgICBmaW5hbDI1NiwKLUBAIC0xNTQsNyArMTU2LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBz aGEyNTZfbWQgPSB7Ci0gICAgIE5JRF9zaGEyNTYsCi0gICAgIE5JRF9zaGEyNTZXaXRoUlNBRW5j cnlwdGlvbiwKLSAgICAgU0hBMjU2X0RJR0VTVF9MRU5HVEgsCi0tICAgIEVWUF9NRF9GTEFHX1BL RVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsgICAg RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5UIHwKLSsgICAgICAgIEVWUF9NRF9GTEFHX0ZJUFMsCi0gICAgIGluaXQyNTYsCi0gICAg IHVwZGF0ZTI1NiwKLSAgICAgZmluYWwyNTYsCi1AQCAtMTk3LDcgKzIwMCw4IEBAIHN0YXRpYyBj b25zdCBFVlBfTUQgc2hhMzg0X21kID0gewotICAgICBOSURfc2hhMzg0LAotICAgICBOSURfc2hh Mzg0V2l0aFJTQUVuY3J5cHRpb24sCi0gICAgIFNIQTM4NF9ESUdFU1RfTEVOR1RILAotLSAgICBF VlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9B QlNFTlQsCi0rICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9G TEFHX0RJR0FMR0lEX0FCU0VOVCB8Ci0rICAgICAgICBFVlBfTURfRkxBR19GSVBTLAotICAgICBp bml0Mzg0LAotICAgICB1cGRhdGU1MTIsCi0gICAgIGZpbmFsNTEyLAotQEAgLTIxNyw3ICsyMjEs OCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUxMl9tZCA9IHsKLSAgICAgTklEX3NoYTUxMiwK LSAgICAgTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAotICAgICBTSEE1MTJfRElHRVNUX0xF TkdUSCwKLS0gICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZM QUdfRElHQUxHSURfQUJTRU5ULAotKyAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRV UkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfAotKyAgICAgICAgRVZQX01EX0ZMQUdf RklQUywKLSAgICAgaW5pdDUxMiwKLSAgICAgdXBkYXRlNTEyLAotICAgICBmaW5hbDUxMiwKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZXZwL3Bfc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9w X3NpZ24uYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9wX3NpZ24uYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MjU2 MjUyOSArMDEwMAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotIAotICNpZmRlZiB1bmRlZgotIHZvaWQgRVZQ X1NpZ25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQotQEAgLTEwMSw2ICsxMDIs MjIgQEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZwotICAgICAgICAg ICAgIGdvdG8gZXJyOwotICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21k KHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAg ICAgIGlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKyAgICAgICAg ICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURE SU5HKSA8PSAwKQotKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIGlmIChjdHgt PmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpIHsKLSsgICAgICAgICAgICBpbnQgc2Fs dGxlbjsKLSsgICAgICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0 eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PQotKyAgICAgICAgICAgICAgICAwKQotKyAgICAg ICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgICAgICBzYWx0bGVuID0gTV9FVlBfTURfQ1RY X0ZMQUdfUFNTX1NBTFQoY3R4KTsKLSsgICAgICAgICAgICBpZiAoc2FsdGxlbiA9PSBFVlBfTURf Q1RYX0ZMQUdfUFNTX01ETEVOKQotKyAgICAgICAgICAgICAgICBzYWx0bGVuID0gLTE7Ci0rICAg ICAgICAgICAgZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCi0r ICAgICAgICAgICAgICAgIHNhbHRsZW4gPSAtMjsKLSsgICAgICAgICAgICBpZiAoRVZQX1BLRVlf Q1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rICAgICAgICAg ICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotICAgICAgICAgaWYgKEVWUF9QS0VZX3NpZ24o cGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKLSAgICAgICAgICAgICBnb3Rv IGVycjsKLSAgICAgICAgICpzaWdsZW4gPSBzbHRtcDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvcF92 ZXJpZnkuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIw MTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2V2cC9wX3ZlcmlmeS5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYyNTYyNTI5ICswMTAwCi1A QCAtNjEsNiArNjEsNyBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxv cGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+Ci0gCi0gaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgs IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBzaWdsZW4sIEVWUF9QS0VZICpwa2V5KQotQEAgLTg3LDYgKzg4LDIyIEBAIGludCBF VlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb24KLSAgICAgICAgICAgICBnb3RvIGVy cjsKLSAgICAgICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4 LT5kaWdlc3QpIDw9IDApCi0gICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICBpZiAoY3R4 LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKLSsgICAgICAgICAgICBpZiAoRVZQ X1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkK LSsgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICBpZiAoY3R4LT5mbGFncyAmIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTKSB7Ci0rICAgICAgICAgICAgaW50IHNhbHRsZW47Ci0rICAg ICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NT MV9QU1NfUEFERElORykgPD0KLSsgICAgICAgICAgICAgICAgMCkKLSsgICAgICAgICAgICAgICAg Z290byBlcnI7Ci0rICAgICAgICAgICAgc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19T QUxUKGN0eCk7Ci0rICAgICAgICAgICAgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BT U19NRExFTikKLSsgICAgICAgICAgICAgICAgc2FsdGxlbiA9IC0xOwotKyAgICAgICAgICAgIGVs c2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQotKyAgICAgICAgICAg ICAgICBzYWx0bGVuID0gLTI7Ci0rICAgICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNh X3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKyAgICAgICAgICAgICAgICBnb3Rv IGVycjsKLSsgICAgICAgIH0KLSAgICAgICAgIGkgPSBFVlBfUEtFWV92ZXJpZnkocGtjdHgsIHNp Z2J1Ziwgc2lnbGVuLCBtLCBtX2xlbik7Ci0gIGVycjoKLSAgICAgICAgIEVWUF9QS0VZX0NUWF9m cmVlKHBrY3R4KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfYWVz X3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxm dGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu Yy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYyNTYyNTI5ICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDE1LTEyLTA0IDEzOjU1OjUx Ljk2MjU2MjUyOSArMDEwMAotQEAgLTAsMCArMSwzNjUgQEAKLSsvKiA9PT09PT09PT09PT09PT09 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+ Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot K3N0YXRpYyBjb25zdCBzdHJ1Y3QgewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07 Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XTsKLSsgICAgY29uc3QgdW5z aWduZWQgY2hhciBjaXBoZXJ0ZXh0WzE2XTsKLSt9IHRlc3RzW10gPSB7Ci0rICAgIHsKLSsgICAg ICAgIHsKLSsgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYs IDB4MDcsCi0rICAgICAgICAgICAgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4 MEQsIDB4MEUsIDB4MEZ9LCB7Ci0rICAgICAgICAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0 LCAweDU1LCAweDY2LCAweDc3LAotKyAgICAgICAgICAgICAgICAweDg4LCAweDk5LCAweEFBLCAw eEJCLCAweENDLCAweERELCAweEVFLCAweEZGfSwgewotKzB4NjksIDB4QzQsIDB4RTAsIDB4RDgs IDB4NkEsIDB4N0IsIDB4MDQsIDB4MzAsCi0rICAgICAgICAgICAgICAgIDB4RDgsIDB4Q0QsIDB4 QjcsIDB4ODAsIDB4NzAsIDB4QjQsIDB4QzUsIDB4NUF9LH0sfTsKLSsKLStzdGF0aWMgaW50IGNv cnJ1cHRfYWVzOwotKwotK3ZvaWQgRklQU19jb3JydXB0X2FlcygpCi0rewotKyAgICBjb3JydXB0 X2FlcyA9IDE7Ci0rfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCi0rewotKyAgICBpbnQg bjsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgZm9yIChuID0gMDsgbiA8IDE7ICsrbikg ewotKyAgICAgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKwotKyAgICAgICAgbWVtY3B5KGtl eSwgdGVzdHNbbl0ua2V5LCBzaXplb2Yoa2V5KSk7Ci0rICAgICAgICBpZiAoY29ycnVwdF9hZXMp Ci0rICAgICAgICAgICAga2V5WzBdKys7Ci0rICAgICAgICBpZiAoZmlwc19jaXBoZXJfdGVzdCgm Y3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eSwgTlVMTCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW25dLnBsYWludGV4 dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW25dLmNpcGhlcnRleHQsIDE2 KSA8PSAwKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rICAgIHJldCA9IDE7Ci0r IGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsgICAgaWYgKHJldCA9 PSAwKQotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMsIEZJUFNfUl9T RUxGVEVTVF9GQUlMRUQpOwotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLSsvKiBBRVMtQ0NNIHRl c3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGNjbV9rZXlbXSA9IHsKLSsgICAgMHhjZSwgMHhiMCwgMHgwOSwgMHhh ZSwgMHhhNCwgMHg0NSwgMHg0NCwgMHg1MSwgMHhmZSwgMHhhZCwgMHhmMCwgMHhlNiwKLSsgICAg MHhiMywgMHg2ZiwgMHg0NSwgMHg1NSwgMHg1ZCwgMHhkMCwgMHg0NywgMHgyMywgMHhiYSwgMHhh NCwgMHg0OCwgMHhlOAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX25v bmNlW10gPSB7Ci0rICAgIDB4NzYsIDB4NDAsIDB4NDMsIDB4YzQsIDB4OTQsIDB4NjAsIDB4YjcK LSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9hZGF0YVtdID0gewotKyAg ICAweDZlLCAweDgwLCAweGRkLCAweDdmLCAweDFiLCAweGFkLCAweGYzLCAweGExLCAweGM5LCAw eGFiLCAweDI1LCAweGM3LAotKyAgICAweDVmLCAweDEwLCAweGJkLCAweGU3LCAweDhjLCAweDIz LCAweGZhLCAweDBlLCAweGI4LCAweGY5LCAweGFhLCAweGE1LAotKyAgICAweDNhLCAweGRlLCAw eGZiLCAweGY0LCAweGNiLCAweGY3LCAweDhmLCAweGU0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBjY21fcHRbXSA9IHsKLSsgICAgMHhjOCwgMHhkMiwgMHg3NSwgMHhmOSwg MHgxOSwgMHhlMSwgMHg3ZCwgMHg3ZiwgMHhlNiwgMHg5YywgMHgyYSwgMHgxZiwKLSsgICAgMHg1 OCwgMHg5MywgMHg5ZCwgMHhmZSwgMHg0ZCwgMHg0MCwgMHgzNywgMHg5MSwgMHhiNSwgMHhkZiwg MHgxMywgMHgxMAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2N0W10g PSB7Ci0rICAgIDB4OGEsIDB4MGYsIDB4M2QsIDB4ODIsIDB4MjksIDB4ZTQsIDB4OGUsIDB4NzQs IDB4ODcsIDB4ZmQsIDB4OTUsIDB4YTIsCi0rICAgIDB4OGEsIDB4ZDMsIDB4OTIsIDB4YzgsIDB4 MGIsIDB4MzYsIDB4ODEsIDB4ZDQsIDB4ZmIsIDB4YzcsIDB4YmIsIDB4ZmQKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV90YWdbXSA9IHsKLSsgICAgMHgyZCwgMHhkNiwg MHhlZiwgMHgxYywgMHg0NSwgMHhkNCwgMHhjYywgMHhiNywgMHgyMywgMHhkYywgMHgwNywgMHg0 NCwKLSsgICAgMHgxNCwgMHhkYiwgMHg1MCwgMHg2ZAotK307Ci0rCi0raW50IEZJUFNfc2VsZnRl c3RfYWVzX2NjbSh2b2lkKQotK3sKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNo YXIgb3V0WzEyOF0sIHRhZ1sxNl07Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsgICAgbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkp OwotKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTkyX2NjbSgpLCBO VUxMLCBOVUxMLCBOVUxMLCAxKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9D SVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9JVkxFTiwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihjY21fbm9uY2UpLCBOVUxMKSkKLSsgICAgICAgIGdv dG8gZXJyOwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NN X1NFVF9UQUcsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2NtX3RhZyks IE5VTEwpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgo JmN0eCwgTlVMTCwgTlVMTCwgY2NtX2tleSwgY2NtX25vbmNlLCAxKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX3B0 KSkgIT0gc2l6ZW9mKGNjbV9wdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9D aXBoZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRhLCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQotKyAg ICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX3B0LCBz aXplb2YoY2NtX3B0KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsK LSsgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9HRVRfVEFH LCAxNiwgdGFnKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAobWVtY21wKHRhZywgY2Nt X3RhZywgc2l6ZW9mKGNjbV90YWcpKQotKyAgICAgICAgfHwgbWVtY21wKG91dCwgY2NtX2N0LCBz aXplb2YoY2NtX2N0KSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgbWVtc2V0KG91dCwg MCwgc2l6ZW9mKG91dCkpOwotKwotKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVW UF9hZXNfMTkyX2NjbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSkKLSsgICAgICAgIGdvdG8gZXJy OwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9J VkxFTiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjY21fbm9uY2UpLCBO VUxMKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwo JmN0eCwgRVZQX0NUUkxfQ0NNX1NFVF9UQUcsIDE2LCB0YWcpKQotKyAgICAgICAgZ290byBlcnI7 Ci0rICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwgY2NtX2tleSwg Y2NtX25vbmNlLCAwKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoRVZQX0NpcGhlcigm Y3R4LCBOVUxMLCBOVUxMLCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNjbV9jdCkpCi0rICAg ICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgY2NtX2FkYXRh LCBzaXplb2YoY2NtX2FkYXRhKSkgPCAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChF VlBfQ2lwaGVyKCZjdHgsIG91dCwgY2NtX2N0LCBzaXplb2YoY2NtX2N0KSkgIT0gc2l6ZW9mKGNj bV9wdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKG1lbWNtcChvdXQsIGNjbV9w dCwgc2l6ZW9mKGNjbV9wdCkpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIHJldCA9IDE7 Ci0rCi0rIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsgICAg aWYgKHJldCA9PSAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FF U19DQ00sIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IH0gZWxzZQotKyAgICAgICAgcmV0dXJuIHJldDsKLSsKLSt9Ci0rCi0rLyogQUVTLUdDTSB0ZXN0 IGRhdGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBnY21fa2V5W10gPSB7Ci0rICAgIDB4ZWUsIDB4YmMsIDB4MWYsIDB4NTcs IDB4NDgsIDB4N2YsIDB4NTEsIDB4OTIsIDB4MWMsIDB4MDQsIDB4NjUsIDB4NjYsCi0rICAgIDB4 NWYsIDB4OGEsIDB4ZTYsIDB4ZDEsIDB4NjUsIDB4OGIsIDB4YjIsIDB4NmQsIDB4ZTYsIDB4Zjgs IDB4YTAsIDB4NjksCi0rICAgIDB4YTMsIDB4NTIsIDB4MDIsIDB4OTMsIDB4YTUsIDB4NzIsIDB4 MDcsIDB4OGYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9pdltdID0g ewotKyAgICAweDk5LCAweGFhLCAweDNlLCAweDY4LCAweGVkLCAweDgxLCAweDczLCAweGEwLCAw eGVlLCAweGQwLCAweDY2LCAweDg0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBnY21fcHRbXSA9IHsKLSsgICAgMHhmNSwgMHg2ZSwgMHg4NywgMHgwNSwgMHg1YiwgMHhjMywg MHgyZCwgMHgwZSwgMHhlYiwgMHgzMSwgMHhiMiwgMHhlYSwKLSsgICAgMHhjYywgMHgyYiwgMHhm MiwgMHhhNQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2FhZFtdID0g ewotKyAgICAweDRkLCAweDIzLCAweGMzLCAweGNlLCAweGMzLCAweDM0LCAweGI0LCAweDliLCAw eGRiLCAweDM3LCAweDBjLCAweDQzLAotKyAgICAweDdmLCAweGVjLCAweDc4LCAweGRlCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fY3RbXSA9IHsKLSsgICAgMHhmNywg MHgyNiwgMHg0NCwgMHgxMywgMHhhOCwgMHg0YywgMHgwZSwgMHg3YywgMHhkNSwgMHgzNiwgMHg4 NiwgMHg3ZSwKLSsgICAgMHhiOSwgMHhmMiwgMHgxNywgMHgzNgotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3RhZ1tdID0gewotKyAgICAweDY3LCAweGJhLCAweDA1LCAw eDEwLCAweDI2LCAweDJhLCAweGU0LCAweDg3LCAweGQ3LCAweDM3LCAweGVlLCAweDYyLAotKyAg ICAweDk4LCAweGY3LCAweDdlLCAweDBjCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXNf Z2NtKHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRb MTI4XSwgdGFnWzE2XTsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVS X0NUWF9pbml0KCZjdHgpOwotKyAgICBtZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0rICAg IG1lbXNldCh0YWcsIDAsIHNpemVvZih0YWcpKTsKLSsgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMSkpCi0rICAgICAg ICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJM X0dDTV9TRVRfSVZMRU4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ2Nt X2l2KSwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ2lwaGVySW5p dF9leCgmY3R4LCBOVUxMLCBOVUxMLCBnY21fa2V5LCBnY21faXYsIDEpKQotKyAgICAgICAgZ290 byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGdjbV9hYWQsIHNpemVvZihn Y21fYWFkKSkgPCAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKCZj dHgsIG91dCwgZ2NtX3B0LCBzaXplb2YoZ2NtX3B0KSkgIT0gc2l6ZW9mKGdjbV9jdCkpCi0rICAg ICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgMCkg PCAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3Ry bCgmY3R4LCBFVlBfQ1RSTF9HQ01fR0VUX1RBRywgMTYsIHRhZykpCi0rICAgICAgICBnb3RvIGVy cjsKLSsKLSsgICAgaWYgKG1lbWNtcCh0YWcsIGdjbV90YWcsIDE2KSB8fCBtZW1jbXAob3V0LCBn Y21fY3QsIDE2KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBtZW1zZXQob3V0LCAwLCBz aXplb2Yob3V0KSk7Ci0rCi0rICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Fl c18yNTZfZ2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDApKQotKyAgICAgICAgZ290byBlcnI7Ci0r ICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVO LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdjbV9pdiksIE5VTEwpKQot KyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBF VlBfQ1RSTF9HQ01fU0VUX1RBRywgMTYsIHRhZykpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAg aWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBnY21fa2V5LCBnY21faXYs IDApKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEws IGdjbV9hYWQsIHNpemVvZihnY21fYWFkKSkgPCAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAg IGlmIChFVlBfQ2lwaGVyKCZjdHgsIG91dCwgZ2NtX2N0LCBzaXplb2YoZ2NtX2N0KSkgIT0gc2l6 ZW9mKGdjbV9wdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0 eCwgTlVMTCwgTlVMTCwgMCkgPCAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmICht ZW1jbXAob3V0LCBnY21fcHQsIDE2KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICByZXQg PSAxOwotKwotKyBlcnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0r ICAgIGlmIChyZXQgPT0gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVT VF9BRVNfR0NNLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwot KyAgICB9IGVsc2UKLSsgICAgICAgIHJldHVybiByZXQ7Ci0rCi0rfQotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfa2V5W10gPSB7Ci0rICAgIDB4YTEsIDB4YjksIDB4MGMs IDB4YmEsIDB4M2YsIDB4MDYsIDB4YWMsIDB4MzUsIDB4M2IsIDB4MmMsIDB4MzQsIDB4MzgsCi0r ICAgIDB4NzYsIDB4MDgsIDB4MTcsIDB4NjIsIDB4MDksIDB4MDksIDB4MjMsIDB4MDIsIDB4NmUs IDB4OTEsIDB4NzcsIDB4MTgsCi0rICAgIDB4MTUsIDB4ZjIsIDB4OWQsIDB4YWIsIDB4MDEsIDB4 OTMsIDB4MmYsIDB4MmYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18x MjhfaVtdID0gewotKyAgICAweDRmLCAweGFlLCAweGY3LCAweDExLCAweDdjLCAweGRhLCAweDU5 LCAweGM2LCAweDZlLCAweDRiLCAweDkyLCAweDAxLAotKyAgICAweDNlLCAweDc2LCAweDhhLCAw eGQ1Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X3B0W10gPSB7 Ci0rICAgIDB4ZWIsIDB4YWIsIDB4Y2UsIDB4OTUsIDB4YjEsIDB4NGQsIDB4M2MsIDB4OGQsIDB4 NmYsIDB4YjMsIDB4NTAsIDB4MzksCi0rICAgIDB4MDcsIDB4OTAsIDB4MzEsIDB4MWMKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfY3RbXSA9IHsKLSsgICAgMHg3 NywgMHg4YSwgMHhlOCwgMHhiNCwgMHgzYywgMHhiOSwgMHg4ZCwgMHg1YSwgMHg4MiwgMHg1MCwg MHg4MSwgMHhkNSwKLSsgICAgMHhiZSwgMHg0NywgMHgxYywgMHg2MwotK307Ci0rCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9rZXlbXSA9IHsKLSsgICAgMHgxZSwgMHhhNiwg MHg2MSwgMHhjNSwgMHg4ZCwgMHg5NCwgMHgzYSwgMHgwZSwgMHg0OCwgMHgwMSwgMHhlNCwgMHgy ZiwKLSsgICAgMHg0YiwgMHgwOSwgMHg0NywgMHgxNCwgMHg5ZSwgMHg3ZiwgMHg5ZiwgMHg4ZSwg MHgzZSwgMHg2OCwgMHhkMCwgMHhjNywKLSsgICAgMHg1MCwgMHg1MiwgMHgxMCwgMHhiZCwgMHgz MSwgMHgxYSwgMHgwZSwgMHg3YywgMHhkNiwgMHhlMSwgMHgzZiwgMHhmZCwKLSsgICAgMHhmMiwg MHg0MSwgMHg4ZCwgMHg4ZCwgMHgxOSwgMHgxMSwgMHhjMCwgMHgwNCwgMHhjZCwgMHhhNSwgMHg4 ZCwgMHhhMywKLSsgICAgMHhkNiwgMHgxOSwgMHhiNywgMHhlMiwgMHhiOSwgMHgxNCwgMHgxZSwg MHg1OCwgMHgzMSwgMHg4ZSwgMHhlYSwgMHgzOSwKLSsgICAgMHgyYywgMHhmNCwgMHgxYiwgMHgw OAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9pW10gPSB7Ci0r ICAgIDB4YWQsIDB4ZjgsIDB4ZDksIDB4MjYsIDB4MjcsIDB4NDYsIDB4NGEsIDB4ZDIsIDB4ZjAs IDB4NDIsIDB4OGUsIDB4ODQsCi0rICAgIDB4YTksIDB4ZjgsIDB4NzUsIDB4NjQKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfcHRbXSA9IHsKLSsgICAgMHgyZSwg MHhlZCwgMHhlYSwgMHg1MiwgMHhjZCwgMHg4MiwgMHgxNSwgMHhlMSwgMHhhYywgMHhjNiwgMHg0 NywgMHhlOCwKLSsgICAgMHgxMCwgMHhiYiwgMHhjMywgMHg2NCwgMHgyZSwgMHg4NywgMHgyOCwg MHg3ZiwgMHg4ZCwgMHgyZSwgMHg1NywgMHhlMywKLSsgICAgMHg2YywgMHgwYSwgMHgyNCwgMHhm YiwgMHhjMSwgMHgyYSwgMHgyMCwgMHgyZQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgWFRTXzI1Nl9jdFtdID0gewotKyAgICAweGNiLCAweGFhLCAweGQwLCAweGUyLCAweGY2 LCAweGNlLCAweGEzLCAweGY1LCAweDBiLCAweDM3LCAweGY5LCAweDM0LAotKyAgICAweGQ0LCAw eDZhLCAweDliLCAweDEzLCAweDBiLCAweDlkLCAweDU0LCAweGYwLCAweDdlLCAweDM0LCAweGYz LCAweDZhLAotKyAgICAweGY3LCAweDkzLCAweGU4LCAweDZmLCAweDczLCAweGM2LCAweGQ3LCAw eGRiCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKCkKLSt7Ci0rICAgIGludCBy ZXQgPSAxOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2lu aXQoJmN0eCk7Ci0rCi0rICAgIGlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4 X3h0cygpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBYVFNfMTI4X2tleSwgWFRTXzEyOF9p LCBYVFNfMTI4X3B0LCBYVFNfMTI4X2N0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YoWFRTXzEyOF9wdCkpIDw9IDApCi0rICAgICAgICByZXQgPSAwOwotKwotKyAgICBpZiAoZmlw c19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzI1Nl94dHMoKSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgWFRTXzI1Nl9rZXksIFhUU18yNTZfaSwgWFRTXzI1Nl9wdCwgWFRTXzI1Nl9jdCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFhUU18yNTZfcHQpKSA8PSAwKQotKyAg ICAgICAgcmV0ID0gMDsKLSsKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsg ICAgaWYgKHJldCA9PSAwKQotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9B RVNfWFRTLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0r Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzLmMuZmlw cyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzLmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MjU2MjUyOSArMDEw MAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHMuYwkyMDE1LTEyLTA0IDEzOjU1 OjUxLjk2MjU2MjUyOSArMDEwMAotQEAgLTAsMCArMSw0ODMgQEAKLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6 Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICoKLSsgKi8KLSsKLSsjZGVmaW5lIF9HTlVfU09VUkNFCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKyNpbmNsdWRlIDxkbGZjbi5oPgotKyNpbmNsdWRlIDxz dGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0r Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r Ci0rIyBpZm5kZWYgUEFUSF9NQVgKLSsjICBkZWZpbmUgUEFUSF9NQVggMTAyNAotKyMgZW5kaWYK LSsKLStzdGF0aWMgaW50IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0rc3RhdGljIGludCBmaXBz X21vZGUgPSAwOwotK3N0YXRpYyBpbnQgZmlwc19zdGFydGVkID0gMDsKLSsKLStzdGF0aWMgaW50 IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKTsKLStzdGF0aWMgaW50IGZpcHNfc2V0X293bmlu Z190aHJlYWQodm9pZCk7Ci0rc3RhdGljIGludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9p ZCk7Ci0rCi0rIyBkZWZpbmUgZmlwc193X2xvY2soKSAgIENSWVBUT193X2xvY2soQ1JZUFRPX0xP Q0tfRklQUykKLSsjIGRlZmluZSBmaXBzX3dfdW5sb2NrKCkgQ1JZUFRPX3dfdW5sb2NrKENSWVBU T19MT0NLX0ZJUFMpCi0rIyBkZWZpbmUgZmlwc19yX2xvY2soKSAgIENSWVBUT19yX2xvY2soQ1JZ UFRPX0xPQ0tfRklQUykKLSsjIGRlZmluZSBmaXBzX3JfdW5sb2NrKCkgQ1JZUFRPX3JfdW5sb2Nr KENSWVBUT19MT0NLX0ZJUFMpCi0rCi0rc3RhdGljIHZvaWQgZmlwc19zZXRfbW9kZShpbnQgb25v ZmYpCi0rewotKyAgICBpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgp OwotKwotKyAgICBpZiAoZmlwc19zdGFydGVkKSB7Ci0rICAgICAgICBpZiAoIW93bmluZ190aHJl YWQpCi0rICAgICAgICAgICAgZmlwc193X2xvY2soKTsKLSsgICAgICAgIGZpcHNfbW9kZSA9IG9u b2ZmOwotKyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQotKyAgICAgICAgICAgIGZpcHNfd191 bmxvY2soKTsKLSsgICAgfQotK30KLSsKLStpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKQotK3sK LSsgICAgaW50IHJldCA9IDA7Ci0rICAgIGludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25p bmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKLSsgICAgICAgIGlmICgh b3duaW5nX3RocmVhZCkKLSsgICAgICAgICAgICBmaXBzX3JfbG9jaygpOwotKyAgICAgICAgcmV0 ID0gZmlwc19tb2RlOwotKyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQotKyAgICAgICAgICAg IGZpcHNfcl91bmxvY2soKTsKLSsgICAgfQotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLStpbnQg RklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKLSt7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBp ZiAoZmlwc19zdGFydGVkKSB7Ci0rICAgICAgICBpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNf b3duaW5nX3RocmVhZCgpOwotKwotKyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQotKyAgICAg ICAgICAgIGZpcHNfcl9sb2NrKCk7Ci0rICAgICAgICByZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7 Ci0rICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCi0rICAgICAgICAgICAgZmlwc19yX3VubG9j aygpOwotKyAgICB9Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwotKy8qIFNlbGZ0ZXN0IGZhaWx1 cmUgZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCi0rICogZHVyaW5nICph bnkqIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0KLSsgKiBvdmVy aGVhZCBwb3NzaWJsZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0LgotKyAqLwot KwotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKQotK3sKLSsgICAgaWYgKGZpcHNfc2Vs ZnRlc3RfZmFpbCkgewotKyAgICAgICAgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sICJG QVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsKLSsgICAgfQotK30KLSsKLSt2b2lkIGZpcHNf c2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKLSt7Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7 Ci0rfQotKwotKy8qIHdlIGltcGxlbWVudCB3aGF0IGxpYmZpcHNjaGVjayBkb2VzIG91cnNlbHZl cyAqLwotKwotK3N0YXRpYyBpbnQKLStnZXRfbGlicmFyeV9wYXRoKGNvbnN0IGNoYXIgKmxpYm5h bWUsIGNvbnN0IGNoYXIgKnN5bWJvbG5hbWUsIGNoYXIgKnBhdGgsCi0rICAgICAgICAgICAgICAg ICBzaXplX3QgcGF0aGxlbikKLSt7Ci0rICAgIERsX2luZm8gaW5mbzsKLSsgICAgdm9pZCAqZGws ICpzeW07Ci0rICAgIGludCBydiA9IC0xOwotKwotKyAgICBkbCA9IGRsb3BlbihsaWJuYW1lLCBS VExEX0xBWlkpOwotKyAgICBpZiAoZGwgPT0gTlVMTCkgewotKyAgICAgICAgcmV0dXJuIC0xOwot KyAgICB9Ci0rCi0rICAgIHN5bSA9IGRsc3ltKGRsLCBzeW1ib2xuYW1lKTsKLSsKLSsgICAgaWYg KHN5bSAhPSBOVUxMICYmIGRsYWRkcihzeW0sICZpbmZvKSkgewotKyAgICAgICAgc3RybmNweShw YXRoLCBpbmZvLmRsaV9mbmFtZSwgcGF0aGxlbiAtIDEpOwotKyAgICAgICAgcGF0aFtwYXRobGVu IC0gMV0gPSAnXDAnOwotKyAgICAgICAgcnYgPSAwOwotKyAgICB9Ci0rCi0rICAgIGRsY2xvc2Uo ZGwpOwotKwotKyAgICByZXR1cm4gcnY7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBjaGFyIGNvbnZb XSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSsKLStzdGF0aWMgY2hhciAqYmluMmhleCh2b2lkICpi dWYsIHNpemVfdCBsZW4pCi0rewotKyAgICBjaGFyICpoZXgsICpwOwotKyAgICB1bnNpZ25lZCBj aGFyICpzcmMgPSBidWY7Ci0rCi0rICAgIGhleCA9IG1hbGxvYyhsZW4gKiAyICsgMSk7Ci0rICAg IGlmIChoZXggPT0gTlVMTCkKLSsgICAgICAgIHJldHVybiBOVUxMOwotKwotKyAgICBwID0gaGV4 OwotKwotKyAgICB3aGlsZSAobGVuID4gMCkgewotKyAgICAgICAgdW5zaWduZWQgYzsKLSsKLSsg ICAgICAgIGMgPSAqc3JjOwotKyAgICAgICAgc3JjKys7Ci0rCi0rICAgICAgICAqcCA9IGNvbnZb YyA+PiA0XTsKLSsgICAgICAgICsrcDsKLSsgICAgICAgICpwID0gY29udltjICYgMHgwZl07Ci0r ICAgICAgICArK3A7Ci0rICAgICAgICAtLWxlbjsKLSsgICAgfQotKyAgICAqcCA9ICdcMCc7Ci0r ICAgIHJldHVybiBoZXg7Ci0rfQotKwotKyMgZGVmaW5lIEhNQUNfUFJFRklYICIuIgotKyMgZGVm aW5lIEhNQUNfU1VGRklYICIuaG1hYyIKLSsjIGRlZmluZSBSRUFEX0JVRkZFUl9MRU5HVEggMTYz ODQKLSsKLStzdGF0aWMgY2hhciAqbWFrZV9obWFjX3BhdGgoY29uc3QgY2hhciAqb3JpZ3BhdGgp Ci0rewotKyAgICBjaGFyICpwYXRoLCAqcDsKLSsgICAgY29uc3QgY2hhciAqZm47Ci0rCi0rICAg IHBhdGggPQotKyAgICAgICAgbWFsbG9jKHNpemVvZihITUFDX1BSRUZJWCkgKyBzaXplb2YoSE1B Q19TVUZGSVgpICsgc3RybGVuKG9yaWdwYXRoKSk7Ci0rICAgIGlmIChwYXRoID09IE5VTEwpIHsK LSsgICAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGZuID0gc3RycmNocihvcmln cGF0aCwgJy8nKTsKLSsgICAgaWYgKGZuID09IE5VTEwpIHsKLSsgICAgICAgIGZuID0gb3JpZ3Bh dGg7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICArK2ZuOwotKyAgICB9Ci0rCi0rICAgIHN0cm5j cHkocGF0aCwgb3JpZ3BhdGgsIGZuIC0gb3JpZ3BhdGgpOwotKyAgICBwID0gcGF0aCArIChmbiAt IG9yaWdwYXRoKTsKLSsgICAgcCA9IHN0cGNweShwLCBITUFDX1BSRUZJWCk7Ci0rICAgIHAgPSBz dHBjcHkocCwgZm4pOwotKyAgICBwID0gc3RwY3B5KHAsIEhNQUNfU1VGRklYKTsKLSsKLSsgICAg cmV0dXJuIHBhdGg7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBjaGFyIGhtYWNrZXlbXSA9ICJvcmJv RGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFyUCI7Ci0rCi0rc3RhdGljIGludCBjb21wdXRlX2Zp bGVfaG1hYyhjb25zdCBjaGFyICpwYXRoLCB2b2lkICoqYnVmLCBzaXplX3QgKmhtYWNsZW4pCi0r ewotKyAgICBGSUxFICpmID0gTlVMTDsKLSsgICAgaW50IHJ2ID0gLTE7Ci0rICAgIHVuc2lnbmVk IGNoYXIgcmJ1ZltSRUFEX0JVRkZFUl9MRU5HVEhdOwotKyAgICBzaXplX3QgbGVuOwotKyAgICB1 bnNpZ25lZCBpbnQgaGxlbjsKLSsgICAgSE1BQ19DVFggYzsKLSsKLSsgICAgSE1BQ19DVFhfaW5p dCgmYyk7Ci0rCi0rICAgIGYgPSBmb3BlbihwYXRoLCAiciIpOwotKwotKyAgICBpZiAoZiA9PSBO VUxMKSB7Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgfQotKwotKyAgICBITUFDX0luaXQoJmMs IGhtYWNrZXksIHNpemVvZihobWFja2V5KSAtIDEsIEVWUF9zaGEyNTYoKSk7Ci0rCi0rICAgIHdo aWxlICgobGVuID0gZnJlYWQocmJ1ZiwgMSwgc2l6ZW9mKHJidWYpLCBmKSkgIT0gMCkgewotKyAg ICAgICAgSE1BQ19VcGRhdGUoJmMsIHJidWYsIGxlbik7Ci0rICAgIH0KLSsKLSsgICAgbGVuID0g c2l6ZW9mKHJidWYpOwotKyAgICAvKiByZXVzZSByYnVmIGZvciBobWFjICovCi0rICAgIEhNQUNf RmluYWwoJmMsIHJidWYsICZobGVuKTsKLSsKLSsgICAgKmJ1ZiA9IG1hbGxvYyhobGVuKTsKLSsg ICAgaWYgKCpidWYgPT0gTlVMTCkgewotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsg ICAgKmhtYWNsZW4gPSBobGVuOwotKwotKyAgICBtZW1jcHkoKmJ1ZiwgcmJ1ZiwgaGxlbik7Ci0r Ci0rICAgIHJ2ID0gMDsKLSsgZW5kOgotKyAgICBITUFDX0NUWF9jbGVhbnVwKCZjKTsKLSsKLSsg ICAgaWYgKGYpCi0rICAgICAgICBmY2xvc2UoZik7Ci0rCi0rICAgIHJldHVybiBydjsKLSt9Ci0r Ci0rc3RhdGljIGludCBGSVBTQ0hFQ0tfdmVyaWZ5KGNvbnN0IGNoYXIgKmxpYm5hbWUsIGNvbnN0 IGNoYXIgKnN5bWJvbG5hbWUpCi0rewotKyAgICBjaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKLSsg ICAgaW50IHJ2OwotKyAgICBGSUxFICpoZjsKLSsgICAgY2hhciAqaG1hY3BhdGgsICpwOwotKyAg ICBjaGFyICpobWFjID0gTlVMTDsKLSsgICAgc2l6ZV90IG47Ci0rCi0rICAgIHJ2ID0gZ2V0X2xp YnJhcnlfcGF0aChsaWJuYW1lLCBzeW1ib2xuYW1lLCBwYXRoLCBzaXplb2YocGF0aCkpOwotKwot KyAgICBpZiAocnYgPCAwKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGhtYWNwYXRoID0g bWFrZV9obWFjX3BhdGgocGF0aCk7Ci0rICAgIGlmIChobWFjcGF0aCA9PSBOVUxMKQotKyAgICAg ICAgcmV0dXJuIDA7Ci0rCi0rICAgIGhmID0gZm9wZW4oaG1hY3BhdGgsICJyIik7Ci0rICAgIGlm IChoZiA9PSBOVUxMKSB7Ci0rICAgICAgICBmcmVlKGhtYWNwYXRoKTsKLSsgICAgICAgIHJldHVy biAwOwotKyAgICB9Ci0rCi0rICAgIGlmIChnZXRsaW5lKCZobWFjLCAmbiwgaGYpID4gMCkgewot KyAgICAgICAgdm9pZCAqYnVmOwotKyAgICAgICAgc2l6ZV90IGhtYWNsZW47Ci0rICAgICAgICBj aGFyICpoZXg7Ci0rCi0rICAgICAgICBpZiAoKHAgPSBzdHJjaHIoaG1hYywgJ1xuJykpICE9IE5V TEwpCi0rICAgICAgICAgICAgKnAgPSAnXDAnOwotKwotKyAgICAgICAgaWYgKGNvbXB1dGVfZmls ZV9obWFjKHBhdGgsICZidWYsICZobWFjbGVuKSA8IDApIHsKLSsgICAgICAgICAgICBydiA9IC00 OwotKyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKCho ZXggPSBiaW4yaGV4KGJ1ZiwgaG1hY2xlbikpID09IE5VTEwpIHsKLSsgICAgICAgICAgICBmcmVl KGJ1Zik7Ci0rICAgICAgICAgICAgcnYgPSAtNTsKLSsgICAgICAgICAgICBnb3RvIGVuZDsKLSsg ICAgICAgIH0KLSsKLSsgICAgICAgIGlmIChzdHJjbXAoaGV4LCBobWFjKSAhPSAwKSB7Ci0rICAg ICAgICAgICAgcnYgPSAtMTsKLSsgICAgICAgIH0KLSsgICAgICAgIGZyZWUoYnVmKTsKLSsgICAg ICAgIGZyZWUoaGV4KTsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIHJ2ID0gLTE7Ci0rICAgIH0K LSsKLSsgZW5kOgotKyAgICBmcmVlKGhtYWMpOwotKyAgICBmcmVlKGhtYWNwYXRoKTsKLSsgICAg ZmNsb3NlKGhmKTsKLSsKLSsgICAgaWYgKHJ2IDwgMCkKLSsgICAgICAgIHJldHVybiAwOwotKwot KyAgICAvKiBjaGVjayBzdWNjZXNzZnVsICovCi0rICAgIHJldHVybiAxOwotK30KLSsKLStpbnQg RklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKQotK3sKLSsg ICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGZpcHNfd19sb2NrKCk7Ci0rICAgIGZpcHNfc3RhcnRl ZCA9IDE7Ci0rICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKLSsKLSsgICAgaWYgKG9ub2Zm KSB7Ci0rCi0rICAgICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOwotKwotKyAgICAgICAgLyog RG9uJ3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdp YwotKyAgICAgICAgICAgc2VlZGluZyAqLwotKyAgICAgICAgaWYgKEZJUFNfbW9kdWxlX21vZGUo KSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULAot KyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCk7Ci0rICAg ICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsgICAgICAgICAgICByZXQgPSAwOwot KyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQotKyMgaWZkZWYgT1BFTlNTTF9JQTMy X1NTRTIKLSsgICAgICAgIHsKLSsgICAgICAgICAgICBleHRlcm4gdW5zaWduZWQgaW50IE9QRU5T U0xfaWEzMmNhcF9QWzJdOwotKyAgICAgICAgICAgIGlmICgoT1BFTlNTTF9pYTMyY2FwX1BbMF0g JiAoMSA8PCAyNSB8IDEgPDwgMjYpKSAhPQotKyAgICAgICAgICAgICAgICAoMSA8PCAyNSB8IDEg PDwgMjYpKSB7Ci0rICAgICAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01P REVfU0VULAotKyAgICAgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFU Rk9STSk7Ci0rICAgICAgICAgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgICAg ICAgICAgICAgIHJldCA9IDA7Ci0rICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAg ICAgIH0KLSsgICAgICAgICAgICBPUEVOU1NMX2lhMzJjYXBfUFswXSB8PSAoMSA8PCAyOCk7IC8q IHNldCAic2hhcmVkIGNhY2hlIiAgICovCi0rICAgICAgICAgICAgT1BFTlNTTF9pYTMyY2FwX1Bb MV0gJj0gfigxIDw8ICg2MCAtIDMyKSk7IC8qIGNsZWFyIEFWWCAgICAgICAgICAgICovCi0rICAg ICAgICB9Ci0rIyBlbmRpZgotKwotKyAgICAgICAgaWYgKCFGSVBTQ0hFQ0tfdmVyaWZ5Ci0rICAg ICAgICAgICAgKCJsaWJjcnlwdG8uc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwgIkZJUFNfbW9k ZV9zZXQiKSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9EVUxFX01PREVf U0VULAotKyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01B VENIKTsKLSsgICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICAgICAgICAg IHJldCA9IDA7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAgICAgICB9Ci0rCi0rICAgICAg ICBpZiAoIUZJUFNDSEVDS192ZXJpZnkKLSsgICAgICAgICAgICAoImxpYnNzbC5zby4iIFNITElC X1ZFUlNJT05fTlVNQkVSLCAiU1NMX0NUWF9uZXciKSkgewotKyAgICAgICAgICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VULAotKyAgICAgICAgICAgICAgICAgICAgRklQU19S X0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIKTsKLSsgICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0 X2ZhaWwgPSAxOwotKyAgICAgICAgICAgIHJldCA9IDA7Ci0rICAgICAgICAgICAgZ290byBlbmQ7 Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoRklQU19zZWxmdGVzdCgpKQotKyAgICAgICAg ICAgIGZpcHNfc2V0X21vZGUob25vZmYpOwotKyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAg Zmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsgICAgICAgICAgICByZXQgPSAwOwotKyAgICAgICAg ICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQotKyAgICAgICAgcmV0ID0gMTsKLSsgICAgICAgIGdv dG8gZW5kOwotKyAgICB9Ci0rICAgIGZpcHNfc2V0X21vZGUoMCk7Ci0rICAgIGZpcHNfc2VsZnRl c3RfZmFpbCA9IDA7Ci0rICAgIHJldCA9IDE7Ci0rIGVuZDoKLSsgICAgZmlwc19jbGVhcl9vd25p bmdfdGhyZWFkKCk7Ci0rICAgIGZpcHNfd191bmxvY2soKTsKLSsgICAgcmV0dXJuIHJldDsKLSt9 Ci0rCi0rc3RhdGljIENSWVBUT19USFJFQURJRCBmaXBzX3RocmVhZDsKLStzdGF0aWMgaW50IGZp cHNfdGhyZWFkX3NldCA9IDA7Ci0rCi0rc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJlYWQo dm9pZCkKLSt7Ci0rICAgIGludCByZXQgPSAwOwotKwotKyAgICBpZiAoZmlwc19zdGFydGVkKSB7 Ci0rICAgICAgICBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsgICAgICAgIGlm IChmaXBzX3RocmVhZF9zZXQpIHsKLSsgICAgICAgICAgICBDUllQVE9fVEhSRUFESUQgY3VyOwot KyAgICAgICAgICAgIENSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOwotKyAgICAgICAgICAg IGlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQotKyAgICAgICAg ICAgICAgICByZXQgPSAxOwotKyAgICAgICAgfQotKyAgICAgICAgQ1JZUFRPX3JfdW5sb2NrKENS WVBUT19MT0NLX0ZJUFMyKTsKLSsgICAgfQotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLStpbnQg Zmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKQotK3sKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0r ICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKLSsgICAgICAgIENSWVBUT193X2xvY2soQ1JZUFRPX0xP Q0tfRklQUzIpOwotKyAgICAgICAgaWYgKCFmaXBzX3RocmVhZF9zZXQpIHsKLSsgICAgICAgICAg ICBDUllQVE9fVEhSRUFESURfY3VycmVudCgmZmlwc190aHJlYWQpOwotKyAgICAgICAgICAgIHJl dCA9IDE7Ci0rICAgICAgICAgICAgZmlwc190aHJlYWRfc2V0ID0gMTsKLSsgICAgICAgIH0KLSsg ICAgICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rICAgIH0KLSsgICAg cmV0dXJuIHJldDsKLSt9Ci0rCi0raW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKQot K3sKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKLSsgICAg ICAgIENSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKyAgICAgICAgaWYgKGZpcHNf dGhyZWFkX3NldCkgewotKyAgICAgICAgICAgIENSWVBUT19USFJFQURJRCBjdXI7Ci0rICAgICAg ICAgICAgQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7Ci0rICAgICAgICAgICAgaWYgKCFD UllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBzX3RocmVhZCkpCi0rICAgICAgICAgICAgICAg IGZpcHNfdGhyZWFkX3NldCA9IDA7Ci0rICAgICAgICB9Ci0rICAgICAgICBDUllQVE9fd191bmxv Y2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKyAgICB9Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwot KyMgaWYgMAotKy8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gZW5zdXJlIHRoZSBlcnJvciBj b2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCi0rICogbmFtZSBpcyB0byBrZWVwIHRoZSBlcnJv ciBjaGVja2luZyBzY3JpcHQgcXVpZXQKLSsgKi8KLSt2b2lkIGhhc2hfZmluYWwodm9pZCkKLSt7 Ci0rICAgIEZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsIEZJUFNfUl9OT05fRklQU19NRVRIT0Qp OwotK30KLSsjIGVuZGlmCi0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9m aXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMv Zmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MzU2MjU1MiAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5j CTIwMTUtMTItMDQgMTM6NTU6NTEuOTYzNTYyNTUyICswMTAwCi1AQCAtMCwwICsxLDE1NiBAQAot Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl 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 RiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvY21hYy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKyAgICBpbnQgbmlkOwotKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyIGtleVtFVlBfTUFYX0tFWV9MRU5HVEhdOwotKyAgICBzaXplX3Qga2V5 c2l6ZTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBtc2dbNjRdOwotKyAgICBzaXplX3QgbXNn c2l6ZTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBtYWNbMzJdOwotKyAgICBzaXplX3QgbWFj c2l6ZTsKLSt9IENNQUNfS0FUOwotKwotKy8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVi bGljYXRpb25zL25pc3RwdWJzLzgwMC0zOEIvU1BfODAwLTM4Qi5wZGYgKi8KLStzdGF0aWMgY29u c3QgQ01BQ19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHtOSURfYWVzXzEyOF9jYmMsICAgICAgICAg ICAvKiBDb3VudCA9IDMyIGZyb20gQ01BQ0dlbkFFUzEyOC50eHQgKi8KLSsgICAgIHsweDc3LCAw eGE3LCAweDdmLCAweGFmLCAweDI5LCAweDBjLCAweDFmLCAweGEzLAotKyAgICAgIDB4MGMsIDB4 NjgsIDB4M2QsIDB4ZjEsIDB4NmIsIDB4YTcsIDB4YTcsIDB4N2IsfSwgMTI4LAotKyAgICAgezB4 MDIsIDB4MDYsIDB4ODMsIDB4ZTEsIDB4ZjAsIDB4MzksIDB4MmYsIDB4NGMsCi0rICAgICAgMHhh YywgMHg1NCwgMHgzMSwgMHg4YiwgMHg2MCwgMHgyOSwgMHgyNSwgMHg5ZSwKLSsgICAgICAweDlj LCAweDU1LCAweDNkLCAweGJjLCAweDRiLCAweDZhLCAweGQ5LCAweDk4LAotKyAgICAgIDB4ZTYs IDB4NGQsIDB4NTgsIDB4ZTQsIDB4ZTcsIDB4ZGMsIDB4MmUsIDB4MTMsfSwgMjU2LAotKyAgICAg ezB4ZmIsIDB4ZmUsIDB4YTQsIDB4MWIsfSwgMzJ9LAotKyAgICB7TklEX2Flc18xOTJfY2JjLCAg ICAgICAgICAgLyogQ291bnQgPSAyMyBmcm9tIENNQUNHZW5BRVMxOTIudHh0ICovCi0rICAgICB7 MHg3YiwgMHgzMiwgMHgzOSwgMHgxMywgMHg2OSwgMHhhYSwgMHg0YywgMHhhOSwKLSsgICAgICAw eDc1LCAweDU4LCAweDA5LCAweDViLCAweGUzLCAweGMzLCAweGVjLCAweDg2LAotKyAgICAgIDB4 MmIsIDB4ZDAsIDB4NTcsIDB4Y2UsIDB4ZjEsIDB4ZTMsIDB4MmQsIDB4NjIsfSwgMTkyLAotKyAg ICAgezB4MH0sIDAsCi0rICAgICB7MHhlNCwgMHhkOSwgMHgzNCwgMHgwYiwgMHgwMywgMHhlNiwg MHg3ZCwgMHhlZiwKLSsgICAgICAweGQ0LCAweDk2LCAweDljLCAweGMxLCAweGVkLCAweDM3LCAw eDM1LCAweGU2LH0sIDEyOCwKLSsgICAgIH0sCi0rICAgIHtOSURfYWVzXzI1Nl9jYmMsICAgICAg ICAgICAvKiBDb3VudCA9IDMzIGZyb20gQ01BQ0dlbkFFUzI1Ni50eHQgKi8KLSsgICAgIHsweDBi LCAweDEyLCAweDJhLCAweGM4LCAweGYzLCAweDRlLCAweGQxLCAweGZlLAotKyAgICAgIDB4MDgs IDB4MmEsIDB4MzYsIDB4MjUsIDB4ZDEsIDB4NTcsIDB4NTYsIDB4MTQsCi0rICAgICAgMHg1NCwg MHgxNiwgMHg3YSwgMHhjMSwgMHg0NSwgMHhhMSwgMHgwYiwgMHhiZiwKLSsgICAgICAweDc3LCAw eGM2LCAweGE3LCAweDA1LCAweDk2LCAweGQ1LCAweDc0LCAweGYxLH0sIDI1NiwKLSsgICAgIHsw eDQ5LCAweDhiLCAweDUzLCAweGZkLCAweGVjLCAweDg3LCAweGVkLCAweGNiLAotKyAgICAgIDB4 ZjAsIDB4NzAsIDB4OTcsIDB4ZGMsIDB4Y2QsIDB4ZTksIDB4M2EsIDB4MDgsCi0rICAgICAgMHg0 YiwgMHhhZCwgMHg3NSwgMHgwMSwgMHhhMiwgMHgyNCwgMHhlMywgMHg4OCwKLSsgICAgICAweGRm LCAweDM0LCAweDljLCAweGUxLCAweDg5LCAweDU5LCAweGZlLCAweDg0LAotKyAgICAgIDB4ODUs IDB4ZjgsIDB4YWQsIDB4MTUsIDB4MzcsIDB4ZjAsIDB4ZDgsIDB4OTYsCi0rICAgICAgMHhlYSwg MHg3MywgMHhiZSwgMHhkYywgMHg3MiwgMHgxNCwgMHg3MSwgMHgzZix9LCAzODQsCi0rICAgICB7 MHhmNiwgMHgyYywgMHg0NiwgMHgzMiwgMHg5Yix9LCA0MCwKLSsgICAgIH0sCi0rICAgIHtOSURf ZGVzX2VkZTNfY2JjLCAgICAgICAgICAvKiBDb3VudCA9IDQxIGZyb20gQ01BQ0dlblRERVMzLnJl cSAqLwotKyAgICAgezB4ODksIDB4YmMsIDB4ZDksIDB4NTIsIDB4YTgsIDB4YzgsIDB4YWIsIDB4 MzcsCi0rICAgICAgMHgxYSwgMHhmNCwgMHg4YSwgMHhjNywgMHhkMCwgMHg3MCwgMHg4NSwgMHhk NSwKLSsgICAgICAweGVmLCAweGY3LCAweDAyLCAweGU2LCAweGQ2LCAweDJjLCAweGRjLCAweDIz LH0sIDE5MiwKLSsgICAgIHsweGZhLCAweDYyLCAweDBjLCAweDFiLCAweGJlLCAweDk3LCAweDMx LCAweDllLAotKyAgICAgIDB4OWEsIDB4MGMsIDB4ZjAsIDB4NDksIDB4MjEsIDB4MjEsIDB4Zjcs IDB4YTIsCi0rICAgICAgMHgwZSwgMHhiMCwgMHg4YSwgMHg2YSwgMHg3MCwgMHg5ZCwgMHhjYiwg MHhkMCwKLSsgICAgICAweDBhLCAweGFmLCAweDM4LCAweGU0LCAweGY5LCAweDllLCAweDc1LCAw eDRlLH0sIDI1NiwKLSsgICAgIHsweDhmLCAweDQ5LCAweGExLCAweGI3LCAweGQ2LCAweGFhLCAw eDIyLCAweDU4LH0sIDY0LAotKyAgICAgfSwKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Nt YWMoKQotK3sKLSsgICAgc2l6ZV90IG4sIG91dGxlbjsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRb MzJdOwotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXI7Ci0rICAgIENNQUNfQ1RYICpjdHgg PSBDTUFDX0NUWF9uZXcoKTsKLSsgICAgY29uc3QgQ01BQ19LQVQgKnQ7Ci0rICAgIGludCBydiA9 IDE7Ci0rCi0rICAgIGZvciAobiA9IDAsIHQgPSB2ZWN0b3I7IG4gPCBzaXplb2YodmVjdG9yKSAv IHNpemVvZih2ZWN0b3JbMF0pOyBuKyssIHQrKykgewotKyAgICAgICAgY2lwaGVyID0gRklQU19n ZXRfY2lwaGVyYnluaWQodC0+bmlkKTsKLSsgICAgICAgIGlmICghY2lwaGVyKSB7Ci0rICAgICAg ICAgICAgcnYgPSAtMTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsgICAg ICAgIGlmICghQ01BQ19Jbml0KGN0eCwgdC0+a2V5LCB0LT5rZXlzaXplIC8gOCwgY2lwaGVyLCAw KSkgewotKyAgICAgICAgICAgIHJ2ID0gLTE7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAg ICAgICB9Ci0rICAgICAgICBpZiAoIUNNQUNfVXBkYXRlKGN0eCwgdC0+bXNnLCB0LT5tc2dzaXpl IC8gOCkpIHsKLSsgICAgICAgICAgICBydiA9IC0xOwotKyAgICAgICAgICAgIGdvdG8gZXJyOwot KyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKCFDTUFDX0ZpbmFsKGN0eCwgb3V0LCAmb3V0bGVu KSkgewotKyAgICAgICAgICAgIHJ2ID0gLTE7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAg ICAgICB9Ci0rICAgICAgICBDTUFDX0NUWF9jbGVhbnVwKGN0eCk7Ci0rCi0rICAgICAgICBpZiAo b3V0bGVuIDwgdC0+bWFjc2l6ZSAvIDggfHwgbWVtY21wKG91dCwgdC0+bWFjLCB0LT5tYWNzaXpl IC8gOCkpIHsKLSsgICAgICAgICAgICBydiA9IDA7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsg ZXJyOgotKyAgICBDTUFDX0NUWF9mcmVlKGN0eCk7Ci0rCi0rICAgIGlmIChydiA9PSAtMSkgewot KyAgICAgICAgcnYgPSAwOwotKyAgICB9Ci0rICAgIGlmICghcnYpCi0rICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwot KyAgICByZXR1cm4gcnY7Ci0rfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9m aXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9m aXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjM1NjI1NTIgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCTIw MTUtMTItMDQgMTM6NTU6NTEuOTYzNTYyNTUyICswMTAwCi1AQCAtMCwwICsxLDEzOCBAQAotKy8q 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 VUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStz dGF0aWMgY29uc3Qgc3RydWN0IHsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdOwot KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgY29uc3QgdW5zaWdu ZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotK30gdGVzdHMyW10gPSB7Ci0rICAgIHsKLSsgICAgICAg IHsKLSsgICAgICAgIDB4N2MsIDB4NGYsIDB4NmUsIDB4ZjcsIDB4YTIsIDB4MDQsIDB4MTYsIDB4 ZWMsCi0rICAgICAgICAgICAgICAgIDB4MGIsIDB4NmIsIDB4N2MsIDB4OWUsIDB4NWUsIDB4MTks IDB4YTcsIDB4YzR9LCB7Ci0rICAgICAgICAweDA2LCAweGE3LCAweGQ4LCAweDc5LCAweGFhLCAw eGNlLCAweDY5LCAweGVmfSwgewotKyAgICAgICAgMHg0YywgMHgxMSwgMHgxNywgMHg1NSwgMHhi ZiwgMHhjNCwgMHg0ZSwgMHhmZH0KLSsgICAgfSwgewotKyAgICAgICAgewotKyAgICAgICAgMHg1 ZCwgMHg5ZSwgMHgwMSwgMHhkMywgMHgyNSwgMHhjNywgMHgzZSwgMHgzNCwKLSsgICAgICAgICAg ICAgICAgMHgwMSwgMHgxNiwgMHg3YywgMHg4NSwgMHgyMywgMHhkZiwgMHhlMCwgMHg2OH0sIHsK LSsgICAgICAgIDB4OWMsIDB4NTAsIDB4MDksIDB4MGYsIDB4NWUsIDB4N2QsIDB4NjksIDB4N2V9 LCB7Ci0rICAgIDB4ZDIsIDB4MGIsIDB4MTgsIDB4ZGYsIDB4ZDksIDB4MGQsIDB4OWUsIDB4ZmZ9 LH0KLSt9OwotKwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QgewotKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyIGtleVsyNF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0rfSB0ZXN0czNbXSA9IHsKLSsg ICAgewotKyAgICAgICAgewotKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwKLSsgICAgICAgICAgICAgICAgMHhGRSwgMHhEQywgMHhCQSwgMHg5 OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCwKLSsgICAgICAgICAgICAgICAgMHgxMiwgMHgzNCwg MHg1NiwgMHg3OCwgMHg5YSwgMHhiYywgMHhkZSwgMHhmMH0sIHsKLSsgICAgICAgIDB4OGYsIDB4 OGYsIDB4YmYsIDB4OWIsIDB4NWQsIDB4NDgsIDB4YjQsIDB4MWN9LCB7Ci0rICAgIDB4NTksIDB4 OGMsIDB4ZTUsIDB4ZDMsIDB4NmMsIDB4YTIsIDB4ZWEsIDB4MWJ9LH0sIHsKLSsgICAgICAgIHsK LSsgICAgICAgIDB4REMsIDB4QkEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAsIDB4RkUs Ci0rICAgICAgICAgICAgICAgIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4 Q0QsIDB4RUYsCi0rICAgICAgICAgICAgICAgIDB4RUQsIDB4MzksIDB4RDksIDB4NTAsIDB4RkEs IDB4NzQsIDB4QkMsIDB4QzR9LCB7Ci0rICAgICAgICAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAw eDg5LCAweEFCLCAweENELCAweEVGfSwgewotKzB4MTEsIDB4MjUsIDB4YjAsIDB4MzUsIDB4YmUs IDB4YTAsIDB4ODIsIDB4ODZ9LH0sfTsKLSsKLStzdGF0aWMgaW50IGNvcnJ1cHRfZGVzOwotKwot K3ZvaWQgRklQU19jb3JydXB0X2RlcygpCi0rewotKyAgICBjb3JydXB0X2RlcyA9IDE7Ci0rfQot KwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCi0rewotKyAgICBpbnQgbiwgcmV0ID0gMDsKLSsg ICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwot KyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21wYXJlIHRvIGtu b3duIGFuc3dlcnMgKi8KLSsgICAgZm9yIChuID0gMDsgbiA8IDI7ICsrbikgewotKyAgICAgICAg dW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rCi0rICAgICAgICBtZW1jcHkocGxhaW50ZXh0 LCB0ZXN0czJbbl0ucGxhaW50ZXh0LCBzaXplb2YocGxhaW50ZXh0KSk7Ci0rICAgICAgICBpZiAo Y29ycnVwdF9kZXMpCi0rICAgICAgICAgICAgcGxhaW50ZXh0WzBdKys7Ci0rICAgICAgICBpZiAo IWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGVzdHMyW25dLmtleSwgTlVMTCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwbGFpbnRleHQsIHRlc3RzMltuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsgICAg ICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0 aCAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9yIChuID0gMDsg biA8IDI7ICsrbikgewotKyAgICAgICAgaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9k ZXNfZWRlM19lY2IoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0czNbbl0u a2V5LCBOVUxMLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzM1tuXS5wbGFp bnRleHQsIHRlc3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsgICAgICAgICAgICBnb3RvIGVycjsK LSsgICAgfQotKyAgICByZXQgPSAxOwotKyBlcnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFu dXAoJmN0eCk7Ci0rICAgIGlmIChyZXQgPT0gMCkKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfU0VMRlRFU1RfREVTLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsgICAgcmV0dXJu IHJldDsKLSt9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfY3RyLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdf Y3RyLmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMuZmlw cwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MzU2MjU1MiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MzU2MjU1 MiArMDEwMAotQEAgLTAsMCArMSw0MTUgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2N0ci5j ICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9y ZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6 Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0 cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlw c19yYW5kX2xjbC5oIgotKwotK3N0YXRpYyB2b2lkIGluY18xMjgoRFJCR19DVFJfQ1RYICogY2N0 eCkKLSt7Ci0rICAgIGludCBpOwotKyAgICB1bnNpZ25lZCBjaGFyIGM7Ci0rICAgIHVuc2lnbmVk IGNoYXIgKnAgPSBjY3R4LT5WICsgMTU7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7 Ci0rICAgICAgICBjID0gKnA7Ci0rICAgICAgICBjKys7Ci0rICAgICAgICAqcCA9IGM7Ci0rICAg ICAgICBpZiAoYykKLSsgICAgICAgICAgICByZXR1cm47Ci0rICAgICAgICBwLS07Ci0rICAgIH0K LSt9Ci0rCi0rc3RhdGljIHZvaWQgY3RyX1hPUihEUkJHX0NUUl9DVFggKiBjY3R4LCBjb25zdCB1 bnNpZ25lZCBjaGFyICppbiwKLSsgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmxlbikKLSt7 Ci0rICAgIHNpemVfdCBpLCBuOwotKyAgICAvKiBBbnkgemVybyBwYWRkaW5nIHdpbGwgaGF2ZSBu byBlZmZlY3Qgb24gdGhlIHJlc3VsdCBhcyB3ZQotKyAgICAgKiBhcmUgWE9SaW5nLiBTbyBqdXN0 IHByb2Nlc3MgaG93ZXZlciBtdWNoIGlucHV0IHdlIGhhdmUuCi0rICAgICAqLwotKwotKyAgICBp ZiAoIWluIHx8ICFpbmxlbikKLSsgICAgICAgIHJldHVybjsKLSsKLSsgICAgaWYgKGlubGVuIDwg Y2N0eC0+a2V5bGVuKQotKyAgICAgICAgbiA9IGlubGVuOwotKyAgICBlbHNlCi0rICAgICAgICBu ID0gY2N0eC0+a2V5bGVuOwotKwotKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotKyAgICAg ICAgY2N0eC0+S1tpXSBePSBpbltpXTsKLSsgICAgaWYgKGlubGVuIDw9IGNjdHgtPmtleWxlbikK LSsgICAgICAgIHJldHVybjsKLSsKLSsgICAgbiA9IGlubGVuIC0gY2N0eC0+a2V5bGVuOwotKyAg ICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCi0rICAgIGlmIChuID4gMTYpCi0rICAgICAgICBu ID0gMTY7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKyAgICAgICAgY2N0eC0+Vltp XSBePSBpbltpICsgY2N0eC0+a2V5bGVuXTsKLSt9Ci0rCi0rLyogUHJvY2VzcyBhIGNvbXBsZXRl IGJsb2NrIHVzaW5nIEJDQyBhbGdvcml0aG0gb2YgU1BQIDgwMC05MCAxMC40LjMgKi8KLSsKLStz dGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrKERSQkdfQ1RSX0NUWCAqIGNjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmluKQotK3sKLSsgICAgaW50IGk7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotKyAg ICAgICAgb3V0W2ldIF49IGluW2ldOwotKyAgICBBRVNfZW5jcnlwdChvdXQsIG91dCwgJmNjdHgt PmRmX2tzKTsKLSsjaWYgMAotKyAgICBmcHJpbnRmKHN0ZGVyciwgIkJDQyBpbitvdXRcbiIpOwot KyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIGluLCAxNik7Ci0rICAgIEJJT19kdW1wX2ZwKHN0ZGVy ciwgb3V0LCAxNik7Ci0rI2VuZGlmCi0rfQotKwotKy8qIEhhbmRsZSBzZXZlcmFsIEJDQyBvcGVy YXRpb25zIGZvciBhcyBtdWNoIGRhdGEgYXMgd2UgbmVlZCBmb3IgSyBhbmQgWCAqLwotK3N0YXRp YyB2b2lkIGN0cl9CQ0NfYmxvY2tzKERSQkdfQ1RSX0NUWCAqIGNjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmluKQotK3sKLSsgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgaW4pOwot KyAgICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMTYsIGluKTsKLSsgICAgaWYgKGNj dHgtPmtleWxlbiAhPSAxNikKLSsgICAgICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gg KyAzMiwgaW4pOwotK30KLSsKLSsvKiBJbml0aWFsaXNlIEJDQyBibG9ja3M6IHRoZXNlIGhhdmUg dGhlIHZhbHVlIDAsMSwyIGluIGxlZnRtb3N0IHBvc2l0aW9uczoKLSsgKiBzZWUgMTAuNC4yIHN0 YWdlIDcuCi0rICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19pbml0KERSQkdfQ1RSX0NUWCAqIGNj dHgpCi0rewotKyAgICBtZW1zZXQoY2N0eC0+S1gsIDAsIDQ4KTsKLSsgICAgbWVtc2V0KGNjdHgt PmJsdG1wLCAwLCAxNik7Ci0rICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGNjdHgt PmJsdG1wKTsKLSsgICAgY2N0eC0+Ymx0bXBbM10gPSAxOwotKyAgICBjdHJfQkNDX2Jsb2NrKGNj dHgsIGNjdHgtPktYICsgMTYsIGNjdHgtPmJsdG1wKTsKLSsgICAgaWYgKGNjdHgtPmtleWxlbiAh PSAxNikgewotKyAgICAgICAgY2N0eC0+Ymx0bXBbM10gPSAyOwotKyAgICAgICAgY3RyX0JDQ19i bG9jayhjY3R4LCBjY3R4LT5LWCArIDMyLCBjY3R4LT5ibHRtcCk7Ci0rICAgIH0KLSt9Ci0rCi0r LyogUHJvY2VzcyBzZXZlcmFsIGJsb2NrcyBpbnRvIEJDQyBhbGdvcml0aG0sIHNvbWUgcG9zc2li bHkgcGFydGlhbCAqLwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfdXBkYXRlKERSQkdfQ1RSX0NUWCAq IGNjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq aW4sIHNpemVfdCBpbmxlbikKLSt7Ci0rICAgIGlmICghaW4gfHwgIWlubGVuKQotKyAgICAgICAg cmV0dXJuOwotKyAgICAvKiBJZiB3ZSBoYXZlIHBhcnRpYWwgYmxvY2sgaGFuZGxlIGl0IGZpcnN0 ICovCi0rICAgIGlmIChjY3R4LT5ibHRtcF9wb3MpIHsKLSsgICAgICAgIHNpemVfdCBsZWZ0ID0g MTYgLSBjY3R4LT5ibHRtcF9wb3M7Ci0rICAgICAgICAvKiBJZiB3ZSBub3cgaGF2ZSBhIGNvbXBs ZXRlIGJsb2NrIHByb2Nlc3MgaXQgKi8KLSsgICAgICAgIGlmIChpbmxlbiA+PSBsZWZ0KSB7Ci0r ICAgICAgICAgICAgbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCBpbiwgbGVm dCk7Ci0rICAgICAgICAgICAgY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOwotKyAg ICAgICAgICAgIGNjdHgtPmJsdG1wX3BvcyA9IDA7Ci0rICAgICAgICAgICAgaW5sZW4gLT0gbGVm dDsKLSsgICAgICAgICAgICBpbiArPSBsZWZ0OwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIC8q IFByb2Nlc3MgemVybyBvciBtb3JlIGNvbXBsZXRlIGJsb2NrcyAqLwotKyAgICB3aGlsZSAoaW5s ZW4gPj0gMTYpIHsKLSsgICAgICAgIGN0cl9CQ0NfYmxvY2tzKGNjdHgsIGluKTsKLSsgICAgICAg IGluICs9IDE2OwotKyAgICAgICAgaW5sZW4gLT0gMTY7Ci0rICAgIH0KLSsgICAgLyogQ29weSBh bnkgcmVtYWluaW5nIHBhcnRpYWwgYmxvY2sgdG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KLSsg ICAgaWYgKGlubGVuID4gMCkgewotKyAgICAgICAgbWVtY3B5KGNjdHgtPmJsdG1wICsgY2N0eC0+ Ymx0bXBfcG9zLCBpbiwgaW5sZW4pOwotKyAgICAgICAgY2N0eC0+Ymx0bXBfcG9zICs9IGlubGVu OwotKyAgICB9Ci0rfQotKwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfZmluYWwoRFJCR19DVFJfQ1RY ICogY2N0eCkKLSt7Ci0rICAgIGlmIChjY3R4LT5ibHRtcF9wb3MpIHsKLSsgICAgICAgIG1lbXNl dChjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgMCwgMTYgLSBjY3R4LT5ibHRtcF9wb3Mp OwotKyAgICAgICAgY3RyX0JDQ19ibG9ja3MoY2N0eCwgY2N0eC0+Ymx0bXApOwotKyAgICB9Ci0r fQotKwotK3N0YXRpYyB2b2lkIGN0cl9kZihEUkJHX0NUUl9DVFggKiBjY3R4LAotKyAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwK LSsgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4z bGVuKQotK3sKLSsgICAgc2l6ZV90IGlubGVuOwotKyAgICB1bnNpZ25lZCBjaGFyICpwID0gY2N0 eC0+Ymx0bXA7Ci0rICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGM4MCA9IDB4ODA7Ci0rCi0rICAg IGN0cl9CQ0NfaW5pdChjY3R4KTsKLSsgICAgaWYgKCFpbjEpCi0rICAgICAgICBpbjFsZW4gPSAw OwotKyAgICBpZiAoIWluMikKLSsgICAgICAgIGluMmxlbiA9IDA7Ci0rICAgIGlmICghaW4zKQot KyAgICAgICAgaW4zbGVuID0gMDsKLSsgICAgaW5sZW4gPSBpbjFsZW4gKyBpbjJsZW4gKyBpbjNs ZW47Ci0rICAgIC8qIEluaXRpYWxpc2UgTHx8TiBpbiB0ZW1wb3JhcnkgYmxvY2sgKi8KLSsgICAg KnArKyA9IChpbmxlbiA+PiAyNCkgJiAweGZmOwotKyAgICAqcCsrID0gKGlubGVuID4+IDE2KSAm IDB4ZmY7Ci0rICAgICpwKysgPSAoaW5sZW4gPj4gOCkgJiAweGZmOwotKyAgICAqcCsrID0gaW5s ZW4gJiAweGZmOwotKyAgICAvKiBOQiBrZXlsZW4gaXMgYXQgbW9zdCAzMiBieXRlcyAqLwotKyAg ICAqcCsrID0gMDsKLSsgICAgKnArKyA9IDA7Ci0rICAgICpwKysgPSAwOwotKyAgICAqcCA9ICh1 bnNpZ25lZCBjaGFyKSgoY2N0eC0+a2V5bGVuICsgMTYpICYgMHhmZik7Ci0rICAgIGNjdHgtPmJs dG1wX3BvcyA9IDg7Ci0rICAgIGN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMSwgaW4xbGVuKTsKLSsg ICAgY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4yLCBpbjJsZW4pOwotKyAgICBjdHJfQkNDX3VwZGF0 ZShjY3R4LCBpbjMsIGluM2xlbik7Ci0rICAgIGN0cl9CQ0NfdXBkYXRlKGNjdHgsICZjODAsIDEp OwotKyAgICBjdHJfQkNDX2ZpbmFsKGNjdHgpOwotKyAgICAvKiBTZXQgdXAga2V5IEsgKi8KLSsg ICAgQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICogOCwgJmNjdHgt PmRmX2t4a3MpOwotKyAgICAvKiBYIGZvbGxvd3Mga2V5IEsgKi8KLSsgICAgQUVTX2VuY3J5cHQo Y2N0eC0+S1ggKyBjY3R4LT5rZXlsZW4sIGNjdHgtPktYLCAmY2N0eC0+ZGZfa3hrcyk7Ci0rICAg IEFFU19lbmNyeXB0KGNjdHgtPktYLCBjY3R4LT5LWCArIDE2LCAmY2N0eC0+ZGZfa3hrcyk7Ci0r ICAgIGlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCi0rICAgICAgICBBRVNfZW5jcnlwdChjY3R4LT5L WCArIDE2LCBjY3R4LT5LWCArIDMyLCAmY2N0eC0+ZGZfa3hrcyk7Ci0rI2lmIDAKLSsgICAgZnBy aW50ZihzdGRlcnIsICJPdXRwdXQgb2YgY3RyX2RmOlxuIik7Ci0rICAgIEJJT19kdW1wX2ZwKHN0 ZGVyciwgY2N0eC0+S1gsIGNjdHgtPmtleWxlbiArIDE2KTsKLSsjZW5kaWYKLSt9Ci0rCi0rLyog TkIgdGhlIG5vLWRmICBVcGRhdGUgaW4gU1A4MDAtOTAgc3BlY2lmaWVzIGEgY29uc3RhbnQgaW5w dXQgbGVuZ3RoCi0rICogb2Ygc2VlZGxlbiwgaG93ZXZlciBvdGhlciB1c2VzIG9mIHRoaXMgYWxn b3JpdGhtIHBhZCB0aGUgaW5wdXQgd2l0aAotKyAqIHplcm9lcyBpZiBuZWNlc3NhcnkgYW5kIGhh dmUgdXAgdG8gdHdvIHBhcmFtZXRlcnMgWE9SZWQgdG9nZXRoZXIsCi0rICogaGFuZGxlIGJvdGgg Y2FzZXMgaW4gdGhpcyBmdW5jdGlvbiBpbnN0ZWFkLgotKyAqLwotKwotK3N0YXRpYyB2b2lkIGN0 cl9VcGRhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCi0rICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuKQot K3sKLSsgICAgRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKyAgICAvKiBrcyBp cyBhbHJlYWR5IHNldHVwIGZvciBjb3JyZWN0IGtleSAqLwotKyAgICBpbmNfMTI4KGNjdHgpOwot KyAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOwotKyAgICAvKiBJ ZiBrZXlsZW4gbG9uZ2VyIHRoYW4gMTI4IGJpdHMgbmVlZCBleHRyYSBlbmNyeXB0ICovCi0rICAg IGlmIChjY3R4LT5rZXlsZW4gIT0gMTYpIHsKLSsgICAgICAgIGluY18xMjgoY2N0eCk7Ci0rICAg ICAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LICsgMTYsICZjY3R4LT5rcyk7Ci0rICAg IH0KLSsgICAgaW5jXzEyOChjY3R4KTsKLSsgICAgQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+ ViwgJmNjdHgtPmtzKTsKLSsgICAgLyogSWYgMTkyIGJpdCBrZXkgcGFydCBvZiBWIGlzIG9uIGVu ZCBvZiBLICovCi0rICAgIGlmIChjY3R4LT5rZXlsZW4gPT0gMjQpIHsKLSsgICAgICAgIG1lbWNw eShjY3R4LT5WICsgOCwgY2N0eC0+ViwgOCk7Ci0rICAgICAgICBtZW1jcHkoY2N0eC0+ViwgY2N0 eC0+SyArIDI0LCA4KTsKLSsgICAgfQotKwotKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19G TEFHX0NUUl9VU0VfREYpIHsKLSsgICAgICAgIC8qIElmIG5vIGlucHV0IHJldXNlIGV4aXN0aW5n IGRlcml2ZWQgdmFsdWUgKi8KLSsgICAgICAgIGlmIChpbjEgfHwgbm9uY2UgfHwgaW4yKQotKyAg ICAgICAgICAgIGN0cl9kZihjY3R4LCBpbjEsIGluMWxlbiwgbm9uY2UsIG5vbmNlbGVuLCBpbjIs IGluMmxlbik7Ci0rICAgICAgICAvKiBJZiB0aGlzIGEgcmV1c2UgaW5wdXQgaW4xbGVuICE9IDAg Ki8KLSsgICAgICAgIGlmIChpbjFsZW4pCi0rICAgICAgICAgICAgY3RyX1hPUihjY3R4LCBjY3R4 LT5LWCwgZGN0eC0+c2VlZGxlbik7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICBjdHJfWE9SKGNj dHgsIGluMSwgaW4xbGVuKTsKLSsgICAgICAgIGN0cl9YT1IoY2N0eCwgaW4yLCBpbjJsZW4pOwot KyAgICB9Ci0rCi0rICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5n dGgsICZjY3R4LT5rcyk7Ci0rI2lmIDAKLSsgICAgZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIg dXBkYXRlIGlzOlxuIik7Ci0rICAgIEJJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+SywgY2N0eC0+ a2V5bGVuKTsKLSsgICAgQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5WLCAxNik7Ci0rI2VuZGlm Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpl bnQsIHNpemVfdCBlbnRsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNs ZW4pCi0rewotKyAgICBEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0rICAgIG1l bXNldChjY3R4LT5LLCAwLCBzaXplb2YoY2N0eC0+SykpOwotKyAgICBtZW1zZXQoY2N0eC0+Viwg MCwgc2l6ZW9mKGNjdHgtPlYpKTsKLSsgICAgQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LLCBk Y3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKLSsgICAgY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVu dGxlbiwgcGVycywgcGVyc2xlbiwgbm9uY2UsIG5vbmNlbGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0r fQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVu dGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICph ZGluLCBzaXplX3QgYWRpbmxlbikKLSt7Ci0rICAgIGN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRs ZW4sIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDApOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3Rh dGljIGludCBkcmJnX2N0cl9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVf dCBhZGlubGVuKQotK3sKLSsgICAgRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwot KyAgICBpZiAoYWRpbiAmJiBhZGlubGVuKSB7Ci0rICAgICAgICBjdHJfVXBkYXRlKGRjdHgsIGFk aW4sIGFkaW5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOwotKyAgICAgICAgLyogVGhpcyBtZWFucyB3 ZSByZXVzZSBkZXJpdmVkIHZhbHVlICovCi0rICAgICAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJC R19GTEFHX0NUUl9VU0VfREYpIHsKLSsgICAgICAgICAgICBhZGluID0gTlVMTDsKLSsgICAgICAg ICAgICBhZGlubGVuID0gMTsKLSsgICAgICAgIH0KLSsgICAgfSBlbHNlCi0rICAgICAgICBhZGlu bGVuID0gMDsKLSsKLSsgICAgZm9yICg7OykgewotKyAgICAgICAgaW5jXzEyOChjY3R4KTsKLSsg ICAgICAgIGlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJf dmFsaWQpIHsKLSsgICAgICAgICAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBkY3R4LT5sYiwgJmNj dHgtPmtzKTsKLSsgICAgICAgICAgICBkY3R4LT5sYl92YWxpZCA9IDE7Ci0rICAgICAgICAgICAg Y29udGludWU7Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAob3V0bGVuIDwgMTYpIHsKLSsgICAg ICAgICAgICAvKiBVc2UgSyBhcyB0ZW1wIHNwYWNlIGFzIGl0IHdpbGwgYmUgdXBkYXRlZCAqLwot KyAgICAgICAgICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7Ci0r ICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBjY3R4LT5LKSkKLSsg ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgbWVtY3B5KG91dCwgY2N0eC0+ Sywgb3V0bGVuKTsKLSsgICAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAgICAgIEFF U19lbmNyeXB0KGNjdHgtPlYsIG91dCwgJmNjdHgtPmtzKTsKLSsgICAgICAgIGlmICghZmlwc19k cmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAg ICAgIG91dCArPSAxNjsKLSsgICAgICAgIG91dGxlbiAtPSAxNjsKLSsgICAgICAgIGlmIChvdXRs ZW4gPT0gMCkKLSsgICAgICAgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICBjdHJfVXBkYXRl KGRjdHgsIGFkaW4sIGFkaW5sZW4sIE5VTEwsIDAsIE5VTEwsIDApOwotKwotKyAgICByZXR1cm4g MTsKLSsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl91bmluc3RhbnRpYXRlKERSQkdfQ1RY ICpkY3R4KQotK3sKLSsgICAgbWVtc2V0KCZkY3R4LT5kLmN0ciwgMCwgc2l6ZW9mKERSQkdfQ1RS X0NUWCkpOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50IGZpcHNfZHJiZ19jdHJfaW5pdChE UkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIERSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0 cjsKLSsKLSsgICAgc2l6ZV90IGtleWxlbjsKLSsKLSsgICAgc3dpdGNoIChkY3R4LT50eXBlKSB7 Ci0rICAgIGNhc2UgTklEX2Flc18xMjhfY3RyOgotKyAgICAgICAga2V5bGVuID0gMTY7Ci0rICAg ICAgICBicmVhazsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzE5Ml9jdHI6Ci0rICAgICAgICBrZXls ZW4gPSAyNDsKLSsgICAgICAgIGJyZWFrOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2N0cjoK LSsgICAgICAgIGtleWxlbiA9IDMyOwotKyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGRlZmF1bHQ6 Ci0rICAgICAgICByZXR1cm4gLTI7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aW5zdGFudGlhdGUg PSBkcmJnX2N0cl9pbnN0YW50aWF0ZTsKLSsgICAgZGN0eC0+cmVzZWVkID0gZHJiZ19jdHJfcmVz ZWVkOwotKyAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfY3RyX2dlbmVyYXRlOwotKyAgICBkY3R4 LT51bmluc3RhbnRpYXRlID0gZHJiZ19jdHJfdW5pbnN0YW50aWF0ZTsKLSsKLSsgICAgY2N0eC0+ a2V5bGVuID0ga2V5bGVuOwotKyAgICBkY3R4LT5zdHJlbmd0aCA9IGtleWxlbiAqIDg7Ci0rICAg IGRjdHgtPmJsb2NrbGVuZ3RoID0gMTY7Ci0rICAgIGRjdHgtPnNlZWRsZW4gPSBrZXlsZW4gKyAx NjsKLSsKLSsgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKSB7Ci0r ICAgICAgICAvKiBkZiBpbml0aWFsaXNhdGlvbiAqLwotKyAgICAgICAgc3RhdGljIHVuc2lnbmVk IGNoYXIgZGZfa2V5WzMyXSA9IHsKLSsgICAgICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAz LCAweDA0LCAweDA1LCAweDA2LCAweDA3LAotKyAgICAgICAgICAgIDB4MDgsIDB4MDksIDB4MGEs IDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCi0rICAgICAgICAgICAgMHgxMCwgMHgxMSwg MHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKLSsgICAgICAgICAgICAweDE4LCAw eDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmCi0rICAgICAgICB9OwotKyAg ICAgICAgLyogU2V0IGtleSBzY2hlZHVsZSBmb3IgZGZfa2V5ICovCi0rICAgICAgICBBRVNfc2V0 X2VuY3J5cHRfa2V5KGRmX2tleSwgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5kZl9rcyk7Ci0rCi0r ICAgICAgICBkY3R4LT5taW5fZW50cm9weSA9IGNjdHgtPmtleWxlbjsKLSsgICAgICAgIGRjdHgt Pm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKyAgICAgICAgZGN0eC0+bWluX25vbmNl ID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKyAgICAgICAgZGN0eC0+bWF4X25vbmNlID0gRFJC R19NQVhfTEVOR1RIOwotKyAgICAgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7 Ci0rICAgICAgICBkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsgICAgfSBlbHNl IHsKLSsgICAgICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c2VlZGxlbjsKLSsgICAgICAg IGRjdHgtPm1heF9lbnRyb3B5ID0gZGN0eC0+c2VlZGxlbjsKLSsgICAgICAgIC8qIE5vbmNlIG5v dCB1c2VkICovCi0rICAgICAgICBkY3R4LT5taW5fbm9uY2UgPSAwOwotKyAgICAgICAgZGN0eC0+ bWF4X25vbmNlID0gMDsKLSsgICAgICAgIGRjdHgtPm1heF9wZXJzID0gZGN0eC0+c2VlZGxlbjsK LSsgICAgICAgIGRjdHgtPm1heF9hZGluID0gZGN0eC0+c2VlZGxlbjsKLSsgICAgfQotKwotKyAg ICBkY3R4LT5tYXhfcmVxdWVzdCA9IDEgPDwgMTY7Ci0rICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZh bCA9IDEgPDwgMjQ7Ci0rCi0rICAgIHJldHVybiAxOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2hhc2guYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYzNTYyNTUyICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYwkyMDE1LTEy LTA0IDEzOjU1OjUxLjk2MzU2MjU1MiArMDEwMAotQEAgLTAsMCArMSwzNTggQEAKLSsvKiBmaXBz L3JhbmQvZmlwc19kcmJnX2hhc2guYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhl bnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0r ICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot KyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlz dHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK LSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAot KyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2RlZmluZSBPUEVO U1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5k X2xjbC5oIgotKwotKy8qIFRoaXMgaXMgSGFzaF9kZiBmcm9tIFNQIDgwMC05MCAxMC40LjEgKi8K LSsKLStzdGF0aWMgaW50IGhhc2hfZGYoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91 dCwKLSsgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3Qg aW4xbGVuLAotKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNp emVfdCBpbjJsZW4sCi0rICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu Mywgc2l6ZV90IGluM2xlbiwKLSsgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqaW40LCBzaXplX3QgaW40bGVuKQotK3sKLSsgICAgRVZQX01EX0NUWCAqbWN0eCA9ICZkY3R4 LT5kLmhhc2gubWN0eDsKLSsgICAgdW5zaWduZWQgY2hhciAqdnRtcCA9IGRjdHgtPmQuaGFzaC52 dG1wOwotKyAgICB1bnNpZ25lZCBjaGFyIHRtcFs2XTsKLSsgICAgLyogU3RhbmRhcmQgb25seSBl dmVyIG5lZWRzIHNlZWRsZW4gYnl0ZXMgd2hpY2ggaXMgYWx3YXlzIGxlc3MgdGhhbgotKyAgICAg KiBtYXhpbXVtIHBlcm1pdHRlZCBzbyBubyBuZWVkIHRvIGNoZWNrIGxlbmd0aC4KLSsgICAgICov Ci0rICAgIHNpemVfdCBvdXRsZW4gPSBkY3R4LT5zZWVkbGVuOwotKyAgICB0bXBbMF0gPSAxOwot KyAgICB0bXBbMV0gPSAoKG91dGxlbiAqIDgpID4+IDI0KSAmIDB4ZmY7Ci0rICAgIHRtcFsyXSA9 ICgob3V0bGVuICogOCkgPj4gMTYpICYgMHhmZjsKLSsgICAgdG1wWzNdID0gKChvdXRsZW4gKiA4 KSA+PiA4KSAmIDB4ZmY7Ci0rICAgIHRtcFs0XSA9IChvdXRsZW4gKiA4KSAmIDB4ZmY7Ci0rICAg IGlmICghaW4xKSB7Ci0rICAgICAgICB0bXBbNV0gPSAodW5zaWduZWQgY2hhcilpbjFsZW47Ci0r ICAgICAgICBpbjEgPSB0bXAgKyA1OwotKyAgICAgICAgaW4xbGVuID0gMTsKLSsgICAgfQotKyAg ICBmb3IgKDs7KSB7Ci0rICAgICAgICBpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBkY3R4LT5k Lmhhc2gubWQpKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYgKCFGSVBTX2Rp Z2VzdHVwZGF0ZShtY3R4LCB0bXAsIDUpKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAg ICAgaWYgKGluMSAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4xLCBpbjFsZW4pKQotKyAg ICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYgKGluMiAmJiAhRklQU19kaWdlc3R1cGRh dGUobWN0eCwgaW4yLCBpbjJsZW4pKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAg aWYgKGluMyAmJiAhRklQU19kaWdlc3R1cGRhdGUobWN0eCwgaW4zLCBpbjNsZW4pKQotKyAgICAg ICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYgKGluNCAmJiAhRklQU19kaWdlc3R1cGRhdGUo bWN0eCwgaW40LCBpbjRsZW4pKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYg KG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKSB7Ci0rICAgICAgICAgICAgaWYgKCFGSVBTX2Rp Z2VzdGZpbmFsKG1jdHgsIHZ0bXAsIE5VTEwpKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK LSsgICAgICAgICAgICBtZW1jcHkob3V0LCB2dG1wLCBvdXRsZW4pOwotKyAgICAgICAgICAgIE9Q RU5TU0xfY2xlYW5zZSh2dG1wLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rICAgICAgICAgICAgcmV0 dXJuIDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKG1jdHgsIG91dCwg TlVMTCkpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgICAgICBvdXRsZW4gLT0gZGN0 eC0+YmxvY2tsZW5ndGg7Ci0rICAgICAgICBpZiAob3V0bGVuID09IDApCi0rICAgICAgICAgICAg cmV0dXJuIDE7Ci0rICAgICAgICB0bXBbMF0rKzsKLSsgICAgICAgIG91dCArPSBkY3R4LT5ibG9j a2xlbmd0aDsKLSsgICAgfQotK30KLSsKLSsvKiBBZGQgYW4gdW5zaWduZWQgYnVmZmVyIHRvIHRo ZSBidWYgdmFsdWUsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBidWYuIEZvcgotKyAqIHRoaXMgYWxn b3JpdGhtIHRoZSBsZW5ndGggb2YgaW5wdXQgbmV2ZXIgZXhjZWVkcyB0aGUgc2VlZCBsZW5ndGgu Ci0rICovCi0rCi0rc3RhdGljIHZvaWQgY3R4X2FkZF9idWYoRFJCR19DVFggKmRjdHgsIHVuc2ln bmVkIGNoYXIgKmJ1ZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpp biwgc2l6ZV90IGlubGVuKQotK3sKLSsgICAgc2l6ZV90IGkgPSBpbmxlbjsKLSsgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqcTsKLSsgICAgdW5zaWduZWQgY2hhciBjLCAqcDsKLSsgICAgcCA9IGJ1 ZiArIGRjdHgtPnNlZWRsZW47Ci0rICAgIHEgPSBpbiArIGlubGVuOwotKwotKyAgICBPUEVOU1NM X2Fzc2VydChpIDw9IGRjdHgtPnNlZWRsZW4pOwotKwotKyAgICAvKiBTcGVjaWFsIGNhc2U6IHpl cm8gbGVuZ3RoLCBqdXN0IGluY3JlbWVudCBidWZmZXIgKi8KLSsgICAgaWYgKGkpCi0rICAgICAg ICBjID0gMDsKLSsgICAgZWxzZQotKyAgICAgICAgYyA9IDE7Ci0rCi0rICAgIHdoaWxlIChpKSB7 Ci0rICAgICAgICBpbnQgcjsKLSsgICAgICAgIHAtLTsKLSsgICAgICAgIHEtLTsKLSsgICAgICAg IHIgPSAqcCArICpxICsgYzsKLSsgICAgICAgIC8qIENhcnJ5ICovCi0rICAgICAgICBpZiAociA+ IDB4ZmYpCi0rICAgICAgICAgICAgYyA9IDE7Ci0rICAgICAgICBlbHNlCi0rICAgICAgICAgICAg YyA9IDA7Ci0rICAgICAgICAqcCA9IHIgJiAweGZmOwotKyAgICAgICAgaS0tOwotKyAgICB9Ci0r Ci0rICAgIGkgPSBkY3R4LT5zZWVkbGVuIC0gaW5sZW47Ci0rCi0rICAgIC8qIElmIG5vdCBhZGRp bmcgd2hvbGUgYnVmZmVyIGhhbmRsZSBmaW5hbCBjYXJyaWVzICovCi0rICAgIGlmIChjICYmIGkp IHsKLSsgICAgICAgIGRvIHsKLSsgICAgICAgICAgICBwLS07Ci0rICAgICAgICAgICAgYyA9ICpw OwotKyAgICAgICAgICAgIGMrKzsKLSsgICAgICAgICAgICAqcCA9IGM7Ci0rICAgICAgICAgICAg aWYgKGMpCi0rICAgICAgICAgICAgICAgIHJldHVybjsKLSsgICAgICAgIH0gd2hpbGUgKGktLSk7 Ci0rICAgIH0KLSt9Ci0rCi0rLyogRmluYWxpc2UgYW5kIGFkZCBoYXNoIHRvIFYgKi8KLSsKLStz dGF0aWMgaW50IGN0eF9hZGRfbWQoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICBpZiAoIUZJUFNf ZGlnZXN0ZmluYWwoJmRjdHgtPmQuaGFzaC5tY3R4LCBkY3R4LT5kLmhhc2gudnRtcCwgTlVMTCkp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgY3R4X2FkZF9idWYoZGN0eCwgZGN0eC0+ZC5oYXNo LlYsIGRjdHgtPmQuaGFzaC52dG1wLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rICAgIHJldHVybiAx OwotK30KLSsKLStzdGF0aWMgaW50IGhhc2hfZ2VuKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCBvdXRsZW4pCi0rewotKyAgICBEUkJHX0hBU0hfQ1RYICpoY3R4ID0g JmRjdHgtPmQuaGFzaDsKLSsgICAgaWYgKG91dGxlbiA9PSAwKQotKyAgICAgICAgcmV0dXJuIDE7 Ci0rICAgIG1lbWNweShoY3R4LT52dG1wLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsgICAg Zm9yICg7OykgewotKyAgICAgICAgRklQU19kaWdlc3Rpbml0KCZoY3R4LT5tY3R4LCBoY3R4LT5t ZCk7Ci0rICAgICAgICBGSVBTX2RpZ2VzdHVwZGF0ZSgmaGN0eC0+bWN0eCwgaGN0eC0+dnRtcCwg ZGN0eC0+c2VlZGxlbik7Ci0rICAgICAgICBpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdf VEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKSB7Ci0rICAgICAgICAgICAgRklQU19kaWdlc3RmaW5h bCgmaGN0eC0+bWN0eCwgZGN0eC0+bGIsIE5VTEwpOwotKyAgICAgICAgICAgIGRjdHgtPmxiX3Zh bGlkID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgp IHsKLSsgICAgICAgICAgICBGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBoY3R4LT52dG1w LCBOVUxMKTsKLSsgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhj dHgtPnZ0bXApKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICBtZW1j cHkob3V0LCBoY3R4LT52dG1wLCBvdXRsZW4pOwotKyAgICAgICAgICAgIHJldHVybiAxOwotKyAg ICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBGSVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4 LCBvdXQsIE5VTEwpOwotKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0 eCwgb3V0KSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgb3V0bGVu IC09IGRjdHgtPmJsb2NrbGVuZ3RoOwotKyAgICAgICAgICAgIGlmIChvdXRsZW4gPT0gMCkKLSsg ICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0rICAgICAgICAgICAgb3V0ICs9IGRjdHgtPmJsb2Nr bGVuZ3RoOwotKyAgICAgICAgfQotKyAgICAgICAgY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+dnRt cCwgTlVMTCwgMCk7Ci0rICAgIH0KLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2hhc2hfaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5v bmNlX2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCi0rewotKyAgICBEUkJHX0hBU0hfQ1RYICpo Y3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsgICAgaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPlYsCi0r ICAgICAgICAgICAgICAgICBlbnQsIGVudF9sZW4sIG5vbmNlLCBub25jZV9sZW4sIHBzdHIsIHBz dHJfbGVuLCBOVUxMLCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoIWhhc2hfZGYo ZGN0eCwgaGN0eC0+QywKLSsgICAgICAgICAgICAgICAgIE5VTEwsIDAsIGhjdHgtPlYsIGRjdHgt PnNlZWRsZW4sIE5VTEwsIDAsIE5VTEwsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rI2lm ZGVmIEhBU0hfRFJCR19UUkFDRQotKyAgICBmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciBpbnN0 YW50aWF0ZTpcbiIpOwotKyAgICBoZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRs ZW4pOwotKyAgICBoZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyNl bmRpZgotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2hhc2hfcmVzZWVk KERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rewotKyAg ICBEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsgICAgLyogViBhYm91dCB0 byBiZSB1cGRhdGVkIHNvIHVzZSBDIGFzIG91dHB1dCBpbnN0ZWFkICovCi0rICAgIGlmICghaGFz aF9kZihkY3R4LCBoY3R4LT5DLAotKyAgICAgICAgICAgICAgICAgTlVMTCwgMSwgaGN0eC0+Viwg ZGN0eC0+c2VlZGxlbiwKLSsgICAgICAgICAgICAgICAgIGVudCwgZW50X2xlbiwgYWRpbiwgYWRp bl9sZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIG1lbWNweShoY3R4LT5WLCBoY3R4LT5D LCBkY3R4LT5zZWVkbGVuKTsKLSsgICAgaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsIE5VTEws IDAsCi0rICAgICAgICAgICAgICAgICBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLCBOVUxMLCAwLCBO VUxMLCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKLSsg ICAgZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgcmVzZWVkOlxuIik7Ci0rICAgIGhleHByaW50 KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rICAgIGhleHByaW50KHN0ZGVyciwg aGN0eC0+QywgZGN0eC0+c2VlZGxlbik7Ci0rI2VuZGlmCi0rICAgIHJldHVybiAxOwotK30KLSsK LStzdGF0aWMgaW50IGRyYmdfaGFzaF9nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRp biwgc2l6ZV90IGFkaW5fbGVuKQotK3sKLSsgICAgRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4 LT5kLmhhc2g7Ci0rICAgIEVWUF9NRF9DVFggKm1jdHggPSAmaGN0eC0+bWN0eDsKLSsgICAgdW5z aWduZWQgY2hhciB0bXBbNF07Ci0rICAgIGlmIChhZGluICYmIGFkaW5fbGVuKSB7Ci0rICAgICAg ICB0bXBbMF0gPSAyOwotKyAgICAgICAgaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+ bWQpKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYgKCFFVlBfRGlnZXN0VXBk YXRlKG1jdHgsIHRtcCwgMSkpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAo IUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCi0rICAgICAg ICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgYWRp biwgYWRpbl9sZW4pKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYgKCFjdHhf YWRkX21kKGRjdHgpKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmICgh aGFzaF9nZW4oZGN0eCwgb3V0LCBvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAg IHRtcFswXSA9IDM7Ci0rICAgIGlmICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGhjdHgtPm1kKSkK LSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgdG1w LCAxKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoIUVWUF9EaWdlc3RVcGRhdGUobWN0 eCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAg aWYgKCFjdHhfYWRkX21kKGRjdHgpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGN0eF9h ZGRfYnVmKGRjdHgsIGhjdHgtPlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKwotKyAgICB0 bXBbMF0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMjQpICYgMHhmZjsKLSsgICAgdG1wWzFd ID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDE2KSAmIDB4ZmY7Ci0rICAgIHRtcFsyXSA9IChk Y3R4LT5yZXNlZWRfY291bnRlciA+PiA4KSAmIDB4ZmY7Ci0rICAgIHRtcFszXSA9IGRjdHgtPnJl c2VlZF9jb3VudGVyICYgMHhmZjsKLSsgICAgY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgdG1w LCA0KTsKLSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCi0rICAgIGZwcmludGYoc3RkZXJyLCAiVitD IGFmdGVyIGdlbmVyYXRlOlxuIik7Ci0rICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0 eC0+c2VlZGxlbik7Ci0rICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxl bik7Ci0rI2VuZGlmCi0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdfaGFz aF91bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgRVZQX01EX0NUWF9jbGVh bnVwKCZkY3R4LT5kLmhhc2gubWN0eCk7Ci0rICAgIE9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5o YXNoLCBzaXplb2YoRFJCR19IQVNIX0NUWCkpOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50 IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICBjb25zdCBFVlBf TUQgKm1kOwotKyAgICBEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsgICAg bWQgPSBGSVBTX2dldF9kaWdlc3RieW5pZChkY3R4LT50eXBlKTsKLSsgICAgaWYgKCFtZCkKLSsg ICAgICAgIHJldHVybiAtMjsKLSsgICAgc3dpdGNoIChkY3R4LT50eXBlKSB7Ci0rICAgIGNhc2Ug TklEX3NoYTE6Ci0rICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDEyODsKLSsgICAgICAgIGJyZWFr OwotKwotKyAgICBjYXNlIE5JRF9zaGEyMjQ6Ci0rICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDE5 MjsKLSsgICAgICAgIGJyZWFrOwotKwotKyAgICBkZWZhdWx0OgotKyAgICAgICAgZGN0eC0+c3Ry ZW5ndGggPSAyNTY7Ci0rICAgICAgICBicmVhazsKLSsgICAgfQotKwotKyAgICBkY3R4LT5pbnN0 YW50aWF0ZSA9IGRyYmdfaGFzaF9pbnN0YW50aWF0ZTsKLSsgICAgZGN0eC0+cmVzZWVkID0gZHJi Z19oYXNoX3Jlc2VlZDsKLSsgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2hhc2hfZ2VuZXJhdGU7 Ci0rICAgIGRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZTsKLSsK LSsgICAgZGN0eC0+ZC5oYXNoLm1kID0gbWQ7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmaGN0eC0+ bWN0eCk7Ci0rCi0rICAgIC8qIFRoZXNlIGFyZSB0YWtlbiBmcm9tIFNQIDgwMC05MCAxMC4xIHRh YmxlIDIgKi8KLSsKLSsgICAgZGN0eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsK LSsgICAgaWYgKGRjdHgtPmJsb2NrbGVuZ3RoID4gMzIpCi0rICAgICAgICBkY3R4LT5zZWVkbGVu ID0gMTExOwotKyAgICBlbHNlCi0rICAgICAgICBkY3R4LT5zZWVkbGVuID0gNTU7Ci0rCi0rICAg IGRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c3RyZW5ndGggLyA4OwotKyAgICBkY3R4LT5tYXhf ZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgZGN0eC0+bWluX25vbmNlID0gZGN0 eC0+bWluX2VudHJvcHkgLyAyOwotKyAgICBkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5H VEg7Ci0rCi0rICAgIGRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOwotKyAgICBkY3R4 LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgZGN0eC0+bWF4X3JlcXVlc3Qg PSAxIDw8IDE2OwotKyAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxIDw8IDI0OwotKwotKyAg ICByZXR1cm4gMTsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBz X2RyYmdfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2ht YWMuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlw cwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MzU2MjU1MiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjM1NjI1 NTIgKzAxMDAKLUBAIC0wLDAgKzEsMjcwIEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19obWFj LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wu b3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz 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 PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8 c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotK3N0YXRpYyBpbnQg ZHJiZ19obWFjX3VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJs ZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu Mywgc2l6ZV90IGluM2xlbikKLSt7Ci0rICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGMwID0gMCwg YzEgPSAxOwotKyAgICBEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKLSsgICAg SE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKLSsKLSsgICAgaWYgKCFITUFDX0luaXRfZXgo aGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgt PmJsb2NrbGVuZ3RoKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoIUhNQUNfVXBkYXRl KGhjdHgsICZjMCwgMSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKGluMWxlbiAmJiAh SE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IGlmIChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKLSsgICAgICAg IHJldHVybiAwOwotKyAgICBpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGlu M2xlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgs IGhtYWMtPkssIE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmICghSE1BQ19J bml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5W LCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgaWYgKCFI TUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0r ICAgIGlmICghaW4xbGVuICYmICFpbjJsZW4gJiYgIWluM2xlbikKLSsgICAgICAgIHJldHVybiAx OwotKwotKyAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xl bmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghSE1B Q19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgJmMxLCAxKSkKLSsgICAgICAgIHJl dHVybiAwOwotKyAgICBpZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxl bikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUo aGN0eCwgaW4yLCBpbjJsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChpbjNsZW4g JiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4zbGVuKSkKLSsgICAgICAgIHJldHVybiAwOwot KwotKyAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+SywgTlVMTCkpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsKLSsgICAgaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+ YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBp ZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsgICAg ICAgIHJldHVybiAwOwotKwotKyAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVM TCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rCi0rfQotKwotK3N0 YXRpYyBpbnQgZHJiZ19obWFjX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90 IGVudF9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZV9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQot K3sKLSsgICAgRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rICAgIG1lbXNl dChobWFjLT5LLCAwLCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rICAgIG1lbXNldChobWFjLT5WLCAx LCBkY3R4LT5ibG9ja2xlbmd0aCk7Ci0rICAgIGlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVu LCBwc3RyLCBwc3RyX2xlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsjaWZkZWYgSE1BQ19E UkJHX1RSQUNFCi0rICAgIGZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIGluc3RhbnRpYXRlOlxu Iik7Ci0rICAgIGhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOwot KyAgICBoZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsjZW5k aWYKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX3Jlc2VlZChE UkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQotK3sKLSsgICAg aWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsIGVudCwgZW50X2xlbiwgYWRpbiwgYWRpbl9sZW4s IE5VTEwsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhNQUNfRFJCR19UUkFD RQotKyAgICB7Ci0rICAgICAgICBEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsK LSsgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHJlc2VlZDpcbiIpOwotKyAgICAg ICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rICAgICAg ICBoZXhwcmludChzdGRlcnIsIGhtYWMtPlYsIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsgICAgfQot KyNlbmRpZgotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfZ2Vu ZXJhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSt7Ci0r ICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKyAgICBITUFDX0NUWCAq aGN0eCA9ICZobWFjLT5oY3R4OwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpWdG1wID0gaG1h Yy0+VjsKLSsgICAgaWYgKGFkaW5fbGVuICYmICFkcmJnX2htYWNfdXBkYXRlKGRjdHgsIGFkaW4s IGFkaW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBm b3IgKDs7KSB7Ci0rICAgICAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4 LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKyAgICAgICAgICAgIHJldHVybiAwOwot KyAgICAgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBWdG1wLCBkY3R4LT5ibG9ja2xlbmd0aCkp Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAoIShkY3R4LT54ZmxhZ3MgJiBE UkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKSB7Ci0rICAgICAgICAgICAgaWYgKCFI TUFDX0ZpbmFsKGhjdHgsIGRjdHgtPmxiLCBOVUxMKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJu IDA7Ci0rICAgICAgICAgICAgZGN0eC0+bGJfdmFsaWQgPSAxOwotKyAgICAgICAgICAgIFZ0bXAg PSBkY3R4LT5sYjsKLSsgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgIH0gZWxzZSBpZiAo b3V0bGVuID4gZGN0eC0+YmxvY2tsZW5ndGgpIHsKLSsgICAgICAgICAgICBpZiAoIUhNQUNfRmlu YWwoaGN0eCwgb3V0LCBOVUxMKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAg ICAgICAgaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQotKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICBWdG1wID0gb3V0OwotKyAgICAgICAgfSBlbHNl IHsKLSsgICAgICAgICAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0r ICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nw cm5nX3Rlc3QoZGN0eCwgaG1hYy0+VikpCi0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAg ICAgICAgICAgIG1lbWNweShvdXQsIGhtYWMtPlYsIG91dGxlbik7Ci0rICAgICAgICAgICAgYnJl YWs7Ci0rICAgICAgICB9Ci0rICAgICAgICBvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rICAg ICAgICBvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rICAgIH0KLSsgICAgaWYgKCFkcmJn X2htYWNfdXBkYXRlKGRjdHgsIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsg ICAgICAgIHJldHVybiAwOwotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBk cmJnX2htYWNfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIEhNQUNfQ1RY X2NsZWFudXAoJmRjdHgtPmQuaG1hYy5oY3R4KTsKLSsgICAgT1BFTlNTTF9jbGVhbnNlKCZkY3R4 LT5kLmhtYWMsIHNpemVvZihEUkJHX0hNQUNfQ1RYKSk7Ci0rICAgIHJldHVybiAxOwotK30KLSsK LStpbnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIGNvbnN0 IEVWUF9NRCAqbWQgPSBOVUxMOwotKyAgICBEUkJHX0hNQUNfQ1RYICpoY3R4ID0gJmRjdHgtPmQu aG1hYzsKLSsgICAgZGN0eC0+c3RyZW5ndGggPSAyNTY7Ci0rICAgIHN3aXRjaCAoZGN0eC0+dHlw ZSkgewotKyAgICBjYXNlIE5JRF9obWFjV2l0aFNIQTE6Ci0rICAgICAgICBtZCA9IEVWUF9zaGEx KCk7Ci0rICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDEyODsKLSsgICAgICAgIGJyZWFrOwotKwot KyAgICBjYXNlIE5JRF9obWFjV2l0aFNIQTIyNDoKLSsgICAgICAgIG1kID0gRVZQX3NoYTIyNCgp OwotKyAgICAgICAgZGN0eC0+c3RyZW5ndGggPSAxOTI7Ci0rICAgICAgICBicmVhazsKLSsKLSsg ICAgY2FzZSBOSURfaG1hY1dpdGhTSEEyNTY6Ci0rICAgICAgICBtZCA9IEVWUF9zaGEyNTYoKTsK LSsgICAgICAgIGJyZWFrOwotKwotKyAgICBjYXNlIE5JRF9obWFjV2l0aFNIQTM4NDoKLSsgICAg ICAgIG1kID0gRVZQX3NoYTM4NCgpOwotKyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgTklE X2htYWNXaXRoU0hBNTEyOgotKyAgICAgICAgbWQgPSBFVlBfc2hhNTEyKCk7Ci0rICAgICAgICBi cmVhazsKLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMDsKLSsg ICAgICAgIHJldHVybiAtMjsKLSsgICAgfQotKyAgICBkY3R4LT5pbnN0YW50aWF0ZSA9IGRyYmdf aG1hY19pbnN0YW50aWF0ZTsKLSsgICAgZGN0eC0+cmVzZWVkID0gZHJiZ19obWFjX3Jlc2VlZDsK LSsgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2htYWNfZ2VuZXJhdGU7Ci0rICAgIGRjdHgtPnVu aW5zdGFudGlhdGUgPSBkcmJnX2htYWNfdW5pbnN0YW50aWF0ZTsKLSsgICAgSE1BQ19DVFhfaW5p dCgmaGN0eC0+aGN0eCk7Ci0rICAgIGhjdHgtPm1kID0gbWQ7Ci0rICAgIGRjdHgtPmJsb2NrbGVu Z3RoID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rICAgIGRjdHgtPnNlZWRsZW4gPSBNX0VWUF9NRF9z aXplKG1kKTsKLSsKLSsgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7 Ci0rICAgIGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBkY3R4 LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7Ci0rICAgIGRjdHgtPm1heF9ub25j ZSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9M RU5HVEg7Ci0rICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBk Y3R4LT5tYXhfcmVxdWVzdCA9IDEgPDwgMTY7Ci0rICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9 IDEgPDwgMjQ7Ci0rCi0rICAgIHJldHVybiAxOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19saWIuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19saWIuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY0NTYyNTc1ICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jCTIwMTUtMTItMDQgMTM6 NTU6NTEuOTY0NTYyNTc1ICswMTAwCi1AQCAtMCwwICsxLDU1MyBAQAotKy8qIFdyaXR0ZW4gYnkg RHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAot KyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0r Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgot KyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwot Ky8qIFN1cHBvcnQgZnJhbWV3b3JrIGZvciBTUDgwMC05MCBEUkJHcyAqLwotKwotK2ludCBGSVBT X2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncykK LSt7Ci0rICAgIGludCBydjsKLSsgICAgbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkp OwotKyAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKyAgICBk Y3R4LT54ZmxhZ3MgPSBmbGFnczsKLSsgICAgZGN0eC0+dHlwZSA9IHR5cGU7Ci0rCi0rICAgIGRj dHgtPmlmbGFncyA9IDA7Ci0rICAgIGRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSAwOwotKyAgICBk Y3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKLSsgICAgZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVy dmFsID0gRFJCR19IRUFMVEhfSU5URVJWQUw7Ci0rCi0rICAgIHJ2ID0gZmlwc19kcmJnX2hhc2hf aW5pdChkY3R4KTsKLSsKLSsgICAgaWYgKHJ2ID09IC0yKQotKyAgICAgICAgcnYgPSBmaXBzX2Ry YmdfY3RyX2luaXQoZGN0eCk7Ci0rICAgIGlmIChydiA9PSAtMikKLSsgICAgICAgIHJ2ID0gZmlw c19kcmJnX2htYWNfaW5pdChkY3R4KTsKLSsKLSsgICAgaWYgKHJ2IDw9IDApIHsKLSsgICAgICAg IGlmIChydiA9PSAtMikKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5J VCwgRklQU19SX1VOU1VQUE9SVEVEX0RSQkdfVFlQRSk7Ci0rICAgICAgICBlbHNlCi0rICAgICAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9FUlJPUl9JTklUSUFM SVNJTkdfRFJCRyk7Ci0rICAgIH0KLSsKLSsgICAgLyogSWYgbm90IGluIHRlc3QgbW9kZSBydW4g c2VsZnRlc3RzIG9uIERSQkcgb2YgdGhlIHNhbWUgdHlwZSAqLwotKwotKyAgICBpZiAoIShkY3R4 LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpIHsKLSsgICAgICAgIGlmICghRklQU19kcmJnX2hl YWx0aF9jaGVjayhkY3R4KSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19JTklULCBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRSk7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7 Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStEUkJHX0NU WCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQotK3sKLSsgICAg RFJCR19DVFggKmRjdHg7Ci0rICAgIGRjdHggPSBPUEVOU1NMX21hbGxvYyhzaXplb2YoRFJCR19D VFgpKTsKLSsgICAgaWYgKCFkY3R4KSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfTkVXLCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsg ICAgfQotKwotKyAgICBpZiAodHlwZSA9PSAwKSB7Ci0rICAgICAgICBtZW1zZXQoZGN0eCwgMCwg c2l6ZW9mKERSQkdfQ1RYKSk7Ci0rICAgICAgICBkY3R4LT50eXBlID0gMDsKLSsgICAgICAgIGRj dHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rICAgICAgICByZXR1cm4g ZGN0eDsKLSsgICAgfQotKwotKyAgICBpZiAoRklQU19kcmJnX2luaXQoZGN0eCwgdHlwZSwgZmxh Z3MpIDw9IDApIHsKLSsgICAgICAgIE9QRU5TU0xfZnJlZShkY3R4KTsKLSsgICAgICAgIHJldHVy biBOVUxMOwotKyAgICB9Ci0rCi0rICAgIHJldHVybiBkY3R4OwotK30KLSsKLSt2b2lkIEZJUFNf ZHJiZ19mcmVlKERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgaWYgKGRjdHgtPnVuaW5zdGFudGlh dGUpCi0rICAgICAgICBkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOwotKyAgICAvKiBEb24ndCBm cmVlIHVwIGRlZmF1bHQgRFJCRyAqLwotKyAgICBpZiAoZGN0eCA9PSBGSVBTX2dldF9kZWZhdWx0 X2RyYmcoKSkgewotKyAgICAgICAgbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOwot KyAgICAgICAgZGN0eC0+dHlwZSA9IDA7Ci0rICAgICAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NU QVRVU19VTklOSVRJQUxJU0VEOwotKyAgICB9IGVsc2UgewotKyAgICAgICAgT1BFTlNTTF9jbGVh bnNlKCZkY3R4LT5kLCBzaXplb2YoZGN0eC0+ZCkpOwotKyAgICAgICAgT1BFTlNTTF9mcmVlKGRj dHgpOwotKyAgICB9Ci0rfQotKwotK3N0YXRpYyBzaXplX3QgZmlwc19nZXRfZW50cm9weShEUkJH X0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0r ewotKyAgICB1bnNpZ25lZCBjaGFyICp0b3V0LCAqcDsKLSsgICAgc2l6ZV90IGJsID0gZGN0eC0+ ZW50cm9weV9ibG9ja2xlbiwgcnY7Ci0rICAgIGlmICghZGN0eC0+Z2V0X2VudHJvcHkpCi0rICAg ICAgICByZXR1cm4gMDsKLSsgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUIHx8 ICFibCkKLSsgICAgICAgIHJldHVybiBkY3R4LT5nZXRfZW50cm9weShkY3R4LCBwb3V0LCBlbnRy b3B5LCBtaW5fbGVuLCBtYXhfbGVuKTsKLSsgICAgcnYgPSBkY3R4LT5nZXRfZW50cm9weShkY3R4 LCAmdG91dCwgZW50cm9weSArIGJsLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9s ZW4gKyBibCwgbWF4X2xlbiArIGJsKTsKLSsgICAgaWYgKHRvdXQgPT0gTlVMTCkKLSsgICAgICAg IHJldHVybiAwOwotKyAgICAqcG91dCA9IHRvdXQgKyBibDsKLSsgICAgaWYgKHJ2IDwgKG1pbl9s ZW4gKyBibCkgfHwgKHJ2ICUgYmwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIC8qIENvbXBh cmUgY29uc2VjdXRpdmUgYmxvY2tzIGZvciBjb250aW51b3VzIFBSTkcgdGVzdCAqLwotKyAgICBm b3IgKHAgPSB0b3V0OyBwIDwgdG91dCArIHJ2IC0gYmw7IHAgKz0gYmwpIHsKLSsgICAgICAgIGlm ICghbWVtY21wKHAsIHAgKyBibCwgYmwpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19HRVRfRU5UUk9QWSwgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLKTsKLSsgICAgICAg ICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICBydiAtPSBibDsKLSsgICAg aWYgKHJ2ID4gbWF4X2xlbikKLSsgICAgICAgIHJldHVybiBtYXhfbGVuOwotKyAgICByZXR1cm4g cnY7Ci0rfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfY2xlYW51cF9lbnRyb3B5KERSQkdfQ1RYICpk Y3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91 dCwgc2l6ZV90IG9sZW4pCi0rewotKyAgICBzaXplX3QgYmw7Ci0rICAgIGlmIChkY3R4LT54Zmxh Z3MgJiBEUkJHX0ZMQUdfVEVTVCkKLSsgICAgICAgIGJsID0gMDsKLSsgICAgZWxzZQotKyAgICAg ICAgYmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuOwotKyAgICAvKiBDYWxsIGNsZWFudXAgd2l0 aCBvcmlnaW5hbCBhcmd1bWVudHMgKi8KLSsgICAgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KGRjdHgs IG91dCAtIGJsLCBvbGVuICsgYmwpOwotK30KLSsKLStpbnQgRklQU19kcmJnX2luc3RhbnRpYXRl KERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pCi0rewotKyAgICBzaXplX3QgZW50bGVuID0g MCwgbm9uY2VsZW4gPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyICpub25jZSA9IE5VTEwsICplbnRy b3B5ID0gTlVMTDsKLSsKLSsjaWYgMAotKyAgICAvKiBQdXQgaGVyZSBzbyBlcnJvciBzY3JpcHQg cGlja3MgdGhlbSB1cCAqLwotKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElB VEUsCi0rICAgICAgICAgICAgRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkcp OwotKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9JTl9F UlJPUl9TVEFURSk7Ci0rICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwg RklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEKTsKLSsgICAgRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZKTsKLSsgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfRVJST1JfUkVUUklF VklOR19OT05DRSk7Ci0rICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwg RklQU19SX0lOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0lOU1RBTlRJQVRFLCBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQpOwotKyNlbmRpZgotKwot KyAgICBpbnQgciA9IDA7Ci0rCi0rICAgIGlmIChwZXJzbGVuID4gZGN0eC0+bWF4X3BlcnMpIHsK LSsgICAgICAgIHIgPSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORzsKLSsg ICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAgIGlmICghZGN0eC0+aW5zdGFudGlhdGUp IHsKLSsgICAgICAgIHIgPSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQ7Ci0rICAgICAgICBn b3RvIGVuZDsKLSsgICAgfQotKwotKyAgICBpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVT X1VOSU5JVElBTElTRUQpIHsKLSsgICAgICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFU VVNfRVJST1IpCi0rICAgICAgICAgICAgciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKLSsgICAg ICAgIGVsc2UKLSsgICAgICAgICAgICByID0gRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEOwot KyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+c3RhdHVzID0gRFJCR19T VEFUVVNfRVJST1I7Ci0rCi0rICAgIGVudGxlbiA9IGZpcHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVu dHJvcHksIGRjdHgtPnN0cmVuZ3RoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRj dHgtPm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0rCi0rICAgIGlmIChlbnRsZW4g PCBkY3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkgewotKyAg ICAgICAgciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7Ci0rICAgICAgICBnb3Rv IGVuZDsKLSsgICAgfQotKwotKyAgICBpZiAoZGN0eC0+bWF4X25vbmNlID4gMCAmJiBkY3R4LT5n ZXRfbm9uY2UpIHsKLSsgICAgICAgIG5vbmNlbGVuID0gZGN0eC0+Z2V0X25vbmNlKGRjdHgsICZu b25jZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjdHgtPnN0cmVuZ3Ro IC8gMiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjdHgtPm1pbl9ub25j ZSwgZGN0eC0+bWF4X25vbmNlKTsKLSsKLSsgICAgICAgIGlmIChub25jZWxlbiA8IGRjdHgtPm1p bl9ub25jZSB8fCBub25jZWxlbiA+IGRjdHgtPm1heF9ub25jZSkgewotKyAgICAgICAgICAgIHIg PSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRTsKLSsgICAgICAgICAgICBnb3RvIGVuZDsK LSsgICAgICAgIH0KLSsKLSsgICAgfQotKwotKyAgICBpZiAoIWRjdHgtPmluc3RhbnRpYXRlKGRj dHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cm9weSwgZW50bGVuLCBub25jZSwg bm9uY2VsZW4sIHBlcnMsIHBlcnNsZW4pKSB7Ci0rICAgICAgICByID0gRklQU19SX0VSUk9SX0lO U1RBTlRJQVRJTkdfRFJCRzsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAgIGRj dHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOwotKyAgICBpZiAoIShkY3R4LT5pZmxhZ3Mg JiBEUkJHX0NVU1RPTV9SRVNFRUQpKQotKyAgICAgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAx OwotKwotKyBlbmQ6Ci0rCi0rICAgIGlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFudXBfZW50cm9w eSkKLSsgICAgICAgIGZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxlbik7 Ci0rCi0rICAgIGlmIChub25jZSAmJiBkY3R4LT5jbGVhbnVwX25vbmNlKQotKyAgICAgICAgZGN0 eC0+Y2xlYW51cF9ub25jZShkY3R4LCBub25jZSwgbm9uY2VsZW4pOwotKwotKyAgICBpZiAoZGN0 eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZKQotKyAgICAgICAgcmV0dXJuIDE7Ci0rCi0r ICAgIGlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKLSsgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgcik7Ci0rCi0rICAgIHJldHVy biAwOwotKwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAot KyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90 IGFkaW5sZW4sIGludCBoY2hlY2spCi0rewotKyAgICB1bnNpZ25lZCBjaGFyICplbnRyb3B5ID0g TlVMTDsKLSsgICAgc2l6ZV90IGVudGxlbiA9IDA7Ci0rICAgIGludCByID0gMDsKLSsKLSsjaWYg MAotKyAgICBGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgRklQU19SX05PVF9JTlNUQU5USUFU RUQpOwotKyAgICBGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgRklQU19SX0FERElUSU9OQUxf SU5QVVRfVE9PX0xPTkcpOwotKyNlbmRpZgotKyAgICBpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdf U1RBVFVTX1JFQURZCi0rICAgICAgICAmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVT RUVEKSB7Ci0rICAgICAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQot KyAgICAgICAgICAgIHIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rICAgICAgICBlbHNlIGlm IChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsgICAgICAgICAg ICByID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAg fQotKwotKyAgICBpZiAoIWFkaW4pCi0rICAgICAgICBhZGlubGVuID0gMDsKLSsgICAgZWxzZSBp ZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKSB7Ci0rICAgICAgICByID0gRklQU19SX0FERElU SU9OQUxfSU5QVVRfVE9PX0xPTkc7Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgfQotKwotKyAg ICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsgICAgLyogUGVmb3JtIGhlYWx0 aCBjaGVjayBvbiBhbGwgcmVzZWVkIG9wZXJhdGlvbnMgaWYgbm90IGEgcHJlZGljdGlvbgotKyAg ICAgKiByZXNpc3RhbmNlIHJlcXVlc3QgYW5kIG5vdCBpbiB0ZXN0IG1vZGUuCi0rICAgICAqLwot KyAgICBpZiAoaGNoZWNrICYmICEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKSB7Ci0r ICAgICAgICBpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpIHsKLSsgICAgICAgICAg ICByID0gRklQU19SX1NFTEZURVNUX0ZBSUxVUkU7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0r ICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgZW50bGVuID0gZmlwc19nZXRfZW50cm9weShkY3R4 LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKLSsKLSsgICAgaWYgKGVu dGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KSB7 Ci0rICAgICAgICByID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKLSsgICAgICAg IGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAgIGlmICghZGN0eC0+cmVzZWVkKGRjdHgsIGVudHJv cHksIGVudGxlbiwgYWRpbiwgYWRpbmxlbikpCi0rICAgICAgICBnb3RvIGVuZDsKLSsKLSsgICAg ZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVBRFk7Ci0rICAgIGlmICghKGRjdHgtPmlmbGFn cyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCi0rICAgICAgICBkY3R4LT5yZXNlZWRfY291bnRlciA9 IDE7Ci0rIGVuZDoKLSsKLSsgICAgaWYgKGVudHJvcHkgJiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5 KQotKyAgICAgICAgZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50cm9weSwgZW50bGVuKTsK LSsKLSsgICAgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKLSsgICAgICAg IHJldHVybiAxOwotKwotKyAgICBpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19O T0VSUikpCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9EUkJHX1JFU0VFRCwgcik7Ci0rCi0rICAg IHJldHVybiAwOwotK30KLSsKLStpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwK LSsgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3Qg YWRpbmxlbikKLSt7Ci0rICAgIHJldHVybiBkcmJnX3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVu LCAxKTsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfY2hlY2soRFJCR19DVFggKmRjdHgp Ci0rewotKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCi0rICAgICAgICBy ZXR1cm4gMTsKLSsgICAgZGN0eC0+aGVhbHRoX2NoZWNrX2NudCsrOwotKyAgICBpZiAoZGN0eC0+ aGVhbHRoX2NoZWNrX2NudCA+PSBkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwpIHsKLSsgICAg ICAgIGlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkgewotKyAgICAgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19DSEVDSywgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOwot KyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIHJldHVybiAx OwotK30KLSsKLStpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICBpbnQg cHJlZGljdGlvbl9yZXNpc3RhbmNlLAotKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0rewotKyAgICBpbnQgciA9IDA7Ci0r Ci0rICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfR0VORVJBVEUsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAg ICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFmaXBzX2RyYmdfY2hlY2soZGN0eCkp Ci0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NU QVRVU19SRUFEWQotKyAgICAgICAgJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VF RCkgewotKyAgICAgICAgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKLSsg ICAgICAgICAgICByID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOwotKyAgICAgICAgZWxzZSBpZiAo ZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rICAgICAgICAgICAg ciA9IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0K LSsKLSsgICAgaWYgKG91dGxlbiA+IGRjdHgtPm1heF9yZXF1ZXN0KSB7Ci0rICAgICAgICByID0g RklQU19SX1JFUVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJHOwotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIH0KLSsKLSsgICAgaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikgewotKyAgICAgICAg ciA9IEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HOwotKyAgICAgICAgZ290byBlbmQ7 Ci0rICAgIH0KLSsKLSsgICAgaWYgKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkK LSsgICAgICAgIGRjdHgtPmdlbmVyYXRlKGRjdHgsIE5VTEwsIG91dGxlbiwgTlVMTCwgMCk7Ci0r ICAgIGVsc2UgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2VlZF9pbnRlcnZh bCkKLSsgICAgICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKLSsKLSsgICAg aWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRVNFRUQgfHwgcHJlZGljdGlvbl9yZXNp c3RhbmNlKSB7Ci0rICAgICAgICAvKiBJZiBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBk b24ndCBkbyBoZWFsdGggY2hlY2sgKi8KLSsgICAgICAgIGludCBoY2hlY2sgPSBwcmVkaWN0aW9u X3Jlc2lzdGFuY2UgPyAwIDogMTsKLSsKLSsgICAgICAgIGlmICghZHJiZ19yZXNlZWQoZGN0eCwg YWRpbiwgYWRpbmxlbiwgaGNoZWNrKSkgewotKyAgICAgICAgICAgIHIgPSBGSVBTX1JfUkVTRUVE X0VSUk9SOwotKyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQotKyAgICAgICAgYWRp biA9IE5VTEw7Ci0rICAgICAgICBhZGlubGVuID0gMDsKLSsgICAgfQotKwotKyAgICBpZiAoIWRj dHgtPmdlbmVyYXRlKGRjdHgsIG91dCwgb3V0bGVuLCBhZGluLCBhZGlubGVuKSkgewotKyAgICAg ICAgciA9IEZJUFNfUl9HRU5FUkFURV9FUlJPUjsKLSsgICAgICAgIGRjdHgtPnN0YXR1cyA9IERS QkdfU1RBVFVTX0VSUk9SOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsgICAgaWYgKCEo ZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkgewotKyAgICAgICAgaWYgKGRjdHgt PnJlc2VlZF9jb3VudGVyID49IGRjdHgtPnJlc2VlZF9pbnRlcnZhbCkKLSsgICAgICAgICAgICBk Y3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7Ci0rICAgICAgICBlbHNlCi0rICAgICAg ICAgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIrKzsKLSsgICAgfQotKwotKyBlbmQ6Ci0rICAgIGlm IChyKSB7Ci0rICAgICAgICBpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQot KyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgcik7Ci0rICAg ICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50IEZJ UFNfZHJiZ191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgaW50IHJ2Owot KyAgICBpZiAoIWRjdHgtPnVuaW5zdGFudGlhdGUpCi0rICAgICAgICBydiA9IDE7Ci0rICAgIGVs c2UKLSsgICAgICAgIHJ2ID0gZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsgICAgLyogQWx0 aG91Z2ggd2UnZCBsaWtlIHRvIGNsZWFuc2UgaGVyZSB3ZSBjYW4ndCBiZWNhdXNlIHdlIGhhdmUg dG8KLSsgICAgICogdGVzdCB0aGUgdW5pbnN0YW50aWF0ZSByZWFsbHkgemVyb2VzIHRoZSBkYXRh LgotKyAgICAgKi8KLSsgICAgbWVtc2V0KCZkY3R4LT5kLCAwLCBzaXplb2YoZGN0eC0+ZCkpOwot KyAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKyAgICAvKiBJ ZiBtZXRob2QgaGFzIHByb2JsZW1zIHVuaW5zdGFudGlhdGluZywgcmV0dXJuIGVycm9yICovCi0r ICAgIHJldHVybiBydjsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdf Q1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfZW50 cm9weSkgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pbl9s ZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG1heF9sZW4pLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2xl YW51cF9lbnRyb3B5KSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVu KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAoKmdldF9ub25jZSkgKERSQkdf Q1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfbGVu KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfbm9uY2UpIChE UkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xlbikpCi0rewotKyAgICBpZiAoZGN0 eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9IGVudHJvcHlfYmxvY2tsZW47Ci0rICAg IGRjdHgtPmdldF9lbnRyb3B5ID0gZ2V0X2VudHJvcHk7Ci0rICAgIGRjdHgtPmNsZWFudXBfZW50 cm9weSA9IGNsZWFudXBfZW50cm9weTsKLSsgICAgZGN0eC0+Z2V0X25vbmNlID0gZ2V0X25vbmNl OwotKyAgICBkY3R4LT5jbGVhbnVwX25vbmNlID0gY2xlYW51cF9ub25jZTsKLSsgICAgcmV0dXJu IDE7Ci0rfQotKwotK2ludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpk Y3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAoKmdldF9hZGlu KSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwb3V0KSwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICgqY2xlYW51cF9hZGluKSAoRFJCR19DVFggKmN0eCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3Qgb2xlbiksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICgqcmFuZF9zZWVkX2NiKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpi dWYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG51bSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqcmFu ZF9hZGRfY2IpIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVu dHJvcHkpKQotK3sKLSsgICAgaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJ QUxJU0VEKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGRjdHgtPmdldF9hZGluID0gZ2V0X2Fk aW47Ci0rICAgIGRjdHgtPmNsZWFudXBfYWRpbiA9IGNsZWFudXBfYWRpbjsKLSsgICAgZGN0eC0+ cmFuZF9zZWVkX2NiID0gcmFuZF9zZWVkX2NiOwotKyAgICBkY3R4LT5yYW5kX2FkZF9jYiA9IHJh bmRfYWRkX2NiOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rdm9pZCAqRklQU19kcmJnX2dldF9h cHBfZGF0YShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIHJldHVybiBkY3R4LT5hcHBfZGF0YTsK LSt9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4LCB2b2lk ICphcHBfZGF0YSkKLSt7Ci0rICAgIGRjdHgtPmFwcF9kYXRhID0gYXBwX2RhdGE7Ci0rfQotKwot K3NpemVfdCBGSVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KQotK3sKLSsg ICAgcmV0dXJuIGRjdHgtPmJsb2NrbGVuZ3RoOwotK30KLSsKLStpbnQgRklQU19kcmJnX2dldF9z dHJlbmd0aChEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIHJldHVybiBkY3R4LT5zdHJlbmd0aDsK LSt9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4 LCBpbnQgaW50ZXJ2YWwpCi0rewotKyAgICBkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwgPSBp bnRlcnZhbDsKLSt9Ci0rCi0rdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChEUkJH X0NUWCAqZGN0eCwgaW50IGludGVydmFsKQotK3sKLSsgICAgZGN0eC0+cmVzZWVkX2ludGVydmFs ID0gaW50ZXJ2YWw7Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19zdGljayA9IDA7Ci0rCi0rdm9p ZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKQotK3sKLSsgICAgZHJiZ19zdGljayA9IG9ub2Zm OwotK30KLSsKLSsvKiBDb250aW51b3VzIERSQkcgdXRpbGl0eSBmdW5jdGlvbiAqLwotK2ludCBm aXBzX2RyYmdfY3BybmdfdGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAq b3V0KQotK3sKLSsgICAgLyogTm8gQ1BSTkcgaW4gdGVzdCBtb2RlICovCi0rICAgIGlmIChkY3R4 LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkKLSsgICAgICAgIHJldHVybiAxOwotKyAgICAvKiBD aGVjayBibG9jayBpcyB2YWxpZDogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotKyAgICBpZiAoZGN0 eC0+bGJfdmFsaWQgPT0gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQ Uk5HX1RFU1QsIEZJUFNfUl9JTlRFUk5BTF9FUlJPUik7Ci0rICAgICAgICBmaXBzX3NldF9zZWxm dGVzdF9mYWlsKCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAoZHJiZ19z dGljaykKLSsgICAgICAgIG1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCk7 Ci0rICAgIC8qIENoZWNrIGFnYWluc3QgbGFzdCBibG9jazogZmFpbCBpZiBtYXRjaCAqLwotKyAg ICBpZiAoIW1lbWNtcChkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCkpIHsKLSsgICAg ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBGSVBTX1JfRFJCR19TVFVD Syk7Ci0rICAgICAgICBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rICAgICAgICByZXR1cm4g MDsKLSsgICAgfQotKyAgICAvKiBTYXZlIGxhc3QgYmxvY2sgZm9yIG5leHQgY29tcGFyaXNvbiAq LwotKyAgICBtZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKyAgICBy ZXR1cm4gMTsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2Ry YmdfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQu YwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcwky MDE1LTEyLTA0IDEzOjU1OjUxLjk2NDU2MjU3NSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjQ1NjI1NzUg KzAxMDAKLUBAIC0wLDAgKzEsMTY2IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19yYW5kLmMg Ki8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3Jn KSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoK LSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNT TC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUg ImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsvKiBNYXBwaW5nIG9mIFNQODAwLTkwIERSQkdzIHRvIE9w ZW5TU0wgUkFORF9NRVRIT0QgKi8KLSsKLSsvKiBTaW5jZSB3ZSBvbmx5IGhhdmUgb25lIGdsb2Jh bCBQUk5HIHVzZWQgYXQgYW55IHRpbWUgaW4gT3BlblNTTCB1c2UgYSBnbG9iYWwKLSsgKiB2YXJp YWJsZSB0byBzdG9yZSBjb250ZXh0LgotKyAqLwotKwotK3N0YXRpYyBEUkJHX0NUWCBvc3NsX2Rj dHg7Ci0rCi0rRFJCR19DVFggKkZJUFNfZ2V0X2RlZmF1bHRfZHJiZyh2b2lkKQotK3sKLSsgICAg cmV0dXJuICZvc3NsX2RjdHg7Ci0rfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2J5dGVzKHVu c2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQotK3sKLSsgICAgRFJCR19DVFggKmRjdHggPSAm b3NzbF9kY3R4OwotKyAgICBpbnQgcnYgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyICphZGluID0g TlVMTDsKLSsgICAgc2l6ZV90IGFkaW5sZW4gPSAwOwotKyAgICBDUllQVE9fd19sb2NrKENSWVBU T19MT0NLX1JBTkQpOwotKyAgICBkbyB7Ci0rICAgICAgICBzaXplX3QgcmNudDsKLSsgICAgICAg IGlmIChjb3VudCA+IChpbnQpZGN0eC0+bWF4X3JlcXVlc3QpCi0rICAgICAgICAgICAgcmNudCA9 IGRjdHgtPm1heF9yZXF1ZXN0OwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIHJjbnQgPSBj b3VudDsKLSsgICAgICAgIGlmIChkY3R4LT5nZXRfYWRpbikgewotKyAgICAgICAgICAgIGFkaW5s ZW4gPSBkY3R4LT5nZXRfYWRpbihkY3R4LCAmYWRpbik7Ci0rICAgICAgICAgICAgaWYgKGFkaW5s ZW4gJiYgIWFkaW4pIHsKLSsgICAgICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0JZVEVTLAotKyAgICAgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5H X0FERElUSU9OQUxfSU5QVVQpOwotKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAg ICAgICB9Ci0rICAgICAgICB9Ci0rICAgICAgICBydiA9IEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4 LCBvdXQsIHJjbnQsIDAsIGFkaW4sIGFkaW5sZW4pOwotKyAgICAgICAgaWYgKGFkaW4pIHsKLSsg ICAgICAgICAgICBpZiAoZGN0eC0+Y2xlYW51cF9hZGluKQotKyAgICAgICAgICAgICAgICBkY3R4 LT5jbGVhbnVwX2FkaW4oZGN0eCwgYWRpbiwgYWRpbmxlbik7Ci0rICAgICAgICAgICAgYWRpbiA9 IE5VTEw7Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoIXJ2KQotKyAgICAgICAgICAgIGdvdG8g ZXJyOwotKyAgICAgICAgb3V0ICs9IHJjbnQ7Ci0rICAgICAgICBjb3VudCAtPSByY250OwotKyAg ICB9Ci0rICAgIHdoaWxlIChjb3VudCk7Ci0rICAgIHJ2ID0gMTsKLSsgZXJyOgotKyAgICBDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIHJldHVybiBydjsKLSt9Ci0rCi0r c3RhdGljIGludCBmaXBzX2RyYmdfcHNldWRvKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50 KQotK3sKLSsgICAgaWYgKGZpcHNfZHJiZ19ieXRlcyhvdXQsIGNvdW50KSA8PSAwKQotKyAgICAg ICAgcmV0dXJuIC0xOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX2Ry Ymdfc3RhdHVzKHZvaWQpCi0rewotKyAgICBEUkJHX0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0r ICAgIGludCBydjsKLSsgICAgQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsgICAg cnYgPSBkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkgPyAxIDogMDsKLSsgICAgQ1JZ UFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAgICByZXR1cm4gcnY7Ci0rfQotKwot K3N0YXRpYyB2b2lkIGZpcHNfZHJiZ19jbGVhbnVwKHZvaWQpCi0rewotKyAgICBEUkJHX0NUWCAq ZGN0eCA9ICZvc3NsX2RjdHg7Ci0rICAgIENSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 Ci0rICAgIEZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpOwotKyAgICBDUllQVE9fd191bmxv Y2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX3NlZWQo Y29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4pCi0rewotKyAgICBEUkJHX0NUWCAqZGN0eCA9 ICZvc3NsX2RjdHg7Ci0rICAgIGlmIChkY3R4LT5yYW5kX3NlZWRfY2IpCi0rICAgICAgICByZXR1 cm4gZGN0eC0+cmFuZF9zZWVkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4pOwotKyAgICByZXR1cm4g MTsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIGlu dCBzZWVkbGVuLCBkb3VibGUgYWRkX2VudHJvcHkpCi0rewotKyAgICBEUkJHX0NUWCAqZGN0eCA9 ICZvc3NsX2RjdHg7Ci0rICAgIGlmIChkY3R4LT5yYW5kX2FkZF9jYikKLSsgICAgICAgIHJldHVy biBkY3R4LT5yYW5kX2FkZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuLCBhZGRfZW50cm9weSk7Ci0r ICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgcmFuZF9kcmJn X21ldGggPSB7Ci0rICAgIGZpcHNfZHJiZ19zZWVkLAotKyAgICBmaXBzX2RyYmdfYnl0ZXMsCi0r ICAgIGZpcHNfZHJiZ19jbGVhbnVwLAotKyAgICBmaXBzX2RyYmdfYWRkLAotKyAgICBmaXBzX2Ry YmdfcHNldWRvLAotKyAgICBmaXBzX2RyYmdfc3RhdHVzCi0rfTsKLSsKLStjb25zdCBSQU5EX01F VEhPRCAqRklQU19kcmJnX21ldGhvZCh2b2lkKQotK3sKLSsgICAgcmV0dXJuICZyYW5kX2RyYmdf bWV0aDsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdf c2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxm dGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0 LmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NDU2MjU3NSArMDEwMAotKysrIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jCTIwMTUtMTItMDQgMTM6NTU6 NTEuOTY0NTYyNTc1ICswMTAwCi1AQCAtMCwwICsxLDgyNyBAQAotKy8qIGZpcHMvcmFuZC9maXBz X2RyYmdfc2VsZnRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAo c3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0r LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0r ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0 aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgot KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAg IGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K LSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgot KyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRf bGNsLmgiCi0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpbmNsdWRlICJmaXBzX2RyYmdf c2VsZnRlc3QuaCIKLSsKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rICAgIGludCBwb3N0OwotKyAgICBp bnQgbmlkOwotKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0rCi0rICAgIC8qIEtBVCBkYXRhIGZv ciBubyBQUiAqLwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7Ci0rICAgIHNpemVfdCBl bnRsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlOwotKyAgICBzaXplX3Qgbm9u Y2VsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnM7Ci0rICAgIHNpemVfdCBwZXJz bGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluOwotKyAgICBzaXplX3QgYWRpbmxl bjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50cmVzZWVkOwotKyAgICBzaXplX3QgZW50 cmVzZWVkbGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGlucmVzZWVkOwotKyAgICBz aXplX3QgYWRpbnJlc2VlZGxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjI7Ci0r ICAgIHNpemVfdCBhZGluMmxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0OwotKyAg ICBzaXplX3Qga2F0bGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQyOwotKyAgICBz aXplX3Qga2F0MmxlbjsKLSsKLSsgICAgLyogS0FUIGRhdGEgZm9yIFBSICovCi0rICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmVudF9wcjsKLSsgICAgc2l6ZV90IGVudGxlbl9wcjsKLSsgICAgY29u c3QgdW5zaWduZWQgY2hhciAqbm9uY2VfcHI7Ci0rICAgIHNpemVfdCBub25jZWxlbl9wcjsKLSsg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVyc19wcjsKLSsgICAgc2l6ZV90IHBlcnNsZW5fcHI7 Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5fcHI7Ci0rICAgIHNpemVfdCBhZGlubGVu X3ByOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnRwcl9wcjsKLSsgICAgc2l6ZV90IGVu dHBybGVuX3ByOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluZ19wcjsKLSsgICAgc2l6 ZV90IGFkaW5nbGVuX3ByOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnRnX3ByOwotKyAg ICBzaXplX3QgZW50Z2xlbl9wcjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0X3ByOwot KyAgICBzaXplX3Qga2F0bGVuX3ByOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQyX3By OwotKyAgICBzaXplX3Qga2F0Mmxlbl9wcjsKLSsKLSt9IERSQkdfU0VMRlRFU1RfREFUQTsKLSsK LSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0X2RhdGEobmlkLCBmbGFnLCBwciwgcCkge3AsIG5pZCwg ZmxhZyB8IERSQkdfRkxBR19URVNULCBcCi0rICAgICAgICBwciMjX2VudHJvcHlpbnB1dCwgc2l6 ZW9mKHByIyNfZW50cm9weWlucHV0KSwgXAotKyAgICAgICAgcHIjI19ub25jZSwgc2l6ZW9mKHBy IyNfbm9uY2UpLCBcCi0rICAgICAgICBwciMjX3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9m KHByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAotKyAgICAgICAgcHIjI19hZGRpdGlvbmFs aW5wdXQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dCksIFwKLSsgICAgICAgIHByIyNfZW50 cm9weWlucHV0cmVzZWVkLCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXRyZXNlZWQpLCBcCi0rICAg ICAgICBwciMjX2FkZGl0aW9uYWxpbnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlu cHV0cmVzZWVkKSwgXAotKyAgICAgICAgcHIjI19hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIj I19hZGRpdGlvbmFsaW5wdXQyKSwgXAotKyAgICAgICAgcHIjI19pbnRfcmV0dXJuZWRiaXRzLCBz aXplb2YocHIjI19pbnRfcmV0dXJuZWRiaXRzKSwgXAotKyAgICAgICAgcHIjI19yZXR1cm5lZGJp dHMsIHNpemVvZihwciMjX3JldHVybmVkYml0cyksIFwKLSsgICAgICAgIHByIyNfcHJfZW50cm9w eWlucHV0LCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXQpLCBcCi0rICAgICAgICBwciMjX3By X25vbmNlLCBzaXplb2YocHIjI19wcl9ub25jZSksIFwKLSsgICAgICAgIHByIyNfcHJfcGVyc29u YWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBc Ci0rICAgICAgICBwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfcHJfYWRkaXRp b25hbGlucHV0KSwgXAotKyAgICAgICAgcHIjI19wcl9lbnRyb3B5aW5wdXRwciwgc2l6ZW9mKHBy IyNfcHJfZW50cm9weWlucHV0cHIpLCBcCi0rICAgICAgICBwciMjX3ByX2FkZGl0aW9uYWxpbnB1 dDIsIHNpemVvZihwciMjX3ByX2FkZGl0aW9uYWxpbnB1dDIpLCBcCi0rICAgICAgICBwciMjX3By X2VudHJvcHlpbnB1dHByMiwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0cHIyKSwgXAotKyAg ICAgICAgcHIjI19wcl9pbnRfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9pbnRfcmV0dXJu ZWRiaXRzKSwgXAotKyAgICAgICAgcHIjI19wcl9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3By X3JldHVybmVkYml0cyksIFwKLSsgICAgICAgIH0KLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0 X2RhdGFfZGYobmlkLCBwciwgcCkgXAotKyAgICAgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQs IERSQkdfRkxBR19DVFJfVVNFX0RGLCBwciwgcCkKLSsKLSsjZGVmaW5lIG1ha2VfZHJiZ190ZXN0 X2RhdGFfZWMoY3VydmUsIG1kLCBwciwgcCkgXAotKyAgICAgICAgbWFrZV9kcmJnX3Rlc3RfZGF0 YSgoY3VydmUgPDwgMTYpIHwgbWQgLCAwLCBwciwgcCkKLSsKLStzdGF0aWMgRFJCR19TRUxGVEVT VF9EQVRBIGRyYmdfdGVzdFtdID0gewotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKE5JRF9h ZXNfMTI4X2N0ciwgYWVzXzEyOF91c2VfZGYsIDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRh X2RmKE5JRF9hZXNfMTkyX2N0ciwgYWVzXzE5Ml91c2VfZGYsIDApLAotKyAgICBtYWtlX2RyYmdf dGVzdF9kYXRhX2RmKE5JRF9hZXNfMjU2X2N0ciwgYWVzXzI1Nl91c2VfZGYsIDEpLAotKyAgICBt YWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMTI4X2N0ciwgMCwgYWVzXzEyOF9ub19kZiwgMCks Ci0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xOTJfY3RyLCAwLCBhZXNfMTkyX25v X2RmLCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzI1Nl9jdHIsIDAsIGFl c18yNTZfbm9fZGYsIDEpLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGExLCAwLCBz aGExLCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMjI0LCAwLCBzaGEyMjQs IDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEyNTYsIDAsIHNoYTI1NiwgMSks Ci0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTM4NCwgMCwgc2hhMzg0LCAwKSwKLSsg ICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhNTEyLCAwLCBzaGE1MTIsIDApLAotKyAgICBt YWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTEsIDAsIGhtYWNfc2hhMSwgMCksCi0r ICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMjI0LCAwLCBobWFjX3NoYTIy NCwgMCksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMjU2LCAwLCBo bWFjX3NoYTI1NiwgMSksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hB Mzg0LCAwLCBobWFjX3NoYTM4NCwgMCksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2ht YWNXaXRoU0hBNTEyLCAwLCBobWFjX3NoYTUxMiwgMCksCi0rICAgIHswLCAwLCAwfQotK307Ci0r Ci0rdHlwZWRlZiBzdHJ1Y3QgewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQ7Ci0rICAg IHNpemVfdCBlbnRsZW47Ci0rICAgIGludCBlbnRjbnQ7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKm5vbmNlOwotKyAgICBzaXplX3Qgbm9uY2VsZW47Ci0rICAgIGludCBub25jZWNudDsKLSt9 IFRFU1RfRU5UOwotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4 LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg ZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotK3sKLSsgICAgVEVTVF9F TlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwotKyAgICAqcG91dCA9ICh1bnNp Z25lZCBjaGFyICopdC0+ZW50OwotKyAgICB0LT5lbnRjbnQrKzsKLSsgICAgcmV0dXJuIHQtPmVu dGxlbjsKLSt9Ci0rCi0rc3RhdGljIHNpemVfdCB0ZXN0X25vbmNlKERSQkdfQ1RYICpkY3R4LCB1 bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJv cHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSt7Ci0rICAgIFRFU1RfRU5UICp0 ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsgICAgKnBvdXQgPSAodW5zaWduZWQg Y2hhciAqKXQtPm5vbmNlOwotKyAgICB0LT5ub25jZWNudCsrOwotKyAgICByZXR1cm4gdC0+bm9u Y2VsZW47Ci0rfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX3NpbmdsZV9rYXQoRFJCR19DVFgg KmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqIHRkLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHF1aWNrKQotK3sKLSsgICAgVEVTVF9FTlQgdDsKLSsgICAgaW50IHJ2ID0g MDsKLSsgICAgc2l6ZV90IGFkaW5sZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0 XTsKLSsKLSsgICAgLyogSW5pdGlhbCB0ZXN0IHdpdGhvdXQgUFIgKi8KLSsKLSsgICAgLyogSW5z dGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlv bgotKyAgICAgKiBzdHJpbmcuCi0rICAgICAqLwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19pbml0 KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYg KCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rf bm9uY2UsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIEZJUFNfZHJiZ19zZXRfYXBw X2RhdGEoZGN0eCwgJnQpOwotKwotKyAgICB0LmVudCA9IHRkLT5lbnQ7Ci0rICAgIHQuZW50bGVu ID0gdGQtPmVudGxlbjsKLSsgICAgdC5ub25jZSA9IHRkLT5ub25jZTsKLSsgICAgdC5ub25jZWxl biA9IHRkLT5ub25jZWxlbjsKLSsgICAgdC5lbnRjbnQgPSAwOwotKyAgICB0Lm5vbmNlY250ID0g MDsKLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRk LT5wZXJzbGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAvKiBOb3RlIGZvciBDVFIg d2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwgaW5wdXQgdmFsdWVzCi0rICAgICAqIGlnbm9yZSBi eXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBzbyByZWR1Y2UgYWRpbmxlbgotKyAgICAgKiB0byBo YWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMgZmVkIGluLgotKyAgICAgKi8KLSsgICAgaWYg KCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlm bGFncykpCi0rICAgICAgICBhZGlubGVuID0gdGQtPmFkaW5sZW4gLyAyOwotKyAgICBlbHNlCi0r ICAgICAgICBhZGlubGVuID0gdGQtPmFkaW5sZW47Ci0rCi0rICAgIC8qIEdlbmVyYXRlIHdpdGgg bm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCi0rICAgIGlm ICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsIHRkLT5h ZGluLCBhZGlubGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAobWVtY21wKHJh bmRvdXQsIHRkLT5rYXQsIHRkLT5rYXRsZW4pKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDFfRkFJTFVSRSk7Ci0rICAgICAg ICBnb3RvIGVycjI7Ci0rICAgIH0KLSsgICAgLyogSWYgYWJicmV2aWF0ZWQgUE9TVCBlbmQgb2Yg dGVzdCAqLwotKyAgICBpZiAocXVpY2spIHsKLSsgICAgICAgIHJ2ID0gMTsKLSsgICAgICAgIGdv dG8gZXJyOwotKyAgICB9Ci0rICAgIC8qIFJlc2VlZCBEUkJHIHdpdGggdGVzdCBlbnRyb3B5IGFu ZCBhZGRpdGlvbmFsIGlucHV0ICovCi0rICAgIHQuZW50ID0gdGQtPmVudHJlc2VlZDsKLSsgICAg dC5lbnRsZW4gPSB0ZC0+ZW50cmVzZWVkbGVuOwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19yZXNl ZWQoZGN0eCwgdGQtPmFkaW5yZXNlZWQsIHRkLT5hZGlucmVzZWVkbGVuKSkKLSsgICAgICAgIGdv dG8gZXJyOwotKwotKyAgICAvKiBHZW5lcmF0ZSB3aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0 IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLwotKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShk Y3R4LCByYW5kb3V0LCB0ZC0+a2F0MmxlbiwgMCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGQtPmFkaW4yLCB0ZC0+YWRpbjJsZW4pKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAg IGlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdDIsIHRkLT5rYXQybGVuKSkgewotKyAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QyX0ZB SUxVUkUpOwotKyAgICAgICAgZ290byBlcnIyOwotKyAgICB9Ci0rCi0rICAgIEZJUFNfZHJiZ191 bmluc3RhbnRpYXRlKGRjdHgpOwotKwotKyAgICAvKiBOb3cgdGVzdCB3aXRoIFBSICovCi0rCi0r ICAgIC8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJz b25hbGlzYXRpb24KLSsgICAgICogc3RyaW5nLgotKyAgICAgKi8KLSsgICAgaWYgKCFGSVBTX2Ry YmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIGlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAw LCB0ZXN0X25vbmNlLCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBGSVBTX2RyYmdf c2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKLSsKLSsgICAgdC5lbnQgPSB0ZC0+ZW50X3ByOwotKyAg ICB0LmVudGxlbiA9IHRkLT5lbnRsZW5fcHI7Ci0rICAgIHQubm9uY2UgPSB0ZC0+bm9uY2VfcHI7 Ci0rICAgIHQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW5fcHI7Ci0rICAgIHQuZW50Y250ID0gMDsK LSsgICAgdC5ub25jZWNudCA9IDA7Ci0rCi0rICAgIGlmICghRklQU19kcmJnX2luc3RhbnRpYXRl KGRjdHgsIHRkLT5wZXJzX3ByLCB0ZC0+cGVyc2xlbl9wcikpCi0rICAgICAgICBnb3RvIGVycjsK LSsKLSsgICAgLyogTm93IGdlbmVyYXRlIHdpdGggUFI6IHdlIG5lZWQgdG8gc3VwcGx5IGVudHJv cHkgYXMgdGhpcyB3aWxsCi0rICAgICAqIHBlcmZvcm0gYSByZXNlZWQgb3BlcmF0aW9uLiBDaGVj ayBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZS4KLSsgICAgICovCi0rCi0rICAgIHQuZW50 ID0gdGQtPmVudHByX3ByOwotKyAgICB0LmVudGxlbiA9IHRkLT5lbnRwcmxlbl9wcjsKLSsKLSsg ICAgLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVl cwotKyAgICAgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFk aW5sZW4KLSsgICAgICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4K LSsgICAgICovCi0rICAgIGlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRj dHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQotKyAgICAgICAgYWRpbmxlbiA9IHRkLT5hZGlubGVu X3ByIC8gMjsKLSsgICAgZWxzZQotKyAgICAgICAgYWRpbmxlbiA9IHRkLT5hZGlubGVuX3ByOwot KyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuX3By LCAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbl9wciwgYWRpbmxlbikp Ci0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0 X3ByLCB0ZC0+a2F0bGVuX3ByKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMV9GQUlMVVJFKTsKLSsgICAgICAgIGdvdG8gZXJy MjsKLSsgICAgfQotKwotKyAgICAvKiBOb3cgZ2VuZXJhdGUgYWdhaW4gd2l0aCBQUjogc3VwcGx5 IG5ldyBlbnRyb3B5IGFnYWluLgotKyAgICAgKiBDaGVjayBvdXRwdXQgbWF0Y2hlcyBleHBlY3Rl ZCB2YWx1ZS4KLSsgICAgICovCi0rCi0rICAgIHQuZW50ID0gdGQtPmVudGdfcHI7Ci0rICAgIHQu ZW50bGVuID0gdGQtPmVudGdsZW5fcHI7Ci0rCi0rICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRl KGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuX3ByLCAxLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZC0+YWRpbmdfcHIsIHRkLT5hZGluZ2xlbl9wcikpCi0rICAgICAgICBnb3RvIGVy cjsKLSsKLSsgICAgaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0Ml9wciwgdGQtPmthdDJsZW5f cHIpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQ U19SX1BSX1RFU1QyX0ZBSUxVUkUpOwotKyAgICAgICAgZ290byBlcnIyOwotKyAgICB9Ci0rICAg IC8qIEFsbCBPSywgdGVzdCBjb21wbGV0ZSAqLwotKyAgICBydiA9IDE7Ci0rCi0rIGVycjoKLSsg ICAgaWYgKHJ2ID09IDApCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xF X0tBVCwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rIGVycjI6Ci0rICAgIEZJUFNfZHJiZ191 bmluc3RhbnRpYXRlKGRjdHgpOwotKwotKyAgICByZXR1cm4gcnY7Ci0rCi0rfQotKwotKy8qIElu aXRpYWxpc2UgYSBEUkJHIGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KLSsKLStzdGF0aWMgaW50 IGRvX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQsIFRF U1RfRU5UICogdCkKLSt7Ci0rCi0rICAgIGlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5p ZCwgdGQtPmZsYWdzKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBpZiAoIUZJUFNfZHJi Z19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkp Ci0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4 LCB0KTsKLSsKLSsgICAgdC0+ZW50ID0gdGQtPmVudDsKLSsgICAgdC0+ZW50bGVuID0gdGQtPmVu dGxlbjsKLSsgICAgdC0+bm9uY2UgPSB0ZC0+bm9uY2U7Ci0rICAgIHQtPm5vbmNlbGVuID0gdGQt Pm5vbmNlbGVuOwotKyAgICB0LT5lbnRjbnQgPSAwOwotKyAgICB0LT5ub25jZWNudCA9IDA7Ci0r ICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBJbml0aWFsaXNlIGFuZCBpbnN0YW50aWF0ZSBEUkJH IGJhc2VkIG9uIHNlbGZ0ZXN0IGRhdGEgKi8KLStzdGF0aWMgaW50IGRvX2RyYmdfaW5zdGFudGlh dGUoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqIHRkLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBURVNUX0VOVCAqIHQpCi0rewotKyAgICBpZiAoIWRvX2RyYmdf aW5pdChkY3R4LCB0ZCwgdCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFGSVBTX2Ry YmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSkKLSsgICAgICAgIHJl dHVybiAwOwotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogVGhpcyBmdW5jdGlvbiBwZXJm b3JtcyBleHRlbnNpdmUgZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgU1A4MDAtOTAuCi0r ICogSW5kdWNlIHNldmVyYWwgZmFpbHVyZSBtb2RlcyBhbmQgY2hlY2sgYW4gZXJyb3IgY29uZGl0 aW9uIGlzIHNldC4KLSsgKiBUaGlzIGZ1bmN0aW9uIGFsb25nIHdpdGggZmlwc19kcmJnX3Npbmds ZV9rYXQgcGVmb3JtcyB0aGUgaGVhbHRoIGNoZWNraW5nCi0rICogb3BlcmF0aW9uLgotKyAqLwot KwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2Vycm9yX2NoZWNrKERSQkdfQ1RYICpkY3R4LCBEUkJH X1NFTEZURVNUX0RBVEEgKiB0ZCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcmFuZG91dFsxMDI0 XTsKLSsgICAgVEVTVF9FTlQgdDsKLSsgICAgc2l6ZV90IGk7Ci0rICAgIHVuc2lnbmVkIGludCBy ZXNlZWRfY291bnRlcl90bXA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hh ciAqKWRjdHg7Ci0rCi0rICAgIC8qIEluaXRpYWxpc2UgRFJCRyAqLwotKwotKyAgICBpZiAoIWRv X2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIC8q IERvbid0IHJlcG9ydCBpbmR1Y2VkIGVycm9ycyAqLwotKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJC R19GTEFHX05PRVJSOwotKwotKyAgICAvKiBQZXJzb25hbGlzYXRpb24gc3RyaW5nIHRlc3RzICov Ci0rCi0rICAgIC8qIFRlc3QgZGV0ZWN0aW9uIG9mIHRvbyBsYXJnZSBwZXJzb25saXNhdGlvbiBz dHJpbmcgKi8KLSsKLSsgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVy cywgZGN0eC0+bWF4X3BlcnMgKyAxKSA+IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX1BFUlNPTkFMSVNB VElPTl9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0r ICAgIC8qIEVudHJvcHkgc291cmNlIHRlc3RzICovCi0rCi0rICAgIC8qIFRlc3QgZW50cm9weSBz b3VyY2UgZmFpbHVyZSBkZXRlY2lvbjogaS5lLiByZXR1cm5zIG5vIGRhdGEgKi8KLSsKLSsgICAg dC5lbnRsZW4gPSAwOwotKwotKyAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRk LT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9S X1VOREVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogVHJ5 IHRvIGdlbmVyYXRlIG91dHB1dCBmcm9tIHVuaW5zdGFudGlhdGVkIERSQkcgKi8KLSsgICAgaWYg KEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpIHsKLSsgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAg RklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0r ICAgIH0KLSsKLSsgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rICAgIGlm ICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwot KyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBkY3R4LT5pZmxhZ3MgfD0g RFJCR19GTEFHX05PRVJSOwotKwotKyAgICAvKiBUZXN0IGluc3VmZmljaWVudCBlbnRyb3B5ICov Ci0rCi0rICAgIHQuZW50bGVuID0gZGN0eC0+bWluX2VudHJvcHkgLSAxOwotKwotKyAgICBpZiAo RklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7 Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAg ICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290 byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7 Ci0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVf RVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogVGVzdCB0b28g bXVjaCBlbnRyb3B5ICovCi0rCi0rICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkp Ci0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19O T0VSUjsKLSsKLSsgICAgdC5lbnRsZW4gPSBkY3R4LT5tYXhfZW50cm9weSArIDE7Ci0rCi0rICAg IGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+ IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsg ICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAg ICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19O T0VSUjsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAg ICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBOb25j ZSB0ZXN0cyAqLwotKwotKyAgICAvKiBUZXN0IHRvbyBzbWFsbCBub25jZSAqLwotKwotKyAgICBp ZiAoZGN0eC0+bWluX25vbmNlKSB7Ci0rCi0rICAgICAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4 LCB0ZCwgJnQpKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAgICAgZGN0eC0+aWZs YWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsgICAgICAgIHQubm9uY2VsZW4gPSBkY3R4LT5t aW5fbm9uY2UgLSAxOwotKwotKyAgICAgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4 LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9O T05DRV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAg IH0KLSsKLSsgICAgICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKyAgICAg ICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVf RVJST1IpOwotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotKwotKyAgICB9Ci0r Ci0rICAgIC8qIFRlc3QgdG9vIGxhcmdlIG5vbmNlICovCi0rCi0rICAgIGlmIChkY3R4LT5tYXhf bm9uY2UpIHsKLSsKLSsgICAgICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0r ICAgICAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgICAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19G TEFHX05PRVJSOwotKwotKyAgICAgICAgdC5ub25jZWxlbiA9IGRjdHgtPm1heF9ub25jZSArIDE7 Ci0rCi0rICAgICAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0 ZC0+cGVyc2xlbikgPiAwKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICAgICAgRklQU19SX05PTkNFX0VSUk9SX1VO REVURUNURUQpOwotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotKwotKyAgICAg ICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rICAgICAgICBpZiAoIUZJUFNf ZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAg ICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rCi0rICAgIH0KLSsKLSsgICAgLyogSW5z dGFudGlhdGUgd2l0aCB2YWxpZCBkYXRhLiAqLwotKyAgICBpZiAoIWRvX2RyYmdfaW5zdGFudGlh dGUoZGN0eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAvKiBDaGVjayBn ZW5lcmF0aW9uIGlzIG5vdyBPSyAqLwotKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4 LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rICAgIC8qIFJlcXVlc3QgdG9vIG11Y2gg ZGF0YSBmb3Igb25lIHJlcXVlc3QgKi8KLSsgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4 LCByYW5kb3V0LCBkY3R4LT5tYXhfcmVxdWVzdCArIDEsIDAsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkgewotKyAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1JfUkVRVUVT VF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQot KwotKyAgICAvKiBUcnkgdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsgICAgaWYgKEZJ UFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCBkY3R4LT5tYXhfYWRpbiArIDEpKSB7Ci0rICAg ICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAg ICAgIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3RhbmNl IHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKLSsgICAgICogZmFpbHVyZS4KLSsgICAg ICovCi0rCi0rICAgIHQuZW50bGVuID0gMDsKLSsKLSsgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0 ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAxLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJS T1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBkY3R4 LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsK LSsgICAgfQotKwotKyAgICAvKiBJbnN0YW50aWF0ZSBhZ2FpbiB3aXRoIHZhbGlkIGRhdGEgKi8K LSsKLSsgICAgaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0rICAgICAg ICBnb3RvIGVycjsKLSsgICAgLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLwotKyAgICAv KiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KLSsgICAgcmVzZWVkX2NvdW50ZXJfdG1w ID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7Ci0rICAgIC8qIFNldCByZXNlZWQgY291bnRlciB0byBi ZXlvbmQgaW50ZXJ2YWwgKi8KLSsgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNl ZWRfaW50ZXJ2YWw7Ci0rCi0rICAgIC8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9w eSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLwotKyAgICB0LmVudGNudCA9IDA7Ci0r ICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0r ICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKHQuZW50Y250ICE9IDEpIHsKLSsgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQ U19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKLSsgICAgICAgIGdvdG8gZXJy OwotKyAgICB9Ci0rICAgIC8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICov Ci0rICAgIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAx KSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9SRVNFRURfQ09VTlRFUl9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwot KyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsgICAgaWYgKCFGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICBn b3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2Ug cmVxdWVzdCBmYWlscyBpZiBlbnRyb3B5IHNvdXJjZQotKyAgICAgKiBmYWlsdXJlLgotKyAgICAg Ki8KLSsKLSsgICAgdC5lbnRsZW4gPSAwOwotKwotKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19G TEFHX05PRVJSOwotKyAgICBpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRk LT5rYXRsZW4sIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5h ZGlubGVuKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNL LAotKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsg ICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19G TEFHX05PRVJSOwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7 Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9V TklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAg IGlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKyAgICAgICAgZ290byBl cnI7Ci0rICAgIC8qIFRlc3QgcmVzZWVkIGNvdW50ZXIgd29ya3MgKi8KLSsgICAgLyogU2F2ZSBp bml0aWFsIHJlc2VlZCBjb3VudGVyICovCi0rICAgIHJlc2VlZF9jb3VudGVyX3RtcCA9IGRjdHgt PnJlc2VlZF9jb3VudGVyOwotKyAgICAvKiBTZXQgcmVzZWVkIGNvdW50ZXIgdG8gYmV5b25kIGlu dGVydmFsICovCi0rICAgIGRjdHgtPnJlc2VlZF9jb3VudGVyID0gZGN0eC0+cmVzZWVkX2ludGVy dmFsOwotKwotKyAgICAvKiBHZW5lcmF0ZSBvdXRwdXQgYW5kIGNoZWNrIGVudHJvcHkgaGFzIGJl ZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KLSsgICAgdC5lbnRjbnQgPSAwOwotKyAgICBpZiAo IUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIGlmICh0LmVudGNudCAhPSAxKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRS T1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAg fQotKyAgICAvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLwotKyAgICBp ZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkgewotKyAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVTRUVE X0NPVU5URVJfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgZGN0 eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rICAgIGlmICghRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7 Ci0rICAgIH0KLSsKLSsgICAgLyogRXhwbGljaXQgcmVzZWVkIHRlc3RzICovCi0rCi0rICAgIC8q IFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIGxhcmdlIGFkZGl0aW9uYWwgaW5wdXQgKi8K LSsgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8gZXJy OwotKwotKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKyAgICBpZiAo RklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgZGN0eC0+bWF4X2FkaW4gKyAxKSA+IDAp IHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAg ICAgICAgICAgICAgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7Ci0r ICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2Vl ZCB3aXRoIGVudHJvcHkgc291cmNlIGZhaWx1cmUgKi8KLSsKLSsgICAgdC5lbnRsZW4gPSAwOwot KwotKyAgICBpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4p ID4gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAot KyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAg IH0KLSsKLSsgICAgLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbXVjaCBlbnRyb3B5 ICovCi0rCi0rICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICBn b3RvIGVycjsKLSsKLSsgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsg ICAgdC5lbnRsZW4gPSBkY3R4LT5tYXhfZW50cm9weSArIDE7Ci0rCi0rICAgIGlmIChGSVBTX2Ry YmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKSB7Ci0rICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJ UFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAg IH0KLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAg ICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBUZXN0 IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsaXR0bGUgZW50cm9weSAqLwotKwotKyAgICBpZiAo IWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAg IGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rICAgIHQuZW50bGVuID0gZGN0 eC0+bWluX2VudHJvcHkgLSAxOwotKwotKyAgICBpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0 ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJP Ul9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGlmICgh RklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAg ICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopJmRj dHgtPmQ7Ci0rICAgIC8qIFN0YW5kYXJkIHNheXMgd2UgaGF2ZSB0byBjaGVjayB1bmluc3RhbnRp YXRlIHJlYWxseSB6ZXJvZXMKLSsgICAgICogdGhlIGRhdGEuLi4KLSsgICAgICovCi0rICAgIGZv ciAoaSA9IDA7IGkgPCBzaXplb2YoZGN0eC0+ZCk7IGkrKykgewotKyAgICAgICAgaWYgKCpwICE9 IDApIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss Ci0rICAgICAgICAgICAgICAgICAgICBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9S KTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsgICAgICAgIHArKzsKLSsg ICAgfQotKwotKyAgICByZXR1cm4gMTsKLSsKLSsgZXJyOgotKyAgICAvKiBBIHJlYWwgZXJyb3Ig YXMgb3Bwb3NlZCB0byBhbiBpbmR1Y2VkIG9uZTogdW5kZXJseWluZyBmdW5jdGlvbiB3aWxsCi0r ICAgICAqIGluZGljYXRlIHRoZSBlcnJvci4KLSsgICAgICovCi0rICAgIGlmICghKGRjdHgtPmlm bGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9GVU5DVElPTl9FUlJPUik7Ci0rICAgIEZJUFNfZHJiZ191 bmluc3RhbnRpYXRlKGRjdHgpOwotKyAgICByZXR1cm4gMDsKLSsKLSt9Ci0rCi0raW50IGZpcHNf ZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFncykKLSt7 Ci0rICAgIERSQkdfU0VMRlRFU1RfREFUQSAqdGQ7Ci0rICAgIGZsYWdzIHw9IERSQkdfRkxBR19U RVNUOwotKyAgICBmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspIHsKLSsg ICAgICAgIGlmICh0ZC0+bmlkID09IG5pZCAmJiB0ZC0+ZmxhZ3MgPT0gZmxhZ3MpIHsKLSsgICAg ICAgICAgICBpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkKLSsgICAgICAg ICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgcmV0dXJuIGZpcHNfZHJiZ19lcnJvcl9j aGVjayhkY3R4LCB0ZCk7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgcmV0dXJuIDA7Ci0rfQot KwotK2ludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAg aW50IHJ2OwotKyAgICBEUkJHX0NUWCAqdGN0eCA9IE5VTEw7Ci0rICAgIHRjdHggPSBGSVBTX2Ry YmdfbmV3KDAsIDApOwotKyAgICBmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgZGN0 eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rICAgIGlmICghdGN0eCkKLSsgICAgICAgIHJldHVy biAwOwotKyAgICBydiA9IGZpcHNfZHJiZ19rYXQodGN0eCwgZGN0eC0+dHlwZSwgZGN0eC0+eGZs YWdzKTsKLSsgICAgaWYgKHRjdHgpCi0rICAgICAgICBGSVBTX2RyYmdfZnJlZSh0Y3R4KTsKLSsg ICAgaWYgKHJ2KQotKyAgICAgICAgZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIGRj dHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOwotKyAgICBlbHNlCi0rICAgICAgICBmaXBzX3Bvc3Rf ZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKLSsgICAg aWYgKCFydikKLSsgICAgICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKyAg ICBlbHNlCi0rICAgICAgICBkY3R4LT5oZWFsdGhfY2hlY2tfY250ID0gMDsKLSsgICAgcmV0dXJu IHJ2OwotK30KLSsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpCi0rewotKyAgICBEUkJH X0NUWCAqZGN0eDsKLSsgICAgRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsgICAgaW50IHJ2ID0g MTsKLSsgICAgZGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0rICAgIGlmICghZGN0eCkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICBmb3IgKHRkID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7 IHRkKyspIHsKLSsgICAgICAgIGlmICh0ZC0+cG9zdCAhPSAxKQotKyAgICAgICAgICAgIGNvbnRp bnVlOwotKyAgICAgICAgaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQt Pm5pZCwgJnRkLT5mbGFncykpCi0rICAgICAgICAgICAgcmV0dXJuIDE7Ci0rICAgICAgICBpZiAo IWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRkLCAxKSkgewotKyAgICAgICAgICAgIGZpcHNf cG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOwotKyAgICAg ICAgICAgIHJ2ID0gMDsKLSsgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgIH0KLSsgICAg ICAgIGlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ ZmxhZ3MpKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIEZJUFNfZHJiZ19m cmVlKGRjdHgpOwotKyAgICByZXR1cm4gcnY7Ci0rfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Ry YmdfYWxsKHZvaWQpCi0rewotKyAgICBEUkJHX0NUWCAqZGN0eDsKLSsgICAgRFJCR19TRUxGVEVT VF9EQVRBICp0ZDsKLSsgICAgaW50IHJ2ID0gMTsKLSsgICAgZGN0eCA9IEZJUFNfZHJiZ19uZXco MCwgMCk7Ci0rICAgIGlmICghZGN0eCkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBmb3IgKHRk ID0gZHJiZ190ZXN0OyB0ZC0+bmlkICE9IDA7IHRkKyspIHsKLSsgICAgICAgIGlmICghZmlwc19w b3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQotKyAgICAg ICAgICAgIHJldHVybiAxOwotKyAgICAgICAgaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4 LCB0ZCwgMCkpIHsKLSsgICAgICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJH LCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsgICAgICAgICAgICBydiA9IDA7Ci0rICAgICAgICAg ICAgY29udGludWU7Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoIWZpcHNfZHJiZ19lcnJvcl9j aGVjayhkY3R4LCB0ZCkpIHsKLSsgICAgICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVT VF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsgICAgICAgICAgICBydiA9IDA7Ci0rICAg ICAgICAgICAgY29udGludWU7Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoIWZpcHNfcG9zdF9z dWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsgICAgICAgICAg ICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBGSVBTX2RyYmdfZnJlZShkY3R4KTsKLSsgICAgcmV0 dXJuIHJ2OwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19zZWxmdGVzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3Nl bGZ0ZXN0LmgKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRl c3QuaC5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY1NTYyNTk4ICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmgJMjAxNS0xMi0wNCAxMzo1 NTo1MS45NjU1NjI1OTggKzAxMDAKLUBAIC0wLDAgKzEsMTc5MSBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmUu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsg Ki8KLSsKLSsvKiBTZWxmdGVzdCBhbmQgaGVhbHRoIGNoZWNrIGRhdGEgZm9yIHRoZSBTUDgwMC05 MCBEUkJHICovCi0rCi0rI2RlZmluZSBfX2ZpcHNfY29uc3RzZWcKLSsKLSsvKiBBRVMtMTI4IHVz ZSBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4NjEsIDB4NTIsIDB4 N2MsIDB4ZTMsIDB4MjMsIDB4N2QsIDB4MGEsIDB4MDcsIDB4MTAsIDB4MGMsIDB4NTAsIDB4MzMs Ci0rICAgIDB4YzgsIDB4ZGIsIDB4ZmYsIDB4MTIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9ub25jZVtdID0gewot KyAgICAweDUxLCAweDBkLCAweDg1LCAweDc3LCAweGVkLCAweDIyLCAweDk3LCAweDI4Ci0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4NTksIDB4 OWYsIDB4YmIsIDB4Y2QsIDB4ZDUsIDB4MjUsIDB4NjksIDB4YjUsIDB4Y2IsIDB4YjUsIDB4MDMs IDB4ZmUsCi0rICAgIDB4ZDcsIDB4ZDcsIDB4MDEsIDB4NjcKLSt9OwotKwotK19fZmlwc19jb25z dHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHhlZiwgMHg4OCwgMHg3NiwgMHgwMSwgMHhhZiwg MHgzYywgMHhmZSwgMHg4YiwgMHhhZiwgMHgyNiwgMHgwNiwgMHg5ZSwKLSsgICAgMHg5YSwgMHg0 NywgMHgwOCwgMHg3NgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0r ICAgIDB4ZTIsIDB4NzYsIDB4ZjksIDB4ZjYsIDB4M2EsIDB4YmEsIDB4MTAsIDB4OWYsIDB4YmYs IDB4NDcsIDB4MGUsIDB4NTEsCi0rICAgIDB4MDksIDB4ZmIsIDB4YTMsIDB4YjYKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZDQsIDB4OTgsIDB4OGEs IDB4NDYsIDB4ODAsIDB4NGMsIDB4ZGIsIDB4YTMsIDB4NTksIDB4MDIsIDB4NTcsIDB4NTIsCi0r ICAgIDB4NjYsIDB4MWMsIDB4ZWEsIDB4NWIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9hZGRpdGlvbmFs aW5wdXQyW10gPSB7Ci0rICAgIDB4ODgsIDB4OGMsIDB4OTEsIDB4ZDYsIDB4YmUsIDB4NTYsIDB4 NmUsIDB4MDgsIDB4OWEsIDB4NjIsIDB4MmIsIDB4MTEsCi0rICAgIDB4M2YsIDB4NWUsIDB4MzEs IDB4MDYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHhj MCwgMHg1YywgMHg2YiwgMHg5OCwgMHgwMSwgMHgwZCwgMHg1OCwgMHgxOCwgMHg1MSwgMHgxOCwg MHg5NiwgMHhhZSwKLSsgICAgMHhhNywgMHhlMywgMHhhOCwgMHg2NwotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3Jl dHVybmVkYml0c1tdID0gewotKyAgICAweGNmLCAweDAxLCAweGFjLCAweDIyLCAweDMxLCAweDA2 LCAweDhlLCAweGZjLCAweGNlLCAweDU2LCAweGVhLCAweDI0LAotKyAgICAweDBmLCAweDM4LCAw eDQzLCAweGM2Ci0rfTsKLSsKLSsvKiBBRVMtMTI4IHVzZSBkZiBObyBQUiAgKi8KLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9w eWlucHV0W10gPSB7Ci0rICAgIDB4MWYsIDB4OGUsIDB4MzQsIDB4ODIsIDB4MGMsIDB4YjcsIDB4 YmUsIDB4YzUsIDB4MDEsIDB4M2UsIDB4ZDAsIDB4YTMsCi0rICAgIDB4OWQsIDB4N2QsIDB4MWMs IDB4OWIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X3VzZV9kZl9ub25jZVtdID0gewotKyAgICAweGQ1LCAweDRkLCAweGJkLCAweDRh LCAweDkzLCAweDdmLCAweGI4LCAweDk2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPSB7Ci0rICAgIDB4YWIsIDB4ZDYsIDB4M2YsIDB4MDQsIDB4ZmUsIDB4MjcsIDB4 NmIsIDB4MmQsIDB4ZDcsIDB4YzMsIDB4MWMsIDB4ZjMsCi0rICAgIDB4MzgsIDB4NjYsIDB4YmEs IDB4MWIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHhmZSwgMHhmNCwg MHgwOSwgMHhhOCwgMHhiNywgMHg3MywgMHgyNywgMHg5YywgMHg1ZiwgMHhhNywgMHhlYSwgMHg0 NiwKLSsgICAgMHhiNSwgMHhlMiwgMHhiMiwgMHg0MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2ludF9yZXR1cm5lZGJp dHNbXSA9IHsKLSsgICAgMHg0MiwgMHhlNCwgMHg0ZSwgMHg3YiwgMHgyNywgMHhkZCwgMHhjYiwg MHhiYywgMHgwYSwgMHhjZiwgMHhhNiwgMHg2NywKLSsgICAgMHhlNywgMHg1NywgMHgxMSwgMHhi NAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDE0LCAw eDI2LCAweDY5LCAweGQ5LCAweGYzLCAweDY1LCAweDAzLCAweGQ2LCAweDZiLCAweGI5LCAweDQ0 LCAweDBiLAotKyAgICAweGM3LCAweGM0LCAweDllLCAweDM5Ci0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRk aXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4NTUsIDB4MmUsIDB4NjAsIDB4OWEsIDB4 MDUsIDB4NzIsIDB4OGEsIDB4YTgsIDB4ZWYsIDB4MjIsIDB4ODEsIDB4NWEsCi0rICAgIDB4Yzgs IDB4OTMsIDB4ZmEsIDB4ODQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAg IDB4M2MsIDB4NDAsIDB4YzgsIDB4YzQsIDB4MTYsIDB4MGMsIDB4MjEsIDB4YTQsIDB4MzcsIDB4 MmMsIDB4OGYsIDB4YTUsCi0rICAgIDB4MDYsIDB4MGMsIDB4MTUsIDB4MmMKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9y ZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhlMSwgMHgzZSwgMHg5OSwgMHg5OCwgMHg4NiwgMHg2 NywgMHgwYiwgMHg2MywgMHg3YiwgMHhiZSwgMHgzZiwgMHg4OCwKLSsgICAgMHg0NiwgMHg4MSwg MHhjNywgMHgxOQotK307Ci0rCi0rLyogQUVTLTE5MiB1c2UgZGYgUFIgICovCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJv cHlpbnB1dFtdID0gewotKyAgICAweDJiLCAweDRlLCAweDhiLCAweGUxLCAweGYxLCAweDM0LCAw eDgwLCAweDU2LCAweDgxLCAweGY5LCAweDc0LCAweGVjLAotKyAgICAweDE3LCAweDQ0LCAweDJh LCAweGYxLCAweDE0LCAweGIwLCAweGJmLCAweDk3LCAweDM5LCAweGI3LCAweDA0LCAweDdkCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHhkNiwgMHg5ZCwgMHhlYiwgMHgxNCwgMHg0 ZSwgMHg2YywgMHgzMCwgMHgxZSwgMHgzOSwgMHg1NSwgMHg3MywgMHhkMCwKLSsgICAgMHhkMSwg MHg4MCwgMHg3OCwgMHhmYQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0gewotKyAgICAweGZjLCAweDQzLCAweDRhLCAweGY4LCAweDlhLCAweDU1LCAweGIzLCAw eDUzLCAweDgzLCAweGUyLCAweDE4LCAweDE2LAotKyAgICAweDBjLCAweGRjLCAweGNkLCAweDVl LCAweDRmLCAweGEwLCAweDAzLCAweDAxLCAweDJiLCAweDlmLCAweGU0LCAweGQ1LAotKyAgICAw eDdkLCAweDQ5LCAweGYwLCAweDQxLCAweDllLCAweDNkLCAweDk5LCAweDA0Ci0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91 c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4NWUsIDB4OWYsIDB4NDksIDB4 NmYsIDB4MjEsIDB4OGIsIDB4MWQsIDB4MzIsIDB4ZDUsIDB4ODQsIDB4NWMsIDB4YWMsCi0rICAg IDB4YWYsIDB4ZGYsIDB4ZTQsIDB4NzksIDB4OWUsIDB4YWYsIDB4YTksIDB4ODIsIDB4ZDAsIDB4 ZjgsIDB4NGYsIDB4Y2IsCi0rICAgIDB4NjksIDB4MTAsIDB4MGEsIDB4N2UsIDB4ODEsIDB4NTcs IDB4YjUsIDB4MzYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAg ICAweGQ0LCAweDgxLCAweDBjLCAweGQ3LCAweDY2LCAweDM5LCAweGVjLCAweDQyLCAweDUzLCAw eDg3LCAweDQxLCAweGE1LAotKyAgICAweDFlLCAweDdkLCAweDgwLCAweDkxLCAweDhlLCAweGJi LCAweGVkLCAweGFjLCAweDE0LCAweDAyLCAweDFhLCAweGQ1Ci0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJf aW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGRmLCAweDFkLCAweDM5LCAweDQ1LCAweDdj LCAweDliLCAweGM2LCAweDJiLCAweDdkLCAweDhjLCAweDkzLCAweGU5LAotKyAgICAweDE5LCAw eDMwLCAweDZiLCAweDY3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0g ewotKyAgICAweDAwLCAweDcxLCAweDI3LCAweDRlLCAweGQzLCAweDE0LCAweGYxLCAweDIwLCAw eDdmLCAweDRhLCAweDQxLCAweDMyLAotKyAgICAweDJhLCAweDk3LCAweDExLCAweDQzLCAweDhm LCAweDRhLCAweDE1LCAweDdiLCAweDliLCAweDUxLCAweDc5LCAweGRhLAotKyAgICAweDQ5LCAw eDNkLCAweGRlLCAweGU4LCAweGJjLCAweDkzLCAweDkxLCAweDk5Ci0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZf cHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4OTAsIDB4ZWUsIDB4NzYsIDB4YTEsIDB4 NDUsIDB4OGQsIDB4YjcsIDB4NDAsIDB4YjAsIDB4MTEsIDB4YmYsIDB4ZDAsCi0rICAgIDB4NjUs IDB4ZDcsIDB4M2MsIDB4N2MsIDB4NGYsIDB4MjAsIDB4M2YsIDB4NGUsIDB4MTEsIDB4OWQsIDB4 YjMsIDB4NWUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgyNCwgMHgz YiwgMHgyMCwgMHhhNCwgMHgzNywgMHg2NiwgMHhiYSwgMHg3MiwgMHgzOSwgMHgzZiwgMHhjZiwg MHgzYywKLSsgICAgMHg3ZSwgMHgxYSwgMHgyYiwgMHg4MwotK307Ci0rCi0rLyogQUVTLTE5MiB1 c2UgZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDhkLCAweDc0LCAw eGE0LCAweDUwLCAweDFhLCAweDAyLCAweDY4LCAweDBjLCAweDJhLCAweDY5LCAweGM0LCAweDgy LAotKyAgICAweDNiLCAweGJiLCAweGRhLCAweDBlLCAweDdmLCAweDc3LCAweGEzLCAweDE3LCAw eDc4LCAweDU3LCAweGIyLCAweDdiCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfbm9uY2VbXSA9IHsKLSsgICAgMHg3NSwg MHhkNSwgMHgxZiwgMHhhYywgMHhhNCwgMHg4ZCwgMHg0MiwgMHg3OCwgMHhkNywgMHg2OSwgMHg4 NiwgMHg5ZCwKLSsgICAgMHg3NywgMHhkNywgMHg0MSwgMHgwZQotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDRlLCAweDMzLCAweDQxLCAweDNjLCAw eDljLCAweGMyLCAweGQyLCAweDUzLCAweGFmLCAweDkwLCAweGVhLCAweGNmLAotKyAgICAweDE5 LCAweDUwLCAweDFlLCAweGU2LCAweDZmLCAweDYzLCAweGM4LCAweDMyLCAweDIyLCAweGRjLCAw eDA3LCAweDY1LAotKyAgICAweDljLCAweGQzLCAweGY4LCAweDMwLCAweDllLCAweGVkLCAweDM1 LCAweDcwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4NWQsIDB4OGIs IDB4OGMsIDB4YzEsIDB4ZGYsIDB4MGUsIDB4MDIsIDB4NzgsIDB4ZmIsIDB4MTksIDB4YjgsIDB4 NjksCi0rICAgIDB4NzgsIDB4NGUsIDB4OWMsIDB4NTIsIDB4YmMsIDB4YzcsIDB4MjAsIDB4Yzks IDB4ZTYsIDB4NWUsIDB4NzcsIDB4MjIsCi0rICAgIDB4MjgsIDB4M2QsIDB4MGMsIDB4OWUsIDB4 NjgsIDB4YTgsIDB4NDUsIDB4ZDcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0r ICAgIDB4ZDUsIDB4ZTcsIDB4MDgsIDB4YzUsIDB4MTksIDB4OTksIDB4ZDUsIDB4MzEsIDB4MDMs IDB4MGEsIDB4NzQsIDB4YjYsCi0rICAgIDB4YjcsIDB4ZWQsIDB4ZTksIDB4ZWEKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg5YywgMHgyNiwgMHhkYSwg MHhmMSwgMHhhYywgMHhkOSwgMHg1YSwgMHhkNiwgMHhhOCwgMHg2NSwgMHhmNSwgMHgwMiwKLSsg ICAgMHg4ZiwgMHhkYywgMHhhMiwgMHgwOSwgMHg1NCwgMHhhNiwgMHhlMiwgMHhhNCwgMHhkZSwg MHgzMiwgMHhlMCwgMHgwMQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtd ID0gewotKyAgICAweDliLCAweDkwLCAweGIwLCAweDNhLCAweDBlLCAweDNhLCAweDgwLCAweDA3 LCAweDRhLCAweGY0LCAweGRhLCAweDc2LAotKyAgICAweDI4LCAweDMwLCAweDNjLCAweGVlLCAw eDU0LCAweDFiLCAweDk0LCAweDU5LCAweDUxLCAweDQzLCAweDU2LCAweDc3LAotKyAgICAweGFm LCAweDg4LCAweGRkLCAweDYzLCAweDg5LCAweDQ3LCAweDA2LCAweDY1Ci0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRk aXRpb25hbGlucHV0MltdID0gewotKyAgICAweDNjLCAweDExLCAweDY0LCAweDdhLCAweDk2LCAw eGY1LCAweGQ4LCAweGI4LCAweGFlLCAweGQ2LCAweDcwLCAweDRlLAotKyAgICAweDE2LCAweDk2 LCAweGRlLCAweGU5LCAweDYyLCAweGJjLCAweGVlLCAweDI4LCAweDJmLCAweDI2LCAweGE2LCAw eGYwLAotKyAgICAweDU2LCAweGVmLCAweGEzLCAweGYxLCAweDZiLCAweGExLCAweGIxLCAweDc3 Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MGIsIDB4ZTIsIDB4NTYsIDB4 MDMsIDB4MWUsIDB4ZGIsIDB4MmMsIDB4NmQsIDB4N2YsIDB4MWIsIDB4MTUsIDB4NTgsCi0rICAg IDB4MWEsIDB4ZjksIDB4MTMsIDB4MjgKLSt9OwotKwotKy8qIEFFUy0yNTYgdXNlIGRmIFBSICAq LwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHg2MSwgMHg2OCwgMHhmYywgMHgxYSwg MHhmMCwgMHhiNSwgMHg5NSwgMHg2YiwgMHg4NSwgMHgwOSwgMHg5YiwgMHg3NCwKLSsgICAgMHgz ZiwgMHgxMywgMHg3OCwgMHg0OSwgMHgzYiwgMHg4NSwgMHhlYywgMHg5MywgMHgxMywgMHgzYiwg MHhhOSwgMHg0ZiwKLSsgICAgMHg5NiwgMHhhYiwgMHgyYywgMHhlNCwgMHhjOCwgMHg4ZiwgMHhk ZCwgMHg2YQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfdXNlX2RmX3ByX25vbmNlW10gPSB7Ci0rICAgIDB4YWQsIDB4ZDIsIDB4YmIs IDB4YmEsIDB4YjcsIDB4NjUsIDB4ODksIDB4YzMsIDB4MjEsIDB4NmMsIDB4NTUsIDB4MzMsCi0r ICAgIDB4MmIsIDB4MzYsIDB4ZmYsIDB4YTQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg2ZSwgMHhjYSwgMHhlNywgMHgyMCwgMHg3MiwgMHhk MywgMHg4NCwgMHg1YSwgMHgzMiwgMHhkMywgMHg0YiwgMHgyNCwKLSsgICAgMHg3MiwgMHhjNCwg MHg2MywgMHgyYiwgMHg5ZCwgMHgxMiwgMHgyNCwgMHgwYywgMHgyMywgMHgyNiwgMHg4ZSwgMHg4 MywKLSsgICAgMHgxNiwgMHgzNywgMHgwYiwgMHhkMSwgMHgwNiwgMHg0ZiwgMHg2OCwgMHg2ZAot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDdlLCAweDA4 LCAweDRhLCAweGJiLCAweGUzLCAweDIxLCAweDdjLCAweGM5LCAweDIzLCAweGQyLCAweGY4LCAw eGIwLAotKyAgICAweDczLCAweDk4LCAweGJhLCAweDg0LCAweDc0LCAweDIzLCAweGFiLCAweDA2 LCAweDhhLCAweGUyLCAweDIyLCAweGQzLAotKyAgICAweDdiLCAweGNlLCAweDliLCAweGQyLCAw eDRhLCAweDc2LCAweGI4LCAweGRlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHJb XSA9IHsKLSsgICAgMHgwYiwgMHgyMywgMHhhZiwgMHhkZiwgMHhmMSwgMHg2MiwgMHhkNywgMHhk MywgMHg0MywgMHg5NywgMHhmOCwgMHg3NywKLSsgICAgMHgwNCwgMHhhOCwgMHg0MiwgMHgyMCwg MHhiZCwgMHhmNiwgMHgwZiwgMHhjMSwgMHgxNywgMHgyZiwgMHg5ZiwgMHg1NCwKLSsgICAgMHhi YiwgMHg1NiwgMHgxNywgMHg4NiwgMHg2OCwgMHgwZSwgMHhiYSwgMHhhOQotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgzMSwgMHg4ZSwgMHhhZCwgMHhh ZiwgMHg0MCwgMHhlYiwgMHg2YiwgMHg3NCwgMHgzMSwgMHg0NiwgMHg4MCwgMHhjNywKLSsgICAg MHgxNywgMHhhYiwgMHgzYywgMHg3YQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9IHsKLSsgICAgMHg5NCwgMHg2YiwgMHhjOSwgMHg5ZiwgMHhhYiwgMHg4ZCwgMHhjNSwg MHhlYywgMHg3MSwgMHg4OCwgMHgxZCwgMHgwMCwKLSsgICAgMHg4YywgMHg4OSwgMHg2OCwgMHhl NCwgMHhjOCwgMHgwNywgMHg3NywgMHgzNiwgMHgxNywgMHg2ZCwgMHg3OSwgMHg3OCwKLSsgICAg MHhjNywgMHgwNiwgMHg0ZSwgMHg5OSwgMHgwNCwgMHgyOCwgMHgyOSwgMHhjMwotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf dXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweGJmLCAweDZjLCAweDU5LCAw eDJhLCAweDBkLCAweDQ0LCAweDBmLCAweGFlLCAweDlhLCAweDVlLCAweDAzLCAweDczLAotKyAg ICAweGQ4LCAweGE2LCAweGUxLCAweGNmLCAweDI1LCAweDYxLCAweDM4LCAweDI0LCAweDg2LCAw eDllLCAweDUzLCAweGU4LAotKyAgICAweGE0LCAweGRmLCAweDU2LCAweGY0LCAweDA2LCAweDA3 LCAweDljLCAweDBmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MjIs IDB4NGEsIDB4YjQsIDB4YjgsIDB4YjYsIDB4ZWUsIDB4N2QsIDB4YjEsIDB4OWUsIDB4YzksIDB4 ZjksIDB4YTAsCi0rICAgIDB4ZDksIDB4ZTIsIDB4OTcsIDB4MDAKLSt9OwotKwotKy8qIEFFUy0y NTYgdXNlIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHhhNSwgMHgz ZSwgMHgzNywgMHgxMCwgMHgxNywgMHg0MywgMHg5MSwgMHg5MywgMHg1OSwgMHgxZSwgMHg0Nywg MHg1MCwKLSsgICAgMHg4NywgMHhhYSwgMHhkZCwgMHhkNSwgMHhjMSwgMHhjMywgMHg4NiwgMHhj ZCwgMHhjYSwgMHgwZCwgMHhkYiwgMHg2OCwKLSsgICAgMHhlMCwgMHgwMiwgMHhkOCwgMHgwZiwg MHhkYywgMHg0MCwgMHgxYSwgMHg0NwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX25vbmNlW10gPSB7Ci0rICAgIDB4YTks IDB4NGQsIDB4YTUsIDB4NWEsIDB4ZmQsIDB4YzUsIDB4MGMsIDB4ZTUsIDB4MWMsIDB4OWEsIDB4 M2IsIDB4OGEsCi0rICAgIDB4NGMsIDB4NDQsIDB4ODQsIDB4NDAKLSt9OwotKwotK19fZmlwc19j b25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg4YiwgMHg1MiwgMHhhMiwgMHg0YSwg MHg5MywgMHhjMywgMHg0ZSwgMHhhNywgMHgxZSwgMHgxYywgMHhhNywgMHgwNSwKLSsgICAgMHhl YiwgMHg4MiwgMHg5YiwgMHhhNiwgMHg1ZCwgMHhlNCwgMHhkNCwgMHhlMCwgMHg3ZiwgMHhhMywg MHhkOCwgMHg2YiwKLSsgICAgMHgzNywgMHg4NCwgMHg1ZiwgMHhmMSwgMHhjNywgMHhkNSwgMHhm NiwgMHhkMgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDIwLCAweGY0 LCAweDIyLCAweGVkLCAweGY4LCAweDVjLCAweGExLCAweDZhLCAweDAxLCAweGNmLCAweGJlLCAw eDVmLAotKyAgICAweDhkLCAweDZjLCAweDk0LCAweDdmLCAweGFlLCAweDEyLCAweGE4LCAweDU3 LCAweGRiLCAweDJhLCAweGE5LCAweGJmLAotKyAgICAweGM3LCAweGIzLCAweDY1LCAweDgxLCAw eDgwLCAweDhkLCAweDBkLCAweDQ2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0gewot KyAgICAweDRlLCAweDQ0LCAweGZkLCAweGYzLCAweDllLCAweDI5LCAweGEyLCAweGI4LCAweDBm LCAweDVkLCAweDZjLCAweGUxLAotKyAgICAweDI4LCAweDBjLCAweDNiLCAweGMxCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4ZGQsIDB4NDAsIDB4ZTUs IDB4OTgsIDB4N2IsIDB4MjcsIDB4MTYsIDB4NzMsIDB4MTUsIDB4NjgsIDB4ZDIsIDB4NzYsCi0r ICAgIDB4YmYsIDB4MGMsIDB4NjcsIDB4MTUsIDB4NzUsIDB4NzksIDB4MDMsIDB4ZDMsIDB4ZGUs IDB4ZGUsIDB4OTEsIDB4NDYsCi0rICAgIDB4NDIsIDB4ZGQsIDB4ZDQsIDB4NjcsIDB4YzgsIDB4 NzksIDB4YzgsIDB4MWUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9 IHsKLSsgICAgMHg3ZiwgMHhkOCwgMHgxZiwgMHhiZCwgMHgyYSwgMHhiNSwgMHgxYywgMHgxMSwg MHg1ZCwgMHg4MywgMHg0ZSwgMHg5OSwKLSsgICAgMHhmNiwgMHg1YywgMHhhNSwgMHg0MCwgMHgy MCwgMHhlZCwgMHgzOCwgMHg4ZSwgMHhkNSwgMHg5ZSwgMHhlMCwgMHg3NSwKLSsgICAgMHg5Mywg MHhmZSwgMHgxMiwgMHg1ZSwgMHg1ZCwgMHg3MywgMHhmYiwgMHg3NQotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0 aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHhjZCwgMHgyYywgMHhmZiwgMHgxNCwgMHg2OSwgMHgz ZSwgMHg0YywgMHg5ZSwgMHhmZCwgMHhmZSwgMHgyNiwgMHgwZCwKLSsgICAgMHhlOSwgMHg4Niwg MHgwMCwgMHg0OSwgMHgzMCwgMHhiYSwgMHhiMSwgMHhjNiwgMHg1MCwgMHg1NywgMHg3NywgMHgy YSwKLSsgICAgMHg2MiwgMHgzOSwgMHgyYywgMHgzYiwgMHg3NCwgMHhlYiwgMHhjOSwgMHgwZAot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfdXNlX2RmX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDRmLCAweDc4LCAweGJlLCAweGI5 LCAweDRkLCAweDk3LCAweDhjLCAweGU5LCAweGQwLCAweDk3LCAweGZlLCAweGFkLAotKyAgICAw eGZhLCAweGZkLCAweDM1LCAweDVlCi0rfTsKLSsKLSsvKiBBRVMtMTI4IG5vIGRmIFBSICAqLwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDlhLCAweDI1LCAweDY1LCAweDEwLCAweDY3 LCAweGQ1LCAweGI2LCAweDZiLCAweDcwLCAweGExLCAweGIzLCAweGE0LAotKyAgICAweDQzLCAw eDk1LCAweDgwLCAweGMwLCAweDg0LCAweDBhLCAweDc5LCAweGIwLCAweDg4LCAweDc0LCAweGYy LCAweGJmLAotKyAgICAweDMxLCAweDZjLCAweDMzLCAweDM4LCAweDBiLCAweDAwLCAweGIyLCAw eDVhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF9ub19kZl9wcl9ub25jZVtdID0gewotKyAgICAweDc4LCAweDQ3LCAweDZiLCAweGY3 LCAweDkwLCAweDhlLCAweDg3LCAweGYxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9IHsKLSsgICAgMHhmNywgMHgyMiwgMHgxZCwgMHgzYSwgMHhiZSwgMHgxZCwg MHhjYSwgMHgzMiwgMHgxYiwgMHhiZCwgMHg4NywgMHgwYywKLSsgICAgMHg1MSwgMHgyNCwgMHgx OSwgMHhlZSwgMHhhMywgMHgyMywgMHgwOSwgMHg2MywgMHgzMywgMHgzZCwgMHhhOCwgMHgwYywK LSsgICAgMHgxYywgMHhmYSwgMHg0MiwgMHg4OSwgMHhjYywgMHg2ZiwgMHhhMCwgMHhhOAotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4YzksIDB4ZTAsIDB4 ODAsIDB4YmYsIDB4OGMsIDB4NDUsIDB4NTgsIDB4MzksIDB4ZmYsIDB4MDAsIDB4YWIsIDB4MDIs Ci0rICAgIDB4NGMsIDB4M2UsIDB4M2EsIDB4OTUsIDB4OWIsIDB4ODAsIDB4YTgsIDB4MjEsIDB4 MmEsIDB4ZWUsIDB4YmEsIDB4NzMsCi0rICAgIDB4YjEsIDB4ZDksIDB4Y2YsIDB4MjgsIDB4ZjYs IDB4OGYsIDB4OWIsIDB4MTIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAg IDB4NGMsIDB4YTgsIDB4YzUsIDB4ZjAsIDB4NTksIDB4OWUsIDB4YTYsIDB4OGQsIDB4MjYsIDB4 NTMsIDB4ZDcsIDB4OGEsCi0rICAgIDB4YTksIDB4ZDgsIDB4ZjcsIDB4ZWQsIDB4YjIsIDB4Zjks IDB4MTIsIDB4NDIsIDB4ZTEsIDB4ZTUsIDB4YmQsIDB4ZTcsCi0rICAgIDB4ZTcsIDB4MWQsIDB4 NzQsIDB4OTksIDB4MDAsIDB4OWQsIDB4MzEsIDB4M2UKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhlMiwgMHhhYywgMHgyMCwgMHhmMCwgMHg4MCwgMHhl NywgMHhiYywgMHg3ZSwgMHg5YywgMHg3YiwgMHg2NSwgMHg3MSwKLSsgICAgMHhhZiwgMHgxOSwg MHgzMiwgMHgxNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAg ICAweDMyLCAweDdmLCAweDM4LCAweDhiLCAweDczLCAweDBhLCAweDc4LCAweDgzLCAweGRjLCAw eDMwLCAweGJlLCAweDlmLAotKyAgICAweDEwLCAweDFmLCAweGY1LCAweDFmLCAweGNhLCAweDAw LCAweGI1LCAweDBkLCAweGQ2LCAweDlkLCAweDYwLCAweDgzLAotKyAgICAweDUxLCAweDU0LCAw eDdkLCAweDM4LCAweDIzLCAweDNhLCAweDUyLCAweDUwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHgxOCwgMHg2MSwgMHg1MywgMHg1NiwgMHhlZCwgMHhl ZCwgMHhkNywgMHgyMCwgMHhmYiwgMHg3MSwgMHgwNCwgMHg3YSwKLSsgICAgMHhiMiwgMHhhYywg MHhjMSwgMHgyOCwgMHhjZCwgMHhmMiwgMHhjMiwgMHhmYywgMHhhYSwgMHhiMSwgMHgwNiwgMHgw NywKLSsgICAgMHhlOSwgMHg0NiwgMHg5NSwgMHgwMiwgMHg0OCwgMHgwMSwgMHg3OCwgMHhmOQot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x Mjhfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MjksIDB4YzgsIDB4MWIsIDB4 MTUsIDB4YjEsIDB4ZDEsIDB4YzIsIDB4ZjYsIDB4NzEsIDB4ODYsIDB4NjgsIDB4MzMsCi0rICAg IDB4NTcsIDB4ODIsIDB4MzMsIDB4YWYKLSt9OwotKwotKy8qIEFFUy0xMjggbm8gZGYgTm8gUFIg ICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf bm9fZGZfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YzksIDB4YzUsIDB4NzksIDB4YmMsIDB4 ZTgsIDB4YzUsIDB4MTksIDB4ZDgsIDB4YmMsIDB4NjYsIDB4NzMsIDB4NjcsCi0rICAgIDB4ZjYs IDB4ZDMsIDB4NzIsIDB4YWEsIDB4YTYsIDB4MTYsIDB4YjgsIDB4NTAsIDB4YjcsIDB4NDcsIDB4 M2EsIDB4NDIsCi0rICAgIDB4YWIsIDB4ZjQsIDB4MTYsIDB4YjIsIDB4OTYsIDB4ZDIsIDB4YjYs IDB4NjAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X25vX2RmX25vbmNlW10gPSB7Ci0rICAgIDB4NWYsIDB4YmYsIDB4OTcsIDB4MGMs IDB4NGIsIDB4YTQsIDB4ODcsIDB4MTMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0gewotKyAgICAweGNlLCAweGZiLCAweDdiLCAweDNmLCAweGQ0LCAweDZiLCAweDI5 LCAweDBkLCAweDY5LCAweDA2LCAweGZmLCAweGJiLAotKyAgICAweGYyLCAweGU1LCAweGM2LCAw eDZjLCAweDBhLCAweDEwLCAweGEwLCAweGNmLCAweDFhLCAweDQ4LCAweGM3LCAweDhiLAotKyAg ICAweDNjLCAweDE2LCAweDg4LCAweGVkLCAweDUwLCAweDEzLCAweDgxLCAweGNlCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19k Zl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg0YiwgMHgyMiwgMHg0NiwgMHgxOCwgMHgw MiwgMHg3YiwgMHhkMiwgMHgxYiwgMHgyMiwgMHg0MiwgMHg3YywgMHgzNywKLSsgICAgMHhkOSwg MHhmNiwgMHhlOCwgMHg5YiwgMHgxMiwgMHgzMCwgMHg1ZiwgMHhlOSwgMHg5MCwgMHhlOCwgMHgw OCwgMHgyNCwKLSsgICAgMHg0ZiwgMHgwNiwgMHg2NiwgMHhkYiwgMHgxOSwgMHgyYiwgMHgxMywg MHg5NQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDJlLCAweDk2LCAw eDcwLCAweDY0LCAweGZhLCAweGRmLCAweGRmLCAweDU3LCAweGI1LCAweDgyLCAweGVlLCAweGQ2 LAotKyAgICAweGVkLCAweDNlLCAweDY1LCAweGMyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5w dXRyZXNlZWRbXSA9IHsKLSsgICAgMHgyNiwgMHhjMCwgMHg3MiwgMHgxNiwgMHgzYSwgMHg0Yiwg MHhiNywgMHg5OSwgMHhkNCwgMHgwNywgMHhhZiwgMHg2NiwKLSsgICAgMHg2MiwgMHgzNiwgMHg5 NiwgMHhhNCwgMHg1MSwgMHgxNywgMHhmYSwgMHgwNywgMHg4YiwgMHgxNywgMHg1ZSwgMHhhMSwK LSsgICAgMHgyZiwgMHgzYywgMHgxMCwgMHhlNywgMHg5MCwgMHhkMCwgMHg0NiwgMHgwMAotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4ODMsIDB4Mzks IDB4MzcsIDB4N2IsIDB4MDIsIDB4MDYsIDB4ZDIsIDB4MTIsIDB4MTMsIDB4OGQsIDB4OGIsIDB4 ZjIsCi0rICAgIDB4ZjAsIDB4ZjYsIDB4MjYsIDB4ZWIsIDB4YTQsIDB4MjIsIDB4N2IsIDB4YzIs IDB4ZTcsIDB4YmEsIDB4NzksIDB4ZTQsCi0rICAgIDB4M2IsIDB4NzcsIDB4NWQsIDB4NGQsIDB4 NDcsIDB4YjIsIDB4MmQsIDB4YjQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsg ICAgMHgwYiwgMHhiOSwgMHg2NywgMHgzNywgMHhkYiwgMHg4MywgMHhkZiwgMHhjYSwgMHg4MSwg MHg4YiwgMHhmOSwgMHgzZiwKLSsgICAgMHhmMSwgMHgxMSwgMHgxYiwgMHgyZiwgMHhmMCwgMHg2 MSwgMHhhNiwgMHhkZiwgMHhiYSwgMHhhMywgMHhiMSwgMHhhYywKLSsgICAgMHhkMywgMHhlNiwg MHgwOSwgMHhiOCwgMHgyYywgMHg2YSwgMHg2NywgMHhkNgotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcmV0dXJuZWRiaXRz W10gPSB7Ci0rICAgIDB4MWUsIDB4YTcsIDB4YTQsIDB4ZTQsIDB4ZTEsIDB4YTYsIDB4N2MsIDB4 NjksIDB4OWEsIDB4NDQsIDB4NmMsIDB4MzYsCi0rICAgIDB4ODEsIDB4MzcsIDB4MTksIDB4ZDQK LSt9OwotKwotKy8qIEFFUy0xOTIgbm8gZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPSB7 Ci0rICAgIDB4OWQsIDB4MmMsIDB4ZDIsIDB4NTUsIDB4NjYsIDB4ZWEsIDB4ZTAsIDB4YmUsIDB4 MTgsIDB4YjcsIDB4NzYsIDB4ZTcsCi0rICAgIDB4NzMsIDB4MzUsIDB4ZDgsIDB4MWYsIDB4YWQs IDB4M2EsIDB4ZTMsIDB4ODEsIDB4MGUsIDB4OTIsIDB4ZDAsIDB4NjEsCi0rICAgIDB4YzksIDB4 MTIsIDB4MjYsIDB4ZjYsIDB4MWMsIDB4ZGYsIDB4ZmUsIDB4NDcsIDB4YWEsIDB4ZmUsIDB4N2Qs IDB4NWEsCi0rICAgIDB4MTcsIDB4MWYsIDB4OGQsIDB4OWEKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX25vbmNlW10g PSB7Ci0rICAgIDB4NDQsIDB4ODIsIDB4ZWQsIDB4ZTgsIDB4NGMsIDB4MjgsIDB4NWEsIDB4MTQs IDB4ZmYsIDB4ODgsIDB4OGQsIDB4MTksCi0rICAgIDB4NjEsIDB4NWMsIDB4ZWUsIDB4MGYKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDQ3LCAw eGQ3LCAweDliLCAweDk5LCAweGFhLCAweGNiLCAweGU3LCAweGQyLCAweDU3LCAweDY2LCAweDJj LCAweGUxLAotKyAgICAweDc4LCAweGQ2LCAweDJjLCAweGVhLCAweGEzLCAweDIzLCAweDVmLCAw eDJhLCAweGMxLCAweDNhLCAweGYwLCAweGE0LAotKyAgICAweDIwLCAweDNiLCAweGZhLCAweDA3 LCAweGQ1LCAweDA1LCAweDAyLCAweGU0LCAweDU3LCAweDAxLCAweGI2LCAweDEwLAotKyAgICAw eDU3LCAweDJlLCAweGU3LCAweDU1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRb XSA9IHsKLSsgICAgMHg0YiwgMHg3NCwgMHgwYiwgMHg0MCwgMHhjZSwgMHg2YiwgMHhjMiwgMHg2 YSwgMHgyNCwgMHhiNCwgMHhmMywgMHhhZCwKLSsgICAgMHg3YSwgMHhhNSwgMHg3YSwgMHhhMiwg MHgxNSwgMHhlMiwgMHhjOCwgMHg2MSwgMHgxNSwgMHhjNiwgMHhiNywgMHg4NSwKLSsgICAgMHg2 OSwgMHgxMSwgMHhhZCwgMHg3YiwgMHgxNCwgMHhkMiwgMHhmNiwgMHgxMiwgMHhhMSwgMHg5NSwg MHg1ZCwgMHgzZiwKLSsgICAgMHhlMiwgMHhkMCwgMHgwYywgMHgyZgotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50 cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHgwYywgMHg5YywgMHhhZCwgMHgwNSwgMHhlZSwgMHhh ZSwgMHg0OCwgMHgyMywgMHg4OSwgMHg1OSwgMHhhMSwgMHg5NCwKLSsgICAgMHhkNywgMHhkOCwg MHg3NSwgMHhkNSwgMHg1NCwgMHg5MywgMHhjNywgMHg0YSwgMHhkOSwgMHgyNiwgMHhkZSwgMHhl YiwKLSsgICAgMHhiYSwgMHhiMCwgMHg3ZSwgMHgzMCwgMHgxZCwgMHg1ZiwgMHg2OSwgMHg0MCwg MHg5YywgMHgzYiwgMHgxNywgMHg1OCwKLSsgICAgMHgxZCwgMHgzMCwgMHhiMywgMHg3OAotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGY3LCAweDkzLCAw eGIwLCAweDZkLCAweDc3LCAweDgzLCAweGQ1LCAweDM4LCAweDAxLCAweGUxLCAweDUyLCAweDQw LAotKyAgICAweDdlLCAweDNlLCAweDBjLCAweDI2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9hZGRpdGlv bmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4YmMsIDB4NGIsIDB4MzcsIDB4NDQsIDB4MWMsIDB4YzUs IDB4NDUsIDB4NWYsIDB4OGYsIDB4NTEsIDB4NjIsIDB4OGEsCi0rICAgIDB4ODUsIDB4MzAsIDB4 MWQsIDB4N2MsIDB4ZTQsIDB4Y2YsIDB4ZjcsIDB4NDQsIDB4Y2UsIDB4MzIsIDB4M2UsIDB4NTcs Ci0rICAgIDB4OTUsIDB4YTQsIDB4MmEsIDB4ZGYsIDB4ZmQsIDB4OWUsIDB4MzgsIDB4NDEsIDB4 YjMsIDB4ZjYsIDB4YzUsIDB4ZWUsCi0rICAgIDB4MGMsIDB4NGIsIDB4ZWUsIDB4NmUKLSt9Owot KwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweGVjLCAweGFmLCAweGY2 LCAweDRmLCAweGIxLCAweGEwLCAweDU0LCAweGI1LCAweDViLCAweGUzLCAweDQ2LCAweGIwLAot KyAgICAweDc2LCAweDVhLCAweDdjLCAweDNmLCAweDdiLCAweDk0LCAweDY5LCAweDIxLCAweDUx LCAweDAyLCAweGU1LCAweDlmLAotKyAgICAweDA0LCAweDU5LCAweDAyLCAweDk4LCAweGM2LCAw eDQzLCAweDJjLCAweGNjLCAweDI2LCAweDRjLCAweDg3LCAweDZiLAotKyAgICAweDhlLCAweDBh LCAweDgzLCAweGRmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg3NCwg MHg0NSwgMHhmYiwgMHg1MywgMHg4NCwgMHg5NiwgMHhiZSwgMHhmZiwgMHgxNSwgMHhjYywgMHg0 MSwgMHg5MSwKLSsgICAgMHhiOSwgMHhhMSwgMHgyMSwgMHg2OAotK307Ci0rCi0rLyogQUVTLTE5 MiBubyBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHgzYywgMHg3ZCwg MHhiNSwgMHhlMCwgMHg1NCwgMHhkOSwgMHg2ZSwgMHg4YywgMHhhOSwgMHg4NiwgMHhjZSwgMHg0 ZSwKLSsgICAgMHg2YiwgMHhhZiwgMHhlYiwgMHgyZiwgMHhlNywgMHg3NSwgMHhlMCwgMHg4Yiwg MHhhNCwgMHgzYiwgMHgwNywgMHhmZSwKLSsgICAgMHhiZSwgMHgzMywgMHg3NSwgMHg5MywgMHg4 MCwgMHgyNywgMHhiNSwgMHgyOSwgMHg0NywgMHg4YiwgMHhjNywgMHgyOCwKLSsgICAgMHg5NCwg MHhjMywgMHg1OSwgMHg2MwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfbm9uY2VbXSA9IHsKLSsgICAgMHg0MywgMHhmMSwg MHg3ZCwgMHhiOCwgMHhjMywgMHhmZSwgMHhkMCwgMHgyMywgMHg2YiwgMHhiNCwgMHg5MiwgMHhk YiwKLSsgICAgMHgyOSwgMHhmZCwgMHg0NSwgMHg3MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4OWYsIDB4MjQsIDB4MjksIDB4OTksIDB4OWUsIDB4 MDEsIDB4YWIsIDB4ZTksIDB4MTksIDB4ZDgsIDB4MjMsIDB4MDgsCi0rICAgIDB4YjcsIDB4ZDYs IDB4N2UsIDB4OGMsIDB4YzAsIDB4OWUsIDB4N2YsIDB4NmUsIDB4NWIsIDB4MzMsIDB4MjAsIDB4 OTYsCi0rICAgIDB4MGIsIDB4MjMsIDB4MmMsIDB4YTUsIDB4NmEsIDB4ZjgsIDB4MWIsIDB4MDQs IDB4MjYsIDB4ZGIsIDB4MmUsIDB4MmIsCi0rICAgIDB4M2IsIDB4ODgsIDB4Y2UsIDB4MzUKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDk0LCAweGU5LCAweDdjLCAweDNk LCAweGE3LCAweGRiLCAweDYwLCAweDgzLCAweDFmLCAweDk4LCAweDNmLCAweDBiLAotKyAgICAw eDg4LCAweDU5LCAweDU3LCAweDUxLCAweDg4LCAweDlmLCAweDc2LCAweDQ5LCAweDlmLCAweGE2 LCAweGRhLCAweDcxLAotKyAgICAweDFkLCAweDBkLCAweDQ3LCAweDE2LCAweDYzLCAweGM1LCAw eDY4LCAweGU0LCAweDVkLCAweDM5LCAweDY5LCAweGIzLAotKyAgICAweDNlLCAweGJlLCAweGQ0 LCAweDhlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzE5Ml9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZjksIDB4ZDcs IDB4YWQsIDB4NjksIDB4YWIsIDB4OGYsIDB4MjMsIDB4NTYsIDB4NzAsIDB4MTcsIDB4NGYsIDB4 MmEsCi0rICAgIDB4NDUsIDB4ZTcsIDB4NGEsIDB4YzUKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlp bnB1dHJlc2VlZFtdID0gewotKyAgICAweGE2LCAweDcxLCAweDZhLCAweDNkLCAweGJhLCAweGQx LCAweGU4LCAweDY2LCAweGE2LCAweGVmLCAweGIyLCAweDBlLAotKyAgICAweGE4LCAweDljLCAw eGFhLCAweDRlLCAweGFmLCAweDE3LCAweDg5LCAweDUwLCAweDAwLCAweGRhLCAweGExLCAweGIx LAotKyAgICAweDBiLCAweGE0LCAweGQ5LCAweDM1LCAweDg5LCAweGM4LCAweGU1LCAweGIwLCAw eGQ5LCAweGI3LCAweGM0LCAweDMzLAotKyAgICAweDliLCAweGNiLCAweDdlLCAweDc1Ci0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHgyNywgMHgyMSwg MHhmYywgMHhjMiwgMHhiZCwgMHhmMywgMHgzYywgMHhjZSwgMHhjMywgMHhjYSwgMHhjMSwgMHgw MSwKLSsgICAgMHhlMCwgMHhmZiwgMHg5MywgMHgxMiwgMHg3ZCwgMHg1NCwgMHg0MiwgMHhlMywg MHg5ZiwgMHgwMywgMHhkZiwgMHgyNywKLSsgICAgMHgwNCwgMHgwNywgMHgzYywgMHg1MywgMHg3 ZiwgMHhhOCwgMHg2NiwgMHhjOCwgMHg5NywgMHg0YiwgMHg2MSwgMHg0MCwKLSsgICAgMHg1ZCwg MHg3YSwgMHgyNSwgMHg3OQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAw eDJkLCAweDhlLCAweDE2LCAweDVkLCAweDBiLCAweDlmLCAweGViLCAweGFhLCAweGQ2LCAweGVj LCAweDI4LCAweDcxLAotKyAgICAweDdjLCAweDBiLCAweGMxLCAweDFkLCAweGQ0LCAweDQ0LCAw eDE5LCAweDQ3LCAweGZkLCAweDFkLCAweDdjLCAweGU1LAotKyAgICAweGYzLCAweDI3LCAweGUx LCAweGI2LCAweDcyLCAweDBhLCAweGUwLCAweGVjLCAweDBlLCAweGNkLCAweGVmLCAweDFhLAot KyAgICAweDkxLCAweDZhLCAweGUzLCAweDVmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9yZXR1cm5lZGJpdHNbXSA9IHsK LSsgICAgMHhlNSwgMHhkYSwgMHhiOCwgMHhlMCwgMHg2MywgMHg1OSwgMHg1YSwgMHhjYywgMHgz ZCwgMHhkYywgMHg5ZiwgMHhlOCwKLSsgICAgMHg2NiwgMHg2NywgMHgyYywgMHg5MgotK307Ci0r Ci0rLyogQUVTLTI1NiBubyBkZiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAg MHgxNSwgMHhjNywgMHg1ZCwgMHhjYiwgMHg0MSwgMHg0YiwgMHgxNiwgMHgwMSwgMHgzYSwgMHhk MSwgMHg0NCwgMHhlOCwKLSsgICAgMHgyMiwgMHgzMiwgMHhjNiwgMHg5YywgMHgzZiwgMHhlNywg MHg0MywgMHhmNSwgMHg5YSwgMHhkMywgMHhlYSwgMHhmMiwKLSsgICAgMHhkNywgMHg0ZSwgMHg2 ZSwgMHg2YSwgMHg1NSwgMHg3MywgMHg0MCwgMHhlZiwgMHg4OSwgMHhhZCwgMHgwZCwgMHgwMywK LSsgICAgMHg5NiwgMHg3ZSwgMHg3OCwgMHg4MSwgMHgyZiwgMHg5MSwgMHgxYiwgMHg0NCwgMHhi MCwgMHgwMiwgMHhiYSwgMHgxYwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHhkYywg MHhlNCwgMHhkNCwgMHgyNywgMHg3YSwgMHg5MCwgMHhkNywgMHg5OSwgMHg0MywgMHhhMSwgMHgz YywgMHgzMCwKLSsgICAgMHhjYywgMHg0YiwgMHhlZSwgMHgyZQotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4ZTMsIDB4ZTYsIDB4YjksIDB4MTEs IDB4ZTQsIDB4N2EsIDB4YTQsIDB4NDAsIDB4NmIsIDB4ZjgsIDB4NzMsIDB4ZjcsCi0rICAgIDB4 N2UsIDB4ZWMsIDB4YzcsIDB4YjksIDB4OTcsIDB4YmYsIDB4ZjgsIDB4MjUsIDB4N2IsIDB4YmUs IDB4MTEsIDB4OWIsCi0rICAgIDB4NWIsIDB4NmEsIDB4MGMsIDB4MmUsIDB4MmIsIDB4MDEsIDB4 NTEsIDB4Y2QsIDB4NDEsIDB4NGIsIDB4NmIsIDB4YWMsCi0rICAgIDB4MzEsIDB4YTgsIDB4MGIs IDB4ZjcsIDB4ZTYsIDB4NTksIDB4NDIsIDB4YjgsIDB4MDMsIDB4MGMsIDB4ZjgsIDB4MDYKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDZhLCAweDlmLCAw eDAwLCAweDkxLCAweGFlLCAweGZlLCAweGNmLCAweDg0LCAweDk5LCAweGNlLCAweGIxLCAweDQw LAotKyAgICAweDZkLCAweDVkLCAweDMzLCAweDI4LCAweDg0LCAweGY0LCAweDhjLCAweDYzLCAw eDRjLCAweDdlLCAweGJkLCAweDJjLAotKyAgICAweDgwLCAweDc2LCAweGVlLCAweDVhLCAweGFh LCAweDE1LCAweDA3LCAweDMxLCAweGQ4LCAweGJiLCAweDhjLCAweDY5LAotKyAgICAweDlkLCAw eDlkLCAweGJjLCAweDdlLCAweDQ5LCAweGFlLCAweGVjLCAweDM5LCAweDZiLCAweGQxLCAweDFm LCAweDdlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweGYzLCAweGI5 LCAweDc1LCAweDljLCAweGJkLCAweDg4LCAweGVhLCAweGEyLCAweDUwLCAweGFkLCAweGQ2LCAw eDE2LAotKyAgICAweDFhLCAweDEyLCAweDNjLCAweDg2LCAweDY4LCAweGFmLCAweDZmLCAweGJl LCAweDE5LCAweGYyLCAweGVlLCAweGNjLAotKyAgICAweGE1LCAweDcwLCAweDg0LCAweDUzLCAw eDUwLCAweGNiLCAweDlmLCAweDE0LCAweGE5LCAweGU1LCAweGVlLCAweGI5LAotKyAgICAweDQ4 LCAweDQ1LCAweDQwLCAweGUyLCAweGM3LCAweGM5LCAweDlhLCAweDc0LCAweGZmLCAweDhjLCAw eDk5LCAweDFmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAg IDB4MmUsIDB4ZjIsIDB4NDUsIDB4NGMsIDB4NjIsIDB4MmUsIDB4MGEsIDB4YjksIDB4NmIsIDB4 YTIsIDB4ZmQsIDB4NTYsCi0rICAgIDB4NzksIDB4NjAsIDB4OTMsIDB4Y2YKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHhhZiwgMHg2OSwgMHgyMCwgMHhl OSwgMHgzYiwgMHgzNywgMHg5ZCwgMHgzZiwgMHhiNCwgMHg4MCwgMHgwMiwgMHg3YSwKLSsgICAg MHgyNSwgMHg3ZCwgMHhiOCwgMHhkZSwgMHg3MSwgMHhjNSwgMHgwNiwgMHgwYywgMHhiNCwgMHhl MiwgMHg4ZiwgMHgzNSwKLSsgICAgMHhkOCwgMHgxNCwgMHgwZCwgMHg3ZiwgMHg3NiwgMHg2Mywg MHg0ZSwgMHhiNSwgMHhlZSwgMHhlOSwgMHg2ZiwgMHgzNCwKLSsgICAgMHhjNywgMHg1ZiwgMHg1 NiwgMHgxNCwgMHg0YSwgMHhlOCwgMHg3MywgMHg5NSwgMHg1YiwgMHgxYywgMHhiOSwgMHhjYgot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4ZTUsIDB4YjAs IDB4MmUsIDB4N2UsIDB4NTIsIDB4MzAsIDB4ZTMsIDB4NjMsIDB4ODIsIDB4YjYsIDB4NDQsIDB4 ZDMsCi0rICAgIDB4MjUsIDB4MTksIDB4MDUsIDB4MjQsIDB4OWEsIDB4OWYsIDB4NWYsIDB4Mjcs IDB4NmEsIDB4MjksIDB4YWIsIDB4ZmEsCi0rICAgIDB4MDcsIDB4YTIsIDB4NDIsIDB4MGYsIDB4 YzUsIDB4YTgsIDB4OTQsIDB4N2MsIDB4MTcsIDB4N2IsIDB4ODUsIDB4ODMsCi0rICAgIDB4MGMs IDB4MjUsIDB4MGUsIDB4NjMsIDB4MGIsIDB4ZTksIDB4MTIsIDB4NjAsIDB4Y2QsIDB4ZWYsIDB4 ODAsIDB4MGYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDVlLCAweGYy LCAweDI2LCAweGVmLCAweDlmLCAweDU4LCAweDVkLCAweGQ1LCAweDRhLCAweDEwLCAweGZlLCAw eGE3LAotKyAgICAweDJkLCAweDVmLCAweDRhLCAweDQ2Ci0rfTsKLSsKLSsvKiBBRVMtMjU2IG5v IGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweGZiLCAweGNmLCAweDFi LCAweDYxLCAweDE2LCAweDg5LCAweDc4LCAweDIzLCAweGY1LCAweGQ4LCAweDk2LCAweGUzLAot KyAgICAweDRlLCAweDY0LCAweDBiLCAweDI5LCAweDlhLCAweDNmLCAweGY4LCAweGE1LCAweGVk LCAweGYyLCAweGZlLCAweGRiLAotKyAgICAweDE2LCAweGNhLCAweDdmLCAweDEwLCAweGZhLCAw eDVlLCAweDE4LCAweDc2LCAweDJjLCAweDYzLCAweDVlLCAweDk2LAotKyAgICAweGNmLCAweGIz LCAweGQ2LCAweGZjLCAweGFmLCAweDk5LCAweDM5LCAweDI4LCAweDljLCAweDYxLCAweGU4LCAw eGIzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9ub25jZVtdID0gewotKyAgICAweDEyLCAweDk2LCAweGYwLCAweDUyLCAw eGYzLCAweDhkLCAweDgxLCAweGNmLCAweGRlLCAweDg2LCAweGYyLCAweDk5LAotKyAgICAweDQz LCAweDk2LCAweGI5LCAweGYwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9IHsKLSsgICAgMHg2MywgMHgwZCwgMHg3OCwgMHhmNSwgMHg5MCwgMHg4ZSwgMHgzMiwgMHg0 NywgMHhiMCwgMHg0ZCwgMHgzNywgMHg2MCwKLSsgICAgMHgwOSwgMHg5NiwgMHhiYywgMHhiZiwg MHg5NywgMHg3YSwgMHg2MiwgMHgxNCwgMHg0NSwgMHhiZCwgMHg4ZCwgMHhjYywKLSsgICAgMHg2 OSwgMHhmYiwgMHgwMywgMHhlMSwgMHg4MCwgMHgxYywgMHhjNywgMHhlMiwgMHgyYSwgMHhmOSwg MHgzNywgMHgzZiwKLSsgICAgMHg2NiwgMHg0ZCwgMHg2MiwgMHhkOSwgMHgxMCwgMHhlMCwgMHhh ZCwgMHhjOCwgMHg5YSwgMHhmMCwgMHhhOCwgMHg2ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0 W10gPSB7Ci0rICAgIDB4MzYsIDB4YzYsIDB4MTMsIDB4NjAsIDB4YmIsIDB4MTQsIDB4YWQsIDB4 MjIsIDB4YjAsIDB4MzgsIDB4YWMsIDB4YTYsCi0rICAgIDB4MTgsIDB4MTYsIDB4OTMsIDB4MjUs IDB4ODYsIDB4YjcsIDB4ZGMsIDB4ZGMsIDB4MzYsIDB4OTgsIDB4MmIsIDB4ZjksCi0rICAgIDB4 NjgsIDB4MzMsIDB4ZDMsIDB4YzYsIDB4ZmYsIDB4Y2UsIDB4OGQsIDB4MTUsIDB4NTksIDB4ODIs IDB4NzYsIDB4ZWQsCi0rICAgIDB4NmYsIDB4OGQsIDB4NDksIDB4NzQsIDB4MmYsIDB4ZGEsIDB4 ZGMsIDB4MWYsIDB4MTcsIDB4ZDAsIDB4ZGUsIDB4MTcKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2ludF9yZXR1cm5lZGJp dHNbXSA9IHsKLSsgICAgMHgxNiwgMHgyZiwgMHg4ZSwgMHgzZiwgMHgyMSwgMHg3YSwgMHgxYywg MHgyMCwgMHg1NiwgMHhkMSwgMHg5MiwgMHhmNiwKLSsgICAgMHhkMiwgMHgyNSwgMHg3NSwgMHgw ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4OTEsIDB4 NzksIDB4NzYsIDB4ZWUsIDB4ZTAsIDB4Y2YsIDB4OWUsIDB4YzIsIDB4ZDUsIDB4ZDQsIDB4MjMs IDB4OWIsCi0rICAgIDB4MTIsIDB4OGMsIDB4N2UsIDB4MGEsIDB4YjcsIDB4ZDIsIDB4OGIsIDB4 ZDYsIDB4N2MsIDB4YTMsIDB4YzYsIDB4ZTUsCi0rICAgIDB4MGUsIDB4YWEsIDB4YzcsIDB4NmIs IDB4YWUsIDB4MGQsIDB4ZmEsIDB4NTMsIDB4MDYsIDB4NzksIDB4YTEsIDB4ZWQsCi0rICAgIDB4 NGQsIDB4NmEsIDB4MGUsIDB4ZDgsIDB4OWQsIDB4YmUsIDB4MWIsIDB4MzEsIDB4OTMsIDB4N2Is IDB4ZWMsIDB4ZmIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewot KyAgICAweGQyLCAweDQ2LCAweDUwLCAweDIyLCAweDEwLCAweDE0LCAweDYzLCAweGY3LCAweGVh LCAweDBmLCAweGI5LCAweDdlLAotKyAgICAweDBkLCAweGUxLCAweDk0LCAweDA3LCAweGFmLCAw eDA5LCAweDQ0LCAweDMxLCAweGVhLCAweDY0LCAweGE0LCAweDE4LAotKyAgICAweDViLCAweGY5 LCAweGQ4LCAweGMyLCAweGZhLCAweDAzLCAweDQ3LCAweGM1LCAweDM5LCAweDQzLCAweGQ1LCAw eDNiLAotKyAgICAweDYyLCAweDg2LCAweDY0LCAweGVhLCAweDJjLCAweDczLCAweDhjLCAweGFl LCAweDlkLCAweDk4LCAweDk4LCAweDI5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7 Ci0rICAgIDB4OGMsIDB4YWIsIDB4MTgsIDB4ZjgsIDB4YzMsIDB4ZWMsIDB4MTgsIDB4NWMsIDB4 YjMsIDB4MWUsIDB4OWQsIDB4YmUsCi0rICAgIDB4M2YsIDB4MDMsIDB4YjQsIDB4MDAsIDB4OTgs IDB4OWQsIDB4YWUsIDB4ZWIsIDB4ZjQsIDB4OTQsIDB4ZjgsIDB4NDIsCi0rICAgIDB4OGYsIDB4 ZTMsIDB4MzksIDB4MDcsIDB4ZTEsIDB4YzksIDB4YWQsIDB4MGIsIDB4MWYsIDB4ZWQsIDB4YzAs IDB4YmEsCi0rICAgIDB4ZjYsIDB4ZDEsIDB4ZWMsIDB4MjcsIDB4ODYsIDB4N2IsIDB4ZDYsIDB4 NTUsIDB4OWIsIDB4NjAsIDB4YTUsIDB4YzYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3JldHVybmVkYml0c1tdID0gewot KyAgICAweGVmLCAweGQyLCAweGQ4LCAweDVjLCAweGRjLCAweDYyLCAweDI1LCAweDlmLCAweGFh LCAweDFlLCAweDJjLCAweDY3LAotKyAgICAweGY2LCAweDAyLCAweDMyLCAweGUyCi0rfTsKLSsK LSsvKiBTSEEtMSBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHhkMiwgMHgzNiwgMHhhNSwg MHgyNywgMHgzMSwgMHg3MywgMHhkZCwgMHgxMSwgMHg0ZiwgMHg5MywgMHhiZCwgMHhlMiwKLSsg ICAgMHgzMSwgMHhhNSwgMHg5MSwgMHgxMwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHhiNSwgMHhi MywgMHg2MCwgMHhlZiwgMHhmNywgMHg2MywgMHgzMSwgMHhmMwotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPSB7Ci0rICAgIDB4ZDQsIDB4YmIsIDB4MDIsIDB4MTAsIDB4YjIsIDB4NzEsIDB4 ZGIsIDB4ODEsIDB4ZDYsIDB4ZjAsIDB4NDIsIDB4NjAsCi0rICAgIDB4ZGEsIDB4ZWEsIDB4Nzcs IDB4NTIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDRkLCAweGQyLCAweDZjLCAw eDg3LCAweGZiLCAweDJjLCAweDRmLCAweGE2LCAweDhkLCAweDE2LCAweDYzLCAweDIyLAotKyAg ICAweDZhLCAweDUxLCAweGUzLCAweGY4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAw eGM5LCAweDgzLCAweDllLCAweDE2LCAweGY2LCAweDFjLCAweDBmLCAweGIyLCAweGVjLCAweDYw LCAweDMxLCAweGE5LAotKyAgICAweGNiLCAweGE5LCAweDM2LCAweDdhCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPSB7Ci0rICAgIDB4YTgsIDB4MTMsIDB4NGYsIDB4ZjQsIDB4MzEsIDB4MDIsIDB4 NDQsIDB4ZTMsIDB4ZDMsIDB4M2QsIDB4NjEsIDB4OWUsCi0rICAgIDB4ZTUsIDB4YzYsIDB4M2Us IDB4ODksIDB4YjUsIDB4OWIsIDB4MGYsIDB4MzUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsK LSsgICAgMHhmOSwgMHhlOCwgMHhkMiwgMHg3MiwgMHgxMywgMHgzNCwgMHg5NSwgMHg2ZiwgMHgx NSwgMHg0OSwgMHg0NywgMHg5OSwKLSsgICAgMHgxNiwgMHgwMywgMHgxOSwgMHg0NwotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50 cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4NGUsIDB4OGMsIDB4NDksIDB4OWIsIDB4NGEsIDB4 NWMsIDB4OWIsIDB4OWMsIDB4M2EsIDB4ZWUsIDB4ZmIsIDB4ZDIsCi0rICAgIDB4YWUsIDB4Y2Qs IDB4OGMsIDB4YzQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDUwLCAweGI0LCAweGI0 LCAweGNkLCAweDY4LCAweDU3LCAweGZjLCAweDJlLCAweGMxLCAweDUyLCAweGNjLCAweGY2LAot KyAgICAweDY4LCAweGE0LCAweDgxLCAweGVkLCAweDdlLCAweGU0LCAweDFkLCAweDg3Ci0rfTsK LSsKLSsvKiBTSEEtMSBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHhhOSwgMHg0NywgMHgx YiwgMHgyOSwgMHgyZCwgMHgxYywgMHgwNSwgMHhkZiwgMHg3NiwgMHhkMCwgMHg2MiwgMHhmOSwK LSsgICAgMHhlMiwgMHg3ZiwgMHg0YywgMHg3YgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfbm9uY2VbXSA9IHsKLSsgICAgMHg1MywgMHgy MywgMHgyNCwgMHhlMywgMHhlYywgMHgwYywgMHg1NCwgMHgxNAotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPSB7Ci0rICAgIDB4N2EsIDB4ODcsIDB4YTEsIDB4YWMsIDB4MWMsIDB4ZmQsIDB4YWIs IDB4YWUsIDB4ZjcsIDB4ZDYsIDB4ZmIsIDB4NzYsCi0rICAgIDB4MjgsIDB4ZWMsIDB4NmQsIDB4 Y2EKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGExX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGZjLCAweDkyLCAweDM1LCAweGQ2LCAw eDdlLCAweGI3LCAweDI0LCAweDY1LCAweGZkLCAweDEyLCAweDI3LCAweDM1LAotKyAgICAweGMw LCAweDcyLCAweGNhLCAweDI4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NTcsIDB4 ODgsIDB4ODIsIDB4ZTUsIDB4MjUsIDB4YTUsIDB4MmMsIDB4NGEsIDB4MDYsIDB4MjAsIDB4NmMs IDB4NzIsCi0rICAgIDB4NTUsIDB4NjEsIDB4ZGQsIDB4OTAsIDB4NzEsIDB4OWYsIDB4OTUsIDB4 ZWEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGExX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDY5LCAweGE1LCAweDQwLCAweDYy LCAweDk4LCAweDQ3LCAweDU2LCAweDczLCAweDRhLCAweDhmLCAweDYwLCAweDk2LAotKyAgICAw eGQ2LCAweDk5LCAweDI3LCAweGVkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAg MHhlNSwgMHg0MCwgMHg0ZSwgMHhiZCwgMHg1MCwgMHgwMCwgMHhmNSwgMHgxNSwgMHhhNiwgMHhl ZSwgMHg0NSwgMHhkYSwKLSsgICAgMHg4NCwgMHgzZCwgMHhkNCwgMHhjMAotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlu cHV0MltdID0gewotKyAgICAweDExLCAweDUxLCAweDE0LCAweGYwLCAweDA5LCAweDFiLCAweDRl LCAweDU2LCAweDBkLCAweGU5LCAweGY2LCAweDFlLAotKyAgICAweDUyLCAweDY1LCAweGNkLCAw eDk2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhhMSwgMHg5YywgMHg5NCwgMHg2ZSwgMHgy OSwgMHhlMSwgMHgzMywgMHgwZCwgMHgzMiwgMHhkNiwgMHhhYSwgMHhjZSwKLSsgICAgMHg3MSwg MHgzZiwgMHg1MiwgMHg3MiwgMHg4YiwgMHg0MiwgMHhhOCwgMHhkNwotK307Ci0rCi0rLyogU0hB LTIyNCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjI0X3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDEyLCAweDY5LCAweDMyLCAweDRm LCAweDgzLCAweGE2LCAweGY1LCAweDE0LCAweGUzLCAweDQ5LCAweDNlLCAweDc1LAotKyAgICAw eDNlLCAweGRlLCAweGFkLCAweGExLCAweDI5LCAweGMzLCAweGYzLCAweDE5LCAweDIwLCAweGI1 LCAweDRjLCAweGQ5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X3ByX25vbmNlW10gPSB7Ci0rICAgIDB4NmEsIDB4NzgsIDB4ZDAsIDB4 ZWIsIDB4YmIsIDB4NWEsIDB4ZjAsIDB4ZWUsIDB4ZTgsIDB4YzMsIDB4YmEsIDB4NzEKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4ZDUsIDB4YjgsIDB4YjYsIDB4YmMs IDB4YzEsIDB4NWIsIDB4NjAsIDB4MzEsIDB4M2MsIDB4ZjUsIDB4ZTUsIDB4YzAsCi0rICAgIDB4 OGUsIDB4NTIsIDB4N2EsIDB4YmQsIDB4ZWEsIDB4NDcsIDB4YTksIDB4NWYsIDB4OGYsIDB4Zjks IDB4OGIsIDB4YWUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4MWYsIDB4NTUs IDB4ZWMsIDB4YWUsIDB4MTYsIDB4MTIsIDB4ODQsIDB4YmEsIDB4ODQsIDB4MTYsIDB4MTksIDB4 ODgsCi0rICAgIDB4OGUsIDB4YjgsIDB4MzMsIDB4MjUsIDB4NTQsIDB4ZmYsIDB4Y2EsIDB4Nzks IDB4YWYsIDB4MDcsIDB4MjUsIDB4NTAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAg MHg5MiwgMHhhMywgMHgzMiwgMHhhOCwgMHg5YSwgMHgwYSwgMHg1OCwgMHg3YywgMHgxZCwgMHg1 YSwgMHg3ZSwgMHhlMSwKLSsgICAgMHhiMiwgMHg3MywgMHhhYiwgMHgwZSwgMHgxNiwgMHg3OSwg MHgyMywgMHhkMywgMHgyOSwgMHg4OSwgMHg4MSwgMHhlMQotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPSB7Ci0rICAgIDB4ZjMsIDB4MzgsIDB4OTEsIDB4NDAsIDB4MzcsIDB4N2EsIDB4NTEsIDB4 NzIsIDB4NDIsIDB4NzQsIDB4NzgsIDB4MGEsCi0rICAgIDB4NjksIDB4ZmQsIDB4YTYsIDB4NDQs IDB4NDMsIDB4NDUsIDB4NmMsIDB4MGMsIDB4NWEsIDB4MTksIDB4ZmYsIDB4ZjEsCi0rICAgIDB4 NTQsIDB4NjAsIDB4ZWUsIDB4NmEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAw eDc1LCAweGYzLCAweDA0LCAweDI1LCAweGRkLCAweDM2LCAweGE4LCAweDM3LCAweDQ2LCAweGFl LCAweDBjLCAweDUyLAotKyAgICAweDA1LCAweDc5LCAweDRjLCAweDI2LCAweGRiLCAweGU5LCAw eDcxLCAweDE2LCAweDRjLCAweDBhLCAweGYyLCAweDYwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByMltd ID0gewotKyAgICAweGVhLCAweGM1LCAweDAzLCAweDBhLCAweDRmLCAweGIwLCAweDM4LCAweDhk LCAweDIzLCAweGQ0LCAweGM4LCAweDc3LAotKyAgICAweGUyLCAweDZkLCAweDljLCAweDBiLCAw eDQ0LCAweGY3LCAweDJkLCAweDViLCAweGJmLCAweDVkLCAweDJhLCAweDExCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3JldHVy bmVkYml0c1tdID0gewotKyAgICAweDYwLCAweDUwLCAweDJiLCAweGU3LCAweDg2LCAweGQ4LCAw eDI2LCAweDczLCAweGUzLCAweDFkLCAweDk1LCAweDIwLAotKyAgICAweGIzLCAweDJjLCAweDMy LCAweDFjLCAweGY1LCAweGNlLCAweDU3LCAweGE2LCAweDY3LCAweDJiLCAweGRjLCAweDRlLAot KyAgICAweGRkLCAweDExLCAweDRjLCAweGM0Ci0rfTsKLSsKLSsvKiBTSEEtMjI0IE5vIFBSICAq LwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50 cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YjIsIDB4MWMsIDB4NzcsIDB4NGQsIDB4ZjYsIDB4ZDMs IDB4YjYsIDB4NDAsIDB4YjcsIDB4MzAsIDB4M2UsIDB4MjksCi0rICAgIDB4YjAsIDB4ODUsIDB4 MWMsIDB4YmUsIDB4NGEsIDB4ZWEsIDB4NmIsIDB4NWEsIDB4YjUsIDB4OGEsIDB4OTcsIDB4ZWIK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfbm9uY2VbXSA9IHsKLSsgICAgMHg0MiwgMHgwMiwgMHgwYSwgMHgxYywgMHg5OCwgMHg5YSwg MHg3NywgMHg5ZSwgMHg5ZiwgMHg4MCwgMHhiYSwgMHhlMAotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9IHsKLSsgICAgMHg5OCwgMHhiOCwgMHgwNCwgMHg0MSwgMHhmYywgMHhjMSwgMHg1ZCwg MHhjNSwgMHhlOSwgMHhiOSwgMHgwOCwgMHhkYSwKLSsgICAgMHhmOSwgMHhmYSwgMHgwZCwgMHg5 MCwgMHhjZSwgMHhkZiwgMHgxZCwgMHgxMCwgMHhhOSwgMHg4ZCwgMHg1MCwgMHgwYwotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRp dGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg5YSwgMHg4ZCwgMHgzOSwgMHg0OSwgMHg0MiwgMHhk NSwgMHgwYiwgMHhhZSwgMHhlMSwgMHhhZiwgMHhiNywgMHgwMCwKLSsgICAgMHgwMiwgMHhmYSwg MHg5NiwgMHhiMSwgMHhhNSwgMHgxZCwgMHgyZCwgMHgyNSwgMHg3OCwgMHhlZSwgMHg4MywgMHgz ZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTIyNF9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZTQsIDB4ZjUsIDB4NTMsIDB4Nzks IDB4NWEsIDB4OTcsIDB4NTgsIDB4MDYsIDB4MDgsIDB4YmEsIDB4N2IsIDB4ZmEsCi0rICAgIDB4 ZjAsIDB4ODMsIDB4MDUsIDB4OGMsIDB4MjIsIDB4YzAsIDB4YzksIDB4ZGIsIDB4MTUsIDB4ZTcs IDB4ZGUsIDB4MjAsCi0rICAgIDB4NTUsIDB4MjIsIDB4OWEsIDB4YWQKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfZW50cm9weWlucHV0 cmVzZWVkW10gPSB7Ci0rICAgIDB4NjcsIDB4MDksIDB4NDgsIDB4YWEsIDB4MDcsIDB4MTYsIDB4 OTksIDB4ODksIDB4N2YsIDB4NmQsIDB4YTAsIDB4ZTUsCi0rICAgIDB4OGYsIDB4ZGYsIDB4YmMs IDB4ZGIsIDB4ZmUsIDB4ZTUsIDB4NmMsIDB4N2EsIDB4OTUsIDB4NGEsIDB4NjYsIDB4MTcKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf YWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4MGYsIDB4NGIsIDB4MWMsIDB4NmYs IDB4YjcsIDB4ZTMsIDB4NDcsIDB4ZTUsIDB4NWQsIDB4N2QsIDB4MzgsIDB4ZDYsCi0rICAgIDB4 MjgsIDB4OWIsIDB4ZWIsIDB4NTUsIDB4NjMsIDB4MDksIDB4M2UsIDB4N2MsIDB4NTYsIDB4ZWEs IDB4ZjgsIDB4MTkKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDJkLCAweDI2LCAw eDdjLCAweDM3LCAweGU0LCAweDdhLCAweDI4LCAweDVlLCAweDVhLCAweDNjLCAweGFmLCAweDNk LAotKyAgICAweDVhLCAweDhlLCAweDU1LCAweGEyLCAweDFhLCAweDZlLCAweGMwLCAweGU1LCAw eGY2LCAweDIxLCAweGQzLCAweGY2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDRkLCAw eDgzLCAweDM1LCAweGRmLCAweDY3LCAweGE5LCAweGZjLCAweDE3LCAweGRhLCAweDcwLCAweGNj LCAweDhiLAotKyAgICAweDdmLCAweDc3LCAweGFlLCAweGEyLCAweDVmLCAweGI5LCAweDdlLCAw eDc0LCAweDRjLCAweDI2LCAweGMxLCAweDdhLAotKyAgICAweDNiLCAweGE3LCAweDVjLCAweDkz Ci0rfTsKLSsKLSsvKiBTSEEtMjU2IFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4Y2Us IDB4NDksIDB4MDAsIDB4N2EsIDB4NTYsIDB4ZTMsIDB4NjcsIDB4OGYsIDB4ZTEsIDB4YjYsIDB4 YTcsIDB4ZDQsCi0rICAgIDB4NGYsIDB4MDgsIDB4N2EsIDB4MWIsIDB4MDEsIDB4ZjQsIDB4ZmEs IDB4NmIsIDB4ZWYsIDB4YjcsIDB4ZTUsIDB4ZWIsCi0rICAgIDB4MDcsIDB4M2QsIDB4MTEsIDB4 MGQsIDB4YzgsIDB4ZWEsIDB4MmIsIDB4ZmUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHg3Mywg MHg0MSwgMHhjOCwgMHg5MiwgMHg5NCwgMHhlMiwgMHhjNSwgMHg1ZiwgMHg5MywgMHhmZCwgMHgz OSwgMHg1ZCwKLSsgICAgMHgyYiwgMHg5MSwgMHg0ZCwgMHgzOAotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9IHsKLSsgICAgMHg1MCwgMHg2ZCwgMHgwMSwgMHgwMSwgMHgwNywgMHg1YSwg MHg4MCwgMHgzNSwgMHg3YSwgMHg1NiwgMHgxYSwgMHg1NiwKLSsgICAgMHgyZiwgMHg5YSwgMHgw YiwgMHgzNSwgMHhiMiwgMHhiMSwgMHhjOSwgMHhlNSwgMHhjYSwgMHg2OSwgMHg2MSwgMHg0OCwK LSsgICAgMHhmZiwgMHhmYiwgMHgwZiwgMHhkOSwgMHg0YiwgMHg3OSwgMHgxZCwgMHhiYQotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9w cl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHgyMCwgMHhiOCwgMHhkZiwgMHg0NCwgMHg3 NywgMHg1YSwgMHhiOCwgMHhkMywgMHhiZiwgMHhmNiwgMHhjZiwgMHhhYywKLSsgICAgMHg1ZSwg MHhhNiwgMHg5NiwgMHg2MiwgMHg3MywgMHg0NCwgMHg0MCwgMHg0YSwgMHgzMCwgMHhmYiwgMHgz OCwgMHhhNSwKLSsgICAgMHg3YiwgMHgwZCwgMHhlNCwgMHgwZCwgMHhjNiwgMHhlNCwgMHg5YSwg MHgxZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweDA0LCAweGM0LCAweDY1LCAw eGY0LCAweGQzLCAweGJmLCAweDgzLCAweDRiLCAweGFiLCAweGM4LCAweDQxLCAweGE4LAotKyAg ICAweGMyLCAweGUwLCAweDQ0LCAweDYzLCAweDc3LCAweDRjLCAweDZmLCAweDZjLCAweDQ5LCAw eDQ2LCAweGZmLCAweDk0LAotKyAgICAweDE3LCAweGVhLCAweGU2LCAweDFhLCAweDlkLCAweDVl LCAweDY2LCAweDc4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgwNywgMHg0 ZCwgMHhhYywgMHg5YiwgMHg4NiwgMHhjYSwgMHg0YSwgMHhhYSwgMHg2ZSwgMHg3YSwgMHgwMywg MHhhMiwKLSsgICAgMHg1ZCwgMHgxMCwgMHhlYSwgMHgwYiwgMHhmOSwgMHg4MywgMHhjYywgMHhk MSwgMHhmYywgMHhlMiwgMHgwNywgMHhjNywKLSsgICAgMHgwNiwgMHgzNCwgMHg2MCwgMHg2Ziwg MHg4MywgMHg5NCwgMHg5OSwgMHg3NgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAg IDB4ODksIDB4NGUsIDB4NDUsIDB4OGMsIDB4MTEsIDB4ZjksIDB4YmMsIDB4NWIsIDB4YWMsIDB4 NzQsIDB4OGIsIDB4NGIsCi0rICAgIDB4NWYsIDB4ZjcsIDB4MTksIDB4ZjMsIDB4ZjUsIDB4MjQs IDB4NTQsIDB4MTQsIDB4ZDEsIDB4MTUsIDB4YjEsIDB4NDMsCi0rICAgIDB4MTIsIDB4YTQsIDB4 NWYsIDB4ZDQsIDB4ZWMsIDB4ZmMsIDB4Y2QsIDB4MDkKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHIyW10g PSB7Ci0rICAgIDB4MGUsIDB4ZWIsIDB4MWYsIDB4ZDcsIDB4ZmMsIDB4ZDEsIDB4OWQsIDB4ZDQs IDB4MDUsIDB4MzYsIDB4OGIsIDB4YjIsCi0rICAgIDB4ZmIsIDB4ZTQsIDB4ZjQsIDB4NTEsIDB4 MGMsIDB4ODcsIDB4OWIsIDB4MDIsIDB4NDQsIDB4ZDUsIDB4OTIsIDB4NGQsCi0rICAgIDB4NDQs IDB4ZmUsIDB4MWEsIDB4MDMsIDB4NDMsIDB4NTYsIDB4YmQsIDB4ODYKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcmV0dXJuZWRi aXRzW10gPSB7Ci0rICAgIDB4MDIsIDB4YWEsIDB4YjYsIDB4MWQsIDB4N2UsIDB4MmEsIDB4NDAs IDB4MDMsIDB4NjksIDB4MmQsIDB4NDksIDB4YTMsCi0rICAgIDB4NDEsIDB4ZTcsIDB4NDQsIDB4 MGIsIDB4YWYsIDB4N2IsIDB4ODUsIDB4ZTQsIDB4NWYsIDB4NTMsIDB4M2IsIDB4NjQsCi0rICAg IDB4YmMsIDB4ODksIDB4YzgsIDB4ODIsIDB4ZDQsIDB4NzgsIDB4MzcsIDB4YTIKLSt9OwotKwot Ky8qIFNIQS0yNTYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHg1YiwgMHgxYiwgMHhl YywgMHg0ZCwgMHhhOSwgMHgzOCwgMHg3NCwgMHg1YSwgMHgzNCwgMHgwYiwgMHg3YiwgMHhjNSwK LSsgICAgMHhlNSwgMHhkNywgMHg2NiwgMHg3YywgMHhiYywgMHg4MiwgMHhiOSwgMHgwZSwgMHgy ZCwgMHgxZiwgMHg5MiwgMHhkNywKLSsgICAgMHhjMSwgMHhiYywgMHg2NywgMHg2OSwgMHhlYywg MHg2YiwgMHgwMywgMHgzYwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTI1Nl9ub25jZVtdID0gewotKyAgICAweGE0LCAweDBjLCAweGQ4LCAw eDljLCAweDYxLCAweGQ4LCAweGMzLCAweDU0LCAweGZlLCAweDUzLCAweGM5LCAweGU1LAotKyAg ICAweDVkLCAweDZmLCAweDZkLCAweDM1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewot KyAgICAweDIyLCAweDVlLCAweDYyLCAweDkzLCAweDQyLCAweDgzLCAweDc4LCAweDI0LCAweGQ4 LCAweDQwLCAweDhjLCAweGRlLAotKyAgICAweDZmLCAweGY5LCAweGE0LCAweDdhLCAweGM1LCAw eGE3LCAweDNiLCAweDg4LCAweGEzLCAweGVlLCAweDQyLCAweDIwLAotKyAgICAweGZkLCAweDYx LCAweDU2LCAweGM2LCAweDRjLCAweDEzLCAweDQxLCAweDljCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtd ID0gewotKyAgICAweGJmLCAweDc0LCAweDViLCAweGY2LCAweGM1LCAweDY0LCAweDVlLCAweDk5 LCAweDM0LCAweDhmLCAweGJjLCAweGE0LAotKyAgICAweGUyLCAweGJkLCAweGQ4LCAweDg1LCAw eDI2LCAweDM3LCAweGVhLCAweGJhLCAweDRmLCAweGYyLCAweDlhLCAweDlhLAotKyAgICAweDY2 LCAweGZjLCAweGRmLCAweDYzLCAweDI2LCAweDI2LCAweDE5LCAweDg3Ci0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2ludF9yZXR1cm5l ZGJpdHNbXSA9IHsKLSsgICAgMHhiMywgMHhjNiwgMHgwNywgMHgwNywgMHhkNiwgMHg3NSwgMHhm NiwgMHgyYiwgMHhkNiwgMHgyMSwgMHg5NiwgMHhmMSwKLSsgICAgMHhhZSwgMHhkYiwgMHgyYiwg MHhhYywgMHgyNSwgMHgyYSwgMHhhZSwgMHhhZSwgMHg0MSwgMHg3MiwgMHgwMywgMHg1ZSwKLSsg ICAgMHhiZiwgMHhkMywgMHg2NCwgMHhiYywgMHg1OSwgMHhmOSwgMHhjMCwgMHg3NgotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9lbnRy b3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHhiZiwgMHgyMCwgMHgzMywgMHg1NiwgMHgyOSwg MHhhOCwgMHgzNywgMHgwNCwgMHgxZiwgMHg3OCwgMHgzNCwgMHgzZCwKLSsgICAgMHg4MSwgMHgy YSwgMHhjOSwgMHg4NiwgMHhjNiwgMHg3YSwgMHgyZiwgMHg4OCwgMHg1ZSwgMHhkNSwgMHhiZSwg MHgzNCwKLSsgICAgMHg0NiwgMHgyMCwgMHhhNCwgMHgzNSwgMHhlYiwgMHhjNywgMHhlMiwgMHg5 ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg5YiwgMHhhZSwgMHgyZCwg MHgyZCwgMHg2MSwgMHhhNCwgMHg4OSwgMHhlYiwgMHg0MywgMHg0NiwgMHhhNywgMHhkYSwKLSsg ICAgMHhlZiwgMHg0MCwgMHhjYSwgMHg0YSwgMHg5OSwgMHgxMSwgMHg0MSwgMHhkYywgMHg1Yywg MHg5NCwgMHhlOSwgMHhhYywKLSsgICAgMHhkNCwgMHhkMCwgMHhlNiwgMHhiZCwgMHhmYiwgMHgw MywgMHg5YywgMHhhOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4MjMsIDB4YWEs IDB4MGMsIDB4YmQsIDB4MjgsIDB4MzMsIDB4ZTIsIDB4NTEsIDB4ZmMsIDB4NzEsIDB4ZDIsIDB4 MTUsCi0rICAgIDB4MWYsIDB4NzYsIDB4ZmQsIDB4MGQsIDB4ZTAsIDB4YjcsIDB4YjUsIDB4ODQs IDB4NzUsIDB4NWIsIDB4YmUsIDB4ZjMsCi0rICAgIDB4NWMsIDB4Y2EsIDB4YzUsIDB4MzAsIDB4 ZjIsIDB4NzUsIDB4MWYsIDB4ZGEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4OTAsIDB4 M2MsIDB4YzEsIDB4MTAsIDB4OGMsIDB4MTIsIDB4MDEsIDB4YzYsIDB4YTYsIDB4M2EsIDB4MGYs IDB4NGQsCi0rICAgIDB4YjYsIDB4M2EsIDB4NGYsIDB4NDEsIDB4OWMsIDB4NjEsIDB4NzUsIDB4 ODQsIDB4ZTksIDB4NzQsIDB4NzUsIDB4ZmQsCi0rICAgIDB4ZmUsIDB4ZjIsIDB4MWYsIDB4NDMs IDB4ZDgsIDB4NWUsIDB4MjQsIDB4YTMKLSt9OwotKwotKy8qIFNIQS0zODQgUFIgICovCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5 aW5wdXRbXSA9IHsKLSsgICAgMHg3MSwgMHg5ZCwgMHhiMiwgMHg1YSwgMHg3MSwgMHg2ZCwgMHgw NCwgMHhlOSwgMHgxZSwgMHhjNywgMHg5MiwgMHgyNCwKLSsgICAgMHg2ZSwgMHgxMiwgMHgzMywg MHhhOSwgMHg1MiwgMHg2NCwgMHgzMSwgMHhlZiwgMHg3MSwgMHhlYiwgMHgyMiwgMHg1NSwKLSsg ICAgMHgyOCwgMHg5NywgMHgwNiwgMHg2YSwgMHhjMCwgMHgwYywgMHhhMCwgMHg3ZQotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9u b25jZVtdID0gewotKyAgICAweGY1LCAweDBkLCAweGZhLCAweGIwLCAweGVjLCAweDZhLCAweDdj LCAweGQ2LCAweGJkLCAweDliLCAweDA1LCAweGZkLAotKyAgICAweDM4LCAweDNlLCAweDJlLCAw eDU2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDc0LCAweGFjLCAw eDdlLCAweDZkLCAweGIxLCAweGE0LCAweGU3LCAweDIxLCAweGQxLCAweDFlLCAweDZlLCAweDk2 LAotKyAgICAweDZkLCAweDRkLCAweDUzLCAweDQ2LCAweDgyLCAweDk2LCAweDZlLCAweGNmLCAw eGFhLCAweDgxLCAweDhkLCAweDdkLAotKyAgICAweDllLCAweGUxLCAweDBmLCAweDE1LCAweGVh LCAweDQxLCAweGJmLCAweGUzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGRh LCAweDk1LCAweGQ0LCAweGQwLCAweGI4LCAweDExLCAweGQzLCAweDQ5LCAweDI3LCAweDVkLCAw eGE5LCAweDM5LAotKyAgICAweDY4LCAweGYzLCAweGE4LCAweGU5LCAweDVkLCAweDE5LCAweDhh LCAweDJiLCAweDY2LCAweGU4LCAweDY5LCAweDA2LAotKyAgICAweDdjLCAweDllLCAweDAzLCAw eGExLCAweDhiLCAweDI2LCAweDJkLCAweDZlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0r ICAgIDB4NDksIDB4ZGYsIDB4NDQsIDB4MDAsIDB4ZTQsIDB4MWMsIDB4NzUsIDB4MGIsIDB4MjYs IDB4NWEsIDB4NTksIDB4NjQsCi0rICAgIDB4MWYsIDB4NGUsIDB4YjEsIDB4YjIsIDB4MTMsIDB4 ZjEsIDB4MjIsIDB4NGUsIDB4YjQsIDB4NmQsIDB4OWEsIDB4Y2MsCi0rICAgIDB4YTAsIDB4NDgs IDB4ZTYsIDB4Y2YsIDB4MWQsIDB4ZDEsIDB4OTIsIDB4MGQKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfaW50X3JldHVybmVkYml0 c1tdID0gewotKyAgICAweGM4LCAweDUyLCAweGFlLCAweGJmLCAweDA0LCAweDNjLCAweDI3LCAw eGI3LCAweDc4LCAweDE4LCAweGFhLCAweDhmLAotKyAgICAweGZmLCAweGNmLCAweGE0LCAweGYx LCAweGNjLCAweGU3LCAweDY4LCAweGZhLCAweDIyLCAweGEyLCAweDEzLCAweDQ1LAotKyAgICAw eGU4LCAweGRkLCAweDg3LCAweGU2LCAweGYyLCAweDZlLCAweGRkLCAweGM3LCAweDUyLCAweDkw LCAweDlmLCAweDdiLAotKyAgICAweGZhLCAweDYxLCAweDJkLCAweDlkLCAweDllLCAweGNmLCAw eDk4LCAweGFjLCAweDUyLCAweDQwLCAweGNlLCAweGFmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9IHsKLSsgICAgMHg2MSwgMHg3YywgMHgwMywgMHg5YSwgMHgzZSwgMHg1MCwgMHg1NywgMHg2 MCwgMHhjNSwgMHg4MywgMHhjOSwgMHhiMiwKLSsgICAgMHhkMSwgMHg4NywgMHg4NSwgMHg2Niwg MHg5MiwgMHg1ZCwgMHg4NCwgMHgwZSwgMHg1MywgMHhmYiwgMHg3MCwgMHgwMywKLSsgICAgMHg3 MiwgMHhmZCwgMHhiYSwgMHhhZSwgMHg5YywgMHg4ZiwgMHhmOCwgMHgxOAotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9IHsKLSsgICAgMHhmOCwgMHhlYiwgMHg4OSwgMHhiMSwgMHg4ZCwgMHg3OCwg MHhiZSwgMHgyMSwgMHhlMCwgMHhiYiwgMHg5ZCwgMHhiNywKLSsgICAgMHg5NSwgMHgwZSwgMHhk OSwgMHg0NiwgMHgwYywgMHg4YywgMHhlMiwgMHg2MywgMHhiNywgMHg5ZCwgMHg2NywgMHg5MCwK LSsgICAgMHhiZCwgMHhjNywgMHgwYiwgMHhhNSwgMHhjZSwgMHhiMiwgMHg2NSwgMHg4MQotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9w cl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhlNiwgMHg5ZiwgMHhmZSwgMHg2OCwgMHhkNiwg MHhiNSwgMHg3OSwgMHhmMSwgMHgwNiwgMHg1ZiwgMHhhMywgMHhiYiwKLSsgICAgMHgyMywgMHg4 NSwgMHhkOCwgMHhmMCwgMHgyOSwgMHg1YSwgMHg2OCwgMHg5ZSwgMHhmNSwgMHhmNCwgMHhhNiwg MHgxMiwKLSsgICAgMHhlMCwgMHg5YSwgMHhlMiwgMHhhYywgMHgwMCwgMHgxZCwgMHg5OCwgMHgy NiwgMHhmYywgMHg1MywgMHg5NSwgMHg1MywKLSsgICAgMHhlNCwgMHgzZSwgMHgxNywgMHhkNSwg MHgwOCwgMHgwYiwgMHg3MCwgMHgzZCwgMHg2NywgMHg5OSwgMHhhYywgMHg2NgotK307Ci0rCi0r LyogU0hBLTM4NCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDA3LCAweDE1LCAweDI3 LCAweDJhLCAweGFmLCAweDc0LCAweDI0LCAweDM3LCAweGJjLCAweGQ1LCAweDE0LCAweDY5LAot KyAgICAweGNlLCAweDExLCAweGZmLCAweGEyLCAweDZiLCAweGI4LCAweDA1LCAweDY3LCAweDM0 LCAweGY4LCAweGJkLCAweDZkLAotKyAgICAweDZhLCAweGNjLCAweGNkLCAweDYwLCAweGEzLCAw eDY4LCAweGNhLCAweGY0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMzg0X25vbmNlW10gPSB7Ci0rICAgIDB4NzAsIDB4MTcsIDB4YzIsIDB4 NWIsIDB4NWQsIDB4MjIsIDB4MGIsIDB4MDYsIDB4MTUsIDB4NTQsIDB4NzgsIDB4NzcsCi0rICAg IDB4NDQsIDB4YWYsIDB4MmYsIDB4MDkKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0r ICAgIDB4ODksIDB4MzksIDB4MjgsIDB4YjAsIDB4NjAsIDB4ZWIsIDB4M2QsIDB4ZGMsIDB4NTUs IDB4NzUsIDB4ODYsIDB4ZWIsCi0rICAgIDB4YWUsIDB4YTIsIDB4OGYsIDB4YmMsIDB4MWIsIDB4 NzUsIDB4ZDQsIDB4ZTEsIDB4MGYsIDB4YWEsIDB4MzgsIDB4Y2EsCi0rICAgIDB4NjIsIDB4OGIs IDB4Y2IsIDB4MmMsIDB4MjYsIDB4ZjYsIDB4YmMsIDB4YjEKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0W10g PSB7Ci0rICAgIDB4MzAsIDB4MmIsIDB4NDIsIDB4MzUsIDB4ZWYsIDB4ZGEsIDB4NDAsIDB4NTUs IDB4MjgsIDB4YzYsIDB4OTUsIDB4ZmIsCi0rICAgIDB4NTQsIDB4MDEsIDB4NjIsIDB4ZDcsIDB4 ODcsIDB4MTQsIDB4NDgsIDB4NmQsIDB4OTAsIDB4NGMsIDB4YTksIDB4MDIsCi0rICAgIDB4NTQs IDB4NDAsIDB4MjIsIDB4YzgsIDB4NjYsIDB4YTUsIDB4NDgsIDB4NDgKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfaW50X3JldHVybmVk Yml0c1tdID0gewotKyAgICAweDgyLCAweGM0LCAweGExLCAweDljLCAweDIxLCAweGQyLCAweGU3 LCAweGE1LCAweGE2LCAweGY2LCAweDVmLCAweDA0LAotKyAgICAweDVjLCAweGM3LCAweDMxLCAw eDlkLCAweDhkLCAweDU5LCAweDc0LCAweDUwLCAweDE5LCAweDg5LCAweDJmLCAweDYzLAotKyAg ICAweGQ1LCAweGI3LCAweDdlLCAweGViLCAweDE1LCAweGUzLCAweDcwLCAweDgzLCAweGExLCAw eDI0LCAweDU5LCAweGZhLAotKyAgICAweDJjLCAweDU2LCAweGY2LCAweDg4LCAweDNhLCAweDky LCAweDkzLCAweGExLCAweGZiLCAweDc5LCAweGMxLCAweDdhCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0gewotKyAgICAweDM5LCAweGE2LCAweGU4LCAweDVjLCAweDgyLCAweDE3LCAweDcxLCAw eDI2LCAweDU3LCAweDRmLCAweDlmLCAweGMyLAotKyAgICAweDU1LCAweGZmLCAweDVjLCAweDli LCAweDUzLCAweDFhLCAweGQxLCAweDVmLCAweGJjLCAweDYyLCAweGU0LCAweDI3LAotKyAgICAw eDJkLCAweDMyLCAweGYwLCAweGU0LCAweDUyLCAweDhjLCAweGM1LCAweDBjCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9u YWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDhkLCAweGNiLCAweDhkLCAweGNlLCAweDA4LCAw eGVhLCAweDgwLCAweGU4LCAweDliLCAweDYxLCAweGE4LCAweDBmLAotKyAgICAweGFmLCAweDQ5 LCAweDIwLCAweDllLCAweDc0LCAweGNiLCAweDU3LCAweDgwLCAweDQyLCAweGIwLCAweDg0LCAw eDVlLAotKyAgICAweDMwLCAweDJhLCAweDY3LCAweDA4LCAweGY0LCAweGUzLCAweDQwLCAweDIy Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg3YywgMHg4ZiwgMHhjMiwgMHhhZSwg MHgyMiwgMHg0YSwgMHhkNiwgMHhmNiwgMHgwNSwgMHhhNCwgMHg3YSwgMHhlYSwKLSsgICAgMHhi YiwgMHgyNSwgMHhkMCwgMHhiNywgMHg1YSwgMHhkNiwgMHhjZiwgMHg5ZCwgMHhmMywgMHg2Yywg MHhlMiwgMHhiMiwKLSsgICAgMHg0ZSwgMHhiNCwgMHhiZCwgMHhmNCwgMHhlNSwgMHg0MCwgMHg4 MCwgMHg5NAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTM4NF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg5ZSwgMHg3ZSwgMHhmYiwgMHg1 OSwgMHhiYiwgMHhhYSwgMHgzYywgMHhmNywgMHhlMSwgMHhmOCwgMHg3NiwgMHhkZCwKLSsgICAg MHg2MywgMHg1ZiwgMHhhZiwgMHgyMywgMHhkNiwgMHg2NCwgMHg2MSwgMHhjMCwgMHg5YSwgMHgw OSwgMHg0NywgMHhjOSwKLSsgICAgMHgzMywgMHhkZiwgMHg2ZCwgMHg1NSwgMHg5MSwgMHgzNCwg MHg3OSwgMHg3MCwgMHhjNCwgMHg5OSwgMHg2ZSwgMHg1NCwKLSsgICAgMHgwOSwgMHg2NCwgMHgy MSwgMHgxYSwgMHhiZCwgMHgxZSwgMHg4MCwgMHg0MCwgMHgzNCwgMHhhZCwgMHhmYSwgMHhkNwot K307Ci0rCi0rLyogU0hBLTUxMiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDEzLCAw eGY3LCAweDYxLCAweDc1LCAweDY1LCAweDI4LCAweGEyLCAweDU5LCAweDEzLCAweDVhLCAweDRh LCAweDRmLAotKyAgICAweDU2LCAweDYwLCAweDhjLCAweDUzLCAweDdkLCAweGIwLCAweGJkLCAw eDA2LCAweDRmLCAweGVkLCAweGNjLCAweGQyLAotKyAgICAweGEyLCAweGI1LCAweGZkLCAweDVi LCAweDNhLCAweGFiLCAweGVjLCAweDI4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX25vbmNlW10gPSB7Ci0rICAgIDB4YmUsIDB4 YTMsIDB4OTEsIDB4OTMsIDB4MWQsIDB4YzMsIDB4MzEsIDB4M2EsIDB4MjMsIDB4MzMsIDB4NTAs IDB4NjcsCi0rICAgIDB4ODgsIDB4YzcsIDB4YTIsIDB4YzQKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPSB7Ci0rICAgIDB4MWYsIDB4NTksIDB4NGQsIDB4N2IsIDB4ZTYsIDB4NDYsIDB4 OTEsIDB4NDgsIDB4YzEsIDB4MjUsIDB4ZmEsIDB4ZmYsCi0rICAgIDB4ODksIDB4MTIsIDB4Nzcs IDB4MzUsIDB4ZGYsIDB4M2UsIDB4ZjQsIDB4ODAsIDB4NWYsIDB4ZDksIDB4YjAsIDB4MDcsCi0r ICAgIDB4MjIsIDB4NDEsIDB4ZGQsIDB4NDgsIDB4NzgsIDB4NmIsIDB4NzcsIDB4MmIKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJf YWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4MzAsIDB4ZmYsIDB4NjMsIDB4NmYsIDB4YWMs IDB4ZDksIDB4ODQsIDB4MzksIDB4NmYsIDB4ZTQsIDB4OTksIDB4Y2UsCi0rICAgIDB4OTEsIDB4 N2QsIDB4N2UsIDB4YzgsIDB4NTgsIDB4ZjIsIDB4MTIsIDB4YzMsIDB4YjYsIDB4YWQsIDB4ZGEs IDB4MjIsCi0rICAgIDB4MDQsIDB4YTAsIDB4ZDIsIDB4MjEsIDB4ZmUsIDB4ZjIsIDB4OTUsIDB4 MWQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHg2NCwgMHg1NCwgMHgxMywgMHhl YywgMHg0ZiwgMHg3NywgMHhkYSwgMHhiMiwgMHg5MiwgMHgyZSwgMHg1MiwgMHg4MCwKLSsgICAg MHgxMSwgMHgxMCwgMHhjMiwgMHhmOCwgMHhlNiwgMHhhNywgMHhjZCwgMHg0YiwgMHhmYywgMHgz MiwgMHgyZSwgMHg5ZSwKLSsgICAgMHhlYiwgMHhiYiwgMHhiMSwgMHhiZiwgMHgxNSwgMHg1Yywg MHg3MywgMHgwOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZWYsIDB4MWUs IDB4ZGMsIDB4MGEsIDB4YTQsIDB4MzYsIDB4OTEsIDB4OWMsIDB4M2QsIDB4MjcsIDB4OTcsIDB4 NTAsCi0rICAgIDB4OGQsIDB4MzYsIDB4MjksIDB4OGQsIDB4Y2UsIDB4NmEsIDB4MGMsIDB4Zjcs IDB4MjEsIDB4YzAsIDB4OTEsIDB4YWUsCi0rICAgIDB4MGMsIDB4OTYsIDB4NzIsIDB4YmQsIDB4 NTIsIDB4ODEsIDB4NTgsIDB4ZmMsIDB4NmQsIDB4ZTUsIDB4ZjcsIDB4YTUsCi0rICAgIDB4ZmQs IDB4NWQsIDB4YTcsIDB4NTgsIDB4NjgsIDB4YzgsIDB4OTksIDB4NTgsIDB4OGUsIDB4YzgsIDB4 Y2UsIDB4OTUsCi0rICAgIDB4MDEsIDB4N2QsIDB4ZmYsIDB4YTQsIDB4YzgsIDB4ZjcsIDB4NjMs IDB4ZmUsIDB4NWYsIDB4NjksIDB4ODMsIDB4NTMsCi0rICAgIDB4ZTIsIDB4YzYsIDB4OGIsIDB4 YzMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweGU2LCAweDliLCAweGM0LCAw eDg4LCAweDM0LCAweGNhLCAweGVhLCAweDI5LCAweDJmLCAweDk4LCAweDA1LCAweGE0LAotKyAg ICAweGQzLCAweGMwLCAweDdiLCAweDExLCAweGU4LCAweGJiLCAweDc1LCAweGYyLCAweGJkLCAw eDI5LCAweGI3LCAweDQwLAotKyAgICAweDI1LCAweDdmLCAweGMxLCAweGI3LCAweGIxLCAweGYx LCAweDI1LCAweDYxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweDIzLCAweDZk LCAweGZmLCAweGRlLCAweGZiLCAweGQxLCAweGJhLCAweDMzLCAweDE4LCAweGU2LCAweGJlLCAw eGI1LAotKyAgICAweDQ4LCAweDc3LCAweDZkLCAweDdmLCAweGE3LCAweGUxLCAweDRkLCAweDQ4 LCAweDFlLCAweDNjLCAweGE3LCAweDM0LAotKyAgICAweDFhLCAweGM4LCAweDYwLCAweGRiLCAw eDhmLCAweDk5LCAweDE1LCAweDk5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDcw LCAweDI3LCAweDMxLCAweGRiLCAweDkyLCAweDcwLCAweDIxLCAweGZlLCAweDE2LCAweGI2LCAw eGM4LCAweDUxLAotKyAgICAweDM0LCAweDg3LCAweDY1LCAweGQwLCAweDRlLCAweGZkLCAweGZl LCAweDY4LCAweGVjLCAweGFjLCAweGRjLCAweDkzLAotKyAgICAweDQxLCAweDM4LCAweDkyLCAw eDkwLCAweGI0LCAweDk0LCAweGY5LCAweDBkLCAweGE0LCAweGY3LCAweDRlLCAweDgwLAotKyAg ICAweDkyLCAweDY3LCAweDQ4LCAweDQwLCAweGE3LCAweDA4LCAweGM3LCAweGJjLCAweDY2LCAw eDAwLCAweGZkLCAweGY3LAotKyAgICAweDRjLCAweDhiLCAweDE3LCAweDZlLCAweGQxLCAweDhm LCAweDliLCAweGYzLCAweDZmLCAweGY2LCAweDM0LCAweGRkLAotKyAgICAweDY3LCAweGY3LCAw eDY4LCAweGRkCi0rfTsKLSsKLSsvKiBTSEEtNTEyIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50cm9weWlucHV0W10gPSB7Ci0r ICAgIDB4YjYsIDB4MGIsIDB4YjcsIDB4YmMsIDB4ODQsIDB4NTYsIDB4ZjYsIDB4MTIsIDB4YWYs IDB4NDUsIDB4NjcsIDB4MTcsCi0rICAgIDB4N2MsIDB4ZDEsIDB4YjIsIDB4NzgsIDB4MmIsIDB4 YTAsIDB4ZjIsIDB4YmUsIDB4YjYsIDB4NmQsIDB4OGIsIDB4NTYsCi0rICAgIDB4YzYsIDB4YmMs IDB4NGQsIDB4ZTEsIDB4ZjcsIDB4YmUsIDB4Y2UsIDB4YmQKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfbm9uY2VbXSA9IHsKLSsgICAg MHg5ZCwgMHhlZCwgMHhjMCwgMHhlNSwgMHg1YSwgMHg5OCwgMHg2YSwgMHhjYiwgMHg1MSwgMHg3 ZCwgMHg3NiwgMHgzMSwKLSsgICAgMHg1YSwgMHg2NCwgMHhmMCwgMHhmNwotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhjMiwgMHg2ZCwgMHhhMywgMHhjMywgMHgwNiwgMHg3 NCwgMHhlNSwgMHgwMSwgMHg1YywgMHgxMCwgMHgxNywgMHhjNywKLSsgICAgMHhhZiwgMHg4Mywg MHg5ZCwgMHg1OSwgMHg4ZCwgMHgyZCwgMHgyOSwgMHgzOCwgMHhjNSwgMHg1OSwgMHg3MCwgMHg4 YiwKLSsgICAgMHg0NiwgMHg0OCwgMHgyZCwgMHhjZiwgMHgzNiwgMHg3ZCwgMHg1OSwgMHhjMAot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHhlYywgMHg4YywgMHhkNCwgMHhmNywgMHg2 MSwgMHg2ZSwgMHgwZCwgMHg5NSwgMHg3OSwgMHhiNywgMHgyOCwgMHhhZCwKLSsgICAgMHg1Ziwg MHg2OSwgMHg3NCwgMHg1ZiwgMHgyZCwgMHgzNiwgMHgwNiwgMHg4YSwgMHg2YiwgMHhhYywgMHg1 NCwgMHg5NywKLSsgICAgMHhjNCwgMHhhMSwgMHgxMiwgMHg4NSwgMHgwYSwgMHhkZiwgMHg0Yiwg MHgzNAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ODQsIDB4MmYsIDB4MWYsIDB4 NjgsIDB4NmEsIDB4YTMsIDB4YWQsIDB4MWUsIDB4ZmIsIDB4ZjQsIDB4MTUsIDB4YmQsCi0rICAg IDB4ZGUsIDB4MzgsIDB4ZDQsIDB4MzAsIDB4ODAsIDB4NTEsIDB4ZTksIDB4ZDMsIDB4YzcsIDB4 MjAsIDB4ODgsIDB4ZTksCi0rICAgIDB4ZjUsIDB4Y2MsIDB4ZGYsIDB4NTcsIDB4NWMsIDB4NDcs IDB4MmYsIDB4NTcsIDB4M2MsIDB4NWYsIDB4MTMsIDB4NTYsCi0rICAgIDB4Y2MsIDB4YzUsIDB4 NGYsIDB4ODQsIDB4ZjgsIDB4MTAsIDB4NDEsIDB4ZDUsIDB4N2UsIDB4NTgsIDB4NmUsIDB4MTks Ci0rICAgIDB4MTksIDB4OWUsIDB4YWYsIDB4YzIsIDB4MjIsIDB4NTgsIDB4NDEsIDB4NTAsIDB4 NzksIDB4YzIsIDB4ZDgsIDB4MDQsCi0rICAgIDB4MjgsIDB4ZDQsIDB4MzksIDB4OWEKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfZW50 cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4ZmEsIDB4N2YsIDB4NDYsIDB4NTEsIDB4ODMs IDB4NjIsIDB4OTgsIDB4MTYsIDB4OWEsIDB4MTksIDB4YTIsIDB4NDksCi0rICAgIDB4YTksIDB4 ZTYsIDB4NGEsIDB4ZDgsIDB4ODUsIDB4ZTcsIDB4ZDQsIDB4M2IsIDB4MmMsIDB4ODIsIDB4YzUs IDB4ODIsCi0rICAgIDB4YmYsIDB4MTEsIDB4ZjksIDB4OWUsIDB4YmMsIDB4ZDAsIDB4MDEsIDB4 ZWUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4YjksIDB4MTIsIDB4ZTAs IDB4NGYsIDB4ZjcsIDB4YTcsIDB4YzQsIDB4ZDgsIDB4ZDAsIDB4OGUsIDB4OTksIDB4MjksCi0r ICAgIDB4N2MsIDB4OWEsIDB4ZTksIDB4Y2YsIDB4YzQsIDB4NmMsIDB4ZjgsIDB4YzMsIDB4YTcs IDB4NDEsIDB4ODMsIDB4ZDYsCi0rICAgIDB4MmUsIDB4ZmEsIDB4YjgsIDB4NWUsIDB4OGUsIDB4 NmIsIDB4NzgsIDB4MjAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweGQ3LCAweDA3 LCAweDUyLCAweGI5LCAweDgzLCAweDJjLCAweDAzLCAweDcxLCAweGVlLCAweGM5LCAweGMwLCAw eDg1LAotKyAgICAweGUxLCAweDU3LCAweGIyLCAweGNkLCAweDNhLCAweGYwLCAweGM5LCAweDM0 LCAweDI0LCAweDQxLCAweDFjLCAweDQyLAotKyAgICAweDk5LCAweGIyLCAweDg0LCAweGU5LCAw eDE3LCAweGQyLCAweDc2LCAweDkyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDM2LCAw eDE3LCAweDVkLCAweDk4LCAweDJiLCAweDY1LCAweDI1LCAweDhlLCAweGM4LCAweDI5LCAweGRm LCAweDI3LAotKyAgICAweDA1LCAweDM2LCAweDI2LCAweDEyLCAweDhhLCAweDY4LCAweDc0LCAw eDI3LCAweDM3LCAweGQ0LCAweDdmLCAweDMyLAotKyAgICAweGIxLCAweDEyLCAweGQ2LCAweDg1 LCAweDgzLCAweGViLCAweDJlLCAweGEwLCAweGVkLCAweDRiLCAweGI1LCAweDdiLAotKyAgICAw eDZmLCAweDM5LCAweDNjLCAweDcxLCAweDc3LCAweDAyLCAweDEyLCAweGNjLCAweDJjLCAweDNh LCAweDhlLCAweDYzLAotKyAgICAweGRmLCAweDRhLCAweGJkLCAweDZmLCAweDZlLCAweDJlLCAw eGVkLCAweDBhLCAweDg1LCAweGE1LCAweDJmLCAweGEyLAotKyAgICAweDY4LCAweGRlLCAweDQy LCAweGI1Ci0rfTsKLSsKLSsvKiBITUFDIFNIQS0xIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0W10gPSB7 Ci0rICAgIDB4MjYsIDB4NWYsIDB4MzYsIDB4MTQsIDB4ZmYsIDB4M2QsIDB4ODMsIDB4ZmEsIDB4 NzMsIDB4NWUsIDB4NzUsIDB4ZGMsCi0rICAgIDB4MmMsIDB4MTgsIDB4MTcsIDB4MWIKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFf cHJfbm9uY2VbXSA9IHsKLSsgICAgMHhjOCwgMHhlMywgMHg1NywgMHhhNSwgMHg3YiwgMHg3NCwg MHg4NiwgMHg2ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsg ICAgMHg2ZSwgMHhkYiwgMHgwZCwgMHhmZSwgMHg3ZCwgMHhhYywgMHg3OSwgMHhkMCwgMHhhNSwg MHgzYSwgMHg0OCwgMHg4NSwKLSsgICAgMHg4MCwgMHhlMiwgMHg3ZiwgMHgyYQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHgzMSwgMHhjZCwgMHg1ZSwgMHg0MywgMHhkYywg MHhmYiwgMHg3YSwgMHg3OSwgMHhjYSwgMHg4OCwgMHhkZSwgMHgxZiwKLSsgICAgMHhkNywgMHhi YiwgMHg0MiwgMHgwOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweDdjLCAw eDIzLCAweDk1LCAweDM4LCAweDAwLCAweDk1LCAweGMxLCAweDc4LCAweDFmLCAweDhmLCAweGQ3 LCAweDYzLAotKyAgICAweDIzLCAweDg3LCAweDJhLCAweGVkCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2ludF9yZXR1cm5l ZGJpdHNbXSA9IHsKLSsgICAgMHhiYiwgMHgzNCwgMHhlNywgMHg5MywgMHhhMywgMHgwMiwgMHgy YywgMHg0YSwgMHhkMCwgMHg4OSwgMHhkYSwgMHg3ZiwKLSsgICAgMHhlZCwgMHhmNCwgMHg0Yywg MHhkZSwgMHgxNywgMHhlYywgMHhlNSwgMHg2YwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10g PSB7Ci0rICAgIDB4NDksIDB4YmMsIDB4MmQsIDB4MmMsIDB4YjcsIDB4MzIsIDB4Y2IsIDB4MjAs IDB4ZGYsIDB4ZjUsIDB4NzcsIDB4NTgsCi0rICAgIDB4YTAsIDB4NGIsIDB4OTMsIDB4NmUKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4M2MsIDB4YWEsIDB4YjAsIDB4MjEs IDB4NDIsIDB4YjAsIDB4ZGQsIDB4MzQsIDB4ZjAsIDB4MTYsIDB4N2YsIDB4MGMsCi0rICAgIDB4 MGYsIDB4ZmYsIDB4MmUsIDB4YWYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4 OGUsIDB4Y2IsIDB4YTMsIDB4NjQsIDB4YjIsIDB4YjgsIDB4MzMsIDB4NmMsIDB4NjQsIDB4M2Is IDB4NzgsIDB4MTYsCi0rICAgIDB4OTksIDB4MzUsIDB4YzgsIDB4MzAsIDB4Y2IsIDB4M2UsIDB4 YTAsIDB4ZDgKLSt9OwotKwotKy8qIEhNQUMgU0hBLTEgTm8gUFIgICovCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRyb3B5aW5wdXRbXSA9 IHsKLSsgICAgMHgzMiwgMHg5YSwgMHgyYSwgMHg4NywgMHg3YiwgMHg4OSwgMHg3YywgMHhmNiwg MHhjYiwgMHg5NSwgMHhkNSwgMHg0MCwKLSsgICAgMHgxNywgMHhmZSwgMHg0NywgMHg3MAotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MV9ub25jZVtdID0gewotKyAgICAweDE2LCAweGQ4LCAweGUwLCAweGM3LCAweDUyLCAweGNmLCAw eDRhLCAweDI1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDM1LCAw eDM1LCAweGE5LCAweGE1LCAweDQwLCAweGJlLCAweDliLCAweGQxLCAweDU2LCAweGRkLCAweDQ0 LCAweDAwLAotKyAgICAweDcyLCAweGY3LCAweGQzLCAweDVlCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1 dFtdID0gewotKyAgICAweDFiLCAweDJjLCAweDg0LCAweDJkLCAweDRhLCAweDg5LCAweDhmLCAw eDY5LCAweDE5LCAweGYxLCAweGYzLCAweGRiLAotKyAgICAweGJiLCAweGUzLCAweGFhLCAweGVh Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhjZiwgMHhmYSwgMHg3ZCwgMHg3 MiwgMHgwZiwgMHhlNiwgMHhjNywgMHg5NiwgMHhhMCwgMHg2OSwgMHgzMSwgMHgxMSwKLSsgICAg MHg5YiwgMHgwYiwgMHgxYSwgMHgyMCwgMHgxZiwgMHgzZiwgMHhhYSwgMHhkMQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9lbnRy b3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg5MCwgMHg3NSwgMHgxNSwgMHgwNCwgMHg5NSwg MHhmMSwgMHhiYSwgMHg4MSwgMHgwYywgMHgzNywgMHg5NCwgMHg2ZiwKLSsgICAgMHg4NiwgMHg1 MiwgMHg2ZCwgMHg5YwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg1 YiwgMHg0MCwgMHhiYSwgMHg1ZiwgMHgxNywgMHg3MCwgMHhmMCwgMHg0YiwgMHhkZiwgMHhjOSwg MHg5NywgMHg5MiwKLSsgICAgMHg3OSwgMHhjNSwgMHg4MiwgMHgyOAotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFs aW5wdXQyW10gPSB7Ci0rICAgIDB4OTcsIDB4YzgsIDB4ODAsIDB4OTAsIDB4YjMsIDB4YWEsIDB4 NmUsIDB4NjAsIDB4ZWEsIDB4ODMsIDB4N2EsIDB4ZTMsCi0rICAgIDB4OGEsIDB4Y2EsIDB4YTQs IDB4N2YKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4OTAsIDB4YmQsIDB4MDUsIDB4 NTYsIDB4NmQsIDB4YjUsIDB4MjIsIDB4ZDUsIDB4YjksIDB4NWEsIDB4MjksIDB4MmQsCi0rICAg IDB4ZTksIDB4MGIsIDB4ZTEsIDB4YWMsIDB4ZGUsIDB4MjcsIDB4MGIsIDB4YjAKLSt9OwotKwot Ky8qIEhNQUMgU0hBLTIyNCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4MTcs IDB4MzIsIDB4MmIsIDB4MmUsIDB4NmYsIDB4MWIsIDB4OWMsIDB4NmQsIDB4MzEsIDB4ZTAsIDB4 MzQsIDB4MDcsCi0rICAgIDB4Y2YsIDB4ZWQsIDB4ZjYsIDB4YjYsIDB4NWEsIDB4NzYsIDB4NGMs IDB4YmMsIDB4NjIsIDB4ODUsIDB4MDEsIDB4OTAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9ub25jZVtdID0gewotKyAg ICAweDM4LCAweGJmLCAweDVmLCAweDIwLCAweGIzLCAweDY4LCAweDJmLCAweDQzLCAweDYxLCAw eDA1LCAweDhmLCAweDIzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PSB7Ci0rICAgIDB4YzAsIDB4YzksIDB4NDUsIDB4YWMsIDB4OGQsIDB4MjcsIDB4NzcsIDB4MDgs IDB4MGIsIDB4MTcsIDB4NmQsIDB4ZWQsCi0rICAgIDB4YzEsIDB4N2QsIDB4ZDUsIDB4MDcsIDB4 OWQsIDB4NmUsIDB4ZjgsIDB4MjMsIDB4MmEsIDB4MjIsIDB4MTMsIDB4YmQKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9h ZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHhhNCwgMHgzYywgMHhlNywgMHgzYiwgMHhlYSwg MHgxOSwgMHg0NSwgMHgzMiwgMHhjMiwgMHg4MywgMHg2ZCwgMHgyMSwKLSsgICAgMHg4YSwgMHhj MCwgMHhlZSwgMHg2NywgMHg0NSwgMHhkZSwgMHgxMywgMHg3ZCwgMHg5ZCwgMHg2MSwgMHgwMCwg MHgzYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4MTUsIDB4MDUsIDB4 NzQsIDB4NGEsIDB4N2YsIDB4OGQsIDB4NWMsIDB4NjAsIDB4MTYsIDB4ZTUsIDB4N2IsIDB4YWQs Ci0rICAgIDB4ZjUsIDB4NDEsIDB4OGYsIDB4NTUsIDB4NjAsIDB4YzQsIDB4MDksIDB4ZWUsIDB4 MWUsIDB4MTEsIDB4ODEsIDB4YWIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0r ICAgIDB4NmYsIDB4ZjUsIDB4OWEsIDB4ZTIsIDB4NTQsIDB4NTMsIDB4MzAsIDB4M2QsIDB4NWEs IDB4MjcsIDB4MjksIDB4MzgsCi0rICAgIDB4MjcsIDB4ZjIsIDB4MGQsIDB4MDUsIDB4ZTksIDB4 MjYsIDB4Y2IsIDB4MTYsIDB4YzMsIDB4NTEsIDB4NWYsIDB4MTMsCi0rICAgIDB4NDEsIDB4ZmUs IDB4OTksIDB4ZjIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4NzMs IDB4ODEsIDB4ODgsIDB4ODQsIDB4OGYsIDB4ZWQsIDB4NmYsIDB4MTAsIDB4OWYsIDB4OTMsIDB4 YmYsIDB4MTcsCi0rICAgIDB4MzUsIDB4N2MsIDB4ZWYsIDB4ZDUsIDB4OGQsIDB4MjYsIDB4YTYs IDB4N2EsIDB4ZTgsIDB4MDksIDB4MzYsIDB4NGYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcjJb XSA9IHsKLSsgICAgMHhlNiwgMHhjZiwgMHhjZiwgMHg3ZSwgMHgxMiwgMHhlNSwgMHg0MywgMHhk MiwgMHgzOCwgMHhkOCwgMHgyNCwgMHg2ZiwKLSsgICAgMHg1YSwgMHgzNywgMHg2OCwgMHhiZiwg MHg0ZiwgMHhhMCwgMHhmZiwgMHhkNSwgMHg2MSwgMHg4YSwgMHg5MywgMHhlMAotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3By X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGFmLCAweGY5LCAweGQ4LCAweDE5LCAweDkxLCAw eDMwLCAweDgyLCAweDZmLCAweGE5LCAweDFlLCAweDlkLCAweGQ3LAotKyAgICAweGYzLCAweDUw LCAweGUwLCAweGM3LCAweGQ1LCAweDY0LCAweDk2LCAweDdkLCAweDRjLCAweDRkLCAweDc4LCAw eDAzLAotKyAgICAweDZkLCAweGQ4LCAweDllLCAweDcyCi0rfTsKLSsKLSsvKiBITUFDIFNIQS0y MjQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDExLCAweDgyLCAweGZkLCAw eGQ5LCAweDQyLCAweGY0LCAweGZhLCAweGM4LCAweGYyLCAweDQxLCAweGU2LCAweDU0LAotKyAg ICAweDAxLCAweGFlLCAweDIyLCAweDZlLCAweGM2LCAweGFmLCAweGFmLCAweGQwLCAweGE2LCAw eGIyLCAweGUyLCAweDZkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfbm9uY2VbXSA9IHsKLSsgICAgMHhhOSwgMHg0OCwgMHhk NywgMHg5MiwgMHgzOSwgMHg3ZSwgMHgyYSwgMHhkYywgMHgzMCwgMHgxZiwgMHgwZSwgMHgyYgot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDExLCAweGQ1 LCAweGY0LCAweGJkLCAweDY3LCAweDhjLCAweDMxLCAweGNmLCAweGEzLCAweDNmLCAweDFlLCAw eDZiLAotKyAgICAweGE4LCAweDA3LCAweDAyLCAweDBiLCAweGM4LCAweDJlLCAweDZjLCAweDY0 LCAweDQxLCAweDViLCAweGM4LCAweDM3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0r ICAgIDB4NjgsIDB4MTgsIDB4YzIsIDB4MDYsIDB4ZWIsIDB4M2UsIDB4MDQsIDB4OTUsIDB4NDQs IDB4NWUsIDB4ZmIsIDB4ZTYsCi0rICAgIDB4NDEsIDB4YzEsIDB4NWMsIDB4Y2MsIDB4NDAsIDB4 MmYsIDB4YjcsIDB4ZDIsIDB4MGYsIDB4ZjMsIDB4NmIsIDB4ZTcKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9pbnRfcmV0dXJu ZWRiaXRzW10gPSB7Ci0rICAgIDB4N2YsIDB4NDUsIDB4YzcsIDB4NWQsIDB4MzIsIDB4ZTYsIDB4 MTcsIDB4NjAsIDB4YmEsIDB4ZGMsIDB4YjgsIDB4NDIsCi0rICAgIDB4MWIsIDB4OWMsIDB4ZjEs IDB4ZmEsIDB4M2IsIDB4NGQsIDB4MjksIDB4NTQsIDB4YzYsIDB4OTAsIDB4ZmYsIDB4NWMsCi0r ICAgIDB4Y2QsIDB4ZDYsIDB4YTksIDB4Y2MKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9 IHsKLSsgICAgMHhjNCwgMHg4ZSwgMHgzNywgMHg5NSwgMHg2OSwgMHg1MywgMHgyOCwgMHhkNywg MHgzNywgMHhiYiwgMHg3MCwgMHg5NSwKLSsgICAgMHgxYywgMHgwNywgMHgxZCwgMHhkOSwgMHhi NywgMHhlNiwgMHgxYiwgMHhiYiwgMHhmZSwgMHg0MSwgMHhlYiwgMHhjOQotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDUzLCAweDE3LCAweGExLCAweDZh LCAweGZhLCAweDc3LCAweDQ3LCAweGIwLCAweDk1LCAweDU2LCAweDlhLCAweDIwLAotKyAgICAw eDU3LCAweGRlLCAweDVjLCAweDg5LCAweDlmLCAweDdmLCAweGUyLCAweGRlLCAweDE3LCAweDNh LCAweDUwLCAweDIzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDNhLCAw eDMyLCAweGY5LCAweDg1LCAweDBjLCAweGMxLCAweGVkLCAweDc2LCAweDJkLCAweGRmLCAweDQw LCAweGMzLAotKyAgICAweDA2LCAweDIyLCAweDY2LCAweGQ0LCAweDlhLCAweDlhLCAweGZmLCAw eDVhLCAweDdlLCAweDdhLCAweGYzLCAweDk2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcmV0dXJuZWRiaXRzW10gPSB7Ci0r ICAgIDB4NDMsIDB4YjQsIDB4NTcsIDB4NWMsIDB4MzgsIDB4MjUsIDB4OWQsIDB4YWUsIDB4ZWMs IDB4OTYsIDB4ZDEsIDB4ODUsCi0rICAgIDB4M2EsIDB4ODQsIDB4OGQsIDB4ZmUsIDB4NjgsIDB4 ZDUsIDB4MGUsIDB4NWMsIDB4OGYsIDB4NjUsIDB4YTUsIDB4NGUsCi0rICAgIDB4NDUsIDB4ODQs IDB4YTgsIDB4OTQKLSt9OwotKwotKy8qIEhNQUMgU0hBLTI1NiBQUiAgKi8KLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlu cHV0W10gPSB7Ci0rICAgIDB4NGQsIDB4YjAsIDB4NDMsIDB4ZDgsIDB4MzQsIDB4NGIsIDB4MTAs IDB4NzAsIDB4YjEsIDB4OGIsIDB4ZWQsIDB4ZWEsCi0rICAgIDB4MDcsIDB4OTIsIDB4OWYsIDB4 NmMsIDB4NzksIDB4MzEsIDB4YWYsIDB4ODEsIDB4MjksIDB4ZWIsIDB4NmUsIDB4Y2EsCi0rICAg IDB4MzIsIDB4NDgsIDB4MjgsIDB4ZTcsIDB4MDIsIDB4NWQsIDB4YTYsIDB4YTYKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9ub25jZVtdID0gewotKyAgICAweDNhLCAweGFlLCAweDE1LCAweGE5LCAweDk5LCAweGRjLCAw eGU0LCAweDY3LCAweDM0LCAweDNiLCAweDcwLCAweDE1LAotKyAgICAweGFhLCAweGQzLCAweDMw LCAweDlhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAg IDB4MTMsIDB4MWQsIDB4MjQsIDB4MDQsIDB4YjAsIDB4MTgsIDB4ODEsIDB4MTUsIDB4MjEsIDB4 NTEsIDB4MmEsIDB4MjQsCi0rICAgIDB4NTIsIDB4NjEsIDB4YmUsIDB4NjQsIDB4ODIsIDB4NmIs IDB4NTUsIDB4MmYsIDB4ZTIsIDB4ZjEsIDB4NDAsIDB4N2QsCi0rICAgIDB4NzEsIDB4ZDgsIDB4 MDEsIDB4ODYsIDB4MTUsIDB4YjcsIDB4OGIsIDB4YjUKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9hZGRpdGlvbmFsaW5w dXRbXSA9IHsKLSsgICAgMHg4ZiwgMHhhNiwgMHg1NCwgMHg1ZiwgMHhiMSwgMHhkMCwgMHhkOCwg MHhjMywgMHhlNywgMHgwYywgMHgxNSwgMHhhOSwKLSsgICAgMHgyMywgMHg2ZSwgMHhmZSwgMHhm YiwgMHg5MywgMHhmNywgMHgzYSwgMHhiZCwgMHg1OSwgMHgwMSwgMHhmYSwgMHgxOCwKLSsgICAg MHg4ZSwgMHhlOSwgMHgxYSwgMHhhOSwgMHg3OCwgMHhmYywgMHg3OSwgMHgwYgotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3By X2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4Y2YsIDB4MjQsIDB4YjksIDB4ZWIsIDB4YjMs IDB4ZDQsIDB4Y2QsIDB4MTcsIDB4MzcsIDB4MzgsIDB4NzUsIDB4NzksCi0rICAgIDB4MTUsIDB4 Y2IsIDB4MmQsIDB4NzUsIDB4NTEsIDB4ZjEsIDB4Y2MsIDB4YWEsIDB4MzIsIDB4YTQsIDB4YTcs IDB4MzYsCi0rICAgIDB4N2MsIDB4NWMsIDB4ZTQsIDB4NDcsIDB4ZjEsIDB4M2UsIDB4MWQsIDB4 ZTUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NTIsIDB4NDIsIDB4 ZmEsIDB4ZWIsIDB4ODUsIDB4ZTAsIDB4MzAsIDB4MjIsIDB4NzksIDB4MDAsIDB4MTYsIDB4YjIs Ci0rICAgIDB4ODgsIDB4MmYsIDB4MTQsIDB4NmEsIDB4YjcsIDB4ZmMsIDB4YjcsIDB4NTMsIDB4 ZGMsIDB4NGEsIDB4MTIsIDB4ZWYsCi0rICAgIDB4NTQsIDB4ZDYsIDB4MzMsIDB4ZTksIDB4MjAs IDB4ZDYsIDB4ZmQsIDB4NTYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAg IDB4ZjQsIDB4ZjYsIDB4NDksIDB4YTEsIDB4MmQsIDB4NjQsIDB4MmIsIDB4MzAsIDB4NTgsIDB4 ZjgsIDB4YmQsIDB4YjgsCi0rICAgIDB4NzUsIDB4ZWIsIDB4YmIsIDB4NWUsIDB4MWMsIDB4OWIs IDB4ODEsIDB4NmEsIDB4ZGEsIDB4MTQsIDB4ODYsIDB4NmUsCi0rICAgIDB4ZDAsIDB4ZGEsIDB4 MTgsIDB4YjcsIDB4ODgsIDB4ZmIsIDB4NTksIDB4ZjMKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRw cjJbXSA9IHsKLSsgICAgMHgyMSwgMHhjZCwgMHg2ZSwgMHg0NiwgMHhhZCwgMHg5OSwgMHgwNywg MHgxNywgMHhiNCwgMHgzZCwgMHg3NiwgMHgwYSwKLSsgICAgMHhmZiwgMHg1YiwgMHg1MiwgMHg1 MCwgMHg3OCwgMHhkZiwgMHgxZiwgMHgyNCwgMHgwNiwgMHgwZCwgMHgzZiwgMHg3NCwKLSsgICAg MHhhOSwgMHhjOSwgMHgzNywgMHhjZiwgMHhkOCwgMHgyNiwgMHgyNSwgMHg5MQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3By X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGE3LCAweGFmLCAweDJmLCAweDI5LCAweGUwLCAw eDNhLCAweDcyLCAweDk1LCAweDk2LCAweDFjLCAweGE5LCAweGYwLAotKyAgICAweDRhLCAweDE3 LCAweDRkLCAweDY2LCAweDA2LCAweDEwLCAweGJmLCAweDM5LCAweDg5LCAweDg4LCAweGI4LCAw eDkxLAotKyAgICAweDM3LCAweDE4LCAweDk5LCAweGNmLCAweDhjLCAweDUzLCAweDNiLCAweDdl Ci0rfTsKLSsKLSsvKiBITUFDIFNIQS0yNTYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dFtdID0gewot KyAgICAweDk2LCAweGI3LCAweDUzLCAweDIyLCAweDFlLCAweDUyLCAweDJhLCAweDk2LCAweGIx LCAweDE1LCAweDNjLCAweDM1LAotKyAgICAweDVhLCAweDhiLCAweGQzLCAweDRhLCAweGE2LCAw eDZjLCAweDgzLCAweDBhLCAweDdkLCAweGEzLCAweDIzLCAweDNkLAotKyAgICAweDQzLCAweGEx LCAweDA3LCAweDJjLCAweDJkLCAweGUzLCAweDgxLCAweGNjCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfbm9uY2VbXSA9IHsK LSsgICAgMHhmMSwgMHhhYywgMHg5NywgMHhjYiwgMHg1ZSwgMHgwNiwgMHg0OCwgMHhkMiwgMHg5 NCwgMHhiZSwgMHgxNSwgMHgyZSwKLSsgICAgMHhjNywgMHhmYywgMHhjMiwgMHgwMQotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDk4LCAweGM1LCAweDFl LCAweDM1LCAweDVlLCAweDg5LCAweDBkLCAweGNlLCAweDY0LCAweDZkLCAweDE4LCAweGE3LAot KyAgICAweDVhLCAweGM2LCAweGYzLCAweGU3LCAweGQ2LCAweDllLCAweGMwLCAweGVhLCAweGI3 LCAweDNhLCAweDhkLCAweDY1LAotKyAgICAweGI4LCAweGViLCAweDEwLCAweGQ3LCAweDU3LCAw eDE4LCAweGEwLCAweDMyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4MWIs IDB4MTAsIDB4YWYsIDB4YWMsIDB4ZDAsIDB4NjUsIDB4OTUsIDB4YWQsIDB4MDQsIDB4YWQsIDB4 MDMsIDB4MWMsCi0rICAgIDB4ZTAsIDB4NDAsIDB4ZDYsIDB4M2UsIDB4MWMsIDB4NDYsIDB4NTMs IDB4MzksIDB4N2MsIDB4ZTIsIDB4YmMsIDB4ZGEsCi0rICAgIDB4OGMsIDB4YTIsIDB4MzMsIDB4 YTcsIDB4OWEsIDB4MjYsIDB4ZDMsIDB4MjcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7 Ci0rICAgIDB4YmEsIDB4NjEsIDB4MGUsIDB4NTUsIDB4ZmUsIDB4MTEsIDB4OGEsIDB4OWUsIDB4 MGYsIDB4ODAsIDB4ZGYsIDB4MWQsCi0rICAgIDB4MDMsIDB4MGEsIDB4ZmUsIDB4MTUsIDB4OTQs IDB4MjgsIDB4NGIsIDB4YmEsIDB4ZjQsIDB4OWYsIDB4NTEsIDB4MjUsCi0rICAgIDB4ODgsIDB4 ZTUsIDB4NGUsIDB4ZmIsIDB4YWYsIDB4Y2UsIDB4NjksIDB4OTAKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5w dXRyZXNlZWRbXSA9IHsKLSsgICAgMHg2MiwgMHg3ZiwgMHgxZSwgMHg2YiwgMHhlOCwgMHg4ZSwg MHhlMSwgMHgzNSwgMHg3ZCwgMHg5YiwgMHg0ZiwgMHhjNywKLSsgICAgMHhlYywgMHhjOCwgMHhh YywgMHhlZiwgMHg2YiwgMHgxMywgMHg5ZSwgMHgwNSwgMHg1NiwgMHhjMSwgMHgwOCwgMHhmOSwK LSsgICAgMHgyZiwgMHgwZiwgMHgyNywgMHg5YywgMHhkNCwgMHgxNSwgMHhlZCwgMHgyZAotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweGM3LCAweDc2LCAw eDZlLCAweGE5LCAweGQyLCAweGIyLCAweDc2LCAweDQwLCAweDgyLCAweDI1LCAweDJjLCAweGIz LAotKyAgICAweDZmLCAweGFjLCAweGU5LCAweDc0LCAweGVmLCAweDhmLCAweDNjLCAweDhlLCAw eGNkLCAweGYxLCAweGJmLCAweGIzLAotKyAgICAweDQ5LCAweDc3LCAweDM0LCAweDg4LCAweDUy LCAweDM2LCAweGU2LCAweDJlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAw eDhkLCAweGI4LCAweDBjLCAweGQxLCAweGJmLCAweDcwLCAweGY2LCAweDE5LCAweGMzLCAweDQx LCAweDgwLCAweDlmLAotKyAgICAweGUxLCAweGE1LCAweGE0LCAweDFmLCAweDJjLCAweDI2LCAw eGIxLCAweGU1LCAweGQ4LCAweGViLCAweGJlLCAweGY4LAotKyAgICAweGRmLCAweDg4LCAweDZh LCAweDg5LCAweGQ2LCAweDA1LCAweGQ4LCAweDlkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcmV0dXJuZWRiaXRzW10gPSB7 Ci0rICAgIDB4NDMsIDB4MTIsIDB4MmEsIDB4MmMsIDB4NDAsIDB4NTMsIDB4MmUsIDB4N2MsIDB4 NjYsIDB4MzQsIDB4YWMsIDB4YzMsCi0rICAgIDB4NDMsIDB4ZTMsIDB4ZTAsIDB4NmEsIDB4ZmMs IDB4ZmEsIDB4ZWEsIDB4ODcsIDB4MjEsIDB4MWYsIDB4ZTIsIDB4MjYsCi0rICAgIDB4YzQsIDB4 ZjksIDB4MDksIDB4OWEsIDB4MGQsIDB4NmUsIDB4N2YsIDB4ZTAKLSt9OwotKwotKy8qIEhNQUMg U0hBLTM4NCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4NjksIDB4ODEsIDB4 OTgsIDB4ODgsIDB4NDQsIDB4ZjUsIDB4ZDYsIDB4MmUsIDB4MDAsIDB4MDgsIDB4M2IsIDB4YzUs Ci0rICAgIDB4ZmIsIDB4ZDcsIDB4OGUsIDB4NmYsIDB4MjMsIDB4ZjgsIDB4NmQsIDB4MDksIDB4 ZDYsIDB4ODUsIDB4NDksIDB4ZDEsCi0rICAgIDB4ZjgsIDB4NmQsIDB4YTQsIDB4NTgsIDB4NTQs IDB4ZmQsIDB4ODgsIDB4YTkKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9ub25jZVtdID0gewotKyAgICAweDZlLCAweDM4 LCAweDgxLCAweGNhLCAweGI3LCAweGU4LCAweDZlLCAweDY2LCAweDQ5LCAweDhhLCAweGIyLCAw eDU5LAotKyAgICAweGVlLCAweDE2LCAweGM5LCAweGRlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4ZmUsIDB4NGMsIDB4ZDksIDB4ZjQsIDB4Nzgs IDB4M2IsIDB4MDgsIDB4NDEsIDB4OGQsIDB4OGYsIDB4NTUsIDB4YzQsCi0rICAgIDB4NDMsIDB4 NTYsIDB4YjYsIDB4MTIsIDB4MzYsIDB4NmIsIDB4MzAsIDB4YjcsIDB4NWUsIDB4ZTEsIDB4Yjks IDB4NDcsCi0rICAgIDB4MDQsIDB4YjEsIDB4NGUsIDB4YTksIDB4MDAsIDB4YTEsIDB4NTIsIDB4 YTEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg4OSwgMHhlOSwgMHhj YywgMHg4ZiwgMHgyNywgMHgzYywgMHgyNiwgMHhkMSwgMHg5NSwgMHhjOCwgMHg3ZCwgMHgwZiwK LSsgICAgMHg1YiwgMHgxYSwgMHhmMCwgMHg3OCwgMHgzOSwgMHg1NiwgMHg2ZiwgMHhhNCwgMHgy MywgMHhlNywgMHhkMSwgMHhkYSwKLSsgICAgMHg3YywgMHg2NiwgMHgzMywgMHhhMCwgMHg5MCwg MHhjOSwgMHg5MiwgMHg4OAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4 YmUsIDB4M2QsIDB4N2MsIDB4MGQsIDB4Y2EsIDB4ZGEsIDB4N2MsIDB4NDksIDB4YjgsIDB4MTIs IDB4MzYsIDB4YzAsCi0rICAgIDB4ZGIsIDB4YWQsIDB4MzUsIDB4YTgsIDB4YzcsIDB4MGIsIDB4 MmEsIDB4MmMsIDB4NjksIDB4NmQsIDB4MjUsIDB4NTYsCi0rICAgIDB4NjMsIDB4ODIsIDB4MTEs IDB4M2UsIDB4YTcsIDB4MzMsIDB4NzAsIDB4NzIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPSB7Ci0rICAgIDB4ODIsIDB4M2QsIDB4ZTYsIDB4NTQsIDB4ODAsIDB4NDIsIDB4ZjgsIDB4 YmEsIDB4OTAsIDB4NGYsIDB4MDYsIDB4YTYsCi0rICAgIDB4ZDIsIDB4N2YsIDB4YmYsIDB4Nzks IDB4N2MsIDB4MTIsIDB4N2QsIDB4YTYsIDB4YTIsIDB4NjYsIDB4ZTgsIDB4YTYsCi0rICAgIDB4 YzAsIDB4ZDYsIDB4NGEsIDB4NTUsIDB4YmYsIDB4ZDgsIDB4MGEsIDB4YzUsIDB4ZjgsIDB4MDMs IDB4ODgsIDB4ZGQsCi0rICAgIDB4OGUsIDB4ODcsIDB4ZDEsIDB4NWEsIDB4NDgsIDB4MjYsIDB4 NzIsIDB4MmEsIDB4OGUsIDB4Y2YsIDB4ZWUsIDB4YmEKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9hZGRpdGlvbmFsaW5w dXQyW10gPSB7Ci0rICAgIDB4OGYsIDB4ZmYsIDB4ZDksIDB4ODQsIDB4YmIsIDB4ODUsIDB4M2Es IDB4NjYsIDB4YTEsIDB4MjEsIDB4Y2UsIDB4YjIsCi0rICAgIDB4M2EsIDB4M2EsIDB4MTcsIDB4 MjIsIDB4MTksIDB4YWUsIDB4YzcsIDB4YjYsIDB4NjMsIDB4ODEsIDB4ZDUsIDB4ZmYsCi0rICAg IDB4MGQsIDB4YzgsIDB4ZTEsIDB4YWYsIDB4NTcsIDB4ZDIsIDB4Y2IsIDB4NjAKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHhkNywgMHhmYiwgMHhjOSwgMHhlOCwgMHhl MiwgMHhmMiwgMHhhYSwgMHg0YywgMHhiOCwgMHg1MSwgMHgyZiwgMHhlMSwKLSsgICAgMHgyMiwg MHhiYSwgMHhmMywgMHhkYSwgMHgwYSwgMHgxOSwgMHg3NiwgMHg3MSwgMHg1NywgMHhiMiwgMHgx ZCwgMHg5NCwKLSsgICAgMHgwOSwgMHg2OSwgMHg2YywgMHhkMywgMHg5NywgMHg1MSwgMHg4MSwg MHg4NwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweGU2LCAweDE5LCAweDI4 LCAweGE4LCAweDIxLCAweGNlLCAweDVlLCAweGRiLCAweDI0LCAweDc5LCAweDhjLCAweDc2LAot KyAgICAweDVkLCAweDczLCAweGIyLCAweGRmLCAweGFjLCAweGVmLCAweDg1LCAweGE3LCAweDNi LCAweDE5LCAweDA5LCAweDhiLAotKyAgICAweDdmLCAweDk4LCAweDI4LCAweGE5LCAweDkzLCAw eGQ4LCAweDdhLCAweGFkLCAweDU1LCAweDhiLCAweDI0LCAweDlkLAotKyAgICAweGU2LCAweDk4 LCAweGZlLCAweDQ3LCAweGQ1LCAweDQ4LCAweGMxLCAweDIzLCAweGQ4LCAweDFkLCAweDYyLCAw eDc1Ci0rfTsKLSsKLSsvKiBITUFDIFNIQS0zODQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dFtdID0g ewotKyAgICAweGMzLCAweDU2LCAweDJiLCAweDFkLCAweGMyLCAweGJiLCAweGE4LCAweGYwLCAw eGFlLCAweDFiLCAweDBkLCAweGQzLAotKyAgICAweDVhLCAweDZjLCAweGRhLCAweDU3LCAweDhl LCAweGE1LCAweDhhLCAweDBkLCAweDZjLCAweDRiLCAweDE4LCAweGIxLAotKyAgICAweDA0LCAw eDNlLCAweGI0LCAweDk5LCAweDM1LCAweGM0LCAweGMwLCAweDVmCi0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfbm9uY2VbXSA9 IHsKLSsgICAgMHhjNSwgMHg0OSwgMHgxZSwgMHg2NiwgMHgyNywgMHg5MiwgMHhiZSwgMHhlYywg MHhiNSwgMHgxZSwgMHg0YiwgMHhiMSwKLSsgICAgMHgzOCwgMHhlMywgMHhlYiwgMHg2MgotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweGJlLCAweGU3LCAw eDZiLCAweDU3LCAweGRlLCAweDg4LCAweDExLCAweDk2LCAweDliLCAweDZlLCAweGVhLCAweGU1 LAotKyAgICAweDYzLCAweDgzLCAweDRjLCAweGI2LCAweDhkLCAweDY2LCAweGFhLCAweDFmLCAw eDhiLCAweDU0LCAweGU3LCAweDYyLAotKyAgICAweDZkLCAweDVhLCAweGZjLCAweGJmLCAweDk3 LCAweGJhLCAweGNkLCAweDc3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4 ZTUsIDB4MjgsIDB4NWYsIDB4NDMsIDB4ZjUsIDB4ODMsIDB4NmUsIDB4MGEsIDB4ODMsIDB4NWMs IDB4ZTMsIDB4ODEsCi0rICAgIDB4MDMsIDB4ZjIsIDB4ZjgsIDB4NzgsIDB4MDAsIDB4N2MsIDB4 OTUsIDB4ODcsIDB4MTYsIDB4ZDYsIDB4NmMsIDB4NTgsCi0rICAgIDB4MzMsIDB4NmMsIDB4NTMs IDB4MzUsIDB4MGQsIDB4NjYsIDB4ZTMsIDB4Y2UKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9pbnRfcmV0dXJuZWRiaXRzW10g PSB7Ci0rICAgIDB4ZTIsIDB4MWYsIDB4ZjMsIDB4ZGEsIDB4MGQsIDB4MTksIDB4OTksIDB4ODcs IDB4YzQsIDB4OTAsIDB4YTIsIDB4MzEsCi0rICAgIDB4Y2EsIDB4MmEsIDB4ODksIDB4NTgsIDB4 NDMsIDB4NDQsIDB4YjgsIDB4ZGUsIDB4Y2YsIDB4YTQsIDB4YmUsIDB4M2IsCi0rICAgIDB4NTMs IDB4MjYsIDB4MjIsIDB4MzEsIDB4NzYsIDB4NDEsIDB4MjIsIDB4YjUsIDB4YTgsIDB4NzAsIDB4 MmYsIDB4NGIsCi0rICAgIDB4NjQsIDB4OTUsIDB4NGQsIDB4NDgsIDB4OTYsIDB4MzUsIDB4ZTYs IDB4YmQsIDB4M2MsIDB4MzQsIDB4ZGIsIDB4MWIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9IHsKLSsgICAgMHg3NywgMHg2MSwgMHhiYSwgMHhiYywgMHhmMiwgMHhjMSwgMHhmMywgMHg0 YiwgMHg4NiwgMHg2NSwgMHhmZCwgMHg0OCwKLSsgICAgMHgwZSwgMHgzYywgMHgwMiwgMHg1ZSwg MHhhMiwgMHg3YSwgMHg2YiwgMHg3YywgMHhlZCwgMHgyMSwgMHg1ZSwgMHhmOSwKLSsgICAgMHhj ZCwgMHhjZCwgMHg3NywgMHgwNywgMHgyYiwgMHhiZSwgMHhjNSwgMHg1YwotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDE4LCAweDI0LCAweDVmLCAweGM2 LCAweDg0LCAweGQxLCAweDY3LCAweGMzLCAweDlhLCAweDExLCAweGE1LCAweDhjLAotKyAgICAw eDA3LCAweDM5LCAweDIxLCAweDgzLCAweDRkLCAweDA0LCAweGM0LCAweDZhLCAweDI4LCAweDE5 LCAweGNmLCAweDkyLAotKyAgICAweDIxLCAweGQ5LCAweDllLCAweDQxLCAweDcyLCAweDZjLCAw eDllLCAweDYzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDk2LCAweDY3 LCAweDQxLCAweDI4LCAweDliLCAweGI3LCAweDkyLCAweDhkLCAweDY0LCAweDNiLCAweGU0LCAw eGNmLAotKyAgICAweDdlLCAweGFhLCAweDFlLCAweGIxLCAweDRiLCAweDFkLCAweDA5LCAweDU2 LCAweDY3LCAweDljLCAweGM2LCAweDZkLAotKyAgICAweDNiLCAweGU4LCAweDkxLCAweDlkLCAw eGUxLCAweDhhLCAweGI3LCAweDMyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4 ZTMsIDB4NTksIDB4NjEsIDB4MzgsIDB4OTIsIDB4ZWMsIDB4ZTIsIDB4M2MsIDB4ZmYsIDB4Yjcs IDB4ZGIsIDB4MTksCi0rICAgIDB4MGYsIDB4NWIsIDB4OTMsIDB4NjgsIDB4MGQsIDB4YTQsIDB4 OTQsIDB4NDAsIDB4NzIsIDB4MGIsIDB4ZTAsIDB4ZWQsCi0rICAgIDB4NGQsIDB4Y2QsIDB4Njgs IDB4YTAsIDB4MWUsIDB4ZmUsIDB4NjcsIDB4YjIsIDB4ZmEsIDB4MjEsIDB4NTYsIDB4NzQsCi0r ICAgIDB4YTQsIDB4YWQsIDB4Y2YsIDB4YjcsIDB4NjAsIDB4NjYsIDB4MmUsIDB4NDAsIDB4ZGUs IDB4ODIsIDB4Y2EsIDB4ZmIKLSt9OwotKwotKy8qIEhNQUMgU0hBLTUxMiBQUiAgKi8KLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50 cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YWEsIDB4OWUsIDB4NDUsIDB4NjcsIDB4MGUsIDB4MDAs IDB4MmEsIDB4NjcsIDB4OTgsIDB4ZDYsIDB4ZGEsIDB4MGIsCi0rICAgIDB4MGYsIDB4MTcsIDB4 N2UsIDB4YWMsIDB4ZmQsIDB4MjcsIDB4YzQsIDB4Y2EsIDB4ODQsIDB4ZGYsIDB4ZGUsIDB4YmEs Ci0rICAgIDB4ODUsIDB4ZDksIDB4YmUsIDB4OGYsIDB4ZjMsIDB4ZmYsIDB4OTEsIDB4NGQKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9wcl9ub25jZVtdID0gewotKyAgICAweDhjLCAweDQ5LCAweDJmLCAweDU4LCAweDFlLCAw eDdhLCAweGRhLCAweDRiLCAweDdlLCAweDhhLCAweDMwLCAweDdiLAotKyAgICAweDg2LCAweGVh LCAweGFmLCAweGEyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7 Ci0rICAgIDB4NzEsIDB4ZTEsIDB4YmIsIDB4YWQsIDB4YTcsIDB4NGIsIDB4MmUsIDB4MzEsIDB4 M2IsIDB4MGIsIDB4ZWMsIDB4MjQsCi0rICAgIDB4OTksIDB4MzgsIDB4YmMsIDB4YWEsIDB4MDUs IDB4NGMsIDB4NDYsIDB4NDQsIDB4ZmEsIDB4YWQsIDB4OGUsIDB4MDIsCi0rICAgIDB4YzEsIDB4 N2UsIDB4YWQsIDB4ZWMsIDB4NTQsIDB4YTYsIDB4ZDAsIDB4YWQKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9hZGRpdGlv bmFsaW5wdXRbXSA9IHsKLSsgICAgMHgzZCwgMHg2ZSwgMHhhNiwgMHhhOCwgMHgyOSwgMHgyYSwg MHhiMiwgMHhmNSwgMHg5OCwgMHg0MiwgMHhlNCwgMHg5MiwKLSsgICAgMHg3OCwgMHgyMiwgMHg2 NywgMHhmZCwgMHgxYiwgMHgxNSwgMHgxZSwgMHgyOSwgMHhhYSwgMHg3MSwgMHgzYywgMHgzYywK LSsgICAgMHhlNywgMHgwNSwgMHgyMCwgMHhhOSwgMHgyOSwgMHhjNiwgMHg3NSwgMHg3MQotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh NTEyX3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4YWIsIDB4YjksIDB4MTYsIDB4ZDgs IDB4NTUsIDB4MzUsIDB4NTQsIDB4YjcsIDB4OTcsIDB4M2YsIDB4OTQsIDB4YmMsCi0rICAgIDB4 MmYsIDB4N2MsIDB4NzAsIDB4YzcsIDB4ZDAsIDB4ZWQsIDB4YjcsIDB4NGIsIDB4ZjcsIDB4ZjYs IDB4NmMsIDB4MDMsCi0rICAgIDB4MGMsIDB4YjAsIDB4MDMsIDB4ZDgsIDB4YmIsIDB4NzEsIDB4 ZDksIDB4MTAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTUxMl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4OGUsIDB4 ZDMsIDB4ZmQsIDB4NTIsIDB4OWUsIDB4ODMsIDB4MDgsIDB4NDksIDB4MTgsIDB4NmUsIDB4MjMs IDB4NTYsCi0rICAgIDB4NWMsIDB4NDUsIDB4OTMsIDB4MzQsIDB4MDUsIDB4ZTIsIDB4OTgsIDB4 OGYsIDB4MGMsIDB4ZDQsIDB4MzIsIDB4MGMsCi0rICAgIDB4ZmQsIDB4ZGEsIDB4NWYsIDB4OTIs IDB4M2EsIDB4OGMsIDB4ODEsIDB4YmQsIDB4ZjYsIDB4NmMsIDB4NTUsIDB4ZmQsCi0rICAgIDB4 YjgsIDB4MjAsIDB4Y2UsIDB4OGQsIDB4OTcsIDB4MjcsIDB4ZTgsIDB4ZTgsIDB4ZTAsIDB4YjMs IDB4ODUsIDB4NTAsCi0rICAgIDB4YTIsIDB4YzIsIDB4YjIsIDB4OTUsIDB4MWQsIDB4NDgsIDB4 ZDMsIDB4N2IsIDB4NGIsIDB4NzgsIDB4MTMsIDB4MzUsCi0rICAgIDB4MDUsIDB4MTcsIDB4YmUs IDB4MGQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4YzMsIDB4ZmMs IDB4OTUsIDB4YWEsIDB4NjksIDB4MDYsIDB4YWUsIDB4NTksIDB4NDEsIDB4Y2UsIDB4MjYsIDB4 MDgsCi0rICAgIDB4MjksIDB4NmQsIDB4NDUsIDB4ZGEsIDB4ZTgsIDB4YjMsIDB4NmMsIDB4OTUs IDB4NjAsIDB4MGYsIDB4NzAsIDB4MmMsCi0rICAgIDB4MTAsIDB4YmEsIDB4MzgsIDB4OGMsIDB4 Y2YsIDB4MjksIDB4OTksIDB4YWEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsg ICAgMHgzYiwgMHg5YSwgMHgyNSwgMHhjZSwgMHhkNywgMHhmOSwgMHg1YywgMHhkMSwgMHgzYSwg MHgzZSwgMHhhYSwgMHg3MSwKLSsgICAgMHgxNCwgMHgzZSwgMHgxOSwgMHhlOCwgMHhjZSwgMHhl NiwgMHhmZSwgMHg1MSwgMHg4NCwgMHhlOSwgMHgxYiwgMHhmZSwKLSsgICAgMHgzZiwgMHhhNywg MHhmMiwgMHhmZCwgMHg3NiwgMHg1ZiwgMHg2YSwgMHhlNwotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3JldHVybmVkYml0 c1tdID0gewotKyAgICAweGI3LCAweDgyLCAweGE5LCAweDU3LCAweDgxLCAweDY3LCAweDUzLCAw eGI1LCAweGExLCAweGU5LCAweDNkLCAweDM1LAotKyAgICAweGY5LCAweGU0LCAweDk3LCAweGJl LCAweGE2LCAweGNhLCAweGYxLCAweDAxLCAweDEzLCAweDA5LCAweGU3LCAweDIxLAotKyAgICAw eGMwLCAweGVkLCAweDkzLCAweDVkLCAweDRiLCAweGY0LCAweGViLCAweDhkLCAweDUzLCAweDI1 LCAweDhhLCAweGM0LAotKyAgICAweGIxLCAweDZmLCAweDZlLCAweDM3LCAweGNkLCAweDJlLCAw eGFjLCAweDM5LCAweGIyLCAweGI2LCAweDk5LCAweGEzLAotKyAgICAweDgyLCAweDAwLCAweGIw LCAweDIxLCAweGYwLCAweGM3LCAweDJmLCAweDRjLCAweDczLCAweDkyLCAweGZkLCAweDAwLAot KyAgICAweGI2LCAweGFmLCAweGJjLCAweGQzCi0rfTsKLSsKLSsvKiBITUFDIFNIQS01MTIgTm8g UFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhNTEyX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDZlLCAweDg1LCAweGU2LCAweDI1LCAw eDk2LCAweDI5LCAweGE3LCAweDUyLCAweDViLCAweDYwLCAweGJhLCAweGFhLAotKyAgICAweGRl LCAweGRiLCAweDM2LCAweDBhLCAweDUxLCAweDlhLCAweDE1LCAweGFlLCAweDZlLCAweDE4LCAw eGQzLCAweGZlLAotKyAgICAweDM5LCAweGI5LCAweDRhLCAweDk2LCAweGY4LCAweDc3LCAweGNi LCAweDk1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGE1MTJfbm9uY2VbXSA9IHsKLSsgICAgMHhlMCwgMHhhNiwgMHg1ZCwgMHgwOCwg MHhjMywgMHg3YywgMHhhZSwgMHgyNSwgMHgyZSwgMHg4MCwgMHhkMSwgMHgzZSwKLSsgICAgMHhk OSwgMHhhZiwgMHg0MywgMHgzYwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0gewotKyAgICAweDUzLCAweDk5LCAweDUyLCAweDVmLCAweDExLCAweGE5LCAweDY0LCAweDY2 LCAweDIwLCAweDVlLCAweDFiLCAweDVmLAotKyAgICAweDQyLCAweGIzLCAweGY0LCAweGRhLCAw eGVkLCAweGJiLCAweDYzLCAweGMxLCAweDIzLCAweGFmLCAweGQwLCAweDAxLAotKyAgICAweDkw LCAweDNiLCAweGQwLCAweDc4LCAweGU0LCAweDBiLCAweGE3LCAweDIwCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRp b25hbGlucHV0W10gPSB7Ci0rICAgIDB4ODUsIDB4OTAsIDB4ODAsIDB4ZDMsIDB4OTgsIDB4ZjEs IDB4NTMsIDB4NmQsIDB4NjgsIDB4MTUsIDB4OGYsIDB4ZTUsCi0rICAgIDB4NjAsIDB4M2YsIDB4 MTcsIDB4MjksIDB4NTUsIDB4OGQsIDB4MzMsIDB4YjEsIDB4NDUsIDB4NjQsIDB4NjQsIDB4OGQs Ci0rICAgIDB4NTAsIDB4MjEsIDB4ODksIDB4YWUsIDB4ZjYsIDB4ZmQsIDB4MzIsIDB4NzMKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MjgsIDB4NTYsIDB4MzAsIDB4NmYs IDB4ZjQsIDB4YTEsIDB4NDgsIDB4ZTAsIDB4YzksIDB4ZjUsIDB4NzUsIDB4OTAsCi0rICAgIDB4 Y2MsIDB4ZmIsIDB4ZGYsIDB4ZGYsIDB4NzEsIDB4M2QsIDB4MGEsIDB4OWEsIDB4MDMsIDB4NjUs IDB4M2IsIDB4MTgsCi0rICAgIDB4NjEsIDB4ZTMsIDB4ZDEsIDB4ZGEsIDB4Y2MsIDB4NGEsIDB4 ZmUsIDB4NTUsIDB4MzgsIDB4ZjgsIDB4MjEsIDB4NmIsCi0rICAgIDB4ZmEsIDB4MTgsIDB4MDEs IDB4NDIsIDB4MzksIDB4MmYsIDB4OTksIDB4NTMsIDB4MzgsIDB4MTUsIDB4ODIsIDB4MzQsCi0r ICAgIDB4YzUsIDB4OTMsIDB4OTIsIDB4YmMsIDB4NGQsIDB4NzUsIDB4MWEsIDB4NWYsIDB4MjEs IDB4MjcsIDB4Y2MsIDB4YTEsCi0rICAgIDB4YjEsIDB4NTcsIDB4NjksIDB4ZTgKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9l bnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg4YywgMHg1MiwgMHg3ZSwgMHg3NywgMHg3 MiwgMHgzZiwgMHhhMywgMHgwNCwgMHg5NywgMHgxMCwgMHg5YiwgMHg0MSwKLSsgICAgMHhiZCwg MHhlOCwgMHhmZiwgMHg4OSwgMHhlZCwgMHg4MCwgMHhlMywgMHhiZCwgMHhhYSwgMHgxMiwgMHgy ZCwgMHhjYSwKLSsgICAgMHg3NSwgMHg4MiwgMHgzNiwgMHg3NywgMHg4OCwgMHhjZCwgMHhhNiwg MHg3MwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDdl LCAweDMyLCAweGUzLCAweDY5LCAweDY5LCAweDA3LCAweDM0LCAweGEyLCAweDE2LCAweGEyLCAw eDVkLCAweDFhLAotKyAgICAweDEwLCAweDkxLCAweGQzLCAweGUyLCAweDIxLCAweGEyLCAweGEz LCAweGRkLCAweGNkLCAweDBjLCAweDA5LCAweDg2LAotKyAgICAweDExLCAweGUxLCAweDUwLCAw eGZmLCAweDVjLCAweGI3LCAweGViLCAweDVjCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0MltdID0g ewotKyAgICAweDdmLCAweDc4LCAweDY2LCAweGQ4LCAweGZiLCAweDY3LCAweGNmLCAweDhkLCAw eDhjLCAweDA4LCAweDMwLCAweGE1LAotKyAgICAweGY4LCAweDdkLCAweGNmLCAweDQ0LCAweDU5 LCAweGNlLCAweGY4LCAweGRmLCAweDU4LCAweGQzLCAweDYwLCAweGNiLAotKyAgICAweGE4LCAw eDYwLCAweGI5LCAweDA3LCAweGM0LCAweGIxLCAweDk1LCAweDQ4Ci0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcmV0dXJuZWRi aXRzW10gPSB7Ci0rICAgIDB4ZGYsIDB4YTcsIDB4MzYsIDB4ZDQsIDB4ZGMsIDB4NWQsIDB4NGQs IDB4MzEsIDB4YWQsIDB4NjksIDB4NDYsIDB4OWYsCi0rICAgIDB4ZjEsIDB4N2MsIDB4ZDcsIDB4 M2IsIDB4NGYsIDB4NTUsIDB4ZjIsIDB4ZDcsIDB4YjksIDB4OWQsIDB4YWQsIDB4N2EsCi0rICAg IDB4NzksIDB4MDgsIDB4NTksIDB4YTUsIDB4ZGMsIDB4NzQsIDB4ZjUsIDB4OWIsIDB4NzMsIDB4 ZDIsIDB4MTMsIDB4MjUsCi0rICAgIDB4MGIsIDB4ODEsIDB4MDgsIDB4MDgsIDB4MjUsIDB4ZmIs IDB4MzksIDB4ZjIsIDB4ZjAsIDB4YTMsIDB4YTQsIDB4OGQsCi0rICAgIDB4ZWYsIDB4MDUsIDB4 OWUsIDB4YjgsIDB4YzcsIDB4NTIsIDB4ZTQsIDB4MGUsIDB4NDIsIDB4YWEsIDB4N2MsIDB4Nzks Ci0rICAgIDB4YzIsIDB4ZDYsIDB4ZmQsIDB4YTUKLSt9OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v Zmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjU1NjI1 OTggKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVz dC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY1NTYyNTk4ICswMTAwCi1AQCAtMCwwICsxLDE5MiBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVk ZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcFtdID0gewotKyAgICAweGE4LCAweDUzLCAw eDc4LCAweGQ4LCAweGZkLCAweDNmLCAweDhkLCAweDcyLCAweGVjLCAweDc0LCAweDE4LCAweDA4 LAotKyAgICAweDBkLCAweGEyLCAweDEzLCAweDE3LCAweGU0LCAweDNlLCAweGM0LCAweGI2LCAw eDJiLCAweGE4LCAweGM4LCAweDYyLAotKyAgICAweDNiLCAweDdlLCAweDRkLCAweDA0LCAweDQ0 LCAweDFkLCAweGQxLCAweGEwLCAweDY1LCAweDg2LCAweDYyLCAweDU5LAotKyAgICAweDY0LCAw eDkzLCAweGNhLCAweDhlLCAweDllLCAweDhmLCAweGJiLCAweDdlLCAweDM0LCAweGFhLCAweGRk LCAweGI2LAotKyAgICAweDJlLCAweDVkLCAweDY3LCAweGI2LCAweGQwLCAweDlhLCAweDZlLCAw eDYxLCAweGI3LCAweDY5LCAweGU3LCAweGMzLAotKyAgICAweDUyLCAweGFhLCAweDJiLCAweDEw LCAweGUyLCAweDBjLCAweGEwLCAweDYzLCAweDY5LCAweDYzLCAweGI1LCAweDUyLAotKyAgICAw eDNlLCAweDg2LCAweDQ3LCAweDBkLCAweGVjLCAweGJiLCAweGVkLCAweGEwLCAweDI3LCAweGU3 LCAweDk3LCAweGU3LAotKyAgICAweGI2LCAweDc2LCAweDM1LCAweGQ0LCAweGQ0LCAweDljLCAw eDMwLCAweDcwLCAweDBlLCAweDc0LCAweGFmLCAweDhhLAotKyAgICAweDBmLCAweGYxLCAweDU2 LCAweGE4LCAweDAxLCAweGFmLCAweDU3LCAweGEyLCAweDZlLCAweDcwLCAweDc4LCAweGYxLAot KyAgICAweGQ4LCAweDJmLCAweDc0LCAweDkwLCAweDhlLCAweGNiLCAweDZkLCAweDA3LCAweGU3 LCAweDBiLCAweDM1LCAweDAzLAotKyAgICAweGVlLCAweGQ5LCAweDRmLCAweGEzLCAweDJjLCAw eGYxLCAweDdhLCAweDdmLCAweGMzLCAweGQ2LCAweGNmLCAweDQwLAotKyAgICAweGRjLCAweDdi LCAweDAwLCAweDgzLCAweDBlLCAweDZhLCAweDI1LCAweDY2LCAweGRjLCAweDA3LCAweDNlLCAw eDM0LAotKyAgICAweDMzLCAweDEyLCAweDUxLCAweDdjLCAweDZhLCAweGE1LCAweDE1LCAweDJi LCAweDRiLCAweGZlLCAweGNkLCAweDJlLAotKyAgICAweDU1LCAweDFmLCAweGVlLCAweDM0LCAw eDYzLCAweDE4LCAweGExLCAweDUzLCAweDQyLCAweDNjLCAweDk5LCAweDZiLAotKyAgICAweDBk LCAweDVkLCAweGNiLCAweDkxLCAweDAyLCAweGFlLCAweGRkLCAweDM4LCAweDc5LCAweDg2LCAw eDE2LCAweGYxLAotKyAgICAweGYxLCAweGUwLCAweGQ2LCAweGM0LCAweDAzLCAweDUyLCAweDVi LCAweDFmLCAweDliLCAweDNkLCAweDRkLCAweGM3LAotKyAgICAweDY2LCAweGRlLCAweDJkLCAw eGZjLCAweDRhLCAweDU2LCAweGQ3LCAweGI4LCAweGJhLCAweDU5LCAweDYzLCAweGQ2LAotKyAg ICAweDBmLCAweDNlLCAweDE2LCAweDMxLCAweDg4LCAweDcwLCAweGFkLCAweDQzLCAweDY5LCAw eDUyLCAweGU1LCAweDU3LAotKyAgICAweDY1LCAweDM3LCAweDRlLCAweGFiLCAweDg1LCAweGU4 LCAweGVjLCAweDE3LCAweGQ2LCAweGI5LCAweGE0LCAweDU0LAotKyAgICAweDdiLCAweDliLCAw eDVmLCAweDI3LCAweDUyLCAweGYzLCAweDEwLCAweDViLCAweGU4LCAweDA5LCAweGIyLCAweDNh LAotKyAgICAweDJjLCAweDhkLCAweDc0LCAweDY5LCAweGRiLCAweDAyLCAweGUyLCAweDRkLCAw eDU5LCAweDIzLCAweDk0LCAweGE3LAotKyAgICAweGRiLCAweGEwLCAweDY5LCAweGU5Ci0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3FbXSA9IHsKLSsg ICAgMHhkMiwgMHg3NywgMHgwNCwgMHg0ZSwgMHg1MCwgMHhmNSwgMHhhNCwgMHhlMywgMHhmNSwg MHgxMCwgMHhhNSwgMHgwYSwKLSsgICAgMHgwYiwgMHg4NCwgMHhmZCwgMHhmZiwgMHhiYywgMHhh MCwgMHg0NywgMHhlZCwgMHgyNywgMHg2MCwgMHgyMCwgMHg1NiwKLSsgICAgMHg3NCwgMHg0MSwg MHhhMCwgMHhhNQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3Rf MjA0OF9nW10gPSB7Ci0rICAgIDB4MTMsIDB4ZDcsIDB4NTQsIDB4ZTIsIDB4MWYsIDB4ZDIsIDB4 NDEsIDB4NjUsIDB4NWQsIDB4YTgsIDB4OTEsIDB4YzUsCi0rICAgIDB4MjIsIDB4YTYsIDB4NWEs IDB4NzIsIDB4YTgsIDB4OWIsIDB4ZGMsIDB4NjQsIDB4ZWMsIDB4OWIsIDB4NTQsIDB4YTgsCi0r ICAgIDB4MjEsIDB4ZWQsIDB4NGEsIDB4ODksIDB4OGIsIDB4NDksIDB4MGUsIDB4MGMsIDB4NGYs IDB4Y2IsIDB4NzIsIDB4MTksCi0rICAgIDB4MmEsIDB4NGEsIDB4MjAsIDB4ZjUsIDB4NDEsIDB4 ZjMsIDB4ZjIsIDB4OTIsIDB4NTMsIDB4OTksIDB4ZjAsIDB4YmEsCi0rICAgIDB4ZWMsIDB4Zjks IDB4MjksIDB4YWEsIDB4ZmIsIDB4ZjcsIDB4OWQsIDB4ZmUsIDB4NDMsIDB4MzIsIDB4MzksIDB4 M2IsCi0rICAgIDB4MzIsIDB4Y2QsIDB4MmUsIDB4MmYsIDB4Y2YsIDB4MjcsIDB4MmYsIDB4MzIs IDB4YTYsIDB4MjcsIDB4NDMsIDB4NGEsCi0rICAgIDB4MGQsIDB4ZjIsIDB4NDIsIDB4YjcsIDB4 NWIsIDB4NDEsIDB4NGQsIDB4ZjMsIDB4NzIsIDB4MTIsIDB4MWUsIDB4NTMsCi0rICAgIDB4YTUs IDB4NTMsIDB4ZjIsIDB4MjIsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDAsIDB4ZjAsIDB4MTYsIDB4 NDgsIDB4NWIsCi0rICAgIDB4NmIsIDB4ZDAsIDB4ODksIDB4ODQsIDB4NTEsIDB4ODAsIDB4MWQs IDB4Y2QsIDB4OGQsIDB4ZTYsIDB4NGMsIDB4ZDUsCi0rICAgIDB4MzYsIDB4NTYsIDB4OTYsIDB4 ZmYsIDB4YzUsIDB4MzIsIDB4ZDUsIDB4MjgsIDB4YzUsIDB4MDYsIDB4NjIsIDB4MGEsCi0rICAg IDB4OTQsIDB4MmEsIDB4MDMsIDB4MDUsIDB4MDQsIDB4NmQsIDB4OGYsIDB4MTgsIDB4NzYsIDB4 MzQsIDB4MWYsIDB4MWUsCi0rICAgIDB4NTcsIDB4MGIsIDB4YzMsIDB4OTcsIDB4NGIsIDB4YTYs IDB4YjksIDB4YTQsIDB4MzgsIDB4ZTksIDB4NzAsIDB4MjMsCi0rICAgIDB4MDIsIDB4YTIsIDB4 ZTYsIDB4ZTYsIDB4N2IsIDB4ZmQsIDB4MDYsIDB4ZDMsIDB4MmIsIDB4YzYsIDB4NzksIDB4OTYs Ci0rICAgIDB4MjIsIDB4NzEsIDB4ZDcsIDB4YjQsIDB4MGMsIDB4ZDcsIDB4MmYsIDB4MzgsIDB4 NmUsIDB4NjQsIDB4ZTAsIDB4ZDcsCi0rICAgIDB4ZWYsIDB4ODYsIDB4Y2EsIDB4OGMsIDB4YTUs IDB4ZDEsIDB4NDIsIDB4MjgsIDB4ZGMsIDB4MmEsIDB4NGYsIDB4MTYsCi0rICAgIDB4ZTMsIDB4 MTgsIDB4OTgsIDB4ODYsIDB4YjUsIDB4OTksIDB4MDYsIDB4NzQsIDB4ZjQsIDB4MjAsIDB4MGYs IDB4M2EsCi0rICAgIDB4NGMsIDB4ZjYsIDB4NWEsIDB4M2YsIDB4MGQsIDB4ZGIsIDB4YTEsIDB4 ZmEsIDB4NjcsIDB4MmQsIDB4ZmYsIDB4MmYsCi0rICAgIDB4NWUsIDB4MTQsIDB4M2QsIDB4MTAs IDB4ZTQsIDB4ZTksIDB4N2EsIDB4ZTgsIDB4NGYsIDB4NmQsIDB4YTAsIDB4OTUsCi0rICAgIDB4 MzUsIDB4ZDUsIDB4YjksIDB4ZGYsIDB4MjUsIDB4OTEsIDB4ODEsIDB4YTcsIDB4OWIsIDB4NjMs IDB4YjAsIDB4NjksCi0rICAgIDB4ZTksIDB4NDksIDB4OTcsIDB4MmIsIDB4MDIsIDB4YmEsIDB4 MzYsIDB4YjMsIDB4NTgsIDB4NmEsIDB4YWIsIDB4N2UsCi0rICAgIDB4NDUsIDB4ZjMsIDB4MjIs IDB4ZjgsIDB4MmUsIDB4NGUsIDB4ODUsIDB4Y2EsIDB4M2EsIDB4YjgsIDB4NTUsIDB4OTEsCi0r ICAgIDB4YjMsIDB4YzIsIDB4YTksIDB4NjYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHViX2tleVtdID0gewotKyAgICAweDI0LCAweDUyLCAweGYz LCAweGNjLCAweGJlLCAweDllLCAweGQ1LCAweGNhLCAweDdkLCAweGM3LCAweDRjLCAweDYwLAot KyAgICAweDJiLCAweDk5LCAweDIyLCAweDZlLCAweDhmLCAweDJmLCAweGFiLCAweDM4LCAweGU3 LCAweGQ3LCAweGRkLCAweGZiLAotKyAgICAweDc1LCAweDUzLCAweDliLCAweDE3LCAweDE1LCAw eDVlLCAweDlmLCAweGNmLCAweGQxLCAweGFiLCAweGE1LCAweDY0LAotKyAgICAweGViLCAweDg1 LCAweDM1LCAweGQ4LCAweDEyLCAweGM5LCAweGMyLCAweGRjLCAweGY5LCAweDcyLCAweDg0LCAw eDQ0LAotKyAgICAweDFiLCAweGM0LCAweDgyLCAweDI0LCAweDM2LCAweDI0LCAweGM3LCAweGY0 LCAweDU3LCAweDU4LCAweDBjLCAweDFjLAotKyAgICAweDM4LCAweGE1LCAweDdjLCAweDQ2LCAw eGM0LCAweDU3LCAweDM5LCAweDI0LCAweDcwLCAweGVkLCAweGI1LCAweDJjLAotKyAgICAweGI1 LCAweGE2LCAweGUwLCAweDNmLCAweGU2LCAweDI4LCAweDdiLCAweGI2LCAweGY0LCAweDlhLCAw eDQyLCAweGEyLAotKyAgICAweDA2LCAweDVhLCAweDA1LCAweDRmLCAweDAzLCAweDA4LCAweDM5 LCAweGRmLCAweDFmLCAweGQzLCAweDE0LCAweDljLAotKyAgICAweDRjLCAweGEwLCAweDUzLCAw eDFkLCAweGQ4LCAweGNhLCAweDhhLCAweGFhLCAweDljLCAweGM3LCAweDMzLCAweDcxLAotKyAg ICAweDkzLCAweDM4LCAweDczLCAweDQ4LCAweDMzLCAweDYxLCAweDE4LCAweDIyLCAweDQ1LCAw eDQ1LCAweGU4LCAweDhjLAotKyAgICAweDgwLCAweGZmLCAweGQ4LCAweDc2LCAweDVkLCAweDc0 LCAweDM2LCAweDAzLCAweDMzLCAweGNjLCAweGFiLCAweDk5LAotKyAgICAweDcyLCAweDc3LCAw eDliLCAweDY1LCAweDI1LCAweGE2LCAweDViLCAweGRkLCAweDBkLCAweDEwLCAweGM2LCAweDc1 LAotKyAgICAweGMxLCAweDA5LCAweGJiLCAweGQzLCAweGU1LCAweGJlLCAweDRkLCAweDcyLCAw eGVmLCAweDZlLCAweGJhLCAweDZlLAotKyAgICAweDQzLCAweDhkLCAweDUyLCAweDI2LCAweDIz LCAweDdkLCAweGI4LCAweDg4LCAweDM3LCAweDljLCAweDVmLCAweGNjLAotKyAgICAweDQ3LCAw eGEzLCAweDg0LCAweDdmLCAweGY2LCAweDM3LCAweDExLCAweGJhLCAweGVkLCAweDZkLCAweDAz LCAweGFmLAotKyAgICAweGU4LCAweDFlLCAweDY5LCAweDRhLCAweDQxLCAweDNiLCAweDY4LCAw eDBiLCAweGQzLCAweDhhLCAweGI0LCAweDkwLAotKyAgICAweDNmLCAweDgzLCAweDcwLCAweGE3 LCAweDA3LCAweGVmLCAweDU1LCAweDFkLCAweDQ5LCAweDQxLCAweDAyLCAweDZkLAotKyAgICAw eDk1LCAweDc5LCAweGQ2LCAweDkxLCAweGRlLCAweDhlLCAweGRhLCAweGExLCAweDYxLCAweDA1 LCAweGViLCAweDlkLAotKyAgICAweGJhLCAweDNjLCAweDJmLCAweDRjLCAweDFiLCAweGVjLCAw eDUwLCAweDgyLCAweDc1LCAweGFhLCAweDAyLCAweDA3LAotKyAgICAweGUyLCAweDUxLCAweGI1 LCAweGVjLCAweGNiLCAweDI4LCAweDZhLCAweDRiLCAweDAxLCAweGQ0LCAweDQ5LCAweGQzLAot KyAgICAweDBhLCAweGNiLCAweDY3LCAweDM3LCAweDE3LCAweGEwLCAweGQyLCAweGZiLCAweDNi LCAweDUwLCAweGM4LCAweDkzLAotKyAgICAweGY3LCAweGRhLCAweGIxLCAweDRmCi0rfTsKLSsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3ByaXZfa2V5W10gPSB7 Ci0rICAgIDB4MGMsIDB4NGIsIDB4MzAsIDB4ODksIDB4ZDEsIDB4YjgsIDB4NjIsIDB4Y2IsIDB4 M2MsIDB4NDMsIDB4NjQsIDB4OTEsCi0rICAgIDB4ZjAsIDB4OTEsIDB4NTQsIDB4NzAsIDB4YzUs IDB4MjcsIDB4OTYsIDB4ZTMsIDB4YWMsIDB4YmUsIDB4ZTgsIDB4MDAsCi0rICAgIDB4ZWMsIDB4 NTUsIDB4ZjYsIDB4Y2MKLSt9OwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9kc2E7Ci0rCi0rdm9p ZCBGSVBTX2NvcnJ1cHRfZHNhKCkKLSt7Ci0rICAgIGNvcnJ1cHRfZHNhID0gMTsKLSt9Ci0rCi0r aW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKLSt7Ci0rICAgIERTQSAqZHNhID0gTlVMTDsKLSsgICAg RVZQX1BLRVkgKnBrID0gTlVMTDsKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGRzYSA9IERT QV9uZXcoKTsKLSsKLSsgICAgaWYgKGRzYSA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0r Ci0rICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcCwgZHNhX3Rlc3RfMjA0OCk7Ci0r ICAgIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcSwgZHNhX3Rlc3RfMjA0OCk7Ci0rICAg IGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgZywgZHNhX3Rlc3RfMjA0OCk7Ci0rICAgIGZp cHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcHViX2tleSwgZHNhX3Rlc3RfMjA0OCk7Ci0rICAg IGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGRzYSwgcHJpdl9rZXksIGRzYV90ZXN0XzIwNDgpOwot KwotKyAgICBpZiAoY29ycnVwdF9kc2EpCi0rICAgICAgICBCTl9zZXRfYml0KGRzYS0+cHViX2tl eSwgMjA0Nyk7Ci0rCi0rICAgIGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsg ICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOwot KwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgTlVMTCwgMCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgRVZQX3NoYTI1NigpLCAwLCAi RFNBIFNIQTI1NiIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIHJldCA9IDE7Ci0rCi0rIGVy cjoKLSsgICAgaWYgKHBrKQotKyAgICAgICAgRVZQX1BLRVlfZnJlZShwayk7Ci0rICAgIGVsc2Ug aWYgKGRzYSkKLSsgICAgICAgIERTQV9mcmVlKGRzYSk7Ci0rICAgIHJldHVybiByZXQ7Ci0rfQot KyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5m aXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMKLS0tLSBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjU1 NjI1OTggKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCTIw MTUtMTItMDQgMTM6NTU6NTEuOTY1NTYyNTk4ICswMTAwCi1AQCAtMCwwICsxLDE4OSBAQAotKy8q IGZpcGUvZXZwL2ZpcHNfZW5jLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmlj IFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICog YnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlv biB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAK LSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNp YWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFy ZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBm b3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNo LCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1l bnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBi eSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlz IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVt YWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgot KyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2Ug aXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0 aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4K LSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9n cmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkg cHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3 YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0 dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBU aGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZy b20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyBy ZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBj b2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJl Y3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2Vt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBU aW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK LSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsg KiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRl cm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRp dmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90 IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9u IGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwot KwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rCi0rY29uc3QgRVZQX0NJUEhFUiAqRklQU19nZXRfY2lwaGVyYnluaWQo aW50IG5pZCkKLSt7Ci0rICAgIHN3aXRjaCAobmlkKSB7Ci0rICAgIGNhc2UgTklEX2Flc18xMjhf Y2JjOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2NiYygpOwotKwotKyAgICBjYXNlIE5J RF9hZXNfMTI4X2NjbToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jY20oKTsKLSsKLSsg ICAgY2FzZSBOSURfYWVzXzEyOF9jZmIxOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2Nm YjEoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzEyOF9jZmIxMjg6Ci0rICAgICAgICByZXR1cm4g RVZQX2Flc18xMjhfY2ZiMTI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xMjhfY2ZiODoKLSsg ICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jZmI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18x MjhfY3RyOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2N0cigpOwotKwotKyAgICBjYXNl IE5JRF9hZXNfMTI4X2VjYjoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9lY2IoKTsKLSsK LSsgICAgY2FzZSBOSURfYWVzXzEyOF9nY206Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhf Z2NtKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xMjhfb2ZiMTI4OgotKyAgICAgICAgcmV0dXJu IEVWUF9hZXNfMTI4X29mYigpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X3h0czoKLSsgICAg ICAgIHJldHVybiBFVlBfYWVzXzEyOF94dHMoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzE5Ml9j YmM6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY2JjKCk7Ci0rCi0rICAgIGNhc2UgTklE X2Flc18xOTJfY2NtOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NjbSgpOwotKwotKyAg ICBjYXNlIE5JRF9hZXNfMTkyX2NmYjE6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY2Zi MSgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTkyX2NmYjEyODoKLSsgICAgICAgIHJldHVybiBF VlBfYWVzXzE5Ml9jZmIxMjgoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzE5Ml9jZmI4OgotKyAg ICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjgoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzE5 Ml9jdHI6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY3RyKCk7Ci0rCi0rICAgIGNhc2Ug TklEX2Flc18xOTJfZWNiOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2VjYigpOwotKwot KyAgICBjYXNlIE5JRF9hZXNfMTkyX2djbToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9n Y20oKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzE5Ml9vZmIxMjg6Ci0rICAgICAgICByZXR1cm4g RVZQX2Flc18xOTJfb2ZiKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18yNTZfY2JjOgotKyAgICAg ICAgcmV0dXJuIEVWUF9hZXNfMjU2X2NiYygpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2Nj bToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9jY20oKTsKLSsKLSsgICAgY2FzZSBOSURf YWVzXzI1Nl9jZmIxOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEoKTsKLSsKLSsg ICAgY2FzZSBOSURfYWVzXzI1Nl9jZmIxMjg6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZf Y2ZiMTI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18yNTZfY2ZiODoKLSsgICAgICAgIHJldHVy biBFVlBfYWVzXzI1Nl9jZmI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18yNTZfY3RyOgotKyAg ICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2N0cigpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2 X2VjYjoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9lY2IoKTsKLSsKLSsgICAgY2FzZSBO SURfYWVzXzI1Nl9nY206Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfZ2NtKCk7Ci0rCi0r ICAgIGNhc2UgTklEX2Flc18yNTZfb2ZiMTI4OgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2 X29mYigpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X3h0czoKLSsgICAgICAgIHJldHVybiBF VlBfYWVzXzI1Nl94dHMoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZV9lY2I6Ci0rICAgICAg ICByZXR1cm4gRVZQX2Rlc19lZGUoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZTNfZWNiOgot KyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlMygpOwotKwotKyAgICBjYXNlIE5JRF9kZXNfZWRl M19jYmM6Ci0rICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzX2NiYygpOwotKwotKyAgICBjYXNl IE5JRF9kZXNfZWRlM19jZmIxOgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlM19jZmIxKCk7 Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGUzX2NmYjY0OgotKyAgICAgICAgcmV0dXJuIEVWUF9k ZXNfZWRlM19jZmI2NCgpOwotKwotKyAgICBjYXNlIE5JRF9kZXNfZWRlM19jZmI4OgotKyAgICAg ICAgcmV0dXJuIEVWUF9kZXNfZWRlM19jZmI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGUz X29mYjY0OgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlM19vZmIoKTsKLSsKLSsgICAgY2Fz ZSBOSURfZGVzX2VkZV9jYmM6Ci0rICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGVfY2JjKCk7Ci0r Ci0rICAgIGNhc2UgTklEX2Rlc19lZGVfY2ZiNjQ6Ci0rICAgICAgICByZXR1cm4gRVZQX2Rlc19l ZGVfY2ZiNjQoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZV9vZmI2NDoKLSsgICAgICAgIHJl dHVybiBFVlBfZGVzX2VkZV9vZmIoKTsKLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICAgIHJldHVy biBOVUxMOwotKwotKyAgICB9Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Zp cHMvZmlwcy5oLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwcy5oCi0tLS0gb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45 NjY1NjI2MjIgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzLmgJMjAx NS0xMi0wNCAxMzo1NTo1MS45NjY1NjI2MjIgKzAxMDAKLUBAIC0wLDAgKzEsMjc4IEBACi0rLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK LSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9u LgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9w ZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K LSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgot KyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0r Ci0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGVycm9yIEZJUFMgaXMgZGlzYWJsZWQuCi0rI2Vu ZGlmCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyMgaWZkZWYgIF9fY3BsdXNwbHVzCi0r ZXh0ZXJuICJDIiB7Ci0rIyBlbmRpZgotKwotKyAgICBzdHJ1Y3QgZHNhX3N0OwotKyAgICBzdHJ1 Y3QgcnNhX3N0OwotKyAgICBzdHJ1Y3QgZXZwX3BrZXlfc3Q7Ci0rICAgIHN0cnVjdCBlbnZfbWRf c3Q7Ci0rICAgIHN0cnVjdCBlbnZfbWRfY3R4X3N0OwotKyAgICBzdHJ1Y3QgZXZwX2NpcGhlcl9z dDsKLSsgICAgc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OwotKyAgICBzdHJ1Y3QgZGhfbWV0aG9k OwotKyAgICBzdHJ1Y3QgQ01BQ19DVFhfc3Q7Ci0rICAgIHN0cnVjdCBobWFjX2N0eF9zdDsKLSsK LSsgICAgaW50IEZJUFNfbW9kdWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0 aCk7Ci0rICAgIGludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQpOwotKyAgICBjb25zdCB2b2lkICpG SVBTX3JhbmRfY2hlY2sodm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpOwotKyAg ICBpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Ci0rICAgIHZvaWQgRklQU19jb3JydXB0 X3NoYTEodm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Ci0rICAgIGlu dCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9pZCk7Ci0rICAgIHZvaWQgRklQU19jb3JydXB0X2Flcyh2 b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3RfYWVzX2NjbSh2b2lkKTsKLSsgICAgaW50IEZJ UFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0 cyh2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3RfYWVzKHZvaWQpOwotKyAgICB2b2lkIEZJ UFNfY29ycnVwdF9kZXModm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsK LSsgICAgdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKHZvaWQpOwotKyAgICB2b2lkIEZJUFNfY29ycnVw dF9yc2Ffa2V5Z2VuKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9yc2Eodm9pZCk7Ci0r ICAgIHZvaWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKLSsgICAgdm9pZCBGSVBTX2NvcnJ1cHRf ZHNhX2tleWdlbih2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQpOwotKyAg ICB2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Ci0rICAgIHZvaWQgRklQU19ybmdfc3RpY2so dm9pZCk7Ci0rICAgIHZvaWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZik7Ci0rICAgIHZvaWQg RklQU19kcmJnX3N0aWNrKGludCBvbm9mZik7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2 b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3RfeDkzMSh2b2lkKTsKLSsgICAgaW50IEZJUFNf c2VsZnRlc3RfaG1hYyh2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2b2lkKTsK LSsgICAgaW50IEZJUFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCk7Ci0rICAgIGludCBGSVBTX3Nl bGZ0ZXN0X2NtYWModm9pZCk7Ci0rCi0rICAgIHZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25l ZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgKnBjdHIpOwotKwotKyMgZGVmaW5lIEZJUFNfRVJS T1JfSUdOT1JFRChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0rICAgICAg ICAgICAgICAgIGFsZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBp Z25vcmVkIik7Ci0rCi0rICAgIGludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2 cF9wa2V5X3N0ICpwa2V5LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGthdGxlbiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpkaWdlc3QsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1kX2ZsYWdzLCBjb25zdCBjaGFy ICpmYWlsX3N0cik7Ci0rCi0rICAgIGludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVjdCBldnBfY2lw aGVyX2N0eF9zdCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg ZXZwX2NpcGhlcl9zdCAqY2lwaGVyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBjaGFyICprZXksCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKml2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICpwbGFpbnRleHQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pOwotKwotKyAgICB2b2lkIGZpcHNfc2V0X3NlbGZ0 ZXN0X2ZhaWwodm9pZCk7Ci0rCi0rICAgIGNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0 X2RpZ2VzdGJ5bmlkKGludCBuaWQpOwotKwotKyAgICBjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9z dCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7Ci0rCi0rLyogQkVHSU4gRVJST1IgQ09E RVMgKi8KLSsvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUg c2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwotKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBt YXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotKyAqLwotKyAg ICB2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKLSsKLSsvKiBFcnJvciBjb2RlcyBm b3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLwotKwotKy8qIEZ1bmN0aW9uIGNvZGVzLiAqLwotKyMg ZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyAgICAgICAgICAgICAgICAgICAgICAx MDAKLSsjIGRlZmluZSBGSVBTX0ZfREhfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTQ4Ci0rIyBkZWZpbmUgRklQU19GX0RSQkdfUkVTRUVEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDE2MgotKyMgZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiAg ICAgICAgICAgICAgICAgICAgICAxMDEKLSsjIGRlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFS QU1HRU4yICAgICAgICAgICAgICAgICAgICAgMTA3Ci0rIyBkZWZpbmUgRklQU19GX0RTQV9ET19T SUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMgotKyMgZGVmaW5lIEZJUFNfRl9E U0FfRE9fVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKLSsjIGRlZmluZSBG SVBTX0ZfRUNESF9DT01QVVRFX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgMTYzCi0rIyBk ZWZpbmUgRklQU19GX0VDRFNBX0RPX1NJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2 NAotKyMgZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19WRVJJRlkgICAgICAgICAgICAgICAgICAgICAg ICAgICAxNjUKLSsjIGRlZmluZSBGSVBTX0ZfRUNfS0VZX0dFTkVSQVRFX0tFWSAgICAgICAgICAg ICAgICAgICAgICAgMTY2Ci0rIyBkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VYICAgICAg ICAgICAgICAgICAgICAgICAgIDEyNAotKyMgZGVmaW5lIEZJUFNfRl9FVlBfRElHRVNUSU5JVF9F WCAgICAgICAgICAgICAgICAgICAgICAgICAxMjUKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19DSEVD S19EU0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA0Ci0rIyBkZWZpbmUgRklQU19GX0ZJ UFNfQ0hFQ0tfRFNBX1BSTkcgICAgICAgICAgICAgICAgICAgICAgIDE1MQotKyMgZGVmaW5lIEZJ UFNfRl9GSVBTX0NIRUNLX0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDIKLSsjIGRl ZmluZSBGSVBTX0ZfRklQU19DSEVDS19FQ19QUk5HICAgICAgICAgICAgICAgICAgICAgICAgMTUy Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UICAgICAgICAg ICAgIDEwNQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMDYKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0FfUFJORyAgICAg ICAgICAgICAgICAgICAgICAgMTUwCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDE2MAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhF UklOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDMKLSsjIGRlZmluZSBGSVBTX0ZfRklQ U19DSVBIRVJfQ1RYX0NUUkwgICAgICAgICAgICAgICAgICAgICAgMTYxCi0rIyBkZWZpbmUgRklQ U19GX0ZJUFNfRElHRVNURklOQUwgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OAotKyMgZGVm aW5lIEZJUFNfRl9GSVBTX0RJR0VTVElOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjgK LSsjIGRlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RVUERBVEUgICAgICAgICAgICAgICAgICAgICAg ICAgMTU5Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19CWVRFUyAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEzMQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0sgICAgICAgICAg ICAgICAgICAgICAgICAgICAxNDYKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RF U1QgICAgICAgICAgICAgICAgICAgICAgMTMyCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSyAgICAgICAgICAgICAgICAgICAgIDEzNgotKyMgZGVmaW5lIEZJUFNfRl9GSVBT X0RSQkdfR0VORVJBVEUgICAgICAgICAgICAgICAgICAgICAgICAxMzQKLSsjIGRlZmluZSBGSVBT X0ZfRklQU19EUkJHX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM1Ci0rIyBkZWZp bmUgRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSAgICAgICAgICAgICAgICAgICAgIDEzOAot KyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfTkVXICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMzkKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX1JFU0VFRCAgICAgICAgICAgICAgICAg ICAgICAgICAgMTQwCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FUICAgICAg ICAgICAgICAgICAgICAgIDE0MQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSyAgICAg ICAgICAgLyogdW51c2VkICovICAgICAxMDcKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EU0FfU0lH Tl9ESUdFU1QgICAgICAgICAgICAgICAgICAgICAgMTU0Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNf RFNBX1ZFUklGWV9ESUdFU1QgICAgICAgICAgICAgICAgICAgIDE1NQotKyMgZGVmaW5lIEZJUFNf Rl9GSVBTX0dFVF9FTlRST1BZICAgICAgICAgICAgICAgICAgICAgICAgICAxNDcKLSsjIGRlZmlu ZSBGSVBTX0ZfRklQU19NT0RFX1NFVCAgICAgICAgICAgIC8qIHVudXNlZCAqLyAgICAgMTA4Ci0r IyBkZWZpbmUgRklQU19GX0ZJUFNfTU9EVUxFX01PREVfU0VUICAgICAgICAgICAgICAgICAgICAg IDEwOAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QgICAgICAgICAg ICAgICAgICAxMDkKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19SQU5EX0FERCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTM3Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9CWVRFUyAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEyMgotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfUFNF VURPX0JZVEVTICAgICAgICAgICAgICAgICAgICAxNjcKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19S QU5EX1NFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY4Ci0rIyBkZWZpbmUgRklQU19G X0ZJUFNfUkFORF9TRVRfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgIDEyNgotKyMgZGVmaW5l IEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAxMjcKLSsj IGRlZmluZSBGSVBTX0ZfRklQU19SU0FfU0lHTl9ESUdFU1QgICAgICAgICAgICAgICAgICAgICAg MTU2Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfUlNBX1ZFUklGWV9ESUdFU1QgICAgICAgICAgICAg ICAgICAgIDE1NwotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyAgICAgICAgICAg ICAgICAgICAgICAgICAxMTAKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NN ICAgICAgICAgICAgICAgICAgICAgMTQ1Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf QUVTX0dDTSAgICAgICAgICAgICAgICAgICAgIDEyOQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NF TEZURVNUX0FFU19YVFMgICAgICAgICAgICAgICAgICAgICAxNDQKLSsjIGRlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9DTUFDICAgICAgICAgICAgICAgICAgICAgICAgMTMwCi0rIyBkZWZpbmUg RklQU19GX0ZJUFNfU0VMRlRFU1RfREVTICAgICAgICAgICAgICAgICAgICAgICAgIDExMQotKyMg ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQSAgICAgICAgICAgICAgICAgICAgICAgICAx MTIKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9FQ0RTQSAgICAgICAgICAgICAgICAg ICAgICAgMTMzCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyAgICAgICAgICAg ICAgICAgICAgICAgIDExMwotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyAgICAg ICAgLyogdW51c2VkICovICAgICAxMTQKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9T SEExICAgICAgICAgICAgICAgICAgICAgICAgMTE1Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VM RlRFU1RfWDkzMSAgICAgICAgICAgICAgICAgICAgICAgIDExNAotKyMgZGVmaW5lIEZJUFNfRl9G SVBTX1NFVF9QUk5HX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAxNTMKLSsjIGRlZmluZSBG SVBTX0ZfSEFTSF9GSU5BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIzCi0rIyBk ZWZpbmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiAgICAgICAgICAgICAgICAgICAgICAgIDEx NgotKyMgZGVmaW5lIEZJUFNfRl9SU0FfRUFZX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxNDkKLSsjIGRlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQgICAgICAg ICAgICAgICAgICAgMTE3Ci0rIyBkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBU ICAgICAgICAgICAgICAgICAgIDExOAotKyMgZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19E RUNSWVBUICAgICAgICAgICAgICAgICAgICAxMTkKLSsjIGRlZmluZSBGSVBTX0ZfUlNBX0VBWV9Q VUJMSUNfRU5DUllQVCAgICAgICAgICAgICAgICAgICAgMTIwCi0rIyBkZWZpbmUgRklQU19GX1JT QV9YOTMxX0dFTkVSQVRFX0tFWV9FWCAgICAgICAgICAgICAgICAgIDEyMQotKyMgZGVmaW5lIEZJ UFNfRl9TU0xFQVlfUkFORF9CWVRFUyAgICAgICAgLyogdW51c2VkICovICAgICAxMjIKLSsKLSsv KiBSZWFzb24gY29kZXMuICovCi0rIyBkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJS T1JfVU5ERVRFQ1RFRCAgICAgICAgIDE1MAotKyMgZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lO UFVUX1RPT19MT05HICAgICAgICAgICAgICAgICAxMjUKLSsjIGRlZmluZSBGSVBTX1JfQUxSRUFE WV9JTlNUQU5USUFURUQgICAgICAgICAgICAgICAgICAgICAgMTM0Ci0rIyBkZWZpbmUgRklQU19S X0FVVEhFTlRJQ0FUSU9OX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgIDE1MQotKyMgZGVmaW5l IEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUgICAgICAgICAgLyogdW51c2VkICovICAgICAxMDMKLSsj IGRlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVCAgIC8qIHVudXNlZCAqLyAgICAg MTA0Ci0rIyBkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UgICAgICAgICAgICAg ICAgICAgIDExNAotKyMgZGVmaW5lIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRCAgICAgICAg ICAgICAgICAgICAgICAxNTIKLSsjIGRlZmluZSBGSVBTX1JfRFJCR19TVFVDSyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTAzCi0rIyBkZWZpbmUgRklQU19SX0VOVFJPUFlfRVJST1Jf VU5ERVRFQ1RFRCAgICAgICAgICAgICAgICAgIDEwNAotKyMgZGVmaW5lIEZJUFNfUl9FTlRST1BZ X05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCAgICAgICAgICAxMDUKLSsjIGRlZmluZSBGSVBTX1Jf RU5UUk9QWV9TT1VSQ0VfU1RVQ0sgICAgICAgICAgICAgICAgICAgICAgMTQyCi0rIyBkZWZpbmUg RklQU19SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHICAgICAgICAgICAgICAgICAgIDExNQotKyMg ZGVmaW5lIEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcgICAgICAgICAgICAgICAgICAx MjcKLSsjIGRlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUICAg ICAgICAgMTI0Ci0rIyBkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWSAgICAg ICAgICAgICAgICAgIDEyMgotKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNF ICAgICAgICAgICAgICAgICAgICAxNDAKLSsjIGRlZmluZSBGSVBTX1JfRVhFX0RJR0VTVF9ET0VT X05PVF9NQVRDSCAgIC8qIHVudXNlZCAqLyAgMTA1Ci0rIyBkZWZpbmUgRklQU19SX0ZJTkdFUlBS SU5UX0RPRVNfTk9UX01BVENIICAgICAgICAgICAgICAgIDExMAotKyMgZGVmaW5lIEZJUFNfUl9G SU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQotKyMgZGVmaW5l IEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HIDExMgot KyMgZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQgICAgICAgICAgICAgICAgICAg ICAxMDIKLSsjIGRlZmluZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQgICAgICAgICAgICAg ICAgICAgICAgMTA2Ci0rIyBkZWZpbmUgRklQU19SX0ZVTkNUSU9OX0VSUk9SICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDExNgotKyMgZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMzcKLSsjIGRlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJS T1JfVU5ERVRFQ1RFRCAgICAgICAgICAgICAgICAgMTE4Ci0rIyBkZWZpbmUgRklQU19SX0lOU1RB TlRJQVRFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgIDExOQotKyMgZGVmaW5lIEZJUFNf Ul9JTlNVRkZJQ0lFTlRfU0VDVVJJVFlfU1RSRU5HVEggICAgICAgICAgICAxMjAKLSsjIGRlZmlu ZSBGSVBTX1JfSU5URVJOQUxfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIxCi0r IyBkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAg IDEwOQotKyMgZGVmaW5lIEZJUFNfUl9JTlZBTElEX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAg ICAgICAgICAxNDQKLSsjIGRlZmluZSBGSVBTX1JfSU5fRVJST1JfU1RBVEUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTIzCi0rIyBkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEwOAotKyMgZGVmaW5lIEZJUFNfUl9OT05DRV9FUlJPUl9V TkRFVEVDVEVEICAgICAgICAgICAgICAgICAgICAxNDkKLSsjIGRlZmluZSBGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwCi0rIyBkZWZpbmUgRklQU19S X05PUFJfVEVTVDFfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDE0NQotKyMgZGVmaW5l IEZJUFNfUl9OT1BSX1RFU1QyX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAxNDYKLSsj IGRlZmluZSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRCAgICAgICAgICAgICAgICAgICAgICAgICAg MTI2Ci0rIyBkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEICAgICAgICAgICAgICAg ICAgICAgIDEwNwotKyMgZGVmaW5lIEZJUFNfUl9QRVJTT05BTElTQVRJT05fRVJST1JfVU5ERVRF Q1RFRCAgICAgICAgICAxMjgKLSsjIGRlZmluZSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklO R19UT09fTE9ORyAgICAgICAgICAgMTI5Ci0rIyBkZWZpbmUgRklQU19SX1BSTkdfU1RSRU5HVEhf VE9PX0xPVyAgICAgICAgICAgICAgICAgICAgIDE0MwotKyMgZGVmaW5lIEZJUFNfUl9QUl9URVNU MV9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAxNDcKLSsjIGRlZmluZSBGSVBTX1Jf UFJfVEVTVDJfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ4Ci0rIyBkZWZpbmUg RklQU19SX1JFUVVFU1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQgICAgICAgICAgIDEzMAotKyMg ZGVmaW5lIEZJUFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRyAgICAgICAgICAgICAgICAx MzEKLSsjIGRlZmluZSBGSVBTX1JfUkVTRUVEX0NPVU5URVJfRVJST1IgICAgICAgICAgICAgICAg ICAgICAgMTMyCi0rIyBkZWZpbmUgRklQU19SX1JFU0VFRF9FUlJPUiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEzMwotKyMgZGVmaW5lIEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUiAgICAg ICAgLyogdW51c2VkICovICAgICAxMTUKLSsjIGRlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJS T1IgICAgICAgIC8qIHVudXNlZCAqLyAgICAgMTE2Ci0rIyBkZWZpbmUgRklQU19SX1NFTEZURVNU X0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMQotKyMgZGVmaW5lIEZJUFNfUl9T RUxGVEVTVF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUKLSsjIGRlZmluZSBG SVBTX1JfU1RSRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCAgICAgICAgICAgICAgICAgMTM2Ci0rIyBk ZWZpbmUgRklQU19SX1RFU1RfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEx NwotKyMgZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SICAgICAgICAgICAgICAgICAg ICAgICAxNDEKLSsjIGRlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9aRVJPSVNFX0VSUk9SICAg ICAgICAgICAgICAgMTM4Ci0rIyBkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX0RSQkdfVFlQRSAg ICAgICAgICAgICAgICAgICAgIDEzOQotKyMgZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFU Rk9STSAgICAgICAgICAgICAgICAgICAgICAxMTMKLSsKLSsjIGlmZGVmICBfX2NwbHVzcGx1cwot K30KLSsjIGVuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlw cy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2Zp cHNfaG1hY19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19o bWFjX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NjU2MjYyMiArMDEwMAot KysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCTIwMTUt MTItMDQgMTM6NTU6NTEuOTY2NTYyNjIyICswMTAwCi1AQCAtMCwwICsxLDEzNCBAQAotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotK3R5cGVkZWYgc3RydWN0IHsKLSsgICAgY29uc3QgRVZQX01EICooKmFs ZykgKHZvaWQpOwotKyAgICBjb25zdCBjaGFyICprZXksICppdjsKLSsgICAgdW5zaWduZWQgY2hh ciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOwotK30gSE1BQ19LQVQ7Ci0rCi0rc3RhdGljIGNvbnN0 IEhNQUNfS0FUIHZlY3RvcltdID0gewotKyAgICB7RVZQX3NoYTEsCi0rICAgICAvKiBmcm9tIGh0 dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTgvZmlwcy0xOThhLnBk ZiAqLwotKyAgICAgIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsgICAgICJTYW1wbGUgIzIiLAot KyAgICAgezB4MDksIDB4MjIsIDB4ZDMsIDB4NDAsIDB4NWYsIDB4YWEsIDB4M2QsIDB4MTksCi0r ICAgICAgMHg0ZiwgMHg4MiwgMHhhNCwgMHg1OCwgMHgzMCwgMHg3MywgMHg3ZCwgMHg1YywKLSsg ICAgICAweGM2LCAweGM3LCAweDVkLCAweDI0fQotKyAgICAgfSwKLSsgICAge0VWUF9zaGEyMjQs Ci0rICAgICAvKiBqdXN0IGtlZXAgZXh0ZW5kaW5nIHRoZSBhYm92ZS4uLiAqLwotKyAgICAgIjAx MjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsgICAgICJTYW1wbGUgIzIiLAotKyAgICAgezB4ZGQsIDB4 ZWYsIDB4MGEsIDB4NDAsIDB4Y2IsIDB4N2QsIDB4NTAsIDB4ZmIsCi0rICAgICAgMHg2ZSwgMHhl NiwgMHhjZSwgMHhhMSwgMHgyMCwgMHhiYSwgMHgyNiwgMHhhYSwKLSsgICAgICAweDA4LCAweGYz LCAweDA3LCAweDc1LCAweDg3LCAweGI4LCAweGFkLCAweDFiLAotKyAgICAgIDB4OGMsIDB4OGQs IDB4MTIsIDB4Yzd9Ci0rICAgICB9LAotKyAgICB7RVZQX3NoYTI1NiwKLSsgICAgICIwMTIzNDU2 Nzg5Ojs8PT4/QEFCQyIsCi0rICAgICAiU2FtcGxlICMyIiwKLSsgICAgIHsweGI4LCAweGYyLCAw eDBkLCAweGI1LCAweDQxLCAweGVhLCAweDQzLCAweDA5LAotKyAgICAgIDB4Y2EsIDB4NGUsIDB4 YTksIDB4MzgsIDB4MGMsIDB4ZDAsIDB4ZTgsIDB4MzQsCi0rICAgICAgMHhmNywgMHgxZiwgMHhi ZSwgMHg5MSwgMHg3NCwgMHhhMiwgMHg2MSwgMHgzOCwKLSsgICAgICAweDBkLCAweGMxLCAweDdl LCAweGFlLCAweDZhLCAweDM0LCAweDUxLCAweGQ5fQotKyAgICAgfSwKLSsgICAge0VWUF9zaGEz ODQsCi0rICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKyAgICAgIlNhbXBsZSAjMiIsCi0r ICAgICB7MHgwOCwgMHhiYywgMHhiMCwgMHhkYSwgMHg0OSwgMHgxZSwgMHg4NywgMHhhZCwKLSsg ICAgICAweDlhLCAweDFkLCAweDZhLCAweGNlLCAweDIzLCAweGM1LCAweDBiLCAweGY2LAotKyAg ICAgIDB4YjcsIDB4MTgsIDB4MDYsIDB4YTUsIDB4NzcsIDB4Y2QsIDB4NDksIDB4MDQsCi0rICAg ICAgMHg4OSwgMHhmMSwgMHhlNiwgMHgyMywgMHg0NCwgMHg1MSwgMHg1MSwgMHg5ZiwKLSsgICAg ICAweDg1LCAweDU2LCAweDgwLCAweDc5LCAweDBjLCAweGJkLCAweDRkLCAweDUwLAotKyAgICAg IDB4YTQsIDB4NWYsIDB4MjksIDB4ZTMsIDB4OTMsIDB4ZjAsIDB4ZTgsIDB4N2Z9Ci0rICAgICB9 LAotKyAgICB7RVZQX3NoYTUxMiwKLSsgICAgICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rICAg ICAiU2FtcGxlICMyIiwKLSsgICAgIHsweDgwLCAweDlkLCAweDQ0LCAweDA1LCAweDdjLCAweDVi LCAweDk1LCAweDQxLAotKyAgICAgIDB4MDUsIDB4YmQsIDB4MDQsIDB4MTMsIDB4MTYsIDB4ZGIs IDB4MGYsIDB4YWMsCi0rICAgICAgMHg0NCwgMHhkNSwgMHhhNCwgMHhkNSwgMHhkMCwgMHg4OSwg MHgyYiwgMHhkMCwKLSsgICAgICAweDRlLCAweDg2LCAweDY0LCAweDEyLCAweGMwLCAweDkwLCAw eDc3LCAweDY4LAotKyAgICAgIDB4ZjEsIDB4ODcsIDB4YjcsIDB4N2MsIDB4NGYsIDB4YWUsIDB4 MmMsIDB4MmYsCi0rICAgICAgMHgyMSwgMHhhNSwgMHhiNSwgMHg2NSwgMHg5YSwgMHg0ZiwgMHg0 YiwgMHhhNywKLSsgICAgICAweDQ3LCAweDAyLCAweGEzLCAweGRlLCAweDliLCAweDUxLCAweGYx LCAweDQ1LAotKyAgICAgIDB4YmQsIDB4NGYsIDB4MjUsIDB4MjcsIDB4NDIsIDB4OTgsIDB4OTks IDB4MDV9Ci0rICAgICB9LAotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfaG1hYygpCi0rewot KyAgICBpbnQgbjsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsgICAgdW5zaWduZWQgY2hh ciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgY29uc3QgRVZQX01EICptZDsKLSsgICAgY29u c3QgSE1BQ19LQVQgKnQ7Ci0rCi0rICAgIGZvciAobiA9IDAsIHQgPSB2ZWN0b3I7IG4gPCBzaXpl b2YodmVjdG9yKSAvIHNpemVvZih2ZWN0b3JbMF0pOyBuKyssIHQrKykgewotKyAgICAgICAgbWQg PSAoKnQtPmFsZykgKCk7Ci0rICAgICAgICBITUFDKG1kLCB0LT5rZXksIHN0cmxlbih0LT5rZXkp LAotKyAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciAqKXQtPml2LCBzdHJsZW4odC0+ aXYpLCBvdXQsICZvdXRsZW4pOwotKwotKyAgICAgICAgaWYgKG1lbWNtcChvdXQsIHQtPmthdmFs LCBvdXRsZW4pKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9I TUFDLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsg ICAgICAgIH0KLSsgICAgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0rI2VuZGlmCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMv Zmlwc19sb2NsLmguZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NjU2MjYyMiArMDEwMAotKysr IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oCTIwMTUtMTItMDQgMTM6NTU6 NTEuOTY2NTYyNjIyICswMTAwCi1AQCAtMCwwICsxLDcxIEBACi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq Ci0rICovCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyMgaWZkZWYgIF9fY3BsdXNwbHVz Ci0rZXh0ZXJuICJDIiB7Ci0rIyBlbmRpZgotKwotKyMgZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9U RVNUX1NJWkUgICAgICAgMzIKLSsjIGRlZmluZSBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChrZXks IGNvbXAsIHByZSkgXAotKyAgICAgICAga2V5LT5jb21wID0gQk5fYmluMmJuKHByZSMjXyMjY29t cCwgc2l6ZW9mKHByZSMjXyMjY29tcCksIGtleS0+Y29tcCk7IFwKLSsgICAgICAgIGlmICgha2V5 LT5jb21wKSBcCi0rICAgICAgICAgICAgICAgIGdvdG8gZXJyCi0rCi0rIyBkZWZpbmUgZmlwc19w b3N0X3N0YXJ0ZWQoaWQsIHN1YmlkLCBleCkgMQotKyMgZGVmaW5lIGZpcHNfcG9zdF9zdWNjZXNz KGlkLCBzdWJpZCwgZXgpIDEKLSsjIGRlZmluZSBmaXBzX3Bvc3RfZmFpbGVkKGlkLCBzdWJpZCwg ZXgpIDEKLSsjIGRlZmluZSBmaXBzX3Bvc3RfY29ycnVwdChpZCwgc3ViaWQsIGV4KSAxCi0rIyBk ZWZpbmUgZmlwc19wb3N0X3N0YXR1cygpIDEKLSsKLSsjIGlmZGVmICBfX2NwbHVzcGx1cwotK30K LSsjIGVuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9m aXBzX21kLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX21kLmMKLS0tLSBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX21kLmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1 OjUxLjk2NjU2MjYyMiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNf bWQuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NjU2MjYyMiArMDEwMAotQEAgLTAsMCArMSwxNDQg QEAKLSsvKiBmaXBzL2V2cC9maXBzX21kLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5 OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVu Ci0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1l bnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4K LSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNv bW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl IGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwg Y29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAq IGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wg ZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292 ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9s ZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmln aHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNl cyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBh Y2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0 dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkg dXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBh dCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4 dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz IHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2Vt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsg KiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3Vp bmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3Jh cGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVj aWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBw cyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93 bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRl biBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0 aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRl cml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUg Y2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJp YnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQot KyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0r ICoKLSsgKi8KLSsKLSsvKiBNaW5pbWFsIHN0YW5kYWxvbmUgRklQUyB2ZXJzaW9ucyBvZiBEaWdl c3Qgb3BlcmF0aW9ucyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1 ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29i amVjdHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rY29uc3QgRVZQX01EICpGSVBT X2dldF9kaWdlc3RieW5pZChpbnQgbmlkKQotK3sKLSsgICAgc3dpdGNoIChuaWQpIHsKLSsgICAg Y2FzZSBOSURfc2hhMToKLSsgICAgICAgIHJldHVybiBFVlBfc2hhMSgpOwotKwotKyAgICBjYXNl IE5JRF9zaGEyMjQ6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTIyNCgpOwotKwotKyAgICBjYXNl IE5JRF9zaGEyNTY6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTI1NigpOwotKwotKyAgICBjYXNl IE5JRF9zaGEzODQ6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTM4NCgpOwotKwotKyAgICBjYXNl IE5JRF9zaGE1MTI6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTUxMigpOwotKwotKyAgICBkZWZh dWx0OgotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSt9Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9maXBzL2ZpcHNfcG9zdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19w b3N0LmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NjU2MjYyMiArMDEwMAotKysrIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY2 NTYyNjIyICswMTAwCi1AQCAtMCwwICsxLDIwMSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAq LwotKwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0r I2luY2x1ZGUgPGxpbWl0cy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBQb3dl ciBvbiBzZWxmIHRlc3QgKFBPU1QpIHN1cHBvcnQgZnVuY3Rpb25zICovCi0rCi0rIyBpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjIGluY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKy8qIFJ1biBh bGwgc2VsZnRlc3RzICovCi0raW50IEZJUFNfc2VsZnRlc3Qodm9pZCkKLSt7Ci0rICAgIGludCBy diA9IDE7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9kcmJnKCkpCi0rICAgICAgICBydiA9IDA7 Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF94OTMxKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAg IGlmICghRklQU19zZWxmdGVzdF9zaGExKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICgh RklQU19zZWxmdGVzdF9zaGEyKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19z ZWxmdGVzdF9obWFjKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVz dF9jbWFjKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9hZXMo KSkKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19jY20oKSkK LSsgICAgICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc19nY20oKSkKLSsg ICAgICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2Flc194dHMoKSkKLSsgICAg ICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2RlcygpKQotKyAgICAgICAgcnYg PSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfcnNhKCkpCi0rICAgICAgICBydiA9IDA7Ci0r ICAgIGlmICghRklQU19zZWxmdGVzdF9kc2EoKSkKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgcmV0 dXJuIHJ2OwotK30KLSsKLSsvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4g U2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCi0rICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1l c2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAotKyAqIGZsYWdzIG1kX2Zs YWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKLSsgKiBhZGRp dGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0 ZXN0Ci0rICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9u IHB1cnBvc2VzIGluIGNhc2UKLSsgKiBvZiBmYWlsdXJlLiBJZiAicGtleSIgaXMgTlVMTCBqdXN0 IHBlcmZvcm0gYSBtZXNzYWdlIGRpZ2VzdCBjaGVjay4KLSsgKi8KLSsKLStpbnQgZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQg a2F0bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpkaWdl c3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmZhaWxfc3RyKQotK3sKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2ln bmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7Ci0rICAgIHVuc2lnbmVkIGludCBz aWdsZW47Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4 KTsKLSsKLSsgICAgaWYgKGRpZ2VzdCA9PSBOVUxMKQotKyAgICAgICAgZGlnZXN0ID0gRVZQX3No YTI1NigpOwotKwotKyAgICBpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQotKyAgICAg ICAgJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkgewotKyAg ICAgICAgc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocGtleS0+cGtleS5yc2EpKTsKLSsg ICAgICAgIGlmICghc2lnKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19QS0VZ X1NJR05BVFVSRV9URVNULCBFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0rICAgICAgICAgICAgcmV0 dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgaWYgKHRic2xlbiA9PSAtMSkKLSsg ICAgICAgIHRic2xlbiA9IHN0cmxlbigoY2hhciAqKXRicyk7Ci0rCi0rICAgIGlmIChtZF9mbGFn cykKLSsgICAgICAgIEVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFncyk7Ci0rCi0r ICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKyAgICAgICAg Z290byBlcnJvcjsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4p KQotKyAgICAgICAgZ290byBlcnJvcjsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBz aWcsICZzaWdsZW4sIHBrZXkpKQotKyAgICAgICAgZ290byBlcnJvcjsKLSsKLSsgICAgaWYgKGth dCAmJiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChrYXQsIHNpZywga2F0bGVuKSkpCi0r ICAgICAgICBnb3RvIGVycm9yOwotKwotKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4 LCBkaWdlc3QsIE5VTEwpKQotKyAgICAgICAgZ290byBlcnJvcjsKLSsgICAgaWYgKCFFVlBfVmVy aWZ5VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rICAgICAgICBnb3RvIGVycm9yOwotKyAg ICByZXQgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5KTsKLSsKLSsg ZXJyb3I6Ci0rICAgIGlmIChzaWcgIT0gc2lndG1wKQotKyAgICAgICAgT1BFTlNTTF9mcmVlKHNp Zyk7Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChyZXQgIT0gMSkg ewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULCBGSVBT X1JfVEVTVF9GQUlMVVJFKTsKLSsgICAgICAgIGlmIChmYWlsX3N0cikKLSsgICAgICAgICAgICBF UlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIpOwotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIH0KLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIEdlbmVyYWxpemVkIHN5bW1l dHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSByZXN1bHQKLSsg KiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRoIG9yaWdpbmFs IHBsYWludGV4dC4KLSsgKi8KLSsKLStpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NU WCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCi0rICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKml2LAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnBsYWludGV4dCwKLSsgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBwbHRtcFtGSVBT X01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXRtcFtGSVBTX01B WF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsKLSsgICAgT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJUFNf TUFYX0NJUEhFUl9URVNUX1NJWkUpOwotKyAgICBtZW1zZXQocGx0bXAsIDAsIEZJUFNfTUFYX0NJ UEhFUl9URVNUX1NJWkUpOwotKyAgICBtZW1zZXQoY2l0bXAsIDAsIEZJUFNfTUFYX0NJUEhFUl9U RVNUX1NJWkUpOwotKwotKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5V TEwsIGtleSwgaXYsIDEpIDw9IDApCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKEVWUF9D aXBoZXIoY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCBsZW4pIDw9IDApCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgaWYgKG1lbWNtcChjaXRtcCwgY2lwaGVydGV4dCwgbGVuKSkKLSsgICAgICAgIHJl dHVybiAwOwotKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtl eSwgaXYsIDApIDw9IDApCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKEVWUF9DaXBoZXIo Y3R4LCBwbHRtcCwgY2l0bXAsIGxlbikgPD0gMCkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBp ZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsg ICAgcmV0dXJuIDE7Ci0rfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3Jh bmQuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAx NS0xMi0wNCAxMzo1NTo1MS45Njc1NjI2NDUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZmlwcy9maXBzX3JhbmQuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NzU2MjY0NSArMDEwMAot QEAgLTAsMCArMSw0MjggQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAw NyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKgotKyAq IFRoaXMgaXMgYSBGSVBTIGFwcHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4y LjQuCi0rICovCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgImVfb3Mu aCIKLSsKLSsvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgc3Ry dWN0IHRpbWV2YWwgd29uJ3QKLSsgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2ZkYXkoKSB3b24n dCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxlcnMKLSsgICBsaWtlIERFQyBDIGluIEFO U0kgQyBtb2RlLiAgKi8KLSsjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKLSsjIGRlZmlu ZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2lmICEoZGVmaW5lZChP UEVOU1NMX1NZU19XSU4zMikgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKSkKLSsjIGlu Y2x1ZGUgPHN5cy90aW1lLmg+Ci0rI2VuZGlmCi0rI2lmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhX T1JLUykKLSsjIGluY2x1ZGUgPHRpbWUuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+ Ci0rI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyMgaWZkZWYgT1BFTlNTTF9VTklTVEQKLSsj ICBpbmNsdWRlIE9QRU5TU0xfVU5JU1RECi0rIyBlbHNlCi0rIyAgaW5jbHVkZSA8dW5pc3RkLmg+ Ci0rIyBlbmRpZgotKyNlbmRpZgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsKLSt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKLSsKLSsjIGRlZmluZSBBRVNf QkxPQ0tfTEVOR1RIICAgICAgICAxNgotKwotKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRp b24gKi8KLSsKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rICAgIGludCBzZWVkZWQ7Ci0rICAgIGludCBr ZXllZDsKLSsgICAgaW50IHRlc3RfbW9kZTsKLSsgICAgaW50IHNlY29uZDsKLSsgICAgaW50IGVy cm9yOwotKyAgICB1bnNpZ25lZCBsb25nIGNvdW50ZXI7Ci0rICAgIEFFU19LRVkga3M7Ci0rICAg IGludCB2cG9zOwotKyAgICAvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5IGlmIGl0IGVxdWFs cyBzZWVkIGxlbmd0aCAqLwotKyAgICB1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVTX0JMT0NLX0xF TkdUSF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKLSsgICAgdW5z aWduZWQgY2hhciBEVFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsgICAgdW5zaWduZWQgY2hhciBsYXN0 W0FFU19CTE9DS19MRU5HVEhdOwotK30gRklQU19QUk5HX0NUWDsKLSsKLStzdGF0aWMgRklQU19Q Uk5HX0NUWCBzY3R4OwotKwotK3N0YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAwOwotKwotK3Zv aWQgRklQU194OTMxX3N0aWNrKGludCBvbm9mZikKLSt7Ci0rICAgIGZpcHNfcHJuZ19mYWlsID0g b25vZmY7Ci0rfQotKwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKLSt7Ci0rICAgIEZJUFNf eDkzMV9zdGljaygxKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQo RklQU19QUk5HX0NUWCAqIGN0eCkKLSt7Ci0rICAgIGN0eC0+c2VlZGVkID0gMDsKLSsgICAgY3R4 LT5rZXllZCA9IDA7Ci0rICAgIGN0eC0+dGVzdF9tb2RlID0gMDsKLSsgICAgY3R4LT5jb3VudGVy ID0gMDsKLSsgICAgY3R4LT5zZWNvbmQgPSAwOwotKyAgICBjdHgtPmVycm9yID0gMDsKLSsgICAg Y3R4LT52cG9zID0gMDsKLSsgICAgT1BFTlNTTF9jbGVhbnNlKGN0eC0+ViwgQUVTX0JMT0NLX0xF TkdUSCk7Ci0rICAgIE9QRU5TU0xfY2xlYW5zZSgmY3R4LT5rcywgc2l6ZW9mKEFFU19LRVkpKTsK LSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdfQ1RYICogY3R4 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LCB1bnNpZ25lZCBpbnQga2V5bGVuKQotK3sKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZLCBGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmIChr ZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikgewotKyAgICAgICAg LyogZXJyb3I6IGludmFsaWQga2V5IHNpemUgKi8KLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9 Ci0rICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBrZXlsZW4gPDwgMywgJmN0eC0+a3MpOwot KyAgICBpZiAoa2V5bGVuID09IDE2KSB7Ci0rICAgICAgICBtZW1jcHkoY3R4LT50bXBfa2V5LCBr ZXksIDE2KTsKLSsgICAgICAgIGN0eC0+a2V5ZWQgPSAyOwotKyAgICB9IGVsc2UKLSsgICAgICAg IGN0eC0+a2V5ZWQgPSAxOwotKyAgICBjdHgtPnNlZWRlZCA9IDA7Ci0rICAgIGN0eC0+c2Vjb25k ID0gMDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19z ZWVkKEZJUFNfUFJOR19DVFggKiBjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgdW5zaWduZWQgaW50IHNlZWRsZW4pCi0rewotKyAg ICB1bnNpZ25lZCBpbnQgaTsKLSsgICAgaWYgKCFjdHgtPmtleWVkKQotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIC8qIEluIHRlc3QgbW9kZSBzZWVkIGlzIGp1c3Qgc3VwcGxpZWQgZGF0YSAqLwot KyAgICBpZiAoY3R4LT50ZXN0X21vZGUpIHsKLSsgICAgICAgIGlmIChzZWVkbGVuICE9IEFFU19C TE9DS19MRU5HVEgpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBtZW1jcHkoY3R4 LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsgICAgICAgIGN0eC0+c2VlZGVkID0gMTsK LSsgICAgICAgIHJldHVybiAxOwotKyAgICB9Ci0rICAgIC8qIE91dHNpZGUgdGVzdCBtb2RlIFhP UiBzdXBwbGllZCBkYXRhIHdpdGggZXhpc3Rpbmcgc2VlZCAqLwotKyAgICBmb3IgKGkgPSAwOyBp IDwgc2VlZGxlbjsgaSsrKSB7Ci0rICAgICAgICBjdHgtPlZbY3R4LT52cG9zKytdIF49IHNlZWRb aV07Ci0rICAgICAgICBpZiAoY3R4LT52cG9zID09IEFFU19CTE9DS19MRU5HVEgpIHsKLSsgICAg ICAgICAgICBjdHgtPnZwb3MgPSAwOwotKyAgICAgICAgICAgIC8qIFNwZWNpYWwgY2FzZSBpZiBm aXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscwotKyAgICAgICAgICAgICAqIGJsb2NrIHNp emUgY2hlY2sga2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KLSsgICAgICAgICAgICAgKi8KLSsg ICAgICAgICAgICBpZiAoY3R4LT5rZXllZCA9PSAyKSB7Ci0rICAgICAgICAgICAgICAgIGlmICgh bWVtY21wKGN0eC0+dG1wX2tleSwgY3R4LT5WLCAxNikpIHsKLSsgICAgICAgICAgICAgICAgICAg IFJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkpOwotKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgICAgIH0KLSsgICAgICAgICAgICAg ICAgT1BFTlNTTF9jbGVhbnNlKGN0eC0+dG1wX2tleSwgMTYpOwotKyAgICAgICAgICAgICAgICBj dHgtPmtleWVkID0gMTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgY3R4LT5zZWVkZWQg PSAxOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMg aW50IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICogY3R4KQotK3sKLSsgICAgaWYg KGN0eC0+a2V5ZWQpIHsKLSsgICAgICAgIFJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9E RSwgUkFORF9SX1BSTkdfS0VZRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAg Y3R4LT50ZXN0X21vZGUgPSAxOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50IEZJUFNfeDkz MV90ZXN0X21vZGUodm9pZCkKLSt7Ci0rICAgIHJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNj dHgpOwotK30KLSsKLStpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKQotK3sKLSsgICAgcmV0 dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7Ci0rfQotKwotK2ludCBGSVBTX3g5MzFfc2V0 X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQotK3sKLSsgICAgaWYgKCFzY3R4LnRlc3RfbW9kZSkgewot KyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19YOTMxX1NFVF9EVCwgUkFORF9SX05PVF9JTl9U RVNUX01PREUpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAgbWVtY3B5KHNjdHgu RFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBG SVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQotK3sKLSsgICAgaWYgKCFzY3R4LnRl c3RfbW9kZSkgewotKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCwgUkFO RF9SX05PVF9JTl9URVNUX01PREUpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAg bWVtY3B5KHNjdHguRFQsIGR0LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsgICAgcmV0dXJuIDE7Ci0r fQotKwotK3ZvaWQgRklQU19nZXRfdGltZXZlYyh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVk IGxvbmcgKnBjdHIpCi0rewotKyMgaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsgICAgRklMRVRJ TUUgZnQ7Ci0rIyBlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsgICAgc3RydWN0 IHRpbWVzcGVjIHRzOwotKyMgZWxzZQotKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSsjIGVuZGlm Ci0rCi0rIyBpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rICAgIHVuc2lnbmVkIGxvbmcg cGlkOwotKyMgZW5kaWYKLSsKLSsjIGlmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rICAgIEdldFN5 c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7Ci0rICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKShm dC5kd0hpZ2hEYXRlVGltZSAmIDB4ZmYpOwotKyAgICBidWZbMV0gPSAodW5zaWduZWQgY2hhciko KGZ0LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rICAgIGJ1ZlsyXSA9ICh1bnNpZ25l ZCBjaGFyKSgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rICAgIGJ1ZlszXSA9 ICh1bnNpZ25lZCBjaGFyKSgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rICAg IGJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKShmdC5kd0xvd0RhdGVUaW1lICYgMHhmZik7Ci0rICAg IGJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSgoZnQuZHdMb3dEYXRlVGltZSA+PiA4KSAmIDB4ZmYp OwotKyAgICBidWZbNl0gPSAodW5zaWduZWQgY2hhcikoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMTYp ICYgMHhmZik7Ci0rICAgIGJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSgoZnQuZHdMb3dEYXRlVGlt ZSA+PiAyNCkgJiAweGZmKTsKLSsjIGVsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQot KyAgICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOwotKyAgICBidWZbMF0gPSAo dW5zaWduZWQgY2hhcikodHMudHZfc2VjICYgMHhmZik7Ci0rICAgIGJ1ZlsxXSA9ICh1bnNpZ25l ZCBjaGFyKSgodHMudHZfc2VjID4+IDgpICYgMHhmZik7Ci0rICAgIGJ1ZlsyXSA9ICh1bnNpZ25l ZCBjaGFyKSgodHMudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKyAgICBidWZbM10gPSAodW5zaWdu ZWQgY2hhcikoKHRzLnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKLSsgICAgYnVmWzRdID0gKHVuc2ln bmVkIGNoYXIpKHRzLnR2X25zZWMgJiAweGZmKTsKLSsgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNo YXIpKCh0cy50dl9uc2VjID4+IDgpICYgMHhmZik7Ci0rICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBj aGFyKSgodHMudHZfbnNlYyA+PiAxNikgJiAweGZmKTsKLSsgICAgYnVmWzddID0gKHVuc2lnbmVk IGNoYXIpKCh0cy50dl9uc2VjID4+IDI0KSAmIDB4ZmYpOwotKyMgZWxzZQotKyAgICBnZXR0aW1l b2ZkYXkoJnR2LCBOVUxMKTsKLSsgICAgYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKHR2LnR2X3Nl YyAmIDB4ZmYpOwotKyAgICBidWZbMV0gPSAodW5zaWduZWQgY2hhcikoKHR2LnR2X3NlYyA+PiA4 KSAmIDB4ZmYpOwotKyAgICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikoKHR2LnR2X3NlYyA+PiAx NikgJiAweGZmKTsKLSsgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl9zZWMgPj4g MjQpICYgMHhmZik7Ci0rICAgIGJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSh0di50dl91c2VjICYg MHhmZik7Ci0rICAgIGJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSgodHYudHZfdXNlYyA+PiA4KSAm IDB4ZmYpOwotKyAgICBidWZbNl0gPSAodW5zaWduZWQgY2hhcikoKHR2LnR2X3VzZWMgPj4gMTYp ICYgMHhmZik7Ci0rICAgIGJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSgodHYudHZfdXNlYyA+PiAy NCkgJiAweGZmKTsKLSsjIGVuZGlmCi0rICAgIGJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSgqcGN0 ciAmIDB4ZmYpOwotKyAgICBidWZbOV0gPSAodW5zaWduZWQgY2hhcikoKCpwY3RyID4+IDgpICYg MHhmZik7Ci0rICAgIGJ1ZlsxMF0gPSAodW5zaWduZWQgY2hhcikoKCpwY3RyID4+IDE2KSAmIDB4 ZmYpOwotKyAgICBidWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpKCgqcGN0ciA+PiAyNCkgJiAweGZm KTsKLSsKLSsgICAgKCpwY3RyKSsrOwotKwotKyMgaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVT UwotKyAgICBwaWQgPSAodW5zaWduZWQgbG9uZylnZXRwaWQoKTsKLSsgICAgYnVmWzEyXSA9ICh1 bnNpZ25lZCBjaGFyKShwaWQgJiAweGZmKTsKLSsgICAgYnVmWzEzXSA9ICh1bnNpZ25lZCBjaGFy KSgocGlkID4+IDgpICYgMHhmZik7Ci0rICAgIGJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikoKHBp ZCA+PiAxNikgJiAweGZmKTsKLSsgICAgYnVmWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSgocGlkID4+ IDI0KSAmIDB4ZmYpOwotKyMgZW5kaWYKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX3JhbmQoRklQ U19QUk5HX0NUWCAqIGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpv dXQsIHVuc2lnbmVkIGludCBvdXRsZW4pCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIFJbQUVTX0JM T0NLX0xFTkdUSF0sIElbQUVTX0JMT0NLX0xFTkdUSF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgdG1w W0FFU19CTE9DS19MRU5HVEhdOwotKyAgICBpbnQgaTsKLSsgICAgaWYgKGN0eC0+ZXJyb3IpIHsK LSsgICAgICAgIFJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCwgUkFORF9SX1BSTkdfRVJST1IpOwot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAgaWYgKCFjdHgtPmtleWVkKSB7Ci0rICAg ICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsIFJBTkRfUl9OT19LRVlfU0VUKTsKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmICghY3R4LT5zZWVkZWQpIHsKLSsgICAgICAg IFJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCwgUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7Ci0rICAg ICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBmb3IgKDs7KSB7Ci0rICAgICAgICBpZiAoIWN0 eC0+dGVzdF9tb2RlKQotKyAgICAgICAgICAgIEZJUFNfZ2V0X3RpbWV2ZWMoY3R4LT5EVCwgJmN0 eC0+Y291bnRlcik7Ci0rICAgICAgICBBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAmY3R4LT5rcyk7 Ci0rICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKyAgICAg ICAgICAgIHRtcFtpXSA9IElbaV0gXiBjdHgtPlZbaV07Ci0rICAgICAgICBBRVNfZW5jcnlwdCh0 bXAsIFIsICZjdHgtPmtzKTsKLSsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVO R1RIOyBpKyspCi0rICAgICAgICAgICAgdG1wW2ldID0gUltpXSBeIElbaV07Ci0rICAgICAgICBB RVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3MpOwotKyAgICAgICAgLyogQ29udGludW91 cyBQUk5HIHRlc3QgKi8KLSsgICAgICAgIGlmIChjdHgtPnNlY29uZCkgewotKyAgICAgICAgICAg IGlmIChmaXBzX3BybmdfZmFpbCkKLSsgICAgICAgICAgICAgICAgbWVtY3B5KGN0eC0+bGFzdCwg UiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rICAgICAgICAgICAgaWYgKCFtZW1jbXAoUiwgY3R4LT5s YXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkgewotKyAgICAgICAgICAgICAgICBSQU5EZXJyKFJBTkRf Rl9GSVBTX1JBTkQsIFJBTkRfUl9QUk5HX1NUVUNLKTsKLSsgICAgICAgICAgICAgICAgY3R4LT5l cnJvciA9IDE7Ci0rICAgICAgICAgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsg ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyAg ICAgICAgbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rICAgICAgICBp ZiAoIWN0eC0+c2Vjb25kKSB7Ci0rICAgICAgICAgICAgY3R4LT5zZWNvbmQgPSAxOwotKyAgICAg ICAgICAgIGlmICghY3R4LT50ZXN0X21vZGUpCi0rICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot KyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKSB7 Ci0rICAgICAgICAgICAgbWVtY3B5KG91dCwgUiwgb3V0bGVuKTsKLSsgICAgICAgICAgICBicmVh azsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIG1lbWNweShvdXQsIFIsIEFFU19CTE9DS19MRU5H VEgpOwotKyAgICAgICAgb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7Ci0rICAgICAgICBvdXRsZW4g LT0gQUVTX0JMT0NLX0xFTkdUSDsKLSsgICAgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50 IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbikK LSt7Ci0rICAgIGludCByZXQ7Ci0rICAgIENSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 Ci0rICAgIHJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7Ci0rICAg IENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsgICAgcmV0dXJuIHJldDsKLSt9 Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQ U19SQU5EX1NJWkVfVCBrZXlsZW4pCi0rewotKyAgICByZXR1cm4gRklQU194OTMxX3NldF9rZXko a2V5LCBrZXlsZW4pOwotK30KLSsKLStpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqc2Vl ZCwgaW50IHNlZWRsZW4pCi0rewotKyAgICBpbnQgcmV0OwotKyAgICBDUllQVE9fd19sb2NrKENS WVBUT19MT0NLX1JBTkQpOwotKyAgICByZXQgPSBmaXBzX3NldF9wcm5nX3NlZWQoJnNjdHgsIHNl ZWQsIHNlZWRsZW4pOwotKyAgICBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0r ICAgIHJldHVybiByZXQ7Ci0rfQotKwotK2ludCBGSVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hh ciAqb3V0LCBpbnQgY291bnQpCi0rewotKyAgICBpbnQgcmV0OwotKyAgICBDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX1JBTkQpOwotKyAgICByZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291 bnQpOwotKyAgICBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIHJldHVy biByZXQ7Ci0rfQotKwotK2ludCBGSVBTX3g5MzFfc3RhdHVzKHZvaWQpCi0rewotKyAgICBpbnQg cmV0OwotKyAgICBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAgICByZXQgPSBz Y3R4LnNlZWRlZDsKLSsgICAgQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAg ICByZXR1cm4gcmV0OwotK30KLSsKLSt2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKQotK3sKLSsg ICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsgICAgZmlwc19yYW5kX3Bybmdf cmVzZXQoJnNjdHgpOwotKyAgICBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0r fQotKwotK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgaW50 IHNlZWRsZW4pCi0rewotKyAgICBGSVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsgICAg cmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lk ICpzZWVkLCBpbnQgc2VlZGxlbiwgZG91YmxlIGFkZF9lbnRyb3B5KQotK3sKLSsgICAgRklQU194 OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMg Y29uc3QgUkFORF9NRVRIT0QgcmFuZF94OTMxX21ldGggPSB7Ci0rICAgIGZpcHNfZG9fcmFuZF9z ZWVkLAotKyAgICBGSVBTX3g5MzFfYnl0ZXMsCi0rICAgIEZJUFNfeDkzMV9yZXNldCwKLSsgICAg Zmlwc19kb19yYW5kX2FkZCwKLSsgICAgRklQU194OTMxX2J5dGVzLAotKyAgICBGSVBTX3g5MzFf c3RhdHVzCi0rfTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU194OTMxX21ldGhvZCh2b2lk KQotK3sKLSsgICAgcmV0dXJuICZyYW5kX3g5MzFfbWV0aDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmguZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NzU2MjY0NSArMDEw MAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCTIwMTUtMTItMDQg MTM6NTU6NTEuOTY3NTYyNjQ1ICswMTAwCi1AQCAtMCwwICsxLDE2MyBAQAotKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJl IG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgot KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwot KyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgot KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KLSsgKgotKyAqLwotKwotKyNpZm5kZWYgSEVBREVSX0ZJUFNfUkFORF9ICi0rIyBkZWZpbmUg SEVBREVSX0ZJUFNfUkFORF9ICi0rCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyMgaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjIGluY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyMgaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjICBp ZmRlZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjICBlbmRpZgotKwotKyAgICBpbnQg RklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKTsK LSsgICAgaW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7Ci0rICAg IGludCBGSVBTX3g5MzFfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgb3V0bGVuKTsKLSsK LSsgICAgaW50IEZJUFNfeDkzMV90ZXN0X21vZGUodm9pZCk7Ci0rICAgIHZvaWQgRklQU194OTMx X3Jlc2V0KHZvaWQpOwotKyAgICBpbnQgRklQU194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpk dCk7Ci0rCi0rICAgIGludCBGSVBTX3g5MzFfc3RhdHVzKHZvaWQpOwotKwotKyAgICBjb25zdCBS QU5EX01FVEhPRCAqRklQU194OTMxX21ldGhvZCh2b2lkKTsKLSsKLSsgICAgdHlwZWRlZiBzdHJ1 Y3QgZHJiZ19jdHhfc3QgRFJCR19DVFg7Ci0rLyogRFJCRyBleHRlcm5hbCBmbGFncyAqLwotKy8q IEZsYWcgZm9yIENUUiBtb2RlIG9ubHk6IHVzZSBkZXJpdmF0aW9uIGZ1bmN0aW9uIGN0cl9kZiAq LwotKyMgIGRlZmluZSBEUkJHX0ZMQUdfQ1RSX1VTRV9ERiAgICAgICAgICAgIDB4MQotKy8qIFBS TkcgaXMgaW4gdGVzdCBzdGF0ZSAqLwotKyMgIGRlZmluZSBEUkJHX0ZMQUdfVEVTVCAgICAgICAg ICAgICAgICAgIDB4MgotKwotKyAgICBEUkJHX0NUWCAqRklQU19kcmJnX25ldyhpbnQgdHlwZSwg dW5zaWduZWQgaW50IGZsYWdzKTsKLSsgICAgaW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpk Y3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLSsgICAgaW50IEZJUFNfZHJiZ19p bnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7Ci0rICAgIGludCBG SVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGlu LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWRpbmxlbik7Ci0rICAgIGludCBG SVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6 ZV90IG91dGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlZGljdGlvbl9y ZXNpc3RhbmNlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKLSsKLSsgICAgaW50IEZJUFNfZHJiZ191bmluc3Rh bnRpYXRlKERSQkdfQ1RYICpkY3R4KTsKLSsgICAgdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NU WCAqZGN0eCk7Ci0rCi0rICAgIGludCBGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhEUkJHX0NUWCAq ZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAoKmdldF9lbnRy b3B5KSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgbWluX2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IG1heF9sZW4pLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAoKmNsZWFudXBfZW50cm9weSkgKERSQkdfQ1RYICpjdHgsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgY2hhciAqb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICgqZ2V0X25vbmNlKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg Kipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGVudHJvcHksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgbWluX2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfbGVuKSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX25vbmNlKSAoRFJCR19DVFgg KmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xlbikpOwotKwotKyAgICBpbnQgRklQ U19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X2FkaW4pIChEUkJHX0NUWCAqY3R4 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqKnBvdXQpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICgqY2xlYW51cF9hZGluKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICgqcmFuZF9zZWVkX2NiKSAoRFJCR19DVFggKmN0eCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgdm9pZCAqYnVmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbnVtKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICgqcmFuZF9hZGRfY2IpIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg KmJ1ZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbnVtLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbnRyb3B5KSk7Ci0rCi0rICAgIHZvaWQgKkZJUFNf ZHJiZ19nZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCk7Ci0rICAgIHZvaWQgRklQU19kcmJnX3Nl dF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4LCB2b2lkICphcHBfZGF0YSk7Ci0rICAgIHNpemVfdCBG SVBTX2RyYmdfZ2V0X2Jsb2NrbGVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKLSsgICAgaW50IEZJUFNf ZHJiZ19nZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpOwotKyAgICB2b2lkIEZJUFNfZHJiZ19z ZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCk7Ci0rICAgIHZv aWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRl cnZhbCk7Ci0rCi0rICAgIGludCBGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKERSQkdfQ1RYICpkY3R4 KTsKLSsKLSsgICAgRFJCR19DVFggKkZJUFNfZ2V0X2RlZmF1bHRfZHJiZyh2b2lkKTsKLSsgICAg Y29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCk7Ci0rCi0rICAgIGludCBG SVBTX3JhbmRfc2V0X21ldGhvZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCk7Ci0rICAgIGNvbnN0 IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2b2lkKTsKLSsKLSsgICAgdm9pZCBG SVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKTsKLSsKLSsgICAgaW50IEZJUFNfcmFuZF9zdHJl bmd0aCh2b2lkKTsKLSsKLSsvKiAxLjAuMCBjb21wYXQgZnVuY3Rpb25zICovCi0rICAgIGludCBG SVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpF X1Qga2V5bGVuKTsKLSsgICAgaW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQ U19SQU5EX1NJWkVfVCBudW0pOwotKyAgICBpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNo YXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOwotKyAgICBpbnQgRklQU19yYW5kX3Rl c3RfbW9kZSh2b2lkKTsKLSsgICAgdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7Ci0rICAgIGlu dCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLSsgICAgaW50IEZJUFNfcmFu ZF9zdGF0dXModm9pZCk7Ci0rICAgIGNvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9k KHZvaWQpOwotKwotKyMgIGlmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjICBlbmRpZgotKyMgZW5k aWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFu ZF9sY2wuaC5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaAot LS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaC5maXBzCTIwMTUt MTItMDQgMTM6NTU6NTEuOTY3NTYyNjQ1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRv L2ZpcHMvZmlwc19yYW5kX2xjbC5oCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY3NTYyNjQ1ICswMTAw Ci1AQCAtMCwwICsxLDIxMyBAQAotKy8qIGZpcHMvcmFuZC9maXBzX3JhbmRfbGNsLmggKi8KLSsv 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 PT09PQotKyAqLwotKwotK3R5cGVkZWYgc3RydWN0IGRyYmdfaGFzaF9jdHhfc3QgRFJCR19IQVNI X0NUWDsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2htYWNfY3R4X3N0IERSQkdfSE1BQ19DVFg7Ci0r dHlwZWRlZiBzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0IERSQkdfQ1RSX0NUWDsKLSsKLSsvKiA4ODgg Yml0cyBmcm9tIDEwLjEgdGFibGUgMiAqLwotKyNkZWZpbmUgSEFTSF9QUk5HX01BWF9TRUVETEVO ICAgMTExCi0rCi0rc3RydWN0IGRyYmdfaGFzaF9jdHhfc3QgewotKyAgICBjb25zdCBFVlBfTUQg Km1kOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIHVuc2lnbmVkIGNoYXIgVltIQVNIX1BS TkdfTUFYX1NFRURMRU5dOwotKyAgICB1bnNpZ25lZCBjaGFyIENbSEFTSF9QUk5HX01BWF9TRUVE TEVOXTsKLSsgICAgLyogVGVtcG9yYXJ5IHZhbHVlIHN0b3JhZ2U6IHNob3VsZCBhbHdheXMgZXhj ZWVkIG1heCBkaWdlc3QgbGVuZ3RoICovCi0rICAgIHVuc2lnbmVkIGNoYXIgdnRtcFtIQVNIX1BS TkdfTUFYX1NFRURMRU5dOwotK307Ci0rCi0rc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgewotKyAg ICBjb25zdCBFVlBfTUQgKm1kOwotKyAgICBITUFDX0NUWCBoY3R4OwotKyAgICB1bnNpZ25lZCBj aGFyIEtbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgY2hhciBWW0VWUF9NQVhfTURf U0laRV07Ci0rfTsKLSsKLStzdHJ1Y3QgZHJiZ19jdHJfY3R4X3N0IHsKLSsgICAgQUVTX0tFWSBr czsKLSsgICAgc2l6ZV90IGtleWxlbjsKLSsgICAgdW5zaWduZWQgY2hhciBLWzMyXTsKLSsgICAg dW5zaWduZWQgY2hhciBWWzE2XTsKLSsgICAgLyogVGVtcCB2YXJpYWJsZXMgdXNlZCBieSBkZXJp dmF0aW9uIGZ1bmN0aW9uICovCi0rICAgIEFFU19LRVkgZGZfa3M7Ci0rICAgIEFFU19LRVkgZGZf a3hrczsKLSsgICAgLyogVGVtcG9yYXJ5IGJsb2NrIHN0b3JhZ2UgdXNlZCBieSBjdHJfZGYgKi8K LSsgICAgdW5zaWduZWQgY2hhciBibHRtcFsxNl07Ci0rICAgIHNpemVfdCBibHRtcF9wb3M7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgS1hbNDhdOwotK307Ci0rCi0rLyogRFJCRyBpbnRlcm5hbCBmbGFn cyAqLwotKwotKy8qIEZ1bmN0aW9ucyBzaG91bGRuJ3QgY2FsbCBlcnIgbGlicmFyeSAqLwotKyNk ZWZpbmUgRFJCR19GTEFHX05PRVJSICAgICAgICAgICAgICAgICAweDEKLSsvKiBDdXN0b20gcmVz ZWVkIGNoZWNraW5nICovCi0rI2RlZmluZSBEUkJHX0NVU1RPTV9SRVNFRUQgICAgICAgICAgICAg IDB4MgotKwotKy8qIERSQkcgc3RhdHVzIHZhbHVlcyAqLwotKy8qIG5vdCBpbml0aWFsaXNlZCAq LwotKyNkZWZpbmUgRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCAgICAgICAwCi0rLyogb2sgYW5k IHJlYWR5IHRvIGdlbmVyYXRlIHJhbmRvbSBiaXRzICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19S RUFEWSAgICAgICAgICAgICAgIDEKLSsvKiByZXNlZWQgcmVxdWlyZWQgKi8KLSsjZGVmaW5lIERS QkdfU1RBVFVTX1JFU0VFRCAgICAgICAgICAgICAgMgotKy8qIGZhdGFsIGVycm9yIGNvbmRpdGlv biAqLwotKyNkZWZpbmUgRFJCR19TVEFUVVNfRVJST1IgICAgICAgICAgICAgICAzCi0rCi0rLyog QSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoOiBsYXJnZXIgdGhhbiBhbnkgcmVhc29uYWJsZSB2YWx1 ZSB1c2VkIGluIHByYXRpY2UgKi8KLSsKLSsjZGVmaW5lIERSQkdfTUFYX0xFTkdUSCAgICAgICAg ICAgICAgICAgMHg3ZmZmZmZmMAotKy8qIE1heGltdW0gRFJCRyBibG9jayBsZW5ndGg6IGFsbCBt ZCBzaXplcyBhcmUgYmlnZ2VyIHRoYW4gY2lwaGVyIGJsb2NrcyBzaXplcwotKyAqIHNvIHVzZSBt YXggZGlnZXN0IGxlbmd0aC4KLSsgKi8KLSsjZGVmaW5lIERSQkdfTUFYX0JMT0NLICAgICAgICAg ICAgICAgICAgRVZQX01BWF9NRF9TSVpFCi0rCi0rI2RlZmluZSBEUkJHX0hFQUxUSF9JTlRFUlZB TCAgICAgICAgICAgICgxIDw8IDI0KQotKwotKy8qIERSQkcgY29udGV4dCBzdHJ1Y3R1cmUgKi8K LSsKLStzdHJ1Y3QgZHJiZ19jdHhfc3QgewotKyAgICAvKiBGaXJzdCB0eXBlcyBjb21tb24gdG8g YWxsIGltcGxlbWVudGF0aW9ucyAqLwotKyAgICAvKiBEUkJHIHR5cGU6IGEgTklEIGZvciB0aGUg dW5kZXJseWluZyBhbGdvcml0aG0gKi8KLSsgICAgaW50IHR5cGU7Ci0rICAgIC8qIFZhcmlvdXMg ZXh0ZXJuYWwgZmxhZ3MgKi8KLSsgICAgdW5zaWduZWQgaW50IHhmbGFnczsKLSsgICAgLyogVmFy aW91cyBpbnRlcm5hbCB1c2Ugb25seSBmbGFncyAqLwotKyAgICB1bnNpZ25lZCBpbnQgaWZsYWdz OwotKyAgICAvKiBVc2VkIGZvciBwZXJpb2RpYyBoZWFsdGggY2hlY2tzICovCi0rICAgIGludCBo ZWFsdGhfY2hlY2tfY250LCBoZWFsdGhfY2hlY2tfaW50ZXJ2YWw7Ci0rCi0rICAgIC8qIFRoZSBm b2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgc2V0dXAgYnkgbWVjaGFuaXNtIGRyYmdfaW5pdCgpIGNh bGwgKi8KLSsgICAgaW50IHN0cmVuZ3RoOwotKyAgICBzaXplX3QgYmxvY2tsZW5ndGg7Ci0rICAg IHNpemVfdCBtYXhfcmVxdWVzdDsKLSsKLSsgICAgc2l6ZV90IG1pbl9lbnRyb3B5LCBtYXhfZW50 cm9weTsKLSsgICAgc2l6ZV90IG1pbl9ub25jZSwgbWF4X25vbmNlOwotKyAgICBzaXplX3QgbWF4 X3BlcnMsIG1heF9hZGluOwotKyAgICB1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXI7Ci0rICAg IHVuc2lnbmVkIGludCByZXNlZWRfaW50ZXJ2YWw7Ci0rICAgIHNpemVfdCBzZWVkbGVuOwotKyAg ICBpbnQgc3RhdHVzOwotKyAgICAvKiBBcHBsaWNhdGlvbiBkYXRhOiB0eXBpY2FsbHkgdXNlZCBi eSB0ZXN0IGdldF9lbnRyb3B5ICovCi0rICAgIHZvaWQgKmFwcF9kYXRhOwotKyAgICAvKiBJbXBs ZW1lbnRhdGlvbiBzcGVjaWZpYyBzdHJ1Y3R1cmVzICovCi0rICAgIHVuaW9uIHsKLSsgICAgICAg IERSQkdfSEFTSF9DVFggaGFzaDsKLSsgICAgICAgIERSQkdfSE1BQ19DVFggaG1hYzsKLSsgICAg ICAgIERSQkdfQ1RSX0NUWCBjdHI7Ci0rICAgIH0gZDsKLSsgICAgLyogSW5pdGlhbGlhc2UgUFJO RyBhbmQgc2V0dXAgY2FsbGJhY2tzIGJlbG93ICovCi0rICAgIGludCAoKmluaXQpIChEUkJHX0NU WCAqY3R4LCBpbnQgbmlkLCBpbnQgc2VjdXJpdHksIHVuc2lnbmVkIGludCBmbGFncyk7Ci0rICAg IC8qIEludGFudGlhdGUgUFJORyAqLwotKyAgICBpbnQgKCppbnN0YW50aWF0ZSkgKERSQkdfQ1RY ICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50 LCBzaXplX3QgZW50bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOwotKyAgICAvKiByZXNl ZWQgKi8KLSsgICAgaW50ICgqcmVzZWVkKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAotKyAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0r ICAgIC8qIGdlbmVyYXQgb3V0cHV0ICovCi0rICAgIGludCAoKmdlbmVyYXRlKSAoRFJCR19DVFgg KmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBv dXRsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5sZW4pOwotKyAgICAvKiB1bmluc3RhbnRpYXRlICovCi0rICAgIGludCAoKnVu aW5zdGFudGlhdGUpIChEUkJHX0NUWCAqY3R4KTsKLSsKLSsgICAgLyogRW50cm9weSBzb3VyY2Ug YmxvY2sgbGVuZ3RoICovCi0rICAgIHNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuOwotKwotKyAgICAv KiBlbnRyb3B5IGdhdGhlcmluZyBmdW5jdGlvbiAqLwotKyAgICBzaXplX3QgKCpnZXRfZW50cm9w eSkgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4p OwotKyAgICAvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIGVudHJvcHkgYnVmZmVy ICovCi0rICAgIHZvaWQgKCpjbGVhbnVwX2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LCB1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKLSsKLSsgICAgLyogbm9uY2UgZ2F0aGVyaW5nIGZ1 bmN0aW9uICovCi0rICAgIHNpemVfdCAoKmdldF9ub25jZSkgKERSQkdfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwg c2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKLSsgICAgLyogSW5kaWNhdGVzIHdlIGhh dmUgZmluaXNoZWQgd2l0aCBub25jZSBidWZmZXIgKi8KLSsgICAgdm9pZCAoKmNsZWFudXBfbm9u Y2UpIChEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKLSsK LSsgICAgLyogQ29udGludW91cyByYW5kb20gbnVtYmVyIHRlc3QgdGVtcG9yYXJ5IGFyZWEgKi8K LSsgICAgLyogTGFzdCBibG9jayAqLwotKyAgICB1bnNpZ25lZCBjaGFyIGxiW0VWUF9NQVhfTURf U0laRV07Ci0rICAgIC8qIHNldCBpZiBsYiBpcyB2YWxpZCAqLwotKyAgICBpbnQgbGJfdmFsaWQ7 Ci0rCi0rICAgIC8qIENhbGxiYWNrcyB1c2VkIHdoZW4gY2FsbGVkIHRocm91Z2ggUkFORCBpbnRl cmZhY2UgKi8KLSsgICAgLyogR2V0IGFueSBhZGRpdGlvbmFsIGlucHV0IGZvciBnZW5lcmF0ZSAq LwotKyAgICBzaXplX3QgKCpnZXRfYWRpbikgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Kipwb3V0KTsKLSsgICAgdm9pZCAoKmNsZWFudXBfYWRpbikgKERSQkdfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOwotKyAgICAvKiBDYWxsYmFjayBmb3IgUkFORF9z ZWVkKCksIFJBTkRfYWRkKCkgKi8KLSsgICAgaW50ICgqcmFuZF9zZWVkX2NiKSAoRFJCR19DVFgg KmN0eCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKLSsgICAgaW50ICgqcmFuZF9hZGRfY2Ip IChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1 ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpOwotK307Ci0rCi0raW50IGZpcHNfZHJiZ19jdHJf aW5pdChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IGZpcHNfZHJiZ19oYXNoX2luaXQoRFJCR19DVFgg KmRjdHgpOwotK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KTsKLStpbnQg Zmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZsYWdz KTsKLStpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKm91dCk7Ci0rCi0rY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqRklQU19nZXRfZGln ZXN0YnluaWQoaW50IG5pZCk7Ci0rCi0rY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKkZJUFNf Z2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOwotKwotKyNkZWZpbmUgRklQU19kaWdlc3Rpbml0IEVW UF9EaWdlc3RJbml0Ci0rI2RlZmluZSBGSVBTX2RpZ2VzdHVwZGF0ZSBFVlBfRGlnZXN0VXBkYXRl Ci0rI2RlZmluZSBGSVBTX2RpZ2VzdGZpbmFsIEVWUF9EaWdlc3RGaW5hbAotKyNkZWZpbmUgTV9F VlBfTURfc2l6ZSBFVlBfTURfc2l6ZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Zp cHMvZmlwc19yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19y YW5kX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5j LmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njc1NjI2NDUgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njc1 NjI2NDUgKzAxMDAKLUBAIC0wLDAgKzEsMTgxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICov Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgot KwotKy8qIEZJUFMgQVBJIGZvciBQUk5HIHVzZS4gU2ltaWxhciB0byBSQU5EIGZ1bmN0aW9uYWxp dHkgYnV0IHdpdGhvdXQKLSsgKiBFTkdJTkUgYW5kIGFkZGl0aW9uYWwgY2hlY2tpbmcgZm9yIG5v bi1GSVBTIHJhbmQgbWV0aG9kcy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgUkFORF9NRVRIT0Qg KmZpcHNfcmFuZF9tZXRoID0gTlVMTDsKLStzdGF0aWMgaW50IGZpcHNfYXBwcm92ZWRfcmFuZF9t ZXRoID0gMDsKLStzdGF0aWMgaW50IGZpcHNfcmFuZF9iaXRzID0gMDsKLSsKLSsvKiBBbGxvd3Mg YXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgbnVtYmVyIG9mIGJpdHMgYW5kIHVzZXMgbm9uLUZJUFMg bWV0aG9kcyAqLwotK3ZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cykKLSt7Ci0rICAg IGZpcHNfcmFuZF9iaXRzID0gbmJpdHM7Ci0rfQotKwotK2ludCBGSVBTX3JhbmRfc2V0X21ldGhv ZChjb25zdCBSQU5EX01FVEhPRCAqbWV0aCkKLSt7Ci0rICAgIGlmICghZmlwc19yYW5kX2JpdHMp IHsKLSsgICAgICAgIGlmIChtZXRoID09IEZJUFNfZHJiZ19tZXRob2QoKSkKLSsgICAgICAgICAg ICBmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDE7Ci0rICAgICAgICBlbHNlIGlmIChtZXRoID09 IEZJUFNfeDkzMV9tZXRob2QoKSkKLSsgICAgICAgICAgICBmaXBzX2FwcHJvdmVkX3JhbmRfbWV0 aCA9IDI7Ci0rICAgICAgICBlbHNlIHsKLSsgICAgICAgICAgICBmaXBzX2FwcHJvdmVkX3JhbmRf bWV0aCA9IDA7Ci0rICAgICAgICAgICAgaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkgewotKyAgICAg ICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRCwgRklQU19SX05P Tl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAg IH0KLSsgICAgICAgIH0KLSsgICAgfQotKyAgICBmaXBzX3JhbmRfbWV0aCA9IG1ldGg7Ci0rICAg IHJldHVybiAxOwotK30KLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRo b2Qodm9pZCkKLSt7Ci0rICAgIHJldHVybiBmaXBzX3JhbmRfbWV0aDsKLSt9Ci0rCi0rY29uc3Qg UkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCkKLSt7Ci0rICAgIHJldHVybiBGSVBT X3JhbmRfZ2V0X21ldGhvZCgpOwotK30KLSsKLSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQot K3sKLSsgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKQot KyAgICAgICAgZmlwc19yYW5kX21ldGgtPmNsZWFudXAoKTsKLSt9Ci0rCi0raW50IEZJUFNfcmFu ZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pCi0rewotKyAgICBp ZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgewotKyAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFRUQsIEZJUFNfUl9OT05fRklQU19NRVRI T0QpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAgaWYgKGZpcHNfcmFuZF9tZXRo ICYmIGZpcHNfcmFuZF9tZXRoLT5zZWVkKQotKyAgICAgICAgZmlwc19yYW5kX21ldGgtPnNlZWQo YnVmLCBudW0pOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rdm9pZCBGSVBTX3JhbmRfYWRkKGNv bnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwgZG91YmxlIGVudHJvcHkpCi0rewotKyAgICBpZiAoIWZp cHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgewotKyAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19SQU5EX0FERCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0r ICAgICAgICByZXR1cm47Ci0rICAgIH0KLSsgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNf cmFuZF9tZXRoLT5hZGQpCi0rICAgICAgICBmaXBzX3JhbmRfbWV0aC0+YWRkKGJ1ZiwgbnVtLCBl bnRyb3B5KTsKLSt9Ci0rCi0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYs IEZJUFNfUkFORF9TSVpFX1QgbnVtKQotK3sKLSsgICAgaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRf bWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfUkFORF9CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICByZXR1cm4g MDsKLSsgICAgfQotKyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmJ5 dGVzKQotKyAgICAgICAgcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5ieXRlcyhidWYsIG51bSk7Ci0r ICAgIHJldHVybiAwOwotK30KLSsKLStpbnQgRklQU19yYW5kX3BzZXVkb19ieXRlcyh1bnNpZ25l ZCBjaGFyICpidWYsIGludCBudW0pCi0rewotKyAgICBpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9t ZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19SQU5EX1BTRVVET19CWVRFUywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21l dGgtPnBzZXVkb3JhbmQpCi0rICAgICAgICByZXR1cm4gZmlwc19yYW5kX21ldGgtPnBzZXVkb3Jh bmQoYnVmLCBudW0pOwotKyAgICByZXR1cm4gLTE7Ci0rfQotKwotK2ludCBGSVBTX3JhbmRfc3Rh dHVzKHZvaWQpCi0rewotKyAgICBpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNf bW9kdWxlX21vZGUoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NUQVRV UywgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQot KyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnN0YXR1cykKLSsgICAg ICAgIHJldHVybiBmaXBzX3JhbmRfbWV0aC0+c3RhdHVzKCk7Ci0rICAgIHJldHVybiAwOwotK30K LSsKLSsvKiBSZXR1cm4gaW5zdGFudGlhdGVkIHN0cmVuZ3RoIG9mIFBSTkcuIEZvciBEUkJHIHRo aXMgaXMgYW4gaW50ZXJuYWwKLSsgKiBwYXJhbWV0ZXIuIEZvciBYOS4zMSBQUk5HIGl0IGlzIDgw IGJpdHMgKGZyb20gU1A4MDAtMTMxKS4gQW55IG90aGVyCi0rICogdHlwZSBvZiBQUk5HIGlzIG5v dCBhcHByb3ZlZCBhbmQgcmV0dXJucyAwIGluIEZJUFMgbW9kZSBhbmQgbWF4aW11bQotKyAqIDI1 NiBvdXRzaWRlIEZJUFMgbW9kZS4KLSsgKi8KLSsKLStpbnQgRklQU19yYW5kX3N0cmVuZ3RoKHZv aWQpCi0rewotKyAgICBpZiAoZmlwc19yYW5kX2JpdHMpCi0rICAgICAgICByZXR1cm4gZmlwc19y YW5kX2JpdHM7Ci0rICAgIGlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAxKQotKyAgICAg ICAgcmV0dXJuIEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRklQU19nZXRfZGVmYXVsdF9kcmJnKCkp OwotKyAgICBlbHNlIGlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAyKQotKyAgICAgICAg cmV0dXJuIDgwOwotKyAgICBlbHNlIGlmIChmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9PSAwKSB7 Ci0rICAgICAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpKQotKyAgICAgICAgICAgIHJldHVybiAw OwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIHJldHVybiAyNTY7Ci0rICAgIH0KLSsgICAg cmV0dXJuIDA7Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19y YW5kX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmRf c2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxm dGVzdC5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njc1NjI2NDUgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDE1LTEyLTA0IDEz OjU1OjUxLjk2NzU2MjY0NSArMDEwMAotQEAgLTAsMCArMSwxNzYgQEAKLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19s b2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3R5cGVkZWYgc3RydWN0IHsKLSsg ICAgdW5zaWduZWQgY2hhciBEVFsxNl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rICAg IHVuc2lnbmVkIGNoYXIgUlsxNl07Ci0rfSBBRVNfUFJOR19UVjsKLSsKLSsvKiBUaGUgZm9sbG93 aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdOVlMgc3BlYyAq LwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9Ci0rICAgIHsgMHhm MywgMHhiMSwgMHg2NiwgMHg2ZCwgMHgxMywgMHg2MCwgMHg3MiwgMHg0MiwKLSsgICAgMHhlZCwg MHgwNiwgMHgxYywgMHhhYiwgMHhiOCwgMHhkNCwgMHg2MiwgMHgwMgotK307Ci0rCi0rc3RhdGlj IEFFU19QUk5HX1RWIGFlc18xMjhfdHYgPSB7Ci0rICAgIC8qIERUICovCi0rICAgIHsweGU2LCAw eGIzLCAweGJlLCAweDc4LCAweDJhLCAweDIzLCAweGZhLCAweDYyLAotKyAgICAgMHhkNywgMHgx ZCwgMHg0YSwgMHhmYiwgMHhiMCwgMHhlOSwgMHgyMiwgMHhmOX0sCi0rICAgIC8qIFYgKi8KLSsg ICAgezB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0rICAg ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKLSsgICAg LyogUiAqLwotKyAgICB7MHg1OSwgMHg1MywgMHgxZSwgMHhkMSwgMHgzYiwgMHhiMCwgMHhjMCwg MHg1NSwKLSsgICAgIDB4ODQsIDB4NzksIDB4NjYsIDB4ODUsIDB4YzEsIDB4MmYsIDB4NzYsIDB4 NDF9Ci0rfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX2tleVsyNF0gPQotKyAg ICB7IDB4MTUsIDB4ZDgsIDB4NzgsIDB4MGQsIDB4NjIsIDB4ZDMsIDB4MjUsIDB4NmUsCi0rICAg IDB4NDQsIDB4NjQsIDB4MTAsIDB4MTMsIDB4NjAsIDB4MmIsIDB4YTksIDB4YmMsCi0rICAgIDB4 NGEsIDB4ZmIsIDB4Y2EsIDB4ZWIsIDB4NGMsIDB4OGIsIDB4OTksIDB4M2IKLSt9OwotKwotK3N0 YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2ID0gewotKyAgICAvKiBEVCAqLwotKyAgICB7MHgz ZiwgMHhkOCwgMHhmZiwgMHhlOCwgMHg4MCwgMHg2OSwgMHg4YiwgMHhjMSwKLSsgICAgIDB4YmYs IDB4OTksIDB4N2QsIDB4YTQsIDB4MjQsIDB4NzgsIDB4ZjMsIDB4NGJ9LAotKyAgICAvKiBWICov Ci0rICAgIHsweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAot KyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCi0r ICAgIC8qIFIgKi8KLSsgICAgezB4MTcsIDB4MDcsIDB4ZDUsIDB4MjgsIDB4MTksIDB4NzksIDB4 MWUsIDB4ZWYsCi0rICAgICAweGE1LCAweDBjLCAweGJmLCAweDI1LCAweGU1LCAweDU2LCAweGI0 LCAweDkzfQotK307Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0K LSsgICAgeyAweDZkLCAweDE0LCAweDA2LCAweDZjLCAweGI2LCAweGQ4LCAweDIxLCAweDJkLAot KyAgICAweDgyLCAweDhkLCAweGZhLCAweGYyLCAweDdhLCAweDAzLCAweGI3LCAweDlmLAotKyAg ICAweDBjLCAweGM3LCAweDNlLCAweGNkLCAweDc2LCAweGViLCAweGVlLCAweGI1LAotKyAgICAw eDIxLCAweDA1LCAweDhjLCAweDRmLCAweDMxLCAweDdhLCAweDgwLCAweGJiCi0rfTsKLSsKLStz dGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90diA9IHsKLSsgICAgLyogRFQgKi8KLSsgICAgezB4 ZGEsIDB4M2EsIDB4NDEsIDB4ZWMsIDB4MWQsIDB4YTMsIDB4YjAsIDB4ZDUsCi0rICAgICAweGYy LCAweGE5LCAweDRlLCAweDM0LCAweDc0LCAweDhlLCAweDllLCAweDg4fSwKLSsgICAgLyogViAq LwotKyAgICB7MHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwK LSsgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAot KyAgICAvKiBSICovCi0rICAgIHsweDM1LCAweGM3LCAweGVmLCAweGE3LCAweDc4LCAweDRkLCAw eDI5LCAweGJjLAotKyAgICAgMHg4MiwgMHg3OSwgMHg5OSwgMHhmYiwgMHhkMCwgMHhiMywgMHgz YiwgMHg3Mn0KLSt9OwotKwotK3ZvaWQgRklQU19jb3JydXB0X3JuZygpCi0rewotKyAgICBhZXNf MTkyX3R2LlZbMF0rKzsKLSt9Ci0rCi0rIyBkZWZpbmUgZmlwc194OTMxX3Rlc3Qoa2V5LCB0dikg XAotKyAgICAgICAgZG9feDkzMV90ZXN0KGtleSwgc2l6ZW9mIGtleSwgJnR2KQotKwotK3N0YXRp YyBpbnQgZG9feDkzMV90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgQUVTX1BS TkdfVFYgKiB0dikKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgUlsxNl0sIFZbMTZdOwotKyAgICBp bnQgcnYgPSAxOwotKyAgICBtZW1jcHkoViwgdHYtPlYsIHNpemVvZihWKSk7Ci0rICAgIGlmICgh RklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IGlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCi0r ICAgICAgICByZXR1cm4gMTsKLSsgICAgaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1Rf WDkzMSwga2V5bGVuLCBOVUxMKSkKLSsgICAgICAgIFZbMF0rKzsKLSsgICAgRklQU194OTMxX3Nl ZWQoViwgMTYpOwotKyAgICBGSVBTX3g5MzFfc2V0X2R0KHR2LT5EVCk7Ci0rICAgIEZJUFNfeDkz MV9ieXRlcyhSLCAxNik7Ci0rICAgIGlmIChtZW1jbXAoUiwgdHYtPlIsIDE2KSkgewotKyAgICAg ICAgZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKTsKLSsgICAg ICAgIHJ2ID0gMDsKLSsgICAgfSBlbHNlIGlmICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNU X1g5MzEsIGtleWxlbiwgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIHJ2 OwotK30KLSsKLStpbnQgRklQU19zZWxmdGVzdF94OTMxKCkKLSt7Ci0rICAgIGludCBydiA9IDE7 Ci0rICAgIEZJUFNfeDkzMV9yZXNldCgpOwotKyAgICBpZiAoIUZJUFNfeDkzMV90ZXN0X21vZGUo KSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLCBGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmICgh Zmlwc194OTMxX3Rlc3QoYWVzXzEyOF9rZXksIGFlc18xMjhfdHYpKQotKyAgICAgICAgcnYgPSAw OwotKyAgICBpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xOTJfa2V5LCBhZXNfMTkyX3R2KSkKLSsg ICAgICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMjU2X2tleSwgYWVz XzI1Nl90dikpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIEZJUFNfeDkzMV9yZXNldCgpOwotKyAg ICBpZiAoIXJ2KQotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxLCBG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStpbnQgRklQ U19zZWxmdGVzdF9ybmcodm9pZCkKLSt7Ci0rICAgIHJldHVybiBGSVBTX3NlbGZ0ZXN0X3g5MzEo KTsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9m aXBzX3JhbmR0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0 ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlw cwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NzU2MjY0NSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NzU2MjY0 NSArMDEwMAotQEAgLTAsMCArMSwyNDcgQEAKLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0r ICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRh dGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsg KiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1l cmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFo ZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29k ZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxo YXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9j dW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJl ZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVy IGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQg cmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBp bgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2th Z2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJp YnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNl ZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBw cm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVh bCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNv ZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAg ICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVz IGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhp YyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZp YyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBk aXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVk Z2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBi eSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK LSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9u IHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2 YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fu bm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0 aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAq LwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNp bmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGN0eXBl Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+Ci0rCi0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMg UkFORCBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuICgwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsj IGluY2x1ZGUgImZpcHNfdXRsLmgiCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLSt0 eXBlZGVmIHN0cnVjdCB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgRFRbMTZdOwotKyAgICB1bnNpZ25l ZCBjaGFyIFZbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFyIFJbMTZdOwotK30gQUVTX1BSTkdfTUNU OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQot KyAgICB7IDB4OWYsIDB4NWIsIDB4NTEsIDB4MjAsIDB4MGIsIDB4ZjMsIDB4MzQsIDB4YjUsCi0r ICAgIDB4ZDgsIDB4MmIsIDB4ZTgsIDB4YzMsIDB4NzIsIDB4NTUsIDB4YzgsIDB4NDgKLSt9Owot KwotK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7Ci0rICAgIC8q IERUICovCi0rICAgIHsweDYzLCAweDc2LCAweGJiLCAweGU1LCAweDI5LCAweDAyLCAweGJhLCAw eDNiLAotKyAgICAgMHg2NywgMHhjOSwgMHgyNSwgMHhmYSwgMHg3MCwgMHgxZiwgMHgxMSwgMHhh Y30sCi0rICAgIC8qIFYgKi8KLSsgICAgezB4NTcsIDB4MmMsIDB4OGUsIDB4NzYsIDB4ODcsIDB4 MjYsIDB4NDcsIDB4OTcsCi0rICAgICAweDdlLCAweDc0LCAweGZiLCAweGRkLCAweGM0LCAweDk1 LCAweDAxLCAweGQxfSwKLSsgICAgLyogUiAqLwotKyAgICB7MHg0OCwgMHhlOSwgMHhiZCwgMHgw ZCwgMHgwNiwgMHhlZSwgMHgxOCwgMHhmYiwKLSsgICAgIDB4ZTQsIDB4NTcsIDB4OTAsIDB4ZDUs IDB4YzMsIDB4ZmMsIDB4OWIsIDB4NzN9Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX21jdF9rZXlbMjRdID0KLSsgICAgeyAweGI3LCAweDZjLCAweDM0LCAweGQx LCAweDA5LCAweDY3LCAweGFiLCAweDczLAotKyAgICAweDRkLCAweDVhLCAweGQ1LCAweDM0LCAw eDk4LCAweDE2LCAweDBiLCAweDkxLAotKyAgICAweGJjLCAweDM1LCAweDUxLCAweDE2LCAweDZi LCAweGFlLCAweDkzLCAweDhhCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFl c18xOTJfbWN0X3R2ID0gewotKyAgICAvKiBEVCAqLwotKyAgICB7MHg4NCwgMHhjZSwgMHgyMiwg MHg3ZCwgMHg5MSwgMHg1YSwgMHhhMywgMHhjOSwKLSsgICAgIDB4ODQsIDB4M2MsIDB4MGEsIDB4 YjMsIDB4YTksIDB4NjMsIDB4MTUsIDB4NTJ9LAotKyAgICAvKiBWICovCi0rICAgIHsweGI2LCAw eGFmLCAweGU2LCAweDhmLCAweDk5LCAweDllLCAweDkwLCAweDY0LAotKyAgICAgMHhkZCwgMHhj NywgMHg3YSwgMHhjMSwgMHhiYiwgMHg5MCwgMHgzYSwgMHg2ZH0sCi0rICAgIC8qIFIgKi8KLSsg ICAgezB4ZmMsIDB4ODUsIDB4NjAsIDB4OWEsIDB4MjksIDB4NmYsIDB4ZWYsIDB4MjEsCi0rICAg ICAweGRkLCAweDg2LCAweDIwLCAweDMyLCAweDhhLCAweDI5LCAweDZmLCAweDQ3fQotK307Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9Ci0rICAg IHsgMHg5YiwgMHgwNSwgMHhjOCwgMHg2OCwgMHhmZiwgMHg0NywgMHhmOCwgMHgzYSwKLSsgICAg MHhhNiwgMHgzYSwgMHhhOCwgMHhjYiwgMHg0ZSwgMHg3MSwgMHhiMiwgMHhlMCwKLSsgICAgMHhi OCwgMHg3ZSwgMHhmMSwgMHgzNywgMHhiNiwgMHhiNCwgMHhmNiwgMHg2ZCwKLSsgICAgMHg4Niwg MHgzMiwgMHhmYywgMHgxZiwgMHg1ZSwgMHgxZCwgMHgxZSwgMHg1MAotK307Ci0rCi0rc3RhdGlj IGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMjU2X21jdF90diA9IHsKLSsgICAgLyogRFQgKi8KLSsg ICAgezB4MzEsIDB4NmUsIDB4MzUsIDB4OWEsIDB4YjEsIDB4NDQsIDB4ZjAsIDB4ZWUsCi0rICAg ICAweDYyLCAweDZkLCAweDA0LCAweDQ2LCAweGUwLCAweGEzLCAweDkyLCAweDRjfSwKLSsgICAg LyogViAqLwotKyAgICB7MHg0ZiwgMHhjZCwgMHhjMSwgMHg4NywgMHg4MiwgMHgxZiwgMHg0ZCwg MHhhMSwKLSsgICAgIDB4M2UsIDB4MGUsIDB4NTYsIDB4NDQsIDB4NTksIDB4ZTgsIDB4ODMsIDB4 Y2F9LAotKyAgICAvKiBSICovCi0rICAgIHsweGM4LCAweDg3LCAweGMyLCAweDYxLCAweDViLCAw eGQwLCAweGI5LCAweGUxLAotKyAgICAgMHhlNywgMHhmMywgMHg4YiwgMHhkNywgMHg1YiwgMHhk NSwgMHhmMSwgMHg4ZH0KLSt9OwotKwotK3N0YXRpYyB2b2lkIGR1bXAoY29uc3QgdW5zaWduZWQg Y2hhciAqYiwgaW50IG4pCi0rewotKyAgICB3aGlsZSAobi0tID4gMCkgewotKyAgICAgICAgcHJp bnRmKCIgJTAyeCIsICpiKyspOwotKyAgICB9Ci0rfQotKwotK3N0YXRpYyB2b2lkIGNvbXBhcmUo Y29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LAotKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqZXhwZWN0ZWQsIGludCBuKQotK3sKLSsgICAgaW50IGk7Ci0rCi0rICAg IGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCi0rICAgICAgICBpZiAocmVzdWx0W2ldICE9IGV4cGVj dGVkW2ldKSB7Ci0rICAgICAgICAgICAgcHV0cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7 Ci0rICAgICAgICAgICAgZHVtcChyZXN1bHQsIG4pOwotKyAgICAgICAgICAgIHB1dHMoIlxuICAg ICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7Ci0rICAgICAgICAgICAgZHVtcChleHBlY3RlZCwgbik7 Ci0rICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKLSsgICAgICAgICAgICBFWElUKDEpOwotKyAg ICAgICAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBydW5fdGVzdChjb25zdCB1bnNpZ25lZCBjaGFy ICprZXksIGludCBrZXlsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUVTX1BSTkdf TUNUICogdHYpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKLSsgICAg aW50IGksIGo7Ci0rICAgIEZJUFNfeDkzMV9yZXNldCgpOwotKyAgICBGSVBTX3g5MzFfdGVzdF9t b2RlKCk7Ci0rICAgIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsgICAgRklQU194 OTMxX3NlZWQodHYtPlYsIDE2KTsKLSsgICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKLSsgICAg Zm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKLSsgICAgICAgIEZJUFNfeDkzMV9zZXRfZHQo ZHQpOwotKyAgICAgICAgRklQU194OTMxX2J5dGVzKGJ1ZiwgMTYpOwotKyAgICAgICAgLyogSW5j cmVtZW50IERUICovCi0rICAgICAgICBmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pIHsKLSsgICAg ICAgICAgICBkdFtqXSsrOwotKyAgICAgICAgICAgIGlmIChkdFtqXSkKLSsgICAgICAgICAgICAg ICAgYnJlYWs7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgY29tcGFyZShidWYsIHR2LT5S LCAxNik7Ci0rfQotKwotK2ludCBtYWluKCkKLSt7Ci0rICAgIHJ1bl90ZXN0KGFlc18xMjhfbWN0 X2tleSwgMTYsICZhZXNfMTI4X21jdF90dik7Ci0rICAgIHByaW50ZigiRklQUyBQUk5HIHRlc3Qg MSBkb25lXG4iKTsKLSsgICAgcnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwgJmFlc18xOTJf bWN0X3R2KTsKLSsgICAgcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOwotKyAgICBy dW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMyLCAmYWVzXzI1Nl9tY3RfdHYpOwotKyAgICBwcmlu dGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7Ci0rICAgIHJldHVybiAwOwotK30KLSsKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0 ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5j Ci0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBz CTIwMTUtMTItMDQgMTM6NTU6NTEuOTY4NTYyNjY4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2ODU2 MjY2OCArMDEwMAotQEAgLTAsMCArMSw0NDQgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHly aWdodCAoYykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsg KgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K LSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgot KyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5k aWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIG5bXSA9Ci0rICAgICJceDAwXHhCQlx4RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIz XHgzOFx4QUNceDJCXHg5RFx4QThceDcxIgotKyAgICAiXHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0 XHgxMFx4NDNceEE0XHg0MFx4RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKLSsgICAgIlx4MUZceEI4 XHhERlx4QkFceEFGXHgwM1x4NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0Qi Ci0rICAgICJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBceEUxXHhFQ1x4NDZceDE5XHg3MVx4OURc eDhBXHg1Qlx4OEJceDgwIgotKyAgICAiXHg3Rlx4QUZceEI4XHhFMFx4QTNceERGXHhDN1x4Mzdc eDcyXHgzRVx4RTZceEI0XHhCN1x4RDlceDNBXHgyNSIKLSsgICAgIlx4ODRceEVFXHg2QVx4NjRc eDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhCMlx4NDVceDQ1XHg5OFx4MzkiCi0rICAgICJc eDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4OUFceDQxXHhGNlx4 QzFceDY4IgotKyAgICAiXHg3Rlx4RTJceDUzXHg3Mlx4OThceENBXHgyQVx4OEZceDU5XHg0Nlx4 RjhceEU1XHhGRFx4MDlceDFEXHhCRCIgIlx4Q0IiOwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9y c2E7Ci0rCi0rc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCi0rewotKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBlW10gPSAiXHgxMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGRbXSA9Ci0rICAgICAgICAiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhG QVx4RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKLSsgICAgICAgICJceEY4XHgz Rlx4MzFceDI1XHgxRVx4MDZceDY4XHhCNFx4MjdceDg0XHg4MVx4MzhceDAxXHg1N1x4OTZceDQx IgotKyAgICAgICAgIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5OVx4OERceDZCXHhDNFx4NjVceDc0 XHg1RVx4NUNceDM5XHgyNlx4NjkiCi0rICAgICAgICAiXHhENlx4ODdceDBEXHhBMlx4QzBceDgy XHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4QzlceDNFXHhEQSIKLSsgICAgICAgICJceEM5 XHg3Rlx4RjNceEFEXHg1OVx4NTBceEFDXHhDRlx4QkNceDExXHgxQ1x4NzZceEYxXHhBOVx4NTJc eDk0IgotKyAgICAgICAgIlx4NDRceEU1XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNc eDhEXHhDM1x4QkVceEY1XHhEMlx4MEEiCi0rICAgICAgICAiXHg5M1x4OTlceDI2XHhFRFx4NEZc eDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKLSsgICAgICAgICJc eEFGXHg5NFx4MjhceEMyXHhCN1x4QjhceDg4XHgzRlx4RTRceDQ2XHgzQVx4NEJceEM4XHg1Qlx4 MUNceEIzIgotKyAgICAgICAgIlx4QzEiOwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBwW10gPQotKyAgICAgICAgIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhD OVx4MDhceDgxXHgwQlx4MTBceEExXHhCNVx4NjAiCi0rICAgICAgICAiXHgwMVx4OTlceEVCXHg5 Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5M1x4QjhceDFBXHg5RVx4M0RceDg0XHhGNiIKLSsgICAg ICAgICJceDMyXHgxMlx4NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4RkFceEU3 XHhBQVx4MDRceDBBIgotKyAgICAgICAgIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0NVx4OURceDFG XHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCi0rICAgICAgICAiXHg5OSI7Ci0rCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHFbXSA9Ci0rICAgICAgICAiXHgwMFx4Qzlc eDdGXHhCMVx4RjBceDI3XHhGNFx4NTNceEY2XHgzNFx4MTJceDMzXHhFQVx4QUFceEQxXHhEOSIK LSsgICAgICAgICJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4 MjBceDM1XHgwMlx4OEJceDlEIgotKyAgICAgICAgIlx4ODZceDk4XHg0MFx4QjRceDE2XHg2Nlx4 QjRceDJFXHg5Mlx4RUFceDBEXHhBM1x4QjRceDMyXHgwNFx4QjUiCi0rICAgICAgICAiXHhDRlx4 Q0VceDMzXHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4QUZceDQ2XHgx NSIKLSsgICAgICAgICJceDAzIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg ZG1wMVtdID0KLSsgICAgICAgICJceDU0XHg0OVx4NENceEE2XHgzRVx4QkFceDAzXHgzN1x4RTRc eEUyXHg0MFx4MjNceEZDXHhENlx4OUFceDVBIgotKyAgICAgICAgIlx4RUJceDA3XHhERFx4RENc eDAxXHg4M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhCMFx4NTFceEYyXHhCMVx4M0UiCi0rICAgICAg ICAiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4 MkVceDlBXHgyRSIKLSsgICAgICAgICJceDIwXHgyQlx4MzhceEZDXHg5MVx4MEFceDQ3XHg0MVx4 NzRceEFEXHhDOVx4M0NceDFGXHg2N1x4QzlceDgxIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgZG1xMVtdID0KLSsgICAgICAgICJceDQ3XHgxRVx4MDJceDkwXHhGRlx4MEFc eEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5IgotKyAgICAgICAgIlx4NjFc eEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4 QTciCi0rICAgICAgICAiXHhGOVx4ODBceDNGXHg4Rlx4NkZceDhBXHhFM1x4NDJceEU5XHgzMVx4 RkRceDhBXHhFNFx4N0FceDIyXHgwRCIKLSsgICAgICAgICJceDFCXHg5OVx4QTRceDk1XHg4NFx4 OThceDA3XHhGRVx4MzlceEY5XHgyNFx4NUFceDk4XHgzNlx4REFceDNEIjsKLSsKLSsgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KLSsgICAgICAgICJceDAwXHhCMFx4NkNc eDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERCXHhBRVx4OTRceDIzIgotKyAg ICAgICAgIlx4QjNceDgwXHhGMlx4NzFceEY3XHgzNFx4NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4 Q0RceDM5XHhFMlx4MTEiCi0rICAgICAgICAiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4 ODNceEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKLSsgICAgICAgICJceDlFXHgyRVx4 MEZceDk2XHg1Nlx4RTZceDk4XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5Igot KyAgICAgICAgIlx4RjciOwotKwotKyAgICBrZXktPm4gPSBCTl9iaW4yYm4obiwgc2l6ZW9mKG4p IC0gMSwga2V5LT5uKTsKLSsgICAgaWYgKGNvcnJ1cHRfcnNhKQotKyAgICAgICAgQk5fc2V0X2Jp dChrZXktPm4sIDEwMjQpOwotKyAgICBrZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpIC0g MSwga2V5LT5lKTsKLSsgICAga2V5LT5kID0gQk5fYmluMmJuKGQsIHNpemVvZihkKSAtIDEsIGtl eS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJibihwLCBzaXplb2YocCkgLSAxLCBrZXktPnAp OwotKyAgICBrZXktPnEgPSBCTl9iaW4yYm4ocSwgc2l6ZW9mKHEpIC0gMSwga2V5LT5xKTsKLSsg ICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRtcDEsIHNpemVvZihkbXAxKSAtIDEsIGtleS0+ZG1w MSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBzaXplb2YoZG1xMSkgLSAxLCBr ZXktPmRtcTEpOwotKyAgICBrZXktPmlxbXAgPSBCTl9iaW4yYm4oaXFtcCwgc2l6ZW9mKGlxbXAp IC0gMSwga2V5LT5pcW1wKTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3ZvaWQgRklQU19jb3Jy dXB0X3JzYSgpCi0rewotKyAgICBjb3JydXB0X3JzYSA9IDE7Ci0rfQotKwotKy8qIEtub3duIEFu c3dlciBUZXN0IChLQVQpIGRhdGEgZm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmlu ZwotKyAqIGthdF90YnMuCi0rICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X3Ric1tdID0KLSsgICAgIk9wZW5TU0wgRklQUyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOwot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKLSsg ICAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhBMSwgMHhCOSwg MHg0NiwgMHhEQSwgMHgwRiwKLSsgICAgMHgwMSwgMHgxRSwgMHgzNywgMHg5MywgMHhDMiwgMHg1 NSwgMHgyNywgMHhFNCwgMHgxRCwgMHhEMiwgMHg5MCwgMHhCQiwKLSsgICAgMHhGNCwgMHhCRiwg MHg0QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhCQiwgMHhFOCwgMHgwQywgMHhCNywgMHhGOCwgMHhE MywKLSsgICAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywgMHhCNSwg MHhDNywgMHg4MywgMHhENSwgMHg0QywKLSsgICAgMHg3RiwgMHg0OSwgMHhGQiwgMHgzRiwgMHgy OSwgMHg5QiwgMHhFMSwgMHgxMiwgMHg1MSwgMHg2MCwgMHhEMCwgMHhBNywKLSsgICAgMHgwRCwg MHhBOSwgMHgyOCwgMHg1NiwgMHg3MywgMHhEOSwgMHgwNywgMHhFMywgMHg1RSwgMHgzRiwgMHg5 QiwgMHhGNSwKLSsgICAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4Mywg MHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLSsgICAgMHgwQSwgMHhFOSwgMHg4RSwgMHgz OCwgMHhENywgMHgxOCwgMHhDNiwgMHgyQSwgMHgwRiwgMHhGOCwgMHhCNywgMHgzMSwKLSsgICAg MHhENiwgMHg1NSwgMHhFNCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhENCwgMHhFNiwgMHhEQiwgMHg5 RiwgMHhCQSwgMHhFOCwKLSsgICAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwg MHhENSwgMHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLSsgICAgMHgyNiwgMHhDNiwgMHg3 OSwgMHhDOSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhBOQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7Ci0rICAgIDB4MzksIDB4NEEsIDB4 NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUsIDB4NTgsIDB4QTcs Ci0rICAgIDB4RkUsIDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4 OTgsIDB4MDgsIDB4OTUsIDB4RkEsCi0rICAgIDB4QjEsIDB4OUUsIDB4RDIsIDB4NTUsIDB4NjEs IDB4ODcsIDB4MjEsIDB4NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCi0rICAgIDB4MzAsIDB4 OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQsIDB4MUMs IDB4ODksCi0rICAgIDB4ODMsIDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4 MTYsIDB4Q0MsIDB4ODYsIDB4MDUsIDB4RUUsCi0rICAgIDB4QjEsIDB4RTYsIDB4N0IsIDB4QkEs IDB4MTYsIDB4NzUsIDB4MEQsIDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCi0rICAgIDB4 MTUsIDB4NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIs IDB4RDEsIDB4QjUsCi0rICAgIDB4MzcsIDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4 RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4MjQsIDB4NDksCi0rICAgIDB4NTgsIDB4RDIsIDB4NzQs IDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMsIDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCi0r ICAgIDB4QzgsIDB4NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4NkEsIDB4QUYs IDB4OTUsIDB4QzAsIDB4MDAsCi0rICAgIDB4NTQsIDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4 QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9S U0FfUFNTX1NIQTI1NltdID0gewotKyAgICAweDZELCAweDNELCAweEJFLCAweDhGLCAweDYwLCAw eDZELCAweDI1LCAweDE0LCAweEYwLCAweDMxLCAweEUzLCAweDg5LAotKyAgICAweDAwLCAweDk3 LCAweEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYzLCAw eDhGLAotKyAgICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAweDc0LCAweDUxLCAweDM2LCAweEUy LCAweDhELCAweDdELCAweDczLCAweDI4LAotKyAgICAweEMxLCAweDc3LCAweEM2LCAweDI3LCAw eDk3LCAweDAwLCAweDhCLCAweDAwLCAweEEzLCAweDk2LCAweDczLCAweDRFLAotKyAgICAweDdE LCAweDJFLCAweDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAw eDQ3LCAweDA1LAotKyAgICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAweDgxLCAweDQ3LCAweDcw LCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAotKyAgICAweDJGLCAweDdBLCAweDU0LCAw eDUzLCAweDRFLCAweEVELCAweDcxLCAweEQ5LCAweDVBLCAweEYzLCAweERBLCAweEI2LAotKyAg ICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAw eDU2LCAweENELCAweDlGLAotKyAgICAweDIxLCAweEI3LCAweDdFLCAweEFELCAweDdDLCAweDJG LCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAotKyAgICAweDVGLCAweEI3LCAw eDAxLCAweERGLCAweEMzLCAweDExLCAweDZDLCAweEE5LCAweDlFLCAweDQ5LCAweEI5LCAweEY2 LAotKyAgICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJELCAweDFDCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEzODRbXSA9 IHsKLSsgICAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5QSwg MHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKLSsgICAgMHhFQywgMHgxQywgMHhDNCwgMHhDOCwgMHg3 QywgMHgyMiwgMHg2NSwgMHg5QywgMHg1NywgMHg0NSwgMHhDRCwgMHg1RSwKLSsgICAgMHg4Niwg MHgwMCwgMHhGNywgMHgyNSwgMHg3OCwgMHhERSwgMHhEQywgMHg3QSwgMHg3MSwgMHg0NCwgMHg5 QSwgMHhDRCwKLSsgICAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwg MHhEOSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKLSsgICAgMHg2RiwgMHgwMiwgMHhFRiwgMHhD MSwgMHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwgMHgzMSwgMHhEQywgMHg0MiwgMHg2QywKLSsgICAg MHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwgMHg3MSwgMHhGMywgMHhB QywgMHg0RiwgMHhGQiwKLSsgICAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2Qiwg MHg5RCwgMHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKLSsgICAgMHgzQSwgMHhCRSwgMHg4 OSwgMHgzOCwgMHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwgMHgzMiwgMHhBRCwgMHg0MiwgMHg4OSwK LSsgICAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhGMCwgMHhGQywgMHgzOCwgMHhBQywgMHg4 NywgMHgxRiwgMHhDQSwgMHg2RiwKLSsgICAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwg MHhFRSwgMHhBRSwgMHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKLSsgICAgMHg0OCwgMHg0 NCwgMHhFRSwgMHgxRiwgMHg5MCwgMHgxOCwgMHg0QiwgMHhGMQotK307Ci0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBNTEyW10gPSB7Ci0rICAgIDB4MDcsIDB4 MUUsIDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4NjMs IDB4OEMsCi0rICAgIDB4QzYsIDB4ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4 QzYsIDB4OEYsIDB4MTIsIDB4NTMsIDB4OUEsCi0rICAgIDB4OUIsIDB4NTQsIDB4OUUsIDB4QjMs IDB4QzEsIDB4MUQsIDB4MjMsIDB4NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4REQsCi0rICAgIDB4 NEIsIDB4RjMsIDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQsIDB4NjAsIDB4Nzks IDB4MjMsIDB4MzksCi0rICAgIDB4MDEsIDB4MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4 OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUsIDB4RDcsCi0rICAgIDB4N0MsIDB4RTMsIDB4N0Ys IDB4RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4NjEsCi0r ICAgIDB4NTcsIDB4RTMsIDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEsIDB4MjAs IDB4QjAsIDB4ODUsIDB4MTMsCi0rICAgIDB4QzUsIDB4NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4 MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4MzksIDB4NjMsCi0rICAgIDB4MkQsIDB4NjAs IDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4 RkUsCi0rICAgIDB4NzYsIDB4RjIsIDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUs IDB4N0YsIDB4ODAsIDB4QzIsIDB4ODgsCi0rICAgIDB4NUMsIDB4OTcsIDB4NzAsIDB4QjQsIDB4 MjYsIDB4QzksIDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfU0hBMVtdID0gewotKyAgICAweDcxLCAweEVFLCAweDFBLCAweEMwLCAweEZFLCAw eDAxLCAweDkzLCAweDU0LCAweDc5LCAweDVDLCAweEYyLCAweDRDLAotKyAgICAweDRBLCAweEZE LCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAw eDlCLAotKyAgICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1LCAweEEzLCAweDUx LCAweDU1LCAweDc3LCAweDkwLCAweENGLAotKyAgICAweERDLCAweDIyLCAweDM3LCAweDhFLCAw eEQwLCAweEUxLCAweEFFLCAweDA5LCAweEUzLCAweDNELCAweDFFLCAweEY4LAotKyAgICAweDgw LCAweEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAw eDhCLCAweEExLAotKyAgICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUwLCAweDIz LCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAotKyAgICAweEE5LCAweDlFLCAweEU4LCAw eEIxLCAweDhBLCAweDYyLCAweDE2LCAweEJGLCAweDRFLCAweENBLCAweDJFLCAweDRFLAotKyAg ICAweEJDLCAweDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAweDlGLCAweDFELCAweDA0LCAw eDQ0LCAweEU1LCAweDVGLAotKyAgICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5 LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAotKyAgICAweDcyLCAweDA1LCAw eERFLCAweEU2LCAweEU4LCAweDdGLCAweDMzLCAweDhBLCAweDc2LCAweDRCLCAweDJGLCAweDk1 LAotKyAgICAweERGLCAweEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0Ci0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTIyNFtdID0gewot KyAgICAweDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJC LCAweEI3LCAweDE1LCAweEY5LAotKyAgICAweDI1LCAweEJCLCAweEZBLCAweEQ0LCAweDNBLCAw eDM0LCAweEVELCAweDlFLCAweEEwLCAweEE5LCAweDE4LCAweDhELAotKyAgICAweDVCLCAweDU1 LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4LCAweDYwLCAweEM1LCAweDFBLCAweEM1LCAw eDg5LAotKyAgICAweDA4LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2 LCAweDMwLCAweDJDLCAweDlFLCAweENELAotKyAgICAweEE0LCAweDAyLCAweEFELCAweEIxLCAw eDZELCAweDQ0LCAweDZELCAweEQ1LCAweEM2LCAweDQ1LCAweDQxLCAweEU1LAotKyAgICAweEVF LCAweDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2LCAweEUxLCAweDVFLCAweDBCLCAw eEE5LCAweENDLAotKyAgICAweERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcw LCAweDg2LCAweDg0LCAweDAyLCAweEM2LCAweDNCLAotKyAgICAweDBCLCAweDQ0LCAweDRDLCAw eDQ2LCAweDk1LCAweEY0LCAweEY4LCAweDVBLCAweDkxLCAweDI4LCAweDNFLCAweEIyLAotKyAg ICAweDU4LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDkyLCAweEUyLCAweEMwLCAw eDY2LCAweEU2LCAweDM1LAotKyAgICAweEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAy LCAweDczLCAweDA0LCAweDc3LCAweDgyLCAweEU2LCAweERDLAotKyAgICAweDQwLCAweDIxLCAw eDg5LCAweDhCLCAweDM3LCAweDNFLCAweDFFLCAweDhECi0rfTsKLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTI1NltdID0gewotKyAgICAweDBELCAweDU1LCAweEUy LCAweEFBLCAweDgxLCAweERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1LCAweDIzLAot KyAgICAweEU3LCAweDNCLCAweDFELCAweEFGLCAweEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIw LCAweDdCLCAweEFBLCAweDIzLAotKyAgICAweDkyLCAweDg3LCAweDhDLCAweEQxLCAweDUzLCAw eDg1LCAweDE2LCAweERDLCAweEJFLCAweEFELCAweDZGLCAweDM1LAotKyAgICAweDk4LCAweDJE LCAweDY5LCAweDg0LCAweEJGLCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIyLCAw eDZFLAotKyAgICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAweEYxLCAweEZCLCAweDUxLCAweEU4 LCAweDZBLCAweDkwLCAweDJELCAweDE4LAotKyAgICAweDBFLCAweEMwLCAweDkwLCAweDEwLCAw eDI0LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAweDkxLCAweDMwLAotKyAgICAweEJF LCAweDIyLCAweEM3LCAweEQzLCAweEVDLCAweEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAw eDgwLCAweDNBLAotKyAgICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAweEQxLCAweEU5LCAweEYw LCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAotKyAgICAweEI4LCAweDQyLCAweEJCLCAw eDg2LCAweEM1LCAweDlELCAweENFLCAweDdDLCAweDJDLCAweEVFLCAweEQxLCAweERBLAotKyAg ICAweDI3LCAweDQ4LCAweDJCLCAweEY1LCAweEFCLCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAw eDkwLCAweDI3LCAweDkwLAotKyAgICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAweENELCAweDU3 LCAweEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1NIQTM4NFtdID0gewotKyAgICAweDFELCAweEUzLCAweDZBLCAweERELCAweDI3LCAweDRDLCAw eEMwLCAweEE1LCAweDI3LCAweEVGLCAweEU2LCAweDFGLAotKyAgICAweEQyLCAweDkxLCAweDY4 LCAweDU5LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3LCAweEM3LAot KyAgICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAweENB LCAweEZBLCAweDVELCAweDVDLAotKyAgICAweEE3LCAweDY1LCAweDUyLCAweDhBLCAweEM4LCAw eDQ0LCAweDdFLCAweDg2LCAweDVELCAweEE5LCAweEE2LCAweDU1LAotKyAgICAweDY1LCAweDNF LCAweEQ5LCAweDJELCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2LCAw eENGLAotKyAgICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUy LCAweDE5LCAweDJCLCAweDMwLCAweEMyLAotKyAgICAweDFCLCAweDJCLCAweEIwLCAweDgyLCAw eDQ2LCAweEFDLCAweDRCLCAweEQxLCAweEUyLCAweDdELCAweEVCLCAweDhDLAotKyAgICAweEZG LCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhGLCAweDhCLCAw eDlDLCAweENELAotKyAgICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3 LCAweEVCLCAweEQwLCAweDhGLCAweDk5LCAweEYxLAotKyAgICAweDE2LCAweDI4LCAweDI0LCAw eDY0LCAweDA0LCAweDM5LCAweDJELCAweDU4LCAweDFFLCAweDM3LCAweERDLCAweDA0LAotKyAg ICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAweDM1LCAweDU2LCAweEJGCi0rfTsKLSsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTUxMltdID0gewotKyAgICAw eDY5LCAweDUyLCAweDFCLCAweDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUx LCAweDVELCAweENGLAotKyAgICAweDQ5LCAweDI1LCAweDRBLCAweEExLCAweDZBLCAweDc3LCAw eDRDLCAweDM2LCAweDQwLCAweEY4LCAweEIyLCAweDlBLAotKyAgICAweDE1LCAweEVBLCAweDVD LCAweEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAweDZCLCAweDMyLCAweEYxLAot KyAgICAweDA0LCAweEMxLCAweDVBLCAweDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRD LCAweDU0LCAweDlGLCAweEQ4LAotKyAgICAweDhELCAweENDLCAweEFDLCAweDhBLCAweEJCLCAw eDlDLCAweDgyLCAweDNGLCAweEE2LCAweDUzLCAweDYyLCAweEI1LAotKyAgICAweDgwLCAweEUy LCAweEJDLCAweERELCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAweDc1LCAweDkyLCAw eDZCLAotKyAgICAweEFGLCAweDYyLCAweDdDLCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAweERG LCAweDFCLCAweDFELCAweDQ3LCAweEU2LAotKyAgICAweDU5LCAweDU2LCAweEE1LCAweEI5LCAw eDVDLCAweEU2LCAweDc3LCAweDc4LCAweDE2LCAweDYzLCAweDg0LCAweDA1LAotKyAgICAweDZG LCAweDBFLCAweDJCLCAweDMxLCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAweDcxLCAw eEUwLCAweDJELAotKyAgICAweDNFLCAweDYyLCAweENFLCAweEI1LCAweDNGLCAweDg4LCAweERG LCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAotKyAgICAweERGLCAweDcwLCAweDE0LCAw eEE1LCAweDNGLCAweDM2LCAweEFCLCAweDg0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtdID0gewotKyAgICAweDg2LCAweEI0LCAweDE4LCAw eEJBLCAweEQxLCAweDgwLCAweEI2LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAotKyAg ICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAweDJGLCAweEM5LCAweENELCAw eEM0LCAweEIyLCAweDc1LAotKyAgICAweDgwLCAweEE0LCAweEYxLCAweDRBLCAweEU3LCAweDgz LCAweDEyLCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAweEFDLAotKyAgICAweDM1LCAweEUyLCAw eEFBLCAweDBCLCAweDVDLCAweEY4LCAweDM4LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3 LAotKyAgICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAweDYyLCAweDIzLCAw eDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAgICAweDUzLCAweDE1LCAweEY3LCAweERGLCAweDg3 LCAweEI0LCAweDBFLCAweENDLCAweEIxLCAweDFBLCAweDExLCAweDE5LAotKyAgICAweEVFLCAw eDUxLCAweENDLCAweDkyLCAweERELCAweEJDLCAweDYzLCAweDI5LCAweDYzLCAweDBDLCAweDU5 LCAweEQ3LAotKyAgICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAweDAzLCAw eDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAotKyAgICAweDQ4LCAweEFGLCAweDgyLCAweEZF LCAweDMyLCAweDQxLCAweDlCLCAweEIyLCAweERCLCAweEVBLCAweEVELCAweDc2LAotKyAgICAw eDhFLCAweDZFLCAweENBLCAweDdFLCAweDRFLCAweDE0LCAweEJBLCAweDMwLCAweDg0LCAweDFD LCAweEIzLCAweDY3LAotKyAgICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAw eDdELCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5 MzFfU0hBMjU2W10gPSB7Ci0rICAgIDB4N0UsIDB4QTIsIDB4NzcsIDB4RkUsIDB4QjgsIDB4NTQs IDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQsIDB4NTQsIDB4ODksCi0rICAgIDB4RTUsIDB4NTIsIDB4 MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4REQs Ci0rICAgIDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4 MDUsIDB4OTUsIDB4NzMsIDB4Q0YsCi0rICAgIDB4MTYsIDB4NzYsIDB4NjgsIDB4RjYsIDB4QzYs IDB4NUUsIDB4ODAsIDB4QjgsIDB4QjgsIDB4N0IsIDB4QzgsIDB4OUIsCi0rICAgIDB4QzYsIDB4 NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4QjgsIDB4RjAs IDB4NEIsCi0rICAgIDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4 MjAsIDB4QzQsIDB4MzgsIDB4MEUsIDB4OTgsCi0rICAgIDB4QUQsIDB4NEUsIDB4NDksIDB4MkMs IDB4RDcsIDB4NjUsIDB4QTUsIDB4MTksIDB4MEUsIDB4NTksIDB4MDEsIDB4RUMsCi0rICAgIDB4 N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQs IDB4QTAsIDB4OEMsCi0rICAgIDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4 NjksIDB4ODgsIDB4MzUsIDB4QTEsIDB4NDIsIDB4QkQsCi0rICAgIDB4MjEsIDB4RUQsIDB4OEQs IDB4QkMsIDB4QkMsIDB4REIsIDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAsIDB4NUIsIDB4REMsCi0r ICAgIDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4OTQsIDB4ODAKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEEzODRbXSA9IHsK LSsgICAgMHg1QywgMHg3RCwgMHg5NiwgMHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhC QiwgMHg3QiwgMHhFQywgMHg3QiwKLSsgICAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5OSwgMHhCRCwg MHhFRiwgMHhEOCwgMHhBRSwgMHhENywgMHgzOSwgMHgzNywgMHhDQiwKLSsgICAgMHhFNiwgMHg0 RiwgMHg1RSwgMHgwQSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhCRSwgMHgyRSwg MHhFMywKLSsgICAgMHhFRiwgMHg3OCwgMHg4MywgMHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4 RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKLSsgICAgMHg1NywgMHhDMiwgMHhCMCwgMHgwOCwg MHg1MSwgMHg3MywgMHhDRiwgMHhDQSwgMHg5OSwgMHg2NiwgMHhFRSwgMHgzMSwKLSsgICAgMHhE OCwgMHg2OSwgMHhFOSwgMHhBQiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2RCwg MHg4RCwgMHhGMSwKLSsgICAgMHgzRSwgMHg5QywgMHgzNSwgMHg5NSwgMHg1OCwgMHhERCwgMHgy QiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKLSsgICAgMHgyNCwgMHgyMiwgMHhFNCwg MHhCNywgMHhCRiwgMHg0NywgMHg1MywgMHhGNiwgMHgzNCwgMHhENSwgMHg3QywgMHhGRiwKLSsg ICAgMHgwRSwgMHgwOSwgMHhFRSwgMHgyRSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwg MHgxMiwgMHg0NCwgMHgzNSwKLSsgICAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1RSwgMHgzOSwgMHgz MSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKLSsgICAgMHhFMiwgMHhDRCwg MHg4NSwgMHhEQiwgMHg3MywgMHg4MiwgMHg2NSwgMHgyOAotK307Ci0rCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltdID0gewotKyAgICAweEE2LCAweDY1 LCAweEEyLCAweDc3LCAweDRGLCAweEIzLCAweDg2LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAw eDYzLAotKyAgICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAweERELCAweDRC LCAweEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAgICAweEU3LCAweDQ3LCAweDA5LCAweEIyLCAw eDExLCAweDRCLCAweDhBLCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAotKyAgICAweDNB LCAweEJELCAweDVFLCAweDUzLCAweDA5LCAweDRBLCAweEU2LCAweDBGLCAweDVFLCAweEY5LCAw eDE0LCAweDI4LAotKyAgICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAweEYy LCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAgICAweDZFLCAweDJCLCAweDc5LCAw eDk2LCAweDBELCAweDBDLCAweEM4LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAweEFGLAotKyAg ICAweDE3LCAweDBFLCAweEUwLCAweEJGLCAweDc5LCAweEY2LCAweDA0LCAweDcyLCAweDEwLCAw eEUwLCAweEY2LCAweEQwLAotKyAgICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5 LCAweEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAgICAweDlGLCAweDA5LCAw eENBLCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVELCAweDA0LCAweDJELCAweEZCLCAweDdD LAotKyAgICAweDM2LCAweDM1LCAweDIxLCAweDMxLCAweEMzLCAweEZELCAweDkyLCAweDQyLCAw eDExLCAweDMwLCAweDcxLCAweDFCLAotKyAgICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEz LCAweEY1LCAweDU5LCAweEMzCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQotK3sK LSsgICAgaW50IHJldCA9IDA7Ci0rICAgIFJTQSAqa2V5OwotKyAgICBFVlBfUEtFWSAqcGsgPSBO VUxMOwotKwotKyAgICBpZiAoKGtleSA9IFJTQV9uZXcoKSkgPT0gTlVMTCkKLSsgICAgICAgIGdv dG8gZXJyOwotKyAgICBzZXRyc2FrZXkoa2V5KTsKLSsgICAgaWYgKChwayA9IEVWUF9QS0VZX25l dygpKSA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIEVWUF9QS0VZX2Fzc2ln bl9SU0EocGssIGtleSk7Ci0rCi0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBr LCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrYXRfUlNBX1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BLQ1MxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTEgUEtD UyMxIikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQp LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfc2hhMjI0KCksIEVWUF9N RF9DVFhfRkxBR19QQURfUEtDUzEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJSU0EgU0hBMjI0IFBLQ1MjMSIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1NIQTI1Niwgc2l6ZW9m KGthdF9SU0FfU0hBMjU2KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQ X3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsgICAgICAgIGdvdG8gZXJy OwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JT QV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4NCksCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEEzODQgUEtDUyMxIikpCi0r ICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGthdF9SU0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxB R19QQURfUEtDUzEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hB NTEyIFBLQ1MjMSIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0 X1JTQV9QU1NfU0hBMSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9z aGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUlNBIFNIQTEgUFNTIikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTIy NCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfUFNT X1NIQTIyNCksIEVWUF9zaGEyMjQoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsICJSU0EgU0hBMjI0IFBTUyIpKQotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBrYXRfUlNBX1BTU19TSEEyNTYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihrYXRfUlNBX1BTU19TSEEyNTYpLCBFVlBfc2hhMjU2KCksCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTI1 NiBQU1MiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9QU1NfU0hBMzg0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwgRVZQX3NoYTM4 NCgpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUywgIlJTQSBTSEEzODQgUFNTIikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTUx MiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfUFNT X1NIQTUxMiksIEVWUF9zaGE1MTIoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsICJSU0EgU0hBNTEyIFBTUyIpKQotKyAgICAgICAg Z290byBlcnI7Ci0rCi0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrYXRfUlNBX1g5MzFfU0hBMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwgRVZQX3NoYTEoKSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCAiUlNBIFNIQTEg WDkzMSIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIC8qIE5COiBTSEEyMjQgbm90IHN1cHBv cnRlZCBpbiBYOS4zMSAqLwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg a2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAga2F0X1JTQV9YOTMxX1NIQTI1NiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEyNTYpLCBFVlBfc2hhMjU2KCksCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEEyNTYgWDkzMSIpKQot KyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBr LCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrYXRfUlNBX1g5MzFfU0hBMzg0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksIEVWUF9zaGEzODQoKSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMx LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTM4NCBYOTMxIikp Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGthdF9SU0FfWDkzMV9TSEE1MTIsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBNTEyKSwgRVZQX3NoYTUxMigpLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBNTEyIFg5MzEi KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICByZXQgPSAxOwotKwotKyBlcnI6Ci0rICAg IGlmIChwaykKLSsgICAgICAgIEVWUF9QS0VZX2ZyZWUocGspOwotKyAgICBlbHNlIGlmIChrZXkp Ci0rICAgICAgICBSU0FfZnJlZShrZXkpOwotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLSsjZW5k aWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcyBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCi0tLS0gb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEu OTY4NTYyNjY4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yc2Ff eDkzMWcuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2ODU2MjY2OCArMDEwMAotQEAgLTAsMCArMSwy NzMgQEAKLSsvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLwotKy8qIENvcHlyaWdodCAoQykgMTk5 NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdy aXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGlt cGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMg U1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBu b24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRv IGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0Es Ci0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhl IFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBp cyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRo ZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENv cHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBu b3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRo aXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2 ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGli cmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNz YWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBv ciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20p IgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhl IHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlw dG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dz IHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRo ZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBh Y2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFO WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsg KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0 cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0r ICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMg Y29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBk aXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5j ZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDx0aW1lLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStleHRlcm4gaW50IGZpcHNf Y2hlY2tfcnNhKFJTQSAqcnNhKTsKLSsjZW5kaWYKLSsKLSsvKiBYOS4zMSBSU0Ega2V5IGRlcml2 YXRpb24gYW5kIGdlbmVyYXRpb24gKi8KLSsKLStpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAq cnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLAotKyAgICAgICAgICAgICAg ICAgICAgICAgQklHTlVNICpxMiwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAy LAotKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVN ICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLAotKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QklHTlVNICpYcSwgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCi0rewotKyAgICBCSUdO VU0gKnIwID0gTlVMTCwgKnIxID0gTlVMTCwgKnIyID0gTlVMTCwgKnIzID0gTlVMTDsKLSsgICAg Qk5fQ1RYICpjdHggPSBOVUxMLCAqY3R4MiA9IE5VTEw7Ci0rCi0rICAgIGlmICghcnNhKQotKyAg ICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSsgICAgaWYgKCFj dHgpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCi0rICAg IHIwID0gQk5fQ1RYX2dldChjdHgpOwotKyAgICByMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsgICAg cjIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rICAgIHIzID0gQk5fQ1RYX2dldChjdHgpOwotKwotKyAg ICBpZiAocjMgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIXJzYS0+ZSkg ewotKyAgICAgICAgcnNhLT5lID0gQk5fZHVwKGUpOwotKyAgICAgICAgaWYgKCFyc2EtPmUpCi0r ICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgIH0gZWxzZQotKyAgICAgICAgZSA9IHJzYS0+ZTsK LSsKLSsgICAgLyogSWYgbm90IGFsbCBwYXJhbWV0ZXJzIHByZXNlbnQgb25seSBjYWxjdWxhdGUg d2hhdCB3ZSBjYW4uCi0rICAgICAqIFRoaXMgYWxsb3dzIHRlc3QgcHJvZ3JhbXMgdG8gb3V0cHV0 IHNlbGVjdGl2ZSBwYXJhbWV0ZXJzLgotKyAgICAgKi8KLSsKLSsgICAgaWYgKFhwICYmICFyc2Et PnApIHsKLSsgICAgICAgIHJzYS0+cCA9IEJOX25ldygpOwotKyAgICAgICAgaWYgKCFyc2EtPnAp Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgICAgICBpZiAoIUJOX1g5MzFfZGVyaXZl X3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQotKyAgICAgICAgICAgIGdvdG8gZXJy OwotKyAgICB9Ci0rCi0rICAgIGlmIChYcSAmJiAhcnNhLT5xKSB7Ci0rICAgICAgICByc2EtPnEg PSBCTl9uZXcoKTsKLSsgICAgICAgIGlmICghcnNhLT5xKQotKyAgICAgICAgICAgIGdvdG8gZXJy OwotKyAgICAgICAgaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHEsIFhxMSwgWHEyLCBlLCBj dHgsIGNiKSkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBpZiAoIXJz YS0+cCB8fCAhcnNhLT5xKSB7Ci0rICAgICAgICBCTl9DVFhfZW5kKGN0eCk7Ci0rICAgICAgICBC Tl9DVFhfZnJlZShjdHgpOwotKyAgICAgICAgcmV0dXJuIDI7Ci0rICAgIH0KLSsKLSsgICAgLyog U2luY2UgYm90aCBwcmltZXMgYXJlIHNldCB3ZSBjYW4gbm93IGNhbGN1bGF0ZSBhbGwgcmVtYWlu aW5nIAotKyAgICAgKiBjb21wb25lbnRzLgotKyAgICAgKi8KLSsKLSsgICAgLyogY2FsY3VsYXRl IG4gKi8KLSsgICAgcnNhLT5uID0gQk5fbmV3KCk7Ci0rICAgIGlmIChyc2EtPm4gPT0gTlVMTCkK LSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUJOX211bChyc2EtPm4sIHJzYS0+cCwgcnNh LT5xLCBjdHgpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIC8qIGNhbGN1bGF0ZSBkICov Ci0rICAgIGlmICghQk5fc3ViKHIxLCByc2EtPnAsIEJOX3ZhbHVlX29uZSgpKSkKLSsgICAgICAg IGdvdG8gZXJyOyAgICAgICAgICAgICAgIC8qIHAtMSAqLwotKyAgICBpZiAoIUJOX3N1YihyMiwg cnNhLT5xLCBCTl92YWx1ZV9vbmUoKSkpCi0rICAgICAgICBnb3RvIGVycjsgICAgICAgICAgICAg ICAvKiBxLTEgKi8KLSsgICAgaWYgKCFCTl9tdWwocjAsIHIxLCByMiwgY3R4KSkKLSsgICAgICAg IGdvdG8gZXJyOyAgICAgICAgICAgICAgIC8qIChwLTEpKHEtMSkgKi8KLSsKLSsgICAgaWYgKCFC Tl9nY2QocjMsIHIxLCByMiwgY3R4KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAo IUJOX2RpdihyMCwgTlVMTCwgcjAsIHIzLCBjdHgpKQotKyAgICAgICAgZ290byBlcnI7ICAgICAg ICAgICAgICAgLyogTENNKChwLTEpKHEtMSkpICovCi0rCi0rICAgIGN0eDIgPSBCTl9DVFhfbmV3 KCk7Ci0rICAgIGlmICghY3R4MikKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICByc2EtPmQg PSBCTl9tb2RfaW52ZXJzZShOVUxMLCByc2EtPmUsIHIwLCBjdHgyKTsgLyogZCAqLwotKyAgICBp ZiAocnNhLT5kID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgLyogY2FsY3Vs YXRlIGQgbW9kIChwLTEpICovCi0rICAgIHJzYS0+ZG1wMSA9IEJOX25ldygpOwotKyAgICBpZiAo cnNhLT5kbXAxID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFCTl9tb2Qo cnNhLT5kbXAxLCByc2EtPmQsIHIxLCBjdHgpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAg IC8qIGNhbGN1bGF0ZSBkIG1vZCAocS0xKSAqLwotKyAgICByc2EtPmRtcTEgPSBCTl9uZXcoKTsK LSsgICAgaWYgKHJzYS0+ZG1xMSA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlm ICghQk5fbW9kKHJzYS0+ZG1xMSwgcnNhLT5kLCByMiwgY3R4KSkKLSsgICAgICAgIGdvdG8gZXJy OwotKwotKyAgICAvKiBjYWxjdWxhdGUgaW52ZXJzZSBvZiBxIG1vZCBwICovCi0rICAgIHJzYS0+ aXFtcCA9IEJOX21vZF9pbnZlcnNlKE5VTEwsIHJzYS0+cSwgcnNhLT5wLCBjdHgyKTsKLSsKLSsg ZXJyOgotKyAgICBpZiAoY3R4KSB7Ci0rICAgICAgICBCTl9DVFhfZW5kKGN0eCk7Ci0rICAgICAg ICBCTl9DVFhfZnJlZShjdHgpOwotKyAgICB9Ci0rICAgIGlmIChjdHgyKQotKyAgICAgICAgQk5f Q1RYX2ZyZWUoY3R4Mik7Ci0rICAgIC8qIElmIHRoaXMgaXMgc2V0IGFsbCBjYWxscyBzdWNjZXNz ZnVsICovCi0rICAgIGlmIChyc2EgJiYgcnNhLT5pcW1wICE9IE5VTEwpCi0rICAgICAgICByZXR1 cm4gMTsKLSsKLSsgICAgcmV0dXJuIDA7Ci0rCi0rfQotKwotK2ludCBSU0FfWDkzMV9nZW5lcmF0 ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCTl9HRU5DQiAqY2IpCi0rewotKyAgICBpbnQgb2sgPSAwOwot KyAgICBCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKLSsgICAgQk5fQ1RYICpjdHggPSBO VUxMOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEo cnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgotKyAgICAgICAgKGJpdHMg PCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBGSVBTZXJy KEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsIEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsK LSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAgIGlmIChiaXRzICYgMHhmZikgewot KyAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLCBGSVBTX1Jf SU5WQUxJRF9LRVlfTEVOR1RIKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAg IGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9S U0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0r ICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyNlbmRpZgotKwotKyAgICBjdHggPSBCTl9DVFhf bmV3KCk7Ci0rICAgIGlmICghY3R4KQotKyAgICAgICAgZ290byBlcnJvcjsKLSsKLSsgICAgQk5f Q1RYX3N0YXJ0KGN0eCk7Ci0rICAgIFhwID0gQk5fQ1RYX2dldChjdHgpOwotKyAgICBYcSA9IEJO X0NUWF9nZXQoY3R4KTsKLSsgICAgaWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEsIGJp dHMsIGN0eCkpCi0rICAgICAgICBnb3RvIGVycm9yOwotKwotKyAgICByc2EtPnAgPSBCTl9uZXco KTsKLSsgICAgcnNhLT5xID0gQk5fbmV3KCk7Ci0rICAgIGlmICghcnNhLT5wIHx8ICFyc2EtPnEp Ci0rICAgICAgICBnb3RvIGVycm9yOwotKwotKyAgICAvKiBHZW5lcmF0ZSB0d28gcHJpbWVzIGZy b20gWHAsIFhxICovCi0rCi0rICAgIGlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2Et PnAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhwLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZSwgY3R4LCBjYikpCi0rICAgICAgICBnb3RvIGVycm9yOwotKwotKyAgICBp ZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5xLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBYcSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsIGN0eCwgY2Ip KQotKyAgICAgICAgZ290byBlcnJvcjsKLSsKLSsgICAgLyogU2luY2UgcnNhLT5wIGFuZCByc2Et PnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCi0rICAgICAqIHJlbWFpbmlu ZyBSU0EgY29tcG9uZW50cy4KLSsgICAgICovCi0rCi0rICAgIGlmICghUlNBX1g5MzFfZGVyaXZl X2V4KHJzYSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgZSwgY2IpKQotKyAgICAg ICAgZ290byBlcnJvcjsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmICghZmlwc19j aGVja19yc2EocnNhKSkKLSsgICAgICAgIGdvdG8gZXJyb3I7Ci0rI2VuZGlmCi0rCi0rICAgIG9r ID0gMTsKLSsKLSsgZXJyb3I6Ci0rICAgIGlmIChjdHgpIHsKLSsgICAgICAgIEJOX0NUWF9lbmQo Y3R4KTsKLSsgICAgICAgIEJOX0NUWF9mcmVlKGN0eCk7Ci0rICAgIH0KLSsKLSsgICAgaWYgKG9r KQotKyAgICAgICAgcmV0dXJuIDE7Ci0rCi0rICAgIHJldHVybiAwOwotKwotK30KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0x LjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzCTIwMTUtMTItMDQgMTM6 NTU6NTEuOTY4NTYyNjY4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlw c19zaGFfc2VsZnRlc3QuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2ODU2MjY2OCArMDEwMAotQEAg LTAsMCArMSwxNDUgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RbXVs2MF0gPSB7Ci0rICAgICIiLAotKyAgICAi YWJjIiwKLSsgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1u bG1ub21ub3Bub3BxIgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0W11b U0hBX0RJR0VTVF9MRU5HVEhdID0gewotKyAgICB7MHhkYSwgMHgzOSwgMHhhMywgMHhlZSwgMHg1 ZSwgMHg2YiwgMHg0YiwgMHgwZCwgMHgzMiwgMHg1NSwKLSsgICAgIDB4YmYsIDB4ZWYsIDB4OTUs IDB4NjAsIDB4MTgsIDB4OTAsIDB4YWYsIDB4ZDgsIDB4MDcsIDB4MDl9LAotKyAgICB7MHhhOSwg MHg5OSwgMHgzZSwgMHgzNiwgMHg0NywgMHgwNiwgMHg4MSwgMHg2YSwgMHhiYSwgMHgzZSwKLSsg ICAgIDB4MjUsIDB4NzEsIDB4NzgsIDB4NTAsIDB4YzIsIDB4NmMsIDB4OWMsIDB4ZDAsIDB4ZDgs IDB4OWR9LAotKyAgICB7MHg4NCwgMHg5OCwgMHgzZSwgMHg0NCwgMHgxYywgMHgzYiwgMHhkMiwg MHg2ZSwgMHhiYSwgMHhhZSwKLSsgICAgIDB4NGEsIDB4YTEsIDB4ZjksIDB4NTEsIDB4MjksIDB4 ZTUsIDB4ZTUsIDB4NDYsIDB4NzAsIDB4ZjF9LAotK307Ci0rCi0rc3RhdGljIGludCBjb3JydXB0 X3NoYTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKLSt7Ci0rICAgIGNvcnJ1cHRfc2hh ID0gMTsKLSt9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCi0rewotKyAgICBpbnQgbjsK LSsKLSsgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZih0ZXN0KSAvIHNpemVvZih0ZXN0WzBdKTsg KytuKSB7Ci0rICAgICAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKLSsK LSsgICAgICAgIEVWUF9EaWdlc3QodGVzdFtuXSwgc3RybGVuKHRlc3Rbbl0pICsgY29ycnVwdF9z aGEsIG1kLCBOVUxMLAotKyAgICAgICAgICAgICAgICAgICBFVlBfc2hhMSgpLCBOVUxMKTsKLSsg ICAgICAgIGlmIChtZW1jbXAobWQsIHJldFtuXSwgc2l6ZW9mIG1kKSkgewotKyAgICAgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSwgRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgcmV0 dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGEyNTZbXSA9 Ci0rICAgIHsgMHhmYSwgMHg0OCwgMHg1OSwgMHgyYSwgMHhlMSwgMHhhZSwgMHgxZiwgMHgzMCwK LSsgICAgMHhmYwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTI1 NltdID0KLSsgICAgeyAweGY3LCAweDI2LCAweGQ4LCAweDk4LCAweDQ3LCAweDkxLCAweDY4LCAw eDViLAotKyAgICAweDllLCAweDM5LCAweGIyLCAweDU4LCAweGJiLCAweDc1LCAweGJmLCAweDAx LAotKyAgICAweDE3LCAweDBjLCAweDg0LCAweDAwLCAweDAxLCAweDdhLCAweDk0LCAweDgzLAot KyAgICAweGYzLCAweDBiLCAweDE1LCAweDg0LCAweDRiLCAweDY5LCAweDg4LCAweDhhCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhNTEyW10gPQotKyAgICB7IDB4 MzcsIDB4ZDEsIDB4MzUsIDB4OWQsIDB4MTgsIDB4NDEsIDB4ZTksIDB4YjcsCi0rICAgIDB4NmQs IDB4OWEsIDB4MTMsIDB4ZGEsIDB4NWYsIDB4ZjMsIDB4YmQKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGRpZ19zaGE1MTJbXSA9Ci0rICAgIHsgMHgxMSwgMHgxMywgMHhjNCwg MHgxOSwgMHhlZCwgMHgyYiwgMHgxZCwgMHgxNiwKLSsgICAgMHgxMSwgMHhlYiwgMHg5YiwgMHhi ZSwgMHhmMCwgMHg3ZiwgMHhjZiwgMHg0NCwKLSsgICAgMHg4YiwgMHhkNywgMHg1NywgMHhiZCwg MHg4ZCwgMHhhOSwgMHgyNSwgMHhiMCwKLSsgICAgMHg0NywgMHgyNSwgMHhkNiwgMHg2YywgMHg5 YSwgMHg1NCwgMHg3ZiwgMHg4ZiwKLSsgICAgMHgwYiwgMHg1MywgMHgxYSwgMHgxMCwgMHg2OCwg MHgzMiwgMHgwMywgMHgzOCwKLSsgICAgMHg4MiwgMHhjNCwgMHg4NywgMHhjNCwgMHhlYSwgMHgw ZSwgMHhkMSwgMHgwNCwKLSsgICAgMHhhOSwgMHg5OCwgMHhjMSwgMHgwNSwgMHhhMywgMHhmMywg MHhmOCwgMHhiMSwKLSsgICAgMHhhZiwgMHhiYywgMHhkOSwgMHg3OCwgMHg3ZSwgMHhlZSwgMHgz ZCwgMHg0MwotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKQotK3sKLSsgICAg dW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVWUF9EaWdl c3QobXNnX3NoYTI1Niwgc2l6ZW9mKG1zZ19zaGEyNTYpLCBtZCwgTlVMTCwgRVZQX3NoYTI1Nigp LCBOVUxMKTsKLSsgICAgaWYgKG1lbWNtcChkaWdfc2hhMjU2LCBtZCwgc2l6ZW9mKGRpZ19zaGEy NTYpKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICBFVlBf RGlnZXN0KG1zZ19zaGE1MTIsIHNpemVvZihtc2dfc2hhNTEyKSwgbWQsIE5VTEwsIEVWUF9zaGE1 MTIoKSwgTlVMTCk7Ci0rICAgIGlmIChtZW1jbXAoZGlnX3NoYTUxMiwgbWQsIHNpemVvZihkaWdf c2hhNTEyKSkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAg cmV0dXJuIDE7Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRv L2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9m aXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlw cy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njg1NjI2 NjggKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVf aG1hYy5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY4NTYyNjY4ICswMTAwCi1AQCAtMCwwICsxLDI2 OCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgot KyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lmbmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpCi0rewotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rdm9pZCBGSVBT X3NlbGZ0ZXN0X2NoZWNrKCkKLSt7Ci0rfQotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLStpbnQgYm5fbXVsX21vbnRfZnB1NjQoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAq YXAsIGNvbnN0IEJOX1VMT05HICpicCwKLSsgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQk5f VUxPTkcgKm5wLCBjb25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0pCi0rewotKyAgICByZXR1cm4g MDsKLSt9OwotKwotK2ludCBibl9tdWxfbW9udF9pbnQoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9V TE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwKLSsgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEJOX1VMT05HICpucCwgY29uc3QgQk5fVUxPTkcgKm4wLCBpbnQgbnVtKQotK3sKLSsgICAgcmV0 dXJuIDA7Ci0rfTsKLSsKLSsjIGlmICAgICBkZWZpbmVkKF9faTM4NikgICB8fCBkZWZpbmVkKF9f aTM4Nl9fKSAgIHx8IGRlZmluZWQoX01fSVg4NikgfHwgXAotKyAgICAgICAgZGVmaW5lZChfX0lO VEVMX18pIHx8IFwKLSsgICAgICAgIGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZf NjRfXykgfHwgXAotKyAgICAgICAgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQp Ci0rCi0rdW5zaWduZWQgaW50IE9QRU5TU0xfaWEzMmNhcF9QWzRdOwotK3Vuc2lnbmVkIGxvbmcg Kk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCkKLSt7Ci0rICAgIGlmIChzaXplb2YobG9uZykgPT0g NCkKLSsgICAgICAgIC8qCi0rICAgICAgICAgKiBJZiAzMi1iaXQgYXBwbGljYXRpb24gcHVsbHMg YWRkcmVzcyBvZiBPUEVOU1NMX2lhMzJjYXBfUFswXQotKyAgICAgICAgICogY2xlYXIgc2Vjb25k IGVsZW1lbnQgdG8gbWFpbnRhaW4gdGhlIGlsbHVzaW9uIHRoYXQgdmVjdG9yCi0rICAgICAgICAg KiBpcyAzMi1iaXQuCi0rICAgICAgICAgKi8KLSsgICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzFd ID0gMDsKLSsKLSsgICAgT1BFTlNTTF9pYTMyY2FwX1BbMl0gPSAwOwotKwotKyAgICByZXR1cm4g KHVuc2lnbmVkIGxvbmcgKilPUEVOU1NMX2lhMzJjYXBfUDsKLSt9Ci0rCi0rIyAgaWYgZGVmaW5l ZChPUEVOU1NMX0NQVUlEX09CSikgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmICFkZWZp bmVkKEkzODZfT05MWSkKLSsjICAgZGVmaW5lIE9QRU5TU0xfQ1BVSURfU0VUVVAKLSsjICAgaWYg ZGVmaW5lZChfV0lOMzIpCi0rdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IElBMzJDQVA7Ci0rIyAg IGVsc2UKLSt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBJQTMyQ0FQOwotKyMgICBlbmRpZgot K3ZvaWQgT1BFTlNTTF9jcHVpZF9zZXR1cCh2b2lkKQotK3sKLSsgICAgc3RhdGljIGludCB0cmln Z2VyID0gMDsKLSsgICAgSUEzMkNBUCBPUEVOU1NMX2lhMzJfY3B1aWQodW5zaWduZWQgaW50ICop OwotKyAgICBJQTMyQ0FQIHZlYzsKLSsgICAgY2hhciAqZW52OwotKwotKyAgICBpZiAodHJpZ2dl cikKLSsgICAgICAgIHJldHVybjsKLSsKLSsgICAgdHJpZ2dlciA9IDE7Ci0rICAgIGlmICgoZW52 ID0gZ2V0ZW52KCJPUEVOU1NMX2lhMzJjYXAiKSkpIHsKLSsgICAgICAgIGludCBvZmYgPSAoZW52 WzBdID09ICd+JykgPyAxIDogMDsKLSsjICAgaWYgZGVmaW5lZChfV0lOMzIpCi0rICAgICAgICBp ZiAoIXNzY2FuZihlbnYgKyBvZmYsICIlSTY0aSIsICZ2ZWMpKQotKyAgICAgICAgICAgIHZlYyA9 IHN0cnRvdWwoZW52ICsgb2ZmLCBOVUxMLCAwKTsKLSsjICAgZWxzZQotKyAgICAgICAgaWYgKCFz c2NhbmYoZW52ICsgb2ZmLCAiJWxsaSIsIChsb25nIGxvbmcgKikmdmVjKSkKLSsgICAgICAgICAg ICB2ZWMgPSBzdHJ0b3VsKGVudiArIG9mZiwgTlVMTCwgMCk7Ci0rIyAgIGVuZGlmCi0rICAgICAg ICBpZiAob2ZmKQotKyAgICAgICAgICAgIHZlYyA9IE9QRU5TU0xfaWEzMl9jcHVpZChPUEVOU1NM X2lhMzJjYXBfUCkgJiB+dmVjOwotKyAgICAgICAgZWxzZSBpZiAoZW52WzBdID09ICc6JykKLSsg ICAgICAgICAgICB2ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoT1BFTlNTTF9pYTMyY2FwX1ApOwot KwotKyAgICAgICAgT1BFTlNTTF9pYTMyY2FwX1BbMl0gPSAwOwotKyAgICAgICAgaWYgKChlbnYg PSBzdHJjaHIoZW52LCAnOicpKSkgewotKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN4Owot KyAgICAgICAgICAgIGVudisrOwotKyAgICAgICAgICAgIG9mZiA9IChlbnZbMF0gPT0gJ34nKSA/ IDEgOiAwOwotKyAgICAgICAgICAgIHZlY3ggPSBzdHJ0b3VsKGVudiArIG9mZiwgTlVMTCwgMCk7 Ci0rICAgICAgICAgICAgaWYgKG9mZikKLSsgICAgICAgICAgICAgICAgT1BFTlNTTF9pYTMyY2Fw X1BbMl0gJj0gfnZlY3g7Ci0rICAgICAgICAgICAgZWxzZQotKyAgICAgICAgICAgICAgICBPUEVO U1NMX2lhMzJjYXBfUFsyXSA9IHZlY3g7Ci0rICAgICAgICB9Ci0rICAgIH0gZWxzZQotKyAgICAg ICAgdmVjID0gT1BFTlNTTF9pYTMyX2NwdWlkKE9QRU5TU0xfaWEzMmNhcF9QKTsKLSsKLSsgICAg LyoKLSsgICAgICogfCgxPDwxMCkgc2V0cyBhIHJlc2VydmVkIGJpdCB0byBzaWduYWwgdGhhdCB2 YXJpYWJsZQotKyAgICAgKiB3YXMgaW5pdGlhbGl6ZWQgYWxyZWFkeS4uLiBUaGlzIGlzIHRvIGF2 b2lkIGludGVyZmVyZW5jZQotKyAgICAgKiB3aXRoIGNwdWlkIHNuaXBwZXRzIGluIEVMRiAuaW5p dCBzZWdtZW50LgotKyAgICAgKi8KLSsgICAgT1BFTlNTTF9pYTMyY2FwX1BbMF0gPSAodW5zaWdu ZWQgaW50KXZlYyB8ICgxIDw8IDEwKTsKLSsgICAgT1BFTlNTTF9pYTMyY2FwX1BbMV0gPSAodW5z aWduZWQgaW50KSh2ZWMgPj4gMzIpOwotK30KLSsjICBlbHNlCi0rdW5zaWduZWQgaW50IE9QRU5T U0xfaWEzMmNhcF9QWzRdOwotKyMgIGVuZGlmCi0rCi0rIyBlbHNlCi0rdW5zaWduZWQgbG9uZyAq T1BFTlNTTF9pYTMyY2FwX2xvYyh2b2lkKQotK3sKLSsgICAgcmV0dXJuIE5VTEw7Ci0rfQotKyMg ZW5kaWYKLStpbnQgT1BFTlNTTF9OT05QSUNfcmVsb2NhdGVkID0gMDsKLSsjIGlmICFkZWZpbmVk KE9QRU5TU0xfQ1BVSURfU0VUVVApICYmICFkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JKKQotK3Zv aWQgT1BFTlNTTF9jcHVpZF9zZXR1cCh2b2lkKQotK3sKLSt9Ci0rIyBlbmRpZgotKwotK3N0YXRp YyB2b2lkIGhtYWNfaW5pdChTSEEyNTZfQ1RYICptZF9jdHgsIFNIQTI1Nl9DVFggKm9fY3R4LCBj b25zdCBjaGFyICprZXkpCi0rewotKyAgICBzaXplX3QgbGVuID0gc3RybGVuKGtleSk7Ci0rICAg IGludCBpOwotKyAgICB1bnNpZ25lZCBjaGFyIGtleW1kW0hNQUNfTUFYX01EX0NCTE9DS107Ci0r ICAgIHVuc2lnbmVkIGNoYXIgcGFkW0hNQUNfTUFYX01EX0NCTE9DS107Ci0rCi0rICAgIGlmIChs ZW4gPiBTSEFfQ0JMT0NLKSB7Ci0rICAgICAgICBTSEEyNTZfSW5pdChtZF9jdHgpOwotKyAgICAg ICAgU0hBMjU2X1VwZGF0ZShtZF9jdHgsIGtleSwgbGVuKTsKLSsgICAgICAgIFNIQTI1Nl9GaW5h bChrZXltZCwgbWRfY3R4KTsKLSsgICAgICAgIGxlbiA9IFNIQTI1Nl9ESUdFU1RfTEVOR1RIOwot KyAgICB9IGVsc2UKLSsgICAgICAgIG1lbWNweShrZXltZCwga2V5LCBsZW4pOwotKyAgICBtZW1z ZXQoJmtleW1kW2xlbl0sICdcMCcsIEhNQUNfTUFYX01EX0NCTE9DSyAtIGxlbik7Ci0rCi0rICAg IGZvciAoaSA9IDA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0s7IGkrKykKLSsgICAgICAgIHBhZFtp XSA9IDB4MzYgXiBrZXltZFtpXTsKLSsgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKLSsgICAgU0hB MjU2X1VwZGF0ZShtZF9jdHgsIHBhZCwgU0hBMjU2X0NCTE9DSyk7Ci0rCi0rICAgIGZvciAoaSA9 IDA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0s7IGkrKykKLSsgICAgICAgIHBhZFtpXSA9IDB4NWMg XiBrZXltZFtpXTsKLSsgICAgU0hBMjU2X0luaXQob19jdHgpOwotKyAgICBTSEEyNTZfVXBkYXRl KG9fY3R4LCBwYWQsIFNIQTI1Nl9DQkxPQ0spOwotK30KLSsKLStzdGF0aWMgdm9pZCBobWFjX2Zp bmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICptZF9jdHgsCi0rICAgICAgICAgICAg ICAgICAgICAgICBTSEEyNTZfQ1RYICpvX2N0eCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVm W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgU0hBMjU2X0ZpbmFsKGJ1ZiwgbWRfY3R4 KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCwgYnVmLCBzaXplb2YgYnVmKTsKLSsgICAgU0hB MjU2X0ZpbmFsKG1kLCBvX2N0eCk7Ci0rfQotKwotKyNlbmRpZgotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKLSt7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBzdGF0aWMg Y2hhciBrZXlbXSA9ICJvcmJvRGVKSVRJVGVqc2lycEFET05pdmlycFVrdmFyUCI7Ci0rICAgIGlu dCBuLCBiaW5hcnkgPSAwOwotKwotKyAgICBpZiAoYXJnYyA8IDIpIHsKLSsgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiJXMgWzxmaWxlPl0rXG4iLCBhcmd2WzBdKTsKLSsgICAgICAgIGV4aXQoMSk7 Ci0rICAgIH0KLSsKLSsgICAgbiA9IDE7Ci0rICAgIGlmICghc3RyY21wKGFyZ3Zbbl0sICItYmlu YXJ5IikpIHsKLSsgICAgICAgIG4rKzsKLSsgICAgICAgIGJpbmFyeSA9IDE7ICAgICAgICAgICAg IC8qIGVtaXQgYmluYXJ5IGZpbmdlcnByaW50Li4uICovCi0rICAgIH0KLSsKLSsgICAgZm9yICg7 IG4gPCBhcmdjOyArK24pIHsKLSsgICAgICAgIEZJTEUgKmYgPSBmb3Blbihhcmd2W25dLCAicmIi KTsKLSsgICAgICAgIFNIQTI1Nl9DVFggbWRfY3R4LCBvX2N0eDsKLSsgICAgICAgIHVuc2lnbmVk IGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKyAgICAgICAgaW50IGk7Ci0rCi0rICAg ICAgICBpZiAoIWYpIHsKLSsgICAgICAgICAgICBwZXJyb3IoYXJndltuXSk7Ci0rICAgICAgICAg ICAgZXhpdCgyKTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGhtYWNfaW5pdCgmbWRfY3R4LCAm b19jdHgsIGtleSk7Ci0rICAgICAgICBmb3IgKDs7KSB7Ci0rICAgICAgICAgICAgY2hhciBidWZb MTAyNF07Ci0rICAgICAgICAgICAgc2l6ZV90IGwgPSBmcmVhZChidWYsIDEsIHNpemVvZiBidWYs IGYpOwotKwotKyAgICAgICAgICAgIGlmIChsID09IDApIHsKLSsgICAgICAgICAgICAgICAgaWYg KGZlcnJvcihmKSkgewotKyAgICAgICAgICAgICAgICAgICAgcGVycm9yKGFyZ3Zbbl0pOwotKyAg ICAgICAgICAgICAgICAgICAgZXhpdCgzKTsKLSsgICAgICAgICAgICAgICAgfSBlbHNlCi0rICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgU0hB MjU2X1VwZGF0ZSgmbWRfY3R4LCBidWYsIGwpOwotKyAgICAgICAgfQotKyAgICAgICAgaG1hY19m aW5hbChtZCwgJm1kX2N0eCwgJm9fY3R4KTsKLSsKLSsgICAgICAgIGlmIChiaW5hcnkpIHsKLSsg ICAgICAgICAgICBmd3JpdGUobWQsIFNIQTI1Nl9ESUdFU1RfTEVOR1RILCAxLCBzdGRvdXQpOwot KyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogLi4uIGZvciBzaW5nbGUoISkgZmls ZSAqLwotKyAgICAgICAgfQotKwotKy8qICAgICAgcHJpbnRmKCJITUFDLVNIQTEoJXMpPSAiLGFy Z3Zbbl0pOyAqLwotKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFNIQTI1Nl9ESUdFU1RfTEVOR1RI OyArK2kpCi0rICAgICAgICAgICAgcHJpbnRmKCIlMDJ4IiwgbWRbaV0pOwotKyAgICAgICAgcHJp bnRmKCJcbiIpOwotKyAgICB9Ci0rI2VuZGlmCi0rICAgIHJldHVybiAwOwotK30KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMKLS0tLSBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEu OTY4NTYyNjY4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc190ZXN0 X3N1aXRlLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njg1NjI2NjggKzAxMDAKLUBAIC0wLDAgKzEs NjM5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKgotKyAqIFRoaXMgY29t bWFuZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3QgZHJpdmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGlu ZwotKyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMtMTQwIHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0 ZXMgdGhlIHVzZSBvZiB0aGUKLSsgKiBPcGVuU1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJp ZXR5IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGljCi0rICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBz ZWxmIHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5IGRlbGliZXJhdGVseQotKyAqIHBvaW50aW5nIHRv IGFuIGludmFsaWQgZXhlY3V0YWJsZSBoYXNoCi0rICoKLSsgKiBDb250cmlidXRlZCBieSBTdGV2 ZSBNYXJxdWVzcy4KLSsgKgotKyAqLwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxh c3NlcnQuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2lu Y2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Rlcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKwotKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3No YS5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsKLSsgICAgcmV0 dXJuICgwKTsKLSt9Ci0rI2Vsc2UKLSsKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyMg aW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsvKiBBRVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25v d24gcGxhaW50ZXh0LCB2ZXJpZnkgcmVzdWx0IG1hdGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0Ci0r Ki8KLStzdGF0aWMgaW50IEZJUFNfYWVzX3Rlc3Qodm9pZCkKLSt7Ci0rICAgIGludCByZXQgPSAw OwotKyAgICB1bnNpZ25lZCBjaGFyIHBsdG1wWzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXRt cFsxNl07Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XSA9Ci0rICAgICAgICB7IDEsIDIsIDMs IDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2IH07Ci0rICAgIHVu c2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsKLSsgICAgRVZQX0NJ UEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKyAgICBpZiAo RVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksIE5VTEwsIGtleSwgTlVM TCwgMSkgPD0gMCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBFVlBfQ2lwaGVyKCZjdHgsIGNp dG1wLCBwbGFpbnRleHQsIDE2KTsKLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVW UF9hZXNfMTI4X2VjYigpLCBOVUxMLCBrZXksIE5VTEwsIDApIDw9IDApCi0rICAgICAgICBnb3Rv IGVycjsKLSsgICAgRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAsIDE2KTsKLSsgICAgaWYg KG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAg cmV0ID0gMTsKLSsgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKyAg ICByZXR1cm4gcmV0OwotK30KLSsKLStzdGF0aWMgaW50IEZJUFNfZGVzM190ZXN0KHZvaWQpCi0r ewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKLSsgICAg dW5zaWduZWQgY2hhciBjaXRtcFs4XTsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9Ci0rICAg ICAgICB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUs IDE2LCAxNywgMTgsCi0rICAgICAgICAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0Ci0rICAgIH07Ci0r ICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W10gPSB7ICdlJywgJ3QnLCAnYScsICdvJywgJ24n LCAncicsICdpJywgJ3MnIH07Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJ UEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVW UF9kZXNfZWRlM19lY2IoKSwgTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKyAgICAgICAgZ290 byBlcnI7Ci0rICAgIEVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7Ci0rICAg IGlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksIE5VTEwsIGtl eSwgTlVMTCwgMCkgPD0gMCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBFVlBfQ2lwaGVyKCZj dHgsIHBsdG1wLCBjaXRtcCwgOCk7Ci0rICAgIGlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwg OCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgcmV0ID0gMTsKLSsgZXJyOgotKyAgICBFVlBf Q0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLSsvKgot KyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4K LSsgKi8KLStzdGF0aWMgaW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKLSt7Ci0rICAgIERTQSAq ZHNhID0gTlVMTDsKLSsgICAgRVZQX1BLRVkgcGs7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtd ID0gImV0YW9ucmlzaGRsYyI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzYwXTsKLSsgICAgdW5z aWduZWQgaW50IHNsZW47Ci0rICAgIGludCByID0gMDsKLSsgICAgRVZQX01EX0NUWCBtY3R4Owot KwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsK LSsgICAgZHNhID0gRFNBX25ldygpOwotKyAgICBpZiAoIWRzYSkKLSsgICAgICAgIGdvdG8gZW5k OwotKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCwgTlVMTCwg MCwgTlVMTCwgTlVMTCwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0Ff Z2VuZXJhdGVfa2V5KGRzYSkpCi0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgaWYgKGJhZCkKLSsg ICAgICAgIEJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7Ci0rCi0rICAgIHBrLnR5cGUgPSBF VlBfUEtFWV9EU0E7Ci0rICAgIHBrLnBrZXkuZHNhID0gZHNhOwotKwotKyAgICBpZiAoIUVWUF9T aWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVuZDsK LSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkp Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYs ICZzbGVuLCAmcGspKQotKyAgICAgICAgZ290byBlbmQ7Ci0rCi0rICAgIGlmICghRVZQX1Zlcmlm eUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKyAgICAgICAgZ290byBlbmQ7Ci0r ICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkp Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVm LCBzbGVuLCAmcGspOwotKyBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0r ICAgIGlmIChkc2EpCi0rICAgICAgICBEU0FfZnJlZShkc2EpOwotKyAgICBpZiAociAhPSAxKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKgotKyAqIFJTQTog Z2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8KLStz dGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKLSt7Ci0rICAgIFJTQSAqa2V5OwotKyAg ICB1bnNpZ25lZCBjaGFyIGlucHV0X3B0ZXh0W10gPSAiZXRhb25yaXNoZGxjIjsKLSsgICAgdW5z aWduZWQgY2hhciBidWZbMjU2XTsKLSsgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rICAgIEJJR05V TSAqYm47Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsgICAgRVZQX1BLRVkgcGs7Ci0rICAgIGlu dCByID0gMDsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5p dCgmbWN0eCk7Ci0rICAgIGtleSA9IFJTQV9uZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsg ICAgaWYgKCFrZXkgfHwgIWJuKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3Jk KGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsIGJu LCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgaWYg KGJhZCkKLSsgICAgICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7Ci0rCi0rICAgIHBrLnR5cGUg PSBFVlBfUEtFWV9SU0E7Ci0rICAgIHBrLnBrZXkucnNhID0ga2V5OwotKwotKyAgICBpZiAoIUVW UF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVu ZDsKLSsgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihp bnB1dF9wdGV4dCkgLSAxKSkKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWdu RmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCi0rICAgICAgICBnb3RvIGVuZDsKLSsKLSsg ICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rICAg ICAgICBnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBpbnB1dF9w dGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKyAgICAgICAgZ290byBlbmQ7Ci0rICAg IHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKLSsgZW5kOgotKyAg ICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAgICBpZiAoa2V5KQotKyAgICAgICAgUlNB X2ZyZWUoa2V5KTsKLSsgICAgaWYgKHIgIT0gMSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBy ZXR1cm4gMTsKLSt9Ci0rCi0rLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3Qg dmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gK LSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGExX3Rlc3QoKQotK3sKLSsgICAgdW5zaWduZWQgY2hh ciBkaWdlc3RbU0hBX0RJR0VTVF9MRU5HVEhdID0KLSsgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5 YSwgMHgzYSwgMHhlYywgMHgxYSwgMHgxZSwgMHg4ZSwgMHg2NSwgMHhkNCwgMHg5YSwKLSsweDM4 LCAweDBjLCAweDhiLCAweDFlLCAweDJjLCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07Ci0rICAg IHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNo YXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsg ICAgaWYgKCFFVlBfRGlnZXN0KHN0ciwgc2l6ZW9mKHN0cikgLSAxLCBtZCwgTlVMTCwgRVZQX3No YTEoKSwgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCwgZGln ZXN0LCBzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9 Ci0rCi0rLyogU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQg Y29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3Rh dGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0 W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4ZjUsIDB4NTMsIDB4Y2QsIDB4 YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhjOSwKLSsweDY4LCAweGMw LCAweGVhLCAweDQwLCAweDkxLAotKyAgICAgICAgMHg2LCAweGVjLCAweDhlLCAweDExLCAweDk2 LCAweGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAweGU2LAotKyAgICAgICAgICAg IDB4NTAsIDB4NGYsIDB4NDcsIDB4NTcKLSsgICAgfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJb XSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNU X0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdl c3Qoc3RyLCBzaXplb2Yoc3RyKSAtIDEsIG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5VTEwpKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAobWQsIGRpZ2VzdCwgc2l6ZW9mKG1k KSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIFNIQTUx MjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25v d24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19z aGE1MTJfdGVzdCgpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNU X0xFTkdUSF0gPQotKyAgICAgICAgeyAweDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAweGQ0 LCAweDc4LCAweDg4LCAweGRmLCAweDg4LCAweDVmLAotKzB4OTQsIDB4NzEsIDB4NjQsIDB4Mjgs IDB4Y2EsCi0rICAgICAgICAweDE2LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAweDBm LCAweGM1LCAweDAzLCAweDk5LCAweGIyLAotKyAgICAgICAgICAgIDB4ZDAsIDB4ZTcsIDB4MGIs IDB4OTQsIDB4NGEsCi0rICAgICAgICAweDQ1LCAweGQyLCAweDZjLCAweDRmLCAweDIwLCAweDA2 LCAweGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdmLAotKyAgICAgICAgICAgIDB4MjQsIDB4YjEs IDB4ZDksIDB4NDAsIDB4MjIsCi0rICAgICAgICAweDQ5LCAweDU0LCAweDEwLCAweGMyLCAweDIy LCAweDlkLCAweDI3LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2LAotKyAgICAgICAgICAgIDB4ZWIs IDB4MmQsIDB4NDIsIDB4MWQsIDB4YTMKLSsgICAgfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJb XSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNU X0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdl c3Qoc3RyLCBzaXplb2Yoc3RyKSAtIDEsIG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAobWQsIGRpZ2VzdCwgc2l6ZW9mKG1k KSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIEhNQUMt U0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8g a25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQ U19obWFjX3NoYTFfdGVzdCgpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9u cmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1 bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKyAgICAgICAgeyAweDczLCAw eGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAweGVh LAotKzB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCi0rICAgICAgICAweGIyLCAweGZiLCAw eGVjLCAweGM2Ci0rICAgIH07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURf U0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJv cigpOwotKyAgICBpZiAoIUhNQUMKLSsgICAgICAgIChFVlBfc2hhMSgpLCBrZXksIHNpemVvZihr ZXkpIC0gMSwgaXYsIHNpemVvZihpdikgLSAxLCBvdXQsICZvdXRsZW4pKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKLSsgICAgICAgIHJl dHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogSE1BQy1TSEEyMjQ6IGdlbmVyYXRl IGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJl Y29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyMjRf dGVzdCgpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAg ICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFy IGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKyAgICAgICAgeyAweDc1LCAweDU4LCAweGQ1LCAw eGJkLCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJlLAotKzB4MWMsIDB4 YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCi0rICAgICAgICAweGU1LCAweDYyLCAweDQ5LCAweGI2LCAw eDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAweDE5Ci0rICAgIH07Ci0r Ci0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVk IGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMK LSsgICAgICAgIChFVlBfc2hhMjI0KCksIGtleSwgc2l6ZW9mKGtleSkgLSAxLCBpdiwgc2l6ZW9m KGl2KSAtIDEsIG91dCwKLSsgICAgICAgICAmb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwot KyAgICBpZiAobWVtY21wKG91dCwga2F2YWwsIG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIEhNQUMtU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9m IGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVk IGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKQot K3sKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWdu ZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtF VlBfTUFYX01EX1NJWkVdID0KLSsgICAgICAgIHsgMHhlOSwgMHgxNywgMHhjMSwgMHg3YiwgMHg0 YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgzNiwKLSsweDAyLCAweGY1LCAweDcy LCAweDMzLCAweDg3LAotKyAgICAgICAgMHg5ZiwgMHhjNiwgMHg2ZSwgMHg3YiwgMHg3ZSwgMHhh OCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhiYSwgMHhlZSwKLSsgICAgICAgICAgICAweDUxLCAweGZm LCAweGRhLCAweDI0LCAweGY0Ci0rICAgIH07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VW UF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMKLSsgICAgICAgIChFVlBfc2hhMjU2KCksIGtl eSwgc2l6ZW9mKGtleSkgLSAxLCBpdiwgc2l6ZW9mKGl2KSAtIDEsIG91dCwKLSsgICAgICAgICAm b3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCwga2F2YWws IG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8q IEhNQUMtU0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29t cGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGlj IGludCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBrZXlb XSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0 IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsgICAgICAg IHsgMHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwg MHg2MywgMHgwOCwKLSsweDI2LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAotKyAgICAgICAgMHhl MiwgMHhkZiwgMHhmOCwgMHhmZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwg MHgxYiwKLSsgICAgICAgICAgICAweGFjLCAweGIwLCAweDA3LCAweDM5LCAweDA4LAotKyAgICAg ICAgMHhmMywgMHg5MSwgMHgzNSwgMHgxMSwgMHg3NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwg MHg0ZCwgMHhjMywKLSsgICAgICAgICAgICAweGYzLCAweGI4LCAweDliLCAweDg4LCAweDFjCi0r ICAgIH07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAg IHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBp ZiAoIUhNQUMKLSsgICAgICAgIChFVlBfc2hhMzg0KCksIGtleSwgc2l6ZW9mKGtleSkgLSAxLCBp diwgc2l6ZW9mKGl2KSAtIDEsIG91dCwKLSsgICAgICAgICAmb3V0bGVuKSkKLSsgICAgICAgIHJl dHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCwga2F2YWwsIG91dGxlbikpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIEhNQUMtU0hBNTEyOiBnZW5lcmF0 ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHBy ZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhNTEy X3Rlc3QoKQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsg ICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hh ciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsgICAgICAgIHsgMHhjZCwgMHgzZSwgMHhiOSwg MHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhmMywKLSsweDc3LCAw eDU5LCAweDg1LCAweGE5LCAweGU2LAotKyAgICAgICAgMHhmNywgMHhkMSwgMHg1MSwgMHg5Niwg MHgxNywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhjMSwKLSsgICAgICAgICAgICAw eGFkLCAweDdlLCAweDI0LCAweGNhLCAweGIxLAotKyAgICAgICAgMHhkNywgMHg3OSwgMHgwYSwg MHhhNSwgMHhlYSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhhNiwgMHg1MiwKLSsgICAgICAg ICAgICAweDZiLCAweDYxLCAweDdmLCAweGViLCAweDljLAotKyAgICAgICAgMHg0NywgMHg4Niwg MHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5NiwKLSsg ICAgICAgICAgICAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAweDUzCi0rICAgIH07Ci0rCi0rICAg IHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBv dXRsZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMKLSsgICAg ICAgIChFVlBfc2hhNTEyKCksIGtleSwgc2l6ZW9mKGtleSkgLSAxLCBpdiwgc2l6ZW9mKGl2KSAt IDEsIG91dCwKLSsgICAgICAgICAmb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBp ZiAobWVtY21wKG91dCwga2F2YWwsIG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAg cmV0dXJuIDE7Ci0rfQotKwotKy8qIERIOiBnZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVycwotKyov Ci0rc3RhdGljIGludCBkaF90ZXN0KCkKLSt7Ci0rICAgIERIICpkaDsKLSsgICAgRVJSX2NsZWFy X2Vycm9yKCk7Ci0rICAgIGRoID0gRklQU19kaF9uZXcoKTsKLSsgICAgaWYgKCFkaCkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICBpZiAoIURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEw MjQsIDIsIE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIEZJUFNfZGhfZnJlZShkaCk7 Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBaZXJvaXplCi0rKi8KLStzdGF0aWMgaW50IFpl cm9pemUoKQotK3sKLSsgICAgUlNBICprZXk7Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIHVuc2ln bmVkIGNoYXIgdXNlcmtleVsxNl0gPQotKyAgICAgICAgeyAweDQ4LCAweDUwLCAweGYwLCAweGEz LCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdmLAotKzB4ODMsIDB4MDIs IDB4YjEsIDB4MDksIDB4NjggfTsKLSsgICAgaW50IGksIG47Ci0rCi0rICAgIGtleSA9IEZJUFNf cnNhX25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwotKyAgICBpZiAoIWtleSB8fCAhYm4pCi0r ICAgICAgICByZXR1cm4gMDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYg KCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCwgYm4sIE5VTEwpKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIEJOX2ZyZWUoYm4pOwotKwotKyAgICBuID0gQk5fbnVtX2J5dGVzKGtleS0+ ZCk7Ci0rICAgIHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2YXRlIGtleVxuIiwg bik7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOlxuIik7Ci0rICAg IGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKLSsgICAgQk5fcmFuZChrZXktPmQsIG4gKiA4 LCAtMSwgMCk7Ci0rICAgIHByaW50ZigiXHRCTiBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4iKTsK LSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOwotKwotKyAgICBwcmludGYoIlx0Y2hh ciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZvciAoaSA9 IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykKLSsgICAgICAgIHByaW50ZigiJTAyeCIsIHVz ZXJrZXlbaV0pOwotKyAgICBwcmludGYoIlxuIik7Ci0rICAgIFJBTkRfYnl0ZXModXNlcmtleSwg c2l6ZW9mIHVzZXJrZXkpOwotKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92 ZXJ3cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5 KTsgaSsrKQotKyAgICAgICAgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Ci0rICAgIHByaW50 ZigiXG4iKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgRXJyb3I7Ci0r Y29uc3QgY2hhciAqRmFpbChjb25zdCBjaGFyICptc2cpCi0rewotKyAgICBkb19wcmludF9lcnJv cnMoKTsKLSsgICAgRXJyb3IrKzsKLSsgICAgcmV0dXJuIG1zZzsKLSt9Ci0rCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsKLSsgICAgaW50IGRvX2NvcnJ1cHRfcnNhX2tl eWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDA7Ci0rICAgIGludCBiYWRfcnNhID0g MCwgYmFkX2RzYSA9IDA7Ci0rICAgIGludCBkb19ybmdfc3RpY2sgPSAwOwotKyAgICBpbnQgbm9f ZXhpdCA9IDA7Ci0rCi0rICAgIHByaW50ZigiXHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNhdGlvblxu XG4iKTsKLSsKLSsgICAgLyogTG9hZCBlbnRyb3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwgaWYgYW55 ICovCi0rICAgIFJBTkRfbG9hZF9maWxlKCIucm5kIiwgMTAyNCk7Ci0rCi0rICAgIGlmIChhcmd2 WzFdKSB7Ci0rICAgICAgICAvKiBDb3JydXB0ZWQgS0FUIHRlc3RzICovCi0rICAgICAgICBpZiAo IXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfYWVz KCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGgg Y29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgImRlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RlcygpOwotKyAgICAgICAg ICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVk IEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYSIp KSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYSgpOwotKyAgICAgICAgICAgIHByaW50 ZgotKyAgICAgICAgICAgICAgICAoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZh bGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcChhcmd2WzFdLCAicnNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNh KCk7Ci0rICAgICAgICAgICAgcHJpbnRmCi0rICAgICAgICAgICAgICAgICgiUlNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIp OwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgewotKyAg ICAgICAgICAgIHByaW50ZgotKyAgICAgICAgICAgICAgICAoIlJTQSBrZXkgZ2VuZXJhdGlvbiBh bmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKLSsgICAg ICAgICAgICBiYWRfcnNhID0gMTsKLSsgICAgICAgICAgICBub19leGl0ID0gMTsKLSsgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKLSsgICAgICAgICAg ICBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAxOwotKyAgICAgICAgICAgIG5vX2V4aXQgPSAxOwot KyAgICAgICAgICAgIHByaW50ZgotKyAgICAgICAgICAgICAgICAoIlJTQSBrZXkgZ2VuZXJhdGlv biBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsK LSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5IikpIHsKLSsgICAg ICAgICAgICBwcmludGYKLSsgICAgICAgICAgICAgICAgKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5k IHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7Ci0rICAgICAg ICAgICAgYmFkX2RzYSA9IDE7Ci0rICAgICAgICAgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9 IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7Ci0rICAgICAgICAgICAg ZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMTsKLSsgICAgICAgICAgICBub19leGl0ID0gMTsKLSsg ICAgICAgICAgICBwcmludGYKLSsgICAgICAgICAgICAgICAgKCJEU0Ega2V5IGdlbmVyYXRpb24g YW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0r ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgewotKyAgICAgICAg ICAgIEZJUFNfY29ycnVwdF9zaGExKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNo IHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAo YXJndlsxXSwgInJuZyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X3JuZygpOwotKyAg ICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7Ci0rICAgICAg ICAgICAgZG9fcm5nX3N0aWNrID0gMTsKLSsgICAgICAgICAgICBub19leGl0ID0gMTsKLSsgICAg ICAgICAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4i KTsKLSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQg XCIlc1wiXG4iLCBhcmd2WzFdKTsKLSsgICAgICAgICAgICBleGl0KDEpOwotKyAgICAgICAgfQot KyAgICAgICAgaWYgKCFub19leGl0KSB7Ci0rICAgICAgICAgICAgaWYgKCFGSVBTX21vZGVfc2V0 KDEpKSB7Ci0rICAgICAgICAgICAgICAgIGRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAgICAg ICAgICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBmYWlsZWRcbiIpOwotKyAgICAgICAgICAg ICAgICBleGl0KDEpOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAgICBwcmludGYoIlBvd2Vy LXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsKLSsgICAgICAgICAgICBleGl0KDApOwotKyAg ICAgICAgfQotKyAgICB9Ci0rCi0rICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9w ZXJhdGlvbgotKyAgICAgKi8KLSsgICAgcHJpbnRmKCIxLiBOb24tQXBwcm92ZWQgY3J5cHRvZ3Jh cGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7Ci0rICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBh bGdvcml0aG0gKEQtSCkuLi4iKTsKLSsgICAgcHJpbnRmKGRoX3Rlc3QoKT8gInN1Y2Nlc3NmdWxc biIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVzdAot KyAgICAgKi8KLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIHByaW50ZigiMi4gQXV0b21h dGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIpOwotKyAgICBpZiAoIUZJUFNfbW9kZV9zZXQoMSkp IHsKLSsgICAgICAgIGRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAgcHJpbnRmKEZhaWwoIkZB SUxFRCFcbiIpKTsKLSsgICAgICAgIGV4aXQoMSk7Ci0rICAgIH0KLSsgICAgcHJpbnRmKCJzdWNj ZXNzZnVsXG4iKTsKLSsgICAgaWYgKGRvX2NvcnJ1cHRfZHNhX2tleWdlbikKLSsgICAgICAgIEZJ UFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19jb3JydXB0X3JzYV9rZXlnZW4p Ci0rICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbigpOwotKyAgICBpZiAoZG9fcm5nX3N0 aWNrKQotKyAgICAgICAgRklQU19ybmdfc3RpY2soKTsKLSsKLSsgICAgLyogQUVTIGVuY3J5cHRp b24vZGVjcnlwdGlvbgotKyAgICAgKi8KLSsgICAgcHJpbnRmKCIzLiBBRVMgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZihGSVBTX2Flc190ZXN0KCk/ICJzdWNjZXNzZnVs XG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAvKiBSU0Ega2V5IGdlbmVyYXRpb24g YW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAgKi8KLSsgICAgcHJpbnRmKCI0LiBSU0Eg a2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwotKyAgICBwcmlu dGYoRklQU19yc2FfdGVzdChiYWRfcnNhKSA/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVE IVxuIikpOwotKwotKyAgICAvKiBERVMtQ0JDIGVuY3J5cHRpb24vZGVjcnlwdGlvbgotKyAgICAg Ki8KLSsgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwot KyAgICBwcmludGYoRklQU19kZXMzX3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlM RUQhXG4iKSk7Ci0rCi0rICAgIC8qIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZh bGlkYXRpb24KLSsgICAgICovCi0rICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOwotKyAgICBwcmludGYoRklQU19kc2FfdGVzdChi YWRfZHNhKSA/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAv KiBTSEEtMSBoYXNoCi0rICAgICAqLwotKyAgICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7 Ci0rICAgIHByaW50ZihGSVBTX3NoYTFfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZB SUxFRCFcbiIpKTsKLSsKLSsgICAgLyogU0hBLTI1NiBoYXNoCi0rICAgICAqLwotKyAgICBwcmlu dGYoIjdiLiBTSEEtMjU2IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKEZJUFNfc2hhMjU2X3Rlc3Qo KT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAgIC8qIFNIQS01 MTIgaGFzaAotKyAgICAgKi8KLSsgICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4uIik7Ci0r ICAgIHByaW50ZihGSVBTX3NoYTUxMl90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJ TEVEIVxuIikpOwotKwotKyAgICAvKiBITUFDLVNIQS0xIGhhc2gKLSsgICAgICovCi0rICAgIHBy aW50ZigiN2QuIEhNQUMtU0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoRklQU19obWFjX3No YTFfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsKLSsgICAg LyogSE1BQy1TSEEtMjI0IGhhc2gKLSsgICAgICovCi0rICAgIHByaW50ZigiN2UuIEhNQUMtU0hB LTIyNCBoYXNoLi4uIik7Ci0rICAgIHByaW50ZihGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKT8gInN1 Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTI1 NiBoYXNoCi0rICAgICAqLwotKyAgICBwcmludGYoIjdmLiBITUFDLVNIQS0yNTYgaGFzaC4uLiIp OwotKyAgICBwcmludGYoRklQU19obWFjX3NoYTI1Nl90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDog RmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAvKiBITUFDLVNIQS0zODQgaGFzaAotKyAgICAg Ki8KLSsgICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRm KEZJUFNfaG1hY19zaGEzODRfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFc biIpKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKLSsgICAgICovCi0rICAgIHByaW50 ZigiN2guIEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZihGSVBTX2htYWNfc2hh NTEyX3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAg IC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgotKyAgICAgKi8KLSsgICAg cHJpbnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxu Iik7Ci0rICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKLSsg ICAgcHJpbnRmKGRoX3Rlc3QoKT8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsgICAgICAg ICAgIDogRmFpbCgiZmFpbGVkIElOQ09SUkVDVExZIVxuIikpOwotKwotKyAgICAvKiBaZXJvaXph dGlvbgotKyAgICAgKi8KLSsgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOwotKyAg ICBwcmludGYoWmVyb2l6ZSgpPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rICAgICAg ICAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZIVxuIikpOwotKwotKyAgICBwcmludGYo IlxuQWxsIHRlc3RzIGNvbXBsZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOwotKyAgICBy ZXR1cm4gRXJyb3IgPyAxIDogMDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBz L01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcwky MDE1LTEyLTA0IDEzOjU1OjUxLjk2OTU2MjY5MiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9maXBzL01ha2VmaWxlCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY5NTYyNjkyICswMTAwCi1A QCAtMCwwICsxLDM0MSBAQAotKyMKLSsjIE9wZW5TU0wvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKLSsj Ci0rCi0rRElSPQlmaXBzCi0rVE9QPQkuLi8uLgotK0NDPQljYwotK0lOQ0xVREVTPQotK0NGTEFH PS1nCi0rTUFLRUZJTEU9CU1ha2VmaWxlCi0rQVI9CQlhciByCi0rCi0rQ0ZMQUdTPSAkKElOQ0xV REVTKSAkKENGTEFHKQotKwotK0dFTkVSQUw9TWFrZWZpbGUKLStURVNUPWZpcHNfdGVzdF9zdWl0 ZS5jIGZpcHNfcmFuZHRlc3QuYwotK0FQUFM9Ci0rCi0rUFJPR1JBTT0gZmlwc19zdGFuZGFsb25l X2htYWMKLStFWEU9ICQoUFJPR1JBTSkkKEVYRV9FWFQpCi0rCi0rTElCPSQoVE9QKS9saWJjcnlw dG8uYQotK0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3NlbGZ0ZXN0LmMgZmlw c19obWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAotKyAgICBmaXBzX3JzYV9z ZWxmdGVzdC5jIGZpcHNfc2hhX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0LmMg IGZpcHNfcmFuZC5jIFwKLSsgICAgZmlwc19yc2FfeDkzMWcuYyBmaXBzX3Bvc3QuYyBmaXBzX2Ry YmdfY3RyLmMgZmlwc19kcmJnX2hhc2guYyBmaXBzX2RyYmdfaG1hYy5jIFwKLSsgICAgZmlwc19k cmJnX2xpYi5jIGZpcHNfZHJiZ19yYW5kLmMgZmlwc19kcmJnX3NlbGZ0ZXN0LmMgZmlwc19yYW5k X2xpYi5jIFwKLSsgICAgZmlwc19jbWFjX3NlbGZ0ZXN0LmMgZmlwc19lbmMuYyBmaXBzX21kLmMK LSsKLStMSUJPQko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNf aG1hY19zZWxmdGVzdC5vIGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKLSsgICAgZmlwc19yc2Ffc2Vs ZnRlc3QubyBmaXBzX3NoYV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5vICBm aXBzX3JhbmQubyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLm8gZmlwc19wb3N0Lm8gZmlwc19kcmJn X2N0ci5vIGZpcHNfZHJiZ19oYXNoLm8gZmlwc19kcmJnX2htYWMubyBcCi0rICAgIGZpcHNfZHJi Z19saWIubyBmaXBzX2RyYmdfcmFuZC5vIGZpcHNfZHJiZ19zZWxmdGVzdC5vIGZpcHNfcmFuZF9s aWIubyBcCi0rICAgIGZpcHNfY21hY19zZWxmdGVzdC5vIGZpcHNfZW5jLm8gZmlwc19tZC5vCi0r Ci0rTElCQ1JZUFRPPS1MLi4gLWxjcnlwdG8KLSsKLStTUkM9ICQoTElCU1JDKSBmaXBzX3N0YW5k YWxvbmVfaG1hYy5jCi0rCi0rRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQuaAotK0hFQURFUj0J JChFWEhFQURFUikKLSsKLStBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQotKwot K3RvcDoKLSsJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJf YWxsKQotKwotK2FsbDoJbGliIGV4ZQotKwotK2xpYjoJJChMSUJPQkopCi0rCSQoQVIpICQoTElC KSAkKExJQk9CSikKLSsJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0rCUB0 b3VjaCBsaWIKLSsKLStleGU6CSQoRVhFKQotKwotK2ZpbGVzOgotKwkkKFBFUkwpICQoVE9QKS91 dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQoVE9QKS9NSU5GTwotKwotK2xpbmtzOgotKwlAJChQ RVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFE RVIpCi0rCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkK LSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQotKwot K2luc3RhbGw6Ci0rCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0 b3AgTWFrZWZpbGUuLi4KLSsJQGhlYWRlcmxpc3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRo ZWFkZXJsaXN0IDsgXAotKwlkbyAgXAotKwkoY3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNU QUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpOyBcCi0rCWNobW9kIDY0NCAkKElOU1RBTExfUFJF RklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaSApOyBcCi0rCWRvbmU7Ci0rCi0r dGFnczoKLSsJY3RhZ3MgJChTUkMpCi0rCi0rdGVzdHM6Ci0rCi0rbGludDoKLSsJbGludCAtRExJ TlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZmCi0rCi0rZGVwZW5kOgotKwlAWyAtbiAiJChNQUtF REVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdXBwZXIgTWFrZWZpbGUuLi4KLSsJJChNQUtF REVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xVREVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQo TElCU1JDKQotKwotK2RjbGVhbjoKLSsJJChQRVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVU RSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQoMCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5l dwotKwltdiAtZiBNYWtlZmlsZS5uZXcgJChNQUtFRklMRSkKLSsKLStjbGVhbjoKLSsJcm0gLWYg Ki5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKLSsK LSskKEVYRSk6ICQoUFJPR1JBTSkubwotKwlGSVBTX1NIQV9BU009IiI7IGZvciBpIGluICQoU0hB MV9BU01fT0JKKSBzaGEyNTYubzsgZG8gRklQU19TSEFfQVNNPSIkJEZJUFNfU0hBX0FTTSAuLi9z aGEvJCRpIiA7IGRvbmU7IFwKLSsJZm9yIGkgaW4gJChDUFVJRF9PQkopOyBkbyBGSVBTX1NIQV9B U009IiQkRklQU19TSEFfQVNNIC4uLyQkaSIgOyBkb25lOyBcCi0rCSQoQ0MpIC1vICRAICQoQ0ZM QUdTKSAkKFBST0dSQU0pLm8gJCRGSVBTX1NIQV9BU00KLSsKLSsjIERPIE5PVCBERUxFVEUgVEhJ UyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCi0rCi0rZmlwcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlw dG8uaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK LStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBz LmMgZmlwc19sb2NsLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLmggZmlwc19hZXNfc2VsZnRlc3QuYwotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0r Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlw c19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2Rlc19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19kZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Rlc19zZWxmdGVzdC5jCi0rZmlwc19k cmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlw c19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2N0 ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2N0ci5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStm aXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNf ZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmgKLStmaXBzX2RyYmdfY3RyLm86IGZpcHNfZHJiZ19jdHIuYyBmaXBz X3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStm aXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNf cmFuZC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJn X2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2hh c2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaGFzaC5jCi0rZmlwc19k cmJnX2hhc2gubzogZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2Ry YmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJi Z19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfaG1h Yy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19obWFj Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2htYWMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Jh bmQuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlw c19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJn X2htYWMuYwotK2ZpcHNfZHJiZ19obWFjLm86IGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfZHJi Z19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3Jh bmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlw c19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNf ZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStmaXBzX2RyYmdfbGliLm86IGZpcHNf ZHJiZ19saWIuYyBmaXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3Jh bmQuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfcmFuZC5jCi0rZmlwc19kcmJnX3JhbmQu bzogZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfZHJiZ19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vy ci5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfc2VsZnRlc3QuYwotK2ZpcHNfZHJiZ19zZWxmdGVz dC5vOiBmaXBzX2RyYmdfc2VsZnRlc3QuaCBmaXBzX2xvY2wuaCBmaXBzX3JhbmRfbGNsLmgKLStm aXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHNhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZV9vczIuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5o Ci0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAot K2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStm aXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAot K2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0r Zmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStm aXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStm aXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHNh X3NlbGZ0ZXN0LmMKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiBmaXBzX2xvY2wuaAotK2ZpcHNfaG1h Y19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvY3J5cHRvLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgK LStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStm aXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2Zp cHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0r Zmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0r Zmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0r Zmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAot K2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2Zp cHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBz X2htYWNfc2VsZnRlc3QuYwotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVz LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19w b3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZV9vczIuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19wb3N0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19wb3N0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5o Ci0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaCBmaXBzX2xvY2wuaCBmaXBzX3Bvc3QuYwotK2ZpcHNfcmFuZC5vOiAuLi8u Li9lX29zLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oCi0rZmlwc19yYW5kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlw c19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2xoYXNoLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19y YW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZmlwc19yYW5kLm86IGZpcHNfbG9j bC5oIGZpcHNfcmFuZC5jCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9lX29zLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Flcy5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcmFuZF9saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFu ZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot K2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStm aXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19y YW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZmlwc19yYW5kX2xpYi5vOiBm aXBzX3JhbmRfbGliLmMKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX3JhbmRfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgK LStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9yYW5kLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oIGZpcHNfbG9jbC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IGZpcHNfcmFu ZF9zZWxmdGVzdC5jCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNf cnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfcnNhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3JzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcnNhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3JzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfcnNhX3NlbGZ0ZXN0LmMKLStmaXBz X3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i bi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAot K2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwc19yc2FfeDkzMWcu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19yc2FfeDkzMWcubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3JzYV94OTMxZy5jCi0rZmlwc19zaGFfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2Zp cHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19z aGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfc2hh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3NoYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfc2hh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19zaGFf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3NoYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3NoYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2hhLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCBmaXBzX3NoYV9zZWxmdGVzdC5jCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vaG1hYy9obWFjLmMK LS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDE1LTEyLTAzIDE1 OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9obWFjL2ht YWMuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2OTU2MjY5MiArMDEwMAotQEAgLTg5LDEyICs4OSw2 IEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KLSAgICAgICAgICAg ICBFVlBlcnIoRVZQX0ZfSE1BQ19JTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0g ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICB9Ci0tICAgICAgICAvKgotLSAgICAgICAg ICogT3RoZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5p dCwgdmlhCi0tICAgICAgICAgKiBGSVBTX2htYWNfaW5pdF9leCgpLgotLSAgICAgICAgICovCi0t ICAgICAgICBpZiAoIWltcGwgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLSAgICAgICAgICAgIHJl dHVybiBGSVBTX2htYWNfaW5pdF9leChjdHgsIGtleSwgbGVuLCBtZCwgTlVMTCk7Ci0gICAgIH0K LSAjZW5kaWYKLSAgICAgLyogSWYgd2UgYXJlIGNoYW5naW5nIE1EIHRoZW4gd2UgbXVzdCBoYXZl IGEga2V5ICovCi1AQCAtMTExLDYgKzEwNSwxMyBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RY ICpjdHgsIGNvbnN0IHZvCi0gICAgIH0KLSAKLSAgICAgaWYgKGtleSAhPSBOVUxMKSB7Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyAgICAgICAgaWYgKEZJUFNfbW9kZSgpICYmICEobWQtPmZsYWdz ICYgRVZQX01EX0ZMQUdfRklQUykKLSsgICAgICAgICAgICAmJiAoIShjdHgtPm1kX2N0eC5mbGFn cyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKLSsgICAgICAgICAgICAgICAgfHwg IShjdHgtPmlfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAg ICAgICAgICAgICAgICB8fCAhKGN0eC0+b19jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpKSkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsjZW5kaWYKLSAgICAgICAg IHJlc2V0ID0gMTsKLSAgICAgICAgIGogPSBFVlBfTURfYmxvY2tfc2l6ZShtZCk7Ci0gICAgICAg ICBPUEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7Ci1AQCAtMTY0LDEw ICsxNjUsNiBAQCBpbnQgSE1BQ19Jbml0KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQKLSAKLSBp bnQgSE1BQ19VcGRhdGUoSE1BQ19DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwg c2l6ZV90IGxlbikKLSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2Rl KCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQotLSAgICAgICAgcmV0dXJuIEZJUFNfaG1hY191cGRh dGUoY3R4LCBkYXRhLCBsZW4pOwotLSNlbmRpZgotICAgICBpZiAoIWN0eC0+bWQpCi0gICAgICAg ICByZXR1cm4gMDsKLSAKLUBAIC0xNzgsMTAgKzE3NSw2IEBAIGludCBITUFDX0ZpbmFsKEhNQUNf Q1RYICpjdHgsIHVuc2lnbmVkIGMKLSB7Ci0gICAgIHVuc2lnbmVkIGludCBpOwotICAgICB1bnNp Z25lZCBjaGFyIGJ1ZltFVlBfTUFYX01EX1NJWkVdOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0g ICAgaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKLS0gICAgICAgIHJldHVy biBGSVBTX2htYWNfZmluYWwoY3R4LCBtZCwgbGVuKTsKLS0jZW5kaWYKLSAKLSAgICAgaWYgKCFj dHgtPm1kKQotICAgICAgICAgZ290byBlcnI7Ci1AQCAtMjI1LDEyICsyMTgsNiBAQCBpbnQgSE1B Q19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1BQ19DCi0gCi0gdm9pZCBITUFDX0NUWF9jbGVh bnVwKEhNQUNfQ1RYICpjdHgpCi0gewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJ UFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkgewotLSAgICAgICAgRklQU19obWFjX2N0 eF9jbGVhbnVwKGN0eCk7Ci0tICAgICAgICByZXR1cm47Ci0tICAgIH0KLS0jZW5kaWYKLSAgICAg RVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPmlfY3R4KTsKLSAgICAgRVZQX01EX0NUWF9jbGVhbnVw KCZjdHgtPm9fY3R4KTsKLSAgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgtPm1kX2N0eCk7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9tZGMyL21kYzJkZ3N0LmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMJMjAxNS0xMi0wNCAx Mzo1NTo1MS45Njk1NjI2OTIgKzAxMDAKLUBAIC03Niw3ICs3Niw3IEBACi0gICAgICAgICAgICAg ICAgICAgICAgICAgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjI0TCkmMHhmZikpCi0g Ci0gc3RhdGljIHZvaWQgbWRjMl9ib2R5KE1EQzJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFy ICppbiwgc2l6ZV90IGxlbik7Ci0tZmlwc19tZF9pbml0KE1EQzIpCi0rbm9uZmlwc19tZF9pbml0 KE1EQzIpCi0gewotICAgICBjLT5udW0gPSAwOwotICAgICBjLT5wYWRfdHlwZSA9IDE7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWQy L21kMl9kZ3N0LmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwkyMDE1LTEyLTA0IDEzOjU1OjUx Ljk2OTU2MjY5MiArMDEwMAotQEAgLTYyLDYgKzYyLDExIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wv bWQyLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSAjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAKLSBjb25zdCBj aGFyIE1EMl92ZXJzaW9uW10gPSAiTUQyIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAt MTE5LDcgKzEyNCw3IEBAIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpCi0gICAgICAgICBy ZXR1cm4gKCJtZDIoaW50KSIpOwotIH0KLSAKLS1maXBzX21kX2luaXQoTUQyKQotK25vbmZpcHNf bWRfaW5pdChNRDIpCi0gewotICAgICBjLT5udW0gPSAwOwotICAgICBtZW1zZXQoYy0+c3RhdGUs IDAsIHNpemVvZiBjLT5zdGF0ZSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWQ0 L21kNF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMKLS0t LSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcwkyMDE1LTEyLTAzIDE1 OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDQvbWQ0 X2Rnc3QuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2OTU2MjY5MiArMDEwMAotQEAgLTcyLDcgKzcy LDcgQEAgY29uc3QgY2hhciBNRDRfdmVyc2lvbltdID0gIk1ENCIgT1BFTlNTTAotICNkZWZpbmUg SU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFU QV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0tZmlwc19tZF9pbml0KE1ENCkKLStu b25maXBzX21kX2luaXQoTUQ0KQotIHsKLSAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwot ICAgICBjLT5BID0gSU5JVF9EQVRBX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v bWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMK LS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcwkyMDE1LTEyLTAz IDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDUv bWQ1X2Rnc3QuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2OTU2MjY5MiArMDEwMAotQEAgLTcyLDcg KzcyLDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdID0gIk1ENSIgT1BFTlNTTAotICNkZWZp bmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRf REFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0tZmlwc19tZF9pbml0KE1ENSkK LStub25maXBzX21kX2luaXQoTUQ1KQotIHsKLSAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykp OwotICAgICBjLT5BID0gSU5JVF9EQVRBX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vb19maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vb19maXBzLmMKLS0tLSBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vb19maXBzLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9vX2ZpcHMuYwkyMDE1LTEyLTA0 IDEzOjU1OjUxLjk3MDU2MjcxNSArMDEwMAotQEAgLTgwLDYgKzgwLDggQEAgaW50IEZJUFNfbW9k ZV9zZXQoaW50IHIpCi0gIyBpZm5kZWYgRklQU19BVVRIX1VTRVJfUEFTUwotICMgIGRlZmluZSBG SVBTX0FVVEhfVVNFUl9QQVNTICAgICAiRGVmYXVsdCBGSVBTIENyeXB0byBVc2VyIFBhc3N3b3Jk IgotICMgZW5kaWYKLSsgICAgaWYgKHIgJiYgRklQU19tb2R1bGVfbW9kZSgpKSAvKiBjYW4gYmUg aW1wbGljaXRseSBpbml0aWFsaXplZCBieSBPUEVOU1NMX2luaXQoKSAqLwotKyAgICAgICAgcmV0 dXJuIDE7Ci0gICAgIGlmICghRklQU19tb2R1bGVfbW9kZV9zZXQociwgRklQU19BVVRIX1VTRVJf UEFTUykpCi0gICAgICAgICByZXR1cm4gMDsKLSAgICAgaWYgKHIpCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4yZS9jcnlwdG8vb19pbml0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vb19pbml0 LmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vb19pbml0LmMuZmlwcwkyMDE1LTEyLTAzIDE1 OjA0OjIzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9vX2luaXQu YwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MDU2MjcxNSArMDEwMAotQEAgLTU2LDggKzU2LDM3IEBA Ci0gI2luY2x1ZGUgPGVfb3MuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaWZkZWYg T1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSsjIGluY2x1ZGUgPHN5cy9z dGF0Lmg+Ci0rIyBpbmNsdWRlIDxmY250bC5oPgotKyMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0rIyBp bmNsdWRlIDxlcnJuby5oPgotKyMgaW5jbHVkZSA8c3RkbGliLmg+Ci0gIyBpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSAjIGluY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKwotKyMgZGVmaW5lIEZJ UFNfTU9ERV9TV0lUQ0hfRklMRSAiL3Byb2Mvc3lzL2NyeXB0by9maXBzX2VuYWJsZWQiCi0rCi0r c3RhdGljIHZvaWQgaW5pdF9maXBzX21vZGUodm9pZCkKLSt7Ci0rICAgIGNoYXIgYnVmWzJdID0g IjAiOwotKyAgICBpbnQgZmQ7Ci0rCi0rICAgIGlmIChnZXRlbnYoIk9QRU5TU0xfRk9SQ0VfRklQ U19NT0RFIikgIT0gTlVMTCkgewotKyAgICAgICAgYnVmWzBdID0gJzEnOwotKyAgICB9IGVsc2Ug aWYgKChmZCA9IG9wZW4oRklQU19NT0RFX1NXSVRDSF9GSUxFLCBPX1JET05MWSkpID49IDApIHsK LSsgICAgICAgIHdoaWxlIChyZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA8IDAgJiYgZXJybm8g PT0gRUlOVFIpIDsKLSsgICAgICAgIGNsb3NlKGZkKTsKLSsgICAgfQotKyAgICAvKiBGYWlsdXJl IHJlYWRpbmcgdGhlIGZpcHMgbW9kZSBzd2l0Y2ggZmlsZSBtZWFucyBqdXN0IG5vdAotKyAgICAg KiBzd2l0Y2hpbmcgaW50byBGSVBTIG1vZGUuIFdlIHdvdWxkIGJyZWFrIHRvbyBtYW55IHRoaW5n cwotKyAgICAgKiBvdGhlcndpc2UuLgotKyAgICAgKi8KLSsKLSsgICAgaWYgKGJ1ZlswXSA9PSAn MScpIHsKLSsgICAgICAgIEZJUFNfbW9kZV9zZXQoMSk7Ci0rICAgIH0KLSt9Ci0gI2VuZGlmCi0g Ci0gLyoKLUBAIC02NSwxOSArOTQsMjYgQEAKLSAgKiBzZXRzIEZJUFMgY2FsbGJhY2tzCi0gICov Ci0gCi0tdm9pZCBPUEVOU1NMX2luaXQodm9pZCkKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5 KHZvaWQpCi0gewotICAgICBzdGF0aWMgaW50IGRvbmUgPSAwOwotICAgICBpZiAoZG9uZSkKLSAg ICAgICAgIHJldHVybjsKLSAgICAgZG9uZSA9IDE7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLSAg ICBGSVBTX3NldF9sb2NraW5nX2NhbGxiYWNrcyhDUllQVE9fbG9jaywgQ1JZUFRPX2FkZF9sb2Nr KTsKLS0gICAgRklQU19zZXRfZXJyb3JfY2FsbGJhY2tzKEVSUl9wdXRfZXJyb3IsIEVSUl9hZGRf ZXJyb3JfdmRhdGEpOwotLSAgICBGSVBTX3NldF9tYWxsb2NfY2FsbGJhY2tzKENSWVBUT19tYWxs b2MsIENSWVBUT19mcmVlKTsKLSAgICAgUkFORF9pbml0X2ZpcHMoKTsKLSsgICAgaW5pdF9maXBz X21vZGUoKTsKLSsgICAgaWYgKCFGSVBTX21vZGUoKSkgewotKyAgICAgICAgLyogQ2xlYW4gdXAg cHJlbWF0dXJlbHkgc2V0IGRlZmF1bHQgcmFuZCBtZXRob2QgKi8KLSsgICAgICAgIFJBTkRfc2V0 X3JhbmRfbWV0aG9kKE5VTEwpOwotKyAgICB9Ci0gI2VuZGlmCi0gI2lmIDAKLSAgICAgZnByaW50 ZihzdGRlcnIsICJDYWxsZWQgT1BFTlNTTF9pbml0XG4iKTsKLSAjZW5kaWYKLSB9Ci0rCi0rdm9p ZCBPUEVOU1NMX2luaXQodm9pZCkKLSt7Ci0rICAgIE9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0r fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcyBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgotLS0tIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgkyMDE1 LTEyLTA0IDEzOjU1OjUxLjk3MDU2MjcxNSArMDEwMAotQEAgLTEsNSArMSwyMCBAQAotIC8qIGNy eXB0by9vcGVuc3NsY29uZi5oLmluICovCi0gCi0rI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURF UEVORAotKwotKy8qIEluY2x1ZGUgYW55IHN5bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhw bGljaXRseSBzZXQgdG8gZW5hYmxlIGEgZmVhdHVyZQotKyAqIHRoYXQgc2hvdWxkIGJlIHZpc2li bGUgdG8gbWFrZWRlcGVuZC4KLSsgKgotKyAqIFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vzbid0IGFj dHVhbGx5IGxvb2sgYXQgdGhpcywgd2UgdXNlIGFjdHVhbCBidWlsZCBzZXR0aW5ncwotKyAqIGlu c3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3 aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQotKyAqLwotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBT Ci0rI2RlZmluZSBPUEVOU1NMX0ZJUFMKLSsjZW5kaWYKLSsKLSsjZW5kaWYKLSsKLSAvKiBHZW5l cmF0ZSA4MDM4NiBjb2RlPyAqLwotICN1bmRlZiBJMzg2X09OTFkKLSAKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9yYW5kL21kX3JhbmQuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yYW5kL21kX3JhbmQu Yy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMmUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcwNTYyNzE1 ICswMTAwCi1AQCAtMzkxLDcgKzM5MSwxMCBAQCBpbnQgc3NsZWF5X3JhbmRfYnl0ZXModW5zaWdu ZWQgY2hhciAqYnVmCi0gICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EMik7Ci0g ICAgIGNyeXB0b19sb2NrX3JhbmQgPSAxOwotIAotLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0r ICAgIC8qIGFsd2F5cyBwb2xsIGZvciBleHRlcm5hbCBlbnRyb3B5IGluIEZJUFMgbW9kZSwgZHJi ZyBwcm92aWRlcyB0aGUgCi0rICAgICAqIGV4cGFuc2lvbgotKyAgICAgKi8KLSsgICAgaWYgKCFp bml0aWFsaXplZCB8fCBGSVBTX21vZHVsZV9tb2RlKCkpIHsKLSAgICAgICAgIFJBTkRfcG9sbCgp OwotICAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOwotICAgICB9Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcmFuZC9y YW5kLmgKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcwkyMDE1LTEy LTA0IDEzOjU1OjUxLjcyOTU1NzA5NSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9y YW5kL3JhbmQuaAkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MDU2MjcxNSArMDEwMAotQEAgLTEzMywx NiArMTMzLDM0IEBAIHZvaWQgRVJSX2xvYWRfUkFORF9zdHJpbmdzKHZvaWQpOwotIC8qIEVycm9y IGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMuICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMu ICovCi0rIyBkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRCAgICAgICAgICAg ICAgICAgIDEwOAotKyMgZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMDMKLSsjIGRlZmluZSBSQU5EX0ZfRklQU19SQU5EX0JZVEVTICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTAyCi0rIyBkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRf RFQgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNgotKyMgZGVmaW5lIFJBTkRfRl9GSVBTX1g5 MzFfU0VUX0RUICAgICAgICAgICAgICAgICAgICAgICAgICAxMDYKLSsjIGRlZmluZSBSQU5EX0Zf RklQU19TRVRfRFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA0Ci0rIyBkZWZpbmUg UkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCAgICAgICAgICAgICAgICAgICAgICAgIDEwNwotKyMg ZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAx MDUKLSAjIGRlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QgICAgICAgICAgICAgICAg ICAgICAgMTAxCi0tIyBkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBTICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEwMgotKyMgZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxMDkKLSAjIGRlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllU RVMgICAgICAgICAgICAgICAgICAgICAgICAgMTAwCi0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwot LSMgZGVmaW5lIFJBTkRfUl9EVUFMX0VDX0RSQkdfRElTQUJMRUQgICAgICAgICAgICAgICAgICAg ICAxMDQKLS0jIGRlZmluZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcgICAgICAgICAg ICAgICAgICAgMTAyCi0tIyBkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRyAg ICAgICAgICAgICAgICAgIDEwMwotLSMgZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRI T0RfU0VUICAgICAgICAgICAgICAgICAxMDEKLSsjIGRlZmluZSBSQU5EX1JfRFVBTF9FQ19EUkJH X0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAgMTE0Ci0rIyBkZWZpbmUgUkFORF9SX0VSUk9S X0lOSVRJQUxJU0lOR19EUkJHICAgICAgICAgICAgICAgICAgIDExMgotKyMgZGVmaW5lIFJBTkRf Ul9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcgICAgICAgICAgICAgICAgICAxMTMKLSsjIGRlZmlu ZSBSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA1Ci0r IyBkZWZpbmUgUkFORF9SX05PVF9JTl9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAg IDEwNgotKyMgZGVmaW5lIFJBTkRfUl9OT19GSVBTX1JBTkRPTV9NRVRIT0RfU0VUICAgICAgICAg ICAgICAgICAxMTEKLSsjIGRlZmluZSBSQU5EX1JfTk9fS0VZX1NFVCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTA3Ci0rIyBkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09f TVVDSCAgICAgICAgICAgICAgICAgIDEwMQotKyMgZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDgKLSsjIGRlZmluZSBSQU5EX1JfUFJOR19L RVlFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA5Ci0rIyBkZWZpbmUgUkFORF9S X1BSTkdfTk9UX1JFS0VZRUQgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMgotKyMgZGVmaW5l IFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRCAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKLSAj IGRlZmluZSBSQU5EX1JfUFJOR19OT1RfU0VFREVEICAgICAgICAgICAgICAgICAgICAgICAgICAg MTAwCi0rIyBkZWZpbmUgUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkgICAgICAg ICAgICAgIDExMAotKyMgZGVmaW5lIFJBTkRfUl9QUk5HX1NUVUNLICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMDQKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3Jp cGVtZC9ybWRfZGdzdC5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxNS0xMi0wNCAx Mzo1NTo1MS45NzA1NjI3MTUgKzAxMDAKLUBAIC03MCw3ICs3MCw3IEBAIHZvaWQgcmlwZW1kMTYw X2Jsb2NrX3g4NihSSVBFTUQxNjBfQ1RYICoKLSB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQx NjBfQ1RYICpjLCB1bnNpZ25lZCBsb25nICpwLCBzaXplX3QgbnVtKTsKLSAjZW5kaWYKLSAKLS1m aXBzX21kX2luaXQoUklQRU1EMTYwKQotK25vbmZpcHNfbWRfaW5pdChSSVBFTUQxNjApCi0gewot ICAgICBtZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Ci0gICAgIGMtPkEgPSBSSVBFTUQxNjBfQTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX2NycHQuYy5maXBzIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX2NycHQuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9yc2EvcnNhX2NycHQuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCTIwMTUtMTItMDQgMTM6 NTU6NTEuOTcwNTYyNzE1ICswMTAwCi1AQCAtODksOSArODksOSBAQCBpbnQgUlNBX3ByaXZhdGVf ZW5jcnlwdChpbnQgZmxlbiwgY29uc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIHsKLSAjaWZkZWYgT1BFTlNTTF9G SVBTCi0tICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxB R19GSVBTX01FVEhPRCkKLS0gICAgICAgICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9G SVBTX0FMTE9XKSkgewotLSAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQs IFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShy c2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7Ci0rICAgICAgICBSU0FlcnIo UlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwKLSsgICAgICAgICAgICAgICBSU0FfUl9PUEVSQVRJ T05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSAgICAgICAgIHJldHVybiAtMTsKLSAgICAg fQotICNlbmRpZgotQEAgLTExNSw5ICsxMTUsOSBAQCBpbnQgUlNBX3B1YmxpY19kZWNyeXB0KGlu dCBmbGVuLCBjb25zdCB1Ci0gICAgICAgICAgICAgICAgICAgICAgICBSU0EgKnJzYSwgaW50IHBh ZGRpbmcpCi0gewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9kZSgpICYm ICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQotLSAgICAgICAgJiYg IShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7Ci0tICAgICAgICBSU0Fl cnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsK LSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBT X0FMTE9XKSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwKLSsg ICAgICAgICAgICAgICBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsK LSAgICAgICAgIHJldHVybiAtMTsKLSAgICAgfQotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmUvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNh L3JzYV9lYXkuYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJ MjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vcnNhL3JzYV9lYXkuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MTU2MjczOCArMDEwMAot QEAgLTExNCw2ICsxMTQsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRl IDxvcGVuc3NsL3JzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSAjaWZuZGVmIFJTQV9OVUxMCi0gCi1AQCAtMTQwLDcgKzE0 NCw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9lYXlfbWV0aCA9IHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmIGUgPT0gMyAqLwotICAgICBSU0FfZWF5X2lu aXQsCi0gICAgIFJTQV9lYXlfZmluaXNoLAotLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogZmxhZ3MgKi8KLSsgICAgUlNBX0ZMQUdfRklQU19NRVRIT0QsICAgICAgIC8qIGZsYWdz ICovCi0gICAgIE5VTEwsCi0gICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByc2Ff c2lnbiAqLwotICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcnNhX3ZlcmlmeSAq LwotQEAgLTE2MCw2ICsxNjQsMjIgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0 KGludCBmbAotICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwotICAgICBCTl9DVFggKmN0 eCA9IE5VTEw7Ci0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgp KSB7Ci0rICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgICAg IEZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsCi0rICAgICAgICAgICAgICAg ICAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgICAgIGdvdG8gZXJy OwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05P Tl9GSVBTX0FMTE9XKQotKyAgICAgICAgICAgICYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BF TlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgewotKyAgICAgICAgICAgIFJTQWVycihS U0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwot KyAgICAgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0KLSsgICAgfQotKyMgZW5kaWYKLSsK LSAgICAgaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19C SVRTKSB7Ci0gICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNB X1JfTU9EVUxVU19UT09fTEFSR0UpOwotICAgICAgICAgcmV0dXJuIC0xOwotQEAgLTM2MSw2ICsz ODEsMjIgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgotICAgICBC SUdOVU0gKnVuYmxpbmQgPSBOVUxMOwotICAgICBCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxM OwotIAotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSkgewotKyAg ICAgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgICAgICBGSVBTZXJy KEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCwKLSsgICAgICAgICAgICAgICAgICAgIEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAg ICAgICAgfQotKwotKyAgICAgICAgaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBT X0FMTE9XKQotKyAgICAgICAgICAgICYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9S U0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgewotKyAgICAgICAgICAgIFJTQWVycihSU0FfRl9S U0FfRUFZX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAg ICAgICAgICByZXR1cm4gLTE7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsjIGVuZGlmCi0rCi0gICAg IGlmICgoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKQotICAgICAgICAgZ290byBlcnI7Ci0g ICAgIEJOX0NUWF9zdGFydChjdHgpOwotQEAgLTQ5Nyw2ICs1MzMsMjIgQEAgc3RhdGljIGludCBS U0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgotICAgICBCSUdOVU0gKnVuYmxpbmQgPSBOVUxM OwotICAgICBCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOwotIAotKyMgaWZkZWYgT1BFTlNT TF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSkgewotKyAgICAgICAgaWYgKEZJUFNfc2VsZnRl c3RfZmFpbGVkKCkpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZB VEVfREVDUllQVCwKLSsgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRCk7Ci0rICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQotKwotKyAgICAgICAg aWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAgICAgICAgICAg ICYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkgewotKyAgICAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQ VCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAgICAgICAgICByZXR1cm4gLTE7Ci0r ICAgICAgICB9Ci0rICAgIH0KLSsjIGVuZGlmCi0rCi0gICAgIGlmICgoY3R4ID0gQk5fQ1RYX25l dygpKSA9PSBOVUxMKQotICAgICAgICAgZ290byBlcnI7Ci0gICAgIEJOX0NUWF9zdGFydChjdHgp OwotQEAgLTYyMyw2ICs2NzUsMjIgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0 KGludCBmbAotICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwotICAgICBCTl9DVFggKmN0 eCA9IE5VTEw7Ci0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgp KSB7Ci0rICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgICAg IEZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsCi0rICAgICAgICAgICAgICAg ICAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgICAgIGdvdG8gZXJy OwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05P Tl9GSVBTX0FMTE9XKQotKyAgICAgICAgICAgICYmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BF TlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgewotKyAgICAgICAgICAgIFJTQWVycihS U0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwot KyAgICAgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0KLSsgICAgfQotKyMgZW5kaWYKLSsK LSAgICAgaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19C SVRTKSB7Ci0gICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwgUlNB X1JfTU9EVUxVU19UT09fTEFSR0UpOwotICAgICAgICAgcmV0dXJuIC0xOwotQEAgLTg4Niw2ICs5 NTQsOSBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCi0gCi0gc3Rh dGljIGludCBSU0FfZWF5X2luaXQoUlNBICpyc2EpCi0gewotKyMgaWZkZWYgT1BFTlNTTF9GSVBT Ci0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjIGVuZGlmCi0gICAgIHJzYS0+ZmxhZ3Mg fD0gUlNBX0ZMQUdfQ0FDSEVfUFVCTElDIHwgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURTsKLSAgICAg cmV0dXJuICgxKTsKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9l cnIuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX2Vyci5jCi0tLS0gb3BlbnNz bC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX2Vyci5jCTIw MTUtMTItMDQgMTM6NTU6NTEuOTcxNTYyNzM4ICswMTAwCi1AQCAtMTM2LDYgKzEzNiw4IEBAIHN0 YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5jdHNbXQotICAgICB7RVJSX0ZVTkMoUlNB X0ZfUlNBX1BVQkxJQ19FTkNSWVBUKSwgIlJTQV9wdWJsaWNfZW5jcnlwdCJ9LAotICAgICB7RVJS X0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLCAiUlNBX1BVQl9ERUNPREUifSwKLSAgICAge0VS Ul9GVU5DKFJTQV9GX1JTQV9TRVRVUF9CTElORElORyksICJSU0Ffc2V0dXBfYmxpbmRpbmcifSwK LSsgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLCAiUlNBX3NldF9k ZWZhdWx0X21ldGhvZCJ9LAotKyAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9NRVRIT0QpLCAi UlNBX3NldF9tZXRob2QifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwgIlJTQV9z aWduIn0sCi0gICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyks Ci0gICAgICAiUlNBX3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkcifSwKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3Jz YS9yc2FfZ2VuLmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBz CTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NzE1NjI3MzggKzAxMDAK LUBAIC02OSw4ICs2OSw4MCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNpZmRlZiBP UEVOU1NMX0ZJUFMKLSAjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotLWV4dGVybiBpbnQgRklQ U19yc2FfeDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUs Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTl9HRU5DQiAqY2Ip OwotKyMgaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjIGluY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rCi0rc3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKLSsKLSt2b2lkIEZJ UFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCi0rewotKyAgICBmaXBzX3JzYV9wYWlyd2lzZV9m YWlsID0gMTsKLSt9Ci0rCi0raW50IGZpcHNfY2hlY2tfcnNhKFJTQSAqcnNhKQotK3sKLSsgICAg Y29uc3QgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKLSsgICAgaW50 IGxlbiwgcmV0ID0gMDsKLSsgICAgRVZQX1BLRVkgKnBrOwotKwotKyAgICBpZiAoKHBrID0gRVZQ X1BLRVlfbmV3KCkpID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgRVZQX1BL RVlfc2V0MV9SU0EocGssIHJzYSk7Ci0rCi0rICAgIC8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lz dGVuY3kgc2lnbmF0dXJlIHRlc3QgKi8KLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIHRicywgLTEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEws IDAsIEVWUF9zaGExKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9N RF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCi0rICAgICAgICB8fCAhZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCB0YnMsIC0xLCBOVUxMLCAwLCBFVlBfc2hhMSgpLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsIE5VTEwp Ci0rICAgICAgICB8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLCBOVUxM LCAwLCBFVlBfc2hhMSgpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAg LyogTm93IHBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3Qg Ki8KLSsgICAgY3RidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKLSsgICAgaWYg KCFjdGJ1ZikKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBsZW4gPQotKyAgICAgICAgUlNB X3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNhLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJTQV9QS0NTMV9QQURESU5HKTsKLSsgICAgaWYgKGxlbiA8 PSAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIC8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24n dCBtYXRjaCBwbGFpbnRleHQgKi8KLSsgICAgaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkp ICYmICFtZW1jbXAodGJzLCBjdGJ1ZiwgbGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBw dGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOwotKwotKyAgICBpZiAoIXB0YnVm KQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGxlbiA9IFJTQV9wcml2YXRlX2RlY3J5cHQobGVu LCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKyAgICBpZiAobGVuICE9 IChzaXplb2YodGJzKSAtIDEpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChtZW1jbXAo cHRidWYsIHRicywgbGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICByZXQgPSAxOwot KwotKyAgICBpZiAoIXB0YnVmKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rIGVycjoKLSsgICAg aWYgKHJldCA9PSAwKSB7Ci0rICAgICAgICBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rICAg ICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSwgRklQU19SX1BBSVJXSVNFX1RFU1Rf RkFJTEVEKTsKLSsgICAgfQotKwotKyAgICBpZiAoY3RidWYpCi0rICAgICAgICBPUEVOU1NMX2Zy ZWUoY3RidWYpOwotKyAgICBpZiAocHRidWYpCi0rICAgICAgICBPUEVOU1NMX2ZyZWUocHRidWYp OwotKyAgICBpZiAocGspCi0rICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKLSsKLSsgICAgcmV0 dXJuIHJldDsKLSt9Ci0gI2VuZGlmCi0gCi0gc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4o UlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsCi1AQCAtODYsNyArMTU4LDcgQEAg c3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCi0gaW50IFJTQV9nZW5lcmF0 ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpj YikKLSB7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIShy c2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCi0rICAgIGlmIChGSVBTX21v ZHVsZV9tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0Qp Ci0gICAgICAgICAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsK LSAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfR0VORVJBVEVfS0VZX0VYLCBSU0FfUl9OT05fRklQ U19SU0FfTUVUSE9EKTsKLSAgICAgICAgIHJldHVybiAwOwotQEAgLTk0LDEwICsxNjYsNiBAQCBp bnQgUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpCi0gI2VuZGlmCi0gICAgIGlm IChyc2EtPm1ldGgtPnJzYV9rZXlnZW4pCi0gICAgICAgICByZXR1cm4gcnNhLT5tZXRoLT5yc2Ff a2V5Z2VuKHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0g ICAgaWYgKEZJUFNfbW9kZSgpKQotLSAgICAgICAgcmV0dXJuIEZJUFNfcnNhX3g5MzFfZ2VuZXJh dGVfa2V5X2V4KHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOwotLSNlbmRpZgotICAgICByZXR1cm4g cnNhX2J1aWx0aW5fa2V5Z2VuKHJzYSwgYml0cywgZV92YWx1ZSwgY2IpOwotIH0KLSAKLUBAIC0x MTAsNiArMTc4LDIwIEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAot ICAgICBpbnQgYml0c3AsIGJpdHNxLCBvayA9IC0xLCBuID0gMDsKLSAgICAgQk5fQ1RYICpjdHgg PSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kdWxlX21v ZGUoKSkgewotKyAgICAgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAg ICAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sIEZJUFNfUl9GSVBTX1NFTEZU RVNUX0ZBSUxFRCk7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rCi0rICAg ICAgICBpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykgewotKyAg ICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiwgRklQU19SX0tFWV9U T09fU0hPUlQpOwotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgfQotKyAgICB9Ci0r I2VuZGlmCi0rCi0gICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxM KQotICAgICAgICAgZ290byBlcnI7Ci1AQCAtMjM1LDYgKzMxNywxNiBAQCBzdGF0aWMgaW50IHJz YV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKLSAgICAgaWYgKCFCTl9tb2RfaW52ZXJzZShyc2Et PmlxbXAsIHJzYS0+cSwgcCwgY3R4KSkKLSAgICAgICAgIGdvdG8gZXJyOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkgewotKyAgICAgICAgaWYg KGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwpCi0rICAgICAgICAgICAgQk5fYWRkX3dvcmQocnNhLT5u LCAxKTsKLSsKLSsgICAgICAgIGlmICghZmlwc19jaGVja19yc2EocnNhKSkKLSsgICAgICAgICAg ICBnb3RvIGVycjsKLSsgICAgfQotKyNlbmRpZgotKwotICAgICBvayA9IDE7Ci0gIGVycjoKLSAg ICAgaWYgKG9rID09IC0xKSB7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3Jz YS5oLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2EuaAotLS0tIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9yc2EvcnNhLmguZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjg1OTU2MDEyNiAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhLmgJMjAxNS0xMi0wNCAxMzo1 NTo1MS45NzE1NjI3MzggKzAxMDAKLUBAIC0xNjgsNiArMTY4LDggQEAgc3RydWN0IHJzYV9zdCB7 Ci0gIyAgZGVmaW5lIE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMgICAxNjM4NAotICMgZW5k aWYKLSAKLSsjIGRlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAot KwotICMgaWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwotICMgIGRlZmluZSBP UEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMgMzA3MgotICMgZW5kaWYKLUBAIC0zMjksNiAr MzMxLDEzIEBAIFJTQSAqUlNBX2dlbmVyYXRlX2tleShpbnQgYml0cywgdW5zaWduZWQKLSAKLSAv KiBOZXcgdmVyc2lvbiAqLwotIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQg Yml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgo UlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsCi0rICAgICAgICAg ICAgICAgICAgICAgICBCSUdOVU0gKnEyLCBjb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVN ICpYcDIsCi0rICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCSUdOVU0gKlhwLCBjb25zdCBC SUdOVU0gKlhxMSwKLSsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJJR05VTSAqWHEyLCBj b25zdCBCSUdOVU0gKlhxLAotKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQklHTlVNICpl LCBCTl9HRU5DQiAqY2IpOwotK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2Es IGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCTl9HRU5DQiAqY2IpOwotIAotIGludCBSU0FfY2hlY2tfa2V5KGNvbnN0IFJTQSAqKTsKLSAg ICAgICAgIC8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KLUBAIC01MzgsNyArNTQ3LDcg QEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjIGRlZmluZSBSU0FfRl9SU0Ff QUxHT1JfVE9fTUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU3Ci0gIyBkZWZpbmUgUlNB X0ZfUlNBX0JVSUxUSU5fS0VZR0VOICAgICAgICAgICAgICAgICAgICAgICAgIDEyOQotICMgZGVm aW5lIFJTQV9GX1JTQV9DSEVDS19LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjMK LS0jIGRlZmluZSBSU0FfRl9SU0FfQ01TX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTU4Ci0rIyBkZWZpbmUgUlNBX0ZfUlNBX0NNU19ERUNSWVBUICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDI1OAotICMgZGVmaW5lIFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUICAg ICAgICAgICAgICAgICAgICAxMDEKLSAjIGRlZmluZSBSU0FfRl9SU0FfRUFZX1BSSVZBVEVfRU5D UllQVCAgICAgICAgICAgICAgICAgICAgMTAyCi0gIyBkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QVUJM SUNfREVDUllQVCAgICAgICAgICAgICAgICAgICAgIDEwMwotQEAgLTU1OSw3ICs1NjgsNyBAQCB2 b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICMgZGVmaW5lIFJTQV9GX1JTQV9QQURE SU5HX0FERF9QS0NTMV9PQUVQICAgICAgICAgICAgICAgICAxMjEKLSAjIGRlZmluZSBSU0FfRl9S U0FfUEFERElOR19BRERfUEtDUzFfT0FFUF9NR0YxICAgICAgICAgICAgMTYwCi0gIyBkZWZpbmUg UlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTUyAgICAgICAgICAgICAgICAgIDEyNQotLSMg ZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1NfTUdGMSAgICAgICAgICAgICAx NDgKLSsjIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTX01HRjEgICAgICAg ICAgICAgMTU4Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMSAg ICAgICAgICAgICAgIDEwOAotICMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9U WVBFXzIgICAgICAgICAgICAgICAxMDkKLSAjIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERf U1NMVjIzICAgICAgICAgICAgICAgICAgICAgMTEwCi1AQCAtNTczLDIxICs1ODIsMjMgQEAgdm9p ZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjIGRlZmluZSBSU0FfRl9SU0FfUEFERElO R19DSEVDS19YOTMxICAgICAgICAgICAgICAgICAgICAgMTI4Ci0gIyBkZWZpbmUgUlNBX0ZfUlNB X1BSSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNQotICMgZGVmaW5lIFJT QV9GX1JTQV9QUklOVF9GUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTYKLS0jIGRl ZmluZSBSU0FfRl9SU0FfUFJJVkFURV9ERUNSWVBUICAgICAgICAgICAgICAgICAgICAgICAgMTUw Ci0tIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCAgICAgICAgICAgICAgICAgICAg ICAgIDE1MQotKyMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQgICAgICAgICAgICAg ICAgICAgICAgICAxNTcKLSsjIGRlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUICAgICAg ICAgICAgICAgICAgICAgICAgMTQ4Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEzNwotICMgZGVmaW5lIFJTQV9GX1JTQV9QUklWX0VO Q09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzgKLSAjIGRlZmluZSBSU0FfRl9SU0Ff UFNTX1RPX0NUWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYyCi0tIyBkZWZpbmUgUlNB X0ZfUlNBX1BVQkxJQ19ERUNSWVBUICAgICAgICAgICAgICAgICAgICAgICAgIDE1MgotKyMgZGVm aW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCAgICAgICAgICAgICAgICAgICAgICAgICAxNDkK LSAjIGRlZmluZSBSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgICAg ICAgMTUzCi0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEzOQotICMgZGVmaW5lIFJTQV9GX1JTQV9TRVRVUF9CTElORElORyAgICAgICAg ICAgICAgICAgICAgICAgICAxMzYKLSsjIGRlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVU SE9EICAgICAgICAgICAgICAgICAgICAgMTUwCi0rIyBkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRI T0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MQotICMgZGVmaW5lIFJTQV9GX1JTQV9T SUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTcKLSAjIGRlZmluZSBSU0Ff Rl9SU0FfU0lHTl9BU04xX09DVEVUX1NUUklORyAgICAgICAgICAgICAgICAgMTE4Ci0gIyBkZWZp bmUgUlNBX0ZfUlNBX1ZFUklGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOQot ICMgZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfQVNOMV9PQ1RFVF9TVFJJTkcgICAgICAgICAgICAg ICAxMjAKLSAjIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTUyAgICAgICAgICAgICAg ICAgICAgICAgMTI2Ci0tIyBkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMSAg ICAgICAgICAgICAgICAgIDE0OQotKyMgZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNT X01HRjEgICAgICAgICAgICAgICAgICAxNTIKLSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0gIyBk ZWZpbmUgUlNBX1JfQUxHT1JJVEhNX01JU01BVENIICAgICAgICAgICAgICAgICAgICAgICAgIDEw MAotQEAgLTYyMCwyMSArNjMxLDIyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7 Ci0gIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9PQUVQX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAg ICAgIDE2MgotICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFERElORyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMzgKLSAjIGRlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJTkdfTU9ERSAgICAg ICAgICAgICAgICAgICAgICAgMTQxCi0tIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1F VEVSUyAgICAgICAgICAgICAgICAgICAgIDE0OQotKyMgZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNT X1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAxNTcKLSAjIGRlZmluZSBSU0FfUl9JTlZB TElEX1BTU19TQUxUTEVOICAgICAgICAgICAgICAgICAgICAgICAgMTQ2Ci0tIyBkZWZpbmUgUlNB X1JfSU5WQUxJRF9TQUxUX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgIDE1MAotKyMgZGVm aW5lIFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAxNTgK LSAjIGRlZmluZSBSU0FfUl9JTlZBTElEX1RSQUlMRVIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTM5Ci0gIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9YOTMxX0RJR0VTVCAgICAgICAgICAgICAg ICAgICAgICAgIDE0MgotICMgZGVmaW5lIFJTQV9SX0lRTVBfTk9UX0lOVkVSU0VfT0ZfUSAgICAg ICAgICAgICAgICAgICAgICAxMjYKLSAjIGRlZmluZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwg ICAgICAgICAgICAgICAgICAgICAgICAgMTIwCi0gIyBkZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9J TlZBTElEICAgICAgICAgICAgICAgICAgICAgICAgIDEzNAotICMgZGVmaW5lIFJTQV9SX01PRFVM VVNfVE9PX0xBUkdFICAgICAgICAgICAgICAgICAgICAgICAgICAxMDUKLS0jIGRlZmluZSBSU0Ff Ul9OT05fRklQU19SU0FfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgMTU3Ci0rIyBkZWZp bmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgIDE0OQot KyMgZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxNDkKLSAjIGRlZmluZSBSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQgICAgICAgICAgICAgICAg ICAgICAgICAgMTQwCi0gIyBkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVfQkxPQ0tfTUlTU0lORyAg ICAgICAgICAgICAgICAgIDExMwotICMgZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9R ICAgICAgICAgICAgICAgICAgICAgICAxMjcKLSAjIGRlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5H X0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgMTIxCi0tIyBkZWZpbmUgUlNBX1JfT1BFUkFU SU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAgICAgICAgIDE1OAotKyMgZGVmaW5lIFJTQV9S X09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUgICAgICAgICAxNTAKLSAjIGRlZmlu ZSBSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFICAgMTQ4Ci0g IyBkZWZpbmUgUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAg IDExNAotICMgZGVmaW5lIFJTQV9SX1BLQ1NfREVDT0RJTkdfRVJST1IgICAgICAgICAgICAgICAg ICAgICAgICAxNTkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX2xpYi5j LmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfbGliLmMKLS0tLSBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfbGliLmMJMjAxNS0x Mi0wNCAxMzo1NTo1MS45NzE1NjI3MzggKzAxMDAKLUBAIC04NCwyMyArODQsMjIgQEAgUlNBICpS U0FfbmV3KHZvaWQpCi0gCi0gdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IFJTQV9N RVRIT0QgKm1ldGgpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9k ZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpIHsKLSsgICAgICAg IFJTQWVycihSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRI T0QpOwotKyAgICAgICAgcmV0dXJuOwotKyAgICB9Ci0rI2VuZGlmCi0gICAgIGRlZmF1bHRfUlNB X21ldGggPSBtZXRoOwotIH0KLSAKLSBjb25zdCBSU0FfTUVUSE9EICpSU0FfZ2V0X2RlZmF1bHRf bWV0aG9kKHZvaWQpCi0gewotICAgICBpZiAoZGVmYXVsdF9SU0FfbWV0aCA9PSBOVUxMKSB7Ci0t I2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICAgICAgaWYgKEZJUFNfbW9kZSgpKQotLSAgICAgICAg ICAgIHJldHVybiBGSVBTX3JzYV9wa2NzMV9zc2xlYXkoKTsKLS0gICAgICAgIGVsc2UKLS0gICAg ICAgICAgICByZXR1cm4gUlNBX1BLQ1MxX1NTTGVheSgpOwotLSNlbHNlCi0tIyBpZmRlZiBSU0Ff TlVMTAotKyNpZmRlZiBSU0FfTlVMTAotICAgICAgICAgZGVmYXVsdF9SU0FfbWV0aCA9IFJTQV9u dWxsX21ldGhvZCgpOwotLSMgZWxzZQotKyNlbHNlCi0gICAgICAgICBkZWZhdWx0X1JTQV9tZXRo ID0gUlNBX1BLQ1MxX1NTTGVheSgpOwotLSMgZW5kaWYKLSAjZW5kaWYKLSAgICAgfQotIAotQEAg LTExOSw2ICsxMTgsMTIgQEAgaW50IFJTQV9zZXRfbWV0aG9kKFJTQSAqcnNhLCBjb25zdCBSU0Ff TQotICAgICAgKiB0byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNvbWVzIGZyb20uCi0gICAg ICAqLwotICAgICBjb25zdCBSU0FfTUVUSE9EICptdG1wOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01F VEhPRCkpIHsKLSsgICAgICAgIFJTQWVycihSU0FfRl9SU0FfU0VUX01FVEhPRCwgUlNBX1JfTk9O X0ZJUFNfTUVUSE9EKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi0gICAg IG10bXAgPSByc2EtPm1ldGg7Ci0gICAgIGlmIChtdG1wLT5maW5pc2gpCi0gICAgICAgICBtdG1w LT5maW5pc2gocnNhKTsKLUBAIC0xNjUsNiArMTcwLDE3IEBAIFJTQSAqUlNBX25ld19tZXRob2Qo RU5HSU5FICplbmdpbmUpCi0gICAgICAgICB9Ci0gICAgIH0KLSAjZW5kaWYKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBS U0FfRkxBR19GSVBTX01FVEhPRCkpIHsKLSsgICAgICAgIFJTQWVycihSU0FfRl9SU0FfTkVXX01F VEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsjIGlmbmRlZiBPUEVOU1NMX05PX0VOR0lO RQotKyAgICAgICAgaWYgKHJldC0+ZW5naW5lKQotKyAgICAgICAgICAgIEVOR0lORV9maW5pc2go cmV0LT5lbmdpbmUpOwotKyMgZW5kaWYKLSsgICAgICAgIE9QRU5TU0xfZnJlZShyZXQpOwotKyAg ICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsjZW5kaWYKLSAKLSAgICAgcmV0LT5wYWQgPSAw OwotICAgICByZXQtPnZlcnNpb24gPSAwOwotQEAgLTE4Myw3ICsxOTksNyBAQCBSU0EgKlJTQV9u ZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQotICAgICByZXQtPmJsaW5kaW5nID0gTlVMTDsKLSAg ICAgcmV0LT5tdF9ibGluZGluZyA9IE5VTEw7Ci0gICAgIHJldC0+YmlnbnVtX2RhdGEgPSBOVUxM OwotLSAgICByZXQtPmZsYWdzID0gcmV0LT5tZXRoLT5mbGFncyAmIH5SU0FfRkxBR19OT05fRklQ U19BTExPVzsKLSsgICAgcmV0LT5mbGFncyA9IHJldC0+bWV0aC0+ZmxhZ3M7Ci0gICAgIGlmICgh Q1JZUFRPX25ld19leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0 YSkpIHsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gICAgICAgICBpZiAocmV0LT5lbmdp bmUpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jLmZpcHMg b3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwotLS0tIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMJMjAxNS0x Mi0wNCAxMzo1NTo1MS45NzI1NjI3NjIgKzAxMDAKLUBAIC0yMjgsMjAgKzIyOCw2IEBAIHN0YXRp YyBpbnQgcGtleV9yc2Ffc2lnbihFVlBfUEtFWV9DVFggKmMKLSAgICAgICAgICAgICBSU0FlcnIo UlNBX0ZfUEtFWV9SU0FfU0lHTiwgUlNBX1JfSU5WQUxJRF9ESUdFU1RfTEVOR1RIKTsKLSAgICAg ICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICB9Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAg ICAgICAgaWYgKHJldCA+IDApIHsKLS0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLS0g ICAgICAgICAgICByZXQgPSBGSVBTX3JzYV9zaWduX2RpZ2VzdChyc2EsIHRicywgdGJzbGVuLCBy Y3R4LT5tZCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY3R4LT5w YWRfbW9kZSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY3R4LT5z YWx0bGVuLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPm1n ZjFtZCwgc2lnLCAmc2xlbik7Ci0tICAgICAgICAgICAgaWYgKHJldCA+IDApCi0tICAgICAgICAg ICAgICAgICpzaWdsZW4gPSBzbGVuOwotLSAgICAgICAgICAgIGVsc2UKLS0gICAgICAgICAgICAg ICAgKnNpZ2xlbiA9IDA7Ci0tICAgICAgICAgICAgcmV0dXJuIHJldDsKLS0gICAgICAgIH0KLS0j ZW5kaWYKLSAKLSAgICAgICAgIGlmIChFVlBfTURfdHlwZShyY3R4LT5tZCkgPT0gTklEX21kYzIp IHsKLSAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2x0bXA7Ci1AQCAtMzU5LDE3ICszNDUsNiBA QCBzdGF0aWMgaW50IHBrZXlfcnNhX3ZlcmlmeShFVlBfUEtFWV9DVFgKLSAgICAgfQotICNlbmRp ZgotICAgICBpZiAocmN0eC0+bWQpIHsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgICAgICBp ZiAocnYgPiAwKSB7Ci0tICAgICAgICAgICAgcmV0dXJuIEZJUFNfcnNhX3ZlcmlmeV9kaWdlc3Qo cnNhLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRicywgdGJz bGVuLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPm1k LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPnBhZF9t b2RlLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPnNh bHRsZW4sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmN0eC0+ bWdmMW1kLCBzaWcsIHNpZ2xlbik7Ci0tCi0tICAgICAgICB9Ci0tI2VuZGlmCi0gICAgICAgICBp ZiAocmN0eC0+cGFkX21vZGUgPT0gUlNBX1BLQ1MxX1BBRERJTkcpCi0gICAgICAgICAgICAgcmV0 dXJuIFJTQV92ZXJpZnkoRVZQX01EX3R5cGUocmN0eC0+bWQpLCB0YnMsIHRic2xlbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaWcsIHNpZ2xlbiwgcnNhKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9yc2EvcnNhX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX3Np Z24uYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcyNTYy NzYyICswMTAwCi1AQCAtMTMyLDcgKzEzMiwxMCBAQCBpbnQgUlNBX3NpZ24oaW50IHR5cGUsIGNv bnN0IHVuc2lnbmVkIGNoCi0gICAgICAgICBpMmRfWDUwOV9TSUcoJnNpZywgJnApOwotICAgICAg ICAgcyA9IHRtcHM7Ci0gICAgIH0KLS0gICAgaSA9IFJTQV9wcml2YXRlX2VuY3J5cHQoaSwgcywg c2lncmV0LCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsgICAgLyogTkI6IGNhbGwgdW5kZXJs eWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwotKyAgICBpID0g cnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMgPyByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhpLCBzLCBz aWdyZXQsIHJzYSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUlNBX1BLQ1MxX1BBRERJTkcpIDoKLSsgICAgICAgIDA7Ci0gICAgIGlm IChpIDw9IDApCi0gICAgICAgICByZXQgPSAwOwotICAgICBlbHNlCi1AQCAtMTg4LDggKzE5MSwx MCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCi0gICAgIH0KLSAK LSAgICAgaWYgKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKSB7Ci0tICAgICAgICBpID0g UlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLAotLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaWdidWYsIHJtLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsgICAgICAgIGkg PSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50KXNp Z2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaWdidWYsIHJtLCByc2EsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNBX1BLQ1MxX1BBRERJTkcpCi0rICAg ICAgICAgICAgOiAwOwotICAgICAgICAgaWYgKGkgPD0gMCkKLSAgICAgICAgICAgICByZXR1cm4g MDsKLSAgICAgICAgICpwcm1fbGVuID0gaTsKLUBAIC0yMDUsNyArMjEwLDExIEBAIGludCBpbnRf cnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAgICAgICAgIFJTQWVycihSU0FfRl9J TlRfUlNBX1ZFUklGWSwgUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7Ci0gICAgICAgICBn b3RvIGVycjsKLSAgICAgfQotLSAgICBpID0gUlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVu LCBzaWdidWYsIHMsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKyAgICAvKiBOQjogY2FsbCB1 bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCi0rICAg IGkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50 KXNpZ2xlbiwgc2lnYnVmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcywgcnNhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNBX1BLQ1MxX1BBRERJTkcpIDoKLSsgICAgICAg IDA7Ci0gCi0gICAgIGlmIChpIDw9IDApCi0gICAgICAgICBnb3RvIGVycjsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9zaGEvc2hhLmguZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v c2hhL3NoYS5oCi0tLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIwMTUt MTItMDQgMTM6NTU6NTEuNjUxNTU1Mjc2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRv L3NoYS9zaGEuaAkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MjU2Mjc2MiArMDEwMAotQEAgLTEwNSw5 ICsxMDUsNiBAQCB0eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdCB7Ci0gfSBTSEFfQ1RYOwotIAot ICMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAotLSMgIGlmZGVmIE9QRU5TU0xfRklQUwotLWludCBw cml2YXRlX1NIQV9Jbml0KFNIQV9DVFggKmMpOwotLSMgIGVuZGlmCi0gaW50IFNIQV9Jbml0KFNI QV9DVFggKmMpOwotIGludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBsZW4pOwotIGludCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFgg KmMpOwotQEAgLTExNSw5ICsxMTIsNiBAQCB1bnNpZ25lZCBjaGFyICpTSEEoY29uc3QgdW5zaWdu ZWQgY2hhciAqCi0gdm9pZCBTSEFfVHJhbnNmb3JtKFNIQV9DVFggKmMsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEpOwotICMgZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX1NIQTEKLS0jICBp ZmRlZiBPUEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEExX0luaXQoU0hBX0NUWCAqYyk7Ci0t IyAgZW5kaWYKLSBpbnQgU0hBMV9Jbml0KFNIQV9DVFggKmMpOwotIGludCBTSEExX1VwZGF0ZShT SEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMV9GaW5h bCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7Ci1AQCAtMTM5LDEwICsxMzMsNiBAQCB0 eXBlZGVmIHN0cnVjdCBTSEEyNTZzdGF0ZV9zdCB7Ci0gfSBTSEEyNTZfQ1RYOwotIAotICMgaWZu ZGVmIE9QRU5TU0xfTk9fU0hBMjU2Ci0tIyAgaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50IHByaXZh dGVfU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAqYyk7Ci0taW50IHByaXZhdGVfU0hBMjU2X0luaXQo U0hBMjU2X0NUWCAqYyk7Ci0tIyAgZW5kaWYKLSBpbnQgU0hBMjI0X0luaXQoU0hBMjU2X0NUWCAq Yyk7Ci0gaW50IFNIQTIyNF9VcGRhdGUoU0hBMjU2X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwg c2l6ZV90IGxlbik7Ci0gaW50IFNIQTIyNF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2 X0NUWCAqYyk7Ci1AQCAtMTkyLDEwICsxODIsNiBAQCB0eXBlZGVmIHN0cnVjdCBTSEE1MTJzdGF0 ZV9zdCB7Ci0gIyBlbmRpZgotIAotICMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0tIyAgaWZk ZWYgT1BFTlNTTF9GSVBTCi0taW50IHByaXZhdGVfU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7 Ci0taW50IHByaXZhdGVfU0hBNTEyX0luaXQoU0hBNTEyX0NUWCAqYyk7Ci0tIyAgZW5kaWYKLSBp bnQgU0hBMzg0X0luaXQoU0hBNTEyX0NUWCAqYyk7Ci0gaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEy X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQTM4NF9GaW5h bCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vc2hh L3NoYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlw cwkyMDE1LTEyLTA0IDEzOjU1OjUxLjY1MzU1NTMyMiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MjU2Mjc2MiArMDEw MAotQEAgLTEyMywxMSArMTIzLDE0IEBAIHZvaWQgc2hhMV9ibG9ja19kYXRhX29yZGVyKFNIQV9D VFggKmMsIGMKLSAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKLSAKLSAjaWZkZWYg U0hBXzAKLS1maXBzX21kX2luaXQoU0hBKQotK25vbmZpcHNfbWRfaW5pdChTSEEpCi0gI2Vsc2UK LSBmaXBzX21kX2luaXRfY3R4KFNIQTEsIFNIQSkKLSAjZW5kaWYKLSB7Ci0rI2lmIGRlZmluZWQo U0hBXzEpICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7Ci0rI2VuZGlmCi0gICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLSAgICAgYy0+aDAg PSBJTklUX0RBVEFfaDA7Ci0gICAgIGMtPmgxID0gSU5JVF9EQVRBX2gxOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9zaGEvc2hhMjU2LmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZp cHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vc2hhL3NoYTI1Ni5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcyNTYyNzYyICswMTAw Ci1AQCAtMTIsMTIgKzEyLDE5IEBACi0gCi0gIyBpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgot ICMgaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyMgIGlu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyMgZW5kaWYKLSsKLSAjIGluY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbHYuaD4KLSAKLSBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW10gPSAiU0hBLTI1NiIg T1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEy NTYpCi0gewotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2so KTsKLSsjIGVuZGlmCi0gICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLSAgICAgYy0+aFsw XSA9IDB4YzEwNTllZDhVTDsKLSAgICAgYy0+aFsxXSA9IDB4MzY3Y2Q1MDdVTDsKLUBAIC0zMyw2 ICs0MCw5IEBAIGZpcHNfbWRfaW5pdF9jdHgoU0hBMjI0LCBTSEEyNTYpCi0gCi0gZmlwc19tZF9p bml0KFNIQTI1NikKLSB7Ci0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgRklQU19zZWxmdGVz dF9jaGVjaygpOwotKyMgZW5kaWYKLSAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwotICAg ICBjLT5oWzBdID0gMHg2YTA5ZTY2N1VMOwotICAgICBjLT5oWzFdID0gMHhiYjY3YWU4NVVMOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9zaGEvc2hhNTEyLmMKLS0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vc2hh L3NoYTUxMi5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcy NTYyNzYyICswMTAwCi1AQCAtNSw2ICs1LDEwIEBACi0gICogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgKi8KLSAj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj IGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpZiAhZGVmaW5lZChPUEVO U1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEE1MTIpCi0gLyotCi0gICogSU1Q TEVNRU5UQVRJT04gTk9URVMuCi1AQCAtNjIsNiArNjYsOSBAQCBjb25zdCBjaGFyIFNIQTUxMl92 ZXJzaW9uW10gPSAiU0hBLTUxMiIKLSAKLSBmaXBzX21kX2luaXRfY3R4KFNIQTM4NCwgU0hBNTEy KQotIHsKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7 Ci0rIyBlbmRpZgotICAgICBjLT5oWzBdID0gVTY0KDB4Y2JiYjlkNWRjMTA1OWVkOCk7Ci0gICAg IGMtPmhbMV0gPSBVNjQoMHg2MjlhMjkyYTM2N2NkNTA3KTsKLSAgICAgYy0+aFsyXSA9IFU2NCgw eDkxNTkwMTVhMzA3MGRkMTcpOwotQEAgLTgwLDYgKzg3LDkgQEAgZmlwc19tZF9pbml0X2N0eChT SEEzODQsIFNIQTUxMikKLSAKLSBmaXBzX21kX2luaXQoU0hBNTEyKQotIHsKLSsjIGlmZGVmIE9Q RU5TU0xfRklQUwotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rIyBlbmRpZgotICAgICBj LT5oWzBdID0gVTY0KDB4NmEwOWU2NjdmM2JjYzkwOCk7Ci0gICAgIGMtPmhbMV0gPSBVNjQoMHhi YjY3YWU4NTg0Y2FhNzNiKTsKLSAgICAgYy0+aFsyXSA9IFU2NCgweDNjNmVmMzcyZmU5NGY4MmIp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjJlL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vd2hybHBvb2wvd3BfZGdz dC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTczNTYyNzg1ICswMTAwCi1AQCAtNTUsNyArNTUsNyBA QAotICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotICNpbmNsdWRlIDxzdHJpbmcuaD4KLSAK LS1maXBzX21kX2luaXQoV0hJUkxQT09MKQotK25vbmZpcHNfbWRfaW5pdChXSElSTFBPT0wpCi0g ewotICAgICBtZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Ci0gICAgIHJldHVybiAoMSk7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4yZS9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4yZS9NYWtl ZmlsZS5vcmcKLS0tLSBvcGVuc3NsLTEuMC4yZS9NYWtlZmlsZS5vcmcuZmlwcwkyMDE1LTEyLTA0 IDEzOjU1OjUxLjk0MzU2MjA4NSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJlL01ha2VmaWxlLm9y ZwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MzU2Mjc4NSArMDEwMAotQEAgLTEzNyw2ICsxMzcsOSBA QCBGSVBTQ0FOTElCPQotIAotIEJBU0VBRERSPQotIAotKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5h YmxlZAotK0ZJUFM9Ci0rCi0gRElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRv b2xzCi0gRU5HRElSUz0gY2Nnb3N0Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3NsCi1AQCAtMTQ5LDcg KzE1Miw3IEBAIFNESVJTPSAgXAotIAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVu Z2luZSBcCi0gCWJ1ZmZlciBiaW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAotIAlldnAgYXNuMSBw ZW0geDUwOSB4NTA5djMgY29uZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1 IFwKLS0JY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3RvcmUgY21hYwotKwljbXMgcHF1ZXVlIHRz IGpwYWtlIHNycCBzdG9yZSBjbWFjIGZpcHMKLSAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBhYm92 ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCi0gIyBhY2NvcmRpbmcgdG8gbm8teHh4 IGFyZ3VtZW50cy4uLgotIAotQEAgLTI0MCw2ICsyNDMsNyBAQCBCVUlMREVOVj0JTENfQUxMPUMg UExBVEZPUk09JyQoUExBVEZPUk0pCi0gCQlGSVBTTElCRElSPScke0ZJUFNMSUJESVJ9JwkJCVwK LSAJCUZJUFNESVI9JyR7RklQU0RJUn0nCQkJCVwKLSAJCUZJUFNDQU5MSUI9IiQke0ZJUFNDQU5M SUI6LSQoRklQU0NBTkxJQil9IglcCi0rCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAotIAkJ VEhJUz0kJHtUSElTOi0kQH0gTUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KLSAjIE1B S0VPVkVSUklERVM9IGVmZmVjdGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNo IG1ha2UgZmxhdm9ycywKLSAjIHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBp biB2YXJpYWJsZSB0cmVhdG1lbnQgd2l0aCAtZS4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL3Nz bC9zc2xfYWxncy5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvc3NsL3NzbF9hbGdzLmMKLS0tLSBvcGVu c3NsLTEuMC4yZS9zc2wvc3NsX2FsZ3MuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmUvc3NsL3NzbF9hbGdzLmMJMjAxNS0xMi0wNCAx Mzo1NTo1MS45NzM1NjI3ODUgKzAxMDAKLUBAIC02NCw2ICs2NCwxMSBAQAotIGludCBTU0xfbGli cmFyeV9pbml0KHZvaWQpCi0gewotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgT1BFTlNT TF9pbml0X2xpYnJhcnkoKTsKLSsgICAgaWYgKCFGSVBTX21vZGUoKSkgewotKyNlbmRpZgotKwot ICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKLSAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jYmMo KSk7Ci0gICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jYmMoKSk7Ci1AQCAtMTQyLDYg KzE0Nyw0OCBAQCBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQotICAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhKCkpOwotICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwotICNlbmRpZgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgfSBlbHNlIHsKLSsjIGlmbmRlZiBPUEVOU1NMX05P X0RFUwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKLSsjIGVu ZGlmCi0rIyBpZm5kZWYgT1BFTlNTTF9OT19BRVMKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X2NiYygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Ni YygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKLSsgICAg ICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKLSsgICAgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMjU2X2djbSgpKTsKLSsjIGVuZGlmCi0rIyBpZm5kZWYgT1BFTlNTTF9O T19NRDUKLSsgICAgICAgIC8qIG5lZWRlZCBldmVuIGluIHRoZSBGSVBTIG1vZGUgZm9yIFRMUyBN QUMgKi8KLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7Ci0rICAgICAgICBFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJzc2wyLW1kNSIpOwotKyAgICAgICAgRVZQX2FkZF9k aWdlc3RfYWxpYXMoU05fbWQ1LCAic3NsMy1tZDUiKTsKLSsjIGVuZGlmCi0rIyBpZm5kZWYgT1BF TlNTTF9OT19TSEEKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOyAvKiBSU0Eg d2l0aCBzaGExICovCi0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCAic3Ns My1zaGExIik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVu Y3J5cHRpb24sIFNOX3NoYTFXaXRoUlNBKTsKLSsjIGVuZGlmCi0rIyBpZm5kZWYgT1BFTlNTTF9O T19TSEEyNTYKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0rICAgICAg ICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwotKyMgZW5kaWYKLSsjIGlmbmRlZiBPUEVO U1NMX05PX1NIQTUxMgotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKLSsg ICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7Ci0rIyBlbmRpZgotKyMgaWYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fRFNBKQotKyAgICAg ICAgRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7IC8qIERTQSB3aXRoIHNoYTEgKi8KLSsgICAg ICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCBTTl9kc2FXaXRoU0hBMV8y KTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiRFNTMSIp OwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsICJkc3MxIik7 Ci0rIyBlbmRpZgotKyMgaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKLSsgICAgICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9lY2RzYSgpKTsKLSsjIGVuZGlmCi0rICAgIH0KLSsjZW5kaWYKLSAjaWZuZGVm IE9QRU5TU0xfTk9fQ09NUAotICAgICAvKgotICAgICAgKiBUaGlzIHdpbGwgaW5pdGlhbGlzZSB0 aGUgYnVpbHQtaW4gY29tcHJlc3Npb24gYWxnb3JpdGhtcy4gVGhlIHZhbHVlCgpkaWZmIC0tZ2l0 IGEvb3BlbnNzbC0xLjAuMmctZGlzYWJsZS1zc2x2MnYzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMmct ZGlzYWJsZS1zc2x2MnYzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjA2ZjUxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4yZy1kaXNhYmxlLXNzbHYy djMucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvc3NsL3Nz bF9saWIuYy52MnYzIG9wZW5zc2wtMS4wLjJnL3NzbC9zc2xfbGliLmMKKy0tLSBvcGVuc3NsLTEu MC4yZy9zc2wvc3NsX2xpYi5jLnYydjMJMjAxNi0wMy0wMSAxNjozODoyNi44NzkxNDIwMjEgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4yZy9zc2wvc3NsX2xpYi5jCTIwMTYtMDMtMDEgMTY6NDE6MzIu OTc3MzUzNzY5ICswMTAwCitAQCAtMjA1NSwxMSArMjA1NSwxMSBAQCBTU0xfQ1RYICpTU0xfQ1RY X25ldyhjb25zdCBTU0xfTUVUSE9EICptCisgICAgIHJldC0+b3B0aW9ucyB8PSBTU0xfT1BfTEVH QUNZX1NFUlZFUl9DT05ORUNUOworIAorICAgICAvKgorLSAgICAgKiBEaXNhYmxlIFNTTHYyIGJ5 IGRlZmF1bHQsIGNhbGxlcnMgdGhhdCB3YW50IHRvIGVuYWJsZSBTU0x2MiB3aWxsIGhhdmUgdG8K Ky0gICAgICogZXhwbGljaXRseSBjbGVhciB0aGlzIG9wdGlvbiB2aWEgZWl0aGVyIG9mIFNTTF9D VFhfY2xlYXJfb3B0aW9ucygpIG9yCisrICAgICAqIERpc2FibGUgU1NMdjIgYW5kIFNTTHYzIGJ5 IGRlZmF1bHQsIGNhbGxlcnMgdGhhdCB3YW50IHRvIGVuYWJsZSB0aGVzZSB3aWxsIGhhdmUgdG8K KysgICAgICogZXhwbGljaXRseSBjbGVhciB0aGVzZSBvcHRpb25zIHZpYSBlaXRoZXIgb2YgU1NM X0NUWF9jbGVhcl9vcHRpb25zKCkgb3IKKyAgICAgICogU1NMX2NsZWFyX29wdGlvbnMoKS4KKyAg ICAgICovCistICAgIHJldC0+b3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjI7CisrICAgIHJldC0+ b3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjIgfCBTU0xfT1BfTk9fU1NMdjM7CisgCisgICAgIHJl dHVybiAocmV0KTsKKyAgZXJyOgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjJnLWZpcHMucGF0 Y2ggYi9vcGVuc3NsLTEuMC4yZy1maXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmU2Zjc2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4yZy1maXBz LnBhdGNoCkBAIC0wLDAgKzEsMTM3MTIgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2FwcHMv c3BlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2FwcHMvc3BlZWQuYworLS0tIG9wZW5zc2wtMS4w LjJnL2FwcHMvc3BlZWQuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMmcvYXBwcy9zcGVlZC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjEx OTE2NDEwICswMTAwCitAQCAtMTk3LDcgKzE5Nyw2IEBACisgIyAgaWZkZWYgT1BFTlNTTF9ET0lO R19NQUtFREVQRU5ECisgIyAgIHVuZGVmIEFFU19zZXRfZW5jcnlwdF9rZXkKKyAjICAgdW5kZWYg QUVTX3NldF9kZWNyeXB0X2tleQorLSMgICB1bmRlZiBERVNfc2V0X2tleV91bmNoZWNrZWQKKyAj ICBlbmRpZgorICMgIGRlZmluZSBCRl9zZXRfa2V5ICAgICAgcHJpdmF0ZV9CRl9zZXRfa2V5Cisg IyAgZGVmaW5lIENBU1Rfc2V0X2tleSAgICBwcml2YXRlX0NBU1Rfc2V0X2tleQorQEAgLTIwNSw3 ICsyMDQsNiBAQAorICMgIGRlZmluZSBTRUVEX3NldF9rZXkgICAgcHJpdmF0ZV9TRUVEX3NldF9r ZXkKKyAjICBkZWZpbmUgUkMyX3NldF9rZXkgICAgIHByaXZhdGVfUkMyX3NldF9rZXkKKyAjICBk ZWZpbmUgUkM0X3NldF9rZXkgICAgIHByaXZhdGVfUkM0X3NldF9rZXkKKy0jICBkZWZpbmUgREVT X3NldF9rZXlfdW5jaGVja2VkICAgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQKKyAjICBk ZWZpbmUgQUVTX3NldF9lbmNyeXB0X2tleSAgICAgcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5 CisgIyAgZGVmaW5lIEFFU19zZXRfZGVjcnlwdF9rZXkgICAgIHByaXZhdGVfQUVTX3NldF9kZWNy eXB0X2tleQorICMgIGRlZmluZSBDYW1lbGxpYV9zZXRfa2V5ICAgICAgICBwcml2YXRlX0NhbWVs bGlhX3NldF9rZXkKK0BAIC05NzQsNyArOTcyLDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFy ICoqYXJndikKKyAjIGVuZGlmCisgIyBpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAgICAgICAgIGlm IChzdHJjbXAoKmFyZ3YsICJyc2EiKSA9PSAwKSB7CistICAgICAgICAgICAgcnNhX2RvaXRbUl9S U0FfNTEyXSA9IDE7CisrIyAgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgICAgICAgICAgaWYgKCFG SVBTX21vZGUoKSkKKysjICBlbmRpZgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg cnNhX2RvaXRbUl9SU0FfNTEyXSA9IDE7CisrICAgICAgICAgICAgfQorICAgICAgICAgICAgIHJz YV9kb2l0W1JfUlNBXzEwMjRdID0gMTsKKyAgICAgICAgICAgICByc2FfZG9pdFtSX1JTQV8yMDQ4 XSA9IDE7CisgICAgICAgICAgICAgcnNhX2RvaXRbUl9SU0FfNDA5Nl0gPSAxOworQEAgLTk4Miw3 ICs5ODUsMTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICMgZW5kaWYKKyAj IGlmbmRlZiBPUEVOU1NMX05PX0RTQQorICAgICAgICAgaWYgKHN0cmNtcCgqYXJndiwgImRzYSIp ID09IDApIHsKKy0gICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV81MTJdID0gMTsKKysjICBpZmRl ZiBPUEVOU1NMX0ZJUFMKKysgICAgICAgICAgICBpZiAoIUZJUFNfbW9kZSgpKQorKyMgIGVuZGlm CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV81MTJdID0g MTsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgZHNhX2RvaXRbUl9EU0FfMTAyNF0gPSAx OworICAgICAgICAgICAgIGRzYV9kb2l0W1JfRFNBXzIwNDhdID0gMTsKKyAgICAgICAgIH0gZWxz ZQorQEAgLTEyMzMsMTMgKzEyNDEsMTkgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQorIAorICAgICBpZiAoaiA9PSAwKSB7CisgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQUxHT1Jf TlVNOyBpKyspIHsKKy0gICAgICAgICAgICBpZiAoaSAhPSBEX0VWUCkKKysgICAgICAgICAgICBp ZiAoaSAhPSBEX0VWUCAmJgorKyAgICAgICAgICAgICAgICAoIUZJUFNfbW9kZSgpIHx8IChpICE9 IERfV0hJUkxQT09MICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0g RF9NRDIgJiYgaSAhPSBEX01ENCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpICE9IERfTUQ1ICYmIGkgIT0gRF9NREMyICYmCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGkgIT0gRF9STUQxNjApKSkKKyAgICAgICAgICAgICAgICAgZG9pdFtpXSA9IDE7 CisgICAgICAgICB9CisgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUlNBX05VTTsgaSsrKQorLSAg ICAgICAgICAgIHJzYV9kb2l0W2ldID0gMTsKKysgICAgICAgICAgICBpZiAoIUZJUFNfbW9kZSgp IHx8IGkgIT0gUl9SU0FfNTEyKQorKyAgICAgICAgICAgICAgICByc2FfZG9pdFtpXSA9IDE7Cisg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRFNBX05VTTsgaSsrKQorLSAgICAgICAgICAgIGRzYV9k b2l0W2ldID0gMTsKKysgICAgICAgICAgICBpZiAoIUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9EU0Ff NTEyKQorKyAgICAgICAgICAgICAgICBkc2FfZG9pdFtpXSA9IDE7CisgIyBpZm5kZWYgT1BFTlNT TF9OT19FQ0RTQQorICAgICAgICAgZm9yIChpID0gMDsgaSA8IEVDX05VTTsgaSsrKQorICAgICAg ICAgICAgIGVjZHNhX2RvaXRbaV0gPSAxOworQEAgLTEyOTksMzAgKzEzMTMsNDYgQEAgaW50IE1B SU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICBBRVNfc2V0X2VuY3J5cHRfa2V5KGtleTMy LCAyNTYsICZhZXNfa3MzKTsKKyAjIGVuZGlmCisgIyBpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJ QQorLSAgICBDYW1lbGxpYV9zZXRfa2V5KGtleTE2LCAxMjgsICZjYW1lbGxpYV9rczEpOworLSAg ICBDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwgMTkyLCAmY2FtZWxsaWFfa3MyKTsKKy0gICAgQ2Ft ZWxsaWFfc2V0X2tleShja2V5MzIsIDI1NiwgJmNhbWVsbGlhX2tzMyk7CisrICAgIGlmIChkb2l0 W0RfQ0JDXzEyOF9DTUxdIHx8IGRvaXRbRF9DQkNfMTkyX0NNTF0gfHwgZG9pdFtEX0NCQ18yNTZf Q01MXSkgeworKyAgICAgICAgQ2FtZWxsaWFfc2V0X2tleShrZXkxNiwgMTI4LCAmY2FtZWxsaWFf a3MxKTsKKysgICAgICAgIENhbWVsbGlhX3NldF9rZXkoY2tleTI0LCAxOTIsICZjYW1lbGxpYV9r czIpOworKyAgICAgICAgQ2FtZWxsaWFfc2V0X2tleShja2V5MzIsIDI1NiwgJmNhbWVsbGlhX2tz Myk7CisrICAgIH0KKyAjIGVuZGlmCisgIyBpZm5kZWYgT1BFTlNTTF9OT19JREVBCistICAgIGlk ZWFfc2V0X2VuY3J5cHRfa2V5KGtleTE2LCAmaWRlYV9rcyk7CisrICAgIGlmIChkb2l0W0RfQ0JD X0lERUFdKSB7CisrICAgICAgICBpZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwgJmlkZWFfa3Mp OworKyAgICB9CisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fU0VFRAorLSAgICBTRUVE X3NldF9rZXkoa2V5MTYsICZzZWVkX2tzKTsKKysgICAgaWYgKGRvaXRbRF9DQkNfU0VFRF0pIHsK KysgICAgICAgIFNFRURfc2V0X2tleShrZXkxNiwgJnNlZWRfa3MpOworKyAgICB9CisgIyBlbmRp ZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fUkM0CistICAgIFJDNF9zZXRfa2V5KCZyYzRfa3MsIDE2 LCBrZXkxNik7CisrICAgIGlmIChkb2l0W0RfUkM0XSkgeworKyAgICAgICAgUkM0X3NldF9rZXko JnJjNF9rcywgMTYsIGtleTE2KTsKKysgICAgfQorICMgZW5kaWYKKyAjIGlmbmRlZiBPUEVOU1NM X05PX1JDMgorLSAgICBSQzJfc2V0X2tleSgmcmMyX2tzLCAxNiwga2V5MTYsIDEyOCk7CisrICAg IGlmIChkb2l0W0RfQ0JDX1JDMl0pIHsKKysgICAgICAgIFJDMl9zZXRfa2V5KCZyYzJfa3MsIDE2 LCBrZXkxNiwgMTI4KTsKKysgICAgfQorICMgZW5kaWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX1JD NQorLSAgICBSQzVfMzJfc2V0X2tleSgmcmM1X2tzLCAxNiwga2V5MTYsIDEyKTsKKysgICAgaWYg KGRvaXRbRF9DQkNfUkM1XSkgeworKyAgICAgICAgUkM1XzMyX3NldF9rZXkoJnJjNV9rcywgMTYs IGtleTE2LCAxMik7CisrICAgIH0KKyAjIGVuZGlmCisgIyBpZm5kZWYgT1BFTlNTTF9OT19CRgor LSAgICBCRl9zZXRfa2V5KCZiZl9rcywgMTYsIGtleTE2KTsKKysgICAgaWYgKGRvaXRbRF9DQkNf QkZdKSB7CisrICAgICAgICBCRl9zZXRfa2V5KCZiZl9rcywgMTYsIGtleTE2KTsKKysgICAgfQor ICMgZW5kaWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX0NBU1QKKy0gICAgQ0FTVF9zZXRfa2V5KCZj YXN0X2tzLCAxNiwga2V5MTYpOworKyAgICBpZiAoZG9pdFtEX0NCQ19DQVNUXSkgeworKyAgICAg ICAgQ0FTVF9zZXRfa2V5KCZjYXN0X2tzLCAxNiwga2V5MTYpOworKyAgICB9CisgIyBlbmRpZgor ICMgaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgICAgIG1lbXNldChyc2FfYywgMCwgc2l6ZW9mKHJz YV9jKSk7CitAQCAtMTYwNSw2ICsxNjM1LDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQorICAgICAgICAgSE1BQ19DVFggaGN0eDsKKyAKKyAgICAgICAgIEhNQUNfQ1RYX2luaXQo JmhjdHgpOworKyAgICAgICAgSE1BQ19DVFhfc2V0X2ZsYWdzKCZoY3R4LCBFVlBfTURfQ1RYX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpOworICAgICAgICAgSE1BQ19Jbml0X2V4KCZoY3R4LCAodW5zaWdu ZWQgY2hhciAqKSJUaGlzIGlzIGEga2V5Li4uIiwKKyAgICAgICAgICAgICAgICAgICAgICAxNiwg RVZQX21kNSgpLCBOVUxMKTsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL0NvbmZpZ3VyZS5m aXBzIG9wZW5zc2wtMS4wLjJnL0NvbmZpZ3VyZQorLS0tIG9wZW5zc2wtMS4wLjJnL0NvbmZpZ3Vy ZS5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNTk3OTE2MDkzICswMTAwCisrKysgb3BlbnNzbC0x LjAuMmcvQ29uZmlndXJlCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjExOTE2NDEwICswMTAwCitAQCAt MTA2NywxMSArMTA2Nyw2IEBAIGlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmlu ZWQKKyAJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKKyAJfQorIAorLWlmICgkZmlwcyAm JiAkZmlwc2xpYmRpciBlcSAiIikKKy0JeworLQkkZmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9s aWIvIjsKKy0JfQorLQorICMgUlNBWCBFTkdJTkUgc2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBt ZXRob2QuCisgaWYgKCRmaXBzKQorIAl7CitAQCAtMTU2MCw3ICsxNTU1LDYgQEAgJGNmbGFncy49 IiAtRE9QRU5TU0xfQk5fQVNNX0dGMm0iIGlmICgkYgorIGlmICgkZmlwcykKKyAJeworIAkkb3Bl bnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7CistCSRjZmxhZ3Mg Lj0gIiAtSVwkKEZJUFNESVIpL2luY2x1ZGUiOworIAl9CisgCisgJGNwdWlkX29iaj0ibWVtX2Ns ci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKK0BAIC0xNzYzLDkgKzE3NTcsMTIg QEAgd2hpbGUgKDxJTj4pCisgCisgCXMvXkZJUFNESVI9LiovRklQU0RJUj0kZmlwc2Rpci87Cisg CXMvXkZJUFNMSUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87CistCXMvXkZJUFNDQU5M SUI9LiovRklQU0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOworIAlzL15CQVNFQUREUj0uKi9C QVNFQUREUj0kYmFzZWFkZHIvOworIAorKwlpZiAoJGZpcHMpCisrCQl7CisrCQlzL15GSVBTPS4q L0ZJUFM9eWVzLzsKKysJCX0KKyAJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hh cmVkX3RhcmdldC87CisgCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsv OworIAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChT SEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2Ny eXB0by9hZXMvYWVzX21pc2MuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9hZXMvYWVzX21p c2MuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTYt MDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2Flcy9hZXNfbWlzYy5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjExOTE2NDEwICswMTAwCitAQCAt NzAsMTcgKzcwLDExIEBAIGNvbnN0IGNoYXIgKkFFU19vcHRpb25zKHZvaWQpCisgaW50IEFFU19z ZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJp dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KQorIHsKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistICAgIGZpcHNfY2lwaGVyX2Fib3J0KEFFUyk7CistI2VuZGlmCisgICAg IHJldHVybiBwcml2YXRlX0FFU19zZXRfZW5jcnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsK KyB9CisgCisgaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNl cktleSwgY29uc3QgaW50IGJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSAq a2V5KQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGZpcHNfY2lwaGVyX2Fib3J0KEFF Uyk7CistI2VuZGlmCisgICAgIHJldHVybiBwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkodXNl cktleSwgYml0cywga2V5KTsKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vY21h Yy9jbWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vY21hYy9jbWFjLmMKKy0tLSBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vY21hYy9jbWFjLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9jbWFjL2NtYWMuYwkyMDE2 LTAzLTAxIDE2OjM2OjM1LjYzNzYyNDQxOCArMDEwMAorQEAgLTEwNSwxMiArMTA1LDYgQEAgQ01B Q19DVFggKkNNQUNfQ1RYX25ldyh2b2lkKQorIAorIHZvaWQgQ01BQ19DVFhfY2xlYW51cChDTUFD X0NUWCAqY3R4KQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21vZGUo KSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkgeworLSAgICAgICAgRklQU19jbWFjX2N0eF9jbGVhbnVw KGN0eCk7CistICAgICAgICByZXR1cm47CistICAgIH0KKy0jZW5kaWYKKyAgICAgRVZQX0NJUEhF Ul9DVFhfY2xlYW51cCgmY3R4LT5jY3R4KTsKKyAgICAgT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJs LCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7CisgICAgIE9QRU5TU0xfY2xlYW5zZShjdHgtPmsxLCBF VlBfTUFYX0JMT0NLX0xFTkdUSCk7CitAQCAtMTYwLDIwICsxNTQsNiBAQCBpbnQgQ01BQ19Jbml0 KENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQKKyAgICAgICAgICAgICBFVlBlcnIoRVZQX0ZfQ01B Q19JTklULCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisgICAgICAgICAgICAgcmV0dXJuIDA7 CisgICAgICAgICB9CistCistICAgICAgICAvKiBTd2l0Y2ggdG8gRklQUyBjaXBoZXIgaW1wbGVt ZW50YXRpb24gaWYgcG9zc2libGUgKi8KKy0gICAgICAgIGlmIChjaXBoZXIgIT0gTlVMTCkgewor LSAgICAgICAgICAgIGNvbnN0IEVWUF9DSVBIRVIgKmZjaXBoZXI7CistICAgICAgICAgICAgZmNp cGhlciA9IEZJUFNfZ2V0X2NpcGhlcmJ5bmlkKEVWUF9DSVBIRVJfbmlkKGNpcGhlcikpOworLSAg ICAgICAgICAgIGlmIChmY2lwaGVyICE9IE5VTEwpCistICAgICAgICAgICAgICAgIGNpcGhlciA9 IGZjaXBoZXI7CistICAgICAgICB9CistICAgICAgICAvKgorLSAgICAgICAgICogT3RoZXIgYWxn b3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBpbiBGSVBTX2NtYWNfaW5pdCwgdmlhCistICAg ICAgICAgKiBGSVBTX2NpcGhlcmluaXQoKS4KKy0gICAgICAgICAqLworLSAgICAgICAgaWYgKCFp bXBsICYmICFjdHgtPmNjdHguZW5naW5lKQorLSAgICAgICAgICAgIHJldHVybiBGSVBTX2NtYWNf aW5pdChjdHgsIGtleSwga2V5bGVuLCBjaXBoZXIsIE5VTEwpOworICAgICB9CisgI2VuZGlmCisg ICAgIC8qIEFsbCB6ZXJvcyBtZWFucyByZXN0YXJ0ICovCitAQCAtMjE5LDEwICsxOTksNiBAQCBp bnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwgY29uc3Qgdm9pCisgeworICAgICBjb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhID0gaW47CisgICAgIHNpemVfdCBibDsKKy0jaWZkZWYgT1BFTlNT TF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0gICAg ICAgIHJldHVybiBGSVBTX2NtYWNfdXBkYXRlKGN0eCwgaW4sIGRsZW4pOworLSNlbmRpZgorICAg ICBpZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKKyAgICAgICAgIHJldHVybiAwOworICAgICBp ZiAoZGxlbiA9PSAwKQorQEAgLTI2MiwxMCArMjM4LDYgQEAgaW50IENNQUNfVXBkYXRlKENNQUNf Q1RYICpjdHgsIGNvbnN0IHZvaQorIGludCBDTUFDX0ZpbmFsKENNQUNfQ1RYICpjdHgsIHVuc2ln bmVkIGNoYXIgKm91dCwgc2l6ZV90ICpwb3V0bGVuKQorIHsKKyAgICAgaW50IGksIGJsLCBsYjsK Ky0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4 LmVuZ2luZSkKKy0gICAgICAgIHJldHVybiBGSVBTX2NtYWNfZmluYWwoY3R4LCBvdXQsIHBvdXRs ZW4pOworLSNlbmRpZgorICAgICBpZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkKKyAgICAgICAg IHJldHVybiAwOworICAgICBibCA9IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoJmN0eC0+Y2N0 eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vY3J5cHRvLmgKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vY3J5cHRv LmguZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjQ5MDkxMzY3MSArMDEwMAorKysrIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9jcnlwdG8uaAkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxMjkxNjQzMiArMDEw MAorQEAgLTYwMCwyNCArNjAwLDI5IEBAIGludCBGSVBTX21vZGVfc2V0KGludCByKTsKKyB2b2lk IE9QRU5TU0xfaW5pdCh2b2lkKTsKKyAKKyAjIGRlZmluZSBmaXBzX21kX2luaXQoYWxnKSBmaXBz X21kX2luaXRfY3R4KGFsZywgYWxnKQorKyMgZGVmaW5lIG5vbmZpcHNfbWRfaW5pdChhbGcpIG5v bmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCisrIyBkZWZpbmUgZmlwc19tZF9pbml0X2N0eChh bGcsIGN4KSBcCisrICAgICAgICBpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykKKyAKKyAjIGlm ZGVmIE9QRU5TU0xfRklQUworLSMgIGRlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwK KysjICBkZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisgICAgICAgICBpbnQg YWxnIyNfSW5pdChjeCMjX0NUWCAqYykgXAorICAgICAgICAgeyBcCisgICAgICAgICBpZiAoRklQ U19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCistICAgICAgICAgICAg ICAgICJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gZGlnZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBG SVBTIG1vZGUhIik7IFwKKysgICAgICAgICAgICAgICAgIkRpZ2VzdCAiICNhbGcgIiBmb3JiaWRk ZW4gaW4gRklQUyBtb2RlISIpOyBcCisgICAgICAgICByZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0lu aXQoYyk7IFwKKyAgICAgICAgIH0gXAorICAgICAgICAgaW50IHByaXZhdGVfIyNhbGcjI19Jbml0 KGN4IyNfQ1RYICpjKQorIAorICMgIGRlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKKyAg ICAgICAgIGlmIChGSVBTX21vZGUoKSkgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwK Ky0gICAgICAgICAgICAgICAgIkxvdyBsZXZlbCBBUEkgY2FsbCB0byBjaXBoZXIgIiAjYWxnICIg Zm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQorKyAgICAgICAgICAgICAgICAiQ2lwaGVyICIgI2Fs ZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIikKKysKKysvKiBkaWUgaWYgRklQUyBzZWxmdGVz dCBmYWlsZWQgKi8KKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCk7CisgCisgIyBlbHNl CistIyAgZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAorLSAgICAgICAgaW50IGFs ZyMjX0luaXQoY3gjI19DVFggKmMpCisrIyAgZGVmaW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxn LCBjeCkgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KQorICMgIGRlZmluZSBmaXBzX2NpcGhlcl9h Ym9ydChhbGcpIHdoaWxlKDApCisgIyBlbmRpZgorIAorQEAgLTYzNyw2ICs2NDIsOSBAQCBpbnQg Q1JZUFRPX21lbWNtcChjb25zdCB2b2xhdGlsZSB2b2lkICphCisgICovCisgdm9pZCBFUlJfbG9h ZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKKyAKKysjIGRlZmluZSBPUEVOU1NMX0hBVkVfSU5JVCAg ICAgICAxCisrdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKKysKKyAvKiBFcnJvciBj b2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICovCisgCisgLyogRnVuY3Rpb24gY29kZXMu ICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZGVzL2Rlcy5oLmZpcHMgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL2Rlcy9kZXMuaAorLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kZXMv ZGVzLmguZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjUyMTkxNDM3MyArMDEwMAorKysrIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9kZXMvZGVzLmgJMjAxNi0wMy0wMSAxNjozMzowNy42MTI5MTY0MzIg KzAxMDAKK0BAIC0yMzEsMTAgKzIzMSw2IEBAIGludCBERVNfc2V0X2tleShjb25zdF9ERVNfY2Js b2NrICprZXksIEQKKyBpbnQgREVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERF U19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25z dF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyB2b2lkIERF U19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1 bGUgKnNjaGVkdWxlKTsKKy0jIGlmZGVmIE9QRU5TU0xfRklQUworLXZvaWQgcHJpdmF0ZV9ERVNf c2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOworLSMgZW5k aWYKKyB2b2lkIERFU19zdHJpbmdfdG9fa2V5KGNvbnN0IGNoYXIgKnN0ciwgREVTX2NibG9jayAq a2V5KTsKKyB2b2lkIERFU19zdHJpbmdfdG9fMmtleXMoY29uc3QgY2hhciAqc3RyLCBERVNfY2Js b2NrICprZXkxLCBERVNfY2Jsb2NrICprZXkyKTsKKyB2b2lkIERFU19jZmI2NF9lbmNyeXB0KGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCitkaWZmIC11cCBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZGVzL3NldF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9kZXMvc2V0X2tleS5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2Rlcy9zZXRfa2V5LmMu ZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9kZXMvc2V0X2tleS5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjEyOTE2NDMyICsw MTAwCitAQCAtMzU5LDE1ICszNTksNiBAQCBpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9E RVNfY2Jsb2NrCisgfQorIAorIHZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19j YmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCistI2lmZGVmIE9QRU5TU0xf RklQUworLXsKKy0gICAgZmlwc19jaXBoZXJfYWJvcnQoREVTKTsKKy0gICAgcHJpdmF0ZV9ERVNf c2V0X2tleV91bmNoZWNrZWQoa2V5LCBzY2hlZHVsZSk7CistfQorLQorLXZvaWQgcHJpdmF0ZV9E RVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCistI2Vu ZGlmCisgeworICAgICBzdGF0aWMgY29uc3QgaW50IHNoaWZ0czJbMTZdID0KKyAgICAgICAgIHsg MCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCB9OworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RoL2RoX2dlbi5j LmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTI5MTY0MzIgKzAx MDAKK0BAIC04NSwxMCArODUsNiBAQCBpbnQgREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAq cmV0LCBpCisgI2VuZGlmCisgICAgIGlmIChyZXQtPm1ldGgtPmdlbmVyYXRlX3BhcmFtcykKKyAg ICAgICAgIHJldHVybiByZXQtPm1ldGgtPmdlbmVyYXRlX3BhcmFtcyhyZXQsIHByaW1lX2xlbiwg Z2VuZXJhdG9yLCBjYik7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBpZiAoRklQU19tb2Rl KCkpCistICAgICAgICByZXR1cm4gRklQU19kaF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KHJldCwg cHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKKy0jZW5kaWYKKyAgICAgcmV0dXJuIGRoX2J1aWx0 aW5fZ2VucGFyYW1zKHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKKyB9CisgCitAQCAt MTI2LDYgKzEyMiwxOCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQs CisgICAgIGludCBnLCBvayA9IC0xOworICAgICBCTl9DVFggKmN0eCA9IE5VTEw7CisgCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAg ICAgICAgRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBpZiAo RklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19C SVRTKSkgeworKyAgICAgICAgREhlcnIoREhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9L RVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysjZW5kaWYK KysKKyAgICAgY3R4ID0gQk5fQ1RYX25ldygpOworICAgICBpZiAoY3R4ID09IE5VTEwpCisgICAg ICAgICBnb3RvIGVycjsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kaC9kaC5oLmZp cHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RoL2RoLmgKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZGgvZGguaC5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNDYyOTEzMDM3ICswMTAwCisrKysg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RoL2RoLmgJMjAxNi0wMy0wMSAxNjozMzowNy42MTI5MTY0 MzIgKzAxMDAKK0BAIC03Nyw2ICs3Nyw4IEBACisgIyAgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01P RFVMVVNfQklUUyAgICAxMDAwMAorICMgZW5kaWYKKyAKKysjIGRlZmluZSBPUEVOU1NMX0RIX0ZJ UFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgIyBkZWZpbmUgREhfRkxBR19DQUNIRV9NT05U X1AgICAgIDB4MDEKKyAKKyAvKgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RoL2Ro X2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RoL2RoX2tleS5jCistLS0gb3BlbnNz bC0xLjAuMmcvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxNi0w My0wMSAxNjozMzowNy42MTM5MTY0NTUgKzAxMDAKK0BAIC02MSw2ICs2MSw5IEBACisgI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvZGguaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpOwor IHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0g KnB1Yl9rZXksIERIICpkaCk7CitAQCAtOTcsNyArMTAwLDcgQEAgaW50IERIX2NvbXB1dGVfa2V5 KHVuc2lnbmVkIGNoYXIgKmtleSwgYworIGludCBESF9jb21wdXRlX2tleV9wYWRkZWQodW5zaWdu ZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCkKKyB7CisgICAgIGlu dCBydiwgcGFkOworLSAgICBydiA9IGRoLT5tZXRoLT5jb21wdXRlX2tleShrZXksIHB1Yl9rZXks IGRoKTsKKysgICAgcnYgPSBESF9jb21wdXRlX2tleShrZXksIHB1Yl9rZXksIGRoKTsKKyAgICAg aWYgKHJ2IDw9IDApCisgICAgICAgICByZXR1cm4gcnY7CisgICAgIHBhZCA9IEJOX251bV9ieXRl cyhkaC0+cCkgLSBydjsKK0BAIC0xMTUsNyArMTE4LDcgQEAgc3RhdGljIERIX01FVEhPRCBkaF9v c3NsID0geworICAgICBkaF9ibl9tb2RfZXhwLAorICAgICBkaF9pbml0LAorICAgICBkaF9maW5p c2gsCistICAgIDAsCisrICAgIERIX0ZMQUdfRklQU19NRVRIT0QsCisgICAgIE5VTEwsCisgICAg IE5VTEwKKyB9OworQEAgLTEzNCw2ICsxMzcsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXko REggKmRoKQorICAgICBCTl9NT05UX0NUWCAqbW9udCA9IE5VTEw7CisgICAgIEJJR05VTSAqcHVi X2tleSA9IE5VTEwsICpwcml2X2tleSA9IE5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyAgICBpZiAoRklQU19tb2RlKCkKKysgICAgICAgICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBP UEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAgIERIZXJyKERIX0Zf R0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAgICAgICByZXR1cm4g MDsKKysgICAgfQorKyNlbmRpZgorKworICAgICBjdHggPSBCTl9DVFhfbmV3KCk7CisgICAgIGlm IChjdHggPT0gTlVMTCkKKyAgICAgICAgIGdvdG8gZXJyOworQEAgLTIxNyw2ICsyMjgsMTMgQEAg c3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICprZQorICAgICAgICAgREhlcnIo REhfRl9DT01QVVRFX0tFWSwgREhfUl9NT0RVTFVTX1RPT19MQVJHRSk7CisgICAgICAgICBnb3Rv IGVycjsKKyAgICAgfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgp CisrICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9N T0RVTFVTX0JJVFMpKSB7CisrICAgICAgICBESGVycihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tF WV9TSVpFX1RPT19TTUFMTCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKyNlbmRpZgor IAorICAgICBjdHggPSBCTl9DVFhfbmV3KCk7CisgICAgIGlmIChjdHggPT0gTlVMTCkKK0BAIC0y NzcsNiArMjk1LDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0IERIICpkaCwgQgor IAorIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorICAgICBkaC0+ZmxhZ3MgfD0g REhfRkxBR19DQUNIRV9NT05UX1A7CisgICAgIHJldHVybiAoMSk7CisgfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2RoL2RoX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMJ MjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZGgvZGhfbGliLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTM5MTY0NTUgKzAxMDAKK0BA IC04MCwxNCArODAsNyBAQCB2b2lkIERIX3NldF9kZWZhdWx0X21ldGhvZChjb25zdCBESF9NRVRI CisgY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCkKKyB7CisgICAg IGlmICghZGVmYXVsdF9ESF9tZXRob2QpIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgICAg ICBpZiAoRklQU19tb2RlKCkpCistICAgICAgICAgICAgcmV0dXJuIEZJUFNfZGhfb3BlbnNzbCgp OworLSAgICAgICAgZWxzZQorLSAgICAgICAgICAgIHJldHVybiBESF9PcGVuU1NMKCk7CistI2Vs c2UKKyAgICAgICAgIGRlZmF1bHRfREhfbWV0aG9kID0gREhfT3BlblNTTCgpOworLSNlbmRpZgor ICAgICB9CisgICAgIHJldHVybiBkZWZhdWx0X0RIX21ldGhvZDsKKyB9CitkaWZmIC11cCBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9kc2EvZHNhX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2FfZXJyLmMu ZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9kc2EvZHNhX2Vyci5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjEzOTE2NDU1ICsw MTAwCitAQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVu Y3RzW10KKyAgICAge0VSUl9GVU5DKERTQV9GX0RPX0RTQV9QUklOVCksICJET19EU0FfUFJJTlQi fSwKKyAgICAge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklOVCksICJEU0FwYXJhbXNfcHJp bnQifSwKKyAgICAge0VSUl9GVU5DKERTQV9GX0RTQVBBUkFNU19QUklOVF9GUCksICJEU0FwYXJh bXNfcHJpbnRfZnAifSwKKysgICAge0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiks ICJkc2FfYnVpbHRpbl9rZXlnZW4ifSwKKysgICAge0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElO X1BBUkFNR0VOKSwgImRzYV9idWlsdGluX3BhcmFtZ2VuIn0sCisgICAgIHtFUlJfRlVOQyhEU0Ff Rl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIpLCAiRFNBX0JVSUxUSU5fUEFSQU1HRU4yIn0sCisgICAg IHtFUlJfRlVOQyhEU0FfRl9EU0FfRE9fU0lHTiksICJEU0FfZG9fc2lnbiJ9LAorICAgICB7RVJS X0ZVTkMoRFNBX0ZfRFNBX0RPX1ZFUklGWSksICJEU0FfZG9fdmVyaWZ5In0sCitAQCAtMTA5LDYg KzExMSw4IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRFNBX3N0cl9yZWFzb25zW10KKyAgICAg e0VSUl9SRUFTT04oRFNBX1JfREVDT0RFX0VSUk9SKSwgImRlY29kZSBlcnJvciJ9LAorICAgICB7 RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFKSwgImludmFsaWQgZGlnZXN0IHR5 cGUifSwKKyAgICAge0VSUl9SRUFTT04oRFNBX1JfSU5WQUxJRF9QQVJBTUVURVJTKSwgImludmFs aWQgcGFyYW1ldGVycyJ9LAorKyAgICB7RVJSX1JFQVNPTihEU0FfUl9LRVlfU0laRV9JTlZBTElE KSwgImtleSBzaXplIGludmFsaWQifSwKKysgICAge0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVf VE9PX1NNQUxMKSwgImtleSBzaXplIHRvbyBzbWFsbCJ9LAorICAgICB7RVJSX1JFQVNPTihEU0Ff Ul9NSVNTSU5HX1BBUkFNRVRFUlMpLCAibWlzc2luZyBwYXJhbWV0ZXJzIn0sCisgICAgIHtFUlJf UkVBU09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSwgIm1vZHVsdXMgdG9vIGxhcmdlIn0sCisg ICAgIHtFUlJfUkVBU09OKERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUyksICJuZWVkIG5ldyBz ZXR1cCB2YWx1ZXMifSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2dl bi5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2FfZ2VuLmMKKy0tLSBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAx Ni0wMy0wMSAxNjozMzowNy42MTM5MTY0NTUgKzAxMDAKK0BAIC05MSw2ICs5MSwxNiBAQAorICMg IGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorICMgZW5kaWYKKyAKKysjIGlmbmRlZiBPUEVOU1NM X0ZJUFMKKytzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXpl X3QgYml0cywgc2l6ZV90IHFiaXRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBzZWVkX2xlbiwgQklHTlVNICoqcF9yZXQsIEJJR05VTSAq KnFfcmV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3Jl dCwgQk5fR0VOQ0IgKmNiKTsKKytzdGF0aWMgaW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RY ICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYik7CisrIyBlbmRpZgorKworIGludCBEU0Ff Z2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJpdHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sIGludCBzZWVk X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwg dW5zaWduZWQgbG9uZyAqaF9yZXQsCitAQCAtMTA2LDk3ICsxMTYsMTY1IEBAIGludCBEU0FfZ2Vu ZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwKKyAgICAgaWYgKHJldC0+bWV0aC0+ZHNhX3Bh cmFtZ2VuKQorICAgICAgICAgcmV0dXJuIHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKHJldCwgYml0 cywgc2VlZF9pbiwgc2VlZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CistIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKy0g ICAgZWxzZSBpZiAoRklQU19tb2RlKCkpIHsKKy0gICAgICAgIHJldHVybiBGSVBTX2RzYV9nZW5l cmF0ZV9wYXJhbWV0ZXJzX2V4KHJldCwgYml0cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlZWRfaW4sIHNlZWRfbGVuLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7 CistICAgIH0KKy0jIGVuZGlmCisgICAgIGVsc2UgeworICAgICAgICAgY29uc3QgRVZQX01EICpl dnBtZCA9IGJpdHMgPj0gMjA0OCA/IEVWUF9zaGEyNTYoKSA6IEVWUF9zaGExKCk7CisgICAgICAg ICBzaXplX3QgcWJpdHMgPSBFVlBfTURfc2l6ZShldnBtZCkgKiA4OworIAorICAgICAgICAgcmV0 dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJpdHMsIGV2cG1kLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRfaW4sIHNlZWRfbGVuLCBOVUxMLCBj b3VudGVyX3JldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkX2lu LCBzZWVkX2xlbiwgY291bnRlcl9yZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaF9yZXQsIGNiKTsKKyAgICAgfQorIH0KKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUwor K2ludCBGSVBTX2RzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6 ZV90IHFiaXRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAq ZXZwbWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqY291bnRlcl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYikKKyt7CisrICAgIHJldHVybiBkc2FfYnVp bHRpbl9wYXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXZwbWQsIHNlZWRfaW4sIHNlZWRfbGVuLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CisrfQorKyMgZW5kaWYKKysKKyBp bnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJp dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sCistICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBzZWVkX2xlbiwgdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCisrICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBzZWVkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpj b3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKKyB7CisgICAg IGludCBvayA9IDA7CisgICAgIHVuc2lnbmVkIGNoYXIgc2VlZFtTSEEyNTZfRElHRVNUX0xFTkdU SF07CisrICAgIEJJR05VTSAqZyA9IE5VTEwsICpxID0gTlVMTCwgKnAgPSBOVUxMOworKyAgICBz aXplX3QgcXNpemUgPSBxYml0cyA+PiAzOworKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7CisrICAg IAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgp KSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisr ICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYKKysgICAgICAgIChiaXRzICE9IDEwMjQgfHwg cWJpdHMgIT0gMTYwKSAmJgorKyAgICAgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyMjQp ICYmCisrICAgICAgICAoYml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDI1NikgJiYgKGJpdHMgIT0g MzA3MiB8fCBxYml0cyAhPSAyNTYpKSB7CisrICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0JVSUxU SU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQpOworKyAgICAgICAgZ290byBlcnI7 CisrICAgIH0KKysjIGVuZGlmCisrICAgIGlmIChzZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6 ZV90KXFzaXplKSkKKysgICAgICAgIHNlZWRfaW4gPSBOVUxMOyAgICAgICAgIC8qIHNlZWQgYnVm ZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KKysgICAgaWYgKHNlZWRfbGVuID4gc2l6ZW9mKHNl ZWQpKQorKyAgICAgICAgc2VlZF9sZW4gPSBzaXplb2Yoc2VlZCk7IC8qIEFwcC4gMi4yIG9mIEZJ UFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyIFNFRUQsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDI1 NiBiaXRzKi8KKysgICAgaWYgKHNlZWRfaW4gIT0gTlVMTCkKKysgICAgICAgIG1lbWNweShzZWVk LCBzZWVkX2luLCBzZWVkX2xlbik7CisrICAgIGVsc2UKKysgICAgICAgIHNlZWRfbGVuID0gMDsK KysgICAgICAgIAorKyAgICBpZiAoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKKysgICAg ICAgIGdvdG8gZXJyOworKyAKKysgICAgQk5fQ1RYX3N0YXJ0KGN0eCk7CisrIAorKyAgICBpZiAo IUZJUFNfZHNhX2dlbmVyYXRlX3BxKGN0eCwgYml0cywgcWJpdHMsIGV2cG1kLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlZWQsIHNlZWRfbGVuLCAmcCwgJnEsIGNvdW50ZXJfcmV0 LCBjYikpCisrICAgICAgICBnb3RvIGVycjsKKysgCisrICAgIGlmICghRklQU19kc2FfZ2VuZXJh dGVfZyhjdHgsIHAsIHEsICZnLCBoX3JldCwgY2IpKQorKyAgICAgICAgZ290byBlcnI7CisrIAor KyAgICBvayA9IDE7CisrIGVycjoKKysgICAgaWYgKG9rKSB7CisrICAgICAgICBpZiAocmV0LT5w KSB7CisrICAgICAgICAgICAgQk5fZnJlZShyZXQtPnApOworKyAgICAgICAgICAgIHJldC0+cCA9 IE5VTEw7CisrICAgICAgICB9CisrICAgICAgICBpZiAocmV0LT5xKSB7CisrICAgICAgICAgICAg Qk5fZnJlZShyZXQtPnEpOworKyAgICAgICAgICAgIHJldC0+cSA9IE5VTEw7CisrICAgICAgICB9 CisrICAgICAgICBpZiAocmV0LT5nKSB7CisrICAgICAgICAgICAgQk5fZnJlZShyZXQtPmcpOwor KyAgICAgICAgICAgIHJldC0+ZyA9IE5VTEw7CisrICAgICAgICB9CisrICAgICAgICByZXQtPnAg PSBCTl9kdXAocCk7CisrICAgICAgICByZXQtPnEgPSBCTl9kdXAocSk7CisrICAgICAgICByZXQt PmcgPSBCTl9kdXAoZyk7CisrICAgICAgICBpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09 IE5VTEwgfHwgcmV0LT5nID09IE5VTEwpCisrICAgICAgICAgICAgb2sgPSAwOworKyAgICB9Cisr ICAgIGlmIChjdHgpIHsKKysgICAgICAgIEJOX0NUWF9lbmQoY3R4KTsKKysgICAgICAgIEJOX0NU WF9mcmVlKGN0eCk7CisrICAgIH0KKysgICAgcmV0dXJuIG9rOworK30KKysKKysjIGlmbmRlZiBP UEVOU1NMX0ZJUFMKKytzdGF0aWMKKysjIGVuZGlmCisraW50IEZJUFNfZHNhX2dlbmVyYXRlX3Bx KEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25lZCBjaGFyICpzZWVkLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VlZF9sZW4sIEJJR05VTSAqKnBfcmV0LCBCSUdO VU0gKipxX3JldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwg Qk5fR0VOQ0IgKmNiKQorK3sKKysgICAgaW50IG9rID0gMDsKKyAgICAgdW5zaWduZWQgY2hhciBt ZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CistICAgIHVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9E SUdFU1RfTEVOR1RIXSwgYnVmMltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrICAgIHVuc2lnbmVk IGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKyAgICAgQklHTlVNICpyMCwgKlcsICpY LCAqYywgKnRlc3Q7CistICAgIEJJR05VTSAqZyA9IE5VTEwsICpxID0gTlVMTCwgKnAgPSBOVUxM OworLSAgICBCTl9NT05UX0NUWCAqbW9udCA9IE5VTEw7CistICAgIGludCBpLCBrLCBuID0gMCwg bSA9IDAsIHFzaXplID0gcWJpdHMgPj4gMzsKKysgICAgQklHTlVNICpxID0gTlVMTCwgKnAgPSBO VUxMOworKyAgICBpbnQgaSwgaywgYiwgbiA9IDAsIG0gPSAwLCBxc2l6ZSA9IHFiaXRzID4+IDM7 CisgICAgIGludCBjb3VudGVyID0gMDsKKyAgICAgaW50IHIgPSAwOworLSAgICBCTl9DVFggKmN0 eCA9IE5VTEw7CistICAgIHVuc2lnbmVkIGludCBoID0gMjsKKyAKKyAgICAgaWYgKHFzaXplICE9 IFNIQV9ESUdFU1RfTEVOR1RIICYmIHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVOR1RIICYmCisg ICAgICAgICBxc2l6ZSAhPSBTSEEyNTZfRElHRVNUX0xFTkdUSCkKKyAgICAgICAgIC8qIGludmFs aWQgcSBzaXplICovCisgICAgICAgICByZXR1cm4gMDsKKyAKKy0gICAgaWYgKGV2cG1kID09IE5V TEwpCistICAgICAgICAvKiB1c2UgU0hBMSBhcyBkZWZhdWx0ICovCisrICAgIGlmIChldnBtZCA9 PSBOVUxMKSB7CisrICAgICAgICBpZiAocWJpdHMgPD0gMTYwKQorICAgICAgICAgZXZwbWQgPSBF VlBfc2hhMSgpOworKyAgICAgICAgZWxzZSBpZiAocWJpdHMgPD0gMjI0KQorKyAgICAgICAgICAg IGV2cG1kID0gRVZQX3NoYTIyNCgpOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGV2cG1k ID0gRVZQX3NoYTI1NigpOworKyAgICB9CisgCisgICAgIGlmIChiaXRzIDwgNTEyKQorICAgICAg ICAgYml0cyA9IDUxMjsKKyAKKyAgICAgYml0cyA9IChiaXRzICsgNjMpIC8gNjQgKiA2NDsKKyAK Ky0gICAgLyoKKy0gICAgICogTkI6IHNlZWRfbGVuID09IDAgaXMgc3BlY2lhbCBjYXNlOiBjb3B5 IGdlbmVyYXRlZCBzZWVkIHRvIHNlZWRfaW4gaWYKKy0gICAgICogaXQgaXMgbm90IE5VTEwuCist ICAgICAqLworLSAgICBpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkp CistICAgICAgICBzZWVkX2luID0gTlVMTDsgICAgICAgICAvKiBzZWVkIGJ1ZmZlciB0b28gc21h bGwgLS0gaWdub3JlICovCistICAgIGlmIChzZWVkX2xlbiA+IChzaXplX3QpcXNpemUpCistICAg ICAgICBzZWVkX2xlbiA9IHFzaXplOyAgICAgICAvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYg YWxsb3dzIGxhcmdlcgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogU0VFRCwg YnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZQorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogcmVzdHJpY3RlZCB0byAxNjAgYml0cyAqLworLSAgICBpZiAoc2VlZF9pbiAhPSBO VUxMKQorLSAgICAgICAgbWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKKy0KKy0gICAg aWYgKChtb250ID0gQk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCistICAgICAgICBnb3RvIGVy cjsKKy0KKy0gICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCistICAgICAgICBn b3RvIGVycjsKKy0KKy0gICAgQk5fQ1RYX3N0YXJ0KGN0eCk7CistCisgICAgIHIwID0gQk5fQ1RY X2dldChjdHgpOworLSAgICBnID0gQk5fQ1RYX2dldChjdHgpOworICAgICBXID0gQk5fQ1RYX2dl dChjdHgpOworLSAgICBxID0gQk5fQ1RYX2dldChjdHgpOworKyAgICAqcV9yZXQgPSBxID0gQk5f Q1RYX2dldChjdHgpOworICAgICBYID0gQk5fQ1RYX2dldChjdHgpOworICAgICBjID0gQk5fQ1RY X2dldChjdHgpOworLSAgICBwID0gQk5fQ1RYX2dldChjdHgpOworKyAgICAqcF9yZXQgPSBwID0g Qk5fQ1RYX2dldChjdHgpOworICAgICB0ZXN0ID0gQk5fQ1RYX2dldChjdHgpOworIAorICAgICBp ZiAoIUJOX2xzaGlmdCh0ZXN0LCBCTl92YWx1ZV9vbmUoKSwgYml0cyAtIDEpKQorICAgICAgICAg Z290byBlcnI7CisgCisrICAgIC8qIHN0ZXAgMyBuID0gXGxjZWlsIGJpdHMgLyBxYml0cyBccmNl aWwgLSAxICovCisrICAgIG4gPSAoYml0cyArIHFiaXRzIC0gMSkgLyBxYml0cyAtIDE7CisrICAg IC8qIHN0ZXAgNCBiID0gYml0cyAtIDEgLSBuICogcWJpdHMgKi8KKysgICAgYiA9IGJpdHMgLSAx IC0gbiAqIHFiaXRzOworKworICAgICBmb3IgKDs7KSB7CisgICAgICAgICBmb3IgKDs7KSB7ICAg ICAgICAgICAgICAvKiBmaW5kIHEgKi8KKyAgICAgICAgICAgICBpbnQgc2VlZF9pc19yYW5kb207 CisgCistICAgICAgICAgICAgLyogc3RlcCAxICovCisrICAgICAgICAgICAgLyogc3RlcCA1IGdl bmVyYXRlIHNlZWQgKi8KKyAgICAgICAgICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDAsIG0r KykpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworIAorLSAgICAgICAgICAgIGlmICghc2Vl ZF9sZW4gfHwgIXNlZWRfaW4pIHsKKysgICAgICAgICAgICBpZiAoIXNlZWRfbGVuKSB7CisgICAg ICAgICAgICAgICAgIGlmIChSQU5EX3BzZXVkb19ieXRlcyhzZWVkLCBxc2l6ZSkgPCAwKQorICAg ICAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAgICAgICAgIHNlZWRfaXNfcmFu ZG9tID0gMTsKK0BAIC0yMDYsMjkgKzI4NCwxOCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4o RFNBICpyZXQsIHNpemVfCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSBi YWQgKi8KKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc2VlZCwgcXNp emUpOworLSAgICAgICAgICAgIG1lbWNweShidWYyLCBzZWVkLCBxc2l6ZSk7CistICAgICAgICAg ICAgLyogcHJlY29tcHV0ZSAiU0VFRCArIDEiIGZvciBzdGVwIDc6ICovCistICAgICAgICAgICAg Zm9yIChpID0gcXNpemUgLSAxOyBpID49IDA7IGktLSkgeworLSAgICAgICAgICAgICAgICBidWZb aV0rKzsKKy0gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPSAwKQorLSAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQorIAorLSAgICAgICAgICAgIC8qIHN0ZXAgMiAq LworKyAgICAgICAgICAgIC8qIHN0ZXAgNiBVID0gaGFzaChzZWVkKSAqLworICAgICAgICAgICAg IGlmICghRVZQX0RpZ2VzdChzZWVkLCBxc2l6ZSwgbWQsIE5VTEwsIGV2cG1kLCBOVUxMKSkKKyAg ICAgICAgICAgICAgICAgZ290byBlcnI7CistICAgICAgICAgICAgaWYgKCFFVlBfRGlnZXN0KGJ1 ZiwgcXNpemUsIGJ1ZjIsIE5VTEwsIGV2cG1kLCBOVUxMKSkKKy0gICAgICAgICAgICAgICAgZ290 byBlcnI7CistICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHFzaXplOyBpKyspCistICAgICAg ICAgICAgICAgIG1kW2ldIF49IGJ1ZjJbaV07CisgCistICAgICAgICAgICAgLyogc3RlcCAzICov CisrICAgICAgICAgICAgLyogc3RlcCA3IHEgPSAyXihxYml0cy0xKSArIFUgKyAxIC0gKFUgbW9k IDIpICovCisgICAgICAgICAgICAgbWRbMF0gfD0gMHg4MDsKKyAgICAgICAgICAgICBtZFtxc2l6 ZSAtIDFdIHw9IDB4MDE7CisgICAgICAgICAgICAgaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCBx KSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgCistICAgICAgICAgICAgLyogc3RlcCA0 ICovCisrICAgICAgICAgICAgLyogc3RlcCA4IHRlc3QgZm9yIHByaW1lICg2NCByb3VuZCBvZiBS YWJpbi1NaWxsZXIpICovCisgICAgICAgICAgICAgciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4 KHEsIERTU19wcmltZV9jaGVja3MsIGN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VlZF9pc19yYW5kb20sIGNiKTsKKyAgICAgICAgICAgICBpZiAociA+IDAp CitAQCAtMjM2LDggKzMwMyw2IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwg c2l6ZV8KKyAgICAgICAgICAgICBpZiAociAhPSAwKQorICAgICAgICAgICAgICAgICBnb3RvIGVy cjsKKyAKKy0gICAgICAgICAgICAvKiBkbyBhIGNhbGxiYWNrIGNhbGwgKi8KKy0gICAgICAgICAg ICAvKiBzdGVwIDUgKi8KKyAgICAgICAgIH0KKyAKKyAgICAgICAgIGlmICghQk5fR0VOQ0JfY2Fs bChjYiwgMiwgMCkpCitAQCAtMjQ1LDE5ICszMTAsMTYgQEAgaW50IGRzYV9idWlsdGluX3BhcmFt Z2VuKERTQSAqcmV0LCBzaXplXworICAgICAgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAzLCAw KSkKKyAgICAgICAgICAgICBnb3RvIGVycjsKKyAKKy0gICAgICAgIC8qIHN0ZXAgNiAqLworKyAg ICAgICAgLyogc3RlcCAxMSAqLworICAgICAgICAgY291bnRlciA9IDA7CistICAgICAgICAvKiAi b2Zmc2V0ID0gMiIgKi8KKy0KKy0gICAgICAgIG4gPSAoYml0cyAtIDEpIC8gMTYwOworKyAgICAg ICAgLyogIm9mZnNldCA9IDEiICovCisgCisgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg ICAgaWYgKChjb3VudGVyICE9IDApICYmICFCTl9HRU5DQl9jYWxsKGNiLCAwLCBjb3VudGVyKSkK KyAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgCistICAgICAgICAgICAgLyogc3RlcCA3ICov CisrICAgICAgICAgICAgLyogc3RlcCAxMS4xLCAxMS4yIG9idGFpbiBXICovCisgICAgICAgICAg ICAgQk5femVybyhXKTsKKy0gICAgICAgICAgICAvKiBub3cgJ2J1ZicgY29udGFpbnMgIlNFRUQg KyBvZmZzZXQgLSAxIiAqLworICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPD0gbjsgaysrKSB7 CisgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAqIG9idGFpbiAiU0VFRCAr IG9mZnNldCArIGsiIGJ5IGluY3JlbWVudGluZzoKK0BAIC0yNzEsMzYgKzMzMywzNyBAQCBpbnQg ZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgICAgICAgICAgICAgICAgIGlm ICghRVZQX0RpZ2VzdChidWYsIHFzaXplLCBtZCwgTlVMTCwgZXZwbWQsIE5VTEwpKQorICAgICAg ICAgICAgICAgICAgICAgZ290byBlcnI7CisgCistICAgICAgICAgICAgICAgIC8qIHN0ZXAgOCAq LworICAgICAgICAgICAgICAgICBpZiAoIUJOX2JpbjJibihtZCwgcXNpemUsIHIwKSkKKyAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZXJyOworLSAgICAgICAgICAgICAgICBpZiAoIUJOX2xzaGlm dChyMCwgcjAsIChxc2l6ZSA8PCAzKSAqIGspKQorKyAgICAgICAgICAgICAgICBpZiAoayA9PSBu KQorKyAgICAgICAgICAgICAgICAgICAgQk5fbWFza19iaXRzKHIwLCBiKTsKKysgICAgICAgICAg ICAgICAgaWYgKCFCTl9sc2hpZnQocjAsIHIwLCBxYml0cyAqIGspKQorICAgICAgICAgICAgICAg ICAgICAgZ290byBlcnI7CisgICAgICAgICAgICAgICAgIGlmICghQk5fYWRkKFcsIFcsIHIwKSkK KyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAgICAgIH0KKyAKKy0gICAg ICAgICAgICAvKiBtb3JlIG9mIHN0ZXAgOCAqLworLSAgICAgICAgICAgIGlmICghQk5fbWFza19i aXRzKFcsIGJpdHMgLSAxKSkKKy0gICAgICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICAg ICAgLyogc3RlcCAxMS4zIFggPSBXICsgMl4oTC0xKSAqLworICAgICAgICAgICAgIGlmICghQk5f Y29weShYLCBXKSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAgICAgaWYg KCFCTl9hZGQoWCwgWCwgdGVzdCkpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworIAorLSAg ICAgICAgICAgIC8qIHN0ZXAgOSAqLworKyAgICAgICAgICAgIC8qIHN0ZXAgMTEuNCBjID0gWCBt b2QgMipxICovCisgICAgICAgICAgICAgaWYgKCFCTl9sc2hpZnQxKHIwLCBxKSkKKyAgICAgICAg ICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAgICAgaWYgKCFCTl9tb2QoYywgWCwgcjAsIGN0 eCkpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKworKyAgICAgICAgICAgIC8qIHN0ZXAg MTEuNSBwID0gWCAtIChjIC0gMSkgKi8KKyAgICAgICAgICAgICBpZiAoIUJOX3N1YihyMCwgYywg Qk5fdmFsdWVfb25lKCkpKQorICAgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgICAg ICBpZiAoIUJOX3N1YihwLCBYLCByMCkpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworIAor LSAgICAgICAgICAgIC8qIHN0ZXAgMTAgKi8KKysgICAgICAgICAgICAvKiBzdGVwIDExLjYgKi8K KyAgICAgICAgICAgICBpZiAoQk5fY21wKHAsIHRlc3QpID49IDApIHsKKy0gICAgICAgICAgICAg ICAgLyogc3RlcCAxMSAqLworKyAgICAgICAgICAgICAgICAvKiBzdGVwIDExLjcgKi8KKyAgICAg ICAgICAgICAgICAgciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHAsIERTU19wcmltZV9jaGVj a3MsIGN0eCwgMSwgY2IpOworICAgICAgICAgICAgICAgICBpZiAociA+IDApCisgICAgICAgICAg ICAgICAgICAgICBnb3RvIGVuZDsgICAvKiBmb3VuZCBpdCAqLworQEAgLTMwOCwxMiArMzcxLDEy IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICAvKiBz dGVwIDEzICovCisrICAgICAgICAgICAgLyogc3RlcCAxMS45ICovCisgICAgICAgICAgICAgY291 bnRlcisrOworICAgICAgICAgICAgIC8qICJvZmZzZXQgPSBvZmZzZXQgKyBuICsgMSIgKi8KKyAK Ky0gICAgICAgICAgICAvKiBzdGVwIDE0ICovCistICAgICAgICAgICAgaWYgKGNvdW50ZXIgPj0g NDA5NikKKysgICAgICAgICAgICAvKiBzdGVwIDEyICovCisrICAgICAgICAgICAgaWYgKGNvdW50 ZXIgPj0gNCAqIGJpdHMpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAg ICB9CitAQCAtMzIxLDcgKzM4NCwzMyBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpy ZXQsIHNpemVfCisgICAgIGlmICghQk5fR0VOQ0JfY2FsbChjYiwgMiwgMSkpCisgICAgICAgICBn b3RvIGVycjsKKyAKKy0gICAgLyogV2Ugbm93IG5lZWQgdG8gZ2VuZXJhdGUgZyAqLworKyAgICBv ayA9IDE7CisrIGVycjoKKysgICAgaWYgKG9rKSB7CisrICAgICAgICBpZiAoY291bnRlcl9yZXQg IT0gTlVMTCkKKysgICAgICAgICAgICAqY291bnRlcl9yZXQgPSBjb3VudGVyOworKyAgICB9Cisr ICAgIHJldHVybiBvazsKKyt9CisrCisrIyBpZm5kZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljCisr IyBlbmRpZgorK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAs IEJJR05VTSAqcSwKKysgICAgICAgICAgICAgICAgICAgICAgICBCSUdOVU0gKipnX3JldCwgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYikKKyt7CisrICAgIGludCBvayA9IDA7Cisr ICAgIEJJR05VTSAqcjAsICp0ZXN0LCAqZyA9IE5VTEw7CisrICAgIEJOX01PTlRfQ1RYICptb250 OworKyAgICB1bnNpZ25lZCBpbnQgaCA9IDI7CisrCisrICAgIGlmICgobW9udCA9IEJOX01PTlRf Q1RYX25ldygpKSA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIHIwID0gQk5f Q1RYX2dldChjdHgpOworKyAgICAqZ19yZXQgPSBnID0gQk5fQ1RYX2dldChjdHgpOworKyAgICB0 ZXN0ID0gQk5fQ1RYX2dldChjdHgpOworKworICAgICAvKiBTZXQgcjA9KHAtMSkvcSAqLworICAg ICBpZiAoIUJOX3N1Yih0ZXN0LCBwLCBCTl92YWx1ZV9vbmUoKSkpCisgICAgICAgICBnb3RvIGVy cjsKK0BAIC0zNTAsNDYgKzQzOSwxNCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpy ZXQsIHNpemVfCisgICAgIG9rID0gMTsKKyAgZXJyOgorICAgICBpZiAob2spIHsKKy0gICAgICAg IGlmIChyZXQtPnApCistICAgICAgICAgICAgQk5fZnJlZShyZXQtPnApOworLSAgICAgICAgaWYg KHJldC0+cSkKKy0gICAgICAgICAgICBCTl9mcmVlKHJldC0+cSk7CistICAgICAgICBpZiAocmV0 LT5nKQorLSAgICAgICAgICAgIEJOX2ZyZWUocmV0LT5nKTsKKy0gICAgICAgIHJldC0+cCA9IEJO X2R1cChwKTsKKy0gICAgICAgIHJldC0+cSA9IEJOX2R1cChxKTsKKy0gICAgICAgIHJldC0+ZyA9 IEJOX2R1cChnKTsKKy0gICAgICAgIGlmIChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVM TCB8fCByZXQtPmcgPT0gTlVMTCkgeworLSAgICAgICAgICAgIG9rID0gMDsKKy0gICAgICAgICAg ICBnb3RvIGVycjsKKy0gICAgICAgIH0KKy0gICAgICAgIGlmIChjb3VudGVyX3JldCAhPSBOVUxM KQorLSAgICAgICAgICAgICpjb3VudGVyX3JldCA9IGNvdW50ZXI7CisgICAgICAgICBpZiAoaF9y ZXQgIT0gTlVMTCkKKyAgICAgICAgICAgICAqaF9yZXQgPSBoOworLSAgICAgICAgaWYgKHNlZWRf b3V0KQorLSAgICAgICAgICAgIG1lbWNweShzZWVkX291dCwgc2VlZCwgcXNpemUpOworLSAgICB9 CistICAgIGlmIChjdHgpIHsKKy0gICAgICAgIEJOX0NUWF9lbmQoY3R4KTsKKy0gICAgICAgIEJO X0NUWF9mcmVlKGN0eCk7CisgICAgIH0KKyAgICAgaWYgKG1vbnQgIT0gTlVMTCkKKyAgICAgICAg IEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7CisgICAgIHJldHVybiBvazsKKyB9CisgCistIyBpZmRl ZiBPUEVOU1NMX0ZJUFMKKy0jICB1bmRlZiBmaXBzX2RzYV9idWlsdGluX3BhcmFtZ2VuMgorLWV4 dGVybiBpbnQgZmlwc19kc2FfYnVpbHRpbl9wYXJhbWdlbjIoRFNBICpyZXQsIHNpemVfdCBMLCBz aXplX3QgTiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVW UF9NRCAqZXZwbWQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLCBpbnQgaWR4LAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25n ICpoX3JldCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNC ICpjYik7CistIyBlbmRpZgorLQorIC8qCisgICogVGhpcyBpcyBhIHBhcmFtZXRlciBnZW5lcmF0 aW9uIGFsZ29yaXRobSBmb3IgdGhlIERTQTIgYWxnb3JpdGhtIGFzCisgICogZGVzY3JpYmVkIGlu IEZJUFMgMTg2LTMuCitAQCAtNDE1LDE0ICs0NzIsNiBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1n ZW4yKERTQSAqcmV0LCBzaXplCisgICAgIEVWUF9NRF9DVFggbWN0eDsKKyAgICAgdW5zaWduZWQg aW50IGggPSAyOworIAorLSMgaWZkZWYgT1BFTlNTTF9GSVBTCistCistICAgIGlmIChGSVBTX21v ZGUoKSkKKy0gICAgICAgIHJldHVybiBmaXBzX2RzYV9idWlsdGluX3BhcmFtZ2VuMihyZXQsIEws IE4sIGV2cG1kLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl ZWRfaW4sIHNlZWRfbGVuLCBpZHgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2VlZF9vdXQsIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworLSMgZW5kaWYKKy0K KyAgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKyAKKyAgICAgaWYgKGV2cG1kID09IE5VTEwp IHsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZHNhL2RzYS5oCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9k c2EuaC5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuMzgyOTExMjI3ICswMTAwCisrKysgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL2RzYS9kc2EuaAkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxMzkxNjQ1NSAr MDEwMAorQEAgLTg4LDYgKzg4LDggQEAKKyAjICBkZWZpbmUgT1BFTlNTTF9EU0FfTUFYX01PRFVM VVNfQklUUyAgIDEwMDAwCisgIyBlbmRpZgorIAorKyMgZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgIyBkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9Q ICAgMHgwMQorIC8qCisgICogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gRFNBIGltcGxl bWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKK0BAIC0yNjUsNiArMjY3LDIwIEBAIGlu dCBEU0FfcHJpbnRfZnAoRklMRSAqYnAsIGNvbnN0IERTQSAqeCwKKyBESCAqRFNBX2R1cF9ESChj b25zdCBEU0EgKnIpOworICMgZW5kaWYKKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworK2ludCBG SVBTX2RzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFi aXRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2Vl ZF9pbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2VlZF9sZW4sIGlu dCAqY291bnRlcl9yZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisraW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJO X0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLCB1bnNpZ25lZCBjaGFyICpzZWVkLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc2VlZF9sZW4sIEJJR05VTSAqKnBfcmV0LCBCSUdOVU0g KipxX3JldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgQk5f R0VOQ0IgKmNiKTsKKytpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVN ICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqKmdfcmV0LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5fR0VOQ0IgKmNiKTsKKysjIGVuZGlmCisrCisg IyBkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9kc2FfcGFyYW1nZW5fYml0cyhjdHgsIG5iaXRzKSBc CisgICAgICAgICBFVlBfUEtFWV9DVFhfY3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlf T1BfUEFSQU1HRU4sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9QS0VZ X0NUUkxfRFNBX1BBUkFNR0VOX0JJVFMsIG5iaXRzLCBOVUxMKQorQEAgLTI4NywxMSArMzAzLDE0 IEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7CisgIyBkZWZpbmUgRFNBX0ZfRE9f RFNBX1BSSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAorICMgZGVmaW5lIERT QV9GX0RTQVBBUkFNU19QUklOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKKyAjIGRl ZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAgICAgICAgICAgICAgICAgICAgICAgICAgMTAx CistIyBkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yICAgICAgICAgICAgICAgICAg ICAgIDEyNgorKyMgZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiAgICAgICAgICAgICAg ICAgICAgICAgICAxMjQKKysjIGRlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiAgICAg ICAgICAgICAgICAgICAgICAgMTIzCisrIyBkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1H RU4yICAgICAgICAgICAgICAgICAgICAgIDIyNgorICMgZGVmaW5lIERTQV9GX0RTQV9ET19TSUdO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTIKKyAjIGRlZmluZSBEU0FfRl9EU0Ff RE9fVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzCistIyBkZWZpbmUgRFNB X0ZfRFNBX0dFTkVSQVRFX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNAorLSMgZGVm aW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYICAgICAgICAgICAgICAgICAxMjMK KysjIGRlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfS0VZICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTI2CisrIyBkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVggICAgICAg ICAgICAgICAgIDEyNworKyMgZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTICAg LyogdW51c2VkICovICAgICAxMjUKKyAjIGRlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisgIyBkZWZpbmUgRFNBX0ZfRFNBX1BBUkFNX0RF Q09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOQorICMgZGVmaW5lIERTQV9GX0RTQV9Q UklOVF9GUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDUKK0BAIC0zMTcsMTIgKzMz NiwxNiBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5lIERTQV9S X0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSAgICAgICAgICAgICAgICAxMDAKKyAjIGRlZmlu ZSBEU0FfUl9ERUNPREVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA0Cisg IyBkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSAgICAgICAgICAgICAgICAgICAgICAg IDEwNgorLSMgZGVmaW5lIERTQV9SX0lOVkFMSURfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAg ICAgICAgICAxMTIKKysjIGRlZmluZSBEU0FfUl9JTlZBTElEX1BBUkFNRVRFUlMgICAgICAgICAg ICAgICAgICAgICAgICAgMjEyCisrIyBkZWZpbmUgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCAgICAg ICAgICAgICAgICAgICAgICAgICAgIDExMworKyMgZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCAgICAgICAgICAgICAgICAgICAgICAgICAxMTAKKyAjIGRlZmluZSBEU0FfUl9NSVNTSU5H X1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgICAgMTAxCisgIyBkZWZpbmUgRFNBX1Jf TU9EVUxVU19UT09fTEFSR0UgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMworLSMgZGVmaW5l IERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUyAgICAgICAgICAgICAgICAgICAgICAxMTAKKysj IGRlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMgICAgICAgICAgICAgICAgICAgICAg MTEyCisgIyBkZWZpbmUgRFNBX1JfTk9OX0ZJUFNfRFNBX01FVEhPRCAgICAgICAgICAgICAgICAg ICAgICAgIDExMQorKyMgZGVmaW5lIERTQV9SX05PTl9GSVBTX01FVEhPRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMTEKKyAjIGRlZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVCAgICAg ICAgICAgICAgICAgICAgICAgICAgMTA3CisrIyBkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9B TExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1bnVzZWQgKi8gMTEyCisgIyBkZWZpbmUgRFNBX1JfUEFS QU1FVEVSX0VOQ09ESU5HX0VSUk9SICAgICAgICAgICAgICAgICAgIDEwNQorICMgZGVmaW5lIERT QV9SX1FfTk9UX1BSSU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTMKKyAKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNh L2RzYV9rZXkuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2Ffa2V5LmMJMjAxNi0wMy0wMSAxNjozMzowNy42 MTQ5MTY0NzggKzAxMDAKK0BAIC02Niw2ICs2NiwzNCBAQAorIAorICMgaWZkZWYgT1BFTlNTTF9G SVBTCisgIyAgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrIyAgaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysKKytzdGF0aWMgaW50IGZpcHNfY2hlY2tfZHNhKERTQSAqZHNhKQorK3sKKysgICAg RVZQX1BLRVkgKnBrOworKyAgICB1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBD aGVjayBEYXRhIjsKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGlmICgocGsgPSBFVlBfUEtF WV9uZXcoKSkgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBFVlBfUEtFWV9z ZXQxX0RTQShwaywgZHNhKTsKKysKKysgICAgaWYgKGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywgdGJzLCAtMSwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkpCisrICAgICAgICByZXQgPSAxOwor KworKyBlcnI6CisrICAgIGlmIChyZXQgPT0gMCkgeworKyAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19DSEVDS19EU0EsIEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrICAgICAgICBm aXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrICAgIH0KKysKKysgICAgaWYgKHBrKQorKyAgICAg ICAgRVZQX1BLRVlfZnJlZShwayk7CisrCisrICAgIHJldHVybiByZXQ7CisrfQorKworICMgZW5k aWYKKyAKKyBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSk7CitAQCAtODEs MTAgKzEwOSw2IEBAIGludCBEU0FfZ2VuZXJhdGVfa2V5KERTQSAqZHNhKQorICMgZW5kaWYKKyAg ICAgaWYgKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKKyAgICAgICAgIHJldHVybiBkc2EtPm1ldGgt PmRzYV9rZXlnZW4oZHNhKTsKKy0jIGlmZGVmIE9QRU5TU0xfRklQUworLSAgICBpZiAoRklQU19t b2RlKCkpCistICAgICAgICByZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfa2V5KGRzYSk7CistIyBl bmRpZgorICAgICByZXR1cm4gZHNhX2J1aWx0aW5fa2V5Z2VuKGRzYSk7CisgfQorIAorQEAgLTk0 LDYgKzExOCwxNCBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKKyAg ICAgQk5fQ1RYICpjdHggPSBOVUxMOworICAgICBCSUdOVU0gKnB1Yl9rZXkgPSBOVUxMLCAqcHJp dl9rZXkgPSBOVUxMOworIAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21v ZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykKKysgICAgICAg ICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkgeworKyAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1Jf S0VZX1NJWkVfVE9PX1NNQUxMKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrIyBlbmRp ZgorKworICAgICBpZiAoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKKyAgICAgICAgIGdv dG8gZXJyOworIAorQEAgLTEzMSw2ICsxNjMsMTMgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9r ZXlnZW4oRFNBICpkc2EpCisgCisgICAgIGRzYS0+cHJpdl9rZXkgPSBwcml2X2tleTsKKyAgICAg ZHNhLT5wdWJfa2V5ID0gcHViX2tleTsKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAo RklQU19tb2RlKCkgJiYgIWZpcHNfY2hlY2tfZHNhKGRzYSkpIHsKKysgICAgICAgIGRzYS0+cHVi X2tleSA9IE5VTEw7CisrICAgICAgICBkc2EtPnByaXZfa2V5ID0gTlVMTDsKKysgICAgICAgIGdv dG8gZXJyOworKyAgICB9CisrIyBlbmRpZgorICAgICBvayA9IDE7CisgCisgIGVycjoKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2RzYS9kc2FfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2Rz YV9saWIuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2FfbGliLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTQ5 MTY0NzggKzAxMDAKK0BAIC04NiwxNCArODYsNyBAQCB2b2lkIERTQV9zZXRfZGVmYXVsdF9tZXRo b2QoY29uc3QgRFNBX01FCisgY29uc3QgRFNBX01FVEhPRCAqRFNBX2dldF9kZWZhdWx0X21ldGhv ZCh2b2lkKQorIHsKKyAgICAgaWYgKCFkZWZhdWx0X0RTQV9tZXRob2QpIHsKKy0jaWZkZWYgT1BF TlNTTF9GSVBTCistICAgICAgICBpZiAoRklQU19tb2RlKCkpCistICAgICAgICAgICAgcmV0dXJu IEZJUFNfZHNhX29wZW5zc2woKTsKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgICByZXR1cm4g RFNBX09wZW5TU0woKTsKKy0jZWxzZQorICAgICAgICAgZGVmYXVsdF9EU0FfbWV0aG9kID0gRFNB X09wZW5TU0woKTsKKy0jZW5kaWYKKyAgICAgfQorICAgICByZXR1cm4gZGVmYXVsdF9EU0FfbWV0 aG9kOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5m aXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuMzg0OTEx MjcyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCTIwMTYt MDMtMDEgMTY6MzM6MDcuNjE0OTE2NDc4ICswMTAwCitAQCAtNTYsNyArNTYsNyBAQAorIAorIGlu dCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0 cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCwgY29uc3Qg dW5zaWduZWQgY2hhciAqc2VlZF9pbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IHNlZWRfbGVuLCB1bnNpZ25lZCBjaGFyICpzZWVkX291dCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IHNlZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNv dW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgQk5fR0VOQ0IgKmNiKTsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2Ev ZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX29zc2wuYworLS0t IG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzCTIwMTYtMDMtMDEgMTQ6 MzU6NTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2Ff b3NzbC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE0OTE2NDc4ICswMTAwCitAQCAtNjUsNiArNjUs OSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMg aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIERTQV9TSUcgKmRz YV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7 Cisgc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJ R05VTSAqKmtpbnZwLAorQEAgLTgzLDcgKzg2LDcgQEAgc3RhdGljIERTQV9NRVRIT0Qgb3BlbnNz bF9kc2FfbWV0aCA9IHsKKyAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRzYV9i bl9tb2RfZXhwLCAqLworICAgICBkc2FfaW5pdCwKKyAgICAgZHNhX2ZpbmlzaCwKKy0gICAgMCwK KysgICAgRFNBX0ZMQUdfRklQU19NRVRIT0QsCisgICAgIE5VTEwsCisgICAgIE5VTEwsCisgICAg IE5VTEwKK0BAIC0xNDAsNiArMTQzLDE5IEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihj b25zdCB1bnNpZ24KKyAgICAgRFNBX1NJRyAqcmV0ID0gTlVMTDsKKyAgICAgaW50IG5vcmVkbyA9 IDA7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWls ZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRFNBX0RPX1NJR04sIEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAg ICBpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCisrICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAgIERTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwg RFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9 CisrI2VuZGlmCisrCisgICAgIEJOX2luaXQoJm0pOworICAgICBCTl9pbml0KCZ4cik7CisgCitA QCAtMzMwLDYgKzM0NiwxOCBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWdu ZWQKKyAgICAgICAgIERTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9CQURfUV9WQUxV RSk7CisgICAgICAgICByZXR1cm4gLTE7CisgICAgIH0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNf Rl9EU0FfRE9fVkVSSUZZLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAg cmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+Zmxh Z3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykKKysgICAgICAgICYmIChCTl9udW1fYml0cyhk c2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgeworKyAgICAgICAg RFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Cisr ICAgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZW5kaWYKKyAKKyAgICAgaWYgKEJOX251bV9i aXRzKGRzYS0+cCkgPiBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTKSB7CisgICAgICAgICBE U0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAg LTQxMCw2ICs0MzgsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQK KyAKKyBzdGF0aWMgaW50IGRzYV9pbml0KERTQSAqZHNhKQorIHsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAgICAgZHNhLT5mbGFn cyB8PSBEU0FfRkxBR19DQUNIRV9NT05UX1A7CisgICAgIHJldHVybiAoMSk7CisgfQorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2FfcG1ldGguYy5maXBzIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNh L2RzYV9wbWV0aC5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jCTIwMTYtMDMtMDEgMTY6MzM6 MDcuNjE0OTE2NDc4ICswMTAwCitAQCAtMjUzLDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgcGtleV9k c2FfcGFyYW1nZW4oRVZQX1BLRVlfQ1QKKyAgICAgaWYgKCFkc2EpCisgICAgICAgICByZXR1cm4g MDsKKyAgICAgcmV0ID0gZHNhX2J1aWx0aW5fcGFyYW1nZW4oZHNhLCBkY3R4LT5uYml0cywgZGN0 eC0+cWJpdHMsIGRjdHgtPnBtZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgcGNiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgcGNiKTsKKyAgICAgaWYgKHJldCkKKyAgICAgICAg IEVWUF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNhKTsKKyAgICAgZWxzZQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2F0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZHNhL2RzYXRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhdGVzdC5j LmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZHNhL2RzYXRlc3QuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNDkxNjQ3OCAr MDEwMAorQEAgLTEwMCwzNiArMTAwLDQxIEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgZHNhX2Ni KGludCBwLCBpbnQKKyAgKiBQVUIgMTg2IGFuZCBhbHNvIGFwcGVhciBpbiBBcHBlbmRpeCA1IHRv IEZJUFMgUElCIDE4Ni0xCisgICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7 CistICAgIDB4ZDUsIDB4MDEsIDB4NGUsIDB4NGIsIDB4NjAsIDB4ZWYsIDB4MmIsIDB4YTgsIDB4 YjYsIDB4MjEsIDB4MWIsIDB4NDAsCistICAgIDB4NjIsIDB4YmEsIDB4MzIsIDB4MjQsIDB4ZTAs IDB4NDIsIDB4N2QsIDB4ZDMsCisrICAgIDB4MDIsIDB4NDcsIDB4MTEsIDB4OTIsIDB4MTEsIDB4 ODgsIDB4QzgsIDB4RkIsIDB4QUYsIDB4NDgsIDB4NEMsIDB4NjIsCisrICAgIDB4REYsIDB4QTUs IDB4QkUsIDB4QTAsIDB4QTQsIDB4M0MsIDB4NTYsIDB4RTMsCisgfTsKKyAKKyBzdGF0aWMgdW5z aWduZWQgY2hhciBvdXRfcFtdID0geworLSAgICAweDhkLCAweGYyLCAweGE0LCAweDk0LCAweDQ5 LCAweDIyLCAweDc2LCAweGFhLAorLSAgICAweDNkLCAweDI1LCAweDc1LCAweDliLCAweGIwLCAw eDY4LCAweDY5LCAweGNiLAorLSAgICAweGVhLCAweGMwLCAweGQ4LCAweDNhLCAweGZiLCAweDhk LCAweDBjLCAweGY3LAorLSAgICAweGNiLCAweGI4LCAweDMyLCAweDRmLCAweDBkLCAweDc4LCAw eDgyLCAweGU1LAorLSAgICAweGQwLCAweDc2LCAweDJmLCAweGM1LCAweGI3LCAweDIxLCAweDBl LCAweGFmLAorLSAgICAweGMyLCAweGU5LCAweGFkLCAweGFjLCAweDMyLCAweGFiLCAweDdhLCAw eGFjLAorLSAgICAweDQ5LCAweDY5LCAweDNkLCAweGZiLCAweGY4LCAweDM3LCAweDI0LCAweGMy LAorLSAgICAweGVjLCAweDA3LCAweDM2LCAweGVlLCAweDMxLCAweGM4LCAweDAyLCAweDkxLAor KyAgICAweEFDLCAweENCLCAweDFFLCAweDYzLCAweDYwLCAweDY5LCAweDBDLCAweEZCLCAweDA2 LCAweDE5LCAweDY4LCAweDNFLAorKyAgICAweEE1LCAweDAxLCAweDVBLCAweEEyLCAweDE1LCAw eDVDLCAweEUyLCAweDk5LCAweDJELCAweEQ1LCAweDMwLCAweDk5LAorKyAgICAweDdFLCAweDVG LCAweDhELCAweEUyLCAweEY3LCAweEM2LCAweDJFLCAweDhELCAweEEzLCAweDlGLCAweDU4LCAw eEFELAorKyAgICAweEQ2LCAweEE5LCAweDdELCAweDBFLCAweDBELCAweDk1LCAweDUzLCAweEE2 LCAweDcxLCAweDNBLCAweERFLCAweEFCLAorKyAgICAweEFDLCAweEU5LCAweEY0LCAweDM2LCAw eDU1LCAweDlFLCAweEI5LCAweEQ2LCAweDkzLCAweEJGLCAweEYzLCAweDE4LAorKyAgICAweDFD LCAweDE0LCAweDdCLCAweEE1LCAweDQyLCAweDJFLCAweENELCAweDAwLCAweEVCLCAweDM1LCAw eDNCLCAweDFCLAorKyAgICAweEE4LCAweDUxLCAweEJCLCAweEUxLCAweDU4LCAweDQyLCAweDg1 LCAweDg0LCAweDIyLCAweEE3LCAweDk3LCAweDVFLAorKyAgICAweDk5LCAweDZGLCAweDM4LCAw eDIwLCAweEJELCAweDlELCAweEI2LCAweEQ5LCAweDMzLCAweDM3LCAweDJBLCAweEZELAorKyAg ICAweEJCLCAweEQ0LCAweEJDLCAweDBDLCAweDJBLCAweDY3LCAweENCLCAweDlGLCAweEJCLCAw eERGLCAweEY5LCAweDkzLAorKyAgICAweEFBLCAweEQ2LCAweEYwLCAweEQ2LCAweDk1LCAweDBC LCAweDVELCAweDY1LCAweDE0LCAweEQwLCAweDE4LCAweDlELAorKyAgICAweEM2LCAweEFGLCAw eEYwLCAweEM2LCAweDM3LCAweDdDLCAweEYzLCAweDVGLAorIH07CisgCisgc3RhdGljIHVuc2ln bmVkIGNoYXIgb3V0X3FbXSA9IHsKKy0gICAgMHhjNywgMHg3MywgMHgyMSwgMHg4YywgMHg3Mywg MHg3ZSwgMHhjOCwgMHhlZSwKKy0gICAgMHg5OSwgMHgzYiwgMHg0ZiwgMHgyZCwgMHhlZCwgMHgz MCwgMHhmNCwgMHg4ZSwKKy0gICAgMHhkYSwgMHhjZSwgMHg5MSwgMHg1ZiwKKysgICAgMHhFMywg MHg4RSwgMHg1RSwgMHg2RCwgMHhCRiwgMHgyQiwgMHg3OSwgMHhGOCwgMHhDNSwgMHg0QiwgMHg4 OSwgMHg4QiwKKysgICAgMHhCQSwgMHgyRCwgMHg5MSwgMHhDMywgMHg2QywgMHg4MCwgMHhBQywg MHg4NywKKyB9OworIAorIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9nW10gPSB7CistICAgIDB4 NjIsIDB4NmQsIDB4MDIsIDB4NzgsIDB4MzksIDB4ZWEsIDB4MGEsIDB4MTMsCistICAgIDB4NDEs IDB4MzEsIDB4NjMsIDB4YTUsIDB4NWIsIDB4NGMsIDB4YjUsIDB4MDAsCistICAgIDB4MjksIDB4 OWQsIDB4NTUsIDB4MjIsIDB4OTUsIDB4NmMsIDB4ZWYsIDB4Y2IsCistICAgIDB4M2IsIDB4ZmYs IDB4MTAsIDB4ZjMsIDB4OTksIDB4Y2UsIDB4MmMsIDB4MmUsCistICAgIDB4NzEsIDB4Y2IsIDB4 OWQsIDB4ZTUsIDB4ZmEsIDB4MjQsIDB4YmEsIDB4YmYsCistICAgIDB4NTgsIDB4ZTUsIDB4Yjcs IDB4OTUsIDB4MjEsIDB4OTIsIDB4NWMsIDB4OWMsCistICAgIDB4YzQsIDB4MmUsIDB4OWYsIDB4 NmYsIDB4NDYsIDB4NGIsIDB4MDgsIDB4OGMsCistICAgIDB4YzUsIDB4NzIsIDB4YWYsIDB4NTMs IDB4ZTYsIDB4ZDcsIDB4ODgsIDB4MDIsCisrICAgIDB4NDIsIDB4NEEsIDB4MDQsIDB4NEUsIDB4 NzksIDB4QjQsIDB4OTksIDB4N0YsIDB4RkQsIDB4NTgsIDB4MzYsIDB4MkMsCisrICAgIDB4MUIs IDB4NUYsIDB4MTgsIDB4N0UsIDB4MEQsIDB4Q0MsIDB4QUIsIDB4ODEsIDB4QzksIDB4NUQsIDB4 MTAsIDB4Q0UsCisrICAgIDB4NEUsIDB4ODAsIDB4N0UsIDB4NTgsIDB4QjQsIDB4MzQsIDB4M0Ys IDB4QTcsIDB4NDUsIDB4QzcsIDB4QUEsIDB4MzYsCisrICAgIDB4MjQsIDB4NDIsIDB4QTksIDB4 M0IsIDB4RTgsIDB4MEUsIDB4MDQsIDB4MDIsIDB4MkQsIDB4RkIsIDB4QTYsIDB4MTMsCisrICAg IDB4QjksIDB4QjUsIDB4MTUsIDB4QTUsIDB4NTYsIDB4MDcsIDB4MzUsIDB4RTQsIDB4MDMsIDB4 QjYsIDB4NzksIDB4N0MsCisrICAgIDB4NjIsIDB4REQsIDB4REYsIDB4M0YsIDB4NzEsIDB4M0Es IDB4OUQsIDB4OEIsIDB4QzQsIDB4RjYsIDB4RTcsIDB4MUQsCisrICAgIDB4NTIsIDB4QTgsIDB4 QTksIDB4NDMsIDB4MUQsIDB4MzMsIDB4NTEsIDB4ODgsIDB4MzksIDB4QkQsIDB4NzMsIDB4RTks CisrICAgIDB4NUYsIDB4QkUsIDB4ODIsIDB4NDksIDB4MjcsIDB4RTYsIDB4QjUsIDB4NTMsIDB4 QzEsIDB4MzgsIDB4QUMsIDB4MkYsCisrICAgIDB4NkQsIDB4OTcsIDB4NkMsIDB4RUIsIDB4Njcs IDB4QzEsIDB4NUYsIDB4NjcsIDB4RjgsIDB4MzUsIDB4MDUsIDB4NUUsCisrICAgIDB4RDUsIDB4 NjgsIDB4ODAsIDB4QUEsIDB4OTYsIDB4Q0EsIDB4MEIsIDB4OEEsIDB4RTYsIDB4RjEsIDB4QjEs IDB4NDEsCisrICAgIDB4QzYsIDB4NzUsIDB4OTQsIDB4MEEsIDB4MEEsIDB4MkEsIDB4RkEsIDB4 MjksCisgfTsKKyAKKyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHIxW10gPSAiMTIzNDU2 Nzg5MDEyMzQ1Njc4OTAiOworQEAgLTE2Miw3ICsxNjcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCisgICAgIEJJT19wcmludGYoYmlvX2VyciwgInRlc3QgZ2VuZXJhdGlvbiBv ZiBEU0EgcGFyYW1ldGVyc1xuIik7CisgCisgICAgIEJOX0dFTkNCX3NldCgmY2IsIGRzYV9jYiwg YmlvX2Vycik7CistICAgIGlmICgoKGRzYSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9n ZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgNTEyLAorKyAgICBpZiAoKChkc2EgPSBEU0FfbmV3 KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNlZWQsIDIwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY291bnRlciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgs ICZjYikpCitAQCAtMTc2LDggKzE4MSw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKKyAgICAgQklPX3ByaW50ZihiaW9fZXJyLCAiXG5jb3VudGVyPSVkIGg9JWxkXG4iLCBjb3Vu dGVyLCBoKTsKKyAKKyAgICAgRFNBX3ByaW50KGJpb19lcnIsIGRzYSwgMCk7CistICAgIGlmIChj b3VudGVyICE9IDEwNSkgeworLSAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCAiY291bnRlciBz aG91bGQgYmUgMTA1XG4iKTsKKysgICAgaWYgKGNvdW50ZXIgIT0gMjM5KSB7CisrICAgICAgICBC SU9fcHJpbnRmKGJpb19lcnIsICJjb3VudGVyIHNob3VsZCBiZSAyMzlcbiIpOworICAgICAgICAg Z290byBlbmQ7CisgICAgIH0KKyAgICAgaWYgKGggIT0gMikgeworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v ZW5naW5lL2VuZ19hbGwuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9lbmdpbmUvZW5nX2Fs bC5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNDkx NjQ3OCArMDEwMAorQEAgLTU5LDExICs1OSwyNSBAQAorIAorICNpbmNsdWRlICJjcnlwdGxpYi5o IgorICNpbmNsdWRlICJlbmdfaW50LmgiCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgdm9pZCBFTkdJTkVfbG9hZF9idWlsdGlu X2VuZ2luZXModm9pZCkKKyB7CisgICAgIC8qIFNvbWUgRU5HSU5FcyBuZWVkIHRoaXMgKi8KKyAg ICAgT1BFTlNTTF9jcHVpZF9zZXR1cCgpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgT1BF TlNTTF9pbml0X2xpYnJhcnkoKTsKKysgICAgaWYgKEZJUFNfbW9kZSgpKSB7CisrICAgICAgICAv KiBXZSBhbGxvdyBsb2FkaW5nIGR5bmFtaWMgZW5naW5lIGFzIGEgdGhpcmQgcGFydHkKKysgICAg ICAgICAgIGVuZ2luZSBtaWdodCBiZSBGSVBTIHZhbGlkYXRlZC4KKysgICAgICAgICAgIFVzZXIg aXMgZGlzYWxsb3dlZCB0byBsb2FkIG5vbi12YWxpZGF0ZWQgZW5naW5lcworKyAgICAgICAgICAg Ynkgc2VjdXJpdHkgcG9saWN5LiAqLworKyAgICAgICAgRU5HSU5FX2xvYWRfZHluYW1pYygpOwor KyAgICAgICAgcmV0dXJuOworKyAgICB9CisrI2VuZGlmCisgI2lmIDAKKyAgICAgLyoKKyAgICAg ICogVGhlcmUncyBubyBsb25nZXIgYW55IG5lZWQgZm9yIGFuICJvcGVuc3NsIiBFTkdJTkUgdW5s ZXNzLCBvbmUgZGF5LCBpdAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9jX2Fs bGMuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvY19hbGxjLmMKKy0tLSBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZXZwL2NfYWxsYy5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTYt MDMtMDEgMTY6MzM6MDcuNjE1OTE2NTAwICswMTAwCitAQCAtNjUsNiArNjUsMTAgQEAKKyB2b2lk IE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgeworIAorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysgICAgT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysgICAgaWYgKCFGSVBTX21vZGUoKSkg eworKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19ERVMKKyAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Rlc19jZmIoKSk7CisgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKK0BA IC0yMzgsNCArMjQyLDY0IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAg ICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2FtZWxsaWFfMjU2X2NiYywgIkNBTUVMTElBMjU2 Iik7CisgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9jYmMsICJjYW1l bGxpYTI1NiIpOworICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgfSBlbHNlIHsK KysjIGlmbmRlZiBPUEVOU1NMX05PX0RFUworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rl c19lZGVfY2ZiKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigp KTsKKysKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX29mYigpKTsKKysgICAg ICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19vZmIoKSk7CisrCisrICAgICAgICBFVlBf YWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jYmMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2VkZTNfY2JjKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVz X2VkZTNfY2JjLCAiREVTMyIpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVz X2VkZTNfY2JjLCAiZGVzMyIpOworKworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19l ZGUoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTMoKSk7CisrIyBlbmRp ZgorKworKyMgaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrICAgICAgICBFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzEyOF9lY2IoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9j YmMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7CisrICAg ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jZmIxKCkpOworKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiOCgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X29mYigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2N0 cigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKKysgICAg ICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3h0cygpKTsKKysgICAgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTI4X2NjbSgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTI4X3dyYXAoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4 X2NiYywgIkFFUzEyOCIpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEy OF9jYmMsICJhZXMxMjgiKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2Vj YigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKKysgICAg ICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYigpKTsKKysgICAgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTkyX2NmYjEoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzE5Ml9jZmI4KCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfb2Zi KCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOworKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZ2NtKCkpOworKyAgICAgICAgRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18xOTJfY2NtKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xOTJfd3JhcCgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJf Y2JjLCAiQUVTMTkyIik7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTky X2NiYywgImFlczE5MiIpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNi KCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOworKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiKCkpOworKyAgICAgICAgRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18yNTZfY2ZiMSgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMjU2X2NmYjgoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9vZmIo KSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jdHIoKSk7CisrICAgICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7CisrICAgICAgICBFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzI1Nl94dHMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9jY20oKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl93cmFwKCkp OworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsICJBRVMyNTYi KTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCAiYWVzMjU2 Iik7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvY19h bGxkLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2NfYWxsZC5jLmZpcHMJMjAxNi0w My0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v ZXZwL2NfYWxsZC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE1OTE2NTAwICswMTAwCitAQCAtNjQs NTEgKzY0LDgxIEBACisgCisgdm9pZCBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorIHsK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIE9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrICAg IGlmICghRklQU19tb2RlKCkpIHsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fTUQ0Cist ICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChF VlBfbWQ0KCkpOworICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19NRDUKKy0gICAgRVZQX2Fk ZF9kaWdlc3QoRVZQX21kNSgpKTsKKy0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCAi c3NsMi1tZDUiKTsKKy0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCAic3NsMy1tZDUi KTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZDUoKSk7CisrICAgICAgICBFVlBfYWRk X2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJzc2wyLW1kNSIpOworKyAgICAgICAgRVZQX2FkZF9kaWdl c3RfYWxpYXMoU05fbWQ1LCAic3NsMy1tZDUiKTsKKyAjZW5kaWYKKyAjaWYgIWRlZmluZWQoT1BF TlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMCkKKy0gICAgRVZQX2FkZF9k aWdlc3QoRVZQX3NoYSgpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7Cisg IyBpZm5kZWYgT1BFTlNTTF9OT19EU0EKKy0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX2RzcygpKTsK KysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MoKSk7CisgIyBlbmRpZgorICNlbmRpZgor ICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEx KQorLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsKKy0gICAgRVZQX2FkZF9kaWdlc3Rf YWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOworLSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhT Tl9zaGExV2l0aFJTQUVuY3J5cHRpb24sIFNOX3NoYTFXaXRoUlNBKTsKKysgICAgICAgIEVWUF9h ZGRfZGlnZXN0KEVWUF9zaGExKCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f c2hhMSwgInNzbDMtc2hhMSIpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hh MVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9zaGExV2l0aFJTQSk7CisgIyBpZm5kZWYgT1BFTlNTTF9O T19EU0EKKy0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7CistICAgIEVWUF9hZGRfZGln ZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCBTTl9kc2FXaXRoU0hBMV8yKTsKKy0gICAgRVZQX2Fk ZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsICJEU1MxIik7CistICAgIEVWUF9hZGRfZGln ZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiZHNzMSIpOworKyAgICAgICAgRVZQX2FkZF9kaWdl c3QoRVZQX2RzczEoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRo U0hBMSwgU05fZHNhV2l0aFNIQTFfMik7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhT Tl9kc2FXaXRoU0hBMSwgIkRTUzEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNO X2RzYVdpdGhTSEExLCAiZHNzMSIpOworICMgZW5kaWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX0VD RFNBCistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKKysgICAgICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9lY2RzYSgpKTsKKyAjIGVuZGlmCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKE9Q RU5TU0xfTk9fTURDMikgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ERVMpCistICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9tZGMyKCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kYzIoKSk7 CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1JJUEVNRAorLSAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfcmlwZW1kMTYwKCkpOworLSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9yaXBlbWQx NjAsICJyaXBlbWQiKTsKKy0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fcmlwZW1kMTYwLCAi cm1kMTYwIik7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfcmlwZW1kMTYwKCkpOworKyAg ICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fcmlwZW1kMTYwLCAicmlwZW1kIik7CisrICAg ICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9yaXBlbWQxNjAsICJybWQxNjAiKTsKKyAjZW5k aWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9z aGEyMjQoKSk7CistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7CisrICAgICAgICBF VlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQ X3NoYTI1NigpKTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCistICAgIEVW UF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7CistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1 MTIoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKyAgICAgICAg RVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xf Tk9fV0hJUkxQT09MCistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF93aGlybHBvb2woKSk7CisrICAg ICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkpOworKyNlbmRpZgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysgICAgfSBlbHNlIHsKKysjIGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB KSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChF VlBfc2hhMSgpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsICJzc2wz LXNoYTEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5j cnlwdGlvbiwgU05fc2hhMVdpdGhSU0EpOworKyMgIGlmbmRlZiBPUEVOU1NMX05PX0RTQQorKyAg ICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2Vz dF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgU05fZHNhV2l0aFNIQTFfMik7CisrICAgICAgICBFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgIkRTUzEiKTsKKysgICAgICAgIEVWUF9h ZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiZHNzMSIpOworKyMgIGVuZGlmCisrIyAg aWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9lY2Rz YSgpKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysjIGlmbmRlZiBPUEVOU1NMX05PX1NIQTI1Ngor KyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKKysgICAgICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9zaGEyNTYoKSk7CisrIyBlbmRpZgorKyMgaWZuZGVmIE9QRU5TU0xfTk9fU0hB NTEyCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKyAgICAgICAgRVZQ X2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysjIGVuZGlmCisrICAgIH0KKyAjZW5kaWYKKyB9 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL2V2cC9kaWdlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9l dnAvZGlnZXN0LmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvZGlnZXN0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42 MTU5MTY1MDAgKzAxMDAKK0BAIC0xNDMsMTggKzE0Myw1NSBAQCBpbnQgRVZQX0RpZ2VzdEluaXQo RVZQX01EX0NUWCAqY3R4LCBjb25zCisgICAgIHJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgs IHR5cGUsIE5VTEwpOworIH0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogVGhlIHB1 cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5v biBGSVBTCisrICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3Jz LgorKyAqLworKworK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAqY3R4KQorK3sKKysg ICAgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgaW5pdCIpOworKyAgICByZXR1cm4gMDsKKyt9 CisrCisrc3RhdGljIGludCBiYWRfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGNvdW50KQorK3sKKysgICAgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3Qg dXBkYXRlIik7CisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGJhZF9maW5hbChF VlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kKQorK3sKKysgICAgRklQU19FUlJPUl9J R05PUkVEKCJEaWdlc3QgRmluYWwiKTsKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBj b25zdCBFVlBfTUQgYmFkX21kID0geworKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAw LAorKyAgICBiYWRfaW5pdCwKKysgICAgYmFkX3VwZGF0ZSwKKysgICAgYmFkX2ZpbmFsLAorKyAg ICBOVUxMLAorKyAgICBOVUxMLAorKyAgICBOVUxMLAorKyAgICAwLAorKyAgICB7MCwgMCwgMCwg MH0sCisrfTsKKysKKysjZW5kaWYKKysKKyBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NU WCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqaW1wbCkKKyB7CisgICAgIEVWUF9N RF9DVFhfY2xlYXJfZmxhZ3MoY3R4LCBFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7CisgI2lmZGVm IE9QRU5TU0xfRklQUworLSAgICAvKiBJZiBGSVBTIG1vZGUgc3dpdGNoIHRvIGFwcHJvdmVkIGlt cGxlbWVudGF0aW9uIGlmIHBvc3NpYmxlICovCistICAgIGlmIChGSVBTX21vZGUoKSkgeworLSAg ICAgICAgY29uc3QgRVZQX01EICpmaXBzbWQ7CistICAgICAgICBpZiAodHlwZSkgeworLSAgICAg ICAgICAgIGZpcHNtZCA9IGV2cF9nZXRfZmlwc19tZCh0eXBlKTsKKy0gICAgICAgICAgICBpZiAo Zmlwc21kKQorLSAgICAgICAgICAgICAgICB0eXBlID0gZmlwc21kOworLSAgICAgICAgfQorKyAg ICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0Zf RVZQX0RJR0VTVElOSVRfRVgsIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAg ICBjdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7CisrICAgICAgICByZXR1cm4gMDsKKyAgICAgfQorICNl bmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK0BAIC0yMTIsNiArMjQ5LDE2IEBAIGlu dCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAgICAgfQorICNlbmRpZgor ICAgICBpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysg ICAgICAgIGlmIChGSVBTX21vZGUoKSkgeworKyAgICAgICAgICAgIGlmICghKHR5cGUtPmZsYWdz ICYgRVZQX01EX0ZMQUdfRklQUykKKysgICAgICAgICAgICAgICAgJiYgIShjdHgtPmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkgeworKyAgICAgICAgICAgICAgICBFVlBl cnIoRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysg ICAgICAgICAgICAgICAgY3R4LT5kaWdlc3QgPSAmYmFkX21kOworKyAgICAgICAgICAgICAgICBy ZXR1cm4gMDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrI2VuZGlmCisgICAgICAgICBp ZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXplKQorICAgICAgICAgICAgIE9Q RU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOworICAgICAgICAgY3R4LT5kaWdlc3QgPSB0eXBlOwor QEAgLTIzNiwyNSArMjgzLDE1IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpj dHgsIGMKKyAgICAgfQorICAgICBpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT19J TklUKQorICAgICAgICAgcmV0dXJuIDE7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBpZiAo RklQU19tb2RlKCkpIHsKKy0gICAgICAgIGlmIChGSVBTX2RpZ2VzdGluaXQoY3R4LCB0eXBlKSkK Ky0gICAgICAgICAgICByZXR1cm4gMTsKKy0gICAgICAgIE9QRU5TU0xfZnJlZShjdHgtPm1kX2Rh dGEpOworLSAgICAgICAgY3R4LT5tZF9kYXRhID0gTlVMTDsKKy0gICAgICAgIHJldHVybiAwOwor LSAgICB9CistI2VuZGlmCisgICAgIHJldHVybiBjdHgtPmRpZ2VzdC0+aW5pdChjdHgpOworIH0K KyAKKyBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBjb3VudCkKKyB7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICByZXR1cm4g RklQU19kaWdlc3R1cGRhdGUoY3R4LCBkYXRhLCBjb3VudCk7CistI2Vsc2UKKy0gICAgcmV0dXJu IGN0eC0+dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOworKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7CisgI2VuZGlmCisrICAgIHJldHVybiBjdHgtPnVwZGF0ZShjdHgsIGRhdGEsIGNvdW50KTsK KyB9CisgCisgLyogVGhlIGNhbGxlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBz ZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250ZXh0ICovCitAQCAtMjY5LDExICszMDYsMTEgQEAgaW50 IEVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVucworIC8qIFRoZSBjYWxsZXIgY2Fu IGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4 dCAqLworIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBj aGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCist ICAgIHJldHVybiBGSVBTX2RpZ2VzdGZpbmFsKGN0eCwgbWQsIHNpemUpOworLSNlbHNlCisgICAg IGludCByZXQ7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBGSVBTX3NlbGZ0ZXN0X2No ZWNrKCk7CisrI2VuZGlmCisgICAgIE9QRU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9zaXpl IDw9IEVWUF9NQVhfTURfU0laRSk7CisgICAgIHJldCA9IGN0eC0+ZGlnZXN0LT5maW5hbChjdHgs IG1kKTsKKyAgICAgaWYgKHNpemUgIT0gTlVMTCkKK0BAIC0yODQsNyArMzIxLDYgQEAgaW50IEVW UF9EaWdlc3RGaW5hbF9leChFVlBfTURfQ1RYICpjdHgsCisgICAgIH0KKyAgICAgbWVtc2V0KGN0 eC0+bWRfZGF0YSwgMCwgY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAgICAgcmV0dXJuIHJldDsK Ky0jZW5kaWYKKyB9CisgCisgaW50IEVWUF9NRF9DVFhfY29weShFVlBfTURfQ1RYICpvdXQsIGNv bnN0IEVWUF9NRF9DVFggKmluKQorQEAgLTM3Myw3ICs0MDksNiBAQCB2b2lkIEVWUF9NRF9DVFhf ZGVzdHJveShFVlBfTURfQ1RYICpjdHgpCisgLyogVGhpcyBjYWxsIGZyZWVzIHJlc291cmNlcyBh c3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgKi8KKyBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVW UF9NRF9DVFggKmN0eCkKKyB7CistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAgICAgLyoKKyAgICAg ICogRG9uJ3QgYXNzdW1lIGN0eC0+bWRfZGF0YSB3YXMgY2xlYW5lZCBpbiBFVlBfRGlnZXN0X0Zp bmFsLCBiZWNhdXNlCisgICAgICAqIHNvbWV0aW1lcyBvbmx5IGNvcGllcyBvZiB0aGUgY29udGV4 dCBhcmUgZXZlciBmaW5hbGlzZWQuCitAQCAtMzg2LDcgKzQyMSw2IEBAIGludCBFVlBfTURfQ1RY X2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQorICAgICAgICAgT1BFTlNTTF9jbGVhbnNlKGN0eC0+ bWRfZGF0YSwgY3R4LT5kaWdlc3QtPmN0eF9zaXplKTsKKyAgICAgICAgIE9QRU5TU0xfZnJlZShj dHgtPm1kX2RhdGEpOworICAgICB9CistI2VuZGlmCisgICAgIGlmIChjdHgtPnBjdHgpCisgICAg ICAgICBFVlBfUEtFWV9DVFhfZnJlZShjdHgtPnBjdHgpOworICNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKK0BAIC0zOTcsOSArNDMxLDYgQEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURf Q1RYICpjdHgpCisgICAgICAgICAgKi8KKyAgICAgICAgIEVOR0lORV9maW5pc2goY3R4LT5lbmdp bmUpOworICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgRklQU19tZF9jdHhfY2xl YW51cChjdHgpOworLSNlbmRpZgorICAgICBtZW1zZXQoY3R4LCAnXDAnLCBzaXplb2YgKmN0eCk7 CisgCisgICAgIHJldHVybiAxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9l X2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9lX2Flcy5jCistLS0gb3BlbnNz bC0xLjAuMmcvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxNi0w My0wMSAxNjozMzowNy42MTU5MTY1MDAgKzAxMDAKK0BAIC02MCw5ICs2MCw2IEBACisgIyBpbmNs dWRlICJtb2Rlc19sY2wuaCIKKyAjIGluY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorIAorLSMgdW5k ZWYgRVZQX0NJUEhfRkxBR19GSVBTCistIyBkZWZpbmUgRVZQX0NJUEhfRkxBR19GSVBTIDAKKy0K KyB0eXBlZGVmIHN0cnVjdCB7CisgICAgIHVuaW9uIHsKKyAgICAgICAgIGRvdWJsZSBhbGlnbjsK K0BAIC0xMTU5LDYgKzExNTYsMTEgQEAgc3RhdGljIGludCBhZXNfZ2NtX2N0cmwoRVZQX0NJUEhF Ul9DVFggKgorICAgICBjYXNlIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU46CisgICAgICAgICBpZiAo YXJnIDw9IDApCisgICAgICAgICAgICAgcmV0dXJuIDA7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMK KysgICAgICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBI X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAgICAgJiYgYXJnIDwgMTIpCisrICAgICAg ICAgICAgcmV0dXJuIDA7CisrIyBlbmRpZgorICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZv ciBJViBpZiBuZWVkZWQgKi8KKyAgICAgICAgIGlmICgoYXJnID4gRVZQX01BWF9JVl9MRU5HVEgp ICYmIChhcmcgPiBnY3R4LT5pdmxlbikpIHsKKyAgICAgICAgICAgICBpZiAoZ2N0eC0+aXYgIT0g Yy0+aXYpCitAQCAtMTcyNyw2ICsxNzI5LDE0IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19jaXBoZXIo RVZQX0NJUEhFUl9DVFgKKyAgICAgICAgIHJldHVybiAwOworICAgICBpZiAoIW91dCB8fCAhaW4g fHwgbGVuIDwgQUVTX0JMT0NLX1NJWkUpCisgICAgICAgICByZXR1cm4gMDsKKysjIGlmZGVmIE9Q RU5TU0xfRklQUworKyAgICAvKiBSZXF1aXJlbWVudCBvZiBTUDgwMC0zOEUgKi8KKysgICAgaWYg KEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9G SVBTX0FMTE9XKSAmJgorKyAgICAgICAgKGxlbiA+ICgxVUwgPDwgMjApICogMTYpKSB7CisrICAg ICAgICBFVlBlcnIoRVZQX0ZfQUVTX1hUU19DSVBIRVIsIEVWUF9SX1RPT19MQVJHRSk7CisrICAg ICAgICByZXR1cm4gMDsKKysgICAgfQorKyMgZW5kaWYKKyAgICAgaWYgKHhjdHgtPnN0cmVhbSkK KyAgICAgICAgICgqeGN0eC0+c3RyZWFtKSAoaW4sIG91dCwgbGVuLAorICAgICAgICAgICAgICAg ICAgICAgICAgICB4Y3R4LT54dHMua2V5MSwgeGN0eC0+eHRzLmtleTIsIGN0eC0+aXYpOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9ldnAvZV9kZXMzLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2Vf ZGVzMy5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZXZwL2VfZGVzMy5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE1OTE2 NTAwICswMTAwCitAQCAtNjUsMTAgKzY1LDYgQEAKKyAjIGluY2x1ZGUgPG9wZW5zc2wvZGVzLmg+ CisgIyBpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAKKy0vKiBCbG9jayB1c2Ugb2YgaW1wbGVt ZW50YXRpb25zIGluIEZJUFMgbW9kZSAqLworLSMgdW5kZWYgRVZQX0NJUEhfRkxBR19GSVBTCist IyBkZWZpbmUgRVZQX0NJUEhfRkxBR19GSVBTICAgICAgMAorLQorIHR5cGVkZWYgc3RydWN0IHsK KyAgICAgdW5pb24geworICAgICAgICAgZG91YmxlIGFsaWduOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAv ZV9udWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMJMjAx Ni0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZXZwL2VfbnVsbC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE2OTE2NTIzICswMTAwCitAQCAt NjgsNyArNjgsNyBAQCBzdGF0aWMgaW50IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjCisg c3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXIgPSB7CisgICAgIE5JRF91bmRlZiwKKyAg ICAgMSwgMCwgMCwKKy0gICAgMCwKKysgICAgRVZQX0NJUEhfRkxBR19GSVBTLAorICAgICBudWxs X2luaXRfa2V5LAorICAgICBudWxsX2NpcGhlciwKKyAgICAgTlVMTCwKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2V2cC9ldnBfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2V2cF9lbmMuYy5m aXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTY5MTY1MjMgKzAx MDAKK0BAIC02OSwxNiArNjksNzMgQEAKKyAjZW5kaWYKKyAjaW5jbHVkZSAiZXZwX2xvY2wuaCIK KyAKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistIyBkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQs IGluLCBpbmwpIEZJUFNfY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQorLSNlbHNlCistIyBkZWZp bmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIo Y3R4LCBvdXQsIGluLCBpbmwpCistI2VuZGlmCisrI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91 dCwgaW4sIGlubCkgY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKKyAK KyBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW10gPSAiRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7 CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlz IHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29y aXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0 aWMgaW50IGJhZF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQg ZW5jKQorK3sKKysgICAgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOworKyAgICBy ZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisreworKyAgICBGSVBTX0VS Uk9SX0lHTk9SRUQoIkNpcGhlciB1cGRhdGUiKTsKKysgICAgcmV0dXJuIDA7CisrfQorKworKy8q IE5COiBubyBjbGVhbnVwIGJlY2F1c2UgaXQgaXMgYWxsb3dlZCBhZnRlciBmYWlsZWQgaW5pdCAq LworKworK3N0YXRpYyBpbnQgYmFkX3NldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFf VFlQRSAqdHlwKQorK3sKKysgICAgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEi KTsKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgYmFkX2dldF9hc24xKEVWUF9D SVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQorK3sKKysgICAgRklQU19FUlJPUl9JR05P UkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBp bnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQg KnB0cikKKyt7CisrICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsKKysgICAg cmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPSB7 CisrICAgIDAsCisrICAgIDAsCisrICAgIDAsCisrICAgIDAsCisrICAgIDAsCisrICAgIGJhZF9p bml0LAorKyAgICBiYWRfZG9fY2lwaGVyLAorKyAgICBOVUxMLAorKyAgICAwLAorKyAgICBiYWRf c2V0X2FzbjEsCisrICAgIGJhZF9nZXRfYXNuMSwKKysgICAgYmFkX2N0cmwsCisrICAgIE5VTEwK Kyt9OworKworKyNlbmRpZgorKworIHZvaWQgRVZQX0NJUEhFUl9DVFhfaW5pdChFVlBfQ0lQSEVS X0NUWCAqY3R4KQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIEZJUFNfc2VsZnRlc3Rf Y2hlY2soKTsKKysjZW5kaWYKKyAgICAgbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKEVWUF9DSVBIRVJf Q1RYKSk7CisgICAgIC8qIGN0eC0+Y2lwaGVyPU5VTEw7ICovCisgfQorQEAgLTExMCw2ICsxNjcs MTMgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorICAgICAgICAg ICAgIGVuYyA9IDE7CisgICAgICAgICBjdHgtPmVuY3J5cHQgPSBlbmM7CisgICAgIH0KKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAg ICAgICBGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKKysgICAgICAgIGN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7CisrICAgICAg ICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUK KyAgICAgLyoKKyAgICAgICogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBi ZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cyBzbworQEAgLTE2OCwxNiArMjMyLDYgQEAgaW50 IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorICAgICAgICAgICAgIGN0eC0+ ZW5naW5lID0gTlVMTDsKKyAjZW5kaWYKKyAKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgICAg ICBpZiAoRklQU19tb2RlKCkpIHsKKy0gICAgICAgICAgICBjb25zdCBFVlBfQ0lQSEVSICpmY2lw aGVyOworLSAgICAgICAgICAgIGlmIChjaXBoZXIpCistICAgICAgICAgICAgICAgIGZjaXBoZXIg PSBldnBfZ2V0X2ZpcHNfY2lwaGVyKGNpcGhlcik7CistICAgICAgICAgICAgaWYgKGZjaXBoZXIp CistICAgICAgICAgICAgICAgIGNpcGhlciA9IGZjaXBoZXI7CistICAgICAgICAgICAgcmV0dXJu IEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKKy0gICAgICAgIH0K Ky0jZW5kaWYKKyAgICAgICAgIGN0eC0+Y2lwaGVyID0gY2lwaGVyOworICAgICAgICAgaWYgKGN0 eC0+Y2lwaGVyLT5jdHhfc2l6ZSkgeworICAgICAgICAgICAgIGN0eC0+Y2lwaGVyX2RhdGEgPSBP UEVOU1NMX21hbGxvYyhjdHgtPmNpcGhlci0+Y3R4X3NpemUpOworQEAgLTIwNCwxMCArMjU4LDYg QEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAorICNpZm5kZWYgT1BF TlNTTF9OT19FTkdJTkUKKyAgc2tpcF90b19pbml0OgorICNlbmRpZgorLSNpZmRlZiBPUEVOU1NM X0ZJUFMKKy0gICAgaWYgKEZJUFNfbW9kZSgpKQorLSAgICAgICAgcmV0dXJuIEZJUFNfY2lwaGVy aW5pdChjdHgsIGNpcGhlciwga2V5LCBpdiwgZW5jKTsKKy0jZW5kaWYKKyAgICAgLyogd2UgYXNz dW1lIGJsb2NrIHNpemUgaXMgYSBwb3dlciBvZiAyIGluICpjcnlwdFVwZGF0ZSAqLworICAgICBP UEVOU1NMX2Fzc2VydChjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSAxCisgICAgICAgICAgICAg ICAgICAgIHx8IGN0eC0+Y2lwaGVyLT5ibG9ja19zaXplID09IDgKK0BAIC0yNTMsNiArMzAzLDE5 IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAg LyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBw ZXJtaXNzaWJsZS4KKysgICAgICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcg YXQgdGhpcyBwb2ludC4KKysgICAgICovCisrICAgIGlmIChrZXkgJiYgRklQU19tb2RlKCkpIHsK KysgICAgICAgIGlmICghKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykK KysgICAgICAgICAgICAmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpKSB7CisrICAgICAgICAgICAgRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBf Ul9ESVNBQkxFRF9GT1JfRklQUyk7CisrICAgICAgICAgICAgY3R4LT5jaXBoZXIgPSAmYmFkX2Np cGhlcjsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKyNlbmRp ZgorIAorICAgICBpZiAoa2V5IHx8IChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9BTFdB WVNfQ0FMTF9JTklUKSkgeworICAgICAgICAgaWYgKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsIGtl eSwgaXYsIGVuYykpCitAQCAtNTU0LDcgKzYxNyw2IEBAIHZvaWQgRVZQX0NJUEhFUl9DVFhfZnJl ZShFVlBfQ0lQSEVSX0NUWAorIAorIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBI RVJfQ1RYICpjKQorIHsKKy0jaWZuZGVmIE9QRU5TU0xfRklQUworICAgICBpZiAoYy0+Y2lwaGVy ICE9IE5VTEwpIHsKKyAgICAgICAgIGlmIChjLT5jaXBoZXItPmNsZWFudXAgJiYgIWMtPmNpcGhl ci0+Y2xlYW51cChjKSkKKyAgICAgICAgICAgICByZXR1cm4gMDsKK0BAIC01NjQsNyArNjI2LDYg QEAgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhFUl9DVAorICAgICB9CisgICAg IGlmIChjLT5jaXBoZXJfZGF0YSkKKyAgICAgICAgIE9QRU5TU0xfZnJlZShjLT5jaXBoZXJfZGF0 YSk7CistI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorICAgICBpZiAoYy0+ZW5n aW5lKQorICAgICAgICAgLyoKK0BAIC01NzMsOSArNjM0LDYgQEAgaW50IEVWUF9DSVBIRVJfQ1RY X2NsZWFudXAoRVZQX0NJUEhFUl9DVAorICAgICAgICAgICovCisgICAgICAgICBFTkdJTkVfZmlu aXNoKGMtPmVuZ2luZSk7CisgI2VuZGlmCistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBGSVBT X2NpcGhlcl9jdHhfY2xlYW51cChjKTsKKy0jZW5kaWYKKyAgICAgbWVtc2V0KGMsIDAsIHNpemVv ZihFVlBfQ0lQSEVSX0NUWCkpOworICAgICByZXR1cm4gMTsKKyB9CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZXZwL2V2cC5oLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9l dnAuaAorLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvZXZwLmguZmlwcwkyMDE2LTAzLTAx IDE2OjMzOjA3LjUwMzkxMzk2NSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAv ZXZwLmgJMjAxNi0wMy0wMSAxNjozMzowNy42MTY5MTY1MjMgKzAxMDAKK0BAIC0xMjIsNiArMTIy LDEwIEBACisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCisgCisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMK KysjICBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjIGVuZGlmCisrCisgLyoKKyAgKiBUeXBl IG5lZWRzIHRvIGJlIGEgYml0IGZpZWxkIFN1Yi10eXBlIG5lZWRzIHRvIGJlIGZvciB2YXJpYXRp b25zIG9uIHRoZQorICAqIG1ldGhvZCwgYXMgaW4sIGNhbiBpdCBkbyBhcmJpdHJhcnkgZW5jcnlw dGlvbi4uLi4KK0BAIC0yODUsMTEgKzI4OSw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0IHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNsZWFuZWQg Ki8KKyAjIGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UgICAgICAgICAgIDB4MDAwNC8qIERv bid0IGZyZWUgdXAgY3R4LT5tZF9kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiBpbiBFVlBfTURfQ1RYX2NsZWFudXAgKi8KKy0vKgorLSAqIEZJ UFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUg aGVyZSBzbyB3ZQorLSAqIGRvbid0IGFjY2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVzIGZvciBv dGhlciBwdXJwb3Nlcy4KKy0gKi8KKy0KKyAjIGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cgIDB4MDAwOC8qIEFsbG93IHVzZSBvZiBub24gRklQUworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZGlnZXN0IGluIEZJUFMgbW9kZSAq LworIAorQEAgLTMwMiw2ICszMDEsMTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QgeworICMgZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEgICAgICAgMHgwMC8qIFBLQ1MjMSB2MS41IG1v ZGUgKi8KKyAjIGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEgICAgICAgIDB4MTAvKiBY OS4zMSBtb2RlICovCisgIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgICAgICAgICAw eDIwLyogUFNTIG1vZGUgKi8KKysjIGRlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChj dHgpIFwKKysgICAgICAgICAgICAgICAgKChjdHgtPmZsYWdzPj4xNikgJjB4RkZGRikgLyogc2Vl ZCBsZW5ndGggKi8KKysjIGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOICAgICAgIDB4 RkZGRi8qIHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCisrIyBkZWZpbmUgRVZQX01EX0NUWF9G TEFHX1BTU19NUkVDICAgICAgICAweEZGRkUvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAq LworIAorICMgZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUICAgICAgICAgMHgwMTAwLyog RG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRhICovCisgCitAQCAtMzYzLDE1ICszNjYsMTUgQEAgc3Ry dWN0IGV2cF9jaXBoZXJfc3QgeworIC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJh dGlvbiAqLworICMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhfUkFORF9LRVkgICAgICAgICAgICAg ICAweDIwMAorIC8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMg Ki8KKy0jIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0NVU1RPTV9DT1BZICAgICAgICAgICAgMHg0 MDAKKysjIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0NVU1RPTV9DT1BZICAgICAgICAgICAgMHg0 MDAwCisgLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCisgIyBkZWZpbmUg ICAgICAgICBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSAgICAgIDB4MTAwMAorIC8qIEJ1ZmZl ciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEgbW9kZSBvbmx5ICovCisgIyBkZWZpbmUg ICAgICAgICBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTICAgICAgIDB4MjAwMAorIC8qIE5vdGUg aWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KKy0jIGRlZmluZSAgICAgICAgIEVW UF9DSVBIX0ZMQUdfRklQUyAgICAgICAgICAgICAgMHg0MDAwCisrIyBkZWZpbmUgICAgICAgICBF VlBfQ0lQSF9GTEFHX0ZJUFMgICAgICAgICAgICAgIDB4NDAwCisgLyogQWxsb3cgbm9uIEZJUFMg Y2lwaGVyIGluIEZJUFMgbW9kZSAqLworLSMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhfRkxBR19O T05fRklQU19BTExPVyAgICAweDgwMDAKKysjIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cgICAgMHg4MDAKKyAvKgorICAqIENpcGhlciBoYW5kbGVzIGFueSBhbmQg YWxsIHBhZGRpbmcgbG9naWMgYXMgd2VsbCBhcyBmaW5hbGlzYXRpb24uCisgICovCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9ldnAvZXZwX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9ldnBf bGliLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9ldnAvZXZwX2xpYi5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE2OTE2 NTIzICswMTAwCitAQCAtNjAsMTAgKzYwLDYgQEAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Cist I2lmZGVmIE9QRU5TU0xfRklQUworLSMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CistIyBpbmNs dWRlICJldnBfbG9jbC5oIgorLSNlbmRpZgorIAorIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2Fz bjEoRVZQX0NJUEhFUl9DVFggKmMsIEFTTjFfVFlQRSAqdHlwZSkKKyB7CitAQCAtMjI0LDYgKzIy MCw5IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKGNvbnN0IEVWUF8KKyBpbnQgRVZQ X0NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisgewor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRp ZgorICAgICByZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCk7 CisgfQorIAorQEAgLTIzNCwyMiArMjMzLDEyIEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9DSVBI RVJfQ1RYX2NpcGhlcigKKyAKKyB1bnNpZ25lZCBsb25nIEVWUF9DSVBIRVJfZmxhZ3MoY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyKQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGNvbnN0 IEVWUF9DSVBIRVIgKmZjaXBoZXI7CistICAgIGZjaXBoZXIgPSBldnBfZ2V0X2ZpcHNfY2lwaGVy KGNpcGhlcik7CistICAgIGlmIChmY2lwaGVyICYmIGZjaXBoZXItPmZsYWdzICYgRVZQX0NJUEhf RkxBR19GSVBTKQorLSAgICAgICAgcmV0dXJuIGNpcGhlci0+ZmxhZ3MgfCBFVlBfQ0lQSF9GTEFH X0ZJUFM7CistI2VuZGlmCisgICAgIHJldHVybiBjaXBoZXItPmZsYWdzOworIH0KKyAKKyB1bnNp Z25lZCBsb25nIEVWUF9DSVBIRVJfQ1RYX2ZsYWdzKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgp CisgeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgcmV0dXJuIEVWUF9DSVBIRVJfZmxhZ3Mo Y3R4LT5jaXBoZXIpOworLSNlbHNlCisgICAgIHJldHVybiBjdHgtPmNpcGhlci0+ZmxhZ3M7Cist I2VuZGlmCisgfQorIAorIHZvaWQgKkVWUF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShjb25zdCBF VlBfQ0lQSEVSX0NUWCAqY3R4KQorQEAgLTMxNiw0MCArMzA1LDggQEAgaW50IEVWUF9NRF9zaXpl KGNvbnN0IEVWUF9NRCAqbWQpCisgICAgIHJldHVybiBtZC0+bWRfc2l6ZTsKKyB9CisgCistI2lm ZGVmIE9QRU5TU0xfRklQUworLQorLWNvbnN0IEVWUF9NRCAqZXZwX2dldF9maXBzX21kKGNvbnN0 IEVWUF9NRCAqbWQpCisteworLSAgICBpbnQgbmlkID0gRVZQX01EX3R5cGUobWQpOworLSAgICBp ZiAobmlkID09IE5JRF9kc2EpCistICAgICAgICByZXR1cm4gRklQU19ldnBfZHNzMSgpOworLSAg ICBlbHNlIGlmIChuaWQgPT0gTklEX2RzYVdpdGhTSEEpCistICAgICAgICByZXR1cm4gRklQU19l dnBfZHNzKCk7CistICAgIGVsc2UgaWYgKG5pZCA9PSBOSURfZWNkc2Ffd2l0aF9TSEExKQorLSAg ICAgICAgcmV0dXJuIEZJUFNfZXZwX2VjZHNhKCk7CistICAgIGVsc2UKKy0gICAgICAgIHJldHVy biBGSVBTX2dldF9kaWdlc3RieW5pZChuaWQpOworLX0KKy0KKy1jb25zdCBFVlBfQ0lQSEVSICpl dnBfZ2V0X2ZpcHNfY2lwaGVyKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcikKKy17CistICAgIGlu dCBuaWQgPSBjaXBoZXItPm5pZDsKKy0gICAgaWYgKG5pZCA9PSBOSURfdW5kZWYpCistICAgICAg ICByZXR1cm4gRklQU19ldnBfZW5jX251bGwoKTsKKy0gICAgZWxzZQorLSAgICAgICAgcmV0dXJu IEZJUFNfZ2V0X2NpcGhlcmJ5bmlkKG5pZCk7CistfQorLQorLSNlbmRpZgorLQorIHVuc2lnbmVk IGxvbmcgRVZQX01EX2ZsYWdzKGNvbnN0IEVWUF9NRCAqbWQpCisgeworLSNpZmRlZiBPUEVOU1NM X0ZJUFMKKy0gICAgY29uc3QgRVZQX01EICpmbWQ7CistICAgIGZtZCA9IGV2cF9nZXRfZmlwc19t ZChtZCk7CistICAgIGlmIChmbWQgJiYgZm1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCist ICAgICAgICByZXR1cm4gbWQtPmZsYWdzIHwgRVZQX01EX0ZMQUdfRklQUzsKKy0jZW5kaWYKKyAg ICAgcmV0dXJuIG1kLT5mbGFnczsKKyB9CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZXZwL2V2cF9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2V2cF9sb2Ns LmgKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDE2LTAz LTAxIDE2OjMzOjA3LjQ5OTkxMzg3NSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9l dnAvZXZwX2xvY2wuaAkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNjkxNjUyMyArMDEwMAorQEAgLTI1 OCwxMCArMjU4LDggQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAor ICAgICAgICAgQkxPQ0tfQ0lQSEVSX2Z1bmNfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4 LGNiaXRzLGtzdHJ1Y3Qsa3NjaGVkKSBcCisgICAgICAgICBCTE9DS19DSVBIRVJfZGVmX2NmYihj aXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTklEXyMjY2lwaGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGNpcGhlciMjX2luaXRfa2V5LCBOVUxM LCBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2 LCBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2 LCBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKQorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsIFwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMKQorIAorIHN0cnVjdCBldnBfcGtleV9jdHhfc3QgeworICAgICAvKiBNZXRob2QgYXNzb2Np YXRlZCB3aXRoIHRoaXMgb3BlcmF0aW9uICovCitAQCAtMzU1LDExICszNTMsNiBAQCBjb25zdCBF VlBfQ0lQSEVSICpldnBfZ2V0X2ZpcHNfY2lwaGVyKGNvCisgIyBkZWZpbmUgTUQyX0luaXQgICAg ICAgIHByaXZhdGVfTUQyX0luaXQKKyAjIGRlZmluZSBNREMyX0luaXQgICAgICAgcHJpdmF0ZV9N REMyX0luaXQKKyAjIGRlZmluZSBTSEFfSW5pdCAgICAgICAgcHJpdmF0ZV9TSEFfSW5pdAorLSMg ZGVmaW5lIFNIQTFfSW5pdCAgICAgICBwcml2YXRlX1NIQTFfSW5pdAorLSMgZGVmaW5lIFNIQTIy NF9Jbml0ICAgICBwcml2YXRlX1NIQTIyNF9Jbml0CistIyBkZWZpbmUgU0hBMjU2X0luaXQgICAg IHByaXZhdGVfU0hBMjU2X0luaXQKKy0jIGRlZmluZSBTSEEzODRfSW5pdCAgICAgcHJpdmF0ZV9T SEEzODRfSW5pdAorLSMgZGVmaW5lIFNIQTUxMl9Jbml0ICAgICBwcml2YXRlX1NIQTUxMl9Jbml0 CisgCisgIyBkZWZpbmUgQkZfc2V0X2tleSAgICAgIHByaXZhdGVfQkZfc2V0X2tleQorICMgZGVm aW5lIENBU1Rfc2V0X2tleSAgICBwcml2YXRlX0NBU1Rfc2V0X2tleQorQEAgLTM2Nyw3ICszNjAs NiBAQCBjb25zdCBFVlBfQ0lQSEVSICpldnBfZ2V0X2ZpcHNfY2lwaGVyKGNvCisgIyBkZWZpbmUg U0VFRF9zZXRfa2V5ICAgIHByaXZhdGVfU0VFRF9zZXRfa2V5CisgIyBkZWZpbmUgUkMyX3NldF9r ZXkgICAgIHByaXZhdGVfUkMyX3NldF9rZXkKKyAjIGRlZmluZSBSQzRfc2V0X2tleSAgICAgcHJp dmF0ZV9SQzRfc2V0X2tleQorLSMgZGVmaW5lIERFU19zZXRfa2V5X3VuY2hlY2tlZCAgIHByaXZh dGVfREVTX3NldF9rZXlfdW5jaGVja2VkCisgIyBkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSAgICAg ICAgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5CisgCisgI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZw L21fZHNzLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcwkyMDE2 LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9ldnAvbV9kc3MuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNjkxNjUyMyArMDEwMAorQEAgLTg2 LDcgKzg2LDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc2FfbWQgPSB7CisgICAgIE5JRF9kc2FX aXRoU0hBLAorICAgICBOSURfZHNhV2l0aFNIQSwKKyAgICAgU0hBX0RJR0VTVF9MRU5HVEgsCist ICAgIEVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKyAgICBFVlBfTURfRkxBR19QS0VZX0RJR0VT VCB8IEVWUF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQsCisgICAgIHVwZGF0ZSwKKyAgICAgZmlu YWwsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9tX2RzczEuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9ldnAvbV9kc3MxLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvbV9kc3MxLmMJMjAxNi0wMy0wMSAxNjozMzow Ny42MTc5MTY1NDUgKzAxMDAKK0BAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQg ZHNzMV9tZCA9IHsKKyAgICAgTklEX2RzYSwKKyAgICAgTklEX2RzYVdpdGhTSEExLAorICAgICBT SEFfRElHRVNUX0xFTkdUSCwKKy0gICAgRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCisrICAgIEVW UF9NRF9GTEFHX1BLRVlfRElHRVNUIHwgRVZQX01EX0ZMQUdfRklQUywKKyAgICAgaW5pdCwKKyAg ICAgdXBkYXRlLAorICAgICBmaW5hbCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9l dnAvbV9tZDIuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvbV9tZDIuYworLS0tIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6MDUu MDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9tX21kMi5jCTIw MTYtMDMtMDEgMTY6MzM6MDcuNjE3OTE2NTQ1ICswMTAwCitAQCAtNjgsNiArNjgsNyBAQAorICMg aWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgIyAgaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjIGVu ZGlmCisrIyBpbmNsdWRlICJldnBfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURf Q1RYICpjdHgpCisgeworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9tX3NoYTEu Yy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvbV9zaGExLmMKKy0tLSBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL21fc2hhMS5jCTIwMTYtMDMt MDEgMTY6MzM6MDcuNjE3OTE2NTQ1ICswMTAwCitAQCAtODcsNyArODcsOCBAQCBzdGF0aWMgY29u c3QgRVZQX01EIHNoYTFfbWQgPSB7CisgICAgIE5JRF9zaGExLAorICAgICBOSURfc2hhMVdpdGhS U0FFbmNyeXB0aW9uLAorICAgICBTSEFfRElHRVNUX0xFTkdUSCwKKy0gICAgRVZQX01EX0ZMQUdf UEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKyAg ICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlQgfAorKyAgICAgICAgRVZQX01EX0ZMQUdfRklQUywKKyAgICAgaW5pdCwKKyAgICAg dXBkYXRlLAorICAgICBmaW5hbCwKK0BAIC0xMzQsNyArMTM1LDggQEAgc3RhdGljIGNvbnN0IEVW UF9NRCBzaGEyMjRfbWQgPSB7CisgICAgIE5JRF9zaGEyMjQsCisgICAgIE5JRF9zaGEyMjRXaXRo UlNBRW5jcnlwdGlvbiwKKyAgICAgU0hBMjI0X0RJR0VTVF9MRU5HVEgsCistICAgIEVWUF9NRF9G TEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwK KysgICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElH QUxHSURfQUJTRU5UIHwKKysgICAgICAgIEVWUF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQyMjQs CisgICAgIHVwZGF0ZTI1NiwKKyAgICAgZmluYWwyNTYsCitAQCAtMTU0LDcgKzE1Niw4IEBAIHN0 YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2X21kID0geworICAgICBOSURfc2hhMjU2LAorICAgICBO SURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCisgICAgIFNIQTI1Nl9ESUdFU1RfTEVOR1RILAor LSAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdB TEdJRF9BQlNFTlQsCisrICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVW UF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCB8CisrICAgICAgICBFVlBfTURfRkxBR19GSVBTLAor ICAgICBpbml0MjU2LAorICAgICB1cGRhdGUyNTYsCisgICAgIGZpbmFsMjU2LAorQEAgLTE5Nyw3 ICsyMDAsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTM4NF9tZCA9IHsKKyAgICAgTklEX3No YTM4NCwKKyAgICAgTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAorICAgICBTSEEzODRfRElH RVNUX0xFTkdUSCwKKy0gICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQ X01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKyAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfAorKyAgICAgICAgRVZQX01E X0ZMQUdfRklQUywKKyAgICAgaW5pdDM4NCwKKyAgICAgdXBkYXRlNTEyLAorICAgICBmaW5hbDUx MiwKK0BAIC0yMTcsNyArMjIxLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQgPSB7 CisgICAgIE5JRF9zaGE1MTIsCisgICAgIE5JRF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKKyAg ICAgU0hBNTEyX0RJR0VTVF9MRU5HVEgsCistICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJ R05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysgICAgRVZQX01EX0ZMQUdf UEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwKKysg ICAgICAgIEVWUF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQ1MTIsCisgICAgIHVwZGF0ZTUxMiwK KyAgICAgZmluYWw1MTIsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL3Bfc2ln bi5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9wX3NpZ24uYworLS0tIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvcF9zaWduLmMJMjAxNi0w My0wMSAxNjozMzowNy42MTc5MTY1NDUgKzAxMDAKK0BAIC02MSw2ICs2MSw3IEBACisgI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNs dWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyAjaWZk ZWYgdW5kZWYKKyB2b2lkIEVWUF9TaWduSW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9NRCAqdHlw ZSkKK0BAIC0xMDEsNiArMTAyLDIyIEBAIGludCBFVlBfU2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0 eCwgdW5zaWcKKyAgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgIGlmIChFVlBfUEtFWV9D VFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCisgICAgICAgICAg ICAgZ290byBlcnI7CisrICAgICAgICBpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSkKKysgICAgICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhw a2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKKysgICAgICAgICAgICAgICAgZ290byBlcnI7 CisrICAgICAgICBpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKSB7Cisr ICAgICAgICAgICAgaW50IHNhbHRsZW47CisrICAgICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9z ZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0KKysgICAgICAg ICAgICAgICAgMCkKKysgICAgICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICAgICAgc2Fs dGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7CisrICAgICAgICAgICAgaWYg KHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysgICAgICAgICAgICAgICAg c2FsdGxlbiA9IC0xOworKyAgICAgICAgICAgIGVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NU WF9GTEFHX1BTU19NUkVDKQorKyAgICAgICAgICAgICAgICBzYWx0bGVuID0gLTI7CisrICAgICAg ICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVu KSA8PSAwKQorKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKyAgICAgICAg IGlmIChFVlBfUEtFWV9zaWduKHBrY3R4LCBzaWdyZXQsICZzbHRtcCwgbSwgbV9sZW4pIDw9IDAp CisgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAqc2lnbGVuID0gc2x0bXA7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZw L3BfdmVyaWZ5LmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvcF92ZXJpZnkuYwkyMDE2LTAzLTAxIDE2OjMzOjA3 LjYxNzkxNjU0NSArMDEwMAorQEAgLTYxLDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv eDUwOS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorIAorIGludCBFVlBfVmVyaWZ5Rmlu YWwoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCisgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKK0BAIC04 Nyw2ICs4OCwyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uCisg ICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWdu YXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorICAgICAgICAgICAgIGdvdG8gZXJy OworKyAgICAgICAgaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisr ICAgICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9Y OTMxX1BBRERJTkcpIDw9IDApCisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAg aWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykgeworKyAgICAgICAgICAg IGludCBzYWx0bGVuOworKyAgICAgICAgICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRk aW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9CisrICAgICAgICAgICAgICAgIDAp CisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgICAgIHNhbHRsZW4gPSBNX0VW UF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKyAgICAgICAgICAgIGlmIChzYWx0bGVuID09 IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisrICAgICAgICAgICAgICAgIHNhbHRsZW4gPSAt MTsKKysgICAgICAgICAgICBlbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1Nf TVJFQykKKysgICAgICAgICAgICAgICAgc2FsdGxlbiA9IC0yOworKyAgICAgICAgICAgIGlmIChF VlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysg ICAgICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9CisgICAgICAgICBpID0gRVZQX1BL RVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOworICBlcnI6CisgICAg ICAgICBFVlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBz L2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNzkxNjU0NSAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJ MjAxNi0wMy0wMSAxNjozMzowNy42MTc5MTY1NDUgKzAxMDAKK0BAIC0wLDAgKzEsMzY1IEBACisr 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 IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgY29uc3Qgc3RydWN0IHsKKysgICAgY29uc3QgdW5z aWduZWQgY2hhciBrZXlbMTZdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsx Nl07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07CisrfSB0ZXN0c1td ID0geworKyAgICB7CisrICAgICAgICB7CisrICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAz LCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorKyAgICAgICAgICAgICAgICAweDA4LCAweDA5LCAw eDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGfSwgeworKyAgICAgICAgMHgwMCwgMHgx MSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKKysgICAgICAgICAgICAgICAg MHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwgMHhDQywgMHhERCwgMHhFRSwgMHhGRn0sIHsKKysweDY5 LCAweEM0LCAweEUwLCAweEQ4LCAweDZBLCAweDdCLCAweDA0LCAweDMwLAorKyAgICAgICAgICAg ICAgICAweEQ4LCAweENELCAweEI3LCAweDgwLCAweDcwLCAweEI0LCAweEM1LCAweDVBfSx9LH07 CisrCisrc3RhdGljIGludCBjb3JydXB0X2FlczsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9hZXMo KQorK3sKKysgICAgY29ycnVwdF9hZXMgPSAxOworK30KKysKKytpbnQgRklQU19zZWxmdGVzdF9h ZXMoKQorK3sKKysgICAgaW50IG47CisrICAgIGludCByZXQgPSAwOworKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGZvciAo biA9IDA7IG4gPCAxOyArK24pIHsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysK KysgICAgICAgIG1lbWNweShrZXksIHRlc3RzW25dLmtleSwgc2l6ZW9mKGtleSkpOworKyAgICAg ICAgaWYgKGNvcnJ1cHRfYWVzKQorKyAgICAgICAgICAgIGtleVswXSsrOworKyAgICAgICAgaWYg KGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBrZXksIE5VTEwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZXN0c1tuXS5wbGFpbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0 c1tuXS5jaXBoZXJ0ZXh0LCAxNikgPD0gMCkKKysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAg fQorKyAgICByZXQgPSAxOworKyBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0 eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VM RlRFU1RfQUVTLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgcmV0dXJuIHJldDsKKyt9 CisrCisrLyogQUVTLUNDTSB0ZXN0IGRhdGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMg Ki8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fa2V5W10gPSB7CisrICAgIDB4 Y2UsIDB4YjAsIDB4MDksIDB4YWUsIDB4YTQsIDB4NDUsIDB4NDQsIDB4NTEsIDB4ZmUsIDB4YWQs IDB4ZjAsIDB4ZTYsCisrICAgIDB4YjMsIDB4NmYsIDB4NDUsIDB4NTUsIDB4NWQsIDB4ZDAsIDB4 NDcsIDB4MjMsIDB4YmEsIDB4YTQsIDB4NDgsIDB4ZTgKKyt9OworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtdID0geworKyAgICAweDc2LCAweDQwLCAweDQzLCAweGM0 LCAweDk0LCAweDYwLCAweGI3CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBj Y21fYWRhdGFbXSA9IHsKKysgICAgMHg2ZSwgMHg4MCwgMHhkZCwgMHg3ZiwgMHgxYiwgMHhhZCwg MHhmMywgMHhhMSwgMHhjOSwgMHhhYiwgMHgyNSwgMHhjNywKKysgICAgMHg1ZiwgMHgxMCwgMHhi ZCwgMHhlNywgMHg4YywgMHgyMywgMHhmYSwgMHgwZSwgMHhiOCwgMHhmOSwgMHhhYSwgMHhhNSwK KysgICAgMHgzYSwgMHhkZSwgMHhmYiwgMHhmNCwgMHhjYiwgMHhmNywgMHg4ZiwgMHhlNAorK307 CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3B0W10gPSB7CisrICAgIDB4Yzgs IDB4ZDIsIDB4NzUsIDB4ZjksIDB4MTksIDB4ZTEsIDB4N2QsIDB4N2YsIDB4ZTYsIDB4OWMsIDB4 MmEsIDB4MWYsCisrICAgIDB4NTgsIDB4OTMsIDB4OWQsIDB4ZmUsIDB4NGQsIDB4NDAsIDB4Mzcs IDB4OTEsIDB4YjUsIDB4ZGYsIDB4MTMsIDB4MTAKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGNjbV9jdFtdID0geworKyAgICAweDhhLCAweDBmLCAweDNkLCAweDgyLCAweDI5 LCAweGU0LCAweDhlLCAweDc0LCAweDg3LCAweGZkLCAweDk1LCAweGEyLAorKyAgICAweDhhLCAw eGQzLCAweDkyLCAweGM4LCAweDBiLCAweDM2LCAweDgxLCAweGQ0LCAweGZiLCAweGM3LCAweGJi LCAweGZkCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fdGFnW10gPSB7 CisrICAgIDB4MmQsIDB4ZDYsIDB4ZWYsIDB4MWMsIDB4NDUsIDB4ZDQsIDB4Y2MsIDB4YjcsIDB4 MjMsIDB4ZGMsIDB4MDcsIDB4NDQsCisrICAgIDB4MTQsIDB4ZGIsIDB4NTAsIDB4NmQKKyt9Owor KworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCkKKyt7CisrICAgIGludCByZXQgPSAw OworKyAgICB1bnNpZ25lZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOworKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrICAgIG1lbXNldChv dXQsIDAsIHNpemVvZihvdXQpKTsKKysgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBF VlBfYWVzXzE5Ml9jY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMSkpCisrICAgICAgICBnb3RvIGVy cjsKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRf SVZMRU4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2NtX25vbmNlKSwg TlVMTCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJs KCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKGNjbV90YWcpLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAo IUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwg MSkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwg TlVMTCwgc2l6ZW9mKGNjbV9wdCkpICE9IHNpemVvZihjY21fcHQpKQorKyAgICAgICAgZ290byBl cnI7CisrICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6ZW9mKGNj bV9hZGF0YSkpIDwgMCkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigm Y3R4LCBvdXQsIGNjbV9wdCwgc2l6ZW9mKGNjbV9wdCkpICE9IHNpemVvZihjY21fY3QpKQorKyAg ICAgICAgZ290byBlcnI7CisrCisrICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBF VlBfQ1RSTF9DQ01fR0VUX1RBRywgMTYsIHRhZykpCisrICAgICAgICBnb3RvIGVycjsKKysgICAg aWYgKG1lbWNtcCh0YWcsIGNjbV90YWcsIHNpemVvZihjY21fdGFnKSkKKysgICAgICAgIHx8IG1l bWNtcChvdXQsIGNjbV9jdCwgc2l6ZW9mKGNjbV9jdCkpKQorKyAgICAgICAgZ290byBlcnI7Cisr CisrICAgIG1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysKKysgICAgaWYgKCFFVlBfQ2lw aGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMCkp CisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgs IEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2YoY2NtX25vbmNlKSwgTlVMTCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFF VlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfVEFHLCAxNiwgdGFnKSkK KysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5V TEwsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMCkpCisrICAgICAgICBnb3RvIGVycjsKKysg ICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9jdCkpICE9IHNp emVvZihjY21fY3QpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmIChFVlBfQ2lwaGVyKCZj dHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6ZW9mKGNjbV9hZGF0YSkpIDwgMCkKKysgICAgICAgIGdv dG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGNjbV9jdCwgc2l6ZW9mKGNj bV9jdCkpICE9IHNpemVvZihjY21fcHQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlm IChtZW1jbXAob3V0LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSkKKysgICAgICAgIGdvdG8gZXJy OworKworKyAgICByZXQgPSAxOworKworKyBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFu dXAoJmN0eCk7CisrCisrICAgIGlmIChyZXQgPT0gMCkgeworKyAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NNLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAg ICAgIHJldHVybiAwOworKyAgICB9IGVsc2UKKysgICAgICAgIHJldHVybiByZXQ7CisrCisrfQor KworKy8qIEFFUy1HQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICov CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2tleVtdID0geworKyAgICAweGVl LCAweGJjLCAweDFmLCAweDU3LCAweDQ4LCAweDdmLCAweDUxLCAweDkyLCAweDFjLCAweDA0LCAw eDY1LCAweDY2LAorKyAgICAweDVmLCAweDhhLCAweGU2LCAweGQxLCAweDY1LCAweDhiLCAweGIy LCAweDZkLCAweGU2LCAweGY4LCAweGEwLCAweDY5LAorKyAgICAweGEzLCAweDUyLCAweDAyLCAw eDkzLCAweGE1LCAweDcyLCAweDA3LCAweDhmCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBnY21faXZbXSA9IHsKKysgICAgMHg5OSwgMHhhYSwgMHgzZSwgMHg2OCwgMHhlZCwg MHg4MSwgMHg3MywgMHhhMCwgMHhlZSwgMHhkMCwgMHg2NiwgMHg4NAorK307CisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3B0W10gPSB7CisrICAgIDB4ZjUsIDB4NmUsIDB4ODcs IDB4MDUsIDB4NWIsIDB4YzMsIDB4MmQsIDB4MGUsIDB4ZWIsIDB4MzEsIDB4YjIsIDB4ZWEsCisr ICAgIDB4Y2MsIDB4MmIsIDB4ZjIsIDB4YTUKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGdjbV9hYWRbXSA9IHsKKysgICAgMHg0ZCwgMHgyMywgMHhjMywgMHhjZSwgMHhjMywg MHgzNCwgMHhiNCwgMHg5YiwgMHhkYiwgMHgzNywgMHgwYywgMHg0MywKKysgICAgMHg3ZiwgMHhl YywgMHg3OCwgMHhkZQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2N0 W10gPSB7CisrICAgIDB4ZjcsIDB4MjYsIDB4NDQsIDB4MTMsIDB4YTgsIDB4NGMsIDB4MGUsIDB4 N2MsIDB4ZDUsIDB4MzYsIDB4ODYsIDB4N2UsCisrICAgIDB4YjksIDB4ZjIsIDB4MTcsIDB4MzYK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV90YWdbXSA9IHsKKysgICAg MHg2NywgMHhiYSwgMHgwNSwgMHgxMCwgMHgyNiwgMHgyYSwgMHhlNCwgMHg4NywgMHhkNywgMHgz NywgMHhlZSwgMHg2MiwKKysgICAgMHg5OCwgMHhmNywgMHg3ZSwgMHgwYworK307CisrCisraW50 IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2b2lkKQorK3sKKysgICAgaW50IHJldCA9IDA7CisrICAg IHVuc2lnbmVkIGNoYXIgb3V0WzEyOF0sIHRhZ1sxNl07CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0 eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysgICAgbWVtc2V0KG91dCwgMCwg c2l6ZW9mKG91dCkpOworKyAgICBtZW1zZXQodGFnLCAwLCBzaXplb2YodGFnKSk7CisrICAgIGlm ICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18yNTZfZ2NtKCksIE5VTEwsIE5VTEws IE5VTEwsIDEpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NJUEhFUl9DVFhf Y3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mKGdjbV9pdiksIE5VTEwpKQorKyAgICAgICAgZ290byBlcnI7CisrICAg IGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2 LCAxKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxM LCBnY21fYWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwgMCkKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICBpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGdjbV9wdCwgc2l6ZW9mKGdjbV9wdCkpICE9IHNp emVvZihnY21fY3QpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmIChFVlBfQ2lwaGVyKCZj dHgsIE5VTEwsIE5VTEwsIDApIDwgMCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAo IUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX0dFVF9UQUcsIDE2LCB0YWcp KQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlmIChtZW1jbXAodGFnLCBnY21fdGFnLCAx NikgfHwgbWVtY21wKG91dCwgZ2NtX2N0LCAxNikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ICAgbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOworKworKyAgICBpZiAoIUVWUF9DaXBoZXJJ bml0X2V4KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSkKKysg ICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQ X0NUUkxfR0NNX1NFVF9JVkxFTiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZihnY21faXYpLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9DSVBI RVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9UQUcsIDE2LCB0YWcpKQorKyAgICAg ICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwgTlVM TCwgZ2NtX2tleSwgZ2NtX2l2LCAwKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQ X0NpcGhlcigmY3R4LCBOVUxMLCBnY21fYWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwgMCkKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGdjbV9jdCwgc2l6 ZW9mKGdjbV9jdCkpICE9IHNpemVvZihnY21fcHQpKQorKyAgICAgICAgZ290byBlcnI7CisrICAg IGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApIDwgMCkKKysgICAgICAgIGdvdG8g ZXJyOworKworKyAgICBpZiAobWVtY21wKG91dCwgZ2NtX3B0LCAxNikpCisrICAgICAgICBnb3Rv IGVycjsKKysKKysgICAgcmV0ID0gMTsKKysKKysgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9j bGVhbnVwKCZjdHgpOworKworKyAgICBpZiAocmV0ID09IDApIHsKKysgICAgICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0dDTSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Cisr ICAgICAgICByZXR1cm4gMDsKKysgICAgfSBlbHNlCisrICAgICAgICByZXR1cm4gcmV0OworKwor K30KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2tleVtdID0geworKyAg ICAweGExLCAweGI5LCAweDBjLCAweGJhLCAweDNmLCAweDA2LCAweGFjLCAweDM1LCAweDNiLCAw eDJjLCAweDM0LCAweDM4LAorKyAgICAweDc2LCAweDA4LCAweDE3LCAweDYyLCAweDA5LCAweDA5 LCAweDIzLCAweDAyLCAweDZlLCAweDkxLCAweDc3LCAweDE4LAorKyAgICAweDE1LCAweGYyLCAw eDlkLCAweGFiLCAweDAxLCAweDkzLCAweDJmLCAweDJmCisrfTsKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBYVFNfMTI4X2lbXSA9IHsKKysgICAgMHg0ZiwgMHhhZSwgMHhmNywgMHgx MSwgMHg3YywgMHhkYSwgMHg1OSwgMHhjNiwgMHg2ZSwgMHg0YiwgMHg5MiwgMHgwMSwKKysgICAg MHgzZSwgMHg3NiwgMHg4YSwgMHhkNQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgWFRTXzEyOF9wdFtdID0geworKyAgICAweGViLCAweGFiLCAweGNlLCAweDk1LCAweGIxLCAw eDRkLCAweDNjLCAweDhkLCAweDZmLCAweGIzLCAweDUwLCAweDM5LAorKyAgICAweDA3LCAweDkw LCAweDMxLCAweDFjCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4 X2N0W10gPSB7CisrICAgIDB4NzcsIDB4OGEsIDB4ZTgsIDB4YjQsIDB4M2MsIDB4YjksIDB4OGQs IDB4NWEsIDB4ODIsIDB4NTAsIDB4ODEsIDB4ZDUsCisrICAgIDB4YmUsIDB4NDcsIDB4MWMsIDB4 NjMKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfa2V5W10gPSB7 CisrICAgIDB4MWUsIDB4YTYsIDB4NjEsIDB4YzUsIDB4OGQsIDB4OTQsIDB4M2EsIDB4MGUsIDB4 NDgsIDB4MDEsIDB4ZTQsIDB4MmYsCisrICAgIDB4NGIsIDB4MDksIDB4NDcsIDB4MTQsIDB4OWUs IDB4N2YsIDB4OWYsIDB4OGUsIDB4M2UsIDB4NjgsIDB4ZDAsIDB4YzcsCisrICAgIDB4NTAsIDB4 NTIsIDB4MTAsIDB4YmQsIDB4MzEsIDB4MWEsIDB4MGUsIDB4N2MsIDB4ZDYsIDB4ZTEsIDB4M2Ys IDB4ZmQsCisrICAgIDB4ZjIsIDB4NDEsIDB4OGQsIDB4OGQsIDB4MTksIDB4MTEsIDB4YzAsIDB4 MDQsIDB4Y2QsIDB4YTUsIDB4OGQsIDB4YTMsCisrICAgIDB4ZDYsIDB4MTksIDB4YjcsIDB4ZTIs IDB4YjksIDB4MTQsIDB4MWUsIDB4NTgsIDB4MzEsIDB4OGUsIDB4ZWEsIDB4MzksCisrICAgIDB4 MmMsIDB4ZjQsIDB4MWIsIDB4MDgKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IFhUU18yNTZfaVtdID0geworKyAgICAweGFkLCAweGY4LCAweGQ5LCAweDI2LCAweDI3LCAweDQ2 LCAweDRhLCAweGQyLCAweGYwLCAweDQyLCAweDhlLCAweDg0LAorKyAgICAweGE5LCAweGY4LCAw eDc1LCAweDY0CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X3B0 W10gPSB7CisrICAgIDB4MmUsIDB4ZWQsIDB4ZWEsIDB4NTIsIDB4Y2QsIDB4ODIsIDB4MTUsIDB4 ZTEsIDB4YWMsIDB4YzYsIDB4NDcsIDB4ZTgsCisrICAgIDB4MTAsIDB4YmIsIDB4YzMsIDB4NjQs IDB4MmUsIDB4ODcsIDB4MjgsIDB4N2YsIDB4OGQsIDB4MmUsIDB4NTcsIDB4ZTMsCisrICAgIDB4 NmMsIDB4MGEsIDB4MjQsIDB4ZmIsIDB4YzEsIDB4MmEsIDB4MjAsIDB4MmUKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfY3RbXSA9IHsKKysgICAgMHhjYiwgMHhh YSwgMHhkMCwgMHhlMiwgMHhmNiwgMHhjZSwgMHhhMywgMHhmNSwgMHgwYiwgMHgzNywgMHhmOSwg MHgzNCwKKysgICAgMHhkNCwgMHg2YSwgMHg5YiwgMHgxMywgMHgwYiwgMHg5ZCwgMHg1NCwgMHhm MCwgMHg3ZSwgMHgzNCwgMHhmMywgMHg2YSwKKysgICAgMHhmNywgMHg5MywgMHhlOCwgMHg2Ziwg MHg3MywgMHhjNiwgMHhkNywgMHhkYgorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0 cygpCisreworKyAgICBpbnQgcmV0ID0gMTsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAg ICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoZmlwc19jaXBoZXJfdGVz dCgmY3R4LCBFVlBfYWVzXzEyOF94dHMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgWFRT XzEyOF9rZXksIFhUU18xMjhfaSwgWFRTXzEyOF9wdCwgWFRTXzEyOF9jdCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKFhUU18xMjhfcHQpKSA8PSAwKQorKyAgICAgICAgcmV0ID0g MDsKKysKKysgICAgaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18yNTZfeHRzKCks CisrICAgICAgICAgICAgICAgICAgICAgICAgIFhUU18yNTZfa2V5LCBYVFNfMjU2X2ksIFhUU18y NTZfcHQsIFhUU18yNTZfY3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihYVFNf MjU2X3B0KSkgPD0gMCkKKysgICAgICAgIHJldCA9IDA7CisrCisrICAgIEVWUF9DSVBIRVJfQ1RY X2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hUUywgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAg IHJldHVybiByZXQ7CisrfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL2ZpcHMvZmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwcy5jCist LS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMJMjAxNi0wMy0wMSAxNjoz MzowNy42MTg5MTY1NjggKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBz LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTg5MTY1NjggKzAxMDAKK0BAIC0wLDAgKzEsNDgzIEBA CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv 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 IE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2RlZmluZSBfR05VX1NPVVJDRQorKwor KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8ZGxm Y24uaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1 ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjIGluY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKworKyMgaWZuZGVmIFBBVEhfTUFYCisrIyAgZGVmaW5lIFBBVEhf TUFYIDEwMjQKKysjIGVuZGlmCisrCisrc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAw OworK3N0YXRpYyBpbnQgZmlwc19tb2RlID0gMDsKKytzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9 IDA7CisrCisrc3RhdGljIGludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCk7Cisrc3RhdGlj IGludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOworK3N0YXRpYyBpbnQgZmlwc19jbGVh cl9vd25pbmdfdGhyZWFkKHZvaWQpOworKworKyMgZGVmaW5lIGZpcHNfd19sb2NrKCkgICBDUllQ VE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMpCisrIyBkZWZpbmUgZmlwc193X3VubG9jaygpIENS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTKQorKyMgZGVmaW5lIGZpcHNfcl9sb2NrKCkg ICBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpCisrIyBkZWZpbmUgZmlwc19yX3VubG9j aygpIENSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTKQorKworK3N0YXRpYyB2b2lkIGZp cHNfc2V0X21vZGUoaW50IG9ub2ZmKQorK3sKKysgICAgaW50IG93bmluZ190aHJlYWQgPSBmaXBz X2lzX293bmluZ190aHJlYWQoKTsKKysKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkgeworKyAgICAg ICAgaWYgKCFvd25pbmdfdGhyZWFkKQorKyAgICAgICAgICAgIGZpcHNfd19sb2NrKCk7CisrICAg ICAgICBmaXBzX21vZGUgPSBvbm9mZjsKKysgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKKysg ICAgICAgICAgICBmaXBzX3dfdW5sb2NrKCk7CisrICAgIH0KKyt9CisrCisraW50IEZJUFNfbW9k dWxlX21vZGUodm9pZCkKKyt7CisrICAgIGludCByZXQgPSAwOworKyAgICBpbnQgb3duaW5nX3Ro cmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKyAgICBpZiAoZmlwc19zdGFydGVk KSB7CisrICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCisrICAgICAgICAgICAgZmlwc19yX2xv Y2soKTsKKysgICAgICAgIHJldCA9IGZpcHNfbW9kZTsKKysgICAgICAgIGlmICghb3duaW5nX3Ro cmVhZCkKKysgICAgICAgICAgICBmaXBzX3JfdW5sb2NrKCk7CisrICAgIH0KKysgICAgcmV0dXJu IHJldDsKKyt9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCisreworKyAgICBp bnQgcmV0ID0gMDsKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkgeworKyAgICAgICAgaW50IG93bmlu Z190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysgICAgICAgIGlmICghb3du aW5nX3RocmVhZCkKKysgICAgICAgICAgICBmaXBzX3JfbG9jaygpOworKyAgICAgICAgcmV0ID0g Zmlwc19zZWxmdGVzdF9mYWlsOworKyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQorKyAgICAg ICAgICAgIGZpcHNfcl91bmxvY2soKTsKKysgICAgfQorKyAgICByZXR1cm4gcmV0OworK30KKysK KysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNh bGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRo ZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZv cm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKKyt7 CisrICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpIHsKKysgICAgICAgIE9wZW5TU0xEaWUoX19G SUxFX18sIF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBGQUlMVVJFIik7CisrICAgIH0K Kyt9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCisreworKyAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOworK30KKysKKysvKiB3ZSBpbXBsZW1lbnQgd2hhdCBsaWJmaXBz Y2hlY2sgZG9lcyBvdXJzZWx2ZXMgKi8KKysKKytzdGF0aWMgaW50CisrZ2V0X2xpYnJhcnlfcGF0 aChjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1lLCBjaGFyICpwYXRo LAorKyAgICAgICAgICAgICAgICAgc2l6ZV90IHBhdGhsZW4pCisreworKyAgICBEbF9pbmZvIGlu Zm87CisrICAgIHZvaWQgKmRsLCAqc3ltOworKyAgICBpbnQgcnYgPSAtMTsKKysKKysgICAgZGwg PSBkbG9wZW4obGlibmFtZSwgUlRMRF9MQVpZKTsKKysgICAgaWYgKGRsID09IE5VTEwpIHsKKysg ICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICBzeW0gPSBkbHN5bShkbCwgc3ltYm9s bmFtZSk7CisrCisrICAgIGlmIChzeW0gIT0gTlVMTCAmJiBkbGFkZHIoc3ltLCAmaW5mbykpIHsK KysgICAgICAgIHN0cm5jcHkocGF0aCwgaW5mby5kbGlfZm5hbWUsIHBhdGhsZW4gLSAxKTsKKysg ICAgICAgIHBhdGhbcGF0aGxlbiAtIDFdID0gJ1wwJzsKKysgICAgICAgIHJ2ID0gMDsKKysgICAg fQorKworKyAgICBkbGNsb3NlKGRsKTsKKysKKysgICAgcmV0dXJuIHJ2OworK30KKysKKytzdGF0 aWMgY29uc3QgY2hhciBjb252W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisrCisrc3RhdGljIGNo YXIgKmJpbjJoZXgodm9pZCAqYnVmLCBzaXplX3QgbGVuKQorK3sKKysgICAgY2hhciAqaGV4LCAq cDsKKysgICAgdW5zaWduZWQgY2hhciAqc3JjID0gYnVmOworKworKyAgICBoZXggPSBtYWxsb2Mo bGVuICogMiArIDEpOworKyAgICBpZiAoaGV4ID09IE5VTEwpCisrICAgICAgICByZXR1cm4gTlVM TDsKKysKKysgICAgcCA9IGhleDsKKysKKysgICAgd2hpbGUgKGxlbiA+IDApIHsKKysgICAgICAg IHVuc2lnbmVkIGM7CisrCisrICAgICAgICBjID0gKnNyYzsKKysgICAgICAgIHNyYysrOworKwor KyAgICAgICAgKnAgPSBjb252W2MgPj4gNF07CisrICAgICAgICArK3A7CisrICAgICAgICAqcCA9 IGNvbnZbYyAmIDB4MGZdOworKyAgICAgICAgKytwOworKyAgICAgICAgLS1sZW47CisrICAgIH0K KysgICAgKnAgPSAnXDAnOworKyAgICByZXR1cm4gaGV4OworK30KKysKKysjIGRlZmluZSBITUFD X1BSRUZJWCAiLiIKKysjIGRlZmluZSBITUFDX1NVRkZJWCAiLmhtYWMiCisrIyBkZWZpbmUgUkVB RF9CVUZGRVJfTEVOR1RIIDE2Mzg0CisrCisrc3RhdGljIGNoYXIgKm1ha2VfaG1hY19wYXRoKGNv bnN0IGNoYXIgKm9yaWdwYXRoKQorK3sKKysgICAgY2hhciAqcGF0aCwgKnA7CisrICAgIGNvbnN0 IGNoYXIgKmZuOworKworKyAgICBwYXRoID0KKysgICAgICAgIG1hbGxvYyhzaXplb2YoSE1BQ19Q UkVGSVgpICsgc2l6ZW9mKEhNQUNfU1VGRklYKSArIHN0cmxlbihvcmlncGF0aCkpOworKyAgICBp ZiAocGF0aCA9PSBOVUxMKSB7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAg ICBmbiA9IHN0cnJjaHIob3JpZ3BhdGgsICcvJyk7CisrICAgIGlmIChmbiA9PSBOVUxMKSB7Cisr ICAgICAgICBmbiA9IG9yaWdwYXRoOworKyAgICB9IGVsc2UgeworKyAgICAgICAgKytmbjsKKysg ICAgfQorKworKyAgICBzdHJuY3B5KHBhdGgsIG9yaWdwYXRoLCBmbiAtIG9yaWdwYXRoKTsKKysg ICAgcCA9IHBhdGggKyAoZm4gLSBvcmlncGF0aCk7CisrICAgIHAgPSBzdHBjcHkocCwgSE1BQ19Q UkVGSVgpOworKyAgICBwID0gc3RwY3B5KHAsIGZuKTsKKysgICAgcCA9IHN0cGNweShwLCBITUFD X1NVRkZJWCk7CisrCisrICAgIHJldHVybiBwYXRoOworK30KKysKKytzdGF0aWMgY29uc3QgY2hh ciBobWFja2V5W10gPSAib3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOworKworK3N0 YXRpYyBpbnQgY29tcHV0ZV9maWxlX2htYWMoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmJ1Ziwg c2l6ZV90ICpobWFjbGVuKQorK3sKKysgICAgRklMRSAqZiA9IE5VTEw7CisrICAgIGludCBydiA9 IC0xOworKyAgICB1bnNpZ25lZCBjaGFyIHJidWZbUkVBRF9CVUZGRVJfTEVOR1RIXTsKKysgICAg c2l6ZV90IGxlbjsKKysgICAgdW5zaWduZWQgaW50IGhsZW47CisrICAgIEhNQUNfQ1RYIGM7Cisr CisrICAgIEhNQUNfQ1RYX2luaXQoJmMpOworKworKyAgICBmID0gZm9wZW4ocGF0aCwgInIiKTsK KysKKysgICAgaWYgKGYgPT0gTlVMTCkgeworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysK KysgICAgSE1BQ19Jbml0KCZjLCBobWFja2V5LCBzaXplb2YoaG1hY2tleSkgLSAxLCBFVlBfc2hh MjU2KCkpOworKworKyAgICB3aGlsZSAoKGxlbiA9IGZyZWFkKHJidWYsIDEsIHNpemVvZihyYnVm KSwgZikpICE9IDApIHsKKysgICAgICAgIEhNQUNfVXBkYXRlKCZjLCByYnVmLCBsZW4pOworKyAg ICB9CisrCisrICAgIGxlbiA9IHNpemVvZihyYnVmKTsKKysgICAgLyogcmV1c2UgcmJ1ZiBmb3Ig aG1hYyAqLworKyAgICBITUFDX0ZpbmFsKCZjLCByYnVmLCAmaGxlbik7CisrCisrICAgICpidWYg PSBtYWxsb2MoaGxlbik7CisrICAgIGlmICgqYnVmID09IE5VTEwpIHsKKysgICAgICAgIGdvdG8g ZW5kOworKyAgICB9CisrCisrICAgICpobWFjbGVuID0gaGxlbjsKKysKKysgICAgbWVtY3B5KCpi dWYsIHJidWYsIGhsZW4pOworKworKyAgICBydiA9IDA7CisrIGVuZDoKKysgICAgSE1BQ19DVFhf Y2xlYW51cCgmYyk7CisrCisrICAgIGlmIChmKQorKyAgICAgICAgZmNsb3NlKGYpOworKworKyAg ICByZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyBpbnQgRklQU0NIRUNLX3ZlcmlmeShjb25zdCBj aGFyICpsaWJuYW1lLCBjb25zdCBjaGFyICpzeW1ib2xuYW1lKQorK3sKKysgICAgY2hhciBwYXRo W1BBVEhfTUFYICsgMV07CisrICAgIGludCBydjsKKysgICAgRklMRSAqaGY7CisrICAgIGNoYXIg KmhtYWNwYXRoLCAqcDsKKysgICAgY2hhciAqaG1hYyA9IE5VTEw7CisrICAgIHNpemVfdCBuOwor KworKyAgICBydiA9IGdldF9saWJyYXJ5X3BhdGgobGlibmFtZSwgc3ltYm9sbmFtZSwgcGF0aCwg c2l6ZW9mKHBhdGgpKTsKKysKKysgICAgaWYgKHJ2IDwgMCkKKysgICAgICAgIHJldHVybiAwOwor KworKyAgICBobWFjcGF0aCA9IG1ha2VfaG1hY19wYXRoKHBhdGgpOworKyAgICBpZiAoaG1hY3Bh dGggPT0gTlVMTCkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICBoZiA9IGZvcGVuKGhtYWNw YXRoLCAiciIpOworKyAgICBpZiAoaGYgPT0gTlVMTCkgeworKyAgICAgICAgZnJlZShobWFjcGF0 aCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBpZiAoZ2V0bGluZSgmaG1h YywgJm4sIGhmKSA+IDApIHsKKysgICAgICAgIHZvaWQgKmJ1ZjsKKysgICAgICAgIHNpemVfdCBo bWFjbGVuOworKyAgICAgICAgY2hhciAqaGV4OworKworKyAgICAgICAgaWYgKChwID0gc3RyY2hy KGhtYWMsICdcbicpKSAhPSBOVUxMKQorKyAgICAgICAgICAgICpwID0gJ1wwJzsKKysKKysgICAg ICAgIGlmIChjb21wdXRlX2ZpbGVfaG1hYyhwYXRoLCAmYnVmLCAmaG1hY2xlbikgPCAwKSB7Cisr ICAgICAgICAgICAgcnYgPSAtNDsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAgICAgIH0K KysKKysgICAgICAgIGlmICgoaGV4ID0gYmluMmhleChidWYsIGhtYWNsZW4pKSA9PSBOVUxMKSB7 CisrICAgICAgICAgICAgZnJlZShidWYpOworKyAgICAgICAgICAgIHJ2ID0gLTU7CisrICAgICAg ICAgICAgZ290byBlbmQ7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoc3RyY21wKGhleCwg aG1hYykgIT0gMCkgeworKyAgICAgICAgICAgIHJ2ID0gLTE7CisrICAgICAgICB9CisrICAgICAg ICBmcmVlKGJ1Zik7CisrICAgICAgICBmcmVlKGhleCk7CisrICAgIH0gZWxzZSB7CisrICAgICAg ICBydiA9IC0xOworKyAgICB9CisrCisrIGVuZDoKKysgICAgZnJlZShobWFjKTsKKysgICAgZnJl ZShobWFjcGF0aCk7CisrICAgIGZjbG9zZShoZik7CisrCisrICAgIGlmIChydiA8IDApCisrICAg ICAgICByZXR1cm4gMDsKKysKKysgICAgLyogY2hlY2sgc3VjY2Vzc2Z1bCAqLworKyAgICByZXR1 cm4gMTsKKyt9CisrCisraW50IEZJUFNfbW9kdWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3Qg Y2hhciAqYXV0aCkKKyt7CisrICAgIGludCByZXQgPSAwOworKworKyAgICBmaXBzX3dfbG9jaygp OworKyAgICBmaXBzX3N0YXJ0ZWQgPSAxOworKyAgICBmaXBzX3NldF9vd25pbmdfdGhyZWFkKCk7 CisrCisrICAgIGlmIChvbm9mZikgeworKworKyAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0g MDsKKysKKysgICAgICAgIC8qIERvbid0IGdvIGludG8gRklQUyBtb2RlIHR3aWNlLCBqdXN0IHNv IHdlIGNhbiBkbyBhdXRvbWFnaWMKKysgICAgICAgICAgIHNlZWRpbmcgKi8KKysgICAgICAgIGlm IChGSVBTX21vZHVsZV9tb2RlKCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X01PRFVMRV9NT0RFX1NFVCwKKysgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSVBTX01PREVf QUxSRUFEWV9TRVQpOworKyAgICAgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrICAg ICAgICAgICAgcmV0ID0gMDsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAgICAgIH0KKysj IGlmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCisrICAgICAgICB7CisrICAgICAgICAgICAgZXh0ZXJu IHVuc2lnbmVkIGludCBPUEVOU1NMX2lhMzJjYXBfUFsyXTsKKysgICAgICAgICAgICBpZiAoKE9Q RU5TU0xfaWEzMmNhcF9QWzBdICYgKDEgPDwgMjUgfCAxIDw8IDI2KSkgIT0KKysgICAgICAgICAg ICAgICAgKDEgPDwgMjUgfCAxIDw8IDI2KSkgeworKyAgICAgICAgICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCwKKysgICAgICAgICAgICAgICAgICAgICAgICBGSVBT X1JfVU5TVVBQT1JURURfUExBVEZPUk0pOworKyAgICAgICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0 X2ZhaWwgPSAxOworKyAgICAgICAgICAgICAgICByZXQgPSAwOworKyAgICAgICAgICAgICAgICBn b3RvIGVuZDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgT1BFTlNTTF9pYTMyY2FwX1Bb MF0gfD0gKDEgPDwgMjgpOyAvKiBzZXQgInNoYXJlZCBjYWNoZSIgICAqLworKyAgICAgICAgICAg IE9QRU5TU0xfaWEzMmNhcF9QWzFdICY9IH4oMSA8PCAoNjAgLSAzMikpOyAvKiBjbGVhciBBVlgg ICAgICAgICAgICAqLworKyAgICAgICAgfQorKyMgZW5kaWYKKysKKysgICAgICAgIGlmICghRklQ U0NIRUNLX3ZlcmlmeQorKyAgICAgICAgICAgICgibGliY3J5cHRvLnNvLiIgU0hMSUJfVkVSU0lP Tl9OVU1CRVIsICJGSVBTX21vZGVfc2V0IikpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX01PRFVMRV9NT0RFX1NFVCwKKysgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSU5H RVJQUklOVF9ET0VTX05PVF9NQVRDSCk7CisrICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKKysgICAgICAgICAgICByZXQgPSAwOworKyAgICAgICAgICAgIGdvdG8gZW5kOworKyAg ICAgICAgfQorKworKyAgICAgICAgaWYgKCFGSVBTQ0hFQ0tfdmVyaWZ5CisrICAgICAgICAgICAg KCJsaWJzc2wuc28uIiBTSExJQl9WRVJTSU9OX05VTUJFUiwgIlNTTF9DVFhfbmV3IikpIHsKKysg ICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCwKKysgICAgICAg ICAgICAgICAgICAgIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7CisrICAgICAg ICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgICAgICAgICByZXQgPSAwOworKyAg ICAgICAgICAgIGdvdG8gZW5kOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKEZJUFNfc2Vs ZnRlc3QoKSkKKysgICAgICAgICAgICBmaXBzX3NldF9tb2RlKG9ub2ZmKTsKKysgICAgICAgIGVs c2UgeworKyAgICAgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrICAgICAgICAgICAg cmV0ID0gMDsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAgICAgIH0KKysgICAgICAgIHJl dCA9IDE7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKyAgICBmaXBzX3NldF9tb2RlKDAp OworKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKyAgICByZXQgPSAxOworKyBlbmQ6Cisr ICAgIGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOworKyAgICBmaXBzX3dfdW5sb2NrKCk7Cisr ICAgIHJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBDUllQVE9fVEhSRUFESUQgZmlwc190aHJl YWQ7Cisrc3RhdGljIGludCBmaXBzX3RocmVhZF9zZXQgPSAwOworKworK3N0YXRpYyBpbnQgZmlw c19pc19vd25pbmdfdGhyZWFkKHZvaWQpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAg aWYgKGZpcHNfc3RhcnRlZCkgeworKyAgICAgICAgQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19G SVBTMik7CisrICAgICAgICBpZiAoZmlwc190aHJlYWRfc2V0KSB7CisrICAgICAgICAgICAgQ1JZ UFRPX1RIUkVBRElEIGN1cjsKKysgICAgICAgICAgICBDUllQVE9fVEhSRUFESURfY3VycmVudCgm Y3VyKTsKKysgICAgICAgICAgICBpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNf dGhyZWFkKSkKKysgICAgICAgICAgICAgICAgcmV0ID0gMTsKKysgICAgICAgIH0KKysgICAgICAg IENSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrICAgIH0KKysgICAgcmV0dXJu IHJldDsKKyt9CisrCisraW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCkKKyt7CisrICAg IGludCByZXQgPSAwOworKworKyAgICBpZiAoZmlwc19zdGFydGVkKSB7CisrICAgICAgICBDUllQ VE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysgICAgICAgIGlmICghZmlwc190aHJlYWRf c2V0KSB7CisrICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmZpcHNfdGhyZWFk KTsKKysgICAgICAgICAgICByZXQgPSAxOworKyAgICAgICAgICAgIGZpcHNfdGhyZWFkX3NldCA9 IDE7CisrICAgICAgICB9CisrICAgICAgICBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQ UzIpOworKyAgICB9CisrICAgIHJldHVybiByZXQ7CisrfQorKworK2ludCBmaXBzX2NsZWFyX293 bmluZ190aHJlYWQodm9pZCkKKyt7CisrICAgIGludCByZXQgPSAwOworKworKyAgICBpZiAoZmlw c19zdGFydGVkKSB7CisrICAgICAgICBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK KysgICAgICAgIGlmIChmaXBzX3RocmVhZF9zZXQpIHsKKysgICAgICAgICAgICBDUllQVE9fVEhS RUFESUQgY3VyOworKyAgICAgICAgICAgIENSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOwor KyAgICAgICAgICAgIGlmICghQ1JZUFRPX1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQp KQorKyAgICAgICAgICAgICAgICBmaXBzX3RocmVhZF9zZXQgPSAwOworKyAgICAgICAgfQorKyAg ICAgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysgICAgfQorKyAgICBy ZXR1cm4gcmV0OworK30KKysKKysjIGlmIDAKKysvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRv IGVuc3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgorKyAqIG5hbWUg aXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0CisrICovCisrdm9pZCBo YXNoX2ZpbmFsKHZvaWQpCisreworKyAgICBGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLCBGSVBT X1JfTk9OX0ZJUFNfTUVUSE9EKTsKKyt9CisrIyBlbmRpZgorKworKyNlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMJMjAxNi0wMy0wMSAx NjozMzowNy42MTg5MTY1NjggKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9m aXBzX2NtYWNfc2VsZnRlc3QuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxODkxNjU2OCArMDEwMAor QEAgLTAsMCArMSwxNTYgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAx MSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NtYWMuaD4KKysjaW5jbHVkZSAiZmlwc19s b2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsKKysgICAg aW50IG5pZDsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbRVZQX01BWF9LRVlfTEVOR1RI XTsKKysgICAgc2l6ZV90IGtleXNpemU7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnWzY0 XTsKKysgICAgc2l6ZV90IG1zZ3NpemU7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjWzMy XTsKKysgICAgc2l6ZV90IG1hY3NpemU7CisrfSBDTUFDX0tBVDsKKysKKysvKiBmcm9tIGh0dHA6 Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9uaXN0cHVicy84MDAtMzhCL1NQXzgwMC0zOEIu cGRmICovCisrc3RhdGljIGNvbnN0IENNQUNfS0FUIHZlY3RvcltdID0geworKyAgICB7TklEX2Fl c18xMjhfY2JjLCAgICAgICAgICAgLyogQ291bnQgPSAzMiBmcm9tIENNQUNHZW5BRVMxMjgudHh0 ICovCisrICAgICB7MHg3NywgMHhhNywgMHg3ZiwgMHhhZiwgMHgyOSwgMHgwYywgMHgxZiwgMHhh MywKKysgICAgICAweDBjLCAweDY4LCAweDNkLCAweGYxLCAweDZiLCAweGE3LCAweGE3LCAweDdi LH0sIDEyOCwKKysgICAgIHsweDAyLCAweDA2LCAweDgzLCAweGUxLCAweGYwLCAweDM5LCAweDJm LCAweDRjLAorKyAgICAgIDB4YWMsIDB4NTQsIDB4MzEsIDB4OGIsIDB4NjAsIDB4MjksIDB4MjUs IDB4OWUsCisrICAgICAgMHg5YywgMHg1NSwgMHgzZCwgMHhiYywgMHg0YiwgMHg2YSwgMHhkOSwg MHg5OCwKKysgICAgICAweGU2LCAweDRkLCAweDU4LCAweGU0LCAweGU3LCAweGRjLCAweDJlLCAw eDEzLH0sIDI1NiwKKysgICAgIHsweGZiLCAweGZlLCAweGE0LCAweDFiLH0sIDMyfSwKKysgICAg e05JRF9hZXNfMTkyX2NiYywgICAgICAgICAgIC8qIENvdW50ID0gMjMgZnJvbSBDTUFDR2VuQUVT MTkyLnR4dCAqLworKyAgICAgezB4N2IsIDB4MzIsIDB4MzksIDB4MTMsIDB4NjksIDB4YWEsIDB4 NGMsIDB4YTksCisrICAgICAgMHg3NSwgMHg1OCwgMHgwOSwgMHg1YiwgMHhlMywgMHhjMywgMHhl YywgMHg4NiwKKysgICAgICAweDJiLCAweGQwLCAweDU3LCAweGNlLCAweGYxLCAweGUzLCAweDJk LCAweDYyLH0sIDE5MiwKKysgICAgIHsweDB9LCAwLAorKyAgICAgezB4ZTQsIDB4ZDksIDB4MzQs IDB4MGIsIDB4MDMsIDB4ZTYsIDB4N2QsIDB4ZWYsCisrICAgICAgMHhkNCwgMHg5NiwgMHg5Yywg MHhjMSwgMHhlZCwgMHgzNywgMHgzNSwgMHhlNix9LCAxMjgsCisrICAgICB9LAorKyAgICB7TklE X2Flc18yNTZfY2JjLCAgICAgICAgICAgLyogQ291bnQgPSAzMyBmcm9tIENNQUNHZW5BRVMyNTYu dHh0ICovCisrICAgICB7MHgwYiwgMHgxMiwgMHgyYSwgMHhjOCwgMHhmMywgMHg0ZSwgMHhkMSwg MHhmZSwKKysgICAgICAweDA4LCAweDJhLCAweDM2LCAweDI1LCAweGQxLCAweDU3LCAweDU2LCAw eDE0LAorKyAgICAgIDB4NTQsIDB4MTYsIDB4N2EsIDB4YzEsIDB4NDUsIDB4YTEsIDB4MGIsIDB4 YmYsCisrICAgICAgMHg3NywgMHhjNiwgMHhhNywgMHgwNSwgMHg5NiwgMHhkNSwgMHg3NCwgMHhm MSx9LCAyNTYsCisrICAgICB7MHg0OSwgMHg4YiwgMHg1MywgMHhmZCwgMHhlYywgMHg4NywgMHhl ZCwgMHhjYiwKKysgICAgICAweGYwLCAweDcwLCAweDk3LCAweGRjLCAweGNkLCAweGU5LCAweDNh LCAweDA4LAorKyAgICAgIDB4NGIsIDB4YWQsIDB4NzUsIDB4MDEsIDB4YTIsIDB4MjQsIDB4ZTMs IDB4ODgsCisrICAgICAgMHhkZiwgMHgzNCwgMHg5YywgMHhlMSwgMHg4OSwgMHg1OSwgMHhmZSwg MHg4NCwKKysgICAgICAweDg1LCAweGY4LCAweGFkLCAweDE1LCAweDM3LCAweGYwLCAweGQ4LCAw eDk2LAorKyAgICAgIDB4ZWEsIDB4NzMsIDB4YmUsIDB4ZGMsIDB4NzIsIDB4MTQsIDB4NzEsIDB4 M2YsfSwgMzg0LAorKyAgICAgezB4ZjYsIDB4MmMsIDB4NDYsIDB4MzIsIDB4OWIsfSwgNDAsCisr ICAgICB9LAorKyAgICB7TklEX2Rlc19lZGUzX2NiYywgICAgICAgICAgLyogQ291bnQgPSA0MSBm cm9tIENNQUNHZW5UREVTMy5yZXEgKi8KKysgICAgIHsweDg5LCAweGJjLCAweGQ5LCAweDUyLCAw eGE4LCAweGM4LCAweGFiLCAweDM3LAorKyAgICAgIDB4MWEsIDB4ZjQsIDB4OGEsIDB4YzcsIDB4 ZDAsIDB4NzAsIDB4ODUsIDB4ZDUsCisrICAgICAgMHhlZiwgMHhmNywgMHgwMiwgMHhlNiwgMHhk NiwgMHgyYywgMHhkYywgMHgyMyx9LCAxOTIsCisrICAgICB7MHhmYSwgMHg2MiwgMHgwYywgMHgx YiwgMHhiZSwgMHg5NywgMHgzMSwgMHg5ZSwKKysgICAgICAweDlhLCAweDBjLCAweGYwLCAweDQ5 LCAweDIxLCAweDIxLCAweGY3LCAweGEyLAorKyAgICAgIDB4MGUsIDB4YjAsIDB4OGEsIDB4NmEs IDB4NzAsIDB4OWQsIDB4Y2IsIDB4ZDAsCisrICAgICAgMHgwYSwgMHhhZiwgMHgzOCwgMHhlNCwg MHhmOSwgMHg5ZSwgMHg3NSwgMHg0ZSx9LCAyNTYsCisrICAgICB7MHg4ZiwgMHg0OSwgMHhhMSwg MHhiNywgMHhkNiwgMHhhYSwgMHgyMiwgMHg1OCx9LCA2NCwKKysgICAgIH0sCisrfTsKKysKKytp bnQgRklQU19zZWxmdGVzdF9jbWFjKCkKKyt7CisrICAgIHNpemVfdCBuLCBvdXRsZW47CisrICAg IHVuc2lnbmVkIGNoYXIgb3V0WzMyXTsKKysgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyOwor KyAgICBDTUFDX0NUWCAqY3R4ID0gQ01BQ19DVFhfbmV3KCk7CisrICAgIGNvbnN0IENNQUNfS0FU ICp0OworKyAgICBpbnQgcnYgPSAxOworKworKyAgICBmb3IgKG4gPSAwLCB0ID0gdmVjdG9yOyBu IDwgc2l6ZW9mKHZlY3RvcikgLyBzaXplb2YodmVjdG9yWzBdKTsgbisrLCB0KyspIHsKKysgICAg ICAgIGNpcGhlciA9IEZJUFNfZ2V0X2NpcGhlcmJ5bmlkKHQtPm5pZCk7CisrICAgICAgICBpZiAo IWNpcGhlcikgeworKyAgICAgICAgICAgIHJ2ID0gLTE7CisrICAgICAgICAgICAgZ290byBlcnI7 CisrICAgICAgICB9CisrICAgICAgICBpZiAoIUNNQUNfSW5pdChjdHgsIHQtPmtleSwgdC0+a2V5 c2l6ZSAvIDgsIGNpcGhlciwgMCkpIHsKKysgICAgICAgICAgICBydiA9IC0xOworKyAgICAgICAg ICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKCFDTUFDX1VwZGF0ZShjdHgs IHQtPm1zZywgdC0+bXNnc2l6ZSAvIDgpKSB7CisrICAgICAgICAgICAgcnYgPSAtMTsKKysgICAg ICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghQ01BQ19GaW5h bChjdHgsIG91dCwgJm91dGxlbikpIHsKKysgICAgICAgICAgICBydiA9IC0xOworKyAgICAgICAg ICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKyAgICAgICAgQ01BQ19DVFhfY2xlYW51cChjdHgp OworKworKyAgICAgICAgaWYgKG91dGxlbiA8IHQtPm1hY3NpemUgLyA4IHx8IG1lbWNtcChvdXQs IHQtPm1hYywgdC0+bWFjc2l6ZSAvIDgpKSB7CisrICAgICAgICAgICAgcnYgPSAwOworKyAgICAg ICAgfQorKyAgICB9CisrCisrIGVycjoKKysgICAgQ01BQ19DVFhfZnJlZShjdHgpOworKworKyAg ICBpZiAocnYgPT0gLTEpIHsKKysgICAgICAgIHJ2ID0gMDsKKysgICAgfQorKyAgICBpZiAoIXJ2 KQorKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9DTUFDLCBGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKKysKKysgICAgcmV0dXJuIHJ2OworK30KKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzCTIwMTYtMDMtMDEgMTY6 MzM6MDcuNjE4OTE2NTY4ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlw c19kZXNfc2VsZnRlc3QuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxODkxNjU2OCArMDEwMAorQEAg LTAsMCArMSwxMzggQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK KysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCB7CisrICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIga2V5WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07 CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKyt9IHRlc3RzMltdID0g eworKyAgICB7CisrICAgICAgICB7CisrICAgICAgICAweDdjLCAweDRmLCAweDZlLCAweGY3LCAw eGEyLCAweDA0LCAweDE2LCAweGVjLAorKyAgICAgICAgICAgICAgICAweDBiLCAweDZiLCAweDdj LCAweDllLCAweDVlLCAweDE5LCAweGE3LCAweGM0fSwgeworKyAgICAgICAgMHgwNiwgMHhhNywg MHhkOCwgMHg3OSwgMHhhYSwgMHhjZSwgMHg2OSwgMHhlZn0sIHsKKysgICAgICAgIDB4NGMsIDB4 MTEsIDB4MTcsIDB4NTUsIDB4YmYsIDB4YzQsIDB4NGUsIDB4ZmR9CisrICAgIH0sIHsKKysgICAg ICAgIHsKKysgICAgICAgIDB4NWQsIDB4OWUsIDB4MDEsIDB4ZDMsIDB4MjUsIDB4YzcsIDB4M2Us IDB4MzQsCisrICAgICAgICAgICAgICAgIDB4MDEsIDB4MTYsIDB4N2MsIDB4ODUsIDB4MjMsIDB4 ZGYsIDB4ZTAsIDB4Njh9LCB7CisrICAgICAgICAweDljLCAweDUwLCAweDA5LCAweDBmLCAweDVl LCAweDdkLCAweDY5LCAweDdlfSwgeworKyAgICAweGQyLCAweDBiLCAweDE4LCAweGRmLCAweGQ5 LCAweDBkLCAweDllLCAweGZmfSx9CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IHsKKysg ICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMjRdOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy IHBsYWludGV4dFs4XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwor K30gdGVzdHMzW10gPSB7CisrICAgIHsKKysgICAgICAgIHsKKysgICAgICAgIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrICAgICAgICAgICAgICAgIDB4 RkUsIDB4REMsIDB4QkEsIDB4OTgsIDB4NzYsIDB4NTQsIDB4MzIsIDB4MTAsCisrICAgICAgICAg ICAgICAgIDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OWEsIDB4YmMsIDB4ZGUsIDB4ZjB9LCB7 CisrICAgICAgICAweDhmLCAweDhmLCAweGJmLCAweDliLCAweDVkLCAweDQ4LCAweGI0LCAweDFj fSwgeworKyAgICAweDU5LCAweDhjLCAweGU1LCAweGQzLCAweDZjLCAweGEyLCAweGVhLCAweDFi fSx9LCB7CisrICAgICAgICB7CisrICAgICAgICAweERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0 LCAweDMyLCAweDEwLCAweEZFLAorKyAgICAgICAgICAgICAgICAweDAxLCAweDIzLCAweDQ1LCAw eDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAorKyAgICAgICAgICAgICAgICAweEVELCAweDM5 LCAweEQ5LCAweDUwLCAweEZBLCAweDc0LCAweEJDLCAweEM0fSwgeworKyAgICAgICAgMHgwMSwg MHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRn0sIHsKKysweDExLCAweDI1 LCAweGIwLCAweDM1LCAweGJlLCAweGEwLCAweDgyLCAweDg2fSx9LH07CisrCisrc3RhdGljIGlu dCBjb3JydXB0X2RlczsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kZXMoKQorK3sKKysgICAgY29y cnVwdF9kZXMgPSAxOworK30KKysKKytpbnQgRklQU19zZWxmdGVzdF9kZXMoKQorK3sKKysgICAg aW50IG4sIHJldCA9IDA7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RF UyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvciAobiA9IDA7IG4gPCAy OyArK24pIHsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKworKyAgICAg ICAgbWVtY3B5KHBsYWludGV4dCwgdGVzdHMyW25dLnBsYWludGV4dCwgc2l6ZW9mKHBsYWludGV4 dCkpOworKyAgICAgICAgaWYgKGNvcnJ1cHRfZGVzKQorKyAgICAgICAgICAgIHBsYWludGV4dFsw XSsrOworKyAgICAgICAgaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2Vj YigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzMltuXS5rZXksIE5VTEws CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lw aGVydGV4dCwgOCkpCisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgLyog RW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICov CisrICAgIGZvciAobiA9IDA7IG4gPCAyOyArK24pIHsKKysgICAgICAgIGlmICghZmlwc19jaXBo ZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGVzdHMzW25dLmtleSwgTlVMTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCisrICAg ICAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysgICAgcmV0ID0gMTsKKysgZXJyOgorKyAgICBF VlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKyAgICBpZiAocmV0ID09IDApCisrICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUywgRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7CisrCisrICAgIHJldHVybiByZXQ7CisrfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2N0ci5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MTg5MTY1NjggKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfY3RyLmMJMjAxNi0wMy0w MSAxNjozMzowNy42MTg5MTY1NjggKzAxMDAKK0BAIC0wLDAgKzEsNDE1IEBACisrLyogZmlwcy9y YW5kL2ZpcHNfZHJiZ19jdHIuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICov CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxp Yi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKytzdGF0aWMgdm9pZCBpbmNfMTI4 KERSQkdfQ1RSX0NUWCAqIGNjdHgpCisreworKyAgICBpbnQgaTsKKysgICAgdW5zaWduZWQgY2hh ciBjOworKyAgICB1bnNpZ25lZCBjaGFyICpwID0gY2N0eC0+ViArIDE1OworKyAgICBmb3IgKGkg PSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgYyA9ICpwOworKyAgICAgICAgYysrOworKyAg ICAgICAgKnAgPSBjOworKyAgICAgICAgaWYgKGMpCisrICAgICAgICAgICAgcmV0dXJuOworKyAg ICAgICAgcC0tOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkIGN0cl9YT1IoRFJCR19DVFJf Q1RYICogY2N0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisrICAgICAgICAgICAgICAgICAg ICBzaXplX3QgaW5sZW4pCisreworKyAgICBzaXplX3QgaSwgbjsKKysgICAgLyogQW55IHplcm8g cGFkZGluZyB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSByZXN1bHQgYXMgd2UKKysgICAgICog YXJlIFhPUmluZy4gU28ganVzdCBwcm9jZXNzIGhvd2V2ZXIgbXVjaCBpbnB1dCB3ZSBoYXZlLgor KyAgICAgKi8KKysKKysgICAgaWYgKCFpbiB8fCAhaW5sZW4pCisrICAgICAgICByZXR1cm47Cisr CisrICAgIGlmIChpbmxlbiA8IGNjdHgtPmtleWxlbikKKysgICAgICAgIG4gPSBpbmxlbjsKKysg ICAgZWxzZQorKyAgICAgICAgbiA9IGNjdHgtPmtleWxlbjsKKysKKysgICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykKKysgICAgICAgIGNjdHgtPktbaV0gXj0gaW5baV07CisrICAgIGlmIChpbmxl biA8PSBjY3R4LT5rZXlsZW4pCisrICAgICAgICByZXR1cm47CisrCisrICAgIG4gPSBpbmxlbiAt IGNjdHgtPmtleWxlbjsKKysgICAgLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLworKyAgICBpZiAo biA+IDE2KQorKyAgICAgICAgbiA9IDE2OworKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykK KysgICAgICAgIGNjdHgtPlZbaV0gXj0gaW5baSArIGNjdHgtPmtleWxlbl07CisrfQorKworKy8q IFByb2Nlc3MgYSBjb21wbGV0ZSBibG9jayB1c2luZyBCQ0MgYWxnb3JpdGhtIG9mIFNQUCA4MDAt OTAgMTAuNC4zICovCisrCisrc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9jayhEUkJHX0NUUl9DVFgg KiBjY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICppbikKKyt7CisrICAgIGludCBpOworKyAgICBmb3IgKGkgPSAw OyBpIDwgMTY7IGkrKykKKysgICAgICAgIG91dFtpXSBePSBpbltpXTsKKysgICAgQUVTX2VuY3J5 cHQob3V0LCBvdXQsICZjY3R4LT5kZl9rcyk7CisrI2lmIDAKKysgICAgZnByaW50ZihzdGRlcnIs ICJCQ0MgaW4rb3V0XG4iKTsKKysgICAgQklPX2R1bXBfZnAoc3RkZXJyLCBpbiwgMTYpOworKyAg ICBCSU9fZHVtcF9mcChzdGRlcnIsIG91dCwgMTYpOworKyNlbmRpZgorK30KKysKKysvKiBIYW5k bGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0aW9ucyBmb3IgYXMgbXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9y IEsgYW5kIFggKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2Jsb2NrcyhEUkJHX0NUUl9DVFggKiBj Y3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbikKKyt7CisrICAgIGN0cl9CQ0NfYmxvY2soY2N0 eCwgY2N0eC0+S1gsIGluKTsKKysgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2 LCBpbik7CisrICAgIGlmIChjY3R4LT5rZXlsZW4gIT0gMTYpCisrICAgICAgICBjdHJfQkNDX2Js b2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGluKTsKKyt9CisrCisrLyogSW5pdGlhbGlzZSBCQ0Mg YmxvY2tzOiB0aGVzZSBoYXZlIHRoZSB2YWx1ZSAwLDEsMiBpbiBsZWZ0bW9zdCBwb3NpdGlvbnM6 CisrICogc2VlIDEwLjQuMiBzdGFnZSA3LgorKyAqLworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfaW5p dChEUkJHX0NUUl9DVFggKiBjY3R4KQorK3sKKysgICAgbWVtc2V0KGNjdHgtPktYLCAwLCA0OCk7 CisrICAgIG1lbXNldChjY3R4LT5ibHRtcCwgMCwgMTYpOworKyAgICBjdHJfQkNDX2Jsb2NrKGNj dHgsIGNjdHgtPktYLCBjY3R4LT5ibHRtcCk7CisrICAgIGNjdHgtPmJsdG1wWzNdID0gMTsKKysg ICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBjY3R4LT5ibHRtcCk7CisrICAg IGlmIChjY3R4LT5rZXlsZW4gIT0gMTYpIHsKKysgICAgICAgIGNjdHgtPmJsdG1wWzNdID0gMjsK KysgICAgICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAzMiwgY2N0eC0+Ymx0bXAp OworKyAgICB9CisrfQorKworKy8qIFByb2Nlc3Mgc2V2ZXJhbCBibG9ja3MgaW50byBCQ0MgYWxn b3JpdGhtLCBzb21lIHBvc3NpYmx5IHBhcnRpYWwgKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX3Vw ZGF0ZShEUkJHX0NUUl9DVFggKiBjY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCisreworKyAgICBpZiAoIWluIHx8 ICFpbmxlbikKKysgICAgICAgIHJldHVybjsKKysgICAgLyogSWYgd2UgaGF2ZSBwYXJ0aWFsIGJs b2NrIGhhbmRsZSBpdCBmaXJzdCAqLworKyAgICBpZiAoY2N0eC0+Ymx0bXBfcG9zKSB7CisrICAg ICAgICBzaXplX3QgbGVmdCA9IDE2IC0gY2N0eC0+Ymx0bXBfcG9zOworKyAgICAgICAgLyogSWYg d2Ugbm93IGhhdmUgYSBjb21wbGV0ZSBibG9jayBwcm9jZXNzIGl0ICovCisrICAgICAgICBpZiAo aW5sZW4gPj0gbGVmdCkgeworKyAgICAgICAgICAgIG1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgt PmJsdG1wX3BvcywgaW4sIGxlZnQpOworKyAgICAgICAgICAgIGN0cl9CQ0NfYmxvY2tzKGNjdHgs IGNjdHgtPmJsdG1wKTsKKysgICAgICAgICAgICBjY3R4LT5ibHRtcF9wb3MgPSAwOworKyAgICAg ICAgICAgIGlubGVuIC09IGxlZnQ7CisrICAgICAgICAgICAgaW4gKz0gbGVmdDsKKysgICAgICAg IH0KKysgICAgfQorKyAgICAvKiBQcm9jZXNzIHplcm8gb3IgbW9yZSBjb21wbGV0ZSBibG9ja3Mg Ki8KKysgICAgd2hpbGUgKGlubGVuID49IDE2KSB7CisrICAgICAgICBjdHJfQkNDX2Jsb2Nrcyhj Y3R4LCBpbik7CisrICAgICAgICBpbiArPSAxNjsKKysgICAgICAgIGlubGVuIC09IDE2OworKyAg ICB9CisrICAgIC8qIENvcHkgYW55IHJlbWFpbmluZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0ZW1w b3JhcnkgYnVmZmVyICovCisrICAgIGlmIChpbmxlbiA+IDApIHsKKysgICAgICAgIG1lbWNweShj Y3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGlubGVuKTsKKysgICAgICAgIGNjdHgt PmJsdG1wX3BvcyArPSBpbmxlbjsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZCBjdHJfQkND X2ZpbmFsKERSQkdfQ1RSX0NUWCAqIGNjdHgpCisreworKyAgICBpZiAoY2N0eC0+Ymx0bXBfcG9z KSB7CisrICAgICAgICBtZW1zZXQoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIDAsIDE2 IC0gY2N0eC0+Ymx0bXBfcG9zKTsKKysgICAgICAgIGN0cl9CQ0NfYmxvY2tzKGNjdHgsIGNjdHgt PmJsdG1wKTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZCBjdHJfZGYoRFJCR19DVFJfQ1RY ICogY2N0eCwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBz aXplX3QgaW4xbGVuLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpp bjIsIHNpemVfdCBpbjJsZW4sCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmluMywgc2l6ZV90IGluM2xlbikKKyt7CisrICAgIHNpemVfdCBpbmxlbjsKKysgICAgdW5z aWduZWQgY2hhciAqcCA9IGNjdHgtPmJsdG1wOworKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBj ODAgPSAweDgwOworKworKyAgICBjdHJfQkNDX2luaXQoY2N0eCk7CisrICAgIGlmICghaW4xKQor KyAgICAgICAgaW4xbGVuID0gMDsKKysgICAgaWYgKCFpbjIpCisrICAgICAgICBpbjJsZW4gPSAw OworKyAgICBpZiAoIWluMykKKysgICAgICAgIGluM2xlbiA9IDA7CisrICAgIGlubGVuID0gaW4x bGVuICsgaW4ybGVuICsgaW4zbGVuOworKyAgICAvKiBJbml0aWFsaXNlIEx8fE4gaW4gdGVtcG9y YXJ5IGJsb2NrICovCisrICAgICpwKysgPSAoaW5sZW4gPj4gMjQpICYgMHhmZjsKKysgICAgKnAr KyA9IChpbmxlbiA+PiAxNikgJiAweGZmOworKyAgICAqcCsrID0gKGlubGVuID4+IDgpICYgMHhm ZjsKKysgICAgKnArKyA9IGlubGVuICYgMHhmZjsKKysgICAgLyogTkIga2V5bGVuIGlzIGF0IG1v c3QgMzIgYnl0ZXMgKi8KKysgICAgKnArKyA9IDA7CisrICAgICpwKysgPSAwOworKyAgICAqcCsr ID0gMDsKKysgICAgKnAgPSAodW5zaWduZWQgY2hhcikoKGNjdHgtPmtleWxlbiArIDE2KSAmIDB4 ZmYpOworKyAgICBjY3R4LT5ibHRtcF9wb3MgPSA4OworKyAgICBjdHJfQkNDX3VwZGF0ZShjY3R4 LCBpbjEsIGluMWxlbik7CisrICAgIGN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMiwgaW4ybGVuKTsK KysgICAgY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4zLCBpbjNsZW4pOworKyAgICBjdHJfQkNDX3Vw ZGF0ZShjY3R4LCAmYzgwLCAxKTsKKysgICAgY3RyX0JDQ19maW5hbChjY3R4KTsKKysgICAgLyog U2V0IHVwIGtleSBLICovCisrICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gsIGNjdHgt PmtleWxlbiAqIDgsICZjY3R4LT5kZl9reGtzKTsKKysgICAgLyogWCBmb2xsb3dzIGtleSBLICov CisrICAgIEFFU19lbmNyeXB0KGNjdHgtPktYICsgY2N0eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNj dHgtPmRmX2t4a3MpOworKyAgICBBRVNfZW5jcnlwdChjY3R4LT5LWCwgY2N0eC0+S1ggKyAxNiwg JmNjdHgtPmRmX2t4a3MpOworKyAgICBpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKyAgICAgICAg QUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAxNiwgY2N0eC0+S1ggKyAzMiwgJmNjdHgtPmRmX2t4a3Mp OworKyNpZiAwCisrICAgIGZwcmludGYoc3RkZXJyLCAiT3V0cHV0IG9mIGN0cl9kZjpcbiIpOwor KyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKyAxNik7Cisr I2VuZGlmCisrfQorKworKy8qIE5CIHRoZSBuby1kZiAgVXBkYXRlIGluIFNQODAwLTkwIHNwZWNp ZmllcyBhIGNvbnN0YW50IGlucHV0IGxlbmd0aAorKyAqIG9mIHNlZWRsZW4sIGhvd2V2ZXIgb3Ro ZXIgdXNlcyBvZiB0aGlzIGFsZ29yaXRobSBwYWQgdGhlIGlucHV0IHdpdGgKKysgKiB6ZXJvZXMg aWYgbmVjZXNzYXJ5IGFuZCBoYXZlIHVwIHRvIHR3byBwYXJhbWV0ZXJzIFhPUmVkIHRvZ2V0aGVy LAorKyAqIGhhbmRsZSBib3RoIGNhc2VzIGluIHRoaXMgZnVuY3Rpb24gaW5zdGVhZC4KKysgKi8K KysKKytzdGF0aWMgdm9pZCBjdHJfVXBkYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAorKyAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4y bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2Us IHNpemVfdCBub25jZWxlbikKKyt7CisrICAgIERSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5k LmN0cjsKKysgICAgLyoga3MgaXMgYWxyZWFkeSBzZXR1cCBmb3IgY29ycmVjdCBrZXkgKi8KKysg ICAgaW5jXzEyOChjY3R4KTsKKysgICAgQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNj dHgtPmtzKTsKKysgICAgLyogSWYga2V5bGVuIGxvbmdlciB0aGFuIDEyOCBiaXRzIG5lZWQgZXh0 cmEgZW5jcnlwdCAqLworKyAgICBpZiAoY2N0eC0+a2V5bGVuICE9IDE2KSB7CisrICAgICAgICBp bmNfMTI4KGNjdHgpOworKyAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SyArIDE2 LCAmY2N0eC0+a3MpOworKyAgICB9CisrICAgIGluY18xMjgoY2N0eCk7CisrICAgIEFFU19lbmNy eXB0KGNjdHgtPlYsIGNjdHgtPlYsICZjY3R4LT5rcyk7CisrICAgIC8qIElmIDE5MiBiaXQga2V5 IHBhcnQgb2YgViBpcyBvbiBlbmQgb2YgSyAqLworKyAgICBpZiAoY2N0eC0+a2V5bGVuID09IDI0 KSB7CisrICAgICAgICBtZW1jcHkoY2N0eC0+ViArIDgsIGNjdHgtPlYsIDgpOworKyAgICAgICAg bWVtY3B5KGNjdHgtPlYsIGNjdHgtPksgKyAyNCwgOCk7CisrICAgIH0KKysKKysgICAgaWYgKGRj dHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKSB7CisrICAgICAgICAvKiBJZiBubyBp bnB1dCByZXVzZSBleGlzdGluZyBkZXJpdmVkIHZhbHVlICovCisrICAgICAgICBpZiAoaW4xIHx8 IG5vbmNlIHx8IGluMikKKysgICAgICAgICAgICBjdHJfZGYoY2N0eCwgaW4xLCBpbjFsZW4sIG5v bmNlLCBub25jZWxlbiwgaW4yLCBpbjJsZW4pOworKyAgICAgICAgLyogSWYgdGhpcyBhIHJldXNl IGlucHV0IGluMWxlbiAhPSAwICovCisrICAgICAgICBpZiAoaW4xbGVuKQorKyAgICAgICAgICAg IGN0cl9YT1IoY2N0eCwgY2N0eC0+S1gsIGRjdHgtPnNlZWRsZW4pOworKyAgICB9IGVsc2Ugewor KyAgICAgICAgY3RyX1hPUihjY3R4LCBpbjEsIGluMWxlbik7CisrICAgICAgICBjdHJfWE9SKGNj dHgsIGluMiwgaW4ybGVuKTsKKysgICAgfQorKworKyAgICBBRVNfc2V0X2VuY3J5cHRfa2V5KGNj dHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKyNpZiAwCisrICAgIGZwcmludGYo c3RkZXJyLCAiSytWIGFmdGVyIHVwZGF0ZSBpczpcbiIpOworKyAgICBCSU9fZHVtcF9mcChzdGRl cnIsIGNjdHgtPkssIGNjdHgtPmtleWxlbik7CisrICAgIEJJT19kdW1wX2ZwKHN0ZGVyciwgY2N0 eC0+ViwgMTYpOworKyNlbmRpZgorK30KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX2luc3RhbnRp YXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVuLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxl biwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KnBlcnMsIHNpemVfdCBwZXJzbGVuKQorK3sKKysgICAgRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRj dHgtPmQuY3RyOworKyAgICBtZW1zZXQoY2N0eC0+SywgMCwgc2l6ZW9mKGNjdHgtPkspKTsKKysg ICAgbWVtc2V0KGNjdHgtPlYsIDAsIHNpemVvZihjY3R4LT5WKSk7CisrICAgIEFFU19zZXRfZW5j cnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+c3RyZW5ndGgsICZjY3R4LT5rcyk7CisrICAgIGN0cl9V cGRhdGUoZGN0eCwgZW50LCBlbnRsZW4sIHBlcnMsIHBlcnNsZW4sIG5vbmNlLCBub25jZWxlbik7 CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX3Jlc2VlZChEUkJH X0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisreworKyAgICBjdHJfVXBk YXRlKGRjdHgsIGVudCwgZW50bGVuLCBhZGluLCBhZGlubGVuLCBOVUxMLCAwKTsKKysgICAgcmV0 dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfZ2VuZXJhdGUoRFJCR19DVFggKmRj dHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvdXRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKKyt7CisrICAgIERSQkdfQ1RSX0NUWCAqY2N0 eCA9ICZkY3R4LT5kLmN0cjsKKysgICAgaWYgKGFkaW4gJiYgYWRpbmxlbikgeworKyAgICAgICAg Y3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKKysgICAg ICAgIC8qIFRoaXMgbWVhbnMgd2UgcmV1c2UgZGVyaXZlZCB2YWx1ZSAqLworKyAgICAgICAgaWYg KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19DVFJfVVNFX0RGKSB7CisrICAgICAgICAgICAgYWRp biA9IE5VTEw7CisrICAgICAgICAgICAgYWRpbmxlbiA9IDE7CisrICAgICAgICB9CisrICAgIH0g ZWxzZQorKyAgICAgICAgYWRpbmxlbiA9IDA7CisrCisrICAgIGZvciAoOzspIHsKKysgICAgICAg IGluY18xMjgoY2N0eCk7CisrICAgICAgICBpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdf VEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlkKSB7CisrICAgICAgICAgICAgQUVTX2VuY3J5cHQoY2N0 eC0+ViwgZGN0eC0+bGIsICZjY3R4LT5rcyk7CisrICAgICAgICAgICAgZGN0eC0+bGJfdmFsaWQg PSAxOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKG91 dGxlbiA8IDE2KSB7CisrICAgICAgICAgICAgLyogVXNlIEsgYXMgdGVtcCBzcGFjZSBhcyBpdCB3 aWxsIGJlIHVwZGF0ZWQgKi8KKysgICAgICAgICAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4 LT5LLCAmY2N0eC0+a3MpOworKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3Qo ZGN0eCwgY2N0eC0+SykpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAg IG1lbWNweShvdXQsIGNjdHgtPkssIG91dGxlbik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAg ICAgICB9CisrICAgICAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBvdXQsICZjY3R4LT5rcyk7Cisr ICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisrICAgICAgICAg ICAgcmV0dXJuIDA7CisrICAgICAgICBvdXQgKz0gMTY7CisrICAgICAgICBvdXRsZW4gLT0gMTY7 CisrICAgICAgICBpZiAob3V0bGVuID09IDApCisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0K KysKKysgICAgY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAw KTsKKysKKysgICAgcmV0dXJuIDE7CisrCisrfQorKworK3N0YXRpYyBpbnQgZHJiZ19jdHJfdW5p bnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAgIG1lbXNldCgmZGN0eC0+ZC5jdHIs IDAsIHNpemVvZihEUkJHX0NUUl9DVFgpKTsKKysgICAgcmV0dXJuIDE7CisrfQorKworK2ludCBm aXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpCisreworKyAgICBEUkJHX0NUUl9DVFgg KmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrCisrICAgIHNpemVfdCBrZXlsZW47CisrCisrICAgIHN3 aXRjaCAoZGN0eC0+dHlwZSkgeworKyAgICBjYXNlIE5JRF9hZXNfMTI4X2N0cjoKKysgICAgICAg IGtleWxlbiA9IDE2OworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX2Flc18xOTJf Y3RyOgorKyAgICAgICAga2V5bGVuID0gMjQ7CisrICAgICAgICBicmVhazsKKysKKysgICAgY2Fz ZSBOSURfYWVzXzI1Nl9jdHI6CisrICAgICAgICBrZXlsZW4gPSAzMjsKKysgICAgICAgIGJyZWFr OworKworKyAgICBkZWZhdWx0OgorKyAgICAgICAgcmV0dXJuIC0yOworKyAgICB9CisrCisrICAg IGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19jdHJfaW5zdGFudGlhdGU7CisrICAgIGRjdHgtPnJl c2VlZCA9IGRyYmdfY3RyX3Jlc2VlZDsKKysgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2N0cl9n ZW5lcmF0ZTsKKysgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX3VuaW5zdGFudGlh dGU7CisrCisrICAgIGNjdHgtPmtleWxlbiA9IGtleWxlbjsKKysgICAgZGN0eC0+c3RyZW5ndGgg PSBrZXlsZW4gKiA4OworKyAgICBkY3R4LT5ibG9ja2xlbmd0aCA9IDE2OworKyAgICBkY3R4LT5z ZWVkbGVuID0ga2V5bGVuICsgMTY7CisrCisrICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZM QUdfQ1RSX1VTRV9ERikgeworKyAgICAgICAgLyogZGYgaW5pdGlhbGlzYXRpb24gKi8KKysgICAg ICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRmX2tleVszMl0gPSB7CisrICAgICAgICAgICAgMHgw MCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKysgICAgICAgICAg ICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorKyAgICAg ICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisr ICAgICAgICAgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgx ZgorKyAgICAgICAgfTsKKysgICAgICAgIC8qIFNldCBrZXkgc2NoZWR1bGUgZm9yIGRmX2tleSAq LworKyAgICAgICAgQUVTX3NldF9lbmNyeXB0X2tleShkZl9rZXksIGRjdHgtPnN0cmVuZ3RoLCAm Y2N0eC0+ZGZfa3MpOworKworKyAgICAgICAgZGN0eC0+bWluX2VudHJvcHkgPSBjY3R4LT5rZXls ZW47CisrICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKKysgICAg ICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysgICAgICAgIGRj dHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsKKysgICAgICAgIGRjdHgtPm1heF9wZXJz ID0gRFJCR19NQVhfTEVOR1RIOworKyAgICAgICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9M RU5HVEg7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgt PnNlZWRsZW47CisrICAgICAgICBkY3R4LT5tYXhfZW50cm9weSA9IGRjdHgtPnNlZWRsZW47Cisr ICAgICAgICAvKiBOb25jZSBub3QgdXNlZCAqLworKyAgICAgICAgZGN0eC0+bWluX25vbmNlID0g MDsKKysgICAgICAgIGRjdHgtPm1heF9ub25jZSA9IDA7CisrICAgICAgICBkY3R4LT5tYXhfcGVy cyA9IGRjdHgtPnNlZWRsZW47CisrICAgICAgICBkY3R4LT5tYXhfYWRpbiA9IGRjdHgtPnNlZWRs ZW47CisrICAgIH0KKysKKysgICAgZGN0eC0+bWF4X3JlcXVlc3QgPSAxIDw8IDE2OworKyAgICBk Y3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxIDw8IDI0OworKworKyAgICByZXR1cm4gMTsKKyt9Citk aWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jLmZpcHMg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYworLS0tIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMuZmlwcwkyMDE2LTAzLTAxIDE2OjMz OjA3LjYxODkxNjU2OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19oYXNoLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTg5MTY1NjggKzAxMDAKK0BAIC0wLDAg KzEsMzU4IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19oYXNoLmMgKi8KKysvKiBXcml0dGVu IGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5T U0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq LworKworKyNkZWZpbmUgT1BFTlNTTF9GSVBTQVBJCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Cisr I2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKKysKKysvKiBUaGlzIGlzIEhhc2hfZGYgZnJvbSBT UCA4MDAtOTAgMTAuNC4xICovCisrCisrc3RhdGljIGludCBoYXNoX2RmKERSQkdfQ1RYICpkY3R4 LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKyAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4sCisrICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluNCwgc2l6ZV90IGluNGxlbikKKyt7CisrICAgIEVWUF9N RF9DVFggKm1jdHggPSAmZGN0eC0+ZC5oYXNoLm1jdHg7CisrICAgIHVuc2lnbmVkIGNoYXIgKnZ0 bXAgPSBkY3R4LT5kLmhhc2gudnRtcDsKKysgICAgdW5zaWduZWQgY2hhciB0bXBbNl07CisrICAg IC8qIFN0YW5kYXJkIG9ubHkgZXZlciBuZWVkcyBzZWVkbGVuIGJ5dGVzIHdoaWNoIGlzIGFsd2F5 cyBsZXNzIHRoYW4KKysgICAgICogbWF4aW11bSBwZXJtaXR0ZWQgc28gbm8gbmVlZCB0byBjaGVj ayBsZW5ndGguCisrICAgICAqLworKyAgICBzaXplX3Qgb3V0bGVuID0gZGN0eC0+c2VlZGxlbjsK KysgICAgdG1wWzBdID0gMTsKKysgICAgdG1wWzFdID0gKChvdXRsZW4gKiA4KSA+PiAyNCkgJiAw eGZmOworKyAgICB0bXBbMl0gPSAoKG91dGxlbiAqIDgpID4+IDE2KSAmIDB4ZmY7CisrICAgIHRt cFszXSA9ICgob3V0bGVuICogOCkgPj4gOCkgJiAweGZmOworKyAgICB0bXBbNF0gPSAob3V0bGVu ICogOCkgJiAweGZmOworKyAgICBpZiAoIWluMSkgeworKyAgICAgICAgdG1wWzVdID0gKHVuc2ln bmVkIGNoYXIpaW4xbGVuOworKyAgICAgICAgaW4xID0gdG1wICsgNTsKKysgICAgICAgIGluMWxl biA9IDE7CisrICAgIH0KKysgICAgZm9yICg7OykgeworKyAgICAgICAgaWYgKCFGSVBTX2RpZ2Vz dGluaXQobWN0eCwgZGN0eC0+ZC5oYXNoLm1kKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysg ICAgICAgIGlmICghRklQU19kaWdlc3R1cGRhdGUobWN0eCwgdG1wLCA1KSkKKysgICAgICAgICAg ICByZXR1cm4gMDsKKysgICAgICAgIGlmIChpbjEgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgs IGluMSwgaW4xbGVuKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmIChpbjIg JiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMiwgaW4ybGVuKSkKKysgICAgICAgICAgICBy ZXR1cm4gMDsKKysgICAgICAgIGlmIChpbjMgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGlu MywgaW4zbGVuKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmIChpbjQgJiYg IUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluNCwgaW40bGVuKSkKKysgICAgICAgICAgICByZXR1 cm4gMDsKKysgICAgICAgIGlmIChvdXRsZW4gPCBkY3R4LT5ibG9ja2xlbmd0aCkgeworKyAgICAg ICAgICAgIGlmICghRklQU19kaWdlc3RmaW5hbChtY3R4LCB2dG1wLCBOVUxMKSkKKysgICAgICAg ICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgbWVtY3B5KG91dCwgdnRtcCwgb3V0bGVu KTsKKysgICAgICAgICAgICBPUEVOU1NMX2NsZWFuc2UodnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgp OworKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfSBlbHNlIGlmICghRklQU19kaWdl c3RmaW5hbChtY3R4LCBvdXQsIE5VTEwpKQorKyAgICAgICAgICAgIHJldHVybiAwOworKworKyAg ICAgICAgb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOworKyAgICAgICAgaWYgKG91dGxlbiA9 PSAwKQorKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgdG1wWzBdKys7CisrICAgICAg ICBvdXQgKz0gZGN0eC0+YmxvY2tsZW5ndGg7CisrICAgIH0KKyt9CisrCisrLyogQWRkIGFuIHVu c2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVmIHZhbHVlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gYnVm LiBGb3IKKysgKiB0aGlzIGFsZ29yaXRobSB0aGUgbGVuZ3RoIG9mIGlucHV0IG5ldmVyIGV4Y2Vl ZHMgdGhlIHNlZWQgbGVuZ3RoLgorKyAqLworKworK3N0YXRpYyB2b2lkIGN0eF9hZGRfYnVmKERS QkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpidWYsCisrICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbikKKyt7CisrICAgIHNpemVfdCBpID0g aW5sZW47CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnE7CisrICAgIHVuc2lnbmVkIGNoYXIg YywgKnA7CisrICAgIHAgPSBidWYgKyBkY3R4LT5zZWVkbGVuOworKyAgICBxID0gaW4gKyBpbmxl bjsKKysKKysgICAgT1BFTlNTTF9hc3NlcnQoaSA8PSBkY3R4LT5zZWVkbGVuKTsKKysKKysgICAg LyogU3BlY2lhbCBjYXNlOiB6ZXJvIGxlbmd0aCwganVzdCBpbmNyZW1lbnQgYnVmZmVyICovCisr ICAgIGlmIChpKQorKyAgICAgICAgYyA9IDA7CisrICAgIGVsc2UKKysgICAgICAgIGMgPSAxOwor KworKyAgICB3aGlsZSAoaSkgeworKyAgICAgICAgaW50IHI7CisrICAgICAgICBwLS07CisrICAg ICAgICBxLS07CisrICAgICAgICByID0gKnAgKyAqcSArIGM7CisrICAgICAgICAvKiBDYXJyeSAq LworKyAgICAgICAgaWYgKHIgPiAweGZmKQorKyAgICAgICAgICAgIGMgPSAxOworKyAgICAgICAg ZWxzZQorKyAgICAgICAgICAgIGMgPSAwOworKyAgICAgICAgKnAgPSByICYgMHhmZjsKKysgICAg ICAgIGktLTsKKysgICAgfQorKworKyAgICBpID0gZGN0eC0+c2VlZGxlbiAtIGlubGVuOworKwor KyAgICAvKiBJZiBub3QgYWRkaW5nIHdob2xlIGJ1ZmZlciBoYW5kbGUgZmluYWwgY2FycmllcyAq LworKyAgICBpZiAoYyAmJiBpKSB7CisrICAgICAgICBkbyB7CisrICAgICAgICAgICAgcC0tOwor KyAgICAgICAgICAgIGMgPSAqcDsKKysgICAgICAgICAgICBjKys7CisrICAgICAgICAgICAgKnAg PSBjOworKyAgICAgICAgICAgIGlmIChjKQorKyAgICAgICAgICAgICAgICByZXR1cm47CisrICAg ICAgICB9IHdoaWxlIChpLS0pOworKyAgICB9CisrfQorKworKy8qIEZpbmFsaXNlIGFuZCBhZGQg aGFzaCB0byBWICovCisrCisrc3RhdGljIGludCBjdHhfYWRkX21kKERSQkdfQ1RYICpkY3R4KQor K3sKKysgICAgaWYgKCFGSVBTX2RpZ2VzdGZpbmFsKCZkY3R4LT5kLmhhc2gubWN0eCwgZGN0eC0+ ZC5oYXNoLnZ0bXAsIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGN0eF9hZGRfYnVm KGRjdHgsIGRjdHgtPmQuaGFzaC5WLCBkY3R4LT5kLmhhc2gudnRtcCwgZGN0eC0+YmxvY2tsZW5n dGgpOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBoYXNoX2dlbihEUkJHX0NU WCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuKQorK3sKKysgICAgRFJC R19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrICAgIGlmIChvdXRsZW4gPT0gMCkK KysgICAgICAgIHJldHVybiAxOworKyAgICBtZW1jcHkoaGN0eC0+dnRtcCwgaGN0eC0+ViwgZGN0 eC0+c2VlZGxlbik7CisrICAgIGZvciAoOzspIHsKKysgICAgICAgIEZJUFNfZGlnZXN0aW5pdCgm aGN0eC0+bWN0eCwgaGN0eC0+bWQpOworKyAgICAgICAgRklQU19kaWdlc3R1cGRhdGUoJmhjdHgt Pm1jdHgsIGhjdHgtPnZ0bXAsIGRjdHgtPnNlZWRsZW4pOworKyAgICAgICAgaWYgKCEoZGN0eC0+ eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkgeworKyAgICAgICAg ICAgIEZJUFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIGRjdHgtPmxiLCBOVUxMKTsKKysgICAg ICAgICAgICBkY3R4LT5sYl92YWxpZCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKG91dGxlbiA8 IGRjdHgtPmJsb2NrbGVuZ3RoKSB7CisrICAgICAgICAgICAgRklQU19kaWdlc3RmaW5hbCgmaGN0 eC0+bWN0eCwgaGN0eC0+dnRtcCwgTlVMTCk7CisrICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdf Y3BybmdfdGVzdChkY3R4LCBoY3R4LT52dG1wKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7 CisrICAgICAgICAgICAgbWVtY3B5KG91dCwgaGN0eC0+dnRtcCwgb3V0bGVuKTsKKysgICAgICAg ICAgICByZXR1cm4gMTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgRklQU19kaWdl c3RmaW5hbCgmaGN0eC0+bWN0eCwgb3V0LCBOVUxMKTsKKysgICAgICAgICAgICBpZiAoIWZpcHNf ZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOwor KyAgICAgICAgICAgIG91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysgICAgICAgICAgICBp ZiAob3V0bGVuID09IDApCisrICAgICAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgICAg IG91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysgICAgICAgIH0KKysgICAgICAgIGN0eF9hZGRf YnVmKGRjdHgsIGhjdHgtPnZ0bXAsIE5VTEwsIDApOworKyAgICB9CisrfQorKworK3N0YXRpYyBp bnQgZHJiZ19oYXNoX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9s ZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqbm9uY2UsIHNpemVfdCBub25jZV9sZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQorK3sKKysg ICAgRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7CisrICAgIGlmICghaGFzaF9k ZihkY3R4LCBoY3R4LT5WLAorKyAgICAgICAgICAgICAgICAgZW50LCBlbnRfbGVuLCBub25jZSwg bm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xlbiwgTlVMTCwgMCkpCisrICAgICAgICByZXR1cm4gMDsK KysgICAgaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsCisrICAgICAgICAgICAgICAgICBOVUxM LCAwLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKKysgICAgICAg IHJldHVybiAwOworKworKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysgICAgZnByaW50ZihzdGRl cnIsICJWK0MgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBo Y3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBk Y3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBp bnQgZHJiZ19oYXNoX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90 IGFkaW5fbGVuKQorK3sKKysgICAgRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7 CisrICAgIC8qIFYgYWJvdXQgdG8gYmUgdXBkYXRlZCBzbyB1c2UgQyBhcyBvdXRwdXQgaW5zdGVh ZCAqLworKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywKKysgICAgICAgICAgICAgICAg IE5VTEwsIDEsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sCisrICAgICAgICAgICAgICAgICBlbnQs IGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBtZW1j cHkoaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrICAgIGlmICghaGFzaF9kZihk Y3R4LCBoY3R4LT5DLCBOVUxMLCAwLAorKyAgICAgICAgICAgICAgICAgaGN0eC0+ViwgZGN0eC0+ c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysjaWZkZWYg SEFTSF9EUkJHX1RSQUNFCisrICAgIGZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIHJlc2VlZDpc biIpOworKyAgICBoZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKyAg ICBoZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyNlbmRpZgorKyAg ICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBkcmJnX2hhc2hfZ2VuZXJhdGUoRFJCR19D VFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq b3V0LCBzaXplX3Qgb3V0bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKyt7CisrICAgIERSQkdfSEFT SF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKyAgICBFVlBfTURfQ1RYICptY3R4ID0gJmhj dHgtPm1jdHg7CisrICAgIHVuc2lnbmVkIGNoYXIgdG1wWzRdOworKyAgICBpZiAoYWRpbiAmJiBh ZGluX2xlbikgeworKyAgICAgICAgdG1wWzBdID0gMjsKKysgICAgICAgIGlmICghRklQU19kaWdl c3Rpbml0KG1jdHgsIGhjdHgtPm1kKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAg IGlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEpKQorKyAgICAgICAgICAgIHJldHVy biAwOworKyAgICAgICAgaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgt PnNlZWRsZW4pKQorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgaWYgKCFFVlBfRGln ZXN0VXBkYXRlKG1jdHgsIGFkaW4sIGFkaW5fbGVuKSkKKysgICAgICAgICAgICByZXR1cm4gMDsK KysgICAgICAgIGlmICghY3R4X2FkZF9tZChkY3R4KSkKKysgICAgICAgICAgICByZXR1cm4gMDsK KysgICAgfQorKyAgICBpZiAoIWhhc2hfZ2VuKGRjdHgsIG91dCwgb3V0bGVuKSkKKysgICAgICAg IHJldHVybiAwOworKworKyAgICB0bXBbMF0gPSAzOworKyAgICBpZiAoIUZJUFNfZGlnZXN0aW5p dChtY3R4LCBoY3R4LT5tZCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFFVlBfRGln ZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFF VlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQorKyAgICAgICAg cmV0dXJuIDA7CisrCisrICAgIGlmICghY3R4X2FkZF9tZChkY3R4KSkKKysgICAgICAgIHJldHVy biAwOworKworKyAgICBjdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5z ZWVkbGVuKTsKKysKKysgICAgdG1wWzBdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAm IDB4ZmY7CisrICAgIHRtcFsxXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZm OworKyAgICB0bXBbMl0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gOCkgJiAweGZmOworKyAg ICB0bXBbM10gPSBkY3R4LT5yZXNlZWRfY291bnRlciAmIDB4ZmY7CisrICAgIGN0eF9hZGRfYnVm KGRjdHgsIGhjdHgtPlYsIHRtcCwgNCk7CisrI2lmZGVmIEhBU0hfRFJCR19UUkFDRQorKyAgICBm cHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciBnZW5lcmF0ZTpcbiIpOworKyAgICBoZXhwcmludChz dGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKyAgICBoZXhwcmludChzdGRlcnIsIGhj dHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyNlbmRpZgorKyAgICByZXR1cm4gMTsKKyt9CisrCisr c3RhdGljIGludCBkcmJnX2hhc2hfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKKyt7Cisr ICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmZGN0eC0+ZC5oYXNoLm1jdHgpOworKyAgICBPUEVOU1NM X2NsZWFuc2UoJmRjdHgtPmQuaGFzaCwgc2l6ZW9mKERSQkdfSEFTSF9DVFgpKTsKKysgICAgcmV0 dXJuIDE7CisrfQorKworK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KQor K3sKKysgICAgY29uc3QgRVZQX01EICptZDsKKysgICAgRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZk Y3R4LT5kLmhhc2g7CisrICAgIG1kID0gRklQU19nZXRfZGlnZXN0YnluaWQoZGN0eC0+dHlwZSk7 CisrICAgIGlmICghbWQpCisrICAgICAgICByZXR1cm4gLTI7CisrICAgIHN3aXRjaCAoZGN0eC0+ dHlwZSkgeworKyAgICBjYXNlIE5JRF9zaGExOgorKyAgICAgICAgZGN0eC0+c3RyZW5ndGggPSAx Mjg7CisrICAgICAgICBicmVhazsKKysKKysgICAgY2FzZSBOSURfc2hhMjI0OgorKyAgICAgICAg ZGN0eC0+c3RyZW5ndGggPSAxOTI7CisrICAgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoK KysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMjU2OworKyAgICAgICAgYnJlYWs7CisrICAgIH0K KysKKysgICAgZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2hhc2hfaW5zdGFudGlhdGU7CisrICAg IGRjdHgtPnJlc2VlZCA9IGRyYmdfaGFzaF9yZXNlZWQ7CisrICAgIGRjdHgtPmdlbmVyYXRlID0g ZHJiZ19oYXNoX2dlbmVyYXRlOworKyAgICBkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19oYXNo X3VuaW5zdGFudGlhdGU7CisrCisrICAgIGRjdHgtPmQuaGFzaC5tZCA9IG1kOworKyAgICBFVlBf TURfQ1RYX2luaXQoJmhjdHgtPm1jdHgpOworKworKyAgICAvKiBUaGVzZSBhcmUgdGFrZW4gZnJv bSBTUCA4MDAtOTAgMTAuMSB0YWJsZSAyICovCisrCisrICAgIGRjdHgtPmJsb2NrbGVuZ3RoID0g TV9FVlBfTURfc2l6ZShtZCk7CisrICAgIGlmIChkY3R4LT5ibG9ja2xlbmd0aCA+IDMyKQorKyAg ICAgICAgZGN0eC0+c2VlZGxlbiA9IDExMTsKKysgICAgZWxzZQorKyAgICAgICAgZGN0eC0+c2Vl ZGxlbiA9IDU1OworKworKyAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8g ODsKKysgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgIGRj dHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysgICAgZGN0eC0+bWF4X25v bmNlID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFY X0xFTkdUSDsKKysgICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAg IGRjdHgtPm1heF9yZXF1ZXN0ID0gMSA8PCAxNjsKKysgICAgZGN0eC0+cmVzZWVkX2ludGVydmFs ID0gMSA8PCAyNDsKKysKKysgICAgcmV0dXJuIDE7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19obWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfaG1hYy5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MTk5MTY1OTEgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCTIwMTYtMDMt MDEgMTY6MzM6MDcuNjE5OTE2NTkxICswMTAwCitAQCAtMCwwICsxLDI3MCBAQAorKy8qIGZpcHMv cmFuZC9maXBzX2RyYmdfaG1hYy5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVu c29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysg Ki8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisr ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3Rk bGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wu aCIKKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY191cGRhdGUoRFJCR19DVFggKmRjdHgsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90 IGluMWxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4pCisreworKyAgICBzdGF0aWMgdW5z aWduZWQgY2hhciBjMCA9IDAsIGMxID0gMTsKKysgICAgRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZk Y3R4LT5kLmhtYWM7CisrICAgIEhNQUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhjdHg7CisrCisrICAg IGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFj LT5tZCwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFITUFDX1VwZGF0ZSho Y3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrICAgICAgICByZXR1cm4gMDsKKysg ICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzAsIDEpKQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIGlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKKysgICAg ICAgIHJldHVybiAwOworKyAgICBpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIs IGluMmxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKGluM2xlbiAmJiAhSE1BQ19V cGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIGlm ICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOwor KworKyAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0 aCwgaG1hYy0+bWQsIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghSE1BQ19V cGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKyAgICAgICAgcmV0dXJu IDA7CisrCisrICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKKysgICAg ICAgIHJldHVybiAwOworKworKyAgICBpZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4p CisrICAgICAgICByZXR1cm4gMTsKKysKKysgICAgaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1h Yy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysgICAgICAgIHJldHVy biAwOworKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVu Z3RoKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZj MSwgMSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRh dGUoaGN0eCwgaW4xLCBpbjFsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChpbjJs ZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMiwgaW4ybGVuKSkKKysgICAgICAgIHJldHVybiAw OworKyAgICBpZiAoaW4zbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCisr ICAgICAgICByZXR1cm4gMDsKKysKKysgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkss IE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIGlmICghSE1BQ19Jbml0X2V4KGhj dHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5i bG9ja2xlbmd0aCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgaWYgKCFITUFDX0ZpbmFs KGhjdHgsIGhtYWMtPlYsIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIHJldHVy biAxOworKworK30KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY19pbnN0YW50aWF0ZShEUkJHX0NU WCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIs IHNpemVfdCBwc3RyX2xlbikKKyt7CisrICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ ZC5obWFjOworKyAgICBtZW1zZXQoaG1hYy0+SywgMCwgZGN0eC0+YmxvY2tsZW5ndGgpOworKyAg ICBtZW1zZXQoaG1hYy0+ViwgMSwgZGN0eC0+YmxvY2tsZW5ndGgpOworKyAgICBpZiAoIWRyYmdf aG1hY191cGRhdGUoZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGVudCwgZW50X2xl biwgbm9uY2UsIG5vbmNlX2xlbiwgcHN0ciwgcHN0cl9sZW4pKQorKyAgICAgICAgcmV0dXJuIDA7 CisrCisrI2lmZGVmIEhNQUNfRFJCR19UUkFDRQorKyAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBh ZnRlciBpbnN0YW50aWF0ZTpcbiIpOworKyAgICBoZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGht YWMtPmJsb2NrbGVuZ3RoKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5i bG9ja2xlbmd0aCk7CisrI2VuZGlmCisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50 IGRyYmdfaG1hY19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBh ZGluX2xlbikKKyt7CisrICAgIGlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBlbnQsIGVudF9s ZW4sIGFkaW4sIGFkaW5fbGVuLCBOVUxMLCAwKSkKKysgICAgICAgIHJldHVybiAwOworKworKyNp ZmRlZiBITUFDX0RSQkdfVFJBQ0UKKysgICAgeworKyAgICAgICAgRFJCR19ITUFDX0NUWCAqaG1h YyA9ICZkY3R4LT5kLmhtYWM7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciBy ZXNlZWQ6XG4iKTsKKysgICAgICAgIGhleHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+Ymxv Y2tsZW5ndGgpOworKyAgICAgICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9j a2xlbmd0aCk7CisrICAgIH0KKysjZW5kaWYKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRp YyBpbnQgZHJiZ19obWFjX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXpl X3QgYWRpbl9sZW4pCisreworKyAgICBEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1h YzsKKysgICAgSE1BQ19DVFggKmhjdHggPSAmaG1hYy0+aGN0eDsKKysgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqVnRtcCA9IGhtYWMtPlY7CisrICAgIGlmIChhZGluX2xlbiAmJiAhZHJiZ19obWFj X3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgZm9yICg7OykgeworKyAgICAgICAgaWYgKCFITUFDX0luaXRfZXgo aGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysgICAg ICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgVnRtcCwg ZGN0eC0+YmxvY2tsZW5ndGgpKQorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgaWYg KCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkgewor KyAgICAgICAgICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBkY3R4LT5sYiwgTlVMTCkpCisrICAg ICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgIGRjdHgtPmxiX3ZhbGlkID0gMTsK KysgICAgICAgICAgICBWdG1wID0gZGN0eC0+bGI7CisrICAgICAgICAgICAgY29udGludWU7Cisr ICAgICAgICB9IGVsc2UgaWYgKG91dGxlbiA+IGRjdHgtPmJsb2NrbGVuZ3RoKSB7CisrICAgICAg ICAgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIG91dCwgTlVMTCkpCisrICAgICAgICAgICAgICAg IHJldHVybiAwOworKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwg b3V0KSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgVnRtcCA9IG91 dDsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgs IGhtYWMtPlYsIE5VTEwpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAg ICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGhtYWMtPlYpKQorKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICBtZW1jcHkob3V0LCBobWFjLT5WLCBvdXRsZW4p OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgb3V0ICs9IGRjdHgt PmJsb2NrbGVuZ3RoOworKyAgICAgICAgb3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOworKyAg ICB9CisrICAgIGlmICghZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwgTlVM TCwgMCwgTlVMTCwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgcmV0dXJuIDE7Cisr fQorKworK3N0YXRpYyBpbnQgZHJiZ19obWFjX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgp CisreworKyAgICBITUFDX0NUWF9jbGVhbnVwKCZkY3R4LT5kLmhtYWMuaGN0eCk7CisrICAgIE9Q RU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5obWFjLCBzaXplb2YoRFJCR19ITUFDX0NUWCkpOworKyAg ICByZXR1cm4gMTsKKyt9CisrCisraW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRj dHgpCisreworKyAgICBjb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKKysgICAgRFJCR19ITUFDX0NU WCAqaGN0eCA9ICZkY3R4LT5kLmhtYWM7CisrICAgIGRjdHgtPnN0cmVuZ3RoID0gMjU2OworKyAg ICBzd2l0Y2ggKGRjdHgtPnR5cGUpIHsKKysgICAgY2FzZSBOSURfaG1hY1dpdGhTSEExOgorKyAg ICAgICAgbWQgPSBFVlBfc2hhMSgpOworKyAgICAgICAgZGN0eC0+c3RyZW5ndGggPSAxMjg7Cisr ICAgICAgICBicmVhazsKKysKKysgICAgY2FzZSBOSURfaG1hY1dpdGhTSEEyMjQ6CisrICAgICAg ICBtZCA9IEVWUF9zaGEyMjQoKTsKKysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTkyOworKyAg ICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMjU2OgorKyAgICAgICAg bWQgPSBFVlBfc2hhMjU2KCk7CisrICAgICAgICBicmVhazsKKysKKysgICAgY2FzZSBOSURfaG1h Y1dpdGhTSEEzODQ6CisrICAgICAgICBtZCA9IEVWUF9zaGEzODQoKTsKKysgICAgICAgIGJyZWFr OworKworKyAgICBjYXNlIE5JRF9obWFjV2l0aFNIQTUxMjoKKysgICAgICAgIG1kID0gRVZQX3No YTUxMigpOworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgICBkY3R4 LT5zdHJlbmd0aCA9IDA7CisrICAgICAgICByZXR1cm4gLTI7CisrICAgIH0KKysgICAgZGN0eC0+ aW5zdGFudGlhdGUgPSBkcmJnX2htYWNfaW5zdGFudGlhdGU7CisrICAgIGRjdHgtPnJlc2VlZCA9 IGRyYmdfaG1hY19yZXNlZWQ7CisrICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19obWFjX2dlbmVy YXRlOworKyAgICBkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19obWFjX3VuaW5zdGFudGlhdGU7 CisrICAgIEhNQUNfQ1RYX2luaXQoJmhjdHgtPmhjdHgpOworKyAgICBoY3R4LT5tZCA9IG1kOwor KyAgICBkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01EX3NpemUobWQpOworKyAgICBkY3R4LT5z ZWVkbGVuID0gTV9FVlBfTURfc2l6ZShtZCk7CisrCisrICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0g ZGN0eC0+c3RyZW5ndGggLyA4OworKyAgICBkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xF TkdUSDsKKysKKysgICAgZGN0eC0+bWluX25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwor KyAgICBkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgIGRjdHgtPm1h eF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOworKyAgICBkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFY X0xFTkdUSDsKKysKKysgICAgZGN0eC0+bWF4X3JlcXVlc3QgPSAxIDw8IDE2OworKyAgICBkY3R4 LT5yZXNlZWRfaW50ZXJ2YWwgPSAxIDw8IDI0OworKworKyAgICByZXR1cm4gMTsKKyt9CitkaWZm IC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcyBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4y Zy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYx OTkxNjU5MSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19s aWIuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxOTkxNjU5MSArMDEwMAorQEAgLTAsMCArMSw1NTMg QEAKKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3Jn 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 bnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrI2luY2x1ZGUgImZp cHNfcmFuZF9sY2wuaCIKKysKKysvKiBTdXBwb3J0IGZyYW1ld29yayBmb3IgU1A4MDAtOTAgRFJC R3MgKi8KKysKKytpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpCisreworKyAgICBpbnQgcnY7CisrICAgIG1lbXNldChkY3R4LCAw LCBzaXplb2YoRFJCR19DVFgpKTsKKysgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5J TklUSUFMSVNFRDsKKysgICAgZGN0eC0+eGZsYWdzID0gZmxhZ3M7CisrICAgIGRjdHgtPnR5cGUg PSB0eXBlOworKworKyAgICBkY3R4LT5pZmxhZ3MgPSAwOworKyAgICBkY3R4LT5lbnRyb3B5X2Js b2NrbGVuID0gMDsKKysgICAgZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9IDA7CisrICAgIGRjdHgt PmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IERSQkdfSEVBTFRIX0lOVEVSVkFMOworKworKyAgICBy diA9IGZpcHNfZHJiZ19oYXNoX2luaXQoZGN0eCk7CisrCisrICAgIGlmIChydiA9PSAtMikKKysg ICAgICAgIHJ2ID0gZmlwc19kcmJnX2N0cl9pbml0KGRjdHgpOworKyAgICBpZiAocnYgPT0gLTIp CisrICAgICAgICBydiA9IGZpcHNfZHJiZ19obWFjX2luaXQoZGN0eCk7CisrCisrICAgIGlmIChy diA8PSAwKSB7CisrICAgICAgICBpZiAocnYgPT0gLTIpCisrICAgICAgICAgICAgRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpOworKyAg ICAgICAgZWxzZQorKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBG SVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcpOworKyAgICB9CisrCisrICAgIC8qIElmIG5v dCBpbiB0ZXN0IG1vZGUgcnVuIHNlbGZ0ZXN0cyBvbiBEUkJHIG9mIHRoZSBzYW1lIHR5cGUgKi8K KysKKysgICAgaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpKSB7CisrICAgICAg ICBpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpIHsKKysgICAgICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOworKyAg ICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBy djsKKyt9CisrCisrRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGlu dCBmbGFncykKKyt7CisrICAgIERSQkdfQ1RYICpkY3R4OworKyAgICBkY3R4ID0gT1BFTlNTTF9t YWxsb2Moc2l6ZW9mKERSQkdfQ1RYKSk7CisrICAgIGlmICghZGN0eCkgeworKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX05FVywgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOworKyAgICAg ICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgaWYgKHR5cGUgPT0gMCkgeworKyAgICAg ICAgbWVtc2V0KGRjdHgsIDAsIHNpemVvZihEUkJHX0NUWCkpOworKyAgICAgICAgZGN0eC0+dHlw ZSA9IDA7CisrICAgICAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VE OworKyAgICAgICAgcmV0dXJuIGRjdHg7CisrICAgIH0KKysKKysgICAgaWYgKEZJUFNfZHJiZ19p bml0KGRjdHgsIHR5cGUsIGZsYWdzKSA8PSAwKSB7CisrICAgICAgICBPUEVOU1NMX2ZyZWUoZGN0 eCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgICByZXR1cm4gZGN0eDsK Kyt9CisrCisrdm9pZCBGSVBTX2RyYmdfZnJlZShEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAgIGlm IChkY3R4LT51bmluc3RhbnRpYXRlKQorKyAgICAgICAgZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4 KTsKKysgICAgLyogRG9uJ3QgZnJlZSB1cCBkZWZhdWx0IERSQkcgKi8KKysgICAgaWYgKGRjdHgg PT0gRklQU19nZXRfZGVmYXVsdF9kcmJnKCkpIHsKKysgICAgICAgIG1lbXNldChkY3R4LCAwLCBz aXplb2YoRFJCR19DVFgpKTsKKysgICAgICAgIGRjdHgtPnR5cGUgPSAwOworKyAgICAgICAgZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysgICAgfSBlbHNlIHsKKysg ICAgICAgIE9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKKysgICAg ICAgIE9QRU5TU0xfZnJlZShkY3R4KTsKKysgICAgfQorK30KKysKKytzdGF0aWMgc2l6ZV90IGZp cHNfZ2V0X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4s IHNpemVfdCBtYXhfbGVuKQorK3sKKysgICAgdW5zaWduZWQgY2hhciAqdG91dCwgKnA7CisrICAg IHNpemVfdCBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW4sIHJ2OworKyAgICBpZiAoIWRjdHgt PmdldF9lbnRyb3B5KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChkY3R4LT54ZmxhZ3Mg JiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwpCisrICAgICAgICByZXR1cm4gZGN0eC0+Z2V0X2VudHJv cHkoZGN0eCwgcG91dCwgZW50cm9weSwgbWluX2xlbiwgbWF4X2xlbik7CisrICAgIHJ2ID0gZGN0 eC0+Z2V0X2VudHJvcHkoZGN0eCwgJnRvdXQsIGVudHJvcHkgKyBibCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICBtaW5fbGVuICsgYmwsIG1heF9sZW4gKyBibCk7CisrICAgIGlmICh0b3V0 ID09IE5VTEwpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgKnBvdXQgPSB0b3V0ICsgYmw7Cisr ICAgIGlmIChydiA8IChtaW5fbGVuICsgYmwpIHx8IChydiAlIGJsKSkKKysgICAgICAgIHJldHVy biAwOworKyAgICAvKiBDb21wYXJlIGNvbnNlY3V0aXZlIGJsb2NrcyBmb3IgY29udGludW91cyBQ Uk5HIHRlc3QgKi8KKysgICAgZm9yIChwID0gdG91dDsgcCA8IHRvdXQgKyBydiAtIGJsOyBwICs9 IGJsKSB7CisrICAgICAgICBpZiAoIW1lbWNtcChwLCBwICsgYmwsIGJsKSkgeworKyAgICAgICAg ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfR0VUX0VOVFJPUFksIEZJUFNfUl9FTlRST1BZX1NPVVJD RV9TVFVDSyk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgIH0KKysg ICAgcnYgLT0gYmw7CisrICAgIGlmIChydiA+IG1heF9sZW4pCisrICAgICAgICByZXR1cm4gbWF4 X2xlbjsKKysgICAgcmV0dXJuIHJ2OworK30KKysKKytzdGF0aWMgdm9pZCBmaXBzX2NsZWFudXBf ZW50cm9weShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKQorK3sKKysgICAgc2l6ZV90IGJsOwor KyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCisrICAgICAgICBibCA9IDA7 CisrICAgIGVsc2UKKysgICAgICAgIGJsID0gZGN0eC0+ZW50cm9weV9ibG9ja2xlbjsKKysgICAg LyogQ2FsbCBjbGVhbnVwIHdpdGggb3JpZ2luYWwgYXJndW1lbnRzICovCisrICAgIGRjdHgtPmNs ZWFudXBfZW50cm9weShkY3R4LCBvdXQgLSBibCwgb2xlbiArIGJsKTsKKyt9CisrCisraW50IEZJ UFNfZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQorK3sKKysg ICAgc2l6ZV90IGVudGxlbiA9IDAsIG5vbmNlbGVuID0gMDsKKysgICAgdW5zaWduZWQgY2hhciAq bm9uY2UgPSBOVUxMLCAqZW50cm9weSA9IE5VTEw7CisrCisrI2lmIDAKKysgICAgLyogUHV0IGhl cmUgc28gZXJyb3Igc2NyaXB0IHBpY2tzIHRoZW0gdXAgKi8KKysgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0lOU1RBTlRJQVRFLAorKyAgICAgICAgICAgIEZJUFNfUl9QRVJTT05BTElTQVRJ T05fU1RSSU5HX1RPT19MT05HKTsKKysgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RB TlRJQVRFLCBGSVBTX1JfSU5fRVJST1JfU1RBVEUpOworKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRCk7CisrICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJ TkdfRU5UUk9QWSk7CisrICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwg RklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0UpOworKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUik7CisrICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJ U0VEKTsKKysjZW5kaWYKKysKKysgICAgaW50IHIgPSAwOworKworKyAgICBpZiAocGVyc2xlbiA+ IGRjdHgtPm1heF9wZXJzKSB7CisrICAgICAgICByID0gRklQU19SX1BFUlNPTkFMSVNBVElPTl9T VFJJTkdfVE9PX0xPTkc7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKworKyAgICBpZiAo IWRjdHgtPmluc3RhbnRpYXRlKSB7CisrICAgICAgICByID0gRklQU19SX0RSQkdfTk9UX0lOSVRJ QUxJU0VEOworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgaWYgKGRjdHgtPnN0 YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKSB7CisrICAgICAgICBpZiAoZGN0eC0+ c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQorKyAgICAgICAgICAgIHIgPSBGSVBTX1JfSU5f RVJST1JfU1RBVEU7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgciA9IEZJUFNfUl9BTFJF QURZX0lOU1RBTlRJQVRFRDsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGRj dHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKworKyAgICBlbnRsZW4gPSBmaXBzX2dl dF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkY3R4LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwor KworKyAgICBpZiAoZW50bGVuIDwgZGN0eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+ bWF4X2VudHJvcHkpIHsKKysgICAgICAgIHIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRS T1BZOworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgaWYgKGRjdHgtPm1heF9u b25jZSA+IDAgJiYgZGN0eC0+Z2V0X25vbmNlKSB7CisrICAgICAgICBub25jZWxlbiA9IGRjdHgt PmdldF9ub25jZShkY3R4LCAmbm9uY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkY3R4LT5zdHJlbmd0aCAvIDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkY3R4LT5taW5fbm9uY2UsIGRjdHgtPm1heF9ub25jZSk7CisrCisrICAgICAgICBpZiAo bm9uY2VsZW4gPCBkY3R4LT5taW5fbm9uY2UgfHwgbm9uY2VsZW4gPiBkY3R4LT5tYXhfbm9uY2Up IHsKKysgICAgICAgICAgICByID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0U7CisrICAg ICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9CisrCisrICAgIH0KKysKKysgICAgaWYgKCFk Y3R4LT5pbnN0YW50aWF0ZShkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJv cHksIGVudGxlbiwgbm9uY2UsIG5vbmNlbGVuLCBwZXJzLCBwZXJzbGVuKSkgeworKyAgICAgICAg ciA9IEZJUFNfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkc7CisrICAgICAgICBnb3RvIGVuZDsK KysgICAgfQorKworKyAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKKysgICAg aWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKKysgICAgICAgIGRjdHgt PnJlc2VlZF9jb3VudGVyID0gMTsKKysKKysgZW5kOgorKworKyAgICBpZiAoZW50cm9weSAmJiBk Y3R4LT5jbGVhbnVwX2VudHJvcHkpCisrICAgICAgICBmaXBzX2NsZWFudXBfZW50cm9weShkY3R4 LCBlbnRyb3B5LCBlbnRsZW4pOworKworKyAgICBpZiAobm9uY2UgJiYgZGN0eC0+Y2xlYW51cF9u b25jZSkKKysgICAgICAgIGRjdHgtPmNsZWFudXBfbm9uY2UoZGN0eCwgbm9uY2UsIG5vbmNlbGVu KTsKKysKKysgICAgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKKysgICAg ICAgIHJldHVybiAxOworKworKyAgICBpZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxB R19OT0VSUikpCisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUs IHIpOworKworKyAgICByZXR1cm4gMDsKKysKKyt9CisrCisrc3RhdGljIGludCBkcmJnX3Jlc2Vl ZChEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuLCBpbnQgaGNoZWNrKQorK3sKKysgICAgdW5zaWdu ZWQgY2hhciAqZW50cm9weSA9IE5VTEw7CisrICAgIHNpemVfdCBlbnRsZW4gPSAwOworKyAgICBp bnQgciA9IDA7CisrCisrI2lmIDAKKysgICAgRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJ UFNfUl9OT1RfSU5TVEFOVElBVEVEKTsKKysgICAgRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQs IEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HKTsKKysjZW5kaWYKKysgICAgaWYgKGRj dHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRUFEWQorKyAgICAgICAgJiYgZGN0eC0+c3RhdHVz ICE9IERSQkdfU1RBVFVTX1JFU0VFRCkgeworKyAgICAgICAgaWYgKGRjdHgtPnN0YXR1cyA9PSBE UkJHX1NUQVRVU19FUlJPUikKKysgICAgICAgICAgICByID0gRklQU19SX0lOX0VSUk9SX1NUQVRF OworKyAgICAgICAgZWxzZSBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElB TElTRUQpCisrICAgICAgICAgICAgciA9IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOworKyAgICAg ICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgaWYgKCFhZGluKQorKyAgICAgICAgYWRpbmxl biA9IDA7CisrICAgIGVsc2UgaWYgKGFkaW5sZW4gPiBkY3R4LT5tYXhfYWRpbikgeworKyAgICAg ICAgciA9IEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX1RPT19MT05HOworKyAgICAgICAgZ290byBl bmQ7CisrICAgIH0KKysKKysgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Cisr ICAgIC8qIFBlZm9ybSBoZWFsdGggY2hlY2sgb24gYWxsIHJlc2VlZCBvcGVyYXRpb25zIGlmIG5v dCBhIHByZWRpY3Rpb24KKysgICAgICogcmVzaXN0YW5jZSByZXF1ZXN0IGFuZCBub3QgaW4gdGVz dCBtb2RlLgorKyAgICAgKi8KKysgICAgaWYgKGhjaGVjayAmJiAhKGRjdHgtPnhmbGFncyAmIERS QkdfRkxBR19URVNUKSkgeworKyAgICAgICAgaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRj dHgpKSB7CisrICAgICAgICAgICAgciA9IEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFOworKyAgICAg ICAgICAgIGdvdG8gZW5kOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGVudGxlbiA9IGZp cHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVudHJvcHksIGRjdHgtPnN0cmVuZ3RoLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRjdHgtPm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9w eSk7CisrCisrICAgIGlmIChlbnRsZW4gPCBkY3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBk Y3R4LT5tYXhfZW50cm9weSkgeworKyAgICAgICAgciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5H X0VOVFJPUFk7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKworKyAgICBpZiAoIWRjdHgt PnJlc2VlZChkY3R4LCBlbnRyb3B5LCBlbnRsZW4sIGFkaW4sIGFkaW5sZW4pKQorKyAgICAgICAg Z290byBlbmQ7CisrCisrICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOworKyAg ICBpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKQorKyAgICAgICAgZGN0 eC0+cmVzZWVkX2NvdW50ZXIgPSAxOworKyBlbmQ6CisrCisrICAgIGlmIChlbnRyb3B5ICYmIGRj dHgtPmNsZWFudXBfZW50cm9weSkKKysgICAgICAgIGZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgs IGVudHJvcHksIGVudGxlbik7CisrCisrICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFU VVNfUkVBRFkpCisrICAgICAgICByZXR1cm4gMTsKKysKKysgICAgaWYgKHIgJiYgIShkY3R4LT5p ZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQorKyAgICAgICAgRklQU2VycihGSVBTX0ZfRFJCR19S RVNFRUQsIHIpOworKworKyAgICByZXR1cm4gMDsKKyt9CisrCisraW50IEZJUFNfZHJiZ19yZXNl ZWQoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCisreworKyAgICByZXR1cm4gZHJiZ19yZXNlZWQo ZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7CisrfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2No ZWNrKERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxB R19URVNUKQorKyAgICAgICAgcmV0dXJuIDE7CisrICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQr KzsKKysgICAgaWYgKGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPj0gZGN0eC0+aGVhbHRoX2NoZWNr X2ludGVydmFsKSB7CisrICAgICAgICBpZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkp IHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0ssIEZJUFNfUl9T RUxGVEVTVF9GQUlMVVJFKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysg ICAgfQorKyAgICByZXR1cm4gMTsKKyt9CisrCisraW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJH X0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKyAgICAgICAg ICAgICAgICAgICAgICAgaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwKKysgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorK3sK KysgICAgaW50IHIgPSAwOworKworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewor KyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCBGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIGlmICghZmlw c19kcmJnX2NoZWNrKGRjdHgpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIGlmIChkY3R4 LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKKysgICAgICAgICYmIGRjdHgtPnN0YXR1cyAh PSBEUkJHX1NUQVRVU19SRVNFRUQpIHsKKysgICAgICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJC R19TVEFUVVNfRVJST1IpCisrICAgICAgICAgICAgciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsK KysgICAgICAgIGVsc2UgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJ U0VEKQorKyAgICAgICAgICAgIHIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKKysgICAgICAg IGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGlmIChvdXRsZW4gPiBkY3R4LT5tYXhfcmVxdWVz dCkgeworKyAgICAgICAgciA9IEZJUFNfUl9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRzsKKysg ICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIGlmIChhZGlubGVuID4gZGN0eC0+bWF4 X2FkaW4pIHsKKysgICAgICAgIHIgPSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsK KysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGlmIChkY3R4LT5pZmxhZ3MgJiBE UkJHX0NVU1RPTV9SRVNFRUQpCisrICAgICAgICBkY3R4LT5nZW5lcmF0ZShkY3R4LCBOVUxMLCBv dXRsZW4sIE5VTEwsIDApOworKyAgICBlbHNlIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciA+PSBk Y3R4LT5yZXNlZWRfaW50ZXJ2YWwpCisrICAgICAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRV U19SRVNFRUQ7CisrCisrICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVTRUVE IHx8IHByZWRpY3Rpb25fcmVzaXN0YW5jZSkgeworKyAgICAgICAgLyogSWYgcHJlZGljdGlvbiBy ZXNpc3RhbmNlIHJlcXVlc3QgZG9uJ3QgZG8gaGVhbHRoIGNoZWNrICovCisrICAgICAgICBpbnQg aGNoZWNrID0gcHJlZGljdGlvbl9yZXNpc3RhbmNlID8gMCA6IDE7CisrCisrICAgICAgICBpZiAo IWRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIGhjaGVjaykpIHsKKysgICAgICAgICAg ICByID0gRklQU19SX1JFU0VFRF9FUlJPUjsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAg ICAgIH0KKysgICAgICAgIGFkaW4gPSBOVUxMOworKyAgICAgICAgYWRpbmxlbiA9IDA7CisrICAg IH0KKysKKysgICAgaWYgKCFkY3R4LT5nZW5lcmF0ZShkY3R4LCBvdXQsIG91dGxlbiwgYWRpbiwg YWRpbmxlbikpIHsKKysgICAgICAgIHIgPSBGSVBTX1JfR0VORVJBVEVfRVJST1I7CisrICAgICAg ICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysgICAgICAgIGdvdG8gZW5kOwor KyAgICB9CisrICAgIGlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpIHsK KysgICAgICAgIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2 YWwpCisrICAgICAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVTRUVEOworKyAg ICAgICAgZWxzZQorKyAgICAgICAgICAgIGRjdHgtPnJlc2VlZF9jb3VudGVyKys7CisrICAgIH0K KysKKysgZW5kOgorKyAgICBpZiAocikgeworKyAgICAgICAgaWYgKCEoZGN0eC0+aWZsYWdzICYg RFJCR19GTEFHX05PRVJSKSkKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf R0VORVJBVEUsIHIpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgcmV0dXJu IDE7CisrfQorKworK2ludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkK Kyt7CisrICAgIGludCBydjsKKysgICAgaWYgKCFkY3R4LT51bmluc3RhbnRpYXRlKQorKyAgICAg ICAgcnYgPSAxOworKyAgICBlbHNlCisrICAgICAgICBydiA9IGRjdHgtPnVuaW5zdGFudGlhdGUo ZGN0eCk7CisrICAgIC8qIEFsdGhvdWdoIHdlJ2QgbGlrZSB0byBjbGVhbnNlIGhlcmUgd2UgY2Fu J3QgYmVjYXVzZSB3ZSBoYXZlIHRvCisrICAgICAqIHRlc3QgdGhlIHVuaW5zdGFudGlhdGUgcmVh bGx5IHplcm9lcyB0aGUgZGF0YS4KKysgICAgICovCisrICAgIG1lbXNldCgmZGN0eC0+ZCwgMCwg c2l6ZW9mKGRjdHgtPmQpKTsKKysgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklU SUFMSVNFRDsKKysgICAgLyogSWYgbWV0aG9kIGhhcyBwcm9ibGVtcyB1bmluc3RhbnRpYXRpbmcs IHJldHVybiBlcnJvciAqLworKyAgICByZXR1cm4gcnY7CisrfQorKworK2ludCBGSVBTX2RyYmdf c2V0X2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90ICgqZ2V0X2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwb3V0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBlbnRyb3B5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBtaW5fbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfbGVuKSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAoKmNsZWFudXBfZW50cm9weSkgKERSQkdfQ1RYICpjdHgsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj aGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgb2xlbiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBlbnRyb3B5X2Jsb2NrbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg KCpnZXRfbm9uY2UpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVf dCBtaW5fbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgbWF4X2xlbiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KCpjbGVhbnVwX25vbmNlKSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4p KQorK3sKKysgICAgaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VE KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSBlbnRy b3B5X2Jsb2NrbGVuOworKyAgICBkY3R4LT5nZXRfZW50cm9weSA9IGdldF9lbnRyb3B5OworKyAg ICBkY3R4LT5jbGVhbnVwX2VudHJvcHkgPSBjbGVhbnVwX2VudHJvcHk7CisrICAgIGRjdHgtPmdl dF9ub25jZSA9IGdldF9ub25jZTsKKysgICAgZGN0eC0+Y2xlYW51cF9ub25jZSA9IGNsZWFudXBf bm9uY2U7CisrICAgIHJldHVybiAxOworK30KKysKKytpbnQgRklQU19kcmJnX3NldF9yYW5kX2Nh bGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgKCpnZXRfYWRpbikgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCks CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfYWRpbikg KERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnJhbmRfc2VlZF9jYikgKERSQkdfQ1RY ICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgdm9pZCAqYnVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBudW0pLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAoKnJhbmRfYWRkX2NiKSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1 ZiwgaW50IG51bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRvdWJsZSBlbnRyb3B5KSkKKyt7CisrICAgIGlmIChkY3R4LT5zdGF0dXMgIT0g RFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysgICAgICAgIHJldHVybiAwOworKyAgICBkY3R4 LT5nZXRfYWRpbiA9IGdldF9hZGluOworKyAgICBkY3R4LT5jbGVhbnVwX2FkaW4gPSBjbGVhbnVw X2FkaW47CisrICAgIGRjdHgtPnJhbmRfc2VlZF9jYiA9IHJhbmRfc2VlZF9jYjsKKysgICAgZGN0 eC0+cmFuZF9hZGRfY2IgPSByYW5kX2FkZF9jYjsKKysgICAgcmV0dXJuIDE7CisrfQorKworK3Zv aWQgKkZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoRFJCR19DVFggKmRjdHgpCisreworKyAgICByZXR1 cm4gZGN0eC0+YXBwX2RhdGE7CisrfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShE UkJHX0NUWCAqZGN0eCwgdm9pZCAqYXBwX2RhdGEpCisreworKyAgICBkY3R4LT5hcHBfZGF0YSA9 IGFwcF9kYXRhOworK30KKysKKytzaXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJH X0NUWCAqZGN0eCkKKyt7CisrICAgIHJldHVybiBkY3R4LT5ibG9ja2xlbmd0aDsKKyt9CisrCisr aW50IEZJUFNfZHJiZ19nZXRfc3RyZW5ndGgoRFJCR19DVFggKmRjdHgpCisreworKyAgICByZXR1 cm4gZGN0eC0+c3RyZW5ndGg7CisrfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRl cnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKQorK3sKKysgICAgZGN0eC0+aGVhbHRo X2NoZWNrX2ludGVydmFsID0gaW50ZXJ2YWw7CisrfQorKworK3ZvaWQgRklQU19kcmJnX3NldF9y ZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKKyt7CisrICAgIGRj dHgtPnJlc2VlZF9pbnRlcnZhbCA9IGludGVydmFsOworK30KKysKKytzdGF0aWMgaW50IGRyYmdf c3RpY2sgPSAwOworKworK3ZvaWQgRklQU19kcmJnX3N0aWNrKGludCBvbm9mZikKKyt7CisrICAg IGRyYmdfc3RpY2sgPSBvbm9mZjsKKyt9CisrCisrLyogQ29udGludW91cyBEUkJHIHV0aWxpdHkg ZnVuY3Rpb24gKi8KKytpbnQgZmlwc19kcmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKm91dCkKKyt7CisrICAgIC8qIE5vIENQUk5HIGluIHRlc3QgbW9k ZSAqLworKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpCisrICAgICAgICBy ZXR1cm4gMTsKKysgICAgLyogQ2hlY2sgYmxvY2sgaXMgdmFsaWQ6IHNob3VsZCBuZXZlciBoYXBw ZW4gKi8KKysgICAgaWYgKGRjdHgtPmxiX3ZhbGlkID09IDApIHsKKysgICAgICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNULCBGSVBTX1JfSU5URVJOQUxfRVJST1IpOworKyAg ICAgICAgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAg IH0KKysgICAgaWYgKGRyYmdfc3RpY2spCisrICAgICAgICBtZW1jcHkoZGN0eC0+bGIsIG91dCwg ZGN0eC0+YmxvY2tsZW5ndGgpOworKyAgICAvKiBDaGVjayBhZ2FpbnN0IGxhc3QgYmxvY2s6IGZh aWwgaWYgbWF0Y2ggKi8KKysgICAgaWYgKCFtZW1jbXAoZGN0eC0+bGIsIG91dCwgZGN0eC0+Ymxv Y2tsZW5ndGgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVT VCwgRklQU19SX0RSQkdfU1RVQ0spOworKyAgICAgICAgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgp OworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgLyogU2F2ZSBsYXN0IGJsb2NrIGZv ciBuZXh0IGNvbXBhcmlzb24gKi8KKysgICAgbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJs b2NrbGVuZ3RoKTsKKysgICAgcmV0dXJuIDE7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBz X2RyYmdfcmFuZC5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MTk5MTY1OTEgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCTIwMTYtMDMtMDEg MTY6MzM6MDcuNjE5OTE2NTkxICswMTAwCitAQCAtMCwwICsxLDE2NiBAQAorKy8qIGZpcHMvcmFu ZC9maXBzX2RyYmdfcmFuZC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8K KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoK KysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmli dXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAq CisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICog ICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyogTWFwcGluZyBvZiBT UDgwMC05MCBEUkJHcyB0byBPcGVuU1NMIFJBTkRfTUVUSE9EICovCisrCisrLyogU2luY2Ugd2Ug b25seSBoYXZlIG9uZSBnbG9iYWwgUFJORyB1c2VkIGF0IGFueSB0aW1lIGluIE9wZW5TU0wgdXNl IGEgZ2xvYmFsCisrICogdmFyaWFibGUgdG8gc3RvcmUgY29udGV4dC4KKysgKi8KKysKKytzdGF0 aWMgRFJCR19DVFggb3NzbF9kY3R4OworKworK0RSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2Ry Ymcodm9pZCkKKyt7CisrICAgIHJldHVybiAmb3NzbF9kY3R4OworK30KKysKKytzdGF0aWMgaW50 IGZpcHNfZHJiZ19ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKKyt7CisrICAg IERSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysgICAgaW50IHJ2ID0gMDsKKysgICAgdW5z aWduZWQgY2hhciAqYWRpbiA9IE5VTEw7CisrICAgIHNpemVfdCBhZGlubGVuID0gMDsKKysgICAg Q1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysgICAgZG8geworKyAgICAgICAgc2l6 ZV90IHJjbnQ7CisrICAgICAgICBpZiAoY291bnQgPiAoaW50KWRjdHgtPm1heF9yZXF1ZXN0KQor KyAgICAgICAgICAgIHJjbnQgPSBkY3R4LT5tYXhfcmVxdWVzdDsKKysgICAgICAgIGVsc2UKKysg ICAgICAgICAgICByY250ID0gY291bnQ7CisrICAgICAgICBpZiAoZGN0eC0+Z2V0X2FkaW4pIHsK KysgICAgICAgICAgICBhZGlubGVuID0gZGN0eC0+Z2V0X2FkaW4oZGN0eCwgJmFkaW4pOworKyAg ICAgICAgICAgIGlmIChhZGlubGVuICYmICFhZGluKSB7CisrICAgICAgICAgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19CWVRFUywKKysgICAgICAgICAgICAgICAgICAgICAgICBGSVBT X1JfRVJST1JfUkVUUklFVklOR19BRERJVElPTkFMX0lOUFVUKTsKKysgICAgICAgICAgICAgICAg Z290byBlcnI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcnYgPSBGSVBT X2RyYmdfZ2VuZXJhdGUoZGN0eCwgb3V0LCByY250LCAwLCBhZGluLCBhZGlubGVuKTsKKysgICAg ICAgIGlmIChhZGluKSB7CisrICAgICAgICAgICAgaWYgKGRjdHgtPmNsZWFudXBfYWRpbikKKysg ICAgICAgICAgICAgICAgZGN0eC0+Y2xlYW51cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5sZW4pOwor KyAgICAgICAgICAgIGFkaW4gPSBOVUxMOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKCFydikK KysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIG91dCArPSByY250OworKyAgICAgICAg Y291bnQgLT0gcmNudDsKKysgICAgfQorKyAgICB3aGlsZSAoY291bnQpOworKyAgICBydiA9IDE7 CisrIGVycjoKKysgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKyAgICBy ZXR1cm4gcnY7CisrfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1bnNpZ25lZCBj aGFyICpvdXQsIGludCBjb3VudCkKKyt7CisrICAgIGlmIChmaXBzX2RyYmdfYnl0ZXMob3V0LCBj b3VudCkgPD0gMCkKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgcmV0dXJuIDE7CisrfQorKwor K3N0YXRpYyBpbnQgZmlwc19kcmJnX3N0YXR1cyh2b2lkKQorK3sKKysgICAgRFJCR19DVFggKmRj dHggPSAmb3NzbF9kY3R4OworKyAgICBpbnQgcnY7CisrICAgIENSWVBUT19yX2xvY2soQ1JZUFRP X0xPQ0tfUkFORCk7CisrICAgIHJ2ID0gZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZ ID8gMSA6IDA7CisrICAgIENSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysgICAg cmV0dXJuIHJ2OworK30KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RyYmdfY2xlYW51cCh2b2lkKQor K3sKKysgICAgRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OworKyAgICBDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX1JBTkQpOworKyAgICBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsK KysgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworK30KKysKKytzdGF0aWMg aW50IGZpcHNfZHJiZ19zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQorK3sKKysg ICAgRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OworKyAgICBpZiAoZGN0eC0+cmFuZF9zZWVk X2NiKQorKyAgICAgICAgcmV0dXJuIGRjdHgtPnJhbmRfc2VlZF9jYihkY3R4LCBzZWVkLCBzZWVk bGVuKTsKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQgZmlwc19kcmJnX2FkZChj b25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbiwgZG91YmxlIGFkZF9lbnRyb3B5KQorK3sKKysg ICAgRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OworKyAgICBpZiAoZGN0eC0+cmFuZF9hZGRf Y2IpCisrICAgICAgICByZXR1cm4gZGN0eC0+cmFuZF9hZGRfY2IoZGN0eCwgc2VlZCwgc2VlZGxl biwgYWRkX2VudHJvcHkpOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGNvbnN0IFJB TkRfTUVUSE9EIHJhbmRfZHJiZ19tZXRoID0geworKyAgICBmaXBzX2RyYmdfc2VlZCwKKysgICAg Zmlwc19kcmJnX2J5dGVzLAorKyAgICBmaXBzX2RyYmdfY2xlYW51cCwKKysgICAgZmlwc19kcmJn X2FkZCwKKysgICAgZmlwc19kcmJnX3BzZXVkbywKKysgICAgZmlwc19kcmJnX3N0YXR1cworK307 CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfZHJiZ19tZXRob2Qodm9pZCkKKyt7CisrICAg IHJldHVybiAmcmFuZF9kcmJnX21ldGg7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MTk5MTY1OTEg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3Qu YwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxOTkxNjU5MSArMDEwMAorQEAgLTAsMCArMSw4MjcgQEAK KysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3NlbGZ0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERy IFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysg KiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDEx IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK KysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKwor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysj aW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysj aW5jbHVkZSAiZmlwc19kcmJnX3NlbGZ0ZXN0LmgiCisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKyAg ICBpbnQgcG9zdDsKKysgICAgaW50IG5pZDsKKysgICAgdW5zaWduZWQgaW50IGZsYWdzOworKwor KyAgICAvKiBLQVQgZGF0YSBmb3Igbm8gUFIgKi8KKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAq ZW50OworKyAgICBzaXplX3QgZW50bGVuOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25j ZTsKKysgICAgc2l6ZV90IG5vbmNlbGVuOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJz OworKyAgICBzaXplX3QgcGVyc2xlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjsK KysgICAgc2l6ZV90IGFkaW5sZW47CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHJlc2Vl ZDsKKysgICAgc2l6ZV90IGVudHJlc2VlZGxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbnJlc2VlZDsKKysgICAgc2l6ZV90IGFkaW5yZXNlZWRsZW47CisrICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4yOworKyAgICBzaXplX3QgYWRpbjJsZW47CisrICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmthdDsKKysgICAgc2l6ZV90IGthdGxlbjsKKysgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqa2F0MjsKKysgICAgc2l6ZV90IGthdDJsZW47CisrCisrICAgIC8qIEtBVCBkYXRhIGZv ciBQUiAqLworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnRfcHI7CisrICAgIHNpemVfdCBl bnRsZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlX3ByOworKyAgICBzaXpl X3Qgbm9uY2VsZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnNfcHI7CisrICAg IHNpemVfdCBwZXJzbGVuX3ByOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluX3ByOwor KyAgICBzaXplX3QgYWRpbmxlbl9wcjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50cHJf cHI7CisrICAgIHNpemVfdCBlbnRwcmxlbl9wcjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbmdfcHI7CisrICAgIHNpemVfdCBhZGluZ2xlbl9wcjsKKysgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqZW50Z19wcjsKKysgICAgc2l6ZV90IGVudGdsZW5fcHI7CisrICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmthdF9wcjsKKysgICAgc2l6ZV90IGthdGxlbl9wcjsKKysgICAgY29uc3QgdW5z aWduZWQgY2hhciAqa2F0Ml9wcjsKKysgICAgc2l6ZV90IGthdDJsZW5fcHI7CisrCisrfSBEUkJH X1NFTEZURVNUX0RBVEE7CisrCisrI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgZmxh ZywgcHIsIHApIHtwLCBuaWQsIGZsYWcgfCBEUkJHX0ZMQUdfVEVTVCwgXAorKyAgICAgICAgcHIj I19lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dCksIFwKKysgICAgICAgIHBy IyNfbm9uY2UsIHNpemVvZihwciMjX25vbmNlKSwgXAorKyAgICAgICAgcHIjI19wZXJzb25hbGl6 YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKKysgICAg ICAgIHByIyNfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQpLCBc CisrICAgICAgICBwciMjX2VudHJvcHlpbnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfZW50cm9weWlu cHV0cmVzZWVkKSwgXAorKyAgICAgICAgcHIjI19hZGRpdGlvbmFsaW5wdXRyZXNlZWQsIHNpemVv ZihwciMjX2FkZGl0aW9uYWxpbnB1dHJlc2VlZCksIFwKKysgICAgICAgIHByIyNfYWRkaXRpb25h bGlucHV0Miwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0MiksIFwKKysgICAgICAgIHByIyNf aW50X3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfaW50X3JldHVybmVkYml0cyksIFwKKysgICAg ICAgIHByIyNfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19yZXR1cm5lZGJpdHMpLCBcCisrICAg ICAgICBwciMjX3ByX2VudHJvcHlpbnB1dCwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0KSwg XAorKyAgICAgICAgcHIjI19wcl9ub25jZSwgc2l6ZW9mKHByIyNfcHJfbm9uY2UpLCBcCisrICAg ICAgICBwciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZywgc2l6ZW9mKHByIyNfcHJfcGVyc29u YWxpemF0aW9uc3RyaW5nKSwgXAorKyAgICAgICAgcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQsIHNp emVvZihwciMjX3ByX2FkZGl0aW9uYWxpbnB1dCksIFwKKysgICAgICAgIHByIyNfcHJfZW50cm9w eWlucHV0cHIsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dHByKSwgXAorKyAgICAgICAgcHIj I19wcl9hZGRpdGlvbmFsaW5wdXQyLCBzaXplb2YocHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyKSwg XAorKyAgICAgICAgcHIjI19wcl9lbnRyb3B5aW5wdXRwcjIsIHNpemVvZihwciMjX3ByX2VudHJv cHlpbnB1dHByMiksIFwKKysgICAgICAgIHByIyNfcHJfaW50X3JldHVybmVkYml0cywgc2l6ZW9m KHByIyNfcHJfaW50X3JldHVybmVkYml0cyksIFwKKysgICAgICAgIHByIyNfcHJfcmV0dXJuZWRi aXRzLCBzaXplb2YocHIjI19wcl9yZXR1cm5lZGJpdHMpLCBcCisrICAgICAgICB9CisrCisrI2Rl ZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhX2RmKG5pZCwgcHIsIHApIFwKKysgICAgICAgIG1ha2Vf ZHJiZ190ZXN0X2RhdGEobmlkLCBEUkJHX0ZMQUdfQ1RSX1VTRV9ERiwgcHIsIHApCisrCisrI2Rl ZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhX2VjKGN1cnZlLCBtZCwgcHIsIHApIFwKKysgICAgICAg IG1ha2VfZHJiZ190ZXN0X2RhdGEoKGN1cnZlIDw8IDE2KSB8IG1kICwgMCwgcHIsIHApCisrCisr c3RhdGljIERSQkdfU0VMRlRFU1RfREFUQSBkcmJnX3Rlc3RbXSA9IHsKKysgICAgbWFrZV9kcmJn X3Rlc3RfZGF0YV9kZihOSURfYWVzXzEyOF9jdHIsIGFlc18xMjhfdXNlX2RmLCAwKSwKKysgICAg bWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzE5Ml9jdHIsIGFlc18xOTJfdXNlX2RmLCAw KSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzI1Nl9jdHIsIGFlc18yNTZf dXNlX2RmLCAxKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzEyOF9jdHIsIDAs IGFlc18xMjhfbm9fZGYsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMTky X2N0ciwgMCwgYWVzXzE5Ml9ub19kZiwgMCksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklE X2Flc18yNTZfY3RyLCAwLCBhZXNfMjU2X25vX2RmLCAxKSwKKysgICAgbWFrZV9kcmJnX3Rlc3Rf ZGF0YShOSURfc2hhMSwgMCwgc2hhMSwgMCksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklE X3NoYTIyNCwgMCwgc2hhMjI0LCAwKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hh MjU2LCAwLCBzaGEyNTYsIDEpLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEzODQs IDAsIHNoYTM4NCwgMCksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTUxMiwgMCwg c2hhNTEyLCAwKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEExLCAw LCBobWFjX3NoYTEsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNI QTIyNCwgMCwgaG1hY19zaGEyMjQsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9o bWFjV2l0aFNIQTI1NiwgMCwgaG1hY19zaGEyNTYsIDEpLAorKyAgICBtYWtlX2RyYmdfdGVzdF9k YXRhKE5JRF9obWFjV2l0aFNIQTM4NCwgMCwgaG1hY19zaGEzODQsIDApLAorKyAgICBtYWtlX2Ry YmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTUxMiwgMCwgaG1hY19zaGE1MTIsIDApLAorKyAg ICB7MCwgMCwgMH0KKyt9OworKworK3R5cGVkZWYgc3RydWN0IHsKKysgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqZW50OworKyAgICBzaXplX3QgZW50bGVuOworKyAgICBpbnQgZW50Y250OworKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZTsKKysgICAgc2l6ZV90IG5vbmNlbGVuOworKyAg ICBpbnQgbm9uY2VjbnQ7CisrfSBURVNUX0VOVDsKKysKKytzdGF0aWMgc2l6ZV90IHRlc3RfZW50 cm9weShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xl bikKKyt7CisrICAgIFRFU1RfRU5UICp0ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsK KysgICAgKnBvdXQgPSAodW5zaWduZWQgY2hhciAqKXQtPmVudDsKKysgICAgdC0+ZW50Y250Kys7 CisrICAgIHJldHVybiB0LT5lbnRsZW47CisrfQorKworK3N0YXRpYyBzaXplX3QgdGVzdF9ub25j ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisr eworKyAgICBURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrICAg ICpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5ub25jZTsKKysgICAgdC0+bm9uY2VjbnQrKzsK KysgICAgcmV0dXJuIHQtPm5vbmNlbGVuOworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19z aW5nbGVfa2F0KERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKiB0ZCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBxdWljaykKKyt7CisrICAgIFRFU1RfRU5U IHQ7CisrICAgIGludCBydiA9IDA7CisrICAgIHNpemVfdCBhZGlubGVuOworKyAgICB1bnNpZ25l ZCBjaGFyIHJhbmRvdXRbMTAyNF07CisrCisrICAgIC8qIEluaXRpYWwgdGVzdCB3aXRob3V0IFBS ICovCisrCisrICAgIC8qIEluc3RhbnRpYXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNl IGFuZCBwZXJzb25hbGlzYXRpb24KKysgICAgICogc3RyaW5nLgorKyAgICAgKi8KKysKKysgICAg aWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKyAgICAgICAg cmV0dXJuIDA7CisrICAgIGlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9l bnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKKysgICAgICAgIHJldHVybiAwOworKworKyAg ICBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsICZ0KTsKKysKKysgICAgdC5lbnQgPSB0ZC0+ ZW50OworKyAgICB0LmVudGxlbiA9IHRkLT5lbnRsZW47CisrICAgIHQubm9uY2UgPSB0ZC0+bm9u Y2U7CisrICAgIHQubm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47CisrICAgIHQuZW50Y250ID0gMDsK KysgICAgdC5ub25jZWNudCA9IDA7CisrCisrICAgIGlmICghRklQU19kcmJnX2luc3RhbnRpYXRl KGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ICAgLyogTm90ZSBmb3IgQ1RSIHdpdGhvdXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVl cworKyAgICAgKiBpZ25vcmUgYnl0ZXMgYWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFk aW5sZW4KKysgICAgICogdG8gaGFsZiB0byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4K KysgICAgICovCisrICAgIGlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRj dHgtPnR5cGUsICZkY3R4LT5pZmxhZ3MpKQorKyAgICAgICAgYWRpbmxlbiA9IHRkLT5hZGlubGVu IC8gMjsKKysgICAgZWxzZQorKyAgICAgICAgYWRpbmxlbiA9IHRkLT5hZGlubGVuOworKworKyAg ICAvKiBHZW5lcmF0ZSB3aXRoIG5vIFBSIGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0 ZWQgZGF0YSAqLworKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0 ZC0+a2F0bGVuLCAwLCB0ZC0+YWRpbiwgYWRpbmxlbikpCisrICAgICAgICBnb3RvIGVycjsKKysK KysgICAgaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0LCB0ZC0+a2F0bGVuKSkgeworKyAgICAg ICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1Qx X0ZBSUxVUkUpOworKyAgICAgICAgZ290byBlcnIyOworKyAgICB9CisrICAgIC8qIElmIGFiYnJl dmlhdGVkIFBPU1QgZW5kIG9mIHRlc3QgKi8KKysgICAgaWYgKHF1aWNrKSB7CisrICAgICAgICBy diA9IDE7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKyAgICAvKiBSZXNlZWQgRFJCRyB3 aXRoIHRlc3QgZW50cm9weSBhbmQgYWRkaXRpb25hbCBpbnB1dCAqLworKyAgICB0LmVudCA9IHRk LT5lbnRyZXNlZWQ7CisrICAgIHQuZW50bGVuID0gdGQtPmVudHJlc2VlZGxlbjsKKysKKysgICAg aWYgKCFGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlucmVzZWVkLCB0ZC0+YWRpbnJlc2Vl ZGxlbikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyogR2VuZXJhdGUgd2l0aCBubyBQ UiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIGRhdGEgKi8KKysgICAgaWYgKCFG SVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW4sIDAsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluMiwgdGQtPmFkaW4ybGVuKSkKKysgICAgICAg IGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyLCB0ZC0+a2F0 MmxlbikpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBG SVBTX1JfTk9QUl9URVNUMl9GQUlMVVJFKTsKKysgICAgICAgIGdvdG8gZXJyMjsKKysgICAgfQor KworKyAgICBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysKKysgICAgLyogTm93IHRl c3Qgd2l0aCBQUiAqLworKworKyAgICAvKiBJbnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRy b3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0aW9uCisrICAgICAqIHN0cmluZy4KKysgICAgICov CisrICAgIGlmICghRklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKKysg ICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgs IHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCisrICAgICAgICByZXR1cm4gMDsK KysKKysgICAgRklQU19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7CisrCisrICAgIHQuZW50 ID0gdGQtPmVudF9wcjsKKysgICAgdC5lbnRsZW4gPSB0ZC0+ZW50bGVuX3ByOworKyAgICB0Lm5v bmNlID0gdGQtPm5vbmNlX3ByOworKyAgICB0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuX3ByOwor KyAgICB0LmVudGNudCA9IDA7CisrICAgIHQubm9uY2VjbnQgPSAwOworKworKyAgICBpZiAoIUZJ UFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVyc19wciwgdGQtPnBlcnNsZW5fcHIpKQor KyAgICAgICAgZ290byBlcnI7CisrCisrICAgIC8qIE5vdyBnZW5lcmF0ZSB3aXRoIFBSOiB3ZSBu ZWVkIHRvIHN1cHBseSBlbnRyb3B5IGFzIHRoaXMgd2lsbAorKyAgICAgKiBwZXJmb3JtIGEgcmVz ZWVkIG9wZXJhdGlvbi4gQ2hlY2sgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuCisrICAg ICAqLworKworKyAgICB0LmVudCA9IHRkLT5lbnRwcl9wcjsKKysgICAgdC5lbnRsZW4gPSB0ZC0+ ZW50cHJsZW5fcHI7CisrCisrICAgIC8qIE5vdGUgZm9yIENUUiB3aXRob3V0IERGIHNvbWUgYWRk aXRpb25hbCBpbnB1dCB2YWx1ZXMKKysgICAgICogaWdub3JlIGJ5dGVzIGFmdGVyIHRoZSBrZXls ZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCisrICAgICAqIHRvIGhhbGYgdG8gZW5zdXJlIGludmFs aWQgZGF0YSBpcyBmZWQgaW4uCisrICAgICAqLworKyAgICBpZiAoIWZpcHNfcG9zdF9jb3JydXB0 KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdzKSkKKysgICAgICAgIGFk aW5sZW4gPSB0ZC0+YWRpbmxlbl9wciAvIDI7CisrICAgIGVsc2UKKysgICAgICAgIGFkaW5sZW4g PSB0ZC0+YWRpbmxlbl9wcjsKKysgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgdGQtPmthdGxlbl9wciwgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQt PmFkaW5fcHIsIGFkaW5sZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlmIChtZW1j bXAocmFuZG91dCwgdGQtPmthdF9wciwgdGQtPmthdGxlbl9wcikpIHsKKysgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSk7 CisrICAgICAgICBnb3RvIGVycjI7CisrICAgIH0KKysKKysgICAgLyogTm93IGdlbmVyYXRlIGFn YWluIHdpdGggUFI6IHN1cHBseSBuZXcgZW50cm9weSBhZ2Fpbi4KKysgICAgICogQ2hlY2sgb3V0 cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuCisrICAgICAqLworKworKyAgICB0LmVudCA9IHRk LT5lbnRnX3ByOworKyAgICB0LmVudGxlbiA9IHRkLT5lbnRnbGVuX3ByOworKworKyAgICBpZiAo IUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0Mmxlbl9wciwgMSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW5nX3ByLCB0ZC0+YWRpbmdsZW5fcHIp KQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlmIChtZW1jbXAocmFuZG91dCwgdGQtPmth dDJfcHIsIHRkLT5rYXQybGVuX3ByKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19E UkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFKTsKKysgICAgICAgIGdvdG8g ZXJyMjsKKysgICAgfQorKyAgICAvKiBBbGwgT0ssIHRlc3QgY29tcGxldGUgKi8KKysgICAgcnYg PSAxOworKworKyBlcnI6CisrICAgIGlmIChydiA9PSAwKQorKyAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyBlcnIy OgorKyAgICBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysKKysgICAgcmV0dXJuIHJ2 OworKworK30KKysKKysvKiBJbml0aWFsaXNlIGEgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRh ICovCisrCisrc3RhdGljIGludCBkb19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VM RlRFU1RfREFUQSAqIHRkLCBURVNUX0VOVCAqIHQpCisreworKworKyAgICBpZiAoIUZJUFNfZHJi Z19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCisrICAgICAgICByZXR1cm4gMDsKKysK KysgICAgaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAs IDAsIHRlc3Rfbm9uY2UsIDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIEZJUFNfZHJi Z19zZXRfYXBwX2RhdGEoZGN0eCwgdCk7CisrCisrICAgIHQtPmVudCA9IHRkLT5lbnQ7CisrICAg IHQtPmVudGxlbiA9IHRkLT5lbnRsZW47CisrICAgIHQtPm5vbmNlID0gdGQtPm5vbmNlOworKyAg ICB0LT5ub25jZWxlbiA9IHRkLT5ub25jZWxlbjsKKysgICAgdC0+ZW50Y250ID0gMDsKKysgICAg dC0+bm9uY2VjbnQgPSAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogSW5pdGlhbGlzZSBh bmQgaW5zdGFudGlhdGUgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCisrc3RhdGljIGlu dCBkb19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEg KiB0ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9FTlQgKiB0KQorK3sK KysgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsIHQpKQorKyAgICAgICAgcmV0dXJuIDA7 CisrICAgIGlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVy c2xlbikpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgcmV0dXJuIDE7CisrfQorKworKy8q IFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgZXh0ZW5zaXZlIGVycm9yIGNoZWNraW5nIGFzIHJlcXVp cmVkIGJ5IFNQODAwLTkwLgorKyAqIEluZHVjZSBzZXZlcmFsIGZhaWx1cmUgbW9kZXMgYW5kIGNo ZWNrIGFuIGVycm9yIGNvbmRpdGlvbiBpcyBzZXQuCisrICogVGhpcyBmdW5jdGlvbiBhbG9uZyB3 aXRoIGZpcHNfZHJiZ19zaW5nbGVfa2F0IHBlZm9ybXMgdGhlIGhlYWx0aCBjaGVja2luZworKyAq IG9wZXJhdGlvbi4KKysgKi8KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19lcnJvcl9jaGVjayhE UkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQpCisreworKyAgICB1bnNpZ25l ZCBjaGFyIHJhbmRvdXRbMTAyNF07CisrICAgIFRFU1RfRU5UIHQ7CisrICAgIHNpemVfdCBpOwor KyAgICB1bnNpZ25lZCBpbnQgcmVzZWVkX2NvdW50ZXJfdG1wOworKyAgICB1bnNpZ25lZCBjaGFy ICpwID0gKHVuc2lnbmVkIGNoYXIgKilkY3R4OworKworKyAgICAvKiBJbml0aWFsaXNlIERSQkcg Ki8KKysKKysgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysgICAgICAgIGdv dG8gZXJyOworKworKyAgICAvKiBEb24ndCByZXBvcnQgaW5kdWNlZCBlcnJvcnMgKi8KKysgICAg ZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAgLyogUGVyc29uYWxpc2F0 aW9uIHN0cmluZyB0ZXN0cyAqLworKworKyAgICAvKiBUZXN0IGRldGVjdGlvbiBvZiB0b28gbGFy Z2UgcGVyc29ubGlzYXRpb24gc3RyaW5nICovCisrCisrICAgIGlmIChGSVBTX2RyYmdfaW5zdGFu dGlhdGUoZGN0eCwgdGQtPnBlcnMsIGRjdHgtPm1heF9wZXJzICsgMSkgPiAwKSB7CisrICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAg IEZJUFNfUl9QRVJTT05BTElTQVRJT05fRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3Rv IGVycjsKKysgICAgfQorKworKyAgICAvKiBFbnRyb3B5IHNvdXJjZSB0ZXN0cyAqLworKworKyAg ICAvKiBUZXN0IGVudHJvcHkgc291cmNlIGZhaWx1cmUgZGV0ZWNpb246IGkuZS4gcmV0dXJucyBu byBkYXRhICovCisrCisrICAgIHQuZW50bGVuID0gMDsKKysKKysgICAgaWYgKEZJUFNfZHJiZ19p bnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkgeworKyAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBG SVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICB9CisrCisrICAgIC8qIFRyeSB0byBnZW5lcmF0ZSBvdXRwdXQgZnJvbSB1bmluc3RhbnRpYXRl ZCBEUkJHICovCisrICAgIGlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQt PmthdGxlbiwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFk aW5sZW4pKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss CisrICAgICAgICAgICAgICAgIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEKTsKKysg ICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19G TEFHX05PRVJSOworKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Cisr ICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklO U1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlm ICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAgLyogVGVzdCBpbnN1 ZmZpY2llbnQgZW50cm9weSAqLworKworKyAgICB0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5 IC0gMTsKKysKKysgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywg dGQtPnBlcnNsZW4pID4gMCkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVD VEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGRjdHgtPmlmbGFncyAm PSB+RFJCR19GTEFHX05PRVJSOworKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9Cisr CisrICAgIC8qIFRlc3QgdG9vIG11Y2ggZW50cm9weSAqLworKworKyAgICBpZiAoIWRvX2RyYmdf aW5pdChkY3R4LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGRjdHgtPmlm bGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrICAgIHQuZW50bGVuID0gZGN0eC0+bWF4X2Vu dHJvcHkgKyAxOworKworKyAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5w ZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgZGN0eC0+aWZs YWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKyAgICAgICAgZ290byBlcnI7CisrICAg IH0KKysKKysgICAgLyogTm9uY2UgdGVzdHMgKi8KKysKKysgICAgLyogVGVzdCB0b28gc21hbGwg bm9uY2UgKi8KKysKKysgICAgaWYgKGRjdHgtPm1pbl9ub25jZSkgeworKworKyAgICAgICAgaWYg KCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysgICAgICAgICAgICBnb3RvIGVycjsKKysK KysgICAgICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrICAgICAgICB0 Lm5vbmNlbGVuID0gZGN0eC0+bWluX25vbmNlIC0gMTsKKysKKysgICAgICAgIGlmIChGSVBTX2Ry YmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKKysgICAg ICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAg ICAgICAgICAgICBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICAgICAg Z290byBlcnI7CisrICAgICAgICB9CisrCisrICAgICAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdf RkxBR19OT0VSUjsKKysgICAgICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkp IHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAg ICAgIH0KKysKKysgICAgfQorKworKyAgICAvKiBUZXN0IHRvbyBsYXJnZSBub25jZSAqLworKwor KyAgICBpZiAoZGN0eC0+bWF4X25vbmNlKSB7CisrCisrICAgICAgICBpZiAoIWRvX2RyYmdfaW5p dChkY3R4LCB0ZCwgJnQpKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKworKyAgICAgICAgZGN0 eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAgICAgIHQubm9uY2VsZW4gPSBk Y3R4LT5tYXhfbm9uY2UgKyAxOworKworKyAgICAgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0 ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkgeworKyAgICAgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgICAgIEZJ UFNfUl9OT05DRV9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAgICAgICAgICBnb3RvIGVycjsKKysg ICAgICAgIH0KKysKKysgICAgICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwor KyAgICAgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAg ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFO VElBVEVfRVJST1IpOworKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKworKyAg ICB9CisrCisrICAgIC8qIEluc3RhbnRpYXRlIHdpdGggdmFsaWQgZGF0YS4gKi8KKysgICAgaWYg KCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVycjsK KysKKysgICAgLyogQ2hlY2sgZ2VuZXJhdGlvbiBpcyBub3cgT0sgKi8KKysgICAgaWYgKCFGSVBT X2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysgICAgICAgIGdvdG8g ZXJyOworKworKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKyAgICAv KiBSZXF1ZXN0IHRvbyBtdWNoIGRhdGEgZm9yIG9uZSByZXF1ZXN0ICovCisrICAgIGlmIChGSVBT X2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgZGN0eC0+bWF4X3JlcXVlc3QgKyAxLCAwLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpIHsKKysg ICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAg ICAgICAgRklQU19SX1JFUVVFU1RfTEVOR1RIX0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAg Z290byBlcnI7CisrICAgIH0KKysKKysgICAgLyogVHJ5IHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlu cHV0ICovCisrICAgIGlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dGxlbiwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgZGN0eC0+bWF4 X2FkaW4gKyAxKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRF VEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIENoZWNrIHBy ZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCisrICAg ICAqIGZhaWx1cmUuCisrICAgICAqLworKworKyAgICB0LmVudGxlbiA9IDA7CisrCisrICAgIGlm IChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKSB7CisrICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAg IEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7Cisr ICAgIH0KKysKKysgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrICAgIGlm ICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwor KyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgLyogSW5zdGFudGlhdGUgYWdhaW4g d2l0aCB2YWxpZCBkYXRhICovCisrCisrICAgIGlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4 LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIC8qIFRlc3QgcmVzZWVkIGNvdW50 ZXIgd29ya3MgKi8KKysgICAgLyogU2F2ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVyICovCisrICAg IHJlc2VlZF9jb3VudGVyX3RtcCA9IGRjdHgtPnJlc2VlZF9jb3VudGVyOworKyAgICAvKiBTZXQg cmVzZWVkIGNvdW50ZXIgdG8gYmV5b25kIGludGVydmFsICovCisrICAgIGRjdHgtPnJlc2VlZF9j b3VudGVyID0gZGN0eC0+cmVzZWVkX2ludGVydmFsOworKworKyAgICAvKiBHZW5lcmF0ZSBvdXRw dXQgYW5kIGNoZWNrIGVudHJvcHkgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KKysg ICAgdC5lbnRjbnQgPSAwOworKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5k b3V0LCB0ZC0+a2F0bGVuLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRp biwgdGQtPmFkaW5sZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICh0LmVudGNudCAh PSAxKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisr ICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCk7 CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKyAgICAvKiBDaGVjayByZXNlZWQgY291bnRl ciBoYXMgYmVlbiByZXNldCAqLworKyAgICBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVz ZWVkX2NvdW50ZXJfdG1wICsgMSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVTRUVEX0NPVU5URVJfRVJST1IpOworKyAgICAgICAgZ290 byBlcnI7CisrICAgIH0KKysKKysgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7 CisrICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKKysgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVf RVJST1IpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgLyogQ2hlY2sgcHJl ZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKKysgICAg ICogZmFpbHVyZS4KKysgICAgICovCisrCisrICAgIHQuZW50bGVuID0gMDsKKysKKysgICAgZGN0 eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0 ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAxLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJS T1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBkY3R4 LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysKKysgICAgaWYgKCFGSVBTX2RyYmdfdW5p bnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICBnb3RvIGVy cjsKKysgICAgfQorKworKyAgICBpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0 KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICAvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtz ICovCisrICAgIC8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLworKyAgICByZXNlZWRf Y291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKKysgICAgLyogU2V0IHJlc2VlZCBj b3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLworKyAgICBkY3R4LT5yZXNlZWRfY291bnRlciA9 IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKKysKKysgICAgLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBj aGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCisrICAgIHQuZW50 Y250ID0gMDsKKysgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQt PmthdGxlbiwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5h ZGlubGVuKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAodC5lbnRjbnQgIT0gMSkgewor KyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAg ICAgICAgICBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOworKyAgICAg ICAgZ290byBlcnI7CisrICAgIH0KKysgICAgLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJl ZW4gcmVzZXQgKi8KKysgICAgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3Vu dGVyX3RtcCArIDEpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOwor KyAgICB9CisrCisrICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKyAgICBp ZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsK KysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIEV4cGxpY2l0IHJlc2VlZCB0 ZXN0cyAqLworKworKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsYXJnZSBh ZGRpdGlvbmFsIGlucHV0ICovCisrICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkp CisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19O T0VSUjsKKysKKysgICAgaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIGRjdHgt Pm1heF9hZGluICsgMSkgPiAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VS Uk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgLyog VGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlICovCisrCisr ICAgIHQuZW50bGVuID0gMDsKKysKKysgICAgaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQt PmFkaW4sIHRkLT5hZGlubGVuKSA+IDApIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1Jf VU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBpZiAoIUZJ UFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdp dGggdG9vIG11Y2ggZW50cm9weSAqLworKworKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0 ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGRjdHgtPmlmbGFncyB8PSBEUkJH X0ZMQUdfTk9FUlI7CisrCisrICAgIHQuZW50bGVuID0gZGN0eC0+bWF4X2VudHJvcHkgKyAxOwor KworKyAgICBpZiAoRklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4p ID4gMCkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAor KyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKyAgICAgICAgZ290byBlcnI7CisrICAg IH0KKysKKysgICAgLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGl0dGxlIGVudHJv cHkgKi8KKysKKysgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysgICAgICAg IGdvdG8gZXJyOworKworKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKwor KyAgICB0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKKysKKysgICAgaWYgKEZJUFNf ZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApIHsKKysgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAg RklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysg ICAgfQorKworKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAg ICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RB TlRJQVRFX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIHAgPSAo dW5zaWduZWQgY2hhciAqKSZkY3R4LT5kOworKyAgICAvKiBTdGFuZGFyZCBzYXlzIHdlIGhhdmUg dG8gY2hlY2sgdW5pbnN0YW50aWF0ZSByZWFsbHkgemVyb2VzCisrICAgICAqIHRoZSBkYXRhLi4u CisrICAgICAqLworKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRjdHgtPmQpOyBpKyspIHsK KysgICAgICAgIGlmICgqcCAhPSAwKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICAgICAgRklQU19SX1VOSU5TVEFO VElBVEVfWkVST0lTRV9FUlJPUik7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9 CisrICAgICAgICBwKys7CisrICAgIH0KKysKKysgICAgcmV0dXJuIDE7CisrCisrIGVycjoKKysg ICAgLyogQSByZWFsIGVycm9yIGFzIG9wcG9zZWQgdG8gYW4gaW5kdWNlZCBvbmU6IHVuZGVybHlp bmcgZnVuY3Rpb24gd2lsbAorKyAgICAgKiBpbmRpY2F0ZSB0aGUgZXJyb3IuCisrICAgICAqLwor KyAgICBpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQorKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfRlVOQ1RJT05fRVJST1Ip OworKyAgICBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKKysgICAgcmV0dXJuIDA7Cisr CisrfQorKworK2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNp Z25lZCBpbnQgZmxhZ3MpCisreworKyAgICBEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKyAgICBm bGFncyB8PSBEUkJHX0ZMQUdfVEVTVDsKKysgICAgZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5p ZCAhPSAwOyB0ZCsrKSB7CisrICAgICAgICBpZiAodGQtPm5pZCA9PSBuaWQgJiYgdGQtPmZsYWdz ID09IGZsYWdzKSB7CisrICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4 LCB0ZCwgMCkpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgIHJldHVy biBmaXBzX2RyYmdfZXJyb3JfY2hlY2soZGN0eCwgdGQpOworKyAgICAgICAgfQorKyAgICB9Cisr ICAgIHJldHVybiAwOworK30KKysKKytpbnQgRklQU19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NU WCAqZGN0eCkKKyt7CisrICAgIGludCBydjsKKysgICAgRFJCR19DVFggKnRjdHggPSBOVUxMOwor KyAgICB0Y3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKKysgICAgZmlwc19wb3N0X3N0YXJ0ZWQo RklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOworKyAgICBpZiAoIXRj dHgpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcnYgPSBmaXBzX2RyYmdfa2F0KHRjdHgsIGRj dHgtPnR5cGUsIGRjdHgtPnhmbGFncyk7CisrICAgIGlmICh0Y3R4KQorKyAgICAgICAgRklQU19k cmJnX2ZyZWUodGN0eCk7CisrICAgIGlmIChydikKKysgICAgICAgIGZpcHNfcG9zdF9zdWNjZXNz KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysgICAgZWxzZQor KyAgICAgICAgZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRj dHgtPnhmbGFncyk7CisrICAgIGlmICghcnYpCisrICAgICAgICBkY3R4LT5zdGF0dXMgPSBEUkJH X1NUQVRVU19FUlJPUjsKKysgICAgZWxzZQorKyAgICAgICAgZGN0eC0+aGVhbHRoX2NoZWNrX2Nu dCA9IDA7CisrICAgIHJldHVybiBydjsKKyt9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2 b2lkKQorK3sKKysgICAgRFJCR19DVFggKmRjdHg7CisrICAgIERSQkdfU0VMRlRFU1RfREFUQSAq dGQ7CisrICAgIGludCBydiA9IDE7CisrICAgIGRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwor KyAgICBpZiAoIWRjdHgpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgZm9yICh0ZCA9IGRyYmdf dGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKSB7CisrICAgICAgICBpZiAodGQtPnBvc3QgIT0gMSkK KysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIGlmICghZmlwc19wb3N0X3N0YXJ0ZWQo RklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKyAgICAgICAgICAgIHJldHVy biAxOworKyAgICAgICAgaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMSkpIHsK KysgICAgICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAm dGQtPmZsYWdzKTsKKysgICAgICAgICAgICBydiA9IDA7CisrICAgICAgICAgICAgY29udGludWU7 CisrICAgICAgICB9CisrICAgICAgICBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9E UkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAg fQorKyAgICBGSVBTX2RyYmdfZnJlZShkY3R4KTsKKysgICAgcmV0dXJuIHJ2OworK30KKysKKytp bnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKQorK3sKKysgICAgRFJCR19DVFggKmRjdHg7 CisrICAgIERSQkdfU0VMRlRFU1RfREFUQSAqdGQ7CisrICAgIGludCBydiA9IDE7CisrICAgIGRj dHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOworKyAgICBpZiAoIWRjdHgpCisrICAgICAgICByZXR1 cm4gMDsKKysgICAgZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKSB7Cisr ICAgICAgICBpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAm dGQtPmZsYWdzKSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIGlmICghZmlwc19k cmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKSB7CisrICAgICAgICAgICAgZmlwc19wb3N0X2Zh aWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7CisrICAgICAgICAgICAg cnYgPSAwOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgaWYg KCFmaXBzX2RyYmdfZXJyb3JfY2hlY2soZGN0eCwgdGQpKSB7CisrICAgICAgICAgICAgZmlwc19w b3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7CisrICAgICAg ICAgICAgcnYgPSAwOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAg ICAgaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5m bGFncykpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgRklQU19kcmJnX2Zy ZWUoZGN0eCk7CisrICAgIHJldHVybiBydjsKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaC5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMDkxNjYx MyArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVz dC5oCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIwOTE2NjEzICswMTAwCitAQCAtMCwwICsxLDE3OTEg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgb3BlbnNzbC1jb3JlLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqCisrICovCisrCisrLyogU2VsZnRlc3QgYW5kIGhlYWx0aCBjaGVjayBk YXRhIGZvciB0aGUgU1A4MDAtOTAgRFJCRyAqLworKworKyNkZWZpbmUgX19maXBzX2NvbnN0c2Vn CisrCisrLyogQUVTLTEyOCB1c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0gewor KyAgICAweDYxLCAweDUyLCAweDdjLCAweGUzLCAweDIzLCAweDdkLCAweDBhLCAweDA3LCAweDEw LCAweDBjLCAweDUwLCAweDMzLAorKyAgICAweGM4LCAweGRiLCAweGZmLCAweDEyCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2Vf ZGZfcHJfbm9uY2VbXSA9IHsKKysgICAgMHg1MSwgMHgwZCwgMHg4NSwgMHg3NywgMHhlZCwgMHgy MiwgMHg5NywgMHgyOAorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0geworKyAgICAweDU5LCAweDlmLCAweGJiLCAweGNkLCAweGQ1LCAweDI1LCAweDY5LCAweGI1 LCAweGNiLCAweGI1LCAweDAzLCAweGZlLAorKyAgICAweGQ3LCAweGQ3LCAweDAxLCAweDY3Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ZWYsIDB4ODgs IDB4NzYsIDB4MDEsIDB4YWYsIDB4M2MsIDB4ZmUsIDB4OGIsIDB4YWYsIDB4MjYsIDB4MDYsIDB4 OWUsCisrICAgIDB4OWEsIDB4NDcsIDB4MDgsIDB4NzYKKyt9OworKworK19fZmlwc19jb25zdHNl ZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0geworKyAgICAweGUyLCAweDc2LCAweGY5LCAweGY2LCAweDNhLCAweGJh LCAweDEwLCAweDlmLCAweGJmLCAweDQ3LCAweDBlLCAweDUxLAorKyAgICAweDA5LCAweGZiLCAw eGEzLCAweGI2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAg ICAweGQ0LCAweDk4LCAweDhhLCAweDQ2LCAweDgwLCAweDRjLCAweGRiLCAweGEzLCAweDU5LCAw eDAyLCAweDU3LCAweDUyLAorKyAgICAweDY2LCAweDFjLCAweGVhLCAweDViCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91 c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweDg4LCAweDhjLCAweDkxLCAw eGQ2LCAweGJlLCAweDU2LCAweDZlLCAweDA4LCAweDlhLCAweDYyLCAweDJiLCAweDExLAorKyAg ICAweDNmLCAweDVlLCAweDMxLCAweDA2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0 cHIyW10gPSB7CisrICAgIDB4YzAsIDB4NWMsIDB4NmIsIDB4OTgsIDB4MDEsIDB4MGQsIDB4NTgs IDB4MTgsIDB4NTEsIDB4MTgsIDB4OTYsIDB4YWUsCisrICAgIDB4YTcsIDB4ZTMsIDB4YTgsIDB4 NjcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhjZiwgMHgwMSwgMHhh YywgMHgyMiwgMHgzMSwgMHgwNiwgMHg4ZSwgMHhmYywgMHhjZSwgMHg1NiwgMHhlYSwgMHgyNCwK KysgICAgMHgwZiwgMHgzOCwgMHg0MywgMHhjNgorK307CisrCisrLyogQUVTLTEyOCB1c2UgZGYg Tm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDFmLCAweDhlLCAweDM0LCAw eDgyLCAweDBjLCAweGI3LCAweGJlLCAweGM1LCAweDAxLCAweDNlLCAweGQwLCAweGEzLAorKyAg ICAweDlkLCAweDdkLCAweDFjLCAweDliCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfbm9uY2VbXSA9IHsKKysgICAgMHhk NSwgMHg0ZCwgMHhiZCwgMHg0YSwgMHg5MywgMHg3ZiwgMHhiOCwgMHg5NgorK307CisrCisrX19m aXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGFiLCAweGQ2LCAweDNmLCAw eDA0LCAweGZlLCAweDI3LCAweDZiLCAweDJkLCAweGQ3LCAweGMzLCAweDFjLCAweGYzLAorKyAg ICAweDM4LCAweDY2LCAweGJhLCAweDFiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPSB7 CisrICAgIDB4ZmUsIDB4ZjQsIDB4MDksIDB4YTgsIDB4YjcsIDB4NzMsIDB4MjcsIDB4OWMsIDB4 NWYsIDB4YTcsIDB4ZWEsIDB4NDYsCisrICAgIDB4YjUsIDB4ZTIsIDB4YjIsIDB4NDEKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3Vz ZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NDIsIDB4ZTQsIDB4NGUsIDB4N2Is IDB4MjcsIDB4ZGQsIDB4Y2IsIDB4YmMsIDB4MGEsIDB4Y2YsIDB4YTYsIDB4NjcsCisrICAgIDB4 ZTcsIDB4NTcsIDB4MTEsIDB4YjQKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRb XSA9IHsKKysgICAgMHgxNCwgMHgyNiwgMHg2OSwgMHhkOSwgMHhmMywgMHg2NSwgMHgwMywgMHhk NiwgMHg2YiwgMHhiOSwgMHg0NCwgMHgwYiwKKysgICAgMHhjNywgMHhjNCwgMHg5ZSwgMHgzOQor K307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDU1LCAw eDJlLCAweDYwLCAweDlhLCAweDA1LCAweDcyLCAweDhhLCAweGE4LCAweGVmLCAweDIyLCAweDgx LCAweDVhLAorKyAgICAweGM4LCAweDkzLCAweGZhLCAweDg0CisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25h bGlucHV0MltdID0geworKyAgICAweDNjLCAweDQwLCAweGM4LCAweGM0LCAweDE2LCAweDBjLCAw eDIxLCAweGE0LCAweDM3LCAweDJjLCAweDhmLCAweGE1LAorKyAgICAweDA2LCAweDBjLCAweDE1 LCAweDJjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF91c2VfZGZfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTEsIDB4M2UsIDB4 OTksIDB4OTgsIDB4ODYsIDB4NjcsIDB4MGIsIDB4NjMsIDB4N2IsIDB4YmUsIDB4M2YsIDB4ODgs CisrICAgIDB4NDYsIDB4ODEsIDB4YzcsIDB4MTkKKyt9OworKworKy8qIEFFUy0xOTIgdXNlIGRm IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHgyYiwgMHg0ZSwgMHg4Yiwg MHhlMSwgMHhmMSwgMHgzNCwgMHg4MCwgMHg1NiwgMHg4MSwgMHhmOSwgMHg3NCwgMHhlYywKKysg ICAgMHgxNywgMHg0NCwgMHgyYSwgMHhmMSwgMHgxNCwgMHhiMCwgMHhiZiwgMHg5NywgMHgzOSwg MHhiNywgMHgwNCwgMHg3ZAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX25vbmNlW10gPSB7CisrICAgIDB4ZDYsIDB4 OWQsIDB4ZWIsIDB4MTQsIDB4NGUsIDB4NmMsIDB4MzAsIDB4MWUsIDB4MzksIDB4NTUsIDB4NzMs IDB4ZDAsCisrICAgIDB4ZDEsIDB4ODAsIDB4NzgsIDB4ZmEKKyt9OworKworK19fZmlwc19jb25z dHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhmYywgMHg0MywgMHg0YSwgMHhmOCwg MHg5YSwgMHg1NSwgMHhiMywgMHg1MywgMHg4MywgMHhlMiwgMHgxOCwgMHgxNiwKKysgICAgMHgw YywgMHhkYywgMHhjZCwgMHg1ZSwgMHg0ZiwgMHhhMCwgMHgwMywgMHgwMSwgMHgyYiwgMHg5Ziwg MHhlNCwgMHhkNSwKKysgICAgMHg3ZCwgMHg0OSwgMHhmMCwgMHg0MSwgMHg5ZSwgMHgzZCwgMHg5 OSwgMHgwNAorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAw eDVlLCAweDlmLCAweDQ5LCAweDZmLCAweDIxLCAweDhiLCAweDFkLCAweDMyLCAweGQ1LCAweDg0 LCAweDVjLCAweGFjLAorKyAgICAweGFmLCAweGRmLCAweGU0LCAweDc5LCAweDllLCAweGFmLCAw eGE5LCAweDgyLCAweGQwLCAweGY4LCAweDRmLCAweGNiLAorKyAgICAweDY5LCAweDEwLCAweDBh LCAweDdlLCAweDgxLCAweDU3LCAweGI1LCAweDM2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9w eWlucHV0cHJbXSA9IHsKKysgICAgMHhkNCwgMHg4MSwgMHgwYywgMHhkNywgMHg2NiwgMHgzOSwg MHhlYywgMHg0MiwgMHg1MywgMHg4NywgMHg0MSwgMHhhNSwKKysgICAgMHgxZSwgMHg3ZCwgMHg4 MCwgMHg5MSwgMHg4ZSwgMHhiYiwgMHhlZCwgMHhhYywgMHgxNCwgMHgwMiwgMHgxYSwgMHhkNQor K307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhkZiwgMHgx ZCwgMHgzOSwgMHg0NSwgMHg3YywgMHg5YiwgMHhjNiwgMHgyYiwgMHg3ZCwgMHg4YywgMHg5Mywg MHhlOSwKKysgICAgMHgxOSwgMHgzMCwgMHg2YiwgMHg2NworK307CisrCisrX19maXBzX2NvbnN0 c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2Fk ZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHgwMCwgMHg3MSwgMHgyNywgMHg0ZSwgMHhkMywg MHgxNCwgMHhmMSwgMHgyMCwgMHg3ZiwgMHg0YSwgMHg0MSwgMHgzMiwKKysgICAgMHgyYSwgMHg5 NywgMHgxMSwgMHg0MywgMHg4ZiwgMHg0YSwgMHgxNSwgMHg3YiwgMHg5YiwgMHg1MSwgMHg3OSwg MHhkYSwKKysgICAgMHg0OSwgMHgzZCwgMHhkZSwgMHhlOCwgMHhiYywgMHg5MywgMHg5MSwgMHg5 OQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweDkwLCAw eGVlLCAweDc2LCAweGExLCAweDQ1LCAweDhkLCAweGI3LCAweDQwLCAweGIwLCAweDExLCAweGJm LCAweGQwLAorKyAgICAweDY1LCAweGQ3LCAweDNjLCAweDdjLCAweDRmLCAweDIwLCAweDNmLCAw eDRlLCAweDExLCAweDlkLCAweGIzLCAweDVlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10g PSB7CisrICAgIDB4MjQsIDB4M2IsIDB4MjAsIDB4YTQsIDB4MzcsIDB4NjYsIDB4YmEsIDB4NzIs IDB4MzksIDB4M2YsIDB4Y2YsIDB4M2MsCisrICAgIDB4N2UsIDB4MWEsIDB4MmIsIDB4ODMKKyt9 OworKworKy8qIEFFUy0xOTIgdXNlIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9IHsK KysgICAgMHg4ZCwgMHg3NCwgMHhhNCwgMHg1MCwgMHgxYSwgMHgwMiwgMHg2OCwgMHgwYywgMHgy YSwgMHg2OSwgMHhjNCwgMHg4MiwKKysgICAgMHgzYiwgMHhiYiwgMHhkYSwgMHgwZSwgMHg3Ziwg MHg3NywgMHhhMywgMHgxNywgMHg3OCwgMHg1NywgMHhiMiwgMHg3YgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX25vbmNl W10gPSB7CisrICAgIDB4NzUsIDB4ZDUsIDB4MWYsIDB4YWMsIDB4YTQsIDB4OGQsIDB4NDIsIDB4 NzgsIDB4ZDcsIDB4NjksIDB4ODYsIDB4OWQsCisrICAgIDB4NzcsIDB4ZDcsIDB4NDEsIDB4MGUK Kyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg0ZSwg MHgzMywgMHg0MSwgMHgzYywgMHg5YywgMHhjMiwgMHhkMiwgMHg1MywgMHhhZiwgMHg5MCwgMHhl YSwgMHhjZiwKKysgICAgMHgxOSwgMHg1MCwgMHgxZSwgMHhlNiwgMHg2ZiwgMHg2MywgMHhjOCwg MHgzMiwgMHgyMiwgMHhkYywgMHgwNywgMHg2NSwKKysgICAgMHg5YywgMHhkMywgMHhmOCwgMHgz MCwgMHg5ZSwgMHhlZCwgMHgzNSwgMHg3MAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0g eworKyAgICAweDVkLCAweDhiLCAweDhjLCAweGMxLCAweGRmLCAweDBlLCAweDAyLCAweDc4LCAw eGZiLCAweDE5LCAweGI4LCAweDY5LAorKyAgICAweDc4LCAweDRlLCAweDljLCAweDUyLCAweGJj LCAweGM3LCAweDIwLCAweGM5LCAweGU2LCAweDVlLCAweDc3LCAweDIyLAorKyAgICAweDI4LCAw eDNkLCAweDBjLCAweDllLCAweDY4LCAweGE4LCAweDQ1LCAweGQ3CisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfaW50X3Jl dHVybmVkYml0c1tdID0geworKyAgICAweGQ1LCAweGU3LCAweDA4LCAweGM1LCAweDE5LCAweDk5 LCAweGQ1LCAweDMxLCAweDAzLCAweDBhLCAweDc0LCAweGI2LAorKyAgICAweGI3LCAweGVkLCAw eGU5LCAweGVhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAg IDB4OWMsIDB4MjYsIDB4ZGEsIDB4ZjEsIDB4YWMsIDB4ZDksIDB4NWEsIDB4ZDYsIDB4YTgsIDB4 NjUsIDB4ZjUsIDB4MDIsCisrICAgIDB4OGYsIDB4ZGMsIDB4YTIsIDB4MDksIDB4NTQsIDB4YTYs IDB4ZTIsIDB4YTQsIDB4ZGUsIDB4MzIsIDB4ZTAsIDB4MDEKKyt9OworKworK19fZmlwc19jb25z dHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg5YiwgMHg5MCwgMHhiMCwgMHgzYSwgMHgw ZSwgMHgzYSwgMHg4MCwgMHgwNywgMHg0YSwgMHhmNCwgMHhkYSwgMHg3NiwKKysgICAgMHgyOCwg MHgzMCwgMHgzYywgMHhlZSwgMHg1NCwgMHgxYiwgMHg5NCwgMHg1OSwgMHg1MSwgMHg0MywgMHg1 NiwgMHg3NywKKysgICAgMHhhZiwgMHg4OCwgMHhkZCwgMHg2MywgMHg4OSwgMHg0NywgMHgwNiwg MHg2NQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHgzYywgMHgxMSwg MHg2NCwgMHg3YSwgMHg5NiwgMHhmNSwgMHhkOCwgMHhiOCwgMHhhZSwgMHhkNiwgMHg3MCwgMHg0 ZSwKKysgICAgMHgxNiwgMHg5NiwgMHhkZSwgMHhlOSwgMHg2MiwgMHhiYywgMHhlZSwgMHgyOCwg MHgyZiwgMHgyNiwgMHhhNiwgMHhmMCwKKysgICAgMHg1NiwgMHhlZiwgMHhhMywgMHhmMSwgMHg2 YiwgMHhhMSwgMHhiMSwgMHg3NworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3JldHVybmVkYml0c1tdID0geworKyAgICAw eDBiLCAweGUyLCAweDU2LCAweDAzLCAweDFlLCAweGRiLCAweDJjLCAweDZkLCAweDdmLCAweDFi LCAweDE1LCAweDU4LAorKyAgICAweDFhLCAweGY5LCAweDEzLCAweDI4CisrfTsKKysKKysvKiBB RVMtMjU2IHVzZSBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4NjEs IDB4NjgsIDB4ZmMsIDB4MWEsIDB4ZjAsIDB4YjUsIDB4OTUsIDB4NmIsIDB4ODUsIDB4MDksIDB4 OWIsIDB4NzQsCisrICAgIDB4M2YsIDB4MTMsIDB4NzgsIDB4NDksIDB4M2IsIDB4ODUsIDB4ZWMs IDB4OTMsIDB4MTMsIDB4M2IsIDB4YTksIDB4NGYsCisrICAgIDB4OTYsIDB4YWIsIDB4MmMsIDB4 ZTQsIDB4YzgsIDB4OGYsIDB4ZGQsIDB4NmEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9ub25jZVtdID0geworKyAg ICAweGFkLCAweGQyLCAweGJiLCAweGJhLCAweGI3LCAweDY1LCAweDg5LCAweGMzLCAweDIxLCAw eDZjLCAweDU1LCAweDMzLAorKyAgICAweDJiLCAweDM2LCAweGZmLCAweGE0CisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NmUsIDB4Y2EsIDB4 ZTcsIDB4MjAsIDB4NzIsIDB4ZDMsIDB4ODQsIDB4NWEsIDB4MzIsIDB4ZDMsIDB4NGIsIDB4MjQs CisrICAgIDB4NzIsIDB4YzQsIDB4NjMsIDB4MmIsIDB4OWQsIDB4MTIsIDB4MjQsIDB4MGMsIDB4 MjMsIDB4MjYsIDB4OGUsIDB4ODMsCisrICAgIDB4MTYsIDB4MzcsIDB4MGIsIDB4ZDEsIDB4MDYs IDB4NGYsIDB4NjgsIDB4NmQKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9 IHsKKysgICAgMHg3ZSwgMHgwOCwgMHg0YSwgMHhiYiwgMHhlMywgMHgyMSwgMHg3YywgMHhjOSwg MHgyMywgMHhkMiwgMHhmOCwgMHhiMCwKKysgICAgMHg3MywgMHg5OCwgMHhiYSwgMHg4NCwgMHg3 NCwgMHgyMywgMHhhYiwgMHgwNiwgMHg4YSwgMHhlMiwgMHgyMiwgMHhkMywKKysgICAgMHg3Yiwg MHhjZSwgMHg5YiwgMHhkMiwgMHg0YSwgMHg3NiwgMHhiOCwgMHhkZQorK307CisrCisrX19maXBz X2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2Rm X3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4MGIsIDB4MjMsIDB4YWYsIDB4ZGYsIDB4 ZjEsIDB4NjIsIDB4ZDcsIDB4ZDMsIDB4NDMsIDB4OTcsIDB4ZjgsIDB4NzcsCisrICAgIDB4MDQs IDB4YTgsIDB4NDIsIDB4MjAsIDB4YmQsIDB4ZjYsIDB4MGYsIDB4YzEsIDB4MTcsIDB4MmYsIDB4 OWYsIDB4NTQsCisrICAgIDB4YmIsIDB4NTYsIDB4MTcsIDB4ODYsIDB4NjgsIDB4MGUsIDB4YmEs IDB4YTkKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4 MzEsIDB4OGUsIDB4YWQsIDB4YWYsIDB4NDAsIDB4ZWIsIDB4NmIsIDB4NzQsIDB4MzEsIDB4NDYs IDB4ODAsIDB4YzcsCisrICAgIDB4MTcsIDB4YWIsIDB4M2MsIDB4N2EKKyt9OworKworK19fZmlw c19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9k Zl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4OTQsIDB4NmIsIDB4YzksIDB4OWYs IDB4YWIsIDB4OGQsIDB4YzUsIDB4ZWMsIDB4NzEsIDB4ODgsIDB4MWQsIDB4MDAsCisrICAgIDB4 OGMsIDB4ODksIDB4NjgsIDB4ZTQsIDB4YzgsIDB4MDcsIDB4NzcsIDB4MzYsIDB4MTcsIDB4NmQs IDB4NzksIDB4NzgsCisrICAgIDB4YzcsIDB4MDYsIDB4NGUsIDB4OTksIDB4MDQsIDB4MjgsIDB4 MjksIDB4YzMKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAg MHhiZiwgMHg2YywgMHg1OSwgMHgyYSwgMHgwZCwgMHg0NCwgMHgwZiwgMHhhZSwgMHg5YSwgMHg1 ZSwgMHgwMywgMHg3MywKKysgICAgMHhkOCwgMHhhNiwgMHhlMSwgMHhjZiwgMHgyNSwgMHg2MSwg MHgzOCwgMHgyNCwgMHg4NiwgMHg5ZSwgMHg1MywgMHhlOCwKKysgICAgMHhhNCwgMHhkZiwgMHg1 NiwgMHhmNCwgMHgwNiwgMHgwNywgMHg5YywgMHgwZgorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX3JldHVybmVkYml0 c1tdID0geworKyAgICAweDIyLCAweDRhLCAweGI0LCAweGI4LCAweGI2LCAweGVlLCAweDdkLCAw eGIxLCAweDllLCAweGM5LCAweGY5LCAweGEwLAorKyAgICAweGQ5LCAweGUyLCAweDk3LCAweDAw CisrfTsKKysKKysvKiBBRVMtMjU2IHVzZSBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0W10g PSB7CisrICAgIDB4YTUsIDB4M2UsIDB4MzcsIDB4MTAsIDB4MTcsIDB4NDMsIDB4OTEsIDB4OTMs IDB4NTksIDB4MWUsIDB4NDcsIDB4NTAsCisrICAgIDB4ODcsIDB4YWEsIDB4ZGQsIDB4ZDUsIDB4 YzEsIDB4YzMsIDB4ODYsIDB4Y2QsIDB4Y2EsIDB4MGQsIDB4ZGIsIDB4NjgsCisrICAgIDB4ZTAs IDB4MDIsIDB4ZDgsIDB4MGYsIDB4ZGMsIDB4NDAsIDB4MWEsIDB4NDcKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9ub25j ZVtdID0geworKyAgICAweGE5LCAweDRkLCAweGE1LCAweDVhLCAweGZkLCAweGM1LCAweDBjLCAw eGU1LCAweDFjLCAweDlhLCAweDNiLCAweDhhLAorKyAgICAweDRjLCAweDQ0LCAweDg0LCAweDQw CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4OGIs IDB4NTIsIDB4YTIsIDB4NGEsIDB4OTMsIDB4YzMsIDB4NGUsIDB4YTcsIDB4MWUsIDB4MWMsIDB4 YTcsIDB4MDUsCisrICAgIDB4ZWIsIDB4ODIsIDB4OWIsIDB4YTYsIDB4NWQsIDB4ZTQsIDB4ZDQs IDB4ZTAsIDB4N2YsIDB4YTMsIDB4ZDgsIDB4NmIsCisrICAgIDB4MzcsIDB4ODQsIDB4NWYsIDB4 ZjEsIDB4YzcsIDB4ZDUsIDB4ZjYsIDB4ZDIKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9 IHsKKysgICAgMHgyMCwgMHhmNCwgMHgyMiwgMHhlZCwgMHhmOCwgMHg1YywgMHhhMSwgMHg2YSwg MHgwMSwgMHhjZiwgMHhiZSwgMHg1ZiwKKysgICAgMHg4ZCwgMHg2YywgMHg5NCwgMHg3ZiwgMHhh ZSwgMHgxMiwgMHhhOCwgMHg1NywgMHhkYiwgMHgyYSwgMHhhOSwgMHhiZiwKKysgICAgMHhjNywg MHhiMywgMHg2NSwgMHg4MSwgMHg4MCwgMHg4ZCwgMHgwZCwgMHg0NgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2ludF9y ZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg0ZSwgMHg0NCwgMHhmZCwgMHhmMywgMHg5ZSwgMHgy OSwgMHhhMiwgMHhiOCwgMHgwZiwgMHg1ZCwgMHg2YywgMHhlMSwKKysgICAgMHgyOCwgMHgwYywg MHgzYiwgMHhjMQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAg ICAweGRkLCAweDQwLCAweGU1LCAweDk4LCAweDdiLCAweDI3LCAweDE2LCAweDczLCAweDE1LCAw eDY4LCAweGQyLCAweDc2LAorKyAgICAweGJmLCAweDBjLCAweDY3LCAweDE1LCAweDc1LCAweDc5 LCAweDAzLCAweGQzLCAweGRlLCAweGRlLCAweDkxLCAweDQ2LAorKyAgICAweDQyLCAweGRkLCAw eGQ0LCAweDY3LCAweGM4LCAweDc5LCAweGM4LCAweDFlCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRp b25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4N2YsIDB4ZDgsIDB4MWYsIDB4YmQsIDB4MmEs IDB4YjUsIDB4MWMsIDB4MTEsIDB4NWQsIDB4ODMsIDB4NGUsIDB4OTksCisrICAgIDB4ZjYsIDB4 NWMsIDB4YTUsIDB4NDAsIDB4MjAsIDB4ZWQsIDB4MzgsIDB4OGUsIDB4ZDUsIDB4OWUsIDB4ZTAs IDB4NzUsCisrICAgIDB4OTMsIDB4ZmUsIDB4MTIsIDB4NWUsIDB4NWQsIDB4NzMsIDB4ZmIsIDB4 NzUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4Y2QsIDB4MmMsIDB4 ZmYsIDB4MTQsIDB4NjksIDB4M2UsIDB4NGMsIDB4OWUsIDB4ZmQsIDB4ZmUsIDB4MjYsIDB4MGQs CisrICAgIDB4ZTksIDB4ODYsIDB4MDAsIDB4NDksIDB4MzAsIDB4YmEsIDB4YjEsIDB4YzYsIDB4 NTAsIDB4NTcsIDB4NzcsIDB4MmEsCisrICAgIDB4NjIsIDB4MzksIDB4MmMsIDB4M2IsIDB4NzQs IDB4ZWIsIDB4YzksIDB4MGQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg0 ZiwgMHg3OCwgMHhiZSwgMHhiOSwgMHg0ZCwgMHg5NywgMHg4YywgMHhlOSwgMHhkMCwgMHg5Nywg MHhmZSwgMHhhZCwKKysgICAgMHhmYSwgMHhmZCwgMHgzNSwgMHg1ZQorK307CisrCisrLyogQUVT LTEyOCBubyBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg5YSwgMHgy NSwgMHg2NSwgMHgxMCwgMHg2NywgMHhkNSwgMHhiNiwgMHg2YiwgMHg3MCwgMHhhMSwgMHhiMywg MHhhNCwKKysgICAgMHg0MywgMHg5NSwgMHg4MCwgMHhjMCwgMHg4NCwgMHgwYSwgMHg3OSwgMHhi MCwgMHg4OCwgMHg3NCwgMHhmMiwgMHhiZiwKKysgICAgMHgzMSwgMHg2YywgMHgzMywgMHgzOCwg MHgwYiwgMHgwMCwgMHhiMiwgMHg1YQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfbm9uY2VbXSA9IHsKKysgICAgMHg3 OCwgMHg0NywgMHg2YiwgMHhmNywgMHg5MCwgMHg4ZSwgMHg4NywgMHhmMQorK307CisrCisrX19m aXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9f ZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4ZjcsIDB4MjIsIDB4MWQs IDB4M2EsIDB4YmUsIDB4MWQsIDB4Y2EsIDB4MzIsIDB4MWIsIDB4YmQsIDB4ODcsIDB4MGMsCisr ICAgIDB4NTEsIDB4MjQsIDB4MTksIDB4ZWUsIDB4YTMsIDB4MjMsIDB4MDksIDB4NjMsIDB4MzMs IDB4M2QsIDB4YTgsIDB4MGMsCisrICAgIDB4MWMsIDB4ZmEsIDB4NDIsIDB4ODksIDB4Y2MsIDB4 NmYsIDB4YTAsIDB4YTgKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewor KyAgICAweGM5LCAweGUwLCAweDgwLCAweGJmLCAweDhjLCAweDQ1LCAweDU4LCAweDM5LCAweGZm LCAweDAwLCAweGFiLCAweDAyLAorKyAgICAweDRjLCAweDNlLCAweDNhLCAweDk1LCAweDliLCAw eDgwLCAweGE4LCAweDIxLCAweDJhLCAweGVlLCAweGJhLCAweDczLAorKyAgICAweGIxLCAweGQ5 LCAweGNmLCAweDI4LCAweGY2LCAweDhmLCAweDliLCAweDEyCisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5 aW5wdXRwcltdID0geworKyAgICAweDRjLCAweGE4LCAweGM1LCAweGYwLCAweDU5LCAweDllLCAw eGE2LCAweDhkLCAweDI2LCAweDUzLCAweGQ3LCAweDhhLAorKyAgICAweGE5LCAweGQ4LCAweGY3 LCAweGVkLCAweGIyLCAweGY5LCAweDEyLCAweDQyLCAweGUxLCAweGU1LCAweGJkLCAweGU3LAor KyAgICAweGU3LCAweDFkLCAweDc0LCAweDk5LCAweDAwLCAweDlkLCAweDMxLCAweDNlCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTIsIDB4YWMsIDB4 MjAsIDB4ZjAsIDB4ODAsIDB4ZTcsIDB4YmMsIDB4N2UsIDB4OWMsIDB4N2IsIDB4NjUsIDB4NzEs CisrICAgIDB4YWYsIDB4MTksIDB4MzIsIDB4MTYKKyt9OworKworK19fZmlwc19jb25zdHNlZwor KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9IHsKKysgICAgMHgzMiwgMHg3ZiwgMHgzOCwgMHg4YiwgMHg3MywgMHgwYSwg MHg3OCwgMHg4MywgMHhkYywgMHgzMCwgMHhiZSwgMHg5ZiwKKysgICAgMHgxMCwgMHgxZiwgMHhm NSwgMHgxZiwgMHhjYSwgMHgwMCwgMHhiNSwgMHgwZCwgMHhkNiwgMHg5ZCwgMHg2MCwgMHg4MywK KysgICAgMHg1MSwgMHg1NCwgMHg3ZCwgMHgzOCwgMHgyMywgMHgzYSwgMHg1MiwgMHg1MAorK307 CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4MTgsIDB4NjEsIDB4 NTMsIDB4NTYsIDB4ZWQsIDB4ZWQsIDB4ZDcsIDB4MjAsIDB4ZmIsIDB4NzEsIDB4MDQsIDB4N2Es CisrICAgIDB4YjIsIDB4YWMsIDB4YzEsIDB4MjgsIDB4Y2QsIDB4ZjIsIDB4YzIsIDB4ZmMsIDB4 YWEsIDB4YjEsIDB4MDYsIDB4MDcsCisrICAgIDB4ZTksIDB4NDYsIDB4OTUsIDB4MDIsIDB4NDgs IDB4MDEsIDB4NzgsIDB4ZjkKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3JldHVybmVkYml0c1tdID0geworKyAgICAw eDI5LCAweGM4LCAweDFiLCAweDE1LCAweGIxLCAweGQxLCAweGMyLCAweGY2LCAweDcxLCAweDg2 LCAweDY4LCAweDMzLAorKyAgICAweDU3LCAweDgyLCAweDMzLCAweGFmCisrfTsKKysKKysvKiBB RVMtMTI4IG5vIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGM5LCAw eGM1LCAweDc5LCAweGJjLCAweGU4LCAweGM1LCAweDE5LCAweGQ4LCAweGJjLCAweDY2LCAweDcz LCAweDY3LAorKyAgICAweGY2LCAweGQzLCAweDcyLCAweGFhLCAweGE2LCAweDE2LCAweGI4LCAw eDUwLCAweGI3LCAweDQ3LCAweDNhLCAweDQyLAorKyAgICAweGFiLCAweGY0LCAweDE2LCAweGIy LCAweDk2LCAweGQyLCAweGI2LCAweDYwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9ub25jZVtdID0geworKyAgICAweDVm LCAweGJmLCAweDk3LCAweDBjLCAweDRiLCAweGE0LCAweDg3LCAweDEzCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19k Zl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhjZSwgMHhmYiwgMHg3YiwgMHgz ZiwgMHhkNCwgMHg2YiwgMHgyOSwgMHgwZCwgMHg2OSwgMHgwNiwgMHhmZiwgMHhiYiwKKysgICAg MHhmMiwgMHhlNSwgMHhjNiwgMHg2YywgMHgwYSwgMHgxMCwgMHhhMCwgMHhjZiwgMHgxYSwgMHg0 OCwgMHhjNywgMHg4YiwKKysgICAgMHgzYywgMHgxNiwgMHg4OCwgMHhlZCwgMHg1MCwgMHgxMywg MHg4MSwgMHhjZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4NGIsIDB4 MjIsIDB4NDYsIDB4MTgsIDB4MDIsIDB4N2IsIDB4ZDIsIDB4MWIsIDB4MjIsIDB4NDIsIDB4N2Ms IDB4MzcsCisrICAgIDB4ZDksIDB4ZjYsIDB4ZTgsIDB4OWIsIDB4MTIsIDB4MzAsIDB4NWYsIDB4 ZTksIDB4OTAsIDB4ZTgsIDB4MDgsIDB4MjQsCisrICAgIDB4NGYsIDB4MDYsIDB4NjYsIDB4ZGIs IDB4MTksIDB4MmIsIDB4MTMsIDB4OTUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsK KysgICAgMHgyZSwgMHg5NiwgMHg3MCwgMHg2NCwgMHhmYSwgMHhkZiwgMHhkZiwgMHg1NywgMHhi NSwgMHg4MiwgMHhlZSwgMHhkNiwKKysgICAgMHhlZCwgMHgzZSwgMHg2NSwgMHhjMgorK307Cisr CisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x Mjhfbm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4MjYsIDB4YzAsIDB4NzIs IDB4MTYsIDB4M2EsIDB4NGIsIDB4YjcsIDB4OTksIDB4ZDQsIDB4MDcsIDB4YWYsIDB4NjYsCisr ICAgIDB4NjIsIDB4MzYsIDB4OTYsIDB4YTQsIDB4NTEsIDB4MTcsIDB4ZmEsIDB4MDcsIDB4OGIs IDB4MTcsIDB4NWUsIDB4YTEsCisrICAgIDB4MmYsIDB4M2MsIDB4MTAsIDB4ZTcsIDB4OTAsIDB4 ZDAsIDB4NDYsIDB4MDAKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0g eworKyAgICAweDgzLCAweDM5LCAweDM3LCAweDdiLCAweDAyLCAweDA2LCAweGQyLCAweDEyLCAw eDEzLCAweDhkLCAweDhiLCAweGYyLAorKyAgICAweGYwLCAweGY2LCAweDI2LCAweGViLCAweGE0 LCAweDIyLCAweDdiLCAweGMyLCAweGU3LCAweGJhLCAweDc5LCAweGU0LAorKyAgICAweDNiLCAw eDc3LCAweDVkLCAweDRkLCAweDQ3LCAweGIyLCAweDJkLCAweGI0CisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlv bmFsaW5wdXQyW10gPSB7CisrICAgIDB4MGIsIDB4YjksIDB4NjcsIDB4MzcsIDB4ZGIsIDB4ODMs IDB4ZGYsIDB4Y2EsIDB4ODEsIDB4OGIsIDB4ZjksIDB4M2YsCisrICAgIDB4ZjEsIDB4MTEsIDB4 MWIsIDB4MmYsIDB4ZjAsIDB4NjEsIDB4YTYsIDB4ZGYsIDB4YmEsIDB4YTMsIDB4YjEsIDB4YWMs CisrICAgIDB4ZDMsIDB4ZTYsIDB4MDksIDB4YjgsIDB4MmMsIDB4NmEsIDB4NjcsIDB4ZDYKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX3JldHVybmVkYml0c1tdID0geworKyAgICAweDFlLCAweGE3LCAweGE0LCAweGU0LCAw eGUxLCAweGE2LCAweDdjLCAweDY5LCAweDlhLCAweDQ0LCAweDZjLCAweDM2LAorKyAgICAweDgx LCAweDM3LCAweDE5LCAweGQ0CisrfTsKKysKKysvKiBBRVMtMTkyIG5vIGRmIFBSICAqLworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3By X2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDlkLCAweDJjLCAweGQyLCAweDU1LCAweDY2LCAw eGVhLCAweGUwLCAweGJlLCAweDE4LCAweGI3LCAweDc2LCAweGU3LAorKyAgICAweDczLCAweDM1 LCAweGQ4LCAweDFmLCAweGFkLCAweDNhLCAweGUzLCAweDgxLCAweDBlLCAweDkyLCAweGQwLCAw eDYxLAorKyAgICAweGM5LCAweDEyLCAweDI2LCAweGY2LCAweDFjLCAweGRmLCAweGZlLCAweDQ3 LCAweGFhLCAweGZlLCAweDdkLCAweDVhLAorKyAgICAweDE3LCAweDFmLCAweDhkLCAweDlhCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9ub19kZl9wcl9ub25jZVtdID0geworKyAgICAweDQ0LCAweDgyLCAweGVkLCAweGU4LCAweDRj LCAweDI4LCAweDVhLCAweDE0LCAweGZmLCAweDg4LCAweDhkLCAweDE5LAorKyAgICAweDYxLCAw eDVjLCAweGVlLCAweDBmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9IHsKKysgICAgMHg0NywgMHhkNywgMHg5YiwgMHg5OSwgMHhhYSwgMHhjYiwgMHhlNywgMHhk MiwgMHg1NywgMHg2NiwgMHgyYywgMHhlMSwKKysgICAgMHg3OCwgMHhkNiwgMHgyYywgMHhlYSwg MHhhMywgMHgyMywgMHg1ZiwgMHgyYSwgMHhjMSwgMHgzYSwgMHhmMCwgMHhhNCwKKysgICAgMHgy MCwgMHgzYiwgMHhmYSwgMHgwNywgMHhkNSwgMHgwNSwgMHgwMiwgMHhlNCwgMHg1NywgMHgwMSwg MHhiNiwgMHgxMCwKKysgICAgMHg1NywgMHgyZSwgMHhlNywgMHg1NQorK307CisrCisrX19maXBz X2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf cHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4NGIsIDB4NzQsIDB4MGIsIDB4NDAsIDB4 Y2UsIDB4NmIsIDB4YzIsIDB4NmEsIDB4MjQsIDB4YjQsIDB4ZjMsIDB4YWQsCisrICAgIDB4N2Es IDB4YTUsIDB4N2EsIDB4YTIsIDB4MTUsIDB4ZTIsIDB4YzgsIDB4NjEsIDB4MTUsIDB4YzYsIDB4 YjcsIDB4ODUsCisrICAgIDB4NjksIDB4MTEsIDB4YWQsIDB4N2IsIDB4MTQsIDB4ZDIsIDB4ZjYs IDB4MTIsIDB4YTEsIDB4OTUsIDB4NWQsIDB4M2YsCisrICAgIDB4ZTIsIDB4ZDAsIDB4MGMsIDB4 MmYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4MGMsIDB4OWMsIDB4 YWQsIDB4MDUsIDB4ZWUsIDB4YWUsIDB4NDgsIDB4MjMsIDB4ODksIDB4NTksIDB4YTEsIDB4OTQs CisrICAgIDB4ZDcsIDB4ZDgsIDB4NzUsIDB4ZDUsIDB4NTQsIDB4OTMsIDB4YzcsIDB4NGEsIDB4 ZDksIDB4MjYsIDB4ZGUsIDB4ZWIsCisrICAgIDB4YmEsIDB4YjAsIDB4N2UsIDB4MzAsIDB4MWQs IDB4NWYsIDB4NjksIDB4NDAsIDB4OWMsIDB4M2IsIDB4MTcsIDB4NTgsCisrICAgIDB4MWQsIDB4 MzAsIDB4YjMsIDB4NzgKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsK KysgICAgMHhmNywgMHg5MywgMHhiMCwgMHg2ZCwgMHg3NywgMHg4MywgMHhkNSwgMHgzOCwgMHgw MSwgMHhlMSwgMHg1MiwgMHg0MCwKKysgICAgMHg3ZSwgMHgzZSwgMHgwYywgMHgyNgorK307Cisr CisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweGJjLCAweDRiLCAweDM3 LCAweDQ0LCAweDFjLCAweGM1LCAweDQ1LCAweDVmLCAweDhmLCAweDUxLCAweDYyLCAweDhhLAor KyAgICAweDg1LCAweDMwLCAweDFkLCAweDdjLCAweGU0LCAweGNmLCAweGY3LCAweDQ0LCAweGNl LCAweDMyLCAweDNlLCAweDU3LAorKyAgICAweDk1LCAweGE0LCAweDJhLCAweGRmLCAweGZkLCAw eDllLCAweDM4LCAweDQxLCAweGIzLCAweGY2LCAweGM1LCAweGVlLAorKyAgICAweDBjLCAweDRi LCAweGVlLCAweDZlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysg ICAgMHhlYywgMHhhZiwgMHhmNiwgMHg0ZiwgMHhiMSwgMHhhMCwgMHg1NCwgMHhiNSwgMHg1Yiwg MHhlMywgMHg0NiwgMHhiMCwKKysgICAgMHg3NiwgMHg1YSwgMHg3YywgMHgzZiwgMHg3YiwgMHg5 NCwgMHg2OSwgMHgyMSwgMHg1MSwgMHgwMiwgMHhlNSwgMHg5ZiwKKysgICAgMHgwNCwgMHg1OSwg MHgwMiwgMHg5OCwgMHhjNiwgMHg0MywgMHgyYywgMHhjYywgMHgyNiwgMHg0YywgMHg4NywgMHg2 YiwKKysgICAgMHg4ZSwgMHgwYSwgMHg4MywgMHhkZgorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcmV0dXJuZWRiaXRz W10gPSB7CisrICAgIDB4NzQsIDB4NDUsIDB4ZmIsIDB4NTMsIDB4ODQsIDB4OTYsIDB4YmUsIDB4 ZmYsIDB4MTUsIDB4Y2MsIDB4NDEsIDB4OTEsCisrICAgIDB4YjksIDB4YTEsIDB4MjEsIDB4NjgK Kyt9OworKworKy8qIEFFUy0xOTIgbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0W10gPSB7 CisrICAgIDB4M2MsIDB4N2QsIDB4YjUsIDB4ZTAsIDB4NTQsIDB4ZDksIDB4NmUsIDB4OGMsIDB4 YTksIDB4ODYsIDB4Y2UsIDB4NGUsCisrICAgIDB4NmIsIDB4YWYsIDB4ZWIsIDB4MmYsIDB4ZTcs IDB4NzUsIDB4ZTAsIDB4OGIsIDB4YTQsIDB4M2IsIDB4MDcsIDB4ZmUsCisrICAgIDB4YmUsIDB4 MzMsIDB4NzUsIDB4OTMsIDB4ODAsIDB4MjcsIDB4YjUsIDB4MjksIDB4NDcsIDB4OGIsIDB4Yzcs IDB4MjgsCisrICAgIDB4OTQsIDB4YzMsIDB4NTksIDB4NjMKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX25vbmNlW10gPSB7 CisrICAgIDB4NDMsIDB4ZjEsIDB4N2QsIDB4YjgsIDB4YzMsIDB4ZmUsIDB4ZDAsIDB4MjMsIDB4 NmIsIDB4YjQsIDB4OTIsIDB4ZGIsCisrICAgIDB4MjksIDB4ZmQsIDB4NDUsIDB4NzEKKyt9Owor KworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDlmLCAweDI0LCAw eDI5LCAweDk5LCAweDllLCAweDAxLCAweGFiLCAweGU5LCAweDE5LCAweGQ4LCAweDIzLCAweDA4 LAorKyAgICAweGI3LCAweGQ2LCAweDdlLCAweDhjLCAweGMwLCAweDllLCAweDdmLCAweDZlLCAw eDViLCAweDMzLCAweDIwLCAweDk2LAorKyAgICAweDBiLCAweDIzLCAweDJjLCAweGE1LCAweDZh LCAweGY4LCAweDFiLCAweDA0LCAweDI2LCAweGRiLCAweDJlLCAweDJiLAorKyAgICAweDNiLCAw eDg4LCAweGNlLCAweDM1CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg5 NCwgMHhlOSwgMHg3YywgMHgzZCwgMHhhNywgMHhkYiwgMHg2MCwgMHg4MywgMHgxZiwgMHg5OCwg MHgzZiwgMHgwYiwKKysgICAgMHg4OCwgMHg1OSwgMHg1NywgMHg1MSwgMHg4OCwgMHg5ZiwgMHg3 NiwgMHg0OSwgMHg5ZiwgMHhhNiwgMHhkYSwgMHg3MSwKKysgICAgMHgxZCwgMHgwZCwgMHg0Nywg MHgxNiwgMHg2MywgMHhjNSwgMHg2OCwgMHhlNCwgMHg1ZCwgMHgzOSwgMHg2OSwgMHhiMywKKysg ICAgMHgzZSwgMHhiZSwgMHhkNCwgMHg4ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0g eworKyAgICAweGY5LCAweGQ3LCAweGFkLCAweDY5LCAweGFiLCAweDhmLCAweDIzLCAweDU2LCAw eDcwLCAweDE3LCAweDRmLCAweDJhLAorKyAgICAweDQ1LCAweGU3LCAweDRhLCAweGM1CisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhhNiwgMHg3MSwgMHg2 YSwgMHgzZCwgMHhiYSwgMHhkMSwgMHhlOCwgMHg2NiwgMHhhNiwgMHhlZiwgMHhiMiwgMHgwZSwK KysgICAgMHhhOCwgMHg5YywgMHhhYSwgMHg0ZSwgMHhhZiwgMHgxNywgMHg4OSwgMHg1MCwgMHgw MCwgMHhkYSwgMHhhMSwgMHhiMSwKKysgICAgMHgwYiwgMHhhNCwgMHhkOSwgMHgzNSwgMHg4OSwg MHhjOCwgMHhlNSwgMHhiMCwgMHhkOSwgMHhiNywgMHhjNCwgMHgzMywKKysgICAgMHg5YiwgMHhj YiwgMHg3ZSwgMHg3NQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7 CisrICAgIDB4MjcsIDB4MjEsIDB4ZmMsIDB4YzIsIDB4YmQsIDB4ZjMsIDB4M2MsIDB4Y2UsIDB4 YzMsIDB4Y2EsIDB4YzEsIDB4MDEsCisrICAgIDB4ZTAsIDB4ZmYsIDB4OTMsIDB4MTIsIDB4N2Qs IDB4NTQsIDB4NDIsIDB4ZTMsIDB4OWYsIDB4MDMsIDB4ZGYsIDB4MjcsCisrICAgIDB4MDQsIDB4 MDcsIDB4M2MsIDB4NTMsIDB4N2YsIDB4YTgsIDB4NjYsIDB4YzgsIDB4OTcsIDB4NGIsIDB4NjEs IDB4NDAsCisrICAgIDB4NWQsIDB4N2EsIDB4MjUsIDB4NzkKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxp bnB1dDJbXSA9IHsKKysgICAgMHgyZCwgMHg4ZSwgMHgxNiwgMHg1ZCwgMHgwYiwgMHg5ZiwgMHhl YiwgMHhhYSwgMHhkNiwgMHhlYywgMHgyOCwgMHg3MSwKKysgICAgMHg3YywgMHgwYiwgMHhjMSwg MHgxZCwgMHhkNCwgMHg0NCwgMHgxOSwgMHg0NywgMHhmZCwgMHgxZCwgMHg3YywgMHhlNSwKKysg ICAgMHhmMywgMHgyNywgMHhlMSwgMHhiNiwgMHg3MiwgMHgwYSwgMHhlMCwgMHhlYywgMHgwZSwg MHhjZCwgMHhlZiwgMHgxYSwKKysgICAgMHg5MSwgMHg2YSwgMHhlMywgMHg1ZgorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf cmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTUsIDB4ZGEsIDB4YjgsIDB4ZTAsIDB4NjMsIDB4 NTksIDB4NWEsIDB4Y2MsIDB4M2QsIDB4ZGMsIDB4OWYsIDB4ZTgsCisrICAgIDB4NjYsIDB4Njcs IDB4MmMsIDB4OTIKKyt9OworKworKy8qIEFFUy0yNTYgbm8gZGYgUFIgICovCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9w eWlucHV0W10gPSB7CisrICAgIDB4MTUsIDB4YzcsIDB4NWQsIDB4Y2IsIDB4NDEsIDB4NGIsIDB4 MTYsIDB4MDEsIDB4M2EsIDB4ZDEsIDB4NDQsIDB4ZTgsCisrICAgIDB4MjIsIDB4MzIsIDB4YzYs IDB4OWMsIDB4M2YsIDB4ZTcsIDB4NDMsIDB4ZjUsIDB4OWEsIDB4ZDMsIDB4ZWEsIDB4ZjIsCisr ICAgIDB4ZDcsIDB4NGUsIDB4NmUsIDB4NmEsIDB4NTUsIDB4NzMsIDB4NDAsIDB4ZWYsIDB4ODks IDB4YWQsIDB4MGQsIDB4MDMsCisrICAgIDB4OTYsIDB4N2UsIDB4NzgsIDB4ODEsIDB4MmYsIDB4 OTEsIDB4MWIsIDB4NDQsIDB4YjAsIDB4MDIsIDB4YmEsIDB4MWMKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX25vbmNl W10gPSB7CisrICAgIDB4ZGMsIDB4ZTQsIDB4ZDQsIDB4MjcsIDB4N2EsIDB4OTAsIDB4ZDcsIDB4 OTksIDB4NDMsIDB4YTEsIDB4M2MsIDB4MzAsCisrICAgIDB4Y2MsIDB4NGIsIDB4ZWUsIDB4MmUK Kyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMjU2X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGUz LCAweGU2LCAweGI5LCAweDExLCAweGU0LCAweDdhLCAweGE0LCAweDQwLCAweDZiLCAweGY4LCAw eDczLCAweGY3LAorKyAgICAweDdlLCAweGVjLCAweGM3LCAweGI5LCAweDk3LCAweGJmLCAweGY4 LCAweDI1LCAweDdiLCAweGJlLCAweDExLCAweDliLAorKyAgICAweDViLCAweDZhLCAweDBjLCAw eDJlLCAweDJiLCAweDAxLCAweDUxLCAweGNkLCAweDQxLCAweDRiLCAweDZiLCAweGFjLAorKyAg ICAweDMxLCAweGE4LCAweDBiLCAweGY3LCAweGU2LCAweDU5LCAweDQyLCAweGI4LCAweDAzLCAw eDBjLCAweGY4LCAweDA2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsK KysgICAgMHg2YSwgMHg5ZiwgMHgwMCwgMHg5MSwgMHhhZSwgMHhmZSwgMHhjZiwgMHg4NCwgMHg5 OSwgMHhjZSwgMHhiMSwgMHg0MCwKKysgICAgMHg2ZCwgMHg1ZCwgMHgzMywgMHgyOCwgMHg4NCwg MHhmNCwgMHg4YywgMHg2MywgMHg0YywgMHg3ZSwgMHhiZCwgMHgyYywKKysgICAgMHg4MCwgMHg3 NiwgMHhlZSwgMHg1YSwgMHhhYSwgMHgxNSwgMHgwNywgMHgzMSwgMHhkOCwgMHhiYiwgMHg4Yywg MHg2OSwKKysgICAgMHg5ZCwgMHg5ZCwgMHhiYywgMHg3ZSwgMHg0OSwgMHhhZSwgMHhlYywgMHgz OSwgMHg2YiwgMHhkMSwgMHgxZiwgMHg3ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9 IHsKKysgICAgMHhmMywgMHhiOSwgMHg3NSwgMHg5YywgMHhiZCwgMHg4OCwgMHhlYSwgMHhhMiwg MHg1MCwgMHhhZCwgMHhkNiwgMHgxNiwKKysgICAgMHgxYSwgMHgxMiwgMHgzYywgMHg4NiwgMHg2 OCwgMHhhZiwgMHg2ZiwgMHhiZSwgMHgxOSwgMHhmMiwgMHhlZSwgMHhjYywKKysgICAgMHhhNSwg MHg3MCwgMHg4NCwgMHg1MywgMHg1MCwgMHhjYiwgMHg5ZiwgMHgxNCwgMHhhOSwgMHhlNSwgMHhl ZSwgMHhiOSwKKysgICAgMHg0OCwgMHg0NSwgMHg0MCwgMHhlMiwgMHhjNywgMHhjOSwgMHg5YSwg MHg3NCwgMHhmZiwgMHg4YywgMHg5OSwgMHgxZgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfaW50X3JldHVy bmVkYml0c1tdID0geworKyAgICAweDJlLCAweGYyLCAweDQ1LCAweDRjLCAweDYyLCAweDJlLCAw eDBhLCAweGI5LCAweDZiLCAweGEyLCAweGZkLCAweDU2LAorKyAgICAweDc5LCAweDYwLCAweDkz LCAweGNmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4 YWYsIDB4NjksIDB4MjAsIDB4ZTksIDB4M2IsIDB4MzcsIDB4OWQsIDB4M2YsIDB4YjQsIDB4ODAs IDB4MDIsIDB4N2EsCisrICAgIDB4MjUsIDB4N2QsIDB4YjgsIDB4ZGUsIDB4NzEsIDB4YzUsIDB4 MDYsIDB4MGMsIDB4YjQsIDB4ZTIsIDB4OGYsIDB4MzUsCisrICAgIDB4ZDgsIDB4MTQsIDB4MGQs IDB4N2YsIDB4NzYsIDB4NjMsIDB4NGUsIDB4YjUsIDB4ZWUsIDB4ZTksIDB4NmYsIDB4MzQsCisr ICAgIDB4YzcsIDB4NWYsIDB4NTYsIDB4MTQsIDB4NGEsIDB4ZTgsIDB4NzMsIDB4OTUsIDB4NWIs IDB4MWMsIDB4YjksIDB4Y2IKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0g eworKyAgICAweGU1LCAweGIwLCAweDJlLCAweDdlLCAweDUyLCAweDMwLCAweGUzLCAweDYzLCAw eDgyLCAweGI2LCAweDQ0LCAweGQzLAorKyAgICAweDI1LCAweDE5LCAweDA1LCAweDI0LCAweDlh LCAweDlmLCAweDVmLCAweDI3LCAweDZhLCAweDI5LCAweGFiLCAweGZhLAorKyAgICAweDA3LCAw eGEyLCAweDQyLCAweDBmLCAweGM1LCAweGE4LCAweDk0LCAweDdjLCAweDE3LCAweDdiLCAweDg1 LCAweDgzLAorKyAgICAweDBjLCAweDI1LCAweDBlLCAweDYzLCAweDBiLCAweGU5LCAweDEyLCAw eDYwLCAweGNkLCAweGVmLCAweDgwLCAweDBmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9 IHsKKysgICAgMHg1ZSwgMHhmMiwgMHgyNiwgMHhlZiwgMHg5ZiwgMHg1OCwgMHg1ZCwgMHhkNSwg MHg0YSwgMHgxMCwgMHhmZSwgMHhhNywKKysgICAgMHgyZCwgMHg1ZiwgMHg0YSwgMHg0NgorK307 CisrCisrLyogQUVTLTI1NiBubyBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRbXSA9IHsKKysg ICAgMHhmYiwgMHhjZiwgMHgxYiwgMHg2MSwgMHgxNiwgMHg4OSwgMHg3OCwgMHgyMywgMHhmNSwg MHhkOCwgMHg5NiwgMHhlMywKKysgICAgMHg0ZSwgMHg2NCwgMHgwYiwgMHgyOSwgMHg5YSwgMHgz ZiwgMHhmOCwgMHhhNSwgMHhlZCwgMHhmMiwgMHhmZSwgMHhkYiwKKysgICAgMHgxNiwgMHhjYSwg MHg3ZiwgMHgxMCwgMHhmYSwgMHg1ZSwgMHgxOCwgMHg3NiwgMHgyYywgMHg2MywgMHg1ZSwgMHg5 NiwKKysgICAgMHhjZiwgMHhiMywgMHhkNiwgMHhmYywgMHhhZiwgMHg5OSwgMHgzOSwgMHgyOCwg MHg5YywgMHg2MSwgMHhlOCwgMHhiMworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfbm9uY2VbXSA9IHsKKysgICAgMHgxMiwg MHg5NiwgMHhmMCwgMHg1MiwgMHhmMywgMHg4ZCwgMHg4MSwgMHhjZiwgMHhkZSwgMHg4NiwgMHhm MiwgMHg5OSwKKysgICAgMHg0MywgMHg5NiwgMHhiOSwgMHhmMAorK307CisrCisrX19maXBzX2Nv bnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NjMsIDB4MGQsIDB4NzgsIDB4ZjUsIDB4 OTAsIDB4OGUsIDB4MzIsIDB4NDcsIDB4YjAsIDB4NGQsIDB4MzcsIDB4NjAsCisrICAgIDB4MDks IDB4OTYsIDB4YmMsIDB4YmYsIDB4OTcsIDB4N2EsIDB4NjIsIDB4MTQsIDB4NDUsIDB4YmQsIDB4 OGQsIDB4Y2MsCisrICAgIDB4NjksIDB4ZmIsIDB4MDMsIDB4ZTEsIDB4ODAsIDB4MWMsIDB4Yzcs IDB4ZTIsIDB4MmEsIDB4ZjksIDB4MzcsIDB4M2YsCisrICAgIDB4NjYsIDB4NGQsIDB4NjIsIDB4 ZDksIDB4MTAsIDB4ZTAsIDB4YWQsIDB4YzgsIDB4OWEsIDB4ZjAsIDB4YTgsIDB4NmQKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25v X2RmX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDM2LCAweGM2LCAweDEzLCAweDYwLCAw eGJiLCAweDE0LCAweGFkLCAweDIyLCAweGIwLCAweDM4LCAweGFjLCAweGE2LAorKyAgICAweDE4 LCAweDE2LCAweDkzLCAweDI1LCAweDg2LCAweGI3LCAweGRjLCAweGRjLCAweDM2LCAweDk4LCAw eDJiLCAweGY5LAorKyAgICAweDY4LCAweDMzLCAweGQzLCAweGM2LCAweGZmLCAweGNlLCAweDhk LCAweDE1LCAweDU5LCAweDgyLCAweDc2LCAweGVkLAorKyAgICAweDZmLCAweDhkLCAweDQ5LCAw eDc0LCAweDJmLCAweGRhLCAweGRjLCAweDFmLCAweDE3LCAweGQwLCAweGRlLCAweDE3CisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9u b19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4MTYsIDB4MmYsIDB4OGUsIDB4M2Ys IDB4MjEsIDB4N2EsIDB4MWMsIDB4MjAsIDB4NTYsIDB4ZDEsIDB4OTIsIDB4ZjYsCisrICAgIDB4 ZDIsIDB4MjUsIDB4NzUsIDB4MGUKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtd ID0geworKyAgICAweDkxLCAweDc5LCAweDc2LCAweGVlLCAweGUwLCAweGNmLCAweDllLCAweGMy LCAweGQ1LCAweGQ0LCAweDIzLCAweDliLAorKyAgICAweDEyLCAweDhjLCAweDdlLCAweDBhLCAw eGI3LCAweGQyLCAweDhiLCAweGQ2LCAweDdjLCAweGEzLCAweGM2LCAweGU1LAorKyAgICAweDBl LCAweGFhLCAweGM3LCAweDZiLCAweGFlLCAweDBkLCAweGZhLCAweDUzLCAweDA2LCAweDc5LCAw eGExLCAweGVkLAorKyAgICAweDRkLCAweDZhLCAweDBlLCAweGQ4LCAweDlkLCAweGJlLCAweDFi LCAweDMxLCAweDkzLCAweDdiLCAweGVjLCAweGZiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFs aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhkMiwgMHg0NiwgMHg1MCwgMHgyMiwgMHgxMCwgMHgx NCwgMHg2MywgMHhmNywgMHhlYSwgMHgwZiwgMHhiOSwgMHg3ZSwKKysgICAgMHgwZCwgMHhlMSwg MHg5NCwgMHgwNywgMHhhZiwgMHgwOSwgMHg0NCwgMHgzMSwgMHhlYSwgMHg2NCwgMHhhNCwgMHgx OCwKKysgICAgMHg1YiwgMHhmOSwgMHhkOCwgMHhjMiwgMHhmYSwgMHgwMywgMHg0NywgMHhjNSwg MHgzOSwgMHg0MywgMHhkNSwgMHgzYiwKKysgICAgMHg2MiwgMHg4NiwgMHg2NCwgMHhlYSwgMHgy YywgMHg3MywgMHg4YywgMHhhZSwgMHg5ZCwgMHg5OCwgMHg5OCwgMHgyOQorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRk aXRpb25hbGlucHV0MltdID0geworKyAgICAweDhjLCAweGFiLCAweDE4LCAweGY4LCAweGMzLCAw eGVjLCAweDE4LCAweDVjLCAweGIzLCAweDFlLCAweDlkLCAweGJlLAorKyAgICAweDNmLCAweDAz LCAweGI0LCAweDAwLCAweDk4LCAweDlkLCAweGFlLCAweGViLCAweGY0LCAweDk0LCAweGY4LCAw eDQyLAorKyAgICAweDhmLCAweGUzLCAweDM5LCAweDA3LCAweGUxLCAweGM5LCAweGFkLCAweDBi LCAweDFmLCAweGVkLCAweGMwLCAweGJhLAorKyAgICAweGY2LCAweGQxLCAweGVjLCAweDI3LCAw eDg2LCAweDdiLCAweGQ2LCAweDU1LCAweDliLCAweDYwLCAweGE1LCAweGM2CisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9y ZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhlZiwgMHhkMiwgMHhkOCwgMHg1YywgMHhkYywgMHg2 MiwgMHgyNSwgMHg5ZiwgMHhhYSwgMHgxZSwgMHgyYywgMHg2NywKKysgICAgMHhmNiwgMHgwMiwg MHgzMiwgMHhlMgorK307CisrCisrLyogU0hBLTEgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAg IDB4ZDIsIDB4MzYsIDB4YTUsIDB4MjcsIDB4MzEsIDB4NzMsIDB4ZGQsIDB4MTEsIDB4NGYsIDB4 OTMsIDB4YmQsIDB4ZTIsCisrICAgIDB4MzEsIDB4YTUsIDB4OTEsIDB4MTMKKyt9OworKworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX25vbmNlW10g PSB7CisrICAgIDB4YjUsIDB4YjMsIDB4NjAsIDB4ZWYsIDB4ZjcsIDB4NjMsIDB4MzEsIDB4ZjMK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGQ0LCAweGJiLCAweDAyLCAw eDEwLCAweGIyLCAweDcxLCAweGRiLCAweDgxLCAweGQ2LCAweGYwLCAweDQyLCAweDYwLAorKyAg ICAweGRhLCAweGVhLCAweDc3LCAweDUyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAg MHg0ZCwgMHhkMiwgMHg2YywgMHg4NywgMHhmYiwgMHgyYywgMHg0ZiwgMHhhNiwgMHg4ZCwgMHgx NiwgMHg2MywgMHgyMiwKKysgICAgMHg2YSwgMHg1MSwgMHhlMywgMHhmOAorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlu cHV0cHJbXSA9IHsKKysgICAgMHhjOSwgMHg4MywgMHg5ZSwgMHgxNiwgMHhmNiwgMHgxYywgMHgw ZiwgMHhiMiwgMHhlYywgMHg2MCwgMHgzMSwgMHhhOSwKKysgICAgMHhjYiwgMHhhOSwgMHgzNiwg MHg3YQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGE4LCAweDEzLCAweDRmLCAw eGY0LCAweDMxLCAweDAyLCAweDQ0LCAweGUzLCAweGQzLCAweDNkLCAweDYxLCAweDllLAorKyAg ICAweGU1LCAweGM2LCAweDNlLCAweDg5LCAweGI1LCAweDliLCAweDBmLCAweDM1CisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRp dGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4ZjksIDB4ZTgsIDB4ZDIsIDB4NzIsIDB4MTMsIDB4 MzQsIDB4OTUsIDB4NmYsIDB4MTUsIDB4NDksIDB4NDcsIDB4OTksCisrICAgIDB4MTYsIDB4MDMs IDB4MTksIDB4NDcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweDRlLCAweDhjLCAw eDQ5LCAweDliLCAweDRhLCAweDVjLCAweDliLCAweDljLCAweDNhLCAweGVlLCAweGZiLCAweGQy LAorKyAgICAweGFlLCAweGNkLCAweDhjLCAweGM0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysg ICAgMHg1MCwgMHhiNCwgMHhiNCwgMHhjZCwgMHg2OCwgMHg1NywgMHhmYywgMHgyZSwgMHhjMSwg MHg1MiwgMHhjYywgMHhmNiwKKysgICAgMHg2OCwgMHhhNCwgMHg4MSwgMHhlZCwgMHg3ZSwgMHhl NCwgMHgxZCwgMHg4NworK307CisrCisrLyogU0hBLTEgTm8gUFIgICovCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfZW50cm9weWlucHV0W10gPSB7Cisr ICAgIDB4YTksIDB4NDcsIDB4MWIsIDB4MjksIDB4MmQsIDB4MWMsIDB4MDUsIDB4ZGYsIDB4NzYs IDB4ZDAsIDB4NjIsIDB4ZjksCisrICAgIDB4ZTIsIDB4N2YsIDB4NGMsIDB4N2IKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX25vbmNlW10g PSB7CisrICAgIDB4NTMsIDB4MjMsIDB4MjQsIDB4ZTMsIDB4ZWMsIDB4MGMsIDB4NTQsIDB4MTQK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDdhLCAweDg3LCAweGExLCAweGFj LCAweDFjLCAweGZkLCAweGFiLCAweGFlLCAweGY3LCAweGQ2LCAweGZiLCAweDc2LAorKyAgICAw eDI4LCAweGVjLCAweDZkLCAweGNhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHhmYywg MHg5MiwgMHgzNSwgMHhkNiwgMHg3ZSwgMHhiNywgMHgyNCwgMHg2NSwgMHhmZCwgMHgxMiwgMHgy NywgMHgzNSwKKysgICAgMHhjMCwgMHg3MiwgMHhjYSwgMHgyOAorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfaW50X3JldHVybmVkYml0c1td ID0geworKyAgICAweDU3LCAweDg4LCAweDgyLCAweGU1LCAweDI1LCAweGE1LCAweDJjLCAweDRh LCAweDA2LCAweDIwLCAweDZjLCAweDcyLAorKyAgICAweDU1LCAweDYxLCAweGRkLCAweDkwLCAw eDcxLCAweDlmLCAweDk1LCAweGVhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg2 OSwgMHhhNSwgMHg0MCwgMHg2MiwgMHg5OCwgMHg0NywgMHg1NiwgMHg3MywgMHg0YSwgMHg4Ziwg MHg2MCwgMHg5NiwKKysgICAgMHhkNiwgMHg5OSwgMHgyNywgMHhlZAorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0 cmVzZWVkW10gPSB7CisrICAgIDB4ZTUsIDB4NDAsIDB4NGUsIDB4YmQsIDB4NTAsIDB4MDAsIDB4 ZjUsIDB4MTUsIDB4YTYsIDB4ZWUsIDB4NDUsIDB4ZGEsCisrICAgIDB4ODQsIDB4M2QsIDB4ZDQs IDB4YzAKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGExX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHgxMSwgMHg1MSwgMHgxNCwgMHhm MCwgMHgwOSwgMHgxYiwgMHg0ZSwgMHg1NiwgMHgwZCwgMHhlOSwgMHhmNiwgMHgxZSwKKysgICAg MHg1MiwgMHg2NSwgMHhjZCwgMHg5NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YTEsIDB4 OWMsIDB4OTQsIDB4NmUsIDB4MjksIDB4ZTEsIDB4MzMsIDB4MGQsIDB4MzIsIDB4ZDYsIDB4YWEs IDB4Y2UsCisrICAgIDB4NzEsIDB4M2YsIDB4NTIsIDB4NzIsIDB4OGIsIDB4NDIsIDB4YTgsIDB4 ZDcKKyt9OworKworKy8qIFNIQS0yMjQgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHgx MiwgMHg2OSwgMHgzMiwgMHg0ZiwgMHg4MywgMHhhNiwgMHhmNSwgMHgxNCwgMHhlMywgMHg0OSwg MHgzZSwgMHg3NSwKKysgICAgMHgzZSwgMHhkZSwgMHhhZCwgMHhhMSwgMHgyOSwgMHhjMywgMHhm MywgMHgxOSwgMHgyMCwgMHhiNSwgMHg0YywgMHhkOQorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9ub25jZVtdID0geworKyAgICAw eDZhLCAweDc4LCAweGQwLCAweGViLCAweGJiLCAweDVhLCAweGYwLCAweGVlLCAweGU4LCAweGMz LCAweGJhLCAweDcxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGQ1 LCAweGI4LCAweGI2LCAweGJjLCAweGMxLCAweDViLCAweDYwLCAweDMxLCAweDNjLCAweGY1LCAw eGU1LCAweGMwLAorKyAgICAweDhlLCAweDUyLCAweDdhLCAweGJkLCAweGVhLCAweDQ3LCAweGE5 LCAweDVmLCAweDhmLCAweGY5LCAweDhiLCAweGFlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0g eworKyAgICAweDFmLCAweDU1LCAweGVjLCAweGFlLCAweDE2LCAweDEyLCAweDg0LCAweGJhLCAw eDg0LCAweDE2LCAweDE5LCAweDg4LAorKyAgICAweDhlLCAweGI4LCAweDMzLCAweDI1LCAweDU0 LCAweGZmLCAweGNhLCAweDc5LCAweGFmLCAweDA3LCAweDI1LCAweDUwCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlp bnB1dHByW10gPSB7CisrICAgIDB4OTIsIDB4YTMsIDB4MzIsIDB4YTgsIDB4OWEsIDB4MGEsIDB4 NTgsIDB4N2MsIDB4MWQsIDB4NWEsIDB4N2UsIDB4ZTEsCisrICAgIDB4YjIsIDB4NzMsIDB4YWIs IDB4MGUsIDB4MTYsIDB4NzksIDB4MjMsIDB4ZDMsIDB4MjksIDB4ODksIDB4ODEsIDB4ZTEKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf cHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGYzLCAweDM4LCAweDkxLCAweDQwLCAw eDM3LCAweDdhLCAweDUxLCAweDcyLCAweDQyLCAweDc0LCAweDc4LCAweDBhLAorKyAgICAweDY5 LCAweGZkLCAweGE2LCAweDQ0LCAweDQzLCAweDQ1LCAweDZjLCAweDBjLCAweDVhLCAweDE5LCAw eGZmLCAweGYxLAorKyAgICAweDU0LCAweDYwLCAweGVlLCAweDZhCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxp bnB1dDJbXSA9IHsKKysgICAgMHg3NSwgMHhmMywgMHgwNCwgMHgyNSwgMHhkZCwgMHgzNiwgMHhh OCwgMHgzNywgMHg0NiwgMHhhZSwgMHgwYywgMHg1MiwKKysgICAgMHgwNSwgMHg3OSwgMHg0Yywg MHgyNiwgMHhkYiwgMHhlOSwgMHg3MSwgMHgxNiwgMHg0YywgMHgwYSwgMHhmMiwgMHg2MAorK307 CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHhlYSwgMHhjNSwgMHgwMywgMHgwYSwgMHg0 ZiwgMHhiMCwgMHgzOCwgMHg4ZCwgMHgyMywgMHhkNCwgMHhjOCwgMHg3NywKKysgICAgMHhlMiwg MHg2ZCwgMHg5YywgMHgwYiwgMHg0NCwgMHhmNywgMHgyZCwgMHg1YiwgMHhiZiwgMHg1ZCwgMHgy YSwgMHgxMQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg2MCwgMHg1MCwgMHgyYiwg MHhlNywgMHg4NiwgMHhkOCwgMHgyNiwgMHg3MywgMHhlMywgMHgxZCwgMHg5NSwgMHgyMCwKKysg ICAgMHhiMywgMHgyYywgMHgzMiwgMHgxYywgMHhmNSwgMHhjZSwgMHg1NywgMHhhNiwgMHg2Nywg MHgyYiwgMHhkYywgMHg0ZSwKKysgICAgMHhkZCwgMHgxMSwgMHg0YywgMHhjNAorK307CisrCisr LyogU0hBLTIyNCBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGIyLCAweDFjLCAweDc3 LCAweDRkLCAweGY2LCAweGQzLCAweGI2LCAweDQwLCAweGI3LCAweDMwLCAweDNlLCAweDI5LAor KyAgICAweGIwLCAweDg1LCAweDFjLCAweGJlLCAweDRhLCAweGVhLCAweDZiLCAweDVhLCAweGI1 LCAweDhhLCAweDk3LCAweGViCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjI0X25vbmNlW10gPSB7CisrICAgIDB4NDIsIDB4MDIsIDB4MGEs IDB4MWMsIDB4OTgsIDB4OWEsIDB4NzcsIDB4OWUsIDB4OWYsIDB4ODAsIDB4YmEsIDB4ZTAKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf cGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4OTgsIDB4YjgsIDB4MDQsIDB4NDEs IDB4ZmMsIDB4YzEsIDB4NWQsIDB4YzUsIDB4ZTksIDB4YjksIDB4MDgsIDB4ZGEsCisrICAgIDB4 ZjksIDB4ZmEsIDB4MGQsIDB4OTAsIDB4Y2UsIDB4ZGYsIDB4MWQsIDB4MTAsIDB4YTksIDB4OGQs IDB4NTAsIDB4MGMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyMjRfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4OWEsIDB4OGQsIDB4 MzksIDB4NDksIDB4NDIsIDB4ZDUsIDB4MGIsIDB4YWUsIDB4ZTEsIDB4YWYsIDB4YjcsIDB4MDAs CisrICAgIDB4MDIsIDB4ZmEsIDB4OTYsIDB4YjEsIDB4YTUsIDB4MWQsIDB4MmQsIDB4MjUsIDB4 NzgsIDB4ZWUsIDB4ODMsIDB4M2YKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGU0 LCAweGY1LCAweDUzLCAweDc5LCAweDVhLCAweDk3LCAweDU4LCAweDA2LCAweDA4LCAweGJhLCAw eDdiLCAweGZhLAorKyAgICAweGYwLCAweDgzLCAweDA1LCAweDhjLCAweDIyLCAweGMwLCAweGM5 LCAweGRiLCAweDE1LCAweGU3LCAweGRlLCAweDIwLAorKyAgICAweDU1LCAweDIyLCAweDlhLCAw eGFkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDY3LCAweDA5LCAweDQ4LCAw eGFhLCAweDA3LCAweDE2LCAweDk5LCAweDg5LCAweDdmLCAweDZkLCAweGEwLCAweGU1LAorKyAg ICAweDhmLCAweGRmLCAweGJjLCAweGRiLCAweGZlLCAweGU1LCAweDZjLCAweDdhLCAweDk1LCAw eDRhLCAweDY2LCAweDE3CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDBm LCAweDRiLCAweDFjLCAweDZmLCAweGI3LCAweGUzLCAweDQ3LCAweGU1LCAweDVkLCAweDdkLCAw eDM4LCAweGQ2LAorKyAgICAweDI4LCAweDliLCAweGViLCAweDU1LCAweDYzLCAweDA5LCAweDNl LCAweDdjLCAweDU2LCAweGVhLCAweGY4LCAweDE5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsK KysgICAgMHgyZCwgMHgyNiwgMHg3YywgMHgzNywgMHhlNCwgMHg3YSwgMHgyOCwgMHg1ZSwgMHg1 YSwgMHgzYywgMHhhZiwgMHgzZCwKKysgICAgMHg1YSwgMHg4ZSwgMHg1NSwgMHhhMiwgMHgxYSwg MHg2ZSwgMHhjMCwgMHhlNSwgMHhmNiwgMHgyMSwgMHhkMywgMHhmNgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9yZXR1cm5lZGJpdHNb XSA9IHsKKysgICAgMHg0ZCwgMHg4MywgMHgzNSwgMHhkZiwgMHg2NywgMHhhOSwgMHhmYywgMHgx NywgMHhkYSwgMHg3MCwgMHhjYywgMHg4YiwKKysgICAgMHg3ZiwgMHg3NywgMHhhZSwgMHhhMiwg MHg1ZiwgMHhiOSwgMHg3ZSwgMHg3NCwgMHg0YywgMHgyNiwgMHhjMSwgMHg3YSwKKysgICAgMHgz YiwgMHhhNywgMHg1YywgMHg5MworK307CisrCisrLyogU0hBLTI1NiBQUiAgKi8KKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1 dFtdID0geworKyAgICAweGNlLCAweDQ5LCAweDAwLCAweDdhLCAweDU2LCAweGUzLCAweDY3LCAw eDhmLCAweGUxLCAweGI2LCAweGE3LCAweGQ0LAorKyAgICAweDRmLCAweDA4LCAweDdhLCAweDFi LCAweDAxLCAweGY0LCAweGZhLCAweDZiLCAweGVmLCAweGI3LCAweGU1LCAweGViLAorKyAgICAw eDA3LCAweDNkLCAweDExLCAweDBkLCAweGM4LCAweGVhLCAweDJiLCAweGZlCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX25vbmNl W10gPSB7CisrICAgIDB4NzMsIDB4NDEsIDB4YzgsIDB4OTIsIDB4OTQsIDB4ZTIsIDB4YzUsIDB4 NWYsIDB4OTMsIDB4ZmQsIDB4MzksIDB4NWQsCisrICAgIDB4MmIsIDB4OTEsIDB4NGQsIDB4MzgK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy NTZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NTAsIDB4NmQsIDB4MDEs IDB4MDEsIDB4MDcsIDB4NWEsIDB4ODAsIDB4MzUsIDB4N2EsIDB4NTYsIDB4MWEsIDB4NTYsCisr ICAgIDB4MmYsIDB4OWEsIDB4MGIsIDB4MzUsIDB4YjIsIDB4YjEsIDB4YzksIDB4ZTUsIDB4Y2Es IDB4NjksIDB4NjEsIDB4NDgsCisrICAgIDB4ZmYsIDB4ZmIsIDB4MGYsIDB4ZDksIDB4NGIsIDB4 NzksIDB4MWQsIDB4YmEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4MjAsIDB4 YjgsIDB4ZGYsIDB4NDQsIDB4NzcsIDB4NWEsIDB4YjgsIDB4ZDMsIDB4YmYsIDB4ZjYsIDB4Y2Ys IDB4YWMsCisrICAgIDB4NWUsIDB4YTYsIDB4OTYsIDB4NjIsIDB4NzMsIDB4NDQsIDB4NDAsIDB4 NGEsIDB4MzAsIDB4ZmIsIDB4MzgsIDB4YTUsCisrICAgIDB4N2IsIDB4MGQsIDB4ZTQsIDB4MGQs IDB4YzYsIDB4ZTQsIDB4OWEsIDB4MWYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAg MHgwNCwgMHhjNCwgMHg2NSwgMHhmNCwgMHhkMywgMHhiZiwgMHg4MywgMHg0YiwgMHhhYiwgMHhj OCwgMHg0MSwgMHhhOCwKKysgICAgMHhjMiwgMHhlMCwgMHg0NCwgMHg2MywgMHg3NywgMHg0Yywg MHg2ZiwgMHg2YywgMHg0OSwgMHg0NiwgMHhmZiwgMHg5NCwKKysgICAgMHgxNywgMHhlYSwgMHhl NiwgMHgxYSwgMHg5ZCwgMHg1ZSwgMHg2NiwgMHg3OAorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10g PSB7CisrICAgIDB4MDcsIDB4NGQsIDB4YWMsIDB4OWIsIDB4ODYsIDB4Y2EsIDB4NGEsIDB4YWEs IDB4NmUsIDB4N2EsIDB4MDMsIDB4YTIsCisrICAgIDB4NWQsIDB4MTAsIDB4ZWEsIDB4MGIsIDB4 ZjksIDB4ODMsIDB4Y2MsIDB4ZDEsIDB4ZmMsIDB4ZTIsIDB4MDcsIDB4YzcsCisrICAgIDB4MDYs IDB4MzQsIDB4NjAsIDB4NmYsIDB4ODMsIDB4OTQsIDB4OTksIDB4NzYKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25h bGlucHV0MltdID0geworKyAgICAweDg5LCAweDRlLCAweDQ1LCAweDhjLCAweDExLCAweGY5LCAw eGJjLCAweDViLCAweGFjLCAweDc0LCAweDhiLCAweDRiLAorKyAgICAweDVmLCAweGY3LCAweDE5 LCAweGYzLCAweGY1LCAweDI0LCAweDU0LCAweDE0LCAweGQxLCAweDE1LCAweGIxLCAweDQzLAor KyAgICAweDEyLCAweGE0LCAweDVmLCAweGQ0LCAweGVjLCAweGZjLCAweGNkLCAweDA5CisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3By X2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweDBlLCAweGViLCAweDFmLCAweGQ3LCAweGZj LCAweGQxLCAweDlkLCAweGQ0LCAweDA1LCAweDM2LCAweDhiLCAweGIyLAorKyAgICAweGZiLCAw eGU0LCAweGY0LCAweDUxLCAweDBjLCAweDg3LCAweDliLCAweDAyLCAweDQ0LCAweGQ1LCAweDky LCAweDRkLAorKyAgICAweDQ0LCAweGZlLCAweDFhLCAweDAzLCAweDQzLCAweDU2LCAweGJkLCAw eDg2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X3ByX3JldHVybmVkYml0c1tdID0geworKyAgICAweDAyLCAweGFhLCAweGI2LCAweDFk LCAweDdlLCAweDJhLCAweDQwLCAweDAzLCAweDY5LCAweDJkLCAweDQ5LCAweGEzLAorKyAgICAw eDQxLCAweGU3LCAweDQ0LCAweDBiLCAweGFmLCAweDdiLCAweDg1LCAweGU0LCAweDVmLCAweDUz LCAweDNiLCAweDY0LAorKyAgICAweGJjLCAweDg5LCAweGM4LCAweDgyLCAweGQ0LCAweDc4LCAw eDM3LCAweGEyCisrfTsKKysKKysvKiBTSEEtMjU2IE5vIFBSICAqLworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0W10gPSB7Cisr ICAgIDB4NWIsIDB4MWIsIDB4ZWMsIDB4NGQsIDB4YTksIDB4MzgsIDB4NzQsIDB4NWEsIDB4MzQs IDB4MGIsIDB4N2IsIDB4YzUsCisrICAgIDB4ZTUsIDB4ZDcsIDB4NjYsIDB4N2MsIDB4YmMsIDB4 ODIsIDB4YjksIDB4MGUsIDB4MmQsIDB4MWYsIDB4OTIsIDB4ZDcsCisrICAgIDB4YzEsIDB4YmMs IDB4NjcsIDB4NjksIDB4ZWMsIDB4NmIsIDB4MDMsIDB4M2MKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfbm9uY2VbXSA9IHsKKysgICAg MHhhNCwgMHgwYywgMHhkOCwgMHg5YywgMHg2MSwgMHhkOCwgMHhjMywgMHg1NCwgMHhmZSwgMHg1 MywgMHhjOSwgMHhlNSwKKysgICAgMHg1ZCwgMHg2ZiwgMHg2ZCwgMHgzNQorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHgyMiwgMHg1ZSwgMHg2MiwgMHg5MywgMHg0MiwgMHg4 MywgMHg3OCwgMHgyNCwgMHhkOCwgMHg0MCwgMHg4YywgMHhkZSwKKysgICAgMHg2ZiwgMHhmOSwg MHhhNCwgMHg3YSwgMHhjNSwgMHhhNywgMHgzYiwgMHg4OCwgMHhhMywgMHhlZSwgMHg0MiwgMHgy MCwKKysgICAgMHhmZCwgMHg2MSwgMHg1NiwgMHhjNiwgMHg0YywgMHgxMywgMHg0MSwgMHg5Ywor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1 Nl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHhiZiwgMHg3NCwgMHg1YiwgMHhmNiwgMHhj NSwgMHg2NCwgMHg1ZSwgMHg5OSwgMHgzNCwgMHg4ZiwgMHhiYywgMHhhNCwKKysgICAgMHhlMiwg MHhiZCwgMHhkOCwgMHg4NSwgMHgyNiwgMHgzNywgMHhlYSwgMHhiYSwgMHg0ZiwgMHhmMiwgMHg5 YSwgMHg5YSwKKysgICAgMHg2NiwgMHhmYywgMHhkZiwgMHg2MywgMHgyNiwgMHgyNiwgMHgxOSwg MHg4NworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTI1Nl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YjMsIDB4YzYsIDB4MDcsIDB4 MDcsIDB4ZDYsIDB4NzUsIDB4ZjYsIDB4MmIsIDB4ZDYsIDB4MjEsIDB4OTYsIDB4ZjEsCisrICAg IDB4YWUsIDB4ZGIsIDB4MmIsIDB4YWMsIDB4MjUsIDB4MmEsIDB4YWUsIDB4YWUsIDB4NDEsIDB4 NzIsIDB4MDMsIDB4NWUsCisrICAgIDB4YmYsIDB4ZDMsIDB4NjQsIDB4YmMsIDB4NTksIDB4Zjks IDB4YzAsIDB4NzYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4YmYsIDB4MjAs IDB4MzMsIDB4NTYsIDB4MjksIDB4YTgsIDB4MzcsIDB4MDQsIDB4MWYsIDB4NzgsIDB4MzQsIDB4 M2QsCisrICAgIDB4ODEsIDB4MmEsIDB4YzksIDB4ODYsIDB4YzYsIDB4N2EsIDB4MmYsIDB4ODgs IDB4NWUsIDB4ZDUsIDB4YmUsIDB4MzQsCisrICAgIDB4NDYsIDB4MjAsIDB4YTQsIDB4MzUsIDB4 ZWIsIDB4YzcsIDB4ZTIsIDB4OWQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAg IDB4OWIsIDB4YWUsIDB4MmQsIDB4MmQsIDB4NjEsIDB4YTQsIDB4ODksIDB4ZWIsIDB4NDMsIDB4 NDYsIDB4YTcsIDB4ZGEsCisrICAgIDB4ZWYsIDB4NDAsIDB4Y2EsIDB4NGEsIDB4OTksIDB4MTEs IDB4NDEsIDB4ZGMsIDB4NWMsIDB4OTQsIDB4ZTksIDB4YWMsCisrICAgIDB4ZDQsIDB4ZDAsIDB4 ZTYsIDB4YmQsIDB4ZmIsIDB4MDMsIDB4OWMsIDB4YTgKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0g eworKyAgICAweDIzLCAweGFhLCAweDBjLCAweGJkLCAweDI4LCAweDMzLCAweGUyLCAweDUxLCAw eGZjLCAweDcxLCAweGQyLCAweDE1LAorKyAgICAweDFmLCAweDc2LCAweGZkLCAweDBkLCAweGUw LCAweGI3LCAweGI1LCAweDg0LCAweDc1LCAweDViLCAweGJlLCAweGYzLAorKyAgICAweDVjLCAw eGNhLCAweGM1LCAweDMwLCAweGYyLCAweDc1LCAweDFmLCAweGRhCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3JldHVybmVkYml0c1td ID0geworKyAgICAweDkwLCAweDNjLCAweGMxLCAweDEwLCAweDhjLCAweDEyLCAweDAxLCAweGM2 LCAweGE2LCAweDNhLCAweDBmLCAweDRkLAorKyAgICAweGI2LCAweDNhLCAweDRmLCAweDQxLCAw eDljLCAweDYxLCAweDc1LCAweDg0LCAweGU5LCAweDc0LCAweDc1LCAweGZkLAorKyAgICAweGZl LCAweGYyLCAweDFmLCAweDQzLCAweGQ4LCAweDVlLCAweDI0LCAweGEzCisrfTsKKysKKysvKiBT SEEtMzg0IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4NzEsIDB4OWQsIDB4YjIsIDB4 NWEsIDB4NzEsIDB4NmQsIDB4MDQsIDB4ZTksIDB4MWUsIDB4YzcsIDB4OTIsIDB4MjQsCisrICAg IDB4NmUsIDB4MTIsIDB4MzMsIDB4YTksIDB4NTIsIDB4NjQsIDB4MzEsIDB4ZWYsIDB4NzEsIDB4 ZWIsIDB4MjIsIDB4NTUsCisrICAgIDB4MjgsIDB4OTcsIDB4MDYsIDB4NmEsIDB4YzAsIDB4MGMs IDB4YTAsIDB4N2UKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEzODRfcHJfbm9uY2VbXSA9IHsKKysgICAgMHhmNSwgMHgwZCwgMHhmYSwgMHhi MCwgMHhlYywgMHg2YSwgMHg3YywgMHhkNiwgMHhiZCwgMHg5YiwgMHgwNSwgMHhmZCwKKysgICAg MHgzOCwgMHgzZSwgMHgyZSwgMHg1NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsK KysgICAgMHg3NCwgMHhhYywgMHg3ZSwgMHg2ZCwgMHhiMSwgMHhhNCwgMHhlNywgMHgyMSwgMHhk MSwgMHgxZSwgMHg2ZSwgMHg5NiwKKysgICAgMHg2ZCwgMHg0ZCwgMHg1MywgMHg0NiwgMHg4Miwg MHg5NiwgMHg2ZSwgMHhjZiwgMHhhYSwgMHg4MSwgMHg4ZCwgMHg3ZCwKKysgICAgMHg5ZSwgMHhl MSwgMHgwZiwgMHgxNSwgMHhlYSwgMHg0MSwgMHhiZiwgMHhlMworK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5w dXRbXSA9IHsKKysgICAgMHhkYSwgMHg5NSwgMHhkNCwgMHhkMCwgMHhiOCwgMHgxMSwgMHhkMywg MHg0OSwgMHgyNywgMHg1ZCwgMHhhOSwgMHgzOSwKKysgICAgMHg2OCwgMHhmMywgMHhhOCwgMHhl OSwgMHg1ZCwgMHgxOSwgMHg4YSwgMHgyYiwgMHg2NiwgMHhlOCwgMHg2OSwgMHgwNiwKKysgICAg MHg3YywgMHg5ZSwgMHgwMywgMHhhMSwgMHg4YiwgMHgyNiwgMHgyZCwgMHg2ZQorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRy b3B5aW5wdXRwcltdID0geworKyAgICAweDQ5LCAweGRmLCAweDQ0LCAweDAwLCAweGU0LCAweDFj LCAweDc1LCAweDBiLCAweDI2LCAweDVhLCAweDU5LCAweDY0LAorKyAgICAweDFmLCAweDRlLCAw eGIxLCAweGIyLCAweDEzLCAweGYxLCAweDIyLCAweDRlLCAweGI0LCAweDZkLCAweDlhLCAweGNj LAorKyAgICAweGEwLCAweDQ4LCAweGU2LCAweGNmLCAweDFkLCAweGQxLCAweDkyLCAweDBkCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0 X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhjOCwgMHg1MiwgMHhhZSwgMHhiZiwg MHgwNCwgMHgzYywgMHgyNywgMHhiNywgMHg3OCwgMHgxOCwgMHhhYSwgMHg4ZiwKKysgICAgMHhm ZiwgMHhjZiwgMHhhNCwgMHhmMSwgMHhjYywgMHhlNywgMHg2OCwgMHhmYSwgMHgyMiwgMHhhMiwg MHgxMywgMHg0NSwKKysgICAgMHhlOCwgMHhkZCwgMHg4NywgMHhlNiwgMHhmMiwgMHg2ZSwgMHhk ZCwgMHhjNywgMHg1MiwgMHg5MCwgMHg5ZiwgMHg3YiwKKysgICAgMHhmYSwgMHg2MSwgMHgyZCwg MHg5ZCwgMHg5ZSwgMHhjZiwgMHg5OCwgMHhhYywgMHg1MiwgMHg0MCwgMHhjZSwgMHhhZgorK307 CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4NjEsIDB4N2MsIDB4MDMsIDB4OWEsIDB4 M2UsIDB4NTAsIDB4NTcsIDB4NjAsIDB4YzUsIDB4ODMsIDB4YzksIDB4YjIsCisrICAgIDB4ZDEs IDB4ODcsIDB4ODUsIDB4NjYsIDB4OTIsIDB4NWQsIDB4ODQsIDB4MGUsIDB4NTMsIDB4ZmIsIDB4 NzAsIDB4MDMsCisrICAgIDB4NzIsIDB4ZmQsIDB4YmEsIDB4YWUsIDB4OWMsIDB4OGYsIDB4Zjgs IDB4MTgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGEzODRfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4ZjgsIDB4ZWIsIDB4ODks IDB4YjEsIDB4OGQsIDB4NzgsIDB4YmUsIDB4MjEsIDB4ZTAsIDB4YmIsIDB4OWQsIDB4YjcsCisr ICAgIDB4OTUsIDB4MGUsIDB4ZDksIDB4NDYsIDB4MGMsIDB4OGMsIDB4ZTIsIDB4NjMsIDB4Yjcs IDB4OWQsIDB4NjcsIDB4OTAsCisrICAgIDB4YmQsIDB4YzcsIDB4MGIsIDB4YTUsIDB4Y2UsIDB4 YjIsIDB4NjUsIDB4ODEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTYsIDB4OWYs IDB4ZmUsIDB4NjgsIDB4ZDYsIDB4YjUsIDB4NzksIDB4ZjEsIDB4MDYsIDB4NWYsIDB4YTMsIDB4 YmIsCisrICAgIDB4MjMsIDB4ODUsIDB4ZDgsIDB4ZjAsIDB4MjksIDB4NWEsIDB4NjgsIDB4OWUs IDB4ZjUsIDB4ZjQsIDB4YTYsIDB4MTIsCisrICAgIDB4ZTAsIDB4OWEsIDB4ZTIsIDB4YWMsIDB4 MDAsIDB4MWQsIDB4OTgsIDB4MjYsIDB4ZmMsIDB4NTMsIDB4OTUsIDB4NTMsCisrICAgIDB4ZTQs IDB4M2UsIDB4MTcsIDB4ZDUsIDB4MDgsIDB4MGIsIDB4NzAsIDB4M2QsIDB4NjcsIDB4OTksIDB4 YWMsIDB4NjYKKyt9OworKworKy8qIFNIQS0zODQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRbXSA9IHsKKysg ICAgMHgwNywgMHgxNSwgMHgyNywgMHgyYSwgMHhhZiwgMHg3NCwgMHgyNCwgMHgzNywgMHhiYywg MHhkNSwgMHgxNCwgMHg2OSwKKysgICAgMHhjZSwgMHgxMSwgMHhmZiwgMHhhMiwgMHg2YiwgMHhi OCwgMHgwNSwgMHg2NywgMHgzNCwgMHhmOCwgMHhiZCwgMHg2ZCwKKysgICAgMHg2YSwgMHhjYywg MHhjZCwgMHg2MCwgMHhhMywgMHg2OCwgMHhjYSwgMHhmNAorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9ub25jZVtdID0geworKyAgICAw eDcwLCAweDE3LCAweGMyLCAweDViLCAweDVkLCAweDIyLCAweDBiLCAweDA2LCAweDE1LCAweDU0 LCAweDc4LCAweDc3LAorKyAgICAweDQ0LCAweGFmLCAweDJmLCAweDA5CisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0geworKyAgICAweDg5LCAweDM5LCAweDI4LCAweGIwLCAweDYwLCAweGVi LCAweDNkLCAweGRjLCAweDU1LCAweDc1LCAweDg2LCAweGViLAorKyAgICAweGFlLCAweGEyLCAw eDhmLCAweGJjLCAweDFiLCAweDc1LCAweGQ0LCAweGUxLCAweDBmLCAweGFhLCAweDM4LCAweGNh LAorKyAgICAweDYyLCAweDhiLCAweGNiLCAweDJjLCAweDI2LCAweGY2LCAweGJjLCAweGIxCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0 X2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDMwLCAweDJiLCAweDQyLCAweDM1LCAweGVm LCAweGRhLCAweDQwLCAweDU1LCAweDI4LCAweGM2LCAweDk1LCAweGZiLAorKyAgICAweDU0LCAw eDAxLCAweDYyLCAweGQ3LCAweDg3LCAweDE0LCAweDQ4LCAweDZkLCAweDkwLCAweDRjLCAweGE5 LCAweDAyLAorKyAgICAweDU0LCAweDQwLCAweDIyLCAweGM4LCAweDY2LCAweGE1LCAweDQ4LCAw eDQ4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg4MiwgMHhjNCwgMHhhMSwgMHg5 YywgMHgyMSwgMHhkMiwgMHhlNywgMHhhNSwgMHhhNiwgMHhmNiwgMHg1ZiwgMHgwNCwKKysgICAg MHg1YywgMHhjNywgMHgzMSwgMHg5ZCwgMHg4ZCwgMHg1OSwgMHg3NCwgMHg1MCwgMHgxOSwgMHg4 OSwgMHgyZiwgMHg2MywKKysgICAgMHhkNSwgMHhiNywgMHg3ZSwgMHhlYiwgMHgxNSwgMHhlMywg MHg3MCwgMHg4MywgMHhhMSwgMHgyNCwgMHg1OSwgMHhmYSwKKysgICAgMHgyYywgMHg1NiwgMHhm NiwgMHg4OCwgMHgzYSwgMHg5MiwgMHg5MywgMHhhMSwgMHhmYiwgMHg3OSwgMHhjMSwgMHg3YQor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHgzOSwgMHhhNiwgMHhlOCwgMHg1Yywg MHg4MiwgMHgxNywgMHg3MSwgMHgyNiwgMHg1NywgMHg0ZiwgMHg5ZiwgMHhjMiwKKysgICAgMHg1 NSwgMHhmZiwgMHg1YywgMHg5YiwgMHg1MywgMHgxYSwgMHhkMSwgMHg1ZiwgMHhiYywgMHg2Miwg MHhlNCwgMHgyNywKKysgICAgMHgyZCwgMHgzMiwgMHhmMCwgMHhlNCwgMHg1MiwgMHg4YywgMHhj NSwgMHgwYworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg4ZCwgMHhjYiwg MHg4ZCwgMHhjZSwgMHgwOCwgMHhlYSwgMHg4MCwgMHhlOCwgMHg5YiwgMHg2MSwgMHhhOCwgMHgw ZiwKKysgICAgMHhhZiwgMHg0OSwgMHgyMCwgMHg5ZSwgMHg3NCwgMHhjYiwgMHg1NywgMHg4MCwg MHg0MiwgMHhiMCwgMHg4NCwgMHg1ZSwKKysgICAgMHgzMCwgMHgyYSwgMHg2NywgMHgwOCwgMHhm NCwgMHhlMywgMHg0MCwgMHgyMgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4N2Ms IDB4OGYsIDB4YzIsIDB4YWUsIDB4MjIsIDB4NGEsIDB4ZDYsIDB4ZjYsIDB4MDUsIDB4YTQsIDB4 N2EsIDB4ZWEsCisrICAgIDB4YmIsIDB4MjUsIDB4ZDAsIDB4YjcsIDB4NWEsIDB4ZDYsIDB4Y2Ys IDB4OWQsIDB4ZjMsIDB4NmMsIDB4ZTIsIDB4YjIsCisrICAgIDB4NGUsIDB4YjQsIDB4YmQsIDB4 ZjQsIDB4ZTUsIDB4NDAsIDB4ODAsIDB4OTQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4 OWUsIDB4N2UsIDB4ZmIsIDB4NTksIDB4YmIsIDB4YWEsIDB4M2MsIDB4ZjcsIDB4ZTEsIDB4Zjgs IDB4NzYsIDB4ZGQsCisrICAgIDB4NjMsIDB4NWYsIDB4YWYsIDB4MjMsIDB4ZDYsIDB4NjQsIDB4 NjEsIDB4YzAsIDB4OWEsIDB4MDksIDB4NDcsIDB4YzksCisrICAgIDB4MzMsIDB4ZGYsIDB4NmQs IDB4NTUsIDB4OTEsIDB4MzQsIDB4NzksIDB4NzAsIDB4YzQsIDB4OTksIDB4NmUsIDB4NTQsCisr ICAgIDB4MDksIDB4NjQsIDB4MjEsIDB4MWEsIDB4YmQsIDB4MWUsIDB4ODAsIDB4NDAsIDB4MzQs IDB4YWQsIDB4ZmEsIDB4ZDcKKyt9OworKworKy8qIFNIQS01MTIgUFIgICovCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRb XSA9IHsKKysgICAgMHgxMywgMHhmNywgMHg2MSwgMHg3NSwgMHg2NSwgMHgyOCwgMHhhMiwgMHg1 OSwgMHgxMywgMHg1YSwgMHg0YSwgMHg0ZiwKKysgICAgMHg1NiwgMHg2MCwgMHg4YywgMHg1Mywg MHg3ZCwgMHhiMCwgMHhiZCwgMHgwNiwgMHg0ZiwgMHhlZCwgMHhjYywgMHhkMiwKKysgICAgMHhh MiwgMHhiNSwgMHhmZCwgMHg1YiwgMHgzYSwgMHhhYiwgMHhlYywgMHgyOAorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9ub25jZVtd ID0geworKyAgICAweGJlLCAweGEzLCAweDkxLCAweDkzLCAweDFkLCAweGMzLCAweDMxLCAweDNh LCAweDIzLCAweDMzLCAweDUwLCAweDY3LAorKyAgICAweDg4LCAweGM3LCAweGEyLCAweGM0Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDFmLCAweDU5LCAweDRkLCAw eDdiLCAweGU2LCAweDQ2LCAweDkxLCAweDQ4LCAweGMxLCAweDI1LCAweGZhLCAweGZmLAorKyAg ICAweDg5LCAweDEyLCAweDc3LCAweDM1LCAweGRmLCAweDNlLCAweGY0LCAweDgwLCAweDVmLCAw eGQ5LCAweGIwLCAweDA3LAorKyAgICAweDIyLCAweDQxLCAweGRkLCAweDQ4LCAweDc4LCAweDZi LCAweDc3LCAweDJiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDMwLCAweGZm LCAweDYzLCAweDZmLCAweGFjLCAweGQ5LCAweDg0LCAweDM5LCAweDZmLCAweGU0LCAweDk5LCAw eGNlLAorKyAgICAweDkxLCAweDdkLCAweDdlLCAweGM4LCAweDU4LCAweGYyLCAweDEyLCAweGMz LCAweGI2LCAweGFkLCAweGRhLCAweDIyLAorKyAgICAweDA0LCAweGEwLCAweGQyLCAweDIxLCAw eGZlLCAweGYyLCAweDk1LCAweDFkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4 NjQsIDB4NTQsIDB4MTMsIDB4ZWMsIDB4NGYsIDB4NzcsIDB4ZGEsIDB4YjIsIDB4OTIsIDB4MmUs IDB4NTIsIDB4ODAsCisrICAgIDB4MTEsIDB4MTAsIDB4YzIsIDB4ZjgsIDB4ZTYsIDB4YTcsIDB4 Y2QsIDB4NGIsIDB4ZmMsIDB4MzIsIDB4MmUsIDB4OWUsCisrICAgIDB4ZWIsIDB4YmIsIDB4YjEs IDB4YmYsIDB4MTUsIDB4NWMsIDB4NzMsIDB4MDgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0g eworKyAgICAweGVmLCAweDFlLCAweGRjLCAweDBhLCAweGE0LCAweDM2LCAweDkxLCAweDljLCAw eDNkLCAweDI3LCAweDk3LCAweDUwLAorKyAgICAweDhkLCAweDM2LCAweDI5LCAweDhkLCAweGNl LCAweDZhLCAweDBjLCAweGY3LCAweDIxLCAweGMwLCAweDkxLCAweGFlLAorKyAgICAweDBjLCAw eDk2LCAweDcyLCAweGJkLCAweDUyLCAweDgxLCAweDU4LCAweGZjLCAweDZkLCAweGU1LCAweGY3 LCAweGE1LAorKyAgICAweGZkLCAweDVkLCAweGE3LCAweDU4LCAweDY4LCAweGM4LCAweDk5LCAw eDU4LCAweDhlLCAweGM4LCAweGNlLCAweDk1LAorKyAgICAweDAxLCAweDdkLCAweGZmLCAweGE0 LCAweGM4LCAweGY3LCAweDYzLCAweGZlLCAweDVmLCAweDY5LCAweDgzLCAweDUzLAorKyAgICAw eGUyLCAweGM2LCAweDhiLCAweGMzCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAg MHhlNiwgMHg5YiwgMHhjNCwgMHg4OCwgMHgzNCwgMHhjYSwgMHhlYSwgMHgyOSwgMHgyZiwgMHg5 OCwgMHgwNSwgMHhhNCwKKysgICAgMHhkMywgMHhjMCwgMHg3YiwgMHgxMSwgMHhlOCwgMHhiYiwg MHg3NSwgMHhmMiwgMHhiZCwgMHgyOSwgMHhiNywgMHg0MCwKKysgICAgMHgyNSwgMHg3ZiwgMHhj MSwgMHhiNywgMHhiMSwgMHhmMSwgMHgyNSwgMHg2MQorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9 IHsKKysgICAgMHgyMywgMHg2ZCwgMHhmZiwgMHhkZSwgMHhmYiwgMHhkMSwgMHhiYSwgMHgzMywg MHgxOCwgMHhlNiwgMHhiZSwgMHhiNSwKKysgICAgMHg0OCwgMHg3NywgMHg2ZCwgMHg3ZiwgMHhh NywgMHhlMSwgMHg0ZCwgMHg0OCwgMHgxZSwgMHgzYywgMHhhNywgMHgzNCwKKysgICAgMHgxYSwg MHhjOCwgMHg2MCwgMHhkYiwgMHg4ZiwgMHg5OSwgMHgxNSwgMHg5OQorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9yZXR1cm5lZGJp dHNbXSA9IHsKKysgICAgMHg3MCwgMHgyNywgMHgzMSwgMHhkYiwgMHg5MiwgMHg3MCwgMHgyMSwg MHhmZSwgMHgxNiwgMHhiNiwgMHhjOCwgMHg1MSwKKysgICAgMHgzNCwgMHg4NywgMHg2NSwgMHhk MCwgMHg0ZSwgMHhmZCwgMHhmZSwgMHg2OCwgMHhlYywgMHhhYywgMHhkYywgMHg5MywKKysgICAg MHg0MSwgMHgzOCwgMHg5MiwgMHg5MCwgMHhiNCwgMHg5NCwgMHhmOSwgMHgwZCwgMHhhNCwgMHhm NywgMHg0ZSwgMHg4MCwKKysgICAgMHg5MiwgMHg2NywgMHg0OCwgMHg0MCwgMHhhNywgMHgwOCwg MHhjNywgMHhiYywgMHg2NiwgMHgwMCwgMHhmZCwgMHhmNywKKysgICAgMHg0YywgMHg4YiwgMHgx NywgMHg2ZSwgMHhkMSwgMHg4ZiwgMHg5YiwgMHhmMywgMHg2ZiwgMHhmNiwgMHgzNCwgMHhkZCwK KysgICAgMHg2NywgMHhmNywgMHg2OCwgMHhkZAorK307CisrCisrLyogU0hBLTUxMiBObyBQUiAg Ki8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2Vu dHJvcHlpbnB1dFtdID0geworKyAgICAweGI2LCAweDBiLCAweGI3LCAweGJjLCAweDg0LCAweDU2 LCAweGY2LCAweDEyLCAweGFmLCAweDQ1LCAweDY3LCAweDE3LAorKyAgICAweDdjLCAweGQxLCAw eGIyLCAweDc4LCAweDJiLCAweGEwLCAweGYyLCAweGJlLCAweGI2LCAweDZkLCAweDhiLCAweDU2 LAorKyAgICAweGM2LCAweGJjLCAweDRkLCAweGUxLCAweGY3LCAweGJlLCAweGNlLCAweGJkCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X25vbmNlW10gPSB7CisrICAgIDB4OWQsIDB4ZWQsIDB4YzAsIDB4ZTUsIDB4NWEsIDB4OTgsIDB4 NmEsIDB4Y2IsIDB4NTEsIDB4N2QsIDB4NzYsIDB4MzEsCisrICAgIDB4NWEsIDB4NjQsIDB4ZjAs IDB4ZjcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4YzIsIDB4NmQsIDB4 YTMsIDB4YzMsIDB4MDYsIDB4NzQsIDB4ZTUsIDB4MDEsIDB4NWMsIDB4MTAsIDB4MTcsIDB4Yzcs CisrICAgIDB4YWYsIDB4ODMsIDB4OWQsIDB4NTksIDB4OGQsIDB4MmQsIDB4MjksIDB4MzgsIDB4 YzUsIDB4NTksIDB4NzAsIDB4OGIsCisrICAgIDB4NDYsIDB4NDgsIDB4MmQsIDB4Y2YsIDB4MzYs IDB4N2QsIDB4NTksIDB4YzAKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGE1MTJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ZWMsIDB4 OGMsIDB4ZDQsIDB4ZjcsIDB4NjEsIDB4NmUsIDB4MGQsIDB4OTUsIDB4NzksIDB4YjcsIDB4Mjgs IDB4YWQsCisrICAgIDB4NWYsIDB4NjksIDB4NzQsIDB4NWYsIDB4MmQsIDB4MzYsIDB4MDYsIDB4 OGEsIDB4NmIsIDB4YWMsIDB4NTQsIDB4OTcsCisrICAgIDB4YzQsIDB4YTEsIDB4MTIsIDB4ODUs IDB4MGEsIDB4ZGYsIDB4NGIsIDB4MzQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAw eDg0LCAweDJmLCAweDFmLCAweDY4LCAweDZhLCAweGEzLCAweGFkLCAweDFlLCAweGZiLCAweGY0 LCAweDE1LCAweGJkLAorKyAgICAweGRlLCAweDM4LCAweGQ0LCAweDMwLCAweDgwLCAweDUxLCAw eGU5LCAweGQzLCAweGM3LCAweDIwLCAweDg4LCAweGU5LAorKyAgICAweGY1LCAweGNjLCAweGRm LCAweDU3LCAweDVjLCAweDQ3LCAweDJmLCAweDU3LCAweDNjLCAweDVmLCAweDEzLCAweDU2LAor KyAgICAweGNjLCAweGM1LCAweDRmLCAweDg0LCAweGY4LCAweDEwLCAweDQxLCAweGQ1LCAweDdl LCAweDU4LCAweDZlLCAweDE5LAorKyAgICAweDE5LCAweDllLCAweGFmLCAweGMyLCAweDIyLCAw eDU4LCAweDQxLCAweDUwLCAweDc5LCAweGMyLCAweGQ4LCAweDA0LAorKyAgICAweDI4LCAweGQ0 LCAweDM5LCAweDlhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweGZhLCAweDdm LCAweDQ2LCAweDUxLCAweDgzLCAweDYyLCAweDk4LCAweDE2LCAweDlhLCAweDE5LCAweGEyLCAw eDQ5LAorKyAgICAweGE5LCAweGU2LCAweDRhLCAweGQ4LCAweDg1LCAweGU3LCAweGQ0LCAweDNi LCAweDJjLCAweDgyLCAweGM1LCAweDgyLAorKyAgICAweGJmLCAweDExLCAweGY5LCAweDllLCAw eGJjLCAweGQwLCAweDAxLCAweGVlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAg ICAweGI5LCAweDEyLCAweGUwLCAweDRmLCAweGY3LCAweGE3LCAweGM0LCAweGQ4LCAweGQwLCAw eDhlLCAweDk5LCAweDI5LAorKyAgICAweDdjLCAweDlhLCAweGU5LCAweGNmLCAweGM0LCAweDZj LCAweGY4LCAweGMzLCAweGE3LCAweDQxLCAweDgzLCAweGQ2LAorKyAgICAweDJlLCAweGZhLCAw eGI4LCAweDVlLCAweDhlLCAweDZiLCAweDc4LCAweDIwCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9 IHsKKysgICAgMHhkNywgMHgwNywgMHg1MiwgMHhiOSwgMHg4MywgMHgyYywgMHgwMywgMHg3MSwg MHhlZSwgMHhjOSwgMHhjMCwgMHg4NSwKKysgICAgMHhlMSwgMHg1NywgMHhiMiwgMHhjZCwgMHgz YSwgMHhmMCwgMHhjOSwgMHgzNCwgMHgyNCwgMHg0MSwgMHgxYywgMHg0MiwKKysgICAgMHg5OSwg MHhiMiwgMHg4NCwgMHhlOSwgMHgxNywgMHhkMiwgMHg3NiwgMHg5MgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9yZXR1cm5lZGJpdHNb XSA9IHsKKysgICAgMHgzNiwgMHgxNywgMHg1ZCwgMHg5OCwgMHgyYiwgMHg2NSwgMHgyNSwgMHg4 ZSwgMHhjOCwgMHgyOSwgMHhkZiwgMHgyNywKKysgICAgMHgwNSwgMHgzNiwgMHgyNiwgMHgxMiwg MHg4YSwgMHg2OCwgMHg3NCwgMHgyNywgMHgzNywgMHhkNCwgMHg3ZiwgMHgzMiwKKysgICAgMHhi MSwgMHgxMiwgMHhkNiwgMHg4NSwgMHg4MywgMHhlYiwgMHgyZSwgMHhhMCwgMHhlZCwgMHg0Yiwg MHhiNSwgMHg3YiwKKysgICAgMHg2ZiwgMHgzOSwgMHgzYywgMHg3MSwgMHg3NywgMHgwMiwgMHgx MiwgMHhjYywgMHgyYywgMHgzYSwgMHg4ZSwgMHg2MywKKysgICAgMHhkZiwgMHg0YSwgMHhiZCwg MHg2ZiwgMHg2ZSwgMHgyZSwgMHhlZCwgMHgwYSwgMHg4NSwgMHhhNSwgMHgyZiwgMHhhMiwKKysg ICAgMHg2OCwgMHhkZSwgMHg0MiwgMHhiNQorK307CisrCisrLyogSE1BQyBTSEEtMSBQUiAgKi8K KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3By X2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDI2LCAweDVmLCAweDM2LCAweDE0LCAweGZmLCAw eDNkLCAweDgzLCAweGZhLCAweDczLCAweDVlLCAweDc1LCAweGRjLAorKyAgICAweDJjLCAweDE4 LCAweDE3LCAweDFiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGExX3ByX25vbmNlW10gPSB7CisrICAgIDB4YzgsIDB4ZTMsIDB4NTcs IDB4YTUsIDB4N2IsIDB4NzQsIDB4ODYsIDB4NmUKKyt9OworKworK19fZmlwc19jb25zdHNlZwor KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NmUsIDB4ZGIsIDB4MGQsIDB4ZmUsIDB4N2QsIDB4YWMs IDB4NzksIDB4ZDAsIDB4YTUsIDB4M2EsIDB4NDgsIDB4ODUsCisrICAgIDB4ODAsIDB4ZTIsIDB4 N2YsIDB4MmEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4MzEsIDB4Y2Qs IDB4NWUsIDB4NDMsIDB4ZGMsIDB4ZmIsIDB4N2EsIDB4NzksIDB4Y2EsIDB4ODgsIDB4ZGUsIDB4 MWYsCisrICAgIDB4ZDcsIDB4YmIsIDB4NDIsIDB4MDkKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHJb XSA9IHsKKysgICAgMHg3YywgMHgyMywgMHg5NSwgMHgzOCwgMHgwMCwgMHg5NSwgMHhjMSwgMHg3 OCwgMHgxZiwgMHg4ZiwgMHhkNywgMHg2MywKKysgICAgMHgyMywgMHg4NywgMHgyYSwgMHhlZAor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMV9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YmIsIDB4MzQsIDB4ZTcsIDB4 OTMsIDB4YTMsIDB4MDIsIDB4MmMsIDB4NGEsIDB4ZDAsIDB4ODksIDB4ZGEsIDB4N2YsCisrICAg IDB4ZWQsIDB4ZjQsIDB4NGMsIDB4ZGUsIDB4MTcsIDB4ZWMsIDB4ZTUsIDB4NmMKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJf YWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweDQ5LCAweGJjLCAweDJkLCAweDJjLCAweGI3 LCAweDMyLCAweGNiLCAweDIwLCAweGRmLCAweGY1LCAweDc3LCAweDU4LAorKyAgICAweGEwLCAw eDRiLCAweDkzLCAweDZlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweDNj LCAweGFhLCAweGIwLCAweDIxLCAweDQyLCAweGIwLCAweGRkLCAweDM0LCAweGYwLCAweDE2LCAw eDdmLCAweDBjLAorKyAgICAweDBmLCAweGZmLCAweDJlLCAweGFmCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3JldHVybmVk Yml0c1tdID0geworKyAgICAweDhlLCAweGNiLCAweGEzLCAweDY0LCAweGIyLCAweGI4LCAweDMz LCAweDZjLCAweDY0LCAweDNiLCAweDc4LCAweDE2LAorKyAgICAweDk5LCAweDM1LCAweGM4LCAw eDMwLCAweGNiLCAweDNlLCAweGEwLCAweGQ4CisrfTsKKysKKysvKiBITUFDIFNIQS0xIE5vIFBS ICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MzIsIDB4OWEsIDB4MmEsIDB4ODcsIDB4N2Is IDB4ODksIDB4N2MsIDB4ZjYsIDB4Y2IsIDB4OTUsIDB4ZDUsIDB4NDAsCisrICAgIDB4MTcsIDB4 ZmUsIDB4NDcsIDB4NzAKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfbm9uY2VbXSA9IHsKKysgICAgMHgxNiwgMHhkOCwgMHhlMCwg MHhjNywgMHg1MiwgMHhjZiwgMHg0YSwgMHgyNQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9IHsKKysgICAgMHgzNSwgMHgzNSwgMHhhOSwgMHhhNSwgMHg0MCwgMHhiZSwgMHg5YiwgMHhk MSwgMHg1NiwgMHhkZCwgMHg0NCwgMHgwMCwKKysgICAgMHg3MiwgMHhmNywgMHhkMywgMHg1ZQor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHgxYiwgMHgyYywgMHg4NCwgMHgyZCwg MHg0YSwgMHg4OSwgMHg4ZiwgMHg2OSwgMHgxOSwgMHhmMSwgMHhmMywgMHhkYiwKKysgICAgMHhi YiwgMHhlMywgMHhhYSwgMHhlYQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4 Y2YsIDB4ZmEsIDB4N2QsIDB4NzIsIDB4MGYsIDB4ZTYsIDB4YzcsIDB4OTYsIDB4YTAsIDB4Njks IDB4MzEsIDB4MTEsCisrICAgIDB4OWIsIDB4MGIsIDB4MWEsIDB4MjAsIDB4MWYsIDB4M2YsIDB4 YWEsIDB4ZDEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4OTAsIDB4NzUs IDB4MTUsIDB4MDQsIDB4OTUsIDB4ZjEsIDB4YmEsIDB4ODEsIDB4MGMsIDB4MzcsIDB4OTQsIDB4 NmYsCisrICAgIDB4ODYsIDB4NTIsIDB4NmQsIDB4OWMKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0cmVz ZWVkW10gPSB7CisrICAgIDB4NWIsIDB4NDAsIDB4YmEsIDB4NWYsIDB4MTcsIDB4NzAsIDB4ZjAs IDB4NGIsIDB4ZGYsIDB4YzksIDB4OTcsIDB4OTIsCisrICAgIDB4NzksIDB4YzUsIDB4ODIsIDB4 MjgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTFfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweDk3LCAweGM4LCAweDgwLCAw eDkwLCAweGIzLCAweGFhLCAweDZlLCAweDYwLCAweGVhLCAweDgzLCAweDdhLCAweGUzLAorKyAg ICAweDhhLCAweGNhLCAweGE0LCAweDdmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3JldHVybmVkYml0c1tdID0geworKyAgICAw eDkwLCAweGJkLCAweDA1LCAweDU2LCAweDZkLCAweGI1LCAweDIyLCAweGQ1LCAweGI5LCAweDVh LCAweDI5LCAweDJkLAorKyAgICAweGU5LCAweDBiLCAweGUxLCAweGFjLCAweGRlLCAweDI3LCAw eDBiLCAweGIwCisrfTsKKysKKysvKiBITUFDIFNIQS0yMjQgUFIgICovCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1 dFtdID0geworKyAgICAweDE3LCAweDMyLCAweDJiLCAweDJlLCAweDZmLCAweDFiLCAweDljLCAw eDZkLCAweDMxLCAweGUwLCAweDM0LCAweDA3LAorKyAgICAweGNmLCAweGVkLCAweGY2LCAweGI2 LCAweDVhLCAweDc2LCAweDRjLCAweGJjLCAweDYyLCAweDg1LCAweDAxLCAweDkwCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRf cHJfbm9uY2VbXSA9IHsKKysgICAgMHgzOCwgMHhiZiwgMHg1ZiwgMHgyMCwgMHhiMywgMHg2OCwg MHgyZiwgMHg0MywgMHg2MSwgMHgwNSwgMHg4ZiwgMHgyMworK307CisrCisrX19maXBzX2NvbnN0 c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGMwLCAweGM5LCAweDQ1LCAweGFjLCAweDhk LCAweDI3LCAweDc3LCAweDA4LCAweDBiLCAweDE3LCAweDZkLCAweGVkLAorKyAgICAweGMxLCAw eDdkLCAweGQ1LCAweDA3LCAweDlkLCAweDZlLCAweGY4LCAweDIzLCAweDJhLCAweDIyLCAweDEz LCAweGJkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4YTQsIDB4M2Ms IDB4ZTcsIDB4M2IsIDB4ZWEsIDB4MTksIDB4NDUsIDB4MzIsIDB4YzIsIDB4ODMsIDB4NmQsIDB4 MjEsCisrICAgIDB4OGEsIDB4YzAsIDB4ZWUsIDB4NjcsIDB4NDUsIDB4ZGUsIDB4MTMsIDB4N2Qs IDB4OWQsIDB4NjEsIDB4MDAsIDB4M2IKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0gewor KyAgICAweDE1LCAweDA1LCAweDc0LCAweDRhLCAweDdmLCAweDhkLCAweDVjLCAweDYwLCAweDE2 LCAweGU1LCAweDdiLCAweGFkLAorKyAgICAweGY1LCAweDQxLCAweDhmLCAweDU1LCAweDYwLCAw eGM0LCAweDA5LCAweGVlLCAweDFlLCAweDExLCAweDgxLCAweGFiCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfaW50X3Jl dHVybmVkYml0c1tdID0geworKyAgICAweDZmLCAweGY1LCAweDlhLCAweGUyLCAweDU0LCAweDUz LCAweDMwLCAweDNkLCAweDVhLCAweDI3LCAweDI5LCAweDM4LAorKyAgICAweDI3LCAweGYyLCAw eDBkLCAweDA1LCAweGU5LCAweDI2LCAweGNiLCAweDE2LCAweGMzLCAweDUxLCAweDVmLCAweDEz LAorKyAgICAweDQxLCAweGZlLCAweDk5LCAweGYyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0 MltdID0geworKyAgICAweDczLCAweDgxLCAweDg4LCAweDg0LCAweDhmLCAweGVkLCAweDZmLCAw eDEwLCAweDlmLCAweDkzLCAweGJmLCAweDE3LAorKyAgICAweDM1LCAweDdjLCAweGVmLCAweGQ1 LCAweDhkLCAweDI2LCAweGE2LCAweDdhLCAweGU4LCAweDA5LCAweDM2LCAweDRmCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRf cHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4ZTYsIDB4Y2YsIDB4Y2YsIDB4N2UsIDB4 MTIsIDB4ZTUsIDB4NDMsIDB4ZDIsIDB4MzgsIDB4ZDgsIDB4MjQsIDB4NmYsCisrICAgIDB4NWEs IDB4MzcsIDB4NjgsIDB4YmYsIDB4NGYsIDB4YTAsIDB4ZmYsIDB4ZDUsIDB4NjEsIDB4OGEsIDB4 OTMsIDB4ZTAKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTIyNF9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhhZiwgMHhmOSwg MHhkOCwgMHgxOSwgMHg5MSwgMHgzMCwgMHg4MiwgMHg2ZiwgMHhhOSwgMHgxZSwgMHg5ZCwgMHhk NywKKysgICAgMHhmMywgMHg1MCwgMHhlMCwgMHhjNywgMHhkNSwgMHg2NCwgMHg5NiwgMHg3ZCwg MHg0YywgMHg0ZCwgMHg3OCwgMHgwMywKKysgICAgMHg2ZCwgMHhkOCwgMHg5ZSwgMHg3MgorK307 CisrCisrLyogSE1BQyBTSEEtMjI0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAg MHgxMSwgMHg4MiwgMHhmZCwgMHhkOSwgMHg0MiwgMHhmNCwgMHhmYSwgMHhjOCwgMHhmMiwgMHg0 MSwgMHhlNiwgMHg1NCwKKysgICAgMHgwMSwgMHhhZSwgMHgyMiwgMHg2ZSwgMHhjNiwgMHhhZiwg MHhhZiwgMHhkMCwgMHhhNiwgMHhiMiwgMHhlMiwgMHg2ZAorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X25vbmNlW10gPSB7Cisr ICAgIDB4YTksIDB4NDgsIDB4ZDcsIDB4OTIsIDB4MzksIDB4N2UsIDB4MmEsIDB4ZGMsIDB4MzAs IDB4MWYsIDB4MGUsIDB4MmIKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 IHsKKysgICAgMHgxMSwgMHhkNSwgMHhmNCwgMHhiZCwgMHg2NywgMHg4YywgMHgzMSwgMHhjZiwg MHhhMywgMHgzZiwgMHgxZSwgMHg2YiwKKysgICAgMHhhOCwgMHgwNywgMHgwMiwgMHgwYiwgMHhj OCwgMHgyZSwgMHg2YywgMHg2NCwgMHg0MSwgMHg1YiwgMHhjOCwgMHgzNworK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0 aW9uYWxpbnB1dFtdID0geworKyAgICAweDY4LCAweDE4LCAweGMyLCAweDA2LCAweGViLCAweDNl LCAweDA0LCAweDk1LCAweDQ0LCAweDVlLCAweGZiLCAweGU2LAorKyAgICAweDQxLCAweGMxLCAw eDVjLCAweGNjLCAweDQwLCAweDJmLCAweGI3LCAweGQyLCAweDBmLCAweGYzLCAweDZiLCAweGU3 CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDdmLCAweDQ1LCAweGM3LCAw eDVkLCAweDMyLCAweGU2LCAweDE3LCAweDYwLCAweGJhLCAweGRjLCAweGI4LCAweDQyLAorKyAg ICAweDFiLCAweDljLCAweGYxLCAweGZhLCAweDNiLCAweDRkLCAweDI5LCAweDU0LCAweGM2LCAw eDkwLCAweGZmLCAweDVjLAorKyAgICAweGNkLCAweGQ2LCAweGE5LCAweGNjCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfZW50 cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4YzQsIDB4OGUsIDB4MzcsIDB4OTUsIDB4Njks IDB4NTMsIDB4MjgsIDB4ZDcsIDB4MzcsIDB4YmIsIDB4NzAsIDB4OTUsCisrICAgIDB4MWMsIDB4 MDcsIDB4MWQsIDB4ZDksIDB4YjcsIDB4ZTYsIDB4MWIsIDB4YmIsIDB4ZmUsIDB4NDEsIDB4ZWIs IDB4YzkKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg1 MywgMHgxNywgMHhhMSwgMHg2YSwgMHhmYSwgMHg3NywgMHg0NywgMHhiMCwgMHg5NSwgMHg1Niwg MHg5YSwgMHgyMCwKKysgICAgMHg1NywgMHhkZSwgMHg1YywgMHg4OSwgMHg5ZiwgMHg3ZiwgMHhl MiwgMHhkZSwgMHgxNywgMHgzYSwgMHg1MCwgMHgyMworK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJb XSA9IHsKKysgICAgMHgzYSwgMHgzMiwgMHhmOSwgMHg4NSwgMHgwYywgMHhjMSwgMHhlZCwgMHg3 NiwgMHgyZCwgMHhkZiwgMHg0MCwgMHhjMywKKysgICAgMHgwNiwgMHgyMiwgMHg2NiwgMHhkNCwg MHg5YSwgMHg5YSwgMHhmZiwgMHg1YSwgMHg3ZSwgMHg3YSwgMHhmMywgMHg5NgorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3Jl dHVybmVkYml0c1tdID0geworKyAgICAweDQzLCAweGI0LCAweDU3LCAweDVjLCAweDM4LCAweDI1 LCAweDlkLCAweGFlLCAweGVjLCAweDk2LCAweGQxLCAweDg1LAorKyAgICAweDNhLCAweDg0LCAw eDhkLCAweGZlLCAweDY4LCAweGQ1LCAweDBlLCAweDVjLCAweDhmLCAweDY1LCAweGE1LCAweDRl LAorKyAgICAweDQ1LCAweDg0LCAweGE4LCAweDk0CisrfTsKKysKKysvKiBITUFDIFNIQS0yNTYg UFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDRkLCAweGIwLCAweDQzLCAweGQ4 LCAweDM0LCAweDRiLCAweDEwLCAweDcwLCAweGIxLCAweDhiLCAweGVkLCAweGVhLAorKyAgICAw eDA3LCAweDkyLCAweDlmLCAweDZjLCAweDc5LCAweDMxLCAweGFmLCAweDgxLCAweDI5LCAweGVi LCAweDZlLCAweGNhLAorKyAgICAweDMyLCAweDQ4LCAweDI4LCAweGU3LCAweDAyLCAweDVkLCAw eGE2LCAweGE2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyNTZfcHJfbm9uY2VbXSA9IHsKKysgICAgMHgzYSwgMHhhZSwgMHgxNSwg MHhhOSwgMHg5OSwgMHhkYywgMHhlNCwgMHg2NywgMHgzNCwgMHgzYiwgMHg3MCwgMHgxNSwKKysg ICAgMHhhYSwgMHhkMywgMHgzMCwgMHg5YQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0geworKyAgICAweDEzLCAweDFkLCAweDI0LCAweDA0LCAweGIwLCAweDE4LCAw eDgxLCAweDE1LCAweDIxLCAweDUxLCAweDJhLCAweDI0LAorKyAgICAweDUyLCAweDYxLCAweGJl LCAweDY0LCAweDgyLCAweDZiLCAweDU1LCAweDJmLCAweGUyLCAweGYxLCAweDQwLCAweDdkLAor KyAgICAweDcxLCAweGQ4LCAweDAxLCAweDg2LCAweDE1LCAweGI3LCAweDhiLCAweGI1CisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy NTZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4OGYsIDB4YTYsIDB4NTQsIDB4NWYs IDB4YjEsIDB4ZDAsIDB4ZDgsIDB4YzMsIDB4ZTcsIDB4MGMsIDB4MTUsIDB4YTksCisrICAgIDB4 MjMsIDB4NmUsIDB4ZmUsIDB4ZmIsIDB4OTMsIDB4ZjcsIDB4M2EsIDB4YmQsIDB4NTksIDB4MDEs IDB4ZmEsIDB4MTgsCisrICAgIDB4OGUsIDB4ZTksIDB4MWEsIDB4YTksIDB4NzgsIDB4ZmMsIDB4 NzksIDB4MGIKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweGNmLCAweDI0 LCAweGI5LCAweGViLCAweGIzLCAweGQ0LCAweGNkLCAweDE3LCAweDM3LCAweDM4LCAweDc1LCAw eDc5LAorKyAgICAweDE1LCAweGNiLCAweDJkLCAweDc1LCAweDUxLCAweGYxLCAweGNjLCAweGFh LCAweDMyLCAweGE0LCAweGE3LCAweDM2LAorKyAgICAweDdjLCAweDVjLCAweGU0LCAweDQ3LCAw eGYxLCAweDNlLCAweDFkLCAweGU1CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewor KyAgICAweDUyLCAweDQyLCAweGZhLCAweGViLCAweDg1LCAweGUwLCAweDMwLCAweDIyLCAweDc5 LCAweDAwLCAweDE2LCAweGIyLAorKyAgICAweDg4LCAweDJmLCAweDE0LCAweDZhLCAweGI3LCAw eGZjLCAweGI3LCAweDUzLCAweGRjLCAweDRhLCAweDEyLCAweGVmLAorKyAgICAweDU0LCAweGQ2 LCAweDMzLCAweGU5LCAweDIwLCAweGQ2LCAweGZkLCAweDU2CisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25h bGlucHV0MltdID0geworKyAgICAweGY0LCAweGY2LCAweDQ5LCAweGExLCAweDJkLCAweDY0LCAw eDJiLCAweDMwLCAweDU4LCAweGY4LCAweGJkLCAweGI4LAorKyAgICAweDc1LCAweGViLCAweGJi LCAweDVlLCAweDFjLCAweDliLCAweDgxLCAweDZhLCAweGRhLCAweDE0LCAweDg2LCAweDZlLAor KyAgICAweGQwLCAweGRhLCAweDE4LCAweGI3LCAweDg4LCAweGZiLCAweDU5LCAweGYzCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy NTZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4MjEsIDB4Y2QsIDB4NmUsIDB4NDYs IDB4YWQsIDB4OTksIDB4MDcsIDB4MTcsIDB4YjQsIDB4M2QsIDB4NzYsIDB4MGEsCisrICAgIDB4 ZmYsIDB4NWIsIDB4NTIsIDB4NTAsIDB4NzgsIDB4ZGYsIDB4MWYsIDB4MjQsIDB4MDYsIDB4MGQs IDB4M2YsIDB4NzQsCisrICAgIDB4YTksIDB4YzksIDB4MzcsIDB4Y2YsIDB4ZDgsIDB4MjYsIDB4 MjUsIDB4OTEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhhNywgMHhhZiwg MHgyZiwgMHgyOSwgMHhlMCwgMHgzYSwgMHg3MiwgMHg5NSwgMHg5NiwgMHgxYywgMHhhOSwgMHhm MCwKKysgICAgMHg0YSwgMHgxNywgMHg0ZCwgMHg2NiwgMHgwNiwgMHgxMCwgMHhiZiwgMHgzOSwg MHg4OSwgMHg4OCwgMHhiOCwgMHg5MSwKKysgICAgMHgzNywgMHgxOCwgMHg5OSwgMHhjZiwgMHg4 YywgMHg1MywgMHgzYiwgMHg3ZQorK307CisrCisrLyogSE1BQyBTSEEtMjU2IE5vIFBSICAqLwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9l bnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg5NiwgMHhiNywgMHg1MywgMHgyMiwgMHgxZSwgMHg1 MiwgMHgyYSwgMHg5NiwgMHhiMSwgMHgxNSwgMHgzYywgMHgzNSwKKysgICAgMHg1YSwgMHg4Yiwg MHhkMywgMHg0YSwgMHhhNiwgMHg2YywgMHg4MywgMHgwYSwgMHg3ZCwgMHhhMywgMHgyMywgMHgz ZCwKKysgICAgMHg0MywgMHhhMSwgMHgwNywgMHgyYywgMHgyZCwgMHhlMywgMHg4MSwgMHhjYwor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X25vbmNlW10gPSB7CisrICAgIDB4ZjEsIDB4YWMsIDB4OTcsIDB4Y2IsIDB4NWUsIDB4 MDYsIDB4NDgsIDB4ZDIsIDB4OTQsIDB4YmUsIDB4MTUsIDB4MmUsCisrICAgIDB4YzcsIDB4ZmMs IDB4YzIsIDB4MDEKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysg ICAgMHg5OCwgMHhjNSwgMHgxZSwgMHgzNSwgMHg1ZSwgMHg4OSwgMHgwZCwgMHhjZSwgMHg2NCwg MHg2ZCwgMHgxOCwgMHhhNywKKysgICAgMHg1YSwgMHhjNiwgMHhmMywgMHhlNywgMHhkNiwgMHg5 ZSwgMHhjMCwgMHhlYSwgMHhiNywgMHgzYSwgMHg4ZCwgMHg2NSwKKysgICAgMHhiOCwgMHhlYiwg MHgxMCwgMHhkNywgMHg1NywgMHgxOCwgMHhhMCwgMHgzMgorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1 dFtdID0geworKyAgICAweDFiLCAweDEwLCAweGFmLCAweGFjLCAweGQwLCAweDY1LCAweDk1LCAw eGFkLCAweDA0LCAweGFkLCAweDAzLCAweDFjLAorKyAgICAweGUwLCAweDQwLCAweGQ2LCAweDNl LCAweDFjLCAweDQ2LCAweDUzLCAweDM5LCAweDdjLCAweGUyLCAweGJjLCAweGRhLAorKyAgICAw eDhjLCAweGEyLCAweDMzLCAweGE3LCAweDlhLCAweDI2LCAweGQzLCAweDI3CisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfaW50 X3JldHVybmVkYml0c1tdID0geworKyAgICAweGJhLCAweDYxLCAweDBlLCAweDU1LCAweGZlLCAw eDExLCAweDhhLCAweDllLCAweDBmLCAweDgwLCAweGRmLCAweDFkLAorKyAgICAweDAzLCAweDBh LCAweGZlLCAweDE1LCAweDk0LCAweDI4LCAweDRiLCAweGJhLCAweGY0LCAweDlmLCAweDUxLCAw eDI1LAorKyAgICAweDg4LCAweGU1LCAweDRlLCAweGZiLCAweGFmLCAweGNlLCAweDY5LCAweDkw CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4NjIsIDB4N2YsIDB4MWUs IDB4NmIsIDB4ZTgsIDB4OGUsIDB4ZTEsIDB4MzUsIDB4N2QsIDB4OWIsIDB4NGYsIDB4YzcsCisr ICAgIDB4ZWMsIDB4YzgsIDB4YWMsIDB4ZWYsIDB4NmIsIDB4MTMsIDB4OWUsIDB4MDUsIDB4NTYs IDB4YzEsIDB4MDgsIDB4ZjksCisrICAgIDB4MmYsIDB4MGYsIDB4MjcsIDB4OWMsIDB4ZDQsIDB4 MTUsIDB4ZWQsIDB4MmQKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsK KysgICAgMHhjNywgMHg3NiwgMHg2ZSwgMHhhOSwgMHhkMiwgMHhiMiwgMHg3NiwgMHg0MCwgMHg4 MiwgMHgyNSwgMHgyYywgMHhiMywKKysgICAgMHg2ZiwgMHhhYywgMHhlOSwgMHg3NCwgMHhlZiwg MHg4ZiwgMHgzYywgMHg4ZSwgMHhjZCwgMHhmMSwgMHhiZiwgMHhiMywKKysgICAgMHg0OSwgMHg3 NywgMHgzNCwgMHg4OCwgMHg1MiwgMHgzNiwgMHhlNiwgMHgyZQorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxp bnB1dDJbXSA9IHsKKysgICAgMHg4ZCwgMHhiOCwgMHgwYywgMHhkMSwgMHhiZiwgMHg3MCwgMHhm NiwgMHgxOSwgMHhjMywgMHg0MSwgMHg4MCwgMHg5ZiwKKysgICAgMHhlMSwgMHhhNSwgMHhhNCwg MHgxZiwgMHgyYywgMHgyNiwgMHhiMSwgMHhlNSwgMHhkOCwgMHhlYiwgMHhiZSwgMHhmOCwKKysg ICAgMHhkZiwgMHg4OCwgMHg2YSwgMHg4OSwgMHhkNiwgMHgwNSwgMHhkOCwgMHg5ZAorK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2 X3JldHVybmVkYml0c1tdID0geworKyAgICAweDQzLCAweDEyLCAweDJhLCAweDJjLCAweDQwLCAw eDUzLCAweDJlLCAweDdjLCAweDY2LCAweDM0LCAweGFjLCAweGMzLAorKyAgICAweDQzLCAweGUz LCAweGUwLCAweDZhLCAweGZjLCAweGZhLCAweGVhLCAweDg3LCAweDIxLCAweDFmLCAweGUyLCAw eDI2LAorKyAgICAweGM0LCAweGY5LCAweDA5LCAweDlhLCAweDBkLCAweDZlLCAweDdmLCAweGUw CisrfTsKKysKKysvKiBITUFDIFNIQS0zODQgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dFtdID0gewor KyAgICAweDY5LCAweDgxLCAweDk4LCAweDg4LCAweDQ0LCAweGY1LCAweGQ2LCAweDJlLCAweDAw LCAweDA4LCAweDNiLCAweGM1LAorKyAgICAweGZiLCAweGQ3LCAweDhlLCAweDZmLCAweDIzLCAw eGY4LCAweDZkLCAweDA5LCAweGQ2LCAweDg1LCAweDQ5LCAweGQxLAorKyAgICAweGY4LCAweDZk LCAweGE0LCAweDU4LCAweDU0LCAweGZkLCAweDg4LCAweGE5CisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfbm9uY2VbXSA9 IHsKKysgICAgMHg2ZSwgMHgzOCwgMHg4MSwgMHhjYSwgMHhiNywgMHhlOCwgMHg2ZSwgMHg2Niwg MHg0OSwgMHg4YSwgMHhiMiwgMHg1OSwKKysgICAgMHhlZSwgMHgxNiwgMHhjOSwgMHhkZQorK307 CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGZlLCAweDRj LCAweGQ5LCAweGY0LCAweDc4LCAweDNiLCAweDA4LCAweDQxLCAweDhkLCAweDhmLCAweDU1LCAw eGM0LAorKyAgICAweDQzLCAweDU2LCAweGI2LCAweDEyLCAweDM2LCAweDZiLCAweDMwLCAweGI3 LCAweDVlLCAweGUxLCAweGI5LCAweDQ3LAorKyAgICAweDA0LCAweGIxLCAweDRlLCAweGE5LCAw eDAwLCAweGExLCAweDUyLCAweGExCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Cisr ICAgIDB4ODksIDB4ZTksIDB4Y2MsIDB4OGYsIDB4MjcsIDB4M2MsIDB4MjYsIDB4ZDEsIDB4OTUs IDB4YzgsIDB4N2QsIDB4MGYsCisrICAgIDB4NWIsIDB4MWEsIDB4ZjAsIDB4NzgsIDB4MzksIDB4 NTYsIDB4NmYsIDB4YTQsIDB4MjMsIDB4ZTcsIDB4ZDEsIDB4ZGEsCisrICAgIDB4N2MsIDB4NjYs IDB4MzMsIDB4YTAsIDB4OTAsIDB4YzksIDB4OTIsIDB4ODgKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5w dXRwcltdID0geworKyAgICAweGJlLCAweDNkLCAweDdjLCAweDBkLCAweGNhLCAweGRhLCAweDdj LCAweDQ5LCAweGI4LCAweDEyLCAweDM2LCAweGMwLAorKyAgICAweGRiLCAweGFkLCAweDM1LCAw eGE4LCAweGM3LCAweDBiLCAweDJhLCAweDJjLCAweDY5LCAweDZkLCAweDI1LCAweDU2LAorKyAg ICAweDYzLCAweDgyLCAweDExLCAweDNlLCAweGE3LCAweDMzLCAweDcwLCAweDcyCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf cHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDgyLCAweDNkLCAweGU2LCAweDU0LCAw eDgwLCAweDQyLCAweGY4LCAweGJhLCAweDkwLCAweDRmLCAweDA2LCAweGE2LAorKyAgICAweGQy LCAweDdmLCAweGJmLCAweDc5LCAweDdjLCAweDEyLCAweDdkLCAweGE2LCAweGEyLCAweDY2LCAw eGU4LCAweGE2LAorKyAgICAweGMwLCAweGQ2LCAweDRhLCAweDU1LCAweGJmLCAweGQ4LCAweDBh LCAweGM1LCAweGY4LCAweDAzLCAweDg4LCAweGRkLAorKyAgICAweDhlLCAweDg3LCAweGQxLCAw eDVhLCAweDQ4LCAweDI2LCAweDcyLCAweDJhLCAweDhlLCAweGNmLCAweGVlLCAweGJhCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEz ODRfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweDhmLCAweGZmLCAweGQ5LCAweDg0 LCAweGJiLCAweDg1LCAweDNhLCAweDY2LCAweGExLCAweDIxLCAweGNlLCAweGIyLAorKyAgICAw eDNhLCAweDNhLCAweDE3LCAweDIyLCAweDE5LCAweGFlLCAweGM3LCAweGI2LCAweDYzLCAweDgx LCAweGQ1LCAweGZmLAorKyAgICAweDBkLCAweGM4LCAweGUxLCAweGFmLCAweDU3LCAweGQyLCAw eGNiLCAweDYwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4ZDcsIDB4 ZmIsIDB4YzksIDB4ZTgsIDB4ZTIsIDB4ZjIsIDB4YWEsIDB4NGMsIDB4YjgsIDB4NTEsIDB4MmYs IDB4ZTEsCisrICAgIDB4MjIsIDB4YmEsIDB4ZjMsIDB4ZGEsIDB4MGEsIDB4MTksIDB4NzYsIDB4 NzEsIDB4NTcsIDB4YjIsIDB4MWQsIDB4OTQsCisrICAgIDB4MDksIDB4NjksIDB4NmMsIDB4ZDMs IDB4OTcsIDB4NTEsIDB4ODEsIDB4ODcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysg ICAgMHhlNiwgMHgxOSwgMHgyOCwgMHhhOCwgMHgyMSwgMHhjZSwgMHg1ZSwgMHhkYiwgMHgyNCwg MHg3OSwgMHg4YywgMHg3NiwKKysgICAgMHg1ZCwgMHg3MywgMHhiMiwgMHhkZiwgMHhhYywgMHhl ZiwgMHg4NSwgMHhhNywgMHgzYiwgMHgxOSwgMHgwOSwgMHg4YiwKKysgICAgMHg3ZiwgMHg5OCwg MHgyOCwgMHhhOSwgMHg5MywgMHhkOCwgMHg3YSwgMHhhZCwgMHg1NSwgMHg4YiwgMHgyNCwgMHg5 ZCwKKysgICAgMHhlNiwgMHg5OCwgMHhmZSwgMHg0NywgMHhkNSwgMHg0OCwgMHhjMSwgMHgyMywg MHhkOCwgMHgxZCwgMHg2MiwgMHg3NQorK307CisrCisrLyogSE1BQyBTSEEtMzg0IE5vIFBSICAq LworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHhjMywgMHg1NiwgMHgyYiwgMHgxZCwgMHhjMiwg MHhiYiwgMHhhOCwgMHhmMCwgMHhhZSwgMHgxYiwgMHgwZCwgMHhkMywKKysgICAgMHg1YSwgMHg2 YywgMHhkYSwgMHg1NywgMHg4ZSwgMHhhNSwgMHg4YSwgMHgwZCwgMHg2YywgMHg0YiwgMHgxOCwg MHhiMSwKKysgICAgMHgwNCwgMHgzZSwgMHhiNCwgMHg5OSwgMHgzNSwgMHhjNCwgMHhjMCwgMHg1 ZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X25vbmNlW10gPSB7CisrICAgIDB4YzUsIDB4NDksIDB4MWUsIDB4NjYsIDB4Mjcs IDB4OTIsIDB4YmUsIDB4ZWMsIDB4YjUsIDB4MWUsIDB4NGIsIDB4YjEsCisrICAgIDB4MzgsIDB4 ZTMsIDB4ZWIsIDB4NjIKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsK KysgICAgMHhiZSwgMHhlNywgMHg2YiwgMHg1NywgMHhkZSwgMHg4OCwgMHgxMSwgMHg5NiwgMHg5 YiwgMHg2ZSwgMHhlYSwgMHhlNSwKKysgICAgMHg2MywgMHg4MywgMHg0YywgMHhiNiwgMHg4ZCwg MHg2NiwgMHhhYSwgMHgxZiwgMHg4YiwgMHg1NCwgMHhlNywgMHg2MiwKKysgICAgMHg2ZCwgMHg1 YSwgMHhmYywgMHhiZiwgMHg5NywgMHhiYSwgMHhjZCwgMHg3NworK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxp bnB1dFtdID0geworKyAgICAweGU1LCAweDI4LCAweDVmLCAweDQzLCAweGY1LCAweDgzLCAweDZl LCAweDBhLCAweDgzLCAweDVjLCAweGUzLCAweDgxLAorKyAgICAweDAzLCAweGYyLCAweGY4LCAw eDc4LCAweDAwLCAweDdjLCAweDk1LCAweDg3LCAweDE2LCAweGQ2LCAweDZjLCAweDU4LAorKyAg ICAweDMzLCAweDZjLCAweDUzLCAweDM1LCAweDBkLCAweDY2LCAweGUzLCAweGNlCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf aW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGUyLCAweDFmLCAweGYzLCAweGRhLCAweDBk LCAweDE5LCAweDk5LCAweDg3LCAweGM0LCAweDkwLCAweGEyLCAweDMxLAorKyAgICAweGNhLCAw eDJhLCAweDg5LCAweDU4LCAweDQzLCAweDQ0LCAweGI4LCAweGRlLCAweGNmLCAweGE0LCAweGJl LCAweDNiLAorKyAgICAweDUzLCAweDI2LCAweDIyLCAweDMxLCAweDc2LCAweDQxLCAweDIyLCAw eGI1LCAweGE4LCAweDcwLCAweDJmLCAweDRiLAorKyAgICAweDY0LCAweDk1LCAweDRkLCAweDQ4 LCAweDk2LCAweDM1LCAweGU2LCAweGJkLCAweDNjLCAweDM0LCAweGRiLCAweDFiCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRf ZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4NzcsIDB4NjEsIDB4YmEsIDB4YmMsIDB4 ZjIsIDB4YzEsIDB4ZjMsIDB4NGIsIDB4ODYsIDB4NjUsIDB4ZmQsIDB4NDgsCisrICAgIDB4MGUs IDB4M2MsIDB4MDIsIDB4NWUsIDB4YTIsIDB4N2EsIDB4NmIsIDB4N2MsIDB4ZWQsIDB4MjEsIDB4 NWUsIDB4ZjksCisrICAgIDB4Y2QsIDB4Y2QsIDB4NzcsIDB4MDcsIDB4MmIsIDB4YmUsIDB4YzUs IDB4NWMKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHgx OCwgMHgyNCwgMHg1ZiwgMHhjNiwgMHg4NCwgMHhkMSwgMHg2NywgMHhjMywgMHg5YSwgMHgxMSwg MHhhNSwgMHg4YywKKysgICAgMHgwNywgMHgzOSwgMHgyMSwgMHg4MywgMHg0ZCwgMHgwNCwgMHhj NCwgMHg2YSwgMHgyOCwgMHgxOSwgMHhjZiwgMHg5MiwKKysgICAgMHgyMSwgMHhkOSwgMHg5ZSwg MHg0MSwgMHg3MiwgMHg2YywgMHg5ZSwgMHg2MworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9 IHsKKysgICAgMHg5NiwgMHg2NywgMHg0MSwgMHgyOCwgMHg5YiwgMHhiNywgMHg5MiwgMHg4ZCwg MHg2NCwgMHgzYiwgMHhlNCwgMHhjZiwKKysgICAgMHg3ZSwgMHhhYSwgMHgxZSwgMHhiMSwgMHg0 YiwgMHgxZCwgMHgwOSwgMHg1NiwgMHg2NywgMHg5YywgMHhjNiwgMHg2ZCwKKysgICAgMHgzYiwg MHhlOCwgMHg5MSwgMHg5ZCwgMHhlMSwgMHg4YSwgMHhiNywgMHgzMgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3JldHVybmVk Yml0c1tdID0geworKyAgICAweGUzLCAweDU5LCAweDYxLCAweDM4LCAweDkyLCAweGVjLCAweGUy LCAweDNjLCAweGZmLCAweGI3LCAweGRiLCAweDE5LAorKyAgICAweDBmLCAweDViLCAweDkzLCAw eDY4LCAweDBkLCAweGE0LCAweDk0LCAweDQwLCAweDcyLCAweDBiLCAweGUwLCAweGVkLAorKyAg ICAweDRkLCAweGNkLCAweDY4LCAweGEwLCAweDFlLCAweGZlLCAweDY3LCAweGIyLCAweGZhLCAw eDIxLCAweDU2LCAweDc0LAorKyAgICAweGE0LCAweGFkLCAweGNmLCAweGI3LCAweDYwLCAweDY2 LCAweDJlLCAweDQwLCAweGRlLCAweDgyLCAweGNhLCAweGZiCisrfTsKKysKKysvKiBITUFDIFNI QS01MTIgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGFhLCAweDllLCAweDQ1 LCAweDY3LCAweDBlLCAweDAwLCAweDJhLCAweDY3LCAweDk4LCAweGQ2LCAweGRhLCAweDBiLAor KyAgICAweDBmLCAweDE3LCAweDdlLCAweGFjLCAweGZkLCAweDI3LCAweGM0LCAweGNhLCAweDg0 LCAweGRmLCAweGRlLCAweGJhLAorKyAgICAweDg1LCAweGQ5LCAweGJlLCAweDhmLCAweGYzLCAw eGZmLCAweDkxLCAweDRkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfbm9uY2VbXSA9IHsKKysgICAgMHg4YywgMHg0OSwg MHgyZiwgMHg1OCwgMHgxZSwgMHg3YSwgMHhkYSwgMHg0YiwgMHg3ZSwgMHg4YSwgMHgzMCwgMHg3 YiwKKysgICAgMHg4NiwgMHhlYSwgMHhhZiwgMHhhMgorK307CisrCisrX19maXBzX2NvbnN0c2Vn CisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDcxLCAweGUxLCAweGJiLCAweGFkLCAweGE3LCAw eDRiLCAweDJlLCAweDMxLCAweDNiLCAweDBiLCAweGVjLCAweDI0LAorKyAgICAweDk5LCAweDM4 LCAweGJjLCAweGFhLCAweDA1LCAweDRjLCAweDQ2LCAweDQ0LCAweGZhLCAweGFkLCAweDhlLCAw eDAyLAorKyAgICAweGMxLCAweDdlLCAweGFkLCAweGVjLCAweDU0LCAweGE2LCAweGQwLCAweGFk CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4M2QsIDB4NmUsIDB4YTYs IDB4YTgsIDB4MjksIDB4MmEsIDB4YjIsIDB4ZjUsIDB4OTgsIDB4NDIsIDB4ZTQsIDB4OTIsCisr ICAgIDB4NzgsIDB4MjIsIDB4NjcsIDB4ZmQsIDB4MWIsIDB4MTUsIDB4MWUsIDB4MjksIDB4YWEs IDB4NzEsIDB4M2MsIDB4M2MsCisrICAgIDB4ZTcsIDB4MDUsIDB4MjAsIDB4YTksIDB4MjksIDB4 YzYsIDB4NzUsIDB4NzEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweGFi LCAweGI5LCAweDE2LCAweGQ4LCAweDU1LCAweDM1LCAweDU0LCAweGI3LCAweDk3LCAweDNmLCAw eDk0LCAweGJjLAorKyAgICAweDJmLCAweDdjLCAweDcwLCAweGM3LCAweGQwLCAweGVkLCAweGI3 LCAweDRiLCAweGY3LCAweGY2LCAweDZjLCAweDAzLAorKyAgICAweDBjLCAweGIwLCAweDAzLCAw eGQ4LCAweGJiLCAweDcxLCAweGQ5LCAweDEwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1td ID0geworKyAgICAweDhlLCAweGQzLCAweGZkLCAweDUyLCAweDllLCAweDgzLCAweDA4LCAweDQ5 LCAweDE4LCAweDZlLCAweDIzLCAweDU2LAorKyAgICAweDVjLCAweDQ1LCAweDkzLCAweDM0LCAw eDA1LCAweGUyLCAweDk4LCAweDhmLCAweDBjLCAweGQ0LCAweDMyLCAweDBjLAorKyAgICAweGZk LCAweGRhLCAweDVmLCAweDkyLCAweDNhLCAweDhjLCAweDgxLCAweGJkLCAweGY2LCAweDZjLCAw eDU1LCAweGZkLAorKyAgICAweGI4LCAweDIwLCAweGNlLCAweDhkLCAweDk3LCAweDI3LCAweGU4 LCAweGU4LCAweGUwLCAweGIzLCAweDg1LCAweDUwLAorKyAgICAweGEyLCAweGMyLCAweGIyLCAw eDk1LCAweDFkLCAweDQ4LCAweGQzLCAweDdiLCAweDRiLCAweDc4LCAweDEzLCAweDM1LAorKyAg ICAweDA1LCAweDE3LCAweGJlLCAweDBkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0g eworKyAgICAweGMzLCAweGZjLCAweDk1LCAweGFhLCAweDY5LCAweDA2LCAweGFlLCAweDU5LCAw eDQxLCAweGNlLCAweDI2LCAweDA4LAorKyAgICAweDI5LCAweDZkLCAweDQ1LCAweGRhLCAweGU4 LCAweGIzLCAweDZjLCAweDk1LCAweDYwLCAweDBmLCAweDcwLCAweDJjLAorKyAgICAweDEwLCAw eGJhLCAweDM4LCAweDhjLCAweGNmLCAweDI5LCAweDk5LCAweGFhCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9w eWlucHV0cHIyW10gPSB7CisrICAgIDB4M2IsIDB4OWEsIDB4MjUsIDB4Y2UsIDB4ZDcsIDB4Zjks IDB4NWMsIDB4ZDEsIDB4M2EsIDB4M2UsIDB4YWEsIDB4NzEsCisrICAgIDB4MTQsIDB4M2UsIDB4 MTksIDB4ZTgsIDB4Y2UsIDB4ZTYsIDB4ZmUsIDB4NTEsIDB4ODQsIDB4ZTksIDB4MWIsIDB4ZmUs CisrICAgIDB4M2YsIDB4YTcsIDB4ZjIsIDB4ZmQsIDB4NzYsIDB4NWYsIDB4NmEsIDB4ZTcKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhiNywgMHg4MiwgMHhhOSwgMHg1Nywg MHg4MSwgMHg2NywgMHg1MywgMHhiNSwgMHhhMSwgMHhlOSwgMHgzZCwgMHgzNSwKKysgICAgMHhm OSwgMHhlNCwgMHg5NywgMHhiZSwgMHhhNiwgMHhjYSwgMHhmMSwgMHgwMSwgMHgxMywgMHgwOSwg MHhlNywgMHgyMSwKKysgICAgMHhjMCwgMHhlZCwgMHg5MywgMHg1ZCwgMHg0YiwgMHhmNCwgMHhl YiwgMHg4ZCwgMHg1MywgMHgyNSwgMHg4YSwgMHhjNCwKKysgICAgMHhiMSwgMHg2ZiwgMHg2ZSwg MHgzNywgMHhjZCwgMHgyZSwgMHhhYywgMHgzOSwgMHhiMiwgMHhiNiwgMHg5OSwgMHhhMywKKysg ICAgMHg4MiwgMHgwMCwgMHhiMCwgMHgyMSwgMHhmMCwgMHhjNywgMHgyZiwgMHg0YywgMHg3Mywg MHg5MiwgMHhmZCwgMHgwMCwKKysgICAgMHhiNiwgMHhhZiwgMHhiYywgMHhkMworK307CisrCisr LyogSE1BQyBTSEEtNTEyIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg2ZSwg MHg4NSwgMHhlNiwgMHgyNSwgMHg5NiwgMHgyOSwgMHhhNywgMHg1MiwgMHg1YiwgMHg2MCwgMHhi YSwgMHhhYSwKKysgICAgMHhkZSwgMHhkYiwgMHgzNiwgMHgwYSwgMHg1MSwgMHg5YSwgMHgxNSwg MHhhZSwgMHg2ZSwgMHgxOCwgMHhkMywgMHhmZSwKKysgICAgMHgzOSwgMHhiOSwgMHg0YSwgMHg5 NiwgMHhmOCwgMHg3NywgMHhjYiwgMHg5NQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX25vbmNlW10gPSB7CisrICAgIDB4ZTAs IDB4YTYsIDB4NWQsIDB4MDgsIDB4YzMsIDB4N2MsIDB4YWUsIDB4MjUsIDB4MmUsIDB4ODAsIDB4 ZDEsIDB4M2UsCisrICAgIDB4ZDksIDB4YWYsIDB4NDMsIDB4M2MKKyt9OworKworK19fZmlwc19j b25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg1MywgMHg5OSwgMHg1MiwgMHg1ZiwgMHgx MSwgMHhhOSwgMHg2NCwgMHg2NiwgMHgyMCwgMHg1ZSwgMHgxYiwgMHg1ZiwKKysgICAgMHg0Miwg MHhiMywgMHhmNCwgMHhkYSwgMHhlZCwgMHhiYiwgMHg2MywgMHhjMSwgMHgyMywgMHhhZiwgMHhk MCwgMHgwMSwKKysgICAgMHg5MCwgMHgzYiwgMHhkMCwgMHg3OCwgMHhlNCwgMHgwYiwgMHhhNywg MHgyMAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDg1LCAweDkwLCAweDgw LCAweGQzLCAweDk4LCAweGYxLCAweDUzLCAweDZkLCAweDY4LCAweDE1LCAweDhmLCAweGU1LAor KyAgICAweDYwLCAweDNmLCAweDE3LCAweDI5LCAweDU1LCAweDhkLCAweDMzLCAweGIxLCAweDQ1 LCAweDY0LCAweDY0LCAweDhkLAorKyAgICAweDUwLCAweDIxLCAweDg5LCAweGFlLCAweGY2LCAw eGZkLCAweDMyLCAweDczCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDI4 LCAweDU2LCAweDMwLCAweDZmLCAweGY0LCAweGExLCAweDQ4LCAweGUwLCAweGM5LCAweGY1LCAw eDc1LCAweDkwLAorKyAgICAweGNjLCAweGZiLCAweGRmLCAweGRmLCAweDcxLCAweDNkLCAweDBh LCAweDlhLCAweDAzLCAweDY1LCAweDNiLCAweDE4LAorKyAgICAweDYxLCAweGUzLCAweGQxLCAw eGRhLCAweGNjLCAweDRhLCAweGZlLCAweDU1LCAweDM4LCAweGY4LCAweDIxLCAweDZiLAorKyAg ICAweGZhLCAweDE4LCAweDAxLCAweDQyLCAweDM5LCAweDJmLCAweDk5LCAweDUzLCAweDM4LCAw eDE1LCAweDgyLCAweDM0LAorKyAgICAweGM1LCAweDkzLCAweDkyLCAweGJjLCAweDRkLCAweDc1 LCAweDFhLCAweDVmLCAweDIxLCAweDI3LCAweGNjLCAweGExLAorKyAgICAweGIxLCAweDU3LCAw eDY5LCAweGU4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4OGMsIDB4 NTIsIDB4N2UsIDB4NzcsIDB4NzIsIDB4M2YsIDB4YTMsIDB4MDQsIDB4OTcsIDB4MTAsIDB4OWIs IDB4NDEsCisrICAgIDB4YmQsIDB4ZTgsIDB4ZmYsIDB4ODksIDB4ZWQsIDB4ODAsIDB4ZTMsIDB4 YmQsIDB4YWEsIDB4MTIsIDB4MmQsIDB4Y2EsCisrICAgIDB4NzUsIDB4ODIsIDB4MzYsIDB4Nzcs IDB4ODgsIDB4Y2QsIDB4YTYsIDB4NzMKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNl ZWRbXSA9IHsKKysgICAgMHg3ZSwgMHgzMiwgMHhlMywgMHg2OSwgMHg2OSwgMHgwNywgMHgzNCwg MHhhMiwgMHgxNiwgMHhhMiwgMHg1ZCwgMHgxYSwKKysgICAgMHgxMCwgMHg5MSwgMHhkMywgMHhl MiwgMHgyMSwgMHhhMiwgMHhhMywgMHhkZCwgMHhjZCwgMHgwYywgMHgwOSwgMHg4NiwKKysgICAg MHgxMSwgMHhlMSwgMHg1MCwgMHhmZiwgMHg1YywgMHhiNywgMHhlYiwgMHg1YworK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2Fk ZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHg3ZiwgMHg3OCwgMHg2NiwgMHhkOCwgMHhmYiwg MHg2NywgMHhjZiwgMHg4ZCwgMHg4YywgMHgwOCwgMHgzMCwgMHhhNSwKKysgICAgMHhmOCwgMHg3 ZCwgMHhjZiwgMHg0NCwgMHg1OSwgMHhjZSwgMHhmOCwgMHhkZiwgMHg1OCwgMHhkMywgMHg2MCwg MHhjYiwKKysgICAgMHhhOCwgMHg2MCwgMHhiOSwgMHgwNywgMHhjNCwgMHhiMSwgMHg5NSwgMHg0 OAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX3JldHVybmVkYml0c1tdID0geworKyAgICAweGRmLCAweGE3LCAweDM2LCAweGQ0 LCAweGRjLCAweDVkLCAweDRkLCAweDMxLCAweGFkLCAweDY5LCAweDQ2LCAweDlmLAorKyAgICAw eGYxLCAweDdjLCAweGQ3LCAweDNiLCAweDRmLCAweDU1LCAweGYyLCAweGQ3LCAweGI5LCAweDlk LCAweGFkLCAweDdhLAorKyAgICAweDc5LCAweDA4LCAweDU5LCAweGE1LCAweGRjLCAweDc0LCAw eGY1LCAweDliLCAweDczLCAweGQyLCAweDEzLCAweDI1LAorKyAgICAweDBiLCAweDgxLCAweDA4 LCAweDA4LCAweDI1LCAweGZiLCAweDM5LCAweGYyLCAweGYwLCAweGEzLCAweGE0LCAweDhkLAor KyAgICAweGVmLCAweDA1LCAweDllLCAweGI4LCAweGM3LCAweDUyLCAweGU0LCAweDBlLCAweDQy LCAweGFhLCAweDdjLCAweDc5LAorKyAgICAweGMyLCAweGQ2LCAweGZkLCAweGE1CisrfTsKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCistLS0gb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTYtMDMt MDEgMTY6MzM6MDcuNjIwOTE2NjEzICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2Zp cHMvZmlwc19kc2Ffc2VsZnRlc3QuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMDkxNjYxMyArMDEw MAorQEAgLTAsMCArMSwxOTIgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq 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 KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3BbXSA9IHsK KysgICAgMHhhOCwgMHg1MywgMHg3OCwgMHhkOCwgMHhmZCwgMHgzZiwgMHg4ZCwgMHg3MiwgMHhl YywgMHg3NCwgMHgxOCwgMHgwOCwKKysgICAgMHgwZCwgMHhhMiwgMHgxMywgMHgxNywgMHhlNCwg MHgzZSwgMHhjNCwgMHhiNiwgMHgyYiwgMHhhOCwgMHhjOCwgMHg2MiwKKysgICAgMHgzYiwgMHg3 ZSwgMHg0ZCwgMHgwNCwgMHg0NCwgMHgxZCwgMHhkMSwgMHhhMCwgMHg2NSwgMHg4NiwgMHg2Miwg MHg1OSwKKysgICAgMHg2NCwgMHg5MywgMHhjYSwgMHg4ZSwgMHg5ZSwgMHg4ZiwgMHhiYiwgMHg3 ZSwgMHgzNCwgMHhhYSwgMHhkZCwgMHhiNiwKKysgICAgMHgyZSwgMHg1ZCwgMHg2NywgMHhiNiwg MHhkMCwgMHg5YSwgMHg2ZSwgMHg2MSwgMHhiNywgMHg2OSwgMHhlNywgMHhjMywKKysgICAgMHg1 MiwgMHhhYSwgMHgyYiwgMHgxMCwgMHhlMiwgMHgwYywgMHhhMCwgMHg2MywgMHg2OSwgMHg2Mywg MHhiNSwgMHg1MiwKKysgICAgMHgzZSwgMHg4NiwgMHg0NywgMHgwZCwgMHhlYywgMHhiYiwgMHhl ZCwgMHhhMCwgMHgyNywgMHhlNywgMHg5NywgMHhlNywKKysgICAgMHhiNiwgMHg3NiwgMHgzNSwg MHhkNCwgMHhkNCwgMHg5YywgMHgzMCwgMHg3MCwgMHgwZSwgMHg3NCwgMHhhZiwgMHg4YSwKKysg ICAgMHgwZiwgMHhmMSwgMHg1NiwgMHhhOCwgMHgwMSwgMHhhZiwgMHg1NywgMHhhMiwgMHg2ZSwg MHg3MCwgMHg3OCwgMHhmMSwKKysgICAgMHhkOCwgMHgyZiwgMHg3NCwgMHg5MCwgMHg4ZSwgMHhj YiwgMHg2ZCwgMHgwNywgMHhlNywgMHgwYiwgMHgzNSwgMHgwMywKKysgICAgMHhlZSwgMHhkOSwg MHg0ZiwgMHhhMywgMHgyYywgMHhmMSwgMHg3YSwgMHg3ZiwgMHhjMywgMHhkNiwgMHhjZiwgMHg0 MCwKKysgICAgMHhkYywgMHg3YiwgMHgwMCwgMHg4MywgMHgwZSwgMHg2YSwgMHgyNSwgMHg2Niwg MHhkYywgMHgwNywgMHgzZSwgMHgzNCwKKysgICAgMHgzMywgMHgxMiwgMHg1MSwgMHg3YywgMHg2 YSwgMHhhNSwgMHgxNSwgMHgyYiwgMHg0YiwgMHhmZSwgMHhjZCwgMHgyZSwKKysgICAgMHg1NSwg MHgxZiwgMHhlZSwgMHgzNCwgMHg2MywgMHgxOCwgMHhhMSwgMHg1MywgMHg0MiwgMHgzYywgMHg5 OSwgMHg2YiwKKysgICAgMHgwZCwgMHg1ZCwgMHhjYiwgMHg5MSwgMHgwMiwgMHhhZSwgMHhkZCwg MHgzOCwgMHg3OSwgMHg4NiwgMHgxNiwgMHhmMSwKKysgICAgMHhmMSwgMHhlMCwgMHhkNiwgMHhj NCwgMHgwMywgMHg1MiwgMHg1YiwgMHgxZiwgMHg5YiwgMHgzZCwgMHg0ZCwgMHhjNywKKysgICAg MHg2NiwgMHhkZSwgMHgyZCwgMHhmYywgMHg0YSwgMHg1NiwgMHhkNywgMHhiOCwgMHhiYSwgMHg1 OSwgMHg2MywgMHhkNiwKKysgICAgMHgwZiwgMHgzZSwgMHgxNiwgMHgzMSwgMHg4OCwgMHg3MCwg MHhhZCwgMHg0MywgMHg2OSwgMHg1MiwgMHhlNSwgMHg1NywKKysgICAgMHg2NSwgMHgzNywgMHg0 ZSwgMHhhYiwgMHg4NSwgMHhlOCwgMHhlYywgMHgxNywgMHhkNiwgMHhiOSwgMHhhNCwgMHg1NCwK KysgICAgMHg3YiwgMHg5YiwgMHg1ZiwgMHgyNywgMHg1MiwgMHhmMywgMHgxMCwgMHg1YiwgMHhl OCwgMHgwOSwgMHhiMiwgMHgzYSwKKysgICAgMHgyYywgMHg4ZCwgMHg3NCwgMHg2OSwgMHhkYiwg MHgwMiwgMHhlMiwgMHg0ZCwgMHg1OSwgMHgyMywgMHg5NCwgMHhhNywKKysgICAgMHhkYiwgMHhh MCwgMHg2OSwgMHhlOQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rl c3RfMjA0OF9xW10gPSB7CisrICAgIDB4ZDIsIDB4NzcsIDB4MDQsIDB4NGUsIDB4NTAsIDB4ZjUs IDB4YTQsIDB4ZTMsIDB4ZjUsIDB4MTAsIDB4YTUsIDB4MGEsCisrICAgIDB4MGIsIDB4ODQsIDB4 ZmQsIDB4ZmYsIDB4YmMsIDB4YTAsIDB4NDcsIDB4ZWQsIDB4MjcsIDB4NjAsIDB4MjAsIDB4NTYs CisrICAgIDB4NzQsIDB4NDEsIDB4YTAsIDB4YTUKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfZ1tdID0geworKyAgICAweDEzLCAweGQ3LCAweDU0LCAw eGUyLCAweDFmLCAweGQyLCAweDQxLCAweDY1LCAweDVkLCAweGE4LCAweDkxLCAweGM1LAorKyAg ICAweDIyLCAweGE2LCAweDVhLCAweDcyLCAweGE4LCAweDliLCAweGRjLCAweDY0LCAweGVjLCAw eDliLCAweDU0LCAweGE4LAorKyAgICAweDIxLCAweGVkLCAweDRhLCAweDg5LCAweDhiLCAweDQ5 LCAweDBlLCAweDBjLCAweDRmLCAweGNiLCAweDcyLCAweDE5LAorKyAgICAweDJhLCAweDRhLCAw eDIwLCAweGY1LCAweDQxLCAweGYzLCAweGYyLCAweDkyLCAweDUzLCAweDk5LCAweGYwLCAweGJh LAorKyAgICAweGVjLCAweGY5LCAweDI5LCAweGFhLCAweGZiLCAweGY3LCAweDlkLCAweGZlLCAw eDQzLCAweDMyLCAweDM5LCAweDNiLAorKyAgICAweDMyLCAweGNkLCAweDJlLCAweDJmLCAweGNm LCAweDI3LCAweDJmLCAweDMyLCAweGE2LCAweDI3LCAweDQzLCAweDRhLAorKyAgICAweDBkLCAw eGYyLCAweDQyLCAweGI3LCAweDViLCAweDQxLCAweDRkLCAweGYzLCAweDcyLCAweDEyLCAweDFl LCAweDUzLAorKyAgICAweGE1LCAweDUzLCAweGYyLCAweDIyLCAweGY4LCAweDM2LCAweGIwLCAw eDAwLCAweGYwLCAweDE2LCAweDQ4LCAweDViLAorKyAgICAweDZiLCAweGQwLCAweDg5LCAweDg0 LCAweDUxLCAweDgwLCAweDFkLCAweGNkLCAweDhkLCAweGU2LCAweDRjLCAweGQ1LAorKyAgICAw eDM2LCAweDU2LCAweDk2LCAweGZmLCAweGM1LCAweDMyLCAweGQ1LCAweDI4LCAweGM1LCAweDA2 LCAweDYyLCAweDBhLAorKyAgICAweDk0LCAweDJhLCAweDAzLCAweDA1LCAweDA0LCAweDZkLCAw eDhmLCAweDE4LCAweDc2LCAweDM0LCAweDFmLCAweDFlLAorKyAgICAweDU3LCAweDBiLCAweGMz LCAweDk3LCAweDRiLCAweGE2LCAweGI5LCAweGE0LCAweDM4LCAweGU5LCAweDcwLCAweDIzLAor KyAgICAweDAyLCAweGEyLCAweGU2LCAweGU2LCAweDdiLCAweGZkLCAweDA2LCAweGQzLCAweDJi LCAweGM2LCAweDc5LCAweDk2LAorKyAgICAweDIyLCAweDcxLCAweGQ3LCAweGI0LCAweDBjLCAw eGQ3LCAweDJmLCAweDM4LCAweDZlLCAweDY0LCAweGUwLCAweGQ3LAorKyAgICAweGVmLCAweDg2 LCAweGNhLCAweDhjLCAweGE1LCAweGQxLCAweDQyLCAweDI4LCAweGRjLCAweDJhLCAweDRmLCAw eDE2LAorKyAgICAweGUzLCAweDE4LCAweDk4LCAweDg2LCAweGI1LCAweDk5LCAweDA2LCAweDc0 LCAweGY0LCAweDIwLCAweDBmLCAweDNhLAorKyAgICAweDRjLCAweGY2LCAweDVhLCAweDNmLCAw eDBkLCAweGRiLCAweGExLCAweGZhLCAweDY3LCAweDJkLCAweGZmLCAweDJmLAorKyAgICAweDVl LCAweDE0LCAweDNkLCAweDEwLCAweGU0LCAweGU5LCAweDdhLCAweGU4LCAweDRmLCAweDZkLCAw eGEwLCAweDk1LAorKyAgICAweDM1LCAweGQ1LCAweGI5LCAweGRmLCAweDI1LCAweDkxLCAweDgx LCAweGE3LCAweDliLCAweDYzLCAweGIwLCAweDY5LAorKyAgICAweGU5LCAweDQ5LCAweDk3LCAw eDJiLCAweDAyLCAweGJhLCAweDM2LCAweGIzLCAweDU4LCAweDZhLCAweGFiLCAweDdlLAorKyAg ICAweDQ1LCAweGYzLCAweDIyLCAweGY4LCAweDJlLCAweDRlLCAweDg1LCAweGNhLCAweDNhLCAw eGI4LCAweDU1LCAweDkxLAorKyAgICAweGIzLCAweGMyLCAweGE5LCAweDY2CisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3B1Yl9rZXlbXSA9IHsKKysg ICAgMHgyNCwgMHg1MiwgMHhmMywgMHhjYywgMHhiZSwgMHg5ZSwgMHhkNSwgMHhjYSwgMHg3ZCwg MHhjNywgMHg0YywgMHg2MCwKKysgICAgMHgyYiwgMHg5OSwgMHgyMiwgMHg2ZSwgMHg4ZiwgMHgy ZiwgMHhhYiwgMHgzOCwgMHhlNywgMHhkNywgMHhkZCwgMHhmYiwKKysgICAgMHg3NSwgMHg1Mywg MHg5YiwgMHgxNywgMHgxNSwgMHg1ZSwgMHg5ZiwgMHhjZiwgMHhkMSwgMHhhYiwgMHhhNSwgMHg2 NCwKKysgICAgMHhlYiwgMHg4NSwgMHgzNSwgMHhkOCwgMHgxMiwgMHhjOSwgMHhjMiwgMHhkYywg MHhmOSwgMHg3MiwgMHg4NCwgMHg0NCwKKysgICAgMHgxYiwgMHhjNCwgMHg4MiwgMHgyNCwgMHgz NiwgMHgyNCwgMHhjNywgMHhmNCwgMHg1NywgMHg1OCwgMHgwYywgMHgxYywKKysgICAgMHgzOCwg MHhhNSwgMHg3YywgMHg0NiwgMHhjNCwgMHg1NywgMHgzOSwgMHgyNCwgMHg3MCwgMHhlZCwgMHhi NSwgMHgyYywKKysgICAgMHhiNSwgMHhhNiwgMHhlMCwgMHgzZiwgMHhlNiwgMHgyOCwgMHg3Yiwg MHhiNiwgMHhmNCwgMHg5YSwgMHg0MiwgMHhhMiwKKysgICAgMHgwNiwgMHg1YSwgMHgwNSwgMHg0 ZiwgMHgwMywgMHgwOCwgMHgzOSwgMHhkZiwgMHgxZiwgMHhkMywgMHgxNCwgMHg5YywKKysgICAg MHg0YywgMHhhMCwgMHg1MywgMHgxZCwgMHhkOCwgMHhjYSwgMHg4YSwgMHhhYSwgMHg5YywgMHhj NywgMHgzMywgMHg3MSwKKysgICAgMHg5MywgMHgzOCwgMHg3MywgMHg0OCwgMHgzMywgMHg2MSwg MHgxOCwgMHgyMiwgMHg0NSwgMHg0NSwgMHhlOCwgMHg4YywKKysgICAgMHg4MCwgMHhmZiwgMHhk OCwgMHg3NiwgMHg1ZCwgMHg3NCwgMHgzNiwgMHgwMywgMHgzMywgMHhjYywgMHhhYiwgMHg5OSwK KysgICAgMHg3MiwgMHg3NywgMHg5YiwgMHg2NSwgMHgyNSwgMHhhNiwgMHg1YiwgMHhkZCwgMHgw ZCwgMHgxMCwgMHhjNiwgMHg3NSwKKysgICAgMHhjMSwgMHgwOSwgMHhiYiwgMHhkMywgMHhlNSwg MHhiZSwgMHg0ZCwgMHg3MiwgMHhlZiwgMHg2ZSwgMHhiYSwgMHg2ZSwKKysgICAgMHg0MywgMHg4 ZCwgMHg1MiwgMHgyNiwgMHgyMywgMHg3ZCwgMHhiOCwgMHg4OCwgMHgzNywgMHg5YywgMHg1Ziwg MHhjYywKKysgICAgMHg0NywgMHhhMywgMHg4NCwgMHg3ZiwgMHhmNiwgMHgzNywgMHgxMSwgMHhi YSwgMHhlZCwgMHg2ZCwgMHgwMywgMHhhZiwKKysgICAgMHhlOCwgMHgxZSwgMHg2OSwgMHg0YSwg MHg0MSwgMHgzYiwgMHg2OCwgMHgwYiwgMHhkMywgMHg4YSwgMHhiNCwgMHg5MCwKKysgICAgMHgz ZiwgMHg4MywgMHg3MCwgMHhhNywgMHgwNywgMHhlZiwgMHg1NSwgMHgxZCwgMHg0OSwgMHg0MSwg MHgwMiwgMHg2ZCwKKysgICAgMHg5NSwgMHg3OSwgMHhkNiwgMHg5MSwgMHhkZSwgMHg4ZSwgMHhk YSwgMHhhMSwgMHg2MSwgMHgwNSwgMHhlYiwgMHg5ZCwKKysgICAgMHhiYSwgMHgzYywgMHgyZiwg MHg0YywgMHgxYiwgMHhlYywgMHg1MCwgMHg4MiwgMHg3NSwgMHhhYSwgMHgwMiwgMHgwNywKKysg ICAgMHhlMiwgMHg1MSwgMHhiNSwgMHhlYywgMHhjYiwgMHgyOCwgMHg2YSwgMHg0YiwgMHgwMSwg MHhkNCwgMHg0OSwgMHhkMywKKysgICAgMHgwYSwgMHhjYiwgMHg2NywgMHgzNywgMHgxNywgMHhh MCwgMHhkMiwgMHhmYiwgMHgzYiwgMHg1MCwgMHhjOCwgMHg5MywKKysgICAgMHhmNywgMHhkYSwg MHhiMSwgMHg0ZgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3Rf MjA0OF9wcml2X2tleVtdID0geworKyAgICAweDBjLCAweDRiLCAweDMwLCAweDg5LCAweGQxLCAw eGI4LCAweDYyLCAweGNiLCAweDNjLCAweDQzLCAweDY0LCAweDkxLAorKyAgICAweGYwLCAweDkx LCAweDU0LCAweDcwLCAweGM1LCAweDI3LCAweDk2LCAweGUzLCAweGFjLCAweGJlLCAweGU4LCAw eDAwLAorKyAgICAweGVjLCAweDU1LCAweGY2LCAweGNjCisrfTsKKysKKytzdGF0aWMgaW50IGNv cnJ1cHRfZHNhOworKworK3ZvaWQgRklQU19jb3JydXB0X2RzYSgpCisreworKyAgICBjb3JydXB0 X2RzYSA9IDE7CisrfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSgpCisreworKyAgICBEU0Eg KmRzYSA9IE5VTEw7CisrICAgIEVWUF9QS0VZICpwayA9IE5VTEw7CisrICAgIGludCByZXQgPSAw OworKworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrCisrICAgIGlmIChkc2EgPT0gTlVMTCkKKysg ICAgICAgIGdvdG8gZXJyOworKworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHAs IGRzYV90ZXN0XzIwNDgpOworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHEsIGRz YV90ZXN0XzIwNDgpOworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIGcsIGRzYV90 ZXN0XzIwNDgpOworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHB1Yl9rZXksIGRz YV90ZXN0XzIwNDgpOworKyAgICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHByaXZfa2V5 LCBkc2FfdGVzdF8yMDQ4KTsKKysKKysgICAgaWYgKGNvcnJ1cHRfZHNhKQorKyAgICAgICAgQk5f c2V0X2JpdChkc2EtPnB1Yl9rZXksIDIwNDcpOworKworKyAgICBpZiAoKHBrID0gRVZQX1BLRVlf bmV3KCkpID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgRVZQX1BLRVlfYXNz aWduX0RTQShwaywgZHNhKTsKKysKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIE5VTEwsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAs IEVWUF9zaGEyNTYoKSwgMCwgIkRTQSBTSEEyNTYiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICByZXQgPSAxOworKworKyBlcnI6CisrICAgIGlmIChwaykKKysgICAgICAgIEVWUF9QS0VZX2Zy ZWUocGspOworKyAgICBlbHNlIGlmIChkc2EpCisrICAgICAgICBEU0FfZnJlZShkc2EpOworKyAg ICByZXR1cm4gcmV0OworK30KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9maXBzL2ZpcHNfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2Vu Yy5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBzCTIwMTYt MDMtMDEgMTY6MzM6MDcuNjIxOTE2NjM2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2ZpcHMvZmlwc19lbmMuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMTkxNjYzNiArMDEwMAorQEAg LTAsMCArMSwxODkgQEAKKysvKiBmaXBlL2V2cC9maXBzX2VuYy5jICovCisrLyogQ29weXJpZ2h0 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+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK2NvbnN0IEVWUF9DSVBIRVIgKkZJ UFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpCisreworKyAgICBzd2l0Y2ggKG5pZCkgeworKyAg ICBjYXNlIE5JRF9hZXNfMTI4X2NiYzoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jYmMo KTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEyOF9jY206CisrICAgICAgICByZXR1cm4gRVZQX2Fl c18xMjhfY2NtKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xMjhfY2ZiMToKKysgICAgICAgIHJl dHVybiBFVlBfYWVzXzEyOF9jZmIxKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xMjhfY2ZiMTI4 OgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2NmYjEyOCgpOworKworKyAgICBjYXNlIE5J RF9hZXNfMTI4X2NmYjg6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2ZiOCgpOworKwor KyAgICBjYXNlIE5JRF9hZXNfMTI4X2N0cjoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9j dHIoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEyOF9lY2I6CisrICAgICAgICByZXR1cm4gRVZQ X2Flc18xMjhfZWNiKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xMjhfZ2NtOgorKyAgICAgICAg cmV0dXJuIEVWUF9hZXNfMTI4X2djbSgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTI4X29mYjEy ODoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9vZmIoKTsKKysKKysgICAgY2FzZSBOSURf YWVzXzEyOF94dHM6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfeHRzKCk7CisrCisrICAg IGNhc2UgTklEX2Flc18xOTJfY2JjOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NiYygp OworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2NjbToKKysgICAgICAgIHJldHVybiBFVlBfYWVz XzE5Ml9jY20oKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzE5Ml9jZmIxOgorKyAgICAgICAgcmV0 dXJuIEVWUF9hZXNfMTkyX2NmYjEoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzE5Ml9jZmIxMjg6 CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY2ZiMTI4KCk7CisrCisrICAgIGNhc2UgTklE X2Flc18xOTJfY2ZiODoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jZmI4KCk7CisrCisr ICAgIGNhc2UgTklEX2Flc18xOTJfY3RyOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2N0 cigpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2VjYjoKKysgICAgICAgIHJldHVybiBFVlBf YWVzXzE5Ml9lY2IoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzE5Ml9nY206CisrICAgICAgICBy ZXR1cm4gRVZQX2Flc18xOTJfZ2NtKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xOTJfb2ZiMTI4 OgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX29mYigpOworKworKyAgICBjYXNlIE5JRF9h ZXNfMjU2X2NiYzoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9jYmMoKTsKKysKKysgICAg Y2FzZSBOSURfYWVzXzI1Nl9jY206CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2NtKCk7 CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfY2ZiMToKKysgICAgICAgIHJldHVybiBFVlBfYWVz XzI1Nl9jZmIxKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfY2ZiMTI4OgorKyAgICAgICAg cmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEyOCgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMjU2X2Nm Yjg6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2ZiOCgpOworKworKyAgICBjYXNlIE5J RF9hZXNfMjU2X2N0cjoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9jdHIoKTsKKysKKysg ICAgY2FzZSBOSURfYWVzXzI1Nl9lY2I6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfZWNi KCk7CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfZ2NtOgorKyAgICAgICAgcmV0dXJuIEVWUF9h ZXNfMjU2X2djbSgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMjU2X29mYjEyODoKKysgICAgICAg IHJldHVybiBFVlBfYWVzXzI1Nl9vZmIoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl94dHM6 CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfeHRzKCk7CisrCisrICAgIGNhc2UgTklEX2Rl c19lZGVfZWNiOgorKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlKCk7CisrCisrICAgIGNhc2Ug TklEX2Rlc19lZGUzX2VjYjoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTMoKTsKKysKKysg ICAgY2FzZSBOSURfZGVzX2VkZTNfY2JjOgorKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlM19j YmMoKTsKKysKKysgICAgY2FzZSBOSURfZGVzX2VkZTNfY2ZiMToKKysgICAgICAgIHJldHVybiBF VlBfZGVzX2VkZTNfY2ZiMSgpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlM19jZmI2NDoKKysg ICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKKysKKysgICAgY2FzZSBOSURfZGVz X2VkZTNfY2ZiODoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfY2ZiOCgpOworKworKyAg ICBjYXNlIE5JRF9kZXNfZWRlM19vZmI2NDoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNf b2ZiKCk7CisrCisrICAgIGNhc2UgTklEX2Rlc19lZGVfY2JjOgorKyAgICAgICAgcmV0dXJuIEVW UF9kZXNfZWRlX2NiYygpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlX2NmYjY0OgorKyAgICAg ICAgcmV0dXJuIEVWUF9kZXNfZWRlX2NmYjY0KCk7CisrCisrICAgIGNhc2UgTklEX2Rlc19lZGVf b2ZiNjQ6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGVfb2ZiKCk7CisrCisrICAgIGRlZmF1 bHQ6CisrICAgICAgICByZXR1cm4gTlVMTDsKKysKKysgICAgfQorK30KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHMuaAorLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIw MTYtMDMtMDEgMTY6MzM6MDcuNjIxOTE2NjM2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL2ZpcHMvZmlwcy5oCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIxOTE2NjM2ICswMTAwCitAQCAt MCwwICsxLDI3OCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lu Y2x1ZGUgPHN0ZGFyZy5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrIyBlcnJvciBGSVBT IGlzIGRpc2FibGVkLgorKyNlbmRpZgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjIGlm ZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyMgZW5kaWYKKysKKysgICAgc3RydWN0 IGRzYV9zdDsKKysgICAgc3RydWN0IHJzYV9zdDsKKysgICAgc3RydWN0IGV2cF9wa2V5X3N0Owor KyAgICBzdHJ1Y3QgZW52X21kX3N0OworKyAgICBzdHJ1Y3QgZW52X21kX2N0eF9zdDsKKysgICAg c3RydWN0IGV2cF9jaXBoZXJfc3Q7CisrICAgIHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKKysg ICAgc3RydWN0IGRoX21ldGhvZDsKKysgICAgc3RydWN0IENNQUNfQ1RYX3N0OworKyAgICBzdHJ1 Y3QgaG1hY19jdHhfc3Q7CisrCisrICAgIGludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25v ZmYsIGNvbnN0IGNoYXIgKmF1dGgpOworKyAgICBpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKTsK KysgICAgY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpOworKyAgICBpbnQgRklQU19z ZWxmdGVzdCh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOworKyAg ICB2b2lkIEZJUFNfY29ycnVwdF9zaGExKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9z aGExKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQpOworKyAgICB2b2lk IEZJUFNfY29ycnVwdF9hZXModm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20o dm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20odm9pZCk7CisrICAgIGludCBG SVBTX3NlbGZ0ZXN0X2Flc194dHModm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2 b2lkKTsKKysgICAgdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKHZvaWQpOworKyAgICBpbnQgRklQU19z ZWxmdGVzdF9kZXModm9pZCk7CisrICAgIHZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKKysg ICAgdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKKysgICAgaW50IEZJUFNfc2Vs ZnRlc3RfcnNhKHZvaWQpOworKyAgICB2b2lkIEZJUFNfY29ycnVwdF9kc2Eodm9pZCk7CisrICAg IHZvaWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0 ZXN0X2RzYSh2b2lkKTsKKysgICAgdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOworKyAgICB2 b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpOworKyAgICB2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQg b25vZmYpOworKyAgICB2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpOworKyAgICBpbnQg RklQU19zZWxmdGVzdF9ybmcodm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X3g5MzEodm9p ZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7CisrICAgIGludCBGSVBTX3Nl bGZ0ZXN0X2RyYmcodm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQp OworKyAgICBpbnQgRklQU19zZWxmdGVzdF9jbWFjKHZvaWQpOworKworKyAgICB2b2lkIEZJUFNf Z2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3RyKTsKKysK KysjIGRlZmluZSBGSVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBf X0xJTkVfXywgXAorKyAgICAgICAgICAgICAgICBhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRl biBhbGdvcml0aG0gZXJyb3IgaWdub3JlZCIpOworKworKyAgICBpbnQgZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHN0cnVjdCBldnBfcGtleV9zdCAqcGtleSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrYXRsZW4sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGVudl9tZF9zdCAq ZGlnZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBt ZF9mbGFncywgY29uc3QgY2hhciAqZmFpbF9zdHIpOworKworKyAgICBpbnQgZmlwc19jaXBoZXJf dGVzdChzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKTsKKysKKysgICAg dm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpOworKworKyAgICBjb25zdCBzdHJ1Y3Qg ZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKKysKKysgICAgY29uc3Qg c3RydWN0IGV2cF9jaXBoZXJfc3QgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOworKwor Ky8qIEJFR0lOIEVSUk9SIENPREVTICovCisrLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0 byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKysgKiBtYWRl IGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBu ZXh0IHJ1bi4KKysgKi8KKysgICAgdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCk7Cisr CisrLyogRXJyb3IgY29kZXMgZm9yIHRoZSBGSVBTIGZ1bmN0aW9ucy4gKi8KKysKKysvKiBGdW5j dGlvbiBjb2Rlcy4gKi8KKysjIGRlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMgICAg ICAgICAgICAgICAgICAgICAgMTAwCisrIyBkZWZpbmUgRklQU19GX0RIX0lOSVQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDE0OAorKyMgZGVmaW5lIEZJUFNfRl9EUkJHX1JFU0VF RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjIKKysjIGRlZmluZSBGSVBTX0ZfRFNB X0JVSUxUSU5fUEFSQU1HRU4gICAgICAgICAgICAgICAgICAgICAgMTAxCisrIyBkZWZpbmUgRklQ U19GX0RTQV9CVUlMVElOX1BBUkFNR0VOMiAgICAgICAgICAgICAgICAgICAgIDEwNworKyMgZGVm aW5lIEZJUFNfRl9EU0FfRE9fU0lHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIK KysjIGRlZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTAzCisrIyBkZWZpbmUgRklQU19GX0VDREhfQ09NUFVURV9LRVkgICAgICAgICAgICAgICAg ICAgICAgICAgIDE2MworKyMgZGVmaW5lIEZJUFNfRl9FQ0RTQV9ET19TSUdOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxNjQKKysjIGRlZmluZSBGSVBTX0ZfRUNEU0FfRE9fVkVSSUZZICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTY1CisrIyBkZWZpbmUgRklQU19GX0VDX0tFWV9HRU5F UkFURV9LRVkgICAgICAgICAgICAgICAgICAgICAgIDE2NgorKyMgZGVmaW5lIEZJUFNfRl9FVlBf Q0lQSEVSSU5JVF9FWCAgICAgICAgICAgICAgICAgICAgICAgICAxMjQKKysjIGRlZmluZSBGSVBT X0ZfRVZQX0RJR0VTVElOSVRfRVggICAgICAgICAgICAgICAgICAgICAgICAgMTI1CisrIyBkZWZp bmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAor KyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RTQV9QUk5HICAgICAgICAgICAgICAgICAgICAg ICAxNTEKKysjIGRlZmluZSBGSVBTX0ZfRklQU19DSEVDS19FQyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTQyCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUNfUFJORyAgICAgICAg ICAgICAgICAgICAgICAgIDE1MgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9G SU5HRVJQUklOVCAgICAgICAgICAgICAxMDUKKysjIGRlZmluZSBGSVBTX0ZfRklQU19DSEVDS19S U0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2CisrIyBkZWZpbmUgRklQU19GX0ZJUFNf Q0hFQ0tfUlNBX1BSTkcgICAgICAgICAgICAgICAgICAgICAgIDE1MAorKyMgZGVmaW5lIEZJUFNf Rl9GSVBTX0NJUEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjAKKysjIGRlZmlu ZSBGSVBTX0ZfRklQU19DSVBIRVJJTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQzCisr IyBkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSX0NUWF9DVFJMICAgICAgICAgICAgICAgICAgICAg IDE2MQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVEZJTkFMICAgICAgICAgICAgICAgICAg ICAgICAgICAxNTgKKysjIGRlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RJTklUICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTI4CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUVVBEQVRFICAg ICAgICAgICAgICAgICAgICAgICAgIDE1OQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQllU RVMgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzEKKysjIGRlZmluZSBGSVBTX0ZfRklQU19E UkJHX0NIRUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ2CisrIyBkZWZpbmUgRklQU19G X0ZJUFNfRFJCR19DUFJOR19URVNUICAgICAgICAgICAgICAgICAgICAgIDEzMgorKyMgZGVmaW5l IEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0sgICAgICAgICAgICAgICAgICAgICAxMzYKKysj IGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFICAgICAgICAgICAgICAgICAgICAgICAg MTM0CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19JTklUICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEzNQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUgICAgICAg ICAgICAgICAgICAgICAxMzgKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX05FVyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTM5CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19SRVNF RUQgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RS QkdfU0lOR0xFX0tBVCAgICAgICAgICAgICAgICAgICAgICAxNDEKKysjIGRlZmluZSBGSVBTX0Zf RklQU19EU0FfQ0hFQ0sgICAgICAgICAgIC8qIHVudXNlZCAqLyAgICAgMTA3CisrIyBkZWZpbmUg RklQU19GX0ZJUFNfRFNBX1NJR05fRElHRVNUICAgICAgICAgICAgICAgICAgICAgIDE1NAorKyMg ZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9WRVJJRllfRElHRVNUICAgICAgICAgICAgICAgICAgICAx NTUKKysjIGRlZmluZSBGSVBTX0ZfRklQU19HRVRfRU5UUk9QWSAgICAgICAgICAgICAgICAgICAg ICAgICAgMTQ3CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfTU9ERV9TRVQgICAgICAgICAgICAvKiB1 bnVzZWQgKi8gICAgIDEwOAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCAg ICAgICAgICAgICAgICAgICAgICAxMDgKKysjIGRlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05B VFVSRV9URVNUICAgICAgICAgICAgICAgICAgMTA5CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfUkFO RF9BREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNworKyMgZGVmaW5lIEZJUFNfRl9G SVBTX1JBTkRfQllURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjIKKysjIGRlZmluZSBG SVBTX0ZfRklQU19SQU5EX1BTRVVET19CWVRFUyAgICAgICAgICAgICAgICAgICAgMTY3CisrIyBk ZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2 OAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfU0VUX01FVEhPRCAgICAgICAgICAgICAgICAg ICAgICAxMjYKKysjIGRlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgICAgICAgMTI3CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfUlNBX1NJR05fRElHRVNUICAg ICAgICAgICAgICAgICAgICAgIDE1NgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9WRVJJRllf RElHRVNUICAgICAgICAgICAgICAgICAgICAxNTcKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxG VEVTVF9BRVMgICAgICAgICAgICAgICAgICAgICAgICAgMTEwCisrIyBkZWZpbmUgRklQU19GX0ZJ UFNfU0VMRlRFU1RfQUVTX0NDTSAgICAgICAgICAgICAgICAgICAgIDE0NQorKyMgZGVmaW5lIEZJ UFNfRl9GSVBTX1NFTEZURVNUX0FFU19HQ00gICAgICAgICAgICAgICAgICAgICAxMjkKKysjIGRl ZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfWFRTICAgICAgICAgICAgICAgICAgICAgMTQ0 CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQyAgICAgICAgICAgICAgICAgICAg ICAgIDEzMAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyAgICAgICAgICAgICAg ICAgICAgICAgICAxMTEKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EgICAgICAg ICAgICAgICAgICAgICAgICAgMTEyCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRUNE U0EgICAgICAgICAgICAgICAgICAgICAgIDEzMworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZU RVNUX0hNQUMgICAgICAgICAgICAgICAgICAgICAgICAxMTMKKysjIGRlZmluZSBGSVBTX0ZfRklQ U19TRUxGVEVTVF9STkcgICAgICAgIC8qIHVudXNlZCAqLyAgICAgMTE0CisrIyBkZWZpbmUgRklQ U19GX0ZJUFNfU0VMRlRFU1RfU0hBMSAgICAgICAgICAgICAgICAgICAgICAgIDExNQorKyMgZGVm aW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEgICAgICAgICAgICAgICAgICAgICAgICAxMTQK KysjIGRlZmluZSBGSVBTX0ZfRklQU19TRVRfUFJOR19LRVkgICAgICAgICAgICAgICAgICAgICAg ICAgMTUzCisrIyBkZWZpbmUgRklQU19GX0hBU0hfRklOQUwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEyMworKyMgZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4gICAgICAg ICAgICAgICAgICAgICAgICAxMTYKKysjIGRlZmluZSBGSVBTX0ZfUlNBX0VBWV9JTklUICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTQ5CisrIyBkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJ VkFURV9ERUNSWVBUICAgICAgICAgICAgICAgICAgIDExNworKyMgZGVmaW5lIEZJUFNfRl9SU0Ff RUFZX1BSSVZBVEVfRU5DUllQVCAgICAgICAgICAgICAgICAgICAxMTgKKysjIGRlZmluZSBGSVBT X0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCAgICAgICAgICAgICAgICAgICAgMTE5CisrIyBkZWZp bmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgIDEyMAor KyMgZGVmaW5lIEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVggICAgICAgICAgICAgICAg ICAxMjEKKysjIGRlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMgICAgICAgIC8qIHVudXNl ZCAqLyAgICAgMTIyCisrCisrLyogUmVhc29uIGNvZGVzLiAqLworKyMgZGVmaW5lIEZJUFNfUl9B RERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQgICAgICAgICAxNTAKKysjIGRlZmluZSBG SVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORyAgICAgICAgICAgICAgICAgMTI1CisrIyBk ZWZpbmUgRklQU19SX0FMUkVBRFlfSU5TVEFOVElBVEVEICAgICAgICAgICAgICAgICAgICAgIDEz NAorKyMgZGVmaW5lIEZJUFNfUl9BVVRIRU5USUNBVElPTl9GQUlMVVJFICAgICAgICAgICAgICAg ICAgICAxNTEKKysjIGRlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFICAgICAgICAgIC8qIHVu dXNlZCAqLyAgICAgMTAzCisrIyBkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1Qg ICAvKiB1bnVzZWQgKi8gICAgIDEwNAorKyMgZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VW SURFTkNFICAgICAgICAgICAgICAgICAgICAxMTQKKysjIGRlZmluZSBGSVBTX1JfRFJCR19OT1Rf SU5JVElBTElTRUQgICAgICAgICAgICAgICAgICAgICAgMTUyCisrIyBkZWZpbmUgRklQU19SX0RS QkdfU1RVQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMworKyMgZGVmaW5lIEZJ UFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQgICAgICAgICAgICAgICAgICAxMDQKKysjIGRl ZmluZSBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQgICAgICAgICAgMTA1 CisrIyBkZWZpbmUgRklQU19SX0VOVFJPUFlfU09VUkNFX1NUVUNLICAgICAgICAgICAgICAgICAg ICAgIDE0MgorKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyAgICAgICAg ICAgICAgICAgICAxMTUKKysjIGRlZmluZSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJH ICAgICAgICAgICAgICAgICAgMTI3CisrIyBkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdf QURESVRJT05BTF9JTlBVVCAgICAgICAgIDEyNAorKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRS SUVWSU5HX0VOVFJPUFkgICAgICAgICAgICAgICAgICAxMjIKKysjIGRlZmluZSBGSVBTX1JfRVJS T1JfUkVUUklFVklOR19OT05DRSAgICAgICAgICAgICAgICAgICAgMTQwCisrIyBkZWZpbmUgRklQ U19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0ggICAvKiB1bnVzZWQgKi8gIDEwNQorKyMgZGVm aW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCAgICAgICAgICAgICAgICAxMTAK KysjIGRlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9D QVRFRCAxMTEKKysjIGRlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VH TUVOVF9BTElBU0lORyAxMTIKKysjIGRlZmluZSBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VU ICAgICAgICAgICAgICAgICAgICAgMTAyCisrIyBkZWZpbmUgRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEICAgICAgICAgICAgICAgICAgICAgIDEwNgorKyMgZGVmaW5lIEZJUFNfUl9GVU5DVElP Tl9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTYKKysjIGRlZmluZSBGSVBTX1Jf R0VORVJBVEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM3CisrIyBkZWZpbmUg RklQU19SX0dFTkVSQVRFX0VSUk9SX1VOREVURUNURUQgICAgICAgICAgICAgICAgIDExOAorKyMg ZGVmaW5lIEZJUFNfUl9JTlNUQU5USUFURV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAx MTkKKysjIGRlZmluZSBGSVBTX1JfSU5TVUZGSUNJRU5UX1NFQ1VSSVRZX1NUUkVOR1RIICAgICAg ICAgICAgMTIwCisrIyBkZWZpbmUgRklQU19SX0lOVEVSTkFMX0VSUk9SICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEyMQorKyMgZGVmaW5lIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEggICAg ICAgICAgICAgICAgICAgICAgICAxMDkKKysjIGRlZmluZSBGSVBTX1JfSU5WQUxJRF9QQVJBTUVU RVJTICAgICAgICAgICAgICAgICAgICAgICAgMTQ0CisrIyBkZWZpbmUgRklQU19SX0lOX0VSUk9S X1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMworKyMgZGVmaW5lIEZJUFNfUl9L RVlfVE9PX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDgKKysjIGRlZmluZSBG SVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCAgICAgICAgICAgICAgICAgICAgMTQ5CisrIyBk ZWZpbmUgRklQU19SX05PTl9GSVBTX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw MAorKyMgZGVmaW5lIEZJUFNfUl9OT1BSX1RFU1QxX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAg ICAgICAxNDUKKysjIGRlZmluZSBGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJFICAgICAgICAgICAg ICAgICAgICAgICAgMTQ2CisrIyBkZWZpbmUgRklQU19SX05PVF9JTlNUQU5USUFURUQgICAgICAg ICAgICAgICAgICAgICAgICAgIDEyNgorKyMgZGVmaW5lIEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZB SUxFRCAgICAgICAgICAgICAgICAgICAgICAxMDcKKysjIGRlZmluZSBGSVBTX1JfUEVSU09OQUxJ U0FUSU9OX0VSUk9SX1VOREVURUNURUQgICAgICAgICAgMTI4CisrIyBkZWZpbmUgRklQU19SX1BF UlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkcgICAgICAgICAgIDEyOQorKyMgZGVmaW5lIEZJ UFNfUl9QUk5HX1NUUkVOR1RIX1RPT19MT1cgICAgICAgICAgICAgICAgICAgICAxNDMKKysjIGRl ZmluZSBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ3 CisrIyBkZWZpbmUgRklQU19SX1BSX1RFU1QyX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAg ICAgIDE0OAorKyMgZGVmaW5lIEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVE ICAgICAgICAgICAxMzAKKysjIGRlZmluZSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RS QkcgICAgICAgICAgICAgICAgMTMxCisrIyBkZWZpbmUgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VS Uk9SICAgICAgICAgICAgICAgICAgICAgIDEzMgorKyMgZGVmaW5lIEZJUFNfUl9SRVNFRURfRVJS T1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzMKKysjIGRlZmluZSBGSVBTX1JfUlNB X0RFQ1JZUFRfRVJST1IgICAgICAgIC8qIHVudXNlZCAqLyAgICAgMTE1CisrIyBkZWZpbmUgRklQ U19SX1JTQV9FTkNSWVBUX0VSUk9SICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDExNgorKyMgZGVm aW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDEK KysjIGRlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAg ICAgMTM1CisrIyBkZWZpbmUgRklQU19SX1NUUkVOR1RIX0VSUk9SX1VOREVURUNURUQgICAgICAg ICAgICAgICAgIDEzNgorKyMgZGVmaW5lIEZJUFNfUl9URVNUX0ZBSUxVUkUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMTcKKysjIGRlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJP UiAgICAgICAgICAgICAgICAgICAgICAgMTQxCisrIyBkZWZpbmUgRklQU19SX1VOSU5TVEFOVElB VEVfWkVST0lTRV9FUlJPUiAgICAgICAgICAgICAgIDEzOAorKyMgZGVmaW5lIEZJUFNfUl9VTlNV UFBPUlRFRF9EUkJHX1RZUEUgICAgICAgICAgICAgICAgICAgICAxMzkKKysjIGRlZmluZSBGSVBT X1JfVU5TVVBQT1JURURfUExBVEZPUk0gICAgICAgICAgICAgICAgICAgICAgMTEzCisrCisrIyBp ZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzow Ny42MjE5MTY2MzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2ht YWNfc2VsZnRlc3QuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMTkxNjYzNiArMDEwMAorQEAgLTAs MCArMSwxMzQgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysg KiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3Ry aW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAg IGNvbnN0IEVWUF9NRCAqKCphbGcpICh2b2lkKTsKKysgICAgY29uc3QgY2hhciAqa2V5LCAqaXY7 CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXTsKKyt9IEhNQUNfS0FU OworKworK3N0YXRpYyBjb25zdCBITUFDX0tBVCB2ZWN0b3JbXSA9IHsKKysgICAge0VWUF9zaGEx LAorKyAgICAgLyogZnJvbSBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9m aXBzMTk4L2ZpcHMtMTk4YS5wZGYgKi8KKysgICAgICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisr ICAgICAiU2FtcGxlICMyIiwKKysgICAgIHsweDA5LCAweDIyLCAweGQzLCAweDQwLCAweDVmLCAw eGFhLCAweDNkLCAweDE5LAorKyAgICAgIDB4NGYsIDB4ODIsIDB4YTQsIDB4NTgsIDB4MzAsIDB4 NzMsIDB4N2QsIDB4NWMsCisrICAgICAgMHhjNiwgMHhjNywgMHg1ZCwgMHgyNH0KKysgICAgIH0s CisrICAgIHtFVlBfc2hhMjI0LAorKyAgICAgLyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJv dmUuLi4gKi8KKysgICAgICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrICAgICAiU2FtcGxlICMy IiwKKysgICAgIHsweGRkLCAweGVmLCAweDBhLCAweDQwLCAweGNiLCAweDdkLCAweDUwLCAweGZi LAorKyAgICAgIDB4NmUsIDB4ZTYsIDB4Y2UsIDB4YTEsIDB4MjAsIDB4YmEsIDB4MjYsIDB4YWEs CisrICAgICAgMHgwOCwgMHhmMywgMHgwNywgMHg3NSwgMHg4NywgMHhiOCwgMHhhZCwgMHgxYiwK KysgICAgICAweDhjLCAweDhkLCAweDEyLCAweGM3fQorKyAgICAgfSwKKysgICAge0VWUF9zaGEy NTYsCisrICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKyAgICAgIlNhbXBsZSAjMiIsCisr ICAgICB7MHhiOCwgMHhmMiwgMHgwZCwgMHhiNSwgMHg0MSwgMHhlYSwgMHg0MywgMHgwOSwKKysg ICAgICAweGNhLCAweDRlLCAweGE5LCAweDM4LCAweDBjLCAweGQwLCAweGU4LCAweDM0LAorKyAg ICAgIDB4ZjcsIDB4MWYsIDB4YmUsIDB4OTEsIDB4NzQsIDB4YTIsIDB4NjEsIDB4MzgsCisrICAg ICAgMHgwZCwgMHhjMSwgMHg3ZSwgMHhhZSwgMHg2YSwgMHgzNCwgMHg1MSwgMHhkOX0KKysgICAg IH0sCisrICAgIHtFVlBfc2hhMzg0LAorKyAgICAgIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysg ICAgICJTYW1wbGUgIzIiLAorKyAgICAgezB4MDgsIDB4YmMsIDB4YjAsIDB4ZGEsIDB4NDksIDB4 MWUsIDB4ODcsIDB4YWQsCisrICAgICAgMHg5YSwgMHgxZCwgMHg2YSwgMHhjZSwgMHgyMywgMHhj NSwgMHgwYiwgMHhmNiwKKysgICAgICAweGI3LCAweDE4LCAweDA2LCAweGE1LCAweDc3LCAweGNk LCAweDQ5LCAweDA0LAorKyAgICAgIDB4ODksIDB4ZjEsIDB4ZTYsIDB4MjMsIDB4NDQsIDB4NTEs IDB4NTEsIDB4OWYsCisrICAgICAgMHg4NSwgMHg1NiwgMHg4MCwgMHg3OSwgMHgwYywgMHhiZCwg MHg0ZCwgMHg1MCwKKysgICAgICAweGE0LCAweDVmLCAweDI5LCAweGUzLCAweDkzLCAweGYwLCAw eGU4LCAweDdmfQorKyAgICAgfSwKKysgICAge0VWUF9zaGE1MTIsCisrICAgICAiMDEyMzQ1Njc4 OTo7PD0+P0BBQkMiLAorKyAgICAgIlNhbXBsZSAjMiIsCisrICAgICB7MHg4MCwgMHg5ZCwgMHg0 NCwgMHgwNSwgMHg3YywgMHg1YiwgMHg5NSwgMHg0MSwKKysgICAgICAweDA1LCAweGJkLCAweDA0 LCAweDEzLCAweDE2LCAweGRiLCAweDBmLCAweGFjLAorKyAgICAgIDB4NDQsIDB4ZDUsIDB4YTQs IDB4ZDUsIDB4ZDAsIDB4ODksIDB4MmIsIDB4ZDAsCisrICAgICAgMHg0ZSwgMHg4NiwgMHg2NCwg MHgxMiwgMHhjMCwgMHg5MCwgMHg3NywgMHg2OCwKKysgICAgICAweGYxLCAweDg3LCAweGI3LCAw eDdjLCAweDRmLCAweGFlLCAweDJjLCAweDJmLAorKyAgICAgIDB4MjEsIDB4YTUsIDB4YjUsIDB4 NjUsIDB4OWEsIDB4NGYsIDB4NGIsIDB4YTcsCisrICAgICAgMHg0NywgMHgwMiwgMHhhMywgMHhk ZSwgMHg5YiwgMHg1MSwgMHhmMSwgMHg0NSwKKysgICAgICAweGJkLCAweDRmLCAweDI1LCAweDI3 LCAweDQyLCAweDk4LCAweDk5LCAweDA1fQorKyAgICAgfSwKKyt9OworKworK2ludCBGSVBTX3Nl bGZ0ZXN0X2htYWMoKQorK3sKKysgICAgaW50IG47CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47 CisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIGNvbnN0IEVW UF9NRCAqbWQ7CisrICAgIGNvbnN0IEhNQUNfS0FUICp0OworKworKyAgICBmb3IgKG4gPSAwLCB0 ID0gdmVjdG9yOyBuIDwgc2l6ZW9mKHZlY3RvcikgLyBzaXplb2YodmVjdG9yWzBdKTsgbisrLCB0 KyspIHsKKysgICAgICAgIG1kID0gKCp0LT5hbGcpICgpOworKyAgICAgICAgSE1BQyhtZCwgdC0+ a2V5LCBzdHJsZW4odC0+a2V5KSwKKysgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIg Kil0LT5pdiwgc3RybGVuKHQtPml2KSwgb3V0LCAmb3V0bGVuKTsKKysKKysgICAgICAgIGlmICht ZW1jbXAob3V0LCB0LT5rYXZhbCwgb3V0bGVuKSkgeworKyAgICAgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfSE1BQywgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAg ICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDE7CisrfQor KyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgu ZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaAorLS0tIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42 MjE5MTY2MzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2xvY2wu aAkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMTkxNjYzNiArMDEwMAorQEAgLTAsMCArMSw3MSBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysj IGlmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyMgZW5kaWYKKysKKysjIGRlZmlu ZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFICAgICAgIDMyCisrIyBkZWZpbmUgZmlwc19sb2Fk X2tleV9jb21wb25lbnQoa2V5LCBjb21wLCBwcmUpIFwKKysgICAgICAgIGtleS0+Y29tcCA9IEJO X2JpbjJibihwcmUjI18jI2NvbXAsIHNpemVvZihwcmUjI18jI2NvbXApLCBrZXktPmNvbXApOyBc CisrICAgICAgICBpZiAoIWtleS0+Y29tcCkgXAorKyAgICAgICAgICAgICAgICBnb3RvIGVycgor KworKyMgZGVmaW5lIGZpcHNfcG9zdF9zdGFydGVkKGlkLCBzdWJpZCwgZXgpIDEKKysjIGRlZmlu ZSBmaXBzX3Bvc3Rfc3VjY2VzcyhpZCwgc3ViaWQsIGV4KSAxCisrIyBkZWZpbmUgZmlwc19wb3N0 X2ZhaWxlZChpZCwgc3ViaWQsIGV4KSAxCisrIyBkZWZpbmUgZmlwc19wb3N0X2NvcnJ1cHQoaWQs IHN1YmlkLCBleCkgMQorKyMgZGVmaW5lIGZpcHNfcG9zdF9zdGF0dXMoKSAxCisrCisrIyBpZmRl ZiAgX19jcGx1c3BsdXMKKyt9CisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2Zp cHMvZmlwc19tZC5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZp cHMJMjAxNi0wMy0wMSAxNjozMzowNy42MjE5MTY2MzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4y Zy9jcnlwdG8vZmlwcy9maXBzX21kLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjE5MTY2MzYgKzAx MDAKK0BAIC0wLDAgKzEsMTQ0IEBACisrLyogZmlwcy9ldnAvZmlwc19tZC5jICovCisrLyogQ29w eXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1w bGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3 aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNv bW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxv d2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0 IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUg U1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMg ZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICog ZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku CisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBh bnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92 ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5n IHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBh cnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2Yg YSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRh dGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICog CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNy eXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlA Y3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBs ZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNl ZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1 ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZy b20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVz dCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgor KyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElT JycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxp Y2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxl IHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdl ZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1 bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05V IFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMTk5OC0yMDAxIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrLyogTWluaW1hbCBzdGFuZGFsb25lIEZJ UFMgdmVyc2lvbnMgb2YgRGlnZXN0IG9wZXJhdGlvbnMgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xf RklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKwor K2NvbnN0IEVWUF9NRCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCkKKyt7CisrICAgIHN3 aXRjaCAobmlkKSB7CisrICAgIGNhc2UgTklEX3NoYTE6CisrICAgICAgICByZXR1cm4gRVZQX3No YTEoKTsKKysKKysgICAgY2FzZSBOSURfc2hhMjI0OgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGEy MjQoKTsKKysKKysgICAgY2FzZSBOSURfc2hhMjU2OgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGEy NTYoKTsKKysKKysgICAgY2FzZSBOSURfc2hhMzg0OgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGEz ODQoKTsKKysKKysgICAgY2FzZSBOSURfc2hhNTEyOgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGE1 MTIoKTsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9Cisr fQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcyBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYworLS0tIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MjE5MTY2 MzYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwkyMDE2 LTAzLTAxIDE2OjMzOjA3LjYyMTkxNjYzNiArMDEwMAorQEAgLTAsMCArMSwyMDEgQEAKKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg 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 SCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCisrLyogUG93ZXIgb24gc2VsZiB0ZXN0IChQT1NUKSBzdXBwb3J0IGZ1bmN0aW9u cyAqLworKworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrIyBpbmNsdWRlICJmaXBzX2xv Y2wuaCIKKysKKysvKiBSdW4gYWxsIHNlbGZ0ZXN0cyAqLworK2ludCBGSVBTX3NlbGZ0ZXN0KHZv aWQpCisreworKyAgICBpbnQgcnYgPSAxOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZHJiZygp KQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfeDkzMSgpKQorKyAg ICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMSgpKQorKyAgICAgICAg cnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3Rfc2hhMigpKQorKyAgICAgICAgcnYgPSAw OworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfaG1hYygpKQorKyAgICAgICAgcnYgPSAwOworKyAg ICBpZiAoIUZJUFNfc2VsZnRlc3RfY21hYygpKQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAo IUZJUFNfc2VsZnRlc3RfYWVzKCkpCisrICAgICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19z ZWxmdGVzdF9hZXNfY2NtKCkpCisrICAgICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxm dGVzdF9hZXNfZ2NtKCkpCisrICAgICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxmdGVz dF9hZXNfeHRzKCkpCisrICAgICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9k ZXMoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3JzYSgpKQor KyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZHNhKCkpCisrICAgICAg ICBydiA9IDA7CisrICAgIHJldHVybiBydjsKKyt9CisrCisrLyogR2VuZXJhbGl6ZWQgcHVibGlj IGtleSB0ZXN0IHJvdXRpbmUuIFNpZ25zIGFuZCB2ZXJpZmllcyB0aGUgZGF0YQorKyAqIHN1cHBs aWVkIGluIHRicyB1c2luZyBtZXNhZ2UgZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdl c3QKKysgKiBmbGFncyBtZF9mbGFncy4gSWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVM TCBpdCB3aWxsCisrICogYWRkaXRpb25hbGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBp dDogYSBrbm93biBhbnN3ZXIgdGVzdAorKyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2Vk IGZvciBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBpbiBjYXNlCisrICogb2YgZmFpbHVyZS4gSWYg InBrZXkiIGlzIE5VTEwganVzdCBwZXJmb3JtIGEgbWVzc2FnZSBkaWdlc3QgY2hlY2suCisrICov CisrCisraW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChFVlBfUEtFWSAqcGtleSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRi c2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmYWlsX3N0cikKKyt7CisrICAgIGludCBy ZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOwor KyAgICB1bnNpZ25lZCBpbnQgc2lnbGVuOworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrICAgIEVW UF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrCisrICAgIGlmIChkaWdlc3QgPT0gTlVMTCkKKysgICAg ICAgIGRpZ2VzdCA9IEVWUF9zaGEyNTYoKTsKKysKKysgICAgaWYgKChwa2V5LT50eXBlID09IEVW UF9QS0VZX1JTQSkKKysgICAgICAgICYmIChSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkgPiBzaXpl b2Yoc2lndG1wKSkpIHsKKysgICAgICAgIHNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBr ZXktPnBrZXkucnNhKSk7CisrICAgICAgICBpZiAoIXNpZykgeworKyAgICAgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUp OworKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlm ICh0YnNsZW4gPT0gLTEpCisrICAgICAgICB0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOwor KworKyAgICBpZiAobWRfZmxhZ3MpCisrICAgICAgICBFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0 eCwgbWRfZmxhZ3MpOworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0 LCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUo Jm1jdHgsIHRicywgdGJzbGVuKSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrICAgIGlmICghRVZQ X1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkKKysgICAgICAgIGdvdG8gZXJy b3I7CisrCisrICAgIGlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0 LCBzaWcsIGthdGxlbikpKQorKyAgICAgICAgZ290byBlcnJvcjsKKysKKysgICAgaWYgKCFFVlBf VmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyb3I7 CisrICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKyAgICAg ICAgZ290byBlcnJvcjsKKysgICAgcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNp Z2xlbiwgcGtleSk7CisrCisrIGVycm9yOgorKyAgICBpZiAoc2lnICE9IHNpZ3RtcCkKKysgICAg ICAgIE9QRU5TU0xfZnJlZShzaWcpOworKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwor KyAgICBpZiAocmV0ICE9IDEpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9T SUdOQVRVUkVfVEVTVCwgRklQU19SX1RFU1RfRkFJTFVSRSk7CisrICAgICAgICBpZiAoZmFpbF9z dHIpCisrICAgICAgICAgICAgRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3Ry KTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKysv KiBHZW5lcmFsaXplZCBzeW1tZXRyaWMgY2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRh LCB2ZXJpZnkgcmVzdWx0CisrICogYWdhaW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNv bXBhcmUgd2l0aCBvcmlnaW5hbCBwbGFpbnRleHQuCisrICovCisrCisraW50IGZpcHNfY2lwaGVy X3Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAorKyAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKKyt7CisrICAgIHVuc2ln bmVkIGNoYXIgcGx0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRV07CisrICAgIHVuc2lnbmVk IGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRV07CisrCisrICAgIE9QRU5TU0xf YXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKKysgICAgbWVtc2V0KHBs dG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKKysgICAgbWVtc2V0KGNpdG1wLCAw LCBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFKTsKKysKKysgICAgaWYgKEVWUF9DaXBoZXJJbml0 X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAxKSA8PSAwKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKSA8PSAw KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQs IGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0 eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAwKSA8PSAwKQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwgcGx0bXAsIGNpdG1wLCBsZW4pIDw9IDApCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCBsZW4pKQorKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworK30KKysjZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9m aXBzX3JhbmQuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIyOTE2NjU5ICswMTAwCisrKysg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMJMjAxNi0wMy0wMSAxNjozMzow Ny42MjI5MTY2NTkgKzAxMDAKK0BAIC0wLDAgKzEsNDI4IEBACisrLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz 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 CisrICovCisrCisrLyoKKysgKiBUaGlzIGlzIGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNl ZCBvbiBBTlNJIFg5LjMxIEEuMi40LgorKyAqLworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrLyogSWYgd2UgZG9uJ3QgZGVmaW5lIF9YT1BFTl9T T1VSQ0VfRVhURU5ERUQsIHN0cnVjdCB0aW1ldmFsIHdvbid0CisrICAgYmUgZGVmaW5lZCBhbmQg Z2V0dGltZW9mZGF5KCkgd29uJ3QgYmUgZGVjbGFyZWQgd2l0aCBzdHJpY3QgY29tcGlsZXJzCisr ICAgbGlrZSBERUMgQyBpbiBBTlNJIEMgbW9kZS4gICovCisrI2lmbmRlZiBfWE9QRU5fU09VUkNF X0VYVEVOREVECisrIyBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCisrI2VuZGlmCisr CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgorKyNpZiAhKGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpIHx8IGRlZmluZWQoT1BFTlNTTF9T WVNfVlhXT1JLUykpCisrIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorKyNlbmRpZgorKyNpZiBkZWZp bmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCisrIyBpbmNsdWRlIDx0aW1lLmg+CisrI2VuZGlmCisr I2luY2x1ZGUgPGFzc2VydC5oPgorKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysjIGlmZGVm IE9QRU5TU0xfVU5JU1RECisrIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAorKyMgZWxzZQorKyMg IGluY2x1ZGUgPHVuaXN0ZC5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIK KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrdm9pZCAqT1BFTlNTTF9zdGRlcnIodm9pZCk7 CisrCisrIyBkZWZpbmUgQUVTX0JMT0NLX0xFTkdUSCAgICAgICAgMTYKKysKKysvKiBBRVMgRklQ UyBQUk5HIGltcGxlbWVudGF0aW9uICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKyAgICBpbnQg c2VlZGVkOworKyAgICBpbnQga2V5ZWQ7CisrICAgIGludCB0ZXN0X21vZGU7CisrICAgIGludCBz ZWNvbmQ7CisrICAgIGludCBlcnJvcjsKKysgICAgdW5zaWduZWQgbG9uZyBjb3VudGVyOworKyAg ICBBRVNfS0VZIGtzOworKyAgICBpbnQgdnBvczsKKysgICAgLyogVGVtcG9yYXJ5IHN0b3JhZ2Ug Zm9yIGtleSBpZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KKysgICAgdW5zaWduZWQgY2hhciB0 bXBfa2V5W0FFU19CTE9DS19MRU5HVEhdOworKyAgICB1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NL X0xFTkdUSF07CisrICAgIHVuc2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07CisrICAg IHVuc2lnbmVkIGNoYXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RIXTsKKyt9IEZJUFNfUFJOR19DVFg7 CisrCisrc3RhdGljIEZJUFNfUFJOR19DVFggc2N0eDsKKysKKytzdGF0aWMgaW50IGZpcHNfcHJu Z19mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQgb25vZmYpCisreworKyAg ICBmaXBzX3BybmdfZmFpbCA9IG9ub2ZmOworK30KKysKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZv aWQpCisreworKyAgICBGSVBTX3g5MzFfc3RpY2soMSk7CisrfQorKworK3N0YXRpYyB2b2lkIGZp cHNfcmFuZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKiBjdHgpCisreworKyAgICBjdHgtPnNl ZWRlZCA9IDA7CisrICAgIGN0eC0+a2V5ZWQgPSAwOworKyAgICBjdHgtPnRlc3RfbW9kZSA9IDA7 CisrICAgIGN0eC0+Y291bnRlciA9IDA7CisrICAgIGN0eC0+c2Vjb25kID0gMDsKKysgICAgY3R4 LT5lcnJvciA9IDA7CisrICAgIGN0eC0+dnBvcyA9IDA7CisrICAgIE9QRU5TU0xfY2xlYW5zZShj dHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOworKyAgICBPUEVOU1NMX2NsZWFuc2UoJmN0eC0+a3Ms IHNpemVvZihBRVNfS0VZKSk7CisrfQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19rZXko RklQU19QUk5HX0NUWCAqIGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKKyt7CisrICAgIGlmIChG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NF VF9QUk5HX0tFWSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gMDsK KysgICAgfQorKyAgICBpZiAoa2V5bGVuICE9IDE2ICYmIGtleWxlbiAhPSAyNCAmJiBrZXlsZW4g IT0gMzIpIHsKKysgICAgICAgIC8qIGVycm9yOiBpbnZhbGlkIGtleSBzaXplICovCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgfQorKyAgICBBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVu IDw8IDMsICZjdHgtPmtzKTsKKysgICAgaWYgKGtleWxlbiA9PSAxNikgeworKyAgICAgICAgbWVt Y3B5KGN0eC0+dG1wX2tleSwga2V5LCAxNik7CisrICAgICAgICBjdHgtPmtleWVkID0gMjsKKysg ICAgfSBlbHNlCisrICAgICAgICBjdHgtPmtleWVkID0gMTsKKysgICAgY3R4LT5zZWVkZWQgPSAw OworKyAgICBjdHgtPnNlY29uZCA9IDA7CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMg aW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICogY3R4LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGlu dCBzZWVkbGVuKQorK3sKKysgICAgdW5zaWduZWQgaW50IGk7CisrICAgIGlmICghY3R4LT5rZXll ZCkKKysgICAgICAgIHJldHVybiAwOworKyAgICAvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0 IHN1cHBsaWVkIGRhdGEgKi8KKysgICAgaWYgKGN0eC0+dGVzdF9tb2RlKSB7CisrICAgICAgICBp ZiAoc2VlZGxlbiAhPSBBRVNfQkxPQ0tfTEVOR1RIKQorKyAgICAgICAgICAgIHJldHVybiAwOwor KyAgICAgICAgbWVtY3B5KGN0eC0+Viwgc2VlZCwgQUVTX0JMT0NLX0xFTkdUSCk7CisrICAgICAg ICBjdHgtPnNlZWRlZCA9IDE7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKyAgICAvKiBP dXRzaWRlIHRlc3QgbW9kZSBYT1Igc3VwcGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8K KysgICAgZm9yIChpID0gMDsgaSA8IHNlZWRsZW47IGkrKykgeworKyAgICAgICAgY3R4LT5WW2N0 eC0+dnBvcysrXSBePSBzZWVkW2ldOworKyAgICAgICAgaWYgKGN0eC0+dnBvcyA9PSBBRVNfQkxP Q0tfTEVOR1RIKSB7CisrICAgICAgICAgICAgY3R4LT52cG9zID0gMDsKKysgICAgICAgICAgICAv KiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxlbmd0aCBlcXVhbHMKKysgICAg ICAgICAgICAgKiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCisr ICAgICAgICAgICAgICovCisrICAgICAgICAgICAgaWYgKGN0eC0+a2V5ZWQgPT0gMikgeworKyAg ICAgICAgICAgICAgICBpZiAoIW1lbWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKSB7Cisr ICAgICAgICAgICAgICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFU Q0hfS0VZKTsKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgICAg ICB9CisrICAgICAgICAgICAgICAgIE9QRU5TU0xfY2xlYW5zZShjdHgtPnRtcF9rZXksIDE2KTsK KysgICAgICAgICAgICAgICAgY3R4LT5rZXllZCA9IDE7CisrICAgICAgICAgICAgfQorKyAgICAg ICAgICAgIGN0eC0+c2VlZGVkID0gMTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4g MTsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX3NldF90ZXN0X21vZGUoRklQU19QUk5HX0NUWCAq IGN0eCkKKyt7CisrICAgIGlmIChjdHgtPmtleWVkKSB7CisrICAgICAgICBSQU5EZXJyKFJBTkRf Rl9GSVBTX1NFVF9URVNUX01PREUsIFJBTkRfUl9QUk5HX0tFWUVEKTsKKysgICAgICAgIHJldHVy biAwOworKyAgICB9CisrICAgIGN0eC0+dGVzdF9tb2RlID0gMTsKKysgICAgcmV0dXJuIDE7Cisr fQorKworK2ludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpCisreworKyAgICByZXR1cm4gZmlw c19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKKyt9CisrCisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUo dm9pZCkKKyt7CisrICAgIHJldHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOworK30KKysK KytpbnQgRklQU194OTMxX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKKyt7CisrICAgIGlmICgh c2N0eC50ZXN0X21vZGUpIHsKKysgICAgICAgIFJBTkRlcnIoUkFORF9GX0ZJUFNfWDkzMV9TRVRf RFQsIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9 CisrICAgIG1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7CisrICAgIHJldHVy biAxOworK30KKysKKytpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKKyt7 CisrICAgIGlmICghc2N0eC50ZXN0X21vZGUpIHsKKysgICAgICAgIFJBTkRlcnIoUkFORF9GX0ZJ UFNfUkFORF9TRVRfRFQsIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKTsKKysgICAgICAgIHJldHVy biAwOworKyAgICB9CisrICAgIG1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7 CisrICAgIHJldHVybiAxOworK30KKysKKyt2b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQg Y2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3RyKQorK3sKKysjIGlmZGVmIE9QRU5TU0xfU1lT X1dJTjMyCisrICAgIEZJTEVUSU1FIGZ0OworKyMgZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZY V09SS1MpCisrICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKysjIGVsc2UKKysgICAgc3RydWN0IHRp bWV2YWwgdHY7CisrIyBlbmRpZgorKworKyMgaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwor KyAgICB1bnNpZ25lZCBsb25nIHBpZDsKKysjIGVuZGlmCisrCisrIyBpZmRlZiBPUEVOU1NMX1NZ U19XSU4zMgorKyAgICBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworKyAgICBidWZbMF0g PSAodW5zaWduZWQgY2hhcikoZnQuZHdIaWdoRGF0ZVRpbWUgJiAweGZmKTsKKysgICAgYnVmWzFd ID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOworKyAg ICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4 ZmYpOworKyAgICBidWZbM10gPSAodW5zaWduZWQgY2hhcikoKGZ0LmR3SGlnaERhdGVUaW1lID4+ IDI0KSAmIDB4ZmYpOworKyAgICBidWZbNF0gPSAodW5zaWduZWQgY2hhcikoZnQuZHdMb3dEYXRl VGltZSAmIDB4ZmYpOworKyAgICBidWZbNV0gPSAodW5zaWduZWQgY2hhcikoKGZ0LmR3TG93RGF0 ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5k d0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOworKyAgICBidWZbN10gPSAodW5zaWduZWQgY2hh cikoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7CisrIyBlbGlmIGRlZmluZWQoT1BF TlNTTF9TWVNfVlhXT1JLUykKKysgICAgY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRz KTsKKysgICAgYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKHRzLnR2X3NlYyAmIDB4ZmYpOworKyAg ICBidWZbMV0gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKyAg ICBidWZbMl0gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X3NlYyA+PiAxNikgJiAweGZmKTsKKysg ICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9zZWMgPj4gMjQpICYgMHhmZik7Cisr ICAgIGJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSh0cy50dl9uc2VjICYgMHhmZik7CisrICAgIGJ1 Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSgodHMudHZfbnNlYyA+PiA4KSAmIDB4ZmYpOworKyAgICBi dWZbNl0gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X25zZWMgPj4gMTYpICYgMHhmZik7CisrICAg IGJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSgodHMudHZfbnNlYyA+PiAyNCkgJiAweGZmKTsKKysj IGVsc2UKKysgICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisrICAgIGJ1ZlswXSA9ICh1bnNp Z25lZCBjaGFyKSh0di50dl9zZWMgJiAweGZmKTsKKysgICAgYnVmWzFdID0gKHVuc2lnbmVkIGNo YXIpKCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzJdID0gKHVuc2lnbmVkIGNo YXIpKCh0di50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrICAgIGJ1ZlszXSA9ICh1bnNpZ25lZCBj aGFyKSgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKyAgICBidWZbNF0gPSAodW5zaWduZWQg Y2hhcikodHYudHZfdXNlYyAmIDB4ZmYpOworKyAgICBidWZbNV0gPSAodW5zaWduZWQgY2hhciko KHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIp KCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOworKyAgICBidWZbN10gPSAodW5zaWduZWQgY2hh cikoKHR2LnR2X3VzZWMgPj4gMjQpICYgMHhmZik7CisrIyBlbmRpZgorKyAgICBidWZbOF0gPSAo dW5zaWduZWQgY2hhcikoKnBjdHIgJiAweGZmKTsKKysgICAgYnVmWzldID0gKHVuc2lnbmVkIGNo YXIpKCgqcGN0ciA+PiA4KSAmIDB4ZmYpOworKyAgICBidWZbMTBdID0gKHVuc2lnbmVkIGNoYXIp KCgqcGN0ciA+PiAxNikgJiAweGZmKTsKKysgICAgYnVmWzExXSA9ICh1bnNpZ25lZCBjaGFyKSgo KnBjdHIgPj4gMjQpICYgMHhmZik7CisrCisrICAgICgqcGN0cikrKzsKKysKKysjIGlmbmRlZiBH RVRQSURfSVNfTUVBTklOR0xFU1MKKysgICAgcGlkID0gKHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7 CisrICAgIGJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikocGlkICYgMHhmZik7CisrICAgIGJ1Zlsx M10gPSAodW5zaWduZWQgY2hhcikoKHBpZCA+PiA4KSAmIDB4ZmYpOworKyAgICBidWZbMTRdID0g KHVuc2lnbmVkIGNoYXIpKChwaWQgPj4gMTYpICYgMHhmZik7CisrICAgIGJ1ZlsxNV0gPSAodW5z aWduZWQgY2hhcikoKHBpZCA+PiAyNCkgJiAweGZmKTsKKysjIGVuZGlmCisrfQorKworK3N0YXRp YyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKiBjdHgsCisrICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBpbnQgb3V0bGVuKQorK3sKKysgICAgdW5z aWduZWQgY2hhciBSW0FFU19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOworKyAg ICB1bnNpZ25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysgICAgaW50IGk7CisrICAg IGlmIChjdHgtPmVycm9yKSB7CisrICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsIFJB TkRfUl9QUk5HX0VSUk9SKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGlmICgh Y3R4LT5rZXllZCkgeworKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1Jf Tk9fS0VZX1NFVCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBpZiAoIWN0eC0+ c2VlZGVkKSB7CisrICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsIFJBTkRfUl9QUk5H X05PVF9TRUVERUQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgZm9yICg7Oykg eworKyAgICAgICAgaWYgKCFjdHgtPnRlc3RfbW9kZSkKKysgICAgICAgICAgICBGSVBTX2dldF90 aW1ldmVjKGN0eC0+RFQsICZjdHgtPmNvdW50ZXIpOworKyAgICAgICAgQUVTX2VuY3J5cHQoY3R4 LT5EVCwgSSwgJmN0eC0+a3MpOworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19M RU5HVEg7IGkrKykKKysgICAgICAgICAgICB0bXBbaV0gPSBJW2ldIF4gY3R4LT5WW2ldOworKyAg ICAgICAgQUVTX2VuY3J5cHQodG1wLCBSLCAmY3R4LT5rcyk7CisrICAgICAgICBmb3IgKGkgPSAw OyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQorKyAgICAgICAgICAgIHRtcFtpXSA9IFJbaV0g XiBJW2ldOworKyAgICAgICAgQUVTX2VuY3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKKysg ICAgICAgIC8qIENvbnRpbnVvdXMgUFJORyB0ZXN0ICovCisrICAgICAgICBpZiAoY3R4LT5zZWNv bmQpIHsKKysgICAgICAgICAgICBpZiAoZmlwc19wcm5nX2ZhaWwpCisrICAgICAgICAgICAgICAg IG1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKyAgICAgICAgICAgIGlm ICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpIHsKKysgICAgICAgICAg ICAgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1JfUFJOR19TVFVDSyk7CisrICAg ICAgICAgICAgICAgIGN0eC0+ZXJyb3IgPSAxOworKyAgICAgICAgICAgICAgICBmaXBzX3NldF9z ZWxmdGVzdF9mYWlsKCk7CisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAg IH0KKysgICAgICAgIH0KKysgICAgICAgIG1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19M RU5HVEgpOworKyAgICAgICAgaWYgKCFjdHgtPnNlY29uZCkgeworKyAgICAgICAgICAgIGN0eC0+ c2Vjb25kID0gMTsKKysgICAgICAgICAgICBpZiAoIWN0eC0+dGVzdF9tb2RlKQorKyAgICAgICAg ICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChvdXRsZW4gPD0g QUVTX0JMT0NLX0xFTkdUSCkgeworKyAgICAgICAgICAgIG1lbWNweShvdXQsIFIsIG91dGxlbik7 CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICBtZW1jcHkob3V0 LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysgICAgICAgIG91dCArPSBBRVNfQkxPQ0tfTEVOR1RI OworKyAgICAgICAgb3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7CisrICAgIH0KKysgICAgcmV0 dXJuIDE7CisrfQorKworK2ludCBGSVBTX3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFy ICprZXksIGludCBrZXlsZW4pCisreworKyAgICBpbnQgcmV0OworKyAgICBDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX1JBTkQpOworKyAgICByZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwg a2V5LCBrZXlsZW4pOworKyAgICBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Cisr ICAgIHJldHVybiByZXQ7CisrfQorKworK2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNp Z25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQorK3sKKysgICAgcmV0dXJu IEZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKTsKKyt9CisrCisraW50IEZJUFNfeDkzMV9z ZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQorK3sKKysgICAgaW50IHJldDsKKysg ICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysgICAgcmV0ID0gZmlwc19zZXRf cHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsKKysgICAgQ1JZUFRPX3dfdW5sb2NrKENS WVBUT19MT0NLX1JBTkQpOworKyAgICByZXR1cm4gcmV0OworK30KKysKKytpbnQgRklQU194OTMx X2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IGNvdW50KQorK3sKKysgICAgaW50IHJldDsK KysgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysgICAgcmV0ID0gZmlwc19y YW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKKysgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X1JBTkQpOworKyAgICByZXR1cm4gcmV0OworK30KKysKKytpbnQgRklQU194OTMxX3N0YXR1cyh2 b2lkKQorK3sKKysgICAgaW50IHJldDsKKysgICAgQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19S QU5EKTsKKysgICAgcmV0ID0gc2N0eC5zZWVkZWQ7CisrICAgIENSWVBUT19yX3VubG9jayhDUllQ VE9fTE9DS19SQU5EKTsKKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrdm9pZCBGSVBTX3g5MzFf cmVzZXQodm9pZCkKKyt7CisrICAgIENSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Cisr ICAgIGZpcHNfcmFuZF9wcm5nX3Jlc2V0KCZzY3R4KTsKKysgICAgQ1JZUFRPX3dfdW5sb2NrKENS WVBUT19MT0NLX1JBTkQpOworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9zZWVkKGNv bnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQorK3sKKysgICAgRklQU194OTMxX3NlZWQoc2Vl ZCwgc2VlZGxlbik7CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZG9f cmFuZF9hZGQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNlZWRsZW4sIGRvdWJsZSBhZGRfZW50cm9w eSkKKyt7CisrICAgIEZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOworKyAgICByZXR1cm4g MTsKKyt9CisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfeDkzMV9tZXRoID0gewor KyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKKysgICAgRklQU194OTMxX2J5dGVzLAorKyAgICBGSVBT X3g5MzFfcmVzZXQsCisrICAgIGZpcHNfZG9fcmFuZF9hZGQsCisrICAgIEZJUFNfeDkzMV9ieXRl cywKKysgICAgRklQU194OTMxX3N0YXR1cworK307CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJ UFNfeDkzMV9tZXRob2Qodm9pZCkKKyt7CisrICAgIHJldHVybiAmcmFuZF94OTMxX21ldGg7Cisr fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19y YW5kLmguZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAorLS0tIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMJMjAxNi0wMy0wMSAxNjoz MzowNy42MjI5MTY2NTkgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBz X3JhbmQuaAkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMjkxNjY1OSArMDEwMAorQEAgLTAsMCArMSwx NjMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaWZuZGVmIEhFQURFUl9GSVBT X1JBTkRfSAorKyMgZGVmaW5lIEhFQURFUl9GSVBTX1JBTkRfSAorKworKyMgaW5jbHVkZSA8b3Bl bnNzbC9hZXMuaD4KKysjIGluY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrIyBpbmNsdWRlIDxvcGVu c3NsL2htYWMuaD4KKysjIGluY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKworKyMgaWZkZWYgT1BF TlNTTF9GSVBTCisrCisrIyAgaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrIyAg ZW5kaWYKKysKKysgICAgaW50IEZJUFNfeDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwgaW50IGtleWxlbik7CisrICAgIGludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpi dWYsIGludCBudW0pOworKyAgICBpbnQgRklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91 dCwgaW50IG91dGxlbik7CisrCisrICAgIGludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpOwor KyAgICB2b2lkIEZJUFNfeDkzMV9yZXNldCh2b2lkKTsKKysgICAgaW50IEZJUFNfeDkzMV9zZXRf ZHQodW5zaWduZWQgY2hhciAqZHQpOworKworKyAgICBpbnQgRklQU194OTMxX3N0YXR1cyh2b2lk KTsKKysKKysgICAgY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCk7Cisr CisrICAgIHR5cGVkZWYgc3RydWN0IGRyYmdfY3R4X3N0IERSQkdfQ1RYOworKy8qIERSQkcgZXh0 ZXJuYWwgZmxhZ3MgKi8KKysvKiBGbGFnIGZvciBDVFIgbW9kZSBvbmx5OiB1c2UgZGVyaXZhdGlv biBmdW5jdGlvbiBjdHJfZGYgKi8KKysjICBkZWZpbmUgRFJCR19GTEFHX0NUUl9VU0VfREYgICAg ICAgICAgICAweDEKKysvKiBQUk5HIGlzIGluIHRlc3Qgc3RhdGUgKi8KKysjICBkZWZpbmUgRFJC R19GTEFHX1RFU1QgICAgICAgICAgICAgICAgICAweDIKKysKKysgICAgRFJCR19DVFggKkZJUFNf ZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7CisrICAgIGludCBGSVBTX2Ry YmdfaW5pdChEUkJHX0NUWCAqZGN0eCwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7Cisr ICAgIGludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBl cnNsZW4pOworKyAgICBpbnQgRklQU19kcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwgY29uc3Qg dW5zaWduZWQgY2hhciAqYWRpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFk aW5sZW4pOworKyAgICBpbnQgRklQU19kcmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNp Z25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHByZWRpY3Rpb25fcmVzaXN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrCisrICAgIGlu dCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCk7CisrICAgIHZvaWQgRklQ U19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpOworKworKyAgICBpbnQgRklQU19kcmJnX3NldF9j YWxsYmFja3MoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgKCpnZXRfZW50cm9weSkgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipw b3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZW50cm9weSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pbl9sZW4sCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhfbGVuKSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX2VudHJvcHkpIChEUkJH X0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xlbiksCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAoKmdldF9ub25jZSkgKERSQkdfQ1RY ICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pbl9sZW4sCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg bWF4X2xlbiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2xlYW51 cF9ub25jZSkgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4p KTsKKysKKysgICAgaW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRj dHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAoKmdldF9h ZGluKSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipwb3V0KSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfYWRpbikgKERSQkdf Q1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xlbiksCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnJhbmRfc2VlZF9jYikgKERS QkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSksCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnJhbmRfYWRkX2NiKSAoRFJCR19DVFgg KmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB2b2lkICpidWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZW50cm9weSkpOwor KworKyAgICB2b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgpOworKyAg ICB2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFggKmN0eCwgdm9pZCAqYXBwX2Rh dGEpOworKyAgICBzaXplX3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0 eCk7CisrICAgIGludCBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKKysg ICAgdm9pZCBGSVBTX2RyYmdfc2V0X2NoZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQg aW50ZXJ2YWwpOworKyAgICB2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdf Q1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOworKworKyAgICBpbnQgRklQU19kcmJnX2hlYWx0aF9j aGVjayhEUkJHX0NUWCAqZGN0eCk7CisrCisrICAgIERSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0 X2RyYmcodm9pZCk7CisrICAgIGNvbnN0IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZv aWQpOworKworKyAgICBpbnQgRklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0Qg Km1ldGgpOworKyAgICBjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9p ZCk7CisrCisrICAgIHZvaWQgRklQU19yYW5kX3NldF9iaXRzKGludCBuYml0cyk7CisrCisrICAg IGludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCk7CisrCisrLyogMS4wLjAgY29tcGF0IGZ1bmN0 aW9ucyAqLworKyAgICBpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAq a2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7CisrICAgIGludCBGSVBTX3JhbmRfc2VlZChj b25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKKysgICAgaW50IEZJUFNfcmFu ZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKTsKKysg ICAgaW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCk7CisrICAgIHZvaWQgRklQU19yYW5kX3Jl c2V0KHZvaWQpOworKyAgICBpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7 CisrICAgIGludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOworKyAgICBjb25zdCBSQU5EX01FVEhP RCAqRklQU19yYW5kX21ldGhvZCh2b2lkKTsKKysKKysjICBpZmRlZiAgX19jcGx1c3BsdXMKKyt9 CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlw cy9maXBzX3JhbmRfbGNsLmgKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3Jh bmRfbGNsLmguZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMjkxNjY1OSArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9sY2wuaAkyMDE2LTAzLTAxIDE2OjMz OjA3LjYyMjkxNjY1OSArMDEwMAorQEAgLTAsMCArMSwyMTMgQEAKKysvKiBmaXBzL3JhbmQvZmlw c19yYW5kX2xjbC5oICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2 ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGlj ZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKyt0eXBlZGVmIHN0cnVjdCBkcmJnX2hh c2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7CisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19obWFjX2N0eF9z dCBEUkJHX0hNQUNfQ1RYOworK3R5cGVkZWYgc3RydWN0IGRyYmdfY3RyX2N0eF9zdCBEUkJHX0NU Ul9DVFg7CisrCisrLyogODg4IGJpdHMgZnJvbSAxMC4xIHRhYmxlIDIgKi8KKysjZGVmaW5lIEhB U0hfUFJOR19NQVhfU0VFRExFTiAgIDExMQorKworK3N0cnVjdCBkcmJnX2hhc2hfY3R4X3N0IHsK KysgICAgY29uc3QgRVZQX01EICptZDsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICB1bnNp Z25lZCBjaGFyIFZbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKKysgICAgdW5zaWduZWQgY2hhciBD W0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrICAgIC8qIFRlbXBvcmFyeSB2YWx1ZSBzdG9yYWdl OiBzaG91bGQgYWx3YXlzIGV4Y2VlZCBtYXggZGlnZXN0IGxlbmd0aCAqLworKyAgICB1bnNpZ25l ZCBjaGFyIHZ0bXBbSEFTSF9QUk5HX01BWF9TRUVETEVOXTsKKyt9OworKworK3N0cnVjdCBkcmJn X2htYWNfY3R4X3N0IHsKKysgICAgY29uc3QgRVZQX01EICptZDsKKysgICAgSE1BQ19DVFggaGN0 eDsKKysgICAgdW5zaWduZWQgY2hhciBLW0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVk IGNoYXIgVltFVlBfTUFYX01EX1NJWkVdOworK307CisrCisrc3RydWN0IGRyYmdfY3RyX2N0eF9z dCB7CisrICAgIEFFU19LRVkga3M7CisrICAgIHNpemVfdCBrZXlsZW47CisrICAgIHVuc2lnbmVk IGNoYXIgS1szMl07CisrICAgIHVuc2lnbmVkIGNoYXIgVlsxNl07CisrICAgIC8qIFRlbXAgdmFy aWFibGVzIHVzZWQgYnkgZGVyaXZhdGlvbiBmdW5jdGlvbiAqLworKyAgICBBRVNfS0VZIGRmX2tz OworKyAgICBBRVNfS0VZIGRmX2t4a3M7CisrICAgIC8qIFRlbXBvcmFyeSBibG9jayBzdG9yYWdl IHVzZWQgYnkgY3RyX2RmICovCisrICAgIHVuc2lnbmVkIGNoYXIgYmx0bXBbMTZdOworKyAgICBz aXplX3QgYmx0bXBfcG9zOworKyAgICB1bnNpZ25lZCBjaGFyIEtYWzQ4XTsKKyt9OworKworKy8q IERSQkcgaW50ZXJuYWwgZmxhZ3MgKi8KKysKKysvKiBGdW5jdGlvbnMgc2hvdWxkbid0IGNhbGwg ZXJyIGxpYnJhcnkgKi8KKysjZGVmaW5lIERSQkdfRkxBR19OT0VSUiAgICAgICAgICAgICAgICAg MHgxCisrLyogQ3VzdG9tIHJlc2VlZCBjaGVja2luZyAqLworKyNkZWZpbmUgRFJCR19DVVNUT01f UkVTRUVEICAgICAgICAgICAgICAweDIKKysKKysvKiBEUkJHIHN0YXR1cyB2YWx1ZXMgKi8KKysv KiBub3QgaW5pdGlhbGlzZWQgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQg ICAgICAgMAorKy8qIG9rIGFuZCByZWFkeSB0byBnZW5lcmF0ZSByYW5kb20gYml0cyAqLworKyNk ZWZpbmUgRFJCR19TVEFUVVNfUkVBRFkgICAgICAgICAgICAgICAxCisrLyogcmVzZWVkIHJlcXVp cmVkICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19SRVNFRUQgICAgICAgICAgICAgIDIKKysvKiBm YXRhbCBlcnJvciBjb25kaXRpb24gKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX0VSUk9SICAgICAg ICAgICAgICAgMworKworKy8qIEEgZGVmYXVsdCBtYXhpbXVtIGxlbmd0aDogbGFyZ2VyIHRoYW4g YW55IHJlYXNvbmFibGUgdmFsdWUgdXNlZCBpbiBwcmF0aWNlICovCisrCisrI2RlZmluZSBEUkJH X01BWF9MRU5HVEggICAgICAgICAgICAgICAgIDB4N2ZmZmZmZjAKKysvKiBNYXhpbXVtIERSQkcg YmxvY2sgbGVuZ3RoOiBhbGwgbWQgc2l6ZXMgYXJlIGJpZ2dlciB0aGFuIGNpcGhlciBibG9ja3Mg c2l6ZXMKKysgKiBzbyB1c2UgbWF4IGRpZ2VzdCBsZW5ndGguCisrICovCisrI2RlZmluZSBEUkJH X01BWF9CTE9DSyAgICAgICAgICAgICAgICAgIEVWUF9NQVhfTURfU0laRQorKworKyNkZWZpbmUg RFJCR19IRUFMVEhfSU5URVJWQUwgICAgICAgICAgICAoMSA8PCAyNCkKKysKKysvKiBEUkJHIGNv bnRleHQgc3RydWN0dXJlICovCisrCisrc3RydWN0IGRyYmdfY3R4X3N0IHsKKysgICAgLyogRmly c3QgdHlwZXMgY29tbW9uIHRvIGFsbCBpbXBsZW1lbnRhdGlvbnMgKi8KKysgICAgLyogRFJCRyB0 eXBlOiBhIE5JRCBmb3IgdGhlIHVuZGVybHlpbmcgYWxnb3JpdGhtICovCisrICAgIGludCB0eXBl OworKyAgICAvKiBWYXJpb3VzIGV4dGVybmFsIGZsYWdzICovCisrICAgIHVuc2lnbmVkIGludCB4 ZmxhZ3M7CisrICAgIC8qIFZhcmlvdXMgaW50ZXJuYWwgdXNlIG9ubHkgZmxhZ3MgKi8KKysgICAg dW5zaWduZWQgaW50IGlmbGFnczsKKysgICAgLyogVXNlZCBmb3IgcGVyaW9kaWMgaGVhbHRoIGNo ZWNrcyAqLworKyAgICBpbnQgaGVhbHRoX2NoZWNrX2NudCwgaGVhbHRoX2NoZWNrX2ludGVydmFs OworKworKyAgICAvKiBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHNldHVwIGJ5IG1lY2hh bmlzbSBkcmJnX2luaXQoKSBjYWxsICovCisrICAgIGludCBzdHJlbmd0aDsKKysgICAgc2l6ZV90 IGJsb2NrbGVuZ3RoOworKyAgICBzaXplX3QgbWF4X3JlcXVlc3Q7CisrCisrICAgIHNpemVfdCBt aW5fZW50cm9weSwgbWF4X2VudHJvcHk7CisrICAgIHNpemVfdCBtaW5fbm9uY2UsIG1heF9ub25j ZTsKKysgICAgc2l6ZV90IG1heF9wZXJzLCBtYXhfYWRpbjsKKysgICAgdW5zaWduZWQgaW50IHJl c2VlZF9jb3VudGVyOworKyAgICB1bnNpZ25lZCBpbnQgcmVzZWVkX2ludGVydmFsOworKyAgICBz aXplX3Qgc2VlZGxlbjsKKysgICAgaW50IHN0YXR1czsKKysgICAgLyogQXBwbGljYXRpb24gZGF0 YTogdHlwaWNhbGx5IHVzZWQgYnkgdGVzdCBnZXRfZW50cm9weSAqLworKyAgICB2b2lkICphcHBf ZGF0YTsKKysgICAgLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc3RydWN0dXJlcyAqLworKyAg ICB1bmlvbiB7CisrICAgICAgICBEUkJHX0hBU0hfQ1RYIGhhc2g7CisrICAgICAgICBEUkJHX0hN QUNfQ1RYIGhtYWM7CisrICAgICAgICBEUkJHX0NUUl9DVFggY3RyOworKyAgICB9IGQ7CisrICAg IC8qIEluaXRpYWxpYXNlIFBSTkcgYW5kIHNldHVwIGNhbGxiYWNrcyBiZWxvdyAqLworKyAgICBp bnQgKCppbml0KSAoRFJCR19DVFggKmN0eCwgaW50IG5pZCwgaW50IHNlY3VyaXR5LCB1bnNpZ25l ZCBpbnQgZmxhZ3MpOworKyAgICAvKiBJbnRhbnRpYXRlIFBSTkcgKi8KKysgICAgaW50ICgqaW5z dGFudGlhdGUpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKKysgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAorKyAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJz bGVuKTsKKysgICAgLyogcmVzZWVkICovCisrICAgIGludCAoKnJlc2VlZCkgKERSQkdfQ1RYICpj dHgsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90 IGVudGxlbiwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5sZW4pOworKyAgICAvKiBnZW5lcmF0IG91dHB1dCAqLworKyAgICBpbnQgKCpn ZW5lcmF0ZSkgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg Y2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKysgICAgLyogdW5pbnN0YW50aWF0 ZSAqLworKyAgICBpbnQgKCp1bmluc3RhbnRpYXRlKSAoRFJCR19DVFggKmN0eCk7CisrCisrICAg IC8qIEVudHJvcHkgc291cmNlIGJsb2NrIGxlbmd0aCAqLworKyAgICBzaXplX3QgZW50cm9weV9i bG9ja2xlbjsKKysKKysgICAgLyogZW50cm9weSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KKysgICAg c2l6ZV90ICgqZ2V0X2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91 dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9s ZW4sIHNpemVfdCBtYXhfbGVuKTsKKysgICAgLyogSW5kaWNhdGVzIHdlIGhhdmUgZmluaXNoZWQg d2l0aCBlbnRyb3B5IGJ1ZmZlciAqLworKyAgICB2b2lkICgqY2xlYW51cF9lbnRyb3B5KSAoRFJC R19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7CisrCisrICAgIC8q IG5vbmNlIGdhdGhlcmluZyBmdW5jdGlvbiAqLworKyAgICBzaXplX3QgKCpnZXRfbm9uY2UpIChE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7CisrICAg IC8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggbm9uY2UgYnVmZmVyICovCisrICAg IHZvaWQgKCpjbGVhbnVwX25vbmNlKSAoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LCBzaXplX3Qgb2xlbik7CisrCisrICAgIC8qIENvbnRpbnVvdXMgcmFuZG9tIG51bWJlciB0ZXN0 IHRlbXBvcmFyeSBhcmVhICovCisrICAgIC8qIExhc3QgYmxvY2sgKi8KKysgICAgdW5zaWduZWQg Y2hhciBsYltFVlBfTUFYX01EX1NJWkVdOworKyAgICAvKiBzZXQgaWYgbGIgaXMgdmFsaWQgKi8K KysgICAgaW50IGxiX3ZhbGlkOworKworKyAgICAvKiBDYWxsYmFja3MgdXNlZCB3aGVuIGNhbGxl ZCB0aHJvdWdoIFJBTkQgaW50ZXJmYWNlICovCisrICAgIC8qIEdldCBhbnkgYWRkaXRpb25hbCBp bnB1dCBmb3IgZ2VuZXJhdGUgKi8KKysgICAgc2l6ZV90ICgqZ2V0X2FkaW4pIChEUkJHX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCk7CisrICAgIHZvaWQgKCpjbGVhbnVwX2FkaW4pIChE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvbGVuKTsKKysgICAgLyog Q2FsbGJhY2sgZm9yIFJBTkRfc2VlZCgpLCBSQU5EX2FkZCgpICovCisrICAgIGludCAoKnJhbmRf c2VlZF9jYikgKERSQkdfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7CisrICAg IGludCAoKnJhbmRfYWRkX2NiKSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KTsKKyt9OworKwor K2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBmaXBzX2RyYmdf aGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJH X0NUWCAqZGN0eCk7CisraW50IGZpcHNfZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQs IHVuc2lnbmVkIGludCBmbGFncyk7CisraW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RY ICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvdXQpOworKworK2NvbnN0IHN0cnVjdCBlbnZf bWRfc3QgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpOworKworK2NvbnN0IHN0cnVjdCBl dnBfY2lwaGVyX3N0ICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKKysKKysjZGVmaW5l IEZJUFNfZGlnZXN0aW5pdCBFVlBfRGlnZXN0SW5pdAorKyNkZWZpbmUgRklQU19kaWdlc3R1cGRh dGUgRVZQX0RpZ2VzdFVwZGF0ZQorKyNkZWZpbmUgRklQU19kaWdlc3RmaW5hbCBFVlBfRGlnZXN0 RmluYWwKKysjZGVmaW5lIE1fRVZQX01EX3NpemUgRVZQX01EX3NpemUKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHNfcmFuZF9saWIuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIyOTE2NjU5ICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jCTIwMTYt MDMtMDEgMTY6MzM6MDcuNjIyOTE2NjU5ICswMTAwCitAQCAtMCwwICsxLDE4MSBAQAorKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Cisr I2luY2x1ZGUgImVfb3MuaCIKKysKKysvKiBGSVBTIEFQSSBmb3IgUFJORyB1c2UuIFNpbWlsYXIg dG8gUkFORCBmdW5jdGlvbmFsaXR5IGJ1dCB3aXRob3V0CisrICogRU5HSU5FIGFuZCBhZGRpdGlv bmFsIGNoZWNraW5nIGZvciBub24tRklQUyByYW5kIG1ldGhvZHMuCisrICovCisrCisrc3RhdGlj IGNvbnN0IFJBTkRfTUVUSE9EICpmaXBzX3JhbmRfbWV0aCA9IE5VTEw7Cisrc3RhdGljIGludCBm aXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9IDA7Cisrc3RhdGljIGludCBmaXBzX3JhbmRfYml0cyA9 IDA7CisrCisrLyogQWxsb3dzIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIG51bWJlciBvZiBiaXRz IGFuZCB1c2VzIG5vbi1GSVBTIG1ldGhvZHMgKi8KKyt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhp bnQgbmJpdHMpCisreworKyAgICBmaXBzX3JhbmRfYml0cyA9IG5iaXRzOworK30KKysKKytpbnQg RklQU19yYW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpCisreworKyAgICBp ZiAoIWZpcHNfcmFuZF9iaXRzKSB7CisrICAgICAgICBpZiAobWV0aCA9PSBGSVBTX2RyYmdfbWV0 aG9kKCkpCisrICAgICAgICAgICAgZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAxOworKyAgICAg ICAgZWxzZSBpZiAobWV0aCA9PSBGSVBTX3g5MzFfbWV0aG9kKCkpCisrICAgICAgICAgICAgZmlw c19hcHByb3ZlZF9yYW5kX21ldGggPSAyOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAg Zmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAwOworKyAgICAgICAgICAgIGlmIChGSVBTX21vZHVs ZV9tb2RlKCkpIHsKKysgICAgICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NF VF9NRVRIT0QsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKyAgICAgICAgICAgICAgICByZXR1 cm4gMDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysgICAgZmlwc19yYW5k X21ldGggPSBtZXRoOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrY29uc3QgUkFORF9NRVRIT0Qg KkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpCisreworKyAgICByZXR1cm4gZmlwc19yYW5kX21l dGg7CisrfQorKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCisr eworKyAgICByZXR1cm4gRklQU19yYW5kX2dldF9tZXRob2QoKTsKKyt9CisrCisrdm9pZCBGSVBT X3JhbmRfcmVzZXQodm9pZCkKKyt7CisrICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3Jh bmRfbWV0aC0+Y2xlYW51cCkKKysgICAgICAgIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKCk7Cisr fQorKworK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpF X1QgbnVtKQorK3sKKysgICAgaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21v ZHVsZV9tb2RlKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRUVELCBG SVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAg IGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c2VlZCkKKysgICAgICAgIGZp cHNfcmFuZF9tZXRoLT5zZWVkKGJ1ZiwgbnVtKTsKKysgICAgcmV0dXJuIDE7CisrfQorKworK3Zv aWQgRklQU19yYW5kX2FkZChjb25zdCB2b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5 KQorK3sKKysgICAgaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9t b2RlKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9BREQsIEZJUFNfUl9O T05fRklQU19NRVRIT0QpOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGlmIChmaXBz X3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+YWRkKQorKyAgICAgICAgZmlwc19yYW5kX21l dGgtPmFkZChidWYsIG51bSwgZW50cm9weSk7CisrfQorKworK2ludCBGSVBTX3JhbmRfYnl0ZXMo dW5zaWduZWQgY2hhciAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKKyt7CisrICAgIGlmICgh Zmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQllURVMsIEZJUFNfUl9OT05fRklQU19NRVRIT0Qp OworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYm IGZpcHNfcmFuZF9tZXRoLT5ieXRlcykKKysgICAgICAgIHJldHVybiBmaXBzX3JhbmRfbWV0aC0+ Ynl0ZXMoYnVmLCBudW0pOworKyAgICByZXR1cm4gMDsKKyt9CisrCisraW50IEZJUFNfcmFuZF9w c2V1ZG9fYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbnVtKQorK3sKKysgICAgaWYgKCFm aXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpIHsKKysgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9QU0VVRE9fQllURVMsIEZJUFNfUl9OT05fRklQU19N RVRIT0QpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgaWYgKGZpcHNfcmFuZF9t ZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKQorKyAgICAgICAgcmV0dXJuIGZpcHNf cmFuZF9tZXRoLT5wc2V1ZG9yYW5kKGJ1ZiwgbnVtKTsKKysgICAgcmV0dXJuIC0xOworK30KKysK KytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKQorK3sKKysgICAgaWYgKCFmaXBzX2FwcHJvdmVk X3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfUkFORF9TVEFUVVMsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKyAgICAgICAg cmV0dXJuIDA7CisrICAgIH0KKysgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9t ZXRoLT5zdGF0dXMpCisrICAgICAgICByZXR1cm4gZmlwc19yYW5kX21ldGgtPnN0YXR1cygpOwor KyAgICByZXR1cm4gMDsKKyt9CisrCisrLyogUmV0dXJuIGluc3RhbnRpYXRlZCBzdHJlbmd0aCBv ZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlzIGFuIGludGVybmFsCisrICogcGFyYW1ldGVyLiBGb3Ig WDkuMzEgUFJORyBpdCBpcyA4MCBiaXRzIChmcm9tIFNQODAwLTEzMSkuIEFueSBvdGhlcgorKyAq IHR5cGUgb2YgUFJORyBpcyBub3QgYXBwcm92ZWQgYW5kIHJldHVybnMgMCBpbiBGSVBTIG1vZGUg YW5kIG1heGltdW0KKysgKiAyNTYgb3V0c2lkZSBGSVBTIG1vZGUuCisrICovCisrCisraW50IEZJ UFNfcmFuZF9zdHJlbmd0aCh2b2lkKQorK3sKKysgICAgaWYgKGZpcHNfcmFuZF9iaXRzKQorKyAg ICAgICAgcmV0dXJuIGZpcHNfcmFuZF9iaXRzOworKyAgICBpZiAoZmlwc19hcHByb3ZlZF9yYW5k X21ldGggPT0gMSkKKysgICAgICAgIHJldHVybiBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKEZJUFNf Z2V0X2RlZmF1bHRfZHJiZygpKTsKKysgICAgZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21l dGggPT0gMikKKysgICAgICAgIHJldHVybiA4MDsKKysgICAgZWxzZSBpZiAoZmlwc19hcHByb3Zl ZF9yYW5kX21ldGggPT0gMCkgeworKyAgICAgICAgaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKKysg ICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICByZXR1cm4g MjU2OworKyAgICB9CisrICAgIHJldHVybiAwOworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIyOTE2 NjU5ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0 ZXN0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjI5MTY2NTkgKzAxMDAKK0BAIC0wLDAgKzEsMTc2 IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoK KysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+ CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKyt0 eXBlZGVmIHN0cnVjdCB7CisrICAgIHVuc2lnbmVkIGNoYXIgRFRbMTZdOworKyAgICB1bnNpZ25l ZCBjaGFyIFZbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIFJbMTZdOworK30gQUVTX1BSTkdfVFY7 CisrCisrLyogVGhlIGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZy b20gdGhlIFJHTlZTIHNwZWMgKi8KKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tl eVsxNl0gPQorKyAgICB7IDB4ZjMsIDB4YjEsIDB4NjYsIDB4NmQsIDB4MTMsIDB4NjAsIDB4NzIs IDB4NDIsCisrICAgIDB4ZWQsIDB4MDYsIDB4MWMsIDB4YWIsIDB4YjgsIDB4ZDQsIDB4NjIsIDB4 MDIKKyt9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTI4X3R2ID0geworKyAgICAvKiBE VCAqLworKyAgICB7MHhlNiwgMHhiMywgMHhiZSwgMHg3OCwgMHgyYSwgMHgyMywgMHhmYSwgMHg2 MiwKKysgICAgIDB4ZDcsIDB4MWQsIDB4NGEsIDB4ZmIsIDB4YjAsIDB4ZTksIDB4MjIsIDB4Zjl9 LAorKyAgICAvKiBWICovCisrICAgIHsweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLAorKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMH0sCisrICAgIC8qIFIgKi8KKysgICAgezB4NTksIDB4NTMsIDB4MWUsIDB4ZDEs IDB4M2IsIDB4YjAsIDB4YzAsIDB4NTUsCisrICAgICAweDg0LCAweDc5LCAweDY2LCAweDg1LCAw eGMxLCAweDJmLCAweDc2LCAweDQxfQorK307CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml9rZXlbMjRdID0KKysgICAgeyAweDE1LCAweGQ4LCAweDc4LCAweDBkLCAweDYyLCAweGQz LCAweDI1LCAweDZlLAorKyAgICAweDQ0LCAweDY0LCAweDEwLCAweDEzLCAweDYwLCAweDJiLCAw eGE5LCAweGJjLAorKyAgICAweDRhLCAweGZiLCAweGNhLCAweGViLCAweDRjLCAweDhiLCAweDk5 LCAweDNiCisrfTsKKysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzE5Ml90diA9IHsKKysgICAg LyogRFQgKi8KKysgICAgezB4M2YsIDB4ZDgsIDB4ZmYsIDB4ZTgsIDB4ODAsIDB4NjksIDB4OGIs IDB4YzEsCisrICAgICAweGJmLCAweDk5LCAweDdkLCAweGE0LCAweDI0LCAweDc4LCAweGYzLCAw eDRifSwKKysgICAgLyogViAqLworKyAgICB7MHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwKKysgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDB9LAorKyAgICAvKiBSICovCisrICAgIHsweDE3LCAweDA3LCAweGQ1LCAw eDI4LCAweDE5LCAweDc5LCAweDFlLCAweGVmLAorKyAgICAgMHhhNSwgMHgwYywgMHhiZiwgMHgy NSwgMHhlNSwgMHg1NiwgMHhiNCwgMHg5M30KKyt9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFy IGFlc18yNTZfa2V5WzMyXSA9CisrICAgIHsgMHg2ZCwgMHgxNCwgMHgwNiwgMHg2YywgMHhiNiwg MHhkOCwgMHgyMSwgMHgyZCwKKysgICAgMHg4MiwgMHg4ZCwgMHhmYSwgMHhmMiwgMHg3YSwgMHgw MywgMHhiNywgMHg5ZiwKKysgICAgMHgwYywgMHhjNywgMHgzZSwgMHhjZCwgMHg3NiwgMHhlYiwg MHhlZSwgMHhiNSwKKysgICAgMHgyMSwgMHgwNSwgMHg4YywgMHg0ZiwgMHgzMSwgMHg3YSwgMHg4 MCwgMHhiYgorK307CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18yNTZfdHYgPSB7CisrICAg IC8qIERUICovCisrICAgIHsweGRhLCAweDNhLCAweDQxLCAweGVjLCAweDFkLCAweGEzLCAweGIw LCAweGQ1LAorKyAgICAgMHhmMiwgMHhhOSwgMHg0ZSwgMHgzNCwgMHg3NCwgMHg4ZSwgMHg5ZSwg MHg4OH0sCisrICAgIC8qIFYgKi8KKysgICAgezB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsCisrICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwfSwKKysgICAgLyogUiAqLworKyAgICB7MHgzNSwgMHhjNywgMHhlZiwg MHhhNywgMHg3OCwgMHg0ZCwgMHgyOSwgMHhiYywKKysgICAgIDB4ODIsIDB4NzksIDB4OTksIDB4 ZmIsIDB4ZDAsIDB4YjMsIDB4M2IsIDB4NzJ9CisrfTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9y bmcoKQorK3sKKysgICAgYWVzXzE5Ml90di5WWzBdKys7CisrfQorKworKyMgZGVmaW5lIGZpcHNf eDkzMV90ZXN0KGtleSwgdHYpIFwKKysgICAgICAgIGRvX3g5MzFfdGVzdChrZXksIHNpemVvZiBr ZXksICZ0dikKKysKKytzdGF0aWMgaW50IGRvX3g5MzFfdGVzdCh1bnNpZ25lZCBjaGFyICprZXks IGludCBrZXlsZW4sIEFFU19QUk5HX1RWICogdHYpCisreworKyAgICB1bnNpZ25lZCBjaGFyIFJb MTZdLCBWWzE2XTsKKysgICAgaW50IHJ2ID0gMTsKKysgICAgbWVtY3B5KFYsIHR2LT5WLCBzaXpl b2YoVikpOworKyAgICBpZiAoIUZJUFNfeDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKSkKKysgICAg ICAgIHJldHVybiAwOworKyAgICBpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9YOTMx LCBrZXlsZW4sIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDE7CisrICAgIGlmICghZmlwc19wb3N0 X2NvcnJ1cHQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCkpCisrICAgICAgICBWWzBdKys7 CisrICAgIEZJUFNfeDkzMV9zZWVkKFYsIDE2KTsKKysgICAgRklQU194OTMxX3NldF9kdCh0di0+ RFQpOworKyAgICBGSVBTX3g5MzFfYnl0ZXMoUiwgMTYpOworKyAgICBpZiAobWVtY21wKFIsIHR2 LT5SLCAxNikpIHsKKysgICAgICAgIGZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX1g5MzEsIGtl eWxlbiwgTlVMTCk7CisrICAgICAgICBydiA9IDA7CisrICAgIH0gZWxzZSBpZiAoIWZpcHNfcG9z dF9zdWNjZXNzKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIHJldHVybiBydjsKKyt9CisrCisraW50IEZJUFNfc2VsZnRlc3RfeDkzMSgpCisr eworKyAgICBpbnQgcnYgPSAxOworKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKKysgICAgaWYgKCFG SVBTX3g5MzFfdGVzdF9tb2RlKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VM RlRFU1RfWDkzMSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gMDsK KysgICAgfQorKyAgICBpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18xMjhfa2V5LCBhZXNfMTI4X3R2 KSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMTkyX2tl eSwgYWVzXzE5Ml90dikpCisrICAgICAgICBydiA9IDA7CisrICAgIGlmICghZmlwc194OTMxX3Rl c3QoYWVzXzI1Nl9rZXksIGFlc18yNTZfdHYpKQorKyAgICAgICAgcnYgPSAwOworKyAgICBGSVBT X3g5MzFfcmVzZXQoKTsKKysgICAgaWYgKCFydikKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfU0VMRlRFU1RfWDkzMSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiBy djsKKyt9CisrCisraW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpCisreworKyAgICByZXR1cm4g RklQU19zZWxmdGVzdF94OTMxKCk7CisrfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kdGVzdC5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MjM5MTY2ODEgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxNi0wMy0w MSAxNjozMzowNy42MjM5MTY2ODEgKzAxMDAKK0BAIC0wLDAgKzEsMjQ3IEBACisrLyogQ29weXJp Z2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVt ZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4K KysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRo IE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1l cmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRo ZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NM IGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlz dHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhj ZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisr ICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkg Q29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQu CisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNo b3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRz IG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0 ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlv biAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0 b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5 cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0 IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBh cmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUg YW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20g CisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBp bmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAq IAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycg QU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2Vu Y2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZl cnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4g IGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRl ciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1 YmxpYyBMaWNlbmNlLl0KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykg MjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq 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 KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5j bHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysg ICAgcHJpbnRmKCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7CisrICAgIHJldHVybiAoMCk7Cisr fQorKworKyNlbHNlCisrCisrIyBpbmNsdWRlICJmaXBzX3V0bC5oIgorKyMgaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKyAgICB1bnNpZ25lZCBjaGFyIERU WzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBWWzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBSWzE2 XTsKKyt9IEFFU19QUk5HX01DVDsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X21jdF9rZXlbMTZdID0KKysgICAgeyAweDlmLCAweDViLCAweDUxLCAweDIwLCAweDBiLCAw eGYzLCAweDM0LCAweGI1LAorKyAgICAweGQ4LCAweDJiLCAweGU4LCAweGMzLCAweDcyLCAweDU1 LCAweGM4LCAweDQ4CisrfTsKKysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xMjhf bWN0X3R2ID0geworKyAgICAvKiBEVCAqLworKyAgICB7MHg2MywgMHg3NiwgMHhiYiwgMHhlNSwg MHgyOSwgMHgwMiwgMHhiYSwgMHgzYiwKKysgICAgIDB4NjcsIDB4YzksIDB4MjUsIDB4ZmEsIDB4 NzAsIDB4MWYsIDB4MTEsIDB4YWN9LAorKyAgICAvKiBWICovCisrICAgIHsweDU3LCAweDJjLCAw eDhlLCAweDc2LCAweDg3LCAweDI2LCAweDQ3LCAweDk3LAorKyAgICAgMHg3ZSwgMHg3NCwgMHhm YiwgMHhkZCwgMHhjNCwgMHg5NSwgMHgwMSwgMHhkMX0sCisrICAgIC8qIFIgKi8KKysgICAgezB4 NDgsIDB4ZTksIDB4YmQsIDB4MGQsIDB4MDYsIDB4ZWUsIDB4MTgsIDB4ZmIsCisrICAgICAweGU0 LCAweDU3LCAweDkwLCAweGQ1LCAweGMzLCAweGZjLCAweDliLCAweDczfQorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5WzI0XSA9CisrICAgIHsgMHhi NywgMHg2YywgMHgzNCwgMHhkMSwgMHgwOSwgMHg2NywgMHhhYiwgMHg3MywKKysgICAgMHg0ZCwg MHg1YSwgMHhkNSwgMHgzNCwgMHg5OCwgMHgxNiwgMHgwYiwgMHg5MSwKKysgICAgMHhiYywgMHgz NSwgMHg1MSwgMHgxNiwgMHg2YiwgMHhhZSwgMHg5MywgMHg4YQorK307CisrCisrc3RhdGljIGNv bnN0IEFFU19QUk5HX01DVCBhZXNfMTkyX21jdF90diA9IHsKKysgICAgLyogRFQgKi8KKysgICAg ezB4ODQsIDB4Y2UsIDB4MjIsIDB4N2QsIDB4OTEsIDB4NWEsIDB4YTMsIDB4YzksCisrICAgICAw eDg0LCAweDNjLCAweDBhLCAweGIzLCAweGE5LCAweDYzLCAweDE1LCAweDUyfSwKKysgICAgLyog ViAqLworKyAgICB7MHhiNiwgMHhhZiwgMHhlNiwgMHg4ZiwgMHg5OSwgMHg5ZSwgMHg5MCwgMHg2 NCwKKysgICAgIDB4ZGQsIDB4YzcsIDB4N2EsIDB4YzEsIDB4YmIsIDB4OTAsIDB4M2EsIDB4NmR9 LAorKyAgICAvKiBSICovCisrICAgIHsweGZjLCAweDg1LCAweDYwLCAweDlhLCAweDI5LCAweDZm LCAweGVmLCAweDIxLAorKyAgICAgMHhkZCwgMHg4NiwgMHgyMCwgMHgzMiwgMHg4YSwgMHgyOSwg MHg2ZiwgMHg0N30KKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZf bWN0X2tleVszMl0gPQorKyAgICB7IDB4OWIsIDB4MDUsIDB4YzgsIDB4NjgsIDB4ZmYsIDB4NDcs IDB4ZjgsIDB4M2EsCisrICAgIDB4YTYsIDB4M2EsIDB4YTgsIDB4Y2IsIDB4NGUsIDB4NzEsIDB4 YjIsIDB4ZTAsCisrICAgIDB4YjgsIDB4N2UsIDB4ZjEsIDB4MzcsIDB4YjYsIDB4YjQsIDB4ZjYs IDB4NmQsCisrICAgIDB4ODYsIDB4MzIsIDB4ZmMsIDB4MWYsIDB4NWUsIDB4MWQsIDB4MWUsIDB4 NTAKKyt9OworKworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7 CisrICAgIC8qIERUICovCisrICAgIHsweDMxLCAweDZlLCAweDM1LCAweDlhLCAweGIxLCAweDQ0 LCAweGYwLCAweGVlLAorKyAgICAgMHg2MiwgMHg2ZCwgMHgwNCwgMHg0NiwgMHhlMCwgMHhhMywg MHg5MiwgMHg0Y30sCisrICAgIC8qIFYgKi8KKysgICAgezB4NGYsIDB4Y2QsIDB4YzEsIDB4ODcs IDB4ODIsIDB4MWYsIDB4NGQsIDB4YTEsCisrICAgICAweDNlLCAweDBlLCAweDU2LCAweDQ0LCAw eDU5LCAweGU4LCAweDgzLCAweGNhfSwKKysgICAgLyogUiAqLworKyAgICB7MHhjOCwgMHg4Nywg MHhjMiwgMHg2MSwgMHg1YiwgMHhkMCwgMHhiOSwgMHhlMSwKKysgICAgIDB4ZTcsIDB4ZjMsIDB4 OGIsIDB4ZDcsIDB4NWIsIDB4ZDUsIDB4ZjEsIDB4OGR9CisrfTsKKysKKytzdGF0aWMgdm9pZCBk dW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsIGludCBuKQorK3sKKysgICAgd2hpbGUgKG4tLSA+ IDApIHsKKysgICAgICAgIHByaW50ZigiICUwMngiLCAqYisrKTsKKysgICAgfQorK30KKysKKytz dGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwKKysgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVkLCBpbnQgbikKKyt7Cisr ICAgIGludCBpOworKworKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQorKyAgICAgICAgaWYg KHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkgeworKyAgICAgICAgICAgIHB1dHMoIlJhbmRvbSB0 ZXN0IGZhaWxlZCwgZ290OiIpOworKyAgICAgICAgICAgIGR1bXAocmVzdWx0LCBuKTsKKysgICAg ICAgICAgICBwdXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOworKyAgICAgICAgICAg IGR1bXAoZXhwZWN0ZWQsIG4pOworKyAgICAgICAgICAgIHB1dGNoYXIoJ1xuJyk7CisrICAgICAg ICAgICAgRVhJVCgxKTsKKysgICAgICAgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgcnVuX3Rlc3Qo Y29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAorKyAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IEFFU19QUk5HX01DVCAqIHR2KQorK3sKKysgICAgdW5zaWduZWQgY2hhciBidWZb MTZdLCBkdFsxNl07CisrICAgIGludCBpLCBqOworKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKKysg ICAgRklQU194OTMxX3Rlc3RfbW9kZSgpOworKyAgICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtl eWxlbik7CisrICAgIEZJUFNfeDkzMV9zZWVkKHR2LT5WLCAxNik7CisrICAgIG1lbWNweShkdCwg dHYtPkRULCAxNik7CisrICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisrICAgICAg ICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsKKysgICAgICAgIEZJUFNfeDkzMV9ieXRlcyhidWYsIDE2 KTsKKysgICAgICAgIC8qIEluY3JlbWVudCBEVCAqLworKyAgICAgICAgZm9yIChqID0gMTU7IGog Pj0gMDsgai0tKSB7CisrICAgICAgICAgICAgZHRbal0rKzsKKysgICAgICAgICAgICBpZiAoZHRb al0pCisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAg IGNvbXBhcmUoYnVmLCB0di0+UiwgMTYpOworK30KKysKKytpbnQgbWFpbigpCisreworKyAgICBy dW5fdGVzdChhZXNfMTI4X21jdF9rZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOworKyAgICBwcmlu dGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7CisrICAgIHJ1bl90ZXN0KGFlc18xOTJfbWN0 X2tleSwgMjQsICZhZXNfMTkyX21jdF90dik7CisrICAgIHByaW50ZigiRklQUyBQUk5HIHRlc3Qg MiBkb25lXG4iKTsKKysgICAgcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZf bWN0X3R2KTsKKysgICAgcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOworKyAgICBy ZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v Zmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMv Zmlwc19yc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNf cnNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMzkxNjY4MSArMDEwMAor KysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxNi0w My0wMSAxNjozMzowNy42MjM5MTY2ODEgKzAxMDAKK0BAIC0wLDAgKzEsNDQ0IEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0 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+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBuW10gPQorKyAgICAiXHgwMFx4QkJceEY4XHgyRlx4MDlc eDA2XHg4Mlx4Q0VceDlDXHgyM1x4MzhceEFDXHgyQlx4OURceEE4XHg3MSIKKysgICAgIlx4Rjdc eDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4 RjUiCisrICAgICJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4 NDhceENFXHhFQlx4NkZceENEIgorKyAgICAiXHg0OFx4NzZceEVEXHg1Mlx4MERceDYwXHhFMVx4 RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4MCIKKysgICAgIlx4N0ZceEFGXHhCOFx4 RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCisrICAg ICJceDg0XHhFRVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0 NVx4OThceDM5IgorKyAgICAiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4QTVceDFGXHg1 Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKKysgICAgIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhD QVx4MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiICJceENCIjsKKysKKytz dGF0aWMgaW50IGNvcnJ1cHRfcnNhOworKworK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5 KQorK3sKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOworKwor KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkW10gPQorKyAgICAgICAgIlx4MDBceEE1 XHhEQVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0Qi CisrICAgICAgICAiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFc eDM4XHgwMVx4NTdceDk2XHg0MSIKKysgICAgICAgICJceEIyXHg5NFx4MTBceEIzXHhDN1x4OTlc eDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVceDVDXHgzOVx4MjZceDY5IgorKyAgICAgICAgIlx4RDZc eDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlceDM5XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4 REEiCisrICAgICAgICAiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4 MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKKysgICAgICAgICJceDQ0XHhFNVx4NkFceEFGXHg2OFx4 QzVceDZDXHgwOVx4MkNceEQzXHg4RFx4QzNceEJFXHhGNVx4RDJceDBBIgorKyAgICAgICAgIlx4 OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNFXHhERFx4RkJceEUxXHhBMVx4Q0VceENDXHg0 OFx4OTQiCisrICAgICAgICAiXHhBRlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0 Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIKKysgICAgICAgICJceEMxIjsKKysKKysgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0KKysgICAgICAgICJceDAwXHhFRVx4Q0ZceEFF XHg4MVx4QjFceEI5XHhCM1x4QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgorKyAgICAg ICAgIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgxQVx4OUVc eDNEXHg4NFx4RjYiCisrICAgICAgICAiXHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4MUVc eDNCXHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKKysgICAgICAgICJceDJEXHg1Qlx4MjVc eDIxXHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1XHg0MVx4QkFceDJBXHg1OFx4RkJceDY1IgorKyAg ICAgICAgIlx4OTkiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQor KyAgICAgICAgIlx4MDBceEM5XHg3Rlx4QjFceEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgz M1x4RUFceEFBXHhEMVx4RDkiCisrICAgICAgICAiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2 Nlx4QjFceEQwXHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKKysgICAgICAgICJceDg2XHg5 OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1 IgorKyAgICAgICAgIlx4Q0ZceENFXHgzM1x4NTJceDUyXHg0RFx4MDRceDE2XHhBNVx4QTRceDQx XHhFN1x4MDBceEFGXHg0Nlx4MTUiCisrICAgICAgICAiXHgwMyI7CisrCisrICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGRtcDFbXSA9CisrICAgICAgICAiXHg1NFx4NDlceDRDXHhBNlx4 M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKKysgICAgICAg ICJceEVCXHgwN1x4RERceERDXHgwMVx4ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhG Mlx4QjFceDNFIgorKyAgICAgICAgIlx4RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0XHhG Rlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCisrICAgICAgICAiXHgyMFx4MkJceDM4XHhG Q1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7CisrCisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcTFbXSA9CisrICAgICAgICAiXHg0N1x4 MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4NzVceDAzXHg1MVx4QjdceEY4XHg3OFx4ODZceDRDXHhB OSIKKysgICAgICAgICJceDYxXHhBRFx4QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1 Nlx4QTlceDRDXHgzMVx4NDZceEE3IgorKyAgICAgICAgIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4 QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCisrICAgICAgICAiXHgx Qlx4OTlceEE0XHg5NVx4ODRceDk4XHgwN1x4RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZceERB XHgzRCI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlxbXBbXSA9CisrICAg ICAgICAiXHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhE Qlx4QUVceDk0XHgyMyIKKysgICAgICAgICJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4 OFx4NTBceDkzXHgwN1x4N0ZceENEXHgzOVx4RTJceDExIgorKyAgICAgICAgIlx4OUZceEM5XHg4 Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCisr ICAgICAgICAiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZC XHgyNVx4NzlceDgwXHgzOSIKKysgICAgICAgICJceEY3IjsKKysKKysgICAga2V5LT5uID0gQk5f YmluMmJuKG4sIHNpemVvZihuKSAtIDEsIGtleS0+bik7CisrICAgIGlmIChjb3JydXB0X3JzYSkK KysgICAgICAgIEJOX3NldF9iaXQoa2V5LT5uLCAxMDI0KTsKKysgICAga2V5LT5lID0gQk5fYmlu MmJuKGUsIHNpemVvZihlKSAtIDEsIGtleS0+ZSk7CisrICAgIGtleS0+ZCA9IEJOX2JpbjJibihk LCBzaXplb2YoZCkgLSAxLCBrZXktPmQpOworKyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwgc2l6 ZW9mKHApIC0gMSwga2V5LT5wKTsKKysgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVvZihx KSAtIDEsIGtleS0+cSk7CisrICAgIGtleS0+ZG1wMSA9IEJOX2JpbjJibihkbXAxLCBzaXplb2Yo ZG1wMSkgLSAxLCBrZXktPmRtcDEpOworKyAgICBrZXktPmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwg c2l6ZW9mKGRtcTEpIC0gMSwga2V5LT5kbXExKTsKKysgICAga2V5LT5pcW1wID0gQk5fYmluMmJu KGlxbXAsIHNpemVvZihpcW1wKSAtIDEsIGtleS0+aXFtcCk7CisrICAgIHJldHVybiAxOworK30K KysKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2EoKQorK3sKKysgICAgY29ycnVwdF9yc2EgPSAxOwor K30KKysKKysvKiBLbm93biBBbnN3ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNB IHByaXZhdGUga2V5IHNpZ25pbmcKKysgKiBrYXRfdGJzLgorKyAqLworKworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9CisrICAgICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVi bGljIEtleSBSU0EgS0FUIjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1BTU19TSEExW10gPSB7CisrICAgIDB4MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIs IDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4REEsIDB4MEYsCisrICAgIDB4MDEsIDB4MUUsIDB4 MzcsIDB4OTMsIDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIs CisrICAgIDB4RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4 MEMsIDB4QjcsIDB4RjgsIDB4RDMsCisrICAgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4ODAs IDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4RDUsIDB4NEMsCisrICAgIDB4N0YsIDB4 NDksIDB4RkIsIDB4M0YsIDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAs IDB4QTcsCisrICAgIDB4MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4NzMsIDB4RDksIDB4MDcsIDB4 RTMsIDB4NUUsIDB4M0YsIDB4OUIsIDB4RjUsCisrICAgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUs IDB4NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCisrICAgIDB4 MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4Rjgs IDB4QjcsIDB4MzEsCisrICAgIDB4RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4ODEsIDB4 RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4QkEsIDB4RTgsCisrICAgIDB4MjMsIDB4QjUsIDB4N0Ys IDB4REMsIDB4MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCisr ICAgIDB4MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKKyt9Owor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewor KyAgICAweDM5LCAweDRBLCAweDZBLCAweDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVG LCAweEM1LCAweDU4LCAweEE3LAorKyAgICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAw eDlBLCAweDJDLCAweDgyLCAweDk4LCAweDA4LCAweDk1LCAweEZBLAorKyAgICAweEIxLCAweDlF LCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAweDU5LCAweDg3LCAweDdCLCAweDFGLCAw eDU3LAorKyAgICAweDMwLCAweDlELCAweDBELCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3 LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAorKyAgICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAw eDY0LCAweDkwLCAweDJFLCAweDE2LCAweENDLCAweDg2LCAweDA1LCAweEVFLAorKyAgICAweEIx LCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAweDBDLCAweDY0LCAweDBCLCAw eEFCLCAweDIyLAorKyAgICAweDE1LCAweDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZCLCAweDc3 LCAweDQwLCAweDY0LCAweDYyLCAweEQxLCAweEI1LAorKyAgICAweDM3LCAweDFFLCAweEUwLCAw eDNELCAweEE4LCAweEY5LCAweEQyLCAweEJELCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAorKyAg ICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAweDhFLCAweEY1LCAw eDAzLCAweEVBLCAweDJELAorKyAgICAweEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1 LCAweEIwLCAweDZBLCAweEFGLCAweDk1LCAweEMwLCAweDAwLAorKyAgICAweDU0LCAweDc2LCAw eDNELCAweDBDLCAweDlDLCAweEIyLCAweEVFLCAweEMwCisrfTsKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKKysgICAgMHg2RCwgMHgzRCwg MHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhFMywgMHg4 OSwKKysgICAgMHgwMCwgMHg5NywgMHhGQSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwg MHgyNSwgMHg5QSwgMHhGMywgMHg4RiwKKysgICAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3 NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3MywgMHgyOCwKKysgICAgMHhDMSwg MHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3 MywgMHg0RSwKKysgICAgMHg3RCwgMHgyRSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4QywgMHg4RSwg MHhERiwgMHg5RCwgMHg0OSwgMHg0NywgMHgwNSwKKysgICAgMHhBQiwgMHhGNSwgMHgwMSwgMHhE NiwgMHg4MSwgMHg0NywgMHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKKysgICAg MHgyRiwgMHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhG MywgMHhEQSwgMHhCNiwKKysgICAgMHgwQiwgMHg0NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywg MHhDOCwgMHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwgMHg5RiwKKysgICAgMHgyMSwgMHhCNywgMHg3 RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2RCwK KysgICAgMHg1RiwgMHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5 RSwgMHg0OSwgMHhCOSwgMHhGNiwKKysgICAgMHg3MiwgMHhGNCwgMHhGNiwgMHhFRiwgMHg4OCwg MHgxRSwgMHgyRCwgMHgxQworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9QU1NfU0hBMzg0W10gPSB7CisrICAgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQs IDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgsIDB4RjIsCisrICAgIDB4RUMsIDB4 MUMsIDB4QzQsIDB4QzgsIDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0Qs IDB4NUUsCisrICAgIDB4ODYsIDB4MDAsIDB4RjcsIDB4MjUsIDB4NzgsIDB4REUsIDB4REMsIDB4 N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4Q0QsCisrICAgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIs IDB4RkMsIDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCisrICAgIDB4 NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMs IDB4NDIsIDB4NkMsCisrICAgIDB4QjIsIDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIsIDB4 RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4NEYsIDB4RkIsCisrICAgIDB4OTEsIDB4Q0EsIDB4RjUs IDB4NzAsIDB4RUYsIDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCisr ICAgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIs IDB4QUQsIDB4NDIsIDB4ODksCisrICAgIDB4OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAsIDB4 RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4MUYsIDB4Q0EsIDB4NkYsCisrICAgIDB4NDgsIDB4RjYs IDB4QUUsIDB4RDcsIDB4NDUsIDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4 NTUsCisrICAgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTUxMltd ID0geworKyAgICAweDA3LCAweDFFLCAweEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2 LCAweDU3LCAweEFFLCAweDYzLCAweDhDLAorKyAgICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAw eDU5LCAweEJCLCAweEYyLCAweEM2LCAweDhGLCAweDEyLCAweDUzLCAweDlBLAorKyAgICAweDlC LCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRELCAweDUxLCAweEVELCAw eDlFLCAweERELAorKyAgICAweDRCLCAweEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdD LCAweDI0LCAweDYwLCAweDc5LCAweDIzLCAweDM5LAorKyAgICAweDAxLCAweDFDLCAweDUxLCAw eENCLCAweEQ4LCAweEU5LCAweDlBLCAweDAxLCAweDY3LCAweDVGLCAweEZFLCAweEQ3LAorKyAg ICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYwLCAweDNELCAw eDc4LCAweDU1LCAweDYxLAorKyAgICAweDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlE LCAweDBDLCAweDJBLCAweDIwLCAweEIwLCAweDg1LCAweDEzLAorKyAgICAweEM1LCAweDQ3LCAw eDM0LCAweDBELCAweDMyLCAweDE1LCAweEM4LCAweEFFLCAweDlBLCAweDZBLCAweDM5LCAweDYz LAorKyAgICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRCLCAw eEJGLCAweEY0LCAweEE4LCAweEZFLAorKyAgICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlD LCAweDdDLCAweENBLCAweEZFLCAweDdGLCAweDgwLCAweEMyLCAweDg4LAorKyAgICAweDVDLCAw eDk3LCAweDcwLCAweEI0LCAweDI2LCAweEM5LCAweDE0LCAweDhCCisrfTsKKysKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKKysgICAgMHg3MSwgMHhFRSwg MHgxQSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0 QywKKysgICAgMHg0QSwgMHhGRCwgMHgxQSwgMHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwg MHg2MSwgMHgzMywgMHg4RCwgMHg5QiwKKysgICAgMHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4 MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKKysgICAgMHhEQywg MHgyMiwgMHgzNywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgx RSwgMHhGOCwKKysgICAgMHg4MCwgMHhEMSwgMHg4QiwgMHhDMiwgMHhFQywgMHgwQSwgMHhENywg MHg2QiwgMHg4OCwgMHg4QiwgMHg4QiwgMHhBMSwKKysgICAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1 OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKKysgICAg MHhBOSwgMHg5RSwgMHhFOCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhD QSwgMHgyRSwgMHg0RSwKKysgICAgMHhCQywgMHgyOSwgMHhBOCwgMHg2NywgMHgxMywgMHhCNywg MHg5RiwgMHgxRCwgMHgwNCwgMHg0NCwgMHhFNSwgMHg1RiwKKysgICAgMHgzNSwgMHgwNywgMHgx MSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwK KysgICAgMHg3MiwgMHgwNSwgMHhERSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3 NiwgMHg0QiwgMHgyRiwgMHg5NSwKKysgICAgMHhERiwgMHhGMSwgMHg1RiwgMHg4NCwgMHg4MCwg MHhEOSwgMHg0NiwgMHhCNAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9TSEEyMjRbXSA9IHsKKysgICAgMHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgw RSwgMHg1RiwgMHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKKysgICAgMHgyNSwgMHhCQiwg MHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4 RCwKKysgICAgMHg1QiwgMHg1NSwgMHg5QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwg MHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwKKysgICAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2 MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKKysgICAgMHhBNCwg MHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0 MSwgMHhFNSwKKysgICAgMHhFRSwgMHgxRiwgMHg4RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwg MHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwgMHhDQywKKysgICAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4 NywgMHgwOSwgMHgyNSwgMHg3MCwgMHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKKysgICAg MHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwgMHg1QSwgMHg5MSwgMHgy OCwgMHgzRSwgMHhCMiwKKysgICAgMHg1OCwgMHgyRSwgMHgwNiwgMHg0NSwgMHg0OSwgMHhFMCwg MHg5MiwgMHhFMiwgMHhDMCwgMHg2NiwgMHhFNiwgMHgzNSwKKysgICAgMHhEOSwgMHg3OSwgMHg3 RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3MywgMHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywK KysgICAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4RAorK307 CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyNTZbXSA9IHsKKysg ICAgMHgwRCwgMHg1NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwg MHgxNywgMHhBNSwgMHgyMywKKysgICAgMHhFNywgMHgzQiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4 QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3QiwgMHhBQSwgMHgyMywKKysgICAgMHg5MiwgMHg4Nywg MHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2RiwgMHgz NSwKKysgICAgMHg5OCwgMHgyRCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwg MHgxNywgMHg1OCwgMHhCMiwgMHg2RSwKKysgICAgMHgyQywgMHg0NCwgMHg5QiwgMHg5MCwgMHhG MSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwgMHgyRCwgMHgxOCwKKysgICAgMHgwRSwg MHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5 MSwgMHgzMCwKKysgICAgMHhCRSwgMHgyMiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwg MHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwKKysgICAgMHg3QywgMHg4NSwgMHhCNCwgMHhC QywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1QywgMHhERSwgMHg4MSwgMHhBNiwgMHgzOCwKKysgICAg MHhCOCwgMHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhF RSwgMHhEMSwgMHhEQSwKKysgICAgMHgyNywgMHg0OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwg MHhGNywgMHg4MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwKKysgICAgMHhCRCwgMHg0NCwgMHg5 NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3QQorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9IHsKKysgICAgMHgxRCwgMHhFMywgMHg2QSwg MHhERCwgMHgyNywgMHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKKysg ICAgMHhEMiwgMHg5MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhBRSwgMHhCRCwgMHg5OSwgMHg2Mywg MHg1NiwgMHg0NywgMHhDNywKKysgICAgMHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhG OSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1QywKKysgICAgMHhBNywgMHg2NSwg MHg1MiwgMHg4QSwgMHhDOCwgMHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1 NSwKKysgICAgMHg2NSwgMHgzRSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhBOCwgMHg3OSwg MHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwKKysgICAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhF MSwgMHhCMSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhDMiwKKysgICAgMHgxQiwg MHgyQiwgMHhCMCwgMHg4MiwgMHg0NiwgMHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhF QiwgMHg4QywKKysgICAgMHhGRiwgMHg5NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0RCwg MHhCRiwgMHg4RiwgMHg4QiwgMHg5QywgMHhDRCwKKysgICAgMHhFQSwgMHg4NSwgMHhFRSwgMHgw MCwgMHhEQywgMHgxQywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKKysgICAg MHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwgMHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgz NywgMHhEQywgMHgwNCwKKysgICAgMHhCRCwgMHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgzNSwg MHg1NiwgMHhCRgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9T SEE1MTJbXSA9IHsKKysgICAgMHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhD QSwgMHg5QiwgMHgxNiwgMHg1MSwgMHg1RCwgMHhDRiwKKysgICAgMHg0OSwgMHgyNSwgMHg0QSwg MHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwgMHhGOCwgMHhCMiwgMHg5QSwKKysg ICAgMHgxNSwgMHhFQSwgMHg1QywgMHhFNSwgMHhFNiwgMHg4MiwgMHhFMCwgMHg4NiwgMHg4Miwg MHg2QiwgMHgzMiwgMHhGMSwKKysgICAgMHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgx RSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1NCwgMHg5RiwgMHhEOCwKKysgICAgMHg4RCwgMHhDQywg MHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwgMHg1MywgMHg2MiwgMHhC NSwKKysgICAgMHg4MCwgMHhFMiwgMHhCQywgMHhERCwgMHg2NywgMHgyQiwgMHhEOSwgMHgzRiwg MHhFNCwgMHg3NSwgMHg5MiwgMHg2QiwKKysgICAgMHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhG MCwgMHhFRSwgMHgzMywgMHhERiwgMHgxQiwgMHgxRCwgMHg0NywgMHhFNiwKKysgICAgMHg1OSwg MHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2MywgMHg4 NCwgMHgwNSwKKysgICAgMHg2RiwgMHgwRSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3Riwg MHhCMiwgMHg2NCwgMHg3MSwgMHhFMCwgMHgyRCwKKysgICAgMHgzRSwgMHg2MiwgMHhDRSwgMHhC NSwgMHgzRiwgMHg4OCwgMHhERiwgMHgyRCwgMHhBQiwgMHg5OCwgMHg2NSwgMHg5MSwKKysgICAg MHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKKysgICAg MHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0 NSwgMHg0RCwgMHhERiwKKysgICAgMHhFOSwgMHgyRCwgMHhFMSwgMHg4MywgMHg1RiwgMHhCNSwg MHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwKKysgICAgMHg4MCwgMHhBNCwgMHhG MSwgMHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywK KysgICAgMHgzNSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgw NCwgMHhFRSwgMHhBOSwgMHg5NywKKysgICAgMHg3MCwgMHhGQiwgMHg1RSwgMHhFNywgMHhCNywg MHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgzOCwgMHhCRSwgMHhENiwKKysgICAgMHg1MywgMHgx NSwgMHhGNywgMHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwg MHgxOSwKKysgICAgMHhFRSwgMHg1MSwgMHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2MywgMHgy OSwgMHg2MywgMHgwQywgMHg1OSwgMHhENywKKysgICAgMHg2RiwgMHg0QywgMHgzQywgMHgzNywg MHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKKysgICAgMHg0 OCwgMHhBRiwgMHg4MiwgMHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwg MHhFRCwgMHg3NiwKKysgICAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhC QSwgMHgzMCwgMHg4NCwgMHgxQywgMHhCMywgMHg2NywKKysgICAgMHhBMywgMHgyOSwgMHg4MCwg MHg3MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0geworKyAgICAweDdFLCAweEEyLCAweDc3 LCAweEZFLCAweEI4LCAweDU0LCAweDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAor KyAgICAweEU1LCAweDUyLCAweDE1LCAweDhFLCAweDUyLCAweDk2LCAweDRFLCAweEE2LCAweDU4 LCAweDkyLCAweDFDLCAweERELAorKyAgICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAw eDYyLCAweDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAorKyAgICAweDE2LCAweDc2 LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAweDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAw eDlCLAorKyAgICAweEM2LCAweDUzLCAweDg4LCAweDI2LCAweDIwLCAweDg4LCAweDczLCAweEI2 LCAweDEzLCAweEI4LCAweEYwLCAweDRCLAorKyAgICAweDAwLCAweDg1LCAweEYzLCAweERELCAw eDA3LCAweDUwLCAweEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAorKyAgICAweEFE LCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAweEE1LCAweDE5LCAweDBFLCAweDU5LCAw eDAxLCAweEVDLAorKyAgICAweDdFLCAweDc1LCAweDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2 LCAweDg1LCAweDQ2LCAweDhELCAweEEwLCAweDhDLAorKyAgICAweDMzLCAweDFELCAweDgyLCAw eDhDLCAweDAzLCAweEVBLCAweDY5LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAorKyAg ICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAweDMwLCAweEZGLCAweDg2LCAw eEYwLCAweDVCLCAweERDLAorKyAgICAweEUzLCAweEUyLCAweEU4LCAweDBBLCAweDBBLCAweDI5 LCAweDk0LCAweDgwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1g5MzFfU0hBMzg0W10gPSB7CisrICAgIDB4NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4 N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4N0IsIDB4RUMsIDB4N0IsCisrICAgIDB4RjIsIDB4ODIs IDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4MzksIDB4MzcsIDB4 Q0IsCisrICAgIDB4RTYsIDB4NEYsIDB4NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUsIDB4NDAs IDB4QjksIDB4QkUsIDB4MkUsIDB4RTMsCisrICAgIDB4RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4 NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcsIDB4NEEsIDB4NjMsIDB4RjYsCisrICAgIDB4NTcs IDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYsIDB4 RUUsIDB4MzEsCisrICAgIDB4RDgsIDB4NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0Is IDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQsIDB4RjEsCisrICAgIDB4M0UsIDB4OUMsIDB4MzUsIDB4 OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4NzksCisrICAg IDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4 RDUsIDB4N0MsIDB4RkYsCisrICAgIDB4MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4Mzcs IDB4QjksIDB4REUsIDB4QzUsIDB4MTIsIDB4NDQsIDB4MzUsCisrICAgIDB4RUYsIDB4MDEsIDB4 RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4NkQs CisrICAgIDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKKyt9 OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9 IHsKKysgICAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwg MHg2NCwgMHgzQSwgMHhDMSwgMHg2MywKKysgICAgMHhGQywgMHhBMSwgMHhBQSwgMHhDQiwgMHg5 QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhEOSwgMHhEQSwgMHhBQywKKysgICAgMHhFNywg MHg0NywgMHgwOSwgMHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3 NywgMHhENywKKysgICAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0QSwgMHhFNiwg MHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwgMHgyOCwKKysgICAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2 NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKKysgICAg MHg2RSwgMHgyQiwgMHg3OSwgMHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1 MywgMHhEMiwgMHhBRiwKKysgICAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhGNiwg MHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwgMHhGNiwgMHhEMCwKKysgICAgMHhDRSwgMHg4QSwgMHg2 RiwgMHhBMSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwK KysgICAgMHg5RiwgMHgwOSwgMHhDQSwgMHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgw NCwgMHgyRCwgMHhGQiwgMHg3QywKKysgICAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywg MHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwgMHgzMCwgMHg3MSwgMHgxQiwKKysgICAgMHg2MCwgMHg4 MywgMHgxOCwgMHg4OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMworK307CisrCisraW50IEZJUFNf c2VsZnRlc3RfcnNhKCkKKyt7CisrICAgIGludCByZXQgPSAwOworKyAgICBSU0EgKmtleTsKKysg ICAgRVZQX1BLRVkgKnBrID0gTlVMTDsKKysKKysgICAgaWYgKChrZXkgPSBSU0FfbmV3KCkpID09 IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgc2V0cnNha2V5KGtleSk7CisrICAgIGlm ICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKwor KyAgICBFVlBfUEtFWV9hc3NpZ25fUlNBKHBrLCBrZXkpOworKworKyAgICBpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JT QV9TSEExKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTEoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlJTQSBTSEExIFBLQ1MjMSIpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICgh Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAx LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1NIQTIyNCwgc2l6 ZW9mKGthdF9SU0FfU0hBMjI0KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTIyNCBQS0NTIzEiKSkKKysgICAgICAgIGdvdG8g ZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0 X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNBX1NIQTI1NiksCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEEyNTYgUEtDUyMxIikp CisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGthdF9SU0FfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9TSEEzODQpLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhf RkxBR19QQURfUEtDUzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0Eg U0hBMzg0IFBLQ1MjMSIpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9S U0FfU0hBNTEyKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTUx MigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUlNBIFNIQTUxMiBQS0NTIzEiKSkKKysgICAgICAgIGdvdG8gZXJyOworKwor KyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9Q U1NfU0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEExIFBTUyIpKQorKyAgICAgICAg Z290byBlcnI7CisrICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBrYXRfUlNBX1BTU19TSEEyMjQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihrYXRfUlNBX1BTU19TSEEyMjQpLCBFVlBfc2hhMjI0KCksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTIy NCBQU1MiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9QU1NfU0hBMjU2LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwgRVZQX3NoYTI1 NigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BTUywgIlJTQSBTSEEyNTYgUFNTIikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTM4 NCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfUFNT X1NIQTM4NCksIEVWUF9zaGEzODQoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsICJSU0EgU0hBMzg0IFBTUyIpKQorKyAgICAgICAg Z290byBlcnI7CisrICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBrYXRfUlNBX1BTU19TSEE1MTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihrYXRfUlNBX1BTU19TSEE1MTIpLCBFVlBfc2hhNTEyKCksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTUx MiBQU1MiKSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9YOTMxX1NIQTEsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMSksIEVWUF9zaGEx KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSwgIlJTQSBTSEExIFg5MzEiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICAvKiBO QjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEgKi8KKysgICAgaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfWDkzMV9TSEEyNTYsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMjU2KSwg RVZQX3NoYTI1NigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURf Q1RYX0ZMQUdfUEFEX1g5MzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJS U0EgU0hBMjU2IFg5MzEiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9YOTMxX1NIQTM4NCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEzODQp LCBFVlBfc2hhMzg0KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9N RF9DVFhfRkxBR19QQURfWDkzMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlJTQSBTSEEzODQgWDkzMSIpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1g5MzFfU0hBNTEyLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTUx MiksIEVWUF9zaGE1MTIoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQ X01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUlNBIFNIQTUxMiBYOTMxIikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgcmV0ID0g MTsKKysKKysgZXJyOgorKyAgICBpZiAocGspCisrICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsK KysgICAgZWxzZSBpZiAoa2V5KQorKyAgICAgICAgUlNBX2ZyZWUoa2V5KTsKKysgICAgcmV0dXJu IHJldDsKKyt9CisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWYgT1BF TlNTTF9GSVBTICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3Jz YV94OTMxZy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcu YworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcwky MDE2LTAzLTAxIDE2OjMzOjA3LjYyMzkxNjY4MSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2Ny eXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjM5MTY2ODEg KzAxMDAKK0BAIC0wLDAgKzEsMjczIEBACisrLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8KKysv 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 bmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr CisrZXh0ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7CisrI2VuZGlmCisrCisrLyog WDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCisrCisraW50IFJTQV9Y OTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpx MSwKKysgICAgICAgICAgICAgICAgICAgICAgIEJJR05VTSAqcTIsIGNvbnN0IEJJR05VTSAqWHAx LCBjb25zdCBCSUdOVU0gKlhwMiwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJJR05V TSAqWHAsIGNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwKKysgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEJJR05VTSAqWHEsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0Ig KmNiKQorK3sKKysgICAgQklHTlVNICpyMCA9IE5VTEwsICpyMSA9IE5VTEwsICpyMiA9IE5VTEws ICpyMyA9IE5VTEw7CisrICAgIEJOX0NUWCAqY3R4ID0gTlVMTCwgKmN0eDIgPSBOVUxMOworKwor KyAgICBpZiAoIXJzYSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBjdHggPSBCTl9DVFhf bmV3KCk7CisrICAgIGlmICghY3R4KQorKyAgICAgICAgZ290byBlcnI7CisrICAgIEJOX0NUWF9z dGFydChjdHgpOworKworKyAgICByMCA9IEJOX0NUWF9nZXQoY3R4KTsKKysgICAgcjEgPSBCTl9D VFhfZ2V0KGN0eCk7CisrICAgIHIyID0gQk5fQ1RYX2dldChjdHgpOworKyAgICByMyA9IEJOX0NU WF9nZXQoY3R4KTsKKysKKysgICAgaWYgKHIzID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsK KysgICAgaWYgKCFyc2EtPmUpIHsKKysgICAgICAgIHJzYS0+ZSA9IEJOX2R1cChlKTsKKysgICAg ICAgIGlmICghcnNhLT5lKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICB9IGVsc2UKKysg ICAgICAgIGUgPSByc2EtPmU7CisrCisrICAgIC8qIElmIG5vdCBhbGwgcGFyYW1ldGVycyBwcmVz ZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgorKyAgICAgKiBUaGlzIGFsbG93cyB0ZXN0 IHByb2dyYW1zIHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVycy4KKysgICAgICovCisrCisr ICAgIGlmIChYcCAmJiAhcnNhLT5wKSB7CisrICAgICAgICByc2EtPnAgPSBCTl9uZXcoKTsKKysg ICAgICAgIGlmICghcnNhLT5wKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKworKyAgICAgICAg aWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnAsIHAxLCBwMiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKKysg ICAgICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBpZiAoWHEgJiYgIXJzYS0+cSkg eworKyAgICAgICAgcnNhLT5xID0gQk5fbmV3KCk7CisrICAgICAgICBpZiAoIXJzYS0+cSkKKysg ICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIGlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVf ZXgocnNhLT5xLCBxMSwgcTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikpCisrICAgICAgICAgICAgZ290byBlcnI7CisrICAg IH0KKysKKysgICAgaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkgeworKyAgICAgICAgQk5fQ1RYX2Vu ZChjdHgpOworKyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKKysgICAgICAgIHJldHVybiAyOwor KyAgICB9CisrCisrICAgIC8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBj YWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKKysgICAgICogY29tcG9uZW50cy4KKysgICAgICovCisr CisrICAgIC8qIGNhbGN1bGF0ZSBuICovCisrICAgIHJzYS0+biA9IEJOX25ldygpOworKyAgICBp ZiAocnNhLT5uID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFCTl9tdWwo cnNhLT5uLCByc2EtPnAsIHJzYS0+cSwgY3R4KSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAg ICAvKiBjYWxjdWxhdGUgZCAqLworKyAgICBpZiAoIUJOX3N1YihyMSwgcnNhLT5wLCBCTl92YWx1 ZV9vbmUoKSkpCisrICAgICAgICBnb3RvIGVycjsgICAgICAgICAgICAgICAvKiBwLTEgKi8KKysg ICAgaWYgKCFCTl9zdWIocjIsIHJzYS0+cSwgQk5fdmFsdWVfb25lKCkpKQorKyAgICAgICAgZ290 byBlcnI7ICAgICAgICAgICAgICAgLyogcS0xICovCisrICAgIGlmICghQk5fbXVsKHIwLCByMSwg cjIsIGN0eCkpCisrICAgICAgICBnb3RvIGVycjsgICAgICAgICAgICAgICAvKiAocC0xKShxLTEp ICovCisrCisrICAgIGlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCisrICAgICAgICBnb3Rv IGVycjsKKysKKysgICAgaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKKysgICAg ICAgIGdvdG8gZXJyOyAgICAgICAgICAgICAgIC8qIExDTSgocC0xKShxLTEpKSAqLworKworKyAg ICBjdHgyID0gQk5fQ1RYX25ldygpOworKyAgICBpZiAoIWN0eDIpCisrICAgICAgICBnb3RvIGVy cjsKKysKKysgICAgcnNhLT5kID0gQk5fbW9kX2ludmVyc2UoTlVMTCwgcnNhLT5lLCByMCwgY3R4 Mik7IC8qIGQgKi8KKysgICAgaWYgKHJzYS0+ZCA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7 CisrCisrICAgIC8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLworKyAgICByc2EtPmRtcDEgPSBC Tl9uZXcoKTsKKysgICAgaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7 CisrICAgIGlmICghQk5fbW9kKHJzYS0+ZG1wMSwgcnNhLT5kLCByMSwgY3R4KSkKKysgICAgICAg IGdvdG8gZXJyOworKworKyAgICAvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KKysgICAgcnNh LT5kbXExID0gQk5fbmV3KCk7CisrICAgIGlmIChyc2EtPmRtcTEgPT0gTlVMTCkKKysgICAgICAg IGdvdG8gZXJyOworKyAgICBpZiAoIUJOX21vZChyc2EtPmRtcTEsIHJzYS0+ZCwgcjIsIGN0eCkp CisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyogY2FsY3VsYXRlIGludmVyc2Ugb2YgcSBt b2QgcCAqLworKyAgICByc2EtPmlxbXAgPSBCTl9tb2RfaW52ZXJzZShOVUxMLCByc2EtPnEsIHJz YS0+cCwgY3R4Mik7CisrCisrIGVycjoKKysgICAgaWYgKGN0eCkgeworKyAgICAgICAgQk5fQ1RY X2VuZChjdHgpOworKyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKKysgICAgfQorKyAgICBpZiAo Y3R4MikKKysgICAgICAgIEJOX0NUWF9mcmVlKGN0eDIpOworKyAgICAvKiBJZiB0aGlzIGlzIHNl dCBhbGwgY2FsbHMgc3VjY2Vzc2Z1bCAqLworKyAgICBpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBO VUxMKQorKyAgICAgICAgcmV0dXJuIDE7CisrCisrICAgIHJldHVybiAwOworKworK30KKysKKytp bnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklH TlVNICplLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKQorK3sK KysgICAgaW50IG9rID0gMDsKKysgICAgQklHTlVNICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7Cisr ICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlm IChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykg JiYKKysgICAgICAgIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkg eworKyAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLCBGSVBT X1JfS0VZX1RPT19TSE9SVCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBp ZiAoYml0cyAmIDB4ZmYpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVS QVRFX0tFWV9FWCwgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCk7CisrICAgICAgICByZXR1cm4g MDsKKysgICAgfQorKworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAg ICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLCBGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysjZW5kaWYKKysK KysgICAgY3R4ID0gQk5fQ1RYX25ldygpOworKyAgICBpZiAoIWN0eCkKKysgICAgICAgIGdvdG8g ZXJyb3I7CisrCisrICAgIEJOX0NUWF9zdGFydChjdHgpOworKyAgICBYcCA9IEJOX0NUWF9nZXQo Y3R4KTsKKysgICAgWHEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrICAgIGlmICghQk5fWDkzMV9nZW5l cmF0ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgpKQorKyAgICAgICAgZ290byBlcnJvcjsKKysKKysg ICAgcnNhLT5wID0gQk5fbmV3KCk7CisrICAgIHJzYS0+cSA9IEJOX25ldygpOworKyAgICBpZiAo IXJzYS0+cCB8fCAhcnNhLT5xKQorKyAgICAgICAgZ290byBlcnJvcjsKKysKKysgICAgLyogR2Vu ZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLworKworKyAgICBpZiAoIUJOX1g5MzFfZ2Vu ZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsIGN0eCwgY2IpKQorKyAgICAgICAgZ290 byBlcnJvcjsKKysKKysgICAgaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlLCBjdHgsIGNiKSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrCisrICAgIC8qIFNp bmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2 ZQorKyAgICAgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCisrICAgICAqLworKworKyAgICBp ZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIGUsIGNiKSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyAgICBpZiAoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrICAgICAgICBnb3RvIGVycm9yOwor KyNlbmRpZgorKworKyAgICBvayA9IDE7CisrCisrIGVycm9yOgorKyAgICBpZiAoY3R4KSB7Cisr ICAgICAgICBCTl9DVFhfZW5kKGN0eCk7CisrICAgICAgICBCTl9DVFhfZnJlZShjdHgpOworKyAg ICB9CisrCisrICAgIGlmIChvaykKKysgICAgICAgIHJldHVybiAxOworKworKyAgICByZXR1cm4g MDsKKysKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3NoYV9z ZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRl c3QuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMu ZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMzkxNjY4MSArMDEwMAorKysrIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42 MjM5MTY2ODEgKzAxMDAKK0BAIC0wLDAgKzEsMTQ1IEBACisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z CisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisr ICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRp ZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgor KworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgY29uc3QgY2hhciB0ZXN0W11bNjBdID0g eworKyAgICAiIiwKKysgICAgImFiYyIsCisrICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGln aGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKKyt9OworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9ESUdFU1RfTEVOR1RIXSA9IHsKKysgICAgezB4ZGEsIDB4 MzksIDB4YTMsIDB4ZWUsIDB4NWUsIDB4NmIsIDB4NGIsIDB4MGQsIDB4MzIsIDB4NTUsCisrICAg ICAweGJmLCAweGVmLCAweDk1LCAweDYwLCAweDE4LCAweDkwLCAweGFmLCAweGQ4LCAweDA3LCAw eDA5fSwKKysgICAgezB4YTksIDB4OTksIDB4M2UsIDB4MzYsIDB4NDcsIDB4MDYsIDB4ODEsIDB4 NmEsIDB4YmEsIDB4M2UsCisrICAgICAweDI1LCAweDcxLCAweDc4LCAweDUwLCAweGMyLCAweDZj LCAweDljLCAweGQwLCAweGQ4LCAweDlkfSwKKysgICAgezB4ODQsIDB4OTgsIDB4M2UsIDB4NDQs IDB4MWMsIDB4M2IsIDB4ZDIsIDB4NmUsIDB4YmEsIDB4YWUsCisrICAgICAweDRhLCAweGExLCAw eGY5LCAweDUxLCAweDI5LCAweGU1LCAweGU1LCAweDQ2LCAweDcwLCAweGYxfSwKKyt9OworKwor K3N0YXRpYyBpbnQgY29ycnVwdF9zaGE7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCisr eworKyAgICBjb3JydXB0X3NoYSA9IDE7CisrfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEo KQorK3sKKysgICAgaW50IG47CisrCisrICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2YodGVzdCkg LyBzaXplb2YodGVzdFswXSk7ICsrbikgeworKyAgICAgICAgdW5zaWduZWQgY2hhciBtZFtTSEFf RElHRVNUX0xFTkdUSF07CisrCisrICAgICAgICBFVlBfRGlnZXN0KHRlc3Rbbl0sIHN0cmxlbih0 ZXN0W25dKSArIGNvcnJ1cHRfc2hhLCBtZCwgTlVMTCwKKysgICAgICAgICAgICAgICAgICAgRVZQ X3NoYTEoKSwgTlVMTCk7CisrICAgICAgICBpZiAobWVtY21wKG1kLCByZXRbbl0sIHNpemVvZiBt ZCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsIEZJ UFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAg fQorKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBtc2dfc2hhMjU2W10gPQorKyAgICB7IDB4ZmEsIDB4NDgsIDB4NTksIDB4MmEsIDB4ZTEs IDB4YWUsIDB4MWYsIDB4MzAsCisrICAgIDB4ZmMKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGRpZ19zaGEyNTZbXSA9CisrICAgIHsgMHhmNywgMHgyNiwgMHhkOCwgMHg5OCwg MHg0NywgMHg5MSwgMHg2OCwgMHg1YiwKKysgICAgMHg5ZSwgMHgzOSwgMHhiMiwgMHg1OCwgMHhi YiwgMHg3NSwgMHhiZiwgMHgwMSwKKysgICAgMHgxNywgMHgwYywgMHg4NCwgMHgwMCwgMHgwMSwg MHg3YSwgMHg5NCwgMHg4MywKKysgICAgMHhmMywgMHgwYiwgMHgxNSwgMHg4NCwgMHg0YiwgMHg2 OSwgMHg4OCwgMHg4YQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3No YTUxMltdID0KKysgICAgeyAweDM3LCAweGQxLCAweDM1LCAweDlkLCAweDE4LCAweDQxLCAweGU5 LCAweGI3LAorKyAgICAweDZkLCAweDlhLCAweDEzLCAweGRhLCAweDVmLCAweGYzLCAweGJkCisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhNTEyW10gPQorKyAgICB7 IDB4MTEsIDB4MTMsIDB4YzQsIDB4MTksIDB4ZWQsIDB4MmIsIDB4MWQsIDB4MTYsCisrICAgIDB4 MTEsIDB4ZWIsIDB4OWIsIDB4YmUsIDB4ZjAsIDB4N2YsIDB4Y2YsIDB4NDQsCisrICAgIDB4OGIs IDB4ZDcsIDB4NTcsIDB4YmQsIDB4OGQsIDB4YTksIDB4MjUsIDB4YjAsCisrICAgIDB4NDcsIDB4 MjUsIDB4ZDYsIDB4NmMsIDB4OWEsIDB4NTQsIDB4N2YsIDB4OGYsCisrICAgIDB4MGIsIDB4NTMs IDB4MWEsIDB4MTAsIDB4NjgsIDB4MzIsIDB4MDMsIDB4MzgsCisrICAgIDB4ODIsIDB4YzQsIDB4 ODcsIDB4YzQsIDB4ZWEsIDB4MGUsIDB4ZDEsIDB4MDQsCisrICAgIDB4YTksIDB4OTgsIDB4YzEs IDB4MDUsIDB4YTMsIDB4ZjMsIDB4ZjgsIDB4YjEsCisrICAgIDB4YWYsIDB4YmMsIDB4ZDksIDB4 NzgsIDB4N2UsIDB4ZWUsIDB4M2QsIDB4NDMKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3No YTIodm9pZCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhd OworKworKyAgICBFVlBfRGlnZXN0KG1zZ19zaGEyNTYsIHNpemVvZihtc2dfc2hhMjU2KSwgbWQs IE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCk7CisrICAgIGlmIChtZW1jbXAoZGlnX3NoYTI1Niwg bWQsIHNpemVvZihkaWdfc2hhMjU2KSkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf TU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIH0KKysKKysgICAgRVZQX0RpZ2VzdChtc2dfc2hhNTEyLCBzaXplb2YobXNnX3NoYTUxMiks IG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpOworKyAgICBpZiAobWVtY21wKGRpZ19zaGE1 MTIsIG1kLCBzaXplb2YoZGlnX3NoYTUxMikpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVybiAw OworKyAgICB9CisrCisrICAgIHJldHVybiAxOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcyBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jCistLS0gb3BlbnNz bC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYy5maXBzCTIwMTYtMDMt MDEgMTY6MzM6MDcuNjIzOTE2NjgxICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2Zp cHMvZmlwc19zdGFuZGFsb25lX2htYWMuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMzkxNjY4MSAr MDEwMAorQEAgLTAsMCArMSwyNjggQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAo YykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAq CisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU CisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK KysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysj aW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvc2hhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZm5kZWYgRklQU0NB TklTVEVSX08KKytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQoKQorK3sKKysgICAgcmV0dXJuIDA7 CisrfQorKworK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjaygpCisreworK30KKysjZW5kaWYKKysK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IGJuX211bF9tb250X2ZwdTY0KEJOX1VMT05HICpy cCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsCisrICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEJOX1VMT05HICpucCwgY29uc3QgQk5fVUxPTkcgKm4wLCBpbnQgbnVt KQorK3sKKysgICAgcmV0dXJuIDA7CisrfTsKKysKKytpbnQgYm5fbXVsX21vbnRfaW50KEJOX1VM T05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsCisrICAgICAg ICAgICAgICAgICAgICBjb25zdCBCTl9VTE9ORyAqbnAsIGNvbnN0IEJOX1VMT05HICpuMCwgaW50 IG51bSkKKyt7CisrICAgIHJldHVybiAwOworK307CisrCisrIyBpZiAgICAgZGVmaW5lZChfX2kz ODYpICAgfHwgZGVmaW5lZChfX2kzODZfXykgICB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IFwKKysg ICAgICAgIGRlZmluZWQoX19JTlRFTF9fKSB8fCBcCisrICAgICAgICBkZWZpbmVkKF9feDg2XzY0 KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKKysgICAgICAgIGRlZmluZWQoX01fQU1ENjQp IHx8IGRlZmluZWQoX01fWDY0KQorKworK3Vuc2lnbmVkIGludCBPUEVOU1NMX2lhMzJjYXBfUFs0 XTsKKyt1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpCisreworKyAgICBp ZiAoc2l6ZW9mKGxvbmcpID09IDQpCisrICAgICAgICAvKgorKyAgICAgICAgICogSWYgMzItYml0 IGFwcGxpY2F0aW9uIHB1bGxzIGFkZHJlc3Mgb2YgT1BFTlNTTF9pYTMyY2FwX1BbMF0KKysgICAg ICAgICAqIGNsZWFyIHNlY29uZCBlbGVtZW50IHRvIG1haW50YWluIHRoZSBpbGx1c2lvbiB0aGF0 IHZlY3RvcgorKyAgICAgICAgICogaXMgMzItYml0LgorKyAgICAgICAgICovCisrICAgICAgICBP UEVOU1NMX2lhMzJjYXBfUFsxXSA9IDA7CisrCisrICAgIE9QRU5TU0xfaWEzMmNhcF9QWzJdID0g MDsKKysKKysgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nICopT1BFTlNTTF9pYTMyY2FwX1A7Cisr fQorKworKyMgIGlmIGRlZmluZWQoT1BFTlNTTF9DUFVJRF9PQkopICYmICFkZWZpbmVkKE9QRU5T U0xfTk9fQVNNKSAmJiAhZGVmaW5lZChJMzg2X09OTFkpCisrIyAgIGRlZmluZSBPUEVOU1NMX0NQ VUlEX1NFVFVQCisrIyAgIGlmIGRlZmluZWQoX1dJTjMyKQorK3R5cGVkZWYgdW5zaWduZWQgX19p bnQ2NCBJQTMyQ0FQOworKyMgICBlbHNlCisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgSUEz MkNBUDsKKysjICAgZW5kaWYKKyt2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKKyt7Cisr ICAgIHN0YXRpYyBpbnQgdHJpZ2dlciA9IDA7CisrICAgIElBMzJDQVAgT1BFTlNTTF9pYTMyX2Nw dWlkKHVuc2lnbmVkIGludCAqKTsKKysgICAgSUEzMkNBUCB2ZWM7CisrICAgIGNoYXIgKmVudjsK KysKKysgICAgaWYgKHRyaWdnZXIpCisrICAgICAgICByZXR1cm47CisrCisrICAgIHRyaWdnZXIg PSAxOworKyAgICBpZiAoKGVudiA9IGdldGVudigiT1BFTlNTTF9pYTMyY2FwIikpKSB7CisrICAg ICAgICBpbnQgb2ZmID0gKGVudlswXSA9PSAnficpID8gMSA6IDA7CisrIyAgIGlmIGRlZmluZWQo X1dJTjMyKQorKyAgICAgICAgaWYgKCFzc2NhbmYoZW52ICsgb2ZmLCAiJUk2NGkiLCAmdmVjKSkK KysgICAgICAgICAgICB2ZWMgPSBzdHJ0b3VsKGVudiArIG9mZiwgTlVMTCwgMCk7CisrIyAgIGVs c2UKKysgICAgICAgIGlmICghc3NjYW5mKGVudiArIG9mZiwgIiVsbGkiLCAobG9uZyBsb25nICop JnZlYykpCisrICAgICAgICAgICAgdmVjID0gc3RydG91bChlbnYgKyBvZmYsIE5VTEwsIDApOwor KyMgICBlbmRpZgorKyAgICAgICAgaWYgKG9mZikKKysgICAgICAgICAgICB2ZWMgPSBPUEVOU1NM X2lhMzJfY3B1aWQoT1BFTlNTTF9pYTMyY2FwX1ApICYgfnZlYzsKKysgICAgICAgIGVsc2UgaWYg KGVudlswXSA9PSAnOicpCisrICAgICAgICAgICAgdmVjID0gT1BFTlNTTF9pYTMyX2NwdWlkKE9Q RU5TU0xfaWEzMmNhcF9QKTsKKysKKysgICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzJdID0gMDsK KysgICAgICAgIGlmICgoZW52ID0gc3RyY2hyKGVudiwgJzonKSkpIHsKKysgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgdmVjeDsKKysgICAgICAgICAgICBlbnYrKzsKKysgICAgICAgICAgICBvZmYg PSAoZW52WzBdID09ICd+JykgPyAxIDogMDsKKysgICAgICAgICAgICB2ZWN4ID0gc3RydG91bChl bnYgKyBvZmYsIE5VTEwsIDApOworKyAgICAgICAgICAgIGlmIChvZmYpCisrICAgICAgICAgICAg ICAgIE9QRU5TU0xfaWEzMmNhcF9QWzJdICY9IH52ZWN4OworKyAgICAgICAgICAgIGVsc2UKKysg ICAgICAgICAgICAgICAgT1BFTlNTTF9pYTMyY2FwX1BbMl0gPSB2ZWN4OworKyAgICAgICAgfQor KyAgICB9IGVsc2UKKysgICAgICAgIHZlYyA9IE9QRU5TU0xfaWEzMl9jcHVpZChPUEVOU1NMX2lh MzJjYXBfUCk7CisrCisrICAgIC8qCisrICAgICAqIHwoMTw8MTApIHNldHMgYSByZXNlcnZlZCBi aXQgdG8gc2lnbmFsIHRoYXQgdmFyaWFibGUKKysgICAgICogd2FzIGluaXRpYWxpemVkIGFscmVh ZHkuLi4gVGhpcyBpcyB0byBhdm9pZCBpbnRlcmZlcmVuY2UKKysgICAgICogd2l0aCBjcHVpZCBz bmlwcGV0cyBpbiBFTEYgLmluaXQgc2VnbWVudC4KKysgICAgICovCisrICAgIE9QRU5TU0xfaWEz MmNhcF9QWzBdID0gKHVuc2lnbmVkIGludCl2ZWMgfCAoMSA8PCAxMCk7CisrICAgIE9QRU5TU0xf aWEzMmNhcF9QWzFdID0gKHVuc2lnbmVkIGludCkodmVjID4+IDMyKTsKKyt9CisrIyAgZWxzZQor K3Vuc2lnbmVkIGludCBPUEVOU1NMX2lhMzJjYXBfUFs0XTsKKysjICBlbmRpZgorKworKyMgZWxz ZQorK3Vuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCkKKyt7CisrICAgIHJl dHVybiBOVUxMOworK30KKysjIGVuZGlmCisraW50IE9QRU5TU0xfTk9OUElDX3JlbG9jYXRlZCA9 IDA7CisrIyBpZiAhZGVmaW5lZChPUEVOU1NMX0NQVUlEX1NFVFVQKSAmJiAhZGVmaW5lZChPUEVO U1NMX0NQVUlEX09CSikKKyt2b2lkIE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKKyt7CisrfQor KyMgZW5kaWYKKysKKytzdGF0aWMgdm9pZCBobWFjX2luaXQoU0hBMjU2X0NUWCAqbWRfY3R4LCBT SEEyNTZfQ1RYICpvX2N0eCwgY29uc3QgY2hhciAqa2V5KQorK3sKKysgICAgc2l6ZV90IGxlbiA9 IHN0cmxlbihrZXkpOworKyAgICBpbnQgaTsKKysgICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFD X01BWF9NRF9DQkxPQ0tdOworKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxP Q0tdOworKworKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykgeworKyAgICAgICAgU0hBMjU2X0lu aXQobWRfY3R4KTsKKysgICAgICAgIFNIQTI1Nl9VcGRhdGUobWRfY3R4LCBrZXksIGxlbik7Cisr ICAgICAgICBTSEEyNTZfRmluYWwoa2V5bWQsIG1kX2N0eCk7CisrICAgICAgICBsZW4gPSBTSEEy NTZfRElHRVNUX0xFTkdUSDsKKysgICAgfSBlbHNlCisrICAgICAgICBtZW1jcHkoa2V5bWQsIGtl eSwgbGVuKTsKKysgICAgbWVtc2V0KCZrZXltZFtsZW5dLCAnXDAnLCBITUFDX01BWF9NRF9DQkxP Q0sgLSBsZW4pOworKworKyAgICBmb3IgKGkgPSAwOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLOyBp KyspCisrICAgICAgICBwYWRbaV0gPSAweDM2IF4ga2V5bWRbaV07CisrICAgIFNIQTI1Nl9Jbml0 KG1kX2N0eCk7CisrICAgIFNIQTI1Nl9VcGRhdGUobWRfY3R4LCBwYWQsIFNIQTI1Nl9DQkxPQ0sp OworKworKyAgICBmb3IgKGkgPSAwOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLOyBpKyspCisrICAg ICAgICBwYWRbaV0gPSAweDVjIF4ga2V5bWRbaV07CisrICAgIFNIQTI1Nl9Jbml0KG9fY3R4KTsK KysgICAgU0hBMjU2X1VwZGF0ZShvX2N0eCwgcGFkLCBTSEEyNTZfQ0JMT0NLKTsKKyt9CisrCisr c3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqbWRf Y3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgU0hBMjU2X0NUWCAqb19jdHgpCisreworKyAg ICB1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrCisrICAgIFNIQTI1 Nl9GaW5hbChidWYsIG1kX2N0eCk7CisrICAgIFNIQTI1Nl9VcGRhdGUob19jdHgsIGJ1Ziwgc2l6 ZW9mIGJ1Zik7CisrICAgIFNIQTI1Nl9GaW5hbChtZCwgb19jdHgpOworK30KKysKKysjZW5kaWYK KysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysgICAgc3RhdGljIGNoYXIga2V5W10gPSAib3Jib0RlSklUSVRlanNpcnBBRE9OaXZp cnBVa3ZhclAiOworKyAgICBpbnQgbiwgYmluYXJ5ID0gMDsKKysKKysgICAgaWYgKGFyZ2MgPCAy KSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIFs8ZmlsZT5dK1xuIiwgYXJndlswXSk7 CisrICAgICAgICBleGl0KDEpOworKyAgICB9CisrCisrICAgIG4gPSAxOworKyAgICBpZiAoIXN0 cmNtcChhcmd2W25dLCAiLWJpbmFyeSIpKSB7CisrICAgICAgICBuKys7CisrICAgICAgICBiaW5h cnkgPSAxOyAgICAgICAgICAgICAvKiBlbWl0IGJpbmFyeSBmaW5nZXJwcmludC4uLiAqLworKyAg ICB9CisrCisrICAgIGZvciAoOyBuIDwgYXJnYzsgKytuKSB7CisrICAgICAgICBGSUxFICpmID0g Zm9wZW4oYXJndltuXSwgInJiIik7CisrICAgICAgICBTSEEyNTZfQ1RYIG1kX2N0eCwgb19jdHg7 CisrICAgICAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysgICAg ICAgIGludCBpOworKworKyAgICAgICAgaWYgKCFmKSB7CisrICAgICAgICAgICAgcGVycm9yKGFy Z3Zbbl0pOworKyAgICAgICAgICAgIGV4aXQoMik7CisrICAgICAgICB9CisrCisrICAgICAgICBo bWFjX2luaXQoJm1kX2N0eCwgJm9fY3R4LCBrZXkpOworKyAgICAgICAgZm9yICg7OykgeworKyAg ICAgICAgICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICAgICAgICAgIHNpemVfdCBsID0gZnJlYWQo YnVmLCAxLCBzaXplb2YgYnVmLCBmKTsKKysKKysgICAgICAgICAgICBpZiAobCA9PSAwKSB7Cisr ICAgICAgICAgICAgICAgIGlmIChmZXJyb3IoZikpIHsKKysgICAgICAgICAgICAgICAgICAgIHBl cnJvcihhcmd2W25dKTsKKysgICAgICAgICAgICAgICAgICAgIGV4aXQoMyk7CisrICAgICAgICAg ICAgICAgIH0gZWxzZQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg fQorKyAgICAgICAgICAgIFNIQTI1Nl9VcGRhdGUoJm1kX2N0eCwgYnVmLCBsKTsKKysgICAgICAg IH0KKysgICAgICAgIGhtYWNfZmluYWwobWQsICZtZF9jdHgsICZvX2N0eCk7CisrCisrICAgICAg ICBpZiAoYmluYXJ5KSB7CisrICAgICAgICAgICAgZndyaXRlKG1kLCBTSEEyNTZfRElHRVNUX0xF TkdUSCwgMSwgc3Rkb3V0KTsKKysgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIC4u LiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KKysgICAgICAgIH0KKysKKysvKiAgICAgIHByaW50Zigi SE1BQy1TSEExKCVzKT0gIixhcmd2W25dKTsgKi8KKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBT SEEyNTZfRElHRVNUX0xFTkdUSDsgKytpKQorKyAgICAgICAgICAgIHByaW50ZigiJTAyeCIsIG1k W2ldKTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysgICAgfQorKyNlbmRpZgorKyAgICByZXR1 cm4gMDsKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rf c3VpdGUuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5j CistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcwky MDE2LTAzLTAxIDE2OjMzOjA3LjYyNDkxNjcwNCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2Ny eXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI0OTE2NzA0 ICswMTAwCitAQCAtMCwwICsxLDYzOSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICoKKysgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0IGRyaXZlciBmb3Ig dGhlIEZJUFMtMTQwIHRlc3RpbmcKKysgKiBsYWIgcGVyZm9ybWluZyBGSVBTLTE0MCB2YWxpZGF0 aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCisrICogT3BlblNTTCBsaWJyYXJ5 IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3JhcGhpYworKyAqIGZ1bmN0 aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRlZCBieSBkZWxpYmVyYXRl bHkKKysgKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUgaGFzaAorKyAqCisrICog Q29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCisrICoKKysgKi8KKysjaW5jbHVkZSA8c3Rk aW8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9h ZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysK KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK2ludCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgc3Vw cG9ydFxuIik7CisrICAgIHJldHVybiAoMCk7CisrfQorKyNlbHNlCisrCisrIyBpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysjIGluY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrLyogQUVTOiBlbmNy eXB0IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9y aWdpbmFsIHBsYWludGV4dAorKyovCisrc3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCisr eworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBwbHRtcFsxNl07CisrICAg IHVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl0gPQor KyAgICAgICAgeyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQs IDE1LCAxNiB9OworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNo ZGxjdSI7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5p dCgmY3R4KTsKKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2Vj YigpLCBOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisrICAgICAgICBnb3RvIGVycjsKKysgICAg RVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAxNik7CisrICAgIGlmIChFVlBfQ2lw aGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwgTlVMTCwga2V5LCBOVUxMLCAwKSA8 PSAwKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIEVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNp dG1wLCAxNik7CisrICAgIGlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQorKyAgICAg ICAgZ290byBlcnI7CisrICAgIHJldCA9IDE7CisrIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhf Y2xlYW51cCgmY3R4KTsKKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBGSVBT X2RlczNfdGVzdCh2b2lkKQorK3sKKysgICAgaW50IHJldCA9IDA7CisrICAgIHVuc2lnbmVkIGNo YXIgcGx0bXBbOF07CisrICAgIHVuc2lnbmVkIGNoYXIgY2l0bXBbOF07CisrICAgIHVuc2lnbmVk IGNoYXIga2V5W10gPQorKyAgICAgICAgeyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwg MTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LAorKyAgICAgICAgMTksIDIwLCAyMSwgMjIs IDIzLCAyNAorKyAgICB9OworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScs ICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9OworKyAgICBFVlBfQ0lQSEVSX0NU WCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrICAgIGlmIChFVlBfQ2lw aGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksIE5VTEwsIGtleSwgTlVMTCwgMSkg PD0gMCkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBw bGFpbnRleHQsIDgpOworKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19l ZGUzX2VjYigpLCBOVUxMLCBrZXksIE5VTEwsIDApIDw9IDApCisrICAgICAgICBnb3RvIGVycjsK KysgICAgRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAsIDgpOworKyAgICBpZiAobWVtY21w KHBsdG1wLCBwbGFpbnRleHQsIDgpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIHJldCA9IDE7 CisrIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgcmV0dXJu IHJldDsKKyt9CisrCisrLyoKKysgKiBEU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlm eSBpbnB1dCBwbGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBTX2RzYV90ZXN0KGludCBi YWQpCisreworKyAgICBEU0EgKmRzYSA9IE5VTEw7CisrICAgIEVWUF9QS0VZIHBrOworKyAgICB1 bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNpZ25lZCBjaGFy IGJ1Zls2MF07CisrICAgIHVuc2lnbmVkIGludCBzbGVuOworKyAgICBpbnQgciA9IDA7CisrICAg IEVWUF9NRF9DVFggbWN0eDsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIEVWUF9N RF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGRzYSA9IERTQV9uZXcoKTsKKysgICAgaWYgKCFkc2Ep CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19l eChkc2EsIDEwMjQsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIE5VTEwpKQorKyAgICAgICAgZ290byBl bmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKyAgICAgICAgZ290byBlbmQ7 CisrICAgIGlmIChiYWQpCisrICAgICAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwor KworKyAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOworKyAgICBway5wa2V5LmRzYSA9IGRzYTsK KysKKysgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQor KyAgICAgICAgZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3Qs IHNpemVvZihkZ3N0KSAtIDEpKQorKyAgICAgICAgZ290byBlbmQ7CisrICAgIGlmICghRVZQX1Np Z25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysgICAgICAgIGdvdG8gZW5kOworKwor KyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysg ICAgICAgIGdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3Qs IHNpemVvZihkZ3N0KSAtIDEpKQorKyAgICAgICAgZ290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVy aWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgJnBrKTsKKysgZW5kOgorKyAgICBFVlBfTURfQ1RY X2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAoZHNhKQorKyAgICAgICAgRFNBX2ZyZWUoZHNhKTsK KysgICAgaWYgKHIgIT0gMSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9 CisrCisrLyoKKysgKiBSU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBw bGFpbnRleHQuCisrICovCisrc3RhdGljIGludCBGSVBTX3JzYV90ZXN0KGludCBiYWQpCisrewor KyAgICBSU0EgKmtleTsKKysgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9u cmlzaGRsYyI7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisrICAgIHVuc2lnbmVkIGlu dCBzbGVuOworKyAgICBCSUdOVU0gKmJuOworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrICAgIEVW UF9QS0VZIHBrOworKyAgICBpbnQgciA9IDA7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOwor KyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBrZXkgPSBSU0FfbmV3KCk7CisrICAg IGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysgICAgICAgIHJldHVybiAw OworKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOworKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9r ZXlfZXgoa2V5LCAxMDI0LCBibiwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgQk5f ZnJlZShibik7CisrICAgIGlmIChiYWQpCisrICAgICAgICBCTl9hZGRfd29yZChrZXktPm4sIDEp OworKworKyAgICBway50eXBlID0gRVZQX1BLRVlfUlNBOworKyAgICBway5wa2V5LnJzYSA9IGtl eTsKKysKKysgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwp KQorKyAgICAgICAgZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlu cHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCisrICAgICAgICBnb3RvIGVuZDsK KysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQorKyAgICAg ICAgZ290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9z aGExKCksIE5VTEwpKQorKyAgICAgICAgZ290byBlbmQ7CisrICAgIGlmICghRVZQX1ZlcmlmeVVw ZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkKKysgICAg ICAgIGdvdG8gZW5kOworKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4s ICZwayk7CisrIGVuZDoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYg KGtleSkKKysgICAgICAgIFJTQV9mcmVlKGtleSk7CisrICAgIGlmIChyICE9IDEpCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrfQorKworKy8qIFNIQTE6IGdlbmVyYXRlIGhh c2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29t cHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMV90ZXN0KCkKKyt7 CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9CisrICAgICAg ICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUs IDB4ZDQsIDB4OWEsCisrMHgzOCwgMHgwYywgMHg4YiwgMHgxZSwgMHgyYywgMHhlOCwgMHhiMywg MHhjNSwgMHgxOCB9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwor KworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJS X2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsIHNpemVvZihzdHIpIC0g MSwgbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAg IGlmIChtZW1jbXAobWQsIGRpZ2VzdCwgc2l6ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsK KysgICAgcmV0dXJuIDE7CisrfQorKworKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCisreworKyAgICB1 bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0gPQorKyAgICAgICAgeyAw eGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMs IDB4YzksCisrMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKKysgICAgICAgIDB4NiwgMHhl YywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwg MHhlNiwKKysgICAgICAgICAgICAweDUwLCAweDRmLCAweDQ3LCAweDU3CisrICAgIH07CisrICAg IHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNo YXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK KysgICAgaWYgKCFFVlBfRGlnZXN0KHN0ciwgc2l6ZW9mKHN0cikgLSAxLCBtZCwgTlVMTCwgRVZQ X3NoYTI1NigpLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1k LCBkaWdlc3QsIHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAx OworK30KKysKKysvKiBTSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVl IGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8K KytzdGF0aWMgaW50IEZJUFNfc2hhNTEyX3Rlc3QoKQorK3sKKysgICAgdW5zaWduZWQgY2hhciBk aWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KKysgICAgICAgIHsgMHg5OSwgMHhjOSwgMHhl OSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhkZiwgMHg4OCwgMHg1ZiwKKysweDk0 LCAweDcxLCAweDY0LCAweDI4LCAweGNhLAorKyAgICAgICAgMHgxNiwgMHgxZiwgMHgzZCwgMHhm NCwgMHgxZiwgMHhmMywgMHgwZiwgMHhjNSwgMHgwMywgMHg5OSwgMHhiMiwKKysgICAgICAgICAg ICAweGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRhLAorKyAgICAgICAgMHg0NSwgMHhkMiwgMHg2 YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwKKysgICAg ICAgICAgICAweDI0LCAweGIxLCAweGQ5LCAweDQwLCAweDIyLAorKyAgICAgICAgMHg0OSwgMHg1 NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwgMHgyNywgMHhmZSwgMHhiZCwgMHhkNiwgMHhkNiwK KysgICAgICAgICAgICAweGViLCAweDJkLCAweDQyLCAweDFkLCAweGEzCisrICAgIH07CisrICAg IHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNo YXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK KysgICAgaWYgKCFFVlBfRGlnZXN0KHN0ciwgc2l6ZW9mKHN0cikgLSAxLCBtZCwgTlVMTCwgRVZQ X3NoYTUxMigpLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1k LCBkaWdlc3QsIHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAx OworK30KKysKKysvKiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZh bHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisr Ki8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQorK3sKKysgICAgdW5zaWduZWQg Y2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNh bXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0K KysgICAgICAgIHsgMHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhk ZCwgMHgwYSwgMHhlYSwgMHhlYSwKKysweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAorKyAg ICAgICAgMHhiMiwgMHhmYiwgMHhlYywgMHhjNgorKyAgICB9OworKworKyAgICB1bnNpZ25lZCBj aGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKwor KyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDCisrICAgICAgICAoRVZQX3No YTEoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEsIGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0LCAmb3V0 bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCwga2F2YWwsIG91 dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrfQorKworKy8qIEhN QUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFy ZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGlu dCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKQorK3sKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9 ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsK KysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysgICAgICAgIHsg MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhm ZiwgMHhiZSwKKysweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAorKyAgICAgICAgMHhlNSwg MHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgz YSwgMHgxOQorKyAgICB9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJ WkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKKysgICAgaWYgKCFITUFDCisrICAgICAgICAoRVZQX3NoYTIyNCgpLCBrZXksIHNpemVvZihr ZXkpIC0gMSwgaXYsIHNpemVvZihpdikgLSAxLCBvdXQsCisrICAgICAgICAgJm91dGxlbikpCisr ICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsIGthdmFsLCBvdXRsZW4pKQor KyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworK30KKysKKysvKiBITUFDLVNIQTI1 NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25v d24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19o bWFjX3NoYTI1Nl90ZXN0KCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25y aXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVu c2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrICAgICAgICB7IDB4ZTksIDB4 MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYs CisrMHgwMiwgMHhmNSwgMHg3MiwgMHgzMywgMHg4NywKKysgICAgICAgIDB4OWYsIDB4YzYsIDB4 NmUsIDB4N2IsIDB4N2UsIDB4YTgsIDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsCisrICAg ICAgICAgICAgMHg1MSwgMHhmZiwgMHhkYSwgMHgyNCwgMHhmNAorKyAgICB9OworKworKyAgICB1 bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0 bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDCisrICAgICAg ICAoRVZQX3NoYTI1NigpLCBrZXksIHNpemVvZihrZXkpIC0gMSwgaXYsIHNpemVvZihpdikgLSAx LCBvdXQsCisrICAgICAgICAgJm91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYg KG1lbWNtcChvdXQsIGthdmFsLCBvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJl dHVybiAxOworK30KKysKKysvKiBITUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBk aWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0 IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKKyt7CisrICAg IHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIg aXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9N RF9TSVpFXSA9CisrICAgICAgICB7IDB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQs IDB4ZTMsIDB4MzEsIDB4YjYsIDB4NjMsIDB4MDgsCisrMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwg MHgxMCwKKysgICAgICAgIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMs IDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsCisrICAgICAgICAgICAgMHhhYywgMHhiMCwgMHgwNywg MHgzOSwgMHgwOCwKKysgICAgICAgIDB4ZjMsIDB4OTEsIDB4MzUsIDB4MTEsIDB4NzYsIDB4ZDYs IDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsCisrICAgICAgICAgICAgMHhmMywgMHhiOCwg MHg5YiwgMHg4OCwgMHgxYworKyAgICB9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBf TUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xl YXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDCisrICAgICAgICAoRVZQX3NoYTM4NCgpLCBrZXks IHNpemVvZihrZXkpIC0gMSwgaXYsIHNpemVvZihpdikgLSAxLCBvdXQsCisrICAgICAgICAgJm91 dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsIGthdmFsLCBv dXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworK30KKysKKysvKiBI TUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBp bnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10g PSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7 CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrICAgICAgICB7 IDB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4 YWYsIDB4ZjMsCisrMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwKKysgICAgICAgIDB4Zjcs IDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4 YzEsCisrICAgICAgICAgICAgMHhhZCwgMHg3ZSwgMHgyNCwgMHhjYSwgMHhiMSwKKysgICAgICAg IDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUsIDB4ZWEsIDB4MmMsIDB4MDIsIDB4NTgsIDB4MGIsIDB4 YTYsIDB4NTIsCisrICAgICAgICAgICAgMHg2YiwgMHg2MSwgMHg3ZiwgMHhlYiwgMHg5YywKKysg ICAgICAgIDB4NDcsIDB4ODYsIDB4NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYsIDB4ZWUsIDB4 NDYsIDB4NjksIDB4OTYsCisrICAgICAgICAgICAgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1 MworKyAgICB9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwor KyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysg ICAgaWYgKCFITUFDCisrICAgICAgICAoRVZQX3NoYTUxMigpLCBrZXksIHNpemVvZihrZXkpIC0g MSwgaXYsIHNpemVvZihpdikgLSAxLCBvdXQsCisrICAgICAgICAgJm91dGxlbikpCisrICAgICAg ICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsIGthdmFsLCBvdXRsZW4pKQorKyAgICAg ICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworK30KKysKKysvKiBESDogZ2VuZXJhdGUgc2hh cmVkIHBhcmFtZXRlcnMKKysqLworK3N0YXRpYyBpbnQgZGhfdGVzdCgpCisreworKyAgICBESCAq ZGg7CisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBkaCA9IEZJUFNfZGhfbmV3KCk7Cisr ICAgIGlmICghZGgpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFESF9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAg ICBGSVBTX2RoX2ZyZWUoZGgpOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogWmVyb2l6ZQor KyovCisrc3RhdGljIGludCBaZXJvaXplKCkKKyt7CisrICAgIFJTQSAqa2V5OworKyAgICBCSUdO VU0gKmJuOworKyAgICB1bnNpZ25lZCBjaGFyIHVzZXJrZXlbMTZdID0KKysgICAgICAgIHsgMHg0 OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0Nywg MHg3ZiwKKysweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07CisrICAgIGludCBpLCBuOwor KworKyAgICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKKysgICAgYm4gPSBCTl9uZXcoKTsKKysgICAg aWYgKCFrZXkgfHwgIWJuKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIEJOX3NldF93b3JkKGJu LCA2NTUzNyk7CisrICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsIGJuLCBO VUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBCTl9mcmVlKGJuKTsKKysKKysgICAgbiA9 IEJOX251bV9ieXRlcyhrZXktPmQpOworKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBS U0EgcHJpdmF0ZSBrZXlcbiIsIG4pOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVy d3JpdGluZzpcbiIpOworKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrICAgIEJO X3JhbmQoa2V5LT5kLCBuICogOCwgLTEsIDApOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVy IG92ZXJ3cml0aW5nOlxuIik7CisrICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysK KysgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRc dCIpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspCisrICAgICAg ICBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgcHJpbnRmKCJcbiIpOworKyAgICBS QU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vya2V5KTsKKysgICAgcHJpbnRmKCJcdGNoYXIg YnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzogXG5cdFx0Iik7CisrICAgIGZvciAoaSA9IDA7 IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykKKysgICAgICAgIHByaW50ZigiJTAyeCIsIHVzZXJr ZXlbaV0pOworKyAgICBwcmludGYoIlxuIik7CisrCisrICAgIHJldHVybiAxOworK30KKysKKytz dGF0aWMgaW50IEVycm9yOworK2NvbnN0IGNoYXIgKkZhaWwoY29uc3QgY2hhciAqbXNnKQorK3sK KysgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgIEVycm9yKys7CisrICAgIHJldHVybiBtc2c7 CisrfQorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrCisrICAgIGlu dCBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOwor KyAgICBpbnQgYmFkX3JzYSA9IDAsIGJhZF9kc2EgPSAwOworKyAgICBpbnQgZG9fcm5nX3N0aWNr ID0gMDsKKysgICAgaW50IG5vX2V4aXQgPSAwOworKworKyAgICBwcmludGYoIlx0RklQUy1tb2Rl IHRlc3QgYXBwbGljYXRpb25cblxuIik7CisrCisrICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4 dGVybmFsIGZpbGUsIGlmIGFueSAqLworKyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQp OworKworKyAgICBpZiAoYXJndlsxXSkgeworKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0 cyAqLworKyAgICAgICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgImFlcyIpKSB7CisrICAgICAgICAg ICAgRklQU19jb3JydXB0X2FlcygpOworKyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRp b24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNl IGlmICghc3RyY21wKGFyZ3ZbMV0sICJkZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVw dF9kZXMoKTsKKysgICAgICAgICAgICBwcmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlw dGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJkc2EiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsK KysgICAgICAgICAgICBwcmludGYKKysgICAgICAgICAgICAgICAgKCJEU0Ega2V5IGdlbmVyYXRp b24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Cisr ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYSIpKSB7CisrICAgICAgICAg ICAgRklQU19jb3JydXB0X3JzYSgpOworKyAgICAgICAgICAgIHByaW50ZgorKyAgICAgICAgICAg ICAgICAoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBj b3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAicnNha2V5IikpIHsKKysgICAgICAgICAgICBwcmludGYKKysgICAgICAgICAgICAgICAgKCJS U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVk IGtleS4uLlxuIik7CisrICAgICAgICAgICAgYmFkX3JzYSA9IDE7CisrICAgICAgICAgICAgbm9f ZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdl biIpKSB7CisrICAgICAgICAgICAgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMTsKKysgICAgICAg ICAgICBub19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYKKysgICAgICAgICAgICAgICAg KCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVw dGVkIGtleWdlbi4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwg ImRzYWtleSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmCisrICAgICAgICAgICAgICAgICgiRFNB IGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBr ZXkuLi5cbiIpOworKyAgICAgICAgICAgIGJhZF9kc2EgPSAxOworKyAgICAgICAgICAgIG5vX2V4 aXQgPSAxOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXlnZW4i KSkgeworKyAgICAgICAgICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDE7CisrICAgICAgICAg ICAgbm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmCisrICAgICAgICAgICAgICAgICgi RFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRl ZCBrZXlnZW4uLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJz aGExIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOworKyAgICAgICAgICAg IHByaW50ZigiU0hBLTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAg fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmciKSkgeworKyAgICAgICAgICAgIEZJUFNf Y29ycnVwdF9ybmcoKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5n c3RpY2siKSkgeworKyAgICAgICAgICAgIGRvX3JuZ19zdGljayA9IDE7CisrICAgICAgICAgICAg bm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNv bnRpbnVvdXMgdGVzdC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIHBy aW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwgYXJndlsxXSk7CisrICAgICAgICAgICAgZXhp dCgxKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICghbm9fZXhpdCkgeworKyAgICAgICAgICAg IGlmICghRklQU19tb2RlX3NldCgxKSkgeworKyAgICAgICAgICAgICAgICBkb19wcmludF9lcnJv cnMoKTsKKysgICAgICAgICAgICAgICAgcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVk XG4iKTsKKysgICAgICAgICAgICAgICAgZXhpdCgxKTsKKysgICAgICAgICAgICB9CisrICAgICAg ICAgICAgcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxuIik7CisrICAgICAg ICAgICAgZXhpdCgwKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICAvKiBOb24tQXBwcm92 ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAgICovCisrICAgIHByaW50ZigiMS4gTm9u LUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBwcmlu dGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAgIHByaW50ZihkaF90 ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOworKworKyAgICAvKiBQ b3dlci11cCBzZWxmIHRlc3QKKysgICAgICovCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKKysgICAgaWYg KCFGSVBTX21vZGVfc2V0KDEpKSB7CisrICAgICAgICBkb19wcmludF9lcnJvcnMoKTsKKysgICAg ICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7CisrICAgICAgICBleGl0KDEpOworKyAgICB9 CisrICAgIHByaW50Zigic3VjY2Vzc2Z1bFxuIik7CisrICAgIGlmIChkb19jb3JydXB0X2RzYV9r ZXlnZW4pCisrICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbigpOworKyAgICBpZiAoZG9f Y29ycnVwdF9yc2Ffa2V5Z2VuKQorKyAgICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsK KysgICAgaWYgKGRvX3JuZ19zdGljaykKKysgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7CisrCisr ICAgIC8qIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgICovCisrICAgIHByaW50Zigi My4gQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoRklQU19hZXNf dGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyog UlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgICovCisr ICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRp b24uLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAic3VjY2Vzc2Z1 bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyogREVTLUNCQyBlbmNyeXB0aW9u L2RlY3J5cHRpb24KKysgICAgICovCisrICAgIHByaW50ZigiNS4gREVTLUVDQiBlbmNyeXB0aW9u L2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfZGVzM190ZXN0KCk/ICJzdWNjZXNz ZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOworKworKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRp b24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCisrICAgICAqLworKyAgICBwcmludGYoIjYuIERT QSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24uLi4iKTsKKysgICAgcHJp bnRmKEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxF RCFcbiIpKTsKKysKKysgICAgLyogU0hBLTEgaGFzaAorKyAgICAgKi8KKysgICAgcHJpbnRmKCI3 YS4gU0hBLTEgaGFzaC4uLiIpOworKyAgICBwcmludGYoRklQU19zaGExX3Rlc3QoKT8gInN1Y2Nl c3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIFNIQS0yNTYgaGFzaAor KyAgICAgKi8KKysgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBoYXNoLi4uIik7CisrICAgIHByaW50 ZihGSVBTX3NoYTI1Nl90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikp OworKworKyAgICAvKiBTSEEtNTEyIGhhc2gKKysgICAgICovCisrICAgIHByaW50ZigiN2MuIFNI QS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoRklQU19zaGE1MTJfdGVzdCgpPyAic3VjY2Vz c2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyogSE1BQy1TSEEtMSBoYXNo CisrICAgICAqLworKyAgICBwcmludGYoIjdkLiBITUFDLVNIQS0xIGhhc2guLi4iKTsKKysgICAg cHJpbnRmKEZJUFNfaG1hY19zaGExX3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlM RUQhXG4iKSk7CisrCisrICAgIC8qIEhNQUMtU0hBLTIyNCBoYXNoCisrICAgICAqLworKyAgICBw cmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFzaC4uLiIpOworKyAgICBwcmludGYoRklQU19obWFj X3NoYTIyNF90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOworKwor KyAgICAvKiBITUFDLVNIQS0yNTYgaGFzaAorKyAgICAgKi8KKysgICAgcHJpbnRmKCI3Zi4gSE1B Qy1TSEEtMjU2IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfaG1hY19zaGEyNTZfdGVzdCgp PyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyogSE1BQy1T SEEtMzg0IGhhc2gKKysgICAgICovCisrICAgIHByaW50ZigiN2cuIEhNQUMtU0hBLTM4NCBoYXNo Li4uIik7CisrICAgIHByaW50ZihGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKT8gInN1Y2Nlc3NmdWxc biIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCisr ICAgICAqLworKyAgICBwcmludGYoIjdoLiBITUFDLVNIQS01MTIgaGFzaC4uLiIpOworKyAgICBw cmludGYoRklQU19obWFjX3NoYTUxMl90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJ TEVEIVxuIikpOworKworKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRp b24KKysgICAgICovCisrICAgIHByaW50ZigiOC4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMg b3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3Jp dGhtIChELUgpLi4uIik7CisrICAgIHByaW50ZihkaF90ZXN0KCk/ICJzdWNjZXNzZnVsIGFzIGV4 cGVjdGVkXG4iCisrICAgICAgICAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpKTsK KysKKysgICAgLyogWmVyb2l6YXRpb24KKysgICAgICovCisrICAgIHByaW50ZigiOS4gWmVyby1p emF0aW9uLi4uXG4iKTsKKysgICAgcHJpbnRmKFplcm9pemUoKT8gIlx0c3VjY2Vzc2Z1bCBhcyBl eHBlY3RlZFxuIgorKyAgICAgICAgICAgOiBGYWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIp KTsKKysKKysgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNc biIsIEVycm9yKTsKKysgICAgcmV0dXJuIEVycm9yID8gMSA6IDA7CisrfQorKworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZmlwcy9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL01ha2VmaWxlLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MjQ5MTY3MDQgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9NYWtlZmlsZQkyMDE2LTAzLTAxIDE2OjMzOjA3 LjYyNDkxNjcwNCArMDEwMAorQEAgLTAsMCArMSwzNDEgQEAKKysjCisrIyBPcGVuU1NML2NyeXB0 by9maXBzL01ha2VmaWxlCisrIworKworK0RJUj0JZmlwcworK1RPUD0JLi4vLi4KKytDQz0JY2MK KytJTkNMVURFUz0KKytDRkxBRz0tZworK01BS0VGSUxFPQlNYWtlZmlsZQorK0FSPQkJYXIgcgor KworK0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKKysKKytHRU5FUkFMPU1ha2VmaWxlCisr VEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBzX3JhbmR0ZXN0LmMKKytBUFBTPQorKworK1BST0dS QU09IGZpcHNfc3RhbmRhbG9uZV9obWFjCisrRVhFPSAkKFBST0dSQU0pJChFWEVfRVhUKQorKwor K0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKKytMSUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBz X2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5j IFwKKysgICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBmaXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBm aXBzX2RzYV9zZWxmdGVzdC5jICBmaXBzX3JhbmQuYyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLmMg Zmlwc19wb3N0LmMgZmlwc19kcmJnX2N0ci5jIGZpcHNfZHJiZ19oYXNoLmMgZmlwc19kcmJnX2ht YWMuYyBcCisrICAgIGZpcHNfZHJiZ19saWIuYyBmaXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19z ZWxmdGVzdC5jIGZpcHNfcmFuZF9saWIuYyBcCisrICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZp cHNfZW5jLmMgZmlwc19tZC5jCisrCisrTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19k ZXNfc2VsZnRlc3QubyBmaXBzX2htYWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBc CisrICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8gZmlwc19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlw c19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5kLm8gXAorKyAgICBmaXBzX3JzYV94OTMxZy5vIGZp cHNfcG9zdC5vIGZpcHNfZHJiZ19jdHIubyBmaXBzX2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFj Lm8gXAorKyAgICBmaXBzX2RyYmdfbGliLm8gZmlwc19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2Vs ZnRlc3QubyBmaXBzX3JhbmRfbGliLm8gXAorKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBz X2VuYy5vIGZpcHNfbWQubworKworK0xJQkNSWVBUTz0tTC4uIC1sY3J5cHRvCisrCisrU1JDPSAk KExJQlNSQykgZmlwc19zdGFuZGFsb25lX2htYWMuYworKworK0VYSEVBREVSPSBmaXBzLmggZmlw c19yYW5kLmgKKytIRUFERVI9CSQoRVhIRUFERVIpCisrCisrQUxMPSAgICAkKEdFTkVSQUwpICQo U1JDKSAkKEhFQURFUikKKysKKyt0b3A6CisrCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0 byBTRElSUz0kKERJUikgc3ViX2FsbCkKKysKKythbGw6CWxpYiBleGUKKysKKytsaWI6CSQoTElC T0JKKQorKwkkKEFSKSAkKExJQikgJChMSUJPQkopCisrCSQoUkFOTElCKSAkKExJQikgfHwgZWNo byBOZXZlciBtaW5kLgorKwlAdG91Y2ggbGliCisrCisrZXhlOgkkKEVYRSkKKysKKytmaWxlczoK KysJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8K KysKKytsaW5rczoKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwg Li4vLi4vdGVzdCAkKFRFU1QpCisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8u Li9hcHBzICQoQVBQUykKKysKKytpbnN0YWxsOgorKwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAj IHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCisrCUBoZWFkZXJsaXN0PSIkKEVYSEVB REVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKKysJZG8gIFwKKysJKGNwICQkaSAkKElO U1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAorKwljaG1v ZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkg KTsgXAorKwlkb25lOworKworK3RhZ3M6CisrCWN0YWdzICQoU1JDKQorKworK3Rlc3RzOgorKwor K2xpbnQ6CisrCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgorKworK2RlcGVu ZDoKKysJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1h a2VmaWxlLi4uCisrCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBG TEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKKysKKytkY2xlYW46CisrCSQoUEVSTCkgLXBlICdp ZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFL RUZJTEUpID5NYWtlZmlsZS5uZXcKKysJbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCisr CisrY2xlYW46CisrCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICou b2xkICouYmFrIGZsdWZmCisrCisrJChFWEUpOiAkKFBST0dSQU0pLm8KKysJRklQU19TSEFfQVNN PSIiOyBmb3IgaSBpbiAkKFNIQTFfQVNNX09CSikgc2hhMjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0i JCRGSVBTX1NIQV9BU00gLi4vc2hhLyQkaSIgOyBkb25lOyBcCisrCWZvciBpIGluICQoQ1BVSURf T0JKKTsgZG8gRklQU19TSEFfQVNNPSIkJEZJUFNfU0hBX0FTTSAuLi8kJGkiIDsgZG9uZTsgXAor KwkkKENDKSAtbyAkQCAkKENGTEFHUykgJChQUk9HUkFNKS5vICQkRklQU19TSEFfQVNNCisrCisr IyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0Lgor KworK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9hc24xLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1h Yy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvcnNhLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggZmlwcy5jIGZpcHNfbG9jbC5oCisrZmlwc19hZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytm aXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfYWVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19hZXNfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Flc19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19hZXNfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2Flc19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2Flc19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfYWVzX3NlbGZ0ZXN0LmMKKytmaXBz X2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK KytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisr Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2Zp cHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisr Zmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytm aXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2Zp cHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2Zp cHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kZXNf c2VsZnRlc3QuYworK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBz X2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfY3RyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9t YWMuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAor K2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytm aXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19k cmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlwc19kcmJnX2N0ci5vOiBm aXBzX2RyYmdfY3RyLmMgZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBz X2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlwc19kcmJnX2hhc2gubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNf ZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdf aGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19o YXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX2hhc2gu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JhbmQuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3Rh Y2suaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisr Zmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19k cmJnX2hhc2guYworK2ZpcHNfZHJiZ19oYXNoLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJi Z19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYXNuMS5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2Zp cHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdf aG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfaG1h Yy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25m LmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor K2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHNfZHJiZ19obWFjLmMKKytmaXBzX2RyYmdfaG1hYy5vOiBmaXBzX3JhbmRf bGNsLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJn X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXJyLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2Zp cHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCisrZmlw c19kcmJnX2xpYi5vOiBmaXBzX2RyYmdfbGliLmMgZmlwc19sb2NsLmggZmlwc19yYW5kX2xjbC5o CisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX3Jh bmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vyci5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19kcmJn X3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAor K2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2Zp cHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kcmJn X3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3JhbmQu YworK2ZpcHNfZHJiZ19yYW5kLm86IGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisr Zmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2Ry Ymdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfZHJiZ19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZHJiZ19zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3NlbGZ0ZXN0LmMK KytmaXBzX2RyYmdfc2VsZnRlc3QubzogZmlwc19kcmJnX3NlbGZ0ZXN0LmggZmlwc19sb2NsLmgg Zmlwc19yYW5kX2xjbC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2RzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXJyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCisrZmlw c19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vc3NsX3R5cC5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3ltaGFja3MuaCBmaXBzX2RzYV9zZWxmdGVzdC5jCisrZmlwc19kc2Ffc2VsZnRlc3QubzogZmlw c19sb2NsLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX2htYWNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAor K2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29iamVjdHMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N0YWNrLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N5bWhhY2tzLmggZmlwc19obWFjX3NlbGZ0ZXN0LmMKKytmaXBzX3Bvc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBz X3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcG9zdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3Jh bmQuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcG9zdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcG9zdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90 eXAuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3Bvc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmggZmlwc19wb3N0LmMK KytmaXBzX3JhbmQubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAor K2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcmFu ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzX3JhbmQuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2Zp cHNfcmFuZC5vOiBmaXBzX2xvY2wuaCBmaXBzX3JhbmQuYworK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vZV9vcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAorK2ZpcHNfcmFuZF9saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgK KytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfcmFuZF9saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw c19yYW5kLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfcmFuZF9saWIubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAor K2ZpcHNfcmFuZF9saWIubzogZmlwc19yYW5kX2xpYi5jCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5o CisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2Zp cHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBz X3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAorK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCisrZmlwc19yYW5kX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX3JhbmRfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2xvY2wuaAorK2ZpcHNfcmFuZF9z ZWxmdGVzdC5vOiBmaXBzX3JhbmRfc2VsZnRlc3QuYworK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19yc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9maXBzLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpf bWFjLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0 cy5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xj b25mLmgKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBz X3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3Jz YV9zZWxmdGVzdC5jCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytm aXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yc2FfeDkzMWcu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JzYV94OTMxZy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2Eu aAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19y c2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2FfeDkz MWcuYworK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19z aGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmpfbWFjLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq ZWN0cy5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19zaGFfc2VsZnRlc3QuYworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2htYWMvaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2htYWMvaG1hYy5j LmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vaG1hYy9obWFjLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjQ5MTY3MDQgKzAx MDAKK0BAIC04OSwxMiArODksNiBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNv bnN0IHZvCisgICAgICAgICAgICAgRVZQZXJyKEVWUF9GX0hNQUNfSU5JVF9FWCwgRVZQX1JfRElT QUJMRURfRk9SX0ZJUFMpOworICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgfQorLSAg ICAgICAgLyoKKy0gICAgICAgICAqIE90aGVyIGFsZ29yaXRobSBibG9ja2luZyB3aWxsIGJlIGRv bmUgaW4gRklQU19jbWFjX2luaXQsIHZpYQorLSAgICAgICAgICogRklQU19obWFjX2luaXRfZXgo KS4KKy0gICAgICAgICAqLworLSAgICAgICAgaWYgKCFpbXBsICYmICFjdHgtPmlfY3R4LmVuZ2lu ZSkKKy0gICAgICAgICAgICByZXR1cm4gRklQU19obWFjX2luaXRfZXgoY3R4LCBrZXksIGxlbiwg bWQsIE5VTEwpOworICAgICB9CisgI2VuZGlmCisgICAgIC8qIElmIHdlIGFyZSBjaGFuZ2luZyBN RCB0aGVuIHdlIG11c3QgaGF2ZSBhIGtleSAqLworQEAgLTExMSw2ICsxMDUsMTMgQEAgaW50IEhN QUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bworICAgICB9CisgCisgICAgIGlmIChr ZXkgIT0gTlVMTCkgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgICAgIGlmIChGSVBTX21v ZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCisrICAgICAgICAgICAgJiYg KCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisr ICAgICAgICAgICAgICAgIHx8ICEoY3R4LT5pX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVykKKysgICAgICAgICAgICAgICAgfHwgIShjdHgtPm9fY3R4LmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCisrICAgICAgICAgICAgZ290byBlcnI7 CisrI2VuZGlmCisgICAgICAgICByZXNldCA9IDE7CisgICAgICAgICBqID0gRVZQX01EX2Jsb2Nr X3NpemUobWQpOworICAgICAgICAgT1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgt PmtleSkpOworQEAgLTE2NCwxMCArMTY1LDYgQEAgaW50IEhNQUNfSW5pdChITUFDX0NUWCAqY3R4 LCBjb25zdCB2b2lkCisgCisgaW50IEhNQUNfVXBkYXRlKEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pCisgeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMK Ky0gICAgaWYgKEZJUFNfbW9kZSgpICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKKy0gICAgICAgIHJl dHVybiBGSVBTX2htYWNfdXBkYXRlKGN0eCwgZGF0YSwgbGVuKTsKKy0jZW5kaWYKKyAgICAgaWYg KCFjdHgtPm1kKQorICAgICAgICAgcmV0dXJuIDA7CisgCitAQCAtMTc4LDEwICsxNzUsNiBAQCBp bnQgSE1BQ19GaW5hbChITUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjCisgeworICAgICB1bnNpZ25l ZCBpbnQgaTsKKyAgICAgdW5zaWduZWQgY2hhciBidWZbRVZQX01BWF9NRF9TSVpFXTsKKy0jaWZk ZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdp bmUpCistICAgICAgICByZXR1cm4gRklQU19obWFjX2ZpbmFsKGN0eCwgbWQsIGxlbik7CistI2Vu ZGlmCisgCisgICAgIGlmICghY3R4LT5tZCkKKyAgICAgICAgIGdvdG8gZXJyOworQEAgLTIyNSwx MiArMjE4LDYgQEAgaW50IEhNQUNfQ1RYX2NvcHkoSE1BQ19DVFggKmRjdHgsIEhNQUNfQworIAor IHZvaWQgSE1BQ19DVFhfY2xlYW51cChITUFDX0NUWCAqY3R4KQorIHsKKy0jaWZkZWYgT1BFTlNT TF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpIHsKKy0g ICAgICAgIEZJUFNfaG1hY19jdHhfY2xlYW51cChjdHgpOworLSAgICAgICAgcmV0dXJuOworLSAg ICB9CistI2VuZGlmCisgICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7CisgICAg IEVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5vX2N0eCk7CisgICAgIEVWUF9NRF9DVFhfY2xlYW51 cCgmY3R4LT5tZF9jdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL21kYzIvbWRj MmRnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jLmZpcHMJMjAxNi0wMy0wMSAxNDoz NTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vbWRjMi9tZGMy ZGdzdC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI0OTE2NzA0ICswMTAwCitAQCAtNzYsNyArNzYs NyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgo KGwpPj4yNEwpJjB4ZmYpKQorIAorIHN0YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywg Y29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOworLWZpcHNfbWRfaW5pdChNREMy KQorK25vbmZpcHNfbWRfaW5pdChNREMyKQorIHsKKyAgICAgYy0+bnVtID0gMDsKKyAgICAgYy0+ cGFkX3R5cGUgPSAxOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL21kMi9tZDJfZGdz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL21kMi9tZDJfZGdzdC5jCistLS0gb3BlbnNz bC0xLjAuMmcvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vbWQyL21kMl9kZ3N0LmMJ MjAxNi0wMy0wMSAxNjozMzowNy42MjQ5MTY3MDQgKzAxMDAKK0BAIC02Miw2ICs2MiwxMSBAQAor ICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMg aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisgCisgY29uc3QgY2hhciBNRDJfdmVyc2lvbltdID0gIk1EMiIgT1BFTlNTTF9WRVJT SU9OX1BURVhUOworIAorQEAgLTExOSw3ICsxMjQsNyBAQCBjb25zdCBjaGFyICpNRDJfb3B0aW9u cyh2b2lkKQorICAgICAgICAgcmV0dXJuICgibWQyKGludCkiKTsKKyB9CisgCistZmlwc19tZF9p bml0KE1EMikKKytub25maXBzX21kX2luaXQoTUQyKQorIHsKKyAgICAgYy0+bnVtID0gMDsKKyAg ICAgbWVtc2V0KGMtPnN0YXRlLCAwLCBzaXplb2YgYy0+c3RhdGUpOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L21kNC9tZDRfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL21kNC9tZDRfZGdzdC5j LmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjU5MTY3MjYg KzAxMDAKK0BAIC03Miw3ICs3Miw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXSA9ICJNRDQi IE9QRU5TU0wKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVM CisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorIAorLWZp cHNfbWRfaW5pdChNRDQpCisrbm9uZmlwc19tZF9pbml0KE1ENCkKKyB7CisgICAgIG1lbXNldChj LCAwLCBzaXplb2YoKmMpKTsKKyAgICAgYy0+QSA9IElOSVRfREFUQV9BOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL21kNS9tZDVfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL21kNS9tZDVfZGdz dC5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjU5MTY3 MjYgKzAxMDAKK0BAIC03Miw3ICs3Miw3IEBAIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25bXSA9ICJN RDUiIE9QRU5TU0wKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRj ZmVMCisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAorIAor LWZpcHNfbWRfaW5pdChNRDUpCisrbm9uZmlwc19tZF9pbml0KE1ENSkKKyB7CisgICAgIG1lbXNl dChjLCAwLCBzaXplb2YoKmMpKTsKKyAgICAgYy0+QSA9IElOSVRfREFUQV9BOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL29fZmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L29fZmlwcy5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL29fZmlwcy5jLmZpcHMJMjAxNi0w My0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v b19maXBzLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjU5MTY3MjYgKzAxMDAKK0BAIC04MCw2ICs4 MCw4IEBAIGludCBGSVBTX21vZGVfc2V0KGludCByKQorICMgaWZuZGVmIEZJUFNfQVVUSF9VU0VS X1BBU1MKKyAjICBkZWZpbmUgRklQU19BVVRIX1VTRVJfUEFTUyAgICAgIkRlZmF1bHQgRklQUyBD cnlwdG8gVXNlciBQYXNzd29yZCIKKyAjIGVuZGlmCisrICAgIGlmIChyICYmIEZJUFNfbW9kdWxl X21vZGUoKSkgLyogY2FuIGJlIGltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgYnkgT1BFTlNTTF9pbml0 KCkgKi8KKysgICAgICAgIHJldHVybiAxOworICAgICBpZiAoIUZJUFNfbW9kdWxlX21vZGVfc2V0 KHIsIEZJUFNfQVVUSF9VU0VSX1BBU1MpKQorICAgICAgICAgcmV0dXJuIDA7CisgICAgIGlmIChy KQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL29faW5pdC5j LmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vb19pbml0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjU5MTY3MjYgKzAxMDAK K0BAIC01Niw4ICs1NiwzNyBAQAorICNpbmNsdWRlIDxlX29zLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisgI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ CisrIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyMgaW5jbHVkZSA8ZmNudGwuaD4KKysjIGluY2x1 ZGUgPHVuaXN0ZC5oPgorKyMgaW5jbHVkZSA8ZXJybm8uaD4KKysjIGluY2x1ZGUgPHN0ZGxpYi5o PgorICMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisgIyBpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KKysKKysjIGRlZmluZSBGSVBTX01PREVfU1dJVENIX0ZJTEUgIi9wcm9jL3N5cy9jcnlwdG8v Zmlwc19lbmFibGVkIgorKworK3N0YXRpYyB2b2lkIGluaXRfZmlwc19tb2RlKHZvaWQpCisrewor KyAgICBjaGFyIGJ1ZlsyXSA9ICIwIjsKKysgICAgaW50IGZkOworKworKyAgICBpZiAoZ2V0ZW52 KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9ERSIpICE9IE5VTEwpIHsKKysgICAgICAgIGJ1ZlswXSA9 ICcxJzsKKysgICAgfSBlbHNlIGlmICgoZmQgPSBvcGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwg T19SRE9OTFkpKSA+PSAwKSB7CisrICAgICAgICB3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2Yo YnVmKSkgPCAwICYmIGVycm5vID09IEVJTlRSKSA7CisrICAgICAgICBjbG9zZShmZCk7CisrICAg IH0KKysgICAgLyogRmFpbHVyZSByZWFkaW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVh bnMganVzdCBub3QKKysgICAgICogc3dpdGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBi cmVhayB0b28gbWFueSB0aGluZ3MKKysgICAgICogb3RoZXJ3aXNlLi4KKysgICAgICovCisrCisr ICAgIGlmIChidWZbMF0gPT0gJzEnKSB7CisrICAgICAgICBGSVBTX21vZGVfc2V0KDEpOworKyAg ICB9CisrfQorICNlbmRpZgorIAorIC8qCitAQCAtNjUsMTkgKzk0LDI2IEBACisgICogc2V0cyBG SVBTIGNhbGxiYWNrcworICAqLworIAorLXZvaWQgT1BFTlNTTF9pbml0KHZvaWQpCisrdm9pZCBP UEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKQorIHsKKyAgICAgc3RhdGljIGludCBkb25lID0gMDsK KyAgICAgaWYgKGRvbmUpCisgICAgICAgICByZXR1cm47CisgICAgIGRvbmUgPSAxOworICNpZmRl ZiBPUEVOU1NMX0ZJUFMKKy0gICAgRklQU19zZXRfbG9ja2luZ19jYWxsYmFja3MoQ1JZUFRPX2xv Y2ssIENSWVBUT19hZGRfbG9jayk7CistICAgIEZJUFNfc2V0X2Vycm9yX2NhbGxiYWNrcyhFUlJf cHV0X2Vycm9yLCBFUlJfYWRkX2Vycm9yX3ZkYXRhKTsKKy0gICAgRklQU19zZXRfbWFsbG9jX2Nh bGxiYWNrcyhDUllQVE9fbWFsbG9jLCBDUllQVE9fZnJlZSk7CisgICAgIFJBTkRfaW5pdF9maXBz KCk7CisrICAgIGluaXRfZmlwc19tb2RlKCk7CisrICAgIGlmICghRklQU19tb2RlKCkpIHsKKysg ICAgICAgIC8qIENsZWFuIHVwIHByZW1hdHVyZWx5IHNldCBkZWZhdWx0IHJhbmQgbWV0aG9kICov CisrICAgICAgICBSQU5EX3NldF9yYW5kX21ldGhvZChOVUxMKTsKKysgICAgfQorICNlbmRpZgor ICNpZiAwCisgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FsbGVkIE9QRU5TU0xfaW5pdFxuIik7Cisg I2VuZGlmCisgfQorKworK3ZvaWQgT1BFTlNTTF9pbml0KHZvaWQpCisreworKyAgICBPUEVOU1NM X2luaXRfbGlicmFyeSgpOworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9vcGVu c3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL29wZW5zc2xjb25mLmguaW4K Ky0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzCTIwMTYtMDMt MDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL29w ZW5zc2xjb25mLmguaW4JMjAxNi0wMy0wMSAxNjozMzowNy42MjU5MTY3MjYgKzAxMDAKK0BAIC0x LDUgKzEsMjAgQEAKKyAvKiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLworIAorKyNpZmRlZiBP UEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKysKKysvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUg dGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKKysgKiB0 aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRvIG1ha2VkZXBlbmQuCisrICoKKysgKiBbT3VyICJtYWtl IGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVp bGQgc2V0dGluZ3MKKysgKiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byByZW1v dmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1zLl0KKysgKi8KKysKKysj aWZuZGVmIE9QRU5TU0xfRklQUworKyNkZWZpbmUgT1BFTlNTTF9GSVBTCisrI2VuZGlmCisrCisr I2VuZGlmCisrCisgLyogR2VuZXJhdGUgODAzODYgY29kZT8gKi8KKyAjdW5kZWYgSTM4Nl9PTkxZ CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcyBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDE2LTAzLTAx IDE2OjMzOjA3LjYyNTkxNjcyNiArMDEwMAorQEAgLTM5MSw3ICszOTEsMTAgQEAgaW50IHNzbGVh eV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZgorICAgICBDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORDIpOworICAgICBjcnlwdG9fbG9ja19yYW5kID0gMTsKKyAKKy0gICAgaWYg KCFpbml0aWFsaXplZCkgeworKyAgICAvKiBhbHdheXMgcG9sbCBmb3IgZXh0ZXJuYWwgZW50cm9w eSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJvdmlkZXMgdGhlIAorKyAgICAgKiBleHBhbnNpb24KKysg ICAgICovCisrICAgIGlmICghaW5pdGlhbGl6ZWQgfHwgRklQU19tb2R1bGVfbW9kZSgpKSB7Cisg ICAgICAgICBSQU5EX3BvbGwoKTsKKyAgICAgICAgIGluaXRpYWxpemVkID0gMTsKKyAgICAgfQor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL3JhbmQvcmFuZC5oCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JhbmQv cmFuZC5oLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy4zNjk5MTA5MzMgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vcmFuZC9yYW5kLmgJMjAxNi0wMy0wMSAxNjozMzowNy42MjU5MTY3 MjYgKzAxMDAKK0BAIC0xMzMsMTYgKzEzMywzNCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5n cyh2b2lkKTsKKyAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAor IC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworKyMgZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFO RF9NRVRIT0QgICAgICAgICAgICAgICAgICAxMDgKKysjIGRlZmluZSBSQU5EX0ZfRklQU19SQU5E ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisrIyBkZWZpbmUgUkFORF9GX0ZJ UFNfUkFORF9CWVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMgorKyMgZGVmaW5lIFJB TkRfRl9GSVBTX1JBTkRfU0VUX0RUICAgICAgICAgICAgICAgICAgICAgICAgICAxMDYKKysjIGRl ZmluZSBSQU5EX0ZfRklQU19YOTMxX1NFVF9EVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2 CisrIyBkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX0RUICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEwNAorKyMgZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQgICAgICAgICAgICAg ICAgICAgICAgICAxMDcKKysjIGRlZmluZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFICAgICAg ICAgICAgICAgICAgICAgICAgMTA1CisgIyBkZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVU SE9EICAgICAgICAgICAgICAgICAgICAgIDEwMQorLSMgZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRf RklQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKKysjIGRlZmluZSBSQU5EX0ZfUkFO RF9JTklUX0ZJUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA5CisgIyBkZWZpbmUgUkFO RF9GX1NTTEVBWV9SQU5EX0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAorIAorIC8q IFJlYXNvbiBjb2Rlcy4gKi8KKy0jIGRlZmluZSBSQU5EX1JfRFVBTF9FQ19EUkJHX0RJU0FCTEVE ICAgICAgICAgICAgICAgICAgICAgMTA0CistIyBkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJ U0lOR19EUkJHICAgICAgICAgICAgICAgICAgIDEwMgorLSMgZGVmaW5lIFJBTkRfUl9FUlJPUl9J TlNUQU5USUFUSU5HX0RSQkcgICAgICAgICAgICAgICAgICAxMDMKKy0jIGRlZmluZSBSQU5EX1Jf Tk9fRklQU19SQU5ET01fTUVUSE9EX1NFVCAgICAgICAgICAgICAgICAgMTAxCisrIyBkZWZpbmUg UkFORF9SX0RVQUxfRUNfRFJCR19ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgIDExNAorKyMg ZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyAgICAgICAgICAgICAgICAgICAx MTIKKysjIGRlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHICAgICAgICAgICAg ICAgICAgMTEzCisrIyBkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhPRCAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEwNQorKyMgZGVmaW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFICAgICAg ICAgICAgICAgICAgICAgICAgICAxMDYKKysjIGRlZmluZSBSQU5EX1JfTk9fRklQU19SQU5ET01f TUVUSE9EX1NFVCAgICAgICAgICAgICAgICAgMTExCisrIyBkZWZpbmUgUkFORF9SX05PX0tFWV9T RVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNworKyMgZGVmaW5lIFJBTkRfUl9Q Uk5HX0FTS0lOR19GT1JfVE9PX01VQ0ggICAgICAgICAgICAgICAgICAxMDEKKysjIGRlZmluZSBS QU5EX1JfUFJOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4CisrIyBk ZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw OQorKyMgZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRUtFWUVEICAgICAgICAgICAgICAgICAgICAg ICAgICAxMDIKKysjIGRlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQgICAgICAgICAgICAg ICAgICAgICAgICAgMTAzCisgIyBkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRCAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEwMAorKyMgZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9O T1RfTUFUQ0hfS0VZICAgICAgICAgICAgICAxMTAKKysjIGRlZmluZSBSQU5EX1JfUFJOR19TVFVD SyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA0CisgCisgI2lmZGVmICBfX2NwbHVz cGx1cworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYworLS0tIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6 MDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JpcGVtZC9ybWRf ZGdzdC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI1OTE2NzI2ICswMTAwCitAQCAtNzAsNyArNzAs NyBAQCB2b2lkIHJpcGVtZDE2MF9ibG9ja194ODYoUklQRU1EMTYwX0NUWCAqCisgdm9pZCByaXBl bWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCwgc2l6ZV90IG51 bSk7CisgI2VuZGlmCisgCistZmlwc19tZF9pbml0KFJJUEVNRDE2MCkKKytub25maXBzX21kX2lu aXQoUklQRU1EMTYwKQorIHsKKyAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworICAgICBj LT5BID0gUklQRU1EMTYwX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3Jz YV9jcnB0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKKy0tLSBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1 OjA1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX2Ny cHQuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyNjkxNjc0OSArMDEwMAorQEAgLTg5LDkgKzg5LDkg QEAgaW50IFJTQV9wcml2YXRlX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0CisgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdG8sIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyB7 CisgI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1l dGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCistICAgICAgICAmJiAhKHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKKy0gICAgICAgIFJTQWVycihSU0FfRl9S U0FfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EKTsKKysgICAgaWYg KEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkg eworKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQsCisrICAgICAgICAg ICAgICAgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisgICAgICAg ICByZXR1cm4gLTE7CisgICAgIH0KKyAjZW5kaWYKK0BAIC0xMTUsOSArMTE1LDkgQEAgaW50IFJT QV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgdQorICAgICAgICAgICAgICAgICAgICAg ICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIHsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistICAg IGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01F VEhPRCkKKy0gICAgICAgICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9X KSkgeworLSAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTk9O X0ZJUFNfUlNBX01FVEhPRCk7CisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKKysgICAgICAgIFJTQWVycihSU0FfRl9SU0Ff UFVCTElDX0RFQ1JZUFQsCisrICAgICAgICAgICAgICAgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExP V0VEX0lOX0ZJUFNfTU9ERSk7CisgICAgICAgICByZXR1cm4gLTE7CisgICAgIH0KKyAjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v cnNhL3JzYV9lYXkuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxNi0wMy0wMSAxNjozMzow Ny42MjY5MTY3NDkgKzAxMDAKK0BAIC0xMTQsNiArMTE0LDEwIEBACisgI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgI2lmbmRlZiBSU0FfTlVM TAorIAorQEAgLTE0MCw3ICsxNDQsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5 X21ldGggPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZiBlID09IDMg Ki8KKyAgICAgUlNBX2VheV9pbml0LAorICAgICBSU0FfZWF5X2ZpbmlzaCwKKy0gICAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCisrICAgIFJTQV9GTEFHX0ZJUFNfTUVU SE9ELCAgICAgICAvKiBmbGFncyAqLworICAgICBOVUxMLAorICAgICAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogcnNhX3NpZ24gKi8KKyAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHJzYV92ZXJpZnkgKi8KK0BAIC0xNjAsNiArMTY0LDIyIEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKKyAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVM TDsKKyAgICAgQk5fQ1RYICpjdHggPSBOVUxMOworIAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIGlmIChGSVBTX21vZGUoKSkgeworKyAgICAgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBU LAorKyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysg ICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKKysgICAgICAgICAgICAmJiAoQk5fbnVt X2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysg ICAgICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9Cisr ICAgIH0KKysjIGVuZGlmCisrCisgICAgIGlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNT TF9SU0FfTUFYX01PRFVMVVNfQklUUykgeworICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlf UFVCTElDX0VOQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKKyAgICAgICAgIHJldHVy biAtMTsKK0BAIC0zNjEsNiArMzgxLDIyIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2Vu Y3J5cHQoaW50IGYKKyAgICAgQklHTlVNICp1bmJsaW5kID0gTlVMTDsKKyAgICAgQk5fQkxJTkRJ TkcgKmJsaW5kaW5nID0gTlVMTDsKKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAo RklQU19tb2RlKCkpIHsKKysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Cisr ICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsCisrICAg ICAgICAgICAgICAgICAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAg ICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghKHJzYS0+ZmxhZ3Mg JiBSU0FfRkxBR19OT05fRklQU19BTExPVykKKysgICAgICAgICAgICAmJiAoQk5fbnVtX2JpdHMo cnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAg ICAgICBSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9 CisrIyBlbmRpZgorKworICAgICBpZiAoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKKyAg ICAgICAgIGdvdG8gZXJyOworICAgICBCTl9DVFhfc3RhcnQoY3R4KTsKK0BAIC00OTcsNiArNTMz LDIyIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKKyAgICAgQklH TlVNICp1bmJsaW5kID0gTlVMTDsKKyAgICAgQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsK KyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkpIHsKKysgICAg ICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAgICAgICAgICAgRklQU2VycihG SVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsCisrICAgICAgICAgICAgICAgICAgICBGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAg ICAgIH0KKysKKysgICAgICAgIGlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykKKysgICAgICAgICAgICAmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAgICAgICBSU0FlcnIoUlNBX0ZfUlNB X0VBWV9QUklWQVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAgICAg ICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrIyBlbmRpZgorKworICAgICBp ZiAoKGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKKyAgICAgICAgIGdvdG8gZXJyOworICAg ICBCTl9DVFhfc3RhcnQoY3R4KTsKK0BAIC02MjMsNiArNjc1LDIyIEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKKyAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVM TDsKKyAgICAgQk5fQ1RYICpjdHggPSBOVUxMOworIAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIGlmIChGSVBTX21vZGUoKSkgeworKyAgICAgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVk KCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBU LAorKyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysg ICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKKysgICAgICAgICAgICAmJiAoQk5fbnVt X2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysg ICAgICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwgUlNBX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9Cisr ICAgIH0KKysjIGVuZGlmCisrCisgICAgIGlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNT TF9SU0FfTUFYX01PRFVMVVNfQklUUykgeworICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlf UFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKKyAgICAgICAgIHJldHVy biAtMTsKK0BAIC04ODYsNiArOTU0LDkgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklH TlVNICpyMCwgYworIAorIHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQorIHsKKysj IGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrIyBlbmRp ZgorICAgICByc2EtPmZsYWdzIHw9IFJTQV9GTEFHX0NBQ0hFX1BVQkxJQyB8IFJTQV9GTEFHX0NB Q0hFX1BSSVZBVEU7CisgICAgIHJldHVybiAoMSk7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3Jz YV9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAx Ni0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vcnNhL3JzYV9lcnIuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyNjkxNjc0OSArMDEwMAorQEAg LTEzNiw2ICsxMzYsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfZnVuY3RzW10K KyAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQVCksICJSU0FfcHVibGljX2Vu Y3J5cHQifSwKKyAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJfREVDT0RFKSwgIlJTQV9QVUJf REVDT0RFIn0sCisgICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLCAiUlNB X3NldHVwX2JsaW5kaW5nIn0sCisrICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX0RFRkFVTFRf TUVUSE9EKSwgIlJTQV9zZXRfZGVmYXVsdF9tZXRob2QifSwKKysgICAge0VSUl9GVU5DKFJTQV9G X1JTQV9TRVRfTUVUSE9EKSwgIlJTQV9zZXRfbWV0aG9kIn0sCisgICAgIHtFUlJfRlVOQyhSU0Ff Rl9SU0FfU0lHTiksICJSU0Ffc2lnbiJ9LAorICAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR05f QVNOMV9PQ1RFVF9TVFJJTkcpLAorICAgICAgIlJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HIn0s CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRv L3JzYS9yc2FfZ2VuLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX2dlbi5jCTIwMTYtMDMtMDEgMTY6MzM6 MDcuNjI2OTE2NzQ5ICswMTAwCitAQCAtNjksOCArNjksODAgQEAKKyAjaW5jbHVkZSA8b3BlbnNz bC9yc2EuaD4KKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisgIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKy1leHRlcm4gaW50IEZJUFNfcnNhX3g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBp bnQgYml0cywgQklHTlVNICplLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQk5fR0VOQ0IgKmNiKTsKKysjIGluY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrIyBpbmNs dWRlIDxvcGVuc3NsL2V2cC5oPgorKworK3N0YXRpYyBpbnQgZmlwc19yc2FfcGFpcndpc2VfZmFp bCA9IDA7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKQorK3sKKysgICAg Zmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7CisrfQorKworK2ludCBmaXBzX2NoZWNrX3JzYShS U0EgKnJzYSkKKyt7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgdGJzW10gPSAiUlNBIFBhaXJ3 aXNlIENoZWNrIERhdGEiOworKyAgICB1bnNpZ25lZCBjaGFyICpjdGJ1ZiA9IE5VTEwsICpwdGJ1 ZiA9IE5VTEw7CisrICAgIGludCBsZW4sIHJldCA9IDA7CisrICAgIEVWUF9QS0VZICpwazsKKysK KysgICAgaWYgKChwayA9IEVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKyAgICAgICAgZ290byBl cnI7CisrCisrICAgIEVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOworKworKyAgICAvKiBQZXJm b3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCisrICAgIGlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCAwLCBFVlBfc2hhMSgpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLCBOVUxMKQorKyAgICAgICAg fHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwgTlVMTCwgMCwgRVZQX3No YTEoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9G TEFHX1BBRF9YOTMxLCBOVUxMKQorKyAgICAgICAgfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywgdGJzLCAtMSwgTlVMTCwgMCwgRVZQX3NoYTEoKSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsIE5VTEwpKQorKyAgICAg ICAgZ290byBlcnI7CisrICAgIC8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IGVu Y3J5cHQvZGVjcnlwdCB0ZXN0ICovCisrICAgIGN0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3Np emUocnNhKSk7CisrICAgIGlmICghY3RidWYpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAg bGVuID0KKysgICAgICAgIFJTQV9wdWJsaWNfZW5jcnlwdChzaXplb2YodGJzKSAtIDEsIHRicywg Y3RidWYsIHJzYSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFERElO Ryk7CisrICAgIGlmIChsZW4gPD0gMCkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICAvKiBDaGVj ayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCisrICAgIGlmICgobGVuID09 IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCisrICAgICAg ICBnb3RvIGVycjsKKysgICAgcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsK KysKKysgICAgaWYgKCFwdGJ1ZikKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBsZW4gPSBSU0Ff cHJpdmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5H KTsKKysgICAgaWYgKGxlbiAhPSAoc2l6ZW9mKHRicykgLSAxKSkKKysgICAgICAgIGdvdG8gZXJy OworKyAgICBpZiAobWVtY21wKHB0YnVmLCB0YnMsIGxlbikpCisrICAgICAgICBnb3RvIGVycjsK KysKKysgICAgcmV0ID0gMTsKKysKKysgICAgaWYgKCFwdGJ1ZikKKysgICAgICAgIGdvdG8gZXJy OworKworKyBlcnI6CisrICAgIGlmIChyZXQgPT0gMCkgeworKyAgICAgICAgZmlwc19zZXRfc2Vs ZnRlc3RfZmFpbCgpOworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19SU0EsIEZJ UFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrICAgIH0KKysKKysgICAgaWYgKGN0YnVmKQor KyAgICAgICAgT1BFTlNTTF9mcmVlKGN0YnVmKTsKKysgICAgaWYgKHB0YnVmKQorKyAgICAgICAg T1BFTlNTTF9mcmVlKHB0YnVmKTsKKysgICAgaWYgKHBrKQorKyAgICAgICAgRVZQX1BLRVlfZnJl ZShwayk7CisrCisrICAgIHJldHVybiByZXQ7CisrfQorICNlbmRpZgorIAorIHN0YXRpYyBpbnQg cnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLAor QEAgLTg2LDcgKzE1OCw3IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNh LAorIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICpl X3ZhbHVlLCBCTl9HRU5DQiAqY2IpCisgeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgaWYg KEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9E KQorKyAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJT QV9GTEFHX0ZJUFNfTUVUSE9EKQorICAgICAgICAgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9OX0ZJUFNfQUxMT1cpKSB7CisgICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX0dFTkVSQVRFX0tF WV9FWCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisgICAgICAgICByZXR1cm4gMDsKK0BA IC05NCwxMCArMTY2LDYgQEAgaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBi aQorICNlbmRpZgorICAgICBpZiAocnNhLT5tZXRoLT5yc2Ffa2V5Z2VuKQorICAgICAgICAgcmV0 dXJuIHJzYS0+bWV0aC0+cnNhX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0jaWZk ZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSkKKy0gICAgICAgIHJldHVybiBG SVBTX3JzYV94OTMxX2dlbmVyYXRlX2tleV9leChyc2EsIGJpdHMsIGVfdmFsdWUsIGNiKTsKKy0j ZW5kaWYKKyAgICAgcmV0dXJuIHJzYV9idWlsdGluX2tleWdlbihyc2EsIGJpdHMsIGVfdmFsdWUs IGNiKTsKKyB9CisgCitAQCAtMTEwLDYgKzE3OCwyMCBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGlu X2tleWdlbihSU0EgKnJzYSwKKyAgICAgaW50IGJpdHNwLCBiaXRzcSwgb2sgPSAtMSwgbiA9IDA7 CisgICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAg IGlmIChGSVBTX21vZHVsZV9tb2RlKCkpIHsKKysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VO LCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgICAgIHJldHVybiAwOwor KyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9SU0FfQlVJTFRJTl9L RVlHRU4sIEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysg ICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorKworICAgICBjdHggPSBCTl9DVFhfbmV3KCk7Cisg ICAgIGlmIChjdHggPT0gTlVMTCkKKyAgICAgICAgIGdvdG8gZXJyOworQEAgLTIzNSw2ICszMTcs MTYgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgICAgIGlmICgh Qk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLCByc2EtPnEsIHAsIGN0eCkpCisgICAgICAgICBnb3Rv IGVycjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZHVsZV9tb2Rl KCkpIHsKKysgICAgICAgIGlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQorKyAgICAgICAgICAg IEJOX2FkZF93b3JkKHJzYS0+biwgMSk7CisrCisrICAgICAgICBpZiAoIWZpcHNfY2hlY2tfcnNh KHJzYSkpCisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAg b2sgPSAxOworICBlcnI6CisgICAgIGlmIChvayA9PSAtMSkgeworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL3JzYS9yc2EuaC5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNh LmgKKy0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJMjAxNi0wMy0wMSAx NjozMzowNy41MDg5MTQwNzkgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3Jz YS5oCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI2OTE2NzQ5ICswMTAwCitAQCAtMTY4LDYgKzE2OCw4 IEBAIHN0cnVjdCByc2Ffc3QgeworICMgIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19C SVRTICAgMTYzODQKKyAjIGVuZGlmCisgCisrIyBkZWZpbmUgT1BFTlNTTF9SU0FfRklQU19NSU5f TU9EVUxVU19CSVRTIDEwMjQKKysKKyAjIGlmbmRlZiBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVT X0JJVFMKKyAjICBkZWZpbmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTIDMwNzIKKyAj IGVuZGlmCitAQCAtMzI5LDYgKzMzMSwxMyBAQCBSU0EgKlJTQV9nZW5lcmF0ZV9rZXkoaW50IGJp dHMsIHVuc2lnbmVkCisgCisgLyogTmV3IHZlcnNpb24gKi8KKyBpbnQgUlNBX2dlbmVyYXRlX2tl eV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKytpbnQg UlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdO VU0gKnExLAorKyAgICAgICAgICAgICAgICAgICAgICAgQklHTlVNICpxMiwgY29uc3QgQklHTlVN ICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcTEsCisrICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBCSUdOVU0gKlhxMiwgY29uc3QgQklHTlVNICpYcSwKKysgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZ2VuZXJh dGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKTsKKyAKKyBpbnQgUlNBX2NoZWNrX2tl eShjb25zdCBSU0EgKik7CisgICAgICAgICAvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVycm9yICov CitAQCAtNTM4LDcgKzU0Nyw3IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Cisg IyBkZWZpbmUgUlNBX0ZfUlNBX0FMR09SX1RPX01EICAgICAgICAgICAgICAgICAgICAgICAgICAg IDE1NworICMgZGVmaW5lIFJTQV9GX1JTQV9CVUlMVElOX0tFWUdFTiAgICAgICAgICAgICAgICAg ICAgICAgICAxMjkKKyAjIGRlZmluZSBSU0FfRl9SU0FfQ0hFQ0tfS0VZICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTIzCistIyBkZWZpbmUgUlNBX0ZfUlNBX0NNU19ERUNSWVBUICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDE1OAorKyMgZGVmaW5lIFJTQV9GX1JTQV9DTVNfREVDUllQ VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTgKKyAjIGRlZmluZSBSU0FfRl9SU0FfRUFZ X1BSSVZBVEVfREVDUllQVCAgICAgICAgICAgICAgICAgICAgMTAxCisgIyBkZWZpbmUgUlNBX0Zf UlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgIDEwMgorICMgZGVmaW5l IFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAxMDMKK0BA IC01NTksNyArNTY4LDcgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAjIGRl ZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfT0FFUCAgICAgICAgICAgICAgICAgMTIx CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX09BRVBfTUdGMSAgICAgICAg ICAgIDE2MAorICMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1MgICAgICAg ICAgICAgICAgICAxMjUKKy0jIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNT X01HRjEgICAgICAgICAgICAgMTQ4CisrIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BL Q1MxX1BTU19NR0YxICAgICAgICAgICAgIDE1OAorICMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5H X0FERF9QS0NTMV9UWVBFXzEgICAgICAgICAgICAgICAxMDgKKyAjIGRlZmluZSBSU0FfRl9SU0Ff UEFERElOR19BRERfUEtDUzFfVFlQRV8yICAgICAgICAgICAgICAgMTA5CisgIyBkZWZpbmUgUlNB X0ZfUlNBX1BBRERJTkdfQUREX1NTTFYyMyAgICAgICAgICAgICAgICAgICAgIDExMAorQEAgLTU3 MywyMSArNTgyLDIzIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgIyBkZWZp bmUgUlNBX0ZfUlNBX1BBRERJTkdfQ0hFQ0tfWDkzMSAgICAgICAgICAgICAgICAgICAgIDEyOAor ICMgZGVmaW5lIFJTQV9GX1JTQV9QUklOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMTUKKyAjIGRlZmluZSBSU0FfRl9SU0FfUFJJTlRfRlAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTE2CistIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVCAgICAgICAg ICAgICAgICAgICAgICAgIDE1MAorLSMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQg ICAgICAgICAgICAgICAgICAgICAgICAxNTEKKysjIGRlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9E RUNSWVBUICAgICAgICAgICAgICAgICAgICAgICAgMTU3CisrIyBkZWZpbmUgUlNBX0ZfUlNBX1BS SVZBVEVfRU5DUllQVCAgICAgICAgICAgICAgICAgICAgICAgIDE0OAorICMgZGVmaW5lIFJTQV9G X1JTQV9QUklWX0RFQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzcKKyAjIGRlZmlu ZSBSU0FfRl9SU0FfUFJJVl9FTkNPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM4Cisg IyBkZWZpbmUgUlNBX0ZfUlNBX1BTU19UT19DVFggICAgICAgICAgICAgICAgICAgICAgICAgICAg IDE2MgorLSMgZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCAgICAgICAgICAgICAgICAg ICAgICAgICAxNTIKKysjIGRlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQgICAgICAgICAg ICAgICAgICAgICAgICAgMTQ5CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19FTkNSWVBUICAg ICAgICAgICAgICAgICAgICAgICAgIDE1MworICMgZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RF ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzkKKyAjIGRlZmluZSBSU0FfRl9SU0FfU0VU VVBfQkxJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgMTM2CisrIyBkZWZpbmUgUlNBX0Zf UlNBX1NFVF9ERUZBVUxUX01FVEhPRCAgICAgICAgICAgICAgICAgICAgIDE1MAorKyMgZGVmaW5l IFJTQV9GX1JTQV9TRVRfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTEKKyAj IGRlZmluZSBSU0FfRl9SU0FfU0lHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MTE3CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcgICAgICAgICAg ICAgICAgIDExOAorICMgZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMTkKKyAjIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZX0FTTjFfT0NURVRf U1RSSU5HICAgICAgICAgICAgICAgMTIwCisgIyBkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NT MV9QU1MgICAgICAgICAgICAgICAgICAgICAgIDEyNgorLSMgZGVmaW5lIFJTQV9GX1JTQV9WRVJJ RllfUEtDUzFfUFNTX01HRjEgICAgICAgICAgICAgICAgICAxNDkKKysjIGRlZmluZSBSU0FfRl9S U0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxICAgICAgICAgICAgICAgICAgMTUyCisgCisgLyogUmVh c29uIGNvZGVzLiAqLworICMgZGVmaW5lIFJTQV9SX0FMR09SSVRITV9NSVNNQVRDSCAgICAgICAg ICAgICAgICAgICAgICAgICAxMDAKK0BAIC02MjAsMjEgKzYzMSwyMiBAQCB2b2lkIEVSUl9sb2Fk X1JTQV9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfT0FFUF9QQVJBTUVU RVJTICAgICAgICAgICAgICAgICAgICAxNjIKKyAjIGRlZmluZSBSU0FfUl9JTlZBTElEX1BBRERJ TkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM4CisgIyBkZWZpbmUgUlNBX1JfSU5WQUxJ RF9QQURESU5HX01PREUgICAgICAgICAgICAgICAgICAgICAgIDE0MQorLSMgZGVmaW5lIFJTQV9S X0lOVkFMSURfUFNTX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAxNDkKKysjIGRlZmlu ZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTICAgICAgICAgICAgICAgICAgICAgMTU3Cisg IyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfU0FMVExFTiAgICAgICAgICAgICAgICAgICAgICAg IDE0NgorLSMgZGVmaW5lIFJTQV9SX0lOVkFMSURfU0FMVF9MRU5HVEggICAgICAgICAgICAgICAg ICAgICAgICAxNTAKKysjIGRlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RIICAgICAgICAg ICAgICAgICAgICAgICAgMTU4CisgIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9UUkFJTEVSICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEzOQorICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfWDkzMV9E SUdFU1QgICAgICAgICAgICAgICAgICAgICAgICAxNDIKKyAjIGRlZmluZSBSU0FfUl9JUU1QX05P VF9JTlZFUlNFX09GX1EgICAgICAgICAgICAgICAgICAgICAgMTI2CisgIyBkZWZpbmUgUlNBX1Jf S0VZX1NJWkVfVE9PX1NNQUxMICAgICAgICAgICAgICAgICAgICAgICAgIDEyMAorICMgZGVmaW5l IFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAxMzQKKyAj IGRlZmluZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSAgICAgICAgICAgICAgICAgICAgICAgICAg MTA1CistIyBkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCAgICAgICAgICAgICAgICAg ICAgICAgIDE1NworKyMgZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QgICAgICAgICAg ICAgICAgICAgICAgICAxNDkKKysjIGRlZmluZSBSU0FfUl9OT05fRklQU19NRVRIT0QgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTQ5CisgIyBkZWZpbmUgUlNBX1JfTk9fUFVCTElDX0VYUE9O RU5UICAgICAgICAgICAgICAgICAgICAgICAgIDE0MAorICMgZGVmaW5lIFJTQV9SX05VTExfQkVG T1JFX0JMT0NLX01JU1NJTkcgICAgICAgICAgICAgICAgICAxMTMKKyAjIGRlZmluZSBSU0FfUl9O X0RPRVNfTk9UX0VRVUFMX1BfUSAgICAgICAgICAgICAgICAgICAgICAgMTI3CisgIyBkZWZpbmUg UlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgIDEyMQorLSMg ZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUgICAgICAgICAx NTgKKysjIGRlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFICAg ICAgICAgMTUwCisgIyBkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RI SVNfS0VZVFlQRSAgIDE0OAorICMgZGVmaW5lIFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVEICAg ICAgICAgICAgICAgICAgICAgICAxMTQKKyAjIGRlZmluZSBSU0FfUl9QS0NTX0RFQ09ESU5HX0VS Uk9SICAgICAgICAgICAgICAgICAgICAgICAgMTU5CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vcnNhL3JzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX2xp Yi5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwkyMDE2LTAz LTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9y c2EvcnNhX2xpYi5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI3OTE2NzcyICswMTAwCitAQCAtODQs MjMgKzg0LDIyIEBAIFJTQSAqUlNBX25ldyh2b2lkKQorIAorIHZvaWQgUlNBX3NldF9kZWZhdWx0 X21ldGhvZChjb25zdCBSU0FfTUVUSE9EICptZXRoKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19N RVRIT0QpKSB7CisrICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwg UlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyNlbmRp ZgorICAgICBkZWZhdWx0X1JTQV9tZXRoID0gbWV0aDsKKyB9CisgCisgY29uc3QgUlNBX01FVEhP RCAqUlNBX2dldF9kZWZhdWx0X21ldGhvZCh2b2lkKQorIHsKKyAgICAgaWYgKGRlZmF1bHRfUlNB X21ldGggPT0gTlVMTCkgeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgICAgIGlmIChGSVBT X21vZGUoKSkKKy0gICAgICAgICAgICByZXR1cm4gRklQU19yc2FfcGtjczFfc3NsZWF5KCk7Cist ICAgICAgICBlbHNlCistICAgICAgICAgICAgcmV0dXJuIFJTQV9QS0NTMV9TU0xlYXkoKTsKKy0j ZWxzZQorLSMgaWZkZWYgUlNBX05VTEwKKysjaWZkZWYgUlNBX05VTEwKKyAgICAgICAgIGRlZmF1 bHRfUlNBX21ldGggPSBSU0FfbnVsbF9tZXRob2QoKTsKKy0jIGVsc2UKKysjZWxzZQorICAgICAg ICAgZGVmYXVsdF9SU0FfbWV0aCA9IFJTQV9QS0NTMV9TU0xlYXkoKTsKKy0jIGVuZGlmCisgI2Vu ZGlmCisgICAgIH0KKyAKK0BAIC0xMTksNiArMTE4LDEyIEBAIGludCBSU0Ffc2V0X21ldGhvZChS U0EgKnJzYSwgY29uc3QgUlNBX00KKyAgICAgICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBp dCBjb21lcyBmcm9tLgorICAgICAgKi8KKyAgICAgY29uc3QgUlNBX01FVEhPRCAqbXRtcDsKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdz ICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKSB7CisrICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1NF VF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrICAgICAgICByZXR1cm4gMDsKKysg ICAgfQorKyNlbmRpZgorICAgICBtdG1wID0gcnNhLT5tZXRoOworICAgICBpZiAobXRtcC0+Zmlu aXNoKQorICAgICAgICAgbXRtcC0+ZmluaXNoKHJzYSk7CitAQCAtMTY1LDYgKzE3MCwxNyBAQCBS U0EgKlJTQV9uZXdfbWV0aG9kKEVOR0lORSAqZW5naW5lKQorICAgICAgICAgfQorICAgICB9Cisg I2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShy ZXQtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKSB7CisrICAgICAgICBSU0Fl cnIoUlNBX0ZfUlNBX05FV19NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7CisrIyBpZm5k ZWYgT1BFTlNTTF9OT19FTkdJTkUKKysgICAgICAgIGlmIChyZXQtPmVuZ2luZSkKKysgICAgICAg ICAgICBFTkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKKysjIGVuZGlmCisrICAgICAgICBPUEVO U1NMX2ZyZWUocmV0KTsKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrI2VuZGlmCisg CisgICAgIHJldC0+cGFkID0gMDsKKyAgICAgcmV0LT52ZXJzaW9uID0gMDsKK0BAIC0xODMsNyAr MTk5LDcgQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKyAgICAgcmV0LT5i bGluZGluZyA9IE5VTEw7CisgICAgIHJldC0+bXRfYmxpbmRpbmcgPSBOVUxMOworICAgICByZXQt PmJpZ251bV9kYXRhID0gTlVMTDsKKy0gICAgcmV0LT5mbGFncyA9IHJldC0+bWV0aC0+ZmxhZ3Mg JiB+UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1c7CisrICAgIHJldC0+ZmxhZ3MgPSByZXQtPm1ldGgt PmZsYWdzOworICAgICBpZiAoIUNSWVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfUlNB LCByZXQsICZyZXQtPmV4X2RhdGEpKSB7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorICAg ICAgICAgaWYgKHJldC0+ZW5naW5lKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3Jz YS9yc2FfcG1ldGguYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMK Ky0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jLmZpcHMJMjAxNi0wMy0w MSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNh L3JzYV9wbWV0aC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI3OTE2NzcyICswMTAwCitAQCAtMjI4 LDIwICsyMjgsNiBAQCBzdGF0aWMgaW50IHBrZXlfcnNhX3NpZ24oRVZQX1BLRVlfQ1RYICpjCisg ICAgICAgICAgICAgUlNBZXJyKFJTQV9GX1BLRVlfUlNBX1NJR04sIFJTQV9SX0lOVkFMSURfRElH RVNUX0xFTkdUSCk7CisgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgfQorLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKKy0gICAgICAgIGlmIChyZXQgPiAwKSB7CistICAgICAgICAgICAgdW5z aWduZWQgaW50IHNsZW47CistICAgICAgICAgICAgcmV0ID0gRklQU19yc2Ffc2lnbl9kaWdlc3Qo cnNhLCB0YnMsIHRic2xlbiwgcmN0eC0+bWQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmN0eC0+cGFkX21vZGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmN0eC0+c2FsdGxlbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByY3R4LT5tZ2YxbWQsIHNpZywgJnNsZW4pOworLSAgICAgICAgICAgIGlmIChy ZXQgPiAwKQorLSAgICAgICAgICAgICAgICAqc2lnbGVuID0gc2xlbjsKKy0gICAgICAgICAgICBl bHNlCistICAgICAgICAgICAgICAgICpzaWdsZW4gPSAwOworLSAgICAgICAgICAgIHJldHVybiBy ZXQ7CistICAgICAgICB9CistI2VuZGlmCisgCisgICAgICAgICBpZiAoRVZQX01EX3R5cGUocmN0 eC0+bWQpID09IE5JRF9tZGMyKSB7CisgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNsdG1wOwor QEAgLTM1OSwxNyArMzQ1LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV92ZXJpZnkoRVZQX1BLRVlf Q1RYCisgICAgIH0KKyAjZW5kaWYKKyAgICAgaWYgKHJjdHgtPm1kKSB7CistI2lmZGVmIE9QRU5T U0xfRklQUworLSAgICAgICAgaWYgKHJ2ID4gMCkgeworLSAgICAgICAgICAgIHJldHVybiBGSVBT X3JzYV92ZXJpZnlfZGlnZXN0KHJzYSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0YnMsIHRic2xlbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByY3R4LT5tZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByY3R4LT5wYWRfbW9kZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByY3R4LT5zYWx0bGVuLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJjdHgtPm1nZjFtZCwgc2lnLCBzaWdsZW4pOworLQorLSAgICAgICAgfQor LSNlbmRpZgorICAgICAgICAgaWYgKHJjdHgtPnBhZF9tb2RlID09IFJTQV9QS0NTMV9QQURESU5H KQorICAgICAgICAgICAgIHJldHVybiBSU0FfdmVyaWZ5KEVWUF9NRF90eXBlKHJjdHgtPm1kKSwg dGJzLCB0YnNsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnLCBzaWdsZW4s IHJzYSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlw cyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMC4y Zy9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDE2LTAz LTAxIDE2OjMzOjA3LjYyNzkxNjc3MiArMDEwMAorQEAgLTEzMiw3ICsxMzIsMTAgQEAgaW50IFJT QV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaAorICAgICAgICAgaTJkX1g1MDlfU0lH KCZzaWcsICZwKTsKKyAgICAgICAgIHMgPSB0bXBzOworICAgICB9CistICAgIGkgPSBSU0FfcHJp dmF0ZV9lbmNyeXB0KGksIHMsIHNpZ3JldCwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrICAg IC8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxv Y2tpbmcgKi8KKysgICAgaSA9IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jID8gcnNhLT5tZXRoLT5y c2FfcHJpdl9lbmMoaSwgcywgc2lncmV0LCByc2EsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTQV9QS0NTMV9QQURESU5HKSA6Cisr ICAgICAgICAwOworICAgICBpZiAoaSA8PSAwKQorICAgICAgICAgcmV0ID0gMDsKKyAgICAgZWxz ZQorQEAgLTE4OCw4ICsxOTEsMTAgQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29u c3QgdW5zaQorICAgICB9CisgCisgICAgIGlmICgoZHR5cGUgPT0gTklEX21kNV9zaGExKSAmJiBy bSkgeworLSAgICAgICAgaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnYnVmLCBybSwgcnNhLCBSU0FfUEtDUzFfUEFE RElORyk7CisrICAgICAgICBpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+ cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnYnVmLCBybSwgcnNhLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTQV9Q S0NTMV9QQURESU5HKQorKyAgICAgICAgICAgIDogMDsKKyAgICAgICAgIGlmIChpIDw9IDApCisg ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAqcHJtX2xlbiA9IGk7CitAQCAtMjA1LDcg KzIxMCwxMSBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCisgICAg ICAgICBSU0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksIFJTQV9SX0lOVkFMSURfTUVTU0FHRV9M RU5HVEgpOworICAgICAgICAgZ290byBlcnI7CisgICAgIH0KKy0gICAgaSA9IFJTQV9wdWJsaWNf ZGVjcnlwdCgoaW50KXNpZ2xlbiwgc2lnYnVmLCBzLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsK KysgICAgLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQ UyBibG9ja2luZyAqLworKyAgICBpID0gcnNhLT5tZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0 aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sIHNpZ2J1ZiwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsIHJzYSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTQV9QS0NTMV9Q QURESU5HKSA6CisrICAgICAgICAwOworIAorICAgICBpZiAoaSA8PSAwKQorICAgICAgICAgZ290 byBlcnI7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL3NoYS9zaGEuaAorLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9z aGEvc2hhLmguZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjI4NzkwOTA3NyArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9zaGEvc2hhLmgJMjAxNi0wMy0wMSAxNjozMzowNy42Mjc5MTY3 NzIgKzAxMDAKK0BAIC0xMDUsOSArMTA1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBc3RhdGVfc3Qg eworIH0gU0hBX0NUWDsKKyAKKyAjIGlmbmRlZiBPUEVOU1NMX05PX1NIQTAKKy0jICBpZmRlZiBP UEVOU1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9TSEFfSW5pdChTSEFfQ1RYICpjKTsKKy0jICBlbmRp ZgorIGludCBTSEFfSW5pdChTSEFfQ1RYICpjKTsKKyBpbnQgU0hBX1VwZGF0ZShTSEFfQ1RYICpj LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBX0ZpbmFsKHVuc2lnbmVk IGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK0BAIC0xMTUsOSArMTEyLDYgQEAgdW5zaWduZWQgY2hh ciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNoYXIgKgorIHZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RY ICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyAjIGVuZGlmCisgIyBpZm5kZWYgT1BF TlNTTF9OT19TSEExCistIyAgaWZkZWYgT1BFTlNTTF9GSVBTCistaW50IHByaXZhdGVfU0hBMV9J bml0KFNIQV9DVFggKmMpOworLSMgIGVuZGlmCisgaW50IFNIQTFfSW5pdChTSEFfQ1RYICpjKTsK KyBpbnQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxl bik7CisgaW50IFNIQTFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOworQEAg LTEzOSwxMCArMTMzLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBMjU2c3RhdGVfc3QgeworIH0gU0hB MjU2X0NUWDsKKyAKKyAjIGlmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgorLSMgIGlmZGVmIE9QRU5T U0xfRklQUworLWludCBwcml2YXRlX1NIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworLWludCBw cml2YXRlX1NIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmMpOworLSMgIGVuZGlmCisgaW50IFNIQTIy NF9Jbml0KFNIQTI1Nl9DVFggKmMpOworIGludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9DVFggKmMs IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBTSEEyMjRfRmluYWwodW5zaWdu ZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOworQEAgLTE5MiwxMCArMTgyLDYgQEAgdHlwZWRl ZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3QgeworICMgZW5kaWYKKyAKKyAjIGlmbmRlZiBPUEVOU1NM X05PX1NIQTUxMgorLSMgIGlmZGVmIE9QRU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTM4NF9J bml0KFNIQTUxMl9DVFggKmMpOworLWludCBwcml2YXRlX1NIQTUxMl9Jbml0KFNIQTUxMl9DVFgg KmMpOworLSMgIGVuZGlmCisgaW50IFNIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOworIGludCBT SEEzODRfVXBkYXRlKFNIQTUxMl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4p OworIGludCBTSEEzODRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTUxMl9DVFggKmMpOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRv L3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy4yODk5MDkxMjIgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vc2hhL3NoYV9sb2NsLmgJMjAxNi0wMy0wMSAxNjoz MzowNy42Mjc5MTY3NzIgKzAxMDAKK0BAIC0xMjMsMTEgKzEyMywxNCBAQCB2b2lkIHNoYTFfYmxv Y2tfZGF0YV9vcmRlcihTSEFfQ1RYICpjLCBjCisgI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2Qy ZTFmMFVMCisgCisgI2lmZGVmIFNIQV8wCistZmlwc19tZF9pbml0KFNIQSkKKytub25maXBzX21k X2luaXQoU0hBKQorICNlbHNlCisgZmlwc19tZF9pbml0X2N0eChTSEExLCBTSEEpCisgI2VuZGlm CisgeworKyNpZiBkZWZpbmVkKFNIQV8xKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKysgICAg RklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorICAgICBtZW1zZXQoYywgMCwgc2l6ZW9m KCpjKSk7CisgICAgIGMtPmgwID0gSU5JVF9EQVRBX2gwOworICAgICBjLT5oMSA9IElOSVRfREFU QV9oMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vc2hhL3NoYTI1Ni5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3NoYS9zaGEyNTYuYwkyMDE2LTAzLTAxIDE2OjMz OjA3LjYyNzkxNjc3MiArMDEwMAorQEAgLTEyLDEyICsxMiwxOSBAQAorIAorICMgaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KKyAjIGluY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrIyBpZmRlZiBP UEVOU1NMX0ZJUFMKKysjICBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjIGVuZGlmCisrCisg IyBpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgCisgY29uc3QgY2hhciBTSEEyNTZfdmVy c2lvbltdID0gIlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKKyBmaXBzX21kX2lu aXRfY3R4KFNIQTIyNCwgU0hBMjU2KQorIHsKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrIyBlbmRpZgorICAgICBtZW1zZXQoYywgMCwgc2l6ZW9m KCpjKSk7CisgICAgIGMtPmhbMF0gPSAweGMxMDU5ZWQ4VUw7CisgICAgIGMtPmhbMV0gPSAweDM2 N2NkNTA3VUw7CitAQCAtMzMsNiArNDAsOSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTIyNCwgU0hB MjU2KQorIAorIGZpcHNfbWRfaW5pdChTSEEyNTYpCisgeworKyMgaWZkZWYgT1BFTlNTTF9GSVBT CisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjIGVuZGlmCisgICAgIG1lbXNldChjLCAw LCBzaXplb2YoKmMpKTsKKyAgICAgYy0+aFswXSA9IDB4NmEwOWU2NjdVTDsKKyAgICAgYy0+aFsx XSA9IDB4YmI2N2FlODVVTDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9zaGEvc2hh NTEyLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vc2hhL3NoYTUxMi5jCistLS0gb3BlbnNz bC0xLjAuMmcvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3NoYS9zaGE1MTIuYwkyMDE2 LTAzLTAxIDE2OjMzOjA3LjYyNzkxNjc3MiArMDEwMAorQEAgLTUsNiArNSwxMCBAQAorICAqID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisgICovCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysK KyAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hB NTEyKQorIC8qLQorICAqIElNUExFTUVOVEFUSU9OIE5PVEVTLgorQEAgLTYyLDYgKzY2LDkgQEAg Y29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltdID0gIlNIQS01MTIiCisgCisgZmlwc19tZF9pbml0 X2N0eChTSEEzODQsIFNIQTUxMikKKyB7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQ U19zZWxmdGVzdF9jaGVjaygpOworKyMgZW5kaWYKKyAgICAgYy0+aFswXSA9IFU2NCgweGNiYmI5 ZDVkYzEwNTllZDgpOworICAgICBjLT5oWzFdID0gVTY0KDB4NjI5YTI5MmEzNjdjZDUwNyk7Cisg ICAgIGMtPmhbMl0gPSBVNjQoMHg5MTU5MDE1YTMwNzBkZDE3KTsKK0BAIC04MCw2ICs4Nyw5IEBA IGZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0LCBTSEE1MTIpCisgCisgZmlwc19tZF9pbml0KFNIQTUx MikKKyB7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygp OworKyMgZW5kaWYKKyAgICAgYy0+aFswXSA9IFU2NCgweDZhMDllNjY3ZjNiY2M5MDgpOworICAg ICBjLT5oWzFdID0gVTY0KDB4YmI2N2FlODU4NGNhYTczYik7CisgICAgIGMtPmhbMl0gPSBVNjQo MHgzYzZlZjM3MmZlOTRmODJiKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by93aHJs cG9vbC93cF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vd2hybHBvb2wvd3BfZGdz dC5jCistLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzCTIw MTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL3docmxwb29sL3dwX2Rnc3QuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyODkxNjc5NCArMDEw MAorQEAgLTU1LDcgKzU1LDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyAjaW5j bHVkZSA8c3RyaW5nLmg+CisgCistZmlwc19tZF9pbml0KFdISVJMUE9PTCkKKytub25maXBzX21k X2luaXQoV0hJUkxQT09MKQorIHsKKyAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworICAg ICByZXR1cm4gKDEpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvTWFrZWZpbGUub3JnLmZpcHMg b3BlbnNzbC0xLjAuMmcvTWFrZWZpbGUub3JnCistLS0gb3BlbnNzbC0xLjAuMmcvTWFrZWZpbGUu b3JnLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MDA5MTYxNjEgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4yZy9NYWtlZmlsZS5vcmcJMjAxNi0wMy0wMSAxNjozMzowNy42Mjg5MTY3OTQgKzAxMDAK K0BAIC0xMzcsNiArMTM3LDkgQEAgRklQU0NBTkxJQj0KKyAKKyBCQVNFQUREUj0KKyAKKysjIE5v bi1lbXB0eSBpZiBGSVBTIGVuYWJsZWQKKytGSVBTPQorKworIERJUlM9ICAgY3J5cHRvIHNzbCBl bmdpbmVzIGFwcHMgdGVzdCB0b29scworIEVOR0RJUlM9IGNjZ29zdAorIFNITElCRElSUz0gY3J5 cHRvIHNzbAorQEAgLTE0OSw3ICsxNTIsNyBAQCBTRElSUz0gIFwKKyAJYm4gZWMgcnNhIGRzYSBl Y2RzYSBkaCBlY2RoIGRzbyBlbmdpbmUgXAorIAlidWZmZXIgYmlvIHN0YWNrIGxoYXNoIHJhbmQg ZXJyIFwKKyAJZXZwIGFzbjEgcGVtIHg1MDkgeDUwOXYzIGNvbmYgdHh0X2RiIHBrY3M3IHBrY3Mx MiBjb21wIG9jc3AgdWkga3JiNSBcCistCWNtcyBwcXVldWUgdHMganBha2Ugc3JwIHN0b3JlIGNt YWMKKysJY21zIHBxdWV1ZSB0cyBqcGFrZSBzcnAgc3RvcmUgY21hYyBmaXBzCisgIyBrZWVwIGlu IG1pbmQgdGhhdCB0aGUgYWJvdmUgbGlzdCBpcyBhZGp1c3RlZCBieSAuL0NvbmZpZ3VyZQorICMg YWNjb3JkaW5nIHRvIG5vLXh4eCBhcmd1bWVudHMuLi4KKyAKK0BAIC0yMzksNiArMjQyLDcgQEAg QlVJTERFTlY9CUxDX0FMTD1DIFBMQVRGT1JNPSckKFBMQVRGT1JNKQorIAkJRklQU0xJQkRJUj0n JHtGSVBTTElCRElSfScJCQlcCisgCQlGSVBTRElSPScke0ZJUFNESVJ9JwkJCQlcCisgCQlGSVBT Q0FOTElCPSIkJHtGSVBTQ0FOTElCOi0kKEZJUFNDQU5MSUIpfSIJXAorKwkJRklQUz0iJCR7RklQ UzotJChGSVBTKX0iCVwKKyAJCVRISVM9JCR7VEhJUzotJEB9IE1BS0VGSUxFPU1ha2VmaWxlIE1B S0VPVkVSUklERVM9CisgIyBNQUtFT1ZFUlJJREVTPSBlZmZlY3RpdmVseSAiZXF1YWxpemVzIiBH TlUtaXNoIGFuZCBTeXNWLWlzaCBtYWtlIGZsYXZvcnMsCisgIyB3aGljaCBpbiB0dXJuIGVsaW1p bmF0ZXMgYW1iaWd1aXRpZXMgaW4gdmFyaWFibGUgdHJlYXRtZW50IHdpdGggLWUuCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4yZy9zc2wvc3NsX2FsZ3MuYy5maXBzIG9wZW5zc2wtMS4wLjJnL3NzbC9z c2xfYWxncy5jCistLS0gb3BlbnNzbC0xLjAuMmcvc3NsL3NzbF9hbGdzLmMuZmlwcwkyMDE2LTAz LTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL3NzbC9zc2xf YWxncy5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI4OTE2Nzk0ICswMTAwCitAQCAtNjQsNiArNjQs MTEgQEAKKyBpbnQgU1NMX2xpYnJhcnlfaW5pdCh2b2lkKQorIHsKKyAKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrICAgIE9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrICAgIGlmICghRklQU19tb2Rl KCkpIHsKKysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfY2JjKCkpOworICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNf Y2JjKCkpOworQEAgLTE0Miw2ICsxNDcsNDggQEAgaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkK KyAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKKyAgICAgRVZQX2FkZF9kaWdlc3QoRVZQ X2RzcygpKTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIH0gZWxzZSB7Cisr IyBpZm5kZWYgT1BFTlNTTF9OT19ERVMKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNf ZWRlM19jYmMoKSk7CisrIyBlbmRpZgorKyMgaWZuZGVmIE9QRU5TU0xfTk9fQUVTCisrICAgICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrICAgICAgICBFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9jYmMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7 CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9nY20oKSk7CisrIyBlbmRpZgor KyMgaWZuZGVmIE9QRU5TU0xfTk9fTUQ1CisrICAgICAgICAvKiBuZWVkZWQgZXZlbiBpbiB0aGUg RklQUyBtb2RlIGZvciBUTFMgTUFDICovCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfbWQ1 KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCAic3NsMi1tZDUiKTsK KysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwgInNzbDMtbWQ1Iik7CisrIyBl bmRpZgorKyMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChF VlBfc2hhMSgpKTsgLyogUlNBIHdpdGggc2hhMSAqLworKyAgICAgICAgRVZQX2FkZF9kaWdlc3Rf YWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9zaGExV2l0aFJTQSk7CisrIyBlbmRpZgor KyMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMjI0KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKKysjIGVu ZGlmCisrIyBpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0 KEVWUF9zaGEzODQoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwor KyMgZW5kaWYKKysjIGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVO U1NMX05PX0RTQSkKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOyAvKiBEU0Eg d2l0aCBzaGExICovCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hB MSwgU05fZHNhV2l0aFNIQTFfMik7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9k c2FXaXRoU0hBMSwgIkRTUzEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2Rz YVdpdGhTSEExLCAiZHNzMSIpOworKyMgZW5kaWYKKysjIGlmbmRlZiBPUEVOU1NMX05PX0VDRFNB CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7CisrIyBlbmRpZgorKyAgICB9 CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NPTVAKKyAgICAgLyoKKyAgICAgICogVGhp cyB3aWxsIGluaXRpYWxpc2UgdGhlIGJ1aWx0LWluIGNvbXByZXNzaW9uIGFsZ29yaXRobXMuIFRo ZSB2YWx1ZQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjJnLW1hbmZpeC5wYXRjaCBiL29wZW5z c2wtMS4wLjJnLW1hbmZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xMmU1MTAzCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMmctbWFuZml4LnBhdGNo CkBAIC0wLDAgKzEsOTAgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2RvYy9hcHBzL2VjLnBv ZC5tYW5maXggb3BlbnNzbC0xLjAuMmcvZG9jL2FwcHMvZWMucG9kCistLS0gb3BlbnNzbC0xLjAu MmcvZG9jL2FwcHMvZWMucG9kLm1hbmZpeAkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2RvYy9hcHBzL2VjLnBvZAkyMDE2LTAzLTAxIDE2OjQ3 OjM1LjMzMTU2ODI5MCArMDEwMAorQEAgLTkzLDEwICs5Myw2IEBAIHByaW50cyBvdXQgdGhlIHB1 YmxpYywgcHJpdmF0ZSBrZXkgY29tcG8KKyAKKyB0aGlzIG9wdGlvbiBwcmV2ZW50cyBvdXRwdXQg b2YgdGhlIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUga2V5LgorIAorLT1pdGVtIEI8LW1vZHVsdXM+ CistCistdGhpcyBvcHRpb24gcHJpbnRzIG91dCB0aGUgdmFsdWUgb2YgdGhlIHB1YmxpYyBrZXkg Y29tcG9uZW50IG9mIHRoZSBrZXkuCistCisgPWl0ZW0gQjwtcHViaW4+CisgCisgYnkgZGVmYXVs dCBhIHByaXZhdGUga2V5IGlzIHJlYWQgZnJvbSB0aGUgaW5wdXQgZmlsZTogd2l0aCB0aGlzIG9w dGlvbiBhCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9kb2MvYXBwcy9vcGVuc3NsLnBvZC5tYW5m aXggb3BlbnNzbC0xLjAuMmcvZG9jL2FwcHMvb3BlbnNzbC5wb2QKKy0tLSBvcGVuc3NsLTEuMC4y Zy9kb2MvYXBwcy9vcGVuc3NsLnBvZC5tYW5maXgJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZy9kb2MvYXBwcy9vcGVuc3NsLnBvZAkyMDE2LTAz LTAxIDE2OjQ3OjM1LjMzMTU2ODI5MCArMDEwMAorQEAgLTE2Myw3ICsxNjMsNyBAQCBDcmVhdGUg b3IgZXhhbWluZSBhIG5ldHNjYXBlIGNlcnRpZmljYXRlCisgCisgT25saW5lIENlcnRpZmljYXRl IFN0YXR1cyBQcm90b2NvbCB1dGlsaXR5LgorIAorLT1pdGVtIEw8QjxwYXNzd2Q+fHBhc3N3ZCgx KT4KKys9aXRlbSBMPEI8cGFzc3dkPnxzc2xwYXNzd2QoMSk+CisgCisgR2VuZXJhdGlvbiBvZiBo YXNoZWQgcGFzc3dvcmRzLgorIAorQEAgLTE4Nyw3ICsxODcsNyBAQCBQdWJsaWMga2V5IGFsZ29y aXRobSBwYXJhbWV0ZXIgbWFuYWdlbWVuCisgCisgUHVibGljIGtleSBhbGdvcml0aG0gY3J5cHRv Z3JhcGhpYyBvcGVyYXRpb24gdXRpbGl0eS4KKyAKKy09aXRlbSBMPEI8cmFuZD58cmFuZCgxKT4K Kys9aXRlbSBMPEI8cmFuZD58c3NscmFuZCgxKT4KKyAKKyBHZW5lcmF0ZSBwc2V1ZG8tcmFuZG9t IGJ5dGVzLgorIAorQEAgLTQwMSw5ICs0MDEsOSBAQCBMPGNybCgxKXxjcmwoMSk+LCBMPGNybDJw a2NzNygxKXxjcmwycGtjCisgTDxkaHBhcmFtKDEpfGRocGFyYW0oMSk+LCBMPGRzYSgxKXxkc2Eo MSk+LCBMPGRzYXBhcmFtKDEpfGRzYXBhcmFtKDEpPiwKKyBMPGVuYygxKXxlbmMoMSk+LCBMPGdl bmRzYSgxKXxnZW5kc2EoMSk+LCBMPGdlbnBrZXkoMSl8Z2VucGtleSgxKT4sCisgTDxnZW5yc2Eo MSl8Z2VucnNhKDEpPiwgTDxuc2VxKDEpfG5zZXEoMSk+LCBMPG9wZW5zc2woMSl8b3BlbnNzbCgx KT4sCistTDxwYXNzd2QoMSl8cGFzc3dkKDEpPiwKKytMPHNzbHBhc3N3ZCgxKXxzc2xwYXNzd2Qo MSk+LAorIEw8cGtjczEyKDEpfHBrY3MxMigxKT4sIEw8cGtjczcoMSl8cGtjczcoMSk+LCBMPHBr Y3M4KDEpfHBrY3M4KDEpPiwKKy1MPHJhbmQoMSl8cmFuZCgxKT4sIEw8cmVxKDEpfHJlcSgxKT4s IEw8cnNhKDEpfHJzYSgxKT4sCisrTDxzc2xyYW5kKDEpfHNzbHJhbmQoMSk+LCBMPHJlcSgxKXxy ZXEoMSk+LCBMPHJzYSgxKXxyc2EoMSk+LAorIEw8cnNhdXRsKDEpfHJzYXV0bCgxKT4sIEw8c19j bGllbnQoMSl8c19jbGllbnQoMSk+LAorIEw8c19zZXJ2ZXIoMSl8c19zZXJ2ZXIoMSk+LCBMPHNf dGltZSgxKXxzX3RpbWUoMSk+LAorIEw8c21pbWUoMSl8c21pbWUoMSk+LCBMPHNwa2FjKDEpfHNw a2FjKDEpPiwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2RvYy9hcHBzL3NfY2xpZW50LnBvZC5t YW5maXggb3BlbnNzbC0xLjAuMmcvZG9jL2FwcHMvc19jbGllbnQucG9kCistLS0gb3BlbnNzbC0x LjAuMmcvZG9jL2FwcHMvc19jbGllbnQucG9kLm1hbmZpeAkyMDE2LTAzLTAxIDE0OjM1OjUzLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJnL2RvYy9hcHBzL3NfY2xpZW50LnBvZAky MDE2LTAzLTAxIDE2OjQ3OjM1LjM1ODU2ODkwMiArMDEwMAorQEAgLTM1LDYgKzM1LDkgQEAgQjxv cGVuc3NsPiBCPHNfY2xpZW50PgorIFtCPC1zc2wyPl0KKyBbQjwtc3NsMz5dCisgW0I8LXRsczE+ XQorK1tCPC10bHMxXzE+XQorK1tCPC10bHMxXzI+XQorK1tCPC1kdGxzMT5dCisgW0I8LW5vX3Nz bDI+XQorIFtCPC1ub19zc2wzPl0KKyBbQjwtbm9fdGxzMT5dCitAQCAtMjAxLDcgKzIwNCw3IEBA IFVzZSB0aGUgUFNLIGtleSBCPGtleT4gd2hlbiB1c2luZyBhIFBTSworIGdpdmVuIGFzIGEgaGV4 YWRlY2ltYWwgbnVtYmVyIHdpdGhvdXQgbGVhZGluZyAweCwgZm9yIGV4YW1wbGUgLXBzaworIDFh MmIzYzRkLgorIAorLT1pdGVtIEI8LXNzbDI+LCBCPC1zc2wzPiwgQjwtdGxzMT4sIEI8LXRsczFf MT4sIEI8LXRsczFfMj4sIEI8LW5vX3NzbDI+LCBCPC1ub19zc2wzPiwgQjwtbm9fdGxzMT4sIEI8 LW5vX3RsczFfMT4sIEI8LW5vX3RsczFfMj4KKys9aXRlbSBCPC1zc2wyPiwgQjwtc3NsMz4sIEI8 LXRsczE+LCBCPC10bHMxXzE+LCBCPC10bHMxXzI+LCBCPC1kdGxzMT4sIEI8LW5vX3NzbDI+LCBC PC1ub19zc2wzPiwgQjwtbm9fdGxzMT4sIEI8LW5vX3RsczFfMT4sIEI8LW5vX3RsczFfMj4KKyAK KyBUaGVzZSBvcHRpb25zIHJlcXVpcmUgb3IgZGlzYWJsZSB0aGUgdXNlIG9mIHRoZSBzcGVjaWZp ZWQgU1NMIG9yIFRMUyBwcm90b2NvbHMuCisgQnkgZGVmYXVsdCB0aGUgaW5pdGlhbCBoYW5kc2hh a2UgdXNlcyBhIEk8dmVyc2lvbi1mbGV4aWJsZT4gbWV0aG9kIHdoaWNoIHdpbGwKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJnL2RvYy9hcHBzL3Nfc2VydmVyLnBvZC5tYW5maXggb3BlbnNzbC0xLjAu MmcvZG9jL2FwcHMvc19zZXJ2ZXIucG9kCistLS0gb3BlbnNzbC0xLjAuMmcvZG9jL2FwcHMvc19z ZXJ2ZXIucG9kLm1hbmZpeAkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjJnL2RvYy9hcHBzL3Nfc2VydmVyLnBvZAkyMDE2LTAzLTAxIDE2OjQ3OjM1 LjM1OTU2ODkyNSArMDEwMAorQEAgLTQyLDYgKzQyLDggQEAgQjxvcGVuc3NsPiBCPHNfc2VydmVy PgorIFtCPC1zc2wyPl0KKyBbQjwtc3NsMz5dCisgW0I8LXRsczE+XQorK1tCPC10bHMxXzE+XQor K1tCPC10bHMxXzI+XQorIFtCPC1ub19zc2wyPl0KKyBbQjwtbm9fc3NsMz5dCisgW0I8LW5vX3Rs czE+XQorQEAgLTIxNyw3ICsyMTksNyBAQCBVc2UgdGhlIFBTSyBrZXkgQjxrZXk+IHdoZW4gdXNp bmcgYSBQU0sKKyBnaXZlbiBhcyBhIGhleGFkZWNpbWFsIG51bWJlciB3aXRob3V0IGxlYWRpbmcg MHgsIGZvciBleGFtcGxlIC1wc2sKKyAxYTJiM2M0ZC4KKyAKKy09aXRlbSBCPC1zc2wyPiwgQjwt c3NsMz4sIEI8LXRsczE+LCBCPC10bHMxXzE+LCBCPC10bHMxXzI+LCBCPC1ub19zc2wyPiwgQjwt bm9fc3NsMz4sIEI8LW5vX3RsczE+LCBCPC1ub190bHMxXzE+LCBCPC1ub190bHMxXzI+CisrPWl0 ZW0gQjwtc3NsMj4sIEI8LXNzbDM+LCBCPC10bHMxPiwgQjwtdGxzMV8xPiwgQjwtdGxzMV8yPiwg QjwtZHRsczE+LCBCPC1ub19zc2wyPiwgQjwtbm9fc3NsMz4sIEI8LW5vX3RsczE+LCBCPC1ub190 bHMxXzE+LCBCPC1ub190bHMxXzI+CisgCisgVGhlc2Ugb3B0aW9ucyByZXF1aXJlIG9yIGRpc2Fi bGUgdGhlIHVzZSBvZiB0aGUgc3BlY2lmaWVkIFNTTCBvciBUTFMgcHJvdG9jb2xzLgorIEJ5IGRl ZmF1bHQgdGhlIGluaXRpYWwgaGFuZHNoYWtlIHVzZXMgYSBJPHZlcnNpb24tZmxleGlibGU+IG1l dGhvZCB3aGljaCB3aWxsCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC5zcGVjIGIvb3BlbnNzbC5zcGVj CmluZGV4IDRkMDQyODIuLjRmMWExOTQgMTAwNjQ0Ci0tLSBhL29wZW5zc2wuc3BlYworKysgYi9v cGVuc3NsLnNwZWMKQEAgLTIyLDggKzIyLDggQEAKIAogU3VtbWFyeTogVXRpbGl0aWVzIGZyb20g dGhlIGdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFwaHkgbGlicmFyeSB3aXRoIFRMUyBpbXBsZW1l bnRhdGlvbgogTmFtZTogb3BlbnNzbAotVmVyc2lvbjogMS4wLjJmCi1SZWxlYXNlOiAyJXs/ZGlz dH0KK1ZlcnNpb246IDEuMC4yZworUmVsZWFzZTogMSV7P2Rpc3R9CiBFcG9jaDogMQogIyBXZSBo YXZlIHRvIHJlbW92ZSBjZXJ0YWluIHBhdGVudGVkIGFsZ29yaXRobXMgZnJvbSB0aGUgb3BlbnNz bCBzb3VyY2UKICMgdGFyYmFsbCB3aXRoIHRoZSBob2JibGUtb3BlbnNzbCBzY3JpcHQgd2hpY2gg aXMgaW5jbHVkZWQgYmVsb3cuCkBAIC01Niw3ICs1Niw3IEBAIFBhdGNoMzM6IG9wZW5zc2wtMS4w LjAtYmV0YTQtY2EtZGlyLnBhdGNoCiBQYXRjaDM0OiBvcGVuc3NsLTEuMC4yYS14NTA5LnBhdGNo CiBQYXRjaDM1OiBvcGVuc3NsLTEuMC4yYS12ZXJzaW9uLWFkZC1lbmdpbmVzLnBhdGNoCiBQYXRj aDM5OiBvcGVuc3NsLTEuMC4yYS1pcHY2LWFwcHMucGF0Y2gKLVBhdGNoNDA6IG9wZW5zc2wtMS4w LjJlLWZpcHMucGF0Y2gKK1BhdGNoNDA6IG9wZW5zc2wtMS4wLjJnLWZpcHMucGF0Y2gKIFBhdGNo NDU6IG9wZW5zc2wtMS4wLjJhLWVudi16bGliLnBhdGNoCiBQYXRjaDQ3OiBvcGVuc3NsLTEuMC4y YS1yZWFkbWUtd2FybmluZy5wYXRjaAogUGF0Y2g0OTogb3BlbnNzbC0xLjAuMWktYWxnby1kb2Mu cGF0Y2gKQEAgLTcwLDcgKzcwLDcgQEAgUGF0Y2g2NTogb3BlbnNzbC0xLjAuMmEtY2hpbC1maXhl cy5wYXRjaAogUGF0Y2g2Njogb3BlbnNzbC0xLjAuMmEtcGtnY29uZmlnLWtyYjUucGF0Y2gKIFBh dGNoNjg6IG9wZW5zc2wtMS4wLjJhLXNlY3VyZS1nZXRlbnYucGF0Y2gKIFBhdGNoNzA6IG9wZW5z c2wtMS4wLjJhLWZpcHMtZWMucGF0Y2gKLVBhdGNoNzE6IG9wZW5zc2wtMS4wLjJkLW1hbmZpeC5w YXRjaAorUGF0Y2g3MTogb3BlbnNzbC0xLjAuMmctbWFuZml4LnBhdGNoCiBQYXRjaDcyOiBvcGVu c3NsLTEuMC4yYS1maXBzLWN0b3IucGF0Y2gKIFBhdGNoNzM6IG9wZW5zc2wtMS4wLjJjLWVjYy1z dWl0ZWIucGF0Y2gKIFBhdGNoNzQ6IG9wZW5zc2wtMS4wLjJhLW5vLW1kNS12ZXJpZnkucGF0Y2gK QEAgLTgwLDcgKzgwLDcgQEAgUGF0Y2g3Nzogb3BlbnNzbC0xLjAuMmEtd2Vhay1jaXBoZXJzLnBh dGNoCiBQYXRjaDc4OiBvcGVuc3NsLTEuMC4yYS1jYy1yZXFzLnBhdGNoCiBQYXRjaDkwOiBvcGVu c3NsLTEuMC4yYS1lbmMtZmFpbC5wYXRjaAogUGF0Y2g5Mjogb3BlbnNzbC0xLjAuMmEtc3lzdGVt LWNpcGhlcmxpc3QucGF0Y2gKLVBhdGNoOTM6IG9wZW5zc2wtMS4wLjJhLWRpc2FibGUtc3NsdjJ2 My5wYXRjaAorUGF0Y2g5Mzogb3BlbnNzbC0xLjAuMmctZGlzYWJsZS1zc2x2MnYzLnBhdGNoCiBQ YXRjaDk0OiBvcGVuc3NsLTEuMC4yZC1zZWNwMjU2azEucGF0Y2gKIFBhdGNoOTU6IG9wZW5zc2wt MS4wLjJlLXJlbW92ZS1uaXN0cDIyNC5wYXRjaAogUGF0Y2g5Njogb3BlbnNzbC0xLjAuMmUtc3Bl ZWQtZG9jLnBhdGNoCkBAIC01MDIsNiArNTAyLDkgQEAgcm0gLXJmICRSUE1fQlVJTERfUk9PVC8l e19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAlcG9zdHVuIGxpYnMgLXAgL3NiaW4vbGRjb25maWcK IAogJWNoYW5nZWxvZworKiBUdWUgTWFyICAxIDIwMTYgVG9tw6HFoSBNcsOheiA8dG1yYXpAcmVk aGF0LmNvbT4gMS4wLjJnLTEKKy0gbWlub3IgdXBzdHJlYW0gcmVsZWFzZSAxLjAuMmcgZml4aW5n IHNlY3VyaXR5IGlzc3VlcworCiAqIFRodSBGZWIgMDQgMjAxNiBGZWRvcmEgUmVsZWFzZSBFbmdp bmVlcmluZyA8cmVsZW5nQGZlZG9yYXByb2plY3Qub3JnPiAtIDE6MS4wLjJmLTIKIC0gUmVidWls dCBmb3IgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL0ZlZG9yYV8yNF9NYXNzX1JlYnVp bGQKIAoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IDkyYTJhMjAuLjY5Y2Yw OWEgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291cmNlcwpAQCAtMSArMSBAQAotZTlkMjli YzE2ODhmNjVmY2I5ZDFiNTY0ZDUzZDZmMTMgIG9wZW5zc2wtMS4wLjJmLWhvYmJsZWQudGFyLnh6 CitmNjVjYjFiZTQ2YjFkNjM2NGIzYzc3OTc4NWNiMzIzZSAgb3BlbnNzbC0xLjAuMmctaG9iYmxl ZC50YXIueHoK