[PATCH] edit_distance: calculate edit distance between strings
Kevin Locke <[email protected]> Fri, 18 Nov 2016 21:19:25 -0700
| Newsgroups | org.ozlabs.lists.ccan |
|---|---|
| Message-ID | <f253995d1f82ebc3dbb69f9ad2dfbcff6605c71a.1479527608.git.kevin@kevinlocke.name> |
VGhpcyBjb21taXQgY3JlYXRlcyB0aGUgZWRpdF9kaXN0YW5jZSBtb2R1bGUgZm9yIGNhbGN1bGF0 aW5nIHZhcmlvdXMKZWRpdCBkaXN0YW5jZSBtZWFzdXJlcy4gIFRoZSBlZGl0IGRpc3RhbmNlIHF1 YW50aWZpZXMgdGhlIHNpbWlsYXJpdHkKYmV0d2VlbiB0d28gc3RyaW5ncyBiYXNlZCBvbiB0aGUg bnVtYmVyIG9mIG1vZGlmaWNhdGlvbnMgbmVjZXNzYXJ5IHRvCnR1cm4gb25lIHN0cmluZyBpbnRv IHRoZSBvdGhlci4gIFRoZXJlIGFyZSBzZXZlcmFsIGVkaXQgZGlzdGFuY2UKbWVhc3VyZXMgd2hp Y2ggZGlmZmVyIGluIHRoZSBvcGVyYXRpb25zIHdoaWNoIGFyZSBwZXJtaXR0ZWQgYW5kIHRoZQpj b3N0IChha2Egd2VpZ2h0KSBvZiB0aGUgb3BlcmF0aW9ucy4gIFRoaXMgbW9kdWxlIHByb3ZpZGVz IGZ1bmN0aW9ucwpmb3IgY2FsY3VsYXRpbmcgdGhlIExvbmdlc3QgQ29tbW9uIFN1YnNlcXVlbmNl IChMQ1MpLCBMZXZlbnNodGVpbiwgYW5kCkRhbWVyYXUtTGV2ZW5zaHRlaW4gKHJlc3RyaWN0ZWQg YW5kIHVucmVzdHJpY3RlZCkgZGlzdGFuY2VzLiAgV2VpZ2h0ZWQKdmVyc2lvbnMgb2YgdGhlc2Ug ZnVuY3Rpb25zIGNhbiBiZSBjcmVhdGVkIGJ5IGRlZmluaW5nIGNvc3QgZnVuY3Rpb25zCmFzIHBy ZXByb2Nlc3NvciBtYWNyb3Mgd2hlbiBjb21waWxpbmcgdGhpcyBtb2R1bGUuICBEaXN0YW5jZXMg b3ZlcgpvdGhlciBhcnJheSB0eXBlcyAoZS5nLiB3aWRlIHN0cmluZ3MsIGludGVnZXJzLCBzdHJ1 Y3RzKSBjYW4gYmUKYWNjb21wbGlzaGVkIGJ5IGRlZmluaW5nIHRoZSBlbGVtZW50IHR5cGUgYW5k IGVxdWFsaXR5IHRlc3QgbWFjcm9zLgoKU2lnbmVkLW9mZi1ieTogS2V2aW4gTG9ja2UgPGtldmlu QGtldmlubG9ja2UubmFtZT4KCi0tLQoKSSBoYXZlIHRyaWVkIHRvIG1ha2UgdGhlIGlubGluZSBk b2N1bWVudGF0aW9uIHdvcmsgd2l0aCBib3RoCmRvY19leHRyYWN0IGFuZCBEb3h5Z2VuLiAgVGhl IGZvcm1hdHRpbmcgb2YgY29kZSBleGFtcGxlcyBpbiB0aGUKbW9kdWxlIGNvbW1lbnRzIGNvbnRh aW5zIHNvbWUgb2RkLWxvb2tpbmcgYWRkaXRpb25hbCBmb3JtYXR0aW5nIHRvCm1ha2UgdGhlIGV4 YW1wbGVzIHdvcmssIGJ1dCBvdGhlcndpc2UgdGhlIGNvbWJpbmF0aW9uIHNlZW1lZApyZWFzb25h YmxlLiAgSWYgdGhlcmUncyBhIHN0cm9uZyBmZWVsaW5nIHRoYXQgRG94eWdlbiBpcyBhZ2FpbnN0 IHRoZQpwcm9qZWN0IHN0eWxlLCBJIGNhbiByZW1vdmUgdGhlIERveHlnZW4tc3BlY2lmaWMgZm9y bWF0dGluZy4KClRoZXJlIGFyZSBhIG51bWJlciBvZiBhZGRpdGlvbmFsIGF1eGlsaWFyeSBmaWxl cyB3aGljaCBJIGRpZCBub3QKaW5jbHVkZSBpbiB0aGlzIGNvbW1pdCAoZS5nLiAuaW5kZW50LnBy bywgRG94eWZpbGUsIHNjcmlwdHMgZm9yCnBlcmZvcm1hbmNlIHRlc3RpbmcgYW5kIHRlc3Rpbmcg YWdhaW5zdCByZWZlcmVuY2UgbGlicmFyaWVzKSwgc2luY2UKdGhlc2Ugc29ydHMgb2YgZmlsZXMg ZG8gbm90IGFwcGVhciB0byBiZSBwcmVzZW50IGluIGFueSBvZiB0aGUgb3RoZXIKbW9kdWxlcy4g IElmIHRoZXkgd291bGQgYmUgZGVzaXJhYmxlLCBJIGNhbiBzdWJtaXQgdGhlbSBpbiBhbgphZGRp dGlvbmFsIGNvbW1pdC4KCkkgaG9wZSB5b3UgZmluZCB0aGUgbW9kdWxlIHVzZWZ1bCBhbmQgSSBs b29rIGZvcndhcmQgdG8geW91ciB0aG91Z2h0cy4KCkNoZWVycywKS2V2aW4KCiBjY2FuL2VkaXRf ZGlzdGFuY2UvTElDRU5TRSAgICAgICAgICAgICAgICAgfCAgIDEgKwogY2Nhbi9lZGl0X2Rpc3Rh bmNlL19pbmZvICAgICAgICAgICAgICAgICAgIHwgIDg5ICsrKysrKysrKwogY2Nhbi9lZGl0X2Rp c3RhbmNlL2VkaXRfZGlzdGFuY2UtcGFyYW1zLmggIHwgMTI2ICsrKysrKysrKysrKysKIGNjYW4v ZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLXByaXZhdGUuaCB8ICA4MSArKysrKysrKysKIGNj YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmJpYiAgICAgICB8ICA1NyArKysrKysKIGNj YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmMgICAgICAgICB8IDExNiArKysrKysrKysr KysKIGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmggICAgICAgICB8IDEzMSArKysr KysrKysrKysrKwogY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2VfZGwuYyAgICAgIHwg MTc5ICsrKysrKysrKysrKysrKysrKwogY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2Vf bGNzLmMgICAgIHwgIDY5ICsrKysrKysKIGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNl X2xldi5jICAgICB8ICA3NCArKysrKysrKwogY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFu Y2VfcmRsLmMgICAgIHwgIDk4ICsrKysrKysrKysKIGNjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L2Fw aS5jICAgICAgICAgICAgICB8IDIyMSArKysrKysrKysrKysrKysrKysrKysrCiBjY2FuL2VkaXRf ZGlzdGFuY2UvdGVzdC9ydW4tdHlwZXMtc2hvcnQuYyAgfCAgNDAgKysrKwogY2Nhbi9lZGl0X2Rp c3RhbmNlL3Rlc3QvcnVuLXR5cGVzLXN0cnVjdC5jIHwgIDU2ICsrKysrKwogY2Nhbi9lZGl0X2Rp c3RhbmNlL3Rlc3QvcnVuLXR5cGVzLXdjaGFyLmMgIHwgIDYwICsrKysrKwogY2Nhbi9lZGl0X2Rp c3RhbmNlL3Rlc3QvcnVuLXdlaWdodHMuYyAgICAgIHwgMjgyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAxNiBmaWxlcyBjaGFuZ2VkLCAxNjgwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEyMDAwMCBjY2FuL2VkaXRfZGlzdGFuY2UvTElDRU5TRQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNjYW4vZWRpdF9kaXN0YW5jZS9faW5mbwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNjYW4vZWRpdF9k aXN0YW5jZS9lZGl0X2Rpc3RhbmNlLXBhcmFtcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY2Nhbi9l ZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UtcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UuYmliCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNj YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjY2Fu L2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9kbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY2Nh bi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2VfbGNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBj Y2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9sZXYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX3JkbC5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvYXBpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjY2Fu L2VkaXRfZGlzdGFuY2UvdGVzdC9ydW4tdHlwZXMtc2hvcnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy1zdHJ1Y3QuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGNjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy13Y2hhci5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvcnVuLXdlaWdodHMuYwoKZGlmZiAt LWdpdCBhL2NjYW4vZWRpdF9kaXN0YW5jZS9MSUNFTlNFIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL0xJ Q0VOU0UKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uMjM1NGQxMgotLS0gL2Rl di9udWxsCisrKyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9MSUNFTlNFCkBAIC0wLDAgKzEgQEAKKy4u Ly4uL2xpY2Vuc2VzL0JTRC1NSVQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n aXQgYS9jY2FuL2VkaXRfZGlzdGFuY2UvX2luZm8gYi9jY2FuL2VkaXRfZGlzdGFuY2UvX2luZm8K bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1NTk1NwotLS0gL2Rldi9udWxs CisrKyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9faW5mbwpAQCAtMCwwICsxLDg5IEBACisjaW5jbHVk ZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwor LyoqCisgKiBlZGl0X2Rpc3RhbmNlIC0gY2FsY3VsYXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdl ZW4gdHdvIHN0cmluZ3MKKyAqCisgKiBUaGUgZWRpdCBkaXN0YW5jZSBxdWFudGlmaWVzIHRoZSBz aW1pbGFyaXR5IGJldHdlZW4gdHdvIHN0cmluZ3MgYmFzZWQgb24gdGhlCisgKiBudW1iZXIgb2Yg bW9kaWZpY2F0aW9ucyBuZWNlc3NhcnkgdG8gdHVybiBvbmUgc3RyaW5nIGludG8gdGhlIG90aGVy LiAgVGhlcmUKKyAqIGFyZSBzZXZlcmFsIGVkaXQgZGlzdGFuY2UgbWVhc3VyZXMgd2hpY2ggZGlm ZmVyIGluIHRoZSBvcGVyYXRpb25zIHdoaWNoIGFyZQorICogcGVybWl0dGVkIGFuZCB0aGUgY29z dCAoYWthIHdlaWdodCkgb2YgdGhlIG9wZXJhdGlvbnMuICBUaGlzIG1vZHVsZSBwcm92aWRlcwor ICogZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyB0aGUgTG9uZ2VzdCBDb21tb24gU3Vic2VxdWVu Y2UgKExDUyksIExldmVuc2h0ZWluLAorICogYW5kIERhbWVyYXUtTGV2ZW5zaHRlaW4gKHJlc3Ry aWN0ZWQgYW5kIHVucmVzdHJpY3RlZCkgZGlzdGFuY2VzLiAgV2VpZ2h0ZWQKKyAqIHZlcnNpb25z IG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgY3JlYXRlZCBieSBkZWZpbmluZyBjb3N0IGZ1bmN0 aW9ucyBhcworICogcHJlcHJvY2Vzc29yIG1hY3JvcyB3aGVuIGNvbXBpbGluZyB0aGlzIG1vZHVs ZS4gIERpc3RhbmNlcyBvdmVyIG90aGVyIGFycmF5CisgKiB0eXBlcyAoZS5nLiB3aWRlIHN0cmlu Z3MsIGludGVnZXJzLCBzdHJ1Y3RzKSBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IGRlZmluaW5nCisg KiB0aGUgZWxlbWVudCB0eXBlIGFuZCBlcXVhbGl0eSB0ZXN0IG1hY3Jvcy4KKyAqCisgKiBFeGFt cGxlOgorICogI2luY2x1ZGUgPGxpbWl0cy5oPgkvLyBVSU5UX01BWAorICogI2luY2x1ZGUgPHN0 ZGlvLmg+CS8vIGZwcmludGYsIHByaW50ZgorICogI2luY2x1ZGUgPHN0ZGxpYi5oPgkvLyBFWElU XyoKKyAqICNpbmNsdWRlIDxzdHJpbmcuaD4JLy8gc3RybGVuCisgKgorICogI2luY2x1ZGUgPGNj YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmg+CisgKgorICogY29uc3QgY2hhciAqY291 bnRpZXNbXSA9IHsKKyAqCSJBbmdsZXNleSIsCisgKgkiQnJlY2tub2Nrc2hpcmUiLAorICoJIkNh cmRpZ2Fuc2hpcmUiLAorICoJIkNhcm1hcnRoZW5zaGlyZSIsCisgKgkiQ2Flcm5hcmZvbnNoaXJl IiwKKyAqCSJEZW5iaWdoc2hpcmUiLAorICoJIkZsaW50c2hpcmUiLAorICoJIkdsYW1vcmdhbiIs CisgKgkiTWVyaW9uZXRoc2hpcmUiLAorICoJIk1vbm1vdXRoc2hpcmUiLAorICoJIk1vbnRnb21l cnlzaGlyZSIsCisgKgkiUGVtYnJva2VzaGlyZSIsCisgKgkiUmFkbm9yc2hpcmUiLAorICoJTlVM TAorICogfTsKKyAqCisgKiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICogewor ICoJaWYgKGFyZ2MgIT0gMikgeworICoJCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxndWVz cz5cbiIsIGFyZ3ZbMF0pOworICoJCXJldHVybiBFWElUX0ZBSUxVUkU7CisgKgl9CisgKgljb25z dCBjaGFyICpndWVzcyA9IGFyZ3ZbMV07CisgKgorICoJdW5zaWduZWQgaW50IGJlc3RkaXN0ID0g VUlOVF9NQVg7CisgKgljb25zdCBjaGFyICpiZXN0Y291bnR5ID0gTlVMTDsKKyAqCWZvciAoY29u c3QgY2hhciAqKnBjb3VudHkgPSBjb3VudGllczsgKnBjb3VudHk7ICsrcGNvdW50eSkgeworICoJ CWNvbnN0IGNoYXIgKmNvdW50eSA9ICpwY291bnR5OworICoJCXVuc2lnbmVkIGludCBkaXN0ID0g ZWRpdF9kaXN0YW5jZShndWVzcywgc3RybGVuKGd1ZXNzKSwKKyAqCQkJCWNvdW50eSwgc3RybGVu KGNvdW50eSksIEVESVRfRElTVEFOQ0VfUkRMKTsKKyAqCQlpZiAoZGlzdCA8IGJlc3RkaXN0KSB7 CisgKgkJCWJlc3RkaXN0ID0gZGlzdDsKKyAqCQkJYmVzdGNvdW50eSA9IGNvdW50eTsKKyAqCQl9 CisgKgl9CisgKgorICoJcHJpbnRmKCJZb3Ugd2VyZSBwcm9iYWJseSB0cnlpbmcgdG8gc3BlbGwg JXNcbiIsIGJlc3Rjb3VudHkpOworICoJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyAqIH0KKyAqIExp Y2Vuc2U6IE1JVAorICogQXV0aG9yOiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5sb2NrZS5uYW1l PgorICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCS8qIEV4cGVjdCBl eGFjdGx5IG9uZSBhcmd1bWVudCAqLworCWlmIChhcmdjICE9IDIpIHsKKwkJcmV0dXJuIDE7Cisg ICAgICAgIH0KKworCWlmIChzdHJjbXAoYXJndlsxXSwgImRlcGVuZHMiKSA9PSAwKSB7CisJCXJl dHVybiAwOworICAgICAgICB9CisKKwlpZiAoc3RyY21wKGFyZ3ZbMV0sICJ0ZXN0ZGVwZW5kcyIp ID09IDApIHsKKwkJcHJpbnRmKCJjY2FuL2FycmF5X3NpemVcbiIpOworCQlwcmludGYoImNjYW4v YnVpbGRfYXNzZXJ0XG4iKTsKKwkJcHJpbnRmKCJjY2FuL3RhcFxuIik7CisJCXJldHVybiAwOwor CX0KKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRf ZGlzdGFuY2UtcGFyYW1zLmggYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZS1wYXJh bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDg0NjE4Ci0tLSAvZGV2 L251bGwKKysrIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UtcGFyYW1zLmgKQEAg LTAsMCArMSwxMjYgQEAKKy8qKiBAZmlsZQorICogRGVmaW5lcyB0aGUgdHVuYWJsZSBwYXJhbWV0 ZXJzIGZvciB0aGUgZWRpdF9kaXN0YW5jZSBmdW5jdGlvbnMgd2hpY2ggY2FuCisgKiBiZSBjaGFu Z2VkIGF0IG1vZHVsZS1jb21waWxlLXRpbWUuCisgKgorICogVGhlIG1hY3JvcyBpbiB0aGlzIGhl YWRlciBjYW4gYmUgcmVkZWZpbmVkLCBlaXRoZXIgYnkgZWRpdGluZyB0aGlzIGZpbGUgb3IKKyAq IHByb3ZpZGluZyBleHRlcm5hbCBkZWZpbml0aW9ucy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUg dG8gY2FsY3VsYXRlIHRoZQorICogd2VpZ2h0ZWQgZWRpdCBkaXN0YW5jZSB3aXRoIGFyYml0cmFy eSB3ZWlnaHRpbmcuCisgKgorICogQGNvcHlyaWdodCAyMDE2IEtldmluIExvY2tlIDxrZXZpbkBr ZXZpbmxvY2tlLm5hbWU+CisgKiAgICAgICAgICAgIE1JVCBsaWNlbnNlIC0gc2VlIExJQ0VOU0Ug ZmlsZSBmb3IgZGV0YWlscworICovCisjaWZuZGVmIENDQU5fRURJVF9ESVNUQU5DRV9QQVJBTVNf SAorI2RlZmluZSBDQ0FOX0VESVRfRElTVEFOQ0VfUEFSQU1TX0gKKworI2lmbmRlZiBlZF9lbGVt CisjIGluY2x1ZGUgPHN0cmluZy5oPgkJLyogbWVtY2hyICovCisjZW5kaWYKKworI2lmbmRlZiBF RF9IQVNIX0VMRU0KKyMgaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBVQ0hBUl9NQVggKi8KKyNlbmRp ZgorCisjaWYgIWRlZmluZWQoRURfREVMX0NPU1QpICYmIFwKKwkJIWRlZmluZWQoRURfSU5TX0NP U1QpICYmIFwKKwkJIWRlZmluZWQoRURfU1VCX0NPU1QpICYmIFwKKwkJIWRlZmluZWQoRURfVFJB X0NPU1QpCisvKiogRGVmaW5lZCBpZiBjb3N0cyBhcmUgc3ltbWV0cmljLgorICogKGkuZS4gPGNv ZGU+ZGlzdGFuY2UoYSwgYikgPT0gZGlzdGFuY2UoYiwgYSkgZm9yYWxsIGEsYjwvY29kZT4pICov CisjIGRlZmluZSBFRF9DT1NUX0lTX1NZTU1FVFJJQworI2VuZGlmCisKKyNpZm5kZWYgRURfREVM X0NPU1QKKy8qKiBDb3N0IHRvIGRlbGV0ZSBlbGVtZW50IEBwIGUuICovCisjIGRlZmluZSBFRF9E RUxfQ09TVChlKSAxCisvKiogRGVmaW5lZCBpZiB0aGUgY29zdCB0byBkZWxldGUgaXMgdGhlIHNh bWUgZm9yIGFsbCBlbGVtZW50cy4gKi8KKyMgZGVmaW5lIEVEX0RFTF9DT1NUX0NPTlNUCisjZW5k aWYKKworI2lmbmRlZiBFRF9JTlNfQ09TVAorLyoqIENvc3QgdG8gaW5zZXJ0IGVsZW1lbnQgQHAg ZS4gKi8KKyMgZGVmaW5lIEVEX0lOU19DT1NUKGUpIDEKKy8qKiBEZWZpbmVkIGlmIHRoZSBjb3N0 IHRvIGluc2VydCBpcyB0aGUgc2FtZSBmb3IgYWxsIGVsZW1lbnRzLiAqLworIyBkZWZpbmUgRURf SU5TX0NPU1RfQ09OU1QKKyNlbmRpZgorCisjaWZuZGVmIEVEX1NVQl9DT1NUCisvKiogQ29zdCB0 byBzdWJzdGl0dXRlIGVsZW1lbnQgQHAgZiBmb3IgZWxlbWVudCBAcCBlIChpLmUuIHJlcGxhY2Ug QHAgZSB3aXRoCisgKiBAcCBmICkuCisgKgorICogQWxsIGFsZ29yaXRobXMgd2hpY2ggdXNlIHRo aXMgbWFjcm8gZXhwZWN0IHRoYXQgPGNvZGU+RURfU1VCX0NPU1QoZSwgZikgKworICogRURfU1VC X0NPU1QoZiwgZykgPj0gRURfU1VCX0NPU1QoZSwgZyk8L2NvZGU+LiAgVGhleSBkbyBub3QgY2hl Y2sgZm9yIGFueQorICogc3Vic3RpdHV0aW9uIGNoYWlucyBhbmQgd2lsbCBub3QgZmluZCBtaW5p bWFsIGRpc3RhbmNlcyB3aGVuIHRoaXMgYXNzdW1wdGlvbgorICogZG9lcyBub3QgaG9sZC4KKyAq CisgKiBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgPGNvZGU+RURfU1VCX0NPU1QoZSwg ZikgPj0gRURfREVMX0NPU1QoZSkgKworICogRURfSU5TX0NPU1QoZik8L2NvZGU+LiAgSWYgdGhp cyBpcyB0cnVlIGZvciBhbGwgQHAgZSBhbmQgQHAgZiwgY29uc2lkZXIKKyAqIHVzaW5nIGVkaXRf ZGlzdGFuY2VfbGNzKCkgaW5zdGVhZCBvZiBlZGl0X2Rpc3RhbmNlX2xldigpIHdoaWNoIGNhbGN1 bGF0ZXMKKyAqIHRoZSBzYW1lIHJlc3VsdCBtb3JlIHF1aWNrbHkgYnkgbm90IGNvbnNpZGVyaW5n IHN1YnN0aXR1dGlvbnMgd2hpY2ggYXJlCisgKiBuZXZlciBsZXNzIGNvc3RseSB0aGFuIGRlbGV0 ZSArIGluc2VydC4KKyAqLworIyBkZWZpbmUgRURfU1VCX0NPU1QoZSwgZikgMQorLyoqIERlZmlu ZWQgaWYgdGhlIGNvc3QgdG8gc3Vic3RpdHV0ZSBpcyB0aGUgc2FtZSBmb3IgYWxsIGVsZW1lbnQg cGFpcnMuICovCisjIGRlZmluZSBFRF9TVUJfQ09TVF9DT05TVAorI2VuZGlmCisKKyNpZm5kZWYg RURfVFJBX0NPU1QKKy8qKiBDb3N0IHRvIHRyYW5zcG9zZSBlbGVtZW50cyBAcCBlZiB0byBAcCBm ZS4KKyAqCisgKiBAYyBlZGl0X2Rpc3RhbmNlX2RsIHJlcXVpcmVzIDxjb2RlPjIgKiBFRF9UUkFf Q09TVChlLCBmKSA+PSBFRF9JTlNfQ09TVChnKSArCisgKiBFRF9ERUxfQ09TVChoKTwvY29kZT4g Zm9yIGFsbCBAYyBlLGYsZyxoLiAgU2VlIFRyYWNlIFRoZW9yZW0gMyBvZgorICogV2FnbmVyLUxv d3JhbmNlLiBAY2l0ZSBXYWduZXI3NQorICovCisjIGRlZmluZSBFRF9UUkFfQ09TVChlLCBmKSAx CisvKiogRGVmaW5lZCBpZiB0aGUgY29zdCB0byB0cmFuc3Bvc2UgaXMgdGhlIHNhbWUgZm9yIGFs bCBlbGVtZW50IHBhaXJzLiAqLworIyBkZWZpbmUgRURfVFJBX0NPU1RfQ09OU1QKKyNlbmRpZgor CisjaWYgZGVmaW5lZChET1hZR0VOKQorLyoqIE9wdGltaXplZCBhcnJheSBzZWFyY2ggZnVuY3Rp b24gZm9yIHNpbmdsZS1hcnJheS1oZWF2eSB3b3JrbG9hZHMuCisgKgorICogVGhlIGV4cHJlc3Np b24gZ2VuZXJhdGVkIGJ5IHRoaXMgbWFjcm8gbXVzdCBldmFsdWF0ZSB0byBAYyB0cnVlIGluIGEg Ym9vbGVhbgorICogY29udGV4dCB3aGVuIEBwIGVsZW0gaXMgY29udGFpbmVkIGluIHRoZSBmaXJz dCBAcCBsZW4gZWxlbWVudHMgb2YgQHAgYXJyIGFuZAorICogQGMgZmFsc2Ugb3RoZXJ3aXNlLiAg QHAgbGVuIGlzIGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDAuCisgKgorICogVGhpcyBt YWNybyBpcyBjdXJyZW50bHkgb25seSB1c2VkIHdoZW4gI0VEX0lOU19DT1NUX0NPTlNUIGFuZAor ICogI0VEX1NVQl9DT1NUX0NPTlNUIGFyZSBkZWZpbmVkLgorICoKKyAqIEBub3RlCisgKiBPbmx5 IGRlZmluZSB0aGlzIG1hY3JvIHdoZW4gdGhlIHNlYXJjaCBmdW5jdGlvbiBpcyBoaWdobHkgb3B0 aW1pemVkIGFuZCB3aGVuCisgKiBzaW5nbGUtZWxlbWVudCBhcnJheXMgYXJlIGV4cGVjdGVkIHRv IGJlIHBhc3NlZCBmcmVxdWVudGx5LCBiZWNhdXNlIGl0IGFkZHMKKyAqIGEgY29uZGl0aW9uYWwg YnJhbmNoIHRvIGVhY2ggZXhlY3V0aW9uIG9mIHRoZSBkaXN0YW5jZSBmdW5jdGlvbnMgd2l0aAor ICogbm9uLWVtcHR5IGFyZ3VtZW50cy4KKyAqLworIyBkZWZpbmUgRURfSEFTX0VMRU0oYXJyLCBl bGVtLCBsZW4pIChtZW1jaHIoYXJyLCBlbGVtLCBsZW4pICE9IE5VTEwpCisjZW5kaWYKKworI2lm bmRlZiBFRF9FTEVNX0VRVUFMCisvKiogQXJlIHR3byBlbGVtZW50cyBlcXVhbD8gKi8KKyMgZGVm aW5lIEVEX0VMRU1fRVFVQUwoZWxlbTEsIGVsZW0yKSAoZWxlbTEgPT0gZWxlbTIpCisjZW5kaWYK KworI2lmICFkZWZpbmVkKEVEX0hBU0hfRUxFTSkgJiYgIWRlZmluZWQoZWRfZWxlbSkKKy8qKiBI YXNoIGFuIGVsZW1lbnQgdG8gYSB1bmlxdWUgdmFsdWUgaW4gPGNvZGU+WzAsIEVEX0hBU0hfTUFY XTwvY29kZT4uCisgKgorICogTm90ZTogIFRoaXMgbW9kdWxlIGRvZXMgbm90IHVzZSBhICJyZWFs IiBkaWN0aW9uYXJ5LiAgSGFzaCBjb2xsaXNpb25zIGFyZQorICogbm90IGV4cGVjdGVkIG5vciBz dXBwb3J0ZWQuICBJZiBlbGVtZW50cyBjYW4gbm90IGJlIHVuaXF1ZWx5IG1hcHBlZCB0byBhCisg KiByZWFzb25hYmxlIHJhbmdlLCBjb25zaWRlciBpbXBsZW1lbnRpbmcgYSAicmVhbCIgZGljdGlv bmFyeS4KKyAqLworIyBkZWZpbmUgRURfSEFTSF9FTEVNKGUpICgodW5zaWduZWQgY2hhcillKQor LyoqIE1heGltdW0gdmFsdWUgdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSAjRURfSEFTSF9FTEVN ICovCisjIGRlZmluZSBFRF9IQVNIX01BWCBVQ0hBUl9NQVgKKy8qKiBDYW4gYW4gYXJyYXkgb2Yg I0VEX0hBU0hfTUFYIDo6ZWRfZGlzdCB2YWx1ZXMgYmUgc3RvcmVkIG9uIHRoZSBzdGFjaz8gKi8K KyMgZGVmaW5lIEVEX0hBU0hfT05fU1RBQ0sKKyNlbmRpZgorCisjaWZuZGVmIEVEX1NUQUNLX0VM RU1TCisvKiogTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCB3aWxsIGJlIGFsbG9jYXRl ZCBvbiB0aGUgc3RhY2suCisgKgorICogTm90ZTogVGhlIHRocmVzaG9sZCBkb2VzIG5vdCBuZWVk IHRvIGJlIHRpZ2h0IHNpbmNlIHdpdGgKKyAqIDxjb2RlPkVEX1NUQUNLX0VMRU1TID4gfjEwMDwv Y29kZT4gYWxnb3JpdGhtIGNvc3Qgd2lsbCBkb21pbmF0ZSBAYyBtYWxsb2MKKyAqIGNvc3QgYW55 d2F5LgorICovCisjIGRlZmluZSBFRF9TVEFDS19FTEVNUyA1MTIKKyNlbmRpZgorCisjZW5kaWYK ZGlmZiAtLWdpdCBhL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLXByaXZhdGUuaCBi L2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLXByaXZhdGUuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGZlOWNjCi0tLSAvZGV2L251bGwKKysrIGIvY2Nhbi9l ZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UtcHJpdmF0ZS5oCkBAIC0wLDAgKzEsODEgQEAKKy8q KiBAZmlsZQorICogUHJpdmF0ZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IHRoZSBl ZGl0X2Rpc3RhbmNlIGltcGxlbWVudGF0aW9uLgorICoKKyAqIEBjb3B5cmlnaHQgMjAxNiBLZXZp biBMb2NrZSA8a2V2aW5Aa2V2aW5sb2NrZS5uYW1lPgorICogICAgICAgICAgICBNSVQgbGljZW5z ZSAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMKKyAqLworI2lmbmRlZiBDQ0FOX0VESVRf RElTVEFOQ0VfUFJJVkFURV9ICisjZGVmaW5lIENDQU5fRURJVF9ESVNUQU5DRV9QUklWQVRFX0gK KworI2luY2x1ZGUgImVkaXRfZGlzdGFuY2UuaCIKKworLyoqIFVuc2FmZSAoYXJndW1lbnRzIGV2 YWx1YXRlZCBtdWx0aXBsZSB0aW1lcykgMy12YWx1ZSBtaW5pbXVtLiAqLworI2RlZmluZSBFRF9N SU4yKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisKKy8qKiBVbnNhZmUgKGFyZ3VtZW50 cyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMpIDMtdmFsdWUgbWluaW11bS4gKi8KKyNkZWZpbmUg RURfTUlOMyhhLCBiLCBjKSBcCisJKChhKSA8IChiKSA/ICgoYSkgPCAoYykgPyAoYSkgOiAoYykp IDogKChiKSA8IChjKSA/IChiKSA6IChjKSkpCisKKy8qKiBTd2FwIHZhcmlhYmxlcyBAcCBhIGFu ZCBAcCBiIG9mIGEgZ2l2ZW4gdHlwZS4gKi8KKyNkZWZpbmUgRURfU1dBUChhLCBiLCBUeXBlKSBc CisJZG8geyBUeXBlIHN3YXB0bXAgPSBhOyBhID0gYjsgYiA9IHN3YXB0bXA7IH0gd2hpbGUgKDAp CisKKy8qKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdHJpYW5ndWxhciBtYXRyaXggKHdpdGggZGlh Z29uYWwpLgorICogQHBhcmFtIHJjIE51bWJlciBvZiByb3dzIChvciBjb2x1bW5zLCBzaW5jZSBz cXVhcmUpLiAqLworI2RlZmluZSBFRF9UTUFUX1NJWkUocmMpICgoKHJjKSArIDEpICogKHJjKSAv IDIpCisKKy8qKiBJbmRleCBvZiBlbGVtZW50IGluIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LiAq LworI2RlZmluZSBFRF9UTUFUX0lORChyLCBjKSAoRURfVE1BVF9TSVpFKHIpICsgYykKKworLyoq CisgKiBDYWxjdWxhdGVzIG5vbi10cml2aWFsIExDUyBkaXN0YW5jZSAoZm9yIGludGVybmFsIHVz ZSkuCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHNyYyBTb3VyY2UgYXJyYXkgdG8gY2FsY3VsYXRl IGRpc3RhbmNlIGZyb20gKHNtYWxsZXIgd2hlbiBzeW1tZXRyaWMpLgorICogQHBhcmFtIHNsZW4g TnVtYmVyIG9mIGVsZW1lbnRzIGluIEBwIHNyYyB0byBjb25zaWRlciAobXVzdCBiZSA+IDApLgor ICogQHBhcmFtIHRndCBUYXJnZXQgYXJyYXkgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIHRvLgorICog QHBhcmFtIHRsZW4gTnVtYmVyIG9mIGVsZW1lbnRzIGluIEBwIHRndCB0byBjb25zaWRlciAobXVz dCBiZSA+IDApLgorICogQHJldHVybiBMQ1MgZGlzdGFuY2UgZnJvbSBAcCBzcmNbMC4uc2xlbi0x XSB0byBAcCB0Z3RbMC4udGxlbi0xXS4KKyAqLworZWRfZGlzdCBlZGl0X2Rpc3RhbmNlX2xjcyhj b25zdCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJCSAgY29uc3QgZWRfZWxlbSAqdGd0 LCBlZF9zaXplIHRsZW4pOworCisvKioKKyAqIENhbGN1bGF0ZXMgbm9uLXRyaXZpYWwgTGV2ZW5z aHRlaW4gZGlzdGFuY2UgKGZvciBpbnRlcm5hbCB1c2UpLgorICogQHByaXZhdGUKKyAqIEBwYXJh bSBzcmMgU291cmNlIGFycmF5IHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSBmcm9tIChzbWFsbGVyIHdo ZW4gc3ltbWV0cmljKS4KKyAqIEBwYXJhbSBzbGVuIE51bWJlciBvZiBlbGVtZW50cyBpbiBAcCBz cmMgdG8gY29uc2lkZXIgKG11c3QgYmUgPiAwKS4KKyAqIEBwYXJhbSB0Z3QgVGFyZ2V0IGFycmF5 IHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSB0by4KKyAqIEBwYXJhbSB0bGVuIE51bWJlciBvZiBlbGVt ZW50cyBpbiBAcCB0Z3QgdG8gY29uc2lkZXIgKG11c3QgYmUgPiAwKS4KKyAqIEByZXR1cm4gTGV2 ZW5zaHRlaW4gZGlzdGFuY2UgZnJvbSBAcCBzcmNbMC4uc2xlbi0xXSB0byBAcCB0Z3RbMC4udGxl bi0xXS4KKyAqLworZWRfZGlzdCBlZGl0X2Rpc3RhbmNlX2xldihjb25zdCBlZF9lbGVtICpzcmMs IGVkX3NpemUgc2xlbiwKKwkJCSAgY29uc3QgZWRfZWxlbSAqdGd0LCBlZF9zaXplIHRsZW4pOwor CisvKioKKyAqIENhbGN1bGF0ZXMgbm9uLXRyaXZpYWwgUmVzdHJpY3RlZCBEYW1lcmF1LUxldmVu c2h0ZWluIGRpc3RhbmNlIChmb3IgaW50ZXJuYWwKKyAqIHVzZSkuCisgKiBAcHJpdmF0ZQorICog QHBhcmFtIHNyYyBTb3VyY2UgYXJyYXkgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIGZyb20gKHNtYWxs ZXIgd2hlbiBzeW1tZXRyaWMpLgorICogQHBhcmFtIHNsZW4gTnVtYmVyIG9mIGVsZW1lbnRzIGlu IEBwIHNyYyB0byBjb25zaWRlciAobXVzdCBiZSA+IDApLgorICogQHBhcmFtIHRndCBUYXJnZXQg YXJyYXkgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIHRvLgorICogQHBhcmFtIHRsZW4gTnVtYmVyIG9m IGVsZW1lbnRzIGluIEBwIHRndCB0byBjb25zaWRlciAobXVzdCBiZSA+IDApLgorICogQHJldHVy biBSZXN0cmljdGVkIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgZnJvbSBAcCBzcmNbMC4u c2xlbi0xXSB0bworICogQHAgdGd0WzAuLnRsZW4tMV0uCisgKi8KK2VkX2Rpc3QgZWRpdF9kaXN0 YW5jZV9yZGwoY29uc3QgZWRfZWxlbSAqc3JjLCBlZF9zaXplIHNsZW4sCisJCQkgIGNvbnN0IGVk X2VsZW0gKnRndCwgZWRfc2l6ZSB0bGVuKTsKKworLyoqCisgKiBDYWxjdWxhdGVzIG5vbi10cml2 aWFsIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgKGZvciBpbnRlcm5hbCB1c2UpLgorICog QHByaXZhdGUKKyAqIEBwYXJhbSBzcmMgU291cmNlIGFycmF5IHRvIGNhbGN1bGF0ZSBkaXN0YW5j ZSBmcm9tIChzbWFsbGVyIHdoZW4gc3ltbWV0cmljKS4KKyAqIEBwYXJhbSBzbGVuIE51bWJlciBv ZiBlbGVtZW50cyBpbiBAcCBzcmMgdG8gY29uc2lkZXIgKG11c3QgYmUgPiAwKS4KKyAqIEBwYXJh bSB0Z3QgVGFyZ2V0IGFycmF5IHRvIGNhbGN1bGF0ZSBkaXN0YW5jZSB0by4KKyAqIEBwYXJhbSB0 bGVuIE51bWJlciBvZiBlbGVtZW50cyBpbiBAcCB0Z3QgdG8gY29uc2lkZXIgKG11c3QgYmUgPiAw KS4KKyAqIEByZXR1cm4gRGFtZXJhdS1MZXZlbnNodGVpbiBkaXN0YW5jZSBmcm9tIEBwIHNyY1sw Li5zbGVuLTFdIHRvCisgKiBAcCB0Z3RbMC4udGxlbi0xXS4KKyAqLworZWRfZGlzdCBlZGl0X2Rp c3RhbmNlX2RsKGNvbnN0IGVkX2VsZW0gKnNyYywgZWRfc2l6ZSBzbGVuLAorCQkJIGNvbnN0IGVk X2VsZW0gKnRndCwgZWRfc2l6ZSB0bGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jY2FuL2Vk aXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZS5iaWIgYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9k aXN0YW5jZS5iaWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MDMxNAot LS0gL2Rldi9udWxsCisrKyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmJpYgpA QCAtMCwwICsxLDU3IEBACitAYXJ0aWNsZXtCb3l0c292MTEsCisgIGRvaSA9IHsxMC4xMTQ1LzE5 NjMxOTAuMTk2MzE5MX0sCisgIHllYXIgPSB7MjAxMX0sCisgIG1vbnRoID0ge21heX0sCisgIHB1 Ymxpc2hlciA9IHtBc3NvY2lhdGlvbiBmb3IgQ29tcHV0aW5nIE1hY2hpbmVyeSAoe0FDTX0pfSwK KyAgdm9sdW1lID0gezE2fSwKKyAgcGFnZXMgPSB7MX0sCisgIGF1dGhvciA9IHtMZW9uaWQgQm95 dHNvdn0sCisgIHRpdGxlID0ge0luZGV4aW5nIG1ldGhvZHMgZm9yIGFwcHJveGltYXRlIGRpY3Rp b25hcnkgc2VhcmNoaW5nfSwKKyAgam91cm5hbCA9IHtKb3VybmFsIG9mIEV4cGVyaW1lbnRhbCBB bGdvcml0aG1pY3N9Cit9CitAYXJ0aWNsZXtEYW1lcmF1NjQsCisgIGRvaSA9IHsxMC4xMTQ1LzM2 Mzk1OC4zNjM5OTR9LAorICB5ZWFyID0gezE5NjR9LAorICBtb250aCA9IHttYXJ9LAorICBwdWJs aXNoZXIgPSB7QXNzb2NpYXRpb24gZm9yIENvbXB1dGluZyBNYWNoaW5lcnkgKHtBQ019KX0sCisg IHZvbHVtZSA9IHs3fSwKKyAgbnVtYmVyID0gezN9LAorICBwYWdlcyA9IHsxNzEtLTE3Nn0sCisg IGF1dGhvciA9IHtGcmVkIEouIERhbWVyYXV9LAorICB0aXRsZSA9IHtBIHRlY2huaXF1ZSBmb3Ig Y29tcHV0ZXIgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uIG9mIHNwZWxsaW5nIGVycm9yc30sCisg IGpvdXJuYWwgPSB7Q29tbXVuaWNhdGlvbnMgb2YgdGhlIHtBQ019fQorfQorQGlucHJvY2VlZGlu Z3N7TGV2ZW5zaHRlaW42NiwKKyAgdGl0bGUgPSB7QmluYXJ5IGNvZGVzIGNhcGFibGUgb2YgY29y cmVjdGluZyBkZWxldGlvbnMsIGluc2VydGlvbnMgYW5kIHJldmVyc2Fsc30sCisgIGF1dGhvciA9 IHtWbGFkaW1pciBJLiBMZXZlbnNodGVpbn0sCisgIGJvb2t0aXRsZSA9IHtTb3ZpZXQgUGh5c2lj cyBEb2tsYWR5fSwKKyAgdm9sdW1lID0gezEwfSwKKyAgbnVtYmVyID0gezh9LAorICBwYWdlcyA9 IHs3MDctLTcxMH0sCisgIHllYXIgPSB7MTk2Nn0sCisgIG1vbnRoID0ge2ZlYn0KK30KK0BhcnRp Y2xle1dhZ25lcjc0LAorICBkb2kgPSB7MTAuMTE0NS8zMjE3OTYuMzIxODExfSwKKyAgeWVhciA9 IHsxOTc0fSwKKyAgbW9udGggPSB7amFufSwKKyAgcHVibGlzaGVyID0ge0Fzc29jaWF0aW9uIGZv ciBDb21wdXRpbmcgTWFjaGluZXJ5ICh7QUNNfSl9LAorICB2b2x1bWUgPSB7MjF9LAorICBudW1i ZXIgPSB7MX0sCisgIHBhZ2VzID0gezE2OC0tMTczfSwKKyAgYXV0aG9yID0ge1JvYmVydCBBLiBX YWduZXIgYW5kIE1pY2hhZWwgSi4gRmlzY2hlcn0sCisgIHRpdGxlID0ge1RoZSBTdHJpbmctdG8t U3RyaW5nIENvcnJlY3Rpb24gUHJvYmxlbX0sCisgIGpvdXJuYWwgPSB7Sm91cm5hbCBvZiB0aGUg e0FDTX19Cit9CitAYXJ0aWNsZXtXYWduZXI3NSwKKyAgdGl0bGUgPSB7QW4gRXh0ZW5zaW9uIG9m IHRoZSBTdHJpbmctdG8tU3RyaW5nIENvcnJlY3Rpb24gUHJvYmxlbX0sCisgIGF1dGhvciA9IHtS b2JlcnQgQS4gV2FnbmVyIGFuZCBSb3kgTG93cmFuY2V9LAorICBqb3VybmFsID0ge0pvdXJuYWwg b2YgdGhlIHtBQ019fSwKKyAgdm9sdW1lID0gezIyfSwKKyAgbnVtYmVyID0gezJ9LAorICBwYWdl cyA9IHsxNzctLTE4M30sCisgIHllYXIgPSB7MTk3NX0sCisgIG1vbnRoID0ge2Fwcn0sCisgIHB1 Ymxpc2hlciA9IHtBc3NvY2lhdGlvbiBmb3IgQ29tcHV0aW5nIE1hY2hpbmVyeSAoe0FDTX0pfSwK KyAgZG9pID0gezEwLjExNDUvMzIxODc5LjMyMTg4MH0KK30KZGlmZiAtLWdpdCBhL2NjYW4vZWRp dF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmMgYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0 YW5jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzc5ZDAKLS0tIC9k ZXYvbnVsbAorKysgYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZS5jCkBAIC0wLDAg KzEsMTE2IEBACisvKiogQGZpbGUKKyAqIERlZmluZXMgc2hhcmVkIGVkaXQgZGlzdGFuY2UgZnVu Y3Rpb25zLgorICoKKyAqIEBjb3B5cmlnaHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5s b2NrZS5uYW1lPgorICogICAgICAgICAgICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUg Zm9yIGRldGFpbHMKKyAqLworI2luY2x1ZGUgImVkaXRfZGlzdGFuY2UtcGFyYW1zLmgiCisjaW5j bHVkZSAiZWRpdF9kaXN0YW5jZS1wcml2YXRlLmgiCisKK2VkX2Rpc3QgZWRpdF9kaXN0YW5jZShj b25zdCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJICAgICAgY29uc3QgZWRfZWxlbSAq dGd0LCBlZF9zaXplIHRsZW4sIGVudW0gZWRfbWVhc3VyZSBtZWFzdXJlKQoreworCS8qIFJlbW92 ZSBjb21tb24gcHJlZml4LiAqLworCXdoaWxlIChzbGVuID4gMCAmJiB0bGVuID4gMCAmJiBFRF9F TEVNX0VRVUFMKHNyY1swXSwgdGd0WzBdKSkgeworCQkrK3NyYzsKKwkJKyt0Z3Q7CisJCS0tc2xl bjsKKwkJLS10bGVuOworCX0KKworCS8qIFJlbW92ZSBjb21tb24gc3VmZml4LiAqLworCXdoaWxl IChzbGVuID4gMCAmJiB0bGVuID4gMCAmJgorCSAgICAgICBFRF9FTEVNX0VRVUFMKHNyY1tzbGVu IC0gMV0sIHRndFt0bGVuIC0gMV0pKSB7CisJCS0tc2xlbjsKKwkJLS10bGVuOworCX0KKworI2lm IGRlZmluZWQoRURfQ09TVF9JU19TWU1NRVRSSUMpCisJLyogVXNlIHNtYWxsZXIgYXJyYXkgZm9y IHNyYy4gKi8KKwlpZiAoc2xlbiA+IHRsZW4pIHsKKwkJRURfU1dBUChzcmMsIHRndCwgY29uc3Qg ZWRfZWxlbSAqKTsKKwkJRURfU1dBUChzbGVuLCB0bGVuLCBlZF9zaXplKTsKKwl9CisjZW5kaWYK KworCS8qIEVhcmx5IHJldHVybiB3aGVuIGFsbCBpbnNlcnRpb25zLiAqLworCWlmIChzbGVuID09 IDApIHsKKyNpZmRlZiBFRF9JTlNfQ09TVF9DT05TVAorCQlyZXR1cm4gKGVkX2Rpc3QpdGxlbiAq RURfSU5TX0NPU1QoKTsKKyNlbHNlCisJCWVkX2Rpc3QgcmVzdWx0ID0gMDsKKwkJZm9yIChlZF9z aXplIGkgPSAwOyBpIDwgdGxlbjsgKytpKSB7CisJCQlyZXN1bHQgKz0gRURfSU5TX0NPU1QodGd0 W2ldKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworI2VuZGlmCisJfQorI2lmbmRlZiBFRF9DT1NU X0lTX1NZTU1FVFJJQworCS8qIEVhcmx5IHJldHVybiB3aGVuIGFsbCBkZWxldGlvbnMuICovCisJ aWYgKHRsZW4gPT0gMCkgeworIyBpZmRlZiBFRF9ERUxfQ09TVF9DT05TVAorCQlyZXR1cm4gKGVk X2Rpc3Qpc2xlbiAqRURfREVMX0NPU1QoKTsKKyMgZWxzZQorCQllZF9kaXN0IHJlc3VsdCA9IDA7 CisJCWZvciAoZWRfc2l6ZSBpID0gMDsgaSA8IHNsZW47ICsraSkgeworCQkJcmVzdWx0ICs9IEVE X0RFTF9DT1NUKHNyY1tpXSk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKyMgZW5kaWYKKwl9Cisj ZW5kaWYKKworI2lmIGRlZmluZWQoRURfSEFTX0VMRU0pICYmIFwKKwkJZGVmaW5lZChFRF9JTlNf Q09TVF9DT05TVCkgJiYgXAorCQlkZWZpbmVkKEVEX1NVQl9DT1NUX0NPTlNUKQorCS8qIEZhc3Qg c2VhcmNoIGZvciBzaW5nbGUtZWxlbWVudCBzb3VyY2UuICovCisJaWYgKHNsZW4gPT0gMSkgewor CQkvKiBBbHdheXMgdGxlbiAtIDEgaW5zZXJ0cyAob2Ygbm9uLXNyYyBlbGVtZW50cykuICovCisJ CWVkX2Rpc3QgcmVzdWx0ID0gKGVkX2Rpc3QpKHRsZW4gLSAxKSAqIEVEX0lOU19DT1NUKCk7CisJ CWlmICghRURfSEFTX0VMRU0odGd0LCBzcmNbMF0sIHRsZW4pKSB7CisJCQlpZiAobWVhc3VyZSA9 PSBFRElUX0RJU1RBTkNFX0xDUykgeworCQkJCS8qIElmIHNyYyBpcyBub3QgcHJlc2VudCwgZGVs ZXRlICsgaW5zZXJ0LiAqLworCQkJCXJlc3VsdCArPSBFRF9ERUxfQ09TVChzcmNbMF0pICsgRURf SU5TX0NPU1QoKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogSWYgc3JjIGlzIG5vdCBwcmVzZW50LCBz dWJzdGl0dXRlIGl0IG91dC4gKi8KKwkJCQlyZXN1bHQgKz0gRURfU1VCX0NPU1QoLCk7CisJCQl9 CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVEX0NP U1RfSVNfU1lNTUVUUklDKSAmJiBcCisJCWRlZmluZWQoRURfSEFTX0VMRU0pICYmIFwKKwkJZGVm aW5lZChFRF9ERUxfQ09TVF9DT05TVCkgJiYgXAorCQlkZWZpbmVkKEVEX1NVQl9DT1NUX0NPTlNU KQorCS8qIEZhc3Qgc2VhcmNoIGZvciBzaW5nbGUtZWxlbWVudCB0YXJnZXQuICovCisJaWYgKHRs ZW4gPT0gMSkgeworCQkvKiBBbHdheXMgc2xlbiAtIDEgZGVsZXRlcyAob2Ygbm9uLXRndCBlbGVt ZW50cykuICovCisJCWVkX2Rpc3QgcmVzdWx0ID0gKGVkX2Rpc3QpKHNsZW4gLSAxKSAqIEVEX0RF TF9DT1NUKCk7CisJCWlmICghRURfSEFTX0VMRU0oc3JjLCB0Z3RbMF0sIHNsZW4pKSB7CisJCQlp ZiAobWVhc3VyZSA9PSBFRElUX0RJU1RBTkNFX0xDUykgeworCQkJCS8qIElmIHRndCBpcyBub3Qg cHJlc2VudCwgZGVsZXRlICsgaW5zZXJ0LiAqLworCQkJCXJlc3VsdCArPSBFRF9JTlNfQ09TVCh0 Z3RbMF0pICsgRURfREVMX0NPU1QoKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogSWYgdGd0IGlzIG5v dCBwcmVzZW50LCBzdWJzdGl0dXRlIGl0IG91dC4gKi8KKwkJCQlyZXN1bHQgKz0gRURfU1VCX0NP U1QoLCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisjZW5kaWYKKworCXN3aXRj aCAobWVhc3VyZSkgeworCWNhc2UgRURJVF9ESVNUQU5DRV9MQ1M6CisJCXJldHVybiBlZGl0X2Rp c3RhbmNlX2xjcyhzcmMsIHNsZW4sIHRndCwgdGxlbik7CisJY2FzZSBFRElUX0RJU1RBTkNFX0xF VjoKKwkJcmV0dXJuIGVkaXRfZGlzdGFuY2VfbGV2KHNyYywgc2xlbiwgdGd0LCB0bGVuKTsKKwlj YXNlIEVESVRfRElTVEFOQ0VfUkRMOgorCQlyZXR1cm4gZWRpdF9kaXN0YW5jZV9yZGwoc3JjLCBz bGVuLCB0Z3QsIHRsZW4pOworCWNhc2UgRURJVF9ESVNUQU5DRV9ETDoKKwkJcmV0dXJuIGVkaXRf ZGlzdGFuY2VfZGwoc3JjLCBzbGVuLCB0Z3QsIHRsZW4pOworCX0KKworCXJldHVybiAoZWRfZGlz dCktMTsKK30KZGlmZiAtLWdpdCBhL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmgg Yi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjk4MmI5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2VkaXRfZGlz dGFuY2UvZWRpdF9kaXN0YW5jZS5oCkBAIC0wLDAgKzEsMTMxIEBACisvKiogQGZpbGUKKyAqIE1h aW4gaGVhZGVyIGZpbGUgZm9yIGVkaXRfZGlzdGFuY2Ugd2hpY2ggZGVmaW5lcyB0aGUgbW9kdWxl IEFQSS4KKyAqCisgKiBAY29weXJpZ2h0IDIwMTYgS2V2aW4gTG9ja2UgPGtldmluQGtldmlubG9j a2UubmFtZT4KKyAqICAgICAgICAgICAgTUlUIGxpY2Vuc2UgLSBzZWUgTElDRU5TRSBmaWxlIGZv ciBkZXRhaWxzCisgKi8KKyNpZm5kZWYgQ0NBTl9FRElUX0RJU1RBTkNFX0gKKyNkZWZpbmUgQ0NB Tl9FRElUX0RJU1RBTkNFX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgkJLyogc2l6ZV90ICovCisK KyNpZm5kZWYgZWRfZGlzdAorLyoqCisgKiBlZF9kaXN0IC0gVHlwZSBpbiB3aGljaCB0aGUgZWRp dCBkaXN0YW5jZSBpcyBleHByZXNzZWQuCisgKgorICogVGhlIG5hbWUgQGMgZWRfZGlzdCBjYW4g YmUgZGVmaW5lZCB0byBhbm90aGVyIGFsZ2VicmFpYyB0eXBlIChvciB0aGlzCisgKiB0eXBlZGVm IGNhbiBiZSBlZGl0ZWQpIHdoZW4gY29tcGlsaW5nIHRoaXMgbW9kdWxlLgorICovCit0eXBlZGVm IHVuc2lnbmVkIGludCBlZF9kaXN0OworI2VuZGlmCisKKyNpZm5kZWYgZWRfZWxlbQorLyoqCisg KiBlZF9lbGVtIC0gRWxlbWVudCB0eXBlIG9mIGFycmF5cyBmb3Igd2hpY2ggdGhlIGVkaXQgZGlz dGFuY2UgaXMgY2FsY3VsYXRlZC4KKyAqCisgKiBDaGFuZ2luZyB0aGlzIHR5cGUgb2Z0ZW4gcmVx dWlyZXMgY2hhbmdpbmcgI0VEX0hBU19FTEVNLCAjRURfSEFTSF9FTEVNLCBhbmQKKyAqICNFRF9I QVNIX01BWC4gIEl0IHJlcXVpcmVzIGNoYW5naW5nICNFRF9FTEVNX0VRVUFMIGZvciBub24tcHJp bWl0aXZlIHR5cGVzLgorICogVGhlc2UgY2FuIGJlIGNoYW5nZWQgaW4gZWRpdF9kaXN0YW5jZS1w YXJhbXMuaCBvciBkZWZpbmVkIGV4dGVybmFsbHkuCisgKi8KK3R5cGVkZWYgY2hhciBlZF9lbGVt OworI2VuZGlmCisKKyNpZm5kZWYgZWRfc2l6ZQorLyoqCisgKiBlZF9zaXplIC0gVHlwZSBpbiB3 aGljaCB0aGUgYXJyYXkgc2l6ZSBpcyBleHByZXNzZWQuCisgKgorICogVGhlIG5hbWUgQGMgZWRf c2l6ZSBjYW4gYmUgZGVmaW5lZCB0byBhbm90aGVyIGFsZ2VicmFpYyB0eXBlIChvciB0aGlzCisg KiB0eXBlZGVmIGNhbiBiZSBlZGl0ZWQpIHdoZW4gY29tcGlsaW5nIHRoaXMgbW9kdWxlLiAgSWYg QGMgZWRfc2l6ZSBpcyBhCisgKiBzaWduZWQgdHlwZSwgdGhlIGNhbGxlciBtdXN0IGVuc3VyZSBw YXNzZWQgdmFsdWVzIGFyZSBub24tbmVnYXRpdmUuCisgKiBAYyBlZF9zaXplIG11c3QgYmUgbGFy Z2UgZW5vdWdoIHRvIGhvbGQgQGMgbWF4KHNsZW4sdGxlbikrMiwgaXQgZG9lcyBub3QKKyAqIG5l ZWQgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgQGMgc2xlbip0bGVuLgorICoKKyAqIE5vdGU6 IEBjIGVkX3NpemUgaXMgb25seSBsaWtlbHkgdG8gaGF2ZSBhIG5vdGljZWFibGUgaW1wYWN0IGlu CisgKiBlZGl0X2Rpc3RhbmNlX2RsKCkgd2hpY2ggbWFpbnRhaW5zIGFuIGFycmF5IG9mIEBjICNF RF9IQVNIX01BWCsxIDo6ZWRfc2l6ZQorICogdmFsdWVzLgorICovCit0eXBlZGVmIHVuc2lnbmVk IGludCBlZF9zaXplOworI2VuZGlmCisKKy8qKgorICogZWRfbWVhc3VyZSAtIFN1cHBvcnRlZCBl ZGl0IGRpc3RhbmNlIG1lYXN1cmVzLgorICovCitlbnVtIGVkX21lYXN1cmUgeworCS8qKgorCSAq IExvbmdlc3QgQ29tbW9uIFN1YnNlcXVlbmNlIChMQ1MpIGRpc3RhbmNlLgorCSAqCisJICogVGhl IExDUyBkaXN0YW5jZSBpcyBhbiBlZGl0IGRpc3RhbmNlIG1lYXN1cmVkIGJ5IHRoZSBudW1iZXIg b2YKKwkgKiBpbnNlcnQgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIG5lY2Vzc2FyeSB0byB0dXJuIEBw IHNyYyBpbnRvIEBwIHRndC4KKwkgKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyBhbiBp dGVyYXRpdmUgdmVyc2lvbiBvZiB0aGUgV2FnbmVyLUZpc2NoZXIKKwkgKiBhbGdvcml0aG0gQGNp dGUgV2FnbmVyNzQgd2hpY2ggcmVxdWlyZXMgPGNvZGU+TyhzbGVuICogdGxlbik8L2NvZGU+CisJ ICogdGltZSBhbmQgPGNvZGU+bWluKHNsZW4sIHRsZW4pICsgMTwvY29kZT4gc3BhY2UuCisJICov CisJRURJVF9ESVNUQU5DRV9MQ1MgPSAxLAorCS8qKgorCSAqIExldmVuc2h0ZWluIGRpc3RhbmNl LgorCSAqCisJICogVGhlIExldmVuc2h0ZWluIGRpc3RhbmNlIGlzIGFuIGVkaXQgZGlzdGFuY2Ug bWVhc3VyZWQgYnkgdGhlIG51bWJlcgorCSAqIG9mIGluc2VydCwgZGVsZXRlLCBhbmQgc3Vic3Rp dHV0ZSBvcGVyYXRpb25zIG5lY2Vzc2FyeSB0byB0dXJuCisJICogQHAgc3JjIGludG8gQHAgdGd0 IGFzIGRlc2NyaWJlZCBieSBWbGFkaW1pciBMZXZlbnNodGVpbi4KKwkgKiBAY2l0ZSBMZXZlbnNo dGVpbjY2CisJICoKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgYSBtb2RpZmllZCB2ZXJz aW9uIG9mIHRoZSBXYWduZXItRmlzY2hlcgorCSAqIGFsZ29yaXRobSBAY2l0ZSBXYWduZXI3NCB3 aGljaCByZXF1aXJlcyA8Y29kZT5PKHNsZW4gKiB0bGVuKTwvY29kZT4KKwkgKiB0aW1lIGFuZCBv bmx5IDxjb2RlPm1pbihzbGVuLCB0bGVuKSArIDE8L2NvZGU+IHNwYWNlLgorCSAqLworCUVESVRf RElTVEFOQ0VfTEVWLAorCS8qKgorCSAqIFJlc3RyaWN0ZWQgRGFtZXJhdS1MZXZlbnNodGVpbiBk aXN0YW5jZSAoYWthIE9wdGltYWwgU3RyaW5nCisJICogQWxpZ25tZW50IGRpc3RhbmNlKS4KKwkg KgorCSAqIFRoZSBSZXN0cmljdGVkIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgaXMgYW4g ZWRpdCBkaXN0YW5jZQorCSAqIG1lYXN1cmVkIGJ5IHRoZSBudW1iZXIgb2YgaW5zZXJ0LCBkZWxl dGUsIHN1YnN0aXR1dGUsIGFuZCB0cmFuc3Bvc2UKKwkgKiBvcGVyYXRpb25zIG5lY2Vzc2FyeSB0 byB0dXJuIEBwIHNyYyBpbnRvIEBwIHRndCB3aXRoIHRoZSByZXN0cmljdGlvbgorCSAqIHRoYXQg bm8gc3Vic3RyaW5nIGlzIGVkaXRlZCBtb3JlIHRoYW4gb25jZSAoZXF1aXZhbGVudGx5LCB0aGF0 IG5vCisJICogZWRpdHMgb3ZlcmxhcCkuIEBjaXRlIEJveXRzb3YxMQorCSAqCisJICogVGhpcyBp bXBsZW1lbnRhdGlvbiB1c2VzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgV2FnbmVyLUZpc2No ZXIKKwkgKiBhbGdvcml0aG0gQGNpdGUgV2FnbmVyNzQgd2hpY2ggcmVxdWlyZXMgPGNvZGU+Tyhz bGVuICogdGxlbik8L2NvZGU+CisJICogdGltZSBhbmQgb25seSA8Y29kZT4yICogbWluKHNsZW4s IHRsZW4pICsgMjwvY29kZT4gc3BhY2UuCisJICovCisJRURJVF9ESVNUQU5DRV9SREwsCisJLyoq CisJICogRGFtZXJhdS1MZXZlbnNodGVpbiBkaXN0YW5jZS4KKwkgKgorCSAqIFRoZSBEYW1lcmF1 LUxldmVuc2h0ZWluIGRpc3RhbmNlIGlzIGFuIGVkaXQgZGlzdGFuY2UgbWVhc3VyZWQgYnkgdGhl CisJICogbnVtYmVyIG9mIGluc2VydCwgZGVsZXRlLCBzdWJzdGl0dXRlLCBhbmQgdHJhbnNwb3Nl IG9wZXJhdGlvbnMKKwkgKiBuZWNlc3NhcnkgdG8gdHVybiBAcCBzcmMgaW50byBAcCB0Z3QgLiBA Y2l0ZSBEYW1lcmF1NjQKKwkgKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgTG93 cmFuY2UtV2FnbmVyIGFsZ29yaXRobSBAY2l0ZSBXYWduZXI3NQorCSAqIHdoaWNoIHRha2VzIDxj b2RlPk8oc2xlbiAqIHRsZW4pPC9jb2RlPiB0aW1lIGFuZAorCSAqIDxjb2RlPk8oc2xlbiAqIHRs ZW4pPC9jb2RlPiBzcGFjZS4KKwkgKi8KKwlFRElUX0RJU1RBTkNFX0RMLAorfTsKKworLyoqCisg KiBlZGl0X2Rpc3RhbmNlIC0gQ2FsY3VsYXRlcyB0aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIHR3 byBhcnJheXMuCisgKgorICogQHBhcmFtIHNyYyBTb3VyY2UgYXJyYXkgdG8gY2FsY3VsYXRlIGRp c3RhbmNlIGZyb20uCisgKiBAcGFyYW0gc2xlbiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gQHAgc3Jj IHRvIGNvbnNpZGVyLgorICogQHBhcmFtIHRndCBUYXJnZXQgYXJyYXkgdG8gY2FsY3VsYXRlIGRp c3RhbmNlIHRvLgorICogQHBhcmFtIHRsZW4gTnVtYmVyIG9mIGVsZW1lbnRzIGluIEBwIHRndCB0 byBjb25zaWRlci4KKyAqIEBwYXJhbSBtZWFzdXJlIEVkaXQgZGlzdGFuY2UgbWVhc3VyZSB0byBj YWxjdWxhdGUuCisgKiBAcmV0dXJuIEVkaXQgZGlzdGFuY2UgZnJvbSBAcCBzcmNbMC4uc2xlbi0x XSB0byBAcCB0Z3RbMC4udGxlbi0xXS4gIChpLmUuCisgKiBUaGUgbWluaW1hbCBzdW0gb2YgdGhl IHdlaWdodHMgb2YgdGhlIG9wZXJhdGlvbnMgbmVjZXNzYXJ5IHRvIGNvbnZlcnQKKyAqIEBwIHNy Y1swLi5zbGVuLTFdIGludG8gQHAgdGd0WzAuLnRsZW4tMV0uKQorICoKKyAqIEBjb2RlCisgKiBF eGFtcGxlOgorICogY29uc3QgY2hhciAqc291cmNlID0gImtpdHRlbiI7CisgKiBjb25zdCBjaGFy ICp0YXJnZXQgPSAic2l0dGluZyI7CisgKiBhc3NlcnQoZWRpdF9kaXN0YW5jZShzb3VyY2UsIHN0 cmxlbihzb3VyY2UpLAorICogICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBzdHJsZW4odGFy Z2V0KSwKKyAqICAgICAgICAgICAgICAgICAgICAgIEVESVRfRElTVEFOQ0VfREwpID09IDMpOwor ICogRXhhbXBsZV9FbmQ6IEBlbmRjb2RlCisgKi8KK2VkX2Rpc3QgZWRpdF9kaXN0YW5jZShjb25z dCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJICAgICAgY29uc3QgZWRfZWxlbSAqdGd0 LCBlZF9zaXplIHRsZW4sCisJCSAgICAgIGVudW0gZWRfbWVhc3VyZSBtZWFzdXJlKTsKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvY2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2VfZGwuYyBiL2Nj YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX2RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZWQ2OTA1NAotLS0gL2Rldi9udWxsCisrKyBiL2NjYW4vZWRpdF9kaXN0 YW5jZS9lZGl0X2Rpc3RhbmNlX2RsLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qKiBAZmlsZQorICog RGVmaW5lcyBEYW1lcmF1LUxldmVuc2h0ZWluIGRpc3RhbmNlIGZ1bmN0aW9ucy4KKyAqCisgKiBA Y29weXJpZ2h0IDIwMTYgS2V2aW4gTG9ja2UgPGtldmluQGtldmlubG9ja2UubmFtZT4KKyAqICAg ICAgICAgICAgTUlUIGxpY2Vuc2UgLSBzZWUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzCisgKi8K KyNpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIGZyZWUsIG1hbGxvYyAqLworCisjaW5jbHVkZSAiZWRp dF9kaXN0YW5jZS5oIgorI2luY2x1ZGUgImVkaXRfZGlzdGFuY2UtcGFyYW1zLmgiCisjaW5jbHVk ZSAiZWRpdF9kaXN0YW5jZS1wcml2YXRlLmgiCisKK2VkX2Rpc3QgZWRpdF9kaXN0YW5jZV9kbChj b25zdCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJCSBjb25zdCBlZF9lbGVtICp0Z3Qs IGVkX3NpemUgdGxlbikKK3sKKwkvKiBPcHRpbWl6YXRpb246IEF2b2lkIG1hbGxvYyB3aGVuIGRp c3RhbmNlIG1hdHJpeCBjYW4gZml0IG9uIHRoZSBzdGFjay4KKwkgKi8KKwllZF9kaXN0IHN0YWNr ZGlzdFtFRF9TVEFDS19FTEVNU107CisKKwkvKiBMb3dyYW5jZS1XYWduZXIgZGlzdGFuY2UgbWF0 cml4LCBpbiByb3ctbWFqb3Igb3JkZXIuICovCisJc2l6ZV90IG1hdHNpemUgPSAoKHNpemVfdClz bGVuICsgMikgKiAodGxlbiArIDIpOworCWVkX2Rpc3QgKmRpc3RtZW0gPSBtYXRzaXplIDw9IEVE X1NUQUNLX0VMRU1TID8gc3RhY2tkaXN0IDoKKwkgICAgbWFsbG9jKG1hdHNpemUgKiBzaXplb2Yo ZWRfZGlzdCkpOworCWVkX2Rpc3QgKmRpc3QgPSBkaXN0bWVtOworCisjaWZkZWYgRURfSEFTSF9P Tl9TVEFDSworCWVkX3NpemUgbGFzdHRndFtFRF9IQVNIX01BWCArIDFdID0geyAwIH07CisjZWxz ZQorCWVkX3NpemUgKmxhc3R0Z3QgPSBjYWxsb2MoRURfSEFTSF9NQVggKyAxLCBzaXplb2YoZWRf c2l6ZSkpOworI2VuZGlmCisKKwkvKiBVcHBlciBib3VuZCBvbiBkaXN0YW5jZSBiZXR3ZWVuIHN0 cmluZ3MuICovCisJZWRfZGlzdCBtYXhkaXN0ID0gMDsKKworI2lmZGVmIEVEX0RFTF9DT1NUX0NP TlNUCisJbWF4ZGlzdCArPSAoZWRfZGlzdClzbGVuICpFRF9ERUxfQ09TVCgpOworI2Vsc2UKKwkv KiBMb3dlci10cmlhbmd1bGFyIG1hdHJpeCBvZiBkZWxldGlvbiBjb3N0cy4KKwkgKiBkZWxjb3N0 W2kyLCBpMV0gaXMgY29zdCB0byBkZWxldGUgc3JjW2kxLi5pMi0xXS4KKwkgKiBkZWxjb3N0W2ks IGldIGlzIDAuICovCisJZWRfZGlzdCAqZGVsY29zdCA9IG1hbGxvYyhFRF9UTUFUX1NJWkUoc2xl biArIDEpICogc2l6ZW9mKGVkX2Rpc3QpKTsKKwllZF9kaXN0ICpkZWxjb3N0aXRyID0gZGVsY29z dDsKKwllZF9kaXN0ICpkZWxjb3N0cHJldml0ciA9IGRlbGNvc3Q7CisJKmRlbGNvc3RpdHIrKyA9 IDA7CisJZm9yIChlZF9zaXplIGkyID0gMTsgaTIgPD0gc2xlbjsgKytpMikgeworCQllZF9kaXN0 IGNvc3RpMiA9IEVEX0RFTF9DT1NUKHNyY1tpMiAtIDFdKTsKKwkJZm9yIChlZF9zaXplIGkxID0g MDsgaTEgPCBpMjsgKytpMSkgeworCQkJKmRlbGNvc3RpdHIrKyA9ICpkZWxjb3N0cHJldml0cisr ICsgY29zdGkyOworCQl9CisJCSpkZWxjb3N0aXRyKysgPSAwOworCX0KKwltYXhkaXN0ICs9IGRl bGNvc3RbRURfVE1BVF9JTkQoc2xlbiwgMCldOworI2VuZGlmCisKKyNpZmRlZiBFRF9JTlNfQ09T VF9DT05TVAorCW1heGRpc3QgKz0gKGVkX2Rpc3QpdGxlbiAqRURfSU5TX0NPU1QoKTsKKyNlbHNl CisJLyogTG93ZXItdHJpYW5ndWxhciBtYXRyaXggb2YgaW5zZXJ0aW9uIGNvc3RzLgorCSAqIGlu c2Nvc3RbajIsIGoxXSBpcyBjb3N0IHRvIGluc2VydCB0Z3RbajEuLmoyLTFdLgorCSAqIGluc2Nv c3Rbaiwgal0gaXMgMC4gKi8KKwllZF9kaXN0ICppbnNjb3N0ID0gbWFsbG9jKEVEX1RNQVRfU0la RSh0bGVuICsgMSkgKiBzaXplb2YoZWRfZGlzdCkpOworCWVkX2Rpc3QgKmluc2Nvc3RpdHIgPSBp bnNjb3N0OworCWVkX2Rpc3QgKmluc2Nvc3RwcmV2aXRyID0gaW5zY29zdDsKKwkqaW5zY29zdGl0 cisrID0gMDsKKwlmb3IgKGVkX3NpemUgajIgPSAxOyBqMiA8PSB0bGVuOyArK2oyKSB7CisJCWVk X2Rpc3QgY29zdGoyID0gRURfSU5TX0NPU1QodGd0W2oyIC0gMV0pOworCQlmb3IgKGVkX3NpemUg ajEgPSAwOyBqMSA8IGoyOyArK2oxKSB7CisJCQkqaW5zY29zdGl0cisrID0gKmluc2Nvc3RwcmV2 aXRyKysgKyBjb3N0ajI7CisJCX0KKwkJKmluc2Nvc3RpdHIrKyA9IDA7CisJfQorCW1heGRpc3Qg Kz0gaW5zY29zdFtFRF9UTUFUX0lORCh0bGVuLCAwKV07CisjZW5kaWYKKworCS8qIEluaXRpYWxp emUgZmlyc3Qgcm93IHdpdGggbWF4aW1hbCBjb3N0ICovCisJZm9yIChlZF9zaXplIGkgPSAwOyBp IDwgc2xlbiArIDI7ICsraSkgeworCQlkaXN0W2ldID0gbWF4ZGlzdDsKKwl9CisKKwkvKiBQb3Np dGlvbiBkaXN0IHRvIG1hdGNoIG90aGVyIGFsZ29yaXRobXMuICBkaXN0Wy0xXSB3aWxsIGJlIG1h eGRpc3QgKi8KKwlkaXN0ICs9IHNsZW4gKyAzOworCisJLyogSW5pdGlhbGl6ZSByb3cgd2l0aCBj b3N0IHRvIGRlbGV0ZSBzcmNbMC4uaS0xXSAqLworCWRpc3RbLTFdID0gbWF4ZGlzdDsKKwlkaXN0 WzBdID0gMDsKKwlmb3IgKGVkX3NpemUgaSA9IDE7IGkgPD0gc2xlbjsgKytpKSB7CisJCWRpc3Rb aV0gPSBkaXN0W2kgLSAxXSArIEVEX0RFTF9DT1NUKHNyY1tpIC0gMV0pOworCX0KKworCWZvciAo ZWRfc2l6ZSBqID0gMTsgaiA8PSB0bGVuOyArK2opIHsKKwkJLyogTGFyZ2VzdCB5IDwgaSBzdWNo IHRoYXQgc3JjW3ldID0gdGd0W2pdICovCisJCWVkX3NpemUgbGFzdHNyYyA9IDA7CisJCWVkX2Rp c3QgKnByZXZkaXN0ID0gZGlzdDsKKwkJZGlzdCArPSBzbGVuICsgMjsKKwkJZGlzdFstMV0gPSBt YXhkaXN0OworCQlkaXN0WzBdID0gcHJldmRpc3RbMF0gKyBFRF9JTlNfQ09TVCh0Z3RbaiAtIDFd KTsKKworCQkvKiBMb29wIGludmFyaWFudDogZGlzdFtpXSBpcyB0aGUgZWRpdCBkaXN0YW5jZSBi ZXR3ZWVuIGZpcnN0IGoKKwkJICogZWxlbWVudHMgb2YgdGd0IGFuZCBmaXJzdCBpIGVsZW1lbnRz IG9mIHNyYy4KKwkJICoKKwkJICogTG9vcCBpbnZhcmlhbnQ6IGxhc3R0Z3RbRURfSEFTSF9FTEVN KGMpXSBob2xkcyB0aGUgbGFyZ2VzdAorCQkgKiB4IDwgaiBzdWNoIHRoYXQgdGd0W3gtMV0gPSBj IG9yIDAgaWYgbm8gc3VjaCB4IGV4aXN0cy4KKwkJICovCisJCWZvciAoZWRfc2l6ZSBpID0gMTsg aSA8PSBzbGVuOyArK2kpIHsKKwkJCWVkX3NpemUgaTEgPSBsYXN0c3JjOworCQkJZWRfc2l6ZSBq MSA9IGxhc3R0Z3RbRURfSEFTSF9FTEVNKHNyY1tpIC0gMV0pXTsKKworCQkJaWYgKEVEX0VMRU1f RVFVQUwoc3JjW2kgLSAxXSwgdGd0W2ogLSAxXSkpIHsKKwkJCQkvKiBTYW1lIGFzIHRndCB1cHRv IGotMiwgc3JjIHVwdG8gaS0yLiAqLworCQkJCWRpc3RbaV0gPSBwcmV2ZGlzdFtpIC0gMV07CisJ CQkJbGFzdHNyYyA9IGk7CisJCQl9IGVsc2UgeworCQkJCS8qIEluc2VydGlvbiBpcyB0Z3QgdXB0 byBqLTIsIHNyYyB1cHRvIGktMQorCQkJCSAqICsgaW5zZXJ0IHRndFtqLTFdICovCisJCQkJZWRf ZGlzdCBpbnNkaXN0ID0KKwkJCQkgICAgcHJldmRpc3RbaV0gKyBFRF9JTlNfQ09TVCh0Z3RbaiAt IDFdKTsKKworCQkJCS8qIERlbGV0aW9uIGlzIHRndCB1cHRvIGotMSwgc3JjIHVwdG8gaS0yCisJ CQkJICogKyBkZWxldGUgc3JjW2ktMV0gKi8KKwkJCQllZF9kaXN0IGRlbGRpc3QgPQorCQkJCSAg ICBkaXN0W2kgLSAxXSArIEVEX0RFTF9DT1NUKHNyY1tpIC0gMV0pOworCisJCQkJLyogU3Vic3Rp dHV0aW9uIGlzIHRndCB1cHRvIGotMiwgc3JjIHVwdG8gaS0yCisJCQkJICogKyBzdWJzdGl0dXRl IHRndFtqLTFdIGZvciBzcmNbaS0xXSAqLworCQkJCWVkX2Rpc3Qgc3ViZGlzdCA9IHByZXZkaXN0 W2kgLSAxXSArCisJCQkJICAgIEVEX1NVQl9DT1NUKHNyY1tpIC0gMV0sIHRndFtqIC0gMV0pOwor CisJCQkJLyogVXNlIGJlc3QgZGlzdGFuY2UgYXZhaWxhYmxlICovCisJCQkJZGlzdFtpXSA9IEVE X01JTjMoaW5zZGlzdCwgZGVsZGlzdCwgc3ViZGlzdCk7CisKKwkJCQllZF9kaXN0IHN3cGRpc3Qg PQorCQkJCSAgICBkaXN0bWVtWyhzaXplX3QpajEgKiAoc2xlbiArIDIpICsgaTFdOworI2lmZGVm IEVEX0lOU19DT1NUX0NPTlNUCisJCQkJc3dwZGlzdCArPQorCQkJCSAgICAoZWRfZGlzdCkoaiAt IGoxIC0gMSkgKiBFRF9JTlNfQ09TVCgpOworI2Vsc2UKKwkJCQlzd3BkaXN0ICs9IGluc2Nvc3Rb RURfVE1BVF9JTkQoaiAtIDEsIGoxKV07CisjZW5kaWYKKyNpZmRlZiBFRF9UUkFfQ09TVF9DT05T VAorCQkJCXN3cGRpc3QgKz0gRURfVFJBX0NPU1QoLCk7CisjZWxzZQorCQkJCWlmIChpMSA+IDAp IHsKKwkJCQkJc3dwZGlzdCArPQorCQkJCQkgICAgRURfVFJBX0NPU1Qoc3JjW2kxIC0gMV0sCisJ CQkJCQkJc3JjW2kgLSAxXSk7CisJCQkJfQorI2VuZGlmCisjaWZkZWYgRURfREVMX0NPU1RfQ09O U1QKKwkJCQlzd3BkaXN0ICs9CisJCQkJICAgIChlZF9kaXN0KShpIC0gaTEgLSAxKSAqIEVEX0RF TF9DT1NUKCk7CisjZWxzZQorCQkJCXN3cGRpc3QgKz0gZGVsY29zdFtFRF9UTUFUX0lORChpIC0g MSwgaTEpXTsKKyNlbmRpZgorCisJCQkJZGlzdFtpXSA9IEVEX01JTjIoZGlzdFtpXSwgc3dwZGlz dCk7CisJCQl9CisJCX0KKworCQlsYXN0dGd0W0VEX0hBU0hfRUxFTSh0Z3RbaiAtIDFdKV0gPSBq OworCX0KKworI2lmbmRlZiBFRF9IQVNIX09OX1NUQUNLCisJZnJlZShsYXN0dGd0KTsKKyNlbmRp ZgorCisjaWZuZGVmIEVEX0RFTF9DT1NUX0NPTlNUCisJZnJlZShkZWxjb3N0KTsKKyNlbmRpZgor CisjaWZuZGVmIEVEX0lOU19DT1NUX0NPTlNUCisJZnJlZShpbnNjb3N0KTsKKyNlbmRpZgorCisJ ZWRfZGlzdCB0b3RhbCA9IGRpc3Rbc2xlbl07CisJaWYgKGRpc3RtZW0gIT0gc3RhY2tkaXN0KSB7 CisJCWZyZWUoZGlzdG1lbSk7CisJfQorCXJldHVybiB0b3RhbDsKK30KZGlmZiAtLWdpdCBhL2Nj YW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX2xjcy5jIGIvY2Nhbi9lZGl0X2Rpc3RhbmNl L2VkaXRfZGlzdGFuY2VfbGNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u ZTYxMmM3MwotLS0gL2Rldi9udWxsCisrKyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3Rh bmNlX2xjcy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qKiBAZmlsZQorICogRGVmaW5lcyBMb25nZXN0 IENvbW1vbiBTdWJzZXF1ZW5jZSBkaXN0YW5jZSBmdW5jdGlvbnMuCisgKgorICogQGNvcHlyaWdo dCAyMDE2IEtldmluIExvY2tlIDxrZXZpbkBrZXZpbmxvY2tlLm5hbWU+CisgKiAgICAgICAgICAg IE1JVCBsaWNlbnNlIC0gc2VlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscworICovCisjaW5jbHVk ZSA8c3RkbGliLmg+CQkvKiBmcmVlLCBtYWxsb2MgKi8KKworI2luY2x1ZGUgImVkaXRfZGlzdGFu Y2UuaCIKKyNpbmNsdWRlICJlZGl0X2Rpc3RhbmNlLXBhcmFtcy5oIgorI2luY2x1ZGUgImVkaXRf ZGlzdGFuY2UtcHJpdmF0ZS5oIgorCitlZF9kaXN0IGVkaXRfZGlzdGFuY2VfbGNzKGNvbnN0IGVk X2VsZW0gKnNyYywgZWRfc2l6ZSBzbGVuLAorCQkJICBjb25zdCBlZF9lbGVtICp0Z3QsIGVkX3Np emUgdGxlbikKK3sKKwkvKiBPcHRpbWl6YXRpb246IEF2b2lkIG1hbGxvYyB3aGVuIHJvdyBvZiBk aXN0YW5jZSBtYXRyaXggY2FuIGZpdCBvbgorCSAqIHRoZSBzdGFjay4KKwkgKi8KKwllZF9kaXN0 IHN0YWNrZGlzdFtFRF9TVEFDS19FTEVNU107CisKKwkvKiBPbmUgcm93IG9mIHRoZSBXYWduZXIt RmlzY2hlciBkaXN0YW5jZSBtYXRyaXguICovCisJZWRfZGlzdCAqZGlzdCA9IHNsZW4gPCBFRF9T VEFDS19FTEVNUyA/IHN0YWNrZGlzdCA6CisJICAgIG1hbGxvYygoc2xlbiArIDEpICogc2l6ZW9m KGVkX2Rpc3QpKTsKKworCS8qIEluaXRpYWxpemUgcm93IHdpdGggY29zdCB0byBkZWxldGUgc3Jj WzAuLmktMV0gKi8KKwlkaXN0WzBdID0gMDsKKwlmb3IgKGVkX3NpemUgaSA9IDE7IGkgPD0gc2xl bjsgKytpKSB7CisJCWRpc3RbaV0gPSBkaXN0W2kgLSAxXSArIEVEX0RFTF9DT1NUKHNyY1tpIC0g MV0pOworCX0KKworCWZvciAoZWRfc2l6ZSBqID0gMTsgaiA8PSB0bGVuOyArK2opIHsKKwkJLyog VmFsdWUgZm9yIGRpc3Rbai0xXVtpLTFdIChvbmUgcm93IHVwLCBvbmUgY29sIGxlZnQpLiAqLwor CQllZF9kaXN0IGRpYWdkaXN0ID0gZGlzdFswXTsKKwkJZGlzdFswXSA9IGRpc3RbMF0gKyBFRF9J TlNfQ09TVCh0Z3RbaiAtIDFdKTsKKworCQkvKiBMb29wIGludmFyaWFudDogZGlzdFtpXSBpcyB0 aGUgZWRpdCBkaXN0YW5jZSBiZXR3ZWVuIGZpcnN0IGoKKwkJICogZWxlbWVudHMgb2YgdGd0IGFu ZCBmaXJzdCBpIGVsZW1lbnRzIG9mIHNyYy4KKwkJICovCisJCWZvciAoZWRfc2l6ZSBpID0gMTsg aSA8PSBzbGVuOyArK2kpIHsKKwkJCWVkX2Rpc3QgbmV4dGRpYWdkaXN0ID0gZGlzdFtpXTsKKwor CQkJaWYgKEVEX0VMRU1fRVFVQUwoc3JjW2kgLSAxXSwgdGd0W2ogLSAxXSkpIHsKKwkJCQkvKiBT YW1lIGFzIHRndCB1cHRvIGotMiwgc3JjIHVwdG8gaS0yLiAqLworCQkJCWRpc3RbaV0gPSBkaWFn ZGlzdDsKKwkJCX0gZWxzZSB7CisJCQkJLyogSW5zZXJ0aW9uIGlzIHRndCB1cHRvIGotMiwgc3Jj IHVwdG8gaS0xCisJCQkJICogKyBpbnNlcnQgdGd0W2otMV0gKi8KKwkJCQllZF9kaXN0IGluc2Rp c3QgPQorCQkJCSAgICBkaXN0W2ldICsgRURfSU5TX0NPU1QodGd0W2ogLSAxXSk7CisKKwkJCQkv KiBEZWxldGlvbiBpcyB0Z3QgdXB0byBqLTEsIHNyYyB1cHRvIGktMgorCQkJCSAqICsgZGVsZXRl IHNyY1tpLTFdICovCisJCQkJZWRfZGlzdCBkZWxkaXN0ID0KKwkJCQkgICAgZGlzdFtpIC0gMV0g KyBFRF9ERUxfQ09TVChzcmNbaSAtIDFdKTsKKworCQkJCS8qIFVzZSBiZXN0IGRpc3RhbmNlIGF2 YWlsYWJsZSAqLworCQkJCWRpc3RbaV0gPSBFRF9NSU4yKGluc2Rpc3QsIGRlbGRpc3QpOworCQkJ fQorCisJCQlkaWFnZGlzdCA9IG5leHRkaWFnZGlzdDsKKwkJfQorCX0KKworCWVkX2Rpc3QgdG90 YWwgPSBkaXN0W3NsZW5dOworCWlmIChkaXN0ICE9IHN0YWNrZGlzdCkgeworCQlmcmVlKGRpc3Qp OworCX0KKwlyZXR1cm4gdG90YWw7Cit9CmRpZmYgLS1naXQgYS9jY2FuL2VkaXRfZGlzdGFuY2Uv ZWRpdF9kaXN0YW5jZV9sZXYuYyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX2xl di5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MzhjNmQKLS0tIC9kZXYv bnVsbAorKysgYi9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9sZXYuYwpAQCAtMCww ICsxLDc0IEBACisvKiogQGZpbGUKKyAqIERlZmluZXMgTGV2ZW5zaHRlaW4gZGlzdGFuY2UgZnVu Y3Rpb25zLgorICoKKyAqIEBjb3B5cmlnaHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5s b2NrZS5uYW1lPgorICogICAgICAgICAgICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUg Zm9yIGRldGFpbHMKKyAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgkJLyogZnJlZSwgbWFsbG9jICov CisKKyNpbmNsdWRlICJlZGl0X2Rpc3RhbmNlLmgiCisjaW5jbHVkZSAiZWRpdF9kaXN0YW5jZS1w YXJhbXMuaCIKKyNpbmNsdWRlICJlZGl0X2Rpc3RhbmNlLXByaXZhdGUuaCIKKworZWRfZGlzdCBl ZGl0X2Rpc3RhbmNlX2xldihjb25zdCBlZF9lbGVtICpzcmMsIGVkX3NpemUgc2xlbiwKKwkJCSAg Y29uc3QgZWRfZWxlbSAqdGd0LCBlZF9zaXplIHRsZW4pCit7CisJLyogT3B0aW1pemF0aW9uOiBB dm9pZCBtYWxsb2Mgd2hlbiByb3cgb2YgZGlzdGFuY2UgbWF0cml4IGNhbiBmaXQgb24KKwkgKiB0 aGUgc3RhY2suCisJICovCisJZWRfZGlzdCBzdGFja2Rpc3RbRURfU1RBQ0tfRUxFTVNdOworCisJ LyogT25lIHJvdyBvZiB0aGUgV2FnbmVyLUZpc2NoZXIgZGlzdGFuY2UgbWF0cml4LiAqLworCWVk X2Rpc3QgKmRpc3QgPSBzbGVuIDwgRURfU1RBQ0tfRUxFTVMgPyBzdGFja2Rpc3QgOgorCSAgICBt YWxsb2MoKHNsZW4gKyAxKSAqIHNpemVvZihlZF9kaXN0KSk7CisKKwkvKiBJbml0aWFsaXplIHJv dyB3aXRoIGNvc3QgdG8gZGVsZXRlIHNyY1swLi5pLTFdICovCisJZGlzdFswXSA9IDA7CisJZm9y IChlZF9zaXplIGkgPSAxOyBpIDw9IHNsZW47ICsraSkgeworCQlkaXN0W2ldID0gZGlzdFtpIC0g MV0gKyBFRF9ERUxfQ09TVChzcmNbaSAtIDFdKTsKKwl9CisKKwlmb3IgKGVkX3NpemUgaiA9IDE7 IGogPD0gdGxlbjsgKytqKSB7CisJCS8qIFZhbHVlIGZvciBkaXN0W2otMV1baS0xXSAob25lIHJv dyB1cCwgb25lIGNvbCBsZWZ0KS4gKi8KKwkJZWRfZGlzdCBkaWFnZGlzdCA9IGRpc3RbMF07CisJ CWRpc3RbMF0gPSBkaXN0WzBdICsgRURfSU5TX0NPU1QodGd0W2ogLSAxXSk7CisKKwkJLyogTG9v cCBpbnZhcmlhbnQ6IGRpc3RbaV0gaXMgdGhlIGVkaXQgZGlzdGFuY2UgYmV0d2VlbiBmaXJzdCBq CisJCSAqIGVsZW1lbnRzIG9mIHRndCBhbmQgZmlyc3QgaSBlbGVtZW50cyBvZiBzcmMuCisJCSAq LworCQlmb3IgKGVkX3NpemUgaSA9IDE7IGkgPD0gc2xlbjsgKytpKSB7CisJCQllZF9kaXN0IG5l eHRkaWFnZGlzdCA9IGRpc3RbaV07CisKKwkJCWlmIChFRF9FTEVNX0VRVUFMKHNyY1tpIC0gMV0s IHRndFtqIC0gMV0pKSB7CisJCQkJLyogU2FtZSBhcyB0Z3QgdXB0byBqLTIsIHNyYyB1cHRvIGkt Mi4gKi8KKwkJCQlkaXN0W2ldID0gZGlhZ2Rpc3Q7CisJCQl9IGVsc2UgeworCQkJCS8qIEluc2Vy dGlvbiBpcyB0Z3QgdXB0byBqLTIsIHNyYyB1cHRvIGktMQorCQkJCSAqICsgaW5zZXJ0IHRndFtq LTFdICovCisJCQkJZWRfZGlzdCBpbnNkaXN0ID0KKwkJCQkgICAgZGlzdFtpXSArIEVEX0lOU19D T1NUKHRndFtqIC0gMV0pOworCisJCQkJLyogRGVsZXRpb24gaXMgdGd0IHVwdG8gai0xLCBzcmMg dXB0byBpLTIKKwkJCQkgKiArIGRlbGV0ZSBzcmNbaS0xXSAqLworCQkJCWVkX2Rpc3QgZGVsZGlz dCA9CisJCQkJICAgIGRpc3RbaSAtIDFdICsgRURfREVMX0NPU1Qoc3JjW2kgLSAxXSk7CisKKwkJ CQkvKiBTdWJzdGl0dXRpb24gaXMgdGd0IHVwdG8gai0yLCBzcmMgdXB0byBpLTIKKwkJCQkgKiAr IHN1YnN0aXR1dGUgdGd0W2otMV0gZm9yIHNyY1tpLTFdICovCisJCQkJZWRfZGlzdCBzdWJkaXN0 ID0gZGlhZ2Rpc3QgKworCQkJCSAgICBFRF9TVUJfQ09TVChzcmNbaSAtIDFdLCB0Z3RbaiAtIDFd KTsKKworCQkJCS8qIFVzZSBiZXN0IGRpc3RhbmNlIGF2YWlsYWJsZSAqLworCQkJCWRpc3RbaV0g PSBFRF9NSU4zKGluc2Rpc3QsIGRlbGRpc3QsIHN1YmRpc3QpOworCQkJfQorCisJCQlkaWFnZGlz dCA9IG5leHRkaWFnZGlzdDsKKwkJfQorCX0KKworCWVkX2Rpc3QgdG90YWwgPSBkaXN0W3NsZW5d OworCWlmIChkaXN0ICE9IHN0YWNrZGlzdCkgeworCQlmcmVlKGRpc3QpOworCX0KKwlyZXR1cm4g dG90YWw7Cit9CmRpZmYgLS1naXQgYS9jY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9y ZGwuYyBiL2NjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlX3JkbC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmEzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jY2Fu L2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9yZGwuYwpAQCAtMCwwICsxLDk4IEBACisvKiog QGZpbGUKKyAqIERlZmluZXMgUmVzdHJpY3RlZCBEYW1lcmF1LUxldmVuc2h0ZWluIGRpc3RhbmNl IGZ1bmN0aW9ucy4KKyAqCisgKiBAY29weXJpZ2h0IDIwMTYgS2V2aW4gTG9ja2UgPGtldmluQGtl dmlubG9ja2UubmFtZT4KKyAqICAgICAgICAgICAgTUlUIGxpY2Vuc2UgLSBzZWUgTElDRU5TRSBm aWxlIGZvciBkZXRhaWxzCisgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIGZyZWUsIG1hbGxv YyAqLworCisjaW5jbHVkZSAiZWRpdF9kaXN0YW5jZS5oIgorI2luY2x1ZGUgImVkaXRfZGlzdGFu Y2UtcGFyYW1zLmgiCisjaW5jbHVkZSAiZWRpdF9kaXN0YW5jZS1wcml2YXRlLmgiCisKK2VkX2Rp c3QgZWRpdF9kaXN0YW5jZV9yZGwoY29uc3QgZWRfZWxlbSAqc3JjLCBlZF9zaXplIHNsZW4sCisJ CQkgIGNvbnN0IGVkX2VsZW0gKnRndCwgZWRfc2l6ZSB0bGVuKQoreworCS8qIE9wdGltaXphdGlv bjogQXZvaWQgbWFsbG9jIHdoZW4gcmVxdWlyZWQgcm93cyBvZiBkaXN0YW5jZSBtYXRyaXggY2Fu CisJICogZml0IG9uIHRoZSBzdGFjay4KKwkgKi8KKwllZF9kaXN0IHN0YWNrZGlzdFtFRF9TVEFD S19FTEVNU107CisKKwkvKiBUd28gcm93cyBvZiB0aGUgV2FnbmVyLUZpc2NoZXIgZGlzdGFuY2Ug bWF0cml4LiAqLworCWVkX2Rpc3QgKmRpc3RtZW0sICpkaXN0LCAqcHJldmRpc3Q7CisJaWYgKHNs ZW4gPCBFRF9TVEFDS19FTEVNUyAvIDIpIHsKKwkJZGlzdG1lbSA9IHN0YWNrZGlzdDsKKwkJZGlz dCA9IGRpc3RtZW07CisJCXByZXZkaXN0ID0gZGlzdG1lbSArIHNsZW4gKyAxOworCX0gZWxzZSB7 CisJCWRpc3RtZW0gPSBtYWxsb2MoKHNsZW4gKyAxKSAqIHNpemVvZihlZF9kaXN0KSAqIDIpOwor CQlkaXN0ID0gZGlzdG1lbTsKKwkJcHJldmRpc3QgPSBkaXN0bWVtICsgc2xlbiArIDE7CisJfQor CisJLyogSW5pdGlhbGl6ZSByb3cgd2l0aCBjb3N0IHRvIGRlbGV0ZSBzcmNbMC4uaS0xXSAqLwor CWRpc3RbMF0gPSAwOworCWZvciAoZWRfc2l6ZSBpID0gMTsgaSA8PSBzbGVuOyArK2kpIHsKKwkJ ZGlzdFtpXSA9IGRpc3RbaSAtIDFdICsgRURfREVMX0NPU1Qoc3JjW2kgLSAxXSk7CisJfQorCisJ Zm9yIChlZF9zaXplIGogPSAxOyBqIDw9IHRsZW47ICsraikgeworCQkvKiBWYWx1ZSBmb3IgZGlz dFtqLTJdW2ktMV0gKHR3byByb3dzIHVwLCBvbmUgY29sIGxlZnQpLiAqLworCQkvKiBOb3RlOiBk aXN0WzBdIGlzIG5vdCBpbml0aWFsaXplZCB3aGVuIGogPT0gMSwgdmFyIHVudXNlZC4gKi8KKwkJ ZWRfZGlzdCBkaWFnZGlzdDEgPSBwcmV2ZGlzdFswXTsKKwkJLyogVmFsdWUgZm9yIGRpc3Rbai0y XVtpLTJdICh0d28gcm93cyB1cCwgdHdvIGNvbHMgbGVmdCkuCisJCSAqIEluaXRpYWxpemF0aW9u IHZhbHVlIG9ubHkgdXNlZCB0byBwbGFjYXRlIEdDQy4gKi8KKwkJZWRfZGlzdCBkaWFnZGlzdDIg PSAwOworCisJCUVEX1NXQVAoZGlzdCwgcHJldmRpc3QsIGVkX2Rpc3QgKik7CisKKwkJZGlzdFsw XSA9IHByZXZkaXN0WzBdICsgRURfSU5TX0NPU1QodGd0W2ogLSAxXSk7CisKKwkJLyogTG9vcCBp bnZhcmlhbnQ6IGRpc3RbaV0gaXMgdGhlIGVkaXQgZGlzdGFuY2UgYmV0d2VlbiBmaXJzdCBqCisJ CSAqIGVsZW1lbnRzIG9mIHRndCBhbmQgZmlyc3QgaSBlbGVtZW50cyBvZiBzcmMuCisJCSAqLwor CQlmb3IgKGVkX3NpemUgaSA9IDE7IGkgPD0gc2xlbjsgKytpKSB7CisJCQllZF9kaXN0IG5leHRk aWFnZGlzdCA9IGRpc3RbaV07CisKKwkJCWlmIChFRF9FTEVNX0VRVUFMKHNyY1tpIC0gMV0sIHRn dFtqIC0gMV0pKSB7CisJCQkJLyogU2FtZSBhcyB0Z3QgdXB0byBqLTIsIHNyYyB1cHRvIGktMi4g Ki8KKwkJCQlkaXN0W2ldID0gcHJldmRpc3RbaSAtIDFdOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJ bnNlcnRpb24gaXMgdGd0IHVwdG8gai0yLCBzcmMgdXB0byBpLTEKKwkJCQkgKiArIGluc2VydCB0 Z3Rbai0xXSAqLworCQkJCWVkX2Rpc3QgaW5zZGlzdCA9CisJCQkJICAgIHByZXZkaXN0W2ldICsg RURfSU5TX0NPU1QodGd0W2ogLSAxXSk7CisKKwkJCQkvKiBEZWxldGlvbiBpcyB0Z3QgdXB0byBq LTEsIHNyYyB1cHRvIGktMgorCQkJCSAqICsgZGVsZXRlIHNyY1tpLTFdICovCisJCQkJZWRfZGlz dCBkZWxkaXN0ID0KKwkJCQkgICAgZGlzdFtpIC0gMV0gKyBFRF9ERUxfQ09TVChzcmNbaSAtIDFd KTsKKworCQkJCS8qIFN1YnN0aXR1dGlvbiBpcyB0Z3QgdXB0byBqLTIsIHNyYyB1cHRvIGktMgor CQkJCSAqICsgc3Vic3RpdHV0ZSB0Z3Rbai0xXSBmb3Igc3JjW2ktMV0gKi8KKwkJCQllZF9kaXN0 IHN1YmRpc3QgPSBwcmV2ZGlzdFtpIC0gMV0gKworCQkJCSAgICBFRF9TVUJfQ09TVChzcmNbaSAt IDFdLCB0Z3RbaiAtIDFdKTsKKworCQkJCS8qIFVzZSBiZXN0IGRpc3RhbmNlIGF2YWlsYWJsZSAq LworCQkJCWRpc3RbaV0gPSBFRF9NSU4zKGluc2Rpc3QsIGRlbGRpc3QsIHN1YmRpc3QpOworCisJ CQkJaWYgKGogPiAxICYmIGkgPiAxICYmCisJCQkJICAgIEVEX0VMRU1fRVFVQUwoc3JjW2kgLSAy XSwgdGd0W2ogLSAxXSkgJiYKKwkJCQkgICAgRURfRUxFTV9FUVVBTChzcmNbaSAtIDFdLCB0Z3Rb aiAtIDJdKSkgeworCQkJCQllZF9kaXN0IHRyYWRpc3QgPSBkaWFnZGlzdDIgKworCQkJCQkgICAg RURfVFJBX0NPU1Qoc3JjW2ogLSAyXSwgc3JjW2ogLSAxXSk7CisJCQkJCWRpc3RbaV0gPSBFRF9N SU4yKGRpc3RbaV0sIHRyYWRpc3QpOworCQkJCX0KKwkJCX0KKworCQkJZGlhZ2Rpc3QyID0gZGlh Z2Rpc3QxOworCQkJZGlhZ2Rpc3QxID0gbmV4dGRpYWdkaXN0OworCQl9CisJfQorCisJZWRfZGlz dCB0b3RhbCA9IGRpc3Rbc2xlbl07CisJaWYgKGRpc3RtZW0gIT0gc3RhY2tkaXN0KSB7CisJCWZy ZWUoZGlzdG1lbSk7CisJfQorCXJldHVybiB0b3RhbDsKK30KZGlmZiAtLWdpdCBhL2NjYW4vZWRp dF9kaXN0YW5jZS90ZXN0L2FwaS5jIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvYXBpLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NWVhMQotLS0gL2Rldi9udWxsCisr KyBiL2NjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L2FwaS5jCkBAIC0wLDAgKzEsMjIxIEBACisvKiog QGZpbGUKKyAqIFJ1bm5hYmxlIHB1YmxpYyBBUEkgdGVzdHMgb2YgdGhlIGVkaXRfZGlzdGFuY2Ug bW9kdWxlLgorICoKKyAqIEBjb3B5cmlnaHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5s b2NrZS5uYW1lPgorICogICAgICAgICAgICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUg Zm9yIGRldGFpbHMKKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjY2Fu L2J1aWxkX2Fzc2VydC9idWlsZF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFu Y2UvZWRpdF9kaXN0YW5jZS5oPgorI2luY2x1ZGUgPGNjYW4vdGFwL3RhcC5oPgorCisjZGVmaW5l IGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYyhhcnIxLCBhcnIyKSBcCisJZWRpdF9kaXN0YW5jZShh cnIxLCBzaXplb2YgYXJyMSAtIDEsIGFycjIsIHNpemVvZiBhcnIyIC0gMSwgXAorCQkJRURJVF9E SVNUQU5DRV9MQ1MpCisjZGVmaW5lIGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYyhhcnIxLCBhcnIy KSBcCisJZWRpdF9kaXN0YW5jZShhcnIxLCBzaXplb2YgYXJyMSAtIDEsIGFycjIsIHNpemVvZiBh cnIyIC0gMSwgXAorCQkJRURJVF9ESVNUQU5DRV9MRVYpCisjZGVmaW5lIGVkaXRfZGlzdGFuY2Vf cmRsX3N0YXRpYyhhcnIxLCBhcnIyKSBcCisJZWRpdF9kaXN0YW5jZShhcnIxLCBzaXplb2YgYXJy MSAtIDEsIGFycjIsIHNpemVvZiBhcnIyIC0gMSwgXAorCQkJRURJVF9ESVNUQU5DRV9SREwpCisj ZGVmaW5lIGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKGFycjEsIGFycjIpIFwKKwllZGl0X2Rpc3Rh bmNlKGFycjEsIHNpemVvZiBhcnIxIC0gMSwgYXJyMiwgc2l6ZW9mIGFycjIgLSAxLCBcCisJCQlF RElUX0RJU1RBTkNFX0RMKQorCitzdGF0aWMgdm9pZCB0ZXN0X2xjcyh2b2lkKQoreworCS8qIFRy aXZpYWwgY2FzZXMgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCIiLCAiIikgPT0g MCk7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiYSIsICIiKSA9PSAxKTsKKwlvazEo ZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCIiLCAiYSIpID09IDEpOworCW9rMShlZGl0X2Rpc3Rh bmNlX2xjc19zdGF0aWMoImEiLCAiYSIpID09IDApOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19z dGF0aWMoImEiLCAiYiIpID09IDIpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImIi LCAiYSIpID09IDIpOworCisJLyogVHJpdmlhbCBzZWFyY2ggY2FzZXMgKi8KKwlvazEoZWRpdF9k aXN0YW5jZV9sY3Nfc3RhdGljKCJhIiwgImJjZGVmIikgPT0gNik7CisJb2sxKGVkaXRfZGlzdGFu Y2VfbGNzX3N0YXRpYygiYSIsICJiY2FkZWYiKSA9PSA1KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9s Y3Nfc3RhdGljKCJhY2RlZiIsICJiIikgPT0gNik7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0 YXRpYygiYWJjZGVmIiwgImIiKSA9PSA1KTsKKworCS8qIENvbW1vbiBwcmVmaXggd2l0aCBzaW5n bGUtY2hhciBkaXN0YW5jZSAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFhIiwg ImFiIikgPT0gMik7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiYWIiLCAiYWEiKSA9 PSAyKTsKKworCS8qIENvbW1vbiBzdWZmaXggd2l0aCBzaW5nbGUtY2hhciBkaXN0YW5jZSAqLwor CW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFhIiwgImJhIikgPT0gMik7CisJb2sxKGVk aXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiYmEiLCAiYWEiKSA9PSAyKTsKKworCS8qIE5vbi1vcHRp bWl6ZWQgY2FzZXMgKHJlcXVpcmUgV2FnbmVyLUZpc2NoZXIgbWF0cml4KSAqLworCW9rMShlZGl0 X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFiIiwgImJhIikgPT0gMik7CisJb2sxKGVkaXRfZGlzdGFu Y2VfbGNzX3N0YXRpYygiYWJjIiwgImRlIikgPT0gNSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNz X3N0YXRpYygiYWJjIiwgImRlZiIpID09IDYpOworCisJLyogKFJlc3RyaWN0ZWQpIFRyYW5zcG9z aXRpb24gKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJhYmNkIiwgImVjYmYiKSA9 PSA2KTsKKworCS8qIChVbnJlc3RyaWN0ZWQpIFRyYW5zcG9zaXRpb24gKi8KKwlvazEoZWRpdF9k aXN0YW5jZV9sY3Nfc3RhdGljKCJjYSIsICJhYmMiKSA9PSAzKTsKKworCS8qIEluc2VydCArIERl bGV0ZSArIFN1YiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFiY2RlIiwgInhj ZGVmIikgPT0gNCk7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9uIG11bHRpcGxlIGRlbGV0aW9u cyBpbiBmaW5hbCByb3cuICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiYWFiY2Mi LCAiYmNjZGQiKSA9PSA0KTsKKworCS8qIERpc3RhbmNlIGRlcGVuZHMgb24gbXVsdGlwbGUgaW5z ZXJ0aW9ucyBpbiBmaW5hbCBjb2x1bW4uICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRp YygiYmNjZGQiLCAiYWFiY2MiKSA9PSA0KTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9sZXYodm9p ZCkKK3sKKwkvKiBUcml2aWFsIGNhc2VzICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRp YygiIiwgIiIpID09IDApOworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImEiLCAiIikg PT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiIiwgImEiKSA9PSAxKTsKKwlv azEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhIiwgImEiKSA9PSAwKTsKKwlvazEoZWRpdF9k aXN0YW5jZV9sZXZfc3RhdGljKCJhIiwgImIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9s ZXZfc3RhdGljKCJiIiwgImEiKSA9PSAxKTsKKworCS8qIFRyaXZpYWwgc2VhcmNoIGNhc2VzICov CisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYSIsICJiY2RlZiIpID09IDUpOworCW9r MShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImEiLCAiYmNhZGVmIikgPT0gNSk7CisJb2sxKGVk aXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYWNkZWYiLCAiYiIpID09IDUpOworCW9rMShlZGl0X2Rp c3RhbmNlX2xldl9zdGF0aWMoImFiY2RlZiIsICJiIikgPT0gNSk7CisKKwkvKiBDb21tb24gcHJl Zml4IHdpdGggc2luZ2xlLWNoYXIgZGlzdGFuY2UgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZf c3RhdGljKCJhYSIsICJhYiIpID09IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMo ImFiIiwgImFhIikgPT0gMSk7CisKKwkvKiBDb21tb24gc3VmZml4IHdpdGggc2luZ2xlLWNoYXIg ZGlzdGFuY2UgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhYSIsICJiYSIpID09 IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImJhIiwgImFhIikgPT0gMSk7CisK KwkvKiBOb24tb3B0aW1pemVkIGNhc2VzIChyZXF1aXJlIFdhZ25lci1GaXNjaGVyIG1hdHJpeCkg Ki8KKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhYiIsICJiYSIpID09IDIpOworCW9r MShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImFiYyIsICJkZSIpID09IDMpOworCW9rMShlZGl0 X2Rpc3RhbmNlX2xldl9zdGF0aWMoImFiYyIsICJkZWYiKSA9PSAzKTsKKworCS8qIChSZXN0cmlj dGVkKSBUcmFuc3Bvc2l0aW9uICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYWJj ZCIsICJlY2JmIikgPT0gNCk7CisKKwkvKiAoVW5yZXN0cmljdGVkKSBUcmFuc3Bvc2l0aW9uICov CisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiY2EiLCAiYWJjIikgPT0gMyk7CisKKwkv KiBJbnNlcnQgKyBEZWxldGUgKyBTdWIgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGlj KCJhYmNkZSIsICJ4Y2RlZiIpID09IDMpOworCisJLyogRGlzdGFuY2UgZGVwZW5kcyBvbiBtdWx0 aXBsZSBkZWxldGlvbnMgaW4gZmluYWwgcm93LiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9z dGF0aWMoImFhYmNjIiwgImJjY2RkIikgPT0gNCk7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9u IG11bHRpcGxlIGluc2VydGlvbnMgaW4gZmluYWwgY29sdW1uLiAqLworCW9rMShlZGl0X2Rpc3Rh bmNlX2xldl9zdGF0aWMoImJjY2RkIiwgImFhYmNjIikgPT0gNCk7Cit9CisKK3N0YXRpYyB2b2lk IHRlc3RfcmRsKHZvaWQpCit7CisJLyogVHJpdmlhbCBjYXNlcyAqLworCW9rMShlZGl0X2Rpc3Rh bmNlX3JkbF9zdGF0aWMoIiIsICIiKSA9PSAwKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3Rh dGljKCJhIiwgIiIpID09IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoIiIsICJh IikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYSIsICJhIikgPT0gMCk7 CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYSIsICJiIikgPT0gMSk7CisJb2sxKGVk aXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYiIsICJhIikgPT0gMSk7CisKKwkvKiBUcml2aWFsIHNl YXJjaCBjYXNlcyAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImEiLCAiYmNkZWYi KSA9PSA1KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhIiwgImJjYWRlZiIpID09 IDUpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImFjZGVmIiwgImIiKSA9PSA1KTsK KwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhYmNkZWYiLCAiYiIpID09IDUpOworCisJ LyogQ29tbW9uIHByZWZpeCB3aXRoIHNpbmdsZS1jaGFyIGRpc3RhbmNlICovCisJb2sxKGVkaXRf ZGlzdGFuY2VfcmRsX3N0YXRpYygiYWEiLCAiYWIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5j ZV9yZGxfc3RhdGljKCJhYiIsICJhYSIpID09IDEpOworCisJLyogQ29tbW9uIHN1ZmZpeCB3aXRo IHNpbmdsZS1jaGFyIGRpc3RhbmNlICovCisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygi YWEiLCAiYmEiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJiYSIsICJh YSIpID09IDEpOworCisJLyogTm9uLW9wdGltaXplZCBjYXNlcyAocmVxdWlyZSBXYWduZXItRmlz Y2hlciBtYXRyaXgpICovCisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWIiLCAiYmEi KSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhYmMiLCAiZGUiKSA9PSAz KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhYmMiLCAiZGVmIikgPT0gMyk7CisK KwkvKiAoUmVzdHJpY3RlZCkgVHJhbnNwb3NpdGlvbiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3Jk bF9zdGF0aWMoImFiY2QiLCAiZWNiZiIpID09IDMpOworCisJLyogKFVucmVzdHJpY3RlZCkgVHJh bnNwb3NpdGlvbiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImNhIiwgImFiYyIp ID09IDMpOworCisJLyogSW5zZXJ0ICsgRGVsZXRlICsgU3ViICovCisJb2sxKGVkaXRfZGlzdGFu Y2VfcmRsX3N0YXRpYygiYWJjZGUiLCAieGNkZWYiKSA9PSAzKTsKKworCS8qIERpc3RhbmNlIGRl cGVuZHMgb24gbXVsdGlwbGUgZGVsZXRpb25zIGluIGZpbmFsIHJvdy4gKi8KKwlvazEoZWRpdF9k aXN0YW5jZV9yZGxfc3RhdGljKCJhYWJjYyIsICJiY2NkZCIpID09IDQpOworCisJLyogRGlzdGFu Y2UgZGVwZW5kcyBvbiBtdWx0aXBsZSBpbnNlcnRpb25zIGluIGZpbmFsIGNvbHVtbi4gKi8KKwlv azEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJiY2NkZCIsICJhYWJjYyIpID09IDQpOworfQor CitzdGF0aWMgdm9pZCB0ZXN0X2RsKHZvaWQpCit7CisJLyogVHJpdmlhbCBjYXNlcyAqLworCW9r MShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiIiwgIiIpID09IDApOworCW9rMShlZGl0X2Rpc3Rh bmNlX2RsX3N0YXRpYygiYSIsICIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0 aWMoIiIsICJhIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhIiwgImEi KSA9PSAwKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImEiLCAiYiIpID09IDEpOwor CW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYiIsICJhIikgPT0gMSk7CisKKwkvKiBUcml2 aWFsIHNlYXJjaCBjYXNlcyAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYSIsICJi Y2RlZiIpID09IDUpOworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYSIsICJiY2FkZWYi KSA9PSA1KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFjZGVmIiwgImIiKSA9PSA1 KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFiY2RlZiIsICJiIikgPT0gNSk7CisK KwkvKiBDb21tb24gcHJlZml4IHdpdGggc2luZ2xlLWNoYXIgZGlzdGFuY2UgKi8KKwlvazEoZWRp dF9kaXN0YW5jZV9kbF9zdGF0aWMoImFhIiwgImFiIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFu Y2VfZGxfc3RhdGljKCJhYiIsICJhYSIpID09IDEpOworCisJLyogQ29tbW9uIHN1ZmZpeCB3aXRo IHNpbmdsZS1jaGFyIGRpc3RhbmNlICovCisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJh YSIsICJiYSIpID09IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYmEiLCAiYWEi KSA9PSAxKTsKKworCS8qIE5vbi1vcHRpbWl6ZWQgY2FzZXMgKHJlcXVpcmUgV2FnbmVyLUZpc2No ZXIgbWF0cml4KSAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYWIiLCAiYmEiKSA9 PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFiYyIsICJkZSIpID09IDMpOwor CW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiYWJjIiwgImRlZiIpID09IDMpOworCisJLyog KFJlc3RyaWN0ZWQpIFRyYW5zcG9zaXRpb24gKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0 aWMoImFiY2QiLCAiZWNiZiIpID09IDMpOworCisJLyogKFVucmVzdHJpY3RlZCkgVHJhbnNwb3Np dGlvbiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiY2EiLCAiYWJjIikgPT0gMik7 CisKKwkvKiBJbnNlcnQgKyBEZWxldGUgKyBTdWIgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9z dGF0aWMoImFiY2RlIiwgInhjZGVmIikgPT0gMyk7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9u IG11bHRpcGxlIGRlbGV0aW9ucyBpbiBmaW5hbCByb3cuICovCisJb2sxKGVkaXRfZGlzdGFuY2Vf ZGxfc3RhdGljKCJhYWJjYyIsICJiY2NkZCIpID09IDQpOworCisJLyogRGlzdGFuY2UgZGVwZW5k cyBvbiBtdWx0aXBsZSBpbnNlcnRpb25zIGluIGZpbmFsIGNvbHVtbi4gKi8KKwlvazEoZWRpdF9k aXN0YW5jZV9kbF9zdGF0aWMoImJjY2RkIiwgImFhYmNjIikgPT0gNCk7Cit9CisKK2ludCBtYWlu KHZvaWQpCit7CisJcGxhbl90ZXN0cyg4OSk7CisKKwl0ZXN0X2xjcygpOworCXRlc3RfbGV2KCk7 CisJdGVzdF9yZGwoKTsKKwl0ZXN0X2RsKCk7CisKKwkvKiBVbnN1cHBvcnRlZCBlZGl0IGRpc3Rh bmNlIG1lYXN1cmUgKi8KKwllbnVtIGVkX21lYXN1cmUgYmFkbWVhc3VyZSA9IChlbnVtIGVkX21l YXN1cmUpLTE7CisJb2sxKGVkaXRfZGlzdGFuY2UoImFiIiwgMiwgImJhIiwgMiwgYmFkbWVhc3Vy ZSkgPT0gKGVkX2Rpc3QpLTEpOworCisJcmV0dXJuIGV4aXRfc3RhdHVzKCk7Cit9CmRpZmYgLS1n aXQgYS9jY2FuL2VkaXRfZGlzdGFuY2UvdGVzdC9ydW4tdHlwZXMtc2hvcnQuYyBiL2NjYW4vZWRp dF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy1zaG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjgwOTIyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2VkaXRfZGlzdGFu Y2UvdGVzdC9ydW4tdHlwZXMtc2hvcnQuYwpAQCAtMCwwICsxLDQwIEBACisvKiogQGZpbGUKKyAq IFJ1bm5hYmxlIHRlc3RzIGZvciB0aGUgZWRpdF9kaXN0YW5jZSBtb2R1bGUgdXNpbmcgY3VzdG9t IGVsZW1lbnQgYW5kCisgKiBkaXN0YW5jZSB0eXBlcy4KKyAqCisgKiBAY29weXJpZ2h0IDIwMTYg S2V2aW4gTG9ja2UgPGtldmluQGtldmlubG9ja2UubmFtZT4KKyAqICAgICAgICAgICAgTUlUIGxp Y2Vuc2UgLSBzZWUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzCisgKi8KKworI2luY2x1ZGUgPGxp bWl0cy5oPgkJLyogVVNIUlRfTUFYICovCisKKyNpbmNsdWRlIDxjY2FuL2FycmF5X3NpemUvYXJy YXlfc2l6ZS5oPgorI2luY2x1ZGUgPGNjYW4vdGFwL3RhcC5oPgorCisjZGVmaW5lIGVkX2VsZW0g dW5zaWduZWQgc2hvcnQKKyNkZWZpbmUgZWRfZGlzdCBzaG9ydAorI2RlZmluZSBFRF9IQVNIX0VM RU0oZSkgZQorI2RlZmluZSBFRF9IQVNIX01BWCBVU0hSVF9NQVgKKworI2luY2x1ZGUgPGNjYW4v ZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmM+CisjaW5jbHVkZSA8Y2Nhbi9lZGl0X2Rpc3Rh bmNlL2VkaXRfZGlzdGFuY2VfZGwuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRp dF9kaXN0YW5jZV9sY3MuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0 YW5jZV9sZXYuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9y ZGwuYz4KKworaW50IG1haW4odm9pZCkKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCBzcmNbXSA9 IHsgMCwgMSwgMiwgMyB9OworCWNvbnN0IHVuc2lnbmVkIHNob3J0IHRndFtdID0geyA0LCAyLCAx LCA1IH07CisJZWRfc2l6ZSBzbGVuID0gQVJSQVlfU0laRShzcmMpOworCWVkX3NpemUgdGxlbiA9 IEFSUkFZX1NJWkUodGd0KTsKKworCXBsYW5fdGVzdHMoNCk7CisKKwlvazEoZWRpdF9kaXN0YW5j ZShzcmMsIHNsZW4sIHRndCwgdGxlbiwgRURJVF9ESVNUQU5DRV9MQ1MpID09IDYpOworCW9rMShl ZGl0X2Rpc3RhbmNlKHNyYywgc2xlbiwgdGd0LCB0bGVuLCBFRElUX0RJU1RBTkNFX0xFVikgPT0g NCk7CisJb2sxKGVkaXRfZGlzdGFuY2Uoc3JjLCBzbGVuLCB0Z3QsIHRsZW4sIEVESVRfRElTVEFO Q0VfUkRMKSA9PSAzKTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNsZW4sIHRndCwgdGxlbiwg RURJVF9ESVNUQU5DRV9ETCkgPT0gMyk7CisKKwlyZXR1cm4gZXhpdF9zdGF0dXMoKTsKK30KZGlm ZiAtLWdpdCBhL2NjYW4vZWRpdF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy1zdHJ1Y3QuYyBiL2Nj YW4vZWRpdF9kaXN0YW5jZS90ZXN0L3J1bi10eXBlcy1zdHJ1Y3QuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi40NzdlYzVmCi0tLSAvZGV2L251bGwKKysrIGIvY2Nhbi9lZGl0 X2Rpc3RhbmNlL3Rlc3QvcnVuLXR5cGVzLXN0cnVjdC5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qKiBA ZmlsZQorICogUnVubmFibGUgdGVzdHMgZm9yIHRoZSBlZGl0X2Rpc3RhbmNlIG1vZHVsZSB1c2lu ZyBjdXN0b20gZWxlbWVudCBhbmQKKyAqIGRpc3RhbmNlIHR5cGVzLgorICoKKyAqIEBjb3B5cmln aHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5sb2NrZS5uYW1lPgorICogICAgICAgICAg ICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMKKyAqLworCisjaW5j bHVkZSA8bGltaXRzLmg+CQkvKiBVQ0hBUl9NQVggKi8KKworI2luY2x1ZGUgPGNjYW4vYXJyYXlf c2l6ZS9hcnJheV9zaXplLmg+CisjaW5jbHVkZSA8Y2Nhbi90YXAvdGFwLmg+CisKK3N0cnVjdCBj b2xvcjE2IHsKKwl1bnNpZ25lZCBjaGFyIHI6NTsKKwl1bnNpZ25lZCBjaGFyIGc6NjsKKwl1bnNp Z25lZCBjaGFyIGI6NTsKK307CisKKyNkZWZpbmUgZWRfZWxlbSBzdHJ1Y3QgY29sb3IxNgorI2Rl ZmluZSBFRF9FTEVNX0VRVUFMKGUsIGYpIChlLnIgPT0gZi5yICYmIGUuZyA9PSBmLmcgJiYgZS5i ID09IGYuYikKKyNkZWZpbmUgRURfSEFTSF9FTEVNKGUpICgoZS5yIDw8IDExKSB8IChlLmcgPDwg NSkgfCBlLmIpCisjZGVmaW5lIEVEX0hBU0hfTUFYIFVTSFJUX01BWAorCisjaW5jbHVkZSA8Y2Nh bi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2UuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlz dGFuY2UvZWRpdF9kaXN0YW5jZV9kbC5jPgorI2luY2x1ZGUgPGNjYW4vZWRpdF9kaXN0YW5jZS9l ZGl0X2Rpc3RhbmNlX2xjcy5jPgorI2luY2x1ZGUgPGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rp c3RhbmNlX2xldi5jPgorI2luY2x1ZGUgPGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNl X3JkbC5jPgorCitpbnQgbWFpbih2b2lkKQoreworCWNvbnN0IHN0cnVjdCBjb2xvcjE2IHNyY1td ID0geworCQl7MCwgMCwgMH0sCisJCXsxLCAxLCAxfSwKKwkJezIsIDIsIDJ9LAorCQl7MywgMywg M30KKwl9OworCWNvbnN0IHN0cnVjdCBjb2xvcjE2IHRndFtdID0geworCQl7NCwgNCwgNH0sCisJ CXsyLCAyLCAyfSwKKwkJezEsIDEsIDF9LAorCQl7NSwgNSwgNX0KKwl9OworCWVkX3NpemUgc2xl biA9IEFSUkFZX1NJWkUoc3JjKTsKKwllZF9zaXplIHRsZW4gPSBBUlJBWV9TSVpFKHRndCk7CisK KwlwbGFuX3Rlc3RzKDQpOworCisJb2sxKGVkaXRfZGlzdGFuY2Uoc3JjLCBzbGVuLCB0Z3QsIHRs ZW4sIEVESVRfRElTVEFOQ0VfTENTKSA9PSA2KTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNs ZW4sIHRndCwgdGxlbiwgRURJVF9ESVNUQU5DRV9MRVYpID09IDQpOworCW9rMShlZGl0X2Rpc3Rh bmNlKHNyYywgc2xlbiwgdGd0LCB0bGVuLCBFRElUX0RJU1RBTkNFX1JETCkgPT0gMyk7CisJb2sx KGVkaXRfZGlzdGFuY2Uoc3JjLCBzbGVuLCB0Z3QsIHRsZW4sIEVESVRfRElTVEFOQ0VfREwpID09 IDMpOworCisJcmV0dXJuIGV4aXRfc3RhdHVzKCk7Cit9CmRpZmYgLS1naXQgYS9jY2FuL2VkaXRf ZGlzdGFuY2UvdGVzdC9ydW4tdHlwZXMtd2NoYXIuYyBiL2NjYW4vZWRpdF9kaXN0YW5jZS90ZXN0 L3J1bi10eXBlcy13Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMx MjNhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2VkaXRfZGlzdGFuY2UvdGVzdC9ydW4tdHlw ZXMtd2NoYXIuYwpAQCAtMCwwICsxLDYwIEBACisvKiogQGZpbGUKKyAqIFJ1bm5hYmxlIHRlc3Rz IGZvciB0aGUgZWRpdF9kaXN0YW5jZSBtb2R1bGUgdXNpbmcgY3VzdG9tIGVsZW1lbnQgYW5kCisg KiBkaXN0YW5jZSB0eXBlcy4KKyAqCisgKiBAY29weXJpZ2h0IDIwMTYgS2V2aW4gTG9ja2UgPGtl dmluQGtldmlubG9ja2UubmFtZT4KKyAqICAgICAgICAgICAgTUlUIGxpY2Vuc2UgLSBzZWUgTElD RU5TRSBmaWxlIGZvciBkZXRhaWxzCisgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgkJLyogVUNI QVJfTUFYICovCisjaW5jbHVkZSA8d2NoYXIuaD4JCS8qIHdtZW1jaHIgKi8KKworI2luY2x1ZGUg PGNjYW4vYXJyYXlfc2l6ZS9hcnJheV9zaXplLmg+CisjaW5jbHVkZSA8Y2Nhbi90YXAvdGFwLmg+ CisKKyNkZWZpbmUgZWRfZWxlbSB3Y2hhcl90CisjZGVmaW5lIGVkX2Rpc3QgZG91YmxlCisjZGVm aW5lIEVEX0hBU19FTEVNKGFyciwgZWxlbSwgbGVuKSAod21lbWNocihhcnIsIGVsZW0sIGxlbikg IT0gTlVMTCkKKy8qIFNpbmNlIHdlIG9ubHkgdXNlIEFTQ0lJIGNoYXJhY3RlcnMgKi8KKyNkZWZp bmUgRURfSEFTSF9FTEVNKGUpICh1bnNpZ25lZCBjaGFyKWUKKyNkZWZpbmUgRURfSEFTSF9NQVgg VUNIQVJfTUFYCisjZGVmaW5lIEVEX0hBU0hfT05fU1RBQ0sKKworI2luY2x1ZGUgPGNjYW4vZWRp dF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNlLmM+CisjaW5jbHVkZSA8Y2Nhbi9lZGl0X2Rpc3RhbmNl L2VkaXRfZGlzdGFuY2VfZGwuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9k aXN0YW5jZV9sY3MuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5j ZV9sZXYuYz4KKyNpbmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9yZGwu Yz4KKworaW50IG1haW4odm9pZCkKK3sKKwljb25zdCB3Y2hhcl90IHNyY1tdID0gTCJhYmNkIjsK Kwljb25zdCB3Y2hhcl90IHRndFtdID0gTCJlY2JmIjsKKwllZF9zaXplIHNsZW4gPSBBUlJBWV9T SVpFKHNyYykgLSAxOworCWVkX3NpemUgdGxlbiA9IEFSUkFZX1NJWkUodGd0KSAtIDE7CisKKwlw bGFuX3Rlc3RzKDE2KTsKKworCW9rMShlZGl0X2Rpc3RhbmNlKHNyYywgc2xlbiwgdGd0LCB0bGVu LCBFRElUX0RJU1RBTkNFX0xDUykgPT0gNi4wKTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNs ZW4sIHRndCwgdGxlbiwgRURJVF9ESVNUQU5DRV9MRVYpID09IDQuMCk7CisJb2sxKGVkaXRfZGlz dGFuY2Uoc3JjLCBzbGVuLCB0Z3QsIHRsZW4sIEVESVRfRElTVEFOQ0VfUkRMKSA9PSAzLjApOwor CW9rMShlZGl0X2Rpc3RhbmNlKHNyYywgc2xlbiwgdGd0LCB0bGVuLCBFRElUX0RJU1RBTkNFX0RM KSA9PSAzLjApOworCisJLyogVGVzdCBlbXB0eSBzdHJpbmdzIHdvcmsgYXMgZXhwZWN0ZWQgKi8K KwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNsZW4sIHRndCwgMCwgRURJVF9ESVNUQU5DRV9MQ1Mp ID09IDQuMCk7CisJb2sxKGVkaXRfZGlzdGFuY2Uoc3JjLCAwLCB0Z3QsIHRsZW4sIEVESVRfRElT VEFOQ0VfTENTKSA9PSA0LjApOworCisJLyogVGVzdCBFRF9IQVNfRUxFTSB3b3JrcyBhcyBleHBl Y3RlZCAqLworCW9rMShlZGl0X2Rpc3RhbmNlKEwiYyIsIDEsIHRndCwgdGxlbiwgRURJVF9ESVNU QU5DRV9MQ1MpID09IDMuMCk7CisJb2sxKGVkaXRfZGlzdGFuY2UoTCJ6IiwgMSwgdGd0LCB0bGVu LCBFRElUX0RJU1RBTkNFX0xDUykgPT0gNS4wKTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNs ZW4sIEwiYyIsIDEsIEVESVRfRElTVEFOQ0VfTENTKSA9PSAzLjApOworCW9rMShlZGl0X2Rpc3Rh bmNlKHNyYywgc2xlbiwgTCJ6IiwgMSwgRURJVF9ESVNUQU5DRV9MQ1MpID09IDUuMCk7CisJb2sx KGVkaXRfZGlzdGFuY2UoTCJ6IiwgMSwgdGd0LCB0bGVuLCBFRElUX0RJU1RBTkNFX0xFVikgPT0g NC4wKTsKKwlvazEoZWRpdF9kaXN0YW5jZShzcmMsIHNsZW4sIEwieiIsIDEsIEVESVRfRElTVEFO Q0VfTEVWKSA9PSA0LjApOworCW9rMShlZGl0X2Rpc3RhbmNlKEwieiIsIDEsIHRndCwgdGxlbiwg RURJVF9ESVNUQU5DRV9SREwpID09IDQuMCk7CisJb2sxKGVkaXRfZGlzdGFuY2Uoc3JjLCBzbGVu LCBMInoiLCAxLCBFRElUX0RJU1RBTkNFX1JETCkgPT0gNC4wKTsKKwlvazEoZWRpdF9kaXN0YW5j ZShMInoiLCAxLCB0Z3QsIHRsZW4sIEVESVRfRElTVEFOQ0VfREwpID09IDQuMCk7CisJb2sxKGVk aXRfZGlzdGFuY2Uoc3JjLCBzbGVuLCBMInoiLCAxLCBFRElUX0RJU1RBTkNFX0RMKSA9PSA0LjAp OworCisJcmV0dXJuIGV4aXRfc3RhdHVzKCk7Cit9CmRpZmYgLS1naXQgYS9jY2FuL2VkaXRfZGlz dGFuY2UvdGVzdC9ydW4td2VpZ2h0cy5jIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvcnVuLXdl aWdodHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmI0NzBkCi0tLSAv ZGV2L251bGwKKysrIGIvY2Nhbi9lZGl0X2Rpc3RhbmNlL3Rlc3QvcnVuLXdlaWdodHMuYwpAQCAt MCwwICsxLDI4MiBAQAorLyoqIEBmaWxlCisgKiBSdW5uYWJsZSB0ZXN0cyBmb3IgdGhlIGVkaXRf ZGlzdGFuY2UgbW9kdWxlIHVzaW5nIGN1c3RvbSBjb3N0cy93ZWlnaHRzLgorICoKKyAqIEBjb3B5 cmlnaHQgMjAxNiBLZXZpbiBMb2NrZSA8a2V2aW5Aa2V2aW5sb2NrZS5uYW1lPgorICogICAgICAg ICAgICBNSVQgbGljZW5zZSAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMKKyAqLworCisj aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxjY2FuL2J1aWxkX2Fzc2VydC9idWlsZF9h c3NlcnQuaD4KKyNpbmNsdWRlIDxjY2FuL3RhcC90YXAuaD4KKworI2RlZmluZSBFRF9ERUxfQ09T VChlKSAoZSA9PSAnYScgPyAyIDogMSkKKyNkZWZpbmUgRURfSU5TX0NPU1QoZSkgKGUgPT0gJ2In ID8gMiA6IDEpCisjZGVmaW5lIEVEX1NVQl9DT1NUKGUsIGYpIChmID09ICdjJyAmJiBlID09ICdk JyA/IDMgOiAxKQorI2RlZmluZSBFRF9UUkFfQ09TVChlLCBmKSAoZSA9PSAnZScgJiYgZiA9PSAn ZicgPyAzIDogMSkKKworI2luY2x1ZGUgPGNjYW4vZWRpdF9kaXN0YW5jZS9lZGl0X2Rpc3RhbmNl LmM+CisjaW5jbHVkZSA8Y2Nhbi9lZGl0X2Rpc3RhbmNlL2VkaXRfZGlzdGFuY2VfZGwuYz4KKyNp bmNsdWRlIDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9sY3MuYz4KKyNpbmNsdWRl IDxjY2FuL2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9sZXYuYz4KKyNpbmNsdWRlIDxjY2Fu L2VkaXRfZGlzdGFuY2UvZWRpdF9kaXN0YW5jZV9yZGwuYz4KKworI2RlZmluZSBlZGl0X2Rpc3Rh bmNlX2xjc19zdGF0aWMoYXJyMSwgYXJyMikgXAorCWVkaXRfZGlzdGFuY2UoYXJyMSwgc2l6ZW9m IGFycjEgLSAxLCBhcnIyLCBzaXplb2YgYXJyMiAtIDEsIFwKKwkJCUVESVRfRElTVEFOQ0VfTENT KQorI2RlZmluZSBlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoYXJyMSwgYXJyMikgXAorCWVkaXRf ZGlzdGFuY2UoYXJyMSwgc2l6ZW9mIGFycjEgLSAxLCBhcnIyLCBzaXplb2YgYXJyMiAtIDEsIFwK KwkJCUVESVRfRElTVEFOQ0VfTEVWKQorI2RlZmluZSBlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMo YXJyMSwgYXJyMikgXAorCWVkaXRfZGlzdGFuY2UoYXJyMSwgc2l6ZW9mIGFycjEgLSAxLCBhcnIy LCBzaXplb2YgYXJyMiAtIDEsIFwKKwkJCUVESVRfRElTVEFOQ0VfUkRMKQorI2RlZmluZSBlZGl0 X2Rpc3RhbmNlX2RsX3N0YXRpYyhhcnIxLCBhcnIyKSBcCisJZWRpdF9kaXN0YW5jZShhcnIxLCBz aXplb2YgYXJyMSAtIDEsIGFycjIsIHNpemVvZiBhcnIyIC0gMSwgXAorCQkJRURJVF9ESVNUQU5D RV9ETCkKKworc3RhdGljIHZvaWQgdGVzdF9sY3Modm9pZCkKK3sKKwkvKiBUcml2aWFsIGNhc2Vz ICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygiIiwgIiIpID09IDApOworCW9rMShl ZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImEiLCAiIikgPT0gMik7CisJb2sxKGVkaXRfZGlzdGFu Y2VfbGNzX3N0YXRpYygiIiwgImEiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3Rh dGljKCJhIiwgImEiKSA9PSAwKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJhIiwg ImIiKSA9PSA0KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJiIiwgImEiKSA9PSAy KTsKKworCS8qIFRyaXZpYWwgc2VhcmNoIGNhc2VzICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGNz X3N0YXRpYygiYSIsICJiY2RlZiIpID09IDgpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0 aWMoImEiLCAiYmNhZGVmIikgPT0gNik7CisJb2sxKGVkaXRfZGlzdGFuY2VfbGNzX3N0YXRpYygi YWNkZWYiLCAiYiIpID09IDgpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFiY2Rl ZiIsICJiIikgPT0gNik7CisKKwkvKiBDb21tb24gcHJlZml4IHdpdGggc2luZ2xlLWNoYXIgZGlz dGFuY2UgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJhYSIsICJhYiIpID09IDQp OworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFiIiwgImFhIikgPT0gMik7CisKKwkv KiBDb21tb24gc3VmZml4IHdpdGggc2luZ2xlLWNoYXIgZGlzdGFuY2UgKi8KKwlvazEoZWRpdF9k aXN0YW5jZV9sY3Nfc3RhdGljKCJhYSIsICJiYSIpID09IDQpOworCW9rMShlZGl0X2Rpc3RhbmNl X2xjc19zdGF0aWMoImJhIiwgImFhIikgPT0gMik7CisKKwkvKiBOb24tb3B0aW1pemVkIGNhc2Vz IChyZXF1aXJlIFdhZ25lci1GaXNjaGVyIG1hdHJpeCkgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9s Y3Nfc3RhdGljKCJhYiIsICJiYSIpID09IDMpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0 aWMoImFiYyIsICJkZSIpID09IDYpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFi YyIsICJkZWYiKSA9PSA3KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJkZSIsICJi ZGVmIikgPT0gMyk7CisKKwkvKiBUcmFuc3Bvc2l0aW9uICsgSW5zZXJ0ICovCisJb2sxKGVkaXRf ZGlzdGFuY2VfbGNzX3N0YXRpYygiY2EiLCAiYWJjIikgPT0gNCk7CisKKwkvKiBJbnNlcnQgKyBE ZWxldGUgKyBTdWIgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9sY3Nfc3RhdGljKCJhYmNkZSIsICJ4 Y2RlZiIpID09IDUpOworCisJLyogRGlzdGFuY2UgZGVwZW5kcyBvbiBtdWx0aXBsZSBkZWxldGlv bnMgaW4gZmluYWwgcm93LiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0aWMoImFhYmNj IiwgImJjY2RkIikgPT0gNik7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9uIG11bHRpcGxlIGlu c2VydGlvbnMgaW4gZmluYWwgY29sdW1uLiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xjc19zdGF0 aWMoImJjY2RkIiwgImFhYmNjIikgPT0gNCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbGV2KHZv aWQpCit7CisJLyogVHJpdmlhbCBjYXNlcyAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0 aWMoIiIsICIiKSA9PSAwKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhIiwgIiIp ID09IDIpOworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoIiIsICJhIikgPT0gMSk7CisJ b2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYSIsICJhIikgPT0gMCk7CisJb2sxKGVkaXRf ZGlzdGFuY2VfbGV2X3N0YXRpYygiYSIsICJiIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2Vf bGV2X3N0YXRpYygiYiIsICJhIikgPT0gMSk7CisKKwkvKiBUcml2aWFsIHNlYXJjaCBjYXNlcyAq LworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImEiLCAiYmNkZWYiKSA9PSA1KTsKKwlv azEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhIiwgImJjYWRlZiIpID09IDYpOworCW9rMShl ZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImFjZGVmIiwgImIiKSA9PSA1KTsKKwlvazEoZWRpdF9k aXN0YW5jZV9sZXZfc3RhdGljKCJhYmNkZWYiLCAiYiIpID09IDYpOworCisJLyogQ29tbW9uIHBy ZWZpeCB3aXRoIHNpbmdsZS1jaGFyIGRpc3RhbmNlICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2 X3N0YXRpYygiYWEiLCAiYWIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGlj KCJhYiIsICJhYSIpID09IDEpOworCisJLyogQ29tbW9uIHN1ZmZpeCB3aXRoIHNpbmdsZS1jaGFy IGRpc3RhbmNlICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYWEiLCAiYmEiKSA9 PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJiYSIsICJhYSIpID09IDEpOwor CisJLyogTm9uLW9wdGltaXplZCBjYXNlcyAocmVxdWlyZSBXYWduZXItRmlzY2hlciBtYXRyaXgp ICovCisJb2sxKGVkaXRfZGlzdGFuY2VfbGV2X3N0YXRpYygiYWIiLCAiYmEiKSA9PSAyKTsKKwlv azEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhYmMiLCAiZGUiKSA9PSAzKTsKKwlvazEoZWRp dF9kaXN0YW5jZV9sZXZfc3RhdGljKCJhYmMiLCAiZGVmIikgPT0gMyk7CisJb2sxKGVkaXRfZGlz dGFuY2VfbGV2X3N0YXRpYygiZGUiLCAiYmRlZiIpID09IDMpOworCisJLyogVHJhbnNwb3NpdGlv biArIEluc2VydCAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2xldl9zdGF0aWMoImNhIiwgImFiYyIp ID09IDMpOworCisJLyogSW5zZXJ0ICsgRGVsZXRlICsgU3ViICovCisJb2sxKGVkaXRfZGlzdGFu Y2VfbGV2X3N0YXRpYygiYWJjZGUiLCAieGNkZWYiKSA9PSAzKTsKKworCS8qIERpc3RhbmNlIGRl cGVuZHMgb24gbXVsdGlwbGUgZGVsZXRpb25zIGluIGZpbmFsIHJvdy4gKi8KKwlvazEoZWRpdF9k aXN0YW5jZV9sZXZfc3RhdGljKCJhYWJjYyIsICJiY2NkZCIpID09IDUpOworCisJLyogRGlzdGFu Y2UgZGVwZW5kcyBvbiBtdWx0aXBsZSBpbnNlcnRpb25zIGluIGZpbmFsIGNvbHVtbi4gKi8KKwlv azEoZWRpdF9kaXN0YW5jZV9sZXZfc3RhdGljKCJiY2NkZCIsICJhYWJjYyIpID09IDQpOworfQor CitzdGF0aWMgdm9pZCB0ZXN0X3JkbCh2b2lkKQoreworCS8qIFRyaXZpYWwgY2FzZXMgKi8KKwlv azEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCIiLCAiIikgPT0gMCk7CisJb2sxKGVkaXRfZGlz dGFuY2VfcmRsX3N0YXRpYygiYSIsICIiKSA9PSAyKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxf c3RhdGljKCIiLCAiYSIpID09IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImEi LCAiYSIpID09IDApOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImEiLCAiYiIpID09 IDEpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImIiLCAiYSIpID09IDEpOworCisJ LyogVHJpdmlhbCBzZWFyY2ggY2FzZXMgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGlj KCJhIiwgImJjZGVmIikgPT0gNSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYSIs ICJiY2FkZWYiKSA9PSA2KTsKKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhY2RlZiIs ICJiIikgPT0gNSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWJjZGVmIiwgImIi KSA9PSA2KTsKKworCS8qIENvbW1vbiBwcmVmaXggd2l0aCBzaW5nbGUtY2hhciBkaXN0YW5jZSAq LworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImFhIiwgImFiIikgPT0gMSk7CisJb2sx KGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWIiLCAiYWEiKSA9PSAxKTsKKworCS8qIENvbW1v biBzdWZmaXggd2l0aCBzaW5nbGUtY2hhciBkaXN0YW5jZSAqLworCW9rMShlZGl0X2Rpc3RhbmNl X3JkbF9zdGF0aWMoImFhIiwgImJhIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0 YXRpYygiYmEiLCAiYWEiKSA9PSAxKTsKKworCS8qIE5vbi1vcHRpbWl6ZWQgY2FzZXMgKHJlcXVp cmUgV2FnbmVyLUZpc2NoZXIgbWF0cml4KSAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0 aWMoImFiIiwgImJhIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWJj IiwgImRlIikgPT0gMyk7CisJb2sxKGVkaXRfZGlzdGFuY2VfcmRsX3N0YXRpYygiYWJjIiwgImRl ZiIpID09IDMpOworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImRlIiwgImJkZWYiKSA9 PSAzKTsKKworCS8qIFRyYW5zcG9zaXRpb24gKyBJbnNlcnQgKi8KKwlvazEoZWRpdF9kaXN0YW5j ZV9yZGxfc3RhdGljKCJjYSIsICJhYmMiKSA9PSAzKTsKKworCS8qIFRyYW5zcG9zZSBXZWlnaHQg Ki8KKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJlZiIsICJmZSIpID09IDIpOworCW9r MShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMoImZlIiwgImVmIikgPT0gMSk7CisKKwkvKiBJbnNl cnQgKyBEZWxldGUgKyBTdWIgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9yZGxfc3RhdGljKCJhYmNk ZSIsICJ4Y2RlZiIpID09IDMpOworCisJLyogRGlzdGFuY2UgZGVwZW5kcyBvbiBtdWx0aXBsZSBk ZWxldGlvbnMgaW4gZmluYWwgcm93LiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3JkbF9zdGF0aWMo ImFhYmNjIiwgImJjY2RkIikgPT0gNSk7CisKKwkvKiBEaXN0YW5jZSBkZXBlbmRzIG9uIG11bHRp cGxlIGluc2VydGlvbnMgaW4gZmluYWwgY29sdW1uLiAqLworCW9rMShlZGl0X2Rpc3RhbmNlX3Jk bF9zdGF0aWMoImJjY2RkIiwgImFhYmNjIikgPT0gNCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf ZGwodm9pZCkKK3sKKwkvKiBUcml2aWFsIGNhc2VzICovCisJb2sxKGVkaXRfZGlzdGFuY2VfZGxf c3RhdGljKCIiLCAiIikgPT0gMCk7CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhIiwg IiIpID09IDIpOworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRpYygiIiwgImEiKSA9PSAxKTsK KwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImEiLCAiYSIpID09IDApOworCW9rMShlZGl0 X2Rpc3RhbmNlX2RsX3N0YXRpYygiYSIsICJiIikgPT0gMSk7CisJb2sxKGVkaXRfZGlzdGFuY2Vf ZGxfc3RhdGljKCJiIiwgImEiKSA9PSAxKTsKKworCS8qIFRyaXZpYWwgc2VhcmNoIGNhc2VzICov CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhIiwgImJjZGVmIikgPT0gNSk7CisJb2sx KGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhIiwgImJjYWRlZiIpID09IDYpOworCW9rMShlZGl0 X2Rpc3RhbmNlX2RsX3N0YXRpYygiYWNkZWYiLCAiYiIpID09IDUpOworCW9rMShlZGl0X2Rpc3Rh bmNlX2RsX3N0YXRpYygiYWJjZGVmIiwgImIiKSA9PSA2KTsKKworCS8qIENvbW1vbiBwcmVmaXgg d2l0aCBzaW5nbGUtY2hhciBkaXN0YW5jZSAqLworCW9rMShlZGl0X2Rpc3RhbmNlX2RsX3N0YXRp YygiYWEiLCAiYWIiKSA9PSAxKTsKKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFiIiwg ImFhIikgPT0gMSk7CisKKwkvKiBDb21tb24gc3VmZml4IHdpdGggc2luZ2xlLWNoYXIgZGlzdGFu Y2UgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImFhIiwgImJhIikgPT0gMSk7CisJ b2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJiYSIsICJhYSIpID09IDEpOworCisJLyogTm9u LW9wdGltaXplZCBjYXNlcyAocmVxdWlyZSBXYWduZXItRmlzY2hlciBtYXRyaXgpICovCisJb2sx KGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJhYiIsICJiYSIpID09IDEpOworCW9rMShlZGl0X2Rp c3RhbmNlX2RsX3N0YXRpYygiYWJjIiwgImRlIikgPT0gMyk7CisJb2sxKGVkaXRfZGlzdGFuY2Vf ZGxfc3RhdGljKCJhYmMiLCAiZGVmIikgPT0gMyk7CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3Rh dGljKCJkZSIsICJiZGVmIikgPT0gMyk7CisKKwkvKiBUcmFuc3Bvc2l0aW9uICsgSW5zZXJ0ICov CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJjYSIsICJhYmMiKSA9PSAzKTsKKworCS8q IFRyYW5zcG9zZSBXZWlnaHQgKi8KKwlvazEoZWRpdF9kaXN0YW5jZV9kbF9zdGF0aWMoImVmIiwg ImZlIikgPT0gMik7CisJb2sxKGVkaXRfZGlzdGFuY2VfZGxfc3RhdGljKCJmZSIsICJlZiIpID09 IDEpOworCisJLyogSW5zZXJ0ICsgRGVsZXRlICsgU3ViICovCisJb2sxKGVkaXRfZGlzdGFuY2Vf ZGxfc3RhdGljKCJhYmNkZSIsICJ4Y2RlZiIpID09IDMpOworCisJLyogRGlzdGFuY2UgZGVwZW5k cyBvbiBtdWx0aXBsZSBkZWxldGlvbnMgaW4gZmluYWwgcm93LiAqLworCW9rMShlZGl0X2Rpc3Rh bmNlX2RsX3N0YXRpYygiYWFiY2MiLCAiYmNjZGQiKSA9PSA1KTsKKworCS8qIERpc3RhbmNlIGRl cGVuZHMgb24gbXVsdGlwbGUgaW5zZXJ0aW9ucyBpbiBmaW5hbCBjb2x1bW4uICovCisJb2sxKGVk aXRfZGlzdGFuY2VfZGxfc3RhdGljKCJiY2NkZCIsICJhYWJjYyIpID09IDQpOworfQorCisvKiBU ZXN0IGVkaXRfZGlzdGFuY2UgY2FsY3VsYXRpb24gYXJvdW5kIHRoZSBzdGFjayB0aHJlc2hvbGQg dG8gZW5zdXJlIG1lbW9yeQorICogaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCBjb3JyZWN0bHkgYW5k IHN0YWNrIG92ZXJmbG93IGRvZXMgbm90IG9jY3VyLgorICoKKyAqIE5vdGU6ICBUaGlzIHRlc3Qg aXMgZG9uZSB3aGVuIEVEX0NPU1RfSVNfU1lNTUVUUklDIGlzIG5vdCBkZWZpbmVkIHNvIHRoYXQK KyAqIHRndCBjYW4gYmUgc21hbGwgdG8gbWFrZSB0aGUgdGVzdCBydW4gcXVpY2tseSAod2l0aCBF RF9DT1NUX0lTX1NZTU1FVFJJQyB0aGUKKyAqIG1pbiBsZW5ndGggd291bGQgbmVlZCB0byBiZSBh Ym92ZSB0aGUgdGhyZXNob2xkKS4KKyAqLworc3RhdGljIHZvaWQgdGVzdF9tZW1fdXNlKHZvaWQp Cit7CisJY2hhciB0Z3RbXSA9ICJCQyI7CisJY2hhciBzcmNbRURfU1RBQ0tfRUxFTVMgKyAxXTsK Kwlmb3IgKHNpemVfdCBpID0gMDsgaSA8IEVEX1NUQUNLX0VMRU1TOyArK2kpIHsKKwkJc3JjW2ld ID0gKGNoYXIpKCdBJyArIChpICUgMjYpKTsKKwl9CisJc3JjW0VEX1NUQUNLX0VMRU1TXSA9ICdc MCc7CisKKwlmb3IgKGVkX3NpemUgdGxlbiA9IDE7IHRsZW4gPCAzOyArK3RsZW4pIHsKKwkJZWRf c2l6ZSBzbGVuID0gRURfU1RBQ0tfRUxFTVM7CisJCS8qIEFib3ZlIHRocmVzaG9sZCwgY2F1c2Vz IGFsbG9jYXRpb24gKi8KKwkJb2soZWRpdF9kaXN0YW5jZV9sY3Moc3JjLCBzbGVuLCB0Z3QsIHRs ZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9kaXN0YW5jZV9sY3MoXCIlLjNzLi4uLCAl dSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNyYywgc2xlbiwgKGludCl0bGVuLCB0Z3Qs IHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9kaXN0YW5jZV9sZXYoc3JjLCBzbGVuLCB0 Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9kaXN0YW5jZV9sZXYoXCIlLjNz Li4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNyYywgc2xlbiwgKGludCl0bGVu LCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9kaXN0YW5jZV9yZGwoc3JjLCBz bGVuLCB0Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9kaXN0YW5jZV9yZGwo XCIlLjNzLi4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNyYywgc2xlbiwgKGlu dCl0bGVuLCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9kaXN0YW5jZV9kbChz cmMsIHNsZW4sIHRndCwgdGxlbikgPT0gc2xlbiAtIHRsZW4sCisJCSAgICJlZGl0X2Rpc3RhbmNl X2RsKFwiJS4zcy4uLiwgJXUsIFwiJS4qc1wiLCAldSkgPT0gJXUiLAorCQkgICBzcmMsIHNsZW4s IChpbnQpdGxlbiwgdGd0LCB0bGVuLCBzbGVuIC0gdGxlbik7CisKKwkJLyogQmVsb3cgdGhyZXNo b2xkLCBubyBhbGxvY2F0aW9uICovCisJCS0tc2xlbjsKKwkJb2soZWRpdF9kaXN0YW5jZV9sY3Mo c3JjLCBzbGVuLCB0Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9kaXN0YW5j ZV9sY3MoXCIlLjNzLi4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNyYywgc2xl biwgKGludCl0bGVuLCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9kaXN0YW5j ZV9sZXYoc3JjLCBzbGVuLCB0Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAiZWRpdF9k aXN0YW5jZV9sZXYoXCIlLjNzLi4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJCSAgIHNy Yywgc2xlbiwgKGludCl0bGVuLCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2soZWRpdF9k aXN0YW5jZV9yZGwoc3JjLCBzbGVuLCB0Z3QsIHRsZW4pID09IHNsZW4gLSB0bGVuLAorCQkgICAi ZWRpdF9kaXN0YW5jZV9yZGwoXCIlLjNzLi4uLCAldSwgXCIlLipzXCIsICV1KSA9PSAldSIsCisJ CSAgIHNyYywgc2xlbiwgKGludCl0bGVuLCB0Z3QsIHRsZW4sIHNsZW4gLSB0bGVuKTsKKwkJb2so ZWRpdF9kaXN0YW5jZV9kbChzcmMsIHNsZW4sIHRndCwgdGxlbikgPT0gc2xlbiAtIHRsZW4sCisJ CSAgICJlZGl0X2Rpc3RhbmNlX2RsKFwiJS4zcy4uLiwgJXUsIFwiJS4qc1wiLCAldSkgPT0gJXUi LAorCQkgICBzcmMsIHNsZW4sIChpbnQpdGxlbiwgdGd0LCB0bGVuLCBzbGVuIC0gdGxlbik7CisJ fQorfQorCitpbnQgbWFpbih2b2lkKQoreworCXBsYW5fdGVzdHMoMTA5KTsKKworCXRlc3RfbGNz KCk7CisJdGVzdF9sZXYoKTsKKwl0ZXN0X3JkbCgpOworCXRlc3RfZGwoKTsKKworCXRlc3RfbWVt X3VzZSgpOworCisJLyogVW5zdXBwb3J0ZWQgZWRpdCBkaXN0YW5jZSBtZWFzdXJlICovCisJZW51 bSBlZF9tZWFzdXJlIGJhZG1lYXN1cmUgPSAoZW51bSBlZF9tZWFzdXJlKS0xOworCW9rMShlZGl0 X2Rpc3RhbmNlKCJhYiIsIDIsICJiYSIsIDIsIGJhZG1lYXN1cmUpID09IChlZF9kaXN0KS0xKTsK KworCXJldHVybiBleGl0X3N0YXR1cygpOworfQotLSAKMi4xMC4yCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpjY2FuIG1haWxpbmcgbGlzdApjY2FuQGxp c3RzLm96bGFicy5vcmcKaHR0cHM6Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2NjYW4K