From mboxrd@z Thu Jan 1 00:00:00 1970 From: Praveen Kumar Subject: [resend PATCH] xen: common: rbtree: ported updates from linux tree Date: Thu, 11 May 2017 22:51:33 +0530 Message-ID: <20170511172133.28179-1-kpraveen.lkml@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, Praveen Kumar , jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org VGhlIHBhdGNoIGNvbnRhaW5zIHRoZSB1cGRhdGVkIHZlcnNpb24gb2YgcmJ0cmVlIGltcGxlbWVu dGF0aW9uIGZyb20gbGludXgKa2VybmVsIHRyZWUgY29udGFpbmluZyB0aGUgZml4ZXMgc28gZmFy IGhhbmRsZWQuCgpTaWduZWQtb2ZmLWJ5OiBQcmF2ZWVuIEt1bWFyIDxrcHJhdmVlbi5sa21sQGdt YWlsLmNvbT4KLS0tCiB4ZW4vY29tbW9uL3JidHJlZS5jICAgICAgICAgICAgICAgIHwgNzQ4ICsr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIHhlbi9pbmNsdWRlL3hlbi9jb21w aWxlci5oICAgICAgICAgfCAgNjAgKysrCiB4ZW4vaW5jbHVkZS94ZW4vcmJ0cmVlLmggICAgICAg ICAgIHwgMTIwICsrKystLQogeGVuL2luY2x1ZGUveGVuL3JidHJlZV9hdWdtZW50ZWQuaCB8IDI4 MyArKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA5MzEgaW5zZXJ0aW9ucygrKSwgMjgw IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL3hlbi9yYnRyZWVf YXVnbWVudGVkLmgKCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL3JidHJlZS5jIGIveGVuL2NvbW1v bi9yYnRyZWUuYwppbmRleCAzMzI4OTYwZDU2Li5hZTE1MmM1YmYyIDEwMDY0NAotLS0gYS94ZW4v Y29tbW9uL3JidHJlZS5jCisrKyBiL3hlbi9jb21tb24vcmJ0cmVlLmMKQEAgLTIsNyArMiw4IEBA CiAgIFJlZCBCbGFjayBUcmVlcwogICAoQykgMTk5OSAgQW5kcmVhIEFyY2FuZ2VsaSA8YW5kcmVh QHN1c2UuZGU+CiAgIChDKSAyMDAyICBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5v cmc+Ci0gIAorICAoQykgMjAxMiAgTWljaGVsIExlc3BpbmFzc2UgPHdhbGtlbkBnb29nbGUuY29t PgorCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0xNCwyODYg KzE1LDQ3OSBAQAogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgogCiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4s IDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EK IAogICBsaW51eC9saWIvcmJ0cmVlLmMKICovCiAKKyNpbmNsdWRlIDx4ZW4vcmJ0cmVlX2F1Z21l bnRlZC5oPgogI2luY2x1ZGUgPHhlbi90eXBlcy5oPgotI2luY2x1ZGUgPHhlbi9yYnRyZWUuaD4K LQotc3RhdGljIHZvaWQgX19yYl9yb3RhdGVfbGVmdChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3Ry dWN0IHJiX3Jvb3QgKnJvb3QpCi17Ci0gICAgc3RydWN0IHJiX25vZGUgKnJpZ2h0ID0gbm9kZS0+ cmJfcmlnaHQ7Ci0gICAgc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsK IAotICAgIGlmICgobm9kZS0+cmJfcmlnaHQgPSByaWdodC0+cmJfbGVmdCkpCi0gICAgICAgIHJi X3NldF9wYXJlbnQocmlnaHQtPnJiX2xlZnQsIG5vZGUpOwotICAgIHJpZ2h0LT5yYl9sZWZ0ID0g bm9kZTsKKy8qCisgKiByZWQtYmxhY2sgdHJlZXMgcHJvcGVydGllczogIGh0dHA6Ly9lbi53aWtp cGVkaWEub3JnL3dpa2kvUmJ0cmVlCisgKgorICogIDEpIEEgbm9kZSBpcyBlaXRoZXIgcmVkIG9y IGJsYWNrCisgKiAgMikgVGhlIHJvb3QgaXMgYmxhY2sKKyAqICAzKSBBbGwgbGVhdmVzIChOVUxM KSBhcmUgYmxhY2sKKyAqICA0KSBCb3RoIGNoaWxkcmVuIG9mIGV2ZXJ5IHJlZCBub2RlIGFyZSBi bGFjaworICogIDUpIEV2ZXJ5IHNpbXBsZSBwYXRoIGZyb20gcm9vdCB0byBsZWF2ZXMgY29udGFp bnMgdGhlIHNhbWUgbnVtYmVyCisgKiAgICAgb2YgYmxhY2sgbm9kZXMuCisgKgorICogIDQgYW5k IDUgZ2l2ZSB0aGUgTyhsb2cgbikgZ3VhcmFudGVlLCBzaW5jZSA0IGltcGxpZXMgeW91IGNhbm5v dCBoYXZlIHR3bworICogIGNvbnNlY3V0aXZlIHJlZCBub2RlcyBpbiBhIHBhdGggYW5kIGV2ZXJ5 IHJlZCBub2RlIGlzIHRoZXJlZm9yZSBmb2xsb3dlZCBieQorICogIGEgYmxhY2suIFNvIGlmIEIg aXMgdGhlIG51bWJlciBvZiBibGFjayBub2RlcyBvbiBldmVyeSBzaW1wbGUgcGF0aCAoYXMgcGVy CisgKiAgNSksIHRoZW4gdGhlIGxvbmdlc3QgcG9zc2libGUgcGF0aCBkdWUgdG8gNCBpcyAyQi4K KyAqCisgKiAgV2Ugc2hhbGwgaW5kaWNhdGUgY29sb3Igd2l0aCBjYXNlLCB3aGVyZSBibGFjayBu b2RlcyBhcmUgdXBwZXJjYXNlIGFuZCByZWQKKyAqICBub2RlcyB3aWxsIGJlIGxvd2VyY2FzZS4g VW5rbm93biBjb2xvciBub2RlcyBzaGFsbCBiZSBkcmF3biBhcyByZWQgd2l0aGluCisgKiAgcGFy ZW50aGVzZXMgYW5kIGhhdmUgc29tZSBhY2NvbXBhbnlpbmcgdGV4dCBjb21tZW50LgorICovCiAK LSAgICByYl9zZXRfcGFyZW50KHJpZ2h0LCBwYXJlbnQpOworLyoKKyAqIE5vdGVzIG9uIGxvY2ts ZXNzIGxvb2t1cHM6CisgKgorICogQWxsIHN0b3JlcyB0byB0aGUgdHJlZSBzdHJ1Y3R1cmUgKHJi X2xlZnQgYW5kIHJiX3JpZ2h0KSBtdXN0IGJlIGRvbmUgdXNpbmcKKyAqIFdSSVRFX09OQ0UoKS4g QW5kIHdlIG11c3Qgbm90IGluYWR2ZXJ0ZW50bHkgY2F1c2UgKHRlbXBvcmFyeSkgbG9vcHMgaW4g dGhlCisgKiB0cmVlIHN0cnVjdHVyZSBhcyBzZWVuIGluIHByb2dyYW0gb3JkZXIuCisgKgorICog VGhlc2UgdHdvIHJlcXVpcmVtZW50cyB3aWxsIGFsbG93IGxvY2tsZXNzIGl0ZXJhdGlvbiBvZiB0 aGUgdHJlZSAtLSBub3QKKyAqIGNvcnJlY3QgaXRlcmF0aW9uIG1pbmQgeW91LCB0cmVlIHJvdGF0 aW9ucyBhcmUgbm90IGF0b21pYyBzbyBhIGxvb2t1cCBtaWdodAorICogbWlzcyBlbnRpcmUgc3Vi dHJlZXMuCisgKgorICogQnV0IHRoZXkgZG8gZ3VhcmFudGVlIHRoYXQgYW55IHN1Y2ggdHJhdmVy c2FsIHdpbGwgb25seSBzZWUgdmFsaWQgZWxlbWVudHMKKyAqIGFuZCB0aGF0IGl0IHdpbGwgaW5k ZWVkIGNvbXBsZXRlIC0tIGRvZXMgbm90IGdldCBzdHVjayBpbiBhIGxvb3AuCisgKgorICogSXQg YWxzbyBndWFyYW50ZWVzIHRoYXQgaWYgdGhlIGxvb2t1cCByZXR1cm5zIGFuIGVsZW1lbnQgaXQg aXMgdGhlICdjb3JyZWN0JworICogb25lLiBCdXQgbm90IHJldHVybmluZyBhbiBlbGVtZW50IGRv ZXMgX05PVF8gbWVhbiBpdCdzIG5vdCBwcmVzZW50LgorICoKKyAqIE5PVEU6CisgKgorICogU3Rv cmVzIHRvIF9fcmJfcGFyZW50X2NvbG9yIGFyZSBub3QgaW1wb3J0YW50IGZvciBzaW1wbGUgbG9v a3VwcyBzbyB0aG9zZQorICogYXJlIGxlZnQgdW5kb25lIGFzIG9mIG5vdy4gTm9yIGRpZCBJIGNo ZWNrIGZvciBsb29wcyBpbnZvbHZpbmcgcGFyZW50CisgKiBwb2ludGVycy4KKyAqLwogCi0gICAg aWYgKHBhcmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChub2RlID09IHBhcmVudC0+cmJfbGVmdCkK LSAgICAgICAgICAgIHBhcmVudC0+cmJfbGVmdCA9IHJpZ2h0OwotICAgICAgICBlbHNlCi0gICAg ICAgICAgICBwYXJlbnQtPnJiX3JpZ2h0ID0gcmlnaHQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAg ICAgcm9vdC0+cmJfbm9kZSA9IHJpZ2h0OwotICAgIHJiX3NldF9wYXJlbnQobm9kZSwgcmlnaHQp Oworc3RhdGljIGlubGluZSB2b2lkIHJiX3NldF9ibGFjayhzdHJ1Y3QgcmJfbm9kZSAqcmIpCit7 CisgICAgcmItPl9fcmJfcGFyZW50X2NvbG9yIHw9IFJCX0JMQUNLOwogfQogCi1zdGF0aWMgdm9p ZCBfX3JiX3JvdGF0ZV9yaWdodChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3Qg KnJvb3QpCitzdGF0aWMgaW5saW5lIHN0cnVjdCByYl9ub2RlICpyYl9yZWRfcGFyZW50KHN0cnVj dCByYl9ub2RlICpyZWQpCiB7Ci0gICAgc3RydWN0IHJiX25vZGUgKmxlZnQgPSBub2RlLT5yYl9s ZWZ0OwotICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7Ci0KLSAg ICBpZiAoKG5vZGUtPnJiX2xlZnQgPSBsZWZ0LT5yYl9yaWdodCkpCi0gICAgICAgIHJiX3NldF9w YXJlbnQobGVmdC0+cmJfcmlnaHQsIG5vZGUpOwotICAgIGxlZnQtPnJiX3JpZ2h0ID0gbm9kZTsK LQotICAgIHJiX3NldF9wYXJlbnQobGVmdCwgcGFyZW50KTsKKyAgICByZXR1cm4gKHN0cnVjdCBy Yl9ub2RlICopcmVkLT5fX3JiX3BhcmVudF9jb2xvcjsKK30KIAotICAgIGlmIChwYXJlbnQpCi0g ICAgewotICAgICAgICBpZiAobm9kZSA9PSBwYXJlbnQtPnJiX3JpZ2h0KQotICAgICAgICAgICAg cGFyZW50LT5yYl9yaWdodCA9IGxlZnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcmVu dC0+cmJfbGVmdCA9IGxlZnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcm9vdC0+cmJfbm9k ZSA9IGxlZnQ7Ci0gICAgcmJfc2V0X3BhcmVudChub2RlLCBsZWZ0KTsKKy8qCisgKiBIZWxwZXIg ZnVuY3Rpb24gZm9yIHJvdGF0aW9uczoKKyAqIC0gb2xkJ3MgcGFyZW50IGFuZCBjb2xvciBnZXQg YXNzaWduZWQgdG8gbmV3CisgKiAtIG9sZCBnZXRzIGFzc2lnbmVkIG5ldyBhcyBhIHBhcmVudCBh bmQgJ2NvbG9yJyBhcyBhIGNvbG9yLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fcmJfcm90 YXRlX3NldF9wYXJlbnRzKHN0cnVjdCByYl9ub2RlICpvbGQsIHN0cnVjdCByYl9ub2RlICpuZXcs CisgICAgICAgICAgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgaW50IGNvbG9yKQoreworICAgIHN0 cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9wYXJlbnQob2xkKTsKKyAgICBuZXctPl9fcmJfcGFy ZW50X2NvbG9yID0gb2xkLT5fX3JiX3BhcmVudF9jb2xvcjsKKyAgICByYl9zZXRfcGFyZW50X2Nv bG9yKG9sZCwgbmV3LCBjb2xvcik7CisgICAgX19yYl9jaGFuZ2VfY2hpbGQob2xkLCBuZXcsIHBh cmVudCwgcm9vdCk7CiB9CiAKLXZvaWQgcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICpu b2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAor X19yYl9pbnNlcnQoc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9yb290ICpyb290LAor ICAgICAgICB2b2lkICgqYXVnbWVudF9yb3RhdGUpKHN0cnVjdCByYl9ub2RlICpvbGQsIHN0cnVj dCByYl9ub2RlICpuZXcpKQogewotICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsICpncGFyZW50 OworICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9yZWRfcGFyZW50KG5vZGUpLCAqZ3Bh cmVudCwgKnRtcDsKIAotICAgIHdoaWxlICgocGFyZW50ID0gcmJfcGFyZW50KG5vZGUpKSAmJiBy Yl9pc19yZWQocGFyZW50KSkKKyAgICB3aGlsZSAodHJ1ZSkKICAgICB7Ci0gICAgICAgIGdwYXJl bnQgPSByYl9wYXJlbnQocGFyZW50KTsKLQotICAgICAgICBpZiAocGFyZW50ID09IGdwYXJlbnQt PnJiX2xlZnQpCisgICAgICAgIC8qCisgICAgICAgICAqIExvb3AgaW52YXJpYW50OiBub2RlIGlz IHJlZAorICAgICAgICAgKgorICAgICAgICAgKiBJZiB0aGVyZSBpcyBhIGJsYWNrIHBhcmVudCwg d2UgYXJlIGRvbmUuCisgICAgICAgICAqIE90aGVyd2lzZSwgdGFrZSBzb21lIGNvcnJlY3RpdmUg YWN0aW9uIGFzIHdlIGRvbid0CisgICAgICAgICAqIHdhbnQgYSByZWQgcm9vdCBvciB0d28gY29u c2VjdXRpdmUgcmVkIG5vZGVzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCFwYXJlbnQpCiAg ICAgICAgIHsKKyAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3Iobm9kZSwgTlVMTCwgUkJf QkxBQ0spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAocmJfaXNfYmxh Y2socGFyZW50KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGdwYXJlbnQgPSByYl9y ZWRfcGFyZW50KHBhcmVudCk7CisKKyAgICAgICAgdG1wID0gZ3BhcmVudC0+cmJfcmlnaHQ7Cisg ICAgICAgIGlmIChwYXJlbnQgIT0gdG1wKQorICAgICAgICB7ICAgIC8qIHBhcmVudCA9PSBncGFy ZW50LT5yYl9sZWZ0ICovCisgICAgICAgICAgICBpZiAodG1wICYmIHJiX2lzX3JlZCh0bXApKQog ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCByYl9ub2RlICp1 bmNsZSA9IGdwYXJlbnQtPnJiX3JpZ2h0OwotICAgICAgICAgICAgICAgIGlmICh1bmNsZSAmJiBy Yl9pc19yZWQodW5jbGUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg cmJfc2V0X2JsYWNrKHVuY2xlKTsKLSAgICAgICAgICAgICAgICAgICAgcmJfc2V0X2JsYWNrKHBh cmVudCk7Ci0gICAgICAgICAgICAgICAgICAgIHJiX3NldF9yZWQoZ3BhcmVudCk7Ci0gICAgICAg ICAgICAgICAgICAgIG5vZGUgPSBncGFyZW50OwotICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAg ICAgKiBDYXNlIDEgLSBjb2xvciBmbGlwcworICAgICAgICAgICAgICAgICAqCisgICAgICAgICAg ICAgICAgICogICAgICAgRyAgICAgICAgICAgIGcKKyAgICAgICAgICAgICAgICAgKiAgICAgIC8g XCAgICAgICAgICAvIFwKKyAgICAgICAgICAgICAgICAgKiAgICAgcCAgIHUgIC0tPiAgIFAgICBV CisgICAgICAgICAgICAgICAgICogICAgLyAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAgICAg KiAgIG4gICAgICAgICAgICBuCisgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAg KiBIb3dldmVyLCBzaW5jZSBnJ3MgcGFyZW50IG1pZ2h0IGJlIHJlZCwgYW5kCisgICAgICAgICAg ICAgICAgICogNCkgZG9lcyBub3QgYWxsb3cgdGhpcywgd2UgbmVlZCB0byByZWN1cnNlCisgICAg ICAgICAgICAgICAgICogYXQgZy4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg ICByYl9zZXRfcGFyZW50X2NvbG9yKHRtcCwgZ3BhcmVudCwgUkJfQkxBQ0spOworICAgICAgICAg ICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IocGFyZW50LCBncGFyZW50LCBSQl9CTEFDSyk7Cisg ICAgICAgICAgICAgICAgbm9kZSA9IGdwYXJlbnQ7CisgICAgICAgICAgICAgICAgcGFyZW50ID0g cmJfcGFyZW50KG5vZGUpOworICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3Iobm9k ZSwgcGFyZW50LCBSQl9SRUQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg ICAgfQogCi0gICAgICAgICAgICBpZiAocGFyZW50LT5yYl9yaWdodCA9PSBub2RlKQorICAgICAg ICAgICAgdG1wID0gcGFyZW50LT5yYl9yaWdodDsKKyAgICAgICAgICAgIGlmIChub2RlID09IHRt cCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlciBzdHJ1Y3QgcmJfbm9k ZSAqdG1wOwotICAgICAgICAgICAgICAgIF9fcmJfcm90YXRlX2xlZnQocGFyZW50LCByb290KTsK LSAgICAgICAgICAgICAgICB0bXAgPSBwYXJlbnQ7CisgICAgICAgICAgICAgICAgLyoKKyAgICAg ICAgICAgICAgICAgKiBDYXNlIDIgLSBsZWZ0IHJvdGF0ZSBhdCBwYXJlbnQKKyAgICAgICAgICAg ICAgICAgKgorICAgICAgICAgICAgICAgICAqICAgICAgRyAgICAgICAgICAgICBHCisgICAgICAg ICAgICAgICAgICogICAgIC8gXCAgICAgICAgICAgLyBcCisgICAgICAgICAgICAgICAgICogICAg cCAgIFUgIC0tPiAgICBuICAgVQorICAgICAgICAgICAgICAgICAqICAgICBcICAgICAgICAgICAv CisgICAgICAgICAgICAgICAgICogICAgICBuICAgICAgICAgcAorICAgICAgICAgICAgICAgICAq CisgICAgICAgICAgICAgICAgICogVGhpcyBzdGlsbCBsZWF2ZXMgdXMgaW4gdmlvbGF0aW9uIG9m IDQpLCB0aGUKKyAgICAgICAgICAgICAgICAgKiBjb250aW51YXRpb24gaW50byBDYXNlIDMgd2ls bCBmaXggdGhhdC4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB0bXAgPSBu b2RlLT5yYl9sZWZ0OworICAgICAgICAgICAgICAgIFdSSVRFX09OQ0UocGFyZW50LT5yYl9yaWdo dCwgdG1wKTsKKyAgICAgICAgICAgICAgICBXUklURV9PTkNFKG5vZGUtPnJiX2xlZnQsIHBhcmVu dCk7CisgICAgICAgICAgICAgICAgaWYgKHRtcCkKKyAgICAgICAgICAgICAgICAgICAgcmJfc2V0 X3BhcmVudF9jb2xvcih0bXAsIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUkJfQkxBQ0spOworICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IocGFyZW50 LCBub2RlLCBSQl9SRUQpOworICAgICAgICAgICAgICAgIGF1Z21lbnRfcm90YXRlKHBhcmVudCwg bm9kZSk7CiAgICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKLSAgICAgICAgICAgICAgICBu b2RlID0gdG1wOworICAgICAgICAgICAgICAgIHRtcCA9IG5vZGUtPnJiX3JpZ2h0OwogICAgICAg ICAgICAgfQogCi0gICAgICAgICAgICByYl9zZXRfYmxhY2socGFyZW50KTsKLSAgICAgICAgICAg IHJiX3NldF9yZWQoZ3BhcmVudCk7Ci0gICAgICAgICAgICBfX3JiX3JvdGF0ZV9yaWdodChncGFy ZW50LCByb290KTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAg ICAgKiBDYXNlIDMgLSByaWdodCByb3RhdGUgYXQgZ3BhcmVudAorICAgICAgICAgICAgICoKKyAg ICAgICAgICAgICAqICAgICAgICBHICAgICAgICAgICBQCisgICAgICAgICAgICAgKiAgICAgICAv IFwgICAgICAgICAvIFwKKyAgICAgICAgICAgICAqICAgICAgcCAgIFUgIC0tPiAgbiAgIGcKKyAg ICAgICAgICAgICAqICAgICAvICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgKiAgICBu ICAgICAgICAgICAgICAgICAgIFUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgV1JJVEVf T05DRShncGFyZW50LT5yYl9sZWZ0LCB0bXApOyAvKiA9PSBwYXJlbnQtPnJiX3JpZ2h0ICovCisg ICAgICAgICAgICBXUklURV9PTkNFKHBhcmVudC0+cmJfcmlnaHQsIGdwYXJlbnQpOworICAgICAg ICAgICAgaWYgKHRtcCkKKyAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHRtcCwg Z3BhcmVudCwgUkJfQkxBQ0spOworICAgICAgICAgICAgX19yYl9yb3RhdGVfc2V0X3BhcmVudHMo Z3BhcmVudCwgcGFyZW50LCByb290LCBSQl9SRUQpOworICAgICAgICAgICAgYXVnbWVudF9yb3Rh dGUoZ3BhcmVudCwgcGFyZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdG1wID0gZ3BhcmVudC0+cmJfbGVmdDsK KyAgICAgICAgICAgIGlmICh0bXAgJiYgcmJfaXNfcmVkKHRtcCkpCiAgICAgICAgICAgICB7Ci0g ICAgICAgICAgICAgICAgcmVnaXN0ZXIgc3RydWN0IHJiX25vZGUgKnVuY2xlID0gZ3BhcmVudC0+ cmJfbGVmdDsKLSAgICAgICAgICAgICAgICBpZiAodW5jbGUgJiYgcmJfaXNfcmVkKHVuY2xlKSkK LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJiX3NldF9ibGFjayh1bmNs ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJiX3NldF9ibGFjayhwYXJlbnQpOwotICAgICAgICAg ICAgICAgICAgICByYl9zZXRfcmVkKGdwYXJlbnQpOwotICAgICAgICAgICAgICAgICAgICBub2Rl ID0gZ3BhcmVudDsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIC8qIENhc2UgMSAtIGNvbG9yIGZsaXBzICovCisgICAgICAg ICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcih0bXAsIGdwYXJlbnQsIFJCX0JMQUNLKTsKKyAg ICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHBhcmVudCwgZ3BhcmVudCwgUkJfQkxB Q0spOworICAgICAgICAgICAgICAgIG5vZGUgPSBncGFyZW50OworICAgICAgICAgICAgICAgIHBh cmVudCA9IHJiX3BhcmVudChub2RlKTsKKyAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2Nv bG9yKG5vZGUsIHBhcmVudCwgUkJfUkVEKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHBhcmVudC0+cmJfbGVmdCA9PSBub2RlKQor ICAgICAgICAgICAgdG1wID0gcGFyZW50LT5yYl9sZWZ0OworICAgICAgICAgICAgaWYgKG5vZGUg PT0gdG1wKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCBy Yl9ub2RlICp0bXA7Ci0gICAgICAgICAgICAgICAgX19yYl9yb3RhdGVfcmlnaHQocGFyZW50LCBy b290KTsKLSAgICAgICAgICAgICAgICB0bXAgPSBwYXJlbnQ7CisgICAgICAgICAgICAgICAgLyog Q2FzZSAyIC0gcmlnaHQgcm90YXRlIGF0IHBhcmVudCAqLworICAgICAgICAgICAgICAgIHRtcCA9 IG5vZGUtPnJiX3JpZ2h0OworICAgICAgICAgICAgICAgIFdSSVRFX09OQ0UocGFyZW50LT5yYl9s ZWZ0LCB0bXApOworICAgICAgICAgICAgICAgIFdSSVRFX09OQ0Uobm9kZS0+cmJfcmlnaHQsIHBh cmVudCk7CisgICAgICAgICAgICAgICAgaWYgKHRtcCkKKyAgICAgICAgICAgICAgICAgICAgcmJf c2V0X3BhcmVudF9jb2xvcih0bXAsIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUkJfQkxBQ0spOworICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IocGFy ZW50LCBub2RlLCBSQl9SRUQpOworICAgICAgICAgICAgICAgIGF1Z21lbnRfcm90YXRlKHBhcmVu dCwgbm9kZSk7CiAgICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKLSAgICAgICAgICAgICAg ICBub2RlID0gdG1wOworICAgICAgICAgICAgICAgIHRtcCA9IG5vZGUtPnJiX2xlZnQ7CiAgICAg ICAgICAgICB9CiAKLSAgICAgICAgICAgIHJiX3NldF9ibGFjayhwYXJlbnQpOwotICAgICAgICAg ICAgcmJfc2V0X3JlZChncGFyZW50KTsKLSAgICAgICAgICAgIF9fcmJfcm90YXRlX2xlZnQoZ3Bh cmVudCwgcm9vdCk7CisgICAgICAgICAgICAvKiBDYXNlIDMgLSBsZWZ0IHJvdGF0ZSBhdCBncGFy ZW50ICovCisgICAgICAgICAgICBXUklURV9PTkNFKGdwYXJlbnQtPnJiX3JpZ2h0LCB0bXApOyAv KiA9PSBwYXJlbnQtPnJiX2xlZnQgKi8KKyAgICAgICAgICAgIFdSSVRFX09OQ0UocGFyZW50LT5y Yl9sZWZ0LCBncGFyZW50KTsKKyAgICAgICAgICAgIGlmICh0bXApCisgICAgICAgICAgICAgICAg cmJfc2V0X3BhcmVudF9jb2xvcih0bXAsIGdwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAgICAg IF9fcmJfcm90YXRlX3NldF9wYXJlbnRzKGdwYXJlbnQsIHBhcmVudCwgcm9vdCwgUkJfUkVEKTsK KyAgICAgICAgICAgIGF1Z21lbnRfcm90YXRlKGdwYXJlbnQsIHBhcmVudCk7CisgICAgICAgICAg ICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIHJiX3NldF9ibGFjayhyb290LT5yYl9u b2RlKTsKIH0KLUVYUE9SVF9TWU1CT0wocmJfaW5zZXJ0X2NvbG9yKTsKIAotc3RhdGljIHZvaWQg X19yYl9lcmFzZV9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX25vZGUgKnBh cmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJiX3Jvb3QgKnJvb3Qp CisvKgorICogSW5saW5lIHZlcnNpb24gZm9yIHJiX2VyYXNlKCkgdXNlIC0gd2Ugd2FudCB0byBi ZSBhYmxlIHRvIGlubGluZQorICogYW5kIGVsaW1pbmF0ZSB0aGUgZHVtbXlfcm90YXRlIGNhbGxi YWNrIHRoZXJlCisgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorX19fX3JiX2VyYXNl X2NvbG9yKHN0cnVjdCByYl9ub2RlICpwYXJlbnQsIHN0cnVjdCByYl9yb290ICpyb290LAorICAg IHZvaWQgKCphdWdtZW50X3JvdGF0ZSkoc3RydWN0IHJiX25vZGUgKm9sZCwgc3RydWN0IHJiX25v ZGUgKm5ldykpCiB7Ci0gICAgc3RydWN0IHJiX25vZGUgKm90aGVyOworICAgIHN0cnVjdCByYl9u b2RlICpub2RlID0gTlVMTCwgKnNpYmxpbmcsICp0bXAxLCAqdG1wMjsKIAotICAgIHdoaWxlICgo IW5vZGUgfHwgcmJfaXNfYmxhY2sobm9kZSkpICYmIG5vZGUgIT0gcm9vdC0+cmJfbm9kZSkKKyAg ICB3aGlsZSAodHJ1ZSkKICAgICB7Ci0gICAgICAgIGlmIChwYXJlbnQtPnJiX2xlZnQgPT0gbm9k ZSkKLSAgICAgICAgewotICAgICAgICAgICAgb3RoZXIgPSBwYXJlbnQtPnJiX3JpZ2h0OwotICAg ICAgICAgICAgaWYgKHJiX2lzX3JlZChvdGhlcikpCisgICAgICAgIC8qCisgICAgICAgICAqIExv b3AgaW52YXJpYW50czoKKyAgICAgICAgICogLSBub2RlIGlzIGJsYWNrIChvciBOVUxMIG9uIGZp cnN0IGl0ZXJhdGlvbikKKyAgICAgICAgICogLSBub2RlIGlzIG5vdCB0aGUgcm9vdCAocGFyZW50 IGlzIG5vdCBOVUxMKQorICAgICAgICAgKiAtIEFsbCBsZWFmIHBhdGhzIGdvaW5nIHRocm91Z2gg cGFyZW50IGFuZCBub2RlIGhhdmUgYQorICAgICAgICAgKiAgIGJsYWNrIG5vZGUgY291bnQgdGhh dCBpcyAxIGxvd2VyIHRoYW4gb3RoZXIgbGVhZiBwYXRocy4KKyAgICAgICAgICovCisgICAgICAg IHNpYmxpbmcgPSBwYXJlbnQtPnJiX3JpZ2h0OworICAgICAgICBpZiAobm9kZSAhPSBzaWJsaW5n KQorICAgICAgICB7ICAgIC8qIG5vZGUgPT0gcGFyZW50LT5yYl9sZWZ0ICovCisgICAgICAgICAg ICBpZiAocmJfaXNfcmVkKHNpYmxpbmcpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg IHJiX3NldF9ibGFjayhvdGhlcik7Ci0gICAgICAgICAgICAgICAgcmJfc2V0X3JlZChwYXJlbnQp OwotICAgICAgICAgICAgICAgIF9fcmJfcm90YXRlX2xlZnQocGFyZW50LCByb290KTsKLSAgICAg ICAgICAgICAgICBvdGhlciA9IHBhcmVudC0+cmJfcmlnaHQ7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoKCFvdGhlci0+cmJfbGVmdCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfbGVm dCkpICYmCi0gICAgICAgICAgICAgICAgKCFvdGhlci0+cmJfcmlnaHQgfHwgcmJfaXNfYmxhY2so b3RoZXItPnJiX3JpZ2h0KSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmJfc2V0 X3JlZChvdGhlcik7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IHBhcmVudDsKLSAgICAgICAgICAg ICAgICBwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisgICAgICAgICAgICAgICAgLyoKKyAgICAg ICAgICAgICAgICAgKiBDYXNlIDEgLSBsZWZ0IHJvdGF0ZSBhdCBwYXJlbnQKKyAgICAgICAgICAg ICAgICAgKgorICAgICAgICAgICAgICAgICAqICAgICBQICAgICAgICAgICAgICAgUworICAgICAg ICAgICAgICAgICAqICAgIC8gXCAgICAgICAgICAgICAvIFwKKyAgICAgICAgICAgICAgICAgKiAg IE4gICBzICAgIC0tPiAgICBwICAgU3IKKyAgICAgICAgICAgICAgICAgKiAgICAgIC8gXCAgICAg ICAgIC8gXAorICAgICAgICAgICAgICAgICAqICAgICBTbCAgU3IgICAgICBOICAgU2wKKyAgICAg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB0bXAxID0gc2libGluZy0+cmJfbGVmdDsK KyAgICAgICAgICAgICAgICBXUklURV9PTkNFKHBhcmVudC0+cmJfcmlnaHQsIHRtcDEpOworICAg ICAgICAgICAgICAgIFdSSVRFX09OQ0Uoc2libGluZy0+cmJfbGVmdCwgcGFyZW50KTsKKyAgICAg ICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHRtcDEsIHBhcmVudCwgUkJfQkxBQ0spOwor ICAgICAgICAgICAgICAgIF9fcmJfcm90YXRlX3NldF9wYXJlbnRzKHBhcmVudCwgc2libGluZywg cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQl9SRUQpOworICAgICAgICAgICAg ICAgIGF1Z21lbnRfcm90YXRlKHBhcmVudCwgc2libGluZyk7CisgICAgICAgICAgICAgICAgc2li bGluZyA9IHRtcDE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICB0bXAxID0gc2libGluZy0+cmJfcmlnaHQ7CisgICAgICAgICAgICBpZiAoIXRtcDEgfHwgcmJf aXNfYmxhY2sodG1wMSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvdGhl ci0+cmJfcmlnaHQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX3JpZ2h0KSkKKyAgICAgICAgICAg ICAgICB0bXAyID0gc2libGluZy0+cmJfbGVmdDsKKyAgICAgICAgICAgICAgICBpZiAoIXRtcDIg fHwgcmJfaXNfYmxhY2sodG1wMikpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgcmJfbm9kZSAqb19sZWZ0OwotICAgICAgICAgICAgICAgICAgICBpZiAoKG9f bGVmdCA9IG90aGVyLT5yYl9sZWZ0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJiX3NldF9i bGFjayhvX2xlZnQpOwotICAgICAgICAgICAgICAgICAgICByYl9zZXRfcmVkKG90aGVyKTsKLSAg ICAgICAgICAgICAgICAgICAgX19yYl9yb3RhdGVfcmlnaHQob3RoZXIsIHJvb3QpOwotICAgICAg ICAgICAgICAgICAgICBvdGhlciA9IHBhcmVudC0+cmJfcmlnaHQ7CisgICAgICAgICAgICAgICAg ICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIENhc2UgMiAtIHNpYmxpbmcgY29sb3IgZmxp cAorICAgICAgICAgICAgICAgICAgICAgKiAocCBjb3VsZCBiZSBlaXRoZXIgY29sb3IgaGVyZSkK KyAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICogICAgKHApICAg ICAgICAgICAocCkKKyAgICAgICAgICAgICAgICAgICAgICogICAgLyBcICAgICAgICAgICAvIFwK KyAgICAgICAgICAgICAgICAgICAgICogICBOICAgUyAgICAtLT4gIE4gICBzCisgICAgICAgICAg ICAgICAgICAgICAqICAgICAgLyBcICAgICAgICAgICAvIFwKKyAgICAgICAgICAgICAgICAgICAg ICogICAgIFNsICBTciAgICAgICAgU2wgIFNyCisgICAgICAgICAgICAgICAgICAgICAqCisgICAg ICAgICAgICAgICAgICAgICAqIFRoaXMgbGVhdmVzIHVzIHZpb2xhdGluZyA1KSB3aGljaAorICAg ICAgICAgICAgICAgICAgICAgKiBjYW4gYmUgZml4ZWQgYnkgZmxpcHBpbmcgcCB0byBibGFjawor ICAgICAgICAgICAgICAgICAgICAgKiBpZiBpdCB3YXMgcmVkLCBvciBieSByZWN1cnNpbmcgYXQg cC4KKyAgICAgICAgICAgICAgICAgICAgICogcCBpcyByZWQgd2hlbiBjb21pbmcgZnJvbSBDYXNl IDEuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICByYl9zZXRf cGFyZW50X2NvbG9yKHNpYmxpbmcsIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUkJfUkVEKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJiX2lzX3JlZChwYXJlbnQp KQorICAgICAgICAgICAgICAgICAgICAgICAgcmJfc2V0X2JsYWNrKHBhcmVudCk7CisgICAgICAg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgbm9kZSA9IHBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9 IHJiX3BhcmVudChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIHJiX3NldF9jb2xvcihvdGhlciwgcmJfY29sb3IocGFyZW50KSk7Ci0gICAgICAg ICAgICAgICAgcmJfc2V0X2JsYWNrKHBhcmVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKG90aGVy LT5yYl9yaWdodCkKLSAgICAgICAgICAgICAgICAgICAgcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9y aWdodCk7Ci0gICAgICAgICAgICAgICAgX19yYl9yb3RhdGVfbGVmdChwYXJlbnQsIHJvb3QpOwot ICAgICAgICAgICAgICAgIG5vZGUgPSByb290LT5yYl9ub2RlOwotICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQ2FzZSAzIC0gcmln aHQgcm90YXRlIGF0IHNpYmxpbmcKKyAgICAgICAgICAgICAgICAgKiAocCBjb3VsZCBiZSBlaXRo ZXIgY29sb3IgaGVyZSkKKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqICAg KHApICAgICAgICAgICAocCkKKyAgICAgICAgICAgICAgICAgKiAgIC8gXCAgICAgICAgICAgLyBc CisgICAgICAgICAgICAgICAgICogIE4gICBTICAgIC0tPiAgTiAgIHNsCisgICAgICAgICAgICAg ICAgICogICAgIC8gXCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICogICAgc2wgIFNy ICAgICAgICAgICAgUworICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICBTcgorICAgICAgICAg ICAgICAgICAqCisgICAgICAgICAgICAgICAgICogTm90ZTogcCBtaWdodCBiZSByZWQsIGFuZCB0 aGVuIGJvdGgKKyAgICAgICAgICAgICAgICAgKiBwIGFuZCBzbCBhcmUgcmVkIGFmdGVyIHJvdGF0 aW9uKHdoaWNoCisgICAgICAgICAgICAgICAgICogYnJlYWtzIHByb3BlcnR5IDQpLiBUaGlzIGlz IGZpeGVkIGluCisgICAgICAgICAgICAgICAgICogQ2FzZSA0IChpbiBfX3JiX3JvdGF0ZV9zZXRf cGFyZW50cygpCisgICAgICAgICAgICAgICAgICogICAgICAgICB3aGljaCBzZXQgc2wgdGhlIGNv bG9yIG9mIHAKKyAgICAgICAgICAgICAgICAgKiAgICAgICAgIGFuZCBzZXQgcCBSQl9CTEFDSykK KyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqICAgKHApICAgICAgICAgICAg KHNsKQorICAgICAgICAgICAgICAgICAqICAgLyBcICAgICAgICAgICAgLyAgXAorICAgICAgICAg ICAgICAgICAqICBOICAgc2wgICAtLT4gICBQICAgIFMKKyAgICAgICAgICAgICAgICAgKiAgICAg ICBcICAgICAgICAvICAgICAgXAorICAgICAgICAgICAgICAgICAqICAgICAgICBTICAgICAgTiAg ICAgICAgU3IKKyAgICAgICAgICAgICAgICAgKiAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg KiAgICAgICAgICBTcgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHRtcDEg PSB0bXAyLT5yYl9yaWdodDsKKyAgICAgICAgICAgICAgICBXUklURV9PTkNFKHNpYmxpbmctPnJi X2xlZnQsIHRtcDEpOworICAgICAgICAgICAgICAgIFdSSVRFX09OQ0UodG1wMi0+cmJfcmlnaHQs IHNpYmxpbmcpOworICAgICAgICAgICAgICAgIFdSSVRFX09OQ0UocGFyZW50LT5yYl9yaWdodCwg dG1wMik7CisgICAgICAgICAgICAgICAgaWYgKHRtcDEpCisgICAgICAgICAgICAgICAgICAgIHJi X3NldF9wYXJlbnRfY29sb3IodG1wMSwgc2libGluZywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUkJfQkxBQ0spOworICAgICAgICAgICAgICAgIGF1Z21lbnRfcm90YXRlKHNpYmxp bmcsIHRtcDIpOworICAgICAgICAgICAgICAgIHRtcDEgPSBzaWJsaW5nOworICAgICAgICAgICAg ICAgIHNpYmxpbmcgPSB0bXAyOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgLyoKKyAgICAg ICAgICAgICAqIENhc2UgNCAtIGxlZnQgcm90YXRlIGF0IHBhcmVudCArIGNvbG9yIGZsaXBzCisg ICAgICAgICAgICAgKiAocCBhbmQgc2wgY291bGQgYmUgZWl0aGVyIGNvbG9yIGhlcmUuCisgICAg ICAgICAgICAgKiAgQWZ0ZXIgcm90YXRpb24sIHAgYmVjb21lcyBibGFjaywgcyBhY3F1aXJlcwor ICAgICAgICAgICAgICogIHAncyBjb2xvciwgYW5kIHNsIGtlZXBzIGl0cyBjb2xvcikKKyAgICAg ICAgICAgICAqCisgICAgICAgICAgICAgKiAgICAgIChwKSAgICAgICAgICAgICAocykKKyAgICAg ICAgICAgICAqICAgICAgLyBcICAgICAgICAgICAgIC8gXAorICAgICAgICAgICAgICogICAgIE4g ICBTICAgICAtLT4gICBQICAgU3IKKyAgICAgICAgICAgICAqICAgICAgICAvIFwgICAgICAgICAv IFwKKyAgICAgICAgICAgICAqICAgICAgKHNsKSBzciAgICAgIE4gIChzbCkKKyAgICAgICAgICAg ICAqLworICAgICAgICAgICAgdG1wMiA9IHNpYmxpbmctPnJiX2xlZnQ7CisgICAgICAgICAgICBX UklURV9PTkNFKHBhcmVudC0+cmJfcmlnaHQsIHRtcDIpOworICAgICAgICAgICAgV1JJVEVfT05D RShzaWJsaW5nLT5yYl9sZWZ0LCBwYXJlbnQpOworICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9j b2xvcih0bXAxLCBzaWJsaW5nLCBSQl9CTEFDSyk7CisgICAgICAgICAgICBpZiAodG1wMikKKyAg ICAgICAgICAgICAgICByYl9zZXRfcGFyZW50KHRtcDIsIHBhcmVudCk7CisgICAgICAgICAgICBf X3JiX3JvdGF0ZV9zZXRfcGFyZW50cyhwYXJlbnQsIHNpYmxpbmcsIHJvb3QsCisgICAgICAgICAg ICAgICAgICAgICAgICBSQl9CTEFDSyk7CisgICAgICAgICAgICBhdWdtZW50X3JvdGF0ZShwYXJl bnQsIHNpYmxpbmcpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZWxz ZQogICAgICAgICB7Ci0gICAgICAgICAgICBvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKLSAgICAg ICAgICAgIGlmIChyYl9pc19yZWQob3RoZXIpKQorICAgICAgICAgICAgc2libGluZyA9IHBhcmVu dC0+cmJfbGVmdDsKKyAgICAgICAgICAgIGlmIChyYl9pc19yZWQoc2libGluZykpCiAgICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgcmJfc2V0X2JsYWNrKG90aGVyKTsKLSAgICAgICAgICAg ICAgICByYl9zZXRfcmVkKHBhcmVudCk7Ci0gICAgICAgICAgICAgICAgX19yYl9yb3RhdGVfcmln aHQocGFyZW50LCByb290KTsKLSAgICAgICAgICAgICAgICBvdGhlciA9IHBhcmVudC0+cmJfbGVm dDsKKyAgICAgICAgICAgICAgICAvKiBDYXNlIDEgLSByaWdodCByb3RhdGUgYXQgcGFyZW50ICov CisgICAgICAgICAgICAgICAgdG1wMSA9IHNpYmxpbmctPnJiX3JpZ2h0OworICAgICAgICAgICAg ICAgIFdSSVRFX09OQ0UocGFyZW50LT5yYl9sZWZ0LCB0bXAxKTsKKyAgICAgICAgICAgICAgICBX UklURV9PTkNFKHNpYmxpbmctPnJiX3JpZ2h0LCBwYXJlbnQpOworICAgICAgICAgICAgICAgIHJi X3NldF9wYXJlbnRfY29sb3IodG1wMSwgcGFyZW50LCBSQl9CTEFDSyk7CisgICAgICAgICAgICAg ICAgX19yYl9yb3RhdGVfc2V0X3BhcmVudHMocGFyZW50LCBzaWJsaW5nLCByb290LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJCX1JFRCk7CisgICAgICAgICAgICAgICAgYXVnbWVudF9y b3RhdGUocGFyZW50LCBzaWJsaW5nKTsKKyAgICAgICAgICAgICAgICBzaWJsaW5nID0gdG1wMTsK ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoIW90aGVyLT5yYl9sZWZ0IHx8IHJiX2lz X2JsYWNrKG90aGVyLT5yYl9sZWZ0KSkgJiYKLSAgICAgICAgICAgICAgICAoIW90aGVyLT5yYl9y aWdodCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfcmlnaHQpKSkKKyAgICAgICAgICAgIHRtcDEg PSBzaWJsaW5nLT5yYl9sZWZ0OworICAgICAgICAgICAgaWYgKCF0bXAxIHx8IHJiX2lzX2JsYWNr KHRtcDEpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJiX3NldF9yZWQob3RoZXIp OwotICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQ7Ci0gICAgICAgICAgICAgICAgcGFyZW50 ID0gcmJfcGFyZW50KG5vZGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghb3RoZXItPnJiX2xlZnQgfHwgcmJfaXNf YmxhY2sob3RoZXItPnJiX2xlZnQpKQorICAgICAgICAgICAgICAgIHRtcDIgPSBzaWJsaW5nLT5y Yl9yaWdodDsKKyAgICAgICAgICAgICAgICBpZiAoIXRtcDIgfHwgcmJfaXNfYmxhY2sodG1wMikp CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBzdHJ1Y3Qg cmJfbm9kZSAqb19yaWdodDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChvX3JpZ2h0ID0gb3Ro ZXItPnJiX3JpZ2h0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJiX3NldF9ibGFjayhvX3Jp Z2h0KTsKLSAgICAgICAgICAgICAgICAgICAgcmJfc2V0X3JlZChvdGhlcik7Ci0gICAgICAgICAg ICAgICAgICAgIF9fcmJfcm90YXRlX2xlZnQob3RoZXIsIHJvb3QpOwotICAgICAgICAgICAgICAg ICAgICBvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2Fz ZSAyIC0gc2libGluZyBjb2xvciBmbGlwICovCisgICAgICAgICAgICAgICAgICAgIHJiX3NldF9w YXJlbnRfY29sb3Ioc2libGluZywgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSQl9SRUQpOworICAgICAgICAgICAgICAgICAgICBpZiAocmJfaXNfcmVkKHBhcmVudCkp CisgICAgICAgICAgICAgICAgICAgICAgICByYl9zZXRfYmxhY2socGFyZW50KTsKKyAgICAgICAg ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICBub2RlID0gcGFyZW50OworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0g cmJfcGFyZW50KG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKLSAgICAgICAg ICAgICAgICByYl9zZXRfYmxhY2socGFyZW50KTsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXIt PnJiX2xlZnQpCi0gICAgICAgICAgICAgICAgICAgIHJiX3NldF9ibGFjayhvdGhlci0+cmJfbGVm dCk7Ci0gICAgICAgICAgICAgICAgX19yYl9yb3RhdGVfcmlnaHQocGFyZW50LCByb290KTsKLSAg ICAgICAgICAgICAgICBub2RlID0gcm9vdC0+cmJfbm9kZTsKLSAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAvKiBDYXNlIDMgLSBsZWZ0IHJvdGF0ZSBhdCBzaWJsaW5nICov CisgICAgICAgICAgICAgICAgdG1wMSA9IHRtcDItPnJiX2xlZnQ7CisgICAgICAgICAgICAgICAg V1JJVEVfT05DRShzaWJsaW5nLT5yYl9yaWdodCwgdG1wMSk7CisgICAgICAgICAgICAgICAgV1JJ VEVfT05DRSh0bXAyLT5yYl9sZWZ0LCBzaWJsaW5nKTsKKyAgICAgICAgICAgICAgICBXUklURV9P TkNFKHBhcmVudC0+cmJfbGVmdCwgdG1wMik7CisgICAgICAgICAgICAgICAgaWYgKHRtcDEpCisg ICAgICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IodG1wMSwgc2libGluZywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkJfQkxBQ0spOworICAgICAgICAgICAgICAg IGF1Z21lbnRfcm90YXRlKHNpYmxpbmcsIHRtcDIpOworICAgICAgICAgICAgICAgIHRtcDEgPSBz aWJsaW5nOworICAgICAgICAgICAgICAgIHNpYmxpbmcgPSB0bXAyOwogICAgICAgICAgICAgfQor ICAgICAgICAgICAgLyogQ2FzZSA0IC0gcmlnaHQgcm90YXRlIGF0IHBhcmVudCArIGNvbG9yIGZs aXBzICovCisgICAgICAgICAgICB0bXAyID0gc2libGluZy0+cmJfcmlnaHQ7CisgICAgICAgICAg ICBXUklURV9PTkNFKHBhcmVudC0+cmJfbGVmdCwgdG1wMik7CisgICAgICAgICAgICBXUklURV9P TkNFKHNpYmxpbmctPnJiX3JpZ2h0LCBwYXJlbnQpOworICAgICAgICAgICAgcmJfc2V0X3BhcmVu dF9jb2xvcih0bXAxLCBzaWJsaW5nLCBSQl9CTEFDSyk7CisgICAgICAgICAgICBpZiAodG1wMikK KyAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50KHRtcDIsIHBhcmVudCk7CisgICAgICAgICAg ICBfX3JiX3JvdGF0ZV9zZXRfcGFyZW50cyhwYXJlbnQsIHNpYmxpbmcsIHJvb3QsCisgICAgICAg ICAgICAgICAgICAgICAgICBSQl9CTEFDSyk7CisgICAgICAgICAgICBhdWdtZW50X3JvdGF0ZShw YXJlbnQsIHNpYmxpbmcpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0g ICAgaWYgKG5vZGUpCi0gICAgICAgIHJiX3NldF9ibGFjayhub2RlKTsKIH0KIAotdm9pZCByYl9l cmFzZShzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCisvKiBOb24t aW5saW5lIHZlcnNpb24gZm9yIHJiX2VyYXNlX2F1Z21lbnRlZCgpIHVzZSAqLwordm9pZCBfX3Ji X2VyYXNlX2NvbG9yKHN0cnVjdCByYl9ub2RlICpwYXJlbnQsIHN0cnVjdCByYl9yb290ICpyb290 LAorICAgIHZvaWQgKCphdWdtZW50X3JvdGF0ZSkoc3RydWN0IHJiX25vZGUgKm9sZCwgc3RydWN0 IHJiX25vZGUgKm5ldykpCiB7Ci0gICAgc3RydWN0IHJiX25vZGUgKmNoaWxkLCAqcGFyZW50Owot ICAgIGludCBjb2xvcjsKLQotICAgIGlmICghbm9kZS0+cmJfbGVmdCkKLSAgICAgICAgY2hpbGQg PSBub2RlLT5yYl9yaWdodDsKLSAgICBlbHNlIGlmICghbm9kZS0+cmJfcmlnaHQpCi0gICAgICAg IGNoaWxkID0gbm9kZS0+cmJfbGVmdDsKLSAgICBlbHNlCi0gICAgewotICAgICAgICBzdHJ1Y3Qg cmJfbm9kZSAqb2xkID0gbm9kZSwgKmxlZnQ7Ci0KLSAgICAgICAgbm9kZSA9IG5vZGUtPnJiX3Jp Z2h0OwotICAgICAgICB3aGlsZSAoKGxlZnQgPSBub2RlLT5yYl9sZWZ0KSAhPSBOVUxMKQotICAg ICAgICAgICAgbm9kZSA9IGxlZnQ7Ci0gICAgICAgIGNoaWxkID0gbm9kZS0+cmJfcmlnaHQ7Ci0g ICAgICAgIHBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKLSAgICAgICAgY29sb3IgPSByYl9jb2xv cihub2RlKTsKLQotICAgICAgICBpZiAoY2hpbGQpCi0gICAgICAgICAgICByYl9zZXRfcGFyZW50 KGNoaWxkLCBwYXJlbnQpOwotICAgICAgICBpZiAocGFyZW50ID09IG9sZCkgewotICAgICAgICAg ICAgcGFyZW50LT5yYl9yaWdodCA9IGNoaWxkOwotICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsK LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwYXJlbnQtPnJiX2xlZnQgPSBjaGlsZDsKLQot ICAgICAgICBub2RlLT5yYl9wYXJlbnRfY29sb3IgPSBvbGQtPnJiX3BhcmVudF9jb2xvcjsKLSAg ICAgICAgbm9kZS0+cmJfcmlnaHQgPSBvbGQtPnJiX3JpZ2h0OwotICAgICAgICBub2RlLT5yYl9s ZWZ0ID0gb2xkLT5yYl9sZWZ0OwotCi0gICAgICAgIGlmIChyYl9wYXJlbnQob2xkKSkKLSAgICAg ICAgewotICAgICAgICAgICAgaWYgKHJiX3BhcmVudChvbGQpLT5yYl9sZWZ0ID09IG9sZCkKLSAg ICAgICAgICAgICAgICByYl9wYXJlbnQob2xkKS0+cmJfbGVmdCA9IG5vZGU7Ci0gICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgcmJfcGFyZW50KG9sZCktPnJiX3JpZ2h0ID0gbm9kZTsK LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByb290LT5yYl9ub2RlID0gbm9kZTsKLQotICAg ICAgICByYl9zZXRfcGFyZW50KG9sZC0+cmJfbGVmdCwgbm9kZSk7Ci0gICAgICAgIGlmIChvbGQt PnJiX3JpZ2h0KQotICAgICAgICAgICAgcmJfc2V0X3BhcmVudChvbGQtPnJiX3JpZ2h0LCBub2Rl KTsKLSAgICAgICAgZ290byBjb2xvcjsKLSAgICB9CisgICAgX19fX3JiX2VyYXNlX2NvbG9yKHBh cmVudCwgcm9vdCwgYXVnbWVudF9yb3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChfX3JiX2VyYXNl X2NvbG9yKTsKIAotICAgIHBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKLSAgICBjb2xvciA9IHJi X2NvbG9yKG5vZGUpOworLyoKKyAqIE5vbi1hdWdtZW50ZWQgcmJ0cmVlIG1hbmlwdWxhdGlvbiBm dW5jdGlvbnMuCisgKgorICogV2UgdXNlIGR1bW15IGF1Z21lbnRlZCBjYWxsYmFja3MgaGVyZSwg YW5kIGhhdmUgdGhlIGNvbXBpbGVyIG9wdGltaXplIHRoZW0KKyAqIG91dCBvZiB0aGUgcmJfaW5z ZXJ0X2NvbG9yKCkgYW5kIHJiX2VyYXNlKCkgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCisgKi8KIAot ICAgIGlmIChjaGlsZCkKLSAgICAgICAgcmJfc2V0X3BhcmVudChjaGlsZCwgcGFyZW50KTsKLSAg ICBpZiAocGFyZW50KQotICAgIHsKLSAgICAgICAgaWYgKHBhcmVudC0+cmJfbGVmdCA9PSBub2Rl KQotICAgICAgICAgICAgcGFyZW50LT5yYl9sZWZ0ID0gY2hpbGQ7Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICAgIHBhcmVudC0+cmJfcmlnaHQgPSBjaGlsZDsKLSAgICB9Ci0gICAgZWxzZQotICAg ICAgICByb290LT5yYl9ub2RlID0gY2hpbGQ7CitzdGF0aWMgaW5saW5lIHZvaWQgZHVtbXlfcHJv cGFnYXRlKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfbm9kZSAqc3RvcCkge30KK3N0 YXRpYyBpbmxpbmUgdm9pZCBkdW1teV9jb3B5KHN0cnVjdCByYl9ub2RlICpvbGQsIHN0cnVjdCBy Yl9ub2RlICpuZXcpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZHVtbXlfcm90YXRlKHN0cnVjdCBy Yl9ub2RlICpvbGQsIHN0cnVjdCByYl9ub2RlICpuZXcpIHt9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmJfYXVnbWVudF9jYWxsYmFja3MgZHVtbXlfY2FsbGJhY2tzID0geworICAgIC5wcm9wYWdh dGUgPSBkdW1teV9wcm9wYWdhdGUsCisgICAgLmNvcHkgPSBkdW1teV9jb3B5LAorICAgIC5yb3Rh dGUgPSBkdW1teV9yb3RhdGUKK307CisKK3ZvaWQgcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9u b2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKK3sKKyAgICBfX3JiX2luc2VydChub2Rl LCByb290LCBkdW1teV9yb3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChyYl9pbnNlcnRfY29sb3Ip OwogCi0gY29sb3I6Ci0gICAgaWYgKGNvbG9yID09IFJCX0JMQUNLKQotICAgICAgICBfX3JiX2Vy YXNlX2NvbG9yKGNoaWxkLCBwYXJlbnQsIHJvb3QpOwordm9pZCByYl9lcmFzZShzdHJ1Y3QgcmJf bm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCit7CisgICAgc3RydWN0IHJiX25vZGUg KnJlYmFsYW5jZTsKKyAgICByZWJhbGFuY2UgPSBfX3JiX2VyYXNlX2F1Z21lbnRlZChub2RlLCBy b290LCAmZHVtbXlfY2FsbGJhY2tzKTsKKyAgICBpZiAocmViYWxhbmNlKQorICAgICAgICBfX19f cmJfZXJhc2VfY29sb3IocmViYWxhbmNlLCByb290LCBkdW1teV9yb3RhdGUpOwogfQogRVhQT1JU X1NZTUJPTChyYl9lcmFzZSk7CiAKIC8qCisgKiBBdWdtZW50ZWQgcmJ0cmVlIG1hbmlwdWxhdGlv biBmdW5jdGlvbnMuCisgKgorICogVGhpcyBpbnN0YW50aWF0ZXMgdGhlIHNhbWUgX19hbHdheXNf aW5saW5lIGZ1bmN0aW9ucyBhcyBpbiB0aGUgbm9uLWF1Z21lbnRlZAorICogY2FzZSwgYnV0IHRo aXMgdGltZSB3aXRoIHVzZXItZGVmaW5lZCBjYWxsYmFja3MuCisgKi8KKwordm9pZCBfX3JiX2lu c2VydF9hdWdtZW50ZWQoc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9yb290ICpyb290 LAorICAgIHZvaWQgKCphdWdtZW50X3JvdGF0ZSkoc3RydWN0IHJiX25vZGUgKm9sZCwgc3RydWN0 IHJiX25vZGUgKm5ldykpCit7CisgICAgX19yYl9pbnNlcnQobm9kZSwgcm9vdCwgYXVnbWVudF9y b3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChfX3JiX2luc2VydF9hdWdtZW50ZWQpOworCisvKgog ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBub2RlIChpbiBzb3J0IG9yZGVyKSBv ZiB0aGUgdHJlZS4KICAqLwotc3RydWN0IHJiX25vZGUgKnJiX2ZpcnN0KHN0cnVjdCByYl9yb290 ICpyb290KQorc3RydWN0IHJiX25vZGUgKnJiX2ZpcnN0KGNvbnN0IHN0cnVjdCByYl9yb290ICpy b290KQogewotICAgIHN0cnVjdCByYl9ub2RlICpuOworICAgIHN0cnVjdCByYl9ub2RlICAgICpu OwogCiAgICAgbiA9IHJvb3QtPnJiX25vZGU7CiAgICAgaWYgKCFuKQpAQCAtMzA0LDkgKzQ5OCw5 IEBAIHN0cnVjdCByYl9ub2RlICpyYl9maXJzdChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKIH0KIEVY UE9SVF9TWU1CT0wocmJfZmlyc3QpOwogCi1zdHJ1Y3QgcmJfbm9kZSAqcmJfbGFzdChzdHJ1Y3Qg cmJfcm9vdCAqcm9vdCkKK3N0cnVjdCByYl9ub2RlICpyYl9sYXN0KGNvbnN0IHN0cnVjdCByYl9y b290ICpyb290KQogewotICAgIHN0cnVjdCByYl9ub2RlICpuOworICAgIHN0cnVjdCByYl9ub2Rl ICAgICpuOwogCiAgICAgbiA9IHJvb3QtPnJiX25vZGU7CiAgICAgaWYgKCFuKQpAQCAtMzE3LDI4 ICs1MTEsMzIgQEAgc3RydWN0IHJiX25vZGUgKnJiX2xhc3Qoc3RydWN0IHJiX3Jvb3QgKnJvb3Qp CiB9CiBFWFBPUlRfU1lNQk9MKHJiX2xhc3QpOwogCi1zdHJ1Y3QgcmJfbm9kZSAqcmJfbmV4dChz dHJ1Y3QgcmJfbm9kZSAqbm9kZSkKK3N0cnVjdCByYl9ub2RlICpyYl9uZXh0KGNvbnN0IHN0cnVj dCByYl9ub2RlICpub2RlKQogewogICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CiAKLSAgICBp ZiAocmJfcGFyZW50KG5vZGUpID09IG5vZGUpCisgICAgaWYgKFJCX0VNUFRZX05PREUobm9kZSkp CiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogSWYgd2UgaGF2ZSBhIHJpZ2h0LWhhbmQg Y2hpbGQsIGdvIGRvd24gYW5kIHRoZW4gbGVmdCBhcyBmYXIKLSAgICAgICBhcyB3ZSBjYW4uICov Ci0gICAgaWYgKG5vZGUtPnJiX3JpZ2h0KSB7CisgICAgLyoKKyAgICAgKiBJZiB3ZSBoYXZlIGEg cmlnaHQtaGFuZCBjaGlsZCwgZ28gZG93biBhbmQgdGhlbiBsZWZ0IGFzIGZhcgorICAgICAqIGFz IHdlIGNhbi4KKyAgICAgKi8KKyAgICBpZiAobm9kZS0+cmJfcmlnaHQpCisgICAgewogICAgICAg ICBub2RlID0gbm9kZS0+cmJfcmlnaHQ7IAogICAgICAgICB3aGlsZSAobm9kZS0+cmJfbGVmdCkK ICAgICAgICAgICAgIG5vZGU9bm9kZS0+cmJfbGVmdDsKLSAgICAgICAgcmV0dXJuIG5vZGU7Cisg ICAgICAgIHJldHVybiAoc3RydWN0IHJiX25vZGUgKilub2RlOwogICAgIH0KIAotICAgIC8qIE5v IHJpZ2h0LWhhbmQgY2hpbGRyZW4uICBFdmVyeXRoaW5nIGRvd24gYW5kIGxlZnQgaXMKLSAgICAg ICBzbWFsbGVyIHRoYW4gdXMsIHNvIGFueSAnbmV4dCcgbm9kZSBtdXN0IGJlIGluIHRoZSBnZW5l cmFsCi0gICAgICAgZGlyZWN0aW9uIG9mIG91ciBwYXJlbnQuIEdvIHVwIHRoZSB0cmVlOyBhbnkg dGltZSB0aGUKLSAgICAgICBhbmNlc3RvciBpcyBhIHJpZ2h0LWhhbmQgY2hpbGQgb2YgaXRzIHBh cmVudCwga2VlcCBnb2luZwotICAgICAgIHVwLiBGaXJzdCB0aW1lIGl0J3MgYSBsZWZ0LWhhbmQg Y2hpbGQgb2YgaXRzIHBhcmVudCwgc2FpZAotICAgICAgIHBhcmVudCBpcyBvdXIgJ25leHQnIG5v ZGUuICovCisgICAgLyoKKyAgICAgKiBObyByaWdodC1oYW5kIGNoaWxkcmVuLiBFdmVyeXRoaW5n IGRvd24gYW5kIGxlZnQgaXMgc21hbGxlciB0aGFuIHVzLAorICAgICAqIHNvIGFueSAnbmV4dCcg bm9kZSBtdXN0IGJlIGluIHRoZSBnZW5lcmFsIGRpcmVjdGlvbiBvZiBvdXIgcGFyZW50LgorICAg ICAqIEdvIHVwIHRoZSB0cmVlOyBhbnkgdGltZSB0aGUgYW5jZXN0b3IgaXMgYSByaWdodC1oYW5k IGNoaWxkIG9mIGl0cworICAgICAqIHBhcmVudCwga2VlcCBnb2luZyB1cC4gRmlyc3QgdGltZSBp dCdzIGEgbGVmdC1oYW5kIGNoaWxkIG9mIGl0cworICAgICAqIHBhcmVudCwgc2FpZCBwYXJlbnQg aXMgb3VyICduZXh0JyBub2RlLgorICAgICAqLwogICAgIHdoaWxlICgocGFyZW50ID0gcmJfcGFy ZW50KG5vZGUpKSAmJiBub2RlID09IHBhcmVudC0+cmJfcmlnaHQpCiAgICAgICAgIG5vZGUgPSBw YXJlbnQ7CiAKQEAgLTM0NiwyNCArNTQ0LDI5IEBAIHN0cnVjdCByYl9ub2RlICpyYl9uZXh0KHN0 cnVjdCByYl9ub2RlICpub2RlKQogfQogRVhQT1JUX1NZTUJPTChyYl9uZXh0KTsKIAotc3RydWN0 IHJiX25vZGUgKnJiX3ByZXYoc3RydWN0IHJiX25vZGUgKm5vZGUpCitzdHJ1Y3QgcmJfbm9kZSAq cmJfcHJldihjb25zdCBzdHJ1Y3QgcmJfbm9kZSAqbm9kZSkKIHsKICAgICBzdHJ1Y3QgcmJfbm9k ZSAqcGFyZW50OwogCi0gICAgaWYgKHJiX3BhcmVudChub2RlKSA9PSBub2RlKQorICAgIGlmIChS Ql9FTVBUWV9OT0RFKG5vZGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIElmIHdl IGhhdmUgYSBsZWZ0LWhhbmQgY2hpbGQsIGdvIGRvd24gYW5kIHRoZW4gcmlnaHQgYXMgZmFyCi0g ICAgICAgYXMgd2UgY2FuLiAqLwotICAgIGlmIChub2RlLT5yYl9sZWZ0KSB7CisgICAgLyoKKyAg ICAgKiBJZiB3ZSBoYXZlIGEgbGVmdC1oYW5kIGNoaWxkLCBnbyBkb3duIGFuZCB0aGVuIHJpZ2h0 IGFzIGZhcgorICAgICAqIGFzIHdlIGNhbi4KKyAgICAgKi8KKyAgICBpZiAobm9kZS0+cmJfbGVm dCkKKyAgICB7CiAgICAgICAgIG5vZGUgPSBub2RlLT5yYl9sZWZ0OyAKICAgICAgICAgd2hpbGUg KG5vZGUtPnJiX3JpZ2h0KQogICAgICAgICAgICAgbm9kZT1ub2RlLT5yYl9yaWdodDsKLSAgICAg ICAgcmV0dXJuIG5vZGU7CisgICAgICAgIHJldHVybiAoc3RydWN0IHJiX25vZGUgKilub2RlOwog ICAgIH0KIAotICAgIC8qIE5vIGxlZnQtaGFuZCBjaGlsZHJlbi4gR28gdXAgdGlsbCB3ZSBmaW5k IGFuIGFuY2VzdG9yIHdoaWNoCi0gICAgICAgaXMgYSByaWdodC1oYW5kIGNoaWxkIG9mIGl0cyBw YXJlbnQgKi8KKyAgICAvKgorICAgICAqIE5vIGxlZnQtaGFuZCBjaGlsZHJlbi4gR28gdXAgdGls bCB3ZSBmaW5kIGFuIGFuY2VzdG9yIHdoaWNoCisgICAgICogaXMgYSByaWdodC1oYW5kIGNoaWxk IG9mIGl0cyBwYXJlbnQuCisgICAgICovCiAgICAgd2hpbGUgKChwYXJlbnQgPSByYl9wYXJlbnQo bm9kZSkpICYmIG5vZGUgPT0gcGFyZW50LT5yYl9sZWZ0KQogICAgICAgICBub2RlID0gcGFyZW50 OwogCkBAIC0zNzIsMjUgKzU3NSw4MiBAQCBzdHJ1Y3QgcmJfbm9kZSAqcmJfcHJldihzdHJ1Y3Qg cmJfbm9kZSAqbm9kZSkKIEVYUE9SVF9TWU1CT0wocmJfcHJldik7CiAKIHZvaWQgcmJfcmVwbGFj ZV9ub2RlKHN0cnVjdCByYl9ub2RlICp2aWN0aW0sIHN0cnVjdCByYl9ub2RlICpuZXcsCi0gICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKKyAgICAgICAgICAgICBzdHJ1 Y3QgcmJfcm9vdCAqcm9vdCkKIHsKICAgICBzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gcmJfcGFy ZW50KHZpY3RpbSk7CiAKKyAgICAvKiBDb3B5IHRoZSBwb2ludGVycy9jb2xvdXIgZnJvbSB0aGUg dmljdGltIHRvIHRoZSByZXBsYWNlbWVudCAqLworICAgICpuZXcgPSAqdmljdGltOworCiAgICAg LyogU2V0IHRoZSBzdXJyb3VuZGluZyBub2RlcyB0byBwb2ludCB0byB0aGUgcmVwbGFjZW1lbnQg Ki8KLSAgICBpZiAocGFyZW50KSB7Ci0gICAgICAgIGlmICh2aWN0aW0gPT0gcGFyZW50LT5yYl9s ZWZ0KQotICAgICAgICAgICAgcGFyZW50LT5yYl9sZWZ0ID0gbmV3OwotICAgICAgICBlbHNlCi0g ICAgICAgICAgICBwYXJlbnQtPnJiX3JpZ2h0ID0gbmV3OwotICAgIH0gZWxzZSB7Ci0gICAgICAg IHJvb3QtPnJiX25vZGUgPSBuZXc7Ci0gICAgfQogICAgIGlmICh2aWN0aW0tPnJiX2xlZnQpCiAg ICAgICAgIHJiX3NldF9wYXJlbnQodmljdGltLT5yYl9sZWZ0LCBuZXcpOwogICAgIGlmICh2aWN0 aW0tPnJiX3JpZ2h0KQogICAgICAgICByYl9zZXRfcGFyZW50KHZpY3RpbS0+cmJfcmlnaHQsIG5l dyk7CisgICAgX19yYl9jaGFuZ2VfY2hpbGQodmljdGltLCBuZXcsIHBhcmVudCwgcm9vdCk7Cit9 CitFWFBPUlRfU1lNQk9MKHJiX3JlcGxhY2Vfbm9kZSk7CisKK3ZvaWQgcmJfcmVwbGFjZV9ub2Rl X3JjdShzdHJ1Y3QgcmJfbm9kZSAqdmljdGltLCBzdHJ1Y3QgcmJfbm9kZSAqbmV3LAorICAgICAg ICAgICAgIHN0cnVjdCByYl9yb290ICpyb290KQoreworICAgIHN0cnVjdCByYl9ub2RlICpwYXJl bnQgPSByYl9wYXJlbnQodmljdGltKTsKIAogICAgIC8qIENvcHkgdGhlIHBvaW50ZXJzL2NvbG91 ciBmcm9tIHRoZSB2aWN0aW0gdG8gdGhlIHJlcGxhY2VtZW50ICovCiAgICAgKm5ldyA9ICp2aWN0 aW07CisKKyAgICAvKiBTZXQgdGhlIHN1cnJvdW5kaW5nIG5vZGVzIHRvIHBvaW50IHRvIHRoZSBy ZXBsYWNlbWVudCAqLworICAgIGlmICh2aWN0aW0tPnJiX2xlZnQpCisgICAgICAgIHJiX3NldF9w YXJlbnQodmljdGltLT5yYl9sZWZ0LCBuZXcpOworICAgIGlmICh2aWN0aW0tPnJiX3JpZ2h0KQor ICAgICAgICByYl9zZXRfcGFyZW50KHZpY3RpbS0+cmJfcmlnaHQsIG5ldyk7CisKKyAgICAvKiBT ZXQgdGhlIHBhcmVudCdzIHBvaW50ZXIgdG8gdGhlIG5ldyBub2RlIGxhc3QgYWZ0ZXIgYW4gUkNV IGJhcnJpZXIKKyAgICAgKiBzbyB0aGF0IHRoZSBwb2ludGVycyBvbndhcmRzIGFyZSBzZWVuIHRv IGJlIHNldCBjb3JyZWN0bHkgd2hlbiBkb2luZworICAgICAqIGFuIFJDVSB3YWxrIG92ZXIgdGhl IHRyZWUuCisgICAgICovCisgICAgX19yYl9jaGFuZ2VfY2hpbGRfcmN1KHZpY3RpbSwgbmV3LCBw YXJlbnQsIHJvb3QpOwogfQotRVhQT1JUX1NZTUJPTChyYl9yZXBsYWNlX25vZGUpOworRVhQT1JU X1NZTUJPTChyYl9yZXBsYWNlX25vZGVfcmN1KTsKKworc3RhdGljIHN0cnVjdCByYl9ub2RlICpy Yl9sZWZ0X2RlZXBlc3Rfbm9kZShjb25zdCBzdHJ1Y3QgcmJfbm9kZSAqbm9kZSkKK3sKKyAgICBm b3IgKDs7KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPnJiX2xlZnQpCisgICAgICAgICAgICBu b2RlID0gbm9kZS0+cmJfbGVmdDsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+cmJfcmlnaHQpCisg ICAgICAgICAgICBub2RlID0gbm9kZS0+cmJfcmlnaHQ7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHJldHVybiAoc3RydWN0IHJiX25vZGUgKilub2RlOworICAgIH0KK30KKworc3RydWN0IHJi X25vZGUgKnJiX25leHRfcG9zdG9yZGVyKGNvbnN0IHN0cnVjdCByYl9ub2RlICpub2RlKQorewor ICAgIGNvbnN0IHN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CisgICAgaWYgKCFub2RlKQorICAgICAg ICByZXR1cm4gTlVMTDsKKyAgICBwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisKKyAgICAvKiBJ ZiB3ZSdyZSBzaXR0aW5nIG9uIG5vZGUsIHdlJ3ZlIGFscmVhZHkgc2VlbiBvdXIgY2hpbGRyZW4g Ki8KKyAgICBpZiAocGFyZW50ICYmIG5vZGUgPT0gcGFyZW50LT5yYl9sZWZ0ICYmIHBhcmVudC0+ cmJfcmlnaHQpCisgICAgeworICAgICAgICAvKiBJZiB3ZSBhcmUgdGhlIHBhcmVudCdzIGxlZnQg bm9kZSwgZ28gdG8gdGhlIHBhcmVudCdzIHJpZ2h0CisgICAgICAgICAqIG5vZGUgdGhlbiBhbGwg dGhlIHdheSBkb3duIHRvIHRoZSBsZWZ0ICovCisgICAgICAgIHJldHVybiByYl9sZWZ0X2RlZXBl c3Rfbm9kZShwYXJlbnQtPnJiX3JpZ2h0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgLyogT3RoZXJ3 aXNlIHdlIGFyZSB0aGUgcGFyZW50J3MgcmlnaHQgbm9kZSwgYW5kIHRoZSBwYXJlbnQKKyAgICAg ICAgICogc2hvdWxkIGJlIG5leHQgKi8KKyAgICAgICAgcmV0dXJuIChzdHJ1Y3QgcmJfbm9kZSAq KXBhcmVudDsKK30KK0VYUE9SVF9TWU1CT0wocmJfbmV4dF9wb3N0b3JkZXIpOworCitzdHJ1Y3Qg cmJfbm9kZSAqcmJfZmlyc3RfcG9zdG9yZGVyKGNvbnN0IHN0cnVjdCByYl9yb290ICpyb290KQor eworICAgIGlmICghcm9vdC0+cmJfbm9kZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBy ZXR1cm4gcmJfbGVmdF9kZWVwZXN0X25vZGUocm9vdC0+cmJfbm9kZSk7Cit9CitFWFBPUlRfU1lN Qk9MKHJiX2ZpcnN0X3Bvc3RvcmRlcik7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vY29t cGlsZXIuaCBiL3hlbi9pbmNsdWRlL3hlbi9jb21waWxlci5oCmluZGV4IDUzM2E4ZWEwZjMuLjhj ZWEyOWEyNmIgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3hlbi9jb21waWxlci5oCisrKyBiL3hl bi9pbmNsdWRlL3hlbi9jb21waWxlci5oCkBAIC0xMjcsNCArMTI3LDY0IEBACiAjIGRlZmluZSBD TEFOR19ESVNBQkxFX1dBUk5fR0NDX0NPTVBBVF9FTkQKICNlbmRpZgogCisjaW5jbHVkZSA8eGVu L3R5cGVzLmg+CisKKyNpZm5kZWYgX19hbHdheXNfaW5saW5lCisjZGVmaW5lIF9fYWx3YXlzX2lu bGluZSBpbmxpbmUKKyNlbmRpZgorCisjZGVmaW5lIF9fUkVBRF9PTkNFX1NJWkUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3dpdGNoKHNpemUp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2Fz ZSAxOiAqKF9fdTggKilyZXMgPSAqKHZvbGF0aWxlIF9fdTggKilwOyBicmVhazsgICAgICAgICBc CisgICAgY2FzZSAyOiAqKF9fdTE2ICopcmVzID0gKih2b2xhdGlsZSBfX3UxNiAqKXA7IGJyZWFr OyAgICAgICBcCisgICAgY2FzZSA0OiAqKF9fdTMyICopcmVzID0gKih2b2xhdGlsZSBfX3UzMiAq KXA7IGJyZWFrOyAgICAgICBcCisgICAgY2FzZSA4OiAqKF9fdTY0ICopcmVzID0gKih2b2xhdGls ZSBfX3U2NCAqKXA7IGJyZWFrOyAgICAgICBcCisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJhcnJpZXIoKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9f YnVpbHRpbl9tZW1jcHkoKHZvaWQgKilyZXMsIChjb25zdCB2b2lkICopcCwgc2l6ZSk7ICBcCisg ICAgICAgIGJhcnJpZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCit9KQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lCit2b2lkIF9fcmVh ZF9vbmNlX3NpemUoY29uc3Qgdm9sYXRpbGUgdm9pZCAqcCwgdm9pZCAqcmVzLCBpbnQgc2l6ZSkK K3sKKyAgICBfX1JFQURfT05DRV9TSVpFOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lCit2 b2lkIF9fd3JpdGVfb25jZV9zaXplKHZvbGF0aWxlIHZvaWQgKnAsIHZvaWQgKnJlcywgaW50IHNp emUpCit7CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOiAqKHZvbGF0aWxlIF9fdTgg KilwID0gKihfX3U4ICopcmVzOyBicmVhazsKKyAgICBjYXNlIDI6ICoodm9sYXRpbGUgX191MTYg KilwID0gKihfX3UxNiAqKXJlczsgYnJlYWs7CisgICAgY2FzZSA0OiAqKHZvbGF0aWxlIF9fdTMy ICopcCA9ICooX191MzIgKilyZXM7IGJyZWFrOworICAgIGNhc2UgODogKih2b2xhdGlsZSBfX3U2 NCAqKXAgPSAqKF9fdTY0ICopcmVzOyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBiYXJy aWVyKCk7CisgICAgICAgIF9fYnVpbHRpbl9tZW1jcHkoKHZvaWQgKilwLCAoY29uc3Qgdm9pZCAq KXJlcywgc2l6ZSk7CisgICAgICAgIGJhcnJpZXIoKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgX19S RUFEX09OQ0UoeCwgY2hlY2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyh7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB1bmlvbiB7IHR5cGVvZih4KSBfX3ZhbDsgY2hhciBfX2NbMV07IH0gX191OyAg ICAgICAgICAgICAgIFwKKyAgICBfX3JlYWRfb25jZV9zaXplKCYoeCksIF9fdS5fX2MsIHNpemVv Zih4KSk7ICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgUkVBRF9PTkNFKHgpIF9fUkVB RF9PTkNFKHgsIDEpCisKKyNkZWZpbmUgV1JJVEVfT05DRSh4LCB2YWwpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bmlvbiB7IHR5cGVvZih4KSBf X3ZhbDsgY2hhciBfX2NbMV07IH0gX191ID0gICAgICAgICAgICAgIFwKKyAgICAgICAgeyAuX192 YWwgPSAoX19mb3JjZSB0eXBlb2YoeCkpICh2YWwpIH07ICAgICAgICAgICAgICAgIFwKKyAgICBf X3dyaXRlX29uY2Vfc2l6ZSgmKHgpLCBfX3UuX19jLCBzaXplb2YoeCkpOyAgICAgICAgICAgICAg IFwKKyAgICBfX3UuX192YWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKK30pCisKKworCisKICNlbmRpZiAvKiBfX0xJTlVYX0NPTVBJTEVSX0ggKi8K ZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9yYnRyZWUuaCBiL3hlbi9pbmNsdWRlL3hlbi9y YnRyZWUuaAppbmRleCBmOTNjNGQ1ODIzLi42YzUxZDBjOTE4IDEwMDY0NAotLS0gYS94ZW4vaW5j bHVkZS94ZW4vcmJ0cmVlLmgKKysrIGIveGVuL2luY2x1ZGUveGVuL3JidHJlZS5oCkBAIC0xMyw2 OSArMTMsMTE3IEBACiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCiAKICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5j LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVT QQorCisgIGxpbnV4L2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKKworICBUbyB1c2UgcmJ0cmVlcyB5 b3UnbGwgaGF2ZSB0byBpbXBsZW1lbnQgeW91ciBvd24gaW5zZXJ0IGFuZCBzZWFyY2ggY29yZXMu CisgIFRoaXMgd2lsbCBhdm9pZCB1cyB0byB1c2UgY2FsbGJhY2tzIGFuZCB0byBkcm9wIGRyYW1t YXRpY2FsbHkgcGVyZm9ybWFuY2VzLgorICBJIGtub3cgaXQncyBub3QgdGhlIGNsZWFuZXIgd2F5 LCAgYnV0IGluIEMgKG5vdCBpbiBDKyspIHRvIGdldAorICBwZXJmb3JtYW5jZXMgYW5kIGdlbmVy aWNpdHkuLi4KKworICBTZWUgRG9jdW1lbnRhdGlvbi9yYnRyZWUudHh0IGZvciBkb2N1bWVudGF0 aW9uIGFuZCBzYW1wbGVzLgogKi8KIAotI2lmbmRlZiBfX1JCVFJFRV9IX18KLSNkZWZpbmUgX19S QlRSRUVfSF9fCisjaWZuZGVmICAgIF9MSU5VWF9SQlRSRUVfSAorI2RlZmluZSAgICBfTElOVVhf UkJUUkVFX0gKKworI2luY2x1ZGUgPHhlbi9rZXJuZWwuaD4KKyNpbmNsdWRlIDx4ZW4vcmN1cGRh dGUuaD4KIAogc3RydWN0IHJiX25vZGUKIHsKLSAgICB1bnNpZ25lZCBsb25nICByYl9wYXJlbnRf Y29sb3I7Ci0jZGVmaW5lIFJCX1JFRCAgMAotI2RlZmluZSBSQl9CTEFDSyAxCisgICAgdW5zaWdu ZWQgbG9uZyAgX19yYl9wYXJlbnRfY29sb3I7CiAgICAgc3RydWN0IHJiX25vZGUgKnJiX3JpZ2h0 OwogICAgIHN0cnVjdCByYl9ub2RlICpyYl9sZWZ0OwotfTsKK30gX19hdHRyaWJ1dGVfXygoYWxp Z25lZChzaXplb2YobG9uZykpKSk7CisgICAgLyogVGhlIGFsaWdubWVudCBtaWdodCBzZWVtIHBv aW50bGVzcywgYnV0IGFsbGVnZWRseSBDUklTIG5lZWRzIGl0ICovCiAKIHN0cnVjdCByYl9yb290 CiB7CiAgICAgc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CiB9OwogCi0jZGVmaW5lIHJiX3BhcmVu dChyKSAgICgoc3RydWN0IHJiX25vZGUgKikoKHIpLT5yYl9wYXJlbnRfY29sb3IgJiB+MykpCi0j ZGVmaW5lIHJiX2NvbG9yKHIpICAgKChyKS0+cmJfcGFyZW50X2NvbG9yICYgMSkKLSNkZWZpbmUg cmJfaXNfcmVkKHIpICAgKCFyYl9jb2xvcihyKSkKLSNkZWZpbmUgcmJfaXNfYmxhY2socikgcmJf Y29sb3IocikKLSNkZWZpbmUgcmJfc2V0X3JlZChyKSAgZG8geyAociktPnJiX3BhcmVudF9jb2xv ciAmPSB+MTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcmJfc2V0X2JsYWNrKHIpICBkbyB7IChyKS0+ cmJfcGFyZW50X2NvbG9yIHw9IDE7IH0gd2hpbGUgKDApCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBy Yl9zZXRfcGFyZW50KHN0cnVjdCByYl9ub2RlICpyYiwgc3RydWN0IHJiX25vZGUgKnApCi17Ci0g ICAgcmItPnJiX3BhcmVudF9jb2xvciA9IChyYi0+cmJfcGFyZW50X2NvbG9yICYgMykgfCAodW5z aWduZWQgbG9uZylwOwotfQotc3RhdGljIGlubGluZSB2b2lkIHJiX3NldF9jb2xvcihzdHJ1Y3Qg cmJfbm9kZSAqcmIsIGludCBjb2xvcikKLXsKLSAgICByYi0+cmJfcGFyZW50X2NvbG9yID0gKHJi LT5yYl9wYXJlbnRfY29sb3IgJiB+MSkgfCBjb2xvcjsKLX0KKyNkZWZpbmUgcmJfcGFyZW50KHIp ICAgKChzdHJ1Y3QgcmJfbm9kZSAqKSgociktPl9fcmJfcGFyZW50X2NvbG9yICYgfjMpKQorCisj ZGVmaW5lIFJCX1JPT1QgICAgKHN0cnVjdCByYl9yb290KSB7IE5VTEwsIH0KKyNkZWZpbmUgICAg cmJfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJl cikKIAotI2RlZmluZSBSQl9ST09UIChzdHJ1Y3QgcmJfcm9vdCkgeyBOVUxMLCB9Ci0jZGVmaW5l IHJiX2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1i ZXIpCisjZGVmaW5lIFJCX0VNUFRZX1JPT1Qocm9vdCkgIChSRUFEX09OQ0UoKHJvb3QpLT5yYl9u b2RlKSA9PSBOVUxMKQorCisvKiAnZW1wdHknIG5vZGVzIGFyZSBub2RlcyB0aGF0IGFyZSBrbm93 biBub3QgdG8gYmUgaW5zZXJ0ZWQgaW4gYW4gcmJ0cmVlICovCisjZGVmaW5lIFJCX0VNUFRZX05P REUobm9kZSkgIFwKKyAgICAoKG5vZGUpLT5fX3JiX3BhcmVudF9jb2xvciA9PSAodW5zaWduZWQg bG9uZykobm9kZSkpCisjZGVmaW5lIFJCX0NMRUFSX05PREUobm9kZSkgIFwKKyAgICAoKG5vZGUp LT5fX3JiX3BhcmVudF9jb2xvciA9ICh1bnNpZ25lZCBsb25nKShub2RlKSkKIAotI2RlZmluZSBS Ql9FTVBUWV9ST09UKHJvb3QpICgocm9vdCktPnJiX25vZGUgPT0gTlVMTCkKLSNkZWZpbmUgUkJf RU1QVFlfTk9ERShub2RlKSAocmJfcGFyZW50KG5vZGUpID09IG5vZGUpCi0jZGVmaW5lIFJCX0NM RUFSX05PREUobm9kZSkgKHJiX3NldF9wYXJlbnQobm9kZSwgbm9kZSkpCiAKIGV4dGVybiB2b2lk IHJiX2luc2VydF9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqLCBzdHJ1Y3QgcmJfcm9vdCAqKTsKIGV4 dGVybiB2b2lkIHJiX2VyYXNlKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOwog CisKIC8qIEZpbmQgbG9naWNhbCBuZXh0IGFuZCBwcmV2aW91cyBub2RlcyBpbiBhIHRyZWUgKi8K LWV4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqcmJfbmV4dChzdHJ1Y3QgcmJfbm9kZSAqKTsKLWV4dGVy biBzdHJ1Y3QgcmJfbm9kZSAqcmJfcHJldihzdHJ1Y3QgcmJfbm9kZSAqKTsKLWV4dGVybiBzdHJ1 Y3QgcmJfbm9kZSAqcmJfZmlyc3Qoc3RydWN0IHJiX3Jvb3QgKik7Ci1leHRlcm4gc3RydWN0IHJi X25vZGUgKnJiX2xhc3Qoc3RydWN0IHJiX3Jvb3QgKik7CitleHRlcm4gc3RydWN0IHJiX25vZGUg KnJiX25leHQoY29uc3Qgc3RydWN0IHJiX25vZGUgKik7CitleHRlcm4gc3RydWN0IHJiX25vZGUg KnJiX3ByZXYoY29uc3Qgc3RydWN0IHJiX25vZGUgKik7CitleHRlcm4gc3RydWN0IHJiX25vZGUg KnJiX2ZpcnN0KGNvbnN0IHN0cnVjdCByYl9yb290ICopOworZXh0ZXJuIHN0cnVjdCByYl9ub2Rl ICpyYl9sYXN0KGNvbnN0IHN0cnVjdCByYl9yb290ICopOworCisvKiBQb3N0b3JkZXIgaXRlcmF0 aW9uIC0gYWx3YXlzIHZpc2l0IHRoZSBwYXJlbnQgYWZ0ZXIgaXRzIGNoaWxkcmVuICovCitleHRl cm4gc3RydWN0IHJiX25vZGUgKnJiX2ZpcnN0X3Bvc3RvcmRlcihjb25zdCBzdHJ1Y3QgcmJfcm9v dCAqKTsKK2V4dGVybiBzdHJ1Y3QgcmJfbm9kZSAqcmJfbmV4dF9wb3N0b3JkZXIoY29uc3Qgc3Ry dWN0IHJiX25vZGUgKik7CiAKIC8qIEZhc3QgcmVwbGFjZW1lbnQgb2YgYSBzaW5nbGUgbm9kZSB3 aXRob3V0IHJlbW92ZS9yZWJhbGFuY2UvYWRkL3JlYmFsYW5jZSAqLwotZXh0ZXJuIHZvaWQgcmJf cmVwbGFjZV9ub2RlKHN0cnVjdCByYl9ub2RlICp2aWN0aW0sIHN0cnVjdCByYl9ub2RlICpuZXcs IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYl9yb290ICpyb290KTsKK2V4 dGVybiB2b2lkIHJiX3JlcGxhY2Vfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqdmljdGltLCBzdHJ1Y3Qg cmJfbm9kZSAqbmV3LAorICAgICAgICAgICAgICAgIHN0cnVjdCByYl9yb290ICpyb290KTsKK2V4 dGVybiB2b2lkIHJiX3JlcGxhY2Vfbm9kZV9yY3Uoc3RydWN0IHJiX25vZGUgKnZpY3RpbSwgc3Ry dWN0IHJiX25vZGUgKm5ldywKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCk7 CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByYl9saW5rX25vZGUoc3RydWN0IHJiX25vZGUgKiBub2Rl LCBzdHJ1Y3QgcmJfbm9kZSAqIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHJiX25vZGUgKiogcmJfbGluaykKK3N0YXRpYyBpbmxpbmUgdm9pZCByYl9saW5r X25vZGUoc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsCisgICAg ICAgICAgICAgICAgc3RydWN0IHJiX25vZGUgKipyYl9saW5rKQogewotICAgIG5vZGUtPnJiX3Bh cmVudF9jb2xvciA9ICh1bnNpZ25lZCBsb25nIClwYXJlbnQ7CisgICAgbm9kZS0+X19yYl9wYXJl bnRfY29sb3IgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7CiAgICAgbm9kZS0+cmJfbGVmdCA9IG5v ZGUtPnJiX3JpZ2h0ID0gTlVMTDsKIAogICAgICpyYl9saW5rID0gbm9kZTsKIH0KIAotI2VuZGlm IC8qIF9fUkJUUkVFX0hfXyAqLworc3RhdGljIGlubGluZSB2b2lkIHJiX2xpbmtfbm9kZV9yY3Uo c3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsCisgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCByYl9ub2RlICoqcmJfbGluaykKK3sKKyAgICBub2RlLT5fX3JiX3Bh cmVudF9jb2xvciA9ICh1bnNpZ25lZCBsb25nKXBhcmVudDsKKyAgICBub2RlLT5yYl9sZWZ0ID0g bm9kZS0+cmJfcmlnaHQgPSBOVUxMOworCisgICAgcmN1X2Fzc2lnbl9wb2ludGVyKCpyYl9saW5r LCBub2RlKTsKK30KKworI2RlZmluZSByYl9lbnRyeV9zYWZlKHB0ciwgdHlwZSwgbWVtYmVyKSBc CisgICAgKHsgdHlwZW9mKHB0cikgX19fX3B0ciA9IChwdHIpOyBcCisgICAgICAgX19fX3B0ciA/ IHJiX2VudHJ5KF9fX19wdHIsIHR5cGUsIG1lbWJlcikgOiBOVUxMOyBcCisgICAgfSkKKworLyoq CisgKiByYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUgLSBpdGVyYXRlIGluIHBv c3Qtb3JkZXIgb3ZlciByYl9yb290IG9mCisgKiBnaXZlbiB0eXBlIGFsbG93aW5nIHRoZSBiYWNr aW5nIG1lbW9yeSBvZiBAcG9zIHRvIGJlIGludmFsaWRhdGVkCisgKgorICogQHBvczogICAgdGhl ICd0eXBlIConIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQG46ICAgICAgICBhbm90aGVy ICd0eXBlIConIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQorICogQHJvb3Q6ICAgICdyYl9y b290IConIG9mIHRoZSByYnRyZWUuCisgKiBAZmllbGQ6ICAgIHRoZSBuYW1lIG9mIHRoZSByYl9u b2RlIGZpZWxkIHdpdGhpbiAndHlwZScuCisgKgorICogcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFj aF9lbnRyeV9zYWZlKCkgcHJvdmlkZXMgYSBzaW1pbGFyIGd1YXJhbnRlZSBhcworICogbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKCkgYW5kIGFsbG93cyB0aGUgaXRlcmF0aW9uIHRvIGNvbnRpbnVl IGluZGVwZW5kZW50CisgKiBvZiBjaGFuZ2VzIHRvIEBwb3MgYnkgdGhlIGJvZHkgb2YgdGhlIGxv b3AuCisgKgorICogTm90ZSwgaG93ZXZlciwgdGhhdCBpdCBjYW5ub3QgaGFuZGxlIG90aGVyIG1v ZGlmaWNhdGlvbnMgdGhhdCByZS1vcmRlciB0aGUKKyAqIHJidHJlZSBpdCBpcyBpdGVyYXRpbmcg b3Zlci4gVGhpcyBpbmNsdWRlcyBjYWxsaW5nIHJiX2VyYXNlKCkgb24gQHBvcywgYXMKKyAqIHJi X2VyYXNlKCkgbWF5IHJlYmFsYW5jZSB0aGUgdHJlZSwgY2F1c2luZyB1cyB0byBtaXNzIHNvbWUg bm9kZXMuCisgKi8KKyNkZWZpbmUgcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZl KHBvcywgbiwgcm9vdCwgZmllbGQpIFwKKyAgICBmb3IgKHBvcyA9IHJiX2VudHJ5X3NhZmUocmJf Zmlyc3RfcG9zdG9yZGVyKHJvb3QpLCB0eXBlb2YoKnBvcyksIGZpZWxkKTsgXAorICAgICAgICAg cG9zICYmICh7IG4gPSByYl9lbnRyeV9zYWZlKHJiX25leHRfcG9zdG9yZGVyKCZwb3MtPmZpZWxk KSwgXAorICAgICAgICAgICAgdHlwZW9mKCpwb3MpLCBmaWVsZCk7IDE7IH0pOyBcCisgICAgICAg ICBwb3MgPSBuKQorCisjZW5kaWYgICAgLyogX0xJTlVYX1JCVFJFRV9IICovCmRpZmYgLS1naXQg YS94ZW4vaW5jbHVkZS94ZW4vcmJ0cmVlX2F1Z21lbnRlZC5oIGIveGVuL2luY2x1ZGUveGVuL3Ji dHJlZV9hdWdtZW50ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4y ZDM1NTUwMWRjCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2luY2x1ZGUveGVuL3JidHJlZV9hdWdt ZW50ZWQuaApAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAgUmVkIEJsYWNrIFRyZWVzCisgIChDKSAx OTk5ICBBbmRyZWEgQXJjYW5nZWxpIDxhbmRyZWFAc3VzZS5kZT4KKyAgKEMpIDIwMDIgIERhdmlk IFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAgKEMpIDIwMTIgIE1pY2hlbCBMZXNw aW5hc3NlIDx3YWxrZW5AZ29vZ2xlLmNvbT4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwg NTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQor CisgIGxpbnV4L2luY2x1ZGUvbGludXgvcmJ0cmVlX2F1Z21lbnRlZC5oCisqLworCisjaWZuZGVm IF9MSU5VWF9SQlRSRUVfQVVHTUVOVEVEX0gKKyNkZWZpbmUgX0xJTlVYX1JCVFJFRV9BVUdNRU5U RURfSAorCisjaW5jbHVkZSA8eGVuL2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8eGVuL3JidHJlZS5o PgorCisvKgorICogUGxlYXNlIG5vdGUgLSBvbmx5IHN0cnVjdCByYl9hdWdtZW50X2NhbGxiYWNr cyBhbmQgdGhlIHByb3RvdHlwZXMgZm9yCisgKiByYl9pbnNlcnRfYXVnbWVudGVkKCkgYW5kIHJi X2VyYXNlX2F1Z21lbnRlZCgpIGFyZSBpbnRlbmRlZCB0byBiZSBwdWJsaWMuCisgKiBUaGUgcmVz dCBhcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB5b3UgYXJlIG5vdCBleHBlY3RlZCB0byBkZXBl bmQgb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vcmJ0cmVlLnR4dCBmb3IgZG9jdW1lbnRh dGlvbiBhbmQgc2FtcGxlcy4KKyAqLworCitzdHJ1Y3QgcmJfYXVnbWVudF9jYWxsYmFja3MKK3sK KyAgICB2b2lkICgqcHJvcGFnYXRlKShzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX25v ZGUgKnN0b3ApOworICAgIHZvaWQgKCpjb3B5KShzdHJ1Y3QgcmJfbm9kZSAqb2xkLCBzdHJ1Y3Qg cmJfbm9kZSAqbmV3KTsKKyAgICB2b2lkICgqcm90YXRlKShzdHJ1Y3QgcmJfbm9kZSAqb2xkLCBz dHJ1Y3QgcmJfbm9kZSAqbmV3KTsKK307CisKK2V4dGVybiB2b2lkIF9fcmJfaW5zZXJ0X2F1Z21l bnRlZChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QsCisgICAgdm9p ZCAoKmF1Z21lbnRfcm90YXRlKShzdHJ1Y3QgcmJfbm9kZSAqb2xkLCBzdHJ1Y3QgcmJfbm9kZSAq bmV3KSk7CisvKgorICogRml4dXAgdGhlIHJidHJlZSBhbmQgdXBkYXRlIHRoZSBhdWdtZW50ZWQg aW5mb3JtYXRpb24gd2hlbiByZWJhbGFuY2luZy4KKyAqCisgKiBPbiBpbnNlcnRpb24sIHRoZSB1 c2VyIG11c3QgdXBkYXRlIHRoZSBhdWdtZW50ZWQgaW5mb3JtYXRpb24gb24gdGhlIHBhdGgKKyAq IGxlYWRpbmcgdG8gdGhlIGluc2VydGVkIG5vZGUsIHRoZW4gY2FsbCByYl9saW5rX25vZGUoKSBh cyB1c3VhbCBhbmQKKyAqIHJiX2F1Z21lbnRfaW5zZXJ0ZWQoKSBpbnN0ZWFkIG9mIHRoZSB1c3Vh bCByYl9pbnNlcnRfY29sb3IoKSBjYWxsLgorICogSWYgcmJfYXVnbWVudF9pbnNlcnRlZCgpIHJl YmFsYW5jZXMgdGhlIHJidHJlZSwgaXQgd2lsbCBjYWxsYmFjayBpbnRvCisgKiBhIHVzZXIgcHJv dmlkZWQgZnVuY3Rpb24gdG8gdXBkYXRlIHRoZSBhdWdtZW50ZWQgaW5mb3JtYXRpb24gb24gdGhl CisgKiBhZmZlY3RlZCBzdWJ0cmVlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCityYl9pbnNl cnRfYXVnbWVudGVkKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwK KyAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByYl9hdWdtZW50X2NhbGxiYWNrcyAqYXVnbWVudCkK K3sKKyAgICBfX3JiX2luc2VydF9hdWdtZW50ZWQobm9kZSwgcm9vdCwgYXVnbWVudC0+cm90YXRl KTsKK30KKworI2RlZmluZSBSQl9ERUNMQVJFX0NBTExCQUNLUyhyYnN0YXRpYywgcmJuYW1lLCBy YnN0cnVjdCwgcmJmaWVsZCwgICAgXAorICAgICAgICAgICAgICAgICByYnR5cGUsIHJiYXVnbWVu dGVkLCByYmNvbXB1dGUpICAgICAgICBcCitzdGF0aWMgaW5saW5lIHZvaWQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorcmJuYW1lICMjIF9wcm9wYWdhdGUoc3RydWN0IHJiX25vZGUgKnJi LCBzdHJ1Y3QgcmJfbm9kZSAqc3RvcCkgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgd2hpbGUgKHJiICE9IHN0b3ApICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIHJic3RydWN0ICpub2RlID0gcmJfZW50cnkocmIsIHJic3RydWN0LCBy YmZpZWxkKTsgICAgXAorICAgICAgICByYnR5cGUgYXVnbWVudGVkID0gcmJjb21wdXRlKG5vZGUp OyAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKG5vZGUtPnJiYXVnbWVudGVkID09IGF1Z21lbnRl ZCkgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIG5vZGUtPnJiYXVnbWVudGVkID0gYXVnbWVudGVkOyAgICAgICAgICAgICAg ICBcCisgICAgICAgIHJiID0gcmJfcGFyZW50KCZub2RlLT5yYmZpZWxkKTsgICAgICAgICAgICAg ICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgaW5saW5lIHZvaWQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorcmJuYW1lICMjIF9jb3B5KHN0cnVjdCByYl9ub2RlICpyYl9v bGQsIHN0cnVjdCByYl9ub2RlICpyYl9uZXcpICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIHJic3RydWN0ICpvbGQgPSByYl9lbnRyeShyYl9vbGQs IHJic3RydWN0LCByYmZpZWxkKTsgICAgICAgIFwKKyAgICByYnN0cnVjdCAqbmV3ID0gcmJfZW50 cnkocmJfbmV3LCByYnN0cnVjdCwgcmJmaWVsZCk7ICAgICAgICBcCisgICAgbmV3LT5yYmF1Z21l bnRlZCA9IG9sZC0+cmJhdWdtZW50ZWQ7ICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgdm9pZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorcmJuYW1lICMjIF9yb3RhdGUoc3RydWN0IHJiX25vZGUgKnJiX29sZCwg c3RydWN0IHJiX25vZGUgKnJiX25ldykgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICByYnN0cnVjdCAqb2xkID0gcmJfZW50cnkocmJfb2xkLCByYnN0cnVj dCwgcmJmaWVsZCk7ICAgICAgICBcCisgICAgcmJzdHJ1Y3QgKm5ldyA9IHJiX2VudHJ5KHJiX25l dywgcmJzdHJ1Y3QsIHJiZmllbGQpOyAgICAgICAgXAorICAgIG5ldy0+cmJhdWdtZW50ZWQgPSBv bGQtPnJiYXVnbWVudGVkOyAgICAgICAgICAgICAgICBcCisgICAgb2xkLT5yYmF1Z21lbnRlZCA9 IHJiY29tcHV0ZShvbGQpOyAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorcmJzdGF0aWMgY29uc3Qgc3RydWN0IHJiX2F1Z21lbnRfY2FsbGJh Y2tzIHJibmFtZSA9IHsgICAgICAgICAgICBcCisgICAgLnByb3BhZ2F0ZSA9IHJibmFtZSAjIyBf cHJvcGFnYXRlLCAgICAgICAgICAgICAgICBcCisgICAgLmNvcHkgPSByYm5hbWUgIyMgX2NvcHks ICAgICAgICAgICAgICAgICAgICBcCisgICAgLnJvdGF0ZSA9IHJibmFtZSAjIyBfcm90YXRlICAg ICAgICAgICAgICAgICAgICBcCit9OworCisKKyNkZWZpbmUgICAgUkJfUkVEICAgICAgICAwCisj ZGVmaW5lICAgIFJCX0JMQUNLICAgIDEKKworI2RlZmluZSBfX3JiX3BhcmVudChwYykgICAgKChz dHJ1Y3QgcmJfbm9kZSAqKShwYyAmIH4zKSkKKworI2RlZmluZSBfX3JiX2NvbG9yKHBjKSAgICAg KChwYykgJiAxKQorI2RlZmluZSBfX3JiX2lzX2JsYWNrKHBjKSAgX19yYl9jb2xvcihwYykKKyNk ZWZpbmUgX19yYl9pc19yZWQocGMpICAgICghX19yYl9jb2xvcihwYykpCisjZGVmaW5lIHJiX2Nv bG9yKHJiKSAgICAgICBfX3JiX2NvbG9yKChyYiktPl9fcmJfcGFyZW50X2NvbG9yKQorI2RlZmlu ZSByYl9pc19yZWQocmIpICAgICAgX19yYl9pc19yZWQoKHJiKS0+X19yYl9wYXJlbnRfY29sb3Ip CisjZGVmaW5lIHJiX2lzX2JsYWNrKHJiKSAgICBfX3JiX2lzX2JsYWNrKChyYiktPl9fcmJfcGFy ZW50X2NvbG9yKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmJfc2V0X3BhcmVudChzdHJ1Y3QgcmJf bm9kZSAqcmIsIHN0cnVjdCByYl9ub2RlICpwKQoreworICAgIHJiLT5fX3JiX3BhcmVudF9jb2xv ciA9IHJiX2NvbG9yKHJiKSB8ICh1bnNpZ25lZCBsb25nKXA7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCByYl9zZXRfcGFyZW50X2NvbG9yKHN0cnVjdCByYl9ub2RlICpyYiwKKyAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHJiX25vZGUgKnAsIGludCBjb2xvcikKK3sKKyAgICByYi0+X19y Yl9wYXJlbnRfY29sb3IgPSAodW5zaWduZWQgbG9uZylwIHwgY29sb3I7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAorX19yYl9jaGFuZ2VfY2hpbGQoc3RydWN0IHJiX25vZGUgKm9sZCwgc3RydWN0 IHJiX25vZGUgKm5ldywKKyAgICAgICAgICBzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50LCBzdHJ1Y3Qg cmJfcm9vdCAqcm9vdCkKK3sKKyAgICBpZiAocGFyZW50KQorICAgIHsKKyAgICAgICAgaWYgKHBh cmVudC0+cmJfbGVmdCA9PSBvbGQpCisgICAgICAgICAgICBXUklURV9PTkNFKHBhcmVudC0+cmJf bGVmdCwgbmV3KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgV1JJVEVfT05DRShwYXJlbnQt PnJiX3JpZ2h0LCBuZXcpOworICAgIH0gZWxzZQorICAgICAgICBXUklURV9PTkNFKHJvb3QtPnJi X25vZGUsIG5ldyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19yYl9jaGFuZ2VfY2hpbGRf cmN1KHN0cnVjdCByYl9ub2RlICpvbGQsIHN0cnVjdCByYl9ub2RlICpuZXcsCisgICAgICAgICAg ICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsIHN0cnVjdCByYl9yb290ICpyb290KQoreworICAg IGlmIChwYXJlbnQpCisgICAgeworICAgICAgICBpZiAocGFyZW50LT5yYl9sZWZ0ID09IG9sZCkK KyAgICAgICAgICAgIHJjdV9hc3NpZ25fcG9pbnRlcihwYXJlbnQtPnJiX2xlZnQsIG5ldyk7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJjdV9hc3NpZ25fcG9pbnRlcihwYXJlbnQtPnJiX3Jp Z2h0LCBuZXcpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJjdV9hc3NpZ25fcG9pbnRlcihy b290LT5yYl9ub2RlLCBuZXcpOworfQorCitleHRlcm4gdm9pZCBfX3JiX2VyYXNlX2NvbG9yKHN0 cnVjdCByYl9ub2RlICpwYXJlbnQsIHN0cnVjdCByYl9yb290ICpyb290LAorICAgIHZvaWQgKCph dWdtZW50X3JvdGF0ZSkoc3RydWN0IHJiX25vZGUgKm9sZCwgc3RydWN0IHJiX25vZGUgKm5ldykp OworCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCByYl9ub2RlICoKK19fcmJfZXJhc2Vf YXVnbWVudGVkKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKKyAg ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmJfYXVnbWVudF9jYWxsYmFja3MgKmF1Z21lbnQpCit7 CisgICAgc3RydWN0IHJiX25vZGUgKmNoaWxkID0gbm9kZS0+cmJfcmlnaHQ7CisgICAgc3RydWN0 IHJiX25vZGUgKnRtcCA9IG5vZGUtPnJiX2xlZnQ7CisgICAgc3RydWN0IHJiX25vZGUgKnBhcmVu dCwgKnJlYmFsYW5jZTsKKyAgICB1bnNpZ25lZCBsb25nIHBjOworCisgICAgaWYgKCF0bXApCisg ICAgeworICAgICAgICAvKgorICAgICAgICAgKiBDYXNlIDE6IG5vZGUgdG8gZXJhc2UgaGFzIG5v IG1vcmUgdGhhbiAxIGNoaWxkIChlYXN5ISkKKyAgICAgICAgICoKKyAgICAgICAgICogTm90ZSB0 aGF0IGlmIHRoZXJlIGlzIG9uZSBjaGlsZCBpdCBtdXN0IGJlIHJlZCBkdWUgdG8gNSkKKyAgICAg ICAgICogYW5kIG5vZGUgbXVzdCBiZSBibGFjayBkdWUgdG8gNCkuIFdlIGFkanVzdCBjb2xvcnMg bG9jYWxseQorICAgICAgICAgKiBzbyBhcyB0byBieXBhc3MgX19yYl9lcmFzZV9jb2xvcigpIGxh dGVyIG9uLgorICAgICAgICAgKi8KKyAgICAgICAgcGMgPSBub2RlLT5fX3JiX3BhcmVudF9jb2xv cjsKKyAgICAgICAgcGFyZW50ID0gX19yYl9wYXJlbnQocGMpOworICAgICAgICBfX3JiX2NoYW5n ZV9jaGlsZChub2RlLCBjaGlsZCwgcGFyZW50LCByb290KTsKKyAgICAgICAgaWYgKGNoaWxkKQor ICAgICAgICB7CisgICAgICAgICAgICBjaGlsZC0+X19yYl9wYXJlbnRfY29sb3IgPSBwYzsKKyAg ICAgICAgICAgIHJlYmFsYW5jZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg ICAgICAgICAgcmViYWxhbmNlID0gX19yYl9pc19ibGFjayhwYykgPyBwYXJlbnQgOiBOVUxMOwor ICAgICAgICB0bXAgPSBwYXJlbnQ7CisgICAgfQorICAgIGVsc2UgaWYgKCFjaGlsZCkKKyAgICB7 CisgICAgICAgIC8qIFN0aWxsIGNhc2UgMSwgYnV0IHRoaXMgdGltZSB0aGUgY2hpbGQgaXMgbm9k ZS0+cmJfbGVmdCAqLworICAgICAgICB0bXAtPl9fcmJfcGFyZW50X2NvbG9yID0gcGMgPSBub2Rl LT5fX3JiX3BhcmVudF9jb2xvcjsKKyAgICAgICAgcGFyZW50ID0gX19yYl9wYXJlbnQocGMpOwor ICAgICAgICBfX3JiX2NoYW5nZV9jaGlsZChub2RlLCB0bXAsIHBhcmVudCwgcm9vdCk7CisgICAg ICAgIHJlYmFsYW5jZSA9IE5VTEw7CisgICAgICAgIHRtcCA9IHBhcmVudDsKKyAgICB9CisgICAg ZWxzZQorICAgIHsKKyAgICAgICAgc3RydWN0IHJiX25vZGUgKnN1Y2Nlc3NvciA9IGNoaWxkLCAq Y2hpbGQyOworCisgICAgICAgIHRtcCA9IGNoaWxkLT5yYl9sZWZ0OworICAgICAgICBpZiAoIXRt cCkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENhc2UgMjogbm9k ZSdzIHN1Y2Nlc3NvciBpcyBpdHMgcmlnaHQgY2hpbGQKKyAgICAgICAgICAgICAqCisgICAgICAg ICAgICAgKiAgICAobikgICAgICAgICAgKHMpCisgICAgICAgICAgICAgKiAgICAvIFwgICAgICAg ICAgLyBcCisgICAgICAgICAgICAgKiAgKHgpIChzKSAgLT4gICh4KSAoYykKKyAgICAgICAgICAg ICAqICAgICAgICBcCisgICAgICAgICAgICAgKiAgICAgICAgKGMpCisgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIHBhcmVudCA9IHN1Y2Nlc3NvcjsKKyAgICAgICAgICAgIGNoaWxkMiA9IHN1 Y2Nlc3Nvci0+cmJfcmlnaHQ7CisKKyAgICAgICAgICAgIGF1Z21lbnQtPmNvcHkobm9kZSwgc3Vj Y2Vzc29yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg IC8qCisgICAgICAgICAgICAgKiBDYXNlIDM6IG5vZGUncyBzdWNjZXNzb3IgaXMgbGVmdG1vc3Qg dW5kZXIKKyAgICAgICAgICAgICAqIG5vZGUncyByaWdodCBjaGlsZCBzdWJ0cmVlCisgICAgICAg ICAgICAgKgorICAgICAgICAgICAgICogICAgKG4pICAgICAgICAgIChzKQorICAgICAgICAgICAg ICogICAgLyBcICAgICAgICAgIC8gXAorICAgICAgICAgICAgICogICh4KSAoeSkgIC0+ICAoeCkg KHkpCisgICAgICAgICAgICAgKiAgICAgIC8gICAgICAgICAgICAvCisgICAgICAgICAgICAgKiAg ICAocCkgICAgICAgICAgKHApCisgICAgICAgICAgICAgKiAgICAvICAgICAgICAgICAgLworICAg ICAgICAgICAgICogIChzKSAgICAgICAgICAoYykKKyAgICAgICAgICAgICAqICAgIFwKKyAgICAg ICAgICAgICAqICAgIChjKQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBkbworICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIHBhcmVudCA9IHN1Y2Nlc3NvcjsKKyAgICAgICAgICAg ICAgICBzdWNjZXNzb3IgPSB0bXA7CisgICAgICAgICAgICAgICAgdG1wID0gdG1wLT5yYl9sZWZ0 OworICAgICAgICAgICAgfSB3aGlsZSAodG1wKTsKKyAgICAgICAgICAgIGNoaWxkMiA9IHN1Y2Nl c3Nvci0+cmJfcmlnaHQ7CisgICAgICAgICAgICBXUklURV9PTkNFKHBhcmVudC0+cmJfbGVmdCwg Y2hpbGQyKTsKKyAgICAgICAgICAgIFdSSVRFX09OQ0Uoc3VjY2Vzc29yLT5yYl9yaWdodCwgY2hp bGQpOworICAgICAgICAgICAgcmJfc2V0X3BhcmVudChjaGlsZCwgc3VjY2Vzc29yKTsKKworICAg ICAgICAgICAgYXVnbWVudC0+Y29weShub2RlLCBzdWNjZXNzb3IpOworICAgICAgICAgICAgYXVn bWVudC0+cHJvcGFnYXRlKHBhcmVudCwgc3VjY2Vzc29yKTsKKyAgICAgICAgfQorCisgICAgICAg IHRtcCA9IG5vZGUtPnJiX2xlZnQ7CisgICAgICAgIFdSSVRFX09OQ0Uoc3VjY2Vzc29yLT5yYl9s ZWZ0LCB0bXApOworICAgICAgICByYl9zZXRfcGFyZW50KHRtcCwgc3VjY2Vzc29yKTsKKworICAg ICAgICBwYyA9IG5vZGUtPl9fcmJfcGFyZW50X2NvbG9yOworICAgICAgICB0bXAgPSBfX3JiX3Bh cmVudChwYyk7CisgICAgICAgIF9fcmJfY2hhbmdlX2NoaWxkKG5vZGUsIHN1Y2Nlc3NvciwgdG1w LCByb290KTsKKworICAgICAgICBpZiAoY2hpbGQyKQorICAgICAgICB7CisgICAgICAgICAgICBz dWNjZXNzb3ItPl9fcmJfcGFyZW50X2NvbG9yID0gcGM7CisgICAgICAgICAgICByYl9zZXRfcGFy ZW50X2NvbG9yKGNoaWxkMiwgcGFyZW50LCBSQl9CTEFDSyk7CisgICAgICAgICAgICByZWJhbGFu Y2UgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBwYzIgPSBzdWNjZXNzb3ItPl9fcmJfcGFyZW50X2NvbG9yOworICAg ICAgICAgICAgc3VjY2Vzc29yLT5fX3JiX3BhcmVudF9jb2xvciA9IHBjOworICAgICAgICAgICAg cmViYWxhbmNlID0gX19yYl9pc19ibGFjayhwYzIpID8gcGFyZW50IDogTlVMTDsKKyAgICAgICAg fQorICAgICAgICB0bXAgPSBzdWNjZXNzb3I7CisgICAgfQorCisgICAgYXVnbWVudC0+cHJvcGFn YXRlKHRtcCwgTlVMTCk7CisgICAgcmV0dXJuIHJlYmFsYW5jZTsKK30KKworc3RhdGljIF9fYWx3 YXlzX2lubGluZSB2b2lkCityYl9lcmFzZV9hdWdtZW50ZWQoc3RydWN0IHJiX25vZGUgKm5vZGUs IHN0cnVjdCByYl9yb290ICpyb290LAorICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmJfYXVnbWVu dF9jYWxsYmFja3MgKmF1Z21lbnQpCit7CisgICAgc3RydWN0IHJiX25vZGUgKnJlYmFsYW5jZSA9 IF9fcmJfZXJhc2VfYXVnbWVudGVkKG5vZGUsIHJvb3QsIGF1Z21lbnQpOworICAgIGlmIChyZWJh bGFuY2UpCisgICAgICAgIF9fcmJfZXJhc2VfY29sb3IocmViYWxhbmNlLCByb290LCBhdWdtZW50 LT5yb3RhdGUpOworfQorCisjZW5kaWYgICAgLyogX0xJTlVYX1JCVFJFRV9BVUdNRU5URURfSCAq LwotLSAKMi4xMi4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw czovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==