From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28405 invoked by alias); 20 Nov 2018 22:58:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 28374 invoked by uid 89); 20 Nov 2018 22:58:37 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-10.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_NEUTRAL autolearn=ham version=3.3.2 spammy=H*F:D*verizon.net, H*Ad:D*verizon.net, H*M:verizon, rolled X-HELO: sonic302-4.consmr.mail.bf2.yahoo.com Received: from sonic302-4.consmr.mail.bf2.yahoo.com (HELO sonic302-4.consmr.mail.bf2.yahoo.com) (74.6.135.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 20 Nov 2018 22:58:31 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1542754709; bh=b6TLAjaH/6vs3NwMvrtqr2ADSf8RKUTZ7gZGHt5t4Og=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From:Subject; b=hSe3/jHYSJ/6tu3alhMeivfn1O2l/JzBc/v89wqo9u6uRoMkI30Cl+g0CHO48k34fKBLyrWTtimd4FJkCgAhiMu4+4Q7Q9Rnp7DJnzr+zQr4Szdl2dMbRMufZYWPLhUbGInl7iE00EaQpdMMHmpk+y05InHT8Ol1IBoBc+c/zmEoTRdXyejVt2ItevVjSA0xAMrv6rMYthGbvGjvBJDmVmdAOCjG70ptDZfXgsEvI3dJInypLHJQEBcNlfbRlfUyW9nX9OJhnDdGLSo4d4NA4UvFk15Dwg0JsRbUr5eHoNgJJf4Tuqp6vMaQq+0fn3A8YgoQzYRSZ0Rn/21i24ve6w== Received: from sonic.gate.mail.ne1.yahoo.com by sonic302.consmr.mail.bf2.yahoo.com with HTTP; Tue, 20 Nov 2018 22:58:29 +0000 Received: from pool-173-64-121-45.bltmmd.fios.verizon.net (EHLO [192.168.1.3]) ([173.64.121.45]) by smtp402.mail.bf1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 9306908365b5a6728693a97dc00f0e71; Tue, 20 Nov 2018 22:58:26 +0000 (UTC) Subject: Re: [PATCH, libstdc++] Implement P0415 More constexpr for std::complex. To: Jonathan Wakely Cc: =?UTF-8?Q?Daniel_Kr=c3=bcgler?= , libstdc++ , gcc-patches List References: <5e2b3a30-fd0c-351d-256c-b70e060d4994@verizon.net> <25862c9d-87f6-9f86-aad5-e1bf9e632d35@verizon.net> <4b33abf3-cf67-8c62-5b1d-c06da4d97748@verizon.net> <20181119111300.GP28365@redhat.com> From: Ed Smith-Rowland <3dw4rd@verizon.net> Message-ID: Date: Tue, 20 Nov 2018 22:58:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: <20181119111300.GP28365@redhat.com> Content-Type: multipart/mixed; boundary="------------AED9253DE78D7BE92C1402DE" X-SW-Source: 2018-11/txt/msg01778.txt.bz2 This is a multi-part message in MIME format. --------------AED9253DE78D7BE92C1402DE Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-length: 3199 On 11/19/18 6:13 AM, Jonathan Wakely wrote: > On 16/11/18 19:39 -0500, Ed Smith-Rowland wrote: >> @@ -322,67 +323,43 @@ >>   //@{ >>   ///  Return new complex value @a x plus @a y. >>   template >> -    inline complex<_Tp> >> +    inline _GLIBCXX20_CONSTEXPR complex<_Tp> >>     operator+(const complex<_Tp>& __x, const complex<_Tp>& __y) >> -    { >> -      complex<_Tp> __r = __x; >> -      __r += __y; >> -      return __r; >> -    } >> +    { return complex<_Tp>(__x.real() + __y.real(), __x.imag() + >> __y.imag()); } > > Is this change (and all the similar ones) really needed? > > Doesn't the fact that all the constructors and member operators of > std::complex mean that the original definition is also valid in a > constexpr function? These changes are rolled back. Sorry. >> @@ -1163,50 +1143,43 @@ >> #endif >> >>       template >> -        complex& >> +        _GLIBCXX20_CONSTEXPR complex& >>         operator=(const complex<_Tp>&  __z) >>     { >> -      __real__ _M_value = __z.real(); >> -      __imag__ _M_value = __z.imag(); >> +      _M_value = __z.__rep(); > > These changes look OK, but I wonder if we shouldn't ask the compiler > to make it possible to use __real__ and __imag__ in constexpr > functions instead. > > I assume it doesn't, and that's why you made this change. But if it > Just Worked, and the other changes I commented on above are also > unnecessary, then this patch would *mostly* just be adding > _GLIBCXX20_CONSTEXPR which is OK for stage 3 (as it doesn't affect any > dialects except C++2a). Yes, this is the issue.  I agree that constexpr _real__, __imag__would be better. Do you have any idea where this change would be?  I grepped around a little and couldn't figure it out.  if you don't I'll look more. Actually, looking at constexpr.c it looks like the old way ought to work... OK, plain assignment works but not the others.  Interesting. > >> @@ -1872,7 +1831,7 @@ >>     { return _Tp(); } >> >>   template >> -    inline typename __gnu_cxx::__promote<_Tp>::__type >> +    _GLIBCXX_CONSTEXPR inline typename >> __gnu_cxx::__promote<_Tp>::__type > > This should be _GLIBCXX20_CONSTEXPR. Done. >> Index: >> testsuite/26_numerics/complex/comparison_operators/more_constexpr.cc >> =================================================================== >> --- >> testsuite/26_numerics/complex/comparison_operators/more_constexpr.cc >> (nonexistent) >> +++ >> testsuite/26_numerics/complex/comparison_operators/more_constexpr.cc >> (working copy) >> @@ -0,0 +1,51 @@ >> +// { dg-do compile { target c++2a } } > > All the tests with { target c++2a} should also have: > > // { dg-options "-std=gnu++2a" } > > Because otherwise they are skipped by default, and only get run when > RUNTESTFLAGS explicitly includes something like > --target_board=unix/-std=gnu++2a > > The dg-options needs to come first, or it doesn't apply before the > check for { target c++2a }. > Thank you, done. Updated patch attached.  I'd like to understand why     __real__ _M_value += __z.real(); doesn't work though. Ed --------------AED9253DE78D7BE92C1402DE Content-Type: text/plain; charset=UTF-8; name="patch_p0415_2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch_p0415_2" Content-length: 47280 SW5kZXg6IGluY2x1ZGUvc3RkL2NvbXBsZXgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gaW5jbHVkZS9zdGQvY29tcGxleAkocmV2aXNpb24gMjY2MjUx KQorKysgaW5jbHVkZS9zdGQvY29tcGxleAkod29ya2luZyBjb3B5KQpAQCAt NzAsMTAgKzcwLDExIEBACiAgIC8vLyAgUmV0dXJuIHBoYXNlIGFuZ2xlIG9m IEBhIHouCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIGFyZyhjb25z dCBjb21wbGV4PF9UcD4mKTsKICAgLy8vICBSZXR1cm4gQGEgeiBtYWduaXR1 ZGUgc3F1YXJlZC4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgbm9y bShjb25zdCBjb21wbGV4PF9UcD4mKTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBfVHAgX0dMSUJDWFgyMF9DT05TVEVYUFIgbm9ybShjb25zdCBjb21w bGV4PF9UcD4mKTsKIAogICAvLy8gIFJldHVybiBjb21wbGV4IGNvbmp1Z2F0 ZSBvZiBAYSB6LgotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8 X1RwPiBjb25qKGNvbnN0IGNvbXBsZXg8X1RwPiYpOworICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CisgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIgY29tcGxl eDxfVHA+IGNvbmooY29uc3QgY29tcGxleDxfVHA+Jik7CiAgIC8vLyAgUmV0 dXJuIGNvbXBsZXggd2l0aCBtYWduaXR1ZGUgQGEgcmhvIGFuZCBhbmdsZSBA YSB0aGV0YS4KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9U cD4gcG9sYXIoY29uc3QgX1RwJiwgY29uc3QgX1RwJiA9IDApOwogCkBAIC0x NjksMTggKzE3MCwxOCBAQAogCiAgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZF X0xJQl9ERUZFQ1RTCiAgICAgICAvLyBEUiAzODcuIHN0ZDo6Y29tcGxleCBv dmVyLWVuY2Fwc3VsYXRlZC4KLSAgICAgIHZvaWQKKyAgICAgIF9HTElCQ1hY MjBfQ09OU1RFWFBSIHZvaWQKICAgICAgIHJlYWwoX1RwIF9fdmFsKSB7IF9N X3JlYWwgPSBfX3ZhbDsgfQogCi0gICAgICB2b2lkCisgICAgICBfR0xJQkNY WDIwX0NPTlNURVhQUiB2b2lkCiAgICAgICBpbWFnKF9UcCBfX3ZhbCkgeyBf TV9pbWFnID0gX192YWw7IH0KIAogICAgICAgLy8vIEFzc2lnbiBhIHNjYWxh ciB0byB0aGlzIGNvbXBsZXggbnVtYmVyLgotICAgICAgY29tcGxleDxfVHA+ JiBvcGVyYXRvcj0oY29uc3QgX1RwJik7CisgICAgICBfR0xJQkNYWDIwX0NP TlNURVhQUiBjb21wbGV4PF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmKTsK IAogICAgICAgLy8vIEFkZCBhIHNjYWxhciB0byB0aGlzIGNvbXBsZXggbnVt YmVyLgogICAgICAgLy8gMjYuMi41LzEKLSAgICAgIGNvbXBsZXg8X1RwPiYK KyAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXg8X1RwPiYKICAg ICAgIG9wZXJhdG9yKz0oY29uc3QgX1RwJiBfX3QpCiAgICAgICB7CiAJX01f cmVhbCArPSBfX3Q7CkBAIC0xODksNyArMTkwLDcgQEAKIAogICAgICAgLy8v IFN1YnRyYWN0IGEgc2NhbGFyIGZyb20gdGhpcyBjb21wbGV4IG51bWJlci4K ICAgICAgIC8vIDI2LjIuNS8zCi0gICAgICBjb21wbGV4PF9UcD4mCisgICAg ICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PF9UcD4mCiAgICAgICBv cGVyYXRvci09KGNvbnN0IF9UcCYgX190KQogICAgICAgewogCV9NX3JlYWwg LT0gX190OwpAQCAtMTk3LDMwICsxOTgsMzAgQEAKICAgICAgIH0KIAogICAg ICAgLy8vIE11bHRpcGx5IHRoaXMgY29tcGxleCBudW1iZXIgYnkgYSBzY2Fs YXIuCi0gICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKj0oY29uc3QgX1Rw Jik7CisgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PF9UcD4m IG9wZXJhdG9yKj0oY29uc3QgX1RwJik7CiAgICAgICAvLy8gRGl2aWRlIHRo aXMgY29tcGxleCBudW1iZXIgYnkgYSBzY2FsYXIuCi0gICAgICBjb21wbGV4 PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgX1RwJik7CisgICAgICBfR0xJQkNY WDIwX0NPTlNURVhQUiBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLz0oY29uc3Qg X1RwJik7CiAKICAgICAgIC8vIExldCB0aGUgY29tcGlsZXIgc3ludGhlc2l6 ZSB0aGUgY29weSBhc3NpZ25tZW50IG9wZXJhdG9yCiAjaWYgX19jcGx1c3Bs dXMgPj0gMjAxMTAzTAotICAgICAgY29tcGxleCYgb3BlcmF0b3I9KGNvbnN0 IGNvbXBsZXgmKSA9IGRlZmF1bHQ7CisgICAgICBfR0xJQkNYWDIwX0NPTlNU RVhQUiBjb21wbGV4JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleCYpID0gZGVm YXVsdDsKICNlbmRpZgogCiAgICAgICAvLy8gQXNzaWduIGFub3RoZXIgY29t cGxleCBudW1iZXIgdG8gdGhpcyBvbmUuCiAgICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVXA+Ci0gICAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3I9KGNv bnN0IGNvbXBsZXg8X1VwPiYpOworICAgICAgICBfR0xJQkNYWDIwX0NPTlNU RVhQUiBjb21wbGV4PF9UcD4mIG9wZXJhdG9yPShjb25zdCBjb21wbGV4PF9V cD4mKTsKICAgICAgIC8vLyBBZGQgYW5vdGhlciBjb21wbGV4IG51bWJlciB0 byB0aGlzIG9uZS4KICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KLSAg ICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvcis9KGNvbnN0IGNvbXBsZXg8 X1VwPiYpOworICAgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4 PF9UcD4mIG9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAg ICAvLy8gU3VidHJhY3QgYW5vdGhlciBjb21wbGV4IG51bWJlciBmcm9tIHRo aXMgb25lLgogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgotICAgICAg ICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+ Jik7CisgICAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXg8X1Rw PiYgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9VcD4mKTsKICAgICAgIC8v LyBNdWx0aXBseSB0aGlzIGNvbXBsZXggbnVtYmVyIGJ5IGFub3RoZXIuCiAg ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+Ci0gICAgICAgIGNvbXBsZXg8 X1RwPiYgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9VcD4mKTsKKyAgICAg ICAgX0dMSUJDWFgyMF9DT05TVEVYUFIgY29tcGxleDxfVHA+JiBvcGVyYXRv cio9KGNvbnN0IGNvbXBsZXg8X1VwPiYpOwogICAgICAgLy8vIERpdmlkZSB0 aGlzIGNvbXBsZXggbnVtYmVyIGJ5IGFub3RoZXIuCiAgICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVXA+Ci0gICAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0 b3IvPShjb25zdCBjb21wbGV4PF9VcD4mKTsKKyAgICAgICAgX0dMSUJDWFgy MF9DT05TVEVYUFIgY29tcGxleDxfVHA+JiBvcGVyYXRvci89KGNvbnN0IGNv bXBsZXg8X1VwPiYpOwogCiAgICAgICBfR0xJQkNYWF9DT05TVEVYUFIgY29t cGxleCBfX3JlcCgpIGNvbnN0CiAgICAgICB7IHJldHVybiAqdGhpczsgfQpA QCAtMjMxLDcgKzIzMiw3IEBACiAgICAgfTsKIAogICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+Ci0gICAgY29tcGxleDxfVHA+JgorICAgIF9HTElCQ1hYMjBf Q09OU1RFWFBSIGNvbXBsZXg8X1RwPiYKICAgICBjb21wbGV4PF9UcD46Om9w ZXJhdG9yPShjb25zdCBfVHAmIF9fdCkKICAgICB7CiAgICAgIF9NX3JlYWwg PSBfX3Q7CkBAIC0yNDEsNyArMjQyLDcgQEAKIAogICAvLyAyNi4yLjUvNQog ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0gICAgY29tcGxleDxfVHA+Jgor ICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXg8X1RwPiYKICAgICBj b21wbGV4PF9UcD46Om9wZXJhdG9yKj0oY29uc3QgX1RwJiBfX3QpCiAgICAg ewogICAgICAgX01fcmVhbCAqPSBfX3Q7CkBAIC0yNTEsNyArMjUyLDcgQEAK IAogICAvLyAyNi4yLjUvNwogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0g ICAgY29tcGxleDxfVHA+JgorICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNv bXBsZXg8X1RwPiYKICAgICBjb21wbGV4PF9UcD46Om9wZXJhdG9yLz0oY29u c3QgX1RwJiBfX3QpCiAgICAgewogICAgICAgX01fcmVhbCAvPSBfX3Q7CkBA IC0yNjEsNyArMjYyLDcgQEAKIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1VwPgotICAgIGNvbXBsZXg8X1Rw PiYKKyAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PF9UcD4mCiAg ICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+ JiBfX3opCiAgICAgewogICAgICAgX01fcmVhbCA9IF9fei5yZWFsKCk7CkBA IC0yNzIsNyArMjczLDcgQEAKICAgLy8gMjYuMi41LzkKICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KLSAg ICBjb21wbGV4PF9UcD4mCisgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIgY29t cGxleDxfVHA+JgogICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IrPShjb25z dCBjb21wbGV4PF9VcD4mIF9feikKICAgICB7CiAgICAgICBfTV9yZWFsICs9 IF9fei5yZWFsKCk7CkBAIC0yODMsNyArMjg0LDcgQEAKICAgLy8gMjYuMi41 LzExCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVXA+Ci0gICAgY29tcGxleDxfVHA+JgorICAgIF9HTElCQ1hY MjBfQ09OU1RFWFBSIGNvbXBsZXg8X1RwPiYKICAgICBjb21wbGV4PF9UcD46 Om9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCiAgICAgewog ICAgICAgX01fcmVhbCAtPSBfX3oucmVhbCgpOwpAQCAtMjk1LDcgKzI5Niw3 IEBACiAgIC8vIFhYWDogVGhpcyBpcyBhIGdyYW1tYXIgc2Nob29sIGltcGxl bWVudGF0aW9uLgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1VwPgotICAgIGNvbXBsZXg8X1RwPiYKKyAgICBf R0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PF9UcD4mCiAgICAgY29tcGxl eDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0IGNvbXBsZXg8X1VwPiYgX196KQog ICAgIHsKICAgICAgIGNvbnN0IF9UcCBfX3IgPSBfTV9yZWFsICogX196LnJl YWwoKSAtIF9NX2ltYWcgKiBfX3ouaW1hZygpOwpAQCAtMzA4LDcgKzMwOSw3 IEBACiAgIC8vIFhYWDogVGhpcyBpcyBhIGdyYW1tYXIgc2Nob29sIGltcGxl bWVudGF0aW9uLgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1VwPgotICAgIGNvbXBsZXg8X1RwPiYKKyAgICBf R0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PF9UcD4mCiAgICAgY29tcGxl eDxfVHA+OjpvcGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1VwPiYgX196KQog ICAgIHsKICAgICAgIGNvbnN0IF9UcCBfX3IgPSAgX01fcmVhbCAqIF9fei5y ZWFsKCkgKyBfTV9pbWFnICogX196LmltYWcoKTsKQEAgLTMyMiw3ICszMjMs NyBAQAogICAvL0B7CiAgIC8vLyAgUmV0dXJuIG5ldyBjb21wbGV4IHZhbHVl IEBhIHggcGx1cyBAYSB5LgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0g ICAgaW5saW5lIGNvbXBsZXg8X1RwPgorICAgIGlubGluZSBfR0xJQkNYWDIw X0NPTlNURVhQUiBjb21wbGV4PF9UcD4KICAgICBvcGVyYXRvcisoY29uc3Qg Y29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQog ICAgIHsKICAgICAgIGNvbXBsZXg8X1RwPiBfX3IgPSBfX3g7CkBAIC0zMzEs NyArMzMyLDcgQEAKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgotICAgIGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBpbmxpbmUgX0dMSUJD WFgyMF9DT05TVEVYUFIgY29tcGxleDxfVHA+CiAgICAgb3BlcmF0b3IrKGNv bnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKICAgICB7 CiAgICAgICBjb21wbGV4PF9UcD4gX19yID0gX194OwpAQCAtMzQwLDcgKzM0 MSw3IEBACiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAg ICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYMjBf Q09OU1RFWFBSIGNvbXBsZXg8X1RwPgogICAgIG9wZXJhdG9yKyhjb25zdCBf VHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICAgewogICAg ICAgY29tcGxleDxfVHA+IF9fciA9IF9feTsKQEAgLTM1Miw3ICszNTMsNyBA QAogICAvL0B7CiAgIC8vLyAgUmV0dXJuIG5ldyBjb21wbGV4IHZhbHVlIEBh IHggbWludXMgQGEgeS4KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotICAg IGlubGluZSBjb21wbGV4PF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFgyMF9D T05TVEVYUFIgY29tcGxleDxfVHA+CiAgICAgb3BlcmF0b3ItKGNvbnN0IGNv bXBsZXg8X1RwPiYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKICAg ICB7CiAgICAgICBjb21wbGV4PF9UcD4gX19yID0gX194OwpAQCAtMzYxLDcg KzM2Miw3IEBACiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K LSAgICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgaW5saW5lIF9HTElCQ1hY MjBfQ09OU1RFWFBSIGNvbXBsZXg8X1RwPgogICAgIG9wZXJhdG9yLShjb25z dCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICAgewog ICAgICAgY29tcGxleDxfVHA+IF9fciA9IF9feDsKQEAgLTM3MCwxMSArMzcx LDExIEBACiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAg ICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYMjBf Q09OU1RFWFBSIGNvbXBsZXg8X1RwPgogICAgIG9wZXJhdG9yLShjb25zdCBf VHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICAgewotICAg ICAgY29tcGxleDxfVHA+IF9fcihfX3gsIC1fX3kuaW1hZygpKTsKLSAgICAg IF9fciAtPSBfX3kucmVhbCgpOworICAgICAgY29tcGxleDxfVHA+IF9fciA9 IC1fX3k7CisgICAgICBfX3IgKz0gX194OwogICAgICAgcmV0dXJuIF9fcjsK ICAgICB9CiAgIC8vQH0KQEAgLTM4Miw3ICszODMsNyBAQAogICAvL0B7CiAg IC8vLyAgUmV0dXJuIG5ldyBjb21wbGV4IHZhbHVlIEBhIHggdGltZXMgQGEg eS4KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotICAgIGlubGluZSBjb21w bGV4PF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFgyMF9DT05TVEVYUFIgY29t cGxleDxfVHA+CiAgICAgb3BlcmF0b3IqKGNvbnN0IGNvbXBsZXg8X1RwPiYg X194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKICAgICB7CiAgICAgICBj b21wbGV4PF9UcD4gX19yID0gX194OwpAQCAtMzkxLDcgKzM5Miw3IEBACiAg ICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAgICBpbmxpbmUg Y29tcGxleDxfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYMjBfQ09OU1RFWFBS IGNvbXBsZXg8X1RwPgogICAgIG9wZXJhdG9yKihjb25zdCBjb21wbGV4PF9U cD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICAgewogICAgICAgY29tcGxl eDxfVHA+IF9fciA9IF9feDsKQEAgLTQwMCw3ICs0MDEsNyBAQAogICAgIH0K IAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0gICAgaW5saW5lIGNvbXBs ZXg8X1RwPgorICAgIGlubGluZSBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21w bGV4PF9UcD4KICAgICBvcGVyYXRvciooY29uc3QgX1RwJiBfX3gsIGNvbnN0 IGNvbXBsZXg8X1RwPiYgX195KQogICAgIHsKICAgICAgIGNvbXBsZXg8X1Rw PiBfX3IgPSBfX3k7CkBAIC00MTIsNyArNDEzLDcgQEAKICAgLy9AewogICAv Ly8gIFJldHVybiBuZXcgY29tcGxleCB2YWx1ZSBAYSB4IGRpdmlkZWQgYnkg QGEgeS4KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotICAgIGlubGluZSBj b21wbGV4PF9UcD4KKyAgICBpbmxpbmUgX0dMSUJDWFgyMF9DT05TVEVYUFIg Y29tcGxleDxfVHA+CiAgICAgb3BlcmF0b3IvKGNvbnN0IGNvbXBsZXg8X1Rw PiYgX194LCBjb25zdCBjb21wbGV4PF9UcD4mIF9feSkKICAgICB7CiAgICAg ICBjb21wbGV4PF9UcD4gX19yID0gX194OwpAQCAtNDIxLDcgKzQyMiw3IEBA CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAgICBpbmxp bmUgY29tcGxleDxfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYMjBfQ09OU1RF WFBSIGNvbXBsZXg8X1RwPgogICAgIG9wZXJhdG9yLyhjb25zdCBjb21wbGV4 PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICAgewogICAgICAgY29t cGxleDxfVHA+IF9fciA9IF9feDsKQEAgLTQzMCw3ICs0MzEsNyBAQAogICAg IH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0gICAgaW5saW5lIGNv bXBsZXg8X1RwPgorICAgIGlubGluZSBfR0xJQkNYWDIwX0NPTlNURVhQUiBj b21wbGV4PF9UcD4KICAgICBvcGVyYXRvci8oY29uc3QgX1RwJiBfX3gsIGNv bnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgIHsKICAgICAgIGNvbXBsZXg8 X1RwPiBfX3IgPSBfX3g7CkBAIC00NDEsMTUgKzQ0MiwxNSBAQAogCiAgIC8v LyAgUmV0dXJuIEBhIHguCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAg ICBpbmxpbmUgY29tcGxleDxfVHA+CisgICAgaW5saW5lIF9HTElCQ1hYMjBf Q09OU1RFWFBSIGNvbXBsZXg8X1RwPgogICAgIG9wZXJhdG9yKyhjb25zdCBj b21wbGV4PF9UcD4mIF9feCkKICAgICB7IHJldHVybiBfX3g7IH0KIAogICAv Ly8gIFJldHVybiBjb21wbGV4IG5lZ2F0aW9uIG9mIEBhIHguCiAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KLSAgICBpbmxpbmUgY29tcGxleDxfVHA+Cisg ICAgaW5saW5lIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXg8X1RwPgog ICAgIG9wZXJhdG9yLShjb25zdCBjb21wbGV4PF9UcD4mIF9feCkKLSAgICB7 ICByZXR1cm4gY29tcGxleDxfVHA+KC1fX3gucmVhbCgpLCAtX194LmltYWco KSk7IH0KKyAgICB7IHJldHVybiBjb21wbGV4PF9UcD4oLV9feC5yZWFsKCks IC1fX3guaW1hZygpKTsgfQogCiAgIC8vQHsKICAgLy8vICBSZXR1cm4gdHJ1 ZSBpZiBAYSB4IGlzIGVxdWFsIHRvIEBhIHkuCkBAIC02NTgsNyArNjU5LDcg QEAKICAgICBzdHJ1Y3QgX05vcm1faGVscGVyCiAgICAgewogICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgotICAgICAgICBzdGF0aWMgaW5saW5lIF9U cCBfU19kb19pdChjb25zdCBjb21wbGV4PF9UcD4mIF9feikKKyAgICAgICAg c3RhdGljIGlubGluZSBfR0xJQkNYWF9DT05TVEVYUFIgX1RwIF9TX2RvX2l0 KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgICAgICB7CiAgICAgICAg ICAgY29uc3QgX1RwIF9feCA9IF9fei5yZWFsKCk7CiAgICAgICAgICAgY29u c3QgX1RwIF9feSA9IF9fei5pbWFnKCk7CkBAIC02NzAsMTUgKzY3MSwxOCBA QAogICAgIHN0cnVjdCBfTm9ybV9oZWxwZXI8dHJ1ZT4KICAgICB7CiAgICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0gICAgICAgIHN0YXRpYyBpbmxp bmUgX1RwIF9TX2RvX2l0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQorICAg ICAgICBzdGF0aWMgaW5saW5lIF9HTElCQ1hYX0NPTlNURVhQUiBfVHAgX1Nf ZG9faXQoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICAgICAgIHsKLSAg ICAgICAgICBfVHAgX19yZXMgPSBzdGQ6OmFicyhfX3opOwotICAgICAgICAg IHJldHVybiBfX3JlcyAqIF9fcmVzOworICAgICAgICAgIC8vX1RwIF9fcmVz ID0gc3RkOjphYnMoX196KTsKKyAgICAgICAgICAvL3JldHVybiBfX3JlcyAq IF9fcmVzOworICAgICAgICAgIGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgp OworICAgICAgICAgIGNvbnN0IF9UcCBfX3kgPSBfX3ouaW1hZygpOworICAg ICAgICAgIHJldHVybiBfX3ggKiBfX3ggKyBfX3kgKiBfX3k7CiAgICAgICAg IH0KICAgICB9OwogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAgICBp bmxpbmUgX1RwCisgICAgaW5saW5lIF9HTElCQ1hYMjBfQ09OU1RFWFBSIF9U cAogICAgIG5vcm0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICAgewog ICAgICAgcmV0dXJuIF9Ob3JtX2hlbHBlcjxfX2lzX2Zsb2F0aW5nPF9UcD46 Ol9fdmFsdWUKQEAgLTY5NCw3ICs2OTgsNyBAQAogICAgIH0KIAogICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+Ci0gICAgaW5saW5lIGNvbXBsZXg8X1RwPgor ICAgIGlubGluZSBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PF9UcD4K ICAgICBjb25qKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgIHsgcmV0 dXJuIGNvbXBsZXg8X1RwPihfX3oucmVhbCgpLCAtX196LmltYWcoKSk7IH0K IApAQCAtMTExNSwxMyArMTExOSwxMyBAQAogCiAgICAgICAvLyBfR0xJQkNY WF9SRVNPTFZFX0xJQl9ERUZFQ1RTCiAgICAgICAvLyBEUiAzODcuIHN0ZDo6 Y29tcGxleCBvdmVyLWVuY2Fwc3VsYXRlZC4KLSAgICAgIHZvaWQKKyAgICAg IF9HTElCQ1hYMjBfQ09OU1RFWFBSIHZvaWQKICAgICAgIHJlYWwoZmxvYXQg X192YWwpIHsgX19yZWFsX18gX01fdmFsdWUgPSBfX3ZhbDsgfQogCi0gICAg ICB2b2lkCisgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiB2b2lkCiAgICAg ICBpbWFnKGZsb2F0IF9fdmFsKSB7IF9faW1hZ19fIF9NX3ZhbHVlID0gX192 YWw7IH0KIAotICAgICAgY29tcGxleCYKKyAgICAgIF9HTElCQ1hYMjBfQ09O U1RFWFBSIGNvbXBsZXgmCiAgICAgICBvcGVyYXRvcj0oZmxvYXQgX19mKQog ICAgICAgewogCV9NX3ZhbHVlID0gX19mOwpAQCAtMTEyOCw3ICsxMTMyLDcg QEAKIAlyZXR1cm4gKnRoaXM7CiAgICAgICB9CiAKLSAgICAgIGNvbXBsZXgm CisgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4JgogICAgICAg b3BlcmF0b3IrPShmbG9hdCBfX2YpCiAgICAgICB7CiAJX01fdmFsdWUgKz0g X19mOwpAQCAtMTEzNSw3ICsxMTM5LDcgQEAKIAlyZXR1cm4gKnRoaXM7CiAg ICAgICB9CiAKLSAgICAgIGNvbXBsZXgmCisgICAgICBfR0xJQkNYWDIwX0NP TlNURVhQUiBjb21wbGV4JgogICAgICAgb3BlcmF0b3ItPShmbG9hdCBfX2Yp CiAgICAgICB7CiAJX01fdmFsdWUgLT0gX19mOwpAQCAtMTE0Miw3ICsxMTQ2 LDcgQEAKIAlyZXR1cm4gKnRoaXM7CiAgICAgICB9CiAKLSAgICAgIGNvbXBs ZXgmCisgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4JgogICAg ICAgb3BlcmF0b3IqPShmbG9hdCBfX2YpCiAgICAgICB7CiAJX01fdmFsdWUg Kj0gX19mOwpAQCAtMTE0OSw3ICsxMTUzLDcgQEAKIAlyZXR1cm4gKnRoaXM7 CiAgICAgICB9CiAKLSAgICAgIGNvbXBsZXgmCisgICAgICBfR0xJQkNYWDIw X0NPTlNURVhQUiBjb21wbGV4JgogICAgICAgb3BlcmF0b3IvPShmbG9hdCBf X2YpCiAgICAgICB7CiAJX01fdmFsdWUgLz0gX19mOwpAQCAtMTE2Myw3ICsx MTY3LDcgQEAKICNlbmRpZgogCiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+Ci0gICAgICAgIGNvbXBsZXgmCisgICAgICAgIF9HTElCQ1hYMjBfQ09O U1RFWFBSIGNvbXBsZXgmCiAgICAgICAgIG9wZXJhdG9yPShjb25zdCBjb21w bGV4PF9UcD4mICBfX3opCiAJewogCSAgX19yZWFsX18gX01fdmFsdWUgPSBf X3oucmVhbCgpOwpAQCAtMTE3Miw0MSArMTE3NiwzNSBAQAogCX0KIAogICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotICAgICAgICBjb21wbGV4Jgor ICAgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4JgogICAgICAg ICBvcGVyYXRvcis9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogCXsKLQkg IF9fcmVhbF9fIF9NX3ZhbHVlICs9IF9fei5yZWFsKCk7Ci0JICBfX2ltYWdf XyBfTV92YWx1ZSArPSBfX3ouaW1hZygpOworCSAgX01fdmFsdWUgKz0gX196 Ll9fcmVwKCk7CiAJICByZXR1cm4gKnRoaXM7CiAJfQogCiAgICAgICB0ZW1w bGF0ZTxjbGFzcyBfVHA+Ci0gICAgICAgIGNvbXBsZXgmCisgICAgICAgIF9H TElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXgmCiAgICAgICAgIG9wZXJhdG9y LT0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAJewotCSAgX19yZWFsX18g X01fdmFsdWUgLT0gX196LnJlYWwoKTsKLQkgIF9faW1hZ19fIF9NX3ZhbHVl IC09IF9fei5pbWFnKCk7CisJICBfTV92YWx1ZSAtPSBfX3ouX19yZXAoKTsK IAkgIHJldHVybiAqdGhpczsKIAl9CiAKICAgICAgIHRlbXBsYXRlPGNsYXNz IF9UcD4KLSAgICAgICAgY29tcGxleCYKKyAgICAgICAgX0dMSUJDWFgyMF9D T05TVEVYUFIgY29tcGxleCYKICAgICAgICAgb3BlcmF0b3IqPShjb25zdCBj b21wbGV4PF9UcD4mIF9feikKIAl7Ci0JICBfQ29tcGxleFQgX190OwotCSAg X19yZWFsX18gX190ID0gX196LnJlYWwoKTsKLQkgIF9faW1hZ19fIF9fdCA9 IF9fei5pbWFnKCk7CisJICBjb25zdCBfQ29tcGxleFQgX190ID0gX196Ll9f cmVwKCk7CiAJICBfTV92YWx1ZSAqPSBfX3Q7CiAJICByZXR1cm4gKnRoaXM7 CiAJfQogCiAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+Ci0gICAgICAgIGNv bXBsZXgmCisgICAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXgm CiAgICAgICAgIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3op CiAJewotCSAgX0NvbXBsZXhUIF9fdDsKLQkgIF9fcmVhbF9fIF9fdCA9IF9f ei5yZWFsKCk7Ci0JICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOworCSAg Y29uc3QgX0NvbXBsZXhUIF9fdCA9IF9fei5fX3JlcCgpOwogCSAgX01fdmFs dWUgLz0gX190OwogCSAgcmV0dXJuICp0aGlzOwogCX0KQEAgLTEyNjgsMTMg KzEyNjYsMTMgQEAKIAogICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJf REVGRUNUUwogICAgICAgLy8gRFIgMzg3LiBzdGQ6OmNvbXBsZXggb3Zlci1l bmNhcHN1bGF0ZWQuCi0gICAgICB2b2lkCisgICAgICBfR0xJQkNYWDIwX0NP TlNURVhQUiB2b2lkCiAgICAgICByZWFsKGRvdWJsZSBfX3ZhbCkgeyBfX3Jl YWxfXyBfTV92YWx1ZSA9IF9fdmFsOyB9CiAKLSAgICAgIHZvaWQKKyAgICAg IF9HTElCQ1hYMjBfQ09OU1RFWFBSIHZvaWQKICAgICAgIGltYWcoZG91Ymxl IF9fdmFsKSB7IF9faW1hZ19fIF9NX3ZhbHVlID0gX192YWw7IH0KIAotICAg ICAgY29tcGxleCYKKyAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBs ZXgmCiAgICAgICBvcGVyYXRvcj0oZG91YmxlIF9fZCkKICAgICAgIHsKIAlf TV92YWx1ZSA9IF9fZDsKQEAgLTEyODEsNyArMTI3OSw3IEBACiAJcmV0dXJu ICp0aGlzOwogICAgICAgfQogCi0gICAgICBjb21wbGV4JgorICAgICAgX0dM SUJDWFgyMF9DT05TVEVYUFIgY29tcGxleCYKICAgICAgIG9wZXJhdG9yKz0o ZG91YmxlIF9fZCkKICAgICAgIHsKIAlfTV92YWx1ZSArPSBfX2Q7CkBAIC0x Mjg4LDcgKzEyODYsNyBAQAogCXJldHVybiAqdGhpczsKICAgICAgIH0KIAot ICAgICAgY29tcGxleCYKKyAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNv bXBsZXgmCiAgICAgICBvcGVyYXRvci09KGRvdWJsZSBfX2QpCiAgICAgICB7 CiAJX01fdmFsdWUgLT0gX19kOwpAQCAtMTI5NSw3ICsxMjkzLDcgQEAKIAly ZXR1cm4gKnRoaXM7CiAgICAgICB9CiAKLSAgICAgIGNvbXBsZXgmCisgICAg ICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4JgogICAgICAgb3BlcmF0 b3IqPShkb3VibGUgX19kKQogICAgICAgewogCV9NX3ZhbHVlICo9IF9fZDsK QEAgLTEzMDIsNyArMTMwMCw3IEBACiAJcmV0dXJuICp0aGlzOwogICAgICAg fQogCi0gICAgICBjb21wbGV4JgorICAgICAgX0dMSUJDWFgyMF9DT05TVEVY UFIgY29tcGxleCYKICAgICAgIG9wZXJhdG9yLz0oZG91YmxlIF9fZCkKICAg ICAgIHsKIAlfTV92YWx1ZSAvPSBfX2Q7CkBAIC0xMzE1LDUwICsxMzEzLDQz IEBACiAjZW5kaWYKIAogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgot ICAgICAgICBjb21wbGV4JgorICAgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQ UiBjb21wbGV4JgogICAgICAgICBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxf VHA+JiBfX3opCiAJewotCSAgX19yZWFsX18gX01fdmFsdWUgPSBfX3oucmVh bCgpOwotCSAgX19pbWFnX18gX01fdmFsdWUgPSBfX3ouaW1hZygpOworCSAg X01fdmFsdWUgPSBfX3ouX19yZXAoKTsKIAkgIHJldHVybiAqdGhpczsKIAl9 CiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAgICAgICAgY29t cGxleCYKKyAgICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIgY29tcGxleCYK ICAgICAgICAgb3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikK IAl7Ci0JICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3oucmVhbCgpOwotCSAg X19pbWFnX18gX01fdmFsdWUgKz0gX196LmltYWcoKTsKKwkgIF9NX3ZhbHVl ICs9IF9fei5fX3JlcCgpOwogCSAgcmV0dXJuICp0aGlzOwogCX0KIAogICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotICAgICAgICBjb21wbGV4Jgor ICAgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4JgogICAgICAg ICBvcGVyYXRvci09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogCXsKLQkg IF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7Ci0JICBfX2ltYWdf XyBfTV92YWx1ZSAtPSBfX3ouaW1hZygpOworCSAgX01fdmFsdWUgLT0gX196 Ll9fcmVwKCk7CiAJICByZXR1cm4gKnRoaXM7CiAJfQogCiAgICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+Ci0gICAgICAgIGNvbXBsZXgmCisgICAgICAg IF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXgmCiAgICAgICAgIG9wZXJh dG9yKj0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAJewotCSAgX0NvbXBs ZXhUIF9fdDsKLQkgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7Ci0JICBf X2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOworCSAgY29uc3QgX0NvbXBsZXhU IF9fdCA9IF9fei5fX3JlcCgpOwogCSAgX01fdmFsdWUgKj0gX190OwogCSAg cmV0dXJuICp0aGlzOwogCX0KIAogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgotICAgICAgICBjb21wbGV4JgorICAgICAgICBfR0xJQkNYWDIwX0NP TlNURVhQUiBjb21wbGV4JgogICAgICAgICBvcGVyYXRvci89KGNvbnN0IGNv bXBsZXg8X1RwPiYgX196KQogCXsKLQkgIF9Db21wbGV4VCBfX3Q7Ci0JICBf X3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOwotCSAgX19pbWFnX18gX190ID0g X196LmltYWcoKTsKKwkgIGNvbnN0IF9Db21wbGV4VCBfX3QgPSBfX3ouX19y ZXAoKTsKIAkgIF9NX3ZhbHVlIC89IF9fdDsKIAkgIHJldHVybiAqdGhpczsK IAl9CkBAIC0xNDIyLDEzICsxNDEzLDEzIEBACiAKICAgICAgIC8vIF9HTElC Q1hYX1JFU09MVkVfTElCX0RFRkVDVFMKICAgICAgIC8vIERSIDM4Ny4gc3Rk Ojpjb21wbGV4IG92ZXItZW5jYXBzdWxhdGVkLgotICAgICAgdm9pZAorICAg ICAgX0dMSUJDWFgyMF9DT05TVEVYUFIgdm9pZAogICAgICAgcmVhbChsb25n IGRvdWJsZSBfX3ZhbCkgeyBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fdmFsOyB9 CiAKLSAgICAgIHZvaWQKKyAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIHZv aWQKICAgICAgIGltYWcobG9uZyBkb3VibGUgX192YWwpIHsgX19pbWFnX18g X01fdmFsdWUgPSBfX3ZhbDsgfQogCi0gICAgICBjb21wbGV4JgorICAgICAg X0dMSUJDWFgyMF9DT05TVEVYUFIgY29tcGxleCYKICAgICAgIG9wZXJhdG9y PShsb25nIGRvdWJsZSBfX3IpCiAgICAgICB7CiAJX01fdmFsdWUgPSBfX3I7 CkBAIC0xNDM1LDcgKzE0MjYsNyBAQAogCXJldHVybiAqdGhpczsKICAgICAg IH0KIAotICAgICAgY29tcGxleCYKKyAgICAgIF9HTElCQ1hYMjBfQ09OU1RF WFBSIGNvbXBsZXgmCiAgICAgICBvcGVyYXRvcis9KGxvbmcgZG91YmxlIF9f cikKICAgICAgIHsKIAlfTV92YWx1ZSArPSBfX3I7CkBAIC0xNDQyLDcgKzE0 MzMsNyBAQAogCXJldHVybiAqdGhpczsKICAgICAgIH0KIAotICAgICAgY29t cGxleCYKKyAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXgmCiAg ICAgICBvcGVyYXRvci09KGxvbmcgZG91YmxlIF9fcikKICAgICAgIHsKIAlf TV92YWx1ZSAtPSBfX3I7CkBAIC0xNDQ5LDcgKzE0NDAsNyBAQAogCXJldHVy biAqdGhpczsKICAgICAgIH0KIAotICAgICAgY29tcGxleCYKKyAgICAgIF9H TElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXgmCiAgICAgICBvcGVyYXRvcio9 KGxvbmcgZG91YmxlIF9fcikKICAgICAgIHsKIAlfTV92YWx1ZSAqPSBfX3I7 CkBAIC0xNDU2LDcgKzE0NDcsNyBAQAogCXJldHVybiAqdGhpczsKICAgICAg IH0KIAotICAgICAgY29tcGxleCYKKyAgICAgIF9HTElCQ1hYMjBfQ09OU1RF WFBSIGNvbXBsZXgmCiAgICAgICBvcGVyYXRvci89KGxvbmcgZG91YmxlIF9f cikKICAgICAgIHsKIAlfTV92YWx1ZSAvPSBfX3I7CkBAIC0xNDY5LDUwICsx NDYwLDQzIEBACiAjZW5kaWYKIAogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgotICAgICAgICBjb21wbGV4JgorICAgICAgICBfR0xJQkNYWDIwX0NP TlNURVhQUiBjb21wbGV4JgogICAgICAgICBvcGVyYXRvcj0oY29uc3QgY29t cGxleDxfVHA+JiBfX3opCiAJewotCSAgX19yZWFsX18gX01fdmFsdWUgPSBf X3oucmVhbCgpOwotCSAgX19pbWFnX18gX01fdmFsdWUgPSBfX3ouaW1hZygp OworCSAgX01fdmFsdWUgPSBfX3ouX19yZXAoKTsKIAkgIHJldHVybiAqdGhp czsKIAl9CiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAgICAg ICAgY29tcGxleCYKKyAgICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIgY29t cGxleCYKIAlvcGVyYXRvcis9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQog CXsKLQkgIF9fcmVhbF9fIF9NX3ZhbHVlICs9IF9fei5yZWFsKCk7Ci0JICBf X2ltYWdfXyBfTV92YWx1ZSArPSBfX3ouaW1hZygpOworCSAgX01fdmFsdWUg Kz0gX196Ll9fcmVwKCk7CiAJICByZXR1cm4gKnRoaXM7CiAJfQogCiAgICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+Ci0gICAgICAgIGNvbXBsZXgmCisg ICAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXgmCiAJb3BlcmF0 b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKIAl7Ci0JICBfX3JlYWxf XyBfTV92YWx1ZSAtPSBfX3oucmVhbCgpOwotCSAgX19pbWFnX18gX01fdmFs dWUgLT0gX196LmltYWcoKTsKKwkgIF9NX3ZhbHVlIC09IF9fei5fX3JlcCgp OwogCSAgcmV0dXJuICp0aGlzOwogCX0KIAogICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgotICAgICAgICBjb21wbGV4JgorICAgICAgICBfR0xJQkNY WDIwX0NPTlNURVhQUiBjb21wbGV4JgogCW9wZXJhdG9yKj0oY29uc3QgY29t cGxleDxfVHA+JiBfX3opCiAJewotCSAgX0NvbXBsZXhUIF9fdDsKLQkgIF9f cmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7Ci0JICBfX2ltYWdfXyBfX3QgPSBf X3ouaW1hZygpOworCSAgY29uc3QgX0NvbXBsZXhUIF9fdCA9IF9fei5fX3Jl cCgpOwogCSAgX01fdmFsdWUgKj0gX190OwogCSAgcmV0dXJuICp0aGlzOwog CX0KIAogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotICAgICAgICBj b21wbGV4JgorICAgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4 JgogCW9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAJewot CSAgX0NvbXBsZXhUIF9fdDsKLQkgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFs KCk7Ci0JICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOworCSAgY29uc3Qg X0NvbXBsZXhUIF9fdCA9IF9fei5fX3JlcCgpOwogCSAgX01fdmFsdWUgLz0g X190OwogCSAgcmV0dXJuICp0aGlzOwogCX0KQEAgLTE4NzIsNyArMTg1Niw3 IEBACiAgICAgeyByZXR1cm4gX1RwKCk7IH0KIAogICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+Ci0gICAgaW5saW5lIHR5cGVuYW1lIF9fZ251X2N4eDo6X19w cm9tb3RlPF9UcD46Ol9fdHlwZQorICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBS IGlubGluZSB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+Ojpf X3R5cGUKICAgICBub3JtKF9UcCBfX3gpCiAgICAgewogICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX2dudV9jeHg6Ol9fcHJvbW90ZTxfVHA+OjpfX3R5cGUg X190eXBlOwpAQCAtMTkxMSw3ICsxODk1LDggQEAKIAogICAvLyBGb3J3YXJk IGRlY2xhcmF0aW9ucy4KICAgLy8gRFIgNzgxLgotICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IHN0ZDo6Y29tcGxleDxfVHA+IHByb2ooY29uc3Qgc3RkOjpj b21wbGV4PF9UcD4mKTsKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAg IHN0ZDo6Y29tcGxleDxfVHA+IHByb2ooY29uc3Qgc3RkOjpjb21wbGV4PF9U cD4mKTsKIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgc3RkOjpj b21wbGV4PF9UcD4KQEAgLTE5NTcsNyArMTk0Miw4IEBACiAgICAgfQogCiAg IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLSAgICBpbmxpbmUgc3RkOjpjb21w bGV4PHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlw ZT4KKyAgICBpbmxpbmUgX0dMSUJDWFgyMF9DT05TVEVYUFIKKwlzdGQ6OmNv bXBsZXg8dHlwZW5hbWUgX19nbnVfY3h4OjpfX3Byb21vdGU8X1RwPjo6X190 eXBlPgogICAgIGNvbmooX1RwIF9feCkKICAgICB7CiAgICAgICB0eXBlZGVm IHR5cGVuYW1lIF9fZ251X2N4eDo6X19wcm9tb3RlPF9UcD46Ol9fdHlwZSBf X3R5cGU7CkluZGV4OiB0ZXN0c3VpdGUvMjZfbnVtZXJpY3MvY29tcGxleC9j b21wYXJpc29uX29wZXJhdG9ycy9tb3JlX2NvbnN0ZXhwci5jYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvMjZfbnVtZXJpY3MvY29t cGxleC9jb21wYXJpc29uX29wZXJhdG9ycy9tb3JlX2NvbnN0ZXhwci5jYwko bm9uZXhpc3RlbnQpCisrKyB0ZXN0c3VpdGUvMjZfbnVtZXJpY3MvY29tcGxl eC9jb21wYXJpc29uX29wZXJhdG9ycy9tb3JlX2NvbnN0ZXhwci5jYwkod29y a2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvLyB7IGRnLW9wdGlvbnMg Ii1zdGQ9Z251KysyYSIgfQorLy8geyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0 IGMrKzJhIH0gfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTggRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkg aXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lv bi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyNpbmNsdWRlIDxjb21wbGV4Pgor I2luY2x1ZGUgPHRlc3RzdWl0ZV9jb21tb25fdHlwZXMuaD4KKwordGVtcGxh dGU8Ym9vbCBvaz4KKyAgc3RydWN0IHRoaW5nCisgIHsgfTsKKworLy8gCit0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgIHZvaWQKKyAgdGVzdF9jb21wYXJp c29uKCkKKyAgeworICAgIGNvbnN0ZXhwciBzdGQ6OmNvbXBsZXg8X1RwPiBh ezEuMSwgMi4yfTsKKyAgICBjb25zdGV4cHIgc3RkOjpjb21wbGV4PF9UcD4g YnszLjMsIDQuNH07CisgICAgaWYgY29uc3RleHByIChhID09IGIpCisgICAg ICBhdXRvIGMgW1ttYXliZV91bnVzZWRdXSA9IGEgKyBiOworICAgIGlmIGNv bnN0ZXhwciAoYSAhPSBiKQorICAgICAgYXV0byBjIFtbbWF5YmVfdW51c2Vk XV0gPSBhIC0gYjsKKworICAgIHRoaW5nPGEgPT0gYj4gdGhpbmcxIFtbbWF5 YmVfdW51c2VkXV07CisgICAgdGhpbmc8YSAhPSBiPiB0aGluZzIgW1ttYXli ZV91bnVzZWRdXTsKKyAgfQorCitpbnQKK21haW4oKQoreworICB0ZXN0X2Nv bXBhcmlzb248ZmxvYXQ+KCk7CisgIHRlc3RfY29tcGFyaXNvbjxkb3VibGU+ KCk7CisgIHRlc3RfY29tcGFyaXNvbjxsb25nIGRvdWJsZT4oKTsKKworICBy ZXR1cm4gMDsKK30KSW5kZXg6IHRlc3RzdWl0ZS8yNl9udW1lcmljcy9jb21w bGV4L29wZXJhdG9ycy9tb3JlX2NvbnN0ZXhwci5jYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvMjZfbnVtZXJpY3MvY29tcGxleC9v cGVyYXRvcnMvbW9yZV9jb25zdGV4cHIuY2MJKG5vbmV4aXN0ZW50KQorKysg dGVzdHN1aXRlLzI2X251bWVyaWNzL2NvbXBsZXgvb3BlcmF0b3JzL21vcmVf Y29uc3RleHByLmNjCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAK Ky8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzJhIiB9CisvLyB7IGRnLWRv IGNvbXBpbGUgeyB0YXJnZXQgYysrMmEgfSB9CisKKy8vIENvcHlyaWdodCAo QykgMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisv LyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFy eS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUK Ky8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8v IGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK Ky8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisv LyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0 aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworI2lu Y2x1ZGUgPGNvbXBsZXg+CisjaW5jbHVkZSA8dGVzdHN1aXRlX2NvbW1vbl90 eXBlcy5oPgorCituYW1lc3BhY2UgX19nbnVfdGVzdAoreworICAvLyBUZXN0 IGNvbnN0ZXhwciBzeW1tZXRyaWMgY29tcGxleCBAIHJlYWwsIHJlYWwgQCBj b21wbGV4LCBjb21wbGV4IEAgY29tcGxleC4KKyAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgorICAgIHZvaWQKKyAgICB0ZXN0X29wZXJhdG9ycygpCisgICAg eworICAgICAgY29uc3RleHByIHN0ZDo6Y29tcGxleDxfVHA+IGF7MSwgMn07 CisgICAgICBjb25zdGV4cHIgc3RkOjpjb21wbGV4PF9UcD4gYnszLCA0fTsK KyAgICAgIGNvbnN0ZXhwciBfVHAgYyA9IDU7CisKKyAgICAgIGNvbnN0ZXhw ciBhdXRvIHcgW1ttYXliZV91bnVzZWRdXSA9ICthOworICAgICAgY29uc3Rl eHByIGF1dG8geiBbW21heWJlX3VudXNlZF1dID0gLWE7CisKKyAgICAgIGNv bnN0ZXhwciBhdXRvIGFwYyBbW21heWJlX3VudXNlZF1dID0gYSArIGM7Cisg ICAgICBjb25zdGV4cHIgYXV0byBhbWMgW1ttYXliZV91bnVzZWRdXSA9IGEg LSBjOworICAgICAgY29uc3RleHByIGF1dG8gYXRjIFtbbWF5YmVfdW51c2Vk XV0gPSBhICogYzsKKyAgICAgIGNvbnN0ZXhwciBhdXRvIGFkYyBbW21heWJl X3VudXNlZF1dID0gYSAvIGM7CisKKyAgICAgIGNvbnN0ZXhwciBhdXRvIGNw YSBbW21heWJlX3VudXNlZF1dID0gYyArIGE7CisgICAgICBjb25zdGV4cHIg YXV0byBjbWEgW1ttYXliZV91bnVzZWRdXSA9IGMgLSBhOworICAgICAgY29u c3RleHByIGF1dG8gY3RhIFtbbWF5YmVfdW51c2VkXV0gPSBjICogYTsKKyAg ICAgIGNvbnN0ZXhwciBhdXRvIGNkYSBbW21heWJlX3VudXNlZF1dID0gYyAv IGE7CisKKyAgICAgIGNvbnN0ZXhwciBhdXRvIGFwYiBbW21heWJlX3VudXNl ZF1dID0gYSArIGI7CisgICAgICBjb25zdGV4cHIgYXV0byBhbWIgW1ttYXli ZV91bnVzZWRdXSA9IGEgLSBiOworICAgICAgY29uc3RleHByIGF1dG8gYXRi IFtbbWF5YmVfdW51c2VkXV0gPSBhICogYjsKKyAgICAgIGNvbnN0ZXhwciBh dXRvIGFkYiBbW21heWJlX3VudXNlZF1dID0gYSAvIGI7CisgICAgfQorfQor CitpbnQgbWFpbigpCit7CisgIF9fZ251X3Rlc3Q6OnRlc3Rfb3BlcmF0b3Jz PGZsb2F0PigpOworICBfX2dudV90ZXN0Ojp0ZXN0X29wZXJhdG9yczxkb3Vi bGU+KCk7CisgIF9fZ251X3Rlc3Q6OnRlc3Rfb3BlcmF0b3JzPGxvbmcgZG91 YmxlPigpOworCisgIHJldHVybiAwOworfQpJbmRleDogdGVzdHN1aXRlLzI2 X251bWVyaWNzL2NvbXBsZXgvcmVxdWlyZW1lbnRzL21vcmVfY29uc3RleHBy LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0ZS8yNl9u dW1lcmljcy9jb21wbGV4L3JlcXVpcmVtZW50cy9tb3JlX2NvbnN0ZXhwci5j Ywkobm9uZXhpc3RlbnQpCisrKyB0ZXN0c3VpdGUvMjZfbnVtZXJpY3MvY29t cGxleC9yZXF1aXJlbWVudHMvbW9yZV9jb25zdGV4cHIuY2MJKHdvcmtpbmcg Y29weSkKQEAgLTAsMCArMSwxNzEgQEAKKy8vIHsgZGctb3B0aW9ucyAiLXN0 ZD1nbnUrKzJhIiB9CisvLyB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgYysr MmEgfSB9CisKKy8vIENvcHlyaWdodCAoQykgMjAxOCBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBm cmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisv LyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgor CisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg ZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKworI2luY2x1ZGUgPGNvbXBsZXg+CisjaW5j bHVkZSA8dGVzdHN1aXRlX2NvbW1vbl90eXBlcy5oPgorCituYW1lc3BhY2Ug X19nbnVfdGVzdAoreworCisgIC8vIFRlc3QgY29uc3RleHByIHJlYWwodmFs KSBpbWFnKHZhbCkuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY29uc3Qg aW50IF9WYWwgPSA0Mj4KKyAgICBpbmxpbmUgdm9pZAorICAgIHNldF9yZWFs KHN0ZDo6Y29tcGxleDxfVHA+JiBhKQorICAgIHsgYS5yZWFsKF9WYWwpOyB9 CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjb25zdCBpbnQgX1ZhbCA9 IDQyPgorICAgIGlubGluZSB2b2lkCisgICAgc2V0X2ltYWcoc3RkOjpjb21w bGV4PF9UcD4mIGEpCisgICAgeyBhLmltYWcoX1ZhbCk7IH0KKworICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgdm9pZAorICAgIHRlc3RfbWVtYmVy cygpCisgICAgeworICAgICAgY29uc3RleHByIHN0ZDo6Y29tcGxleDxfVHA+ IGF7MS4xLCAyLjJ9OworCisgICAgICBzdGQ6OmNvbXBsZXg8X1RwPiB6ID0g YTsKKworICAgICAgc2V0X3JlYWw8X1RwLCAzMz4oeik7CisgICAgICBzZXRf aW1hZzxfVHAsIDQ0Pih6KTsKKyAgICB9CisKKyAgLy8gVGVzdCBvcGVyYXRv cnMgQD1jb21wbGV4IGFuZCBAPXJlYWwuCisgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGNvbnN0ZXhwciBzdGQ6OmNvbXBs ZXg8X1RwPgorICAgIHN1bShjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgeiwg Y29uc3Qgc3RkOjpjb21wbGV4PF9VcD4mIHcpCisgICAgeworICAgICAgc3Rk Ojpjb21wbGV4PF9UcD4geCA9IHo7CisgICAgICB4ICs9IHc7CisgICAgICBy ZXR1cm4geDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfVXA+CisgICAgY29uc3RleHByIHN0ZDo6Y29tcGxleDxfVHA+ CisgICAgc3VtKGNvbnN0IHN0ZDo6Y29tcGxleDxfVHA+JiB6LCBfVXAgdykK KyAgICB7CisgICAgICBzdGQ6OmNvbXBsZXg8X1RwPiB4ID0gejsKKyAgICAg IHggKz0gdzsKKyAgICAgIHJldHVybiB4OworICAgIH0KKworICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9VcD4KKyAgICBjb25zdGV4cHIg c3RkOjpjb21wbGV4PF9UcD4KKyAgICBkaWYoY29uc3Qgc3RkOjpjb21wbGV4 PF9UcD4mIHosIGNvbnN0IHN0ZDo6Y29tcGxleDxfVXA+JiB3KQorICAgIHsK KyAgICAgIHN0ZDo6Y29tcGxleDxfVHA+IHggPSB6OworICAgICAgeCAtPSB3 OworICAgICAgcmV0dXJuIHg7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX1VwPgorICAgIGNvbnN0ZXhwciBzdGQ6OmNv bXBsZXg8X1RwPgorICAgIGRpZihjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYg eiwgX1VwIHcpCisgICAgeworICAgICAgc3RkOjpjb21wbGV4PF9UcD4geCA9 IHo7CisgICAgICB4IC09IHc7CisgICAgICByZXR1cm4geDsKKyAgICB9CisK KyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAg Y29uc3RleHByIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgcHJvZChjb25zdCBz dGQ6OmNvbXBsZXg8X1RwPiYgeiwgY29uc3Qgc3RkOjpjb21wbGV4PF9VcD4m IHcpCisgICAgeworICAgICAgc3RkOjpjb21wbGV4PF9UcD4geCA9IHo7Cisg ICAgICB4ICo9IHc7CisgICAgICByZXR1cm4geDsKKyAgICB9CisKKyAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+CisgICAgY29uc3Rl eHByIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgcHJvZChjb25zdCBzdGQ6OmNv bXBsZXg8X1RwPiYgeiwgX1VwIHcpCisgICAgeworICAgICAgc3RkOjpjb21w bGV4PF9UcD4geCA9IHo7CisgICAgICB4ICo9IHc7CisgICAgICByZXR1cm4g eDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfVXA+CisgICAgY29uc3RleHByIHN0ZDo6Y29tcGxleDxfVHA+CisgICAg cXVvdChjb25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgeiwgY29uc3Qgc3RkOjpj b21wbGV4PF9VcD4mIHcpCisgICAgeworICAgICAgc3RkOjpjb21wbGV4PF9U cD4geCA9IHo7CisgICAgICB4IC89IHc7CisgICAgICByZXR1cm4geDsKKyAg ICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVXA+ CisgICAgY29uc3RleHByIHN0ZDo6Y29tcGxleDxfVHA+CisgICAgcXVvdChj b25zdCBzdGQ6OmNvbXBsZXg8X1RwPiYgeiwgX1VwIHcpCisgICAgeworICAg ICAgc3RkOjpjb21wbGV4PF9UcD4geCA9IHo7CisgICAgICB4IC89IHc7Cisg ICAgICByZXR1cm4geDsKKyAgICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfVXA+CisgICAgdm9pZAorICAgIHRlc3Rfb3BlcmF0 b3JfbWVtYmVycygpCisgICAgeworICAgICAgY29uc3RleHByIHN0ZDo6Y29t cGxleDxfVHA+IGF7MTAsIDIwfTsKKyAgICAgIGNvbnN0ZXhwciBzdGQ6OmNv bXBsZXg8X1VwPiBiezYsIDh9OworICAgICAgY29uc3RleHByIF9VcCBjezEw fTsKKworICAgICAgY29uc3RleHByIGF1dG8gYXBjID0gc3VtKGEsIGMpOwor ICAgICAgc3RhdGljX2Fzc2VydChhcGMgPT0gc3RkOjpjb21wbGV4PF9UcD57 MjAsIDIwfSk7CisgICAgICBjb25zdGV4cHIgYXV0byBhbWMgPSBkaWYoYSwg Yyk7CisgICAgICBzdGF0aWNfYXNzZXJ0KGFtYyA9PSBzdGQ6OmNvbXBsZXg8 X1RwPnswLCAyMH0pOworICAgICAgY29uc3RleHByIGF1dG8gYXRjID0gcHJv ZChhLCBjKTsKKyAgICAgIHN0YXRpY19hc3NlcnQoYXRjID09IHN0ZDo6Y29t cGxleDxfVHA+ezEwMCwgMjAwfSk7CisgICAgICBjb25zdGV4cHIgYXV0byBh ZGMgPSBxdW90KGEsIGMpOworICAgICAgc3RhdGljX2Fzc2VydChhZGMgPT0g c3RkOjpjb21wbGV4PF9UcD57MSwgMn0pOworCisgICAgICBjb25zdGV4cHIg YXV0byBhcGIgPSBzdW0oYSwgYik7CisgICAgICBzdGF0aWNfYXNzZXJ0KGFw YiA9PSBzdGQ6OmNvbXBsZXg8X1RwPnsxNiwgMjh9KTsKKyAgICAgIGNvbnN0 ZXhwciBhdXRvIGFtYiA9IGRpZihhLCBiKTsKKyAgICAgIHN0YXRpY19hc3Nl cnQoYW1iID09IHN0ZDo6Y29tcGxleDxfVHA+ezQsIDEyfSk7CisgICAgICBj b25zdGV4cHIgYXV0byBhdGIgPSBwcm9kKGEsIGIpOworICAgICAgc3RhdGlj X2Fzc2VydChhdGIgPT0gc3RkOjpjb21wbGV4PF9UcD57LTEwMCwgMjAwfSk7 CisgICAgICBjb25zdGV4cHIgYXV0byBhZGIgPSBxdW90KGEsIGIpOworICAg ICAgc3RhdGljX2Fzc2VydChhZGIgPT0gc3RkOjpjb21wbGV4PF9UcD57MTEv X1RwezV9LCAyL19UcHs1fX0pOworICAgIH0KK30KKworaW50IG1haW4oKQor eworICBfX2dudV90ZXN0Ojp0ZXN0X21lbWJlcnM8ZmxvYXQ+KCk7CisgIF9f Z251X3Rlc3Q6OnRlc3RfbWVtYmVyczxkb3VibGU+KCk7CisgIF9fZ251X3Rl c3Q6OnRlc3RfbWVtYmVyczxsb25nIGRvdWJsZT4oKTsKKworICBfX2dudV90 ZXN0Ojp0ZXN0X29wZXJhdG9yX21lbWJlcnM8ZmxvYXQsIGZsb2F0PigpOwor ICBfX2dudV90ZXN0Ojp0ZXN0X29wZXJhdG9yX21lbWJlcnM8ZmxvYXQsIGRv dWJsZT4oKTsKKyAgX19nbnVfdGVzdDo6dGVzdF9vcGVyYXRvcl9tZW1iZXJz PGZsb2F0LCBsb25nIGRvdWJsZT4oKTsKKyAgX19nbnVfdGVzdDo6dGVzdF9v cGVyYXRvcl9tZW1iZXJzPGRvdWJsZSwgZmxvYXQ+KCk7CisgIF9fZ251X3Rl c3Q6OnRlc3Rfb3BlcmF0b3JfbWVtYmVyczxkb3VibGUsIGRvdWJsZT4oKTsK KyAgX19nbnVfdGVzdDo6dGVzdF9vcGVyYXRvcl9tZW1iZXJzPGRvdWJsZSwg bG9uZyBkb3VibGU+KCk7CisgIF9fZ251X3Rlc3Q6OnRlc3Rfb3BlcmF0b3Jf bWVtYmVyczxsb25nIGRvdWJsZSwgZmxvYXQ+KCk7CisgIF9fZ251X3Rlc3Q6 OnRlc3Rfb3BlcmF0b3JfbWVtYmVyczxsb25nIGRvdWJsZSwgZG91YmxlPigp OworICBfX2dudV90ZXN0Ojp0ZXN0X29wZXJhdG9yX21lbWJlcnM8bG9uZyBk b3VibGUsIGxvbmcgZG91YmxlPigpOworCisgIC8vIFRlc3QgcHJpbWFyeSB0 ZW1wbGF0ZS4KKyAgX19nbnVfdGVzdDo6dGVzdF9vcGVyYXRvcl9tZW1iZXJz PF9fZmxvYXQxMjgsIF9fZmxvYXQxMjg+KCk7CisKKyAgcmV0dXJuIDA7Cit9 CkluZGV4OiB0ZXN0c3VpdGUvMjZfbnVtZXJpY3MvY29tcGxleC92YWx1ZV9v cGVyYXRpb25zL21vcmVfY29uc3RleHByLmNjCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHRlc3RzdWl0ZS8yNl9udW1lcmljcy9jb21wbGV4L3ZhbHVl X29wZXJhdGlvbnMvbW9yZV9jb25zdGV4cHIuY2MJKG5vbmV4aXN0ZW50KQor KysgdGVzdHN1aXRlLzI2X251bWVyaWNzL2NvbXBsZXgvdmFsdWVfb3BlcmF0 aW9ucy9tb3JlX2NvbnN0ZXhwci5jYwkod29ya2luZyBjb3B5KQpAQCAtMCww ICsxLDU5IEBACisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Z251KysyYSIgfQor Ly8geyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGMrKzJhIH0gfQorCisvLyBD b3B5cmlnaHQgKEMpIDIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08g QysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQg dW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBv cHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcK Ky8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMu ICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKKyNpbmNsdWRlIDxjb21wbGV4PgorI2luY2x1ZGUgPHRlc3RzdWl0 ZV9jb21tb25fdHlwZXMuaD4KKworbmFtZXNwYWNlIF9fZ251X3Rlc3QKK3sK KyAgc3RydWN0IGNvbnN0ZXhwcl9mdW5jdGlvbnMKKyAgeworICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UdGVzdHR5cGU+CisgICAgICB2b2lkCisgICAgICBv cGVyYXRvcigpKCkKKyAgICAgIHsKKwlzdHJ1Y3QgX0NvbmNlcHQKKwl7CisJ ICB2b2lkIF9fY29uc3RyYWludCgpCisJICB7IAorCSAgICB0eXBlZGVmIHR5 cGVuYW1lIF9UdGVzdHR5cGU6Ol9Db21wbGV4VCBfQ29tcGxleFQ7CisJICAg IGNvbnN0ZXhwciBfQ29tcGxleFQgY2MgPSB7IDEuMSB9OworCSAgICBjb25z dGV4cHIgX1R0ZXN0dHlwZSBhKGNjKTsKKwkgICAgY29uc3RleHByIGF1dG8g djEgW1ttYXliZV91bnVzZWRdXSA9IG5vcm0oYSk7CisJICAgIGNvbnN0ZXhw ciBhdXRvIHYyIFtbbWF5YmVfdW51c2VkXV0gPSBjb25qKGEpOworCSAgfQor CX07CisKKwlfQ29uY2VwdCBjOworCWMuX19jb25zdHJhaW50KCk7CisgICAg ICB9CisgIH07Cit9CisKK2ludCBtYWluKCkKK3sKKyAgX19nbnVfdGVzdDo6 Y29uc3RleHByX2Z1bmN0aW9ucyB0ZXN0OworCisgIHRlc3Qub3BlcmF0b3Io KTxzdGQ6OmNvbXBsZXg8ZmxvYXQ+PigpOworICB0ZXN0Lm9wZXJhdG9yKCk8 c3RkOjpjb21wbGV4PGRvdWJsZT4+KCk7CisgIHRlc3Qub3BlcmF0b3IoKTxz dGQ6OmNvbXBsZXg8bG9uZyBkb3VibGU+PigpOworCisgIHJldHVybiAwOwor fQpJbmRleDogdGVzdHN1aXRlLzI2X251bWVyaWNzL2hlYWRlcnMvY29tcGxl eC9zeW5vcHNpcy5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0 c3VpdGUvMjZfbnVtZXJpY3MvaGVhZGVycy9jb21wbGV4L3N5bm9wc2lzLmNj CShyZXZpc2lvbiAyNjYyNTEpCisrKyB0ZXN0c3VpdGUvMjZfbnVtZXJpY3Mv aGVhZGVycy9jb21wbGV4L3N5bm9wc2lzLmNjCSh3b3JraW5nIGNvcHkpCkBA IC0yOCw1MSArMjgsNzEgQEAKIAogICAvLyAyNi4yLjYgb3BlcmF0b3JzOgog ICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIGNvbXBsZXg8VD4gb3BlcmF0b3Ir KGNvbnN0IGNvbXBsZXg8VD4mLCBjb25zdCBjb21wbGV4PFQ+Jik7Ci0gIHRl bXBsYXRlPGNsYXNzIFQ+IGNvbXBsZXg8VD4gb3BlcmF0b3IrKGNvbnN0IGNv bXBsZXg8VD4mLCBjb25zdCBUJik7Ci0gIHRlbXBsYXRlPGNsYXNzIFQ+IGNv bXBsZXg8VD4gb3BlcmF0b3IrKGNvbnN0IFQmLCBjb25zdCBjb21wbGV4PFQ+ Jik7Ci0gIHRlbXBsYXRlPGNsYXNzIFQ+IGNvbXBsZXg8VD4gb3BlcmF0b3It CisgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIgY29tcGxleDxUPgorICAgIG9w ZXJhdG9yKyhjb25zdCBjb21wbGV4PFQ+JiwgY29uc3QgY29tcGxleDxUPiYp OworICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIF9HTElCQ1hYMjBfQ09OU1RF WFBSIGNvbXBsZXg8VD4gb3BlcmF0b3IrKGNvbnN0IGNvbXBsZXg8VD4mLCBj b25zdCBUJik7CisgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgX0dMSUJDWFgy MF9DT05TVEVYUFIgY29tcGxleDxUPiBvcGVyYXRvcisoY29uc3QgVCYsIGNv bnN0IGNvbXBsZXg8VD4mKTsKKworICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAg IF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXg8VD4KKyAgICBvcGVyYXRv ci0oY29uc3QgY29tcGxleDxUPiYsIGNvbnN0IGNvbXBsZXg8VD4mKTsKKyAg dGVtcGxhdGU8Y2xhc3MgVD4KKyAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBj b21wbGV4PFQ+IG9wZXJhdG9yLShjb25zdCBjb21wbGV4PFQ+JiwgY29uc3Qg VCYpOworICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIF9HTElCQ1hYMjBfQ09O U1RFWFBSIGNvbXBsZXg8VD4gb3BlcmF0b3ItKGNvbnN0IFQmLCBjb25zdCBj b21wbGV4PFQ+Jik7CisKKyAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICBfR0xJ QkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PFQ+IG9wZXJhdG9yKgogICAgIChj b25zdCBjb21wbGV4PFQ+JiwgY29uc3QgY29tcGxleDxUPiYpOwotICB0ZW1w bGF0ZTxjbGFzcyBUPiBjb21wbGV4PFQ+IG9wZXJhdG9yLShjb25zdCBjb21w bGV4PFQ+JiwgY29uc3QgVCYpOwotICB0ZW1wbGF0ZTxjbGFzcyBUPiBjb21w bGV4PFQ+IG9wZXJhdG9yLShjb25zdCBUJiwgY29uc3QgY29tcGxleDxUPiYp OwotICB0ZW1wbGF0ZTxjbGFzcyBUPiBjb21wbGV4PFQ+IG9wZXJhdG9yKgot ICAgIChjb25zdCBjb21wbGV4PFQ+JiwgY29uc3QgY29tcGxleDxUPiYpOwot ICB0ZW1wbGF0ZTxjbGFzcyBUPiBjb21wbGV4PFQ+IG9wZXJhdG9yKihjb25z dCBjb21wbGV4PFQ+JiwgY29uc3QgVCYpOwotICB0ZW1wbGF0ZTxjbGFzcyBU PiBjb21wbGV4PFQ+IG9wZXJhdG9yKihjb25zdCBUJiwgY29uc3QgY29tcGxl eDxUPiYpOwotICB0ZW1wbGF0ZTxjbGFzcyBUPiBjb21wbGV4PFQ+IG9wZXJh dG9yLwotICAgIChjb25zdCBjb21wbGV4PFQ+JiwgY29uc3QgY29tcGxleDxU PiYpOwotICB0ZW1wbGF0ZTxjbGFzcyBUPiBjb21wbGV4PFQ+IG9wZXJhdG9y Lyhjb25zdCBjb21wbGV4PFQ+JiwgY29uc3QgVCYpOwotICB0ZW1wbGF0ZTxj bGFzcyBUPiBjb21wbGV4PFQ+IG9wZXJhdG9yLyhjb25zdCBUJiwgY29uc3Qg Y29tcGxleDxUPiYpOwotICB0ZW1wbGF0ZTxjbGFzcyBUPiBjb21wbGV4PFQ+ IG9wZXJhdG9yKyhjb25zdCBjb21wbGV4PFQ+Jik7Ci0gIHRlbXBsYXRlPGNs YXNzIFQ+IGNvbXBsZXg8VD4gb3BlcmF0b3ItKGNvbnN0IGNvbXBsZXg8VD4m KTsKLSAgdGVtcGxhdGU8Y2xhc3MgVD4gX0dMSUJDWFhfQ09OU1RFWFBSIGJv b2wgb3BlcmF0b3I9PQotICAgIChjb25zdCBjb21wbGV4PFQ+JiwgY29uc3Qg Y29tcGxleDxUPiYpOwotICB0ZW1wbGF0ZTxjbGFzcyBUPiBfR0xJQkNYWF9D T05TVEVYUFIgYm9vbCBvcGVyYXRvcj09Ci0gICAgKGNvbnN0IGNvbXBsZXg8 VD4mLCBjb25zdCBUJik7Ci0gIHRlbXBsYXRlPGNsYXNzIFQ+IF9HTElCQ1hY X0NPTlNURVhQUiBib29sIG9wZXJhdG9yPT0KLSAgICAoY29uc3QgVCYsIGNv bnN0IGNvbXBsZXg8VD4mKTsKKyAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICBf R0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PFQ+IG9wZXJhdG9yKihjb25z dCBjb21wbGV4PFQ+JiwgY29uc3QgVCYpOworICB0ZW1wbGF0ZTxjbGFzcyBU PgorICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGNvbXBsZXg8VD4gb3BlcmF0 b3IqKGNvbnN0IFQmLCBjb25zdCBjb21wbGV4PFQ+Jik7CiAKKyAgdGVtcGxh dGU8Y2xhc3MgVD4KKyAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4 PFQ+CisgICAgb3BlcmF0b3IvKGNvbnN0IGNvbXBsZXg8VD4mLCBjb25zdCBj b21wbGV4PFQ+Jik7CisgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgX0dMSUJD WFgyMF9DT05TVEVYUFIgY29tcGxleDxUPiBvcGVyYXRvci8oY29uc3QgY29t cGxleDxUPiYsIGNvbnN0IFQmKTsKKyAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAg ICBfR0xJQkNYWDIwX0NPTlNURVhQUiBjb21wbGV4PFQ+IG9wZXJhdG9yLyhj b25zdCBUJiwgY29uc3QgY29tcGxleDxUPiYpOwogCi0gIHRlbXBsYXRlPGNs YXNzIFQ+IF9HTElCQ1hYX0NPTlNURVhQUiBib29sIG9wZXJhdG9yIT0KLSAg ICAoY29uc3QgY29tcGxleDxUPiYsIGNvbnN0IGNvbXBsZXg8VD4mKTsKLSAg dGVtcGxhdGU8Y2xhc3MgVD4gX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wgb3Bl cmF0b3IhPQotICAgIChjb25zdCBjb21wbGV4PFQ+JiwgY29uc3QgVCYpOwot ICB0ZW1wbGF0ZTxjbGFzcyBUPiBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbCBv cGVyYXRvciE9Ci0gICAgKGNvbnN0IFQmLCBjb25zdCBjb21wbGV4PFQ+Jik7 CisgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgX0dMSUJDWFgyMF9DT05TVEVY UFIgY29tcGxleDxUPiBvcGVyYXRvcisoY29uc3QgY29tcGxleDxUPiYpOwor ICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBS IGNvbXBsZXg8VD4gb3BlcmF0b3ItKGNvbnN0IGNvbXBsZXg8VD4mKTsKKwor ICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIF9HTElCQ1hYX0NPTlNURVhQUiBi b29sIG9wZXJhdG9yPT0oY29uc3QgY29tcGxleDxUPiYsIGNvbnN0IGNvbXBs ZXg8VD4mKTsKKyAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICAgX0dMSUJDWFhf Q09OU1RFWFBSIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb21wbGV4PFQ+Jiwg Y29uc3QgVCYpOworICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIF9HTElCQ1hY X0NPTlNURVhQUiBib29sIG9wZXJhdG9yPT0oY29uc3QgVCYsIGNvbnN0IGNv bXBsZXg8VD4mKTsKKworICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIF9HTElC Q1hYX0NPTlNURVhQUiBib29sIG9wZXJhdG9yIT0oY29uc3QgY29tcGxleDxU PiYsIGNvbnN0IGNvbXBsZXg8VD4mKTsKKyAgdGVtcGxhdGU8Y2xhc3MgVD4K KyAgICBfR0xJQkNYWF9DT05TVEVYUFIgYm9vbCBvcGVyYXRvciE9KGNvbnN0 IGNvbXBsZXg8VD4mLCBjb25zdCBUJik7CisgIHRlbXBsYXRlPGNsYXNzIFQ+ CisgICAgX0dMSUJDWFhfQ09OU1RFWFBSIGJvb2wgb3BlcmF0b3IhPShjb25z dCBUJiwgY29uc3QgY29tcGxleDxUPiYpOworCiAgIHRlbXBsYXRlPGNsYXNz IFQsIGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHM+Ci0gIGJhc2ljX2lzdHJl YW08Y2hhclQsIHRyYWl0cz4mCi0gIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh bTxjaGFyVCwgdHJhaXRzPiYsIGNvbXBsZXg8VD4mKTsKKyAgICBiYXNpY19p c3RyZWFtPGNoYXJULCB0cmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxjaGFyVCwgdHJhaXRzPiYsIGNvbXBsZXg8VD4mKTsKICAgdGVt cGxhdGU8Y2xhc3MgVCwgY2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cz4KLSAg YmFzaWNfb3N0cmVhbTxjaGFyVCwgdHJhaXRzPiYKLSAgb3BlcmF0b3I8PChi YXNpY19vc3RyZWFtPGNoYXJULCB0cmFpdHM+JiwgY29uc3QgY29tcGxleDxU PiYpOworICAgIGJhc2ljX29zdHJlYW08Y2hhclQsIHRyYWl0cz4mCisgICAg b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXJULCB0cmFpdHM+JiwgY29u c3QgY29tcGxleDxUPiYpOwogCiAgIC8vIDI2LjIuNyB2YWx1ZXM6CiAgIHRl bXBsYXRlPGNsYXNzIFQ+IF9HTElCQ1hYX0NPTlNURVhQUiBUIHJlYWwoY29u c3QgY29tcGxleDxUPiYpOwogICB0ZW1wbGF0ZTxjbGFzcyBUPiBfR0xJQkNY WF9DT05TVEVYUFIgVCBpbWFnKGNvbnN0IGNvbXBsZXg8VD4mKTsKICAgdGVt cGxhdGU8Y2xhc3MgVD4gVCBhYnMoY29uc3QgY29tcGxleDxUPiYpOwotICB0 ZW1wbGF0ZTxjbGFzcyBUPiBUIGFyZyhjb25zdCBjb21wbGV4PFQ+Jik7Ci0g IHRlbXBsYXRlPGNsYXNzIFQ+IFQgbm9ybShjb25zdCBjb21wbGV4PFQ+Jik7 Ci0gIHRlbXBsYXRlPGNsYXNzIFQ+IGNvbXBsZXg8VD4gY29uaihjb25zdCBj b21wbGV4PFQ+Jik7CisgIHRlbXBsYXRlPGNsYXNzIFQ+IF9HTElCQ1hYMjBf Q09OU1RFWFBSIFQgYXJnKGNvbnN0IGNvbXBsZXg8VD4mKTsKKyAgdGVtcGxh dGU8Y2xhc3MgVD4gX0dMSUJDWFgyMF9DT05TVEVYUFIgVCBub3JtKGNvbnN0 IGNvbXBsZXg8VD4mKTsKKyAgdGVtcGxhdGU8Y2xhc3MgVD4gX0dMSUJDWFgy MF9DT05TVEVYUFIgY29tcGxleDxUPiBjb25qKGNvbnN0IGNvbXBsZXg8VD4m KTsKKyAgdGVtcGxhdGU8Y2xhc3MgVD4gX0dMSUJDWFgyMF9DT05TVEVYUFIg Y29tcGxleDxUPiBwcm9qKGNvbnN0IGNvbXBsZXg8VD4mKTsKICAgdGVtcGxh dGU8Y2xhc3MgVD4gY29tcGxleDxUPiBwb2xhcihjb25zdCBUJiByaG8sIGNv bnN0IFQmIHRoZXRhKTsKIAogICAvLyAyNi4yLjggdHJhbnNjZW5kZW50YWxz Ogo= --------------AED9253DE78D7BE92C1402DE--