Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ncI19-00039j-Kd for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Apr 2022 02:37:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ncI17-00037d-2z for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Apr 2022 02:37:01 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ncI16-00036Y-Hd for pgsql-hackers@lists.postgresql.org; Thu, 07 Apr 2022 02:37:00 +0000 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ncI11-0004TI-Jn for pgsql-hackers@lists.postgresql.org; Thu, 07 Apr 2022 02:37:00 +0000 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-e1dcc0a327so5025136fac.1 for ; Wed, 06 Apr 2022 19:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=w4hEdvmuDsu3apPple+kTn1XDWakdsrv9zQqjOnmHH0=; b=ghhlsnXo42zbrAoVLzvr8TuW81LGM5RElU4nC78on+7jZxZsLq5tUBc845Ezfoy7DQ kjGQnmI5uv9bvzTpmBouDW1MNx7uGuSnj7kocmeope7xHyPqI/TDl4Jds8B5YaoMjzFN fsl5I7vfortEJ/zxl9XwIbj1FngU3AuEFdHmhD6ymGUohyXyhm11d5XJOMo126GFoyJ4 f78xBDzDmOROlQeO2Ecm1P/iVwaZWJEzN0dz4iUCqnJ4K7zqhqFdKE6NwtbIgQt/Ao4c +77qhgXs7mj5Oitkvm5Vt3ob6SG6l4/kla87me7NnBqJSr6EU4B5hPtQZoTjLvmA4KiF Z3gQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=w4hEdvmuDsu3apPple+kTn1XDWakdsrv9zQqjOnmHH0=; b=1jtbL5ph1/MdXrLyTl81OHPMJljpnR0/CIKJJrprC/wu2z26fDlrFxKzFmIJPDAWy+ jMFQqTnQGq0jdUziFM6AwX1uP6t32oLY4eAuAPncAw6p3Dpo+YxS//QjacGkp5yeNM31 Bgl/e9w6Dr3OTPH9cic3jMJBYcDHaNg+g+nYCj0x2ToDmgw9/uzpRAnNFvn1m84sLkPL s+uSwX/Dl3qvCLYilayjIY+/zctLLhXakgVIGoJQV3qf0K2OCSkmd8qjbi05cLGx3RdW fJr1B9quiPDSxweqljVGd+XBMIjjOfyGtxf+/BAO/3T8X2enxOBbPAW8gpYgwyI5uM/r N3Nw== X-Gm-Message-State: AOAM531vJzY7fRC8XiPo7LVTrtNFLvIgVojY+G0WBJr+H6rDSTJjsDoa saGOCiX8S4znPV1oRYcWfElrv7IW7mXSzyXtQSSTkpa9rOS6qQ== X-Google-Smtp-Source: ABdhPJyp/fDtOXPHIkfclItwWgnbtUd1jjzJzZBxX+IvcjCdURjqKxTjaRjLy6i7IvOggucxPxdgvL9UbvKpR0y3K44= X-Received: by 2002:a05:6870:d28d:b0:da:b3f:3234 with SMTP id d13-20020a056870d28d00b000da0b3f3234mr5290976oae.228.1649299013396; Wed, 06 Apr 2022 19:36:53 -0700 (PDT) MIME-Version: 1.0 References: <20220329221615.hule724qcaarhe3y@alap3.anarazel.de> In-Reply-To: From: David Rowley Date: Thu, 7 Apr 2022 14:36:37 +1200 Message-ID: Subject: Re: Window Function "Run Conditions" To: Andy Fan Cc: Andres Freund , Zhihong Yu , PostgreSQL Developers Content-Type: multipart/mixed; boundary="000000000000d3085b05dc0759a1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d3085b05dc0759a1 Content-Type: text/plain; charset="UTF-8" On Wed, 6 Apr 2022 at 00:59, Andy Fan wrote: > > On Tue, Apr 5, 2022 at 7:49 PM David Rowley wrote: >> Yeah, there is more performance to be had than even what you've done >> there. There's no reason really for spool_tuples() to do >> tuplestore_puttupleslot() when we're not in run mode. > > > Yeah, this is a great idea. I've attached an updated patch that does most of what you mentioned. To make this work I had to add another state to the WindowAggStatus. This new state is what the top-level WindowAgg will move into when there's a PARTITION BY clause and the run condition becomes false. The new state is named WINDOWAGG_PASSTHROUGH_STRICT, which does all that WINDOWAGG_PASSTHROUGH does plus skips tuplestoring tuples during the spool. We must still spool those tuples when we're not the top-level WindowAgg so that we can send those out to any calling WindowAgg nodes. They'll need those so they return the correct result. This means that for intermediate WindowAgg nodes, when the runcondition becomes false, we only skip evaluation of WindowFuncs. WindowAgg nodes above us cannot reference these, so there's no need to evaluate them, plus, if there's a run condition then these tuples will be filtered out in the final WindowAgg node. For the top-level WindowAgg node, when the run condition becomes false we can save quite a bit more work. If there's no PARTITION BY clause, then we're done. Just return NULL. When there is a PARTITION BY clause we move into WINDOWAGG_PASSTHROUGH_STRICT which allows us to skip both the evaluation of WindowFuncs and also allows us to consume tuples from our outer plan until we get a tuple belonging to another partition. No need to tuplestore these tuples as they're being filtered out. Since intermediate WindowAggs cannot filter tuples, all the filtering must occur in the top-level WindowAgg. This cannot be done by way of the run condition as the run condition is special as when it becomes false, we don't check again to see if it's become true. A sort node between the WindowAggs can change the tuple order (i.e previously monotonic values may no longer be monotonic) so it's only valid to evaluate the run condition that's meant for the WindowAgg node it was intended for. To filter out the tuples that don't match the run condition from intermediate WindowAggs in the top-level WindowAgg, what I've done is introduced quals for WindowAgg nodes. This means that we can now see Filter in EXPLAIN For WindowAgg and "Rows Removed by Filter". Why didn't I just do the filtering in the outer query like was happening before? The problem is that when we push the quals down into the subquery, we don't yet have knowledge of which order that the WindowAggs will be evaluated in. Only run conditions from intermediate WindowAggs will ever make it into the Filter, and we don't know which one the top-level WindowAgg will be until later in planning. To do the filtering in the outer query we'd need to push quals back out the subquery again. It seems to me to be easier and better to filter them out lower down in the plan. Since the top-level WindowAgg node can now filter tuples, the executor node had to be given a for(;;) loop so that it goes around again for another tuple after it filters a tuple out. I've also updated the commit message which I think I've made quite clear about what we optimise and how it's done. > And I would suggest the below fastpath for this feature. > - if (check_and_push_window_quals(subquery, rte, rti, clause)) > + if (!subquery->hasWindowFuncs || check_and_push_window_quals(subquery, rte, rti, clause)) Good idea. Thanks! David --000000000000d3085b05dc0759a1 Content-Type: text/plain; charset="US-ASCII"; name="v6-0001-Teach-planner-and-executor-about-monotonic-window.patch" Content-Disposition: attachment; filename="v6-0001-Teach-planner-and-executor-about-monotonic-window.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l1oe0vt30 RnJvbSBmZmRmZjE4MTc2MWEwMjk5YjJkMzhlODM4MGY2YzY3MDY3MDgxMjExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBSb3dsZXkgPGRncm93bGV5QGdtYWlsLmNvbT4KRGF0 ZTogVHVlLCA1IEFwciAyMDIyIDEyOjAwOjQwICsxMjAwClN1YmplY3Q6IFtQQVRDSCB2Nl0gVGVh Y2ggcGxhbm5lciBhbmQgZXhlY3V0b3IgYWJvdXQgbW9ub3RvbmljIHdpbmRvdyBmdW5jcwoKV2lu ZG93IGZ1bmN0aW9ucyBzdWNoIGFzIHJvd19udW1iZXIoKSBhbHdheXMgcmV0dXJuIGEgdmFsdWUg aGlnaGVyIHRoYW4KdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgdmFsdWUgZm9yIHR1cGxlcyBpbiBh bnkgZ2l2ZW4gd2luZG93IHBhcnRpdGlvbi4KClRyYWRpdGlvbmFsbHkgcXVlcmllcyBzdWNoIGFz OwoKU0VMRUNUICogRlJPTSAoCiAgIFNFTEVDVCAqLCByb3dfbnVtYmVyKCkgb3ZlciAob3JkZXIg YnkgYykgcm4KICAgRlJPTSB0CikgdCBXSEVSRSBybiA8PSAxMDsKCndlcmUgZXhlY3V0ZWQgZmFp cmx5IGluZWZmaWNpZW50bHkuICBOZWl0aGVyIHRoZSBxdWVyeSBwbGFubmVyIG5vciB0aGUKZXhl Y3V0b3Iga25ldyB0aGF0IG9uY2Ugcm4gbWFkZSBpdCB0byAxMSB0aGF0IG5vdGhpbmcgZnVydGhl ciB3b3VsZCBtYXRjaAp0aGUgb3V0ZXIgcXVlcnkncyBXSEVSRSBjbGF1c2UuICBJdCB3b3VsZCBi bGluZGx5IGNvbnRpbnVlIHVudGlsIGFsbAp0dXBsZXMgd2VyZSBleGhhdXN0ZWQgZnJvbSB0aGUg c3VicXVlcnkuCgpIZXJlIHdlIGltcGxlbWVudCBtZWFucyB0byBtYWtlIHRoZSBhYm92ZSBleGVj dXRlIG1vcmUgZWZmaWNpZW50bHkuCgpUaGlzIGlzIGRvbmUgYnkgd2F5IG9mIGFkZGluZyBhIHBn X3Byb2MucHJvc3VwcG9ydCBmdW5jdGlvbiB0byB2YXJpb3VzIG9mCnRoZSBidWlsdC1pbiB3aW5k b3cgZnVuY3Rpb25zIGFuZCBhZGRpbmcgc3VwcG9ydGluZyBjb2RlIHRvIGFsbG93IHRoZQpzdXBw b3J0IGZ1bmN0aW9uIHRvIGluZm9ybSB0aGUgcGxhbm5lciBpZiB0aGUgd2luZG93IGZ1bmN0aW9u IGlzCm1vbm90b25pY2FsbHkgaW5jcmVhc2luZywgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nLCBi b3RoIG9yIG5laXRoZXIuICBUaGUKcGxhbm5lciBpcyB0aGVuIGFibGUgdG8gbWFrZSB1c2Ugb2Yg dGhhdCBpbmZvcm1hdGlvbiBhbmQgcG9zc2libHkgYWxsb3cKdGhlIGV4ZWN1dG9yIHRvIHNob3J0 LWNpcmN1aXQgZXhlY3V0aW9uIGJ5IHdheSBvZiBhZGRpbmcgYSAicnVuIGNvbmRpdGlvbiIKdG8g dGhlIFdpbmRvd0FnZyB0byBhbGxvdyBpdCB0byBkZXRlcm1pbmUgaWYgc29tZSBvZiBpdHMgZXhl Y3V0aW9uIHdvcmsKY2FuIGJlIHNraXBwZWQuCgpUaGlzICJydW4gY29uZGl0aW9uIiBpcyBub3Qg bGlrZSBhIG5vcm1hbCBmaWx0ZXIuICBUaGVzZSBydW4gY29uZGl0aW9ucwphcmUgb25seSBidWls dCB1c2luZyBxdWFscyBjb21wYXJpbmcgdmFsdWVzIHRvIG1vbm90b25pYyB3aW5kb3cgZnVuY3Rp b25zLgpGb3IgbW9ub3RvbmljIGluY3JlYXNpbmcgZnVuY3Rpb25zLCBxdWFscyBtYWtpbmcgdXNl IG9mIHRoZSBidHJlZQpvcGVyYXRvcnMgZm9yIDwsIDw9IGFuZCA9IGNhbiBiZSB1c2VkIChhc3N1 bWluZyB0aGUgd2luZG93IGZ1bmN0aW9uIGNvbHVtbgppcyBvbiB0aGUgbGVmdCkuIFlvdSBjYW4g c2VlIGhlcmUgdGhhdCBvbmNlIHN1Y2ggYSBjb25kaXRpb24gYmVjb21lcyBmYWxzZQp0aGF0IGEg bW9ub3RvbmljIGluY3JlYXNpbmcgZnVuY3Rpb24gY291bGQgbmV2ZXIgbWFrZSBpdCBzdWJzZXF1 ZW50bHkgdHJ1ZQphZ2Fpbi4gIEZvciBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgZnVuY3Rpb25z IHRoZSA+LCA+PSBhbmQgPSBidHJlZQpvcGVyYXRvcnMgZm9yIHRoZSBnaXZlbiB0eXBlIGNhbiBi ZSB1c2VkIGZvciBydW4gY29uZGl0aW9ucy4KClRoZSBiZXN0LWNhc2Ugc2l0dWF0aW9uIGZvciB0 aGlzIGlzIHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgV2luZG93QWdnIG5vZGUKd2l0aG91dCBhIFBB UlRJVElPTiBCWSBjbGF1c2UuICBIZXJlIHdoZW4gdGhlIHJ1biBjb25kaXRpb24gYmVjb21lcyBm YWxzZQp0aGUgV2luZG93QWdnIG5vZGUgY2FuIHNpbXBseSByZXR1cm4gTlVMTC4gIE5vIG1vcmUg dHVwbGVzIHdpbGwgZXZlciBtYXRjaAp0aGUgcnVuIGNvbmRpdGlvbi4gIEl0J3MgYSBsaXR0bGUg bW9yZSBjb21wbGV4IHdoZW4gdGhlcmUgaXMgYSBQQVJUSVRJT04KQlkgY2xhdXNlLiAgSW4gdGhp cyBjYXNlLCB3ZSBjYW5ub3QgcmV0dXJuIE5VTEwgYXMgd2UgbXVzdCBzdGlsbCBwcm9jZXNzCm90 aGVyIHBhcnRpdGlvbnMuICBUbyBzcGVlZCB0aGlzIGNhc2UgdXAgd2UgcHVsbCB0dXBsZXMgZnJv bSB0aGUgb3V0ZXIKcGxhbiB0byBjaGVjayBpZiB0aGV5J3JlIGZyb20gdGhlIHNhbWUgcGFydGl0 aW9uIGFuZCBzaW1wbHkgZGlzY2FyZCB0aGVtCmlmIHRoZXkgYXJlLiAgV2hlbiB3ZSBmaW5kIGEg dHVwbGUgYmVsb25naW5nIHRvIGFub3RoZXIgcGFydGl0aW9uIHdlIHN0YXJ0CnByb2Nlc3Npbmcg YXMgbm9ybWFsIGFnYWluIHVudGlsIHRoZSBydW4gY29uZGl0aW9uIGJlY29tZXMgZmFsc2Ugb3Ig d2UgcnVuCm91dCBvZiB0dXBsZXMgdG8gcHJvY2Vzcy4KCldoZW4gdGhlcmUgYXJlIG11bHRpcGxl IFdpbmRvd0FnZyBub2RlcyB0byBldmFsdWF0ZSB0aGVuIHRoaXMgY29tcGxpY2F0ZXMKdGhlIHNp dHVhdGlvbi4gIEZvciBub24tdG9wLWxldmVsIFdpbmRvd0FnZ3Mgd2UgbXVzdCBlbnN1cmUgd2Ug YWx3YXlzCnJldHVybiBhbGwgdHVwbGVzIHRvIHRoZSBjYWxsaW5nIG5vZGUuICBBbnkgZmlsdGVy aW5nIGRvbmUgY291bGQgbGVhZCB0bwppbmNvcnJlY3QgcmVzdWx0cyBpbiBXaW5kb3dBZ2cgbm9k ZXMgYWJvdmUuICBGb3IgYWxsIG5vbi10b3AtbGV2ZWwgbm9kZXMsCndlIGNhbiBzdGlsbCBzYXZl IHNvbWUgd29yayB3aGVuIHRoZSBydW4gY29uZGl0aW9uIGJlY29tZXMgZmFsc2UuICBXZSd2ZQpu byBuZWVkIHRvIGV2YWx1YXRlIHRoZSBXaW5kb3dGdW5jcyBhbnltb3JlLiAgT3RoZXIgV2luZG93 QWdnIG5vZGVzIGNhbm5vdApyZWZlcmVuY2UgdGhlIHZhbHVlIG9mIHRoZXNlIGFuZCB0aGVzZSB0 dXBsZXMgd2lsbCBub3QgYXBwZWFyIGluIHRoZSBmaW5hbApyZXN1bHQgYW55d2F5LiAgVGhlIHNh dmluZ3MgaGVyZSBhcmUgc21hbGwgaW4gY29tcGFyaXNvbiB0byB3aGF0IGNhbiBiZQpzYXZlZCBp biB0aGUgdG9wLWxldmVsIFdpbmdvd0FnZywgYnV0IHN0aWxsIHdvcnRod2hpbGUuCgpJbnRlcm1l ZGlhdGUgV2luZG93QWdnIG5vZGVzIG5ldmVyIGZpbHRlciBvdXQgdHVwbGVzLCBidXQgaGVyZSB3 ZSBjaGFuZ2UKV2luZG93QWdnIHNvIHRoYXQgdGhlIHRvcC1sZXZlbCBXaW5kb3dBZ2cgZmlsdGVy cyBvdXQgdHVwbGVzIHRoYXQgZG9uJ3QKbWF0Y2ggdGhlIGludGVybWVkaWF0ZSBXaW5kb3dBZ2cg bm9kZSdzIHJ1biBjb25kaXRpb24uICBTdWNoIGZpbHRlcnMKYXBwZWFyIGluIHRoZSBGaWx0ZXIg Y2xhdXNlIGluIEVYUExBSU4gZm9yIHRoZSB0b3AtbGV2ZWwgV2luZG93QWdnIG5vZGUuCgpIZXJl IHdlIGFkZCBwcm9zdXBwb3J0IGZ1bmN0aW9ucyB0byBhbGxvdyB0aGUgYWJvdmUgdG8gd29yayBm b3I7CnJvd19udW1iZXIoKSwgcmFuaygpLCBkZW5zZV9yYW5rKCksIGNvdW50KCopIGFuZCBjb3Vu dChleHByKS4gIEl0IGFwcGVhcnMKdGVjaG5pY2FsbHkgcG9zc2libGUgdG8gZG8gdGhlIHNhbWUg Zm9yIG1pbigpIGFuZCBtYXgoKSwgaG93ZXZlciwgaXQgc2VlbXMKdW5saWtlbHkgdG8gYmUgdXNl ZnVsIGVub3VnaCwgc28gdGhhdCdzIG5vdCBkb25lIGhlcmUuCgpBdXRob3I6IERhdmlkIFJvd2xl eQpSZXZpZXdlZC1ieTogQW5keSBGYW4sIFpoaWhvbmcgWXUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQUFwSER2cXZwM0F0OCsreUY4aWowNnNkY29vMVNfYjJZb2FUOUQ0TmYrTU9i enNyTFFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMg ICAgICAgICAgfCAgIDggKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jICAg IHwgMzgzICsrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVu Y3MuYyAgICAgICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgICB8 ICAgNiArCiBzcmMvYmFja2VuZC9ub2Rlcy9yZWFkZnVuY3MuYyAgICAgICAgICAgfCAgIDQgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgIHwgMjkwICsrKysrKysrKysr KysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgfCAgMTMgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICB8ICAxNSArLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgIHwgMTAyICsrKysrKwogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgIHwgIDExICstCiBzcmMvYmFja2VuZC91dGls cy9hZHQvaW50OC5jICAgICAgICAgICAgfCAgNDQgKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQv d2luZG93ZnVuY3MuYyAgICAgfCAgNjMgKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCAgICAgICAgIHwgIDM1ICsrLQogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAg ICAgICAgIHwgIDI0ICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oICAgICAgICAgICAgICAg fCAgIDMgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICB8ICAgMSAr CiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAgIDMgKwogc3JjL2lu Y2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgIHwgIDIxICsrCiBzcmMvaW5jbHVkZS9u b2Rlcy9zdXBwb3J0bm9kZXMuaCAgICAgICAgfCAgNjQgKysrLQogc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhub2RlLmggICAgICAgIHwgICA0ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3dpbmRvdy5vdXQgICAgfCAzOTggKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC93aW5kb3cuc3FsICAgICAgICAgfCAyMDYgKysrKysrKysrKysrCiAyMyBmaWxl cyBjaGFuZ2VkLCAxNTUzIGluc2VydGlvbnMoKyksIDE1MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMKaW5kZXggMWU1NzAxYjhlYi4uMzNkOGJmODdmYiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 cGxhaW4uYwpAQCAtMTk4OCw2ICsxOTg4LDE0IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQo IlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMp OwogCQkJYnJlYWs7CisJCWNhc2UgVF9XaW5kb3dBZ2c6CisJCQlzaG93X3VwcGVyX3F1YWwocGxh bi0+cXVhbCwgIkZpbHRlciIsIHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CisJCQlpZiAocGxh bi0+cXVhbCkKKwkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5 IEZpbHRlciIsIDEsCisJCQkJCXBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd191cHBlcl9xdWFsKCgo V2luZG93QWdnICopIHBsYW4pLT5ydW5Db25kaXRpb25PcmlnLAorCQkJCQkJCSJSdW4gQ29uZGl0 aW9uIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVzKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfR3Jv dXA6CiAJCQlzaG93X2dyb3VwX2tleXMoY2FzdE5vZGUoR3JvdXBTdGF0ZSwgcGxhbnN0YXRlKSwg YW5jZXN0b3JzLCBlcyk7CiAJCQlzaG93X3VwcGVyX3F1YWwocGxhbi0+cXVhbCwgIkZpbHRlciIs IHBsYW5zdGF0ZSwgYW5jZXN0b3JzLCBlcyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdn LmMKaW5kZXggMDhjZTA1Y2E1YS4uZDFmYTU0NzI5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVX aW5kb3dBZ2cuYwpAQCAtMTI0OCw2ICsxMjQ4LDIwIEBAIHNwb29sX3R1cGxlcyhXaW5kb3dBZ2dT dGF0ZSAqd2luc3RhdGUsIGludDY0IHBvcykKIAlpZiAod2luc3RhdGUtPnBhcnRpdGlvbl9zcG9v bGVkKQogCQlyZXR1cm47CQkJCQkvKiB3aG9sZSBwYXJ0aXRpb24gZG9uZSBhbHJlYWR5ICovCiAK KwkvKgorCSAqIFdoZW4gaW4gcGFzcy10aHJvdWdoIG1vZGUgd2UgY2FuIGp1c3QgZXhoYXVzdCBh bGwgdHVwbGVzIGluIHRoZSBjdXJyZW50CisJICogcGFydGl0aW9uLiAgV2UgZG9uJ3QgbmVlZCB0 aGVzZSB0dXBsZXMgZm9yIGFueSBmdXJ0aGVyIHdpbmRvdyBmdW5jdGlvbgorCSAqIGV2YWx1YXRp b24sIGhvd2V2ZXIsIHdlIGRvIG5lZWQgdG8ga2VlcCB0aGVtIGFyb3VuZCBpZiB3ZSdyZSBub3Qg dGhlCisJICogdG9wLWxldmVsIHdpbmRvdyBhcyBhbm90aGVyIFdpbmRvd0FnZyBub2RlIGFib3Zl IG11c3Qgc2VlIHRoZXNlLgorCSAqLworCWlmICh3aW5zdGF0ZS0+c3RhdHVzICE9IFdJTkRPV0FH R19SVU4pCisJeworCQlBc3NlcnQod2luc3RhdGUtPnN0YXR1cyA9PSBXSU5ET1dBR0dfUEFTU1RI Uk9VR0ggfHwKKwkJCSAgIHdpbnN0YXRlLT5zdGF0dXMgPT0gV0lORE9XQUdHX1BBU1NUSFJPVUdI X1NUUklDVCk7CisKKwkJcG9zID0gLTE7CisJfQorCiAJLyoKIAkgKiBJZiB0aGUgdHVwbGVzdG9y ZSBoYXMgc3BpbGxlZCB0byBkaXNrLCBhbHRlcm5hdGUgcmVhZGluZyBhbmQgd3JpdGluZwogCSAq IGJlY29tZXMgcXVpdGUgZXhwZW5zaXZlIGR1ZSB0byBmcmVxdWVudCBidWZmZXIgZmx1c2hlcy4g IEl0J3MgY2hlYXBlcgpAQCAtMTI1Niw3ICsxMjcwLDcgQEAgc3Bvb2xfdHVwbGVzKFdpbmRvd0Fn Z1N0YXRlICp3aW5zdGF0ZSwgaW50NjQgcG9zKQogCSAqIFhYWCB0aGlzIGlzIGEgaG9ycmlkIGts dWdlIC0tLSBpdCdkIGJlIGJldHRlciB0byBmaXggdGhlIHBlcmZvcm1hbmNlCiAJICogcHJvYmxl bSBpbnNpZGUgdHVwbGVzdG9yZS4gIEZJWE1FCiAJICovCi0JaWYgKCF0dXBsZXN0b3JlX2luX21l bW9yeSh3aW5zdGF0ZS0+YnVmZmVyKSkKKwllbHNlIGlmICghdHVwbGVzdG9yZV9pbl9tZW1vcnko d2luc3RhdGUtPmJ1ZmZlcikpCiAJCXBvcyA9IC0xOwogCiAJb3V0ZXJQbGFuID0gb3V0ZXJQbGFu U3RhdGUod2luc3RhdGUpOwpAQCAtMTI5NSw5ICsxMzA5LDE2IEBAIHNwb29sX3R1cGxlcyhXaW5k b3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGludDY0IHBvcykKIAkJCX0KIAkJfQogCi0JCS8qIFN0aWxs IGluIHBhcnRpdGlvbiwgc28gc2F2ZSBpdCBpbnRvIHRoZSB0dXBsZXN0b3JlICovCi0JCXR1cGxl c3RvcmVfcHV0dHVwbGVzbG90KHdpbnN0YXRlLT5idWZmZXIsIG91dGVyc2xvdCk7Ci0JCXdpbnN0 YXRlLT5zcG9vbGVkX3Jvd3MrKzsKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIHR1cGxlIHVubGVz cyB3ZSdyZSB0aGUgdG9wLWxldmVsIHdpbmRvdyBhbmQgd2UncmUgaW4KKwkJICogcGFzcy10aHJv dWdoIG1vZGUuCisJCSAqLworCQlpZiAod2luc3RhdGUtPnN0YXR1cyAhPSBXSU5ET1dBR0dfUEFT U1RIUk9VR0hfU1RSSUNUKQorCQl7CisJCQkvKiBTdGlsbCBpbiBwYXJ0aXRpb24sIHNvIHNhdmUg aXQgaW50byB0aGUgdHVwbGVzdG9yZSAqLworCQkJdHVwbGVzdG9yZV9wdXR0dXBsZXNsb3Qod2lu c3RhdGUtPmJ1ZmZlciwgb3V0ZXJzbG90KTsKKwkJCXdpbnN0YXRlLT5zcG9vbGVkX3Jvd3MrKzsK KwkJfQogCX0KIAogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKQEAgLTIwMjMs MTMgKzIwNDQsMTQgQEAgc3RhdGljIFR1cGxlVGFibGVTbG90ICoKIEV4ZWNXaW5kb3dBZ2coUGxh blN0YXRlICpwc3RhdGUpCiB7CiAJV2luZG93QWdnU3RhdGUgKndpbnN0YXRlID0gY2FzdE5vZGUo V2luZG93QWdnU3RhdGUsIHBzdGF0ZSk7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiAJRXhwckNv bnRleHQgKmVjb250ZXh0OwogCWludAkJCWk7CiAJaW50CQkJbnVtZnVuY3M7CiAKIAlDSEVDS19G T1JfSU5URVJSVVBUUygpOwogCi0JaWYgKHdpbnN0YXRlLT5hbGxfZG9uZSkKKwlpZiAod2luc3Rh dGUtPnN0YXR1cyA9PSBXSU5ET1dBR0dfRE9ORSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAt MjA5OSwxNDMgKzIxMjEsMjI0IEBAIEV4ZWNXaW5kb3dBZ2coUGxhblN0YXRlICpwc3RhdGUpCiAJ CXdpbnN0YXRlLT5hbGxfZmlyc3QgPSBmYWxzZTsKIAl9CiAKLQlpZiAod2luc3RhdGUtPmJ1ZmZl ciA9PSBOVUxMKQotCXsKLQkJLyogSW5pdGlhbGl6ZSBmb3IgZmlyc3QgcGFydGl0aW9uIGFuZCBz ZXQgY3VycmVudCByb3cgPSAwICovCi0JCWJlZ2luX3BhcnRpdGlvbih3aW5zdGF0ZSk7Ci0JCS8q IElmIHRoZXJlIGFyZSBubyBpbnB1dCByb3dzLCB3ZSdsbCBkZXRlY3QgdGhhdCBhbmQgZXhpdCBi ZWxvdyAqLwotCX0KLQllbHNlCisJLyogV2UgbmVlZCB0byBsb29wIGFzIHRoZSBydW5Db25kaXRp b24gbWF5IGZpbHRlciBvdXQgdHVwbGVzICovCisJZm9yICg7OykKIAl7Ci0JCS8qIEFkdmFuY2Ug Y3VycmVudCByb3cgd2l0aGluIHBhcnRpdGlvbiAqLwotCQl3aW5zdGF0ZS0+Y3VycmVudHBvcysr OwotCQkvKiBUaGlzIG1pZ2h0IG1lYW4gdGhhdCB0aGUgZnJhbWUgbW92ZXMsIHRvbyAqLwotCQl3 aW5zdGF0ZS0+ZnJhbWVoZWFkX3ZhbGlkID0gZmFsc2U7Ci0JCXdpbnN0YXRlLT5mcmFtZXRhaWxf dmFsaWQgPSBmYWxzZTsKLQkJLyogd2UgZG9uJ3QgbmVlZCB0byBpbnZhbGlkYXRlIGdyb3VwdGFp bCBoZXJlOyBzZWUgYmVsb3cgKi8KLQl9CisJCWlmICh3aW5zdGF0ZS0+YnVmZmVyID09IE5VTEwp CisJCXsKKwkJCS8qIEluaXRpYWxpemUgZm9yIGZpcnN0IHBhcnRpdGlvbiBhbmQgc2V0IGN1cnJl bnQgcm93ID0gMCAqLworCQkJYmVnaW5fcGFydGl0aW9uKHdpbnN0YXRlKTsKKwkJCS8qIElmIHRo ZXJlIGFyZSBubyBpbnB1dCByb3dzLCB3ZSdsbCBkZXRlY3QgdGhhdCBhbmQgZXhpdCBiZWxvdyAq LworCQl9CisJCWVsc2UKKwkJeworCQkJLyogQWR2YW5jZSBjdXJyZW50IHJvdyB3aXRoaW4gcGFy dGl0aW9uICovCisJCQl3aW5zdGF0ZS0+Y3VycmVudHBvcysrOworCQkJLyogVGhpcyBtaWdodCBt ZWFuIHRoYXQgdGhlIGZyYW1lIG1vdmVzLCB0b28gKi8KKwkJCXdpbnN0YXRlLT5mcmFtZWhlYWRf dmFsaWQgPSBmYWxzZTsKKwkJCXdpbnN0YXRlLT5mcmFtZXRhaWxfdmFsaWQgPSBmYWxzZTsKKwkJ CS8qIHdlIGRvbid0IG5lZWQgdG8gaW52YWxpZGF0ZSBncm91cHRhaWwgaGVyZTsgc2VlIGJlbG93 ICovCisJCX0KIAotCS8qCi0JICogU3Bvb2wgYWxsIHR1cGxlcyB1cCB0byBhbmQgaW5jbHVkaW5n IHRoZSBjdXJyZW50IHJvdywgaWYgd2UgaGF2ZW4ndAotCSAqIGFscmVhZHkKLQkgKi8KLQlzcG9v bF90dXBsZXMod2luc3RhdGUsIHdpbnN0YXRlLT5jdXJyZW50cG9zKTsKKwkJLyoKKwkJICogU3Bv b2wgYWxsIHR1cGxlcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBjdXJyZW50IHJvdywgaWYgd2Ug aGF2ZW4ndAorCQkgKiBhbHJlYWR5CisJCSAqLworCQlzcG9vbF90dXBsZXMod2luc3RhdGUsIHdp bnN0YXRlLT5jdXJyZW50cG9zKTsKIAotCS8qIE1vdmUgdG8gdGhlIG5leHQgcGFydGl0aW9uIGlm IHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGlzIHBhcnRpdGlvbiAqLwotCWlmICh3aW5zdGF0ZS0+ cGFydGl0aW9uX3Nwb29sZWQgJiYKLQkJd2luc3RhdGUtPmN1cnJlbnRwb3MgPj0gd2luc3RhdGUt PnNwb29sZWRfcm93cykKLQl7Ci0JCXJlbGVhc2VfcGFydGl0aW9uKHdpbnN0YXRlKTsKKwkJLyog TW92ZSB0byB0aGUgbmV4dCBwYXJ0aXRpb24gaWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoaXMg cGFydGl0aW9uICovCisJCWlmICh3aW5zdGF0ZS0+cGFydGl0aW9uX3Nwb29sZWQgJiYKKwkJCXdp bnN0YXRlLT5jdXJyZW50cG9zID49IHdpbnN0YXRlLT5zcG9vbGVkX3Jvd3MpCisJCXsKKwkJCXJl bGVhc2VfcGFydGl0aW9uKHdpbnN0YXRlKTsKKworCQkJaWYgKHdpbnN0YXRlLT5tb3JlX3BhcnRp dGlvbnMpCisJCQl7CisJCQkJYmVnaW5fcGFydGl0aW9uKHdpbnN0YXRlKTsKKwkJCQlBc3NlcnQo d2luc3RhdGUtPnNwb29sZWRfcm93cyA+IDApOworCisJCQkJLyogQ29tZSBvdXQgb2YgcGFzcy10 aHJvdWdoIG1vZGUgd2hlbiBjaGFuZ2luZyBwYXJ0aXRpb24gKi8KKwkJCQl3aW5zdGF0ZS0+c3Rh dHVzID0gV0lORE9XQUdHX1JVTjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBObyBmdXJ0 aGVyIHBhcnRpdGlvbnM/ICBXZSdyZSBkb25lICovCisJCQkJd2luc3RhdGUtPnN0YXR1cyA9IFdJ TkRPV0FHR19ET05FOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisKKwkJLyogZmluYWwg b3V0cHV0IGV4ZWN1dGlvbiBpcyBpbiBwc19FeHByQ29udGV4dCAqLworCQllY29udGV4dCA9IHdp bnN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dDsKKworCQkvKiBDbGVhciB0aGUgcGVyLW91dHB1 dC10dXBsZSBjb250ZXh0IGZvciBjdXJyZW50IHJvdyAqLworCQlSZXNldEV4cHJDb250ZXh0KGVj b250ZXh0KTsKIAotCQlpZiAod2luc3RhdGUtPm1vcmVfcGFydGl0aW9ucykKKwkJLyoKKwkJICog UmVhZCB0aGUgY3VycmVudCByb3cgZnJvbSB0aGUgdHVwbGVzdG9yZSwgYW5kIHNhdmUgaW4KKwkJ ICogU2NhblR1cGxlU2xvdC4gKFdlIGNhbid0IHJlbHkgb24gdGhlIG91dGVycGxhbidzIG91dHB1 dCBzbG90CisJCSAqIGJlY2F1c2Ugd2UgbWF5IGhhdmUgdG8gcmVhZCBiZXlvbmQgdGhlIGN1cnJl bnQgcm93LiAgQWxzbywgd2UgaGF2ZQorCQkgKiB0byBhY3R1YWxseSBjb3B5IHRoZSByb3cgb3V0 IG9mIHRoZSB0dXBsZXN0b3JlLCBzaW5jZSB3aW5kb3cKKwkJICogZnVuY3Rpb24gZXZhbHVhdGlv biBtaWdodCBjYXVzZSB0aGUgdHVwbGVzdG9yZSB0byBkdW1wIGl0cyBzdGF0ZSB0bworCQkgKiBk aXNrLikKKwkJICoKKwkJICogSW4gR1JPVVBTIG1vZGUsIG9yIHdoZW4gdHJhY2tpbmcgYSBncm91 cC1vcmllbnRlZCBleGNsdXNpb24gY2xhdXNlLAorCQkgKiB3ZSBtdXN0IGFsc28gZGV0ZWN0IGVu dGVyaW5nIGEgbmV3IHBlZXIgZ3JvdXAgYW5kIHVwZGF0ZSBhc3NvY2lhdGVkCisJCSAqIHN0YXRl IHdoZW4gdGhhdCBoYXBwZW5zLiAgV2UgdXNlIHRlbXBfc2xvdF8yIHRvIHRlbXBvcmFyaWx5IGhv bGQKKwkJICogdGhlIHByZXZpb3VzIHJvdyBmb3IgdGhpcyBwdXJwb3NlLgorCQkgKgorCQkgKiBD dXJyZW50IHJvdyBtdXN0IGJlIGluIHRoZSB0dXBsZXN0b3JlLCBzaW5jZSB3ZSBzcG9vbGVkIGl0 IGFib3ZlLgorCQkgKi8KKwkJdHVwbGVzdG9yZV9zZWxlY3RfcmVhZF9wb2ludGVyKHdpbnN0YXRl LT5idWZmZXIsIHdpbnN0YXRlLT5jdXJyZW50X3B0cik7CisJCWlmICgod2luc3RhdGUtPmZyYW1l T3B0aW9ucyAmIChGUkFNRU9QVElPTl9HUk9VUFMgfAorCQkJCQkJCQkJICAgRlJBTUVPUFRJT05f RVhDTFVERV9HUk9VUCB8CisJCQkJCQkJCQkgICBGUkFNRU9QVElPTl9FWENMVURFX1RJRVMpKSAm JgorCQkJd2luc3RhdGUtPmN1cnJlbnRwb3MgPiAwKQogCQl7Ci0JCQliZWdpbl9wYXJ0aXRpb24o d2luc3RhdGUpOwotCQkJQXNzZXJ0KHdpbnN0YXRlLT5zcG9vbGVkX3Jvd3MgPiAwKTsKKwkJCUV4 ZWNDb3B5U2xvdCh3aW5zdGF0ZS0+dGVtcF9zbG90XzIsIHdpbnN0YXRlLT5zcy5zc19TY2FuVHVw bGVTbG90KTsKKwkJCWlmICghdHVwbGVzdG9yZV9nZXR0dXBsZXNsb3Qod2luc3RhdGUtPmJ1ZmZl ciwgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCQkJCQkgd2luc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNsb3Qp KQorCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiB0dXBsZXN0b3JlIik7CisJCQlp ZiAoIWFyZV9wZWVycyh3aW5zdGF0ZSwgd2luc3RhdGUtPnRlbXBfc2xvdF8yLAorCQkJCQkJICAg d2luc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNsb3QpKQorCQkJeworCQkJCXdpbnN0YXRlLT5jdXJy ZW50Z3JvdXArKzsKKwkJCQl3aW5zdGF0ZS0+Z3JvdXBoZWFkcG9zID0gd2luc3RhdGUtPmN1cnJl bnRwb3M7CisJCQkJd2luc3RhdGUtPmdyb3VwdGFpbF92YWxpZCA9IGZhbHNlOworCQkJfQorCQkJ RXhlY0NsZWFyVHVwbGUod2luc3RhdGUtPnRlbXBfc2xvdF8yKTsKIAkJfQogCQllbHNlCiAJCXsK LQkJCXdpbnN0YXRlLT5hbGxfZG9uZSA9IHRydWU7Ci0JCQlyZXR1cm4gTlVMTDsKKwkJCWlmICgh dHVwbGVzdG9yZV9nZXR0dXBsZXNsb3Qod2luc3RhdGUtPmJ1ZmZlciwgdHJ1ZSwgdHJ1ZSwKKwkJ CQkJCQkJCQkgd2luc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNsb3QpKQorCQkJCWVsb2coRVJST1Is ICJ1bmV4cGVjdGVkIGVuZCBvZiB0dXBsZXN0b3JlIik7CiAJCX0KLQl9CiAKLQkvKiBmaW5hbCBv dXRwdXQgZXhlY3V0aW9uIGlzIGluIHBzX0V4cHJDb250ZXh0ICovCi0JZWNvbnRleHQgPSB3aW5z dGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CisJCS8qIGRvbid0IGV2YWx1YXRlIHRoZSB3aW5k b3cgZnVuY3Rpb25zIHdoZW4gd2UncmUgaW4gcGFzcy10aHJvdWdoIG1vZGUgKi8KKwkJaWYgKHdp bnN0YXRlLT5zdGF0dXMgPT0gV0lORE9XQUdHX1JVTikKKwkJeworCQkJLyoKKwkJCSAqIEV2YWx1 YXRlIHRydWUgd2luZG93IGZ1bmN0aW9ucworCQkJICovCisJCQludW1mdW5jcyA9IHdpbnN0YXRl LT5udW1mdW5jczsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1mdW5jczsgaSsrKQorCQkJeworCQkJ CVdpbmRvd1N0YXRlUGVyRnVuYyBwZXJmdW5jc3RhdGUgPSAmKHdpbnN0YXRlLT5wZXJmdW5jW2ld KTsKIAotCS8qIENsZWFyIHRoZSBwZXItb3V0cHV0LXR1cGxlIGNvbnRleHQgZm9yIGN1cnJlbnQg cm93ICovCi0JUmVzZXRFeHByQ29udGV4dChlY29udGV4dCk7CisJCQkJaWYgKHBlcmZ1bmNzdGF0 ZS0+cGxhaW5fYWdnKQorCQkJCQljb250aW51ZTsKKwkJCQlldmFsX3dpbmRvd2Z1bmN0aW9uKHdp bnN0YXRlLCBwZXJmdW5jc3RhdGUsCisJCQkJCQkJCQkmKGVjb250ZXh0LT5lY3h0X2FnZ3ZhbHVl c1twZXJmdW5jc3RhdGUtPndmdW5jc3RhdGUtPndmdW5jbm9dKSwKKwkJCQkJCQkJCSYoZWNvbnRl eHQtPmVjeHRfYWdnbnVsbHNbcGVyZnVuY3N0YXRlLT53ZnVuY3N0YXRlLT53ZnVuY25vXSkpOwor CQkJfQogCi0JLyoKLQkgKiBSZWFkIHRoZSBjdXJyZW50IHJvdyBmcm9tIHRoZSB0dXBsZXN0b3Jl LCBhbmQgc2F2ZSBpbiBTY2FuVHVwbGVTbG90LgotCSAqIChXZSBjYW4ndCByZWx5IG9uIHRoZSBv dXRlcnBsYW4ncyBvdXRwdXQgc2xvdCBiZWNhdXNlIHdlIG1heSBoYXZlIHRvCi0JICogcmVhZCBi ZXlvbmQgdGhlIGN1cnJlbnQgcm93LiAgQWxzbywgd2UgaGF2ZSB0byBhY3R1YWxseSBjb3B5IHRo ZSByb3cKLQkgKiBvdXQgb2YgdGhlIHR1cGxlc3RvcmUsIHNpbmNlIHdpbmRvdyBmdW5jdGlvbiBl dmFsdWF0aW9uIG1pZ2h0IGNhdXNlIHRoZQotCSAqIHR1cGxlc3RvcmUgdG8gZHVtcCBpdHMgc3Rh dGUgdG8gZGlzay4pCi0JICoKLQkgKiBJbiBHUk9VUFMgbW9kZSwgb3Igd2hlbiB0cmFja2luZyBh IGdyb3VwLW9yaWVudGVkIGV4Y2x1c2lvbiBjbGF1c2UsIHdlCi0JICogbXVzdCBhbHNvIGRldGVj dCBlbnRlcmluZyBhIG5ldyBwZWVyIGdyb3VwIGFuZCB1cGRhdGUgYXNzb2NpYXRlZCBzdGF0ZQot CSAqIHdoZW4gdGhhdCBoYXBwZW5zLiAgV2UgdXNlIHRlbXBfc2xvdF8yIHRvIHRlbXBvcmFyaWx5 IGhvbGQgdGhlIHByZXZpb3VzCi0JICogcm93IGZvciB0aGlzIHB1cnBvc2UuCi0JICoKLQkgKiBD dXJyZW50IHJvdyBtdXN0IGJlIGluIHRoZSB0dXBsZXN0b3JlLCBzaW5jZSB3ZSBzcG9vbGVkIGl0 IGFib3ZlLgotCSAqLwotCXR1cGxlc3RvcmVfc2VsZWN0X3JlYWRfcG9pbnRlcih3aW5zdGF0ZS0+ YnVmZmVyLCB3aW5zdGF0ZS0+Y3VycmVudF9wdHIpOwotCWlmICgod2luc3RhdGUtPmZyYW1lT3B0 aW9ucyAmIChGUkFNRU9QVElPTl9HUk9VUFMgfAotCQkJCQkJCQkgICBGUkFNRU9QVElPTl9FWENM VURFX0dST1VQIHwKLQkJCQkJCQkJICAgRlJBTUVPUFRJT05fRVhDTFVERV9USUVTKSkgJiYKLQkJ d2luc3RhdGUtPmN1cnJlbnRwb3MgPiAwKQotCXsKLQkJRXhlY0NvcHlTbG90KHdpbnN0YXRlLT50 ZW1wX3Nsb3RfMiwgd2luc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNsb3QpOwotCQlpZiAoIXR1cGxl c3RvcmVfZ2V0dHVwbGVzbG90KHdpbnN0YXRlLT5idWZmZXIsIHRydWUsIHRydWUsCi0JCQkJCQkJ CQkgd2luc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNsb3QpKQotCQkJZWxvZyhFUlJPUiwgInVuZXhw ZWN0ZWQgZW5kIG9mIHR1cGxlc3RvcmUiKTsKLQkJaWYgKCFhcmVfcGVlcnMod2luc3RhdGUsIHdp bnN0YXRlLT50ZW1wX3Nsb3RfMiwKLQkJCQkJICAgd2luc3RhdGUtPnNzLnNzX1NjYW5UdXBsZVNs b3QpKQotCQl7Ci0JCQl3aW5zdGF0ZS0+Y3VycmVudGdyb3VwKys7Ci0JCQl3aW5zdGF0ZS0+Z3Jv dXBoZWFkcG9zID0gd2luc3RhdGUtPmN1cnJlbnRwb3M7Ci0JCQl3aW5zdGF0ZS0+Z3JvdXB0YWls X3ZhbGlkID0gZmFsc2U7CisJCQkvKgorCQkJICogRXZhbHVhdGUgYWdncmVnYXRlcworCQkJICov CisJCQlpZiAod2luc3RhdGUtPm51bWFnZ3MgPiAwKQorCQkJCWV2YWxfd2luZG93YWdncmVnYXRl cyh3aW5zdGF0ZSk7CiAJCX0KLQkJRXhlY0NsZWFyVHVwbGUod2luc3RhdGUtPnRlbXBfc2xvdF8y KTsKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKCF0dXBsZXN0b3JlX2dldHR1cGxlc2xvdCh3aW5zdGF0 ZS0+YnVmZmVyLCB0cnVlLCB0cnVlLAotCQkJCQkJCQkJIHdpbnN0YXRlLT5zcy5zc19TY2FuVHVw bGVTbG90KSkKLQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiB0dXBsZXN0b3JlIik7 Ci0JfQogCi0JLyoKLQkgKiBFdmFsdWF0ZSB0cnVlIHdpbmRvdyBmdW5jdGlvbnMKLQkgKi8KLQlu dW1mdW5jcyA9IHdpbnN0YXRlLT5udW1mdW5jczsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtZnVuY3M7 IGkrKykKLQl7Ci0JCVdpbmRvd1N0YXRlUGVyRnVuYyBwZXJmdW5jc3RhdGUgPSAmKHdpbnN0YXRl LT5wZXJmdW5jW2ldKTsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBjcmVhdGVkIGF1eGlsaWFyeSBy ZWFkIHBvaW50ZXJzIGZvciB0aGUgZnJhbWUgb3IgZ3JvdXAKKwkJICogYm91bmRhcmllcywgZm9y Y2UgdGhlbSB0byBiZSBrZXB0IHVwLXRvLWRhdGUsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdworCQkg KiB3aGV0aGVyIHRoZSB3aW5kb3cgZnVuY3Rpb24ocykgd2lsbCBkbyBhbnl0aGluZyB0aGF0IHJl cXVpcmVzIHRoYXQuCisJCSAqIEZhaWxpbmcgdG8gYWR2YW5jZSB0aGUgcG9pbnRlcnMgd291bGQg cmVzdWx0IGluIGJlaW5nIHVuYWJsZSB0bworCQkgKiB0cmltIGRhdGEgZnJvbSB0aGUgdHVwbGVz dG9yZSwgd2hpY2ggaXMgYmFkLiAgKElmIHdlIGNvdWxkIGtub3cgaW4KKwkJICogYWR2YW5jZSB3 aGV0aGVyIHRoZSB3aW5kb3cgZnVuY3Rpb25zIHdpbGwgdXNlIGZyYW1lIGJvdW5kYXJ5IGluZm8s CisJCSAqIHdlIGNvdWxkIHNraXAgY3JlYXRpbmcgdGhlc2UgcG9pbnRlcnMgaW4gdGhlIGZpcnN0 IHBsYWNlIC4uLiBidXQKKwkJICogdW5mb3J0dW5hdGVseSB0aGUgd2luZG93IGZ1bmN0aW9uIEFQ SSBkb2Vzbid0IHJlcXVpcmUgdGhhdC4pCisJCSAqLworCQlpZiAod2luc3RhdGUtPmZyYW1laGVh ZF9wdHIgPj0gMCkKKwkJCXVwZGF0ZV9mcmFtZWhlYWRwb3Mod2luc3RhdGUpOworCQlpZiAod2lu c3RhdGUtPmZyYW1ldGFpbF9wdHIgPj0gMCkKKwkJCXVwZGF0ZV9mcmFtZXRhaWxwb3Mod2luc3Rh dGUpOworCQlpZiAod2luc3RhdGUtPmdyb3VwdGFpbF9wdHIgPj0gMCkKKwkJCXVwZGF0ZV9ncm91 cHRhaWxwb3Mod2luc3RhdGUpOwogCi0JCWlmIChwZXJmdW5jc3RhdGUtPnBsYWluX2FnZykKLQkJ CWNvbnRpbnVlOwotCQlldmFsX3dpbmRvd2Z1bmN0aW9uKHdpbnN0YXRlLCBwZXJmdW5jc3RhdGUs Ci0JCQkJCQkJJihlY29udGV4dC0+ZWN4dF9hZ2d2YWx1ZXNbcGVyZnVuY3N0YXRlLT53ZnVuY3N0 YXRlLT53ZnVuY25vXSksCi0JCQkJCQkJJihlY29udGV4dC0+ZWN4dF9hZ2dudWxsc1twZXJmdW5j c3RhdGUtPndmdW5jc3RhdGUtPndmdW5jbm9dKSk7Ci0JfQorCQkvKgorCQkgKiBUcnVuY2F0ZSBh bnkgbm8tbG9uZ2VyLW5lZWRlZCByb3dzIGZyb20gdGhlIHR1cGxlc3RvcmUuCisJCSAqLworCQl0 dXBsZXN0b3JlX3RyaW0od2luc3RhdGUtPmJ1ZmZlcik7CiAKLQkvKgotCSAqIEV2YWx1YXRlIGFn Z3JlZ2F0ZXMKLQkgKi8KLQlpZiAod2luc3RhdGUtPm51bWFnZ3MgPiAwKQotCQlldmFsX3dpbmRv d2FnZ3JlZ2F0ZXMod2luc3RhdGUpOworCQkvKgorCQkgKiBGb3JtIGFuZCByZXR1cm4gYSBwcm9q ZWN0aW9uIHR1cGxlIHVzaW5nIHRoZSB3aW5kb3dmdW5jIHJlc3VsdHMgYW5kCisJCSAqIHRoZSBj dXJyZW50IHJvdy4gIFNldHRpbmcgZWN4dF9vdXRlcnR1cGxlIGFycmFuZ2VzIHRoYXQgYW55IFZh cnMKKwkJICogd2lsbCBiZSBldmFsdWF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoYXQgcm93LgorCQkg Ki8KKwkJZWNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZSA9IHdpbnN0YXRlLT5zcy5zc19TY2FuVHVw bGVTbG90OwogCi0JLyoKLQkgKiBJZiB3ZSBoYXZlIGNyZWF0ZWQgYXV4aWxpYXJ5IHJlYWQgcG9p bnRlcnMgZm9yIHRoZSBmcmFtZSBvciBncm91cAotCSAqIGJvdW5kYXJpZXMsIGZvcmNlIHRoZW0g dG8gYmUga2VwdCB1cC10by1kYXRlLCBiZWNhdXNlIHdlIGRvbid0IGtub3cKLQkgKiB3aGV0aGVy IHRoZSB3aW5kb3cgZnVuY3Rpb24ocykgd2lsbCBkbyBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIHRo YXQuCi0JICogRmFpbGluZyB0byBhZHZhbmNlIHRoZSBwb2ludGVycyB3b3VsZCByZXN1bHQgaW4g YmVpbmcgdW5hYmxlIHRvIHRyaW0KLQkgKiBkYXRhIGZyb20gdGhlIHR1cGxlc3RvcmUsIHdoaWNo IGlzIGJhZC4gIChJZiB3ZSBjb3VsZCBrbm93IGluIGFkdmFuY2UKLQkgKiB3aGV0aGVyIHRoZSB3 aW5kb3cgZnVuY3Rpb25zIHdpbGwgdXNlIGZyYW1lIGJvdW5kYXJ5IGluZm8sIHdlIGNvdWxkCi0J ICogc2tpcCBjcmVhdGluZyB0aGVzZSBwb2ludGVycyBpbiB0aGUgZmlyc3QgcGxhY2UgLi4uIGJ1 dCB1bmZvcnR1bmF0ZWx5Ci0JICogdGhlIHdpbmRvdyBmdW5jdGlvbiBBUEkgZG9lc24ndCByZXF1 aXJlIHRoYXQuKQotCSAqLwotCWlmICh3aW5zdGF0ZS0+ZnJhbWVoZWFkX3B0ciA+PSAwKQotCQl1 cGRhdGVfZnJhbWVoZWFkcG9zKHdpbnN0YXRlKTsKLQlpZiAod2luc3RhdGUtPmZyYW1ldGFpbF9w dHIgPj0gMCkKLQkJdXBkYXRlX2ZyYW1ldGFpbHBvcyh3aW5zdGF0ZSk7Ci0JaWYgKHdpbnN0YXRl LT5ncm91cHRhaWxfcHRyID49IDApCi0JCXVwZGF0ZV9ncm91cHRhaWxwb3Mod2luc3RhdGUpOwor CQlzbG90ID0gRXhlY1Byb2plY3Qod2luc3RhdGUtPnNzLnBzLnBzX1Byb2pJbmZvKTsKIAotCS8q Ci0JICogVHJ1bmNhdGUgYW55IG5vLWxvbmdlci1uZWVkZWQgcm93cyBmcm9tIHRoZSB0dXBsZXN0 b3JlLgotCSAqLwotCXR1cGxlc3RvcmVfdHJpbSh3aW5zdGF0ZS0+YnVmZmVyKTsKKwkJaWYgKHdp bnN0YXRlLT5zdGF0dXMgPT0gV0lORE9XQUdHX1JVTikKKwkJeworCQkJZWNvbnRleHQtPmVjeHRf c2NhbnR1cGxlID0gc2xvdDsKIAotCS8qCi0JICogRm9ybSBhbmQgcmV0dXJuIGEgcHJvamVjdGlv biB0dXBsZSB1c2luZyB0aGUgd2luZG93ZnVuYyByZXN1bHRzIGFuZCB0aGUKLQkgKiBjdXJyZW50 IHJvdy4gIFNldHRpbmcgZWN4dF9vdXRlcnR1cGxlIGFycmFuZ2VzIHRoYXQgYW55IFZhcnMgd2ls bCBiZQotCSAqIGV2YWx1YXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhhdCByb3cuCi0JICovCi0JZWNv bnRleHQtPmVjeHRfb3V0ZXJ0dXBsZSA9IHdpbnN0YXRlLT5zcy5zc19TY2FuVHVwbGVTbG90Owor CQkJLyoKKwkJCSAqIE5vdyBldmFsdWF0ZSB0aGUgcnVuIGNvbmRpdGlvbiB0byBzZWUgaWYgd2Ug bmVlZCB0byBnbyBpbnRvCisJCQkgKiBwYXNzLXRocm91Z2ggbW9kZSwgb3IgbWF5YmUgc3RvcCBj b21wbGV0ZWx5LgorCQkJICovCisJCQlpZiAoIUV4ZWNRdWFsKHdpbnN0YXRlLT5ydW5jb25kaXRp b24sIGVjb250ZXh0KSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIERldGVybWluZSB3aGljaCBtb2Rl IHRvIG1vdmUgaW50by4gIElmIHRoZXJlIGlzIG5vCisJCQkJICogUEFSVElUSU9OIEJZIGNsYXVz ZSBhbmQgd2UncmUgdGhlIHRvcC1sZXZlbCBXaW5kb3dBZ2cgdGhlbgorCQkJCSAqIHdlJ3JlIGRv bmUuICBUaGlzIHR1cGxlIGFuZCBhbnkgZnV0dXJlIHR1cGxlcyBjYW5ub3QKKwkJCQkgKiBwb3Nz aWJseSBtYXRjaCB0aGUgcnVuY29uZGl0aW9uLiAgSG93ZXZlciwgd2hlbiB0aGVyZSBpcyBhCisJ CQkJICogUEFSVElUSU9OIEJZIGNsYXVzZSBvciB3ZSdyZSBub3QgdGhlIHRvcC1sZXZlbCB3aW5k b3cgd2UKKwkJCQkgKiBjYW4ndCBqdXN0IHN0b3AgYXMgd2UgbmVlZCB0byBlaXRoZXIgcHJvY2Vz cyBvdGhlcgorCQkJCSAqIHBhcnRpdGlvbnMgb3IgZW5zdXJlIFdpbmRvd0FnZyBub2RlcyBhYm92 ZSB1cyByZWNlaXZlIGFsbAorCQkJCSAqIG9mIHRoZSB0dXBsZXMgdGhleSBuZWVkIHRvIHByb2Nl c3MgdGhlaXIgV2luZG93RnVuY3MuCisJCQkJICovCisJCQkJaWYgKHdpbnN0YXRlLT51c2VfcGFz c190aHJvdWdoKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogU1RSSUNUIHBhc3MtdGhyb3VnaCBt b2RlIGlzIHJlcXVpcmVkIGZvciB0aGUgdG9wIHdpbmRvdworCQkJCQkgKiB3aGVuIHRoZXJlIGlz IGEgUEFSVElUSU9OIEJZIGNsYXVzZS4gIE90aGVyd2lzZSB3ZSBtdXN0CisJCQkJCSAqIGVuc3Vy ZSB3ZSBzdG9yZSB0dXBsZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUKKwkJCQkJICogcnVuY29uZGl0 aW9uIHNvIHRoZXkncmUgYXZhaWxhYmxlIHRvIFdpbmRvd0FnZ3MgYWJvdmUuCisJCQkJCSAqLwor CQkJCQlpZiAod2luc3RhdGUtPnRvcF93aW5kb3cpCisJCQkJCXsKKwkJCQkJCXdpbnN0YXRlLT5z dGF0dXMgPSBXSU5ET1dBR0dfUEFTU1RIUk9VR0hfU1RSSUNUOworCQkJCQkJY29udGludWU7CisJ CQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJd2luc3RhdGUtPnN0YXR1cyA9IFdJTkRPV0FHR19QQVNT VEhST1VHSDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogUGFzcy10 aHJvdWdoIG5vdCByZXF1aXJlZC4gIFdlIGNhbiBqdXN0IHJldHVybiBOVUxMLgorCQkJCQkgKiBO b3RoaW5nIGVsc2Ugd2lsbCBtYXRjaCB0aGUgcnVuY29uZGl0aW9uLgorCQkJCQkgKi8KKwkJCQkJ d2luc3RhdGUtPnN0YXR1cyA9IFdJTkRPV0FHR19ET05FOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJ CQl9CisJCQl9CisKKwkJCS8qCisJCQkgKiBGaWx0ZXIgb3V0IGFueSB0dXBsZXMgd2UgZG9uJ3Qg bmVlZCBpbiB0aGUgdG9wLWxldmVsIFdpbmRvd0FnZy4KKwkJCSAqLworCQkJaWYgKCFFeGVjUXVh bCh3aW5zdGF0ZS0+c3MucHMucXVhbCwgZWNvbnRleHQpKQorCQkJeworCQkJCUluc3RyQ291bnRG aWx0ZXJlZDEod2luc3RhdGUsIDEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlicmVhazsK KwkJfQorCisJCS8qCisJCSAqIFdoZW4gbm90IGluIFdJTkRPV0FHR19SVU4gbW9kZSwgd2UgbXVz dCBzdGlsbCByZXR1cm4gdGhpcyB0dXBsZSBpZgorCQkgKiB3ZSdyZSBhbnl0aGluZyBhcGFydCBm cm9tIHRoZSB0b3Agd2luZG93LgorCQkgKi8KKwkJZWxzZSBpZiAoIXdpbnN0YXRlLT50b3Bfd2lu ZG93KQorCQkJYnJlYWs7CisJfQogCi0JcmV0dXJuIEV4ZWNQcm9qZWN0KHdpbnN0YXRlLT5zcy5w cy5wc19Qcm9qSW5mbyk7CisJcmV0dXJuIHNsb3Q7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0t CkBAIC0yMzAwLDEyICsyNDAzLDM1IEBAIEV4ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQkJCQkJICAiV2luZG93QWdnIEFnZ3Jl Z2F0ZXMiLAogCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CiAKKwkvKiBPbmx5IHRo ZSB0b3AtbGV2ZWwgV2luZG93QWdnIG1heSBoYXZlIGEgcXVhbCAqLworCUFzc2VydChub2RlLT5w bGFuLnF1YWwgPT0gTklMIHx8IG5vZGUtPnRvcFdpbmRvdyk7CisKKwkvKiBJbml0aWFsaXplIHRo ZSBxdWFsICovCisJd2luc3RhdGUtPnNzLnBzLnF1YWwgPSBFeGVjSW5pdFF1YWwobm9kZS0+cGxh bi5xdWFsLAorCQkJCQkJCQkJCShQbGFuU3RhdGUgKikgd2luc3RhdGUpOworCisJLyoKKwkgKiBT ZXR1cCB0aGUgcnVuIGNvbmRpdGlvbiwgaWYgd2UgcmVjZWl2ZWQgb25lIGZyb20gdGhlIHF1ZXJ5 IHBsYW5uZXIuCisJICogV2hlbiBzZXQsIHRoaXMgbWF5IGFsbG93IHVzIHRvIG1vdmUgaW50byBw YXNzLXRocm91Z2ggbW9kZSBzbyB0aGF0IHdlCisJICogZG9uJ3QgaGF2ZSB0byBwZXJmb3JtIGFu eSBmdXJ0aGVyIGV2YWx1YXRpb24gb2YgV2luZG93RnVuY3MgaW4gdGhlCisJICogY3VycmVudCBw YXJ0aXRpb24gb3IgcG9zc2libHkgc3RvcCByZXR1cm5pbmcgdHVwbGVzIGFsdG9nZXRoZXIgd2hl biBhbGwKKwkgKiB0dXBsZXMgYXJlIGluIHRoZSBzYW1lIHBhcnRpdGlvbi4KKwkgKi8KKwlpZiAo bm9kZS0+cnVuQ29uZGl0aW9uICE9IE5JTCkKKwkJd2luc3RhdGUtPnJ1bmNvbmRpdGlvbiA9IEV4 ZWNJbml0UXVhbChub2RlLT5ydW5Db25kaXRpb24sCisJCQkJCQkJCQkJCSAgKFBsYW5TdGF0ZSAq KSB3aW5zdGF0ZSk7CisJZWxzZQorCQl3aW5zdGF0ZS0+cnVuY29uZGl0aW9uID0gTlVMTDsKKwog CS8qCi0JICogV2luZG93QWdnIG5vZGVzIG5ldmVyIGhhdmUgcXVhbHMsIHNpbmNlIHRoZXkgY2Fu IG9ubHkgb2NjdXIgYXQgdGhlCi0JICogbG9naWNhbCB0b3AgbGV2ZWwgb2YgYSBxdWVyeSAoaWUs IGFmdGVyIGFueSBXSEVSRSBvciBIQVZJTkcgZmlsdGVycykKKwkgKiBXaGVuIHdlJ3JlIG5vdCB0 aGUgdG9wLWxldmVsIFdpbmRvd0FnZyBub2RlIG9yIHdlIGFyZSBidXQgaGF2ZSBhCisJICogUEFS VElUSU9OIEJZIGNsYXVzZSB3ZSBtdXN0IG1vdmUgaW50byBvbmUgb2YgdGhlIFdJTkRPV0FHR19Q QVNTVEhST1VHSCoKKwkgKiBtb2RlcyB3aGVuIHRoZSBydW5Db25kaXRpb24gYmVjb21lcyBmYWxz ZS4KIAkgKi8KLQlBc3NlcnQobm9kZS0+cGxhbi5xdWFsID09IE5JTCk7Ci0Jd2luc3RhdGUtPnNz LnBzLnF1YWwgPSBOVUxMOworCXdpbnN0YXRlLT51c2VfcGFzc190aHJvdWdoID0gIW5vZGUtPnRv cFdpbmRvdyB8fCBub2RlLT5wYXJ0TnVtQ29scyA+IDA7CisKKwkvKiByZW1lbWJlciBpZiB3ZSdy ZSB0aGUgdG9wLXdpbmRvdyBvciB3ZSBhcmUgYmVsb3cgdGhlIHRvcC13aW5kb3cgKi8KKwl3aW5z dGF0ZS0+dG9wX3dpbmRvdyA9IG5vZGUtPnRvcFdpbmRvdzsKIAogCS8qCiAJICogaW5pdGlhbGl6 ZSBjaGlsZCBub2RlcwpAQCAtMjUwMCw2ICsyNjI2LDkgQEAgRXhlY0luaXRXaW5kb3dBZ2coV2lu ZG93QWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJd2luc3RhdGUtPmFn Z193aW5vYmogPSBhZ2dfd2lub2JqOwogCX0KIAorCS8qIFNldCB0aGUgc3RhdHVzIHRvIHJ1bm5p bmcgKi8KKwl3aW5zdGF0ZS0+c3RhdHVzID0gV0lORE9XQUdHX1JVTjsKKwogCS8qIGNvcHkgZnJh bWUgb3B0aW9ucyB0byBzdGF0ZSBub2RlIGZvciBlYXN5IGFjY2VzcyAqLwogCXdpbnN0YXRlLT5m cmFtZU9wdGlvbnMgPSBmcmFtZU9wdGlvbnM7CiAKQEAgLTI1NzksNyArMjcwOCw3IEBAIEV4ZWNS ZVNjYW5XaW5kb3dBZ2coV2luZG93QWdnU3RhdGUgKm5vZGUpCiAJUGxhblN0YXRlICAqb3V0ZXJQ bGFuID0gb3V0ZXJQbGFuU3RhdGUobm9kZSk7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gbm9k ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CiAKLQlub2RlLT5hbGxfZG9uZSA9IGZhbHNlOworCW5v ZGUtPnN0YXR1cyA9IFdJTkRPV0FHR19SVU47CiAJbm9kZS0+YWxsX2ZpcnN0ID0gdHJ1ZTsKIAog CS8qIHJlbGVhc2UgdHVwbGVzdG9yZSBldCBhbCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv bm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCA0 NmExOTQzZDk3Li42ZjU2YjI2OWNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5 ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtMTEwNCwxMSAr MTEwNCwxNCBAQCBfY29weVdpbmRvd0FnZyhjb25zdCBXaW5kb3dBZ2cgKmZyb20pCiAJQ09QWV9T Q0FMQVJfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlDT1BZX05PREVfRklFTEQoc3RhcnRPZmZzZXQp OwogCUNPUFlfTk9ERV9GSUVMRChlbmRPZmZzZXQpOworCUNPUFlfTk9ERV9GSUVMRChydW5Db25k aXRpb24pOworCUNPUFlfTk9ERV9GSUVMRChydW5Db25kaXRpb25PcmlnKTsKIAlDT1BZX1NDQUxB Ul9GSUVMRChzdGFydEluUmFuZ2VGdW5jKTsKIAlDT1BZX1NDQUxBUl9GSUVMRChlbmRJblJhbmdl RnVuYyk7CiAJQ09QWV9TQ0FMQVJfRklFTEQoaW5SYW5nZUNvbGwpOwogCUNPUFlfU0NBTEFSX0ZJ RUxEKGluUmFuZ2VBc2MpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGluUmFuZ2VOdWxsc0ZpcnN0KTsK KwlDT1BZX1NDQUxBUl9GSUVMRCh0b3BXaW5kb3cpOwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CkBA IC0zMDYxLDYgKzMwNjQsNyBAQCBfY29weVdpbmRvd0NsYXVzZShjb25zdCBXaW5kb3dDbGF1c2Ug KmZyb20pCiAJQ09QWV9TQ0FMQVJfRklFTEQoZnJhbWVPcHRpb25zKTsKIAlDT1BZX05PREVfRklF TEQoc3RhcnRPZmZzZXQpOwogCUNPUFlfTk9ERV9GSUVMRChlbmRPZmZzZXQpOworCUNPUFlfTk9E RV9GSUVMRChydW5Db25kaXRpb24pOwogCUNPUFlfU0NBTEFSX0ZJRUxEKHN0YXJ0SW5SYW5nZUZ1 bmMpOwogCUNPUFlfU0NBTEFSX0ZJRUxEKGVuZEluUmFuZ2VGdW5jKTsKIAlDT1BZX1NDQUxBUl9G SUVMRChpblJhbmdlQ29sbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXggMWY3NjVmNDJjOS4u NGI0ZjM4MGJiYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMzIzNCw2ICszMjM0LDcgQEAg X2VxdWFsV2luZG93Q2xhdXNlKGNvbnN0IFdpbmRvd0NsYXVzZSAqYSwgY29uc3QgV2luZG93Q2xh dXNlICpiKQogCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGZyYW1lT3B0aW9ucyk7CiAJQ09NUEFSRV9O T0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlDT01QQVJFX05PREVfRklFTEQoZW5kT2Zmc2V0KTsK KwlDT01QQVJFX05PREVfRklFTEQocnVuQ29uZGl0aW9uKTsKIAlDT01QQVJFX1NDQUxBUl9GSUVM RChzdGFydEluUmFuZ2VGdW5jKTsKIAlDT01QQVJFX1NDQUxBUl9GSUVMRChlbmRJblJhbmdlRnVu Yyk7CiAJQ09NUEFSRV9TQ0FMQVJfRklFTEQoaW5SYW5nZUNvbGwpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMK aW5kZXggMTNlMTY0MzUzMC4uZDVmNWU3NmM1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9k ZXMvb3V0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC04Mjks MTEgKzgyOSwxNCBAQCBfb3V0V2luZG93QWdnKFN0cmluZ0luZm8gc3RyLCBjb25zdCBXaW5kb3dB Z2cgKm5vZGUpCiAJV1JJVEVfSU5UX0ZJRUxEKGZyYW1lT3B0aW9ucyk7CiAJV1JJVEVfTk9ERV9G SUVMRChzdGFydE9mZnNldCk7CiAJV1JJVEVfTk9ERV9GSUVMRChlbmRPZmZzZXQpOworCVdSSVRF X05PREVfRklFTEQocnVuQ29uZGl0aW9uKTsKKwlXUklURV9OT0RFX0ZJRUxEKHJ1bkNvbmRpdGlv bk9yaWcpOwogCVdSSVRFX09JRF9GSUVMRChzdGFydEluUmFuZ2VGdW5jKTsKIAlXUklURV9PSURf RklFTEQoZW5kSW5SYW5nZUZ1bmMpOwogCVdSSVRFX09JRF9GSUVMRChpblJhbmdlQ29sbCk7CiAJ V1JJVEVfQk9PTF9GSUVMRChpblJhbmdlQXNjKTsKIAlXUklURV9CT09MX0ZJRUxEKGluUmFuZ2VO dWxsc0ZpcnN0KTsKKwlXUklURV9CT09MX0ZJRUxEKHRvcFdpbmRvdyk7CiB9CiAKIHN0YXRpYyB2 b2lkCkBAIC0yMjgzLDYgKzIyODYsOCBAQCBfb3V0V2luZG93QWdnUGF0aChTdHJpbmdJbmZvIHN0 ciwgY29uc3QgV2luZG93QWdnUGF0aCAqbm9kZSkKIAogCVdSSVRFX05PREVfRklFTEQoc3VicGF0 aCk7CiAJV1JJVEVfTk9ERV9GSUVMRCh3aW5jbGF1c2UpOworCVdSSVRFX05PREVfRklFTEQocXVh bCk7CisJV1JJVEVfQk9PTF9GSUVMRCh0b3B3aW5kb3cpOwogfQogCiBzdGF0aWMgdm9pZApAQCAt MzI5Myw2ICszMjk4LDcgQEAgX291dFdpbmRvd0NsYXVzZShTdHJpbmdJbmZvIHN0ciwgY29uc3Qg V2luZG93Q2xhdXNlICpub2RlKQogCVdSSVRFX0lOVF9GSUVMRChmcmFtZU9wdGlvbnMpOwogCVdS SVRFX05PREVfRklFTEQoc3RhcnRPZmZzZXQpOwogCVdSSVRFX05PREVfRklFTEQoZW5kT2Zmc2V0 KTsKKwlXUklURV9OT0RFX0ZJRUxEKHJ1bkNvbmRpdGlvbik7CiAJV1JJVEVfT0lEX0ZJRUxEKHN0 YXJ0SW5SYW5nZUZ1bmMpOwogCVdSSVRFX09JRF9GSUVMRChlbmRJblJhbmdlRnVuYyk7CiAJV1JJ VEVfT0lEX0ZJRUxEKGluUmFuZ2VDb2xsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVz L3JlYWRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKaW5kZXggNDhmNzIx NmM5ZS4uM2QxNTBjYjI1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKQEAgLTM4NCw2ICszODQsNyBA QCBfcmVhZFdpbmRvd0NsYXVzZSh2b2lkKQogCVJFQURfSU5UX0ZJRUxEKGZyYW1lT3B0aW9ucyk7 CiAJUkVBRF9OT0RFX0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlSRUFEX05PREVfRklFTEQoZW5kT2Zm c2V0KTsKKwlSRUFEX05PREVfRklFTEQocnVuQ29uZGl0aW9uKTsKIAlSRUFEX09JRF9GSUVMRChz dGFydEluUmFuZ2VGdW5jKTsKIAlSRUFEX09JRF9GSUVMRChlbmRJblJhbmdlRnVuYyk7CiAJUkVB RF9PSURfRklFTEQoaW5SYW5nZUNvbGwpOwpAQCAtMjU3NiwxMSArMjU3NywxNCBAQCBfcmVhZFdp bmRvd0FnZyh2b2lkKQogCVJFQURfSU5UX0ZJRUxEKGZyYW1lT3B0aW9ucyk7CiAJUkVBRF9OT0RF X0ZJRUxEKHN0YXJ0T2Zmc2V0KTsKIAlSRUFEX05PREVfRklFTEQoZW5kT2Zmc2V0KTsKKwlSRUFE X05PREVfRklFTEQocnVuQ29uZGl0aW9uKTsKKwlSRUFEX05PREVfRklFTEQocnVuQ29uZGl0aW9u T3JpZyk7CiAJUkVBRF9PSURfRklFTEQoc3RhcnRJblJhbmdlRnVuYyk7CiAJUkVBRF9PSURfRklF TEQoZW5kSW5SYW5nZUZ1bmMpOwogCVJFQURfT0lEX0ZJRUxEKGluUmFuZ2VDb2xsKTsKIAlSRUFE X0JPT0xfRklFTEQoaW5SYW5nZUFzYyk7CiAJUkVBRF9CT09MX0ZJRUxEKGluUmFuZ2VOdWxsc0Zp cnN0KTsKKwlSRUFEX0JPT0xfRklFTEQodG9wV2luZG93KTsKIAogCVJFQURfRE9ORSgpOwogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggMTY5YjFkNTNmYy4uOTFmY2Iy MTE0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0yNyw2ICsyNyw3 IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgi CiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvc3VwcG9ydG5v ZGVzLmgiCiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAjaW5jbHVkZSAibm9kZXMvcHJpbnQuaCIK ICNlbmRpZgpAQCAtMjE1Nyw2ICsyMTU4LDI3NSBAQCBoYXNfbXVsdGlwbGVfYmFzZXJlbHMoUGxh bm5lckluZm8gKnJvb3QpCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogZmluZF93aW5kb3df cnVuX2NvbmRpdGlvbnMKKyAqCQlEZXRlcm1pbmUgaWYgJ3dmdW5jJyBpcyByZWFsbHkgYSBXaW5k b3dGdW5jIGFuZCBjYWxsIGl0cyBwcm9zdXBwb3J0CisgKgkJZnVuY3Rpb24gdG8gZGV0ZXJtaW5l IHRoZSBmdW5jdGlvbidzIG1vbm90b25pYyBwcm9wZXJ0aWVzLiAgV2UgdGhlbgorICoJCXNlZSBp ZiAnb3BleHByJyBjYW4gYmUgdXNlZCB0byBzaG9ydC1jaXJjdWl0IGV4ZWN1dGlvbi4KKyAqCisg KiBGb3IgZXhhbXBsZSByb3dfbnVtYmVyKCkgb3ZlciAob3JkZXIgYnkgLi4uKSBhbHdheXMgcHJv ZHVjZXMgYSB2YWx1ZSBvbmUKKyAqIGhpZ2hlciB0aGFuIHRoZSBwcmV2aW91cy4gIElmIHNvbWVv bmUgaGFzIGEgd2luZG93IGZ1bmN0aW9uIHN1Y2ggYXMgdGhhdAorICogaW4gYSBzdWJxdWVyeSBh bmQganVzdCB3YW50cywgc2F5IGFsbCByb3dzIHdpdGggYSByb3cgbnVtYmVyIGxlc3MgdGhhbiBv cgorICogZXF1YWwgdG8gMTAsIHRoZW4gd2UgbWF5IGFzIHdlbGwgc3RvcCBwcm9jZXNzaW5nIHRo ZSB3aW5kb3dhZ2cgb25jZSB0aGUgcm93CisgKiBudW1iZXIgcmVhY2hlcyAxMS4gIEhlcmUgd2Ug Y2hlY2sgaWYgJ29wZXhwcicgbWlnaHQgaGVscCB1cyB0byBzdG9wIGRvaW5nCisgKiBuZWVkbGVz cyBleHRyYSBwcm9jZXNzaW5nIGluIFdpbmRvd0FnZyBub2Rlcy4KKyAqCisgKiAnKmtlZXBfb3Jp Z2luYWwnIGlzIHNldCB0byB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGFsc28gdXNlICdvcGV4 cHInIGZvcgorICogaXRzIG9yaWdpbmFsIHB1cnBvc2UuICBUaGlzIGlzIHNldCB0byBmYWxzZSBp ZiB0aGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdAorICogdGhlIHJ1biBjb25kaXRpb24gd2lsbCBo YW5kbGUgYWxsIG9mIHRoZSByZXF1aXJlZCBmaWx0ZXJpbmcuCisgKgorICogUmV0dXJucyB0cnVl IGlmICdvcGV4cHInIHdhcyBmb3VuZCB0byBiZSB1c2VmdWwgYW5kIHdhcyBhZGRlZCB0byB0aGUK KyAqIFdpbmRvd0NsYXVzZXMgcnVuQ29uZGl0aW9uLiBXZSBhbHNvIHNldCAqa2VlcF9vcmlnaW5h bCBhY2NvcmRpbmdseS4KKyAqIElmIHRoZSAnb3BleHByJyBjYW5ub3QgYmUgdXNlZCB0aGVuIHdl IHNldCAqa2VlcF9vcmlnaW5hbCB0byB0cnVlIGFuZAorICogcmV0dXJuIGZhbHNlLgorICovCitz dGF0aWMgYm9vbAorZmluZF93aW5kb3dfcnVuX2NvbmRpdGlvbnMoUXVlcnkgKnN1YnF1ZXJ5LCBS YW5nZVRibEVudHJ5ICpydGUsIEluZGV4IHJ0aSwKKwkJCQkJCSAgIEF0dHJOdW1iZXIgYXR0bm8s IFdpbmRvd0Z1bmMgKndmdW5jLCBPcEV4cHIgKm9wZXhwciwKKwkJCQkJCSAgIGJvb2wgd2Z1bmNf bGVmdCwgYm9vbCAqa2VlcF9vcmlnaW5hbCkKK3sKKwlPaWQJCQlwcm9zdXBwb3J0OworCUV4cHIJ ICAgKm90aGVyZXhwcjsKKwlTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljIHJlcTsKKwlTdXBw b3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljICpyZXM7CisJV2luZG93Q2xhdXNlICp3Y2xhdXNlOwor CUxpc3QJICAgKm9waW5mb3M7CisJT3BFeHByCSAgICpydW5vcGV4cHI7CisJT2lkCQkJcnVub3Bl cmF0b3I7CisJTGlzdENlbGwgICAqbGM7CisKKwkqa2VlcF9vcmlnaW5hbCA9IHRydWU7CisKKwl3 aGlsZSAoSXNBKHdmdW5jLCBSZWxhYmVsVHlwZSkpCisJCXdmdW5jID0gKFdpbmRvd0Z1bmMgKikg KChSZWxhYmVsVHlwZSAqKSB3ZnVuYyktPmFyZzsKKworCS8qIHdlIGNhbiBvbmx5IHdvcmsgd2l0 aCB3aW5kb3cgZnVuY3Rpb25zICovCisJaWYgKCFJc0Eod2Z1bmMsIFdpbmRvd0Z1bmMpKQorCQly ZXR1cm4gZmFsc2U7CisKKwlwcm9zdXBwb3J0ID0gZ2V0X2Z1bmNfc3VwcG9ydCh3ZnVuYy0+d2lu Zm5vaWQpOworCisJLyogQ2hlY2sgaWYgdGhlcmUncyBhIHN1cHBvcnQgZnVuY3Rpb24gZm9yICd3 ZnVuYycgKi8KKwlpZiAoIU9pZElzVmFsaWQocHJvc3VwcG9ydCkpCisJCXJldHVybiBmYWxzZTsK KworCS8qIGdldCB0aGUgRXhwciBmcm9tIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBPcEV4cHIgKi8K KwlpZiAod2Z1bmNfbGVmdCkKKwkJb3RoZXJleHByID0gbHNlY29uZChvcGV4cHItPmFyZ3MpOwor CWVsc2UKKwkJb3RoZXJleHByID0gbGluaXRpYWwob3BleHByLT5hcmdzKTsKKworCS8qCisJICog VGhlIHZhbHVlIGJlaW5nIGNvbXBhcmVkIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgdGhlIGV2YWx1 YXRpb24gb2YgdGhlCisJICogd2luZG93IHBhcnRpdGlvbi4KKwkgKi8KKwlpZiAoIWlzX3BzZXVk b19jb25zdGFudF9jbGF1c2UoKE5vZGUgKikgb3RoZXJleHByKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJLyogZmluZCB0aGUgd2luZG93IGNsYXVzZSBiZWxvbmdpbmcgdG8gdGhlIHdpbmRvdyBmdW5j dGlvbiAqLworCXdjbGF1c2UgPSAoV2luZG93Q2xhdXNlICopIGxpc3RfbnRoKHN1YnF1ZXJ5LT53 aW5kb3dDbGF1c2UsCisJCQkJCQkJCQkJd2Z1bmMtPndpbnJlZiAtIDEpOworCisJcmVxLnR5cGUg PSBUX1N1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWM7CisJcmVxLndpbmRvd19mdW5jID0gd2Z1 bmM7CisJcmVxLndpbmRvd19jbGF1c2UgPSB3Y2xhdXNlOworCisJLyogY2FsbCB0aGUgc3VwcG9y dCBmdW5jdGlvbiAqLworCXJlcyA9IChTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljICopCisJ CURhdHVtR2V0UG9pbnRlcihPaWRGdW5jdGlvbkNhbGwxKHByb3N1cHBvcnQsCisJCQkJCQkJCQkJ IFBvaW50ZXJHZXREYXR1bSgmcmVxKSkpOworCisJLyoKKwkgKiBOb3RoaW5nIHRvIGRvIGlmIHRo ZSBmdW5jdGlvbiBpcyBuZWl0aGVyIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBub3IKKwkgKiBt b25vdG9uaWNhbGx5IGRlY3JlYXNpbmcuCisJICovCisJaWYgKHJlcyA9PSBOVUxMIHx8IHJlcy0+ bW9ub3RvbmljID09IE1PTk9UT05JQ0ZVTkNfTk9ORSkKKwkJcmV0dXJuIGZhbHNlOworCisJcnVu b3BleHByID0gTlVMTDsKKwlydW5vcGVyYXRvciA9IEludmFsaWRPaWQ7CisJb3BpbmZvcyA9IGdl dF9vcF9idHJlZV9pbnRlcnByZXRhdGlvbihvcGV4cHItPm9wbm8pOworCisJZm9yZWFjaChsYywg b3BpbmZvcykKKwl7CisJCU9wQnRyZWVJbnRlcnByZXRhdGlvbiAqb3BpbmZvID0gKE9wQnRyZWVJ bnRlcnByZXRhdGlvbiAqKSBsZmlyc3QobGMpOworCQlpbnQJCQlzdHJhdGVneSA9IG9waW5mby0+ c3RyYXRlZ3k7CisKKwkJLyogaGFuZGxlIDwgLyA8PSAqLworCQlpZiAoc3RyYXRlZ3kgPT0gQlRM ZXNzU3RyYXRlZ3lOdW1iZXIgfHwKKwkJCXN0cmF0ZWd5ID09IEJUTGVzc0VxdWFsU3RyYXRlZ3lO dW1iZXIpCisJCXsKKwkJCS8qCisJCQkgKiA8IC8gPD0gaXMgc3VwcG9ydGVkIGZvciBtb25vdG9u aWNhbGx5IGluY3JlYXNpbmcgZnVuY3Rpb25zIGluCisJCQkgKiB0aGUgZm9ybSA8d2Z1bmM+IG9w IDxwc2V1ZG9jb25zdD4gYW5kIDxwc2V1ZG9jb25zdD4gb3AgPHdmdW5jPgorCQkJICogZm9yIG1v bm90b25pY2FsbHkgZGVjcmVhc2luZyBmdW5jdGlvbnMuCisJCQkgKi8KKwkJCWlmICgod2Z1bmNf bGVmdCAmJiAocmVzLT5tb25vdG9uaWMgJiBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkcpKSB8fAor CQkJCSghd2Z1bmNfbGVmdCAmJiAocmVzLT5tb25vdG9uaWMgJiBNT05PVE9OSUNGVU5DX0RFQ1JF QVNJTkcpKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG11c3Qga2VlcCB0aGUgb3JpZ2luYWwg cXVhbCBpbiBwbGFjZSBpZiB0aGVyZSBpcyBhCisJCQkJICogUEFSVElUSU9OIEJZIGNsYXVzZSBh cyB0aGUgdG9wLWxldmVsIFdpbmRvd0FnZyByZW1haW5zIGluCisJCQkJICogcGFzcy10aHJvdWdo IG1vZGUgYW5kIGRvZXMgbm90aGluZyB0byBmaWx0ZXIgb3V0IHVud2FudGVkCisJCQkJICogdHVw bGVzLgorCQkJCSAqLworCQkJCSprZWVwX29yaWdpbmFsID0gZmFsc2U7CisJCQkJcnVub3BleHBy ID0gb3BleHByOworCQkJCXJ1bm9wZXJhdG9yID0gb3BleHByLT5vcG5vOworCQkJfQorCQkJYnJl YWs7CisJCX0KKwkJLyogaGFuZGxlID4gLyA+PSAqLworCQllbHNlIGlmIChzdHJhdGVneSA9PSBC VEdyZWF0ZXJTdHJhdGVneU51bWJlciB8fAorCQkJCSBzdHJhdGVneSA9PSBCVEdyZWF0ZXJFcXVh bFN0cmF0ZWd5TnVtYmVyKQorCQl7CisJCQkvKgorCQkJICogPiAvID49IGlzIHN1cHBvcnRlZCBm b3IgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIGZ1bmN0aW9ucyBpbgorCQkJICogdGhlIGZvcm0g PHdmdW5jPiBvcCA8cHNldWRvY29uc3Q+IGFuZCA8cHNldWRvY29uc3Q+IG9wIDx3ZnVuYz4KKwkJ CSAqIGZvciBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgZnVuY3Rpb25zLgorCQkJICovCisJCQlp ZiAoKHdmdW5jX2xlZnQgJiYgKHJlcy0+bW9ub3RvbmljICYgTU9OT1RPTklDRlVOQ19ERUNSRUFT SU5HKSkgfHwKKwkJCQkoIXdmdW5jX2xlZnQgJiYgKHJlcy0+bW9ub3RvbmljICYgTU9OT1RPTklD RlVOQ19JTkNSRUFTSU5HKSkpCisJCQl7CisJCQkJKmtlZXBfb3JpZ2luYWwgPSBmYWxzZTsKKwkJ CQlydW5vcGV4cHIgPSBvcGV4cHI7CisJCQkJcnVub3BlcmF0b3IgPSBvcGV4cHItPm9wbm87CisJ CQl9CisJCQlicmVhazsKKwkJfQorCQkvKiBoYW5kbGUgPSAqLworCQllbHNlIGlmIChzdHJhdGVn eSA9PSBCVEVxdWFsU3RyYXRlZ3lOdW1iZXIpCisJCXsKKwkJCWludDE2CQluZXdzdHJhdGVneTsK KworCQkJLyoKKwkJCSAqIFdoZW4gYm90aCBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgYW5kIGRl Y3JlYXNpbmcgdGhlbiB0aGUKKwkJCSAqIHJldHVybiB2YWx1ZSBvZiB0aGUgd2luZG93IGZ1bmN0 aW9uIHdpbGwgYmUgdGhlIHNhbWUgZWFjaCB0aW1lLgorCQkJICogV2UgY2FuIHNpbXBseSB1c2Ug J29wZXhwcicgYXMgdGhlIHJ1biBjb25kaXRpb24gd2l0aG91dAorCQkJICogbW9kaWZ5aW5nIGl0 LgorCQkJICovCisJCQlpZiAoKHJlcy0+bW9ub3RvbmljICYgTU9OT1RPTklDRlVOQ19CT1RIKSA9 PSBNT05PVE9OSUNGVU5DX0JPVEgpCisJCQl7CisJCQkJKmtlZXBfb3JpZ2luYWwgPSBmYWxzZTsK KwkJCQlydW5vcGV4cHIgPSBvcGV4cHI7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkg KiBXaGVuIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB3ZSBtYWtlIGEgcXVhbCB3aXRoIDx3ZnVu Yz4gPD0KKwkJCSAqIDx2YWx1ZT4gb3IgPHZhbHVlPiA+PSA8d2Z1bmM+IGluIG9yZGVyIHRvIGZp bHRlciBvdXQgdmFsdWVzCisJCQkgKiB3aGljaCBhcmUgYWJvdmUgdGhlIHZhbHVlIGluIHRoZSBl cXVhbGl0eSBjb25kaXRpb24uICBGb3IKKwkJCSAqIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBm dW5jdGlvbnMgd2Ugd2FudCB0byBmaWx0ZXIgdmFsdWVzCisJCQkgKiBiZWxvdyB0aGUgdmFsdWUg aW4gdGhlIGVxdWFsaXR5IGNvbmRpdGlvbi4KKwkJCSAqLworCQkJaWYgKHJlcy0+bW9ub3Rvbmlj ICYgTU9OT1RPTklDRlVOQ19JTkNSRUFTSU5HKQorCQkJCW5ld3N0cmF0ZWd5ID0gd2Z1bmNfbGVm dCA/IEJUTGVzc0VxdWFsU3RyYXRlZ3lOdW1iZXIgOiBCVEdyZWF0ZXJFcXVhbFN0cmF0ZWd5TnVt YmVyOworCQkJZWxzZQorCQkJCW5ld3N0cmF0ZWd5ID0gd2Z1bmNfbGVmdCA/IEJUR3JlYXRlckVx dWFsU3RyYXRlZ3lOdW1iZXIgOiBCVExlc3NFcXVhbFN0cmF0ZWd5TnVtYmVyOworCisJCQkvKiBX ZSBtdXN0IGtlZXAgdGhlIG9yaWdpbmFsIGVxdWFsaXR5IHF1YWwgKi8KKwkJCSprZWVwX29yaWdp bmFsID0gdHJ1ZTsKKwkJCXJ1bm9wZXhwciA9IG9wZXhwcjsKKworCQkJLyogZGV0ZXJtaW5lIHRo ZSBvcGVyYXRvciB0byB1c2UgZm9yIHRoZSBydW5Db25kaXRpb24gcXVhbCAqLworCQkJcnVub3Bl cmF0b3IgPSBnZXRfb3BmYW1pbHlfbWVtYmVyKG9waW5mby0+b3BmYW1pbHlfaWQsCisJCQkJCQkJ CQkJCSAgb3BpbmZvLT5vcGxlZnR0eXBlLAorCQkJCQkJCQkJCQkgIG9waW5mby0+b3ByaWdodHR5 cGUsCisJCQkJCQkJCQkJCSAgbmV3c3RyYXRlZ3kpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlp ZiAocnVub3BleHByICE9IE5VTEwpCisJeworCQlFeHByCSAgICpuZXdleHByOworCisJCS8qCisJ CSAqIEJ1aWxkIHRoZSBxdWFsIHJlcXVpcmVkIGZvciB0aGUgcnVuIGNvbmRpdGlvbiBrZWVwaW5n IHRoZQorCQkgKiBXaW5kb3dGdW5jIG9uIHRoZSBzYW1lIHNpZGUgYXMgaXQgd2FzIG9yaWdpbmFs bHkuCisJCSAqLworCQlpZiAod2Z1bmNfbGVmdCkKKwkJCW5ld2V4cHIgPSBtYWtlX29wY2xhdXNl KHJ1bm9wZXJhdG9yLAorCQkJCQkJCQkJcnVub3BleHByLT5vcHJlc3VsdHR5cGUsCisJCQkJCQkJ CQlydW5vcGV4cHItPm9wcmV0c2V0LCAoRXhwciAqKSB3ZnVuYywKKwkJCQkJCQkJCW90aGVyZXhw ciwgcnVub3BleHByLT5vcGNvbGxpZCwKKwkJCQkJCQkJCXJ1bm9wZXhwci0+aW5wdXRjb2xsaWQp OworCQllbHNlCisJCQluZXdleHByID0gbWFrZV9vcGNsYXVzZShydW5vcGVyYXRvciwKKwkJCQkJ CQkJCXJ1bm9wZXhwci0+b3ByZXN1bHR0eXBlLAorCQkJCQkJCQkJcnVub3BleHByLT5vcHJldHNl dCwKKwkJCQkJCQkJCW90aGVyZXhwciwgKEV4cHIgKikgd2Z1bmMsCisJCQkJCQkJCQlydW5vcGV4 cHItPm9wY29sbGlkLAorCQkJCQkJCQkJcnVub3BleHByLT5pbnB1dGNvbGxpZCk7CisKKwkJd2Ns YXVzZS0+cnVuQ29uZGl0aW9uID0gbGFwcGVuZCh3Y2xhdXNlLT5ydW5Db25kaXRpb24sIG5ld2V4 cHIpOworCisJCXJldHVybiB0cnVlOworCX0KKworCS8qIHVuc3VwcG9ydGVkIE9wRXhwciAqLwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIGNoZWNrX2FuZF9wdXNoX3dpbmRvd19xdWFscwor ICoJCUNoZWNrIGlmICdjbGF1c2UnIGlzIGEgcXVhbCB0aGF0IGNhbiBiZSBwdXNoZWQgaW50byBh IFdpbmRvd0Z1bmMncworICoJCVdpbmRvd0NsYXVzZSBhcyBhICdydW5Db25kaXRpb24nIHF1YWwu ICBUaGVzZSwgd2hlbiBwcmVzZW50LCBhbGxvdworICoJCXNvbWUgdW5uZWNlc3Nhcnkgd29yayB0 byBiZSBza2lwcGVkIGR1cmluZyBleGVjdXRpb24uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRo ZSBjYWxsZXIgc3RpbGwgbXVzdCBrZWVwIHRoZSBvcmlnaW5hbCBxdWFsIG9yIGZhbHNlIGlmCisg KiB0aGUgY2FsbGVyIGNhbiBzYWZlbHkgaWdub3JlIHRoZSBvcmlnaW5hbCBxdWFsIGJlY2F1c2Ug dGhlIFdpbmRvd0FnZyBub2RlCisgKiB3aWxsIHVzZSB0aGUgcnVuQ29uZGl0aW9uIHRvIHN0b3Ag cmV0dXJuaW5nIHR1cGxlcy4KKyAqLworc3RhdGljIGJvb2wKK2NoZWNrX2FuZF9wdXNoX3dpbmRv d19xdWFscyhRdWVyeSAqc3VicXVlcnksIFJhbmdlVGJsRW50cnkgKnJ0ZSwgSW5kZXggcnRpLAor CQkJCQkJCU5vZGUgKmNsYXVzZSkKK3sKKwlPcEV4cHIJICAgKm9wZXhwciA9IChPcEV4cHIgKikg Y2xhdXNlOworCWJvb2wJCWtlZXBfb3JpZ2luYWwgPSB0cnVlOworCVZhcgkJICAgKnZhcjE7CisJ VmFyCQkgICAqdmFyMjsKKworCS8qIFdlJ3JlIG9ubHkgYWJsZSB0byB1c2UgT3BFeHBycyB3aXRo IDIgb3BlcmFuZHMgKi8KKwlpZiAoIUlzQShvcGV4cHIsIE9wRXhwcikpCisJCXJldHVybiB0cnVl OworCisJaWYgKGxpc3RfbGVuZ3RoKG9wZXhwci0+YXJncykgIT0gMikKKwkJcmV0dXJuIHRydWU7 CisKKwkvKgorCSAqIENoZWNrIGZvciBwbGFpbiBWYXJzIHRoYXQgcmVmZXJlbmNlIHdpbmRvdyBm dW5jdGlvbnMgaW4gdGhlIHN1YnF1ZXJ5LgorCSAqIElmIHdlIGZpbmQgYW55LCB3ZSdsbCBhc2sg ZmluZF93aW5kb3dfcnVuX2NvbmRpdGlvbnMoKSBpZiAnb3BleHByJyBjYW4KKwkgKiBiZSB1c2Vk IGFzIGEgcnVuIGNvbmRpdGlvbi4KKwkgKi8KKworCS8qIENoZWNrIHRoZSBsZWZ0IHNpZGUgb2Yg dGhlIE9wRXhwciAqLworCXZhcjEgPSBsaW5pdGlhbChvcGV4cHItPmFyZ3MpOworCWlmIChJc0Eo dmFyMSwgVmFyKSAmJiB2YXIxLT52YXJhdHRubyA+IDApCisJeworCQlUYXJnZXRFbnRyeSAqdGxl ID0gbGlzdF9udGgoc3VicXVlcnktPnRhcmdldExpc3QsIHZhcjEtPnZhcmF0dG5vIC0gMSk7CisJ CVdpbmRvd0Z1bmMgKndmdW5jID0gKFdpbmRvd0Z1bmMgKikgdGxlLT5leHByOworCisJCWlmIChm aW5kX3dpbmRvd19ydW5fY29uZGl0aW9ucyhzdWJxdWVyeSwgcnRlLCBydGksIHRsZS0+cmVzbm8s IHdmdW5jLAorCQkJCQkJCQkJICAgb3BleHByLCB0cnVlLCAma2VlcF9vcmlnaW5hbCkpCisJCQly ZXR1cm4ga2VlcF9vcmlnaW5hbDsKKwl9CisKKwkvKiBhbmQgY2hlY2sgdGhlIHJpZ2h0IHNpZGUg Ki8KKwl2YXIyID0gbHNlY29uZChvcGV4cHItPmFyZ3MpOworCWlmIChJc0EodmFyMiwgVmFyKSAm JiB2YXIyLT52YXJhdHRubyA+IDApCisJeworCQlUYXJnZXRFbnRyeSAqdGxlID0gbGlzdF9udGgo c3VicXVlcnktPnRhcmdldExpc3QsIHZhcjItPnZhcmF0dG5vIC0gMSk7CisJCVdpbmRvd0Z1bmMg KndmdW5jID0gKFdpbmRvd0Z1bmMgKikgdGxlLT5leHByOworCisJCWlmIChmaW5kX3dpbmRvd19y dW5fY29uZGl0aW9ucyhzdWJxdWVyeSwgcnRlLCBydGksIHRsZS0+cmVzbm8sIHdmdW5jLAorCQkJ CQkJCQkJICAgb3BleHByLCBmYWxzZSwgJmtlZXBfb3JpZ2luYWwpKQorCQkJcmV0dXJuIGtlZXBf b3JpZ2luYWw7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIC8qCiAgKiBzZXRfc3VicXVlcnlf cGF0aGxpc3QKICAqCQlHZW5lcmF0ZSBTdWJxdWVyeVNjYW4gYWNjZXNzIHBhdGhzIGZvciBhIHN1 YnF1ZXJ5IFJURQpAQCAtMjI0NSwxOSArMjUxNSwzMSBAQCBzZXRfc3VicXVlcnlfcGF0aGxpc3Qo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJZm9yZWFjaChsLCByZWwtPmJh c2VyZXN0cmljdGluZm8pCiAJCXsKIAkJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVzdHJpY3RJ bmZvICopIGxmaXJzdChsKTsKKwkJCU5vZGUJICAgKmNsYXVzZSA9IChOb2RlICopIHJpbmZvLT5j bGF1c2U7CiAKIAkJCWlmICghcmluZm8tPnBzZXVkb2NvbnN0YW50ICYmCiAJCQkJcXVhbF9pc19w dXNoZG93bl9zYWZlKHN1YnF1ZXJ5LCBydGksIHJpbmZvLCAmc2FmZXR5SW5mbykpCiAJCQl7Ci0J CQkJTm9kZQkgICAqY2xhdXNlID0gKE5vZGUgKikgcmluZm8tPmNsYXVzZTsKLQogCQkJCS8qIFB1 c2ggaXQgZG93biAqLwogCQkJCXN1YnF1ZXJ5X3B1c2hfcXVhbChzdWJxdWVyeSwgcnRlLCBydGks IGNsYXVzZSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogS2VlcCBpdCBpbiB0aGUgdXBw ZXIgcXVlcnkgKi8KLQkJCQl1cHBlcnJlc3RyaWN0bGlzdCA9IGxhcHBlbmQodXBwZXJyZXN0cmlj dGxpc3QsIHJpbmZvKTsKKwkJCQkvKgorCQkJCSAqIFNpbmNlIHdlIGNhbid0IHB1c2ggdGhlIHF1 YWwgZG93biBpbnRvIHRoZSBzdWJxdWVyeSwgY2hlY2sKKwkJCQkgKiBpZiBpdCBoYXBwZW5zIHRv IHJlZmVyZW5jZSBhIHdpbmRvdyBmdW5jdGlvbi4gIElmIHNvIHRoZW4KKwkJCQkgKiBpdCBtaWdo dCBiZSB1c2VmdWwgdG8gdXNlIGZvciB0aGUgV2luZG93QWdnJ3MgcnVuQ29uZGl0aW9uLgorCQkJ CSAqLworCQkJCWlmICghc3VicXVlcnktPmhhc1dpbmRvd0Z1bmNzIHx8CisJCQkJCWNoZWNrX2Fu ZF9wdXNoX3dpbmRvd19xdWFscyhzdWJxdWVyeSwgcnRlLCBydGksIGNsYXVzZSkpCisJCQkJewor CQkJCQkvKgorCQkJCQkgKiBzdWJxdWVyeSBoYXMgbm8gd2luZG93IGZ1bmNzIG9yIHRoZSBjbGF1 c2UgaXMgbm90IGEKKwkJCQkJICogc3VpdGFibGUgd2luZG93IHJ1biBjb25kaXRpb24gcXVhbCBv ciBpdCBpcywgYnV0IHRoZQorCQkJCQkgKiBvcmlnaW5hbCBtdXN0IGFsc28gYmUga2VwdCBpbiB0 aGUgdXBwZXIgcXVlcnkuCisJCQkJCSAqLworCQkJCQl1cHBlcnJlc3RyaWN0bGlzdCA9IGxhcHBl bmQodXBwZXJyZXN0cmljdGxpc3QsIHJpbmZvKTsKKwkJCQl9CiAJCQl9CiAJCX0KIAkJcmVsLT5i YXNlcmVzdHJpY3RpbmZvID0gdXBwZXJyZXN0cmljdGxpc3Q7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggNTE1OTFiYjgxMi4uOTU0NzZhZGEwYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMjg4LDYgKzI4OCw3IEBAIHN0YXRp YyBXaW5kb3dBZ2cgKm1ha2Vfd2luZG93YWdnKExpc3QgKnRsaXN0LCBJbmRleCB3aW5yZWYsCiAJ CQkJCQkJCSBpbnQgZnJhbWVPcHRpb25zLCBOb2RlICpzdGFydE9mZnNldCwgTm9kZSAqZW5kT2Zm c2V0LAogCQkJCQkJCQkgT2lkIHN0YXJ0SW5SYW5nZUZ1bmMsIE9pZCBlbmRJblJhbmdlRnVuYywK IAkJCQkJCQkJIE9pZCBpblJhbmdlQ29sbCwgYm9vbCBpblJhbmdlQXNjLCBib29sIGluUmFuZ2VO dWxsc0ZpcnN0LAorCQkJCQkJCQkgTGlzdCAqcnVuQ29uZGl0aW9uLCBMaXN0ICpxdWFsLCBib29s IHRvcFdpbmRvdywKIAkJCQkJCQkJIFBsYW4gKmxlZnR0cmVlKTsKIHN0YXRpYyBHcm91cCAqbWFr ZV9ncm91cChMaXN0ICp0bGlzdCwgTGlzdCAqcXVhbCwgaW50IG51bUdyb3VwQ29scywKIAkJCQkJ CSBBdHRyTnVtYmVyICpncnBDb2xJZHgsIE9pZCAqZ3JwT3BlcmF0b3JzLCBPaWQgKmdycENvbGxh dGlvbnMsCkBAIC0yNjcyLDYgKzI2NzMsOSBAQCBjcmVhdGVfd2luZG93YWdnX3BsYW4oUGxhbm5l ckluZm8gKnJvb3QsIFdpbmRvd0FnZ1BhdGggKmJlc3RfcGF0aCkKIAkJCQkJCSAgd2MtPmluUmFu Z2VDb2xsLAogCQkJCQkJICB3Yy0+aW5SYW5nZUFzYywKIAkJCQkJCSAgd2MtPmluUmFuZ2VOdWxs c0ZpcnN0LAorCQkJCQkJICB3Yy0+cnVuQ29uZGl0aW9uLAorCQkJCQkJICBiZXN0X3BhdGgtPnF1 YWwsCisJCQkJCQkgIGJlc3RfcGF0aC0+dG9wd2luZG93LAogCQkJCQkJICBzdWJwbGFuKTsKIAog CWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnBsYW4tPnBsYW4sIChQYXRoICopIGJlc3RfcGF0aCk7 CkBAIC02NTU4LDcgKzY1NjIsNyBAQCBtYWtlX3dpbmRvd2FnZyhMaXN0ICp0bGlzdCwgSW5kZXgg d2lucmVmLAogCQkJICAgaW50IGZyYW1lT3B0aW9ucywgTm9kZSAqc3RhcnRPZmZzZXQsIE5vZGUg KmVuZE9mZnNldCwKIAkJCSAgIE9pZCBzdGFydEluUmFuZ2VGdW5jLCBPaWQgZW5kSW5SYW5nZUZ1 bmMsCiAJCQkgICBPaWQgaW5SYW5nZUNvbGwsIGJvb2wgaW5SYW5nZUFzYywgYm9vbCBpblJhbmdl TnVsbHNGaXJzdCwKLQkJCSAgIFBsYW4gKmxlZnR0cmVlKQorCQkJICAgTGlzdCAqcnVuQ29uZGl0 aW9uLCBMaXN0ICpxdWFsLCBib29sIHRvcFdpbmRvdywgUGxhbiAqbGVmdHRyZWUpCiB7CiAJV2lu ZG93QWdnICAqbm9kZSA9IG1ha2VOb2RlKFdpbmRvd0FnZyk7CiAJUGxhbgkgICAqcGxhbiA9ICZu b2RlLT5wbGFuOwpAQCAtNjU3NSwxNyArNjU3OSwyMCBAQCBtYWtlX3dpbmRvd2FnZyhMaXN0ICp0 bGlzdCwgSW5kZXggd2lucmVmLAogCW5vZGUtPmZyYW1lT3B0aW9ucyA9IGZyYW1lT3B0aW9uczsK IAlub2RlLT5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0OwogCW5vZGUtPmVuZE9mZnNldCA9IGVu ZE9mZnNldDsKKwlub2RlLT5ydW5Db25kaXRpb24gPSBydW5Db25kaXRpb247CisJLyogYSBkdXBs aWNhdGUgb2YgdGhlIGFib3ZlIGZvciBFWFBMQUlOICovCisJbm9kZS0+cnVuQ29uZGl0aW9uT3Jp ZyA9IHJ1bkNvbmRpdGlvbjsKIAlub2RlLT5zdGFydEluUmFuZ2VGdW5jID0gc3RhcnRJblJhbmdl RnVuYzsKIAlub2RlLT5lbmRJblJhbmdlRnVuYyA9IGVuZEluUmFuZ2VGdW5jOwogCW5vZGUtPmlu UmFuZ2VDb2xsID0gaW5SYW5nZUNvbGw7CiAJbm9kZS0+aW5SYW5nZUFzYyA9IGluUmFuZ2VBc2M7 CiAJbm9kZS0+aW5SYW5nZU51bGxzRmlyc3QgPSBpblJhbmdlTnVsbHNGaXJzdDsKKwlub2RlLT50 b3BXaW5kb3cgPSB0b3BXaW5kb3c7CiAKIAlwbGFuLT50YXJnZXRsaXN0ID0gdGxpc3Q7CiAJcGxh bi0+bGVmdHRyZWUgPSBsZWZ0dHJlZTsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwotCS8qIFdp bmRvd0FnZyBub2RlcyBuZXZlciBoYXZlIGEgcXVhbCBjbGF1c2UgKi8KLQlwbGFuLT5xdWFsID0g TklMOworCXBsYW4tPnF1YWwgPSBxdWFsOwogCiAJcmV0dXJuIG5vZGU7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggYjI1NjljNWQwYy4uYjA5MGIwODdlOSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDE5MCw2ICs0MTkwLDcgQEAgY3JlYXRl X29uZV93aW5kb3dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIHsKIAlQYXRoVGFyZ2V0ICp3aW5k b3dfdGFyZ2V0OwogCUxpc3RDZWxsICAgKmw7CisJTGlzdAkgICAqdG9wcXVhbCA9IE5JTDsKIAog CS8qCiAJICogU2luY2UgZWFjaCB3aW5kb3cgY2xhdXNlIGNvdWxkIHJlcXVpcmUgYSBkaWZmZXJl bnQgc29ydCBvcmRlciwgd2Ugc3RhY2sKQEAgLTQyMTQsNiArNDIxNSw3IEBAIGNyZWF0ZV9vbmVf d2luZG93X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCUxpc3QJICAgKndpbmRvd19wYXRoa2V5 czsKIAkJaW50CQkJcHJlc29ydGVkX2tleXM7CiAJCWJvb2wJCWlzX3NvcnRlZDsKKwkJYm9vbAkJ dG9wd2luZG93OwogCiAJCXdpbmRvd19wYXRoa2V5cyA9IG1ha2VfcGF0aGtleXNfZm9yX3dpbmRv dyhyb290LAogCQkJCQkJCQkJCQkJICAgd2MsCkBAIC00Mjc3LDEwICs0Mjc5LDIxIEBAIGNyZWF0 ZV9vbmVfd2luZG93X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQl3aW5kb3dfdGFyZ2V0ID0g b3V0cHV0X3RhcmdldDsKIAkJfQogCisJCS8qIG1hcmsgdGhlIGZpbmFsIGl0ZW0gaW4gdGhlIGxp c3QgYXMgdGhlIHRvcC1sZXZlbCB3aW5kb3cgKi8KKwkJdG9wd2luZG93ID0gZm9yZWFjaF9jdXJy ZW50X2luZGV4KGwpID09IGxpc3RfbGVuZ3RoKGFjdGl2ZVdpbmRvd3MpIC0gMTsKKworCQkvKgor CQkgKiBBY2N1bXVsYXRlIGFsbCBvZiB0aGUgcnVuQ29uZGl0aW9ucyBmcm9tIGVhY2ggaW50ZXJt ZWRpYXRlCisJCSAqIFdpbmRvd0NsYXVzZS4gIFRoZSB0b3AtbGV2ZWwgV2luZG93QWdnIG11c3Qg cGFzcyB0aGVzZSBhcyBhIHF1YWwgc28KKwkJICogdGhhdCBpdCBmaWx0ZXJzIG91dCB1bndhbnRl ZCB0dXBsZXMgY29ycmVjdGx5LgorCQkgKi8KKwkJaWYgKCF0b3B3aW5kb3cpCisJCQl0b3BxdWFs ID0gbGlzdF9jb25jYXQodG9wcXVhbCwgd2MtPnJ1bkNvbmRpdGlvbik7CisKIAkJcGF0aCA9IChQ YXRoICopCiAJCQljcmVhdGVfd2luZG93YWdnX3BhdGgocm9vdCwgd2luZG93X3JlbCwgcGF0aCwg d2luZG93X3RhcmdldCwKIAkJCQkJCQkJICB3Zmxpc3RzLT53aW5kb3dGdW5jc1t3Yy0+d2lucmVm XSwKLQkJCQkJCQkJICB3Yyk7CisJCQkJCQkJCSAgd2MsIHRvcHdpbmRvdyA/IHRvcHF1YWwgOiBO SUwsIHRvcHdpbmRvdyk7CiAJfQogCiAJYWRkX3BhdGgod2luZG93X3JlbCwgcGF0aCk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXggNzUxOTcyMzA4MS4uNmVhMzUwNTY0NiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtNzEsNiArNzEsMTMgQEAgdHlw ZWRlZiBzdHJ1Y3QKIAlkb3VibGUJCW51bV9leGVjOwogfSBmaXhfdXBwZXJfZXhwcl9jb250ZXh0 OwogCit0eXBlZGVmIHN0cnVjdAoreworCVBsYW5uZXJJbmZvICpyb290OworCWluZGV4ZWRfdGxp c3QgKnN1YnBsYW5faXRsaXN0OworCWludAkJCW5ld3Zhcm5vOworfSBmaXhfd2luZG93YWdnX2Nv bmRfY29udGV4dDsKKwogLyoKICAqIFNlbGVjdGluZyB0aGUgYmVzdCBhbHRlcm5hdGl2ZSBpbiBh biBBbHRlcm5hdGl2ZVN1YlBsYW4gZXhwcmVzc2lvbiByZXF1aXJlcwogICogZXN0aW1hdGluZyBo b3cgbWFueSB0aW1lcyB0aGF0IGV4cHJlc3Npb24gd2lsbCBiZSBldmFsdWF0ZWQuICBGb3IgYW4K QEAgLTE3MSw2ICsxNzgsOSBAQCBzdGF0aWMgTGlzdCAqc2V0X3JldHVybmluZ19jbGF1c2VfcmVm ZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJIFBsYW4gKnRvcHBsYW4sCiAJ CQkJCQkJCQkJCSBJbmRleCByZXN1bHRSZWxhdGlvbiwKIAkJCQkJCQkJCQkJIGludCBydG9mZnNl dCk7CitzdGF0aWMgTGlzdCAqc2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQ bGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKKwkJ CQkJCQkJCQkJCSAgIFBsYW4gKnBsYW4pOwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAt ODg1LDYgKzg5NSwxOCBAQCBzZXRfcGxhbl9yZWZzKFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpw bGFuLCBpbnQgcnRvZmZzZXQpCiAJCQl7CiAJCQkJV2luZG93QWdnICAqd3BsYW4gPSAoV2luZG93 QWdnICopIHBsYW47CiAKKwkJCQkvKgorCQkJCSAqIEFkanVzdCB0aGUgV2luZG93QWdnJ3MgcnVu IGNvbmRpdGlvbnMgYnkgc3dhcHBpbmcgdGhlCisJCQkJICogV2luZG93RnVuY3MgcmVmZXJlbmNl cyBvdXQgdG8gaW5zdGVhZCByZWZlcmVuY2UgdGhlIFZhciBpbgorCQkJCSAqIHRoZSBzY2FuIHNs b3Qgc28gdGhhdCB3aGVuIHRoZSBleGVjdXRvciBldmFsdWF0ZXMgdGhlCisJCQkJICogcnVuQ29u ZGl0aW9uLCBpdCByZWNlaXZlcyB0aGUgV2luZG93RnVuYydzIHZhbHVlIGZyb20gdGhlCisJCQkJ ICogc2xvdCB0aGF0IHRoZSByZXN1bHQgaGFzIGp1c3QgYmVlbiBzdG9yZWQgaW50byByYXRoZXIg dGhhbgorCQkJCSAqIGV2YWx1YXRpbmcgdGhlIFdpbmRvd0Z1bmMgYWxsIG92ZXIgYWdhaW4uCisJ CQkJICovCisJCQkJd3BsYW4tPnJ1bkNvbmRpdGlvbiA9IHNldF93aW5kb3dhZ2dfcnVuY29uZGl0 aW9uX3JlZmVyZW5jZXMocm9vdCwKKwkJCQkJCQkJCQkJCQkJCQkJCQl3cGxhbi0+cnVuQ29uZGl0 aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJCShQbGFuICopIHdwbGFuKTsKKwogCQkJCXNldF91cHBl cl9yZWZlcmVuY2VzKHJvb3QsIHBsYW4sIHJ0b2Zmc2V0KTsKIAogCQkJCS8qCkBAIC04OTYsNiAr OTE4LDE0IEBAIHNldF9wbGFuX3JlZnMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4sIGlu dCBydG9mZnNldCkKIAkJCQkJZml4X3NjYW5fZXhwcihyb290LCB3cGxhbi0+c3RhcnRPZmZzZXQs IHJ0b2Zmc2V0LCAxKTsKIAkJCQl3cGxhbi0+ZW5kT2Zmc2V0ID0KIAkJCQkJZml4X3NjYW5fZXhw cihyb290LCB3cGxhbi0+ZW5kT2Zmc2V0LCBydG9mZnNldCwgMSk7CisJCQkJd3BsYW4tPnJ1bkNv bmRpdGlvbiA9IGZpeF9zY2FuX2xpc3Qocm9vdCwKKwkJCQkJCQkJCQkJCQl3cGxhbi0+cnVuQ29u ZGl0aW9uLAorCQkJCQkJCQkJCQkJCXJ0b2Zmc2V0LAorCQkJCQkJCQkJCQkJCU5VTV9FWEVDX1RM SVNUKHBsYW4pKTsKKwkJCQl3cGxhbi0+cnVuQ29uZGl0aW9uT3JpZyA9IGZpeF9zY2FuX2xpc3Qo cm9vdCwKKwkJCQkJCQkJCQkJCQkJd3BsYW4tPnJ1bkNvbmRpdGlvbk9yaWcsCisJCQkJCQkJCQkJ CQkJCXJ0b2Zmc2V0LAorCQkJCQkJCQkJCQkJCQlOVU1fRVhFQ19UTElTVChwbGFuKSk7CiAJCQl9 CiAJCQlicmVhazsKIAkJY2FzZSBUX1Jlc3VsdDoKQEAgLTMwNjQsNiArMzA5NCw3OCBAQCBzZXRf cmV0dXJuaW5nX2NsYXVzZV9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290LAogCXJldHVybiBy bGlzdDsKIH0KIAorLyoKKyAqIGZpeF93aW5kb3dhZ2dfY29uZGl0aW9uX2V4cHJfbXV0YXRvcgor ICoJCU11dGF0b3IgZnVuY3Rpb24gZm9yIHJlcGxhY2luZyBXaW5kb3dGdW5jcyB3aXRoIHRoZSBj b3JyZXNwb25kaW5nIFZhcgorICoJCWluIHRoZSB0YXJnZXRsaXN0IHdoaWNoIHJlZmVyZW5jZXMg dGhhdCBXaW5kb3dGdW5jLgorICovCitzdGF0aWMgTm9kZSAqCitmaXhfd2luZG93YWdnX2NvbmRp dGlvbl9leHByX211dGF0b3IoTm9kZSAqbm9kZSwKKwkJCQkJCQkJCSBmaXhfd2luZG93YWdnX2Nv bmRfY29udGV4dCAqY29udGV4dCkKK3sKKwlpZiAobm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVM TDsKKworCWlmIChJc0Eobm9kZSwgV2luZG93RnVuYykpCisJeworCQlWYXIJCSAgICpuZXd2YXI7 CisKKwkJbmV3dmFyID0gc2VhcmNoX2luZGV4ZWRfdGxpc3RfZm9yX25vbl92YXIoKEV4cHIgKikg bm9kZSwKKwkJCQkJCQkJCQkJCSAgY29udGV4dC0+c3VicGxhbl9pdGxpc3QsCisJCQkJCQkJCQkJ CQkgIGNvbnRleHQtPm5ld3Zhcm5vKTsKKwkJaWYgKG5ld3ZhcikKKwkJCXJldHVybiAoTm9kZSAq KSBuZXd2YXI7CisJCWVsb2coRVJST1IsICJXaW5kb3dGdW5jIG5vdCBmb3VuZCBpbiBzdWJwbGFu IHRhcmdldCBsaXN0cyIpOworCX0KKworCXJldHVybiBleHByZXNzaW9uX3RyZWVfbXV0YXRvcihu b2RlLAorCQkJCQkJCQkgICBmaXhfd2luZG93YWdnX2NvbmRpdGlvbl9leHByX211dGF0b3IsCisJ CQkJCQkJCSAgICh2b2lkICopIGNvbnRleHQpOworfQorCisvKgorICogZml4X3dpbmRvd2FnZ19j b25kaXRpb25fZXhwcgorICoJCUNvbnZlcnRzIHJlZmVyZW5jZXMgaW4gJ3J1bmNvbmRpdGlvbicg c28gdGhhdCBhbnkgV2luZG93RnVuYworICoJCXJlZmVyZW5jZXMgYXJlIHN3YXBwZWQgb3V0IGZv ciBhIFZhciB3aGljaCByZWZlcmVuY2VzIHRoZSBtYXRjaGluZworICoJCVdpbmRvd0Z1bmMgaW4g J3N1YnBsYW5faXRsaXN0Jy4KKyAqLworc3RhdGljIExpc3QgKgorZml4X3dpbmRvd2FnZ19jb25k aXRpb25fZXhwcihQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkgTGlzdCAqcnVuY29uZGl0aW9u LAorCQkJCQkJCSBpbmRleGVkX3RsaXN0ICpzdWJwbGFuX2l0bGlzdCkKK3sKKwlmaXhfd2luZG93 YWdnX2NvbmRfY29udGV4dCBjb250ZXh0OworCisJY29udGV4dC5yb290ID0gcm9vdDsKKwljb250 ZXh0LnN1YnBsYW5faXRsaXN0ID0gc3VicGxhbl9pdGxpc3Q7CisJY29udGV4dC5uZXd2YXJubyA9 IDA7CisKKwlyZXR1cm4gKExpc3QgKikgZml4X3dpbmRvd2FnZ19jb25kaXRpb25fZXhwcl9tdXRh dG9yKChOb2RlICopIHJ1bmNvbmRpdGlvbiwKKwkJCQkJCQkJCQkJCQkJICZjb250ZXh0KTsKK30K KworLyoKKyAqIHNldF93aW5kb3dhZ2dfcnVuY29uZGl0aW9uX3JlZmVyZW5jZXMKKyAqCQlDb252 ZXJ0cyByZWZlcmVuY2VzIGluICdydW5jb25kaXRpb24nIHNvIHRoYXQgYW55IFdpbmRvd0Z1bmMK KyAqCQlyZWZlcmVuY2VzIGFyZSBzd2FwcGVkIG91dCBmb3IgYSBWYXIgd2hpY2ggcmVmZXJlbmNl cyB0aGUgbWF0Y2hpbmcKKyAqCQlXaW5kb3dGdW5jIGluICdwbGFuJyB0YXJnZXRsaXN0LgorICov CitzdGF0aWMgTGlzdCAqCitzZXRfd2luZG93YWdnX3J1bmNvbmRpdGlvbl9yZWZlcmVuY2VzKFBs YW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJICBMaXN0ICpydW5jb25kaXRpb24sCisJCQkJCQkJ CQkgIFBsYW4gKnBsYW4pCit7CisJTGlzdAkgICAqbmV3bGlzdDsKKwlpbmRleGVkX3RsaXN0ICpp dGxpc3Q7CisKKwlpdGxpc3QgPSBidWlsZF90bGlzdF9pbmRleChwbGFuLT50YXJnZXRsaXN0KTsK KworCW5ld2xpc3QgPSBmaXhfd2luZG93YWdnX2NvbmRpdGlvbl9leHByKHJvb3QsIHJ1bmNvbmRp dGlvbiwgaXRsaXN0KTsKKworCXBmcmVlKGl0bGlzdCk7CisKKwlyZXR1cm4gbmV3bGlzdDsKK30K IAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCQkJUVVFUlkgREVQRU5ERU5DWSBNQU5BR0VN RU5UCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCAxNjcwZTU0NjQ0Li4x MWI4MDQwOTNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTMzODcs NiArMzM4Nyw4IEBAIGNyZWF0ZV9taW5tYXhhZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKICAq ICdzdWJwYXRoJyBpcyB0aGUgcGF0aCByZXByZXNlbnRpbmcgdGhlIHNvdXJjZSBvZiBkYXRhCiAg KiAndGFyZ2V0JyBpcyB0aGUgUGF0aFRhcmdldCB0byBiZSBjb21wdXRlZAogICogJ3dpbmRvd0Z1 bmNzJyBpcyBhIGxpc3Qgb2YgV2luZG93RnVuYyBzdHJ1Y3RzCisgKiAncXVhbCcgV2luZG93Q2xh dXNlLnJ1bmNvbmRpdGlvbnMgZnJvbSBsb3dlci1sZXZlbCBXaW5kb3dBZ2dQYXRocy4KKyAqCQlN dXN0IGFsd2F5cyBiZSBOSUwgd2hlbiB0b3B3aW5kb3cgPT0gZmFsc2UKICAqICd3aW5jbGF1c2Un IGlzIGEgV2luZG93Q2xhdXNlIHRoYXQgaXMgY29tbW9uIHRvIGFsbCB0aGUgV2luZG93RnVuY3MK ICAqCiAgKiBUaGUgaW5wdXQgbXVzdCBiZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBXaW5kb3dD bGF1c2UncyBQQVJUSVRJT04ga2V5cwpAQCAtMzM5OCwxMCArMzQwMCwxNSBAQCBjcmVhdGVfd2lu ZG93YWdnX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCSAgUGF0aCAqc3VicGF0aCwKIAkJ CQkJICBQYXRoVGFyZ2V0ICp0YXJnZXQsCiAJCQkJCSAgTGlzdCAqd2luZG93RnVuY3MsCi0JCQkJ CSAgV2luZG93Q2xhdXNlICp3aW5jbGF1c2UpCisJCQkJCSAgV2luZG93Q2xhdXNlICp3aW5jbGF1 c2UsCisJCQkJCSAgTGlzdCAqcXVhbCwKKwkJCQkJICBib29sIHRvcHdpbmRvdykKIHsKIAlXaW5k b3dBZ2dQYXRoICpwYXRobm9kZSA9IG1ha2VOb2RlKFdpbmRvd0FnZ1BhdGgpOwogCisJLyogcXVh bCBjYW4gb25seSBiZSBzZXQgZm9yIHRoZSB0b3B3aW5kb3cgKi8KKwlBc3NlcnQocXVhbCA9PSBO SUwgfHwgdG9wd2luZG93KTsKKwogCXBhdGhub2RlLT5wYXRoLnBhdGh0eXBlID0gVF9XaW5kb3dB Z2c7CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0 YXJnZXQgPSB0YXJnZXQ7CkBAIC0zNDE2LDYgKzM0MjMsOCBAQCBjcmVhdGVfd2luZG93YWdnX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAKIAlwYXRobm9kZS0+c3VicGF0aCA9IHN1YnBhdGg7CiAJ cGF0aG5vZGUtPndpbmNsYXVzZSA9IHdpbmNsYXVzZTsKKwlwYXRobm9kZS0+cXVhbCA9IHF1YWw7 CisJcGF0aG5vZGUtPnRvcHdpbmRvdyA9IHRvcHdpbmRvdzsKIAogCS8qCiAJICogRm9yIGNvc3Rp bmcgcHVycG9zZXMsIGFzc3VtZSB0aGF0IHRoZXJlIGFyZSBubyByZWR1bmRhbnQgcGFydGl0aW9u aW5nCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2ludDguYwppbmRleCA0YTg3MTE0YTRmLi45OGQ0MzIzNzU1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvaW50OC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9pbnQ4LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9k ZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIAogCiB0eXBlZGVmIHN0 cnVjdApAQCAtODE4LDYgKzgxOSw0OSBAQCBpbnQ4ZGVjX2FueShQR19GVU5DVElPTl9BUkdTKQog CXJldHVybiBpbnQ4ZGVjKGZjaW5mbyk7CiB9CiAKKy8qCisgKiBpbnQ4aW5jX3N1cHBvcnQKKyAq CQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZvciBpbnQ4aW5jKCkgYW5kIGludDhpbmNfYW55KCkKKyAq LworRGF0dW0KK2ludDhpbmNfc3VwcG9ydChQR19GVU5DVElPTl9BUkdTKQoreworCU5vZGUJICAg KnJhd3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCisJaWYgKElzQShyYXdy ZXEsIFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMpKQorCXsKKwkJU3VwcG9ydFJlcXVlc3RX RnVuY01vbm90b25pYyAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMgKikgcmF3 cmVxOworCQlNb25vdG9uaWNGdW5jdGlvbiBtb25vdG9uaWMgPSBNT05PVE9OSUNGVU5DX05PTkU7 CisJCWludAkJCWZyYW1lT3B0aW9ucyA9IHJlcS0+d2luZG93X2NsYXVzZS0+ZnJhbWVPcHRpb25z OworCisJCS8qIE5vIE9SREVSIEJZIGNsYXVzZSB0aGVuIGFsbCByb3dzIGFyZSBwZWVycyAqLwor CQlpZiAocmVxLT53aW5kb3dfY2xhdXNlLT5vcmRlckNsYXVzZSA9PSBOSUwpCisJCQltb25vdG9u aWMgPSBNT05PVE9OSUNGVU5DX0JPVEg7CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIE90aGVy d2lzZSB0YWtlIGludG8gYWNjb3VudCB0aGUgZnJhbWUgb3B0aW9ucy4gIFdoZW4gdGhlIGZyYW1l CisJCQkgKiBib3VuZCBpcyB0aGUgc3RhcnQgb2YgdGhlIHdpbmRvdyB0aGVuIHRoZSByZXN1bHRp bmcgdmFsdWUgY2FuCisJCQkgKiBuZXZlciBkZWNyZWFzZSwgdGhlcmVmb3JlIGlzIG1vbm90b25p Y2FsbHkgaW5jcmVhc2luZworCQkJICovCisJCQlpZiAoZnJhbWVPcHRpb25zICYgRlJBTUVPUFRJ T05fU1RBUlRfVU5CT1VOREVEX1BSRUNFRElORykKKwkJCQltb25vdG9uaWMgfD0gTU9OT1RPTklD RlVOQ19JTkNSRUFTSU5HOworCisJCQkvKgorCQkJICogTGlrZXdpc2UsIGlmIHRoZSBmcmFtZSBi b3VuZCBpcyB0aGUgZW5kIG9mIHRoZSB3aW5kb3cgdGhlbiB0aGUKKwkJCSAqIHJlc3VsdGluZyB2 YWx1ZSBjYW4gbmV2ZXIgZGVjcmVhc2UuCisJCQkgKi8KKwkJCWlmIChmcmFtZU9wdGlvbnMgJiBG UkFNRU9QVElPTl9FTkRfVU5CT1VOREVEX0ZPTExPV0lORykKKwkJCQltb25vdG9uaWMgfD0gTU9O T1RPTklDRlVOQ19ERUNSRUFTSU5HOworCQl9CisKKwkJcmVxLT5tb25vdG9uaWMgPSBtb25vdG9u aWM7CisJCVBHX1JFVFVSTl9QT0lOVEVSKHJlcSk7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIo TlVMTCk7Cit9CisKIAogRGF0dW0KIGludDhsYXJnZXIoUEdfRlVOQ1RJT05fQVJHUykKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC93aW5kb3dmdW5jcy5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMKaW5kZXggM2UwY2M5YmUxYS4uNTk2NTY0ZmExNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqLwogI2lu Y2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgIndpbmRvd2FwaS5oIgogCkBAIC04 OCw2ICs4OSwyNiBAQCB3aW5kb3dfcm93X251bWJlcihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JF VFVSTl9JTlQ2NChjdXJwb3MgKyAxKTsKIH0KIAorLyoKKyAqIHdpbmRvd19yb3dfbnVtYmVyX3N1 cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1bmN0aW9uIGZvciB3aW5kb3dfcm93X251bWJlcigpCisg Ki8KK0RhdHVtCit3aW5kb3dfcm93X251bWJlcl9zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJTm9kZQkgICAqcmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlp ZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYykpCisJeworCQlTdXBw b3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90 b25pYyAqKSByYXdyZXE7CisKKwkJLyogcm93X251bWJlcigpIGlzIG1vbm90b25pY2FsbHkgaW5j cmVhc2luZyAqLworCQlyZXEtPm1vbm90b25pYyA9IE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORzsK KwkJUEdfUkVUVVJOX1BPSU5URVIocmVxKTsKKwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxM KTsKK30KIAogLyoKICAqIHJhbmsKQEAgLTExMCw2ICsxMzEsMjcgQEAgd2luZG93X3JhbmsoUEdf RlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fSU5UNjQoY29udGV4dC0+cmFuayk7CiB9CiAKKy8q CisgKiB3aW5kb3dfcmFua19zdXBwb3J0CisgKgkJcHJvc3VwcG9ydCBmdW5jdGlvbiBmb3Igd2lu ZG93X3JhbmsoKQorICovCitEYXR1bQord2luZG93X3Jhbmtfc3VwcG9ydChQR19GVU5DVElPTl9B UkdTKQoreworCU5vZGUJICAgKnJhd3JlcSA9IChOb2RlICopIFBHX0dFVEFSR19QT0lOVEVSKDAp OworCisJaWYgKElzQShyYXdyZXEsIFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMpKQorCXsK KwkJU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqcmVxID0gKFN1cHBvcnRSZXF1ZXN0V0Z1 bmNNb25vdG9uaWMgKikgcmF3cmVxOworCisJCS8qIHJhbmsoKSBpcyBtb25vdG9uaWNhbGx5IGlu Y3JlYXNpbmcgKi8KKwkJcmVxLT5tb25vdG9uaWMgPSBNT05PVE9OSUNGVU5DX0lOQ1JFQVNJTkc7 CisJCVBHX1JFVFVSTl9QT0lOVEVSKHJlcSk7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoTlVM TCk7Cit9CisKIC8qCiAgKiBkZW5zZV9yYW5rCiAgKiBSYW5rIGluY3JlYXNlcyBieSAxIHdoZW4g a2V5IGNvbHVtbnMgY2hhbmdlLgpAQCAtMTMwLDYgKzE3MiwyNyBAQCB3aW5kb3dfZGVuc2VfcmFu ayhQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9JTlQ2NChjb250ZXh0LT5yYW5rKTsKIH0K IAorLyoKKyAqIHdpbmRvd19kZW5zZV9yYW5rX3N1cHBvcnQKKyAqCQlwcm9zdXBwb3J0IGZ1bmN0 aW9uIGZvciB3aW5kb3dfZGVuc2VfcmFuaygpCisgKi8KK0RhdHVtCit3aW5kb3dfZGVuc2VfcmFu a19zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkgICAqcmF3cmVxID0gKE5vZGUg KikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlpZiAoSXNBKHJhd3JlcSwgU3VwcG9ydFJlcXVl c3RXRnVuY01vbm90b25pYykpCisJeworCQlTdXBwb3J0UmVxdWVzdFdGdW5jTW9ub3RvbmljICpy ZXEgPSAoU3VwcG9ydFJlcXVlc3RXRnVuY01vbm90b25pYyAqKSByYXdyZXE7CisKKwkJLyogZGVu c2VfcmFuaygpIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyAqLworCQlyZXEtPm1vbm90b25p YyA9IE1PTk9UT05JQ0ZVTkNfSU5DUkVBU0lORzsKKwkJUEdfUkVUVVJOX1BPSU5URVIocmVxKTsK Kwl9CisKKwlQR19SRVRVUk5fUE9JTlRFUihOVUxMKTsKK30KKwogLyoKICAqIHBlcmNlbnRfcmFu awogICogcmV0dXJuIGZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMSBpbmNsdXNpdmUsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAppbmRleCBlOGY4OWE3YjE4Li4xNTI1YTk2YTViIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKQEAgLTY2MzcsMTEgKzY2MzcsMTYgQEAKICMgY291bnQgaGFzIHR3byBmb3Jt czogY291bnQoYW55KSBhbmQgY291bnQoKikKIHsgb2lkID0+ICcyMTQ3JywKICAgZGVzY3IgPT4g J251bWJlciBvZiBpbnB1dCByb3dzIGZvciB3aGljaCB0aGUgaW5wdXQgZXhwcmVzc2lvbiBpcyBu b3QgbnVsbCcsCi0gIHByb25hbWUgPT4gJ2NvdW50JywgcHJva2luZCA9PiAnYScsIHByb2lzc3Ry aWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsCi0gIHByb2FyZ3R5cGVzID0+ICdhbnkn LCBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKKyAgcHJvbmFtZSA9PiAnY291bnQnLCBw cm9zdXBwb3J0ID0+ICdpbnQ4aW5jX3N1cHBvcnQnLCBwcm9raW5kID0+ICdhJywKKyAgcHJvaXNz dHJpY3QgPT4gJ2YnLCBwcm9yZXR0eXBlID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJ2FueScs CisgIHByb3NyYyA9PiAnYWdncmVnYXRlX2R1bW15JyB9LAogeyBvaWQgPT4gJzI4MDMnLCBkZXNj ciA9PiAnbnVtYmVyIG9mIGlucHV0IHJvd3MnLAotICBwcm9uYW1lID0+ICdjb3VudCcsIHByb2tp bmQgPT4gJ2EnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5cGUgPT4gJ2ludDgnLAotICBw cm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdhZ2dyZWdhdGVfZHVtbXknIH0sCisgIHByb25h bWUgPT4gJ2NvdW50JywgcHJvc3VwcG9ydCA9PiAnaW50OGluY19zdXBwb3J0JywgcHJva2luZCA9 PiAnYScsCisgIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2Fy Z3R5cGVzID0+ICcnLAorICBwcm9zcmMgPT4gJ2FnZ3JlZ2F0ZV9kdW1teScgfSwKK3sgb2lkID0+ ICc4ODAyJywgZGVzY3IgPT4gJ3BsYW5uZXIgc3VwcG9ydCBmb3IgY291bnQgcnVuIGNvbmRpdGlv bicsCisgIHByb25hbWUgPT4gJ2ludDhpbmNfc3VwcG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVy bmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywgcHJvc3JjID0+ICdpbnQ4aW5jX3N1 cHBvcnQnIH0sCiAKIHsgb2lkID0+ICcyNzE4JywKICAgZGVzY3IgPT4gJ3BvcHVsYXRpb24gdmFy aWFuY2Ugb2YgYmlnaW50IGlucHV0IHZhbHVlcyAoc3F1YXJlIG9mIHRoZSBwb3B1bGF0aW9uIHN0 YW5kYXJkIGRldmlhdGlvbiknLApAQCAtMTAxNjEsMTQgKzEwMTY2LDI2IEBACiAKICMgU1FMLXNw ZWMgd2luZG93IGZ1bmN0aW9ucwogeyBvaWQgPT4gJzMxMDAnLCBkZXNjciA9PiAncm93IG51bWJl ciB3aXRoaW4gcGFydGl0aW9uJywKLSAgcHJvbmFtZSA9PiAncm93X251bWJlcicsIHByb2tpbmQg PT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZicsCi0gIHByb3JldHR5cGUgPT4gJ2ludDgnLCBwcm9h cmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICd3aW5kb3dfcm93X251bWJlcicgfSwKKyAgcHJvbmFt ZSA9PiAncm93X251bWJlcicsIHByb3N1cHBvcnQgPT4gJ3dpbmRvd19yb3dfbnVtYmVyX3N1cHBv cnQnLAorICBwcm9raW5kID0+ICd3JywgcHJvaXNzdHJpY3QgPT4gJ2YnLCAgcHJvcmV0dHlwZSA9 PiAnaW50OCcsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3dpbmRvd19yb3dfbnVt YmVyJyB9LAoreyBvaWQgPT4gJzg3OTknLCBkZXNjciA9PiAncGxhbm5lciBzdXBwb3J0IGZvciBy b3dfbnVtYmVyIHJ1biBjb25kaXRpb24nLAorICBwcm9uYW1lID0+ICd3aW5kb3dfcm93X251bWJl cl9zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBwcm9hcmd0eXBlcyA9PiAn aW50ZXJuYWwnLCBwcm9zcmMgPT4gJ3dpbmRvd19yb3dfbnVtYmVyX3N1cHBvcnQnIH0sCiB7IG9p ZCA9PiAnMzEwMScsIGRlc2NyID0+ICdpbnRlZ2VyIHJhbmsgd2l0aCBnYXBzJywKLSAgcHJvbmFt ZSA9PiAncmFuaycsIHByb2tpbmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3JldHR5 cGUgPT4gJ2ludDgnLAorICBwcm9uYW1lID0+ICdyYW5rJywgcHJvc3VwcG9ydCA9PiAnd2luZG93 X3Jhbmtfc3VwcG9ydCcsCisgIHByb2tpbmQgPT4gJ3cnLCBwcm9pc3N0cmljdCA9PiAnZicsIHBy b3JldHR5cGUgPT4gJ2ludDgnLAogICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICd3aW5k b3dfcmFuaycgfSwKK3sgb2lkID0+ICc4ODAwJywgZGVzY3IgPT4gJ3BsYW5uZXIgc3VwcG9ydCBm b3IgcmFuayBydW4gY29uZGl0aW9uJywKKyAgcHJvbmFtZSA9PiAnd2luZG93X3Jhbmtfc3VwcG9y dCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFs JywgcHJvc3JjID0+ICd3aW5kb3dfcmFua19zdXBwb3J0JyB9LAogeyBvaWQgPT4gJzMxMDInLCBk ZXNjciA9PiAnaW50ZWdlciByYW5rIHdpdGhvdXQgZ2FwcycsCi0gIHByb25hbWUgPT4gJ2RlbnNl X3JhbmsnLCBwcm9raW5kID0+ICd3JywgcHJvaXNzdHJpY3QgPT4gJ2YnLAotICBwcm9yZXR0eXBl ID0+ICdpbnQ4JywgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAnd2luZG93X2RlbnNlX3Jh bmsnIH0sCisgIHByb25hbWUgPT4gJ2RlbnNlX3JhbmsnLCBwcm9zdXBwb3J0ID0+ICd3aW5kb3df ZGVuc2VfcmFua19zdXBwb3J0JywKKyAgcHJva2luZCA9PiAndycsIHByb2lzc3RyaWN0ID0+ICdm JywgcHJvcmV0dHlwZSA9PiAnaW50OCcsIHByb2FyZ3R5cGVzID0+ICcnLAorICBwcm9zcmMgPT4g J3dpbmRvd19kZW5zZV9yYW5rJyB9LAoreyBvaWQgPT4gJzg4MDEnLCBkZXNjciA9PiAncGxhbm5l ciBzdXBwb3J0IGZvciBkZW5zZSByYW5rIHJ1biBjb25kaXRpb24nLAorICBwcm9uYW1lID0+ICd3 aW5kb3dfZGVuc2VfcmFua19zdXBwb3J0JywgcHJvcmV0dHlwZSA9PiAnaW50ZXJuYWwnLAorICBw cm9hcmd0eXBlcyA9PiAnaW50ZXJuYWwnLCBwcm9zcmMgPT4gJ3dpbmRvd19kZW5zZV9yYW5rX3N1 cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzEwMycsIGRlc2NyID0+ICdmcmFjdGlvbmFsIHJhbmsgd2l0 aGluIHBhcnRpdGlvbicsCiAgIHByb25hbWUgPT4gJ3BlcmNlbnRfcmFuaycsIHByb2tpbmQgPT4g J3cnLCBwcm9pc3N0cmljdCA9PiAnZicsCiAgIHByb3JldHR5cGUgPT4gJ2Zsb2F0OCcsIHByb2Fy Z3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3dpbmRvd19wZXJjZW50X3JhbmsnIH0sCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCmluZGV4IGNiYmNmZjgxZDIuLjk0YjE5MWY4YWUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCkBAIC0yNDA2LDYgKzI0MDYsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgQWdnU3RhdGUKIHR5cGVk ZWYgc3RydWN0IFdpbmRvd1N0YXRlUGVyRnVuY0RhdGEgKldpbmRvd1N0YXRlUGVyRnVuYzsKIHR5 cGVkZWYgc3RydWN0IFdpbmRvd1N0YXRlUGVyQWdnRGF0YSAqV2luZG93U3RhdGVQZXJBZ2c7CiAK Ky8qCisgKiBXaW5kb3dBZ2dTdGF0dXMgLS0gVXNlZCB0byB0cmFjayB0aGUgc3RhdHVzIG9mIFdp bmRvd0FnZ1N0YXRlCisgKi8KK3R5cGVkZWYgZW51bSBXaW5kb3dBZ2dTdGF0dXMKK3sKKwlXSU5E T1dBR0dfRE9ORSwJCQkJLyogTm8gbW9yZSBwcm9jZXNzaW5nIHRvIGRvICovCisJV0lORE9XQUdH X1JVTiwJCQkJLyogTm9ybWFsIHByb2Nlc3Npbmcgb2Ygd2luZG93IGZ1bmNzICovCisJV0lORE9X QUdHX1BBU1NUSFJPVUdILAkJLyogRG9uJ3QgZXZhbCB3aW5kb3cgZnVuY3MgKi8KKwlXSU5ET1dB R0dfUEFTU1RIUk9VR0hfU1RSSUNUCS8qIFBhc3MtdGhyb3VnaCBwbHVzIGRvbid0IHN0b3JlIG5l dworCQkJCQkJCQkJICogdHVwbGVzIGR1cmluZyBzcG9vbCAqLworfSBXaW5kb3dBZ2dTdGF0dXM7 CisKIHR5cGVkZWYgc3RydWN0IFdpbmRvd0FnZ1N0YXRlCiB7CiAJU2NhblN0YXRlCXNzOwkJCQkv KiBpdHMgZmlyc3QgZmllbGQgaXMgTm9kZVRhZyAqLwpAQCAtMjQzMiw2ICsyNDQ0LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgV2luZG93QWdnU3RhdGUKIAlzdHJ1Y3QgV2luZG93T2JqZWN0RGF0YSAqYWdn X3dpbm9iajsJLyogd2lub2JqIGZvciBhZ2dyZWdhdGUgZmV0Y2hlcyAqLwogCWludDY0CQlhZ2dy ZWdhdGVkYmFzZTsgLyogc3RhcnQgcm93IGZvciBjdXJyZW50IGFnZ3JlZ2F0ZXMgKi8KIAlpbnQ2 NAkJYWdncmVnYXRlZHVwdG87IC8qIHJvd3MgYmVmb3JlIHRoaXMgb25lIGFyZSBhZ2dyZWdhdGVk ICovCisJV2luZG93QWdnU3RhdHVzIHN0YXR1czsJCS8qIHJ1biBzdGF0dXMgb2YgV2luZG93QWdn U3RhdGUgKi8KIAogCWludAkJCWZyYW1lT3B0aW9uczsJLyogZnJhbWVfY2xhdXNlIG9wdGlvbnMs IHNlZSBXaW5kb3dEZWYgKi8KIAlFeHByU3RhdGUgICpzdGFydE9mZnNldDsJLyogZXhwcmVzc2lv biBmb3Igc3RhcnRpbmcgYm91bmQgb2Zmc2V0ICovCkBAIC0yNDU4LDggKzI0NzEsMTcgQEAgdHlw ZWRlZiBzdHJ1Y3QgV2luZG93QWdnU3RhdGUKIAlNZW1vcnlDb250ZXh0IGN1cmFnZ2NvbnRleHQ7 CS8qIGN1cnJlbnQgYWdncmVnYXRlJ3Mgd29ya2luZyBkYXRhICovCiAJRXhwckNvbnRleHQgKnRt cGNvbnRleHQ7CS8qIHNob3J0LXRlcm0gZXZhbHVhdGlvbiBjb250ZXh0ICovCiAKKwlFeHByU3Rh dGUgICpydW5jb25kaXRpb247CS8qIENvbmRpdGlvbiB3aGljaCBtdXN0IHJlbWFpbiB0cnVlIG90 aGVyd2lzZQorCQkJCQkJCQkgKiBleGVjdXRpb24gb2YgdGhlIFdpbmRvd0FnZyB3aWxsIGZpbmlz aCBvcgorCQkJCQkJCQkgKiBnbyBpbnRvIHBhc3MtdGhyb3VnaCBtb2RlLiAgTlVMTCB3aGVuIHRo ZXJlCisJCQkJCQkJCSAqIGlzIG5vIHN1Y2ggY29uZGl0aW9uLiAqLworCisJYm9vbAkJdXNlX3Bh c3NfdGhyb3VnaDsJLyogV2hlbiBmYWxzZSwgc3RvcCBleGVjdXRpb24gd2hlbgorCQkJCQkJCQkJ ICogcnVuY29uZGl0aW9uIGlzIG5vIGxvbmdlciB0cnVlLiAgRWxzZQorCQkJCQkJCQkJICoganVz dCBzdG9wIGV2YWx1YXRpbmcgd2luZG93IGZ1bmNzLiAqLworCWJvb2wJCXRvcF93aW5kb3c7CQkv KiB0cnVlIGlmIHRoaXMgaXMgdGhlIHRvcC1tb3N0IFdpbmRvd0FnZyBvcgorCQkJCQkJCQkgKiB0 aGUgb25seSBXaW5kb3dBZ2cgaW4gdGhpcyBxdWVyeSBsZXZlbCAqLwogCWJvb2wJCWFsbF9maXJz dDsJCS8qIHRydWUgaWYgdGhlIHNjYW4gaXMgc3RhcnRpbmcgKi8KLQlib29sCQlhbGxfZG9uZTsJ CS8qIHRydWUgaWYgdGhlIHNjYW4gaXMgZmluaXNoZWQgKi8KIAlib29sCQlwYXJ0aXRpb25fc3Bv b2xlZDsJLyogdHJ1ZSBpZiBhbGwgdHVwbGVzIGluIGN1cnJlbnQgcGFydGl0aW9uCiAJCQkJCQkJ CQkgKiBoYXZlIGJlZW4gc3Bvb2xlZCBpbnRvIHR1cGxlc3RvcmUgKi8KIAlib29sCQltb3JlX3Bh cnRpdGlvbnM7CS8qIHRydWUgaWYgdGhlcmUncyBtb3JlIHBhcnRpdGlvbnMgYWZ0ZXIKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rl cy5oCmluZGV4IDMwMDgyNDI1OGUuLjM0MGQyOGY0ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L25vZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtNTYwLDcg KzU2MCw4IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9TdXBwb3J0UmVxdWVzdFNlbGVjdGl2 aXR5LAkvKiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLwogCVRfU3VwcG9ydFJlcXVlc3RDb3N0 LAkJLyogaW4gbm9kZXMvc3VwcG9ydG5vZGVzLmggKi8KIAlUX1N1cHBvcnRSZXF1ZXN0Um93cywJ CS8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICovCi0JVF9TdXBwb3J0UmVxdWVzdEluZGV4Q29u ZGl0aW9uCS8qIGluIG5vZGVzL3N1cHBvcnRub2Rlcy5oICovCisJVF9TdXBwb3J0UmVxdWVzdElu ZGV4Q29uZGl0aW9uLCAvKiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLworCVRfU3VwcG9ydFJl cXVlc3RXRnVuY01vbm90b25pYwkvKiBpbiBub2Rlcy9zdXBwb3J0bm9kZXMuaCAqLwogfSBOb2Rl VGFnOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDg5OThkMzQ1NjAuLmIyY2RmODI0 OWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTE0MDIsNiArMTQwMiw3IEBAIHR5cGVkZWYg c3RydWN0IFdpbmRvd0NsYXVzZQogCWludAkJCWZyYW1lT3B0aW9uczsJLyogZnJhbWVfY2xhdXNl IG9wdGlvbnMsIHNlZSBXaW5kb3dEZWYgKi8KIAlOb2RlCSAgICpzdGFydE9mZnNldDsJLyogZXhw cmVzc2lvbiBmb3Igc3RhcnRpbmcgYm91bmQsIGlmIGFueSAqLwogCU5vZGUJICAgKmVuZE9mZnNl dDsJCS8qIGV4cHJlc3Npb24gZm9yIGVuZGluZyBib3VuZCwgaWYgYW55ICovCisJTGlzdAkgICAq cnVuQ29uZGl0aW9uOwkvKiBxdWFsIHRvIGhlbHAgc2hvcnQtY2lyY3VpdCBleGVjdXRpb24gKi8K IAlPaWQJCQlzdGFydEluUmFuZ2VGdW5jOwkvKiBpbl9yYW5nZSBmdW5jdGlvbiBmb3Igc3RhcnRP ZmZzZXQgKi8KIAlPaWQJCQllbmRJblJhbmdlRnVuYzsgLyogaW5fcmFuZ2UgZnVuY3Rpb24gZm9y IGVuZE9mZnNldCAqLwogCU9pZAkJCWluUmFuZ2VDb2xsOwkvKiBjb2xsYXRpb24gZm9yIGluX3Jh bmdlIHRlc3RzICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDZjYmNiNjdiZGYuLmM1YWI1M2Uw NWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xODQzLDYgKzE4NDMsOSBAQCB0eXBlZGVmIHN0 cnVjdCBXaW5kb3dBZ2dQYXRoCiAJUGF0aAkJcGF0aDsKIAlQYXRoCSAgICpzdWJwYXRoOwkJLyog cGF0aCByZXByZXNlbnRpbmcgaW5wdXQgc291cmNlICovCiAJV2luZG93Q2xhdXNlICp3aW5jbGF1 c2U7CS8qIFdpbmRvd0NsYXVzZSB3ZSdsbCBiZSB1c2luZyAqLworCUxpc3QJICAgKnF1YWw7CQkJ LyogbG93ZXItbGV2ZWwgV2luZG93QWdnIHJ1bmNvbmRpdGlvbnMgKi8KKwlib29sCQl0b3B3aW5k b3c7CQkvKiBmYWxzZSBmb3IgYWxsIGFwYXJ0IGZyb20gdGhlIFdpbmRvd0FnZworCQkJCQkJCQkg KiB0aGF0J3MgY2xvc2VzdCB0byB0aGUgcm9vdCBvZiB0aGUgcGxhbiAqLwogfSBXaW5kb3dBZ2dQ YXRoOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCAxMGRkMzVmMDExLi5lNDNlMzYwZDli IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5j bHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtOTI2LDEyICs5MjYsMTYgQEAgdHlwZWRlZiBzdHJ1 Y3QgV2luZG93QWdnCiAJaW50CQkJZnJhbWVPcHRpb25zOwkvKiBmcmFtZV9jbGF1c2Ugb3B0aW9u cywgc2VlIFdpbmRvd0RlZiAqLwogCU5vZGUJICAgKnN0YXJ0T2Zmc2V0OwkvKiBleHByZXNzaW9u IGZvciBzdGFydGluZyBib3VuZCwgaWYgYW55ICovCiAJTm9kZQkgICAqZW5kT2Zmc2V0OwkJLyog ZXhwcmVzc2lvbiBmb3IgZW5kaW5nIGJvdW5kLCBpZiBhbnkgKi8KKwlMaXN0CSAgICpydW5Db25k aXRpb247CS8qIHF1YWwgdG8gaGVscCBzaG9ydC1jaXJjdWl0IGV4ZWN1dGlvbiAqLworCUxpc3QJ ICAgKnJ1bkNvbmRpdGlvbk9yaWc7CS8qIHJ1bkNvbmRpdGlvbiBmb3IgZGlzcGxheSBpbiBFWFBM QUlOICovCiAJLyogdGhlc2UgZmllbGRzIGFyZSB1c2VkIHdpdGggUkFOR0Ugb2Zmc2V0IFBSRUNF RElORy9GT0xMT1dJTkc6ICovCiAJT2lkCQkJc3RhcnRJblJhbmdlRnVuYzsJLyogaW5fcmFuZ2Ug ZnVuY3Rpb24gZm9yIHN0YXJ0T2Zmc2V0ICovCiAJT2lkCQkJZW5kSW5SYW5nZUZ1bmM7IC8qIGlu X3JhbmdlIGZ1bmN0aW9uIGZvciBlbmRPZmZzZXQgKi8KIAlPaWQJCQlpblJhbmdlQ29sbDsJLyog Y29sbGF0aW9uIGZvciBpbl9yYW5nZSB0ZXN0cyAqLwogCWJvb2wJCWluUmFuZ2VBc2M7CQkvKiB1 c2UgQVNDIHNvcnQgb3JkZXIgZm9yIGluX3JhbmdlIHRlc3RzPyAqLwogCWJvb2wJCWluUmFuZ2VO dWxsc0ZpcnN0OwkvKiBudWxscyBzb3J0IGZpcnN0IGZvciBpbl9yYW5nZSB0ZXN0cz8gKi8KKwli b29sCQl0b3BXaW5kb3c7CQkvKiBmYWxzZSBmb3IgYWxsIGFwYXJ0IGZyb20gdGhlIFdpbmRvd0Fn ZworCQkJCQkJCQkgKiB0aGF0J3MgY2xvc2VzdCB0byB0aGUgcm9vdCBvZiB0aGUgcGxhbiAqLwog fSBXaW5kb3dBZ2c7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMjQsNCArMTMyOCwyMSBA QCB0eXBlZGVmIHN0cnVjdCBQbGFuSW52YWxJdGVtCiAJdWludDMyCQloYXNoVmFsdWU7CQkvKiBo YXNoIHZhbHVlIG9mIG9iamVjdCdzIGNhY2hlIGxvb2t1cCBrZXkgKi8KIH0gUGxhbkludmFsSXRl bTsKIAorLyoKKyAqIE1vbm90b25pY0Z1bmN0aW9uCisgKgorICogQWxsb3dzIHRoZSBwbGFubmVy IHRvIHRyYWNrIG1vbm90b25pYyBwcm9wZXJ0aWVzIG9mIGZ1bmN0aW9ucy4gIEEgZnVuY3Rpb24K KyAqIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZiBhIHN1YnNlcXVlbnQgY2FsbCBjYW5u b3QgeWllbGQgYSBsb3dlciB2YWx1ZQorICogdGhhbiB0aGUgcHJldmlvdXMgY2FsbC4gIEEgbW9u b3RvbmljYWxseSBkZWNyZWFzaW5nIGZ1bmN0aW9uIGNhbm5vdCB5aWVsZCBhCisgKiBoaWdoZXIg dmFsdWUgb24gc3Vic2VxdWVudCBjYWxscywgYW5kIGEgZnVuY3Rpb24gd2hpY2ggaXMgYm90aCBt dXN0IHJldHVybgorICogdGhlIHNhbWUgdmFsdWUgb24gZWFjaCBjYWxsLgorICovCit0eXBlZGVm IGVudW0gTW9ub3RvbmljRnVuY3Rpb24KK3sKKwlNT05PVE9OSUNGVU5DX05PTkUgPSAwLAorCU1P Tk9UT05JQ0ZVTkNfSU5DUkVBU0lORyA9ICgxIDw8IDApLAorCU1PTk9UT05JQ0ZVTkNfREVDUkVB U0lORyA9ICgxIDw8IDEpLAorCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNfSU5D UkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORworfSBNb25vdG9uaWNGdW5jdGlvbjsK KwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RFU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9zdXBwb3J0bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3N1cHBvcnRub2Rlcy5o CmluZGV4IDg4YjYxYjNhYjMuLmJkZDQzZmM2MTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3N1cHBvcnRub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3N1cHBvcnRub2Rlcy5o CkBAIC0zMywxMiArMzMsMTIgQEAKICNpZm5kZWYgU1VQUE9SVE5PREVTX0gKICNkZWZpbmUgU1VQ UE9SVE5PREVTX0gKIAotI2luY2x1ZGUgIm5vZGVzL3ByaW1ub2Rlcy5oIgorI2luY2x1ZGUgIm5v ZGVzL3BsYW5ub2Rlcy5oIgogCiBzdHJ1Y3QgUGxhbm5lckluZm87CQkJCS8qIGF2b2lkIGluY2x1 ZGluZyBwYXRobm9kZXMuaCBoZXJlICovCiBzdHJ1Y3QgSW5kZXhPcHRJbmZvOwogc3RydWN0IFNw ZWNpYWxKb2luSW5mbzsKLQorc3RydWN0IFdpbmRvd0NsYXVzZTsKIAogLyoKICAqIFRoZSBTaW1w bGlmeSByZXF1ZXN0IGFsbG93cyB0aGUgc3VwcG9ydCBmdW5jdGlvbiB0byBwZXJmb3JtIHBsYW4t dGltZQpAQCAtMjM5LDQgKzIzOSw2NCBAQCB0eXBlZGVmIHN0cnVjdCBTdXBwb3J0UmVxdWVzdElu ZGV4Q29uZGl0aW9uCiAJCQkJCQkJCSAqIGVxdWl2YWxlbnQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwg Ki8KIH0gU3VwcG9ydFJlcXVlc3RJbmRleENvbmRpdGlvbjsKIAorLyogLS0tLS0tLS0tLQorICog VG8gYWxsb3cgbW9yZSBlZmZpY2llbnQgZXhlY3V0aW9uIG9mIGFueSBtb25vdG9uaWNhbGx5IGlu Y3JlYXNpbmcgYW5kL29yCisgKiBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgd2luZG93IGZ1bmN0 aW9ucywgd2Ugc3VwcG9ydCBjYWxsaW5nIHRoZSB3aW5kb3cKKyAqIGZ1bmN0aW9uJ3MgcHJvc3Vw cG9ydCBmdW5jdGlvbiBwYXNzaW5nIGFsb25nIHRoaXMgc3RydWN0IHdoZW5ldmVyIHRoZQorICog cGxhbm5lciBzZWVzIGFuIE9wRXhwciBxdWFsIGRpcmVjdGx5IHJlZmVyZW5jZSBhIHdpbmRvdyBm dW5jdGlvbiBpbiBhCisgKiBzdWJxdWVyeS4gIFdoZW4gdGhlIHBsYW5uZXIgZW5jb3VudGVycyB0 aGlzLCB3ZSBwb3B1bGF0ZSB0aGlzIHN0cnVjdCBhbmQKKyAqIHBhc3MgaXQgYWxvbmcgdG8gdGhl IHdpbmRvdyBmdW5jdGlvbidzIHByb3N1cHBvcnQgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4KKyAq IGV2YWx1YXRlIGlmIHRoZSBnaXZlbiBXaW5kb3dGdW5jIGlzOworICoKKyAqIGEpIG1vbm90b25p Y2FsbHkgaW5jcmVhc2luZywgb3IKKyAqIGIpIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZywgb3IK KyAqIGMpIGJvdGggbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGFuZCBkZWNyZWFzaW5nLCBvcgor ICogZCkgbm9uZSBvZiB0aGUgYWJvdmUuCisgKgorICogQSBmdW5jdGlvbiB0aGF0IGlzIG1vbm90 b25pY2FsbHkgaW5jcmVhc2luZyBjYW4gbmV2ZXIgcmV0dXJuIGEgdmFsdWUgdGhhdAorICogaXMg bG93ZXIgdGhhbiBhIHZhbHVlIHJldHVybmVkIGluIGEgInByZXZpb3VzIGNhbGwiLiAgQSBtb25v dG9uaWNhbGx5CisgKiBkZWNyZWFzaW5nIGZ1bmN0aW9uIGNhbiBuZXZlciByZXR1cm4gYSB2YWx1 ZSBoaWdoZXIgdGhhbiBhIHZhbHVlIHJldHVybmVkCisgKiBpbiBhIHByZXZpb3VzIGNhbGwuICBB IGZ1bmN0aW9uIHRoYXQgaXMgYm90aCBtdXN0IHJldHVybiB0aGUgc2FtZSB2YWx1ZQorICogZWFj aCB0aW1lLgorICoKKyAqIFdlIGRlZmluZSAicHJldmlvdXMgY2FsbCIgdG8gbWVhbiBhIHByZXZp b3VzIGNhbGwgdG8gdGhlIHNhbWUgV2luZG93RnVuYworICogc3RydWN0IGluIHRoZSBzYW1lIHdp bmRvdyBwYXJ0aXRpb24uCisgKgorICogcm93X251bWJlcigpIGlzIGFuIGV4YW1wbGUgb2YgYSBt b25vdG9uaWNhbGx5IGluY3JlYXNpbmcgZnVuY3Rpb24uICBUaGUKKyAqIHJldHVybiB2YWx1ZSB3 aWxsIGJlIHJlc2V0IGJhY2sgdG8gMSBpbiBlYWNoIG5ldyBwYXJ0aXRpb24uICBBbiBleGFtcGxl IG9mCisgKiBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBhbmQgZGVjcmVhc2luZyBmdW5jdGlv biBpcyBDT1VOVCgqKSBPVkVSICgpLgorICogU2luY2UgdGhlcmUgaXMgbm8gT1JERVIgQlkgY2xh dXNlIGluIHRoaXMgZXhhbXBsZSwgYWxsIHJvd3MgaW4gdGhlCisgKiBwYXJ0aXRpb24gYXJlIHBl ZXJzIGFuZCBhbGwgcm93cyB3aXRoaW4gdGhlIHBhcnRpdGlvbiB3aWxsIGJlIHdpdGhpbiB0aGUK KyAqIGZyYW1lIGJvdW5kLiAgTGlrZXdpc2UgZm9yIENPVU5UKCopIE9WRVIoT1JERVIgQlkgYSBS T1dTIEJFVFdFRU4gVU5CT1VOREVECisgKiBQUkVDRURJTkcgQU5EIFVOQk9VTkRFRCBGT0xMT1dJ TkcpLgorICoKKyAqIENPVU5UKCopIE9WRVIgKE9SREVSIEJZIGEgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKQorICogaXMgYW4gZXhhbXBsZSBvZiBhIG1v bm90b25pY2FsbHkgZGVjcmVhc2luZyBmdW5jdGlvbi4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbnMg bXVzdCBvbmx5IGNvbmNlcm4gdGhlbXNlbHZlcyB3aXRoIHRoZSBnaXZlbiBXaW5kb3dGdW5jCisg KiBiZWluZyBtb25vdG9uaWMgaW4gYSBzaW5nbGUgcGFydGl0aW9uLgorICoKKyAqIElucHV0czoK KyAqCSd3aW5kb3dfZnVuYycgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIHdpbmRvdyBmdW5jdGlvbiBi ZWluZyBjYWxsZWQuCisgKgorICoJJ3dpbmRvd19jbGF1c2UnIHBvaW50ZXIgdG8gdGhlIFdpbmRv d0NsYXVzZSBkYXRhLiAgU3VwcG9ydCBmdW5jdGlvbnMgY2FuCisgKgl1c2UgdGhpcyB0byBjaGVj ayBmcmFtZSBib3VuZHMsIGV0Yy4KKyAqCisgKiBPdXRwdXRzOgorICoJJ21vbm90b25pYycgdGhl IHJlc3VsdGluZyBNb25vdG9uaWNGdW5jdGlvbiB2YWx1ZSBmb3IgdGhlIGdpdmVuIGlucHV0Cisg Kgl3aW5kb3cgZnVuY3Rpb24gYW5kIHdpbmRvdyBjbGF1c2UuCisgKiAtLS0tLS0tLS0tCisgKi8K K3R5cGVkZWYgc3RydWN0IFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWMKK3sKKwlOb2RlVGFn CQl0eXBlOworCisJLyogSW5wdXQgZmllbGRzOiAqLworCVdpbmRvd0Z1bmMgKndpbmRvd19mdW5j OwkvKiBQb2ludGVyIHRvIHRoZSB3aW5kb3cgZnVuY3Rpb24gZGF0YSAqLworCXN0cnVjdCBXaW5k b3dDbGF1c2UgKndpbmRvd19jbGF1c2U7IC8qIFBvaW50ZXIgdG8gdGhlIHdpbmRvdyBjbGF1c2Ug ZGF0YSAqLworCisJLyogT3V0cHV0IGZpZWxkczogKi8KKwlNb25vdG9uaWNGdW5jdGlvbiBtb25v dG9uaWM7Cit9IFN1cHBvcnRSZXF1ZXN0V0Z1bmNNb25vdG9uaWM7CisKICNlbmRpZgkJCQkJCQkv KiBTVVBQT1JUTk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCA2ZWNhNTQ3 YWY4Li5kMmQ0NmIxNWRmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMjQ1LDcgKzI0 NSw5IEBAIGV4dGVybiBXaW5kb3dBZ2dQYXRoICpjcmVhdGVfd2luZG93YWdnX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCVBhdGggKnN1YnBhdGgsCiAJCQkJCQkJCQkJCVBhdGhU YXJnZXQgKnRhcmdldCwKIAkJCQkJCQkJCQkJTGlzdCAqd2luZG93RnVuY3MsCi0JCQkJCQkJCQkJ CVdpbmRvd0NsYXVzZSAqd2luY2xhdXNlKTsKKwkJCQkJCQkJCQkJV2luZG93Q2xhdXNlICp3aW5j bGF1c2UsCisJCQkJCQkJCQkJCUxpc3QgKnF1YWwsCisJCQkJCQkJCQkJCWJvb2wgdG9wd2luZG93 KTsKIGV4dGVybiBTZXRPcFBhdGggKmNyZWF0ZV9zZXRvcF9wYXRoKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJUGF0aCAqc3VicGF0aCwKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dAppbmRleCBiYjlmZjdmMDdiLi41ZWQzNGI5YTQ4 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CkBAIC0zMzM2LDYgKzMzMzYsNDA0 IEBAIFdIRVJFIGRlcG5hbWUgPSAnc2FsZXMnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQogKDkgcm93cykKIAorLS0gVGVzdCB3aW5kb3cgZnVu Y3Rpb24gcnVuIGNvbmRpdGlvbnMgYXJlIHByb3Blcmx5IHB1c2hlZCBkb3duIGludG8gdGhlCist LSBXaW5kb3dBZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVD VCBlbXBubywKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJu CisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBSdW4gQ29uZGl0aW9uOiAocm93 X251bWJlcigpIE9WRVIgKD8pIDwgMykKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTog ZW1wc2FsYXJ5LmVtcG5vCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNSBy b3dzKQorCistLSBUaGUgZm9sbG93aW5nIDMgc3RhdGVtZW50cyBzaG91bGQgcmVzdWx0IHRoZSBz YW1lIHJlc3VsdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBy b3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkg ZW1wCitXSEVSRSBybiA8IDM7CisgZW1wbm8gfCBybiAKKy0tLS0tLS0rLS0tLQorICAgICAxIHwg IDEKKyAgICAgMiB8ICAyCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1w bm8sCisgICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKE9SREVSIEJZIGVtcG5vKSBybgorICAg RlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgMyA+IHJuOworIGVtcG5vIHwgcm4gCistLS0tLS0t Ky0tLS0KKyAgICAgMSB8ICAxCisgICAgIDIgfCAgMgorKDIgcm93cykKKworU0VMRUNUICogRlJP TQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHJvd19udW1iZXIoKSBPVkVSIChPUkRFUiBC WSBlbXBubykgcm4KKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDIgPj0gcm47CisgZW1w bm8gfCBybiAKKy0tLS0tLS0rLS0tLQorICAgICAxIHwgIDEKKyAgICAgMiB8ICAyCisoMiByb3dz KQorCistLSBFbnN1cmUgciA8PSAzIGlzIHB1c2hlZCBkb3duIGludG8gdGhlIHJ1biBjb25kaXRp b24gb2YgdGhlIHdpbmRvdyBhZ2cKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFuaygpIE9W RVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSByIDw9IDM7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIFJ1 biBDb25kaXRpb246IChyYW5rKCkgT1ZFUiAoPykgPD0gMykKKyAgIC0+ICBTb3J0CisgICAgICAg ICBTb3J0IEtleTogZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gZW1wc2FsYXJ5CisoNSByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8s CisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIHJhbmsoKSBPVkVSIChPUkRFUiBCWSBzYWxh cnkgREVTQykgcgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgciA8PSAzOworIGVtcG5v IHwgc2FsYXJ5IHwgciAKKy0tLS0tLS0rLS0tLS0tLS0rLS0tCisgICAgIDggfCAgIDYwMDAgfCAx CisgICAgMTAgfCAgIDUyMDAgfCAyCisgICAgMTEgfCAgIDUyMDAgfCAyCisoMyByb3dzKQorCist LSBFbnN1cmUgZHIgPSAxIGlzIGNvbnZlcnRlZCB0byBkciA8PSAxIHRvIGdldCBhbGwgcm93cyBs ZWFkaW5nIHVwIHRvIGRyID0gMQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQor ICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBkZW5zZV9yYW5r KCkgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGRyCisgICBGUk9NIGVtcHNhbGFyeSkgZW1w CitXSEVSRSBkciA9IDE7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBTdWJxdWVyeSBTY2FuIG9uIGVtcAorICAgRmlsdGVyOiAoZW1wLmRyID0g MSkKKyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIFJ1biBDb25kaXRpb246IChkZW5zZV9yYW5r KCkgT1ZFUiAoPykgPD0gMSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0 IEtleTogZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gZW1wc2FsYXJ5CisoNyByb3dzKQorCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8s CisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVSIChPUkRFUiBC WSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRyID0gMTsK KyBlbXBubyB8IHNhbGFyeSB8IGRyIAorLS0tLS0tLSstLS0tLS0tLSstLS0tCisgICAgIDggfCAg IDYwMDAgfCAgMQorKDEgcm93KQorCistLSBDaGVjayBDT1VOVCgpIGFuZCBDT1VOVCgqKQorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAg ICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVT QykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFdpbmRvd0FnZworICAgUnVuIENvbmRpdGlvbjogKGNvdW50 KCopIE9WRVIgKD8pIDw9IDMpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGVtcHNh bGFyeS5zYWxhcnkgREVTQworICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDUg cm93cykKKworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFy eSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgYworICAg RlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworIGVtcG5vIHwgc2FsYXJ5IHwgYyAK Ky0tLS0tLS0rLS0tLS0tLS0rLS0tCisgICAgIDggfCAgIDYwMDAgfCAxCisgICAgMTAgfCAgIDUy MDAgfCAzCisgICAgMTEgfCAgIDUyMDAgfCAzCisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAor ICAgICAgICAgIGNvdW50KGVtcG5vKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgYworICAg RlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworICAgICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIFJ1 biBDb25kaXRpb246IChjb3VudChlbXBzYWxhcnkuZW1wbm8pIE9WRVIgKD8pIDw9IDMpCisgICAt PiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDUgcm93cykKKworU0VMRUNUICogRlJPTQor ICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudChlbXBu bykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAK K1dIRVJFIGMgPD0gMzsKKyBlbXBubyB8IHNhbGFyeSB8IGMgCistLS0tLS0tKy0tLS0tLS0tKy0t LQorICAgICA4IHwgICA2MDAwIHwgMQorICAgIDEwIHwgICA1MjAwIHwgMworICAgIDExIHwgICA1 MjAwIHwgMworKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQor ICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBP VkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVO Qk9VTkRFRCBGT0xMT1dJTkcpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPj0g MzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBXaW5kb3dBZ2cKKyAgIFJ1biBD b25kaXRpb246IChjb3VudCgqKSBPVkVSICg/KSA+PSAzKQorICAgLT4gIFNvcnQKKyAgICAgICAg IFNvcnQgS2V5OiBlbXBzYWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBlbXBzYWxhcnkKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQo KikgT1ZFUiAoKSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAxMSA8PSBjOworICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBSdW4gQ29uZGl0 aW9uOiAoMTEgPD0gY291bnQoKikgT1ZFUiAoPykpCisgICAtPiAgU2VxIFNjYW4gb24gZW1wc2Fs YXJ5CisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChT RUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIg KE9SREVSIEJZIHNhbGFyeSBERVNDKSBjLAorICAgICAgICAgIGRlbnNlX3JhbmsoKSBPVkVSIChP UkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRy ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFN1YnF1ZXJ5IFNjYW4gb24gZW1wCisgICBGaWx0ZXI6IChlbXAuZHIgPSAxKQorICAgLT4g IFdpbmRvd0FnZworICAgICAgICAgUnVuIENvbmRpdGlvbjogKGRlbnNlX3JhbmsoKSBPVkVSICg/ KSA8PSAxKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlbXBz YWxhcnkuc2FsYXJ5IERFU0MKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXBzYWxh cnkKKyg3IHJvd3MpCisKKy0tIEVuc3VyZSB3ZSBnZXQgYSBydW4gY29uZGl0aW9uIHdoZW4gdGhl cmUncyBhIFBBUlRJVElPTiBCWSBjbGF1c2UKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBkZXBuYW1lLAorICAgICAgICAgIHJv d19udW1iZXIoKSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBlbXBubykgcm4K KyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIHJuIDwgMzsKKyAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgV2luZG93QWdnCisgICBSdW4g Q29uZGl0aW9uOiAocm93X251bWJlcigpIE9WRVIgKD8pIDwgMykKKyAgIC0+ICBTb3J0CisgICAg ICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LmRlcG5hbWUsIGVtcHNhbGFyeS5lbXBubworICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDUgcm93cykKKworLS0gYW5kIGVuc3VyZSB3 ZSBnZXQgdGhlIGNvcnJlY3QgcmVzdWx0cyBmcm9tIHRoZSBhYm92ZSBwbGFuCitTRUxFQ1QgKiBG Uk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgZGVwbmFtZSwKKyAgICAgICAgICByb3df bnVtYmVyKCkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIHJuCisg ICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBybiA8IDM7CisgZW1wbm8gfCAgZGVwbmFtZSAg fCBybiAKKy0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLQorICAgICA3IHwgZGV2ZWxvcCAgIHwgIDEK KyAgICAgOCB8IGRldmVsb3AgICB8ICAyCisgICAgIDIgfCBwZXJzb25uZWwgfCAgMQorICAgICA1 IHwgcGVyc29ubmVsIHwgIDIKKyAgICAgMSB8IHNhbGVzICAgICB8ICAxCisgICAgIDMgfCBzYWxl cyAgICAgfCAgMgorKDYgcm93cykKKworLS0gbGlrZXdpc2Ugd2l0aCBjb3VudChlbXBubykgaW5z dGVhZCBvZiByb3dfbnVtYmVyKCkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBkZXBuYW1lLAorICAgICAgICAgIHNhbGFyeSwK KyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIg Qlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgV2luZG93QWdnCisgICBSdW4gQ29uZGl0aW9uOiAoY291bnQoZW1wc2FsYXJ5 LmVtcG5vKSBPVkVSICg/KSA8PSAzKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBl bXBzYWxhcnkuZGVwbmFtZSwgZW1wc2FsYXJ5LnNhbGFyeSBERVNDCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gZW1wc2FsYXJ5CisoNSByb3dzKQorCistLSBhbmQgYWdhaW4sIGNoZWNrIHRoZSBy ZXN1bHRzIGFyZSB3aGF0IHdlIGV4cGVjdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBu bywKKyAgICAgICAgICBkZXBuYW1lLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3Vu dChlbXBubykgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIgQlkgc2FsYXJ5IERFU0Mp IGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKyBlbXBubyB8ICBkZXBu YW1lICB8IHNhbGFyeSB8IGMgCistLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLQorICAg ICA4IHwgZGV2ZWxvcCAgIHwgICA2MDAwIHwgMQorICAgIDEwIHwgZGV2ZWxvcCAgIHwgICA1MjAw IHwgMworICAgIDExIHwgZGV2ZWxvcCAgIHwgICA1MjAwIHwgMworICAgICAyIHwgcGVyc29ubmVs IHwgICAzOTAwIHwgMQorICAgICA1IHwgcGVyc29ubmVsIHwgICAzNTAwIHwgMgorICAgICAxIHwg c2FsZXMgICAgIHwgICA1MDAwIHwgMQorICAgICA0IHwgc2FsZXMgICAgIHwgICA0ODAwIHwgMwor ICAgICAzIHwgc2FsZXMgICAgIHwgICA0ODAwIHwgMworKDggcm93cykKKworLS0gU29tZSBtb3Jl IGNvbXBsZXggY2FzZXMgd2l0aCBtdWx0aXBsZSB3aW5kb3cgY2xhdXNlcworRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTSAoCisJU0VMRUNUICosCisJCWNvdW50KHNhbGFyeSkgT1ZF UiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgfHwgJycpIGMxLCAtLSB3MQorCQlyb3dfbnVtYmVyKCkg T1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUpIHJuLCAtLSB3MgorCQljb3VudCgqKSBPVkVSIChQ QVJUSVRJT04gQlkgZGVwbmFtZSkgYzIsIC0tIHcyCisJCWNvdW50KCopIE9WRVIgKFBBUlRJVElP TiBCWSAnJyB8fCBkZXBuYW1lKSBjMyAtLSB3MworCUZST00gZW1wc2FsYXJ5CispIGUgV0hFUkUg cm4gPD0gMSBBTkQgYzEgPD0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVyeSBTY2FuIG9uIGUK KyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIEZpbHRlcjogKChyb3dfbnVtYmVyKCkgT1ZFUiAo PykpIDw9IDEpCisgICAgICAgICBSdW4gQ29uZGl0aW9uOiAoY291bnQoZW1wc2FsYXJ5LnNhbGFy eSkgT1ZFUiAoPykgPD0gMykKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0 IEtleTogKCgoZW1wc2FsYXJ5LmRlcG5hbWUpOjp0ZXh0IHx8ICcnOjp0ZXh0KSkKKyAgICAgICAg ICAgICAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgICAgICAgICAgICAgIFJ1biBDb25kaXRpb246 IChyb3dfbnVtYmVyKCkgT1ZFUiAoPykgPD0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT b3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogZW1wc2FsYXJ5LmRlcG5h bWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTb3J0IEtleTogKCgnJzo6dGV4dCB8fCAoZW1wc2FsYXJ5LmRlcG5hbWUp Ojp0ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlbXBzYWxhcnkKKygxNCByb3dzKQorCistLSBFbnN1cmUgd2UgY29ycmVjdGx5IGZp bHRlciBvdXQgYWxsIG9mIHRoZSBydW4gY29uZGl0aW9ucyBmcm9tIGVhY2ggd2luZG93CitTRUxF Q1QgKiBGUk9NICgKKwlTRUxFQ1QgKiwKKwkJY291bnQoc2FsYXJ5KSBPVkVSIChQQVJUSVRJT04g QlkgZGVwbmFtZSB8fCAnJykgYzEsIC0tIHcxCisJCXJvd19udW1iZXIoKSBPVkVSIChQQVJUSVRJ T04gQlkgZGVwbmFtZSkgcm4sIC0tIHcyCisJCWNvdW50KCopIE9WRVIgKFBBUlRJVElPTiBCWSBk ZXBuYW1lKSBjMiwgLS0gdzIKKwkJY291bnQoKikgT1ZFUiAoUEFSVElUSU9OIEJZICcnIHx8IGRl cG5hbWUpIGMzIC0tIHczCisJRlJPTSBlbXBzYWxhcnkKKykgZSBXSEVSRSBybiA8PSAxIEFORCBj MSA8PSAzOworICBkZXBuYW1lICB8IGVtcG5vIHwgc2FsYXJ5IHwgZW5yb2xsX2RhdGUgfCBjMSB8 IHJuIHwgYzIgfCBjMyAKKy0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LSstLS0tKy0tLS0rLS0tLSstLS0tCisgcGVyc29ubmVsIHwgICAgIDUgfCAgIDM1MDAgfCAxMi0x MC0yMDA3ICB8ICAyIHwgIDEgfCAgMiB8ICAyCisgc2FsZXMgICAgIHwgICAgIDMgfCAgIDQ4MDAg fCAwOC0wMS0yMDA3ICB8ICAzIHwgIDEgfCAgMyB8ICAzCisoMiByb3dzKQorCistLSBUZXN0cyB0 byBlbnN1cmUgd2UgZG9uJ3QgcHVzaCBkb3duIHRoZSBydW4gY29uZGl0aW9uIHdoZW4gaXQncyBu b3QgdmFsaWQgdG8KKy0tIGRvIHNvLgorLS0gRW5zdXJlIHdlIGRvbid0IHB1c2ggZG93biB3aGVu IHRoZSBmcmFtZSBvcHRpb25zIHNob3cgdGhhdCB0aGUgd2luZG93CistLSBmdW5jdGlvbiBpcyBu b3QgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNv dW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJP VyBBTkQgVU5CT1VOREVEIEZPTExPV0lORykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hF UkUgYyA8PSAzOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU3Vi cXVlcnkgU2NhbiBvbiBlbXAKKyAgIEZpbHRlcjogKGVtcC5jIDw9IDMpCisgICAtPiAgV2luZG93 QWdnCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFy eS5zYWxhcnkgREVTQworICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQor KDYgcm93cykKKworLS0gRW5zdXJlIHdlIGRvbid0IHB1c2ggZG93biB3aGVuIHRoZSB3aW5kb3cg ZnVuY3Rpb24ncyBtb25vdG9uaWMgcHJvcGVydGllcworLS0gZG9uJ3QgbWF0Y2ggdGhhdCBvZiB0 aGUgY2xhdXNlcy4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVD VCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JE RVIgQlkgc2FsYXJ5KSBjCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSAzIDw9IGM7Cisg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFN1YnF1ZXJ5IFNjYW4gb24gZW1wCisgICBG aWx0ZXI6ICgzIDw9IGVtcC5jKQorICAgLT4gIFdpbmRvd0FnZworICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBlbXBzYWxhcnkuc2FsYXJ5CisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gZW1wc2FsYXJ5CisoNiByb3dzKQorCistLSBFbnN1cmUgd2UgZG9u J3QgcHVzaGRvd24gd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgd2luZG93IGNsYXVzZXMgdG8gZXZh bHVhdGUKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBu bywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JERVIgQlkg ZW1wbm8gREVTQykgYywKKyAgICAgICAgICBkZW5zZV9yYW5rKCkgT1ZFUiAoT1JERVIgQlkgc2Fs YXJ5IERFU0MpIGRyCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBkciA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTdWJxdWVyeSBTY2FuIG9uIGVtcAorICAgRmlsdGVyOiAoZW1wLmRy ID0gMSkKKyAgIC0+ICBXaW5kb3dBZ2cKKyAgICAgICAgIEZpbHRlcjogKChkZW5zZV9yYW5rKCkg T1ZFUiAoPykpIDw9IDEpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBL ZXk6IGVtcHNhbGFyeS5lbXBubyBERVNDCisgICAgICAgICAgICAgICAtPiAgV2luZG93QWdnCisg ICAgICAgICAgICAgICAgICAgICBSdW4gQ29uZGl0aW9uOiAoZGVuc2VfcmFuaygpIE9WRVIgKD8p IDw9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgU29ydCBLZXk6IGVtcHNhbGFyeS5zYWxhcnkgREVTQworICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcHNhbGFyeQorKDExIHJvd3MpCisKIC0tIFRl c3QgU29ydCBub2RlIGNvbGxhcHNpbmcKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCAqIEZS T00KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsCmluZGV4IDQxYThlMGQxNTIuLmVjOWVlOTdhNDUgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvd2luZG93LnNxbApAQCAtOTg4LDYgKzk4OCwyMTIgQEAgU0VMRUNUICogRlJP TQogICAgRlJPTSBlbXBzYWxhcnkpIGVtcAogV0hFUkUgZGVwbmFtZSA9ICdzYWxlcyc7CiAKKy0t IFRlc3Qgd2luZG93IGZ1bmN0aW9uIHJ1biBjb25kaXRpb25zIGFyZSBwcm9wZXJseSBwdXNoZWQg ZG93biBpbnRvIHRoZQorLS0gV2luZG93QWdnCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKE9S REVSIEJZIGVtcG5vKSBybgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgcm4gPCAzOwor CistLSBUaGUgZm9sbG93aW5nIDMgc3RhdGVtZW50cyBzaG91bGQgcmVzdWx0IHRoZSBzYW1lIHJl c3VsdC4KK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICByb3dfbnVt YmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitX SEVSRSBybiA8IDM7CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAg ICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFy eSkgZW1wCitXSEVSRSAzID4gcm47CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywK KyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9N IGVtcHNhbGFyeSkgZW1wCitXSEVSRSAyID49IHJuOworCistLSBFbnN1cmUgciA8PSAzIGlzIHB1 c2hlZCBkb3duIGludG8gdGhlIHJ1biBjb25kaXRpb24gb2YgdGhlIHdpbmRvdyBhZ2cKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAg ICBzYWxhcnksCisgICAgICAgICAgcmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBy CisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSByIDw9IDM7CisKK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgcmFuaygpIE9W RVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSByCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSByIDw9IDM7CisKKy0tIEVuc3VyZSBkciA9IDEgaXMgY29udmVydGVkIHRvIGRyIDw9IDEgdG8g Z2V0IGFsbCByb3dzIGxlYWRpbmcgdXAgdG8gZHIgPSAxCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAorICAgICAg ICAgIGRlbnNlX3JhbmsoKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQykgZHIKKyAgIEZST00g ZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGRyID0gMTsKKworU0VMRUNUICogRlJPTQorICAoU0VMRUNU IGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBkZW5zZV9yYW5rKCkgT1ZFUiAo T1JERVIgQlkgc2FsYXJ5IERFU0MpIGRyCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVSRSBk ciA9IDE7CisKKy0tIENoZWNrIENPVU5UKCkgYW5kIENPVU5UKCopCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAgICAgICAgc2FsYXJ5LAor ICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBjCisgICBGUk9N IGVtcHNhbGFyeSkgZW1wCitXSEVSRSBjIDw9IDM7CisKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVD VCBlbXBubywKKyAgICAgICAgICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JE RVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0g MzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5v LAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoT1JERVIg Qlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsK KworU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAg ICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZS T00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAg ICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkgREVTQyBST1dTIEJFVFdFRU4gQ1VS UkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBl bXAKK1dIRVJFIGMgPj0gMzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQor ICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFyeSwKKyAgICAgICAgICBjb3VudCgqKSBP VkVSICgpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDExIDw9IGM7CisKK0VYUExB SU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAg ICBzYWxhcnksCisgICAgICAgICAgY291bnQoKikgT1ZFUiAoT1JERVIgQlkgc2FsYXJ5IERFU0Mp IGMsCisgICAgICAgICAgZGVuc2VfcmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVNDKSBk cgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgZHIgPSAxOworCistLSBFbnN1cmUgd2Ug Z2V0IGEgcnVuIGNvbmRpdGlvbiB3aGVuIHRoZXJlJ3MgYSBQQVJUSVRJT04gQlkgY2xhdXNlCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAg ICAgICAgZGVwbmFtZSwKKyAgICAgICAgICByb3dfbnVtYmVyKCkgT1ZFUiAoUEFSVElUSU9OIEJZ IGRlcG5hbWUgT1JERVIgQlkgZW1wbm8pIHJuCisgICBGUk9NIGVtcHNhbGFyeSkgZW1wCitXSEVS RSBybiA8IDM7CisKKy0tIGFuZCBlbnN1cmUgd2UgZ2V0IHRoZSBjb3JyZWN0IHJlc3VsdHMgZnJv bSB0aGUgYWJvdmUgcGxhbgorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAg ICAgIGRlcG5hbWUsCisgICAgICAgICAgcm93X251bWJlcigpIE9WRVIgKFBBUlRJVElPTiBCWSBk ZXBuYW1lIE9SREVSIEJZIGVtcG5vKSBybgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUg cm4gPCAzOworCistLSBsaWtld2lzZSB3aXRoIGNvdW50KGVtcG5vKSBpbnN0ZWFkIG9mIHJvd19u dW1iZXIoKQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVt cG5vLAorICAgICAgICAgIGRlcG5hbWUsCisgICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNv dW50KGVtcG5vKSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSBPUkRFUiBCWSBzYWxhcnkgREVT QykgYworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworCistLSBhbmQgYWdh aW4sIGNoZWNrIHRoZSByZXN1bHRzIGFyZSB3aGF0IHdlIGV4cGVjdC4KK1NFTEVDVCAqIEZST00K KyAgKFNFTEVDVCBlbXBubywKKyAgICAgICAgICBkZXBuYW1lLAorICAgICAgICAgIHNhbGFyeSwK KyAgICAgICAgICBjb3VudChlbXBubykgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgT1JERVIg Qlkgc2FsYXJ5IERFU0MpIGMKKyAgIEZST00gZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIGMgPD0gMzsK KworLS0gU29tZSBtb3JlIGNvbXBsZXggY2FzZXMgd2l0aCBtdWx0aXBsZSB3aW5kb3cgY2xhdXNl cworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSAoCisJU0VMRUNUICosCisJCWNv dW50KHNhbGFyeSkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUgfHwgJycpIGMxLCAtLSB3MQor CQlyb3dfbnVtYmVyKCkgT1ZFUiAoUEFSVElUSU9OIEJZIGRlcG5hbWUpIHJuLCAtLSB3MgorCQlj b3VudCgqKSBPVkVSIChQQVJUSVRJT04gQlkgZGVwbmFtZSkgYzIsIC0tIHcyCisJCWNvdW50KCop IE9WRVIgKFBBUlRJVElPTiBCWSAnJyB8fCBkZXBuYW1lKSBjMyAtLSB3MworCUZST00gZW1wc2Fs YXJ5CispIGUgV0hFUkUgcm4gPD0gMSBBTkQgYzEgPD0gMzsKKworLS0gRW5zdXJlIHdlIGNvcnJl Y3RseSBmaWx0ZXIgb3V0IGFsbCBvZiB0aGUgcnVuIGNvbmRpdGlvbnMgZnJvbSBlYWNoIHdpbmRv dworU0VMRUNUICogRlJPTSAoCisJU0VMRUNUICosCisJCWNvdW50KHNhbGFyeSkgT1ZFUiAoUEFS VElUSU9OIEJZIGRlcG5hbWUgfHwgJycpIGMxLCAtLSB3MQorCQlyb3dfbnVtYmVyKCkgT1ZFUiAo UEFSVElUSU9OIEJZIGRlcG5hbWUpIHJuLCAtLSB3MgorCQljb3VudCgqKSBPVkVSIChQQVJUSVRJ T04gQlkgZGVwbmFtZSkgYzIsIC0tIHcyCisJCWNvdW50KCopIE9WRVIgKFBBUlRJVElPTiBCWSAn JyB8fCBkZXBuYW1lKSBjMyAtLSB3MworCUZST00gZW1wc2FsYXJ5CispIGUgV0hFUkUgcm4gPD0g MSBBTkQgYzEgPD0gMzsKKworLS0gVGVzdHMgdG8gZW5zdXJlIHdlIGRvbid0IHB1c2ggZG93biB0 aGUgcnVuIGNvbmRpdGlvbiB3aGVuIGl0J3Mgbm90IHZhbGlkIHRvCistLSBkbyBzby4KKworLS0g RW5zdXJlIHdlIGRvbid0IHB1c2ggZG93biB3aGVuIHRoZSBmcmFtZSBvcHRpb25zIHNob3cgdGhh dCB0aGUgd2luZG93CistLSBmdW5jdGlvbiBpcyBub3QgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5n CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisg ICAgICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIHNhbGFy eSBERVNDIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORykg YworICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgYyA8PSAzOworCistLSBFbnN1cmUgd2Ug ZG9uJ3QgcHVzaCBkb3duIHdoZW4gdGhlIHdpbmRvdyBmdW5jdGlvbidzIG1vbm90b25pYyBwcm9w ZXJ0aWVzCistLSBkb24ndCBtYXRjaCB0aGF0IG9mIHRoZSBjbGF1c2VzLgorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUICogRlJPTQorICAoU0VMRUNUIGVtcG5vLAorICAgICAgICAgIHNhbGFy eSwKKyAgICAgICAgICBjb3VudCgqKSBPVkVSIChPUkRFUiBCWSBzYWxhcnkpIGMKKyAgIEZST00g ZW1wc2FsYXJ5KSBlbXAKK1dIRVJFIDMgPD0gYzsKKworLS0gRW5zdXJlIHdlIGRvbid0IHB1c2hk b3duIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHdpbmRvdyBjbGF1c2VzIHRvIGV2YWx1YXRlCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisgIChTRUxFQ1QgZW1wbm8sCisgICAg ICAgICAgc2FsYXJ5LAorICAgICAgICAgIGNvdW50KCopIE9WRVIgKE9SREVSIEJZIGVtcG5vIERF U0MpIGMsCisgICAgICAgICAgZGVuc2VfcmFuaygpIE9WRVIgKE9SREVSIEJZIHNhbGFyeSBERVND KSBkcgorICAgRlJPTSBlbXBzYWxhcnkpIGVtcAorV0hFUkUgZHIgPSAxOworCiAtLSBUZXN0IFNv cnQgbm9kZSBjb2xsYXBzaW5nCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgKiBGUk9NCi0t IAoyLjMyLjAKCg== --000000000000d3085b05dc0759a1--