Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1adO0n-0007Y5-Tk for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Mar 2016 20:13:46 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1adO0n-00032V-EO for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Mar 2016 20:13:45 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1adO0e-0002nw-5S for pgsql-hackers@postgresql.org; Tue, 08 Mar 2016 20:13:36 +0000 Received: from mail-wm0-x234.google.com ([2a00:1450:400c:c09::234]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1adO0I-0002UT-3Z for pgsql-hackers@postgresql.org; Tue, 08 Mar 2016 20:13:35 +0000 Received: by mail-wm0-x234.google.com with SMTP id p65so43207405wmp.0 for ; Tue, 08 Mar 2016 12:13:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:date:in-reply-to:references:mime-version; bh=ag4OCT5r7E299NVz5A2cpBFBjW8goCM3ZYBurXmbkPU=; b=wTgUfdkzZFS2a0jvWQcrpk8jGZ20de0qcnNyVENUXCFl82AD4o8Qipg9/Bhgi5Yxdk sOCkeP30Z3megKFtrZKsm7iLvtliL4XCbFB8vPhP/PGqAt7YoVMefm5NcDU1+/qyupbK pqKMgIPmvMiaswNeL7nPnyfRCa04LNIqS1Ng1+8RPdN1bh7wWvFRriy4nbHiQS97ACXC 9shvIpBY+mCjh07rCHrLyGB9pPY8F/hMrfJ9p7cqQzV3IQ9eZi/YA5AupAI40EAKO53+ JeEgmvQJZAGCSJBrPi3Ia18+lH9RAU1LV0hYVJ2pFqwvtPnsX3dKMjg7WO5cCGPDxnTb TQnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:subject:from:to:date:in-reply-to :references:mime-version; bh=ag4OCT5r7E299NVz5A2cpBFBjW8goCM3ZYBurXmbkPU=; b=B2zsUIwtYDAwx0j6sqQO3pm0VF/sME9XROU/+KDvealzWd0f/9zcp+tebibf0LswvA wtrmZaR7ekc6pjSQh2OPHqn3YudcxBTnGYIZxmqtNvMyQVi+Uk56zRU+08xFP5VuUTft gWczQ6Dsz4N8x7VPJ5ZMu6l2Kmyv7VnAazNCbJuPidcAb27ZKYWW5U4Jqe2/1ingRFmG sokqvVGG4tRYVzhFGP6CQi4lCE8CSev0/C9n+qyerYFdokTrQXueZio66N7I7TDpwsVX fTDEP3Jfz2Xj9cVlmVZjaH3s9ZhLCt3S3NK/yXoKk471QF4DwCdnRSs7BB2jFPbiuKDQ CfmA== X-Gm-Message-State: AD7BkJJWeixWu8nKRtIQ8KMY2xieipLzKxX3ufpIrv4VW2nDXyqNA+RCimUayCfN/T+WwKgX4d+uTQuGa/LTGtU0giCuDWRyidOPs7tpfNBR6w1e2SslTtMO8sUw9s12wy34/miTFejEYedeZERmopviQxINxwZt6lhZ1GuIFNALQYvk07nVzUgFWgktADokZHmoe2GPoD9Y X-Received: by 10.194.171.66 with SMTP id as2mr31058338wjc.110.1457467993192; Tue, 08 Mar 2016 12:13:13 -0800 (PST) Received: from development (ip-78-45-216-26.net.upcbroadband.cz. [78.45.216.26]) by smtp.gmail.com with ESMTPSA id js8sm4543965wjc.37.2016.03.08.12.13.10 for (version=TLSv1/SSLv3 cipher=OTHER); Tue, 08 Mar 2016 12:13:11 -0800 (PST) Message-ID: <1457467988.15281.23.camel@2ndquadrant.com> Subject: Re: multivariate statistics v11 From: Tomas Vondra To: pgsql-hackers@postgresql.org Date: Tue, 08 Mar 2016 21:13:08 +0100 In-Reply-To: <56D6FF1C.5060303@2ndquadrant.com> References: <543AFA15.4080608@fuzzy.cz> <567AF104.80700@2ndquadrant.com> <569DBA67.9020403@2ndquadrant.com> <56D6FF1C.5060303@2ndquadrant.com> Content-Type: multipart/mixed; boundary="=-XN0O/2RNBH+/zPG4CJw8" X-Mailer: Evolution 3.12.11 (3.12.11-1.fc21) Mime-Version: 1.0 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org --=-XN0O/2RNBH+/zPG4CJw8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Hi, attached is v11 of the patch - this is mostly a cleanup of v10, removing redundant code, adding missing comments, removing obsolete FIXME/TODOs and so on. Overall this shaves ~20kB from the patch (not a primary objective, though). The one thing this (hopefully) fixes is handling of varRelid. Apparently I got that a slightly wrong in the previous versions. One thing I'm not quite sure about is schema of the new system catalog. The existing catalog pg_statistic uses generic design with stakindN, stanumbersN and stavaluesN columns, while the new catalog uses dedicated columns for each type of stats (MCV, histogram, ...). Not sure whether it's desirable to switch to the pg_statistic approach or not. There are a few things I plan to look into next: * possibly more cleanups in clausesel.c (I'm wondering if some pieces should be moved to utils/mvstats/*.c) * a few FIXMEs in the infrastructure (e.g. deriving a name when not specified in CREATE STATISTICS) * move the ndistinct coefficients after functional dependencies in the patch series (but only use them for GROUP BY for now) * extend the functional dependencies to handle multiple columns on the left side (condition), i.e. dependencies like (a,b) -> c * address a few remaining FIXMEs in MCV/histograms building regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename*0=0001-teach-pull_-varno-varattno-_walker-about-RestrictInf.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-teach-pull_-varno-varattno-_walker-about-RestrictInf.patch"; charset="UTF-8" RnJvbSAxOWRlZmE0ZThjMWU1NzhmM2NmNDA5OWIwNzI5MzU3ZWNjMzMzYzVh IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAx OTo1NjozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS85XSB0ZWFjaCBwdWxs Xyh2YXJub3x2YXJhdHRubylfd2Fsa2VyIGFib3V0IFJlc3RyaWN0SW5mbwoK b3RoZXJ3aXNlIHB1bGxfdmFybm9zIGZhaWxzIHdoZW4gcHJvY2Vzc2luZyBP UiBjbGF1c2VzCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdmFy LmMgfCAxNiArKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTYg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3Zhci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv dmFyLmMKaW5kZXggZGZmNTJjNC4uODBkMDFiZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvdmFyLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvdmFyLmMKQEAgLTE5Nyw2ICsxOTcsMTMgQEAg cHVsbF92YXJub3Nfd2Fsa2VyKE5vZGUgKm5vZGUsIHB1bGxfdmFybm9zX2Nv bnRleHQgKmNvbnRleHQpCiAJCWNvbnRleHQtPnN1YmxldmVsc191cC0tOwog CQlyZXR1cm4gcmVzdWx0OwogCX0KKwlpZiAoSXNBKG5vZGUsIFJlc3RyaWN0 SW5mbykpCisJeworCQlSZXN0cmljdEluZm8gKnJpbmZvID0gKFJlc3RyaWN0 SW5mbyopbm9kZTsKKwkJY29udGV4dC0+dmFybm9zID0gYm1zX2FkZF9tZW1i ZXJzKGNvbnRleHQtPnZhcm5vcywKKwkJCQkJCQkJCQkgIHJpbmZvLT5jbGF1 c2VfcmVsaWRzKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAlyZXR1cm4gZXhw cmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBwdWxsX3Zhcm5vc193YWxrZXIs CiAJCQkJCQkJCSAgKHZvaWQgKikgY29udGV4dCk7CiB9CkBAIC0yNDUsNiAr MjUyLDE1IEBAIHB1bGxfdmFyYXR0bm9zX3dhbGtlcihOb2RlICpub2RlLCBw dWxsX3ZhcmF0dG5vc19jb250ZXh0ICpjb250ZXh0KQogCQlyZXR1cm4gZmFs c2U7CiAJfQogCisJaWYgKElzQShub2RlLCBSZXN0cmljdEluZm8pKQorCXsK KwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKilub2Rl OworCisJCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKChOb2RlKily aW5mby0+Y2xhdXNlLAorCQkJCQkJCQkJICBwdWxsX3ZhcmF0dG5vc193YWxr ZXIsCisJCQkJCQkJCQkgICh2b2lkKikgY29udGV4dCk7CisJfQorCiAJLyog U2hvdWxkIG5vdCBmaW5kIGFuIHVucGxhbm5lZCBzdWJxdWVyeSAqLwogCUFz c2VydCghSXNBKG5vZGUsIFF1ZXJ5KSk7CiAKLS0gCjIuMS4wCgo= --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename="0002-shared-infrastructure-and-functional-dependencies.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0002-shared-infrastructure-and-functional-dependencies.patch"; charset="UTF-8" RnJvbSA0ODQxMjczMmI2ZTFjNjY3ZmQ2ZjBmN2QwMjViOTQxYWQwZTdjMWMx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHR2QGZ1enp5LmN6PgpEYXRlOiBTdW4sIDExIEphbiAyMDE1IDE5OjUxOjQ4 ICswMTAwClN1YmplY3Q6IFtQQVRDSCAyLzldIHNoYXJlZCBpbmZyYXN0cnVj dHVyZSBhbmQgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKCkJhc2ljIGluZnJh c3RydWN0dXJlIHNoYXJlZCBieSBhbGwga2luZHMgb2YgbXVsdGl2YXJpYXRl IHN0YXRzLCBtb3N0CmltcG9ydGFudGx5OgoKLSBhZGRzIGEgbmV3IHN5c3Rl bSBjYXRhbG9nIChwZ19tdl9zdGF0aXN0aWMpCi0gQ1JFQVRFIFNUQVRJU1RJ Q1MgbmFtZSBPTiB0YWJsZSAoY29sdW1ucykgV0lUSCAob3B0aW9ucykKLSBE Uk9QIFNUQVRJU1RJQ1MgbmFtZQotIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzICh0aGUgc2ltcGxlc3QgdHlwZSBvZgogIG11 bHRpdmFyaWF0ZSBzdGF0aXN0aWNzKQotIGJ1aWxkaW5nIGZ1bmN0aW9uYWwg ZGVwZW5kZW5jaWVzIGluIEFOQUxZWkUKLSB1cGRhdGVzIHJlZ3Jlc3Npb24g dGVzdHMgKG5ldyBjYXRhbG9nIGV0Yy4pCgpUaGlzIGRvZXMgbm90IGluY2x1 ZGUgYW55IGNoYW5nZXMgdG8gdGhlIG9wdGltaXplciwgaS5lLiBpdCBkb2Vz IG5vdAppbmZsdWVuY2UgdGhlIHF1ZXJ5IHBsYW5uaW5nIChzdWJqZWN0IHRv IGZvbGxvdy11cCBwYXRjaGVzKS4KClRoZSBjdXJyZW50IGltcGxlbWVudGF0 aW9uIHJlcXVpcmVzIGEgdmFsaWQgJ2x0b3ByJyBmb3IgdGhlIGNvbHVtbnMs IHNvCnRoYXQgd2UgY2FuIHNvcnQgdGhlIHNhbXBsZSByb3dzIGluIHZhcmlv dXMgd2F5cywgYm90aCBpbiB0aGlzIHBhdGNoCmFuZCBvdGhlciBraW5kcyBv ZiBzdGF0aXN0aWNzLiBNYXliZSB0aGlzIHJlc3RyaWN0aW9uIGNvdWxkIGJl IHJlbGF4ZWQKaW4gdGhlIGZ1dHVyZSwgcmVxdWlyaW5nIGp1c3QgJ2Vxb3By JyBpbiBjYXNlIG9mIHN0YXRzIG5vdCBzb3J0aW5nIHRoZQpkYXRhIChlLmcu IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGFuZCBNQ1YgbGlzdHMpLgoKTWF5 YmUgc29tZSBvZiB0aGUgc3RhdHMgKGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz IGFuZCBNQ1YgbGlzdCB3aXRoCmxpbWl0ZWQgZnVuY3Rpb25hbGl0eSkgbWln aHQgYmUgbWFkZSB0byB3b3JrIHdpdGggaGFzaGVzIG9mIHRoZSB2YWx1ZXMs CndoaWNoIGlzIHN1ZmZpY2llbnQgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25z LiBCdXQgdGhlIHF1ZXJpZXMgd291bGQKcmVxdWlyZSB0aGUgZXF1YWxpdHkg b3BlcmF0b3IgYW55d2F5LCBzbyBpdCdzIG5vdCByZWFsbHkgYSB3ZWFrZXIK cmVxdWlyZW1lbnQuIFRoZSBoYXNoZXMgbWlnaHQgcmVkdWNlIHNwYWNlIHJl cXVpcmVtZW50cywgdGhvdWdoLgoKVGhlIGFsZ29yaXRobSBkZXRlY3Rpbmcg dGhlIGRlcGVuZGVuY2llcyBpcyByYXRoZXIgc2ltcGxlIGFuZCBwcm9iYWJs eQpuZWVkcyBpbXByb3ZlbWVudHMsIHNvIHRoYXQgaXQgZGV0ZWN0cyBtb3Jl IGNvbXBsaWNhdGVkIGRlcGVuZGVuY2llcywKYW5kIGFsc28gdmFsaWRhdGlv biBvZiB0aGUgbWF0aC4KClRoZSBuYW1lICdmdW5jdGlvbmFsIGRlcGVuZGVu Y2llcycgaXMgbW9yZSBjb3JyZWN0ICh0aGFuICdhc3NvY2lhdGlvbgpydWxl cycpIGFzIGl0J3MgZXhhY3RseSB0aGUgbmFtZSB1c2VkIGluIHJlbGF0aW9u YWwgdGhlb3J5IChlc3AuIE5vcm1hbApGb3JtcykgZm9yIHRyYWNraW5nIGNv bHVtbi1sZXZlbCBkZXBlbmRlbmNpZXMuCgpUaGUgbXVsdGl2YXJpYXRlIHN0 YXRpc3RpY3MgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBpbiB0d28gc2l0 dWF0aW9ucwoKIChhKSBhZnRlciBhIERST1AgVEFCTEUgKG9idmlvdXNseSkK CiAoYikgYWZ0ZXIgQUxURVIgVEFCTEUgLi4uIERST1AgQ09MVU1OLCBpZiB0 aGUgc3RhdGlzdGljcyB3b3VsZCBiZQogICAgIGRlZmluZWQgb24gbGVzcyB0 aGFuIDIgY29sdW1ucyAocmVtYWluaW5nKQoKSWYgdGhlcmUgYXJlIG1vcmUg YXQgbGVhc3QgdHdvIHJlbWFpbmluZyBjb2x1bW5zLCB3ZSBrZWVwIHRoZQpz dGF0aXN0aWNzIGJ1dCBwZXJmb3JtIGNsZWFudXAgb24gdGhlIG5leHQgQU5B TFlaRS4gVGhlIGRyb3BwZWQgY29sdW1ucwphcmUgcmVtb3ZlZCBmcm9tIHN0 YWtleXMsIGFuZCB0aGUgbmV3IHN0YXRpc3RpY3MgaXMgYnVpbHQgb24gdGhl CnNtYWxsZXIgc2V0LgoKV2UgY2FuJ3QgZG8gdGhpcyBhdCBEUk9QIENPTFVN TiwgYmVjYXVzZSB0aGF0J2QgbGVhdmUgdXMgd2l0aCBpbnZhbGlkCnN0YXRp c3RpY3MsIG9yIHdlJ2QgaGF2ZSB0byB0aHJvdyBpdCBhd2F5IGFsdGhvdWdo IHdlIGNhbiBzdGlsbCB1c2UgaXQuClRoaXMgbGF6eSBhcHByb2FjaCBsZXRz IHVzIHVzZSB0aGUgc3RhdGlzdGljcyBhbHRob3VnaCBzb21lIG9mIHRoZQpj b2x1bW5zIGFyZSBkZWFkLgoKVGhpcyBhbHNvIGFkZHMgYSBzaW1wbGUgbGlz dCBvZiBzdGF0aXN0aWNzIHRvIFxkIGluIHBzcWwuCgpUaGlzIG1lYW5zIHRo ZSBzdGF0aXN0aWNzIGFyZSBjcmVhdGVkIHdpdGhpbiBhIHNjaGVtYSBieSB1 c2luZyBhCnF1YWxpZmllZCBuYW1lIChvciB1c2luZyB0aGUgZGVmYXVsdCBz Y2hlbWEpCgogICBDUkVBVEUgU1RBVElTVElDUyBzY2hlbWEuc3RhdGlzdGlj cyBPTiAuLi4KCmFuZCB0aGVuIGRyb3BwZWQgYnkgc3BlY2lmeWluZyBxdWFs aWZpZWQgbmFtZQoKICAgRFJPUCBTVEFUSVNUSUNTIHNjaGVtYS5zdGF0aXN0 aWNzCgpvciBzZWFyY2hpbmcgdGhyb3VnaCBzZWFyY2hfcGF0aCAoanVzdCBs aWtlIHdpdGggb3RoZXIgb2JqZWN0cykuCgpUaGlzIGFsc28gZ2V0cyByaWQg b2YgdGhlICIob3B0XylzdGF0c19uYW1lIiBkZWZpbml0aW9ucyBpbiBncmFt LnkgYW5kCmluc3RlYWQgcmVwbGFjZXMgdGhlbSB3aXRoIGp1c3QgIm9wdF9h bnlfbmFtZSIsIGFsdGhvdWdoIHRoZSBvcHRpb25hbApjYXNlIGlzIG5vdCBy ZWFsbHkgaGFuZGxlZCBjdXJyZW50bHkgLSB0aGVyZSdzIG5vIGdlbmVyYXRl ZCBuYW1lIHlldAooc28gZWl0aGVyIHdlIHNob3VsZCBkcm9wIGl0IG9yIGlt cGxlbWVudCBpdCkuCgpJJ20gbm90IGVudGlyZWx5IHN1cmUgbWFraW5nIHN0 YXRpc3RpY3Mgc2NoZW1hLXNwZWNpZmljIGlzIHRoYXQgYSBncmVhdAppZGVh LiBNYXliZSBpdCBzaG91bGQgYmUgImdsb2JhbCIsIGJ1dCB0aGF0IGRvZXMg bm90IHNlZW0gcmlnaHQgKGUuZy4KaXQgbWFrZXMgbXVsdGktdGVuYW50IHN5 c3RlbXMgYmFzZWQgb24gc2NoZW1hcyBtb3JlIGRpZmZpY3VsdCB0bwptYW5h Z2UsIGJlY2F1c2UgdGVuYW50cyB3b3VsZCBpbnRlcmFjdCkuCi0tLQogZG9j L3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5zZ21sICAgICAgICAgICAgICAgIHwg ICAyICsKIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dt bCAgICAgICB8IDE3NCArKysrKysrKysrCiBkb2Mvc3JjL3NnbWwvcmVmL2Ry b3Bfc3RhdGlzdGljcy5zZ21sICAgICAgICAgfCAgOTAgKysrKysrCiBkb2Mv c3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwgICAgICAgICAgICAgICAgICAgfCAg IDIgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cvZGVwZW5kZW5j eS5jICAgICAgICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvY2F0YWxv Zy9oZWFwLmMgICAgICAgICAgICAgICAgICAgIHwgMTAyICsrKysrKwogc3Jj L2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2UuYyAgICAgICAgICAgICAgIHwg IDUxICsrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMg ICAgICAgICAgIHwgIDIyICsrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3Rl bV92aWV3cy5zcWwgICAgICAgICAgfCAgMTEgKwogc3JjL2JhY2tlbmQvY29t bWFuZHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMv YmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMgICAgICAgICAgICAgICAgfCAg MjEgKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Ryb3BjbWRzLmMgICAgICAg ICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvc3RhdHNjbWRzLmMgICAgICAgICAgICAgIHwgMzMxICsrKysrKysrKysr KysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAg ICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1 bmNzLmMgICAgICAgICAgICAgICAgIHwgIDE2ICsKIHNyYy9iYWNrZW5kL25v ZGVzL291dGZ1bmNzLmMgICAgICAgICAgICAgICAgICB8ICAxOCArKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgICAgICAgIHwg IDYzICsrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAg ICAgICAgICAgICB8ICAzNCArLQogc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5 LmMgICAgICAgICAgICAgICAgICAgIHwgIDExICsKIHNyYy9iYWNrZW5kL3V0 aWxzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwg IDU5ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3N5c2NhY2hlLmMg ICAgICAgICAgICB8ICAyMyArKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9NYWtlZmlsZSAgICAgICAgICAgIHwgIDE3ICsKIHNyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvUkVBRE1FLmRlcGVuZGVuY2llcyB8IDIyMiArKysrKysr KysrKysrCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jICAg ICAgICAgICAgfCAzNTYgKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5oICAgICAgICAgICAgfCAgNzUg KysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvZGVwZW5kZW5jaWVz LmMgICAgICB8IDQzNyArKysrKysrKysrKysrKysrKysrKysrKysrKwogc3Jj L2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgIHwg IDQ0ICsrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmggICAg ICAgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2hlYXAu aCAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0 YWxvZy9pbmRleGluZy5oICAgICAgICAgICAgICAgIHwgICA3ICsKIHNyYy9p bmNsdWRlL2NhdGFsb2cvbmFtZXNwYWNlLmggICAgICAgICAgICAgICB8ICAg MiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oICAg ICAgICAgfCAgNzMgKysrKysKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5oICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9jYXRh bG9nL3RvYXN0aW5nLmggICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZGVmcmVtLmggICAgICAgICAgICAgICAgIHwgICA0 ICsKIHNyYy9pbmNsdWRlL25vZGVzL25vZGVzLmggICAgICAgICAgICAgICAg ICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg ICAgICAgICAgICAgICAgfCAgMTIgKwogc3JjL2luY2x1ZGUvbm9kZXMvcmVs YXRpb24uaCAgICAgICAgICAgICAgICAgIHwgIDI4ICsrCiBzcmMvaW5jbHVk ZS91dGlscy9tdnN0YXRzLmggICAgICAgICAgICAgICAgICAgfCAgNzAgKysr KysKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oICAg ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvc3lz Y2FjaGUuaCAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0ICAgICAgICAgICB8ICAgOSArCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQgICAg fCAgIDEgKwogNDcgZmlsZXMgY2hhbmdlZCwgMjQzMiBpbnNlcnRpb25zKCsp LCAxMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkb2Mvc3JjL3NnbWwvcmVmL2Ryb3Bfc3RhdGlzdGljcy5zZ21s CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Rh dHNjbWRzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuZGVwZW5kZW5jaWVzCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21t b24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvY29tbW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL2RlcGVuZGVuY2llcy5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMu aAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvYWxsZmlsZXMuc2dtbAppbmRleCBiZjk1 NDUzLi5jMGY3NjUzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2Fs bGZpbGVzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9hbGxmaWxlcy5z Z21sCkBAIC03Niw2ICs3Niw3IEBAIENvbXBsZXRlIGxpc3Qgb2YgdXNhYmxl IHNnbWwgc291cmNlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgogPCFFTlRJ VFkgY3JlYXRlU2NoZW1hICAgICAgIFNZU1RFTSAiY3JlYXRlX3NjaGVtYS5z Z21sIj4KIDwhRU5USVRZIGNyZWF0ZVNlcXVlbmNlICAgICBTWVNURU0gImNy ZWF0ZV9zZXF1ZW5jZS5zZ21sIj4KIDwhRU5USVRZIGNyZWF0ZVNlcnZlciAg ICAgICBTWVNURU0gImNyZWF0ZV9zZXJ2ZXIuc2dtbCI+Cis8IUVOVElUWSBj cmVhdGVTdGF0aXN0aWNzICAgU1lTVEVNICJjcmVhdGVfc3RhdGlzdGljcy5z Z21sIj4KIDwhRU5USVRZIGNyZWF0ZVRhYmxlICAgICAgICBTWVNURU0gImNy ZWF0ZV90YWJsZS5zZ21sIj4KIDwhRU5USVRZIGNyZWF0ZVRhYmxlQXMgICAg ICBTWVNURU0gImNyZWF0ZV90YWJsZV9hcy5zZ21sIj4KIDwhRU5USVRZIGNy ZWF0ZVRhYmxlU3BhY2UgICBTWVNURU0gImNyZWF0ZV90YWJsZXNwYWNlLnNn bWwiPgpAQCAtMTE5LDYgKzEyMCw3IEBAIENvbXBsZXRlIGxpc3Qgb2YgdXNh YmxlIHNnbWwgc291cmNlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LgogPCFF TlRJVFkgZHJvcFNjaGVtYSAgICAgICAgIFNZU1RFTSAiZHJvcF9zY2hlbWEu c2dtbCI+CiA8IUVOVElUWSBkcm9wU2VxdWVuY2UgICAgICAgU1lTVEVNICJk cm9wX3NlcXVlbmNlLnNnbWwiPgogPCFFTlRJVFkgZHJvcFNlcnZlciAgICAg ICAgIFNZU1RFTSAiZHJvcF9zZXJ2ZXIuc2dtbCI+Cis8IUVOVElUWSBkcm9w U3RhdGlzdGljcyAgICAgU1lTVEVNICJkcm9wX3N0YXRpc3RpY3Muc2dtbCI+ CiA8IUVOVElUWSBkcm9wVGFibGUgICAgICAgICAgU1lTVEVNICJkcm9wX3Rh YmxlLnNnbWwiPgogPCFFTlRJVFkgZHJvcFRhYmxlU3BhY2UgICAgIFNZU1RF TSAiZHJvcF90YWJsZXNwYWNlLnNnbWwiPgogPCFFTlRJVFkgZHJvcFRyYW5z Zm9ybSAgICAgIFNZU1RFTSAiZHJvcF90cmFuc2Zvcm0uc2dtbCI+CmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNn bWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2ZWFlMwot LS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0 YXRpc3RpY3Muc2dtbApAQCAtMCwwICsxLDE3NCBAQAorPCEtLQorZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCitQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9IlNRTC1DUkVB VEVTVEFUSVNUSUNTIj4KKyA8aW5kZXh0ZXJtIHpvbmU9InNxbC1jcmVhdGVz dGF0aXN0aWNzIj4KKyAgPHByaW1hcnk+Q1JFQVRFIFNUQVRJU1RJQ1M8L3By aW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVu dHJ5dGl0bGU+Q1JFQVRFIFNUQVRJU1RJQ1M8L3JlZmVudHJ5dGl0bGU+Cisg IDxtYW52b2xudW0+NzwvbWFudm9sbnVtPgorICA8cmVmbWlzY2luZm8+U1FM IC0gTGFuZ3VhZ2UgU3RhdGVtZW50czwvcmVmbWlzY2luZm8+CisgPC9yZWZt ZXRhPgorCisgPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPkNSRUFURSBTVEFU SVNUSUNTPC9yZWZuYW1lPgorICA8cmVmcHVycG9zZT5kZWZpbmUgYSBuZXcg c3RhdGlzdGljczwvcmVmcHVycG9zZT4KKyA8L3JlZm5hbWVkaXY+CisKKyA8 cmVmc3lub3BzaXNkaXY+Cis8c3lub3BzaXM+CitDUkVBVEUgU1RBVElTVElD UyBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+c3RhdGlzdGljc19uYW1lPC9yZXBsYWNlYWJsZT4gT04gPHJlcGxh Y2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlX25hbWU8L3JlcGxhY2Vh YmxlPiAoIFsKKyAgeyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiB9IF0gWywgLi4uXSkKK1sgV0lU SCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNz X3BhcmFtZXRlcjwvcmVwbGFjZWFibGU+IFs9IDxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+XSBbLCAuLi4gXSAp Cis8L3N5bm9wc2lzPgorCisgPC9yZWZzeW5vcHNpc2Rpdj4KKworIDxyZWZz ZWN0MSBpZD0iU1FMLUNSRUFURVNUQVRJU1RJQ1MtZGVzY3JpcHRpb24iPgor ICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgorCisgIDxwYXJhPgorICAg PGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+IHdpbGwgY3Jl YXRlIGEgbmV3IG11bHRpdmFyaWF0ZQorICAgc3RhdGlzdGljcyBvbiB0aGUg dGFibGUuIFRoZSBzdGF0aXN0aWNzIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUg aW4gdGhlCisgICBjdXJyZW50IGRhdGFiYXNlLiBUaGUgc3RhdGlzdGljcyB3 aWxsIGJlIG93bmVkIGJ5IHRoZSB1c2VyIGlzc3VpbmcKKyAgIHRoZSBjb21t YW5kLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJZiBhIHNjaGVtYSBu YW1lIGlzIGdpdmVuIChmb3IgZXhhbXBsZSwgPGxpdGVyYWw+Q1JFQVRFIFNU QVRJU1RJQ1MKKyAgIG15c2NoZW1hLm15c3RhdCAuLi48Lz4pIHRoZW4gdGhl IHN0YXRpc3RpY3MgaXMgY3JlYXRlZCBpbiB0aGUgc3BlY2lmaWVkCisgICBz Y2hlbWEuICBPdGhlcndpc2UgaXQgaXMgY3JlYXRlZCBpbiB0aGUgY3VycmVu dCBzY2hlbWEuICBUaGUgbmFtZSBvZgorICAgdGhlIHRhYmxlIG11c3QgYmUg ZGlzdGluY3QgZnJvbSB0aGUgbmFtZSBvZiBhbnkgb3RoZXIgc3RhdGlzdGlj cyBpbiB0aGUKKyAgIHNhbWUgc2NoZW1hLgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBUbyBiZSBhYmxlIHRvIGNyZWF0ZSBhIHRhYmxlLCB5b3UgbXVz dCBoYXZlIDxsaXRlcmFsPlVTQUdFPC9saXRlcmFsPgorICAgcHJpdmlsZWdl IG9uIGFsbCBjb2x1bW4gdHlwZXMgb3IgdGhlIHR5cGUgaW4gdGhlIDxsaXRl cmFsPk9GPC9saXRlcmFsPgorICAgY2xhdXNlLCByZXNwZWN0aXZlbHkuCisg IDwvcGFyYT4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0 bGU+UGFyYW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKwor ICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5JRiBOT1Qg RVhJU1RTPC8+PC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICBEbyBub3QgdGhyb3cgYW4gZXJyb3IgaWYgYSBzdGF0aXN0aWNz IHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4KKyAgICAgIEEg bm90aWNlIGlzIGlzc3VlZCBpbiB0aGlzIGNhc2UuICBOb3RlIHRoYXQgdGhl cmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQKKyAgICAgIHRoZSBleGlzdGluZyBz dGF0aXN0aWNzIGlzIGFueXRoaW5nIGxpa2UgdGhlIG9uZSB0aGF0IHdvdWxk IGhhdmUgYmVlbgorICAgICAgY3JlYXRlZC4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxp c3RlbnRyeT4KKyAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+c3RhdGlzdGljc19uYW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBuYW1lIChv cHRpb25hbGx5IHNjaGVtYS1xdWFsaWZpZWQpIG9mIHRoZSBzdGF0aXN0aWNz IHRvIGJlIGNyZWF0ZWQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxl X25hbWU8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+Cisg ICAgIDxwYXJhPgorICAgICAgVGhlIG5hbWUgKG9wdGlvbmFsbHkgc2NoZW1h LXF1YWxpZmllZCkgb2YgdGhlIHRhYmxlIHRoZSBzdGF0aXN0aWNzIHNob3Vs ZAorICAgICAgYmUgY3JlYXRlZCBvbi4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhlIG5hbWUgb2YgYSBjb2x1 bW4gdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHN0YXRpc3RpY3MuCisgICAgIDwv cGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisK KyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+V0lUSCAo IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNzX3Bh cmFtZXRlcjwvcmVwbGFjZWFibGU+IFs9IDxyZXBsYWNlYWJsZSBjbGFzcz0i UEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+XSBbLCAuLi4gXSApPC9s aXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgor ICAgICAgLi4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgPHJl ZnNlY3QyIGlkPSJTUUwtQ1JFQVRFU1RBVElTVElDUy1wYXJhbWV0ZXJzIj4K KyAgIDx0aXRsZSBpZD0iU1FMLUNSRUFURVNUQVRJU1RJQ1MtcGFyYW1ldGVy cy10aXRsZSI+U3RhdGlzdGljcyBQYXJhbWV0ZXJzPC90aXRsZT4KKworIDxp bmRleHRlcm0gem9uZT0ic3FsLWNyZWF0ZXN0YXRpc3RpY3MtcGFyYW1ldGVy cyI+CisgIDxwcmltYXJ5PnN0YXRpc3RpY3MgcGFyYW1ldGVyczwvcHJpbWFy eT4KKyA8L2luZGV4dGVybT4KKworICAgPHBhcmE+CisgICAgVGhlIDxsaXRl cmFsPldJVEg8Lz4gY2xhdXNlIGNhbiBzcGVjaWZ5IDxmaXJzdHRlcm0+c3Rh dGlzdGljcyBwYXJhbWV0ZXJzPC8+CisgICAgZm9yIHN0YXRpc3RpY3MuIFRo ZSBjdXJyZW50bHkgYXZhaWxhYmxlIHBhcmFtZXRlcnMgYXJlIGxpc3RlZCBi ZWxvdy4KKyAgIDwvcGFyYT4KKworICAgPHZhcmlhYmxlbGlzdD4KKworICAg PHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5kZXBlbmRlbmNp ZXM8Lz4gKDx0eXBlPmJvb2xlYW48Lz4pPC90ZXJtPgorICAgIDxsaXN0aXRl bT4KKyAgICAgPHBhcmE+CisgICAgICBFbmFibGVzIGZ1bmN0aW9uYWwgZGVw ZW5kZW5jaWVzIGZvciB0aGUgc3RhdGlzdGljcy4KKyAgICAgPC9wYXJhPgor ICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPC92 YXJpYWJsZWxpc3Q+CisKKyAgPC9yZWZzZWN0Mj4KKyA8L3JlZnNlY3QxPgor CisgPHJlZnNlY3QxIGlkPSJTUUwtQ1JFQVRFU1RBVElTVElDUy1ub3RlcyI+ CisgIDx0aXRsZT5Ob3RlczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAg Li4uCisgICAgPC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworCisgPHJlZnNl Y3QxIGlkPSJTUUwtQ1JFQVRFU1RBVElTVElDUy1leGFtcGxlcyI+CisgIDx0 aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKyAgPHBhcmE+CisgICAuLi4KKyAg PC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRp dGxlPkNvbXBhdGliaWxpdHk8L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhl cmUncyBubyA8Y29tbWFuZD5DUkVBVEUgU1RBVElTVElDUzwvY29tbWFuZD4g Y29tbWFuZCBpbiB0aGUgU1FMIHN0YW5kYXJkLgorICA8L3BhcmE+CisgPC9y ZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAgPHRpdGxlPlNlZSBBbHNvPC90 aXRsZT4KKworICA8c2ltcGxlbGlzdCB0eXBlPSJpbmxpbmUiPgorICAgPG1l bWJlcj48eHJlZiBsaW5rZW5kPSJzcWwtZHJvcHN0YXRpc3RpY3MiPjwvbWVt YmVyPgorICA8L3NpbXBsZWxpc3Q+CisgPC9yZWZzZWN0MT4KKzwvcmVmZW50 cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2Ryb3Bfc3RhdGlz dGljcy5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9kcm9wX3N0YXRpc3RpY3Mu c2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Mw YjcwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9kcm9w X3N0YXRpc3RpY3Muc2dtbApAQCAtMCwwICsxLDkwIEBACis8IS0tCitkb2Mv c3JjL3NnbWwvcmVmL2Ryb3Bfc3RhdGlzdGljcy5zZ21sCitQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KKy0tPgorCis8cmVmZW50cnkgaWQ9IlNRTC1EUk9Q U1RBVElTVElDUyI+CisgPGluZGV4dGVybSB6b25lPSJzcWwtZHJvcHN0YXRp c3RpY3MiPgorICA8cHJpbWFyeT5EUk9QIFNUQVRJU1RJQ1M8L3ByaW1hcnk+ CisgPC9pbmRleHRlcm0+CisKKyA8cmVmbWV0YT4KKyAgPHJlZmVudHJ5dGl0 bGU+RFJPUCBTVEFUSVNUSUNTPC9yZWZlbnRyeXRpdGxlPgorICA8bWFudm9s bnVtPjc8L21hbnZvbG51bT4KKyAgPHJlZm1pc2NpbmZvPlNRTCAtIExhbmd1 YWdlIFN0YXRlbWVudHM8L3JlZm1pc2NpbmZvPgorIDwvcmVmbWV0YT4KKwor IDxyZWZuYW1lZGl2PgorICA8cmVmbmFtZT5EUk9QIFNUQVRJU1RJQ1M8L3Jl Zm5hbWU+CisgIDxyZWZwdXJwb3NlPnJlbW92ZSBhIHN0YXRpc3RpY3M8L3Jl ZnB1cnBvc2U+CisgPC9yZWZuYW1lZGl2PgorCisgPHJlZnN5bm9wc2lzZGl2 PgorPHN5bm9wc2lzPgorRFJPUCBTVEFUSVNUSUNTIFsgSUYgRVhJU1RTIF0g PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPm5hbWU8L3JlcGxhY2Vh YmxlPiBbLCAuLi5dCis8L3N5bm9wc2lzPgorIDwvcmVmc3lub3BzaXNkaXY+ CisKKyA8cmVmc2VjdDE+CisgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+ CisKKyAgPHBhcmE+CisgICA8Y29tbWFuZD5EUk9QIFNUQVRJU1RJQ1M8L2Nv bW1hbmQ+IHJlbW92ZXMgc3RhdGlzdGljcyBmcm9tIHRoZSBkYXRhYmFzZS4K KyAgIE9ubHkgdGhlIHN0YXRpc3RpY3Mgb3duZXIsIHRoZSBzY2hlbWEgb3du ZXIsIGFuZCBzdXBlcnVzZXIgY2FuIGRyb3AgYQorICAgc3RhdGlzdGljcy4K KyAgPC9wYXJhPgorCisgPC9yZWZzZWN0MT4KKworIDxyZWZzZWN0MT4KKyAg PHRpdGxlPlBhcmFtZXRlcnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+ CisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxsaXRlcmFsPklGIEVY SVNUUzwvbGl0ZXJhbD48L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8 cGFyYT4KKyAgICAgIERvIG5vdCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgc3Rh dGlzdGljcyBkb2VzIG5vdCBleGlzdC4gQSBub3RpY2UgaXMKKyAgICAgIGlz c3VlZCBpbiB0aGlzIGNhc2UuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPm5h bWU8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAg IDxwYXJhPgorICAgICAgVGhlIG5hbWUgKG9wdGlvbmFsbHkgc2NoZW1hLXF1 YWxpZmllZCkgb2YgdGhlIHN0YXRpc3RpY3MgdG8gZHJvcC4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwor ICA8L3ZhcmlhYmxlbGlzdD4KKyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3Qx PgorICA8dGl0bGU+RXhhbXBsZXM8L3RpdGxlPgorCisgIDxwYXJhPgorICAg Li4uCisgIDwvcGFyYT4KKworIDwvcmVmc2VjdDE+CisKKyA8cmVmc2VjdDE+ CisgIDx0aXRsZT5Db21wYXRpYmlsaXR5PC90aXRsZT4KKworICA8cGFyYT4K KyAgIFRoZXJlJ3Mgbm8gPGNvbW1hbmQ+RFJPUCBTVEFUSVNUSUNTPC9jb21t YW5kPiBjb21tYW5kIGluIHRoZSBTUUwgc3RhbmRhcmQuCisgIDwvcGFyYT4K KyA8L3JlZnNlY3QxPgorCisgPHJlZnNlY3QxPgorICA8dGl0bGU+U2VlIEFs c288L3RpdGxlPgorCisgIDxzaW1wbGVsaXN0IHR5cGU9ImlubGluZSI+Cisg ICA8bWVtYmVyPjx4cmVmIGxpbmtlbmQ9InNxbC1jcmVhdGVzdGF0aXN0aWNz Ij48L21lbWJlcj4KKyAgPC9zaW1wbGVsaXN0PgorIDwvcmVmc2VjdDE+CisK KzwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmZXJl bmNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmZXJlbmNlLnNnbWwKaW5kZXgg MDMwMjBkZi4uMmIwN2IyZCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Jl ZmVyZW5jZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWZlcmVuY2Uuc2dt bApAQCAtMTA0LDYgKzEwNCw3IEBACiAgICAmY3JlYXRlU2NoZW1hOwogICAg JmNyZWF0ZVNlcXVlbmNlOwogICAgJmNyZWF0ZVNlcnZlcjsKKyAgICZjcmVh dGVTdGF0aXN0aWNzOwogICAgJmNyZWF0ZVRhYmxlOwogICAgJmNyZWF0ZVRh YmxlQXM7CiAgICAmY3JlYXRlVGFibGVTcGFjZTsKQEAgLTE0Nyw2ICsxNDgs NyBAQAogICAgJmRyb3BTY2hlbWE7CiAgICAmZHJvcFNlcXVlbmNlOwogICAg JmRyb3BTZXJ2ZXI7CisgICAmZHJvcFN0YXRpc3RpY3M7CiAgICAmZHJvcFRh YmxlOwogICAgJmRyb3BUYWJsZVNwYWNlOwogICAgJmRyb3BUU0NvbmZpZzsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9jYXRhbG9nL01ha2VmaWxlCmluZGV4IDI1MTMwZWMuLjA1 OGI4YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9NYWtlZmlsZQpAQCAtMzIs NiArMzIsNyBAQCBQT1NUR1JFU19CS0lfU1JDUyA9ICQoYWRkcHJlZml4ICQo dG9wX3NyY2Rpcikvc3JjL2luY2x1ZGUvY2F0YWxvZy8sXAogCXBnX2F0dHJk ZWYuaCBwZ19jb25zdHJhaW50LmggcGdfaW5oZXJpdHMuaCBwZ19pbmRleC5o IHBnX29wZXJhdG9yLmggXAogCXBnX29wZmFtaWx5LmggcGdfb3BjbGFzcy5o IHBnX2FtLmggcGdfYW1vcC5oIHBnX2FtcHJvYy5oIFwKIAlwZ19sYW5ndWFn ZS5oIHBnX2xhcmdlb2JqZWN0X21ldGFkYXRhLmggcGdfbGFyZ2VvYmplY3Qu aCBwZ19hZ2dyZWdhdGUuaCBcCisJcGdfbXZfc3RhdGlzdGljLmggXAogCXBn X3N0YXRpc3RpYy5oIHBnX3Jld3JpdGUuaCBwZ190cmlnZ2VyLmggcGdfZXZl bnRfdHJpZ2dlci5oIHBnX2Rlc2NyaXB0aW9uLmggXAogCXBnX2Nhc3QuaCBw Z19lbnVtLmggcGdfbmFtZXNwYWNlLmggcGdfY29udmVyc2lvbi5oIHBnX2Rl cGVuZC5oIFwKIAlwZ19kYXRhYmFzZS5oIHBnX2RiX3JvbGVfc2V0dGluZy5o IHBnX3RhYmxlc3BhY2UuaCBwZ19wbHRlbXBsYXRlLmggXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5LmMgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYwppbmRleCBjNDhlMzdiLi44MjAw NDU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVu Y3kuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYwpA QCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWln bl9zZXJ2ZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29w Y2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCkBA IC0xNjAsNyArMTYxLDggQEAgc3RhdGljIGNvbnN0IE9pZCBvYmplY3RfY2xh c3Nlc1tdID0gewogCUV4dGVuc2lvblJlbGF0aW9uSWQsCQkvKiBPQ0xBU1Nf RVhURU5TSU9OICovCiAJRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwJCS8qIE9D TEFTU19FVkVOVF9UUklHR0VSICovCiAJUG9saWN5UmVsYXRpb25JZCwJCQkv KiBPQ0xBU1NfUE9MSUNZICovCi0JVHJhbnNmb3JtUmVsYXRpb25JZAkJCS8q IE9DTEFTU19UUkFOU0ZPUk0gKi8KKwlUcmFuc2Zvcm1SZWxhdGlvbklkLAkJ LyogT0NMQVNTX1RSQU5TRk9STSAqLworCU12U3RhdGlzdGljUmVsYXRpb25J ZAkJLyogT0NMQVNTX1NUQVRJU1RJQ1MgKi8KIH07CiAKIApAQCAtMTI3Miw2 ICsxMjc0LDEwIEBAIGRvRGVsZXRpb24oY29uc3QgT2JqZWN0QWRkcmVzcyAq b2JqZWN0LCBpbnQgZmxhZ3MpCiAJCQlEcm9wVHJhbnNmb3JtQnlJZChvYmpl Y3QtPm9iamVjdElkKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgT0NMQVNTX1NU QVRJU1RJQ1M6CisJCQlSZW1vdmVTdGF0aXN0aWNzQnlJZChvYmplY3QtPm9i amVjdElkKTsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVS Uk9SLCAidW5yZWNvZ25pemVkIG9iamVjdCBjbGFzczogJXUiLAogCQkJCSBv YmplY3QtPmNsYXNzSWQpOwpAQCAtMjQxNSw2ICsyNDIxLDkgQEAgZ2V0T2Jq ZWN0Q2xhc3MoY29uc3QgT2JqZWN0QWRkcmVzcyAqb2JqZWN0KQogCiAJCWNh c2UgVHJhbnNmb3JtUmVsYXRpb25JZDoKIAkJCXJldHVybiBPQ0xBU1NfVFJB TlNGT1JNOworCisJCWNhc2UgTXZTdGF0aXN0aWNSZWxhdGlvbklkOgorCQkJ cmV0dXJuIE9DTEFTU19TVEFUSVNUSUNTOwogCX0KIAogCS8qIHNob3VsZG4n dCBnZXQgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9oZWFwLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYwppbmRleCA2 YTRhOWQ5Li5lN2Q5YWFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRh bG9nL2hlYXAuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYwpA QCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3Ry YWludF9mbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl90YWJs ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19z dGF0aXN0aWMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2Uu aCIKQEAgLTE2MTMsNyArMTYxNCwxMCBAQCBSZW1vdmVBdHRyaWJ1dGVCeUlk KE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pCiAJaGVhcF9jbG9zZShh dHRyX3JlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlpZiAoYXR0bnVtID4g MCkKKwl7CiAJCVJlbW92ZVN0YXRpc3RpY3MocmVsaWQsIGF0dG51bSk7CisJ CVJlbW92ZU1WU3RhdGlzdGljcyhyZWxpZCwgYXR0bnVtKTsKKwl9CiAKIAly ZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CiB9CkBAIC0xODQxLDYgKzE4 NDUsMTEgQEAgaGVhcF9kcm9wX3dpdGhfY2F0YWxvZyhPaWQgcmVsaWQpCiAJ UmVtb3ZlU3RhdGlzdGljcyhyZWxpZCwgMCk7CiAKIAkvKgorCSAqIGRlbGV0 ZSBtdWx0aS12YXJpYXRlIHN0YXRpc3RpY3MKKwkgKi8KKwlSZW1vdmVNVlN0 YXRpc3RpY3MocmVsaWQsIDApOworCisJLyoKIAkgKiBkZWxldGUgYXR0cmli dXRlIHR1cGxlcwogCSAqLwogCURlbGV0ZUF0dHJpYnV0ZVR1cGxlcyhyZWxp ZCk7CkBAIC0yNjk2LDYgKzI3MDUsOTkgQEAgUmVtb3ZlU3RhdGlzdGljcyhP aWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtKQogCiAKIC8qCisgKiBSZW1v dmVNVlN0YXRpc3RpY3MgLS0tIHJlbW92ZSBlbnRyaWVzIGluIHBnX212X3N0 YXRpc3RpYyBmb3IgYSByZWwKKyAqCisgKiBJZiBhdHRudW0gaXMgemVybywg cmVtb3ZlIGFsbCBlbnRyaWVzIGZvciByZWw7IGVsc2UgcmVtb3ZlIG9ubHkg dGhlIG9uZShzKQorICogZm9yIHRoYXQgY29sdW1uLgorICovCit2b2lkCitS ZW1vdmVNVlN0YXRpc3RpY3MoT2lkIHJlbGlkLCBBdHRyTnVtYmVyIGF0dG51 bSkKK3sKKwlSZWxhdGlvbglwZ212c3RhdGlzdGljOworCVR1cGxlRGVzYwl0 dXBkZXNjID0gTlVMTDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlE YXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwkvKgorCSAqIFdoZW4g ZHJvcHBpbmcgYSBjb2x1bW4sIHdlJ2xsIGRyb3Agc3RhdGlzdGljcyB3aXRo IGEgc2luZ2xlCisJICogcmVtYWluaW5nICh1bmRyb3BwZWQgY29sdW1uKS4g VG8gZG8gdGhhdCwgd2UgbmVlZCB0aGUgdHVwbGUKKwkgKiBkZXNjcmlwdG9y LgorCSAqCisJICogV2UgYWxyZWFkeSBoYXZlIHRoZSByZWxhdGlvbiBsb2Nr ZWQgKGFzIHdlJ3JlIHJ1bm5pbmcgQUxURVIKKwkgKiBUQUJMRSAuLi4gRFJP UCBDT0xVTU4pLCBzbyB3ZSdsbCBqdXN0IGdldCB0aGUgZGVzY3JpcHRvciBo ZXJlLgorCSAqLworCWlmIChhdHRudW0gIT0gMCkKKwl7CisJCVJlbGF0aW9u IHJlbCA9IHJlbGF0aW9uX29wZW4ocmVsaWQsIE5vTG9jayk7CisKKwkJLyog bXVsdGl2YXJpYXRlIHN0YXRzIGFyZSBzdXBwb3J0ZWQgb24gdGFibGVzIGFu ZCBtYXR2aWV3cyAqLworCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0g UkVMS0lORF9SRUxBVElPTiB8fAorCQkJcmVsLT5yZF9yZWwtPnJlbGtpbmQg PT0gUkVMS0lORF9NQVRWSUVXKQorCQkJdHVwZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IocmVsKTsKKworCQlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7 CisJfQorCisJaWYgKHR1cGRlc2MgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ cGdtdnN0YXRpc3RpYyA9IGhlYXBfb3BlbihNdlN0YXRpc3RpY1JlbGF0aW9u SWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleSwK KwkJCQlBbnVtX3BnX212X3N0YXRpc3RpY19zdGFyZWxpZCwKKwkJCQlCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXRE YXR1bShyZWxpZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihw Z212c3RhdGlzdGljLAorCQkJCQkJCSAgTXZTdGF0aXN0aWNSZWxpZEluZGV4 SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKworCS8qIHdl IG11c3QgbG9vcCBldmVuIHdoZW4gYXR0bnVtICE9IDAsIGluIGNhc2Ugb2Yg aW5oZXJpdGVkIHN0YXRzICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQo dHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCWJvb2wg ZGVsZXRlID0gdHJ1ZTsKKworCQlpZiAoYXR0bnVtICE9IDApCisJCXsKKwkJ CURhdHVtCQlhZGF0dW07CisJCQlib29sCQlpc251bGw7CisJCQlpbnQJCQlp OworCQkJaW50CQkJbmNvbHVtbnMgPSAwOworCQkJQXJyYXlUeXBlICAqYXJy OworCQkJaW50MTYJICAgKmF0dG51bXM7CisKKwkJCS8qIGdldCB0aGUgY29s dW1ucyAqLworCQkJYWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RBVE9J RCwgdHVwbGUsCisJCQkJCQkJCQkgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rh a2V5cywgJmlzbnVsbCk7CisJCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJCWFy ciA9IERhdHVtR2V0QXJyYXlUeXBlUChhZGF0dW0pOworCQkJYXR0bnVtcyA9 IChpbnQxNiopQVJSX0RBVEFfUFRSKGFycik7CisKKwkJCWZvciAoaSA9IDA7 IGkgPCBBUlJfRElNUyhhcnIpWzBdOyBpKyspCisJCQl7CisJCQkJLyogY291 bnQgdGhlIGNvbHVtbiB1bmxlc3MgaXQncyBoYXMgYmVlbiAvIGlzIGJlaW5n IGRyb3BwZWQgKi8KKwkJCQlpZiAoKCEgdHVwZGVzYy0+YXR0cnNbYXR0bnVt c1tpXS0xXS0+YXR0aXNkcm9wcGVkKSAmJgorCQkJCQkoYXR0bnVtc1tpXSAh PSBhdHRudW0pKQorCQkJCQluY29sdW1ucyArPSAxOworCQkJfQorCisJCQkv KiBkZWxldGUgaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiB0d28gYXR0cmlidXRl cyAqLworCQkJZGVsZXRlID0gKG5jb2x1bW5zIDwgMik7CisJCX0KKworCQlp ZiAoZGVsZXRlKQorCQkJc2ltcGxlX2hlYXBfZGVsZXRlKHBnbXZzdGF0aXN0 aWMsICZ0dXBsZS0+dF9zZWxmKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2Fu KHNjYW4pOworCisJaGVhcF9jbG9zZShwZ212c3RhdGlzdGljLCBSb3dFeGNs dXNpdmVMb2NrKTsKK30KKworCisvKgogICogUmVsYXRpb25UcnVuY2F0ZUlu ZGV4ZXMgLSB0cnVuY2F0ZSBhbGwgaW5kZXhlcyBhc3NvY2lhdGVkCiAgKiB3 aXRoIHRoZSBoZWFwIHJlbGF0aW9uIHRvIHplcm8gdHVwbGVzLgogICoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvbmFtZXNwYWNlLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL25hbWVzcGFjZS5jCmluZGV4IDQ0NmIyYWMu LmRmZDViZWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvbmFt ZXNwYWNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9uYW1lc3BhY2Uu YwpAQCAtNDIwMSwzICs0MjAxLDU0IEBAIHBnX2lzX290aGVyX3RlbXBfc2No ZW1hKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAlQR19SRVRVUk5fQk9PTChpc090 aGVyVGVtcE5hbWVzcGFjZShvaWQpKTsKIH0KKworT2lkCitnZXRfc3RhdGlz dGljc19vaWQoTGlzdCAqbmFtZXMsIGJvb2wgbWlzc2luZ19vaykKK3sKKwlj aGFyCSAgICpzY2hlbWFuYW1lOworCWNoYXIJICAgKnN0YXRzX25hbWU7CisJ T2lkCQkJbmFtZXNwYWNlSWQ7CisJT2lkCQkJc3RhdHNfb2lkID0gSW52YWxp ZE9pZDsKKwlMaXN0Q2VsbCAgICpsOworCisJLyogZGVjb25zdHJ1Y3QgdGhl IG5hbWUgbGlzdCAqLworCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShuYW1l cywgJnNjaGVtYW5hbWUsICZzdGF0c19uYW1lKTsKKworCWlmIChzY2hlbWFu YW1lKQorCXsKKwkJLyogdXNlIGV4YWN0IHNjaGVtYSBnaXZlbiAqLworCQlu YW1lc3BhY2VJZCA9IExvb2t1cEV4cGxpY2l0TmFtZXNwYWNlKHNjaGVtYW5h bWUsIG1pc3Npbmdfb2spOworCQlpZiAobWlzc2luZ19vayAmJiAhT2lkSXNW YWxpZChuYW1lc3BhY2VJZCkpCisJCQlzdGF0c19vaWQgPSBJbnZhbGlkT2lk OworCQllbHNlCisJCQlzdGF0c19vaWQgPSBHZXRTeXNDYWNoZU9pZDIoTVZT VEFUTkFNRU5TUCwKKwkJCQkJCQkJCQlQb2ludGVyR2V0RGF0dW0oc3RhdHNf bmFtZSksCisJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShuYW1lc3BhY2VJ ZCkpOworCX0KKwllbHNlCisJeworCQkvKiBzZWFyY2ggZm9yIGl0IGluIHNl YXJjaCBwYXRoICovCisJCXJlY29tcHV0ZU5hbWVzcGFjZVBhdGgoKTsKKwor CQlmb3JlYWNoKGwsIGFjdGl2ZVNlYXJjaFBhdGgpCisJCXsKKwkJCW5hbWVz cGFjZUlkID0gbGZpcnN0X29pZChsKTsKKworCQkJaWYgKG5hbWVzcGFjZUlk ID09IG15VGVtcE5hbWVzcGFjZSkKKwkJCQljb250aW51ZTsJCS8qIGRvIG5v dCBsb29rIGluIHRlbXAgbmFtZXNwYWNlICovCisJCQlzdGF0c19vaWQgPSBH ZXRTeXNDYWNoZU9pZDIoTVZTVEFUTkFNRU5TUCwKKwkJCQkJCQkJCSAgUG9p bnRlckdldERhdHVtKHN0YXRzX25hbWUpLAorCQkJCQkJCQkJICBPYmplY3RJ ZEdldERhdHVtKG5hbWVzcGFjZUlkKSk7CisJCQlpZiAoT2lkSXNWYWxpZChz dGF0c19vaWQpKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFPaWRJ c1ZhbGlkKHN0YXRzX29pZCkgJiYgIW1pc3Npbmdfb2spCisJCWVyZXBvcnQo RVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNU KSwKKwkJCQkgZXJybXNnKCJzdGF0aXN0aWNzIFwiJXNcIiBkb2VzIG5vdCBl eGlzdCIsCisJCQkJCQlOYW1lTGlzdFRvU3RyaW5nKG5hbWVzKSkpKTsKKwor CXJldHVybiBzdGF0c19vaWQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvb2JqZWN0YWRkcmVzcy5jCmluZGV4IGQyYWFhNmQuLjNhNmEwYjAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCkBA IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYW5ndWFn ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFyZ2VvYmplY3QuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX2xhcmdlb2JqZWN0X21ldGFkYXRhLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX25hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfb3BjbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHku aCIKQEAgLTQzOCw5ICs0MzksMjIgQEAgc3RhdGljIGNvbnN0IE9iamVjdFBy b3BlcnR5VHlwZSBPYmplY3RQcm9wZXJ0eVtdID0KIAkJQW51bV9wZ190eXBl X3R5cGFjbCwKIAkJQUNMX0tJTkRfVFlQRSwKIAkJdHJ1ZQorCX0sCisJewor CQlNdlN0YXRpc3RpY1JlbGF0aW9uSWQsCisJCU12U3RhdGlzdGljT2lkSW5k ZXhJZCwKKwkJTVZTVEFUT0lELAorCQlNVlNUQVROQU1FTlNQLAorCQlBbnVt X3BnX212X3N0YXRpc3RpY19zdGFuYW1lLAorCQlBbnVtX3BnX212X3N0YXRp c3RpY19zdGFuYW1lc3BhY2UsCisJCUludmFsaWRBdHRyTnVtYmVyLAkJLyog WFhYIHNhbWUgb3duZXIgYXMgcmVsYXRpb24gKi8KKwkJSW52YWxpZEF0dHJO dW1iZXIsCQkvKiBubyBBQ0wgKHNhbWUgYXMgcmVsYXRpb24pICovCisJCS0x LAkJCQkJCS8qIG5vIEFDTCAqLworCQl0cnVlCiAJfQogfTsKIAorCiAvKgog ICogVGhpcyBzdHJ1Y3QgbWFwcyB0aGUgc3RyaW5nIG9iamVjdCB0eXBlcyBh cyByZXR1cm5lZCBieQogICogZ2V0T2JqZWN0VHlwZURlc2NyaXB0aW9uIGlu dG8gT2JqVHlwZSBlbnVtIHZhbHVlcy4gIE5vdGUgdGhhdCBzb21lIGVudW0K QEAgLTkxMyw2ICs5MjcsMTEgQEAgZ2V0X29iamVjdF9hZGRyZXNzKE9iamVj dFR5cGUgb2JqdHlwZSwgTGlzdCAqb2JqbmFtZSwgTGlzdCAqb2JqYXJncywK IAkJCQlhZGRyZXNzID0gZ2V0X29iamVjdF9hZGRyZXNzX2RlZmFjbChvYmpu YW1lLCBvYmphcmdzLAogCQkJCQkJCQkJCQkJCW1pc3Npbmdfb2spOwogCQkJ CWJyZWFrOworCQkJY2FzZSBPQkpFQ1RfU1RBVElTVElDUzoKKwkJCQlhZGRy ZXNzLmNsYXNzSWQgPSBNdlN0YXRpc3RpY1JlbGF0aW9uSWQ7CisJCQkJYWRk cmVzcy5vYmplY3RJZCA9IGdldF9zdGF0aXN0aWNzX29pZChvYmpuYW1lLCBt aXNzaW5nX29rKTsKKwkJCQlhZGRyZXNzLm9iamVjdFN1YklkID0gMDsKKwkJ CQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZWxvZyhFUlJPUiwgInVucmVj b2duaXplZCBvYmp0eXBlOiAlZCIsIChpbnQpIG9ianR5cGUpOwogCQkJCS8q IHBsYWNhdGUgY29tcGlsZXIsIGluIGNhc2UgaXQgdGhpbmtzIGVsb2cgbWln aHQgcmV0dXJuICovCkBAIC0yMTg1LDYgKzIyMDQsOSBAQCBjaGVja19vYmpl Y3Rfb3duZXJzaGlwKE9pZCByb2xlaWQsIE9iamVjdFR5cGUgb2JqdHlwZSwg T2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKIAkJCQkJCSBlcnJtc2coIm11 c3QgYmUgc3VwZXJ1c2VyIikpKTsKIAkJCWJyZWFrOworCQljYXNlIE9CSkVD VF9TVEFUSVNUSUNTOgorCQkJLyogRklYTUUgZG8gdGhlIHJpZ2h0IG93bmVy IGNoZWNrcyBoZXJlICovCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVs b2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGU6ICVkIiwKIAkJ CQkgKGludCkgb2JqdHlwZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3N5c3RlbV92aWV3cy5zcWwKaW5kZXggYWJmOWE3MC4uYjhhMjY0ZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3Fs CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApA QCAtMTU4LDYgKzE1OCwxNyBAQCBDUkVBVEUgVklFVyBwZ19pbmRleGVzIEFT CiAgICAgICAgICBMRUZUIEpPSU4gcGdfdGFibGVzcGFjZSBUIE9OIChULm9p ZCA9IEkucmVsdGFibGVzcGFjZSkKICAgICBXSEVSRSBDLnJlbGtpbmQgSU4g KCdyJywgJ20nKSBBTkQgSS5yZWxraW5kID0gJ2knOwogCitDUkVBVEUgVklF VyBwZ19tdl9zdGF0cyBBUworICAgIFNFTEVDVAorICAgICAgICBOLm5zcG5h bWUgQVMgc2NoZW1hbmFtZSwKKyAgICAgICAgQy5yZWxuYW1lIEFTIHRhYmxl bmFtZSwKKyAgICAgICAgUy5zdGFuYW1lIEFTIHN0YW5hbWUsCisgICAgICAg IFMuc3Rha2V5cyBBUyBhdHRudW1zLAorICAgICAgICBsZW5ndGgoUy5zdGFk ZXBzKSBhcyBkZXBzYnl0ZXMsCisgICAgICAgIHBnX212X3N0YXRzX2RlcGVu ZGVuY2llc19pbmZvKFMuc3RhZGVwcykgYXMgZGVwc2luZm8KKyAgICBGUk9N IChwZ19tdl9zdGF0aXN0aWMgUyBKT0lOIHBnX2NsYXNzIEMgT04gKEMub2lk ID0gUy5zdGFyZWxpZCkpCisgICAgICAgIExFRlQgSk9JTiBwZ19uYW1lc3Bh Y2UgTiBPTiAoTi5vaWQgPSBDLnJlbG5hbWVzcGFjZSk7CisKIENSRUFURSBW SUVXIHBnX3N0YXRzIFdJVEggKHNlY3VyaXR5X2JhcnJpZXIpIEFTCiAgICAg U0VMRUNUCiAgICAgICAgIG5zcG5hbWUgQVMgc2NoZW1hbmFtZSwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggYjFhYzcwNC4uNTE1MTAw MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTE4LDgg KzE4LDggQEAgT0JKUyA9IGFnZ3JlZ2F0ZWNtZHMubyBhbHRlci5vIGFuYWx5 emUubyBhc3luYy5vIGNsdXN0ZXIubyBjb21tZW50Lm8gIFwKIAlldmVudF90 cmlnZ2VyLm8gZXhwbGFpbi5vIGV4dGVuc2lvbi5vIGZvcmVpZ25jbWRzLm8g ZnVuY3Rpb25jbWRzLm8gXAogCWluZGV4Y21kcy5vIGxvY2tjbWRzLm8gbWF0 dmlldy5vIG9wZXJhdG9yY21kcy5vIG9wY2xhc3NjbWRzLm8gXAogCXBvbGlj eS5vIHBvcnRhbGNtZHMubyBwcmVwYXJlLm8gcHJvY2xhbmcubyBcCi0Jc2No ZW1hY21kcy5vIHNlY2xhYmVsLm8gc2VxdWVuY2UubyB0YWJsZWNtZHMubyB0 YWJsZXNwYWNlLm8gdHJpZ2dlci5vIFwKLQl0c2VhcmNoY21kcy5vIHR5cGVj bWRzLm8gdXNlci5vIHZhY3V1bS5vIHZhY3V1bWxhenkubyBcCi0JdmFyaWFi bGUubyB2aWV3Lm8KKwlzY2hlbWFjbWRzLm8gc2VjbGFiZWwubyBzZXF1ZW5j ZS5vIHN0YXRzY21kcy5vIFwKKwl0YWJsZWNtZHMubyB0YWJsZXNwYWNlLm8g dHJpZ2dlci5vIHRzZWFyY2hjbWRzLm8gdHlwZWNtZHMubyBcCisJdXNlci5v IHZhY3V1bS5vIHZhY3V1bWxhenkubyB2YXJpYWJsZS5vIHZpZXcubwogCiBp bmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKaW5kZXggMDcwZGYyOS4u Y2JhYTRlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5h bHl6ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYwpA QCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHNfZm4uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX212X3N0YXRpc3RpYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf bmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kcy5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgpAQCAtNTUsNyAr NTYsMTEgQEAKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1 ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3RxdWFs LmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgogCisjaW5jbHVkZSAidXRpbHMvbXZzdGF0cy5o IgorI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCiAKIC8qIFBlci1pbmRl eCBkYXRhIGZvciBBTkFMWVpFICovCiB0eXBlZGVmIHN0cnVjdCBBbmxJbmRl eERhdGEKQEAgLTQ2MCw2ICs0NjUsMTkgQEAgZG9fYW5hbHl6ZV9yZWwoUmVs YXRpb24gb25lcmVsLCBpbnQgb3B0aW9ucywgVmFjdXVtUGFyYW1zICpwYXJh bXMsCiAJICogYWxsIGFuYWx5emFibGUgY29sdW1ucy4gIFdlIHVzZSBhIGxv d2VyIGJvdW5kIG9mIDEwMCByb3dzIHRvIGF2b2lkCiAJICogcG9zc2libGUg b3ZlcmZsb3cgaW4gVml0dGVyJ3MgYWxnb3JpdGhtLiAgKE5vdGU6IHRoYXQg d2lsbCBhbHNvIGJlIHRoZQogCSAqIHRhcmdldCBpbiB0aGUgY29ybmVyIGNh c2Ugd2hlcmUgdGhlcmUgYXJlIG5vIGFuYWx5emFibGUgY29sdW1ucy4pCisJ ICoKKwkgKiBGSVhNRSBUaGlzIHNhbXBsZSBzaXppbmcgaXMgbW9zdGx5IE9L IHdoZW4gY29tcHV0aW5nIHN0YXRzIGZvcgorCSAqICAgICAgIGluZGl2aWR1 YWwgY29sdW1ucywgYnV0IHdoZW4gY29tcHV0aW5nIG11bHRpLXZhcmlhdGUg c3RhdHMKKwkgKiAgICAgICBmb3IgbXVsdGl2YXJpYXRlIHN0YXRzIChoaXN0 b2dyYW1zLCBtY3YsIC4uLikgaXQncyByYXRoZXIKKwkgKiAgICAgICBpbnN1 ZmZpY2llbnQuIEZvciBzdGF0cyBvbiBtdWx0aXBsZSBjb2x1bW5zIC8gY29t cGxleCBzdGF0cworCSAqICAgICAgIHdlIG5lZWQgbGFyZ2VyIHNhbXBsZSBz aXplcywgYmVjYXVzZSB3ZSBuZWVkIHRvIGJ1aWxkIG1vcmUKKwkgKiAgICAg ICBkZXRhaWxlZCBzdGF0cyAobW9yZSBNQ1YgaXRlbXMgLyBoaXN0b2dyYW0g YnVja2V0cykgdG8gZ2V0CisJICogICAgICAgZ29vZCBhY2N1cmFjeS4gTWF5 YmUgaXQnZCBiZSBhcHByb3ByaWF0ZSB0byB1c2Ugc2FtcGxlcworCSAqICAg ICAgIHByb3BvcnRpb25hbCB0byB0aGUgdGFibGUgKHNheSwgMC41JSAtIDEl KSBpbnN0ZWFkIG9mIGEKKwkgKiAgICAgICBmaXhlZCBzaXplIG1pZ2h0IGJl IG1vcmUgYXBwcm9wcmlhdGUuIEFsc28sIHRoaXMgc2hvdWxkIGJlCisJICog ICAgICAgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBzdGF0aXN0aWNzIHNpemUg LSBlLmcuIG51bWJlciBvZiBNQ1YKKwkgKiAgICAgICBpdGVtcyBvciBoaXN0 b2dyYW0gYnVja2V0cyBzaG91bGQgcmVxdWlyZSBzZXZlcmFsIHNhbXBsZQor CSAqICAgICAgIHJvd3MgcGVyIGl0ZW0vYnVja2V0IChzbyB0aGUgc2FtcGxl IHNob3VsZCBiZSBrKnNpemUpLgogCSAqLwogCXRhcmdyb3dzID0gMTAwOwog CWZvciAoaSA9IDA7IGkgPCBhdHRyX2NudDsgaSsrKQpAQCAtNTYyLDYgKzU4 MCw5IEBAIGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgaW50IG9w dGlvbnMsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJdXBkYXRlX2F0dHN0 YXRzKFJlbGF0aW9uR2V0UmVsaWQoSXJlbFtpbmRdKSwgZmFsc2UsCiAJCQkJ CQkJdGhpc2RhdGEtPmF0dHJfY250LCB0aGlzZGF0YS0+dmFjYXR0cnN0YXRz KTsKIAkJfQorCisJCS8qIEJ1aWxkIG11bHRpdmFyaWF0ZSBzdGF0cyAoaWYg dGhlcmUgYXJlIGFueSkuICovCisJCWJ1aWxkX212X3N0YXRzKG9uZXJlbCwg bnVtcm93cywgcm93cywgYXR0cl9jbnQsIHZhY2F0dHJzdGF0cyk7CiAJfQog CiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ryb3Bj bWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kcm9wY21kcy5jCmluZGV4 IDUyMjAyN2EuLmNkNjViNTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2Ryb3BjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZHJvcGNtZHMuYwpAQCAtMjkyLDYgKzI5MiwxMCBAQCBkb2VzX25vdF9leGlz dF9za2lwcGluZyhPYmplY3RUeXBlIG9ianR5cGUsIExpc3QgKm9iam5hbWUs IExpc3QgKm9iamFyZ3MpCiAJCQltc2cgPSBnZXR0ZXh0X25vb3AoInNjaGVt YSBcIiVzXCIgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nIik7CiAJCQluYW1l ID0gTmFtZUxpc3RUb1N0cmluZyhvYmpuYW1lKTsKIAkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9TVEFUSVNUSUNTOgorCQkJbXNnID0gZ2V0dGV4dF9ub29w KCJzdGF0aXN0aWNzIFwiJXNcIiBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmci KTsKKwkJCW5hbWUgPSBOYW1lTGlzdFRvU3RyaW5nKG9iam5hbWUpOworCQkJ YnJlYWs7CiAJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgogCQkJaWYgKCFzY2hl bWFfZG9lc19ub3RfZXhpc3Rfc2tpcHBpbmcob2JqbmFtZSwgJm1zZywgJm5h bWUpKQogCQkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jCmluZGV4IDllMzJmOGQuLjA5MDYxYmIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTExMCw2 ICsxMTAsNyBAQCBzdGF0aWMgZXZlbnRfdHJpZ2dlcl9zdXBwb3J0X2RhdGEg ZXZlbnRfdHJpZ2dlcl9zdXBwb3J0W10gPSB7CiAJeyJTQ0hFTUEiLCB0cnVl fSwKIAl7IlNFUVVFTkNFIiwgdHJ1ZX0sCiAJeyJTRVJWRVIiLCB0cnVlfSwK Kwl7IlNUQVRJU1RJQ1MiLCB0cnVlfSwKIAl7IlRBQkxFIiwgdHJ1ZX0sCiAJ eyJUQUJMRVNQQUNFIiwgZmFsc2V9LAogCXsiVFJBTlNGT1JNIiwgdHJ1ZX0s CkBAIC0xMTA2LDYgKzExMDcsNyBAQCBFdmVudFRyaWdnZXJTdXBwb3J0c09i amVjdFR5cGUoT2JqZWN0VHlwZSBvYnR5cGUpCiAJCWNhc2UgT0JKRUNUX1JV TEU6CiAJCWNhc2UgT0JKRUNUX1NDSEVNQToKIAkJY2FzZSBPQkpFQ1RfU0VR VUVOQ0U6CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ1M6CiAJCWNhc2UgT0JK RUNUX1RBQkNPTlNUUkFJTlQ6CiAJCWNhc2UgT0JKRUNUX1RBQkxFOgogCQlj YXNlIE9CSkVDVF9UUkFOU0ZPUk06CkBAIC0xMTY3LDYgKzExNjksNyBAQCBF dmVudFRyaWdnZXJTdXBwb3J0c09iamVjdENsYXNzKE9iamVjdENsYXNzIG9i amNsYXNzKQogCQljYXNlIE9DTEFTU19ERUZBQ0w6CiAJCWNhc2UgT0NMQVNT X0VYVEVOU0lPTjoKIAkJY2FzZSBPQ0xBU1NfUE9MSUNZOgorCQljYXNlIE9D TEFTU19TVEFUSVNUSUNTOgogCQkJcmV0dXJuIHRydWU7CiAJfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3N0YXRzY21kcy5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YThiMTMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwpAQCAtMCww ICsxLDMzMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogc3RhdHNjbWRzLmMKKyAqCSAgQ29tbWFuZHMgZm9yIGNyZWF0aW5n IGFuZCBhbHRlcmluZyBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcworICoKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKKyNpbmNsdWRlICJh Y2Nlc3MvaGVhcGFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5o IgorI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCisjaW5jbHVkZSAi YWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5o IgorI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNz L3hsb2cuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2NhdGFsb2cuaCIKKyNpbmNs dWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKKyNpbmNsdWRlICJjYXRhbG9n L2hlYXAuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9pbmRleGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFt ZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhY2Nlc3MuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3Rh YmxlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHNfZm4uaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNz LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ190eXBlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlX2ZuLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy90b2FzdGluZy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2NsdXN0ZXIu aCIKKyNpbmNsdWRlICJjb21tYW5kcy9jb21tZW50LmgiCisjaW5jbHVkZSAi Y29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3BvbGljeS5oIgorI2lu Y2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvdGFibGVjbWRzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFj ZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RyaWdnZXIuaCIKKyNpbmNsdWRl ICJjb21tYW5kcy90eXBlY21kcy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3Vz ZXIuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorI2luY2x1 ZGUgImZvcmVpZ24vZm9yZWlnbi5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5v ZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMu aCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgorI2luY2x1ZGUg Im9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNl X2NsYXVzZS5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2VyY2UuaCIK KyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29sbGF0ZS5oIgorI2luY2x1ZGUg InBhcnNlci9wYXJzZV9leHByLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNl X29wZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIK KyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1ZGUgInBh cnNlci9wYXJzZV91dGlsY21kLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNl ci5oIgorI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJld3JpdGUv cmV3cml0ZURlZmluZS5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhh bmRsZXIuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgor I2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9sbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Nt Z3IuaCIKKyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisj aW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1 ZGUgInV0aWxzL3JlbGNhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0 aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgorI2luY2x1ZGUg InV0aWxzL3N5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvdHF1YWwuaCIK KyNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxz L212c3RhdHMuaCIKKworCisvKiB1c2VkIGZvciBzb3J0aW5nIHRoZSBhdHRu dW1zIGluIEV4ZWNDcmVhdGVTdGF0aXN0aWNzICovCitzdGF0aWMgaW50IGNv bXBhcmVfaW50MTYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sK KwlyZXR1cm4gbWVtY21wKGEsIGIsIHNpemVvZihpbnQxNikpOworfQorCisv KgorICogSW1wbGVtZW50cyB0aGUgQ1JFQVRFIFNUQVRJU1RJQ1MgbmFtZSBP TiB0YWJsZSAoY29sdW1ucykgV0lUSCAob3B0aW9ucykKKyAqCisgKiBUT0RP IENoZWNrIHRoYXQgdGhlIHR5cGVzIHN1cHBvcnQgc29ydCwgYWx0aG91Z2gg bWF5YmUgd2UgY2FuIGxpdmUKKyAqICAgICAgd2l0aG91dCBpdCAoYW5kIG9u bHkgYnVpbGQgTUNWIGxpc3QgLyBhc3NvY2lhdGlvbiBydWxlcykuCisgKgor ICogVE9ETyBUaGlzIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgZHVwbGlj YXRlIHN0YXRzIChpLmUuIHNhbWUKKyAqICAgICAga2V5cywgc2FtZSBvcHRp b25zKS4gQWx0aG91Z2ggbWF5YmUgaXQncyB1c2VmdWwgdG8gaGF2ZQorICog ICAgICBtdWx0aXBsZSBzdGF0cyBvbiB0aGUgc2FtZSBjb2x1bW5zIHdpdGgg ZGlmZmVyZW50IG9wdGlvbnMKKyAqICAgICAgKHNheSwgYSBkZXRhaWxlZCBN Q1Ytb25seSBzdGF0cyBmb3Igc29tZSBxdWVyaWVzLCBoaXN0b2dyYW0KKyAq ICAgICAgZm9yIG90aGVycywgZXRjLikKKyAqLworT2JqZWN0QWRkcmVzcwor Q3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCit7CisJ aW50CQkJaSwgajsKKwlMaXN0Q2VsbCAgICpsOworCWludDE2CQlhdHRudW1z W0lOREVYX01BWF9LRVlTXTsKKwlpbnQJCQludW1jb2xzID0gMDsKKwlPYmpl Y3RBZGRyZXNzCWFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKKwlj aGFyCSAgICpuYW1lc3RyOworCU5hbWVEYXRhCXN0YW5hbWU7CisJT2lkCQkJ c3RhdG9pZDsKKwlPaWQJCQluYW1lc3BhY2VJZDsKKworCUhlYXBUdXBsZQlo dHVwOworCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfbXZfc3RhdGlzdGljXTsK Kwlib29sCQludWxsc1tOYXR0c19wZ19tdl9zdGF0aXN0aWNdOworCWludDJ2 ZWN0b3IgKnN0YWtleXM7CisJUmVsYXRpb24JbXZzdGF0cmVsOworCVJlbGF0 aW9uCXJlbDsKKwlPYmplY3RBZGRyZXNzIHBhcmVudG9iamVjdCwgY2hpbGRv YmplY3Q7CisKKwkvKiBieSBkZWZhdWx0IGJ1aWxkIG5vdGhpbmcgKi8KKwli b29sIAlidWlsZF9kZXBlbmRlbmNpZXMgPSBmYWxzZTsKKworCUFzc2VydChJ c0Eoc3RtdCwgQ3JlYXRlU3RhdHNTdG10KSk7CisKKwkvKiByZXNvbHZlIHRo ZSBwaWVjZXMgb2YgdGhlIG5hbWUgKG5hbWVzcGFjZSBldGMuKSAqLworCW5h bWVzcGFjZUlkID0gUXVhbGlmaWVkTmFtZUdldENyZWF0aW9uTmFtZXNwYWNl KHN0bXQtPmRlZm5hbWVzLCAmbmFtZXN0cik7CisJbmFtZXN0cmNweSgmc3Rh bmFtZSwgbmFtZXN0cik7CisKKwkvKgorCSAqIElmIGlmX25vdF9leGlzdHMg d2FzIGdpdmVuIGFuZCB0aGUgc3RhdGlzdGljcyBhbHJlYWR5IGV4aXN0cywg YmFpbCBvdXQuCisJICovCisJaWYgKHN0bXQtPmlmX25vdF9leGlzdHMgJiYK KwkJU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKE1WU1RBVE5BTUVOU1AsCisJCQkJ CQkJICBQb2ludGVyR2V0RGF0dW0oJnN0YW5hbWUpLAorCQkJCQkJCSAgT2Jq ZWN0SWRHZXREYXR1bShuYW1lc3BhY2VJZCkpKQorCXsKKwkJZXJlcG9ydChO T1RJQ0UsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVfT0JKRUNU KSwKKwkJCQkgZXJybXNnKCJzdGF0aXN0aWNzIFwiJXNcIiBhbHJlYWR5IGV4 aXN0cywgc2tpcHBpbmciLAorCQkJCQkJbmFtZXN0cikpKTsKKwkJcmV0dXJu IEludmFsaWRPYmplY3RBZGRyZXNzOworCX0KKworCXJlbCA9IGhlYXBfb3Bl bnJ2KHN0bXQtPnJlbGF0aW9uLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwor CS8qIHRyYW5zZm9ybSB0aGUgY29sdW1uIG5hbWVzIHRvIGF0dG51bSB2YWx1 ZXMgKi8KKworCWZvcmVhY2gobCwgc3RtdC0+a2V5cykKKwl7CisJCWNoYXIJ ICAgKmF0dG5hbWUgPSBzdHJWYWwobGZpcnN0KGwpKTsKKwkJSGVhcFR1cGxl CWF0dHR1cGxlOworCisJCWF0dHR1cGxlID0gU2VhcmNoU3lzQ2FjaGVBdHRO YW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bmFtZSk7CisKKwkJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHR1cGxlKSkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NPTFVNTiks CisJCQkJCSBlcnJtc2coImNvbHVtbiBcIiVzXCIgcmVmZXJlbmNlZCBpbiBz dGF0aXN0aWNzIGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQlhdHRuYW1lKSkp OworCisJCS8qIG1vcmUgdGhhbiBNVkhJU1RfTUFYX0RJTUVOU0lPTlMgY29s dW1ucyBub3QgYWxsb3dlZCAqLworCQlpZiAobnVtY29scyA+PSBNVlNUQVRT X01BWF9ESU1FTlNJT05TKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9UT09fTUFOWV9DT0xVTU5TKSwKKwkJCQkJIGVycm1z ZygiY2Fubm90IGhhdmUgbW9yZSB0aGFuICVkIGtleXMgaW4gYSBzdGF0aXN0 aWNzIiwKKwkJCQkJCQlNVlNUQVRTX01BWF9ESU1FTlNJT05TKSkpOworCisJ CWF0dG51bXNbbnVtY29sc10gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRT VFJVQ1QoYXR0dHVwbGUpKS0+YXR0bnVtOworCQlSZWxlYXNlU3lzQ2FjaGUo YXR0dHVwbGUpOworCQludW1jb2xzKys7CisJfQorCisJLyoKKwkgKiBDaGVj ayB0aGUgbG93ZXIgYm91bmQgKGF0IGxlYXN0IDIgY29sdW1ucyksIHRoZSB1 cHBlciBib3VuZCB3YXMKKwkgKiBhbHJlYWR5IGNoZWNrZWQgaW4gdGhlIGxv b3AuCisJICovCisJaWYgKG51bWNvbHMgPCAyKQorCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9UT09fTUFOWV9DT0xVTU5TKSwK KwkJCQkJIGVycm1zZygibXVsdGl2YXJpYXRlIHN0YXRzIHJlcXVpcmUgMiBv ciBtb3JlIGNvbHVtbnMiKSkpOworCisJLyogbG9vayBmb3IgZHVwbGljaXRp ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtY29sczsgaSsrKQorCQlmb3Ig KGogPSAwOyBqIDwgbnVtY29sczsgaisrKQorCQkJaWYgKChpICE9IGopICYm IChhdHRudW1zW2ldID09IGF0dG51bXNbal0pKQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9DT0xVTU4p LAorCQkJCQkJIGVycm1zZygiZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0 YXRpc3RpY3MgZGVmaW5pdGlvbiIpKSk7CisKKwkvKiBwYXJzZSB0aGUgc3Rh dGlzdGljcyBvcHRpb25zICovCisJZm9yZWFjaCAobCwgc3RtdC0+b3B0aW9u cykKKwl7CisJCURlZkVsZW0gKm9wdCA9IChEZWZFbGVtKilsZmlyc3QobCk7 CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJkZXBlbmRlbmNpZXMi KSA9PSAwKQorCQkJYnVpbGRfZGVwZW5kZW5jaWVzID0gZGVmR2V0Qm9vbGVh bihvcHQpOworCQllbHNlCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coInVu cmVjb2duaXplZCBTVEFUSVNUSUNTIG9wdGlvbiBcIiVzXCIiLAorCQkJCQkJ CW9wdC0+ZGVmbmFtZSkpKTsKKwl9CisKKwkvKiBjaGVjayB0aGF0IGF0IGxl YXN0IHNvbWUgc3RhdGlzdGljcyB3ZXJlIHJlcXVlc3RlZCAqLworCWlmICgh IGJ1aWxkX2RlcGVuZGVuY2llcykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1zZygi bm8gc3RhdGlzdGljcyB0eXBlIChkZXBlbmRlbmNpZXMpIHdhcyByZXF1ZXN0 ZWQiKSkpOworCisJLyogc29ydCB0aGUgYXR0bnVtcyBhbmQgYnVpbGQgaW50 MnZlY3RvciAqLworCXFzb3J0KGF0dG51bXMsIG51bWNvbHMsIHNpemVvZihp bnQxNiksIGNvbXBhcmVfaW50MTYpOworCXN0YWtleXMgPSBidWlsZGludDJ2 ZWN0b3IoYXR0bnVtcywgbnVtY29scyk7CisKKwkvKgorCSAqIE9rYXksIGxl dCdzIGNyZWF0ZSB0aGUgcGdfbXZfc3RhdGlzdGljIGVudHJ5LgorCSAqLwor CW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKKwltZW1zZXQo bnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKKworCS8qIG5vIHN0YXRz IGNvbGxlY3RlZCB5ZXQsIHNvIGp1c3QgdGhlIGtleXMgKi8KKwl2YWx1ZXNb QW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhcmVsaWQtMV0gPSBPYmplY3RJZEdl dERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJdmFsdWVzW0FudW1f cGdfbXZfc3RhdGlzdGljX3N0YW5hbWUgLTFdID0gTmFtZUdldERhdHVtKCZz dGFuYW1lKTsKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFt ZXNwYWNlIC0xXSA9IE9iamVjdElkR2V0RGF0dW0obmFtZXNwYWNlSWQpOwor CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMgLTFdID0g UG9pbnRlckdldERhdHVtKHN0YWtleXMpOworCisJdmFsdWVzW0FudW1fcGdf bXZfc3RhdGlzdGljX2RlcHNfZW5hYmxlZCAtMV0gPSBCb29sR2V0RGF0dW0o YnVpbGRfZGVwZW5kZW5jaWVzKTsKKworCW51bGxzW0FudW1fcGdfbXZfc3Rh dGlzdGljX3N0YWRlcHMgIC0xXSA9IHRydWU7CisKKwkvKiBpbnNlcnQgdGhl IHR1cGxlIGludG8gcGdfbXZfc3RhdGlzdGljICovCisJbXZzdGF0cmVsID0g aGVhcF9vcGVuKE12U3RhdGlzdGljUmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7CisKKwlodHVwID0gaGVhcF9mb3JtX3R1cGxlKG12c3RhdHJlbC0+ cmRfYXR0LCB2YWx1ZXMsIG51bGxzKTsKKworCXNpbXBsZV9oZWFwX2luc2Vy dChtdnN0YXRyZWwsIGh0dXApOworCisJQ2F0YWxvZ1VwZGF0ZUluZGV4ZXMo bXZzdGF0cmVsLCBodHVwKTsKKworCXN0YXRvaWQgPSBIZWFwVHVwbGVHZXRP aWQoaHR1cCk7CisKKwloZWFwX2ZyZWV0dXBsZShodHVwKTsKKworCisJLyoK KwkgKiBTdG9yZSBhIGRlcGVuZGVuY3kgdG9vLCBzbyB0aGF0IHN0YXRpc3Rp Y3MgYXJlIGRyb3BwZWQgb24gRFJPUCBUQUJMRQorCSAqLworCXBhcmVudG9i amVjdC5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCXBhcmVudG9i amVjdC5vYmplY3RJZCA9IE9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRS ZWxpZChyZWwpKTsKKwlwYXJlbnRvYmplY3Qub2JqZWN0U3ViSWQgPSAwOwor CWNoaWxkb2JqZWN0LmNsYXNzSWQgPSBNdlN0YXRpc3RpY1JlbGF0aW9uSWQ7 CisJY2hpbGRvYmplY3Qub2JqZWN0SWQgPSBzdGF0b2lkOworCWNoaWxkb2Jq ZWN0Lm9iamVjdFN1YklkID0gMDsKKworCXJlY29yZERlcGVuZGVuY3lPbigm Y2hpbGRvYmplY3QsICZwYXJlbnRvYmplY3QsIERFUEVOREVOQ1lfQVVUTyk7 CisKKwkvKgorCSAqIEFsc28gcmVjb3JkIGRlcGVuZGVuY3kgb24gdGhlIHNj aGVtYSAodG8gZHJvcCBzdGF0aXN0aWNzIG9uIERST1AgU0NIRU1BKQorCSAq LworCXBhcmVudG9iamVjdC5jbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25J ZDsKKwlwYXJlbnRvYmplY3Qub2JqZWN0SWQgPSBPYmplY3RJZEdldERhdHVt KG5hbWVzcGFjZUlkKTsKKwlwYXJlbnRvYmplY3Qub2JqZWN0U3ViSWQgPSAw OworCWNoaWxkb2JqZWN0LmNsYXNzSWQgPSBNdlN0YXRpc3RpY1JlbGF0aW9u SWQ7CisJY2hpbGRvYmplY3Qub2JqZWN0SWQgPSBzdGF0b2lkOworCWNoaWxk b2JqZWN0Lm9iamVjdFN1YklkID0gMDsKKworCXJlY29yZERlcGVuZGVuY3lP bigmY2hpbGRvYmplY3QsICZwYXJlbnRvYmplY3QsIERFUEVOREVOQ1lfQVVU Tyk7CisKKworCWhlYXBfY2xvc2UobXZzdGF0cmVsLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKworCS8q CisJICogSW52YWxpZGF0ZSByZWxjYWNoZSBzbyB0aGF0IG90aGVycyBzZWUg dGhlIG5ldyBzdGF0aXN0aWNzLgorCSAqLworCUNhY2hlSW52YWxpZGF0ZVJl bGNhY2hlKHJlbCk7CisKKwlPYmplY3RBZGRyZXNzU2V0KGFkZHJlc3MsIE12 U3RhdGlzdGljUmVsYXRpb25JZCwgc3RhdG9pZCk7CisKKwlyZXR1cm4gYWRk cmVzczsKK30KKworCisvKgorICogSW1wbGVtZW50cyB0aGUgRFJPUCBTVEFU SVNUSUNTCisgKgorICogICAgIERST1AgU1RBVElTVElDUyBzdGF0c19uYW1l IE9OIHRhYmxlX25hbWUKKyAqCisgKiBUaGUgZmlyc3Qgb25lIHJlcXVpcmVz IGFuIGV4YWN0IG1hdGNoLCB0aGUgc2Vjb25kIG9uZSBqdXN0IGRyb3BzCisg KiBhbGwgdGhlIHN0YXRpc3RpY3Mgb24gYSB0YWJsZS4KKyAqLwordm9pZAor UmVtb3ZlU3RhdGlzdGljc0J5SWQoT2lkIHN0YXRzT2lkKQoreworCVJlbGF0 aW9uCXJlbGF0aW9uOworCUhlYXBUdXBsZQl0dXA7CisKKwkvKgorCSAqIERl bGV0ZSB0aGUgcGdfcHJvYyB0dXBsZS4KKwkgKi8KKwlyZWxhdGlvbiA9IGhl YXBfb3BlbihNdlN0YXRpc3RpY1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCisJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKE1WU1RBVE9JRCwgT2Jq ZWN0SWRHZXREYXR1bShzdGF0c09pZCkpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZCh0dXApKSAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGljcyAldSIs IHN0YXRzT2lkKTsKKworCXNpbXBsZV9oZWFwX2RlbGV0ZShyZWxhdGlvbiwg JnR1cC0+dF9zZWxmKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCisJ aGVhcF9jbG9zZShyZWxhdGlvbiwgUm93RXhjbHVzaXZlTG9jayk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDk2ZGM5 MjMuLjk2YWIwMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9w Z19mb3JlaWduX3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhl cml0cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHNfZm4uaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgogI2luY2x1 ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNw YWNlLmgiCkBAIC05NSw3ICs5Niw3IEBACiAjaW5jbHVkZSAidXRpbHMvc3lz Y2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90cXVhbC5oIgogI2luY2x1ZGUg InV0aWxzL3R5cGNhY2hlLmgiCi0KKyNpbmNsdWRlICJ1dGlscy9tdnN0YXRz LmgiCiAKIC8qCiAgKiBPTiBDT01NSVQgYWN0aW9uIGxpc3QKQEAgLTE0Myw4 ICsxNDQsOSBAQCBzdGF0aWMgTGlzdCAqb25fY29tbWl0cyA9IE5JTDsKICNk ZWZpbmUgQVRfUEFTU19BRERfQ09MCQkJNQkJLyogQUREIENPTFVNTiAqLwog I2RlZmluZSBBVF9QQVNTX0FERF9JTkRFWAkJNgkJLyogQUREIGluZGV4ZXMg Ki8KICNkZWZpbmUgQVRfUEFTU19BRERfQ09OU1RSCQk3CQkvKiBBREQgY29u c3RyYWludHMsIGRlZmF1bHRzICovCi0jZGVmaW5lIEFUX1BBU1NfTUlTQwkJ CTgJCS8qIG90aGVyIHN0dWZmICovCi0jZGVmaW5lIEFUX05VTV9QQVNTRVMJ CQk5CisjZGVmaW5lIEFUX1BBU1NfQUREX1NUQVRTCQk4CQkvKiBBREQgc3Rh dGlzdGljcyAqLworI2RlZmluZSBBVF9QQVNTX01JU0MJCQk5CQkvKiBvdGhl ciBzdHVmZiAqLworI2RlZmluZSBBVF9OVU1fUEFTU0VTCQkJMTAKIAogdHlw ZWRlZiBzdHJ1Y3QgQWx0ZXJlZFRhYmxlSW5mbwogewpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9jb3B5ZnVuY3MuYwppbmRleCBhOWU5Y2MzLi4xYTA0MDI0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9z cmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtNDEyNCw2ICs0MTI0 LDE5IEBAIF9jb3B5QWx0ZXJQb2xpY3lTdG10KGNvbnN0IEFsdGVyUG9saWN5 U3RtdCAqZnJvbSkKIAlyZXR1cm4gbmV3bm9kZTsKIH0KIAorc3RhdGljIENy ZWF0ZVN0YXRzU3RtdCAqCitfY29weUNyZWF0ZVN0YXRzU3RtdChjb25zdCBD cmVhdGVTdGF0c1N0bXQgKmZyb20pCit7CisJQ3JlYXRlU3RhdHNTdG10ICAq bmV3bm9kZSA9IG1ha2VOb2RlKENyZWF0ZVN0YXRzU3RtdCk7CisKKwlDT1BZ X05PREVfRklFTEQoZGVmbmFtZXMpOworCUNPUFlfTk9ERV9GSUVMRChyZWxh dGlvbik7CisJQ09QWV9OT0RFX0ZJRUxEKGtleXMpOworCUNPUFlfTk9ERV9G SUVMRChvcHRpb25zKTsKKworCXJldHVybiBuZXdub2RlOworfQorCiAvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCiAgKgkJCQkJcGdfbGlzdC5oIGNvcHkgZnVu Y3Rpb25zCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00OTk5LDYgKzUw MTIsOSBAQCBjb3B5T2JqZWN0KGNvbnN0IHZvaWQgKmZyb20pCiAJCWNhc2Ug VF9Db21tb25UYWJsZUV4cHI6CiAJCQlyZXR2YWwgPSBfY29weUNvbW1vblRh YmxlRXhwcihmcm9tKTsKIAkJCWJyZWFrOworCQljYXNlIFRfQ3JlYXRlU3Rh dHNTdG10OgorCQkJcmV0dmFsID0gX2NvcHlDcmVhdGVTdGF0c1N0bXQoZnJv bSk7CisJCQlicmVhazsKIAkJY2FzZSBUX0Z1bmNXaXRoQXJnczoKIAkJCXJl dHZhbCA9IF9jb3B5RnVuY1dpdGhBcmdzKGZyb20pOwogCQkJYnJlYWs7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCA4NWFjY2U4Li40NzRk MmM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTE5Njgs NiArMTk2OCwyMSBAQCBfb3V0SW5kZXhPcHRJbmZvKFN0cmluZ0luZm8gc3Ry LCBjb25zdCBJbmRleE9wdEluZm8gKm5vZGUpCiB9CiAKIHN0YXRpYyB2b2lk Citfb3V0TVZTdGF0aXN0aWNJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBN VlN0YXRpc3RpY0luZm8gKm5vZGUpCit7CisJV1JJVEVfTk9ERV9UWVBFKCJN VlNUQVRJU1RJQ0lORk8iKTsKKworCS8qIE5COiB0aGlzIGlzbid0IGEgY29t cGxldGUgc2V0IG9mIGZpZWxkcyAqLworCVdSSVRFX09JRF9GSUVMRChtdm9p ZCk7CisKKwkvKiBlbmFibGVkIHN0YXRpc3RpY3MgKi8KKwlXUklURV9CT09M X0ZJRUxEKGRlcHNfZW5hYmxlZCk7CisKKwkvKiBidWlsdC9hdmFpbGFibGUg c3RhdGlzdGljcyAqLworCVdSSVRFX0JPT0xfRklFTEQoZGVwc19idWlsdCk7 Cit9CisKK3N0YXRpYyB2b2lkCiBfb3V0RXF1aXZhbGVuY2VDbGFzcyhTdHJp bmdJbmZvIHN0ciwgY29uc3QgRXF1aXZhbGVuY2VDbGFzcyAqbm9kZSkKIHsK IAkvKgpAQCAtMzQwOSw2ICszNDI0LDkgQEAgX291dE5vZGUoU3RyaW5nSW5m byBzdHIsIGNvbnN0IHZvaWQgKm9iaikKIAkJCWNhc2UgVF9QbGFubmVyUGFy YW1JdGVtOgogCQkJCV9vdXRQbGFubmVyUGFyYW1JdGVtKHN0ciwgb2JqKTsK IAkJCQlicmVhazsKKwkJCWNhc2UgVF9NVlN0YXRpc3RpY0luZm86CisJCQkJ X291dE1WU3RhdGlzdGljSW5mbyhzdHIsIG9iaik7CisJCQkJYnJlYWs7CiAK IAkJCWNhc2UgVF9FeHRlbnNpYmxlTm9kZToKIAkJCQlfb3V0RXh0ZW5zaWJs ZU5vZGUoc3RyLCBvYmopOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jCmluZGV4IDBlYTlmY2YuLmI5ZGU3MWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAg LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3ku aCIKICNpbmNsdWRlICJjYXRhbG9nL2hlYXAuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19tdl9zdGF0aXN0 aWMuaCIKICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgpA QCAtNDAsNyArNDEsOSBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUu aCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgog I2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKIApAQCAtOTQsNiArOTcsNyBA QCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJl bGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCVJlbGF0aW9uCXJl bGF0aW9uOwogCWJvb2wJCWhhc2luZGV4OwogCUxpc3QJICAgKmluZGV4aW5m b3MgPSBOSUw7CisJTGlzdAkgICAqc3RhaW5mb3MgPSBOSUw7CiAKIAkvKgog CSAqIFdlIG5lZWQgbm90IGxvY2sgdGhlIHJlbGF0aW9uIHNpbmNlIGl0IHdh cyBhbHJlYWR5IGxvY2tlZCwgZWl0aGVyIGJ5CkBAIC0zODcsNiArMzkxLDY1 IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQg cmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAKIAlyZWwtPmlu ZGV4bGlzdCA9IGluZGV4aW5mb3M7CiAKKwlpZiAodHJ1ZSkKKwl7CisJCUxp c3QJICAgKm12c3RhdG9pZGxpc3Q7CisJCUxpc3RDZWxsICAgKmw7CisKKwkJ bXZzdGF0b2lkbGlzdCA9IFJlbGF0aW9uR2V0TVZTdGF0TGlzdChyZWxhdGlv bik7CisKKwkJZm9yZWFjaChsLCBtdnN0YXRvaWRsaXN0KQorCQl7CisJCQlB cnJheVR5cGUgICphcnI7CisJCQlEYXR1bQkJYWRhdHVtOworCQkJYm9vbAkJ aXNudWxsOworCQkJT2lkCQkJbXZvaWQgPSBsZmlyc3Rfb2lkKGwpOworCQkJ Rm9ybV9wZ19tdl9zdGF0aXN0aWMgbXZzdGF0OworCQkJTVZTdGF0aXN0aWNJ bmZvICppbmZvOworCisJCQlIZWFwVHVwbGUJaHR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShNVlNUQVRPSUQsIE9iamVjdElkR2V0RGF0dW0obXZvaWQpKTsKKwor CQkJLyogWFhYIHN5c2NhY2hlIGNvbnRhaW5zIE9JRHMgb2YgZGVsZXRlZCBz dGF0cyAobm90IGludmFsaWRhdGVkKSAqLworCQkJaWYgKCEgSGVhcFR1cGxl SXNWYWxpZChodHVwKSkKKwkJCQljb250aW51ZTsKKworCQkJbXZzdGF0ID0g KEZvcm1fcGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1cCk7CisKKwkJ CS8qIHVuYXZhaWxhYmxlIHN0YXRzIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9y IHRoZSBwbGFubmVyICovCisJCQlpZiAobXZzdGF0LT5kZXBzX2J1aWx0KQor CQkJeworCQkJCWluZm8gPSBtYWtlTm9kZShNVlN0YXRpc3RpY0luZm8pOwor CisJCQkJaW5mby0+bXZvaWQgPSBtdm9pZDsKKwkJCQlpbmZvLT5yZWwgPSBy ZWw7CisKKwkJCQkvKiBlbmFibGVkIHN0YXRpc3RpY3MgKi8KKwkJCQlpbmZv LT5kZXBzX2VuYWJsZWQgPSBtdnN0YXQtPmRlcHNfZW5hYmxlZDsKKworCQkJ CS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0aXN0aWNzICovCisJCQkJaW5mby0+ ZGVwc19idWlsdCA9IG12c3RhdC0+ZGVwc19idWlsdDsKKworCQkJCS8qIHN0 YWtleXMgKi8KKwkJCQlhZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoTVZTVEFU T0lELCBodHVwLAorCQkJCQkJCQkJCSBBbnVtX3BnX212X3N0YXRpc3RpY19z dGFrZXlzLCAmaXNudWxsKTsKKwkJCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJ CQlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoYWRhdHVtKTsKKworCQkJCWlu Zm8tPnN0YWtleXMgPSBidWlsZGludDJ2ZWN0b3IoKGludDE2ICopIEFSUl9E QVRBX1BUUihhcnIpLAorCQkJCQkJCQkJCQkJQVJSX0RJTVMoYXJyKVswXSk7 CisKKwkJCQlzdGFpbmZvcyA9IGxjb25zKGluZm8sIHN0YWluZm9zKTsKKwkJ CX0KKworCQkJUmVsZWFzZVN5c0NhY2hlKGh0dXApOworCQl9CisKKwkJbGlz dF9mcmVlKG12c3RhdG9pZGxpc3QpOworCX0KKworCXJlbC0+bXZzdGF0bGlz dCA9IHN0YWluZm9zOworCiAJLyogR3JhYiBmb3JlaWduLXRhYmxlIGluZm8g dXNpbmcgdGhlIHJlbGNhY2hlLCB3aGlsZSB3ZSBoYXZlIGl0ICovCiAJaWYg KHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdO X1RBQkxFKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9n cmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IGIzMDdi NDguLjNiZTNmMDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9n cmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMjQx LDcgKzI0MSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1Nl bGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJCUNvbnN0cmFpbnRzU2V0U3RtdCBDb3B5U3RtdCBDcmVhdGVBc1N0 bXQgQ3JlYXRlQ2FzdFN0bXQKIAkJQ3JlYXRlRG9tYWluU3RtdCBDcmVhdGVF eHRlbnNpb25TdG10IENyZWF0ZUdyb3VwU3RtdCBDcmVhdGVPcENsYXNzU3Rt dAogCQlDcmVhdGVPcEZhbWlseVN0bXQgQWx0ZXJPcEZhbWlseVN0bXQgQ3Jl YXRlUExhbmdTdG10Ci0JCUNyZWF0ZVNjaGVtYVN0bXQgQ3JlYXRlU2VxU3Rt dCBDcmVhdGVTdG10IENyZWF0ZVRhYmxlU3BhY2VTdG10CisJCUNyZWF0ZVNj aGVtYVN0bXQgQ3JlYXRlU2VxU3RtdCBDcmVhdGVTdG10IENyZWF0ZVN0YXRz U3RtdCBDcmVhdGVUYWJsZVNwYWNlU3RtdAogCQlDcmVhdGVGZHdTdG10IENy ZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10IENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQK IAkJQ3JlYXRlQXNzZXJ0U3RtdCBDcmVhdGVUcmFuc2Zvcm1TdG10IENyZWF0 ZVRyaWdTdG10IENyZWF0ZUV2ZW50VHJpZ1N0bXQKIAkJQ3JlYXRlVXNlclN0 bXQgQ3JlYXRlVXNlck1hcHBpbmdTdG10IENyZWF0ZVJvbGVTdG10IENyZWF0 ZVBvbGljeVN0bXQKQEAgLTgwOSw2ICs4MDksNyBAQCBzdG10IDoKIAkJCXwg Q3JlYXRlU2NoZW1hU3RtdAogCQkJfCBDcmVhdGVTZXFTdG10CiAJCQl8IENy ZWF0ZVN0bXQKKwkJCXwgQ3JlYXRlU3RhdHNTdG10CiAJCQl8IENyZWF0ZVRh YmxlU3BhY2VTdG10CiAJCQl8IENyZWF0ZVRyYW5zZm9ybVN0bXQKIAkJCXwg Q3JlYXRlVHJpZ1N0bXQKQEAgLTM0MzYsNiArMzQzNywzNiBAQCBPcHRDb25z VGFibGVTcGFjZTogICBVU0lORyBJTkRFWCBUQUJMRVNQQUNFIG5hbWUJeyAk JCA9ICQ0OyB9CiBFeGlzdGluZ0luZGV4OiAgIFVTSU5HIElOREVYIGluZGV4 X25hbWUJCQkJeyAkJCA9ICQzOyB9CiAJCTsKIAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgKgorICoJCVFVRVJZIDoKKyAqCQkJCUNS RUFURSBTVEFUSVNUSUNTIHN0YXRzX25hbWUgT04gcmVsbmFtZSAoY29sdW1u cykgV0lUSCAob3B0aW9ucykKKyAqCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisKKworQ3JlYXRlU3RhdHNTdG10OglDUkVBVEUgU1RB VElTVElDUyBhbnlfbmFtZSBPTiBxdWFsaWZpZWRfbmFtZSAnKCcgY29sdW1u TGlzdCAnKScgb3B0X3JlbG9wdGlvbnMKKwkJCQkJCXsKKwkJCQkJCQlDcmVh dGVTdGF0c1N0bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVTdGF0c1N0bXQpOwor CQkJCQkJCW4tPmRlZm5hbWVzID0gJDM7CisJCQkJCQkJbi0+cmVsYXRpb24g PSAkNTsKKwkJCQkJCQluLT5rZXlzID0gJDc7CisJCQkJCQkJbi0+b3B0aW9u cyA9ICQ5OworCQkJCQkJCW4tPmlmX25vdF9leGlzdHMgPSBmYWxzZTsKKwkJ CQkJCQkkJCA9IChOb2RlICopbjsKKwkJCQkJCX0KKwkJCQkJfCBDUkVBVEUg U1RBVElTVElDUyBJRl9QIE5PVCBFWElTVFMgYW55X25hbWUgT04gcXVhbGlm aWVkX25hbWUgJygnIGNvbHVtbkxpc3QgJyknIG9wdF9yZWxvcHRpb25zCisJ CQkJCQl7CisJCQkJCQkJQ3JlYXRlU3RhdHNTdG10ICpuID0gbWFrZU5vZGUo Q3JlYXRlU3RhdHNTdG10KTsKKwkJCQkJCQluLT5kZWZuYW1lcyA9ICQ2Owor CQkJCQkJCW4tPnJlbGF0aW9uID0gJDg7CisJCQkJCQkJbi0+a2V5cyA9ICQx MDsKKwkJCQkJCQluLT5vcHRpb25zID0gJDEyOworCQkJCQkJCW4tPmlmX25v dF9leGlzdHMgPSB0cnVlOworCQkJCQkJCSQkID0gKE5vZGUgKiluOworCQkJ CQkJfQorCQkJOworCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgogICoKQEAgLTU2MjEsNiArNTY1Miw3IEBAIGRyb3BfdHlwZToJVEFC TEUJCQkJCQkJCQl7ICQkID0gT0JKRUNUX1RBQkxFOyB9CiAJCQl8IFRFWFRf UCBTRUFSQ0ggRElDVElPTkFSWQkJCQl7ICQkID0gT0JKRUNUX1RTRElDVElP TkFSWTsgfQogCQkJfCBURVhUX1AgU0VBUkNIIFRFTVBMQVRFCQkJCXsgJCQg PSBPQkpFQ1RfVFNURU1QTEFURTsgfQogCQkJfCBURVhUX1AgU0VBUkNIIENP TkZJR1VSQVRJT04JCQl7ICQkID0gT0JKRUNUX1RTQ09ORklHVVJBVElPTjsg fQorCQkJfCBTVEFUSVNUSUNTCQkJCQkJCXsgJCQgPSBPQkpFQ1RfU1RBVElT VElDUzsgfQogCQk7CiAKIGFueV9uYW1lX2xpc3Q6CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jCmluZGV4IDA0NWY3ZjAuLjJiYTg4ZTIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5k L3Rjb3AvdXRpbGl0eS5jCkBAIC0xNTIwLDYgKzE1MjAsMTAgQEAgUHJvY2Vz c1V0aWxpdHlTbG93KE5vZGUgKnBhcnNldHJlZSwKIAkJCQlhZGRyZXNzID0g RXhlY1NlY0xhYmVsU3RtdCgoU2VjTGFiZWxTdG10ICopIHBhcnNldHJlZSk7 CiAJCQkJYnJlYWs7CiAKKwkJCWNhc2UgVF9DcmVhdGVTdGF0c1N0bXQ6CS8q IENSRUFURSBTVEFUSVNUSUNTICovCisJCQkJYWRkcmVzcyA9IENyZWF0ZVN0 YXRpc3RpY3MoKENyZWF0ZVN0YXRzU3RtdCAqKSBwYXJzZXRyZWUpOworCQkJ CWJyZWFrOworCiAJCQlkZWZhdWx0OgogCQkJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsCiAJCQkJCSAoaW50KSBub2RlVGFn KHBhcnNldHJlZSkpOwpAQCAtMjE2MCw2ICsyMTY0LDkgQEAgQ3JlYXRlQ29t bWFuZFRhZyhOb2RlICpwYXJzZXRyZWUpCiAJCQkJY2FzZSBPQkpFQ1RfVFJB TlNGT1JNOgogCQkJCQl0YWcgPSAiRFJPUCBUUkFOU0ZPUk0iOwogCQkJCQli cmVhazsKKwkJCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNTOgorCQkJCQl0YWcg PSAiRFJPUCBTVEFUSVNUSUNTIjsKKwkJCQkJYnJlYWs7CiAJCQkJZGVmYXVs dDoKIAkJCQkJdGFnID0gIj8/PyI7CiAJCQl9CkBAIC0yNTI3LDYgKzI1MzQs MTAgQEAgQ3JlYXRlQ29tbWFuZFRhZyhOb2RlICpwYXJzZXRyZWUpCiAJCQl0 YWcgPSAiRVhFQ1VURSI7CiAJCQlicmVhazsKIAorCQljYXNlIFRfQ3JlYXRl U3RhdHNTdG10OgorCQkJdGFnID0gIkNSRUFURSBTVEFUSVNUSUNTIjsKKwkJ CWJyZWFrOworCiAJCWNhc2UgVF9EZWFsbG9jYXRlU3RtdDoKIAkJCXsKIAkJ CQlEZWFsbG9jYXRlU3RtdCAqc3RtdCA9IChEZWFsbG9jYXRlU3RtdCAqKSBw YXJzZXRyZWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9NYWtl ZmlsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL01ha2VmaWxlCmluZGV4IDgzNzQ1 MzMuLmViYTAzNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL01h a2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL01ha2VmaWxlCkBAIC05 LDcgKzksNyBAQCB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgogaW5jbHVkZSAk KHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCiBPQkpTICAg ICAgICA9IGZtZ3J0YWIubwotU1VCRElSUyAgICAgPSBhZHQgY2FjaGUgZXJy b3IgZm1nciBoYXNoIGluaXQgbWIgbWlzYyBtbWdyIHJlc293bmVyIHNvcnQg dGltZQorU1VCRElSUyAgICAgPSBhZHQgY2FjaGUgZXJyb3IgZm1nciBoYXNo IGluaXQgbWIgbWlzYyBtbWdyIG12c3RhdHMgcmVzb3duZXIgc29ydCB0aW1l CiAKICMgbG9jYXRpb24gb2YgQ2F0YWxvZy5wbQogY2F0YWxvZ2RpciAgPSAk KHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NhdGFsb2cKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDEzMGMwNmQuLjNi YzRjOGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3Jl bGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdf YXV0aF9tZW1iZXJzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJh aW50LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X29wY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKQEAg LTM5NTYsNiArMzk1Nyw2MiBAQCBSZWxhdGlvbkdldEluZGV4TGlzdChSZWxh dGlvbiByZWxhdGlvbikKIAlyZXR1cm4gcmVzdWx0OwogfQogCisKK0xpc3Qg KgorUmVsYXRpb25HZXRNVlN0YXRMaXN0KFJlbGF0aW9uIHJlbGF0aW9uKQor eworCVJlbGF0aW9uCWluZHJlbDsKKwlTeXNTY2FuRGVzYyBpbmRzY2FuOwor CVNjYW5LZXlEYXRhIHNrZXk7CisJSGVhcFR1cGxlCWh0dXA7CisJTGlzdAkg ICAqcmVzdWx0OworCUxpc3QJICAgKm9sZGxpc3Q7CisJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGFscmVhZHkgY29t cHV0ZWQgdGhlIGxpc3QuICovCisJaWYgKHJlbGF0aW9uLT5yZF9tdnN0YXR2 YWxpZCAhPSAwKQorCQlyZXR1cm4gbGlzdF9jb3B5KHJlbGF0aW9uLT5yZF9t dnN0YXRsaXN0KTsKKworCS8qCisJICogV2UgYnVpbGQgdGhlIGxpc3Qgd2Ug aW50ZW5kIHRvIHJldHVybiAoaW4gdGhlIGNhbGxlcidzIGNvbnRleHQpIHdo aWxlCisJICogZG9pbmcgdGhlIHNjYW4uICBBZnRlciBzdWNjZXNzZnVsbHkg Y29tcGxldGluZyB0aGUgc2Nhbiwgd2UgY29weSB0aGF0CisJICogbGlzdCBp bnRvIHRoZSByZWxjYWNoZSBlbnRyeS4gIFRoaXMgYXZvaWRzIGNhY2hlLWNv bnRleHQgbWVtb3J5IGxlYWthZ2UKKwkgKiBpZiB3ZSBnZXQgc29tZSBzb3J0 IG9mIGVycm9yIHBhcnR3YXkgdGhyb3VnaC4KKwkgKi8KKwlyZXN1bHQgPSBO SUw7CisKKwkvKiBQcmVwYXJlIHRvIHNjYW4gcGdfaW5kZXggZm9yIGVudHJp ZXMgaGF2aW5nIGluZHJlbGlkID0gdGhpcyByZWwuICovCisJU2NhbktleUlu aXQoJnNrZXksCisJCQkJQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhcmVsaWQs CisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9i amVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbikpKTsK KworCWluZHJlbCA9IGhlYXBfb3BlbihNdlN0YXRpc3RpY1JlbGF0aW9uSWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJaW5kc2NhbiA9IHN5c3RhYmxlX2JlZ2lu c2NhbihpbmRyZWwsIE12U3RhdGlzdGljUmVsaWRJbmRleElkLCB0cnVlLAor CQkJCQkJCQkgTlVMTCwgMSwgJnNrZXkpOworCisJd2hpbGUgKEhlYXBUdXBs ZUlzVmFsaWQoaHR1cCA9IHN5c3RhYmxlX2dldG5leHQoaW5kc2NhbikpKQor CQkvKiBUT0RPIG1heWJlIGluY2x1ZGUgb25seSBhbHJlYWR5IGJ1aWx0IHN0 YXRpc3RpY3M/ICovCisJCXJlc3VsdCA9IGluc2VydF9vcmRlcmVkX29pZChy ZXN1bHQsIEhlYXBUdXBsZUdldE9pZChodHVwKSk7CisKKwlzeXN0YWJsZV9l bmRzY2FuKGluZHNjYW4pOworCisJaGVhcF9jbG9zZShpbmRyZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwkvKiBOb3cgc2F2ZSBhIGNvcHkgb2YgdGhlIGNv bXBsZXRlZCBsaXN0IGluIHRoZSByZWxjYWNoZSBlbnRyeS4gKi8KKwlvbGRj eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQ2FjaGVNZW1vcnlDb250ZXh0 KTsKKwlvbGRsaXN0ID0gcmVsYXRpb24tPnJkX212c3RhdGxpc3Q7CisJcmVs YXRpb24tPnJkX212c3RhdGxpc3QgPSBsaXN0X2NvcHkocmVzdWx0KTsKKwor CXJlbGF0aW9uLT5yZF9tdnN0YXR2YWxpZCA9IHRydWU7CisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkvKiBEb24ndCBsZWFrIHRoZSBv bGQgbGlzdCwgaWYgdGhlcmUgaXMgb25lICovCisJbGlzdF9mcmVlKG9sZGxp c3QpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwogLyoKICAqIGluc2VydF9v cmRlcmVkX29pZAogICoJCUluc2VydCBhIG5ldyBPaWQgaW50byBhIHNvcnRl ZCBsaXN0IG9mIE9pZHMsIHByZXNlcnZpbmcgb3JkZXJpbmcKQEAgLTQ5MjAs NiArNDk3Nyw4IEBAIGxvYWRfcmVsY2FjaGVfaW5pdF9maWxlKGJvb2wgc2hh cmVkKQogCQlyZWwtPnJkX2luZGV4YXR0ciA9IE5VTEw7CiAJCXJlbC0+cmRf a2V5YXR0ciA9IE5VTEw7CiAJCXJlbC0+cmRfaWRhdHRyID0gTlVMTDsKKwkJ cmVsLT5yZF9tdnN0YXR2YWxpZCA9IGZhbHNlOworCQlyZWwtPnJkX212c3Rh dGxpc3QgPSBOSUw7CiAJCXJlbC0+cmRfY3JlYXRlU3ViaWQgPSBJbnZhbGlk U3ViVHJhbnNhY3Rpb25JZDsKIAkJcmVsLT5yZF9uZXdSZWxmaWxlbm9kZVN1 YmlkID0gSW52YWxpZFN1YlRyYW5zYWN0aW9uSWQ7CiAJCXJlbC0+cmRfYW1j YWNoZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9zeXNjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvc3lz Y2FjaGUuYwppbmRleCA2NWZmZTg0Li4zYzFiYzRiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9zeXNjYWNoZS5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3N5c2NhY2hlLmMKQEAgLTQ0LDYgKzQ0LDcg QEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fc2VydmVyLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3RhYmxlLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19sYW5ndWFnZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfbXZfc3RhdGlzdGljLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1l c3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCkBAIC01MDIsNiArNTAz LDI4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2FjaGVkZXNjIGNhY2hlaW5m b1tdID0gewogCQl9LAogCQk0CiAJfSwKKwl7TXZTdGF0aXN0aWNSZWxhdGlv bklkLAkJLyogTVZTVEFUTkFNRU5TUCAqLworCQlNdlN0YXRpc3RpY05hbWVJ bmRleElkLAorCQkyLAorCQl7CisJCQlBbnVtX3BnX212X3N0YXRpc3RpY19z dGFuYW1lLAorCQkJQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmFtZXNwYWNl LAorCQkJMCwKKwkJCTAKKwkJfSwKKwkJNAorCX0sCisJe012U3RhdGlzdGlj UmVsYXRpb25JZCwJCS8qIE1WU1RBVE9JRCAqLworCQlNdlN0YXRpc3RpY09p ZEluZGV4SWQsCisJCTEsCisJCXsKKwkJCU9iamVjdElkQXR0cmlidXRlTnVt YmVyLAorCQkJMCwKKwkJCTAsCisJCQkwCisJCX0sCisJCTQKKwl9LAogCXtO YW1lc3BhY2VSZWxhdGlvbklkLAkJLyogTkFNRVNQQUNFTkFNRSAqLwogCQlO YW1lc3BhY2VOYW1lSW5kZXhJZCwKIAkJMSwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC91 dGlscy9tdnN0YXRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjA5OWYxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTcg QEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2Vm aWxlLS0KKyMgICAgTWFrZWZpbGUgZm9yIHV0aWxzL212c3RhdHMKKyMKKyMg SURFTlRJRklDQVRJT04KKyMgICAgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9NYWtlZmlsZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Kworc3ViZGlyID0gc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cwordG9wX2J1 aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIp L3NyYy9NYWtlZmlsZS5nbG9iYWwKKworT0JKUyA9IGNvbW1vbi5vIGRlcGVu ZGVuY2llcy5vCisKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2Vu ZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvUkVBRE1FLmRlcGVuZGVuY2llcyBiL3NyYy9iYWNrZW5kL3V0aWxz L212c3RhdHMvUkVBRE1FLmRlcGVuZGVuY2llcwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xZjk2ZmJjCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuZGVwZW5kZW5j aWVzCkBAIC0wLDAgKzEsMjIyIEBACitTb2Z0IGZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgdHlw ZSBvZiBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcyB1c2VkIHRvIGNhcHR1cmUg Y2FzZXMgd2hlbiBvbmUgY29sdW1uIChvcgorcG9zc2libHkgYSBjb21iaW5h dGlvbiBvZiBjb2x1bW5zKSBkZXRlcm1pbmVzIHZhbHVlcyBpbiBhbm90aGVy IGNvbHVtbi4gV2UgbWF5CithbHNvIHNheSB0aGF0IG9uZSBjb2x1bW4gaW1w bGllcyB0aGUgb3RoZXIgb25lLgorCitBIHNpbXBsZSBhcnRpZmljaWFsIGV4 YW1wbGUgbWF5IGJlIGEgdGFibGUgd2l0aCB0d28gY29sdW1ucywgY3JlYXRl ZCBsaWtlIHRoaXMKKworICAgIENSRUFURSBUQUJMRSB0IChhIElOVCwgYiBJ TlQpCisgICAgICAgIEFTIFNFTEVDVCBpLCBpLzEwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDAwKSBzKGkpOworCitDbGVhcmx5LCBvbmNlIHdlIGtu b3cgdGhlIHZhbHVlIGZvciBjb2x1bW4gJ2EnIHRoZSB2YWx1ZSBmb3IgJ2In IGlzIHRyaXZpYWxseQorZGV0ZXJtaW5lZCwgYXMgaXQncyBzaW1wbHkgKGEv MTApLiBBIG1vcmUgcHJhY3RpY2FsIGV4YW1wbGUgbWF5IGJlIGFkZHJlc3Nl cywKK3doZXJlIChaSVAgY29kZSAtPiBjaXR5IG5hbWUpLCBpLmUuIG9uY2Ug d2Uga25vdyB0aGUgWklQLCB3ZSBwcm9iYWJseSBrbm93IHRoZQorY2l0eSBp dCBiZWxvbmdzIHRvLCBhcyBaSVAgY29kZXMgYXJlIHVzdWFsbHkgYXNzaWdu ZWQgdG8gb25lIGNpdHkuIExhcmdlciBjaXRpZXMKK21heSBoYXZlIG11bHRp cGxlIFpJUCBjb2Rlcywgc28gdGhlIGRlcGVuZGVuY3kgY2FuJ3QgYmUgcmV2 ZXJzZWQuCisKK0Z1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGFyZSBhIGNvbmNl cHQgd2VsbCBkZXNjcmliZWQgaW4gcmVsYXRpb25hbCB0aGVvcnksCitwYXJ0 aWN1bGFybHkgaW4gZGVmaW5pdGlvbiBvZiBub3JtYWxpemF0aW9uIGFuZCAi bm9ybWFsIGZvcm1zIi4gV2lraXBlZGlhIGhhcyBhCituaWNlIGRlZmluaXRp b24gb2YgYSBmdW5jdGlvbmFsIGRlcGVuZGVuY3kgWzFdOgorCisgICAgSW4g YSBnaXZlbiB0YWJsZSwgYW4gYXR0cmlidXRlIFkgaXMgc2FpZCB0byBoYXZl IGEgZnVuY3Rpb25hbCBkZXBlbmRlbmN5IG9uCisgICAgYSBzZXQgb2YgYXR0 cmlidXRlcyBYICh3cml0dGVuIFggLT4gWSkgaWYgYW5kIG9ubHkgaWYgZWFj aCBYIHZhbHVlIGlzCisgICAgYXNzb2NpYXRlZCB3aXRoIHByZWNpc2VseSBv bmUgWSB2YWx1ZS4gRm9yIGV4YW1wbGUsIGluIGFuICJFbXBsb3llZSIgdGFi bGUKKyAgICB0aGF0IGluY2x1ZGVzIHRoZSBhdHRyaWJ1dGVzICJFbXBsb3ll ZSBJRCIgYW5kICJFbXBsb3llZSBEYXRlIG9mIEJpcnRoIiwgdGhlCisgICAg ZnVuY3Rpb25hbCBkZXBlbmRlbmN5IHtFbXBsb3llZSBJRH0gLT4ge0VtcGxv eWVlIERhdGUgb2YgQmlydGh9IHdvdWxkIGhvbGQuCisgICAgSXQgZm9sbG93 cyBmcm9tIHRoZSBwcmV2aW91cyB0d28gc2VudGVuY2VzIHRoYXQgZWFjaCB7 RW1wbG95ZWUgSUR9IGlzCisgICAgYXNzb2NpYXRlZCB3aXRoIHByZWNpc2Vs eSBvbmUge0VtcGxveWVlIERhdGUgb2YgQmlydGh9LgorCisgICAgWzFdIGh0 dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0YWJhc2Vfbm9ybWFsaXph dGlvbgorCitNYW55IGRhdGFzZXRzIG1pZ2h0IGJlIG5vcm1hbGl6ZWQgbm90 IHRvIGNvbnRhaW4gc3VjaCBkZXBlbmRlbmNpZXMsIGJ1dCBvZnRlbgoraXQn cyBub3QgcHJhY3RpY2FsIGZvciB2YXJpb3VzIHJlYXNvbnMuIEluIHNvbWUg Y2FzZXMgaXQncyBhY3R1YWxseSBhIGNvbnNjaW91cworZGVzaWduIGNob2lj ZSB0byBtb2RlbCB0aGUgZGF0YXNldCBpbiBkZW5vcm1hbGl6ZWQgd2F5LCBl aXRoZXIgYmVjYXVzZSBvZgorcGVyZm9ybWFuY2Ugb3IgdG8gbWFrZSBxdWVy eWluZyBlYXNpZXIuCisKK1RoZSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBh cmUgY2FsbGVkICdzb2Z0JyBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBp cworbWVhbnQgdG8gYWxsb3cgc21hbGwgbnVtYmVyIG9mIHJvd3MgY29udHJh ZGljdGluZyB0aGUgZGVwZW5kZW5jeS4gTWFueSBhY3R1YWwKK2RhdGEgc2V0 cyBjb250YWluIHNvbWUgc29ydCBvZiBlcnJvcnMsIGVpdGhlciBiZWNhdXNl IG9mIGRhdGEgZW50cnkgbWlzdGFrZXMKKyh1c2VyIG1pc3R5cGluZyB0aGUg WklQIGNvZGUpIG9yIGlzc3VlcyBpbiBnZW5lcmF0aW5nIHRoZSBkYXRhIChl LmcuIGEgWklQIGNvZGUKK21pc3Rha2VubHkgYXNzaWduZWQgdG8gdHdvIGNp dGllcyBpbiBkaWZmZXJlbnQgc3RhdGVzKS4gQSBzdHJpY3QgaW1wbGVtZW50 YXRpb24KK3dvdWxkIGlnbm9yZSBkZXBlbmRlbmNpZXMgb24gc3VjaCBub2lz eSBkYXRhLCByZW5kZXJpbmcgdGhlIGFwcHJvYWNoIHVudXNhYmxlIG9uCitz dWNoIGRhdGEgc2V0cy4KKworCitNaW5pbmcgZGVwZW5kZW5jaWVzIChBTkFM WVpFKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGN1 cnJlbnQgYnVpbGQgYWxnb3JpdGhtIGlzIHJhdGhlciBzaW1wbGUgLSBmb3Ig ZWFjaCBwYWlyIChhLGIpIG9mIGNvbHVtbnMsCit0aGUgZGF0YSBhcmUgc29y dGVkIGxleGljb2dyYXBoaWNhbGx5IChmaXJzdCBieSAnYScsIHRoZW4gYnkg J2InKS4gVGhlbiBmb3IgZWFjaAorZ3JvdXAgKHJvd3Mgd2l0aCB0aGUgc2Ft ZSAnYScgdmFsdWUpIHdlIGRlY2lkZSB3aGV0aGVyIHRoZSBncm91cCBpcyBu ZXV0cmFsLAorc3VwcG9ydGluZyBvciBjb250cmFkaWN0aW5nIHRoZSBkZXBl bmRlbmN5IChhLT5iKS4KKworQSBncm91cCBpcyBjb25zaWRlcmVkIG5ldXRy YWwgd2hlbiBpdCdzIHRvbyBzbWFsbCAtIGUuZy4gd2hlbiB0aGVyZSdzIGEg c2luZ2xlCityb3cgaW4gdGhlIGdyb3VwLCB0aGVyZSBjYW4ndCBwb3NzaWJs eSBiZSBtdWx0aXBsZSB2YWx1ZXMgaW4gJ2InLiBGb3IgdGhpcworcmVhc29u IHdlIGlnbm9yZSBncm91cHMgc21hbGxlciB0aGFuIGEgdGhyZXNob2xkIChj dXJyZW50bHkgMyByb3dzKS4KKworRm9yIHN1ZmZpY2llbnRseSBsYXJnZSBn cm91cHMgKDMgcm93cyBvciBtb3JlKSwgd2UgY291bnQgdGhlIG51bWJlciBv ZiBkaXN0aW5jdAordmFsdWVzIGluICdiJy4gV2hlbiB0aGVyZSdzIGEgc2lu Z2xlICdiJyB2YWx1ZSwgdGhlIGdyb3VwIGlzIGNvbnNpZGVyZWQgdG8KK3N1 cHBvcnQgdGhlIGRlcGVuZGVuY3kgKGEtPmIpLCBvdGhlcndpc2UgaXQncyBj b25kaWRlcmVkIGFzIGNvbnRyYWRpY3RpbmcgaXQuCisKK0F0IHRoZSBlbmQs IHdlIGNvbXBhcmUgdGhlIG51bWJlciBvZiByb3dzIGluIHN1cHBvcnRpbmcg YW5kIGNvbnRyYWRpY3RpbmcgZ3JvdXBzLAorYW5kIGlmIHRoZXJlIGFyZSBh dCBsZWFzdCAxMHggYXMgbWFueSBzdXBwb3J0aW5nIHJvd3MsIHdlIGNvbnNp ZGVyIHRoZQorZnVuY3Rpb25hbCBkZXBlbmRlbmN5IHRvIGJlIHZhbGlkLgor CisKK1RoaXMgYXBwcm9hY2ggaGFzIHRoZSBuZWdhdGl2ZSBwcm9wZXJ0eSB0 aGF0IHRoZSBhbGdvcml0aG0gaXMgdGhhdCBpdCdzIGEgYml0CitmcmFnaWxl IHdpdGggcmVzcGVjdCB0byB0aGUgc2FtcGxlIC0gdGhlcmUgbWF5IGJlIGRh dGEgc2V0cyBwcm9kdWNpbmcgcXVpdGUKK2RpZmZlcmVudCByZXN1bHRzIGZv ciBlYWNoIEFOQUxZWkUgZXhlY3V0aW9uIChhcyBldmVuIGEgc2luZ2xlIHJv dyBtYXkgY2hhbmdlCit0aGUgb3V0Y29tZSBvZiB0aGUgZmluYWwgMTB4IHRl c3QpLgorCitJdCB3YXMgcHJvcG9zZWQgdG8gbWFrZSB0aGUgZGVwZW5kZW5j aWVzICJmdXp6eSIgLSBlLmcuIHRyYWNrIHNvbWUgY29lZmZpY2llbnQKK2Jl dHdlZW4gWzAsMV0gZGV0ZXJtaW5pbmcgaG93IG11Y2ggdGhlIGRlcGVuZGVu Y3kgaG9sZHMuIFRoYXQgd291bGQgaG93ZXZlciBtZWFuCit3ZSBoYXZlIHRv IGtlZXAgYWxsIHRoZSBkZXBlbmRlbmNpZXMsIGFzIGVsaW1pbmF0aW5nIHRo ZW0gYmFzZWQgb24gdGhlIHZhbHVlIG9mCit0aGUgY29lZmZpY2llbnQgKGUu Zy4gdGhyb3cgYXdheSBkZXBlbmRlbmNpZXMgPD0gMC41KSB3b3VsZCByZXN1 bHQgaW4gZXhhY3RseQordGhlIHNhbWUgZnJhZ2lsaXR5IGlzc3Vlcy4gVGhp cyB3b3VsZCBhbHNvIG1ha2UgaXQgbW9yZSBjb21wbGljYXRlZCB0byBjb21i aW5lCitkZXBlbmRlbmNpZXMuIFNvIHRoaXMgZG9lcyBub3Qgc2VlbSBsaWtl IGEgcHJhY3RpY2FsIGFwcHJvYWNoLgorCitBIGJldHRlciBhcHByb2FjaCBt aWdodCBiZSB0byByZXBsYWNlIHRoZSBjb25zdGFudHMgKG1pbl9ncm91cF9z aXplPTMgYW5kIDEweCkKK3dpdGggdmFsdWVzIHNvbWVob3cgcmVsYXRlZCB0 byB0aGUgcGFydGljdWxhciBkYXRhIHNldC4KKworCitDbGF1c2UgcmVkdWN0 aW9uIChwbGFubmVyL29wdGltaXplcikKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorCitBcGxseWluZyB0aGUgZnVuY3Rpb25hbCBk ZXBlbmRlbmNpZXMgaXMgcXVpdGUgc2ltcGxlIC0gZ2l2ZW4gYSBsaXN0IG9m IGVxdWFsaXR5CitjbGF1c2VzLCBjaGVjayB3aGljaCBjbGF1c2VzIGFyZSBy ZWR1bmRhbnQgKGkuZS4gaW1wbGllZCBieSBzb21lIG90aGVyIGNsYXVzZSku CitGb3IgZXhhbXBsZSBnaXZlbiBjbGF1c2UgbGlzdAorCisgICAgKGEgPSAy KSBBTkQgKGIgPSAyKSBBTkQgKGMgPSAzKQorCithbmQgZGVwZW5kZW5jaWVz IChhLT5iKSBhbmQgKGEtPmQpLCB0aGUgbGlzdCBvZiBjbGF1c2VzIG1heSBi ZSBzaW1wbGlmaWVkIHRvCisKKyAgICAoYSA9IDEpIEFORCAoYyA9IDMpCisK K0Z1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIG1heSBvbmx5IGJlIGFwcGxpZWQg dG8gZXF1YWxpdHkgY2xhdXNlcywgYWxsIG90aGVyIHR5cGVzCitvZiBjbGF1 c2VzIGFyZSBpZ25vcmVkLiBTZWUgY2xhdXNlbGlzdF9hcHBseV9kZXBlbmRl bmNpZXMoKSBmb3IgbW9yZSBkZXRhaWxzLgorCisKK0NvbXBhdGliaWxpdHkg b2YgY2xhdXNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBy ZWR1Y3Rpb24gYXNzdW1lcyB0aGUgY2xhdXNlcyByZWFsbHkgYXJlIHJlZHVu ZGFudCwgYW5kIHRoZSB2YWx1ZSBpbiB0aGUKK3JlZHVjZWQgY2xhdXNlIChi PTIpIGlzIHRoZSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IChhPTEpLiBJZiB0aGF0 J3Mgbm90IHRoZSBjYXNlCithbmQgdGhlIHZhbHVlcyBhcmUgImluY29tcGF0 aWJsZSIgdGhlIHJlc3VsdCB3aWxsIGJlIG92ZXItZXN0aW1hdGlvbi4KKwor VGhpcyBtYXkgaGFwcGVuIGZvciBleGFtcGxlIHdoZW4gdXNpbmcgY29uZGl0 aW9ucyBvbiBaSVAgYW5kIGNpdHkgbmFtZSB3aXRoCittaXNtYXRjaGluZyB2 YWx1ZXMgKFpJUCBmb3IgYSBkaWZmZXJlbnQgY2l0eSksIGV0Yy4gSW4gc3Vj aCBjYXNlIHRoZSByZXN1bHQKK3NldCB3aWxsIGJlIGVtcHR5LCBidXQgd2Un bGwgZXN0aW1hdGUgdGhlIHNlbGVjdGl2aXR5IHVzaW5nIHRoZSBaSVAgY29u ZGl0aW9uLgorCitJbiB0aGlzIGNhc2UgdGhlIGRlZmF1bHQgZXN0aW1hdGlv biBiYXNlZCBvbiBBVklBIHByaW5jaXBsZSBoYXBwZW5zIHRvIHdvcmsKK2Jl dHRlciwgYnV0IG1vc3RseSBieSBjaGFuY2UuCisKKworRGVwZW5kZW5jaWVz IHZzLiBNQ1YvaGlzdG9ncmFtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKworSW4gc29tZSBjYXNlcyB0aGUgImNvbXBhdGliaWxpdHkiIG9m IHRoZSBjb25kaXRpb25zIG1pZ2h0IGJlIHZlcmlmaWVkIHVzaW5nIHRoZQor b3RoZXIgdHlwZXMgb2YgbXVsdGl2YXJpYXRlIHN0YXRzIC0gTUNWIGxpc3Rz IGFuZCBoaXN0b2dyYW1zLgorCitGb3IgTUNWIGxpc3RzIHRoZSB2ZXJpZmlj YXRpb24gbWlnaHQgYmUgdmVyeSBzaW1wbGUgLSBwZWVrIGludG8gdGhlIGxp c3QgaWYKK3RoZXJlIGFyZSBhbnkgaXRlbXMgbWF0Y2hpbmcgdGhlIGNsYXVz ZSBvbiB0aGUgJ2EnIGNvbHVtbiAoZS5nLiBaSVAgY29kZSksIGFuZAoraWYg c3VjaCBpdGVtIGlzIGZvdW5kLCBjaGVjayB0aGF0IHRoZSAnYicgY29sdW1u IG1hdGNoZXMgdGhlIG90aGVyIGNsYXVzZS4gSWYgaXQKK2RvZXMgbm90LCB0 aGUgY2xhdXNlcyBhcmUgY29udHJhZGljdG9yeS4gV2UgY2FuJ3QgcmVhbGx5 IHNheSBpZiBzdWNoIGl0ZW0gd2FzCitub3QgZm91bmQsIGV4Y2VwdCBtYXli ZSByZXN0cmljdGluZyB0aGUgc2VsZWN0aXZpdHkgdXNpbmcgdGhlIE1DViBk YXRhIChlLmcuCit1c2luZyBtaW4vbWF4IHNlbGVjdGl2aXR5LCBvciBzb21l dGhpbmcpLgorCitXaXRoIGhpc3RvZ3JhbXMsIGl0IG1pZ2h0IHdvcmsgc2lt aWxhcmx5IC0gd2UgY2FuJ3QgY2hlY2sgdGhlIHZhbHVlcyBkaXJlY3RseQor KGJlY2F1c2UgaGlzdG9ncmFtcyB1c2UgYnVja2V0cywgdW5saWtlIE1DViBs aXN0cywgc3RvcmluZyB0aGUgYWN0dWFsIHZhbHVlcykuCitTbyB3ZSBjYW4g b25seSBvYnNlcnZlIHRoZSBidWNrZXRzIG1hdGNoaW5nIHRoZSBjbGF1c2Vz IC0gaWYgdGhvc2UgYnVja2V0cyBoYXZlCit2ZXJ5IGxvdyBmcmVxdWVuY3ks IGl0IHByb2JhYmx5IG1lYW5zIHRoZSB0d28gY2xhdXNlcyBhcmUgaW5jb21w YXRpYmxlLgorCitJdCdzIHVuY2xlYXIgd2hhdCAnbG93IGZyZXF1ZW5jeScg aXMsIGJ1dCBpZiBvbmUgb2YgdGhlIGNsYXVzZXMgaXMgaW1wbGllZAorKGF1 dG9tYXRpY2FsbHkgdHJ1ZSBiZWNhdXNlIG9mIHRoZSBvdGhlciBjbGF1c2Up LCB0aGVuCisKKyAgICBzZWxlY3Rpdml0eVtjbGF1c2UoQSldID0gc2VsZWN0 aXZpdHlbY2xhdXNlKEEpICYgY2xhdXNlKEIpXQorCitTbyB3ZSBtaWdodCBj b21wdXRlIHNlbGVjdGl2aXR5IG9mIHRoZSBmaXJzdCBjbGF1c2UgLSBmb3Ig ZXhhbXBsZSB1c2luZyByZWd1bGFyCitzdGF0aXN0aWNzLiBBbmQgdGhlbiBj aGVjayBpZiB0aGUgc2VsZWN0aXZpdHkgY29tcHV0ZWQgZnJvbSB0aGUgaGlz dG9ncmFtIGlzCithYm91dCB0aGUgc2FtZSAob3Igc2lnbmlmaWNhbnRseSBs b3dlcikuCisKK1RoZSBwcm9ibGVtIGlzIHRoYXQgaGlzdG9ncmFtcyB3b3Jr IHdlbGwgb25seSB3aGVuIHRoZSBkYXRhIG9yZGVyaW5nIG1hdGNoZXMgdGhl CituYXR1cmFsIG1lYW5pbmcuIEZvciB2YWx1ZXMgdGhhdCBzZXJ2ZSBhcyBs YWJlbHMgLSBsaWtlIGNpdHkgbmFtZXMgb3IgWklQIGNvZGVzLAorb3IgZXZl biBnZW5lcmF0ZWQgSURzLCBoaXN0b2dyYW1zIHJlYWxseSBkb24ndCB3b3Jr IGFsbCB0aGF0IHdlbGwuIEZvciBleGFtcGxlCitzb3J0aW5nIGNpdGllcyBi eSBuYW1lIHdvbid0IG1hdGNoIHRoZSBzb3J0aW5nIG9mIFpJUCBjb2Rlcywg cmVuZGVyaW5nIHRoZQoraGlzdG9ncmFtIHVudXNhYmxlLgorCitTbyBNQ1Zz IGFyZSBwcm9iYWJseSBnb2luZyB0byB3b3JrIG11Y2ggYmV0dGVyLCBiZWNh dXNlIHRoZXkgZG9uJ3QgcmVhbGx5IGFzc3VtZQorYW55IHNvcnQgb2Ygb3Jk ZXJpbmcuIEFuZCBpdCdzIHByb2JhYmx5IG1vcmUgYXBwcm9wcmlhdGUgZm9y IHRoZSBsYWJlbC1saWtlIGRhdGEuCisKK0EgZ29vZCBxdWVzdGlvbiBob3dl dmVyIGlzIHdoeSBldmVuIHVzZSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBp biBzdWNoIGNhc2VzCithbmQgbm90IHNpbXBseSB1c2UgdGhlIE1DVi9oaXN0 b2dyYW0gaW5zdGVhZC4gT25lIHJlYXNvbiBpcyB0aGF0IHRoZSBmdW5jdGlv bmFsCitkZXBlbmRlbmNpZXMgYWxsb3cgZmFsbGJhY2sgdG8gcmVndWxhciBz dGF0cywgYW5kIG9mdGVuIHByb2R1Y2UgbW9yZSBhY2N1cmF0ZQorZXN0aW1h dGVzIC0gZXNwZWNpYWxseSBjb21wYXJlZCB0byBoaXN0b2dyYW1zLCB0aGF0 IGFyZSBxdWl0ZSBiYWQgaW4gZXN0aW1hdGluZworZXF1YWxpdHkgY2xhdXNl cy4KKworCitMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0KKworTGV0J3Mgc2Vl IHRoZSBtYWluIGxpbWluYXRpb25zIG9mIGZ1bmN0aW9uYWwgZGVwZW5kZW5j aWVzLCBlc3BlY2lhbGx5IHRob3NlCityZWxhdGVkIHRvIHRoZSBjdXJyZW50 IGltcGxlbWVudGF0aW9uLgorCitUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlv biBzdXBwb3J0cyBvbmx5IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHR3byBjb2x1 bW5zLCBidXQKK3RoaXMgaXMgbWVyZWx5IGEgc2ltcGxpZmljYXRpb24gb2Yg dGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uIEl0J3MgY2VydGFpbmx5Cit1 c2VmdWwgdG8gbWluZSBmb3IgZGVwZW5kZW5jaWVzIGludm9sdmluZyBtdWx0 aXBsZSBjb2x1bW5zIG9uIHRoZSAnbGVmdCcgc2lkZSwKK2kuZS4gYSBjb25k aXRpb24gZm9yIHRoZSBkZXBlbmRlbmN5LiBUaGF0IGlzIGRlcGVuZGVuY2ll cyBsaWtlIChhLGIgLT4gYykuCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBtYXkv c2hvdWxkIGJlIHNtYXJ0IGVub3VnaCBub3QgdG8gbWluZSByZWR1bmRhbnQg Y29uZGl0aW9ucywKK2UuZy4gKGEtPmIpIGFuZCAoYSxjIC0+IGIpLCBiZWNh dXNlIHRoZSBsYXR0ZXIgaXMgYSB0cml2aWFsIGNvbnNlcXVlbmNlIG9mIHRo ZQorZm9ybWVyIG9uZSAoaWYgdmFsdWVzIG9mICdhJyBkZXRlcm1pbmUgJ2In LCBhZGRpbmcgYW5vdGhlciBjb2x1bW4gd29uJ3QgY2hhbmdlCit0aGF0IHJl bGF0aW9uc2hpcCkuIFRoZSBBTkFMWVpFIHNob3VsZCBmaXJzdCBhbmFseXpl IDE6MSBkZXBlbmRlbmNpZXMsIHRoZW4gMjoxCitkZXBlbmRlbmNpZXMgKGFu ZCBza2lwIHRoZSBhbHJlYWR5IGlkZW50aWZpZWQgb25lcyksIGV0Yy4KKwor Rm9yIGV4YW1wbGUgdGhlIGRlcGVuZGVuY3kKKworICAgIChjaXR5IG5hbWUg LT4gemlwIGNvZGUpCisKK2lzIG11Y2ggc3Ryb25nZXIsIGkuZS4gd2hlbmV2 ZXIgaXQgaG9sZCwgdGhlbgorCisgICAgKGNpdHkgbmFtZSwgc3RhdGUgbmFt ZSAtPiB6aXAgY29kZSkKKworaG9sZHMgdG9vLiBCdXQgaW4gY2FzZSB0aGVy ZSBhcmUgY2l0aWVzIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBkaWZmZXJlbnQg c3RhdGVzLAordGhlbiBvbmx5IHRoZSBsYXR0ZXIgZGVwZW5kZW5jeSB3aWxs IGJlIHZhbGlkLgorCitPZiBjb3Vyc2UsIHRoZXJlIHByb2JhYmx5IGFyZSBj aXRpZXMgd2l0aCB0aGUgc2FtZSBuYW1lIHdpdGhpbiBhIHNpbmdsZSBzdGF0 ZSwKK2J1dCBob3BlZnVsbHkgdGhpcyBpcyByZWxhdGl2ZWx5IHJhcmUgb2Nj dXJlbmNlIChhbmQgdGh1cyB3ZSdsbCBzdGlsbCBkZXRlY3QKK3RoZSAnc29m dCcgZGVwZW5kZW5jeSkuCisKK0hhbmRsaW5nIG11bHRpcGxlIGNvbHVtbnMg b24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGRlcGVuZGVuY3ksIGlzIG5vdCBu ZWNlc3NhcnksCithcyB0aG9zZSBkZXBlbmRlbmNpZXMgbWF5IGJlIHNpbXBs eSBkZWNvbXBvc2VkIGludG8gYSBzZXQgb2YgZGVwZW5kZW5jaWVzIHdpdGgK K3RoZSBzYW1lIG1lYW5pbmcsIG9uZSBmb3IgZWFjaCBjb2x1bW4gb24gdGhl IHJpZ2h0IHNpZGUuIEZvciBleGFtcGxlCisKKyAgICAoYSAtPiBiLGMpCisK K2lzIGV4YWN0bHkgdGhlIHNhbWUgYXMKKworICAgIChhIC0+IGIpICYgKGEg LT4gYykKKworT2YgY291cnNlLCBzdG9yaW5nIHRoZSBmaXJzdCBmb3JtIG1h eSBiZSBtb3JlIGVmZmljaWVudCB0aGFudCBzdG9yaW5nIG11bHRpcGxlCisn c2ltcGxlJyBkZXBlbmRlbmNpZXMgc2VwYXJhdGVseS4KKworCitUT0RPIFN1 cHBvcnQgZGVwZW5kZW5jaWVzIHdpdGggbXVsdGlwbGUgY29sdW1ucyBvbiBs ZWZ0L3JpZ2h0LgorCitUT0RPIEludmVzdGlnYXRlIHVzaW5nIGhpc3RvZ3Jh bSBhbmQgTUNWIGxpc3QgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuCisK K1RPRE8gSW52ZXN0aWdhdGUgc3RhdGlzdGljYWwgdGVzdGluZyBvZiB0aGUg ZGlzdHJpYnV0aW9uICh0byBkZWNpZGUgd2hldGhlciBpdAorICAgICBtYWtl cyBzZW5zZSB0byBidWlsZCB0aGUgaGlzdG9ncmFtL01DViBsaXN0KS4KKwor VE9ETyBVc2luZyBhIG1pbi9tYXggb2Ygc2VsZWN0aXZpdGllcyB3b3VsZCBw cm9iYWJseSBtYWtlIG1vcmUgc2Vuc2UgZm9yIHRoZQorICAgICBhc3NvY2lh dGVkIGNvbHVtbnMuCisKK1RPRE8gQ29uc2lkZXIgZWxpbWluYXRpbmcgdGhl IGltcGxpZWQgY29sdW1ucyBmcm9tIHRoZSBoaXN0b2dyYW0gYW5kIE1DViBs aXN0cworICAgICAoYnV0IG1heWJlIHRoYXQncyBub3QgYSBnb29kIGlkZWEs IGJlY2F1c2UgdGhhdCdkIG1ha2UgaXQgaW1wb3NzaWJsZSB0byB1c2UKKyAg ICAgdGhlc2Ugc3RhdHMgZm9yIG5vbi1lcXVhbGl0eSBjbGF1c2VzIGFuZCBh bHNvIGl0IHdvdWxkbid0IGJlIHBvc3NpYmxlIHRvCisgICAgIHVzZSB0aGUg c3RhdHMgZm9yIHZlcmlmaWNhdGlvbiBvZiB0aGUgZGVwZW5kZW5jaWVzKS4K KworVE9ETyBUaGUgcmVkdWN0aW9uIHByb2JhYmx5IG1pZ2h0IGJlIGV4dGVu ZGVkIHRvIGFsc28gaGFuZGxlIElTIE5VTEwgY2xhdXNlcywKKyAgICAgYXNz dW1pbmcgd2UgZml4IHRoZSBBTkFMWVpFIHRvIHByb3Blcmx5IGhhbmRsZSBO VUxMIHZhbHVlcy4gV2UgaG93ZXZlcgorICAgICB3b24ndCBiZSBhYmxlIHRv IHJlZHVjZSBJUyBOT1QgTlVMTCAodW5sZXNzIEknbSBtaXNzaW5nIHNvbWV0 aGluZykuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24u YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzU1YzQ5 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9jb21tb24uYwpAQCAtMCwwICsxLDM1NiBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tbW9uLmMKKyAqCSAgUE9TVEdS RVMgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MKKyAqCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTUsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2Vu ZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgor CitzdGF0aWMgVmFjQXR0clN0YXRzICoqIGxvb2t1cF92YXJfYXR0cl9zdGF0 cyhpbnQydmVjdG9yICphdHRycywKKwkJCQkJCQkJCSAgaW50IG5hdHRzLCBW YWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOworCitzdGF0aWMgTGlzdCog bGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQpOworCisKKy8qCisgKiBDb21wdXRl IHJlcXVlc3RlZCBtdWx0aXZhcmlhdGUgc3RhdHMsIHVzaW5nIHRoZSByb3dz IHNhbXBsZWQgZm9yIHRoZQorICogcGxhaW4gKHNpbmdsZS1jb2x1bW4pIHN0 YXRzLgorICoKKyAqIFRoaXMgZmV0Y2hlcyBhIGxpc3Qgb2Ygc3RhdHMgZnJv bSBwZ19tdl9zdGF0aXN0aWMsIGNvbXB1dGVzIHRoZSBzdGF0cworICogYW5k IHNlcmlhbGl6ZXMgdGhlbSBiYWNrIGludG8gdGhlIGNhdGFsb2cgKGFzIGJ5 dGVhIHZhbHVlcykuCisgKi8KK3ZvaWQKK2J1aWxkX212X3N0YXRzKFJlbGF0 aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKKwkJ CSAgIGludCBuYXR0cywgVmFjQXR0clN0YXRzICoqdmFjYXR0cnN0YXRzKQor eworCUxpc3RDZWxsICpsYzsKKwlMaXN0ICptdnN0YXRzOworCisJVHVwbGVE ZXNjIHR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKG9uZXJlbCk7CisKKwkv KgorCSAqIEZldGNoIGRlZmluZWQgTVYgZ3JvdXBzIGZyb20gcGdfbXZfc3Rh dGlzdGljLCBhbmQgdGhlbiBjb21wdXRlCisJICogdGhlIE1WIHN0YXRpc3Rp Y3MgKGhpc3RvZ3JhbXMgZm9yIG5vdykuCisJICovCisJbXZzdGF0cyA9IGxp c3RfbXZfc3RhdHMoUmVsYXRpb25HZXRSZWxpZChvbmVyZWwpKTsKKworCWZv cmVhY2ggKGxjLCBtdnN0YXRzKQorCXsKKwkJaW50CQkJCWo7CisJCU1WU3Rh dGlzdGljSW5mbyAqc3RhdCA9IChNVlN0YXRpc3RpY0luZm8gKilsZmlyc3Qo bGMpOworCQlNVkRlcGVuZGVuY2llcwlkZXBzICA9IE5VTEw7CisKKwkJVmFj QXR0clN0YXRzICAqKnN0YXRzICA9IE5VTEw7CisJCWludAkJCQludW1hdHRz ICAgPSAwOworCisJCS8qIGludDIgdmVjdG9yIG9mIGF0dG51bXMgdGhlIHN0 YXRzIHNob3VsZCBiZSBjb21wdXRlZCBvbiAqLworCQlpbnQydmVjdG9yICog YXR0cnMgPSBzdGF0LT5zdGFrZXlzOworCisJCS8qIHNlZSBob3cgbWFueSBv ZiB0aGUgY29sdW1ucyBhcmUgbm90IGRyb3BwZWQgKi8KKwkJZm9yIChqID0g MDsgaiA8IGF0dHJzLT5kaW0xOyBqKyspCisJCQlpZiAoISB0dXBkZXNjLT5h dHRyc1thdHRycy0+dmFsdWVzW2pdLTFdLT5hdHRpc2Ryb3BwZWQpCisJCQkJ bnVtYXR0cyArPSAxOworCisJCS8qIGlmIHRoZXJlIGFyZSBkcm9wcGVkIGF0 dHJpYnV0ZXMsIGJ1aWxkIGEgZmlsdGVyZWQgaW50MnZlY3RvciAqLworCQlp ZiAobnVtYXR0cyAhPSBhdHRycy0+ZGltMSkKKwkJeworCQkJaW50MTYgKnRt cCA9IHBhbGxvYzAobnVtYXR0cyAqIHNpemVvZihpbnQxNikpOworCQkJaW50 IGF0dG51bSA9IDA7CisKKwkJCWZvciAoaiA9IDA7IGogPCBhdHRycy0+ZGlt MTsgaisrKQorCQkJCWlmICghIHR1cGRlc2MtPmF0dHJzW2F0dHJzLT52YWx1 ZXNbal0tMV0tPmF0dGlzZHJvcHBlZCkKKwkJCQkJdG1wW2F0dG51bSsrXSA9 IGF0dHJzLT52YWx1ZXNbal07CisKKwkJCXBmcmVlKGF0dHJzKTsKKwkJCWF0 dHJzID0gYnVpbGRpbnQydmVjdG9yKHRtcCwgbnVtYXR0cyk7CisJCX0KKwor CQkvKiBmaWx0ZXIgb25seSB0aGUgaW50ZXJlc3RpbmcgdmFjYXR0cnN0YXRz IHJlY29yZHMgKi8KKwkJc3RhdHMgPSBsb29rdXBfdmFyX2F0dHJfc3RhdHMo YXR0cnMsIG5hdHRzLCB2YWNhdHRyc3RhdHMpOworCisJCS8qIGNoZWNrIGFs bG93ZWQgbnVtYmVyIG9mIGRpbWVuc2lvbnMgKi8KKwkJQXNzZXJ0KChhdHRy cy0+ZGltMSA+PSAyKSAmJiAoYXR0cnMtPmRpbTEgPD0gTVZTVEFUU19NQVhf RElNRU5TSU9OUykpOworCisJCS8qCisJCSAqIEFuYWx5emUgZnVuY3Rpb25h bCBkZXBlbmRlbmNpZXMgb2YgY29sdW1ucy4KKwkJICovCisJCWRlcHMgPSBi dWlsZF9tdl9kZXBlbmRlbmNpZXMobnVtcm93cywgcm93cywgYXR0cnMsIHN0 YXRzKTsKKworCQkvKiBzdG9yZSB0aGUgaGlzdG9ncmFtIC8gTUNWIGxpc3Qg aW4gdGhlIGNhdGFsb2cgKi8KKwkJdXBkYXRlX212X3N0YXRzKHN0YXQtPm12 b2lkLCBkZXBzLCBhdHRycyk7CisJfQorfQorCisvKgorICogTG9va3VwIHRo ZSBWYWNBdHRyU3RhdHMgaW5mbyBmb3IgdGhlIHNlbGVjdGVkIGNvbHVtbnMs IHdpdGggaW5kZXhlcworICogbWF0Y2hpbmcgdGhlIGF0dHJzIHZlY3RvciAo dG8gbWFrZSBpdCBlYXN5IHRvIHdvcmsgd2l0aCB3aGVuCisgKiBjb21wdXRp bmcgbXVsdGl2YXJpYXRlIHN0YXRzKS4KKyAqLworc3RhdGljIFZhY0F0dHJT dGF0cyAqKgorbG9va3VwX3Zhcl9hdHRyX3N0YXRzKGludDJ2ZWN0b3IgKmF0 dHJzLCBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cykK K3sKKwlpbnQgaSwgajsKKwlpbnQgbnVtYXR0cnMgPSBhdHRycy0+ZGltMTsK KwlWYWNBdHRyU3RhdHMgKipzdGF0cyA9IChWYWNBdHRyU3RhdHMqKilwYWxs b2MwKG51bWF0dHJzICogc2l6ZW9mKFZhY0F0dHJTdGF0cyopKTsKKworCS8q IGxvb2t1cCBWYWNBdHRyU3RhdHMgaW5mbyBmb3IgdGhlIHJlcXVlc3RlZCBj b2x1bW5zIChzYW1lIGF0dG51bSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVt YXR0cnM7IGkrKykKKwl7CisJCXN0YXRzW2ldID0gTlVMTDsKKwkJZm9yIChq ID0gMDsgaiA8IG5hdHRzOyBqKyspCisJCXsKKwkJCWlmIChhdHRycy0+dmFs dWVzW2ldID09IHZhY2F0dHJzdGF0c1tqXS0+dHVwYXR0bnVtKQorCQkJewor CQkJCXN0YXRzW2ldID0gdmFjYXR0cnN0YXRzW2pdOworCQkJCWJyZWFrOwor CQkJfQorCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgdGhhdCB3ZSBmb3VuZCB0 aGUgaW5mbywgdGhhdCB0aGUgYXR0bnVtIG1hdGNoZXMgYW5kCisJCSAqIHRo YXQgdGhlcmUncyB0aGUgcmVxdWVzdGVkICdsdCcgb3BlcmF0b3IgYW5kIHRo YXQgdGhlIHR5cGUKKwkJICogaXMgJ3Bhc3NlZC1ieS12YWx1ZScuCisJCSAq LworCQlBc3NlcnQoc3RhdHNbaV0gIT0gTlVMTCk7CisJCUFzc2VydChzdGF0 c1tpXS0+dHVwYXR0bnVtID09IGF0dHJzLT52YWx1ZXNbaV0pOworCisJCS8q IEZJWE1FIFRoaXMgaXMgcmF0aGVyIHVnbHkgd2F5IHRvIGNoZWNrIGZvciAn bHRvcHInICh3aGljaAorCQkgKiAgICAgICBpcyBkZWZpbmVkIGZvciAnc2Nh bGFyJyBhdHRyaWJ1dGVzKS4KKwkJICovCisJCUFzc2VydCgoKFN0ZEFuYWx5 emVEYXRhICopc3RhdHNbaV0tPmV4dHJhX2RhdGEpLT5sdG9wciAhPSBJbnZh bGlkT2lkKTsKKwl9CisKKwlyZXR1cm4gc3RhdHM7Cit9CisKKy8qCisgKiBG ZXRjaCBsaXN0IG9mIE1WIHN0YXRzIGRlZmluZWQgb24gYSB0YWJsZSwgd2l0 aG91dCB0aGUgYWN0dWFsIGRhdGEKKyAqIGZvciBoaXN0b2dyYW1zLCBNQ1Yg bGlzdHMgZXRjLgorICovCitzdGF0aWMgTGlzdCoKK2xpc3RfbXZfc3RhdHMo T2lkIHJlbGlkKQoreworCVJlbGF0aW9uCWluZHJlbDsKKwlTeXNTY2FuRGVz YyBpbmRzY2FuOworCVNjYW5LZXlEYXRhIHNrZXk7CisJSGVhcFR1cGxlCWh0 dXA7CisJTGlzdAkgICAqcmVzdWx0ID0gTklMOworCisJLyogUHJlcGFyZSB0 byBzY2FuIHBnX212X3N0YXRpc3RpYyBmb3IgZW50cmllcyBoYXZpbmcgaW5k cmVsaWQgPSB0aGlzIHJlbC4gKi8KKwlTY2FuS2V5SW5pdCgmc2tleSwKKwkJ CQlBbnVtX3BnX212X3N0YXRpc3RpY19zdGFyZWxpZCwKKwkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1 bShyZWxpZCkpOworCisJaW5kcmVsID0gaGVhcF9vcGVuKE12U3RhdGlzdGlj UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpbmRzY2FuID0gc3lz dGFibGVfYmVnaW5zY2FuKGluZHJlbCwgTXZTdGF0aXN0aWNSZWxpZEluZGV4 SWQsIHRydWUsCisJCQkJCQkJCSBOVUxMLCAxLCAmc2tleSk7CisKKwl3aGls ZSAoSGVhcFR1cGxlSXNWYWxpZChodHVwID0gc3lzdGFibGVfZ2V0bmV4dChp bmRzY2FuKSkpCisJeworCQlNVlN0YXRpc3RpY0luZm8gKmluZm8gPSBtYWtl Tm9kZShNVlN0YXRpc3RpY0luZm8pOworCQlGb3JtX3BnX212X3N0YXRpc3Rp YyBzdGF0cyA9IChGb3JtX3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0 dXApOworCisJCWluZm8tPm12b2lkID0gSGVhcFR1cGxlR2V0T2lkKGh0dXAp OworCQlpbmZvLT5zdGFrZXlzID0gYnVpbGRpbnQydmVjdG9yKHN0YXRzLT5z dGFrZXlzLnZhbHVlcywgc3RhdHMtPnN0YWtleXMuZGltMSk7CisJCWluZm8t PmRlcHNfYnVpbHQgPSBzdGF0cy0+ZGVwc19idWlsdDsKKworCQlyZXN1bHQg PSBsYXBwZW5kKHJlc3VsdCwgaW5mbyk7CisJfQorCisJc3lzdGFibGVfZW5k c2NhbihpbmRzY2FuKTsKKworCWhlYXBfY2xvc2UoaW5kcmVsLCBBY2Nlc3NT aGFyZUxvY2spOworCisJLyogVE9ETyBtYXliZSBzYXZlIHRoZSBsaXN0IGlu dG8gcmVsY2FjaGUsIGFzIGluIFJlbGF0aW9uR2V0SW5kZXhMaXN0CisJICog ICAgICAod2hpY2ggd2FzIHVzZWQgYXMgYW4gaW5zcGlyYXRpb24gb2YgdGhp cyBvbmUpPy4gKi8KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK3Vw ZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQsIE1WRGVwZW5kZW5jaWVzIGRlcGVu ZGVuY2llcywgaW50MnZlY3RvciAqYXR0cnMpCit7CisJSGVhcFR1cGxlCXN0 dXAsCisJCQkJb2xkdHVwOworCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfbXZf c3RhdGlzdGljXTsKKwlib29sCQludWxsc1tOYXR0c19wZ19tdl9zdGF0aXN0 aWNdOworCWJvb2wJCXJlcGxhY2VzW05hdHRzX3BnX212X3N0YXRpc3RpY107 CisKKwlSZWxhdGlvbglzZCA9IGhlYXBfb3BlbihNdlN0YXRpc3RpY1JlbGF0 aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJbWVtc2V0KG51bGxzLCAg ICAxLCBOYXR0c19wZ19tdl9zdGF0aXN0aWMgKiBzaXplb2YoYm9vbCkpOwor CW1lbXNldChyZXBsYWNlcywgMCwgTmF0dHNfcGdfbXZfc3RhdGlzdGljICog c2l6ZW9mKGJvb2wpKTsKKwltZW1zZXQodmFsdWVzLCAgIDAsIE5hdHRzX3Bn X212X3N0YXRpc3RpYyAqIHNpemVvZihEYXR1bSkpOworCisJLyoKKwkgKiBD b25zdHJ1Y3QgYSBuZXcgcGdfbXZfc3RhdGlzdGljIHR1cGxlIC0gcmVwbGFj ZSBvbmx5IHRoZSBoaXN0b2dyYW0KKwkgKiBhbmQgTUNWIGxpc3QsIGRlcGVu ZGluZyB3aGV0aGVyIGl0IGFjdHVhbGx5IHdhcyBjb21wdXRlZC4KKwkgKi8K KwlpZiAoZGVwZW5kZW5jaWVzICE9IE5VTEwpCisJeworCQludWxsc1tBbnVt X3BnX212X3N0YXRpc3RpY19zdGFkZXBzIC0xXSAgICA9IGZhbHNlOworCQl2 YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhZGVwcyAgLSAxXQorCQkJ PSBQb2ludGVyR2V0RGF0dW0oc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhk ZXBlbmRlbmNpZXMpKTsKKwl9CisKKwkvKiBhbHdheXMgcmVwbGFjZSB0aGUg dmFsdWUgKGVpdGhlciBieSBieXRlYSBvciBOVUxMKSAqLworCXJlcGxhY2Vz W0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMgLTFdID0gdHJ1ZTsKKwor CS8qIGFsd2F5cyBjaGFuZ2UgdGhlIGF2YWlsYWJpbGl0eSBmbGFncyAqLwor CW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQgLTFdID0g ZmFsc2U7CisJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cy0x XSAgICAgPSBmYWxzZTsKKworCS8qIHVzZSB0aGUgbmV3IGF0dG51bXMsIGlu IGNhc2Ugd2UgcmVtb3ZlZCBzb21lIGRyb3BwZWQgb25lcyAqLworCXJlcGxh Y2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQtMV0gPSB0cnVl OworCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMgLTFd ICAgID0gdHJ1ZTsKKworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19k ZXBzX2J1aWx0LTFdID0gQm9vbEdldERhdHVtKGRlcGVuZGVuY2llcyAhPSBO VUxMKTsKKwl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cyAt MV0gICAgPSBQb2ludGVyR2V0RGF0dW0oYXR0cnMpOworCisJLyogSXMgdGhl cmUgYWxyZWFkeSBhIHBnX212X3N0YXRpc3RpYyB0dXBsZSBmb3IgdGhpcyBh dHRyaWJ1dGU/ICovCisJb2xkdHVwID0gU2VhcmNoU3lzQ2FjaGUxKE1WU1RB VE9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShtdm9pZCkpOworCisJ aWYgKEhlYXBUdXBsZUlzVmFsaWQob2xkdHVwKSkKKwl7CisJCS8qIFllcywg cmVwbGFjZSBpdCAqLworCQlzdHVwID0gaGVhcF9tb2RpZnlfdHVwbGUob2xk dHVwLAorCQkJCQkJCQkgUmVsYXRpb25HZXREZXNjcihzZCksCisJCQkJCQkJ CSB2YWx1ZXMsCisJCQkJCQkJCSBudWxscywKKwkJCQkJCQkJIHJlcGxhY2Vz KTsKKwkJUmVsZWFzZVN5c0NhY2hlKG9sZHR1cCk7CisJCXNpbXBsZV9oZWFw X3VwZGF0ZShzZCwgJnN0dXAtPnRfc2VsZiwgc3R1cCk7CisJfQorCWVsc2UK KwkJZWxvZyhFUlJPUiwgImludmFsaWQgcGdfbXZfc3RhdGlzdGljIHJlY29y ZCAob2lkPSVkKSIsIG12b2lkKTsKKworCS8qIHVwZGF0ZSBpbmRleGVzIHRv byAqLworCUNhdGFsb2dVcGRhdGVJbmRleGVzKHNkLCBzdHVwKTsKKworCWhl YXBfZnJlZXR1cGxlKHN0dXApOworCisJaGVhcF9jbG9zZShzZCwgUm93RXhj bHVzaXZlTG9jayk7Cit9CisKKy8qIG11bHRpLXZhcmlhdGUgc3RhdHMgY29t cGFyYXRvciAqLworCisvKgorICogcXNvcnRfYXJnIGNvbXBhcmF0b3IgZm9y IHNvcnRpbmcgRGF0dW1zIChNViBzdGF0cykKKyAqCisgKiBUaGlzIGRvZXMg bm90IG1haW50YWluIHRoZSB0dXBub0xpbmsgYXJyYXkuCisgKi8KK2ludAor Y29tcGFyZV9zY2FsYXJzX3NpbXBsZShjb25zdCB2b2lkICphLCBjb25zdCB2 b2lkICpiLCB2b2lkICphcmcpCit7CisJRGF0dW0JCWRhID0gKihEYXR1bSop YTsKKwlEYXR1bQkJZGIgPSAqKERhdHVtKiliOworCVNvcnRTdXBwb3J0IHNz dXA9IChTb3J0U3VwcG9ydCkgYXJnOworCisJcmV0dXJuIEFwcGx5U29ydENv bXBhcmF0b3IoZGEsIGZhbHNlLCBkYiwgZmFsc2UsIHNzdXApOworfQorCisv KgorICogcXNvcnRfYXJnIGNvbXBhcmF0b3IgZm9yIHNvcnRpbmcgZGF0YSB3 aGVuIHBhcnRpdGlvbmluZyBhIE1WIGJ1Y2tldAorICovCitpbnQKK2NvbXBh cmVfc2NhbGFyc19wYXJ0aXRpb24oY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p ZCAqYiwgdm9pZCAqYXJnKQoreworCURhdHVtCQlkYSA9ICgoU2NhbGFySXRl bSopYSktPnZhbHVlOworCURhdHVtCQlkYiA9ICgoU2NhbGFySXRlbSopYikt PnZhbHVlOworCVNvcnRTdXBwb3J0IHNzdXA9IChTb3J0U3VwcG9ydCkgYXJn OworCisJcmV0dXJuIEFwcGx5U29ydENvbXBhcmF0b3IoZGEsIGZhbHNlLCBk YiwgZmFsc2UsIHNzdXApOworfQorCisvKiBpbml0aWFsaXplIG11bHRpLWRp bWVuc2lvbmFsIHNvcnQgKi8KK011bHRpU29ydFN1cHBvcnQKK211bHRpX3Nv cnRfaW5pdChpbnQgbmRpbXMpCit7CisJTXVsdGlTb3J0U3VwcG9ydCBtc3M7 CisKKwlBc3NlcnQobmRpbXMgPj0gMik7CisKKwltc3MgPSAoTXVsdGlTb3J0 U3VwcG9ydClwYWxsb2MwKG9mZnNldG9mKE11bHRpU29ydFN1cHBvcnREYXRh LCBzc3VwKQorCQkJCQkJCQkJKyBzaXplb2YoU29ydFN1cHBvcnREYXRhKSpu ZGltcyk7CisKKwltc3MtPm5kaW1zID0gbmRpbXM7CisKKwlyZXR1cm4gbXNz OworfQorCisvKgorICogYWRkIHNvcnQgaW50byBmb3IgZGltZW5zaW9uICdk aW0nIChpbmRleCBpbnRvIHZhY2F0dHJzdGF0cykgdG8gbXNzLAorICogYXQg dGhlIHBvc2l0aW9uICdzb3J0YXR0cicKKyAqLwordm9pZAorbXVsdGlfc29y dF9hZGRfZGltZW5zaW9uKE11bHRpU29ydFN1cHBvcnQgbXNzLCBpbnQgc29y dGRpbSwKKwkJCQkJCWludCBkaW0sIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJz dGF0cykKK3sKKwkvKiBmaXJzdCwgbG9va3VwIFN0ZEFuYWx5emVEYXRhIGZv ciB0aGUgZGltZW5zaW9uIChhdHRyaWJ1dGUpICovCisJU29ydFN1cHBvcnRE YXRhIHNzdXA7CisJU3RkQW5hbHl6ZURhdGEgKnRtcCA9IChTdGRBbmFseXpl RGF0YSAqKXZhY2F0dHJzdGF0c1tkaW1dLT5leHRyYV9kYXRhOworCisJQXNz ZXJ0KG1zcyAhPSBOVUxMKTsKKwlBc3NlcnQoc29ydGRpbSA8IG1zcy0+bmRp bXMpOworCisJLyogaW5pdGlhbGl6ZSBzb3J0IHN1cHBvcnQsIGV0Yy4gKi8K KwltZW1zZXQoJnNzdXAsIDAsIHNpemVvZihzc3VwKSk7CisJc3N1cC5zc3Vw X2N4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJLyogV2UgYWx3YXlz IHVzZSB0aGUgZGVmYXVsdCBjb2xsYXRpb24gZm9yIHN0YXRpc3RpY3MgKi8K Kwlzc3VwLnNzdXBfY29sbGF0aW9uID0gREVGQVVMVF9DT0xMQVRJT05fT0lE OworCXNzdXAuc3N1cF9udWxsc19maXJzdCA9IGZhbHNlOworCisJUHJlcGFy ZVNvcnRTdXBwb3J0RnJvbU9yZGVyaW5nT3AodG1wLT5sdG9wciwgJnNzdXAp OworCisJbXNzLT5zc3VwW3NvcnRkaW1dID0gc3N1cDsKK30KKworLyogY29t cGFyZSBhbGwgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIHNlbGVjdGVkIG9yZGVy ICovCitpbnQKK211bHRpX3NvcnRfY29tcGFyZShjb25zdCB2b2lkICphLCBj b25zdCB2b2lkICpiLCB2b2lkICphcmcpCit7CisJaW50IGk7CisJU29ydEl0 ZW0gKmlhID0gKFNvcnRJdGVtKilhOworCVNvcnRJdGVtICppYiA9IChTb3J0 SXRlbSopYjsKKworCU11bHRpU29ydFN1cHBvcnQgbXNzID0gKE11bHRpU29y dFN1cHBvcnQpYXJnOworCisJZm9yIChpID0gMDsgaSA8IG1zcy0+bmRpbXM7 IGkrKykKKwl7CisJCWludAljb21wYXJlOworCisJCWNvbXBhcmUgPSBBcHBs eVNvcnRDb21wYXJhdG9yKGlhLT52YWx1ZXNbaV0sIGlhLT5pc251bGxbaV0s CisJCQkJCQkJCQkgIGliLT52YWx1ZXNbaV0sIGliLT5pc251bGxbaV0sCisJ CQkJCQkJCQkgICZtc3MtPnNzdXBbaV0pOworCisJCWlmIChjb21wYXJlICE9 IDApCisJCQlyZXR1cm4gY29tcGFyZTsKKworCX0KKworCS8qIGVxdWFsIGJ5 IGRlZmF1bHQgKi8KKwlyZXR1cm4gMDsKK30KKworLyogY29tcGFyZSBzZWxl Y3RlZCBkaW1lbnNpb24gKi8KK2ludAorbXVsdGlfc29ydF9jb21wYXJlX2Rp bShpbnQgZGltLCBjb25zdCBTb3J0SXRlbSAqYSwgY29uc3QgU29ydEl0ZW0g KmIsCisJCQkJCSAgIE11bHRpU29ydFN1cHBvcnQgbXNzKQoreworCXJldHVy biBBcHBseVNvcnRDb21wYXJhdG9yKGEtPnZhbHVlc1tkaW1dLCBhLT5pc251 bGxbZGltXSwKKwkJCQkJCQkgICBiLT52YWx1ZXNbZGltXSwgYi0+aXNudWxs W2RpbV0sCisJCQkJCQkJICAgJm1zcy0+c3N1cFtkaW1dKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmggYi9z cmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNTQ2NWIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5oCkBA IC0wLDAgKzEsNzUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGNvbW1vbi5oCisgKgkgIFBPU1RHUkVTIG11bHRpdmFyaWF0 ZSBzdGF0aXN0aWNzCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDE1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICog SURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9jb21tb24uaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAi YWNjZXNzL3R1cHRvYXN0ZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4 aW5nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIgorI2luY2x1ZGUg ImZvcmVpZ24vZmR3YXBpLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRv dmFjdXVtLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCisjaW5jbHVk ZSAidXRpbHMvZGF0dW0uaCIKKyNpbmNsdWRlICJ1dGlscy9zb3J0c3VwcG9y dC5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisjaW5jbHVkZSAi dXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgorI2luY2x1ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCisKKyNpbmNsdWRlICJ1 dGlscy9tdnN0YXRzLmgiCisKKy8qIEZJWE1FIHByaXZhdGUgc3RydWN0dXJl IGNvcGllZCBmcm9tIGFuYWx5emUuYyAqLworCit0eXBlZGVmIHN0cnVjdAor eworCU9pZAkJCWVxb3ByOwkJCS8qICc9JyBvcGVyYXRvciBmb3IgZGF0YXR5 cGUsIGlmIGFueSAqLworCU9pZAkJCWVxZnVuYzsJCQkvKiBhbmQgYXNzb2Np YXRlZCBmdW5jdGlvbiAqLworCU9pZAkJCWx0b3ByOwkJCS8qICc8JyBvcGVy YXRvciBmb3IgZGF0YXR5cGUsIGlmIGFueSAqLworfSBTdGRBbmFseXplRGF0 YTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlEYXR1bQkJdmFsdWU7CQkJLyog YSBkYXRhIHZhbHVlICovCisJaW50CQkJdHVwbm87CQkJLyogcG9zaXRpb24g aW5kZXggZm9yIHR1cGxlIGl0IGNhbWUgZnJvbSAqLworfSBTY2FsYXJJdGVt OworIAorLyogbXVsdGktc29ydCAqLwordHlwZWRlZiBzdHJ1Y3QgTXVsdGlT b3J0U3VwcG9ydERhdGEgeworCWludAkJCQluZGltczsJCS8qIG51bWJlciBv ZiBkaW1lbnNpb25zIHN1cHBvcnRlZCBieSB0aGUgKi8KKwlTb3J0U3VwcG9y dERhdGEJc3N1cFsxXTsJLyogc29ydCBzdXBwb3J0IGRhdGEgZm9yIGVhY2gg ZGltZW5zaW9uICovCit9IE11bHRpU29ydFN1cHBvcnREYXRhOworCit0eXBl ZGVmIE11bHRpU29ydFN1cHBvcnREYXRhKiBNdWx0aVNvcnRTdXBwb3J0Owor Cit0eXBlZGVmIHN0cnVjdCBTb3J0SXRlbSB7CisJRGF0dW0gICp2YWx1ZXM7 CisJYm9vbCAgICppc251bGw7Cit9IFNvcnRJdGVtOworCitNdWx0aVNvcnRT dXBwb3J0IG11bHRpX3NvcnRfaW5pdChpbnQgbmRpbXMpOworCit2b2lkIG11 bHRpX3NvcnRfYWRkX2RpbWVuc2lvbihNdWx0aVNvcnRTdXBwb3J0IG1zcywg aW50IHNvcnRkaW0sCisJCQkJCQkJICBpbnQgZGltLCBWYWNBdHRyU3RhdHMg Kip2YWNhdHRyc3RhdHMpOworCitpbnQgbXVsdGlfc29ydF9jb21wYXJlKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQgKmFyZyk7CisKK2lu dCBtdWx0aV9zb3J0X2NvbXBhcmVfZGltKGludCBkaW0sIGNvbnN0IFNvcnRJ dGVtICphLAorCQkJCQkJICAgY29uc3QgU29ydEl0ZW0gKmIsIE11bHRpU29y dFN1cHBvcnQgbXNzKTsKKworLyogY29tcGFyYXRvcnMsIHVzZWQgd2hlbiBj b25zdHJ1Y3RpbmcgbXVsdGl2YXJpYXRlIHN0YXRzICovCitpbnQgY29tcGFy ZV9zY2FsYXJzX3NpbXBsZShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi LCB2b2lkICphcmcpOworaW50IGNvbXBhcmVfc2NhbGFyc19wYXJ0aXRpb24o Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvZGVwZW5kZW5j aWVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2RlcGVuZGVuY2ll cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMDY0 YTAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL2RlcGVuZGVuY2llcy5jCkBAIC0wLDAgKzEsNDM3IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZXBlbmRlbmNpZXMu YworICoJICBQT1NUR1JFUyBtdWx0aXZhcmlhdGUgZnVuY3Rpb25hbCBkZXBl bmRlbmNpZXMKKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMTUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2Rl cGVuZGVuY2llcy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgorCisvKgorICogRGV0ZWN0IGZ1bmN0aW9uYWwg ZGVwZW5kZW5jaWVzIGJldHdlZW4gY29sdW1ucy4KKyAqCisgKiBUT0RPIFRo aXMgYnVpbGRzIGEgY29tcGxldGUgc2V0IG9mIGRlcGVuZGVuY2llcywgaS5l LiBpbmNsdWRpbmcgdHJhbnNpdGl2ZQorICogICAgICBkZXBlbmRlbmNpZXMg LSBpZiB3ZSBpZGVudGlmeSBbQSA9PiBCXSBhbmQgW0IgPT4gQ10sIHdlJ3Jl IGxpa2VseSB0bworICogICAgICBpZGVudGlmeSBbQSA9PiBDXSB0b28uIEl0 IG1pZ2h0IGJlIGJldHRlciB0byAga2VlcCBvbmx5IHRoZSBtaW5pbWFsIHNl dAorICogICAgICBvZiBkZXBlbmRlbmNpZXMsIGkuZS4gcHJ1bmUgYWxsIHRo ZSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSBjYW4gcmVjcmVhdGUKKyAqICAgICAg YnkgdHJhbnNpdml0aXR5LgorICogCisgKiAgICAgIFRoZXJlIGFyZSB0d28g Y29uY2VwdHVhbCB3YXlzIHRvIGRvIHRoYXQ6CisgKiAKKyAqICAgICAgKGEp IGdlbmVyYXRlIGFsbCB0aGUgcnVsZXMsIGFuZCB0aGVuIHBydW5lIHRoZSBy dWxlcyB0aGF0IG1heSBiZQorICogICAgICAgICAgcmVjdGVhdGVkIGJ5IGNv bWJpbmluZyBvdGhlciBkZXBlbmRlbmNpZXMsIG9yCisgKiAKKyAqICAgICAg KGIpIHBlcmZvcm1pbmcgdGhlICdpcyBjb21iaW5hdGlvbiBvZiBvdGhlciBk ZXBlbmRlbmNpZXMnIGNoZWNrIGJlZm9yZQorICogICAgICAgICAgYWN0dWFs bHkgZG9pbmcgdGhlIHdvcmsKKyAqIAorICogICAgICBUaGUgc2Vjb25kIG9w dGlvbiBoYXMgdGhlIGFkdmFudGFnZSB0aGF0IHdlIGRvbid0IHJlYWxseSBu ZWVkIHRvIHBlcmZvcm0KKyAqICAgICAgdGhlIHNvcnQvY291bnQuIEl0J3Mg bm90IHN1ZmZpY2llbnQgYWxvbmUsIHRob3VnaCwgYmVjYXVzZSB3ZSBtYXkK KyAqICAgICAgZGlzY292ZXIgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUgd3Jv bmcgb3JkZXIuIEZvciBleGFtcGxlIHdlIG1heSBmaW5kCisgKgorICogICAg ICAgICAgKGEgLT4gYiksIChhIC0+IGMpIGFuZCB0aGVuIChiIC0+IGMpCisg KgorICogICAgICBOb25lIG9mIHRob3NlIGRlcGVuZGVuY2llcyBpcyBhIGNv bWJpbmF0aW9uIG9mIHRoZSBhbHJlYWR5IGtub3duIG9uZXMsCisgKiAgICAg IHlldCAoYSAtPiBDKSBpcyBhIGNvbWJpbmF0aW9uIG9mIChhIC0+IGIpIGFu ZCAoYiAtPiBjKS4KKyAqCisgKiAKKyAqIEZJWE1FIEN1cnJlbnRseSB3ZSBz aW1wbHkgcmVwbGFjZSBOVUxMIHZhbHVlcyB3aXRoIDAgYW5kIHRoZW4gaGFu ZGxlIGlzIGFzCisgKiAgICAgICBhIHJlZ3VsYXIgdmFsdWUsIGJ1dCB0aGF0 IGdyb3VwcyBOVUxMIGFuZCBhY3R1YWwgMCB2YWx1ZXMuIFRoYXQncworICog ICAgICAgY2xlYXJseSBpbmNvcnJlY3QgLSB3ZSBuZWVkIHRvIGhhbmRsZSBO VUxMIHZhbHVlcyBhcyBhIHNlcGFyYXRlIHZhbHVlLgorICovCitNVkRlcGVu ZGVuY2llcworYnVpbGRfbXZfZGVwZW5kZW5jaWVzKGludCBudW1yb3dzLCBI ZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkgIFZh Y0F0dHJTdGF0cyAqKnN0YXRzKQoreworCWludCBpOworCWludCBudW1hdHRy cyA9IGF0dHJzLT5kaW0xOworCisJLyogcmVzdWx0ICovCisJaW50IG5kZXBz ID0gMDsKKwlNVkRlcGVuZGVuY2llcwlkZXBlbmRlbmNpZXMgPSBOVUxMOwor CU11bHRpU29ydFN1cHBvcnQgbXNzID0gbXVsdGlfc29ydF9pbml0KDIpOwkv KiAyIGRpbWVuc2lvbnMgZm9yIG5vdyAqLworCisJLyogVE9ETyBNYXliZSB0 aGlzIHNob3VsZCBiZSBzb21laG93IHJlbGF0ZWQgdG8gdGhlIG51bWJlciBv ZgorCSAqICAgICAgZGlzdGluY3QgdmFsdWVzIGluIHRoZSB0d28gY29sdW1u cyB3ZSdyZSBjdXJyZW50bHkgYW5hbHl6aW5nLgorCSAqICAgICAgQXNzdW1p bmcgdGhlIGRpc3RyaWJ1dGlvbiBpcyB1bmlmb3JtLCB3ZSBjYW4gZXN0aW1h dGUgdGhlCisJICogICAgICBhdmVyYWdlIGdyb3VwIHNpemUgYW5kIHVzZSBp dCBhcyBhIHRocmVzaG9sZC4gT3Igc29tZXRoaW5nCisJICogICAgICBsaWtl IHRoYXQuIFNlZW1zIGJldHRlciB0aGFuIGEgc3RhdGljIGFwcHJvYWNoLgor CSAqLworCWludCBtaW5fZ3JvdXBfc2l6ZSA9IDM7CisKKwkvKiBkaW1lbnNp b24gaW5kZXhlcyB3ZSdsbCBjaGVjayBmb3IgYXNzb2NpYXRpb25zIFthID0+ IGJdICovCisJaW50IGRpbWEsIGRpbWI7CisKKwkvKgorCSAqIFdlJ2xsIHJl dXNlIHRoZSBzYW1lIGFycmF5IGZvciBhbGwgdGhlIDItY29sdW1uIGNvbWJp bmF0aW9ucy4KKwkgKgorCSAqIEl0J3MgcG9zc2libGUgdG8gc29ydCB0aGUg c2FtcGxlIHJvd3MgZGlyZWN0bHksIGJ1dCB0aGlzIHNlZW1lZAorCSAqIHNv bWVob3cgc2ltcGxlcyAvIGxlc3MgZXJyb3IgcHJvbmUuIEFub3RoZXIgb3B0 aW9uIHdvdWxkIGJlIHRvCisJICogYWxsb2NhdGUgdGhlIGFycmF5cyBmb3Ig ZWFjaCBTb3J0SXRlbSBzZXBhcmF0ZWx5LCBidXQgdGhhdCdkIGJlCisJICog c2lnbmlmaWNhbnQgb3ZlcmhlYWQgKG5vdCBqdXN0IENQVSwgYnV0IGVzcGVj aWFsbHkgbWVtb3J5IGJsb2F0KS4KKwkgKi8KKwlTb3J0SXRlbSAqIGl0ZW1z ID0gKFNvcnRJdGVtKilwYWxsb2MwKG51bXJvd3MgKiBzaXplb2YoU29ydEl0 ZW0pKTsKKworCURhdHVtICp2YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAoc2l6 ZW9mKERhdHVtKSAqIG51bXJvd3MgKiAyKTsKKwlib29sICAqaXNudWxsID0g KGJvb2wqKXBhbGxvYzAoc2l6ZW9mKGJvb2wpICogbnVtcm93cyAqIDIpOwor CisJZm9yIChpID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwl7CisJCWl0ZW1z W2ldLnZhbHVlcyA9ICZ2YWx1ZXNbaSAqIDJdOworCQlpdGVtc1tpXS5pc251 bGwgPSAmaXNudWxsW2kgKiAyXTsKKwl9CisKKwlBc3NlcnQobnVtYXR0cnMg Pj0gMik7CisKKwkvKgorCSAqIEV2YWx1YXRlIGFsbCBwb3NzaWJsZSBjb21i aW5hdGlvbnMgb2YgW0EgPT4gQl0sIHVzaW5nIGEgc2ltcGxlIGFsZ29yaXRo bToKKwkgKgorCSAqIChhKSBzb3J0IHRoZSBkYXRhIGJ5IFtBLEJdCisJICog KGIpIHNwbGl0IHRoZSBkYXRhIGludG8gZ3JvdXBzIGJ5IEEgKG5ldyBncm91 cCB3aGVuZXZlciBhIHZhbHVlIGNoYW5nZXMpCisJICogKGMpIGNvdW50IGRp ZmZlcmVudCB2YWx1ZXMgaW4gdGhlIEIgY29sdW1uIChhZ2FpbiwgdmFsdWUg Y2hhbmdlcykKKwkgKgorCSAqIFRPRE8gSXQgc2hvdWxkIGJlIHJhdGhlciBz aW1wbGUgdG8gbWVyZ2UgW0EgPT4gQl0gYW5kIFtBID0+IENdIGludG8KKwkg KiAgICAgIFtBID0+IEIsQ10uIEp1c3Qga2VlcCBBIGNvbnN0YW50LCBjb2xs ZWN0IGFsbCB0aGUgImltcGxpZWQiIGNvbHVtbnMKKwkgKiAgICAgIGFuZCB5 b3UncmUgZG9uZS4KKwkgKi8KKwlmb3IgKGRpbWEgPSAwOyBkaW1hIDwgbnVt YXR0cnM7IGRpbWErKykKKwl7CisJCS8qIHByZXBhcmUgdGhlIHNvcnQgZnVu Y3Rpb24gZm9yIHRoZSBmaXJzdCBkaW1lbnNpb24gKi8KKwkJbXVsdGlfc29y dF9hZGRfZGltZW5zaW9uKG1zcywgMCwgZGltYSwgc3RhdHMpOworCisJCWZv ciAoZGltYiA9IDA7IGRpbWIgPCBudW1hdHRyczsgZGltYisrKQorCQl7CisJ CQlTb3J0SXRlbSBjdXJyZW50OworCisJCQkvKiBudW1iZXIgb2YgZ3JvdXBz IHN1cHBvcnRpbmcgLyBjb250cmFkaWN0aW5nIHRoZSBkZXBlbmRlbmN5ICov CisJCQlpbnQgbl9zdXBwb3J0aW5nID0gMDsKKwkJCWludCBuX2NvbnRyYWRp Y3RpbmcgPSAwOworCisJCQkvKiBjb3VudGVycyB2YWxpZCB3aXRoaW4gYSBn cm91cCAqLworCQkJaW50IGdyb3VwX3NpemUgPSAwOworCQkJaW50IG5fdmlv bGF0aW9ucyA9IDA7CisKKwkJCWludCBuX3N1cHBvcnRpbmdfcm93cyA9IDA7 CisJCQlpbnQgbl9jb250cmFkaWN0aW5nX3Jvd3MgPSAwOworCisJCQkvKiBt YWtlIHN1cmUgdGhlIGNvbHVtbnMgYXJlIGRpZmZlcmVudCAoQSA9PiBBKSAq LworCQkJaWYgKGRpbWEgPT0gZGltYikKKwkJCQljb250aW51ZTsKKworCQkJ LyogcHJlcGFyZSB0aGUgc29ydCBmdW5jdGlvbiBmb3IgdGhlIHNlY29uZCBk aW1lbnNpb24gKi8KKwkJCW11bHRpX3NvcnRfYWRkX2RpbWVuc2lvbihtc3Ms IDEsIGRpbWIsIHN0YXRzKTsKKworCQkJLyogcmVzZXQgdGhlIHZhbHVlcyBh bmQgaXNudWxsIGZsYWdzICovCisJCQltZW1zZXQodmFsdWVzLCAwLCBzaXpl b2YoRGF0dW0pICogbnVtcm93cyAqIDIpOworCQkJbWVtc2V0KGlzbnVsbCwg MCwgc2l6ZW9mKGJvb2wpICAqIG51bXJvd3MgKiAyKTsKKworCQkJLyogYWNj dW11bGF0ZSBhbGwgdGhlIGRhdGEgZm9yIGJvdGggY29sdW1ucyBpbnRvIGFu IGFycmF5IGFuZCBzb3J0IGl0ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgbnVt cm93czsgaSsrKQorCQkJeworCQkJCWl0ZW1zW2ldLnZhbHVlc1swXQorCQkJ CQk9IGhlYXBfZ2V0YXR0cihyb3dzW2ldLCBhdHRycy0+dmFsdWVzW2RpbWFd LAorCQkJCQkJCQkJc3RhdHNbZGltYV0tPnR1cERlc2MsICZpdGVtc1tpXS5p c251bGxbMF0pOworCisJCQkJaXRlbXNbaV0udmFsdWVzWzFdCisJCQkJCT0g aGVhcF9nZXRhdHRyKHJvd3NbaV0sIGF0dHJzLT52YWx1ZXNbZGltYl0sCisJ CQkJCQkJCQlzdGF0c1tkaW1iXS0+dHVwRGVzYywgJml0ZW1zW2ldLmlzbnVs bFsxXSk7CisJCQl9CisKKwkJCXFzb3J0X2FyZygodm9pZCAqKSBpdGVtcywg bnVtcm93cywgc2l6ZW9mKFNvcnRJdGVtKSwKKwkJCQkJICBtdWx0aV9zb3J0 X2NvbXBhcmUsIG1zcyk7CisKKwkJCS8qCisJCQkgKiBXYWxrIHRocm91Z2gg dGhlIGFycmF5LCBzcGxpdCBpdCBpbnRvIHJvd3MgYWNjb3JkaW5nIHRvCisJ CQkgKiB0aGUgQSB2YWx1ZSwgYW5kIGNvdW50IGRpc3RpbmN0IHZhbHVlcyBp biB0aGUgb3RoZXIgb25lLgorCQkJICogSWYgdGhlcmUncyBhIHNpbmdsZSBC IHZhbHVlIGZvciB0aGUgd2hvbGUgZ3JvdXAsIHdlIGNvdW50CisJCQkgKiBp dCBhcyBzdXBwb3J0aW5nIHRoZSBhc3NvY2lhdGlvbiwgb3RoZXJ3aXNlIHdl IGNvdW50IGl0CisJCQkgKiBhcyBjb250cmFkaWN0aW5nLgorCQkJICoKKwkJ CSAqIEZ1cnRoZXJtb3JlIHdlIHJlcXVpcmUgYSBncm91cCB0byBoYXZlIGF0 IGxlYXN0IGEgY2VydGFpbgorCQkJICogbnVtYmVyIG9mIHJvd3MgdG8gYmUg Y29uc2lkZXJlZCB1c2VmdWwgZm9yIHN1cHBvcnRpbmcgdGhlCisJCQkgKiBk ZXBlbmRlbmN5LiBCdXQgd2hlbiBpdCdzIGNvbnRyYWRpY3RpbmcsIHVzZSBp dCBhbHdheXMgdXNlZnVsLgorCQkJICovCisKKwkJCS8qIHN0YXJ0IHdpdGgg dmFsdWVzIGZyb20gdGhlIGZpcnN0IHJvdyAqLworCQkJY3VycmVudCA9IGl0 ZW1zWzBdOworCQkJZ3JvdXBfc2l6ZSAgPSAxOworCisJCQlmb3IgKGkgPSAx OyBpIDwgbnVtcm93czsgaSsrKQorCQkJeworCQkJCS8qIGVuZCBvZiB0aGUg Z3JvdXAgKi8KKwkJCQlpZiAobXVsdGlfc29ydF9jb21wYXJlX2RpbSgwLCAm aXRlbXNbaV0sICZjdXJyZW50LCBtc3MpICE9IDApCisJCQkJeworCQkJCQkv KgorCQkJCQkgKiBJZiB0aGVyZSBhcmUgbm8gY29udHJhZGljdGluZyByb3dz LCBjb3VudCBpdCBhcworCQkJCQkgKiBzdXBwb3J0aW5nIChvdGhlcndpc2Ug Y29udHJhZGljdGluZyksIGJ1dCBvbmx5IGlmCisJCQkJCSAqIHRoZSBncm91 cCBpcyBsYXJnZSBlbm91Z2guCisJCQkJCSAqCisJCQkJCSAqIFRoZSByZXF1 aXJlbWVudCBvZiBhIG1pbmltdW0gZ3JvdXAgc2l6ZSBtYWtlcyBpdAorCQkJ CQkgKiBpbXBvc3NpYmxlIHRvIGlkZW50aWZ5IFt1bmlxdWUsdW5pcXVlXSBj YXNlcywgYnV0CisJCQkJCSAqIHRoYXQncyBwcm9iYWJseSBhIGRpZmZlcmVu dCBjYXNlLiBUaGlzIGlzIG1vcmUKKwkJCQkJICogYWJvdXQgW3ppcCA9PiBj aXR5XSBhc3NvY2lhdGlvbnMgZXRjLgorCQkJCQkgKgorCQkJCQkgKiBJZiB0 aGVyZSBhcmUgdmlvbGF0aW9ucywgY291bnQgdGhlIGdyb3VwL3Jvd3MgYXMK KwkJCQkJICogYSB2aW9sYXRpb24uCisJCQkJCSAqCisJCQkJCSAqIEl0IG1h eSBuZSBuZWl0aGVyLCBpZiB0aGUgZ3JvdXAgaXMgdG9vIHNtYWxsIChkb2Vz CisJCQkJCSAqIG5vdCBjb250YWluIGF0IGxlYXN0IG1pbl9ncm91cF9zaXpl IHJvd3MpLgorCQkJCQkgKi8KKwkJCQkJaWYgKChuX3Zpb2xhdGlvbnMgPT0g MCkgJiYgKGdyb3VwX3NpemUgPj0gbWluX2dyb3VwX3NpemUpKQorCQkJCQl7 CisJCQkJCQluX3N1cHBvcnRpbmcgKz0gIDE7CisJCQkJCQluX3N1cHBvcnRp bmdfcm93cyArPSBncm91cF9zaXplOworCQkJCQl9CisJCQkJCWVsc2UgaWYg KG5fdmlvbGF0aW9ucyA+IDApCisJCQkJCXsKKwkJCQkJCW5fY29udHJhZGlj dGluZyArPSAgMTsKKwkJCQkJCW5fY29udHJhZGljdGluZ19yb3dzICs9IGdy b3VwX3NpemU7CisJCQkJCX0KKworCQkJCQkvKiBjdXJyZW50IHZhbHVlcyBz dGFydCBhIG5ldyBncm91cCAqLworCQkJCQluX3Zpb2xhdGlvbnMgPSAwOwor CQkJCQlncm91cF9zaXplID0gMDsKKwkJCQl9CisJCQkJLyogbWlzbWF0Y2gg b2YgYSBCIHZhbHVlIGlzIGNvbnRyYWRpY3RpbmcgKi8KKwkJCQllbHNlIGlm IChtdWx0aV9zb3J0X2NvbXBhcmVfZGltKDEsICZpdGVtc1tpXSwgJmN1cnJl bnQsIG1zcykgIT0gMCkKKwkJCQl7CisJCQkJCW5fdmlvbGF0aW9ucyArPSAx OworCQkJCX0KKworCQkJCWN1cnJlbnQgPSBpdGVtc1tpXTsKKwkJCQlncm91 cF9zaXplICs9IDE7CisJCQl9CisKKwkJCS8qIGhhbmRsZSB0aGUgbGFzdCBn cm91cCAoanVzdCBsaWtlIGFib3ZlKSAqLworCQkJaWYgKChuX3Zpb2xhdGlv bnMgPT0gMCkgJiYgKGdyb3VwX3NpemUgPj0gbWluX2dyb3VwX3NpemUpKQor CQkJeworCQkJCW5fc3VwcG9ydGluZyArPSAxOworCQkJCW5fc3VwcG9ydGlu Z19yb3dzICs9IGdyb3VwX3NpemU7CisJCQl9CisJCQllbHNlIGlmIChuX3Zp b2xhdGlvbnMpCisJCQl7CisJCQkJbl9jb250cmFkaWN0aW5nICs9IDE7CisJ CQkJbl9jb250cmFkaWN0aW5nX3Jvd3MgKz0gZ3JvdXBfc2l6ZTsKKwkJCX0K KworCQkJLyoKKwkJCSAqIFNlZSBpZiB0aGUgbnVtYmVyIG9mIHJvd3Mgc3Vw cG9ydGluZyB0aGUgYXNzb2NpYXRpb24gaXMgYXQgbGVhc3QKKwkJCSAqIDEw eCB0aGUgbnVtYmVyIG9mIHJvd3MgdmlvbGF0aW5nIHRoZSBoeXBvdGhldGlj YWwgZGVwZW5kZW5jeS4KKwkJCSAqCisJCQkgKiBUT0RPIFRoaXMgaXMgcmF0 aGVyIGFyYml0cmFyeSBsaW1pdCAtIEkgZ3Vlc3MgaXQncyBwb3NzaWJsZSB0 byBkbworCQkJICogICAgICBzb21lIG1hdGggdG8gY29tZSB1cCB3aXRoIGEg YmV0dGVyIHJ1bGUgKGUuZy4gdGVzdGluZyBhIGh5cG90aGVzaXMKKwkJCSAq ICAgICAgJ3RoaXMgaXMgZHVlIHRvIHJhbmRvbW5lc3MnKS4gV2UgY2FuIGNy ZWF0ZSBhIGNvbnRpbmdlbmN5IHRhYmxlCisJCQkgKiAgICAgIGZyb20gdGhl IHZhbHVlcyBhbmQgdXNlIGl0IGZvciB0ZXN0aW5nLiBQb3NzaWJseSBvbmx5 IHdoZW4KKwkJCSAqICAgICAgdGhlcmUgYXJlIG5vIGNvbnRyYWRpY3Rpbmcg cm93cz8KKwkJCSAqCisJCQkgKiBUT0RPIEFsc28sIGlmIChhID0+IGIpIGFu ZCAoYiA9PiBhKSBhdCB0aGUgc2FtZSB0aW1lLCBpdCBwcmV0dHkgbXVjaAor CQkJICogICAgICBtZWFucyB0aGVyZSdzIGEgMToxIHJlbGF0aW9uIChvciBv bmUgaXMgYSAnbGFiZWwnKSwgbWFraW5nIHRoZQorCQkJICogICAgICBjb25k aXRpb25zIHJhdGhlciByZWR1bmRhbnQuIEFsdGhvdWdoIGl0J3MgcG9zc2li bGUgdGhhdCB0aGUKKwkJCSAqICAgICAgcXVlcnkgdXNlcyBpbmNvbXBhdGli bGUgY29tYmluYXRpb24gb2YgdmFsdWVzLgorCQkJICovCisJCQlpZiAobl9z dXBwb3J0aW5nX3Jvd3MgPiAobl9jb250cmFkaWN0aW5nX3Jvd3MgKiAxMCkp CisJCQl7CisJCQkJaWYgKGRlcGVuZGVuY2llcyA9PSBOVUxMKQorCQkJCXsK KwkJCQkJZGVwZW5kZW5jaWVzID0gKE1WRGVwZW5kZW5jaWVzKXBhbGxvYzAo c2l6ZW9mKE1WRGVwZW5kZW5jaWVzRGF0YSkpOworCQkJCQlkZXBlbmRlbmNp ZXMtPm1hZ2ljID0gTVZTVEFUX0RFUFNfTUFHSUM7CisJCQkJfQorCQkJCWVs c2UKKwkJCQkJZGVwZW5kZW5jaWVzID0gcmVwYWxsb2MoZGVwZW5kZW5jaWVz LCBvZmZzZXRvZihNVkRlcGVuZGVuY2llc0RhdGEsIGRlcHMpCisJCQkJCQkJ CQkJCSsgc2l6ZW9mKE1WRGVwZW5kZW5jeSkgKiAoZGVwZW5kZW5jaWVzLT5u ZGVwcyArIDEpKTsKKworCQkJCS8qIHVwZGF0ZSB0aGUgKi8KKwkJCQlkZXBl bmRlbmNpZXMtPmRlcHNbbmRlcHNdID0gKE1WRGVwZW5kZW5jeSlwYWxsb2Mw KHNpemVvZihNVkRlcGVuZGVuY3lEYXRhKSk7CisJCQkJZGVwZW5kZW5jaWVz LT5kZXBzW25kZXBzXS0+YSA9IGF0dHJzLT52YWx1ZXNbZGltYV07CisJCQkJ ZGVwZW5kZW5jaWVzLT5kZXBzW25kZXBzXS0+YiA9IGF0dHJzLT52YWx1ZXNb ZGltYl07CisKKwkJCQlkZXBlbmRlbmNpZXMtPm5kZXBzID0gKCsrbmRlcHMp OworCQkJfQorCQl9CisJfQorCisJcGZyZWUoaXRlbXMpOworCXBmcmVlKHZh bHVlcyk7CisJcGZyZWUoaXNudWxsKTsKKwlwZnJlZShzdGF0cyk7CisJcGZy ZWUobXNzKTsKKworCXJldHVybiBkZXBlbmRlbmNpZXM7Cit9CisKKy8qCisg KiBTdG9yZSB0aGUgZGVwZW5kZW5jaWVzIGludG8gYSBieXRlYSwgc28gdGhh dCBpdCBjYW4gYmUgc3RvcmVkIGluIHRoZQorICogcGdfbXZfc3RhdGlzdGlj IGNhdGFsb2cuCisgKgorICogQ3VycmVudGx5IHRoaXMgb25seSBzdXBwb3J0 cyBzaW1wbGUgdHdvLWNvbHVtbiBydWxlcywgYW5kIHN0b3JlcyB0aGVtCisg KiBhcyBhIHNlcXVlbmNlIG9mIGF0dG51bSBwYWlycy4gSW4gdGhlIGZ1dHVy ZSwgdGhpcyBuZWVkcyB0byBiZSBtYWRlCisgKiBtb3JlIGNvbXBsZXggdG8g c3VwcG9ydCBtdWx0aXBsZSBjb2x1bW5zIG9uIGJvdGggc2lkZXMgb2YgdGhl CisgKiBpbXBsaWNhdGlvbiAodXNpbmcgQU5EIG9uIGxlZnQsIE9SIG9uIHJp Z2h0KS4KKyAqLworYnl0ZWEgKgorc2VyaWFsaXplX212X2RlcGVuZGVuY2ll cyhNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpCit7CisJaW50IGk7CisK KwkvKiB3ZSBuZWVkIHRvIHN0b3JlIG5kZXBzLCBhbmQgZWFjaCBuZWVkcyAy ICogaW50MTYgKi8KKwlTaXplIGxlbiA9IFZBUkhEUlNaICsgb2Zmc2V0b2Yo TVZEZXBlbmRlbmNpZXNEYXRhLCBkZXBzKQorCQkJCSsgZGVwZW5kZW5jaWVz LT5uZGVwcyAqIChzaXplb2YoaW50MTYpICogMik7CisKKwlieXRlYSAqIG91 dHB1dCA9IChieXRlYSopcGFsbG9jMChsZW4pOworCisJY2hhciAqIHRtcCA9 IFZBUkRBVEEob3V0cHV0KTsKKworCVNFVF9WQVJTSVpFKG91dHB1dCwgbGVu KTsKKworCS8qIGZpcnN0LCBzdG9yZSB0aGUgbnVtYmVyIG9mIGRpbWVuc2lv bnMgLyBpdGVtcyAqLworCW1lbWNweSh0bXAsIGRlcGVuZGVuY2llcywgb2Zm c2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLCBkZXBzKSk7CisJdG1wICs9IG9m ZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0YSwgZGVwcyk7CisKKwkvKiB3YWxr IHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgY29weSBib3RoIGNvbHVt bnMgaW50byB0aGUgYnl0ZWEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVwZW5k ZW5jaWVzLT5uZGVwczsgaSsrKQorCXsKKwkJbWVtY3B5KHRtcCwgJihkZXBl bmRlbmNpZXMtPmRlcHNbaV0tPmEpLCBzaXplb2YoaW50MTYpKTsKKwkJdG1w ICs9IHNpemVvZihpbnQxNik7CisKKwkJbWVtY3B5KHRtcCwgJihkZXBlbmRl bmNpZXMtPmRlcHNbaV0tPmIpLCBzaXplb2YoaW50MTYpKTsKKwkJdG1wICs9 IHNpemVvZihpbnQxNik7CisJfQorCisJcmV0dXJuIG91dHB1dDsKK30KKwor LyoKKyAqIFJlYWRzIHNlcmlhbGl6ZWQgZGVwZW5kZW5jaWVzIGludG8gTVZE ZXBlbmRlbmNpZXMgc3RydWN0dXJlLgorICovCitNVkRlcGVuZGVuY2llcwor ZGVzZXJpYWxpemVfbXZfZGVwZW5kZW5jaWVzKGJ5dGVhICogZGF0YSkKK3sK KwlpbnQJCWk7CisJU2l6ZQlleHBlY3RlZF9zaXplOworCU1WRGVwZW5kZW5j aWVzCWRlcGVuZGVuY2llczsKKwljaGFyICAgKnRtcDsKKworCWlmIChkYXRh ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaWYgKFZBUlNJWkVfQU5Z X0VYSERSKGRhdGEpIDwgb2Zmc2V0b2YoTVZEZXBlbmRlbmNpZXNEYXRhLGRl cHMpKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBNVkRlcGVuZGVuY2llcyBz aXplICVsZCAoZXhwZWN0ZWQgYXQgbGVhc3QgJWxkKSIsCisJCQkgVkFSU0la RV9BTllfRVhIRFIoZGF0YSksIG9mZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0 YSxkZXBzKSk7CisKKwkvKiByZWFkIHRoZSBNVkRlcGVuZGVuY2llcyBoZWFk ZXIgKi8KKwlkZXBlbmRlbmNpZXMgPSAoTVZEZXBlbmRlbmNpZXMpcGFsbG9j MChzaXplb2YoTVZEZXBlbmRlbmNpZXNEYXRhKSk7CisKKwkvKiBpbml0aWFs aXplIHBvaW50ZXIgdG8gdGhlIGRhdGEgcGFydCAoc2tpcCB0aGUgdmFybGVu YSBoZWFkZXIpICovCisJdG1wID0gVkFSREFUQShkYXRhKTsKKworCS8qIGdl dCB0aGUgaGVhZGVyIGFuZCBwZXJmb3JtIGJhc2ljIHNhbml0eSBjaGVja3Mg Ki8KKwltZW1jcHkoZGVwZW5kZW5jaWVzLCB0bXAsIG9mZnNldG9mKE1WRGVw ZW5kZW5jaWVzRGF0YSwgZGVwcykpOworCXRtcCArPSBvZmZzZXRvZihNVkRl cGVuZGVuY2llc0RhdGEsIGRlcHMpOworCisJaWYgKGRlcGVuZGVuY2llcy0+ bWFnaWMgIT0gTVZTVEFUX0RFUFNfTUFHSUMpCisJeworCQlwZnJlZShkZXBl bmRlbmNpZXMpOworCQllbG9nKFdBUk5JTkcsICJub3QgYSBNViBEZXBlbmRl bmNpZXMgKG1hZ2ljIG51bWJlciBtaXNtYXRjaCkiKTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJQXNzZXJ0KGRlcGVuZGVuY2llcy0+bmRlcHMgPiAwKTsK KworCS8qIHdoYXQgYnl0ZWEgc2l6ZSBkbyB3ZSBleHBlY3QgZm9yIHRob3Nl IHBhcmFtZXRlcnMgKi8KKwlleHBlY3RlZF9zaXplID0gb2Zmc2V0b2YoTVZE ZXBlbmRlbmNpZXNEYXRhLGRlcHMpICsKKwkJCQkJZGVwZW5kZW5jaWVzLT5u ZGVwcyAqIHNpemVvZihpbnQxNikgKiAyOworCisJaWYgKFZBUlNJWkVfQU5Z X0VYSERSKGRhdGEpICE9IGV4cGVjdGVkX3NpemUpCisJCWVsb2coRVJST1Is ICJpbnZhbGlkIGRlcGVuZGVuY2llcyBzaXplICVsZCAoZXhwZWN0ZWQgJWxk KSIsCisJCQkgVkFSU0laRV9BTllfRVhIRFIoZGF0YSksIGV4cGVjdGVkX3Np emUpOworCisJLyogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBNQ1YgaXRlbXMg Ki8KKwlkZXBlbmRlbmNpZXMgPSByZXBhbGxvYyhkZXBlbmRlbmNpZXMsIG9m ZnNldG9mKE1WRGVwZW5kZW5jaWVzRGF0YSxkZXBzKQorCQkJCQkJCSsgKGRl cGVuZGVuY2llcy0+bmRlcHMgKiBzaXplb2YoTVZEZXBlbmRlbmN5KSkpOwor CisJZm9yIChpID0gMDsgaSA8IGRlcGVuZGVuY2llcy0+bmRlcHM7IGkrKykK Kwl7CisJCWRlcGVuZGVuY2llcy0+ZGVwc1tpXSA9IChNVkRlcGVuZGVuY3kp cGFsbG9jMChzaXplb2YoTVZEZXBlbmRlbmN5RGF0YSkpOworCisJCW1lbWNw eSgmKGRlcGVuZGVuY2llcy0+ZGVwc1tpXS0+YSksIHRtcCwgc2l6ZW9mKGlu dDE2KSk7CisJCXRtcCArPSBzaXplb2YoaW50MTYpOworCisJCW1lbWNweSgm KGRlcGVuZGVuY2llcy0+ZGVwc1tpXS0+YiksIHRtcCwgc2l6ZW9mKGludDE2 KSk7CisJCXRtcCArPSBzaXplb2YoaW50MTYpOworCX0KKworCXJldHVybiBk ZXBlbmRlbmNpZXM7Cit9CisKKy8qIHByaW50IHNvbWUgYmFzaWMgaW5mbyBh Ym91dCBkZXBlbmRlbmNpZXMgKG51bWJlciBvZiBkZXBlbmRlbmNpZXMpICov CitEYXR1bQorcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2luZm8oUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlieXRlYQkgICAqZGF0YSA9IFBHX0dFVEFSR19C WVRFQV9QKDApOworCWNoYXIJICAgKnJlc3VsdDsKKworCU1WRGVwZW5kZW5j aWVzIGRlcGVuZGVuY2llcyA9IGRlc2VyaWFsaXplX212X2RlcGVuZGVuY2ll cyhkYXRhKTsKKworCWlmIChkZXBlbmRlbmNpZXMgPT0gTlVMTCkKKwkJUEdf UkVUVVJOX05VTEwoKTsKKworCXJlc3VsdCA9IHBhbGxvYzAoMTI4KTsKKwlz bnByaW50ZihyZXN1bHQsIDEyOCwgImRlcGVuZGVuY2llcz0lZCIsIGRlcGVu ZGVuY2llcy0+bmRlcHMpOworCisJLyogRklYTUUgZnJlZSB0aGUgZGVzZXJp YWxpemVkIGRhdGEgKHBmcmVlIGlzIG5vdCBlbm91Z2gpICovCisKKwlQR19S RVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChyZXN1bHQpKTsKK30KKwor LyogcHJpbnQgdGhlIGRlcGVuZGVuY2llcworICoKKyAqIFRPRE8gIFdvdWxk IGJlIG5pY2UgaWYgdGhpcyBrbmV3IHRoZSBhY3R1YWwgY29sdW1uIG5hbWVz IChpbnN0ZWFkIG9mCisgKiAgICAgICB0aGUgYXR0bnVtcykuCisgKgorICog RklYTUUgVGhpcyBpcyByZWFsbHkgdWdseSBhbmQgZG9lcyBub3QgcmVhbGx5 IGNoZWNrIHRoZSBsZW5ndGhzIGFuZAorICogICAgICAgc3RyY3B5L3NucHJp bnRmIHJldHVybiB2YWx1ZXMgcHJvcGVybHkuIE5lZWRzIHRvIGJlIGZpeGVk LgorICovCitEYXR1bQorcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3co UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQJCQlpID0gMDsKKwlieXRlYQkg ICAqZGF0YSA9IFBHX0dFVEFSR19CWVRFQV9QKDApOworCWNoYXIJICAgKnJl c3VsdCA9IE5VTEw7CisJaW50CQkJbGVuID0gMDsKKworCU1WRGVwZW5kZW5j aWVzIGRlcGVuZGVuY2llcyA9IGRlc2VyaWFsaXplX212X2RlcGVuZGVuY2ll cyhkYXRhKTsKKworCWlmIChkZXBlbmRlbmNpZXMgPT0gTlVMTCkKKwkJUEdf UkVUVVJOX05VTEwoKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXBlbmRlbmNp ZXMtPm5kZXBzOyBpKyspCisJeworCQlNVkRlcGVuZGVuY3kgZGVwZW5kZW5j eSA9IGRlcGVuZGVuY2llcy0+ZGVwc1tpXTsKKwkJY2hhcglidWZmZXJbMTI4 XTsKKworCQlpbnQJCXRtcCA9IHNucHJpbnRmKGJ1ZmZlciwgMTI4LCAiJXMl ZCA9PiAlZCIsCisJCQkJKChpID09IDApID8gIiIgOiAiLCAiKSwgZGVwZW5k ZW5jeS0+YSwgZGVwZW5kZW5jeS0+Yik7CisKKwkJaWYgKHRtcCA8IDEyNykK KwkJeworCQkJaWYgKHJlc3VsdCA9PSBOVUxMKQorCQkJCXJlc3VsdCA9IHBh bGxvYzAobGVuICsgdG1wICsgMSk7CisJCQllbHNlCisJCQkJcmVzdWx0ID0g cmVwYWxsb2MocmVzdWx0LCBsZW4gKyB0bXAgKyAxKTsKKworCQkJc3RyY3B5 KHJlc3VsdCArIGxlbiwgYnVmZmVyKTsKKwkJCWxlbiArPSB0bXA7CisJCX0K Kwl9CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChyZXN1 bHQpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5j IGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggZmQ4ZGM5MS4uNGYx MDZjMyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysr IGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTIxMDQsNiArMjEwNCw1 MCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hl bWFuYW1lLAogCQkJUFFjbGVhcihyZXN1bHQpOwogCQl9CiAKKwkJLyogcHJp bnQgYW55IG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNzICovCisJCWlmIChwc2V0 LnN2ZXJzaW9uID49IDkwNTAwKQorCQl7CisJCQlwcmludGZQUUV4cEJ1ZmZl cigmYnVmLAorCQkJCQkJICAgIlNFTEVDVCBvaWQsIHN0YW5hbWVzcGFjZTo6 cmVnbmFtZXNwYWNlIEFTIG5zcCwgc3RhbmFtZSwgc3Rha2V5cyxcbiIKKwkJ CQkJCSAgICIgIGRlcHNfZW5hYmxlZCxcbiIKKwkJCQkJCSAgICIgIGRlcHNf YnVpbHQsXG4iCisJCQkJCQkgICAiICAoU0VMRUNUIHN0cmluZ19hZ2coYXR0 bmFtZTo6dGV4dCwnLCAnKVxuIgorCQkJCQkJICAgIiAgICBGUk9NICgoU0VM RUNUIHVubmVzdChzdGFrZXlzKSBBUyBhdHRudW0pIHNcbiIKKwkJCQkJCSAg ICIgICAgICAgICBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIChzdGFyZWxpZCA9 IGEuYXR0cmVsaWQgYW5kIGEuYXR0bnVtID0gcy5hdHRudW0pKSkgQVMgYXR0 bnVtc1xuIgorCQkJCQkJICAgIkZST00gcGdfbXZfc3RhdGlzdGljIHN0YXQg V0hFUkUgc3RhcmVsaWQgID0gJyVzJyBPUkRFUiBCWSAxOyIsCisJCQkJCQkJ ICBvaWQpOworCisJCQlyZXN1bHQgPSBQU1FMZXhlYyhidWYuZGF0YSk7CisJ CQlpZiAoIXJlc3VsdCkKKwkJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJCWVs c2UKKwkJCQl0dXBsZXMgPSBQUW50dXBsZXMocmVzdWx0KTsKKworCQkJaWYg KHR1cGxlcyA+IDApCisJCQl7CisJCQkJcHJpbnRUYWJsZUFkZEZvb3Rlcigm Y29udCwgXygiU3RhdGlzdGljczoiKSk7CisJCQkJZm9yIChpID0gMDsgaSA8 IHR1cGxlczsgaSsrKQorCQkJCXsKKwkJCQkJcHJpbnRmUFFFeHBCdWZmZXIo JmJ1ZiwgIiAgICAiKTsKKworCQkJCQkvKiBzdGF0aXN0aWNzIG5hbWUgKHF1 YWxpZmllZCB3aXRoIG5hbWVzcGFjZSkgKi8KKwkJCQkJYXBwZW5kUFFFeHBC dWZmZXIoJmJ1ZiwgIlwiJXMuJXNcIiAiLAorCQkJCQkJCQkJICBQUWdldHZh bHVlKHJlc3VsdCwgaSwgMSksCisJCQkJCQkJCQkgIFBRZ2V0dmFsdWUocmVz dWx0LCBpLCAyKSk7CisKKwkJCQkJLyogIG9wdGlvbnMgKi8KKwkJCQkJaWYg KCFzdHJjbXAoUFFnZXR2YWx1ZShyZXN1bHQsIGksIDQpLCAidCIpKQorCQkJ CQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIihkZXBlbmRlbmNpZXMpIik7 CisKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIiBPTiAoJXMpIiwK KwkJCQkJCQlQUWdldHZhbHVlKHJlc3VsdCwgaSwgNikpOworCisJCQkJCXBy aW50VGFibGVBZGRGb290ZXIoJmNvbnQsIGJ1Zi5kYXRhKTsKKwkJCQl9CisJ CQl9CisJCQlQUWNsZWFyKHJlc3VsdCk7CisJCX0KKwogCQkvKiBwcmludCBy dWxlcyAqLwogCQlpZiAodGFibGVpbmZvLmhhc3J1bGVzICYmIHRhYmxlaW5m by5yZWxraW5kICE9ICdtJykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9n L2RlcGVuZGVuY3kuaAppbmRleCAwNDliZjlmLi4xMjIxMWZlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaApAQCAtMTUzLDEwICsx NTMsMTEgQEAgdHlwZWRlZiBlbnVtIE9iamVjdENsYXNzCiAJT0NMQVNTX0VY VEVOU0lPTiwJCQkvKiBwZ19leHRlbnNpb24gKi8KIAlPQ0xBU1NfRVZFTlRf VFJJR0dFUiwJCS8qIHBnX2V2ZW50X3RyaWdnZXIgKi8KIAlPQ0xBU1NfUE9M SUNZLAkJCQkvKiBwZ19wb2xpY3kgKi8KLQlPQ0xBU1NfVFJBTlNGT1JNCQkJ LyogcGdfdHJhbnNmb3JtICovCisJT0NMQVNTX1RSQU5TRk9STSwJCQkvKiBw Z190cmFuc2Zvcm0gKi8KKwlPQ0xBU1NfU1RBVElTVElDUwkJCS8qIHBnX212 X3N0YXRpc3RpY3MgKi8KIH0gT2JqZWN0Q2xhc3M7CiAKLSNkZWZpbmUgTEFT VF9PQ0xBU1MJCU9DTEFTU19UUkFOU0ZPUk0KKyNkZWZpbmUgTEFTVF9PQ0xB U1MJCU9DTEFTU19TVEFUSVNUSUNTCiAKIAogLyogaW4gZGVwZW5kZW5jeS5j ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2hlYXAuaCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvaGVhcC5oCmluZGV4IGI4MGQ4ZDguLjVh ZTQyZjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaGVhcC5o CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaGVhcC5oCkBAIC0xMTksNiAr MTE5LDcgQEAgZXh0ZXJuIHZvaWQgUmVtb3ZlQXR0ckRlZmF1bHQoT2lkIHJl bGlkLCBBdHRyTnVtYmVyIGF0dG51bSwKIAkJCQkgIERyb3BCZWhhdmlvciBi ZWhhdmlvciwgYm9vbCBjb21wbGFpbiwgYm9vbCBpbnRlcm5hbCk7CiBleHRl cm4gdm9pZCBSZW1vdmVBdHRyRGVmYXVsdEJ5SWQoT2lkIGF0dHJkZWZJZCk7 CiBleHRlcm4gdm9pZCBSZW1vdmVTdGF0aXN0aWNzKE9pZCByZWxpZCwgQXR0 ck51bWJlciBhdHRudW0pOworZXh0ZXJuIHZvaWQgUmVtb3ZlTVZTdGF0aXN0 aWNzKE9pZCByZWxpZCwgQXR0ck51bWJlciBhdHRudW0pOwogCiBleHRlcm4g Rm9ybV9wZ19hdHRyaWJ1dGUgU3lzdGVtQXR0cmlidXRlRGVmaW5pdGlvbihB dHRyTnVtYmVyIGF0dG5vLAogCQkJCQkJICBib29sIHJlbGhhc29pZHMpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleGluZy5oIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleGluZy5oCmluZGV4IGFiMmMxYTgu LmE3NjhiYjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5k ZXhpbmcuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4aW5nLmgK QEAgLTE3Myw2ICsxNzMsMTMgQEAgREVDTEFSRV9VTklRVUVfSU5ERVgocGdf bGFyZ2VvYmplY3RfbG9pZF9wbl9pbmRleCwgMjY4Mywgb24gcGdfbGFyZ2Vv YmplY3QgdXNpbmcKIERFQ0xBUkVfVU5JUVVFX0lOREVYKHBnX2xhcmdlb2Jq ZWN0X21ldGFkYXRhX29pZF9pbmRleCwgMjk5Niwgb24gcGdfbGFyZ2VvYmpl Y3RfbWV0YWRhdGEgdXNpbmcgYnRyZWUob2lkIG9pZF9vcHMpKTsKICNkZWZp bmUgTGFyZ2VPYmplY3RNZXRhZGF0YU9pZEluZGV4SWQJMjk5NgogCitERUNM QVJFX1VOSVFVRV9JTkRFWChwZ19tdl9zdGF0aXN0aWNfb2lkX2luZGV4LCAz MzgwLCBvbiBwZ19tdl9zdGF0aXN0aWMgdXNpbmcgYnRyZWUob2lkIG9pZF9v cHMpKTsKKyNkZWZpbmUgTXZTdGF0aXN0aWNPaWRJbmRleElkICAzMzgwCitE RUNMQVJFX1VOSVFVRV9JTkRFWChwZ19tdl9zdGF0aXN0aWNfbmFtZV9pbmRl eCwgMzk5Nywgb24gcGdfbXZfc3RhdGlzdGljIHVzaW5nIGJ0cmVlKHN0YW5h bWUgbmFtZV9vcHMsIHN0YW5hbWVzcGFjZSBvaWRfb3BzKSk7CisjZGVmaW5l IE12U3RhdGlzdGljTmFtZUluZGV4SWQgIDM5OTcKK0RFQ0xBUkVfSU5ERVgo cGdfbXZfc3RhdGlzdGljX3JlbGlkX2luZGV4LCAzMzc5LCBvbiBwZ19tdl9z dGF0aXN0aWMgdXNpbmcgYnRyZWUoc3RhcmVsaWQgb2lkX29wcykpOworI2Rl ZmluZSBNdlN0YXRpc3RpY1JlbGlkSW5kZXhJZAkzMzc5CisKIERFQ0xBUkVf VU5JUVVFX0lOREVYKHBnX25hbWVzcGFjZV9uc3BuYW1lX2luZGV4LCAyNjg0 LCBvbiBwZ19uYW1lc3BhY2UgdXNpbmcgYnRyZWUobnNwbmFtZSBuYW1lX29w cykpOwogI2RlZmluZSBOYW1lc3BhY2VOYW1lSW5kZXhJZCAgMjY4NAogREVD TEFSRV9VTklRVUVfSU5ERVgocGdfbmFtZXNwYWNlX29pZF9pbmRleCwgMjY4 NSwgb24gcGdfbmFtZXNwYWNlIHVzaW5nIGJ0cmVlKG9pZCBvaWRfb3BzKSk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL25hbWVzcGFjZS5o IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9uYW1lc3BhY2UuaAppbmRleCAyY2Ni M2E3Li40NGNmOWM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L25hbWVzcGFjZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvbmFtZXNw YWNlLmgKQEAgLTEzNyw2ICsxMzcsOCBAQCBleHRlcm4gT2lkCWdldF9jb2xs YXRpb25fb2lkKExpc3QgKmNvbGxuYW1lLCBib29sIG1pc3Npbmdfb2spOwog ZXh0ZXJuIE9pZAlnZXRfY29udmVyc2lvbl9vaWQoTGlzdCAqY29ubmFtZSwg Ym9vbCBtaXNzaW5nX29rKTsKIGV4dGVybiBPaWQJRmluZERlZmF1bHRDb252 ZXJzaW9uUHJvYyhpbnQzMiBmb3JfZW5jb2RpbmcsIGludDMyIHRvX2VuY29k aW5nKTsKIAorZXh0ZXJuIE9pZAlnZXRfc3RhdGlzdGljc19vaWQoTGlzdCAq bmFtZXMsIGJvb2wgbWlzc2luZ19vayk7CisKIC8qIGluaXRpYWxpemF0aW9u ICYgdHJhbnNhY3Rpb24gY2xlYW51cCBjb2RlICovCiBleHRlcm4gdm9pZCBJ bml0aWFsaXplU2VhcmNoUGF0aCh2b2lkKTsKIGV4dGVybiB2b2lkIEF0RU9Y YWN0X05hbWVzcGFjZShib29sIGlzQ29tbWl0LCBib29sIHBhcmFsbGVsKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlz dGljLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3RpYy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjhhMDcK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212 X3N0YXRpc3RpYy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBnX212X3N0YXRpc3RpYy5oCisg KgkgIGRlZmluaXRpb24gb2YgdGhlIHN5c3RlbSAibXVsdGl2YXJpYXRlIHN0 YXRpc3RpYyIgcmVsYXRpb24gKHBnX212X3N0YXRpc3RpYykKKyAqCSAgYWxv bmcgd2l0aCB0aGUgcmVsYXRpb24ncyBpbml0aWFsIGNvbnRlbnRzLgorICoK KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19tdl9zdGF0aXN0aWMuaAorICoKKyAqIE5PVEVTCisgKgkgIHRoZSBnZW5i a2kucGwgc2NyaXB0IHJlYWRzIHRoaXMgZmlsZSBhbmQgZ2VuZXJhdGVzIC5i a2kKKyAqCSAgaW5mb3JtYXRpb24gZnJvbSB0aGUgREFUQSgpIHN0YXRlbWVu dHMuCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpZm5kZWYgUEdfTVZfU1RBVElTVElDX0gKKyNkZWZpbmUgUEdfTVZfU1RB VElTVElDX0gKKworI2luY2x1ZGUgImNhdGFsb2cvZ2VuYmtpLmgiCisKKy8q IC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlwZ19tdl9zdGF0aXN0aWMgZGVmaW5p dGlvbi4gIGNwcCB0dXJucyB0aGlzIGludG8KKyAqCQl0eXBlZGVmIHN0cnVj dCBGb3JtRGF0YV9wZ19tdl9zdGF0aXN0aWMKKyAqIC0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2RlZmluZSBNdlN0YXRpc3RpY1JlbGF0aW9uSWQgIDMzODEK KworQ0FUQUxPRyhwZ19tdl9zdGF0aXN0aWMsMzM4MSkKK3sKKwkvKiBUaGVz ZSBmaWVsZHMgZm9ybSB0aGUgdW5pcXVlIGtleSBmb3IgdGhlIGVudHJ5OiAq LworCU9pZAkJCXN0YXJlbGlkOwkJCS8qIHJlbGF0aW9uIGNvbnRhaW5pbmcg YXR0cmlidXRlcyAqLworCU5hbWVEYXRhCXN0YW5hbWU7CQkJLyogc3RhdGlz dGljcyBuYW1lICovCisJT2lkCQkJc3RhbmFtZXNwYWNlOwkJLyogT0lEIG9m IG5hbWVzcGFjZSBjb250YWluaW5nIHRoaXMgc3RhdGlzdGljcyAqLworCisJ Lyogc3RhdGlzdGljcyByZXF1ZXN0ZWQgdG8gYnVpbGQgKi8KKwlib29sCQlk ZXBzX2VuYWJsZWQ7CQkvKiBhbmFseXplIGRlcGVuZGVuY2llcz8gKi8KKwor CS8qIHN0YXRpc3RpY3MgdGhhdCBhcmUgYXZhaWxhYmxlIChpZiByZXF1ZXN0 ZWQpICovCisJYm9vbAkJZGVwc19idWlsdDsJCQkvKiBkZXBlbmRlbmNpZXMg d2VyZSBidWlsdCAqLworCisJLyogdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBz dGFydCBoZXJlLCBidXQgd2UgYWxsb3cgZGlyZWN0IGFjY2VzcyB0byBzdGFr ZXlzICovCisJaW50MnZlY3RvcglzdGFrZXlzOwkJCS8qIGFycmF5IG9mIGNv bHVtbiBrZXlzICovCisKKyNpZmRlZiBDQVRBTE9HX1ZBUkxFTgorCWJ5dGVh CQlzdGFkZXBzOwkJCS8qIGRlcGVuZGVuY2llcyAoc2VyaWFsaXplZCkgKi8K KyNlbmRpZgorCit9IEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYzsKKworLyog LS0tLS0tLS0tLS0tLS0tLQorICoJCUZvcm1fcGdfbXZfc3RhdGlzdGljIGNv cnJlc3BvbmRzIHRvIGEgcG9pbnRlciB0byBhIHR1cGxlIHdpdGgKKyAqCQl0 aGUgZm9ybWF0IG9mIHBnX212X3N0YXRpc3RpYyByZWxhdGlvbi4KKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLwordHlwZWRlZiBGb3JtRGF0YV9wZ19tdl9z dGF0aXN0aWMgKkZvcm1fcGdfbXZfc3RhdGlzdGljOworCisvKiAtLS0tLS0t LS0tLS0tLS0tCisgKgkJY29tcGlsZXIgY29uc3RhbnRzIGZvciBwZ19tdl9z dGF0aXN0aWMKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBO YXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTcKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhcmVsaWQJCQkxCisjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX3N0YW5hbWUJCQkyCisjZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX3N0YW5hbWVzcGFjZQkJMworI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19kZXBzX2VuYWJsZWQJCTQKKyNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfZGVwc19idWlsdAkJCTUKKyNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfc3Rha2V5cwkJCTYKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3RhZGVwcwkJCTcKKworI2VuZGlmICAgLyogUEdfTVZfU1RBVElT VElDX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKaW5kZXgg NjJiOTEyNS4uMjBkNTY1YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmgKQEAgLTI2NjYsNiArMjY2NiwxMSBAQCBERVNDUigiY3VycmVudCB1 c2VyIHByaXZpbGVnZSBvbiBhbnkgY29sdW1uIGJ5IHJlbCBuYW1lIik7CiBE QVRBKGluc2VydCBPSUQgPSAzMDI5ICggIGhhc19hbnlfY29sdW1uX3ByaXZp bGVnZQkgICBQR05TUCBQR1VJRCAxMiAxMCAwIDAgMCBmIGYgZiBmIHQgZiBz IHMgMiAwIDE2ICIyNiAyNSIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxf IF9udWxsXyBoYXNfYW55X2NvbHVtbl9wcml2aWxlZ2VfaWQgX251bGxfIF9u dWxsXyBfbnVsbF8gKSk7CiBERVNDUigiY3VycmVudCB1c2VyIHByaXZpbGVn ZSBvbiBhbnkgY29sdW1uIGJ5IHJlbCBvaWQiKTsKIAorREFUQShpbnNlcnQg T0lEID0gMzk5OCAoICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyAg ICAgUEdOU1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBpIHMgMSAw IDI1ICIxNyIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBw Z19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyBfbnVsbF8gX251bGxfIF9u dWxsXyApKTsKK0RFU0NSKCJtdWx0aXZhcmlhdGUgc3RhdHM6IGZ1bmN0aW9u YWwgZGVwZW5kZW5jaWVzIGluZm8iKTsKK0RBVEEoaW5zZXJ0IE9JRCA9IDM5 OTkgKCAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgICAgIFBHTlNQ IFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYgZiB0IGYgaSBzIDEgMCAyNSAiMTci IF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gcGdfbXZfc3Rh dHNfZGVwZW5kZW5jaWVzX3Nob3cgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7 CitERVNDUigibXVsdGl2YXJpYXRlIHN0YXRzOiBmdW5jdGlvbmFsIGRlcGVu ZGVuY2llcyBzaG93Iik7CisKIERBVEEoaW5zZXJ0IE9JRCA9IDE5MjggKCAg cGdfc3RhdF9nZXRfbnVtc2NhbnMJCQlQR05TUCBQR1VJRCAxMiAxIDAgMCAw IGYgZiBmIGYgdCBmIHMgciAxIDAgMjAgIjI2IiBfbnVsbF8gX251bGxfIF9u dWxsXyBfbnVsbF8gX251bGxfIHBnX3N0YXRfZ2V0X251bXNjYW5zIF9udWxs XyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoInN0YXRpc3RpY3M6IG51bWJl ciBvZiBzY2FucyBkb25lIGZvciB0YWJsZS9pbmRleCIpOwogREFUQShpbnNl cnQgT0lEID0gMTkyOSAoICBwZ19zdGF0X2dldF90dXBsZXNfcmV0dXJuZWQJ UEdOU1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBzIHIgMSAwIDIw ICIyNiIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19z dGF0X2dldF90dXBsZXNfcmV0dXJuZWQgX251bGxfIF9udWxsXyBfbnVsbF8g KSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3RvYXN0aW5n LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3RvYXN0aW5nLmgKaW5kZXggYjdh MzhjZS4uYTUyMDk2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy90b2FzdGluZy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvdG9hc3Rp bmcuaApAQCAtNDksNiArNDksNyBAQCBleHRlcm4gdm9pZCBCb290c3RyYXBU b2FzdFRhYmxlKGNoYXIgKnJlbE5hbWUsCiBERUNMQVJFX1RPQVNUKHBnX2F0 dHJkZWYsIDI4MzAsIDI4MzEpOwogREVDTEFSRV9UT0FTVChwZ19jb25zdHJh aW50LCAyODMyLCAyODMzKTsKIERFQ0xBUkVfVE9BU1QocGdfZGVzY3JpcHRp b24sIDI4MzQsIDI4MzUpOworREVDTEFSRV9UT0FTVChwZ19tdl9zdGF0aXN0 aWMsIDM1NzcsIDM1NzgpOwogREVDTEFSRV9UT0FTVChwZ19wcm9jLCAyODM2 LCAyODM3KTsKIERFQ0xBUkVfVE9BU1QocGdfcmV3cml0ZSwgMjgzOCwgMjgz OSk7CiBERUNMQVJFX1RPQVNUKHBnX3NlY2xhYmVsLCAzNTk4LCAzNTk5KTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2RlZnJlbS5oIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmgKaW5kZXggNTRmNjdlOS4u OTlhNmE2MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVm cmVtLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZGVmcmVtLmgKQEAg LTc1LDYgKzc1LDEwIEBAIGV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZU9w ZXJhdG9yKExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzKTsKIGV4dGVy biB2b2lkIFJlbW92ZU9wZXJhdG9yQnlJZChPaWQgb3Blck9pZCk7CiBleHRl cm4gT2JqZWN0QWRkcmVzcyBBbHRlck9wZXJhdG9yKEFsdGVyT3BlcmF0b3JT dG10ICpzdG10KTsKIAorLyogY29tbWFuZHMvc3RhdHNjbWRzLmMgKi8KK2V4 dGVybiBPYmplY3RBZGRyZXNzIENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3Rh dHNTdG10ICpzdG10KTsKK2V4dGVybiB2b2lkIFJlbW92ZVN0YXRpc3RpY3NC eUlkKE9pZCBzdGF0c09pZCk7CisKIC8qIGNvbW1hbmRzL2FnZ3JlZ2F0ZWNt ZHMuYyAqLwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQWdncmVnYXRl KExpc3QgKm5hbWUsIExpc3QgKmFyZ3MsIGJvb2wgb2xkc3R5bGUsCiAJCQkJ TGlzdCAqcGFyYW1ldGVycywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL25vZGVzLmgKaW5kZXggYzQwN2ZhMi4uMjIyNmFhZCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oCkBAIC0yNTEsNiArMjUxLDcgQEAg dHlwZWRlZiBlbnVtIE5vZGVUYWcKIAlUX1BsYWNlSG9sZGVySW5mbywKIAlU X01pbk1heEFnZ0luZm8sCiAJVF9QbGFubmVyUGFyYW1JdGVtLAorCVRfTVZT dGF0aXN0aWNJbmZvLAogCiAJLyoKIAkgKiBUQUdTIEZPUiBNRU1PUlkgTk9E RVMgKG1lbW5vZGVzLmgpCkBAIC0zODYsNiArMzg3LDcgQEAgdHlwZWRlZiBl bnVtIE5vZGVUYWcKIAlUX0NyZWF0ZVBvbGljeVN0bXQsCiAJVF9BbHRlclBv bGljeVN0bXQsCiAJVF9DcmVhdGVUcmFuc2Zvcm1TdG10LAorCVRfQ3JlYXRl U3RhdHNTdG10LAogCiAJLyoKIAkgKiBUQUdTIEZPUiBQQVJTRSBUUkVFIE5P REVTIChwYXJzZW5vZGVzLmgpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmgKaW5kZXggMmZkMDYyOS4uZTE4MDdmYiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaApAQCAtNjAxLDYgKzYwMSwxNyBAQCB0eXBl ZGVmIHN0cnVjdCBDb2x1bW5EZWYKIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHBh cnNlIGxvY2F0aW9uLCBvciAtMSBpZiBub25lL3Vua25vd24gKi8KIH0gQ29s dW1uRGVmOwogCit0eXBlZGVmIHN0cnVjdCBDcmVhdGVTdGF0c1N0bXQKK3sK KwlOb2RlVGFnCQl0eXBlOworCUxpc3QJICAgKmRlZm5hbWVzOwkJLyogcXVh bGlmaWVkIG5hbWUgKGxpc3Qgb2YgVmFsdWUgc3RyaW5ncykgKi8KKwlSYW5n ZVZhciAgICpyZWxhdGlvbjsJCS8qIHJlbGF0aW9uIHRvIGJ1aWxkIHN0YXRp c3RpY3Mgb24gKi8KKwlMaXN0CSAgICprZXlzOwkJCS8qIFN0cmluZyBub2Rl cyBuYW1pbmcgcmVmZXJlbmNlZCBjb2x1bW4ocykgKi8KKwlMaXN0CSAgICpv cHRpb25zOwkJLyogbGlzdCBvZiBEZWZFbGVtIG5vZGVzICovCisJYm9vbAkJ aWZfbm90X2V4aXN0czsJLyoganVzdCBkbyBub3RoaW5nIGlmIHN0YXRpc3Rp Y3MgYWxyZWFkeSBleGlzdHM/ICovCit9IENyZWF0ZVN0YXRzU3RtdDsKKwor CiAvKgogICogVGFibGVMaWtlQ2xhdXNlIC0gQ1JFQVRFIFRBQkxFICggLi4u IExJS0UgLi4uICkgY2xhdXNlCiAgKi8KQEAgLTE0MTAsNiArMTQyMSw3IEBA IHR5cGVkZWYgZW51bSBPYmplY3RUeXBlCiAJT0JKRUNUX1JVTEUsCiAJT0JK RUNUX1NDSEVNQSwKIAlPQkpFQ1RfU0VRVUVOQ0UsCisJT0JKRUNUX1NUQVRJ U1RJQ1MsCiAJT0JKRUNUX1RBQkNPTlNUUkFJTlQsCiAJT0JKRUNUX1RBQkxF LAogCU9CSkVDVF9UQUJMRVNQQUNFLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbm9kZXMvcmVsYXRpb24uaCBiL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0 aW9uLmgKaW5kZXggYWY4Y2I2Yi4uZGU4NmQwMSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9yZWxhdGlvbi5oCkBAIC01MDMsNiArNTAzLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgUmVsT3B0SW5mbwogCUxpc3QJICAgKmxhdGVyYWxfdmFyczsJLyog TEFURVJBTCBWYXJzIGFuZCBQSFZzIHJlZmVyZW5jZWQgYnkgcmVsICovCiAJ UmVsaWRzCQlsYXRlcmFsX3JlZmVyZW5jZXJzOwkvKiByZWxzIHRoYXQgcmVm ZXJlbmNlIG1lIGxhdGVyYWxseSAqLwogCUxpc3QJICAgKmluZGV4bGlzdDsJ CS8qIGxpc3Qgb2YgSW5kZXhPcHRJbmZvICovCisJTGlzdAkgICAqbXZzdGF0 bGlzdDsJCS8qIGxpc3Qgb2YgTVZTdGF0aXN0aWNJbmZvICovCiAJQmxvY2tO dW1iZXIgcGFnZXM7CQkJLyogc2l6ZSBlc3RpbWF0ZXMgZGVyaXZlZCBmcm9t IHBnX2NsYXNzICovCiAJZG91YmxlCQl0dXBsZXM7CiAJZG91YmxlCQlhbGx2 aXNmcmFjOwpAQCAtNjAwLDYgKzYwMSwzMyBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleE9wdEluZm8KIAl2b2lkCQkoKmFtY29zdGVzdGltYXRlKSAoKTsJLyog QU0ncyBjb3N0IGVzdGltYXRvciAqLwogfSBJbmRleE9wdEluZm87CiAKKy8q CisgKiBNVlN0YXRpc3RpY0luZm8KKyAqCQlJbmZvcm1hdGlvbiBhYm91dCBt dWx0aXZhcmlhdGUgc3RhdHMgZm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgor ICoKKyAqIFRoaXMgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2gg Y29sdW1ucyBhcmUgY292ZXJlZCBieSB0aGUKKyAqIHN0YXRpc3RpY3MgKHN0 YWtleXMpLCB3aGljaCBvcHRpb25zIHdlcmUgcmVxdWVzdGVkIHdoaWxlIGFk ZGluZyB0aGUKKyAqIHN0YXRpc3RpY3MgKCpfZW5hYmxlZCksIGFuZCB3aGlj aCBraW5kcyBvZiBzdGF0aXN0aWNzIHdlcmUgYWN0dWFsbHkKKyAqIGJ1aWx0 IGFuZCBhcmUgYXZhaWxhYmxlIGZvciB0aGUgb3B0aW1pemVyICgqX2J1aWx0 KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgTVZTdGF0aXN0aWNJbmZvCit7CisJ Tm9kZVRhZwkJdHlwZTsKKworCU9pZAkJCW12b2lkOwkJCS8qIE9JRCBvZiB0 aGUgc3RhdGlzdGljcyByb3cgKi8KKwlSZWxPcHRJbmZvICpyZWw7CQkJLyog YmFjay1saW5rIHRvIGluZGV4J3MgdGFibGUgKi8KKworCS8qIGVuYWJsZWQg c3RhdGlzdGljcyAqLworCWJvb2wJCWRlcHNfZW5hYmxlZDsJLyogZnVuY3Rp b25hbCBkZXBlbmRlbmNpZXMgZW5hYmxlZCAqLworCisJLyogYnVpbHQvYXZh aWxhYmxlIHN0YXRpc3RpY3MgKi8KKwlib29sCQlkZXBzX2J1aWx0OwkJLyog ZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgYnVpbHQgKi8KKworCS8qIGNvbHVt bnMgaW4gdGhlIHN0YXRpc3RpY3MgKGF0dG51bXMpICovCisJaW50MnZlY3Rv ciAqc3Rha2V5czsJCS8qIGF0dG51bXMgb2YgdGhlIGNvbHVtbnMgY292ZXJl ZCAqLworCit9IE1WU3RhdGlzdGljSW5mbzsKKwogCiAvKgogICogRXF1aXZh bGVuY2VDbGFzc2VzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9t dnN0YXRzLmggYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ViZDk2MQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaApAQCAt MCwwICsxLDcwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBtdnN0YXRzLmgKKyAqCSAgTXVsdGl2YXJpYXRlIHN0YXRpc3Rp Y3MgYW5kIHNlbGVjdGl2aXR5IGVzdGltYXRpb24gZnVuY3Rpb25zLgorICoK KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0 eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdXRpbHMvbXZz dGF0cy5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpZm5kZWYgTVZTVEFUU19ICisjZGVmaW5lIE1WU1RBVFNfSAorCisj aW5jbHVkZSAiZm1nci5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3ZhY3V1bS5o IgorCisKKyNkZWZpbmUgTVZTVEFUU19NQVhfRElNRU5TSU9OUwk4CQkvKiBt YXggbnVtYmVyIG9mIGF0dHJpYnV0ZXMgKi8KKworLyogQW4gYXNzb2NpYXRp dmUgcnVsZSwgdHJhY2tpbmcgW2EgPT4gYl0gZGVwZW5kZW5jeS4KKyAqCisg KiBUT0RPIE1ha2UgdGhpcyB3b3JrIHdpdGggbXVsdGlwbGUgY29sdW1ucyBv biBib3RoIHNpZGVzLgorICovCit0eXBlZGVmIHN0cnVjdCBNVkRlcGVuZGVu Y3lEYXRhIHsKKwlpbnQxNglhOworCWludDE2CWI7Cit9IE1WRGVwZW5kZW5j eURhdGE7CisKK3R5cGVkZWYgTVZEZXBlbmRlbmN5RGF0YSogTVZEZXBlbmRl bmN5OworCit0eXBlZGVmIHN0cnVjdCBNVkRlcGVuZGVuY2llc0RhdGEgewor CXVpbnQzMgkJCW1hZ2ljOwkJLyogbWFnaWMgY29uc3RhbnQgbWFya2VyICov CisJaW50MzIJCQluZGVwczsJCS8qIG51bWJlciBvZiBkZXBlbmRlbmNpZXMg Ki8KKwlNVkRlcGVuZGVuY3kJZGVwc1sxXTsJLyogWFhYIHdoeSBub3QgYSBw b2ludGVyPyAqLworfSBNVkRlcGVuZGVuY2llc0RhdGE7CisKK3R5cGVkZWYg TVZEZXBlbmRlbmNpZXNEYXRhKiBNVkRlcGVuZGVuY2llczsKKworI2RlZmlu ZSBNVlNUQVRfREVQU19NQUdJQwkJMHhCNDU0OUEyQwkvKiBtYXJrcyBzZXJp YWxpemVkIGJ5dGVhICovCisjZGVmaW5lIE1WU1RBVF9ERVBTX1RZUEVfQkFT SUMJMQkJCS8qIGJhc2ljIGRlcGVuZGVuY2llcyB0eXBlICovCisKKy8qCisg KiBUT0RPIE1heWJlIGZldGNoaW5nIHRoZSBoaXN0b2dyYW0vTUNWIGxpc3Qg c2VwYXJhdGVseSBpcyBpbmVmZmljaWVudD8KKyAqICAgICAgQ29uc2lkZXIg YWRkaW5nIGEgc2luZ2xlIGBmZXRjaF9zdGF0c2AgbWV0aG9kLCBmZXRjaGlu ZyBhbGwKKyAqICAgICAgc3RhdHMgc3BlY2lmaWVkIHVzaW5nIGZsYWdzIChv ciBzb21ldGhpbmcgbGlrZSB0aGF0KS4KKyAqLworCitieXRlYSAqIHNlcmlh bGl6ZV9tdl9kZXBlbmRlbmNpZXMoTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5j aWVzKTsKKworLyogZGVzZXJpYWxpemF0aW9uIG9mIHN0YXRzIChzZXJpYWxp emF0aW9uIGlzIHByaXZhdGUgdG8gYW5hbHl6ZSkgKi8KK01WRGVwZW5kZW5j aWVzCWRlc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhieXRlYSAqIGRhdGEp OworCisvKiBGSVhNRSB0aGlzIHByb2JhYmx5IGJlbG9uZ3Mgc29tZXdoZXJl IGVsc2UgKG5vdCB0byBvcGVyYXRpb25zIHN0YXRzKSAqLworZXh0ZXJuIERh dHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFBHX0ZVTkNUSU9O X0FSR1MpOworZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2ll c19zaG93KFBHX0ZVTkNUSU9OX0FSR1MpOworCitNVkRlcGVuZGVuY2llcwor YnVpbGRfbXZfZGVwZW5kZW5jaWVzKGludCBudW1yb3dzLCBIZWFwVHVwbGUg KnJvd3MsCisJCQkJCQkJCSAgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkJ CSAgVmFjQXR0clN0YXRzICoqc3RhdHMpOworCit2b2lkIGJ1aWxkX212X3N0 YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywKKwkJCQkJCSAgIGludCBuYXR0cywgVmFjQXR0clN0YXRzICoqdmFj YXR0cnN0YXRzKTsKKwordm9pZCB1cGRhdGVfbXZfc3RhdHMoT2lkIHJlbGlk LCBNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsIGludDJ2ZWN0b3IgKmF0 dHJzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCmluZGV4IGYyYmVi ZjIuLjg3NzFmOWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3Jl bC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC02MSw2ICs2 MSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0YQogCWJvb2wJCXJk X2lzdmFsaWQ7CQkvKiByZWxjYWNoZSBlbnRyeSBpcyB2YWxpZCAqLwogCWNo YXIJCXJkX2luZGV4dmFsaWQ7CS8qIHN0YXRlIG9mIHJkX2luZGV4bGlzdDog MCA9IG5vdCB2YWxpZCwgMSA9CiAJCQkJCQkJCSAqIHZhbGlkLCAyID0gdGVt cG9yYXJpbHkgZm9yY2VkICovCisJYm9vbAkJcmRfbXZzdGF0dmFsaWQ7CS8q IHN0YXRlIG9mIHJkX212c3RhdGxpc3Q6IHRydWUvZmFsc2UgKi8KIAogCS8q CiAJICogcmRfY3JlYXRlU3ViaWQgaXMgdGhlIElEIG9mIHRoZSBoaWdoZXN0 IHN1YnRyYW5zYWN0aW9uIHRoZSByZWwgaGFzCkBAIC05Myw2ICs5NCw5IEBA IHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0YQogCUxpc3QJICAgKnJkX2lu ZGV4bGlzdDsJLyogbGlzdCBvZiBPSURzIG9mIGluZGV4ZXMgb24gcmVsYXRp b24gKi8KIAlPaWQJCQlyZF9vaWRpbmRleDsJLyogT0lEIG9mIHVuaXF1ZSBp bmRleCBvbiBPSUQsIGlmIGFueSAqLwogCU9pZAkJCXJkX3JlcGxpZGluZGV4 OyAvKiBPSUQgb2YgcmVwbGljYSBpZGVudGl0eSBpbmRleCwgaWYgYW55ICov CisgCisJLyogZGF0YSBtYW5hZ2VkIGJ5IFJlbGF0aW9uR2V0TVZTdGF0TGlz dDogKi8KKwlMaXN0CSAgICpyZF9tdnN0YXRsaXN0OwkvKiBsaXN0IG9mIE9J RHMgb2YgbXVsdGl2YXJpYXRlIHN0YXRzICovCiAKIAkvKiBkYXRhIG1hbmFn ZWQgYnkgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXA6ICovCiAJQml0bWFw c2V0ICAqcmRfaW5kZXhhdHRyOwkvKiBpZGVudGlmaWVzIGNvbHVtbnMgdXNl ZCBpbiBpbmRleGVzICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9yZWxjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsY2FjaGUuaApp bmRleCAxYjQ4MzA0Li45ZjAzYzhkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS91dGlscy9yZWxjYWNoZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Jl bGNhY2hlLmgKQEAgLTM4LDYgKzM4LDcgQEAgZXh0ZXJuIHZvaWQgUmVsYXRp b25DbG9zZShSZWxhdGlvbiByZWxhdGlvbik7CiAgKiBSb3V0aW5lcyB0byBj b21wdXRlL3JldHJpZXZlIGFkZGl0aW9uYWwgY2FjaGVkIGluZm9ybWF0aW9u CiAgKi8KIGV4dGVybiBMaXN0ICpSZWxhdGlvbkdldEluZGV4TGlzdChSZWxh dGlvbiByZWxhdGlvbik7CitleHRlcm4gTGlzdCAqUmVsYXRpb25HZXRNVlN0 YXRMaXN0KFJlbGF0aW9uIHJlbGF0aW9uKTsKIGV4dGVybiBPaWQJUmVsYXRp b25HZXRPaWRJbmRleChSZWxhdGlvbiByZWxhdGlvbik7CiBleHRlcm4gT2lk CVJlbGF0aW9uR2V0UmVwbGljYUluZGV4KFJlbGF0aW9uIHJlbGF0aW9uKTsK IGV4dGVybiBMaXN0ICpSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMoUmVs YXRpb24gcmVsYXRpb24pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvc3lzY2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3N5c2NhY2hlLmgK aW5kZXggMjU2NjE1Yi4uMGUwNjU4ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvc3lzY2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9z eXNjYWNoZS5oCkBAIC02Niw2ICs2Niw4IEBAIGVudW0gU3lzQ2FjaGVJZGVu dGlmaWVyCiAJSU5ERVhSRUxJRCwKIAlMQU5HTkFNRSwKIAlMQU5HT0lELAor CU1WU1RBVE5BTUVOU1AsCisJTVZTVEFUT0lELAogCU5BTUVTUEFDRU5BTUUs CiAJTkFNRVNQQUNFT0lELAogCU9QRVJOQU1FTlNQLApkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCA4MWJjNWM5Li44 NGI0NDI1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1 bGVzLm91dApAQCAtMTM2OCw2ICsxMzY4LDE1IEBAIHBnX21hdHZpZXdzfCBT RUxFQ1Qgbi5uc3BuYW1lIEFTIHNjaGVtYW5hbWUsCiAgICAgIExFRlQgSk9J TiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4ub2lkID0gYy5yZWxuYW1lc3BhY2Up KSkKICAgICAgTEVGVCBKT0lOIHBnX3RhYmxlc3BhY2UgdCBPTiAoKHQub2lk ID0gYy5yZWx0YWJsZXNwYWNlKSkpCiAgIFdIRVJFIChjLnJlbGtpbmQgPSAn bSc6OiJjaGFyIik7CitwZ19tdl9zdGF0c3wgU0VMRUNUIG4ubnNwbmFtZSBB UyBzY2hlbWFuYW1lLAorICAgIGMucmVsbmFtZSBBUyB0YWJsZW5hbWUsCisg ICAgcy5zdGFuYW1lLAorICAgIHMuc3Rha2V5cyBBUyBhdHRudW1zLAorICAg IGxlbmd0aChzLnN0YWRlcHMpIEFTIGRlcHNieXRlcywKKyAgICBwZ19tdl9z dGF0c19kZXBlbmRlbmNpZXNfaW5mbyhzLnN0YWRlcHMpIEFTIGRlcHNpbmZv CisgICBGUk9NICgocGdfbXZfc3RhdGlzdGljIHMKKyAgICAgSk9JTiBwZ19j bGFzcyBjIE9OICgoYy5vaWQgPSBzLnN0YXJlbGlkKSkpCisgICAgIExFRlQg Sk9JTiBwZ19uYW1lc3BhY2UgbiBPTiAoKG4ub2lkID0gYy5yZWxuYW1lc3Bh Y2UpKSk7CiBwZ19wb2xpY2llc3wgU0VMRUNUIG4ubnNwbmFtZSBBUyBzY2hl bWFuYW1lLAogICAgIGMucmVsbmFtZSBBUyB0YWJsZW5hbWUsCiAgICAgcG9s LnBvbG5hbWUgQVMgcG9saWN5bmFtZSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc2FuaXR5X2NoZWNrLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc2FuaXR5X2NoZWNrLm91dAppbmRleCBlYjBi Yzg4Li45MmEwZDhhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zYW5pdHlfY2hlY2sub3V0CkBAIC0xMTMsNiArMTEzLDcg QEAgcGdfaW5oZXJpdHN8dAogcGdfbGFuZ3VhZ2V8dAogcGdfbGFyZ2VvYmpl Y3R8dAogcGdfbGFyZ2VvYmplY3RfbWV0YWRhdGF8dAorcGdfbXZfc3RhdGlz dGljfHQKIHBnX25hbWVzcGFjZXx0CiBwZ19vcGNsYXNzfHQKIHBnX29wZXJh dG9yfHQKLS0gCjIuMS4wCgo= --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename="0003-clause-reduction-using-functional-dependencies.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0003-clause-reduction-using-functional-dependencies.patch"; charset="UTF-8" RnJvbSAyODI1NzllZWYzZGUwMWUwZDMxZWQ1ZjcwNjcwNDVhNGY5N2ZiZmI4 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE5 OjQyOjE4ICswMjAwClN1YmplY3Q6IFtQQVRDSCAzLzldIGNsYXVzZSByZWR1 Y3Rpb24gdXNpbmcgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKCkR1cmluZyBw bGFubmluZywgdXNlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIHRvIGRlY2lk ZSB3aGljaCBjbGF1c2VzIHRvCnNraXAgZHVyaW5nIGNhcmRpbmFsaXR5IGVz dGltYXRpb24uIEluaXRpYWwgYW5kIHJhdGhlciBzaW1wbGlzdGljCmltcGxl bWVudGF0aW9uLgoKVGhpcyBvbmx5IHdvcmtzIHdpdGggcmVndWxhciBXSEVS RSBjbGF1c2VzLCBub3QgY2xhdXNlcyB1c2VkIGZvciBqb2luCmNsYXVzZXMu CgpOb3RlOiBUaGUgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoKSBuZWVkcyB0 byBpZGVudGlmeSB0aGUgcmVsYXRpb24gKHNvCnRoYXQgd2UgY2FuIGZldGNo IHRoZSBsaXN0IG9mIG11bHRpdmFyaWF0ZSBzdGF0cyBieSBPSUQpLgpwbGFu bmVyX3J0X2ZldGNoKCkgc2VlbXMgbGlrZSB0aGUgYXBwcm9wcmlhdGUgd2F5 IHRvIGdldCB0aGUgcmVsYXRpb24KT0lELCBidXQgYXBwYXJlbnRseSBpdCBv bmx5IHdvcmtzIHdpdGggc2ltcGxlIHZhcnMuIE1heWJlCmV4YW1pbmVfdmFy aWFibGUoKSB3b3VsZCBtYWtlIHRoaXMgd29yayB3aXRoIG1vcmUgY29tcGxl eCB2YXJzIHRvbz8KCkluY2x1ZGVzIHJlZ3Jlc3Npb24gdGVzdHMgYW5hbHl6 aW5nIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIChwYXJ0IG9mCkFOQUxZWkUp IG9uIHNldmVyYWwgZGF0YXNldHMgKG5vIGRlcGVuZGVuY2llcywgbm8gdHJh bnNpdGl2ZQpkZXBlbmRlbmNpZXMsIC4uLikuCgpDaGVja3MgdGhhdCBhIHF1 ZXJ5IHdpdGggY29uZGl0aW9ucyBvbiB0d28gY29sdW1ucywgd2hlcmUgb25l IChCKSBpcwpmdW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uIHRoZSBvdGhlciBv bmUgKEEpLCBjb3JyZWN0bHkgaWdub3JlcyB0aGUKY2xhdXNlIG9uIChCKSBh bmQgY2hvb3NlcyBiaXRtYXAgaW5kZXggc2NhbiBpbnN0ZWFkIG9mIHBsYWlu IGluZGV4IHNjYW4KKHdoaWNoIGlzIHdoYXQgaGFwcGVucyBvdGhlcndpc2Us IHRoYW5rcyB0byBhc3N1bXB0aW9uIG9mCmluZGVwZW5kZW5jZSkuCgpOb3Rl OiBGdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBvbmx5IHdvcmsgd2l0aCBlcXVh bGl0eSBjbGF1c2VzLCBubwppbmVxdWFsaXRpZXMgZXRjLgotLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jICAgICAgICB8IDg5 MSArKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRp bHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgICAgICAgIHwgIDM2ICsrCiBzcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jICAgICAgICAgICAgfCAg IDUgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvZGVwZW5kZW5jaWVz LmMgICAgICB8ICAyNCArCiBzcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgg ICAgICAgICAgICAgICAgICAgfCAgMTYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvbXZfZGVwZW5kZW5jaWVzLm91dCB8IDE3MiArKysrKwogc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgICAgIHwg ICAzICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9kZXBl bmRlbmNpZXMuc3FsICAgICAgfCAxNTAgKysrKysKIDkgZmlsZXMgY2hhbmdl ZCwgMTI5MyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1F LnN0YXRzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9tdl9kZXBlbmRlbmNpZXMub3V0CiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfZGVwZW5kZW5jaWVzLnNxbAoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVz ZXNlbC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2Vs LmMKaW5kZXggMDI2NjBjMi4uODA3MDhmZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKQEAgLTE0LDE0ICsx NCwxOSBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1 ZGUgImFjY2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19v cGVyYXRvci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1ZGUgIm9w dGltaXplci92YXIuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxz L212c3RhdHMuaCIKICNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgorI2lu Y2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAKIAogLyoKQEAgLTQxLDYgKzQ2 LDIzIEBAIHR5cGVkZWYgc3RydWN0IFJhbmdlUXVlcnlDbGF1c2UKIHN0YXRp YyB2b2lkIGFkZFJhbmdlQ2xhdXNlKFJhbmdlUXVlcnlDbGF1c2UgKipycWxp c3QsIE5vZGUgKmNsYXVzZSwKIAkJCSAgIGJvb2wgdmFyb25sZWZ0LCBib29s IGlzTFRzZWwsIFNlbGVjdGl2aXR5IHMyKTsKIAorI2RlZmluZQkJTVZfQ0xB VVNFX1RZUEVfRkRFUAkJMHgwMQorCitzdGF0aWMgYm9vbCBjbGF1c2VfaXNf bXZfY29tcGF0aWJsZShOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBBdHRy TnVtYmVyICphdHRudW0pOworCitzdGF0aWMgQml0bWFwc2V0ICAqY29sbGVj dF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKTsKKwor c3RhdGljIGludCBjb3VudF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIElu ZGV4IHJlbGlkKTsKKworc3RhdGljIGludCBjb3VudF92YXJub3MoTGlzdCAq Y2xhdXNlcywgSW5kZXggKnJlbGlkKTsKKworc3RhdGljIExpc3QgKmNsYXVz ZWxpc3RfYXBwbHlfZGVwZW5kZW5jaWVzKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpjbGF1c2VzLAorCQkJCQkJCQkJSW5kZXggcmVsaWQsIExpc3QgKnN0 YXRzKTsKKworc3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3QgKnN0YXRzLCBp bnQgdHlwZSk7CisKK3N0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpOworCiAKIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCiAgKgkJUk9VVElORVMgVE8gQ09NUFVURSBT RUxFQ1RJVklUSUVTCkBAIC02MCw3ICs4MiwxOSBAQCBzdGF0aWMgdm9pZCBh ZGRSYW5nZUNsYXVzZShSYW5nZVF1ZXJ5Q2xhdXNlICoqcnFsaXN0LCBOb2Rl ICpjbGF1c2UsCiAgKiBzdWJjbGF1c2VzLiAgSG93ZXZlciwgdGhhdCdzIG9u bHkgcmlnaHQgaWYgdGhlIHN1YmNsYXVzZXMgaGF2ZSBpbmRlcGVuZGVudAog ICogcHJvYmFiaWxpdGllcywgYW5kIGluIHJlYWxpdHkgdGhleSBhcmUgb2Z0 ZW4gTk9UIGluZGVwZW5kZW50LiAgU28sCiAgKiB3ZSB3YW50IHRvIGJlIHNt YXJ0ZXIgd2hlcmUgd2UgY2FuLgotCisgKgorICogVGhlIGZpcnN0IHRoaW5n IHdlIHRyeSB0byBkbyBpcyBhcHBseWluZyBtdWx0aXZhcmlhdGUgc3RhdGlz dGljcywgaW4gYSB3YXkKKyAqIHRoYXQgaW50ZW5kcyB0byBtaW5pbWl6ZSB0 aGUgb3ZlcmhlYWQgd2hlbiB0aGVyZSBhcmUgbm8gbXVsdGl2YXJpYXRlIHN0 YXRzCisgKiBvbiB0aGUgcmVsYXRpb24uIFRodXMgd2UgZG8gc2V2ZXJhbCBz aW1wbGUgKGFuZCBpbmV4cGVuc2l2ZSkgY2hlY2tzIGZpcnN0LAorICogdG8g dmVyaWZ5IHRoYXQgc3VpdGFibGUgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3Mg ZXhpc3QuCisgKgorICogSWYgd2UgaWRlbnRpZnkgc3VjaCBtdWx0aXZhcmlh dGUgc3RhdGlzdGljcyBhcHBseSwgd2UgdHJ5IHRvIGFwcGx5IHRoZW0uCisg KiBDdXJyZW50bHkgd2Ugb25seSBoYXZlIChzb2Z0KSBmdW5jdGlvbmFsIGRl cGVuZGVuY2llcywgc28gd2UgdHJ5IHRvIHJlZHVjZQorICogdGhlIGxpc3Qg b2YgY2xhdXNlcy4KKyAqCisgKiBUaGVuIHdlIHJlbW92ZSB0aGUgY2xhdXNl cyBlc3RpbWF0ZWQgdXNpbmcgbXVsdGl2YXJpYXRlIHN0YXRzLCBhbmQgcHJv Y2VzcworICogdGhlIHJlc3Qgb2YgdGhlIGNsYXVzZXMgdXNpbmcgdGhlIHJl Z3VsYXIgcGVyLWNvbHVtbiBzdGF0cy4KKyAqCiAgKiBDdXJyZW50bHksIHRo ZSBvbmx5IGV4dHJhIHNtYXJ0cyB3ZSBoYXZlIGlzIHRvIHJlY29nbml6ZSAi cmFuZ2UgcXVlcmllcyIsCiAgKiBzdWNoIGFzICJ4ID4gMzQgQU5EIHggPCA0 MiIuICBDbGF1c2VzIGFyZSByZWNvZ25pemVkIGFzIHBvc3NpYmxlIHJhbmdl CiAgKiBxdWVyeSBjb21wb25lbnRzIGlmIHRoZXkgYXJlIHJlc3RyaWN0aW9u IG9wY2xhdXNlcyB3aG9zZSBvcGVyYXRvcnMgaGF2ZQpAQCAtOTksNiArMTMz LDIyIEBAIGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJv b3QsCiAJUmFuZ2VRdWVyeUNsYXVzZSAqcnFsaXN0ID0gTlVMTDsKIAlMaXN0 Q2VsbCAgICpsOwogCisJLyogcHJvY2Vzc2luZyBtdiBzdGF0cyAqLworCU9p ZAkJCXJlbGlkID0gSW52YWxpZE9pZDsKKworCS8qIGxpc3Qgb2YgbXVsdGl2 YXJpYXRlIHN0YXRzIG9uIHRoZSByZWxhdGlvbiAqLworCUxpc3QJICAgKnN0 YXRzID0gTklMOworCisJLyoKKwkgKiBUbyBmZXRjaCB0aGUgc3RhdGlzdGlj cywgd2UgZmlyc3QgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJlbC4gQ3VycmVu dGx5CisJICogcG9pbnQgd2Ugb25seSBzdXBwb3J0IGVzdGltYXRlcyBvZiBz aW1wbGUgcmVzdHJpY3Rpb25zIHdpdGggYWxsIFZhcnMKKwkgKiByZWZlcmVu Y2luZyBhIHNpbmdsZSBiYXNlcmVsLiBIb3dldmVyIHNldF9iYXNlcmVsX3Np emVfZXN0aW1hdGVzKCkgc2V0cworCSAqIHZhclJlbGlkPTAgc28gd2UgaGF2 ZSB0byBhY3R1YWxseSBpbnNwZWN0IHRoZSBjbGF1c2VzIGJ5IHB1bGxfdmFy bm9zCisJICogYW5kIHNlZSBpZiB0aGVyZSdzIGp1c3QgYSBzaW5nbGUgdmFy bm8gcmVmZXJlbmNlZC4KKwkgKi8KKwlpZiAoKGNvdW50X3Zhcm5vcyhjbGF1 c2VzLCAmcmVsaWQpID09IDEpICYmICgodmFyUmVsaWQgPT0gMCkgfHwgKHZh clJlbGlkID09IHJlbGlkKSkpCisJCXN0YXRzID0gZmluZF9zdGF0cyhyb290 LCByZWxpZCk7CisKIAkvKgogCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBvbmUg Y2xhdXNlLCB0aGVuIG5vIHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAgcGFp cnMsCiAJICogc28ganVzdCBnbyBkaXJlY3RseSB0byBjbGF1c2Vfc2VsZWN0 aXZpdHkoKS4KQEAgLTEwOCw2ICsxNTgsMjQgQEAgY2xhdXNlbGlzdF9zZWxl Y3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJICB2YXJSZWxp ZCwgam9pbnR5cGUsIHNqaW5mbyk7CiAKIAkvKgorCSAqIEFwcGx5IGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzLCBidXQgZmlyc3QgY2hlY2sgdGhhdCB0aGVy ZSBhcmUgc29tZSBzdGF0cworCSAqIHdpdGggZnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMgYnVpbHQgKGJ5IHNpbXBseSB3YWxraW5nIHRoZSBzdGF0cyBsaXN0 KSwKKwkgKiBhbmQgdGhhdCB0aGVyZSBhcmUgYXQgdHdvIG9yIG1vcmUgYXR0 cmlidXRlcyByZWZlcmVuY2VkIGJ5IGNsYXVzZXMgdGhhdAorCSAqIG1heSBi ZSByZWR1Y2VkIHVzaW5nIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLgorCSAq CisJICogV2Ugd291bGQgZmluZCB0aGF0IGFueXdheSB3aGVuIHRyeWluZyB0 byBhY3R1YWxseSBhcHBseSB0aGUgZnVuY3Rpb25hbAorCSAqIGRlcGVuZGVu Y2llcywgYnV0IGxldCdzIGRvIHRoZSBjaGVhcCBjaGVja3MgZmlyc3QuCisJ ICoKKwkgKiBBZnRlciBhcHBseWluZyB0aGUgZnVuY3Rpb25hbCBkZXBlbmRl bmNpZXMgd2UgZ2V0IHRoZSByZW1haW5pZyBjbGF1c2VzCisJICogdGhhdCBu ZWVkIHRvIGJlIGVzdGltYXRlZCBieSBvdGhlciB0eXBlcyBvZiBzdGF0cyAo TUNWLCBoaXN0b2dyYW1zIGV0YykuCisJICovCisJaWYgKGhhc19zdGF0cyhz dGF0cywgTVZfQ0xBVVNFX1RZUEVfRkRFUCkgJiYKKwkJKGNvdW50X212X2F0 dG51bXMoY2xhdXNlcywgcmVsaWQpID49IDIpKQorCXsKKwkJY2xhdXNlcyA9 IGNsYXVzZWxpc3RfYXBwbHlfZGVwZW5kZW5jaWVzKHJvb3QsIGNsYXVzZXMs IHJlbGlkLCBzdGF0cyk7CisJfQorCisJLyoKIAkgKiBJbml0aWFsIHNjYW4g b3ZlciBjbGF1c2VzLiAgQW55dGhpbmcgdGhhdCBkb2Vzbid0IGxvb2sgbGlr ZSBhIHBvdGVudGlhbAogCSAqIHJhbmdlcXVlcnkgY2xhdXNlIGdldHMgbXVs dGlwbGllZCBpbnRvIHMxIGFuZCBmb3Jnb3R0ZW4uIEFueXRoaW5nIHRoYXQK IAkgKiBkb2VzIGdldHMgaW5zZXJ0ZWQgaW50byBhbiBycWxpc3QgZW50cnku CkBAIC03NjMsMyArODMxLDgyNCBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxh bm5lckluZm8gKnJvb3QsCiAKIAlyZXR1cm4gczE7CiB9CisKKy8qCisgKiBQ dWxsIHZhcmF0dG5vcyBmcm9tIHRoZSBjbGF1c2VzLCBzaW1pbGFybHkgdG8g cHVsbF92YXJhdHRub3MoKSBidXQ6CisgKgorICogKGEpIG9ubHkgZ2V0IGF0 dHJpYnV0ZXMgZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiAocmVsaWQpCisg KiAoYikgaWdub3JlIHN5c3RlbSBhdHRyaWJ1dGVzICh3ZSBjYW4ndCBidWls ZCBzdGF0cyBvbiB0aGVtIGFueXdheSkKKyAqCisgKiBUaGlzIG1ha2VzIGl0 IHBvc3NpYmxlIHRvIGRpcmVjdGx5IGNvbXBhcmUgdGhlIHJlc3VsdCB3aXRo IGF0dG51bQorICogdmFsdWVzIGZyb20gcGdfYXR0cmlidXRlIGV0Yy4KKyAq Lworc3RhdGljIEJpdG1hcHNldCAqCitnZXRfdmFyYXR0bm9zKE5vZGUgKiBu b2RlLCBJbmRleCByZWxpZCkKK3sKKwlpbnQJCQlrOworCUJpdG1hcHNldCAg KnZhcmF0dG5vcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVM TDsKKworCS8qIGdldCB0aGUgdmFyYXR0bm9zICovCisJcHVsbF92YXJhdHRu b3Mobm9kZSwgcmVsaWQsICZ2YXJhdHRub3MpOworCisJayA9IC0xOworCXdo aWxlICgoayA9IGJtc19uZXh0X21lbWJlcih2YXJhdHRub3MsIGspKSA+PSAw KQorCXsKKwkJaWYgKGsgKyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRl TnVtYmVyID4gMCkKKwkJCXJlc3VsdAorCQkJCT0gYm1zX2FkZF9tZW1iZXIo cmVzdWx0LAorCQkJCQkJCQkgayArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRy aWJ1dGVOdW1iZXIpOworCX0KKworCWJtc19mcmVlKHZhcmF0dG5vcyk7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ29sbGVjdCBhdHRyaWJ1 dGVzIGZyb20gbXYtY29tcGF0aWJsZSBjbGF1c2VzLgorICovCitzdGF0aWMg Qml0bWFwc2V0ICoKK2NvbGxlY3RfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2Vz LCBJbmRleCByZWxpZCkKK3sKKwlCaXRtYXBzZXQgICphdHRudW1zID0gTlVM TDsKKwlMaXN0Q2VsbCAgICpsOworCisJLyoKKwkgKiBXYWxrIHRocm91Z2gg dGhlIGNsYXVzZXMgYW5kIGlkZW50aWZ5IHRoZSBvbmVzIHdlIGNhbiBlc3Rp bWF0ZQorCSAqIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywgYW5kIHJlbWVt YmVyIHRoZSByZWxpZC9jb2x1bW5zLiBXZSdsbAorCSAqIHRoZW4gY3Jvc3Mt Y2hlY2sgaWYgd2UgaGF2ZSBzdWl0YWJsZSBzdGF0cywgYW5kIG9ubHkgaWYg bmVlZGVkCisJICogd2UnbGwgc3BsaXQgdGhlIGNsYXVzZXMgaW50byBtdWx0 aXZhcmlhdGUgYW5kIHJlZ3VsYXIgbGlzdHMuCisJICoKKwkgKiBGb3Igbm93 IHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBSZXN0cmljdEluZm8gbm9kZXMg d2l0aCBuZXN0ZWQKKwkgKiBPcEV4cHIsIHVzaW5nIGVpdGhlciBhIHJhbmdl IG9yIGVxdWFsaXR5LgorCSAqLworCWZvcmVhY2ggKGwsIGNsYXVzZXMpCisJ eworCQlBdHRyTnVtYmVyIGF0dG51bTsKKwkJTm9kZQkgICAqY2xhdXNlID0g KE5vZGUgKikgbGZpcnN0KGwpOworCisJCS8qIGlnbm9yZSB0aGUgcmVzdWx0 IGZvciBub3cgLSB3ZSBvbmx5IG5lZWQgdGhlIGluZm8gKi8KKwkJaWYgKGNs YXVzZV9pc19tdl9jb21wYXRpYmxlKGNsYXVzZSwgcmVsaWQsICZhdHRudW0p KQorCQkJYXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKGF0dG51bXMsIGF0dG51 bSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm90IGF0IGxlYXN0 IHR3byBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQgYnkgdGhlIGNsYXVzZShzKSwK KwkgKiB3ZSBjYW4gdGhyb3cgZXZlcnl0aGluZyBvdXQgKGFzIHdlJ2xsIHJl dmVydCB0byBzaW1wbGUgc3RhdHMpLgorCSAqLworCWlmIChibXNfbnVtX21l bWJlcnMoYXR0bnVtcykgPD0gMSkKKwl7CisJCWlmIChhdHRudW1zICE9IE5V TEwpCisJCQlwZnJlZShhdHRudW1zKTsKKwkJYXR0bnVtcyA9IE5VTEw7CisJ fQorCisJcmV0dXJuIGF0dG51bXM7Cit9CisKKy8qCisgKiBDb3VudCB0aGUg bnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gY2xhdXNlcyBjb21wYXRpYmxlIHdp dGggbXVsdGl2YXJpYXRlIHN0YXRzLgorICovCitzdGF0aWMgaW50Citjb3Vu dF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKQorewor CWludCBjOworCUJpdG1hcHNldCAqYXR0bnVtcyA9IGNvbGxlY3RfbXZfYXR0 bnVtcyhjbGF1c2VzLCByZWxpZCk7CisKKwljID0gYm1zX251bV9tZW1iZXJz KGF0dG51bXMpOworCisJYm1zX2ZyZWUoYXR0bnVtcyk7CisKKwlyZXR1cm4g YzsKK30KKworLyoKKyAqIENvdW50IHZhcm5vcyByZWZlcmVuY2VkIGluIHRo ZSBjbGF1c2VzLCBhbmQgaWYgdGhlcmUncyBhIHNpbmdsZSB2YXJubyB0aGVu CisgKiByZXR1cm4gdGhlIGluZGV4IGluICdyZWxpZCcuCisgKi8KK3N0YXRp YyBpbnQKK2NvdW50X3Zhcm5vcyhMaXN0ICpjbGF1c2VzLCBJbmRleCAqcmVs aWQpCit7CisJaW50IGNudDsKKwlCaXRtYXBzZXQgKnZhcm5vcyA9IE5VTEw7 CisKKwl2YXJub3MgPSBwdWxsX3Zhcm5vcygoTm9kZSAqKSBjbGF1c2VzKTsK KwljbnQgPSBibXNfbnVtX21lbWJlcnModmFybm9zKTsKKworCS8qIGlmIHRo ZXJlJ3MgYSBzaW5nbGUgdmFybm8gaW4gdGhlIGNsYXVzZXMsIHJlbWVtYmVy IGl0ICovCisJaWYgKGJtc19udW1fbWVtYmVycyh2YXJub3MpID09IDEpCisJ CSpyZWxpZCA9IGJtc19zaW5nbGV0b25fbWVtYmVyKHZhcm5vcyk7CisKKwli bXNfZnJlZSh2YXJub3MpOworCisJcmV0dXJuIGNudDsKK30KKwordHlwZWRl ZiBzdHJ1Y3QKK3sKKwlJbmRleAkJdmFybm87CQkvKiByZWxpZCB3ZSdyZSBp bnRlcmVzdGVkIGluICovCisJQml0bWFwc2V0ICAqdmFyYXR0bm9zOwkvKiBh dHRudW1zIHJlZmVyZW5jZWQgYnkgdGhlIGNsYXVzZXMgKi8KK30gbXZfY29t cGF0aWJsZV9jb250ZXh0OworCisvKgorICogUmVjdXJzaXZlIHdhbGtlciB0 aGF0IGNoZWNrcyBjb21wYXRpYmlsaXR5IG9mIHRoZSBjbGF1c2Ugd2l0aCBt dWx0aXZhcmlhdGUKKyAqIHN0YXRpc3RpY3MsIGFuZCBjb2xsZWN0cyBhdHRu dW1zIGZyb20gdGhlIFZhcnMuCisgKgorICogWFhYIFRoZSBvcmlnaW5hbCBp ZGVhIHdhcyB0byBjb21iaW5lIHRoaXMgd2l0aCBleHByZXNzaW9uX3RyZWVf d2Fsa2VyLCBidXQKKyAqICAgICBJJ3ZlIGJlZW4gdW5hYmxlIHRvIG1ha2Ug dGhhdCB3b3JrIC0gc2VlbXMgdGhhdCBkb2VzIG5vdCBxdWl0ZSBhbGxvdwor ICogICAgIGNoZWNraW5nIHRoZSBzdHJ1Y3R1cmUuIEhlbmNlIHRoZSBleHBs aWNpdCBjYWxscyB0byB0aGUgd2Fsa2VyLgorICovCitzdGF0aWMgYm9vbAor bXZfY29tcGF0aWJsZV93YWxrZXIoTm9kZSAqbm9kZSwgbXZfY29tcGF0aWJs ZV9jb250ZXh0ICpjb250ZXh0KQoreworCWlmIChub2RlID09IE5VTEwpCisJ CXJldHVybiBmYWxzZTsKKyAKKwlpZiAoSXNBKG5vZGUsIFJlc3RyaWN0SW5m bykpCisgCXsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdElu Zm8gKikgbm9kZTsKKyAKKyAJCS8qIFBzZXVkb2NvbnN0YW50cyBhcmUgbm90 IHJlYWxseSBpbnRlcmVzdGluZyBoZXJlLiAqLworIAkJaWYgKHJpbmZvLT5w c2V1ZG9jb25zdGFudCkKKwkJCXJldHVybiB0cnVlOworIAorCQkvKiBjbGF1 c2VzIHJlZmVyZW5jaW5nIG11bHRpcGxlIHZhcm5vcyBhcmUgaW5jb21wYXRp YmxlICovCisJCWlmIChibXNfbWVtYmVyc2hpcChyaW5mby0+Y2xhdXNlX3Jl bGlkcykgIT0gQk1TX1NJTkdMRVRPTikKKwkJCXJldHVybiB0cnVlOworIAor CQkvKiBjaGVjayB0aGUgY2xhdXNlIGluc2lkZSB0aGUgUmVzdHJpY3RJbmZv ICovCisJCXJldHVybiBtdl9jb21wYXRpYmxlX3dhbGtlcigoTm9kZSopcmlu Zm8tPmNsYXVzZSwgKHZvaWQgKikgY29udGV4dCk7CisgCX0KKworCWlmIChJ c0Eobm9kZSwgVmFyKSkKKwl7CisJCVZhciAqIHZhciA9IChWYXIqKW5vZGU7 CisKKwkJLyoKKwkJICogQWxzbywgdGhlIHZhcmlhYmxlIG5lZWRzIHRvIHJl ZmVyZW5jZSB0aGUgcmlnaHQgcmVsaWQgKHRoaXMgbWlnaHQgYmUKKwkJICog dW5uZWNlc3NhcnkgZ2l2ZW4gdGhlIG90aGVyIGNoZWNrcywgYnV0IGxldCdz IGJlIHN1cmUpLgorCQkgKi8KKwkJaWYgKHZhci0+dmFybm8gIT0gY29udGV4 dC0+dmFybm8pCisJCQlyZXR1cm4gdHJ1ZTsKKworCQkvKiBBbHNvIHNraXAg c3lzdGVtIGF0dHJpYnV0ZXMgKHdlIGRvbid0IGFsbG93IHN0YXRzIG9uIHRo b3NlKS4gKi8KKwkJaWYgKCEgQXR0ck51bWJlcklzRm9yVXNlckRlZmluZWRB dHRyKHZhci0+dmFyYXR0bm8pKQorCQkJcmV0dXJuIHRydWU7CisKKwkJLyog U2VlbXMgZmluZSwgc28gbGV0J3MgcmVtZW1iZXIgdGhlIGF0dG51bS4gKi8K KwkJY29udGV4dC0+dmFyYXR0bm9zID0gYm1zX2FkZF9tZW1iZXIoY29udGV4 dC0+dmFyYXR0bm9zLCB2YXItPnZhcmF0dG5vKTsKKworCQlyZXR1cm4gZmFs c2U7CisgCX0KKworCS8qCisJICogQW5kIGZpbmFsbHkgdGhlIG9wZXJhdG9y IGV4cHJlc3Npb25zIC0gd2Ugb25seSBhbGxvdyBzaW1wbGUgZXhwcmVzc2lv bnMKKwkgKiB3aXRoIHR3byBhcmd1bWVudHMsIHdoZXJlIG9uZSBpcyBhIFZh ciBhbmQgdGhlIG90aGVyIGlzIGEgY29uc3RhbnQsIGFuZAorCSAqIGl0J3Mg YSBzaW1wbGUgY29tcGFyaXNvbiAod2hpY2ggd2UgZGV0ZWN0IHVzaW5nIGVz dGltYXRvciBmdW5jdGlvbikuCisJICovCisJaWYgKGlzX29wY2xhdXNlKG5v ZGUpKQorIAl7CisJCU9wRXhwcgkgICAqZXhwciA9IChPcEV4cHIgKikgbm9k ZTsKKwkJVmFyCQkgICAqdmFyOworCQlib29sCQl2YXJvbmxlZnQgPSB0cnVl OworCQlib29sCQlvazsKKworIAkJLyoKKwkJICogT25seSBleHByZXNzaW9u cyB3aXRoIHR3byBhcmd1bWVudHMgYXJlIGNvbnNpZGVyZWQgY29tcGF0aWJs ZS4KKyAJCSAqCisJCSAqIFhYWCBQb3NzaWJseSB1bm5lY2Vzc2FyeSAoY2Fu IE9wRXhwciBoYXZlIGRpZmZlcmVudCBhcmcgY291bnQ/KS4KKyAJCSAqLwor CQlpZiAobGlzdF9sZW5ndGgoZXhwci0+YXJncykgIT0gMikKKwkJCXJldHVy biB0cnVlOworCisJCS8qIHNlZSBpZiBpdCBhY3R1YWxseSBoYXMgdGhlIHJp Z2h0ICovCisJCW9rID0gKE51bVJlbGlkcygoTm9kZSopZXhwcikgPT0gMSkg JiYKKwkJCQkoaXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZShsc2Vjb25kKGV4 cHItPmFyZ3MpKSB8fAorCQkJCSh2YXJvbmxlZnQgPSBmYWxzZSwKKwkJCQkg aXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZShsaW5pdGlhbChleHByLT5hcmdz KSkpKTsKKworCQkvKiB1bnN1cHBvcnRlZCBzdHJ1Y3R1cmUgKHR3byB2YXJp YWJsZXMgb3Igc28pICovCisJCWlmICghIG9rKQorCQkJcmV0dXJuIHRydWU7 CisKKyAJCS8qCisJCSAqIElmIGl0J3Mgbm90IGEgIjwiIG9yICI+IiBvciAi PSIgb3BlcmF0b3IsIGp1c3QgaWdub3JlIHRoZSBjbGF1c2UuCisJCSAqIE90 aGVyd2lzZSBub3RlIHRoZSByZWxpZCBhbmQgYXR0bnVtIGZvciB0aGUgdmFy aWFibGUuIFRoaXMgdXNlcyB0aGUKKwkJICogZnVuY3Rpb24gZm9yIGVzdGlt YXRpbmcgc2VsZWN0aXZpdHksIG9udCB0aGUgb3BlcmF0b3IgZGlyZWN0bHkg KGEgYml0CisJCSAqIGF3a3dhcmQsIGJ1dCB3ZWxsIC4uLikuCisgCQkgKi8K KwkJc3dpdGNoIChnZXRfb3BycmVzdChleHByLT5vcG5vKSkKKwkJeworCQkJ Y2FzZSBGX0VRU0VMOgorCisJCQkJLyogZXF1YWxpdHkgY29uZGl0aW9ucyBh cmUgY29tcGF0aWJsZSB3aXRoIGFsbCBzdGF0aXN0aWNzICovCisJCQkJYnJl YWs7CisKKwkJCWRlZmF1bHQ6CisKKwkJCQkvKiB1bmtub3duIGVzdGltYXRv ciAqLworCQkJCXJldHVybiB0cnVlOworIAkJfQorCisJCXZhciA9ICh2YXJv bmxlZnQpID8gbGluaXRpYWwoZXhwci0+YXJncykgOiBsc2Vjb25kKGV4cHIt PmFyZ3MpOworCisJCXJldHVybiBtdl9jb21wYXRpYmxlX3dhbGtlcigoTm9k ZSAqKSB2YXIsIGNvbnRleHQpOworIAl9CisKKwkvKiBOb2RlIG5vdCBleHBs aWNpdGx5IHN1cHBvcnRlZCwgc28gdGVybWluYXRlICovCisJcmV0dXJuIHRy dWU7Cit9CisgCisvKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjbGF1 c2UgaXMgY29tcGF0aWJsZSB3aXRoIG11bHRpdmFyaWF0ZSBzdGF0cywKKyAq IGFuZCBpZiBpdCBpcywgcmV0dXJucyBzb21lIGFkZGl0aW9uYWwgaW5mb3Jt YXRpb24gLSB2YXJubyAoaW5kZXgKKyAqIGludG8gc2ltcGxlX3J0ZV9hcnJh eSkgYW5kIGEgYml0bWFwIG9mIGF0dHJpYnV0ZXMuIFRoaXMgaXMgdGhlbgor ICogdXNlZCB0byBmZXRjaCByZWxhdGVkIG11bHRpdmFyaWF0ZSBzdGF0aXN0 aWNzLgorICoKKyAqIEF0IHRoaXMgbW9tZW50IHdlIG9ubHkgc3VwcG9ydCBi YXNpYyBjb25kaXRpb25zIG9mIHRoZSBmb3JtCisgKgorICogICAgIHZhcmlh YmxlIE9QIGNvbnN0YW50CisgKgorICogd2hlcmUgT1AgaXMgb25lIG9mIFs9 LDwsPD0sPj0sPl0gKHdoaWNoIGlzIGhvd2V2ZXIgZGV0ZXJtaW5lZCBieQor ICogbG9va2luZyBhdCB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgZXN0 aW1hdGluZyBzZWxlY3Rpdml0eSwganVzdAorICogbGlrZSB3aXRoIHRoZSBz aW5nbGUtZGltZW5zaW9uYWwgY2FzZSkuCisgKgorICogVE9ETyBTdXBwb3J0 ICdPUiBjbGF1c2VzJyAtIHNob3VsZG4ndCBiZSBhbGwgdGhhdCBkaWZmaWN1 bHQgdG8KKyAqICAgICAgZXZhbHVhdGUgdGhlbSB1c2luZyBtdWx0aXZhcmlh dGUgc3RhdHMuCisgKi8KK3N0YXRpYyBib29sCitjbGF1c2VfaXNfbXZfY29t cGF0aWJsZShOb2RlICpjbGF1c2UsIEluZGV4IHJlbGlkLCBBdHRyTnVtYmVy ICphdHRudW0pCit7CisJbXZfY29tcGF0aWJsZV9jb250ZXh0IGNvbnRleHQ7 CisKKwljb250ZXh0LnZhcm5vID0gcmVsaWQ7CisJY29udGV4dC52YXJhdHRu b3MgPSBOVUxMOwkvKiBubyBhdHRudW1zICovCisKKwlpZiAobXZfY29tcGF0 aWJsZV93YWxrZXIoY2xhdXNlLCAodm9pZCAqKSAmY29udGV4dCkpCisJCXJl dHVybiBmYWxzZTsKKworCS8qIHJlbWVtYmVyIHRoZSBuZXdseSBjb2xsZWN0 ZWQgYXR0bnVtcyAqLworCSphdHRudW0gPSBibXNfc2luZ2xldG9uX21lbWJl cihjb250ZXh0LnZhcmF0dG5vcyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIGNvbGxlY3QgYXR0bnVtcyBmcm9tIGZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzCisgKgorICogV2FsayB0aHJvdWdoIGFsbCBzdGF0aXN0aWNzIG9u IHRoZSByZWxhdGlvbiwgYW5kIGNvbGxlY3QgYXR0bnVtcyBjb3ZlcmVkCisg KiBieSB0aG9zZSB3aXRoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLiBXZSBv bmx5IGxvb2sgYXQgY29sdW1ucyBzcGVjaWZpZWQKKyAqIHdoZW4gY3JlYXRp bmcgdGhlIHN0YXRpc3RpY3MsIG5vdCBhdCBjb2x1bW5zIGFjdHVhbGx5IHJl ZmVyZW5jZWQgYnkgdGhlCisgKiBkZXBlbmRlbmNpZXMgKHdoaWNoIG1heSBv bmx5IGJlIGEgc3Vic2V0IG9mIHRoZSBhdHRyaWJ1dGVzKS4KKyAqLworc3Rh dGljIEJpdG1hcHNldCoKK2ZkZXBzX2NvbGxlY3RfYXR0bnVtcyhMaXN0ICpz dGF0cykKK3sKKwlMaXN0Q2VsbCAqbGM7CisJQml0bWFwc2V0ICphdHRudW1z ID0gTlVMTDsKKworCWZvcmVhY2ggKGxjLCBzdGF0cykKKwl7CisJCWludCBq OworCQlNVlN0YXRpc3RpY0luZm8gKmluZm8gPSAoTVZTdGF0aXN0aWNJbmZv ICopbGZpcnN0KGxjKTsKKworCQlpbnQydmVjdG9yICpzdGFrZXlzID0gaW5m by0+c3Rha2V5czsKKworCQkvKiBza2lwIHN0YXRzIHdpdGhvdXQgZnVuY3Rp b25hbCBkZXBlbmRlbmNpZXMgYnVpbHQgKi8KKwkJaWYgKCEgaW5mby0+ZGVw c19idWlsdCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaiA9IDA7IGogPCBz dGFrZXlzLT5kaW0xOyBqKyspCisJCQlhdHRudW1zID0gYm1zX2FkZF9tZW1i ZXIoYXR0bnVtcywgc3Rha2V5cy0+dmFsdWVzW2pdKTsKKwl9CisKKwlyZXR1 cm4gYXR0bnVtczsKK30KKworLyogdHJhbnNmb3JtcyBiaXRtYXBzZXQgaW50 byBhbiBhcnJheSAoaW5kZXggPT4gdmFsdWUpICovCitzdGF0aWMgaW50Kgor bWFrZV9pZHhfdG9fYXR0bnVtX21hcHBpbmcoQml0bWFwc2V0ICphdHRudW1z KQoreworCWludAkJYXR0aWR4ID0gMDsKKwlpbnQJCWF0dG51bTsKKworCWlu dAkgICAqbWFwcGluZyA9IChpbnQqKXBhbGxvYzAoYm1zX251bV9tZW1iZXJz KGF0dG51bXMpICogc2l6ZW9mKGludCkpOworCisJYXR0bnVtID0gLTE7CisJ d2hpbGUgKChhdHRudW0gPSBibXNfbmV4dF9tZW1iZXIoYXR0bnVtcywgYXR0 bnVtKSkgPj0gMCkKKwkJbWFwcGluZ1thdHRpZHgrK10gPSBhdHRudW07CisK KwlBc3NlcnQoYXR0aWR4ID09IGJtc19udW1fbWVtYmVycyhhdHRudW1zKSk7 CisKKwlyZXR1cm4gbWFwcGluZzsKK30KKworLyogdHJhbnNmb3JtcyBiaXRt YXBzZXQgaW50byBhbiBhcnJheSAodmFsdWUgPT4gaW5kZXgpICovCitzdGF0 aWMgaW50KgorbWFrZV9hdHRudW1fdG9faWR4X21hcHBpbmcoQml0bWFwc2V0 ICphdHRudW1zKQoreworCWludAkJYXR0aWR4ID0gMDsKKwlpbnQJCWF0dG51 bTsKKwlpbnQJCW1heGF0dG51bSA9IC0xOworCWludAkgICAqbWFwcGluZzsK KworCWF0dG51bSA9IC0xOworCXdoaWxlICgoYXR0bnVtID0gYm1zX25leHRf bWVtYmVyKGF0dG51bXMsIGF0dG51bSkpID49IDApCisJCW1heGF0dG51bSA9 IGF0dG51bTsKKworCW1hcHBpbmcgPSAoaW50KilwYWxsb2MwKChtYXhhdHRu dW0rMSkgKiBzaXplb2YoaW50KSk7CisKKwlhdHRudW0gPSAtMTsKKwl3aGls ZSAoKGF0dG51bSA9IGJtc19uZXh0X21lbWJlcihhdHRudW1zLCBhdHRudW0p KSA+PSAwKQorCQltYXBwaW5nW2F0dG51bV0gPSBhdHRpZHgrKzsKKworCUFz c2VydChhdHRpZHggPT0gYm1zX251bV9tZW1iZXJzKGF0dG51bXMpKTsKKwor CXJldHVybiBtYXBwaW5nOworfQorCisvKiBidWlsZCBhZGphY2VuY3kgbWF0 cml4IGZvciB0aGUgZGVwZW5kZW5jaWVzICovCitzdGF0aWMgYm9vbCoKK2J1 aWxkX2FkamFjZW5jeV9tYXRyaXgoTGlzdCAqc3RhdHMsIEJpdG1hcHNldCAq YXR0bnVtcywKKwkJCQkJICAgaW50ICppZHhfdG9fYXR0bnVtLCBpbnQgKmF0 dG51bV90b19pZHgpCit7CisJTGlzdENlbGwgKmxjOworCWludAkJbmF0dHMg ID0gYm1zX251bV9tZW1iZXJzKGF0dG51bXMpOworCWJvb2wgICAqbWF0cml4 ID0gKGJvb2wqKXBhbGxvYzAobmF0dHMgKiBuYXR0cyAqIHNpemVvZihib29s KSk7CisKKwlmb3JlYWNoIChsYywgc3RhdHMpCisJeworCQlpbnQgajsKKwkJ TVZTdGF0aXN0aWNJbmZvICpzdGF0ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxm aXJzdChsYyk7CisJCU1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcyA9IE5V TEw7CisKKwkJLyogc2tpcCBzdGF0cyB3aXRob3V0IGZ1bmN0aW9uYWwgZGVw ZW5kZW5jaWVzIGJ1aWx0ICovCisJCWlmICghIHN0YXQtPmRlcHNfYnVpbHQp CisJCQljb250aW51ZTsKKworCQkvKiBmZXRjaCBhbmQgZGVzZXJpYWxpemUg ZGVwZW5kZW5jaWVzICovCisJCWRlcGVuZGVuY2llcyA9IGxvYWRfbXZfZGVw ZW5kZW5jaWVzKHN0YXQtPm12b2lkKTsKKwkJaWYgKGRlcGVuZGVuY2llcyA9 PSBOVUxMKQorCQl7CisJCQllbG9nKFdBUk5JTkcsICJmYWlsZWQgdG8gZGVz ZXJpYWxpemUgZnVuYyBkZXBzICVkIiwgc3RhdC0+bXZvaWQpOworCQkJY29u dGludWU7CisJCX0KKworCQkvKiBzZXQgbWF0cml4W2EsYl0gdG8gJ3RydWUn IGlmICdhPT5iJyAqLworCQlmb3IgKGogPSAwOyBqIDwgZGVwZW5kZW5jaWVz LT5uZGVwczsgaisrKQorCQl7CisJCQlpbnQgYWlkeCA9IGF0dG51bV90b19p ZHhbZGVwZW5kZW5jaWVzLT5kZXBzW2pdLT5hXTsKKwkJCWludCBiaWR4ID0g YXR0bnVtX3RvX2lkeFtkZXBlbmRlbmNpZXMtPmRlcHNbal0tPmJdOworCisJ CQkvKiBhPT4gYiAqLworCQkJbWF0cml4W2FpZHggKiBuYXR0cyArIGJpZHhd ID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBtYXRyaXg7Cit9CisKKy8q CisgKiBtdWx0aXBseSB0aGUgYWRqYWNlbmN5IG1hdHJpeAorICoKKyAqIEJ5 IG11bHRpcGx5aW5nIHRoZSBhZGphY2VuY3kgbWF0cml4LCB3ZSBkZXJpdmUg ZGVwZW5kZW5jaWVzIGltcGxpZWQgYnkgdGhvc2UKKyAqIHN0b3JlZCBpbiB0 aGUgY2F0YWxvZyAoYnV0IHBvc3NpYmx5IGluIHNldmVyYWwgc2VwYXJhdGUg cm93cykuIFdlIG5lZWQgdG8KKyAqIHJlcGVhdCB0aGUgbXVsdGlwbGljYXRp b24gdW50aWwgbm8gbmV3IGRlcGVuZGVuY2llcyBhcmUgZGlzY292ZXJlZC4g VGhlCisgKiBtYXhpbXVtIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMgaXMg ZXF1YWwgdG8gdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzLgorICoKKyAqIFRo aXMgaXMgYmFzZWQgb24gbW9kZWxpbmcgdGhlIGZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzIGFzIGVkZ2VzIGluIGEgZGlyZWN0ZWQKKyAqIGdyYXBoIHdpdGgg YXR0cmlidXRlcyBhcyB2ZXJ0aWNlcy4KKyAqLworc3RhdGljIHZvaWQKK211 bHRpcGx5X2FkamFjZW5jeV9tYXRyaXgoYm9vbCAqbWF0cml4LCBpbnQgbmF0 dHMpCit7CisJaW50IGk7CisKKwkvKiByZXBlYXQgdGhlIG11bHRpcGxpY2F0 aW9uIHVwIHRvIG5hdHRzLXRpbWVzICovCisJZm9yIChpID0gMDsgaSA8IG5h dHRzOyBpKyspCisJeworCQlib29sIGNoYW5nZWQgPSBmYWxzZTsJLyogbm8g Y2hhbmdlcyBpbiB0aGlzIHJvdW5kICovCisJCWludCBrLCBsLCBtOworCisJ CS8qIGsgPT4gbCAqLworCQlmb3IgKGsgPSAwOyBrIDwgbmF0dHM7IGsrKykK KwkJeworCQkJZm9yIChsID0gMDsgbCA8IG5hdHRzOyBsKyspCisJCQl7CisJ CQkJLyogc2tpcCBhbHJlYWR5IGtub3duIGRlcGVuZGVuY2llcyAqLworCQkJ CWlmIChtYXRyaXhbayAqIG5hdHRzICsgbF0pCisJCQkJCWNvbnRpbnVlOwor CisJCQkJLyoKKwkJCQkgKiBjb21wdXRlIChrLGwpIGluIHRoZSBtdWx0aXBs aWVkIG1hdHJpeAorCQkJCSAqCisJCQkJICogV2UgZG9uJ3QgcmVhbGx5IGNh cmUgYWJvdXQgdGhlIGV4YWN0IHZhbHVlLCBqdXN0IHRydWUvZmFsc2UsCisJ CQkJICogc28gdGVybWluYXRlIHRoZSBsb29wIG9uY2Ugd2UgZ2V0IGEgaGl0 LiBBbHNvLCB0aGlzIG1ha2VzIGl0CisJCQkJICogc2FmZSB0byBtb2RpZnkg dGhlIG1hdHJpeCBpbi1wbGFjZS4KKwkJCQkgKi8KKwkJCQlmb3IgKG0gPSAw OyBtIDwgbmF0dHM7IG0rKykKKwkJCQl7CisJCQkJCWlmIChtYXRyaXhbayAq IG5hdHRzICsgbV0gKiBtYXRyaXhbbSAqIG5hdHRzICsgbF0pCisJCQkJCXsK KwkJCQkJCW1hdHJpeFtrICogbmF0dHMgKyBsXSA9IHRydWU7CisJCQkJCQlj aGFuZ2VkID0gdHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQor CQkJfQorCQl9CisKKwkJLyogbm8gdHJhbnNpdGl2ZSBkZXBlbmRlbmN5IGFk ZGVkIGluIHRoaXMgcm91bmQsIHNvIHRlcm1pbmF0ZSAqLworCQlpZiAoISBj aGFuZ2VkKQorCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVkdWNlIGNs YXVzZXMgdXNpbmcgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMKKyAqCisgKiBX YWxrIHRocm91Z2ggY2xhdXNlcyBhbmQgZWxpbWluYXRlIHRoZSByZWR1bmRh bnQgb25lcyAoaW1wbGllZCBieSBvdGhlcgorICogY2xhdXNlcykuIFRoaXMg aXMgZG9uZSBieSBmaXJzdCBkZXJpdmluZyBhIHRyYW5zaXRpdmUgY2xvc3Vy ZSBvZiBhbGwgdGhlCisgKiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAoYnkg bXVsdGlwbHlpbmcgdGhlIGFkamFjZW5jeSBtYXRyaXgpLgorICovCitzdGF0 aWMgTGlzdCoKK2ZkZXBzX3JlZHVjZV9jbGF1c2VzKExpc3QgKmNsYXVzZXMs IEJpdG1hcHNldCAqYXR0bnVtcywgYm9vbCAqbWF0cml4LAorCQkJCQlpbnQg KmlkeF90b19hdHRudW0sIGludCAqYXR0bnVtX3RvX2lkeCwgSW5kZXggcmVs aWQpCit7CisJaW50IGk7CisJTGlzdENlbGwgKmxjOworCUxpc3QgICAqcmVk dWNlZF9jbGF1c2VzID0gTklMOworCisJaW50CQkJbm12Y2xhdXNlczsJLyog c2l6ZSBvZiB0aGUgYXJyYXlzICovCisJYm9vbAkgICAqcmVkdWNlZDsKKwlB dHRyTnVtYmVyICptdmF0dG51bXM7CisJTm9kZQkgICoqbXZjbGF1c2VzOwor CisJaW50CQkJbmF0dHMgPSBibXNfbnVtX21lbWJlcnMoYXR0bnVtcyk7CisK KwkvKgorCSAqIFByZWFsbG9jYXRlIHNwYWNlIGZvciBhbGwgY2xhdXNlcyAo dGhlIGxpc3Qgb25seSBjb250YWluc3QKKwkgKiBjb21wYXRpYmxlIGNsYXVz ZXMgYXQgdGhpcyBwb2ludCkuIFRoaXMgbWFrZXMgaXQgc29tZXdoYXQgZWFz aWVyCisJICogdG8gYWNjZXNzIHRoZSBzdGF0cyAvIGF0dG51bXMgcmFuZG9t bHkuCisJICoKKwkgKiBYWFggVGhpcyBhc3N1bWVzIGVhY2ggY2xhdXNlIHJl ZmVyZW5jZXMgZXhhY3RseSBvbmUgVmFyLCBzbyB0aGUKKwkgKiAgICAgYXJy YXlzIGFyZSBzaXplZCBhY2NvcmRpbmdseSAtIGZvciBmdW5jdGlvbmFsIGRl cGVuZGVuY2llcworCSAqICAgICB0aGlzIGlzIHNhZmUsIGJlY2F1c2UgaXQg b25seSB3b3JrcyB3aXRoIFZhcj1Db25zdC4KKwkgKi8KKwltdmNsYXVzZXMg PSAoTm9kZSoqKXBhbGxvYzAobGlzdF9sZW5ndGgoY2xhdXNlcykgKiBzaXpl b2YoTm9kZSopKTsKKwltdmF0dG51bXMgPSAoQXR0ck51bWJlciopcGFsbG9j MChsaXN0X2xlbmd0aChjbGF1c2VzKSAqIHNpemVvZihBdHRyTnVtYmVyKSk7 CisJcmVkdWNlZCA9IChib29sKilwYWxsb2MwKGxpc3RfbGVuZ3RoKGNsYXVz ZXMpICogc2l6ZW9mKGJvb2wpKTsKKworCS8qIGZpbGwgdGhlIGFycmF5cyAq LworCW5tdmNsYXVzZXMgPSAwOworCWZvcmVhY2ggKGxjLCBjbGF1c2VzKQor CXsKKwkJTm9kZSAqIGNsYXVzZSA9IChOb2RlKilsZmlyc3QobGMpOworCQlC aXRtYXBzZXQgKiBhdHRudW1zID0gZ2V0X3ZhcmF0dG5vcyhjbGF1c2UsIHJl bGlkKTsKKworCQltdmNsYXVzZXNbbm12Y2xhdXNlc10gPSBjbGF1c2U7CisJ CW12YXR0bnVtc1tubXZjbGF1c2VzXSA9IGJtc19zaW5nbGV0b25fbWVtYmVy KGF0dG51bXMpOworCQlubXZjbGF1c2VzKys7CisJfQorCisJQXNzZXJ0KG5t dmNsYXVzZXMgPT0gbGlzdF9sZW5ndGgoY2xhdXNlcykpOworCisJLyogbm93 IHRyeSB0byByZWR1Y2UgdGhlIGNsYXVzZXMgKHVzaW5nIHRoZSBkZXBlbmRl bmNpZXMpICovCisJZm9yIChpID0gMDsgaSA8IG5tdmNsYXVzZXM7IGkrKykK Kwl7CisJCWludCBqOworCisJCS8qIG5vdCBjb3ZlcmVkIGJ5IGRlcGVuZGVu Y2llcyAqLworCQlpZiAoISBibXNfaXNfbWVtYmVyKG12YXR0bnVtc1tpXSwg YXR0bnVtcykpCisJCQljb250aW51ZTsKKworCQkvKiB0aGlzIGNsYXVzZSB3 YXMgYWxyZWFkeSByZWR1Y2VkLCBzbyBsZXQncyBza2lwIGl0ICovCisJCWlm IChyZWR1Y2VkW2ldKQorCQkJY29udGludWU7CisKKwkJLyogd2FsayB0aGUg cG90ZW50aWFsbHkgJ2ltcGxpZWQnIGNsYXVzZXMgKi8KKwkJZm9yIChqID0g MDsgaiA8IG5tdmNsYXVzZXM7IGorKykKKwkJeworCQkJaW50IGFpZHgsIGJp ZHg7CisKKwkJCS8qIG5vdCBjb3ZlcmVkIGJ5IGRlcGVuZGVuY2llcyAqLwor CQkJaWYgKCEgYm1zX2lzX21lbWJlcihtdmF0dG51bXNbal0sIGF0dG51bXMp KQorCQkJCWNvbnRpbnVlOworCisJCQlhaWR4ID0gYXR0bnVtX3RvX2lkeFtt dmF0dG51bXNbaV1dOworCQkJYmlkeCA9IGF0dG51bV90b19pZHhbbXZhdHRu dW1zW2pdXTsKKworCQkJLyogY2FuJ3QgcmVkdWNlIHRoZSBjbGF1c2UgYnkg aXRzZWxmLCBvciBpZiBhbHJlYWR5IHJlZHVjZWQgKi8KKwkJCWlmICgoaSA9 PSBqKSB8fCByZWR1Y2VkW2pdKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBt YXJrIHRoZSBjbGF1c2UgYXMgcmVkdWNlZCAoaWYgYWlkeCA9PiBiaWR4KSAq LworCQkJcmVkdWNlZFtqXSA9IG1hdHJpeFthaWR4ICogbmF0dHMgKyBiaWR4 XTsKKwkJfQorCX0KKworCS8qIG5vdyB3YWxrIHRocm91Z2ggdGhlIGNsYXVz ZXMsIGFuZCBrZWVwIG9ubHkgdGhvc2Ugbm90IHJlZHVjZWQgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbm12Y2xhdXNlczsgaSsrKQorCQlpZiAoISByZWR1Y2Vk W2ldKQorCQkJcmVkdWNlZF9jbGF1c2VzID0gbGFwcGVuZChyZWR1Y2VkX2Ns YXVzZXMsIG12Y2xhdXNlc1tpXSk7CisKKwlwZnJlZShyZWR1Y2VkKTsKKwlw ZnJlZShtdmNsYXVzZXMpOworCXBmcmVlKG12YXR0bnVtcyk7CisKKwlyZXR1 cm4gcmVkdWNlZF9jbGF1c2VzOworfQorCisvKgorICogZmlsdGVyIGNsYXVz ZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcgZm9yIHRoZSByZWR1Y3Rpb24gc3Rl cAorICoKKyAqIEZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGNhbiBvbmx5IHdv cmsgd2l0aCBlcXVhbGl0eSBjbGF1c2VzIHdpdGggYXR0cmlidXRlcworICog Y292ZXJlZCBieSBhdCBsZWFzdCBvbmUgb2YgdGhlIHN0YXRpc3RpY3MsIHNv IHdlIHdhbGsgdGhyb3VnaCB0aGUgY2xhdXNlcworICogYW5kIGNvcHkgdGhl IHVuaW50ZXJlc3Rpbmcgb25lcyBkaXJlY3RseSB0byB0aGUgcmVzdWx0IChy ZWR1Y2VkKSBjbGF1c2VzLgorICoKKyAqIFRoYXQgaW5jbHVkZXMgY2xhdXNl cyB0aGF0OgorICogICAgIChhKSBhcmUgbm90IG12LWNvbXBhdGlibGUKKyAq ICAgICAoYikgcmVmZXJlbmNlIG1vcmUgdGhhbiBhIHNpbmdsZSBhdHRudW0K KyAqICAgICAoYykgdXNlIGF0dG51bSBub3QgY292ZXJlZCBieSBmdW5jdGlv bmFsIGRlcGVuY2VuY2llcworICoKKyAqIFRoZSBjbGF1c2VzIGludGVyZXN0 aW5nIGZvciB0aGUgcmVkdWN0aW9uIHN0ZXAgYXJlIGNvcGllZCB0byBkZXBz X2NsYXVzZXMuCisgKgorICogcm9vdCAgICAgICAgICAgIC0gcGxhbm5lciBy b290CisgKiBjbGF1c2VzICAgICAgICAgLSBsaXN0IG9mIGNsYXVzZXMgKGlu cHV0KQorICogZGVwc19hdHRudW1zICAgIC0gYXR0cmlidXRlcyBjb3ZlcmVk IGJ5IGRlcGVuZGVuY2llcworICogcmVkdWNlZF9jbGF1c2VzIC0gcmVzdWx0 aW5nIGNsYXVzZXMgKG5vdCBzdWJqZWN0IHRvIHJlZHVjdGlvbiBzdGVwKQor ICogZGVwc19jbGF1c2VzICAgIC0gY2xhdXNlcyB0byBiZSBwcm9jZXNzZWQg YnkgcmVkdWN0aW9uCisgKiByZWxpZCAgICAgICAgICAgLSByZWxpZCBvZiB0 aGUgYmFzZXJlbAorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBiaXRt YXAgb2YgYXR0bnVtcyByZWZlcmVuY2VkIGJ5IGRlcHNfY2xhdXNlcy4KKyAq Lworc3RhdGljIEJpdG1hcHNldCAqCitmZGVwc19maWx0ZXJfY2xhdXNlcyhQ bGFubmVySW5mbyAqcm9vdCwKKwkJCQkJIExpc3QgKmNsYXVzZXMsIEJpdG1h cHNldCAqZGVwc19hdHRudW1zLAorCQkJCQkgTGlzdCAqKnJlZHVjZWRfY2xh dXNlcywgTGlzdCAqKmRlcHNfY2xhdXNlcywKKwkJCQkJIEluZGV4IHJlbGlk KQoreworCUxpc3RDZWxsICpsYzsKKwlCaXRtYXBzZXQgKmNsYXVzZV9hdHRu dW1zID0gTlVMTDsKKworCWZvcmVhY2ggKGxjLCBjbGF1c2VzKQorCXsKKwkJ QXR0ck51bWJlcglhdHRudW07CisJCU5vZGUJICAgKmNsYXVzZSA9IChOb2Rl ICopIGxmaXJzdChsYyk7CisKKwkJaWYgKCEgY2xhdXNlX2lzX212X2NvbXBh dGlibGUoY2xhdXNlLCByZWxpZCwgJmF0dG51bSkpCisKKwkJCS8qIGNsYXVz ZSBpbmNvbXBhdGlibGUgd2l0aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAq LworCQkJKnJlZHVjZWRfY2xhdXNlcyA9IGxhcHBlbmQoKnJlZHVjZWRfY2xh dXNlcywgY2xhdXNlKTsKKworCQllbHNlIGlmICghIGJtc19pc19tZW1iZXIo YXR0bnVtLCBkZXBzX2F0dG51bXMpKQorCisJCQkvKiBjbGF1c2Ugbm90IGNv dmVyZWQgYnkgdGhlIGRlcGVuZGVuY2llcyAqLworCQkJKnJlZHVjZWRfY2xh dXNlcyA9IGxhcHBlbmQoKnJlZHVjZWRfY2xhdXNlcywgY2xhdXNlKTsKKwor CQllbHNlCisJCXsKKwkJCSpkZXBzX2NsYXVzZXMgICA9IGxhcHBlbmQoKmRl cHNfY2xhdXNlcywgY2xhdXNlKTsKKwkJCWNsYXVzZV9hdHRudW1zID0gYm1z X2FkZF9tZW1iZXIoY2xhdXNlX2F0dG51bXMsIGF0dG51bSk7CisJCX0KKwl9 CisKKwlyZXR1cm4gY2xhdXNlX2F0dG51bXM7Cit9CisKKy8qCisgKiByZWR1 Y2UgbGlzdCBvZiBlcXVhbGl0eSBjbGF1c2VzIHVzaW5nIHNvZnQgZnVuY3Rp b25hbCBkZXBlbmRlbmNpZXMKKyAqCisgKiBXZSBzaW1wbHkgd2FsayB0aHJv dWdoIGxpc3Qgb2YgZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMsIGFuZCBmb3Ig ZWFjaCBvbmUgd2UKKyAqIGNoZWNrIHdoZXRoZXIgdGhlIGRlcGVuZGVuY3kg J21hdGNoZXMnIHRoZSBjbGF1c2VzLCBpLmUuIGlmIHRoZXJlJ3MgYSBjbGF1 c2UKKyAqIG1hdGNoaW5nIHRoZSBjb25kaXRpb24uIElmIHllcywgd2UgYXR0 ZW1wdCB0byByZW1vdmUgYWxsIGNsYXVzZXMgbWF0Y2hpbmcKKyAqIHRoZSBp bXBsaWVkIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kgZnJvbSB0aGUgbGlzdC4K KyAqCisgKiBUaGlzIG9ubHkgcmVkdWNlcyBlcXVhbGl0eSBjbGF1c2VzLCBh bmQgaWdub3JlcyBhbGwgdGhlIG90aGVyIHR5cGVzLiBXZSBtaWdodAorICog ZXh0ZW5kIGl0IHRvIGhhbmRsZSBJUyBOVUxMIGNsYXVzZSwgaW4gdGhlIGZ1 dHVyZS4KKyAqCisgKiBXZSBhbHNvIGFzc3VtZSB0aGUgZXF1YWxpdHkgY2xh dXNlcyBhcmUgJ2NvbXBhdGlibGUnLiBGb3IgZXhhbXBsZSB3ZSBjYW4ndAor ICogaWRlbnRpZnkgd2hlbiB0aGUgY2xhdXNlcyB1c2UgYSBtaXNtYXRjaGlu ZyB6aXAgY29kZSBhbmQgY2l0eSBuYW1lLiBJbiBzdWNoCisgKiBjYXNlIHRo ZSB1c3VhbCBhcHByb2FjaCAocHJvZHVjdCBvZiBzZWxlY3Rpdml0aWVzKSB3 b3VsZCBwcm9kdWNlIGEgYmV0dGVyCisgKiBlc3RpbWF0ZSwgYWx0aG91Z2gg bW9zdGx5IGJ5IGNoYW5jZS4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24g bmVlZHMgdG8gYmUgY2FyZWZ1bCBhYm91dCBjeWNsaWMgZGVwZW5kZW5jaWVz LCBlLmcuIHdoZW4KKyAqCisgKiAgICAgKGEgLT4gYikgYW5kIChiIC0+IGEp CisgKgorICogYXQgdGhlIHNhbWUgdGltZSwgd2hpY2ggbWVhbnMgdGhlcmUn cyAxOjEgcmVsYXRpb25zaGlwIGJldHdlZW4gdGUgY29sdW1ucy4KKyAqIElu IHRoaXMgY2FzZSB3ZSBtdXN0IG5vdCByZWR1Y2UgY2xhdXNlcyBvbiBib3Ro IGF0dHJpYnV0ZXMgYXQgdGhlIHNhbWUgdGltZS4KKyAqCisgKiBUT0RPIEN1 cnJlbnRseSB3ZSBvbmx5IGFwcGx5IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz IGF0IHRoZSBzYW1lIGxldmVsLCBidXQKKyAqICAgICAgbWF5YmUgd2UgY291 bGQgdHJhbnNmZXIgdGhlIGNsYXVzZXMgZnJvbSB1cHBlciBsZXZlbHMgdG8g dGhlIHN1YnRyZWVzPworICogICAgICBGb3IgZXhhbXBsZSBsZXQncyBzYXkg d2UgaGF2ZSAoYS0+YikgZGVwZW5kZW5jeSwgYW5kIGNvbmRpdGlvbgorICoK KyAqICAgICAgICAgIChhPTEpIEFORCAoYj0yIE9SIGM9MykKKyAqCisgKiAg ICAgIEN1cnJlbnRseSwgd2Ugd29uJ3QgYmUgYWJsZSB0byBwZXJmb3JtIGFu eSByZWR1Y3Rpb24sIGJlY2F1c2Ugd2UnbGwKKyAqICAgICAgY29uc2lkZXIg KGE9MSkgYW5kIChiPTIgT1IgYz0zKSBpbmRlcGVuZGVudGx5LiBCdXQgbWF5 YmUgd2UgY291bGQgcGFzcworICogICAgICAoYT0xKSBpbnRvIHRoZSBvdGhl ciBleHByZXNzaW9uLCBhbmQgb25seSBjaGVjayBpdCBhZ2FpbnN0IGNvbmRp dGlvbnMKKyAqICAgICAgb2YgdGhlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz PworICoKKyAqICAgICAgSW4gdGhpcyBjYXNlIHdlJ2QgZW5kIHVwIHdpdGgK KyAqCisgKiAgICAgICAgIChhPTEpCisgKgorICogICAgICBhcyB3ZSdkIGNv bnNpZGVyIChiPTIpIGltcGxpZWQgdGhhbmtzIHRvIHRoZSBydWxlLCByZW5k ZXJpbmcgdGhlIHdob2xlCisgKiAgICAgIE9SIGNsYXVzZSB2YWxpZC4KKyAq Lworc3RhdGljIExpc3QgKgorY2xhdXNlbGlzdF9hcHBseV9kZXBlbmRlbmNp ZXMoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCisJCQkJCQkJ ICBJbmRleCByZWxpZCwgTGlzdCAqc3RhdHMpCit7CisJTGlzdAkgICAqcmVk dWNlZF9jbGF1c2VzID0gTklMOworCisJLyoKKwkgKiBtYXRyaXggb2YgKG5h dHRzIHggbmF0dHMpLCAxIG1lYW5zIHg9PnkKKwkgKgorCSAqIFRoaXMgc2Vy dmVzIHR3byBwdXJwb3NlcyAtIGZpcnN0LCBpdCBtZXJnZXMgZGVwZW5kZW5j aWVzIGZyb20gYWxsCisJICogdGhlIHN0YXRpc3RpY3MsIHNlY29uZCBpdCBt YWtlcyBnZW5lcmF0aW5nIGFsbCB0aGUgdHJhbnNpdGl2ZQorCSAqIGRlcGVu ZGVuY2llcyBlYXNpZXIuCisJICoKKwkgKiBXZSBuZWVkIHRvIGJ1aWxkIHRo aXMgb25seSBmb3IgYXR0cmlidXRlcyBmcm9tIHRoZSBkZXBlbmRlbmNpZXMs CisJICogbm90IGZvciBhbGwgYXR0cmlidXRlcyBpbiB0aGUgdGFibGUuCisJ ICoKKwkgKiBXZSBjYW4ndCBkbyB0aGF0IG9ubHkgZm9yIGF0dHJpYnV0ZXMg ZnJvbSB0aGUgY2xhdXNlcywgYmVjYXVzZSB3ZQorCSAqIHdhbnQgdG8gYnVp bGQgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgKGluY2x1ZGluZyB0aG9zZSBn b2luZworCSAqIHRocm91Z2ggYXR0cmlidXRlcyBub3QgbGlzdGVkIGluIHRo ZSBzdGF0cykuCisJICoKKwkgKiBUaGlzIG9ubHkgd29ya3MgZm9yIEE9PkIg ZGVwZW5kZW5jaWVzLCBub3Qgc3VyZSBob3cgdG8gZG8gdGhhdAorCSAqIGZv ciBjb21wbGV4IGRlcGVuZGVuY2llcy4KKwkgKi8KKwlib29sICAgICAgICpk ZXBzX21hdHJpeDsKKwlpbnQJCQlkZXBzX25hdHRzOwkvKiBzaXplIG9mIHRo ZSBtYXRyaWMgKi8KKworCS8qIG1hcHBpbmcgYXR0bnVtIDw9PiBtYXRyaXgg aW5kZXggKi8KKwlpbnQJCSAgICpkZXBzX2lkeF90b19hdHRudW07CisJaW50 CQkgICAqZGVwc19hdHRudW1fdG9faWR4OworCisJLyogYXR0bnVtcyBpbiBk ZXBlbmRlbmNpZXMgYW5kIGNsYXVzZXMgKGFuZCBpbnRlcnNlY3Rpb24pICov CisJTGlzdAkgICAqZGVwc19jbGF1c2VzICAgPSBOSUw7CisJQml0bWFwc2V0 ICAqZGVwc19hdHRudW1zICAgPSBOVUxMOworCUJpdG1hcHNldCAgKmNsYXVz ZV9hdHRudW1zID0gTlVMTDsKKwlCaXRtYXBzZXQgICppbnRlcnNlY3RfYXR0 bnVtcyA9IE5VTEw7CisKKwkvKgorCSAqIElzIHRoZXJlIGF0IGxlYXN0IG9u ZSBzdGF0aXN0aWNzIHdpdGggZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXM/CisJ ICogSWYgbm90LCByZXR1cm4gdGhlIG9yaWdpbmFsIGNsYXVzZXMgcmlnaHQg YXdheS4KKwkgKgorCSAqIFhYWCBJc24ndCB0aGlzIHBvaW50bGVzcywgdGhh bmtzIHRvIGV4YWN0bHkgdGhlIHNhbWUgY2hlY2sgaW4KKwkgKiAgICAgY2xh dXNlbGlzdF9zZWxlY3Rpdml0eSgpPyBDYW4gd2UgdHJpZ2dlciB0aGUgY29u ZGl0aW9uIGhlcmU/CisJICovCisJaWYgKCEgaGFzX3N0YXRzKHN0YXRzLCBN Vl9DTEFVU0VfVFlQRV9GREVQKSkKKwkJcmV0dXJuIGNsYXVzZXM7CisKKwkv KgorCSAqIEJ1aWxkIHRoZSBkZXBlbmRlbmN5IG1hdHJpeCwgaS5lLiBhdHRy aWJ1dGUgYWRqYWNlbmN5IG1hdHJpeCwKKwkgKiB3aGVyZSAxIG1lYW5zIChh PT5iKS4gT25jZSB3ZSBoYXZlIHRoZSBhZGphY2VuY3kgbWF0cml4LCB3ZSds bAorCSAqIG11bHRpcGx5IGl0IGJ5IGl0c2VsZiwgdG8gZ2V0IHRyYW5zaXRp dmUgZGVwZW5kZW5jaWVzLgorCSAqCisJICogTm90ZTogVGhpcyBpcyBwcmV0 dHkgbXVjaCB0cmFuc2l0aXZlIGNsb3N1cmUgZnJvbSBncmFwaCB0aGVvcnku CisJICoKKwkgKiBGaXJzdCwgbGV0J3Mgc2VlIHdoYXQgYXR0cmlidXRlcyBh cmUgY292ZXJlZCBieSBmdW5jdGlvbmFsCisJICogZGVwZW5kZW5jaWVzIChz aWRlcyBvZiB0aGUgYWRqYWNlbmN5IG1hdHJpeCksIGFuZCBhbHNvIGEgbWF4 aW11bQorCSAqIGF0dHJpYnV0ZSAoc2l6ZSBvZiBtYXBwaW5nIHRvIHNpbXBs ZSBpbnRlZ2VyIGluZGV4ZXMpOworCSAqLworCWRlcHNfYXR0bnVtcyA9IGZk ZXBzX2NvbGxlY3RfYXR0bnVtcyhzdGF0cyk7CisKKwkvKgorCSAqIFdhbGsg dGhyb3VnaCB0aGUgY2xhdXNlcyAtIGNsYXVzZXMgdGhhdCBhcmUgKG9uZSBv ZikKKwkgKgorCSAqIChhKSBub3QgbXYtY29tcGF0aWJsZQorCSAqIChiKSBh cmUgdXNpbmcgbW9yZSB0aGFuIGEgc2luZ2xlIGF0dG51bQorCSAqIChjKSB1 c2luZyBhdHRudW0gbm90IGNvdmVyZWQgYnkgZnVuY3Rpb25hbCBkZXBlbmNl bmNpZXMKKwkgKgorCSAqIG1heSBiZSBjb3BpZWQgZGlyZWN0bHkgdG8gdGhl IHJlc3VsdC4gVGhlIGludGVyZXN0aW5nIGNsYXVzZXMgYXJlCisJICoga2Vw dCBpbiAnZGVwc19jbGF1c2VzJyBhbmQgd2lsbCBiZSBwcm9jZXNzZWQgbGF0 ZXIuCisJICovCisJY2xhdXNlX2F0dG51bXMgPSBmZGVwc19maWx0ZXJfY2xh dXNlcyhyb290LCBjbGF1c2VzLCBkZXBzX2F0dG51bXMsCisJCQkJCQkJCQkJ JnJlZHVjZWRfY2xhdXNlcywgJmRlcHNfY2xhdXNlcywgcmVsaWQpOworCisJ LyoKKwkgKiB3ZSBuZWVkIGF0IGxlYXN0IHR3byBjbGF1c2VzIHJlZmVyZW5j aW5nIHR3byBkaWZmZXJlbnQgYXR0cmlidXRlcworCSAqIHJlZmVyZW5jaW5n IHRvIGRvIHRoZSByZWR1Y3Rpb24KKwkgKi8KKwlpZiAoKGxpc3RfbGVuZ3Ro KGRlcHNfY2xhdXNlcykgPCAyKSB8fCAoYm1zX251bV9tZW1iZXJzKGNsYXVz ZV9hdHRudW1zKSA8IDIpKQorCXsKKwkJYm1zX2ZyZWUoY2xhdXNlX2F0dG51 bXMpOworCQlsaXN0X2ZyZWUocmVkdWNlZF9jbGF1c2VzKTsKKwkJbGlzdF9m cmVlKGRlcHNfY2xhdXNlcyk7CisKKwkJcmV0dXJuIGNsYXVzZXM7CisJfQor CisKKwkvKgorCSAqIFdlIG5lZWQgYXQgbGVhc3QgdHdvIG1hdGNoaW5nIGF0 dHJpYnV0ZXMgaW4gdGhlIGNsYXVzZXMgYW5kCisJICogZGVwZW5kZW5jaWVz LCBvdGhlcndpc2Ugd2UgY2FuJ3QgcmVhbGx5IHJlZHVjZSBhbnl0aGluZy4K KwkgKi8KKwlpbnRlcnNlY3RfYXR0bnVtcyA9IGJtc19pbnRlcnNlY3QoY2xh dXNlX2F0dG51bXMsIGRlcHNfYXR0bnVtcyk7CisJaWYgKGJtc19udW1fbWVt YmVycyhpbnRlcnNlY3RfYXR0bnVtcykgPCAyKQorCXsKKwkJYm1zX2ZyZWUo Y2xhdXNlX2F0dG51bXMpOworCQlibXNfZnJlZShkZXBzX2F0dG51bXMpOwor CQlibXNfZnJlZShpbnRlcnNlY3RfYXR0bnVtcyk7CisKKwkJbGlzdF9mcmVl KGRlcHNfY2xhdXNlcyk7CisJCWxpc3RfZnJlZShyZWR1Y2VkX2NsYXVzZXMp OworCisJCXJldHVybiBjbGF1c2VzOworCX0KKworCS8qCisJICogQnVpbGQg bWFwcGluZyBiZXR3ZWVuIG1hdHJpeCBpbmRleGVzIGFuZCBhdHRudW1zLCBh bmQgdGhlbiB0aGUKKwkgKiBhZGphY2VuY3kgbWF0cml4IGl0c2VsZi4KKwkg Ki8KKwlkZXBzX2lkeF90b19hdHRudW0gPSBtYWtlX2lkeF90b19hdHRudW1f bWFwcGluZyhkZXBzX2F0dG51bXMpOworCWRlcHNfYXR0bnVtX3RvX2lkeCA9 IG1ha2VfYXR0bnVtX3RvX2lkeF9tYXBwaW5nKGRlcHNfYXR0bnVtcyk7CisK KwkvKiBidWlsZCB0aGUgYWRqYWNlbmN5IG1hdHJpeCAqLworCWRlcHNfbWF0 cml4ID0gYnVpbGRfYWRqYWNlbmN5X21hdHJpeChzdGF0cywgZGVwc19hdHRu dW1zLAorCQkJCQkJCQkJCSBkZXBzX2lkeF90b19hdHRudW0sCisJCQkJCQkJ CQkJIGRlcHNfYXR0bnVtX3RvX2lkeCk7CisKKwlkZXBzX25hdHRzID0gYm1z X251bV9tZW1iZXJzKGRlcHNfYXR0bnVtcyk7CisKKwkvKgorCSAqIE11bHRp cGx5IHRoZSBtYXRyaXggTi10aW1lcyAoTiA9IHNpemUgb2YgdGhlIG1hdHJp eCksIHNvIHRoYXQgd2UKKwkgKiBnZXQgYWxsIHRoZSB0cmFuc2l0aXZlIGRl cGVuZGVuY2llcy4gVGhhdCBtYWtlcyB0aGUgbmV4dCBzdGVwCisJICogbXVj aCBlYXNpZXIgYW5kIGZhc3Rlci4KKwkgKgorCSAqIFRoaXMgaXMgZXNzZW50 aWFsbHkgYW4gYWRqYWNlbmN5IG1hdHJpeCBmcm9tIGdyYXBoIHRoZW9yeSwg YW5kCisJICogYnkgbXVsdGlwbHlpbmcgaXQgd2UgZ2V0IHRyYW5zaXRpdmUg ZWRnZXMuIFdlIGRvbid0IHJlYWxseSBjYXJlCisJICogYWJvdXQgdGhlIGV4 YWN0IG51bWJlciAobnVtYmVyIG9mIHBhdGhzIGJldHdlZW4gdmVydGljZXMp IHRob3VnaCwKKwkgKiBzbyB3ZSBjYW4gZG8gdGhlIG11bHRpcGxpY2F0aW9u IGluLXBsYWNlICh3ZSBkb24ndCBjYXJlIHdoZXRoZXIKKwkgKiB3ZSBmb3Vu ZCB0aGUgZGVwZW5kZW5jeSBpbiB0aGlzIHJvdW5kIG9yIGluIHRoZSBwcmV2 aW91cyBvbmUpLgorCSAqCisJICogVHJhY2sgaG93IG1hbnkgbmV3IGRlcGVu ZGVuY2llcyB3ZXJlIGFkZGVkLCBhbmQgc3RvcCB3aGVuIDAsIGJ1dAorCSAq IHdlIGNhbid0IG11bHRpcGx5IG1vcmUgdGhhbiBOLXRpbWVzIChsb25nZXN0 IHBhdGggaW4gdGhlIGdyYXBoKS4KKwkgKi8KKwltdWx0aXBseV9hZGphY2Vu Y3lfbWF0cml4KGRlcHNfbWF0cml4LCBkZXBzX25hdHRzKTsKKworCS8qCisJ ICogV2FsayB0aHJvdWdoIHRoZSBjbGF1c2VzLCBhbmQgc2VlIHdoaWNoIG90 aGVyIGNsYXVzZXMgd2UgbWF5CisJICogcmVkdWNlLiBUaGUgbWF0cml4IGNv bnRhaW5zIGFsbCB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcywgd2hpY2gKKwkg KiBtYWtlcyB0aGlzIHZlcnkgZmFzdC4KKwkgKgorCSAqIFdlIGhhdmUgdG8g YmUgY2FyZWZ1bCBub3QgdG8gcmVkdWNlIHRoZSBjbGF1c2UgdXNpbmcgaXRz ZWxmLCBvcgorCSAqIHJlZHVjaW5nIGFsbCBjbGF1c2VzIGZvcm1pbmcgYSBj eWNsZSAoc28gd2UgaGF2ZSB0byBza2lwIGFscmVhZHkKKwkgKiBlbGltaW5h dGVkIGNsYXVzZXMpLgorCSAqCisJICogSSdtIG5vdCBzdXJlIHdoZXRoZXIg dGhpcyBndWFyYW50ZWVzIGZpbmRpbmcgdGhlIGJlc3Qgc29sdXRpb24sCisJ ICogaS5lLiByZWR1Y2luZyB0aGUgbW9zdCBjbGF1c2VzLCBidXQgaXQgcHJv YmFibHkgZG9lcyAodGhhbmtzIHRvCisJICogaGF2aW5nIGFsbCB0aGUgdHJh bnNpdGl2ZSBkZXBlbmRlbmNpZXMpLgorCSAqLworCWRlcHNfY2xhdXNlcyA9 IGZkZXBzX3JlZHVjZV9jbGF1c2VzKGRlcHNfY2xhdXNlcywKKwkJCQkJCQkJ CQlkZXBzX2F0dG51bXMsIGRlcHNfbWF0cml4LAorCQkJCQkJCQkJCWRlcHNf aWR4X3RvX2F0dG51bSwKKwkJCQkJCQkJCQlkZXBzX2F0dG51bV90b19pZHgs IHJlbGlkKTsKKworCS8qIGpvaW4gdGhlIHR3byBsaXN0cyBvZiBjbGF1c2Vz ICovCisJcmVkdWNlZF9jbGF1c2VzID0gbGlzdF91bmlvbihyZWR1Y2VkX2Ns YXVzZXMsIGRlcHNfY2xhdXNlcyk7CisKKwlwZnJlZShkZXBzX21hdHJpeCk7 CisJcGZyZWUoZGVwc19pZHhfdG9fYXR0bnVtKTsKKwlwZnJlZShkZXBzX2F0 dG51bV90b19pZHgpOworCisJYm1zX2ZyZWUoZGVwc19hdHRudW1zKTsKKwli bXNfZnJlZShjbGF1c2VfYXR0bnVtcyk7CisJYm1zX2ZyZWUoaW50ZXJzZWN0 X2F0dG51bXMpOworCisJcmV0dXJuIHJlZHVjZWRfY2xhdXNlczsKK30KKwor LyoKKyAqIENoZWNrIHRoYXQgdGhlcmUgYXJlIHN0YXRzIHdpdGggYXQgbGVh c3Qgb25lIG9mIHRoZSByZXF1ZXN0ZWQgdHlwZXMuCisgKi8KK3N0YXRpYyBi b29sCitoYXNfc3RhdHMoTGlzdCAqc3RhdHMsIGludCB0eXBlKQoreworCUxp c3RDZWxsICAgKnM7CisKKwlmb3JlYWNoIChzLCBzdGF0cykKKwl7CisJCU1W U3RhdGlzdGljSW5mbwkqc3RhdCA9IChNVlN0YXRpc3RpY0luZm8gKilsZmly c3Qocyk7CisKKwkJaWYgKCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVfRkRFUCkg JiYgc3RhdC0+ZGVwc19idWlsdCkKKwkJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIExvb2t1cHMgc3RhdHMgZm9y IGEgZ2l2ZW4gYmFzZXJlbC4KKyAqLworc3RhdGljIExpc3QgKgorZmluZF9z dGF0cyhQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpCit7CisJQXNz ZXJ0KHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcmVsaWRdICE9IE5VTEwpOwor CisJcmV0dXJuIHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcmVsaWRdLT5tdnN0 YXRsaXN0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZz dGF0cy9SRUFETUUuc3RhdHMgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L1JFQURNRS5zdGF0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hMzhlYTdiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMKQEAgLTAsMCArMSwzNiBAQAor TXVsdGl2YXJpYXRlIHN0YXRpc3Rpc3RpY3MKKz09PT09PT09PT09PT09PT09 PT09PT09PT09CisKK1doZW4gZXN0aW1hdGluZyB2YXJpb3VzIHF1YW50aXRp ZXMgKGUuZy4gY29uZGl0aW9uIHNlbGVjdGl2aXRpZXMpIHRoZSBkZWZhdWx0 CithcHByb2FjaCByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gb2YgaW5kZXBl bmRlbmNlLiBJbiBwcmFjdGljZSB0aGF0J3Mgb2Z0ZW4KK25vdCB0cnVlLCBy ZXN1bHRpbmcgaW4gZXN0aW1hdGlvbiBlcnJvcnMuCisKK011bHRpdmFyaWF0 ZSBzdGF0cyB0cmFjayBkaWZmZXJlbnQgdHlwZXMgb2YgZGVwZW5kZW5jaWVz IGJldHdlZW4gdGhlIGNvbHVtbnMsCitob3BlZnVsbHkgaW1wcm92aW5nIHRo ZSBlc3RpbWF0ZXMuCisKK0N1cnJlbnRseSB3ZSBvbmx5IGhhdmUgb25lIGtp bmQgb2YgbXVsdGl2YXJpYXRlIHN0YXRpc3RpY3MgLSBzb2Z0IGZ1bmN0aW9u YWwKK2RlcGVuZGVuY2llcywgYW5kIHdlIHVzZSBpdCB0byBpbXByb3ZlIGVz dGltYXRlcyBvZiBlcXVhbGl0eSBjbGF1c2VzLiBTZWUKK1JFQURNRS5kZXBl bmRlbmNpZXMgZm9yIGRldGFpbHMuCisKKworU2VsZWN0aXZpdHkgZXN0aW1h dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGVzdGltYXRp bmcgc2VsZWN0aXZpdHksIHdlIGFpbSB0byBhY2hpZXZlIHNldmVyYWwgdGhp bmdzOgorCisgICAgKGEpIG1heGltaXplIHRoZSBlc3RpbWF0ZSBhY2N1cmFj eQorCisgICAgKGIpIG1pbmltaXplIHRoZSBvdmVyaGVhZCwgZXNwZWNpYWxs eSB3aGVuIG5vIHN1aXRhYmxlIG11bHRpdmFyaWF0ZSBzdGF0cworICAgICAg ICBleGlzdCAoc28gaWYgeW91IGFyZSBub3QgdXNpbmcgbXVsdGl2YXJpYXRl IHN0YXRzLCB0aGVyZSdzIG5vIG92ZXJoZWFkKQorCitUaGlzIGNsYXVzZWxp c3Rfc2VsZWN0aXZpdHkoKSBwZXJmb3JtcyBzZXZlcmFsIGluZXhwZW5zaXZl IGNoZWNrcyBmaXJzdCwgYmVmb3JlCitldmVuIGF0dGVtcHRpbmcgdG8gZG8g dGhlIG1vcmUgZXhwZW5zaXZlIGVzdGltYXRpb24uCisKKyAgICAoMSkgY2hl Y2sgaWYgdGhlcmUgYXJlIG11bHRpdmFyaWF0ZSBzdGF0cyBvbiB0aGUgcmVs YXRpb24KKworICAgICgyKSBjaGVjayB0aGVyZSBhcmUgYXQgbGVhc3QgdHdv IGF0dHJpYnV0ZXMgcmVmZXJlbmNlZCBieSBjbGF1c2VzIGNvbXBhdGlibGUK KyAgICAgICAgd2l0aCBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcyAoZXF1YWxp dHkgY2xhdXNlcyBmb3IgZnVuYy4gZGVwZW5kZW5jaWVzKQorCisgICAgKDMp IHBlcmZvcm0gcmVkdWN0aW9uIG9mIGVxdWFsaXR5IGNsYXVzZXMgdXNpbmcg ZnVuYy4gZGVwZW5kZW5jaWVzCisKKyAgICAoNCkgZXN0aW1hdGUgdGhlIHJl ZHVjZWQgbGlzdCBvZiBjbGF1c2VzIHVzaW5nIHJlZ3VsYXIgc3RhdGlzdGlj cwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21t b24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKaW5k ZXggYTc1NWM0OS4uYmQyMDBiYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9jb21tb24uYworKysgYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2NvbW1vbi5jCkBAIC04NCw3ICs4NCw4IEBAIGJ1aWxkX212 X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBs ZSAqcm93cywKIAkJLyoKIAkJICogQW5hbHl6ZSBmdW5jdGlvbmFsIGRlcGVu ZGVuY2llcyBvZiBjb2x1bW5zLgogCQkgKi8KLQkJZGVwcyA9IGJ1aWxkX212 X2RlcGVuZGVuY2llcyhudW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMpOwor CQlpZiAoc3RhdC0+ZGVwc19lbmFibGVkKQorCQkJZGVwcyA9IGJ1aWxkX212 X2RlcGVuZGVuY2llcyhudW1yb3dzLCByb3dzLCBhdHRycywgc3RhdHMpOwog CiAJCS8qIHN0b3JlIHRoZSBoaXN0b2dyYW0gLyBNQ1YgbGlzdCBpbiB0aGUg Y2F0YWxvZyAqLwogCQl1cGRhdGVfbXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRl cHMsIGF0dHJzKTsKQEAgLTE2Myw2ICsxNjQsNyBAQCBsaXN0X212X3N0YXRz KE9pZCByZWxpZCkKIAogCQlpbmZvLT5tdm9pZCA9IEhlYXBUdXBsZUdldE9p ZChodHVwKTsKIAkJaW5mby0+c3Rha2V5cyA9IGJ1aWxkaW50MnZlY3Rvcihz dGF0cy0+c3Rha2V5cy52YWx1ZXMsIHN0YXRzLT5zdGFrZXlzLmRpbTEpOwor CQlpbmZvLT5kZXBzX2VuYWJsZWQgPSBzdGF0cy0+ZGVwc19lbmFibGVkOwog CQlpbmZvLT5kZXBzX2J1aWx0ID0gc3RhdHMtPmRlcHNfYnVpbHQ7CiAKIAkJ cmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIGluZm8pOwpAQCAtMjc0LDYgKzI3 Niw3IEBAIGNvbXBhcmVfc2NhbGFyc19wYXJ0aXRpb24oY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQogCXJldHVybiBBcHBseVNv cnRDb21wYXJhdG9yKGRhLCBmYWxzZSwgZGIsIGZhbHNlLCBzc3VwKTsKIH0K IAorCiAvKiBpbml0aWFsaXplIG11bHRpLWRpbWVuc2lvbmFsIHNvcnQgKi8K IE11bHRpU29ydFN1cHBvcnQKIG11bHRpX3NvcnRfaW5pdChpbnQgbmRpbXMp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2RlcGVu ZGVuY2llcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9kZXBlbmRl bmNpZXMuYwppbmRleCAyYTA2NGEwLi5jODBiYTMzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2RlcGVuZGVuY2llcy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvZGVwZW5kZW5jaWVzLmMKQEAg LTQzNSwzICs0MzUsMjcgQEAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3No b3coUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9URVhUX1AoY3N0 cmluZ190b190ZXh0KHJlc3VsdCkpOwogfQorCitNVkRlcGVuZGVuY2llcwor bG9hZF9tdl9kZXBlbmRlbmNpZXMoT2lkIG12b2lkKQoreworCWJvb2wJCWlz bnVsbCA9IGZhbHNlOworCURhdHVtCQlkZXBzOworCisJLyogUHJlcGFyZSB0 byBzY2FuIHBnX212X3N0YXRpc3RpYyBmb3IgZW50cmllcyBoYXZpbmcgaW5k cmVsaWQgPSB0aGlzIHJlbC4gKi8KKwlIZWFwVHVwbGUJaHR1cCA9IFNlYXJj aFN5c0NhY2hlMShNVlNUQVRPSUQsIE9iamVjdElkR2V0RGF0dW0obXZvaWQp KTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlGb3JtX3BnX212 X3N0YXRpc3RpYwltdnN0YXQgPSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdF VFNUUlVDVChodHVwKTsKKwlBc3NlcnQobXZzdGF0LT5kZXBzX2VuYWJsZWQg JiYgbXZzdGF0LT5kZXBzX2J1aWx0KTsKKyNlbmRpZgorCisJZGVwcyA9IFN5 c0NhY2hlR2V0QXR0cihNVlNUQVRPSUQsIGh0dXAsCisJCQkJCQkgICBBbnVt X3BnX212X3N0YXRpc3RpY19zdGFkZXBzLCAmaXNudWxsKTsKKworCUFzc2Vy dCghaXNudWxsKTsKKworCVJlbGVhc2VTeXNDYWNoZShodHVwKTsKKworCXJl dHVybiBkZXNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoRGF0dW1HZXRCeXRl YVAoZGVwcykpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv bXZzdGF0cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oCmluZGV4 IDdlYmQ5NjEuLmNjNDNhNzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL212c3RhdHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRz LmgKQEAgLTE3LDEyICsxNywyMCBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNp bmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKIAorLyoKKyAqIERlZ3JlZSBv ZiBob3cgbXVjaCBNQ1YgaXRlbSAvIGhpc3RvZ3JhbSBidWNrZXQgbWF0Y2hl cyBhIGNsYXVzZS4KKyAqIFRoaXMgaXMgdGhlbiBjb25zaWRlcmVkIHdoZW4g Y29tcHV0aW5nIHRoZSBzZWxlY3Rpdml0eS4KKyAqLworI2RlZmluZSBNVlNU QVRTX01BVENIX05PTkUJCTAJCS8qIG5vIG1hdGNoIGF0IGFsbCAqLworI2Rl ZmluZSBNVlNUQVRTX01BVENIX1BBUlRJQUwJMQkJLyogcGFydGlhbCBtYXRj aCAqLworI2RlZmluZSBNVlNUQVRTX01BVENIX0ZVTEwJCTIJCS8qIGZ1bGwg bWF0Y2ggKi8KIAogI2RlZmluZSBNVlNUQVRTX01BWF9ESU1FTlNJT05TCTgJ CS8qIG1heCBudW1iZXIgb2YgYXR0cmlidXRlcyAqLwogCi0vKiBBbiBhc3Nv Y2lhdGl2ZSBydWxlLCB0cmFja2luZyBbYSA9PiBiXSBkZXBlbmRlbmN5Lgot ICoKLSAqIFRPRE8gTWFrZSB0aGlzIHdvcmsgd2l0aCBtdWx0aXBsZSBjb2x1 bW5zIG9uIGJvdGggc2lkZXMuCisKKy8qCisgKiBGdW5jdGlvbmFsIGRlcGVu ZGVuY2llcywgdHJhY2tpbmcgY29sdW1uLWxldmVsIHJlbGF0aW9uc2hpcHMg KHZhbHVlcworICogaW4gb25lIGNvbHVtbiBkZXRlcm1pbmUgdmFsdWVzIGlu IGFub3RoZXIgb25lKS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgTVZEZXBlbmRl bmN5RGF0YSB7CiAJaW50MTYJYTsKQEAgLTQ4LDYgKzU2LDggQEAgdHlwZWRl ZiBNVkRlcGVuZGVuY2llc0RhdGEqIE1WRGVwZW5kZW5jaWVzOwogICogICAg ICBzdGF0cyBzcGVjaWZpZWQgdXNpbmcgZmxhZ3MgKG9yIHNvbWV0aGluZyBs aWtlIHRoYXQpLgogICovCiAKK01WRGVwZW5kZW5jaWVzIGxvYWRfbXZfZGVw ZW5kZW5jaWVzKE9pZCBtdm9pZCk7CisKIGJ5dGVhICogc2VyaWFsaXplX212 X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpOwog CiAvKiBkZXNlcmlhbGl6YXRpb24gb2Ygc3RhdHMgKHNlcmlhbGl6YXRpb24g aXMgcHJpdmF0ZSB0byBhbmFseXplKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9tdl9kZXBlbmRlbmNpZXMub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tdl9kZXBlbmRlbmNpZXMub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTk5OTcKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212 X2RlcGVuZGVuY2llcy5vdXQKQEAgLTAsMCArMSwxNzIgQEAKKy0tIGRhdGEg dHlwZSBwYXNzZWQgYnkgdmFsdWUKK0NSRUFURSBUQUJMRSBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyAoCisgICAgYSBJTlQsCisgICAgYiBJTlQsCisgICAg YyBJTlQKKyk7CistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJ Q1MgczEgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKHVua25vd25fY29s dW1uKSBXSVRIIChkZXBlbmRlbmNpZXMpOworRVJST1I6ICBjb2x1bW4gInVu a25vd25fY29sdW1uIiByZWZlcmVuY2VkIGluIHN0YXRpc3RpY3MgZG9lcyBu b3QgZXhpc3QKKy0tIHNpbmdsZSBjb2x1bW4KK0NSRUFURSBTVEFUSVNUSUNT IHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhKSBXSVRIIChkZXBl bmRlbmNpZXMpOworRVJST1I6ICBtdWx0aXZhcmlhdGUgc3RhdHMgcmVxdWly ZSAyIG9yIG1vcmUgY29sdW1ucworLS0gc2luZ2xlIGNvbHVtbiwgZHVwbGlj YXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMgKGEsYSkgV0lUSCAoZGVwZW5kZW5jaWVzKTsKK0VSUk9SOiAg ZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5pdGlv bgorLS0gdHdvIGNvbHVtbnMsIG9uZSBkdXBsaWNhdGVkCitDUkVBVEUgU1RB VElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYSwg YikgV0lUSCAoZGVwZW5kZW5jaWVzKTsKK0VSUk9SOiAgZHVwbGljYXRlIGNv bHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5pdGlvbgorLS0gdW5rbm93 biBvcHRpb24KK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxf ZGVwZW5kZW5jaWVzIChhLCBiLCBjKSBXSVRIICh1bmtub3duX29wdGlvbik7 CitFUlJPUjogIHVucmVjb2duaXplZCBTVEFUSVNUSUNTIG9wdGlvbiAidW5r bm93bl9vcHRpb24iCistLSBjb3JyZWN0IGNvbW1hbmQKK0NSRUFURSBTVEFU SVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiLCBj KSBXSVRIIChkZXBlbmRlbmNpZXMpOworLS0gcmFuZG9tIGRhdGEgKG5vIGZ1 bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQorSU5TRVJUIElOVE8gZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2Qo aSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwKSBzKGkpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsK K1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRz X2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3Rh dGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5j aWVzJzo6cmVnY2xhc3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19idWlsdCB8 IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93IAorLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyB0ICAgICAgICAgICAgfCBmICAgICAgICAgIHwgCisoMSByb3cpCisK K1RSVU5DQVRFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworLS0gYSA9PiBi LCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBmdW5j dGlvbmFsX2RlcGVuZGVuY2llczsKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRl cHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRl cHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0g J2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisgZGVwc19l bmFibGVkIHwgZGVwc19idWlsdCB8IHBnX212X3N0YXRzX2RlcGVuZGVuY2ll c19zaG93IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0ICAg ICAgICAgIHwgMSA9PiAyLCAxID0+IDMsIDIgPT4gMworKDEgcm93KQorCitU UlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKy0tIGEgPT4gYiwg YSA9PiBjCitJTlNFUlQgSU5UTyBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcwor ICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkvMjAwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzOworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVwc19idWlsdCwg cGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVwcykKKyAgRlJP TSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsKKyBkZXBzX2VuYWJsZWQgfCBk ZXBzX2J1aWx0IHwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgCist LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQgICAgICAgICAgfCAx ID0+IDIsIDEgPT4gMworKDEgcm93KQorCitUUlVOQ0FURSBmdW5jdGlvbmFs X2RlcGVuZGVuY2llczsKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRt YXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQg SU5UTyBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QgaS8x MDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5ERVggZmRlcHNfaWR4IE9OIGZ1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiKTsKK0FOQUxZWkUgZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXM7CitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBz X2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBz KQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdm dW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworIGRlcHNfZW5h YmxlZCB8IGRlcHNfYnVpbHQgfCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNf c2hvdyAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdCAgICAg ICAgICB8IDEgPT4gMiwgMSA9PiAzLCAyID0+IDMKKygxIHJvdykKKworRVhQ TEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAqIEZST00gZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXMgV0hFUkUgYSA9IDEwIEFORCBiID0gNTsKKyAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0 bWFwIEhlYXAgU2NhbiBvbiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcworICAg UmVjaGVjayBDb25kOiAoKGEgPSAxMCkgQU5EIChiID0gNSkpCisgICAtPiAg Qml0bWFwIEluZGV4IFNjYW4gb24gZmRlcHNfaWR4CisgICAgICAgICBJbmRl eCBDb25kOiAoKGEgPSAxMCkgQU5EIChiID0gNSkpCisoNCByb3dzKQorCitE Uk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworLS0gdmFybGVu YSB0eXBlICh0ZXh0KQorQ1JFQVRFIFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5k ZW5jaWVzICgKKyAgICBhIFRFWFQsCisgICAgYiBURVhULAorICAgIGMgVEVY VAorKTsKK0NSRUFURSBTVEFUSVNUSUNTIHMyIE9OIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzIChhLCBiLCBjKSBXSVRIIChkZXBlbmRlbmNpZXMpOworLS0g cmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQorSU5T RVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNU IG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBmdW5jdGlv bmFsX2RlcGVuZGVuY2llczsKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNf YnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMp CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisgZGVwc19lbmFi bGVkIHwgZGVwc19idWlsdCB8IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19z aG93IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCBmICAgICAg ICAgIHwgCisoMSByb3cpCisKK1RSVU5DQVRFIGZ1bmN0aW9uYWxfZGVwZW5k ZW5jaWVzOworLS0gYSA9PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElO VE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAs IGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBz KGkpOworQU5BTFlaRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKK1NFTEVD VCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQsIHBnX212X3N0YXRzX2RlcGVu ZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZST00gcGdfbXZfc3RhdGlzdGlj IFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6 cmVnY2xhc3M7CisgZGVwc19lbmFibGVkIHwgZGVwc19idWlsdCB8IHBnX212 X3N0YXRzX2RlcGVuZGVuY2llc19zaG93IAorLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgICAgfCB0ICAgICAgICAgIHwgMSA9PiAyLCAxID0+IDMsIDIg PT4gMworKDEgcm93KQorCitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVu Y2llczsKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcworICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkv MjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFM WVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworU0VMRUNUIGRlcHNfZW5h YmxlZCwgZGVwc19idWlsdCwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3No b3coc3RhZGVwcykKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3Rh cmVsaWQgPSAnZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsK KyBkZXBzX2VuYWJsZWQgfCBkZXBzX2J1aWx0IHwgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX3Nob3cgCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQgICAgICAgICAg ICB8IHQgICAgICAgICAgfCAxID0+IDIsIDEgPT4gMworKDEgcm93KQorCitU UlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKy0tIGNoZWNrIGV4 cGxhaW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGlu ZGV4IHNjYW4pCitJTlNFUlQgSU5UTyBmdW5jdGlvbmFsX2RlcGVuZGVuY2ll cworICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5E RVggZmRlcHNfaWR4IE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBi KTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXM7CitTRUxFQ1Qg ZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRl bmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBX SEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJl Z2NsYXNzOworIGRlcHNfZW5hYmxlZCB8IGRlcHNfYnVpbHQgfCBwZ19tdl9z dGF0c19kZXBlbmRlbmNpZXNfc2hvdyAKKy0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAg ICAgICAgICAgIHwgdCAgICAgICAgICB8IDEgPT4gMiwgMSA9PiAzLCAyID0+ IDMKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAq IEZST00gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgV0hFUkUgYSA9ICcxMCcg QU5EIGIgPSAnNSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEJpdG1hcCBIZWFwIFNjYW4gb24gZnVuY3Rpb25hbF9kZXBlbmRlbmNp ZXMKKyAgIFJlY2hlY2sgQ29uZDogKChhID0gJzEwJzo6dGV4dCkgQU5EIChi ID0gJzUnOjp0ZXh0KSkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBm ZGVwc19pZHgKKyAgICAgICAgIEluZGV4IENvbmQ6ICgoYSA9ICcxMCc6OnRl eHQpIEFORCAoYiA9ICc1Jzo6dGV4dCkpCisoNCByb3dzKQorCitEUk9QIFRB QkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworLS0gTlVMTCB2YWx1ZXMg KG1peCBvZiBpbnQgYW5kIHRleHQgY29sdW1ucykKK0NSRUFURSBUQUJMRSBm dW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoCisgICAgYSBJTlQsCisgICAgYiBU RVhULAorICAgIGMgSU5ULAorICAgIGQgVEVYVAorKTsKK0NSRUFURSBTVEFU SVNUSUNTIHMzIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBiLCBj LCBkKSBXSVRIIChkZXBlbmRlbmNpZXMpOworSU5TRVJUIElOVE8gZnVuY3Rp b25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUCisgICAgICAgICBtb2Qo aSwgMTAwKSwKKyAgICAgICAgIChDQVNFIFdIRU4gbW9kKGksIDIwMCkgPSAw IFRIRU4gTlVMTCBFTFNFIG1vZChpLDIwMCkgRU5EKSwKKyAgICAgICAgIG1v ZChpLCA0MDApLAorICAgICAgICAgKENBU0UgV0hFTiBtb2QoaSwgMzAwKSA9 IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksNjAwKSBFTkQpCisgICAgIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworU0VMRUNUIGRlcHNfZW5hYmxlZCwgZGVw c19idWlsdCwgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3coc3RhZGVw cykKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAn ZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMnOjpyZWdjbGFzczsKKyBkZXBzX2Vu YWJsZWQgfCBkZXBzX2J1aWx0IHwgICAgIHBnX212X3N0YXRzX2RlcGVuZGVu Y2llc19zaG93ICAgICAgCistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgICB8IHQgICAgICAgICAgfCAyID0+IDEsIDMgPT4gMSwgMyA9 PiAyLCA0ID0+IDEsIDQgPT4gMgorKDEgcm93KQorCitEUk9QIFRBQkxFIGZ1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUKaW5kZXggYmVjMDMxNi4uNGYyZmZiOCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0x MTAsMyArMTEwLDYgQEAgdGVzdDogZXZlbnRfdHJpZ2dlcgogCiAjIHJ1biBz dGF0cyBieSBpdHNlbGYgYmVjYXVzZSBpdHMgZGVsYXkgbWF5IGJlIGluc3Vm ZmljaWVudCB1bmRlciBoZWF2eSBsb2FkCiB0ZXN0OiBzdGF0cworCisjIHJ1 biB0ZXN0cyBvZiBtdWx0aXZhcmlhdGUgc3RhdHMKK3Rlc3Q6IG12X2RlcGVu ZGVuY2llcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf c2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQpp bmRleCA3ZTliMzE5Li4wOTdhMDRmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3NlcmlhbF9zY2hlZHVsZQpAQCAtMTYyLDMgKzE2Miw0IEBAIHRlc3Q6IHdp dGgKIHRlc3Q6IHhtbAogdGVzdDogZXZlbnRfdHJpZ2dlcgogdGVzdDogc3Rh dHMKK3Rlc3Q6IG12X2RlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvbXZfZGVwZW5kZW5jaWVzLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL212X2RlcGVuZGVuY2llcy5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkZWE0ZAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X2RlcGVuZGVuY2llcy5z cWwKQEAgLTAsMCArMSwxNTAgQEAKKy0tIGRhdGEgdHlwZSBwYXNzZWQgYnkg dmFsdWUKK0NSRUFURSBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAo CisgICAgYSBJTlQsCisgICAgYiBJTlQsCisgICAgYyBJTlQKKyk7CisKKy0t IHVua25vd24gY29sdW1uCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5j dGlvbmFsX2RlcGVuZGVuY2llcyAodW5rbm93bl9jb2x1bW4pIFdJVEggKGRl cGVuZGVuY2llcyk7CisKKy0tIHNpbmdsZSBjb2x1bW4KK0NSRUFURSBTVEFU SVNUSUNTIHMxIE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhKSBXSVRI IChkZXBlbmRlbmNpZXMpOworCistLSBzaW5nbGUgY29sdW1uLCBkdXBsaWNh dGVkCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyAoYSxhKSBXSVRIIChkZXBlbmRlbmNpZXMpOworCistLSB0d28g Y29sdW1ucywgb25lIGR1cGxpY2F0ZWQKK0NSRUFURSBTVEFUSVNUSUNTIHMx IE9OIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzIChhLCBhLCBiKSBXSVRIIChk ZXBlbmRlbmNpZXMpOworCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRFIFNU QVRJU1RJQ1MgczEgT04gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMgKGEsIGIs IGMpIFdJVEggKHVua25vd25fb3B0aW9uKTsKKworLS0gY29ycmVjdCBjb21t YW5kCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBmdW5jdGlvbmFsX2RlcGVu ZGVuY2llcyAoYSwgYiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzKTsKKworLS0g cmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzKQorSU5T RVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNU IG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBk ZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFk ZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9 ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworCitUUlVO Q0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gYSA9PiBiLCBh ID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRl bmNpZXMKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdl bmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFibGVkLCBk ZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFk ZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9 ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOworCitUUlVO Q0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gYSA9PiBiLCBh ID0+IGMKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisg ICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXM7CisKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNfYnVpbHQs IHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMpCisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1bmN0aW9u YWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisKK1RSVU5DQVRFIGZ1bmN0 aW9uYWxfZGVwZW5kZW5jaWVzOworCistLSBjaGVjayBleHBsYWluIChleHBl Y3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBzY2FuKQor SU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAgU0VM RUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMDAwKSBzKGkpOworQ1JFQVRFIElOREVYIGZkZXBzX2lk eCBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYik7CitBTkFMWVpF IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFi bGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hv dyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFy ZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOwor CitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBmdW5jdGlv bmFsX2RlcGVuZGVuY2llcyBXSEVSRSBhID0gMTAgQU5EIGIgPSA1OworCitE Uk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCistLSB2YXJs ZW5hIHR5cGUgKHRleHQpCitDUkVBVEUgVEFCTEUgZnVuY3Rpb25hbF9kZXBl bmRlbmNpZXMgKAorICAgIGEgVEVYVCwKKyAgICBiIFRFWFQsCisgICAgYyBU RVhUCispOworCitDUkVBVEUgU1RBVElTVElDUyBzMiBPTiBmdW5jdGlvbmFs X2RlcGVuZGVuY2llcyAoYSwgYiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzKTsK KworLS0gcmFuZG9tIGRhdGEgKG5vIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVz KQorSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAgICAg U0VMRUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGksIDIzKSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpF IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFi bGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hv dyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFy ZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOwor CitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gYSA9 PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXMKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpF IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVwc19lbmFi bGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfc2hv dyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFy ZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2NsYXNzOwor CitUUlVOQ0FURSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsKKworLS0gYSA9 PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5j aWVzCisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgZnVuY3Rpb25h bF9kZXBlbmRlbmNpZXM7CisKK1NFTEVDVCBkZXBzX2VuYWJsZWQsIGRlcHNf YnVpbHQsIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19zaG93KHN0YWRlcHMp CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ2Z1 bmN0aW9uYWxfZGVwZW5kZW5jaWVzJzo6cmVnY2xhc3M7CisKK1RSVU5DQVRF IGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCistLSBjaGVjayBleHBsYWlu IChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBz Y2FuKQorSU5TRVJUIElOVE8gZnVuY3Rpb25hbF9kZXBlbmRlbmNpZXMKKyAg ICAgU0VMRUNUIGkvMTAwMDAsIGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSBzKGkpOworQ1JFQVRFIElOREVYIGZk ZXBzX2lkeCBPTiBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoYSwgYik7CitB TkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOworCitTRUxFQ1QgZGVw c19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0c19kZXBlbmRlbmNp ZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVS RSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyc6OnJlZ2Ns YXNzOworCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBm dW5jdGlvbmFsX2RlcGVuZGVuY2llcyBXSEVSRSBhID0gJzEwJyBBTkQgYiA9 ICc1JzsKKworRFJPUCBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llczsK KworLS0gTlVMTCB2YWx1ZXMgKG1peCBvZiBpbnQgYW5kIHRleHQgY29sdW1u cykKK0NSRUFURSBUQUJMRSBmdW5jdGlvbmFsX2RlcGVuZGVuY2llcyAoCisg ICAgYSBJTlQsCisgICAgYiBURVhULAorICAgIGMgSU5ULAorICAgIGQgVEVY VAorKTsKKworQ1JFQVRFIFNUQVRJU1RJQ1MgczMgT04gZnVuY3Rpb25hbF9k ZXBlbmRlbmNpZXMgKGEsIGIsIGMsIGQpIFdJVEggKGRlcGVuZGVuY2llcyk7 CisKK0lOU0VSVCBJTlRPIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzCisgICAg IFNFTEVDVAorICAgICAgICAgbW9kKGksIDEwMCksCisgICAgICAgICAoQ0FT RSBXSEVOIG1vZChpLCAyMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSwy MDApIEVORCksCisgICAgICAgICBtb2QoaSwgNDAwKSwKKyAgICAgICAgIChD QVNFIFdIRU4gbW9kKGksIDMwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChp LDYwMCkgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw KSBzKGkpOworCitBTkFMWVpFIGZ1bmN0aW9uYWxfZGVwZW5kZW5jaWVzOwor CitTRUxFQ1QgZGVwc19lbmFibGVkLCBkZXBzX2J1aWx0LCBwZ19tdl9zdGF0 c19kZXBlbmRlbmNpZXNfc2hvdyhzdGFkZXBzKQorICBGUk9NIHBnX212X3N0 YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdmdW5jdGlvbmFsX2RlcGVuZGVu Y2llcyc6OnJlZ2NsYXNzOworCitEUk9QIFRBQkxFIGZ1bmN0aW9uYWxfZGVw ZW5kZW5jaWVzOwotLSAKMi4xLjAKCg== --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename="0004-multivariate-MCV-lists.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0004-multivariate-MCV-lists.patch"; charset="UTF-8" RnJvbSBjMTVmYTAzZGJjMGJlMDBmODBmMTI1NDViMTQ2OGE4Y2E1NWE1N2Y1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE2 OjUyOjE1ICswMjAwClN1YmplY3Q6IFtQQVRDSCA0LzldIG11bHRpdmFyaWF0 ZSBNQ1YgbGlzdHMKCi0gZXh0ZW5kcyB0aGUgcGdfbXZfc3RhdGlzdGljIGNh dGFsb2cgKGFkZCAnbWN2JyBmaWVsZHMpCi0gYnVpbGRpbmcgdGhlIE1DViBs aXN0cyBkdXJpbmcgQU5BTFlaRQotIHNpbXBsZSBlc3RpbWF0aW9uIHdoaWxl IHBsYW5uaW5nIHRoZSBxdWVyaWVzCgpJbmNsdWRlcyByZWdyZXNzaW9uIHRl c3RzLCBtb3N0bHkgZXF1YWwgdG8gcmVncmVzc2lvbiB0ZXN0cyBmb3IKZnVu Y3Rpb25hbCBkZXBlbmRlbmNpZXMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfc3RhdGlzdGljcy5zZ21sIHwgICAxOCArCiBzcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgfCAgICA0ICstCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAgICAgICAgfCAgIDQ1ICstCiBz cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAgfCAgICAy ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jICB8 ICA4MjkgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgIDQgKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgICAgICB8ICAgIDIgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLm1jdiAgICB8ICAxMzcg KysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMg IHwgICA4OSArKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9u LmMgICAgICB8ICAxMDQgKystCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5oICAgICAgfCAgIDExICstCiBzcmMvYmFja2VuZC91dGlscy9t dnN0YXRzL21jdi5jICAgICAgICAgfCAxMDk0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAg ICAgICAgICAgICB8ICAgMjUgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf bXZfc3RhdGlzdGljLmggICB8ICAgMTggKy0KIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5oICAgICAgICAgICB8ICAgIDQgKwogc3JjL2luY2x1ZGUv bm9kZXMvcmVsYXRpb24uaCAgICAgICAgICAgIHwgICAgMiArCiBzcmMvaW5j bHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAgICAgfCAgIDY5ICstCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5vdXQgICAgfCAgMjA3 ICsrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQg ICAgIHwgICAgNCArLQogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hl ZHVsZSAgICAgIHwgICAgMiArLQogc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf c2NoZWR1bGUgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9tdl9tY3Yuc3FsICAgICAgICAgfCAgMTc4ICsrKysrCiAyMiBmaWxlcyBj aGFuZ2VkLCAyNzc2IGluc2VydGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv UkVBRE1FLm1jdgogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvbWN2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5vdXQKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9tY3Yuc3FsCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCmlu ZGV4IGE4NmVhZTMuLjE5M2U0YjAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKQEAgLTEzMiw2ICsxMzIs MjQgQEAgQ1JFQVRFIFNUQVRJU1RJQ1MgWyBJRiBOT1QgRVhJU1RTIF0gPHJl cGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnN0YXRpc3RpY3NfbmEKICAg ICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgIDx2YXJs aXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+bWF4X21jdl9pdGVtczwv PiAoPHR5cGU+aW50ZWdlcjwvPik8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgor ICAgICA8cGFyYT4KKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIE1DViBsaXN0 IGl0ZW1zLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwv dmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PjxsaXRlcmFsPm1jdjwvPiAoPHR5cGU+Ym9vbGVhbjwvPik8L3Rlcm0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEVuYWJsZXMgTUNW IGxpc3QgZm9yIHRoZSBzdGF0aXN0aWNzLgorICAgICA8L3BhcmE+CisgICAg PC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCiAgICA8L3Zhcmlh YmxlbGlzdD4KIAogICA8L3JlZnNlY3QyPgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IGI4YTI2NGUuLjJkNTcw ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3Zp ZXdzLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3 cy5zcWwKQEAgLTE2NSw3ICsxNjUsOSBAQCBDUkVBVEUgVklFVyBwZ19tdl9z dGF0cyBBUwogICAgICAgICBTLnN0YW5hbWUgQVMgc3RhbmFtZSwKICAgICAg ICAgUy5zdGFrZXlzIEFTIGF0dG51bXMsCiAgICAgICAgIGxlbmd0aChTLnN0 YWRlcHMpIGFzIGRlcHNieXRlcywKLSAgICAgICAgcGdfbXZfc3RhdHNfZGVw ZW5kZW5jaWVzX2luZm8oUy5zdGFkZXBzKSBhcyBkZXBzaW5mbworICAgICAg ICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5mbyhTLnN0YWRlcHMpIGFz IGRlcHNpbmZvLAorICAgICAgICBsZW5ndGgoUy5zdGFtY3YpIEFTIG1jdmJ5 dGVzLAorICAgICAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oUy5zdGFt Y3YpIEFTIG1jdmluZm8KICAgICBGUk9NIChwZ19tdl9zdGF0aXN0aWMgUyBK T0lOIHBnX2NsYXNzIEMgT04gKEMub2lkID0gUy5zdGFyZWxpZCkpCiAgICAg ICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2UgTiBPTiAoTi5vaWQgPSBDLnJl bG5hbWVzcGFjZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3N0YXRzY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNj bWRzLmMKaW5kZXggODRhOGIxMy4uOTBiZmFlZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc3RhdHNjbWRzLmMKQEAgLTEzNiw3ICsxMzYsMTMgQEAg Q3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJT2Jq ZWN0QWRkcmVzcyBwYXJlbnRvYmplY3QsIGNoaWxkb2JqZWN0OwogCiAJLyog YnkgZGVmYXVsdCBidWlsZCBub3RoaW5nICovCi0JYm9vbCAJYnVpbGRfZGVw ZW5kZW5jaWVzID0gZmFsc2U7CisJYm9vbCAJYnVpbGRfZGVwZW5kZW5jaWVz ID0gZmFsc2UsCisJCQlidWlsZF9tY3YgPSBmYWxzZTsKKworCWludDMyIAlt YXhfbWN2X2l0ZW1zID0gLTE7CisKKwkvKiBvcHRpb25zIHJlcXVpcmVkIGJl Y2F1c2Ugb2Ygb3RoZXIgb3B0aW9ucyAqLworCWJvb2wJcmVxdWlyZV9tY3Yg PSBmYWxzZTsKIAogCUFzc2VydChJc0Eoc3RtdCwgQ3JlYXRlU3RhdHNTdG10 KSk7CiAKQEAgLTIxMiw2ICsyMTgsMjkgQEAgQ3JlYXRlU3RhdGlzdGljcyhD cmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAKIAkJaWYgKHN0cmNtcChvcHQtPmRl Zm5hbWUsICJkZXBlbmRlbmNpZXMiKSA9PSAwKQogCQkJYnVpbGRfZGVwZW5k ZW5jaWVzID0gZGVmR2V0Qm9vbGVhbihvcHQpOworCQllbHNlIGlmIChzdHJj bXAob3B0LT5kZWZuYW1lLCAibWN2IikgPT0gMCkKKwkJCWJ1aWxkX21jdiA9 IGRlZkdldEJvb2xlYW4ob3B0KTsKKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ ZGVmbmFtZSwgIm1heF9tY3ZfaXRlbXMiKSA9PSAwKQorCQl7CisJCQltYXhf bWN2X2l0ZW1zID0gZGVmR2V0SW50MzIob3B0KTsKKworCQkJLyogdGhpcyBv cHRpb24gcmVxdWlyZXMgJ21jdicgdG8gYmUgZW5hYmxlZCAqLworCQkJcmVx dWlyZV9tY3YgPSB0cnVlOworCisJCQkvKiBzYW5pdHkgY2hlY2sgKi8KKwkJ CWlmIChtYXhfbWN2X2l0ZW1zIDwgTVZTVEFUX01DVkxJU1RfTUlOX0lURU1T KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJtYXggbnVtYmVyIG9m IE1DViBpdGVtcyBtdXN0IGJlIGF0IGxlYXN0ICVkIiwKKwkJCQkJCQkJTVZT VEFUX01DVkxJU1RfTUlOX0lURU1TKSkpOworCisJCQllbHNlIGlmIChtYXhf bWN2X2l0ZW1zID4gTVZTVEFUX01DVkxJU1RfTUFYX0lURU1TKQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9F UlJPUiksCisJCQkJCQkgZXJybXNnKCJtYXggbnVtYmVyIG9mIE1DViBpdGVt cyBpcyAlZCIsCisJCQkJCQkJCU1WU1RBVF9NQ1ZMSVNUX01BWF9JVEVNUykp KTsKKworCQl9CiAJCWVsc2UKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTIyMCwxMCArMjQ5 LDE2IEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpzdG10 KQogCX0KIAogCS8qIGNoZWNrIHRoYXQgYXQgbGVhc3Qgc29tZSBzdGF0aXN0 aWNzIHdlcmUgcmVxdWVzdGVkICovCi0JaWYgKCEgYnVpbGRfZGVwZW5kZW5j aWVzKQorCWlmICghIChidWlsZF9kZXBlbmRlbmNpZXMgfHwgYnVpbGRfbWN2 KSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1NZ TlRBWF9FUlJPUiksCisJCQkJIGVycm1zZygibm8gc3RhdGlzdGljcyB0eXBl IChkZXBlbmRlbmNpZXMsIG1jdikgd2FzIHJlcXVlc3RlZCIpKSk7CisKKwkv KiBub3cgZG8gc29tZSBjaGVja2luZyBvZiB0aGUgb3B0aW9ucyAqLworCWlm IChyZXF1aXJlX21jdiAmJiAoISBidWlsZF9tY3YpKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJ CQkgZXJybXNnKCJubyBzdGF0aXN0aWNzIHR5cGUgKGRlcGVuZGVuY2llcykg d2FzIHJlcXVlc3RlZCIpKSk7CisJCQkJIGVycm1zZygib3B0aW9uICdtY3Yn IGlzIHJlcXVpcmVkIGJ5IG90aGVyIG9wdGlvbnMocykiKSkpOwogCiAJLyog c29ydCB0aGUgYXR0bnVtcyBhbmQgYnVpbGQgaW50MnZlY3RvciAqLwogCXFz b3J0KGF0dG51bXMsIG51bWNvbHMsIHNpemVvZihpbnQxNiksIGNvbXBhcmVf aW50MTYpOwpAQCAtMjQzLDggKzI3OCwxMiBAQCBDcmVhdGVTdGF0aXN0aWNz KENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkKIAl2YWx1ZXNbQW51bV9wZ19tdl9z dGF0aXN0aWNfc3Rha2V5cyAtMV0gPSBQb2ludGVyR2V0RGF0dW0oc3Rha2V5 cyk7CiAKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19lbmFi bGVkIC0xXSA9IEJvb2xHZXREYXR1bShidWlsZF9kZXBlbmRlbmNpZXMpOwor CXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfZW5hYmxlZCAgLTFd ID0gQm9vbEdldERhdHVtKGJ1aWxkX21jdik7CisKKwl2YWx1ZXNbQW51bV9w Z19tdl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcyAgICAtMV0gPSBJbnQzMkdl dERhdHVtKG1heF9tY3ZfaXRlbXMpOwogCiAJbnVsbHNbQW51bV9wZ19tdl9z dGF0aXN0aWNfc3RhZGVwcyAgLTFdID0gdHJ1ZTsKKwludWxsc1tBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFtY3YgICAtMV0gPSB0cnVlOwogCiAJLyogaW5z ZXJ0IHRoZSB0dXBsZSBpbnRvIHBnX212X3N0YXRpc3RpYyAqLwogCW12c3Rh dHJlbCA9IGhlYXBfb3BlbihNdlN0YXRpc3RpY1JlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMv b3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5k ZXggNDc0ZDJjNy4uZTM5ODNmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvb3V0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRm dW5jcy5jCkBAIC0xOTc3LDkgKzE5NzcsMTEgQEAgX291dE1WU3RhdGlzdGlj SW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgTVZTdGF0aXN0aWNJbmZvICpu b2RlKQogCiAJLyogZW5hYmxlZCBzdGF0aXN0aWNzICovCiAJV1JJVEVfQk9P TF9GSUVMRChkZXBzX2VuYWJsZWQpOworCVdSSVRFX0JPT0xfRklFTEQobWN2 X2VuYWJsZWQpOwogCiAJLyogYnVpbHQvYXZhaWxhYmxlIHN0YXRpc3RpY3Mg Ki8KIAlXUklURV9CT09MX0ZJRUxEKGRlcHNfYnVpbHQpOworCVdSSVRFX0JP T0xfRklFTEQobWN2X2J1aWx0KTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKaW5k ZXggODA3MDhmZS4uOTc3Zjg4ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKQEAgLTE1LDYgKzE1LDcgQEAK ICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL3N5 c2F0dHIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJu b2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNl cy5oIgpAQCAtNDcsMjMgKzQ4LDUxIEBAIHN0YXRpYyB2b2lkIGFkZFJhbmdl Q2xhdXNlKFJhbmdlUXVlcnlDbGF1c2UgKipycWxpc3QsIE5vZGUgKmNsYXVz ZSwKIAkJCSAgIGJvb2wgdmFyb25sZWZ0LCBib29sIGlzTFRzZWwsIFNlbGVj dGl2aXR5IHMyKTsKIAogI2RlZmluZQkJTVZfQ0xBVVNFX1RZUEVfRkRFUAkJ MHgwMQorI2RlZmluZQkJTVZfQ0xBVVNFX1RZUEVfTUNWCQkweDAyCiAKLXN0 YXRpYyBib29sIGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKE5vZGUgKmNsYXVz ZSwgSW5kZXggcmVsaWQsIEF0dHJOdW1iZXIgKmF0dG51bSk7CitzdGF0aWMg Ym9vbCBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShOb2RlICpjbGF1c2UsIElu ZGV4IHJlbGlkLCBCaXRtYXBzZXQgKiphdHRudW1zLAorCQkJCQkJCSBpbnQg dHlwZSk7CiAKLXN0YXRpYyBCaXRtYXBzZXQgICpjb2xsZWN0X212X2F0dG51 bXMoTGlzdCAqY2xhdXNlcywgSW5kZXggcmVsaWQpOworc3RhdGljIEJpdG1h cHNldCAgKmNvbGxlY3RfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2VzLCBJbmRl eCByZWxpZCwgaW50IHR5cGUpOwogCi1zdGF0aWMgaW50IGNvdW50X212X2F0 dG51bXMoTGlzdCAqY2xhdXNlcywgSW5kZXggcmVsaWQpOworc3RhdGljIGlu dCBjb3VudF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlk LCBpbnQgdHlwZSk7CiAKIHN0YXRpYyBpbnQgY291bnRfdmFybm9zKExpc3Qg KmNsYXVzZXMsIEluZGV4ICpyZWxpZCk7CiAKIHN0YXRpYyBMaXN0ICpjbGF1 c2VsaXN0X2FwcGx5X2RlcGVuZGVuY2llcyhQbGFubmVySW5mbyAqcm9vdCwg TGlzdCAqY2xhdXNlcywKIAkJCQkJCQkJCUluZGV4IHJlbGlkLCBMaXN0ICpz dGF0cyk7CiAKK3N0YXRpYyBNVlN0YXRpc3RpY0luZm8gKmNob29zZV9tdl9z dGF0aXN0aWNzKExpc3QgKm12c3RhdHMsIEJpdG1hcHNldCAqYXR0bnVtcyk7 CisKK3N0YXRpYyBMaXN0ICpjbGF1c2VsaXN0X212X3NwbGl0KFBsYW5uZXJJ bmZvICpyb290LCBJbmRleCByZWxpZCwKKwkJCQkJCQkJIExpc3QgKmNsYXVz ZXMsIExpc3QgKiptdmNsYXVzZXMsCisJCQkJCQkJCSBNVlN0YXRpc3RpY0lu Zm8gKm12c3RhdHMsIGludCB0eXBlcyk7CisKK3N0YXRpYyBTZWxlY3Rpdml0 eSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290 LAorCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICpt dnN0YXRzKTsKKworc3RhdGljIFNlbGVjdGl2aXR5IGNsYXVzZWxpc3RfbXZf c2VsZWN0aXZpdHlfbWN2bGlzdChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJ CQkJCUxpc3QgKmNsYXVzZXMsIE1WU3RhdGlzdGljSW5mbyAqbXZzdGF0cywK KwkJCQkJCQkJCWJvb2wgKmZ1bGxtYXRjaCwgU2VsZWN0aXZpdHkgKmxvd3Nl bCk7CisKK3N0YXRpYyBpbnQgdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJCQkJ aW50MnZlY3RvciAqc3Rha2V5cywgTUNWTGlzdCBtY3ZsaXN0LAorCQkJCQkJ CQkJaW50IG5tYXRjaGVzLCBjaGFyICogbWF0Y2hlcywKKwkJCQkJCQkJCVNl bGVjdGl2aXR5ICpsb3dzZWwsIGJvb2wgKmZ1bGxtYXRjaCwKKwkJCQkJCQkJ CWJvb2wgaXNfb3IpOworCiBzdGF0aWMgYm9vbCBoYXNfc3RhdHMoTGlzdCAq c3RhdHMsIGludCB0eXBlKTsKIAogc3RhdGljIExpc3QgKiBmaW5kX3N0YXRz KFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCk7CiAKIAorLyogdXNl ZCBmb3IgbWVyZ2luZyBiaXRtYXBzIC0gQU5EIChtaW4pLCBPUiAobWF4KSAq LworI2RlZmluZSBNQVgoeCwgeSkgKCgoeCkgPiAoeSkpID8gKHgpIDogKHkp KQorI2RlZmluZSBNSU4oeCwgeSkgKCgoeCkgPCAoeSkpID8gKHgpIDogKHkp KQorCisjZGVmaW5lIFVQREFURV9SRVNVTFQobSxyLGlzb3IpCVwKKwkobSkg PSAoaXNvcikgPyAoTUFYKG0scikpIDogKE1JTihtLHIpKQorCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgogICoJCVJPVVRJTkVTIFRPIENP TVBVVEUgU0VMRUNUSVZJVElFUwogICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCkBAIC04OSwxMSArMTE4LDEzIEBAIHN0YXRpYyBMaXN0ICog ZmluZF9zdGF0cyhQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpOwog ICogdG8gdmVyaWZ5IHRoYXQgc3VpdGFibGUgbXVsdGl2YXJpYXRlIHN0YXRp c3RpY3MgZXhpc3QuCiAgKgogICogSWYgd2UgaWRlbnRpZnkgc3VjaCBtdWx0 aXZhcmlhdGUgc3RhdGlzdGljcyBhcHBseSwgd2UgdHJ5IHRvIGFwcGx5IHRo ZW0uCi0gKiBDdXJyZW50bHkgd2Ugb25seSBoYXZlIChzb2Z0KSBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcywgc28gd2UgdHJ5IHRvIHJlZHVjZQotICogdGhl IGxpc3Qgb2YgY2xhdXNlcy4KICAqCi0gKiBUaGVuIHdlIHJlbW92ZSB0aGUg Y2xhdXNlcyBlc3RpbWF0ZWQgdXNpbmcgbXVsdGl2YXJpYXRlIHN0YXRzLCBh bmQgcHJvY2VzcwotICogdGhlIHJlc3Qgb2YgdGhlIGNsYXVzZXMgdXNpbmcg dGhlIHJlZ3VsYXIgcGVyLWNvbHVtbiBzdGF0cy4KKyAqIEZpcnN0IHdlIHRy eSB0byByZWR1Y2UgdGhlIGxpc3Qgb2YgY2xhdXNlcyBieSBhcHBseWluZyAo c29mdCkgZnVuY3Rpb25hbAorICogZGVwZW5kZW5jaWVzLCBhbmQgdGhlbiB3 ZSB0cnkgdG8gZXN0aW1hdGUgdGhlIHNlbGVjdGl2aXR5IG9mIHRoZSByZWR1 Y2VkCisgKiBsaXN0IG9mIGNsYXVzZXMgdXNpbmcgdGhlIG11bHRpdmFyaWF0 ZSBNQ1YgbGlzdC4KKyAqCisgKiBGaW5hbGx5IHdlIHJlbW92ZSB0aGUgcG9y dGlvbiBvZiBjbGF1c2VzIGVzdGltYXRlZCB1c2luZyBtdWx0aXZhcmlhdGUg c3RhdHMsCisgKiBhbmQgcHJvY2VzcyB0aGUgcmVzdCBvZiB0aGUgY2xhdXNl cyB1c2luZyB0aGUgcmVndWxhciBwZXItY29sdW1uIHN0YXRzLgogICoKICAq IEN1cnJlbnRseSwgdGhlIG9ubHkgZXh0cmEgc21hcnRzIHdlIGhhdmUgaXMg dG8gcmVjb2duaXplICJyYW5nZSBxdWVyaWVzIiwKICAqIHN1Y2ggYXMgIngg PiAzNCBBTkQgeCA8IDQyIi4gIENsYXVzZXMgYXJlIHJlY29nbml6ZWQgYXMg cG9zc2libGUgcmFuZ2UKQEAgLTE3MCwxMiArMjAxLDQ2IEBAIGNsYXVzZWxp c3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJICogdGhhdCBu ZWVkIHRvIGJlIGVzdGltYXRlZCBieSBvdGhlciB0eXBlcyBvZiBzdGF0cyAo TUNWLCBoaXN0b2dyYW1zIGV0YykuCiAJICovCiAJaWYgKGhhc19zdGF0cyhz dGF0cywgTVZfQ0xBVVNFX1RZUEVfRkRFUCkgJiYKLQkJKGNvdW50X212X2F0 dG51bXMoY2xhdXNlcywgcmVsaWQpID49IDIpKQorCQkoY291bnRfbXZfYXR0 bnVtcyhjbGF1c2VzLCByZWxpZCwgTVZfQ0xBVVNFX1RZUEVfRkRFUCkgPj0g MikpCiAJewogCQljbGF1c2VzID0gY2xhdXNlbGlzdF9hcHBseV9kZXBlbmRl bmNpZXMocm9vdCwgY2xhdXNlcywgcmVsaWQsIHN0YXRzKTsKIAl9CiAKIAkv KgorCSAqIENoZWNrIHRoYXQgdGhlcmUgYXJlIHN0YXRpc3RpY3Mgd2l0aCBN Q1YgbGlzdCBvciBoaXN0b2dyYW0sIGFuZCBhbHNvIHRoZQorCSAqIG51bWJl ciBvZiBhdHRyaWJ1dGVzIGNvdmVyZWQgYnkgdGhlc2UgdHlwZXMgb2Ygc3Rh dGlzdGljcy4KKwkgKgorCSAqIElmIHRoZXJlIGFyZSBubyBzdWNoIHN0YXRz IG9yIG5vdCBlbm91Z2ggYXR0cmlidXRlcywgZG9uJ3Qgd2FzdGUgdGltZQor CSAqIHdpdGggdGhlIG11bHRpdmFyaWF0ZSBjb2RlIGFuZCBzaW1wbHkgc2tp cCB0byBlc3RpbWF0aW9uIHVzaW5nIHRoZQorCSAqIHJlZ3VsYXIgcGVyLWNv bHVtbiBzdGF0cy4KKwkgKi8KKwlpZiAoaGFzX3N0YXRzKHN0YXRzLCBNVl9D TEFVU0VfVFlQRV9NQ1YpICYmCisJCShjb3VudF9tdl9hdHRudW1zKGNsYXVz ZXMsIHJlbGlkLCBNVl9DTEFVU0VfVFlQRV9NQ1YpID49IDIpKQorCXsKKwkJ LyogY29sbGVjdCBhdHRyaWJ1dGVzIGZyb20gdGhlIGNvbXBhdGlibGUgY29u ZGl0aW9ucyAqLworCQlCaXRtYXBzZXQgKm12YXR0bnVtcyA9IGNvbGxlY3Rf bXZfYXR0bnVtcyhjbGF1c2VzLCByZWxpZCwgTVZfQ0xBVVNFX1RZUEVfTUNW KTsKKworCQkvKiBhbmQgc2VhcmNoIGZvciB0aGUgc3RhdGlzdGljIGNvdmVy aW5nIHRoZSBtb3N0IGF0dHJpYnV0ZXMgKi8KKwkJTVZTdGF0aXN0aWNJbmZv ICptdnN0YXQgPSBjaG9vc2VfbXZfc3RhdGlzdGljcyhzdGF0cywgbXZhdHRu dW1zKTsKKworCQlpZiAobXZzdGF0ICE9IE5VTEwpCS8qIHdlIGhhdmUgYSBt YXRjaGluZyBzdGF0cyAqLworCQl7CisJCQkvKiBjbGF1c2VzIGNvbXBhdGli bGUgd2l0aCBtdWx0aS12YXJpYXRlIHN0YXRzICovCisJCQlMaXN0CSptdmNs YXVzZXMgPSBOSUw7CisKKwkJCS8qIHNwbGl0IHRoZSBjbGF1c2VsaXN0IGlu dG8gcmVndWxhciBhbmQgbXYtY2xhdXNlcyAqLworCQkJY2xhdXNlcyA9IGNs YXVzZWxpc3RfbXZfc3BsaXQocm9vdCwgcmVsaWQsIGNsYXVzZXMsICZtdmNs YXVzZXMsCisJCQkJCQkJCQkJICBtdnN0YXQsIE1WX0NMQVVTRV9UWVBFX01D Vik7CisKKwkJCS8qIHdlJ3ZlIGNob3NlbiB0aGUgaGlzdG9ncmFtIHRvIG1h dGNoIHRoZSBjbGF1c2VzICovCisJCQlBc3NlcnQobXZjbGF1c2VzICE9IE5J TCk7CisKKwkJCS8qIGNvbXB1dGUgdGhlIG11bHRpdmFyaWF0ZSBzdGF0cyAq LworCQkJczEgKj0gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eShyb290LCBt dmNsYXVzZXMsIG12c3RhdCk7CisJCX0KKwl9CisKKwkvKgogCSAqIEluaXRp YWwgc2NhbiBvdmVyIGNsYXVzZXMuICBBbnl0aGluZyB0aGF0IGRvZXNuJ3Qg bG9vayBsaWtlIGEgcG90ZW50aWFsCiAJICogcmFuZ2VxdWVyeSBjbGF1c2Ug Z2V0cyBtdWx0aXBsaWVkIGludG8gczEgYW5kIGZvcmdvdHRlbi4gQW55dGhp bmcgdGhhdAogCSAqIGRvZXMgZ2V0cyBpbnNlcnRlZCBpbnRvIGFuIHJxbGlz dCBlbnRyeS4KQEAgLTgzMiw2ICs4OTcsNjkgQEAgY2xhdXNlX3NlbGVjdGl2 aXR5KFBsYW5uZXJJbmZvICpyb290LAogCXJldHVybiBzMTsKIH0KIAorCisv KgorICogZXN0aW1hdGUgc2VsZWN0aXZpdHkgb2YgY2xhdXNlcyB1c2luZyBt dWx0aXZhcmlhdGUgc3RhdGlzdGljCisgKgorICogUGVyZm9ybSBlc3RpbWF0 aW9uIG9mIHRoZSBjbGF1c2VzIHVzaW5nIGEgTUNWIGxpc3QuCisgKgorICog VGhpcyBhc3N1bWVzIGFsbCB0aGUgY2xhdXNlcyBhcmUgY29tcGF0aWJsZSB3 aXRoIHRoZSBzZWxlY3RlZCBzdGF0aXN0aWNzCisgKiAoZS5nLiBvbmx5IHJl ZmVyZW5jZSBjb2x1bW5zIGNvdmVyZWQgYnkgdGhlIHN0YXRpc3RpY3MsIHVz ZSBzdXBwb3J0ZWQKKyAqIG9wZXJhdG9yLCBldGMuKS4KKyAqCisgKiBUT0RP IFdlIG1heSBzdXBwb3J0IHNvbWUgYWRkaXRpb25hbCBjb25kaXRpb25zLCBt b3N0IGltcG9ydGFudGx5IHRob3NlCisgKiAgICAgIG1hdGNoaW5nIG11bHRp cGxlIGNvbHVtbnMgKGUuZy4gImEgPSBiIiBvciAiYSA8IGIiKS4KKyAqCisg KiBUT0RPIENsYW1wIHRoZSBzZWxlY3Rpdml0eSBieSBtaW4gb2YgdGhlIHBl ci1jbGF1c2Ugc2VsZWN0aXZpdGllcyAoaS5lLiB0aGUKKyAqICAgICAgc2Vs ZWN0aXZpdHkgb2YgdGhlIG1vc3QgcmVzdHJpY3RpdmUgY2xhdXNlKSwgYmVj YXVzZSB0aGF0J3MgdGhlIG1heGltdW0KKyAqICAgICAgd2UgY2FuIGV2ZXIg Z2V0IGZyb20gQU5EZWQgbGlzdCBvZiBjbGF1c2VzLiBUaGlzIG1heSBwcm9i YWJseSBwcmV2ZW50CisgKiAgICAgIGlzc3VlcyB3aXRoIGhpdHRpbmcgdG9v IG1hbnkgYnVja2V0cyBhbmQgbG93IHByZWNpc2lvbiBoaXN0b2dyYW1zLgor ICoKKyAqIFRPRE8gV2UgbWF5IHJlbWVtYmVyIHRoZSBsb3dlc3QgZnJlcXVl bmN5IGluIHRoZSBNQ1YgbGlzdCwgYW5kIHRoZW4gbGF0ZXIgdXNlCisgKiAg ICAgIGl0IGFzIGEgdXBwZXIgYm91bmRhcnkgZm9yIHRoZSBzZWxlY3Rpdml0 eSAoaGFkIHRoZXJlIGJlZW4gYSBtb3JlCisgKiAgICAgIGZyZXF1ZW50IGl0 ZW0sIGl0J2QgYmUgaW4gdGhlIE1DViBsaXN0KS4gVGhpcyBtaWdodCBpbXBy b3ZlIGNhc2VzIHdpdGgKKyAqICAgICAgbG93LWRldGFpbCBoaXN0b2dyYW1z LgorICoKKyAqIFRPRE8gV2UgbWF5IGFsc28gZGVyaXZlIHNvbWUgYWRkaXRp b25hbCBib3VuZGFyaWVzIGZvciB0aGUgc2VsZWN0aXZpdHkgZnJvbQorICog ICAgICB0aGUgTUNWIGxpc3QsIGJlY2F1c2UKKyAqCisgKiAgICAgIChhKSBp ZiB3ZSBoYXZlIGEgImZ1bGwgZXF1YWxpdHkgY29uZGl0aW9uIiAob25lIGVx dWFsaXR5IGNvbmRpdGlvbiBvbgorICogICAgICAgICAgZWFjaCBjb2x1bW4g b2YgdGhlIHN0YXRpc3RpYykgYW5kIHdlIGZvdW5kIGEgbWF0Y2ggaW4gdGhl IE1DViBsaXN0LAorICogICAgICAgICAgdGhlbiB0aGlzIGlzIHRoZSBmaW5h bCBzZWxlY3Rpdml0eSAoYW5kIHByZXR0eSBhY2N1cmF0ZSksCisgKgorICog ICAgICAoYikgaWYgd2UgaGF2ZSBhICJmdWxsIGVxdWFsaXR5IGNvbmRpdGlv biIgYW5kIHdlIGhhdmVuJ3QgZm91bmQgYSBtYXRjaAorICogICAgICAgICAg aW4gdGhlIE1DViBsaXN0LCB0aGVuIHRoZSBzZWxlY3Rpdml0eSBpcyBiZWxv dyB0aGUgbG93ZXN0IGZyZXF1ZW5jeQorICogICAgICAgICAgZm91bmQgaW4g dGhlIE1DViBsaXN0LAorICoKKyAqIFRPRE8gV2hlbiBhcHBseWluZyB0aGUg Y2xhdXNlcyB0byB0aGUgaGlzdG9ncmFtL01DViBsaXN0LCB3ZSBjYW4gZG8K KyAqICAgICAgdGhhdCBmcm9tIHRoZSBtb3N0IHNlbGVjdGl2ZSBjbGF1c2Vz IGZpcnN0LCBiZWNhdXNlIHRoYXQnbGwKKyAqICAgICAgZWxpbWluYXRlIHRo ZSBidWNrZXRzL2l0ZW1zIHNvb25lciAoc28gd2UnbGwgYmUgYWJsZSB0byBz a2lwCisgKiAgICAgIHRoZW0gd2l0aG91dCBpbnNwZWN0aW9uLCB3aGljaCBp cyBtb3JlIGV4cGVuc2l2ZSkuIEJ1dCB0aGlzCisgKiAgICAgIHJlcXVpcmVz IHJlYWxseSBrbm93aW5nIHRoZSBwZXItY2xhdXNlIHNlbGVjdGl2aXRpZXMg aW4gYWR2YW5jZSwKKyAqICAgICAgYW5kIHRoYXQncyBub3Qgd2hhdCB3ZSBk byBub3cuCisgKi8KK3N0YXRpYyBTZWxlY3Rpdml0eQorY2xhdXNlbGlzdF9t dl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNl cywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzKQoreworCWJvb2wgZnVsbG1h dGNoID0gZmFsc2U7CisKKwkvKgorCSAqIExvd2VzdCBmcmVxdWVuY3kgaW4g dGhlIE1DViBsaXN0IChtYXkgYmUgdXNlZCBhcyBhbiB1cHBlciBib3VuZAor CSAqIGZvciBmdWxsIGVxdWFsaXR5IGNvbmRpdGlvbnMgdGhhdCBkaWQgbm90 IG1hdGNoIGFueSBNQ1YgaXRlbSkuCisJICovCisJU2VsZWN0aXZpdHkgbWN2 X2xvdyA9IDAuMDsKKworCS8qIFRPRE8gRXZhbHVhdGUgc2ltcGxlIDFEIHNl bGVjdGl2aXRpZXMsIHVzZSB0aGUgc21hbGxlc3Qgb25lIGFzCisJICogICAg ICBhbiB1cHBlciBib3VuZCwgcHJvZHVjdCBhcyBsb3dlciBib3VuZCwgYW5k IHNvcnQgdGhlCisJICogICAgICBjbGF1c2VzIGluIGFzY2VuZGluZyBvcmRl ciBieSBzZWxlY3Rpdml0eSAodG8gb3B0aW1pemUgdGhlCisJICogICAgICBN Q1YvaGlzdG9ncmFtIGV2YWx1YXRpb24pLgorCSAqLworCisJLyogRXZhbHVh dGUgdGhlIE1DViBzZWxlY3Rpdml0eSAqLworCXJldHVybiBjbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X21jdmxpc3Qocm9vdCwgY2xhdXNlcywgbXZzdGF0 cywKKwkJCQkJCQkJCQkgICAmZnVsbG1hdGNoLCAmbWN2X2xvdyk7Cit9CisK IC8qCiAgKiBQdWxsIHZhcmF0dG5vcyBmcm9tIHRoZSBjbGF1c2VzLCBzaW1p bGFybHkgdG8gcHVsbF92YXJhdHRub3MoKSBidXQ6CiAgKgpAQCAtODY5LDI4 ICs5OTcsMjYgQEAgZ2V0X3ZhcmF0dG5vcyhOb2RlICogbm9kZSwgSW5kZXgg cmVsaWQpCiAgKiBDb2xsZWN0IGF0dHJpYnV0ZXMgZnJvbSBtdi1jb21wYXRp YmxlIGNsYXVzZXMuCiAgKi8KIHN0YXRpYyBCaXRtYXBzZXQgKgotY29sbGVj dF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkKQorY29s bGVjdF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJlbGlkLCBp bnQgdHlwZXMpCiB7CiAJQml0bWFwc2V0ICAqYXR0bnVtcyA9IE5VTEw7CiAJ TGlzdENlbGwgICAqbDsKIAogCS8qCi0JICogV2FsayB0aHJvdWdoIHRoZSBj bGF1c2VzIGFuZCBpZGVudGlmeSB0aGUgb25lcyB3ZSBjYW4gZXN0aW1hdGUK LQkgKiB1c2luZyBtdWx0aXZhcmlhdGUgc3RhdHMsIGFuZCByZW1lbWJlciB0 aGUgcmVsaWQvY29sdW1ucy4gV2UnbGwKLQkgKiB0aGVuIGNyb3NzLWNoZWNr IGlmIHdlIGhhdmUgc3VpdGFibGUgc3RhdHMsIGFuZCBvbmx5IGlmIG5lZWRl ZAotCSAqIHdlJ2xsIHNwbGl0IHRoZSBjbGF1c2VzIGludG8gbXVsdGl2YXJp YXRlIGFuZCByZWd1bGFyIGxpc3RzLgorCSAqIFdhbGsgdGhyb3VnaCB0aGUg Y2xhdXNlcyBhbmQgaWRlbnRpZnkgdGhlIG9uZXMgd2UgY2FuIGVzdGltYXRl IHVzaW5nCisJICogbXVsdGl2YXJpYXRlIHN0YXRzLCBhbmQgcmVtZW1iZXIg dGhlIHJlbGlkL2NvbHVtbnMuIFdlJ2xsIHRoZW4KKwkgKiBjcm9zcy1jaGVj ayBpZiB3ZSBoYXZlIHN1aXRhYmxlIHN0YXRzLCBhbmQgb25seSBpZiBuZWVk ZWQgd2UnbGwgc3BsaXQKKwkgKiB0aGUgY2xhdXNlcyBpbnRvIG11bHRpdmFy aWF0ZSBhbmQgcmVndWxhciBsaXN0cy4KIAkgKgotCSAqIEZvciBub3cgd2Un cmUgb25seSBpbnRlcmVzdGVkIGluIFJlc3RyaWN0SW5mbyBub2RlcyB3aXRo IG5lc3RlZAotCSAqIE9wRXhwciwgdXNpbmcgZWl0aGVyIGEgcmFuZ2Ugb3Ig ZXF1YWxpdHkuCisJICogRm9yIG5vdyB3ZSdyZSBvbmx5IGludGVyZXN0ZWQg aW4gUmVzdHJpY3RJbmZvIG5vZGVzIHdpdGggbmVzdGVkIE9wRXhwciwKKwkg KiB1c2luZyBlaXRoZXIgYSByYW5nZSBvciBlcXVhbGl0eS4KIAkgKi8KIAlm b3JlYWNoIChsLCBjbGF1c2VzKQogCXsKLQkJQXR0ck51bWJlciBhdHRudW07 CiAJCU5vZGUJICAgKmNsYXVzZSA9IChOb2RlICopIGxmaXJzdChsKTsKIAot CQkvKiBpZ25vcmUgdGhlIHJlc3VsdCBmb3Igbm93IC0gd2Ugb25seSBuZWVk IHRoZSBpbmZvICovCi0JCWlmIChjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShj bGF1c2UsIHJlbGlkLCAmYXR0bnVtKSkKLQkJCWF0dG51bXMgPSBibXNfYWRk X21lbWJlcihhdHRudW1zLCBhdHRudW0pOworCQkvKiBpZ25vcmUgdGhlIHJl c3VsdCBoZXJlIC0gd2Ugb25seSBuZWVkIHRoZSBhdHRudW1zICovCisJCWNs YXVzZV9pc19tdl9jb21wYXRpYmxlKGNsYXVzZSwgcmVsaWQsICZhdHRudW1z LCB0eXBlcyk7CiAJfQogCiAJLyoKQEAgLTkxMSwxMCArMTAzNywxMCBAQCBj b2xsZWN0X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5kZXggcmVsaWQp CiAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gY2xhdXNl cyBjb21wYXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0YXRzLgogICovCiBz dGF0aWMgaW50Ci1jb3VudF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIElu ZGV4IHJlbGlkKQorY291bnRfbXZfYXR0bnVtcyhMaXN0ICpjbGF1c2VzLCBJ bmRleCByZWxpZCwgaW50IHR5cGUpCiB7CiAJaW50IGM7Ci0JQml0bWFwc2V0 ICphdHRudW1zID0gY29sbGVjdF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlk KTsKKwlCaXRtYXBzZXQgKmF0dG51bXMgPSBjb2xsZWN0X212X2F0dG51bXMo Y2xhdXNlcywgcmVsaWQsIHR5cGUpOwogCiAJYyA9IGJtc19udW1fbWVtYmVy cyhhdHRudW1zKTsKIApAQCAtOTQ0LDkgKzEwNzAsMTgzIEBAIGNvdW50X3Zh cm5vcyhMaXN0ICpjbGF1c2VzLCBJbmRleCAqcmVsaWQpCiAKIAlyZXR1cm4g Y250OwogfQorIAorLyoKKyAqIFdlJ3JlIGxvb2tpbmcgZm9yIHN0YXRpc3Rp Y3MgbWF0Y2hpbmcgYXQgbGVhc3QgMiBhdHRyaWJ1dGVzLCByZWZlcmVuY2Vk IGluCisgKiBjbGF1c2VzIGNvbXBhdGlibGUgd2l0aCBtdWx0aXZhcmlhdGUg c3RhdGlzdGljcy4gVGhlIGN1cnJlbnQgc2VsZWN0aW9uCisgKiBjcml0ZXJp YSBpcyB2ZXJ5IHNpbXBsZSAtIHdlIGNob29zZSB0aGUgc3RhdGlzdGljcyBy ZWZlcmVuY2luZyB0aGUgbW9zdAorICogYXR0cmlidXRlcy4KKyAqCisgKiBJ ZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RhdGlzdGljcyByZWZlcmVuY2luZyB0 aGUgc2FtZSBudW1iZXIgb2YgY29sdW1ucworICogKGZyb20gdGhlIGNsYXVz ZXMpLCB0aGUgb25lIHdpdGggbGVzcyBzb3VyY2UgY29sdW1ucyAoYXMgbGlz dGVkIGluIHRoZQorICogQUREIFNUQVRJU1RJQ1Mgd2hlbiBjcmVhdGluZyB0 aGUgc3RhdGlzdGljcykgd2lucy4gRWxzZSB0aGUgZmlyc3Qgb25lIHdpbnMu CisgKgorICogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGNyaXRlcmlhLCBhbmQg aGFzIHNldmVyYWwgd2Vha25lc3NlczoKKyAqCisgKiAoYSkgZG9lcyBub3Qg Y29uc2lkZXIgdGhlIGFjY3VyYWN5IG9mIHRoZSBzdGF0aXN0aWNzCisgKgor ICogICAgIElmIHRoZXJlIGFyZSB0d28gaGlzdG9ncmFtcyBidWlsdCBvbiB0 aGUgc2FtZSBzZXQgb2YgY29sdW1ucywgYnV0IG9uZQorICogICAgIGhhcyAx MDAgYnVja2V0cyBhbmQgdGhlIG90aGVyIG9uZSBoYXMgMTAwMCBidWNrZXRz ICh0aHVzIGxpa2VseQorICogICAgIHByb3ZpZGluZyBiZXR0ZXIgZXN0aW1h dGVzKSwgdGhpcyBpcyBub3QgY3VycmVudGx5IGNvbnNpZGVyZWQuCisgKgor ICogKGIpIGRvZXMgbm90IGNvbnNpZGVyIHRoZSB0eXBlIG9mIHN0YXRpc3Rp Y3MKKyAqCisgKiAgICAgSWYgdGhlcmUgYXJlIHRocmVlIHN0YXRpc3RpY3Mg LSBvbmUgY29udGFpbmluZyBqdXN0IGEgTUNWIGxpc3QsIGFub3RoZXIKKyAq ICAgICBvbmUgd2l0aCBqdXN0IGEgaGlzdG9ncmFtIGFuZCBhIHRoaXJkIG9u ZSB3aXRoIGJvdGgsIHdlIHRyZWF0IHRoZW0gZXF1YWxseS4KKyAqCisgKiAo YykgZG9lcyBub3QgY29uc2lkZXIgdGhlIG51bWJlciBvZiBjbGF1c2VzCisg KgorICogICAgIEFzIGV4cGxhaW5lZCwgb25seSB0aGUgbnVtYmVyIG9mIHJl ZmVyZW5jZWQgYXR0cmlidXRlcyBjb3VudHMsIHNvIGlmCisgKiAgICAgdGhl cmUgYXJlIG11bHRpcGxlIGNsYXVzZXMgb24gYSBzaW5nbGUgYXR0cmlidXRl LCB0aGlzIHN0aWxsIGNvdW50cyBhcworICogICAgIGEgc2luZ2xlIGF0dHJp YnV0ZS4KKyAqCisgKiAoZCkgZG9lcyBub3QgY29uc2lkZXIgdHlwZSBvZiBj b25kaXRpb24KKyAqCisgKiAgICAgU29tZSBjbGF1c2VzIG1heSB3b3JrIGJl dHRlciB3aXRoIHNvbWUgc3RhdGlzdGljcyAtIGZvciBleGFtcGxlIGVxdWFs aXR5CisgKiAgICAgY2xhdXNlcyBwcm9iYWJseSB3b3JrIGJldHRlciB3aXRo IE1DViBsaXN0cyB0aGFuIHdpdGggaGlzdG9ncmFtcy4gQnV0CisgKiAgICAg SVMgW05PVF0gTlVMTCBjb25kaXRpb25zIG1heSBvZnRlbiB3b3JrIGJldHRl ciB3aXRoIGhpc3RvZ3JhbXMgKHRoYW5rcworICogICAgIHRvIE5VTEwtYnVj a2V0cykuCisgKgorICogU28gZm9yIGV4YW1wbGUgd2l0aCBmaXZlIFdIRVJF IGNvbmRpdGlvbnMKKyAqCisgKiAgICAgV0hFUkUgKGEgPSAxKSBBTkQgKGIg PSAxKSBBTkQgKGMgPSAxKSBBTkQgKGQgPSAxKSBBTkQgKGUgPSAxKQorICoK KyAqIGFuZCBzdGF0aXN0aWNzIG9uIChhLGIpLCAoYSxiLGUpIGFuZCAoYSxi LGMsZCksIHRoZSBsYXN0IG9uZSB3aWxsIGJlIHNlbGVjdGVkCisgKiBhcyBp dCByZWZlcmVuY2VzIHRoZSBtb3N0IGNvbHVtbnMuCisgKgorICogT25jZSB3 ZSBoYXZlIHNlbGVjdGVkIHRoZSBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcywg d2Ugc3BsaXQgdGhlIGxpc3Qgb2YKKyAqIGNsYXVzZXMgaW50byB0d28gcGFy dHMgLSBjb25kaXRpb25zIHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUg c2VsZWN0ZWQKKyAqIHN0YXRzLCBhbmQgY29uZGl0aW9ucyBhcmUgZXN0aW1h dGVkIHVzaW5nIHNpbXBsZSBzdGF0aXN0aWNzLgorICoKKyAqIEZyb20gdGhl IGV4YW1wbGUgYWJvdmUsIGNvbmRpdGlvbnMKKyAqCisgKiAgICAgKGEgPSAx KSBBTkQgKGIgPSAxKSBBTkQgKGMgPSAxKSBBTkQgKGQgPSAxKQorICoKKyAq IHdpbGwgYmUgZXN0aW1hdGVkIHVzaW5nIHRoZSBtdWx0aXZhcmlhdGUgc3Rh dGlzdGljcyAoYSxiLGMsZCkgd2hpbGUgdGhlIGxhc3QKKyAqIGNvbmRpdGlv biAoZSA9IDEpIHdpbGwgZ2V0IGVzdGltYXRlZCB1c2luZyB0aGUgcmVndWxh ciBvbmVzLgorICoKKyAqIFRoZXJlIGFyZSB2YXJpb3VzIGFsdGVybmF0aXZl IHNlbGVjdGlvbiBjcml0ZXJpYSAoZS5nLiBjb3VudGluZyBjb25kaXRpb25z CisgKiBpbnN0ZWFkIG9mIGp1c3QgcmVmZXJlbmNlZCBhdHRyaWJ1dGVzKSwg YnV0IGV2ZW50dWFsbHkgdGhlIGJlc3Qgb3B0aW9uIHNob3VsZAorICogYmUg dG8gY29tYmluZSBtdWx0aXBsZSBzdGF0aXN0aWNzLiBCdXQgdGhhdCdzIG11 Y2ggaGFyZGVyIHRvIGRvIGNvcnJlY3RseS4KKyAqCisgKiBUT0RPIFNlbGVj dCBtdWx0aXBsZSBzdGF0aXN0aWNzIGFuZCBjb21iaW5lIHRoZW0gd2hlbiBj b21wdXRpbmcgdGhlIGVzdGltYXRlLgorICoKKyAqIFRPRE8gVGhpcyB3aWxs IHByb2JhYmx5IGhhdmUgdG8gY29uc2lkZXIgY29tcGF0aWJpbGl0eSBvZiBj bGF1c2VzLCBiZWNhdXNlCisgKiAgICAgICdkZXBlbmRlbmNpZXMnIHdpbGwg cHJvYmFibHkgd29yayBvbmx5IHdpdGggZXF1YWxpdHkgY2xhdXNlcy4KKyAq Lworc3RhdGljIE1WU3RhdGlzdGljSW5mbyAqCitjaG9vc2VfbXZfc3RhdGlz dGljcyhMaXN0ICpzdGF0cywgQml0bWFwc2V0ICphdHRudW1zKQoreworCWlu dCBpOworCUxpc3RDZWxsICAgKmxjOworCisJTVZTdGF0aXN0aWNJbmZvICpj aG9pY2UgPSBOVUxMOworCisJaW50IGN1cnJlbnRfbWF0Y2hlcyA9IDE7CQkJ CQkJLyogZ29hbCAjMTogbWF4aW1pemUgKi8KKwlpbnQgY3VycmVudF9kaW1z ID0gKE1WU1RBVFNfTUFYX0RJTUVOU0lPTlMrMSk7CS8qIGdvYWwgIzI6IG1p bmltaXplICovCisKKwkvKgorCSAqIFdhbGsgdGhyb3VnaCB0aGUgc3RhdGlz dGljcyAoc2ltcGxlIGFycmF5IHdpdGggbm12c3RhdHMgZWxlbWVudHMpIGFu ZCBmb3IKKwkgKiBlYWNoIG9uZSBjb3VudCB0aGUgcmVmZXJlbmNlZCBhdHRy aWJ1dGVzIChlbmNvZGVkIGluIHRoZSAnYXR0bnVtcycgYml0bWFwKS4KKwkg Ki8KKwlmb3JlYWNoIChsYywgc3RhdHMpCisJeworCQlNVlN0YXRpc3RpY0lu Zm8gKmluZm8gPSAoTVZTdGF0aXN0aWNJbmZvICopbGZpcnN0KGxjKTsKKwor CQkvKiBjb2x1bW5zIG1hdGNoaW5nIHRoaXMgc3RhdGlzdGljcyAqLworCQlp bnQgbWF0Y2hlcyA9IDA7CisKKwkJaW50MnZlY3RvciAqIGF0dHJzID0gaW5m by0+c3Rha2V5czsKKwkJaW50CW51bWF0dHJzID0gYXR0cnMtPmRpbTE7CisK KwkJLyogc2tpcCBkZXBlbmRlbmNpZXMtb25seSBzdGF0cyAqLworCQlpZiAo ISBpbmZvLT5tY3ZfYnVpbHQpCisJCQljb250aW51ZTsKKworCQkvKiBjb3Vu dCBjb2x1bW5zIGNvdmVyZWQgYnkgdGhlIGhpc3RvZ3JhbSAqLworCQlmb3Ig KGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKKwkJCWlmIChibXNfaXNfbWVt YmVyKGF0dHJzLT52YWx1ZXNbaV0sIGF0dG51bXMpKQorCQkJCW1hdGNoZXMr KzsKKworCQkvKgorCQkgKiBVc2UgdGhpcyBzdGF0aXN0aWNzIHdoZW4gaXQg aW1wcm92ZXMgdGhlIG51bWJlciBvZiBtYXRjaGVzIG9yCisJCSAqIHdoZW4g aXQgbWF0Y2hlcyB0aGUgc2FtZSBudW1iZXIgb2YgYXR0cmlidXRlcyBidXQg aXMgc21hbGxlci4KKwkJICovCisJCWlmICgobWF0Y2hlcyA+IGN1cnJlbnRf bWF0Y2hlcykgfHwKKwkJCSgobWF0Y2hlcyA9PSBjdXJyZW50X21hdGNoZXMp ICYmIChjdXJyZW50X2RpbXMgPiBudW1hdHRycykpKQorCQl7CisJCQljaG9p Y2UgPSBpbmZvOworCQkJY3VycmVudF9tYXRjaGVzID0gbWF0Y2hlczsKKwkJ CWN1cnJlbnRfZGltcyA9IG51bWF0dHJzOworCQl9CisJfQorCisJcmV0dXJu IGNob2ljZTsKK30KKworCisvKgorICogVGhpcyBzcGxpdHMgdGhlIGNsYXVz ZXMgbGlzdCBpbnRvIHR3byBwYXJ0cyAtIG9uZSBjb250YWluaW5nIGNsYXVz ZXMgdGhhdAorICogd2lsbCBiZSBldmFsdWF0ZWQgdXNpbmcgdGhlIGNob3Nl biBzdGF0aXN0aWNzLCBhbmQgdGhlIHJlbWFpbmluZyBjbGF1c2VzCisgKiAo ZWl0aGVyIG5vbi1tdmNvbXBhdGlibGUsIG9yIG5vdCByZWxhdGVkIHRvIHRo ZSBoaXN0b2dyYW0pLgorICovCitzdGF0aWMgTGlzdCAqCitjbGF1c2VsaXN0 X212X3NwbGl0KFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCwKKwkJ CQkJTGlzdCAqY2xhdXNlcywgTGlzdCAqKm12Y2xhdXNlcywKKwkJCQkJTVZT dGF0aXN0aWNJbmZvICptdnN0YXRzLCBpbnQgdHlwZXMpCit7CisJaW50IGk7 CisJTGlzdENlbGwgKmw7CisJTGlzdAkgKm5vbl9tdmNsYXVzZXMgPSBOSUw7 CisKKwkvKiBGSVhNRSBpcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gZ2V0IGlu Zm8gb24gaW50MnZlY3Rvcj8gKi8KKwlpbnQydmVjdG9yICogYXR0cnMgPSBt dnN0YXRzLT5zdGFrZXlzOworCWludAludW1hdHRycyA9IG12c3RhdHMtPnN0 YWtleXMtPmRpbTE7CisKKwlCaXRtYXBzZXQgKm12YXR0bnVtcyA9IE5VTEw7 CisKKwkvKiBidWlsZCBiaXRtYXAgb2YgYXR0cmlidXRlcywgc28gd2UgY2Fu IGRvIGJtc19pc19zdWJzZXQgbGF0ZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwg bnVtYXR0cnM7IGkrKykKKwkJbXZhdHRudW1zID0gYm1zX2FkZF9tZW1iZXIo bXZhdHRudW1zLCBhdHRycy0+dmFsdWVzW2ldKTsKKworCS8qIGVyYXNlIHRo ZSBsaXN0IG9mIG12LWNvbXBhdGlibGUgY2xhdXNlcyAqLworCSptdmNsYXVz ZXMgPSBOSUw7CisKKwlmb3JlYWNoIChsLCBjbGF1c2VzKQorCXsKKwkJYm9v bAkJbWF0Y2ggPSBmYWxzZTsJLyogYnkgZGVmYXVsdCBub3QgbXYtY29tcGF0 aWJsZSAqLworCQlCaXRtYXBzZXQJKmF0dG51bXMgPSBOVUxMOworCQlOb2Rl CSAgICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobCk7CisKKwkJaWYgKGNs YXVzZV9pc19tdl9jb21wYXRpYmxlKGNsYXVzZSwgcmVsaWQsICZhdHRudW1z LCB0eXBlcykpCisJCXsKKwkJCS8qIGFyZSBhbGwgdGhlIGF0dHJpYnV0ZXMg cGFydCBvZiB0aGUgc2VsZWN0ZWQgc3RhdHM/ICovCisJCQlpZiAoYm1zX2lz X3N1YnNldChhdHRudW1zLCBtdmF0dG51bXMpKQorCQkJCW1hdGNoID0gdHJ1 ZTsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUg c2VsZWN0ZWQgc3RhdHMsIHNvIHB1dCBpdCB0byB0aGUgbGlzdCBvZgorCQkg KiBtdi1jb21wYXRpYmxlIGNsYXVzZXMuIE90aGVyd2lzZSwga2VlcCBpdCBp biB0aGUgbGlzdCBvZiAncmVndWxhcicKKwkJICogY2xhdXNlcyAodGhhdCBt YXkgYmUgc2VsZWN0ZWQgbGF0ZXIpLgorCQkgKi8KKwkJaWYgKG1hdGNoKQor CQkJKm12Y2xhdXNlcyA9IGxhcHBlbmQoKm12Y2xhdXNlcywgY2xhdXNlKTsK KwkJZWxzZQorCQkJbm9uX212Y2xhdXNlcyA9IGxhcHBlbmQobm9uX212Y2xh dXNlcywgY2xhdXNlKTsKKwl9CisKKwkvKgorCSAqIFBlcmZvcm0gcmVndWxh ciBlc3RpbWF0aW9uIHVzaW5nIHRoZSBjbGF1c2VzIGluY29tcGF0aWJsZSB3 aXRoIHRoZSBjaG9zZW4KKwkgKiBoaXN0b2dyYW0gKG9yIE1WIHN0YXRzIGlu IGdlbmVyYWwpLgorCSAqLworCXJldHVybiBub25fbXZjbGF1c2VzOworCit9 CiAKIHR5cGVkZWYgc3RydWN0CiB7CisJaW50CQkJdHlwZXM7CQkvKiB0eXBl cyBvZiBzdGF0aXN0aWNzID8gKi8KIAlJbmRleAkJdmFybm87CQkvKiByZWxp ZCB3ZSdyZSBpbnRlcmVzdGVkIGluICovCiAJQml0bWFwc2V0ICAqdmFyYXR0 bm9zOwkvKiBhdHRudW1zIHJlZmVyZW5jZWQgYnkgdGhlIGNsYXVzZXMgKi8K IH0gbXZfY29tcGF0aWJsZV9jb250ZXh0OwpAQCAtOTY0LDIzICsxMjY0LDY2 IEBAIG12X2NvbXBhdGlibGVfd2Fsa2VyKE5vZGUgKm5vZGUsIG12X2NvbXBh dGlibGVfY29udGV4dCAqY29udGV4dCkKIHsKIAlpZiAobm9kZSA9PSBOVUxM KQogCQlyZXR1cm4gZmFsc2U7Ci0gCisKIAlpZiAoSXNBKG5vZGUsIFJlc3Ry aWN0SW5mbykpCiAgCXsKIAkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0 cmljdEluZm8gKikgbm9kZTsKLSAKKwogIAkJLyogUHNldWRvY29uc3RhbnRz IGFyZSBub3QgcmVhbGx5IGludGVyZXN0aW5nIGhlcmUuICovCiAgCQlpZiAo cmluZm8tPnBzZXVkb2NvbnN0YW50KQogCQkJcmV0dXJuIHRydWU7Ci0gCisK IAkJLyogY2xhdXNlcyByZWZlcmVuY2luZyBtdWx0aXBsZSB2YXJub3MgYXJl IGluY29tcGF0aWJsZSAqLwogCQlpZiAoYm1zX21lbWJlcnNoaXAocmluZm8t PmNsYXVzZV9yZWxpZHMpICE9IEJNU19TSU5HTEVUT04pCiAJCQlyZXR1cm4g dHJ1ZTsKLSAKKwogCQkvKiBjaGVjayB0aGUgY2xhdXNlIGluc2lkZSB0aGUg UmVzdHJpY3RJbmZvICovCiAJCXJldHVybiBtdl9jb21wYXRpYmxlX3dhbGtl cigoTm9kZSopcmluZm8tPmNsYXVzZSwgKHZvaWQgKikgY29udGV4dCk7CiAg CX0KIAorCWlmIChvcl9jbGF1c2Uobm9kZSkgfHwgYW5kX2NsYXVzZShub2Rl KSB8fCBub3RfY2xhdXNlKG5vZGUpKQorIAl7CisJCS8qCisJCSAqIEFORC9P Ui9OT1QtY2xhdXNlcyBhcmUgc3VwcG9ydGVkIGlmIGFsbCBzdWItY2xhdXNl cyBhcmUgc3VwcG9ydGVkCisJCSAqCisJCSAqIFRPRE8gV2UgbWlnaHQgc3Vw cG9ydCBtaXhlZCBjYXNlLCB3aGVyZSBzb21lIG9mIHRoZSBjbGF1c2VzIGFy ZQorCQkgKiAgICAgIHN1cHBvcnRlZCBhbmQgc29tZSBhcmUgbm90LCBhbmQg dHJlYXQgYWxsIHN1cHBvcnRlZCBzdWJjbGF1c2VzCisJCSAqICAgICAgYXMg YSBzaW5nbGUgY2xhdXNlLCBjb21wdXRlIGl0J3Mgc2VsZWN0aXZpdHkgdXNp bmcgbXYgc3RhdHMsCisJCSAqICAgICAgYW5kIGNvbXB1dGUgdGhlIHRvdGFs IHNlbGVjdGl2aXR5IHVzaW5nIHRoZSBjdXJyZW50IGFsZ29yaXRobS4KKwkJ ICoKKwkJICogVE9ETyBGb3IgUmVzdHJpY3RJbmZvIGFib3ZlIGFuIE9SLWNs YXVzZSwgd2UgbWlnaHQgdXNlIHRoZSBvcmNsYXVzZQorCQkgKiAgICAgIHdp dGggbmVzdGVkIFJlc3RyaWN0SW5mbyAtIHdlIHdvbid0IGhhdmUgdG8gY2Fs bCBwdWxsX3Zhcm5vcygpCisJCSAqICAgICAgZm9yIGVhY2ggY2xhdXNlLCBz YXZpbmcgdGltZS4KKwkJICoKKwkJICogVE9ETyBQZXJoYXBzIHRoaXMgbmVl ZHMgYSBiaXQgbW9yZSB0aG91Z2h0IGZvciBmdW5jdGlvbmFsCisJCSAqICAg ICAgZGVwZW5kZW5jaWVzPyBUaG9zZSBkb24ndCBxdWl0ZSB3b3JrIGZvciBO T1QgY2FzZXMuCisJCSAqLworCQlCb29sRXhwciAgICpleHByID0gKEJvb2xF eHByICopIG5vZGU7CisJCUxpc3RDZWxsICAgKmxjOworCisJCWZvcmVhY2gg KGxjLCBleHByLT5hcmdzKQorCQl7CisJCQlpZiAobXZfY29tcGF0aWJsZV93 YWxrZXIoKE5vZGUgKikgbGZpcnN0KGxjKSwgY29udGV4dCkpCisJCQkJcmV0 dXJuIHRydWU7CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisgCX0KKworCWlm IChJc0Eobm9kZSwgTnVsbFRlc3QpKQorIAl7CisJCU51bGxUZXN0KiBudCA9 IChOdWxsVGVzdCopbm9kZTsKKworCQkvKgorCQkgKiBPbmx5IHNpbXBsZSAo VmFyIElTIE5VTEwpIGV4cHJlc3Npb25zIHN1cHBvcnRlZCBmb3Igbm93LiBN YXliZSB3ZSBjb3VsZAorCQkgKiB1c2UgZXhhbWluZV92YXJpYWJsZSB0byBm aXggdGhpcz8KKwkJICovCisJCWlmICghIElzQShudC0+YXJnLCBWYXIpKQor CQkJcmV0dXJuIHRydWU7CisKKwkJcmV0dXJuIG12X2NvbXBhdGlibGVfd2Fs a2VyKChOb2RlKikobnQtPmFyZyksIGNvbnRleHQpOworCX0KKwogCWlmIChJ c0Eobm9kZSwgVmFyKSkKIAl7CiAJCVZhciAqIHZhciA9IChWYXIqKW5vZGU7 CkBAIC0xMDMxLDcgKzEzNzQsNyBAQCBtdl9jb21wYXRpYmxlX3dhbGtlcihO b2RlICpub2RlLCBtdl9jb21wYXRpYmxlX2NvbnRleHQgKmNvbnRleHQpCiAJ CS8qIHVuc3VwcG9ydGVkIHN0cnVjdHVyZSAodHdvIHZhcmlhYmxlcyBvciBz bykgKi8KIAkJaWYgKCEgb2spCiAJCQlyZXR1cm4gdHJ1ZTsKLQorIAogIAkJ LyoKIAkJICogSWYgaXQncyBub3QgYSAiPCIgb3IgIj4iIG9yICI9IiBvcGVy YXRvciwganVzdCBpZ25vcmUgdGhlIGNsYXVzZS4KIAkJICogT3RoZXJ3aXNl IG5vdGUgdGhlIHJlbGlkIGFuZCBhdHRudW0gZm9yIHRoZSB2YXJpYWJsZS4g VGhpcyB1c2VzIHRoZQpAQCAtMTA0MSwxMCArMTM4NCwxOCBAQCBtdl9jb21w YXRpYmxlX3dhbGtlcihOb2RlICpub2RlLCBtdl9jb21wYXRpYmxlX2NvbnRl eHQgKmNvbnRleHQpCiAJCXN3aXRjaCAoZ2V0X29wcnJlc3QoZXhwci0+b3Bu bykpCiAJCXsKIAkJCWNhc2UgRl9FUVNFTDoKLQogCQkJCS8qIGVxdWFsaXR5 IGNvbmRpdGlvbnMgYXJlIGNvbXBhdGlibGUgd2l0aCBhbGwgc3RhdGlzdGlj cyAqLwogCQkJCWJyZWFrOwogCisJCQljYXNlIEZfU0NBTEFSTFRTRUw6CisJ CQljYXNlIEZfU0NBTEFSR1RTRUw6CisKKwkJCQkvKiBub3QgY29tcGF0aWJs ZSB3aXRoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzICovCisJCQkJaWYgKCEg KGNvbnRleHQtPnR5cGVzICYgTVZfQ0xBVVNFX1RZUEVfTUNWKSkKKwkJCQkJ cmV0dXJuIHRydWU7CS8qIHRlcm1pbmF0ZSAqLworIAorCQkJCWJyZWFrOwor CiAJCQlkZWZhdWx0OgogCiAJCQkJLyogdW5rbm93biBlc3RpbWF0b3IgKi8K QEAgLTEwNTUsMTEgKzE0MDYsMTEgQEAgbXZfY29tcGF0aWJsZV93YWxrZXIo Tm9kZSAqbm9kZSwgbXZfY29tcGF0aWJsZV9jb250ZXh0ICpjb250ZXh0KQog CiAJCXJldHVybiBtdl9jb21wYXRpYmxlX3dhbGtlcigoTm9kZSAqKSB2YXIs IGNvbnRleHQpOwogIAl9Ci0KKyAKIAkvKiBOb2RlIG5vdCBleHBsaWNpdGx5 IHN1cHBvcnRlZCwgc28gdGVybWluYXRlICovCiAJcmV0dXJuIHRydWU7CiB9 Ci0gCisKIC8qCiAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNsYXVzZSBp cyBjb21wYXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0YXRzLAogICogYW5k IGlmIGl0IGlzLCByZXR1cm5zIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlv biAtIHZhcm5vIChpbmRleApAQCAtMTA3OCwxMCArMTQyOSwxMSBAQCBtdl9j b21wYXRpYmxlX3dhbGtlcihOb2RlICpub2RlLCBtdl9jb21wYXRpYmxlX2Nv bnRleHQgKmNvbnRleHQpCiAgKiAgICAgIGV2YWx1YXRlIHRoZW0gdXNpbmcg bXVsdGl2YXJpYXRlIHN0YXRzLgogICovCiBzdGF0aWMgYm9vbAotY2xhdXNl X2lzX212X2NvbXBhdGlibGUoTm9kZSAqY2xhdXNlLCBJbmRleCByZWxpZCwg QXR0ck51bWJlciAqYXR0bnVtKQorY2xhdXNlX2lzX212X2NvbXBhdGlibGUo Tm9kZSAqY2xhdXNlLCBJbmRleCByZWxpZCwgQml0bWFwc2V0ICoqYXR0bnVt cywgaW50IHR5cGVzKQogewogCW12X2NvbXBhdGlibGVfY29udGV4dCBjb250 ZXh0OwogCisJY29udGV4dC50eXBlcyA9IHR5cGVzOwogCWNvbnRleHQudmFy bm8gPSByZWxpZDsKIAljb250ZXh0LnZhcmF0dG5vcyA9IE5VTEw7CS8qIG5v IGF0dG51bXMgKi8KIApAQCAtMTA4OSw3ICsxNDQxLDcgQEAgY2xhdXNlX2lz X212X2NvbXBhdGlibGUoTm9kZSAqY2xhdXNlLCBJbmRleCByZWxpZCwgQXR0 ck51bWJlciAqYXR0bnVtKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiByZW1l bWJlciB0aGUgbmV3bHkgY29sbGVjdGVkIGF0dG51bXMgKi8KLQkqYXR0bnVt ID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIoY29udGV4dC52YXJhdHRub3MpOwor CSphdHRudW1zID0gYm1zX2FkZF9tZW1iZXJzKCphdHRudW1zLCBjb250ZXh0 LnZhcmF0dG5vcyk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTEzOTQsMjQg KzE3NDYsMzkgQEAgZmRlcHNfZmlsdGVyX2NsYXVzZXMoUGxhbm5lckluZm8g KnJvb3QsCiAKIAlmb3JlYWNoIChsYywgY2xhdXNlcykKIAl7Ci0JCUF0dHJO dW1iZXIJYXR0bnVtOworCQlCaXRtYXBzZXQgKmF0dG51bXMgPSBOVUxMOwog CQlOb2RlCSAgICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobGMpOwogCi0J CWlmICghIGNsYXVzZV9pc19tdl9jb21wYXRpYmxlKGNsYXVzZSwgcmVsaWQs ICZhdHRudW0pKQorCQlpZiAoISBjbGF1c2VfaXNfbXZfY29tcGF0aWJsZShj bGF1c2UsIHJlbGlkLCAmYXR0bnVtcywKKwkJCQkJCQkJCSAgTVZfQ0xBVVNF X1RZUEVfRkRFUCkpCiAKIAkJCS8qIGNsYXVzZSBpbmNvbXBhdGlibGUgd2l0 aCBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyAqLwogCQkJKnJlZHVjZWRfY2xh dXNlcyA9IGxhcHBlbmQoKnJlZHVjZWRfY2xhdXNlcywgY2xhdXNlKTsKIAot CQllbHNlIGlmICghIGJtc19pc19tZW1iZXIoYXR0bnVtLCBkZXBzX2F0dG51 bXMpKQorCQllbHNlIGlmIChibXNfbnVtX21lbWJlcnMoYXR0bnVtcykgPiAx KQorCisJCQkvKgorCQkJICogY2xhdXNlIHJlZmVyZW5jaW5nIG11bHRpcGxl IGF0dHJpYnV0ZXMgKHN0cmFuZ2UsIHNob3VsZAorCQkJICogdGhpcyBiZSBo YW5kbGVkIGJ5IGNsYXVzZV9pc19tdl9jb21wYXRpYmxlIGRpcmVjdGx5KQor CQkJICovCisJCQkqcmVkdWNlZF9jbGF1c2VzID0gbGFwcGVuZCgqcmVkdWNl ZF9jbGF1c2VzLCBjbGF1c2UpOworCisJCWVsc2UgaWYgKCEgYm1zX2lzX21l bWJlcihibXNfc2luZ2xldG9uX21lbWJlcihhdHRudW1zKSwgZGVwc19hdHRu dW1zKSkKIAogCQkJLyogY2xhdXNlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkZXBl bmRlbmNpZXMgKi8KIAkJCSpyZWR1Y2VkX2NsYXVzZXMgPSBsYXBwZW5kKCpy ZWR1Y2VkX2NsYXVzZXMsIGNsYXVzZSk7CiAKIAkJZWxzZQogCQl7CisJCQkv KiBvaywgY2xhdXNlIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyBkZXBlbmRl bmNpZXMgKi8KKwkJCUFzc2VydChibXNfbnVtX21lbWJlcnMoYXR0bnVtcykg PT0gMSk7CisKIAkJCSpkZXBzX2NsYXVzZXMgICA9IGxhcHBlbmQoKmRlcHNf Y2xhdXNlcywgY2xhdXNlKTsKLQkJCWNsYXVzZV9hdHRudW1zID0gYm1zX2Fk ZF9tZW1iZXIoY2xhdXNlX2F0dG51bXMsIGF0dG51bSk7CisJCQljbGF1c2Vf YXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKGNsYXVzZV9hdHRudW1zLAorCQkJ CQkJCQkJCWJtc19zaW5nbGV0b25fbWVtYmVyKGF0dG51bXMpKTsKIAkJfQor CisJCWJtc19mcmVlKGF0dG51bXMpOwogCX0KIAogCXJldHVybiBjbGF1c2Vf YXR0bnVtczsKQEAgLTE2MzcsNiArMjAwNCw5IEBAIGhhc19zdGF0cyhMaXN0 ICpzdGF0cywgaW50IHR5cGUpCiAKIAkJaWYgKCh0eXBlICYgTVZfQ0xBVVNF X1RZUEVfRkRFUCkgJiYgc3RhdC0+ZGVwc19idWlsdCkKIAkJCXJldHVybiB0 cnVlOworCisJCWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX01DVikgJiYg c3RhdC0+bWN2X2J1aWx0KQorCQkJcmV0dXJuIHRydWU7CiAJfQogCiAJcmV0 dXJuIGZhbHNlOwpAQCAtMTY1MiwzICsyMDIyLDM5MiBAQCBmaW5kX3N0YXRz KFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCkKIAogCXJldHVybiBy b290LT5zaW1wbGVfcmVsX2FycmF5W3JlbGlkXS0+bXZzdGF0bGlzdDsKIH0K KworLyoKKyAqIEVzdGltYXRlIHNlbGVjdGl2aXR5IG9mIGNsYXVzZXMgdXNp bmcgYSBNQ1YgbGlzdC4KKyAqCisgKiBJZiB0aGVyZSdzIG5vIE1DViBsaXN0 IGZvciB0aGUgc3RhdHMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuMC4KKyAq CisgKiBXaGlsZSBjb21wdXRpbmcgdGhlIGVzdGltYXRlLCB0aGUgZnVuY3Rp b24gY2hlY2tzIHdoZXRoZXIgYWxsIHRoZQorICogY29sdW1ucyB3ZXJlIG1h dGNoZWQgd2l0aCBhbiBlcXVhbGl0eSBjb25kaXRpb24uIElmIHRoYXQncyB0 aGUgY2FzZSwKKyAqIHdlIGNhbiBza2lwIHByb2Nlc3NpbmcgdGhlIGhpc3Rv Z3JhbSwgYXMgdGhlcmUgY2FuIGJlIG5vIHJvd3MgaW4KKyAqIGl0IHdpdGgg dGhlIHNhbWUgdmFsdWVzIC0gYWxsIHRoZSByb3dzIG1hdGNoaW5nIHRoZSBj b25kaXRpb24gYXJlCisgKiByZXByZXNlbnRlZCBieSB0aGUgTUNWIGl0ZW0u IFRoaXMgY2FuIG9ubHkgaGFwcGVuIHdpdGggZXF1YWxpdHkKKyAqIG9uIGFs bCB0aGUgYXR0cmlidXRlcy4KKyAqCisgKiBUaGUgYWxnb3JpdGhtIHdvcmtz IGxpa2UgdGhpczoKKyAqCisgKiAgIDEpIG1hcmsgYWxsIGl0ZW1zIGFzICdt YXRjaCcKKyAqICAgMikgd2FsayB0aHJvdWdoIGFsbCB0aGUgY2xhdXNlcwor ICogICAzKSBmb3IgYSBwYXJ0aWN1bGFyIGNsYXVzZSwgd2FsayB0aHJvdWdo IGFsbCB0aGUgaXRlbXMKKyAqICAgNCkgc2tpcCBpdGVtcyB0aGF0IGFyZSBh bHJlYWR5ICdubyBtYXRjaCcKKyAqICAgNSkgY2hlY2sgY2xhdXNlIGZvciBp dGVtcyB0aGF0IHN0aWxsIG1hdGNoCisgKiAgIDYpIHN1bSBmcmVxdWVuY2ll cyBmb3IgaXRlbXMgdG8gZ2V0IHNlbGVjdGl2aXR5CisgKgorICogVGhlIGZ1 bmN0aW9uIGFsc28gcmV0dXJucyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBsZWFz dCBmcmVxdWVudCBpdGVtCisgKiBvbiB0aGUgTUNWIGxpc3QsIHdoaWNoIG1h eSBiZSB1c2VmdWwgZm9yIGNsYW1waW5nIGVzdGltYXRlIGZyb20gdGhlCisg KiBoaXN0b2dyYW0gKGFsbCBpdGVtcyBub3QgcHJlc2VudCBpbiB0aGUgTUNW IGxpc3QgYXJlIGxlc3MgZnJlcXVlbnQpLgorICogVGhpcyBob3dldmVyIHNl ZW1zIHVzZWZ1bCBvbmx5IGZvciBjYXNlcyB3aXRoIGNvbmRpdGlvbnMgb24g YWxsCisgKiBhdHRyaWJ1dGVzLgorICoKKyAqIFRPRE8gVGhpcyBvbmx5IGhh bmRsZXMgQU5ELWVkIGNsYXVzZXMsIGJ1dCBpdCBtaWdodCB3b3JrIGZvciBP Ui1lZAorICogICAgICBsaXN0cyB0b28gLSBpdCBqdXN0IG5lZWRzIHRvIHJl dmVyc2UgdGhlIGxvZ2ljIGEgYml0LiBJLmUuIHN0YXJ0CisgKiAgICAgIHdp dGggJ25vIG1hdGNoJyBmb3IgYWxsIGl0ZW1zLCBhbmQgbWFyayB0aGUgaXRl bXMgYXMgYSBtYXRjaAorICogICAgICBhcyB0aGUgY2xhdXNlcyBhcmUgcHJv Y2Vzc2VkIChhbmQgc2tpcCBpdGVtcyB0aGF0IGFyZSAnbWF0Y2gnKS4KKyAq Lworc3RhdGljIFNlbGVjdGl2aXR5CitjbGF1c2VsaXN0X212X3NlbGVjdGl2 aXR5X21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMs CisJCQkJCQkJCSAgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLCBib29sICpm dWxsbWF0Y2gsCisJCQkJCQkJCSAgU2VsZWN0aXZpdHkgKmxvd3NlbCkKK3sK KwlpbnQgaTsKKwlTZWxlY3Rpdml0eSBzID0gMC4wOworCVNlbGVjdGl2aXR5 IHUgPSAwLjA7CisKKwlNQ1ZMaXN0IG1jdmxpc3QgPSBOVUxMOworCWludAlu bWF0Y2hlcyA9IDA7CisKKwkvKiBtYXRjaC9taXNtYXRjaCBiaXRtYXAgZm9y IGVhY2ggTUNWIGl0ZW0gKi8KKwljaGFyICogbWF0Y2hlcyA9IE5VTEw7CisK KwlBc3NlcnQoY2xhdXNlcyAhPSBOSUwpOworCUFzc2VydChsaXN0X2xlbmd0 aChjbGF1c2VzKSA+PSAyKTsKKworCS8qIHRoZXJlJ3Mgbm8gTUNWIGxpc3Qg YnVpbHQgeWV0ICovCisJaWYgKCEgbXZzdGF0cy0+bWN2X2J1aWx0KQorCQly ZXR1cm4gMC4wOworCisJbWN2bGlzdCA9IGxvYWRfbXZfbWN2bGlzdChtdnN0 YXRzLT5tdm9pZCk7CisKKwlBc3NlcnQobWN2bGlzdCAhPSBOVUxMKTsKKwlB c3NlcnQobWN2bGlzdC0+bml0ZW1zID4gMCk7CisKKwkvKiBieSBkZWZhdWx0 IGFsbCB0aGUgTUNWIGl0ZW1zIG1hdGNoIHRoZSBjbGF1c2VzIGZ1bGx5ICov CisJbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbWN2bGlzdC0+ bml0ZW1zKTsKKwltZW1zZXQobWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxM LCBzaXplb2YoY2hhcikqbWN2bGlzdC0+bml0ZW1zKTsKKworCS8qIG51bWJl ciBvZiBtYXRjaGluZyBNQ1YgaXRlbXMgKi8KKwlubWF0Y2hlcyA9IG1jdmxp c3QtPm5pdGVtczsKKworCW5tYXRjaGVzID0gdXBkYXRlX21hdGNoX2JpdG1h cF9tY3ZsaXN0KHJvb3QsIGNsYXVzZXMsCisJCQkJCQkJCQkJICAgbXZzdGF0 cy0+c3Rha2V5cywgbWN2bGlzdCwKKwkJCQkJCQkJCQkgICBubWF0Y2hlcywg bWF0Y2hlcywKKwkJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxtYXRjaCwgZmFs c2UpOworCisJLyogc3VtIGZyZXF1ZW5jaWVzIGZvciBhbGwgdGhlIG1hdGNo aW5nIE1DViBpdGVtcyAqLworCWZvciAoaSA9IDA7IGkgPCBtY3ZsaXN0LT5u aXRlbXM7IGkrKykKKwl7CisJCS8qIHVzZWQgdG8gJ3NjYWxlJyBmb3IgTUNW IGxpc3RzIG5vdCBjb3ZlcmluZyBhbGwgdHVwbGVzICovCisJCXUgKz0gbWN2 bGlzdC0+aXRlbXNbaV0tPmZyZXF1ZW5jeTsKKworCQlpZiAobWF0Y2hlc1tp XSAhPSBNVlNUQVRTX01BVENIX05PTkUpCisJCQlzICs9IG1jdmxpc3QtPml0 ZW1zW2ldLT5mcmVxdWVuY3k7CisJfQorCisJcGZyZWUobWF0Y2hlcyk7CisJ cGZyZWUobWN2bGlzdCk7CisKKwlyZXR1cm4gcyp1OworfQorCisvKgorICog RXZhbHVhdGUgY2xhdXNlcyB1c2luZyB0aGUgTUNWIGxpc3QsIGFuZCB1cGRh dGUgdGhlIG1hdGNoIGJpdG1hcC4KKyAqCisgKiBUaGUgYml0bWFwIG1heSBi ZSBhbHJlYWR5IHBhcnRpYWxseSBzZXQsIHNvIHRoaXMgaXMgcmVhbGx5IGEg d2F5IHRvCisgKiBjb21iaW5lIHJlc3VsdHMgb2Ygc2V2ZXJhbCBjbGF1c2Ug bGlzdHMgLSBlaXRoZXIgd2hlbiBjb21wdXRpbmcKKyAqIGNvbmRpdGlvbmFs IHByb2JhYmlsaXR5IFAoQXxCKSBvciBhIGNvbWJpbmF0aW9uIG9mIEFORC9P UiBjbGF1c2VzLgorICoKKyAqIFRPRE8gVGhpcyB3b3JrcyB3aXRoICdiaXRt YXAnIHdoZXJlIGVhY2ggYml0IGlzIHJlcHJlc2VudGVkIGFzIGEgY2hhciwK KyAqICAgICAgd2hpY2ggaXMgc2xpZ2h0bHkgd2FzdGVmdWwuIEluc3RlYWQs IHdlIGNvdWxkIHVzZSBhIHJlZ3VsYXIKKyAqICAgICAgYml0bWFwLCByZWR1 Y2luZyB0aGUgc2l6ZSB0byB+MS84LiBBbm90aGVyIHRoaW5nIGlzIG1lcmdp bmcgdGhlCisgKiAgICAgIGJpdG1hcHMgdXNpbmcgJiBhbmQgfCwgd2hpY2gg bWlnaHQgYmUgZmFzdGVyIHRoYW4gbWluL21heC4KKyAqLworc3RhdGljIGlu dAordXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJICAgaW50MnZlY3RvciAqc3Rh a2V5cywgTUNWTGlzdCBtY3ZsaXN0LAorCQkJCQkJICAgaW50IG5tYXRjaGVz LCBjaGFyICogbWF0Y2hlcywKKwkJCQkJCSAgIFNlbGVjdGl2aXR5ICpsb3dz ZWwsIGJvb2wgKmZ1bGxtYXRjaCwKKwkJCQkJCSAgIGJvb2wgaXNfb3IpCit7 CisJaW50IGk7CisJTGlzdENlbGwgKiBsOworCisJQml0bWFwc2V0ICplcW1h dGNoZXMgPSBOVUxMOwkvKiBhdHRyaWJ1dGVzIHdpdGggZXF1YWxpdHkgbWF0 Y2hlcyAqLworCisJLyogVGhlIGJpdG1hcCBtYXkgYmUgcGFydGlhbGx5IGJ1 aWx0LiAqLworCUFzc2VydChubWF0Y2hlcyA+PSAwKTsKKwlBc3NlcnQobm1h dGNoZXMgPD0gbWN2bGlzdC0+bml0ZW1zKTsKKwlBc3NlcnQoY2xhdXNlcyAh PSBOSUwpOworCUFzc2VydChsaXN0X2xlbmd0aChjbGF1c2VzKSA+PSAxKTsK KwlBc3NlcnQobWN2bGlzdCAhPSBOVUxMKTsKKwlBc3NlcnQobWN2bGlzdC0+ bml0ZW1zID4gMCk7CisKKwkvKiBObyBwb3NzaWJsZSBtYXRjaGVzIChvbmx5 IHdvcmtzIGZvciBBTkQtZGVkIGNsYXVzZXMpICovCisJaWYgKCgobm1hdGNo ZXMgPT0gMCkgJiYgKCEgaXNfb3IpKSB8fAorCQkoKG5tYXRjaGVzID09IG1j dmxpc3QtPm5pdGVtcykgJiYgaXNfb3IpKQorCQlyZXR1cm4gbm1hdGNoZXM7 CisKKwkvKgorCSAqIGZpbmQgdGhlIGxvd2VzdCBmcmVxdWVuY3kgaW4gdGhl IE1DViBsaXN0CisJICoKKwkgKiBXZSBuZWVkIHRvIGRvIHRoYXQgaGVyZSwg YmVjYXVzZSB3ZSBkbyB2YXJpb3VzIHRyaWNrcyBpbiB0aGUgZm9sbG93aW5n CisJICogY29kZSAtIHNraXBwaW5nIGl0ZW1zIGFscmVhZHkgcnVsZWQgb3V0 LCBldGMuCisJICoKKwkgKiBYWFggQSBsb29wIGlzIG5lY2Vzc2FyeSBiZWNh dXNlIHRoZSBNQ1YgbGlzdCBpcyBub3Qgc29ydGVkIGJ5IGZyZXF1ZW5jeS4K KwkgKi8KKwkqbG93c2VsID0gMS4wOworCWZvciAoaSA9IDA7IGkgPCBtY3Zs aXN0LT5uaXRlbXM7IGkrKykKKwl7CisJCU1DVkl0ZW0gaXRlbSA9IG1jdmxp c3QtPml0ZW1zW2ldOworCisJCWlmIChpdGVtLT5mcmVxdWVuY3kgPCAqbG93 c2VsKQorCQkJKmxvd3NlbCA9IGl0ZW0tPmZyZXF1ZW5jeTsKKwl9CisKKwkv KgorCSAqIExvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBjbGF1c2VzLCBhbmQg Zm9yIGVhY2ggb2YgdGhlbSBldmFsdWF0ZQorCSAqIGFsbCB0aGUgTUNWIGl0 ZW1zIG5vdCB5ZXQgZWxpbWluYXRlZCBieSB0aGUgcHJlY2VkaW5nIGNsYXVz ZXMuCisJICovCisJZm9yZWFjaCAobCwgY2xhdXNlcykKKwl7CisJCU5vZGUg KiBjbGF1c2UgPSAoTm9kZSopbGZpcnN0KGwpOworCisJCS8qIGlmIGl0J3Mg YSBSZXN0cmljdEluZm8sIHRoZW4gZXh0cmFjdCB0aGUgY2xhdXNlICovCisJ CWlmIChJc0EoY2xhdXNlLCBSZXN0cmljdEluZm8pKQorCQkJY2xhdXNlID0g KE5vZGUqKSgoUmVzdHJpY3RJbmZvKiljbGF1c2UpLT5jbGF1c2U7CisKKwkJ LyogaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBtYXRjaGVzIHBvc3NpYmxl LCB3ZSBjYW4gc3RvcCAqLworCQlpZiAoKChubWF0Y2hlcyA9PSAwKSAmJiAo ISBpc19vcikpIHx8CisJCQkoKG5tYXRjaGVzID09IG1jdmxpc3QtPm5pdGVt cykgJiYgaXNfb3IpKQorCQkJCWJyZWFrOworCisJCS8qIGl0J3MgZWl0aGVy IE9wQ2xhdXNlLCBvciBOdWxsVGVzdCAqLworCQlpZiAoaXNfb3BjbGF1c2Uo Y2xhdXNlKSkKKwkJeworCQkJT3BFeHByCSAgICpleHByID0gKE9wRXhwciop Y2xhdXNlOworCQkJYm9vbAkJdmFyb25sZWZ0ID0gdHJ1ZTsKKwkJCWJvb2wJ CW9rOworCQkJRm1nckluZm8Jb3Bwcm9jOworCisJCQkvKiBnZXQgcHJvY2Vk dXJlIGNvbXB1dGluZyBvcGVyYXRvciBzZWxlY3Rpdml0eSAqLworCQkJUmVn UHJvY2VkdXJlCW9wcnJlc3QgPSBnZXRfb3BycmVzdChleHByLT5vcG5vKTsK KworCQkJZm1ncl9pbmZvKGdldF9vcGNvZGUoZXhwci0+b3BubyksICZvcHBy b2MpOworCisJCQlvayA9IChOdW1SZWxpZHMoY2xhdXNlKSA9PSAxKSAmJgor CQkJCSAoaXNfcHNldWRvX2NvbnN0YW50X2NsYXVzZShsc2Vjb25kKGV4cHIt PmFyZ3MpKSB8fAorCQkJCSAodmFyb25sZWZ0ID0gZmFsc2UsCisJCQkJICBp c19wc2V1ZG9fY29uc3RhbnRfY2xhdXNlKGxpbml0aWFsKGV4cHItPmFyZ3Mp KSkpOworCisJCQlpZiAob2spCisJCQl7CisKKwkJCQlGbWdySW5mbwlndHBy b2M7CisJCQkJVmFyICogdmFyID0gKHZhcm9ubGVmdCkgPyBsaW5pdGlhbChl eHByLT5hcmdzKSA6IGxzZWNvbmQoZXhwci0+YXJncyk7CisJCQkJQ29uc3Qg KiBjc3QgPSAodmFyb25sZWZ0KSA/IGxzZWNvbmQoZXhwci0+YXJncykgOiBs aW5pdGlhbChleHByLT5hcmdzKTsKKwkJCQlib29sIGlzZ3QgPSAoISB2YXJv bmxlZnQpOworCisJCQkJVHlwZUNhY2hlRW50cnkgKnR5cGVjYWNoZQorCQkJ CQkJCQk9IGxvb2t1cF90eXBlX2NhY2hlKHZhci0+dmFydHlwZSwgVFlQRUNB Q0hFX0dUX09QUik7CisKKwkJCQkvKiBGSVhNRSBwcm9wZXIgbWF0Y2hpbmcg YXR0cmlidXRlIHRvIGRpbWVuc2lvbiAqLworCQkJCWludCBpZHggPSBtdl9n ZXRfaW5kZXgodmFyLT52YXJhdHRubywgc3Rha2V5cyk7CisKKwkJCQlmbWdy X2luZm8oZ2V0X29wY29kZSh0eXBlY2FjaGUtPmd0X29wciksICZndHByb2Mp OworCisJCQkJLyoKKwkJCQkgKiBXYWxrIHRocm91Z2ggdGhlIE1DViBpdGVt cyBhbmQgZXZhbHVhdGUgdGhlIGN1cnJlbnQgY2xhdXNlLiBXZSBjYW4KKwkJ CQkgKiBza2lwIGl0ZW1zIHRoYXQgd2VyZSBhbHJlYWR5IHJ1bGVkIG91dCwg YW5kIHRlcm1pbmF0ZSBpZiB0aGVyZSBhcmUKKwkJCQkgKiBubyByZW1haW5p bmcgTUNWIGl0ZW1zIHRoYXQgbWlnaHQgcG9zc2libHkgbWF0Y2guCisJCQkJ ICovCisJCQkJZm9yIChpID0gMDsgaSA8IG1jdmxpc3QtPm5pdGVtczsgaSsr KQorCQkJCXsKKwkJCQkJYm9vbCBtaXNtYXRjaCA9IGZhbHNlOworCQkJCQlN Q1ZJdGVtIGl0ZW0gPSBtY3ZsaXN0LT5pdGVtc1tpXTsKKworCQkJCQkvKgor CQkJCQkgKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIChBTkQpIG9y IG5vIHJlbWFpbmluZyB1bm1hdGNoZWQKKwkJCQkJICogaXRlbXMgKE9SKSwg d2UgY2FuIHN0b3AgcHJvY2Vzc2luZyB0aGlzIGNsYXVzZS4KKwkJCQkJICov CisJCQkJCWlmICgoKG5tYXRjaGVzID09IDApICYmICghIGlzX29yKSkgfHwK KwkJCQkJCSgobm1hdGNoZXMgPT0gbWN2bGlzdC0+bml0ZW1zKSAmJiBpc19v cikpCisJCQkJCQlicmVhazsKKworCQkJCQkvKgorCQkJCQkgKiBGb3IgQU5E LWxpc3RzLCB3ZSBjYW4gYWxzbyBtYXJrIE5VTEwgaXRlbXMgYXMgJ25vIG1h dGNoJyAoYW5kCisJCQkJCSAqIHRoZW4gc2tpcCB0aGVtKS4gRm9yIE9SLWxp c3RzIHRoaXMgaXMgbm90IHBvc3NpYmxlLgorCQkJCQkgKi8KKwkJCQkJaWYg KCghIGlzX29yKSAmJiBpdGVtLT5pc251bGxbaWR4XSkKKwkJCQkJCW1hdGNo ZXNbaV0gPSBNVlNUQVRTX01BVENIX05PTkU7CisKKwkJCQkJLyogc2tpcCBN Q1YgaXRlbXMgdGhhdCB3ZXJlIGFscmVhZHkgcnVsZWQgb3V0ICovCisJCQkJ CWlmICgoISBpc19vcikgJiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRD SF9OT05FKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQllbHNlIGlmIChpc19v ciAmJiAobWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX0ZVTEwpKQorCQkJ CQkJY29udGludWU7CisKKwkJCQkJc3dpdGNoIChvcHJyZXN0KQorCQkJCQl7 CisJCQkJCQljYXNlIEZfRVFTRUw6CisJCQkJCQkJLyoKKwkJCQkJCQkgKiBX ZSBkb24ndCBjYXJlIGFib3V0IGlzZ3QgaW4gZXF1YWxpdHksIGJlY2F1c2Ug aXQgZG9lcyBub3QKKwkJCQkJCQkgKiBtYXR0ZXIgd2hldGhlciBpdCdzICh2 YXIgPSBjb25zdCkgb3IgKGNvbnN0ID0gdmFyKS4KKwkJCQkJCQkgKi8KKwkJ CQkJCQltaXNtYXRjaCA9ICEgRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJD b2xsKCZvcHByb2MsCisJCQkJCQkJCQkJCQkJCQkJIERFRkFVTFRfQ09MTEFU SU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkgY3N0LT5jb25zdHZhbHVlLAor CQkJCQkJCQkJCQkJCQkJCSBpdGVtLT52YWx1ZXNbaWR4XSkpOworCisJCQkJ CQkJaWYgKCEgbWlzbWF0Y2gpCisJCQkJCQkJCWVxbWF0Y2hlcyA9IGJtc19h ZGRfbWVtYmVyKGVxbWF0Y2hlcywgaWR4KTsKKworCQkJCQkJCWJyZWFrOwor CisJCQkJCQljYXNlIEZfU0NBTEFSTFRTRUw6CS8qIGNvbHVtbiA8IGNvbnN0 YW50ICovCisJCQkJCQljYXNlIEZfU0NBTEFSR1RTRUw6IC8qIGNvbHVtbiA+ IGNvbnN0YW50ICovCisKKwkJCQkJCQkvKgorCQkJCQkJCSAqIEZpcnN0IGNo ZWNrIHdoZXRoZXIgdGhlIGNvbnN0YW50IGlzIGJlbG93IHRoZSBsb3dlciBi b3VuZGFyeSAoaW4gdGhhdAorCQkJCQkJCSAqIGNhc2Ugd2UgY2FuIHNraXAg dGhlIGJ1Y2tldCwgYmVjYXVzZSB0aGVyZSdzIG5vIG92ZXJsYXApLgorCQkJ CQkJCSAqLworCQkJCQkJCW1pc21hdGNoID0gRGF0dW1HZXRCb29sKEZ1bmN0 aW9uQ2FsbDJDb2xsKCZvcHByb2MsCisJCQkJCQkJCQkJCQkJCQkJIERFRkFV TFRfQ09MTEFUSU9OX09JRCwKKwkJCQkJCQkJCQkJCQkJCQkgY3N0LT5jb25z dHZhbHVlLAorCQkJCQkJCQkJCQkJCQkJCSBpdGVtLT52YWx1ZXNbaWR4XSkp OworCisJCQkJCQkJLyogaW52ZXJ0IHRoZSByZXN1bHQgaWYgaXNndD10cnVl ICovCisJCQkJCQkJbWlzbWF0Y2ggPSAoaXNndCkgPyAoISBtaXNtYXRjaCkg OiBtaXNtYXRjaDsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCS8q IFhYWCBUaGUgY29uZGl0aW9ucyBvbiBtYXRjaGVzW2ldIGFyZSBub3QgbmVl ZGVkLCBhcyB3ZQorCQkJCQkgKiAgICAgc2tpcCBNQ1YgaXRlbXMgdGhhdCBj YW4ndCBiZWNvbWUgdHJ1ZS9mYWxzZSwgZGVwZW5kaW5nCisJCQkJCSAqICAg ICBvbiB0aGUgY3VycmVudCBmbGFnLiBTZWUgYmVnaW5uaW5nIG9mIHRoZSBs b29wIG92ZXIKKwkJCQkJICogICAgIE1DViBpdGVtcy4KKwkJCQkJICovCisK KwkJCQkJaWYgKChpc19vcikgJiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19N QVRDSF9OT05FKSAmJiAoISBtaXNtYXRjaCkpCisJCQkJCXsKKwkJCQkJCS8q IE9SIC0gd2FzIE1BVENIX05PTkUsIGJ1dCB3aWxsIGJlIE1BVENIX0ZVTEwg Ki8KKwkJCQkJCW1hdGNoZXNbaV0gPSBNVlNUQVRTX01BVENIX0ZVTEw7CisJ CQkJCQkrK25tYXRjaGVzOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJ CQkJZWxzZSBpZiAoKCEgaXNfb3IpICYmIChtYXRjaGVzW2ldID09IE1WU1RB VFNfTUFUQ0hfRlVMTCkgJiYgbWlzbWF0Y2gpCisJCQkJCXsKKwkJCQkJCS8q IEFORCAtIHdhcyBNQVRDX0ZVTEwsIGJ1dCB3aWxsIGJlIE1BVENIX05PTkUg Ki8KKwkJCQkJCW1hdGNoZXNbaV0gPSBNVlNUQVRTX01BVENIX05PTkU7CisJ CQkJCQktLW5tYXRjaGVzOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwor CQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmIChJc0EoY2xhdXNlLCBOdWxs VGVzdCkpCisJCXsKKwkJCU51bGxUZXN0ICogZXhwciA9IChOdWxsVGVzdCop Y2xhdXNlOworCQkJVmFyICogdmFyID0gKFZhciopKGV4cHItPmFyZyk7CisK KwkJCS8qIEZJWE1FIHByb3BlciBtYXRjaGluZyBhdHRyaWJ1dGUgdG8gZGlt ZW5zaW9uICovCisJCQlpbnQgaWR4ID0gbXZfZ2V0X2luZGV4KHZhci0+dmFy YXR0bm8sIHN0YWtleXMpOworCisJCQkvKgorCQkJICogV2FsayB0aHJvdWdo IHRoZSBNQ1YgaXRlbXMgYW5kIGV2YWx1YXRlIHRoZSBjdXJyZW50IGNsYXVz ZS4gV2UgY2FuCisJCQkgKiBza2lwIGl0ZW1zIHRoYXQgd2VyZSBhbHJlYWR5 IHJ1bGVkIG91dCwgYW5kIHRlcm1pbmF0ZSBpZiB0aGVyZSBhcmUKKwkJCSAq IG5vIHJlbWFpbmluZyBNQ1YgaXRlbXMgdGhhdCBtaWdodCBwb3NzaWJseSBt YXRjaC4KKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IG1jdmxpc3QtPm5p dGVtczsgaSsrKQorCQkJeworCQkJCU1DVkl0ZW0gaXRlbSA9IG1jdmxpc3Qt Pml0ZW1zW2ldOworCisJCQkJLyogaWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0 Y2hlcywgd2UgY2FuIHN0b3AgcHJvY2Vzc2luZyB0aGlzIGNsYXVzZSAqLwor CQkJCWlmIChubWF0Y2hlcyA9PSAwKQorCQkJCQlicmVhazsKKworCQkJCS8q IHNraXAgTUNWIGl0ZW1zIHRoYXQgd2VyZSBhbHJlYWR5IHJ1bGVkIG91dCAq LworCQkJCWlmIChtYXRjaGVzW2ldID09IE1WU1RBVFNfTUFUQ0hfTk9ORSkK KwkJCQkJY29udGludWU7CisKKwkJCQkvKiBpZiB0aGUgY2xhdXNlIG1pc21h dGNoZXMgdGhlIE1DViBpdGVtLCBzZXQgaXQgYXMgTUFUQ0hfTk9ORSAqLwor CQkJCWlmICgoKGV4cHItPm51bGx0ZXN0dHlwZSA9PSBJU19OVUxMKSAmJiAo ISBpdGVtLT5pc251bGxbaWR4XSkpIHx8CisJCQkJCSgoZXhwci0+bnVsbHRl c3R0eXBlID09IElTX05PVF9OVUxMKSAmJiAoaXRlbS0+aXNudWxsW2lkeF0p KSkKKwkJCQl7CisJCQkJCQltYXRjaGVzW2ldID0gTVZTVEFUU19NQVRDSF9O T05FOworCQkJCQkJLS1ubWF0Y2hlczsKKwkJCQl9CisJCQl9CisJCX0KKwkJ ZWxzZSBpZiAob3JfY2xhdXNlKGNsYXVzZSkgfHwgYW5kX2NsYXVzZShjbGF1 c2UpKQorCQl7CisJCQkvKiBBTkQvT1IgY2xhdXNlLCB3aXRoIGFsbCBjbGF1 c2VzIGNvbXBhdGlibGUgd2l0aCB0aGUgc2VsZWN0ZWQgTVYgc3RhdCAqLwor CisJCQlpbnQJCQlpOworCQkJQm9vbEV4cHIgICAqb3JjbGF1c2UgID0gKChC b29sRXhwciopY2xhdXNlKTsKKwkJCUxpc3QJICAgKm9yY2xhdXNlcyA9IG9y Y2xhdXNlLT5hcmdzOworCisJCQkvKiBtYXRjaC9taXNtYXRjaCBiaXRtYXAg Zm9yIGVhY2ggTUNWIGl0ZW0gKi8KKwkJCWludAlvcl9ubWF0Y2hlcyA9IDA7 CisJCQljaGFyICogb3JfbWF0Y2hlcyA9IE5VTEw7CisKKwkJCUFzc2VydChv cmNsYXVzZXMgIT0gTklMKTsKKwkJCUFzc2VydChsaXN0X2xlbmd0aChvcmNs YXVzZXMpID49IDIpOworCisJCQkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgTUNW IGl0ZW1zICovCisJCQlvcl9ubWF0Y2hlcyA9IG1jdmxpc3QtPm5pdGVtczsK KworCQkJLyogYnkgZGVmYXVsdCBub25lIG9mIHRoZSBNQ1YgaXRlbXMgbWF0 Y2hlcyB0aGUgY2xhdXNlcyAqLworCQkJb3JfbWF0Y2hlcyA9IHBhbGxvYzAo c2l6ZW9mKGNoYXIpICogb3Jfbm1hdGNoZXMpOworCisJCQlpZiAob3JfY2xh dXNlKGNsYXVzZSkpCisJCQl7CisJCQkJLyogT1IgY2xhdXNlcyBhc3N1bWUg bm90aGluZyBtYXRjaGVzLCBpbml0aWFsbHkgKi8KKwkJCQltZW1zZXQob3Jf bWF0Y2hlcywgTVZTVEFUU19NQVRDSF9OT05FLCBzaXplb2YoY2hhcikqb3Jf bm1hdGNoZXMpOworCQkJCW9yX25tYXRjaGVzID0gMDsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQkvKiBBTkQgY2xhdXNlcyBhc3N1bWUgbm90aGluZyBt YXRjaGVzLCBpbml0aWFsbHkgKi8KKwkJCQltZW1zZXQob3JfbWF0Y2hlcywg TVZTVEFUU19NQVRDSF9GVUxMLCBzaXplb2YoY2hhcikqb3Jfbm1hdGNoZXMp OworCQkJfQorCisJCQkvKiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0 aGUgT1ItY2xhdXNlcyAqLworCQkJb3Jfbm1hdGNoZXMgPSB1cGRhdGVfbWF0 Y2hfYml0bWFwX21jdmxpc3Qocm9vdCwgb3JjbGF1c2VzLAorCQkJCQkJCQkJ ICAgc3Rha2V5cywgbWN2bGlzdCwKKwkJCQkJCQkJCSAgIG9yX25tYXRjaGVz LCBvcl9tYXRjaGVzLAorCQkJCQkJCQkJICAgbG93c2VsLCBmdWxsbWF0Y2gs IG9yX2NsYXVzZShjbGF1c2UpKTsKKworCQkJLyogbWVyZ2UgdGhlIGJpdG1h cCBpbnRvIHRoZSBleGlzdGluZyBvbmUqLworCQkJZm9yIChpID0gMDsgaSA8 IG1jdmxpc3QtPm5pdGVtczsgaSsrKQorCQkJeworCQkJCS8qCisJCQkJICog VG8gQU5ELW1lcmdlIHRoZSBiaXRtYXBzLCBhIE1JTigpIHNlbWFudGljcyBp cyB1c2VkLgorCQkJCSAqIEZvciBPUi1tZXJnZSwgdXNlIE1BWCgpLgorCQkJ CSAqCisJCQkJICogRklYTUUgdGhpcyBkb2VzIG5vdCBkZWNyZWFzZSB0aGUg bnVtYmVyIG9mIG1hdGNoZXMKKwkJCQkgKi8KKwkJCQlVUERBVEVfUkVTVUxU KG1hdGNoZXNbaV0sIG9yX21hdGNoZXNbaV0sIGlzX29yKTsKKwkJCX0KKwor CQkJcGZyZWUob3JfbWF0Y2hlcyk7CisKKwkJfQorCQllbHNlCisJCXsKKwkJ CWVsb2coRVJST1IsICJ1bmtub3duIGNsYXVzZSB0eXBlOiAlZCIsIGNsYXVz ZS0+dHlwZSk7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIGFsbCB0aGUgY29s dW1ucyB3ZXJlIG1hdGNoZWQgYnkgZXF1YWxpdHksIGl0J3MgYSBmdWxsIG1h dGNoLgorCSAqIEluIHRoaXMgY2FzZSB0aGVyZSBjYW4gYmUganVzdCBhIHNp bmdsZSBNQ1YgaXRlbSwgbWF0Y2hpbmcgdGhlCisJICogY2xhdXNlIChpZiB0 aGVyZSB3ZXJlIHR3bywgYm90aCB3b3VsZCBtYXRjaCB0aGUgb3RoZXIgb25l KS4KKwkgKi8KKwkqZnVsbG1hdGNoID0gKGJtc19udW1fbWVtYmVycyhlcW1h dGNoZXMpID09IG1jdmxpc3QtPm5kaW1lbnNpb25zKTsKKworCS8qIGZyZWUg dGhlIGFsbG9jYXRlZCBwaWVjZXMgKi8KKwlpZiAoZXFtYXRjaGVzKQorCQlw ZnJlZShlcW1hdGNoZXMpOworCisJcmV0dXJuIG5tYXRjaGVzOworfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4 IGI5ZGU3MWQuLmE5MmY4ODkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTQxNiw3ICs0MTYsNyBAQCBnZXRf cmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9u T2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJbXZzdGF0ID0gKEZvcm1f cGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1cCk7CiAKIAkJCS8qIHVu YXZhaWxhYmxlIHN0YXRzIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHRoZSBw bGFubmVyICovCi0JCQlpZiAobXZzdGF0LT5kZXBzX2J1aWx0KQorCQkJaWYg KG12c3RhdC0+ZGVwc19idWlsdCB8fCBtdnN0YXQtPm1jdl9idWlsdCkKIAkJ CXsKIAkJCQlpbmZvID0gbWFrZU5vZGUoTVZTdGF0aXN0aWNJbmZvKTsKIApA QCAtNDI1LDkgKzQyNSwxMSBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVy SW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFy ZW50LAogCiAJCQkJLyogZW5hYmxlZCBzdGF0aXN0aWNzICovCiAJCQkJaW5m by0+ZGVwc19lbmFibGVkID0gbXZzdGF0LT5kZXBzX2VuYWJsZWQ7CisJCQkJ aW5mby0+bWN2X2VuYWJsZWQgID0gbXZzdGF0LT5tY3ZfZW5hYmxlZDsKIAog CQkJCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0aXN0aWNzICovCiAJCQkJaW5m by0+ZGVwc19idWlsdCA9IG12c3RhdC0+ZGVwc19idWlsdDsKKwkJCQlpbmZv LT5tY3ZfYnVpbHQgID0gbXZzdGF0LT5tY3ZfYnVpbHQ7CiAKIAkJCQkvKiBz dGFrZXlzICovCiAJCQkJYWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RB VE9JRCwgaHR1cCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01h a2VmaWxlCmluZGV4IDA5OWYxZWQuLmY5YmYxMGMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNiBA QCBzdWJkaXIgPSBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzCiB0b3BfYnVp bGRkaXIgPSAuLi8uLi8uLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRpcikv c3JjL01ha2VmaWxlLmdsb2JhbAogCi1PQkpTID0gY29tbW9uLm8gZGVwZW5k ZW5jaWVzLm8KK09CSlMgPSBjb21tb24ubyBkZXBlbmRlbmNpZXMubyBtY3Yu bwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9u Lm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JF QURNRS5tY3YgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5t Y3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzY2Zl NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3Rh dHMvUkVBRE1FLm1jdgpAQCAtMCwwICsxLDEzNyBAQAorTUNWIGxpc3RzCis9 PT09PT09PT0KKworTXVsdGl2YXJpYXRlIE1DViAobW9zdC1jb21tb24gdmFs dWVzKSBsaXN0cyBhcmUgYSBzdHJhaWdodGZvcndhcmQgZXh0ZW5zaW9uIG9m CityZWd1bGFyIE1DViBsaXN0LCB0cmFja2luZyBtb3N0IGZyZXF1ZW50IGNv bWJpbmF0aW9ucyBvZiB2YWx1ZXMgZm9yIGEgZ3JvdXAgb2YKK2F0dHJpYnV0 ZXMuCisKK1RoaXMgd29ya3MgcGFydGljdWxhcmx5IHdlbGwgZm9yIGNvbHVt bnMgd2l0aCBhIHNtYWxsIG51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMsCith cyB0aGUgbGlzdCBtYXkgaW5jbHVkZSBhbGwgdGhlIGNvbWJpbmF0aW9ucyBh bmQgYXBwcm94aW1hdGUgdGhlIGRpc3RyaWJ1dGlvbgordmVyeSBhY2N1cmF0 ZWx5LgorCitGb3IgY29sdW1ucyB3aXRoIGxhcmdlIG51bWJlciBvZiBkaXN0 aW5jdCB2YWx1ZXMgKGUuZy4gdGhvc2Ugd2l0aCBjb250aW51b3VzCitkb21h aW5zKSwgdGhlIGxpc3Qgd2lsbCBvbmx5IHRyYWNrIHRoZSBtb3N0IGZyZXF1 ZW50IGNvbWJpbmF0aW9ucy4gSWYgdGhlCitkaXN0cmlidXRpb24gaXMgbW9z dGx5IHVuaWZvcm0gKGFsbCBjb21iaW5hdGlvbnMgYWJvdXQgZXF1YWxseSBm cmVxdWVudCksIHRoZQorTUNWIGxpc3Qgd2lsbCBiZSBlbXB0eS4KKworRXN0 aW1hdGVzIG9mIHNvbWUgY2xhdXNlcyAoZS5nLiBlcXVhbGl0eSkgYmFzZWQg b24gTUNWIGxpc3RzIGFyZSBtb3JlIGFjY3VyYXRlCit0aGFuIHdoZW4gdXNp bmcgaGlzdG9ncmFtcy4KKworQWxzbywgTUNWIGxpc3RzIGRvbid0IG5lY2Vz c2FyaWx5IHJlcXVpcmUgc29ydGluZyBvZiB0aGUgdmFsdWVzICh0aGUgZmFj dCB0aGF0Cit3ZSB1c2Ugc29ydGluZyB3aGVuIGJ1aWxkaW5nIHRoZW0gaXMg aW1wbGVtZW50YXRpb24gZGV0YWlsKSwgYnV0IGV2ZW4gbW9yZQoraW1wb3J0 YW50bHkgdGhlIG9yZGVyaW5nIGlzIG5vdCBidWlsdCBpbnRvIHRoZSBhcHBy b3hpbWF0aW9uICh3aGlsZSBoaXN0b2dyYW1zCithcmUgYnVpbHQgb24gb3Jk ZXJpbmcpLiBTbyBNQ1YgbGlzdHMgd29yayB3ZWxsIGV2ZW4gZm9yIGF0dHJp YnV0ZXMgd2hlcmUgdGhlCitvcmRlcmluZyBvZiB0aGUgZGF0YSB0eXBlIGlz IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBtZWFuaW5nIG9mIHRoZSBkYXRhLiBG b3IKK2V4YW1wbGUgd2Uga25vdyBob3cgdG8gc29ydCBzdHJpbmdzLCBidXQg aXQncyB1bmxpa2VseSB0byBtYWtlIG11Y2ggc2Vuc2UgZm9yCitjaXR5IG5h bWVzIChvciBvdGhlciBsYWJlbC1saWtlIGF0dHJpYnV0ZXMpLgorCisKK1Nl bGVjdGl2aXR5IGVzdGltYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KworVGhlIGVzdGltYXRpb24sIGltcGxlbWVudGVkIGluIGNsYXVzZWxpc3Rf bXZfc2VsZWN0aXZpdHlfbWN2bGlzdCgpLCBpcyBxdWl0ZQorc2ltcGxlIGlu IHByaW5jaXBsZSAtIHdlIG5lZWQgdG8gaWRlbnRpZnkgTUNWIGl0ZW1zIG1h dGNoaW5nIGFsbCB0aGUgY2xhdXNlcworYW5kIHN1bSBmcmVxdWVuY2llcyBv ZiBhbGwgdGhvc2UgaXRlbXMuCisKK0N1cnJlbnRseSBNQ1YgbGlzdHMgc3Vw cG9ydCBlc3RpbWF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgY2xhdXNlIHR5cGVz OgorCisgICAgKGEpIGVxdWFsaXR5IGNsYXVzZXMgICAgV0hFUkUgKGEgPSAx KSBBTkQgKGIgPSAyKQorICAgIChiKSBpbmVxdWFsaXR5IGNsYXVzZXMgIFdI RVJFIChhIDwgMSkgQU5EIChiID49IDIpCisgICAgKGMpIE5VTEwgY2xhdXNl cyAgICAgICAgV0hFUkUgKGEgSVMgTlVMTCkgQU5EIChiIElTIE5PVCBOVUxM KQorICAgIChkKSBPUiBjbGF1c2VzICAgICAgICAgIFdIRVJFIChhIDwgMSkg T1IgKGIgPj0gMikKKworSXQncyBwb3NzaWJsZSB0byBhZGQgc3VwcG9ydCBm b3IgYWRkaXRpb25hbCBjbGF1c2VzLCBmb3IgZXhhbXBsZToKKworICAgIChl KSBtdWx0aS12YXIgY2xhdXNlcyAgIFdIRVJFIChhID4gYikKKworYW5kIHBv c3NpYmx5IG90aGVycy4gVGhlc2UgYXJlIHRhc2tzIGZvciB0aGUgZnV0dXJl LCBub3QgeWV0IGltcGxlbWVudGVkLgorCisKK0VzdGltYXRpbmcgZXF1YWxp dHkgY2xhdXNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1do ZW4gY29tcHV0aW5nIHNlbGVjdGl2aXR5IGVzdGltYXRlIGZvciBlcXVhbGl0 eSBjbGF1c2VzCisKKyAgICAoYSA9IDEpIEFORCAoYiA9IDIpCisKK3dlIGNh biBkbyB0aGlzIGVzdGltYXRlIHByZXR0eSBleGFjdGx5IGFzc3VtaW5nIHRo YXQgdHdvIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICgxKSB0aGVyZSdz IGFuIGVxdWFsaXR5IGNvbmRpdGlvbiBvbiBhbGwgYXR0cmlidXRlcyBvZiB0 aGUgc3RhdGlzdGljCisKKyAgICAoMikgd2UgZmluZCBhIG1hdGNoaW5nIGl0 ZW0gaW4gdGhlIE1DViBsaXN0CisKK0luIHRoaXMgY2FzZSB3ZSBrbm93IHRo ZSBNQ1YgaXRlbSByZXByZXNlbnRzIGFsbCB0dXBsZXMgbWF0Y2hpbmcgdGhl IGNsYXVzZXMsCithbmQgdGhlIHNlbGVjdGl2aXR5IGVzdGltYXRlIGlzIGNv bXBsZXRlIChpLmUuIHdlIGRvbid0IG5lZWQgdG8gcGVyZm9ybQorZXN0aW1h dGlvbiB1c2luZyB0aGUgaGlzdG9ncmFtKS4gVGhpcyBpcyB3aGF0IHdlIGNh bGwgJ2Z1bGwgbWF0Y2gnLgorCitXaGVuIG9ubHkgKDEpIGhvbGRzLCBidXQg dGhlcmUncyBubyBtYXRjaGluZyBNQ1YgaXRlbSwgd2UgZG9uJ3Qga25vdyB3 aGV0aGVyCit0aGVyZSBhcmUgbm8gc3VjaCByb3dzIG9yIGp1c3QgYXJlIG5v dCB2ZXJ5IGZyZXF1ZW50LiBXZSBjYW4gaG93ZXZlciB1c2UgdGhlCitmcmVx dWVuY3kgb2YgdGhlIGxlYXN0IGZyZXF1ZW50IE1DViBpdGVtIGFzIGFuIHVw cGVyIGJvdW5kIGZvciB0aGUgc2VsZWN0aXZpdHkuCisKK0ZvciBhIGNvbWJp bmF0aW9uIG9mIGVxdWFsaXR5IGNvbmRpdGlvbnMgKG5vdCBmdWxsLW1hdGNo IGNhc2UpIHdlIGNhbiBjbGFtcCB0aGUKK3NlbGVjdGl2aXR5IGJ5IHRoZSBt aW5pbXVtIG9mIHNlbGVjdGl2aXRpZXMgZm9yIGVhY2ggY29uZGl0aW9uLiBG b3IgZXhhbXBsZSBpZgord2Uga25vdyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0 IHZhbHVlcyBmb3IgZWFjaCBjb2x1bW4sIHdlIGNhbiB1c2UgMS9uZGlzdGlu Y3QKK2FzIGEgcGVyLWNvbHVtbiBlc3RpbWF0ZS4gT3IgcmF0aGVyIDEvbmRp c3RpbmN0ICsgc2VsZWN0aXZpdHkgZGVyaXZlZCBmcm9tIHRoZQorTUNWIGxp c3QuCisKK1dlIHNob3VsZCBhbHNvIHByb2JhYmx5IG9ubHkgdXNlIHRoZSAn cmVzaWR1YWwgbmRpc3RpbmN0JyBieSBleGx1ZGluZyB0aGUgaXRlbXMKK2lu Y2x1ZGVkIGluIHRoZSBNQ1YgbGlzdCAoYW5kIGFsc28gcmVzaWR1YWwgZnJl cXVlbmN5KToKKworICAgICBmID0gKDEuMCAtIHN1bShNQ1YgZnJlcXVlbmNp ZXMpKSAvIChuZGlzdGluY3QgLSBuZGlzdGluY3QoTUNWIGxpc3QpKQorCiti dXQgaXQncyB3b3J0aCBwb2ludGluZyBvdXQgdGhlIG5kaXN0aW5jdCB2YWx1 ZXMgYXJlIG11bHRpLXZhcmlhdGUgZm9yIHRoZQorY29sdW1ucyByZWZlcmVu Y2VkIGJ5IHRoZSBlcXVhbGl0eSBjb25kaXRpb25zLgorCitOb3RlOiBPbmx5 IHRoZSAiZnVsbCBtYXRjaCIgbGltaXQgaXMgY3VycmVudGx5IGltcGxlbWVu dGVkLgorCisKK0hhc2hlZCBNQ1YgKG5vdCB5ZXQgaW1wbGVtZW50ZWQpCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZWd1bGFyIE1D ViBsaXN0cyBoYXZlIHRvIGluY2x1ZGUgYWN0dWFsIHZhbHVlcyBmb3IgZWFj aCBpdGVtLCBzbyBpZiB0aG9zZSBpdGVtcworYXJlIGxhcmdlIHRoZSBsaXN0 IG1heSBiZSBxdWl0ZSBsYXJnZS4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUg Zm9yIG11bHRpLXZhcmlhdGUKK01DViBsaXN0cywgYWx0aG91Z2ggdGhlIGN1 cnJlbnQgaW1wbGVtZW50YXRpb24gcGFydGlhbGx5IG1pdGlnYXRlcyB0aGlz IGJ5CitwZXJmb3JtaW5nIGRlLWR1cGxpY2F0aW5nIHRoZSB2YWx1ZXMgYmVm b3JlIHN0b3JpbmcgdGhlbSBvbiBkaXNrLgorCitJdCdzIHBvc3NpYmxlIHRv IG9ubHkgc3RvcmUgaGFzaGVzICgzMi1iaXQgdmFsdWVzKSBpbnN0ZWFkIG9m IHRoZSBhY3R1YWwgdmFsdWVzLAorc2lnbmlmaWNhbnRseSByZWR1Y2luZyB0 aGUgc3BhY2UgcmVxdWlyZW1lbnRzLiBPYnZpb3VzbHksIHRoaXMgd291bGQg b25seSBtYWtlCit0aGUgTUNWIGxpc3RzIHVzZWZ1bCBmb3IgZXN0aW1hdGlu ZyBlcXVhbGl0eSBjb25kaXRpb25zIChhc3N1bWluZyB0aGUgMzItYml0Cito YXNoZXMgbWFrZSB0aGUgY29sbGlzaW9ucyByYXJlIGVub3VnaCkuCisKK1Ro aXMgbWlnaHQgYWxzbyBjb21wbGljYXRlIG1hdGNoaW5nIHRoZSBjb2x1bW5z IHRvIGF2YWlsYWJsZSBzdGF0cy4KKworCitUT0RPIENvbnNpZGVyIGltcGxl bWVudGluZyBoYXNoZWQgTUNWIGxpc3QsIHN0b3JpbmcganVzdCAzMi1iaXQg aGFzaGVzIGluc3RlYWQKKyAgICAgb2YgdGhlIGFjdHVhbCB2YWx1ZXMuIFRo aXMgdHlwZSBvZiBNQ1YgbGlzdCB3aWxsIGJlIHVzZWZ1bCBvbmx5IGZvcgor ICAgICBlc3RpbWF0aW5nIGVxdWFsaXR5IGNsYXVzZXMsIGFuZCB3aWxsIHJl ZHVjZSBzcGFjZSByZXF1aXJlbWVudHMgZm9yIGxhcmdlCisgICAgIHZhcmxl bmEgdHlwZXMgKGluIHN1Y2ggY2FzZXMgd2UgdXN1YWxseSBvbmx5IHdhbnQg ZXF1YWxpdHkgYW55d2F5KS4KKworVE9ETyBDdXJyZW50bHkgdGhlcmUncyBu byBsb2dpYyB0byBjb25zaWRlciBidWlsZGluZyBvbmx5IGEgTUNWIGxpc3Qg KGFuZCBub3QKKyAgICAgYnVpbGRpbmcgdGhlIGhpc3RvZ3JhbSBhdCBhbGwp LCBleGNlcHQgZm9yIGRvaW5nIHRoaXMgZGVjaXNpb24gbWFudWFsbHkgaW4K KyAgICAgQUREIFNUQVRJU1RJQ1MuCisKKworSW5zcGVjdGluZyB0aGUgTUNW IGxpc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luc3BlY3Rpbmcg dGhlIHJlZ3VsYXIgKHBlci1hdHRyaWJ1dGUpIE1DViBsaXN0cyBpcyB0cml2 aWFsLCBhcyBpdCdzIGVub3VnaAordG8gc2VsZWN0IHRoZSBjb2x1bW5zIGZy b20gcGdfc3RhdHMgLSB0aGUgZGF0YSBpcyBlbmNvZGVkIGFzIGFueWFycmF5 cywgc28gd2UKK3NpbXBseSBnZXQgdGhlIHRleHQgcmVwcmVzZW50YXRpb24g b2YgdGhlIGFycmF5cy4KKworV2l0aCBtdWx0aXZhcmlhdGUgTUNWIGxpdHMg aXQncyBub3QgdGhhdCBzaW1wbGUgZHVlIHRvIHRoZSBwb3NzaWJsZSBtaXgg b2YKK2RhdGEgdHlwZXMuIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHByb2R1 Y2Ugc2ltaWxhciBhcnJheS1saWtlIHJlcHJlc2VudGF0aW9uLAorYnV0IHRo YXQnZCB1bm5lY2Vzc2FyaWx5IGNvbXBsaWNhdGUgZnVydGhlciBwcm9jZXNz aW5nIGFuZCBhbmFseXNpcyBvZiB0aGUgTUNWCitsaXN0LiBJbnN0ZWFkLCB0 aGVyZSdzIGEgU1JGIGZ1bmN0aW9uIHByb3ZpZGluZyB2YWx1ZXMsIGZyZXF1 ZW5jaWVzIGV0Yy4KKworICAgIFNFTEVDVCAqIEZST00gcGdfbXZfbWN2X2l0 ZW1zKCk7CisKK0l0IGhhcyB0d28gaW5wdXQgcGFyYW1ldGVyczoKKworICAg IG9pZCAgIC0gT0lEIG9mIHRoZSBNQ1YgbGlzdCAocGdfbXZfc3RhdGlzdGlj LnN0YW9pZCkKKworYW5kIHByb2R1Y2VzIGEgdGFibGUgd2l0aCB0aGVzZSBj b2x1bW5zOgorCisgICAgLSBpdGVtIElEICgwLi4ubml0ZW1zLTEpCisgICAg LSB2YWx1ZXMgKHN0cmluZyBhcnJheSkKKyAgICAtIG51bGxzIG9ubHkgKGJv b2xlYW4gYXJyYXkpCisgICAgLSBmcmVxdWVuY3kgKGRvdWJsZSBwcmVjaXNp b24pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JF QURNRS5zdGF0cyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1F LnN0YXRzCmluZGV4IGEzOGVhN2IuLjVjNWM1OWEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCkBAIC04LDkg KzgsNTAgQEAgbm90IHRydWUsIHJlc3VsdGluZyBpbiBlc3RpbWF0aW9uIGVy cm9ycy4KIE11bHRpdmFyaWF0ZSBzdGF0cyB0cmFjayBkaWZmZXJlbnQgdHlw ZXMgb2YgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIGNvbHVtbnMsCiBob3Bl ZnVsbHkgaW1wcm92aW5nIHRoZSBlc3RpbWF0ZXMuCiAKLUN1cnJlbnRseSB3 ZSBvbmx5IGhhdmUgb25lIGtpbmQgb2YgbXVsdGl2YXJpYXRlIHN0YXRpc3Rp Y3MgLSBzb2Z0IGZ1bmN0aW9uYWwKLWRlcGVuZGVuY2llcywgYW5kIHdlIHVz ZSBpdCB0byBpbXByb3ZlIGVzdGltYXRlcyBvZiBlcXVhbGl0eSBjbGF1c2Vz LiBTZWUKLVJFQURNRS5kZXBlbmRlbmNpZXMgZm9yIGRldGFpbHMuCisKK1R5 cGVzIG9mIHN0YXRpc3RpY3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3Vy cmVudGx5IHdlIG9ubHkgaGF2ZSB0d28ga2luZHMgb2YgbXVsdGl2YXJpYXRl IHN0YXRpc3RpY3MKKworICAgIChhKSBzb2Z0IGZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzIChSRUFETUUuZGVwZW5kZW5jaWVzKQorCisgICAgKGIpIE1DViBs aXN0cyAoUkVBRE1FLm1jdikKKworCitDb21wYXRpYmxlIGNsYXVzZSB0eXBl cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRWFjaCB0eXBlIG9mIHN0 YXRpc3RpY3MgbWF5IGJlIHVzZWQgdG8gZXN0aW1hdGUgc29tZSBzdWJzZXQg b2YgY2xhdXNlIHR5cGVzLgorCisgICAgKGEpIGZ1bmN0aW9uYWwgZGVwZW5k ZW5jaWVzIC0gZXF1YWxpdHkgY2xhdXNlcyAoQU5EKSwgcG9zc2libHkgSVMg TlVMTAorCisgICAgKGIpIE1DViBsaXN0IC0gZXF1YWxpdHkgYW5kIGluZXF1 YWxpdHkgY2xhdXNlcywgSVMgW05PVF0gTlVMTCwgQU5EL09SCisKK0N1cnJl bnRseSBvbmx5IHNpbXBsZSBvcGVyYXRvciBjbGF1c2VzIChWYXIgb3AgQ29u c3QpIGFyZSBzdXBwb3J0ZWQsIGJ1dCBpdCdzCitwb3NzaWJsZSB0byBzdXBw b3J0IG1vcmUgY29tcGxleCBjbGF1c2UgdHlwZXMsIGUuZy4gKFZhciBvcCBW YXIpLgorCisKK0NvbXBsZXggY2xhdXNlcworLS0tLS0tLS0tLS0tLS0tCisK K1dlIGFsc28gc3VwcG9ydCBlc3RpbWF0aW5nIG1vcmUgY29tcGxleCBjbGF1 c2VzIC0gZXNzZW50aWFsbHkgQU5EL09SIGNsYXVzZXMKK3dpdGggKFZhciBv cCBDb25zdCkgYXMgbGVhdmVzLCBhcyBsb25nIGFzIGFsbCB0aGUgcmVmZXJl bmNlZCBhdHRyaWJ1dGVzIGFyZQorY292ZXJlZCBieSBhIHNpbmdsZSBzdGF0 aXN0aWNzLgorCitGb3IgZXhhbXBsZSB0aGlzIGNvbmRpdGlvbgorCisgICAg KGE9MSkgQU5EICgoYj0yKSBPUiAoKGM9MykgQU5EIChkPTQpKSkKKworbWF5 IGJlIGVzdGltYXRlZCB1c2luZyBzdGF0aXN0aWNzIG9uIChhLGIsYyxkKS4g SWYgd2Ugb25seSBoYXZlIHN0YXRpc3RpY3Mgb24KKyhiLGMsZCkgd2UgbWF5 IGVzdGltYXRlIHRoZSBzZWNvbmQgcGFydCwgYW5kIGVzdGltYXRlIChhPTEp IHVzaW5nIHNpbXBsZSBzdGF0cy4KKworSWYgd2Ugb25seSBoYXZlIHN0YXRp c3RpY3Mgb24gKGEsYixjKSB3ZSBjYW4ndCBhcHBseSBpdCBhdCBhbGwgYXQg dGhpcyBwb2ludCwKK2J1dCBpdCdzIHdvcnRoIHBvaW50aW5nIG91dCBjbGF1 c2VsaXN0X3NlbGVjdGl2aXR5KCkgd29ya3MgcmVjdXJzaXZlbHkgYW5kIHdo ZW4KK2hhbmRsaW5nIHRoZSBzZWNvbmQgcGFydCAodGhlIE9SLWNsYXVzZSks IHdlJ2xsIGJlIGFibGUgdG8gYXBwbHkgdGhlIHN0YXRpc3RpY3MuCisKK05v dGU6IFRoZSBtdWx0aS1zdGF0aXN0aWNzIGVzdGltYXRpb24gcGF0Y2ggYWxz byBtYWtlcyBpdCBwb3NzaWJsZSB0byBwYXNzIHNvbWUKK2NsYXVzZXMgYXMg J2NvbmRpdGlvbnMnIGludG8gdGhlIGRlZXBlciBwYXJ0cyBvZiB0aGUgZXhw cmVzc2lvbiB0cmVlLgogCiAKIFNlbGVjdGl2aXR5IGVzdGltYXRpb24KQEAg LTIzLDE0ICs2NCw0OCBAQCBXaGVuIGVzdGltYXRpbmcgc2VsZWN0aXZpdHks IHdlIGFpbSB0byBhY2hpZXZlIHNldmVyYWwgdGhpbmdzOgogICAgIChiKSBt aW5pbWl6ZSB0aGUgb3ZlcmhlYWQsIGVzcGVjaWFsbHkgd2hlbiBubyBzdWl0 YWJsZSBtdWx0aXZhcmlhdGUgc3RhdHMKICAgICAgICAgZXhpc3QgKHNvIGlm IHlvdSBhcmUgbm90IHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywgdGhlcmUn cyBubyBvdmVyaGVhZCkKIAotVGhpcyBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5 KCkgcGVyZm9ybXMgc2V2ZXJhbCBpbmV4cGVuc2l2ZSBjaGVja3MgZmlyc3Qs IGJlZm9yZQorVGh1cyBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KCkgcGVyZm9y bXMgc2V2ZXJhbCBpbmV4cGVuc2l2ZSBjaGVja3MgZmlyc3QsIGJlZm9yZQog ZXZlbiBhdHRlbXB0aW5nIHRvIGRvIHRoZSBtb3JlIGV4cGVuc2l2ZSBlc3Rp bWF0aW9uLgogCiAgICAgKDEpIGNoZWNrIGlmIHRoZXJlIGFyZSBtdWx0aXZh cmlhdGUgc3RhdHMgb24gdGhlIHJlbGF0aW9uCiAKLSAgICAoMikgY2hlY2sg dGhlcmUgYXJlIGF0IGxlYXN0IHR3byBhdHRyaWJ1dGVzIHJlZmVyZW5jZWQg YnkgY2xhdXNlcyBjb21wYXRpYmxlCi0gICAgICAgIHdpdGggbXVsdGl2YXJp YXRlIHN0YXRpc3RpY3MgKGVxdWFsaXR5IGNsYXVzZXMgZm9yIGZ1bmMuIGRl cGVuZGVuY2llcykKKyAgICAoMikgY2hlY2sgdGhhdCB0aGVyZSBhcmUgZnVu Y3Rpb25hbCBkZXBlbmRlbmNpZXMgb24gdGhlIHRhYmxlLCBhbmQgdGhhdAor ICAgICAgICB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIGF0dHJpYnV0ZXMgcmVm ZXJlbmNlZCBieSBjb21wYXRpYmxlIGNsYXVzZXMKKyAgICAgICAgKGVxdWFs aXR5IGNsYXVzZXMgZm9yIGZ1bmMuIGRlcGVuZGVuY2llcykKIAogICAgICgz KSBwZXJmb3JtIHJlZHVjdGlvbiBvZiBlcXVhbGl0eSBjbGF1c2VzIHVzaW5n IGZ1bmMuIGRlcGVuZGVuY2llcwogCi0gICAgKDQpIGVzdGltYXRlIHRoZSBy ZWR1Y2VkIGxpc3Qgb2YgY2xhdXNlcyB1c2luZyByZWd1bGFyIHN0YXRpc3Rp Y3MKKyAgICAoNCkgY2hlY2sgdGhhdCB0aGVyZSBhcmUgbXVsdGl2YXJpYXRl IE1DViBsaXN0cyBvbiB0aGUgdGFibGUsIGFuZCB0aGF0CisgICAgICAgIHRo ZXJlIGFyZSBhdCBsZWFzdCB0d28gYXR0cmlidXRlcyByZWZlcmVuY2VkIGJ5 IGNvbXBhdGlibGUgY2xhdXNlcworICAgICAgICAoZXF1YWxpdGllcywgaW5l cXVhbGl0aWVzLCBldGMuKQorCisgICAgKDUpIGZpbmQgdGhlIGJlc3QgbXVs dGl2YXJpYXRlIHN0YXRpc3RpY3MgKG1hdGNoaW5nIHRoZSBtb3N0IGNvbmRp dGlvbnMpCisgICAgICAgIGFuZCB1c2UgaXQgdG8gY29tcHV0ZSB0aGUgZXN0 aW1hdGUKKworICAgICg2KSBlc3RpbWF0ZSB0aGUgcmVtYWluaW5nIGNsYXVz ZXMgKG5vdCBlc3RpbWF0ZWQgdXNpbmcgbXVsdGl2YXJpYXRlIHN0YXRzKQor ICAgICAgICB1c2luZyB0aGUgcmVndWxhciBwZXItY29sdW1uIHN0YXRpc3Rp Y3MKKworV2hlbmV2ZXIgd2UgZmluZCB0aGVyZSBhcmUgbm8gc3VpdGFibGUg c3RhdHMsIHdlIHNraXAgdGhlIGV4cGVuc2l2ZSBzdGVwcy4KKworCitGdXJ0 aGVyIChwb3NzaWJseSBjcmF6eSkgaWRlYXMKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCitDdXJyZW50bHkgdGhlIGNsYXVzZXMgYXJlIG9u bHkgZXN0aW1hdGVkIHVzaW5nIGEgc2luZ2xlIHN0YXRpc3RpY3MsIGV2ZW4g aWYKK3RoZXJlIGFyZSBtdWx0aXBsZSBjYW5kaWRhdGUgc3RhdGlzdGljcyAt IGZvciBleGFtcGxlIGFzc3VtZSB3ZSBoYXZlIHN0YXRpc3RpY3MKK29uIChh LGIsYykgYW5kIChiLGMsZCksIGFuZCBlc3RpbWF0ZSBjb25kaXRpb25zCisK KyAgICAoYiA9IDEpIEFORCAoYyA9IDIpCisKK1RoZW4gYm90aCBzdGF0aXN0 aWNzIG1heSBiZSB1c2VkLCBidXQgd2Ugb25seSB1c2Ugb25lIG9mIHRoZW0u IE1heWJlIHdlIGNvdWxkCit1c2UgY29tcHV0ZSBlc3RpbWF0ZXMgdXNpbmcg YWxsIGNhbmRpZGF0ZSBzdGF0cywgYW5kIHNvbWVob3cgYWdncmVnYXRlIHRo ZW0KK2ludG8gdGhlIGZpbmFsIGVzdGltYXRlIGJ5IHVzaW5nIGF2ZXJhZ2Ug b3IgbWVkaWFuLgorCitTb21lIHN0YXRzIG1heSBnaXZlIGJldHRlciBlc3Rp bWF0ZXMgdGhhbiBvdGhlcnMsIGJ1dCBpdCdzIHZlcnkgZGlmZmljdWx0IHRv IHNheQoraW4gYWR2YW5jZSB3aGljaCBzdGF0cyBhcmUgdGhlIGJlc3QgKGl0 IGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBidWNrZXRzLCBudW1iZXIKK29m IGFkZGl0aW9uYWwgY29sdW1ucyBub3QgcmVmZXJlbmNlZCBpbiB0aGUgY2xh dXNlcywgdHlwZSBvZiBjb25kaXRpb24gZXRjLikuCisKK0J1dCBvZiBjb3Vy c2UsIHRoaXMgbWF5IHJlc3VsdCBpbiBleHBlbnNpdmUgZXN0aW1hdGlvbiAo Q1BVLXdpc2UpLgorCitTbyB3ZSBtaWdodCBhZGQgYSBHVUMgdG8gY2hvb3Nl IGJldHdlZW4gYSBzaW1wbGUgKHNpbmdsZSBzdGF0aXN0aWNzKSBhbmQgdGh1 cworbXVsdGktc3RhdGlzdGljIGVzdGltYXRpb24sIHBvc3NpYmx5IHRhYmxl LWxldmVsIHBhcmFtZXRlciAoQUxURVIgVEFCTEUgLi4uKS4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMgYi9zcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCmluZGV4IGJkMjAwYmMu LmQxZGE3MTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3Rh dHMvY29tbW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9j b21tb24uYwpAQCAtMTYsMTIgKzE2LDE0IEBACiAKICNpbmNsdWRlICJjb21t b24uaCIKIAorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCisKIHN0YXRpYyBW YWNBdHRyU3RhdHMgKiogbG9va3VwX3Zhcl9hdHRyX3N0YXRzKGludDJ2ZWN0 b3IgKmF0dHJzLAotCQkJCQkJCQkJICBpbnQgbmF0dHMsIFZhY0F0dHJTdGF0 cyAqKnZhY2F0dHJzdGF0cyk7CisJCQkJCQkJCQkJCSBpbnQgbmF0dHMsCisJ CQkJCQkJCQkJCSBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwogCiBz dGF0aWMgTGlzdCogbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQpOwogCi0KIC8q CiAgKiBDb21wdXRlIHJlcXVlc3RlZCBtdWx0aXZhcmlhdGUgc3RhdHMsIHVz aW5nIHRoZSByb3dzIHNhbXBsZWQgZm9yIHRoZQogICogcGxhaW4gKHNpbmds ZS1jb2x1bW4pIHN0YXRzLgpAQCAtNDksNiArNTEsOCBAQCBidWlsZF9tdl9z dGF0cyhSZWxhdGlvbiBvbmVyZWwsIGludCBudW1yb3dzLCBIZWFwVHVwbGUg KnJvd3MsCiAJCWludAkJCQlqOwogCQlNVlN0YXRpc3RpY0luZm8gKnN0YXQg PSAoTVZTdGF0aXN0aWNJbmZvICopbGZpcnN0KGxjKTsKIAkJTVZEZXBlbmRl bmNpZXMJZGVwcyAgPSBOVUxMOworCQlNQ1ZMaXN0CQltY3ZsaXN0ICAgPSBO VUxMOworCQlpbnQgbnVtcm93c19maWx0ZXJlZCAgPSAwOwogCiAJCVZhY0F0 dHJTdGF0cyAgKipzdGF0cyAgPSBOVUxMOwogCQlpbnQJCQkJbnVtYXR0cyAg ID0gMDsKQEAgLTg3LDggKzkxLDEyIEBAIGJ1aWxkX212X3N0YXRzKFJlbGF0 aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAkJ aWYgKHN0YXQtPmRlcHNfZW5hYmxlZCkKIAkJCWRlcHMgPSBidWlsZF9tdl9k ZXBlbmRlbmNpZXMobnVtcm93cywgcm93cywgYXR0cnMsIHN0YXRzKTsKIAor CQkvKiBidWlsZCB0aGUgTUNWIGxpc3QgKi8KKwkJaWYgKHN0YXQtPm1jdl9l bmFibGVkKQorCQkJbWN2bGlzdCA9IGJ1aWxkX212X21jdmxpc3QobnVtcm93 cywgcm93cywgYXR0cnMsIHN0YXRzLCAmbnVtcm93c19maWx0ZXJlZCk7CisK IAkJLyogc3RvcmUgdGhlIGhpc3RvZ3JhbSAvIE1DViBsaXN0IGluIHRoZSBj YXRhbG9nICovCi0JCXVwZGF0ZV9tdl9zdGF0cyhzdGF0LT5tdm9pZCwgZGVw cywgYXR0cnMpOworCQl1cGRhdGVfbXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRl cHMsIG1jdmxpc3QsIGF0dHJzLCBzdGF0cyk7CiAJfQogfQogCkBAIC0xNjYs NiArMTc0LDggQEAgbGlzdF9tdl9zdGF0cyhPaWQgcmVsaWQpCiAJCWluZm8t PnN0YWtleXMgPSBidWlsZGludDJ2ZWN0b3Ioc3RhdHMtPnN0YWtleXMudmFs dWVzLCBzdGF0cy0+c3Rha2V5cy5kaW0xKTsKIAkJaW5mby0+ZGVwc19lbmFi bGVkID0gc3RhdHMtPmRlcHNfZW5hYmxlZDsKIAkJaW5mby0+ZGVwc19idWls dCA9IHN0YXRzLT5kZXBzX2J1aWx0OworCQlpbmZvLT5tY3ZfZW5hYmxlZCA9 IHN0YXRzLT5tY3ZfZW5hYmxlZDsKKwkJaW5mby0+bWN2X2J1aWx0ID0gc3Rh dHMtPm1jdl9idWlsdDsKIAogCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwg aW5mbyk7CiAJfQpAQCAtMTgwLDggKzE5MCw1NiBAQCBsaXN0X212X3N0YXRz KE9pZCByZWxpZCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisKKy8qCisgKiBG aW5kIGF0dG5pbXMgb2YgTVYgc3RhdHMgdXNpbmcgdGhlIG12b2lkLgorICov CitpbnQydmVjdG9yKgorZmluZF9tdl9hdHRudW1zKE9pZCBtdm9pZCwgT2lk ICpyZWxpZCkKK3sKKwlBcnJheVR5cGUgICphcnI7CisJRGF0dW0JCWFkYXR1 bTsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCWh0dXA7CisJaW50MnZl Y3RvciAqa2V5czsKKworCS8qIFByZXBhcmUgdG8gc2NhbiBwZ19tdl9zdGF0 aXN0aWMgZm9yIGVudHJpZXMgaGF2aW5nIGluZHJlbGlkID0gdGhpcyByZWwu ICovCisJaHR1cCA9IFNlYXJjaFN5c0NhY2hlMShNVlNUQVRPSUQsCisJCQkJ CQkJIE9iamVjdElkR2V0RGF0dW0obXZvaWQpKTsKKworCS8qIFhYWCBzeXNj YWNoZSBjb250YWlucyBPSURzIG9mIGRlbGV0ZWQgc3RhdHMgKG5vdCBpbnZh bGlkYXRlZCkgKi8KKwlpZiAoISBIZWFwVHVwbGVJc1ZhbGlkKGh0dXApKQor CQlyZXR1cm4gTlVMTDsKKworCS8qIHN0YXJlbGlkICovCisJYWRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKE1WU1RBVE9JRCwgaHR1cCwKKwkJCQkJCQkgQW51 bV9wZ19tdl9zdGF0aXN0aWNfc3RhcmVsaWQsICZpc251bGwpOworCUFzc2Vy dCghaXNudWxsKTsKKworCSpyZWxpZCA9IERhdHVtR2V0T2JqZWN0SWQoYWRh dHVtKTsKKworCS8qIHN0YWtleXMgKi8KKwlhZGF0dW0gPSBTeXNDYWNoZUdl dEF0dHIoTVZTVEFUT0lELCBodHVwLAorCQkJCQkJCSBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFrZXlzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7 CisKKwlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoYWRhdHVtKTsKKworCWtl eXMgPSBidWlsZGludDJ2ZWN0b3IoKGludDE2ICopIEFSUl9EQVRBX1BUUihh cnIpLAorCQkJCQkJCUFSUl9ESU1TKGFycilbMF0pOworCVJlbGVhc2VTeXND YWNoZShodHVwKTsKKworCS8qIFRPRE8gbWF5YmUgc2F2ZSB0aGUgbGlzdCBp bnRvIHJlbGNhY2hlLCBhcyBpbiBSZWxhdGlvbkdldEluZGV4TGlzdAorCSAq ICAgICAgKHdoaWNoIHdhcyB1c2VkIGFzIGFuIGluc3BpcmF0aW9uIG9mIHRo aXMgb25lKT8uICovCisKKwlyZXR1cm4ga2V5czsKK30KKworCiB2b2lkCi11 cGRhdGVfbXZfc3RhdHMoT2lkIG12b2lkLCBNVkRlcGVuZGVuY2llcyBkZXBl bmRlbmNpZXMsIGludDJ2ZWN0b3IgKmF0dHJzKQordXBkYXRlX212X3N0YXRz KE9pZCBtdm9pZCwKKwkJCQlNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMs IE1DVkxpc3QgbWN2bGlzdCwKKwkJCQlpbnQydmVjdG9yICphdHRycywgVmFj QXR0clN0YXRzICoqc3RhdHMpCiB7CiAJSGVhcFR1cGxlCXN0dXAsCiAJCQkJ b2xkdHVwOwpAQCAtMjA2LDE4ICsyNjQsMjkgQEAgdXBkYXRlX212X3N0YXRz KE9pZCBtdm9pZCwgTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBpbnQy dmVjdG9yICphdHRycykKIAkJCT0gUG9pbnRlckdldERhdHVtKHNlcmlhbGl6 ZV9tdl9kZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKSk7CiAJfQogCisJaWYg KG1jdmxpc3QgIT0gTlVMTCkKKwl7CisJCWJ5dGVhICogZGF0YSA9IHNlcmlh bGl6ZV9tdl9tY3ZsaXN0KG1jdmxpc3QsIGF0dHJzLCBzdGF0cyk7CisJCW51 bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YW1jdiAtMV0gICAgPSAoZGF0 YSA9PSBOVUxMKTsKKwkJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0 YW1jdiAgLSAxXSA9IFBvaW50ZXJHZXREYXR1bShkYXRhKTsKKwl9CisKIAkv KiBhbHdheXMgcmVwbGFjZSB0aGUgdmFsdWUgKGVpdGhlciBieSBieXRlYSBv ciBOVUxMKSAqLwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0 YWRlcHMgLTFdID0gdHJ1ZTsKKwlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRp c3RpY19zdGFtY3YgLTFdID0gdHJ1ZTsKIAogCS8qIGFsd2F5cyBjaGFuZ2Ug dGhlIGF2YWlsYWJpbGl0eSBmbGFncyAqLwogCW51bGxzW0FudW1fcGdfbXZf c3RhdGlzdGljX2RlcHNfYnVpbHQgLTFdID0gZmFsc2U7CisJbnVsbHNbQW51 bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1aWx0IC0xXSA9IGZhbHNlOwogCW51 bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMtMV0gICAgID0gZmFs c2U7CiAKIAkvKiB1c2UgdGhlIG5ldyBhdHRudW1zLCBpbiBjYXNlIHdlIHJl bW92ZWQgc29tZSBkcm9wcGVkIG9uZXMgKi8KIAlyZXBsYWNlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19kZXBzX2J1aWx0LTFdID0gdHJ1ZTsKKwlyZXBsYWNl c1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQgIC0xXSA9IHRydWU7 CiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5cyAtMV0g ICAgPSB0cnVlOwogCiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX2Rl cHNfYnVpbHQtMV0gPSBCb29sR2V0RGF0dW0oZGVwZW5kZW5jaWVzICE9IE5V TEwpOworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfYnVpbHQg IC0xXSA9IEJvb2xHZXREYXR1bShtY3ZsaXN0ICE9IE5VTEwpOwogCXZhbHVl c1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzIC0xXSAgICA9IFBvaW50 ZXJHZXREYXR1bShhdHRycyk7CiAKIAkvKiBJcyB0aGVyZSBhbHJlYWR5IGEg cGdfbXZfc3RhdGlzdGljIHR1cGxlIGZvciB0aGlzIGF0dHJpYnV0ZT8gKi8K QEAgLTI0Niw2ICszMTUsMjEgQEAgdXBkYXRlX212X3N0YXRzKE9pZCBtdm9p ZCwgTVZEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLCBpbnQydmVjdG9yICph dHRycykKIAloZWFwX2Nsb3NlKHNkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIH0K IAorCitpbnQKK212X2dldF9pbmRleChBdHRyTnVtYmVyIHZhcmF0dG5vLCBp bnQydmVjdG9yICogc3Rha2V5cykKK3sKKwlpbnQgaSwgaWR4ID0gMDsKKwlm b3IgKGkgPSAwOyBpIDwgc3Rha2V5cy0+ZGltMTsgaSsrKQorCXsKKwkJaWYg KHN0YWtleXMtPnZhbHVlc1tpXSA8IHZhcmF0dG5vKQorCQkJaWR4ICs9IDE7 CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaWR4OworfQorCiAv KiBtdWx0aS12YXJpYXRlIHN0YXRzIGNvbXBhcmF0b3IgKi8KIAogLyoKQEAg LTI1NiwxMSArMzQwLDE1IEBAIHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQs IE1WRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcywgaW50MnZlY3RvciAqYXR0 cnMpCiBpbnQKIGNvbXBhcmVfc2NhbGFyc19zaW1wbGUoY29uc3Qgdm9pZCAq YSwgY29uc3Qgdm9pZCAqYiwgdm9pZCAqYXJnKQogewotCURhdHVtCQlkYSA9 ICooRGF0dW0qKWE7Ci0JRGF0dW0JCWRiID0gKihEYXR1bSopYjsKLQlTb3J0 U3VwcG9ydCBzc3VwPSAoU29ydFN1cHBvcnQpIGFyZzsKKwlyZXR1cm4gY29t cGFyZV9kYXR1bXNfc2ltcGxlKCooRGF0dW0qKWEsCisJCQkJCQkJCSAqKERh dHVtKiliLAorCQkJCQkJCQkgKFNvcnRTdXBwb3J0KWFyZyk7Cit9CiAKLQly ZXR1cm4gQXBwbHlTb3J0Q29tcGFyYXRvcihkYSwgZmFsc2UsIGRiLCBmYWxz ZSwgc3N1cCk7CitpbnQKK2NvbXBhcmVfZGF0dW1zX3NpbXBsZShEYXR1bSBh LCBEYXR1bSBiLCBTb3J0U3VwcG9ydCBzc3VwKQoreworCXJldHVybiBBcHBs eVNvcnRDb21wYXJhdG9yKGEsIGZhbHNlLCBiLCBmYWxzZSwgc3N1cCk7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5oIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24u aAppbmRleCA2ZDU0NjViLi5mNDMwOWY3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5oCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvY29tbW9uLmgKQEAgLTQ2LDcgKzQ2LDE1IEBAIHR5 cGVkZWYgc3RydWN0CiAJRGF0dW0JCXZhbHVlOwkJCS8qIGEgZGF0YSB2YWx1 ZSAqLwogCWludAkJCXR1cG5vOwkJCS8qIHBvc2l0aW9uIGluZGV4IGZvciB0 dXBsZSBpdCBjYW1lIGZyb20gKi8KIH0gU2NhbGFySXRlbTsKLSAKKworLyog KGRlKXNlcmlhbGl6YXRpb24gaW5mbyAqLwordHlwZWRlZiBzdHJ1Y3QgRGlt ZW5zaW9uSW5mbyB7CisJaW50CQludmFsdWVzOwkvKiBudW1iZXIgb2YgZGVk dXBsaWNhdGVkIHZhbHVlcyAqLworCWludAkJbmJ5dGVzOwkJLyogbnVtYmVy IG9mIGJ5dGVzIChzZXJpYWxpemVkKSAqLworCWludAkJdHlwbGVuOwkJLyog cGdfdHlwZS50eXBsZW4gKi8KKwlib29sCXR5cGJ5dmFsOwkvKiBwZ190eXBl LnR5cGJ5dmFsICovCit9IERpbWVuc2lvbkluZm87CisKIC8qIG11bHRpLXNv cnQgKi8KIHR5cGVkZWYgc3RydWN0IE11bHRpU29ydFN1cHBvcnREYXRhIHsK IAlpbnQJCQkJbmRpbXM7CQkvKiBudW1iZXIgb2YgZGltZW5zaW9ucyBzdXBw b3J0ZWQgYnkgdGhlICovCkBAIC03MSw1ICs3OSw2IEBAIGludCBtdWx0aV9z b3J0X2NvbXBhcmVfZGltKGludCBkaW0sIGNvbnN0IFNvcnRJdGVtICphLAog CQkJCQkJICAgY29uc3QgU29ydEl0ZW0gKmIsIE11bHRpU29ydFN1cHBvcnQg bXNzKTsKIAogLyogY29tcGFyYXRvcnMsIHVzZWQgd2hlbiBjb25zdHJ1Y3Rp bmcgbXVsdGl2YXJpYXRlIHN0YXRzICovCitpbnQgY29tcGFyZV9kYXR1bXNf c2ltcGxlKERhdHVtIGEsIERhdHVtIGIsIFNvcnRTdXBwb3J0IHNzdXApOwog aW50IGNvbXBhcmVfc2NhbGFyc19zaW1wbGUoY29uc3Qgdm9pZCAqYSwgY29u c3Qgdm9pZCAqYiwgdm9pZCAqYXJnKTsKIGludCBjb21wYXJlX3NjYWxhcnNf cGFydGl0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIsIHZvaWQg KmFyZyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L21jdi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9tY3YuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTFjOTM0Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9tY3Yu YwpAQCAtMCwwICsxLDEwOTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIG1jdi5jCisgKgkgIFBPU1RHUkVTIG11bHRpdmFy aWF0ZSBNQ1YgbGlzdHMKKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMTUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2Vu dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisg KiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL21jdi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJm bWdyLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorCisjaW5jbHVkZSAidXRp bHMvbHN5c2NhY2hlLmgiCisKKyNpbmNsdWRlICJjb21tb24uaCIKKworLyoK KyAqIEVhY2ggc2VyaWFsaXplZCBpdGVtIG5lZWRzIHRvIHN0b3JlIChpbiB0 aGlzIG9yZGVyKToKKyAqCisgKiAtIGluZGV4ZXMgICAgICAgICAgICAgIChu ZGltICogc2l6ZW9mKGludDMyKSkKKyAqIC0gbnVsbCBmbGFncyAgICAgICAg ICAgKG5kaW0gKiBzaXplb2YoYm9vbCkpCisgKiAtIGZyZXF1ZW5jeSAgICAg ICAgICAgIChzaXplb2YoZG91YmxlKSkKKyAqCisgKiBTbyBpbiB0b3RhbDoK KyAqCisgKiAgIG5kaW0gKiAoc2l6ZW9mKGludDMyKSArIHNpemVvZihib29s KSkgKyBzaXplb2YoZG91YmxlKQorICovCisjZGVmaW5lIElURU1fU0laRShu ZGltcykJXAorCShuZGltcyAqIChzaXplb2YodWludDE2KSArIHNpemVvZihi b29sKSkgKyBzaXplb2YoZG91YmxlKSkKKworLyogcG9pbnRlcnMgaW50byBh IGZsYXQgc2VyaWFsaXplZCBpdGVtIG9mIElURU1fU0laRShuKSBieXRlcyAq LworI2RlZmluZSBJVEVNX0lOREVYRVMoaXRlbSkJCQkoKHVpbnQxNiopaXRl bSkKKyNkZWZpbmUgSVRFTV9OVUxMUyhpdGVtLG5kaW1zKQkJKChib29sKiko SVRFTV9JTkRFWEVTKGl0ZW0pICsgbmRpbXMpKQorI2RlZmluZSBJVEVNX0ZS RVFVRU5DWShpdGVtLG5kaW1zKQkoKGRvdWJsZSopKElURU1fTlVMTFMoaXRl bSxuZGltcykgKyBuZGltcykpCisKKy8qCisgKiBCdWlsZHMgTUNWIGxpc3Qg ZnJvbSBzYW1wbGUgcm93cywgYW5kIHJlbW92ZXMgcm93cyByZXByZXNlbnRl ZCBieQorICogdGhlIE1DViBsaXN0IGZyb20gdGhlIHNhbXBsZSAodGhlIG51 bWJlciBvZiByZW1haW5pbmcgc2FtcGxlIHJvd3MgaXMKKyAqIHJldHVybmVk IGJ5IHRoZSBudW1yb3dzX2ZpbHRlcmVkIHBhcmFtZXRlcikuCisgKgorICog VGhlIG1ldGhvZCBpcyBxdWl0ZSBzaW1wbGUgLSBpbiBzaG9ydCBpdCBkb2Vz IGFib3V0IHRoZXNlIHN0ZXBzOgorICoKKyAqICAgICAgICgxKSBzb3J0IHRo ZSBkYXRhIChkZWZhdWx0IGNvbGxhdGlvbiwgJzwnIGZvciB0aGUgZGF0YSB0 eXBlKQorICoKKyAqICAgICAgICgyKSBjb3VudCBkaXN0aW5jdCBncm91cHMs IGRlY2lkZSBob3cgbWFueSB0byBrZWVwCisgKgorICogICAgICAgKDMpIGJ1 aWxkIHRoZSBNQ1YgbGlzdCB1c2luZyB0aGUgdGhyZXNob2xkIGRldGVybWlu ZWQgaW4gKDIpCisgKgorICogICAgICAgKDQpIHJlbW92ZSByb3dzIHJlcHJl c2VudGVkIGJ5IHRoZSBNQ1YgZnJvbSB0aGUgc2FtcGxlCisgKgorICogRm9y IG1vcmUgZGV0YWlscywgc2VlIHRoZSBjb21tZW50cyBpbiB0aGUgY29kZS4K KyAqCisgKiBGSVhNRSBVc2UgbWF4X21jdl9pdGVtcyBmcm9tIEFMVEVSIFRB QkxFIEFERCBTVEFUSVNUSUNTIGNvbW1hbmQuCisgKgorICogRklYTUUgU2lu Z2xlLWRpbWVuc2lvbmFsIE1DViBpcyBzb3J0ZWQgYnkgZnJlcXVlbmN5IChk ZXNjZW5kaW5nKS4gV2UKKyAqICAgICAgIHNob3VsZCBkbyB0aGF0IHRvbywg YmVjYXVzZSB3aGVuIHdhbGtpbmcgdGhyb3VnaCB0aGUgbGlzdCB3ZQorICog ICAgICAgd2FudCB0byBjaGVjayB0aGUgbW9zdCBmcmVxdWVudCBpdGVtcyBm aXJzdC4KKyAqCisgKiBUT0RPIFdlJ3JlIHVzaW5nIERhdHVtICg4QiksIGV2 ZW4gZm9yIGRhdGEgdHlwZXMgKGUuZy4gaW50NCBvcgorICogICAgICBmbG9h dDQpLiBNYXliZSB3ZSBjb3VsZCBzYXZlIHNvbWUgc3BhY2UgaGVyZSwgYnV0 IHRoZSBieXRlYQorICogICAgICBjb21wcmVzc2lvbiBzaG91bGQgaGFuZGxl IGl0IGp1c3QgZmluZS4KKyAqCisgKiBUT0RPIFRoaXMgcHJvYmFibHkgc2hv dWxkIG5vdCB1c2UgdGhlIG5kaXN0aW5jdCBkaXJlY3RseSAoYXMgY29tcHV0 ZWQKKyAqICAgICAgZnJvbSB0aGUgdGFibGUsIGJ1dCByYXRoZXIgZXN0aW1h dGUgdGhlIG51bWJlciBvZiBkaXN0aW5jdAorICogICAgICB2YWx1ZXMgaW4g dGhlIHRhYmxlKSwgbm8/CisgKi8KK01DVkxpc3QKK2J1aWxkX212X21jdmxp c3QoaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAq YXR0cnMsCisJCQkJCSAgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCAqbnVt cm93c19maWx0ZXJlZCkKK3sKKwlpbnQgaSwgajsKKwlpbnQgbnVtYXR0cnMg PSBhdHRycy0+ZGltMTsKKwlpbnQgbmRpc3RpbmN0ID0gMDsKKwlpbnQgbWN2 X3RocmVzaG9sZCA9IDA7CisJaW50IGNvdW50ID0gMDsKKwlpbnQgbml0ZW1z ID0gMDsKKworCU1DVkxpc3QJbWN2bGlzdCA9IE5VTEw7CisKKwkvKiBTb3J0 IGJ5IG11bHRpcGxlIGNvbHVtbnMgKHVzaW5nIGFycmF5IG9mIFNvcnRTdXBw b3J0KSAqLworCU11bHRpU29ydFN1cHBvcnQgbXNzID0gbXVsdGlfc29ydF9p bml0KG51bWF0dHJzKTsKKworCS8qCisJICogUHJlYWxsb2NhdGUgc3BhY2Ug Zm9yIGFsbCB0aGUgaXRlbXMgYXMgYSBzaW5nbGUgY2h1bmssIGFuZCBwb2lu dAorCSAqIHRoZSBpdGVtcyB0byB0aGUgYXBwcm9wcmlhdGUgcGFydHMgb2Yg dGhlIGFycmF5LgorCSAqLworCVNvcnRJdGVtICAgKml0ZW1zICA9IChTb3J0 SXRlbSopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKFNvcnRJdGVtKSk7CisJ RGF0dW0JICAgKnZhbHVlcyA9IChEYXR1bSopcGFsbG9jMChzaXplb2YoRGF0 dW0pICogbnVtcm93cyAqIG51bWF0dHJzKTsKKwlib29sCSAgICppc251bGwg PSAoYm9vbCopcGFsbG9jMChzaXplb2YoYm9vbCkgKiBudW1yb3dzICogbnVt YXR0cnMpOworCisJLyoga2VlcCBhbGwgdGhlIHJvd3MgYnkgZGVmYXVsdCAo YXMgaWYgdGhlcmUgd2FzIG5vIE1DViBsaXN0KSAqLworCSpudW1yb3dzX2Zp bHRlcmVkID0gbnVtcm93czsKKworCWZvciAoaSA9IDA7IGkgPCBudW1yb3dz OyBpKyspCisJeworCQlpdGVtc1tpXS52YWx1ZXMgPSAmdmFsdWVzW2kgKiBu dW1hdHRyc107CisJCWl0ZW1zW2ldLmlzbnVsbCA9ICZpc251bGxbaSAqIG51 bWF0dHJzXTsKKwl9CisKKwkvKiBsb2FkIHRoZSB2YWx1ZXMvbnVsbCBmbGFn cyBmcm9tIHNhbXBsZSByb3dzICovCisJZm9yIChqID0gMDsgaiA8IG51bXJv d3M7IGorKykKKwkJZm9yIChpID0gMDsgaSA8IG51bWF0dHJzOyBpKyspCisJ CQlpdGVtc1tqXS52YWx1ZXNbaV0gPSBoZWFwX2dldGF0dHIocm93c1tqXSwg YXR0cnMtPnZhbHVlc1tpXSwKKwkJCQkJCQkJc3RhdHNbaV0tPnR1cERlc2Ms ICZpdGVtc1tqXS5pc251bGxbaV0pOworCisJLyogcHJlcGFyZSB0aGUgc29y dCBmdW5jdGlvbnMgZm9yIGFsbCB0aGUgYXR0cmlidXRlcyAqLworCWZvciAo aSA9IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCQltdWx0aV9zb3J0X2FkZF9k aW1lbnNpb24obXNzLCBpLCBpLCBzdGF0cyk7CisKKwkvKiBkbyB0aGUgc29y dCwgdXNpbmcgdGhlIG11bHRpLXNvcnQgKi8KKwlxc29ydF9hcmcoKHZvaWQg KikgaXRlbXMsIG51bXJvd3MsIHNpemVvZihTb3J0SXRlbSksCisJCQkJbXVs dGlfc29ydF9jb21wYXJlLCBtc3MpOworCisJLyoKKwkgKiBDb3VudCB0aGUg bnVtYmVyIG9mIGRpc3RpbmN0IGdyb3VwcyAtIGp1c3Qgd2FsayB0aHJvdWdo IHRoZQorCSAqIHNvcnRlZCBsaXN0IGFuZCBjb3VudCB0aGUgbnVtYmVyIG9m IGtleSBjaGFuZ2VzLiBXZSB1c2UgdGhpcyB0bworCSAqIGRldGVybWluZSB0 aGUgdGhyZXNob2xkICgxMjUlIG9mIHRoZSBhdmVyYWdlIGZyZXF1ZW5jeSku CisJICovCisJbmRpc3RpbmN0ID0gMTsKKwlmb3IgKGkgPSAxOyBpIDwgbnVt cm93czsgaSsrKQorCQlpZiAobXVsdGlfc29ydF9jb21wYXJlKCZpdGVtc1tp XSwgJml0ZW1zW2ktMV0sIG1zcykgIT0gMCkKKwkJCW5kaXN0aW5jdCArPSAx OworCisJLyoKKwkgKiBEZXRlcm1pbmUgaG93IG1hbnkgZ3JvdXBzIGFjdHVh bGx5IGV4Y2VlZCB0aGUgdGhyZXNob2xkLCBhbmQgdGhlbgorCSAqIHdhbGsg dGhlIGFycmF5IGFnYWluIGFuZCBjb2xsZWN0IHRoZW0gaW50byBhbiBhcnJh eS4gV2UnbGwgYWx3YXlzCisJICogcmVxdWlyZSBhdCBsZWFzdCA0IHJvd3Mg cGVyIGdyb3VwLgorCSAqCisJICogQnV0IGlmIHdlIGNhbiBmaXQgYWxsIHRo ZSBkaXN0aW5jdCB2YWx1ZXMgaW4gdGhlIE1DViBsaXN0IChpLmUuCisJICog aWYgdGhlcmUgYXJlIGxlc3MgZGlzdGluY3QgZ3JvdXBzIHRoYW4gTVZTVEFU X01DVkxJU1RfTUFYX0lURU1TKSwKKwkgKiB3ZSdsbCByZXF1aXJlIG9ubHkg MiByb3dzIHBlciBncm91cC4KKwkgKgorCSAqIFRPRE8gRm9yIG5vdyB0aGUg dGhyZXNob2xkIGlzIHRoZSBzYW1lIGFzIGluIHRoZSBzaW5nbGUtY29sdW1u CisJICogICAgICBjYXNlIChhdmVyYWdlICsgMjUlKSwgYnV0IG1heWJlIHRo YXQncyB3b3J0aCByZXZpc2l0aW5nCisJICogICAgICBmb3IgdGhlIG11bHRp dmFyaWF0ZSBjYXNlLgorCSAqCisJICogVE9ETyBXZSBjYW4gZG8gdGhpcyBv bmx5IGlmIHdlIGJlbGlldmUgd2UgZ290IGFsbCB0aGUgZGlzdGluY3QKKwkg KiAgICAgIHZhbHVlcyBvZiB0aGUgdGFibGUuCisJICoKKwkgKiBGSVhNRSBU aGlzIHNob3VsZCByZWFsbHkgcmVmZXJlbmNlIG1jdl9tYXhfaXRlbXMgKGZy b20gY2F0YWxvZykKKwkgKiAgICAgICBpbnN0ZWFkIG9mIHRoZSBjb25zdGFu dCBNVlNUQVRfTUNWTElTVF9NQVhfSVRFTVMuCisJICovCisJbWN2X3RocmVz aG9sZCA9IDEuMjUgKiBudW1yb3dzIC8gbmRpc3RpbmN0OworCW1jdl90aHJl c2hvbGQgPSAobWN2X3RocmVzaG9sZCA8IDQpID8gNCAgOiBtY3ZfdGhyZXNo b2xkOworCisJaWYgKG5kaXN0aW5jdCA8PSBNVlNUQVRfTUNWTElTVF9NQVhf SVRFTVMpCisJCW1jdl90aHJlc2hvbGQgPSAyOworCisJLyoKKwkgKiBXYWxr IHRocm91Z2ggdGhlIHNvcnRlZCBkYXRhIGFnYWluLCBhbmQgc2VlIGhvdyBt YW55IGdyb3VwcworCSAqIHJlYWNoIHRoZSBtY3ZfdGhyZXNob2xkIChhbmQg YmVjb21lIGFuIGl0ZW0gaW4gdGhlIE1DViBsaXN0KS4KKwkgKi8KKwljb3Vu dCA9IDE7CisJZm9yIChpID0gMTsgaSA8PSBudW1yb3dzOyBpKyspCisJewor CQkvKiBsYXN0IHJvdyBvciBuZXcgZ3JvdXAsIHNvIGNoZWNrIGlmIHdlIGV4 Y2VlZCAgbWN2X3RocmVzaG9sZCAqLworCQlpZiAoKGkgPT0gbnVtcm93cykg fHwgKG11bHRpX3NvcnRfY29tcGFyZSgmaXRlbXNbaV0sICZpdGVtc1tpLTFd LCBtc3MpICE9IDApKQorCQl7CisJCQkvKiBncm91cCBoaXRzIHRoZSB0aHJl c2hvbGQsIGNvdW50IHRoZSBncm91cCBhcyBNQ1YgaXRlbSAqLworCQkJaWYg KGNvdW50ID49IG1jdl90aHJlc2hvbGQpCisJCQkJbml0ZW1zICs9IDE7CisK KwkJCWNvdW50ID0gMTsKKwkJfQorCQllbHNlCS8qIHdpdGhpbiBncm91cCwg c28gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBpdGVtcyAqLworCQkJY291bnQg Kz0gMTsKKwl9CisKKwkvKiB3ZSBrbm93IHRoZSBudW1iZXIgb2YgTUNWIGxp c3QgaXRlbXMsIHNvIGxldCdzIGJ1aWxkIHRoZSBsaXN0ICovCisJaWYgKG5p dGVtcyA+IDApCisJeworCQkvKiBhbGxvY2F0ZSB0aGUgTUNWIGxpc3Qgc3Ry dWN0dXJlLCBzZXQgcGFyYW1ldGVycyB3ZSBrbm93ICovCisJCW1jdmxpc3Qg PSAoTUNWTGlzdClwYWxsb2MwKHNpemVvZihNQ1ZMaXN0RGF0YSkpOworCisJ CW1jdmxpc3QtPm1hZ2ljID0gTVZTVEFUX01DVl9NQUdJQzsKKwkJbWN2bGlz dC0+dHlwZSA9IE1WU1RBVF9NQ1ZfVFlQRV9CQVNJQzsKKwkJbWN2bGlzdC0+ bmRpbWVuc2lvbnMgPSBudW1hdHRyczsKKwkJbWN2bGlzdC0+bml0ZW1zID0g bml0ZW1zOworCisJCS8qCisJCSAqIFByZWFsbG9jYXRlIERhdHVtL2lzbnVs bCBhcnJheXMgKG5vdCBhcyBhIHNpbmdsZSBjaHVuaywgYXMKKwkJICogd2Un bGwgcGFzcyB0aGlzIG91dHNpZGUgdGhpcyBtZXRob2QgYW5kIHRodXMgaXQg bmVlZHMgdG8gYmUKKwkJICogZWFzeSB0byBwZnJlZSgpIHRoZSBkYXRhIChh bmQgd2Ugd291bGRuJ3Qga25vdyB3aGVyZSB0aGUKKwkJICogYXJyYXlzIHN0 YXJ0KS4KKwkJICoKKwkJICogVE9ETyBNYXliZSB0aGUgcmVhc29uaW5nIHRo YXQgd2UgY2FuJ3QgYWxsb2NhdGUgYSBzaW5nbGUKKwkJICogICAgICBwaWVj ZSBiZWNhdXNlIHdlJ3JlIHBhc3NpbmcgaXQgb3V0IGlzIGJvZ3VzPyBXaG8n ZAorCQkgKiAgICAgIGZyZWUgYSBzaW5nbGUgaXRlbSBvZiB0aGUgTUNWIGxp c3QsIGFueXdheT8KKwkJICoKKwkJICogVE9ETyBNYXliZSB3aXRoIGEgcHJv cGVyIGVuY29kaW5nIChzdHVmZmluZyBhbGwgdGhlIHZhbHVlcworCQkgKiAg ICAgIGludG8gYSBsaXN0LWxldmVsIGFycmF5LCB0aGlzIHdpbGwgYmUgdW50 cnVlKT8KKwkJICovCisJCW1jdmxpc3QtPml0ZW1zID0gKE1DVkl0ZW0qKXBh bGxvYzAoc2l6ZW9mKE1DVkl0ZW0pKm5pdGVtcyk7CisKKwkJZm9yIChpID0g MDsgaSA8IG5pdGVtczsgaSsrKQorCQl7CisJCQltY3ZsaXN0LT5pdGVtc1tp XSA9IChNQ1ZJdGVtKXBhbGxvYzAoc2l6ZW9mKE1DVkl0ZW1EYXRhKSk7CisJ CQltY3ZsaXN0LT5pdGVtc1tpXS0+dmFsdWVzID0gKERhdHVtKilwYWxsb2Mw KHNpemVvZihEYXR1bSkqbnVtYXR0cnMpOworCQkJbWN2bGlzdC0+aXRlbXNb aV0tPmlzbnVsbCA9IChib29sKilwYWxsb2MwKHNpemVvZihib29sKSpudW1h dHRycyk7CisJCX0KKworCQkvKgorCQkgKiBSZXBlYXQgdGhlIHNhbWUgbG9v cCBhcyBhYm92ZSwgYnV0IHRoaXMgdGltZSBjb3B5IHRoZSBkYXRhCisJCSAq IGludG8gdGhlIE1DViBsaXN0IChmb3IgaXRlbXMgZXhjZWVkaW5nIHRoZSB0 aHJlc2hvbGQpLgorCQkgKgorCQkgKiBUT0RPIE1heWJlIHdlIGNvdWxkIHNp bXBseSByZW1lbWJlciBpbmRleGVzIG9mIHRoZSBsYXN0IGl0ZW0KKwkJICog ICAgICBpbiBlYWNoIGdyb3VwIChmcm9tIHRoZSBwcmV2aW91cyBsb29wKT8K KwkJICovCisJCWNvdW50ID0gMTsKKwkJbml0ZW1zID0gMDsKKwkJZm9yIChp ID0gMTsgaSA8PSBudW1yb3dzOyBpKyspCisJCXsKKwkJCS8qIGxhc3Qgcm93 IG9yIGEgbmV3IGdyb3VwICovCisJCQlpZiAoKGkgPT0gbnVtcm93cykgfHwg KG11bHRpX3NvcnRfY29tcGFyZSgmaXRlbXNbaV0sICZpdGVtc1tpLTFdLCBt c3MpICE9IDApKQorCQkJeworCQkJCS8qIGNvdW50IHRoZSBNQ1YgaXRlbSBp ZiBleGNlZWRpbmcgdGhlIHRocmVzaG9sZCAoYW5kIGNvcHkgaW50byB0aGUg YXJyYXkpICovCisJCQkJaWYgKGNvdW50ID49IG1jdl90aHJlc2hvbGQpCisJ CQkJeworCQkJCQkvKiBqdXN0IHBvaW50ZXIgdG8gdGhlIHByb3BlciBwbGFj ZSBpbiB0aGUgbGlzdCAqLworCQkJCQlNQ1ZJdGVtIGl0ZW0gPSBtY3ZsaXN0 LT5pdGVtc1tuaXRlbXNdOworCisJCQkJCS8qIGNvcHkgdmFsdWVzIGZyb20g dGhlIF9wcmV2aW91c18gZ3JvdXAgKGxhc3QgaXRlbSBvZikgKi8KKwkJCQkJ bWVtY3B5KGl0ZW0tPnZhbHVlcywgaXRlbXNbKGktMSldLnZhbHVlcywgc2l6 ZW9mKERhdHVtKSAqIG51bWF0dHJzKTsKKwkJCQkJbWVtY3B5KGl0ZW0tPmlz bnVsbCwgaXRlbXNbKGktMSldLmlzbnVsbCwgc2l6ZW9mKGJvb2wpICAqIG51 bWF0dHJzKTsKKworCisJCQkJCS8qIGFuZCBmaW5hbGx5IHRoZSBncm91cCBm cmVxdWVuY3kgKi8KKwkJCQkJaXRlbS0+ZnJlcXVlbmN5ID0gKGRvdWJsZSlj b3VudCAvIG51bXJvd3M7CisKKwkJCQkJLyogbmV4dCBpdGVtICovCisJCQkJ CW5pdGVtcyArPSAxOworCQkJCX0KKworCQkJCWNvdW50ID0gMTsKKwkJCX0K KwkJCWVsc2UJLyogc2FtZSBncm91cCwganVzdCBpbmNyZWFzZSB0aGUgbnVt YmVyIG9mIGl0ZW1zICovCisJCQkJY291bnQgKz0gMTsKKwkJfQorCisJCS8q IG1ha2Ugc3VyZSB0aGUgbG9vcHMgYXJlIGNvbnNpc3RlbnQgKi8KKwkJQXNz ZXJ0KG5pdGVtcyA9PSBtY3ZsaXN0LT5uaXRlbXMpOworCisJCS8qCisJCSAq IFJlbW92ZSB0aGUgcm93cyBtYXRjaGluZyB0aGUgTUNWIGxpc3QgKGkuZS4g a2VlcCBvbmx5IHJvd3MKKwkJICogdGhhdCBhcmUgbm90IHJlcHJlc2VudGVk IGJ5IHRoZSBNQ1YgbGlzdCkuCisJCSAqCisJCSAqIEZJWE1FIFRoaXMgaW1w bGVtZW50YXRpb24gaXMgcmF0aGVyIG5haXZlLCBlZmZlY3RpdmVseSBPKE5e MikuCisJCSAqICAgICAgIEFzIHRoZSBNQ1YgbGlzdCBncm93cywgdGhlIGNo ZWNrIHdpbGwgdGFrZSBsb25nZXIgYW5kCisJCSAqICAgICAgIGxvbmdlci4g QW5kIGFzIHRoZSBudW1iZXIgb2Ygc2FtcGxlZCByb3dzIGluY3JlYXNlcyAo YnkKKwkJICogICAgICAgaW5jcmVhc2luZyBzdGF0aXN0aWNzIHRhcmdldCks IGl0IHdpbGwgdGFrZSBsb25nZXIgYW5kCisJCSAqICAgICAgIGxvbmdlci4g T25lIG9wdGlvbiBpcyB0byBzb3J0IHRoZSBNQ1YgaXRlbXMgZmlyc3QgYW5k CisJCSAqICAgICAgIHRoZW4gcGVyZm9ybSBhIGJpbmFyeSBzZWFyY2guCisJ CSAqCisJCSAqICAgICAgIEEgYmV0dGVyIG9wdGlvbiB3b3VsZCBiZSBrZWVw aW5nIHRoZSBJRCBvZiB0aGUgcm93IGluCisJCSAqICAgICAgIHRoZSBzb3J0 IGl0ZW0sIGFuZCB0aGVuIGp1c3Qgd2FsayB0aHJvdWdoIHRoZSBpdGVtcyBh bmQKKwkJICogICAgICAgbWFyayByb3dzIHRvIHJlbW92ZSAoaW4gYSBiaXRt YXAgb2YgdGhlIHNhbWUgc2l6ZSkuCisJCSAqICAgICAgIFRoZXJlJ3Mgbm90 IHNwYWNlIGZvciB0aGF0IGluIFNvcnRJdGVtIGF0IHRoaXMgbW9tZW50LAor CQkgKiAgICAgICBidXQgaXQncyB0cml2aWFsIHRvIGFkZCAncHJpdmF0ZScg cG9pbnRlciwgb3IganVzdAorCQkgKiAgICAgICB1c2luZyBhbm90aGVyIHN0 cnVjdHVyZSB3aXRoIGV4dHJhIGZpZWxkIChzdGFydGluZyB3aXRoCisJCSAq ICAgICAgIFNvcnRJdGVtLCBzbyB0aGF0IHRoZSBjb21wYXJhdG9ycyBldGMu IHN0aWxsIHdvcmspLgorCQkgKgorCQkgKiAgICAgICBBbm90aGVyIG9wdGlv biBpcyB0byB1c2UgdGhlIHNvcnRlZCBhcnJheSBvZiBpdGVtcworCQkgKiAg ICAgICAoYmVjYXVzZSB0aGF0J3MgaG93IHdlIHNvcnRlZCB0aGUgc291cmNl IGRhdGEpLCBhbmQKKwkJICogICAgICAgc2ltcGx5IGRvIGEgYnNlYXJjaCgp IGludG8gaXQuIElmIHdlIGZpbmQgYSBtYXRjaGluZworCQkgKiAgICAgICBp dGVtLCB0aGUgcm93IGJlbG9uZ3MgdG8gdGhlIE1DViBsaXN0LgorCQkgKi8K KwkJaWYgKG5pdGVtcyA9PSBuZGlzdGluY3QpIC8qIGFsbCByb3dzIGFyZSBj b3ZlcmVkIGJ5IE1DViBpdGVtcyAqLworCQkJKm51bXJvd3NfZmlsdGVyZWQg PSAwOworCQllbHNlIC8qIChuaXRlbXMgPCBuZGlzdGluY3QpICYmIChuaXRl bXMgPiAwKSAqLworCQl7CisJCQlpbnQgbmZpbHRlcmVkID0gMDsKKwkJCUhl YXBUdXBsZSAqcm93c19maWx0ZXJlZCA9IChIZWFwVHVwbGUqKXBhbGxvYzAo c2l6ZW9mKEhlYXBUdXBsZSkgKiBudW1yb3dzKTsKKworCQkJLyogdXNlZCBm b3IgdGhlIHNlYXJjaGVzICovCisJCQlTb3J0SXRlbSBpdGVtLCBtY3ZpdGVt OzsKKworCQkJaXRlbS52YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAobnVtYXR0 cnMgKiBzaXplb2YoRGF0dW0pKTsKKwkJCWl0ZW0uaXNudWxsID0gKGJvb2wq KXBhbGxvYzAobnVtYXR0cnMgKiBzaXplb2YoYm9vbCkpOworCisJCQkvKgor CQkJICogRklYTUUgd2UgZG9uJ3QgbmVlZCB0byBhbGxvY2F0ZSB0aGlzLCB3 ZSBjYW4gcmVmZXJlbmNlCisJCQkgKiAgICAgICB0aGUgTUNWIGl0ZW0gZGly ZWN0bHkgLi4uCisJCQkgKi8KKwkJCW1jdml0ZW0udmFsdWVzID0gKERhdHVt KilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9mKERhdHVtKSk7CisJCQltY3Zp dGVtLmlzbnVsbCA9IChib29sKilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9m KGJvb2wpKTsKKworCQkJLyogd2FsayB0aHJvdWdoIHRoZSB0dXBsZXMsIGNv bXBhcmUgdGhlIHZhbHVlcyB0byBNQ1YgaXRlbXMgKi8KKwkJCWZvciAoaSA9 IDA7IGkgPCBudW1yb3dzOyBpKyspCisJCQl7CisJCQkJYm9vbAltYXRjaCA9 IGZhbHNlOworCisJCQkJLyogY29sbGVjdCB0aGUga2V5IHZhbHVlcyBmcm9t IHRoZSByb3cgKi8KKwkJCQlmb3IgKGogPSAwOyBqIDwgbnVtYXR0cnM7IGor KykKKwkJCQkJaXRlbS52YWx1ZXNbal0gPSBoZWFwX2dldGF0dHIocm93c1tp XSwgYXR0cnMtPnZhbHVlc1tqXSwKKwkJCQkJCQkJCQlzdGF0c1tqXS0+dHVw RGVzYywgJml0ZW0uaXNudWxsW2pdKTsKKworCQkJCS8qIHNjYW4gdGhyb3Vn aCB0aGUgTUNWIGxpc3QgZm9yIG1hdGNoZXMgKi8KKwkJCQlmb3IgKGogPSAw OyBqIDwgbWN2bGlzdC0+bml0ZW1zOyBqKyspCisJCQkJeworCQkJCQkvKgor CQkJCQkgKiBUT0RPIENyZWF0ZSBhIFNvcnRJdGVtL01DVkl0ZW0gY29tcGFy YXRvciBzbyB0aGF0CisJCQkJCSAqICAgICAgd2UgZG9uJ3QgbmVlZCB0byBk byBtZW1jcHkoKSBsaWtlIGNyYXp5LgorCQkJCQkgKi8KKwkJCQkJbWVtY3B5 KG1jdml0ZW0udmFsdWVzLCBtY3ZsaXN0LT5pdGVtc1tqXS0+dmFsdWVzLAor CQkJCQkJCW51bWF0dHJzICogc2l6ZW9mKERhdHVtKSk7CisJCQkJCW1lbWNw eShtY3ZpdGVtLmlzbnVsbCwgbWN2bGlzdC0+aXRlbXNbal0tPmlzbnVsbCwK KwkJCQkJCQludW1hdHRycyAqIHNpemVvZihib29sKSk7CisKKwkJCQkJaWYg KG11bHRpX3NvcnRfY29tcGFyZSgmaXRlbSwgJm1jdml0ZW0sIG1zcykgPT0g MCkKKwkJCQkJeworCQkJCQkJbWF0Y2ggPSB0cnVlOworCQkJCQkJYnJlYWs7 CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvKiBpZiBubyBtYXRjaCBpbiB0aGUg TUNWIGxpc3QsIGNvcHkgdGhlIHJvdyBpbnRvIHRoZSBmaWx0ZXJlZCBvbmVz ICovCisJCQkJaWYgKCEgbWF0Y2gpCisJCQkJCW1lbWNweSgmcm93c19maWx0 ZXJlZFtuZmlsdGVyZWQrK10sICZyb3dzW2ldLCBzaXplb2YoSGVhcFR1cGxl KSk7CisJCQl9CisKKwkJCS8qIHJlcGxhY2UgdGhlIHJvd3MgYW5kIHJlbWVt YmVyIGhvdyBtYW55IHJvd3Mgd2Uga2VwdCAqLworCQkJbWVtY3B5KHJvd3Ms IHJvd3NfZmlsdGVyZWQsIHNpemVvZihIZWFwVHVwbGUpICogbmZpbHRlcmVk KTsKKwkJCSpudW1yb3dzX2ZpbHRlcmVkID0gbmZpbHRlcmVkOworCisJCQkv KiBmcmVlIGFsbCB0aGUgZGF0YSB1c2VkIGhlcmUgKi8KKwkJCXBmcmVlKHJv d3NfZmlsdGVyZWQpOworCQkJcGZyZWUoaXRlbS52YWx1ZXMpOworCQkJcGZy ZWUoaXRlbS5pc251bGwpOworCQkJcGZyZWUobWN2aXRlbS52YWx1ZXMpOwor CQkJcGZyZWUobWN2aXRlbS5pc251bGwpOworCQl9CisJfQorCisJcGZyZWUo dmFsdWVzKTsKKwlwZnJlZShpdGVtcyk7CisJcGZyZWUoaXNudWxsKTsKKwor CXJldHVybiBtY3ZsaXN0OworfQorCisKKy8qIGZldGNoIHRoZSBNQ1YgbGlz dCAoYXMgYSBieXRlYSkgZnJvbSB0aGUgcGdfbXZfc3RhdGlzdGljIGNhdGFs b2cgKi8KK01DVkxpc3QKK2xvYWRfbXZfbWN2bGlzdChPaWQgbXZvaWQpCit7 CisJYm9vbAkJaXNudWxsID0gZmFsc2U7CisJRGF0dW0JCW1jdmxpc3Q7CisK KyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJRm9ybV9wZ19tdl9zdGF0 aXN0aWMJbXZzdGF0OworI2VuZGlmCisKKwkvKiBQcmVwYXJlIHRvIHNjYW4g cGdfbXZfc3RhdGlzdGljIGZvciBlbnRyaWVzIGhhdmluZyBpbmRyZWxpZCA9 IHRoaXMgcmVsLiAqLworCUhlYXBUdXBsZQlodHVwID0gU2VhcmNoU3lzQ2Fj aGUxKE1WU1RBVE9JRCwgT2JqZWN0SWRHZXREYXR1bShtdm9pZCkpOworCisJ aWYgKCEgSGVhcFR1cGxlSXNWYWxpZChodHVwKSkKKwkJcmV0dXJuIE5VTEw7 CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJbXZzdGF0ID0gKEZv cm1fcGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1cCk7CisJQXNzZXJ0 KG12c3RhdC0+bWN2X2VuYWJsZWQgJiYgbXZzdGF0LT5tY3ZfYnVpbHQpOwor I2VuZGlmCisKKwltY3ZsaXN0ID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RBVE9J RCwgaHR1cCwKKwkJCQkJCSAgIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YW1j diwgJmlzbnVsbCk7CisKKwlBc3NlcnQoIWlzbnVsbCk7CisKKwlSZWxlYXNl U3lzQ2FjaGUoaHR1cCk7CisKKwlyZXR1cm4gZGVzZXJpYWxpemVfbXZfbWN2 bGlzdChEYXR1bUdldEJ5dGVhUChtY3ZsaXN0KSk7Cit9CisKKy8qIHByaW50 IHNvbWUgYmFzaWMgaW5mbyBhYm91dCB0aGUgTUNWIGxpc3QKKyAqCisgKiBU T0RPIEFkZCBpbmZvIGFib3V0IHdoYXQgcGFydCBvZiB0aGUgdGFibGUgdGhp cyBjb3ZlcnMuCisgKi8KK0RhdHVtCitwZ19tdl9zdGF0c19tY3ZsaXN0X2lu Zm8oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlieXRlYQkgICAqZGF0YSA9IFBH X0dFVEFSR19CWVRFQV9QKDApOworCWNoYXIJICAgKnJlc3VsdDsKKworCU1D Vkxpc3QJbWN2bGlzdCA9IGRlc2VyaWFsaXplX212X21jdmxpc3QoZGF0YSk7 CisKKwlyZXN1bHQgPSBwYWxsb2MwKDEyOCk7CisJc25wcmludGYocmVzdWx0 LCAxMjgsICJuaXRlbXM9JWQiLCBtY3ZsaXN0LT5uaXRlbXMpOworCisJcGZy ZWUobWN2bGlzdCk7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9f dGV4dChyZXN1bHQpKTsKK30KKworLyogdXNlZCB0byBwYXNzIGNvbnRleHQg aW50byBic2VhcmNoKCkgKi8KK3N0YXRpYyBTb3J0U3VwcG9ydCBzc3VwX3By aXZhdGUgPSBOVUxMOworCitzdGF0aWMgaW50IGJzZWFyY2hfY29tcGFyYXRv cihjb25zdCB2b2lkICogYSwgY29uc3Qgdm9pZCAqIGIpOworCisvKgorICog U2VyaWFsaXplIE1DViBsaXN0IGludG8gYSBieXRlYSB2YWx1ZS4gVGhlIGJh c2ljIGFsZ29yaXRobSBpcyBzaW1wbGU6CisgKgorICogKDEpIHBlcmZvcm0g ZGVkdXBsaWNhdGlvbiBmb3IgZWFjaCBhdHRyaWJ1dGUgKHNlcGFyYXRlbHkp CisgKiAgICAgKGEpIGNvbGxlY3QgYWxsIChub24tTlVMTCkgYXR0cmlidXRl IHZhbHVlcyBmcm9tIGFsbCBNQ1YgaXRlbXMKKyAqICAgICAoYikgc29ydCB0 aGUgZGF0YSAodXNpbmcgJ2x0JyBmcm9tIFZhY0F0dHJTdGF0cykKKyAqICAg ICAoYykgcmVtb3ZlIGR1cGxpY2F0ZSB2YWx1ZXMgZnJvbSB0aGUgYXJyYXkK KyAqCisgKiAoMikgc2VyaWFsaXplIHRoZSBhcnJheXMgaW50byBhIGJ5dGVh IHZhbHVlCisgKgorICogKDMpIHByb2Nlc3MgYWxsIE1DViBsaXN0IGl0ZW1z CisgKiAgICAgKGEpIHJlcGxhY2UgdmFsdWVzIHdpdGggaW5kZXhlcyBpbnRv IHRoZSBhcnJheXMKKyAqCisgKiBFYWNoIGF0dHJpYnV0ZSBoYXMgdG8gYmUg cHJvY2Vzc2VkIHNlcGFyYXRlbHksIGJlY2F1c2Ugd2UncmUgbWl4aW5nCisg KiBkaWZmZXJlbnQgZGF0YXR5cGVzLCBhbmQgd2UgZG9uJ3Qga25vdyB3aGF0 IGVxdWFsaXR5IG1lYW5zIGZvciB0aGVtLgorICogV2UncmUgYWxzbyBtaXhp bmcgcGFzcy1ieS12YWx1ZSBhbmQgcGFzcy1ieS1yZWYgdHlwZXMsIGFuZCBz byBvbi4KKyAqCisgKiBXZSdsbCB1c2UgdWludDE2IHZhbHVlcyBmb3IgdGhl IGluZGV4ZXMgaW4gc3RlcCAoMyksIGFzIHdlIGRvbid0CisgKiBhbGxvdyBt b3JlIHRoYW4gOGsgTUNWIGl0ZW1zIChzZWUgbGlzdCBtYXhfbWN2X2l0ZW1z KS4gV2UgbWlnaHQKKyAqIGluY3JlYXNlIHRoaXMgdG8gNjVrIGFuZCBzdGls bCBmaXQgaW50byB1aW50MTYuCisgKgorICogV2UgZG9uJ3QgcmVhbGx5IGV4 cGVjdCB0aGUgaGlnaCBjb21wcmVzc2lvbiBhcyB3aXRoIGhpc3RvZ3JhbXMs CisgKiBiZWNhdXNlIHdlJ3JlIG5vdCBkb2luZyBhbnkgYnVja2V0IHNwbGl0 cyBldGMuICh3aGljaCBpcyB0aGUgc291cmNlCisgKiBvZiBoaWdoIHJlZHVu ZGFuY3kgdGhlcmUpLCBidXQgd2UgbmVlZCB0byBkbyBpdCBhbnl3YXkgYXMg d2UgbmVlZAorICogdG8gc2VyaWFsaXplIHZhcmxlbmEgdmFsdWVzIGV0Yy4g V2UgbWlnaHQgaW52ZW50IGFub3RoZXIgd2F5IHRvCisgKiBzZXJpYWxpemUg TUNWIGxpc3RzLCBidXQgbGV0J3Mga2VlcCBpdCBjb25zaXN0ZW50LgorICoK KyAqIEZJWE1FIFRoaXMgcHJvYmFibHkgbGVha3MgbWVtb3J5LCBvciBhdCBs ZWFzdCB1c2VzIGl0IGluZWZmaWNpZW50bHkKKyAqICAgICAgIChtYW55IHNt YWxsIHBhbGxvYygpIGNhbGxzIGluc3RlYWQgb2YgYSBsYXJnZSBvbmUpLgor ICoKKyAqIFRPRE8gQ29uc2lkZXIgdXNpbmcgMTYtYml0IHZhbHVlcyBmb3Ig dGhlIGluZGV4ZXMgaW4gc3RlcCAoMykuCisgKgorICogVE9ETyBDb25zaWRl ciBwYWNraW5nIGJvb2xlYW4gZmxhZ3MgKE5VTEwpIGZvciBlYWNoIGl0ZW0g aW50byAnY2hhcicKKyAqICAgICAgb3IgYSBsb25nZXIgdHlwZSAoaW5zdGVh ZCBvZiB1c2luZyBhbiBhcnJheSBvZiBib29sIGl0ZW1zKS4KKyAqLworYnl0 ZWEgKgorc2VyaWFsaXplX212X21jdmxpc3QoTUNWTGlzdCBtY3ZsaXN0LCBp bnQydmVjdG9yICphdHRycywKKwkJCQkJIFZhY0F0dHJTdGF0cyAqKnN0YXRz KQoreworCWludAlpLCBqOworCWludAluZGltcyA9IG1jdmxpc3QtPm5kaW1l bnNpb25zOworCWludAlpdGVtc2l6ZSA9IElURU1fU0laRShuZGltcyk7CisK KwlTaXplCXRvdGFsX2xlbmd0aCA9IDA7CisKKwljaGFyICAgKml0ZW0gPSBw YWxsb2MwKGl0ZW1zaXplKTsKKworCS8qIHNlcmlhbGl6ZWQgaXRlbXMgKGlu ZGV4ZXMgaW50byBhcnJheXMsIGV0Yy4pICovCisJYnl0ZWEgICpvdXRwdXQ7 CisJY2hhciAgICpkYXRhID0gTlVMTDsKKworCS8qIHZhbHVlcyBwZXIgZGlt ZW5zaW9uIChhbmQgbnVtYmVyIG9mIG5vbi1OVUxMIHZhbHVlcykgKi8KKwlE YXR1bSAqKnZhbHVlcyA9IChEYXR1bSoqKXBhbGxvYzAoc2l6ZW9mKERhdHVt KikgKiBuZGltcyk7CisJaW50CSAgICpjb3VudHMgPSAoaW50KilwYWxsb2Mw KHNpemVvZihpbnQpICogbmRpbXMpOworCisJLyogaW5mbyBhYm91dCBkaW1l bnNpb25zIChmb3IgZGVzZXJpYWxpemUpICovCisJRGltZW5zaW9uSW5mbyAq IGluZm8KKwkJCQk9IChEaW1lbnNpb25JbmZvICopcGFsbG9jMChzaXplb2Yo RGltZW5zaW9uSW5mbykqbmRpbXMpOworCisJLyogc29ydCBzdXBwb3J0IGRh dGEgKi8KKwlTb3J0U3VwcG9ydAlzc3VwID0gKFNvcnRTdXBwb3J0KXBhbGxv YzAoc2l6ZW9mKFNvcnRTdXBwb3J0RGF0YSkqbmRpbXMpOworCisJLyogY29s bGVjdCBhbmQgZGVkdXBsaWNhdGUgdmFsdWVzIGZvciBlYWNoIGRpbWVuc2lv biAqLworCWZvciAoaSA9IDA7IGkgPCBuZGltczsgaSsrKQorCXsKKwkJaW50 IGNvdW50OworCQlTdGRBbmFseXplRGF0YSAqdG1wID0gKFN0ZEFuYWx5emVE YXRhICopc3RhdHNbaV0tPmV4dHJhX2RhdGE7CisKKwkJLyoga2VlcCBpbXBv cnRhbnQgaW5mbyBhYm91dCB0aGUgZGF0YSB0eXBlICovCisJCWluZm9baV0u dHlwbGVuICAgPSBzdGF0c1tpXS0+YXR0cnR5cGUtPnR5cGxlbjsKKwkJaW5m b1tpXS50eXBieXZhbCA9IHN0YXRzW2ldLT5hdHRydHlwZS0+dHlwYnl2YWw7 CisKKwkJLyogYWxsb2NhdGUgc3BhY2UgZm9yIGFsbCB2YWx1ZXMsIGluY2x1 ZGluZyBOVUxMcyAod29uJ3QgdXNlIHRoZW0pICovCisJCXZhbHVlc1tpXSA9 IChEYXR1bSopcGFsbG9jMChzaXplb2YoRGF0dW0pICogbWN2bGlzdC0+bml0 ZW1zKTsKKworCQlmb3IgKGogPSAwOyBqIDwgbWN2bGlzdC0+bml0ZW1zOyBq KyspCisJCXsKKwkJCWlmICghIG1jdmxpc3QtPml0ZW1zW2pdLT5pc251bGxb aV0pCS8qIHNraXAgTlVMTCB2YWx1ZXMgKi8KKwkJCXsKKwkJCQl2YWx1ZXNb aV1bY291bnRzW2ldXSA9IG1jdmxpc3QtPml0ZW1zW2pdLT52YWx1ZXNbaV07 CisJCQkJY291bnRzW2ldICs9IDE7CisJCQl9CisJCX0KKworCQkvKiB0aGVy ZSBhcmUganVzdCBOVUxMIHZhbHVlcyBpbiB0aGlzIGRpbWVuc2lvbiAqLwor CQlpZiAoY291bnRzW2ldID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBz b3J0IGFuZCBkZWR1cGxpY2F0ZSAqLworCQlzc3VwW2ldLnNzdXBfY3h0ID0g Q3VycmVudE1lbW9yeUNvbnRleHQ7CisJCXNzdXBbaV0uc3N1cF9jb2xsYXRp b24gPSBERUZBVUxUX0NPTExBVElPTl9PSUQ7CisJCXNzdXBbaV0uc3N1cF9u dWxsc19maXJzdCA9IGZhbHNlOworCisJCVByZXBhcmVTb3J0U3VwcG9ydEZy b21PcmRlcmluZ09wKHRtcC0+bHRvcHIsICZzc3VwW2ldKTsKKworCQlxc29y dF9hcmcodmFsdWVzW2ldLCBjb3VudHNbaV0sIHNpemVvZihEYXR1bSksCisJ CQkJICBjb21wYXJlX3NjYWxhcnNfc2ltcGxlLCAmc3N1cFtpXSk7CisKKwkJ LyoKKwkJICogV2FsayB0aHJvdWdoIHRoZSBhcnJheSBhbmQgZWxpbWluYXRl IGR1cGxpY2l0YXRlIHZhbHVlcywgYnV0CisJCSAqIGtlZXAgdGhlIG9yZGVy aW5nIChzbyB0aGF0IHdlIGNhbiBkbyBic2VhcmNoIGxhdGVyKS4gV2Uga25v dworCQkgKiB0aGVyZSdzIGF0IGxlYXN0IDEgaXRlbSwgc28gd2UgY2FuIHNr aXAgdGhlIGZpcnN0IGVsZW1lbnQuCisJCSAqLworCQljb3VudCA9IDE7CS8q IG51bWJlciBvZiBkZWR1cGxpY2F0ZWQgaXRlbXMgKi8KKwkJZm9yIChqID0g MTsgaiA8IGNvdW50c1tpXTsgaisrKQorCQl7CisJCQkvKiBpZiBpdCdzIGRp ZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyB2YWx1ZSwgd2UgbmVlZCB0byBr ZWVwIGl0ICovCisJCQlpZiAoY29tcGFyZV9kYXR1bXNfc2ltcGxlKHZhbHVl c1tpXVtqLTFdLCB2YWx1ZXNbaV1bal0sICZzc3VwW2ldKSAhPSAwKQorCQkJ eworCQkJCS8qIFhYWDogbm90IG5lZWRlZCBpZiAoY291bnQgPT0gaikgKi8K KwkJCQl2YWx1ZXNbaV1bY291bnRdID0gdmFsdWVzW2ldW2pdOworCQkJCWNv dW50ICs9IDE7CisJCQl9CisJCX0KKworCQkvKiBkbyBub3QgZXhjZWVkIFVJ TlQxNl9NQVggKi8KKwkJQXNzZXJ0KGNvdW50IDw9IFVJTlQxNl9NQVgpOwor CisJCS8qIGtlZXAgaW5mbyBhYm91dCB0aGUgZGVkdXBsaWNhdGVkIGNvdW50 ICovCisJCWluZm9baV0ubnZhbHVlcyA9IGNvdW50OworCisJCS8qIGNvbXB1 dGUgc2l6ZSBvZiB0aGUgc2VyaWFsaXplZCBkYXRhICovCisJCWlmIChpbmZv W2ldLnR5cGJ5dmFsIHx8IChpbmZvW2ldLnR5cGxlbiA+IDApKQorCQkJLyog YnkgdmFsdWUgcGFzZWQgYnkgcmVmZXJlbmNlLCBidXQgZml4ZWQgbGVuZ3Ro ICovCisJCQlpbmZvW2ldLm5ieXRlcyA9IGluZm9baV0ubnZhbHVlcyAqIGlu Zm9baV0udHlwbGVuOworCQllbHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAt MSkKKwkJCS8qIHZhcmxlbmEsIHNvIGp1c3QgdXNlIFZBUlNJWkVfQU5ZICov CisJCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFsdWVzOyBqKyspCisJ CQkJaW5mb1tpXS5uYnl0ZXMgKz0gVkFSU0laRV9BTlkodmFsdWVzW2ldW2pd KTsKKwkJZWxzZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0gLTIpCisJCQkvKiBj c3RyaW5nLCBzbyBzaW1wbHkgc3RybGVuICovCisJCQlmb3IgKGogPSAwOyBq IDwgaW5mb1tpXS5udmFsdWVzOyBqKyspCisJCQkJaW5mb1tpXS5uYnl0ZXMg Kz0gc3RybGVuKERhdHVtR2V0UG9pbnRlcih2YWx1ZXNbaV1bal0pKTsKKwkJ ZWxzZQorCQkJZWxvZyhFUlJPUiwgInVua25vd24gZGF0YSB0eXBlIHR5cGJ5 dmFsPSVkIHR5cGxlbj0lZCIsCisJCQkJaW5mb1tpXS50eXBieXZhbCwgaW5m b1tpXS50eXBsZW4pOworCX0KKworCS8qCisJICogTm93IHdlIGZpbmFsbHkg a25vdyBob3cgbXVjaCBzcGFjZSB3ZSdsbCBuZWVkIGZvciB0aGUgc2VyaWFs aXplZAorCSAqIE1DViBsaXN0LCBhcyBpdCBjb250YWlucyB0aGVzZSBmaWVs ZHM6CisJICoKKwkgKiAtIGxlbmd0aCAoNEIpIGZvciB2YXJsZW5hCisJICog LSBtYWdpYyAoNEIpCisJICogLSB0eXBlICg0QikKKwkgKiAtIG5kaW1lbnNp b25zICg0QikKKwkgKiAtIG5pdGVtcyAoNEIpCisJICogLSBpbmZvIChuZGlt ICogc2l6ZW9mKERpbWVuc2lvbkluZm8pCisJICogLSBhcnJheXMgb2YgdmFs dWVzIGZvciBlYWNoIGRpbWVuc2lvbgorCSAqIC0gc2VyaWFsaXplZCBpdGVt cyAobml0ZW1zICogaXRlbXNpemUpCisJICoKKwkgKiBTbyB0aGUgJ2hlYWRl cicgc2l6ZSBpcyAyMEIgKyBuZGltICogc2l6ZW9mKERpbWVuc2lvbkluZm8p IGFuZAorCSAqIHRoZW4gd2UnbGwgcGxhY2UgdGhlIGRhdGEuCisJICovCisJ dG90YWxfbGVuZ3RoID0gKHNpemVvZihpbnQzMikgKyBvZmZzZXRvZihNQ1ZM aXN0RGF0YSwgaXRlbXMpCisJCQkJCSsgbmRpbXMgKiBzaXplb2YoRGltZW5z aW9uSW5mbykKKwkJCQkJKyBtY3ZsaXN0LT5uaXRlbXMgKiBpdGVtc2l6ZSk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwkJdG90YWxfbGVu Z3RoICs9IGluZm9baV0ubmJ5dGVzOworCisJLyogZW5mb3JjZSBhcmJpdHJh cnkgbGltaXQgb2YgMU1CICovCisJaWYgKHRvdGFsX2xlbmd0aCA+IDEwMjQg KiAxMDI0KQorCQllbG9nKEVSUk9SLCAic2VyaWFsaXplZCBNQ1YgZXhjZWVk cyAxTUIgKCVsZCkiLCB0b3RhbF9sZW5ndGgpOworCisJLyogYWxsb2NhdGUg c3BhY2UgZm9yIHRoZSBzZXJpYWxpemVkIE1DViBsaXN0LCBzZXQgaGVhZGVy IGZpZWxkcyAqLworCW91dHB1dCA9IChieXRlYSopcGFsbG9jMCh0b3RhbF9s ZW5ndGgpOworCVNFVF9WQVJTSVpFKG91dHB1dCwgdG90YWxfbGVuZ3RoKTsK KworCS8qIHdlJ2xsIHVzZSAncHRyJyB0byBrZWVwIHRyYWNrIG9mIHRoZSBw bGFjZSB0byB3cml0ZSBkYXRhICovCisJZGF0YSA9IFZBUkRBVEEob3V0cHV0 KTsKKworCW1lbWNweShkYXRhLCBtY3ZsaXN0LCBvZmZzZXRvZihNQ1ZMaXN0 RGF0YSwgaXRlbXMpKTsKKwlkYXRhICs9IG9mZnNldG9mKE1DVkxpc3REYXRh LCBpdGVtcyk7CisKKwltZW1jcHkoZGF0YSwgaW5mbywgc2l6ZW9mKERpbWVu c2lvbkluZm8pICogbmRpbXMpOworCWRhdGEgKz0gc2l6ZW9mKERpbWVuc2lv bkluZm8pICogbmRpbXM7CisKKwkvKiB2YWx1ZSBhcnJheSBmb3IgZWFjaCBk aW1lbnNpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwl7 CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQljaGFyICp0bXAgPSBk YXRhOworI2VuZGlmCisJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52YWx1 ZXM7IGorKykKKwkJeworCQkJaWYgKGluZm9baV0udHlwYnl2YWwpCisJCQl7 CisJCQkJLyogcGFzc2VkIGJ5IHZhbHVlIC8gRGF0dW0gKi8KKwkJCQltZW1j cHkoZGF0YSwgJnZhbHVlc1tpXVtqXSwgaW5mb1tpXS50eXBsZW4pOworCQkJ CWRhdGEgKz0gaW5mb1tpXS50eXBsZW47CisJCQl9CisJCQllbHNlIGlmIChp bmZvW2ldLnR5cGxlbiA+IDApCisJCQl7CisJCQkJLyogcGFzZWQgYnkgcmVm ZXJlbmNlLCBidXQgZml4ZWQgbGVuZ3RoIChuYW1lLCB0aWQsIC4uLikgKi8K KwkJCQltZW1jcHkoZGF0YSwgJnZhbHVlc1tpXVtqXSwgaW5mb1tpXS50eXBs ZW4pOworCQkJCWRhdGEgKz0gaW5mb1tpXS50eXBsZW47CisJCQl9CisJCQll bHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAtMSkKKwkJCXsKKwkJCQkvKiB2 YXJsZW5hICovCisJCQkJbWVtY3B5KGRhdGEsIERhdHVtR2V0UG9pbnRlcih2 YWx1ZXNbaV1bal0pLAorCQkJCQkJCVZBUlNJWkVfQU5ZKHZhbHVlc1tpXVtq XSkpOworCQkJCWRhdGEgKz0gVkFSU0laRV9BTlkodmFsdWVzW2ldW2pdKTsK KwkJCX0KKwkJCWVsc2UgaWYgKGluZm9baV0udHlwbGVuID09IC0yKQorCQkJ eworCQkJCS8qIGNzdHJpbmcgKGRvbid0IGZvcmdldCB0aGUgXDAgdGVybWlu YXRvciEpICovCisJCQkJbWVtY3B5KGRhdGEsIERhdHVtR2V0UG9pbnRlcih2 YWx1ZXNbaV1bal0pLAorCQkJCQkJCXN0cmxlbihEYXR1bUdldFBvaW50ZXIo dmFsdWVzW2ldW2pdKSkgKyAxKTsKKwkJCQlkYXRhICs9IHN0cmxlbihEYXR1 bUdldFBvaW50ZXIodmFsdWVzW2ldW2pdKSkgKyAxOworCQkJfQorCQl9CisJ CUFzc2VydCgoZGF0YSAtIHRtcCkgPT0gaW5mb1tpXS5uYnl0ZXMpOworCX0K KworCS8qIGFuZCBmaW5hbGx5LCB0aGUgTUNWIGl0ZW1zICovCisJZm9yIChp ID0gMDsgaSA8IG1jdmxpc3QtPm5pdGVtczsgaSsrKQorCXsKKwkJLyogZG9u J3Qgd3JpdGUgYmV5b25kIHRoZSBhbGxvY2F0ZWQgc3BhY2UgKi8KKwkJQXNz ZXJ0KGRhdGEgPD0gKGNoYXIqKW91dHB1dCArIHRvdGFsX2xlbmd0aCAtIGl0 ZW1zaXplKTsKKworCQkvKiByZXNldCB0aGUgdmFsdWVzIGZvciBlYWNoIGl0 ZW0gKi8KKwkJbWVtc2V0KGl0ZW0sIDAsIGl0ZW1zaXplKTsKKworCQlmb3Ig KGogPSAwOyBqIDwgbmRpbXM7IGorKykKKwkJeworCQkJLyogZG8gdGhlIGxv b2t1cCBvbmx5IGZvciBub24tTlVMTCB2YWx1ZXMgKi8KKwkJCWlmICghIG1j dmxpc3QtPml0ZW1zW2ldLT5pc251bGxbal0pCisJCQl7CisJCQkJRGF0dW0g KiB2ID0gTlVMTDsKKwkJCQlzc3VwX3ByaXZhdGUgPSAmc3N1cFtqXTsKKwor CQkJCXYgPSAoRGF0dW0qKWJzZWFyY2goJm1jdmxpc3QtPml0ZW1zW2ldLT52 YWx1ZXNbal0sCisJCQkJCQkJCXZhbHVlc1tqXSwgaW5mb1tqXS5udmFsdWVz LCBzaXplb2YoRGF0dW0pLAorCQkJCQkJCQlic2VhcmNoX2NvbXBhcmF0b3Ip OworCisJCQkJaWYgKHYgPT0gTlVMTCkKKwkJCQkJZWxvZyhFUlJPUiwgInZh bHVlIGZvciBkaW0gJWQgbm90IGZvdW5kIGluIGFycmF5Iiwgaik7CisKKwkJ CQkvKiBjb21wdXRlIGluZGV4IHdpdGhpbiB0aGUgYXJyYXkgKi8KKwkJCQlJ VEVNX0lOREVYRVMoaXRlbSlbal0gPSAodiAtIHZhbHVlc1tqXSk7CisKKwkJ CQkvKiBjaGVjayB0aGUgaW5kZXggaXMgd2l0aGluIGV4cGVjdGVkIGJvdW5k cyAqLworCQkJCUFzc2VydChJVEVNX0lOREVYRVMoaXRlbSlbal0gPj0gMCk7 CisJCQkJQXNzZXJ0KElURU1fSU5ERVhFUyhpdGVtKVtqXSA8IGluZm9bal0u bnZhbHVlcyk7CisJCQl9CisJCX0KKworCQkvKiBjb3B5IE5VTEwgYW5kIGZy ZXF1ZW5jeSBmbGFncyBpbnRvIHRoZSBpdGVtICovCisJCW1lbWNweShJVEVN X05VTExTKGl0ZW0sIG5kaW1zKSwKKwkJCQltY3ZsaXN0LT5pdGVtc1tpXS0+ aXNudWxsLCBzaXplb2YoYm9vbCkgKiBuZGltcyk7CisJCW1lbWNweShJVEVN X0ZSRVFVRU5DWShpdGVtLCBuZGltcyksCisJCQkJJm1jdmxpc3QtPml0ZW1z W2ldLT5mcmVxdWVuY3ksIHNpemVvZihkb3VibGUpKTsKKworCQkvKiBjb3B5 IHRoZSBpdGVtIGludG8gdGhlIGFycmF5ICovCisJCW1lbWNweShkYXRhLCBp dGVtLCBpdGVtc2l6ZSk7CisKKwkJZGF0YSArPSBpdGVtc2l6ZTsKKwl9CisK KwkvKiBhdCB0aGlzIHBvaW50IHdlIGV4cGVjdCB0byBtYXRjaCB0aGUgdG90 YWxfbGVuZ3RoIGV4YWN0bHkgKi8KKwlBc3NlcnQoKGRhdGEgLSAoY2hhciop b3V0cHV0KSA9PSB0b3RhbF9sZW5ndGgpOworCisJcmV0dXJuIG91dHB1dDsK K30KKworLyoKKyAqIEludmVyc2UgdG8gc2VyaWFsaXplX212X21jdmxpc3Qo KSAtIHNlZSB0aGUgY29tbWVudCB0aGVyZS4KKyAqCisgKiBXZSdsbCBkbyBm dWxsIGRlc2VyaWFsaXphdGlvbiwgYmVjYXVzZSB3ZSBkb24ndCByZWFsbHkg ZXhwZWN0IGhpZ2gKKyAqIGR1cGxpY2F0aW9uIG9mIHZhbHVlcyBzbyB0aGUg Y2FjaGluZyBtYXkgbm90IGJlIGFzIGVmZmljaWVudCBhcyB3aXRoCisgKiBo aXN0b2dyYW1zLgorICovCitNQ1ZMaXN0IGRlc2VyaWFsaXplX212X21jdmxp c3QoYnl0ZWEgKiBkYXRhKQoreworCWludAkJaSwgajsKKwlTaXplCWV4cGVj dGVkX3NpemU7CisJTUNWTGlzdCBtY3ZsaXN0OworCWNoYXIgICAqdG1wOwor CisJaW50CQluZGltcywgbml0ZW1zLCBpdGVtc2l6ZTsKKwlEaW1lbnNpb25J bmZvICppbmZvID0gTlVMTDsKKworCXVpbnQxNiAqaW5kZXhlcyA9IE5VTEw7 CisJRGF0dW0gKip2YWx1ZXMgPSBOVUxMOworCisJLyogbG9jYWwgYWxsb2Nh dGlvbiBidWZmZXIgKHVzZWQgb25seSBmb3IgZGVzZXJpYWxpemF0aW9uKSAq LworCWludAkJYnVmZmxlbjsKKwljaGFyICAgKmJ1ZmY7CisJY2hhciAgICpw dHI7CisKKwkvKiBidWZmZXIgdXNlZCBmb3IgdGhlIHJlc3VsdCAqLworCWlu dAkJcmJ1ZmZsZW47CisJY2hhciAgICpyYnVmZjsKKwljaGFyICAgKnJwdHI7 CisKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlm IChWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSA8IG9mZnNldG9mKE1DVkxpc3RE YXRhLGl0ZW1zKSkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgTUNWIFNpemUg JWxkIChleHBlY3RlZCBhdCBsZWFzdCAlbGQpIiwKKwkJCSBWQVJTSVpFX0FO WV9FWEhEUihkYXRhKSwgb2Zmc2V0b2YoTUNWTGlzdERhdGEsaXRlbXMpKTsK KworCS8qIHJlYWQgdGhlIE1DViBsaXN0IGhlYWRlciAqLworCW1jdmxpc3Qg PSAoTUNWTGlzdClwYWxsb2MwKHNpemVvZihNQ1ZMaXN0RGF0YSkpOworCisJ LyogaW5pdGlhbGl6ZSBwb2ludGVyIHRvIHRoZSBkYXRhIHBhcnQgKHNraXAg dGhlIHZhcmxlbmEgaGVhZGVyKSAqLworCXRtcCA9IFZBUkRBVEEoZGF0YSk7 CisKKwkvKiBnZXQgdGhlIGhlYWRlciBhbmQgcGVyZm9ybSBiYXNpYyBzYW5p dHkgY2hlY2tzICovCisJbWVtY3B5KG1jdmxpc3QsIHRtcCwgb2Zmc2V0b2Yo TUNWTGlzdERhdGEsaXRlbXMpKTsKKwl0bXAgKz0gb2Zmc2V0b2YoTUNWTGlz dERhdGEsaXRlbXMpOworCisJaWYgKG1jdmxpc3QtPm1hZ2ljICE9IE1WU1RB VF9NQ1ZfTUFHSUMpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIE1DViBtYWdp YyAlZCAoZXhwZWN0ZWQgJWRkKSIsCisJCQkgbWN2bGlzdC0+bWFnaWMsIE1W U1RBVF9NQ1ZfTUFHSUMpOworCisJaWYgKG1jdmxpc3QtPnR5cGUgIT0gTVZT VEFUX01DVl9UWVBFX0JBU0lDKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBN Q1YgdHlwZSAlZCAoZXhwZWN0ZWQgJWRkKSIsCisJCQkgbWN2bGlzdC0+dHlw ZSwgTVZTVEFUX01DVl9UWVBFX0JBU0lDKTsKKworCW5pdGVtcyA9IG1jdmxp c3QtPm5pdGVtczsKKwluZGltcyA9IG1jdmxpc3QtPm5kaW1lbnNpb25zOwor CWl0ZW1zaXplID0gSVRFTV9TSVpFKG5kaW1zKTsKKworCUFzc2VydChuaXRl bXMgPiAwKTsKKwlBc3NlcnQoKG5kaW1zID49IDIpICYmIChuZGltcyA8PSBN VlNUQVRTX01BWF9ESU1FTlNJT05TKSk7CisKKwkvKgorCSAqIFdoYXQgc2l6 ZSBkbyB3ZSBleHBlY3Qgd2l0aCB0aG9zZSBwYXJhbWV0ZXJzIChpdCdzIGlu Y29tcGxldGUsCisJICogYXMgd2UgeWV0IGhhdmUgdG8gY291bnQgdGhlIGFy cmF5IHNpemVzIChmcm9tIERpbWVuc2lvbkluZm8KKwkgKiByZWNvcmRzKS4K KwkgKi8KKwlleHBlY3RlZF9zaXplID0gb2Zmc2V0b2YoTUNWTGlzdERhdGEs aXRlbXMpICsKKwkJCQkJbmRpbXMgKiBzaXplb2YoRGltZW5zaW9uSW5mbykg KworCQkJCQkobml0ZW1zICogaXRlbXNpemUpOworCisJLyogY2hlY2sgdGhh dCB3ZSBoYXZlIGF0IGxlYXN0IHRoZSBEaW1lbnNpb25JbmZvIHJlY29yZHMg Ki8KKwlpZiAoVkFSU0laRV9BTllfRVhIRFIoZGF0YSkgPCBleHBlY3RlZF9z aXplKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBNQ1YgU2l6ZSAlbGQgKGV4 cGVjdGVkICVsZCkiLAorCQkJIFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpLCBl eHBlY3RlZF9zaXplKTsKKworCWluZm8gPSAoRGltZW5zaW9uSW5mbyopKHRt cCk7CisJdG1wICs9IG5kaW1zICogc2l6ZW9mKERpbWVuc2lvbkluZm8pOwor CisJLyogYWNjb3VudCBmb3IgdGhlIHZhbHVlIGFycmF5cyAqLworCWZvciAo aSA9IDA7IGkgPCBuZGltczsgaSsrKQorCQlleHBlY3RlZF9zaXplICs9IGlu Zm9baV0ubmJ5dGVzOworCisJaWYgKFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEp ICE9IGV4cGVjdGVkX3NpemUpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIE1D ViBTaXplICVsZCAoZXhwZWN0ZWQgJWxkKSIsCisJCQkgVkFSU0laRV9BTllf RVhIRFIoZGF0YSksIGV4cGVjdGVkX3NpemUpOworCisJLyogbG9va3MgT0sg LSBub3QgY29ycnVwdGVkIG9yIHNvbWV0aGluZyAqLworCisJLyoKKwkgKiBX ZSdsbCBhbGxvY2F0ZSBvbmUgbGFyZ2UgY2h1bmsgb2YgbWVtb3J5IGZvciB0 aGUgaW50ZXJtZWRpYXRlCisJICogZGF0YSwgbmVlZGVkIG9ubHkgZm9yIGRl c2VyaWFsaXppbmcgdGhlIE1DViBsaXN0LCBhbmQgd2UnbGwgcGFjaworCSAq IHVzZSBhIGxvY2FsIGRlbnNlIGFsbG9jYXRpb24gdG8gbWluaW1pemUgdGhl IHBhbGxvYyBvdmVyaGVhZC4KKwkgKgorCSAqIExldCdzIHNlZSBob3cgbXVj aCBzcGFjZSB3ZSdsbCBhY3R1YWxseSBuZWVkLCBhbmQgYWxzbyBpbmNsdWRl CisJICogc3BhY2UgZm9yIHRoZSBhcnJheSB3aXRoIHBvaW50ZXJzLgorCSAq LworCWJ1ZmZsZW4gPSBzaXplb2YoRGF0dW0qKSAqIG5kaW1zOwkJCS8qIHNw YWNlIGZvciBwb2ludGVycyAqLworCisJZm9yIChpID0gMDsgaSA8IG5kaW1z OyBpKyspCisJCS8qIGZvciBmdWxsLXNpemUgYnl2YWwgdHlwZXMsIHdlIHJl dXNlIHRoZSBzZXJpYWxpemVkIHZhbHVlICovCisJCWlmICghIChpbmZvW2ld LnR5cGJ5dmFsICYmIGluZm9baV0udHlwbGVuID09IHNpemVvZihEYXR1bSkp KQorCQkJYnVmZmxlbiArPSAoc2l6ZW9mKERhdHVtKSAqIGluZm9baV0ubnZh bHVlcyk7CisKKwlidWZmID0gcGFsbG9jMChidWZmbGVuKTsKKwlwdHIgID0g YnVmZjsKKworCXZhbHVlcyA9IChEYXR1bSoqKWJ1ZmY7CisJcHRyICs9IChz aXplb2YoRGF0dW0qKSAqIG5kaW1zKTsKKworCS8qCisJICogRklYTUUgVGhp cyB1c2VzIHBvaW50ZXJzIHRvIHRoZSBvcmlnaW5hbCBkYXRhIGFycmF5ICh0 aGUgdHlwZXMKKwkgKiAgICAgICBub3QgcGFzc2VkIGJ5IHZhbHVlKSwgc28g d2hlbiBzb21lb25lIGZyZWVzIHRoZSBtZW1vcnksCisJICogICAgICAgZS5n LiBieSBkb2luZyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCSAqCisJICogICAg ICAgICAgIGJ5dGVhICogZGF0YSA9IC4uLiBmZXRjaCB0aGUgZGF0YSBmcm9t IGNhdGFsb2cgLi4uCisJICogICAgICAgICAgIE1DVkxpc3QgbWN2bGlzdCA9 IGRlc2VyaWFsaXplX21jdl9saXN0KGRhdGEpOworCSAqICAgICAgICAgICBw ZnJlZShkYXRhKTsKKwkgKgorCSAqICAgICAgIHRoZW4gJ21jdmxpc3QnIHJl ZmVyZW5jZXMgdGhlIGZyZWVkIG1lbW9yeS4gVGhpcyBuZWVkcyB0bworCSAq ICAgICAgIGNvcHkgdGhlIHBpZWNlcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBp IDwgbmRpbXM7IGkrKykKKwl7CisJCWlmIChpbmZvW2ldLnR5cGJ5dmFsKQor CQl7CisJCQkvKiBwYXNzZWQgYnkgdmFsdWUgLyBEYXR1bSAtIHNpbXBseSBy ZXVzZSB0aGUgYXJyYXkgKi8KKwkJCWlmIChpbmZvW2ldLnR5cGxlbiA9PSBz aXplb2YoRGF0dW0pKQorCQkJeworCQkJCXZhbHVlc1tpXSA9IChEYXR1bSop dG1wOworCQkJCXRtcCArPSBpbmZvW2ldLm5ieXRlczsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQl2YWx1ZXNbaV0gPSAoRGF0dW0qKXB0cjsKKwkJCQlw dHIgKz0gKHNpemVvZihEYXR1bSkgKiBpbmZvW2ldLm52YWx1ZXMpOworCisJ CQkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJ CXsKKwkJCQkJLyoganVzdCBwb2ludCBpbnRvIHRoZSBhcnJheSAqLworCQkJ CQltZW1jcHkoJnZhbHVlc1tpXVtqXSwgdG1wLCBpbmZvW2ldLnR5cGxlbik7 CisJCQkJCXRtcCArPSBpbmZvW2ldLnR5cGxlbjsKKwkJCQl9CisJCQl9CisJ CX0KKwkJZWxzZQorCQl7CisJCQkvKiBhbGwgdGhlIHZhcmxlbmEgZGF0YSBu ZWVkIGEgY2h1bmsgZnJvbSB0aGUgYnVmZmVyICovCisJCQl2YWx1ZXNbaV0g PSAoRGF0dW0qKXB0cjsKKwkJCXB0ciArPSAoc2l6ZW9mKERhdHVtKSAqIGlu Zm9baV0ubnZhbHVlcyk7CisKKwkJCS8qIHBhc2VkIGJ5IHJlZmVyZW5jZSwg YnV0IGZpeGVkIGxlbmd0aCAobmFtZSwgdGlkLCAuLi4pICovCisJCQlpZiAo aW5mb1tpXS50eXBsZW4gPiAwKQorCQkJeworCQkJCWZvciAoaiA9IDA7IGog PCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQl7CisJCQkJCS8qIGp1c3Qg cG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJCQkJdmFsdWVzW2ldW2pdID0g UG9pbnRlckdldERhdHVtKHRtcCk7CisJCQkJCXRtcCArPSBpbmZvW2ldLnR5 cGxlbjsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChpbmZvW2ldLnR5cGxl biA9PSAtMSkKKwkJCXsKKwkJCQkvKiB2YXJsZW5hICovCisJCQkJZm9yIChq ID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCXsKKwkJCQkJ LyoganVzdCBwb2ludCBpbnRvIHRoZSBhcnJheSAqLworCQkJCQl2YWx1ZXNb aV1bal0gPSBQb2ludGVyR2V0RGF0dW0odG1wKTsKKwkJCQkJdG1wICs9IFZB UlNJWkVfQU5ZKHRtcCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoaW5m b1tpXS50eXBsZW4gPT0gLTIpCisJCQl7CisJCQkJLyogY3N0cmluZyAqLwor CQkJCWZvciAoaiA9IDA7IGogPCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJ CQl7CisJCQkJCS8qIGp1c3QgcG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJ CQkJdmFsdWVzW2ldW2pdID0gUG9pbnRlckdldERhdHVtKHRtcCk7CisJCQkJ CXRtcCArPSAoc3RybGVuKHRtcCkgKyAxKTsgLyogZG9uJ3QgZm9yZ2V0IHRo ZSBcMCAqLworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qIHdlIHNob3Vs ZCBleGhhdXN0IHRoZSBidWZmZXIgZXhhY3RseSAqLworCUFzc2VydCgocHRy IC0gYnVmZikgPT0gYnVmZmxlbik7CisKKwkvKiBhbGxvY2F0ZSBzcGFjZSBm b3IgdGhlIE1DViBpdGVtcyBpbiBhIHNpbmdsZSBwaWVjZSAqLworCXJidWZm bGVuID0gKHNpemVvZihNQ1ZJdGVtKSArIHNpemVvZihNQ1ZJdGVtRGF0YSkg KworCQkJCXNpemVvZihEYXR1bSkqbmRpbXMgKyBzaXplb2YoYm9vbCkqbmRp bXMpICogbml0ZW1zOworCisJcmJ1ZmYgPSBwYWxsb2MocmJ1ZmZsZW4pOwor CXJwdHIgID0gcmJ1ZmY7CisKKwltY3ZsaXN0LT5pdGVtcyA9IChNQ1ZJdGVt KilyYnVmZjsKKwlycHRyICs9IChzaXplb2YoTUNWSXRlbSkgKiBuaXRlbXMp OworCisJZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKQorCXsKKwkJTUNW SXRlbSBpdGVtID0gKE1DVkl0ZW0pcnB0cjsKKwkJcnB0ciArPSAoc2l6ZW9m KE1DVkl0ZW1EYXRhKSk7CisKKwkJaXRlbS0+dmFsdWVzID0gKERhdHVtKily cHRyOworCQlycHRyICs9IChzaXplb2YoRGF0dW0pKm5kaW1zKTsKKworCQlp dGVtLT5pc251bGwgPSAoYm9vbCopcnB0cjsKKwkJcnB0ciArPSAoc2l6ZW9m KGJvb2wpICpuZGltcyk7CisKKwkJLyoganVzdCBwb2ludCB0byB0aGUgcmln aHQgcGxhY2UgKi8KKwkJaW5kZXhlcyA9IElURU1fSU5ERVhFUyh0bXApOwor CisJCW1lbWNweShpdGVtLT5pc251bGwsIElURU1fTlVMTFModG1wLCBuZGlt cyksIHNpemVvZihib29sKSAqIG5kaW1zKTsKKwkJbWVtY3B5KCZpdGVtLT5m cmVxdWVuY3ksIElURU1fRlJFUVVFTkNZKHRtcCwgbmRpbXMpLCBzaXplb2Yo ZG91YmxlKSk7CisKKyNpZmRlZiBBU1NFUlRfQ0hFQ0tJTkcKKwkJZm9yIChq ID0gMDsgaiA8IG5kaW1zOyBqKyspCisJCQlBc3NlcnQoaW5kZXhlc1tqXSA8 PSBVSU5UMTZfTUFYKTsKKyNlbmRpZgorCisJCS8qIHRyYW5zbGF0ZSB0aGUg dmFsdWVzICovCisJCWZvciAoaiA9IDA7IGogPCBuZGltczsgaisrKQorCQkJ aWYgKCEgaXRlbS0+aXNudWxsW2pdKQorCQkJCWl0ZW0tPnZhbHVlc1tqXSA9 IHZhbHVlc1tqXVtpbmRleGVzW2pdXTsKKworCQltY3ZsaXN0LT5pdGVtc1tp XSA9IGl0ZW07CisKKwkJdG1wICs9IElURU1fU0laRShuZGltcyk7CisKKwkJ QXNzZXJ0KHRtcCA8PSAoY2hhciopZGF0YSArIFZBUlNJWkVfQU5ZKGRhdGEp KTsKKwl9CisKKwkvKiBjaGVjayB0aGF0IHdlIHByb2Nlc3NlZCBhbGwgdGhl IGRhdGEgKi8KKwlBc3NlcnQodG1wID09IChjaGFyKilkYXRhICsgVkFSU0la RV9BTlkoZGF0YSkpOworCisJLyogcmVsZWFzZSB0aGUgdGVtcG9yYXJ5IGJ1 ZmZlciAqLworCXBmcmVlKGJ1ZmYpOworCisJcmV0dXJuIG1jdmxpc3Q7Cit9 CisKKy8qCisgKiBXZSBuZWVkIHRvIHBhc3MgdGhlIFNvcnRTdXBwb3J0IHRv IHRoZSBjb21wYXJhdG9yLCBidXQgYnNlYXJjaCgpCisgKiBoYXMgbm8gJ2Nv bnRleHQnIHBhcmFtZXRlciwgc28gd2UgdXNlIGEgZ2xvYmFsIHZhcmlhYmxl ICh1Z2x5KS4KKyAqLworc3RhdGljIGludAorYnNlYXJjaF9jb21wYXJhdG9y KGNvbnN0IHZvaWQgKiBhLCBjb25zdCB2b2lkICogYikKK3sKKwlBc3NlcnQo c3N1cF9wcml2YXRlICE9IE5VTEwpOworCXJldHVybiBjb21wYXJlX3NjYWxh cnNfc2ltcGxlKGEsIGIsICh2b2lkKilzc3VwX3ByaXZhdGUpOworfQorLyoK KyAqIFNSRiB3aXRoIGRldGFpbHMgYWJvdXQgYnVja2V0cyBvZiBhIGhpc3Rv Z3JhbToKKyAqCisgKiAtIGl0ZW0gSUQgKDAuLi5uaXRlbXMpCisgKiAtIHZh bHVlcyAoc3RyaW5nIGFycmF5KQorICogLSBudWxscyBvbmx5IChib29sZWFu IGFycmF5KQorICogLSBmcmVxdWVuY3kgKGRvdWJsZSBwcmVjaXNpb24pCisg KgorICogVGhlIGlucHV0IGlzIHRoZSBPSUQgb2YgdGhlIHN0YXRpc3RpY3Ms IGFuZCB0aGVyZSBhcmUgbm8gcm93cworICogcmV0dXJuZWQgaWYgdGhlIHN0 YXRpc3RpY3MgY29udGFpbnMgbm8gaGlzdG9ncmFtLgorICovCitQR19GVU5D VElPTl9JTkZPX1YxKHBnX212X21jdl9pdGVtcyk7CisKK0RhdHVtCitwZ19t dl9tY3ZfaXRlbXMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENv bnRleHQJICAgKmZ1bmNjdHg7CisJaW50CQkJCQljYWxsX2NudHI7CisJaW50 CQkJCQltYXhfY2FsbHM7CisJVHVwbGVEZXNjCQkJdHVwZGVzYzsKKwlBdHRJ bk1ldGFkYXRhCSAgICphdHRpbm1ldGE7CisKKwkvKiBzdHVmZiBkb25lIG9u bHkgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCisJaWYg KFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJCU1lbW9yeUNvbnRleHQJb2xk Y29udGV4dDsKKwkJTUNWTGlzdAkJCW1jdmxpc3Q7CisKKwkJLyogY3JlYXRl IGEgZnVuY3Rpb24gY29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJzaXN0ZW5j ZSAqLworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJ Lyogc3dpdGNoIHRvIG1lbW9yeSBjb250ZXh0IGFwcHJvcHJpYXRlIGZvciBt dWx0aXBsZSBmdW5jdGlvbiBjYWxscyAqLworCQlvbGRjb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRpX2NhbGxfbWVtb3J5 X2N0eCk7CisKKwkJbWN2bGlzdCA9IGxvYWRfbXZfbWN2bGlzdChQR19HRVRB UkdfT0lEKDApKTsKKworCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBtY3ZsaXN0 OworCisJCS8qIHRvdGFsIG51bWJlciBvZiB0dXBsZXMgdG8gYmUgcmV0dXJu ZWQgKi8KKwkJZnVuY2N0eC0+bWF4X2NhbGxzID0gMDsKKwkJaWYgKGZ1bmNj dHgtPnVzZXJfZmN0eCAhPSBOVUxMKQorCQkJZnVuY2N0eC0+bWF4X2NhbGxz ID0gbWN2bGlzdC0+bml0ZW1zOworCisJCS8qIEJ1aWxkIGEgdHVwbGUgZGVz Y3JpcHRvciBmb3Igb3VyIHJlc3VsdCB0eXBlICovCisJCWlmIChnZXRfY2Fs bF9yZXN1bHRfdHlwZShmY2luZm8sIE5VTEwsICZ0dXBkZXNjKSAhPSBUWVBF RlVOQ19DT01QT1NJVEUpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBl cnJtc2coImZ1bmN0aW9uIHJldHVybmluZyByZWNvcmQgY2FsbGVkIGluIGNv bnRleHQgIgorCQkJCQkJCSJ0aGF0IGNhbm5vdCBhY2NlcHQgdHlwZSByZWNv cmQiKSkpOworCisJCS8qCisJCSAqIGdlbmVyYXRlIGF0dHJpYnV0ZSBtZXRh ZGF0YSBuZWVkZWQgbGF0ZXIgdG8gcHJvZHVjZSB0dXBsZXMKKwkJICogZnJv bSByYXcgQyBzdHJpbmdzCisJCSAqLworCQlhdHRpbm1ldGEgPSBUdXBsZURl c2NHZXRBdHRJbk1ldGFkYXRhKHR1cGRlc2MpOworCQlmdW5jY3R4LT5hdHRp bm1ldGEgPSBhdHRpbm1ldGE7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOworCX0KKworCS8qIHN0dWZmIGRvbmUgb24gZXZlcnkg Y2FsbCBvZiB0aGUgZnVuY3Rpb24gKi8KKwlmdW5jY3R4ID0gU1JGX1BFUkNB TExfU0VUVVAoKTsKKworCWNhbGxfY250ciA9IGZ1bmNjdHgtPmNhbGxfY250 cjsKKwltYXhfY2FsbHMgPSBmdW5jY3R4LT5tYXhfY2FsbHM7CisJYXR0aW5t ZXRhID0gZnVuY2N0eC0+YXR0aW5tZXRhOworCisJaWYgKGNhbGxfY250ciA8 IG1heF9jYWxscykgICAgLyogZG8gd2hlbiB0aGVyZSBpcyBtb3JlIGxlZnQg dG8gc2VuZCAqLworCXsKKwkJY2hhcgkgICoqdmFsdWVzOworCQlIZWFwVHVw bGUJdHVwbGU7CisJCURhdHVtCQlyZXN1bHQ7CisJCWludDJ2ZWN0b3IgKnN0 YWtleXM7CisJCU9pZAkJCXJlbGlkOworCisJCWNoYXIgKmJ1ZmYgPSBwYWxs b2MwKDEwMjQpOworCQljaGFyICpmb3JtYXQ7CisKKwkJaW50CQkJaTsKKwor CQlPaWQJCSAgICpvdXRmdW5jczsKKwkJRm1nckluZm8gICAqZm1ncmluZm87 CisKKwkJTUNWTGlzdAkJbWN2bGlzdDsKKwkJTUNWSXRlbQkJaXRlbTsKKwor CQltY3ZsaXN0ID0gKE1DVkxpc3QpZnVuY2N0eC0+dXNlcl9mY3R4OworCisJ CUFzc2VydChjYWxsX2NudHIgPCBtY3ZsaXN0LT5uaXRlbXMpOworCisJCWl0 ZW0gPSBtY3ZsaXN0LT5pdGVtc1tjYWxsX2NudHJdOworCisJCXN0YWtleXMg PSBmaW5kX212X2F0dG51bXMoUEdfR0VUQVJHX09JRCgwKSwgJnJlbGlkKTsK KworCQkvKgorCQkgKiBQcmVwYXJlIGEgdmFsdWVzIGFycmF5IGZvciBidWls ZGluZyB0aGUgcmV0dXJuZWQgdHVwbGUuCisJCSAqIFRoaXMgc2hvdWxkIGJl IGFuIGFycmF5IG9mIEMgc3RyaW5ncyB3aGljaCB3aWxsCisJCSAqIGJlIHBy b2Nlc3NlZCBsYXRlciBieSB0aGUgdHlwZSBpbnB1dCBmdW5jdGlvbnMuCisJ CSAqLworCQl2YWx1ZXMgPSAoY2hhciAqKikgcGFsbG9jKDQgKiBzaXplb2Yo Y2hhciAqKSk7CisKKwkJdmFsdWVzWzBdID0gKGNoYXIgKikgcGFsbG9jKDY0 ICogc2l6ZW9mKGNoYXIpKTsKKworCQkvKiBhcnJheXMgKi8KKwkJdmFsdWVz WzFdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNoYXIpKTsK KwkJdmFsdWVzWzJdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6ZW9m KGNoYXIpKTsKKworCQkvKiBmcmVxdWVuY3kgKi8KKwkJdmFsdWVzWzNdID0g KGNoYXIgKikgcGFsbG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKworCQlvdXRm dW5jcyA9IChPaWQqKXBhbGxvYzAoc2l6ZW9mKE9pZCkgKiBtY3ZsaXN0LT5u ZGltZW5zaW9ucyk7CisJCWZtZ3JpbmZvID0gKEZtZ3JJbmZvKilwYWxsb2Mw KHNpemVvZihGbWdySW5mbykgKiBtY3ZsaXN0LT5uZGltZW5zaW9ucyk7CisK KwkJZm9yIChpID0gMDsgaSA8IG1jdmxpc3QtPm5kaW1lbnNpb25zOyBpKysp CisJCXsKKwkJCWJvb2wgaXN2YXJsZW5hOworCisJCQlnZXRUeXBlT3V0cHV0 SW5mbyhnZXRfYXR0dHlwZShyZWxpZCwgc3Rha2V5cy0+dmFsdWVzW2ldKSwK KwkJCQkJCQkgICZvdXRmdW5jc1tpXSwgJmlzdmFybGVuYSk7CisKKwkJCWZt Z3JfaW5mbyhvdXRmdW5jc1tpXSwgJmZtZ3JpbmZvW2ldKTsKKwkJfQorCisJ CXNucHJpbnRmKHZhbHVlc1swXSwgNjQsICIlZCIsIGNhbGxfY250cik7CS8q IGl0ZW0gSUQgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgbWN2bGlzdC0+bmRp bWVuc2lvbnM7IGkrKykKKwkJeworCQkJRGF0dW0gdmFsLCB2YWxvdXQ7CisK KwkJCWZvcm1hdCA9ICIlcywgJXMiOworCQkJaWYgKGkgPT0gMCkKKwkJCQlm b3JtYXQgPSAieyVzJXMiOworCQkJZWxzZSBpZiAoaSA9PSBtY3ZsaXN0LT5u ZGltZW5zaW9ucy0xKQorCQkJCWZvcm1hdCA9ICIlcywgJXN9IjsKKworCQkJ dmFsID0gaXRlbS0+dmFsdWVzW2ldOworCQkJdmFsb3V0ID0gRnVuY3Rpb25D YWxsMSgmZm1ncmluZm9baV0sIHZhbCk7CisKKwkJCXNucHJpbnRmKGJ1ZmYs IDEwMjQsIGZvcm1hdCwgdmFsdWVzWzFdLCBEYXR1bUdldFBvaW50ZXIodmFs b3V0KSk7CisJCQlzdHJuY3B5KHZhbHVlc1sxXSwgYnVmZiwgMTAyMyk7CisJ CQlidWZmWzBdID0gJ1wwJzsKKworCQkJc25wcmludGYoYnVmZiwgMTAyNCwg Zm9ybWF0LCB2YWx1ZXNbMl0sIGl0ZW0tPmlzbnVsbFtpXSA/ICJ0IiA6ICJm Iik7CisJCQlzdHJuY3B5KHZhbHVlc1syXSwgYnVmZiwgMTAyMyk7CisJCQli dWZmWzBdID0gJ1wwJzsKKwkJfQorCisJCXNucHJpbnRmKHZhbHVlc1szXSwg NjQsICIlZiIsIGl0ZW0tPmZyZXF1ZW5jeSk7CS8qIGZyZXF1ZW5jeSAqLwor CisJCS8qIGJ1aWxkIGEgdHVwbGUgKi8KKwkJdHVwbGUgPSBCdWlsZFR1cGxl RnJvbUNTdHJpbmdzKGF0dGlubWV0YSwgdmFsdWVzKTsKKworCQkvKiBtYWtl IHRoZSB0dXBsZSBpbnRvIGEgZGF0dW0gKi8KKwkJcmVzdWx0ID0gSGVhcFR1 cGxlR2V0RGF0dW0odHVwbGUpOworCisJCS8qIGNsZWFuIHVwICh0aGlzIGlz IG5vdCByZWFsbHkgbmVjZXNzYXJ5KSAqLworCQlwZnJlZSh2YWx1ZXNbMF0p OworCQlwZnJlZSh2YWx1ZXNbMV0pOworCQlwZnJlZSh2YWx1ZXNbMl0pOwor CQlwZnJlZSh2YWx1ZXNbM10pOworCisJCXBmcmVlKHZhbHVlcyk7CisKKwkJ U1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIHJlc3VsdCk7CisJfQorCWVsc2Ug ICAgLyogZG8gd2hlbiB0aGVyZSBpcyBubyBtb3JlIGxlZnQgKi8KKwl7CisJ CVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwl9Cit9CmRpZmYgLS1naXQg YS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCmluZGV4IDRmMTA2YzMuLjYzMzk2MzEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCkBAIC0yMTA5LDggKzIxMDksOSBAQCBkZXNjcmliZU9uZVRhYmxl RGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQl7CiAJCQlwcmlu dGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAgIlNFTEVDVCBvaWQsIHN0 YW5hbWVzcGFjZTo6cmVnbmFtZXNwYWNlIEFTIG5zcCwgc3RhbmFtZSwgc3Rh a2V5cyxcbiIKLQkJCQkJCSAgICIgIGRlcHNfZW5hYmxlZCxcbiIKLQkJCQkJ CSAgICIgIGRlcHNfYnVpbHQsXG4iCisJCQkJCQkgICAiICBkZXBzX2VuYWJs ZWQsIG1jdl9lbmFibGVkLFxuIgorCQkJCQkJICAgIiAgZGVwc19idWlsdCwg bWN2X2J1aWx0LFxuIgorCQkJCQkJICAgIiAgbWN2X21heF9pdGVtcyxcbiIK IAkJCQkJCSAgICIgIChTRUxFQ1Qgc3RyaW5nX2FnZyhhdHRuYW1lOjp0ZXh0 LCcsICcpXG4iCiAJCQkJCQkgICAiICAgIEZST00gKChTRUxFQ1QgdW5uZXN0 KHN0YWtleXMpIEFTIGF0dG51bSkgc1xuIgogCQkJCQkJICAgIiAgICAgICAg IEpPSU4gcGdfYXR0cmlidXRlIGEgT04gKHN0YXJlbGlkID0gYS5hdHRyZWxp ZCBhbmQgYS5hdHRudW0gPSBzLmF0dG51bSkpKSBBUyBhdHRudW1zXG4iCkBA IC0yMTI4LDYgKzIxMjksOCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhj b25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCXByaW50VGFibGVBZGRGb290 ZXIoJmNvbnQsIF8oIlN0YXRpc3RpY3M6IikpOwogCQkJCWZvciAoaSA9IDA7 IGkgPCB0dXBsZXM7IGkrKykKIAkJCQl7CisJCQkJCWJvb2wgZmlyc3QgPSB0 cnVlOworCiAJCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsICIgICAgIik7 CiAKIAkJCQkJLyogc3RhdGlzdGljcyBuYW1lIChxdWFsaWZpZWQgd2l0aCBu YW1lc3BhY2UpICovCkBAIC0yMTM3LDEwICsyMTQwLDIyIEBAIGRlc2NyaWJl T25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAKIAkJ CQkJLyogIG9wdGlvbnMgKi8KIAkJCQkJaWYgKCFzdHJjbXAoUFFnZXR2YWx1 ZShyZXN1bHQsIGksIDQpLCAidCIpKQotCQkJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoJmJ1ZiwgIihkZXBlbmRlbmNpZXMpIik7CisJCQkJCXsKKwkJCQkJCWFw cGVuZFBRRXhwQnVmZmVyKCZidWYsICIoZGVwZW5kZW5jaWVzIik7CisJCQkJ CQlmaXJzdCA9IGZhbHNlOworCQkJCQl9CisKKwkJCQkJaWYgKCFzdHJjbXAo UFFnZXR2YWx1ZShyZXN1bHQsIGksIDUpLCAidCIpKQorCQkJCQl7CisJCQkJ CQlpZiAoISBmaXJzdCkKKwkJCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVm LCAiLCBtY3YiKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRQUUV4cEJ1 ZmZlcigmYnVmLCAiKG1jdiIpOworCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJ CQkJfQogCi0JCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIgT04gKCVz KSIsCi0JCQkJCQkJUFFnZXR2YWx1ZShyZXN1bHQsIGksIDYpKTsKKwkJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIikgT04gKCVzKSIsCisJCQkJCQkJ UFFnZXR2YWx1ZShyZXN1bHQsIGksIDkpKTsKIAogCQkJCQlwcmludFRhYmxl QWRkRm9vdGVyKCZjb250LCBidWYuZGF0YSk7CiAJCQkJfQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmgKaW5kZXggYTU2 OGEwNy4uZmQ3MTA3ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19tdl9zdGF0aXN0aWMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX212X3N0YXRpc3RpYy5oCkBAIC0zNywxNSArMzcsMjEgQEAgQ0FUQUxP RyhwZ19tdl9zdGF0aXN0aWMsMzM4MSkKIAogCS8qIHN0YXRpc3RpY3MgcmVx dWVzdGVkIHRvIGJ1aWxkICovCiAJYm9vbAkJZGVwc19lbmFibGVkOwkJLyog YW5hbHl6ZSBkZXBlbmRlbmNpZXM/ICovCisJYm9vbAkJbWN2X2VuYWJsZWQ7 CQkvKiBidWlsZCBNQ1YgbGlzdD8gKi8KKworCS8qIE1DViBzaXplICovCisJ aW50MzIJCW1jdl9tYXhfaXRlbXM7CQkvKiBtYXggTUNWIGl0ZW1zICovCiAK IAkvKiBzdGF0aXN0aWNzIHRoYXQgYXJlIGF2YWlsYWJsZSAoaWYgcmVxdWVz dGVkKSAqLwogCWJvb2wJCWRlcHNfYnVpbHQ7CQkJLyogZGVwZW5kZW5jaWVz IHdlcmUgYnVpbHQgKi8KKwlib29sCQltY3ZfYnVpbHQ7CQkJLyogTUNWIGxp c3Qgd2FzIGJ1aWx0ICovCiAKIAkvKiB2YXJpYWJsZS1sZW5ndGggZmllbGRz IHN0YXJ0IGhlcmUsIGJ1dCB3ZSBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIHN0 YWtleXMgKi8KIAlpbnQydmVjdG9yCXN0YWtleXM7CQkJLyogYXJyYXkgb2Yg Y29sdW1uIGtleXMgKi8KIAogI2lmZGVmIENBVEFMT0dfVkFSTEVOCiAJYnl0 ZWEJCXN0YWRlcHM7CQkJLyogZGVwZW5kZW5jaWVzIChzZXJpYWxpemVkKSAq LworCWJ5dGVhCQlzdGFtY3Y7CQkJCS8qIE1DViBsaXN0IChzZXJpYWxpemVk KSAqLwogI2VuZGlmCiAKIH0gRm9ybURhdGFfcGdfbXZfc3RhdGlzdGljOwpA QCAtNjEsMTMgKzY3LDE3IEBAIHR5cGVkZWYgRm9ybURhdGFfcGdfbXZfc3Rh dGlzdGljICpGb3JtX3BnX212X3N0YXRpc3RpYzsKICAqCQljb21waWxlciBj b25zdGFudHMgZm9yIHBnX212X3N0YXRpc3RpYwogICogLS0tLS0tLS0tLS0t LS0tLQogICovCi0jZGVmaW5lIE5hdHRzX3BnX212X3N0YXRpc3RpYwkJCQkJ NworI2RlZmluZSBOYXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTExCiAjZGVm aW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YXJlbGlkCQkJMQogI2RlZmlu ZSBBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lCQkJMgogI2RlZmluZSBB bnVtX3BnX212X3N0YXRpc3RpY19zdGFuYW1lc3BhY2UJCTMKICNkZWZpbmUg QW51bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19lbmFibGVkCQk0Ci0jZGVmaW5l IEFudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQJCQk1Ci0jZGVmaW5l IEFudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMJCQk2Ci0jZGVmaW5lIEFu dW1fcGdfbXZfc3RhdGlzdGljX3N0YWRlcHMJCQk3CisjZGVmaW5lIEFudW1f cGdfbXZfc3RhdGlzdGljX21jdl9lbmFibGVkCQk1CisjZGVmaW5lIEFudW1f cGdfbXZfc3RhdGlzdGljX21jdl9tYXhfaXRlbXMJCTYKKyNkZWZpbmUgQW51 bV9wZ19tdl9zdGF0aXN0aWNfZGVwc19idWlsdAkJCTcKKyNkZWZpbmUgQW51 bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1aWx0CQkJOAorI2RlZmluZSBBbnVt X3BnX212X3N0YXRpc3RpY19zdGFrZXlzCQkJOQorI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFkZXBzCQkJMTAKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhbWN2CQkJCTExCiAKICNlbmRpZiAgIC8qIFBHX01W X1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5o CmluZGV4IDIwZDU2NWMuLjY2YjRiY2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5oCkBAIC0yNjcwLDYgKzI2NzAsMTAgQEAgREFUQShpbnNl cnQgT0lEID0gMzk5OCAoICBwZ19tdl9zdGF0c19kZXBlbmRlbmNpZXNfaW5m byAgICAgUEdOU1AgUEdVSUQgMTIgMSAwIDAKIERFU0NSKCJtdWx0aXZhcmlh dGUgc3RhdHM6IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzIGluZm8iKTsKIERB VEEoaW5zZXJ0IE9JRCA9IDM5OTkgKCAgcGdfbXZfc3RhdHNfZGVwZW5kZW5j aWVzX3Nob3cgICAgIFBHTlNQIFBHVUlEIDEyIDEgMCAwIDAgZiBmIGYgZiB0 IGYgaSBzIDEgMCAyNSAiMTciIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxs XyBfbnVsbF8gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX3Nob3cgX251bGxf IF9udWxsXyBfbnVsbF8gKSk7CiBERVNDUigibXVsdGl2YXJpYXRlIHN0YXRz OiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBzaG93Iik7CitEQVRBKGluc2Vy dCBPSUQgPSAzMzc2ICggIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbwlQR05T UCBQR1VJRCAxMiAxIDAgMCAwIGYgZiBmIGYgdCBmIGkgcyAxIDAgMjUgIjE3 IiBfbnVsbF8gX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIHBnX212X3N0 YXRzX21jdmxpc3RfaW5mbyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RF U0NSKCJtdWx0aS12YXJpYXRlIHN0YXRpc3RpY3M6IE1DViBsaXN0IGluZm8i KTsKK0RBVEEoaW5zZXJ0IE9JRCA9IDMzNzMgKCAgcGdfbXZfbWN2X2l0ZW1z IFBHTlNQIFBHVUlEIDEyIDEgMTAwMCAwIDAgZiBmIGYgZiB0IHQgaSBzIDEg MCAyMjQ5ICIyNiIgInsyNiwyMywxMDA5LDEwMDAsNzAxfSIgIntpLG8sbyxv LG99IiAie29pZCxpbmRleCx2YWx1ZXMsbnVsbHMsZnJlcXVlbmN5fSIgX251 bGxfIF9udWxsXyBwZ19tdl9tY3ZfaXRlbXMgX251bGxfIF9udWxsXyBfbnVs bF8gKSk7CitERVNDUigiZGV0YWlscyBhYm91dCBNQ1YgbGlzdCBpdGVtcyIp OwogCiBEQVRBKGluc2VydCBPSUQgPSAxOTI4ICggIHBnX3N0YXRfZ2V0X251 bXNjYW5zCQkJUEdOU1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBz IHIgMSAwIDIwICIyNiIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9u dWxsXyBwZ19zdGF0X2dldF9udW1zY2FucyBfbnVsbF8gX251bGxfIF9udWxs XyApKTsKIERFU0NSKCJzdGF0aXN0aWNzOiBudW1iZXIgb2Ygc2NhbnMgZG9u ZSBmb3IgdGFibGUvaW5kZXgiKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3JlbGF0aW9uLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlv bi5oCmluZGV4IGRlODZkMDEuLjVhZTZiM2MgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcmVsYXRpb24uaApAQCAtNjE5LDkgKzYxOSwxMSBAQCB0eXBlZGVmIHN0 cnVjdCBNVlN0YXRpc3RpY0luZm8KIAogCS8qIGVuYWJsZWQgc3RhdGlzdGlj cyAqLwogCWJvb2wJCWRlcHNfZW5hYmxlZDsJLyogZnVuY3Rpb25hbCBkZXBl bmRlbmNpZXMgZW5hYmxlZCAqLworCWJvb2wJCW1jdl9lbmFibGVkOwkvKiBN Q1YgbGlzdCBlbmFibGVkICovCiAKIAkvKiBidWlsdC9hdmFpbGFibGUgc3Rh dGlzdGljcyAqLwogCWJvb2wJCWRlcHNfYnVpbHQ7CQkvKiBmdW5jdGlvbmFs IGRlcGVuZGVuY2llcyBidWlsdCAqLworCWJvb2wJCW1jdl9idWlsdDsJCS8q IE1DViBsaXN0IGJ1aWx0ICovCiAKIAkvKiBjb2x1bW5zIGluIHRoZSBzdGF0 aXN0aWNzIChhdHRudW1zKSAqLwogCWludDJ2ZWN0b3IgKnN0YWtleXM7CQkv KiBhdHRudW1zIG9mIHRoZSBjb2x1bW5zIGNvdmVyZWQgKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaCBiL3NyYy9pbmNsdWRl L3V0aWxzL212c3RhdHMuaAppbmRleCBjYzQzYTc5Li40NTM1ZGI3IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvbXZzdGF0cy5oCkBAIC01MSwzMCArNTEsODkgQEAg dHlwZWRlZiBNVkRlcGVuZGVuY2llc0RhdGEqIE1WRGVwZW5kZW5jaWVzOwog I2RlZmluZSBNVlNUQVRfREVQU19UWVBFX0JBU0lDCTEJCQkvKiBiYXNpYyBk ZXBlbmRlbmNpZXMgdHlwZSAqLwogCiAvKgorICogTXVsdGl2YXJpYXRlIE1D ViAobW9zdC1jb21tb24gdmFsdWUpIGxpc3RzCisgKgorICogQSBzdHJhaWdo dC1mb3J3YXJkIGV4dGVuc2lvbiBvZiBNQ1YgaXRlbXMgLSBpLmUuIGEgbGlz dCAoYXJyYXkpIG9mCisgKiBjb21iaW5hdGlvbnMgb2YgYXR0cmlidXRlIHZh bHVlcywgdG9nZXRoZXIgd2l0aCBhIGZyZXF1ZW5jeSBhbmQKKyAqIG51bGwg ZmxhZ3MuCisgKi8KK3R5cGVkZWYgc3RydWN0IE1DVkl0ZW1EYXRhIHsKKwlk b3VibGUJCWZyZXF1ZW5jeTsJLyogZnJlcXVlbmN5IG9mIHRoaXMgY29tYmlu YXRpb24gKi8KKwlib29sCSAgICppc251bGw7CQkvKiBsYWdzIG9mIE5VTEwg dmFsdWVzICh1cCB0byAzMiBjb2x1bW5zKSAqLworCURhdHVtCSAgICp2YWx1 ZXM7CQkvKiB2YXJpYWJsZS1sZW5ndGggKG5kaW1lbnNpb25zKSAqLworfSBN Q1ZJdGVtRGF0YTsKKwordHlwZWRlZiBNQ1ZJdGVtRGF0YSAqTUNWSXRlbTsK KworLyogbXVsdGl2YXJpYXRlIE1DViBsaXN0IC0gZXNzZW50YWxseSBhbiBh cnJheSBvZiBNQ1YgaXRlbXMgKi8KK3R5cGVkZWYgc3RydWN0IE1DVkxpc3RE YXRhIHsKKwl1aW50MzIJCW1hZ2ljOwkJCS8qIG1hZ2ljIGNvbnN0YW50IG1h cmtlciAqLworCXVpbnQzMgkJdHlwZTsJCQkvKiB0eXBlIG9mIE1DViBsaXN0 IChCQVNJQykgKi8KKwl1aW50MzIJCW5kaW1lbnNpb25zOwkvKiBudW1iZXIg b2YgZGltZW5zaW9ucyAqLworCXVpbnQzMgkJbml0ZW1zOwkJCS8qIG51bWJl ciBvZiBNQ1YgaXRlbXMgaW4gdGhlIGFycmF5ICovCisJTUNWSXRlbQkgICAq aXRlbXM7CQkJLyogYXJyYXkgb2YgTUNWIGl0ZW1zICovCit9IE1DVkxpc3RE YXRhOworCit0eXBlZGVmIE1DVkxpc3REYXRhICpNQ1ZMaXN0OworCisvKiB1 c2VkIHRvIGZsYWcgc3RhdHMgc2VyaWFsaXplZCB0byBieXRlYSAqLworI2Rl ZmluZSBNVlNUQVRfTUNWX01BR0lDCQkweEUxQTY1MUMyCS8qIG1hcmtzIHNl cmlhbGl6ZWQgYnl0ZWEgKi8KKyNkZWZpbmUgTVZTVEFUX01DVl9UWVBFX0JB U0lDCTEJCQkvKiBiYXNpYyBNQ1YgbGlzdCB0eXBlICovCisKKy8qCisgKiBM aW1pdHMgdXNlZCBmb3IgbWN2X21heF9pdGVtcyBvcHRpb24sIGkuZS4gd2Un cmUgYWx3YXlzIGd1YXJhbnRlZWQKKyAqIHRvIGhhdmUgc3BhY2UgZm9yIGF0 IGxlYXN0IE1WU1RBVF9NQ1ZMSVNUX01JTl9JVEVNUywgYW5kIHdlIGNhbm5v dAorICogaGF2ZSBtb3JlIHRoYW4gTVZTVEFUX01DVkxJU1RfTUFYX0lURU1T IGl0ZW1zLgorICoKKyAqIFRoaXMgaXMganVzdCBhIGJvdW5kYXJ5IGZvciB0 aGUgJ21heCcgdGhyZXNob2xkIC0gdGhlIGFjdHVhbCBsaXN0CisgKiBtYXkg b2YgY291cnNlIGNvbnRhaW4gbGVzcyBpdGVtcyB0aGFuIE1WU1RBVF9NQ1ZM SVNUX01JTl9JVEVNUy4KKyAqLworI2RlZmluZSBNVlNUQVRfTUNWTElTVF9N SU5fSVRFTVMJMTI4CQkvKiBtaW4gaXRlbXMgaW4gTUNWIGxpc3QgKi8KKyNk ZWZpbmUgTVZTVEFUX01DVkxJU1RfTUFYX0lURU1TCTgxOTIJLyogbWF4IGl0 ZW1zIGluIE1DViBsaXN0ICovCisKKy8qCiAgKiBUT0RPIE1heWJlIGZldGNo aW5nIHRoZSBoaXN0b2dyYW0vTUNWIGxpc3Qgc2VwYXJhdGVseSBpcyBpbmVm ZmljaWVudD8KICAqICAgICAgQ29uc2lkZXIgYWRkaW5nIGEgc2luZ2xlIGBm ZXRjaF9zdGF0c2AgbWV0aG9kLCBmZXRjaGluZyBhbGwKICAqICAgICAgc3Rh dHMgc3BlY2lmaWVkIHVzaW5nIGZsYWdzIChvciBzb21ldGhpbmcgbGlrZSB0 aGF0KS4KICAqLwogCiBNVkRlcGVuZGVuY2llcyBsb2FkX212X2RlcGVuZGVu Y2llcyhPaWQgbXZvaWQpOworTUNWTGlzdCAgICAgICAgbG9hZF9tdl9tY3Zs aXN0KE9pZCBtdm9pZCk7CiAKIGJ5dGVhICogc2VyaWFsaXplX212X2RlcGVu ZGVuY2llcyhNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpOworYnl0ZWEg KiBzZXJpYWxpemVfbXZfbWN2bGlzdChNQ1ZMaXN0IG1jdmxpc3QsIGludDJ2 ZWN0b3IgKmF0dHJzLAorCQkJCQkJCSBWYWNBdHRyU3RhdHMgKipzdGF0cyk7 CiAKIC8qIGRlc2VyaWFsaXphdGlvbiBvZiBzdGF0cyAoc2VyaWFsaXphdGlv biBpcyBwcml2YXRlIHRvIGFuYWx5emUpICovCiBNVkRlcGVuZGVuY2llcwlk ZXNlcmlhbGl6ZV9tdl9kZXBlbmRlbmNpZXMoYnl0ZWEgKiBkYXRhKTsKK01D Vkxpc3QJCQlkZXNlcmlhbGl6ZV9tdl9tY3ZsaXN0KGJ5dGVhICogZGF0YSk7 CisKKy8qCisgKiBSZXR1cm5zIGluZGV4IG9mIHRoZSBhdHRyaWJ1dGUgbnVt YmVyIHdpdGhpbiB0aGUgdmVjdG9yIChpLmUuIGEKKyAqIGRpbWVuc2lvbiB3 aXRoaW4gdGhlIHN0YXRzKS4KKyAqLworaW50IG12X2dldF9pbmRleChBdHRy TnVtYmVyIHZhcmF0dG5vLCBpbnQydmVjdG9yICogc3Rha2V5cyk7CisKK2lu dDJ2ZWN0b3IqIGZpbmRfbXZfYXR0bnVtcyhPaWQgbXZvaWQsIE9pZCAqcmVs aWQpOwogCiAvKiBGSVhNRSB0aGlzIHByb2JhYmx5IGJlbG9uZ3Mgc29tZXdo ZXJlIGVsc2UgKG5vdCB0byBvcGVyYXRpb25zIHN0YXRzKSAqLwogZXh0ZXJu IERhdHVtIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFBHX0ZVTkNU SU9OX0FSR1MpOwogZXh0ZXJuIERhdHVtIHBnX212X3N0YXRzX2RlcGVuZGVu Y2llc19zaG93KFBHX0ZVTkNUSU9OX0FSR1MpOworZXh0ZXJuIERhdHVtIHBn X212X3N0YXRzX21jdmxpc3RfaW5mbyhQR19GVU5DVElPTl9BUkdTKTsKK2V4 dGVybiBEYXR1bSBwZ19tdl9tY3ZsaXN0X2l0ZW1zKFBHX0ZVTkNUSU9OX0FS R1MpOwogCiBNVkRlcGVuZGVuY2llcwotYnVpbGRfbXZfZGVwZW5kZW5jaWVz KGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCi0JCQkJCQkJCSAgaW50 MnZlY3RvciAqYXR0cnMsCi0JCQkJCQkJCSAgVmFjQXR0clN0YXRzICoqc3Rh dHMpOworYnVpbGRfbXZfZGVwZW5kZW5jaWVzKGludCBudW1yb3dzLCBIZWFw VHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkgIFZhY0F0 dHJTdGF0cyAqKnN0YXRzKTsKKworTUNWTGlzdAorYnVpbGRfbXZfbWN2bGlz dChpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICph dHRycywKKwkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMsIGludCAqbnVtcm93 c19maWx0ZXJlZCk7CiAKIHZvaWQgYnVpbGRfbXZfc3RhdHMoUmVsYXRpb24g b25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLAotCQkJCQkJ ICAgaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwor CQkJCQlpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7 CiAKLXZvaWQgdXBkYXRlX212X3N0YXRzKE9pZCByZWxpZCwgTVZEZXBlbmRl bmNpZXMgZGVwZW5kZW5jaWVzLCBpbnQydmVjdG9yICphdHRycyk7Cit2b2lk IHVwZGF0ZV9tdl9zdGF0cyhPaWQgcmVsaWQsIE1WRGVwZW5kZW5jaWVzIGRl cGVuZGVuY2llcywgTUNWTGlzdCBtY3ZsaXN0LAorCQkJCQkgaW50MnZlY3Rv ciAqYXR0cnMsIFZhY0F0dHJTdGF0cyAqKnN0YXRzKTsKIAogI2VuZGlmCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X21jdi5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3NDhlMwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbXZf bWN2Lm91dApAQCAtMCwwICsxLDIwNyBAQAorLS0gZGF0YSB0eXBlIHBhc3Nl ZCBieSB2YWx1ZQorQ1JFQVRFIFRBQkxFIG1jdl9saXN0ICgKKyAgICBhIElO VCwKKyAgICBiIElOVCwKKyAgICBjIElOVAorKTsKKy0tIHVua25vd24gY29s dW1uCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAodW5rbm93 bl9jb2x1bW4pIFdJVEggKG1jdik7CitFUlJPUjogIGNvbHVtbiAidW5rbm93 bl9jb2x1bW4iIHJlZmVyZW5jZWQgaW4gc3RhdGlzdGljcyBkb2VzIG5vdCBl eGlzdAorLS0gc2luZ2xlIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEg T04gbWN2X2xpc3QgKGEpIFdJVEggKG1jdik7CitFUlJPUjogIG11bHRpdmFy aWF0ZSBzdGF0cyByZXF1aXJlIDIgb3IgbW9yZSBjb2x1bW5zCistLSBzaW5n bGUgY29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzMSBP TiBtY3ZfbGlzdCAoYSwgYSkgV0lUSCAobWN2KTsKK0VSUk9SOiAgZHVwbGlj YXRlIGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5pdGlvbgorLS0g dHdvIGNvbHVtbnMsIG9uZSBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElD UyBzMSBPTiBtY3ZfbGlzdCAoYSwgYSwgYikgV0lUSCAobWN2KTsKK0VSUk9S OiAgZHVwbGljYXRlIGNvbHVtbiBuYW1lIGluIHN0YXRpc3RpY3MgZGVmaW5p dGlvbgorLS0gdW5rbm93biBvcHRpb24KK0NSRUFURSBTVEFUSVNUSUNTIHMx IE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIICh1bmtub3duX29wdGlvbik7 CitFUlJPUjogIHVucmVjb2duaXplZCBTVEFUSVNUSUNTIG9wdGlvbiAidW5r bm93bl9vcHRpb24iCistLSBtaXNzaW5nIE1DViBzdGF0aXN0aWNzCitDUkVB VEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAo ZGVwZW5kZW5jaWVzLCBtYXhfbWN2X2l0ZW1zPTIwMCk7CitFUlJPUjogIG9w dGlvbiAnbWN2JyBpcyByZXF1aXJlZCBieSBvdGhlciBvcHRpb25zKHMpCist LSBpbnZhbGlkIG1jdl9tYXhfaXRlbXMgdmFsdWUgLyB0b28gbG93CitDUkVB VEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAo bWN2LCBtYXhfbWN2X2l0ZW1zPTEwKTsKK0VSUk9SOiAgbWF4IG51bWJlciBv ZiBNQ1YgaXRlbXMgbXVzdCBiZSBhdCBsZWFzdCAxMjgKKy0tIGludmFsaWQg bWN2X21heF9pdGVtcyB2YWx1ZSAvIHRvbyBoaWdoCitDUkVBVEUgU1RBVElT VElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAobWN2LCBtYXhf bWN2X2l0ZW1zPTEwMDAwKTsKK0VSUk9SOiAgbWF4IG51bWJlciBvZiBNQ1Yg aXRlbXMgaXMgODE5MgorLS0gY29ycmVjdCBjb21tYW5kCitDUkVBVEUgU1RB VElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwgYykgV0lUSCAobWN2KTsK Ky0tIHJhbmRvbSBkYXRhCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBT RUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwgMjMpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG1j dl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212 X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZfc3Rh dGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7 CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19tdl9zdGF0c19tY3Zs aXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgfCBmICAgICAgICAg fCAKKygxIHJvdykKKworVFJVTkNBVEUgbWN2X2xpc3Q7CistLSBhID0+IGIs IGEgPT4gYywgYiA9PiBjCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBT RUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1j dl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5m byhzdGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJl bGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBt Y3ZfYnVpbHQgfCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgdCAgICAgICAgICAgfCB0ICAgICAgICAgfCBuaXRlbXM9MTAwMAorKDEg cm93KQorCitUUlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGEgPT4gYiwgYSA9PiBj CitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMCwgaS8x NTAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7 CitBTkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3Zf YnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZS T00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0 Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19t dl9zdGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAg fCB0ICAgICAgICAgfCBuaXRlbXM9MTAwMAorKDEgcm93KQorCitUUlVOQ0FU RSBtY3ZfbGlzdDsKKy0tIGNoZWNrIGV4cGxhaW4gKGV4cGVjdCBiaXRtYXAg aW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4IHNjYW4pCitJTlNFUlQgSU5U TyBtY3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80 MDAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitD UkVBVEUgSU5ERVggbWN2X2lkeCBPTiBtY3ZfbGlzdCAoYSwgYik7CitBTkFM WVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQs IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdf bXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVn Y2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBwZ19tdl9zdGF0 c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgfCB0ICAg ICAgICAgfCBuaXRlbXM9MTAwCisoMSByb3cpCisKK0VYUExBSU4gKENPU1RT IG9mZikKKyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEgPSAxMCBB TkQgYiA9IDU7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG1jdl9saXN0Cisg ICBSZWNoZWNrIENvbmQ6ICgoYSA9IDEwKSBBTkQgKGIgPSA1KSkKKyAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBtY3ZfaWR4CisgICAgICAgICBJbmRl eCBDb25kOiAoKGEgPSAxMCkgQU5EIChiID0gNSkpCisoNCByb3dzKQorCitE Uk9QIFRBQkxFIG1jdl9saXN0OworLS0gdmFybGVuYSB0eXBlICh0ZXh0KQor Q1JFQVRFIFRBQkxFIG1jdl9saXN0ICgKKyAgICBhIFRFWFQsCisgICAgYiBU RVhULAorICAgIGMgVEVYVAorKTsKK0NSRUFURSBTVEFUSVNUSUNTIHMyIE9O IG1jdl9saXN0IChhLCBiLCBjKSBXSVRIIChtY3YpOworLS0gcmFuZG9tIGRh dGEKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBtb2QoaSwg MTExKSwgbW9kKGksIDEyMyksIG1vZChpLCAyMykgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxF Q1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlz dF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUg c3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxl ZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyB0ICAgICAgICAgICB8IGYgICAgICAgICB8IAorKDEgcm93KQor CitUUlVOQ0FURSBtY3ZfbGlzdDsKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+ IGMKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwLCBp LzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhp KTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1j dl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAg RlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xp c3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBn X212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAg ICB8IHQgICAgICAgICB8IG5pdGVtcz0xMDAwCisoMSByb3cpCisKK1RSVU5D QVRFIG1jdl9saXN0OworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VSVCBJTlRP IG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2 X2xpc3Q7CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZf c3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0 aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsK KyBtY3ZfZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxp c3RfaW5mbyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8IHQgICAgICAgICB8 IG5pdGVtcz0xMDAwCisoMSByb3cpCisKK1RSVU5DQVRFIG1jdl9saXN0Owor LS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBu b3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG1jdl9saXN0Cisg ICAgIFNFTEVDVCBpLzEwMDAwLCBpLzIwMDAwLCBpLzQwMDAwIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsKK0NSRUFURSBJTkRFWCBt Y3ZfaWR4IE9OIG1jdl9saXN0IChhLCBiKTsKK0FOQUxZWkUgbWN2X2xpc3Q7 CitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNf bWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMg V0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3Zf ZW5hYmxlZCB8IG1jdl9idWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5m byAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICB8IHQgICAgICAgICB8IG5pdGVt cz0xMDAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVD VCAqIEZST00gbWN2X2xpc3QgV0hFUkUgYSA9ICcxMCcgQU5EIGIgPSAnNSc7 CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBI ZWFwIFNjYW4gb24gbWN2X2xpc3QKKyAgIFJlY2hlY2sgQ29uZDogKChhID0g JzEwJzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiBtY3ZfaWR4CisgICAgICAgICBJbmRleCBDb25k OiAoKGEgPSAnMTAnOjp0ZXh0KSBBTkQgKGIgPSAnNSc6OnRleHQpKQorKDQg cm93cykKKworVFJVTkNBVEUgbWN2X2xpc3Q7CistLSBjaGVjayBleHBsYWlu IChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBz Y2FuKSB3aXRoIE5VTExzCitJTlNFUlQgSU5UTyBtY3ZfbGlzdAorICAgICBT RUxFQ1QKKyAgICAgICAoQ0FTRSBXSEVOIGkvMTAwMDAgPSAwIFRIRU4gTlVM TCBFTFNFIGkvMTAwMDAgRU5EKSwKKyAgICAgICAoQ0FTRSBXSEVOIGkvMjAw MDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvMjAwMDAgRU5EKSwKKyAgICAgICAo Q0FTRSBXSEVOIGkvNDAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvNDAwMDAg RU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMo aSk7CitBTkFMWVpFIG1jdl9saXN0OworU0VMRUNUIG1jdl9lbmFibGVkLCBt Y3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisg IEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9s aXN0Jzo6cmVnY2xhc3M7CisgbWN2X2VuYWJsZWQgfCBtY3ZfYnVpbHQgfCBw Z19tdl9zdGF0c19tY3ZsaXN0X2luZm8gCistLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdCAgICAgICAg ICAgfCB0ICAgICAgICAgfCBuaXRlbXM9MTAwCisoMSByb3cpCisKK0VYUExB SU4gKENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJF IGEgSVMgTlVMTCBBTkQgYiBJUyBOVUxMOworICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBC aXRtYXAgSGVhcCBTY2FuIG9uIG1jdl9saXN0CisgICBSZWNoZWNrIENvbmQ6 ICgoYSBJUyBOVUxMKSBBTkQgKGIgSVMgTlVMTCkpCisgICAtPiAgQml0bWFw IEluZGV4IFNjYW4gb24gbWN2X2lkeAorICAgICAgICAgSW5kZXggQ29uZDog KChhIElTIE5VTEwpIEFORCAoYiBJUyBOVUxMKSkKKyg0IHJvd3MpCisKK0RS T1AgVEFCTEUgbWN2X2xpc3Q7CistLSBOVUxMIHZhbHVlcyAobWl4IG9mIGlu dCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRFIFRBQkxFIG1jdl9saXN0ICgK KyAgICBhIElOVCwKKyAgICBiIFRFWFQsCisgICAgYyBJTlQsCisgICAgZCBU RVhUCispOworQ1JFQVRFIFNUQVRJU1RJQ1MgczMgT04gbWN2X2xpc3QgKGEs IGIsIGMsIGQpIFdJVEggKG1jdik7CitJTlNFUlQgSU5UTyBtY3ZfbGlzdAor ICAgICBTRUxFQ1QKKyAgICAgICAgIG1vZChpLCAxMDApLAorICAgICAgICAg KENBU0UgV0hFTiBtb2QoaSwgMjAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9k KGksMjAwKSBFTkQpLAorICAgICAgICAgbW9kKGksIDQwMCksCisgICAgICAg ICAoQ0FTRSBXSEVOIG1vZChpLCAzMDApID0gMCBUSEVOIE5VTEwgRUxTRSBt b2QoaSw2MDApIEVORCkKKyAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwMCkgcyhpKTsKK0FOQUxZWkUgbWN2X2xpc3Q7CitTRUxFQ1QgbWN2X2Vu YWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0 YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQg PSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKyBtY3ZfZW5hYmxlZCB8IG1jdl9i dWlsdCB8IHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyAKKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0 ICAgICAgICAgICB8IHQgICAgICAgICB8IG5pdGVtcz0xMjAwCisoMSByb3cp CisKK0RST1AgVEFCTEUgbWN2X2xpc3Q7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDg0YjQ0MjUuLjY2MDcxZDgg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMu b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0 CkBAIC0xMzczLDcgKzEzNzMsOSBAQCBwZ19tdl9zdGF0c3wgU0VMRUNUIG4u bnNwbmFtZSBBUyBzY2hlbWFuYW1lLAogICAgIHMuc3RhbmFtZSwKICAgICBz LnN0YWtleXMgQVMgYXR0bnVtcywKICAgICBsZW5ndGgocy5zdGFkZXBzKSBB UyBkZXBzYnl0ZXMsCi0gICAgcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2lu Zm8ocy5zdGFkZXBzKSBBUyBkZXBzaW5mbworICAgIHBnX212X3N0YXRzX2Rl cGVuZGVuY2llc19pbmZvKHMuc3RhZGVwcykgQVMgZGVwc2luZm8sCisgICAg bGVuZ3RoKHMuc3RhbWN2KSBBUyBtY3ZieXRlcywKKyAgICBwZ19tdl9zdGF0 c19tY3ZsaXN0X2luZm8ocy5zdGFtY3YpIEFTIG1jdmluZm8KICAgIEZST00g KChwZ19tdl9zdGF0aXN0aWMgcwogICAgICBKT0lOIHBnX2NsYXNzIGMgT04g KChjLm9pZCA9IHMuc3RhcmVsaWQpKSkKICAgICAgTEVGVCBKT0lOIHBnX25h bWVzcGFjZSBuIE9OICgobi5vaWQgPSBjLnJlbG5hbWVzcGFjZSkpKTsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUg Yi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDRm MmZmYjguLjg1ZDk0ZjEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJh bGxlbF9zY2hlZHVsZQpAQCAtMTEyLDQgKzExMiw0IEBAIHRlc3Q6IGV2ZW50 X3RyaWdnZXIKIHRlc3Q6IHN0YXRzCiAKICMgcnVuIHRlc3RzIG9mIG11bHRp dmFyaWF0ZSBzdGF0cwotdGVzdDogbXZfZGVwZW5kZW5jaWVzCit0ZXN0OiBt dl9kZXBlbmRlbmNpZXMgbXZfbWN2CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL3NlcmlhbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc2Vy aWFsX3NjaGVkdWxlCmluZGV4IDA5N2EwNGYuLjY1ODRkNzMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlCkBAIC0xNjMsMyArMTYz LDQgQEAgdGVzdDogeG1sCiB0ZXN0OiBldmVudF90cmlnZ2VyCiB0ZXN0OiBz dGF0cwogdGVzdDogbXZfZGVwZW5kZW5jaWVzCit0ZXN0OiBtdl9tY3YKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X21jdi5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9tY3Yuc3FsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNGM5ZjQKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9tY3Yuc3FsCkBAIC0wLDAg KzEsMTc4IEBACistLSBkYXRhIHR5cGUgcGFzc2VkIGJ5IHZhbHVlCitDUkVB VEUgVEFCTEUgbWN2X2xpc3QgKAorICAgIGEgSU5ULAorICAgIGIgSU5ULAor ICAgIGMgSU5UCispOworCistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNU QVRJU1RJQ1MgczEgT04gbWN2X2xpc3QgKHVua25vd25fY29sdW1uKSBXSVRI IChtY3YpOworCistLSBzaW5nbGUgY29sdW1uCitDUkVBVEUgU1RBVElTVElD UyBzMSBPTiBtY3ZfbGlzdCAoYSkgV0lUSCAobWN2KTsKKworLS0gc2luZ2xl IGNvbHVtbiwgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04g bWN2X2xpc3QgKGEsIGEpIFdJVEggKG1jdik7CisKKy0tIHR3byBjb2x1bW5z LCBvbmUgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gbWN2 X2xpc3QgKGEsIGEsIGIpIFdJVEggKG1jdik7CisKKy0tIHVua25vd24gb3B0 aW9uCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAoYSwgYiwg YykgV0lUSCAodW5rbm93bl9vcHRpb24pOworCistLSBtaXNzaW5nIE1DViBz dGF0aXN0aWNzCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtY3ZfbGlzdCAo YSwgYiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzLCBtYXhfbWN2X2l0ZW1zPTIw MCk7CisKKy0tIGludmFsaWQgbWN2X21heF9pdGVtcyB2YWx1ZSAvIHRvbyBs b3cKK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIG1jdl9saXN0IChhLCBiLCBj KSBXSVRIIChtY3YsIG1heF9tY3ZfaXRlbXM9MTApOworCistLSBpbnZhbGlk IG1jdl9tYXhfaXRlbXMgdmFsdWUgLyB0b28gaGlnaAorQ1JFQVRFIFNUQVRJ U1RJQ1MgczEgT04gbWN2X2xpc3QgKGEsIGIsIGMpIFdJVEggKG1jdiwgbWF4 X21jdl9pdGVtcz0xMDAwMCk7CisKKy0tIGNvcnJlY3QgY29tbWFuZAorQ1JF QVRFIFNUQVRJU1RJQ1MgczEgT04gbWN2X2xpc3QgKGEsIGIsIGMpIFdJVEgg KG1jdik7CisKKy0tIHJhbmRvbSBkYXRhCitJTlNFUlQgSU5UTyBtY3ZfbGlz dAorICAgICBTRUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2Qo aSwgMjMpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisK K0FOQUxZWkUgbWN2X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2 X2J1aWx0LCBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBG Uk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlz dCc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKworLS0gYSA9 PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAg ICAgU0VMRUNUIGkvMTAsIGkvMTAwLCBpLzIwMCBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwKSBzKGkpOworCitBTkFMWVpFIG1jdl9saXN0OworCitT RUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9idWlsdCwgcGdfbXZfc3RhdHNfbWN2 bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hF UkUgc3RhcmVsaWQgPSAnbWN2X2xpc3QnOjpyZWdjbGFzczsKKworVFJVTkNB VEUgbWN2X2xpc3Q7CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5U TyBtY3ZfbGlzdAorICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkvMjAwIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUg bWN2X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBw Z19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212 X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2Ns YXNzOworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKworLS0gY2hlY2sgZXhwbGFp biAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4gaW5kZXgg c2NhbikKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAgIFNFTEVDVCBpLzEw MDAwLCBpLzIwMDAwLCBpLzQwMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMDAwMCkgcyhpKTsKK0NSRUFURSBJTkRFWCBtY3ZfaWR4IE9OIG1jdl9s aXN0IChhLCBiKTsKKworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNUIG1j dl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5m byhzdGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJl bGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisKK0VYUExBSU4gKENPU1RT IG9mZikKKyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEgPSAxMCBB TkQgYiA9IDU7CisKK0RST1AgVEFCTEUgbWN2X2xpc3Q7CisKKy0tIHZhcmxl bmEgdHlwZSAodGV4dCkKK0NSRUFURSBUQUJMRSBtY3ZfbGlzdCAoCisgICAg YSBURVhULAorICAgIGIgVEVYVCwKKyAgICBjIFRFWFQKKyk7CisKK0NSRUFU RSBTVEFUSVNUSUNTIHMyIE9OIG1jdl9saXN0IChhLCBiLCBjKSBXSVRIICht Y3YpOworCistLSByYW5kb20gZGF0YQorSU5TRVJUIElOVE8gbWN2X2xpc3QK KyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2QoaSwgMTIzKSwgbW9kKGks IDIzKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworCitB TkFMWVpFIG1jdl9saXN0OworCitTRUxFQ1QgbWN2X2VuYWJsZWQsIG1jdl9i dWlsdCwgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKHN0YW1jdikKKyAgRlJP TSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbWN2X2xpc3Qn OjpyZWdjbGFzczsKKworVFJVTkNBVEUgbWN2X2xpc3Q7CisKKy0tIGEgPT4g YiwgYSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRPIG1jdl9saXN0CisgICAg IFNFTEVDVCBpLzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwMCkgcyhpKTsKKworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VM RUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxp c3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJF IHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7CisKK1RSVU5DQVRF IG1jdl9saXN0OworCistLSBhID0+IGIsIGEgPT4gYworSU5TRVJUIElOVE8g bWN2X2xpc3QKKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBtY3Zf bGlzdDsKKworU0VMRUNUIG1jdl9lbmFibGVkLCBtY3ZfYnVpbHQsIHBnX212 X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFtY3YpCisgIEZST00gcGdfbXZfc3Rh dGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ21jdl9saXN0Jzo6cmVnY2xhc3M7 CisKK1RSVU5DQVRFIG1jdl9saXN0OworCistLSBjaGVjayBleHBsYWluIChl eHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBzY2Fu KQorSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUIGkvMTAwMDAs IGkvMjAwMDAsIGkvNDAwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAw MDAwKSBzKGkpOworQ1JFQVRFIElOREVYIG1jdl9pZHggT04gbWN2X2xpc3Qg KGEsIGIpOworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNUIG1jdl9lbmFi bGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFt Y3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0g J21jdl9saXN0Jzo6cmVnY2xhc3M7CisKK0VYUExBSU4gKENPU1RTIG9mZikK KyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEgPSAnMTAnIEFORCBi ID0gJzUnOworCitUUlVOQ0FURSBtY3ZfbGlzdDsKKworLS0gY2hlY2sgZXhw bGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4gaW5k ZXggc2Nhbikgd2l0aCBOVUxMcworSU5TRVJUIElOVE8gbWN2X2xpc3QKKyAg ICAgU0VMRUNUCisgICAgICAgKENBU0UgV0hFTiBpLzEwMDAwID0gMCBUSEVO IE5VTEwgRUxTRSBpLzEwMDAwIEVORCksCisgICAgICAgKENBU0UgV0hFTiBp LzIwMDAwID0gMCBUSEVOIE5VTEwgRUxTRSBpLzIwMDAwIEVORCksCisgICAg ICAgKENBU0UgV0hFTiBpLzQwMDAwID0gMCBUSEVOIE5VTEwgRUxTRSBpLzQw MDAwIEVORCkKKyAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAw KSBzKGkpOworQU5BTFlaRSBtY3ZfbGlzdDsKKworU0VMRUNUIG1jdl9lbmFi bGVkLCBtY3ZfYnVpbHQsIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhzdGFt Y3YpCisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0g J21jdl9saXN0Jzo6cmVnY2xhc3M7CisKK0VYUExBSU4gKENPU1RTIG9mZikK KyBTRUxFQ1QgKiBGUk9NIG1jdl9saXN0IFdIRVJFIGEgSVMgTlVMTCBBTkQg YiBJUyBOVUxMOworCitEUk9QIFRBQkxFIG1jdl9saXN0OworCistLSBOVUxM IHZhbHVlcyAobWl4IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRF IFRBQkxFIG1jdl9saXN0ICgKKyAgICBhIElOVCwKKyAgICBiIFRFWFQsCisg ICAgYyBJTlQsCisgICAgZCBURVhUCispOworCitDUkVBVEUgU1RBVElTVElD UyBzMyBPTiBtY3ZfbGlzdCAoYSwgYiwgYywgZCkgV0lUSCAobWN2KTsKKwor SU5TRVJUIElOVE8gbWN2X2xpc3QKKyAgICAgU0VMRUNUCisgICAgICAgICBt b2QoaSwgMTAwKSwKKyAgICAgICAgIChDQVNFIFdIRU4gbW9kKGksIDIwMCkg PSAwIFRIRU4gTlVMTCBFTFNFIG1vZChpLDIwMCkgRU5EKSwKKyAgICAgICAg IG1vZChpLCA0MDApLAorICAgICAgICAgKENBU0UgV0hFTiBtb2QoaSwgMzAw KSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksNjAwKSBFTkQpCisgICAgIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUg bWN2X2xpc3Q7CisKK1NFTEVDVCBtY3ZfZW5hYmxlZCwgbWN2X2J1aWx0LCBw Z19tdl9zdGF0c19tY3ZsaXN0X2luZm8oc3RhbWN2KQorICBGUk9NIHBnX212 X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtY3ZfbGlzdCc6OnJlZ2Ns YXNzOworCitEUk9QIFRBQkxFIG1jdl9saXN0OwotLSAKMi4xLjAKCg== --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename="0005-multivariate-histograms.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0005-multivariate-histograms.patch"; charset="UTF-8" RnJvbSAzMWZmNmNkMzY3MjdkNzNlNzJhYWE1ZmExYTBjNTJkYTQ2MGRhZTVi IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHR2QGZ1enp5LmN6PgpEYXRlOiBTdW4sIDExIEphbiAyMDE1IDIwOjE4OjI0 ICswMTAwClN1YmplY3Q6IFtQQVRDSCA1LzldIG11bHRpdmFyaWF0ZSBoaXN0 b2dyYW1zCgotIGV4dGVuZHMgdGhlIHBnX212X3N0YXRpc3RpYyBjYXRhbG9n IChhZGQgJ2hpc3QnIGZpZWxkcykKLSBidWlsZGluZyB0aGUgaGlzdG9ncmFt cyBkdXJpbmcgQU5BTFlaRQotIHNpbXBsZSBlc3RpbWF0aW9uIHdoaWxlIHBs YW5uaW5nIHRoZSBxdWVyaWVzCgpJbmNsdWRlcyByZWdyZXNzaW9uIHRlc3Rz IG1vc3RseSBlcXVhbCB0byB0aG9zZSBmb3IgZnVuY3Rpb25hbApkZXBlbmRl bmNpZXMgLyBNQ1YgbGlzdHMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sICAgIHwgICAxOCArCiBzcmMvYmFja2VuZC9j YXRhbG9nL3N5c3RlbV92aWV3cy5zcWwgICAgICAgfCAgICA0ICstCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAgICAgICAgICAgfCAgIDQ0 ICstCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAg ICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVz ZXNlbC5jICAgICB8ICA1NzEgKysrKysrKy0KIHNyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYyAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUgICAgICAgICB8ICAgIDIgKy0K IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLmhpc3RvZ3JhbSB8 ICAyODcgKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUu c3RhdHMgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2NvbW1vbi5jICAgICAgICAgfCAgIDM3ICstCiBzcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL2hpc3RvZ3JhbS5jICAgICAgfCAyMDMyICsrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAg ICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfbXZfc3RhdGlzdGljLmggICAgICB8ICAgMjQgKy0KIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5oICAgICAgICAgICAgICB8ICAgIDQgKwog c3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCAgICAgICAgICAgICAgIHwg ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9tdnN0YXRzLmggICAgICAgICAg ICAgICAgfCAgMTM2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212 X2hpc3RvZ3JhbS5vdXQgfCAgMjA3ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgICAgNCArLQogc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAgIHwgICAgMiArLQog c3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUgICAgICAgICAgIHwg ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9tdl9oaXN0b2dyYW0uc3Fs ICAgICAgfCAgMTc2ICsrKwogMjEgZmlsZXMgY2hhbmdlZCwgMzUzOCBpbnNl cnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5oaXN0b2dyYW0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRz L2hpc3RvZ3JhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9tdl9oaXN0b2dyYW0ub3V0CiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvbXZfaGlzdG9ncmFtLnNxbAoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3Rp Y3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Mu c2dtbAppbmRleCAxOTNlNGIwLi5mZDMzODJlIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfc3RhdGlzdGljcy5zZ21sCkBAIC0xMzMs NiArMTMzLDI0IEBAIENSRUFURSBTVEFUSVNUSUNTIFsgSUYgTk9UIEVYSVNU UyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNz X25hCiAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgPHZhcmxpc3RlbnRyeT4K KyAgICA8dGVybT48bGl0ZXJhbD5oaXN0b2dyYW08Lz4gKDx0eXBlPmJvb2xl YW48Lz4pPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+Cisg ICAgICBFbmFibGVzIGhpc3RvZ3JhbSBmb3IgdGhlIHN0YXRpc3RpY3MuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+PGxpdGVyYWw+ bWF4X2J1Y2tldHM8Lz4gKDx0eXBlPmludGVnZXI8Lz4pPC90ZXJtPgorICAg IDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVtIG51bWJl ciBvZiBoaXN0b2dyYW0gYnVja2V0cy4KKyAgICAgPC9wYXJhPgorICAgIDwv bGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KICAgICA8dGVybT48bGl0ZXJhbD5tYXhfbWN2X2l0ZW1zPC8+ICg8 dHlwZT5pbnRlZ2VyPC8+KTwvdGVybT4KICAgICA8bGlzdGl0ZW0+CiAgICAg IDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmll d3Muc3FsCmluZGV4IDJkNTcwZWUuLjZhZmRlZTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAorKysgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKQEAgLTE2Nyw3ICsx NjcsOSBAQCBDUkVBVEUgVklFVyBwZ19tdl9zdGF0cyBBUwogICAgICAgICBs ZW5ndGgoUy5zdGFkZXBzKSBhcyBkZXBzYnl0ZXMsCiAgICAgICAgIHBnX212 X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKFMuc3RhZGVwcykgYXMgZGVwc2lu Zm8sCiAgICAgICAgIGxlbmd0aChTLnN0YW1jdikgQVMgbWN2Ynl0ZXMsCi0g ICAgICAgIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbyhTLnN0YW1jdikgQVMg bWN2aW5mbworICAgICAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8oUy5z dGFtY3YpIEFTIG1jdmluZm8sCisgICAgICAgIGxlbmd0aChTLnN0YWhpc3Qp IEFTIGhpc3RieXRlcywKKyAgICAgICAgcGdfbXZfc3RhdHNfaGlzdG9ncmFt X2luZm8oUy5zdGFoaXN0KSBBUyBoaXN0aW5mbwogICAgIEZST00gKHBnX212 X3N0YXRpc3RpYyBTIEpPSU4gcGdfY2xhc3MgQyBPTiAoQy5vaWQgPSBTLnN0 YXJlbGlkKSkKICAgICAgICAgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBOIE9O IChOLm9pZCA9IEMucmVsbmFtZXNwYWNlKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9zdGF0c2NtZHMuYwppbmRleCA5MGJmYWVkLi5iOTc0NjU1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwpAQCAtMTM3 LDEyICsxMzcsMTUgQEAgQ3JlYXRlU3RhdGlzdGljcyhDcmVhdGVTdGF0c1N0 bXQgKnN0bXQpCiAKIAkvKiBieSBkZWZhdWx0IGJ1aWxkIG5vdGhpbmcgKi8K IAlib29sIAlidWlsZF9kZXBlbmRlbmNpZXMgPSBmYWxzZSwKLQkJCWJ1aWxk X21jdiA9IGZhbHNlOworCQkJYnVpbGRfbWN2ID0gZmFsc2UsCisJCQlidWls ZF9oaXN0b2dyYW0gPSBmYWxzZTsKIAotCWludDMyIAltYXhfbWN2X2l0ZW1z ID0gLTE7CisJaW50MzIgCW1heF9idWNrZXRzID0gLTEsCisJCQltYXhfbWN2 X2l0ZW1zID0gLTE7CiAKIAkvKiBvcHRpb25zIHJlcXVpcmVkIGJlY2F1c2Ug b2Ygb3RoZXIgb3B0aW9ucyAqLwotCWJvb2wJcmVxdWlyZV9tY3YgPSBmYWxz ZTsKKwlib29sCXJlcXVpcmVfbWN2ID0gZmFsc2UsCisJCQlyZXF1aXJlX2hp c3RvZ3JhbSA9IGZhbHNlOwogCiAJQXNzZXJ0KElzQShzdG10LCBDcmVhdGVT dGF0c1N0bXQpKTsKIApAQCAtMjQxLDYgKzI0NCwyOSBAQCBDcmVhdGVTdGF0 aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkKIAkJCQkJCQkJTVZTVEFU X01DVkxJU1RfTUFYX0lURU1TKSkpOwogCiAJCX0KKwkJZWxzZSBpZiAoc3Ry Y21wKG9wdC0+ZGVmbmFtZSwgImhpc3RvZ3JhbSIpID09IDApCisJCQlidWls ZF9oaXN0b2dyYW0gPSBkZWZHZXRCb29sZWFuKG9wdCk7CisJCWVsc2UgaWYg KHN0cmNtcChvcHQtPmRlZm5hbWUsICJtYXhfYnVja2V0cyIpID09IDApCisJ CXsKKwkJCW1heF9idWNrZXRzID0gZGVmR2V0SW50MzIob3B0KTsKKworCQkJ LyogdGhpcyBvcHRpb24gcmVxdWlyZXMgJ2hpc3RvZ3JhbScgdG8gYmUgZW5h YmxlZCAqLworCQkJcmVxdWlyZV9oaXN0b2dyYW0gPSB0cnVlOworCisJCQkv KiBzYW5pdHkgY2hlY2sgKi8KKwkJCWlmIChtYXhfYnVja2V0cyA8IE1WU1RB VF9ISVNUX01JTl9CVUNLRVRTKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJy bXNnKCJtaW5pbXVtIG51bWJlciBvZiBidWNrZXRzIGlzICVkIiwKKwkJCQkJ CQkJTVZTVEFUX0hJU1RfTUlOX0JVQ0tFVFMpKSk7CisKKwkJCWVsc2UgaWYg KG1heF9idWNrZXRzID4gTVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFY X0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coIm1heGltdW0gbnVtYmVyIG9mIGJ1 Y2tldHMgaXMgJWQiLAorCQkJCQkJCQlNVlNUQVRfSElTVF9NQVhfQlVDS0VU UykpKTsKKworCQl9CiAJCWVsc2UKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTI0OSwxMCAr Mjc1LDEwIEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3JlYXRlU3RhdHNTdG10ICpz dG10KQogCX0KIAogCS8qIGNoZWNrIHRoYXQgYXQgbGVhc3Qgc29tZSBzdGF0 aXN0aWNzIHdlcmUgcmVxdWVzdGVkICovCi0JaWYgKCEgKGJ1aWxkX2RlcGVu ZGVuY2llcyB8fCBidWlsZF9tY3YpKQorCWlmICghIChidWlsZF9kZXBlbmRl bmNpZXMgfHwgYnVpbGRfbWN2IHx8IGJ1aWxkX2hpc3RvZ3JhbSkpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJS T1IpLAotCQkJCSBlcnJtc2coIm5vIHN0YXRpc3RpY3MgdHlwZSAoZGVwZW5k ZW5jaWVzLCBtY3YpIHdhcyByZXF1ZXN0ZWQiKSkpOworCQkJCSBlcnJtc2co Im5vIHN0YXRpc3RpY3MgdHlwZSAoZGVwZW5kZW5jaWVzLCBtY3YsIGhpc3Rv Z3JhbSkgd2FzIHJlcXVlc3RlZCIpKSk7CiAKIAkvKiBub3cgZG8gc29tZSBj aGVja2luZyBvZiB0aGUgb3B0aW9ucyAqLwogCWlmIChyZXF1aXJlX21jdiAm JiAoISBidWlsZF9tY3YpKQpAQCAtMjYwLDYgKzI4NiwxMSBAQCBDcmVhdGVT dGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkKIAkJCQkoZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJIGVycm1zZygib3B0aW9u ICdtY3YnIGlzIHJlcXVpcmVkIGJ5IG90aGVyIG9wdGlvbnMocykiKSkpOwog CisJaWYgKHJlcXVpcmVfaGlzdG9ncmFtICYmICghIGJ1aWxkX2hpc3RvZ3Jh bSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAorCQkJCSBlcnJtc2coIm9wdGlvbiAnaGlzdG9ncmFt JyBpcyByZXF1aXJlZCBieSBvdGhlciBvcHRpb25zKHMpIikpKTsKKwogCS8q IHNvcnQgdGhlIGF0dG51bXMgYW5kIGJ1aWxkIGludDJ2ZWN0b3IgKi8KIAlx c29ydChhdHRudW1zLCBudW1jb2xzLCBzaXplb2YoaW50MTYpLCBjb21wYXJl X2ludDE2KTsKIAlzdGFrZXlzID0gYnVpbGRpbnQydmVjdG9yKGF0dG51bXMs IG51bWNvbHMpOwpAQCAtMjc5LDExICszMTAsMTQgQEAgQ3JlYXRlU3RhdGlz dGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAKIAl2YWx1ZXNbQW51bV9w Z19tdl9zdGF0aXN0aWNfZGVwc19lbmFibGVkIC0xXSA9IEJvb2xHZXREYXR1 bShidWlsZF9kZXBlbmRlbmNpZXMpOwogCXZhbHVlc1tBbnVtX3BnX212X3N0 YXRpc3RpY19tY3ZfZW5hYmxlZCAgLTFdID0gQm9vbEdldERhdHVtKGJ1aWxk X21jdik7CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfZW5h YmxlZCAtMV0gPSBCb29sR2V0RGF0dW0oYnVpbGRfaGlzdG9ncmFtKTsKIAog CXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19tY3ZfbWF4X2l0ZW1zICAg IC0xXSA9IEludDMyR2V0RGF0dW0obWF4X21jdl9pdGVtcyk7CisJdmFsdWVz W0FudW1fcGdfbXZfc3RhdGlzdGljX2hpc3RfbWF4X2J1Y2tldHMgLTFdID0g SW50MzJHZXREYXR1bShtYXhfYnVja2V0cyk7CiAKIAludWxsc1tBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFkZXBzICAtMV0gPSB0cnVlOwogCW51bGxzW0Fu dW1fcGdfbXZfc3RhdGlzdGljX3N0YW1jdiAgIC0xXSA9IHRydWU7CisJbnVs bHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhaGlzdCAgLTFdID0gdHJ1ZTsK IAogCS8qIGluc2VydCB0aGUgdHVwbGUgaW50byBwZ19tdl9zdGF0aXN0aWMg Ki8KIAltdnN0YXRyZWwgPSBoZWFwX29wZW4oTXZTdGF0aXN0aWNSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL25vZGVzL291dGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRm dW5jcy5jCmluZGV4IGUzOTgzZmQuLmQzYTk2ZjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv bm9kZXMvb3V0ZnVuY3MuYwpAQCAtMTk3OCwxMCArMTk3OCwxMiBAQCBfb3V0 TVZTdGF0aXN0aWNJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBNVlN0YXRp c3RpY0luZm8gKm5vZGUpCiAJLyogZW5hYmxlZCBzdGF0aXN0aWNzICovCiAJ V1JJVEVfQk9PTF9GSUVMRChkZXBzX2VuYWJsZWQpOwogCVdSSVRFX0JPT0xf RklFTEQobWN2X2VuYWJsZWQpOworCVdSSVRFX0JPT0xfRklFTEQoaGlzdF9l bmFibGVkKTsKIAogCS8qIGJ1aWx0L2F2YWlsYWJsZSBzdGF0aXN0aWNzICov CiAJV1JJVEVfQk9PTF9GSUVMRChkZXBzX2J1aWx0KTsKIAlXUklURV9CT09M X0ZJRUxEKG1jdl9idWlsdCk7CisJV1JJVEVfQk9PTF9GSUVMRChoaXN0X2J1 aWx0KTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKaW5kZXggOTc3Zjg4ZS4uMGRl MjQxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y2xhdXNlc2VsLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y2xhdXNlc2VsLmMKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RhdGljIHZvaWQgYWRk UmFuZ2VDbGF1c2UoUmFuZ2VRdWVyeUNsYXVzZSAqKnJxbGlzdCwgTm9kZSAq Y2xhdXNlLAogCiAjZGVmaW5lCQlNVl9DTEFVU0VfVFlQRV9GREVQCQkweDAx CiAjZGVmaW5lCQlNVl9DTEFVU0VfVFlQRV9NQ1YJCTB4MDIKKyNkZWZpbmUJ CU1WX0NMQVVTRV9UWVBFX0hJU1QJCTB4MDQKIAogc3RhdGljIGJvb2wgY2xh dXNlX2lzX212X2NvbXBhdGlibGUoTm9kZSAqY2xhdXNlLCBJbmRleCByZWxp ZCwgQml0bWFwc2V0ICoqYXR0bnVtcywKIAkJCQkJCQkgaW50IHR5cGUpOwpA QCAtNzQsNiArNzUsOCBAQCBzdGF0aWMgU2VsZWN0aXZpdHkgY2xhdXNlbGlz dF9tdl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIHN0YXRpYyBT ZWxlY3Rpdml0eSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X21jdmxpc3Qo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQlMaXN0ICpjbGF1c2VzLCBN VlN0YXRpc3RpY0luZm8gKm12c3RhdHMsCiAJCQkJCQkJCQlib29sICpmdWxs bWF0Y2gsIFNlbGVjdGl2aXR5ICpsb3dzZWwpOworc3RhdGljIFNlbGVjdGl2 aXR5IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKFBsYW5u ZXJJbmZvICpyb290LAorCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywgTVZTdGF0 aXN0aWNJbmZvICptdnN0YXRzKTsKIAogc3RhdGljIGludCB1cGRhdGVfbWF0 Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNs YXVzZXMsCiAJCQkJCQkJCQlpbnQydmVjdG9yICpzdGFrZXlzLCBNQ1ZMaXN0 IG1jdmxpc3QsCkBAIC04MSw2ICs4NCwxMiBAQCBzdGF0aWMgaW50IHVwZGF0 ZV9tYXRjaF9iaXRtYXBfbWN2bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlz dCAqY2xhdXNlcywKIAkJCQkJCQkJCVNlbGVjdGl2aXR5ICpsb3dzZWwsIGJv b2wgKmZ1bGxtYXRjaCwKIAkJCQkJCQkJCWJvb2wgaXNfb3IpOwogCitzdGF0 aWMgaW50IHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJCQkJaW50MnZlY3Rv ciAqc3Rha2V5cywKKwkJCQkJCQkJCU1WU2VyaWFsaXplZEhpc3RvZ3JhbSBt dmhpc3QsCisJCQkJCQkJCQlpbnQgbm1hdGNoZXMsIGNoYXIgKiBtYXRjaGVz LAorCQkJCQkJCQkJYm9vbCBpc19vcik7CisKIHN0YXRpYyBib29sIGhhc19z dGF0cyhMaXN0ICpzdGF0cywgaW50IHR5cGUpOwogCiBzdGF0aWMgTGlzdCAq IGZpbmRfc3RhdHMoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJlbGlkKTsK QEAgLTkzLDYgKzEwMiw3IEBAIHN0YXRpYyBMaXN0ICogZmluZF9zdGF0cyhQ bGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpOwogI2RlZmluZSBVUERB VEVfUkVTVUxUKG0scixpc29yKQlcCiAJKG0pID0gKGlzb3IpID8gKE1BWCht LHIpKSA6IChNSU4obSxyKSkKIAorCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgogICoJCVJPVVRJTkVTIFRPIENPTVBVVEUgU0VMRUNUSVZJ VElFUwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0x MjEsNyArMTMxLDcgQEAgc3RhdGljIExpc3QgKiBmaW5kX3N0YXRzKFBsYW5u ZXJJbmZvICpyb290LCBJbmRleCByZWxpZCk7CiAgKgogICogRmlyc3Qgd2Ug dHJ5IHRvIHJlZHVjZSB0aGUgbGlzdCBvZiBjbGF1c2VzIGJ5IGFwcGx5aW5n IChzb2Z0KSBmdW5jdGlvbmFsCiAgKiBkZXBlbmRlbmNpZXMsIGFuZCB0aGVu IHdlIHRyeSB0byBlc3RpbWF0ZSB0aGUgc2VsZWN0aXZpdHkgb2YgdGhlIHJl ZHVjZWQKLSAqIGxpc3Qgb2YgY2xhdXNlcyB1c2luZyB0aGUgbXVsdGl2YXJp YXRlIE1DViBsaXN0LgorICogbGlzdCBvZiBjbGF1c2VzIHVzaW5nIHRoZSBt dWx0aXZhcmlhdGUgTUNWIGxpc3QgYW5kIGhpc3RvZ3JhbXMuCiAgKgogICog RmluYWxseSB3ZSByZW1vdmUgdGhlIHBvcnRpb24gb2YgY2xhdXNlcyBlc3Rp bWF0ZWQgdXNpbmcgbXVsdGl2YXJpYXRlIHN0YXRzLAogICogYW5kIHByb2Nl c3MgdGhlIHJlc3Qgb2YgdGhlIGNsYXVzZXMgdXNpbmcgdGhlIHJlZ3VsYXIg cGVyLWNvbHVtbiBzdGF0cy4KQEAgLTIxNCwxMSArMjI0LDEzIEBAIGNsYXVz ZWxpc3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJICogd2l0 aCB0aGUgbXVsdGl2YXJpYXRlIGNvZGUgYW5kIHNpbXBseSBza2lwIHRvIGVz dGltYXRpb24gdXNpbmcgdGhlCiAJICogcmVndWxhciBwZXItY29sdW1uIHN0 YXRzLgogCSAqLwotCWlmIChoYXNfc3RhdHMoc3RhdHMsIE1WX0NMQVVTRV9U WVBFX01DVikgJiYKLQkJKGNvdW50X212X2F0dG51bXMoY2xhdXNlcywgcmVs aWQsIE1WX0NMQVVTRV9UWVBFX01DVikgPj0gMikpCisJaWYgKGhhc19zdGF0 cyhzdGF0cywgTVZfQ0xBVVNFX1RZUEVfTUNWIHwgTVZfQ0xBVVNFX1RZUEVf SElTVCkgJiYKKwkJKGNvdW50X212X2F0dG51bXMoY2xhdXNlcywgcmVsaWQs CisJCQkJCQkgIE1WX0NMQVVTRV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBF X0hJU1QpID49IDIpKQogCXsKIAkJLyogY29sbGVjdCBhdHRyaWJ1dGVzIGZy b20gdGhlIGNvbXBhdGlibGUgY29uZGl0aW9ucyAqLwotCQlCaXRtYXBzZXQg Km12YXR0bnVtcyA9IGNvbGxlY3RfbXZfYXR0bnVtcyhjbGF1c2VzLCByZWxp ZCwgTVZfQ0xBVVNFX1RZUEVfTUNWKTsKKwkJQml0bWFwc2V0ICptdmF0dG51 bXMgPSBjb2xsZWN0X212X2F0dG51bXMoY2xhdXNlcywgcmVsaWQsCisJCQkJ CQkJCQkJCU1WX0NMQVVTRV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBFX0hJ U1QpOwogCiAJCS8qIGFuZCBzZWFyY2ggZm9yIHRoZSBzdGF0aXN0aWMgY292 ZXJpbmcgdGhlIG1vc3QgYXR0cmlidXRlcyAqLwogCQlNVlN0YXRpc3RpY0lu Zm8gKm12c3RhdCA9IGNob29zZV9tdl9zdGF0aXN0aWNzKHN0YXRzLCBtdmF0 dG51bXMpOwpAQCAtMjMwLDcgKzI0Miw3IEBAIGNsYXVzZWxpc3Rfc2VsZWN0 aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAKIAkJCS8qIHNwbGl0IHRoZSBj bGF1c2VsaXN0IGludG8gcmVndWxhciBhbmQgbXYtY2xhdXNlcyAqLwogCQkJ Y2xhdXNlcyA9IGNsYXVzZWxpc3RfbXZfc3BsaXQocm9vdCwgcmVsaWQsIGNs YXVzZXMsICZtdmNsYXVzZXMsCi0JCQkJCQkJCQkJICBtdnN0YXQsIE1WX0NM QVVTRV9UWVBFX01DVik7CisJCQkJCQkJCQkJICBtdnN0YXQsIE1WX0NMQVVT RV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBFX0hJU1QpOwogCiAJCQkvKiB3 ZSd2ZSBjaG9zZW4gdGhlIGhpc3RvZ3JhbSB0byBtYXRjaCB0aGUgY2xhdXNl cyAqLwogCQkJQXNzZXJ0KG12Y2xhdXNlcyAhPSBOSUwpOwpAQCAtOTQyLDYg Kzk1NCw3IEBAIHN0YXRpYyBTZWxlY3Rpdml0eQogY2xhdXNlbGlzdF9tdl9z ZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywg TVZTdGF0aXN0aWNJbmZvICptdnN0YXRzKQogewogCWJvb2wgZnVsbG1hdGNo ID0gZmFsc2U7CisJU2VsZWN0aXZpdHkgczEgPSAwLjAsIHMyID0gMC4wOwog CiAJLyoKIAkgKiBMb3dlc3QgZnJlcXVlbmN5IGluIHRoZSBNQ1YgbGlzdCAo bWF5IGJlIHVzZWQgYXMgYW4gdXBwZXIgYm91bmQKQEAgLTk1NSw5ICs5Njgs MjQgQEAgY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAq cm9vdCwgTGlzdCAqY2xhdXNlcywgTVZTdGF0aXN0aWNJbmZvICptdnMKIAkg KiAgICAgIE1DVi9oaXN0b2dyYW0gZXZhbHVhdGlvbikuCiAJICovCiAKLQkv KiBFdmFsdWF0ZSB0aGUgTUNWIHNlbGVjdGl2aXR5ICovCi0JcmV0dXJuIGNs YXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfbWN2bGlzdChyb290LCBjbGF1c2Vz LCBtdnN0YXRzLAorCS8qIEV2YWx1YXRlIHRoZSBNQ1YgZmlyc3QuICovCisJ czEgPSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X21jdmxpc3Qocm9vdCwg Y2xhdXNlcywgbXZzdGF0cywKIAkJCQkJCQkJCQkgICAmZnVsbG1hdGNoLCAm bWN2X2xvdyk7CisKKwkvKgorCSAqIElmIHdlIGdvdCBhIGZ1bGwgZXF1YWxp dHkgbWF0Y2ggb24gdGhlIE1DViBsaXN0LCB3ZSdyZSBkb25lIChhbmQKKwkg KiB0aGUgZXN0aW1hdGUgaXMgcHJldHR5IGdvb2QpLgorCSAqLworCWlmIChm dWxsbWF0Y2ggJiYgKHMxID4gMC4wKSkKKwkJcmV0dXJuIHMxOworCisJLyog VE9ETyBpZiAoZnVsbG1hdGNoKSB3aXRob3V0IG1hdGNoaW5nIE1DViBpdGVt LCB1c2UgdGhlIG1jdl9sb3cKKwkgKiAgICAgIHNlbGVjdGl2aXR5IGFzIHVw cGVyIGJvdW5kICovCisKKwlzMiA9IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZp dHlfaGlzdG9ncmFtKHJvb3QsIGNsYXVzZXMsIG12c3RhdHMpOworCisJLyog VE9ETyBjbGFtcCB0byA8PSAxLjAgKG9yIG1vcmUgc3RyaWN0bHksIHdoZW4g cG9zc2libGUpICovCisJcmV0dXJuIHMxICsgczI7CiB9CiAKIC8qCkBAIC0x MTYwLDcgKzExODgsNyBAQCBjaG9vc2VfbXZfc3RhdGlzdGljcyhMaXN0ICpz dGF0cywgQml0bWFwc2V0ICphdHRudW1zKQogCQlpbnQJbnVtYXR0cnMgPSBh dHRycy0+ZGltMTsKIAogCQkvKiBza2lwIGRlcGVuZGVuY2llcy1vbmx5IHN0 YXRzICovCi0JCWlmICghIGluZm8tPm1jdl9idWlsdCkKKwkJaWYgKCEgKGlu Zm8tPm1jdl9idWlsdCB8fCBpbmZvLT5oaXN0X2J1aWx0KSkKIAkJCWNvbnRp bnVlOwogCiAJCS8qIGNvdW50IGNvbHVtbnMgY292ZXJlZCBieSB0aGUgaGlz dG9ncmFtICovCkBAIC0xMzkxLDcgKzE0MTksNyBAQCBtdl9jb21wYXRpYmxl X3dhbGtlcihOb2RlICpub2RlLCBtdl9jb21wYXRpYmxlX2NvbnRleHQgKmNv bnRleHQpCiAJCQljYXNlIEZfU0NBTEFSR1RTRUw6CiAKIAkJCQkvKiBub3Qg Y29tcGF0aWJsZSB3aXRoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzICovCi0J CQkJaWYgKCEgKGNvbnRleHQtPnR5cGVzICYgTVZfQ0xBVVNFX1RZUEVfTUNW KSkKKwkJCQlpZiAoISAoY29udGV4dC0+dHlwZXMgJiAoTVZfQ0xBVVNFX1RZ UEVfTUNWIHwgTVZfQ0xBVVNFX1RZUEVfSElTVCkpKQogCQkJCQlyZXR1cm4g dHJ1ZTsJLyogdGVybWluYXRlICovCiAgCiAJCQkJYnJlYWs7CkBAIC0yMDA3 LDYgKzIwMzUsOSBAQCBoYXNfc3RhdHMoTGlzdCAqc3RhdHMsIGludCB0eXBl KQogCiAJCWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX01DVikgJiYgc3Rh dC0+bWN2X2J1aWx0KQogCQkJcmV0dXJuIHRydWU7CisKKwkJaWYgKCh0eXBl ICYgTVZfQ0xBVVNFX1RZUEVfSElTVCkgJiYgc3RhdC0+aGlzdF9idWlsdCkK KwkJCXJldHVybiB0cnVlOwogCX0KIAogCXJldHVybiBmYWxzZTsKQEAgLTI0 MTEsMyArMjQ0Miw1MjUgQEAgdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCiAJcmV0dXJu IG5tYXRjaGVzOwogfQorCisvKgorICogRXN0aW1hdGUgc2VsZWN0aXZpdHkg b2YgY2xhdXNlcyB1c2luZyBhIGhpc3RvZ3JhbS4KKyAqCisgKiBJZiB0aGVy ZSdzIG5vIGhpc3RvZ3JhbSBmb3IgdGhlIHN0YXRzLCB0aGUgZnVuY3Rpb24g cmV0dXJucyAwLjAuCisgKgorICogVGhlIGdlbmVyYWwgaWRlYSBvZiB0aGlz IG1ldGhvZCBpcyBzaW1pbGFyIHRvIGhvdyBNQ1YgbGlzdHMgYXJlCisgKiBw cm9jZXNzZWQsIGV4Y2VwdCB0aGF0IHRoaXMgaW50cm9kdWNlcyB0aGUgY29u Y2VwdCBvZiBhIHBhcnRpYWwKKyAqIG1hdGNoIChNQ1Ygb25seSB3b3JrcyB3 aXRoIGZ1bGwgbWF0Y2ggLyBtaXNtYXRjaCkuCisgKgorICogVGhlIGFsZ29y aXRobSB3b3JrcyBsaWtlIHRoaXM6CisgKgorICogICAxKSBtYXJrIGFsbCBi dWNrZXRzIGFzICdmdWxsIG1hdGNoJworICogICAyKSB3YWxrIHRocm91Z2gg YWxsIHRoZSBjbGF1c2VzCisgKiAgIDMpIGZvciBhIHBhcnRpY3VsYXIgY2xh dXNlLCB3YWxrIHRocm91Z2ggYWxsIHRoZSBidWNrZXRzCisgKiAgIDQpIHNr aXAgYnVja2V0cyB0aGF0IGFyZSBhbHJlYWR5ICdubyBtYXRjaCcKKyAqICAg NSkgY2hlY2sgY2xhdXNlIGZvciBidWNrZXRzIHRoYXQgc3RpbGwgbWF0Y2gg KGF0IGxlYXN0IHBhcnRpYWxseSkKKyAqICAgNikgc3VtIGZyZXF1ZW5jaWVz IGZvciBidWNrZXRzIHRvIGdldCBzZWxlY3Rpdml0eQorICoKKyAqIFVubGlr ZSBNQ1YgbGlzdHMsIGhpc3RvZ3JhbXMgaGF2ZSBhIGNvbmNlcHQgb2YgYSBw YXJ0aWFsIG1hdGNoLiBJbgorICogdGhhdCBjYXNlIHdlIHVzZSAxLzIgdGhl IGJ1Y2tldCwgdG8gbWluaW1pemUgdGhlIGF2ZXJhZ2UgZXJyb3IuIFRoZQor ICogTVYgaGlzdG9ncmFtcyBhcmUgdXN1YWxseSBsZXNzIGRldGFpbGVkIHRo YW4gdGhlIHBlci1jb2x1bW4gb25lcywKKyAqIG1lYW5pbmcgdGhlIHN1bSBp cyBvZnRlbiBxdWl0ZSBoaWdoICh0aGFua3MgdG8gY29tYmluaW5nIGEgbG90 IG9mCisgKiAicGFydGlhbGx5IGhpdCIgYnVja2V0cykuCisgKgorICogTWF5 YmUgd2UgY291bGQgdXNlIHBlci1idWNrZXQgaW5mb3JtYXRpb24gd2l0aCBu dW1iZXIgb2YgZGlzdGluY3QKKyAqIHZhbHVlcyBpdCBjb250YWlucyAoZm9y IGVhY2ggZGltZW5zaW9uKSwgYW5kIHRoZW4gdXNlIHRoYXQgdG8gY29ycmVj dAorICogdGhlIGVzdGltYXRlIChzbyB3aXRoIDEwIGRpc3RpbmN0IHZhbHVl cywgd2UnZCB1c2UgMS8xMCBvZiB0aGUgYnVja2V0CisgKiBmcmVxdWVuY3kp LiBXZSBtaWdodCBhbHNvIHNjYWxlIHRoZSB2YWx1ZSBkZXBlbmRpbmcgb24g dGhlIGFjdHVhbAorICogbmRpc3RpbmN0IGVzdGltYXRlIChub3QganVzdCB0 aGUgdmFsdWVzIG9ic2VydmVkIGluIHRoZSBzYW1wbGUpLgorICoKKyAqIEFu b3RoZXIgb3B0aW9uIHdvdWxkIGJlIHRvIG11bHRpcGx5IHRoZSBzZWxlY3Rp dml0aWVzLCBpLmUuIGlmIHdlIGdldAorICogJ3BhcnRpYWwgbWF0Y2gnIGZv ciBhIGJ1Y2tldCBmb3IgbXVsdGlwbGUgY29uZGl0aW9ucywgd2UgbWlnaHQg dXNlCisgKiAwLjVeayAod2hlcmUgayBpcyB0aGUgbnVtYmVyIG9mIGNvbmRp dGlvbnMpLCBpbnN0ZWFkIG9mIDAuNS4gVGhpcworICogcHJvYmFibHkgZG9l cyBub3QgbWluaW1pemUgdGhlIGF2ZXJhZ2UgZXJyb3IsIHRob3VnaC4KKyAq CisgKiBUT0RPIFRoaXMgbWlnaHQgdXNlIGEgc2ltaWxhciBzaG9ydGN1dCB0 byBNQ1YgbGlzdHMgLSBjb3VudCBidWNrZXRzCisgKiAgICAgIG1hcmtlZCBh cyBwYXJ0aWFsL2Z1bGwgbWF0Y2gsIGFuZCB0ZXJtaW5hdGUgb25jZSB0aGlz IGRyb3AgdG8gMC4KKyAqICAgICAgTm90IHN1cmUgaWYgaXQncyByZWFsbHkg d29ydGggaXQgLSBmb3IgTUNWIGxpc3RzIGEgc2l0dWF0aW9uIGxpa2UKKyAq ICAgICAgdGhpcyBpcyBub3QgdW5jb21tb24sIGJ1dCBmb3IgaGlzdG9ncmFt cyBpdCdzIG5vdCB0aGF0IGNsZWFyLgorICovCitzdGF0aWMgU2VsZWN0aXZp dHkKK2NsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAorCQkJCQkJCQkJTVZTdGF0 aXN0aWNJbmZvICptdnN0YXRzKQoreworCWludCBpOworCVNlbGVjdGl2aXR5 IHMgPSAwLjA7CisJU2VsZWN0aXZpdHkgdSA9IDAuMDsKKworCWludAkJbm1h dGNoZXMgPSAwOworCWNoYXIgICAqbWF0Y2hlcyA9IE5VTEw7CisKKwlNVlNl cmlhbGl6ZWRIaXN0b2dyYW0gbXZoaXN0ID0gTlVMTDsKKworCS8qIHRoZXJl J3Mgbm8gaGlzdG9ncmFtICovCisJaWYgKCEgbXZzdGF0cy0+aGlzdF9idWls dCkKKwkJcmV0dXJuIDAuMDsKKworCS8qIFRoZXJlIG1heSBiZSBubyBoaXN0 b2dyYW0gaW4gdGhlIHN0YXRzIChjaGVjayBoaXN0X2J1aWx0IGZsYWcpICov CisJbXZoaXN0ID0gbG9hZF9tdl9oaXN0b2dyYW0obXZzdGF0cy0+bXZvaWQp OworCisJQXNzZXJ0IChtdmhpc3QgIT0gTlVMTCk7CisJQXNzZXJ0IChjbGF1 c2VzICE9IE5JTCk7CisJQXNzZXJ0IChsaXN0X2xlbmd0aChjbGF1c2VzKSA+ PSAyKTsKKworCS8qCisJICogQml0bWFwIG9mIGJ1Y2tldCBtYXRjaGVzICht aXNtYXRjaCwgcGFydGlhbCwgZnVsbCkuIGJ5IGRlZmF1bHQKKwkgKiBhbGwg YnVja2V0cyBmdWxseSBtYXRjaCAoYW5kIHdlJ2xsIGVsaW1pbmF0ZSB0aGVt KS4KKwkgKi8KKwltYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBt dmhpc3QtPm5idWNrZXRzKTsKKwltZW1zZXQobWF0Y2hlcywgIE1WU1RBVFNf TUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIpKm12aGlzdC0+bmJ1Y2tldHMpOwor CisJbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNrZXRzOworCisJLyogYnVpbGQg dGhlIG1hdGNoIGJpdG1hcCAqLworCXVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlz dG9ncmFtKHJvb3QsIGNsYXVzZXMsCisJCQkJCQkJCSAgbXZzdGF0cy0+c3Rh a2V5cywgbXZoaXN0LAorCQkJCQkJCQkgIG5tYXRjaGVzLCBtYXRjaGVzLCBm YWxzZSk7CisKKwkvKiBub3csIHdhbGsgdGhyb3VnaCB0aGUgYnVja2V0cyBh bmQgc3VtIHRoZSBzZWxlY3Rpdml0aWVzICovCisJZm9yIChpID0gMDsgaSA8 IG12aGlzdC0+bmJ1Y2tldHM7IGkrKykKKwl7CisJCS8qCisJCSAqIEZpbmQg b3V0IHdoYXQgcGFydCBvZiB0aGUgZGF0YSBpcyBjb3ZlcmVkIGJ5IHRoZSBo aXN0b2dyYW0sCisJCSAqIHNvIHRoYXQgd2UgY2FuICdzY2FsZScgdGhlIHNl bGVjdGl2aXR5IHByb3Blcmx5IChlLmcuIHdoZW4KKwkJICogb25seSA1MCUg b2YgdGhlIHNhbXBsZSBnb3QgaW50byB0aGUgaGlzdG9ncmFtLCBhbmQgdGhl IHJlc3QKKwkJICogaXMgaW4gYSBNQ1YgbGlzdCkuCisJCSAqCisJCSAqIFRP RE8gVGhpcyBtaWdodCBiZSBoYW5kbGVkIGJ5IGtlZXBpbmcgYSBnbG9iYWwg ImZyZXF1ZW5jeSIKKwkJICogICAgICBmb3IgdGhlIHdob2xlIGhpc3RvZ3Jh bSwgd2hpY2ggbWlnaHQgc2F2ZSB1cyBzb21lIHRpbWUKKwkJICogICAgICBz cGVudCBhY2Nlc3NpbmcgdGhlIG5vdC1tYXRjaGluZyBwYXJ0IG9mIHRoZSBo aXN0b2dyYW0uCisJCSAqICAgICAgQWx0aG91Z2ggaXQncyBsaWtlbHkgaW4g YSBjYWNoZSwgc28gaXQncyB2ZXJ5IGZhc3QuCisJCSAqLworCQl1ICs9IG12 aGlzdC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKworCQlpZiAobWF0Y2hlc1tp XSA9PSBNVlNUQVRTX01BVENIX0ZVTEwpCisJCQlzICs9IG12aGlzdC0+YnVj a2V0c1tpXS0+bnR1cGxlczsKKwkJZWxzZSBpZiAobWF0Y2hlc1tpXSA9PSBN VlNUQVRTX01BVENIX1BBUlRJQUwpCisJCQlzICs9IDAuNSAqIG12aGlzdC0+ YnVja2V0c1tpXS0+bnR1cGxlczsKKwl9CisKKyNpZmRlZiBERUJVR19NVkhJ U1QKKwlkZWJ1Z19oaXN0b2dyYW1fbWF0Y2hlcyhtdmhpc3QsIG1hdGNoZXMp OworI2VuZGlmCisKKwkvKiByZWxlYXNlIHRoZSBhbGxvY2F0ZWQgYml0bWFw IGFuZCBkZXNlcmlhbGl6ZWQgaGlzdG9ncmFtICovCisJcGZyZWUobWF0Y2hl cyk7CisJcGZyZWUobXZoaXN0KTsKKworCXJldHVybiBzICogdTsKK30KKwor LyogY2FjaGVkIHJlc3VsdCBvZiBidWNrZXQgYm91bmRhcnkgY29tcGFyaXNv biBmb3IgYSBzaW5nbGUgZGltZW5zaW9uICovCisKKyNkZWZpbmUgSElTVF9D QUNIRV9OT1RfRk9VTkQJCTB4MDAKKyNkZWZpbmUgSElTVF9DQUNIRV9GQUxT RQkJCTB4MDEKKyNkZWZpbmUgSElTVF9DQUNIRV9UUlVFCQkJCTB4MDMKKyNk ZWZpbmUgSElTVF9DQUNIRV9NQVNLCQkJCTB4MDIKKworc3RhdGljIGNoYXIK K2J1Y2tldF9jb250YWluc192YWx1ZShGbWdySW5mbyBsdHByb2MsIERhdHVt IGNvbnN0dmFsdWUsCisJCQkJCSAgRGF0dW0gbWluX3ZhbHVlLCAgIERhdHVt IG1heF92YWx1ZSwKKwkJCQkJICBpbnQgICBtaW5faW5kZXgsICAgaW50ICAg bWF4X2luZGV4LAorCQkJCQkgIGJvb2wgIG1pbl9pbmNsdWRlLCBib29sICBt YXhfaW5jbHVkZSwKKwkJCQkJICBjaGFyICogY2FsbGNhY2hlKQoreworCWJv b2wgYSwgYjsKKworCWNoYXIgbWluX2NhY2hlZCA9IGNhbGxjYWNoZVttaW5f aW5kZXhdOworCWNoYXIgbWF4X2NhY2hlZCA9IGNhbGxjYWNoZVttYXhfaW5k ZXhdOworCisJLyoKKwkgKiBGaXJzdCBzb21lIHF1aWNrIGNoZWNrcyBvbiBl cXVhbGl0eSAtIGlmIGFueSBvZiB0aGUgYm91bmRhcmllcyBlcXVhbHMsCisJ ICogd2UgaGF2ZSBhIHBhcnRpYWwgbWF0Y2ggKHNvIG5vIG5lZWQgdG8gY2Fs bCB0aGUgY29tcGFyYXRvcikuCisJICovCisJaWYgKCgobWluX3ZhbHVlID09 IGNvbnN0dmFsdWUpICYmIChtaW5faW5jbHVkZSkpIHx8CisJCSgobWF4X3Zh bHVlID09IGNvbnN0dmFsdWUpICYmIChtYXhfaW5jbHVkZSkpKQorCQlyZXR1 cm4gTVZTVEFUU19NQVRDSF9QQVJUSUFMOworCisJLyogS2VlcCB0aGUgdmFs dWVzIDAvMSBiZWNhdXNlIG9mIHRoZSBYT1IgYXQgdGhlIGVuZC4gKi8KKwlh ID0gKChtaW5fY2FjaGVkICYgSElTVF9DQUNIRV9NQVNLKSA+PiAxKTsKKwli ID0gKChtYXhfY2FjaGVkICYgSElTVF9DQUNIRV9NQVNLKSA+PiAxKTsKKwor CS8qCisJICogSWYgcmVzdWx0IGZvciB0aGUgYnVja2V0IGxvd2VyIGJvdW5k IG5vdCBpbiBjYWNoZSwgZXZhbHVhdGUgdGhlIGZ1bmN0aW9uCisJICogYW5k IHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIGNhY2hlLgorCSAqLworCWlmICgh IG1pbl9jYWNoZWQpCisJeworCQlhID0gRGF0dW1HZXRCb29sKEZ1bmN0aW9u Q2FsbDJDb2xsKCZsdHByb2MsCisJCQkJCQkJCQkJICAgREVGQVVMVF9DT0xM QVRJT05fT0lELAorCQkJCQkJCQkJCSAgIGNvbnN0dmFsdWUsIG1pbl92YWx1 ZSkpOworCQkvKiByZW1lbWJlciB0aGUgcmVzdWx0ICovCisJCWNhbGxjYWNo ZVttaW5faW5kZXhdID0gKGEpID8gSElTVF9DQUNIRV9UUlVFIDogSElTVF9D QUNIRV9GQUxTRTsKKwl9CisKKwkvKiBBbmQgZG8gdGhlIHNhbWUgZm9yIHRo ZSB1cHBlciBib3VuZC4gKi8KKwlpZiAoISBtYXhfY2FjaGVkKQorCXsKKwkJ YiA9IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbCgmbHRwcm9jLAor CQkJCQkJCQkJCSAgIERFRkFVTFRfQ09MTEFUSU9OX09JRCwKKwkJCQkJCQkJ CQkgICBjb25zdHZhbHVlLCBtYXhfdmFsdWUpKTsKKwkJLyogcmVtZW1iZXIg dGhlIHJlc3VsdCAqLworCQljYWxsY2FjaGVbbWF4X2luZGV4XSA9IChiKSA/ IEhJU1RfQ0FDSEVfVFJVRSA6IEhJU1RfQ0FDSEVfRkFMU0U7CisJfQorCisJ cmV0dXJuIChhIF4gYikgPyBNVlNUQVRTX01BVENIX1BBUlRJQUwgOiBNVlNU QVRTX01BVENIX05PTkU7Cit9CisKK3N0YXRpYyBjaGFyCitidWNrZXRfaXNf c21hbGxlcl90aGFuX3ZhbHVlKEZtZ3JJbmZvIG9wcHJvYywgRGF0dW0gY29u c3R2YWx1ZSwKKwkJCQkJICBEYXR1bSBtaW5fdmFsdWUsICAgRGF0dW0gbWF4 X3ZhbHVlLAorCQkJCQkgIGludCAgIG1pbl9pbmRleCwgICBpbnQgICBtYXhf aW5kZXgsCisJCQkJCSAgYm9vbCAgbWluX2luY2x1ZGUsIGJvb2wgIG1heF9p bmNsdWRlLAorCQkJCQkgIGNoYXIgKiBjYWxsY2FjaGUsIGJvb2wgaXNndCkK K3sKKwljaGFyIG1pbl9jYWNoZWQgPSBjYWxsY2FjaGVbbWluX2luZGV4XTsK KwljaGFyIG1heF9jYWNoZWQgPSBjYWxsY2FjaGVbbWF4X2luZGV4XTsKKwor CS8qIEtlZXAgdGhlIHZhbHVlcyAwLzEgYmVjYXVzZSBvZiB0aGUgWE9SIGF0 IHRoZSBlbmQuICovCisJYm9vbCBhID0gKChtaW5fY2FjaGVkICYgSElTVF9D QUNIRV9NQVNLKSA+PiAxKTsKKwlib29sIGIgPSAoKG1heF9jYWNoZWQgJiBI SVNUX0NBQ0hFX01BU0spID4+IDEpOworCisJaWYgKCEgbWluX2NhY2hlZCkK Kwl7CisJCWEgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJm9w cHJvYywKKwkJCQkJCQkJCQkgICBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJ CQkJCQkJCQkJICAgbWluX3ZhbHVlLAorCQkJCQkJCQkJCSAgIGNvbnN0dmFs dWUpKTsKKwkJLyogcmVtZW1iZXIgdGhlIHJlc3VsdCAqLworCQljYWxsY2Fj aGVbbWluX2luZGV4XSA9IChhKSA/IEhJU1RfQ0FDSEVfVFJVRSA6IEhJU1Rf Q0FDSEVfRkFMU0U7CisJfQorCisJaWYgKCEgbWF4X2NhY2hlZCkKKwl7CisJ CWIgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoJm9wcHJvYywK KwkJCQkJCQkJCQkgICBERUZBVUxUX0NPTExBVElPTl9PSUQsCisJCQkJCQkJ CQkJICAgbWF4X3ZhbHVlLAorCQkJCQkJCQkJCSAgIGNvbnN0dmFsdWUpKTsK KwkJLyogcmVtZW1iZXIgdGhlIHJlc3VsdCAqLworCQljYWxsY2FjaGVbbWF4 X2luZGV4XSA9IChiKSA/IEhJU1RfQ0FDSEVfVFJVRSA6IEhJU1RfQ0FDSEVf RkFMU0U7CisJfQorCisJLyoKKwkgKiBOb3csIHdlIG5lZWQgdG8gY29tYmlu ZSBib3RoIHJlc3VsdHMgaW50byB0aGUgZmluYWwgYW5zd2VyLCBhbmQgd2Ug bmVlZAorCSAqIHRvIGJlIGNhcmVmdWwgYWJvdXQgdGhlICdpc2d0JyB2YXJp YWJsZSB3aGljaCBraW5kYSBpbnZlcnRzIHRoZSBtZWFuaW5nLgorCSAqCisJ ICogRmlyc3QsIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVuIGVhY2ggYm91bmRh cnkgcmV0dXJucyBkaWZmZXJlbnQgcmVzdWx0cy4KKwkgKiBJbiB0aGF0IGNh c2UgdGhlIG91dGNvbWUgY2FuIG9ubHkgYmUgJ3BhcnRpYWwnIG1hdGNoLgor CSAqLworCSBpZiAoYSAhPSBiKQorCQlyZXR1cm4gTVZTVEFUU19NQVRDSF9Q QVJUSUFMOworCisJLyoKKwkgKiBXaGVuIHRoZSByZXN1bHRzIGFyZSB0aGUg c2FtZSwgdGhlbiBpdCBkZXBlbmRzIG9uIHRoZSAnaXNndCcgdmFsdWUuIFRo ZXJlCisJICogYXJlIGZvdXIgb3B0aW9uczoKKwkgKgorCSAqIGlzZ3Q9ZmFs c2UgYT1iPXRydWUgID0+IGZ1bGwgbWF0Y2gKKwkgKiBpc2d0PWZhbHNlIGE9 Yj1mYWxzZSA9PiBlbXB0eQorCSAqIGlzZ3Q9dHJ1ZSAgYT1iPXRydWUgID0+ IGVtcHR5CisJICogaXNndD10cnVlICBhPWI9ZmFsc2UgPT4gZnVsbCBtYXRj aAorCSAqCisJICogV2UnbGwgY2hlYXQgYSBiaXQsIGJlY2F1c2Ugd2Uga25v dyB0aGF0IChhPWIpIHNvIHdlJ2xsIHVzZSBqdXN0IG9uZSBvZiB0aGVtLgor CSAqLworCWlmIChpc2d0KQorCQlyZXR1cm4gKCFhKSA/IE1WU1RBVFNfTUFU Q0hfRlVMTCA6IE1WU1RBVFNfTUFUQ0hfTk9ORTsKKwllbHNlCisJCXJldHVy biAoIGEpID8gTVZTVEFUU19NQVRDSF9GVUxMIDogTVZTVEFUU19NQVRDSF9O T05FOworfQorCisvKgorICogRXZhbHVhdGUgY2xhdXNlcyB1c2luZyB0aGUg aGlzdG9ncmFtLCBhbmQgdXBkYXRlIHRoZSBtYXRjaCBiaXRtYXAuCisgKgor ICogVGhlIGJpdG1hcCBtYXkgYmUgYWxyZWFkeSBwYXJ0aWFsbHkgc2V0LCBz byB0aGlzIGlzIHJlYWxseSBhIHdheSB0bworICogY29tYmluZSByZXN1bHRz IG9mIHNldmVyYWwgY2xhdXNlIGxpc3RzIC0gZWl0aGVyIHdoZW4gY29tcHV0 aW5nCisgKiBjb25kaXRpb25hbCBwcm9iYWJpbGl0eSBQKEF8Qikgb3IgYSBj b21iaW5hdGlvbiBvZiBBTkQvT1IgY2xhdXNlcy4KKyAqCisgKiBOb3RlOiBU aGlzIGlzIG5vdCBhIHNpbXBsZSBiaXRtYXAgaW4gdGhlIHNlbnNlIHRoYXQg dGhlcmUgYXJlIG1vcmUKKyAqICAgICAgIHRoYW4gdHdvIHBvc3NpYmxlIHZh bHVlcyBmb3IgZWFjaCBpdGVtIC0gbm8gbWF0Y2gsIHBhcnRpYWwKKyAqICAg ICAgIG1hdGNoIGFuZCBmdWxsIG1hdGNoLiBTbyB3ZSBuZWVkIDIgYml0cyBw ZXIgaXRlbS4KKyAqCisgKiBUT0RPIFRoaXMgd29ya3Mgd2l0aCAnYml0bWFw JyB3aGVyZSBlYWNoIGl0ZW0gaXMgcmVwcmVzZW50ZWQgYXMgYQorICogICAg ICBjaGFyLCB3aGljaCBpcyBzbGlnaHRseSB3YXN0ZWZ1bC4gSW5zdGVhZCwg d2UgY291bGQgdXNlIGEgYml0bWFwCisgKiAgICAgIHdpdGggMiBiaXRzIHBl ciBpdGVtLCByZWR1Y2luZyB0aGUgc2l6ZSB0byB+MS80LiBCeSB1c2luZyB2 YWx1ZXMKKyAqICAgICAgMCwgMSBhbmQgMyAoaW5zdGVhZCBvZiAwLCAxIGFu ZCAyKSwgdGhlIG9wZXJhdGlvbnMgKG1lcmdpbmcgZXRjLikKKyAqICAgICAg bWlnaHQgYmUgcGVyZm9ybWVkIGp1c3QgbGlrZSBmb3Igc2ltcGxlIGJpdG1h cCBieSB1c2luZyAmIGFuZCB8LAorICogICAgICB3aGljaCBtaWdodCBiZSBm YXN0ZXIgdGhhbiBtaW4vbWF4LgorICovCitzdGF0aWMgaW50Cit1cGRhdGVf bWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShQbGFubmVySW5mbyAqcm9vdCwgTGlz dCAqY2xhdXNlcywKKwkJCQkJCQkgIGludDJ2ZWN0b3IgKnN0YWtleXMsCisJ CQkJCQkJICBNVlNlcmlhbGl6ZWRIaXN0b2dyYW0gbXZoaXN0LAorCQkJCQkJ CSAgaW50IG5tYXRjaGVzLCBjaGFyICogbWF0Y2hlcywKKwkJCQkJCQkgIGJv b2wgaXNfb3IpCit7CisJaW50IGk7CisJTGlzdENlbGwgKiBsOworCisJLyoK KwkgKiBVc2VkIGZvciBjYWNoaW5nIGZ1bmN0aW9uIGNhbGxzLCBvbmx5IG9u Y2UgcGVyIGRlZHVwbGljYXRlZCB2YWx1ZS4KKwkgKgorCSAqIFdlIGtub3cg bWF5IGhhdmUgdXAgdG8gKDIgKiBuYnVja2V0cykgdmFsdWVzIHBlciBkaW1l bnNpb24uIEl0J3MKKwkgKiBwcm9iYWJseSBvdmVya2lsbCwgYnV0IGxldCdz IGFsbG9jYXRlIHRoYXQgb25jZSBmb3IgYWxsIGNsYXVzZXMsCisJICogdG8g bWluaW1pemUgb3ZlcmhlYWQuCisJICoKKwkgKiBBbHNvLCB3ZSBvbmx5IG5l ZWQgdHdvIGJpdHMgcGVyIHZhbHVlLCBidXQgdGhpcyBhbGxvY2F0ZXMgYnl0 ZQorCSAqIHBlciB2YWx1ZS4gTWlnaHQgYmUgd29ydGggb3B0aW1pemluZy4K KwkgKgorCSAqIDB4MDAgLSBub3QgeWV0IGNhbGxlZAorCSAqIDB4MDEgLSBj YWxsZWQsIHJlc3VsdCBpcyAnZmFsc2UnCisJICogMHgwMyAtIGNhbGxlZCwg cmVzdWx0IGlzICd0cnVlJworCSAqLworCWNoYXIgKmNhbGxjYWNoZSA9IHBh bGxvYyhtdmhpc3QtPm5idWNrZXRzKTsKKworCUFzc2VydChtdmhpc3QgIT0g TlVMTCk7CisJQXNzZXJ0KG12aGlzdC0+bmJ1Y2tldHMgPiAwKTsKKwlBc3Nl cnQobm1hdGNoZXMgPj0gMCk7CisJQXNzZXJ0KG5tYXRjaGVzIDw9IG12aGlz dC0+bmJ1Y2tldHMpOworCisJQXNzZXJ0KGNsYXVzZXMgIT0gTklMKTsKKwlB c3NlcnQobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0gMSk7CisKKwkvKiBsb29w IHRocm91Z2ggdGhlIGNsYXVzZXMgYW5kIGRvIHRoZSBlc3RpbWF0aW9uICov CisJZm9yZWFjaCAobCwgY2xhdXNlcykKKwl7CisJCU5vZGUgKiBjbGF1c2Ug PSAoTm9kZSopbGZpcnN0KGwpOworCisJCS8qIGlmIGl0J3MgYSBSZXN0cmlj dEluZm8sIHRoZW4gZXh0cmFjdCB0aGUgY2xhdXNlICovCisJCWlmIChJc0Eo Y2xhdXNlLCBSZXN0cmljdEluZm8pKQorCQkJY2xhdXNlID0gKE5vZGUqKSgo UmVzdHJpY3RJbmZvKiljbGF1c2UpLT5jbGF1c2U7CisKKwkJLyogaXQncyBl aXRoZXIgT3BDbGF1c2UsIG9yIE51bGxUZXN0ICovCisJCWlmIChpc19vcGNs YXVzZShjbGF1c2UpKQorCQl7CisJCQlPcEV4cHIgKiBleHByID0gKE9wRXhw ciopY2xhdXNlOworCQkJYm9vbAkJdmFyb25sZWZ0ID0gdHJ1ZTsKKwkJCWJv b2wJCW9rOworCisJCQlGbWdySW5mbwlvcHByb2M7CQkJLyogb3BlcmF0b3Ig Ki8KKwkJCWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKGV4cHItPm9wbm8pLCAmb3Bw cm9jKTsKKworCQkJLyogcmVzZXQgdGhlIGNhY2hlIChwZXIgY2xhdXNlKSAq LworCQkJbWVtc2V0KGNhbGxjYWNoZSwgMCwgbXZoaXN0LT5uYnVja2V0cyk7 CisKKwkJCW9rID0gKE51bVJlbGlkcyhjbGF1c2UpID09IDEpICYmCisJCQkJ IChpc19wc2V1ZG9fY29uc3RhbnRfY2xhdXNlKGxzZWNvbmQoZXhwci0+YXJn cykpIHx8CisJCQkJICh2YXJvbmxlZnQgPSBmYWxzZSwKKwkJCQkgIGlzX3Bz ZXVkb19jb25zdGFudF9jbGF1c2UobGluaXRpYWwoZXhwci0+YXJncykpKSk7 CisKKwkJCWlmIChvaykKKwkJCXsKKwkJCQlGbWdySW5mbwkJbHRwcm9jOwor CQkJCVJlZ1Byb2NlZHVyZQlvcHJyZXN0ID0gZ2V0X29wcnJlc3QoZXhwci0+ b3Bubyk7CisKKwkJCQlWYXIgKiB2YXIgPSAodmFyb25sZWZ0KSA/IGxpbml0 aWFsKGV4cHItPmFyZ3MpIDogbHNlY29uZChleHByLT5hcmdzKTsKKwkJCQlD b25zdCAqIGNzdCA9ICh2YXJvbmxlZnQpID8gbHNlY29uZChleHByLT5hcmdz KSA6IGxpbml0aWFsKGV4cHItPmFyZ3MpOworCQkJCWJvb2wgaXNndCA9ICgh IHZhcm9ubGVmdCk7CisKKwkJCQlUeXBlQ2FjaGVFbnRyeSAqdHlwZWNhY2hl CisJCQkJCQkJCT0gbG9va3VwX3R5cGVfY2FjaGUodmFyLT52YXJ0eXBlLCBU WVBFQ0FDSEVfTFRfT1BSKTsKKworCQkJCS8qIGxvb2t1cCBkaW1lbnNpb24g Zm9yIHRoZSBhdHRyaWJ1dGUgKi8KKwkJCQlpbnQgaWR4ID0gbXZfZ2V0X2lu ZGV4KHZhci0+dmFyYXR0bm8sIHN0YWtleXMpOworCisJCQkJZm1ncl9pbmZv KGdldF9vcGNvZGUodHlwZWNhY2hlLT5sdF9vcHIpLCAmbHRwcm9jKTsKKwor CQkJCS8qCisJCQkJICogQ2hlY2sgdGhpcyBmb3IgYWxsIGJ1Y2tldHMgdGhh dCBzdGlsbCBoYXZlICJ0cnVlIiBpbiB0aGUgYml0bWFwCisJCQkJICoKKwkJ CQkgKiBXZSBhbHJlYWR5IGtub3cgdGhlIGNsYXVzZXMgdXNlIHN1aXRhYmxl IG9wZXJhdG9ycyAoYmVjYXVzZSB0aGF0J3MKKwkJCQkgKiBob3cgd2UgZmls dGVyZWQgdGhlbSkuCisJCQkJICovCisJCQkJZm9yIChpID0gMDsgaSA8IG12 aGlzdC0+bmJ1Y2tldHM7IGkrKykKKwkJCQl7CisJCQkJCWNoYXIgcmVzID0g TVZTVEFUU19NQVRDSF9OT05FOworCisJCQkJCU1WU2VyaWFsaXplZEJ1Y2tl dCBidWNrZXQgPSBtdmhpc3QtPmJ1Y2tldHNbaV07CisKKwkJCQkJLyogaGlz dG9ncmFtIGJvdW5kYXJpZXMgKi8KKwkJCQkJRGF0dW0gbWludmFsLCBtYXh2 YWw7CisJCQkJCWJvb2wgbWluaW5jbHVkZSwgbWF4aW5jbHVkZTsKKwkJCQkJ aW50IG1pbmlkeCwgbWF4aWR4OworCisJCQkJCS8qCisJCQkJCSAqIEZvciBB TkQtbGlzdHMsIHdlIGNhbiBhbHNvIG1hcmsgTlVMTCBidWNrZXRzIGFzICdu byBtYXRjaCcKKwkJCQkJICogKGFuZCB0aGVuIHNraXAgdGhlbSkuIEZvciBP Ui1saXN0cyB0aGlzIGlzIG5vdCBwb3NzaWJsZS4KKwkJCQkJICovCisJCQkJ CWlmICgoISBpc19vcikgJiYgYnVja2V0LT5udWxsc29ubHlbaWR4XSkKKwkJ CQkJCW1hdGNoZXNbaV0gPSBNVlNUQVRTX01BVENIX05PTkU7CisKKwkJCQkJ LyoKKwkJCQkJICogU2tpcCBidWNrZXRzIHRoYXQgd2VyZSBhbHJlYWR5IGVs aW1pbmF0ZWQgLSB0aGlzIGlzIGltcG90YW50CisJCQkJCSAqIGNvbnNpZGVy aW5nIGhvdyB3ZSB1cGRhdGUgdGhlIGluZm8gKHdlIG9ubHkgbG93ZXIgdGhl IG1hdGNoKS4KKwkJCQkJICogV2UgY2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5n IGFib3V0IHRoZSBNQVRDSF9QQVJUSUFMIGJ1Y2tldHMuCisJCQkJCSAqLwor CQkJCQlpZiAoKCEgaXNfb3IpICYmIChtYXRjaGVzW2ldID09IE1WU1RBVFNf TUFUQ0hfTk9ORSkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJZWxzZSBpZiAo aXNfb3IgJiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9GVUxMKSkK KwkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8qIGxvb2t1cCB0aGUgdmFsdWVz IGFuZCBjYWNoZSBvZiBmdW5jdGlvbiBjYWxscyAqLworCQkJCQltaW5pZHgg PSBidWNrZXQtPm1pbltpZHhdOworCQkJCQltYXhpZHggPSBidWNrZXQtPm1h eFtpZHhdOworCisJCQkJCW1pbnZhbCA9IG12aGlzdC0+dmFsdWVzW2lkeF1b YnVja2V0LT5taW5baWR4XV07CisJCQkJCW1heHZhbCA9IG12aGlzdC0+dmFs dWVzW2lkeF1bYnVja2V0LT5tYXhbaWR4XV07CisKKwkJCQkJbWluaW5jbHVk ZSA9IGJ1Y2tldC0+bWluX2luY2x1c2l2ZVtpZHhdOworCQkJCQltYXhpbmNs dWRlID0gYnVja2V0LT5tYXhfaW5jbHVzaXZlW2lkeF07CisKKwkJCQkJLyoK KwkJCQkJICogVE9ETyBNYXliZSBpdCdzIHBvc3NpYmxlIHRvIGFkZCBoZXJl IGEgc2ltaWxhciBvcHRpbWl6YXRpb24KKwkJCQkJICogICAgICBhcyBmb3Ig dGhlIE1DViBsaXN0czoKKwkJCQkJICogCisJCQkJCSAqICAgICAgKG5tYXRj aGVzID09IDApICYmIEFORC1saXN0ID0+IGFsbCBlbGltaW5hdGVkIChGQUxT RSkKKwkJCQkJICogICAgICAobm1hdGNoZXMgPT0gTikgJiYgT1ItbGlzdCAg PT4gYWxsIGVsaW1pbmF0ZWQgKFRSVUUpCisJCQkJCSAqCisJCQkJCSAqICAg ICAgQnV0IGl0J3MgbW9yZSBjb21wbGV4IGJlY2F1c2Ugb2YgdGhlIHBhcnRp YWwgbWF0Y2hlcy4KKwkJCQkJICovCisKKwkJCQkJLyoKKwkJCQkJKiBJZiBp dCdzIG5vdCBhICI8IiBvciAiPiIgb3IgIj0iIG9wZXJhdG9yLCBqdXN0IGln bm9yZSB0aGUKKwkJCQkJKiBjbGF1c2UuIE90aGVyd2lzZSBub3RlIHRoZSBy ZWxpZCBhbmQgYXR0bnVtIGZvciB0aGUgdmFyaWFibGUuCisJCQkJCSoKKwkJ CQkJKiBUT0RPIEknbSByZWFsbHkgdW5zdXJlIHRoZSBoYW5kbGluZyBvZiAn aXNndCcgZmxhZyAodGhhdCBpcywgY2xhdXNlcworCQkJCQkqICAgICAgd2l0 aCByZXZlcnNlIG9yZGVyIG9mIHZhcmlhYmxlL2NvbnN0YW50KSBpcyBjb3Jy ZWN0LiBJIHdvdWxkbid0CisJCQkJCSogICAgICBiZSBzdXJwcmlzZWQgaWYg dGhlcmUgd2FzIHNvbWUgbWl4dXAuIFVzaW5nIHRoZSBsdC9ndCBvcGVyYXRv cnMKKwkJCQkJKiAgICAgIGluc3RlYWQgb2YgbWVzc2luZyB3aXRoIHRoZSBv cHByb2MgY291bGQgbWFrZSBpdCBzaW1wbGVyLgorCQkJCQkqICAgICAgSXQg d291bGQgaG93ZXZlciBiZSB1c2luZyBhIGRpZmZlcmVudCBvcGVyYXRvciB0 aGFuIHRoZSBxdWVyeSwKKwkJCQkJKiAgICAgIGFsdGhvdWdoIGl0J3Mgbm90 IGFueSBzaGFkaWVyIHRoYW4gdXNpbmcgdGhlIHNlbGVjdGl2aXR5IGZ1bmN0 aW9uCisJCQkJCSogICAgICBhcyBpcyBkb25lIGN1cnJlbnRseS4KKwkJCQkJ Ki8KKwkJCQkJc3dpdGNoIChvcHJyZXN0KQorCQkJCQl7CisJCQkJCQljYXNl IEZfU0NBTEFSTFRTRUw6CS8qIFZhciA8IENvbnN0ICovCisJCQkJCQljYXNl IEZfU0NBTEFSR1RTRUw6CS8qIFZhciA+IENvbnN0ICovCisKKwkJCQkJCQly ZXMgPSBidWNrZXRfaXNfc21hbGxlcl90aGFuX3ZhbHVlKG9wcHJvYywgY3N0 LT5jb25zdHZhbHVlLAorCQkJCQkJCQkJCQkJCQkJICAgbWludmFsLCBtYXh2 YWwsCisJCQkJCQkJCQkJCQkJCQkgICBtaW5pZHgsIG1heGlkeCwKKwkJCQkJ CQkJCQkJCQkJCSAgIG1pbmluY2x1ZGUsIG1heGluY2x1ZGUsCisJCQkJCQkJ CQkJCQkJCQkgICBjYWxsY2FjaGUsIGlzZ3QpOworCQkJCQkJCWJyZWFrOwor CisJCQkJCQljYXNlIEZfRVFTRUw6CisKKwkJCQkJCQkvKgorCQkJCQkJCSAq IFdlIG9ubHkgY2hlY2sgd2hldGhlciB0aGUgdmFsdWUgaXMgd2l0aGluIHRo ZSBidWNrZXQsIHVzaW5nIHRoZQorCQkJCQkJCSAqIGx0IG9wZXJhdG9yLCBh bmQgd2UgYWxzbyBjaGVjayBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgYm91bmRh cmllcy4KKwkJCQkJCQkgKi8KKworCQkJCQkJCXJlcyA9IGJ1Y2tldF9jb250 YWluc192YWx1ZShsdHByb2MsIGNzdC0+Y29uc3R2YWx1ZSwKKwkJCQkJCQkJ CQkJCQkJbWludmFsLCBtYXh2YWwsCisJCQkJCQkJCQkJCQkJCW1pbmlkeCwg bWF4aWR4LAorCQkJCQkJCQkJCQkJCQltaW5pbmNsdWRlLCBtYXhpbmNsdWRl LAorCQkJCQkJCQkJCQkJCQljYWxsY2FjaGUpOworCQkJCQkJCWJyZWFrOwor CQkJCQl9CisKKwkJCQkJVVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCByZXMs IGlzX29yKTsKKworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIGlmIChJc0Eo Y2xhdXNlLCBOdWxsVGVzdCkpCisJCXsKKwkJCU51bGxUZXN0ICogZXhwciA9 IChOdWxsVGVzdCopY2xhdXNlOworCQkJVmFyICogdmFyID0gKFZhciopKGV4 cHItPmFyZyk7CisKKwkJCS8qIEZJWE1FIHByb3BlciBtYXRjaGluZyBhdHRy aWJ1dGUgdG8gZGltZW5zaW9uICovCisJCQlpbnQgaWR4ID0gbXZfZ2V0X2lu ZGV4KHZhci0+dmFyYXR0bm8sIHN0YWtleXMpOworCisJCQkvKgorCQkJICog V2FsayB0aHJvdWdoIHRoZSBidWNrZXRzIGFuZCBldmFsdWF0ZSB0aGUgY3Vy cmVudCBjbGF1c2UuIFdlIGNhbgorCQkJICogc2tpcCBpdGVtcyB0aGF0IHdl cmUgYWxyZWFkeSBydWxlZCBvdXQsIGFuZCB0ZXJtaW5hdGUgaWYgdGhlcmUg YXJlCisJCQkgKiBubyByZW1haW5pbmcgYnVja2V0cyB0aGF0IG1pZ2h0IHBv c3NpYmx5IG1hdGNoLgorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgbXZo aXN0LT5uYnVja2V0czsgaSsrKQorCQkJeworCQkJCU1WU2VyaWFsaXplZEJ1 Y2tldCBidWNrZXQgPSBtdmhpc3QtPmJ1Y2tldHNbaV07CisKKwkJCQkvKgor CQkJCSAqIFNraXAgYnVja2V0cyB0aGF0IHdlcmUgYWxyZWFkeSBlbGltaW5h dGVkIC0gdGhpcyBpcyBpbXBvdGFudAorCQkJCSAqIGNvbnNpZGVyaW5nIGhv dyB3ZSB1cGRhdGUgdGhlIGluZm8gKHdlIG9ubHkgbG93ZXIgdGhlIG1hdGNo KQorCQkJCSAqLworCQkJCWlmICgoISBpc19vcikgJiYgKG1hdGNoZXNbaV0g PT0gTVZTVEFUU19NQVRDSF9OT05FKSkKKwkJCQkJY29udGludWU7CisJCQkJ ZWxzZSBpZiAoaXNfb3IgJiYgKG1hdGNoZXNbaV0gPT0gTVZTVEFUU19NQVRD SF9GVUxMKSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBpZiB0aGUgY2xh dXNlIG1pc21hdGNoZXMgdGhlIGJ1Y2tldCwgc2V0IGl0IGFzIE1BVENIX05P TkUgKi8KKwkJCQlpZiAoKGV4cHItPm51bGx0ZXN0dHlwZSA9PSBJU19OVUxM KQorCQkJCQkmJiAoISBidWNrZXQtPm51bGxzb25seVtpZHhdKSkKKwkJCQkJ VVBEQVRFX1JFU1VMVChtYXRjaGVzW2ldLCBNVlNUQVRTX01BVENIX05PTkUs IGlzX29yKTsKKworCQkJCWVsc2UgaWYgKChleHByLT5udWxsdGVzdHR5cGUg PT0gSVNfTk9UX05VTEwpICYmCisJCQkJCQkgKGJ1Y2tldC0+bnVsbHNvbmx5 W2lkeF0pKQorCQkJCQlVUERBVEVfUkVTVUxUKG1hdGNoZXNbaV0sIE1WU1RB VFNfTUFUQ0hfTk9ORSwgaXNfb3IpOworCQkJfQorCQl9CisJCWVsc2UgaWYg KG9yX2NsYXVzZShjbGF1c2UpIHx8IGFuZF9jbGF1c2UoY2xhdXNlKSkKKwkJ eworCQkJLyogQU5EL09SIGNsYXVzZSwgd2l0aCBhbGwgY2xhdXNlcyBjb21w YXRpYmxlIHdpdGggdGhlIHNlbGVjdGVkIE1WIHN0YXQgKi8KKworCQkJaW50 CQkJaTsKKwkJCUJvb2xFeHByICAgKm9yY2xhdXNlICA9ICgoQm9vbEV4cHIq KWNsYXVzZSk7CisJCQlMaXN0CSAgICpvcmNsYXVzZXMgPSBvcmNsYXVzZS0+ YXJnczsKKworCQkJLyogbWF0Y2gvbWlzbWF0Y2ggYml0bWFwIGZvciBlYWNo IGJ1Y2tldCAqLworCQkJaW50CW9yX25tYXRjaGVzID0gMDsKKwkJCWNoYXIg KiBvcl9tYXRjaGVzID0gTlVMTDsKKworCQkJQXNzZXJ0KG9yY2xhdXNlcyAh PSBOSUwpOworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKG9yY2xhdXNlcykgPj0g Mik7CisKKwkJCS8qIG51bWJlciBvZiBtYXRjaGluZyBidWNrZXRzICovCisJ CQlvcl9ubWF0Y2hlcyA9IG12aGlzdC0+bmJ1Y2tldHM7CisKKwkJCS8qIGJ5 IGRlZmF1bHQgbm9uZSBvZiB0aGUgYnVja2V0cyBtYXRjaGVzIHRoZSBjbGF1 c2VzICovCisJCQlvcl9tYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikg KiBvcl9ubWF0Y2hlcyk7CisKKwkJCWlmIChvcl9jbGF1c2UoY2xhdXNlKSkK KwkJCXsKKwkJCQkvKiBPUiBjbGF1c2VzIGFzc3VtZSBub3RoaW5nIG1hdGNo ZXMsIGluaXRpYWxseSAqLworCQkJCW1lbXNldChvcl9tYXRjaGVzLCBNVlNU QVRTX01BVENIX05PTkUsIHNpemVvZihjaGFyKSpvcl9ubWF0Y2hlcyk7CisJ CQkJb3Jfbm1hdGNoZXMgPSAwOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CS8qIEFORCBjbGF1c2VzIGFzc3VtZSBub3RoaW5nIG1hdGNoZXMsIGluaXRp YWxseSAqLworCQkJCW1lbXNldChvcl9tYXRjaGVzLCBNVlNUQVRTX01BVENI X0ZVTEwsIHNpemVvZihjaGFyKSpvcl9ubWF0Y2hlcyk7CisJCQl9CisKKwkJ CS8qIGJ1aWxkIHRoZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBPUi1jbGF1c2Vz ICovCisJCQlvcl9ubWF0Y2hlcyA9IHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlz dG9ncmFtKHJvb3QsIG9yY2xhdXNlcywKKwkJCQkJCQkJCQlzdGFrZXlzLCBt dmhpc3QsCisJCQkJCQkJCQkJb3Jfbm1hdGNoZXMsIG9yX21hdGNoZXMsIG9y X2NsYXVzZShjbGF1c2UpKTsKKworCQkJLyogbWVyZ2UgdGhlIGJpdG1hcCBp bnRvIHRoZSBleGlzdGluZyBvbmUqLworCQkJZm9yIChpID0gMDsgaSA8IG12 aGlzdC0+bmJ1Y2tldHM7IGkrKykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFRv IEFORC1tZXJnZSB0aGUgYml0bWFwcywgYSBNSU4oKSBzZW1hbnRpY3MgaXMg dXNlZC4KKwkJCQkgKiBGb3IgT1ItbWVyZ2UsIHVzZSBNQVgoKS4KKwkJCQkg KgorCQkJCSAqIEZJWE1FIHRoaXMgZG9lcyBub3QgZGVjcmVhc2UgdGhlIG51 bWJlciBvZiBtYXRjaGVzCisJCQkJICovCisJCQkJVVBEQVRFX1JFU1VMVCht YXRjaGVzW2ldLCBvcl9tYXRjaGVzW2ldLCBpc19vcik7CisJCQl9CisKKwkJ CXBmcmVlKG9yX21hdGNoZXMpOworCisJCX0KKwkJZWxzZQorCQkJZWxvZyhF UlJPUiwgInVua25vd24gY2xhdXNlIHR5cGU6ICVkIiwgY2xhdXNlLT50eXBl KTsKKwl9CisKKwkvKiBmcmVlIHRoZSBjYWxsIGNhY2hlICovCisJcGZyZWUo Y2FsbGNhY2hlKTsKKworCXJldHVybiBubWF0Y2hlczsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBhOTJm ODg5Li5kNDZhZWQyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jCkBAIC00MTYsNyArNDE2LDcgQEAgZ2V0X3JlbGF0 aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVj dElkLCBib29sIGluaHBhcmVudCwKIAkJCW12c3RhdCA9IChGb3JtX3BnX212 X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXApOwogCiAJCQkvKiB1bmF2YWls YWJsZSBzdGF0cyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB0aGUgcGxhbm5l ciAqLwotCQkJaWYgKG12c3RhdC0+ZGVwc19idWlsdCB8fCBtdnN0YXQtPm1j dl9idWlsdCkKKwkJCWlmIChtdnN0YXQtPmRlcHNfYnVpbHQgfHwgbXZzdGF0 LT5tY3ZfYnVpbHQgfHwgbXZzdGF0LT5oaXN0X2J1aWx0KQogCQkJewogCQkJ CWluZm8gPSBtYWtlTm9kZShNVlN0YXRpc3RpY0luZm8pOwogCkBAIC00MjYs MTAgKzQyNiwxMiBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAq cm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAog CQkJCS8qIGVuYWJsZWQgc3RhdGlzdGljcyAqLwogCQkJCWluZm8tPmRlcHNf ZW5hYmxlZCA9IG12c3RhdC0+ZGVwc19lbmFibGVkOwogCQkJCWluZm8tPm1j dl9lbmFibGVkICA9IG12c3RhdC0+bWN2X2VuYWJsZWQ7CisJCQkJaW5mby0+ aGlzdF9lbmFibGVkID0gbXZzdGF0LT5oaXN0X2VuYWJsZWQ7CiAKIAkJCQkv KiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwogCQkJCWluZm8tPmRl cHNfYnVpbHQgPSBtdnN0YXQtPmRlcHNfYnVpbHQ7CiAJCQkJaW5mby0+bWN2 X2J1aWx0ICA9IG12c3RhdC0+bWN2X2J1aWx0OworCQkJCWluZm8tPmhpc3Rf YnVpbHQgPSBtdnN0YXQtPmhpc3RfYnVpbHQ7CiAKIAkJCQkvKiBzdGFrZXlz ICovCiAJCQkJYWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKE1WU1RBVE9JRCwg aHR1cCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv TWFrZWZpbGUgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxl CmluZGV4IGY5YmYxMGMuLjlkYmIzYjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNiBAQCBzdWJk aXIgPSBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzCiB0b3BfYnVpbGRkaXIg PSAuLi8uLi8uLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01h a2VmaWxlLmdsb2JhbAogCi1PQkpTID0gY29tbW9uLm8gZGVwZW5kZW5jaWVz Lm8gbWN2Lm8KK09CSlMgPSBjb21tb24ubyBkZXBlbmRlbmNpZXMubyBoaXN0 b2dyYW0ubyBtY3YubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2Jh Y2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5oaXN0b2dyYW0gYi9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5oaXN0b2dyYW0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uODIzNGQyYwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLmhpc3RvZ3JhbQpA QCAtMCwwICsxLDI4NyBAQAorTXVsdGl2YXJpYXRlIGhpc3RvZ3JhbXMKKz09 PT09PT09PT09PT09PT09PT09PT09CisKK0hpc3RvZ3JhbXMgb24gaW5kaXZp ZHVhbCBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgYnVja2V0cyByZXByZXNlbnRl ZCBieSByYW5nZXMsCitjb3ZlcmluZyB0aGUgZG9tYWluIG9mIHRoZSBhdHRy aWJ1dGUuIFRoYXQgaXMsIGVhY2ggYnVja2V0IGlzIGEgW21pbixtYXhdCitp bnRlcnZhbCwgYW5kIGNvbnRhaW5zIGFsbCB2YWx1ZXMgaW4gdGhpcyByYW5n ZS4gVGhlIGhpc3RvZ3JhbSBpcyBidWlsdCBpbiBzdWNoCithIHdheSB0aGF0 IGFsbCBidWNrZXRzIGhhdmUgYWJvdXQgdGhlIHNhbWUgZnJlcXVlbmN5Lgor CitNdWx0aXZhcmlhdGUgaGlzdG9ncmFtcyBhcmUgYW4gZXh0ZW5zaW9uIGlu dG8gbi1kaW1lbnNpb25hbCBzcGFjZSAtIHRoZSBidWNrZXRzCithcmUgbi1k aW1lbnNpb25hbCBpbnRlcnZhbHMgKGkuZS4gbi1kaW1lbnNpb25hbCByZWN0 YWdsZXMpLCBjb3ZlcmluZyB0aGUgZG9tYWluCitvZiB0aGUgY29tYmluYXRp b24gb2YgYXR0cmlidXRlcy4gVGhhdCBpcywgZWFjaCBidWNrZXQgaGFzIGEg dmVjdG9yIG9mIGxvd2VyCithbmQgdXBwZXIgYm91bmRhcmllcywgZGVub3Rl ZCBtaW5baV0gYW5kIG1heFtpXSAod2hlcmUgaSA9IDEuLm4pLgorCitJbiBh ZGRpdGlvbiB0byB0aGUgYm91bmRhcmllcywgZWFjaCBidWNrZXQgdHJhY2tz IGFkZGl0aW9uYWwgaW5mbzoKKworICAgICogZnJlcXVlbmN5IChmcmFjdGlv biBvZiB0dXBsZXMgaW4gdGhlIGJ1Y2tldCkKKyAgICAqIHdoZXRoZXIgdGhl IGJvdW5kYXJpZXMgYXJlIGluY2x1c2l2ZSBvciBleGNsdXNpdmUKKyAgICAq IHdoZXRoZXIgdGhlIGRpbWVuc2lvbiBjb250YWlucyBvbmx5IE5VTEwgdmFs dWVzCisgICAgKiBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIGluIGVhY2gg ZGltZW5zaW9uIChmb3IgYnVpbGRpbmcgb25seSkKKworSXQncyBwb3NzaWJs ZSB0aGF0IGluIHRoZSBmdXR1cmUgd2UnbGwgbXVsdGlwbGUgaGlzdG9ncmFt IHR5cGVzLCB3aXRoIGRpZmZlcmVudAorZmVhdHVyZXMuIFdlIGRvIGhvd2V2 ZXIgZXhwZWN0IGFsbCB0aGUgdHlwZXMgdG8gc2hhcmUgdGhlIHNhbWUgcmVw cmVzZW50YXRpb24KKyhidWNrZXRzIGFzIHJhbmdlcykgYW5kIG9ubHkgZGlm ZmVyIGluIGhvdyB3ZSBidWlsZCB0aGVtLgorCitUaGUgY3VycmVudCBpbXBs ZW1lbnRhdGlvbiBidWlsZHMgbm9uLW92ZXJsYXBwaW5nIGJ1Y2tldHMsIHRo YXQgbWF5IG5vdCBiZSB0cnVlCitmb3Igc29tZSBoaXN0b2dyYW0gdHlwZXMg YW5kIHRoZSBjb2RlIHNob3VsZCBub3QgcmVseSBvbiB0aGlzIGFzc3VtcHRp b24uIFRoZXJlCithcmUgaW50ZXJlc3RpbmcgdHlwZXMgb2YgaGlzdG9ncmFt cyAob3IgYWxnb3JpdGhtcykgd2l0aCBvdmVybGFwcGluZyBidWNrZXRzLgor CitXaGVuIHVzZWQgb24gbG93LWNhcmRpbmFsaXR5IGRhdGEsIGhpc3RvZ3Jh bXMgdXN1YWxseSBwZXJmb3JtIGNvbnNpZGVyYWJseSB3b3JzZQordGhhbiBN Q1YgbGlzdHMgKHdoaWNoIGFyZSBhIGdvb2QgZml0IGZvciB0aGlzIGtpbmQg b2YgZGF0YSkuIFRoaXMgaXMgZXNwZWNpYWxseQordHJ1ZSBvbiBsYWJlbC1s aWtlIHZhbHVlcywgd2hlcmUgb3JkZXJpbmcgb2YgdGhlIHZhbHVlcyBpcyBt b3N0bHkgdW5yZWxhdGVkIHRvCittZWFuaW5nIG9mIHRoZSBkYXRhLCBhcyBw cm9wZXIgb3JkZXJpbmcgaXMgY3J1Y2lhbCBmb3IgaGlzdG9ncmFtcy4KKwor T24gaGlnaC1jYXJkaW5hbGl0eSBkYXRhIHRoZSBoaXN0b2dyYW1zIGFyZSB1 c3VhbGx5IGEgYmV0dGVyIGNob2ljZSwgYmVjYXVzZSBNQ1YKK2xpc3RzIGNh bid0IHJlcHJlc2VudCB0aGUgZGlzdHJpYnV0aW9uIGFjY3VyYXRlbHkgZW5v dWdoLgorCisKK1NlbGVjdGl2aXR5IGVzdGltYXRpb24KKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworVGhlIGVzdGltYXRpb24gaXMgaW1wbGVtZW50ZWQg aW4gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9oaXN0b2dyYW0oKSwgYW5k Cit3b3JrcyB2ZXJ5IHNpbWlsYXJseSB0byBjbGF1c2VsaXN0X212X3NlbGVj dGl2aXR5X21jdmxpc3QuCisKK1RoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhh dCB3aGlsZSBNQ1YgbGlzdHMgc3VwcG9ydCBleGFjdCBtYXRjaGVzLCBoaXN0 b2dyYW1zCitvZnRlbiByZXN1bHQgaW4gYXBwcm94aW1hdGUgbWF0Y2hlcyAt IGUuZy4gd2l0aCBlcXVhbGl0eSB3ZSBjYW4gb25seSBzYXkgaWYKK3RoZSBj b25zdGFudCB3b3VsZCBiZSBwYXJ0IG9mIHRoZSBidWNrZXQsIGJ1dCBub3Qg d2hldGhlciBpdCByZWFsbHkgaXMgdGhlcmUKK29yIHdoYXQgZnJhY3Rpb24g b2YgdGhlIGJ1Y2tldCBpdCBjb3JyZXNwb25kcyB0by4gSW4gdGhpcyBjYXNl IHdlIHJlbHkgb24KK3NvbWUgZGVmYXVsdHMganVzdCBsaWtlIGluIHRoZSBw ZXItY29sdW1uIGhpc3RvZ3JhbXMuCisKK1RoZSBjdXJyZW50IGltcGxlbWVu dGF0aW9uIHVzZXMgaGlzdG9ncmFtcyB0byBlc3RpbWF0ZXMgdGhvc2UgdHlw ZXMgb2YgY2xhdXNlcworKHRoaW5rIG9mIFdIRVJFIGNvbmRpdGlvbnMpOgor CisgICAgKGEpIGVxdWFsaXR5IGNsYXVzZXMgICAgV0hFUkUgKGEgPSAxKSBB TkQgKGIgPSAyKQorICAgIChiKSBpbmVxdWFsaXR5IGNsYXVzZXMgIFdIRVJF IChhIDwgMSkgQU5EIChiID49IDIpCisgICAgKGMpIE5VTEwgY2xhdXNlcyAg ICAgICAgV0hFUkUgKGEgSVMgTlVMTCkgQU5EIChiIElTIE5PVCBOVUxMKQor ICAgIChkKSBPUi1jbGF1c2VzICAgICAgICAgIFdIRVJFIChhID0gMSkgIE9S IChiID0gMikKKworU2ltaWxhcmx5IHRvIE1DViBsaXN0cywgaXQncyBwb3Nz aWJsZSB0byBhZGQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCB0eXBlcyBvZgor Y2xhdXNlcywgZm9yIGV4YW1wbGU6CisKKyAgICAoZSkgbXVsdGktdmFyIGNs YXVzZXMgICBXSEVSRSAoYSA+IGIpCisKK2FuZCBzbyBvbi4gVGhlc2UgYXJl IHRhc2tzIGZvciB0aGUgZnV0dXJlLCBub3QgeWV0IGltcGxlbWVudGVkLgor CisKK1doZW4gZXZhbHVhdGluZyBhIGNsYXVzZSBvbiBhIGJ1Y2tldCwgd2Ug bWF5IGdldCBvbmUgb2YgdGhyZWUgcmVzdWx0czoKKworICAgIChhKSBGVUxM X01BVENIIC0gVGhlIGJ1Y2tldCBkZWZpbml0ZWx5IG1hdGNoZXMgdGhlIGNs YXVzZS4KKworICAgIChiKSBQQVJUSUFMX01BVENIIC0gVGhlIGJ1Y2tldCBt YXRjaGVzIHRoZSBjbGF1c2UsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYWxsCisg ICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHVwbGVzIGl0IHJlcHJlc2Vu dHMuCisKKyAgICAoYykgTk9fTUFUQ0ggLSBUaGUgYnVja2V0IGRlZmluaXRl bHkgZG9lcyBub3QgbWF0Y2ggdGhlIGNsYXVzZS4KKworVGhpcyBtYXkgYmUg aWxsdXN0cmF0ZWQgdXNpbmcgYSByYW5nZSBbMSwgNV0sIHdoaWNoIGlzIGVz c2VudGlhbGx5IGEgMS1EIGJ1Y2tldC4KK1dpdGggY2xhdXNlCisKKyAgICBX SEVSRSAoYSA8IDEwKSA9PiBGVUxMX01BVENIIChhbGwgcmFuZ2UgdmFsdWVz IGFyZSBiZWxvdworICAgICAgICAgICAgICAgICAgICAgIDEwLCBzbyB0aGUg d2hvbGUgYnVja2V0IG1hdGNoZXMpCisKKyAgICBXSEVSRSAoYSA8IDMpICA9 PiBQQVJUSUFMX01BVENIICh0aGVyZSBtYXkgYmUgdmFsdWVzIG1hdGNoaW5n CisgICAgICAgICAgICAgICAgICAgICAgdGhlIGNsYXVzZSwgYnV0IHdlIGRv bid0IGtub3cgaG93IG1hbnkpCisKKyAgICBXSEVSRSAoYSA8IDApICA9PiBO T19NQVRDSCAodGhlIHdob2xlIHJhbmdlIGlzIGFib3ZlIDEsIHNvCisgICAg ICAgICAgICAgICAgICAgICAgbm8gdmFsdWVzIGZyb20gdGhlIGJ1Y2tldCBj YW4gbWF0Y2gpCisKK1NvbWUgY2xhdXNlcyBtYXkgcHJvZHVjZSBvbmx5IHNv bWUgb2YgdGhvc2UgcmVzdWx0cyAtIGZvciBleGFtcGxlIGVxdWFsaXR5Citj bGF1c2VzIG1heSBuZXZlciBwcm9kdWNlIEZVTExfTUFUQ0ggYXMgd2UgYWx3 YXlzIGhpdCBvbmx5IHBhcnQgb2YgdGhlIGJ1Y2tldAorKHdlIGNhbid0IG1h dGNoIGJvdGggYm91bmRhcmllcyBhdCB0aGUgc2FtZSB0aW1lKS4gVGhpcyBy ZXN1bHRzIGluIGxlc3MgYWNjdXJhdGUKK2VzdGltYXRlcyBjb21wYXJlZCB0 byBNQ1YgbGlzdHMsIHdoZXJlIHdlIGNhbiBoaXQgYSBNQ1YgaXRlbXMgZXhh Y3RseSAodGhlcmUncworbm8gUEFSVElBTCBtYXRjaCBpbiBNQ1YpLgorCitU aGVyZSBhcmUgYWxzbyBjbGF1c2VzIHRoYXQgbWF5IG5vdCBwcm9kdWNlIGFu eSBQQVJUSUFMX01BVENIIHJlc3VsdHMuIEEgbmljZQorZXhhbXBsZSBvZiB0 aGF0IGlzICdJUyBbTk9UXSBOVUxMJyBjbGF1c2UsIHdoaWNoIGVpdGhlciBt YXRjaGVzIHRoZSBidWNrZXQKK2NvbXBsZXRlbHkgKEZVTExfTUFUQ0gpIG9y IG5vdCBhdCBhbGwgKE5PX01BVENIKSwgdGhhbmtzIHRvIGhvdyB0aGUgTlVM TC1idWNrZXRzCithcmUgY29uc3RydWN0ZWQuCisKK0NvbXB1dGluZyB0aGUg dG90YWwgc2VsZWN0aXZpdHkgZXN0aW1hdGUgaXMgdHJpdmlhbCAtIHNpbXBs eSBzdW0gc2VsZWN0aXZpdGllcworZnJvbSBhbGwgdGhlIEZVTExfTUFUQ0gg YW5kIFBBUlRJQUxfTUFUQ0ggYnVja2V0cyAoYnV0IGZvciBidWNrZXRzIG1h cmtlZCB3aXRoCitQQVJUSUFMX01BVENILCBtdWx0aXBseSB0aGUgZnJlcXVl bmN5IGJ5IDAuNSB0byBtaW5pbWl6ZSB0aGUgYXZlcmFnZSBlcnJvcikuCisK KworQnVpbGRpbmcgYSBoaXN0b2dyYW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCitUaGUgYWxnb3JpdGhtIG9mIGJ1aWxkaW5nIGEgaGlzdG9ncmFtIGlu IGdlbmVyYWwgaXMgcXVpdGUgc2ltcGxlOgorCisgICAgKGEpIGNyZWF0ZSBh biBpbml0aWFsIGJ1Y2tldCAoY29udGFpbmluZyBhbGwgc2FtcGxlIHJvd3Mp CisKKyAgICAoYikgY3JlYXRlIE5VTEwgYnVja2V0cyAoYnkgc3BsaXR0aW5n IHRoZSBpbml0aWFsIGJ1Y2tldCkKKworICAgIChjKSByZXBlYXQKKyAgICAK KyAgICAgICAgKDEpIGNob29zZSBidWNrZXQgdG8gc3BsaXQgbmV4dAorCisg ICAgICAgICgyKSB0ZXJtaW5hdGUgaWYgbm8gYnVja2V0IHRoYXQgbWlnaHQg YmUgc3BsaXQgZm91bmQsIG9yIGlmIHdlJ3ZlCisgICAgICAgICAgICByZWFj aGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBidWNrZXRzICgxNjM4NCkKKwor ICAgICAgICAoMykgY2hvb3NlIGRpbWVuc2lvbiB0byBwYXJ0aXRpb24gdGhl IGJ1Y2tldCBieQorCisgICAgICAgICg0KSBwYXJ0aXRpb24gdGhlIGJ1Y2tl dCBieSB0aGUgc2VsZWN0ZWQgZGltZW5zaW9uCisKK1RoZSBtYWluIGNvbXBs ZXhpdHkgaXMgaGlkZGVuIGluIHN0ZXBzIChjLjEpIGFuZCAoYy4zKSwgaS5l LiBob3cgd2UgY2hvb3NlIHRoZQorYnVja2V0IGFuZCBkaW1lbnNpb24gZm9y IHRoZSBzcGxpdC4KKworU2ltaWxhcmx5IHRvIG9uZS1kaW1lbnNpb25hbCBo aXN0b2dyYW1zLCB3ZSB3YW50IHRvIHByb2R1Y2UgYnVja2V0cyB3aXRoIHJv dWdobHkKK3RoZSBzYW1lIGZyZXF1ZW5jeS4gV2UgYWxzbyBuZWVkIHRvIHBy b2R1Y2UgInJlZ3VsYXIiIGJ1Y2tldHMsIGJlY2F1c2UgYnVja2V0cword2l0 aCBvbmUgInNpZGUiIG11Y2ggbG9uZ2VyIHRoYW4gdGhlIG90aGVycyBhcmUg dmVyeSBsaWtlbHkgdG8gbWF0Y2ggYSBsb3Qgb2YKK2NvbmRpdGlvbnMgKHdo aWNoIGluY3JlYXNlcyBlcnJvciwgZXZlbiBpZiB0aGUgYnVja2V0IGZyZXF1 ZW5jeSBpcyB2ZXJ5IGxvdykuCisKK1RvIGFjaGlldmUgdGhpcywgd2UgY2hv b3NlIHRoZSBsYXJnZXN0IGJ1Y2tldCAoY29udGFpbmluZyB0aGUgbW9zdCBz YW1wbGUgcm93cyksCitidXQgd2Ugb25seSBjaG9vc2UgYnVja2V0cyB0aGF0 IGNhbiBhY3R1YWxseSBiZSBzcGxpdCAoaGF2ZSBhdCBsZWFzdCAzIGRpZmZl cmVudAorY29tYmluYXRpb25zIG9mIHZhbHVlcykuCisKK1RoZW4gd2UgY2hv b3NlIHRoZSAibG9uZ2VzdCIgZGltZW5zaW9uIG9mIHRoZSBidWNrZXQsIHdo aWNoIGlzIGNvbXB1dGVkIGJ5IHVzaW5nCit0aGUgZGlzdGluY3QgdmFsdWVz IGluIHRoZSBzYW1wbGUgYXMgYSBtZWFzdXJlLgorCitGb3IgZGV0YWlscyBz ZWUgZnVuY3Rpb25zIHNlbGVjdF9idWNrZXRfdG9fcGFydGl0aW9uKCkgYW5k IHBhcnRpdGlvbl9idWNrZXQoKS4KKworVGhlIGN1cnJlbnQgbGltaXQgb24g bnVtYmVyIG9mIGJ1Y2tldHMgKDE2Mzg0KSBpcyBtb3N0bHkgYXJiaXRyYXJ5 LCBidXQgY2hvc2VuCitzbyB0aGF0IGl0IGd1YXJhbnRlZXMgd2UgZG9uJ3Qg ZXhjZWVkIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIGluZGV4YWJs ZSBieQordWludDE2IGluIGFueSBvZiB0aGUgZGltZW5zaW9ucy4gSW4gcHJh Y3RpY2Ugd2UgY291bGQgaGFuZGxlIG1vcmUgYnVja2V0cyBhcyB3ZQoraW5k ZXggZWFjaCBkaW1lbnNpb24gc2VwYXJhdGVseSBhbmQgdGhlIHNwbGl0cyBz aG91bGQgdXNlIHRoZSBkaW1lbnNpb25zIGV2ZW5seS4KKworQWxzbywgaGlz dG9ncmFtcyB0aGlzIGxhcmdlICh3aXRoIDE2ayB2YWx1ZXMgaW4gbXVsdGlw bGUgZGltZW5zaW9ucykgd291bGQgYmUKK3F1aXRlIGV4cGVuc2l2ZSB0byBi dWlsZCBhbmQgcHJvY2Vzcywgc28gdGhlIDE2ayBsaW1pdCBpcyByYXRoZXIg cmVhc29uYWJsZS4KKworVGhlIGFjdHVhbCBudW1iZXIgb2YgYnVja2V0cyBp cyBhbHNvIHJlbGF0ZWQgdG8gc3RhdGlzdGljcyB0YXJnZXQsIGJlY2F1c2Ug d2UKK3JlcXVpcmUgTUlOX0JVQ0tFVF9ST1dTICgxMCkgdHVwbGVzIHBlciBi dWNrZXQgYmVmb3JlIGEgc3BsaXQsIHNvIHdlIGNhbid0IGhhdmUKK21vcmUg dGhhbiAoMiAqIDMwMCAqIHRhcmdldCAvIDEwKSBidWNrZXRzLiBGb3IgdGhl IGRlZmF1bHQgdGFyZ2V0ICgxMDApIHRoaXMKK2V2YWx1YXRlcyB0byB+Nmsu CisKKworTlVMTCBoYW5kbGluZyAoY3JlYXRlX251bGxfYnVja2V0cykKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYnVp bGRpbmcgaGlzdG9ncmFtcyBvbiBhIHNpbmdsZSBhdHRyaWJ1dGUsIHdlIGZp cnN0IGZpbHRlciBvdXQgTlVMTCB2YWx1ZXMuCitJbiB0aGUgbXVsdGl2YXJp YXRlIGNhc2UsIHdlIGNhbid0IHJlYWxseSBkbyB0aGF0IGJlY2F1c2UgdGhl IHJvd3MgbWF5IGNvbnRhaW4KK2EgbWl4IG9mIE5VTEwgYW5kIG5vbi1OVUxM IHZhbHVlcyBpbiBkaWZmZXJlbnQgY29sdW1ucyAoc28gd2UgY2FuJ3Qgc2lt cGx5CitmaWx0ZXIgYWxsIG9mIHRoZW0gb3V0KS4KKworRm9yIHRoaXMgcmVh c29uLCB0aGUgaGlzdG9ncmFtcyBhcmUgYnVpbHQgaW4gYSB3YXkgc28gdGhh dCBmb3IgZWFjaCBidWNrZXQsIGVhY2gKK2RpbWVuc2lvbiBvbmx5IGNvbnRh aW5zIG9ubHkgTlVMTCBvciBub24tTlVMTCB2YWx1ZXMuIEJ1aWxkaW5nIHRo ZSBOVUxMLWJ1Y2tldHMKK2hhcHBlbnMgYXMgdGhlIGZpcnN0IHN0ZXAgaW4g dGhlIGJ1aWxkLCBieSB0aGUgY3JlYXRlX251bGxfYnVja2V0cygpIGZ1bmN0 aW9uLgorVGhlIG51bWJlciBvZiBOVUxMIGJ1Y2tldHMsIGFzIHByb2R1Y2Vk IGJ5IHRoaXMgZnVuY3Rpb24sIGhhcyBhIGNsZWFyIHVwcGVyCitib3VuZGFy eSAoMl5OKSB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucyAo YXR0cmlidXRlcyB0aGUgaGlzdG9ncmFtIGlzCitidWlsdCBvbikuIE9yIHJh dGhlciAyXksgd2hlcmUgSyBpcyB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMg dGhhdCBhcmUgbm90IG1hcmtlZAorYXMgbm90LU5VTEwuIAorCitUaGUgYnVj a2V0cyB3aXRoIE5VTEwgZGltZW5zaW9ucyBhcmUgdGhlbiBzdWJqZWN0IHRv IHRoZSBzYW1lIGJ1aWxkIGFsZ29yaXRobQorKGkuZS4gbWF5IGJlIHNwbGl0 IGludG8gc21hbGxlciBidWNrZXRzKSBqdXN0IGxpa2UgYW55IG90aGVyIGJ1 Y2tldCwgYnV0IG1heQorb25seSBiZSBzcGxpdCBieSBub24tTlVMTCBkaW1l bnNpb24uCisKKworU2VyaWFsaXphdGlvbgorLS0tLS0tLS0tLS0tLQorCitU byBzdG9yZSB0aGUgaGlzdG9ncmFtIGluIHBnX212X3N0YXRpc3RpYyB0YWJs ZSwgaXQgaXMgc2VyaWFsaXplZCBpbnRvIGEgbW9yZQorZWZmaWNpZW50IGZv cm0uIFdlIGFsc28gdXNlIHRoZSByZXByZXNlbnRhdGlvbiBmb3IgZXN0aW1h dGlvbiwgaS5lLiB3ZSBkb24ndAorZnVsbHkgZGVzZXJpYWxpemUgdGhlIGhp c3RvZ3JhbS4KKworRm9yIGV4YW1wbGUgdGhlIGJvdW5kYXJ5IHZhbHVlcyBh cmUgZGVkdXBsaWNhdGVkIHRvIG1pbmltaXplIHRoZSByZXF1aXJlZCBzcGFj ZS4KK0hvdyBtdWNoIHJlZHVuZGFuY3kgaXMgdGhlcmUsIGFjdHVhbGx5PyBM ZXQncyBhc3N1bWUgdGhlcmUgYXJlIG5vIE5VTEwgdmFsdWVzLAorc28gd2Ug c3RhcnQgd2l0aCBhIHNpbmdsZSBidWNrZXQgLSBpbiB0aGF0IGNhc2Ugd2Ug aGF2ZSAyKk4gYm91bmRhcmllcy4gRWFjaAordGltZSB3ZSBzcGxpdCBhIGJ1 Y2tldCB3ZSBpbnRyb2R1Y2Ugb25lIG5ldyB2YWx1ZSAoaW4gdGhlICJtaWRk bGUiIG9mIG9uZSBvZgordGhlIGRpbWVuc2lvbnMpLCBhbmQga2VlcCBib3Vu ZHJpZXMgZm9yIGFsbCB0aGUgb3RoZXIgZGltZW5zaW9ucy4gU28gYWZ0ZXIg Sworc3BsaXRzLCB3ZSBoYXZlIHVwIHRvCisKKyAgICAyKk4gKyBLCisKK3Vu aXF1ZSBib3VuZGFyeSB2YWx1ZXMgKHdlIG1heSBoYXZlIGZld2UgdmFsdWVz LCBpZiB0aGUgc2FtZSB2YWx1ZSBpcyB1c2VkIGZvcgorc2V2ZXJhbCBzcGxp dHMpLiBCdXQgYWZ0ZXIgSyBzcGxpdHMgd2UgZG8gaGF2ZSAoSysxKSBidWNr ZXRzLCBzbworCisgICAgKEsrMSkgKiAyICogTgorCitib3VuZGFyeSB2YWx1 ZXMuIFVzaW5nIGUuZy4gTj00IGFuZCBLPTk5OSwgd2UgYXJyaXZlIHRvIHRo b3NlIG51bWJlcnM6CisKKyAgICAyKk4gKyBLICAgICAgID0gMTAwNworICAg IChLKzEpICogMiAqIE4gPSA4MDAwCisKK3dpY2ggbWVhbnMgYSBsb3Qgb2Yg cmVkdW5kYW5jeS4gSXQncyBzb21ld2hhdCBjb3VudGVyLWludHVpdGl2ZSB0 aGF0IHRoZSBudW1iZXIKK29mIGRpc3RpbmN0IHZhbHVlcyBkb2VzIG5vdCBy ZWFsbHkgZGVwZW5kIG9uIHRoZSBudW1iZXIgb2YgZGltZW5zaW9ucyAoZXhj ZXB0Citmb3IgdGhlIGluaXRpYWwgYnVja2V0LCBidXQgdGhhdCdzIG5lZ2xp Z2libGUgY29tcGFyZWQgdG8gdGhlIHRvdGFsKS4KKworQnkgZGVkdXBsaWNh dGluZyB0aGUgdmFsdWVzIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIDE2LWJp dCBpbmRleGVzICh1aW50MTYpLCB3ZQorcmVkdWNlIHRoZSByZXF1aXJlZCBz cGFjZSB0bworCisgICAgMTAwNyAqIDggKyA4MDAwICogMiB+PSAyNGtCCisK K3doaWNoIGlzIHNpZ25pZmljYW50bHkgbGVzcyB0aGFuIDY0a0IgcmVxdWly ZWQgZm9yIHRoZSAncmF3JyBoaXN0b2dyYW0gKGFzc3VtaW5nCit0aGUgdmFs dWVzIGFyZSA4QikuCisKK1doaWxlIHRoZSBieXRlYSBjb21wcmVzc2lvbiAo cGdseikgbWlnaHQgYWNoaWV2ZSB0aGUgc2FtZSByZWR1Y3Rpb24gb2Ygc3Bh Y2UsCit0aGUgZGVkdXBsaWNhdGVkIHJlcHJlc2VudGF0aW9uIGlzIHVzZWQg dG8gb3B0aW1pemUgdGhlIGVzdGltYXRpb24gYnkgY2FjaGluZworcmVzdWx0 cyBvZiBmdW5jdGlvbiBjYWxscyBmb3IgYWxyZWFkeSB2aXNpdGVkIHZhbHVl cy4gVGhpcyBzaWduaWZpY2FudGx5CityZWR1Y2VzIHRoZSBudW1iZXIgb2Yg Y2FsbHMgdG8gKG9mdGVuIHF1aXRlIGV4cGVuc2l2ZSkgb3BlcmF0b3JzLgor CitOb3RlOiBPZiBjb3Vyc2UsIHRoaXMgcmVhc29uaW5nIG9ubHkgaG9sZHMg Zm9yIGhpc3RvZ3JhbXMgYnVpbHQgYnkgdGhlIGFsZ29yaXRobQordGhhdCBz aW1wbHkgc3BsaXRzIHRoZSBidWNrZXRzIGluIGhhbGYuIE90aGVyIGhpc3Rv Z3JhbXMgdHlwZXMgKGUuZy4gY29udGFpbmluZworb3ZlcmxhcHBpbmcgYnVj a2V0cykgbWF5IGJlaGF2ZSBkaWZmZXJlbnRseSBhbmQgcmVxdWlyZSBkaWZm ZXJlbnQgc2VyaWFsaXphdGlvbi4KKworU2VyaWFsaXplZCBoaXN0b2dyYW1z IGFyZSBtYXJrZWQgd2l0aCAnbWFnaWMnIGNvbnN0YW50LCB0byBtYWtlIGl0 IGVhc2llciB0bworY2hlY2sgdGhlIGJ5dGVhIHZhbHVlIHJlYWxseSBpcyBh IHNlcmlhbGl6ZWQgaGlzdG9ncmFtLgorCisKK3ZhcmxlbmEgY29tcHJlc3Np b24KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzZXJpYWxpemF0aW9u IG1heSBob3dldmVyIGRpc2FibGUgYXV0b21hdGljIHZhcmxlbmEgY29tcHJl c3Npb24sIHRoZSBhcnJheQorb2YgdW5pcXVlIHZhbHVlcyBpcyBwbGFjZWQg YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VyaWFsaXplZCBmb3JtLiBXaGlj aCBpcworZXhhY3RseSB0aGUgY2h1bmsgdXNlZCBieSBwZ2x6IHRvIGNoZWNr IGlmIHRoZSBkYXRhIGlzIGNvbXByZXNzaWJsZSwgYW5kIGl0Cit3aWxsIHBy b2JhYmx5IGRlY2lkZSBpdCdzIG5vdCB2ZXJ5IGNvbXByZXNzaWJsZS4gVGhp cyBpcyBzaW1pbGFyIHRvIHRoZSBpc3N1ZQord2UgaGFkIHdpdGggSlNPTkIg aW5pdGlhbGx5LgorCitNYXliZSBzdG9yaW5nIGJ1Y2tldHMgZmlyc3Qgd291 bGQgbWFrZSBpdCB3b3JrLCBhcyB0aGUgYnVja2V0cyBtYXkgYmUgYmV0dGVy Citjb21wcmVzc2libGUuCisKK09uIHRoZSBvdGhlciBoYW5kIHRoZSBzZXJp YWxpemF0aW9uIGlzIGFjdHVhbGx5IGEgY29udGV4dC1hd2FyZSBjb21wcmVz c2lvbiwKK3VzdWFsbHkgY29tcHJlc3NpbmcgdG8gfjMwJSAob3IgZXZlbiBs ZXNzLCB3aXRoIGxhcmdlIGRhdGEgdHlwZXMpLiBTbyB0aGUgbGFjaworb2Yg YWRkaXRpb25hbCBwZ2x6IGNvbXByZXNzaW9uIG1heSBiZSBhY2NlcHRhYmxl LgorCisKK0Rlc2VyaWFsaXphdGlvbgorLS0tLS0tLS0tLS0tLS0tCisKK1Ro ZSBkZXNlcmlhbGl6YXRpb24gaXMgbm90IGEgcGVyZmVjdCBpbnZlcnNlIG9m IHRoZSBzZXJpYWxpemF0aW9uLCBhcyB3ZSBrZWVwCit0aGUgZGVkdXBsaWNh dGVkIGFycmF5cy4gVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgbWVtb3J5 IGFuZCBhbHNvIGFsbG93cworb3B0aW1pemF0aW9ucyBkdXJpbmcgZXN0aW1h dGlvbiAoZS5nLiB3ZSBjYW4gY2FjaGUgcmVzdWx0cyBmb3IgdGhlIGRpc3Rp bmN0Cit2YWx1ZXMsIHNhdmluZyBleHBlbnNpdmUgZnVuY3Rpb24gY2FsbHMp LgorCisKK0luc3BlY3RpbmcgdGhlIGhpc3RvZ3JhbQorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisKK0luc3BlY3RpbmcgdGhlIHJlZ3VsYXIgKHBlci1h dHRyaWJ1dGUpIGhpc3RvZ3JhbXMgaXMgdHJpdmlhbCwgYXMgaXQncyBlbm91 Z2gKK3RvIHNlbGVjdCB0aGUgY29sdW1ucyBmcm9tIHBnX3N0YXRzIC0gdGhl IGRhdGEgaXMgZW5jb2RlZCBhcyBhbnlhcnJheSwgc28gd2UKK3NpbXBseSBn ZXQgdGhlIHRleHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFycmF5LgorCitX aXRoIG11bHRpdmFyaWF0ZSBoaXN0b2dyYW1zIGl0J3Mgbm90IHRoYXQgc2lt cGxlIGR1ZSB0byB0aGUgcG9zc2libGUgbWl4IG9mCitkYXRhIHR5cGVzIGlu IHRoZSBoaXN0b2dyYW0uIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHByb2R1 Y2Ugc2ltaWxhciBhcnJheS1saWtlCit0ZXh0IHJlcHJlc2VudGF0aW9uLCBi dXQgdGhhdCdkIHVubmVjZXNzYXJpbHkgY29tcGxpY2F0ZSBmdXJ0aGVyIHBy b2Nlc3NpbmcKK2FuZCBhbmFseXNpcyBvZiB0aGUgaGlzdG9ncmFtLiBJbnN0 ZWFkLCB0aGVyZSdzIGEgU1JGIGZ1bmN0aW9uIHRoYXQgYWxsb3dzCithY2Nl c3MgdG8gbG93ZXIvdXBwZXIgYm91bmRhcmllcywgZnJlcXVlbmNpZXMgZXRj LgorCisgICAgU0VMRUNUICogRlJPTSBwZ19tdl9oaXN0b2dyYW1fYnVja2V0 cygpOworCitJdCBoYXMgdHdvIGlucHV0IHBhcmFtZXRlcnM6CisKKyAgICBv aWQgICAtIE9JRCBvZiB0aGUgaGlzdG9ncmFtIChwZ19tdl9zdGF0aXN0aWMu c3Rhb2lkKQorICAgIG90eXBlIC0gdHlwZSBvZiBvdXRwdXQKKworYW5kIHBy b2R1Y2VzIGEgdGFibGUgd2l0aCB0aGVzZSBjb2x1bW5zOgorCisgICAgLSBi dWNrZXQgSUQgICAgICAgICAgICAgICAgKDAuLi5uYnVja2V0cy0xKQorICAg IC0gbG93ZXIgYnVja2V0IGJvdW5kYXJpZXMgIChzdHJpbmcgYXJyYXkpCisg ICAgLSB1cHBlciBidWNrZXQgYm91bmRhcmllcyAgKHN0cmluZyBhcnJheSkK KyAgICAtIG51bGxzIG9ubHkgZGltZW5zaW9ucyAgICAoYm9vbGVhbiBhcnJh eSkKKyAgICAtIGxvd2VyIGJvdW5kYXJ5IGluY2x1c2l2ZSAoYm9vbGVhbiBh cnJheSkKKyAgICAtIHVwcGVyIGJvdW5kYXJ5IGluY2x1ZGl2ZSAoYm9vbGVh biBhcnJheSkKKyAgICAtIGZyZXF1ZW5jeSAgICAgICAgICAgICAgICAoZG91 YmxlIHByZWNpc2lvbikKKworVGhlICdvdHlwZScgYWNjZXB0cyB0aHJlZSB2 YWx1ZXMsIGRldGVybWluaW5nIHdoYXQgd2lsbCBiZSByZXR1cm5lZCBpbiB0 aGUKK2xvd2VyL3VwcGVyIGJvdW5kYXJ5IGFycmF5czoKKworICAgIC0gMCAt IHZhbHVlcyBzdG9yZWQgaW4gdGhlIGhpc3RvZ3JhbSwgZW5jb2RlZCBhcyB0 ZXh0CisgICAgLSAxIC0gaW5kZXhlcyBpbnRvIHRoZSBkZWR1cGxpY2F0ZWQg YXJyYXlzCisgICAgLSAyIC0gaWRuZXhlcyBpbnRvIHRoZSBkZWR1cGxpY2F0 ZWQgYXJyYXlzLCBzY2FsZWQgdG8gWzAsMV0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzIGIvc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMKaW5kZXggNWM1YzU5YS4u M2U0ZjRkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9SRUFETUUuc3RhdHMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0 cy9SRUFETUUuc3RhdHMKQEAgLTE4LDYgKzE4LDggQEAgQ3VycmVudGx5IHdl IG9ubHkgaGF2ZSB0d28ga2luZHMgb2YgbXVsdGl2YXJpYXRlIHN0YXRpc3Rp Y3MKIAogICAgIChiKSBNQ1YgbGlzdHMgKFJFQURNRS5tY3YpCiAKKyAgICAo YykgbXVsdGl2YXJpYXRlIGhpc3RvZ3JhbXMgKFJFQURNRS5oaXN0b2dyYW0p CisKIAogQ29tcGF0aWJsZSBjbGF1c2UgdHlwZXMKIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0 YXRzL2NvbW1vbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21t b24uYwppbmRleCBkMWRhNzE0Li5mZmI3NmY0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMKQEAgLTEzLDExICsxMywxMSBA QAogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5o IgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLSNpbmNsdWRlICJ1dGlscy9h cnJheS5oIgotCiBzdGF0aWMgVmFjQXR0clN0YXRzICoqIGxvb2t1cF92YXJf YXR0cl9zdGF0cyhpbnQydmVjdG9yICphdHRycywKIAkJCQkJCQkJCQkJIGlu dCBuYXR0cywKIAkJCQkJCQkJCQkJIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJz dGF0cyk7CkBAIC01Miw3ICs1Miw4IEBAIGJ1aWxkX212X3N0YXRzKFJlbGF0 aW9uIG9uZXJlbCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAkJ TVZTdGF0aXN0aWNJbmZvICpzdGF0ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxm aXJzdChsYyk7CiAJCU1WRGVwZW5kZW5jaWVzCWRlcHMgID0gTlVMTDsKIAkJ TUNWTGlzdAkJbWN2bGlzdCAgID0gTlVMTDsKLQkJaW50IG51bXJvd3NfZmls dGVyZWQgID0gMDsKKwkJTVZIaXN0b2dyYW0JaGlzdG9ncmFtID0gTlVMTDsK KwkJaW50IG51bXJvd3NfZmlsdGVyZWQgID0gbnVtcm93czsKIAogCQlWYWNB dHRyU3RhdHMgICoqc3RhdHMgID0gTlVMTDsKIAkJaW50CQkJCW51bWF0dHMg ICA9IDA7CkBAIC05NSw4ICs5NiwxMiBAQCBidWlsZF9tdl9zdGF0cyhSZWxh dGlvbiBvbmVyZWwsIGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCiAJ CWlmIChzdGF0LT5tY3ZfZW5hYmxlZCkKIAkJCW1jdmxpc3QgPSBidWlsZF9t dl9tY3ZsaXN0KG51bXJvd3MsIHJvd3MsIGF0dHJzLCBzdGF0cywgJm51bXJv d3NfZmlsdGVyZWQpOwogCisJCS8qIGJ1aWxkIGEgbXVsdGl2YXJpYXRlIGhp c3RvZ3JhbSBvbiB0aGUgY29sdW1ucyAqLworCQlpZiAoKG51bXJvd3NfZmls dGVyZWQgPiAwKSAmJiAoc3RhdC0+aGlzdF9lbmFibGVkKSkKKwkJCWhpc3Rv Z3JhbSA9IGJ1aWxkX212X2hpc3RvZ3JhbShudW1yb3dzX2ZpbHRlcmVkLCBy b3dzLCBhdHRycywgc3RhdHMsIG51bXJvd3MpOworCiAJCS8qIHN0b3JlIHRo ZSBoaXN0b2dyYW0gLyBNQ1YgbGlzdCBpbiB0aGUgY2F0YWxvZyAqLwotCQl1 cGRhdGVfbXZfc3RhdHMoc3RhdC0+bXZvaWQsIGRlcHMsIG1jdmxpc3QsIGF0 dHJzLCBzdGF0cyk7CisJCXVwZGF0ZV9tdl9zdGF0cyhzdGF0LT5tdm9pZCwg ZGVwcywgbWN2bGlzdCwgaGlzdG9ncmFtLCBhdHRycywgc3RhdHMpOwogCX0K IH0KIApAQCAtMTc2LDYgKzE4MSw4IEBAIGxpc3RfbXZfc3RhdHMoT2lkIHJl bGlkKQogCQlpbmZvLT5kZXBzX2J1aWx0ID0gc3RhdHMtPmRlcHNfYnVpbHQ7 CiAJCWluZm8tPm1jdl9lbmFibGVkID0gc3RhdHMtPm1jdl9lbmFibGVkOwog CQlpbmZvLT5tY3ZfYnVpbHQgPSBzdGF0cy0+bWN2X2J1aWx0OworCQlpbmZv LT5oaXN0X2VuYWJsZWQgPSBzdGF0cy0+aGlzdF9lbmFibGVkOworCQlpbmZv LT5oaXN0X2J1aWx0ID0gc3RhdHMtPmhpc3RfYnVpbHQ7CiAKIAkJcmVzdWx0 ID0gbGFwcGVuZChyZXN1bHQsIGluZm8pOwogCX0KQEAgLTE5MCw3ICsxOTcs NiBAQCBsaXN0X212X3N0YXRzKE9pZCByZWxpZCkKIAlyZXR1cm4gcmVzdWx0 OwogfQogCi0KIC8qCiAgKiBGaW5kIGF0dG5pbXMgb2YgTVYgc3RhdHMgdXNp bmcgdGhlIG12b2lkLgogICovCkBAIC0yMzYsOSArMjQyLDE2IEBAIGZpbmRf bXZfYXR0bnVtcyhPaWQgbXZvaWQsIE9pZCAqcmVsaWQpCiB9CiAKIAorLyoK KyAqIEZJWE1FIFRoaXMgYWRkcyBzdGF0aXN0aWNzLCBidXQgd2UgbmVlZCB0 byBkcm9wIHN0YXRpc3RpY3Mgd2hlbiB0aGUKKyAqICAgICAgIHRhYmxlIGlz IGRyb3BwZWQuIE5vdCBzdXJlIHdoYXQgdG8gZG8gd2hlbiBhIGNvbHVtbiBp cyBkcm9wcGVkLgorICogICAgICAgRWl0aGVyIHdlIGNhbiAoYSkgcmVtb3Zl IGFsbCBzdGF0cyBvbiB0aGF0IGNvbHVtbiwgKGIpIHJlbW92ZQorICogICAg ICAgdGhlIGNvbHVtbiBmcm9tIGRlZmluZWQgc3RhdHMgYW5kIGZvcmNlIHJl YnVpbGQsIChjKSByZW1vdmUgdGhlCisgKiAgICAgICBjb2x1bW4gb24gbmV4 dCBBTkFMWVpFLiBPciBtYXliZSBzb21ldGhpbmcgZWxzZT8KKyAqLwogdm9p ZAogdXBkYXRlX212X3N0YXRzKE9pZCBtdm9pZCwKLQkJCQlNVkRlcGVuZGVu Y2llcyBkZXBlbmRlbmNpZXMsIE1DVkxpc3QgbWN2bGlzdCwKKwkJCQlNVkRl cGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsIE1DVkxpc3QgbWN2bGlzdCwgTVZI aXN0b2dyYW0gaGlzdG9ncmFtLAogCQkJCWludDJ2ZWN0b3IgKmF0dHJzLCBW YWNBdHRyU3RhdHMgKipzdGF0cykKIHsKIAlIZWFwVHVwbGUJc3R1cCwKQEAg LTI3MSwyMiArMjg0LDM0IEBAIHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQs CiAJCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFtY3YgIC0gMV0g PSBQb2ludGVyR2V0RGF0dW0oZGF0YSk7CiAJfQogCisJaWYgKGhpc3RvZ3Jh bSAhPSBOVUxMKQorCXsKKwkJYnl0ZWEgKiBkYXRhID0gc2VyaWFsaXplX212 X2hpc3RvZ3JhbShoaXN0b2dyYW0sIGF0dHJzLCBzdGF0cyk7CisJCW51bGxz W0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWhpc3QtMV0gICAgPSAoZGF0YSA9 PSBOVUxMKTsKKwkJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWhp c3QgLSAxXQorCQkJPSBQb2ludGVyR2V0RGF0dW0oZGF0YSk7CisJfQorCiAJ LyogYWx3YXlzIHJlcGxhY2UgdGhlIHZhbHVlIChlaXRoZXIgYnkgYnl0ZWEg b3IgTlVMTCkgKi8KIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19z dGFkZXBzIC0xXSA9IHRydWU7CiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3RhbWN2IC0xXSA9IHRydWU7CisJcmVwbGFjZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhaGlzdC0xXSA9IHRydWU7CiAKIAkvKiBhbHdheXMg Y2hhbmdlIHRoZSBhdmFpbGFiaWxpdHkgZmxhZ3MgKi8KIAludWxsc1tBbnVt X3BnX212X3N0YXRpc3RpY19kZXBzX2J1aWx0IC0xXSA9IGZhbHNlOwogCW51 bGxzW0FudW1fcGdfbXZfc3RhdGlzdGljX21jdl9idWlsdCAtMV0gPSBmYWxz ZTsKKwludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X2J1aWx0LTFd ID0gZmFsc2U7CiAJbnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rha2V5 cy0xXSAgICAgPSBmYWxzZTsKIAogCS8qIHVzZSB0aGUgbmV3IGF0dG51bXMs IGluIGNhc2Ugd2UgcmVtb3ZlZCBzb21lIGRyb3BwZWQgb25lcyAqLwogCXJl cGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQtMV0gPSB0 cnVlOwogCXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX21jdl9idWls dCAgLTFdID0gdHJ1ZTsKKwlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3Rp Y19oaXN0X2J1aWx0IC0xXSA9IHRydWU7CiAJcmVwbGFjZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfc3Rha2V5cyAtMV0gICAgPSB0cnVlOwogCiAJdmFsdWVz W0FudW1fcGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQtMV0gPSBCb29sR2V0 RGF0dW0oZGVwZW5kZW5jaWVzICE9IE5VTEwpOwogCXZhbHVlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19tY3ZfYnVpbHQgIC0xXSA9IEJvb2xHZXREYXR1bSht Y3ZsaXN0ICE9IE5VTEwpOworCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3Rp Y19oaXN0X2J1aWx0IC0xXSA9IEJvb2xHZXREYXR1bShoaXN0b2dyYW0gIT0g TlVMTCk7CiAJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWtleXMg LTFdICAgID0gUG9pbnRlckdldERhdHVtKGF0dHJzKTsKIAogCS8qIElzIHRo ZXJlIGFscmVhZHkgYSBwZ19tdl9zdGF0aXN0aWMgdHVwbGUgZm9yIHRoaXMg YXR0cmlidXRlPyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bXZzdGF0cy9oaXN0b2dyYW0uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3Rh dHMvaGlzdG9ncmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uOWU1NjIwYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL212c3RhdHMvaGlzdG9ncmFtLmMKQEAgLTAsMCArMSwyMDMyIEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBoaXN0 b2dyYW0uYworICoJICBQT1NUR1JFUyBtdWx0aXZhcmlhdGUgaGlzdG9ncmFt cworICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAx NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5p dmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvaGlzdG9ncmFt LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImZtZ3IuaCIK KyNpbmNsdWRlICJmdW5jYXBpLmgiCisKKyNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgPG1h dGguaD4KKworCitzdGF0aWMgTVZCdWNrZXQgY3JlYXRlX2luaXRpYWxfbXZf YnVja2V0KGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsCisJCQkJCQkJ CQkJIGludDJ2ZWN0b3IgKmF0dHJzLAorCQkJCQkJCQkJCSBWYWNBdHRyU3Rh dHMgKipzdGF0cyk7CisKK3N0YXRpYyBNVkJ1Y2tldCBzZWxlY3RfYnVja2V0 X3RvX3BhcnRpdGlvbihpbnQgbmJ1Y2tldHMsIE1WQnVja2V0ICogYnVja2V0 cyk7CisKK3N0YXRpYyBNVkJ1Y2tldCBwYXJ0aXRpb25fYnVja2V0KE1WQnVj a2V0IGJ1Y2tldCwgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkJCSBWYWNB dHRyU3RhdHMgKipzdGF0cywKKwkJCQkJCQkJIGludCAqbmRpc3R2YWx1ZXMs IERhdHVtICoqZGlzdHZhbHVlcyk7CisKK3N0YXRpYyBNVkJ1Y2tldCBjb3B5 X212X2J1Y2tldChNVkJ1Y2tldCBidWNrZXQsIHVpbnQzMiBuZGltZW5zaW9u cyk7CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9idWNrZXRfbmRpc3RpbmN0KE1W QnVja2V0IGJ1Y2tldCwgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkJCQlW YWNBdHRyU3RhdHMgKiogc3RhdHMpOworCitzdGF0aWMgdm9pZCB1cGRhdGVf ZGltZW5zaW9uX25kaXN0aW5jdChNVkJ1Y2tldCBidWNrZXQsIGludCBkaW1l bnNpb24sCisJCQkJCQkJCQkgICBpbnQydmVjdG9yICphdHRycywKKwkJCQkJ CQkJCSAgIFZhY0F0dHJTdGF0cyAqKiBzdGF0cywKKwkJCQkJCQkJCSAgIGJv b2wgdXBkYXRlX2JvdW5kYXJpZXMpOworCitzdGF0aWMgdm9pZCBjcmVhdGVf bnVsbF9idWNrZXRzKE1WSGlzdG9ncmFtIGhpc3RvZ3JhbSwgaW50IGJ1Y2tl dF9pZHgsCisJCQkJCQkJCWludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3Rh dHMgKiogc3RhdHMpOworCitzdGF0aWMgaW50IGJzZWFyY2hfY29tcGFyYXRv cihjb25zdCB2b2lkICogYSwgY29uc3Qgdm9pZCAqIGIpOworCisvKgorICog RWFjaCBzZXJpYWxpemVkIGJ1Y2tldCBuZWVkcyB0byBzdG9yZSAoaW4gdGhp cyBvcmRlcik6CisgKgorICogLSBudW1iZXIgb2YgdHVwbGVzICAgICAoZmxv YXQpCisgKiAtIG51bWJlciBvZiBkaXN0aW5jdCAgIChmbG9hdCkKKyAqIC0g bWluIGluY2x1c2l2ZSBmbGFncyAgKG5kaW0gKiBzaXplb2YoYm9vbCkpCisg KiAtIG1heCBpbmNsdXNpdmUgZmxhZ3MgIChuZGltICogc2l6ZW9mKGJvb2wp KQorICogLSBudWxsIGRpbWVuc2lvbiBmbGFncyAobmRpbSAqIHNpemVvZihi b29sKSkKKyAqIC0gbWluIGJvdW5kYXJ5IGluZGV4ZXMgKDIgKiBuZGltICog c2l6ZW9mKGludDMyKSkKKyAqIC0gbWF4IGJvdW5kYXJ5IGluZGV4ZXMgKDIg KiBuZGltICogc2l6ZW9mKGludDMyKSkKKyAqCisgKiBTbyBpbiB0b3RhbDoK KyAqCisgKiAgIG5kaW0gKiAoNCAqIHNpemVvZihpbnQzMikgKyAzICogc2l6 ZW9mKGJvb2wpKSArCisgKiAgIDIgKiBzaXplb2YoZmxvYXQpCisgKi8KKyNk ZWZpbmUgQlVDS0VUX1NJWkUobmRpbXMpCVwKKwkobmRpbXMgKiAoNCAqIHNp emVvZih1aW50MTYpICsgMyAqIHNpemVvZihib29sKSkgKyBzaXplb2YoZmxv YXQpKQorCisvKiBwb2ludGVycyBpbnRvIGEgZmxhdCBzZXJpYWxpemVkIGJ1 Y2tldCBvZiBCVUNLRVRfU0laRShuKSBieXRlcyAqLworI2RlZmluZSBCVUNL RVRfTlRVUExFUyhiKQkJKChmbG9hdCopYikKKyNkZWZpbmUgQlVDS0VUX01J Tl9JTkNMKGIsbikJKChib29sKikoYiArIHNpemVvZihmbG9hdCkpKQorI2Rl ZmluZSBCVUNLRVRfTUFYX0lOQ0woYixuKQkoQlVDS0VUX01JTl9JTkNMKGIs bikgKyBuKQorI2RlZmluZSBCVUNLRVRfTlVMTFNfT05MWShiLG4pCShCVUNL RVRfTUFYX0lOQ0woYixuKSArIG4pCisjZGVmaW5lIEJVQ0tFVF9NSU5fSU5E RVhFUyhiLG4pCSgodWludDE2KikoQlVDS0VUX05VTExTX09OTFkoYixuKSAr IG4pKQorI2RlZmluZSBCVUNLRVRfTUFYX0lOREVYRVMoYixuKQkoKEJVQ0tF VF9NSU5fSU5ERVhFUyhiLG4pICsgbikpCisKKy8qIGNhbid0IHNwbGl0IGJ1 Y2tldCB3aXRoIGxlc3MgdGhhbiAxMCByb3dzICovCisjZGVmaW5lIE1JTl9C VUNLRVRfUk9XUwkJCTEwCisKKy8qCisgKiBEYXRhIHVzZWQgd2hpbGUgYnVp bGRpbmcgdGhlIGhpc3RvZ3JhbS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGlz dG9ncmFtQnVpbGREYXRhIHsKKworCWZsb2F0CW5kaXN0aW5jdDsJCS8qIGZy ZXF1ZW5jeSBvZiBkaXN0aW5jdCB2YWx1ZXMgKi8KKworCUhlYXBUdXBsZSAg KnJvd3M7CQkvKiBhcmF5IG9mIHNhbXBsZSByb3dzICovCisJdWludDMyCQlu dW1yb3dzOwkvKiBudW1iZXIgb2Ygc2FtcGxlIHJvd3MgKGFycmF5IHNpemUp ICovCisKKwkvKgorCSAqIE51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMgaW4g ZWFjaCBkaW1lbnNpb24uIFRoaXMgaXMgdXNlZCB3aGVuCisJICogYnVpbGRp bmcgdGhlIGhpc3RvZ3JhbSAoYW5kIGlzIG5vdCBzZXJpYWxpemVkL2Rlc2Vy aWFsaXplZCkuCisJICovCisJdWludDMyICpuZGlzdGluY3RzOworCit9IEhp c3RvZ3JhbUJ1aWxkRGF0YTsKKwordHlwZWRlZiBIaXN0b2dyYW1CdWlsZERh dGEJKkhpc3RvZ3JhbUJ1aWxkOworCisvKgorICogQnVpbGRpbmcgYSBtdWx0 aXZhcmlhdGUgYWxnb3JpdGhtLiBJbiBzaG9ydCBpdCBmaXJzdCBjcmVhdGVz IGEgc2luZ2xlCisgKiBidWNrZXQgY29udGFpbmluZyBhbGwgdGhlIHJvd3Ms IGFuZCB0aGVuIHJlcGVhdGVkbHkgc3BsaXQgaXMgYnkgZmlyc3QKKyAqIHNl YXJjaGluZyBmb3IgdGhlIGJ1Y2tldCAvIGRpbWVuc2lvbiBtb3N0IGluIG5l ZWQgb2YgYSBzcGxpdC4KKyAqCisgKiBUaGUgY3VycmVudCBjcml0ZXJpYSBp cyByYXRoZXIgc2ltcGxlLCBjaG9zZW4gc28gdGhhdCB0aGUgYWxnb3JpdGht CisgKiBwcm9kdWNlcyBidWNrZXRzIHdpdGggYWJvdXQgZXF1YWwgZnJlcXVl bmN5IGFuZCByZWd1bGFyIHNpemUuCisgKgorICogU2VlIHRoZSBkaXNjdXNz aW9uIGF0IHNlbGVjdF9idWNrZXRfdG9fcGFydGl0aW9uIGFuZCBwYXJ0aXRp b25fYnVja2V0CisgKiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBhbGdv cml0aG0uCisgKgorICogVGhlIGN1cnJlbnQgYWxnb3JpdGhtIHdvcmtzIGxp a2UgdGhpczoKKyAqCisgKiAgICAgYnVpbGQgTlVMTC1idWNrZXRzIChjcmVh dGVfbnVsbF9idWNrZXRzKQorICoKKyAqICAgICB3aGlsZSBbbm90IHJlYWNo aW5nIG1heGltdW0gbnVtYmVyIG9mIGJ1Y2tldHNdCisgKgorICogICAgICAg ICBjaG9vc2UgYnVja2V0IHRvIHBhcnRpdGlvbiAobGFyZ2VzdCBidWNrZXQp CisgKiAgICAgICAgICAgICBpZiBubyBidWNrZXQgdG8gcGFydGl0aW9uCisg KiAgICAgICAgICAgICAgICAgdGVybWluYXRlIHRoZSBhbGdvcml0aG0KKyAq CisgKiAgICAgICAgIGNob29zZSBidWNrZXQgZGltZW5zaW9uIHRvIHBhcnRp dGlvbiAobGFyZ2VzdCBkaW1lbnNpb24pCisgKiAgICAgICAgICAgICBzcGxp dCB0aGUgYnVja2V0IGludG8gdHdvIGJ1Y2tldHMKKyAqLworTVZIaXN0b2dy YW0KK2J1aWxkX212X2hpc3RvZ3JhbShpbnQgbnVtcm93cywgSGVhcFR1cGxl ICpyb3dzLCBpbnQydmVjdG9yICphdHRycywKKwkJCQkgICBWYWNBdHRyU3Rh dHMgKipzdGF0cywgaW50IG51bXJvd3NfdG90YWwpCit7CisJaW50IGk7CisJ aW50IG51bWF0dHJzID0gYXR0cnMtPmRpbTE7CisKKwlpbnQJCQkgICAqbmRp c3R2YWx1ZXM7CisJRGF0dW0JCSAgKipkaXN0dmFsdWVzOworCisJTVZIaXN0 b2dyYW0gaGlzdG9ncmFtID0gKE1WSGlzdG9ncmFtKXBhbGxvYzAoc2l6ZW9m KE1WSGlzdG9ncmFtRGF0YSkpOworCisJSGVhcFR1cGxlICogcm93c19jb3B5 ID0gKEhlYXBUdXBsZSopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKEhlYXBU dXBsZSkpOworCW1lbWNweShyb3dzX2NvcHksIHJvd3MsIHNpemVvZihIZWFw VHVwbGUpICogbnVtcm93cyk7CisKKwlBc3NlcnQoKG51bWF0dHJzID49IDIp ICYmIChudW1hdHRycyA8PSBNVlNUQVRTX01BWF9ESU1FTlNJT05TKSk7CisK KwloaXN0b2dyYW0tPm5kaW1lbnNpb25zID0gbnVtYXR0cnM7CisKKwloaXN0 b2dyYW0tPm1hZ2ljID0gTVZTVEFUX0hJU1RfTUFHSUM7CisJaGlzdG9ncmFt LT50eXBlICA9IE1WU1RBVF9ISVNUX1RZUEVfQkFTSUM7CisJaGlzdG9ncmFt LT5uYnVja2V0cyA9IDE7CisKKwkvKiBjcmVhdGUgbWF4IGJ1Y2tldHMgKGJl dHRlciB0aGFuIHJlcGFsbG9jIGZvciBzaG9ydC1saXZlZCBvYmplY3RzKSAq LworCWhpc3RvZ3JhbS0+YnVja2V0cworCQk9IChNVkJ1Y2tldCopcGFsbG9j MChNVlNUQVRfSElTVF9NQVhfQlVDS0VUUyAqIHNpemVvZihNVkJ1Y2tldCkp OworCisJLyogY3JlYXRlIHRoZSBpbml0aWFsIGJ1Y2tldCwgY292ZXJpbmcg dGhlIHdob2xlIHNhbXBsZSBzZXQgKi8KKwloaXN0b2dyYW0tPmJ1Y2tldHNb MF0KKwkJPSBjcmVhdGVfaW5pdGlhbF9tdl9idWNrZXQobnVtcm93cywgcm93 c19jb3B5LCBhdHRycywgc3RhdHMpOworCisJLyoKKwkgKiBDb2xsZWN0IGlu Zm8gb24gZGlzdGluY3QgdmFsdWVzIGluIGVhY2ggZGltZW5zaW9uICh1c2Vk IGxhdGVyCisJICogdG8gc2VsZWN0IGRpbWVuc2lvbiB0byBwYXJ0aXRpb24p LgorCSAqLworCW5kaXN0dmFsdWVzID0gKGludCopcGFsbG9jMChzaXplb2Yo aW50KSAqIG51bWF0dHJzKTsKKwlkaXN0dmFsdWVzICA9IChEYXR1bSoqKXBh bGxvYzAoc2l6ZW9mKERhdHVtKikgKiBudW1hdHRycyk7CisKKwlmb3IgKGkg PSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKKwl7CisJCWludAkJCQlqOworCQlp bnQJCQkJbnZhbHM7CisJCURhdHVtCQkgICAqdG1wOworCisJCVNvcnRTdXBw b3J0RGF0YQlzc3VwOworCQlTdGRBbmFseXplRGF0YSAqbXlzdGF0cyA9IChT dGRBbmFseXplRGF0YSAqKSBzdGF0c1tpXS0+ZXh0cmFfZGF0YTsKKworCQkv KiBpbml0aWFsaXplIHNvcnQgc3VwcG9ydCwgZXRjLiAqLworCQltZW1zZXQo JnNzdXAsIDAsIHNpemVvZihzc3VwKSk7CisJCXNzdXAuc3N1cF9jeHQgPSBD dXJyZW50TWVtb3J5Q29udGV4dDsKKworCQkvKiBXZSBhbHdheXMgdXNlIHRo ZSBkZWZhdWx0IGNvbGxhdGlvbiBmb3Igc3RhdGlzdGljcyAqLworCQlzc3Vw LnNzdXBfY29sbGF0aW9uID0gREVGQVVMVF9DT0xMQVRJT05fT0lEOworCQlz c3VwLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsKKworCQlQcmVwYXJlU29y dFN1cHBvcnRGcm9tT3JkZXJpbmdPcChteXN0YXRzLT5sdG9wciwgJnNzdXAp OworCisJCW52YWxzID0gMDsKKwkJdG1wID0gKERhdHVtKilwYWxsb2MwKHNp emVvZihEYXR1bSkgKiBudW1yb3dzKTsKKworCQlmb3IgKGogPSAwOyBqIDwg bnVtcm93czsgaisrKQorCQl7CisJCQlib29sCWlzbnVsbDsKKworCQkJLyog cmVtZW1iZXIgdGhlIGluZGV4IG9mIHRoZSBzYW1wbGUgcm93LCB0byBtYWtl IHRoZSBwYXJ0aXRpb25pbmcgc2ltcGxlciAqLworCQkJRGF0dW0JdmFsdWUg PSBoZWFwX2dldGF0dHIocm93c1tqXSwgYXR0cnMtPnZhbHVlc1tpXSwKKwkJ CQkJCQkJCQkgc3RhdHNbaV0tPnR1cERlc2MsICZpc251bGwpOworCisJCQlp ZiAoaXNudWxsKQorCQkJCWNvbnRpbnVlOworCisJCQl0bXBbbnZhbHMrK10g PSB2YWx1ZTsKKwkJfQorCisJCS8qIGRvIHRoZSBzb3J0IGFuZCBzdHVmZiBv bmx5IGlmIHRoZXJlIGFyZSBub24tTlVMTCB2YWx1ZXMgKi8KKwkJaWYgKG52 YWxzID4gMCkKKwkJeworCQkJLyogc29ydCB0aGUgYXJyYXkgb2YgdmFsdWVz ICovCisJCQlxc29ydF9hcmcoKHZvaWQgKikgdG1wLCBudmFscywgc2l6ZW9m KERhdHVtKSwKKwkJCQkJICBjb21wYXJlX3NjYWxhcnNfc2ltcGxlLCAodm9p ZCAqKSAmc3N1cCk7CisKKwkJCS8qIGNvdW50IGRpc3RpbmN0IHZhbHVlcyAq LworCQkJbmRpc3R2YWx1ZXNbaV0gPSAxOworCQkJZm9yIChqID0gMTsgaiA8 IG52YWxzOyBqKyspCisJCQkJaWYgKGNvbXBhcmVfc2NhbGFyc19zaW1wbGUo JnRtcFtqXSwgJnRtcFtqLTFdLCAmc3N1cCkgIT0gMCkKKwkJCQkJbmRpc3R2 YWx1ZXNbaV0gKz0gMTsKKworCQkJLyogRklYTUUgYWxsb2NhdGUgb25seSBu ZWVkZWQgc3BhY2UgKGNvdW50IG5kaXN0aW5jdCBmaXJzdCkgKi8KKwkJCWRp c3R2YWx1ZXNbaV0gPSAoRGF0dW0qKXBhbGxvYzAoc2l6ZW9mKERhdHVtKSAq IG5kaXN0dmFsdWVzW2ldKTsKKworCQkJLyogbm93IGNvbGxlY3QgZGlzdGlu Y3QgdmFsdWVzIGludG8gdGhlIGFycmF5ICovCisJCQlkaXN0dmFsdWVzW2ld WzBdID0gdG1wWzBdOworCQkJbmRpc3R2YWx1ZXNbaV0gPSAxOworCisJCQlm b3IgKGogPSAxOyBqIDwgbnZhbHM7IGorKykKKwkJCXsKKwkJCQlpZiAoY29t cGFyZV9zY2FsYXJzX3NpbXBsZSgmdG1wW2pdLCAmdG1wW2otMV0sICZzc3Vw KSAhPSAwKQorCQkJCXsKKwkJCQkJZGlzdHZhbHVlc1tpXVtuZGlzdHZhbHVl c1tpXV0gPSB0bXBbal07CisJCQkJCW5kaXN0dmFsdWVzW2ldICs9IDE7CisJ CQkJfQorCQkJfQorCQl9CisKKwkJcGZyZWUodG1wKTsKKwl9CisKKwkvKgor CSAqIFRoZSBpbml0aWFsIGJ1Y2tldCBtYXkgY29udGFpbiBOVUxMIHZhbHVl cywgc28gd2UgaGF2ZSB0byBjcmVhdGUKKwkgKiBidWNrZXRzIHdpdGggTlVM TC1vbmx5IGRpbWVuc2lvbnMuCisJICoKKwkgKiBGSVhNRSBXZSBtYXkgbmVl ZCB1cCB0byAyXm5kaW1zIGJ1Y2tldHMgLSBjaGVjayB0aGF0IHRoZXJlIGFy ZQorCSAqICAgICAgIGVub3VnaCBidWNrZXRzIChNVlNUQVRfSElTVF9NQVhf QlVDS0VUUyA+PSAyXm5kaW1zKS4KKwkgKi8KKwljcmVhdGVfbnVsbF9idWNr ZXRzKGhpc3RvZ3JhbSwgMCwgYXR0cnMsIHN0YXRzKTsKKworCXdoaWxlICho aXN0b2dyYW0tPm5idWNrZXRzIDwgTVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMp CisJeworCQlNVkJ1Y2tldCBidWNrZXQgPSBzZWxlY3RfYnVja2V0X3RvX3Bh cnRpdGlvbihoaXN0b2dyYW0tPm5idWNrZXRzLAorCQkJCQkJCQkJCQkJCSBo aXN0b2dyYW0tPmJ1Y2tldHMpOworCisJCS8qIG5vIG1vcmUgYnVja2V0cyB0 byBwYXJ0aXRpb24gKi8KKwkJaWYgKGJ1Y2tldCA9PSBOVUxMKQorCQkJYnJl YWs7CisKKwkJaGlzdG9ncmFtLT5idWNrZXRzW2hpc3RvZ3JhbS0+bmJ1Y2tl dHNdCisJCQk9IHBhcnRpdGlvbl9idWNrZXQoYnVja2V0LCBhdHRycywgc3Rh dHMsCisJCQkJCQkJICAgbmRpc3R2YWx1ZXMsIGRpc3R2YWx1ZXMpOworCisJ CWhpc3RvZ3JhbS0+bmJ1Y2tldHMgKz0gMTsKKwl9CisKKwkvKiBmaW5hbGl6 ZSB0aGUgZnJlcXVlbmNpZXMgZXRjLiAqLworCWZvciAoaSA9IDA7IGkgPCBo aXN0b2dyYW0tPm5idWNrZXRzOyBpKyspCisJeworCQlIaXN0b2dyYW1CdWls ZCBidWlsZF9kYXRhCisJCQk9ICgoSGlzdG9ncmFtQnVpbGQpaGlzdG9ncmFt LT5idWNrZXRzW2ldLT5idWlsZF9kYXRhKTsKKworCQkvKgorCQkgKiBUaGUg ZnJlcXVlbmN5IGhhcyB0byBiZSBjb21wdXRlZCBmcm9tIHRoZSB3aG9sZSBz YW1wbGUsIGluCisJCSAqIGNhc2Ugc29tZSBvZiB0aGUgcm93cyB3ZXJlIHVz ZWQgZm9yIE1DViAoYW5kIHRodXMgYXJlIG1pc3NpbmcKKwkJICogZnJvbSB0 aGUgaGlzdG9ncmFtKS4KKwkJICovCisJCWhpc3RvZ3JhbS0+YnVja2V0c1tp XS0+bnR1cGxlcworCQkJPSAoYnVpbGRfZGF0YS0+bnVtcm93cyAqIDEuMCkg LyBudW1yb3dzX3RvdGFsOworCX0KKworCXJldHVybiBoaXN0b2dyYW07Cit9 CisKKy8qIGZldGNoIHRoZSBoaXN0b2dyYW0gKGFzIGEgYnl0ZWEpIGZyb20g dGhlIHBnX212X3N0YXRpc3RpYyBjYXRhbG9nICovCitNVlNlcmlhbGl6ZWRI aXN0b2dyYW0KK2xvYWRfbXZfaGlzdG9ncmFtKE9pZCBtdm9pZCkKK3sKKwli b29sCQlpc251bGwgPSBmYWxzZTsKKwlEYXR1bQkJaGlzdG9ncmFtOworCisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUZvcm1fcGdfbXZfc3RhdGlz dGljCW12c3RhdDsKKyNlbmRpZgorCisJLyogUHJlcGFyZSB0byBzY2FuIHBn X212X3N0YXRpc3RpYyBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0 aGlzIHJlbC4gKi8KKwlIZWFwVHVwbGUJaHR1cCA9IFNlYXJjaFN5c0NhY2hl MShNVlNUQVRPSUQsIE9iamVjdElkR2V0RGF0dW0obXZvaWQpKTsKKworCWlm ICghIEhlYXBUdXBsZUlzVmFsaWQoaHR1cCkpCisJCXJldHVybiBOVUxMOwor CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCW12c3RhdCA9IChGb3Jt X3BnX212X3N0YXRpc3RpYykgR0VUU1RSVUNUKGh0dXApOworCUFzc2VydCht dnN0YXQtPmhpc3RfZW5hYmxlZCAmJiBtdnN0YXQtPmhpc3RfYnVpbHQpOwor I2VuZGlmCisKKwloaXN0b2dyYW0gPSBTeXNDYWNoZUdldEF0dHIoTVZTVEFU T0lELCBodHVwLAorCQkJCQkJICAgQW51bV9wZ19tdl9zdGF0aXN0aWNfc3Rh aGlzdCwgJmlzbnVsbCk7CisKKwlBc3NlcnQoIWlzbnVsbCk7CisKKwlSZWxl YXNlU3lzQ2FjaGUoaHR1cCk7CisKKwlyZXR1cm4gZGVzZXJpYWxpemVfbXZf aGlzdG9ncmFtKERhdHVtR2V0Qnl0ZWFQKGhpc3RvZ3JhbSkpOworfQorCisv KiBwcmludCBzb21lIGJhc2ljIGluZm8gYWJvdXQgdGhlIGhpc3RvZ3JhbSAq LworRGF0dW0KK3BnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJYnl0ZWEJICAgKmRhdGEgPSBQR19HRVRBUkdfQllU RUFfUCgwKTsKKwljaGFyCSAgICpyZXN1bHQ7CisKKwlNVlNlcmlhbGl6ZWRI aXN0b2dyYW0gaGlzdCA9IGRlc2VyaWFsaXplX212X2hpc3RvZ3JhbShkYXRh KTsKKworCXJlc3VsdCA9IHBhbGxvYzAoMTI4KTsKKwlzbnByaW50ZihyZXN1 bHQsIDEyOCwgIm5idWNrZXRzPSVkIiwgaGlzdC0+bmJ1Y2tldHMpOworCisJ UEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQocmVzdWx0KSk7Cit9 CisKKworLyogdXNlZCB0byBwYXNzIGNvbnRleHQgaW50byBic2VhcmNoKCkg Ki8KK3N0YXRpYyBTb3J0U3VwcG9ydCBzc3VwX3ByaXZhdGUgPSBOVUxMOwor CisvKgorICogU2VyaWFsaXplIHRoZSBNViBoaXN0b2dyYW0gaW50byBhIGJ5 dGVhIHZhbHVlLiBUaGUgYmFzaWMgYWxnb3JpdGhtIGlzIHF1aXRlCisgKiBz aW1wbGUsIGFuZCBtb3N0bHkgbWltaW5jcyB0aGUgTUNWIHNlcmlhbGl6YXRp b246CisgKgorICogKDEpIHBlcmZvcm0gZGVkdXBsaWNhdGlvbiBmb3IgZWFj aCBhdHRyaWJ1dGUgKHNlcGFyYXRlbHkpCisgKgorICogICAgIChhKSBjb2xs ZWN0IGFsbCAobm9uLU5VTEwpIGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBhbGwg YnVja2V0cworICogICAgIChiKSBzb3J0IHRoZSBkYXRhICh1c2luZyAnbHQn IGZyb20gVmFjQXR0clN0YXRzKQorICogICAgIChjKSByZW1vdmUgZHVwbGlj YXRlIHZhbHVlcyBmcm9tIHRoZSBhcnJheQorICoKKyAqICgyKSBzZXJpYWxp emUgdGhlIGFycmF5cyBpbnRvIGEgYnl0ZWEgdmFsdWUKKyAqCisgKiAoMykg cHJvY2VzcyBhbGwgYnVja2V0cworICoKKyAqICAgICAoYSkgcmVwbGFjZSBt aW4vbWF4IHZhbHVlcyB3aXRoIGluZGV4ZXMgaW50byB0aGUgYXJyYXlzCisg KgorICogRWFjaCBhdHRyaWJ1dGUgaGFzIHRvIGJlIHByb2Nlc3NlZCBzZXBh cmF0ZWx5LCBhcyB3ZSdyZSBtaXhpbmcgZGlmZmVyZW50CisgKiBkYXRhdHlw ZXMsIGFuZCB3ZSB3ZSBuZWVkIHRvIHVzZSB0aGUgcmlnaHQgb3BlcmF0b3Jz IHRvIGNvbXBhcmUvc29ydCB0aGVtLgorICogV2UncmUgYWxzbyBtaXhpbmcg cGFzcy1ieS12YWx1ZSBhbmQgcGFzcy1ieS1yZWYgdHlwZXMsIGFuZCBzbyBv bi4KKyAqCisgKgorICogRklYTUUgVGhpcyBwcm9iYWJseSBsZWFrcyBtZW1v cnksIG9yIGF0IGxlYXN0IHVzZXMgaXQgaW5lZmZpY2llbnRseQorICogICAg ICAgKG1hbnkgc21hbGwgcGFsbG9jKCkgY2FsbHMgaW5zdGVhZCBvZiBhIGxh cmdlIG9uZSkuCisgKgorICogVE9ETyBDb25zaWRlciBwYWNraW5nIGJvb2xl YW4gZmxhZ3MgKE5VTEwpIGZvciBlYWNoIGl0ZW0gaW50byAnY2hhcicKKyAq ICAgICAgb3IgYSBsb25nZXIgdHlwZSAoaW5zdGVhZCBvZiB1c2luZyBhbiBh cnJheSBvZiBib29sIGl0ZW1zKS4KKyAqLworYnl0ZWEgKgorc2VyaWFsaXpl X212X2hpc3RvZ3JhbShNVkhpc3RvZ3JhbSBoaXN0b2dyYW0sIGludDJ2ZWN0 b3IgKmF0dHJzLAorCQkJCQkgICBWYWNBdHRyU3RhdHMgKipzdGF0cykKK3sK KwlpbnQgaSA9IDAsIGogPSAwOworCVNpemUJdG90YWxfbGVuZ3RoID0gMDsK KworCWJ5dGVhICAqb3V0cHV0ID0gTlVMTDsKKwljaGFyICAgKmRhdGEgPSBO VUxMOworCisJaW50CQluYnVja2V0cyA9IGhpc3RvZ3JhbS0+bmJ1Y2tldHM7 CisJaW50CQluZGltcyAgICA9IGhpc3RvZ3JhbS0+bmRpbWVuc2lvbnM7CisK KwkvKiBhbGxvY2F0ZWQgZm9yIHNlcmlhbGl6ZWQgYnVja2V0IGRhdGEgKi8K KwlpbnQJCWJ1Y2tldHNpemUgPSBCVUNLRVRfU0laRShuZGltcyk7CisJY2hh ciAgICpidWNrZXQgPSBwYWxsb2MwKGJ1Y2tldHNpemUpOworCisJLyogdmFs dWVzIHBlciBkaW1lbnNpb24gKGFuZCBudW1iZXIgb2Ygbm9uLU5VTEwgdmFs dWVzKSAqLworCURhdHVtICoqdmFsdWVzID0gKERhdHVtKiopcGFsbG9jMChz aXplb2YoRGF0dW0qKSAqIG5kaW1zKTsKKwlpbnQJICAgKmNvdW50cyA9IChp bnQqKXBhbGxvYzAoc2l6ZW9mKGludCkgKiBuZGltcyk7CisKKwkvKiBpbmZv IGFib3V0IGRpbWVuc2lvbnMgKGZvciBkZXNlcmlhbGl6ZSkgKi8KKwlEaW1l bnNpb25JbmZvICogaW5mbworCQkJCT0gKERpbWVuc2lvbkluZm8gKilwYWxs b2MwKHNpemVvZihEaW1lbnNpb25JbmZvKSpuZGltcyk7CisKKwkvKiBzb3J0 IHN1cHBvcnQgZGF0YSAqLworCVNvcnRTdXBwb3J0CXNzdXAgPSAoU29ydFN1 cHBvcnQpcGFsbG9jMChzaXplb2YoU29ydFN1cHBvcnREYXRhKSpuZGltcyk7 CisKKwkvKiBjb2xsZWN0IGFuZCBkZWR1cGxpY2F0ZSB2YWx1ZXMgZm9yIGVh Y2ggZGltZW5zaW9uIHNlcGFyYXRlbHkgKi8KKwlmb3IgKGkgPSAwOyBpIDwg bmRpbXM7IGkrKykKKwl7CisJCWludCBjb3VudDsKKwkJU3RkQW5hbHl6ZURh dGEgKnRtcCA9IChTdGRBbmFseXplRGF0YSAqKXN0YXRzW2ldLT5leHRyYV9k YXRhOworCisJCS8qIGtlZXAgaW1wb3J0YW50IGluZm8gYWJvdXQgdGhlIGRh dGEgdHlwZSAqLworCQlpbmZvW2ldLnR5cGxlbiAgID0gc3RhdHNbaV0tPmF0 dHJ0eXBlLT50eXBsZW47CisJCWluZm9baV0udHlwYnl2YWwgPSBzdGF0c1tp XS0+YXR0cnR5cGUtPnR5cGJ5dmFsOworCisJCS8qCisJCSAqIEFsbG9jYXRl IHNwYWNlIGZvciBhbGwgbWluL21heCB2YWx1ZXMsIGluY2x1ZGluZyBOVUxM cworCQkgKiAod2Ugd29uJ3QgdXNlIHRoZW0sIGJ1dCB3ZSBkb24ndCBrbm93 IGhvdyBtYW55IGFyZSB0aGVyZSksCisJCSAqIGFuZCB0aGVuIGNvbGxlY3Qg YWxsIG5vbi1OVUxMIHZhbHVlcy4KKwkJICovCisJCXZhbHVlc1tpXSA9IChE YXR1bSopcGFsbG9jMChzaXplb2YoRGF0dW0pICogbmJ1Y2tldHMgKiAyKTsK KworCQlmb3IgKGogPSAwOyBqIDwgaGlzdG9ncmFtLT5uYnVja2V0czsgaisr KQorCQl7CisJCQkvKiBza2lwIGJ1Y2tldHMgd2hlcmUgdGhpcyBkaW1lbnNp b24gaXMgTlVMTC1vbmx5ICovCisJCQlpZiAoISBoaXN0b2dyYW0tPmJ1Y2tl dHNbal0tPm51bGxzb25seVtpXSkKKwkJCXsKKwkJCQl2YWx1ZXNbaV1bY291 bnRzW2ldXSA9IGhpc3RvZ3JhbS0+YnVja2V0c1tqXS0+bWluW2ldOworCQkJ CWNvdW50c1tpXSArPSAxOworCisJCQkJdmFsdWVzW2ldW2NvdW50c1tpXV0g PSBoaXN0b2dyYW0tPmJ1Y2tldHNbal0tPm1heFtpXTsKKwkJCQljb3VudHNb aV0gKz0gMTsKKwkJCX0KKwkJfQorCisJCS8qIHRoZXJlIGFyZSBqdXN0IE5V TEwgdmFsdWVzIGluIHRoaXMgZGltZW5zaW9uICovCisJCWlmIChjb3VudHNb aV0gPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIHNvcnQgYW5kIGRlZHVw bGljYXRlICovCisJCXNzdXBbaV0uc3N1cF9jeHQgPSBDdXJyZW50TWVtb3J5 Q29udGV4dDsKKwkJc3N1cFtpXS5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRf Q09MTEFUSU9OX09JRDsKKwkJc3N1cFtpXS5zc3VwX251bGxzX2ZpcnN0ID0g ZmFsc2U7CisKKwkJUHJlcGFyZVNvcnRTdXBwb3J0RnJvbU9yZGVyaW5nT3Ao dG1wLT5sdG9wciwgJnNzdXBbaV0pOworCisJCXFzb3J0X2FyZyh2YWx1ZXNb aV0sIGNvdW50c1tpXSwgc2l6ZW9mKERhdHVtKSwKKwkJCQkJCQkJCQljb21w YXJlX3NjYWxhcnNfc2ltcGxlLCAmc3N1cFtpXSk7CisKKwkJLyoKKwkJICog V2FsayB0aHJvdWdoIHRoZSBhcnJheSBhbmQgZWxpbWluYXRlIGR1cGxpY2l0 YXRlIHZhbHVlcywgYnV0CisJCSAqIGtlZXAgdGhlIG9yZGVyaW5nIChzbyB0 aGF0IHdlIGNhbiBkbyBic2VhcmNoIGxhdGVyKS4gV2Uga25vdworCQkgKiB0 aGVyZSdzIGF0IGxlYXN0IDEgaXRlbSwgc28gd2UgY2FuIHNraXAgdGhlIGZp cnN0IGVsZW1lbnQuCisJCSAqLworCQljb3VudCA9IDE7CS8qIG51bWJlciBv ZiBkZWR1cGxpY2F0ZWQgaXRlbXMgKi8KKwkJZm9yIChqID0gMTsgaiA8IGNv dW50c1tpXTsgaisrKQorCQl7CisJCQkvKiBpZiBpdCdzIGRpZmZlcmVudCBm cm9tIHRoZSBwcmV2aW91cyB2YWx1ZSwgd2UgbmVlZCB0byBrZWVwIGl0ICov CisJCQlpZiAoY29tcGFyZV9kYXR1bXNfc2ltcGxlKHZhbHVlc1tpXVtqLTFd LCB2YWx1ZXNbaV1bal0sICZzc3VwW2ldKSAhPSAwKQorCQkJeworCQkJCS8q IFhYWDogbm90IG5lZWRlZCBpZiAoY291bnQgPT0gaikgKi8KKwkJCQl2YWx1 ZXNbaV1bY291bnRdID0gdmFsdWVzW2ldW2pdOworCQkJCWNvdW50ICs9IDE7 CisJCQl9CisJCX0KKworCQkvKiBtYWtlIHN1cmUgd2UgZml0IGludG8gdWlu dDE2ICovCisJCUFzc2VydChjb3VudCA8PSBVSU5UMTZfTUFYKTsKKworCQkv KiBrZWVwIGluZm8gYWJvdXQgdGhlIGRlZHVwbGljYXRlZCBjb3VudCAqLwor CQlpbmZvW2ldLm52YWx1ZXMgPSBjb3VudDsKKworCQkvKiBjb21wdXRlIHNp emUgb2YgdGhlIHNlcmlhbGl6ZWQgZGF0YSAqLworCQlpZiAoaW5mb1tpXS50 eXBsZW4gPiAwKQorCQkJLyogYnl2YWwgb3IgYnlyZWYsIGJ1dCB3aXRoIGZp eGVkIGxlbmd0aCAobmFtZSwgdGlkLCAuLi4pICovCisJCQlpbmZvW2ldLm5i eXRlcyA9IGluZm9baV0ubnZhbHVlcyAqIGluZm9baV0udHlwbGVuOworCQll bHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAtMSkKKwkJCS8qIHZhcmxlbmEs IHNvIGp1c3QgdXNlIFZBUlNJWkVfQU5ZICovCisJCQlmb3IgKGogPSAwOyBq IDwgaW5mb1tpXS5udmFsdWVzOyBqKyspCisJCQkJaW5mb1tpXS5uYnl0ZXMg Kz0gVkFSU0laRV9BTlkodmFsdWVzW2ldW2pdKTsKKwkJZWxzZSBpZiAoaW5m b1tpXS50eXBsZW4gPT0gLTIpCisJCQkvKiBjc3RyaW5nLCBzbyBzaW1wbHkg c3RybGVuICovCisJCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFsdWVz OyBqKyspCisJCQkJaW5mb1tpXS5uYnl0ZXMgKz0gc3RybGVuKERhdHVtR2V0 UG9pbnRlcih2YWx1ZXNbaV1bal0pKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJP UiwgInVua25vd24gZGF0YSB0eXBlIHR5cGJ5dmFsPSVkIHR5cGxlbj0lZCIs CisJCQkJaW5mb1tpXS50eXBieXZhbCwgaW5mb1tpXS50eXBsZW4pOworCX0K KworCS8qCisJICogTm93IHdlIGZpbmFsbHkga25vdyBob3cgbXVjaCBzcGFj ZSB3ZSdsbCBuZWVkIGZvciB0aGUgc2VyaWFsaXplZAorCSAqIGhpc3RvZ3Jh bSwgYXMgaXQgY29udGFpbnMgdGhlc2UgZmllbGRzOgorCSAqCisJICogLSBs ZW5ndGggKDRCKSBmb3IgdmFybGVuYQorCSAqIC0gbWFnaWMgKDRCKQorCSAq IC0gdHlwZSAoNEIpCisJICogLSBuZGltZW5zaW9ucyAoNEIpCisJICogLSBu YnVja2V0cyAoNEIpCisJICogLSBpbmZvIChuZGltICogc2l6ZW9mKERpbWVu c2lvbkluZm8pCisJICogLSBhcnJheXMgb2YgdmFsdWVzIGZvciBlYWNoIGRp bWVuc2lvbgorCSAqIC0gc2VyaWFsaXplZCBidWNrZXRzIChuYnVja2V0cyAq IGJ1Y2tldHNpemUpCisJICoKKwkgKiBTbyB0aGUgJ2hlYWRlcicgc2l6ZSBp cyAyMEIgKyBuZGltICogc2l6ZW9mKERpbWVuc2lvbkluZm8pIGFuZAorCSAq IHRoZW4gd2UnbGwgcGxhY2UgdGhlIGRhdGEgKGFuZCBidWNrZXRzKS4KKwkg Ki8KKwl0b3RhbF9sZW5ndGggPSAoc2l6ZW9mKGludDMyKSArIG9mZnNldG9m KE1WSGlzdG9ncmFtRGF0YSwgYnVja2V0cykKKwkJCQkJKyBuZGltcyAqIHNp emVvZihEaW1lbnNpb25JbmZvKQorCQkJCQkrIG5idWNrZXRzICogYnVja2V0 c2l6ZSk7CisKKwkvKiBhY2NvdW50IGZvciB0aGUgZGVkdXBsaWNhdGVkIGRh dGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwkJdG90YWxf bGVuZ3RoICs9IGluZm9baV0ubmJ5dGVzOworCisJLyogZW5mb3JjZSBhcmJp dHJhcnkgbGltaXQgb2YgMU1CICovCisJaWYgKHRvdGFsX2xlbmd0aCA+ICgx MCAqIDEwMjQgKiAxMDI0KSkKKwkJZWxvZyhFUlJPUiwgInNlcmlhbGl6ZWQg aGlzdG9ncmFtIGV4Y2VlZHMgMTBNQiAoJWxkID4gJWQpIiwKKwkJCQkJdG90 YWxfbGVuZ3RoLCAoMTAgKiAxMDI0ICogMTAyNCkpOworCisJLyogYWxsb2Nh dGUgc3BhY2UgZm9yIHRoZSBzZXJpYWxpemVkIGhpc3RvZ3JhbSBsaXN0LCBz ZXQgaGVhZGVyICovCisJb3V0cHV0ID0gKGJ5dGVhKilwYWxsb2MwKHRvdGFs X2xlbmd0aCk7CisJU0VUX1ZBUlNJWkUob3V0cHV0LCB0b3RhbF9sZW5ndGgp OworCisJLyogd2UnbGwgdXNlICdkYXRhJyB0byBrZWVwIHRyYWNrIG9mIHRo ZSBwbGFjZSB0byB3cml0ZSBkYXRhICovCisJZGF0YSA9IFZBUkRBVEEob3V0 cHV0KTsKKworCW1lbWNweShkYXRhLCBoaXN0b2dyYW0sIG9mZnNldG9mKE1W SGlzdG9ncmFtRGF0YSwgYnVja2V0cykpOworCWRhdGEgKz0gb2Zmc2V0b2Yo TVZIaXN0b2dyYW1EYXRhLCBidWNrZXRzKTsKKworCW1lbWNweShkYXRhLCBp bmZvLCBzaXplb2YoRGltZW5zaW9uSW5mbykgKiBuZGltcyk7CisJZGF0YSAr PSBzaXplb2YoRGltZW5zaW9uSW5mbykgKiBuZGltczsKKworCS8qIHZhbHVl IGFycmF5IGZvciBlYWNoIGRpbWVuc2lvbiAqLworCWZvciAoaSA9IDA7IGkg PCBuZGltczsgaSsrKQorCXsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5H CisJCWNoYXIgKnRtcCA9IGRhdGE7CisjZW5kaWYKKwkJZm9yIChqID0gMDsg aiA8IGluZm9baV0ubnZhbHVlczsgaisrKQorCQl7CisJCQlpZiAoaW5mb1tp XS50eXBsZW4gPiAwKQorCQkJeworCQkJCS8qIHBhc2VkIGJ5IHZhbHVlIG9y IHJlZmVyZW5jZSwgYnV0IGZpeGVkIGxlbmd0aCAqLworCQkJCW1lbWNweShk YXRhLCAmdmFsdWVzW2ldW2pdLCBpbmZvW2ldLnR5cGxlbik7CisJCQkJZGF0 YSArPSBpbmZvW2ldLnR5cGxlbjsKKwkJCX0KKwkJCWVsc2UgaWYgKGluZm9b aV0udHlwbGVuID09IC0xKQorCQkJeworCQkJCS8qIHZhcmxlbmEgKi8KKwkJ CQltZW1jcHkoZGF0YSwgRGF0dW1HZXRQb2ludGVyKHZhbHVlc1tpXVtqXSks CisJCQkJCQkJVkFSU0laRV9BTlkodmFsdWVzW2ldW2pdKSk7CisJCQkJZGF0 YSArPSBWQVJTSVpFX0FOWSh2YWx1ZXNbaV1bal0pOworCQkJfQorCQkJZWxz ZSBpZiAoaW5mb1tpXS50eXBsZW4gPT0gLTIpCisJCQl7CisJCQkJLyogY3N0 cmluZyAoZG9uJ3QgZm9yZ2V0IHRoZSBcMCB0ZXJtaW5hdG9yISkgKi8KKwkJ CQltZW1jcHkoZGF0YSwgRGF0dW1HZXRQb2ludGVyKHZhbHVlc1tpXVtqXSks CisJCQkJCQkJc3RybGVuKERhdHVtR2V0UG9pbnRlcih2YWx1ZXNbaV1bal0p KSArIDEpOworCQkJCWRhdGEgKz0gc3RybGVuKERhdHVtR2V0UG9pbnRlcih2 YWx1ZXNbaV1bal0pKSArIDE7CisJCQl9CisJCX0KKwkJQXNzZXJ0KChkYXRh IC0gdG1wKSA9PSBpbmZvW2ldLm5ieXRlcyk7CisJfQorCisJLyogYW5kIGZp bmFsbHksIHRoZSBoaXN0b2dyYW0gYnVja2V0cyAqLworCWZvciAoaSA9IDA7 IGkgPCBuYnVja2V0czsgaSsrKQorCXsKKwkJLyogZG9uJ3Qgd3JpdGUgYmV5 b25kIHRoZSBhbGxvY2F0ZWQgc3BhY2UgKi8KKwkJQXNzZXJ0KGRhdGEgPD0g KGNoYXIqKW91dHB1dCArIHRvdGFsX2xlbmd0aCAtIGJ1Y2tldHNpemUpOwor CisJCS8qIHJlc2V0IHRoZSB2YWx1ZXMgZm9yIGVhY2ggaXRlbSAqLworCQlt ZW1zZXQoYnVja2V0LCAwLCBidWNrZXRzaXplKTsKKworCQkqQlVDS0VUX05U VVBMRVMoYnVja2V0KSAgID0gaGlzdG9ncmFtLT5idWNrZXRzW2ldLT5udHVw bGVzOworCisJCWZvciAoaiA9IDA7IGogPCBuZGltczsgaisrKQorCQl7CisJ CQkvKiBkbyB0aGUgbG9va3VwIG9ubHkgZm9yIG5vbi1OVUxMIHZhbHVlcyAq LworCQkJaWYgKCEgaGlzdG9ncmFtLT5idWNrZXRzW2ldLT5udWxsc29ubHlb al0pCisJCQl7CisJCQkJdWludDE2IGlkeDsKKwkJCQlEYXR1bSAqIHYgPSBO VUxMOworCQkJCXNzdXBfcHJpdmF0ZSA9ICZzc3VwW2pdOworCisJCQkJLyog bWluIGJvdW5kYXJ5ICovCisJCQkJdiA9IChEYXR1bSopYnNlYXJjaCgmaGlz dG9ncmFtLT5idWNrZXRzW2ldLT5taW5bal0sCisJCQkJCQkJCXZhbHVlc1tq XSwgaW5mb1tqXS5udmFsdWVzLCBzaXplb2YoRGF0dW0pLAorCQkJCQkJCQli c2VhcmNoX2NvbXBhcmF0b3IpOworCisJCQkJaWYgKHYgPT0gTlVMTCkKKwkJ CQkJZWxvZyhFUlJPUiwgInZhbHVlIGZvciBkaW0gJWQgbm90IGZvdW5kIGlu IGFycmF5Iiwgaik7CisKKwkJCQkvKiBjb21wdXRlIGluZGV4IHdpdGhpbiB0 aGUgYXJyYXkgKi8KKwkJCQlpZHggPSAodiAtIHZhbHVlc1tqXSk7CisKKwkJ CQlBc3NlcnQoKGlkeCA+PSAwKSAmJiAoaWR4IDwgaW5mb1tqXS5udmFsdWVz KSk7CisKKwkJCQlCVUNLRVRfTUlOX0lOREVYRVMoYnVja2V0LCBuZGltcylb al0gPSBpZHg7CisKKwkJCQkvKiBtYXggYm91bmRhcnkgKi8KKwkJCQl2ID0g KERhdHVtKilic2VhcmNoKCZoaXN0b2dyYW0tPmJ1Y2tldHNbaV0tPm1heFtq XSwKKwkJCQkJCQkJdmFsdWVzW2pdLCBpbmZvW2pdLm52YWx1ZXMsIHNpemVv ZihEYXR1bSksCisJCQkJCQkJCWJzZWFyY2hfY29tcGFyYXRvcik7CisKKwkJ CQlpZiAodiA9PSBOVUxMKQorCQkJCQllbG9nKEVSUk9SLCAidmFsdWUgZm9y IGRpbSAlZCBub3QgZm91bmQgaW4gYXJyYXkiLCBqKTsKKworCQkJCS8qIGNv bXB1dGUgaW5kZXggd2l0aGluIHRoZSBhcnJheSAqLworCQkJCWlkeCA9ICh2 IC0gdmFsdWVzW2pdKTsKKworCQkJCUFzc2VydCgoaWR4ID49IDApICYmIChp ZHggPCBpbmZvW2pdLm52YWx1ZXMpKTsKKworCQkJCUJVQ0tFVF9NQVhfSU5E RVhFUyhidWNrZXQsIG5kaW1zKVtqXSA9IGlkeDsKKwkJCX0KKwkJfQorCisJ CS8qIGNvcHkgZmxhZ3MgKG51bGxzLCBtaW4vbWF4IGluY2x1c2l2ZSkgKi8K KwkJbWVtY3B5KEJVQ0tFVF9OVUxMU19PTkxZKGJ1Y2tldCwgbmRpbXMpLAor CQkJCWhpc3RvZ3JhbS0+YnVja2V0c1tpXS0+bnVsbHNvbmx5LCBzaXplb2Yo Ym9vbCkgKiBuZGltcyk7CisKKwkJbWVtY3B5KEJVQ0tFVF9NSU5fSU5DTChi dWNrZXQsIG5kaW1zKSwKKwkJCQloaXN0b2dyYW0tPmJ1Y2tldHNbaV0tPm1p bl9pbmNsdXNpdmUsIHNpemVvZihib29sKSAqIG5kaW1zKTsKKworCQltZW1j cHkoQlVDS0VUX01BWF9JTkNMKGJ1Y2tldCwgbmRpbXMpLAorCQkJCWhpc3Rv Z3JhbS0+YnVja2V0c1tpXS0+bWF4X2luY2x1c2l2ZSwgc2l6ZW9mKGJvb2wp ICogbmRpbXMpOworCisJCS8qIGNvcHkgdGhlIGl0ZW0gaW50byB0aGUgYXJy YXkgKi8KKwkJbWVtY3B5KGRhdGEsIGJ1Y2tldCwgYnVja2V0c2l6ZSk7CisK KwkJZGF0YSArPSBidWNrZXRzaXplOworCX0KKworCS8qIGF0IHRoaXMgcG9p bnQgd2UgZXhwZWN0IHRvIG1hdGNoIHRoZSB0b3RhbF9sZW5ndGggZXhhY3Rs eSAqLworCUFzc2VydCgoZGF0YSAtIChjaGFyKilvdXRwdXQpID09IHRvdGFs X2xlbmd0aCk7CisKKwkvKiBGSVhNRSBmcmVlIHRoZSB2YWx1ZXMvY291bnRz IGFycmF5cyBoZXJlICovCisKKwlyZXR1cm4gb3V0cHV0OworfQorCisvKgor ICogUmV0dXJucyBoaXN0b2dyYW0gaW4gYSBwYXJ0aWFsbHktc2VyaWFsaXpl ZCBmb3JtIChrZWVwcyB0aGUgYm91bmRhcnkKKyAqIHZhbHVlcyBkZWR1cGxp Y2F0ZWQsIHNvIHRoYXQgaXQncyBwb3NzaWJsZSB0byBvcHRpbWl6ZSB0aGUg ZXN0aW1hdGlvbgorICogcGFydCBieSBjYWNoaW5nIGZ1bmN0aW9uIGNhbGwg cmVzdWx0cyBiZXR3ZWVuIGJ1Y2tldHMgZXRjLikuCisgKi8KK01WU2VyaWFs aXplZEhpc3RvZ3JhbQorZGVzZXJpYWxpemVfbXZfaGlzdG9ncmFtKGJ5dGVh ICogZGF0YSkKK3sKKwlpbnQgaSA9IDAsIGogPSAwOworCisJU2l6ZQlleHBl Y3RlZF9zaXplOworCWNoYXIgICAqdG1wID0gTlVMTDsKKworCU1WU2VyaWFs aXplZEhpc3RvZ3JhbSBoaXN0b2dyYW07CisJRGltZW5zaW9uSW5mbyAqaW5m bzsKKworCWludAkJbmJ1Y2tldHM7CisJaW50CQluZGltczsKKwlpbnQJCWJ1 Y2tldHNpemU7CisKKwkvKiB0ZW1wb3JhcnkgZGVzZXJpYWxpemF0aW9uIGJ1 ZmZlciAqLworCWludAkJYnVmZmxlbjsKKwljaGFyICAgKmJ1ZmY7CisJY2hh ciAgICpwdHI7CisKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gTlVM TDsKKworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSA8IG9mZnNldG9m KE1WU2VyaWFsaXplZEhpc3RvZ3JhbURhdGEsYnVja2V0cykpCisJCWVsb2co RVJST1IsICJpbnZhbGlkIGhpc3RvZ3JhbSBzaXplICVsZCAoZXhwZWN0ZWQg YXQgbGVhc3QgJWxkKSIsCisJCQkgVkFSU0laRV9BTllfRVhIRFIoZGF0YSks IG9mZnNldG9mKE1WU2VyaWFsaXplZEhpc3RvZ3JhbURhdGEsYnVja2V0cykp OworCisJLyogcmVhZCB0aGUgaGlzdG9ncmFtIGhlYWRlciAqLworCWhpc3Rv Z3JhbQorCQk9IChNVlNlcmlhbGl6ZWRIaXN0b2dyYW0pcGFsbG9jKHNpemVv ZihNVlNlcmlhbGl6ZWRIaXN0b2dyYW1EYXRhKSk7CisKKwkvKiBpbml0aWFs aXplIHBvaW50ZXIgdG8gdGhlIGRhdGEgcGFydCAoc2tpcCB0aGUgdmFybGVu YSBoZWFkZXIpICovCisJdG1wID0gVkFSREFUQShkYXRhKTsKKworCS8qIGdl dCB0aGUgaGVhZGVyIGFuZCBwZXJmb3JtIGJhc2ljIHNhbml0eSBjaGVja3Mg Ki8KKwltZW1jcHkoaGlzdG9ncmFtLCB0bXAsIG9mZnNldG9mKE1WU2VyaWFs aXplZEhpc3RvZ3JhbURhdGEsIGJ1Y2tldHMpKTsKKwl0bXAgKz0gb2Zmc2V0 b2YoTVZTZXJpYWxpemVkSGlzdG9ncmFtRGF0YSwgYnVja2V0cyk7CisKKwlp ZiAoaGlzdG9ncmFtLT5tYWdpYyAhPSBNVlNUQVRfSElTVF9NQUdJQykKKwkJ ZWxvZyhFUlJPUiwgImludmFsaWQgaGlzdG9ncmFtIG1hZ2ljICVkIChleHBl Y3RlZCAlZGQpIiwKKwkJCSBoaXN0b2dyYW0tPm1hZ2ljLCBNVlNUQVRfSElT VF9NQUdJQyk7CisKKwlpZiAoaGlzdG9ncmFtLT50eXBlICE9IE1WU1RBVF9I SVNUX1RZUEVfQkFTSUMpCisJCWVsb2coRVJST1IsICJpbnZhbGlkIGhpc3Rv Z3JhbSB0eXBlICVkIChleHBlY3RlZCAlZGQpIiwKKwkJCSBoaXN0b2dyYW0t PnR5cGUsIE1WU1RBVF9ISVNUX1RZUEVfQkFTSUMpOworCisJbmJ1Y2tldHMg PSBoaXN0b2dyYW0tPm5idWNrZXRzOworCW5kaW1zICAgID0gaGlzdG9ncmFt LT5uZGltZW5zaW9uczsKKwlidWNrZXRzaXplID0gQlVDS0VUX1NJWkUobmRp bXMpOworCisJQXNzZXJ0KChuYnVja2V0cyA+IDApICYmIChuYnVja2V0cyA8 PSBNVlNUQVRfSElTVF9NQVhfQlVDS0VUUykpOworCUFzc2VydCgobmRpbXMg Pj0gMikgJiYgKG5kaW1zIDw9IE1WU1RBVFNfTUFYX0RJTUVOU0lPTlMpKTsK KworCS8qCisJICogV2hhdCBzaXplIGRvIHdlIGV4cGVjdCB3aXRoIHRob3Nl IHBhcmFtZXRlcnMgKGl0J3MgaW5jb21wbGV0ZSwKKwkgKiBhcyB3ZSB5ZXQg aGF2ZSB0byBjb3VudCB0aGUgYXJyYXkgc2l6ZXMgKGZyb20gRGltZW5zaW9u SW5mbworCSAqIHJlY29yZHMpLgorCSAqLworCWV4cGVjdGVkX3NpemUgPSBv ZmZzZXRvZihNVlNlcmlhbGl6ZWRIaXN0b2dyYW1EYXRhLGJ1Y2tldHMpICsK KwkJCQkJbmRpbXMgKiBzaXplb2YoRGltZW5zaW9uSW5mbykgKworCQkJCQko bmJ1Y2tldHMgKiBidWNrZXRzaXplKTsKKworCS8qIGNoZWNrIHRoYXQgd2Ug aGF2ZSBhdCBsZWFzdCB0aGUgRGltZW5zaW9uSW5mbyByZWNvcmRzICovCisJ aWYgKFZBUlNJWkVfQU5ZX0VYSERSKGRhdGEpIDwgZXhwZWN0ZWRfc2l6ZSkK KwkJZWxvZyhFUlJPUiwgImludmFsaWQgaGlzdG9ncmFtIHNpemUgJWxkIChl eHBlY3RlZCAlbGQpIiwKKwkJCSBWQVJTSVpFX0FOWV9FWEhEUihkYXRhKSwg ZXhwZWN0ZWRfc2l6ZSk7CisKKwlpbmZvID0gKERpbWVuc2lvbkluZm8qKSh0 bXApOworCXRtcCArPSBuZGltcyAqIHNpemVvZihEaW1lbnNpb25JbmZvKTsK KworCS8qIGFjY291bnQgZm9yIHRoZSB2YWx1ZSBhcnJheXMgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbmRpbXM7IGkrKykKKwkJZXhwZWN0ZWRfc2l6ZSArPSBp bmZvW2ldLm5ieXRlczsKKworCWlmIChWQVJTSVpFX0FOWV9FWEhEUihkYXRh KSAhPSBleHBlY3RlZF9zaXplKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBo aXN0b2dyYW0gc2l6ZSAlbGQgKGV4cGVjdGVkICVsZCkiLAorCQkJIFZBUlNJ WkVfQU5ZX0VYSERSKGRhdGEpLCBleHBlY3RlZF9zaXplKTsKKworCS8qIGxv b2tzIE9LIC0gbm90IGNvcnJ1cHRlZCBvciBzb21ldGhpbmcgKi8KKworCS8q IG5vdyBsZXQncyBhbGxvY2F0ZSBhIHNpbmdsZSBidWZmZXIgZm9yIGFsbCB0 aGUgdmFsdWVzIGFuZCBjb3VudHMgKi8KKworCWJ1ZmZsZW4gPSAoc2l6ZW9m KGludCkgICsgc2l6ZW9mKERhdHVtKikpICogbmRpbXM7CisJZm9yIChpID0g MDsgaSA8IG5kaW1zOyBpKyspCisJeworCQkvKiBkb24ndCBhbGxvY2F0ZSBz cGFjZSBmb3IgYnl2YWwgdHlwZXMsIG1hdGNoaW5nIERhdHVtICovCisJCWlm ICghIChpbmZvW2ldLnR5cGJ5dmFsICYmIChpbmZvW2ldLnR5cGxlbiA9PSBz aXplb2YoRGF0dW0pKSkpCisJCQlidWZmbGVuICs9IChzaXplb2YoRGF0dW0p ICogaW5mb1tpXS5udmFsdWVzKTsKKwl9CisKKwkvKiBhbHNvLCBpbmNsdWRl IHNwYWNlIGZvciB0aGUgcmVzdWx0LCB0cmFja2luZyB0aGUgYnVja2V0cyAq LworCWJ1ZmZsZW4gKz0gbmJ1Y2tldHMgKiAoCisJCQkJc2l6ZW9mKE1WU2Vy aWFsaXplZEJ1Y2tldCkgKwkJLyogYnVja2V0IHBvaW50ZXIgKi8KKwkJCQlz aXplb2YoTVZTZXJpYWxpemVkQnVja2V0RGF0YSkpOwkvKiBidWNrZXQgZGF0 YSAqLworCisJYnVmZiA9IHBhbGxvYzAoYnVmZmxlbik7CisJcHRyICA9IGJ1 ZmY7CisKKwloaXN0b2dyYW0tPm52YWx1ZXMgPSAoaW50KilwdHI7CisJcHRy ICs9IChzaXplb2YoaW50KSAqIG5kaW1zKTsKKworCWhpc3RvZ3JhbS0+dmFs dWVzID0gKERhdHVtKiopcHRyOworCXB0ciArPSAoc2l6ZW9mKERhdHVtKikg KiBuZGltcyk7CisKKwkvKgorCSAqIEZJWE1FIFRoaXMgdXNlcyBwb2ludGVy cyB0byB0aGUgb3JpZ2luYWwgZGF0YSBhcnJheSAodGhlIHR5cGVzCisJICog ICAgICAgbm90IHBhc3NlZCBieSB2YWx1ZSksIHNvIHdoZW4gc29tZW9uZSBm cmVlcyB0aGUgbWVtb3J5LAorCSAqICAgICAgIGUuZy4gYnkgZG9pbmcgc29t ZXRoaW5nIGxpa2UgdGhpczoKKwkgKgorCSAqICAgICAgICAgICBieXRlYSAq IGRhdGEgPSAuLi4gZmV0Y2ggdGhlIGRhdGEgZnJvbSBjYXRhbG9nIC4uLgor CSAqICAgICAgICAgICBNQ1ZMaXN0IG1jdmxpc3QgPSBkZXNlcmlhbGl6ZV9t Y3ZfbGlzdChkYXRhKTsKKwkgKiAgICAgICAgICAgcGZyZWUoZGF0YSk7CisJ ICoKKwkgKiAgICAgICB0aGVuICdtY3ZsaXN0JyByZWZlcmVuY2VzIHRoZSBm cmVlZCBtZW1vcnkuIFRoaXMgbmVlZHMgdG8KKwkgKiAgICAgICBjb3B5IHRo ZSBwaWVjZXMuCisJICoKKwkgKiBUT0RPIHNhbWUgYXMgaW4gTUNWIGRlc2Vy aWFsaXphdGlvbiAvIGNvbnNpZGVyIG1vdmluZyB0byBjb21tb24uYworCSAq LworCWZvciAoaSA9IDA7IGkgPCBuZGltczsgaSsrKQorCXsKKwkJaGlzdG9n cmFtLT5udmFsdWVzW2ldID0gaW5mb1tpXS5udmFsdWVzOworCisJCWlmIChp bmZvW2ldLnR5cGJ5dmFsICYmIGluZm9baV0udHlwbGVuID09IHNpemVvZihE YXR1bSkpCisJCXsKKwkJCS8qIHBhc3NlZCBieSB2YWx1ZSAvIERhdHVtIC0g c2ltcGx5IHJldXNlIHRoZSBhcnJheSAqLworCQkJaGlzdG9ncmFtLT52YWx1 ZXNbaV0gPSAoRGF0dW0qKXRtcDsKKwkJCXRtcCArPSBpbmZvW2ldLm5ieXRl czsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGFsbCB0aGUgdmFybGVuYSBk YXRhIG5lZWQgYSBjaHVuayBmcm9tIHRoZSBidWZmZXIgKi8KKwkJCWhpc3Rv Z3JhbS0+dmFsdWVzW2ldID0gKERhdHVtKilwdHI7CisJCQlwdHIgKz0gKHNp emVvZihEYXR1bSkgKiBpbmZvW2ldLm52YWx1ZXMpOworCisJCQlpZiAoaW5m b1tpXS50eXBieXZhbCkKKwkJCXsKKwkJCQkvKiBwYXNlZCBieSB2YWx1ZSwg YnV0IHNtYWxsZXIgdGhhbiBEYXR1bSAqLworCQkJCWZvciAoaiA9IDA7IGog PCBpbmZvW2ldLm52YWx1ZXM7IGorKykKKwkJCQl7CisJCQkJCS8qIGp1c3Qg cG9pbnQgaW50byB0aGUgYXJyYXkgKi8KKwkJCQkJbWVtY3B5KCZoaXN0b2dy YW0tPnZhbHVlc1tpXVtqXSwgdG1wLCBpbmZvW2ldLnR5cGxlbik7CisJCQkJ CXRtcCArPSBpbmZvW2ldLnR5cGxlbjsKKwkJCQl9CisJCQl9CisJCQllbHNl IGlmIChpbmZvW2ldLnR5cGxlbiA+IDApCisJCQl7CisJCQkJLyogcGFzZWQg YnkgcmVmZXJlbmNlLCBidXQgZml4ZWQgbGVuZ3RoIChuYW1lLCB0aWQsIC4u LikgKi8KKwkJCQlmb3IgKGogPSAwOyBqIDwgaW5mb1tpXS5udmFsdWVzOyBq KyspCisJCQkJeworCQkJCQkvKiBqdXN0IHBvaW50IGludG8gdGhlIGFycmF5 ICovCisJCQkJCWhpc3RvZ3JhbS0+dmFsdWVzW2ldW2pdID0gUG9pbnRlckdl dERhdHVtKHRtcCk7CisJCQkJCXRtcCArPSBpbmZvW2ldLnR5cGxlbjsKKwkJ CQl9CisJCQl9CisJCQllbHNlIGlmIChpbmZvW2ldLnR5cGxlbiA9PSAtMSkK KwkJCXsKKwkJCQkvKiB2YXJsZW5hICovCisJCQkJZm9yIChqID0gMDsgaiA8 IGluZm9baV0ubnZhbHVlczsgaisrKQorCQkJCXsKKwkJCQkJLyoganVzdCBw b2ludCBpbnRvIHRoZSBhcnJheSAqLworCQkJCQloaXN0b2dyYW0tPnZhbHVl c1tpXVtqXSA9IFBvaW50ZXJHZXREYXR1bSh0bXApOworCQkJCQl0bXAgKz0g VkFSU0laRV9BTlkodG1wKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChp bmZvW2ldLnR5cGxlbiA9PSAtMikKKwkJCXsKKwkJCQkvKiBjc3RyaW5nICov CisJCQkJZm9yIChqID0gMDsgaiA8IGluZm9baV0ubnZhbHVlczsgaisrKQor CQkJCXsKKwkJCQkJLyoganVzdCBwb2ludCBpbnRvIHRoZSBhcnJheSAqLwor CQkJCQloaXN0b2dyYW0tPnZhbHVlc1tpXVtqXSA9IFBvaW50ZXJHZXREYXR1 bSh0bXApOworCQkJCQl0bXAgKz0gKHN0cmxlbih0bXApICsgMSk7IC8qIGRv bid0IGZvcmdldCB0aGUgXDAgKi8KKwkJCQl9CisJCQl9CisJCX0KKwl9CisK KwloaXN0b2dyYW0tPmJ1Y2tldHMgPSAoTVZTZXJpYWxpemVkQnVja2V0Kilw dHI7CisJcHRyICs9IChzaXplb2YoTVZTZXJpYWxpemVkQnVja2V0KSAqIG5i dWNrZXRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBuYnVja2V0czsgaSsrKQor CXsKKwkJTVZTZXJpYWxpemVkQnVja2V0IGJ1Y2tldCA9IChNVlNlcmlhbGl6 ZWRCdWNrZXQpcHRyOworCQlwdHIgKz0gc2l6ZW9mKE1WU2VyaWFsaXplZEJ1 Y2tldERhdGEpOworCisJCWJ1Y2tldC0+bnR1cGxlcwkJCT0gKkJVQ0tFVF9O VFVQTEVTKHRtcCk7CisJCWJ1Y2tldC0+bnVsbHNvbmx5CQk9IEJVQ0tFVF9O VUxMU19PTkxZKHRtcCwgbmRpbXMpOworCQlidWNrZXQtPm1pbl9pbmNsdXNp dmUJPSBCVUNLRVRfTUlOX0lOQ0wodG1wLCBuZGltcyk7CisJCWJ1Y2tldC0+ bWF4X2luY2x1c2l2ZQk9IEJVQ0tFVF9NQVhfSU5DTCh0bXAsIG5kaW1zKTsK KworCQlidWNrZXQtPm1pbgkJCQk9IEJVQ0tFVF9NSU5fSU5ERVhFUyh0bXAs IG5kaW1zKTsKKwkJYnVja2V0LT5tYXgJCQkJPSBCVUNLRVRfTUFYX0lOREVY RVModG1wLCBuZGltcyk7CisKKwkJaGlzdG9ncmFtLT5idWNrZXRzW2ldID0g YnVja2V0OworCisJCUFzc2VydCh0bXAgPD0gKGNoYXIqKWRhdGEgKyBWQVJT SVpFX0FOWShkYXRhKSk7CisKKwkJdG1wICs9IGJ1Y2tldHNpemU7CisJfQor CisJLyogYXQgdGhpcyBwb2ludCB3ZSBleHBlY3QgdG8gbWF0Y2ggdGhlIHRv dGFsX2xlbmd0aCBleGFjdGx5ICovCisJQXNzZXJ0KCh0bXAgLSBWQVJEQVRB KGRhdGEpKSA9PSBleHBlY3RlZF9zaXplKTsKKworCS8qIHdlIHNob3VsZCBl eGhhdXN0IHRoZSBvdXRwdXQgYnVmZmVyIGV4YWN0bHkgKi8KKwlBc3NlcnQo KHB0ciAtIGJ1ZmYpID09IGJ1ZmZsZW4pOworCisJcmV0dXJuIGhpc3RvZ3Jh bTsKK30KKworLyoKKyAqIEJ1aWxkIHRoZSBpbml0aWFsIGJ1Y2tldCwgd2hp Y2ggd2lsbCBiZSB0aGVuIHNwbGl0IGludG8gc21hbGxlciBvbmVzLgorICov CitzdGF0aWMgTVZCdWNrZXQKK2NyZWF0ZV9pbml0aWFsX212X2J1Y2tldChp bnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRy cywKKwkJCQkJCSBWYWNBdHRyU3RhdHMgKipzdGF0cykKK3sKKwlpbnQgaTsK KwlpbnQJbnVtYXR0cnMgPSBhdHRycy0+ZGltMTsKKwlIaXN0b2dyYW1CdWls ZCBkYXRhID0gTlVMTDsKKworCS8qIFRPRE8gYWxsb2NhdGUgYnVja2V0IGFz IGEgc2luZ2xlIHBpZWNlLCBpbmNsdWRpbmcgYWxsIHRoZSBmaWVsZHMuICov CisJTVZCdWNrZXQgYnVja2V0ID0gKE1WQnVja2V0KXBhbGxvYzAoc2l6ZW9m KE1WQnVja2V0RGF0YSkpOworCisJQXNzZXJ0KG51bXJvd3MgPiAwKTsKKwlB c3NlcnQocm93cyAhPSBOVUxMKTsKKwlBc3NlcnQoKG51bWF0dHJzID49IDIp ICYmIChudW1hdHRycyA8PSBNVlNUQVRTX01BWF9ESU1FTlNJT05TKSk7CisK KwkvKiBhbGxvY2F0ZSB0aGUgcGVyLWRpbWVuc2lvbiBhcnJheXMgKi8KKwor CS8qIGZsYWdzIGZvciBudWxsLW9ubHkgZGltZW5zaW9ucyAqLworCWJ1Y2tl dC0+bnVsbHNvbmx5ID0gKGJvb2wqKXBhbGxvYzAobnVtYXR0cnMgKiBzaXpl b2YoYm9vbCkpOworCisJLyogaW5jbHVzaXZlbmVzcyBib3VuZGFyaWVzIC0g bG93ZXIvdXBwZXIgYm91bmRzICovCisJYnVja2V0LT5taW5faW5jbHVzaXZl ID0gKGJvb2wqKXBhbGxvYzAobnVtYXR0cnMgKiBzaXplb2YoYm9vbCkpOwor CWJ1Y2tldC0+bWF4X2luY2x1c2l2ZSA9IChib29sKilwYWxsb2MwKG51bWF0 dHJzICogc2l6ZW9mKGJvb2wpKTsKKworCS8qIGxvd2VyL3VwcGVyIGJvdW5k YXJpZXMgKi8KKwlidWNrZXQtPm1pbiA9IChEYXR1bSopcGFsbG9jMChudW1h dHRycyAqIHNpemVvZihEYXR1bSkpOworCWJ1Y2tldC0+bWF4ID0gKERhdHVt KilwYWxsb2MwKG51bWF0dHJzICogc2l6ZW9mKERhdHVtKSk7CisKKwkvKiBi dWlsZC1kYXRhICovCisJZGF0YSA9IChIaXN0b2dyYW1CdWlsZClwYWxsb2Mw KHNpemVvZihIaXN0b2dyYW1CdWlsZERhdGEpKTsKKworCS8qIG51bWJlciBv ZiBkaXN0aW5jdCB2YWx1ZXMgKHBlciBkaW1lbnNpb24pICovCisJZGF0YS0+ bmRpc3RpbmN0cyA9ICh1aW50MzIqKXBhbGxvYzAobnVtYXR0cnMgKiBzaXpl b2YodWludDMyKSk7CisKKwkvKiBhbGwgdGhlIHNhbXBsZSByb3dzIGZhbGwg aW50byB0aGUgaW5pdGlhbCBidWNrZXQgKi8KKwlkYXRhLT5udW1yb3dzID0g bnVtcm93czsKKwlkYXRhLT5yb3dzID0gcm93czsKKworCWJ1Y2tldC0+YnVp bGRfZGF0YSA9IGRhdGE7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgbnVtYmVy IG9mIG5kaXN0aW5jdCBjb21iaW5hdGlvbnMgaW4gdGhlIGJ1Y2tldCAod2hp Y2gKKwkgKiB3ZSB1c2Ugd2hlbiBzZWxlY3RpbmcgYnVja2V0IHRvIHBhcnRp dGlvbiksIGFuZCB0aGVuIG51bWJlciBvZgorCSAqIGRpc3RpbmN0IHZhbHVl cyBmb3IgZWFjaCBwYXJ0aXRpb24gKHdoaWNoIHdlIHVzZSB3aGVuIGNob29z aW5nCisJICogd2hpY2ggZGltZW5zaW9uIHRvIHNwbGl0KS4KKwkgKi8KKwl1 cGRhdGVfYnVja2V0X25kaXN0aW5jdChidWNrZXQsIGF0dHJzLCBzdGF0cyk7 CisKKwkvKiBVcGRhdGUgbmRpc3RpbmN0IChhbmQgYWxzbyBzZXQgbWluL21h eCkgZm9yIGFsbCBkaW1lbnNpb25zLiAqLworCWZvciAoaSA9IDA7IGkgPCBu dW1hdHRyczsgaSsrKQorCQl1cGRhdGVfZGltZW5zaW9uX25kaXN0aW5jdChi dWNrZXQsIGksIGF0dHJzLCBzdGF0cywgdHJ1ZSk7CisKKwlyZXR1cm4gYnVj a2V0OworfQorCisvKgorICogQ2hvb3NlIHRoZSBidWNrZXQgdG8gcGFydGl0 aW9uIG5leHQuCisgKgorICogVGhlIGN1cnJlbnQgY3JpdGVyaWEgaXMgcmF0 aGVyIHNpbXBsZSwgY2hvc2VuIHNvIHRoYXQgdGhlIGFsZ29yaXRobQorICog cHJvZHVjZXMgYnVja2V0cyB3aXRoIGFib3V0IGVxdWFsIGZyZXF1ZW5jeSBh bmQgcmVndWxhciBzaXplLiBXZQorICogc2VsZWN0IHRoZSBidWNrZXQgd2l0 aCB0aGUgaGlnaGVzdCBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzLCBhbmQK KyAqIHRoZW4gc3BsaXQgaXQgYnkgdGhlIGxvbmdlc3QgZGltZW5zaW9uLgor ICoKKyAqIFRoZSBkaXN0aW5jdCB2YWx1ZXMgYXJlIHVuaWZvcm1seSBtYXBw ZWQgdG8gWzAsMV0gaW50ZXJ2YWwsIGFuZCB0aGlzCisgKiBpcyB1c2VkIHRv IGNvbXB1dGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSByYW5nZS4KKyAqCisgKiBO T1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcnJheSB1c2VkIGZvciBkZWR1 cGxpY2F0aW9uLCBhcyB0aGlzCisgKiAgICAgICBjb250YWlucyB2YWx1ZXMg Zm9yIGFsbCB0aGUgdHVwbGVzIGZyb20gdGhlIHNhbXBsZSwgbm90IGp1c3QK KyAqICAgICAgIHRoZSBib3VuZGFyeSB2YWx1ZXMuCisgKgorICogUmV0dXJu cyBlaXRoZXIgcG9pbnRlciB0byB0aGUgYnVja2V0IHNlbGVjdGVkIHRvIGJl IHBhcnRpdGlvbmVkLAorICogb3IgTlVMTCBpZiB0aGVyZSBhcmUgbm8gYnVj a2V0cyB0aGF0IG1heSBiZSBzcGxpdCAoaS5lLiBhbGwgYnVja2V0cworICog Y29udGFpbiBhIHNpbmdsZSBkaXN0aW5jdCB2YWx1ZSkuCisgKgorICogVE9E TyBDb25zaWRlciBvdGhlciBwYXJ0aXRpb25pbmcgY3JpdGVyaWEgKHYtb3B0 aW1hbCwgbWF4ZGlmZiBldGMuKS4KKyAqICAgICAgRm9yIGV4YW1wbGUgdXNl IHRoZSAiYnVja2V0IHZvbHVtZSIgKHByb2R1Y3Qgb2YgZGltZW5zaW9uCisg KiAgICAgIGxlbmd0aHMpIHRvIHNlbGVjdCB0aGUgYnVja2V0LgorICoKKyAq ICAgICAgV2UgbmVlZCBidWNrZXRzIGNvbnRhaW5pbmcgYWJvdXQgdGhlIHNh bWUgbnVtYmVyIG9mIHR1cGxlcyAoc28KKyAqICAgICAgYWJvdXQgdGhlIHNh bWUgZnJlcXVlbmN5KSwgYXMgdGhhdCBsaW1pdHMgdGhlIGVycm9yIHdoZW4g d2UKKyAqICAgICAgbWF0Y2ggdGhlIGJ1Y2tldCBwYXJ0aWFsbHkgKGluIHRo YXQgY2FzZSB1c2UgMS8yIHRoZSBidWNrZXQpLgorICoKKyAqICAgICAgV2Ug YWxzbyBuZWVkIGJ1Y2tldHMgd2l0aCAicmVndWxhciIgc2l6ZSwgaS5lLiBu b3QgIm5hcnJvdyIgaW4KKyAqICAgICAgc29tZSBkaW1lbnNpb25zIGFuZCAi d2lkZSIgaW4gdGhlIG90aGVycywgYmVjYXVzZSB0aGF0IG1ha2VzCisgKiAg ICAgIHBhcnRpYWwgbWF0Y2hlcyBtb3JlIGxpa2VseSBhbmQgaW5jcmVhc2Vz IHRoZSBlc3RpbWF0aW9uIGVycm9yLAorICogICAgICBlc3BlY2lhbGx5IHdo ZW4gdGhlIGNsYXVzZXMgbWF0Y2ggbWFueSBidWNrZXRzIHBhcnRpYWxseS4g VGhpcworICogICAgICBpcyBlc3BlY2lhbGx5IHNlcmlvdXMgZm9yIE9SLWNs YXVzZXMsIGJlY2F1c2UgaW4gdGhhdCBjYXNlIGFueQorICogICAgICBvZiB0 aGVtIG1heSBhZGQgdGhlIGJ1Y2tldCBhcyBhIChwYXJ0aWFsKSBtYXRjaC4g V2l0aCBBTkQtY2xhdXNlcworICogICAgICBhbGwgdGhlIGNsYXVzZXMgaGF2 ZSB0byBtYXRjaCB0aGUgYnVja2V0LCB3aGljaCBtYWtlcyB0aGlzIGlzc3Vl CisgKiAgICAgIHNvbWV3aGF0IGxlc3MgcHJlc3NpbmcuCisgKgorICogICAg ICBGb3IgZXhhbXBsZSB0aGlzIHRhYmxlOgorICoKKyAqICAgICAgICAgIENS RUFURSBUQUJMRSB0IEFTIFNFTEVDVCBpIEFTIGEsIGkgQVMgYgorICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLDEwMDAwMDApIHMoaSk7CisgKiAgICAgICAgICBBTFRFUiBUQUJMRSB0 IEFERCBTVEFUSVNUSUNTIChoaXN0b2dyYW0pIE9OIChhLGIpOworICogICAg ICAgICAgQU5BTFlaRSB0OworICoKKyAqICAgICAgSXQncyBhIHZlcnkgc3Bl Y2lmaWMgKGFuZCBwZXJoYXBzIGFydGlmaWNpYWwpIGV4YW1wbGUsIGJlY2F1 c2UKKyAqICAgICAgZXZlcnkgYnVja2V0IGFsd2F5cyBoYXMgZXhhY3RseSB0 aGUgc2FtZSBudW1iZXIgb2YgZGlzdGluY3QKKyAqICAgICAgdmFsdWVzIGlu IGFsbCBkaW1lbnNpb25zLCB3aGljaCBtYWtlcyB0aGUgcGFydGl0aW9uaW5n IHRyaWNreS4KKyAqCisgKiAgICAgIFRoZW46CisgKgorICogICAgICAgICAg U0VMRUNUICogRlJPTSB0IFdIRVJFIGEgPCAxMCBBTkQgYiA8IDEwOworICoK KyAqICAgICAgaXMgZXN0aW1hdGVkIHRvIHJldHVybiB+MTIwIHJvd3MsIHdo aWxlIGluIHJlYWxpdHkgaXQgcmV0dXJucyA5LgorICoKKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4KKyAqICAg ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgU2VxIFNjYW4gb24g dCAgKGNvc3Q9MC4wMC4uMTk0MjUuMDAgcm93cz0xMTcgd2lkdGg9OCkKKyAq ICAgICAgICAgICAgICAgICAgICAgIChhY3R1YWwgdGltZT0wLjE4NS4uMjcw Ljc3NCByb3dzPTkgbG9vcHM9MSkKKyAqICAgICAgICAgRmlsdGVyOiAoKGEg PCAxMCkgQU5EIChiIDwgMTApKQorICogICAgICAgICBSb3dzIFJlbW92ZWQg YnkgRmlsdGVyOiA5OTk5OTEKKyAqCisgKiAgICAgIHdoaWxlIHRoZSBxdWVy eSB1c2luZyBPUiBjbGF1c2VzIGlzIGVzdGltYXRlZCBsaWtlIHRoaXM6Cisg KgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTgorICogICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAg ICBTZXEgU2NhbiBvbiB0ICAoY29zdD0wLjAwLi4xOTQyNS4wMCByb3dzPTgx MDAgd2lkdGg9OCkKKyAqICAgICAgICAgICAgICAgICAgICAgIChhY3R1YWwg dGltZT0wLjExOC4uMTg5LjkxOSByb3dzPTkgbG9vcHM9MSkKKyAqICAgICAg ICAgRmlsdGVyOiAoKGEgPCAxMCkgT1IgKGIgPCAxMCkpCisgKiAgICAgICAg IFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IDk5OTk5MQorICoKKyAqICAgICAg d2hpY2ggaXMgY2xlYXJseSBtdWNoIHdvcnNlLiBUaGlzIGhhcHBlbnMgYmVj YXVzZSB0aGUgaGlzdG9ncmFtCisgKiAgICAgIGNvbnRhaW5zIGJ1Y2tldHMg bGlrZSB0aGlzOgorICoKKyAqICAgICAgICAgIGJ1Y2tldCA1OTIgIFszIDMw MzEwXSBbMzAxMzQgMzA1OTNdID0+IFswLjAwMDIzM10KKyAqCisgKiAgICAg IGkuZS4gdGhlIGxlbmd0aCBvZiAiYSIgZGltZW5zaW9uIGlzICgzMDMxMC0z KT0zMDMwNywgd2hpbGUgdGhlCisgKiAgICAgIGxlbmd0aCBvZiAiYiIgaXMg KDMwNTkzLTMwMTM0KT00NTkuIFNvIHRoZSAiYiIgZGltZW5zaW9uIGlzIG11 Y2gKKyAqICAgICAgbmFycm93ZXIgdGhhbiAiYSIuIE9mIGNvdXJzZSwgdGhl cmUgYXJlIGJ1Y2tldHMgd2hlcmUgImIiIGlzIHRoZQorICogICAgICB3aWRl ciBkaW1lbnNpb24uCisgKgorICogICAgICBUaGlzIGlzIHBhcnRpYWxseSBt aXRpZ2F0ZWQgYnkgc2VsZWN0aW5nIHRoZSAibG9uZ2VzdCIgZGltZW5zaW9u CisgKiAgICAgIGluIHBhcnRpdGlvbl9idWNrZXQoKSBidXQgdGhhdCBvbmx5 IGhhcHBlbnMgYWZ0ZXIgd2UgYWxyZWFkeQorICogICAgICBzZWxlY3RlZCB0 aGUgYnVja2V0LiBTbyBpZiB3ZSBuZXZlciBzZWxlY3QgdGhlIGJ1Y2tldCwg d2UgY2FuJ3QKKyAqICAgICAgcmVhbGx5IGZpeCBpdCB0aGVyZS4KKyAqCisg KiAgICAgIFRoZSBvdGhlciByZWFzb24gd2h5IHRoaXMgcGFydGljdWxhciBl eGFtcGxlIGJlaGF2ZXMgc28gcG9vcmx5CisgKiAgICAgIGlzIGR1ZSB0byB0 aGUgd2F5IHdlIHNwbGl0IHRoZSBwYXJ0aXRpb24gaW4gcGFydGl0aW9uX2J1 Y2tldCgpLgorICogICAgICBDdXJyZW50bHkgd2UgYXR0ZW1wdCB0byBkaXZp ZGUgdGhlIGJ1Y2tldCBpbnRvIHR3byBwYXJ0cyB3aXRoCisgKiAgICAgIHRo ZSBzYW1lIG51bWJlciBvZiBzYW1wbGVkIHR1cGxlcyAoZnJlcXVlbmN5KSwg YnV0IHRoYXQgZG9lcyBub3QKKyAqICAgICAgd29yayB3ZWxsIHdoZW4gYWxs IHRoZSB0dXBsZXMgYXJlIHNxdWFzaGVkIG9uIG9uZSBlbmQgb2YgdGhlCisg KiAgICAgIGJ1Y2tldCAoZS5nLiBleGFjdGx5IGF0IHRoZSBkaWFnb25hbCwg YXMgYT1iKS4gSW4gdGhhdCBjYXNlIHdlCisgKiAgICAgIHNwbGl0IHRoZSBi dWNrZXQgaW50byBhIHRpbnkgYnVja2V0IG9uIHRoZSBkaWFnb25hbCwgYW5k IGEgaHVnZQorICogICAgICByZW1haW5pbmcgcGFydCBvZiB0aGUgYnVja2V0 LCB3aGljaCBpcyBzdGlsbCBnb2luZyB0byBiZSBuYXJyb3cKKyAqICAgICAg YW5kIHdlJ3JlIHVubGlrZWx5IHRvIGZpeCB0aGF0LgorICoKKyAqICAgICAg U28gcGVyaGFwcyB3ZSBuZWVkIHR3byBwYXJ0aXRpb25pbmcgc3RyYXRlZ2ll cyAtIG9uZSBhaW1pbmcgdG8KKyAqICAgICAgc3BsaXQgYnVja2V0cyB3aXRo IGhpZ2ggZnJlcXVlbmN5IChudW1iZXIgb2Ygc2FtcGxlZCByb3dzKSwgdGhl CisgKiAgICAgIG90aGVyIGFpbWluZyB0byBzcGxpdCAibGFyZ2UiIGJ1Y2tl dHMuIEFuZCBhbHRlcm5hdGluZyBiZXR3ZWVuCisgKiAgICAgIHRoZW0sIHNv bWVob3cuCisgKgorICogVE9ETyBBbGxvd2luZyB0aGUgYnVja2V0IHRvIGRl Z2VuZXJhdGUgdG8gYSBzaW5nbGUgY29tYmluYXRpb24gb2YKKyAqICAgICAg dmFsdWVzIG1ha2VzIGl0IHJhdGhlciBzdHJhbmdlIE1DViBsaXN0LiBNYXli ZSB3ZSBzaG91bGQgdXNlCisgKiAgICAgIGhpZ2hlciBsb3dlciBib3VuZGFy eSwgb3IgbWF5YmUgbWFrZSB0aGUgc2VsZWN0aW9uIGNyaXRlcmlhCisgKiAg ICAgIG1vcmUgY29tcGxleCAoZS5nLiBjb25zaWRlciBudW1iZXIgb2Ygcm93 cyBpbiB0aGUgYnVja2V0LCBldGMuKS4KKyAqCisgKiAgICAgIFRoYXQgaG93 ZXZlciBpcyBkaWZmZXJlbnQgZnJvbSBidWNrZXRzICdkZWdlbmVyYXRlZCcg b25seSBmb3IKKyAqICAgICAgc29tZSBkaW1lbnNpb25zIChlLmcuIGhhbGYg b2YgdGhlbSksIHdoaWNoIGlzIHBlcmZlY3RseQorICogICAgICBhcHByb3By aWF0ZSBmb3Igc3RhdGlzdGljcyBvbiBhIGNvbWJpbmF0aW9uIG9mIGxvdyBh bmQgaGlnaAorICogICAgICBjYXJkaW5hbGl0eSBjb2x1bW5zLgorICoKKyAq IFRPRE8gQ29uc2lkZXIgdXNpbmcgc2ltaWxhciBsb3dlciBib3VuZGFyeSBm b3Igcm93IGNvdW50IGFzIGZvciBzaW1wbGUKKyAqICAgICAgaGlzdG9ncmFt cywgaS5lLiAzMDAgdHVwbGVzIHBlciBidWNrZXQuCisgKi8KK3N0YXRpYyBN VkJ1Y2tldAorc2VsZWN0X2J1Y2tldF90b19wYXJ0aXRpb24oaW50IG5idWNr ZXRzLCBNVkJ1Y2tldCAqIGJ1Y2tldHMpCit7CisJaW50IGk7CisJaW50IG51 bXJvd3MgPSAwOworCU1WQnVja2V0IGJ1Y2tldCA9IE5VTEw7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbmJ1Y2tldHM7IGkrKykKKwl7CisJCUhpc3RvZ3JhbUJ1 aWxkIGRhdGEgPSAoSGlzdG9ncmFtQnVpbGQpYnVja2V0c1tpXS0+YnVpbGRf ZGF0YTsKKwkJLyogaWYgdGhlIG51bWJlciBvZiByb3dzIGlzIGhpZ2hlciwg dXNlIHRoaXMgYnVja2V0ICovCisJCWlmICgoZGF0YS0+bmRpc3RpbmN0ID4g MikgJiYKKwkJCShkYXRhLT5udW1yb3dzID4gbnVtcm93cykgJiYKKwkJCShk YXRhLT5udW1yb3dzID49IE1JTl9CVUNLRVRfUk9XUykpIHsKKwkJCWJ1Y2tl dCA9IGJ1Y2tldHNbaV07CisJCQludW1yb3dzID0gZGF0YS0+bnVtcm93czsK KwkJfQorCX0KKworCS8qIG1heSBiZSBOVUxMIGlmIHRoZXJlIGFyZSBub3Qg YnVja2V0cyB3aXRoIChuZGlzdGluY3Q+MSkgKi8KKwlyZXR1cm4gYnVja2V0 OworfQorCisvKgorICogQSBzaW1wbGUgYnVja2V0IHBhcnRpdGlvbmluZyBp bXBsZW1lbnRhdGlvbiAtIHdlIGNob29zZSB0aGUgbG9uZ2VzdAorICogYnVj a2V0IGRpbWVuc2lvbiwgbWVhc3VyZWQgdXNpbmcgdGhlIGFycmF5IG9mIGRp c3RpbmN0IHZhbHVlcyBidWlsdAorICogYXQgdGhlIHZlcnkgYmVnaW5uaW5n IG9mIHRoZSBidWlsZC4KKyAqCisgKiBXZSBtYXAgYWxsIHRoZSBkaXN0aW5j dCB2YWx1ZXMgdG8gYSBbMCwxXSBpbnRlcnZhbCwgdW5pZm9ybWx5CisgKiBk aXN0cmlidXRlZCwgYW5kIHRoZW4gdXNlIHRoaXMgdG8gbWVhc3VyZSBsZW5n dGguIEl0J3MgZXNzZW50aWFsbHkKKyAqIGEgbnVtYmVyIG9mIGRpc3RpbmN0 IHZhbHVlcyB3aXRoaW4gdGhlIHJhbmdlLCBub3JtYWxpemVkIHRvIFswLDFd LgorICoKKyAqIFRoZW4gd2UgY2hvb3NlIGEgJ21pZGRsZScgdmFsdWUgc3Bs aXR0aW5nIHRoZSBidWNrZXQgaW50byB0d28gcGFydHMKKyAqIHdpdGggcm91 Z2hseSB0aGUgc2FtZSBmcmVxdWVuY3kuCisgKgorICogVGhpcyBzcGxpdHMg dGhlIGJ1Y2tldCBieSB0d2Vha2luZyB0aGUgZXhpc3Rpbmcgb25lLCBhbmQg cmV0dXJuaW5nCisgKiB0aGUgbmV3IGJ1Y2tldCAoZXNzZW50aWFsbHkgc2hy aW5raW5nIHRoZSBleGlzdGluZyBvbmUgaW4tcGxhY2UgYW5kCisgKiByZXR1 cm5pbmcgdGhlIG90aGVyICJoYWxmIiBhcyBhIG5ldyBidWNrZXQpLiBUaGUg Y2FsbGVyIGlzIHJlc3BvbnNpYmxlCisgKiBmb3IgYWRkaW5nIHRoZSBuZXcg YnVja2V0IGludG8gdGhlIGxpc3Qgb2YgYnVja2V0cy4KKyAqCisgKiBUaGVy ZSBhcmUgbXVsdGlwbGUgaGlzdG9ncmFtIG9wdGlvbnMsIGNlbnRlcmVkIGFy b3VuZCB0aGUgcGFydGl0aW9uaW5nCisgKiBjcml0ZXJpYSwgc3BlY2lmeWlu ZyBib3RoIGhvdyB0byBjaG9vc2UgYSBidWNrZXQgYW5kIHRoZSBkaW1lbnNp b24KKyAqIG1vc3QgaW4gbmVlZCBvZiBhIHNwbGl0LiBGb3IgYSBuaWNlIHN1 bW1hcnkgYW5kIGdlbmVyYWwgb3ZlcnZpZXcsIHNlZQorICogInJLLUhpc3Qg OiBhbiBSLVRyZWUgYmFzZWQgaGlzdG9ncmFtIGZvciBtdWx0aS1kaW1lbnNp b25hbCBzZWxlY3Rpdml0eQorICogZXN0aW1hdGlvbiIgdGhlc2lzIGJ5IEou IEEuIExvcGV6LCBDb25jb3JkaWEgVW5pdmVyc2l0eSwgcC4zNC0zNyAoYW5k CisgKiBwb3NzaWJseSBwLiAzMi0zNCBmb3IgZXhwbGFuYXRpb24gb2YgdGhl IHRlcm1zKS4KKyAqCisgKiBUT0RPIEl0IHJlcXVpcmVzIGNhcmUgdG8gcHJl dmVudCBzcGxpdHRpbmcgb25seSBvbmUgZGltZW5zaW9uIGFuZCBub3QKKyAq ICAgICAgc3BsaXR0aW5nIGFub3RoZXIgb25lIGF0IGFsbCAod2hpY2ggbWln aHQgaGFwcGVuIGVhc2lseSBpbiBjYXNlCisgKiAgICAgIG9mIHN0cm9uZ2x5 IGRlcGVuZGVudCBjb2x1bW5zIC0gZS5nLiB5PXgpLiBUaGUgY3VycmVudCBh bGdvcml0aG0KKyAqICAgICAgbWluaW1pemVzIHRoaXMsIGJ1dCBtYXkgc3Rp bGwgaGFwcGVuIGZvciBwZXJmZWN0bHkgZGVwZW5kZW50CisgKiAgICAgIGV4 YW1wbGVzICh3aGVuIGFsbCB0aGUgZGltZW5zaW9ucyBoYXZlIGVxdWFsIGxl bmd0aCwgdGhlIGZpcnN0CisgKiAgICAgIG9uZSB3aWxsIGJlIHNlbGVjdGVk KS4KKyAqCisgKiBUT0RPIFNob3VsZCBwcm9iYWJseSBjb25zaWRlciBzdGF0 aXN0aWNzIHRhcmdldCBmb3IgdGhlIGNvbHVtbnMgKGUuZy4KKyAqICAgICAg dG8gc3BsaXQgZGltZW5zaW9ucyB3aXRoIGhpZ2hlciBzdGF0aXN0aWNzIHRh cmdldCBtb3JlIGZyZXF1ZW50bHkpLgorICovCitzdGF0aWMgTVZCdWNrZXQK K3BhcnRpdGlvbl9idWNrZXQoTVZCdWNrZXQgYnVja2V0LCBpbnQydmVjdG9y ICphdHRycywKKwkJCQkgVmFjQXR0clN0YXRzICoqc3RhdHMsCisJCQkJIGlu dCAqbmRpc3R2YWx1ZXMsIERhdHVtICoqZGlzdHZhbHVlcykKK3sKKwlpbnQg aTsKKwlpbnQgZGltZW5zaW9uOworCWludCBudW1hdHRycyA9IGF0dHJzLT5k aW0xOworCisJRGF0dW0gc3BsaXRfdmFsdWU7CisJTVZCdWNrZXQgbmV3X2J1 Y2tldDsKKwlIaXN0b2dyYW1CdWlsZCBuZXdfZGF0YTsKKworCS8qIG5lZWRl ZCBmb3Igc29ydCwgd2hlbiBsb29raW5nIGZvciB0aGUgc3BsaXQgdmFsdWUg Ki8KKwlib29sIGlzTnVsbDsKKwlpbnQgbnZhbHVlcyA9IDA7CisJSGlzdG9n cmFtQnVpbGQgZGF0YSA9IChIaXN0b2dyYW1CdWlsZClidWNrZXQtPmJ1aWxk X2RhdGE7CisJU3RkQW5hbHl6ZURhdGEgKiBteXN0YXRzID0gTlVMTDsKKwlT Y2FsYXJJdGVtICogdmFsdWVzID0gKFNjYWxhckl0ZW0qKXBhbGxvYzAoZGF0 YS0+bnVtcm93cyAqIHNpemVvZihTY2FsYXJJdGVtKSk7CisJU29ydFN1cHBv cnREYXRhIHNzdXA7CisKKwkvKiBsb29raW5nIGZvciB0aGUgc3BsaXQgdmFs dWUgKi8KKwkvLyBpbnQgbmRpc3RpbmN0ID0gMTsJLyogbnVtYmVyIG9mIGRp c3RpbmN0IHZhbHVlcyBiZWxvdyBjdXJyZW50IHZhbHVlICovCisJaW50IG5y b3dzID0gMTsJCS8qIG51bWJlciBvZiByb3dzIGJlbG93IGN1cnJlbnQgdmFs dWUgKi8KKwlkb3VibGUgZGVsdGE7CisKKwkvKiBuZWVkZWQgd2hlbiBzcGxp dHRpbmcgdGhlIHZhbHVlcyAqLworCUhlYXBUdXBsZSAqIG9sZHJvd3MgPSBk YXRhLT5yb3dzOworCWludCBvbGRucm93cyA9IGRhdGEtPm51bXJvd3M7CisK KwkvKgorCSAqIFdlIGNhbid0IHNwbGl0IGJ1Y2tldHMgd2l0aCBhIHNpbmds ZSBkaXN0aW5jdCB2YWx1ZSAodGhpcyBhbHNvCisJICogZGlzcXVhbGlmaWVz IE5VTEwtb25seSBkaW1lbnNpb25zKS4gQWxzbywgdGhlcmUgaGFzIHRvIGJl IG11bHRpcGxlCisJICogc2FtcGxlIHJvd3MgKG90aGVyd2lzZSwgaG93IGNv dWxkIHRoZXJlIGJlIG1vcmUgZGlzdGluY3QgdmFsdWVzKS4KKwkgKi8KKwlB c3NlcnQoZGF0YS0+bmRpc3RpbmN0ID4gMSk7CisJQXNzZXJ0KGRhdGEtPm51 bXJvd3MgPiAxKTsKKwlBc3NlcnQoKG51bWF0dHJzID49IDIpICYmIChudW1h dHRycyA8PSBNVlNUQVRTX01BWF9ESU1FTlNJT05TKSk7CisKKwkvKgorCSAq IExvb2sgZm9yIHRoZSBuZXh0IGRpbWVuc2lvbiB0byBzcGxpdC4KKwkgKi8K KwlkZWx0YSA9IDAuMDsKKwlkaW1lbnNpb24gPSAtMTsKKworCWZvciAoaSA9 IDA7IGkgPCBudW1hdHRyczsgaSsrKQorCXsKKwkJRGF0dW0gKmEsICpiOwor CisJCW15c3RhdHMgPSAoU3RkQW5hbHl6ZURhdGEgKikgc3RhdHNbaV0tPmV4 dHJhX2RhdGE7CisKKwkJLyogaW5pdGlhbGl6ZSBzb3J0IHN1cHBvcnQsIGV0 Yy4gKi8KKwkJbWVtc2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkpOworCQlz c3VwLnNzdXBfY3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisKKwkJLyog V2UgYWx3YXlzIHVzZSB0aGUgZGVmYXVsdCBjb2xsYXRpb24gZm9yIHN0YXRp c3RpY3MgKi8KKwkJc3N1cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09M TEFUSU9OX09JRDsKKwkJc3N1cC5zc3VwX251bGxzX2ZpcnN0ID0gZmFsc2U7 CisKKwkJUHJlcGFyZVNvcnRTdXBwb3J0RnJvbU9yZGVyaW5nT3AobXlzdGF0 cy0+bHRvcHIsICZzc3VwKTsKKworCQkvKiBjYW4ndCBzcGxpdCBOVUxMLW9u bHkgZGltZW5zaW9uICovCisJCWlmIChidWNrZXQtPm51bGxzb25seVtpXSkK KwkJCWNvbnRpbnVlOworCisJCS8qIGNhbid0IHNwbGl0IGRpbWVuc2lvbiB3 aXRoIGEgc2luZ2xlIG5kaXN0aW5jdCB2YWx1ZSAqLworCQlpZiAoZGF0YS0+ bmRpc3RpbmN0c1tpXSA8PSAxKQorCQkJY29udGludWU7CisKKwkJLyogc29y dCBzdXBwb3J0IGZvciB0aGUgYnNlYXJjaF9jb21wYXJhdG9yICovCisJCXNz dXBfcHJpdmF0ZSA9ICZzc3VwOworCisJCS8qIHNlYXJjaCBmb3IgbWluIGJv dW5kYXJ5IGluIHRoZSBkaXN0aW5jdCBsaXN0ICovCisJCWEgPSAoRGF0dW0q KWJzZWFyY2goJmJ1Y2tldC0+bWluW2ldLAorCQkJCQkJCWRpc3R2YWx1ZXNb aV0sIG5kaXN0dmFsdWVzW2ldLAorCQkJCQkJCXNpemVvZihEYXR1bSksIGJz ZWFyY2hfY29tcGFyYXRvcik7CisKKwkJYiA9IChEYXR1bSopYnNlYXJjaCgm YnVja2V0LT5tYXhbaV0sCisJCQkJCQkJZGlzdHZhbHVlc1tpXSwgbmRpc3R2 YWx1ZXNbaV0sCisJCQkJCQkJc2l6ZW9mKERhdHVtKSwgYnNlYXJjaF9jb21w YXJhdG9yKTsKKworCQkvKiBpZiB0aGlzIGRpbWVuc2lvbiBpcyAnbGFyZ2Vy JyB0aGVuIHBhcnRpdGlvbiBieSBpdCAqLworCQlpZiAoKChiLWEpKjEuMCAv IG5kaXN0dmFsdWVzW2ldKSA+IGRlbHRhKQorCQl7CisJCQlkZWx0YSA9ICgo Yi1hKSoxLjAgLyBuZGlzdHZhbHVlc1tpXSk7CisJCQlkaW1lbnNpb24gPSBp OworCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlbid0IGZvdW5kIGEg ZGltZW5zaW9uIGhlcmUsIHdlJ3ZlIGRvbmUgc29tZXRoaW5nCisJICogd3Jv bmcgaW4gc2VsZWN0X2J1Y2tldF90b19wYXJ0aXRpb24uCisJICovCisJQXNz ZXJ0KGRpbWVuc2lvbiAhPSAtMSk7CisKKwkvKgorCSAqIFdhbGsgdGhyb3Vn aCB0aGUgc2VsZWN0ZWQgZGltZW5zaW9uLCBjb2xsZWN0IGFuZCBzb3J0IHRo ZSB2YWx1ZXMKKwkgKiBhbmQgdGhlbiBjaG9vc2UgdGhlIHZhbHVlIHRvIHVz ZSBhcyB0aGUgbmV3IGJvdW5kYXJ5LgorCSAqLworCW15c3RhdHMgPSAoU3Rk QW5hbHl6ZURhdGEgKikgc3RhdHNbZGltZW5zaW9uXS0+ZXh0cmFfZGF0YTsK KworCS8qIGluaXRpYWxpemUgc29ydCBzdXBwb3J0LCBldGMuICovCisJbWVt c2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkpOworCXNzdXAuc3N1cF9jeHQg PSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8qIFdlIGFsd2F5cyB1c2Ug dGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBzdGF0aXN0aWNzICovCisJc3N1 cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09MTEFUSU9OX09JRDsKKwlz c3VwLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsKKworCVByZXBhcmVTb3J0 U3VwcG9ydEZyb21PcmRlcmluZ09wKG15c3RhdHMtPmx0b3ByLCAmc3N1cCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtcm93czsgaSsrKQorCXsK KwkJLyogcmVtZW1iZXIgdGhlIGluZGV4IG9mIHRoZSBzYW1wbGUgcm93LCB0 byBtYWtlIHRoZSBwYXJ0aXRpb25pbmcgc2ltcGxlciAqLworCQl2YWx1ZXNb bnZhbHVlc10udmFsdWUgPSBoZWFwX2dldGF0dHIoZGF0YS0+cm93c1tpXSwg YXR0cnMtPnZhbHVlc1tkaW1lbnNpb25dLAorCQkJCQkJCQkJCQkgc3RhdHNb ZGltZW5zaW9uXS0+dHVwRGVzYywgJmlzTnVsbCk7CisJCXZhbHVlc1tudmFs dWVzXS50dXBubyA9IGk7CisKKwkJLyogbm8gTlVMTCB2YWx1ZXMgYWxsb3dl ZCBoZXJlICh3ZSBkb24ndCBkbyBzcGxpdHMgYnkgbnVsbC1vbmx5IGRpbWVu c2lvbnMpICovCisJCUFzc2VydCghaXNOdWxsKTsKKworCQludmFsdWVzKys7 CisJfQorCisJLyogc29ydCB0aGUgYXJyYXkgb2YgdmFsdWVzICovCisJcXNv cnRfYXJnKCh2b2lkICopIHZhbHVlcywgbnZhbHVlcywgc2l6ZW9mKFNjYWxh ckl0ZW0pLAorCQkJICBjb21wYXJlX3NjYWxhcnNfcGFydGl0aW9uLCAodm9p ZCAqKSAmc3N1cCk7CisKKwkvKgorCSAqIFdlIGtub3cgdGhlcmUgYXJlIGJ1 Y2tldC0+bmRpc3RpbmN0c1tkaW1lbnNpb25dIGRpc3RpbmN0IHZhbHVlcwor CSAqIGluIHRoaXMgZGltZW5zaW9uLCBhbmQgd2Ugd2FudCB0byBzcGxpdCB0 aGlzIGludG8gaGFsZiwgc28gd2FsaworCSAqIHRocm91Z2ggdGhlIGFycmF5 IGFuZCBzdG9wIG9uY2Ugd2Ugc2VlIChuZGlzdGluY3QvMikgdmFsdWVzLgor CSAqCisJICogV2UgYWx3YXlzIGNob29zZSB0aGUgIm5leHQiIHZhbHVlLCBp LmUuIChuLzIrMSktdGggZGlzdGluY3QgdmFsdWUsCisJICogYW5kIHVzZSBp dCBhcyBhbiBleGNsdXNpdmUgdXBwZXIgYm91bmRhcnkgKGFuZCBpbmNsdXNp dmUgbG93ZXIKKwkgKiBib3VuZGFyeSkuCisJICoKKwkgKiBUT0RPIE1heWJl IHdlIHNob3VsZCB1c2UgImF2ZXJhZ2UiIG9mIHRoZSB0d28gbWlkZGxlIGRp c3RpbmN0CisJICogICAgICB2YWx1ZXMgKGF0IGxlYXN0IGZvciBldmVuIGRp c3RpbmN0IGNvdW50cyksIGJ1dCB0aGF0IHdvdWxkCisJICogICAgICByZXF1 aXJlIGJlaW5nIGFibGUgdG8gZG8gYW4gYXZlcmFnZSAod2hpY2ggZG9lcyBu b3Qgd29yaworCSAqICAgICAgZm9yIG5vbi1hcml0aG1ldGljIHR5cGVzKS4K KwkgKgorCSAqIFRPRE8gQW5vdGhlciBvcHRpb24gaXMgdG8gbG9vayBmb3Ig YSBzcGxpdCB0aGF0J2QgZ2l2ZSBhYm91dAorCSAqICAgICAgNTAlIHR1cGxl cyAobm90IGRpc3RpbmN0IHZhbHVlcykgaW4gZWFjaCBwYXJ0aXRpb24uIFRo YXQKKwkgKiAgICAgIG1pZ2h0IHdvcmsgYmV0dGVyIHdoZW4gdGhlcmUgYXJl IGEgZmV3IHZlcnkgZnJlcXVlbnQKKwkgKiAgICAgIHZhbHVlcywgYW5kIG1h bnkgcmFyZSBvbmVzLgorCSAqLworCWRlbHRhID0gZmFicyhkYXRhLT5udW1y b3dzKTsKKwlzcGxpdF92YWx1ZSA9IHZhbHVlc1swXS52YWx1ZTsKKworCWZv ciAoaSA9IDE7IGkgPCBkYXRhLT5udW1yb3dzOyBpKyspCisJeworCQlpZiAo dmFsdWVzW2ldLnZhbHVlICE9IHZhbHVlc1tpLTFdLnZhbHVlKQorCQl7CisJ CQkvKiBhcmUgd2UgY2xvc2VyIHRvIHNwbGl0dGluZyB0aGUgYnVja2V0IGlu IGhhbGY/ICovCisJCQlpZiAoZmFicyhpIC0gZGF0YS0+bnVtcm93cy8yLjAp IDwgZGVsdGEpCisJCQl7CisJCQkJLyogbGV0J3MgYXNzdW1lIHdlJ2xsIHVz ZSB0aGlzIHZhbHVlIGZvciB0aGUgc3BsaXQgKi8KKwkJCQlzcGxpdF92YWx1 ZSA9IHZhbHVlc1tpXS52YWx1ZTsKKwkJCQlkZWx0YSA9IGZhYnMoaSAtIGRh dGEtPm51bXJvd3MvMi4wKTsKKwkJCQlucm93cyA9IGk7CisJCQl9CisJCX0K Kwl9CisKKwlBc3NlcnQobnJvd3MgPiAwKTsKKwlBc3NlcnQobnJvd3MgPCBk YXRhLT5udW1yb3dzKTsKKworCS8qIGNyZWF0ZSB0aGUgbmV3IGJ1Y2tldCBh cyBhIChpbmNvbXBsZXRlKSBjb3B5IG9mIHRoZSBvbmUgYmVpbmcgcGFydGl0 aW9uZWQuICovCisJbmV3X2J1Y2tldCA9IGNvcHlfbXZfYnVja2V0KGJ1Y2tl dCwgbnVtYXR0cnMpOworCW5ld19kYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKW5l d19idWNrZXQtPmJ1aWxkX2RhdGE7CisKKwkvKgorCSogRG8gdGhlIGFjdHVh bCBzcGxpdCBvZiB0aGUgY2hvc2VuIGRpbWVuc2lvbiwgdXNpbmcgdGhlIHNw bGl0IHZhbHVlIGFzIHRoZQorCSogdXBwZXIgYm91bmQgZm9yIHRoZSBleGlz dGluZyBidWNrZXQsIGFuZCBsb3dlciBib3VuZCBmb3IgdGhlIG5ldyBvbmUu CisJKi8KKwlidWNrZXQtPm1heFtkaW1lbnNpb25dICAgICA9IHNwbGl0X3Zh bHVlOworCW5ld19idWNrZXQtPm1pbltkaW1lbnNpb25dID0gc3BsaXRfdmFs dWU7CisKKwlidWNrZXQtPm1heF9pbmNsdXNpdmVbZGltZW5zaW9uXQkJPSBm YWxzZTsKKwluZXdfYnVja2V0LT5tYXhfaW5jbHVzaXZlW2RpbWVuc2lvbl0J PSB0cnVlOworCisJLyoKKwkgKiBSZWRpc3RyaWJ1dGUgdGhlIHNhbXBsZSB0 dXBsZXMgdXNpbmcgdGhlICdTY2FsYXJJdGVtLT50dXBubycKKwkgKiBpbmRl eC4gV2Uga25vdyAnbnJvd3MnIHJvd3Mgc2hvdWxkIHJlbWFpbiBpbiB0aGUg b3JpZ2luYWwKKwkgKiBidWNrZXQgYW5kIHRoZSByZXN0IGdvZXMgdG8gdGhl IG5ldyBvbmUuCisJICovCisKKwlkYXRhLT5yb3dzICAgICA9IChIZWFwVHVw bGUqKXBhbGxvYzAobnJvd3MgKiBzaXplb2YoSGVhcFR1cGxlKSk7CisJbmV3 X2RhdGEtPnJvd3MgPSAoSGVhcFR1cGxlKilwYWxsb2MwKChvbGRucm93cyAt IG5yb3dzKSAqIHNpemVvZihIZWFwVHVwbGUpKTsKKworCWRhdGEtPm51bXJv d3MJID0gbnJvd3M7CisJbmV3X2RhdGEtPm51bXJvd3MgPSAob2xkbnJvd3Mg LSBucm93cyk7CisKKwkvKgorCSAqIFRoZSBmaXJzdCBucm93cyBzaG91bGQg Z28gdG8gdGhlIGZpcnN0IGJ1Y2tldCwgdGhlIHJlc3Qgc2hvdWxkCisJICog Z28gdG8gdGhlIG5ldyBvbmUuIFVzZSB0aGUgdHVwbm8gZmllbGQgdG8gZ2V0 IHRoZSBhY3R1YWwgSGVhcFR1cGxlCisJICogcm93IGZyb20gdGhlIG9yaWdp bmFsIGFycmF5IG9mIHNhbXBsZSByb3dzLgorCSAqLworCWZvciAoaSA9IDA7 IGkgPCBucm93czsgaSsrKQorCQltZW1jcHkoJmRhdGEtPnJvd3NbaV0sICZv bGRyb3dzW3ZhbHVlc1tpXS50dXBub10sIHNpemVvZihIZWFwVHVwbGUpKTsK KworCWZvciAoaSA9IG5yb3dzOyBpIDwgb2xkbnJvd3M7IGkrKykKKwkJbWVt Y3B5KCZuZXdfZGF0YS0+cm93c1tpLW5yb3dzXSwgJm9sZHJvd3NbdmFsdWVz W2ldLnR1cG5vXSwgc2l6ZW9mKEhlYXBUdXBsZSkpOworCisJLyogdXBkYXRl IG5kaXN0aW5jdCB2YWx1ZXMgZm9yIHRoZSBidWNrZXRzICh0b3RhbCBhbmQg cGVyIGRpbWVuc2lvbikgKi8KKwl1cGRhdGVfYnVja2V0X25kaXN0aW5jdChi dWNrZXQsIGF0dHJzLCBzdGF0cyk7CisJdXBkYXRlX2J1Y2tldF9uZGlzdGlu Y3QobmV3X2J1Y2tldCwgYXR0cnMsIHN0YXRzKTsKKworCS8qCisJICogVE9E TyBXZSBkb24ndCBuZWVkIHRvIGRvIHRoaXMgZm9yIHRoZSBkaW1lbnNpb24g d2UgdXNlZCBmb3Igc3BsaXQsCisJICogICAgICBiZWNhdXNlIHdlIGtub3cg aG93IG1hbnkgZGlzdGluY3QgdmFsdWVzIHdlbnQgdG8gZWFjaCBwYXJ0aXRp b24uCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bWF0dHJzOyBpKyspCisJ eworCQl1cGRhdGVfZGltZW5zaW9uX25kaXN0aW5jdChidWNrZXQsIGksIGF0 dHJzLCBzdGF0cywgZmFsc2UpOworCQl1cGRhdGVfZGltZW5zaW9uX25kaXN0 aW5jdChuZXdfYnVja2V0LCBpLCBhdHRycywgc3RhdHMsIGZhbHNlKTsKKwl9 CisKKwlwZnJlZShvbGRyb3dzKTsKKwlwZnJlZSh2YWx1ZXMpOworCisJcmV0 dXJuIG5ld19idWNrZXQ7Cit9CisKKy8qCisgKiBDb3B5IGEgaGlzdG9ncmFt IGJ1Y2tldC4gVGhlIGNvcHkgZG9lcyBub3QgaW5jbHVkZSB0aGUgYnVpbGQt dGltZQorICogZGF0YSwgaS5lLiBzYW1wbGVkIHJvd3MgZXRjLgorICovCitz dGF0aWMgTVZCdWNrZXQKK2NvcHlfbXZfYnVja2V0KE1WQnVja2V0IGJ1Y2tl dCwgdWludDMyIG5kaW1lbnNpb25zKQoreworCS8qIFRPRE8gYWxsb2NhdGUg YXMgYSBzaW5nbGUgcGllY2UgKGluY2x1ZGluZyBhbGwgdGhlIGZpZWxkcykg Ki8KKwlNVkJ1Y2tldCBuZXdfYnVja2V0ID0gKE1WQnVja2V0KXBhbGxvYzAo c2l6ZW9mKE1WQnVja2V0RGF0YSkpOworCUhpc3RvZ3JhbUJ1aWxkIGRhdGEg PSAoSGlzdG9ncmFtQnVpbGQpcGFsbG9jMChzaXplb2YoSGlzdG9ncmFtQnVp bGREYXRhKSk7CisKKwkvKiBDb3B5IG9ubHkgdGhlIGF0dHJpYnV0ZXMgdGhh dCB3aWxsIHN0YXkgdGhlIHNhbWUgYWZ0ZXIgdGhlIHNwbGl0LCBhbmQKKwkg KiB3ZSdsbCByZWNvbXB1dGUgdGhlIHJlc3QgYWZ0ZXIgdGhlIHNwbGl0LiAq LworCisJLyogYWxsb2NhdGUgdGhlIHBlci1kaW1lbnNpb24gYXJyYXlzICov CisJbmV3X2J1Y2tldC0+bnVsbHNvbmx5ID0gKGJvb2wqKXBhbGxvYzAobmRp bWVuc2lvbnMgKiBzaXplb2YoYm9vbCkpOworCisJLyogaW5jbHVzaXZlbmVz cyBib3VuZGFyaWVzIC0gbG93ZXIvdXBwZXIgYm91bmRzICovCisJbmV3X2J1 Y2tldC0+bWluX2luY2x1c2l2ZSA9IChib29sKilwYWxsb2MwKG5kaW1lbnNp b25zICogc2l6ZW9mKGJvb2wpKTsKKwluZXdfYnVja2V0LT5tYXhfaW5jbHVz aXZlID0gKGJvb2wqKXBhbGxvYzAobmRpbWVuc2lvbnMgKiBzaXplb2YoYm9v bCkpOworCisJLyogbG93ZXIvdXBwZXIgYm91bmRhcmllcyAqLworCW5ld19i dWNrZXQtPm1pbiA9IChEYXR1bSopcGFsbG9jMChuZGltZW5zaW9ucyAqIHNp emVvZihEYXR1bSkpOworCW5ld19idWNrZXQtPm1heCA9IChEYXR1bSopcGFs bG9jMChuZGltZW5zaW9ucyAqIHNpemVvZihEYXR1bSkpOworCisJLyogY29w eSBkYXRhICovCisJbWVtY3B5KG5ld19idWNrZXQtPm51bGxzb25seSwgYnVj a2V0LT5udWxsc29ubHksIG5kaW1lbnNpb25zICogc2l6ZW9mKGJvb2wpKTsK KworCW1lbWNweShuZXdfYnVja2V0LT5taW5faW5jbHVzaXZlLCBidWNrZXQt Pm1pbl9pbmNsdXNpdmUsIG5kaW1lbnNpb25zKnNpemVvZihib29sKSk7CisJ bWVtY3B5KG5ld19idWNrZXQtPm1pbiwgYnVja2V0LT5taW4sIG5kaW1lbnNp b25zKnNpemVvZihEYXR1bSkpOworCisJbWVtY3B5KG5ld19idWNrZXQtPm1h eF9pbmNsdXNpdmUsIGJ1Y2tldC0+bWF4X2luY2x1c2l2ZSwgbmRpbWVuc2lv bnMqc2l6ZW9mKGJvb2wpKTsKKwltZW1jcHkobmV3X2J1Y2tldC0+bWF4LCBi dWNrZXQtPm1heCwgbmRpbWVuc2lvbnMqc2l6ZW9mKERhdHVtKSk7CisKKwkv KiBhbGxvY2F0ZSBhbmQgY29weSB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0 aGUgYnVpbGQgZGF0YSAqLworCWRhdGEtPm5kaXN0aW5jdHMgPSAodWludDMy KilwYWxsb2MwKG5kaW1lbnNpb25zICogc2l6ZW9mKHVpbnQzMikpOworCisJ bmV3X2J1Y2tldC0+YnVpbGRfZGF0YSA9IGRhdGE7CisKKwlyZXR1cm4gbmV3 X2J1Y2tldDsKK30KKworLyoKKyAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGRp c3RpbmN0IHZhbHVlcyBpbiB0aGUgYnVja2V0LiBUaGlzIGp1c3QgY29waWVz CisgKiB0aGUgRGF0dW0gdmFsdWVzIGludG8gYSBzaW1wbGUgYXJyYXksIGFu ZCBzb3J0cyB0aGVtIHVzaW5nIG1lbWNtcC1iYXNlZAorICogY29tcGFyYXRv ci4gVGhhdCBtZWFucyBpdCBvbmx5IHdvcmtzIGZvciBwYXNzLWJ5LXZhbHVl IGRhdGEgdHlwZXMKKyAqIChhc3N1bWluZyB0aGV5IGRvbid0IHVzZSBjb2xs YXRpb25zIGV0Yy4pCisgKgorICogVE9ETyBUaGlzIG1pZ2h0IGV2YWx1YXRl IGFuZCBzdG9yZSB0aGUgZGlzdGluY3QgY291bnRzIGZvciBhbGwKKyAqICAg ICAgcG9zc2libGUgYXR0cmlidXRlIGNvbWJpbmF0aW9ucy4gVGhlIGFzc3Vt cHRpb24gaXMgdGhpcyBtaWdodCBiZQorICogICAgICB1c2VmdWwgZm9yIGVz dGltYXRpbmcgdGhpbmdzIGxpa2UgR1JPVVAgQlkgY2FyZGluYWxpdGllcyAo ZS5nLgorICogICAgICBpbiBjYXNlcyB3aGVuIHNvbWUgYnVja2V0cyBjb250 YWluIGEgbG90IG9mIGxvdy1mcmVxdWVuY3kKKyAqICAgICAgY29tYmluYXRp b25zLCBhbmQgb3RoZXIgYnVja2V0cyBjb250YWluIGZldyBoaWdoLWZyZXF1 ZW5jeSBvbmVzKS4KKyAqCisgKiAgICAgIEJ1dCBpdCdzIHVuY2xlYXIgd2hl dGhlciBpdCdzIHdvcnRoIHRoZSBwcmljZS4gQ29tcHV0aW5nIHRoaXMKKyAq ICAgICAgaXMgYWN0dWFsbHkgcXVpdGUgY2hlYXAsIGJlY2F1c2UgaXQgbWF5 IGJlIGV2YWx1YXRlZCBhdCB0aGUgdmVyeQorICogICAgICBlbmQsIHdoZW4g dGhlIGJ1Y2tldHMgYXJlIHJhdGhlciBzbWFsbCAoc28gc29ydGluZyBpdCBp biAyXk4gd2F5cworICogICAgICBpcyBub3QgYSBiaWcgZGVhbCkuIEFzc3Vt aW5nIHRoZSBwYXJ0aXRpb25pbmcgYWxnb3JpdGhtIGRvZXMgbm90CisgKiAg ICAgIHVzZSB0aGVzZSB2YWx1ZXMgdG8gZG8gdGhlIGRlY2lzaW9ucywgb2Yg Y291cnNlICh0aGUgY3VycmVudAorICogICAgICBhbGdvcml0aG0gZG9lcyBu b3QpLgorICoKKyAqICAgICAgVGhlIG92ZXJoZWFkIHdpdGggc3RvcmluZywg ZmV0Y2hpbmcgYW5kIHBhcnNpbmcgdGhlIGRhdGEgaXMgbW9yZQorICogICAg ICBjb25jZXJuaW5nIC0gYWRkaW5nIDJeTiB2YWx1ZXMgcGVyIGJ1Y2tldCAo ZXZlbiBpZiBpdCdzIGp1c3QKKyAqICAgICAgYSAxQiBvciAyQiB2YWx1ZSkg d291bGQgc2lnbmlmaWNhbnRseSBibG9hdCB0aGUgaGlzdG9ncmFtLCBhbmQK KyAqICAgICAgdGh1cyB0aGUgaW1wYWN0IG9uIG9wdGltaXplci4gV2hpY2gg aXMgbm90IHJlYWxseSBkZXNpcmFibGUuCisgKgorICogVE9ETyBUaGlzIG9u bHkgdXBkYXRlcyB0aGUgbmRpc3RpbmN0IGZvciB0aGUgc2FtcGxlIChvciBi dWNrZXQpLCBidXQKKyAqICAgICAgd2UgZXZlbnR1YWxseSBuZWVkIGFuIGVz dGltYXRlIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YgZGlzdGluY3QKKyAqICAg ICAgdmFsdWVzIGluIHRoZSBkYXRhc2V0LiBJdCdzIHBvc3NpYmxlIHRvIGVp dGhlciB1c2UgdGhlIGN1cnJlbnQKKyAqICAgICAgMUQgYXBwcm9hY2ggKGku ZS4sIGlmIGl0J3MgbW9yZSB0aGFuIDEwJSBvZiB0aGUgc2FtcGxlLCBhc3N1 bWUKKyAqICAgICAgaXQncyBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBv ZiByb3dzKS4gT3IgaXQncyBwb3NzaWJsZSB0bworICogICAgICBpbXBsZW1l bnQgdGhlIGVzdGltYXRvciBzdWdnZXN0ZWQgaW4gdGhlIGFydGljbGUsIHN1 cHBvc2VkbHkKKyAqICAgICAgZ2l2aW5nICdvcHRpbWFsJyBlc3RpbWF0ZXMg KHcuci50LiBwcm9iYWJpbGl0eSBvZiBlcnJvcikuCisgKi8KK3N0YXRpYyB2 b2lkCit1cGRhdGVfYnVja2V0X25kaXN0aW5jdChNVkJ1Y2tldCBidWNrZXQs IGludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKiogc3RhdHMpCit7 CisJaW50IGksIGo7CisJaW50IG51bWF0dHJzID0gYXR0cnMtPmRpbTE7CisK KwlIaXN0b2dyYW1CdWlsZCBkYXRhID0gKEhpc3RvZ3JhbUJ1aWxkKWJ1Y2tl dC0+YnVpbGRfZGF0YTsKKwlpbnQgbnVtcm93cyA9IGRhdGEtPm51bXJvd3M7 CisKKwlNdWx0aVNvcnRTdXBwb3J0IG1zcyA9IG11bHRpX3NvcnRfaW5pdChu dW1hdHRycyk7CisKKwkvKgorCSAqIFdlIGNvdWxkIGNvbGxlY3QgdGhpcyB3 aGlsZSB3YWxraW5nIHRocm91Z2ggYWxsIHRoZSBhdHRyaWJ1dGVzCisJICog YWJvdmUgKHRoaXMgd2F5IHdlIGhhdmUgdG8gY2FsbCBoZWFwX2dldGF0dHIg dHdpY2UpLgorCSAqLworCVNvcnRJdGVtICAgKml0ZW1zICA9IChTb3J0SXRl bSopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKFNvcnRJdGVtKSk7CisJRGF0 dW0JICAgKnZhbHVlcyA9IChEYXR1bSopcGFsbG9jMChudW1yb3dzICogc2l6 ZW9mKERhdHVtKSAqIG51bWF0dHJzKTsKKwlib29sCSAgICppc251bGwgPSAo Ym9vbCopcGFsbG9jMChudW1yb3dzICogc2l6ZW9mKGJvb2wpICogbnVtYXR0 cnMpOworCisJZm9yIChpID0gMDsgaSA8IG51bXJvd3M7IGkrKykKKwl7CisJ CWl0ZW1zW2ldLnZhbHVlcyA9ICZ2YWx1ZXNbaSAqIG51bWF0dHJzXTsKKwkJ aXRlbXNbaV0uaXNudWxsID0gJmlzbnVsbFtpICogbnVtYXR0cnNdOworCX0K KworCS8qIHByZXBhcmUgdGhlIHNvcnQgZnVuY3Rpb24gZm9yIHRoZSBmaXJz dCBkaW1lbnNpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkr KykKKwkJbXVsdGlfc29ydF9hZGRfZGltZW5zaW9uKG1zcywgaSwgaSwgc3Rh dHMpOworCisJLyogY29sbGVjdCB0aGUgdmFsdWVzICovCisJZm9yIChpID0g MDsgaSA8IG51bXJvd3M7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IG51bWF0 dHJzOyBqKyspCisJCQlpdGVtc1tpXS52YWx1ZXNbal0KKwkJCQk9IGhlYXBf Z2V0YXR0cihkYXRhLT5yb3dzW2ldLCBhdHRycy0+dmFsdWVzW2pdLAorCQkJ CQkJCQlzdGF0c1tqXS0+dHVwRGVzYywgJml0ZW1zW2ldLmlzbnVsbFtqXSk7 CisKKwlxc29ydF9hcmcoKHZvaWQgKikgaXRlbXMsIG51bXJvd3MsIHNpemVv ZihTb3J0SXRlbSksCisJCQkgIG11bHRpX3NvcnRfY29tcGFyZSwgbXNzKTsK KworCWRhdGEtPm5kaXN0aW5jdCA9IDE7CisKKwlmb3IgKGkgPSAxOyBpIDwg bnVtcm93czsgaSsrKQorCQlpZiAobXVsdGlfc29ydF9jb21wYXJlKCZpdGVt c1tpXSwgJml0ZW1zW2ktMV0sIG1zcykgIT0gMCkKKwkJCWRhdGEtPm5kaXN0 aW5jdCArPSAxOworCisJcGZyZWUoaXRlbXMpOworCXBmcmVlKHZhbHVlcyk7 CisJcGZyZWUoaXNudWxsKTsKK30KKworLyoKKyAqIENvdW50IGRpc3RpbmN0 IHZhbHVlcyBwZXIgYnVja2V0IGRpbWVuc2lvbi4KKyAqLworc3RhdGljIHZv aWQKK3VwZGF0ZV9kaW1lbnNpb25fbmRpc3RpbmN0KE1WQnVja2V0IGJ1Y2tl dCwgaW50IGRpbWVuc2lvbiwgaW50MnZlY3RvciAqYXR0cnMsCisJCQkJCQkg ICBWYWNBdHRyU3RhdHMgKiogc3RhdHMsIGJvb2wgdXBkYXRlX2JvdW5kYXJp ZXMpCit7CisJaW50IGo7CisJaW50IG52YWx1ZXMgPSAwOworCWJvb2wgaXNO dWxsOworCUhpc3RvZ3JhbUJ1aWxkIGRhdGEgPSAoSGlzdG9ncmFtQnVpbGQp YnVja2V0LT5idWlsZF9kYXRhOworCURhdHVtICogdmFsdWVzID0gKERhdHVt KilwYWxsb2MwKGRhdGEtPm51bXJvd3MgKiBzaXplb2YoRGF0dW0pKTsKKwlT b3J0U3VwcG9ydERhdGEgc3N1cDsKKworCVN0ZEFuYWx5emVEYXRhICogbXlz dGF0cyA9IChTdGRBbmFseXplRGF0YSAqKSBzdGF0c1tkaW1lbnNpb25dLT5l eHRyYV9kYXRhOworCisJLyogd2UgbWF5IGFscmVhZHkga25vdyB0aGlzIGlz IGEgTlVMTC1vbmx5IGRpbWVuc2lvbiAqLworCWlmIChidWNrZXQtPm51bGxz b25seVtkaW1lbnNpb25dKQorCQlkYXRhLT5uZGlzdGluY3RzW2RpbWVuc2lv bl0gPSAxOworCisJbWVtc2V0KCZzc3VwLCAwLCBzaXplb2Yoc3N1cCkpOwor CXNzdXAuc3N1cF9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKKworCS8q IFdlIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgY29sbGF0aW9uIGZvciBzdGF0 aXN0aWNzICovCisJc3N1cC5zc3VwX2NvbGxhdGlvbiA9IERFRkFVTFRfQ09M TEFUSU9OX09JRDsKKwlzc3VwLnNzdXBfbnVsbHNfZmlyc3QgPSBmYWxzZTsK KworCVByZXBhcmVTb3J0U3VwcG9ydEZyb21PcmRlcmluZ09wKG15c3RhdHMt Pmx0b3ByLCAmc3N1cCk7CisKKwlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVt cm93czsgaisrKQorCXsKKwkJdmFsdWVzW252YWx1ZXNdID0gaGVhcF9nZXRh dHRyKGRhdGEtPnJvd3Nbal0sIGF0dHJzLT52YWx1ZXNbZGltZW5zaW9uXSwK KwkJCQkJCQkJCSAgIHN0YXRzW2RpbWVuc2lvbl0tPnR1cERlc2MsICZpc051 bGwpOworCisJCS8qIGlnbm9yZSBOVUxMIHZhbHVlcyAqLworCQlpZiAoISBp c051bGwpCisJCQludmFsdWVzKys7CisJfQorCisJLyogdGhlcmUncyBhbHdh eXMgYXQgbGVhc3QgMSBkaXN0aW5jdCB2YWx1ZSAobWF5IGJlIE5VTEwpICov CisJZGF0YS0+bmRpc3RpbmN0c1tkaW1lbnNpb25dID0gMTsKKworCS8qIGlm IHRoZXJlIGFyZSBvbmx5IE5VTEwgdmFsdWVzIGluIHRoZSBjb2x1bW4sIG1h cmsgaXQgc28gYW5kIGNvbnRpbnVlCisJICogd2l0aCB0aGUgbmV4dCBvbmUg Ki8KKwlpZiAobnZhbHVlcyA9PSAwKQorCXsKKwkJcGZyZWUodmFsdWVzKTsK KwkJYnVja2V0LT5udWxsc29ubHlbZGltZW5zaW9uXSA9IHRydWU7CisJCXJl dHVybjsKKwl9CisKKwkvKiBzb3J0IHRoZSBhcnJheSAocGFzcy1ieS12YWx1 ZSBkYXR1bSAqLworCXFzb3J0X2FyZygodm9pZCAqKSB2YWx1ZXMsIG52YWx1 ZXMsIHNpemVvZihEYXR1bSksCisJCQkgIGNvbXBhcmVfc2NhbGFyc19zaW1w bGUsICh2b2lkICopICZzc3VwKTsKKworCS8qCisJICogVXBkYXRlIG1pbi9t YXggYm91bmRhcmllcyB0byB0aGUgc21hbGxlc3QgYm91bmRpbmcgYm94LiBH ZW5lcmFsbHksIHRoaXMKKwkgKiBuZWVkcyB0byBiZSBkb25lIG9ubHkgd2hl biBjb25zdHJ1Y3RpbmcgdGhlIGluaXRpYWwgYnVja2V0LgorCSAqLworCWlm ICh1cGRhdGVfYm91bmRhcmllcykKKwl7CisJCS8qIHN0b3JlIHRoZSBtaW4v bWF4IHZhbHVlcyAqLworCQlidWNrZXQtPm1pbltkaW1lbnNpb25dID0gdmFs dWVzWzBdOworCQlidWNrZXQtPm1pbl9pbmNsdXNpdmVbZGltZW5zaW9uXSA9 IHRydWU7CisKKwkJYnVja2V0LT5tYXhbZGltZW5zaW9uXSA9IHZhbHVlc1tu dmFsdWVzLTFdOworCQlidWNrZXQtPm1heF9pbmNsdXNpdmVbZGltZW5zaW9u XSA9IHRydWU7CisJfQorCisJLyoKKwkgKiBXYWxrIHRocm91Z2ggdGhlIGFy cmF5IGFuZCBjb3VudCBkaXN0aW5jdCB2YWx1ZXMgYnkgY29tcGFyaW5nCisJ ICogc3VjY2VlZGluZyB2YWx1ZXMuCisJICoKKwkgKiBGSVhNRSBUaGlzIG9u bHkgd29ya3MgZm9yIHBhc3MtYnktdmFsdWUgdHlwZXMgKGkuZS4gbm90IFZB UkNIQVJzCisJICogICAgICAgZXRjLikuIEFsdGhvdWdoIHRoYW5rcyB0byB0 aGUgZGVkdXBsaWNhdGlvbiBpdCBtaWdodCB3b3JrCisJICogICAgICAgZXZl biBmb3IgdGhvc2UgdHlwZXMgKGVxdWFsIHZhbHVlcyB3aWxsIGdldCB0aGUg c2FtZSBpdGVtCisJICogICAgICAgaW4gdGhlIGRlZHVwbGljYXRlZCBhcnJh eSkuCisJICovCisJZm9yIChqID0gMTsgaiA8IG52YWx1ZXM7IGorKykgewor CQlpZiAodmFsdWVzW2pdICE9IHZhbHVlc1tqLTFdKQorCQkJZGF0YS0+bmRp c3RpbmN0c1tkaW1lbnNpb25dICs9IDE7CisJfQorCisJcGZyZWUodmFsdWVz KTsKK30KKworLyoKKyAqIEEgcHJvcGVybHkgYnVpbHQgaGlzdG9ncmFtIG11 c3Qgbm90IGNvbnRhaW4gYnVja2V0cyBtaXhpbmcgTlVMTCBhbmQKKyAqIG5v bi1OVUxMIHZhbHVlcyBpbiBhIHNpbmdsZSBkaW1lbnNpb24uIEVhY2ggZGlt ZW5zaW9uIG1heSBlaXRoZXIgYmUKKyAqIG1hcmtlZCBhcyAnbnVsbHMgb25s eScsIGFuZCB0aHVzIGNvbnRhaW5pbmcgb25seSBOVUxMIHZhbHVlcywgb3IK KyAqIGl0IG11c3Qgbm90IGNvbnRhaW4gYW55IE5VTEwgdmFsdWVzLgorICoK KyAqIFRoZXJlZm9yZSwgaWYgdGhlIHNhbXBsZSBjb250YWlucyBOVUxMIHZh bHVlcyBpbiBhbnkgb2YgdGhlIGNvbHVtbnMsCisgKiBpdCdzIG5lY2Vzc2Fy eSB0byBidWlsZCB0aG9zZSBOVUxMLWJ1Y2tldHMuIFRoaXMgaXMgZG9uZSBp biBhbgorICogaXRlcmF0aXZlIHdheSB1c2luZyB0aGlzIGFsZ29yaXRobSwg b3BlcmF0aW5nIG9uIGEgc2luZ2xlIGJ1Y2tldDoKKyAqCisgKiAgICAgKDEp IENoZWNrIHRoYXQgYWxsIGRpbWVuc2lvbnMgYXJlIHdlbGwtZm9ybWVkIChu b3QgbWl4aW5nIE5VTEwKKyAqICAgICAgICAgYW5kIG5vbi1OVUxMIHZhbHVl cykuCisgKgorICogICAgICgyKSBJZiBhbGwgZGltZW5zaW9ucyBhcmUgd2Vs bC1mb3JtZWQsIHRlcm1pbmF0ZS4KKyAqCisgKiAgICAgKDMpIElmIHRoZSBk aW1lbnNpb24gY29udGFpbnMgb25seSBOVUxMIHZhbHVlcywgYnV0IGlzIG5v dAorICogICAgICAgICBtYXJrZWQgYXMgTlVMTC1vbmx5LCBtYXJrIGl0IGFz IE5VTEwtb25seSBhbmQgcnVuIHRoZQorICogICAgICAgICBhbGdvcml0aG0g YWdhaW4gKG9uIHRoaXMgYnVja2V0KS4KKyAqCisgKiAgICAgKDQpIElmIHRo ZSBkaW1lbnNpb24gbWl4ZXMgTlVMTCBhbmQgbm9uLU5VTEwgdmFsdWVzLCBz cGxpdCB0aGUKKyAqICAgICAgICAgYnVja2V0IGludG8gdHdvIHBhcnRzIC0g b25lIHdpdGggTlVMTCB2YWx1ZXMsIG9uZSB3aXRoCisgKiAgICAgICAgIG5v bi1OVUxMIHZhbHVlcyAocmVwbGFjaW5nIHRoZSBjdXJyZW50IG9uZSkuIFRo ZW4gcnVuCisgKiAgICAgICAgIHRoZSBhbGdvcml0aG0gb24gYm90aCBidWNr ZXRzLgorICoKKyAqIFRoaXMgaXMgZXhlY3V0ZWQgaW4gYSByZWN1cnNpdmUg bWFubmVyLCBidXQgdGhlIG51bWJlciBvZiBleGVjdXRpb25zCisgKiBzaG91 bGQgYmUgcXVpdGUgbG93IC0gbGltaXRlZCBieSB0aGUgbnVtYmVyIG9mIE5V TEwtYnVja2V0cy4gQWxzbywKKyAqIGluIGVhY2ggYnJhbmNoIHRoZSBudW1i ZXIgb2YgbmVzdGVkIGNhbGxzIGlzIGxpbWl0ZWQgYnkgdGhlIG51bWJlcgor ICogb2YgZGltZW5zaW9ucyAoYXR0cmlidXRlcykgb2YgdGhlIGhpc3RvZ3Jh bS4KKyAqCisgKiBBdCB0aGUgZW5kLCB0aGVyZSBzaG91bGQgYmUgYnVja2V0 cyB3aXRoIG5vIG1peGVkIGRpbWVuc2lvbnMuIFRoZQorICogbnVtYmVyIG9m IGJ1Y2tldHMgcHJvZHVjZWQgYnkgdGhpcyBhbGdvcml0aG0gaXMgcmF0aGVy IGxpbWl0ZWQgLSB3aXRoCisgKiBOIGRpbWVuc2lvbnMsIHRoZXJlIG1heSBi ZSBvbmx5IDJeTiBzdWNoIGJ1Y2tldHMgKGVhY2ggZGltZW5zaW9uIG1heQor ICogYmUgZWl0aGVyIE5VTEwgb3Igbm9uLU5VTEwpLiBTbyB3aXRoIDggZGlt ZW5zaW9ucyAoY3VycmVudCB2YWx1ZSBvZgorICogTVZTVEFUU19NQVhfRElN RU5TSU9OUykgdGhlcmUgbWF5IGJlIG9ubHkgMjU2IHN1Y2ggYnVja2V0cy4K KyAqCisgKiBBZnRlciB0aGlzLCBhICdyZWd1bGFyJyBidWNrZXQtc3BsaXQg YWxnb3JpdGhtIHNoYWxsIHJ1biwgZnVydGhlcgorICogb3B0aW1pemluZyB0 aGUgaGlzdG9ncmFtLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX251bGxf YnVja2V0cyhNVkhpc3RvZ3JhbSBoaXN0b2dyYW0sIGludCBidWNrZXRfaWR4 LAorCQkJCQlpbnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRzICoqIHN0 YXRzKQoreworCWludAkJCWksIGo7CisJaW50CQkJbnVsbF9kaW0gPSAtMTsK KwlpbnQJCQludWxsX2NvdW50ID0gMDsKKwlib29sCQludWxsX2ZvdW5kID0g ZmFsc2U7CisJTVZCdWNrZXQJYnVja2V0LCBudWxsX2J1Y2tldDsKKwlpbnQJ CQludWxsX2lkeCwgY3Vycl9pZHg7CisJSGlzdG9ncmFtQnVpbGQJZGF0YSwg bnVsbF9kYXRhOworCisJLyogcmVtZW1iZXIgb3JpZ2luYWwgdmFsdWVzIGZy b20gdGhlIGJ1Y2tldCAqLworCWludAkJCW51bXJvd3M7CisJSGVhcFR1cGxl ICAqb2xkcm93cyA9IE5VTEw7CisKKwlBc3NlcnQoYnVja2V0X2lkeCA8IGhp c3RvZ3JhbS0+bmJ1Y2tldHMpOworCUFzc2VydChoaXN0b2dyYW0tPm5kaW1l bnNpb25zID09IGF0dHJzLT5kaW0xKTsKKworCWJ1Y2tldCA9IGhpc3RvZ3Jh bS0+YnVja2V0c1tidWNrZXRfaWR4XTsKKwlkYXRhID0gKEhpc3RvZ3JhbUJ1 aWxkKWJ1Y2tldC0+YnVpbGRfZGF0YTsKKworCW51bXJvd3MgPSBkYXRhLT5u dW1yb3dzOworCW9sZHJvd3MgPSBkYXRhLT5yb3dzOworCisJLyoKKwkgKiBX YWxrIHRocm91Z2ggYWxsIHJvd3MgLyBkaW1lbnNpb25zLCBhbmQgc3RvcCBv bmNlIHdlIGZpbmQgTlVMTAorCSAqIGluIGEgZGltZW5zaW9uIG5vdCB5ZXQg bWFya2VkIGFzIE5VTEwtb25seS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwg ZGF0YS0+bnVtcm93czsgaSsrKQorCXsKKwkJLyoKKwkJICogRklYTUUgV2Ug ZG9uJ3QgbmVlZCB0byBzdGFydCBmcm9tIHRoZSBmaXJzdCBhdHRyaWJ1dGUK KwkJICogICAgICAgaGVyZSAtIHdlIGNhbiBzdGFydCBmcm9tIHRoZSBsYXN0 IGtub3duIGRpbWVuc2lvbi4KKwkJICovCisJCWZvciAoaiA9IDA7IGogPCBo aXN0b2dyYW0tPm5kaW1lbnNpb25zOyBqKyspCisJCXsKKwkJCS8qIElzIHRo aXMgYSBOVUxMLW9ubHkgZGltZW5zaW9uPyBJZiB5ZXMsIHNraXAuICovCisJ CQlpZiAoYnVja2V0LT5udWxsc29ubHlbal0pCisJCQkJY29udGludWU7CisK KwkJCS8qIGZvdW5kIGEgTlVMTCBpbiB0aGF0IGRpbWVuc2lvbj8gKi8KKwkJ CWlmIChoZWFwX2F0dGlzbnVsbChkYXRhLT5yb3dzW2ldLCBhdHRycy0+dmFs dWVzW2pdKSkKKwkJCXsKKwkJCQludWxsX2ZvdW5kID0gdHJ1ZTsKKwkJCQlu dWxsX2RpbSA9IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiB0 ZXJtaW5hdGUgaWYgd2UgZm91bmQgYXR0cmlidXRlIHdpdGggTlVMTCB2YWx1 ZXMgKi8KKwkJaWYgKG51bGxfZm91bmQpCisJCQlicmVhazsKKwl9CisKKwkv KiBubyByZWd1bGFyIGRpbWVuc2lvbiBjb250YWlucyBOVUxMIHZhbHVlcyA9 PiB3ZSdyZSBkb25lICovCisJaWYgKCEgbnVsbF9mb3VuZCkKKwkJcmV0dXJu OworCisJLyogd2FsayB0aHJvdWdoIHRoZSByb3dzIGFnYWluLCBjb3VudCBO VUxMIHZhbHVlcyBpbiAnbnVsbF9kaW0nICovCisJZm9yIChpID0gMDsgaSA8 IGRhdGEtPm51bXJvd3M7IGkrKykKKwl7CisJCWlmIChoZWFwX2F0dGlzbnVs bChkYXRhLT5yb3dzW2ldLCBhdHRycy0+dmFsdWVzW251bGxfZGltXSkpCisJ CQludWxsX2NvdW50ICs9IDE7CisJfQorCisJQXNzZXJ0KG51bGxfY291bnQg PD0gZGF0YS0+bnVtcm93cyk7CisKKwkvKgorCSAqIElmIChudWxsX2NvdW50 ID09IG51bXJvd3MpIHRoZSBkaW1lbnNpb24gYWxyZWFkeSBpcyBOVUxMLW9u bHksCisJICogYnV0IGlzIG5vdCB5ZXQgbWFya2VkIGxpa2UgdGhhdC4gSXQn cyBlbm91Z2ggdG8gbWFyayBpdCBhbmQKKwkgKiByZXBlYXQgdGhlIHByb2Nl c3MgcmVjdXJzaXZlbHkgKHVudGlsIHdlIHJ1biBvdXQgb2YgZGltZW5zaW9u cykuCisJICovCisJaWYgKG51bGxfY291bnQgPT0gZGF0YS0+bnVtcm93cykK Kwl7CisJCWJ1Y2tldC0+bnVsbHNvbmx5W251bGxfZGltXSA9IHRydWU7CisJ CWNyZWF0ZV9udWxsX2J1Y2tldHMoaGlzdG9ncmFtLCBidWNrZXRfaWR4LCBh dHRycywgc3RhdHMpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBo YXZlIHRvIHNwbGl0IHRoZSBidWNrZXQgaW50byB0d28gLSBvbmUgd2l0aCBO VUxMIHZhbHVlcyBpbgorCSAqIHRoZSBkaW1lbnNpb24sIG9uZSB3aXRoIG5v bi1OVUxMIHZhbHVlcy4gV2UgZG9uJ3QgbmVlZCB0byBzb3J0CisJICogdGhl IGRhdGEgb3IgYW55dGhpbmcsIGJ1dCBvdGhlcndpc2UgaXQncyBzaW1pbGFy IHRvIHdoYXQncyBkb25lCisJICogaW4gcGFydGl0aW9uX2J1Y2tldCgpLgor CSAqLworCisJLyogY3JlYXRlIGJ1Y2tldCB3aXRoIE5VTEwtb25seSBkaW1l bnNpb24gJ2RpbScgKi8KKwludWxsX2J1Y2tldCA9IGNvcHlfbXZfYnVja2V0 KGJ1Y2tldCwgaGlzdG9ncmFtLT5uZGltZW5zaW9ucyk7CisJbnVsbF9kYXRh ID0gKEhpc3RvZ3JhbUJ1aWxkKW51bGxfYnVja2V0LT5idWlsZF9kYXRhOwor CisJLyogcmVtZW1iZXIgdGhlIGN1cnJlbnQgYXJyYXkgaW5mbyAqLworCW9s ZHJvd3MgPSBkYXRhLT5yb3dzOworCW51bXJvd3MgPSBkYXRhLT5udW1yb3dz OworCisJLyogd2UnbGwga2VlcCBub24tTlVMTCB2YWx1ZXMgaW4gdGhlIGN1 cnJlbnQgYnVja2V0ICovCisJZGF0YS0+bnVtcm93cyA9IChudW1yb3dzIC0g bnVsbF9jb3VudCk7CisJZGF0YS0+cm93cworCQk9IChIZWFwVHVwbGUqKXBh bGxvYzAoZGF0YS0+bnVtcm93cyAqIHNpemVvZihIZWFwVHVwbGUpKTsKKwor CS8qIGFuZCB0aGUgTlVMTCB2YWx1ZXMgd2lsbCBnbyB0byB0aGUgbmV3IG9u ZSAqLworCW51bGxfZGF0YS0+bnVtcm93cyA9IG51bGxfY291bnQ7CisJbnVs bF9kYXRhLT5yb3dzCisJCT0gKEhlYXBUdXBsZSopcGFsbG9jMChudWxsX2Rh dGEtPm51bXJvd3MgKiBzaXplb2YoSGVhcFR1cGxlKSk7CisKKwkvKiBtYXJr IHRoZSBkaW1lbnNpb24gYXMgTlVMTC1vbmx5IChpbiB0aGUgbmV3IGJ1Y2tl dCkgKi8KKwludWxsX2J1Y2tldC0+bnVsbHNvbmx5W251bGxfZGltXSA9IHRy dWU7CisKKwkvKiB3YWxrIHRocm91Z2ggdGhlIHNhbXBsZSByb3dzIGFuZCBk aXN0cmlidXRlIHRoZW0gYWNjb3JkaW5nbHkgKi8KKwludWxsX2lkeCA9IDA7 CisJY3Vycl9pZHggPSAwOworCWZvciAoaSA9IDA7IGkgPCBudW1yb3dzOyBp KyspCisJeworCQlpZiAoaGVhcF9hdHRpc251bGwob2xkcm93c1tpXSwgYXR0 cnMtPnZhbHVlc1tudWxsX2RpbV0pKQorCQkJLyogTlVMTCA9PiBjb3B5IHRv IHRoZSBuZXcgYnVja2V0ICovCisJCQltZW1jcHkoJm51bGxfZGF0YS0+cm93 c1tudWxsX2lkeCsrXSwgJm9sZHJvd3NbaV0sCisJCQkJCXNpemVvZihIZWFw VHVwbGUpKTsKKwkJZWxzZQorCQkJbWVtY3B5KCZkYXRhLT5yb3dzW2N1cnJf aWR4KytdLCAmb2xkcm93c1tpXSwKKwkJCQkJc2l6ZW9mKEhlYXBUdXBsZSkp OworCX0KKworCS8qIHVwZGF0ZSBuZGlzdGluY3QgdmFsdWVzIGZvciB0aGUg YnVja2V0cyAodG90YWwgYW5kIHBlciBkaW1lbnNpb24pICovCisJdXBkYXRl X2J1Y2tldF9uZGlzdGluY3QoYnVja2V0LCBhdHRycywgc3RhdHMpOworCXVw ZGF0ZV9idWNrZXRfbmRpc3RpbmN0KG51bGxfYnVja2V0LCBhdHRycywgc3Rh dHMpOworCisJLyoKKwkgKiBUT0RPIFdlIGRvbid0IG5lZWQgdG8gZG8gdGhp cyBmb3IgdGhlIGRpbWVuc2lvbiB3ZSB1c2VkIGZvciBzcGxpdCwKKwkgKiAg ICAgIGJlY2F1c2Ugd2Uga25vdyBob3cgbWFueSBkaXN0aW5jdCB2YWx1ZXMg d2VudCB0byBlYWNoCisJICogICAgICBidWNrZXQgKE5VTEwgaXMgbm90IGEg dmFsdWUsIHNvIDAsIGFuZCB0aGUgb3RoZXIgYnVja2V0IGdvdAorCSAqICAg ICAgYWxsIHRoZSBuZGlzdGluY3QgdmFsdWVzKS4KKwkgKi8KKwlmb3IgKGkg PSAwOyBpIDwgaGlzdG9ncmFtLT5uZGltZW5zaW9uczsgaSsrKQorCXsKKwkJ dXBkYXRlX2RpbWVuc2lvbl9uZGlzdGluY3QoYnVja2V0LCBpLCBhdHRycywg c3RhdHMsIGZhbHNlKTsKKwkJdXBkYXRlX2RpbWVuc2lvbl9uZGlzdGluY3Qo bnVsbF9idWNrZXQsIGksIGF0dHJzLCBzdGF0cywgZmFsc2UpOworCX0KKwor CXBmcmVlKG9sZHJvd3MpOworCisJLyogYWRkIHRoZSBOVUxMIGJ1Y2tldCB0 byB0aGUgaGlzdG9ncmFtICovCisJaGlzdG9ncmFtLT5idWNrZXRzW2hpc3Rv Z3JhbS0+bmJ1Y2tldHMrK10gPSBudWxsX2J1Y2tldDsKKworCS8qCisJICog QW5kIG5vdyBydW4gdGhlIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IG9uIGJvdGgg YnVja2V0cyAodGhlIG5ldworCSAqIG9uZSBmaXJzdCwgYmVjYXVzZSB0aGUg Y2FsbCBtYXkgY2hhbmdlIG51bWJlciBvZiBidWNrZXRzLCBhbmQKKwkgKiBp dCdzIHVzZWQgYXMgYW4gaW5kZXgpLgorCSAqLworCWNyZWF0ZV9udWxsX2J1 Y2tldHMoaGlzdG9ncmFtLCAoaGlzdG9ncmFtLT5uYnVja2V0cy0xKSwgYXR0 cnMsIHN0YXRzKTsKKwljcmVhdGVfbnVsbF9idWNrZXRzKGhpc3RvZ3JhbSwg YnVja2V0X2lkeCwgYXR0cnMsIHN0YXRzKTsKKworfQorCisvKgorICogV2Ug bmVlZCB0byBwYXNzIHRoZSBTb3J0U3VwcG9ydCB0byB0aGUgY29tcGFyYXRv ciwgYnV0IGJzZWFyY2goKQorICogaGFzIG5vICdjb250ZXh0JyBwYXJhbWV0 ZXIsIHNvIHdlIHVzZSBhIGdsb2JhbCB2YXJpYWJsZSAodWdseSkuCisgKi8K K3N0YXRpYyBpbnQKK2JzZWFyY2hfY29tcGFyYXRvcihjb25zdCB2b2lkICog YSwgY29uc3Qgdm9pZCAqIGIpCit7CisJQXNzZXJ0KHNzdXBfcHJpdmF0ZSAh PSBOVUxMKTsKKwlyZXR1cm4gY29tcGFyZV9zY2FsYXJzX3NpbXBsZShhLCBi LCAodm9pZCopc3N1cF9wcml2YXRlKTsKK30KKworLyoKKyAqIFNSRiB3aXRo IGRldGFpbHMgYWJvdXQgYnVja2V0cyBvZiBhIGhpc3RvZ3JhbToKKyAqCisg KiAtIGJ1Y2tldCBJRCAoMC4uLm5idWNrZXRzKQorICogLSBtaW4gdmFsdWVz IChzdHJpbmcgYXJyYXkpCisgKiAtIG1heCB2YWx1ZXMgKHN0cmluZyBhcnJh eSkKKyAqIC0gbnVsbHMgb25seSAoYm9vbGVhbiBhcnJheSkKKyAqIC0gbWlu IGluY2x1c2l2ZSBmbGFncyAoYm9vbGVhbiBhcnJheSkKKyAqIC0gbWF4IGlu Y2x1c2l2ZSBmbGFncyAoYm9vbGVhbiBhcnJheSkKKyAqIC0gZnJlcXVlbmN5 IChkb3VibGUgcHJlY2lzaW9uKQorICoKKyAqIFRoZSBpbnB1dCBpcyB0aGUg T0lEIG9mIHRoZSBzdGF0aXN0aWNzLCBhbmQgdGhlcmUgYXJlIG5vIHJvd3MK KyAqIHJldHVybmVkIGlmIHRoZSBzdGF0aXN0aWNzIGNvbnRhaW5zIG5vIGhp c3RvZ3JhbSAob3IgaWYgdGhlcmUncyBubworICogc3RhdGlzdGljcyBmb3Ig dGhlIE9JRCkuCisgKgorICogVGhlIHNlY29uZCBwYXJhbWV0ZXIgKHR5cGUp IGRldGVybWluZXMgd2hhdCB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZAorICog aW4gdGhlIChtaW52YWxzLG1heHZhbHMpLiBUaGVyZSBhcmUgdGhyZWUgcG9z c2libGUgdmFsdWVzOgorICogCisgKiAwIChhY3R1YWwgdmFsdWVzKQorICog LS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgIC0gcHJpbnRzIGFjdHVhbCB2YWx1 ZXMKKyAqICAgIC0gdXNpbmcgdGhlIG91dHB1dCBmdW5jdGlvbiBvZiB0aGUg ZGF0YSB0eXBlIChhcyBzdHJpbmcpCisgKiAgICAtIGhhbmR5IGZvciBpbnZl c3RpZ2F0aW5nIHRoZSBoaXN0b2dyYW0KKyAqCisgKiAxIChkaXN0aW5jdCBp bmRleCkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgLSBwcmludHMg aW5kZXggb2YgdGhlIGRpc3RpbmN0IHZhbHVlIChpbnRvIHRoZSBzZXJpYWxp emVkIGFycmF5KQorICogICAgLSBtYWtlcyBpdCBlYXNpZXIgdG8gc3BvdCBu ZWlnaGJvciBidWNrZXRzLCBldGMuCisgKiAgICAtIGhhbmR5IGZvciBwbG90 dGluZyB0aGUgaGlzdG9ncmFtCisgKgorICogMiAobm9ybWFsaXplZCBkaXN0 aW5jdCBpbmRleCkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiAgICAtIHByaW50cyBpbmRleCBvZiB0aGUgZGlzdGluY3QgdmFsdWUs IGJ1dCBub3JtYWxpemVkIGludG8gWzAsMV0KKyAqICAgIC0gc2ltaWxhciB0 byAxLCBidXQgc2hvd3MgaG93ICdsb25nJyB0aGUgYnVja2V0IHJhbmdlIGlz CisgKiAgICAtIGhhbmR5IGZvciBwbG90dGluZyB0aGUgaGlzdG9ncmFtCisg KgorICogV2hlbiBwbG90dGluZyB0aGUgaGlzdG9ncmFtLCBiZSBjYXJlZnVs IGFzIHRoZSAoMSkgYW5kICgyKSBvcHRpb25zCisgKiBza2V3IHRoZSBsZW5n dGhzIGJ5IGRpc3RyaWJ1dGluZyB0aGUgZGlzdGluY3QgdmFsdWVzIHVuaWZv cm1seS4gRm9yCisgKiBkYXRhIHR5cGVzIHdpdGhvdXQgYSBjbGVhciBtZWFu aW5nIG9mICdkaXN0YW5jZScgKGUuZy4gc3RyaW5ncykgdGhhdAorICogaXMg bm90IGEgYmlnIGRlYWwsIGJ1dCBmb3IgbnVtYmVycyBpdCBtYXkgYmUgY29u ZnVzaW5nLgorICovCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX212X2hpc3Rv Z3JhbV9idWNrZXRzKTsKKworRGF0dW0KK3BnX212X2hpc3RvZ3JhbV9idWNr ZXRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250ZXh0CSAg ICpmdW5jY3R4OworCWludAkJCQkJY2FsbF9jbnRyOworCWludAkJCQkJbWF4 X2NhbGxzOworCVR1cGxlRGVzYwkJCXR1cGRlc2M7CisJQXR0SW5NZXRhZGF0 YQkgICAqYXR0aW5tZXRhOworCisJT2lkCQkJCQltdm9pZCA9IFBHX0dFVEFS R19PSUQoMCk7CisJaW50CQkJCQlvdHlwZSA9IFBHX0dFVEFSR19JTlQzMigx KTsKKworCWlmICgob3R5cGUgPCAwKSB8fCAob3R5cGUgPiAyKSkKKwkJZWxv ZyhFUlJPUiwgImludmFsaWQgb3V0cHV0IHR5cGUgc3BlY2lmaWVkIik7CisK KwkvKiBzdHVmZiBkb25lIG9ubHkgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhl IGZ1bmN0aW9uICovCisJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJ CU1lbW9yeUNvbnRleHQgICBvbGRjb250ZXh0OworCQlNVlNlcmlhbGl6ZWRI aXN0b2dyYW0gaGlzdG9ncmFtOworCisJCS8qIGNyZWF0ZSBhIGZ1bmN0aW9u IGNvbnRleHQgZm9yIGNyb3NzLWNhbGwgcGVyc2lzdGVuY2UgKi8KKwkJZnVu Y2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgpOworCisJCS8qIHN3aXRjaCB0 byBtZW1vcnkgY29udGV4dCBhcHByb3ByaWF0ZSBmb3IgbXVsdGlwbGUgZnVu Y3Rpb24gY2FsbHMgKi8KKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJ CWhpc3RvZ3JhbSA9IGxvYWRfbXZfaGlzdG9ncmFtKG12b2lkKTsKKworCQlm dW5jY3R4LT51c2VyX2ZjdHggPSBoaXN0b2dyYW07CisKKwkJLyogdG90YWwg bnVtYmVyIG9mIHR1cGxlcyB0byBiZSByZXR1cm5lZCAqLworCQlmdW5jY3R4 LT5tYXhfY2FsbHMgPSAwOworCQlpZiAoZnVuY2N0eC0+dXNlcl9mY3R4ICE9 IE5VTEwpCisJCQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBoaXN0b2dyYW0tPm5i dWNrZXRzOworCisJCS8qIEJ1aWxkIGEgdHVwbGUgZGVzY3JpcHRvciBmb3Ig b3VyIHJlc3VsdCB0eXBlICovCisJCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlw ZShmY2luZm8sIE5VTEwsICZ0dXBkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJ VEUpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCSBlcnJtc2coImZ1bmN0 aW9uIHJldHVybmluZyByZWNvcmQgY2FsbGVkIGluIGNvbnRleHQgIgorCQkJ CQkJCSJ0aGF0IGNhbm5vdCBhY2NlcHQgdHlwZSByZWNvcmQiKSkpOworCisJ CS8qCisJCSAqIGdlbmVyYXRlIGF0dHJpYnV0ZSBtZXRhZGF0YSBuZWVkZWQg bGF0ZXIgdG8gcHJvZHVjZSB0dXBsZXMKKwkJICogZnJvbSByYXcgQyBzdHJp bmdzCisJCSAqLworCQlhdHRpbm1ldGEgPSBUdXBsZURlc2NHZXRBdHRJbk1l dGFkYXRhKHR1cGRlc2MpOworCQlmdW5jY3R4LT5hdHRpbm1ldGEgPSBhdHRp bm1ldGE7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCX0KKworCS8qIHN0dWZmIGRvbmUgb24gZXZlcnkgY2FsbCBvZiB0aGUg ZnVuY3Rpb24gKi8KKwlmdW5jY3R4ID0gU1JGX1BFUkNBTExfU0VUVVAoKTsK KworCWNhbGxfY250ciA9IGZ1bmNjdHgtPmNhbGxfY250cjsKKwltYXhfY2Fs bHMgPSBmdW5jY3R4LT5tYXhfY2FsbHM7CisJYXR0aW5tZXRhID0gZnVuY2N0 eC0+YXR0aW5tZXRhOworCisJaWYgKGNhbGxfY250ciA8IG1heF9jYWxscykg ICAgLyogZG8gd2hlbiB0aGVyZSBpcyBtb3JlIGxlZnQgdG8gc2VuZCAqLwor CXsKKwkJY2hhcgkgICoqdmFsdWVzOworCQlIZWFwVHVwbGUJdHVwbGU7CisJ CURhdHVtCQlyZXN1bHQ7CisJCWludDJ2ZWN0b3IgKnN0YWtleXM7CisJCU9p ZAkJCXJlbGlkOworCQlkb3VibGUJCWJ1Y2tldF9zaXplID0gMS4wOworCisJ CWNoYXIgKmJ1ZmYgPSBwYWxsb2MwKDEwMjQpOworCQljaGFyICpmb3JtYXQ7 CisKKwkJaW50CQkJaTsKKworCQlPaWQJCSAgICpvdXRmdW5jczsKKwkJRm1n ckluZm8gICAqZm1ncmluZm87CisKKwkJTVZTZXJpYWxpemVkSGlzdG9ncmFt IGhpc3RvZ3JhbTsKKwkJTVZTZXJpYWxpemVkQnVja2V0IGJ1Y2tldDsKKwor CQloaXN0b2dyYW0gPSAoTVZTZXJpYWxpemVkSGlzdG9ncmFtKWZ1bmNjdHgt PnVzZXJfZmN0eDsKKworCQlBc3NlcnQoY2FsbF9jbnRyIDwgaGlzdG9ncmFt LT5uYnVja2V0cyk7CisKKwkJYnVja2V0ID0gaGlzdG9ncmFtLT5idWNrZXRz W2NhbGxfY250cl07CisKKwkJc3Rha2V5cyA9IGZpbmRfbXZfYXR0bnVtcyht dm9pZCwgJnJlbGlkKTsKKworCQkvKgorCQkgKiBQcmVwYXJlIGEgdmFsdWVz IGFycmF5IGZvciBidWlsZGluZyB0aGUgcmV0dXJuZWQgdHVwbGUuCisJCSAq IFRoaXMgc2hvdWxkIGJlIGFuIGFycmF5IG9mIEMgc3RyaW5ncyB3aGljaCB3 aWxsCisJCSAqIGJlIHByb2Nlc3NlZCBsYXRlciBieSB0aGUgdHlwZSBpbnB1 dCBmdW5jdGlvbnMuCisJCSAqLworCQl2YWx1ZXMgPSAoY2hhciAqKikgcGFs bG9jKDkgKiBzaXplb2YoY2hhciAqKSk7CisKKwkJdmFsdWVzWzBdID0gKGNo YXIgKikgcGFsbG9jKDY0ICogc2l6ZW9mKGNoYXIpKTsKKworCQkvKiBhcnJh eXMgKi8KKwkJdmFsdWVzWzFdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICog c2l6ZW9mKGNoYXIpKTsKKwkJdmFsdWVzWzJdID0gKGNoYXIgKikgcGFsbG9j MCgxMDI0ICogc2l6ZW9mKGNoYXIpKTsKKwkJdmFsdWVzWzNdID0gKGNoYXIg KikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNoYXIpKTsKKwkJdmFsdWVzWzRd ID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNoYXIpKTsKKwkJ dmFsdWVzWzVdID0gKGNoYXIgKikgcGFsbG9jMCgxMDI0ICogc2l6ZW9mKGNo YXIpKTsKKworCQl2YWx1ZXNbNl0gPSAoY2hhciAqKSBwYWxsb2MoNjQgKiBz aXplb2YoY2hhcikpOworCQl2YWx1ZXNbN10gPSAoY2hhciAqKSBwYWxsb2Mo NjQgKiBzaXplb2YoY2hhcikpOworCQl2YWx1ZXNbOF0gPSAoY2hhciAqKSBw YWxsb2MoNjQgKiBzaXplb2YoY2hhcikpOworCisJCS8qIHdlIG5lZWQgdG8g ZG8gdGhpcyBvbmx5IHdoZW4gcHJpbnRpbmcgdGhlIGFjdHVhbCB2YWx1ZXMg Ki8KKwkJb3V0ZnVuY3MgPSAoT2lkKilwYWxsb2MwKHNpemVvZihPaWQpICog aGlzdG9ncmFtLT5uZGltZW5zaW9ucyk7CisJCWZtZ3JpbmZvID0gKEZtZ3JJ bmZvKilwYWxsb2MwKHNpemVvZihGbWdySW5mbykgKiBoaXN0b2dyYW0tPm5k aW1lbnNpb25zKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgaGlzdG9ncmFtLT5u ZGltZW5zaW9uczsgaSsrKQorCQl7CisJCQlib29sIGlzdmFybGVuYTsKKwor CQkJZ2V0VHlwZU91dHB1dEluZm8oZ2V0X2F0dHR5cGUocmVsaWQsIHN0YWtl eXMtPnZhbHVlc1tpXSksCisJCQkJCQkJICAmb3V0ZnVuY3NbaV0sICZpc3Zh cmxlbmEpOworCisJCQlmbWdyX2luZm8ob3V0ZnVuY3NbaV0sICZmbWdyaW5m b1tpXSk7CisJCX0KKworCQlzbnByaW50Zih2YWx1ZXNbMF0sIDY0LCAiJWQi LCBjYWxsX2NudHIpOwkvKiBidWNrZXQgSUQgKi8KKworCQkvKgorCQkgKiBj dXJyZW50bHkgd2Ugb25seSBwcmludCBhcnJheSBvZiBpbmRleGVzLCBidXQg dGhlIGRlZHVwbGljYXRlZAorCQkgKiB2YWx1ZXMgc2hvdWxkIGJlIHNvcnRl ZCwgc28gdGhpcyBpcyBhY3R1YWxseSBxdWl0ZSB1c2VmdWwKKwkJICoKKwkJ ICogVE9ETyBwcmludCB0aGUgYWN0dWFsIG1pbi9tYXggdmFsdWVzLCB1c2lu ZyB0aGUgb3V0cHV0CisJCSAqICAgICAgZnVuY3Rpb24gb2YgdGhlIGF0dHJp YnV0ZSB0eXBlCisJCSAqLworCisJCWZvciAoaSA9IDA7IGkgPCBoaXN0b2dy YW0tPm5kaW1lbnNpb25zOyBpKyspCisJCXsKKwkJCWJ1Y2tldF9zaXplICo9 IChidWNrZXQtPm1heFtpXSAtIGJ1Y2tldC0+bWluW2ldKSAqIDEuMAorCQkJ CQkJCQkJCQkvIChoaXN0b2dyYW0tPm52YWx1ZXNbaV0tMSk7CisKKwkJCS8q IHByaW50IHRoZSBhY3R1YWwgdmFsdWVzLCBpLmUuIHVzZSBvdXRwdXQgZnVu Y3Rpb24gZXRjLiAqLworCQkJaWYgKG90eXBlID09IDApCisJCQl7CisJCQkJ RGF0dW0gbWludmFsLCBtYXh2YWw7CisJCQkJRGF0dW0gbWlub3V0LCBtYXhv dXQ7CisKKwkJCQlmb3JtYXQgPSAiJXMsICVzIjsKKwkJCQlpZiAoaSA9PSAw KQorCQkJCQlmb3JtYXQgPSAieyVzJXMiOworCQkJCWVsc2UgaWYgKGkgPT0g aGlzdG9ncmFtLT5uZGltZW5zaW9ucy0xKQorCQkJCQlmb3JtYXQgPSAiJXMs ICVzfSI7CisKKwkJCQltaW52YWwgPSBoaXN0b2dyYW0tPnZhbHVlc1tpXVti dWNrZXQtPm1pbltpXV07CisJCQkJbWlub3V0ID0gRnVuY3Rpb25DYWxsMSgm Zm1ncmluZm9baV0sIG1pbnZhbCk7CisKKwkJCQltYXh2YWwgPSBoaXN0b2dy YW0tPnZhbHVlc1tpXVtidWNrZXQtPm1heFtpXV07CisJCQkJbWF4b3V0ID0g RnVuY3Rpb25DYWxsMSgmZm1ncmluZm9baV0sIG1heHZhbCk7CisKKwkJCQkv LyBzbnByaW50ZihidWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVlc1sxXSwgYnVj a2V0LT5taW5baV0pOworCQkJCXNucHJpbnRmKGJ1ZmYsIDEwMjQsIGZvcm1h dCwgdmFsdWVzWzFdLCBEYXR1bUdldFBvaW50ZXIobWlub3V0KSk7CisJCQkJ c3RybmNweSh2YWx1ZXNbMV0sIGJ1ZmYsIDEwMjMpOworCQkJCWJ1ZmZbMF0g PSAnXDAnOworCisJCQkJLy8gc25wcmludGYoYnVmZiwgMTAyNCwgZm9ybWF0 LCB2YWx1ZXNbMl0sIGJ1Y2tldC0+bWF4W2ldKTsKKwkJCQlzbnByaW50Zihi dWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVlc1syXSwgRGF0dW1HZXRQb2ludGVy KG1heG91dCkpOworCQkJCXN0cm5jcHkodmFsdWVzWzJdLCBidWZmLCAxMDIz KTsKKwkJCQlidWZmWzBdID0gJ1wwJzsKKwkJCX0KKwkJCWVsc2UgaWYgKG90 eXBlID09IDEpCisJCQl7CisJCQkJZm9ybWF0ID0gIiVzLCAlZCI7CisJCQkJ aWYgKGkgPT0gMCkKKwkJCQkJZm9ybWF0ID0gInslcyVkIjsKKwkJCQllbHNl IGlmIChpID09IGhpc3RvZ3JhbS0+bmRpbWVuc2lvbnMtMSkKKwkJCQkJZm9y bWF0ID0gIiVzLCAlZH0iOworCisJCQkJc25wcmludGYoYnVmZiwgMTAyNCwg Zm9ybWF0LCB2YWx1ZXNbMV0sIGJ1Y2tldC0+bWluW2ldKTsKKwkJCQlzdHJu Y3B5KHZhbHVlc1sxXSwgYnVmZiwgMTAyMyk7CisJCQkJYnVmZlswXSA9ICdc MCc7CisKKwkJCQlzbnByaW50ZihidWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVl c1syXSwgYnVja2V0LT5tYXhbaV0pOworCQkJCXN0cm5jcHkodmFsdWVzWzJd LCBidWZmLCAxMDIzKTsKKwkJCQlidWZmWzBdID0gJ1wwJzsKKwkJCX0KKwkJ CWVsc2UKKwkJCXsKKwkJCQlmb3JtYXQgPSAiJXMsICVmIjsKKwkJCQlpZiAo aSA9PSAwKQorCQkJCQlmb3JtYXQgPSAieyVzJWYiOworCQkJCWVsc2UgaWYg KGkgPT0gaGlzdG9ncmFtLT5uZGltZW5zaW9ucy0xKQorCQkJCQlmb3JtYXQg PSAiJXMsICVmfSI7CisKKwkJCQlzbnByaW50ZihidWZmLCAxMDI0LCBmb3Jt YXQsIHZhbHVlc1sxXSwKKwkJCQkJCSBidWNrZXQtPm1pbltpXSAqIDEuMCAv IChoaXN0b2dyYW0tPm52YWx1ZXNbaV0tMSkpOworCQkJCXN0cm5jcHkodmFs dWVzWzFdLCBidWZmLCAxMDIzKTsKKwkJCQlidWZmWzBdID0gJ1wwJzsKKwor CQkJCXNucHJpbnRmKGJ1ZmYsIDEwMjQsIGZvcm1hdCwgdmFsdWVzWzJdLAor CQkJCQkJYnVja2V0LT5tYXhbaV0gKiAxLjAgLyAoaGlzdG9ncmFtLT5udmFs dWVzW2ldLTEpKTsKKwkJCQlzdHJuY3B5KHZhbHVlc1syXSwgYnVmZiwgMTAy Myk7CisJCQkJYnVmZlswXSA9ICdcMCc7CisJCQl9CisKKwkJCWZvcm1hdCA9 ICIlcywgJXMiOworCQkJaWYgKGkgPT0gMCkKKwkJCQlmb3JtYXQgPSAieyVz JXMiOworCQkJZWxzZSBpZiAoaSA9PSBoaXN0b2dyYW0tPm5kaW1lbnNpb25z LTEpCisJCQkJZm9ybWF0ID0gIiVzLCAlc30iOworCisJCQlzbnByaW50Zihi dWZmLCAxMDI0LCBmb3JtYXQsIHZhbHVlc1szXSwgYnVja2V0LT5udWxsc29u bHlbaV0gPyAidCIgOiAiZiIpOworCQkJc3RybmNweSh2YWx1ZXNbM10sIGJ1 ZmYsIDEwMjMpOworCQkJYnVmZlswXSA9ICdcMCc7CisKKwkJCXNucHJpbnRm KGJ1ZmYsIDEwMjQsIGZvcm1hdCwgdmFsdWVzWzRdLCBidWNrZXQtPm1pbl9p bmNsdXNpdmVbaV0gPyAidCIgOiAiZiIpOworCQkJc3RybmNweSh2YWx1ZXNb NF0sIGJ1ZmYsIDEwMjMpOworCQkJYnVmZlswXSA9ICdcMCc7CisKKwkJCXNu cHJpbnRmKGJ1ZmYsIDEwMjQsIGZvcm1hdCwgdmFsdWVzWzVdLCBidWNrZXQt Pm1heF9pbmNsdXNpdmVbaV0gPyAidCIgOiAiZiIpOworCQkJc3RybmNweSh2 YWx1ZXNbNV0sIGJ1ZmYsIDEwMjMpOworCQkJYnVmZlswXSA9ICdcMCc7CisJ CX0KKworCQlzbnByaW50Zih2YWx1ZXNbNl0sIDY0LCAiJWYiLCBidWNrZXQt Pm50dXBsZXMpOwkvKiBmcmVxdWVuY3kgKi8KKwkJc25wcmludGYodmFsdWVz WzddLCA2NCwgIiVmIiwgYnVja2V0LT5udHVwbGVzIC8gYnVja2V0X3NpemUp OwkvKiBkZW5zaXR5ICovCisJCXNucHJpbnRmKHZhbHVlc1s4XSwgNjQsICIl ZiIsIGJ1Y2tldF9zaXplKTsJLyogYnVja2V0X3NpemUgKi8KKworCQkvKiBi dWlsZCBhIHR1cGxlICovCisJCXR1cGxlID0gQnVpbGRUdXBsZUZyb21DU3Ry aW5ncyhhdHRpbm1ldGEsIHZhbHVlcyk7CisKKwkJLyogbWFrZSB0aGUgdHVw bGUgaW50byBhIGRhdHVtICovCisJCXJlc3VsdCA9IEhlYXBUdXBsZUdldERh dHVtKHR1cGxlKTsKKworCQkvKiBjbGVhbiB1cCAodGhpcyBpcyBub3QgcmVh bGx5IG5lY2Vzc2FyeSkgKi8KKwkJcGZyZWUodmFsdWVzWzBdKTsKKwkJcGZy ZWUodmFsdWVzWzFdKTsKKwkJcGZyZWUodmFsdWVzWzJdKTsKKwkJcGZyZWUo dmFsdWVzWzNdKTsKKwkJcGZyZWUodmFsdWVzWzRdKTsKKwkJcGZyZWUodmFs dWVzWzVdKTsKKwkJcGZyZWUodmFsdWVzWzZdKTsKKworCQlwZnJlZSh2YWx1 ZXMpOworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCByZXN1bHQpOwor CX0KKwllbHNlICAgIC8qIGRvIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBsZWZ0 ICovCisJeworCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CisJfQorfQor CisjaWZkZWYgREVCVUdfTVZISVNUCisvKgorICogcHJpbnRzIGRlYnVnZ2lu ZyBpbmZvIGFib3V0IG1hdGNoZWQgaGlzdG9ncmFtIGJ1Y2tldHMgKGZ1bGwv cGFydGlhbCkKKyAqCisgKiBYWFggQ3VycmVudGx5IHdvcmtzIG9ubHkgZm9y IElOVCBkYXRhIHR5cGUuCisgKi8KK3ZvaWQKK2RlYnVnX2hpc3RvZ3JhbV9t YXRjaGVzKE1WU2VyaWFsaXplZEhpc3RvZ3JhbSBtdmhpc3QsIGNoYXIgKm1h dGNoZXMpCit7CisJaW50IGksIGo7CisKKwlmbG9hdCBmZnVsbCA9IDAsIGZw YXJ0aWFsID0gMDsKKwlpbnQgbmZ1bGwgPSAwLCBucGFydGlhbCA9IDA7CisK Kwlmb3IgKGkgPSAwOyBpIDwgbXZoaXN0LT5uYnVja2V0czsgaSsrKQorCXsK KwkJTVZTZXJpYWxpemVkQnVja2V0IGJ1Y2tldCA9IG12aGlzdC0+YnVja2V0 c1tpXTsKKworCQljaGFyIHJhbmdlc1sxMDI0XTsKKworCQlpZiAoISBtYXRj aGVzW2ldKQorCQkJY29udGludWU7CisKKwkJLyogaW5jcmVtZW50IHRoZSBj b3VudGVycyAqLworCQluZnVsbCArPSAobWF0Y2hlc1tpXSA9PSBNVlNUQVRT X01BVENIX0ZVTEwpID8gMSA6IDA7CisJCW5wYXJ0aWFsICs9IChtYXRjaGVz W2ldID09IE1WU1RBVFNfTUFUQ0hfUEFSVElBTCkgPyAxIDogMDsKKworCQkv KiBhbmQgYWxzbyB1cGRhdGUgdGhlIGZyZXF1ZW5jaWVzICovCisJCWZmdWxs ICs9IChtYXRjaGVzW2ldID09IE1WU1RBVFNfTUFUQ0hfRlVMTCkgPyBidWNr ZXQtPm50dXBsZXMgOiAwOworCQlmcGFydGlhbCArPSAobWF0Y2hlc1tpXSA9 PSBNVlNUQVRTX01BVENIX1BBUlRJQUwpID8gYnVja2V0LT5udHVwbGVzIDog MDsKKworCQltZW1zZXQocmFuZ2VzLCAwLCBzaXplb2YocmFuZ2VzKSk7CisK KwkJLyogYnVpbGQgcmFuZ2VzIGZvciBhbGwgdGhlIGRpbWVudGlvbnMgKi8K KwkJZm9yIChqID0gMDsgaiA8IG12aGlzdC0+bmRpbWVuc2lvbnM7IGorKykK KwkJeworCQkJc3ByaW50ZihyYW5nZXMsICIlcyBbJWQgJWRdIiwgcmFuZ2Vz LAorCQkJCQkJCQkJCSAgRGF0dW1HZXRJbnQzMihtdmhpc3QtPnZhbHVlc1tq XVtidWNrZXQtPm1pbltqXV0pLAorCQkJCQkJCQkJCSAgRGF0dW1HZXRJbnQz Mihtdmhpc3QtPnZhbHVlc1tqXVtidWNrZXQtPm1heFtqXV0pKTsKKwkJfQor CisJCWVsb2coV0FSTklORywgImJ1Y2tldCAlZCAlcyA9PiAlZCBbJWZdIiwg aSwgcmFuZ2VzLCBtYXRjaGVzW2ldLCBidWNrZXQtPm50dXBsZXMpOworCX0K KworCWVsb2coV0FSTklORywgImZ1bGw9JWYgcGFydGlhbD0lZiAoJWYpIiwg ZmZ1bGwsIGZwYXJ0aWFsLCAoZmZ1bGwgKyAwLjUgKiBmcGFydGlhbCkpOwor fQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUu YyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDYzMzk2MzEuLjM1 NDMyMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisr KyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC0yMTA5LDkgKzIxMDks OSBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hl bWFuYW1lLAogCQl7CiAJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJ CQkJICAgIlNFTEVDVCBvaWQsIHN0YW5hbWVzcGFjZTo6cmVnbmFtZXNwYWNl IEFTIG5zcCwgc3RhbmFtZSwgc3Rha2V5cyxcbiIKLQkJCQkJCSAgICIgIGRl cHNfZW5hYmxlZCwgbWN2X2VuYWJsZWQsXG4iCi0JCQkJCQkgICAiICBkZXBz X2J1aWx0LCBtY3ZfYnVpbHQsXG4iCi0JCQkJCQkgICAiICBtY3ZfbWF4X2l0 ZW1zLFxuIgorCQkJCQkJICAgIiAgZGVwc19lbmFibGVkLCBtY3ZfZW5hYmxl ZCwgaGlzdF9lbmFibGVkLFxuIgorCQkJCQkJICAgIiAgZGVwc19idWlsdCwg bWN2X2J1aWx0LCBoaXN0X2J1aWx0LFxuIgorCQkJCQkJICAgIiAgbWN2X21h eF9pdGVtcywgaGlzdF9tYXhfYnVja2V0cyxcbiIKIAkJCQkJCSAgICIgIChT RUxFQ1Qgc3RyaW5nX2FnZyhhdHRuYW1lOjp0ZXh0LCcsICcpXG4iCiAJCQkJ CQkgICAiICAgIEZST00gKChTRUxFQ1QgdW5uZXN0KHN0YWtleXMpIEFTIGF0 dG51bSkgc1xuIgogCQkJCQkJICAgIiAgICAgICAgIEpPSU4gcGdfYXR0cmli dXRlIGEgT04gKHN0YXJlbGlkID0gYS5hdHRyZWxpZCBhbmQgYS5hdHRudW0g PSBzLmF0dG51bSkpKSBBUyBhdHRudW1zXG4iCkBAIC0yMTU0LDggKzIxNTQs MTcgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2No ZW1hbmFtZSwKIAkJCQkJCWZpcnN0ID0gZmFsc2U7CiAJCQkJCX0KIAorCQkJ CQlpZiAoIXN0cmNtcChQUWdldHZhbHVlKHJlc3VsdCwgaSwgNiksICJ0Iikp CisJCQkJCXsKKwkJCQkJCWlmICghIGZpcnN0KQorCQkJCQkJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsICIsIGhpc3RvZ3JhbSIpOworCQkJCQkJZWxzZQor CQkJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIoaGlzdG9ncmFtIik7 CisJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQl9CisKIAkJCQkJYXBwZW5k UFFFeHBCdWZmZXIoJmJ1ZiwgIikgT04gKCVzKSIsCi0JCQkJCQkJUFFnZXR2 YWx1ZShyZXN1bHQsIGksIDkpKTsKKwkJCQkJCQlQUWdldHZhbHVlKHJlc3Vs dCwgaSwgMTIpKTsKIAogCQkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250 LCBidWYuZGF0YSk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfbXZfc3RhdGlzdGljLmgKaW5kZXggZmQ3MTA3ZC4uYTU5NDVhZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0 aWMuaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3Rp Yy5oCkBAIC0zOCwxMyArMzgsMTYgQEAgQ0FUQUxPRyhwZ19tdl9zdGF0aXN0 aWMsMzM4MSkKIAkvKiBzdGF0aXN0aWNzIHJlcXVlc3RlZCB0byBidWlsZCAq LwogCWJvb2wJCWRlcHNfZW5hYmxlZDsJCS8qIGFuYWx5emUgZGVwZW5kZW5j aWVzPyAqLwogCWJvb2wJCW1jdl9lbmFibGVkOwkJLyogYnVpbGQgTUNWIGxp c3Q/ICovCisJYm9vbAkJaGlzdF9lbmFibGVkOwkJLyogYnVpbGQgaGlzdG9n cmFtPyAqLwogCi0JLyogTUNWIHNpemUgKi8KKwkvKiBoaXN0b2dyYW0gLyBN Q1Ygc2l6ZSAqLwogCWludDMyCQltY3ZfbWF4X2l0ZW1zOwkJLyogbWF4IE1D ViBpdGVtcyAqLworCWludDMyCQloaXN0X21heF9idWNrZXRzOwkvKiBtYXgg aGlzdG9ncmFtIGJ1Y2tldHMgKi8KIAogCS8qIHN0YXRpc3RpY3MgdGhhdCBh cmUgYXZhaWxhYmxlIChpZiByZXF1ZXN0ZWQpICovCiAJYm9vbAkJZGVwc19i dWlsdDsJCQkvKiBkZXBlbmRlbmNpZXMgd2VyZSBidWlsdCAqLwogCWJvb2wJ CW1jdl9idWlsdDsJCQkvKiBNQ1YgbGlzdCB3YXMgYnVpbHQgKi8KKwlib29s CQloaXN0X2J1aWx0OwkJCS8qIGhpc3RvZ3JhbSB3YXMgYnVpbHQgKi8KIAog CS8qIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSwgYnV0IHdl IGFsbG93IGRpcmVjdCBhY2Nlc3MgdG8gc3Rha2V5cyAqLwogCWludDJ2ZWN0 b3IJc3Rha2V5czsJCQkvKiBhcnJheSBvZiBjb2x1bW4ga2V5cyAqLwpAQCAt NTIsNiArNTUsNyBAQCBDQVRBTE9HKHBnX212X3N0YXRpc3RpYywzMzgxKQog I2lmZGVmIENBVEFMT0dfVkFSTEVOCiAJYnl0ZWEJCXN0YWRlcHM7CQkJLyog ZGVwZW5kZW5jaWVzIChzZXJpYWxpemVkKSAqLwogCWJ5dGVhCQlzdGFtY3Y7 CQkJCS8qIE1DViBsaXN0IChzZXJpYWxpemVkKSAqLworCWJ5dGVhCQlzdGFo aXN0OwkJCS8qIE1WIGhpc3RvZ3JhbSAoc2VyaWFsaXplZCkgKi8KICNlbmRp ZgogCiB9IEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYzsKQEAgLTY3LDE3ICs3 MSwyMSBAQCB0eXBlZGVmIEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYyAqRm9y bV9wZ19tdl9zdGF0aXN0aWM7CiAgKgkJY29tcGlsZXIgY29uc3RhbnRzIGZv ciBwZ19tdl9zdGF0aXN0aWMKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwot I2RlZmluZSBOYXR0c19wZ19tdl9zdGF0aXN0aWMJCQkJCTExCisjZGVmaW5l IE5hdHRzX3BnX212X3N0YXRpc3RpYwkJCQkJMTUKICNkZWZpbmUgQW51bV9w Z19tdl9zdGF0aXN0aWNfc3RhcmVsaWQJCQkxCiAjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX3N0YW5hbWUJCQkyCiAjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX3N0YW5hbWVzcGFjZQkJMwogI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19kZXBzX2VuYWJsZWQJCTQKICNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfbWN2X2VuYWJsZWQJCTUKLSNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfbWN2X21heF9pdGVtcwkJNgotI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19kZXBzX2J1aWx0CQkJNwotI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19tY3ZfYnVpbHQJCQk4Ci0jZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX3N0YWtleXMJCQk5Ci0jZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX3N0YWRlcHMJCQkxMAotI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFtY3YJCQkJMTEKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0 aXN0aWNfaGlzdF9lbmFibGVkCQk2CisjZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX21jdl9tYXhfaXRlbXMJCTcKKyNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfaGlzdF9tYXhfYnVja2V0cwk4CisjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX2RlcHNfYnVpbHQJCQk5CisjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX21jdl9idWlsdAkJCTEwCisjZGVmaW5lIEFudW1fcGdf bXZfc3RhdGlzdGljX2hpc3RfYnVpbHQJCQkxMQorI2RlZmluZSBBbnVtX3Bn X212X3N0YXRpc3RpY19zdGFrZXlzCQkJMTIKKyNkZWZpbmUgQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhZGVwcwkJCTEzCisjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX3N0YW1jdgkJCQkxNAorI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFoaXN0CQkJMTUKIAogI2VuZGlmICAgLyogUEdfTVZfU1RB VElTVElDX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmgKaW5k ZXggNjZiNGJjZC4uN2U5MTViZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmgKQEAgLTI2NzQsNiArMjY3NCwxMCBAQCBEQVRBKGluc2VydCBP SUQgPSAzMzc2ICggIHBnX212X3N0YXRzX21jdmxpc3RfaW5mbwlQR05TUCBQ R1VJRCAxMiAxIDAgMCAwIGYgZiBmCiBERVNDUigibXVsdGktdmFyaWF0ZSBz dGF0aXN0aWNzOiBNQ1YgbGlzdCBpbmZvIik7CiBEQVRBKGluc2VydCBPSUQg PSAzMzczICggIHBnX212X21jdl9pdGVtcyBQR05TUCBQR1VJRCAxMiAxIDEw MDAgMCAwIGYgZiBmIGYgdCB0IGkgcyAxIDAgMjI0OSAiMjYiICJ7MjYsMjMs MTAwOSwxMDAwLDcwMX0iICJ7aSxvLG8sbyxvfSIgIntvaWQsaW5kZXgsdmFs dWVzLG51bGxzLGZyZXF1ZW5jeX0iIF9udWxsXyBfbnVsbF8gcGdfbXZfbWN2 X2l0ZW1zIF9udWxsXyBfbnVsbF8gX251bGxfICkpOwogREVTQ1IoImRldGFp bHMgYWJvdXQgTUNWIGxpc3QgaXRlbXMiKTsKK0RBVEEoaW5zZXJ0IE9JRCA9 IDMzNzUgKCAgcGdfbXZfc3RhdHNfaGlzdG9ncmFtX2luZm8JUEdOU1AgUEdV SUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBpIHMgMSAwIDI1ICIxNyIgX251 bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19tdl9zdGF0c19o aXN0b2dyYW1faW5mbyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKK0RFU0NS KCJtdWx0aS12YXJpYXRlIHN0YXRpc3RpY3M6IGhpc3RvZ3JhbSBpbmZvIik7 CitEQVRBKGluc2VydCBPSUQgPSAzMzc0ICggIHBnX212X2hpc3RvZ3JhbV9i dWNrZXRzIFBHTlNQIFBHVUlEIDEyIDEgMTAwMCAwIDAgZiBmIGYgZiB0IHQg aSBzIDIgMCAyMjQ5ICIyNiAyMyIgInsyNiwyMywyMywxMDA5LDEwMDksMTAw MCwxMDAwLDEwMDAsNzAxLDcwMSw3MDF9IiAie2ksaSxvLG8sbyxvLG8sbyxv LG8sb30iICJ7b2lkLG90eXBlLGluZGV4LG1pbnZhbHMsbWF4dmFscyxudWxs c29ubHksbWluaW5jbHVzaXZlLG1heGluY2x1c2l2ZSxmcmVxdWVuY3ksZGVu c2l0eSxidWNrZXRfc2l6ZX0iIF9udWxsXyBfbnVsbF8gcGdfbXZfaGlzdG9n cmFtX2J1Y2tldHMgX251bGxfIF9udWxsXyBfbnVsbF8gKSk7CitERVNDUigi ZGV0YWlscyBhYm91dCBoaXN0b2dyYW0gYnVja2V0cyIpOwogCiBEQVRBKGlu c2VydCBPSUQgPSAxOTI4ICggIHBnX3N0YXRfZ2V0X251bXNjYW5zCQkJUEdO U1AgUEdVSUQgMTIgMSAwIDAgMCBmIGYgZiBmIHQgZiBzIHIgMSAwIDIwICIy NiIgX251bGxfIF9udWxsXyBfbnVsbF8gX251bGxfIF9udWxsXyBwZ19zdGF0 X2dldF9udW1zY2FucyBfbnVsbF8gX251bGxfIF9udWxsXyApKTsKIERFU0NS KCJzdGF0aXN0aWNzOiBudW1iZXIgb2Ygc2NhbnMgZG9uZSBmb3IgdGFibGUv aW5kZXgiKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0 aW9uLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oCmluZGV4IDVh ZTZiM2MuLjQ2YmVjZTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3JlbGF0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24u aApAQCAtNjIwLDEwICs2MjAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgTVZTdGF0 aXN0aWNJbmZvCiAJLyogZW5hYmxlZCBzdGF0aXN0aWNzICovCiAJYm9vbAkJ ZGVwc19lbmFibGVkOwkvKiBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBlbmFi bGVkICovCiAJYm9vbAkJbWN2X2VuYWJsZWQ7CS8qIE1DViBsaXN0IGVuYWJs ZWQgKi8KKwlib29sCQloaXN0X2VuYWJsZWQ7CS8qIGhpc3RvZ3JhbSBlbmFi bGVkICovCiAKIAkvKiBidWlsdC9hdmFpbGFibGUgc3RhdGlzdGljcyAqLwog CWJvb2wJCWRlcHNfYnVpbHQ7CQkvKiBmdW5jdGlvbmFsIGRlcGVuZGVuY2ll cyBidWlsdCAqLwogCWJvb2wJCW1jdl9idWlsdDsJCS8qIE1DViBsaXN0IGJ1 aWx0ICovCisJYm9vbAkJaGlzdF9idWlsdDsJCS8qIGhpc3RvZ3JhbSBidWls dCAqLwogCiAJLyogY29sdW1ucyBpbiB0aGUgc3RhdGlzdGljcyAoYXR0bnVt cykgKi8KIAlpbnQydmVjdG9yICpzdGFrZXlzOwkJLyogYXR0bnVtcyBvZiB0 aGUgY29sdW1ucyBjb3ZlcmVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9tdnN0YXRzLmggYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRz LmgKaW5kZXggNDUzNWRiNy4uZjA1YTUxNyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvbXZzdGF0cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L212c3RhdHMuaApAQCAtOTIsNiArOTIsMTIzIEBAIHR5cGVkZWYgTUNWTGlz dERhdGEgKk1DVkxpc3Q7CiAjZGVmaW5lIE1WU1RBVF9NQ1ZMSVNUX01BWF9J VEVNUwk4MTkyCS8qIG1heCBpdGVtcyBpbiBNQ1YgbGlzdCAqLwogCiAvKgor ICogTXVsdGl2YXJpYXRlIGhpc3RvZ3JhbXMKKyAqLwordHlwZWRlZiBzdHJ1 Y3QgTVZCdWNrZXREYXRhIHsKKworCS8qIEZyZXF1ZW5jaWVzIG9mIHRoaXMg YnVja2V0LiAqLworCWZsb2F0CW50dXBsZXM7CS8qIGZyZXF1ZW5jeSBvZiB0 dXBsZXMgdHVwbGVzICovCisKKwkvKgorCSAqIEluZm9ybWF0aW9uIGFib3V0 IGRpbWVuc2lvbnMgYmVpbmcgTlVMTC1vbmx5LiBOb3QgeWV0IHVzZWQuCisJ ICovCisJYm9vbCAgICpudWxsc29ubHk7CisKKwkvKiBsb3dlciBib3VuZGFy aWVzIC0gdmFsdWVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5lcXVh bGl0aWVzICovCisJRGF0dW0gICptaW47CisJYm9vbCAgICptaW5faW5jbHVz aXZlOworCisJLyogdXBwZXIgYm91bmRhcmllcyAtIHZhbHVlcyBhbmQgaW5m b3JtYXRpb24gYWJvdXQgdGhlIGluZXF1YWxpdGllcyAqLworCURhdHVtICAq bWF4OworCWJvb2wgICAqbWF4X2luY2x1c2l2ZTsKKworCS8qIHVzZWQgd2hl biBidWlsZGluZyB0aGUgaGlzdG9ncmFtIChub3Qgc2VyaWFsaXplZC9kZXNl cmlhbGl6ZWQpICovCisJdm9pZCAgICpidWlsZF9kYXRhOworCit9IE1WQnVj a2V0RGF0YTsKKwordHlwZWRlZiBNVkJ1Y2tldERhdGEJKk1WQnVja2V0Owor CisKK3R5cGVkZWYgc3RydWN0IE1WSGlzdG9ncmFtRGF0YSB7CisKKwl1aW50 MzIJCW1hZ2ljOwkJCS8qIG1hZ2ljIGNvbnN0YW50IG1hcmtlciAqLworCXVp bnQzMgkJdHlwZTsJCQkvKiB0eXBlIG9mIGhpc3RvZ3JhbSAoQkFTSUMpICov CisJdWludDMyIAkJbmJ1Y2tldHM7CQkvKiBudW1iZXIgb2YgYnVja2V0cyAo YnVja2V0cyBhcnJheSkgKi8KKwl1aW50MzIJCW5kaW1lbnNpb25zOwkvKiBu dW1iZXIgb2YgZGltZW5zaW9ucyAqLworCisJTVZCdWNrZXQgICAqYnVja2V0 czsJCS8qIGFycmF5IG9mIGJ1Y2tldHMgKi8KKworfSBNVkhpc3RvZ3JhbURh dGE7CisKK3R5cGVkZWYgTVZIaXN0b2dyYW1EYXRhICpNVkhpc3RvZ3JhbTsK KworLyoKKyAqIEhpc3RvZ3JhbSBpbiBhIHBhcnRpYWxseSBzZXJpYWxpemVk IGZvcm0sIHdpdGggZGVkdXBsaWNhdGVkIGJvdW5kYXJ5CisgKiB2YWx1ZXMg ZXRjLgorICoKKyAqIFRPRE8gYWRkIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRp b24gaGVyZQorICovCisKK3R5cGVkZWYgc3RydWN0IE1WU2VyaWFsaXplZEJ1 Y2tldERhdGEgeworCisJLyogRnJlcXVlbmNpZXMgb2YgdGhpcyBidWNrZXQu ICovCisJZmxvYXQJbnR1cGxlczsJLyogZnJlcXVlbmN5IG9mIHR1cGxlcyB0 dXBsZXMgKi8KKworCS8qCisJICogSW5mb3JtYXRpb24gYWJvdXQgZGltZW5z aW9ucyBiZWluZyBOVUxMLW9ubHkuIE5vdCB5ZXQgdXNlZC4KKwkgKi8KKwli b29sICAgKm51bGxzb25seTsKKworCS8qIGxvd2VyIGJvdW5kYXJpZXMgLSB2 YWx1ZXMgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbmVxdWFsaXRpZXMg Ki8KKwl1aW50MTYgKm1pbjsKKwlib29sICAgKm1pbl9pbmNsdXNpdmU7CisK KwkvKiBpbmRleGVzIG9mIHVwcGVyIGJvdW5kYXJpZXMgLSB2YWx1ZXMgYW5k IGluZm9ybWF0aW9uIGFib3V0IHRoZQorCSAqIGluZXF1YWxpdGllcyAoZXhj bHVzaXZlIHZzLiBpbmNsdXNpdmUpICovCisJdWludDE2ICptYXg7CisJYm9v bCAgICptYXhfaW5jbHVzaXZlOworCit9IE1WU2VyaWFsaXplZEJ1Y2tldERh dGE7CisKK3R5cGVkZWYgTVZTZXJpYWxpemVkQnVja2V0RGF0YQkqTVZTZXJp YWxpemVkQnVja2V0OworCit0eXBlZGVmIHN0cnVjdCBNVlNlcmlhbGl6ZWRI aXN0b2dyYW1EYXRhIHsKKworCXVpbnQzMgkJbWFnaWM7CQkJLyogbWFnaWMg Y29uc3RhbnQgbWFya2VyICovCisJdWludDMyCQl0eXBlOwkJCS8qIHR5cGUg b2YgaGlzdG9ncmFtIChCQVNJQykgKi8KKwl1aW50MzIgCQluYnVja2V0czsJ CS8qIG51bWJlciBvZiBidWNrZXRzIChidWNrZXRzIGFycmF5KSAqLworCXVp bnQzMgkJbmRpbWVuc2lvbnM7CS8qIG51bWJlciBvZiBkaW1lbnNpb25zICov CisKKwkvKgorCSAqIGtlZXAgdGhpcyB0aGUgc2FtZSB3aXRoIE1WSGlzdG9n cmFtRGF0YSwgYmVjYXVzZSBvZgorCSAqIGRlc2VyaWFsaXphdGlvbiAoc2Ft ZSBvZmZzZXQpCisJICovCisJTVZTZXJpYWxpemVkQnVja2V0ICAgKmJ1Y2tl dHM7CQkvKiBhcnJheSBvZiBidWNrZXRzICovCisKKwkvKgorCSAqIHNlcmlh bGl6ZWQgYm91bmRhcnkgdmFsdWVzLCBvbmUgYXJyYXkgcGVyIGRpbWVuc2lv biwgZGVkdXBsaWNhdGVkCisJICogKHRoZSBtaW4vbWF4IGluZGV4ZXMgcG9p bnQgaW50byB0aGVzZSBhcnJheXMpCisJICovCisJaW50CSAgICpudmFsdWVz OworCURhdHVtICoqdmFsdWVzOworCit9IE1WU2VyaWFsaXplZEhpc3RvZ3Jh bURhdGE7CisKK3R5cGVkZWYgTVZTZXJpYWxpemVkSGlzdG9ncmFtRGF0YSAq TVZTZXJpYWxpemVkSGlzdG9ncmFtOworCisKKy8qIHVzZWQgdG8gZmxhZyBz dGF0cyBzZXJpYWxpemVkIHRvIGJ5dGVhICovCisjZGVmaW5lIE1WU1RBVF9I SVNUX01BR0lDCQkweDdGOEM1NjcwCS8qIG1hcmtzIHNlcmlhbGl6ZWQgYnl0 ZWEgKi8KKyNkZWZpbmUgTVZTVEFUX0hJU1RfVFlQRV9CQVNJQwkxCQkJLyog YmFzaWMgaGlzdG9ncmFtIHR5cGUgKi8KKworLyoKKyAqIExpbWl0cyB1c2Vk IGZvciBtYXhfYnVja2V0cyBvcHRpb24sIGkuZS4gd2UncmUgYWx3YXlzIGd1 YXJhbnRlZWQKKyAqIHRvIGhhdmUgc3BhY2UgZm9yIGF0IGxlYXN0IE1WU1RB VF9ISVNUX01JTl9CVUNLRVRTLCBhbmQgd2UgY2Fubm90CisgKiBoYXZlIG1v cmUgdGhhbiBNVlNUQVRfSElTVF9NQVhfQlVDS0VUUyBidWNrZXRzLgorICoK KyAqIFRoaXMgaXMganVzdCBhIGJvdW5kYXJ5IGZvciB0aGUgJ21heCcgdGhy ZXNob2xkIC0gdGhlIGFjdHVhbAorICogaGlzdG9ncmFtIG1heSB1c2UgbGVz cyBidWNrZXRzIHRoYW4gTVZTVEFUX0hJU1RfTUFYX0JVQ0tFVFMuCisgKgor ICogVE9ETyBUaGUgTVZTVEFUX0hJU1RfTUlOX0JVQ0tFVFMgc2hvdWxkIGJl IHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZgorICogICAgICBhdHRyaWJ1dGVz IChNVlNUQVRTX01BWF9ESU1FTlNJT05TKSBiZWNhdXNlIG9mIE5VTEwtYnVj a2V0cy4KKyAqICAgICAgVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDJeTiBi dWNrZXRzLCBvdGhlcndpc2Ugd2UgbWF5IGJlIHVuYWJsZQorICogICAgICB0 byBidWlsZCB0aGUgTlVMTCBidWNrZXRzLgorICovCisjZGVmaW5lIE1WU1RB VF9ISVNUX01JTl9CVUNLRVRTCTEyOAkJCS8qIG1pbiBudW1iZXIgb2YgYnVj a2V0cyAqLworI2RlZmluZSBNVlNUQVRfSElTVF9NQVhfQlVDS0VUUwkxNjM4 NAkJLyogbWF4IG51bWJlciBvZiBidWNrZXRzICovCisKKy8qCiAgKiBUT0RP IE1heWJlIGZldGNoaW5nIHRoZSBoaXN0b2dyYW0vTUNWIGxpc3Qgc2VwYXJh dGVseSBpcyBpbmVmZmljaWVudD8KICAqICAgICAgQ29uc2lkZXIgYWRkaW5n IGEgc2luZ2xlIGBmZXRjaF9zdGF0c2AgbWV0aG9kLCBmZXRjaGluZyBhbGwK ICAqICAgICAgc3RhdHMgc3BlY2lmaWVkIHVzaW5nIGZsYWdzIChvciBzb21l dGhpbmcgbGlrZSB0aGF0KS4KQEAgLTk5LDIwICsyMTYsMjUgQEAgdHlwZWRl ZiBNQ1ZMaXN0RGF0YSAqTUNWTGlzdDsKIAogTVZEZXBlbmRlbmNpZXMgbG9h ZF9tdl9kZXBlbmRlbmNpZXMoT2lkIG12b2lkKTsKIE1DVkxpc3QgICAgICAg IGxvYWRfbXZfbWN2bGlzdChPaWQgbXZvaWQpOworTVZTZXJpYWxpemVkSGlz dG9ncmFtICAgIGxvYWRfbXZfaGlzdG9ncmFtKE9pZCBtdm9pZCk7CiAKIGJ5 dGVhICogc2VyaWFsaXplX212X2RlcGVuZGVuY2llcyhNVkRlcGVuZGVuY2ll cyBkZXBlbmRlbmNpZXMpOwogYnl0ZWEgKiBzZXJpYWxpemVfbXZfbWN2bGlz dChNQ1ZMaXN0IG1jdmxpc3QsIGludDJ2ZWN0b3IgKmF0dHJzLAogCQkJCQkJ CSBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CitieXRlYSAqIHNlcmlhbGl6ZV9t dl9oaXN0b2dyYW0oTVZIaXN0b2dyYW0gaGlzdG9ncmFtLCBpbnQydmVjdG9y ICphdHRycywKKwkJCQkJICBWYWNBdHRyU3RhdHMgKipzdGF0cyk7CiAKIC8q IGRlc2VyaWFsaXphdGlvbiBvZiBzdGF0cyAoc2VyaWFsaXphdGlvbiBpcyBw cml2YXRlIHRvIGFuYWx5emUpICovCiBNVkRlcGVuZGVuY2llcwlkZXNlcmlh bGl6ZV9tdl9kZXBlbmRlbmNpZXMoYnl0ZWEgKiBkYXRhKTsKIE1DVkxpc3QJ CQlkZXNlcmlhbGl6ZV9tdl9tY3ZsaXN0KGJ5dGVhICogZGF0YSk7CitNVlNl cmlhbGl6ZWRIaXN0b2dyYW0JZGVzZXJpYWxpemVfbXZfaGlzdG9ncmFtKGJ5 dGVhICogZGF0YSk7CiAKIC8qCiAgKiBSZXR1cm5zIGluZGV4IG9mIHRoZSBh dHRyaWJ1dGUgbnVtYmVyIHdpdGhpbiB0aGUgdmVjdG9yIChpLmUuIGEKICAq IGRpbWVuc2lvbiB3aXRoaW4gdGhlIHN0YXRzKS4KICAqLwogaW50IG12X2dl dF9pbmRleChBdHRyTnVtYmVyIHZhcmF0dG5vLCBpbnQydmVjdG9yICogc3Rh a2V5cyk7CitpbnQydmVjdG9yKiBmaW5kX212X2F0dG51bXMoT2lkIG12b2lk LCBPaWQgKnJlbGlkKTsKIAogaW50MnZlY3RvciogZmluZF9tdl9hdHRudW1z KE9pZCBtdm9pZCwgT2lkICpyZWxpZCk7CiAKQEAgLTEyMSw2ICsyNDMsOCBA QCBleHRlcm4gRGF0dW0gcGdfbXZfc3RhdHNfZGVwZW5kZW5jaWVzX2luZm8o UEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gRGF0dW0gcGdfbXZfc3RhdHNf ZGVwZW5kZW5jaWVzX3Nob3coUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4g RGF0dW0gcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZvKFBHX0ZVTkNUSU9OX0FS R1MpOwogZXh0ZXJuIERhdHVtIHBnX212X21jdmxpc3RfaXRlbXMoUEdfRlVO Q1RJT05fQVJHUyk7CitleHRlcm4gRGF0dW0gcGdfbXZfc3RhdHNfaGlzdG9n cmFtX2luZm8oUEdfRlVOQ1RJT05fQVJHUyk7CitleHRlcm4gRGF0dW0gcGdf bXZfaGlzdG9ncmFtX2J1Y2tldHMoUEdfRlVOQ1RJT05fQVJHUyk7CiAKIE1W RGVwZW5kZW5jaWVzCiBidWlsZF9tdl9kZXBlbmRlbmNpZXMoaW50IG51bXJv d3MsIEhlYXBUdXBsZSAqcm93cywgaW50MnZlY3RvciAqYXR0cnMsCkBAIC0x MzAsMTAgKzI1NCwyMCBAQCBNQ1ZMaXN0CiBidWlsZF9tdl9tY3ZsaXN0KGlu dCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsIGludDJ2ZWN0b3IgKmF0dHJz LAogCQkJCSBWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50ICpudW1yb3dzX2Zp bHRlcmVkKTsKIAorTVZIaXN0b2dyYW0KK2J1aWxkX212X2hpc3RvZ3JhbShp bnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dzLCBpbnQydmVjdG9yICphdHRy cywKKwkJCQkgICBWYWNBdHRyU3RhdHMgKipzdGF0cywgaW50IG51bXJvd3Nf dG90YWwpOworCiB2b2lkIGJ1aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJl bCwgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAkJCQkJaW50IG5h dHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwogCi12b2lkIHVw ZGF0ZV9tdl9zdGF0cyhPaWQgcmVsaWQsIE1WRGVwZW5kZW5jaWVzIGRlcGVu ZGVuY2llcywgTUNWTGlzdCBtY3ZsaXN0LAordm9pZCB1cGRhdGVfbXZfc3Rh dHMoT2lkIHJlbGlkLCBNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsCisJ CQkJCSBNQ1ZMaXN0IG1jdmxpc3QsIE1WSGlzdG9ncmFtIGhpc3RvZ3JhbSwK IAkJCQkJIGludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3RhdHMgKipzdGF0 cyk7CiAKKyNpZmRlZiBERUJVR19NVkhJU1QKK2V4dGVybiB2b2lkIGRlYnVn X2hpc3RvZ3JhbV9tYXRjaGVzKE1WU2VyaWFsaXplZEhpc3RvZ3JhbSBtdmhp c3QsIGNoYXIgKm1hdGNoZXMpOworI2VuZGlmCisKKwogI2VuZGlmCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X2hpc3RvZ3Jh bS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL212X2hpc3RvZ3Jh bS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0 ZWRiOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvbXZfaGlzdG9ncmFtLm91dApAQCAtMCwwICsxLDIwNyBAQAorLS0g ZGF0YSB0eXBlIHBhc3NlZCBieSB2YWx1ZQorQ1JFQVRFIFRBQkxFIG12X2hp c3RvZ3JhbSAoCisgICAgYSBJTlQsCisgICAgYiBJTlQsCisgICAgYyBJTlQK Kyk7CistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1MgczEg T04gbXZfaGlzdG9ncmFtICh1bmtub3duX2NvbHVtbikgV0lUSCAoaGlzdG9n cmFtKTsKK0VSUk9SOiAgY29sdW1uICJ1bmtub3duX2NvbHVtbiIgcmVmZXJl bmNlZCBpbiBzdGF0aXN0aWNzIGRvZXMgbm90IGV4aXN0CistLSBzaW5nbGUg Y29sdW1uCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0b2dyYW0g KGEpIFdJVEggKGhpc3RvZ3JhbSk7CitFUlJPUjogIG11bHRpdmFyaWF0ZSBz dGF0cyByZXF1aXJlIDIgb3IgbW9yZSBjb2x1bW5zCistLSBzaW5nbGUgY29s dW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9o aXN0b2dyYW0gKGEsIGEpIFdJVEggKGhpc3RvZ3JhbSk7CitFUlJPUjogIGR1 cGxpY2F0ZSBjb2x1bW4gbmFtZSBpbiBzdGF0aXN0aWNzIGRlZmluaXRpb24K Ky0tIHR3byBjb2x1bW5zLCBvbmUgZHVwbGljYXRlZAorQ1JFQVRFIFNUQVRJ U1RJQ1MgczEgT04gbXZfaGlzdG9ncmFtIChhLCBhLCBiKSBXSVRIIChoaXN0 b2dyYW0pOworRVJST1I6ICBkdXBsaWNhdGUgY29sdW1uIG5hbWUgaW4gc3Rh dGlzdGljcyBkZWZpbml0aW9uCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRF IFNUQVRJU1RJQ1MgczEgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRI ICh1bmtub3duX29wdGlvbik7CitFUlJPUjogIHVucmVjb2duaXplZCBTVEFU SVNUSUNTIG9wdGlvbiAidW5rbm93bl9vcHRpb24iCistLSBtaXNzaW5nIGhp c3RvZ3JhbSBzdGF0aXN0aWNzCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBt dl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKGRlcGVuZGVuY2llcywgbWF4 X2J1Y2tldHM9MjAwKTsKK0VSUk9SOiAgb3B0aW9uICdoaXN0b2dyYW0nIGlz IHJlcXVpcmVkIGJ5IG90aGVyIG9wdGlvbnMocykKKy0tIGludmFsaWQgbWF4 X2J1Y2tldHMgdmFsdWUgLyB0b28gbG93CitDUkVBVEUgU1RBVElTVElDUyBz MSBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKG1jdiwgbWF4X2J1 Y2tldHM9MTApOworRVJST1I6ICBtaW5pbXVtIG51bWJlciBvZiBidWNrZXRz IGlzIDEyOAorLS0gaW52YWxpZCBtYXhfYnVja2V0cyB2YWx1ZSAvIHRvbyBo aWdoCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0b2dyYW0gKGEs IGIsIGMpIFdJVEggKG1jdiwgbWF4X2J1Y2tldHM9MTAwMDAwKTsKK0VSUk9S OiAgbWF4aW11bSBudW1iZXIgb2YgYnVja2V0cyBpcyAxNjM4NAorLS0gY29y cmVjdCBjb21tYW5kCitDUkVBVEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0 b2dyYW0gKGEsIGIsIGMpIFdJVEggKGhpc3RvZ3JhbSk7CistLSByYW5kb20g ZGF0YSAobm8gZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMpCitJTlNFUlQgSU5U TyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIG1vZChpLCAxMTEpLCBtb2Qo aSwgMTIzKSwgbW9kKGksIDIzKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwKSBzKGkpOworQU5BTFlaRSBtdl9oaXN0b2dyYW07CitTRUxFQ1QgaGlz dF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGlj IFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOwor IGhpc3RfZW5hYmxlZCB8IGhpc3RfYnVpbHQgCistLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0CisoMSByb3cpCisKK1RS VU5DQVRFIG12X2hpc3RvZ3JhbTsKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+ IGMKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8x MCwgaS8xMDAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAp IHMoaSk7CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2Vu YWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hF UkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlz dF9lbmFibGVkIHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLQorIHQgICAgICAgICAgICB8IHQKKygxIHJvdykKKworVFJVTkNB VEUgbXZfaGlzdG9ncmFtOworLS0gYSA9PiBiLCBhID0+IGMKK0lOU0VSVCBJ TlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8xNTAsIGkv MjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFM WVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3Rf YnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQg PSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVkIHwg aGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQg ICAgICAgICAgICB8IHQKKygxIHJvdykKKworVFJVTkNBVEUgbXZfaGlzdG9n cmFtOworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBz Y2FuLCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG12X2hp c3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAw MCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVB VEUgSU5ERVggaGlzdF9pZHggT04gbXZfaGlzdG9ncmFtIChhLCBiKTsKK0FO QUxZWkUgbXZfaGlzdG9ncmFtOworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlz dF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxp ZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKyBoaXN0X2VuYWJsZWQg fCBoaXN0X2J1aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisg dCAgICAgICAgICAgIHwgdAorKDEgcm93KQorCitFWFBMQUlOIChDT1NUUyBv ZmYpCisgU0VMRUNUICogRlJPTSBtdl9oaXN0b2dyYW0gV0hFUkUgYSA9IDEw IEFORCBiID0gNTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gbXZfaGlzdG9n cmFtCisgICBSZWNoZWNrIENvbmQ6ICgoYSA9IDEwKSBBTkQgKGIgPSA1KSkK KyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBoaXN0X2lkeAorICAgICAg ICAgSW5kZXggQ29uZDogKChhID0gMTApIEFORCAoYiA9IDUpKQorKDQgcm93 cykKKworRFJPUCBUQUJMRSBtdl9oaXN0b2dyYW07CistLSB2YXJsZW5hIHR5 cGUgKHRleHQpCitDUkVBVEUgVEFCTEUgbXZfaGlzdG9ncmFtICgKKyAgICBh IFRFWFQsCisgICAgYiBURVhULAorICAgIGMgVEVYVAorKTsKK0NSRUFURSBT VEFUSVNUSUNTIHMyIE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYykgV0lUSCAo aGlzdG9ncmFtKTsKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlvbmFsIGRl cGVuZGVuY2llcykKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBT RUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwgMjMpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CitBTkFMWVpFIG12 X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQK KyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZf aGlzdG9ncmFtJzo6cmVnY2xhc3M7CisgaGlzdF9lbmFibGVkIHwgaGlzdF9i dWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIHQgICAgICAg ICAgICB8IHQKKygxIHJvdykKKworVFJVTkNBVEUgbXZfaGlzdG9ncmFtOwor LS0gYSA9PiBiLCBhID0+IGMsIGIgPT4gYworSU5TRVJUIElOVE8gbXZfaGlz dG9ncmFtCisgICAgIFNFTEVDVCBpLzEwLCBpLzEwMCwgaS8yMDAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlz dG9ncmFtOworU0VMRUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAorICBG Uk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0 b2dyYW0nOjpyZWdjbGFzczsKKyBoaXN0X2VuYWJsZWQgfCBoaXN0X2J1aWx0 IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAg IHwgdAorKDEgcm93KQorCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CistLSBh ID0+IGIsIGEgPT4gYworSU5TRVJUIElOVE8gbXZfaGlzdG9ncmFtCisgICAg IFNFTEVDVCBpLzEwLCBpLzE1MCwgaS8yMDAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworU0VM RUNUIGhpc3RfZW5hYmxlZCwgaGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0 YXRpc3RpYyBXSEVSRSBzdGFyZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdj bGFzczsKKyBoaXN0X2VuYWJsZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tCisgdCAgICAgICAgICAgIHwgdAorKDEgcm93 KQorCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CistLSBjaGVjayBleHBsYWlu IChleHBlY3QgYml0bWFwIGluZGV4IHNjYW4sIG5vdCBwbGFpbiBpbmRleCBz Y2FuKQorSU5TRVJUIElOVE8gbXZfaGlzdG9ncmFtCisgICAgIFNFTEVDVCBp LzEwMDAwLCBpLzIwMDAwLCBpLzQwMDAwIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsMTAwMDAwMCkgcyhpKTsKK0NSRUFURSBJTkRFWCBoaXN0X2lkeCBPTiBt dl9oaXN0b2dyYW0gKGEsIGIpOworQU5BTFlaRSBtdl9oaXN0b2dyYW07CitT RUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZf c3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJl Z2NsYXNzOworIGhpc3RfZW5hYmxlZCB8IGhpc3RfYnVpbHQgCistLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0KKyB0ICAgICAgICAgICAgfCB0CisoMSBy b3cpCisKK0VYUExBSU4gKENPU1RTIG9mZikKKyBTRUxFQ1QgKiBGUk9NIG12 X2hpc3RvZ3JhbSBXSEVSRSBhID0gJzEwJyBBTkQgYiA9ICc1JzsKKyAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2Nh biBvbiBtdl9oaXN0b2dyYW0KKyAgIFJlY2hlY2sgQ29uZDogKChhID0gJzEw Jzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyAgIC0+ICBCaXRtYXAg SW5kZXggU2NhbiBvbiBoaXN0X2lkeAorICAgICAgICAgSW5kZXggQ29uZDog KChhID0gJzEwJzo6dGV4dCkgQU5EIChiID0gJzUnOjp0ZXh0KSkKKyg0IHJv d3MpCisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsKKy0tIGNoZWNrIGV4cGxh aW4gKGV4cGVjdCBiaXRtYXAgaW5kZXggc2Nhbiwgbm90IHBsYWluIGluZGV4 IHNjYW4pIHdpdGggTlVMTHMKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQor ICAgICBTRUxFQ1QKKyAgICAgICAoQ0FTRSBXSEVOIGkvMTAwMDAgPSAwIFRI RU4gTlVMTCBFTFNFIGkvMTAwMDAgRU5EKSwKKyAgICAgICAoQ0FTRSBXSEVO IGkvMjAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkvMjAwMDAgRU5EKSwKKyAg ICAgICAoQ0FTRSBXSEVOIGkvNDAwMDAgPSAwIFRIRU4gTlVMTCBFTFNFIGkv NDAwMDAgRU5EKQorICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw MDApIHMoaSk7CitBTkFMWVpFIG12X2hpc3RvZ3JhbTsKK1NFTEVDVCBoaXN0 X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMg V0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7Cisg aGlzdF9lbmFibGVkIHwgaGlzdF9idWlsdCAKKy0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLQorIHQgICAgICAgICAgICB8IHQKKygxIHJvdykKKworRVhQ TEFJTiAoQ09TVFMgb2ZmKQorIFNFTEVDVCAqIEZST00gbXZfaGlzdG9ncmFt IFdIRVJFIGEgSVMgTlVMTCBBTkQgYiBJUyBOVUxMOworICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIG12X2hpc3RvZ3JhbQorICAgUmVj aGVjayBDb25kOiAoKGEgSVMgTlVMTCkgQU5EIChiIElTIE5VTEwpKQorICAg LT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIGhpc3RfaWR4CisgICAgICAgICBJ bmRleCBDb25kOiAoKGEgSVMgTlVMTCkgQU5EIChiIElTIE5VTEwpKQorKDQg cm93cykKKworRFJPUCBUQUJMRSBtdl9oaXN0b2dyYW07CistLSBOVUxMIHZh bHVlcyAobWl4IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRFIFRB QkxFIG12X2hpc3RvZ3JhbSAoCisgICAgYSBJTlQsCisgICAgYiBURVhULAor ICAgIGMgSU5ULAorICAgIGQgVEVYVAorKTsKK0NSRUFURSBTVEFUSVNUSUNT IHMzIE9OIG12X2hpc3RvZ3JhbSAoYSwgYiwgYywgZCkgV0lUSCAoaGlzdG9n cmFtKTsKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QK KyAgICAgICAgIG1vZChpLCAxMDApLAorICAgICAgICAgKENBU0UgV0hFTiBt b2QoaSwgMjAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGksMjAwKSBFTkQp LAorICAgICAgICAgbW9kKGksIDQwMCksCisgICAgICAgICAoQ0FTRSBXSEVO IG1vZChpLCAzMDApID0gMCBUSEVOIE5VTEwgRUxTRSBtb2QoaSw2MDApIEVO RCkKKyAgICAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMCkgcyhpKTsK K0FOQUxZWkUgbXZfaGlzdG9ncmFtOworU0VMRUNUIGhpc3RfZW5hYmxlZCwg aGlzdF9idWlsdAorICBGUk9NIHBnX212X3N0YXRpc3RpYyBXSEVSRSBzdGFy ZWxpZCA9ICdtdl9oaXN0b2dyYW0nOjpyZWdjbGFzczsKKyBoaXN0X2VuYWJs ZWQgfCBoaXN0X2J1aWx0IAorLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t CisgdCAgICAgICAgICAgIHwgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIG12 X2hpc3RvZ3JhbTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y dWxlcy5vdXQKaW5kZXggNjYwNzFkOC4uMWExYTRjYSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTEzNzUsNyAr MTM3NSw5IEBAIHBnX212X3N0YXRzfCBTRUxFQ1Qgbi5uc3BuYW1lIEFTIHNj aGVtYW5hbWUsCiAgICAgbGVuZ3RoKHMuc3RhZGVwcykgQVMgZGVwc2J5dGVz LAogICAgIHBnX212X3N0YXRzX2RlcGVuZGVuY2llc19pbmZvKHMuc3RhZGVw cykgQVMgZGVwc2luZm8sCiAgICAgbGVuZ3RoKHMuc3RhbWN2KSBBUyBtY3Zi eXRlcywKLSAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8ocy5zdGFtY3Yp IEFTIG1jdmluZm8KKyAgICBwZ19tdl9zdGF0c19tY3ZsaXN0X2luZm8ocy5z dGFtY3YpIEFTIG1jdmluZm8sCisgICAgbGVuZ3RoKHMuc3RhaGlzdCkgQVMg aGlzdGJ5dGVzLAorICAgIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKHMu c3RhaGlzdCkgQVMgaGlzdGluZm8KICAgIEZST00gKChwZ19tdl9zdGF0aXN0 aWMgcwogICAgICBKT0lOIHBnX2NsYXNzIGMgT04gKChjLm9pZCA9IHMuc3Rh cmVsaWQpKSkKICAgICAgTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuIE9OICgo bi5vaWQgPSBjLnJlbG5hbWVzcGFjZSkpKTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDg1ZDk0ZjEuLmE4ODUyMzUg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1 bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpA QCAtMTEyLDQgKzExMiw0IEBAIHRlc3Q6IGV2ZW50X3RyaWdnZXIKIHRlc3Q6 IHN0YXRzCiAKICMgcnVuIHRlc3RzIG9mIG11bHRpdmFyaWF0ZSBzdGF0cwot dGVzdDogbXZfZGVwZW5kZW5jaWVzIG12X21jdgordGVzdDogbXZfZGVwZW5k ZW5jaWVzIG12X21jdiBtdl9oaXN0b2dyYW0KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVz cy9zZXJpYWxfc2NoZWR1bGUKaW5kZXggNjU4NGQ3My4uMmVmZGNkNyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKQEAgLTE2NCwz ICsxNjQsNCBAQCB0ZXN0OiBldmVudF90cmlnZ2VyCiB0ZXN0OiBzdGF0cwog dGVzdDogbXZfZGVwZW5kZW5jaWVzCiB0ZXN0OiBtdl9tY3YKK3Rlc3Q6IG12 X2hpc3RvZ3JhbQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwv bXZfaGlzdG9ncmFtLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL212X2hp c3RvZ3JhbS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMDJmNDliNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL212X2hpc3RvZ3JhbS5zcWwKQEAgLTAsMCArMSwxNzYgQEAKKy0t IGRhdGEgdHlwZSBwYXNzZWQgYnkgdmFsdWUKK0NSRUFURSBUQUJMRSBtdl9o aXN0b2dyYW0gKAorICAgIGEgSU5ULAorICAgIGIgSU5ULAorICAgIGMgSU5U CispOworCistLSB1bmtub3duIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJQ1Mg czEgT04gbXZfaGlzdG9ncmFtICh1bmtub3duX2NvbHVtbikgV0lUSCAoaGlz dG9ncmFtKTsKKworLS0gc2luZ2xlIGNvbHVtbgorQ1JFQVRFIFNUQVRJU1RJ Q1MgczEgT04gbXZfaGlzdG9ncmFtIChhKSBXSVRIIChoaXN0b2dyYW0pOwor CistLSBzaW5nbGUgY29sdW1uLCBkdXBsaWNhdGVkCitDUkVBVEUgU1RBVElT VElDUyBzMSBPTiBtdl9oaXN0b2dyYW0gKGEsIGEpIFdJVEggKGhpc3RvZ3Jh bSk7CisKKy0tIHR3byBjb2x1bW5zLCBvbmUgZHVwbGljYXRlZAorQ1JFQVRF IFNUQVRJU1RJQ1MgczEgT04gbXZfaGlzdG9ncmFtIChhLCBhLCBiKSBXSVRI IChoaXN0b2dyYW0pOworCistLSB1bmtub3duIG9wdGlvbgorQ1JFQVRFIFNU QVRJU1RJQ1MgczEgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjKSBXSVRIICh1 bmtub3duX29wdGlvbik7CisKKy0tIG1pc3NpbmcgaGlzdG9ncmFtIHN0YXRp c3RpY3MKK0NSRUFURSBTVEFUSVNUSUNTIHMxIE9OIG12X2hpc3RvZ3JhbSAo YSwgYiwgYykgV0lUSCAoZGVwZW5kZW5jaWVzLCBtYXhfYnVja2V0cz0yMDAp OworCistLSBpbnZhbGlkIG1heF9idWNrZXRzIHZhbHVlIC8gdG9vIGxvdwor Q1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBj KSBXSVRIIChtY3YsIG1heF9idWNrZXRzPTEwKTsKKworLS0gaW52YWxpZCBt YXhfYnVja2V0cyB2YWx1ZSAvIHRvbyBoaWdoCitDUkVBVEUgU1RBVElTVElD UyBzMSBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKG1jdiwgbWF4 X2J1Y2tldHM9MTAwMDAwKTsKKworLS0gY29ycmVjdCBjb21tYW5kCitDUkVB VEUgU1RBVElTVElDUyBzMSBPTiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJ VEggKGhpc3RvZ3JhbSk7CisKKy0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlv bmFsIGRlcGVuZGVuY2llcykKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQor ICAgICBTRUxFQ1QgbW9kKGksIDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwg MjMpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FO QUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBo aXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJl bGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBt dl9oaXN0b2dyYW07CisKKy0tIGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lO U0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8x MDAsIGkvMjAwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7 CisKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFi bGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJF IHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitUUlVO Q0FURSBtdl9oaXN0b2dyYW07CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNF UlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUw LCBpLzIwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOwor QU5BTFlaRSBtdl9oaXN0b2dyYW07CisKK1NFTEVDVCBoaXN0X2VuYWJsZWQs IGhpc3RfYnVpbHQKKyAgRlJPTSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3Rh cmVsaWQgPSAnbXZfaGlzdG9ncmFtJzo6cmVnY2xhc3M7CisKK1RSVU5DQVRF IG12X2hpc3RvZ3JhbTsKKworLS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJp dG1hcCBpbmRleCBzY2FuLCBub3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VS VCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8y MDAwMCwgaS80MDAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDAp IHMoaSk7CitDUkVBVEUgSU5ERVggaGlzdF9pZHggT04gbXZfaGlzdG9ncmFt IChhLCBiKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlz dF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGlj IFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOwor CitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNUICogRlJPTSBtdl9oaXN0 b2dyYW0gV0hFUkUgYSA9IDEwIEFORCBiID0gNTsKKworRFJPUCBUQUJMRSBt dl9oaXN0b2dyYW07CisKKy0tIHZhcmxlbmEgdHlwZSAodGV4dCkKK0NSRUFU RSBUQUJMRSBtdl9oaXN0b2dyYW0gKAorICAgIGEgVEVYVCwKKyAgICBiIFRF WFQsCisgICAgYyBURVhUCispOworCitDUkVBVEUgU1RBVElTVElDUyBzMiBP TiBtdl9oaXN0b2dyYW0gKGEsIGIsIGMpIFdJVEggKGhpc3RvZ3JhbSk7CisK Ky0tIHJhbmRvbSBkYXRhIChubyBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcykK K0lOU0VSVCBJTlRPIG12X2hpc3RvZ3JhbQorICAgICBTRUxFQ1QgbW9kKGks IDExMSksIG1vZChpLCAxMjMpLCBtb2QoaSwgMjMpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbXZfaGlzdG9ncmFt OworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00g cGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3Jh bSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07CisKKy0t IGEgPT4gYiwgYSA9PiBjLCBiID0+IGMKK0lOU0VSVCBJTlRPIG12X2hpc3Rv Z3JhbQorICAgICBTRUxFQ1QgaS8xMCwgaS8xMDAsIGkvMjAwIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMDApIHMoaSk7CisKK0FOQUxZWkUgbXZfaGlz dG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0Cisg IEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hp c3RvZ3JhbSc6OnJlZ2NsYXNzOworCitUUlVOQ0FURSBtdl9oaXN0b2dyYW07 CisKKy0tIGEgPT4gYiwgYSA9PiBjCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dy YW0KKyAgICAgU0VMRUNUIGkvMTAsIGkvMTUwLCBpLzIwMCBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDAwKSBzKGkpOworQU5BTFlaRSBtdl9oaXN0b2dy YW07CisKK1NFTEVDVCBoaXN0X2VuYWJsZWQsIGhpc3RfYnVpbHQKKyAgRlJP TSBwZ19tdl9zdGF0aXN0aWMgV0hFUkUgc3RhcmVsaWQgPSAnbXZfaGlzdG9n cmFtJzo6cmVnY2xhc3M7CisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsKKwor LS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBu b3QgcGxhaW4gaW5kZXggc2NhbikKK0lOU0VSVCBJTlRPIG12X2hpc3RvZ3Jh bQorICAgICBTRUxFQ1QgaS8xMDAwMCwgaS8yMDAwMCwgaS80MDAwMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHMoaSk7CitDUkVBVEUgSU5E RVggaGlzdF9pZHggT04gbXZfaGlzdG9ncmFtIChhLCBiKTsKK0FOQUxZWkUg bXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1 aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0g J212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOworCitFWFBMQUlOIChDT1NUUyBv ZmYpCisgU0VMRUNUICogRlJPTSBtdl9oaXN0b2dyYW0gV0hFUkUgYSA9ICcx MCcgQU5EIGIgPSAnNSc7CisKK1RSVU5DQVRFIG12X2hpc3RvZ3JhbTsKKwor LS0gY2hlY2sgZXhwbGFpbiAoZXhwZWN0IGJpdG1hcCBpbmRleCBzY2FuLCBu b3QgcGxhaW4gaW5kZXggc2Nhbikgd2l0aCBOVUxMcworSU5TRVJUIElOVE8g bXZfaGlzdG9ncmFtCisgICAgIFNFTEVDVAorICAgICAgIChDQVNFIFdIRU4g aS8xMDAwMCA9IDAgVEhFTiBOVUxMIEVMU0UgaS8xMDAwMCBFTkQpLAorICAg ICAgIChDQVNFIFdIRU4gaS8yMDAwMCA9IDAgVEhFTiBOVUxMIEVMU0UgaS8y MDAwMCBFTkQpLAorICAgICAgIChDQVNFIFdIRU4gaS80MDAwMCA9IDAgVEhF TiBOVUxMIEVMU0UgaS80MDAwMCBFTkQpCisgICAgIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsMTAwMDAwMCkgcyhpKTsKK0FOQUxZWkUgbXZfaGlzdG9ncmFt OworCitTRUxFQ1QgaGlzdF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00g cGdfbXZfc3RhdGlzdGljIFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3Jh bSc6OnJlZ2NsYXNzOworCitFWFBMQUlOIChDT1NUUyBvZmYpCisgU0VMRUNU ICogRlJPTSBtdl9oaXN0b2dyYW0gV0hFUkUgYSBJUyBOVUxMIEFORCBiIElT IE5VTEw7CisKK0RST1AgVEFCTEUgbXZfaGlzdG9ncmFtOworCistLSBOVUxM IHZhbHVlcyAobWl4IG9mIGludCBhbmQgdGV4dCBjb2x1bW5zKQorQ1JFQVRF IFRBQkxFIG12X2hpc3RvZ3JhbSAoCisgICAgYSBJTlQsCisgICAgYiBURVhU LAorICAgIGMgSU5ULAorICAgIGQgVEVYVAorKTsKKworQ1JFQVRFIFNUQVRJ U1RJQ1MgczMgT04gbXZfaGlzdG9ncmFtIChhLCBiLCBjLCBkKSBXSVRIICho aXN0b2dyYW0pOworCitJTlNFUlQgSU5UTyBtdl9oaXN0b2dyYW0KKyAgICAg U0VMRUNUCisgICAgICAgICBtb2QoaSwgMTAwKSwKKyAgICAgICAgIChDQVNF IFdIRU4gbW9kKGksIDIwMCkgPSAwIFRIRU4gTlVMTCBFTFNFIG1vZChpLDIw MCkgRU5EKSwKKyAgICAgICAgIG1vZChpLCA0MDApLAorICAgICAgICAgKENB U0UgV0hFTiBtb2QoaSwgMzAwKSA9IDAgVEhFTiBOVUxMIEVMU0UgbW9kKGks NjAwKSBFTkQpCisgICAgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAp IHMoaSk7CisKK0FOQUxZWkUgbXZfaGlzdG9ncmFtOworCitTRUxFQ1QgaGlz dF9lbmFibGVkLCBoaXN0X2J1aWx0CisgIEZST00gcGdfbXZfc3RhdGlzdGlj IFdIRVJFIHN0YXJlbGlkID0gJ212X2hpc3RvZ3JhbSc6OnJlZ2NsYXNzOwor CitEUk9QIFRBQkxFIG12X2hpc3RvZ3JhbTsKLS0gCjIuMS4wCgo= --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename="0006-multi-statistics-estimation.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0006-multi-statistics-estimation.patch"; charset="UTF-8" RnJvbSBkZWM2NTQyNmIxMmFkY2NlYjYzMDM2OTJiMDdiYjRmNWMzZTU2NGUy IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogRnJpLCA2IEZlYiAyMDE1IDAx OjQyOjM4ICswMTAwClN1YmplY3Q6IFtQQVRDSCA2LzldIG11bHRpLXN0YXRp c3RpY3MgZXN0aW1hdGlvbgoKVGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IGEg cHJvYmFiaWxpdHkgKHdoaWNoIGlzIHdoYXQgc2VsZWN0aXZpdHkgaXMpCmNh biBiZSBzcGxpdCBpbnRvIGEgcHJvZHVjdCBvZiBjb25kaXRpb25hbCBwcm9i YWJpbGl0aWVzIGxpa2UgdGhpczoKCiAgICBQKEEgJiBCICYgQykgPSBQKEEg JiBCKSAqIFAoQ3xBICYgQikKCklmIHdlIGFzc3VtZSB0aGF0IEMgYW5kIEIg YXJlIGluZGVwZW5kZW50LCB0aGUgbGFzdCBwYXJ0IG1heSBiZQpzaW1wbGlm aWVkIGxpa2UgdGhpcwoKICAgIFAoQSAmIEIgJiBDKSA9IFAoQSAmIEIpICog UChDfEEpCgp3ZSBvbmx5IG5lZWQgcHJvYmFiaWxpdGllcyBvbiBbQSxCXSBh bmQgW0MsQV0gdG8gY29tcHV0ZSB0aGUgb3JpZ2luYWwKcHJvYmFiaWxpdHku CgpUaGUgaW1wbGVtZW50YXRpb24gd29ya3MgaW4gdGhlIG90aGVyIGRpcmVj dGlvbiwgdGhvdWdoLiBXZSBrbm93IHdoYXQKcHJvYmFiaWxpdHkgUChBICYg QiAmIEMpIHdlIG5lZWQgdG8gY29tcHV0ZSwgYW5kIGFsc28gd2hhdCBzdGF0 aXN0aWNzCmFyZSBhdmFpbGFibGUuCgpTbyB3ZSBzZWFyY2ggZm9yIGEgY29t YmluYXRpb25zIG9mIHN0YXRpc3RpY3MsIGNvdmVyaW5nIHRoZSBjbGF1c2Vz IGluCmFuIG9wdGltYWwgd2F5IChtb3N0IGNsYXVzZXMgY292ZXJlZCwgbW9z dCBkZXBlbmRlbmNpZXMgZXhwbG9pdGVkKS4KClRoZXJlIGFyZSB0d28gcG9z c2libGUgYXBwcm9hY2hlcyAtIGV4aGF1c3RpdmUgYW5kIGdyZWVkeS4gVGhl CmV4aGF1c3RpdmUgb25lIHdhbGtzIHRocm91Z2ggYWxsIHBlcm11dGF0aW9u cyBvZiBzdGF0cyB1c2luZyBkeW5hbWljCnByb2dyYW1taW5nLCBzbyBpdCdz IGd1YXJhbnRlZWQgdG8gZmluZCB0aGUgb3B0aW1hbCBzb2x1dGlvbiwgYnV0 IGl0CnNvb24gZ2V0cyB2ZXJ5IHNsb3cgYXMgaXQncyByb3VnaGx5IE8oTiEp LiBUaGUgZHluYW1pYyBwcm9ncmFtbWluZyBtYXkKaW1wcm92ZSB0aGF0IGEg Yml0LCBidXQgaXQncyBzdGlsbCBmYXIgdG9vIGV4cGVuc2l2ZSBmb3IgbGFy Z2UgbnVtYmVycwpvZiBzdGF0aXN0aWNzIChvbiBhIHNpbmdsZSB0YWJsZSku CgpUaGUgZ3JlZWR5IGFsZ29yaXRobSBpcyB2ZXJ5IHNpbXBsZSAtIGluIGV2 ZXJ5IHN0ZXAgY2hvb3NlIHRoZSBiZXN0CnNvbHV0aW9uLiBUaGF0IG1heSBu b3QgZ3VhcmFudGVlIHRoZSBiZXN0IHNvbHV0aW9uIGdsb2JhbGx5IChidXQg bWF5YmUKaXQgZG9lcz8pLCBidXQgaXQgb25seSBuZWVkcyBOIHN0ZXBzIHRv IGZpbmQgdGhlIHNvbHV0aW9uLCBzbyBpdCdzIHZlcnkKZmFzdCAocHJvY2Vz c2luZyB0aGUgc2VsZWN0ZWQgc3RhdHMgaXMgdXN1YWxseSB3YXkgbW9yZSBl eHBlbnNpdmUpLgoKVGhlcmUncyBhIEdVQyBmb3Igc2VsZWN0aW5nIHRoZSBz ZWFyY2ggYWxnb3JpdGhtCgogICAgbXZzdGF0X3NlYXJjaCA9IHsnZ3JlZWR5 JywgJ2V4aGF1c3RpdmUnfQoKVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2dyZWVk eScgYXMgdGhhdCdzIG11Y2ggc2FmZXIgKHdpdGggcmVzcGVjdCB0bwpydW50 aW1lKS4gU2VlIGNob29zZV9tdl9zdGF0aXN0aWNzKCkuCgpPbmNlIHdlIGhh dmUgZm91bmQgYSBzZXF1ZW5jZSBvZiBzdGF0aXN0aWNzLCB3ZSBhcHBseSB0 aGVtIHRvIHRoZQpjbGF1c2VzIHVzaW5nIHRoZSBjb25kaXRpb25hbCBwcm9i YWJpbGl0aWVzLiBXZSBwcm9jZXNzIHRoZSBzZWxlY3RlZApzdGF0cyBvbmUg Ynkgb25lLCBhbmQgZm9yIGVhY2ggd2Ugc2VsZWN0IHRoZSBlc3RpbWF0ZWQg Y2xhdXNlcyBhbmQKY29uZGl0aW9ucy4gU2VlIGNsYXVzZWxpc3Rfc2VsZWN0 aXZpdHkoKSBmb3IgbW9yZSBkZXRhaWxzLgoKTGltaXRhdGlvbnMKLS0tLS0t LS0tLS0KCkl0J3Mgc3RpbGwgdHJ1ZSB0aGF0IGVhY2ggY2xhdXNlIGF0IGEg Z2l2ZW4gbGV2ZWwgaGFzIHRvIGJlIGNvdmVyZWQgYnkKYSBzaW5nbGUgTVYg c3RhdGlzdGljcy4gU28gd2l0aCB0aGlzIHF1ZXJ5CgogICAgV0hFUkUgKGNs YXVzZTEpIEFORCAoY2xhdXNlMikgQU5EIChjbGF1c2UzIE9SIGNsYXVzZTQp CgplYWNoIHBhcmVudGhlc2l6ZWQgY2xhdXNlIGhhcyB0byBiZSBjb3ZlcmVk IGJ5IGEgc2luZ2xlIG11bHRpdmFyaWF0ZQpzdGF0aXN0aWNzLgoKQ2xhdXNl cyBub3QgY292ZXJlZCBieSBhIHNpbmdsZSBzdGF0aXN0aWNzIGF0IHRoaXMg bGV2ZWwgd2lsbCBiZSBwYXNzZWQKdG8gY2xhdXNlX3NlbGVjdGl2aXR5KCkg YnV0IHRoaXMgd2lsbCB0cmVhdCB0aGVtIGFzIGEgY29sbGVjdGlvbiBvZgpz aW1wbGVyIGNsYXVzZXMgKGNvbm5lY3RlZCBieSBBTkQgb3IgT1IpLCBhbmQg dGhlIGNsYXVzZXMgZnJvbSB0aGUKcHJldmlvdXMgbGV2ZWwgd2lsbCBiZSB1 c2VkIGFzIGNvbmRpdGlvbnMuCgpTbyB1c2luZyB0aGUgc2FtZSBleGFtcGxl LCB0aGUgbGFzdCBjbGF1c2Ugd2lsbCBiZSBwYXNzZWQgdG8KY2xhdXNlX3Nl bGVjdGl2aXR5KCkgd2l0aCAnY2xhdXNlMScgYW5kICdjbGF1c2UyJyBhcyBj b25kaXRpb25zLCBhbmQgaXQKd2lsbCBiZSBwcm9jZXNzZWQgdXNpbmcgbXVs dGl2YXJpYXRlIHN0YXRzIGlmIHBvc3NpYmxlLgoKVGhlIG90aGVyIGxpbWl0 YXRpb24gaXMgdGhhdCBhbGwgdGhlIGV4cHJlc3Npb25zIGhhdmUgdG8gYmUK bXYtY29tcGF0aWJsZSwgaS5lLiB0aGVyZSBjYW4ndCBiZSBhIG1peCBvZiBl eHByZXNzaW9ucy4gSWYgdGhpcyBpcwp2aW9sYXRlZCwgdGhlIGNsYXVzZSBt YXkgYmUgcGFzc2VkIHRvIHRoZSBuZXh0IGxldmVsIChqdXN0IGxpa2Ugd2l0 aApsaXN0IG9mIGNsYXVzZXMgbm90IGNvdmVyZWQgYnkgYSBzaW5nbGUgc3Rh dGlzdGljcyksIHdoaWNoIHNwbGl0cyB0aGF0CmludG8gY2xhdXNlcyBoYW5k bGVkIGJ5IG11bHRpdmFyaWF0ZSBzdGF0cyBhbmQgY2xhdXNlcyBoYW5kbGVy IGJ5CnJlZ3VsYXIgc3RhdGlzdGljcy4KCnJld29yayBjbGF1c2VsaXN0X3Nl bGVjdGl2aXR5X29yIHRvIGhhbmRsZSBPUi1jbGF1c2VzIGNvcnJlY3RseQoK V2UgbWlnaHQgaW52ZW50IGEgY29tcGxldGVseSBuZXcgc2V0IG9mIGZ1bmN0 aW9ucyBoZXJlLCByZXNlbWJsaW5nCmNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkg YnV0IGFkYXB0aW5nIHRoZSBpZGVhcyB0byBPUi1jbGF1c2VzLgoKQnV0IGx1 Y2tpbHkgd2Uga25vdyB0aGF0IGVhY2ggT1ItY2xhdXNlCgogICAgKGEgT1Ig YiBPUiBjKQoKbWF5IGJlIHJld3JpdHRlbiBhcyBhbiBlcXVpdmFsZW50IEFO RC1jbGF1c2UgdXNpbmcgbmVnYXRpb246CgogICAgTk9UICgoTk9UIGEpIEFO RCAoTk9UIGIpIEFORCAoTk9UIGMpKQoKQW5kIHRoYXQncyBzb21ldGhpbmcg d2UgY2FuIHBhc3MgdG8gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eS4KLS0tCiBj b250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMgICAgICAgICAgICB8ICAgIDMg Ky0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jICAgIHwg ICAgNiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2Vs LmMgfCAxOTkwICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICB8ICAgMjMg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL29yY2xhdXNlcy5jIHwg ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAg ICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jICAg ICAgICAgICB8ICAgMjAgKwogc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9S RUFETUUuc3RhdHMgfCAgMTY2ICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCAgICAgICAgICAgfCAgICA2ICstCiBzcmMvaW5jbHVkZS91dGls cy9tdnN0YXRzLmggICAgICAgICAgICB8ICAgIDggKwogMTAgZmlsZXMgY2hh bmdlZCwgMTg4NyBpbnNlcnRpb25zKCspLCAzNTYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jIGIvY29u dHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCmluZGV4IGRjMDM1ZDcuLjhmMTFi N2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYwor KysgYi9jb250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMKQEAgLTk2OSw3ICs5 NjksOCBAQCBlc3RpbWF0ZV9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpiYXNlcmVsLAogCQkJCQkJCSAgIGJhc2VyZWwtPmJhc2VyZXN0 cmljdGluZm8sCiAJCQkJCQkJICAgMCwKIAkJCQkJCQkgICBKT0lOX0lOTkVS LAotCQkJCQkJCSAgIE5VTEwpOworCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJ ICAgTklMKTsKIAogCW5yb3dzID0gY2xhbXBfcm93X2VzdChucm93cyk7CiAK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5k ZXggZDc5ZTRjYy4uMmY0YWYyMSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0 Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTQ5OCw3ICs0OTgsOCBAQCBwb3N0 Z3Jlc0dldEZvcmVpZ25SZWxTaXplKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkJCQkJCSBmcGluZm8tPmxvY2FsX2NvbmRzLAogCQkJCQkJCQkJCQkJ CSBiYXNlcmVsLT5yZWxpZCwKIAkJCQkJCQkJCQkJCQkgSk9JTl9JTk5FUiwK LQkJCQkJCQkJCQkJCQkgTlVMTCk7CisJCQkJCQkJCQkJCQkJIE5VTEwsCisJ CQkJCQkJCQkJCQkJIE5JTCk7CiAKIAljb3N0X3F1YWxfZXZhbCgmZnBpbmZv LT5sb2NhbF9jb25kc19jb3N0LCBmcGluZm8tPmxvY2FsX2NvbmRzLCByb290 KTsKIApAQCAtMjE0OSw3ICsyMTUwLDggQEAgZXN0aW1hdGVfcGF0aF9jb3N0 X3NpemUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJICAgbG9jYWxf cGFyYW1fam9pbl9jb25kcywKIAkJCQkJCQkJCQkgICBmb3JlaWducmVsLT5y ZWxpZCwKIAkJCQkJCQkJCQkgICBKT0lOX0lOTkVSLAotCQkJCQkJCQkJCSAg IE5VTEwpOworCQkJCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJCQkJICAgTklM KTsKIAkJbG9jYWxfc2VsICo9IGZwaW5mby0+bG9jYWxfY29uZHNfc2VsOwog CiAJCXJvd3MgPSBjbGFtcF9yb3dfZXN0KHJvd3MgKiBsb2NhbF9zZWwpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY2xhdXNl c2VsLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwu YwppbmRleCAwZGUyNDE4Li5jMWI4OTk5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jbGF1c2VzZWwuYwpAQCAtMjksNiArMjks OCBAQAogI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAjaW5jbHVkZSAi dXRpbHMvdHlwY2FjaGUuaCIKIAorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgor CiAKIC8qCiAgKiBEYXRhIHN0cnVjdHVyZSBmb3IgYWNjdW11bGF0aW5nIGlu Zm8gYWJvdXQgcG9zc2libGUgcmFuZ2UtcXVlcnkKQEAgLTQ0LDYgKzQ2LDEz IEBAIHR5cGVkZWYgc3RydWN0IFJhbmdlUXVlcnlDbGF1c2UKIAlTZWxlY3Rp dml0eSBoaWJvdW5kOwkJLyogU2VsZWN0aXZpdHkgb2YgYSB2YXIgPCBzb21l dGhpbmcgY2xhdXNlICovCiB9IFJhbmdlUXVlcnlDbGF1c2U7CiAKK3N0YXRp YyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5X29yKFBsYW5u ZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkgTGlzdCAqY2xhdXNlcywKKwkJ CQkJCQkJCQkJIGludCB2YXJSZWxpZCwKKwkJCQkJCQkJCQkJIEpvaW5UeXBl IGpvaW50eXBlLAorCQkJCQkJCQkJCQkgU3BlY2lhbEpvaW5JbmZvICpzamlu Zm8sCisJCQkJCQkJCQkJCSBMaXN0ICpjb25kaXRpb25zKTsKKwogc3RhdGlj IHZvaWQgYWRkUmFuZ2VDbGF1c2UoUmFuZ2VRdWVyeUNsYXVzZSAqKnJxbGlz dCwgTm9kZSAqY2xhdXNlLAogCQkJICAgYm9vbCB2YXJvbmxlZnQsIGJvb2wg aXNMVHNlbCwgU2VsZWN0aXZpdHkgczIpOwogCkBAIC02MCwyMyArNjksMjUg QEAgc3RhdGljIGludCBjb3VudF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMs IEluZGV4IHJlbGlkLCBpbnQgdHlwZSk7CiAKIHN0YXRpYyBpbnQgY291bnRf dmFybm9zKExpc3QgKmNsYXVzZXMsIEluZGV4ICpyZWxpZCk7CiAKK3N0YXRp YyBMaXN0ICpjbGF1c2VzX21hdGNoaW5nX3N0YXRpc3RpYyhMaXN0ICoqY2xh dXNlcywgTVZTdGF0aXN0aWNJbmZvICpzdGF0aXN0aWMsCisJCQkJCQkgICBJ bmRleCByZWxpZCwgaW50IHR5cGVzLCBib29sIHJlbW92ZSk7CisKIHN0YXRp YyBMaXN0ICpjbGF1c2VsaXN0X2FwcGx5X2RlcGVuZGVuY2llcyhQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqY2xhdXNlcywKIAkJCQkJCQkJCUluZGV4IHJl bGlkLCBMaXN0ICpzdGF0cyk7CiAKLXN0YXRpYyBNVlN0YXRpc3RpY0luZm8g KmNob29zZV9tdl9zdGF0aXN0aWNzKExpc3QgKm12c3RhdHMsIEJpdG1hcHNl dCAqYXR0bnVtcyk7Ci0KLXN0YXRpYyBMaXN0ICpjbGF1c2VsaXN0X212X3Nw bGl0KFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCwKLQkJCQkJCQkJ IExpc3QgKmNsYXVzZXMsIExpc3QgKiptdmNsYXVzZXMsCi0JCQkJCQkJCSBN VlN0YXRpc3RpY0luZm8gKm12c3RhdHMsIGludCB0eXBlcyk7Ci0KIHN0YXRp YyBTZWxlY3Rpdml0eSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5u ZXJJbmZvICpyb290LAotCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywgTVZTdGF0 aXN0aWNJbmZvICptdnN0YXRzKTsKKwkJCQkJCQkJCU1WU3RhdGlzdGljSW5m byAqbXZzdGF0cywgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkJCUxpc3QgKmNv bmRpdGlvbnMsIGJvb2wgaXNfb3IpOwogCiBzdGF0aWMgU2VsZWN0aXZpdHkg Y2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3ZsaXN0KFBsYW5uZXJJbmZv ICpyb290LAotCQkJCQkJCQkJTGlzdCAqY2xhdXNlcywgTVZTdGF0aXN0aWNJ bmZvICptdnN0YXRzLAotCQkJCQkJCQkJYm9vbCAqZnVsbG1hdGNoLCBTZWxl Y3Rpdml0eSAqbG93c2VsKTsKKwkJCQkJCQkJCU1WU3RhdGlzdGljSW5mbyAq bXZzdGF0cywKKwkJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIExpc3QgKmNvbmRp dGlvbnMsCisJCQkJCQkJCQlib29sIGlzX29yLCBib29sICpmdWxsbWF0Y2gs CisJCQkJCQkJCQlTZWxlY3Rpdml0eSAqbG93c2VsKTsKIHN0YXRpYyBTZWxl Y3Rpdml0eSBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQ bGFubmVySW5mbyAqcm9vdCwKLQkJCQkJCQkJCUxpc3QgKmNsYXVzZXMsIE1W U3RhdGlzdGljSW5mbyAqbXZzdGF0cyk7CisJCQkJCQkJCQlNVlN0YXRpc3Rp Y0luZm8gKm12c3RhdHMsCisJCQkJCQkJCQlMaXN0ICpjbGF1c2VzLCBMaXN0 ICpjb25kaXRpb25zLAorCQkJCQkJCQkJYm9vbCBpc19vcik7CiAKIHN0YXRp YyBpbnQgdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KFBsYW5uZXJJbmZv ICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQkJaW50MnZlY3RvciAq c3Rha2V5cywgTUNWTGlzdCBtY3ZsaXN0LApAQCAtOTAsMTAgKzEwMSwzMyBA QCBzdGF0aWMgaW50IHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKFBs YW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogCQkJCQkJCQkJaW50 IG5tYXRjaGVzLCBjaGFyICogbWF0Y2hlcywKIAkJCQkJCQkJCWJvb2wgaXNf b3IpOwogCisvKgorICogRGVzY3JpYmVzIGEgY29tYmluYXRpb24gb2YgbXVs dGlwbGUgc3RhdGlzdGljcyB0byBjb3ZlciBhdHRyaWJ1dGVzCisgKiByZWZl cmVuY2VkIGJ5IHRoZSBjbGF1c2VzLiBUaGUgYXJyYXkgJ3N0YXRzJyAod2l0 aCBuc3RhdHMgZWxlbWVudHMpCisgKiBsaXN0cyBhdHRyaWJ1dGVzIChpbiB0 aGUgb3JkZXIgYXMgdGhleSBhcmUgYXBwbGllZCksIGFuZCBudW1iZXIgb2YK KyAqIGNsYXVzZSBhdHRyaWJ1dGVzIGNvdmVyZWQgYnkgdGhpcyBzb2x1dGlv bi4KKyAqCisgKiBjaG9vc2VfbXZfc3RhdGlzdGljc19leGhhdXN0aXZlKCkg dXNlcyB0aGlzIHRvIHRyYWNrIGJvdGggdGhlIGN1cnJlbnQKKyAqIGFuZCB0 aGUgYmVzdCBzb2x1dGlvbnMsIHdoaWxlIHdhbGtpbmcgdGhyb3VnaCB0aGUg c3RhdGUgb2YgcG9zc2libGUKKyAqIGNvbWJpbmF0aW9uLgorICovCit0eXBl ZGVmIHN0cnVjdCBtdl9zb2x1dGlvbl90IHsKKwlpbnQJCW5jbGF1c2VzOwkJ LyogbnVtYmVyIG9mIGNsYXVzZXMgY292ZXJlZCAqLworCWludAkJbmNvbmRp dGlvbnM7CS8qIG51bWJlciBvZiBjb25kaXRpb25zIGNvdmVyZWQgKi8KKwlp bnQJCW5zdGF0czsJCQkvKiBudW1iZXIgb2Ygc3RhdHMgYXBwbGllZCAqLwor CWludAkgICAqc3RhdHM7CQkJLyogc3RhdHMgKGluIHRoZSBhcHBseSBvcmRl cikgKi8KK30gbXZfc29sdXRpb25fdDsKKworc3RhdGljIExpc3QgKmNob29z ZV9tdl9zdGF0aXN0aWNzKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxp ZCwKKwkJCQkJCQlMaXN0ICptdnN0YXRzLCBMaXN0ICpjbGF1c2VzLCBMaXN0 ICpjb25kaXRpb25zKTsKKwogc3RhdGljIGJvb2wgaGFzX3N0YXRzKExpc3Qg KnN0YXRzLCBpbnQgdHlwZSk7CiAKIHN0YXRpYyBMaXN0ICogZmluZF9zdGF0 cyhQbGFubmVySW5mbyAqcm9vdCwgSW5kZXggcmVsaWQpOwogCitzdGF0aWMg Ym9vbCBzdGF0c190eXBlX21hdGNoZXMoTVZTdGF0aXN0aWNJbmZvICpzdGF0 LCBpbnQgdHlwZSk7CisKK2ludCBtdnN0YXRfc2VhcmNoX3R5cGUgPSBNVlNU QVRfU0VBUkNIX0dSRUVEWTsKIAogLyogdXNlZCBmb3IgbWVyZ2luZyBiaXRt YXBzIC0gQU5EIChtaW4pLCBPUiAobWF4KSAqLwogI2RlZmluZSBNQVgoeCwg eSkgKCgoeCkgPiAoeSkpID8gKHgpIDogKHkpKQpAQCAtMTY4LDE0ICsyMDIs MTUgQEAgY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJICAgTGlzdCAqY2xhdXNlcywKIAkJCQkJICAgaW50IHZhclJl bGlkLAogCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwKLQkJCQkJICAgU3Bl Y2lhbEpvaW5JbmZvICpzamluZm8pCisJCQkJCSAgIFNwZWNpYWxKb2luSW5m byAqc2ppbmZvLAorCQkJCQkgICBMaXN0ICpjb25kaXRpb25zKQogewogCVNl bGVjdGl2aXR5IHMxID0gMS4wOwogCVJhbmdlUXVlcnlDbGF1c2UgKnJxbGlz dCA9IE5VTEw7CiAJTGlzdENlbGwgICAqbDsKIAogCS8qIHByb2Nlc3Npbmcg bXYgc3RhdHMgKi8KLQlPaWQJCQlyZWxpZCA9IEludmFsaWRPaWQ7CisJSW5k ZXgJCXJlbGlkID0gSW52YWxpZE9pZDsKIAogCS8qIGxpc3Qgb2YgbXVsdGl2 YXJpYXRlIHN0YXRzIG9uIHRoZSByZWxhdGlvbiAqLwogCUxpc3QJICAgKnN0 YXRzID0gTklMOwpAQCAtMTkxLDEyICsyMjYsMTMgQEAgY2xhdXNlbGlzdF9z ZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJc3RhdHMgPSBmaW5k X3N0YXRzKHJvb3QsIHJlbGlkKTsKIAogCS8qCi0JICogSWYgdGhlcmUncyBl eGFjdGx5IG9uZSBjbGF1c2UsIHRoZW4gbm8gdXNlIGluIHRyeWluZyB0byBt YXRjaCB1cCBwYWlycywKLQkgKiBzbyBqdXN0IGdvIGRpcmVjdGx5IHRvIGNs YXVzZV9zZWxlY3Rpdml0eSgpLgorCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBv bmUgY2xhdXNlLCB0aGVuIG5vIHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAK KwkgKiBwYWlycywgb3IgbWF0Y2hpbmcgbXVsdGl2YXJpYXRlIHN0YXRpc3Rp Y3MsIHNvIGp1c3QgZ28gZGlyZWN0bHkKKwkgKiB0byBjbGF1c2Vfc2VsZWN0 aXZpdHkoKS4KIAkgKi8KIAlpZiAobGlzdF9sZW5ndGgoY2xhdXNlcykgPT0g MSkKIAkJcmV0dXJuIGNsYXVzZV9zZWxlY3Rpdml0eShyb290LCAoTm9kZSAq KSBsaW5pdGlhbChjbGF1c2VzKSwKLQkJCQkJCQkJICB2YXJSZWxpZCwgam9p bnR5cGUsIHNqaW5mbyk7CisJCQkJCQkJCSAgdmFyUmVsaWQsIGpvaW50eXBl LCBzamluZm8sIGNvbmRpdGlvbnMpOwogCiAJLyoKIAkgKiBBcHBseSBmdW5j dGlvbmFsIGRlcGVuZGVuY2llcywgYnV0IGZpcnN0IGNoZWNrIHRoYXQgdGhl cmUgYXJlIHNvbWUgc3RhdHMKQEAgLTIyOCwzMSArMjY0LDk2IEBAIGNsYXVz ZWxpc3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8gKnJvb3QsCiAJCShjb3Vu dF9tdl9hdHRudW1zKGNsYXVzZXMsIHJlbGlkLAogCQkJCQkJICBNVl9DTEFV U0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9ISVNUKSA+PSAyKSkKIAl7 Ci0JCS8qIGNvbGxlY3QgYXR0cmlidXRlcyBmcm9tIHRoZSBjb21wYXRpYmxl IGNvbmRpdGlvbnMgKi8KLQkJQml0bWFwc2V0ICptdmF0dG51bXMgPSBjb2xs ZWN0X212X2F0dG51bXMoY2xhdXNlcywgcmVsaWQsCi0JCQkJCQkJCQkJCU1W X0NMQVVTRV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBFX0hJU1QpOworCQlM aXN0Q2VsbCAqczsKKworCQkvKgorCQkgKiBDb3B5IHRoZSBjb25kaXRpb25z IHdlIGdvdCBmcm9tIHRoZSB1cHBlciBwYXJ0IG9mIHRoZSBleHByZXNzaW9u IHRyZWUKKwkJICogc28gdGhhdCB3ZSBjYW4gYWRkIGxvY2FsIGNvbmRpdGlv bnMgdG8gaXQgKHdlIG5lZWQgdG8ga2VlcCB0aGUKKwkJICogb3JpZ2luYWwg bGlzdCBpbnRhY3QsIGZvciBzaWJsaW5nIGV4cHJlc3Npb25zIC0gb3RoZXIg ZXhwcmVzc2lvbnMKKwkJICogYXQgdGhlIHNhbWUgbGV2ZWwpLgorCQkgKi8K KwkJTGlzdCAqY29uZGl0aW9uc19sb2NhbCA9IGxpc3RfY29weShjb25kaXRp b25zKTsKIAotCQkvKiBhbmQgc2VhcmNoIGZvciB0aGUgc3RhdGlzdGljIGNv dmVyaW5nIHRoZSBtb3N0IGF0dHJpYnV0ZXMgKi8KLQkJTVZTdGF0aXN0aWNJ bmZvICptdnN0YXQgPSBjaG9vc2VfbXZfc3RhdGlzdGljcyhzdGF0cywgbXZh dHRudW1zKTsKKwkJLyogZmluZCB0aGUgYmVzdCBjb21iaW5hdGlvbiBvZiBz dGF0aXN0aWNzICovCisJCUxpc3QgKnNvbHV0aW9uID0gY2hvb3NlX212X3N0 YXRpc3RpY3Mocm9vdCwgcmVsaWQsIHN0YXRzLAorCQkJCQkJCQkJCQkgIGNs YXVzZXMsIGNvbmRpdGlvbnMpOwogCi0JCWlmIChtdnN0YXQgIT0gTlVMTCkJ Lyogd2UgaGF2ZSBhIG1hdGNoaW5nIHN0YXRzICovCisJCS8qCisJCSAqIFdl IGhhdmUgYSBnb29kIHNvbHV0aW9uLCB3aGljaCBpcyBtZXJlbHkgYSBsaXN0 IG9mIHN0YXRpc3RpY3MgdGhhdAorCQkgKiB3ZSBuZWVkIHRvIGFwcGx5LiBX ZSdsbCBhcHBseSB0aGUgc3RhdGlzdGljcyBvbmUgYnkgb25lIChpbiB0aGUg b3JkZXIKKwkJICogYXMgdGhleSBhcHBlYXIgaW4gdGhlIGxpc3QpLCBhbmQg Zm9yIGVhY2ggc3RhdGlzdGljIHdlJ2xsCisJCSAqCisJCSAqICgxKSBmaW5k IGNsYXVzZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBzdGF0aXN0aWMgKGFuZCBy ZW1vdmUgdGhlbQorCQkgKiAgICAgZnJvbSB0aGUgbGlzdCkKKwkJICoKKwkJ ICogKDIpIGZpbmQgbG9jYWwgY29uZGl0aW9ucyBjb21wYXRpYmxlIHdpdGgg dGhlIHN0YXRpc3RpYworCQkgKgorCQkgKiAoMykgZG8gdGhlIGVzdGltYXRp b24gUChjbGF1c2VzIHwgY29uZGl0aW9ucykKKwkJICoKKwkJICogKDQpIGFw cGVuZCB0aGUgZXN0aW1hdGVkIGNsYXVzZXMgdG8gbG9jYWwgY29uZGl0aW9u cworCQkgKgorCQkgKiBjb250aW51b3VzbHkgbW9kaWZ5IAorCQkgKi8KKwkJ Zm9yZWFjaCAocywgc29sdXRpb24pCiAJCXsKLQkJCS8qIGNsYXVzZXMgY29t cGF0aWJsZSB3aXRoIG11bHRpLXZhcmlhdGUgc3RhdHMgKi8KLQkJCUxpc3QJ Km12Y2xhdXNlcyA9IE5JTDsKKwkJCU1WU3RhdGlzdGljSW5mbyAqbXZzdGF0 ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChzKTsKIAotCQkJLyogc3Bs aXQgdGhlIGNsYXVzZWxpc3QgaW50byByZWd1bGFyIGFuZCBtdi1jbGF1c2Vz ICovCi0JCQljbGF1c2VzID0gY2xhdXNlbGlzdF9tdl9zcGxpdChyb290LCBy ZWxpZCwgY2xhdXNlcywgJm12Y2xhdXNlcywKLQkJCQkJCQkJCQkgIG12c3Rh dCwgTVZfQ0xBVVNFX1RZUEVfTUNWIHwgTVZfQ0xBVVNFX1RZUEVfSElTVCk7 CisJCQkvKiBjbGF1c2VzIGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhdGlzdGlj IHdlJ3JlIGFwcGx5aW5nIHJpZ2h0IG5vdyAqLworCQkJTGlzdAkqc3RhdF9j bGF1c2VzID0gTklMOworCQkJTGlzdAkqc3RhdF9jb25kaXRpb25zID0gTklM OwogCi0JCQkvKiB3ZSd2ZSBjaG9zZW4gdGhlIGhpc3RvZ3JhbSB0byBtYXRj aCB0aGUgY2xhdXNlcyAqLwotCQkJQXNzZXJ0KG12Y2xhdXNlcyAhPSBOSUwp OworCQkJLyoKKwkJCSAqIEZpbmQgY2xhdXNlcyBhbmQgY29uZGl0aW9ucyBt YXRjaGluZyB0aGUgc3RhdGlzdGljIC0gdGhlIGNsYXVzZXMKKwkJCSAqIG5l ZWQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCB3aGlsZSBjb25kaXRp b25zIHNob3VsZCByZW1haW4KKwkJCSAqIHRoZXJlIChzbyB0aGF0IHdlIGNh biBhcHBseSB0aGVtIHJlcGVhdGVkbHkpLgorCQkJICovCisJCQlzdGF0X2Ns YXVzZXMKKwkJCQk9IGNsYXVzZXNfbWF0Y2hpbmdfc3RhdGlzdGljKCZjbGF1 c2VzLCBtdnN0YXQsIHJlbGlkLAorCQkJCQkJCQkJCQkgTVZfQ0xBVVNFX1RZ UEVfTUNWIHwgTVZfQ0xBVVNFX1RZUEVfSElTVCwKKwkJCQkJCQkJCQkJIHRy dWUpOworCisJCQlzdGF0X2NvbmRpdGlvbnMKKwkJCQk9IGNsYXVzZXNfbWF0 Y2hpbmdfc3RhdGlzdGljKCZjb25kaXRpb25zX2xvY2FsLCBtdnN0YXQsIHJl bGlkLAorCQkJCQkJCQkJCQkgTVZfQ0xBVVNFX1RZUEVfTUNWIHwgTVZfQ0xB VVNFX1RZUEVfSElTVCwKKwkJCQkJCQkJCQkJIGZhbHNlKTsKKworCQkJLyoK KwkJCSAqIElmIHdlIGdvdCBubyBjbGF1c2VzIHRvIGVzdGltYXRlLCB3ZSd2 ZSBkb25lIHNvbWV0aGluZyB3cm9uZywKKwkJCSAqIGVpdGhlciBkdXJpbmcg dGhlIG9wdGltaXphdGlvbiwgZGV0ZWN0aW5nIGNvbXBhdGlibGUgY2xhdXNl LCBvcgorCQkJICogc29tZXdoZXJlIGVsc2UuCisJCQkgKgorCQkJICogQWxz bywgd2UgbmVlZCBhdCBsZWFzdCB0d28gYXR0cmlidXRlcyBpbiBjbGF1c2Vz IGFuZCBjb25kaXRpb25zLgorCQkJICovCisJCQlBc3NlcnQoc3RhdF9jbGF1 c2VzICE9IE5JTCk7CisJCQlBc3NlcnQoY291bnRfbXZfYXR0bnVtcyhsaXN0 X3VuaW9uKHN0YXRfY2xhdXNlcywgc3RhdF9jb25kaXRpb25zKSwKKwkJCQkJ CQkJcmVsaWQsIE1WX0NMQVVTRV9UWVBFX01DViB8IE1WX0NMQVVTRV9UWVBF X0hJU1QpID49IDIpOwogCiAJCQkvKiBjb21wdXRlIHRoZSBtdWx0aXZhcmlh dGUgc3RhdHMgKi8KLQkJCXMxICo9IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZp dHkocm9vdCwgbXZjbGF1c2VzLCBtdnN0YXQpOworCQkJczEgKj0gY2xhdXNl bGlzdF9tdl9zZWxlY3Rpdml0eShyb290LCBtdnN0YXQsCisJCQkJCQkJCQkJ CXN0YXRfY2xhdXNlcywgc3RhdF9jb25kaXRpb25zLAorCQkJCQkJCQkJCQlm YWxzZSk7IC8qIEFORCAqLworCisJCQkvKgorCQkJICogQWRkIHRoZSBuZXcg Y2xhdXNlcyB0byB0aGUgbG9jYWwgY29uZGl0aW9ucywgc28gdGhhdCB3ZSBj YW4gdXNlCisJCQkgKiB0aGVtIGZvciB0aGUgc3Vic2VxdWVudCBzdGF0aXN0 aWNzLiBXZSBvbmx5IGFkZCB0aGUgY2xhdXNlcywKKwkJCSAqIGJlY2F1c2Ug dGhlIGNvbmRpdGlvbnMgYXJlIGFscmVhZHkgdGhlcmUgKG9yIHNob3VsZCBi ZSkuCisJCQkgKi8KKwkJCWNvbmRpdGlvbnNfbG9jYWwgPSBsaXN0X2NvbmNh dChjb25kaXRpb25zX2xvY2FsLCBzdGF0X2NsYXVzZXMpOwogCQl9CisKKwkJ LyogZnJvbSBub3cgb24sIHdvcmsgb25seSB3aXRoIHRoZSAnbG9jYWwnIGxp c3Qgb2YgY29uZGl0aW9ucyAqLworCQljb25kaXRpb25zID0gY29uZGl0aW9u c19sb2NhbDsKIAl9CiAKIAkvKgorCSAqIElmIHRoZXJlJ3MgZXhhY3RseSBv bmUgY2xhdXNlLCB0aGVuIG5vIHVzZSBpbiB0cnlpbmcgdG8gbWF0Y2ggdXAK KwkgKiBwYWlycywgc28ganVzdCBnbyBkaXJlY3RseSB0byBjbGF1c2Vfc2Vs ZWN0aXZpdHkoKS4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoY2xhdXNlcykg PT0gMSkKKwkJcmV0dXJuIHMxICogY2xhdXNlX3NlbGVjdGl2aXR5KHJvb3Qs IChOb2RlICopIGxpbml0aWFsKGNsYXVzZXMpLAorCQkJCQkJCQkJICAgdmFy UmVsaWQsIGpvaW50eXBlLCBzamluZm8sIGNvbmRpdGlvbnMpOworCisJLyoK IAkgKiBJbml0aWFsIHNjYW4gb3ZlciBjbGF1c2VzLiAgQW55dGhpbmcgdGhh dCBkb2Vzbid0IGxvb2sgbGlrZSBhIHBvdGVudGlhbAogCSAqIHJhbmdlcXVl cnkgY2xhdXNlIGdldHMgbXVsdGlwbGllZCBpbnRvIHMxIGFuZCBmb3Jnb3R0 ZW4uIEFueXRoaW5nIHRoYXQKIAkgKiBkb2VzIGdldHMgaW5zZXJ0ZWQgaW50 byBhbiBycWxpc3QgZW50cnkuCkBAIC0yNjQsNyArMzY1LDggQEAgY2xhdXNl bGlzdF9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIAkJU2VsZWN0 aXZpdHkgczI7CiAKIAkJLyogQWx3YXlzIGNvbXB1dGUgdGhlIHNlbGVjdGl2 aXR5IHVzaW5nIGNsYXVzZV9zZWxlY3Rpdml0eSAqLwotCQlzMiA9IGNsYXVz ZV9zZWxlY3Rpdml0eShyb290LCBjbGF1c2UsIHZhclJlbGlkLCBqb2ludHlw ZSwgc2ppbmZvKTsKKwkJczIgPSBjbGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwg Y2xhdXNlLCB2YXJSZWxpZCwgam9pbnR5cGUsIHNqaW5mbywKKwkJCQkJCQkJ Y29uZGl0aW9ucyk7CiAKIAkJLyoKIAkJICogQ2hlY2sgZm9yIGJlaW5nIHBh c3NlZCBhIFJlc3RyaWN0SW5mby4KQEAgLTQyMyw2ICs1MjUsNTUgQEAgY2xh dXNlbGlzdF9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9vdCwKIH0KIAog LyoKKyAqIFNpbWlsYXIgdG8gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eSgpLCBi dXQgZm9yIE9SLWNsYXVzZXMuIFdlIGNhbid0IHNpbXBseSB1c2UKKyAqIHRo ZSBzYW1lIG11bHRpLXN0YXRpc3RpYyBlc3RpbWF0aW9uIGxvZ2ljIGZvciBB TkQtY2xhdXNlcywgYXQgbGVhc3Qgbm90CisgKiBkaXJlY3RseSwgYmVjYXVz ZSB0aGVyZSBhcmUgYSBmZXcga2V5IGRpZmZlcmVuY2VzOgorICoKKyAqICAg LSBmdW5jdGlvbmFsIGRlcGVuZGVuY2llcyBkb24ndCByZWFsbHkgYXBwbHkg dG8gT1ItY2xhdXNlcworICoKKyAqICAgLSBjbGF1c2VsaXN0X3NlbGVjdGl2 aXR5KCkgaXMgYmFzZWQgb24gZGVjb21wb3NpbmcgdGhlIHNlbGVjdGl2aXR5 IGludG8KKyAqICAgICBhIHNlcXVlbmNlIG9mIGNvbmRpdGlvbmFsIHByb2Jh YmlsaXRpZXMgKHNlbGVjdGl2aXRpZXMpLCBidXQgdGhhdCBjYW4KKyAqICAg ICBiZSBkb25lIG9ubHkgZm9yIEFORC1jbGF1c2VzCisgKgorICogV2UgbWln aHQgaW52ZW50IGEgc2ltaWxhciBpbmZyYXN0cnVjdHVyZSBmb3Igb3B0aW1p emluZyBPUi1jbGF1c2VzLCBkb2luZworICogc29tZXRoaW5nIHNpbWlsYXIg dG8gd2hhdCBjbGF1c2Vfc2VsZWN0aXZpdHkgZG9lcyBmb3IgQU5ELWNsYXVz ZXMsIGJ1dAorICogbHVja2lseSB3ZSBrbm93IHRoYXQgZWFjaCBkaXNqdW5j dGl2ZSBub3JtYWwgZm9ybSAoYWthIE9SLWNsYXVzZSkKKyAqCisgKiAgICAg KGEgT1IgYiBPUiBjKQorICoKKyAqIG1heSBiZSByZXdyaXR0ZW4gYXMgYW4g ZXF1aXZhbGVudCBjb25qdW5jdGl2ZSBub3JtYWwgZm9ybSAoYWthIEFORC1j bGF1c2UpCisgKiBieSB1c2luZyBuZWdhdGlvbjoKKyAqCisgKiAgICAgTk9U ICgoTk9UIGEpIEFORCAoTk9UIGIpIEFORCAoTk9UIGMpKQorICoKKyAqIEFu ZCB0aGF0J3Mgc29tZXRoaW5nIHdlIGNhbiBwYXNzIHRvIGNsYXVzZWxpc3Rf c2VsZWN0aXZpdHkgYW5kIGxldCBpdCBkbworICogYWxsIHRoZSBoZWF2eSBs aWZ0aW5nLgorICovCitzdGF0aWMgU2VsZWN0aXZpdHkKK2NsYXVzZWxpc3Rf c2VsZWN0aXZpdHlfb3IoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSAgIExp c3QgKmNsYXVzZXMsCisJCQkJCSAgIGludCB2YXJSZWxpZCwKKwkJCQkJICAg Sm9pblR5cGUgam9pbnR5cGUsCisJCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAq c2ppbmZvLAorCQkJCQkgICBMaXN0ICpjb25kaXRpb25zKQoreworCUxpc3QJ ICAgKmFyZ3MgPSBOSUw7CisJTGlzdENlbGwgICAqbDsKKwlFeHByCSAgICpl eHByOworCisJLyogYnVpbGQgYXJndW1lbnRzIGZvciB0aGUgQU5ELWNsYXVz ZSBieSBuZWdhdGluZyBhcmdzIG9mIHRoZSBPUi1jbGF1c2UgKi8KKwlmb3Jl YWNoIChsLCBjbGF1c2VzKQorCQlhcmdzID0gbGFwcGVuZChhcmdzLCBtYWtl Qm9vbEV4cHIoTk9UX0VYUFIsIGxpc3RfbWFrZTEobGZpcnN0KGwpKSwgLTEp KTsKKworCS8qIGFuZCB0aGVuIHRoZSBhY3R1YWwgT1ItY2xhdXNlIG9uIHRo ZSBuZWdhdGVkIGFyZ3MgKi8KKwlleHByID0gbWFrZUJvb2xFeHByKEFORF9F WFBSLCBhcmdzLCAtMSk7CisKKwkvKiBpbnN0ZWFkIG9mIGNvbnN0cnVjdGlu ZyBOT1QgZXhwcmVzc2lvbiwganVzdCBkbyAoMS4wIC0gcykgKi8KKwlyZXR1 cm4gMS4wIC0gY2xhdXNlbGlzdF9zZWxlY3Rpdml0eShyb290LCBsaXN0X21h a2UxKGV4cHIpLCB2YXJSZWxpZCwKKwkJCQkJCQkJCQlqb2ludHlwZSwgc2pp bmZvLCBjb25kaXRpb25zKTsKK30KKworLyoKICAqIGFkZFJhbmdlQ2xhdXNl IC0tLSBhZGQgYSBuZXcgcmFuZ2UgY2xhdXNlIGZvciBjbGF1c2VsaXN0X3Nl bGVjdGl2aXR5CiAgKgogICogSGVyZSBpcyB3aGVyZSB3ZSB0cnkgdG8gbWF0 Y2ggdXAgcGFpcnMgb2YgcmFuZ2UtcXVlcnkgY2xhdXNlcwpAQCAtNjI5LDcg Kzc4MCw4IEBAIGNsYXVzZV9zZWxlY3Rpdml0eShQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkgICBOb2RlICpjbGF1c2UsCiAJCQkJICAgaW50IHZhclJlbGlk LAogCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAotCQkJCSAgIFNwZWNpYWxK b2luSW5mbyAqc2ppbmZvKQorCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2pp bmZvLAorCQkJCSAgIExpc3QgKmNvbmRpdGlvbnMpCiB7CiAJU2VsZWN0aXZp dHkgczEgPSAwLjU7CQkvKiBkZWZhdWx0IGZvciBhbnkgdW5oYW5kbGVkIGNs YXVzZSB0eXBlICovCiAJUmVzdHJpY3RJbmZvICpyaW5mbyA9IE5VTEw7CkBA IC03NDksNyArOTAxLDggQEAgY2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkgIChOb2RlICopIGdldF9ub3RjbGF1c2Vh cmcoKEV4cHIgKikgY2xhdXNlKSwKIAkJCQkJCQkJCSAgdmFyUmVsaWQsCiAJ CQkJCQkJCQkgIGpvaW50eXBlLAotCQkJCQkJCQkJICBzamluZm8pOworCQkJ CQkJCQkJICBzamluZm8sCisJCQkJCQkJCQkgIGNvbmRpdGlvbnMpOwogCX0K IAllbHNlIGlmIChhbmRfY2xhdXNlKGNsYXVzZSkpCiAJewpAQCAtNzU4LDI5 ICs5MTEsMTggQEAgY2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkJKChCb29sRXhwciAqKSBjbGF1c2UpLT5hcmdzLAog CQkJCQkJCQkJdmFyUmVsaWQsCiAJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJ CQkJCXNqaW5mbyk7CisJCQkJCQkJCQlzamluZm8sCisJCQkJCQkJCQljb25k aXRpb25zKTsKIAl9CiAJZWxzZSBpZiAob3JfY2xhdXNlKGNsYXVzZSkpCiAJ ewotCQkvKgotCQkgKiBTZWxlY3Rpdml0aWVzIGZvciBhbiBPUiBjbGF1c2Ug YXJlIGNvbXB1dGVkIGFzIHMxK3MyIC0gczEqczIgdG8KLQkJICogYWNjb3Vu dCBmb3IgdGhlIHByb2JhYmxlIG92ZXJsYXAgb2Ygc2VsZWN0ZWQgdHVwbGUg c2V0cy4KLQkJICoKLQkJICogWFhYIGlzIHRoaXMgdG9vIGNvbnNlcnZhdGl2 ZT8KLQkJICovCi0JCUxpc3RDZWxsICAgKmFyZzsKLQotCQlzMSA9IDAuMDsK LQkJZm9yZWFjaChhcmcsICgoQm9vbEV4cHIgKikgY2xhdXNlKS0+YXJncykK LQkJewotCQkJU2VsZWN0aXZpdHkgczIgPSBjbGF1c2Vfc2VsZWN0aXZpdHko cm9vdCwKLQkJCQkJCQkJCQkJCShOb2RlICopIGxmaXJzdChhcmcpLAotCQkJ CQkJCQkJCQkJdmFyUmVsaWQsCi0JCQkJCQkJCQkJCQlqb2ludHlwZSwKLQkJ CQkJCQkJCQkJCXNqaW5mbyk7Ci0KLQkJCXMxID0gczEgKyBzMiAtIHMxICog czI7Ci0JCX0KKwkJLyoganVzdCBjYWxsIHRvIGNsYXVzZWxpc3Rfc2VsZWN0 aXZpdHlfb3IoKSAqLworCQlzMSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHlf b3Iocm9vdCwKKwkJCQkJCQkJCSgoQm9vbEV4cHIgKikgY2xhdXNlKS0+YXJn cywKKwkJCQkJCQkJCXZhclJlbGlkLAorCQkJCQkJCQkJam9pbnR5cGUsCisJ CQkJCQkJCQlzamluZm8sCisJCQkJCQkJCQljb25kaXRpb25zKTsKIAl9CiAJ ZWxzZSBpZiAoaXNfb3BjbGF1c2UoY2xhdXNlKSB8fCBJc0EoY2xhdXNlLCBE aXN0aW5jdEV4cHIpKQogCXsKQEAgLTg3MCw3ICsxMDEyLDggQEAgY2xhdXNl X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkoTm9k ZSAqKSAoKFJlbGFiZWxUeXBlICopIGNsYXVzZSktPmFyZywKIAkJCQkJCQkJ dmFyUmVsaWQsCiAJCQkJCQkJCWpvaW50eXBlLAotCQkJCQkJCQlzamluZm8p OworCQkJCQkJCQlzamluZm8sCisJCQkJCQkJCWNvbmRpdGlvbnMpOwogCX0K IAllbHNlIGlmIChJc0EoY2xhdXNlLCBDb2VyY2VUb0RvbWFpbikpCiAJewpA QCAtODc5LDcgKzEwMjIsOCBAQCBjbGF1c2Vfc2VsZWN0aXZpdHkoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCShOb2RlICopICgoQ29lcmNlVG9Eb21h aW4gKikgY2xhdXNlKS0+YXJnLAogCQkJCQkJCQl2YXJSZWxpZCwKIAkJCQkJ CQkJam9pbnR5cGUsCi0JCQkJCQkJCXNqaW5mbyk7CisJCQkJCQkJCXNqaW5m bywKKwkJCQkJCQkJY29uZGl0aW9ucyk7CiAJfQogCWVsc2UKIAl7CkBAIC05 NDMsMTUgKzEwODcsMTYgQEAgY2xhdXNlX3NlbGVjdGl2aXR5KFBsYW5uZXJJ bmZvICpyb290LAogICogICAgICAgICAgaW4gdGhlIE1DViBsaXN0LCB0aGVu IHRoZSBzZWxlY3Rpdml0eSBpcyBiZWxvdyB0aGUgbG93ZXN0IGZyZXF1ZW5j eQogICogICAgICAgICAgZm91bmQgaW4gdGhlIE1DViBsaXN0LAogICoKLSAq IFRPRE8gV2hlbiBhcHBseWluZyB0aGUgY2xhdXNlcyB0byB0aGUgaGlzdG9n cmFtL01DViBsaXN0LCB3ZSBjYW4gZG8KLSAqICAgICAgdGhhdCBmcm9tIHRo ZSBtb3N0IHNlbGVjdGl2ZSBjbGF1c2VzIGZpcnN0LCBiZWNhdXNlIHRoYXQn bGwKLSAqICAgICAgZWxpbWluYXRlIHRoZSBidWNrZXRzL2l0ZW1zIHNvb25l ciAoc28gd2UnbGwgYmUgYWJsZSB0byBza2lwCi0gKiAgICAgIHRoZW0gd2l0 aG91dCBpbnNwZWN0aW9uLCB3aGljaCBpcyBtb3JlIGV4cGVuc2l2ZSkuIEJ1 dCB0aGlzCi0gKiAgICAgIHJlcXVpcmVzIHJlYWxseSBrbm93aW5nIHRoZSBw ZXItY2xhdXNlIHNlbGVjdGl2aXRpZXMgaW4gYWR2YW5jZSwKLSAqICAgICAg YW5kIHRoYXQncyBub3Qgd2hhdCB3ZSBkbyBub3cuCisgKiBUT0RPIFdoZW4g YXBwbHlpbmcgdGhlIGNsYXVzZXMgdG8gdGhlIGhpc3RvZ3JhbS9NQ1YgbGlz dCwgd2UgY2FuIGRvIHRoYXQgZnJvbQorICogICAgICB0aGUgbW9zdCBzZWxl Y3RpdmUgY2xhdXNlcyBmaXJzdCwgYmVjYXVzZSB0aGF0J2xsIGVsaW1pbmF0 ZSB0aGUKKyAqICAgICAgYnVja2V0cy9pdGVtcyBzb29uZXIgKHNvIHdlJ2xs IGJlIGFibGUgdG8gc2tpcCB0aGVtIHdpdGhvdXQgaW5zcGVjdGlvbiwKKyAq ICAgICAgd2hpY2ggaXMgbW9yZSBleHBlbnNpdmUpLiBCdXQgdGhpcyByZXF1 aXJlcyByZWFsbHkga25vd2luZyB0aGUKKyAqICAgICAgcGVyLWNsYXVzZSBz ZWxlY3Rpdml0aWVzIGluIGFkdmFuY2UsIGFuZCB0aGF0J3Mgbm90IHdoYXQg d2UgZG8gbm93LgorICoKICAqLwogc3RhdGljIFNlbGVjdGl2aXR5Ci1jbGF1 c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LCBMaXN0 ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMpCitjbGF1c2Vs aXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJbmZvICpyb290LCBNVlN0YXRp c3RpY0luZm8gKm12c3RhdHMsCisJCQkJCQkgIExpc3QgKmNsYXVzZXMsIExp c3QgKmNvbmRpdGlvbnMsIGJvb2wgaXNfb3IpCiB7CiAJYm9vbCBmdWxsbWF0 Y2ggPSBmYWxzZTsKIAlTZWxlY3Rpdml0eSBzMSA9IDAuMCwgczIgPSAwLjA7 CkBAIC05NjksNyArMTExNCw4IEBAIGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZp dHkoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsIE1WU3RhdGlz dGljSW5mbyAqbXZzCiAJICovCiAKIAkvKiBFdmFsdWF0ZSB0aGUgTUNWIGZp cnN0LiAqLwotCXMxID0gY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9tY3Zs aXN0KHJvb3QsIGNsYXVzZXMsIG12c3RhdHMsCisJczEgPSBjbGF1c2VsaXN0 X212X3NlbGVjdGl2aXR5X21jdmxpc3Qocm9vdCwgbXZzdGF0cywKKwkJCQkJ CQkJCQkgICBjbGF1c2VzLCBjb25kaXRpb25zLCBpc19vciwKIAkJCQkJCQkJ CQkgICAmZnVsbG1hdGNoLCAmbWN2X2xvdyk7CiAKIAkvKgpAQCAtOTgyLDcg KzExMjgsOCBAQCBjbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5KFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpjbGF1c2VzLCBNVlN0YXRpc3RpY0luZm8gKm12 cwogCS8qIFRPRE8gaWYgKGZ1bGxtYXRjaCkgd2l0aG91dCBtYXRjaGluZyBN Q1YgaXRlbSwgdXNlIHRoZSBtY3ZfbG93CiAJICogICAgICBzZWxlY3Rpdml0 eSBhcyB1cHBlciBib3VuZCAqLwogCi0JczIgPSBjbGF1c2VsaXN0X212X3Nl bGVjdGl2aXR5X2hpc3RvZ3JhbShyb290LCBjbGF1c2VzLCBtdnN0YXRzKTsK KwlzMiA9IGNsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKHJv b3QsIG12c3RhdHMsCisJCQkJCQkJCQkJCSBjbGF1c2VzLCBjb25kaXRpb25z LCBpc19vcik7CiAKIAkvKiBUT0RPIGNsYW1wIHRvIDw9IDEuMCAob3IgbW9y ZSBzdHJpY3RseSwgd2hlbiBwb3NzaWJsZSkgKi8KIAlyZXR1cm4gczEgKyBz MjsKQEAgLTEwMTYsMjYwICsxMTYzLDEzMjUgQEAgZ2V0X3ZhcmF0dG5vcyhO b2RlICogbm9kZSwgSW5kZXggcmVsaWQpCiAJCQkJCQkJCSBrICsgRmlyc3RM b3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CiAJfQogCi0JYm1zX2Zy ZWUodmFyYXR0bm9zKTsKKwlibXNfZnJlZSh2YXJhdHRub3MpOworCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENvbGxlY3QgYXR0cmlidXRlcyBm cm9tIG12LWNvbXBhdGlibGUgY2xhdXNlcy4KKyAqLworc3RhdGljIEJpdG1h cHNldCAqCitjb2xsZWN0X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywgSW5k ZXggcmVsaWQsIGludCB0eXBlcykKK3sKKwlCaXRtYXBzZXQgICphdHRudW1z ID0gTlVMTDsKKwlMaXN0Q2VsbCAgICpsOworCisJLyoKKwkgKiBXYWxrIHRo cm91Z2ggdGhlIGNsYXVzZXMgYW5kIGlkZW50aWZ5IHRoZSBvbmVzIHdlIGNh biBlc3RpbWF0ZQorCSAqIHVzaW5nIG11bHRpdmFyaWF0ZSBzdGF0cywgYW5k IHJlbWVtYmVyIHRoZSByZWxpZC9jb2x1bW5zLiBXZSdsbAorCSAqIHRoZW4g Y3Jvc3MtY2hlY2sgaWYgd2UgaGF2ZSBzdWl0YWJsZSBzdGF0cywgYW5kIG9u bHkgaWYgbmVlZGVkCisJICogd2UnbGwgc3BsaXQgdGhlIGNsYXVzZXMgaW50 byBtdWx0aXZhcmlhdGUgYW5kIHJlZ3VsYXIgbGlzdHMuCisJICoKKwkgKiBG b3Igbm93IHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBSZXN0cmljdEluZm8g bm9kZXMgd2l0aCBuZXN0ZWQKKwkgKiBPcEV4cHIsIHVzaW5nIGVpdGhlciBh IHJhbmdlIG9yIGVxdWFsaXR5LgorCSAqLworCWZvcmVhY2ggKGwsIGNsYXVz ZXMpCisJeworCQlOb2RlCSAgICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3Qo bCk7CisKKwkJLyogaWdub3JlIHRoZSByZXN1bHQgaGVyZSAtIHdlIG9ubHkg bmVlZCB0aGUgYXR0bnVtcyAqLworCQljbGF1c2VfaXNfbXZfY29tcGF0aWJs ZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVtcywgdHlwZXMpOworCX0KKworCS8q CisJICogSWYgdGhlcmUgYXJlIG5vdCBhdCBsZWFzdCB0d28gYXR0cmlidXRl cyByZWZlcmVuY2VkIGJ5IHRoZSBjbGF1c2UocyksCisJICogd2UgY2FuIHRo cm93IGV2ZXJ5dGhpbmcgb3V0IChhcyB3ZSdsbCByZXZlcnQgdG8gc2ltcGxl IHN0YXRzKS4KKwkgKi8KKwlpZiAoYm1zX251bV9tZW1iZXJzKGF0dG51bXMp IDw9IDEpCisJeworCQlibXNfZnJlZShhdHRudW1zKTsKKwkJYXR0bnVtcyA9 IE5VTEw7CisJfQorCisJcmV0dXJuIGF0dG51bXM7Cit9CisKKy8qCisgKiBD b3VudCB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gY2xhdXNlcyBjb21w YXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0YXRzLgorICovCitzdGF0aWMg aW50Citjb3VudF9tdl9hdHRudW1zKExpc3QgKmNsYXVzZXMsIEluZGV4IHJl bGlkLCBpbnQgdHlwZSkKK3sKKwlpbnQgYzsKKwlCaXRtYXBzZXQgKmF0dG51 bXMgPSBjb2xsZWN0X212X2F0dG51bXMoY2xhdXNlcywgcmVsaWQsIHR5cGUp OworCisJYyA9IGJtc19udW1fbWVtYmVycyhhdHRudW1zKTsKKworCWJtc19m cmVlKGF0dG51bXMpOworCisJcmV0dXJuIGM7Cit9CisKKy8qCisgKiBDb3Vu dCB2YXJub3MgcmVmZXJlbmNlZCBpbiB0aGUgY2xhdXNlcywgYW5kIGlmIHRo ZXJlJ3MgYSBzaW5nbGUgdmFybm8gdGhlbgorICogcmV0dXJuIHRoZSBpbmRl eCBpbiAncmVsaWQnLgorICovCitzdGF0aWMgaW50Citjb3VudF92YXJub3Mo TGlzdCAqY2xhdXNlcywgSW5kZXggKnJlbGlkKQoreworCWludCBjbnQ7CisJ Qml0bWFwc2V0ICp2YXJub3MgPSBOVUxMOworCisJdmFybm9zID0gcHVsbF92 YXJub3MoKE5vZGUgKikgY2xhdXNlcyk7CisJY250ID0gYm1zX251bV9tZW1i ZXJzKHZhcm5vcyk7CisKKwkvKiBpZiB0aGVyZSdzIGEgc2luZ2xlIHZhcm5v IGluIHRoZSBjbGF1c2VzLCByZW1lbWJlciBpdCAqLworCWlmIChibXNfbnVt X21lbWJlcnModmFybm9zKSA9PSAxKQorCQkqcmVsaWQgPSBibXNfc2luZ2xl dG9uX21lbWJlcih2YXJub3MpOworCisJYm1zX2ZyZWUodmFybm9zKTsKKwor CXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBMaXN0ICoKK2NsYXVzZXNfbWF0 Y2hpbmdfc3RhdGlzdGljKExpc3QgKipjbGF1c2VzLCBNVlN0YXRpc3RpY0lu Zm8gKnN0YXRpc3RpYywKKwkJCQkJCSAgIEluZGV4IHJlbGlkLCBpbnQgdHlw ZXMsIGJvb2wgcmVtb3ZlKQoreworCWludCBpOworCUJpdG1hcHNldCAgKnN0 YXRfYXR0bnVtcyA9IE5VTEw7CisJTGlzdAkgICAqbWF0Y2hpbmdfY2xhdXNl cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qIGJ1aWxkIGF0dG51 bSBiaXRtYXBzZXQgZm9yIHRoaXMgc3RhdGlzdGljcyAqLworCWZvciAoaSA9 IDA7IGkgPCBzdGF0aXN0aWMtPnN0YWtleXMtPmRpbTE7IGkrKykKKwkJc3Rh dF9hdHRudW1zID0gYm1zX2FkZF9tZW1iZXIoc3RhdF9hdHRudW1zLAorCQkJ CQkJCQkJICBzdGF0aXN0aWMtPnN0YWtleXMtPnZhbHVlc1tpXSk7CisKKwkv KgorCSAqIFdlIGNhbid0IHVzZSBmb3JlYWNoIGhlcmUsIGJlY2F1c2Ugd2Ug bWF5IG5lZWQgdG8gcmVtb3ZlIHNvbWUgb2YgdGhlCisJICogY2xhdXNlcyBp ZiAocmVtb3ZlPXRydWUpLgorCSAqLworCWxjID0gbGlzdF9oZWFkKCpjbGF1 c2VzKTsKKwl3aGlsZSAobGMpCisJeworCQlOb2RlICpjbGF1c2UgPSAoTm9k ZSopbGZpcnN0KGxjKTsKKwkJQml0bWFwc2V0ICphdHRudW1zID0gTlVMTDsK KworCQkvKiBtdXN0IGFkdmFuY2UgbGMgYmVmb3JlIGxpc3RfZGVsZXRlIHBv c3NpYmx5IHBmcmVlJ3MgaXQgKi8KKwkJbGMgPSBsbmV4dChsYyk7CisKKwkJ LyoKKwkJICogc2tpcCBjbGF1c2VzIHRoYXQgYXJlIG5vdCBjb21wYXRpYmxl IHdpdGggc3RhdHMgKGp1c3QgbGVhdmUgdGhlbQorCQkgKiBpbiB0aGUgb3Jp Z2luYWwgbGlzdCkKKwkJICoKKwkJICogWFhYIFBlcmhhcHMgdGhpcyBzaG91 bGQgY2hlY2sgd2hhdCBzdGF0cyBhcmUgYWN0dWFsbHkgYXZhaWxhYmxlIGlu CisJCSAqICAgICB0aGUgc3RhdGlzdGljcyAobm90IGEgYmlnIGRlYWwgbm93 LCBiZWNhdXNlIE1DViBhbmQgaGlzdG9ncmFtcworCQkgKiAgICAgaGFuZGxl IHRoZSBzYW1lIHR5cGVzIG9mIGNvbmRpdGlvbnMpLgorCQkgKi8KKwkJaWYg KCEgY2xhdXNlX2lzX212X2NvbXBhdGlibGUoY2xhdXNlLCByZWxpZCwgJmF0 dG51bXMsIHR5cGVzKSkKKwkJeworCQkJYm1zX2ZyZWUoYXR0bnVtcyk7CisJ CQljb250aW51ZTsKKwkJfQorCisJCS8qIGlmIHRoZSBjbGF1c2UgaXMgY292 ZXJlZCBieSB0aGUgc3RhdGlzdGljLCBhZGQgaXQgdG8gdGhlIGxpc3QgKi8K KwkJaWYgKGJtc19pc19zdWJzZXQoYXR0bnVtcywgc3RhdF9hdHRudW1zKSkK KwkJeworCQkJbWF0Y2hpbmdfY2xhdXNlcyA9IGxhcHBlbmQobWF0Y2hpbmdf Y2xhdXNlcywgY2xhdXNlKTsKKworCQkJLyogaWYgcmVtb3ZlPXRydWUsIHJl bW92ZSB0aGUgbWF0Y2hpbmcgaXRlbSBmcm9tIHRoZSBtYWluIGxpc3QgKi8K KwkJCWlmIChyZW1vdmUpCisJCQkJKmNsYXVzZXMgPSBsaXN0X2RlbGV0ZV9w dHIoKmNsYXVzZXMsIGNsYXVzZSk7CisJCX0KKworCQlibXNfZnJlZShhdHRu dW1zKTsKKwl9CisKKwlibXNfZnJlZShzdGF0X2F0dG51bXMpOworCisJcmV0 dXJuIG1hdGNoaW5nX2NsYXVzZXM7Cit9CisKKy8qCisgKiBTZWxlY3RzIHRo ZSBiZXN0IGNvbWJpbmF0aW9uIG9mIG11bHRpdmFyaWF0ZSBzdGF0aXN0aWNz LCBpbiBhbiBleGhhdXN0aXZlCisgKiB3YXksIHdoZXJlICdiZXN0JyBtZWFu czoKKyAqCisgKiAoYSkgY292ZXJpbmcgdGhlIG1vc3QgYXR0cmlidXRlcyAo cmVmZXJlbmNlZCBieSBjbGF1c2VzKQorICogKGIpIHVzaW5nIHRoZSBsZWFz dCBudW1iZXIgb2YgbXVsdGl2YXJpYXRlIHN0YXRzCisgKiAoYykgdXNpbmcg dGhlIG1vc3QgY29uZGl0aW9ucyB0byBleHBsb2l0IGRlcGVuZGVuY3kKKyAq CisgKiBEb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkgYnV0IHRocm91Z2ggY2hv b3NlX212X3N0YXRpc3RpY3MoKSwgd2hpY2ggZG9lcyBzb21lCisgKiBhZGRp dGlvbmFsIHRyaWNrcyB0byBtaW5pbWl6ZSB0aGUgcnVudGltZS4KKyAqCisg KgorICogQWxnb3JpdGhtCisgKiAtLS0tLS0tLS0KKyAqIFRoZSBhbGdvcml0 aG0gaXMgYSByZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmFja3RyYWNr aW5nLCB3aXRoIG1heGltdW0KKyAqIGRlcHRoIGVxdWFsIHRvIHRoZSBudW1i ZXIgb2YgbXVsdGktdmFyaWF0ZSBzdGF0aXN0aWNzIGF2YWlsYWJsZSBvbiB0 aGUgdGFibGUuCisgKiBJdCBhY3R1YWxseSBleHBsb3JlcyBhbGwgdmFsaWQg Y29tYmluYXRpb25zIG9mIHN0YXRzLgorICogCisgKiBXaGVuZXZlciBpdCBj b25zaWRlcnMgYWRkaW5nIHRoZSBuZXh0IHN0YXRpc3RpY3MsIHRoZSBjbGF1 c2VzIGl0IG1hdGNoZXMgYXJlCisgKiBkaXZpZGVkIGludG8gJ2NvbmRpdGlv bnMnIChjbGF1c2VzIGFscmVhZHkgbWF0Y2hlZCBieSBhdCBsZWFzdCBvbmUg cHJldmlvdXMKKyAqIHN0YXRpc3RpY3MpIGFuZCBjbGF1c2VzIHRoYXQgYXJl IGVzdGltYXRlZC4KKyAqCisgKiBUaGVuIHNldmVyYWwgY2hlY2tzIGFyZSBw ZXJmb3JtZWQ6CisgKgorICogIChhKSBUaGUgc3RhdGlzdGljcyBjb3ZlcnMg YXQgbGVhc3QgMiBjb2x1bW5zLCByZWZlcmVuY2VkIGluIHRoZSBlc3RpbWF0 ZWQKKyAqICAgICAgY2xhdXNlcyAob3RoZXJ3aXNlIG11bHRpLXZhcmlhdGUg c3RhdHMgYXJlIHVzZWxlc3MpLgorICoKKyAqICAoYikgVGhlIHN0YXRpc3Rp Y3MgY292ZXJzIGF0IGxlYXN0IDEgbmV3IGNvbHVtbiwgaS5lLiBjb2x1bW4g bm90IHJlZmVmZW5jZWQKKyAqICAgICAgYnkgdGhlIGFscmVhZHkgdXNlZCBz dGF0cyAoYW5kIHRoZSBuZXcgY29sdW1uIGhhcyB0byBiZSByZWZlcmVuY2Vk IGJ5CisgKiAgICAgIHRoZSBjbGF1c2VzLCBvZiBjb3VzZSkuIE90aGVyd2lz ZSB0aGUgc3RhdGlzdGljcyB3b3VsZCBub3QgYWRkIGFueSBuZXcKKyAqICAg ICAgaW5mb3JtYXRpb24uCisgKgorICogVGhlcmUgYXJlIHNvbWUgb3RoZXIg c2FuaXR5IGNoZWNrcyAoZS5nLiBzdGF0cyBtdXN0IG5vdCBiZSB1c2VkIHR3 aWNlIGV0Yy4pLgorICoKKyAqCisgKiBXZWFrbmVzc2VzCisgKiAtLS0tLS0t LS0tCisgKiBUaGUgY3VycmVudCBpbXBsZW1ldGF0aW9uIHVzZXMgYSByYXRo ZXIgc2ltcGxlIG9wdGltYWxpdHkgY3JpdGVyaWEsIHNvIGl0IG1heQorICog bm90IGRvIHRoZSBiZXN0IGNob2ljZSB3aGVuCisgKgorICogKGEpIFRoZXJl IG1heSBiZSBtdWx0aXBsZSBzb2x1dGlvbnMgd2l0aCB0aGUgc2FtZSBudW1i ZXIgb2YgY292ZXJlZAorICogICAgIGF0dHJpYnV0ZXMgYW5kIG51bWJlciBv ZiBzdGF0aXN0aWNzIChlLmcuIHRoZSBzYW1lIHNvbHV0aW9uIGJ1dCB3aXRo CisgKiAgICAgc3RhdGlzdGljcyBpbiBhIGRpZmZlcmVudCBvcmRlcikuIEl0 J3MgdW5jbGVhciB3aGljaCBzb2x1dGlvbiBpbiB0aGUgYmVzdAorICogICAg IG9uZSAtIGluIGEgc2Vuc2UgYWxsIG9mIHRoZW0gYXJlIGVxdWFsLgorICoK KyAqIFRPRE8gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gY29tcHV0ZSBlc3Rp bWF0ZSBmb3IgZWFjaCBvZiB0aG9zZSBzb2x1dGlvbnMsCisgKiAgICAgIGFu ZCB0aGVuIGNvbWJpbmUgdGhlbSB0byBnZXQgdGhlIGZpbmFsIGVzdGltYXRl IChlLmcuIGJ5IHVzaW5nIGF2ZXJhZ2UKKyAqICAgICAgb3IgbWVkaWFuKS4K KyAqCisgKiAoYikgRG9lcyBub3QgY29uc2lkZXIgdGhhdCBzb21lIHR5cGVz IG9mIHN0YXRzIGFyZSBhIGJldHRlciBtYXRjaCBmb3Igc29tZQorICogICAg IHR5cGVzIG9mIGNsYXVzZXMgKGUuZy4gTUNWIGxpc3QgaXMgZ2VuZXJhbGx5 IGEgYmV0dGVyIG1hdGNoIGZvciBlcXVhbGl0eQorICogICAgIGNvbmRpdGlv bnMgdGhhbiBhIGhpc3RvZ3JhbSkuCisgKgorICogICAgIEJ1dCBtYXliZSB0 aGlzIGlzIHBvaW50bGVzcyAtIGdlbmVyYWxseSwgZWFjaCBjb2x1bW4gaXMg ZWl0aGVyIGEgbGFiZWwKKyAqICAgICAoaXQncyBub3QgaW1wb3J0YW50IHdo ZXRoZXIgYmVjYXVzZSBvZiB0aGUgZGF0YSB0eXBlIG9yIGhvdyBpdCdzIHVz ZWQpLAorICogICAgIG9yIGEgdmFsdWUgd2l0aCBvcmRlcmluZyB0aGF0IG1h a2VzIHNlbnNlLiBTbyBlaXRoZXIgYSBNQ1YgbGlzdCBpcyBtb3JlCisgKiAg ICAgYXBwcm9wcmlhdGUgKGxhYmVscykgb3IgYSBoaXN0b2dyYW0gKHZhbHVl cyB3aXRoIG9yZGVyaW5ncykuCisgKgorICogICAgIE5vdyBzdXJlIHdoYXQg dG8gZG8gd2l0aCBzdGF0aXN0aWNzIG9uIGNvbHVtbnMgbWl4aW5nIGJvdGgg dHlwZXMgb2YgZGF0YQorICogICAgIChzb21lIGNvbHVtbnMgd291bGQgd29y ayBiZXN0IHdpdGggTUNWcywgc29tZSB3aXRoIGhpc3RvZ3JhbXMpLiBNYXli ZSB3ZQorICogICAgIGNvdWxkIGludmVudCBhIG5ldyB0eXBlIG9mIHN0YXRp c3RpY3MgY29tYmluaW5nIE1DViBsaXN0IGFuZCBoaXN0b2dyYW0KKyAqICAg ICAoa2VlcGluZyBhIHNtYWxsIGhpc3RvZ3JhbSBmb3IgZWFjaCBNQ1YgaXRl bSwgYW5kIGEgc2VwYXJhdGUgaGlzdG9ncmFtCisgKiAgICAgZm9yIHZhbHVl cyBub3Qgb24gdGhlIE1DViBsaXN0KS4KKyAqCisgKiBUT0RPIFRoZSBhbGdv cml0aG0gc2hvdWxkIHByb2JhYmx5IGNvdW50IG51bWJlciBvZiBWYXJzIChu b3QganVzdCBhdHRudW1zKQorICogICAgICB3aGVuIGNvbXB1dGluZyB0aGUg J3Njb3JlJyBvZiBlYWNoIHNvbHV0aW9uLiBDb21wdXRpbmcgdGhlIHJhdGlv IG9mCisgKiAgICAgIChudW0gb2YgYWxsIHZhcnMpIC8gKG51bSBvZiBjb25k aXRpb24gdmFycykgYXMgYSBtZWFzdXJlIG9mIGhvdyB3ZWxsCisgKiAgICAg IHRoZSBzb2x1dGlvbiB1c2VzIGNvbmRpdGlvbnMgbWlnaHQgYmUgdXNlZnVs LgorICovCitzdGF0aWMgdm9pZAorY2hvb3NlX212X3N0YXRpc3RpY3NfZXho YXVzdGl2ZShQbGFubmVySW5mbyAqcm9vdCwgaW50IHN0ZXAsCisJCQkJCWlu dCBubXZzdGF0cywgTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLCBCaXRtYXBz ZXQgKiogc3RhdHNfYXR0bnVtcywKKwkJCQkJaW50IG5jbGF1c2VzLCBOb2Rl ICoqIGNsYXVzZXMsIEJpdG1hcHNldCAqKiBjbGF1c2VzX2F0dG51bXMsCisJ CQkJCWludCBuY29uZGl0aW9ucywgTm9kZSAqKiBjb25kaXRpb25zLCBCaXRt YXBzZXQgKiogY29uZGl0aW9uc19hdHRudW1zLAorCQkJCQlib29sICpjb3Zl cl9tYXAsIGJvb2wgKmNvbmRpdGlvbl9tYXAsIGludCAqcnVsZWRfb3V0LAor CQkJCQltdl9zb2x1dGlvbl90ICpjdXJyZW50LCBtdl9zb2x1dGlvbl90ICoq YmVzdCkKK3sKKwlpbnQgaSwgajsKKworCUFzc2VydChiZXN0ICE9IE5VTEwp OworCUFzc2VydCgoc3RlcCA9PSAwICYmIGN1cnJlbnQgPT0gTlVMTCkgfHwg KHN0ZXAgPiAwICYmIGN1cnJlbnQgIT0gTlVMTCkpOworCisJLyogdGhpcyBt YXkgcnVuIGZvciBhIGxvbmcgc2ltZSwgc28gbGV0J3MgbWFrZSBpdCBpbnRl cnJ1cHRpYmxlICovCisJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCWlm IChjdXJyZW50ID09IE5VTEwpCisJeworCQljdXJyZW50ID0gKG12X3NvbHV0 aW9uX3QqKXBhbGxvYzAoc2l6ZW9mKG12X3NvbHV0aW9uX3QpKTsKKwkJY3Vy cmVudC0+c3RhdHMgPSAoaW50KilwYWxsb2MwKHNpemVvZihpbnQpKm5tdnN0 YXRzKTsKKwkJY3VycmVudC0+bnN0YXRzID0gMDsKKwkJY3VycmVudC0+bmNs YXVzZXMgPSAwOworCQljdXJyZW50LT5uY29uZGl0aW9ucyA9IDA7CisJfQor CisJLyoKKwkgKiBOb3cgdHJ5IHRvIGFwcGx5IGVhY2ggc3RhdGlzdGljcywg bWF0Y2hpbmcgYXQgbGVhc3QgdHdvIGF0dHJpYnV0ZXMsCisJICogdW5sZXNz IGl0J3MgYWxyZWFkeSB1c2VkIGluIG9uZSBvZiB0aGUgcHJldmlvdXMgc3Rl cHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCisJ eworCQlpbnQgYzsKKworCQlpbnQgbmNvdmVyZWRfY2xhdXNlcyA9IDA7CQkv KiBudW1iZXIgb2YgY292ZXJlZCBjbGF1c2VzICovCisJCWludCBuY292ZXJl ZF9jb25kaXRpb25zID0gMDsJLyogbnVtYmVyIG9mIGNvdmVyZWQgY29uZGl0 aW9ucyAqLworCQlpbnQgbmF0dG51bXMgPSAwOwkJLyogbnVtYmVyIG9mIGNv dmVyZWQgYXR0cmlidXRlcyAqLworCisJCUJpdG1hcHNldCAgKmFsbF9hdHRu dW1zID0gTlVMTDsKKwkJQml0bWFwc2V0ICAqbmV3X2F0dG51bXMgPSBOVUxM OworCisJCS8qIHNraXAgc3RhdGlzdGljcyB0aGF0IHdlcmUgYWxyZWFkeSB1 c2VkIG9yIGVsaW1pbmF0ZWQgKi8KKwkJaWYgKHJ1bGVkX291dFtpXSAhPSAt MSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFNlZSBpZiB3ZSBoYXZl IGNsYXVzZXMgY292ZXJlZCBieSB0aGlzIHN0YXRpc3RpY3MsIGJ1dCBub3QK KwkJICogeWV0IGNvdmVyZWQgYnkgYW55IG9mIHRoZSBwcmVjZWRpbmcgb25j ZXMuCisJCSAqLworCQlmb3IgKGMgPSAwOyBjIDwgbmNsYXVzZXM7IGMrKykK KwkJeworCQkJYm9vbCBjb3ZlcmVkID0gZmFsc2U7CisJCQlCaXRtYXBzZXQg KmNsYXVzZV9hdHRudW1zID0gY2xhdXNlc19hdHRudW1zW2NdOworCQkJQml0 bWFwc2V0ICp0bXAgPSBOVUxMOworCisJCQkvKgorCQkJICogSWYgdGhpcyBj bGF1c2UgaXMgbm90IGNvdmVyZWQgYnkgdGhpcyBzdGF0cywgd2UgY2FuJ3QK KwkJCSAqIHVzZSB0aGUgc3RhdHMgdG8gZXN0aW1hdGUgdGhhdCBhdCBhbGwu CisJCQkgKi8KKwkJCWlmICghIGNvdmVyX21hcFtpICogbmNsYXVzZXMgKyBj XSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIE5vdyB3ZSBrbm93 IHdlJ2xsIHVzZSB0aGlzIGNsYXVzZSAtIGVpdGhlciBhcyBhIGNvbmRpdGlv bgorCQkJICogb3IgYXMgYSBuZXcgY2xhdXNlICh0aGUgZXN0aW1hdGVkIG9u ZSkuIFNvIGxldCdzIGFkZCB0aGUKKwkJCSAqIGF0dHJpYnV0ZXMgdG8gdGhl IGF0dG51bXMgZnJvbSBhbGwgdGhlIGNsYXVzZXMgdXNhYmxlIHdpdGgKKwkJ CSAqIHRoaXMgc3RhdGlzdGljcy4KKwkJCSAqLworCQkJdG1wID0gYm1zX3Vu aW9uKGFsbF9hdHRudW1zLCBjbGF1c2VfYXR0bnVtcyk7CisKKwkJCS8qIGZy ZWUgdGhlIG9sZCBiaXRtYXAgKi8KKwkJCWJtc19mcmVlKGFsbF9hdHRudW1z KTsKKwkJCWFsbF9hdHRudW1zID0gdG1wOworCisJCQkvKiBsZXQncyBzZWUg aWYgaXQncyBjb3ZlcmVkIGJ5IGFueSBvZiB0aGUgcHJldmlvdXMgc3RhdHMg Ki8KKwkJCWZvciAoaiA9IDA7IGogPCBzdGVwOyBqKyspCisJCQl7CisJCQkJ LyogYWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBwcmV2aW91cyBzdGF0cyAqLwor CQkJCWlmIChjb3Zlcl9tYXBbY3VycmVudC0+c3RhdHNbal0gKiBuY2xhdXNl cyArIGNdKQorCQkJCQljb3ZlcmVkID0gdHJ1ZTsKKworCQkJCWlmIChjb3Zl cmVkKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogaWYgYWxyZWFkeSBj b3ZlcmVkLCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGNsYXVzZSAqLworCQkJ aWYgKGNvdmVyZWQpCisJCQl7CisJCQkJbmNvdmVyZWRfY29uZGl0aW9ucyAr PSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICogT0ss IHRoaXMgY2xhdXNlIGlzIGNvdmVyZWQgYnkgdGhpcyBzdGF0aXN0aWNzIChh bmQgbm90IGJ5CisJCQkgKiBhbnkgb2YgdGhlIHByZXZpb3VzIG9uZXMpCisJ CQkgKi8KKwkJCW5jb3ZlcmVkX2NsYXVzZXMgKz0gMTsKKworCQkJLyogYWRk IHRoZSBhdHRudW1zIGludG8gYXR0bnVtcyBmcm9tICduZXcgY2xhdXNlcycg Ki8KKwkJCS8vIG5ld19hdHRudW1zID0gYm1zX3VuaW9uKG5ld19hdHRudW1z LCBjbGF1c2VfYXR0bnVtcyk7CisJCX0KKworCQkvKiBjYW4ndCBoYXZlIG1v cmUgbmV3IGNsYXVzZXMgdGhhbiBvcmlnaW5hbCBjbGF1c2VzICovCisJCUFz c2VydChuY2xhdXNlcyA+PSBuY292ZXJlZF9jbGF1c2VzKTsKKwkJQXNzZXJ0 KG5jb3ZlcmVkX2NsYXVzZXMgPj0gMCk7CS8qIG1vc3RseSBwYXJhbm9pYSAq LworCisJCW5hdHRudW1zID0gYm1zX251bV9tZW1iZXJzKGFsbF9hdHRudW1z KTsKKworCQkvKiBmcmVlIGFsbCB0aGUgYml0bWFwc2V0cyAtIHdlIGRvbid0 IG5lZWQgdGhlbSBhbnltb3JlICovCisJCWJtc19mcmVlKGFsbF9hdHRudW1z KTsKKwkJYm1zX2ZyZWUobmV3X2F0dG51bXMpOworCisJCWFsbF9hdHRudW1z ID0gTlVMTDsKKwkJbmV3X2F0dG51bXMgPSBOVUxMOworCisJCS8qCisJCSAq IFNlZSBpZiB3ZSBoYXZlIGNsYXVzZXMgY292ZXJlZCBieSB0aGlzIHN0YXRp c3RpY3MsIGJ1dCBub3QKKwkJICogeWV0IGNvdmVyZWQgYnkgYW55IG9mIHRo ZSBwcmVjZWRpbmcgb25jZXMuCisJCSAqLworCQlmb3IgKGMgPSAwOyBjIDwg bmNvbmRpdGlvbnM7IGMrKykKKwkJeworCQkJQml0bWFwc2V0ICpjbGF1c2Vf YXR0bnVtcyA9IGNvbmRpdGlvbnNfYXR0bnVtc1tjXTsKKwkJCUJpdG1hcHNl dCAqdG1wID0gTlVMTDsKKworCQkJLyoKKwkJCSAqIElmIHRoaXMgY2xhdXNl IGlzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgc3RhdHMsIHdlIGNhbid0CisJCQkg KiB1c2UgdGhlIHN0YXRzIHRvIGVzdGltYXRlIHRoYXQgYXQgYWxsLgorCQkJ ICovCisJCQlpZiAoISBjb25kaXRpb25fbWFwW2kgKiBuY29uZGl0aW9ucyAr IGNdKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBjb3VudCB0aGlzIGFzIGEg Y29uZGl0aW9uICovCisJCQluY292ZXJlZF9jb25kaXRpb25zICs9IDE7CisK KwkJCS8qCisJCQkgKiBOb3cgd2Uga25vdyB3ZSdsbCB1c2UgdGhpcyBjbGF1 c2UgLSBlaXRoZXIgYXMgYSBjb25kaXRpb24KKwkJCSAqIG9yIGFzIGEgbmV3 IGNsYXVzZSAodGhlIGVzdGltYXRlZCBvbmUpLiBTbyBsZXQncyBhZGQgdGhl CisJCQkgKiBhdHRyaWJ1dGVzIHRvIHRoZSBhdHRudW1zIGZyb20gYWxsIHRo ZSBjbGF1c2VzIHVzYWJsZSB3aXRoCisJCQkgKiB0aGlzIHN0YXRpc3RpY3Mu CisJCQkgKi8KKwkJCXRtcCA9IGJtc191bmlvbihhbGxfYXR0bnVtcywgY2xh dXNlX2F0dG51bXMpOworCisJCQkvKiBmcmVlIHRoZSBvbGQgYml0bWFwICov CisJCQlibXNfZnJlZShhbGxfYXR0bnVtcyk7CisJCQlhbGxfYXR0bnVtcyA9 IHRtcDsKKwkJfQorCisJCS8qCisJCSAqIExldCdzIG1hcmsgdGhlIHN0YXRp c3RpY3MgYXMgJ3J1bGVkIG91dCcgLSBlaXRoZXIgd2UnbGwgdXNlCisJCSAq IGl0IChhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwKSwgb3IgaXQncyBp bmNvbXBhdGlibGUuCisJCSAqLworCQlydWxlZF9vdXRbaV0gPSBzdGVwOwor CisJCS8qCisJCSAqIFRoZXJlIGFyZSBubyBjbGF1c2VzIHVzYWJsZSB3aXRo IHRoaXMgc3RhdGlzdGljcyAobm90IGFscmVhZHkKKwkJICogY292ZXJlZCBi eSBhb21lIG9mIHRoZSBwcmV2aW91cyBzdGF0cykuCisJCSAqCisJCSAqIFNp bWlsYXJseSwgaWYgdGhlIGNsYXVzZXMgb25seSB1c2UgYSBzaW5nbGUgYXR0 cmlidXRlLCB3ZQorCQkgKiBjYW4ndCByZWFsbHkgdXNlIHRoYXQuCisJCSAq LworCQlpZiAoKG5jb3ZlcmVkX2NsYXVzZXMgPT0gMCkgfHwgKG5hdHRudW1z IDwgMikpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUT0RPIE5vdCBz dXJlIGlmIGl0J3MgcG9zc2libGUgdG8gYWRkIGEgY2xhdXNlIHJlZmVyZW5j aW5nCisJCSAqICAgICAgb25seSBhdHRyaWJ1dGVzIGFscmVhZHkgY292ZXJl ZCBieSBwcmV2aW91cyBzdGF0cz8KKwkJICogICAgICBJbnRyb2R1Y2luZyBv bmx5IHNvbWUgbmV3IGRlcGVuZGVuY3ksIG5vdCBhIG5ldworCQkgKiAgICAg IGF0dHJpYnV0ZS4gQ291bGRuJ3QgY29tZSB1cCB3aXRoIGFuIGV4YW1wbGUs IHRob3VnaC4KKwkJICogICAgICBNaWdodCBiZSB3b3J0aCBhZGRpbmcgc29t ZSBhc3NlcnQuCisJCSAqLworCisJCS8qCisJCSAqIGdvdCBhIHN1aXRhYmxl IHN0YXRpc3RpY3MgLSBsZXQncyB1cGRhdGUgdGhlIGN1cnJlbnQgc29sdXRp b24sCisJCSAqIG1heWJlIHVzZSBpdCBhcyB0aGUgYmVzdCBzb2x1dGlvbgor CQkgKi8KKwkJY3VycmVudC0+bmNsYXVzZXMgKz0gbmNvdmVyZWRfY2xhdXNl czsKKwkJY3VycmVudC0+bmNvbmRpdGlvbnMgKz0gbmNvdmVyZWRfY29uZGl0 aW9uczsKKwkJY3VycmVudC0+bnN0YXRzICs9IDE7CisJCWN1cnJlbnQtPnN0 YXRzW3N0ZXBdID0gaTsKKworCQkvKgorCQkgKiBXZSBjYW4gbmV2ZXIgY292 ZXIgbW9yZSBjbGF1c2VzLCBvciB1c2UgbW9yZSBzdGF0cyB0aGF0IHdlCisJ CSAqIGFjdHVhbGx5IGhhdmUgYXQgdGhlIGJlZ2lubmluZy4KKwkJICovCisJ CUFzc2VydChuY2xhdXNlcyA+PSBjdXJyZW50LT5uY2xhdXNlcyk7CisJCUFz c2VydChubXZzdGF0cyA+PSBjdXJyZW50LT5uc3RhdHMpOworCQlBc3NlcnQo c3RlcCA8IG5tdnN0YXRzKTsKKworCQlpZiAoKmJlc3QgPT0gTlVMTCkKKwkJ eworCQkJKmJlc3QgPSAobXZfc29sdXRpb25fdCopcGFsbG9jMChzaXplb2Yo bXZfc29sdXRpb25fdCkpOworCQkJKCpiZXN0KS0+c3RhdHMgPSAoaW50Kilw YWxsb2MwKHNpemVvZihpbnQpKm5tdnN0YXRzKTsKKwkJCSgqYmVzdCktPm5z dGF0cyA9IDA7CisJCQkoKmJlc3QpLT5uY2xhdXNlcyA9IDA7CisJCQkoKmJl c3QpLT5uY29uZGl0aW9ucyA9IDA7CisJCX0KKworCQkvKiBzZWUgaWYgaXQn cyBiZXR0ZXIgdGhhbiB0aGUgY3VycmVudCAnYmVzdCcgc29sdXRpb24gKi8K KwkJaWYgKChjdXJyZW50LT5uY2xhdXNlcyA+ICgqYmVzdCktPm5jbGF1c2Vz KSB8fAorCQkJKChjdXJyZW50LT5uY2xhdXNlcyA9PSAoKmJlc3QpLT5uY2xh dXNlcykgJiYKKwkJCSgoY3VycmVudC0+bnN0YXRzID4gKCpiZXN0KS0+bnN0 YXRzKSkpKQorCQl7CisJCQkoKmJlc3QpLT5uc3RhdHMgPSBjdXJyZW50LT5u c3RhdHM7CisJCQkoKmJlc3QpLT5uY2xhdXNlcyA9IGN1cnJlbnQtPm5jbGF1 c2VzOworCQkJKCpiZXN0KS0+bmNvbmRpdGlvbnMgPSBjdXJyZW50LT5uY29u ZGl0aW9uczsKKwkJCW1lbWNweSgoKmJlc3QpLT5zdGF0cywgY3VycmVudC0+ c3RhdHMsIG5tdnN0YXRzICogc2l6ZW9mKGludCkpOworCQl9CisKKwkJLyoK KwkJICogVGhlIHJlY3Vyc2lvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHdlIGhh dmVuJ3QgY292ZXJlZCBhbGwgdGhlCisJCSAqIGF0dHJpYnV0ZXMgKHRoZW4g YWRkaW5nIHN0YXRzIGlzIG5vdCByZWFsbHkgcG9zc2libGUpLgorCQkgKi8K KwkJaWYgKChzdGVwICsgMSkgPCBubXZzdGF0cykKKwkJCWNob29zZV9tdl9z dGF0aXN0aWNzX2V4aGF1c3RpdmUocm9vdCwgc3RlcCsxLAorCQkJCQkJCQkJ bm12c3RhdHMsIG12c3RhdHMsIHN0YXRzX2F0dG51bXMsCisJCQkJCQkJCQlu Y2xhdXNlcywgY2xhdXNlcywgY2xhdXNlc19hdHRudW1zLAorCQkJCQkJCQkJ bmNvbmRpdGlvbnMsIGNvbmRpdGlvbnMsIGNvbmRpdGlvbnNfYXR0bnVtcywK KwkJCQkJCQkJCWNvdmVyX21hcCwgY29uZGl0aW9uX21hcCwgcnVsZWRfb3V0 LAorCQkJCQkJCQkJY3VycmVudCwgYmVzdCk7CisKKwkJLyogcmVzZXQgdGhl IGxhc3Qgc3RlcCAqLworCQljdXJyZW50LT5uY2xhdXNlcyAtPSBuY292ZXJl ZF9jbGF1c2VzOworCQljdXJyZW50LT5uY29uZGl0aW9ucyAtPSBuY292ZXJl ZF9jb25kaXRpb25zOworCQljdXJyZW50LT5uc3RhdHMgLT0gMTsKKwkJY3Vy cmVudC0+c3RhdHNbc3RlcF0gPSAwOworCisJCS8qIG1hcmsgdGhlIHN0YXRp c3RpY3MgYXMgdXNhYmxlIGFnYWluICovCisJCXJ1bGVkX291dFtpXSA9IC0x OworCisJCUFzc2VydChjdXJyZW50LT5uY2xhdXNlcyA+PSAwKTsKKwkJQXNz ZXJ0KGN1cnJlbnQtPm5zdGF0cyA+PSAwKTsKKwl9CisKKwkvKiByZXNldCBh bGwgc3RhdGlzdGljcyBhcyAnaW5jb21wYXRpYmxlJyBpbiB0aGlzIHN0ZXAg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykKKwkJaWYgKHJ1 bGVkX291dFtpXSA9PSBzdGVwKQorCQkJcnVsZWRfb3V0W2ldID0gLTE7CisK K30KKworLyoKKyAqIEdyZWVkeSBzZWFyY2ggZm9yIGEgbXVsdGl2YXJpYXRl IHNvbHV0aW9uIC0gYSBzZXF1ZW5jZSBvZiBzdGF0aXN0aWNzIGNvdmVyaW5n CisgKiB0aGUgY2xhdXNlcy4gVGhpcyBjaG9vc2VzIHRoZSAiYmVzdCIgc3Rh dGlzdGljcyBhdCBlYWNoIHN0ZXAsIHNvIHRoZQorICogcmVzdWx0aW5nIHNv bHV0aW9uIG1heSBub3QgYmUgdGhlIGJlc3Qgc29sdXRpb24gZ2xvYmFsbHks IGJ1dCB0aGlzIHByb2R1Y2VzCisgKiB0aGUgc29sdXRpb24gaW4gb25seSBO IHN0ZXBzICh3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2Ygc3RhdGlzdGljcyks IHdoaWxlCisgKiB0aGUgZXhoYXVzdGl2ZSBhcHByb2FjaCBtYXkgaGF2ZSB0 byB3YWxrIHRocm91Z2ggfk4hIGNvbWJpbmF0aW9ucyAoYWx0aG91Z2gKKyAq IHNvbWUgb2YgdGhvc2UgYXJlIHRlcm1pbmF0ZWQgZWFybHkpLgorICoKKyAq IFNlZSB0aGUgY29tbWVudHMgYXQgY2hvb3NlX212X3N0YXRpc3RpY3NfZXho YXVzdGl2ZSgpIGFzIHRoaXMgZG9lcyB0aGUgc2FtZQorICogdGhpbmcgKGJ1 dCBpbiBhIGRpZmZlcmVudCB3YXkpLgorICoKKyAqIERvbid0IGNhbGwgdGhp cyBkaXJlY3RseSwgYnV0IHRocm91Z2ggY2hvb3NlX212X3N0YXRpc3RpY3Mo KS4KKyAqCisgKiBUT0RPIFRoZXJlIGFyZSBwcm9iYWJseSBvdGhlciBtZXRy aWNzIHdlIG1pZ2h0IHVzZSAtIGUuZy4gdXNpbmcgbnVtYmVyIG9mCisgKiAg ICAgIGNvbHVtbnMgKG51bV9jb25kX2NvbHVtbnMgLyBudW1fY292X2NvbHVt bnMpLCB3aGljaCBtaWdodCB3b3JrIGJldHRlcgorICogICAgICB3aXRoIGEg bWl4IG9mIHNpbXBsZSBhbmQgY29tcGxleCBjbGF1c2VzLgorICoKKyAqIFRP RE8gQWxzbyB0aGUgY2hvaWNlIGF0IHRoZSB2ZXJ5IGZpcnN0IHN0ZXAgc2hv dWxkIGJlIGhhbmRsZWQgaW4gYSBzcGVjaWFsCisgKiAgICAgIHdheSwgYmVj YXVzZSB0aGVyZSB3aWxsIGJlIDAgY29uZGl0aW9ucyBhdCB0aGF0IG1vbWVu dCwgc28gdGhlcmUgbmVlZHMKKyAqICAgICAgdG8gYmUgc29tZSBvdGhlciBj cml0ZXJpYSAtIGUuZy4gdXNpbmcgdGhlIHNpbXBsZXN0IChvciBtb3N0IGNv bXBsZXg/KQorICogICAgICBjbGF1c2UgbWlnaHQgYmUgYSBnb29kIGlkZWEu CisgKgorICogVE9ETyBXZSBtaWdodCBhbHNvIHNlbGVjdCBtdWx0aXBsZSBz dGF0cyB1c2luZyBkaWZmZXJlbnQgY3JpdGVyaWEsIGFuZCBicmFuY2gKKyAq ICAgICAgdGhlIHNlYXJjaC4gVGhpcyBpcyBob3dldmVyIHRyaWNreSwgYmVj YXVzZSBpZiB3ZSBjaG9vc2UgayBzdGF0aXN0aWNzIGF0CisgKiAgICAgIGVh Y2ggc3RlcCwgd2UgZ2V0IGteTiBicmFuY2hlcyB0byB3YWxrIHRocm91Z2gg KHdpdGggTiBzdGVwcykuIFRoYXQncworICogICAgICBub3QgcmVhbGx5IGdv b2Qgd2l0aCBsYXJnZSBudW1iZXIgb2Ygc3RhdHMgKHlldCBiZXR0ZXIgdGhh biBleGhhdXN0aXZlCisgKiAgICAgIHNlYXJjaCkuCisgKi8KK3N0YXRpYyB2 b2lkCitjaG9vc2VfbXZfc3RhdGlzdGljc19ncmVlZHkoUGxhbm5lckluZm8g KnJvb3QsIGludCBzdGVwLAorCQkJCQlpbnQgbm12c3RhdHMsIE1WU3RhdGlz dGljSW5mbyAqbXZzdGF0cywgQml0bWFwc2V0ICoqIHN0YXRzX2F0dG51bXMs CisJCQkJCWludCBuY2xhdXNlcywgTm9kZSAqKiBjbGF1c2VzLCBCaXRtYXBz ZXQgKiogY2xhdXNlc19hdHRudW1zLAorCQkJCQlpbnQgbmNvbmRpdGlvbnMs IE5vZGUgKiogY29uZGl0aW9ucywgQml0bWFwc2V0ICoqIGNvbmRpdGlvbnNf YXR0bnVtcywKKwkJCQkJYm9vbCAqY292ZXJfbWFwLCBib29sICpjb25kaXRp b25fbWFwLCBpbnQgKnJ1bGVkX291dCwKKwkJCQkJbXZfc29sdXRpb25fdCAq Y3VycmVudCwgbXZfc29sdXRpb25fdCAqKmJlc3QpCit7CisJaW50IGksIGo7 CisJaW50IGJlc3Rfc3RhdCA9IC0xOworCWRvdWJsZSBnYWluLCBtYXhfZ2Fp biA9IC0xLjA7CisKKwkvKgorCSAqIEJpdG1hcCB0cmFja2luZyB3aGljaCBj bGF1c2VzIGFyZSBhbHJlYWR5IGNvdmVyZWQgKGJ5IHRoZSBwcmV2aW91cwor CSAqIHN0YXRpc3RpY3MpIGFuZCBtYXkgdGh1cyBzZXJ2ZSBvbmx5IGFzIGEg Y29uZGl0aW9uIGluIHRoaXMgc3RlcC4KKwkgKi8KKwlib29sICpjb3ZlcmVk X2NsYXVzZXMgPSAoYm9vbCopcGFsbG9jMChuY2xhdXNlcyk7CisKKwkvKgor CSAqIE51bWJlciBvZiBjbGF1c2VzIGFuZCBjb2x1bW5zIGNvdmVyZWQgYnkg ZWFjaCBzdGF0aXN0aWNzIC0gdGhpcworCSAqIGluY2x1ZGVzIGJvdGggY29u ZGl0aW9ucyBhbmQgY2xhdXNlcyBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNz IGZvcgorCSAqIHRoZSBmaXJzdCB0aW1lLiBUaGUgbnVtYmVyIG9mIGNvbHVt bnMgbWF5IGNvdW50IHNvbWUgY29sdW1ucworCSAqIHJlcGVhdGVkbHkgLSBp ZiBhIGNvbHVtbiBpcyBzaGFyZWQgYnkgbXVsdGlwbGUgY2xhdXNlcywgaXQg d2lsbAorCSAqIGJlIGNvdW50ZWQgb25jZSBmb3IgZWFjaCBjbGF1c2UgKGNv dmVyZWQgYnkgdGhlIHN0YXRpc3RpY3MpLgorCSAqIFNvIHdpdGggdHdvIGNs YXVzZXMgWyhhPTEgT1IgYj0yKSwoYTwyIE9SIGM+MSldIHRoZSBjb2x1bW4g ImEiCisJICogd2lsbCBiZSBjb3VudGVkIHR3aWNlIChpZiBib3RoIGNsYXVz ZXMgYXJlIGNvdmVyZWQpLgorCSAqCisJICogVGhlIHZhbHVlcyBmb3IgcmVk dWRlZCBzdGF0aXN0aWNzICh0aGF0IGNhbid0IGJlIGFwcGxpZWQpIGFyZQor CSAqIG5vdCBjb21wdXRlZCwgYmVjYXVzZSB0aGF0J2QgYmUgcG9pbnRsZXNz LgorCSAqLworCWludAkqbnVtX2Nvdl9jbGF1c2VzCT0gKGludCopcGFsbG9j MChzaXplb2YoaW50KSAqIG5tdnN0YXRzKTsKKwlpbnQJKm51bV9jb3ZfY29s dW1ucwk9IChpbnQqKXBhbGxvYzAoc2l6ZW9mKGludCkgKiBubXZzdGF0cyk7 CisKKwkvKgorCSAqIFNhbWUgYXMgYWJvdmUsIGJ1dCB0aGlzIG9ubHkgaW5j bHVkZXMgY2xhdXNlcyB0aGF0IGFyZSBhbHJlYWR5CisJICogY292ZXJlZCBi eSB0aGUgcHJldmlvdXMgc3RhdHMgKGFuZCB0aGUgY3VycmVudCBvbmUpLgor CSAqLworCWludAkqbnVtX2NvbmRfY2xhdXNlcwk9IChpbnQqKXBhbGxvYzAo c2l6ZW9mKGludCkgKiBubXZzdGF0cyk7CisJaW50CSpudW1fY29uZF9jb2x1 bW5zCT0gKGludCopcGFsbG9jMChzaXplb2YoaW50KSAqIG5tdnN0YXRzKTsK KworCS8qCisJICogTnVtYmVyIG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2ggY2xh dXNlLgorCSAqCisJICogVE9ETyBNaWdodCBiZSBjb21wdXRlZCBpbiBjaG9v c2VfbXZfc3RhdGlzdGljcygpIGFuZCB0aGVuIHBhc3NlZAorCSAqICAgICAg aGVyZSwgYnV0IHRoZW4gdGhlIGZ1bmN0aW9uIHdvdWxkIG5vdCBoYXZlIHRo ZSBzYW1lIHNpZ25hdHVyZQorCSAqICAgICAgYXMgX2V4aGF1c3RpdmUoKS4K KwkgKi8KKwlpbnQgKmF0dG51bV9jb3VudHMgPSAoaW50KilwYWxsb2MwKHNp emVvZihpbnQpICogbmNsYXVzZXMpOworCWludCAqYXR0bnVtX2NvbmRfY291 bnRzID0gKGludCopcGFsbG9jMChzaXplb2YoaW50KSAqIG5jb25kaXRpb25z KTsKKworCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwlBc3NlcnQoYmVz dCAhPSBOVUxMKTsKKwlBc3NlcnQoKHN0ZXAgPT0gMCAmJiBjdXJyZW50ID09 IE5VTEwpIHx8IChzdGVwID4gMCAmJiBjdXJyZW50ICE9IE5VTEwpKTsKKwor CS8qIGNvbXB1dGUgYXR0cmlidXRlcyAoY29sdW1ucykgZm9yIGVhY2ggY2xh dXNlICovCisJZm9yIChpID0gMDsgaSA8IG5jbGF1c2VzOyBpKyspCisJCWF0 dG51bV9jb3VudHNbaV0gPSBibXNfbnVtX21lbWJlcnMoY2xhdXNlc19hdHRu dW1zW2ldKTsKKworCS8qIGNvbXB1dGUgYXR0cmlidXRlcyAoY29sdW1ucykg Zm9yIGVhY2ggY29uZGl0aW9uICovCisJZm9yIChpID0gMDsgaSA8IG5jb25k aXRpb25zOyBpKyspCisJCWF0dG51bV9jb25kX2NvdW50c1tpXSA9IGJtc19u dW1fbWVtYmVycyhjb25kaXRpb25zX2F0dG51bXNbaV0pOworCisJLyogc2Vl IHdoaWNoIGNsYXVzZXMgYXJlIGFscmVhZHkgY292ZXJlZCBhdCB0aGlzIHBv aW50IChieSBwcmV2aW91cyBzdGF0cykgKi8KKwlmb3IgKGkgPSAwOyBpIDwg c3RlcDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbmNsYXVzZXM7IGorKykK KwkJCWNvdmVyZWRfY2xhdXNlc1tqXSB8PSAoY292ZXJfbWFwW2N1cnJlbnQt PnN0YXRzW2ldICogbmNsYXVzZXMgKyBqXSk7CisKKwkvKiB3aGljaCByZW1h aW5pbmcgc3RhdGlzdGljcyBjb3ZlcnMgbW9zdCBjbGF1c2VzIC8gdXNlcyBt b3N0IGNvbmRpdGlvbnM/ICovCisJZm9yIChpID0gMDsgaSA8IG5tdnN0YXRz OyBpKyspCisJeworCQlCaXRtYXBzZXQgKmF0dG51bXNfY292ZXJlZCA9IE5V TEw7CisJCUJpdG1hcHNldCAqYXR0bnVtc19jb25kaXRpb25zID0gTlVMTDsK KworCQkvKiBza2lwIHN0YXRzIHRoYXQgYXJlIGFscmVhZHkgcnVsZWQgb3V0 IChlaXRoZXIgdXNlZCBvciBpbmFwcGxpY2FibGUpICovCisJCWlmIChydWxl ZF9vdXRbaV0gIT0gLTEpCisJCQljb250aW51ZTsKKworCQkvKiBjb3VudCBj b3ZlcmVkIGNsYXVzZXMgYW5kIGNvbmRpdGlvbnMgKGZvciB0aGUgc3RhdGlz dGljcykgKi8KKwkJZm9yIChqID0gMDsgaiA8IG5jbGF1c2VzOyBqKyspCisJ CXsKKwkJCWlmIChjb3Zlcl9tYXBbaSAqIG5jbGF1c2VzICsgal0pCisJCQl7 CisJCQkJQml0bWFwc2V0ICphdHRudW1zX25ldworCQkJCQk9IGJtc191bmlv bihhdHRudW1zX2NvdmVyZWQsIGNsYXVzZXNfYXR0bnVtc1tqXSk7CisKKwkJ CQkvKiBnZXQgcmlkIG9mIHRoZSBvbGQgYml0bWFwIGFuZCBrZWVwIHRoZSB1 bmlmaWVkIHJlc3VsdCAqLworCQkJCWJtc19mcmVlKGF0dG51bXNfY292ZXJl ZCk7CisJCQkJYXR0bnVtc19jb3ZlcmVkID0gYXR0bnVtc19uZXc7CisKKwkJ CQludW1fY292X2NsYXVzZXNbaV0gKz0gMTsKKwkJCQludW1fY292X2NvbHVt bnNbaV0gKz0gYXR0bnVtX2NvdW50c1tqXTsKKworCQkJCS8qIGlzIHRoZSBj bGF1c2UgYWxyZWFkeSBjb3ZlcmVkIChpLmUuIGEgY29uZGl0aW9uKT8gKi8K KwkJCQlpZiAoY292ZXJlZF9jbGF1c2VzW2pdKQorCQkJCXsKKwkJCQkJbnVt X2NvbmRfY2xhdXNlc1tpXSArPSAxOworCQkJCQludW1fY29uZF9jb2x1bW5z W2ldICs9IGF0dG51bV9jb3VudHNbal07CisJCQkJCWF0dG51bXNfbmV3ID0g Ym1zX3VuaW9uKGF0dG51bXNfY29uZGl0aW9ucywKKwkJCQkJCQkJCQkJY2xh dXNlc19hdHRudW1zW2pdKTsKKworCQkJCQlibXNfZnJlZShhdHRudW1zX2Nv bmRpdGlvbnMpOworCQkJCQlhdHRudW1zX2NvbmRpdGlvbnMgPSBhdHRudW1z X25ldzsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBpZiBhbGwgY292ZXJl ZCBjbGF1c2VzIGFyZSBjb3ZlcmVkIGJ5IHByZXYgc3RhdHMgKHRodXMgY29u ZGl0aW9ucykgKi8KKwkJaWYgKG51bV9jb3ZfY2xhdXNlc1tpXSA9PSBudW1f Y29uZF9jbGF1c2VzW2ldKQorCQkJcnVsZWRfb3V0W2ldID0gc3RlcDsKKwor CQkvKiBzYW1lIGlmIHRoZXJlIGFyZSBubyBuZXcgYXR0cmlidXRlcyAqLwor CQllbHNlIGlmIChibXNfbnVtX21lbWJlcnMoYXR0bnVtc19jb25kaXRpb25z KSA9PSBibXNfbnVtX21lbWJlcnMoYXR0bnVtc19jb3ZlcmVkKSkKKwkJCXJ1 bGVkX291dFtpXSA9IHN0ZXA7CisKKwkJYm1zX2ZyZWUoYXR0bnVtc19jb3Zl cmVkKTsKKwkJYm1zX2ZyZWUoYXR0bnVtc19jb25kaXRpb25zKTsKKworCQkv KiBpZiB0aGUgc3RhdGlzdGljcyBpcyBpbmFwcGxpY2FibGUsIHRyeSB0aGUg bmV4dCBvbmUgKi8KKwkJaWYgKHJ1bGVkX291dFtpXSAhPSAtMSkKKwkJCWNv bnRpbnVlOworCisJCS8qIG5vdyBsZXQncyB3YWxrIHRocm91Z2ggY29uZGl0 aW9ucyBhbmQgY291bnQgdGhlIGNvdmVyZWQgKi8KKwkJZm9yIChqID0gMDsg aiA8IG5jb25kaXRpb25zOyBqKyspCisJCXsKKwkJCWlmIChjb25kaXRpb25f bWFwW2kgKiBuY29uZGl0aW9ucyArIGpdKQorCQkJeworCQkJCW51bV9jb25k X2NsYXVzZXNbaV0gKz0gMTsKKwkJCQludW1fY29uZF9jb2x1bW5zW2ldICs9 IGF0dG51bV9jb25kX2NvdW50c1tqXTsKKwkJCX0KKwkJfQorCisJCS8qIG90 aGVyd2lzZSBzZWUgaWYgdGhpcyBpbXByb3ZlcyB0aGUgaW50ZXJlc3Rpbmcg bWV0cmljcyAqLworCQlnYWluID0gbnVtX2NvbmRfY29sdW1uc1tpXSAvIChk b3VibGUpbnVtX2Nvdl9jb2x1bW5zW2ldOworCisJCWlmIChnYWluID4gbWF4 X2dhaW4pCisJCXsKKwkJCW1heF9nYWluID0gZ2FpbjsKKwkJCWJlc3Rfc3Rh dCA9IGk7CisJCX0KKwl9CisKKwkvKgorCSAqIEhhdmUgd2UgZm91bmQgYSBz dWl0YWJsZSBzdGF0aXN0aWNzPyBBZGQgaXQgdG8gdGhlIHNvbHV0aW9uIGFu ZAorCSAqIHRyeSBuZXh0IHN0ZXAuCisJICovCisJaWYgKGJlc3Rfc3RhdCAh PSAtMSkKKwl7CisJCS8qIG1hcmsgdGhlIHN0YXRpc3RpY3MsIHNvIHRoYXQg d2Ugc2tpcCBpdCBpbiBuZXh0IHN0ZXBzICovCisJCXJ1bGVkX291dFtiZXN0 X3N0YXRdID0gc3RlcDsKKworCQkvKiBhbGxvY2F0ZSBjdXJyZW50IHNvbHV0 aW9uIGlmIG5lY2Vzc2FyeSAqLworCQlpZiAoY3VycmVudCA9PSBOVUxMKQor CQl7CisJCQljdXJyZW50ID0gKG12X3NvbHV0aW9uX3QqKXBhbGxvYzAoc2l6 ZW9mKG12X3NvbHV0aW9uX3QpKTsKKwkJCWN1cnJlbnQtPnN0YXRzID0gKGlu dCopcGFsbG9jMChzaXplb2YoaW50KSpubXZzdGF0cyk7CisJCQljdXJyZW50 LT5uc3RhdHMgPSAwOworCQkJY3VycmVudC0+bmNsYXVzZXMgPSAwOworCQkJ Y3VycmVudC0+bmNvbmRpdGlvbnMgPSAwOworCQl9CisKKwkJY3VycmVudC0+ bmNsYXVzZXMgKz0gbnVtX2Nvdl9jbGF1c2VzW2Jlc3Rfc3RhdF07CisJCWN1 cnJlbnQtPm5jb25kaXRpb25zICs9IG51bV9jb25kX2NsYXVzZXNbYmVzdF9z dGF0XTsKKwkJY3VycmVudC0+c3RhdHNbc3RlcF0gPSBiZXN0X3N0YXQ7CisJ CWN1cnJlbnQtPm5zdGF0cysrOworCisJCWlmICgqYmVzdCA9PSBOVUxMKQor CQl7CisJCQkoKmJlc3QpID0gKG12X3NvbHV0aW9uX3QqKXBhbGxvYzAoc2l6 ZW9mKG12X3NvbHV0aW9uX3QpKTsKKwkJCSgqYmVzdCktPm5zdGF0cyA9IGN1 cnJlbnQtPm5zdGF0czsKKwkJCSgqYmVzdCktPm5jbGF1c2VzID0gY3VycmVu dC0+bmNsYXVzZXM7CisJCQkoKmJlc3QpLT5uY29uZGl0aW9ucyA9IGN1cnJl bnQtPm5jb25kaXRpb25zOworCisJCQkoKmJlc3QpLT5zdGF0cyA9IChpbnQq KXBhbGxvYzAoc2l6ZW9mKGludCkqbm12c3RhdHMpOworCQkJbWVtY3B5KCgq YmVzdCktPnN0YXRzLCBjdXJyZW50LT5zdGF0cywgbm12c3RhdHMgKiBzaXpl b2YoaW50KSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBzZWUgaWYgdGhp cyBpcyBhIGJldHRlciBzb2x1dGlvbiAqLworCQkJZG91YmxlIGN1cnJlbnRf Z2FpbiA9IChkb3VibGUpY3VycmVudC0+bmNvbmRpdGlvbnMgLyBjdXJyZW50 LT5uY2xhdXNlczsKKwkJCWRvdWJsZSBiZXN0X2dhaW4gICAgPSAoZG91Ymxl KSgqYmVzdCktPm5jb25kaXRpb25zIC8gKCpiZXN0KS0+bmNsYXVzZXM7CisK KwkJCWlmICgoY3VycmVudF9nYWluID4gYmVzdF9nYWluKSB8fAorCQkJCSgo Y3VycmVudF9nYWluID09IGJlc3RfZ2FpbikgJiYgKGN1cnJlbnQtPm5zdGF0 cyA8ICgqYmVzdCktPm5zdGF0cykpKQorCQkJeworCQkJCSgqYmVzdCktPm5z dGF0cyA9IGN1cnJlbnQtPm5zdGF0czsKKwkJCQkoKmJlc3QpLT5uY2xhdXNl cyA9IGN1cnJlbnQtPm5jbGF1c2VzOworCQkJCSgqYmVzdCktPm5jb25kaXRp b25zID0gY3VycmVudC0+bmNvbmRpdGlvbnM7CisJCQkJbWVtY3B5KCgqYmVz dCktPnN0YXRzLCBjdXJyZW50LT5zdGF0cywgbm12c3RhdHMgKiBzaXplb2Yo aW50KSk7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBUaGUgcmVjdXJzaW9u IG9ubHkgbWFrZXMgc2Vuc2UgaWYgd2UgaGF2ZW4ndCBjb3ZlcmVkIGFsbCB0 aGUKKwkJICogYXR0cmlidXRlcyAodGhlbiBhZGRpbmcgc3RhdHMgaXMgbm90 IHJlYWxseSBwb3NzaWJsZSkuCisJCSovCisJCWlmICgoc3RlcCArIDEpIDwg bm12c3RhdHMpCisJCQljaG9vc2VfbXZfc3RhdGlzdGljc19ncmVlZHkocm9v dCwgc3RlcCsxLAorCQkJCQkJCQkJbm12c3RhdHMsIG12c3RhdHMsIHN0YXRz X2F0dG51bXMsCisJCQkJCQkJCQluY2xhdXNlcywgY2xhdXNlcywgY2xhdXNl c19hdHRudW1zLAorCQkJCQkJCQkJbmNvbmRpdGlvbnMsIGNvbmRpdGlvbnMs IGNvbmRpdGlvbnNfYXR0bnVtcywKKwkJCQkJCQkJCWNvdmVyX21hcCwgY29u ZGl0aW9uX21hcCwgcnVsZWRfb3V0LAorCQkJCQkJCQkJY3VycmVudCwgYmVz dCk7CisKKwkJLyogcmVzZXQgdGhlIGxhc3Qgc3RlcCAqLworCQljdXJyZW50 LT5uY2xhdXNlcyAtPSBudW1fY292X2NsYXVzZXNbYmVzdF9zdGF0XTsKKwkJ Y3VycmVudC0+bmNvbmRpdGlvbnMgLT0gbnVtX2NvbmRfY2xhdXNlc1tiZXN0 X3N0YXRdOworCQljdXJyZW50LT5uc3RhdHMgLT0gMTsKKwkJY3VycmVudC0+ c3RhdHNbc3RlcF0gPSAwOworCisJCS8qIG1hcmsgdGhlIHN0YXRpc3RpY3Mg YXMgdXNhYmxlIGFnYWluICovCisJCXJ1bGVkX291dFtiZXN0X3N0YXRdID0g LTE7CisJfQorCisJLyogcmVzZXQgYWxsIHN0YXRpc3RpY3MgZWxpbWluYXRl ZCBpbiB0aGlzIHN0ZXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7 IGkrKykKKwkJaWYgKHJ1bGVkX291dFtpXSA9PSBzdGVwKQorCQkJcnVsZWRf b3V0W2ldID0gLTE7CisKKwkvKiBmcmVlIGV2ZXJ5dGhpbmcgYWxsb2NhdGVk IGluIHRoaXMgc3RlcCAqLworCXBmcmVlKGNvdmVyZWRfY2xhdXNlcyk7CisJ cGZyZWUoYXR0bnVtX2NvdW50cyk7CisJcGZyZWUobnVtX2Nvdl9jbGF1c2Vz KTsKKwlwZnJlZShudW1fY292X2NvbHVtbnMpOworCXBmcmVlKG51bV9jb25k X2NsYXVzZXMpOworCXBmcmVlKG51bV9jb25kX2NvbHVtbnMpOworfQorCisv KgorICogUmVtb3ZlIGNsYXVzZXMgbm90IGNvdmVyZWQgYnkgYW55IG9mIHRo ZSBhdmFpbGFibGUgc3RhdGlzdGljcworICoKKyAqIFRoaXMgaGVscHMgdXMg dG8gcmVkdWNlIHRoZSBhbW91bnQgb2Ygd29yayBkb25lIGluIGNob29zZV9t dl9zdGF0aXN0aWNzKCkKKyAqIGJ5IG5vdCBoYXZpbmcgdG8gZGVhbCB3aXRo IGNsYXVzZXMgdGhhdCBjYW4ndCBwb3NzaWJseSBiZSB1c2VmdWwuCisgKi8K K3N0YXRpYyBMaXN0ICoKK2ZpbHRlcl9jbGF1c2VzKFBsYW5uZXJJbmZvICpy b290LCBJbmRleCByZWxpZCwgaW50IHR5cGUsCisJCQkgICBMaXN0ICpzdGF0 cywgTGlzdCAqY2xhdXNlcywgQml0bWFwc2V0ICoqYXR0bnVtcykKK3sKKwlM aXN0Q2VsbCAgICpjOworCUxpc3RDZWxsICAgKnM7CisKKwkvKiByZXN1bHRz IChsaXN0IG9mIGNvbXBhdGlibGUgY2xhdXNlcywgYXR0bnVtcykgKi8KKwlM aXN0CSAgICpyY2xhdXNlcyA9IE5JTDsKKworCWZvcmVhY2ggKGMsIGNsYXVz ZXMpCisJeworCQlOb2RlICpjbGF1c2UgPSAoTm9kZSopbGZpcnN0KGMpOwor CQlCaXRtYXBzZXQgKmNsYXVzZV9hdHRudW1zID0gTlVMTDsKKworCQkvKgor CQkgKiBXZSBkbyBhc3N1bWUgdGhhdCB0aGFua3MgdG8gcHJldmlvdXMgY2hl Y2tzLCB3ZSBzaG91bGQgbm90IHJ1biBpbnRvCisJCSAqIGNsYXVzZXMgdGhh dCBhcmUgaW5jb21wYXRpYmxlIHdpdGggbXVsdGl2YXJpYXRlIHN0YXRzIGhl cmUuIFdlIGFsc28KKwkJICogbmVlZCB0byBjb2xsZWN0IHRoZSBhdHRudW1z IGZvciB0aGUgY2xhdXNlLgorCQkgKgorCQkgKiBYWFggTWF5YmUgdHVybiB0 aGlzIGludG8gYW4gYXNzZXJ0PworCQkgKi8KKwkJaWYgKCEgY2xhdXNlX2lz X212X2NvbXBhdGlibGUoY2xhdXNlLCByZWxpZCwgJmNsYXVzZV9hdHRudW1z LCB0eXBlKSkKKwkJCQllbG9nKEVSUk9SLCAic2hvdWxkIG5vdCBnZXQgbm9u LW12LWNvbXBhdGlibGUgY2x1YXNlIik7CisKKwkJLyogSXMgdGhlcmUgYSBt dWx0aXZhcmlhdGUgc3RhdGlzdGljcyBjb3ZlcmluZyB0aGUgY2xhdXNlPyAq LworCQlmb3JlYWNoIChzLCBzdGF0cykKKwkJeworCQkJaW50IGssIG1hdGNo ZXMgPSAwOworCQkJTVZTdGF0aXN0aWNJbmZvCSpzdGF0ID0gKE1WU3RhdGlz dGljSW5mbyAqKWxmaXJzdChzKTsKKworCQkJLyogc2tpcCBzdGF0aXN0aWNz IG5vdCBtYXRjaGluZyB0aGUgcmVxdWlyZWQgdHlwZSAqLworCQkJaWYgKCEg c3RhdHNfdHlwZV9tYXRjaGVzKHN0YXQsIHR5cGUpKQorCQkJCWNvbnRpbnVl OworCisJCQkvKgorCQkJICogc2VlIGlmIGFsbCBjbGF1c2UgYXR0cmlidXRl cyBhcmUgY292ZXJlZCBieSB0aGUgc3RhdGlzdGljCisJCQkgKgorCQkJICog V2UnbGwgZG8gdGhhdCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLCBpLmUu IHdlJ2xsIHNlZSBob3cgbWFueQorCQkJICogYXR0cmlidXRlcyBvZiB0aGUg c3RhdGlzdGljIGFyZSByZWZlcmVuY2VkIGluIHRoZSBjbGF1c2UsIGFuZCB0 aGVuCisJCQkgKiBjb21wYXJlIHRoZSBjb3VudHMuCisJCQkgKi8KKwkJCWZv ciAoayA9IDA7IGsgPCBzdGF0LT5zdGFrZXlzLT5kaW0xOyBrKyspCisJCQkJ aWYgKGJtc19pc19tZW1iZXIoc3RhdC0+c3Rha2V5cy0+dmFsdWVzW2tdLCBj bGF1c2VfYXR0bnVtcykpCisJCQkJCW1hdGNoZXMgKz0gMTsKKworCQkJLyoK KwkJCSAqIElmIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpcyBlcXVhbCB0byBh dHRyaWJ1dGVzIHJlZmVyZW5jZWQgYnkgdGhlCisJCQkgKiBjbGF1c2UsIHRo ZW4gdGhlIGNsYXVzZSBpcyBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWMuCisJ CQkgKi8KKwkJCWlmIChibXNfbnVtX21lbWJlcnMoY2xhdXNlX2F0dG51bXMp ID09IG1hdGNoZXMpCisJCQl7CisJCQkJKmF0dG51bXMgPSBibXNfdW5pb24o KmF0dG51bXMsIGNsYXVzZV9hdHRudW1zKTsKKwkJCQlyY2xhdXNlcyA9IGxh cHBlbmQocmNsYXVzZXMsIGNsYXVzZSk7CisJCQkJYnJlYWs7CisJCQl9CisJ CX0KKworCQlibXNfZnJlZShjbGF1c2VfYXR0bnVtcyk7CisJfQorCisJLyog d2UgY2FuJ3QgaGF2ZSBtb3JlIGNvbXBhdGlibGUgY29uZGl0aW9ucyB0aGFu IHNvdXJjZSBjb25kaXRpb25zICovCisJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNs YXVzZXMpID49IGxpc3RfbGVuZ3RoKHJjbGF1c2VzKSk7CisKKwlyZXR1cm4g cmNsYXVzZXM7Cit9CisKKy8qCisgKiBSZW1vdmUgc3RhdGlzdGljcyBub3Qg Y292ZXJpbmcgYW55IG5ldyBjbGF1c2VzCisgKgorICogU3RhdGlzdGljcyBu b3QgY292ZXJpbmcgYW55IG5ldyBjbGF1c2VzIChjb25kaXRpb25zIGRvbid0 IGNvdW50KSBhcmUgbm90CisgKiByZWFsbHkgdXNlZnVsLCBzbyBsZXQncyBp Z25vcmUgdGhlbS4gQWxzbywgd2UgbmVlZCB0aGUgc3RhdGlzdGljcyB0bwor ICogcmVmZXJlbmNlIGF0IGxlYXN0IHR3byBkaWZmZXJlbnQgYXR0cmlidXRl cyAoYm90aCBpbiBjb25kaXRpb25zIGFuZCBjbGF1c2VzCisgKiBjb21iaW5l ZCksIGFuZCBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpbiB0aGUgY2xhdXNlcyBh bG9uZS4KKyAqCisgKiBUaGlzIGNoZWNrIG1pZ2h0IGJlIG1hZGUgbW9yZSBz dHJpY3QgYnkgY2hlY2tpbmcgYWdhaW5zdCBpbmRpdmlkdWFsIGNsYXVzZXMs CisgKiBiZWNhdXNlIGJ5IHVzaW5nIHRoZSBiaXRtYXBzZXRzIG9mIGFsbCBh dHRudW1zIHdlIG1heSBhY3R1YWxseSB1c2UgYXR0bnVtcworICogZnJvbSBj bGF1c2VzIHRoYXQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNz LiBGb3IgZXhhbXBsZSwgd2UgbWF5CisgKiBoYXZlIGEgY29uZGl0aW9uCisg KgorICogICAgKGE9MSBBTkQgYj0yKQorICoKKyAqIGFuZCBhIG5ldyBjbGF1 c2UKKyAqCisgKiAgICAoYz0xIEFORCBkPTEpCisgKgorICogV2l0aCBvbmx5 IGJpdG1hcHNldHMsIHN0YXRpc3RpY3Mgb24gW2IsY10gd2lsbCBwYXNzIHRo cm91Z2ggdGhpcyAoYXNzdW1pbmcKKyAqIHRoZXJlIGFyZSBzb21lIHN0YXRp c3RpY3MgY292ZXJpbmcgYm90aCBjbGFzZXMpLgorICoKKyAqIFBhcmFtZXRl cnM6CisgKgorICogICAgIHN0YXRzICAgICAgIC0gbGlzdCBvZiBzdGF0aXN0 aWNzIHRvIGZpbHRlcgorICogICAgIG5ld19hdHRudW1zIC0gYXR0bnVtcyBy ZWZlcmVuY2VkIGluIG5ldyBjbGF1c2VzCisgKiAgICAgYWxsX2F0dG51bXMg LSBhdHRudW1zIHJlZmVyZW5jZWQgYnkgY29udGlkaW9ucyBhbmQgbmV3IGNs YXVzZXMgY29tYmluZWQKKyAqCisgKiBSZXR1cm5zIGZpbHRlcmVkIGxpc3Qg b2Ygc3RhdGlzdGljcy4KKyAqCisgKiBUT0RPIERvIHRoZSBtb3JlIHN0cmlj dCBjaGVjaywgaS5lLiB3YWxrIHRocm91Z2ggaW5kaXZpZHVhbCBjbGF1c2Vz IGFuZAorICogICAgICBjb25kaXRpb25zIGFuZCBvbmx5IHVzZSB0aG9zZSBj b3ZlcmVkIGJ5IHRoZSBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgTGlzdCAq CitmaWx0ZXJfc3RhdHMoTGlzdCAqc3RhdHMsIEJpdG1hcHNldCAqbmV3X2F0 dG51bXMsIEJpdG1hcHNldCAqYWxsX2F0dG51bXMpCit7CisJTGlzdENlbGwg ICAqczsKKwlMaXN0CSAgICpzdGF0c19maWx0ZXJlZCA9IE5JTDsKKworCWZv cmVhY2ggKHMsIHN0YXRzKQorCXsKKwkJaW50IGs7CisJCWludCBtYXRjaGVz X25ldyA9IDAsCisJCQltYXRjaGVzX2FsbCA9IDA7CisKKwkJTVZTdGF0aXN0 aWNJbmZvCSpzdGF0ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChzKTsK KworCQkvKiBzZWUgaG93IG1hbnkgYXR0cmlidXRlcyB0aGUgc3RhdGlzdGlj cyBjb3ZlcnMgKi8KKwkJZm9yIChrID0gMDsgayA8IHN0YXQtPnN0YWtleXMt PmRpbTE7IGsrKykKKwkJeworCQkJLyogYXR0cmlidXRlcyBmcm9tIG5ldyBj bGF1c2VzICovCisJCQlpZiAoYm1zX2lzX21lbWJlcihzdGF0LT5zdGFrZXlz LT52YWx1ZXNba10sIG5ld19hdHRudW1zKSkKKwkJCQltYXRjaGVzX25ldyAr PSAxOworCisJCQkvKiBhdHRyaWJ1dGVzIGZyb20gb25kaXRpb25zICovCisJ CQlpZiAoYm1zX2lzX21lbWJlcihzdGF0LT5zdGFrZXlzLT52YWx1ZXNba10s IGFsbF9hdHRudW1zKSkKKwkJCQltYXRjaGVzX2FsbCArPSAxOworCQl9CisK KwkJLyogY2hlY2sgd2UgaGF2ZSBlbm91Z2ggYXR0cmlidXRlcyBmb3IgdGhp cyBzdGF0aXN0aWNzICovCisJCWlmICgobWF0Y2hlc19uZXcgPj0gMSkgJiYg KG1hdGNoZXNfYWxsID49IDIpKQorCQkJc3RhdHNfZmlsdGVyZWQgPSBsYXBw ZW5kKHN0YXRzX2ZpbHRlcmVkLCBzdGF0KTsKKwl9CisKKwkvKiB3ZSBjYW4n dCBoYXZlIG1vcmUgdXNlZnVsIHN0YXRzIHRoYW4gd2UgaGFkIG9yaWdpbmFs bHkgKi8KKwlBc3NlcnQobGlzdF9sZW5ndGgoc3RhdHMpID49IGxpc3RfbGVu Z3RoKHN0YXRzX2ZpbHRlcmVkKSk7CisKKwlyZXR1cm4gc3RhdHNfZmlsdGVy ZWQ7Cit9CisKK3N0YXRpYyBNVlN0YXRpc3RpY0luZm8gKgorbWFrZV9zdGF0 c19hcnJheShMaXN0ICpzdGF0cywgaW50ICpubXZzdGF0cykKK3sKKwlpbnQg aTsKKwlMaXN0Q2VsbCAgICpsOworCisJTVZTdGF0aXN0aWNJbmZvICptdnN0 YXRzID0gTlVMTDsKKwkqbm12c3RhdHMgPSBsaXN0X2xlbmd0aChzdGF0cyk7 CisKKwltdnN0YXRzCisJCT0gKE1WU3RhdGlzdGljSW5mbyopcGFsbG9jMCgo Km5tdnN0YXRzKSAqIHNpemVvZihNVlN0YXRpc3RpY0luZm8pKTsKKworCWkg PSAwOworCWZvcmVhY2ggKGwsIHN0YXRzKQorCXsKKwkJTVZTdGF0aXN0aWNJ bmZvCSpzdGF0ID0gKE1WU3RhdGlzdGljSW5mbyAqKWxmaXJzdChsKTsKKwkJ bWVtY3B5KCZtdnN0YXRzW2krK10sIHN0YXQsIHNpemVvZihNVlN0YXRpc3Rp Y0luZm8pKTsKKwl9CisKKwlyZXR1cm4gbXZzdGF0czsKK30KKworc3RhdGlj IEJpdG1hcHNldCAqKgorbWFrZV9zdGF0c19hdHRudW1zKE1WU3RhdGlzdGlj SW5mbyAqbXZzdGF0cywgaW50IG5tdnN0YXRzKQoreworCWludAkJCWksIGo7 CisJQml0bWFwc2V0ICoqc3RhdHNfYXR0bnVtcyA9IE5VTEw7CisKKwlBc3Nl cnQobm12c3RhdHMgPiAwKTsKIAotCXJldHVybiByZXN1bHQ7CisJLyogYnVp bGQgYml0bWFwcyBvZiBhdHRudW1zIGZvciB0aGUgc3RhdHMgKGVhc2llciB0 byBjb21wYXJlKSAqLworCXN0YXRzX2F0dG51bXMgPSAoQml0bWFwc2V0ICoq KXBhbGxvYzAobm12c3RhdHMgKiBzaXplb2YoQml0bWFwc2V0KikpOworCisJ Zm9yIChpID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCisJCWZvciAoaiA9IDA7 IGogPCBtdnN0YXRzW2ldLnN0YWtleXMtPmRpbTE7IGorKykKKwkJCXN0YXRz X2F0dG51bXNbaV0KKwkJCQk9IGJtc19hZGRfbWVtYmVyKHN0YXRzX2F0dG51 bXNbaV0sCisJCQkJCQkJCSBtdnN0YXRzW2ldLnN0YWtleXMtPnZhbHVlc1tq XSk7CisKKwlyZXR1cm4gc3RhdHNfYXR0bnVtczsKIH0KIAorCiAvKgotICog Q29sbGVjdCBhdHRyaWJ1dGVzIGZyb20gbXYtY29tcGF0aWJsZSBjbGF1c2Vz LgorICogUmVtb3ZlIHJlZHVuZGFudCBzdGF0aXN0aWNzCisgKgorICogSWYg dGhlcmUgYXJlIG11bHRpcGxlIHN0YXRpc3RpY3MgY292ZXJpbmcgdGhlIHNh bWUgc2V0IG9mIGNvbHVtbnMgKGNvdW50aW5nCisgKiBvbmx5IHRob3NlIHJl ZmVyZW5jZWQgYnkgY2xhdXNlcyBhbmQgY29uZGl0aW9ucyksIHdlIGNhbiBh cHBseSBvbmUgb2YgdGhvc2UKKyAqIGFueXdheSBhbmQgZnVydGhlciByZWR1 Y2UgdGhlIHNpemUgb2YgdGhlIG9wdGltaXphdGlvbiBwcm9ibGVtLgorICoK KyAqIFRodXMgd2hlbiByZWR1bmRhbnQgc3RhdHMgYXJlIGRldGVjdGVkLCB3 ZSBrZWVwIHRoZSBzbWFsbGVyIG9uZSAodGhlIG9uZSB3aXRoCisgKiBmZXdl ciBjb2x1bW5zKSwgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCdz IG1vcmUgYWNjdXJhdGUgYW5kIGFsc28KKyAqIGZhc3RlciB0byBwcm9jZXNz LiBUaGF0IG1heSBiZSB1bnRydWUgZm9yIHR3byByZWFzb25zIC0gZmlyc3Qs IHRoZSBhY2N1cmFjeQorICogcmVhbGx5IGRlcGVuZHMgb24gbnVtYmVyIG9m IGJ1Y2tldHMvTUNWIGl0ZW1zLCBub3QgdGhlIG51bWJlciBvZiBjb2x1bW5z LgorICogU2Vjb25kLCBzb21lIHR5cGVzIG9mIHN0YXRpc3RpY3MgbWF5IHdv cmsgYmV0dGVyIGZvciBjZXJ0YWluIHR5cGVzIG9mIGNsYXVzZXMKKyAqIChl LmcuIE1DViBsaXN0cyBmb3IgZXF1YWxpdHkgY29uZGl0aW9ucykgZXRjLgog ICovCi1zdGF0aWMgQml0bWFwc2V0ICoKLWNvbGxlY3RfbXZfYXR0bnVtcyhM aXN0ICpjbGF1c2VzLCBJbmRleCByZWxpZCwgaW50IHR5cGVzKQorc3RhdGlj IExpc3QqCitmaWx0ZXJfcmVkdW5kYW50X3N0YXRzKExpc3QgKnN0YXRzLCBM aXN0ICpjbGF1c2VzLCBMaXN0ICpjb25kaXRpb25zKQogewotCUJpdG1hcHNl dCAgKmF0dG51bXMgPSBOVUxMOwotCUxpc3RDZWxsICAgKmw7CisJaW50IGks IGosIG5tdnN0YXRzOworCisJTVZTdGF0aXN0aWNJbmZvCSAgICptdnN0YXRz OworCWJvb2wJCQkgICAqcmVkdW5kYW50OworCUJpdG1hcHNldAkJICAqKnN0 YXRzX2F0dG51bXM7CisJQml0bWFwc2V0CQkgICAqdmFyYXR0bm9zOworCUlu ZGV4CQkJCXJlbGlkOworCisJQXNzZXJ0KGxpc3RfbGVuZ3RoKHN0YXRzKSA+ IDApOworCUFzc2VydChsaXN0X2xlbmd0aChjbGF1c2VzKSA+IDApOwogCiAJ LyoKLQkgKiBXYWxrIHRocm91Z2ggdGhlIGNsYXVzZXMgYW5kIGlkZW50aWZ5 IHRoZSBvbmVzIHdlIGNhbiBlc3RpbWF0ZSB1c2luZwotCSAqIG11bHRpdmFy aWF0ZSBzdGF0cywgYW5kIHJlbWVtYmVyIHRoZSByZWxpZC9jb2x1bW5zLiBX ZSdsbCB0aGVuCi0JICogY3Jvc3MtY2hlY2sgaWYgd2UgaGF2ZSBzdWl0YWJs ZSBzdGF0cywgYW5kIG9ubHkgaWYgbmVlZGVkIHdlJ2xsIHNwbGl0Ci0JICog dGhlIGNsYXVzZXMgaW50byBtdWx0aXZhcmlhdGUgYW5kIHJlZ3VsYXIgbGlz dHMuCisJICogV2UnbGwgY29udmVydCB0aGUgbGlzdCBvZiBzdGF0aXN0aWNz IGludG8gYW4gYXJyYXkgbm93LCBiZWNhdXNlCisJICogdGhlIHJlZHVjdGlv biBvZiByZWR1bmRhbnQgc3RhdGlzdGljcyBpcyBlYXNpZXIgdG8gZG8gdGhh dCB3YXkKKwkgKiAod2UgY2FuIG1hcmsgcHJldmlvdXMgc3RhdHMgYXMgcmVk dW5kYW50LCBldGMuKS4KKwkgKi8KKwltdnN0YXRzID0gbWFrZV9zdGF0c19h cnJheShzdGF0cywgJm5tdnN0YXRzKTsKKwlzdGF0c19hdHRudW1zID0gbWFr ZV9zdGF0c19hdHRudW1zKG12c3RhdHMsIG5tdnN0YXRzKTsKKworCS8qIGJ5 IGRlZmF1bHQsIG5vbmUgb2YgdGhlIHN0YXRzIGlzIHJlZHVuZGFudCAoc28g cGFsbG9jMCkgKi8KKwlyZWR1bmRhbnQgPSBwYWxsb2MwKG5tdnN0YXRzICog c2l6ZW9mKGJvb2wpKTsKKworCS8qCisJICogV2Ugb25seSBleHBlY3QgYSBz aW5nbGUgcmVsaWQgaGVyZSwgYW5kIGFsc28gd2Ugc2hvdWxkIGdldCB0aGUK KwkgKiBzYW1lIHJlbGlkIGZyb20gY2xhdXNlcyBhbmQgY29uZGl0aW9ucyAo YnV0IHdlIGdldCBpdCBmcm9tCisJICogY2xhdXNlcywgYmVjYXVzZSB0aG9z ZSBhcmUgY2VydGFpbmx5IG5vbi1lbXB0eSkuCisJICovCisJcmVsaWQgPSBi bXNfc2luZ2xldG9uX21lbWJlcihwdWxsX3Zhcm5vcygoTm9kZSopY2xhdXNl cykpOworCisJLyoKKwkgKiBHZXQgdGhlIHZhcmF0dG5vcyBmcm9tIGJvdGgg Y29uZGl0aW9ucyBhbmQgY2xhdXNlcy4KKwkgKgorCSAqIFRoaXMgc2tpcHMg c3lzdGVtIGF0dHJpYnV0ZXMsIGFsdGhvdWdoIHRoYXQgc2hvdWxkIGJlIGlt cG9zc2libGUKKwkgKiB0aGFua3MgdG8gcHJldmlvdXMgZmlsdGVyaW5nIG91 dCBvZiBpbmNvbXBhdGlibGUgY2xhdXNlcy4KIAkgKgotCSAqIEZvciBub3cg d2UncmUgb25seSBpbnRlcmVzdGVkIGluIFJlc3RyaWN0SW5mbyBub2RlcyB3 aXRoIG5lc3RlZCBPcEV4cHIsCi0JICogdXNpbmcgZWl0aGVyIGEgcmFuZ2Ug b3IgZXF1YWxpdHkuCisJICogWFhYIElzIHRoYXQgcmVhbGx5IHRydWU/CiAJ ICovCi0JZm9yZWFjaCAobCwgY2xhdXNlcykKKwl2YXJhdHRub3MgPSBibXNf dW5pb24oZ2V0X3ZhcmF0dG5vcygoTm9kZSopY2xhdXNlcywgcmVsaWQpLAor CQkJCQkJICBnZXRfdmFyYXR0bm9zKChOb2RlKiljb25kaXRpb25zLCByZWxp ZCkpOworCisJZm9yIChpID0gMTsgaSA8IG5tdnN0YXRzOyBpKyspCiAJewot CQlOb2RlCSAgICpjbGF1c2UgPSAoTm9kZSAqKSBsZmlyc3QobCk7CisJCS8q IGludGVyc2VjdCB3aXRoIGN1cnJlbnQgc3RhdGlzdGljcyAqLworCQlCaXRt YXBzZXQgKmN1cnIgPSBibXNfaW50ZXJzZWN0KHN0YXRzX2F0dG51bXNbaV0s IHZhcmF0dG5vcyk7CiAKLQkJLyogaWdub3JlIHRoZSByZXN1bHQgaGVyZSAt IHdlIG9ubHkgbmVlZCB0aGUgYXR0bnVtcyAqLwotCQljbGF1c2VfaXNfbXZf Y29tcGF0aWJsZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVtcywgdHlwZXMpOwor CQkvKiB3YWxrIHRocm91Z2ggJ3ByZXZpb3VzJyBzdGF0cyBhbmQgY2hlY2sg cmVkdW5kYW5jeSAqLworCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQl7 CisJCQkvKiBpbnRlcnNlY3Qgd2l0aCBjdXJyZW50IHN0YXRpc3RpY3MgKi8K KwkJCUJpdG1hcHNldCAqcHJldjsKKworCQkJLyogc2tpcCBzdGF0cyBhbHJl YWR5IGlkZW50aWZpZWQgYXMgcmVkdW5kYW50ICovCisJCQlpZiAocmVkdW5k YW50W2pdKQorCQkJCWNvbnRpbnVlOworCisJCQlwcmV2ID0gYm1zX2ludGVy c2VjdChzdGF0c19hdHRudW1zW2pdLCB2YXJhdHRub3MpOworCisJCQlzd2l0 Y2ggKGJtc19zdWJzZXRfY29tcGFyZShjdXJyLCBwcmV2KSkKKwkJCXsKKwkJ CQljYXNlIEJNU19FUVVBTDoKKwkJCQkJLyoKKwkJCQkJICogVXNlIHRoZSBz bWFsbGVyIG9uZSAoaG9wZWZ1bGx5IG1vcmUgYWNjdXJhdGUpLgorCQkJCQkg KiBJZiBib3RoIGhhdmUgdGhlIHNhbWUgc2l6ZSwgdXNlIHRoZSBmaXJzdCBv bmUuCisJCQkJCSAqLworCQkJCQlpZiAobXZzdGF0c1tpXS5zdGFrZXlzLT5k aW0xID49IG12c3RhdHNbal0uc3Rha2V5cy0+ZGltMSkKKwkJCQkJCXJlZHVu ZGFudFtpXSA9IFRSVUU7CisJCQkJCWVsc2UKKwkJCQkJCXJlZHVuZGFudFtq XSA9IFRSVUU7CisKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEJNU19TVUJT RVQxOiAvKiBjdXJyIGlzIHN1YnNldCBvZiBwcmV2ICovCisJCQkJCXJlZHVu ZGFudFtpXSA9IFRSVUU7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBCTVNf U1VCU0VUMjogLyogcHJldiBpcyBzdWJzZXQgb2YgY3VyciAqLworCQkJCQly ZWR1bmRhbnRbal0gPSBUUlVFOworCQkJCQlicmVhazsKKworCQkJCWNhc2Ug Qk1TX0RJRkZFUkVOVDoKKwkJCQkJLyogZG8gbm90aGluZyAtIGtlZXAgYm90 aCBzdGF0cyAqLworCQkJCQlicmVhazsKKwkJCX0KKworCQkJYm1zX2ZyZWUo cHJldik7CisJCX0KKworCQlibXNfZnJlZShjdXJyKTsKIAl9CiAKLQkvKgot CSAqIElmIHRoZXJlIGFyZSBub3QgYXQgbGVhc3QgdHdvIGF0dHJpYnV0ZXMg cmVmZXJlbmNlZCBieSB0aGUgY2xhdXNlKHMpLAotCSAqIHdlIGNhbiB0aHJv dyBldmVyeXRoaW5nIG91dCAoYXMgd2UnbGwgcmV2ZXJ0IHRvIHNpbXBsZSBz dGF0cykuCi0JICovCi0JaWYgKGJtc19udW1fbWVtYmVycyhhdHRudW1zKSA8 PSAxKQorCS8qIGNhbid0IHJlZHVjZSBhbGwgc3RhdGlzdGljcyAoYXQgbGVh c3Qgb25lIGhhcyB0byByZW1haW4pICovCisJQXNzZXJ0KG5tdnN0YXRzID4g MCk7CisKKwkvKiBub3csIGxldCdzIHJlbW92ZSB0aGUgcmVkdWNlZCBzdGF0 aXN0aWNzIGZyb20gdGhlIGFycmF5cyAqLworCWxpc3RfZnJlZShzdGF0cyk7 CisJc3RhdHMgPSBOSUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7 IGkrKykKIAl7Ci0JCWlmIChhdHRudW1zICE9IE5VTEwpCi0JCQlwZnJlZShh dHRudW1zKTsKLQkJYXR0bnVtcyA9IE5VTEw7CisJCU1WU3RhdGlzdGljSW5m byAqaW5mbzsKKworCQlwZnJlZShzdGF0c19hdHRudW1zW2ldKTsKKworCQlp ZiAocmVkdW5kYW50W2ldKQorCQkJY29udGludWU7CisKKwkJaW5mbyA9IG1h a2VOb2RlKE1WU3RhdGlzdGljSW5mbyk7CisJCW1lbWNweShpbmZvLCAmbXZz dGF0c1tpXSwgc2l6ZW9mKE1WU3RhdGlzdGljSW5mbykpOworCisJCXN0YXRz ID0gbGFwcGVuZChzdGF0cywgaW5mbyk7CiAJfQogCi0JcmV0dXJuIGF0dG51 bXM7CisJcGZyZWUobXZzdGF0cyk7CisJcGZyZWUoc3RhdHNfYXR0bnVtcyk7 CisJcGZyZWUocmVkdW5kYW50KTsKKworCXJldHVybiBzdGF0czsKIH0KIAot LyoKLSAqIENvdW50IHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyBpbiBjbGF1 c2VzIGNvbXBhdGlibGUgd2l0aCBtdWx0aXZhcmlhdGUgc3RhdHMuCi0gKi8K LXN0YXRpYyBpbnQKLWNvdW50X212X2F0dG51bXMoTGlzdCAqY2xhdXNlcywg SW5kZXggcmVsaWQsIGludCB0eXBlKQorc3RhdGljIE5vZGUqKgorbWFrZV9j bGF1c2VzX2FycmF5KExpc3QgKmNsYXVzZXMsIGludCAqbmNsYXVzZXMpCiB7 Ci0JaW50IGM7Ci0JQml0bWFwc2V0ICphdHRudW1zID0gY29sbGVjdF9tdl9h dHRudW1zKGNsYXVzZXMsIHJlbGlkLCB0eXBlKTsKKwlpbnQgaTsKKwlMaXN0 Q2VsbCAqbDsKIAotCWMgPSBibXNfbnVtX21lbWJlcnMoYXR0bnVtcyk7CisJ Tm9kZSoqIGNsYXVzZXNfYXJyYXk7CiAKLQlibXNfZnJlZShhdHRudW1zKTsK KwkqbmNsYXVzZXMgPSBsaXN0X2xlbmd0aChjbGF1c2VzKTsKKwljbGF1c2Vz X2FycmF5ID0gKE5vZGUgKiopcGFsbG9jMCgoKm5jbGF1c2VzKSAqIHNpemVv ZihOb2RlICopKTsKIAotCXJldHVybiBjOworCWkgPSAwOworCWZvcmVhY2gg KGwsIGNsYXVzZXMpCisJCWNsYXVzZXNfYXJyYXlbaSsrXSA9IChOb2RlICop bGZpcnN0KGwpOworCisJKm5jbGF1c2VzID0gaTsKKworCXJldHVybiBjbGF1 c2VzX2FycmF5OwogfQogCi0vKgotICogQ291bnQgdmFybm9zIHJlZmVyZW5j ZWQgaW4gdGhlIGNsYXVzZXMsIGFuZCBpZiB0aGVyZSdzIGEgc2luZ2xlIHZh cm5vIHRoZW4KLSAqIHJldHVybiB0aGUgaW5kZXggaW4gJ3JlbGlkJy4KLSAq Lwotc3RhdGljIGludAotY291bnRfdmFybm9zKExpc3QgKmNsYXVzZXMsIElu ZGV4ICpyZWxpZCkKK3N0YXRpYyBCaXRtYXBzZXQgKioKK21ha2VfY2xhdXNl c19hdHRudW1zKFBsYW5uZXJJbmZvICpyb290LCBJbmRleCByZWxpZCwKKwkJ CQkJIGludCB0eXBlLCBOb2RlICoqY2xhdXNlcywgaW50IG5jbGF1c2VzKQog ewotCWludCBjbnQ7Ci0JQml0bWFwc2V0ICp2YXJub3MgPSBOVUxMOworCWlu dAkJCWk7CisJQml0bWFwc2V0ICoqY2xhdXNlc19hdHRudW1zCisJCT0gKEJp dG1hcHNldCAqKilwYWxsb2MwKG5jbGF1c2VzICogc2l6ZW9mKEJpdG1hcHNl dCAqKSk7CiAKLQl2YXJub3MgPSBwdWxsX3Zhcm5vcygoTm9kZSAqKSBjbGF1 c2VzKTsKLQljbnQgPSBibXNfbnVtX21lbWJlcnModmFybm9zKTsKKwlmb3Ig KGkgPSAwOyBpIDwgbmNsYXVzZXM7IGkrKykKKwl7CisJCUJpdG1hcHNldCAq IGF0dG51bXMgPSBOVUxMOwogCi0JLyogaWYgdGhlcmUncyBhIHNpbmdsZSB2 YXJubyBpbiB0aGUgY2xhdXNlcywgcmVtZW1iZXIgaXQgKi8KLQlpZiAoYm1z X251bV9tZW1iZXJzKHZhcm5vcykgPT0gMSkKLQkJKnJlbGlkID0gYm1zX3Np bmdsZXRvbl9tZW1iZXIodmFybm9zKTsKKwkJaWYgKCEgY2xhdXNlX2lzX212 X2NvbXBhdGlibGUoY2xhdXNlc1tpXSwgcmVsaWQsICZhdHRudW1zLCB0eXBl KSkKKwkJCWVsb2coRVJST1IsICJzaG91bGQgbm90IGdldCBub24tbXYtY29t cGF0aWJsZSBjbGF1c2UiKTsKIAotCWJtc19mcmVlKHZhcm5vcyk7CisJCWNs YXVzZXNfYXR0bnVtc1tpXSA9IGF0dG51bXM7CisJfQogCi0JcmV0dXJuIGNu dDsKKwlyZXR1cm4gY2xhdXNlc19hdHRudW1zOwogfQotIAorCitzdGF0aWMg Ym9vbCoKK21ha2VfY292ZXJfbWFwKEJpdG1hcHNldCAqKnN0YXRzX2F0dG51 bXMsIGludCBubXZzdGF0cywKKwkJCSAgIEJpdG1hcHNldCAqKmNsYXVzZXNf YXR0bnVtcywgaW50IG5jbGF1c2VzKQoreworCWludAkJaSwgajsKKwlib29s ICAgKmNvdmVyX21hcAk9IChib29sKilwYWxsb2MwKG5jbGF1c2VzICogbm12 c3RhdHMpOworCisJZm9yIChpID0gMDsgaSA8IG5tdnN0YXRzOyBpKyspCisJ CWZvciAoaiA9IDA7IGogPCBuY2xhdXNlczsgaisrKQorCQkJY292ZXJfbWFw W2kgKiBuY2xhdXNlcyArIGpdCisJCQkJPSBibXNfaXNfc3Vic2V0KGNsYXVz ZXNfYXR0bnVtc1tqXSwgc3RhdHNfYXR0bnVtc1tpXSk7CisKKwlyZXR1cm4g Y292ZXJfbWFwOworfQorCiAvKgotICogV2UncmUgbG9va2luZyBmb3Igc3Rh dGlzdGljcyBtYXRjaGluZyBhdCBsZWFzdCAyIGF0dHJpYnV0ZXMsIHJlZmVy ZW5jZWQgaW4KLSAqIGNsYXVzZXMgY29tcGF0aWJsZSB3aXRoIG11bHRpdmFy aWF0ZSBzdGF0aXN0aWNzLiBUaGUgY3VycmVudCBzZWxlY3Rpb24KLSAqIGNy aXRlcmlhIGlzIHZlcnkgc2ltcGxlIC0gd2UgY2hvb3NlIHRoZSBzdGF0aXN0 aWNzIHJlZmVyZW5jaW5nIHRoZSBtb3N0Ci0gKiBhdHRyaWJ1dGVzLgotICoK LSAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdGF0aXN0aWNzIHJlZmVyZW5j aW5nIHRoZSBzYW1lIG51bWJlciBvZiBjb2x1bW5zCi0gKiAoZnJvbSB0aGUg Y2xhdXNlcyksIHRoZSBvbmUgd2l0aCBsZXNzIHNvdXJjZSBjb2x1bW5zIChh cyBsaXN0ZWQgaW4gdGhlCi0gKiBBREQgU1RBVElTVElDUyB3aGVuIGNyZWF0 aW5nIHRoZSBzdGF0aXN0aWNzKSB3aW5zLiBFbHNlIHRoZSBmaXJzdCBvbmUg d2lucy4KLSAqCi0gKiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgY3JpdGVyaWEs IGFuZCBoYXMgc2V2ZXJhbCB3ZWFrbmVzc2VzOgotICoKLSAqIChhKSBkb2Vz IG5vdCBjb25zaWRlciB0aGUgYWNjdXJhY3kgb2YgdGhlIHN0YXRpc3RpY3MK LSAqCi0gKiAgICAgSWYgdGhlcmUgYXJlIHR3byBoaXN0b2dyYW1zIGJ1aWx0 IG9uIHRoZSBzYW1lIHNldCBvZiBjb2x1bW5zLCBidXQgb25lCi0gKiAgICAg aGFzIDEwMCBidWNrZXRzIGFuZCB0aGUgb3RoZXIgb25lIGhhcyAxMDAwIGJ1 Y2tldHMgKHRodXMgbGlrZWx5Ci0gKiAgICAgcHJvdmlkaW5nIGJldHRlciBl c3RpbWF0ZXMpLCB0aGlzIGlzIG5vdCBjdXJyZW50bHkgY29uc2lkZXJlZC4K LSAqCi0gKiAoYikgZG9lcyBub3QgY29uc2lkZXIgdGhlIHR5cGUgb2Ygc3Rh dGlzdGljcwotICoKLSAqICAgICBJZiB0aGVyZSBhcmUgdGhyZWUgc3RhdGlz dGljcyAtIG9uZSBjb250YWluaW5nIGp1c3QgYSBNQ1YgbGlzdCwgYW5vdGhl cgotICogICAgIG9uZSB3aXRoIGp1c3QgYSBoaXN0b2dyYW0gYW5kIGEgdGhp cmQgb25lIHdpdGggYm90aCwgd2UgdHJlYXQgdGhlbSBlcXVhbGx5LgorICog Q2hvb3NlcyB0aGUgY29tYmluYXRpb24gb2Ygc3RhdGlzdGljcywgb3B0aW1h bCBmb3IgZXN0aW1hdGlvbiBvZiBhIHBhcnRpY3VsYXIKKyAqIGNsYXVzZSBs aXN0LgogICoKLSAqIChjKSBkb2VzIG5vdCBjb25zaWRlciB0aGUgbnVtYmVy IG9mIGNsYXVzZXMKKyAqIFRoaXMgb25seSBoYW5kbGVzIGEgJ3ByZXBhcmF0 aW9uJyBzaGFyZWQgYnkgdGhlIGV4aGF1c3RpdmUgYW5kIGdyZWVkeQorICog aW1wbGVtZW50YXRpb25zIChzZWUgdGhlIHByZXZpb3VzIG1ldGhvZHMpLCBt b3N0bHkgdHJ5aW5nIHRvIHJlZHVjZSB0aGUgc2l6ZQorICogb2YgdGhlIHBy b2JsZW0gKGVsaW1pbmF0ZSBjbGF1c2VzL3N0YXRpc3RpY3MgdGhhdCBjYW4n dCBiZSByZWFsbHkgdXNlZCBpbgorICogdGhlIHNvbHV0aW9uKS4KICAqCi0g KiAgICAgQXMgZXhwbGFpbmVkLCBvbmx5IHRoZSBudW1iZXIgb2YgcmVmZXJl bmNlZCBhdHRyaWJ1dGVzIGNvdW50cywgc28gaWYKLSAqICAgICB0aGVyZSBh cmUgbXVsdGlwbGUgY2xhdXNlcyBvbiBhIHNpbmdsZSBhdHRyaWJ1dGUsIHRo aXMgc3RpbGwgY291bnRzIGFzCi0gKiAgICAgYSBzaW5nbGUgYXR0cmlidXRl LgorICogSXQgYWxzbyBwcmVjb21wdXRlcyBiaXRtYXBzIGZvciBhdHRyaWJ1 dGVzIGNvdmVyZWQgYnkgY2xhdXNlcyBhbmQgc3RhdGlzdGljcywKKyAqIHNv IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGF0IG92ZXIgYW5kIG92ZXIg aW4gdGhlIGFjdHVhbCBvcHRpbWl6YXRpb25zCisgKiAoYXMgaXQncyBib3Ro IENQVSBhbmQgbWVtb3J5IGludGVuc2l2ZSkuCiAgKgotICogKGQpIGRvZXMg bm90IGNvbnNpZGVyIHR5cGUgb2YgY29uZGl0aW9uCiAgKgotICogICAgIFNv bWUgY2xhdXNlcyBtYXkgd29yayBiZXR0ZXIgd2l0aCBzb21lIHN0YXRpc3Rp Y3MgLSBmb3IgZXhhbXBsZSBlcXVhbGl0eQotICogICAgIGNsYXVzZXMgcHJv YmFibHkgd29yayBiZXR0ZXIgd2l0aCBNQ1YgbGlzdHMgdGhhbiB3aXRoIGhp c3RvZ3JhbXMuIEJ1dAotICogICAgIElTIFtOT1RdIE5VTEwgY29uZGl0aW9u cyBtYXkgb2Z0ZW4gd29yayBiZXR0ZXIgd2l0aCBoaXN0b2dyYW1zICh0aGFu a3MKLSAqICAgICB0byBOVUxMLWJ1Y2tldHMpLgorICogVE9ETyBBbm90aGVy IHdheSB0byBtYWtlIHRoZSBvcHRpbWl6YXRpb24gcHJvYmxlbXMgc21hbGxl ciBtaWdodCBiZSBzcGxpdHRpbmcKKyAqICAgICAgdGhlIHN0YXRpc3RpY3Mg aW50byBzZXZlcmFsIGRpc2pvaW50IHN1YnNldHMsIGkuZS4gaWYgd2UgY2Fu IHNwbGl0IHRoZQorICogICAgICBncmFwaCBvZiBzdGF0aXN0aWNzIChhZnRl ciB0aGUgZWxpbWluYXRpb24pIGludG8gbXVsdGlwbGUgY29tcG9uZW50cwor ICogICAgICAoc28gdGhhdCBzdGF0cyBpbiBkaWZmZXJlbnQgY29tcG9uZW50 cyBzaGFyZSBubyBhdHRyaWJ1dGVzKSwgd2UgY2FuIGRvCisgKiAgICAgIHRo ZSBvcHRpbWl6YXRpb24gZm9yIGVhY2ggY29tcG9uZW50IHNlcGFyYXRlbHku CiAgKgotICogU28gZm9yIGV4YW1wbGUgd2l0aCBmaXZlIFdIRVJFIGNvbmRp dGlvbnMKLSAqCi0gKiAgICAgV0hFUkUgKGEgPSAxKSBBTkQgKGIgPSAxKSBB TkQgKGMgPSAxKSBBTkQgKGQgPSAxKSBBTkQgKGUgPSAxKQotICoKLSAqIGFu ZCBzdGF0aXN0aWNzIG9uIChhLGIpLCAoYSxiLGUpIGFuZCAoYSxiLGMsZCks IHRoZSBsYXN0IG9uZSB3aWxsIGJlIHNlbGVjdGVkCi0gKiBhcyBpdCByZWZl cmVuY2VzIHRoZSBtb3N0IGNvbHVtbnMuCi0gKgotICogT25jZSB3ZSBoYXZl IHNlbGVjdGVkIHRoZSBtdWx0aXZhcmlhdGUgc3RhdGlzdGljcywgd2Ugc3Bs aXQgdGhlIGxpc3Qgb2YKLSAqIGNsYXVzZXMgaW50byB0d28gcGFydHMgLSBj b25kaXRpb25zIHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgc2VsZWN0 ZWQKLSAqIHN0YXRzLCBhbmQgY29uZGl0aW9ucyBhcmUgZXN0aW1hdGVkIHVz aW5nIHNpbXBsZSBzdGF0aXN0aWNzLgotICoKLSAqIEZyb20gdGhlIGV4YW1w bGUgYWJvdmUsIGNvbmRpdGlvbnMKLSAqCi0gKiAgICAgKGEgPSAxKSBBTkQg KGIgPSAxKSBBTkQgKGMgPSAxKSBBTkQgKGQgPSAxKQotICoKLSAqIHdpbGwg YmUgZXN0aW1hdGVkIHVzaW5nIHRoZSBtdWx0aXZhcmlhdGUgc3RhdGlzdGlj cyAoYSxiLGMsZCkgd2hpbGUgdGhlIGxhc3QKLSAqIGNvbmRpdGlvbiAoZSA9 IDEpIHdpbGwgZ2V0IGVzdGltYXRlZCB1c2luZyB0aGUgcmVndWxhciBvbmVz LgotICoKLSAqIFRoZXJlIGFyZSB2YXJpb3VzIGFsdGVybmF0aXZlIHNlbGVj dGlvbiBjcml0ZXJpYSAoZS5nLiBjb3VudGluZyBjb25kaXRpb25zCi0gKiBp bnN0ZWFkIG9mIGp1c3QgcmVmZXJlbmNlZCBhdHRyaWJ1dGVzKSwgYnV0IGV2 ZW50dWFsbHkgdGhlIGJlc3Qgb3B0aW9uIHNob3VsZAotICogYmUgdG8gY29t YmluZSBtdWx0aXBsZSBzdGF0aXN0aWNzLiBCdXQgdGhhdCdzIG11Y2ggaGFy ZGVyIHRvIGRvIGNvcnJlY3RseS4KLSAqCi0gKiBUT0RPIFNlbGVjdCBtdWx0 aXBsZSBzdGF0aXN0aWNzIGFuZCBjb21iaW5lIHRoZW0gd2hlbiBjb21wdXRp bmcgdGhlIGVzdGltYXRlLgotICoKLSAqIFRPRE8gVGhpcyB3aWxsIHByb2Jh Ymx5IGhhdmUgdG8gY29uc2lkZXIgY29tcGF0aWJpbGl0eSBvZiBjbGF1c2Vz LCBiZWNhdXNlCi0gKiAgICAgICdkZXBlbmRlbmNpZXMnIHdpbGwgcHJvYmFi bHkgd29yayBvbmx5IHdpdGggZXF1YWxpdHkgY2xhdXNlcy4KKyAqIFRPRE8g SWYgd2UgY291bGQgY29tcHV0ZSB3aGF0IGlzIGEgInBlcmZlY3Qgc29sdXRp b24iIG1heWJlIHdlIGNvdWxkCisgKiAgICAgIHRlcm1pbmF0ZSB0aGUgc2Vh cmNoIGFmdGVyIHJlYWNoaW5nIH45MCUgb2YgaXQ/IFNheSwgaWYgd2Uga25l dyB0aGF0IHdlCisgKiAgICAgIGNhbiBjb3ZlciAxMCBjbGF1c2VzIGFuZCBy ZXVzZSA4IGRlcGVuZGVuY2llcywgbWF5YmUgY292ZXJpbmcgOSBjbGF1c2Vz CisgKiAgICAgIGFuZCA3IGRlcGVuZGVuY2llcyB3b3VsZCBiZSBPSz8KICAq Lwotc3RhdGljIE1WU3RhdGlzdGljSW5mbyAqCi1jaG9vc2VfbXZfc3RhdGlz dGljcyhMaXN0ICpzdGF0cywgQml0bWFwc2V0ICphdHRudW1zKQorc3RhdGlj IExpc3QqCitjaG9vc2VfbXZfc3RhdGlzdGljcyhQbGFubmVySW5mbyAqcm9v dCwgSW5kZXggcmVsaWQsIExpc3QgKnN0YXRzLAorCQkJCQkgTGlzdCAqY2xh dXNlcywgTGlzdCAqY29uZGl0aW9ucykKIHsKIAlpbnQgaTsKLQlMaXN0Q2Vs bCAgICpsYzsKKwltdl9zb2x1dGlvbl90ICpiZXN0ID0gTlVMTDsKKwlMaXN0 ICpyZXN1bHQgPSBOSUw7CisKKwlpbnQgbm12c3RhdHM7CisJTVZTdGF0aXN0 aWNJbmZvICptdnN0YXRzOworCisJLyogd2Ugb25seSB3b3JrIHdpdGggTUNW IGxpc3RzIGFuZCBoaXN0b2dyYW1zIGhlcmUgKi8KKwlpbnQgdHlwZSA9IChN Vl9DTEFVU0VfVFlQRV9NQ1YgfCBNVl9DTEFVU0VfVFlQRV9ISVNUKTsKKwor CWJvb2wgICAqY2xhdXNlX2NvdmVyX21hcCA9IE5VTEwsCisJCSAgICpjb25k aXRpb25fY292ZXJfbWFwID0gTlVMTDsKKwlpbnQJICAgKnJ1bGVkX291dCA9 IE5VTEw7CisKKwkvKiBidWlsZCBiaXRtYXBzZXRzIGZvciBhbGwgc3RhdHMg YW5kIGNsYXVzZXMgKi8KKwlCaXRtYXBzZXQgKipzdGF0c19hdHRudW1zOwor CUJpdG1hcHNldCAqKmNsYXVzZXNfYXR0bnVtczsKKwlCaXRtYXBzZXQgKipj b25kaXRpb25zX2F0dG51bXM7CiAKLQlNVlN0YXRpc3RpY0luZm8gKmNob2lj ZSA9IE5VTEw7CisJaW50IG5jbGF1c2VzLCBuY29uZGl0aW9uczsKKwlOb2Rl ICoqIGNsYXVzZXNfYXJyYXk7CisJTm9kZSAqKiBjb25kaXRpb25zX2FycmF5 OwogCi0JaW50IGN1cnJlbnRfbWF0Y2hlcyA9IDE7CQkJCQkJLyogZ29hbCAj MTogbWF4aW1pemUgKi8KLQlpbnQgY3VycmVudF9kaW1zID0gKE1WU1RBVFNf TUFYX0RJTUVOU0lPTlMrMSk7CS8qIGdvYWwgIzI6IG1pbmltaXplICovCisJ LyogY29weSBsaXN0cywgc28gdGhhdCB3ZSBjYW4gZnJlZSB0aGVtIGR1cmlu ZyBlbGltaW5hdGlvbiBlYXNpbHkgKi8KKwljbGF1c2VzID0gbGlzdF9jb3B5 KGNsYXVzZXMpOworCWNvbmRpdGlvbnMgPSBsaXN0X2NvcHkoY29uZGl0aW9u cyk7CisJc3RhdHMgPSBsaXN0X2NvcHkoc3RhdHMpOwogCiAJLyoKLQkgKiBX YWxrIHRocm91Z2ggdGhlIHN0YXRpc3RpY3MgKHNpbXBsZSBhcnJheSB3aXRo IG5tdnN0YXRzIGVsZW1lbnRzKSBhbmQgZm9yCi0JICogZWFjaCBvbmUgY291 bnQgdGhlIHJlZmVyZW5jZWQgYXR0cmlidXRlcyAoZW5jb2RlZCBpbiB0aGUg J2F0dG51bXMnIGJpdG1hcCkuCisJICogUmVkdWNlIHRoZSBvcHRpbWl6YXRp b24gcHJvYmxlbSBzaXplIGFzIG11Y2ggYXMgcG9zc2libGUuCisJICoKKwkg KiBFbGltaW5hdGUgY2xhdXNlcyBhbmQgY29uZGl0aW9ucyBub3QgY292ZXJl ZCBieSBhbnkgc3RhdGlzdGljcywKKwkgKiBvciBzdGF0aXN0aWNzIG5vdCBt YXRjaGluZyBhdCBsZWFzdCB0d28gYXR0cmlidXRlcyAob25lIG9mIHRoZW0K KwkgKiBoYXMgdG8gYmUgaW4gYSByZWd1bGFyIGNsYXVzZSkuCisJICoKKwkg KiBJdCdzIHBvc3NpYmxlIHRoYXQgcmVtb3ZpbmcgYSBzdGF0aXN0aWNzIGlu IG9uZSBpdGVyYXRpb24KKwkgKiBlbGltaW5hdGVzIGNsYXVzZSBpbiB0aGUg bmV4dCBvbmUsIHNvIHdlJ2xsIHJlcGVhdCB0aGlzIHVudGlsIHdlCisJICog ZWxpbWluYXRlIG5vIGNsYXVzZXMvc3RhdHMgaW4gdGhhdCBpdGVyYXRpb24u CisJICoKKwkgKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhZnRlciBlbGltaW5h dGluZyBhIHN0YXRpc3RpY3MgLSBjbGF1c2VzIGFyZQorCSAqIGVsaW1pbmF0 ZWQgZmlyc3QsIHNvIHN0YXRpc3RpY3MgYWx3YXlzIHJlZmxlY3QgdGhhdC4K IAkgKi8KLQlmb3JlYWNoIChsYywgc3RhdHMpCisJd2hpbGUgKHRydWUpCiAJ ewotCQlNVlN0YXRpc3RpY0luZm8gKmluZm8gPSAoTVZTdGF0aXN0aWNJbmZv ICopbGZpcnN0KGxjKTsKLQotCQkvKiBjb2x1bW5zIG1hdGNoaW5nIHRoaXMg c3RhdGlzdGljcyAqLwotCQlpbnQgbWF0Y2hlcyA9IDA7CisJCUxpc3QJICAg KnRtcDsKIAotCQlpbnQydmVjdG9yICogYXR0cnMgPSBpbmZvLT5zdGFrZXlz OwotCQlpbnQJbnVtYXR0cnMgPSBhdHRycy0+ZGltMTsKKwkJQml0bWFwc2V0 ICpjb21wYXRpYmxlX2F0dG51bXMgPSBOVUxMOworCQlCaXRtYXBzZXQgKmNv bmRpdGlvbl9hdHRudW1zICA9IE5VTEw7CisJCUJpdG1hcHNldCAqYWxsX2F0 dG51bXMgPSBOVUxMOwogCi0JCS8qIHNraXAgZGVwZW5kZW5jaWVzLW9ubHkg c3RhdHMgKi8KLQkJaWYgKCEgKGluZm8tPm1jdl9idWlsdCB8fCBpbmZvLT5o aXN0X2J1aWx0KSkKLQkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBDbGF1c2Vz CisJCSAqCisJCSAqIFdhbGsgdGhyb3VnaCBjbGF1c2VzIGFuZCBrZWVwIG9u bHkgdGhvc2UgY292ZXJlZCBieSBhdCBsZWFzdAorCQkgKiBvbmUgb2YgdGhl IHN0YXRpc3RpY3Mgd2Ugc3RpbGwgaGF2ZS4gV2UnbGwgYWxzbyBrZWVwIGlu Zm8KKwkJICogYWJvdXQgYXR0bnVtcyBpbiBjbGF1c2VzICh3aXRob3V0IGNv bmRpdGlvbnMpIHNvIHRoYXQgd2UgY2FuCisJCSAqIGlnbm9yZSBzdGF0cyBj b3ZlcmluZyBqdXN0IGNvbmRpdGlvbnMgKHdoaWNoIGlzIHBvaW50bGVzcyku CisJCSAqLworCQl0bXAgPSBmaWx0ZXJfY2xhdXNlcyhyb290LCByZWxpZCwg dHlwZSwKKwkJCQkJCQkgc3RhdHMsIGNsYXVzZXMsICZjb21wYXRpYmxlX2F0 dG51bXMpOwogCi0JCS8qIGNvdW50IGNvbHVtbnMgY292ZXJlZCBieSB0aGUg aGlzdG9ncmFtICovCi0JCWZvciAoaSA9IDA7IGkgPCBudW1hdHRyczsgaSsr KQotCQkJaWYgKGJtc19pc19tZW1iZXIoYXR0cnMtPnZhbHVlc1tpXSwgYXR0 bnVtcykpCi0JCQkJbWF0Y2hlcysrOworCQkvKiBkaXNjYXJkIHRoZSBvcmln aW5hbCBsaXN0ICovCisJCWxpc3RfZnJlZShjbGF1c2VzKTsKKwkJY2xhdXNl cyA9IHRtcDsKIAogCQkvKgotCQkgKiBVc2UgdGhpcyBzdGF0aXN0aWNzIHdo ZW4gaXQgaW1wcm92ZXMgdGhlIG51bWJlciBvZiBtYXRjaGVzIG9yCi0JCSAq IHdoZW4gaXQgbWF0Y2hlcyB0aGUgc2FtZSBudW1iZXIgb2YgYXR0cmlidXRl cyBidXQgaXMgc21hbGxlci4KKwkJICogQ29uZGl0aW9ucworCQkgKgorCQkg KiBXYWxrIHRocm91Z2ggY2xhdXNlcyBhbmQga2VlcCBvbmx5IHRob3NlIGNv dmVyZWQgYnkgYXQgbGVhc3QKKwkJICogb25lIG9mIHRoZSBzdGF0aXN0aWNz IHdlIHN0aWxsIGhhdmUuIEFsc28sIGNvbGxlY3QgYml0bWFwIG9mCisJCSAq IGF0dHJpYnV0ZXMgc28gdGhhdCB3ZSBjYW4gbWFrZSBzdXJlIHdlIGFkZCBh dCBsZWFzdCBvbmUgbmV3CisJCSAqIGF0dHJpYnV0ZSAoYnkgY29tcGFyaW5n IHdpdGggY2xhdXNlcykuCiAJCSAqLwotCQlpZiAoKG1hdGNoZXMgPiBjdXJy ZW50X21hdGNoZXMpIHx8Ci0JCQkoKG1hdGNoZXMgPT0gY3VycmVudF9tYXRj aGVzKSAmJiAoY3VycmVudF9kaW1zID4gbnVtYXR0cnMpKSkKKwkJaWYgKGNv bmRpdGlvbnMgIT0gTklMKQogCQl7Ci0JCQljaG9pY2UgPSBpbmZvOwotCQkJ Y3VycmVudF9tYXRjaGVzID0gbWF0Y2hlczsKLQkJCWN1cnJlbnRfZGltcyA9 IG51bWF0dHJzOworCQkJdG1wID0gZmlsdGVyX2NsYXVzZXMocm9vdCwgcmVs aWQsIHR5cGUsCisJCQkJCQkJCSBzdGF0cywgY29uZGl0aW9ucywgJmNvbmRp dGlvbl9hdHRudW1zKTsKKworCQkJLyogZGlzY2FyZCB0aGUgb3JpZ2luYWwg bGlzdCAqLworCQkJbGlzdF9mcmVlKGNvbmRpdGlvbnMpOworCQkJY29uZGl0 aW9ucyA9IHRtcDsKIAkJfQotCX0KIAotCXJldHVybiBjaG9pY2U7Ci19CisJ CS8qIGdldCBhIHVuaW9uIG9mIGF0dG51bXMgKGZyb20gY29uZGl0aW9ucyBh bmQgbmV3IGNsYXVzZXMpICovCisJCWFsbF9hdHRudW1zID0gYm1zX3VuaW9u KGNvbXBhdGlibGVfYXR0bnVtcywgY29uZGl0aW9uX2F0dG51bXMpOworCisJ CS8qCisJCSAqIFN0YXRpc2l0aWNzCisJCSAqCisJCSAqIFdhbGsgdGhyb3Vn aCBzdGF0aXN0aWNzIGFuZCBvbmx5IGtlZXAgdGhvc2UgY292ZXJpbmcgYXQg bGVhc3QKKwkJICogb25lIG5ldyBhdHRyaWJ1dGUgKGV4Y2x1ZGluZyBjb25k aXRpb25zKSBhbmQgYXQgdHdvIGF0dHJpYnV0ZXMKKwkJICogaW4gYm90aCBj bGF1c2VzIGFuZCBjb25kaXRpb25zLgorCQkgKi8KKwkJdG1wID0gZmlsdGVy X3N0YXRzKHN0YXRzLCBjb21wYXRpYmxlX2F0dG51bXMsIGFsbF9hdHRudW1z KTsKIAorCQkvKiBpZiB3ZSd2ZSBub3QgZWxpbWluYXRlZCBhbnl0aGluZywg dGVybWluYXRlICovCisJCWlmIChsaXN0X2xlbmd0aChzdGF0cykgPT0gbGlz dF9sZW5ndGgodG1wKSkKKwkJCWJyZWFrOwogCi0vKgotICogVGhpcyBzcGxp dHMgdGhlIGNsYXVzZXMgbGlzdCBpbnRvIHR3byBwYXJ0cyAtIG9uZSBjb250 YWluaW5nIGNsYXVzZXMgdGhhdAotICogd2lsbCBiZSBldmFsdWF0ZWQgdXNp bmcgdGhlIGNob3NlbiBzdGF0aXN0aWNzLCBhbmQgdGhlIHJlbWFpbmluZyBj bGF1c2VzCi0gKiAoZWl0aGVyIG5vbi1tdmNvbXBhdGlibGUsIG9yIG5vdCBy ZWxhdGVkIHRvIHRoZSBoaXN0b2dyYW0pLgotICovCi1zdGF0aWMgTGlzdCAq Ci1jbGF1c2VsaXN0X212X3NwbGl0KFBsYW5uZXJJbmZvICpyb290LCBJbmRl eCByZWxpZCwKLQkJCQkJTGlzdCAqY2xhdXNlcywgTGlzdCAqKm12Y2xhdXNl cywKLQkJCQkJTVZTdGF0aXN0aWNJbmZvICptdnN0YXRzLCBpbnQgdHlwZXMp Ci17Ci0JaW50IGk7Ci0JTGlzdENlbGwgKmw7Ci0JTGlzdAkgKm5vbl9tdmNs YXVzZXMgPSBOSUw7CisJCS8qIHdvcmsgb25seSB3aXRoIGZpbHRlcmVkIHN0 YXRpc3RpY3MgZnJvbSBub3cgKi8KKwkJbGlzdF9mcmVlKHN0YXRzKTsKKwkJ c3RhdHMgPSB0bXA7CisJfQogCi0JLyogRklYTUUgaXMgdGhlcmUgYSBiZXR0 ZXIgd2F5IHRvIGdldCBpbmZvIG9uIGludDJ2ZWN0b3I/ICovCi0JaW50MnZl Y3RvciAqIGF0dHJzID0gbXZzdGF0cy0+c3Rha2V5czsKLQlpbnQJbnVtYXR0 cnMgPSBtdnN0YXRzLT5zdGFrZXlzLT5kaW0xOworCS8qIG9ubHkgZG8gdGhl IG9wdGltaXphdGlvbiBpZiB3ZSBoYXZlIGNsYXVzZXMvc3RhdGlzdGljcyAq LworCWlmICgobGlzdF9sZW5ndGgoc3RhdHMpID09IDApIHx8IChsaXN0X2xl bmd0aChjbGF1c2VzKSA9PSAwKSkKKwkJcmV0dXJuIE5VTEw7CiAKLQlCaXRt YXBzZXQgKm12YXR0bnVtcyA9IE5VTEw7CisJLyogcmVtb3ZlIHJlZHVuZGFu dCBzdGF0cyAoc3RhdHMgY292ZXJlZCBieSBhbm90aGVyIHN0YXRzKSAqLwor CXN0YXRzID0gZmlsdGVyX3JlZHVuZGFudF9zdGF0cyhzdGF0cywgY2xhdXNl cywgY29uZGl0aW9ucyk7CiAKLQkvKiBidWlsZCBiaXRtYXAgb2YgYXR0cmli dXRlcywgc28gd2UgY2FuIGRvIGJtc19pc19zdWJzZXQgbGF0ZXIgKi8KLQlm b3IgKGkgPSAwOyBpIDwgbnVtYXR0cnM7IGkrKykKLQkJbXZhdHRudW1zID0g Ym1zX2FkZF9tZW1iZXIobXZhdHRudW1zLCBhdHRycy0+dmFsdWVzW2ldKTsK KwkvKgorCSAqIFRPRE8gV2Ugc2hvdWxkIHNvcnQgdGhlIHN0YXRzIHRvIG1h a2UgdGhlIG9yZGVyIGRldGVybWluaXN0aWMsCisJICogICAgICBvdGhlcndp c2Ugd2UgbWF5IGdldCBkaWZmZXJlbnQgZXN0aW1hdGVzIG9uIGRpZmZlcmVu dAorCSAqICAgICAgZXhlY3V0aW9ucyAtIGlmIHRoZXJlIGFyZSBtdWx0aXBs ZSAiZXF1YWxseSBnb29kIiBzb2x1dGlvbnMsCisJICogICAgICB3ZSdsbCBr ZWVwIHRoZSBmaXJzdCBzb2x1dGlvbiB3ZSBzZWUuCisJICoKKwkgKiAgICAg IFNvcnRpbmcgYnkgT0lEIHByb2JhYmx5IGlzIG5vdCB0aGUgcmlnaHQgc29s dXRpb24gdGhvdWdoLAorCSAqICAgICAgYmVjYXVzZSB3ZSdkIGxpa2UgaXQg dG8gYmUgc29tZWhvdyByZXByb2R1Y2libGUsCisJICogICAgICBpcnJlc3Bl Y3RlZGx5IG9mIHRoZSBvcmRlciBvZiBBREQgU1RBVElTVElDUyBjb21tYW5k cy4KKwkgKiAgICAgIFNvIG1heWJlIHN0YXRrZXlzPworCSAqLworCW12c3Rh dHMgPSBtYWtlX3N0YXRzX2FycmF5KHN0YXRzLCAmbm12c3RhdHMpOworCXN0 YXRzX2F0dG51bXMgPSBtYWtlX3N0YXRzX2F0dG51bXMobXZzdGF0cywgbm12 c3RhdHMpOwogCi0JLyogZXJhc2UgdGhlIGxpc3Qgb2YgbXYtY29tcGF0aWJs ZSBjbGF1c2VzICovCi0JKm12Y2xhdXNlcyA9IE5JTDsKKwkvKiBjb2xsZWN0 IGNsYXVzZXMgYW4gYml0bWFwIG9mIGF0dG51bXMgKi8KKwljbGF1c2VzX2Fy cmF5ID0gbWFrZV9jbGF1c2VzX2FycmF5KGNsYXVzZXMsICZuY2xhdXNlcyk7 CisJY2xhdXNlc19hdHRudW1zID0gbWFrZV9jbGF1c2VzX2F0dG51bXMocm9v dCwgcmVsaWQsIHR5cGUsCisJCQkJCQkJCQkJICAgY2xhdXNlc19hcnJheSwg bmNsYXVzZXMpOwogCi0JZm9yZWFjaCAobCwgY2xhdXNlcykKLQl7Ci0JCWJv b2wJCW1hdGNoID0gZmFsc2U7CS8qIGJ5IGRlZmF1bHQgbm90IG12LWNvbXBh dGlibGUgKi8KLQkJQml0bWFwc2V0CSphdHRudW1zID0gTlVMTDsKLQkJTm9k ZQkgICAqY2xhdXNlID0gKE5vZGUgKikgbGZpcnN0KGwpOworCS8qIGNvbGxl Y3QgY29uZGl0aW9ucyBhbmQgYml0bWFwIG9mIGF0dG51bXMgKi8KKwljb25k aXRpb25zX2FycmF5ID0gbWFrZV9jbGF1c2VzX2FycmF5KGNvbmRpdGlvbnMs ICZuY29uZGl0aW9ucyk7CisJY29uZGl0aW9uc19hdHRudW1zID0gbWFrZV9j bGF1c2VzX2F0dG51bXMocm9vdCwgcmVsaWQsIHR5cGUsCisJCQkJCQkJCQkJ CSAgY29uZGl0aW9uc19hcnJheSwgbmNvbmRpdGlvbnMpOwogCi0JCWlmIChj bGF1c2VfaXNfbXZfY29tcGF0aWJsZShjbGF1c2UsIHJlbGlkLCAmYXR0bnVt cywgdHlwZXMpKQorCS8qCisJICogQnVpbGQgYml0bWFwcyB3aXRoIGluZm8g YWJvdXQgd2hpY2ggY2xhdXNlcy9jb25kaXRpb25zIGFyZQorCSAqIGNvdmVy ZWQgYnkgZWFjaCBzdGF0aXN0aWNzIChzbyB0aGF0IHdlIGRvbid0IG5lZWQg dG8gY2FsbCB0aGUKKwkgKiBibXNfaXNfc3Vic2V0IG92ZXIgYW5kIG92ZXIg YWdhaW4pLgorCSAqLworCWNsYXVzZV9jb3Zlcl9tYXAgPSBtYWtlX2NvdmVy X21hcChzdGF0c19hdHRudW1zLCBubXZzdGF0cywKKwkJCQkJCQkJCSAgY2xh dXNlc19hdHRudW1zLCBuY2xhdXNlcyk7CisKKwljb25kaXRpb25fY292ZXJf bWFwCT0gbWFrZV9jb3Zlcl9tYXAoc3RhdHNfYXR0bnVtcywgbm12c3RhdHMs CisJCQkJCQkJCQkJIGNvbmRpdGlvbnNfYXR0bnVtcywgbmNvbmRpdGlvbnMp OworCisJcnVsZWRfb3V0ID0gIChpbnQqKXBhbGxvYzAobm12c3RhdHMgKiBz aXplb2YoaW50KSk7CisKKwkvKiBubyBzdGF0cyBhcmUgcnVsZWQgb3V0IGJ5 IGRlZmF1bHQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm12c3RhdHM7IGkrKykK KwkJcnVsZWRfb3V0W2ldID0gLTE7CisKKwkvKiBkbyB0aGUgb3B0aW1pemF0 aW9uIGl0c2VsZiAqLworCWlmIChtdnN0YXRfc2VhcmNoX3R5cGUgPT0gTVZT VEFUX1NFQVJDSF9FWEhBVVNUSVZFKQorCQljaG9vc2VfbXZfc3RhdGlzdGlj c19leGhhdXN0aXZlKHJvb3QsIDAsCisJCQkJCQkJCQkgICBubXZzdGF0cywg bXZzdGF0cywgc3RhdHNfYXR0bnVtcywKKwkJCQkJCQkJCSAgIG5jbGF1c2Vz LCBjbGF1c2VzX2FycmF5LCBjbGF1c2VzX2F0dG51bXMsCisJCQkJCQkJCQkg ICBuY29uZGl0aW9ucywgY29uZGl0aW9uc19hcnJheSwgY29uZGl0aW9uc19h dHRudW1zLAorCQkJCQkJCQkJICAgY2xhdXNlX2NvdmVyX21hcCwgY29uZGl0 aW9uX2NvdmVyX21hcCwKKwkJCQkJCQkJCSAgIHJ1bGVkX291dCwgTlVMTCwg JmJlc3QpOworCWVsc2UKKwkJY2hvb3NlX212X3N0YXRpc3RpY3NfZ3JlZWR5 KHJvb3QsIDAsCisJCQkJCQkJCQkgICBubXZzdGF0cywgbXZzdGF0cywgc3Rh dHNfYXR0bnVtcywKKwkJCQkJCQkJCSAgIG5jbGF1c2VzLCBjbGF1c2VzX2Fy cmF5LCBjbGF1c2VzX2F0dG51bXMsCisJCQkJCQkJCQkgICBuY29uZGl0aW9u cywgY29uZGl0aW9uc19hcnJheSwgY29uZGl0aW9uc19hdHRudW1zLAorCQkJ CQkJCQkJICAgY2xhdXNlX2NvdmVyX21hcCwgY29uZGl0aW9uX2NvdmVyX21h cCwKKwkJCQkJCQkJCSAgIHJ1bGVkX291dCwgTlVMTCwgJmJlc3QpOworCisJ LyogY3JlYXRlIGEgbGlzdCBvZiBzdGF0aXN0aWNzIGZyb20gdGhlIGFycmF5 ICovCisJaWYgKGJlc3QgIT0gTlVMTCkKKwl7CisJCWZvciAoaSA9IDA7IGkg PCBiZXN0LT5uc3RhdHM7IGkrKykKIAkJewotCQkJLyogYXJlIGFsbCB0aGUg YXR0cmlidXRlcyBwYXJ0IG9mIHRoZSBzZWxlY3RlZCBzdGF0cz8gKi8KLQkJ CWlmIChibXNfaXNfc3Vic2V0KGF0dG51bXMsIG12YXR0bnVtcykpCi0JCQkJ bWF0Y2ggPSB0cnVlOworCQkJTVZTdGF0aXN0aWNJbmZvICppbmZvID0gbWFr ZU5vZGUoTVZTdGF0aXN0aWNJbmZvKTsKKwkJCW1lbWNweShpbmZvLCAmbXZz dGF0c1tiZXN0LT5zdGF0c1tpXV0sIHNpemVvZihNVlN0YXRpc3RpY0luZm8p KTsKKwkJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBpbmZvKTsKIAkJfQog Ci0JCS8qCi0JCSAqIFRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgc2VsZWN0ZWQg c3RhdHMsIHNvIHB1dCBpdCB0byB0aGUgbGlzdCBvZgotCQkgKiBtdi1jb21w YXRpYmxlIGNsYXVzZXMuIE90aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgbGlz dCBvZiAncmVndWxhcicKLQkJICogY2xhdXNlcyAodGhhdCBtYXkgYmUgc2Vs ZWN0ZWQgbGF0ZXIpLgotCQkgKi8KLQkJaWYgKG1hdGNoKQotCQkJKm12Y2xh dXNlcyA9IGxhcHBlbmQoKm12Y2xhdXNlcywgY2xhdXNlKTsKLQkJZWxzZQot CQkJbm9uX212Y2xhdXNlcyA9IGxhcHBlbmQobm9uX212Y2xhdXNlcywgY2xh dXNlKTsKKwkJcGZyZWUoYmVzdCk7CiAJfQogCi0JLyoKLQkgKiBQZXJmb3Jt IHJlZ3VsYXIgZXN0aW1hdGlvbiB1c2luZyB0aGUgY2xhdXNlcyBpbmNvbXBh dGlibGUgd2l0aCB0aGUgY2hvc2VuCi0JICogaGlzdG9ncmFtIChvciBNViBz dGF0cyBpbiBnZW5lcmFsKS4KLQkgKi8KLQlyZXR1cm4gbm9uX212Y2xhdXNl czsKKwkvKiBjbGVhbnVwIChtYXliZSBsZWF2ZSBpdCB1cCB0byB0aGUgbWVt b3J5IGNvbnRleHQ/KSAqLworCWZvciAoaSA9IDA7IGkgPCBubXZzdGF0czsg aSsrKQorCQlibXNfZnJlZShzdGF0c19hdHRudW1zW2ldKTsKKworCWZvciAo aSA9IDA7IGkgPCBuY2xhdXNlczsgaSsrKQorCQlibXNfZnJlZShjbGF1c2Vz X2F0dG51bXNbaV0pOworCisJZm9yIChpID0gMDsgaSA8IG5jb25kaXRpb25z OyBpKyspCisJCWJtc19mcmVlKGNvbmRpdGlvbnNfYXR0bnVtc1tpXSk7CisK KwlwZnJlZShzdGF0c19hdHRudW1zKTsKKwlwZnJlZShjbGF1c2VzX2F0dG51 bXMpOworCXBmcmVlKGNvbmRpdGlvbnNfYXR0bnVtcyk7CiAKKwlwZnJlZShj bGF1c2VzX2FycmF5KTsKKwlwZnJlZShjb25kaXRpb25zX2FycmF5KTsKKwlw ZnJlZShjbGF1c2VfY292ZXJfbWFwKTsKKwlwZnJlZShjb25kaXRpb25fY292 ZXJfbWFwKTsKKwlwZnJlZShydWxlZF9vdXQpOworCXBmcmVlKG12c3RhdHMp OworCisJbGlzdF9mcmVlKGNsYXVzZXMpOworCWxpc3RfZnJlZShjb25kaXRp b25zKTsKKwlsaXN0X2ZyZWUoc3RhdHMpOworCisJcmV0dXJuIHJlc3VsdDsK IH0KIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTE0NzQsNiArMjY4Niw3IEBAIGNs YXVzZV9pc19tdl9jb21wYXRpYmxlKE5vZGUgKmNsYXVzZSwgSW5kZXggcmVs aWQsIEJpdG1hcHNldCAqKmF0dG51bXMsIGludCB0eXBlCiAJcmV0dXJuIHRy dWU7CiB9CiAKKwogLyoKICAqIGNvbGxlY3QgYXR0bnVtcyBmcm9tIGZ1bmN0 aW9uYWwgZGVwZW5kZW5jaWVzCiAgKgpAQCAtMjAyMiw2ICszMjM1LDI0IEBA IGNsYXVzZWxpc3RfYXBwbHlfZGVwZW5kZW5jaWVzKFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpjbGF1c2VzLAogICogQ2hlY2sgdGhhdCB0aGVyZSBhcmUg c3RhdHMgd2l0aCBhdCBsZWFzdCBvbmUgb2YgdGhlIHJlcXVlc3RlZCB0eXBl cy4KICAqLwogc3RhdGljIGJvb2wKK3N0YXRzX3R5cGVfbWF0Y2hlcyhNVlN0 YXRpc3RpY0luZm8gKnN0YXQsIGludCB0eXBlKQoreworCWlmICgodHlwZSAm IE1WX0NMQVVTRV9UWVBFX0ZERVApICYmIHN0YXQtPmRlcHNfYnVpbHQpCisJ CXJldHVybiB0cnVlOworCisJaWYgKCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVf TUNWKSAmJiBzdGF0LT5tY3ZfYnVpbHQpCisJCXJldHVybiB0cnVlOworCisJ aWYgKCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVfSElTVCkgJiYgc3RhdC0+aGlz dF9idWlsdCkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9 CisKKy8qCisgKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBzdGF0cyB3aXRoIGF0 IGxlYXN0IG9uZSBvZiB0aGUgcmVxdWVzdGVkIHR5cGVzLgorICovCitzdGF0 aWMgYm9vbAogaGFzX3N0YXRzKExpc3QgKnN0YXRzLCBpbnQgdHlwZSkKIHsK IAlMaXN0Q2VsbCAgICpzOwpAQCAtMjAzMCwxMyArMzI2MSw4IEBAIGhhc19z dGF0cyhMaXN0ICpzdGF0cywgaW50IHR5cGUpCiAJewogCQlNVlN0YXRpc3Rp Y0luZm8JKnN0YXQgPSAoTVZTdGF0aXN0aWNJbmZvICopbGZpcnN0KHMpOwog Ci0JCWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBFX0ZERVApICYmIHN0YXQt PmRlcHNfYnVpbHQpCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQlpZiAoKHR5cGUg JiBNVl9DTEFVU0VfVFlQRV9NQ1YpICYmIHN0YXQtPm1jdl9idWlsdCkKLQkJ CXJldHVybiB0cnVlOwotCi0JCWlmICgodHlwZSAmIE1WX0NMQVVTRV9UWVBF X0hJU1QpICYmIHN0YXQtPmhpc3RfYnVpbHQpCisJCS8qIHRlcm1pbmF0ZSBp ZiB3ZSd2ZSBmb3VuZCBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgc3RhdGlzdGlj cyAqLworCQlpZiAoc3RhdHNfdHlwZV9tYXRjaGVzKHN0YXQsIHR5cGUpKQog CQkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC0yMDg3LDIyICszMzEzLDI2IEBA IGZpbmRfc3RhdHMoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJlbGlkKQog ICogICAgICBhcyB0aGUgY2xhdXNlcyBhcmUgcHJvY2Vzc2VkIChhbmQgc2tp cCBpdGVtcyB0aGF0IGFyZSAnbWF0Y2gnKS4KICAqLwogc3RhdGljIFNlbGVj dGl2aXR5Ci1jbGF1c2VsaXN0X212X3NlbGVjdGl2aXR5X21jdmxpc3QoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCi0JCQkJCQkJCSAgTVZT dGF0aXN0aWNJbmZvICptdnN0YXRzLCBib29sICpmdWxsbWF0Y2gsCi0JCQkJ CQkJCSAgU2VsZWN0aXZpdHkgKmxvd3NlbCkKK2NsYXVzZWxpc3RfbXZfc2Vs ZWN0aXZpdHlfbWN2bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTVZTdGF0aXN0 aWNJbmZvICptdnN0YXRzLAorCQkJCQkJCQkgIExpc3QgKmNsYXVzZXMsIExp c3QgKmNvbmRpdGlvbnMsIGJvb2wgaXNfb3IsCisJCQkJCQkJCSAgYm9vbCAq ZnVsbG1hdGNoLCBTZWxlY3Rpdml0eSAqbG93c2VsKQogewogCWludCBpOwog CVNlbGVjdGl2aXR5IHMgPSAwLjA7CisJU2VsZWN0aXZpdHkgdCA9IDAuMDsK IAlTZWxlY3Rpdml0eSB1ID0gMC4wOwogCiAJTUNWTGlzdCBtY3ZsaXN0ID0g TlVMTDsKKwogCWludAlubWF0Y2hlcyA9IDA7CisJaW50CW5jb25kaXRpb25z ID0gMDsKIAogCS8qIG1hdGNoL21pc21hdGNoIGJpdG1hcCBmb3IgZWFjaCBN Q1YgaXRlbSAqLwogCWNoYXIgKiBtYXRjaGVzID0gTlVMTDsKKwljaGFyICog Y29uZGl0aW9uX21hdGNoZXMgPSBOVUxMOwogCiAJQXNzZXJ0KGNsYXVzZXMg IT0gTklMKTsKLQlBc3NlcnQobGlzdF9sZW5ndGgoY2xhdXNlcykgPj0gMik7 CisJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNsYXVzZXMpID49IDEpOwogCiAJLyog dGhlcmUncyBubyBNQ1YgbGlzdCBidWlsdCB5ZXQgKi8KIAlpZiAoISBtdnN0 YXRzLT5tY3ZfYnVpbHQpCkBAIC0yMTEzLDMyICszMzQzLDg1IEBAIGNsYXVz ZWxpc3RfbXZfc2VsZWN0aXZpdHlfbWN2bGlzdChQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqY2xhdXNlcywKIAlBc3NlcnQobWN2bGlzdCAhPSBOVUxMKTsK IAlBc3NlcnQobWN2bGlzdC0+bml0ZW1zID4gMCk7CiAKLQkvKiBieSBkZWZh dWx0IGFsbCB0aGUgTUNWIGl0ZW1zIG1hdGNoIHRoZSBjbGF1c2VzIGZ1bGx5 ICovCi0JbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbWN2bGlz dC0+bml0ZW1zKTsKLQltZW1zZXQobWF0Y2hlcywgTVZTVEFUU19NQVRDSF9G VUxMLCBzaXplb2YoY2hhcikqbWN2bGlzdC0+bml0ZW1zKTsKLQogCS8qIG51 bWJlciBvZiBtYXRjaGluZyBNQ1YgaXRlbXMgKi8KIAlubWF0Y2hlcyA9IG1j dmxpc3QtPm5pdGVtczsKKwluY29uZGl0aW9ucyA9IG1jdmxpc3QtPm5pdGVt czsKKworCS8qCisJICogQml0bWFwIG9mIGJ1Y2tldCBtYXRjaGVzIChtaXNt YXRjaCwgcGFydGlhbCwgZnVsbCkuCisJICoKKwkgKiBGb3IgQU5EIGNsYXVz ZXMgYWxsIGJ1Y2tldHMgbWF0Y2ggKGFuZCB3ZSdsbCBlbGltaW5hdGUgdGhl bSkuCisJICogRm9yIE9SICBjbGF1c2VzIG5vICBidWNrZXRzIG1hdGNoIChh bmQgd2UnbGwgYWRkIHRoZW0pLgorCSAqCisJICogV2Ugb25seSBuZWVkIHRv IGRvIHRoZSBtZW1zZXQgZm9yIEFORCBjbGF1c2VzIChmb3IgT1IgY2xhdXNl cworCSAqIGl0J3MgYWxyZWFkeSBzZXQgY29ycmVjdGx5IGJ5IHRoZSBwYWxs b2MwKS4KKwkgKi8KKwltYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikg KiBubWF0Y2hlcyk7CisKKwlpZiAoISBpc19vcikgLyogQU5ELWNsYXVzZSAq LworCQltZW1zZXQobWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXpl b2YoY2hhcikqbm1hdGNoZXMpOwogCisJLyogQ29uZGl0aW9ucyBhcmUgdHJl YXRlZCBhcyBBTkQgY2xhdXNlLCBzbyBtYXRjaCBieSBkZWZhdWx0LiAqLwor CWNvbmRpdGlvbl9tYXRjaGVzID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBu Y29uZGl0aW9ucyk7CisJbWVtc2V0KGNvbmRpdGlvbl9tYXRjaGVzLCBNVlNU QVRTX01BVENIX0ZVTEwsIHNpemVvZihjaGFyKSpuY29uZGl0aW9ucyk7CisK KwkvKgorCSAqIGJ1aWxkIHRoZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBjb25k aXRpb25zIChjb25kaXRpb25zIGFyZSBhbHdheXMKKwkgKiBjb25uZWN0ZWQg YnkgQU5EKQorCSAqLworCWlmIChjb25kaXRpb25zICE9IE5JTCkKKwkJbmNv bmRpdGlvbnMgPSB1cGRhdGVfbWF0Y2hfYml0bWFwX21jdmxpc3Qocm9vdCwg Y29uZGl0aW9ucywKKwkJCQkJCQkJCSAgIG12c3RhdHMtPnN0YWtleXMsIG1j dmxpc3QsCisJCQkJCQkJCQkgICBuY29uZGl0aW9ucywgY29uZGl0aW9uX21h dGNoZXMsCisJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxtYXRjaCwgZmFsc2Up OworCisJLyoKKwkgKiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUg ZXN0aW1hdGVkIGNsYXVzZXMKKwkgKgorCSAqIFRPRE8gVGhpcyBldmFsdWF0 ZXMgdGhlIGNsYXVzZXMgZm9yIGFsbCBNQ1YgaXRlbXMsIGV2ZW4gdGhvc2UK KwkgKiAgICAgIHJ1bGVkIG91dCBieSB0aGUgY29uZGl0aW9ucy4gVGhlIGZp bmFsIHJlc3VsdCBzaG91bGQgYmUgdGhlCisJICogICAgICBzYW1lLCBidXQg aXQgbWlnaHQgYmUgZmFzdGVyLgorCSAqLwogCW5tYXRjaGVzID0gdXBkYXRl X21hdGNoX2JpdG1hcF9tY3ZsaXN0KHJvb3QsIGNsYXVzZXMsCiAJCQkJCQkJ CQkJICAgbXZzdGF0cy0+c3Rha2V5cywgbWN2bGlzdCwKLQkJCQkJCQkJCQkg ICBubWF0Y2hlcywgbWF0Y2hlcywKLQkJCQkJCQkJCQkgICBsb3dzZWwsIGZ1 bGxtYXRjaCwgZmFsc2UpOworCQkJCQkJCQkJCSAgICgoaXNfb3IpID8gMCA6 IG5tYXRjaGVzKSwgbWF0Y2hlcywKKwkJCQkJCQkJCQkgICBsb3dzZWwsIGZ1 bGxtYXRjaCwgaXNfb3IpOwogCiAJLyogc3VtIGZyZXF1ZW5jaWVzIGZvciBh bGwgdGhlIG1hdGNoaW5nIE1DViBpdGVtcyAqLwogCWZvciAoaSA9IDA7IGkg PCBtY3ZsaXN0LT5uaXRlbXM7IGkrKykKIAl7Ci0JCS8qIHVzZWQgdG8gJ3Nj YWxlJyBmb3IgTUNWIGxpc3RzIG5vdCBjb3ZlcmluZyBhbGwgdHVwbGVzICov CisJCS8qCisJCSAqIEZpbmQgb3V0IHdoYXQgcGFydCBvZiB0aGUgZGF0YSBp cyBjb3ZlcmVkIGJ5IHRoZSBNQ1YgbGlzdCwKKwkJICogc28gdGhhdCB3ZSBj YW4gJ3NjYWxlJyB0aGUgc2VsZWN0aXZpdHkgcHJvcGVybHkgKGUuZy4gd2hl bgorCQkgKiBvbmx5IDUwJSBvZiB0aGUgc2FtcGxlIGl0ZW1zIGdvdCBpbnRv IHRoZSBNQ1YsIGFuZCB0aGUgcmVzdAorCQkgKiBpcyBlaXRoZXIgaW4gYSBo aXN0b2dyYW0sIG9yIG5vdCBjb3ZlcmVkIGJ5IHN0YXRzKS4KKwkJICoKKwkJ ICogVE9ETyBUaGlzIG1pZ2h0IGJlIGhhbmRsZWQgYnkga2VlcGluZyBhIGds b2JhbCAiZnJlcXVlbmN5IgorCQkgKiAgICAgIGZvciB0aGUgd2hvbGUgbGlz dCwgd2hpY2ggbWlnaHQgc2F2ZSB1cyBhIGJpdCBvZiB0aW1lCisJCSAqICAg ICAgc3BlbnQgb24gYWNjZXNzaW5nIHRoZSBub3QtbWF0Y2hpbmcgcGFydCBv ZiB0aGUgTUNWIGxpc3QuCisJCSAqICAgICAgQWx0aG91Z2ggaXQncyBsaWtl bHkgaW4gYSBjYWNoZSwgc28gaXQncyB2ZXJ5IGZhc3QuCisJCSAqLwogCQl1 ICs9IG1jdmxpc3QtPml0ZW1zW2ldLT5mcmVxdWVuY3k7CiAKKwkJLyogc2tp dCBNQ1YgaXRlbXMgbm90IG1hdGNoaW5nIHRoZSBjb25kaXRpb25zICovCisJ CWlmIChjb25kaXRpb25fbWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX05P TkUpCisJCQljb250aW51ZTsKKwogCQlpZiAobWF0Y2hlc1tpXSAhPSBNVlNU QVRTX01BVENIX05PTkUpCiAJCQlzICs9IG1jdmxpc3QtPml0ZW1zW2ldLT5m cmVxdWVuY3k7CisKKwkJdCArPSBtY3ZsaXN0LT5pdGVtc1tpXS0+ZnJlcXVl bmN5OwogCX0KIAogCXBmcmVlKG1hdGNoZXMpOworCXBmcmVlKGNvbmRpdGlv bl9tYXRjaGVzKTsKIAlwZnJlZShtY3ZsaXN0KTsKIAotCXJldHVybiBzKnU7 CisJLyogbm8gY29uZGl0aW9uIG1hdGNoZXMgKi8KKwlpZiAodCA9PSAwLjAp CisJCXJldHVybiAoU2VsZWN0aXZpdHkpMC4wOworCisJcmV0dXJuIChzIC8g dCkgKiB1OwogfQogCiAvKgpAQCAtMjM2OSw2NCArMzY1Miw1NyBAQCB1cGRh dGVfbWF0Y2hfYml0bWFwX21jdmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCiAJCQkJfQogCQkJfQogCQl9Ci0JCWVsc2UgaWYgKG9y X2NsYXVzZShjbGF1c2UpIHx8IGFuZF9jbGF1c2UoY2xhdXNlKSkKKwkJZWxz ZSBpZiAob3JfY2xhdXNlKGNsYXVzZSkgfHwgYW5kX2NsYXVzZShjbGF1c2Up IHx8IG5vdF9jbGF1c2UoY2xhdXNlKSkKIAkJewogCQkJLyogQU5EL09SIGNs YXVzZSwgd2l0aCBhbGwgY2xhdXNlcyBjb21wYXRpYmxlIHdpdGggdGhlIHNl bGVjdGVkIE1WIHN0YXQgKi8KIAogCQkJaW50CQkJaTsKLQkJCUJvb2xFeHBy ICAgKm9yY2xhdXNlICA9ICgoQm9vbEV4cHIqKWNsYXVzZSk7Ci0JCQlMaXN0 CSAgICpvcmNsYXVzZXMgPSBvcmNsYXVzZS0+YXJnczsKKwkJCUxpc3QJICAg KnRtcF9jbGF1c2VzID0gKChCb29sRXhwciopY2xhdXNlKS0+YXJnczsKIAog CQkJLyogbWF0Y2gvbWlzbWF0Y2ggYml0bWFwIGZvciBlYWNoIE1DViBpdGVt ICovCi0JCQlpbnQJb3Jfbm1hdGNoZXMgPSAwOwotCQkJY2hhciAqIG9yX21h dGNoZXMgPSBOVUxMOworCQkJaW50CXRtcF9ubWF0Y2hlcyA9IDA7CisJCQlj aGFyICogdG1wX21hdGNoZXMgPSBOVUxMOwogCi0JCQlBc3NlcnQob3JjbGF1 c2VzICE9IE5JTCk7Ci0JCQlBc3NlcnQobGlzdF9sZW5ndGgob3JjbGF1c2Vz KSA+PSAyKTsKKwkJCUFzc2VydCh0bXBfY2xhdXNlcyAhPSBOSUwpOworCQkJ QXNzZXJ0KChsaXN0X2xlbmd0aCh0bXBfY2xhdXNlcykgPj0gMikgfHwgKG5v dF9jbGF1c2UoY2xhdXNlKSAmJiAobGlzdF9sZW5ndGgodG1wX2NsYXVzZXMp PT0xKSkpOwogCiAJCQkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgTUNWIGl0ZW1z ICovCi0JCQlvcl9ubWF0Y2hlcyA9IG1jdmxpc3QtPm5pdGVtczsKKwkJCXRt cF9ubWF0Y2hlcyA9IChvcl9jbGF1c2UoY2xhdXNlKSkgPyAwIDogbWN2bGlz dC0+bml0ZW1zOwogCiAJCQkvKiBieSBkZWZhdWx0IG5vbmUgb2YgdGhlIE1D ViBpdGVtcyBtYXRjaGVzIHRoZSBjbGF1c2VzICovCi0JCQlvcl9tYXRjaGVz ID0gcGFsbG9jMChzaXplb2YoY2hhcikgKiBvcl9ubWF0Y2hlcyk7CisJCQl0 bXBfbWF0Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogbWN2bGlzdC0+ bml0ZW1zKTsKIAotCQkJaWYgKG9yX2NsYXVzZShjbGF1c2UpKQotCQkJewot CQkJCS8qIE9SIGNsYXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5p dGlhbGx5ICovCi0JCQkJbWVtc2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFU Q0hfTk9ORSwgc2l6ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsKLQkJCQlvcl9u bWF0Y2hlcyA9IDA7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogQU5E IGNsYXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICov Ci0JCQkJbWVtc2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwg c2l6ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsKLQkJCX0KKwkJCS8qIEFORCAo YW5kIE5PVCkgY2xhdXNlcyBhc3N1bWUgZXZlcnl0aGluZyBtYXRjaGVzLCBp bml0aWFsbHkgKi8KKwkJCWlmICghIG9yX2NsYXVzZShjbGF1c2UpKQorCQkJ CW1lbXNldCh0bXBfbWF0Y2hlcywgTVZTVEFUU19NQVRDSF9GVUxMLCBzaXpl b2YoY2hhcikqbWN2bGlzdC0+bml0ZW1zKTsKIAogCQkJLyogYnVpbGQgdGhl IG1hdGNoIGJpdG1hcCBmb3IgdGhlIE9SLWNsYXVzZXMgKi8KLQkJCW9yX25t YXRjaGVzID0gdXBkYXRlX21hdGNoX2JpdG1hcF9tY3ZsaXN0KHJvb3QsIG9y Y2xhdXNlcywKKwkJCXRtcF9ubWF0Y2hlcyA9IHVwZGF0ZV9tYXRjaF9iaXRt YXBfbWN2bGlzdChyb290LCB0bXBfY2xhdXNlcywKIAkJCQkJCQkJCSAgIHN0 YWtleXMsIG1jdmxpc3QsCi0JCQkJCQkJCQkgICBvcl9ubWF0Y2hlcywgb3Jf bWF0Y2hlcywKKwkJCQkJCQkJCSAgIHRtcF9ubWF0Y2hlcywgdG1wX21hdGNo ZXMsCiAJCQkJCQkJCQkgICBsb3dzZWwsIGZ1bGxtYXRjaCwgb3JfY2xhdXNl KGNsYXVzZSkpOwogCiAJCQkvKiBtZXJnZSB0aGUgYml0bWFwIGludG8gdGhl IGV4aXN0aW5nIG9uZSovCiAJCQlmb3IgKGkgPSAwOyBpIDwgbWN2bGlzdC0+ bml0ZW1zOyBpKyspCiAJCQl7CisJCQkJLyogaWYgdGhpcyBpcyBhIE5PVCBj bGF1c2UsIHdlIG5lZWQgdG8gaW52ZXJ0IHRoZSByZXN1bHRzIGZpcnN0ICov CisJCQkJaWYgKG5vdF9jbGF1c2UoY2xhdXNlKSkKKwkJCQkJdG1wX21hdGNo ZXNbaV0gPSAoTVZTVEFUU19NQVRDSF9GVUxMIC0gdG1wX21hdGNoZXNbaV0p OworCiAJCQkJLyoKIAkJCQkgKiBUbyBBTkQtbWVyZ2UgdGhlIGJpdG1hcHMs IGEgTUlOKCkgc2VtYW50aWNzIGlzIHVzZWQuCiAJCQkJICogRm9yIE9SLW1l cmdlLCB1c2UgTUFYKCkuCiAJCQkJICoKIAkJCQkgKiBGSVhNRSB0aGlzIGRv ZXMgbm90IGRlY3JlYXNlIHRoZSBudW1iZXIgb2YgbWF0Y2hlcwogCQkJCSAq LwotCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgb3JfbWF0Y2hlc1tp XSwgaXNfb3IpOworCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwgdG1w X21hdGNoZXNbaV0sIGlzX29yKTsKIAkJCX0KIAotCQkJcGZyZWUob3JfbWF0 Y2hlcyk7CisJCQlwZnJlZSh0bXBfbWF0Y2hlcyk7CiAKIAkJfQogCQllbHNl Ci0JCXsKIAkJCWVsb2coRVJST1IsICJ1bmtub3duIGNsYXVzZSB0eXBlOiAl ZCIsIGNsYXVzZS0+dHlwZSk7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMjQ4NCwx NSArMzc2MCwxOCBAQCB1cGRhdGVfbWF0Y2hfYml0bWFwX21jdmxpc3QoUGxh bm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAgKiAgICAgIHRoaXMg aXMgbm90IHVuY29tbW9uLCBidXQgZm9yIGhpc3RvZ3JhbXMgaXQncyBub3Qg dGhhdCBjbGVhci4KICAqLwogc3RhdGljIFNlbGVjdGl2aXR5Ci1jbGF1c2Vs aXN0X212X3NlbGVjdGl2aXR5X2hpc3RvZ3JhbShQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqY2xhdXNlcywKLQkJCQkJCQkJCU1WU3RhdGlzdGljSW5mbyAq bXZzdGF0cykKK2NsYXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFt KFBsYW5uZXJJbmZvICpyb290LCBNVlN0YXRpc3RpY0luZm8gKm12c3RhdHMs CisJCQkJCQkJCQlMaXN0ICpjbGF1c2VzLCBMaXN0ICpjb25kaXRpb25zLCBi b29sIGlzX29yKQogewogCWludCBpOwogCVNlbGVjdGl2aXR5IHMgPSAwLjA7 CisJU2VsZWN0aXZpdHkgdCA9IDAuMDsKIAlTZWxlY3Rpdml0eSB1ID0gMC4w OwogCiAJaW50CQlubWF0Y2hlcyA9IDA7CisJaW50CQluY29uZGl0aW9ucyA9 IDA7CiAJY2hhciAgICptYXRjaGVzID0gTlVMTDsKKwljaGFyICAgKmNvbmRp dGlvbl9tYXRjaGVzID0gTlVMTDsKIAogCU1WU2VyaWFsaXplZEhpc3RvZ3Jh bSBtdmhpc3QgPSBOVUxMOwogCkBAIC0yNTA1LDI1ICszNzg0LDU1IEBAIGNs YXVzZWxpc3RfbXZfc2VsZWN0aXZpdHlfaGlzdG9ncmFtKFBsYW5uZXJJbmZv ICpyb290LCBMaXN0ICpjbGF1c2VzLAogCiAJQXNzZXJ0IChtdmhpc3QgIT0g TlVMTCk7CiAJQXNzZXJ0IChjbGF1c2VzICE9IE5JTCk7Ci0JQXNzZXJ0IChs aXN0X2xlbmd0aChjbGF1c2VzKSA+PSAyKTsKKwlBc3NlcnQgKGxpc3RfbGVu Z3RoKGNsYXVzZXMpID49IDEpOworCisJbm1hdGNoZXMgPSBtdmhpc3QtPm5i dWNrZXRzOworCW5jb25kaXRpb25zID0gbXZoaXN0LT5uYnVja2V0czsKIAog CS8qCi0JICogQml0bWFwIG9mIGJ1Y2tldCBtYXRjaGVzIChtaXNtYXRjaCwg cGFydGlhbCwgZnVsbCkuIGJ5IGRlZmF1bHQKLQkgKiBhbGwgYnVja2V0cyBm dWxseSBtYXRjaCAoYW5kIHdlJ2xsIGVsaW1pbmF0ZSB0aGVtKS4KKwkgKiBC aXRtYXAgb2YgYnVja2V0IG1hdGNoZXMgKG1pc21hdGNoLCBwYXJ0aWFsLCBm dWxsKS4KKwkgKgorCSAqIEZvciBBTkQgY2xhdXNlcyBhbGwgYnVja2V0cyBt YXRjaCAoYW5kIHdlJ2xsIGVsaW1pbmF0ZSB0aGVtKS4KKwkgKiBGb3IgT1Ig IGNsYXVzZXMgbm8gIGJ1Y2tldHMgbWF0Y2ggKGFuZCB3ZSdsbCBhZGQgdGhl bSkuCisJICoKKwkgKiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhlIG1lbXNldCBm b3IgQU5EIGNsYXVzZXMgKGZvciBPUiBjbGF1c2VzCisJICogaXQncyBhbHJl YWR5IHNldCBjb3JyZWN0bHkgYnkgdGhlIHBhbGxvYzApLgogCSAqLwotCW1h dGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFyKSAqIG12aGlzdC0+bmJ1Y2tl dHMpOwotCW1lbXNldChtYXRjaGVzLCAgTVZTVEFUU19NQVRDSF9GVUxMLCBz aXplb2YoY2hhcikqbXZoaXN0LT5uYnVja2V0cyk7CisJbWF0Y2hlcyA9IHBh bGxvYzAoc2l6ZW9mKGNoYXIpICogbm1hdGNoZXMpOwogCi0Jbm1hdGNoZXMg PSBtdmhpc3QtPm5idWNrZXRzOworCWlmICghIGlzX29yKSAvKiBBTkQtY2xh dXNlICovCisJCW1lbXNldChtYXRjaGVzLCBNVlNUQVRTX01BVENIX0ZVTEws IHNpemVvZihjaGFyKSpubWF0Y2hlcyk7CisKKwkvKiBDb25kaXRpb25zIGFy ZSB0cmVhdGVkIGFzIEFORCBjbGF1c2UsIHNvIG1hdGNoIGJ5IGRlZmF1bHQu ICovCisJY29uZGl0aW9uX21hdGNoZXMgPSBwYWxsb2MwKHNpemVvZihjaGFy KSpuY29uZGl0aW9ucyk7CisJbWVtc2V0KGNvbmRpdGlvbl9tYXRjaGVzLCBN VlNUQVRTX01BVENIX0ZVTEwsIHNpemVvZihjaGFyKSpuY29uZGl0aW9ucyk7 CisKKwkvKgorCSAqIGJ1aWxkIHRoZSBtYXRjaCBiaXRtYXAgZm9yIHRoZSBj b25kaXRpb25zIChjb25kaXRpb25zIGFyZSBhbHdheXMKKwkgKiBjb25uZWN0 ZWQgYnkgQU5EKQorCSAqLworCWlmIChjb25kaXRpb25zICE9IE5JTCkKKwkJ dXBkYXRlX21hdGNoX2JpdG1hcF9oaXN0b2dyYW0ocm9vdCwgY29uZGl0aW9u cywKKwkJCQkJCQkJICBtdnN0YXRzLT5zdGFrZXlzLCBtdmhpc3QsCisJCQkJ CQkJCSAgbmNvbmRpdGlvbnMsIGNvbmRpdGlvbl9tYXRjaGVzLCBmYWxzZSk7 CiAKLQkvKiBidWlsZCB0aGUgbWF0Y2ggYml0bWFwICovCisJLyoKKwkgKiBi dWlsZCB0aGUgbWF0Y2ggYml0bWFwIGZvciB0aGUgZXN0aW1hdGVkIGNsYXVz ZXMKKwkgKgorCSAqIFRPRE8gVGhpcyBldmFsdWF0ZXMgdGhlIGNsYXVzZXMg Zm9yIGFsbCBidWNrZXRzLCBldmVuIHRob3NlCisJICogICAgICBydWxlZCBv dXQgYnkgdGhlIGNvbmRpdGlvbnMuIFRoZSBmaW5hbCByZXN1bHQgc2hvdWxk IGJlCisJICogICAgICB0aGUgc2FtZSwgYnV0IGl0IG1pZ2h0IGJlIGZhc3Rl ci4KKwkgKi8KIAl1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShyb290 LCBjbGF1c2VzLAogCQkJCQkJCQkgIG12c3RhdHMtPnN0YWtleXMsIG12aGlz dCwKLQkJCQkJCQkJICBubWF0Y2hlcywgbWF0Y2hlcywgZmFsc2UpOworCQkJ CQkJCQkgICgoaXNfb3IpID8gMCA6IG5tYXRjaGVzKSwgbWF0Y2hlcywKKwkJ CQkJCQkJICBpc19vcik7CiAKIAkvKiBub3csIHdhbGsgdGhyb3VnaCB0aGUg YnVja2V0cyBhbmQgc3VtIHRoZSBzZWxlY3Rpdml0aWVzICovCiAJZm9yIChp ID0gMDsgaSA8IG12aGlzdC0+bmJ1Y2tldHM7IGkrKykKIAl7CisJCWZsb2F0 IGNvZWZmID0gMS4wOworCiAJCS8qCiAJCSAqIEZpbmQgb3V0IHdoYXQgcGFy dCBvZiB0aGUgZGF0YSBpcyBjb3ZlcmVkIGJ5IHRoZSBoaXN0b2dyYW0sCiAJ CSAqIHNvIHRoYXQgd2UgY2FuICdzY2FsZScgdGhlIHNlbGVjdGl2aXR5IHBy b3Blcmx5IChlLmcuIHdoZW4KQEAgLTI1MzcsMTAgKzM4NDYsMjMgQEAgY2xh dXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9oaXN0b2dyYW0oUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKmNsYXVzZXMsCiAJCSAqLwogCQl1ICs9IG12aGlzdC0+ YnVja2V0c1tpXS0+bnR1cGxlczsKIAorCQkvKiBza2lwIGJ1Y2tldHMgbm90 IG1hdGNoaW5nIHRoZSBjb25kaXRpb25zICovCisJCWlmIChjb25kaXRpb25f bWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX05PTkUpCisJCQljb250aW51 ZTsKKwkJZWxzZSBpZiAoY29uZGl0aW9uX21hdGNoZXNbaV0gPT0gTVZTVEFU U19NQVRDSF9QQVJUSUFMKQorCQkJY29lZmYgPSAwLjU7CisKKwkJdCArPSBj b2VmZiAqIG12aGlzdC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKwogCQlpZiAo bWF0Y2hlc1tpXSA9PSBNVlNUQVRTX01BVENIX0ZVTEwpCi0JCQlzICs9IG12 aGlzdC0+YnVja2V0c1tpXS0+bnR1cGxlczsKKwkJCXMgKz0gY29lZmYgKiBt dmhpc3QtPmJ1Y2tldHNbaV0tPm50dXBsZXM7CiAJCWVsc2UgaWYgKG1hdGNo ZXNbaV0gPT0gTVZTVEFUU19NQVRDSF9QQVJUSUFMKQotCQkJcyArPSAwLjUg KiBtdmhpc3QtPmJ1Y2tldHNbaV0tPm50dXBsZXM7CisJCQkvKgorCQkJICog VE9ETyBJZiBib3RoIGNvbmRpdGlvbnMgYW5kIGNsYXVzZXMgbWF0Y2ggcGFy dGlhbGx5LCB0aGlzCisJCQkgKiAgICAgIHdpbGwgdXNlIDAuMjUgbWF0Y2gg LSBub3Qgc3VyZSBpZiB0aGF0J3MgdGhlIHJpZ2h0CisJCQkgKiAgICAgIHRo aW5nIHNvbHV0aW9uLCBidXQgc2VlbXMgYWJvdXQgcmlnaHQuCisJCQkgKi8K KwkJCXMgKz0gY29lZmYgKiAwLjUgKiBtdmhpc3QtPmJ1Y2tldHNbaV0tPm50 dXBsZXM7CiAJfQogCiAjaWZkZWYgREVCVUdfTVZISVNUCkBAIC0yNTQ5LDkg KzM4NzEsMTQgQEAgY2xhdXNlbGlzdF9tdl9zZWxlY3Rpdml0eV9oaXN0b2dy YW0oUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsYXVzZXMsCiAKIAkvKiBy ZWxlYXNlIHRoZSBhbGxvY2F0ZWQgYml0bWFwIGFuZCBkZXNlcmlhbGl6ZWQg aGlzdG9ncmFtICovCiAJcGZyZWUobWF0Y2hlcyk7CisJcGZyZWUoY29uZGl0 aW9uX21hdGNoZXMpOwogCXBmcmVlKG12aGlzdCk7CiAKLQlyZXR1cm4gcyAq IHU7CisJLyogbm8gY29uZGl0aW9uIG1hdGNoZXMgKi8KKwlpZiAodCA9PSAw LjApCisJCXJldHVybiAoU2VsZWN0aXZpdHkpMC4wOworCisJcmV0dXJuIChz IC8gdCkgKiB1OwogfQogCiAvKiBjYWNoZWQgcmVzdWx0IG9mIGJ1Y2tldCBi b3VuZGFyeSBjb21wYXJpc29uIGZvciBhIHNpbmdsZSBkaW1lbnNpb24gKi8K QEAgLTI2OTksNyArNDAyNiw3IEBAIHVwZGF0ZV9tYXRjaF9iaXRtYXBfaGlz dG9ncmFtKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpjbGF1c2VzLAogewog CWludCBpOwogCUxpc3RDZWxsICogbDsKLQorIAogCS8qCiAJICogVXNlZCBm b3IgY2FjaGluZyBmdW5jdGlvbiBjYWxscywgb25seSBvbmNlIHBlciBkZWR1 cGxpY2F0ZWQgdmFsdWUuCiAJICoKQEAgLTI3NDIsNyArNDA2OSw3IEBAIHVw ZGF0ZV9tYXRjaF9iaXRtYXBfaGlzdG9ncmFtKFBsYW5uZXJJbmZvICpyb290 LCBMaXN0ICpjbGF1c2VzLAogCiAJCQlGbWdySW5mbwlvcHByb2M7CQkJLyog b3BlcmF0b3IgKi8KIAkJCWZtZ3JfaW5mbyhnZXRfb3Bjb2RlKGV4cHItPm9w bm8pLCAmb3Bwcm9jKTsKLQorIAogCQkJLyogcmVzZXQgdGhlIGNhY2hlIChw ZXIgY2xhdXNlKSAqLwogCQkJbWVtc2V0KGNhbGxjYWNoZSwgMCwgbXZoaXN0 LT5uYnVja2V0cyk7CiAKQEAgLTI5MDIsNjQgKzQyMjksNTcgQEAgdXBkYXRl X21hdGNoX2JpdG1hcF9oaXN0b2dyYW0oUGxhbm5lckluZm8gKnJvb3QsIExp c3QgKmNsYXVzZXMsCiAJCQkJCVVQREFURV9SRVNVTFQobWF0Y2hlc1tpXSwg TVZTVEFUU19NQVRDSF9OT05FLCBpc19vcik7CiAJCQl9CiAJCX0KLQkJZWxz ZSBpZiAob3JfY2xhdXNlKGNsYXVzZSkgfHwgYW5kX2NsYXVzZShjbGF1c2Up KQorCQllbHNlIGlmIChvcl9jbGF1c2UoY2xhdXNlKSB8fCBhbmRfY2xhdXNl KGNsYXVzZSkgfHwgbm90X2NsYXVzZShjbGF1c2UpKQogCQl7CiAJCQkvKiBB TkQvT1IgY2xhdXNlLCB3aXRoIGFsbCBjbGF1c2VzIGNvbXBhdGlibGUgd2l0 aCB0aGUgc2VsZWN0ZWQgTVYgc3RhdCAqLwogCiAJCQlpbnQJCQlpOwotCQkJ Qm9vbEV4cHIgICAqb3JjbGF1c2UgID0gKChCb29sRXhwciopY2xhdXNlKTsK LQkJCUxpc3QJICAgKm9yY2xhdXNlcyA9IG9yY2xhdXNlLT5hcmdzOworCQkJ TGlzdAkgICAqdG1wX2NsYXVzZXMgPSAoKEJvb2xFeHByKiljbGF1c2UpLT5h cmdzOwogCiAJCQkvKiBtYXRjaC9taXNtYXRjaCBiaXRtYXAgZm9yIGVhY2gg YnVja2V0ICovCi0JCQlpbnQJb3Jfbm1hdGNoZXMgPSAwOwotCQkJY2hhciAq IG9yX21hdGNoZXMgPSBOVUxMOworCQkJaW50CXRtcF9ubWF0Y2hlcyA9IDA7 CisJCQljaGFyICogdG1wX21hdGNoZXMgPSBOVUxMOwogCi0JCQlBc3NlcnQo b3JjbGF1c2VzICE9IE5JTCk7Ci0JCQlBc3NlcnQobGlzdF9sZW5ndGgob3Jj bGF1c2VzKSA+PSAyKTsKKwkJCUFzc2VydCh0bXBfY2xhdXNlcyAhPSBOSUwp OworCQkJQXNzZXJ0KChsaXN0X2xlbmd0aCh0bXBfY2xhdXNlcykgPj0gMikg fHwgKG5vdF9jbGF1c2UoY2xhdXNlKSAmJiAobGlzdF9sZW5ndGgodG1wX2Ns YXVzZXMpPT0xKSkpOwogCiAJCQkvKiBudW1iZXIgb2YgbWF0Y2hpbmcgYnVj a2V0cyAqLwotCQkJb3Jfbm1hdGNoZXMgPSBtdmhpc3QtPm5idWNrZXRzOwor CQkJdG1wX25tYXRjaGVzID0gKG9yX2NsYXVzZShjbGF1c2UpKSA/IDAgOiBt dmhpc3QtPm5idWNrZXRzOwogCi0JCQkvKiBieSBkZWZhdWx0IG5vbmUgb2Yg dGhlIGJ1Y2tldHMgbWF0Y2hlcyB0aGUgY2xhdXNlcyAqLwotCQkJb3JfbWF0 Y2hlcyA9IHBhbGxvYzAoc2l6ZW9mKGNoYXIpICogb3Jfbm1hdGNoZXMpOwor CQkJLyogYnkgZGVmYXVsdCBub25lIG9mIHRoZSBidWNrZXRzIG1hdGNoZXMg dGhlIGNsYXVzZXMgKE9SIGNsYXVzZSkgKi8KKwkJCXRtcF9tYXRjaGVzID0g cGFsbG9jMChzaXplb2YoY2hhcikgKiBtdmhpc3QtPm5idWNrZXRzKTsKIAot CQkJaWYgKG9yX2NsYXVzZShjbGF1c2UpKQotCQkJewotCQkJCS8qIE9SIGNs YXVzZXMgYXNzdW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCi0J CQkJbWVtc2V0KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfTk9ORSwgc2l6 ZW9mKGNoYXIpKm9yX25tYXRjaGVzKTsKLQkJCQlvcl9ubWF0Y2hlcyA9IDA7 Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogQU5EIGNsYXVzZXMgYXNz dW1lIG5vdGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5ICovCi0JCQkJbWVtc2V0 KG9yX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIp Km9yX25tYXRjaGVzKTsKLQkJCX0KKwkJCS8qIGJ1dCBBTkQgKGFuZCBOT1Qp IGNsYXVzZXMgYXNzdW1lIGV2ZXJ5dGhpbmcgbWF0Y2hlcywgaW5pdGlhbGx5 ICovCisJCQlpZiAoISBvcl9jbGF1c2UoY2xhdXNlKSkKKwkJCQltZW1zZXQo dG1wX21hdGNoZXMsIE1WU1RBVFNfTUFUQ0hfRlVMTCwgc2l6ZW9mKGNoYXIp Km12aGlzdC0+bmJ1Y2tldHMpOwogCiAJCQkvKiBidWlsZCB0aGUgbWF0Y2gg Yml0bWFwIGZvciB0aGUgT1ItY2xhdXNlcyAqLwotCQkJb3Jfbm1hdGNoZXMg PSB1cGRhdGVfbWF0Y2hfYml0bWFwX2hpc3RvZ3JhbShyb290LCBvcmNsYXVz ZXMsCisJCQl0bXBfbm1hdGNoZXMgPSB1cGRhdGVfbWF0Y2hfYml0bWFwX2hp c3RvZ3JhbShyb290LCB0bXBfY2xhdXNlcywKIAkJCQkJCQkJCQlzdGFrZXlz LCBtdmhpc3QsCi0JCQkJCQkJCQkJb3Jfbm1hdGNoZXMsIG9yX21hdGNoZXMs IG9yX2NsYXVzZShjbGF1c2UpKTsKKwkJCQkJCQkJCQl0bXBfbm1hdGNoZXMs IHRtcF9tYXRjaGVzLCBvcl9jbGF1c2UoY2xhdXNlKSk7CiAKIAkJCS8qIG1l cmdlIHRoZSBiaXRtYXAgaW50byB0aGUgZXhpc3Rpbmcgb25lKi8KIAkJCWZv ciAoaSA9IDA7IGkgPCBtdmhpc3QtPm5idWNrZXRzOyBpKyspCiAJCQl7CisJ CQkJLyogaWYgdGhpcyBpcyBhIE5PVCBjbGF1c2UsIHdlIG5lZWQgdG8gaW52 ZXJ0IHRoZSByZXN1bHRzIGZpcnN0ICovCisJCQkJaWYgKG5vdF9jbGF1c2Uo Y2xhdXNlKSkKKwkJCQkJdG1wX21hdGNoZXNbaV0gPSAoTVZTVEFUU19NQVRD SF9GVUxMIC0gdG1wX21hdGNoZXNbaV0pOworCiAJCQkJLyoKIAkJCQkgKiBU byBBTkQtbWVyZ2UgdGhlIGJpdG1hcHMsIGEgTUlOKCkgc2VtYW50aWNzIGlz IHVzZWQuCiAJCQkJICogRm9yIE9SLW1lcmdlLCB1c2UgTUFYKCkuCiAJCQkJ ICoKIAkJCQkgKiBGSVhNRSB0aGlzIGRvZXMgbm90IGRlY3JlYXNlIHRoZSBu dW1iZXIgb2YgbWF0Y2hlcwogCQkJCSAqLwotCQkJCVVQREFURV9SRVNVTFQo bWF0Y2hlc1tpXSwgb3JfbWF0Y2hlc1tpXSwgaXNfb3IpOworCQkJCVVQREFU RV9SRVNVTFQobWF0Y2hlc1tpXSwgdG1wX21hdGNoZXNbaV0sIGlzX29yKTsK IAkJCX0KIAotCQkJcGZyZWUob3JfbWF0Y2hlcyk7Ci0KKwkJCXBmcmVlKHRt cF9tYXRjaGVzKTsKIAkJfQogCQllbHNlCiAJCQllbG9nKEVSUk9SLCAidW5r bm93biBjbGF1c2UgdHlwZTogJWQiLCBjbGF1c2UtPnR5cGUpOwogCX0KIAot CS8qIGZyZWUgdGhlIGNhbGwgY2FjaGUgKi8KIAlwZnJlZShjYWxsY2FjaGUp OwogCiAJcmV0dXJuIG5tYXRjaGVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggNWZjMmY5Yy4uNzM4NGNi OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29z dHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jCkBAIC0zNTIwLDcgKzM1MjAsOCBAQCBjb21wdXRlX3NlbWlfYW50 aV9qb2luX2ZhY3RvcnMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQlq b2lucXVhbHMsCiAJCQkJCQkJCQkwLAogCQkJCQkJCQkJam9pbnR5cGUsCi0J CQkJCQkJCQlzamluZm8pOworCQkJCQkJCQkJc2ppbmZvLAorCQkJCQkJCQkJ TklMKTsKIAogCS8qCiAJICogQWxzbyBnZXQgdGhlIG5vcm1hbCBpbm5lci1q b2luIHNlbGVjdGl2aXR5IG9mIHRoZSBqb2luIGNsYXVzZXMuCkBAIC0zNTQz LDcgKzM1NDQsOCBAQCBjb21wdXRlX3NlbWlfYW50aV9qb2luX2ZhY3RvcnMo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQlqb2lucXVhbHMsCiAJCQkJ CQkJCQkwLAogCQkJCQkJCQkJSk9JTl9JTk5FUiwKLQkJCQkJCQkJCSZub3Jt X3NqaW5mbyk7CisJCQkJCQkJCQkmbm9ybV9zamluZm8sCisJCQkJCQkJCQlO SUwpOwogCiAJLyogQXZvaWQgbGVha2luZyBhIGxvdCBvZiBMaXN0Q2VsbHMg Ki8KIAlpZiAoam9pbnR5cGUgPT0gSk9JTl9BTlRJKQpAQCAtMzcxMCw3ICsz NzEyLDcgQEAgYXBwcm94X3R1cGxlX2NvdW50KFBsYW5uZXJJbmZvICpyb290 LCBKb2luUGF0aCAqcGF0aCwgTGlzdCAqcXVhbHMpCiAJCU5vZGUJICAgKnF1 YWwgPSAoTm9kZSAqKSBsZmlyc3QobCk7CiAKIAkJLyogTm90ZSB0aGF0IGNs YXVzZV9zZWxlY3Rpdml0eSB3aWxsIGJlIGFibGUgdG8gY2FjaGUgaXRzIHJl c3VsdCAqLwotCQlzZWxlYyAqPSBjbGF1c2Vfc2VsZWN0aXZpdHkocm9vdCwg cXVhbCwgMCwgSk9JTl9JTk5FUiwgJnNqaW5mbyk7CisJCXNlbGVjICo9IGNs YXVzZV9zZWxlY3Rpdml0eShyb290LCBxdWFsLCAwLCBKT0lOX0lOTkVSLCAm c2ppbmZvLCBOSUwpOwogCX0KIAogCS8qIEFwcGx5IGl0IHRvIHRoZSBpbnB1 dCByZWxhdGlvbiBzaXplcyAqLwpAQCAtMzc0Niw3ICszNzQ4LDggQEAgc2V0 X2Jhc2VyZWxfc2l6ZV9lc3RpbWF0ZXMoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCkKIAkJCQkJCQkgICByZWwtPmJhc2VyZXN0cmljdGlu Zm8sCiAJCQkJCQkJICAgMCwKIAkJCQkJCQkgICBKT0lOX0lOTkVSLAotCQkJ CQkJCSAgIE5VTEwpOworCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgTklM KTsKIAogCXJlbC0+cm93cyA9IGNsYW1wX3Jvd19lc3QobnJvd3MpOwogCkBA IC0zNzgzLDcgKzM3ODYsOCBAQCBnZXRfcGFyYW1ldGVyaXplZF9iYXNlcmVs X3NpemUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJ CQkJCQkgICBhbGxjbGF1c2VzLAogCQkJCQkJCSAgIHJlbC0+cmVsaWQsCQkv KiBkbyBub3QgdXNlIDAhICovCiAJCQkJCQkJICAgSk9JTl9JTk5FUiwKLQkJ CQkJCQkgICBOVUxMKTsKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5J TCk7CiAJbnJvd3MgPSBjbGFtcF9yb3dfZXN0KG5yb3dzKTsKIAkvKiBGb3Ig c2FmZXR5LCBtYWtlIHN1cmUgcmVzdWx0IGlzIG5vdCBtb3JlIHRoYW4gdGhl IGJhc2UgZXN0aW1hdGUgKi8KIAlpZiAobnJvd3MgPiByZWwtPnJvd3MpCkBA IC0zOTIxLDEyICszOTI1LDE0IEBAIGNhbGNfam9pbnJlbF9zaXplX2VzdGlt YXRlKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCWpvaW5xdWFscywK IAkJCQkJCQkJCQkwLAogCQkJCQkJCQkJCWpvaW50eXBlLAotCQkJCQkJCQkJ CXNqaW5mbyk7CisJCQkJCQkJCQkJc2ppbmZvLAorCQkJCQkJCQkJCU5JTCk7 CiAJCXBzZWxlYyA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkocm9vdCwKIAkJ CQkJCQkJCQlwdXNoZWRxdWFscywKIAkJCQkJCQkJCQkwLAogCQkJCQkJCQkJ CWpvaW50eXBlLAotCQkJCQkJCQkJCXNqaW5mbyk7CisJCQkJCQkJCQkJc2pp bmZvLAorCQkJCQkJCQkJCU5JTCk7CiAKIAkJLyogQXZvaWQgbGVha2luZyBh IGxvdCBvZiBMaXN0Q2VsbHMgKi8KIAkJbGlzdF9mcmVlKGpvaW5xdWFscyk7 CkBAIC0zOTM4LDcgKzM5NDQsOCBAQCBjYWxjX2pvaW5yZWxfc2l6ZV9lc3Rp bWF0ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlyZXN0cmljdGxp c3QsCiAJCQkJCQkJCQkJMCwKIAkJCQkJCQkJCQlqb2ludHlwZSwKLQkJCQkJ CQkJCQlzamluZm8pOworCQkJCQkJCQkJCXNqaW5mbywKKwkJCQkJCQkJCQlO SUwpOwogCQlwc2VsZWMgPSAwLjA7CQkJLyogbm90IHVzZWQsIGtlZXAgY29t cGlsZXIgcXVpZXQgKi8KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL29yY2xhdXNlcy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvb3JjbGF1c2VzLmMKaW5kZXggZWE4MzFmNS4uNjI5OWU3 NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3Jj bGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvb3Jj bGF1c2VzLmMKQEAgLTI4MCw3ICsyODAsNyBAQCBjb25zaWRlcl9uZXdfb3Jf Y2xhdXNlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ ICogc2F2aW5nIHdvcmsgbGF0ZXIuKQogCSAqLwogCW9yX3NlbGVjID0gY2xh dXNlX3NlbGVjdGl2aXR5KHJvb3QsIChOb2RlICopIG9yX3JpbmZvLAotCQkJ CQkJCQkgIDAsIEpPSU5fSU5ORVIsIE5VTEwpOworCQkJCQkJCQkgIDAsIEpP SU5fSU5ORVIsIE5VTEwsIE5JTCk7CiAKIAkvKgogCSAqIFRoZSBjbGF1c2Ug aXMgb25seSB3b3J0aCBhZGRpbmcgdG8gdGhlIHF1ZXJ5IGlmIGl0IHJlamVj dHMgYSB1c2VmdWwKQEAgLTM0Miw3ICszNDIsNyBAQCBjb25zaWRlcl9uZXdf b3JfY2xhdXNlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAKIAkJLyogQ29tcHV0ZSBpbm5lci1qb2luIHNpemUgKi8KIAkJb3JpZ19z ZWxlYyA9IGNsYXVzZV9zZWxlY3Rpdml0eShyb290LCAoTm9kZSAqKSBqb2lu X29yX3JpbmZvLAotCQkJCQkJCQkJCTAsIEpPSU5fSU5ORVIsICZzamluZm8p OworCQkJCQkJCQkJCTAsIEpPSU5fSU5ORVIsICZzamluZm8sIE5JTCk7CiAK IAkJLyogQW5kIGhhY2sgY2FjaGVkIHNlbGVjdGl2aXR5IHNvIGpvaW4gc2l6 ZSByZW1haW5zIHRoZSBzYW1lICovCiAJCWpvaW5fb3JfcmluZm8tPm5vcm1f c2VsZWMgPSBvcmlnX3NlbGVjIC8gb3Jfc2VsZWM7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IDQ2Yzk1YjAuLjdkMGEzYTEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0x NjI3LDEzICsxNjI3LDE1IEBAIGJvb2x0ZXN0c2VsKFBsYW5uZXJJbmZvICpy b290LCBCb29sVGVzdFR5cGUgYm9vbHRlc3R0eXBlLCBOb2RlICphcmcsCiAJ CQljYXNlIElTX05PVF9GQUxTRToKIAkJCQlzZWxlYyA9IChkb3VibGUpIGNs YXVzZV9zZWxlY3Rpdml0eShyb290LCBhcmcsCiAJCQkJCQkJCQkJCQkJdmFy UmVsaWQsCi0JCQkJCQkJCQkJCQkJam9pbnR5cGUsIHNqaW5mbyk7CisJCQkJ CQkJCQkJCQkJam9pbnR5cGUsIHNqaW5mbywKKwkJCQkJCQkJCQkJCQlOSUwp OwogCQkJCWJyZWFrOwogCQkJY2FzZSBJU19GQUxTRToKIAkJCWNhc2UgSVNf Tk9UX1RSVUU6CiAJCQkJc2VsZWMgPSAxLjAgLSAoZG91YmxlKSBjbGF1c2Vf c2VsZWN0aXZpdHkocm9vdCwgYXJnLAogCQkJCQkJCQkJCQkJCQkgIHZhclJl bGlkLAotCQkJCQkJCQkJCQkJCQkgIGpvaW50eXBlLCBzamluZm8pOworCQkJ CQkJCQkJCQkJCQkgIGpvaW50eXBlLCBzamluZm8sCisJCQkJCQkJCQkJCQkJ CSAgTklMKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCBib29sdGVzdHR5cGU6ICVkIiwKQEAgLTYy NTksNyArNjI2MSw4IEBAIGdlbmVyaWNjb3N0ZXN0aW1hdGUoUGxhbm5lcklu Zm8gKnJvb3QsCiAJaW5kZXhTZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2Vs ZWN0aXZpdHkocm9vdCwgc2VsZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJ ICBpbmRleC0+cmVsLT5yZWxpZCwKIAkJCQkJCQkJCQkJICBKT0lOX0lOTkVS LAotCQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJCQkgIE5VTEwsCisJ CQkJCQkJCQkJCSAgTklMKTsKIAogCS8qCiAJICogSWYgY2FsbGVyIGRpZG4n dCBnaXZlIHVzIGFuIGVzdGltYXRlLCBlc3RpbWF0ZSB0aGUgbnVtYmVyIG9m IGluZGV4CkBAIC02NTc5LDcgKzY1ODIsOCBAQCBidGNvc3Rlc3RpbWF0ZShQ bGFubmVySW5mbyAqcm9vdCwgSW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9v cF9jb3VudCwKIAkJYnRyZWVTZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2Vs ZWN0aXZpdHkocm9vdCwgc2VsZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJ CSAgaW5kZXgtPnJlbC0+cmVsaWQsCiAJCQkJCQkJCQkJCQkgIEpPSU5fSU5O RVIsCi0JCQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJCQkJICBOVUxM LAorCQkJCQkJCQkJCQkJICBOSUwpOwogCQludW1JbmRleFR1cGxlcyA9IGJ0 cmVlU2VsZWN0aXZpdHkgKiBpbmRleC0+cmVsLT50dXBsZXM7CiAKIAkJLyoK QEAgLTczMzAsNyArNzMzNCw4IEBAIGdpbmNvc3Rlc3RpbWF0ZShQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9vcF9jb3Vu dCwKIAkqaW5kZXhTZWxlY3Rpdml0eSA9IGNsYXVzZWxpc3Rfc2VsZWN0aXZp dHkocm9vdCwgc2VsZWN0aXZpdHlRdWFscywKIAkJCQkJCQkJCQkJICAgaW5k ZXgtPnJlbC0+cmVsaWQsCiAJCQkJCQkJCQkJCSAgIEpPSU5fSU5ORVIsCi0J CQkJCQkJCQkJCSAgIE5VTEwpOworCQkJCQkJCQkJCQkgICBOVUxMLAorCQkJ CQkJCQkJCQkgICBOSUwpOwogCiAJLyogZmV0Y2ggZXN0aW1hdGVkIHBhZ2Ug Y29zdCBmb3IgdGFibGVzcGFjZSBjb250YWluaW5nIGluZGV4ICovCiAJZ2V0 X3RhYmxlc3BhY2VfcGFnZV9jb3N0cyhpbmRleC0+cmVsdGFibGVzcGFjZSwK QEAgLTc1NjAsNyArNzU2NSw3IEBAIGJyaW5jb3N0ZXN0aW1hdGUoUGxhbm5l ckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291 bnQsCiAJKmluZGV4U2VsZWN0aXZpdHkgPQogCQljbGF1c2VsaXN0X3NlbGVj dGl2aXR5KHJvb3QsIGluZGV4UXVhbHMsCiAJCQkJCQkJICAgcGF0aC0+aW5k ZXhpbmZvLT5yZWwtPnJlbGlkLAotCQkJCQkJCSAgIEpPSU5fSU5ORVIsIE5V TEwpOworCQkJCQkJCSAgIEpPSU5fSU5ORVIsIE5VTEwsIE5JTCk7CiAJKmlu ZGV4Q29ycmVsYXRpb24gPSAxOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Yy5jCmluZGV4IGVhNWEwOWEuLjI3YThkZTUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1 ZGUgInV0aWxzL2J5dGVhLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX3RhYmxl cy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAi dXRpbHMvbXZzdGF0cy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5o IgogI2luY2x1ZGUgInV0aWxzL3BsYW5jYWNoZS5oIgogI2luY2x1ZGUgInV0 aWxzL3BvcnRhbC5oIgpAQCAtMzkzLDYgKzM5NCwxNSBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGNvbmZpZ19lbnVtX2VudHJ5IGZvcmNlX3BhcmFsbGVsX21v ZGVfb3B0aW9uc1tdID0gewogfTsKIAogLyoKKyAqIFNlYXJjaCBhbGdvcml0 aG0gZm9yIG11bHRpdmFyaWF0ZSBzdGF0cy4KKyAqLworc3RhdGljIGNvbnN0 IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBtdnN0YXRfc2VhcmNoX29wdGlv bnNbXSA9IHsKKwl7ImdyZWVkeSIsIE1WU1RBVF9TRUFSQ0hfR1JFRURZLCBm YWxzZX0sCisJeyJleGhhdXN0aXZlIiwgTVZTVEFUX1NFQVJDSF9FWEhBVVNU SVZFLCBmYWxzZX0sCisJe05VTEwsIDAsIGZhbHNlfQorfTsKKworLyoKICAq IE9wdGlvbnMgZm9yIGVudW0gdmFsdWVzIHN0b3JlZCBpbiBvdGhlciBtb2R1 bGVzCiAgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50 cnkgd2FsX2xldmVsX29wdGlvbnNbXTsKQEAgLTM3MDcsNiArMzcxNywxNiBA QCBzdGF0aWMgc3RydWN0IGNvbmZpZ19lbnVtIENvbmZpZ3VyZU5hbWVzRW51 bVtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsibXZz dGF0X3NlYXJjaCIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfT1RIRVIs CisJCQlnZXR0ZXh0X25vb3AoIlNldHMgdGhlIGFsZ29yaXRobSB1c2VkIGZv ciBjb21iaW5pbmcgbXVsdGl2YXJpYXRlIHN0YXRzLiIpLAorCQkJTlVMTAor CQl9LAorCQkmbXZzdGF0X3NlYXJjaF90eXBlLAorCQlNVlNUQVRfU0VBUkNI X0dSRUVEWSwgbXZzdGF0X3NlYXJjaF9vcHRpb25zLAorCQlOVUxMLCBOVUxM LCBOVUxMCisJfSwKKwogCS8qIEVuZC1vZi1saXN0IG1hcmtlciAqLwogCXsK IAkJe05VTEwsIDAsIDAsIE5VTEwsIE5VTEx9LCBOVUxMLCAwLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9tdnN0YXRzL1JFQURNRS5zdGF0cyBiL3NyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvUkVBRE1FLnN0YXRzCmluZGV4IDNlNGY0ZDEuLmQ0MDQ5MTQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0 YXRzCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0 YXRzCkBAIC05MCw2ICs5MCwxMzcgQEAgZXZlbiBhdHRlbXB0aW5nIHRvIGRv IHRoZSBtb3JlIGV4cGVuc2l2ZSBlc3RpbWF0aW9uLgogV2hlbmV2ZXIgd2Ug ZmluZCB0aGVyZSBhcmUgbm8gc3VpdGFibGUgc3RhdHMsIHdlIHNraXAgdGhl IGV4cGVuc2l2ZSBzdGVwcy4KIAogCitDb21iaW5pbmcgbXVsdGlwbGUgc3Rh dGlzdGljcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hl biBlc3RpbWF0aW5nIHNlbGVjdGl2aXR5IG9mIGEgbGlzdCBvZiBjbGF1c2Vz LCB0aGVyZSBtYXkgZXhpc3Qgbm8gc3RhdGlzdGljcworY292ZXJpbmcgYWxs IG9mIHRoZW0uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdGF0aXN0aWNzLCBl YWNoIGNvdmVyaW5nIHNvbWUKK3N1YnNldCBvZiB0aGUgYXR0cmlidXRlcywg dGhlIG9wdGltaXplciBuZWVkcyB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIHRo b3NlCitzdGF0aXN0aWNzIHRvIGFwcGx5LgorCitXaGVuIHRoZSBzdGF0aXN0 aWNzIGRvIG5vdCBvdmVybGFwLCB0aGUgc29sdXRpb24gaXMgdHJpdmlhbCAt IHdlIGNhbiBzaW1wbHkKK3NwbGl0IHRoZSBncm91cHMgb2YgY29uZGl0aW9u cyBieSB0aGUgbWF0Y2hpbmcgc3RhdGlzdGljcywgYW5kIHRoZW4gbXVsdGlw bHkgdGhlCitzZWxlY3Rpdml0aWVzLiBGb3IgZXhhbXBsZSBhc3N1bWUgbXVs dGl2YXJpYXRlIHN0YXRpc3RpY3Mgb24gKGIsYykgYW5kIChkLGUpLAorYW5k IGEgY29uZGl0aW9uIGxpa2UgdGhpczoKKworICAgIChhPTEpIEFORCAoYj0y KSBBTkQgKGM9MykgQU5EIChkPTQpIEFORCAoZT01KQorCitUaGVuIChhPTEp IGlzIG5vdCBjb3ZlcmVkIGJ5IGFueSBvZiB0aGUgc3RhdGlzdGljcywgc28g d2lsbCBiZSBlc3RpbWF0ZWQgdXNpbmcKK3RoZSByZWd1bGFyIHBlci1jb2x1 bW4gc3RhdGlzdGljcy4gVGhlIHR3byBjb25kaXRpb25zICgoYj0yKSBBTkQg KGM9MykpIHdpbGwgYmUKK2VzdGltYXRlZCB1c2luZyB0aGUgKGIsYykgc3Rh dGlzdGljcywgYW5kICgoZD00KSBBTkQgKGU9NSkpIHdpbGwgYmUgZXN0aW1h dGVkCit1c2luZyAoZCxlKSBzdGF0aXN0aWNzLiBBbmQgdGhlIHJlc3VsdGlu ZyBzZWxlY3Rpdml0aWVzIHdpbGwgYmUgZXN0aW1hdGVkLgorCitOb3csIHdo YXQgaWYgdGhlIHN0YXRpc3RpY3Mgb3ZlcmxhcD8gRm9yIGV4YW1wbGUgYXNz dW1lIHRoZSBzYW1lIGNvbmRpdGlvbiBhcworYWJvdmUsIGJ1dCBsZXQncyBz YXkgd2UgaGF2ZSBzdGF0aXN0aWNzIG9uIChhLGIsYykgYW5kIChhLGMsZCxl KS4gV2hhdCB0aGVuPworCitBcyBzZWxlY3Rpdml0eSBpcyBqdXN0IGEgcHJv YmFiaWxpdHkgdGhhdCB0aGUgY29uZGl0aW9uIGhvbGRzIGZvciBhIHJhbmRv bSByb3csCit3ZSBjYW4gd3JpdGUgdGhlIHNlbGVjdGl2aXR5IGxpa2UgdGhp czoKKworICAgIFAoYT0xICYgYj0yICYgYz0zICYgZD00ICYgZT01KQorCith bmQgd2UgY2FuIHJld3JpdGUgaXQgdXNpbmcgY29uZGl0aW9uYWwgcHJvYmFi aWxpdHkgbGlrZSB0aGlzCisKKyAgICBQKGE9MSAmIGI9MiAmIGM9MykgKiBQ KGQ9NCAmIGU9NSB8IGE9MSAmIGI9MiAmIGM9MykKKworTm90aWNlIHRoYXQg dGhlIGZpcnN0IHBhcnQgYWxyZWFkeSBtYXRjaGVzIHRvIChhLGIsYykgc3Rh dGlzdGljcy4gSWYgd2UgYXNzdW1lCit0aGF0IGNvbHVtbnMgdGhhdCBhcmUg bm90IHJlZmVyZW5jZWQgYnkgdGhlIHNhbWUgc3RhdGlzdGljcyBhcmUgaW5k ZXBlbmRlbnQsIHdlCittYXkgcmV3cml0ZSB0aGUgc2Vjb25kIGhhbGYgbGlr ZSB0aGlzCisKKyAgICBQKGQ9NCAmIGU9NSB8IGE9MSAmIGI9MiAmIGM9Mykg PSBQKGQ9NCAmIGU9NSB8IGE9MSAmIGM9MykKKword2hpY2ggY29ycmVzcG9u ZHMgdG8gdGhlIHN0YXRpc3RpY3Mgb24gKGEsYyxkLGUpLgorCitJZiB0aGVy ZSBhcmUgbXVsdGlwbGUgc3RhdGlzdGljcyBkZWZpbmVkIG9uIGEgdGFibGUs IGl0J3Mgbm90IGRpZmZpY3VsdCB0byBjb21lCit1cCB3aXRoIGV4YW1wbGVz IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHdheXMgdG8gY29tYmluZSB0aGVt IHRvIGNvdmVyIGEgbGlzdCBvZgorY2xhdXNlcy4gV2UgbmVlZCBhIHdheSB0 byBmaW5kIHRoZSBiZXN0IGNvbWJpbmF0aW9uIG9mIHN0YXRpc3RpY3MuCisK K1RoaXMgaXMgdGhlIHB1cnBvc2Ugb2YgY2hvb3NlX212X3N0YXRpc3RpY3Mo KS4gSXQgc2VhcmNoZXMgdGhyb3VnaCB0aGUgcG9zc2libGUKK2NvbWJpbmF0 aW9ucyBvZiBzdGF0aXN0aWNzLCBhbmQgc2VhcmNoZXMgc3VjaCBjb21iaW5h dGlvbiB0aGF0CisKKyAgICAoYSkgY292ZXJzIHRoZSBtb3N0IGNsYXVzZXMg b2YgdGhlIGxpc3QKKworICAgIChiKSByZXVzZXMgdGhlIG1heGltdW0gbnVt YmVyIG9mIGNsYXVzZXMgYXMgY29uZGl0aW9ucworICAgICAgICAoaW4gY29u ZGl0aW9uYWwgcHJvYmFiaWxpdGllcykKKworV2hpbGUgKGEpIGNyaXRlcmlh IHNlZW1zIG5hdHVyYWwsIHRoZSAoYikgbWF5IHNlZW0gYSBiaXQgYXdrd2Fy ZCBhdCBmaXJzdC4gVGhlCitpZGVhIGlzIHRoYXQgY29uZGl0aW9ucyBpbiBh IHdheSBvZiB0cmFuc2ZlcmluZyBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRl bmNpZXMKK2JldHdlZW4gc3RhdGlzdGljcy4KKworVGhlcmUgYXJlIHR3byBh bHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgb2YgY2hvb3NlX212X3N0YXRp c3RpY3MoKSAtIGdyZWVkeQorYW5kIGV4aGF1c3RpdmUuIEV4aGF1c3RpdmUg YWN0dWFsbHkgc2VhcmNoZXMgdGhyb3VnaCBhbGwgcG9zc2libGUgY29tYmlu YXRpb25zCitvZiBzdGF0aXN0aWNzLCBhbmQgZm9yIGxhcmdlciBudW1iZXJz IG9mIHN0YXRpc3RpY3MgbWF5IGdldCBxdWl0ZSBleHBlbnNpdmUKKyhhcyBp dCwgdW5zdXJwcmlzaW5nbHksIGhhcyBleHBvbmVudGlhbCBjb3N0KS4gR3Jl ZWR5IHRlcm1pbmF0ZXMgaW4gbGVzcyB0aGFuCitLIHN0ZXBzICh3aGVuIEsg aXMgdGhlIG51bWJlciBvZiBjbGF1c2VzKSwgYW5kIGluIGVhY2ggc3RlcCBj aG9vc2VzIHRoZSBiZXN0CituZXh0IHN0YXRpc3RpY3MuIEkndmUgYmVlbiB1 bmFibGUgdG8gY29tZSB1cCB3aXRoIGFuIGV4YW1wbGUgd2hlcmUgdGhvc2Ug dHdvCithcHByb2FjaGVzIHdvdWxkIHByb2R1Y2UgZGlmZmVyZW50IGNvbWJp bmF0aW9ucy4KKworSXQncyBwb3NzaWJsZSB0byBjaG9vc2UgdGhlIG9wdGlt aXphdGlvbiB1c2luZyBtdnN0YXRfc2VhcmNoX3R5cGUsIHdpdGggZWl0aGVy CisnZ3JlZWR5JyBvciAnZXhoYXVzdGl2ZScgdmFsdWVzIChkZWZhdWx0IGlz ICdncmVlZHknKS4KKworICAgIFNFVCBtdnN0YXRfc2VhcmNoX3R5cGUgPSAn ZXhoYXVzdGl2ZSc7CisKK05vdGU6IFRoaXMgaXMgbWVhbnQgbW9zdGx5IGZv ciBleHBlcmltZW50YXRpb24uIEkgZG8gZXhwZWN0IHdlJ2xsIGNob29zZSBv bmUgb2YKK3RoZSBhbGdvcml0aG1zIGFuZCByZW1vdmUgdGhlIEdVQyBiZWZv cmUgY29tbWl0LgorCisKK0xpbWl0YXRpb25zIG9mIGNvbWJpbmluZyBzdGF0 aXN0aWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor CitBcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gJ0NvbWJpbmluZyBtdWx0 aXBsZSBzdGF0aXN0aWNzJywgdGhlIGN1cnJlbnQgYXBwb2FjaAoraXMgYmFz ZWQgb24gdHJhbnNmZXJpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiBzdGF0aXN0 aWNzIGJ5IG1lYW5zIG9mIGNvbmRpdGlvbmFsCitwcm9iYWJpbGl0aWVzLiBU aGlzIGlzIGEgcmVsYXRpdmVseSBjaGVhcCBhbmQgZWZmaWNpZW50IGFwcHJv YWNoLCBidXQgaXQgaXMKK2Jhc2VkIG9uIHR3byBhc3N1bXB0aW9uczoKKwor ICAgICgxKSBUaGUgb3ZlcmxhcCBiZXR3ZWVuIHRoZSBzdGF0aXN0aWNzIG5l ZWRzIHRvIGJlIHN1ZmZpY2llbnRseSBsYXJnZSwgaS5lLgorICAgICAgICB0 aGVyZSBuZWVkcyB0byBiZSBlbm91Z2ggY29sdW1ucyBzaGFyZWQgYnkgdGhl IHN0YXRpc3RpY3MgdG8gdHJhbnNmZXIKKyAgICAgICAgaW5mb3JtYXRpb24g YWJvdXQgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHJlbWFpbmluZyBjb2x1 bW5zLgorCisgICAgKDIpIFRoZSBxdWVyeSBuZWVkcyB0byBpbmNsdWRlIHN1 ZmZpY2llbnQgY2xhdXNlcyBvbiB0aGUgc2hhcmVkIGNvbHVtbnMuCisKK0hv dyBhIHZpb2xhdGlvbiBvZiB0aG9zZSBhc3N1bXB0aW9ucyBtYXkgYmUgYSBw cm9ibGVtIGNhbiBiZSBpbGx1c3RyYXRlZCBieQorYSBzaW1wbGUgZXhhbXBs ZS4gQXNzdW1lIGEgdGFibGUgd2l0aCB0aHJlZSBjb2x1bW5zIChhLGIsYykg Y29udGFpbmluZyBleGFjdGx5Cit0aGUgc2FtZSB2YWx1ZXMsIGFuZCBzdGF0 aXN0aWNzIG9uIChhLGIpIGFuZCAoYixjKToKKworICAgIENSRUFURSBUQUJM RSB0ZXN0IEFTIFNFTEVDVCBpLCBpLCBpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApOworCisgICAg Q1JFQVRFIFNUQVRJU1RJQ1MgczEgT04gdGVzdCAoYSxiKSBXSVRIIChtY3Yp OworICAgIENSRUFURSBTVEFUSVNUSUNTIHMyIE9OIHRlc3QgKGIsYykgV0lU SCAobWN2KTsKKworICAgIEFOQUxZWkUgdGVzdDsKKworRmlyc3QsIGxldCdz IGVzdGltYXRlIHRoaXMgcXVlcnk6CisKKyAgICBTRUxFQ1QgKiBGUk9NIHRl c3QgV0hFUkUgKGEgPCAxMCkgQU5EIChjIDwgMTApOworCitDbGVhcmx5LCB0 aGVyZSBhcmUgbm8gY29uZGl0aW9ucyBvbiAnYicgKHdoaWNoIGlzIHRoZSBv bmx5IGNvbHVtbiBzaGFyZWQgYnkgdGhlCit0d28gc3RhdGlzdGljcyksIHNv IHdlJ2xsIGVuZCB1cCB3aXRoIGFuIGVzdGltYXRlIGJhc2VkIG9uIGFzc3Vt cHRpb24gb2YKK2luZGVwZW5kZW5jZToKKworICAgIFAoYSA8IDEwKSAqIFAo YyA8IDEwKSA9IDAuMDEgKiAwLjAxID0gMC4wMDAxCisKK1doaWNoIGlzIGEg c2lnbmlmaWNhbnQgdW5kZXItZXN0aW1hdGUsIGFzIHRoZSBwcm9wZXIgc2Vs ZWN0aXZpdHkgaXMgMC4wMS4KKworQnV0IGxldCdzIGVzdGltYXRlIGFub3Ro ZXIgcXVlcnk6CisKKyAgICBTRUxFQ1QgKiBGUk9NIHRlc3QgV0hFUkUgKGEg PCAxMCkgQU5EIChiIDwgNTAwKSBBTkQgKGMgPCAxMCk7CisKK0luIHRoaXMg Y2FzZSwgdGhlIGVzdGltYXRlIG1heSBiZSBjb21wdXRlZCBmb3IgZXhhbXBs ZSBsaWtlIHRoaXM6CisKKyAgICBQWyhhIDwgMTApICYgKGIgPCA1MDApICYg KGMgPCAxMCldCisgICAgICA9IFBbKGEgPCAxMCkgJiAoYiA8IDUwMCldICog UFsoYyA8IDEwKSB8IChhIDwgMTApICYgKGIgPCA1MDApXQorICAgICAgPSBQ WyhhIDwgMTApICYgKGIgPCA1MDApXSAqIFBbKGMgPCAxMCkgfCAoYiA8IDUw MCldCisKK1RoZSB0cm91YmxlIGlzIHRoZSBwcm9iYWJpbGl0eSBQKGMgPCAx MCB8IGIgPCA1MDApIGV2YWx1YXRlcyB0byAwLjAyLCBiZWNhdXNlCit3ZSBo YXZlIGFzc3VtZWQgKGEpIGFuZCAoYykgYXJlIGluZGVwZW5kZW50IGJlY2F1 c2UgdGhlcmUgaXMgbm8gc3RhdGlzdGljCitjb250YWluaW5nIGJvdGggdGhl c2UgY29sdW1ucywgYW5kIHRoZSBjb25kaXRpb24gb24gKGIpIGRvZXMgbm90 IHRyYW5zZmVyCitzdWZmaWNpZW50IGFtb3VudCBvZiBpbmZvcm1hdGlvbiBi ZXR3ZWVuIHRoZSB0d28gc3RhdGlzdGljcy4KKworQ3VycmVudGx5LCB0aGUg b25seSBzb2x1dGlvbiBpcyB0byBidWlsZCBzdGF0aXN0aWNzIG9uIGFsbCB0 aHJlZSBjb2x1bW5zLCBidXQKK3NlZSB0aGUgJ2NvbWJpbmluZyBzdGF0aXN0 aWNzIHVzaW5nIGNvbnZvbHV0aW9uJyBzZWN0aW9uIGZvciBpZGVhcyBvbiBo b3cgdG8KK2ltcHJvdmUgdGhpcy4KKworCiBGdXJ0aGVyIChwb3NzaWJseSBj cmF6eSkgaWRlYXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog CkBAIC0xMTEsMyArMjQyLDM4IEBAIEJ1dCBvZiBjb3Vyc2UsIHRoaXMgbWF5 IHJlc3VsdCBpbiBleHBlbnNpdmUgZXN0aW1hdGlvbiAoQ1BVLXdpc2UpLgog CiBTbyB3ZSBtaWdodCBhZGQgYSBHVUMgdG8gY2hvb3NlIGJldHdlZW4gYSBz aW1wbGUgKHNpbmdsZSBzdGF0aXN0aWNzKSBhbmQgdGh1cwogbXVsdGktc3Rh dGlzdGljIGVzdGltYXRpb24sIHBvc3NpYmx5IHRhYmxlLWxldmVsIHBhcmFt ZXRlciAoQUxURVIgVEFCTEUgLi4uKS4KKworCitDb21iaW5pbmcgc3RhdHMg dXNpbmcgY29udm9sdXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCitXaGlsZSB0aGUgY3VycmVudCBhcHByb2FjaCBmb3IgY29t YmluaW5nIHN0YXRpc3RpY3MgaXMgYmFzZWQgb24gY29uZGl0aW9uYWwKK3By b2JhYmlsaXRpZXMsIGFuZCB0aHVzIG9ubHkgd29ya3Mgd2hlbiB0aGUgcXVl cnkgaW5jbHVkZXMgY29uZGl0aW9ucyBvbiB0aGUKK292ZXJsYXBwaW5nIHBh cnRzIG9mIHRoZSBzdGF0aXN0aWNzLiBCdXQgdGhlcmUgbWF5IGJlIG90aGVy IHdheXMgdG8gY29tYmluZQorc3RhdGlzdGljcywgcmVsYXhpbmcgdGhpcyBy ZXF1aXJlbWVudC4KKworTGV0J3MgYXNzdW1lIHR3byBoaXN0b2dyYW1zIEgx IGFuZCBIMiAtIHRoZW4gY29tYmluaW5nIHRoZW0gbWlnaHQgd29yayBhYm91 dAorbGlrZSB0aGlzOgorCisKKyAgICBmb3IgKGJ1Y2tldHMgb2YgSDEsIHNh dGlzZnlpbmcgbG9jYWwgY29uZGl0aW9ucykKKyAgICB7CisgICAgICAgIGZv ciAoYnVja2V0cyBvZiBIMiwgb3ZlcmxhcHBpbmcgd2l0aCBIMSBidWNrZXQp CisgICAgICAgIHsKKyAgICAgICAgICAgIG1hcmsgSDIgYnVja2V0IGFzICd2 YWxpZCcKKyAgICAgICAgfQorICAgIH0KKworICAgIHMxID0gczIgPSAwLjAK KyAgICBmb3IgKGJ1Y2tldHMgb2YgSDIgbWFya2VkIGFzIHZhbGlkKQorICAg IHsKKyAgICAgICAgczEgKz0gZnJlcXVlbmN5CisKKyAgICAgICAgaWYgKGJ1 Y2tldCBzYXRpc3RpZmVzIGxvY2FsIGNvbmRpdGlvbnMpCisgICAgICAgICAg ICAgczIgKz0gZnJlcXVlbmN5CisgICAgfQorCisgICAgcyA9IChzMiAvIHMx KSAvKiBmaW5hbCBzZWxlY3Rpdml0eSBlc3RpbWF0ZSAqLworCitIb3dldmVy IHRoaXMgbWF5IHF1aWNrbHkgZ2V0IG5vbi10cml2aWFsLCBlLmcuIHdoZW4g Y29tYmluaW5nIHR3byBzdGF0aXN0aWNzCitvZiBkaWZmZXJlbnQgdHlwZXMg KGhpc3RvZ3JhbSB2cy4gTUNWKS4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29z dC5oCmluZGV4IDc4YzdjYWUuLmE1YWMwODggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL2Nvc3QuaApAQCAtMTkxLDExICsxOTEsMTMgQEAgZXh0ZXJuIFNl bGVjdGl2aXR5IGNsYXVzZWxpc3Rfc2VsZWN0aXZpdHkoUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCSAgIExpc3QgKmNsYXVzZXMsCiAJCQkJCSAgIGludCB2 YXJSZWxpZCwKIAkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsCi0JCQkJCSAg IFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKKwkJCQkJICAgU3BlY2lhbEpv aW5JbmZvICpzamluZm8sCisJCQkJCSAgIExpc3QgKmNvbmRpdGlvbnMpOwog ZXh0ZXJuIFNlbGVjdGl2aXR5IGNsYXVzZV9zZWxlY3Rpdml0eShQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkgICBOb2RlICpjbGF1c2UsCiAJCQkJICAgaW50 IHZhclJlbGlkLAogCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAotCQkJCSAg IFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKKwkJCQkgICBTcGVjaWFsSm9p bkluZm8gKnNqaW5mbywKKwkJCQkgICBMaXN0ICpjb25kaXRpb25zKTsKIAog I2VuZGlmICAgLyogQ09TVF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9tdnN0YXRzLmggYi9zcmMvaW5jbHVkZS91dGlscy9tdnN0YXRz LmgKaW5kZXggZjA1YTUxNy4uMzViMmY4ZSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvbXZzdGF0cy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L212c3RhdHMuaApAQCAtMTcsNiArMTcsMTQgQEAKICNpbmNsdWRlICJmbWdy LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAKK3R5cGVkZWYg ZW51bSBNVlN0YXRTZWFyY2hUeXBlCit7CisJTVZTVEFUX1NFQVJDSF9FWEhB VVNUSVZFLAkJLyogZXhoYXVzdGl2ZSBzZWFyY2ggKi8KKwlNVlNUQVRfU0VB UkNIX0dSRUVEWQkJCS8qIGdyZWVkeSBzZWFyY2ggKi8KK30JTVZTdGF0U2Vh cmNoVHlwZTsKKworZXh0ZXJuIGludCBtdnN0YXRfc2VhcmNoX3R5cGU7CisK IC8qCiAgKiBEZWdyZWUgb2YgaG93IG11Y2ggTUNWIGl0ZW0gLyBoaXN0b2dy YW0gYnVja2V0IG1hdGNoZXMgYSBjbGF1c2UuCiAgKiBUaGlzIGlzIHRoZW4g Y29uc2lkZXJlZCB3aGVuIGNvbXB1dGluZyB0aGUgc2VsZWN0aXZpdHkuCi0t IAoyLjEuMAoK --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename="0007-multivariate-ndistinct-coefficients.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0007-multivariate-ndistinct-coefficients.patch"; charset="UTF-8" RnJvbSBlNDJhMmVmZWIwNjA2OTJkMGExZWJlMjNmMjhjNjU0MTMwYjI2ZGNk IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogV2VkLCAyMyBEZWMgMjAxNSAw MjowNzo1OCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggNy85XSBtdWx0aXZhcmlh dGUgbmRpc3RpbmN0IGNvZWZmaWNpZW50cwoKLS0tCiBkb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9zdGF0aXN0aWNzLnNnbWwgICAgfCAgIDkgKysKIHNyYy9i YWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAgICAgICB8ICAgMyAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jICAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYyAg ICAgICAgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2NsYXVzZXNlbC5jICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICB8ICA5MyArKysrKysr KysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2VmaWxl ICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMv UkVBRE1FLm5kaXN0aW5jdCB8ICA4MyArKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUuc3RhdHMgICAgIHwgICAyICsK IHNyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvY29tbW9uLmMgICAgICAgICB8 ICAyMyArKystCiBzcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL212ZGlzdC5j ICAgICAgICAgfCAxNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfbXZfc3RhdGlzdGljLmggICAgICB8 ICAyNiArKystLQogc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMu aCAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgICAzICstCiAxNiBmaWxlcyBj aGFuZ2VkLCA0MjQgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9S RUFETUUubmRpc3RpbmN0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYwoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3N0YXRpc3RpY3Muc2dtbAppbmRleCBmZDMzODJl Li44MDM2MGE2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9zdGF0aXN0aWNzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfc3RhdGlzdGljcy5zZ21sCkBAIC0xNjgsNiArMTY4LDE1IEBAIENSRUFU RSBTVEFUSVNUSUNTIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj5zdGF0aXN0aWNzX25hCiAgICAgPC9saXN0aXRl bT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPjxsaXRlcmFsPm5kaXN0aW5jdDwvPiAoPHR5cGU+Ym9vbGVh bjwvPik8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIEVuYWJsZXMgbmRpc3RpbmN0IGNvZWZmaWNpZW50cyBmb3IgdGhlIHN0 YXRpc3RpY3MuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKICAgIDwvdmFyaWFibGVsaXN0PgogCiAgIDwv cmVmc2VjdDI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5 c3RlbV92aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwKaW5kZXggNmFmZGVlMC4uYTU1MDE0MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCisrKyBiL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTY5LDcg KzE2OSw4IEBAIENSRUFURSBWSUVXIHBnX212X3N0YXRzIEFTCiAgICAgICAg IGxlbmd0aChTLnN0YW1jdikgQVMgbWN2Ynl0ZXMsCiAgICAgICAgIHBnX212 X3N0YXRzX21jdmxpc3RfaW5mbyhTLnN0YW1jdikgQVMgbWN2aW5mbywKICAg ICAgICAgbGVuZ3RoKFMuc3RhaGlzdCkgQVMgaGlzdGJ5dGVzLAotICAgICAg ICBwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5mbyhTLnN0YWhpc3QpIEFTIGhp c3RpbmZvCisgICAgICAgIHBnX212X3N0YXRzX2hpc3RvZ3JhbV9pbmZvKFMu c3RhaGlzdCkgQVMgaGlzdGluZm8sCisgICAgICAgIHN0YW5kY29lZmYgQVMg bmRjb2VmZgogICAgIEZST00gKHBnX212X3N0YXRpc3RpYyBTIEpPSU4gcGdf Y2xhc3MgQyBPTiAoQy5vaWQgPSBTLnN0YXJlbGlkKSkKICAgICAgICAgTEVG VCBKT0lOIHBnX25hbWVzcGFjZSBOIE9OIChOLm9pZCA9IEMucmVsbmFtZXNw YWNlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5h bHl6ZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCmluZGV4 IGNiYWE0ZTEuLjBmNmRiNzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9h bmFseXplLmMKQEAgLTU4Miw3ICs1ODIsNyBAQCBkb19hbmFseXplX3JlbChS ZWxhdGlvbiBvbmVyZWwsIGludCBvcHRpb25zLCBWYWN1dW1QYXJhbXMgKnBh cmFtcywKIAkJfQogCiAJCS8qIEJ1aWxkIG11bHRpdmFyaWF0ZSBzdGF0cyAo aWYgdGhlcmUgYXJlIGFueSkuICovCi0JCWJ1aWxkX212X3N0YXRzKG9uZXJl bCwgbnVtcm93cywgcm93cywgYXR0cl9jbnQsIHZhY2F0dHJzdGF0cyk7CisJ CWJ1aWxkX212X3N0YXRzKG9uZXJlbCwgdG90YWxyb3dzLCBudW1yb3dzLCBy b3dzLCBhdHRyX2NudCwgdmFjYXR0cnN0YXRzKTsKIAl9CiAKIAkvKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3RhdHNjbWRzLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2NtZHMuYwppbmRleCBiOTc0NjU1 Li42ZWEwZTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9z dGF0c2NtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdGF0c2Nt ZHMuYwpAQCAtMTM4LDcgKzEzOCw4IEBAIENyZWF0ZVN0YXRpc3RpY3MoQ3Jl YXRlU3RhdHNTdG10ICpzdG10KQogCS8qIGJ5IGRlZmF1bHQgYnVpbGQgbm90 aGluZyAqLwogCWJvb2wgCWJ1aWxkX2RlcGVuZGVuY2llcyA9IGZhbHNlLAog CQkJYnVpbGRfbWN2ID0gZmFsc2UsCi0JCQlidWlsZF9oaXN0b2dyYW0gPSBm YWxzZTsKKwkJCWJ1aWxkX2hpc3RvZ3JhbSA9IGZhbHNlLAorCQkJYnVpbGRf bmRpc3RpbmN0ID0gZmFsc2U7CiAKIAlpbnQzMiAJbWF4X2J1Y2tldHMgPSAt MSwKIAkJCW1heF9tY3ZfaXRlbXMgPSAtMTsKQEAgLTIyMSw2ICsyMjIsOCBA QCBDcmVhdGVTdGF0aXN0aWNzKENyZWF0ZVN0YXRzU3RtdCAqc3RtdCkKIAog CQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgImRlcGVuZGVuY2llcyIpID09 IDApCiAJCQlidWlsZF9kZXBlbmRlbmNpZXMgPSBkZWZHZXRCb29sZWFuKG9w dCk7CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZGlzdGlu Y3QiKSA9PSAwKQorCQkJYnVpbGRfbmRpc3RpbmN0ID0gZGVmR2V0Qm9vbGVh bihvcHQpOwogCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibWN2 IikgPT0gMCkKIAkJCWJ1aWxkX21jdiA9IGRlZkdldEJvb2xlYW4ob3B0KTsK IAkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm1heF9tY3ZfaXRl bXMiKSA9PSAwKQpAQCAtMjc1LDEwICsyNzgsMTAgQEAgQ3JlYXRlU3RhdGlz dGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJfQogCiAJLyogY2hlY2sg dGhhdCBhdCBsZWFzdCBzb21lIHN0YXRpc3RpY3Mgd2VyZSByZXF1ZXN0ZWQg Ki8KLQlpZiAoISAoYnVpbGRfZGVwZW5kZW5jaWVzIHx8IGJ1aWxkX21jdiB8 fCBidWlsZF9oaXN0b2dyYW0pKQorCWlmICghIChidWlsZF9kZXBlbmRlbmNp ZXMgfHwgYnVpbGRfbWN2IHx8IGJ1aWxkX2hpc3RvZ3JhbSB8fCBidWlsZF9u ZGlzdGluY3QpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVS UkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJCQkgZXJybXNnKCJubyBzdGF0aXN0 aWNzIHR5cGUgKGRlcGVuZGVuY2llcywgbWN2LCBoaXN0b2dyYW0pIHdhcyBy ZXF1ZXN0ZWQiKSkpOworCQkJCSBlcnJtc2coIm5vIHN0YXRpc3RpY3MgdHlw ZSAoZGVwZW5kZW5jaWVzLCBtY3YsIGhpc3RvZ3JhbSwgbmRpc3RpbmN0KSB3 YXMgcmVxdWVzdGVkIikpKTsKIAogCS8qIG5vdyBkbyBzb21lIGNoZWNraW5n IG9mIHRoZSBvcHRpb25zICovCiAJaWYgKHJlcXVpcmVfbWN2ICYmICghIGJ1 aWxkX21jdikpCkBAIC0zMTEsNiArMzE0LDcgQEAgQ3JlYXRlU3RhdGlzdGlj cyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJdmFsdWVzW0FudW1fcGdfbXZf c3RhdGlzdGljX2RlcHNfZW5hYmxlZCAtMV0gPSBCb29sR2V0RGF0dW0oYnVp bGRfZGVwZW5kZW5jaWVzKTsKIAl2YWx1ZXNbQW51bV9wZ19tdl9zdGF0aXN0 aWNfbWN2X2VuYWJsZWQgIC0xXSA9IEJvb2xHZXREYXR1bShidWlsZF9tY3Yp OwogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0X2VuYWJsZWQg LTFdID0gQm9vbEdldERhdHVtKGJ1aWxkX2hpc3RvZ3JhbSk7CisJdmFsdWVz W0FudW1fcGdfbXZfc3RhdGlzdGljX25kaXN0X2VuYWJsZWQtMV0gPSBCb29s R2V0RGF0dW0oYnVpbGRfbmRpc3RpbmN0KTsKIAogCXZhbHVlc1tBbnVtX3Bn X212X3N0YXRpc3RpY19tY3ZfbWF4X2l0ZW1zICAgIC0xXSA9IEludDMyR2V0 RGF0dW0obWF4X21jdl9pdGVtcyk7CiAJdmFsdWVzW0FudW1fcGdfbXZfc3Rh dGlzdGljX2hpc3RfbWF4X2J1Y2tldHMgLTFdID0gSW50MzJHZXREYXR1bSht YXhfYnVja2V0cyk7CkBAIC0zMTgsNiArMzIyLDcgQEAgQ3JlYXRlU3RhdGlz dGljcyhDcmVhdGVTdGF0c1N0bXQgKnN0bXQpCiAJbnVsbHNbQW51bV9wZ19t dl9zdGF0aXN0aWNfc3RhZGVwcyAgLTFdID0gdHJ1ZTsKIAludWxsc1tBbnVt X3BnX212X3N0YXRpc3RpY19zdGFtY3YgICAtMV0gPSB0cnVlOwogCW51bGxz W0FudW1fcGdfbXZfc3RhdGlzdGljX3N0YWhpc3QgIC0xXSA9IHRydWU7CisJ bnVsbHNbQW51bV9wZ19tdl9zdGF0aXN0aWNfc3RhbmRpc3QgLTFdID0gdHJ1 ZTsKIAogCS8qIGluc2VydCB0aGUgdHVwbGUgaW50byBwZ19tdl9zdGF0aXN0 aWMgKi8KIAltdnN0YXRyZWwgPSBoZWFwX29wZW4oTXZTdGF0aXN0aWNSZWxh dGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2NsYXVzZXNlbC5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY2xhdXNlc2VsLmMKaW5kZXggYzFiODk5OS4u MjU0MGRhOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY2xhdXNlc2VsLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY2xhdXNlc2VsLmMKQEAgLTU5LDYgKzU5LDcgQEAgc3RhdGljIHZvaWQg YWRkUmFuZ2VDbGF1c2UoUmFuZ2VRdWVyeUNsYXVzZSAqKnJxbGlzdCwgTm9k ZSAqY2xhdXNlLAogI2RlZmluZQkJTVZfQ0xBVVNFX1RZUEVfRkRFUAkJMHgw MQogI2RlZmluZQkJTVZfQ0xBVVNFX1RZUEVfTUNWCQkweDAyCiAjZGVmaW5l CQlNVl9DTEFVU0VfVFlQRV9ISVNUCQkweDA0CisjZGVmaW5lCQlNVl9DTEFV U0VfVFlQRV9ORElTVAkweDA4CiAKIHN0YXRpYyBib29sIGNsYXVzZV9pc19t dl9jb21wYXRpYmxlKE5vZGUgKmNsYXVzZSwgSW5kZXggcmVsaWQsIEJpdG1h cHNldCAqKmF0dG51bXMsCiAJCQkJCQkJIGludCB0eXBlKTsKQEAgLTMyNDYs NiArMzI0Nyw5IEBAIHN0YXRzX3R5cGVfbWF0Y2hlcyhNVlN0YXRpc3RpY0lu Zm8gKnN0YXQsIGludCB0eXBlKQogCWlmICgodHlwZSAmIE1WX0NMQVVTRV9U WVBFX0hJU1QpICYmIHN0YXQtPmhpc3RfYnVpbHQpCiAJCXJldHVybiB0cnVl OwogCisJaWYgKCh0eXBlICYgTVZfQ0xBVVNFX1RZUEVfTkRJU1QpICYmIHN0 YXQtPm5kaXN0X2J1aWx0KQorCQlyZXR1cm4gdHJ1ZTsKKwogCXJldHVybiBm YWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGxhbmNhdC5jCmluZGV4IGQ0NmFlZDIuLmJkMmMzMDYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTQxNiw3 ICs0MTYsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9v dCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJ bXZzdGF0ID0gKEZvcm1fcGdfbXZfc3RhdGlzdGljKSBHRVRTVFJVQ1QoaHR1 cCk7CiAKIAkJCS8qIHVuYXZhaWxhYmxlIHN0YXRzIGFyZSBub3QgaW50ZXJl c3RpbmcgZm9yIHRoZSBwbGFubmVyICovCi0JCQlpZiAobXZzdGF0LT5kZXBz X2J1aWx0IHx8IG12c3RhdC0+bWN2X2J1aWx0IHx8IG12c3RhdC0+aGlzdF9i dWlsdCkKKwkJCWlmIChtdnN0YXQtPmRlcHNfYnVpbHQgfHwgbXZzdGF0LT5t Y3ZfYnVpbHQgfHwgbXZzdGF0LT5oaXN0X2J1aWx0IHx8IG12c3RhdC0+bmRp c3RfYnVpbHQpCiAJCQl7CiAJCQkJaW5mbyA9IG1ha2VOb2RlKE1WU3RhdGlz dGljSW5mbyk7CiAKQEAgLTQyNywxMSArNDI3LDEzIEBAIGdldF9yZWxhdGlv bl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJ ZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+ZGVwc19lbmFibGVkID0g bXZzdGF0LT5kZXBzX2VuYWJsZWQ7CiAJCQkJaW5mby0+bWN2X2VuYWJsZWQg ID0gbXZzdGF0LT5tY3ZfZW5hYmxlZDsKIAkJCQlpbmZvLT5oaXN0X2VuYWJs ZWQgPSBtdnN0YXQtPmhpc3RfZW5hYmxlZDsKKwkJCQlpbmZvLT5uZGlzdF9l bmFibGVkID0gbXZzdGF0LT5uZGlzdF9lbmFibGVkOwogCiAJCQkJLyogYnVp bHQvYXZhaWxhYmxlIHN0YXRpc3RpY3MgKi8KIAkJCQlpbmZvLT5kZXBzX2J1 aWx0ID0gbXZzdGF0LT5kZXBzX2J1aWx0OwogCQkJCWluZm8tPm1jdl9idWls dCAgPSBtdnN0YXQtPm1jdl9idWlsdDsKIAkJCQlpbmZvLT5oaXN0X2J1aWx0 ID0gbXZzdGF0LT5oaXN0X2J1aWx0OworCQkJCWluZm8tPm5kaXN0X2J1aWx0 ID0gbXZzdGF0LT5uZGlzdF9idWlsdDsKIAogCQkJCS8qIHN0YWtleXMgKi8K IAkJCQlhZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoTVZTVEFUT0lELCBodHVw LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCA3 ZDBhM2ExLi5hODRkZDJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwpAQCAtMTMyLDYgKzEzMiw3IEBACiAjaW5jbHVkZSAidXRp bHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9pbmRleF9zZWxmdW5j cy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUg InV0aWxzL212c3RhdHMuaCIKICNpbmNsdWRlICJ1dGlscy9uYWJzdGltZS5o IgogI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgpAQCAtMjA2LDYgKzIwNyw3IEBAIHN0YXRpYyBDb25zdCAq c3RyaW5nX3RvX2NvbnN0KGNvbnN0IGNoYXIgKnN0ciwgT2lkIGRhdGF0eXBl KTsKIHN0YXRpYyBDb25zdCAqc3RyaW5nX3RvX2J5dGVhX2NvbnN0KGNvbnN0 IGNoYXIgKnN0ciwgc2l6ZV90IHN0cl9sZW4pOwogc3RhdGljIExpc3QgKmFk ZF9wcmVkaWNhdGVfdG9fcXVhbHMoSW5kZXhPcHRJbmZvICppbmRleCwgTGlz dCAqaW5kZXhRdWFscyk7CiAKK3N0YXRpYyBPaWQgZmluZF9uZGlzdGluY3Rf Y29lZmYoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgTGlz dCAqdmFyaW5mb3MpOwogCiAvKgogICoJCWVxc2VsCQkJLSBTZWxlY3Rpdml0 eSBvZiAiPSIgZm9yIGFueSBkYXRhIHR5cGVzLgpAQCAtMzQyMiwxMiArMzQy NCwyNiBAQCBlc3RpbWF0ZV9udW1fZ3JvdXBzKFBsYW5uZXJJbmZvICpyb290 LCBMaXN0ICpncm91cEV4cHJzLCBkb3VibGUgaW5wdXRfcm93cywKIAkJCSAq IGRvbid0IGtub3cgYnkgaG93IG11Y2guICBXZSBzaG91bGQgbmV2ZXIgY2xh bXAgdG8gbGVzcyB0aGFuIHRoZQogCQkJICogbGFyZ2VzdCBuZGlzdGluY3Qg dmFsdWUgZm9yIGFueSBvZiB0aGUgVmFycywgdGhvdWdoLCBzaW5jZQogCQkJ ICogdGhlcmUgd2lsbCBzdXJlbHkgYmUgYXQgbGVhc3QgdGhhdCBtYW55IGdy b3Vwcy4KKwkJCSAqCisJCQkgKiBIb3dldmVyIHdlIGRvbid0IG5lZWQgdG8g ZG8gdGhpcyBpZiB3ZSBoYXZlIG5kaXN0aW5jdCBzdGF0cyBvbgorCQkJICog dGhlIGNvbHVtbnMgLSBpbiB0aGF0IGNhc2Ugd2UgY2FuIHNpbXBseSB1c2Ug dGhlIGNvZWZmaWNpZW50CisJCQkgKiB0byBnZXQgdGhlIChwcm9iYWJseSB3 YXkgbW9yZSBhY2N1cmF0ZSkgZXN0aW1hdGUuCisJCQkgKgorCQkJICogWFhY IFByb2JhYmx5IG5lZWRzIHJlZmFjdG9yaW5nIChkb24ndCBsaWtlIHRvIG1p eCB3aXRoIGNsYW1wCisJCQkgKiAgICAgYW5kIGNvZWZmIGF0IHRoZSBzYW1l IHRpbWUpLgogCQkJICovCiAJCQlkb3VibGUJCWNsYW1wID0gcmVsLT50dXBs ZXM7CisJCQlkb3VibGUJCWNvZWZmID0gMS4wOwogCiAJCQlpZiAocmVsdmFy Y291bnQgPiAxKQogCQkJewotCQkJCWNsYW1wICo9IDAuMTsKKwkJCQlPaWQg b2lkID0gZmluZF9uZGlzdGluY3RfY29lZmYocm9vdCwgcmVsLCB2YXJpbmZv cyk7CisKKwkJCQlpZiAob2lkICE9IEludmFsaWRPaWQpCisJCQkJCWNvZWZm ID0gbG9hZF9tdl9uZGlzdGluY3Qob2lkKTsKKwkJCQllbHNlCisJCQkJCWNs YW1wICo9IDAuMTsKKwogCQkJCWlmIChjbGFtcCA8IHJlbG1heG5kaXN0aW5j dCkKIAkJCQl7CiAJCQkJCWNsYW1wID0gcmVsbWF4bmRpc3RpbmN0OwpAQCAt MzQzNiw2ICszNDUyLDEzIEBAIGVzdGltYXRlX251bV9ncm91cHMoUGxhbm5l ckluZm8gKnJvb3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9y b3dzLAogCQkJCQkJY2xhbXAgPSByZWwtPnR1cGxlczsKIAkJCQl9CiAJCQl9 CisKKwkJCS8qCisJCQkgKiBBcHBseSBuZGlzdGluY3QgY29lZmZpY2llbnQg ZnJvbSBtdWx0aXZhciBzdGF0cyAod2UgbXVzdCBkbyB0aGlzCisJCQkgKiBi ZWZvcmUgY2xhbXBpbmcgdGhlIGVzdGltYXRlIGluIGFueSB3YXkuCisJCQkg Ki8KKwkJCXJlbGRpc3RpbmN0IC89IGNvZWZmOworCiAJCQlpZiAocmVsZGlz dGluY3QgPiBjbGFtcCkKIAkJCQlyZWxkaXN0aW5jdCA9IGNsYW1wOwogCkBA IC03NTgyLDMgKzc2MDUsNzEgQEAgYnJpbmNvc3Rlc3RpbWF0ZShQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXhQYXRoICpwYXRoLCBkb3VibGUgbG9vcF9jb3Vu dCwKIAogCS8qIFhYWCB3aGF0IGFib3V0IHBhZ2VzX3Blcl9yYW5nZT8gKi8K IH0KKworLyoKKyAqIEZpbmQgYXBwbGljYWJsZSBuZGlzdGluY3Qgc3RhdGlz dGljcyBhbmQgY29tcHV0ZSB0aGUgY29lZmZpY2llbnQgdG8KKyAqIGNvcnJl Y3QgdGhlIGVzdGltYXRlIChzaW1wbHkgYSBwcm9kdWN0IG9mIHBlci1jb2x1 bW4gbmRpc3RpbmN0cykuCisgKgorICogQ3VycmVudGx5IHdlIG9ubHkgbG9v ayBmb3IgYSBwZXJmZWN0IG1hdGNoLCBpLmUuIGEgc2luZ2xlIG5kaXN0aW5j dAorICogZXN0aW1hdGUgZXhhY3RseSBtYXRjaGluZyBhbGwgdGhlIGNvbHVt bnMgb2YgdGhlIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyBPaWQKK2ZpbmRf bmRpc3RpbmN0X2NvZWZmKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsIExpc3QgKnZhcmluZm9zKQoreworCUxpc3RDZWxsICpsYzsKKwlC aXRtYXBzZXQgKmF0dG51bXMgPSBOVUxMOworCVZhcmlhYmxlU3RhdERhdGEg dmFyZGF0YTsKKworCWZvcmVhY2gobGMsIHZhcmluZm9zKQorCXsKKwkJR3Jv dXBWYXJJbmZvICp2YXJpbmZvID0gKEdyb3VwVmFySW5mbyAqKSBsZmlyc3Qo bGMpOworCisJCWlmICh2YXJpbmZvLT5yZWwgIT0gcmVsKQorCQkJY29udGlu dWU7CisKKwkJLyogRklYTUUgaGFuZGxlIGV4cHJlc3Npb25zIGluIGdlbmVy YWwgb25seSAqLworCisJCS8qCisJCSAqIGV4YW1pbmUgdGhlIHZhcmlhYmxl IChvciBleHByZXNzaW9uKSBzbyB0aGF0IHdlIGtub3cgd2hpY2gKKwkJICog YXR0cmlidXRlIHdlJ3JlIGRlYWxpbmcgd2l0aCAtIHdlIG5lZWQgdGhpcyBm b3IgbWF0Y2hpbmcgdGhlCisJCSAqIG5kaXN0aW5jdCBjb2VmZmljaWVudAor CQkgKgorCQkgKiBGSVhNRSBwcm9iYWJseSBtaWdodCByZW1lbWJlciB0aGlz IGZyb20gZXN0aW1hdGVfbnVtX2dyb3VwcworCQkgKi8KKwkJZXhhbWluZV92 YXJpYWJsZShyb290LCB2YXJpbmZvLT52YXIsIDAsICZ2YXJkYXRhKTsKKwor CQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh2YXJkYXRhLnN0YXRzVHVwbGUpKQor CQl7CisJCQlGb3JtX3BnX3N0YXRpc3RpYyBzdGF0cworCQkJCT0gKEZvcm1f cGdfc3RhdGlzdGljKSBHRVRTVFJVQ1QodmFyZGF0YS5zdGF0c1R1cGxlKTsK KworCQkJYXR0bnVtcyA9IGJtc19hZGRfbWVtYmVyKGF0dG51bXMsIHN0YXRz LT5zdGFhdHRudW0pOworCisJCQlSZWxlYXNlVmFyaWFibGVTdGF0cyh2YXJk YXRhKTsKKwkJfQorCX0KKworCS8qIGxvb2sgZm9yIGEgbWF0Y2hpbmcgbmRp c3RpbmN0IHN0YXRpc3RpY3MgKi8KKwlmb3JlYWNoIChsYywgcmVsLT5tdnN0 YXRsaXN0KQorCXsKKwkJaW50IGk7CisJCU1WU3RhdGlzdGljSW5mbyAqaW5m byA9IChNVlN0YXRpc3RpY0luZm8gKilsZmlyc3QobGMpOworCisJCS8qIHNr aXAgc3RhdGlzdGljcyB3aXRob3V0IG5kaXN0aW5jdCBjb2VmZmljaWVudCBi dWlsdCAqLworCQlpZiAoIWluZm8tPm5kaXN0X2J1aWx0KQorCQkJY29udGlu dWU7CisKKwkJLyogb25seSBleGFjdCBtYXRjaGVzIGZvciBub3cgKHNhbWUg c2V0IG9mIGNvbHVtbnMpICovCisJCWlmIChibXNfbnVtX21lbWJlcnMoYXR0 bnVtcykgIT0gaW5mby0+c3Rha2V5cy0+ZGltMSkKKwkJCWNvbnRpbnVlOwor CisJCS8qIGNoZWNrIHRoYXQgdGhlIGNvbHVtbnMgbWF0Y2ggKi8KKwkJZm9y IChpID0gMDsgaSA8IGluZm8tPnN0YWtleXMtPmRpbTE7IGkrKykKKwkJCWlm IChibXNfaXNfbWVtYmVyKGluZm8tPnN0YWtleXMtPnZhbHVlc1tpXSwgYXR0 bnVtcykpCisJCQkJY29udGludWU7CisKKwkJcmV0dXJuIGluZm8tPm12b2lk OworCX0KKworCXJldHVybiBJbnZhbGlkT2lkOworfQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9NYWtlZmlsZSBiL3NyYy9iYWNr ZW5kL3V0aWxzL212c3RhdHMvTWFrZWZpbGUKaW5kZXggOWRiYjNiNi4uZDRi ODhlOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL01ha2Vm aWxlCkBAIC0xMiw2ICsxMiw2IEBAIHN1YmRpciA9IHNyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMKIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCiBpbmNs dWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKLU9C SlMgPSBjb21tb24ubyBkZXBlbmRlbmNpZXMubyBoaXN0b2dyYW0ubyBtY3Yu bworT0JKUyA9IGNvbW1vbi5vIGRlcGVuZGVuY2llcy5vIGhpc3RvZ3JhbS5v IG1jdi5vIG12ZGlzdC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMv YmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvUkVBRE1FLm5kaXN0aW5jdCBiL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvUkVBRE1FLm5kaXN0aW5jdApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4zMmQxNjI0Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9SRUFETUUubmRpc3RpbmN0 CkBAIC0wLDAgKzEsODMgQEAKK25kaXN0aW5jdCBjb2VmZmljaWVudHMKKz09 PT09PT09PT09PT09PT09PT09PT0KKworRXN0aW1hdGluZyBudW1iZXIgb2Yg ZGlzdGluY3QgZ3JvdXBzIGluIGEgY29tYmluYXRpb24gb2YgY29sdW1ucyBp cyB0cmlja3ksCithbmQgdGhlIGVzdGltYXRpb24gZXJyb3IgaXMgb2Z0ZW4g c2lnbmlmaWNhbnQuIEJ5IG5kaXN0aW5jdCBjb2VmZmljaWVudCB3ZQorbWVh biBhIHJhdGlvCisKKyAgICBxID0gbmRpc3RpbmN0KGEpICogbmRpc3RpbmN0 KGIpIC8gbmRpc3RpbmN0KGEsYikKKword2hlcmUgJ2EnIGFuZCAnYicgYXJl IGNvbHVtbnMsIG5kaXN0aW5jdChhKSBpcyAoYW4gZXN0aW1hdGUgb2YpIGEg bnVtYmVyIG9mCitkaXN0aW5jdCB2YWx1ZXMgaW4gY29sdW1uICdhJy4gQW5k IG5kaXN0aW5jdChhLGIpIGlzIHRoZSBzYW1lIHRoaW5nIGZvciB0aGUKK3Bh aXIgb2YgY29sdW1ucy4KKworVGhlIG1lYW5pbmcgb2YgdGhlIGNvZWZmaWNp ZW50IG1heSBiZSBpbGx1c3RyYXRlZCBieSBhbnN3ZXJpbmcgdGhlIGZvbGxv d2luZworcXVlc3Rpb246IEdpdmVuIGEgY29tYmluYXRpb24gb2YgY29sdW1u cyAoYSxiKSwgaG93IG1hbnkgZGlzdGluY3QgdmFsdWVzIG9mICdiJworbWF0 Y2hlcyBhIGNob3NlbiB2YWx1ZSBvZiAnYScgb24gYXZlcmFnZT8KKworTGV0 J3MgYXNzdW1lIHdlIGtub3cgbmRpc3RpbmN0KGEpIGFuZCBuZGlzdGluY3Qo YSxiKS4gVGhlbiB0aGUgYW5zd2VyIHRvIHRoZQorcXVlc3Rpb24gY2xlYXJs eSBpcworCisgICAgbmRpc3RpbmN0KGEsYikgLyBuZGlzdGluY3QoYSkKKwor YW5kIGJ5IHVzaW5nICdxJyB3ZSBtYXkgcmV3cml0ZSB0aGlzIGFzCisKKyAg ICBuZGlzdGluY3QoYikgLyBxCisKK3NvICdxJyBtYXkgYmUgY29uc2lkZXJl ZCBhcyBhIGNvcnJlY3Rpb24gZmFjdG9yIG9mIHRoZSBuZGlzdGluY3QgZXN0 aW1hdGUgZ2l2ZW4KK2EgY29uZGl0aW9uIG9uIG9uZSBvZiB0aGUgY29sdW1u cy4KKworVGhpcyBtYXkgYmUgZ2VuZXJhbGl6ZWQgdG8gYSBjb21iaW5hdGlv biBvZiAnbicgY29sdW1ucworCisgICAgW25kaXN0aW5jdChjMSkgKiAuLi4g KiBuZGlzdGluY3QoY24pXSAvIG5kaXN0aW5jdChjMSwgLi4uLCBjbikKKwor YW5kIHRoZSBtZWFuaW5nIGlzIHZlcnkgc2ltaWxhciwgZXhjZXB0IHRoYXQg d2UgbmVlZCB0byB1c2UgY29uZGl0aW9ucyBvbiAobi0xKQorb2YgdGhlIGNv bHVtbnMuCisKKworU2VsZWN0aXZpdHkgZXN0aW1hdGlvbgorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCitBcyBleHBsYWluZWQgaW4gdGhlIHByZXZpb3Vz IHBhcmFncmFwaCwgbmRpc3RpbmN0IGNvZWZmaWNpZW50cyBtYXkgYmUgdXNl ZCB0bworZXN0aW1hdGUgY2FyZGluYWxpdHkgb2YgYSBjb2x1bW4sIGdpdmVu IHNvbWUgYXByaW9yaSBrbm93bGVkZ2UuIExldCdzIGFzc3VtZQord2UgbmVl ZCB0byBlc3RpbWF0ZSBzZWxlY3Rpdml0eSBvZiBhIGNvbmRpdGlvbgorCisg ICAgKGE9MSkgQU5EIChiPTIpCisKK3doaWNoIHdlIGNhbiBleHBhbmQgbGlr ZSB0aGlzCisKKyAgICBQKGE9MSAmIGI9MikgPSBQKGE9MSkgKiBQKGI9MiB8 IGE9MSkKKworTGV0J3MgYWxzbyBhc3N1bWUgdGhhdCB0aGUgZGlzdHJpYnV0 aW9uIG9mICdiJyBpcyB1bmlmb3JtLCBpLmUuIHRoYXQKKworICAgIFAoYT0x KSA9IDEvbmRpc3RpbmN0KGEpCisgICAgUChiPTIpID0gMS9uZGlzdGluY3Qo YikKKyAgICBQKGE9MSAmIGI9MikgPSAxL25kaXN0aW5jdChhLGIpCisKKyAg ICBQKGI9MiB8IGE9MSkgPSBuZGlzdGluY3QoYSkgLyBuZGlzdGluY3QoYSxi KQorCit3aGljaCBtYXkgYmUgcmV3cml0dGVuIGxpa2UKKworICAgIFAoYj0y IHwgYT0xKQorICAgICAgICA9IG5kaXN0aW5jdChhLGIpIC8gbmRpc3RpbmN0 KGEpCisgICAgICAgID0gKDEvbmRpc3RpbmN0KGIpKSAqIFsobmRpc3RpbmN0 KGEpICogbmRpc3RpbmN0KGIpKSAvIG5kaXN0aW5jdChhLGIpXQorICAgICAg ICA9ICgxL25kaXN0aW5jdChiKSkgKiBxCisKK2FuZCB0aGVyZWZvcmUKKwor ICAgIFAoYT0xICYgYj0yKSA9ICgxL25kaXN0aW5jdChhKSkgKiAoMS9uZGlz dGluY3QoYikpICogcQorCitUaGlzIGFsc28gaWxsdXN0cmF0ZXMgJ3EnIGFz IGEgY29ycmVjdGlvbiBjb2VmZmljaWVudC4KKworSXQgYWxzbyBleHBsYWlu cyB3aHkgd2Ugc3RvcmUgdGhlIGNvZWZmaWNpZW50IGFuZCBub3Qgc2ltcGx5 IG5kaXN0aW5jdChhLGIpLgorVGhpcyB3YXkgd2UgY2FuIHNpbXBseSBlc3Rp bWF0ZSBpbmRpdmlkdWFsIGNsYXVzZXMgYW5kIHRoZW4gc2ltcGx5IGNvcnJl Y3QKK3RoZSBlc3RpbWF0ZSBieSBtdWx0aXBseWluZyB0aGUgcmVzdWx0IHdp dGggJ3EnIC0gd2UgZG9uJ3QgaGF2ZSB0byBtZXNzIHdpdGgKK25kaXN0aW5j dCBlc3RpbWF0ZXMgYXQgYWxsLgorCitOYXR1cmFsbHksIGFzIHRoZSBjb2Vm ZmljaWVudCBpcyBkZXJpdmVzIGZyb20gbmRpc3RpbmN0KGEsYiksIGl0IG1h eSBiZSBhbHNvCit1c2VkIHRvIGVzdGltYXRlIEdST1VQIEJZIGNsYXVzZXMg b24gdGhlIGNvbWJpbmF0aW9uIG9mIGNvbHVtbnMsIHJlcGxhY2luZyB0aGUK K2V4aXN0aW5nIGhldXJpc3RpY3MgaW4gZXN0aW1hdGVfbnVtX2dyb3Vwcygp LgorCitOb3RlOiBDdXJyZW50bHkgb25seSB0aGUgR1JPVVAgQlkgZXN0aW1h dGlvbiBpcyBpbXBsZW1lbnRlZC4gSXQncyBhIGJpdCB1bmNsZWFyCitob3cg dG8gaW1wbGVtZW50IHRoZSBjbGF1c2UgZXN0aW1hdGlvbiB3aGVuIHRoZXJl IGFyZSBvdGhlciBzdGF0aXN0aWNzIChlc3AuCitNQ1YgbGlzdHMgYW5kL29y IGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzKSBhdmFpbGFibGUuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL1JFQURNRS5zdGF0cyBi L3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCmluZGV4 IGQ0MDQ5MTQuLjZkNGIwOWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL212c3RhdHMvUkVBRE1FLnN0YXRzCkBAIC0yMCw2ICsyMCw4IEBAIEN1 cnJlbnRseSB3ZSBvbmx5IGhhdmUgdHdvIGtpbmRzIG9mIG11bHRpdmFyaWF0 ZSBzdGF0aXN0aWNzCiAKICAgICAoYykgbXVsdGl2YXJpYXRlIGhpc3RvZ3Jh bXMgKFJFQURNRS5oaXN0b2dyYW0pCiAKKyAgICAoZCkgbmRpc3RpbmN0IGNv ZWZmaWNpZW50cworCiAKIENvbXBhdGlibGUgY2xhdXNlIHR5cGVzCiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbXZzdGF0cy9jb21tb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL212 c3RhdHMvY29tbW9uLmMKaW5kZXggZmZiNzZmNC4uMmJlOTgwZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbXZzdGF0cy9jb21tb24uYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL2NvbW1vbi5jCkBAIC0zMiw3 ICszMiw4IEBAIHN0YXRpYyBMaXN0KiBsaXN0X212X3N0YXRzKE9pZCByZWxp ZCk7CiAgKiBhbmQgc2VyaWFsaXplcyB0aGVtIGJhY2sgaW50byB0aGUgY2F0 YWxvZyAoYXMgYnl0ZWEgdmFsdWVzKS4KICAqLwogdm9pZAotYnVpbGRfbXZf c3RhdHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxl ICpyb3dzLAorYnVpbGRfbXZfc3RhdHMoUmVsYXRpb24gb25lcmVsLCBkb3Vi bGUgdG90YWxyb3dzLAorCQkJICAgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAq cm93cywKIAkJCSAgIGludCBuYXR0cywgVmFjQXR0clN0YXRzICoqdmFjYXR0 cnN0YXRzKQogewogCUxpc3RDZWxsICpsYzsKQEAgLTUzLDYgKzU0LDcgQEAg YnVpbGRfbXZfc3RhdHMoUmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywg SGVhcFR1cGxlICpyb3dzLAogCQlNVkRlcGVuZGVuY2llcwlkZXBzICA9IE5V TEw7CiAJCU1DVkxpc3QJCW1jdmxpc3QgICA9IE5VTEw7CiAJCU1WSGlzdG9n cmFtCWhpc3RvZ3JhbSA9IE5VTEw7CisJCWRvdWJsZQkJbmRpc3QJICA9IC0x OwogCQlpbnQgbnVtcm93c19maWx0ZXJlZCAgPSBudW1yb3dzOwogCiAJCVZh Y0F0dHJTdGF0cyAgKipzdGF0cyAgPSBOVUxMOwpAQCAtOTIsNiArOTQsOSBA QCBidWlsZF9tdl9zdGF0cyhSZWxhdGlvbiBvbmVyZWwsIGludCBudW1yb3dz LCBIZWFwVHVwbGUgKnJvd3MsCiAJCWlmIChzdGF0LT5kZXBzX2VuYWJsZWQp CiAJCQlkZXBzID0gYnVpbGRfbXZfZGVwZW5kZW5jaWVzKG51bXJvd3MsIHJv d3MsIGF0dHJzLCBzdGF0cyk7CiAKKwkJaWYgKHN0YXQtPm5kaXN0X2VuYWJs ZWQpCisJCQluZGlzdCA9IGJ1aWxkX212X25kaXN0aW5jdCh0b3RhbHJvd3Ms IG51bXJvd3MsIHJvd3MsIGF0dHJzLCBzdGF0cyk7CisKIAkJLyogYnVpbGQg dGhlIE1DViBsaXN0ICovCiAJCWlmIChzdGF0LT5tY3ZfZW5hYmxlZCkKIAkJ CW1jdmxpc3QgPSBidWlsZF9tdl9tY3ZsaXN0KG51bXJvd3MsIHJvd3MsIGF0 dHJzLCBzdGF0cywgJm51bXJvd3NfZmlsdGVyZWQpOwpAQCAtMTAxLDcgKzEw Niw3IEBAIGJ1aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgaW50IG51 bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAkJCWhpc3RvZ3JhbSA9IGJ1aWxk X212X2hpc3RvZ3JhbShudW1yb3dzX2ZpbHRlcmVkLCByb3dzLCBhdHRycywg c3RhdHMsIG51bXJvd3MpOwogCiAJCS8qIHN0b3JlIHRoZSBoaXN0b2dyYW0g LyBNQ1YgbGlzdCBpbiB0aGUgY2F0YWxvZyAqLwotCQl1cGRhdGVfbXZfc3Rh dHMoc3RhdC0+bXZvaWQsIGRlcHMsIG1jdmxpc3QsIGhpc3RvZ3JhbSwgYXR0 cnMsIHN0YXRzKTsKKwkJdXBkYXRlX212X3N0YXRzKHN0YXQtPm12b2lkLCBk ZXBzLCBtY3ZsaXN0LCBoaXN0b2dyYW0sIG5kaXN0LCBhdHRycywgc3RhdHMp OwogCX0KIH0KIApAQCAtMTgzLDYgKzE4OCw4IEBAIGxpc3RfbXZfc3RhdHMo T2lkIHJlbGlkKQogCQlpbmZvLT5tY3ZfYnVpbHQgPSBzdGF0cy0+bWN2X2J1 aWx0OwogCQlpbmZvLT5oaXN0X2VuYWJsZWQgPSBzdGF0cy0+aGlzdF9lbmFi bGVkOwogCQlpbmZvLT5oaXN0X2J1aWx0ID0gc3RhdHMtPmhpc3RfYnVpbHQ7 CisJCWluZm8tPm5kaXN0X2VuYWJsZWQgPSBzdGF0cy0+bmRpc3RfZW5hYmxl ZDsKKwkJaW5mby0+bmRpc3RfYnVpbHQgPSBzdGF0cy0+bmRpc3RfYnVpbHQ7 CiAKIAkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIGluZm8pOwogCX0KQEAg LTI1Miw3ICsyNTksNyBAQCBmaW5kX212X2F0dG51bXMoT2lkIG12b2lkLCBP aWQgKnJlbGlkKQogdm9pZAogdXBkYXRlX212X3N0YXRzKE9pZCBtdm9pZCwK IAkJCQlNVkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsIE1DVkxpc3QgbWN2 bGlzdCwgTVZIaXN0b2dyYW0gaGlzdG9ncmFtLAotCQkJCWludDJ2ZWN0b3Ig KmF0dHJzLCBWYWNBdHRyU3RhdHMgKipzdGF0cykKKwkJCQlkb3VibGUgbmRp c3Rjb2VmZiwgaW50MnZlY3RvciAqYXR0cnMsIFZhY0F0dHJTdGF0cyAqKnN0 YXRzKQogewogCUhlYXBUdXBsZQlzdHVwLAogCQkJCW9sZHR1cDsKQEAgLTI5 MiwyNiArMjk5LDM2IEBAIHVwZGF0ZV9tdl9zdGF0cyhPaWQgbXZvaWQsCiAJ CQk9IFBvaW50ZXJHZXREYXR1bShkYXRhKTsKIAl9CiAKKwlpZiAobmRpc3Rj b2VmZiA+IDEuMCkKKwl7CisJCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGlj X3N0YW5kaXN0IC0xXSA9IGZhbHNlOworCQl2YWx1ZXNbQW51bV9wZ19tdl9z dGF0aXN0aWNfc3RhbmRpc3QtMV0gPSBGbG9hdDhHZXREYXR1bShuZGlzdGNv ZWZmKTsKKwl9CisKIAkvKiBhbHdheXMgcmVwbGFjZSB0aGUgdmFsdWUgKGVp dGhlciBieSBieXRlYSBvciBOVUxMKSAqLwogCXJlcGxhY2VzW0FudW1fcGdf bXZfc3RhdGlzdGljX3N0YWRlcHMgLTFdID0gdHJ1ZTsKIAlyZXBsYWNlc1tB bnVtX3BnX212X3N0YXRpc3RpY19zdGFtY3YgLTFdID0gdHJ1ZTsKIAlyZXBs YWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFoaXN0LTFdID0gdHJ1ZTsK KwlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFuZGlzdC0xXSA9 IHRydWU7CiAKIAkvKiBhbHdheXMgY2hhbmdlIHRoZSBhdmFpbGFiaWxpdHkg ZmxhZ3MgKi8KIAludWxsc1tBbnVtX3BnX212X3N0YXRpc3RpY19kZXBzX2J1 aWx0IC0xXSA9IGZhbHNlOwogCW51bGxzW0FudW1fcGdfbXZfc3RhdGlzdGlj X21jdl9idWlsdCAtMV0gPSBmYWxzZTsKIAludWxsc1tBbnVtX3BnX212X3N0 YXRpc3RpY19oaXN0X2J1aWx0LTFdID0gZmFsc2U7CisJbnVsbHNbQW51bV9w Z19tdl9zdGF0aXN0aWNfbmRpc3RfYnVpbHQtMV0gPSBmYWxzZTsKIAludWxs c1tBbnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzLTFdICAgICA9IGZhbHNl OwogCiAJLyogdXNlIHRoZSBuZXcgYXR0bnVtcywgaW4gY2FzZSB3ZSByZW1v dmVkIHNvbWUgZHJvcHBlZCBvbmVzICovCiAJcmVwbGFjZXNbQW51bV9wZ19t dl9zdGF0aXN0aWNfZGVwc19idWlsdC0xXSA9IHRydWU7CiAJcmVwbGFjZXNb QW51bV9wZ19tdl9zdGF0aXN0aWNfbWN2X2J1aWx0ICAtMV0gPSB0cnVlOwor CXJlcGxhY2VzW0FudW1fcGdfbXZfc3RhdGlzdGljX25kaXN0X2J1aWx0LTFd ID0gdHJ1ZTsKIAlyZXBsYWNlc1tBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0 X2J1aWx0IC0xXSA9IHRydWU7CiAJcmVwbGFjZXNbQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3Rha2V5cyAtMV0gICAgPSB0cnVlOwogCiAJdmFsdWVzW0FudW1f cGdfbXZfc3RhdGlzdGljX2RlcHNfYnVpbHQtMV0gPSBCb29sR2V0RGF0dW0o ZGVwZW5kZW5jaWVzICE9IE5VTEwpOwogCXZhbHVlc1tBbnVtX3BnX212X3N0 YXRpc3RpY19tY3ZfYnVpbHQgIC0xXSA9IEJvb2xHZXREYXR1bShtY3ZsaXN0 ICE9IE5VTEwpOwogCXZhbHVlc1tBbnVtX3BnX212X3N0YXRpc3RpY19oaXN0 X2J1aWx0IC0xXSA9IEJvb2xHZXREYXR1bShoaXN0b2dyYW0gIT0gTlVMTCk7 CisJdmFsdWVzW0FudW1fcGdfbXZfc3RhdGlzdGljX25kaXN0X2J1aWx0LTFd ID0gQm9vbEdldERhdHVtKG5kaXN0Y29lZmYgPiAxLjApOwogCXZhbHVlc1tB bnVtX3BnX212X3N0YXRpc3RpY19zdGFrZXlzIC0xXSAgICA9IFBvaW50ZXJH ZXREYXR1bShhdHRycyk7CiAKIAkvKiBJcyB0aGVyZSBhbHJlYWR5IGEgcGdf bXZfc3RhdGlzdGljIHR1cGxlIGZvciB0aGlzIGF0dHJpYnV0ZT8gKi8KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL212c3RhdHMvbXZkaXN0LmMg Yi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL212ZGlzdC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjgzNTgKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmFja2VuZC91dGlscy9tdnN0YXRzL212ZGlzdC5j CkBAIC0wLDAgKzEsMTcxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBtdmRpc3QuYworICoJICBQT1NUR1JFUyBtdWx0aXZh cmlhdGUgZGlzdGluY3QgY29lZmZpY2llbnRzCisgKgorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tl bmQvdXRpbHMvbXZzdGF0cy9tdmRpc3QuYworICoKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisK KyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKKworc3RhdGljIGRvdWJsZSBlc3RpbWF0ZV9uZGlzdGluY3QoZG91 YmxlIHRvdGFscm93cywgaW50IG51bXJvd3MsIGludCBkLCBpbnQgZjEpOwor CisvKgorICogQ29tcHV0ZSBuZGlzdGluY3QgY29lZmZpY2llbnQgZm9yIHRo ZSBjb21iaW5hdGlvbiBvZiBhdHRyaWJ1dGVzLiBUaGlzCisgKiBjb21wdXRl cyB0aGUgbmRpc3RpbmN0IGVzdGltYXRlIHVzaW5nIHRoZSBzYW1lIGVzdGlt YXRvciB1c2VkIGluIGFuYWx5emUuYworICogYW5kIHRoZW4gY29tcHV0ZXMg dGhlIGNvZWZmaWNpZW50LgorICovCitkb3VibGUKK2J1aWxkX212X25kaXN0 aW5jdChkb3VibGUgdG90YWxyb3dzLCBpbnQgbnVtcm93cywgSGVhcFR1cGxl ICpyb3dzLAorCQkJCSAgIGludDJ2ZWN0b3IgKmF0dHJzLCBWYWNBdHRyU3Rh dHMgKipzdGF0cykKK3sKKwlpbnQgaSwgajsKKwlpbnQgZjEsIGNudCwgZDsK KwlpbnQgbm11bHRpcGxlLCBzdW1tdWx0aXBsZTsKKwlpbnQgbnVtYXR0cnMg PSBhdHRycy0+ZGltMTsKKwlNdWx0aVNvcnRTdXBwb3J0IG1zcyA9IG11bHRp X3NvcnRfaW5pdChudW1hdHRycyk7CisJZG91YmxlIG5kaXN0Y29lZmY7CisK KwkvKgorCSAqIEl0J3MgcG9zc2libGUgdG8gc29ydCB0aGUgc2FtcGxlIHJv d3MgZGlyZWN0bHksIGJ1dCB0aGlzIHNlZW1lZAorCSAqIHNvbWVob3cgc2lt cGxlciAvIGxlc3MgZXJyb3IgcHJvbmUuIEFub3RoZXIgb3B0aW9uIHdvdWxk IGJlIHRvCisJICogYWxsb2NhdGUgdGhlIGFycmF5cyBmb3IgZWFjaCBTb3J0 SXRlbSBzZXBhcmF0ZWx5LCBidXQgdGhhdCdkIGJlCisJICogc2lnbmlmaWNh bnQgb3ZlcmhlYWQgKG5vdCBqdXN0IENQVSwgYnV0IGVzcGVjaWFsbHkgbWVt b3J5IGJsb2F0KS4KKwkgKi8KKwlTb3J0SXRlbSAqIGl0ZW1zID0gKFNvcnRJ dGVtKilwYWxsb2MwKG51bXJvd3MgKiBzaXplb2YoU29ydEl0ZW0pKTsKKwor CURhdHVtICp2YWx1ZXMgPSAoRGF0dW0qKXBhbGxvYzAoc2l6ZW9mKERhdHVt KSAqIG51bXJvd3MgKiBudW1hdHRycyk7CisJYm9vbCAgKmlzbnVsbCA9IChi b29sKilwYWxsb2MwKHNpemVvZihib29sKSAqIG51bXJvd3MgKiBudW1hdHRy cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcm93czsgaSsrKQorCXsKKwkJ aXRlbXNbaV0udmFsdWVzID0gJnZhbHVlc1tpICogbnVtYXR0cnNdOworCQlp dGVtc1tpXS5pc251bGwgPSAmaXNudWxsW2kgKiBudW1hdHRyc107CisJfQor CisJQXNzZXJ0KG51bWF0dHJzID49IDIpOworCisJZm9yIChpID0gMDsgaSA8 IG51bWF0dHJzOyBpKyspCisJeworCQkvKiBwcmVwYXJlIHRoZSBzb3J0IGZ1 bmN0aW9uIGZvciB0aGUgZmlyc3QgZGltZW5zaW9uICovCisJCW11bHRpX3Nv cnRfYWRkX2RpbWVuc2lvbihtc3MsIGksIGksIHN0YXRzKTsKKworCQkvKiBh Y2N1bXVsYXRlIGFsbCB0aGUgZGF0YSBpbnRvIHRoZSBhcnJheSBhbmQgc29y dCBpdCAqLworCQlmb3IgKGogPSAwOyBqIDwgbnVtcm93czsgaisrKQorCQl7 CisJCQlpdGVtc1tqXS52YWx1ZXNbaV0KKwkJCQk9IGhlYXBfZ2V0YXR0cihy b3dzW2pdLCBhdHRycy0+dmFsdWVzW2ldLAorCQkJCQkJCSAgIHN0YXRzW2ld LT50dXBEZXNjLCAmaXRlbXNbal0uaXNudWxsW2ldKTsKKwkJfQorCX0KKwor CXFzb3J0X2FyZygodm9pZCAqKSBpdGVtcywgbnVtcm93cywgc2l6ZW9mKFNv cnRJdGVtKSwKKwkJCSAgbXVsdGlfc29ydF9jb21wYXJlLCBtc3MpOworCisJ LyogY291bnQgbnVtYmVyIG9mIGRpc3RpbmN0IGNvbWJpbmF0aW9ucyAqLwor CisJZjEgPSAwOworCWNudCA9IDE7CisJZCA9IDE7CisJZm9yIChpID0gMTsg aSA8IG51bXJvd3M7IGkrKykKKwl7CisJCWlmIChtdWx0aV9zb3J0X2NvbXBh cmUoJml0ZW1zW2ldLCAmaXRlbXNbaS0xXSwgbXNzKSAhPSAwKQorCQl7CisJ CQlpZiAoY250ID09IDEpCisJCQkJZjEgKz0gMTsKKwkJCWVsc2UKKwkJCXsK KwkJCQlubXVsdGlwbGUgKz0gMTsKKwkJCQlzdW1tdWx0aXBsZSArPSBjbnQ7 CisJCQl9CisKKwkJCWQrKzsKKwkJCWNudCA9IDA7CisJCX0KKworCQljbnQg Kz0gMTsKKwl9CisKKwlpZiAoY250ID09IDEpCisJCWYxICs9IDE7CisJZWxz ZQorCXsKKwkJbm11bHRpcGxlICs9IDE7CisJCXN1bW11bHRpcGxlICs9IGNu dDsKKwl9CisKKwluZGlzdGNvZWZmID0gMSAvIGVzdGltYXRlX25kaXN0aW5j dCh0b3RhbHJvd3MsIG51bXJvd3MsIGQsIGYxKTsKKworCS8qCisJICogbm93 IGNvdW50IGRpc3RpbmN0IHZhbHVlcyBmb3IgZWFjaCBhdHRyaWJ1dGUgYW5k IGluY3JlbWVudGFsbHkKKwkgKiBjb21wdXRlIG5kaXN0aW5jdChhLGIpIC8g KG5kaXN0aW5jdChhKSAqIG5kaXN0aW5jdChiKSkKKwkgKgorCSAqIEZJWE1F IFByb2JhYmx5IG5lZWQgdG8gaGFuZGxlIGNhc2VzIHdoZW4gb25lIG9mIHRo ZSBuZGlzdGluY3QKKwkgKiAgICAgICBlc3RpbWF0ZXMgaXMgbmVnYXRpdmUs IGFuZCBhbHNvIGNoZWNrIHRoYXQgdGhlIGNvbWJpbmVkCisJICogICAgICAg bmRpc3RpbmN0IGlzIGdyZWF0ZXIgdGhhbiBhbnkgb2YgdGhvc2UgcGFydGlh bCB2YWx1ZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bWF0dHJzOyBp KyspCisJCW5kaXN0Y29lZmYgKj0gc3RhdHNbaV0tPnN0YWRpc3RpbmN0Owor CisJcmV0dXJuIG5kaXN0Y29lZmY7Cit9CisKK2RvdWJsZQorbG9hZF9tdl9u ZGlzdGluY3QoT2lkIG12b2lkKQoreworCWJvb2wJCWlzbnVsbCA9IGZhbHNl OworCURhdHVtCQlkZXBzOworCisJLyogUHJlcGFyZSB0byBzY2FuIHBnX212 X3N0YXRpc3RpYyBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0aGlz IHJlbC4gKi8KKwlIZWFwVHVwbGUJaHR1cCA9IFNlYXJjaFN5c0NhY2hlMShN VlNUQVRPSUQsIE9iamVjdElkR2V0RGF0dW0obXZvaWQpKTsKKworI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlGb3JtX3BnX212X3N0YXRpc3RpYwlt dnN0YXQgPSAoRm9ybV9wZ19tdl9zdGF0aXN0aWMpIEdFVFNUUlVDVChodHVw KTsKKwlBc3NlcnQobXZzdGF0LT5uZGlzdF9lbmFibGVkICYmIG12c3RhdC0+ bmRpc3RfYnVpbHQpOworI2VuZGlmCisKKwlkZXBzID0gU3lzQ2FjaGVHZXRB dHRyKE1WU1RBVE9JRCwgaHR1cCwKKwkJCQkJCSAgIEFudW1fcGdfbXZfc3Rh dGlzdGljX3N0YW5kaXN0LCAmaXNudWxsKTsKKworCUFzc2VydCghaXNudWxs KTsKKworCVJlbGVhc2VTeXNDYWNoZShodHVwKTsKKworCXJldHVybiBEYXR1 bUdldEZsb2F0OChkZXBzKTsKK30KKworLyogVGhlIER1ajEgZXN0aW1hdG9y IChhbHJlYWR5IHVzZWQgaW4gYW5hbHl6ZS5jKS4gKi8KK3N0YXRpYyBkb3Vi bGUKK2VzdGltYXRlX25kaXN0aW5jdChkb3VibGUgdG90YWxyb3dzLCBpbnQg bnVtcm93cywgaW50IGQsIGludCBmMSkKK3sKKwlkb3VibGUJbnVtZXIsCisJ CQlkZW5vbSwKKwkJCW5kaXN0aW5jdDsKKworCW51bWVyID0gKGRvdWJsZSkg bnVtcm93cyAqKGRvdWJsZSkgZDsKKworCWRlbm9tID0gKGRvdWJsZSkgKG51 bXJvd3MgLSBmMSkgKworCQkJKGRvdWJsZSkgZjEgKiAoZG91YmxlKSBudW1y b3dzIC8gdG90YWxyb3dzOworCisJbmRpc3RpbmN0ID0gbnVtZXIgLyBkZW5v bTsKKworCS8qIENsYW1wIHRvIHNhbmUgcmFuZ2UgaW4gY2FzZSBvZiByb3Vu ZG9mZiBlcnJvciAqLworCWlmIChuZGlzdGluY3QgPCAoZG91YmxlKSBkKQor CQluZGlzdGluY3QgPSAoZG91YmxlKSBkOworCisJaWYgKG5kaXN0aW5jdCA+ IHRvdGFscm93cykKKwkJbmRpc3RpbmN0ID0gdG90YWxyb3dzOworCisJcmV0 dXJuIGZsb29yKG5kaXN0aW5jdCArIDAuNSk7Cit9CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX212X3N0YXRpc3RpYy5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19tdl9zdGF0aXN0aWMuaAppbmRleCBhNTk0NWFm Li5lZTM1M2RhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X212X3N0YXRpc3RpYy5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf bXZfc3RhdGlzdGljLmgKQEAgLTM5LDYgKzM5LDcgQEAgQ0FUQUxPRyhwZ19t dl9zdGF0aXN0aWMsMzM4MSkKIAlib29sCQlkZXBzX2VuYWJsZWQ7CQkvKiBh bmFseXplIGRlcGVuZGVuY2llcz8gKi8KIAlib29sCQltY3ZfZW5hYmxlZDsJ CS8qIGJ1aWxkIE1DViBsaXN0PyAqLwogCWJvb2wJCWhpc3RfZW5hYmxlZDsJ CS8qIGJ1aWxkIGhpc3RvZ3JhbT8gKi8KKwlib29sCQluZGlzdF9lbmFibGVk OwkJLyogYnVpbGQgbmRpc3QgY29lZmZpY2llbnQ/ICovCiAKIAkvKiBoaXN0 b2dyYW0gLyBNQ1Ygc2l6ZSAqLwogCWludDMyCQltY3ZfbWF4X2l0ZW1zOwkJ LyogbWF4IE1DViBpdGVtcyAqLwpAQCAtNDgsNiArNDksNyBAQCBDQVRBTE9H KHBnX212X3N0YXRpc3RpYywzMzgxKQogCWJvb2wJCWRlcHNfYnVpbHQ7CQkJ LyogZGVwZW5kZW5jaWVzIHdlcmUgYnVpbHQgKi8KIAlib29sCQltY3ZfYnVp bHQ7CQkJLyogTUNWIGxpc3Qgd2FzIGJ1aWx0ICovCiAJYm9vbAkJaGlzdF9i dWlsdDsJCQkvKiBoaXN0b2dyYW0gd2FzIGJ1aWx0ICovCisJYm9vbAkJbmRp c3RfYnVpbHQ7CQkvKiBuZGlzdGluY3QgY29lZmYgYnVpbHQgKi8KIAogCS8q IHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSwgYnV0IHdlIGFs bG93IGRpcmVjdCBhY2Nlc3MgdG8gc3Rha2V5cyAqLwogCWludDJ2ZWN0b3IJ c3Rha2V5czsJCQkvKiBhcnJheSBvZiBjb2x1bW4ga2V5cyAqLwpAQCAtNTYs NiArNTgsNyBAQCBDQVRBTE9HKHBnX212X3N0YXRpc3RpYywzMzgxKQogCWJ5 dGVhCQlzdGFkZXBzOwkJCS8qIGRlcGVuZGVuY2llcyAoc2VyaWFsaXplZCkg Ki8KIAlieXRlYQkJc3RhbWN2OwkJCQkvKiBNQ1YgbGlzdCAoc2VyaWFsaXpl ZCkgKi8KIAlieXRlYQkJc3RhaGlzdDsJCQkvKiBNViBoaXN0b2dyYW0gKHNl cmlhbGl6ZWQpICovCisJZmxvYXQ4CQlzdGFuZGNvZWZmOwkJCS8qIG5kaXN0 aW5jdCBjb2VmZiAoc2VyaWFsaXplZCkgKi8KICNlbmRpZgogCiB9IEZvcm1E YXRhX3BnX212X3N0YXRpc3RpYzsKQEAgLTcxLDIxICs3NCwyNCBAQCB0eXBl ZGVmIEZvcm1EYXRhX3BnX212X3N0YXRpc3RpYyAqRm9ybV9wZ19tdl9zdGF0 aXN0aWM7CiAgKgkJY29tcGlsZXIgY29uc3RhbnRzIGZvciBwZ19tdl9zdGF0 aXN0aWMKICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwotI2RlZmluZSBOYXR0 c19wZ19tdl9zdGF0aXN0aWMJCQkJCTE1CisjZGVmaW5lIE5hdHRzX3BnX212 X3N0YXRpc3RpYwkJCQkJMTgKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0 aWNfc3RhcmVsaWQJCQkxCiAjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGlj X3N0YW5hbWUJCQkyCiAjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGljX3N0 YW5hbWVzcGFjZQkJMwogI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3RpY19k ZXBzX2VuYWJsZWQJCTQKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNf bWN2X2VuYWJsZWQJCTUKICNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNf aGlzdF9lbmFibGVkCQk2Ci0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlzdGlj X21jdl9tYXhfaXRlbXMJCTcKLSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0 aWNfaGlzdF9tYXhfYnVja2V0cwk4Ci0jZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX2RlcHNfYnVpbHQJCQk5Ci0jZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX21jdl9idWlsdAkJCTEwCi0jZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX2hpc3RfYnVpbHQJCQkxMQotI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19zdGFrZXlzCQkJMTIKLSNkZWZpbmUgQW51bV9wZ19tdl9zdGF0 aXN0aWNfc3RhZGVwcwkJCTEzCi0jZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX3N0YW1jdgkJCQkxNAotI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3Rp Y19zdGFoaXN0CQkJMTUKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0aWNf bmRpc3RfZW5hYmxlZAkJNworI2RlZmluZSBBbnVtX3BnX212X3N0YXRpc3Rp Y19tY3ZfbWF4X2l0ZW1zCQk4CisjZGVmaW5lIEFudW1fcGdfbXZfc3RhdGlz dGljX2hpc3RfbWF4X2J1Y2tldHMJOQorI2RlZmluZSBBbnVtX3BnX212X3N0 YXRpc3RpY19kZXBzX2J1aWx0CQkJMTAKKyNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfbWN2X2J1aWx0CQkJMTEKKyNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfaGlzdF9idWlsdAkJCTEyCisjZGVmaW5lIEFudW1fcGdfbXZf c3RhdGlzdGljX25kaXN0X2J1aWx0CQkxMworI2RlZmluZSBBbnVtX3BnX212 X3N0YXRpc3RpY19zdGFrZXlzCQkJMTQKKyNkZWZpbmUgQW51bV9wZ19tdl9z dGF0aXN0aWNfc3RhZGVwcwkJCTE1CisjZGVmaW5lIEFudW1fcGdfbXZfc3Rh dGlzdGljX3N0YW1jdgkJCQkxNgorI2RlZmluZSBBbnVtX3BnX212X3N0YXRp c3RpY19zdGFoaXN0CQkJMTcKKyNkZWZpbmUgQW51bV9wZ19tdl9zdGF0aXN0 aWNfc3RhbmRpc3QJCQkxOAogCiAjZW5kaWYgICAvKiBQR19NVl9TVEFUSVNU SUNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRp b24uaCBiL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKaW5kZXggNDZi ZWNlNi4uYTJmYWZkMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv cmVsYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5o CkBAIC02MjEsMTEgKzYyMSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBNVlN0YXRp c3RpY0luZm8KIAlib29sCQlkZXBzX2VuYWJsZWQ7CS8qIGZ1bmN0aW9uYWwg ZGVwZW5kZW5jaWVzIGVuYWJsZWQgKi8KIAlib29sCQltY3ZfZW5hYmxlZDsJ LyogTUNWIGxpc3QgZW5hYmxlZCAqLwogCWJvb2wJCWhpc3RfZW5hYmxlZDsJ LyogaGlzdG9ncmFtIGVuYWJsZWQgKi8KKwlib29sCQluZGlzdF9lbmFibGVk OwkvKiBuZGlzdGluY3QgY29lZmZpY2llbnQgZW5hYmxlZCAqLwogCiAJLyog YnVpbHQvYXZhaWxhYmxlIHN0YXRpc3RpY3MgKi8KIAlib29sCQlkZXBzX2J1 aWx0OwkJLyogZnVuY3Rpb25hbCBkZXBlbmRlbmNpZXMgYnVpbHQgKi8KIAli b29sCQltY3ZfYnVpbHQ7CQkvKiBNQ1YgbGlzdCBidWlsdCAqLwogCWJvb2wJ CWhpc3RfYnVpbHQ7CQkvKiBoaXN0b2dyYW0gYnVpbHQgKi8KKwlib29sCQlu ZGlzdF9idWlsdDsJLyogbmRpc3RpbmN0IGNvZWZmaWNpZW50IGJ1aWx0ICov CiAKIAkvKiBjb2x1bW5zIGluIHRoZSBzdGF0aXN0aWNzIChhdHRudW1zKSAq LwogCWludDJ2ZWN0b3IgKnN0YWtleXM7CQkvKiBhdHRudW1zIG9mIHRoZSBj b2x1bW5zIGNvdmVyZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0 aWxzL212c3RhdHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL212c3RhdHMuaApp bmRleCAzNWIyZjhlLi5mYjJjNWQ4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS91dGlscy9tdnN0YXRzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvbXZz dGF0cy5oCkBAIC0yMjUsNiArMjI1LDcgQEAgdHlwZWRlZiBNVlNlcmlhbGl6 ZWRIaXN0b2dyYW1EYXRhICpNVlNlcmlhbGl6ZWRIaXN0b2dyYW07CiBNVkRl cGVuZGVuY2llcyBsb2FkX212X2RlcGVuZGVuY2llcyhPaWQgbXZvaWQpOwog TUNWTGlzdCAgICAgICAgbG9hZF9tdl9tY3ZsaXN0KE9pZCBtdm9pZCk7CiBN VlNlcmlhbGl6ZWRIaXN0b2dyYW0gICAgbG9hZF9tdl9oaXN0b2dyYW0oT2lk IG12b2lkKTsKK2RvdWJsZQkJICAgbG9hZF9tdl9uZGlzdGluY3QoT2lkIG12 b2lkKTsKIAogYnl0ZWEgKiBzZXJpYWxpemVfbXZfZGVwZW5kZW5jaWVzKE1W RGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcyk7CiBieXRlYSAqIHNlcmlhbGl6 ZV9tdl9tY3ZsaXN0KE1DVkxpc3QgbWN2bGlzdCwgaW50MnZlY3RvciAqYXR0 cnMsCkBAIC0yNjYsMTEgKzI2NywxNyBAQCBNVkhpc3RvZ3JhbQogYnVpbGRf bXZfaGlzdG9ncmFtKGludCBudW1yb3dzLCBIZWFwVHVwbGUgKnJvd3MsIGlu dDJ2ZWN0b3IgKmF0dHJzLAogCQkJCSAgIFZhY0F0dHJTdGF0cyAqKnN0YXRz LCBpbnQgbnVtcm93c190b3RhbCk7CiAKLXZvaWQgYnVpbGRfbXZfc3RhdHMo UmVsYXRpb24gb25lcmVsLCBpbnQgbnVtcm93cywgSGVhcFR1cGxlICpyb3dz LAorZG91YmxlCitidWlsZF9tdl9uZGlzdGluY3QoZG91YmxlIHRvdGFscm93 cywgaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKKwkJCQkgICBpbnQy dmVjdG9yICphdHRycywgVmFjQXR0clN0YXRzICoqc3RhdHMpOworCit2b2lk IGJ1aWxkX212X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgZG91YmxlIHRvdGFs cm93cywKKwkJCQkJaW50IG51bXJvd3MsIEhlYXBUdXBsZSAqcm93cywKIAkJ CQkJaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwog CiB2b2lkIHVwZGF0ZV9tdl9zdGF0cyhPaWQgcmVsaWQsIE1WRGVwZW5kZW5j aWVzIGRlcGVuZGVuY2llcywKIAkJCQkJIE1DVkxpc3QgbWN2bGlzdCwgTVZI aXN0b2dyYW0gaGlzdG9ncmFtLAorCQkJCQkgZG91YmxlIG5kaXN0Y29lZmYs CiAJCQkJCSBpbnQydmVjdG9yICphdHRycywgVmFjQXR0clN0YXRzICoqc3Rh dHMpOwogCiAjaWZkZWYgREVCVUdfTVZISVNUCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IDFhMWE0Y2EuLjBhZDkz NWUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMu b3V0CkBAIC0xMzc3LDcgKzEzNzcsOCBAQCBwZ19tdl9zdGF0c3wgU0VMRUNU IG4ubnNwbmFtZSBBUyBzY2hlbWFuYW1lLAogICAgIGxlbmd0aChzLnN0YW1j dikgQVMgbWN2Ynl0ZXMsCiAgICAgcGdfbXZfc3RhdHNfbWN2bGlzdF9pbmZv KHMuc3RhbWN2KSBBUyBtY3ZpbmZvLAogICAgIGxlbmd0aChzLnN0YWhpc3Qp IEFTIGhpc3RieXRlcywKLSAgICBwZ19tdl9zdGF0c19oaXN0b2dyYW1faW5m byhzLnN0YWhpc3QpIEFTIGhpc3RpbmZvCisgICAgcGdfbXZfc3RhdHNfaGlz dG9ncmFtX2luZm8ocy5zdGFoaXN0KSBBUyBoaXN0aW5mbywKKyAgICBzLnN0 YW5kY29lZmYgQVMgbmRjb2VmZgogICAgRlJPTSAoKHBnX212X3N0YXRpc3Rp YyBzCiAgICAgIEpPSU4gcGdfY2xhc3MgYyBPTiAoKGMub2lkID0gcy5zdGFy ZWxpZCkpKQogICAgICBMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gKChu Lm9pZCA9IGMucmVsbmFtZXNwYWNlKSkpOwotLSAKMi4xLjAKCg== --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename*0=0008-change-how-we-apply-selectivity-to-number-of-groups-.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0008-change-how-we-apply-selectivity-to-number-of-groups-.patch"; charset="UTF-8" RnJvbSAxNmRmMDg1OWJhOTQ3OGFmNGQ5M2ZjOGZlNDVmMTdiNGYyNTVlMWE4 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogVHVlLCAyNiBKYW4gMjAxNiAx ODoxNDozMyArMDEwMApTdWJqZWN0OiBbUEFUQ0ggOC85XSBjaGFuZ2UgaG93 IHdlIGFwcGx5IHNlbGVjdGl2aXR5IHRvIG51bWJlciBvZiBncm91cHMKIGVz dGltYXRlCgpJbnN0ZWFkIG9mIHNpbXBseSBtdWx0aXBseWluZyB0aGUgbmRp c3RpbmN0IGVzdGltYXRlIHdpdGggc2VsZWN0aWNpdHksCndlIGluc3RlYWQg dXNlIHRoZSBmb3JtdWxhIGZvciB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGRp c3RpbmN0IHZhbHVlcwpvYnNlcnZlZCBpbiAnaycgcm93cyB3aGVuIHRoZXJl IGFyZSAnZCcgZGlzdGluY3QgdmFsdWVzIGluIHRoZSBiaW4KCiAgICBkICog KDEgLSAoKGQgLSAxKSAvIGQpXmspCgpUaGlzIGlzICd3aXRoIHJlcGxhY2Vt ZW50cycgd2hpY2ggc2VlbXMgYXBwcm9wcmlhdGUgZm9yIHRoZSB1c2UsIGFu ZCBpdAptb3N0bHkgYXNzdW1lcyB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiB0 aGUgZGlzdGluY3QgdmFsdWVzLiBTbyBpZiB0aGUKZGlzdHJpYnV0aW9uIGlz IG5vdCB1bmlmb3JtIChlLmcuIHRoZXJlIGFyZSB2ZXJ5IGZyZXF1ZW50IGdy b3VwcykgdGhpcwptYXkgYmUgbGVzcyBhY2N1cmF0ZSB0aGFuIHRoZSBjdXJy ZW50IGFsZ29yaXRobSBpbiBzb21lIGNhc2VzLCBnaXZpbmcKb3Zlci1lc3Rp bWF0ZXMuIEJ1dCB0aGF0J3MgcHJvYmFibHkgYmV0dGVyIHRoYW4gT09NLgot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIHwgMiArLQog MSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCBh ODRkZDJiLi5jZTNhZDE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv c2VsZnVuY3MuYwpAQCAtMzQ2NSw3ICszNDY1LDcgQEAgZXN0aW1hdGVfbnVt X2dyb3VwcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywg ZG91YmxlIGlucHV0X3Jvd3MsCiAJCQkvKgogCQkJICogTXVsdGlwbHkgYnkg cmVzdHJpY3Rpb24gc2VsZWN0aXZpdHkuCiAJCQkgKi8KLQkJCXJlbGRpc3Rp bmN0ICo9IHJlbC0+cm93cyAvIHJlbC0+dHVwbGVzOworCQkJcmVsZGlzdGlu Y3QgPSByZWxkaXN0aW5jdCAqICgxIC0gcG93bCgocmVsZGlzdGluY3QgLSAx KSAvIHJlbGRpc3RpbmN0LHJlbC0+cm93cykpOwogCiAJCQkvKgogCQkJICog VXBkYXRlIGVzdGltYXRlIG9mIHRvdGFsIGRpc3RpbmN0IGdyb3Vwcy4KLS0g CjIuMS4wCgo= --=-XN0O/2RNBH+/zPG4CJw8 Content-Disposition: attachment; filename*0=0009-fixup-of-regression-tests-plans-changes-by-group-by-.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0009-fixup-of-regression-tests-plans-changes-by-group-by-.patch"; charset="UTF-8" RnJvbSA2MGFiMmU2Njc1YjVkNDNmNWNlYmNjYjdmZDA2YzdlNzM4Nzk5MmYz IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEg PHRvbWFzQHBnYWRkaWN0LmNvbT4KRGF0ZTogU3VuLCAyOCBGZWIgMjAxNiAy MToxNjo0MCArMDEwMApTdWJqZWN0OiBbUEFUQ0ggOS85XSBmaXh1cCBvZiBy ZWdyZXNzaW9uIHRlc3RzIChwbGFucyBjaGFuZ2VzIGJ5IGdyb3VwIGJ5CiBl c3RpbWF0aW9uKQoKLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pv aW4ub3V0ICAgICAgfCAyMCArKysrKysrKysrLS0tLS0tLS0tLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0IHwgMjUgKysrKysr KysrKystLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC91bmlvbi5vdXQgICAgIHwgMTYgKysrKysrKystLS0tLS0tLQogMyBmaWxl cyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4u b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAppbmRl eCA1OWQ3ODc3Li5kOWRkNWNhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTM5NTEsMTcgKzM5NTEsMTcgQEAgc2Vs ZWN0IGQuKiBmcm9tIGQgbGVmdCBqb2luIChzZWxlY3QgKiBmcm9tIGIgZ3Jv dXAgYnkgYi5pZCwgYi5jX2lkKSBzCiAgIG9uIGQuYSA9IHMuaWQ7CiAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIE1lcmdlIExlZnQg Sm9pbgotICAgTWVyZ2UgQ29uZDogKGQuYSA9IHMuaWQpCi0gICAtPiAgU29y dAotICAgICAgICAgU29ydCBLZXk6IGQuYQotICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGQKKyBNZXJnZSBSaWdodCBKb2luCisgICBNZXJnZSBDb25kOiAo cy5pZCA9IGQuYSkKICAgIC0+ICBTb3J0CiAgICAgICAgICBTb3J0IEtleTog cy5pZAogICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gcwogICAgICAg ICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKICAgICAgICAgICAgICAgICAg ICAgIEdyb3VwIEtleTogYi5pZAogICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGIKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtl eTogZC5hCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZAogKDExIHJvd3Mp CiAKIC0tIHNpbWlsYXJseSwgYnV0IGtleWluZyBvZmYgYSBESVNUSU5DVCBj bGF1c2UKQEAgLTM5NzAsMTcgKzM5NzAsMTcgQEAgc2VsZWN0IGQuKiBmcm9t IGQgbGVmdCBqb2luIChzZWxlY3QgZGlzdGluY3QgKiBmcm9tIGIpIHMKICAg b24gZC5hID0gcy5pZDsKICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0gTWVyZ2UgTGVmdCBKb2luCi0gICBNZXJn ZSBDb25kOiAoZC5hID0gcy5pZCkKLSAgIC0+ICBTb3J0Ci0gICAgICAgICBT b3J0IEtleTogZC5hCi0gICAgICAgICAtPiAgU2VxIFNjYW4gb24gZAorIE1l cmdlIFJpZ2h0IEpvaW4KKyAgIE1lcmdlIENvbmQ6IChzLmlkID0gZC5hKQog ICAgLT4gIFNvcnQKICAgICAgICAgIFNvcnQgS2V5OiBzLmlkCiAgICAgICAg ICAtPiAgU3VicXVlcnkgU2NhbiBvbiBzCiAgICAgICAgICAgICAgICAtPiAg SGFzaEFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiBiLmlkLCBiLmNfaWQKICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBiCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGQu YQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGQKICgxMSByb3dzKQogCiAt LSBjaGVjayBqb2luIHJlbW92YWwgd29ya3Mgd2hlbiB1bmlxdWVuZXNzIG9m IHRoZSBqb2luIGNvbmRpdGlvbiBpcyBlbmZvcmNlZApkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CmluZGV4IGRl NjRjYTcuLjBmYzkzZDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3Vic2VsZWN0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKQEAgLTgwNywyNyArODA3LDI0IEBA IHNlbGVjdCAqIGZyb20gaW50NF90Ymwgd2hlcmUKIGV4cGxhaW4gKHZlcmJv c2UsIGNvc3RzIG9mZikKIHNlbGVjdCAqIGZyb20gaW50NF90YmwgbyB3aGVy ZSAoZjEsIGYxKSBpbgogICAoc2VsZWN0IGYxLCBnZW5lcmF0ZV9zZXJpZXMo MSwyKSAvIDEwIGcgZnJvbSBpbnQ0X3RibCBpIGdyb3VwIGJ5IGYxKTsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoIFNlbWkgSm9pbgogICAgT3V0cHV0OiBv LmYxCiAgICBIYXNoIENvbmQ6IChvLmYxID0gIkFOWV9zdWJxdWVyeSIuZjEp CiAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmludDRfdGJsIG8KICAgICAg ICAgIE91dHB1dDogby5mMQogICAgLT4gIEhhc2gKICAgICAgICAgIE91dHB1 dDogIkFOWV9zdWJxdWVyeSIuZjEsICJBTllfc3VicXVlcnkiLmcKLSAgICAg ICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAtPiAgU3VicXVlcnkg U2NhbiBvbiAiQU5ZX3N1YnF1ZXJ5IgogICAgICAgICAgICAgICAgT3V0cHV0 OiAiQU5ZX3N1YnF1ZXJ5Ii5mMSwgIkFOWV9zdWJxdWVyeSIuZwotICAgICAg ICAgICAgICAgR3JvdXAgS2V5OiAiQU5ZX3N1YnF1ZXJ5Ii5mMSwgIkFOWV9z dWJxdWVyeSIuZwotICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4g b24gIkFOWV9zdWJxdWVyeSIKLSAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogIkFOWV9zdWJxdWVyeSIuZjEsICJBTllfc3VicXVlcnkiLmcKLSAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKCJBTllfc3VicXVlcnkiLmYxID0g IkFOWV9zdWJxdWVyeSIuZykKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoQWdncmVnYXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IGkuZjEsIChnZW5lcmF0ZV9zZXJpZXMoMSwgMikgLyAxMCkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogaS5mMQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5p bnQ0X3RibCBpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IGkuZjEKLSgxOCByb3dzKQorICAgICAgICAgICAgICAgRmlsdGVy OiAoIkFOWV9zdWJxdWVyeSIuZjEgPSAiQU5ZX3N1YnF1ZXJ5Ii5nKQorICAg ICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogaS5mMSwgKGdlbmVyYXRlX3NlcmllcygxLCAyKSAv IDEwKQorICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBpLmYxCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmlu dDRfdGJsIGkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog aS5mMQorKDE1IHJvd3MpCiAKIHNlbGVjdCAqIGZyb20gaW50NF90YmwgbyB3 aGVyZSAoZjEsIGYxKSBpbgogICAoc2VsZWN0IGYxLCBnZW5lcmF0ZV9zZXJp ZXMoMSwyKSAvIDEwIGcgZnJvbSBpbnQ0X3RibCBpIGdyb3VwIGJ5IGYxKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdW5pb24u b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC91bmlvbi5vdXQKaW5k ZXggMDE2NTcxYi4uZjJlMjk3ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC91bmlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC91bmlvbi5vdXQKQEAgLTI2MywxNiArMjYzLDE2IEBAIE9S REVSIEJZIDE7CiBTRUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCBJTlRFUlNFQ1Qg U0VMRUNUIHExIEZST00gaW50OF90Ymw7CiAgICAgICAgIHEyICAgICAgICAK IC0tLS0tLS0tLS0tLS0tLS0tLQotIDQ1Njc4OTAxMjM0NTY3ODkKICAgICAg ICAgICAgICAgMTIzCisgNDU2Nzg5MDEyMzQ1Njc4OQogKDIgcm93cykKIAog U0VMRUNUIHEyIEZST00gaW50OF90YmwgSU5URVJTRUNUIEFMTCBTRUxFQ1Qg cTEgRlJPTSBpbnQ4X3RibDsKICAgICAgICAgcTIgICAgICAgIAogLS0tLS0t LS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIDEyMwogIDQ1Njc4OTAxMjM0 NTY3ODkKICA0NTY3ODkwMTIzNDU2Nzg5Ci0gICAgICAgICAgICAgIDEyMwog KDMgcm93cykKIAogU0VMRUNUIHEyIEZST00gaW50OF90YmwgRVhDRVBUIFNF TEVDVCBxMSBGUk9NIGludDhfdGJsIE9SREVSIEJZIDE7CkBAIC0zMDUsMTYg KzMwNSwxNiBAQCBTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBFWENFUFQgU0VM RUNUIHEyIEZST00gaW50OF90Ymw7CiBTRUxFQ1QgcTEgRlJPTSBpbnQ4X3Ri bCBFWENFUFQgQUxMIFNFTEVDVCBxMiBGUk9NIGludDhfdGJsOwogICAgICAg ICBxMSAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0KLSA0NTY3ODkwMTIz NDU2Nzg5CiAgICAgICAgICAgICAgIDEyMworIDQ1Njc4OTAxMjM0NTY3ODkK ICgyIHJvd3MpCiAKIFNFTEVDVCBxMSBGUk9NIGludDhfdGJsIEVYQ0VQVCBB TEwgU0VMRUNUIERJU1RJTkNUIHEyIEZST00gaW50OF90Ymw7CiAgICAgICAg IHExICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg ICAxMjMKICA0NTY3ODkwMTIzNDU2Nzg5CiAgNDU2Nzg5MDEyMzQ1Njc4OQot ICAgICAgICAgICAgICAxMjMKICgzIHJvd3MpCiAKIFNFTEVDVCBxMSBGUk9N IGludDhfdGJsIEVYQ0VQVCBBTEwgU0VMRUNUIHExIEZST00gaW50OF90Ymwg Rk9SIE5PIEtFWSBVUERBVEU7CkBAIC0zNDMsOCArMzQzLDggQEAgU0VMRUNU IGYxIEZST00gZmxvYXQ4X3RibCBFWENFUFQgU0VMRUNUIGYxIEZST00gaW50 NF90YmwgT1JERVIgQlkgMTsKIFNFTEVDVCBxMSBGUk9NIGludDhfdGJsIElO VEVSU0VDVCBTRUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCBVTklPTiBBTEwgU0VM RUNUIHEyIEZST00gaW50OF90Ymw7CiAgICAgICAgIHExICAgICAgICAgCiAt LS0tLS0tLS0tLS0tLS0tLS0tCi0gIDQ1Njc4OTAxMjM0NTY3ODkKICAgICAg ICAgICAgICAgIDEyMworICA0NTY3ODkwMTIzNDU2Nzg5CiAgICAgICAgICAg ICAgICA0NTYKICAgNDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICAgICAgICAg MTIzCkBAIC0zNTUsMTUgKzM1NSwxNSBAQCBTRUxFQ1QgcTEgRlJPTSBpbnQ4 X3RibCBJTlRFUlNFQ1QgU0VMRUNUIHEyIEZST00gaW50OF90YmwgVU5JT04g QUxMIFNFTEVDVCBxMiBGUgogU0VMRUNUIHExIEZST00gaW50OF90YmwgSU5U RVJTRUNUICgoKFNFTEVDVCBxMiBGUk9NIGludDhfdGJsIFVOSU9OIEFMTCBT RUxFQ1QgcTIgRlJPTSBpbnQ4X3RibCkpKTsKICAgICAgICAgcTEgICAgICAg IAogLS0tLS0tLS0tLS0tLS0tLS0tCi0gNDU2Nzg5MDEyMzQ1Njc4OQogICAg ICAgICAgICAgICAxMjMKKyA0NTY3ODkwMTIzNDU2Nzg5CiAoMiByb3dzKQog CiAoKChTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBJTlRFUlNFQ1QgU0VMRUNU IHEyIEZST00gaW50OF90YmwpKSkgVU5JT04gQUxMIFNFTEVDVCBxMiBGUk9N IGludDhfdGJsOwogICAgICAgICBxMSAgICAgICAgIAogLS0tLS0tLS0tLS0t LS0tLS0tLQotICA0NTY3ODkwMTIzNDU2Nzg5CiAgICAgICAgICAgICAgICAx MjMKKyAgNDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICAgICAgICAgNDU2CiAg IDQ1Njc4OTAxMjM0NTY3ODkKICAgICAgICAgICAgICAgIDEyMwpAQCAtNDE5 LDggKzQxOSw4IEBAIEhJTlQ6ICBUaGVyZSBpcyBhIGNvbHVtbiBuYW1lZCAi cTIiIGluIHRhYmxlICIqU0VMRUNUKiAyIiwgYnV0IGl0IGNhbm5vdCBiZSBy ZWZlCiBTRUxFQ1QgcTEgRlJPTSBpbnQ4X3RibCBFWENFUFQgKCgoU0VMRUNU IHEyIEZST00gaW50OF90YmwgT1JERVIgQlkgcTIgTElNSVQgMSkpKTsKICAg ICAgICAgcTEgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tCi0gNDU2Nzg5 MDEyMzQ1Njc4OQogICAgICAgICAgICAgICAxMjMKKyA0NTY3ODkwMTIzNDU2 Nzg5CiAoMiByb3dzKQogCiAtLQotLSAKMi4xLjAKCg== --=-XN0O/2RNBH+/zPG4CJw8 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --=-XN0O/2RNBH+/zPG4CJw8--