From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com [IPv6:2a00:1450:4864:20::529]) by sourceware.org (Postfix) with ESMTPS id C8FA73858C2C; Mon, 20 Jun 2022 16:58:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C8FA73858C2C Received: by mail-ed1-x529.google.com with SMTP id cf14so6192203edb.8; Mon, 20 Jun 2022 09:58:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:from :subject:to:cc:content-language; bh=I8PrwAt9D4SFONYQL3fywScu2OrMeiuuBzb6Gre0lC0=; b=Geb5NZIkABuIjSu1uOHUpYp4JrAtmuj6UbTkYIggEyzBMIDqF8bPLqFgx2eeBN9r7l tq3myohc+7XLnYD9lio/UOjDVfD49mYR0rmch5T6dwoIaC2VDO8kscNj8IHW6pdN17xx GsZclIJF9nYPYp2tx725GKbCxXLAuJU3PzX3Ww4vMjF1RYhykyZd4uxPxhQxnuRPPDpP Qptc3dypKm6HGTP1nYGJpYaawzfxXNuZ666sZcWUrmH70MspE/IVptiqPGl/w222e4Xb BwxuOZz8l+QdyWKr8T/0ArBA4xrWfML9aOHpclbtla+u9bsWOAgfK/r+FaOfl8bqgYrv tbDQ== X-Gm-Message-State: AJIora9owzQTzd0ec5iEJr33FJUzpSI/UkcGJFek9Q56sTEVZnqK8HH3 lDkJN33CK7SX71qONeCuNwIvOoIVKYU= X-Google-Smtp-Source: AGRyM1vj89Su0dNSSqx4ss+Ub4zj2zsllkCV7kOQVN1NMZ6FyJnDlvpUDbX3zoHhDCOU6taJLggkQQ== X-Received: by 2002:a05:6402:5211:b0:42e:2e1c:5bce with SMTP id s17-20020a056402521100b0042e2e1c5bcemr30991221edd.198.1655744303506; Mon, 20 Jun 2022 09:58:23 -0700 (PDT) Received: from [10.126.3.254] ([109.190.253.11]) by smtp.googlemail.com with ESMTPSA id 9-20020a170906310900b0071cbc7487e1sm5631379ejx.69.2022.06.20.09.58.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 20 Jun 2022 09:58:23 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------OZVGDUaYZg0if1Sz3RXN2P06" Message-ID: Date: Mon, 20 Jun 2022 18:58:20 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= Subject: [PATCH 4/5][_Hashtable] Before begin cache policy To: "libstdc++@gcc.gnu.org" Cc: gcc-patches Content-Language: fr X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Jun 2022 16:58:28 -0000 This is a multi-part message in MIME format. --------------OZVGDUaYZg0if1Sz3RXN2P06 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit libstdc++: [_Hashtable] Add before begin bucket index cache on range insert Add a policy to maintain a cache of the before begin bucket index in the context of range insertion. libstdc++-v3/ChangeLog:     * include/bits/hashtable_policy.h (_CacheBbeginPolicy): New, maintain     a cache.     (_NoCacheBbeginPolicy): New, no cache.     (_ReuseOrAllocNode<>): Inherit _CacheBBeginPolicy.     (_AllocNode<>): Add cache policy template parameter.     (_Map_base<>::operator[]): Adapt, use _NoCacheBBeginPolicy.     (_Insert_base<>__node_gen_type): Replace by...     (_Insert_base<>::__alloc_node_gen_t<>): ...this. Use cache policy as a     template parameter.     (_Insert_base<>::insert): Adapt.     (_Insert_base<>::try_emplace): Adapt.     (_Insert<>::__node_gen_type): Replace by...     (_Insert<>::__alloc_node_gen_t): ...this, use _NoCacheBBeginPolicy.     (_Insert<>::insert): Adapt.     * include/bits/hashtable.h     (_Hashtable<>::__alloc_node_gen_t): Remove.     (_Hashtable<>::__alloc_node_gen_cache_bbegin_t): New.     (_Hashtable<>::__no_cache_bbegin_policy_t): New.     (_Hashtable<>::__cache_bbegin_policy_t): New.     (_Hashtable<>::_CacheBBeginPolicy): Add friend declaration.     (_Hashtable<>::_NoCacheBBeginPolicy): Add friend declaration.     (_Hashtable<>::_M_insert_bucket_begin): Add BBegin policy.     (_Hashtable<>::_M_insert_unique_node): Likewise.     (_Hashtable<>::_M_insert_multi_node): Likewise. Tested under Linux x64. François --------------OZVGDUaYZg0if1Sz3RXN2P06 Content-Type: text/x-patch; charset=UTF-8; name="4_hashtable_before_begin.patch" Content-Disposition: attachment; filename="4_hashtable_before_begin.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlLmggYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5oCmluZGV4IGIwZDFiYzFmMDhh Li4wMTFhNzA3NjA1ZiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9o YXNodGFibGUuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5o CkBAIC0yODgsMTAgKzI4OCwxNCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP TgogCiAgICAgICB1c2luZyBfX3JldXNlX29yX2FsbG9jX25vZGVfZ2VuX3QgPQogCV9fZGV0 YWlsOjpfUmV1c2VPckFsbG9jTm9kZTxfX25vZGVfYWxsb2NfdHlwZT47Ci0gICAgICB1c2lu ZyBfX2FsbG9jX25vZGVfZ2VuX3QgPQotCV9fZGV0YWlsOjpfQWxsb2NOb2RlPF9fbm9kZV9h bGxvY190eXBlPjsKKyAgICAgIHVzaW5nIF9fYWxsb2Nfbm9kZV9nZW5fY2FjaGVfYmJlZ2lu X3QgPQorCV9fZGV0YWlsOjpfQWxsb2NOb2RlPF9fbm9kZV9hbGxvY190eXBlLCBfX2RldGFp bDo6X0NhY2hlQkJlZ2luUG9saWN5PjsKICAgICAgIHVzaW5nIF9fbm9kZV9idWlsZGVyX3Qg PQogCV9fZGV0YWlsOjpfTm9kZUJ1aWxkZXI8X0V4dHJhY3RLZXk+OworICAgICAgdXNpbmcg X19ub19jYWNoZV9iYmVnaW5fcG9saWN5X3QgPQorCV9fZGV0YWlsOjpfTm9DYWNoZUJCZWdp blBvbGljeTsKKyAgICAgIHVzaW5nIF9fY2FjaGVfYmJlZ2luX3BvbGljeV90ID0KKwlfX2Rl dGFpbDo6X0NhY2hlQkJlZ2luUG9saWN5OwogCiAgICAgICAvLyBTaW1wbGUgUkFJSSB0eXBl IGZvciBtYW5hZ2luZyBhIG5vZGUgY29udGFpbmluZyBhbiBlbGVtZW50CiAgICAgICBzdHJ1 Y3QgX1Njb3BlZF9ub2RlCkBAIC0zNzYsNiArMzgwLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KIAkgICAgICAgYm9vbCBfVW5pcXVlX2tleXNhPgogCWZyaWVuZCBz dHJ1Y3QgX19kZXRhaWw6Ol9FcXVhbGl0eTsKIAorICAgICAgZnJpZW5kIHN0cnVjdCBfX2Rl dGFpbDo6X0NhY2hlQkJlZ2luUG9saWN5OworICAgICAgZnJpZW5kIHN0cnVjdCBfX2RldGFp bDo6X05vQ2FjaGVCQmVnaW5Qb2xpY3k7CisKICAgICBwdWJsaWM6CiAgICAgICB1c2luZyBz aXplX3R5cGUgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpzaXplX3R5cGU7CiAgICAg ICB1c2luZyBkaWZmZXJlbmNlX3R5cGUgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpk aWZmZXJlbmNlX3R5cGU7CkBAIC04NzIsOCArODc5LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KICAgICAgIH0KIAogICAgICAgLy8gSW5zZXJ0IGEgbm9kZSBhdCB0 aGUgYmVnaW5uaW5nIG9mIGEgYnVja2V0LgotICAgICAgdm9pZAotICAgICAgX01faW5zZXJ0 X2J1Y2tldF9iZWdpbihzaXplX3R5cGUsIF9fbm9kZV9wdHIpOworICAgICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JCZWdpblBvbGljeT4KKwl2b2lkCisJX01faW5zZXJ0X2J1Y2tldF9iZWdp bihzaXplX3R5cGUsIF9fbm9kZV9wdHIsIGNvbnN0IF9CQmVnaW5Qb2xpY3kmKTsKIAogICAg ICAgLy8gUmVtb3ZlIHRoZSBidWNrZXQgZmlyc3Qgbm9kZQogICAgICAgdm9pZApAQCAtODkw LDE1ICs4OTgsMTggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAg IC8vIEluc2VydCBub2RlIF9fbiB3aXRoIGhhc2ggY29kZSBfX2NvZGUsIGluIGJ1Y2tldCBf X2JrdCBpZiBubwogICAgICAgLy8gcmVoYXNoIChhc3N1bWVzIG5vIGVsZW1lbnQgd2l0aCBz YW1lIGtleSBhbHJlYWR5IHByZXNlbnQpLgogICAgICAgLy8gVGFrZXMgb3duZXJzaGlwIG9m IF9fbiBpZiBpbnNlcnRpb24gc3VjY2VlZHMsIHRocm93cyBvdGhlcndpc2UuCi0gICAgICBp dGVyYXRvcgotICAgICAgX01faW5zZXJ0X3VuaXF1ZV9ub2RlKHNpemVfdHlwZSBfX2JrdCwg X19oYXNoX2NvZGUsCi0JCQkgICAgX19ub2RlX3B0ciBfX24sIHNpemVfdHlwZSBfX25fZWx0 ID0gMSk7CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkJlZ2luUG9saWN5PgorCWl0ZXJh dG9yCisJX01faW5zZXJ0X3VuaXF1ZV9ub2RlKHNpemVfdHlwZSBfX2JrdCwgX19oYXNoX2Nv ZGUsCisJCQkgICAgICBfX25vZGVfcHRyIF9fbiwgY29uc3QgX0JCZWdpblBvbGljeSYsCisJ CQkgICAgICBzaXplX3R5cGUgX19uX2VsdCA9IDEpOwogCiAgICAgICAvLyBJbnNlcnQgbm9k ZSBfX24gd2l0aCBrZXkgX19rIGFuZCBoYXNoIGNvZGUgX19jb2RlLgogICAgICAgLy8gVGFr ZXMgb3duZXJzaGlwIG9mIF9fbiBpZiBpbnNlcnRpb24gc3VjY2VlZHMsIHRocm93cyBvdGhl cndpc2UuCi0gICAgICBpdGVyYXRvcgotICAgICAgX01faW5zZXJ0X211bHRpX25vZGUoX19u b2RlX3B0ciBfX2hpbnQsCi0JCQkgICBfX2hhc2hfY29kZSBfX2NvZGUsIF9fbm9kZV9wdHIg X19uKTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CQmVnaW5Qb2xpY3k+CisJaXRlcmF0 b3IKKwlfTV9pbnNlcnRfbXVsdGlfbm9kZShfX25vZGVfcHRyIF9faGludCwgX19oYXNoX2Nv ZGUsCisJCQkgICAgIF9fbm9kZV9wdHIgX19uLCBjb25zdCBfQkJlZ2luUG9saWN5Jik7CiAK ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgogCXN0ZDo6cGFpcjxpdGVyYXRv ciwgYm9vbD4KQEAgLTEwODcsOCArMTA5OCwxMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfVkVSU0lPTgogCQkgIH0KIAkJZWxzZQogCQkgIHsKKwkJICAgIF9fbm9fY2FjaGVfYmJl Z2luX3BvbGljeV90IF9fYmJlZ2luX3BvbGljeTsKIAkJICAgIF9fcmV0LnBvc2l0aW9uCi0J CSAgICAgID0gX01faW5zZXJ0X3VuaXF1ZV9ub2RlKF9fYmt0LCBfX2NvZGUsIF9fbmguX01f cHRyKTsKKwkJICAgICAgPSBfTV9pbnNlcnRfdW5pcXVlX25vZGUoX19ia3QsIF9fY29kZSwg X19uaC5fTV9wdHIsCisJCQkJCSAgICAgIF9fYmJlZ2luX3BvbGljeSk7CiAJCSAgICBfX25o Ll9NX3B0ciA9IG51bGxwdHI7CiAJCSAgICBfX3JldC5pbnNlcnRlZCA9IHRydWU7CiAJCSAg fQpAQCAtMTExNyw4ICsxMTMwLDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9OCiAJICAgIF9faGludCA9IGNlbmQoKTsKIAkgIH0KIAorCV9fbm9fY2FjaGVfYmJlZ2lu X3BvbGljeV90IF9fYmJlZ2luX3BvbGljeTsKIAlhdXRvIF9fcmV0Ci0JICA9IF9NX2luc2Vy dF9tdWx0aV9ub2RlKF9faGludC5fTV9jdXIsIF9fY29kZSwgX19uaC5fTV9wdHIpOworCSAg PSBfTV9pbnNlcnRfbXVsdGlfbm9kZShfX2hpbnQuX01fY3VyLCBfX2NvZGUsIF9fbmguX01f cHRyLAorCQkJCSBfX2JiZWdpbl9wb2xpY3kpOwogCV9fbmguX01fcHRyID0gbnVsbHB0cjsK IAlyZXR1cm4gX19yZXQ7CiAgICAgICB9CkBAIC0xMTc1LDYgKzExOTAsNyBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAgICAgIG5vZGVfdHlwZT4sICJOb2RlIHR5 cGVzIGFyZSBjb21wYXRpYmxlIik7CiAJICBfX2dsaWJjeHhfYXNzZXJ0KGdldF9hbGxvY2F0 b3IoKSA9PSBfX3NyYy5nZXRfYWxsb2NhdG9yKCkpOwogCisJICBfX2NhY2hlX2JiZWdpbl9w b2xpY3lfdCBfX2JiZWdpbl9wb2xpY3k7CiAJICBhdXRvIF9fbl9lbHQgPSBfX3NyYy5zaXpl KCk7CiAJICBmb3IgKGF1dG8gX19pID0gX19zcmMuY2JlZ2luKCksIF9fZW5kID0gX19zcmMu Y2VuZCgpOyBfX2kgIT0gX19lbmQ7KQogCSAgICB7CkBAIC0xMTg2LDcgKzEyMDIsOCBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAgICAgIGlmIChfTV9maW5kX25v ZGUoX19ia3QsIF9faywgX19jb2RlKSA9PSBudWxscHRyKQogCQl7CiAJCSAgYXV0byBfX25o ID0gX19zcmMuZXh0cmFjdChfX3Bvcyk7Ci0JCSAgX01faW5zZXJ0X3VuaXF1ZV9ub2RlKF9f Ymt0LCBfX2NvZGUsIF9fbmguX01fcHRyLCBfX25fZWx0KTsKKwkJICBfTV9pbnNlcnRfdW5p cXVlX25vZGUoX19ia3QsIF9fY29kZSwgX19uaC5fTV9wdHIsCisJCQkJCV9fYmJlZ2luX3Bv bGljeSwgX19uX2VsdCk7CiAJCSAgX19uaC5fTV9wdHIgPSBudWxscHRyOwogCQkgIF9fbl9l bHQgPSAxOwogCQl9CkBAIC0xMjA0LDYgKzEyMjEsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfVkVSU0lPTgogCSAgICAgIG5vZGVfdHlwZT4sICJOb2RlIHR5cGVzIGFyZSBjb21w YXRpYmxlIik7CiAJICBfX2dsaWJjeHhfYXNzZXJ0KGdldF9hbGxvY2F0b3IoKSA9PSBfX3Ny Yy5nZXRfYWxsb2NhdG9yKCkpOwogCisJICBfX2NhY2hlX2JiZWdpbl9wb2xpY3lfdCBfX2Ji ZWdpbl9wb2xpY3k7CiAJICBfX25vZGVfcHRyIF9faGludCA9IG51bGxwdHI7CiAJICB0aGlz LT5yZXNlcnZlKHNpemUoKSArIF9fc3JjLnNpemUoKSk7CiAJICBmb3IgKGF1dG8gX19pID0g X19zcmMuY2JlZ2luKCksIF9fZW5kID0gX19zcmMuY2VuZCgpOyBfX2kgIT0gX19lbmQ7KQpA QCAtMTIyMCw3ICsxMjM4LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K IAkJfQogCiAJICAgICAgYXV0byBfX25oID0gX19zcmMuZXh0cmFjdChfX3Bvcyk7Ci0JICAg ICAgX19oaW50ID0gX01faW5zZXJ0X211bHRpX25vZGUoX19oaW50LCBfX2NvZGUsIF9fbmgu X01fcHRyKS5fTV9jdXI7CisJICAgICAgX19oaW50ID0gX01faW5zZXJ0X211bHRpX25vZGUo X19oaW50LCBfX2NvZGUsIF9fbmguX01fcHRyLAorCQkJCQkgICAgX19iYmVnaW5fcG9saWN5 KS5fTV9jdXI7CiAJICAgICAgX19uaC5fTV9wdHIgPSBudWxscHRyOwogCSAgICB9CiAJfQpA QCAtMTMxMCw3ICsxMzI5LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K IAkgICAgX01fYnVja2V0X2NvdW50ID0gX19ia3RfY291bnQ7CiAJICB9CiAKLQlfX2FsbG9j X25vZGVfZ2VuX3QgX19ub2RlX2dlbigqdGhpcyk7CisJX19hbGxvY19ub2RlX2dlbl9jYWNo ZV9iYmVnaW5fdCBfX25vZGVfZ2VuKCp0aGlzKTsKIAlmb3IgKDsgX19mICE9IF9fbDsgKytf X2YpCiAJICBfTV9pbnNlcnQoKl9fZiwgX19ub2RlX2dlbiwgX191a3MpOwogICAgICAgfQpA QCAtMTM0NSwxMCArMTM2NCwxMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP TgogCSAgICAgIF9NX2J1Y2tldF9jb3VudCA9IF9faHQuX01fYnVja2V0X2NvdW50OwogCSAg ICAgIF9NX2VsZW1lbnRfY291bnQgPSBfX2h0Ll9NX2VsZW1lbnRfY291bnQ7CiAJICAgICAg X01fcmVoYXNoX3BvbGljeSA9IF9faHQuX01fcmVoYXNoX3BvbGljeTsKLQkgICAgICBfX2Fs bG9jX25vZGVfZ2VuX3QgX19hbGxvY19ub2RlX2dlbigqdGhpcyk7CisJICAgICAgX19hbGxv Y19ub2RlX2dlbl9jYWNoZV9iYmVnaW5fdCBfX25vZGVfZ2VuKCp0aGlzKTsKIAkgICAgICBf X3RyeQogCQl7Ci0JCSAgX01fYXNzaWduKF9faHQsIF9fYWxsb2Nfbm9kZV9nZW4pOworCQkg IF9NX2Fzc2lnbihfX2h0LCBfX25vZGVfZ2VuKTsKIAkJfQogCSAgICAgIF9fY2F0Y2goLi4u KQogCQl7CkBAIC0xNTU2LDggKzE1NzUsOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf VkVSU0lPTgogICAgICAgX01fZWxlbWVudF9jb3VudChfX2h0Ll9NX2VsZW1lbnRfY291bnQp LAogICAgICAgX01fcmVoYXNoX3BvbGljeShfX2h0Ll9NX3JlaGFzaF9wb2xpY3kpCiAgICAg ewotICAgICAgX19hbGxvY19ub2RlX2dlbl90IF9fYWxsb2Nfbm9kZV9nZW4oKnRoaXMpOwot ICAgICAgX01fYXNzaWduKF9faHQsIF9fYWxsb2Nfbm9kZV9nZW4pOworICAgICAgX19hbGxv Y19ub2RlX2dlbl9jYWNoZV9iYmVnaW5fdCBfX25vZGVfZ2VuKCp0aGlzKTsKKyAgICAgIF9N X2Fzc2lnbihfX2h0LCBfX25vZGVfZ2VuKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5h bWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2MsCkBAIC0xNjEwLDgg KzE2MjksOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX01f ZWxlbWVudF9jb3VudChfX2h0Ll9NX2VsZW1lbnRfY291bnQpLAogICAgICAgX01fcmVoYXNo X3BvbGljeShfX2h0Ll9NX3JlaGFzaF9wb2xpY3kpCiAgICAgewotICAgICAgX19hbGxvY19u b2RlX2dlbl90IF9fYWxsb2Nfbm9kZV9nZW4oKnRoaXMpOwotICAgICAgX01fYXNzaWduKF9f aHQsIF9fYWxsb2Nfbm9kZV9nZW4pOworICAgICAgX19hbGxvY19ub2RlX2dlbl9jYWNoZV9i YmVnaW5fdCBfX25vZGVfZ2VuKCp0aGlzKTsKKyAgICAgIF9NX2Fzc2lnbihfX2h0LCBfX25v ZGVfZ2VuKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg X1ZhbHVlLCB0eXBlbmFtZSBfQWxsb2MsCkBAIC0xNjUwLDEyICsxNjY5LDExIEBAIF9HTElC Q1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJfQogICAgICAgZWxzZQogCXsKLQkgIF9f YWxsb2Nfbm9kZV9nZW5fdCBfX2FsbG9jX2dlbigqdGhpcyk7Ci0KKwkgIF9fYWxsb2Nfbm9k ZV9nZW5fY2FjaGVfYmJlZ2luX3QgX19ub2RlX2dlbigqdGhpcyk7CiAJICB1c2luZyBfRndk X0h0ID0gX19jb25kaXRpb25hbF90PAogCSAgICBfX21vdmVfaWZfbm9leGNlcHRfY29uZDx2 YWx1ZV90eXBlPjo6dmFsdWUsCiAJICAgIGNvbnN0IF9IYXNodGFibGUmLCBfSGFzaHRhYmxl JiY+OwotCSAgX01fYXNzaWduKHN0ZDo6Zm9yd2FyZDxfRndkX0h0PihfX2h0KSwgX19hbGxv Y19nZW4pOworCSAgX01fYXNzaWduKHN0ZDo6Zm9yd2FyZDxfRndkX0h0PihfX2h0KSwgX19u b2RlX2dlbik7CiAJICBfX2h0LmNsZWFyKCk7CiAJfQogICAgIH0KQEAgLTIwNzksMzQgKzIw OTcsMzggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkgICB0eXBlbmFt ZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAogCSAgIHR5cGVuYW1lIF9IYXNoLCB0 eXBlbmFtZSBfUmFuZ2VIYXNoLCB0eXBlbmFtZSBfVW51c2VkLAogCSAgIHR5cGVuYW1lIF9S ZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFpdHM+Ci0gICAgdm9pZAotICAgIF9IYXNodGFi bGU8X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCi0JICAgICAg IF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51c2VkLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6 Ci0gICAgX01faW5zZXJ0X2J1Y2tldF9iZWdpbihzaXplX3R5cGUgX19ia3QsIF9fbm9kZV9w dHIgX19ub2RlKQotICAgIHsKLSAgICAgIGlmIChfTV9idWNrZXRzW19fYmt0XSkKLQl7Ci0J ICAvLyBCdWNrZXQgaXMgbm90IGVtcHR5LCB3ZSBqdXN0IG5lZWQgdG8gaW5zZXJ0IHRoZSBu ZXcgbm9kZQotCSAgLy8gYWZ0ZXIgdGhlIGJ1Y2tldCBiZWZvcmUgYmVnaW4uCi0JICBfX25v ZGUtPl9NX254dCA9IF9NX2J1Y2tldHNbX19ia3RdLT5fTV9ueHQ7Ci0JICBfTV9idWNrZXRz W19fYmt0XS0+X01fbnh0ID0gX19ub2RlOwotCX0KLSAgICAgIGVsc2UKLQl7Ci0JICAvLyBU aGUgYnVja2V0IGlzIGVtcHR5LCB0aGUgbmV3IG5vZGUgaXMgaW5zZXJ0ZWQgYXQgdGhlCi0J ICAvLyBiZWdpbm5pbmcgb2YgdGhlIHNpbmdseS1saW5rZWQgbGlzdCBhbmQgdGhlIGJ1Y2tl dCB3aWxsCi0JICAvLyBjb250YWluIF9NX2JlZm9yZV9iZWdpbiBwb2ludGVyLgotCSAgX19u b2RlLT5fTV9ueHQgPSBfTV9iZWZvcmVfYmVnaW4uX01fbnh0OwotCSAgX01fYmVmb3JlX2Jl Z2luLl9NX254dCA9IF9fbm9kZTsKLQotCSAgaWYgKF9fbm9kZS0+X01fbnh0KQotCSAgICAv LyBXZSBtdXN0IHVwZGF0ZSBmb3JtZXIgYmVnaW4gYnVja2V0IHRoYXQgaXMgcG9pbnRpbmcg dG8KLQkgICAgLy8gX01fYmVmb3JlX2JlZ2luLgotCSAgICBfTV9idWNrZXRzW19NX2J1Y2tl dF9pbmRleCgqX19ub2RlLT5fTV9uZXh0KCkpXSA9IF9fbm9kZTsKLQotCSAgX01fYnVja2V0 c1tfX2JrdF0gPSAmX01fYmVmb3JlX2JlZ2luOwotCX0KLSAgICB9CisgICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JCZWdpblBvbGljeT4KKyAgICAgIHZvaWQKKyAgICAgIF9IYXNodGFibGU8 X0tleSwgX1ZhbHVlLCBfQWxsb2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCSBfSGFzaCwg X1JhbmdlSGFzaCwgX1VudXNlZCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgICAg X01faW5zZXJ0X2J1Y2tldF9iZWdpbihzaXplX3R5cGUgX19ia3QsIF9fbm9kZV9wdHIgX19u b2RlLAorCQkJICAgICBjb25zdCBfQkJlZ2luUG9saWN5JiBfX2JiX3BvbGljeSkKKyAgICAg IHsKKwlpZiAoX01fYnVja2V0c1tfX2JrdF0pCisJICB7CisJICAgIC8vIEJ1Y2tldCBpcyBu b3QgZW1wdHksIHdlIGp1c3QgbmVlZCB0byBpbnNlcnQgdGhlIG5ldyBub2RlCisJICAgIC8v IGFmdGVyIHRoZSBidWNrZXQgYmVmb3JlIGJlZ2luLgorCSAgICBfX25vZGUtPl9NX254dCA9 IF9NX2J1Y2tldHNbX19ia3RdLT5fTV9ueHQ7CisJICAgIF9NX2J1Y2tldHNbX19ia3RdLT5f TV9ueHQgPSBfX25vZGU7CisJICB9CisJZWxzZQorCSAgeworCSAgICAvLyBUaGUgYnVja2V0 IGlzIGVtcHR5LCB0aGUgbmV3IG5vZGUgaXMgaW5zZXJ0ZWQgYXQgdGhlCisJICAgIC8vIGJl Z2lubmluZyBvZiB0aGUgc2luZ2x5LWxpbmtlZCBsaXN0IGFuZCB0aGUgYnVja2V0IHdpbGwK KwkgICAgLy8gY29udGFpbiBfTV9iZWZvcmVfYmVnaW4gcG9pbnRlci4KKwkgICAgX19ub2Rl LT5fTV9ueHQgPSBfTV9iZWZvcmVfYmVnaW4uX01fbnh0OworCSAgICBfTV9iZWZvcmVfYmVn aW4uX01fbnh0ID0gX19ub2RlOworCisJICAgIGlmIChfX25vZGUtPl9NX254dCkKKwkgICAg ICAvLyBXZSBtdXN0IHVwZGF0ZSBmb3JtZXIgYmVnaW4gYnVja2V0IHRoYXQgaXMgcG9pbnRp bmcgdG8KKwkgICAgICAvLyBfTV9iZWZvcmVfYmVnaW4uCisJICAgICAgX01fYnVja2V0c1tf X2JiX3BvbGljeS5fTV9nZXRfYmJlZ2luX2JrdCgqdGhpcywgX19ub2RlLT5fTV9uZXh0KCkp XQorCQk9IF9fbm9kZTsKKworCSAgICBfX2JiX3BvbGljeS5fTV9zdG9yZV9iYmVnaW5fYmt0 KF9fYmt0KTsKKwkgICAgX01fYnVja2V0c1tfX2JrdF0gPSAmX01fYmVmb3JlX2JlZ2luOwor CSAgfQorICAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9W YWx1ZSwgdHlwZW5hbWUgX0FsbG9jLAogCSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBl bmFtZSBfRXF1YWwsCkBAIC0yMTkwLDggKzIyMTIsMTAgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KIAkgICAgX19ia3QgPSBfTV9idWNrZXRfaW5kZXgoX19jb2RlKTsK IAkgIH0KIAorCV9fbm9fY2FjaGVfYmJlZ2luX3BvbGljeV90IF9fYmJlZ2luX3BvbGljeTsK IAkvLyBJbnNlcnQgdGhlIG5vZGUKLQlhdXRvIF9fcG9zID0gX01faW5zZXJ0X3VuaXF1ZV9u b2RlKF9fYmt0LCBfX2NvZGUsIF9fbm9kZS5fTV9ub2RlKTsKKwlhdXRvIF9fcG9zID0gX01f aW5zZXJ0X3VuaXF1ZV9ub2RlKF9fYmt0LCBfX2NvZGUsIF9fbm9kZS5fTV9ub2RlLAorCQkJ CQkgICBfX2JiZWdpbl9wb2xpY3kpOwogCV9fbm9kZS5fTV9ub2RlID0gbnVsbHB0cjsKIAly ZXR1cm4geyBfX3BvcywgdHJ1ZSB9OwogICAgICAgfQpAQCAtMjIxMyw5ICsyMjM3LDEwIEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKIAljb25zdCBrZXlfdHlwZSYg X19rID0gX0V4dHJhY3RLZXl7fShfX25vZGUuX01fbm9kZS0+X01fdigpKTsKIAlhdXRvIF9f cmVzID0gdGhpcy0+X01fY29tcHV0ZV9oYXNoX2NvZGUoX19oaW50LCBfX2spOworCV9fbm9f Y2FjaGVfYmJlZ2luX3BvbGljeV90IF9fYmJlZ2luX3BvbGljeTsKIAlhdXRvIF9fcG9zCiAJ ICA9IF9NX2luc2VydF9tdWx0aV9ub2RlKF9fcmVzLmZpcnN0Ll9NX2N1ciwgX19yZXMuc2Vj b25kLAotCQkJCSBfX25vZGUuX01fbm9kZSk7CisJCQkJIF9fbm9kZS5fTV9ub2RlLCBfX2Ji ZWdpbl9wb2xpY3kpOwogCV9fbm9kZS5fTV9ub2RlID0gbnVsbHB0cjsKIAlyZXR1cm4gX19w b3M7CiAgICAgICB9CkBAIC0yMjU1LDg2ICsyMjgwLDkzIEBAIF9HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9WRVJTSU9OCiAJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9F cXVhbCwKIAkgICB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JhbmdlSGFzaCwgdHlwZW5h bWUgX1VudXNlZCwKIAkgICB0eXBlbmFtZSBfUmVoYXNoUG9saWN5LCB0eXBlbmFtZSBfVHJh aXRzPgotICAgIGF1dG8KLSAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBf RXh0cmFjdEtleSwgX0VxdWFsLAotCSAgICAgICBfSGFzaCwgX1JhbmdlSGFzaCwgX1VudXNl ZCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgotICAgIF9NX2luc2VydF91bmlxdWVfbm9k ZShzaXplX3R5cGUgX19ia3QsIF9faGFzaF9jb2RlIF9fY29kZSwKLQkJCSAgX19ub2RlX3B0 ciBfX25vZGUsIHNpemVfdHlwZSBfX25fZWx0KQotICAgIC0+IGl0ZXJhdG9yCi0gICAgewot ICAgICAgY29uc3QgX19yZWhhc2hfc3RhdGUmIF9fc2F2ZWRfc3RhdGUgPSBfTV9yZWhhc2hf cG9saWN5Ll9NX3N0YXRlKCk7Ci0gICAgICBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+ IF9fZG9fcmVoYXNoCi0JPSBfTV9yZWhhc2hfcG9saWN5Ll9NX25lZWRfcmVoYXNoKF9NX2J1 Y2tldF9jb3VudCwgX01fZWxlbWVudF9jb3VudCwKLQkJCQkJICBfX25fZWx0KTsKKyAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQkJlZ2luUG9saWN5PgorICAgICAgYXV0bworICAgICAgX0hh c2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwKKwkJ IF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51c2VkLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6 CisgICAgICBfTV9pbnNlcnRfdW5pcXVlX25vZGUoc2l6ZV90eXBlIF9fYmt0LCBfX2hhc2hf Y29kZSBfX2NvZGUsCisJCQkgICAgX19ub2RlX3B0ciBfX25vZGUsCisJCQkgICAgY29uc3Qg X0JCZWdpblBvbGljeSYgX19iYmVnaW5fcG9saWN5LAorCQkJICAgIHNpemVfdHlwZSBfX25f ZWx0KQorICAgICAgLT4gaXRlcmF0b3IKKyAgICAgIHsKKwljb25zdCBfX3JlaGFzaF9zdGF0 ZSYgX19zYXZlZF9zdGF0ZSA9IF9NX3JlaGFzaF9wb2xpY3kuX01fc3RhdGUoKTsKKwlzdGQ6 OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+IF9fZG9fcmVoYXNoCisJICA9IF9NX3JlaGFzaF9w b2xpY3kuX01fbmVlZF9yZWhhc2goX01fYnVja2V0X2NvdW50LAorCQkJCQkgICAgX01fZWxl bWVudF9jb3VudCwKKwkJCQkJICAgIF9fbl9lbHQpOwogCi0gICAgICBpZiAoX19kb19yZWhh c2guZmlyc3QpCi0JewotCSAgX01fcmVoYXNoKF9fZG9fcmVoYXNoLnNlY29uZCwgX19zYXZl ZF9zdGF0ZSk7Ci0JICBfX2JrdCA9IF9NX2J1Y2tldF9pbmRleChfX2NvZGUpOwotCX0KKwlp ZiAoX19kb19yZWhhc2guZmlyc3QpCisJICB7CisJICAgIF9NX3JlaGFzaChfX2RvX3JlaGFz aC5zZWNvbmQsIF9fc2F2ZWRfc3RhdGUpOworCSAgICBfX2JrdCA9IF9NX2J1Y2tldF9pbmRl eChfX2NvZGUpOworCSAgfQogCi0gICAgICB0aGlzLT5fTV9zdG9yZV9jb2RlKCpfX25vZGUs IF9fY29kZSk7CisJdGhpcy0+X01fc3RvcmVfY29kZSgqX19ub2RlLCBfX2NvZGUpOwogCi0g ICAgICAvLyBBbHdheXMgaW5zZXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1Y2tldC4K LSAgICAgIF9NX2luc2VydF9idWNrZXRfYmVnaW4oX19ia3QsIF9fbm9kZSk7Ci0gICAgICAr K19NX2VsZW1lbnRfY291bnQ7Ci0gICAgICByZXR1cm4gaXRlcmF0b3IoX19ub2RlKTsKLSAg ICB9CisJLy8gQWx3YXlzIGluc2VydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWNrZXQu CisJX01faW5zZXJ0X2J1Y2tldF9iZWdpbihfX2JrdCwgX19ub2RlLCBfX2JiZWdpbl9wb2xp Y3kpOworCSsrX01fZWxlbWVudF9jb3VudDsKKwlyZXR1cm4gaXRlcmF0b3IoX19ub2RlKTsK KyAgICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUs IHR5cGVuYW1lIF9BbGxvYywKIAkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUg X0VxdWFsLAogCSAgIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmFuZ2VIYXNoLCB0eXBl bmFtZSBfVW51c2VkLAogCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9U cmFpdHM+Ci0gICAgYXV0bwotICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2Ms IF9FeHRyYWN0S2V5LCBfRXF1YWwsCi0JICAgICAgIF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51 c2VkLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRzPjo6Ci0gICAgX01faW5zZXJ0X211bHRpX25v ZGUoX19ub2RlX3B0ciBfX2hpbnQsCi0JCQkgX19oYXNoX2NvZGUgX19jb2RlLCBfX25vZGVf cHRyIF9fbm9kZSkKLSAgICAtPiBpdGVyYXRvcgotICAgIHsKLSAgICAgIGNvbnN0IF9fcmVo YXNoX3N0YXRlJiBfX3NhdmVkX3N0YXRlID0gX01fcmVoYXNoX3BvbGljeS5fTV9zdGF0ZSgp OwotICAgICAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6ZV90PiBfX2RvX3JlaGFzaAotCT0g X01fcmVoYXNoX3BvbGljeS5fTV9uZWVkX3JlaGFzaChfTV9idWNrZXRfY291bnQsIF9NX2Vs ZW1lbnRfY291bnQsIDEpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CQmVnaW5Qb2xpY3k+ CisgICAgICBhdXRvCisgICAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBf RXh0cmFjdEtleSwgX0VxdWFsLAorCQkgX0hhc2gsIF9SYW5nZUhhc2gsIF9VbnVzZWQsIF9S ZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKKyAgICAgIF9NX2luc2VydF9tdWx0aV9ub2RlKF9f bm9kZV9wdHIgX19oaW50LAorCQkJICAgX19oYXNoX2NvZGUgX19jb2RlLCBfX25vZGVfcHRy IF9fbm9kZSwKKwkJCSAgIGNvbnN0IF9CQmVnaW5Qb2xpY3kmIF9fYmJlZ2luX3BvbGljeSkK KyAgICAgIC0+IGl0ZXJhdG9yCisgICAgICB7CisJY29uc3QgX19yZWhhc2hfc3RhdGUmIF9f c2F2ZWRfc3RhdGUgPSBfTV9yZWhhc2hfcG9saWN5Ll9NX3N0YXRlKCk7CisJc3RkOjpwYWly PGJvb2wsIHN0ZDo6c2l6ZV90PiBfX2RvX3JlaGFzaAorCSAgPSBfTV9yZWhhc2hfcG9saWN5 Ll9NX25lZWRfcmVoYXNoKF9NX2J1Y2tldF9jb3VudCwKKwkJCQkJICAgIF9NX2VsZW1lbnRf Y291bnQsIDEpOwogCi0gICAgICBpZiAoX19kb19yZWhhc2guZmlyc3QpCi0JX01fcmVoYXNo KF9fZG9fcmVoYXNoLnNlY29uZCwgX19zYXZlZF9zdGF0ZSk7CisJaWYgKF9fZG9fcmVoYXNo LmZpcnN0KQorCSAgX01fcmVoYXNoKF9fZG9fcmVoYXNoLnNlY29uZCwgX19zYXZlZF9zdGF0 ZSk7CiAKLSAgICAgIHRoaXMtPl9NX3N0b3JlX2NvZGUoKl9fbm9kZSwgX19jb2RlKTsKLSAg ICAgIGNvbnN0IGtleV90eXBlJiBfX2sgPSBfRXh0cmFjdEtleXt9KF9fbm9kZS0+X01fdigp KTsKLSAgICAgIHNpemVfdHlwZSBfX2JrdCA9IF9NX2J1Y2tldF9pbmRleChfX2NvZGUpOwor CXRoaXMtPl9NX3N0b3JlX2NvZGUoKl9fbm9kZSwgX19jb2RlKTsKKwljb25zdCBrZXlfdHlw ZSYgX19rID0gX0V4dHJhY3RLZXl7fShfX25vZGUtPl9NX3YoKSk7CisJc2l6ZV90eXBlIF9f Ymt0ID0gX01fYnVja2V0X2luZGV4KF9fY29kZSk7CiAKLSAgICAgIC8vIEZpbmQgdGhlIG5v ZGUgYmVmb3JlIGFuIGVxdWl2YWxlbnQgb25lIG9yIHVzZSBoaW50IGlmIGl0IGV4aXN0cyBh bmQKLSAgICAgIC8vIGlmIGl0IGlzIGVxdWl2YWxlbnQuCi0gICAgICBfX25vZGVfYmFzZV9w dHIgX19wcmV2Ci0JPSBfX2J1aWx0aW5fZXhwZWN0KF9faGludCAhPSBudWxscHRyICYmCi0J CQkgICB0aGlzLT5fTV9lcXVhbHMoX19rLCBfX2NvZGUsICpfX2hpbnQpLCBmYWxzZSkKLQk/ IF9faGludAotCTogX01fZmluZF9iZWZvcmVfbm9kZShfX2JrdCwgX19rLCBfX2NvZGUpOwor CS8vIEZpbmQgdGhlIG5vZGUgYmVmb3JlIGFuIGVxdWl2YWxlbnQgb25lIG9yIHVzZSBoaW50 IGlmIGl0IGV4aXN0cyBhbmQKKwkvLyBpZiBpdCBpcyBlcXVpdmFsZW50LgorCV9fbm9kZV9i YXNlX3B0ciBfX3ByZXYKKwkgID0gX19idWlsdGluX2V4cGVjdChfX2hpbnQgIT0gbnVsbHB0 ciAmJgorCQkJICAgICB0aGlzLT5fTV9lcXVhbHMoX19rLCBfX2NvZGUsICpfX2hpbnQpLCBm YWxzZSkKKwkgID8gX19oaW50CisJICA6IF9NX2ZpbmRfYmVmb3JlX25vZGUoX19ia3QsIF9f aywgX19jb2RlKTsKIAotICAgICAgaWYgKF9fcHJldikKLQl7Ci0JICAvLyBJbnNlcnQgYWZ0 ZXIgdGhlIG5vZGUgYmVmb3JlIHRoZSBlcXVpdmFsZW50IG9uZS4KLQkgIF9fbm9kZS0+X01f bnh0ID0gX19wcmV2LT5fTV9ueHQ7Ci0JICBfX3ByZXYtPl9NX254dCA9IF9fbm9kZTsKLQkg IGlmIChfX3ByZXYgPT0gX19oaW50KSBbW19fdW5saWtlbHlfX11dCi0JICAgIC8vIGhpbnQg bWlnaHQgYmUgdGhlIGxhc3QgYnVja2V0IG5vZGUsIGluIHRoaXMgY2FzZSB3ZSBuZWVkIHRv Ci0JICAgIC8vIHVwZGF0ZSBuZXh0IGJ1Y2tldC4KLQkgICAgaWYgKF9fbm9kZS0+X01fbnh0 Ci0JCSYmICF0aGlzLT5fTV9lcXVhbHMoX19rLCBfX2NvZGUsICpfX25vZGUtPl9NX25leHQo KSkpCi0JICAgICAgewotCQlzaXplX3R5cGUgX19uZXh0X2JrdCA9IF9NX2J1Y2tldF9pbmRl eCgqX19ub2RlLT5fTV9uZXh0KCkpOwotCQlpZiAoX19uZXh0X2JrdCAhPSBfX2JrdCkKLQkJ ICBfTV9idWNrZXRzW19fbmV4dF9ia3RdID0gX19ub2RlOwotCSAgICAgIH0KLQl9Ci0gICAg ICBlbHNlCi0JLy8gVGhlIGluc2VydGVkIG5vZGUgaGFzIG5vIGVxdWl2YWxlbnQgaW4gdGhl IGhhc2h0YWJsZS4gV2UgbXVzdAotCS8vIGluc2VydCB0aGUgbmV3IG5vZGUgYXQgdGhlIGJl Z2lubmluZyBvZiB0aGUgYnVja2V0IHRvIHByZXNlcnZlCi0JLy8gZXF1aXZhbGVudCBlbGVt ZW50cycgcmVsYXRpdmUgcG9zaXRpb25zLgotCV9NX2luc2VydF9idWNrZXRfYmVnaW4oX19i a3QsIF9fbm9kZSk7Ci0gICAgICArK19NX2VsZW1lbnRfY291bnQ7Ci0gICAgICByZXR1cm4g aXRlcmF0b3IoX19ub2RlKTsKLSAgICB9CisJaWYgKF9fcHJldikKKwkgIHsKKwkgICAgLy8g SW5zZXJ0IGFmdGVyIHRoZSBub2RlIGJlZm9yZSB0aGUgZXF1aXZhbGVudCBvbmUuCisJICAg IF9fbm9kZS0+X01fbnh0ID0gX19wcmV2LT5fTV9ueHQ7CisJICAgIF9fcHJldi0+X01fbnh0 ID0gX19ub2RlOworCSAgICBpZiAoX19wcmV2ID09IF9faGludCkgW1tfX3VubGlrZWx5X19d XQorCSAgICAgIC8vIGhpbnQgbWlnaHQgYmUgdGhlIGxhc3QgYnVja2V0IG5vZGUsIGluIHRo aXMgY2FzZSB3ZSBuZWVkIHRvCisJICAgICAgLy8gdXBkYXRlIG5leHQgYnVja2V0LgorCSAg ICAgIGlmIChfX25vZGUtPl9NX254dAorCQkgICYmICF0aGlzLT5fTV9lcXVhbHMoX19rLCBf X2NvZGUsICpfX25vZGUtPl9NX25leHQoKSkpCisJCXsKKwkJICBzaXplX3R5cGUgX19uZXh0 X2JrdCA9IF9NX2J1Y2tldF9pbmRleCgqX19ub2RlLT5fTV9uZXh0KCkpOworCQkgIGlmIChf X25leHRfYmt0ICE9IF9fYmt0KQorCQkgICAgX01fYnVja2V0c1tfX25leHRfYmt0XSA9IF9f bm9kZTsKKwkJfQorCSAgfQorCWVsc2UKKwkgIC8vIFRoZSBpbnNlcnRlZCBub2RlIGhhcyBu byBlcXVpdmFsZW50IGluIHRoZSBoYXNodGFibGUuIFdlIG11c3QKKwkgIC8vIGluc2VydCB0 aGUgbmV3IG5vZGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVja2V0IHRvIHByZXNlcnZl CisJICAvLyBlcXVpdmFsZW50IGVsZW1lbnRzJyByZWxhdGl2ZSBwb3NpdGlvbnMuCisJICBf TV9pbnNlcnRfYnVja2V0X2JlZ2luKF9fYmt0LCBfX25vZGUsIF9fYmJlZ2luX3BvbGljeSk7 CisJKytfTV9lbGVtZW50X2NvdW50OworCXJldHVybiBpdGVyYXRvcihfX25vZGUpOworICAg ICAgfQogCiAgIC8vIEluc2VydCB2IGlmIG5vIGVsZW1lbnQgd2l0aCBpdHMga2V5IGlzIGFs cmVhZHkgcHJlc2VudC4KICAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1Zh bHVlLCB0eXBlbmFtZSBfQWxsb2MsCkBAIC0yMzc0LDggKzI0MDYsOCBAQCBfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAgdGhpcwogCX07CiAKLQlhdXRvIF9fcG9zCi0J ICA9IF9NX2luc2VydF91bmlxdWVfbm9kZShfX2JrdCwgX19jb2RlLCBfX25vZGUuX01fbm9k ZSk7CisJYXV0byBfX3BvcyA9IF9NX2luc2VydF91bmlxdWVfbm9kZShfX2JrdCwgX19jb2Rl LCBfX25vZGUuX01fbm9kZSwKKwkJCQkJICAgX19ub2RlX2dlbik7CiAJX19ub2RlLl9NX25v ZGUgPSBudWxscHRyOwogCXJldHVybiB7IF9fcG9zLCB0cnVlIH07CiAgICAgICB9CkBAIC0y NDAzLDcgKzI0MzUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAg X19oaW50LCBfRXh0cmFjdEtleXt9KF9fbm9kZS5fTV9ub2RlLT5fTV92KCkpKTsKIAlhdXRv IF9fcG9zCiAJICA9IF9NX2luc2VydF9tdWx0aV9ub2RlKF9fcmVzLmZpcnN0Ll9NX2N1ciwg X19yZXMuc2Vjb25kLAotCQkJCSBfX25vZGUuX01fbm9kZSk7CisJCQkJIF9fbm9kZS5fTV9u b2RlLCBfX25vZGVfZ2VuKTsKIAlfX25vZGUuX01fbm9kZSA9IG51bGxwdHI7CiAJcmV0dXJu IF9fcG9zOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0 cy9oYXNodGFibGVfcG9saWN5LmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0 YWJsZV9wb2xpY3kuaAppbmRleCAxMzlkMGVjMjdkZi4uZmYyMDZhNmVkMjAgMTAwNjQ0Ci0t LSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlX3BvbGljeS5oCisrKyBi L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlX3BvbGljeS5oCkBAIC0xNzYs MTMgKzE3Niw0NyBAQCBuYW1lc3BhY2UgX19kZXRhaWwKIAl7IHJldHVybiBfX25vZGVfZ2Vu KF9faGludCwgc3RkOjpmb3J3YXJkPF9LdD4oX19rKSk7IH0KICAgICB9OwogCisgIHN0cnVj dCBfQ2FjaGVCQmVnaW5Qb2xpY3kKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9IdCwg dHlwZW5hbWUgX05vZGVQdHI+CisgICAgICBzdGQ6OnNpemVfdAorICAgICAgX01fZ2V0X2Ji ZWdpbl9ia3QoY29uc3QgX0h0JiBfX2h0LCBfTm9kZVB0ciBfX24pIGNvbnN0CisgICAgICB7 CisJaWYgKCFfTV9pbml0aWFsaXplZCkKKwkgIHJldHVybiBfX2h0Ll9NX2J1Y2tldF9pbmRl eCgqX19uKTsKKwlyZXR1cm4gX01fYmJlZ2luX2luZGV4OworICAgICAgfQorCisgICAgdm9p ZAorICAgIF9NX3N0b3JlX2JiZWdpbl9ia3Qoc3RkOjpzaXplX3QgX19ia3QpIGNvbnN0Cisg ICAgeworICAgICAgX01fYmJlZ2luX2luZGV4ID0gX19ia3Q7CisgICAgICBfTV9pbml0aWFs aXplZCA9IHRydWU7CisgICAgfQorCisgICAgbXV0YWJsZSBib29sIF9NX2luaXRpYWxpemVk ID0gZmFsc2U7CisgICAgbXV0YWJsZSBzdGQ6OnNpemVfdCBfTV9iYmVnaW5faW5kZXg7Cisg IH07CisKKyAgc3RydWN0IF9Ob0NhY2hlQkJlZ2luUG9saWN5CisgIHsKKyAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9IdCwgdHlwZW5hbWUgX05vZGVQdHI+CisJc3RkOjpzaXplX3QKKwlf TV9nZXRfYmJlZ2luX2JrdChjb25zdCBfSHQmIF9faHQsIF9Ob2RlUHRyIF9fbikgY29uc3QK Kwl7IHJldHVybiBfX2h0Ll9NX2J1Y2tldF9pbmRleCgqX19uKTsgfQorCisgICAgdm9pZAor ICAgIF9NX3N0b3JlX2JiZWdpbl9ia3Qoc3RkOjpzaXplX3QpIGNvbnN0CisgICAgeyB9Cisg IH07CisKICAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGVBbGxvYz4KICAgICBzdHJ1Y3QgX0hh c2h0YWJsZV9hbGxvYzsKIAogICAvLyBGdW5jdG9yIHJlY3ljbGluZyBhIHBvb2wgb2Ygbm9k ZXMgYW5kIHVzaW5nIGFsbG9jYXRpb24gb25jZSB0aGUgcG9vbCBpcwogICAvLyBlbXB0eS4K ICAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGVBbGxvYz4KLSAgICBzdHJ1Y3QgX1JldXNlT3JB bGxvY05vZGUKKyAgICBzdHJ1Y3QgX1JldXNlT3JBbGxvY05vZGUgOiBfQ2FjaGVCQmVnaW5Q b2xpY3kKICAgICB7CiAgICAgcHJpdmF0ZToKICAgICAgIHVzaW5nIF9fbm9kZV9hbGxvY190 eXBlID0gX05vZGVBbGxvYzsKQEAgLTIzNiw4ICsyNzAsOCBAQCBuYW1lc3BhY2UgX19kZXRh aWwKIAogICAvLyBGdW5jdG9yIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIG9uZSBidXQgd2l0 aG91dCBhbnkgcG9vbCBvZiBub2RlcyB0bwogICAvLyByZWN5Y2xlLgotICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfTm9kZUFsbG9jPgotICAgIHN0cnVjdCBfQWxsb2NOb2RlCisgIHRlbXBsYXRl PHR5cGVuYW1lIF9Ob2RlQWxsb2MsIHR5cGVuYW1lIF9CQmVnaW5Qb2xpY3k+CisgICAgc3Ry dWN0IF9BbGxvY05vZGUgOiBfQkJlZ2luUG9saWN5CiAgICAgewogICAgIHByaXZhdGU6CiAg ICAgICB1c2luZyBfX2hhc2h0YWJsZV9hbGxvYyA9IF9IYXNodGFibGVfYWxsb2M8X05vZGVB bGxvYz47CkBAIC04MjQsOCArODU4LDEwIEBAIG5hbWVzcGFjZSBfX2RldGFpbAogCXN0ZDo6 dHVwbGU8Y29uc3Qga2V5X3R5cGUmPihfX2spLAogCXN0ZDo6dHVwbGU8PigpCiAgICAgICB9 OworICAgICAgX05vQ2FjaGVCQmVnaW5Qb2xpY3kgX19iYmVnaW5fcG9saWN5OwogICAgICAg YXV0byBfX3BvcwotCT0gX19oLT5fTV9pbnNlcnRfdW5pcXVlX25vZGUoX19ia3QsIF9fY29k ZSwgX19ub2RlLl9NX25vZGUpOworCT0gX19oLT5fTV9pbnNlcnRfdW5pcXVlX25vZGUoX19i a3QsIF9fY29kZSwgX19ub2RlLl9NX25vZGUsCisJCQkJICAgICBfX2JiZWdpbl9wb2xpY3kp OwogICAgICAgX19ub2RlLl9NX25vZGUgPSBudWxscHRyOwogICAgICAgcmV0dXJuIF9fcG9z LT5zZWNvbmQ7CiAgICAgfQpAQCAtODUyLDggKzg4OCwxMCBAQCBuYW1lc3BhY2UgX19kZXRh aWwKIAlzdGQ6OmZvcndhcmRfYXNfdHVwbGUoc3RkOjptb3ZlKF9faykpLAogCXN0ZDo6dHVw bGU8PigpCiAgICAgICB9OworICAgICAgX05vQ2FjaGVCQmVnaW5Qb2xpY3kgX19iYmVnaW5f cG9saWN5OwogICAgICAgYXV0byBfX3BvcwotCT0gX19oLT5fTV9pbnNlcnRfdW5pcXVlX25v ZGUoX19ia3QsIF9fY29kZSwgX19ub2RlLl9NX25vZGUpOworCT0gX19oLT5fTV9pbnNlcnRf dW5pcXVlX25vZGUoX19ia3QsIF9fY29kZSwgX19ub2RlLl9NX25vZGUsCisJCQkJICAgICBf X2JiZWdpbl9wb2xpY3kpOwogICAgICAgX19ub2RlLl9NX25vZGUgPSBudWxscHRyOwogICAg ICAgcmV0dXJuIF9fcG9zLT5zZWNvbmQ7CiAgICAgfQpAQCAtOTAxLDcgKzkzOSw4IEBAIG5h bWVzcGFjZSBfX2RldGFpbAogCiAgICAgICB1c2luZyBfX3VuaXF1ZV9rZXlzID0gdHlwZW5h bWUgX1RyYWl0czo6X191bmlxdWVfa2V5czsKICAgICAgIHVzaW5nIF9fbm9kZV9hbGxvY190 eXBlID0gdHlwZW5hbWUgX19oYXNodGFibGVfYWxsb2M6Ol9fbm9kZV9hbGxvY190eXBlOwot ICAgICAgdXNpbmcgX19ub2RlX2dlbl90eXBlID0gX0FsbG9jTm9kZTxfX25vZGVfYWxsb2Nf dHlwZT47CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkJlZ2luUG9saWN5PgorCXVzaW5n IF9fYWxsb2Nfbm9kZV9nZW5fdCA9IF9BbGxvY05vZGU8X19ub2RlX2FsbG9jX3R5cGUsIF9C QmVnaW5Qb2xpY3k+OwogCiAgICAgICBfX2hhc2h0YWJsZSYKICAgICAgIF9NX2Nvbmp1cmVf aGFzaHRhYmxlKCkKQEAgLTkzMyw3ICs5NzIsNyBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAg ICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3YpCiAgICAgICB7CiAJX19oYXNodGFi bGUmIF9faCA9IF9NX2Nvbmp1cmVfaGFzaHRhYmxlKCk7Ci0JX19ub2RlX2dlbl90eXBlIF9f bm9kZV9nZW4oX19oKTsKKwlfX2FsbG9jX25vZGVfZ2VuX3Q8X05vQ2FjaGVCQmVnaW5Qb2xp Y3k+IF9fbm9kZV9nZW4oX19oKTsKIAlyZXR1cm4gX19oLl9NX2luc2VydChfX3YsIF9fbm9k ZV9nZW4sIF9fdW5pcXVlX2tleXN7fSk7CiAgICAgICB9CiAKQEAgLTk0MSw3ICs5ODAsNyBA QCBuYW1lc3BhY2UgX19kZXRhaWwKICAgICAgIGluc2VydChjb25zdF9pdGVyYXRvciBfX2hp bnQsIGNvbnN0IHZhbHVlX3R5cGUmIF9fdikKICAgICAgIHsKIAlfX2hhc2h0YWJsZSYgX19o ID0gX01fY29uanVyZV9oYXNodGFibGUoKTsKLQlfX25vZGVfZ2VuX3R5cGUgX19ub2RlX2dl bihfX2gpOwkKKwlfX2FsbG9jX25vZGVfZ2VuX3Q8X05vQ2FjaGVCQmVnaW5Qb2xpY3k+IF9f bm9kZV9nZW4oX19oKTsKIAlyZXR1cm4gX19oLl9NX2luc2VydChfX2hpbnQsIF9fdiwgX19u b2RlX2dlbiwgX191bmlxdWVfa2V5c3t9KTsKICAgICAgIH0KIApAQCAtOTYxLDggKzEwMDAs MTAgQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAJICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShz dGQ6OmZvcndhcmQ8X0tUeXBlPihfX2spKSwKIAkgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxl KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLikKIAkgICAgfTsKKwkgIF9Ob0NhY2hl QkJlZ2luUG9saWN5IF9fYmJlZ2luX3BvbGljeTsKIAkgIGF1dG8gX19pdAotCSAgICA9IF9f aC5fTV9pbnNlcnRfdW5pcXVlX25vZGUoX19ia3QsIF9fY29kZSwgX19ub2RlLl9NX25vZGUp OworCSAgICA9IF9faC5fTV9pbnNlcnRfdW5pcXVlX25vZGUoX19ia3QsIF9fY29kZSwgX19u b2RlLl9NX25vZGUsCisJCQkJCV9fYmJlZ2luX3BvbGljeSk7CiAJICBfX25vZGUuX01fbm9k ZSA9IG51bGxwdHI7CiAJICByZXR1cm4geyBfX2l0LCB0cnVlIH07CiAJfQpAQCAtOTg1LDcg KzEwMjYsNyBAQCBuYW1lc3BhY2UgX19kZXRhaWwKIAlpbnNlcnQoX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogCXsKIAkgIF9faGFzaHRhYmxlJiBf X2ggPSBfTV9jb25qdXJlX2hhc2h0YWJsZSgpOwotCSAgX19ub2RlX2dlbl90eXBlIF9fbm9k ZV9nZW4oX19oKTsKKwkgIF9fYWxsb2Nfbm9kZV9nZW5fdDxfQ2FjaGVCQmVnaW5Qb2xpY3k+ IF9fbm9kZV9nZW4oX19oKTsKIAkgIHJldHVybiBfTV9pbnNlcnRfcmFuZ2UoX19maXJzdCwg X19sYXN0LCBfX25vZGVfZ2VuLCBfX3VuaXF1ZV9rZXlze30pOwogCX0KICAgICB9OwpAQCAt MTA3NiwxNSArMTExNywxNSBAQCBuYW1lc3BhY2UgX19kZXRhaWwKIAogICAgICAgdXNpbmcg X191bmlxdWVfa2V5cyA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjpfX3VuaXF1ZV9rZXlzOwog ICAgICAgdXNpbmcgX19oYXNodGFibGUgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19oYXNo dGFibGU7Ci0gICAgICB1c2luZyBfX25vZGVfZ2VuX3R5cGUgPSB0eXBlbmFtZSBfX2Jhc2Vf dHlwZTo6X19ub2RlX2dlbl90eXBlOwotCisgICAgICB1c2luZyBfX2FsbG9jX25vZGVfZ2Vu X3QKKwk9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjpfX2FsbG9jX25vZGVfZ2VuX3Q8X05vQ2Fj aGVCQmVnaW5Qb2xpY3k+OwogICAgICAgdXNpbmcgX19iYXNlX3R5cGU6Omluc2VydDsKIAog ICAgICAgX19pcmV0dXJuX3R5cGUKICAgICAgIGluc2VydCh2YWx1ZV90eXBlJiYgX192KQog ICAgICAgewogCV9faGFzaHRhYmxlJiBfX2ggPSB0aGlzLT5fTV9jb25qdXJlX2hhc2h0YWJs ZSgpOwotCV9fbm9kZV9nZW5fdHlwZSBfX25vZGVfZ2VuKF9faCk7CisJX19hbGxvY19ub2Rl X2dlbl90IF9fbm9kZV9nZW4oX19oKTsKIAlyZXR1cm4gX19oLl9NX2luc2VydChzdGQ6Om1v dmUoX192KSwgX19ub2RlX2dlbiwgX191bmlxdWVfa2V5c3t9KTsKICAgICAgIH0KIApAQCAt MTA5Miw3ICsxMTMzLDcgQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAgICAgICBpbnNlcnQoY29u c3RfaXRlcmF0b3IgX19oaW50LCB2YWx1ZV90eXBlJiYgX192KQogICAgICAgewogCV9faGFz aHRhYmxlJiBfX2ggPSB0aGlzLT5fTV9jb25qdXJlX2hhc2h0YWJsZSgpOwotCV9fbm9kZV9n ZW5fdHlwZSBfX25vZGVfZ2VuKF9faCk7CisJX19hbGxvY19ub2RlX2dlbl90IF9fbm9kZV9n ZW4oX19oKTsKIAlyZXR1cm4gX19oLl9NX2luc2VydChfX2hpbnQsIHN0ZDo6bW92ZShfX3Yp LCBfX25vZGVfZ2VuLAogCQkJICAgICBfX3VuaXF1ZV9rZXlze30pOwogICAgICAgfQo= --------------OZVGDUaYZg0if1Sz3RXN2P06--