From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by sourceware.org (Postfix) with ESMTPS id 6811E3832E4A; Thu, 27 Jun 2024 19:25:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6811E3832E4A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6811E3832E4A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::435 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1719516332; cv=none; b=vCqunlXOxIS9hdfzU8N8lQZcb6mS7z7fChy+TZssF/fvxbuLdLbZhxA8en12lL8PyZ6upJwy5t+3a0+cKKjlVH9LWbGO9ADglCHwBiZ3nIJ1LX8qLSrLzZd8igUQo/AffHbabCWX8AF2DFdKOKRh/YicN3vcYf069WWD33o/Gg8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1719516332; c=relaxed/simple; bh=uRJtH3bY5sWr6sLQ2s63agycxBjcBFyYqtJeCFyWyOA=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=STHqRJtACn03rML1fXlgOvGEYgjmCCRVrNHcQ3aIu937YOO2GPGaeWX95g59D0J/gmpoWTPLE1oI9SLjas+QvYz9b/2J6Z+Mb+HK0vicJbmtAorObLyY9s4jyYJjYjTu13ozLJGPurOKicaPBAYK6xI26kyE4ZJhiTvi7BwzGPE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-3651ee582cfso4534572f8f.2; Thu, 27 Jun 2024 12:25:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719516325; x=1720121125; darn=gcc.gnu.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=6IBYn779QdJNH6F82U8juJkBQ77kwl11ckfhOyRZ1Vs=; b=Yt9PDqIM9w5qgKPnW/AmpH8Co2GKjlmhD+TDyTaiKRVvgXr4AErr1CogDhUOiwQB8x /Nbc7qm4INdg+5DgqJyO+wLmPA11idd16JeieG4rwhthS/Cl/JwpXqvcHA9CCvnyYqEk mP6u9x5vus/3vBrBOjWpdFXy2OmSvDmBzNkpQzA/ud5/buNMDiaD1BX5jjhOVTI44djK Jfg2Wti9lY7mL4FvlDPMRTwztLUJb5iUFF9KKaKUA83I9v6WyRLR3o3jp6VF2JzlEKVe Mzug9w2JRIZnwJszEX7II6uevzucqfm3jjENhQEuc1R17JqFbDQfBUn5w7N4TQEzvszU P6EA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719516325; x=1720121125; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=6IBYn779QdJNH6F82U8juJkBQ77kwl11ckfhOyRZ1Vs=; b=N2I1oQLzHJRtNuVYAtUjEPDJ1n2MucuueFh+OIHkufrQy4qp8zHGmPx5cqFFlSZHo4 bmdw6QSYIk2tVJSB9jJDIHtNXzZpWmxjKX8k/iVazPZEFlE50Er+PrR742KoGkcZzmHy etdvsStmnTSzZUkcDjXCVa9BGPuGaWhZ9vyM6wJM3lGW9QnKzhAVBka+LbgGK3IswZpR KXaUwCvtUTpSylSmDBecIvqyMfRYbsDZ87VxcrtfXrUNMKPmSznxA1p4Cf1UK0ieDVRt AnVfulrdcCNLKpRPB/Qomtm/JCyXBTsRqEQwtdFcRaj3KY2SVabrg7O9cNG5UfTDuAr7 b9cg== X-Forwarded-Encrypted: i=1; AJvYcCWQOz+SL5O/kzGug7jm+F9fQ4aNGWYKMWO2GXRDk0vStkR7pUKzlQ0Yk92D285fGPBJiRLxgjHKAEl2E9dDx4WJNMYIat4Njw== X-Gm-Message-State: AOJu0YyPxjKeYS34GJy+2DrRT5FDO/u8/xUvZBEq+Y1KHFgphdGRDHRQ 7D8J524ngNryty1vpvzzMV6rDPdHUJYUBoLeym57arHiIVy0xi6f X-Google-Smtp-Source: AGHT+IFQutTKDMsiLSWUkxQMRTFv1h6AdrgBB/3s9HJhMbi0hwqdxMevIHJwSYML0cu4gkKI0G7tcA== X-Received: by 2002:a5d:5f8d:0:b0:366:ed80:d040 with SMTP id ffacd0b85a97d-366ed80d187mr14133197f8f.67.1719516324641; Thu, 27 Jun 2024 12:25:24 -0700 (PDT) Received: from ?IPV6:2a01:e0a:1dc:b1c0:9c0e:5f1a:5b35:eede? ([2a01:e0a:1dc:b1c0:9c0e:5f1a:5b35:eede]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3675a0cd623sm132134f8f.16.2024.06.27.12.25.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 27 Jun 2024 12:25:24 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------EP9uVqCKJ2OnrO0A7AuwR0u4" Message-ID: Date: Thu, 27 Jun 2024 21:25:23 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] _Hashtable fancy pointer support To: Jonathan Wakely Cc: libstdc++ , gcc-patches References: <8ed737bd-4b8e-4233-833b-c44d10b37aca@gmail.com> Content-Language: en-US From: =?UTF-8?Q?Fran=C3=A7ois_Dumont?= In-Reply-To: X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------EP9uVqCKJ2OnrO0A7AuwR0u4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Thanks for the link, based on it I removed some of the nullptr usages keeping only assignments. François On 26/06/2024 23:41, Jonathan Wakely wrote: > On Wed, 26 Jun 2024 at 21:39, François Dumont wrote: >> Hi >> >> Here is my proposal to add support for fancy allocator pointer. >> >> The only place where we still have C pointers is at the >> iterator::pointer level but it's consistent with std::list >> implementation and also logical considering that we do not get >> value_type pointers from the allocator. >> >> I also wondered if it was ok to use nullptr in different places or if I >> should rather do __node_ptr{}. But recent modifications are using >> nullptr so I think it's fine. > I haven't reviewed the patch yet, but this answers the nullptr question: > https://en.cppreference.com/w/cpp/named_req/NullablePointer > (aka Cpp17NullablePointer in the C++ standard). > --------------EP9uVqCKJ2OnrO0A7AuwR0u4 Content-Type: text/plain; charset=UTF-8; name="hashtable_cust_ptr_patch.txt" Content-Disposition: attachment; filename="hashtable_cust_ptr_patch.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlLmggYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5oCmluZGV4IDM2MWRhMmIzYjRk Li44NDU3OTJmN2JhOSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9o YXNodGFibGUuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5o CkBAIC0yMDAsOCArMjAwLDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K IAkJCQkgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz4sCiAgICAgICBwcml2YXRlIF9fZGV0YWls OjpfSGFzaHRhYmxlX2FsbG9jPAogCV9fYWxsb2NfcmViaW5kPF9BbGxvYywKLQkJICAgICAg IF9fZGV0YWlsOjpfSGFzaF9ub2RlPF9WYWx1ZSwKLQkJCQkJICAgIF9UcmFpdHM6Ol9faGFz aF9jYWNoZWQ6OnZhbHVlPj4+LAorCQkgICAgICAgX19kZXRhaWw6Ol9fZ2V0X25vZGVfdHlw ZTxfQWxsb2MsIF9WYWx1ZSwKKwkJCQkJCSBfVHJhaXRzOjpfX2hhc2hfY2FjaGVkOjp2YWx1 ZT4+PiwKICAgICAgIHByaXZhdGUgX0hhc2h0YWJsZV9lbmFibGVfZGVmYXVsdF9jdG9yPF9F cXVhbCwgX0hhc2gsIF9BbGxvYz4KICAgICB7CiAgICAgICBzdGF0aWNfYXNzZXJ0KGlzX3Nh bWU8dHlwZW5hbWUgcmVtb3ZlX2N2PF9WYWx1ZT46OnR5cGUsIF9WYWx1ZT46OnZhbHVlLApA QCAtMjE2LDIxICsyMTYsMjMgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K ICAgICAgIHVzaW5nIF9fdHJhaXRzX3R5cGUgPSBfVHJhaXRzOwogICAgICAgdXNpbmcgX19o YXNoX2NhY2hlZCA9IHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6Ol9faGFzaF9jYWNoZWQ7CiAg ICAgICB1c2luZyBfX2NvbnN0YW50X2l0ZXJhdG9ycyA9IHR5cGVuYW1lIF9fdHJhaXRzX3R5 cGU6Ol9fY29uc3RhbnRfaXRlcmF0b3JzOwotICAgICAgdXNpbmcgX19ub2RlX3R5cGUgPSBf X2RldGFpbDo6X0hhc2hfbm9kZTxfVmFsdWUsIF9faGFzaF9jYWNoZWQ6OnZhbHVlPjsKKyAg ICAgIHVzaW5nIF9fbm9kZV90eXBlID0gX19kZXRhaWw6Ol9fZ2V0X25vZGVfdHlwZTxfQWxs b2MsIF9WYWx1ZSwKKwkJCQkJCV9UcmFpdHM6Ol9faGFzaF9jYWNoZWQ6OnZhbHVlPjsKICAg ICAgIHVzaW5nIF9fbm9kZV9hbGxvY190eXBlID0gX19hbGxvY19yZWJpbmQ8X0FsbG9jLCBf X25vZGVfdHlwZT47Ci0KICAgICAgIHVzaW5nIF9faGFzaHRhYmxlX2FsbG9jID0gX19kZXRh aWw6Ol9IYXNodGFibGVfYWxsb2M8X19ub2RlX2FsbG9jX3R5cGU+OwogCiAgICAgICB1c2lu ZyBfX25vZGVfdmFsdWVfdHlwZSA9CiAJX19kZXRhaWw6Ol9IYXNoX25vZGVfdmFsdWU8X1Zh bHVlLCBfX2hhc2hfY2FjaGVkOjp2YWx1ZT47CiAgICAgICB1c2luZyBfX25vZGVfcHRyID0g dHlwZW5hbWUgX19oYXNodGFibGVfYWxsb2M6Ol9fbm9kZV9wdHI7Ci0gICAgICB1c2luZyBf X3ZhbHVlX2FsbG9jX3RyYWl0cyA9Ci0JdHlwZW5hbWUgX19oYXNodGFibGVfYWxsb2M6Ol9f dmFsdWVfYWxsb2NfdHJhaXRzOwogICAgICAgdXNpbmcgX19ub2RlX2FsbG9jX3RyYWl0cyA9 CiAJdHlwZW5hbWUgX19oYXNodGFibGVfYWxsb2M6Ol9fbm9kZV9hbGxvY190cmFpdHM7Cisg ICAgICB1c2luZyBfX3ZhbHVlX2FsbG9jX3RyYWl0cyA9CisJdHlwZW5hbWUgX19ub2RlX2Fs bG9jX3RyYWl0czo6dGVtcGxhdGUgcmViaW5kX3RyYWl0czxfVmFsdWU+OwogICAgICAgdXNp bmcgX19ub2RlX2Jhc2UgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9hbGxvYzo6X19ub2RlX2Jh c2U7CiAgICAgICB1c2luZyBfX25vZGVfYmFzZV9wdHIgPSB0eXBlbmFtZSBfX2hhc2h0YWJs ZV9hbGxvYzo6X19ub2RlX2Jhc2VfcHRyOworICAgICAgdXNpbmcgX19ub2RlX2Jhc2VfcHRy X3RyYWl0cyA9IHN0ZDo6cG9pbnRlcl90cmFpdHM8X19ub2RlX2Jhc2VfcHRyPjsKICAgICAg IHVzaW5nIF9fYnVja2V0c19wdHIgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9hbGxvYzo6X19i dWNrZXRzX3B0cjsKKyAgICAgIHVzaW5nIF9fYnVja2V0c19wdHJfdHJhaXRzID0gc3RkOjpw b2ludGVyX3RyYWl0czxfX2J1Y2tldHNfcHRyPjsKIAogICAgICAgdXNpbmcgX19pbnNlcnRf YmFzZSA9IF9fZGV0YWlsOjpfSW5zZXJ0PF9LZXksIF9WYWx1ZSwgX0FsbG9jLCBfRXh0cmFj dEtleSwKIAkJCQkJICAgICAgX0VxdWFsLCBfSGFzaCwKQEAgLTI1OCwxNSArMjYwLDE1IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIHVzaW5nIGNvbnN0 X2l0ZXJhdG9yID0gdHlwZW5hbWUgX19pbnNlcnRfYmFzZTo6Y29uc3RfaXRlcmF0b3I7CiAK LSAgICAgIHVzaW5nIGxvY2FsX2l0ZXJhdG9yID0gX19kZXRhaWw6Ol9Mb2NhbF9pdGVyYXRv cjxrZXlfdHlwZSwgX1ZhbHVlLAotCQkJX0V4dHJhY3RLZXksIF9IYXNoLCBfUmFuZ2VIYXNo LCBfVW51c2VkLAotCQkJCQkgICAgIF9fY29uc3RhbnRfaXRlcmF0b3JzOjp2YWx1ZSwKLQkJ CQkJICAgICBfX2hhc2hfY2FjaGVkOjp2YWx1ZT47CisgICAgICB1c2luZyBsb2NhbF9pdGVy YXRvciA9IF9fZGV0YWlsOjpfX2xvY2FsX2l0ZXJhdG9yPAorCV9fbm9kZV9wdHIsIGtleV90 eXBlLCB2YWx1ZV90eXBlLAorCV9FeHRyYWN0S2V5LCBfSGFzaCwgX1JhbmdlSGFzaCwgX1Vu dXNlZCwKKwlfX2NvbnN0YW50X2l0ZXJhdG9yczo6dmFsdWUsIF9faGFzaF9jYWNoZWQ6OnZh bHVlPjsKIAotICAgICAgdXNpbmcgY29uc3RfbG9jYWxfaXRlcmF0b3IgPSBfX2RldGFpbDo6 X0xvY2FsX2NvbnN0X2l0ZXJhdG9yPAotCQkJa2V5X3R5cGUsIF9WYWx1ZSwKLQkJCV9FeHRy YWN0S2V5LCBfSGFzaCwgX1JhbmdlSGFzaCwgX1VudXNlZCwKLQkJCV9fY29uc3RhbnRfaXRl cmF0b3JzOjp2YWx1ZSwgX19oYXNoX2NhY2hlZDo6dmFsdWU+OworICAgICAgdXNpbmcgY29u c3RfbG9jYWxfaXRlcmF0b3IgPSBfX2RldGFpbDo6X19jb25zdF9sb2NhbF9pdGVyYXRvcjwK KwlfX25vZGVfcHRyLCBrZXlfdHlwZSwgdmFsdWVfdHlwZSwKKwlfRXh0cmFjdEtleSwgX0hh c2gsIF9SYW5nZUhhc2gsIF9VbnVzZWQsCisJX19jb25zdGFudF9pdGVyYXRvcnM6OnZhbHVl LCBfX2hhc2hfY2FjaGVkOjp2YWx1ZT47CiAKICAgICBwcml2YXRlOgogICAgICAgdXNpbmcg X19yZWhhc2hfdHlwZSA9IF9SZWhhc2hQb2xpY3k7CkBAIC0zOTIsNyArMzk0LDggQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICNlbmRpZgogCiAgICAgcHJpdmF0ZToK LSAgICAgIF9fYnVja2V0c19wdHIJCV9NX2J1Y2tldHMJCT0gJl9NX3NpbmdsZV9idWNrZXQ7 CisgICAgICBfX2J1Y2tldHNfcHRyCQlfTV9idWNrZXRzID0KKwkJCV9fYnVja2V0c19wdHJf dHJhaXRzOjpwb2ludGVyX3RvKF9NX3NpbmdsZV9idWNrZXQpOwogICAgICAgc2l6ZV90eXBl CQkJX01fYnVja2V0X2NvdW50CQk9IDE7CiAgICAgICBfX25vZGVfYmFzZQkJX01fYmVmb3Jl X2JlZ2luOwogICAgICAgc2l6ZV90eXBlCQkJX01fZWxlbWVudF9jb3VudAk9IDA7CkBAIC00 MDYsMTEgKzQwOSwxOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAg ICAgLy8gbnVtZXJvdXMgY2hlY2tzIGluIHRoZSBjb2RlIHRvIGF2b2lkIDAgbW9kdWx1cy4K ICAgICAgIF9fbm9kZV9iYXNlX3B0cgkJX01fc2luZ2xlX2J1Y2tldAk9IG51bGxwdHI7CiAK KyAgICAgIF9fYnVja2V0c19wdHIKKyAgICAgIF9NX3NpbmdsZV9idWNrZXRfcHRyKCkKKyAg ICAgIHsgcmV0dXJuIF9fYnVja2V0c19wdHJfdHJhaXRzOjpwb2ludGVyX3RvKF9NX3Npbmds ZV9idWNrZXQpOyB9CisKKyAgICAgIF9fbm9kZV9iYXNlX3B0cgorICAgICAgX01fYmVmb3Jl X2JlZ2luX3B0cigpCisgICAgICB7IHJldHVybiBfX25vZGVfYmFzZV9wdHJfdHJhaXRzOjpw b2ludGVyX3RvKF9NX2JlZm9yZV9iZWdpbik7IH0KKwogICAgICAgdm9pZAogICAgICAgX01f dXBkYXRlX2JiZWdpbigpCiAgICAgICB7CiAJaWYgKGF1dG8gX19iZWdpbiA9IF9NX2JlZ2lu KCkpCi0JICBfTV9idWNrZXRzW19NX2J1Y2tldF9pbmRleCgqX19iZWdpbildID0gJl9NX2Jl Zm9yZV9iZWdpbjsKKwkgIF9NX2J1Y2tldHNbX01fYnVja2V0X2luZGV4KCpfX2JlZ2luKV0g PSBfTV9iZWZvcmVfYmVnaW5fcHRyKCk7CiAgICAgICB9CiAKICAgICAgIHZvaWQKQEAgLTQy Miw3ICs0MzMsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogICAg ICAgYm9vbAogICAgICAgX01fdXNlc19zaW5nbGVfYnVja2V0KF9fYnVja2V0c19wdHIgX19i a3RzKSBjb25zdAotICAgICAgeyByZXR1cm4gX19idWlsdGluX2V4cGVjdChfX2JrdHMgPT0g Jl9NX3NpbmdsZV9idWNrZXQsIGZhbHNlKTsgfQorICAgICAgeworCXJldHVybiBfX2J1aWx0 aW5fZXhwZWN0CisJICAoc3RkOjpfX3RvX2FkZHJlc3MoX19ia3RzKSA9PSBzdGQ6OmFkZHJl c3NvZihfTV9zaW5nbGVfYnVja2V0KSwKKwkgICBmYWxzZSk7CisgICAgICB9CiAKICAgICAg IGJvb2wKICAgICAgIF9NX3VzZXNfc2luZ2xlX2J1Y2tldCgpIGNvbnN0CkBAIC00NDQsNyAr NDU5LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAlpZiAoX19idWls dGluX2V4cGVjdChfX2JrdF9jb3VudCA9PSAxLCBmYWxzZSkpCiAJICB7CiAJICAgIF9NX3Np bmdsZV9idWNrZXQgPSBudWxscHRyOwotCSAgICByZXR1cm4gJl9NX3NpbmdsZV9idWNrZXQ7 CisJICAgIHJldHVybiBfTV9zaW5nbGVfYnVja2V0X3B0cigpOwogCSAgfQogCiAJcmV0dXJu IF9faGFzaHRhYmxlX2FsbG9jOjpfTV9hbGxvY2F0ZV9idWNrZXRzKF9fYmt0X2NvdW50KTsK QEAgLTQ2MywxOCArNDc4LDI2IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O CiAgICAgICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoKQogICAgICAgeyBfTV9kZWFsbG9jYXRl X2J1Y2tldHMoX01fYnVja2V0cywgX01fYnVja2V0X2NvdW50KTsgfQogCisgICAgICBzdGF0 aWMgX19ub2RlX3B0cgorICAgICAgX1NfY2FzdChfX25vZGVfcHRyIF9fbikKKyAgICAgIHsg cmV0dXJuIF9fbjsgfQorCisgICAgICBzdGF0aWMgX19ub2RlX3B0cgorICAgICAgX1NfY2Fz dChfX2RldGFpbDo6X0hhc2hfbm9kZV9iYXNlKiBfX24pCisgICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxfX25vZGVfcHRyPihfX24pOyB9CisKICAgICAgIC8vIEdldHMgYnVja2V0IGJl Z2luLCBkZWFscyB3aXRoIHRoZSBmYWN0IHRoYXQgbm9uLWVtcHR5IGJ1Y2tldHMgY29udGFp bgogICAgICAgLy8gdGhlaXIgYmVmb3JlIGJlZ2luIG5vZGUuCiAgICAgICBfX25vZGVfcHRy CiAgICAgICBfTV9idWNrZXRfYmVnaW4oc2l6ZV90eXBlIF9fYmt0KSBjb25zdAogICAgICAg ewogCV9fbm9kZV9iYXNlX3B0ciBfX24gPSBfTV9idWNrZXRzW19fYmt0XTsKLQlyZXR1cm4g X19uID8gc3RhdGljX2Nhc3Q8X19ub2RlX3B0cj4oX19uLT5fTV9ueHQpIDogbnVsbHB0cjsK KwlyZXR1cm4gX19uID8gX1NfY2FzdChfX24tPl9NX254dCkgOiBfX25vZGVfcHRye307CiAg ICAgICB9CiAKICAgICAgIF9fbm9kZV9wdHIKICAgICAgIF9NX2JlZ2luKCkgY29uc3QKLSAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9fbm9kZV9wdHI+KF9NX2JlZm9yZV9iZWdpbi5f TV9ueHQpOyB9CisgICAgICB7IHJldHVybiBfU19jYXN0KF9NX2JlZm9yZV9iZWdpbi5fTV9u eHQpOyB9CiAKICAgICAgIC8vIEFzc2lnbiAqdGhpcyB1c2luZyBhbm90aGVyIF9IYXNodGFi bGUgaW5zdGFuY2UuIFdoZXRoZXIgZWxlbWVudHMKICAgICAgIC8vIGFyZSBjb3BpZWQgb3Ig bW92ZWQgZGVwZW5kcyBvbiB0aGUgX0h0IHJlZmVyZW5jZS4KQEAgLTgyNCw4ICs4NDcsOCBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgewogCV9fbm9kZV9i YXNlX3B0ciBfX2JlZm9yZV9uID0gX01fZmluZF9iZWZvcmVfbm9kZShfX2JrdCwgX19rZXks IF9fYyk7CiAJaWYgKF9fYmVmb3JlX24pCi0JICByZXR1cm4gc3RhdGljX2Nhc3Q8X19ub2Rl X3B0cj4oX19iZWZvcmVfbi0+X01fbnh0KTsKLQlyZXR1cm4gbnVsbHB0cjsKKwkgIHJldHVy biBfU19jYXN0KF9fYmVmb3JlX24tPl9NX254dCk7CisJcmV0dXJuIF9fbm9kZV9wdHJ7fTsK ICAgICAgIH0KIAogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0t0PgpAQCAtODM1LDggKzg1 OCw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJewogCSAgYXV0byBf X2JlZm9yZV9uID0gX01fZmluZF9iZWZvcmVfbm9kZV90cihfX2JrdCwgX19rZXksIF9fYyk7 CiAJICBpZiAoX19iZWZvcmVfbikKLQkgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9fbm9kZV9w dHI+KF9fYmVmb3JlX24tPl9NX254dCk7Ci0JICByZXR1cm4gbnVsbHB0cjsKKwkgICAgcmV0 dXJuIF9TX2Nhc3QoX19iZWZvcmVfbi0+X01fbnh0KTsKKwkgIHJldHVybiBfX25vZGVfcHRy e307CiAJfQogCiAgICAgICAvLyBJbnNlcnQgYSBub2RlIGF0IHRoZSBiZWdpbm5pbmcgb2Yg YSBidWNrZXQuCkBAIC04NjMsNyArODg2LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X1ZFUlNJT04KIAkgICAgICAvLyBfTV9iZWZvcmVfYmVnaW4uCiAJICAgICAgX01fYnVja2V0 c1tfTV9idWNrZXRfaW5kZXgoKl9fbm9kZS0+X01fbmV4dCgpKV0gPSBfX25vZGU7CiAKLQkg ICAgX01fYnVja2V0c1tfX2JrdF0gPSAmX01fYmVmb3JlX2JlZ2luOworCSAgICBfTV9idWNr ZXRzW19fYmt0XSA9IF9NX2JlZm9yZV9iZWdpbl9wdHIoKTsKIAkgIH0KICAgICAgIH0KIApA QCAtMTA1MSw3ICsxMDc0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K IAkgIHsKIAkgICAgX19nbGliY3h4X2Fzc2VydChnZXRfYWxsb2NhdG9yKCkgPT0gX19uaC5n ZXRfYWxsb2NhdG9yKCkpOwogCi0JICAgIF9fbm9kZV9wdHIgX19uID0gbnVsbHB0cjsKKwkg ICAgX19ub2RlX3B0ciBfX257fTsKIAkgICAgY29uc3Qga2V5X3R5cGUmIF9fayA9IF9fbmgu X01fa2V5KCk7CiAJICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSBzaXplKCk7CiAJICAg IGlmIChfX3NpemUgPD0gX19zbWFsbF9zaXplX3RocmVzaG9sZCgpKQpAQCAtMTEwOSw3ICsx MTMyLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIG5vZGVf dHlwZQogICAgICAgX01fZXh0cmFjdF9ub2RlKHNpemVfdCBfX2JrdCwgX19ub2RlX2Jhc2Vf cHRyIF9fcHJldl9uKQogICAgICAgewotCV9fbm9kZV9wdHIgX19uID0gc3RhdGljX2Nhc3Q8 X19ub2RlX3B0cj4oX19wcmV2X24tPl9NX254dCk7CisJX19ub2RlX3B0ciBfX24gPSBfU19j YXN0KF9fcHJldl9uLT5fTV9ueHQpOwogCWlmIChfX3ByZXZfbiA9PSBfTV9idWNrZXRzW19f Ymt0XSkKIAkgIF9NX3JlbW92ZV9idWNrZXRfYmVnaW4oX19ia3QsIF9fbi0+X01fbmV4dCgp LAogCSAgICAgX19uLT5fTV9ueHQgPyBfTV9idWNrZXRfaW5kZXgoKl9fbi0+X01fbmV4dCgp KSA6IDApOwpAQCAtMTE1Nyw3ICsxMTgwLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X1ZFUlNJT04KIAlub2RlX3R5cGUgX19uaDsKIAlfX2hhc2hfY29kZSBfX2NvZGUgPSB0aGlz LT5fTV9oYXNoX2NvZGUoX19rKTsKIAlzdGQ6OnNpemVfdCBfX2JrdCA9IF9NX2J1Y2tldF9p bmRleChfX2NvZGUpOwotCWlmIChfX25vZGVfYmFzZV9wdHIgX19wcmV2X25vZGUgPSBfTV9m aW5kX2JlZm9yZV9ub2RlKF9fYmt0LCBfX2ssIF9fY29kZSkpCisJaWYgKGF1dG8gX19wcmV2 X25vZGUgPSBfTV9maW5kX2JlZm9yZV9ub2RlKF9fYmt0LCBfX2ssIF9fY29kZSkpCiAJICBf X25oID0gX01fZXh0cmFjdF9ub2RlKF9fYmt0LCBfX3ByZXZfbm9kZSk7CiAJcmV0dXJuIF9f bmg7CiAgICAgICB9CkBAIC0xMTk5LDcgKzEyMjIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfVkVSU0lPTgogCQk9IF9NX3NyY19oYXNoX2NvZGUoX19zcmMuaGFzaF9mdW5jdGlv bigpLCBfX2ssICpfX3Bvcy5fTV9jdXIpOwogCSAgICAgIHNpemVfdHlwZSBfX2JrdCA9IF9N X2J1Y2tldF9pbmRleChfX2NvZGUpOwogCSAgICAgIGlmIChfX3NpemUgPD0gX19zbWFsbF9z aXplX3RocmVzaG9sZCgpCi0JCSAgfHwgX01fZmluZF9ub2RlKF9fYmt0LCBfX2ssIF9fY29k ZSkgPT0gbnVsbHB0cikKKwkJICB8fCAhX01fZmluZF9ub2RlKF9fYmt0LCBfX2ssIF9fY29k ZSkpCiAJCXsKIAkJICBhdXRvIF9fbmggPSBfX3NyYy5leHRyYWN0KF9fcG9zKTsKIAkJICBf TV9pbnNlcnRfdW5pcXVlX25vZGUoX19ia3QsIF9fY29kZSwgX19uaC5fTV9wdHIsIF9fbl9l bHQpOwpAQCAtMTIyMCw3ICsxMjQzLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZF UlNJT04KIAkgICAgICBub2RlX3R5cGU+LCAiTm9kZSB0eXBlcyBhcmUgY29tcGF0aWJsZSIp OwogCSAgX19nbGliY3h4X2Fzc2VydChnZXRfYWxsb2NhdG9yKCkgPT0gX19zcmMuZ2V0X2Fs bG9jYXRvcigpKTsKIAotCSAgX19ub2RlX3B0ciBfX2hpbnQgPSBudWxscHRyOworCSAgX19u b2RlX3B0ciBfX2hpbnR7fTsKIAkgIHRoaXMtPnJlc2VydmUoc2l6ZSgpICsgX19zcmMuc2l6 ZSgpKTsKIAkgIGZvciAoYXV0byBfX2kgPSBfX3NyYy5jYmVnaW4oKSwgX19lbmQgPSBfX3Ny Yy5jZW5kKCk7IF9faSAhPSBfX2VuZDspCiAJICAgIHsKQEAgLTEzNjgsNyArMTM5MSw3IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJCSBfSGFzaCwgX1JhbmdlSGFz aCwgX1VudXNlZCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgogICAgICAgX01fYXNzaWdu X2VsZW1lbnRzKF9IdCYmIF9faHQpCiAgICAgICB7Ci0JX19idWNrZXRzX3B0ciBfX2Zvcm1l cl9idWNrZXRzID0gbnVsbHB0cjsKKwlfX2J1Y2tldHNfcHRyIF9fZm9ybWVyX2J1Y2tldHN7 fTsKIAlzdGQ6OnNpemVfdCBfX2Zvcm1lcl9idWNrZXRfY291bnQgPSBfTV9idWNrZXRfY291 bnQ7CiAJX19yZWhhc2hfZ3VhcmRfdCBfX3JlaGFzaF9ndWFyZChfTV9yZWhhc2hfcG9saWN5 KTsKIApAQCAtMTQxNyw3ICsxNDQwLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZF UlNJT04KIAkJIF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51c2VkLCBfUmVoYXNoUG9saWN5LCBf VHJhaXRzPjo6CiAgICAgICBfTV9hc3NpZ24oX0h0JiYgX19odCwgY29uc3QgX05vZGVHZW5l cmF0b3ImIF9fbm9kZV9nZW4pCiAgICAgICB7Ci0JX19idWNrZXRzX3B0ciBfX2J1Y2tldHMg PSBudWxscHRyOworCV9fYnVja2V0c19wdHIgX19idWNrZXRze307CiAJaWYgKCFfTV9idWNr ZXRzKQogCSAgX01fYnVja2V0cyA9IF9fYnVja2V0cyA9IF9NX2FsbG9jYXRlX2J1Y2tldHMo X01fYnVja2V0X2NvdW50KTsKIApAQCAtMTQ2OCw3ICsxNDkxLDcgQEAgX0dMSUJDWFhfQkVH SU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9NX3JlaGFzaF9wb2xpY3kuX01fcmVzZXQo KTsKICAgICAgIF9NX2J1Y2tldF9jb3VudCA9IDE7CiAgICAgICBfTV9zaW5nbGVfYnVja2V0 ID0gbnVsbHB0cjsKLSAgICAgIF9NX2J1Y2tldHMgPSAmX01fc2luZ2xlX2J1Y2tldDsKKyAg ICAgIF9NX2J1Y2tldHMgPSBfTV9zaW5nbGVfYnVja2V0X3B0cigpOwogICAgICAgX01fYmVm b3JlX2JlZ2luLl9NX254dCA9IG51bGxwdHI7CiAgICAgICBfTV9lbGVtZW50X2NvdW50ID0g MDsKICAgICB9CkBAIC0xNDkzLDcgKzE1MTYsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfVkVSU0lPTgogCV9NX2J1Y2tldHMgPSBfX2h0Ll9NX2J1Y2tldHM7CiAgICAgICBlbHNl CiAJewotCSAgX01fYnVja2V0cyA9ICZfTV9zaW5nbGVfYnVja2V0OworCSAgX01fYnVja2V0 cyA9IF9NX3NpbmdsZV9idWNrZXRfcHRyKCk7CiAJICBfTV9zaW5nbGVfYnVja2V0ID0gX19o dC5fTV9zaW5nbGVfYnVja2V0OwogCX0KIApAQCAtMTU3MSw3ICsxNTk0LDcgQEAgX0dMSUJD WFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIC8vIFVwZGF0ZSBidWNrZXRzIGlm IF9faHQgaXMgdXNpbmcgaXRzIHNpbmdsZSBidWNrZXQuCiAgICAgICBpZiAoX19odC5fTV91 c2VzX3NpbmdsZV9idWNrZXQoKSkKIAl7Ci0JICBfTV9idWNrZXRzID0gJl9NX3NpbmdsZV9i dWNrZXQ7CisJICBfTV9idWNrZXRzID0gX01fc2luZ2xlX2J1Y2tldF9wdHIoKTsKIAkgIF9N X3NpbmdsZV9idWNrZXQgPSBfX2h0Ll9NX3NpbmdsZV9idWNrZXQ7CiAJfQogCkBAIC0xNjI0 LDcgKzE2NDcsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCXsKIAkg IGlmIChfX2h0Ll9NX3VzZXNfc2luZ2xlX2J1Y2tldCgpKQogCSAgICB7Ci0JICAgICAgX01f YnVja2V0cyA9ICZfTV9zaW5nbGVfYnVja2V0OworCSAgICAgIF9NX2J1Y2tldHMgPSBfTV9z aW5nbGVfYnVja2V0X3B0cigpOwogCSAgICAgIF9NX3NpbmdsZV9idWNrZXQgPSBfX2h0Ll9N X3NpbmdsZV9idWNrZXQ7CiAJICAgIH0KIAkgIGVsc2UKQEAgLTE2OTQsMTMgKzE3MTcsMTMg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkgIGlmICghX194Ll9NX3Vz ZXNfc2luZ2xlX2J1Y2tldCgpKQogCSAgICB7CiAJICAgICAgX01fYnVja2V0cyA9IF9feC5f TV9idWNrZXRzOwotCSAgICAgIF9feC5fTV9idWNrZXRzID0gJl9feC5fTV9zaW5nbGVfYnVj a2V0OworCSAgICAgIF9feC5fTV9idWNrZXRzID0gX194Ll9NX3NpbmdsZV9idWNrZXRfcHRy KCk7CiAJICAgIH0KIAl9CiAgICAgICBlbHNlIGlmIChfX3guX01fdXNlc19zaW5nbGVfYnVj a2V0KCkpCiAJewogCSAgX194Ll9NX2J1Y2tldHMgPSBfTV9idWNrZXRzOwotCSAgX01fYnVj a2V0cyA9ICZfTV9zaW5nbGVfYnVja2V0OworCSAgX01fYnVja2V0cyA9IF9NX3NpbmdsZV9i dWNrZXRfcHRyKCk7CiAJfQkKICAgICAgIGVsc2UKIAlzdGQ6OnN3YXAoX01fYnVja2V0cywg X194Ll9NX2J1Y2tldHMpOwpAQCAtMTk0Nyw3ICsxOTcwLDcgQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIHsKIAlpZiAoc2l6ZSgpIDw9IF9fc21hbGxfc2l6 ZV90aHJlc2hvbGQoKSkKIAkgIHsKLQkgICAgX19ub2RlX3B0ciBfX24sIF9fYmVnID0gbnVs bHB0cjsKKwkgICAgX19ub2RlX3B0ciBfX24sIF9fYmVne307CiAJICAgIGZvciAoX19uID0g X01fYmVnaW4oKTsgX19uOyBfX24gPSBfX24tPl9NX25leHQoKSkKIAkgICAgICB7CiAJCWlm ICh0aGlzLT5fTV9rZXlfZXF1YWxzX3RyKF9faywgKl9fbikpCkBAIC0xOTkxLDcgKzIwMTQs NyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgewogCWlmIChz aXplKCkgPD0gX19zbWFsbF9zaXplX3RocmVzaG9sZCgpKQogCSAgewotCSAgICBfX25vZGVf cHRyIF9fbiwgX19iZWcgPSBudWxscHRyOworCSAgICBfX25vZGVfcHRyIF9fbiwgX19iZWd7 fTsKIAkgICAgZm9yIChfX24gPSBfTV9iZWdpbigpOyBfX247IF9fbiA9IF9fbi0+X01fbmV4 dCgpKQogCSAgICAgIHsKIAkJaWYgKHRoaXMtPl9NX2tleV9lcXVhbHNfdHIoX19rLCAqX19u KSkKQEAgLTIwMzUsMTIgKzIwNTgsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZF UlNJT04KICAgICBfTV9maW5kX2JlZm9yZV9ub2RlKGNvbnN0IGtleV90eXBlJiBfX2spCiAg ICAgLT4gX19ub2RlX2Jhc2VfcHRyCiAgICAgewotICAgICAgX19ub2RlX2Jhc2VfcHRyIF9f cHJldl9wID0gJl9NX2JlZm9yZV9iZWdpbjsKKyAgICAgIF9fbm9kZV9iYXNlX3B0ciBfX3By ZXZfcCA9IF9NX2JlZm9yZV9iZWdpbl9wdHIoKTsKICAgICAgIGlmICghX19wcmV2X3AtPl9N X254dCkKLQlyZXR1cm4gbnVsbHB0cjsKKwlyZXR1cm4ge307CiAKLSAgICAgIGZvciAoX19u b2RlX3B0ciBfX3AgPSBzdGF0aWNfY2FzdDxfX25vZGVfcHRyPihfX3ByZXZfcC0+X01fbnh0 KTsKLQkgICBfX3AgIT0gbnVsbHB0cjsKKyAgICAgIGZvciAoX19ub2RlX3B0ciBfX3AgPSBf U19jYXN0KF9fcHJldl9wLT5fTV9ueHQpOyBfX3A7CiAJICAgX19wID0gX19wLT5fTV9uZXh0 KCkpCiAJewogCSAgaWYgKHRoaXMtPl9NX2tleV9lcXVhbHMoX19rLCAqX19wKSkKQEAgLTIw NDksNyArMjA3MSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJICBf X3ByZXZfcCA9IF9fcDsKIAl9CiAKLSAgICAgIHJldHVybiBudWxscHRyOworICAgICAgcmV0 dXJuIHt9OwogICAgIH0KIAogICAvLyBGaW5kIHRoZSBub2RlIGJlZm9yZSB0aGUgb25lIHdo b3NlIGtleSBjb21wYXJlcyBlcXVhbCB0byBrIGluIHRoZSBidWNrZXQKQEAgLTIwNjcsMTAg KzIwODksOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIHsKICAg ICAgIF9fbm9kZV9iYXNlX3B0ciBfX3ByZXZfcCA9IF9NX2J1Y2tldHNbX19ia3RdOwogICAg ICAgaWYgKCFfX3ByZXZfcCkKLQlyZXR1cm4gbnVsbHB0cjsKKwlyZXR1cm4ge307CiAKLSAg ICAgIGZvciAoX19ub2RlX3B0ciBfX3AgPSBzdGF0aWNfY2FzdDxfX25vZGVfcHRyPihfX3By ZXZfcC0+X01fbnh0KTs7Ci0JICAgX19wID0gX19wLT5fTV9uZXh0KCkpCisgICAgICBmb3Ig KF9fbm9kZV9wdHIgX19wID0gX1NfY2FzdChfX3ByZXZfcC0+X01fbnh0KTs7IF9fcCA9IF9f cC0+X01fbmV4dCgpKQogCXsKIAkgIGlmICh0aGlzLT5fTV9lcXVhbHMoX19rLCBfX2NvZGUs ICpfX3ApKQogCSAgICByZXR1cm4gX19wcmV2X3A7CkBAIC0yMDgwLDcgKzIxMDEsNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAgX19wcmV2X3AgPSBfX3A7CiAJ fQogCi0gICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgIHJldHVybiB7fTsKICAgICB9CiAK ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBf QWxsb2MsCkBAIC0yMDk3LDEwICsyMTE4LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X1ZFUlNJT04KICAgICAgIHsKIAlfX25vZGVfYmFzZV9wdHIgX19wcmV2X3AgPSBfTV9idWNr ZXRzW19fYmt0XTsKIAlpZiAoIV9fcHJldl9wKQotCSAgcmV0dXJuIG51bGxwdHI7CisJICBy ZXR1cm4ge307CiAKLQlmb3IgKF9fbm9kZV9wdHIgX19wID0gc3RhdGljX2Nhc3Q8X19ub2Rl X3B0cj4oX19wcmV2X3AtPl9NX254dCk7OwotCSAgICAgX19wID0gX19wLT5fTV9uZXh0KCkp CisJZm9yIChfX25vZGVfcHRyIF9fcCA9IF9TX2Nhc3QoX19wcmV2X3AtPl9NX254dCk7OyBf X3AgPSBfX3AtPl9NX25leHQoKSkKIAkgIHsKIAkgICAgaWYgKHRoaXMtPl9NX2VxdWFsc190 cihfX2ssIF9fY29kZSwgKl9fcCkpCiAJICAgICAgcmV0dXJuIF9fcHJldl9wOwpAQCAtMjEx MCw3ICsyMTMwLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkgICAg X19wcmV2X3AgPSBfX3A7CiAJICB9CiAKLQlyZXR1cm4gbnVsbHB0cjsKKwlyZXR1cm4ge307 CiAgICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVl LCB0eXBlbmFtZSBfQWxsb2MsCkBAIC0yMjczLDEwICsyMjkzLDExIEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIC8vIEZpbmQgdGhlIG5vZGUgYmVmb3Jl IGFuIGVxdWl2YWxlbnQgb25lIG9yIHVzZSBoaW50IGlmIGl0IGV4aXN0cyBhbmQKICAgICAg IC8vIGlmIGl0IGlzIGVxdWl2YWxlbnQuCisgICAgICBfX25vZGVfYmFzZV9wdHIgX19oaW50 X2Jhc2UgPSBfX2hpbnQ7CiAgICAgICBfX25vZGVfYmFzZV9wdHIgX19wcmV2Ci0JPSBfX2J1 aWx0aW5fZXhwZWN0KF9faGludCAhPSBudWxscHRyLCBmYWxzZSkKKwk9IF9fYnVpbHRpbl9l eHBlY3QoX19oaW50ID8gMSA6IDAsIDApCiAJICAmJiB0aGlzLT5fTV9lcXVhbHMoX19rLCBf X2NvZGUsICpfX2hpbnQpCi0JICAgID8gX19oaW50CisJICAgID8gX19oaW50X2Jhc2UKIAkg ICAgOiBfTV9maW5kX2JlZm9yZV9ub2RlKF9fYmt0LCBfX2ssIF9fY29kZSk7CiAKICAgICAg IGlmIChfX3ByZXYpCkBAIC0yNDM3LDcgKzI0NTgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfVkVSU0lPTgogCSAgICByZXR1cm4gMDsKIAogCSAgLy8gV2UgZm91bmQgYSBtYXRj aGluZyBub2RlLCBlcmFzZSBpdC4KLQkgIF9fbiA9IHN0YXRpY19jYXN0PF9fbm9kZV9wdHI+ KF9fcHJldl9uLT5fTV9ueHQpOworCSAgX19uID0gX1NfY2FzdChfX3ByZXZfbi0+X01fbnh0 KTsKIAkgIF9fYmt0ID0gX01fYnVja2V0X2luZGV4KCpfX24pOwogCX0KICAgICAgIGVsc2UK QEAgLTI0NTEsNyArMjQ3Miw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O CiAJICAgIHJldHVybiAwOwogCiAJICAvLyBXZSBmb3VuZCBhIG1hdGNoaW5nIG5vZGUsIGVy YXNlIGl0LgotCSAgX19uID0gc3RhdGljX2Nhc3Q8X19ub2RlX3B0cj4oX19wcmV2X24tPl9N X254dCk7CisJICBfX24gPSBfU19jYXN0KF9fcHJldl9uLT5fTV9ueHQpOwogCX0KIAogICAg ICAgX01fZXJhc2UoX19ia3QsIF9fcHJldl9uLCBfX24pOwpAQCAtMjQ3OCw3ICsyNDk5LDcg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkgICAgcmV0dXJuIDA7CiAK IAkgIC8vIFdlIGZvdW5kIGEgbWF0Y2hpbmcgbm9kZSwgZXJhc2UgaXQuCi0JICBfX24gPSBz dGF0aWNfY2FzdDxfX25vZGVfcHRyPihfX3ByZXZfbi0+X01fbnh0KTsKKwkgIF9fbiA9IF9T X2Nhc3QoX19wcmV2X24tPl9NX254dCk7CiAJICBfX2JrdCA9IF9NX2J1Y2tldF9pbmRleCgq X19uKTsKIAl9CiAgICAgICBlbHNlCkBAIC0yNDkxLDcgKzI1MTIsNyBAQCBfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAgaWYgKCFfX3ByZXZfbikKIAkgICAgcmV0dXJu IDA7CiAKLQkgIF9fbiA9IHN0YXRpY19jYXN0PF9fbm9kZV9wdHI+KF9fcHJldl9uLT5fTV9u eHQpOworCSAgX19uID0gX1NfY2FzdChfX3ByZXZfbi0+X01fbnh0KTsKIAl9CiAKICAgICAg IC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKQEAgLTI2MzMsNyArMjY1NCw3IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJICAgIHsKIAkgICAgICBfX3At Pl9NX254dCA9IF9NX2JlZm9yZV9iZWdpbi5fTV9ueHQ7CiAJICAgICAgX01fYmVmb3JlX2Jl Z2luLl9NX254dCA9IF9fcDsKLQkgICAgICBfX25ld19idWNrZXRzW19fYmt0XSA9ICZfTV9i ZWZvcmVfYmVnaW47CisJICAgICAgX19uZXdfYnVja2V0c1tfX2JrdF0gPSBfTV9iZWZvcmVf YmVnaW5fcHRyKCk7CiAJICAgICAgaWYgKF9fcC0+X01fbnh0KQogCQlfX25ld19idWNrZXRz W19fYmJlZ2luX2JrdF0gPSBfX3A7CiAJICAgICAgX19iYmVnaW5fYmt0ID0gX19ia3Q7CkBA IC0yNjY4LDcgKzI2ODksNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgog ICAgICAgX01fYmVmb3JlX2JlZ2luLl9NX254dCA9IG51bGxwdHI7CiAgICAgICBzdGQ6OnNp emVfdCBfX2JiZWdpbl9ia3QgPSAwOwogICAgICAgc3RkOjpzaXplX3QgX19wcmV2X2JrdCA9 IDA7Ci0gICAgICBfX25vZGVfcHRyIF9fcHJldl9wID0gbnVsbHB0cjsKKyAgICAgIF9fbm9k ZV9wdHIgX19wcmV2X3B7fTsKICAgICAgIGJvb2wgX19jaGVja19idWNrZXQgPSBmYWxzZTsK IAogICAgICAgd2hpbGUgKF9fcCkKQEAgLTI3MTMsNyArMjczNCw3IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJCXsKIAkJICBfX3AtPl9NX254dCA9IF9NX2JlZm9y ZV9iZWdpbi5fTV9ueHQ7CiAJCSAgX01fYmVmb3JlX2JlZ2luLl9NX254dCA9IF9fcDsKLQkJ ICBfX25ld19idWNrZXRzW19fYmt0XSA9ICZfTV9iZWZvcmVfYmVnaW47CisJCSAgX19uZXdf YnVja2V0c1tfX2JrdF0gPSBfTV9iZWZvcmVfYmVnaW5fcHRyKCk7CiAJCSAgaWYgKF9fcC0+ X01fbnh0KQogCQkgICAgX19uZXdfYnVja2V0c1tfX2JiZWdpbl9ia3RdID0gX19wOwogCQkg IF9fYmJlZ2luX2JrdCA9IF9fYmt0OwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9oYXNodGFibGVfcG9saWN5LmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz L2hhc2h0YWJsZV9wb2xpY3kuaAppbmRleCAyNmRlZjI0ZjI0ZS4uMjI1MzgxY2NiNzIgMTAw NjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlX3BvbGljeS5o CisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlX3BvbGljeS5oCkBA IC0zMyw4ICszMyw5IEBACiAKICNpbmNsdWRlIDx0dXBsZT4JCS8vIGZvciBzdGQ6OnR1cGxl LCBzdGQ6OmZvcndhcmRfYXNfdHVwbGUKICNpbmNsdWRlIDxiaXRzL2Z1bmN0aW9uYWxfaGFz aC5oPiAvLyBmb3IgX19pc19mYXN0X2hhc2gKLSNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFz ZS5oPgkvLyBmb3Igc3RkOjptaW4sIHN0ZDo6aXNfcGVybXV0YXRpb24uCisjaW5jbHVkZSA8 Yml0cy9zdGxfYWxnb2Jhc2UuaD4JLy8gZm9yIHN0ZDo6bWluLCBzdGQ6OmlzX3Blcm11dGF0 aW9uCiAjaW5jbHVkZSA8Yml0cy9zdGxfcGFpci5oPgkvLyBmb3Igc3RkOjpwYWlyCisjaW5j bHVkZSA8Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oPiAvLyBmb3IgX191bmluaXRpYWxpemVk X2RlZmF1bHRfbgogI2luY2x1ZGUgPGV4dC9hbGlnbmVkX2J1ZmZlci5oPgkvLyBmb3IgX19n bnVfY3h4OjpfX2FsaWduZWRfYnVmZmVyCiAjaW5jbHVkZSA8ZXh0L2FsbG9jX3RyYWl0cy5o PgkvLyBmb3Igc3RkOjpfX2FsbG9jX3JlYmluZAogI2luY2x1ZGUgPGV4dC9udW1lcmljX3Ry YWl0cy5oPgkvLyBmb3IgX19nbnVfY3h4OjpfX2ludF90cmFpdHMKQEAgLTgyLDYgKzgzLDEx IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogICAgIHsgcmV0dXJuIF9fZGlzdGFuY2VfZncoX19m aXJzdCwgX19sYXN0LAogCQkJICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp KTsgfQogCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1ZhbHVlPgor ICAgIHVzaW5nIF9fYWxsb2NfdmFsX3B0ciA9CisgICAgICB0eXBlbmFtZSBzdGQ6OmFsbG9j YXRvcl90cmFpdHM8X19hbGxvY19yZWJpbmQ8X0FsbG9jLAorCQkJCQkJICAgIF9WYWx1ZT4+ Ojpwb2ludGVyOworCiAgIHN0cnVjdCBfSWRlbnRpdHkKICAgewogICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KQEAgLTMyMSw2ICszMjcsMjggQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAg ICAgX0hhc2hfbm9kZV9iYXNlKF9IYXNoX25vZGVfYmFzZSogX19uZXh0KSBub2V4Y2VwdCA6 IF9NX254dChfX25leHQpIHsgfQogICB9OwogCisgIC8qKgorICAgKiBzdHJ1Y3QgX0hhc2hf cG5vZGVfYmFzZQorICAgKgorICAgKiBMaWtlIF9IYXNoX25vZGVfYmFzZSBidXQgdXNlZCBp biBjYXNlIG9mIGN1c3RvbSBwb2ludGVyIHR5cGUgZGVmaW5lZCBieSB0aGUKKyAgICogYWxs b2NhdG9yLgorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX05vZGVQdHI+CisgICAgc3Ry dWN0IF9IYXNoX3Bub2RlX2Jhc2UKKyAgICB7CisgICAgICB1c2luZyBfX25vZGVfcHRyID0g X05vZGVQdHI7CisKKyAgICAgIF9fbm9kZV9wdHIgX01fbnh0OworCisgICAgICBfSGFzaF9w bm9kZV9iYXNlKCkKKyAgICAgIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19kZWZhdWx0X2Nv bnN0cnVjdGlibGU8X19ub2RlX3B0cj46OnZhbHVlKQorICAgICAgOiBfTV9ueHQoKSB7IH0K KworICAgICAgX0hhc2hfcG5vZGVfYmFzZShfX25vZGVfcHRyIF9fbmV4dCkKKyAgICAgIG5v ZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb3B5X2NvbnN0cnVjdGlibGU8X19ub2RlX3B0cj46 OnZhbHVlKQorICAgICAgOiBfTV9ueHQoX19uZXh0KSB7IH0KKyAgICB9OworCiAgIC8qKgog ICAgKiAgc3RydWN0IF9IYXNoX25vZGVfdmFsdWVfYmFzZQogICAgKgpAQCAtMzU2LDE4ICsz ODQsMjMgQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAKICAgLyoqCiAgICAqICBQcmltYXJ5IHRl bXBsYXRlIHN0cnVjdCBfSGFzaF9ub2RlX2NvZGVfY2FjaGUuCisgICAqCisgICAqICBObyBj YWNoZS4KICAgICovCiAgIHRlbXBsYXRlPGJvb2wgX0NhY2hlX2hhc2hfY29kZT4KICAgICBz dHJ1Y3QgX0hhc2hfbm9kZV9jb2RlX2NhY2hlCiAgICAgeyB9OwogCiAgIC8qKgotICAgKiAg U3BlY2lhbGl6YXRpb24gZm9yIG5vZGUgd2l0aCBjYWNoZSwgc3RydWN0IF9IYXNoX25vZGVf Y29kZV9jYWNoZS4KKyAgICogIFNwZWNpYWxpemF0aW9uIGZvciBub2RlIHdpdGggY2FjaGUu CiAgICAqLwogICB0ZW1wbGF0ZTw+CiAgICAgc3RydWN0IF9IYXNoX25vZGVfY29kZV9jYWNo ZTx0cnVlPgogICAgIHsgc3RkOjpzaXplX3QgIF9NX2hhc2hfY29kZTsgfTsKIAorICAvKioK KyAgICogTm9kZSB3aXRoIHZhbHVlIGFuZCBvcHRpb25hbGx5IGEgY2FjaGUgZm9yIHRoZSBo YXNoIGNvZGUuCisgICAqLwogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIGJvb2wgX0Nh Y2hlX2hhc2hfY29kZT4KICAgICBzdHJ1Y3QgX0hhc2hfbm9kZV92YWx1ZQogICAgIDogX0hh c2hfbm9kZV92YWx1ZV9iYXNlPF9WYWx1ZT4KQEAgLTM3NSwyOCArNDA4LDY0IEBAIG5hbWVz cGFjZSBfX2RldGFpbAogICAgIHsgfTsKIAogICAvKioKLSAgICogIFByaW1hcnkgdGVtcGxh dGUgc3RydWN0IF9IYXNoX25vZGUuCisgICAqICBzdHJ1Y3QgX0hhc2hfbm9kZS4KKyAgICoK KyAgICogIFRoZSBub2RlIGRlZmluaXRpb24gd2hlbiB0aGUgYWxsb2NhdG9yIGlzIHVzaW5n IHJhdyBwb2ludGVycy4KICAgICovCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9v bCBfQ2FjaGVfaGFzaF9jb2RlPgogICAgIHN0cnVjdCBfSGFzaF9ub2RlCiAgICAgOiBfSGFz aF9ub2RlX2Jhc2UKICAgICAsIF9IYXNoX25vZGVfdmFsdWU8X1ZhbHVlLCBfQ2FjaGVfaGFz aF9jb2RlPgogICAgIHsKLSAgICAgIF9IYXNoX25vZGUqCisgICAgICB1c2luZyBfX25vZGVf cHRyID0gX0hhc2hfbm9kZSo7CisgICAgICB1c2luZyBfX25vZGVfdHlwZSA9IF9IYXNoX25v ZGU7CisKKyAgICAgIF9fbm9kZV9wdHIKKyAgICAgIF9NX25leHQoKSBjb25zdCBub2V4Y2Vw dAorICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X19ub2RlX3B0cj4odGhpcy0+X01fbnh0 KTsgfQorICAgIH07CisKKyAgLyoqCisgICAqICBzdHJ1Y3QgX0hhc2hfcG5vZGUuCisgICAq CisgICAqICBUaGUgbm9kZSBkZWZpbml0aW9uIHVzZWQgd2hlbiB0aGUgYWxsb2NhdG9yIGRl ZmluZSBhIGN1c3RvbSBwb2ludGVyIHR5cGUuCisgICAqLworICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVmFsdWVQdHIsIGJvb2wgX0NhY2hlX2hhc2hfY29kZT4KKyAgICBzdHJ1Y3QgX0hhc2hf cG5vZGUKKyAgICA6IF9IYXNoX3Bub2RlX2Jhc2U8X19wdHJfcmViaW5kPAorCV9WYWx1ZVB0 ciwgX0hhc2hfcG5vZGU8X1ZhbHVlUHRyLCBfQ2FjaGVfaGFzaF9jb2RlPj4+CisgICAgLCBf SGFzaF9ub2RlX3ZhbHVlPAorCXR5cGVuYW1lIHN0ZDo6cG9pbnRlcl90cmFpdHM8X1ZhbHVl UHRyPjo6ZWxlbWVudF90eXBlLCBfQ2FjaGVfaGFzaF9jb2RlPgorICAgIHsKKyAgICAgIHVz aW5nIF9fbm9kZV9wdHIgPSBfX3B0cl9yZWJpbmQ8CisJX1ZhbHVlUHRyLCBfSGFzaF9wbm9k ZTxfVmFsdWVQdHIsIF9DYWNoZV9oYXNoX2NvZGU+PjsKKyAgICAgIHVzaW5nIF9fbm9kZV90 eXBlID0KKwl0eXBlbmFtZSBzdGQ6OnBvaW50ZXJfdHJhaXRzPF9fbm9kZV9wdHI+OjplbGVt ZW50X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cG9pbnRlcl90cmFpdHM8 X19ub2RlX3B0cj46OmRpZmZlcmVuY2VfdHlwZQorCQkJCQkJCWRpZmZlcmVuY2VfdHlwZTsK KworICAgICAgX19ub2RlX3B0cgogICAgICAgX01fbmV4dCgpIGNvbnN0IG5vZXhjZXB0Ci0g ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxfSGFzaF9ub2RlKj4odGhpcy0+X01fbnh0KTsg fQorICAgICAgeyByZXR1cm4gdGhpcy0+X01fbnh0OyB9CiAgICAgfTsKIAorICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQWxsb2MsIHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2hhc2hfY2FjaGVk PgorICAgIHVzaW5nIF9fZ2V0X25vZGVfdHlwZSA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u YWw8CisgICAgICBzdGQ6OmlzX3BvaW50ZXI8X19hbGxvY192YWxfcHRyPF9BbGxvYywgX1Zh bHVlPj46OnZhbHVlLAorICAgICAgX0hhc2hfbm9kZTxfVmFsdWUsIF9faGFzaF9jYWNoZWQ+ LAorICAgICAgX0hhc2hfcG5vZGU8X19hbGxvY192YWxfcHRyPF9BbGxvYywgX1ZhbHVlPiwg X19oYXNoX2NhY2hlZD4+Ojp0eXBlOworCiAgIC8vLyBCYXNlIGNsYXNzIGZvciBub2RlIGl0 ZXJhdG9ycy4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCBib29sIF9DYWNoZV9oYXNo X2NvZGU+Ci0gICAgc3RydWN0IF9Ob2RlX2l0ZXJhdG9yX2Jhc2UKKyAgdGVtcGxhdGU8dHlw ZW5hbWUgX05vZGVQdHI+CisgICAgc3RydWN0IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZQog ICAgIHsKLSAgICAgIHVzaW5nIF9fbm9kZV90eXBlID0gX0hhc2hfbm9kZTxfVmFsdWUsIF9D YWNoZV9oYXNoX2NvZGU+OworICAgICAgdXNpbmcgX19ub2RlX3B0ciA9IF9Ob2RlUHRyOwor ICAgICAgdXNpbmcgX19ub2RlX3R5cGUgPSB0eXBlbmFtZSBzdGQ6OnBvaW50ZXJfdHJhaXRz PF9Ob2RlUHRyPjo6ZWxlbWVudF90eXBlOwogCi0gICAgICBfX25vZGVfdHlwZSogX01fY3Vy OworICAgICAgX19ub2RlX3B0ciBfTV9jdXI7CiAKLSAgICAgIF9Ob2RlX2l0ZXJhdG9yX2Jh c2UoKSA6IF9NX2N1cihudWxscHRyKSB7IH0KLSAgICAgIF9Ob2RlX2l0ZXJhdG9yX2Jhc2Uo X19ub2RlX3R5cGUqIF9fcCkgbm9leGNlcHQKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3Jf YmFzZSgpIDogX01fY3VyKCkgeyB9CisgICAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2Uo X19ub2RlX3B0ciBfX3ApIG5vZXhjZXB0CiAgICAgICA6IF9NX2N1cihfX3ApIHsgfQogCiAg ICAgICB2b2lkCkBAIC00MDQsMTggKzQ3MywzMyBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAg ICAgIHsgX01fY3VyID0gX01fY3VyLT5fTV9uZXh0KCk7IH0KIAogICAgICAgZnJpZW5kIGJv b2wKLSAgICAgIG9wZXJhdG9yPT0oY29uc3QgX05vZGVfaXRlcmF0b3JfYmFzZSYgX194LCBj b25zdCBfTm9kZV9pdGVyYXRvcl9iYXNlJiBfX3kpCi0gICAgICBub2V4Y2VwdAorICAgICAg b3BlcmF0b3I9PShjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2UmIF9feCwKKwkJIGNv bnN0IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZSYgX195KSBub2V4Y2VwdAogICAgICAgeyBy ZXR1cm4gX194Ll9NX2N1ciA9PSBfX3kuX01fY3VyOyB9CiAKICNpZiBfX2NwcF9pbXBsX3Ro cmVlX3dheV9jb21wYXJpc29uIDwgMjAxOTA3TAogICAgICAgZnJpZW5kIGJvb2wKLSAgICAg IG9wZXJhdG9yIT0oY29uc3QgX05vZGVfaXRlcmF0b3JfYmFzZSYgX194LCBjb25zdCBfTm9k ZV9pdGVyYXRvcl9iYXNlJiBfX3kpCi0gICAgICBub2V4Y2VwdAorICAgICAgb3BlcmF0b3Ih PShjb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2UmIF9feCwKKwkJIGNvbnN0IF9IYXNo dGFibGVfaXRlcmF0b3JfYmFzZSYgX195KSBub2V4Y2VwdAogICAgICAgeyByZXR1cm4gX194 Ll9NX2N1ciAhPSBfX3kuX01fY3VyOyB9CiAjZW5kaWYKICAgICB9OwogCisgIC8vLyBCYXNl IGNsYXNzIGZvciBub2RlIGl0ZXJhdG9ycy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVl LCBib29sIF9DYWNoZV9oYXNoX2NvZGU+CisgICAgc3RydWN0IF9Ob2RlX2l0ZXJhdG9yX2Jh c2UKKyAgICA6IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfSGFzaF9ub2RlPF9WYWx1ZSwg X0NhY2hlX2hhc2hfY29kZT4qPgorICAgIHsKKyAgICAgIHVzaW5nIF9fYmFzZV90eXBlID0K KwlfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jhc2U8X0hhc2hfbm9kZTxfVmFsdWUsIF9DYWNoZV9o YXNoX2NvZGU+Kj47CisgICAgICB1c2luZyBfX25vZGVfcHRyID0gdHlwZW5hbWUgX19iYXNl X3R5cGU6Ol9fbm9kZV9wdHI7CisgICAgICB1c2luZyBfX25vZGVfdHlwZSA9IHR5cGVuYW1l IF9fYmFzZV90eXBlOjpfX25vZGVfcHRyOworCisgICAgICBfTm9kZV9pdGVyYXRvcl9iYXNl KCkgPSBkZWZhdWx0OworICAgICAgX05vZGVfaXRlcmF0b3JfYmFzZShfX25vZGVfcHRyIF9f cCkgbm9leGNlcHQKKyAgICAgIDogX19iYXNlX3R5cGUoX19wKSB7IH0KKyAgICB9OworCiAg IC8vLyBOb2RlIGl0ZXJhdG9ycywgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBo YXNodGFibGUuCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZSwgYm9vbCBfX2NvbnN0YW50 X2l0ZXJhdG9ycywgYm9vbCBfX2NhY2hlPgogICAgIHN0cnVjdCBfTm9kZV9pdGVyYXRvcgpA QCAtNDI0LDYgKzUwOCw3IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogICAgIHByaXZhdGU6CiAg ICAgICB1c2luZyBfX2Jhc2VfdHlwZSA9IF9Ob2RlX2l0ZXJhdG9yX2Jhc2U8X1ZhbHVlLCBf X2NhY2hlPjsKICAgICAgIHVzaW5nIF9fbm9kZV90eXBlID0gdHlwZW5hbWUgX19iYXNlX3R5 cGU6Ol9fbm9kZV90eXBlOworICAgICAgdXNpbmcgX19ub2RlX3B0ciA9IHR5cGVuYW1lIF9f YmFzZV90eXBlOjpfX25vZGVfcHRyOwogCiAgICAgcHVibGljOgogICAgICAgdXNpbmcgdmFs dWVfdHlwZSA9IF9WYWx1ZTsKQEAgLTQzOSw3ICs1MjQsNyBAQCBuYW1lc3BhY2UgX19kZXRh aWwKICAgICAgIF9Ob2RlX2l0ZXJhdG9yKCkgPSBkZWZhdWx0OwogCiAgICAgICBleHBsaWNp dAotICAgICAgX05vZGVfaXRlcmF0b3IoX19ub2RlX3R5cGUqIF9fcCkgbm9leGNlcHQKKyAg ICAgIF9Ob2RlX2l0ZXJhdG9yKF9fbm9kZV9wdHIgX19wKSBub2V4Y2VwdAogICAgICAgOiBf X2Jhc2VfdHlwZShfX3ApIHsgfQogCiAgICAgICByZWZlcmVuY2UKQEAgLTQ3NCw2ICs1NTks NyBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAgICBwcml2YXRlOgogICAgICAgdXNpbmcgX19i YXNlX3R5cGUgPSBfTm9kZV9pdGVyYXRvcl9iYXNlPF9WYWx1ZSwgX19jYWNoZT47CiAgICAg ICB1c2luZyBfX25vZGVfdHlwZSA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjpfX25vZGVfdHlw ZTsKKyAgICAgIHVzaW5nIF9fbm9kZV9wdHIgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19u b2RlX3B0cjsKIAogICAgIHB1YmxpYzoKICAgICAgIHR5cGVkZWYgX1ZhbHVlCQkJCQl2YWx1 ZV90eXBlOwpAQCAtNDg2LDcgKzU3Miw3IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogICAgICAg X05vZGVfY29uc3RfaXRlcmF0b3IoKSA9IGRlZmF1bHQ7CiAKICAgICAgIGV4cGxpY2l0Ci0g ICAgICBfTm9kZV9jb25zdF9pdGVyYXRvcihfX25vZGVfdHlwZSogX19wKSBub2V4Y2VwdAor ICAgICAgX05vZGVfY29uc3RfaXRlcmF0b3IoX19ub2RlX3B0ciBfX3ApIG5vZXhjZXB0CiAg ICAgICA6IF9fYmFzZV90eXBlKF9fcCkgeyB9CiAKICAgICAgIF9Ob2RlX2NvbnN0X2l0ZXJh dG9yKGNvbnN0IF9Ob2RlX2l0ZXJhdG9yPF9WYWx1ZSwgX19jb25zdGFudF9pdGVyYXRvcnMs CkBAIC01MTcsNiArNjAzLDExMCBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAgICAgIH0KICAg ICB9OwogCisgIC8vLyBOb2RlIGl0ZXJhdG9ycywgdXNlZCB0byBpdGVyYXRlIHRocm91Z2gg YWxsIHRoZSBoYXNodGFibGUuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Ob2RlUHRyLCBib29s IF9fY29uc3RhbnRfaXRlcmF0b3JzPgorICAgIHN0cnVjdCBfSGFzaHRhYmxlX2l0ZXJhdG9y CisgICAgOiBwdWJsaWMgX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNlPF9Ob2RlUHRyPgorICAg IHsKKyAgICBwcml2YXRlOgorICAgICAgdXNpbmcgX19iYXNlX3R5cGUgPSBfSGFzaHRhYmxl X2l0ZXJhdG9yX2Jhc2U8X05vZGVQdHI+OworICAgICAgdXNpbmcgX19ub2RlX3R5cGUgPSB0 eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19ub2RlX3R5cGU7CisgICAgICB1c2luZyBfX25vZGVf cHRyID0gdHlwZW5hbWUgX19iYXNlX3R5cGU6Ol9fbm9kZV9wdHI7CisKKyAgICBwdWJsaWM6 CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fbm9kZV90eXBlOjp2YWx1ZV90eXBlCQl2YWx1 ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX25vZGVfdHlwZTo6ZGlmZmVyZW5j ZV90eXBlCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpmb3J3YXJkX2l0 ZXJhdG9yX3RhZwkJCWl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICB1c2luZyBwb2ludGVy ID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJ CQkgIGNvbnN0IHZhbHVlX3R5cGUqLCB2YWx1ZV90eXBlKj46OnR5cGU7CisKKyAgICAgIHVz aW5nIHJlZmVyZW5jZSA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19jb25zdGFudF9p dGVyYXRvcnMsCisJCQkJICBjb25zdCB2YWx1ZV90eXBlJiwgdmFsdWVfdHlwZSY+Ojp0eXBl OworCisgICAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgICBl eHBsaWNpdAorICAgICAgX0hhc2h0YWJsZV9pdGVyYXRvcihfX25vZGVfcHRyIF9fcCkgbm9l eGNlcHQKKyAgICAgIDogX19iYXNlX3R5cGUoX19wKSB7IH0KKworICAgICAgcmVmZXJlbmNl CisgICAgICBvcGVyYXRvciooKSBjb25zdCBub2V4Y2VwdAorICAgICAgeyByZXR1cm4gdGhp cy0+X01fY3VyLT5fTV92KCk7IH0KKworICAgICAgcG9pbnRlcgorICAgICAgb3BlcmF0b3It PigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9jdXItPl9NX3Zh bHB0cigpOyB9CisKKyAgICAgIF9IYXNodGFibGVfaXRlcmF0b3ImCisgICAgICBvcGVyYXRv cisrKCkgbm9leGNlcHQKKyAgICAgIHsKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuICp0 aGlzOworICAgICAgfQorCisgICAgICBfSGFzaHRhYmxlX2l0ZXJhdG9yCisgICAgICBvcGVy YXRvcisrKGludCkgbm9leGNlcHQKKyAgICAgIHsKKwlfSGFzaHRhYmxlX2l0ZXJhdG9yIF9f dG1wKCp0aGlzKTsKKwl0aGlzLT5fTV9pbmNyKCk7CisJcmV0dXJuIF9fdG1wOworICAgICAg fQorICAgIH07CisKKyAgLy8vIE5vZGUgY29uc3RfaXRlcmF0b3JzLCB1c2VkIHRvIGl0ZXJh dGUgdGhyb3VnaCBhbGwgdGhlIGhhc2h0YWJsZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX05v ZGVQdHIsIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnM+CisgICAgc3RydWN0IF9IYXNodGFi bGVfY29uc3RfaXRlcmF0b3IKKyAgICA6IHB1YmxpYyBfSGFzaHRhYmxlX2l0ZXJhdG9yX2Jh c2U8X05vZGVQdHI+CisgICAgeworICAgIHByaXZhdGU6CisgICAgICB1c2luZyBfX2Jhc2Vf dHlwZSA9IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfTm9kZVB0cj47CisgICAgICB1c2lu ZyBfX25vZGVfdHlwZSA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjpfX25vZGVfdHlwZTsKKyAg ICAgIHVzaW5nIF9fbm9kZV9wdHIgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19ub2RlX3B0 cjsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19ub2RlX3R5cGU6 OnZhbHVlX3R5cGUJCXZhbHVlX3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fbm9k ZV90eXBlOjpkaWZmZXJlbmNlX3R5cGUJZGlmZmVyZW5jZV90eXBlOworICAgICAgdHlwZWRl ZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnCQkJaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAg ICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSoJCQkJcG9pbnRlcjsKKyAgICAgIHR5cGVk ZWYgY29uc3QgdmFsdWVfdHlwZSYJCQkJcmVmZXJlbmNlOworCisgICAgICBfSGFzaHRhYmxl X2NvbnN0X2l0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgICBleHBsaWNpdAorICAgICAg X0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvcihfX25vZGVfcHRyIF9fcCkgbm9leGNlcHQKKyAg ICAgIDogX19iYXNlX3R5cGUoX19wKSB7IH0KKworICAgICAgX0hhc2h0YWJsZV9jb25zdF9p dGVyYXRvcigKKwljb25zdCBfSGFzaHRhYmxlX2l0ZXJhdG9yPF9Ob2RlUHRyLAorCQkJCSAg X19jb25zdGFudF9pdGVyYXRvcnM+JiBfX3gpIG5vZXhjZXB0CisgICAgICA6IF9fYmFzZV90 eXBlKF9feC5fTV9jdXIpIHsgfQorCisgICAgICByZWZlcmVuY2UKKyAgICAgIG9wZXJhdG9y KigpIGNvbnN0IG5vZXhjZXB0CisgICAgICB7IHJldHVybiB0aGlzLT5fTV9jdXItPl9NX3Yo KTsgfQorCisgICAgICBwb2ludGVyCisgICAgICBvcGVyYXRvci0+KCkgY29uc3Qgbm9leGNl cHQKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1ci0+X01fdmFscHRyKCk7IH0KKworICAg ICAgX0hhc2h0YWJsZV9jb25zdF9pdGVyYXRvciYKKyAgICAgIG9wZXJhdG9yKysoKSBub2V4 Y2VwdAorICAgICAgeworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gKnRoaXM7CisgICAg ICB9CisKKyAgICAgIF9IYXNodGFibGVfY29uc3RfaXRlcmF0b3IKKyAgICAgIG9wZXJhdG9y KysoaW50KSBub2V4Y2VwdAorICAgICAgeworCV9IYXNodGFibGVfY29uc3RfaXRlcmF0b3Ig X190bXAoKnRoaXMpOworCXRoaXMtPl9NX2luY3IoKTsKKwlyZXR1cm4gX190bXA7CisgICAg ICB9CisgICAgfTsKKwogICAvLyBNYW55IG9mIGNsYXNzIHRlbXBsYXRlIF9IYXNodGFibGUn cyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGFyZSBwb2xpY3kKICAgLy8gY2xhc3Nlcy4gIFRoZXNl IGFyZSBkZWZhdWx0cyBmb3IgdGhlIHBvbGljaWVzLgogCkBAIC05MTIsMTYgKzExMDIsMTYg QEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAKICAgICAgIHVzaW5nIF9faGFzaF9jYWNoZWQgPSB0 eXBlbmFtZSBfVHJhaXRzOjpfX2hhc2hfY2FjaGVkOwogICAgICAgdXNpbmcgX19jb25zdGFu dF9pdGVyYXRvcnMgPSB0eXBlbmFtZSBfVHJhaXRzOjpfX2NvbnN0YW50X2l0ZXJhdG9yczsK KyAgICAgIHVzaW5nIF9fYWxsb2NfcHRyID0gX19hbGxvY192YWxfcHRyPF9BbGxvYywgX1Zh bHVlPjsKIAotICAgICAgdXNpbmcgX19oYXNodGFibGVfYWxsb2MgPSBfSGFzaHRhYmxlX2Fs bG9jPAotCV9fYWxsb2NfcmViaW5kPF9BbGxvYywgX0hhc2hfbm9kZTxfVmFsdWUsCi0JCQkJ CSAgX19oYXNoX2NhY2hlZDo6dmFsdWU+Pj47CisgICAgICB1c2luZyBfX25vZGVfdHlwZSA9 IF9fZ2V0X25vZGVfdHlwZTxfQWxsb2MsIF9WYWx1ZSwgX19oYXNoX2NhY2hlZDo6dmFsdWU+ OworICAgICAgdXNpbmcgX19ub2RlX3B0ciA9IF9fcHRyX3JlYmluZDxfX2FsbG9jX3B0ciwg X19ub2RlX3R5cGU+OworICAgICAgdXNpbmcgX19ub2RlX2FsbG9jX3R5cGUgPSBfX2FsbG9j X3JlYmluZDxfQWxsb2MsIF9fbm9kZV90eXBlPjsKIAogICAgICAgdXNpbmcgdmFsdWVfdHlw ZSA9IHR5cGVuYW1lIF9faGFzaHRhYmxlX2Jhc2U6OnZhbHVlX3R5cGU7CiAgICAgICB1c2lu ZyBzaXplX3R5cGUgPSB0eXBlbmFtZSBfX2hhc2h0YWJsZV9iYXNlOjpzaXplX3R5cGU7CiAK ICAgICAgIHVzaW5nIF9fdW5pcXVlX2tleXMgPSB0eXBlbmFtZSBfVHJhaXRzOjpfX3VuaXF1 ZV9rZXlzOwotICAgICAgdXNpbmcgX19ub2RlX2FsbG9jX3R5cGUgPSB0eXBlbmFtZSBfX2hh c2h0YWJsZV9hbGxvYzo6X19ub2RlX2FsbG9jX3R5cGU7CiAgICAgICB1c2luZyBfX25vZGVf Z2VuX3R5cGUgPSBfQWxsb2NOb2RlPF9fbm9kZV9hbGxvY190eXBlPjsKIAogICAgICAgX19o YXNodGFibGUmCkBAIC05MzksMTIgKzExMjksMTkgQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAJ CQljb25zdCBfTm9kZUdldHRlciYsIGZhbHNlX3R5cGUgX191a3MpOwogCiAgICAgcHVibGlj OgotICAgICAgdXNpbmcgaXRlcmF0b3IgPSBfTm9kZV9pdGVyYXRvcjxfVmFsdWUsIF9fY29u c3RhbnRfaXRlcmF0b3JzOjp2YWx1ZSwKLQkJCQkgICAgICBfX2hhc2hfY2FjaGVkOjp2YWx1 ZT47Ci0KLSAgICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gX05vZGVfY29uc3RfaXRlcmF0 b3I8X1ZhbHVlLAotCQkJCQkJICBfX2NvbnN0YW50X2l0ZXJhdG9yczo6dmFsdWUsCi0JCQkJ CQkgIF9faGFzaF9jYWNoZWQ6OnZhbHVlPjsKKyAgICAgIHVzaW5nIGl0ZXJhdG9yID0KKwl0 eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfcG9pbnRlcjxfX2FsbG9jX3B0cj46 OnZhbHVlLAorCSAgX05vZGVfaXRlcmF0b3I8X1ZhbHVlLAorCQkJIF9fY29uc3RhbnRfaXRl cmF0b3JzOjp2YWx1ZSwgX19oYXNoX2NhY2hlZDo6dmFsdWU+LAorCSAgX0hhc2h0YWJsZV9p dGVyYXRvcjxfX25vZGVfcHRyLAorCQkJICAgICAgX19jb25zdGFudF9pdGVyYXRvcnM6OnZh bHVlPj46OnR5cGU7CisKKyAgICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0KKwl0eXBlbmFt ZSBzdGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfcG9pbnRlcjxfX2FsbG9jX3B0cj46OnZhbHVl LAorCSAgX05vZGVfY29uc3RfaXRlcmF0b3I8X1ZhbHVlLAorCQkJICAgICBfX2NvbnN0YW50 X2l0ZXJhdG9yczo6dmFsdWUsIF9faGFzaF9jYWNoZWQ6OnZhbHVlPiwKKwkgIF9IYXNodGFi bGVfY29uc3RfaXRlcmF0b3I8X19ub2RlX3B0ciwKKwkJCQkgICAgX19jb25zdGFudF9pdGVy YXRvcnM6OnZhbHVlPj46OnR5cGU7CiAKICAgICAgIHVzaW5nIF9faXJldHVybl90eXBlID0g X19jb25kaXRpb25hbF90PF9fdW5pcXVlX2tleXM6OnZhbHVlLAogCQkJCQkgICAgIHN0ZDo6 cGFpcjxpdGVyYXRvciwgYm9vbD4sCkBAIC0xMjgwLDYgKzE0NzcsMTcgQEAgbmFtZXNwYWNl IF9fZGV0YWlsCiAJICAgYm9vbCBfX2NhY2hlX2hhc2hfY29kZT4KICAgICBzdHJ1Y3QgX0xv Y2FsX2l0ZXJhdG9yX2Jhc2U7CiAKKyAgLyoqCisgICAqICBQcmltYXJ5IGNsYXNzIHRlbXBs YXRlIF9IYXNodGFibGVfbG9jYWxfaXRlcl9iYXNlLgorICAgKgorICAgKiAgQmFzZSBjbGFz cyBmb3IgbG9jYWwgaXRlcmF0b3JzLCB1c2VkIHRvIGl0ZXJhdGUgd2l0aGluIGEgYnVja2V0 CisgICAqICBidXQgbm90IGJldHdlZW4gYnVja2V0cy4KKyAgICovCisgIHRlbXBsYXRlPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9Ob2RlUHRyLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwK KwkgICB0eXBlbmFtZSBfSGFzaCwgdHlwZW5hbWUgX1JhbmdlSGFzaCwgdHlwZW5hbWUgX1Vu dXNlZCwKKwkgICBib29sIF9fY2FjaGVfaGFzaF9jb2RlPgorICAgIHN0cnVjdCBfSGFzaHRh YmxlX2xvY2FsX2l0ZXJfYmFzZTsKKwogICAvKioKICAgICogIFByaW1hcnkgY2xhc3MgdGVt cGxhdGUgX0hhc2hfY29kZV9iYXNlLgogICAgKgpAQCAtMTQ0MCw2ICsxNjQ4LDQ5IEBAIG5h bWVzcGFjZSBfX2RldGFpbAogICAgICAgX01fZ2V0X2J1Y2tldCgpIGNvbnN0IHsgcmV0dXJu IF9NX2J1Y2tldDsgfSAgLy8gZm9yIGRlYnVnIG1vZGUKICAgICB9OwogCisgIC8vLyBQYXJ0 aWFsIHNwZWNpYWxpemF0aW9uIHVzZWQgd2hlbiBub2RlcyBjb250YWluIGEgY2FjaGVkIGhh c2ggY29kZS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX05vZGVQdHIs IHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAgIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBf UmFuZ2VIYXNoLCB0eXBlbmFtZSBfVW51c2VkPgorICAgIHN0cnVjdCBfSGFzaHRhYmxlX2xv Y2FsX2l0ZXJfYmFzZTxfS2V5LCBfTm9kZVB0ciwgX0V4dHJhY3RLZXksCisJCQkJICAgICAg X0hhc2gsIF9SYW5nZUhhc2gsIF9VbnVzZWQsIHRydWU+CisgICAgOiBwdWJsaWMgX0hhc2h0 YWJsZV9pdGVyYXRvcl9iYXNlPF9Ob2RlUHRyPgorICAgIHsKKyAgICBwcm90ZWN0ZWQ6Cisg ICAgICB1c2luZyBfX2Jhc2Vfbm9kZV9pdGVyID0gX0hhc2h0YWJsZV9pdGVyYXRvcl9iYXNl PF9Ob2RlUHRyPjsKKyAgICAgIHVzaW5nIF9fbm9kZV9wdHIgPSB0eXBlbmFtZSBfX2Jhc2Vf bm9kZV9pdGVyOjpfX25vZGVfcHRyOworICAgICAgdXNpbmcgX19ub2RlX3R5cGUgPSB0eXBl bmFtZSBfX2Jhc2Vfbm9kZV9pdGVyOjpfX25vZGVfdHlwZTsKKyAgICAgIHVzaW5nIHZhbHVl X3R5cGUgPSB0eXBlbmFtZSBfX25vZGVfdHlwZTo6dmFsdWVfdHlwZTsKKyAgICAgIHVzaW5n IF9faGFzaF9jb2RlX2Jhc2UgPSBfSGFzaF9jb2RlX2Jhc2U8X0tleSwgdmFsdWVfdHlwZSwg X0V4dHJhY3RLZXksCisJCQkJCSAgICAgIF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51c2VkLCB0 cnVlPjsKKworICAgICAgX0hhc2h0YWJsZV9sb2NhbF9pdGVyX2Jhc2UoKSA9IGRlZmF1bHQ7 CisgICAgICBfSGFzaHRhYmxlX2xvY2FsX2l0ZXJfYmFzZShjb25zdCBfX2hhc2hfY29kZV9i YXNlJiwKKwkJCQkgX19ub2RlX3B0ciBfX3AsCisJCQkJIHN0ZDo6c2l6ZV90IF9fYmt0LCBz dGQ6OnNpemVfdCBfX2JrdF9jb3VudCkKKyAgICAgIDogX19iYXNlX25vZGVfaXRlcihfX3Ap LCBfTV9idWNrZXQoX19ia3QpLCBfTV9idWNrZXRfY291bnQoX19ia3RfY291bnQpCisgICAg ICB7IH0KKworICAgICAgdm9pZAorICAgICAgX01faW5jcigpCisgICAgICB7CisJX19iYXNl X25vZGVfaXRlcjo6X01faW5jcigpOworCWlmICh0aGlzLT5fTV9jdXIpCisJICB7CisJICAg IHN0ZDo6c2l6ZV90IF9fYmt0CisJICAgICAgPSBfUmFuZ2VIYXNoe30odGhpcy0+X01fY3Vy LT5fTV9oYXNoX2NvZGUsIF9NX2J1Y2tldF9jb3VudCk7CisJICAgIGlmIChfX2JrdCAhPSBf TV9idWNrZXQpCisJICAgICAgdGhpcy0+X01fY3VyID0gbnVsbHB0cjsKKwkgIH0KKyAgICAg IH0KKworICAgICAgc3RkOjpzaXplX3QgX01fYnVja2V0OworICAgICAgc3RkOjpzaXplX3Qg X01fYnVja2V0X2NvdW50OworCisgICAgcHVibGljOgorICAgICAgc3RkOjpzaXplX3QKKyAg ICAgIF9NX2dldF9idWNrZXQoKSBjb25zdCB7IHJldHVybiBfTV9idWNrZXQ7IH0gIC8vIGZv ciBkZWJ1ZyBtb2RlCisgICAgfTsKKwogICAvLyBVbmluaXRpYWxpemVkIHN0b3JhZ2UgZm9y IGEgX0hhc2hfY29kZV9iYXNlLgogICAvLyBUaGlzIHR5cGUgaXMgRGVmYXVsdENvbnN0cnVj dGlibGUgYW5kIEFzc2lnbmFibGUgZXZlbiBpZiB0aGUKICAgLy8gX0hhc2hfY29kZV9iYXNl IHR5cGUgaXNuJ3QsIHNvIHRoYXQgX0xvY2FsX2l0ZXJhdG9yX2Jhc2U8Li4uLCBmYWxzZT4K QEAgLTE1NTQsNiArMTgwNSw4NiBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAgICAgIF9NX2dl dF9idWNrZXQoKSBjb25zdCB7IHJldHVybiBfTV9idWNrZXQ7IH0gIC8vIGZvciBkZWJ1ZyBt b2RlCiAgICAgfTsKIAorICAvLyBQYXJ0aWFsIHNwZWNpYWxpemF0aW9uIHVzZWQgd2hlbiBo YXNoIGNvZGVzIGFyZSBub3QgY2FjaGVkCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5 cGVuYW1lIF9Ob2RlUHRyLCB0eXBlbmFtZSBfRXh0cmFjdEtleSwKKwkgICB0eXBlbmFtZSBf SGFzaCwgdHlwZW5hbWUgX1JhbmdlSGFzaCwgdHlwZW5hbWUgX1VudXNlZD4KKyAgICBzdHJ1 Y3QgX0hhc2h0YWJsZV9sb2NhbF9pdGVyX2Jhc2U8X0tleSwgX05vZGVQdHIsIF9FeHRyYWN0 S2V5LAorCQkJCSAgICAgIF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51c2VkLCBmYWxzZT4KKyAg ICA6IF9IYXNoX2NvZGVfc3RvcmFnZTxfSGFzaD4KKyAgICAsIF9IYXNodGFibGVfaXRlcmF0 b3JfYmFzZTxfTm9kZVB0cj4KKyAgICB7CisgICAgcHJvdGVjdGVkOgorICAgICAgdXNpbmcg X19ub2RlX2l0ZXJfYmFzZSA9IF9IYXNodGFibGVfaXRlcmF0b3JfYmFzZTxfTm9kZVB0cj47 CisgICAgICB1c2luZyBfX25vZGVfdHlwZSA9IHR5cGVuYW1lIF9fbm9kZV9pdGVyX2Jhc2U6 Ol9fbm9kZV90eXBlOworICAgICAgdXNpbmcgX19ub2RlX3B0ciA9IHR5cGVuYW1lIF9fbm9k ZV9pdGVyX2Jhc2U6Ol9fbm9kZV9wdHI7CisgICAgICB1c2luZyB2YWx1ZV90eXBlID0gdHlw ZW5hbWUgX19ub2RlX3R5cGU6OnZhbHVlX3R5cGU7CisgICAgICB1c2luZyBfX2hhc2hfY29k ZV9iYXNlID0gX0hhc2hfY29kZV9iYXNlPF9LZXksIHZhbHVlX3R5cGUsIF9FeHRyYWN0S2V5 LAorCQkJCQkgICAgIF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51c2VkLCBmYWxzZT47CisKKyAg ICAgIF9IYXNodGFibGVfbG9jYWxfaXRlcl9iYXNlKCkgOiBfTV9idWNrZXRfY291bnQoLTEp IHsgfQorCisgICAgICBfSGFzaHRhYmxlX2xvY2FsX2l0ZXJfYmFzZShjb25zdCBfX2hhc2hf Y29kZV9iYXNlJiBfX2Jhc2UsCisJCQkJIF9fbm9kZV9wdHIgX19wLAorCQkJCSBzdGQ6OnNp emVfdCBfX2JrdCwgc3RkOjpzaXplX3QgX19ia3RfY291bnQpCisgICAgICA6IF9fbm9kZV9p dGVyX2Jhc2UoX19wKSwgX01fYnVja2V0KF9fYmt0KSwgX01fYnVja2V0X2NvdW50KF9fYmt0 X2NvdW50KQorICAgICAgeyBfTV9pbml0KF9fYmFzZS5oYXNoX2Z1bmN0aW9uKCkpOyB9CisK KyAgICAgIH5fSGFzaHRhYmxlX2xvY2FsX2l0ZXJfYmFzZSgpCisgICAgICB7CisJaWYgKF9N X2J1Y2tldF9jb3VudCAhPSAtMSkKKwkgIF9NX2Rlc3Ryb3koKTsKKyAgICAgIH0KKworICAg ICAgX0hhc2h0YWJsZV9sb2NhbF9pdGVyX2Jhc2UoY29uc3QgX0hhc2h0YWJsZV9sb2NhbF9p dGVyX2Jhc2UmIF9faXRlcikKKyAgICAgIDogX19ub2RlX2l0ZXJfYmFzZShfX2l0ZXIuX01f Y3VyKSwgX01fYnVja2V0KF9faXRlci5fTV9idWNrZXQpCisgICAgICAsIF9NX2J1Y2tldF9j b3VudChfX2l0ZXIuX01fYnVja2V0X2NvdW50KQorICAgICAgeworCWlmIChfTV9idWNrZXRf Y291bnQgIT0gLTEpCisJICBfTV9pbml0KCpfX2l0ZXIuX01faCgpKTsKKyAgICAgIH0KKwor ICAgICAgX0hhc2h0YWJsZV9sb2NhbF9pdGVyX2Jhc2UmCisgICAgICBvcGVyYXRvcj0oY29u c3QgX0hhc2h0YWJsZV9sb2NhbF9pdGVyX2Jhc2UmIF9faXRlcikKKyAgICAgIHsKKwlpZiAo X01fYnVja2V0X2NvdW50ICE9IC0xKQorCSAgX01fZGVzdHJveSgpOworCXRoaXMtPl9NX2N1 ciA9IF9faXRlci5fTV9jdXI7CisJX01fYnVja2V0ID0gX19pdGVyLl9NX2J1Y2tldDsKKwlf TV9idWNrZXRfY291bnQgPSBfX2l0ZXIuX01fYnVja2V0X2NvdW50OworCWlmIChfTV9idWNr ZXRfY291bnQgIT0gLTEpCisJICBfTV9pbml0KCpfX2l0ZXIuX01faCgpKTsKKwlyZXR1cm4g KnRoaXM7CisgICAgICB9CisKKyAgICAgIHZvaWQKKyAgICAgIF9NX2luY3IoKQorICAgICAg eworCV9fbm9kZV9pdGVyX2Jhc2U6Ol9NX2luY3IoKTsKKwlpZiAodGhpcy0+X01fY3VyKQor CSAgeworCSAgICBzdGQ6OnNpemVfdCBfX2JrdCA9CisJICAgICAgX1JhbmdlSGFzaHt9KCgq dGhpcy0+X01faCgpKShfRXh0cmFjdEtleXt9KHRoaXMtPl9NX2N1ci0+X01fdigpKSksCisJ CQkgICBfTV9idWNrZXRfY291bnQpOworCSAgICBpZiAoX19ia3QgIT0gX01fYnVja2V0KQor CSAgICAgIHRoaXMtPl9NX2N1ciA9IG51bGxwdHI7CisJICB9CisgICAgICB9CisKKyAgICAg IHN0ZDo6c2l6ZV90IF9NX2J1Y2tldDsKKyAgICAgIHN0ZDo6c2l6ZV90IF9NX2J1Y2tldF9j b3VudDsKKworICAgICAgdm9pZAorICAgICAgX01faW5pdChjb25zdCBfSGFzaCYgX19oKQor ICAgICAgeyA6Om5ldyh0aGlzLT5fTV9oKCkpIF9IYXNoKF9faCk7IH0KKworICAgICAgdm9p ZAorICAgICAgX01fZGVzdHJveSgpIHsgdGhpcy0+X01faCgpLT5+X0hhc2goKTsgfQorCisg ICAgcHVibGljOgorICAgICAgc3RkOjpzaXplX3QKKyAgICAgIF9NX2dldF9idWNrZXQoKSBj b25zdCB7IHJldHVybiBfTV9idWNrZXQ7IH0gIC8vIGZvciBkZWJ1ZyBtb2RlCisgICAgfTsK KwogICAvLy8gbG9jYWwgaXRlcmF0b3JzCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5 cGVuYW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0V4dHJhY3RLZXksCiAJICAgdHlwZW5hbWUgX0hh c2gsIHR5cGVuYW1lIF9SYW5nZUhhc2gsIHR5cGVuYW1lIF9VbnVzZWQsCkBAIC0xNjY3LDYg KzE5OTgsMTU2IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogICAgICAgfQogICAgIH07CiAKKyAg Ly8vIGxvY2FsIGl0ZXJhdG9ycworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt ZSBfTm9kZVB0ciwgdHlwZW5hbWUgX0V4dHJhY3RLZXksCisJICAgdHlwZW5hbWUgX0hhc2gs IHR5cGVuYW1lIF9SYW5nZUhhc2gsIHR5cGVuYW1lIF9VbnVzZWQsCisJICAgYm9vbCBfX2Nv bnN0YW50X2l0ZXJhdG9ycywgYm9vbCBfX2NhY2hlPgorICAgIHN0cnVjdCBfSGFzaHRhYmxl X2xvY2FsX2l0ZXJhdG9yCisgICAgOiBwdWJsaWMgX0hhc2h0YWJsZV9sb2NhbF9pdGVyX2Jh c2U8X0tleSwgX05vZGVQdHIsIF9FeHRyYWN0S2V5LAorCQkJCQlfSGFzaCwgX1JhbmdlSGFz aCwgX1VudXNlZCwgX19jYWNoZT4KKyAgICB7CisgICAgcHJpdmF0ZToKKyAgICAgIHVzaW5n IF9fYmFzZV90eXBlID0KKwlfSGFzaHRhYmxlX2xvY2FsX2l0ZXJfYmFzZTxfS2V5LCBfTm9k ZVB0ciwgX0V4dHJhY3RLZXksCisJCQkJICAgX0hhc2gsIF9SYW5nZUhhc2gsIF9VbnVzZWQs IF9fY2FjaGU+OworICAgICAgdXNpbmcgX19oYXNoX2NvZGVfYmFzZSA9IHR5cGVuYW1lIF9f YmFzZV90eXBlOjpfX2hhc2hfY29kZV9iYXNlOworICAgICAgdXNpbmcgX19ub2RlX3R5cGUg PSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19ub2RlX3R5cGU7CisgICAgICB1c2luZyBfX25v ZGVfcHRyID0gdHlwZW5hbWUgX19iYXNlX3R5cGU6Ol9fbm9kZV9wdHI7CisKKyAgICBwdWJs aWM6CisgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYmFzZV90eXBlOjp2YWx1ZV90eXBlCQl2 YWx1ZV90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9f Y29uc3RhbnRfaXRlcmF0b3JzLAorCQkJCQljb25zdCB2YWx1ZV90eXBlKiwgdmFsdWVfdHlw ZSo+Ojp0eXBlCisJCQkJCQkJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3Rk Ojpjb25kaXRpb25hbDxfX2NvbnN0YW50X2l0ZXJhdG9ycywKKwkJCQkJY29uc3QgdmFsdWVf dHlwZSYsIHZhbHVlX3R5cGUmPjo6dHlwZQorCQkJCQkJCXJlZmVyZW5jZTsKKyAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX19ub2RlX3R5cGU6OmRpZmZlcmVuY2VfdHlwZQlkaWZmZXJlbmNl X3R5cGU7CisgICAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcJCQlpdGVy YXRvcl9jYXRlZ29yeTsKKworICAgICAgX0hhc2h0YWJsZV9sb2NhbF9pdGVyYXRvcigpID0g ZGVmYXVsdDsKKworICAgICAgX0hhc2h0YWJsZV9sb2NhbF9pdGVyYXRvcihjb25zdCBfX2hh c2hfY29kZV9iYXNlJiBfX2Jhc2UsCisJCQkJX19ub2RlX3B0ciBfX24sCisJCQkJc3RkOjpz aXplX3QgX19ia3QsIHN0ZDo6c2l6ZV90IF9fYmt0X2NvdW50KQorICAgICAgOiBfX2Jhc2Vf dHlwZShfX2Jhc2UsIF9fbiwgX19ia3QsIF9fYmt0X2NvdW50KQorICAgICAgeyB9CisKKyAg ICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJu IHRoaXMtPl9NX2N1ci0+X01fdigpOyB9CisKKyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJh dG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1cm4gdGhpcy0+X01fY3VyLT5fTV92YWxwdHIo KTsgfQorCisgICAgICBfSGFzaHRhYmxlX2xvY2FsX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0 b3IrKygpCisgICAgICB7CisJdGhpcy0+X01faW5jcigpOworCXJldHVybiAqdGhpczsKKyAg ICAgIH0KKworICAgICAgX0hhc2h0YWJsZV9sb2NhbF9pdGVyYXRvcgorICAgICAgb3BlcmF0 b3IrKyhpbnQpCisgICAgICB7CisJX0hhc2h0YWJsZV9sb2NhbF9pdGVyYXRvciBfX3RtcCgq dGhpcyk7CisJdGhpcy0+X01faW5jcigpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKyAg ICB9OworCisgIC8vLyBsb2NhbCBjb25zdF9pdGVyYXRvcnMKKyAgdGVtcGxhdGU8dHlwZW5h bWUgX0tleSwgdHlwZW5hbWUgX05vZGVQdHIsIHR5cGVuYW1lIF9FeHRyYWN0S2V5LAorCSAg IHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmFuZ2VIYXNoLCB0eXBlbmFtZSBfVW51c2Vk LAorCSAgIGJvb2wgX19jb25zdGFudF9pdGVyYXRvcnMsIGJvb2wgX19jYWNoZT4KKyAgICBz dHJ1Y3QgX0hhc2h0YWJsZV9jb25zdF9sb2NhbF9pdGVyYXRvcgorICAgIDogcHVibGljIF9I YXNodGFibGVfbG9jYWxfaXRlcl9iYXNlPF9LZXksIF9Ob2RlUHRyLCBfRXh0cmFjdEtleSwK KwkJCQkJX0hhc2gsIF9SYW5nZUhhc2gsIF9VbnVzZWQsIF9fY2FjaGU+CisgICAgeworICAg IHByaXZhdGU6CisgICAgICB1c2luZyBfX2Jhc2VfdHlwZSA9CisJX0hhc2h0YWJsZV9sb2Nh bF9pdGVyX2Jhc2U8X0tleSwgX05vZGVQdHIsIF9FeHRyYWN0S2V5LAorCQkJCSAgIF9IYXNo LCBfUmFuZ2VIYXNoLCBfVW51c2VkLCBfX2NhY2hlPjsKKyAgICAgIHVzaW5nIF9faGFzaF9j b2RlX2Jhc2UgPSB0eXBlbmFtZSBfX2Jhc2VfdHlwZTo6X19oYXNoX2NvZGVfYmFzZTsKKyAg ICAgIHVzaW5nIF9fbm9kZV90eXBlID0gdHlwZW5hbWUgX19iYXNlX3R5cGU6Ol9fbm9kZV90 eXBlOworICAgICAgdXNpbmcgX19ub2RlX3B0ciA9IHR5cGVuYW1lIF9fYmFzZV90eXBlOjpf X25vZGVfcHRyOworCisgICAgcHVibGljOgorICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Jh c2VfdHlwZTo6dmFsdWVfdHlwZQkJdmFsdWVfdHlwZTsKKyAgICAgIHR5cGVkZWYgY29uc3Qg dmFsdWVfdHlwZSoJCQkJcG9pbnRlcjsKKyAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlw ZSYJCQkJcmVmZXJlbmNlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX25vZGVfdHlwZTo6 ZGlmZmVyZW5jZV90eXBlCWRpZmZlcmVuY2VfdHlwZTsKKyAgICAgIHR5cGVkZWYgc3RkOjpm b3J3YXJkX2l0ZXJhdG9yX3RhZwkJCWl0ZXJhdG9yX2NhdGVnb3J5OworCisgICAgICBfSGFz aHRhYmxlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgICBfSGFz aHRhYmxlX2NvbnN0X2xvY2FsX2l0ZXJhdG9yKGNvbnN0IF9faGFzaF9jb2RlX2Jhc2UmIF9f YmFzZSwKKwkJCQkgICAgICBfX25vZGVfcHRyIF9fbiwKKwkJCQkgICAgc3RkOjpzaXplX3Qg X19ia3QsIHN0ZDo6c2l6ZV90IF9fYmt0X2NvdW50KQorICAgICAgOiBfX2Jhc2VfdHlwZShf X2Jhc2UsIF9fbiwgX19ia3QsIF9fYmt0X2NvdW50KQorICAgICAgeyB9CisKKyAgICAgIF9I YXNodGFibGVfY29uc3RfbG9jYWxfaXRlcmF0b3IoY29uc3QgX0hhc2h0YWJsZV9sb2NhbF9p dGVyYXRvcjwKKwkJCQkgICAgICBfS2V5LCBfTm9kZVB0ciwgX0V4dHJhY3RLZXksCisJCQkJ ICAgICAgX0hhc2gsIF9SYW5nZUhhc2gsIF9VbnVzZWQsCisJCQkJICAgICAgX19jb25zdGFu dF9pdGVyYXRvcnMsCisJCQkJICAgICAgX19jYWNoZT4mIF9feCkKKyAgICAgIDogX19iYXNl X3R5cGUoX194KQorICAgICAgeyB9CisKKyAgICAgIHJlZmVyZW5jZQorICAgICAgb3BlcmF0 b3IqKCkgY29uc3QKKyAgICAgIHsgcmV0dXJuIHRoaXMtPl9NX2N1ci0+X01fdigpOyB9CisK KyAgICAgIHBvaW50ZXIKKyAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgeyByZXR1 cm4gdGhpcy0+X01fY3VyLT5fTV92YWxwdHIoKTsgfQorCisgICAgICBfSGFzaHRhYmxlX2Nv bnN0X2xvY2FsX2l0ZXJhdG9yJgorICAgICAgb3BlcmF0b3IrKygpCisgICAgICB7CisJdGhp cy0+X01faW5jcigpOworCXJldHVybiAqdGhpczsKKyAgICAgIH0KKworICAgICAgX0hhc2h0 YWJsZV9jb25zdF9sb2NhbF9pdGVyYXRvcgorICAgICAgb3BlcmF0b3IrKyhpbnQpCisgICAg ICB7CisJX0hhc2h0YWJsZV9jb25zdF9sb2NhbF9pdGVyYXRvciBfX3RtcCgqdGhpcyk7CisJ dGhpcy0+X01faW5jcigpOworCXJldHVybiBfX3RtcDsKKyAgICAgIH0KKyAgICB9OworCisg IHRlbXBsYXRlPHR5cGVuYW1lIF9Ob2RlUHRyLCB0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBf VmFsdWUsCisJICAgdHlwZW5hbWUgX0V4dHJhY3RLZXksIHR5cGVuYW1lIF9IYXNoLAorCSAg IHR5cGVuYW1lIF9SYW5nZUhhc2gsIHR5cGVuYW1lIF9VbnVzZWQsCisJICAgYm9vbCBfX2Nv bnN0YW50X2l0ZXJhdG9ycywgYm9vbCBfX2hhc2hfY2FjaGVkPgorICAgIHVzaW5nIF9fbG9j YWxfaXRlcmF0b3IgPSB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAorICAgICAgc3RkOjpp c19wb2ludGVyPF9Ob2RlUHRyPjo6dmFsdWUsCisgICAgICBfTG9jYWxfaXRlcmF0b3I8X0tl eSwgX1ZhbHVlLAorCQkgICAgICBfRXh0cmFjdEtleSwgX0hhc2gsIF9SYW5nZUhhc2gsIF9V bnVzZWQsCisJCSAgICAgIF9fY29uc3RhbnRfaXRlcmF0b3JzLCBfX2hhc2hfY2FjaGVkPiwK KyAgICAgIF9IYXNodGFibGVfbG9jYWxfaXRlcmF0b3I8X0tleSwgX05vZGVQdHIsCisJCQkJ X0V4dHJhY3RLZXksIF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51c2VkLAorCQkJCV9fY29uc3Rh bnRfaXRlcmF0b3JzLAorCQkJCV9faGFzaF9jYWNoZWQ+Pjo6dHlwZTsKKworICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfTm9kZVB0ciwgdHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbHVlLAor CSAgIHR5cGVuYW1lIF9FeHRyYWN0S2V5LCB0eXBlbmFtZSBfSGFzaCwKKwkgICB0eXBlbmFt ZSBfUmFuZ2VIYXNoLCB0eXBlbmFtZSBfVW51c2VkLAorCSAgIGJvb2wgX19jb25zdGFudF9p dGVyYXRvcnMsIGJvb2wgX19oYXNoX2NhY2hlZD4KKyAgICB1c2luZyBfX2NvbnN0X2xvY2Fs X2l0ZXJhdG9yID0gdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKKyAgICAgIHN0ZDo6aXNf cG9pbnRlcjxfTm9kZVB0cj46OnZhbHVlLAorICAgICAgX0xvY2FsX2NvbnN0X2l0ZXJhdG9y PF9LZXksIF9WYWx1ZSwKKwkJCSAgICBfRXh0cmFjdEtleSwgX0hhc2gsIF9SYW5nZUhhc2gs IF9VbnVzZWQsCisJCQkgICAgX19jb25zdGFudF9pdGVyYXRvcnMsIF9faGFzaF9jYWNoZWQ+ LAorICAgICAgX0hhc2h0YWJsZV9jb25zdF9sb2NhbF9pdGVyYXRvcjxfS2V5LCBfTm9kZVB0 ciwKKwkJCQkgICAgICBfRXh0cmFjdEtleSwgX0hhc2gsIF9SYW5nZUhhc2gsIF9VbnVzZWQs CisJCQkJICAgICAgX19jb25zdGFudF9pdGVyYXRvcnMsCisJCQkJICAgICAgX19oYXNoX2Nh Y2hlZD4+Ojp0eXBlOworCiAgIC8qKgogICAgKiAgUHJpbWFyeSBjbGFzcyB0ZW1wbGF0ZSBf SGFzaHRhYmxlX2Jhc2UuCiAgICAqCkBAIC0xOTQzLDEwICsyNDI0LDE2IEBAIG5hbWVzcGFj ZSBfX2RldGFpbAogICAgICAgdXNpbmcgX19lYm9fbm9kZV9hbGxvYyA9IF9IYXNodGFibGVf ZWJvX2hlbHBlcjwwLCBfTm9kZUFsbG9jPjsKIAogICAgICAgdGVtcGxhdGU8dHlwZW5hbWU+ Ci0Jc3RydWN0IF9fZ2V0X3ZhbHVlX3R5cGU7CisJc3RydWN0IF9fZ2V0X25vZGVfYmFzZTsK ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWwsIGJvb2wgX0NhY2hlX2hhc2hfY29kZT4K LQlzdHJ1Y3QgX19nZXRfdmFsdWVfdHlwZTxfSGFzaF9ub2RlPF9WYWwsIF9DYWNoZV9oYXNo X2NvZGU+PgotCXsgdXNpbmcgdHlwZSA9IF9WYWw7IH07CisJc3RydWN0IF9fZ2V0X25vZGVf YmFzZTxfSGFzaF9ub2RlPF9WYWwsIF9DYWNoZV9oYXNoX2NvZGU+PgorCXsgdXNpbmcgdHlw ZSA9IF9IYXNoX25vZGVfYmFzZTsgfTsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1 ZVB0ciwgYm9vbCBfQ2FjaGVfaGFzaF9jb2RlPgorCXN0cnVjdCBfX2dldF9ub2RlX2Jhc2U8 X0hhc2hfcG5vZGU8X1ZhbHVlUHRyLCBfQ2FjaGVfaGFzaF9jb2RlPj4KKwl7CisJICB1c2lu ZyB0eXBlID0gX0hhc2hfcG5vZGVfYmFzZTxfX3B0cl9yZWJpbmQ8CisJCQlfVmFsdWVQdHIs IF9IYXNoX3Bub2RlPF9WYWx1ZVB0ciwgX0NhY2hlX2hhc2hfY29kZT4+PjsKKwl9OwogCiAg ICAgcHVibGljOgogICAgICAgdXNpbmcgX19ub2RlX3R5cGUgPSB0eXBlbmFtZSBfTm9kZUFs bG9jOjp2YWx1ZV90eXBlOwpAQCAtMTk1NCwxNiArMjQ0MSwxMyBAQCBuYW1lc3BhY2UgX19k ZXRhaWwKICAgICAgIC8vIFVzZSBfX2dudV9jeHggdG8gYmVuZWZpdCBmcm9tIF9TX2Fsd2F5 c19lcXVhbCBhbmQgYWwuCiAgICAgICB1c2luZyBfX25vZGVfYWxsb2NfdHJhaXRzID0gX19n bnVfY3h4OjpfX2FsbG9jX3RyYWl0czxfX25vZGVfYWxsb2NfdHlwZT47CiAKLSAgICAgIHVz aW5nIF9fdmFsdWVfYWxsb2NfdHJhaXRzID0gdHlwZW5hbWUgX19ub2RlX2FsbG9jX3RyYWl0 czo6dGVtcGxhdGUKLQlyZWJpbmRfdHJhaXRzPHR5cGVuYW1lIF9fZ2V0X3ZhbHVlX3R5cGU8 X19ub2RlX3R5cGU+Ojp0eXBlPjsKLQotICAgICAgdXNpbmcgX19ub2RlX3B0ciA9IF9fbm9k ZV90eXBlKjsKLSAgICAgIHVzaW5nIF9fbm9kZV9iYXNlID0gX0hhc2hfbm9kZV9iYXNlOwot ICAgICAgdXNpbmcgX19ub2RlX2Jhc2VfcHRyID0gX19ub2RlX2Jhc2UqOworICAgICAgdXNp bmcgX19ub2RlX3B0ciA9IHR5cGVuYW1lIF9fbm9kZV9hbGxvY190cmFpdHM6OnBvaW50ZXI7 CisgICAgICB1c2luZyBfX25vZGVfYmFzZSA9IHR5cGVuYW1lIF9fZ2V0X25vZGVfYmFzZTxf X25vZGVfdHlwZT46OnR5cGU7CisgICAgICB1c2luZyBfX25vZGVfYmFzZV9wdHIgPSBfX3B0 cl9yZWJpbmQ8X19ub2RlX3B0ciwgX19ub2RlX2Jhc2U+OwogICAgICAgdXNpbmcgX19idWNr ZXRzX2FsbG9jX3R5cGUgPQogCV9fYWxsb2NfcmViaW5kPF9fbm9kZV9hbGxvY190eXBlLCBf X25vZGVfYmFzZV9wdHI+OwogICAgICAgdXNpbmcgX19idWNrZXRzX2FsbG9jX3RyYWl0cyA9 IHN0ZDo6YWxsb2NhdG9yX3RyYWl0czxfX2J1Y2tldHNfYWxsb2NfdHlwZT47Ci0gICAgICB1 c2luZyBfX2J1Y2tldHNfcHRyID0gX19ub2RlX2Jhc2VfcHRyKjsKKyAgICAgIHVzaW5nIF9f YnVja2V0c19wdHIgPSB0eXBlbmFtZSBfX2J1Y2tldHNfYWxsb2NfdHJhaXRzOjpwb2ludGVy OwogCiAgICAgICBfSGFzaHRhYmxlX2FsbG9jKCkgPSBkZWZhdWx0OwogICAgICAgX0hhc2h0 YWJsZV9hbGxvYyhjb25zdCBfSGFzaHRhYmxlX2FsbG9jJikgPSBkZWZhdWx0OwpAQCAtMjAx NywxNyArMjUwMSwxNiBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAgICAgIHsKIAlhdXRvJiBf X2FsbG9jID0gX01fbm9kZV9hbGxvY2F0b3IoKTsKIAlhdXRvIF9fbnB0ciA9IF9fbm9kZV9h bGxvY190cmFpdHM6OmFsbG9jYXRlKF9fYWxsb2MsIDEpOwotCV9fbm9kZV9wdHIgX19uID0g c3RkOjpfX3RvX2FkZHJlc3MoX19ucHRyKTsKIAlfX3RyeQogCSAgewotCSAgICA6Om5ldyAo KHZvaWQqKV9fbikgX19ub2RlX3R5cGU7Ci0JICAgIF9fbm9kZV9hbGxvY190cmFpdHM6OmNv bnN0cnVjdChfX2FsbG9jLCBfX24tPl9NX3ZhbHB0cigpLAorCSAgICBfX25vZGVfYWxsb2Nf dHJhaXRzOjpjb25zdHJ1Y3QoX19hbGxvYywgc3RkOjpfX3RvX2FkZHJlc3MoX19ucHRyKSk7 CisJICAgIF9fbm9kZV9hbGxvY190cmFpdHM6OmNvbnN0cnVjdChfX2FsbG9jLCBfX25wdHIt Pl9NX3ZhbHB0cigpLAogCQkJCQkgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4p OwotCSAgICByZXR1cm4gX19uOworCSAgICByZXR1cm4gX19ucHRyOwogCSAgfQogCV9fY2F0 Y2goLi4uKQogCSAgewotCSAgICBfX24tPn5fX25vZGVfdHlwZSgpOworCSAgICBfX25vZGVf YWxsb2NfdHJhaXRzOjpkZXN0cm95KF9fYWxsb2MsIHN0ZDo6X190b19hZGRyZXNzKF9fbnB0 cikpOwogCSAgICBfX25vZGVfYWxsb2NfdHJhaXRzOjpkZWFsbG9jYXRlKF9fYWxsb2MsIF9f bnB0ciwgMSk7CiAJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOwogCSAgfQpAQCAtMjA0 NSwxMCArMjUyOCw5IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogICAgIHZvaWQKICAgICBfSGFz aHRhYmxlX2FsbG9jPF9Ob2RlQWxsb2M+OjpfTV9kZWFsbG9jYXRlX25vZGVfcHRyKF9fbm9k ZV9wdHIgX19uKQogICAgIHsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19ub2RlX2FsbG9j X3RyYWl0czo6cG9pbnRlciBfUHRyOwotICAgICAgYXV0byBfX3B0ciA9IHN0ZDo6cG9pbnRl cl90cmFpdHM8X1B0cj46OnBvaW50ZXJfdG8oKl9fbik7Ci0gICAgICBfX24tPn5fX25vZGVf dHlwZSgpOwotICAgICAgX19ub2RlX2FsbG9jX3RyYWl0czo6ZGVhbGxvY2F0ZShfTV9ub2Rl X2FsbG9jYXRvcigpLCBfX3B0ciwgMSk7CisgICAgICBhdXRvJiBfX2FsbG9jID0gX01fbm9k ZV9hbGxvY2F0b3IoKTsKKyAgICAgIF9fbm9kZV9hbGxvY190cmFpdHM6OmRlc3Ryb3koX19h bGxvYywgc3RkOjpfX3RvX2FkZHJlc3MoX19uKSk7CisgICAgICBfX25vZGVfYWxsb2NfdHJh aXRzOjpkZWFsbG9jYXRlKF9fYWxsb2MsIF9fbiwgMSk7CiAgICAgfQogCiAgIHRlbXBsYXRl PHR5cGVuYW1lIF9Ob2RlQWxsb2M+CkBAIC0yMDY5LDExICsyNTUxLDkgQEAgbmFtZXNwYWNl IF9fZGV0YWlsCiAgICAgLT4gX19idWNrZXRzX3B0cgogICAgIHsKICAgICAgIF9fYnVja2V0 c19hbGxvY190eXBlIF9fYWxsb2MoX01fbm9kZV9hbGxvY2F0b3IoKSk7Ci0KICAgICAgIGF1 dG8gX19wdHIgPSBfX2J1Y2tldHNfYWxsb2NfdHJhaXRzOjphbGxvY2F0ZShfX2FsbG9jLCBf X2JrdF9jb3VudCk7Ci0gICAgICBfX2J1Y2tldHNfcHRyIF9fcCA9IHN0ZDo6X190b19hZGRy ZXNzKF9fcHRyKTsKLSAgICAgIF9fYnVpbHRpbl9tZW1zZXQoX19wLCAwLCBfX2JrdF9jb3Vu dCAqIHNpemVvZihfX25vZGVfYmFzZV9wdHIpKTsKLSAgICAgIHJldHVybiBfX3A7CisgICAg ICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9kZWZhdWx0X24oX19wdHIsIF9fYmt0X2NvdW50KTsK KyAgICAgIHJldHVybiBfX3B0cjsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX05v ZGVBbGxvYz4KQEAgLTIwODIsMTAgKzI1NjIsOSBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAg ICBfTV9kZWFsbG9jYXRlX2J1Y2tldHMoX19idWNrZXRzX3B0ciBfX2JrdHMsCiAJCQkgIHN0 ZDo6c2l6ZV90IF9fYmt0X2NvdW50KQogICAgIHsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X19idWNrZXRzX2FsbG9jX3RyYWl0czo6cG9pbnRlciBfUHRyOwotICAgICAgYXV0byBfX3B0 ciA9IHN0ZDo6cG9pbnRlcl90cmFpdHM8X1B0cj46OnBvaW50ZXJfdG8oKl9fYmt0cyk7CiAg ICAgICBfX2J1Y2tldHNfYWxsb2NfdHlwZSBfX2FsbG9jKF9NX25vZGVfYWxsb2NhdG9yKCkp OwotICAgICAgX19idWNrZXRzX2FsbG9jX3RyYWl0czo6ZGVhbGxvY2F0ZShfX2FsbG9jLCBf X3B0ciwgX19ia3RfY291bnQpOworICAgICAgc3RkOjpfRGVzdHJveV9uKF9fYmt0cywgX19i a3RfY291bnQpOworICAgICAgX19idWNrZXRzX2FsbG9jX3RyYWl0czo6ZGVhbGxvY2F0ZShf X2FsbG9jLCBfX2JrdHMsIF9fYmt0X2NvdW50KTsKICAgICB9CiAKICAvLy9AfSBoYXNodGFi bGUtZGV0YWlsCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRh aW5lcnMvdW5vcmRlcmVkX21hcC9hbGxvY2F0b3IvZXh0X3B0ci5jYyBiL2xpYnN0ZGMrKy12 My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRfbWFwL2FsbG9jYXRvci9leHRf cHRyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YTcwOTZh NTFmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29u dGFpbmVycy91bm9yZGVyZWRfbWFwL2FsbG9jYXRvci9leHRfcHRyLmNjCkBAIC0wLDAgKzEs NDAgQEAKKy8vIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGMrKzExIH0gfQorCisjaW5jbHVkZSA8 dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dGVzdHN1aXRl X2hvb2tzLmg+CisjaW5jbHVkZSA8dGVzdHN1aXRlX2FsbG9jYXRvci5oPgorCitzdHJ1Y3Qg VCB7IGludCBpOyB9OworCitib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgbCwgY29uc3QgVCYg cikKK3sgcmV0dXJuIGwuaSA9PSByLmk7IH0KKworc3RydWN0IEgKK3sKKyAgc3RkOjpzaXpl X3QKKyAgb3BlcmF0b3IoKShjb25zdCBUJiB0KSBjb25zdCBub2V4Y2VwdAorICB7IHJldHVy biB0Lmk7IH0KK307CisKK3N0cnVjdCBFIDogc3RkOjplcXVhbF90bzxUPgoreyB9OworCit1 c2luZyBfX2dudV90ZXN0OjpDdXN0b21Qb2ludGVyQWxsb2M7CisKK3RlbXBsYXRlIGNsYXNz IHN0ZDo6dW5vcmRlcmVkX21hcDxULCBpbnQsIEgsIEUsCisJCQkJICBDdXN0b21Qb2ludGVy QWxsb2M8c3RkOjpwYWlyPGNvbnN0IFQsIGludD4+PjsKKwordm9pZCB0ZXN0MDEoKQorewor ICB0eXBlZGVmIEN1c3RvbVBvaW50ZXJBbGxvYzxzdGQ6OnBhaXI8Y29uc3QgVCwgaW50Pj4g YWxsb2NfdHlwZTsKKyAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8VCwgaW50LCBILCBF LCBhbGxvY190eXBlPiB0ZXN0X3R5cGU7CisgIHRlc3RfdHlwZSB2OworICB2Lmluc2VydCh7 IFQoKSwgMCB9KTsKKyAgVkVSSUZZKCArK3YuYmVnaW4oKSA9PSB2LmVuZCgpICk7Cit9CisK K2ludCBtYWluKCkKK3sKKyAgdGVzdDAxKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKyst djMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpbWFwL2FsbG9jYXRv ci9leHRfcHRyLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vu b3JkZXJlZF9tdWx0aW1hcC9hbGxvY2F0b3IvZXh0X3B0ci5jYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTAzNDE3NWI4YTkKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRp bWFwL2FsbG9jYXRvci9leHRfcHRyLmNjCkBAIC0wLDAgKzEsNDAgQEAKKy8vIHsgZGctZG8g cnVuIHsgdGFyZ2V0IGMrKzExIH0gfQorCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNp bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dGVzdHN1aXRlX2hvb2tzLmg+CisjaW5jbHVk ZSA8dGVzdHN1aXRlX2FsbG9jYXRvci5oPgorCitzdHJ1Y3QgVCB7IGludCBpOyB9OworCiti b29sIG9wZXJhdG9yPT0oY29uc3QgVCYgbCwgY29uc3QgVCYgcikKK3sgcmV0dXJuIGwuaSA9 PSByLmk7IH0KKworc3RydWN0IEgKK3sKKyAgc3RkOjpzaXplX3QKKyAgb3BlcmF0b3IoKShj b25zdCBUJiB0KSBjb25zdCBub2V4Y2VwdAorICB7IHJldHVybiB0Lmk7IH0KK307CisKK3N0 cnVjdCBFIDogc3RkOjplcXVhbF90bzxUPgoreyB9OworCit1c2luZyBfX2dudV90ZXN0OjpD dXN0b21Qb2ludGVyQWxsb2M7CisKK3RlbXBsYXRlIGNsYXNzIHN0ZDo6dW5vcmRlcmVkX211 bHRpbWFwPFQsIGludCwgSCwgRSwKKwkJCQkgICAgICAgQ3VzdG9tUG9pbnRlckFsbG9jPHN0 ZDo6cGFpcjxjb25zdCBULCBpbnQ+Pj47CisKK3ZvaWQgdGVzdDAxKCkKK3sKKyAgdHlwZWRl ZiBDdXN0b21Qb2ludGVyQWxsb2M8c3RkOjpwYWlyPGNvbnN0IFQsIGludD4+IGFsbG9jX3R5 cGU7CisgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbXVsdGltYXA8VCwgaW50LCBILCBFLCBh bGxvY190eXBlPiB0ZXN0X3R5cGU7CisgIHRlc3RfdHlwZSB2OworICB2Lmluc2VydCh7IFQo KSwgMCB9KTsKKyAgVkVSSUZZKCArK3YuYmVnaW4oKSA9PSB2LmVuZCgpICk7Cit9CisKK2lu dCBtYWluKCkKK3sKKyAgdGVzdDAxKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv dGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpc2V0L2FsbG9jYXRvci9l eHRfcHRyLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3Jk ZXJlZF9tdWx0aXNldC9hbGxvY2F0b3IvZXh0X3B0ci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uOGU4Y2ViMWVkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpc2V0 L2FsbG9jYXRvci9leHRfcHRyLmNjCkBAIC0wLDAgKzEsMzkgQEAKKy8vIHsgZGctZG8gcnVu IHsgdGFyZ2V0IGMrKzExIH0gfQorCisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKyNpbmNs dWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dGVzdHN1aXRlX2hvb2tzLmg+CisjaW5jbHVkZSA8 dGVzdHN1aXRlX2FsbG9jYXRvci5oPgorCitzdHJ1Y3QgVCB7IGludCBpOyB9OworCitib29s IG9wZXJhdG9yPT0oY29uc3QgVCYgbCwgY29uc3QgVCYgcikKK3sgcmV0dXJuIGwuaSA9PSBy Lmk7IH0KKworc3RydWN0IEgKK3sKKyAgc3RkOjpzaXplX3QKKyAgb3BlcmF0b3IoKShjb25z dCBUJiB0KSBjb25zdCBub2V4Y2VwdAorICB7IHJldHVybiB0Lmk7IH0KK307CisKK3N0cnVj dCBFIDogc3RkOjplcXVhbF90bzxUPgoreyB9OworCit1c2luZyBfX2dudV90ZXN0OjpDdXN0 b21Qb2ludGVyQWxsb2M7CisKK3RlbXBsYXRlIGNsYXNzIHN0ZDo6dW5vcmRlcmVkX211bHRp c2V0PFQsIEgsIEUsIEN1c3RvbVBvaW50ZXJBbGxvYzxUPj47CisKK3ZvaWQgdGVzdDAxKCkK K3sKKyAgdHlwZWRlZiBDdXN0b21Qb2ludGVyQWxsb2M8VD4gYWxsb2NfdHlwZTsKKyAgdHlw ZWRlZiBzdGQ6OnVub3JkZXJlZF9tdWx0aXNldDxULCBILCBFLCBhbGxvY190eXBlPiB0ZXN0 X3R5cGU7CisgIHRlc3RfdHlwZSB2OworICB2Lmluc2VydChUKCkpOworICBWRVJJRlkoICsr di5iZWdpbigpID09IHYuZW5kKCkgKTsKK30KKworaW50IG1haW4oKQoreworICB0ZXN0MDEo KTsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVy cy91bm9yZGVyZWRfc2V0L2FsbG9jYXRvci9leHRfcHRyLmNjIGIvbGlic3RkYysrLXYzL3Rl c3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9zZXQvYWxsb2NhdG9yL2V4dF9wdHIu Y2MKaW5kZXggYWZjYzU4ZTM5ZjQuLjJjMWJiZTlhZDNlIDEwMDY0NAotLS0gYS9saWJzdGRj KystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX3NldC9hbGxvY2F0b3Iv ZXh0X3B0ci5jYworKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMv dW5vcmRlcmVkX3NldC9hbGxvY2F0b3IvZXh0X3B0ci5jYwpAQCAtMSwyNCArMSw0IEBACi0v LyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KLS8vCi0vLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFy eS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi0vLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKLS8vIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0vLyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9w dGlvbikKLS8vIGFueSBsYXRlciB2ZXJzaW9uLgotCi0vLyBUaGlzIGxpYnJhcnkgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLS8vIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCi0vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi0vLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgotCi0vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotLy8gd2l0aCB0aGlzIGxpYnJh cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKLS8vIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KLQotLy8gVGhpcyB0ZXN0IGZhaWxzIHRvIGNvbXBpbGUg c2luY2UgQysrMTcgKHNlZSB4ZmFpbC1pZiBiZWxvdykgc28gd2UgY2FuIG9ubHkKLS8vIGRv IGEgInJ1biIgdGVzdCBmb3IgQysrMTEgYW5kIEMrKzE0LCBhbmQgYSAiY29tcGlsZSIgdGVz dCBmb3IgQysrMTcgYW5kIHVwLgotLy8geyBkZy1kbyBydW4geyB0YXJnZXQgeyBjKysxMV9v bmx5IHx8IGMrKzE0X29ubHkgfSB9IH0KLS8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBj KysxNyB9IH0KKy8vIHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgYysrMTEgfSB9IH0KIAogI2lu Y2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMjYsMTUgKzYs MjIgQEAKICNpbmNsdWRlIDx0ZXN0c3VpdGVfYWxsb2NhdG9yLmg+CiAKIHN0cnVjdCBUIHsg aW50IGk7IH07Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgVCYgbCwgY29uc3QgVCYgcikgeyBy ZXR1cm4gbC5pID09IHIuaTsgfQotc3RydWN0IEggeyBzdGQ6OnNpemVfdCBvcGVyYXRvcigp KGNvbnN0IFQmIHQpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIHQuaTsgfQorCitib29sIG9w ZXJhdG9yPT0oY29uc3QgVCYgbCwgY29uc3QgVCYgcikKK3sgcmV0dXJuIGwuaSA9PSByLmk7 IH0KKworc3RydWN0IEgKK3sKKyAgc3RkOjpzaXplX3QKKyAgb3BlcmF0b3IoKShjb25zdCBU JiB0KSBjb25zdCBub2V4Y2VwdAorICB7IHJldHVybiB0Lmk7IH0KIH07Ci1zdHJ1Y3QgRSA6 IHN0ZDo6ZXF1YWxfdG88VD4geyB9OworCitzdHJ1Y3QgRSA6IHN0ZDo6ZXF1YWxfdG88VD4K K3sgfTsKIAogdXNpbmcgX19nbnVfdGVzdDo6Q3VzdG9tUG9pbnRlckFsbG9jOwogCi0vLyB7 IGRnLXhmYWlsLWlmICJub2RlIHJlaW5zZXJ0aW9uIGFzc3VtZXMgcmF3IHBvaW50ZXJzIiB7 IGMrKzE3IH0gfQotLy8gVE9ETyB3aGVuIHJlbW92aW5nIHRoaXMgeGZhaWwgY2hhbmdlIHRo ZSB0ZXN0IGJhY2sgdG8gImRnLWRvIHJ1biIuCiB0ZW1wbGF0ZSBjbGFzcyBzdGQ6OnVub3Jk ZXJlZF9zZXQ8VCwgSCwgRSwgQ3VzdG9tUG9pbnRlckFsbG9jPFQ+PjsKIAogdm9pZCB0ZXN0 MDEoKQo= --------------EP9uVqCKJ2OnrO0A7AuwR0u4--