From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 043843858023 for ; Thu, 7 Oct 2021 17:05:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 043843858023 Received: from mail-ua1-f69.google.com (mail-ua1-f69.google.com [209.85.222.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-87-flOCnbJyMEifQDaWtKdjSA-1; Thu, 07 Oct 2021 13:05:12 -0400 X-MC-Unique: flOCnbJyMEifQDaWtKdjSA-1 Received: by mail-ua1-f69.google.com with SMTP id n42-20020ab0592d000000b002b5c159f71bso3284400uad.11 for ; Thu, 07 Oct 2021 10:05:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=FLLUoF+0Pm1g0XqvZoTC7lPERmx8al6+8fTbcQN9vqY=; b=PGaRhvYaOWJpWJS+PmQPfwdiE47V9qi/geAniifyuNiikmlnAVDzAaAPnMlK0XbxZy Lv7tYwSoTIfLdpoLfMphx9W3QyGU+ekQQJqa4i1U+SSQSDMXl9LahzjyvYr4IhInUzVc 3TzN9UsxVhFJ6aAPS3xI1SHAH2V1oNRpVXWAs3TgTrgcXj+n2u/ZUT2htFkMnhL2F0rv Cg2SZWrbUHdPI4hezFVNq2tR2hFeb0PWeDEIppKQ+LJJB8ZjSED9iNHvAmg5D++BtSvs qO9+LE0F1cjcYHhwtl0x/MxRKLNjsTXh2Oh1eNNf0CNqc8ozzEQMYUXSKR8WTZcOf+Gl DYyA== X-Gm-Message-State: AOAM531MwQlQPPTKRYtfcjWMxsXL3OdgaasqQ2yijI/1UAf1IrTW8uAa hGG1jq10s0lR4TDYuMWMmUcjwhe7tsMTC3b60IDnN3cd0C45HgCSdkwqxhwJhpod0PG8a2y3+Nf KIojG8UEsWTtATSDJAij9rvLtUKGSpEs= X-Received: by 2002:a67:fe4f:: with SMTP id m15mr5604457vsr.2.1633626312226; Thu, 07 Oct 2021 10:05:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx7aXEqTaoke/upQOWohXQcX1JLDbqxOnrJMOsApv3HLH3KGNR7eBagioHHAdao6zv/mqBP8UimjdSGwm+dllU= X-Received: by 2002:a67:fe4f:: with SMTP id m15mr5604307vsr.2.1633626311028; Thu, 07 Oct 2021 10:05:11 -0700 (PDT) MIME-Version: 1.0 References: <237efbd9-abd4-47e9-0af9-dace431d5da7@gmail.com> In-Reply-To: From: Jonathan Wakely Date: Thu, 7 Oct 2021 18:05:00 +0100 Message-ID: Subject: [committed] libstdc++: Avoid debug checks in uniform container erasure functions To: Jonathan Wakely Cc: =?UTF-8?Q?Fran=C3=A7ois_Dumont?= , "libstdc++" X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000f7352c05cdc643d0" X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Thu, 07 Oct 2021 17:05:16 -0000 --000000000000f7352c05cdc643d0 Content-Type: text/plain; charset="UTF-8" On Thu, 7 Oct 2021 at 15:02, Jonathan Wakely wrote: > > The solution is simple: > > erase_if(set<_Key, _Compare, _Alloc>& __cont, _Predicate __pred) > - { return __detail::__erase_nodes_if(__cont, __pred); } > + { > + _GLIBCXX_STD_C::set<_Key, _Compare, _Alloc>& __c = __cont; > + return __detail::__erase_nodes_if(__c, __pred); > + } > > > i.e. just bind a reference to the non-debug container type. For > non-debug mode, that is a no-op. For debug mode it binds to the base, > and the rest of the function works directly on the base, without safe > iterators. > > I'm testing the patch now. Tested on powerpc64le-linux and pushed to trunk now. --000000000000f7352c05cdc643d0 Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kuh6wunq0 Y29tbWl0IDU2MTA3ODQ4MGZmYjVhZGI2ODU3NzI3NmM2YjIzZTRlZTdiMzkyNzIKQXV0aG9yOiBK b25hdGhhbiBXYWtlbHkgPGp3YWtlbHlAcmVkaGF0LmNvbT4KRGF0ZTogICBUaHUgT2N0IDcgMTQ6 NDA6MjYgMjAyMQoKICAgIGxpYnN0ZGMrKzogQXZvaWQgZGVidWcgY2hlY2tzIGluIHVuaWZvcm0g Y29udGFpbmVyIGVyYXN1cmUgZnVuY3Rpb25zCiAgICAKICAgIEluIGNvbW1pdCByMTItNDA4MyBJ IHRyaWVkIHRvIG1ha2UgdGhlIHN0ZDo6ZXJhc2UgYW5kIHN0ZDo6ZXJhc2VfaWYKICAgIGZ1bmN0 aW9uIGF2b2lkIHRoZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZCBvZiBzYWZlIGl0ZXJhdG9ycy4gSXQg ZGlkbid0CiAgICB3b3JrLCBmb3IgdHdvIHJlYXNvbnMuIEZpcnN0bHksIGZvciB0aGUgUkIgdHJl ZSBjb250YWluZXJzIHRoZQogICAgX19uaXRlcl9iYXNlIGZ1bmN0aW9uIGlzIGEgbm8tb3AgKGJl Y2F1c2UgdGhlIGl0ZXJhdG9ycyBhcmVuJ3QKICAgIHJhbmRvbSBhY2Nlc3MpIHNvIHRoZSBzYWZl IGl0ZXJhdG9ycyB3ZXJlIHN0aWxsIHVzZWQuIFNlY29uZGx5LCBmb3IgdGhlCiAgICBjYXNlcyB3 aGVyZSBfX25pdGVyX2Jhc2UgZGlkIHJlbW92ZSB0aGUgc2FmZSBpdGVyYXRvciBsYXllciwgdGhl cmUgd2FzCiAgICBzdGlsbCB1bm5lY2Vzc2FyeSBvdmVyaGVhZCB0byBjcmVhdGUgYSBuZXcgc2Fm ZSBpdGVyYXRvciBhbmQgbGluayBpdCB0bwogICAgdGhlIGNvbnRhaW5lci4KICAgIAogICAgVGhp cyBzb2x2ZXMgdGhlIHByb2JsZW0gYnkgc2ltcGx5IGJpbmRpbmcgYSByZWZlcmVuY2UgdG8gdGhl IG5vbi1kZWJ1ZwogICAgdmVyc2lvbiBvZiB0aGUgY29uYWluZXIuIEZvciBub3JtYWwgbW9kZSB0 aGlzIGlzIGEgbm8tb3AsIGFuZCBmb3IgZGVidWcKICAgIG1vZGUgaXQgYmluZHMgYSByZWZlcmVu Y2UgdG8gdGhlIGRlYnVnIGNvbnRhaW5lcidzIGJhc2UgY2xhc3MuIFRoYXQKICAgIG1lYW5zIHRo ZSByZXN0IG9mIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBkaXJlY3RseSBvbiB0aGUgbm9uLWRlYnVn CiAgICBjb250YWluZXIsIGFuZCBhdm9pZHMgYWxsIGNoZWNraW5nLgogICAgCiAgICBGb3Igc3Rk OjpiYXNpY19zdHJpbmcgdGhlcmUncyBubyBuZWVkIHRvIHVud3JhcCBhbnl0aGluZywgYmVjYXVz ZSB3ZSB1c2UKICAgIHN0ZDo6YmFzaWNfc3RyaW5nIGRpcmVjdGx5IGluIGRlYnVnIG1vZGUgYW55 d2F5LgogICAgCiAgICBsaWJzdGRjKystdjMvQ2hhbmdlTG9nOgogICAgCiAgICAgICAgICAgICog aW5jbHVkZS9iaXRzL2VyYXNlX2lmLmggKF9fZXJhc2Vfbm9kZXNfaWYpOiBSZW1vdmUgcmVkdW5k YW50CiAgICAgICAgICAgIF9fbml0ZXJfYmFzZSBjYWxscy4KICAgICAgICAgICAgKiBpbmNsdWRl L3N0ZC9zdHJpbmcgKGVyYXNlLCBlcmFzZV9pZik6IExpa2V3aXNlLgogICAgICAgICAgICAqIGlu Y2x1ZGUvc3RkL2RlcXVlIChlcmFzZSwgZXJhc2VfaWYpOiBBY2Nlc3Mgbm9uLWRlYnVnCiAgICAg ICAgICAgIGNvbnRhaW5lciBkaXJlY3RseS4KICAgICAgICAgICAgKiBpbmNsdWRlL3N0ZC9tYXAg KGVyYXNlLCBlcmFzZV9pZik6IExpa2V3aXNlLgogICAgICAgICAgICAqIGluY2x1ZGUvc3RkL3Nl dCAoZXJhc2UsIGVyYXNlX2lmKTogTGlrZXdpc2UuCiAgICAgICAgICAgICogaW5jbHVkZS9zdGQv dW5vcmRlcmVkX21hcCAoZXJhc2UsIGVyYXNlX2lmKTogTGlrZXdpc2UuCiAgICAgICAgICAgICog aW5jbHVkZS9zdGQvdW5vcmRlcmVkX3NldCAoZXJhc2UsIGVyYXNlX2lmKTogTGlrZXdpc2UuCiAg ICAgICAgICAgICogaW5jbHVkZS9zdGQvdmVjdG9yIChlcmFzZSwgZXJhc2VfaWYpOiBMaWtld2lz ZS4KICAgICAgICAgICAgKiBpbmNsdWRlL2V4cGVyaW1lbnRhbC9kZXF1ZSAoZXJhc2UsIGVyYXNl X2lmKTogTGlrZXdpc2UuCiAgICAgICAgICAgICogaW5jbHVkZS9leHBlcmltZW50YWwvbWFwIChl cmFzZSwgZXJhc2VfaWYpOiBMaWtld2lzZS4KICAgICAgICAgICAgKiBpbmNsdWRlL2V4cGVyaW1l bnRhbC9zZXQgKGVyYXNlLCBlcmFzZV9pZik6IExpa2V3aXNlLgogICAgICAgICAgICAqIGluY2x1 ZGUvZXhwZXJpbWVudGFsL3Vub3JkZXJlZF9tYXAgKGVyYXNlLCBlcmFzZV9pZik6CiAgICAgICAg ICAgIExpa2V3aXNlLgogICAgICAgICAgICAqIGluY2x1ZGUvZXhwZXJpbWVudGFsL3Vub3JkZXJl ZF9zZXQgKGVyYXNlLCBlcmFzZV9pZik6CiAgICAgICAgICAgIExpa2V3aXNlLgogICAgICAgICAg ICAqIGluY2x1ZGUvZXhwZXJpbWVudGFsL3ZlY3RvciAoZXJhc2UsIGVyYXNlX2lmKTogTGlrZXdp c2UuCgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9lcmFzZV9pZi5oIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9lcmFzZV9pZi5oCmluZGV4IDc3MTZlMWE5NTNjLi44 ZDFkMjMxNjhmYSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9lcmFzZV9p Zi5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvZXJhc2VfaWYuaApAQCAtNTEsOCAr NTEsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19lcmFzZV9u b2Rlc19pZihfQ29udGFpbmVyJiBfX2NvbnQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgICAgewog CXR5cGVuYW1lIF9Db250YWluZXI6OnNpemVfdHlwZSBfX251bSA9IDA7Ci0JZm9yIChhdXRvIF9f aXRlciA9IHN0ZDo6X19uaXRlcl9iYXNlKF9fY29udC5iZWdpbigpKSwKLQkgICAgIF9fbGFzdCA9 IHN0ZDo6X19uaXRlcl9iYXNlKF9fY29udC5lbmQoKSk7CisJZm9yIChhdXRvIF9faXRlciA9IF9f Y29udC5iZWdpbigpLCBfX2xhc3QgPSBfX2NvbnQuZW5kKCk7CiAJICAgICBfX2l0ZXIgIT0gX19s YXN0OykKIAkgIHsKIAkgICAgaWYgKF9fcHJlZCgqX19pdGVyKSkKZGlmZiAtLWdpdCBhL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2V4cGVyaW1lbnRhbC9kZXF1ZSBiL2xpYnN0ZGMrKy12My9pbmNsdWRl L2V4cGVyaW1lbnRhbC9kZXF1ZQppbmRleCBhNzZmYjY1OWJiZi4uNzEwODMzZWJjYWQgMTAwNjQ0 Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4cGVyaW1lbnRhbC9kZXF1ZQorKysgYi9saWJz dGRjKystdjMvaW5jbHVkZS9leHBlcmltZW50YWwvZGVxdWUKQEAgLTUwLDE2ICs1MCwxNiBAQCBp bmxpbmUgbmFtZXNwYWNlIGZ1bmRhbWVudGFsc192MgogICAgIGlubGluZSB2b2lkCiAgICAgZXJh c2VfaWYoZGVxdWU8X1RwLCBfQWxsb2M+JiBfX2NvbnQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAg IHsKLSAgICAgIF9fY29udC5lcmFzZShzdGQ6OnJlbW92ZV9pZihfX2NvbnQuYmVnaW4oKSwgX19j b250LmVuZCgpLCBfX3ByZWQpLAotCQkgICBfX2NvbnQuZW5kKCkpOworICAgICAgX0dMSUJDWFhf U1REX0M6OmRlcXVlPF9UcCwgX0FsbG9jPiYgX19jID0gX19jb250OworICAgICAgX19jLmVyYXNl KHN0ZDo6cmVtb3ZlX2lmKF9fYy5iZWdpbigpLCBfX2MuZW5kKCksIF9fcHJlZCksIF9fYy5lbmQo KSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCB0 eXBlbmFtZSBfVXA+CiAgICAgaW5saW5lIHZvaWQKICAgICBlcmFzZShkZXF1ZTxfVHAsIF9BbGxv Yz4mIF9fY29udCwgY29uc3QgX1VwJiBfX3ZhbHVlKQogICAgIHsKLSAgICAgIF9fY29udC5lcmFz ZShzdGQ6OnJlbW92ZShfX2NvbnQuYmVnaW4oKSwgX19jb250LmVuZCgpLCBfX3ZhbHVlKSwKLQkJ ICAgX19jb250LmVuZCgpKTsKKyAgICAgIF9HTElCQ1hYX1NURF9DOjpkZXF1ZTxfVHAsIF9BbGxv Yz4mIF9fYyA9IF9fY29udDsKKyAgICAgIF9fYy5lcmFzZShzdGQ6OnJlbW92ZShfX2MuYmVnaW4o KSwgX19jLmVuZCgpLCBfX3ZhbHVlKSwgX19jLmVuZCgpKTsKICAgICB9CiAKICAgbmFtZXNwYWNl IHBtciB7CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHBlcmltZW50YWwvbWFw IGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL21hcAppbmRleCAwYzBmNDIyMjJm NS4uZWY2OWZhZGY5NDQgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4cGVyaW1l bnRhbC9tYXAKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL21hcApAQCAt NTAsMTMgKzUwLDE5IEBAIGlubGluZSBuYW1lc3BhY2UgZnVuZGFtZW50YWxzX3YyCiAJICAgdHlw ZW5hbWUgX1ByZWRpY2F0ZT4KICAgICBpbmxpbmUgdm9pZAogICAgIGVyYXNlX2lmKG1hcDxfS2V5 LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX2NvbnQsIF9QcmVkaWNhdGUgX19wcmVkKQotICAg IHsgc3RkOjpfX2RldGFpbDo6X19lcmFzZV9ub2Rlc19pZihfX2NvbnQsIF9fcHJlZCk7IH0KKyAg ICB7CisgICAgICBfR0xJQkNYWF9TVERfQzo6bWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxv Yz4mIF9fYyA9IF9fY29udDsKKyAgICAgIHN0ZDo6X19kZXRhaWw6Ol9fZXJhc2Vfbm9kZXNfaWYo X19jLCBfX3ByZWQpOworICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2MsCiAJICAgdHlwZW5hbWUg X1ByZWRpY2F0ZT4KICAgICBpbmxpbmUgdm9pZAogICAgIGVyYXNlX2lmKG11bHRpbWFwPF9LZXks IF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9fY29udCwgX1ByZWRpY2F0ZSBfX3ByZWQpCi0gICAg eyBzdGQ6Ol9fZGV0YWlsOjpfX2VyYXNlX25vZGVzX2lmKF9fY29udCwgX19wcmVkKTsgfQorICAg IHsKKyAgICAgIF9HTElCQ1hYX1NURF9DOjptdWx0aW1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBf QWxsb2M+JiBfX2MgPSBfX2NvbnQ7CisgICAgICBzdGQ6Ol9fZGV0YWlsOjpfX2VyYXNlX25vZGVz X2lmKF9fYywgX19wcmVkKTsKKyAgICB9CiAKICAgbmFtZXNwYWNlIHBtciB7CiAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSA9IGxlc3M8 X0tleT4+CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHBlcmltZW50YWwvc2V0 IGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL3NldAppbmRleCBjM2Y1NDMzZTk5 NS4uN2E1OTg2YWVjMGUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4cGVyaW1l bnRhbC9zZXQKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL3NldApAQCAt NTAsMTMgKzUwLDE5IEBAIGlubGluZSBuYW1lc3BhY2UgZnVuZGFtZW50YWxzX3YyCiAJICAgdHlw ZW5hbWUgX1ByZWRpY2F0ZT4KICAgICBpbmxpbmUgdm9pZAogICAgIGVyYXNlX2lmKHNldDxfS2V5 LCBfQ29tcGFyZSwgX0FsbG9jPiYgX19jb250LCBfUHJlZGljYXRlIF9fcHJlZCkKLSAgICB7IHN0 ZDo6X19kZXRhaWw6Ol9fZXJhc2Vfbm9kZXNfaWYoX19jb250LCBfX3ByZWQpOyB9CisgICAgewor ICAgICAgX0dMSUJDWFhfU1REX0M6OnNldDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX19jID0g X19jb250OworICAgICAgc3RkOjpfX2RldGFpbDo6X19lcmFzZV9ub2Rlc19pZihfX2MsIF9fcHJl ZCk7CisgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfQWxsb2MsCiAJICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICBpbmxpbmUg dm9pZAogICAgIGVyYXNlX2lmKG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX2Nv bnQsIF9QcmVkaWNhdGUgX19wcmVkKQotICAgIHsgc3RkOjpfX2RldGFpbDo6X19lcmFzZV9ub2Rl c19pZihfX2NvbnQsIF9fcHJlZCk7IH0KKyAgICB7CisgICAgICBfR0xJQkNYWF9TVERfQzo6bXVs dGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9fYyA9IF9fY29udDsKKyAgICAgIHN0ZDo6 X19kZXRhaWw6Ol9fZXJhc2Vfbm9kZXNfaWYoX19jLCBfX3ByZWQpOworICAgIH0KIAogICBuYW1l c3BhY2UgcG1yIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfQ29tcGFy ZSA9IGxlc3M8X0tleT4+CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHBlcmlt ZW50YWwvdW5vcmRlcmVkX21hcCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4cGVyaW1lbnRhbC91 bm9yZGVyZWRfbWFwCmluZGV4IDBiOTE1YWIxM2U1Li5lYmE5ODk3MTNmYSAxMDA2NDQKLS0tIGEv bGlic3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL3Vub3JkZXJlZF9tYXAKKysrIGIvbGli c3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL3Vub3JkZXJlZF9tYXAKQEAgLTUxLDE0ICs1 MSwyMiBAQCBpbmxpbmUgbmFtZXNwYWNlIGZ1bmRhbWVudGFsc192MgogICAgIGlubGluZSB2b2lk CiAgICAgZXJhc2VfaWYodW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfQ1ByZWQsIF9B bGxvYz4mIF9fY29udCwKIAkgICAgIF9QcmVkaWNhdGUgX19wcmVkKQotICAgIHsgc3RkOjpfX2Rl dGFpbDo6X19lcmFzZV9ub2Rlc19pZihfX2NvbnQsIF9fcHJlZCk7IH0KKyAgICB7CisgICAgICBf R0xJQkNYWF9TVERfQzo6dW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfQ1ByZWQsIF9B bGxvYz4mIF9fYworCT0gX19jb250OworICAgICAgc3RkOjpfX2RldGFpbDo6X19lcmFzZV9ub2Rl c19pZihfX2MsIF9fcHJlZCk7CisgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2gsIHR5cGVuYW1lIF9DUHJlZCwKIAkgICB0eXBlbmFt ZSBfQWxsb2MsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgaW5saW5lIHZvaWQKICAgICBlcmFz ZV9pZih1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX0NQcmVkLCBfQWxsb2M+ JiBfX2NvbnQsCiAJICAgICBfUHJlZGljYXRlIF9fcHJlZCkKLSAgICB7IHN0ZDo6X19kZXRhaWw6 Ol9fZXJhc2Vfbm9kZXNfaWYoX19jb250LCBfX3ByZWQpOyB9CisgICAgeworICAgICAgX0dMSUJD WFhfU1REX0M6OnVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfQ1ByZWQsIF9B bGxvYz4mIF9fYworCT0gX19jb250OworICAgICAgc3RkOjpfX2RldGFpbDo6X19lcmFzZV9ub2Rl c19pZihfX2MsIF9fcHJlZCk7CisgICAgfQogCiAgIG5hbWVzcGFjZSBwbXIgewogICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0hhc2ggPSBoYXNoPF9L ZXk+LApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL3Vub3Jk ZXJlZF9zZXQgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHBlcmltZW50YWwvdW5vcmRlcmVkX3Nl dAppbmRleCA4N2RiNDQ2NDQwMS4uYmM1Y2MxMTQxOWUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2V4cGVyaW1lbnRhbC91bm9yZGVyZWRfc2V0CisrKyBiL2xpYnN0ZGMrKy12My9p bmNsdWRlL2V4cGVyaW1lbnRhbC91bm9yZGVyZWRfc2V0CkBAIC01MSwxNCArNTEsMjEgQEAgaW5s aW5lIG5hbWVzcGFjZSBmdW5kYW1lbnRhbHNfdjIKICAgICBpbmxpbmUgdm9pZAogICAgIGVyYXNl X2lmKHVub3JkZXJlZF9zZXQ8X0tleSwgX0hhc2gsIF9DUHJlZCwgX0FsbG9jPiYgX19jb250LAog CSAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCi0gICAgeyBzdGQ6Ol9fZGV0YWlsOjpfX2VyYXNlX25v ZGVzX2lmKF9fY29udCwgX19wcmVkKTsgfQorICAgIHsKKyAgICAgIF9HTElCQ1hYX1NURF9DOjp1 bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfQ1ByZWQsIF9BbGxvYz4mIF9fYyA9IF9fY29udDsK KyAgICAgIHN0ZDo6X19kZXRhaWw6Ol9fZXJhc2Vfbm9kZXNfaWYoX19jLCBfX3ByZWQpOworICAg IH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUg X0NQcmVkLCB0eXBlbmFtZSBfQWxsb2MsCiAJICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICBp bmxpbmUgdm9pZAogICAgIGVyYXNlX2lmKHVub3JkZXJlZF9tdWx0aXNldDxfS2V5LCBfSGFzaCwg X0NQcmVkLCBfQWxsb2M+JiBfX2NvbnQsCiAJICAgICBfUHJlZGljYXRlIF9fcHJlZCkKLSAgICB7 IHN0ZDo6X19kZXRhaWw6Ol9fZXJhc2Vfbm9kZXNfaWYoX19jb250LCBfX3ByZWQpOyB9CisgICAg eworICAgICAgX0dMSUJDWFhfU1REX0M6OnVub3JkZXJlZF9tdWx0aXNldDxfS2V5LCBfSGFzaCwg X0NQcmVkLCBfQWxsb2M+JiBfX2MKKwk9IF9fY29udDsKKyAgICAgIHN0ZDo6X19kZXRhaWw6Ol9f ZXJhc2Vfbm9kZXNfaWYoX19jLCBfX3ByZWQpOworICAgIH0KIAogICBuYW1lc3BhY2UgcG1yIHsK ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfSGFzaCA9IGhhc2g8X0tleT4s CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHBlcmltZW50YWwvdmVjdG9yIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL3ZlY3RvcgppbmRleCBhMTRhZWRmMzM2 NC4uYzQ1YTUwMGVmNWUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4cGVyaW1l bnRhbC92ZWN0b3IKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL3ZlY3Rv cgpAQCAtNTIsMTYgKzUyLDE2IEBAIGlubGluZSBuYW1lc3BhY2UgZnVuZGFtZW50YWxzX3YyCiAg ICAgaW5saW5lIHZvaWQKICAgICBlcmFzZV9pZih2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2NvbnQs IF9QcmVkaWNhdGUgX19wcmVkKQogICAgIHsKLSAgICAgIF9fY29udC5lcmFzZShzdGQ6OnJlbW92 ZV9pZihfX2NvbnQuYmVnaW4oKSwgX19jb250LmVuZCgpLCBfX3ByZWQpLAotCQkgICBfX2NvbnQu ZW5kKCkpOworICAgICAgX0dMSUJDWFhfU1REX0M6OnZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fYyA9 IF9fY29udDsKKyAgICAgIF9fYy5lcmFzZShzdGQ6OnJlbW92ZV9pZihfX2MuYmVnaW4oKSwgX19j LmVuZCgpLCBfX3ByZWQpLCBfX2MuZW5kKCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1VwPgogICAgIGlubGluZSB2b2lkCiAg ICAgZXJhc2UodmVjdG9yPF9UcCwgX0FsbG9jPiYgX19jb250LCBjb25zdCBfVXAmIF9fdmFsdWUp CiAgICAgewotICAgICAgX19jb250LmVyYXNlKHN0ZDo6cmVtb3ZlKF9fY29udC5iZWdpbigpLCBf X2NvbnQuZW5kKCksIF9fdmFsdWUpLAotCQkgICBfX2NvbnQuZW5kKCkpOworICAgICAgX0dMSUJD WFhfU1REX0M6OnZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fYyA9IF9fY29udDsKKyAgICAgIF9fYy5l cmFzZShzdGQ6OnJlbW92ZShfX2MuYmVnaW4oKSwgX19jLmVuZCgpLCBfX3ZhbHVlKSwgX19jLmVu ZCgpKTsKICAgICB9CiAKICAgbmFtZXNwYWNlIHBtciB7CmRpZmYgLS1naXQgYS9saWJzdGRjKyst djMvaW5jbHVkZS9zdGQvZGVxdWUgYi9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvZGVxdWUKaW5k ZXggYjJhN2NlZTQ4M2EuLjcxOTkzZTc1N2E1IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5j bHVkZS9zdGQvZGVxdWUKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2RlcXVlCkBAIC05 NSwyOCArOTUsMjggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBpbmxp bmUgdHlwZW5hbWUgZGVxdWU8X1RwLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgICBlcmFzZV9pZihk ZXF1ZTxfVHAsIF9BbGxvYz4mIF9fY29udCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICAgeworICAg ICAgX0dMSUJDWFhfU1REX0M6OmRlcXVlPF9UcCwgX0FsbG9jPiYgX19jID0gX19jb250OwogICAg ICAgdXNpbmcgbmFtZXNwYWNlIF9fZ251X2N4eDsKLSAgICAgIGNvbnN0IGF1dG8gX19vc3ogPSBf X2NvbnQuc2l6ZSgpOwotICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fY29udC5lbmQoKTsKLSAg ICAgIGF1dG8gX19yZW1vdmVkKHN0ZDo6X19yZW1vdmVfaWYoc3RkOjpfX25pdGVyX2Jhc2UoX19j b250LmJlZ2luKCkpLAotCQkJCSAgICAgIHN0ZDo6X19uaXRlcl9iYXNlKF9fZW5kKSwKLQkJCQkg ICAgICBfX29wczo6X19wcmVkX2l0ZXIoc3RkOjpyZWYoX19wcmVkKSkpKTsKLSAgICAgIF9fY29u dC5lcmFzZShzdGQ6Ol9fbml0ZXJfd3JhcChfX2VuZCwgX19yZW1vdmVkKSwgX19lbmQpOwotICAg ICAgcmV0dXJuIF9fb3N6IC0gX19jb250LnNpemUoKTsKKyAgICAgIGNvbnN0IGF1dG8gX19vc3og PSBfX2Muc2l6ZSgpOworICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fYy5lbmQoKTsKKyAgICAg IGF1dG8gX19yZW1vdmVkID0gc3RkOjpfX3JlbW92ZV9pZihfX2MuYmVnaW4oKSwgX19lbmQsCisJ CQkJCV9fb3BzOjpfX3ByZWRfaXRlcihzdGQ6OnJlZihfX3ByZWQpKSk7CisgICAgICBfX2MuZXJh c2UoX19yZW1vdmVkLCBfX2VuZCk7CisgICAgICByZXR1cm4gX19vc3ogLSBfX2Muc2l6ZSgpOwog ICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5h bWUgX1VwPgogICAgIGlubGluZSB0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46OnNpemVfdHlw ZQogICAgIGVyYXNlKGRlcXVlPF9UcCwgX0FsbG9jPiYgX19jb250LCBjb25zdCBfVXAmIF9fdmFs dWUpCiAgICAgeworICAgICAgX0dMSUJDWFhfU1REX0M6OmRlcXVlPF9UcCwgX0FsbG9jPiYgX19j ID0gX19jb250OwogICAgICAgdXNpbmcgbmFtZXNwYWNlIF9fZ251X2N4eDsKLSAgICAgIGNvbnN0 IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgpOwotICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9f Y29udC5lbmQoKTsKLSAgICAgIGF1dG8gX19yZW1vdmVkKHN0ZDo6X19yZW1vdmVfaWYoc3RkOjpf X25pdGVyX2Jhc2UoX19jb250LmJlZ2luKCkpLAotCQkJCSAgICAgIHN0ZDo6X19uaXRlcl9iYXNl KF9fZW5kKSwKLQkJCQkgICAgICBfX29wczo6X19pdGVyX2VxdWFsc192YWwoX192YWx1ZSkpKTsK LSAgICAgIF9fY29udC5lcmFzZShzdGQ6Ol9fbml0ZXJfd3JhcChfX2VuZCwgX19yZW1vdmVkKSwg X19lbmQpOwotICAgICAgcmV0dXJuIF9fb3N6IC0gX19jb250LnNpemUoKTsKKyAgICAgIGNvbnN0 IGF1dG8gX19vc3ogPSBfX2Muc2l6ZSgpOworICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fYy5l bmQoKTsKKyAgICAgIGF1dG8gX19yZW1vdmVkID0gc3RkOjpfX3JlbW92ZV9pZihfX2MuYmVnaW4o KSwgX19lbmQsCisJCQkJCV9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbHVlKSk7CisgICAg ICBfX2MuZXJhc2UoX19yZW1vdmVkLCBfX2VuZCk7CisgICAgICByZXR1cm4gX19vc3ogLSBfX2Mu c2l6ZSgpOwogICAgIH0KIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgogfSAvLyBuYW1l c3BhY2Ugc3RkCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvbWFwIGIvbGli c3RkYysrLXYzL2luY2x1ZGUvc3RkL21hcAppbmRleCA0NGJkNDRiNTkyMi4uMjkyNjU1ODA5OTUg MTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9tYXAKKysrIGIvbGlic3RkYysr LXYzL2luY2x1ZGUvc3RkL21hcApAQCAtOTUsMTMgKzk1LDE5IEBAIF9HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9WRVJTSU9OCiAJICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICBpbmxpbmUgdHlw ZW5hbWUgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz46OnNpemVfdHlwZQogICAgIGVy YXNlX2lmKG1hcDxfS2V5LCBfVHAsIF9Db21wYXJlLCBfQWxsb2M+JiBfX2NvbnQsIF9QcmVkaWNh dGUgX19wcmVkKQotICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VyYXNlX25vZGVzX2lmKF9fY29u dCwgX19wcmVkKTsgfQorICAgIHsKKyAgICAgIF9HTElCQ1hYX1NURF9DOjptYXA8X0tleSwgX1Rw LCBfQ29tcGFyZSwgX0FsbG9jPiYgX19jID0gX19jb250OworICAgICAgcmV0dXJuIF9fZGV0YWls OjpfX2VyYXNlX25vZGVzX2lmKF9fYywgX19wcmVkKTsKKyAgICB9CiAKICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs bG9jLAogCSAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgaW5saW5lIHR5cGVuYW1lIG11bHRp bWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz46OnNpemVfdHlwZQogICAgIGVyYXNlX2lm KG11bHRpbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9fY29udCwgX1ByZWRpY2F0 ZSBfX3ByZWQpCi0gICAgeyByZXR1cm4gX19kZXRhaWw6Ol9fZXJhc2Vfbm9kZXNfaWYoX19jb250 LCBfX3ByZWQpOyB9CisgICAgeworICAgICAgX0dMSUJDWFhfU1REX0M6Om11bHRpbWFwPF9LZXks IF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9fYyA9IF9fY29udDsKKyAgICAgIHJldHVybiBfX2Rl dGFpbDo6X19lcmFzZV9ub2Rlc19pZihfX2MsIF9fcHJlZCk7CisgICAgfQogX0dMSUJDWFhfRU5E X05BTUVTUEFDRV9WRVJTSU9OCiB9IC8vIG5hbWVzcGFjZSBzdGQKICNlbmRpZiAvLyBDKysyMApk aWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3NldCBiL2xpYnN0ZGMrKy12My9p bmNsdWRlL3N0ZC9zZXQKaW5kZXggZjFlMTg2NDkzN2EuLjI0ZTZlNjMzNjI0IDEwMDY0NAotLS0g YS9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvc2V0CisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRl L3N0ZC9zZXQKQEAgLTkxLDEzICs5MSwxOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS U0lPTgogCSAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgaW5saW5lIHR5cGVuYW1lIHNldDxf S2V5LCBfQ29tcGFyZSwgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICAgZXJhc2VfaWYoc2V0PF9LZXks IF9Db21wYXJlLCBfQWxsb2M+JiBfX2NvbnQsIF9QcmVkaWNhdGUgX19wcmVkKQotICAgIHsgcmV0 dXJuIF9fZGV0YWlsOjpfX2VyYXNlX25vZGVzX2lmKF9fY29udCwgX19wcmVkKTsgfQorICAgIHsK KyAgICAgIF9HTElCQ1hYX1NURF9DOjpzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9fYyA9 IF9fY29udDsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19lcmFzZV9ub2Rlc19pZihfX2MsIF9f cHJlZCk7CisgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Db21w YXJlLCB0eXBlbmFtZSBfQWxsb2MsCiAJICAgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICBpbmxp bmUgdHlwZW5hbWUgbXVsdGlzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgIGVyYXNlX2lmKG11bHRpc2V0PF9LZXksIF9Db21wYXJlLCBfQWxsb2M+JiBfX2NvbnQsIF9Q cmVkaWNhdGUgX19wcmVkKQotICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VyYXNlX25vZGVzX2lm KF9fY29udCwgX19wcmVkKTsgfQorICAgIHsKKyAgICAgIF9HTElCQ1hYX1NURF9DOjptdWx0aXNl dDxfS2V5LCBfQ29tcGFyZSwgX0FsbG9jPiYgX19jID0gX19jb250OworICAgICAgcmV0dXJuIF9f ZGV0YWlsOjpfX2VyYXNlX25vZGVzX2lmKF9fYywgX19wcmVkKTsKKyAgICB9CiBfR0xJQkNYWF9F TkRfTkFNRVNQQUNFX1ZFUlNJT04KIH0gLy8gbmFtZXNwYWNlIHN0ZAogI2VuZGlmIC8vIEMrKzIw CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvc3RyaW5nIGIvbGlic3RkYysr LXYzL2luY2x1ZGUvc3RkL3N0cmluZwppbmRleCA3Zjk5NDE0N2EzMy4uOTU0MTJiNmY3YTMgMTAw NjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9zdHJpbmcKKysrIGIvbGlic3RkYysr LXYzL2luY2x1ZGUvc3RkL3N0cmluZwpAQCAtMTI0LDEyICsxMjQsMTEgQEAgX0dMSUJDWFhfQkVH SU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBlcmFzZV9pZihiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX2NvbnQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgIHsKICAgICAg IHVzaW5nIG5hbWVzcGFjZSBfX2dudV9jeHg7Ci0gICAgICB1c2luZyBfSXQgPSB0eXBlbmFtZSBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjppdGVyYXRvcjsKICAgICAgIGNv bnN0IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgpOwotICAgICAgX0l0IF9fcmVtb3ZlZChzdGQ6 Ol9fcmVtb3ZlX2lmKHN0ZDo6X19uaXRlcl9iYXNlKF9fY29udC5iZWdpbigpKSwKLQkJCQkgICAg ICBzdGQ6Ol9fbml0ZXJfYmFzZShfX2NvbnQuZW5kKCkpLAotCQkJCSAgICAgIF9fb3BzOjpfX3By ZWRfaXRlcihzdGQ6OnJlZihfX3ByZWQpKSkpOwotICAgICAgX19jb250LmVyYXNlKF9fcmVtb3Zl ZCwgX19jb250LmVuZCgpKTsKKyAgICAgIGNvbnN0IGF1dG8gX19lbmQgPSBfX2NvbnQuZW5kKCk7 CisgICAgICBhdXRvIF9fcmVtb3ZlZCA9IHN0ZDo6X19yZW1vdmVfaWYoX19jb250LmJlZ2luKCks IF9fZW5kLAorCQkJCQlfX29wczo6X19wcmVkX2l0ZXIoc3RkOjpyZWYoX19wcmVkKSkpOworICAg ICAgX19jb250LmVyYXNlKF9fcmVtb3ZlZCwgX19lbmQpOwogICAgICAgcmV0dXJuIF9fb3N6IC0g X19jb250LnNpemUoKTsKICAgICB9CiAKQEAgLTEzOCwxMiArMTM3LDExIEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgZXJhc2UoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19jb250LCBjb25zdCBfVXAmIF9fdmFsdWUpCiAgICAgewogICAgICAg dXNpbmcgbmFtZXNwYWNlIF9fZ251X2N4eDsKLSAgICAgIHVzaW5nIF9JdCA9IHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Oml0ZXJhdG9yOwogICAgICAgY29u c3QgYXV0byBfX29zeiA9IF9fY29udC5zaXplKCk7Ci0gICAgICBfSXQgX19yZW1vdmVkKHN0ZDo6 X19yZW1vdmVfaWYoc3RkOjpfX25pdGVyX2Jhc2UoX19jb250LmJlZ2luKCkpLAotCQkJCSAgICAg IHN0ZDo6X19uaXRlcl9iYXNlKF9fY29udC5lbmQoKSksCi0JCQkJICAgICAgX19vcHM6Ol9faXRl cl9lcXVhbHNfdmFsKF9fdmFsdWUpKSk7Ci0gICAgICBfX2NvbnQuZXJhc2UoX19yZW1vdmVkLCBf X2NvbnQuZW5kKCkpOworICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fY29udC5lbmQoKTsKKyAg ICAgIGF1dG8gX19yZW1vdmVkID0gc3RkOjpfX3JlbW92ZV9pZihfX2NvbnQuYmVnaW4oKSwgX19l bmQsCisJCQkJCV9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbHVlKSk7CisgICAgICBfX2Nv bnQuZXJhc2UoX19yZW1vdmVkLCBfX2VuZCk7CiAgICAgICByZXR1cm4gX19vc3ogLSBfX2NvbnQu c2l6ZSgpOwogICAgIH0KIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgpkaWZmIC0tZ2l0 IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3Vub3JkZXJlZF9tYXAgYi9saWJzdGRjKystdjMv aW5jbHVkZS9zdGQvdW5vcmRlcmVkX21hcAppbmRleCBlNjcxNTA2OTM2Mi4uNzc0YzIxZmMyOGIg MTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC91bm9yZGVyZWRfbWFwCisrKyBi L2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC91bm9yZGVyZWRfbWFwCkBAIC04Myw3ICs4MywxMSBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIGlubGluZSB0eXBlbmFtZSB1 bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9DUHJlZCwgX0FsbG9jPjo6c2l6ZV90eXBl CiAgICAgZXJhc2VfaWYodW5vcmRlcmVkX21hcDxfS2V5LCBfVHAsIF9IYXNoLCBfQ1ByZWQsIF9B bGxvYz4mIF9fY29udCwKIAkgICAgIF9QcmVkaWNhdGUgX19wcmVkKQotICAgIHsgcmV0dXJuIF9f ZGV0YWlsOjpfX2VyYXNlX25vZGVzX2lmKF9fY29udCwgX19wcmVkKTsgfQorICAgIHsKKyAgICAg IF9HTElCQ1hYX1NURF9DOjp1bm9yZGVyZWRfbWFwPF9LZXksIF9UcCwgX0hhc2gsIF9DUHJlZCwg X0FsbG9jPiYgX19jCisJPSBfX2NvbnQ7CisgICAgICByZXR1cm4gX19kZXRhaWw6Ol9fZXJhc2Vf bm9kZXNfaWYoX19jLCBfX3ByZWQpOworICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5 LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfQ1ByZWQsCiAJICAgdHlw ZW5hbWUgX0FsbG9jLCB0eXBlbmFtZSBfUHJlZGljYXRlPgpAQCAtOTEsNyArOTUsMTEgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkJICAgIHNpemVfdHlwZQogICAgIGVyYXNl X2lmKHVub3JkZXJlZF9tdWx0aW1hcDxfS2V5LCBfVHAsIF9IYXNoLCBfQ1ByZWQsIF9BbGxvYz4m IF9fY29udCwKIAkgICAgIF9QcmVkaWNhdGUgX19wcmVkKQotICAgIHsgcmV0dXJuIF9fZGV0YWls OjpfX2VyYXNlX25vZGVzX2lmKF9fY29udCwgX19wcmVkKTsgfQorICAgIHsKKyAgICAgIF9HTElC Q1hYX1NURF9DOjp1bm9yZGVyZWRfbXVsdGltYXA8X0tleSwgX1RwLCBfSGFzaCwgX0NQcmVkLCBf QWxsb2M+JiBfX2MKKwk9IF9fY29udDsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19lcmFzZV9u b2Rlc19pZihfX2MsIF9fcHJlZCk7CisgICAgfQogX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJT SU9OCiB9IC8vIG5hbWVzcGFjZSBzdGQKICNlbmRpZiAvLyBDKysyMApkaWZmIC0tZ2l0IGEvbGli c3RkYysrLXYzL2luY2x1ZGUvc3RkL3Vub3JkZXJlZF9zZXQgYi9saWJzdGRjKystdjMvaW5jbHVk ZS9zdGQvdW5vcmRlcmVkX3NldAppbmRleCAxYWQ5M2QwMDMxYi4uMzg1OWVlYWViZDAgMTAwNjQ0 Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC91bm9yZGVyZWRfc2V0CisrKyBiL2xpYnN0 ZGMrKy12My9pbmNsdWRlL3N0ZC91bm9yZGVyZWRfc2V0CkBAIC04MywxNCArODMsMjEgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBpbmxpbmUgdHlwZW5hbWUgdW5vcmRl cmVkX3NldDxfS2V5LCBfSGFzaCwgX0NQcmVkLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgICBlcmFz ZV9pZih1bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfQ1ByZWQsIF9BbGxvYz4mIF9fY29udCwK IAkgICAgIF9QcmVkaWNhdGUgX19wcmVkKQotICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VyYXNl X25vZGVzX2lmKF9fY29udCwgX19wcmVkKTsgfQorICAgIHsKKyAgICAgIF9HTElCQ1hYX1NURF9D Ojp1bm9yZGVyZWRfc2V0PF9LZXksIF9IYXNoLCBfQ1ByZWQsIF9BbGxvYz4mIF9fYyA9IF9fY29u dDsKKyAgICAgIHJldHVybiBfX2RldGFpbDo6X19lcmFzZV9ub2Rlc19pZihfX2MsIF9fcHJlZCk7 CisgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9IYXNoLCB0eXBl bmFtZSBfQ1ByZWQsIHR5cGVuYW1lIF9BbGxvYywKIAkgICB0eXBlbmFtZSBfUHJlZGljYXRlPgog ICAgIGlubGluZSB0eXBlbmFtZSB1bm9yZGVyZWRfbXVsdGlzZXQ8X0tleSwgX0hhc2gsIF9DUHJl ZCwgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICAgZXJhc2VfaWYodW5vcmRlcmVkX211bHRpc2V0PF9L ZXksIF9IYXNoLCBfQ1ByZWQsIF9BbGxvYz4mIF9fY29udCwKIAkgICAgIF9QcmVkaWNhdGUgX19w cmVkKQotICAgIHsgcmV0dXJuIF9fZGV0YWlsOjpfX2VyYXNlX25vZGVzX2lmKF9fY29udCwgX19w cmVkKTsgfQorICAgIHsKKyAgICAgIF9HTElCQ1hYX1NURF9DOjp1bm9yZGVyZWRfbXVsdGlzZXQ8 X0tleSwgX0hhc2gsIF9DUHJlZCwgX0FsbG9jPiYgX19jCisJPSBfX2NvbnQ7CisgICAgICByZXR1 cm4gX19kZXRhaWw6Ol9fZXJhc2Vfbm9kZXNfaWYoX19jLCBfX3ByZWQpOworICAgIH0KIF9HTElC Q1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgogfSAvLyBuYW1lc3BhY2Ugc3RkCiAjZW5kaWYgLy8g QysrMjAKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC92ZWN0b3IgYi9saWJz dGRjKystdjMvaW5jbHVkZS9zdGQvdmVjdG9yCmluZGV4IDNiMjc1ZTI0OWZjLi44MzVmYThhZWI2 OSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3ZlY3RvcgorKysgYi9saWJz dGRjKystdjMvaW5jbHVkZS9zdGQvdmVjdG9yCkBAIC0xMDUsMjggKzEwNSwyOCBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIGlubGluZSB0eXBlbmFtZSB2ZWN0b3I8X1Rw LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgICBlcmFzZV9pZih2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf X2NvbnQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgIHsKKyAgICAgIF9HTElCQ1hYX1NURF9DOjp2 ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2MgPSBfX2NvbnQ7CiAgICAgICB1c2luZyBuYW1lc3BhY2Ug X19nbnVfY3h4OwotICAgICAgY29uc3QgYXV0byBfX29zeiA9IF9fY29udC5zaXplKCk7Ci0gICAg ICBjb25zdCBhdXRvIF9fZW5kID0gX19jb250LmVuZCgpOwotICAgICAgYXV0byBfX3JlbW92ZWQo c3RkOjpfX3JlbW92ZV9pZihzdGQ6Ol9fbml0ZXJfYmFzZShfX2NvbnQuYmVnaW4oKSksCi0JCQkJ ICAgICAgc3RkOjpfX25pdGVyX2Jhc2UoX19lbmQpLAorICAgICAgY29uc3QgYXV0byBfX29zeiA9 IF9fYy5zaXplKCk7CisgICAgICBjb25zdCBhdXRvIF9fZW5kID0gX19jLmVuZCgpOworICAgICAg YXV0byBfX3JlbW92ZWQoc3RkOjpfX3JlbW92ZV9pZihfX2MuYmVnaW4oKSwgX19lbmQsCiAJCQkJ ICAgICAgX19vcHM6Ol9fcHJlZF9pdGVyKHN0ZDo6cmVmKF9fcHJlZCkpKSk7Ci0gICAgICBfX2Nv bnQuZXJhc2Uoc3RkOjpfX25pdGVyX3dyYXAoX19lbmQsIF9fcmVtb3ZlZCksIF9fZW5kKTsKLSAg ICAgIHJldHVybiBfX29zeiAtIF9fY29udC5zaXplKCk7CisgICAgICBfX2MuZXJhc2UoX19yZW1v dmVkLCBfX2VuZCk7CisgICAgICByZXR1cm4gX19vc3ogLSBfX2Muc2l6ZSgpOwogICAgIH0KIAog ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1VwPgog ICAgIGlubGluZSB0eXBlbmFtZSB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgICBl cmFzZSh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2NvbnQsIGNvbnN0IF9VcCYgX192YWx1ZSkKICAg ICB7CisgICAgICBfR0xJQkNYWF9TVERfQzo6dmVjdG9yPF9UcCwgX0FsbG9jPiYgX19jID0gX19j b250OwogICAgICAgdXNpbmcgbmFtZXNwYWNlIF9fZ251X2N4eDsKLSAgICAgIGNvbnN0IGF1dG8g X19vc3ogPSBfX2NvbnQuc2l6ZSgpOwotICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fY29udC5l bmQoKTsKLSAgICAgIGF1dG8gX19yZW1vdmVkKHN0ZDo6X19yZW1vdmVfaWYoc3RkOjpfX25pdGVy X2Jhc2UoX19jb250LmJlZ2luKCkpLAotCQkJCSAgICAgIHN0ZDo6X19uaXRlcl9iYXNlKF9fZW5k KSwKLQkJCQkgICAgICBfX29wczo6X19pdGVyX2VxdWFsc192YWwoX192YWx1ZSkpKTsKLSAgICAg IF9fY29udC5lcmFzZShzdGQ6Ol9fbml0ZXJfd3JhcChfX2VuZCwgX19yZW1vdmVkKSwgX19lbmQp OwotICAgICAgcmV0dXJuIF9fb3N6IC0gX19jb250LnNpemUoKTsKKyAgICAgIGNvbnN0IGF1dG8g X19vc3ogPSBfX2Muc2l6ZSgpOworICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fYy5lbmQoKTsK KyAgICAgIGF1dG8gX19yZW1vdmVkID0gc3RkOjpfX3JlbW92ZV9pZihfX2MuYmVnaW4oKSwgX19l bmQsCisJCQkJCV9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbHVlKSk7CisgICAgICBfX2Mu ZXJhc2UoX19yZW1vdmVkLCBfX2VuZCk7CisgICAgICByZXR1cm4gX19vc3ogLSBfX2Muc2l6ZSgp OwogICAgIH0KIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgogfSAvLyBuYW1lc3BhY2Ug c3RkCg== --000000000000f7352c05cdc643d0--