From mboxrd@z Thu Jan 1 00:00:00 1970 From: Praveen Kumar Subject: [PATCH 08/17] rbtree: low level optimizations in rb_insert_color() Date: Thu, 1 Jun 2017 02:16:59 +0530 Message-ID: <20170531204708.10470-9-kpraveen.lkml@gmail.com> References: <20170531204708.10470-1-kpraveen.lkml@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170531204708.10470-1-kpraveen.lkml@gmail.com> 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: Andrea Arcangeli , Jens Axboe , Rik van Riel , sstabellini@kernel.org, wei.liu2@citrix.com, Peter Zijlstra , George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, Daniel Santos , Praveen Kumar , "Eric W. Biederman" , jbeulich@suse.com, Andrew Morton , Michel Lespinasse , Linus Torvalds List-Id: xen-devel@lists.xenproject.org LSBVc2UgdGhlIG5ld2x5IGludHJvZHVjZWQgcmJfc2V0X3BhcmVudF9jb2xvcigpIGZ1bmN0aW9u IHRvIGZsaXAgdGhlIGNvbG9yCiAgb2Ygbm9kZXMgd2hvc2UgcGFyZW50IGlzIGFscmVhZHkga25v d24uCi0gT3B0aW1pemUgcmJfcGFyZW50KCkgd2hlbiB0aGUgbm9kZSBpcyBrbm93biB0byBiZSBy ZWQgLSB0aGVyZSBpcyBubyBuZWVkCiAgdG8gbWFzayBvdXQgdGhlIGNvbG9yIGluIHRoYXQgY2Fz ZS4KLSBGbGlwcGluZyBncGFyZW50J3MgY29sb3IgdG8gcmVkIHJlcXVpcmVzIHVzIHRvIGZldGNo IGl0cyByYl9wYXJlbnRfY29sb3IKICBmaWVsZCwgc28gd2UgY2FuIHJldXNlIGl0IGFzIHRoZSBw YXJlbnQgdmFsdWUgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgotIERvIG5vdCB1c2UgX19y Yl9yb3RhdGVfbGVmdCgpIGFuZCBfX3JiX3JvdGF0ZV9yaWdodCgpIHRvIGhhbmRsZSB0cmVlCiAg cm90YXRpb25zOiB3ZSBhbHJlYWR5IGhhdmUgcG9pbnRlcnMgdG8gYWxsIHJlbGV2YW50IG5vZGVz LCBhbmQga25vdyB0aGVpcgogIGNvbG9ycyAoZWl0aGVyIGJlY2F1c2Ugd2Ugd2FudCB0byBhZGp1 c3QgaXQsIG9yIGJlY2F1c2Ugd2UndmUgdGVzdGVkIGl0LAogIG9yIHdlIGNhbiBkZWR1Y2UgaXQg YXMgYmxhY2sgZHVlIHRvIHRoZSBub2RlIHByb3hpbWl0eSB0byBhIGtub3duIHJlZCBub2RlKS4K ICBTbyB3ZSBjYW4gZ2VuZXJhdGUgbW9yZSBlZmZpY2llbnQgY29kZSBieSBtYWtpbmcgdXNlIG9m IHRoZSBub2RlIHBvaW50ZXJzCiAgd2UgYWxyZWFkeSBoYXZlLCBhbmQgc2V0dGluZyBib3RoIHRo ZSBwYXJlbnQgYW5kIGNvbG9yIGF0dHJpYnV0ZXMgZm9yCiAgbm9kZXMgYWxsIGF0IG9uY2UuIEFs c28gaW4gQ2FzZSAyLCBzb21lIG5vZGUgYXR0cmlidXRlcyBkb24ndCBoYXZlIHRvCiAgYmUgc2V0 IGJlY2F1c2Ugd2Uga25vdyBhbm90aGVyIHRyZWUgcm90YXRpb24gKENhc2UgMykgd2lsbCBhbHdh eXMgZm9sbG93CiAgYW5kIG92ZXJyaWRlIHRoZW0uCgpjb21taXQgNWJjOTE4OGFhMjA3ZGFmZDQ3 ZWFiNTdkZjdjNGZlNWIzZDNmNjM2YSBmcm9tIGxpbnV4IHRyZWUKClNpZ25lZC1vZmYtYnk6IE1p Y2hlbCBMZXNwaW5hc3NlIDx3YWxrZW5AZ29vZ2xlLmNvbT4KQ2M6IEFuZHJlYSBBcmNhbmdlbGkg PGFhcmNhbmdlQHJlZGhhdC5jb20+CkFja2VkLWJ5OiBEYXZpZCBXb29kaG91c2UgPERhdmlkLldv b2Rob3VzZUBpbnRlbC5jb20+CkNjOiBSaWsgdmFuIFJpZWwgPHJpZWxAcmVkaGF0LmNvbT4KQ2M6 IFBldGVyIFppamxzdHJhIDxhLnAuemlqbHN0cmFAY2hlbGxvLm5sPgpDYzogRGFuaWVsIFNhbnRv cyA8ZGFuaWVsLnNhbnRvc0Bwb2JveC5jb20+CkNjOiBKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwu ZGs+CkNjOiAiRXJpYyBXLiBCaWVkZXJtYW4iIDxlYmllZGVybUB4bWlzc2lvbi5jb20+ClNpZ25l ZC1vZmYtYnk6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+ClNpZ25l ZC1vZmYtYnk6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4K LS0tCiB4ZW4vY29tbW9uL3JidHJlZS5jIHwgMTYwICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMjkgaW5zZXJ0aW9u cygrKSwgMzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9yYnRyZWUuYyBi L3hlbi9jb21tb24vcmJ0cmVlLmMKaW5kZXggY2NmOTA1ZTM1Yy4uOGRiN2E1YjRjYSAxMDA2NDQK LS0tIGEveGVuL2NvbW1vbi9yYnRyZWUuYworKysgYi94ZW4vY29tbW9uL3JidHJlZS5jCkBAIC0y Miw2ICsyMiwyNSBAQAogI2luY2x1ZGUgPHhlbi90eXBlcy5oPgogI2luY2x1ZGUgPHhlbi9yYnRy ZWUuaD4KIAorLyoKKyAqIHJlZC1ibGFjayB0cmVlcyBwcm9wZXJ0aWVzOiAgaHR0cDovL2VuLndp a2lwZWRpYS5vcmcvd2lraS9SYnRyZWUKKyAqCisgKiAgMSkgQSBub2RlIGlzIGVpdGhlciByZWQg b3IgYmxhY2sKKyAqICAyKSBUaGUgcm9vdCBpcyBibGFjaworICogIDMpIEFsbCBsZWF2ZXMgKE5V TEwpIGFyZSBibGFjaworICogIDQpIEJvdGggY2hpbGRyZW4gb2YgZXZlcnkgcmVkIG5vZGUgYXJl IGJsYWNrCisgKiAgNSkgRXZlcnkgc2ltcGxlIHBhdGggZnJvbSByb290IHRvIGxlYXZlcyBjb250 YWlucyB0aGUgc2FtZSBudW1iZXIKKyAqICAgICBvZiBibGFjayBub2Rlcy4KKyAqCisgKiAgNCBh bmQgNSBnaXZlIHRoZSBPKGxvZyBuKSBndWFyYW50ZWUsIHNpbmNlIDQgaW1wbGllcyB5b3UgY2Fu bm90IGhhdmUgdHdvCisgKiAgY29uc2VjdXRpdmUgcmVkIG5vZGVzIGluIGEgcGF0aCBhbmQgZXZl cnkgcmVkIG5vZGUgaXMgdGhlcmVmb3JlIGZvbGxvd2VkIGJ5CisgKiAgYSBibGFjay4gU28gaWYg QiBpcyB0aGUgbnVtYmVyIG9mIGJsYWNrIG5vZGVzIG9uIGV2ZXJ5IHNpbXBsZSBwYXRoIChhcyBw ZXIKKyAqICA1KSwgdGhlbiB0aGUgbG9uZ2VzdCBwb3NzaWJsZSBwYXRoIGR1ZSB0byA0IGlzIDJC LgorICoKKyAqICBXZSBzaGFsbCBpbmRpY2F0ZSBjb2xvciB3aXRoIGNhc2UsIHdoZXJlIGJsYWNr IG5vZGVzIGFyZSB1cHBlcmNhc2UgYW5kIHJlZAorICogIG5vZGVzIHdpbGwgYmUgbG93ZXJjYXNl LgorICovCisKICNkZWZpbmUgICAgUkJfUkVEICAgIDAKICNkZWZpbmUgICAgUkJfQkxBQ0sgIDEK IApAQCAtNDAsNiArNTksMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJiX3NldF9jb2xvcihzdHJ1 Y3QgcmJfbm9kZSAqcmIsIGludCBjb2xvcikKICAgICByYi0+X19yYl9wYXJlbnRfY29sb3IgPSAo cmItPl9fcmJfcGFyZW50X2NvbG9yICYgfjEpIHwgY29sb3I7CiB9CiAKK3N0YXRpYyBpbmxpbmUg dm9pZCByYl9zZXRfcGFyZW50X2NvbG9yKHN0cnVjdCByYl9ub2RlICpyYiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJiX25vZGUgKnAsIGludCBjb2xvcikK K3sKKyAgICByYi0+X19yYl9wYXJlbnRfY29sb3IgPSAodW5zaWduZWQgbG9uZylwIHwgY29sb3I7 Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJiX25vZGUgKnJiX3JlZF9wYXJlbnQoc3RydWN0 IHJiX25vZGUgKnJlZCkKK3sKKyAgICByZXR1cm4gKHN0cnVjdCByYl9ub2RlICopcmVkLT5fX3Ji X3BhcmVudF9jb2xvcjsKK30KKwogc3RhdGljIHZvaWQgX19yYl9yb3RhdGVfbGVmdChzdHJ1Y3Qg cmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7CiAgICAgc3RydWN0IHJiX25v ZGUgKnJpZ2h0ID0gbm9kZS0+cmJfcmlnaHQ7CkBAIC04Niw5ICsxMTYsMzAgQEAgc3RhdGljIHZv aWQgX19yYl9yb3RhdGVfcmlnaHQoc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9yb290 ICpyb290KQogICAgIHJiX3NldF9wYXJlbnQobm9kZSwgbGVmdCk7CiB9CiAKKy8qCisgKiBIZWxw ZXIgZnVuY3Rpb24gZm9yIHJvdGF0aW9uczoKKyAqIC0gb2xkJ3MgcGFyZW50IGFuZCBjb2xvciBn ZXQgYXNzaWduZWQgdG8gbmV3CisgKiAtIG9sZCBnZXRzIGFzc2lnbmVkIG5ldyBhcyBhIHBhcmVu dCBhbmQgJ2NvbG9yJyBhcyBhIGNvbG9yLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fcmJf cm90YXRlX3NldF9wYXJlbnRzKHN0cnVjdCByYl9ub2RlICpvbGQsIHN0cnVjdCByYl9ub2RlICpu ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgaW50IGNv bG9yKQoreworICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9wYXJlbnQob2xkKTsKKyAg ICBuZXctPl9fcmJfcGFyZW50X2NvbG9yID0gb2xkLT5fX3JiX3BhcmVudF9jb2xvcjsKKyAgICBy Yl9zZXRfcGFyZW50X2NvbG9yKG9sZCwgbmV3LCBjb2xvcik7CisgICAgaWYgKHBhcmVudCkgewor ICAgICAgICBpZiAocGFyZW50LT5yYl9sZWZ0ID09IG9sZCkKKyAgICAgICAgICAgIHBhcmVudC0+ cmJfbGVmdCA9IG5ldzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyZW50LT5yYl9yaWdo dCA9IG5ldzsKKyAgICB9IGVsc2UKKyAgICAgICAgcm9vdC0+cmJfbm9kZSA9IG5ldzsKK30KKwog dm9pZCByYl9pbnNlcnRfY29sb3Ioc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9yb290 ICpyb290KQogewotICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsICpncGFyZW50OworICAgIHN0 cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9yZWRfcGFyZW50KG5vZGUpLCAqZ3BhcmVudCwgKnRt cDsKIAogICAgIHdoaWxlICh0cnVlKQogICAgIHsKQEAgLTk5LDYxICsxNTAsMTA4IEBAIHZvaWQg cmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9v dCkKICAgICAgICAgICogT3RoZXJ3aXNlLCB0YWtlIHNvbWUgY29ycmVjdGl2ZSBhY3Rpb24gYXMg d2UgZG9uJ3QKICAgICAgICAgICogd2FudCBhIHJlZCByb290IG9yIHR3byBjb25zZWN1dGl2ZSBy ZWQgbm9kZXMuCiAgICAgICAgICAqLwotICAgICAgICBwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7 CiAgICAgICAgIGlmICghcGFyZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICByYl9zZXRfYmxh Y2sobm9kZSk7CisgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKG5vZGUsIE5VTEwsIFJC X0JMQUNLKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9IGVsc2UgaWYgKHJiX2lzX2Js YWNrKHBhcmVudCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBncGFyZW50ID0gcmJf cGFyZW50KHBhcmVudCk7CisgICAgICAgIGdwYXJlbnQgPSByYl9yZWRfcGFyZW50KHBhcmVudCk7 CiAKICAgICAgICAgaWYgKHBhcmVudCA9PSBncGFyZW50LT5yYl9sZWZ0KQogICAgICAgICB7Cisg ICAgICAgICAgICB0bXAgPSBncGFyZW50LT5yYl9yaWdodDsKKyAgICAgICAgICAgIGlmICh0bXAg JiYgcmJfaXNfcmVkKHRtcCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVnaXN0 ZXIgc3RydWN0IHJiX25vZGUgKnVuY2xlID0gZ3BhcmVudC0+cmJfcmlnaHQ7Ci0gICAgICAgICAg ICAgICAgaWYgKHVuY2xlICYmIHJiX2lzX3JlZCh1bmNsZSkpCi0gICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICByYl9zZXRfYmxhY2sodW5jbGUpOwotICAgICAgICAgICAgICAg ICAgICByYl9zZXRfYmxhY2socGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgcmJfc2V0X3Jl ZChncGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGdwYXJlbnQ7Ci0gICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAvKgorICAgICAgICAgICAgICAgICAqIENhc2UgMSAtIGNvbG9yIGZsaXBzCisgICAgICAgICAg ICAgICAgICoKKyAgICAgICAgICAgICAgICAgKiAgICAgICBHICAgICAgICAgICAgZworICAgICAg ICAgICAgICAgICAqICAgICAgLyBcICAgICAgICAgIC8gXAorICAgICAgICAgICAgICAgICAqICAg ICBwICAgdSAgLS0+ICAgUCAgIFUKKyAgICAgICAgICAgICAgICAgKiAgICAvICAgICAgICAgICAg LworICAgICAgICAgICAgICAgICAqICAgbiAgICAgICAgICAgIE4KKyAgICAgICAgICAgICAgICAg KgorICAgICAgICAgICAgICAgICAqIEhvd2V2ZXIsIHNpbmNlIGcncyBwYXJlbnQgbWlnaHQgYmUg cmVkLCBhbmQKKyAgICAgICAgICAgICAgICAgKiA0KSBkb2VzIG5vdCBhbGxvdyB0aGlzLCB3ZSBu ZWVkIHRvIHJlY3Vyc2UKKyAgICAgICAgICAgICAgICAgKiBhdCBnLgorICAgICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IodG1wLCBncGFyZW50LCBS Ql9CTEFDSyk7CisgICAgICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcihwYXJlbnQsIGdw YXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAgICAgICAgICBub2RlID0gZ3BhcmVudDsKKyAgICAg ICAgICAgICAgICBwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisgICAgICAgICAgICAgICAgcmJf c2V0X3BhcmVudF9jb2xvcihub2RlLCBwYXJlbnQsIFJCX1JFRCk7CisgICAgICAgICAgICAgICAg Y29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwYXJlbnQtPnJiX3Jp Z2h0ID09IG5vZGUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX19yYl9yb3RhdGVf bGVmdChwYXJlbnQsIHJvb3QpOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAg ICogQ2FzZSAyIC0gbGVmdCByb3RhdGUgYXQgcGFyZW50CisgICAgICAgICAgICAgICAgICoKKyAg ICAgICAgICAgICAgICAgKiAgICAgIEcgICAgICAgICAgICAgRworICAgICAgICAgICAgICAgICAq ICAgICAvIFwgICAgICAgICAgIC8gXAorICAgICAgICAgICAgICAgICAqICAgIHAgICBVICAtLT4g ICAgbiAgIFUKKyAgICAgICAgICAgICAgICAgKiAgICAgXCAgICAgICAgICAgLworICAgICAgICAg ICAgICAgICAqICAgICAgbiAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAg ICAgICAgICAqIFRoaXMgc3RpbGwgbGVhdmVzIHVzIGluIHZpb2xhdGlvbiBvZiA0KSwgdGhlCisg ICAgICAgICAgICAgICAgICogY29udGludWF0aW9uIGludG8gQ2FzZSAzIHdpbGwgZml4IHRoYXQu CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcGFyZW50LT5yYl9yaWdodCA9 IHRtcCA9IG5vZGUtPnJiX2xlZnQ7CisgICAgICAgICAgICAgICAgbm9kZS0+cmJfbGVmdCA9IHBh cmVudDsKKyAgICAgICAgICAgICAgICBpZiAodG1wKQorICAgICAgICAgICAgICAgICAgICByYl9z ZXRfcGFyZW50X2NvbG9yKHRtcCwgcGFyZW50LCBSQl9CTEFDSyk7CisgICAgICAgICAgICAgICAg cmJfc2V0X3BhcmVudF9jb2xvcihwYXJlbnQsIG5vZGUsIFJCX1JFRCk7CiAgICAgICAgICAgICAg ICAgcGFyZW50ID0gbm9kZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmJfc2V0X2Js YWNrKHBhcmVudCk7Ci0gICAgICAgICAgICByYl9zZXRfcmVkKGdwYXJlbnQpOwotICAgICAgICAg ICAgX19yYl9yb3RhdGVfcmlnaHQoZ3BhcmVudCwgcm9vdCk7CisgICAgICAgICAgICAvKgorICAg ICAgICAgICAgICogQ2FzZSAzIC0gcmlnaHQgcm90YXRlIGF0IGdwYXJlbnQKKyAgICAgICAgICAg ICAqCisgICAgICAgICAgICAgKiAgICAgICAgRyAgICAgICAgICAgUAorICAgICAgICAgICAgICog ICAgICAgLyBcICAgICAgICAgLyBcCisgICAgICAgICAgICAgKiAgICAgIHAgICBVICAtLT4gIG4g ICBnCisgICAgICAgICAgICAgKiAgICAgLyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg ICogICAgbiAgICAgICAgICAgICAgICAgICBVCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg IGdwYXJlbnQtPnJiX2xlZnQgPSB0bXAgPSBwYXJlbnQtPnJiX3JpZ2h0OworICAgICAgICAgICAg cGFyZW50LT5yYl9yaWdodCA9IGdwYXJlbnQ7CisgICAgICAgICAgICBpZiAodG1wKQorICAgICAg ICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IodG1wLCBncGFyZW50LCBSQl9CTEFDSyk7Cisg ICAgICAgICAgICBfX3JiX3JvdGF0ZV9zZXRfcGFyZW50cyhncGFyZW50LCBwYXJlbnQsIHJvb3Qs IFJCX1JFRCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHRtcCA9IGdwYXJlbnQtPnJiX2xlZnQ7CisgICAgICAgICAgICBpZiAodG1wICYmIHJiX2lz X3JlZCh0bXApKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVj dCByYl9ub2RlICp1bmNsZSA9IGdwYXJlbnQtPnJiX2xlZnQ7Ci0gICAgICAgICAgICAgICAgaWYg KHVuY2xlICYmIHJiX2lzX3JlZCh1bmNsZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgICAgICByYl9zZXRfYmxhY2sodW5jbGUpOwotICAgICAgICAgICAgICAgICAgICByYl9z ZXRfYmxhY2socGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgcmJfc2V0X3JlZChncGFyZW50 KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGdwYXJlbnQ7Ci0gICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBDYXNl IDEgLSBjb2xvciBmbGlwcyAqLworICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3Io dG1wLCBncGFyZW50LCBSQl9CTEFDSyk7CisgICAgICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9j b2xvcihwYXJlbnQsIGdwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAgICAgICAgICBub2RlID0g Z3BhcmVudDsKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisgICAg ICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcihub2RlLCBwYXJlbnQsIFJCX1JFRCk7Cisg ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm IChwYXJlbnQtPnJiX2xlZnQgPT0gbm9kZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICBfX3JiX3JvdGF0ZV9yaWdodChwYXJlbnQsIHJvb3QpOworICAgICAgICAgICAgICAgIC8qIENh c2UgMiAtIHJpZ2h0IHJvdGF0ZSBhdCBwYXJlbnQgKi8KKyAgICAgICAgICAgICAgICBwYXJlbnQt PnJiX2xlZnQgPSB0bXAgPSBub2RlLT5yYl9yaWdodDsKKyAgICAgICAgICAgICAgICBub2RlLT5y Yl9yaWdodCA9IHBhcmVudDsKKyAgICAgICAgICAgICAgICBpZiAodG1wKQorICAgICAgICAgICAg ICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHRtcCwgcGFyZW50LCBSQl9CTEFDSyk7CisgICAg ICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcihwYXJlbnQsIG5vZGUsIFJCX1JFRCk7CiAg ICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg ICAgcmJfc2V0X2JsYWNrKHBhcmVudCk7Ci0gICAgICAgICAgICByYl9zZXRfcmVkKGdwYXJlbnQp OwotICAgICAgICAgICAgX19yYl9yb3RhdGVfbGVmdChncGFyZW50LCByb290KTsKKyAgICAgICAg ICAgIC8qIENhc2UgMyAtIGxlZnQgcm90YXRlIGF0IGdwYXJlbnQgKi8KKyAgICAgICAgICAgIGdw YXJlbnQtPnJiX3JpZ2h0ID0gdG1wID0gcGFyZW50LT5yYl9sZWZ0OworICAgICAgICAgICAgcGFy ZW50LT5yYl9sZWZ0ID0gZ3BhcmVudDsKKyAgICAgICAgICAgIGlmICh0bXApCisgICAgICAgICAg ICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcih0bXAsIGdwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAg ICAgICAgIF9fcmJfcm90YXRlX3NldF9wYXJlbnRzKGdwYXJlbnQsIHBhcmVudCwgcm9vdCwgUkJf UkVEKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogfQotLSAKMi4xMi4w CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==