Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vrpAN-0081Vo-0d for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Feb 2026 03:20:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vrpAM-003Jaj-0a for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Feb 2026 03:20:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vrpAL-003JaU-21 for pgsql-hackers@lists.postgresql.org; Mon, 16 Feb 2026 03:20:53 +0000 Received: from mail-yx1-xb12c.google.com ([2607:f8b0:4864:20::b12c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vrpAI-00000000wya-3y5y for pgsql-hackers@lists.postgresql.org; Mon, 16 Feb 2026 03:20:53 +0000 Received: by mail-yx1-xb12c.google.com with SMTP id 956f58d0204a3-649278a69c5so2329630d50.3 for ; Sun, 15 Feb 2026 19:20:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771212049; cv=none; d=google.com; s=arc-20240605; b=WkbQNfu1BFp7qGUHnKg78hLzDAgsgginys21diyfYnu/rYaxeFs6dmwizv5BdMx4uj 3094rBV660QYEuRoS8/T9Jn5BQuh2HeYbP8zuoUJFpoeQymh/fuBuoKvK2Wl1q0WL87c lbjHG1IwNEsZJHR0/hJny3AWDUxV6MkxagDjLst3yTX2agy3vw/f21e8NslUNpeVCKbO lxereKg0/QJ29vJtMXwUZNXSq+ZVsOmxZ3Kgaw0nlEI23A+S+HiH9gomLBl+9KOr2EMv XqFbGV1rnfFk7EC+fWCwc/3XUWJfamvp8NfrtfES8E2QCujP7rqnk4fr+lzMEK+oi+63 fHdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=/XTKIN6hc+H2KD06s9eJl0EayfbtczgRGRZAciJLMT0=; fh=TnRDFNsTr9PAJ9hTSXRKlfT8DJIH3aYGfOIPfYJr81Y=; b=hKOxMWDd3vofikuzqovhyyw8siZTOqWabSM8NDDYDeN3nkJ5NzwoGYgmEPJJGwxoO7 PlUGQD4WjHl5+Ty8fpHxyGEDMBsWr5em8kWMqeVbcST3QD11dP6Lj1XSTWVktLvlrhNE jsn4Osw49qWnfaxSRW4XW/wl1FNOHtowgc++CCsfL8ZfTwt992m7lv110idwCiFBb98f aydB0ZXv+WUk3xhEhcXoINTIs7uOwuvAritRl3TiV9xDl+jjJmqKH8jSHBv1ZtaW+HjA fN8+VYKzLLFAGZCbClAtnSAZQv8chdHz24XxERl/eSV8u8psizXs4zk00KsCwqrPye9r kE9Q==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771212049; x=1771816849; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=/XTKIN6hc+H2KD06s9eJl0EayfbtczgRGRZAciJLMT0=; b=cu9RFCn6+HrdM4LA6rovoRYp/f0E2BDIKmgnLIpnrlU8lanqIvV81SjpMsPDM/+PLX 5IB7vO7uSmtj6LXvseMIdiHZpMpqx/Au8m0dorTGrXjApbAIGx1Go9lUKsB3eNUAnPfg gGp0HDZFhiI2d85hHRQXhBt2pgrW733Uz1lDu2v7BBHR6kqgXJ6zkVsA7THlGdPdhvCd eK+TKT+b11/Rl6GHzlU9H08uksm4DEE6hWjKRKL90UHEs9b6uh1WU9jVU5EeHqW6g75D OVLrg355+eQxU99E5QD65Kgd5LO9221VrSu2gYbtMyYLmrcKo0Rxng7AfXVpb7HwvcJw axNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771212049; x=1771816849; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/XTKIN6hc+H2KD06s9eJl0EayfbtczgRGRZAciJLMT0=; b=e2ZTvYb9QOAaylPJIKKUEN91CEt3GUJt4CHO4223xuTbVcLSR6r0wE8Nkd6k1SVbTG 3/3duxlZuyCKcw380Ra1Qzewe/vNpk7zzl7wADntyLjTVwM4pWGcErHd1mnURVCZbUhS ntkrmkNfJezfIu0K7jB+YJOJRUupLUFqZC9ZzJnWOod17aOeBArPBk6/nx3jzXSUXK+c LmoTTXZykcpTWyIIw5I8LXYCk8L5gCiPER5cyCsrdzHbJn33SIqpc8dZV1kxBKDEaRSz oDbH+k8FG7tFGxxOQWEKZ3nrlCo5K4FPbHectMe5H6WtbIXUNAhfpdwlRUzwFIO3BvWh vEfA== X-Forwarded-Encrypted: i=1; AJvYcCW04ECUFpLAbL1Avion/lCwNFDXqzrGYIC2ZPKvTPV+ZHhJh9e9cwevMNTJJ8WJNHYAn7MiqtiuF+LjOWos@lists.postgresql.org X-Gm-Message-State: AOJu0YzlLL6SlzE0RapDGQ1ytUZyt8Mh1LAFqxg8U500KhFPBj78A8HY 3+Wtp8eBLUoej8j0Nk7YA4zobjO6RG9pX2AjAxpwCt/mxsBSSSh1wqLtQ6QLcXKfEB98ue0f6ey 76ebqxTHkQwfmJIVK8hRyUAOgYH2mXEk= X-Gm-Gg: AZuq6aLCeaxTrMfm3i0SyM4JJcya9Xnp1084PmLO9KbUBRyY7Xmx57279U1g/jpsSbo zCJ7cOIkMZTE7wQ4vv35qMcET1QPIVKbq9kxfTCxsnjrLItPihagQr66ms5X9sr5vjV0s93zGvs UgOsPHSX8FVPnG+j8/6gx5UK3frhhwknsP16DNpQDbU9Gvm5C2aud8NNUlzCkLYVgMcwbeidrHR Os0X0wfoQmhIMmzElS2crqRDfzqiFmzBdwhUPxzDQLgI4o9fW56k6JvKCn9EiyPnysb/ckhSndc 9exIZ9CLUw== X-Received: by 2002:a53:d059:0:20b0:649:c6d4:898a with SMTP id 956f58d0204a3-64c14b6d9b0mr6596896d50.28.1771212048691; Sun, 15 Feb 2026 19:20:48 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: vignesh C Date: Mon, 16 Feb 2026 08:50:36 +0530 X-Gm-Features: AZwV_Qh_pCgBVs8Bn_tGtjpyVIEmNGr1mk5F6rcXp3VWmhvOcWrCShOAs4k2Lbw Message-ID: Subject: Re: Skipping schema changes in publication To: "David G. Johnston" Cc: Shlok Kyal , shveta malik , Amit Kapila , Peter Smith , Dilip Kumar , "Zhijie Hou (Fujitsu)" , YeXiu <1518981153@qq.com>, Ian Lawrence Barwick , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000fc2fb5064ae87070" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fc2fb5064ae87070 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 12 Feb 2026 at 13:58, David G. Johnston wrote: > > On Wed, Feb 11, 2026 at 11:58=E2=80=AFPM Shlok Kyal wrote: >> >> >> We have addressed the comments in the latest v43 patch. > > > Non-comprehensive review. > > Shouldn't the early exits look like: > > > if (list_length(publications) < 2) > return; > > perform query here, capture except_publications > > if (list_length(except_publications) < 2) > return; > > construct error message and ereport > Modified > > + if (publication_has_any_exception(puboid)) > + { > + except_pub_names =3D lappend(except_pub_names, > + makeString(pubform->pubname.data)); > + has_any_exclusion =3D true; > + except_pub_id =3D pubform->oid; > + } > > Either rename has_any_exclusion to has_any_exception or, given how ambigu= ous that reads in code, maybe standardize on calling these exclusions throu= ghout the code and either just accept we've chosen EXCEPT for the syntax fo= r good reasons or consider whether to EXCLUDING (table1, table2) would be a= better choice. Changed it to has_any_exception > + errmsg("could not get non excluded table list for table \"%s.%s\" from = publisher: %s", -- triple negative; try to avoid "non excluded" as a term -= those are "included". > > pg_get_publication_effective_tables - the second input argument is an arr= ay of publication names so the singular form here is a bit misleading. Sho= uld this be subscription-oriented? Otherwise, pg_get_tables_from_publicati= ons seems like a more accurate name. "effective" or "only the included one= s" seems reasonable to imply. We have used similarly in the existing pg_get_publication_tables, I felt the existing might be ok to keep it consistent unless there is a better consistent name. > Related, the check in there for "does at least one publication have an ex= clusion list" makes sense but feels awfully similar to the check for "at mo= st one publication has an exclusion list"...too late for me to figure out w= hat if anything to do make/do about it though. Ideally this is not expected to happen. But under rare cases it can happen if the publication is dropped/recreated with except after creating a subscription. It is better to throw an error in these cases as we do not allow multiple publications except tables. Thanks for the comments, the attached v44 version patch has the changes for the same. Regards, Vignesh --000000000000fc2fb5064ae87070 Content-Type: application/octet-stream; name="v44-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Disposition: attachment; filename="v44-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlolwuxu0 RnJvbSA2YzY5ZDVlYzBjZDczN2UxM2JhNzRiOThkNDg4ZTY0NDNhMzllZTc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjggSmFuIDIwMjYgMTA6NDc6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIHY0NCAxLzJd IFNraXAgcHVibGlzaGluZyB0aGUgdGFibGVzIHNwZWNpZmllZCBpbiBFWENFUFQgVEFCTEUuCgpB IG5ldyAiRVhDRVBUIFRBQkxFIiBjbGF1c2UgZm9yIENSRUFURSBQVUJMSUNBVElPTiBhbGxvd3Mg b25lIG9yIG1vcmUKdGFibGVzIHRvIGJlIGV4Y2x1ZGVkLiBUaGUgcHVibGlzaGVyIHdpbGwgbm90 IHNlbmQgdGhlIGRhdGEgb2YgZXhjbHVkZWQKdGFibGVzIHRvIHRoZSBzdWJzY3JpYmVyLgoKVGhl IG5ldyBzeW50YXggYWxsb3dzIHNwZWNpZnlpbmcgZXhjbHVkZWQgcmVsYXRpb25zIHdoZW4gY3Jl YXRpbmcgYQpwdWJsaWNhdGlvbi4gRm9yIGV4YW1wbGU6CkNSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodDEsdDIpOwoKQSBuZXcgY29sdW1uICJwcmV4 Y2VwdCIgaXMgYWRkZWQgdG8gdGFibGUgInBnX3B1YmxpY2F0aW9uX3JlbCIsIHRvIGZsYWcKdGhl IHJlbGF0aW9ucyB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcHVibGlj YXRpb25zLgoKRm9yIEVYQ0VQVCBUQUJMRSBvbiBwYXJ0aXRpb24gdGFibGVzLCBleHRlbmRlZCBm ZXRjaF9yZW1vdGVfdGFibGVfaW5mbygpIHRvCmNvbXB1dGUgdGhlIGVmZmVjdGl2ZSBzZXQgb2Yg cmVsYXRpb25zIHVzZWQgZm9yIHRoZSBpbml0aWFsIENPUFkuIFdoZW4KZXhjbHVzaW9ucyBhcmUg cHJlc2VudCwgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgY2FuIG5vIGxvbmdlciBiZSB1c2Vk CmRpcmVjdGx5OyBpbnN0ZWFkLCBkZXJpdmUgdGhlIGxpc3Qgb2Ygbm9uLWV4Y2x1ZGVkIGxlYWYg cGFydGl0aW9ucyBhbmQKY29tYmluZSB0aGVtIHdpdGggVU5JT04gQUxMLiBXaGVuIG5vIGV4Y2x1 c2lvbnMgZXhpc3QsIHJldGFpbiB0aGUgZXhpc3RpbmcKYmVoYXZpb3IgYW5kIGNvcHkgZnJvbSB0 aGUgcm9vdCByZWxhdGlvbiBhcyBiZWZvcmUuCkFsc28gdXBkYXRlZCB0aGUgYmVoYXZpb3VyIG9m IGluY3JlbWVudGFsIHN5bmMgZm9yIHBhcnRpdGlvbiB0YWJsZXMgYXMKcGVyIGFwcHJvYWNoIDEu CkFwcHJvYWNoIDEgaXMgZGlzY3Vzc2VkIGF0OgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkL0NBSnB5MHVEODFIUnJNWXI3Uy02QVY0VzJQdGJHS00tbmYyRDg5enNvTUhKOWpa c3NVZ0BtYWlsLmdtYWlsLmNvbQoKcGdfZHVtcCBpcyB1cGRhdGVkIGZvciB0aGUgbmV3IEVYQ0VQ VCBUQUJMRSBzeW50YXguCgpUaGUgcHNxbCBcZCBmYW1pbHkgb2YgY29tbWFuZHMgY2FuIG5vdyBk aXNwbGF5IGV4Y2x1ZGVkIHRhYmxlcy4KCkJ1bXAgY2F0YWxvZyB2ZXJzaW9uLgotLS0KIGRvYy9z cmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAxMCArCiBkb2Mvc3Jj L3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAgfCAgIDYgKy0KIGRvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgICAgICB8ICA3NiArKy0KIGRvYy9zcmMv c2dtbC9yZWYvcHNxbC1yZWYuc2dtbCAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICAgIHwgNTgzICsrKysrKysrKysrKysr KysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgIHwgMTA5 ICsrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAgICAgICB8ICA3 NyArKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAg NCArLQogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAgICAgICAgICAgIHwgIDQy ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jICAgfCAxNTAg KysrKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDIw MyArKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICB8 ICAyMSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwg IDY4ICsrCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAgICAgICAgICAgIHwgIDMw ICsKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICA4NyAr Ky0KIHNyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyAgICAgICAgICAgICAgICB8ICAxMiAr LQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwgICA3ICsK IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICB8ICAxNSArLQog c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgICAgICB8ICAgNSArLQogc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICAgIHwgICA2ICsKIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICB8ICA5MyArKy0KIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgICAgICB8ICAzNyArLQogc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICAxICsKIC4uLi90LzAz N19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwgICAgICAgICB8IDM1OSArKysrKysrKysrKwog c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAxICsKIDI3 IGZpbGVzIGNoYW5nZWQsIDE4NjIgaW5zZXJ0aW9ucygrKSwgMTQ3IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19yZXBfY2hhbmdlc19l eGNlcHRfdGFibGUucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBi L2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IDMzMjE5MzU2NWUyLi5kNDBlNWNjMTA5 MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL2NhdGFsb2dzLnNnbWwKQEAgLTY1ODEsNiArNjU4MSwxNiBAQCBTQ1JBTS1TSEEtMjU2JDxy ZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNl YWJsZT4mbAogICAgICAgaWYgdGhlcmUgaXMgbm8gcHVibGljYXRpb24gcXVhbGlmeWluZyBjb25k aXRpb24uPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgogCisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmlu aXRpb24iPgorICAgICAgPHN0cnVjdGZpZWxkPnByZXhjZXB0PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+ Ym9vbDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRydWUgaWYg dGhlIHJlbGF0aW9uIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIHB1YmxpY2F0aW9uLiBTZWUKKyAgICAg ICA8bGluayBsaW5rZW5kPSJzcWwtY3JlYXRlcHVibGljYXRpb24tcGFyYW1zLWZvci1leGNlcHQt dGFibGUiPjxsaXRlcmFsPkVYQ0VQVCBUQUJMRTwvbGl0ZXJhbD48L2xpbms+LgorICAgICAgPC9w YXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCiAgICAgIDxyb3c+CiAgICAgICA8ZW50cnkgcm9s ZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgog ICAgICAgIDxzdHJ1Y3RmaWVsZD5wcmF0dHJzPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50MnZlY3Rv cjwvdHlwZT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNn bWwgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IDUwMjhmZTlh ZjA5Li5mMDEyODFmZDRmOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGlj YXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCkBA IC0xMTYsNyArMTE2LDExIEBACiAgICA8bGl0ZXJhbD5GT1IgVEFCTEVTIElOIFNDSEVNQTwvbGl0 ZXJhbD4sIDxsaXRlcmFsPkZPUiBBTEwgVEFCTEVTPC9saXRlcmFsPiwKICAgIG9yIDxsaXRlcmFs PkZPUiBBTEwgU0VRVUVOQ0VTPC9saXRlcmFsPi4gVW5saWtlIHRhYmxlcywgc2VxdWVuY2VzIGNh biBiZQogICAgc3luY2hyb25pemVkIGF0IGFueSB0aW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwg c2VlCi0gICA8eHJlZiBsaW5rZW5kPSJsb2dpY2FsLXJlcGxpY2F0aW9uLXNlcXVlbmNlcyIvPi4K KyAgIDx4cmVmIGxpbmtlbmQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tc2VxdWVuY2VzIi8+LiBXaGVu IGEgcHVibGljYXRpb24gaXMKKyAgIGNyZWF0ZWQgd2l0aCA8bGl0ZXJhbD5GT1IgQUxMIFRBQkxF UzwvbGl0ZXJhbD4sIHRhYmxlcyBjYW4gYmUgZXhwbGljaXRseQorICAgZXhjbHVkZWQgZnJvbSBw dWJsaWNhdGlvbiB1c2luZyB0aGUKKyAgIDxsaW5rIGxpbmtlbmQ9InNxbC1jcmVhdGVwdWJsaWNh dGlvbi1wYXJhbXMtZm9yLWV4Y2VwdC10YWJsZSI+PGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRl cmFsPjwvbGluaz4KKyAgIGNsYXVzZS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKaW5kZXggNmVmYmI5MTVjZWMuLmUwZmFiY2U0 Nzc5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKQEAgLTMyLDEy ICszMiwxNiBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogCiA8cGhyYXNlPmFuZCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+cHVibGljYXRpb25fYWxsX29iamVjdDwvcmVwbGFjZWFibGU+IGlzIG9uZSBv Zjo8L3BocmFzZT4KIAotICAgIEFMTCBUQUJMRVMKKyAgICBBTEwgVEFCTEVTIFsgRVhDRVBUIFsg VEFCTEUgXSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leGNlcHRfdGFibGVfb2Jq ZWN0PC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBdCiAgICAgQUxMIFNFUVVFTkNFUwogCiA8cGhy YXNlPmFuZCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfYW5kX2NvbHVtbnM8 L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KIAogICAgIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAqIF0gWyAoIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4u LiBdICkgXSBbIFdIRVJFICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Np b248L3JlcGxhY2VhYmxlPiApIF0KKworPHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmV4Y2VwdF90YWJsZV9vYmplY3Q8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4K KworICAgIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1l PC9yZXBsYWNlYWJsZT4gWyAqIF0KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KIApA QCAtMTY0LDcgKzE2OCw4IEBAIENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+CiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFy YT4KICAgICAgIE1hcmtzIHRoZSBwdWJsaWNhdGlvbiBhcyBvbmUgdGhhdCByZXBsaWNhdGVzIGNo YW5nZXMgZm9yIGFsbCB0YWJsZXMgaW4KLSAgICAgIHRoZSBkYXRhYmFzZSwgaW5jbHVkaW5nIHRh YmxlcyBjcmVhdGVkIGluIHRoZSBmdXR1cmUuCisgICAgICB0aGUgZGF0YWJhc2UsIGluY2x1ZGlu ZyB0YWJsZXMgY3JlYXRlZCBpbiB0aGUgZnV0dXJlLiBUYWJsZXMgbGlzdGVkIGluCisgICAgICBF WENFUFQgVEFCTEUgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIHB1YmxpY2F0aW9uLgogICAgICA8L3Bh cmE+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgpAQCAtMTg0LDYgKzE4OSw1 NiBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5h bWU8L3JlcGxhY2VhYmxlPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgPHZhcmxpc3RlbnRyeSBpZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9uLXBhcmFtcy1mb3ItZXhj ZXB0LXRhYmxlIj4KKyAgICA8dGVybT48bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVyYWw+PC90 ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBUaGlzIGNsYXVzZSBzcGVj aWZpZXMgYSBsaXN0IG9mIHRhYmxlcyB0byBiZSBleGNsdWRlZCBmcm9tIHRoZQorICAgICAgcHVi bGljYXRpb24uCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBGb3IgaW5oZXJpdGVk IHRhYmxlcywgaWYgPGxpdGVyYWw+T05MWTwvbGl0ZXJhbD4gaXMgc3BlY2lmaWVkIGJlZm9yZSB0 aGUKKyAgICAgIHRhYmxlIG5hbWUsIG9ubHkgdGhhdCB0YWJsZSBpcyBleGNsdWRlZCBmcm9tIHRo ZSBwdWJsaWNhdGlvbi4gSWYKKyAgICAgIDxsaXRlcmFsPk9OTFk8L2xpdGVyYWw+IGlzIG5vdCBz cGVjaWZpZWQsIHRoZSB0YWJsZSBhbmQgYWxsIGl0cyBkZXNjZW5kYW50CisgICAgICB0YWJsZXMg KGlmIGFueSkgYXJlIGV4Y2x1ZGVkLiBPcHRpb25hbGx5LCA8bGl0ZXJhbD4qPC9saXRlcmFsPiBj YW4gYmUKKyAgICAgIHNwZWNpZmllZCBhZnRlciB0aGUgdGFibGUgbmFtZSB0byBleHBsaWNpdGx5 IGluZGljYXRlIHRoYXQgZGVzY2VuZGFudAorICAgICAgdGFibGVzIGFyZSBleGNsdWRlZC4KKyAg ICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIHdo ZW4gYSB0YWJsZSBpcyBzcGVjaWZpZWQgaW4gRVhDRVBUIFRBQkxFLCB0aGVuCisgICAgICBjaGFu Z2VzIHRvIHRoYXQgdGFibGUgYW5kIGFsbCBvZiBpdHMgcGFydGl0aW9ucyAodGhhdCBpcywgdGhl IGVudGlyZQorICAgICAgcGFydGl0aW9uIHN1YnRyZWUgcm9vdGVkIGF0IHRoYXQgdGFibGUpIGFy ZSBub3QgcmVwbGljYXRlZC4gVGhpcyBiZWhhdmlvcgorICAgICAgaXMgdGhlIHNhbWUgcmVnYXJk bGVzcyBvZiB3aGV0aGVyCisgICAgICA8bGl0ZXJhbD5wdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dDwvbGl0ZXJhbD4gaXMgc2V0IHRvCisgICAgICA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiBvciA8 bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uIFRoZQorICAgICAgPGxpdGVyYWw+cHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3Q8L2xpdGVyYWw+IHNldHRpbmcgb25seSBkZXRlcm1pbmVzCisgICAgICB3 aGljaCByZWxhdGlvbiBpcyB1c2VkIGFzIHRoZSBwdWJsaXNoaW5nIHJlbGF0aW9uIGZvciByZXBs aWNhdGVkIGNoYW5nZXMsCisgICAgICBhbmQgZG9lcyBub3QgYWZmZWN0IGV4Y2x1c2lvbiBzZW1h bnRpY3MuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIGEgcGFydGl0aW9u IGlzIGxpc3RlZCBpbiB0aGUgPGxpdGVyYWw+RVhDRVBUPC9saXRlcmFsPiBjbGF1c2Ugb2YgYQor ICAgICAgPGxpdGVyYWw+Rk9SIEFMTCBUQUJMRVM8L2xpdGVyYWw+IHB1YmxpY2F0aW9uIHdpdGgK KyAgICAgIDxsaXRlcmFsPnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PC9saXRlcmFsPiBzZXQg dG8KKyAgICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LCB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0 YWJsZSByZW1haW5zIGluY2x1ZGVkIGluCisgICAgICB0aGUgcHVibGljYXRpb24uIElmIHRoYXQg cGFydGl0aW9uIGlzIGV4cGxpY2l0bHkgaW5jbHVkZWQgYnkgYW5vdGhlcgorICAgICAgcHVibGlj YXRpb24gd2l0aCA8bGl0ZXJhbD5wdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDwvbGl0ZXJhbD4g c2V0IHRvCisgICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4sIGl0cyBjaGFuZ2VzIGFyZSBz dGlsbCByZXBsaWNhdGVkLiBJbiB0aGlzCisgICAgICBjYXNlLCB0aGUgY2hhbmdlcyBhcmUgcHVi bGlzaGVkIHVzaW5nIHRoZSBpZGVudGl0eSBvZiB0aGUgcm9vdAorICAgICAgcGFydGl0aW9uZWQg dGFibGUsIHNpbmNlIGl0IGlzIHRoZSB0b3AtbW9zdCBhbmNlc3RvciBpbmNsdWRlZCBpbiB0aGUK KyAgICAgIDxsaXRlcmFsPkZPUiBBTEwgVEFCTEVTPC9saXRlcmFsPiBwdWJsaWNhdGlvbiwgdGhl cmVieSBlbnN1cmluZworICAgICAgY29uc2lzdGVudCByb3V0aW5nIG9mIGNoYW5nZXMgd2l0aGlu IHRoZSBwYXJ0aXRpb24gaGllcmFyY2h5LgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAg ICAgU2ltaWxhcmx5LCBpZiBhbm90aGVyIHB1YmxpY2F0aW9uIGluY2x1ZGVzIHRoZSBzYW1lIHRh YmxlIHdpdGggYSByb3cKKyAgICAgIGZpbHRlciwgYnV0IGl0IGlzIGFsc28gY292ZXJlZCBieSBh CisgICAgICA8bGl0ZXJhbD5GT1IgQUxMIFRBQkxFUyAuLi4gRVhDRVBUPC9saXRlcmFsPiBwdWJs aWNhdGlvbiwgdGhlIHRhYmxlIGlzCisgICAgICBwdWJsaXNoZWQgd2l0aG91dCBhcHBseWluZyB0 aGUgcm93IGZpbHRlciwgc2luY2Ugcm93IGZpbHRlcnMgY2Fubm90IGJlCisgICAgICBzcGVjaWZp ZWQgZm9yIDxsaXRlcmFsPkZPUiBBTEwgVEFCTEVTIC4uLiBFWENFUFQ8L2xpdGVyYWw+IHB1Ymxp Y2F0aW9ucworICAgICAgYW5kIHN1Y2ggcHVibGljYXRpb25zIGFyZSB0aGVyZWZvcmUgdHJlYXRl ZCBhcyBoYXZpbmcgbm8gcm93IGZpbHRlci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgPHZhcmxpc3RlbnRyeSBpZD0ic3FsLWNyZWF0ZXB1 YmxpY2F0aW9uLXBhcmFtcy13aXRoIj4KICAgICA8dGVybT48bGl0ZXJhbD5XSVRIICggPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX3BhcmFtZXRlcjwvcmVwbGFjZWFi bGU+IFs9IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj52YWx1ZTwvcmVwbGFjZWFibGU+ XSBbLCAuLi4gXSApPC9saXRlcmFsPjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CkBAIC00ODksNiAr NTQ0LDIzIEBAIENSRUFURSBQVUJMSUNBVElPTiBhbGxfc2VxdWVuY2VzIEZPUiBBTEwgU0VRVUVO Q0VTOwogICAgYWxsIHNlcXVlbmNlcyBmb3Igc3luY2hyb25pemF0aW9uOgogPHByb2dyYW1saXN0 aW5nPgogQ1JFQVRFIFBVQkxJQ0FUSU9OIGFsbF90YWJsZXNfc2VxdWVuY2VzIEZPUiBBTEwgVEFC TEVTLCBBTEwgU0VRVUVOQ0VTOworPC9wcm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgQ3JlYXRlIGEgcHVibGljYXRpb24gdGhhdCBwdWJsaXNoZXMgYWxsIGNoYW5nZXMg aW4gYWxsIHRhYmxlcyBleGNlcHQKKyAgIDxzdHJ1Y3RuYW1lPnVzZXJzPC9zdHJ1Y3RuYW1lPiBh bmQgPHN0cnVjdG5hbWU+ZGVwYXJ0bWVudHM8L3N0cnVjdG5hbWU+OgorPHByb2dyYW1saXN0aW5n PgorQ1JFQVRFIFBVQkxJQ0FUSU9OIGFsbF90YWJsZXNfZXhjZXB0IEZPUiBBTEwgVEFCTEVTIEVY Q0VQVCAodXNlcnMsIGRlcGFydG1lbnRzKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRoYXQgcHVibGlzaGVzIGFsbCBz ZXF1ZW5jZXMgZm9yIHN5bmNocm9uaXphdGlvbiwgYW5kCisgICBhbGwgY2hhbmdlcyBpbiBhbGwg dGFibGVzIGV4Y2VwdCA8c3RydWN0bmFtZT51c2Vyczwvc3RydWN0bmFtZT4gYW5kCisgICA8c3Ry dWN0bmFtZT5kZXBhcnRtZW50czwvc3RydWN0bmFtZT46Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVB VEUgUFVCTElDQVRJT04gYWxsX3NlcXVlbmNlc190YWJsZXNfZXhjZXB0IEZPUiBBTEwgU0VRVUVO Q0VTLCBBTEwgVEFCTEVTIEVYQ0VQVCAodXNlcnMsIGRlcGFydG1lbnRzKTsKIDwvcHJvZ3JhbWxp c3Rpbmc+CiAgIDwvcGFyYT4KICA8L3JlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wc3FsLXJlZi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCmluZGV4 IDhiMWQ5NDhiYTA1Li4xMDQ1YmM2YTAyYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9w c3FsLXJlZi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbApAQCAtMjEw Myw4ICsyMTAzLDkgQEAgU0VMRUNUICQxIFxwYXJzZSBzdG10MQogICAgICAgICBsaXN0ZWQuCiAg ICAgICAgIElmIDxsaXRlcmFsPng8L2xpdGVyYWw+IGlzIGFwcGVuZGVkIHRvIHRoZSBjb21tYW5k IG5hbWUsIHRoZSByZXN1bHRzCiAgICAgICAgIGFyZSBkaXNwbGF5ZWQgaW4gZXhwYW5kZWQgbW9k ZS4KLSAgICAgICAgSWYgPGxpdGVyYWw+KzwvbGl0ZXJhbD4gaXMgYXBwZW5kZWQgdG8gdGhlIGNv bW1hbmQgbmFtZSwgdGhlIHRhYmxlcyBhbmQKLSAgICAgICAgc2NoZW1hcyBhc3NvY2lhdGVkIHdp dGggZWFjaCBwdWJsaWNhdGlvbiBhcmUgc2hvd24gYXMgd2VsbC4KKyAgICAgICAgSWYgPGxpdGVy YWw+KzwvbGl0ZXJhbD4gaXMgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFtZSwgdGhlIHRhYmxl cywKKyAgICAgICAgZXhjbHVkZWQgdGFibGVzLCBhbmQgc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGgg ZWFjaCBwdWJsaWNhdGlvbiBhcmUgc2hvd24KKyAgICAgICAgYXMgd2VsbC4KICAgICAgICAgPC9w YXJhPgogICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggOWE0NzkxYzU3M2UuLjE3YjgyMWZiZDcxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHVi bGljYXRpb25fbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9y ZWwuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgog I2luY2x1ZGUgImZ1bmNhcGkuaCIKQEAgLTM2Niw5ICszNjcsMTEgQEAgR2V0VG9wTW9zdEFuY2Vz dG9ySW5QdWJsaWNhdGlvbihPaWQgcHVib2lkLCBMaXN0ICphbmNlc3RvcnMsIGludCAqYW5jZXN0 b3JfbGV2ZWwKIAlmb3JlYWNoKGxjLCBhbmNlc3RvcnMpCiAJewogCQlPaWQJCQlhbmNlc3RvciA9 IGxmaXJzdF9vaWQobGMpOwotCQlMaXN0CSAgICphcHViaWRzID0gR2V0UmVsYXRpb25QdWJsaWNh dGlvbnMoYW5jZXN0b3IpOworCQlMaXN0CSAgICphcHViaWRzID0gTklMOwogCQlMaXN0CSAgICph c2NoZW1hUHViaWRzID0gTklMOwogCisJCUdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9y LCAmYXB1YmlkcywgTlVMTCk7CisKIAkJbGV2ZWwrKzsKIAogCQlpZiAobGlzdF9tZW1iZXJfb2lk KGFwdWJpZHMsIHB1Ym9pZCkpCkBAIC00ODIsNiArNDg1LDggQEAgcHVibGljYXRpb25fYWRkX3Jl bGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCiAJCU9iamVjdElkR2V0 RGF0dW0ocHViaWQpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnJlbGlkIC0g MV0gPQogCQlPYmplY3RJZEdldERhdHVtKHJlbGlkKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJsaWNh dGlvbl9yZWxfcHJleGNlcHQgLSAxXSA9CisJCUJvb2xHZXREYXR1bShwcmktPmV4Y2VwdCk7CiAK IAkvKiBBZGQgcXVhbGlmaWNhdGlvbnMsIGlmIGF2YWlsYWJsZSAqLwogCWlmIChwcmktPndoZXJl Q2xhdXNlICE9IE5VTEwpCkBAIC03NDksMzggKzc1NCw1OCBAQCBwdWJsaWNhdGlvbl9hZGRfc2No ZW1hKE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlkLCBib29sIGlmX25vdF9leGlzdHMpCiAJcmV0dXJu IG15c2VsZjsKIH0KIAotLyogR2V0cyBsaXN0IG9mIHB1YmxpY2F0aW9uIG9pZHMgZm9yIGEgcmVs YXRpb24gKi8KLUxpc3QgKgotR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lkIHJlbGlkKQorLyoK KyAqIEdldCB0aGUgbGlzdCBvZiBwdWJsaWNhdGlvbiBvaWRzIGFzc29jaWF0ZWQgd2l0aCBhIHNw ZWNpZmllZCByZWxhdGlvbi4KKyAqCisgKiBQYXJhbWV0ZXIgJ3B1YmlkcycgcmV0dXJucyB0aGUg T2lkcyBvZiB0aGUgcHVibGljYXRpb25zIHRoZSByZWxhdGlvbiBpcyBwYXJ0CisgKiBvZi4gUGFy YW1ldGVyICdleGNlcHRfcHViaWRzJyByZXR1cm5zIHRoZSBPaWRzIG9mIHB1YmxpY2F0aW9ucyB0 aGUgcmVsYXRpb24KKyAqIGlzIGV4Y2x1ZGVkIGZyb20uCisgKgorICogVGhpcyBmdW5jdGlvbiBy ZXR1cm5zIHRydWUgaWYgdGhlIHJlbGF0aW9uIGlzIHBhcnQgb2YgYW55IHB1YmxpY2F0aW9uLgor ICovCitib29sCitHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVsaWQsIExpc3QgKipwdWJp ZHMsIExpc3QgKipleGNlcHRfcHViaWRzKQogewotCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKIAlD YXRDTGlzdCAgICpwdWJyZWxsaXN0OwotCWludAkJCWk7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsK IAogCS8qIEZpbmQgYWxsIHB1YmxpY2F0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbGF0aW9u LiAqLwogCXB1YnJlbGxpc3QgPSBTZWFyY2hTeXNDYWNoZUxpc3QxKFBVQkxJQ0FUSU9OUkVMTUFQ LAogCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKLQlmb3IgKGkgPSAwOyBpIDwg cHVicmVsbGlzdC0+bl9tZW1iZXJzOyBpKyspCisJZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJyZWxs aXN0LT5uX21lbWJlcnM7IGkrKykKIAl7CiAJCUhlYXBUdXBsZQl0dXAgPSAmcHVicmVsbGlzdC0+ bWVtYmVyc1tpXS0+dHVwbGU7Ci0JCU9pZAkJCXB1YmlkID0gKChGb3JtX3BnX3B1YmxpY2F0aW9u X3JlbCkgR0VUU1RSVUNUKHR1cCkpLT5wcnB1YmlkOworCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3Jl bCBwdWJyZWwgPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApOworCQlP aWQJCQlwdWJpZCA9IHB1YnJlbC0+cHJwdWJpZDsKIAotCQlyZXN1bHQgPSBsYXBwZW5kX29pZChy ZXN1bHQsIHB1YmlkKTsKKwkJaWYgKHB1YnJlbC0+cHJleGNlcHQpCisJCXsKKwkJCWlmIChleGNl cHRfcHViaWRzKQorCQkJCSpleGNlcHRfcHViaWRzID0gbGFwcGVuZF9vaWQoKmV4Y2VwdF9wdWJp ZHMsIHB1YmlkKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChwdWJpZHMpCisJCQkJKnB1Ymlk cyA9IGxhcHBlbmRfb2lkKCpwdWJpZHMsIHB1YmlkKTsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJfQog CX0KIAogCVJlbGVhc2VTeXNDYWNoZUxpc3QocHVicmVsbGlzdCk7CiAKLQlyZXR1cm4gcmVzdWx0 OworCXJldHVybiBmb3VuZDsKIH0KIAogLyoKLSAqIEdldHMgbGlzdCBvZiByZWxhdGlvbiBvaWRz IGZvciBhIHB1YmxpY2F0aW9uLgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2V0IHRoZSBsaXN0 IG9mIHJlbGF0aW9uIE9pZHMgZm9yIGEgcHVibGljYXRpb24uCiAgKgotICogVGhpcyBzaG91bGQg b25seSBiZSB1c2VkIEZPUiBUQUJMRSBwdWJsaWNhdGlvbnMsIHRoZSBGT1IgQUxMIFRBQkxFUy9T RVFVRU5DRVMKLSAqIHNob3VsZCB1c2UgR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoKS4KKyAq IElmIGV4Y2VwdF9mbGFnIGlzIHRydWUsIHJldHVybnMgdGhlIGxpc3Qgb2YgcmVsYXRpb25zIHNw ZWNpZmllZCBpbiB0aGUKKyAqIEVYQ0VQVCBjbGF1c2Ugb2YgdGhlIHB1YmxpY2F0aW9uOyBvdGhl cndpc2UsIHJldHVybnMgdGhlIGxpc3Qgb2YgcmVsYXRpb25zCisgKiBpbmNsdWRlZCBpbiB0aGUg cHVibGljYXRpb24uCiAgKi8KLUxpc3QgKgotR2V0UHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHB1 YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpCitzdGF0aWMgTGlzdCAqCitnZXRf cHVibGljYXRpb25fcmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9w YXJ0b3B0LAorCQkJCQkJICBib29sIGV4Y2VwdF9mbGFnKQogewogCUxpc3QJICAgKnJlc3VsdDsK IAlSZWxhdGlvbglwdWJyZWxzcmVsOwpAQCAtODA1LDggKzgzMCwxMCBAQCBHZXRQdWJsaWNhdGlv blJlbGF0aW9ucyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCkKIAkJ Rm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgcHVicmVsOwogCiAJCXB1YnJlbCA9IChGb3JtX3BnX3B1 YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1cCk7Ci0JCXJlc3VsdCA9IEdldFB1YlBhcnRpdGlv bk9wdGlvblJlbGF0aW9ucyhyZXN1bHQsIHB1Yl9wYXJ0b3B0LAotCQkJCQkJCQkJCQkJcHVicmVs LT5wcnJlbGlkKTsKKworCQlpZiAoZXhjZXB0X2ZsYWcgPT0gcHVicmVsLT5wcmV4Y2VwdCkKKwkJ CXJlc3VsdCA9IEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhyZXN1bHQsIHB1Yl9wYXJ0 b3B0LAorCQkJCQkJCQkJCQkJCXB1YnJlbC0+cHJyZWxpZCk7CiAJfQogCiAJc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKQEAgLTgxOSw2ICs4NDYsODUgQEAgR2V0UHVibGljYXRpb25SZWxhdGlvbnMo T2lkIHB1YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpCiAJcmV0dXJuIHJlc3Vs dDsKIH0KIAorLyoKKyAqIFJldHVybiB0aGUgbGlzdCBvZiByZWxhdGlvbiBPaWRzIGZvciBhIHB1 YmxpY2F0aW9uLgorICoKKyAqIEZvciBhIEZPUiBUQUJMRSBwdWJsaWNhdGlvbiwgdGhpcyByZXR1 cm5zIHRoZSBsaXN0IG9mIHJlbGF0aW9ucyBleHBsaWNpdGx5CisgKiBpbmNsdWRlZCBpbiB0aGUg cHVibGljYXRpb24uCisgKgorICogUHVibGljYXRpb25zIGRlY2xhcmVkIHdpdGggRk9SIEFMTCBU QUJMRVMgc2hvdWxkIHVzZQorICogR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoKSB0byBvYnRh aW4gdGhlIGNvbXBsZXRlIHNldCBvZiB0YWJsZXMgY292ZXJlZCBieQorICogdGhlIHB1YmxpY2F0 aW9uLgorICovCitMaXN0ICoKK0dldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMoT2lkIHB1 YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpCit7CisJQXNzZXJ0KCFHZXRQdWJs aWNhdGlvbihwdWJpZCktPmFsbHRhYmxlcyk7CisKKwlyZXR1cm4gZ2V0X3B1YmxpY2F0aW9uX3Jl bGF0aW9ucyhwdWJpZCwgcHViX3BhcnRvcHQsIGZhbHNlKTsKK30KKworLyoKKyAqIFJldHVybiB0 aGUgbGlzdCBvZiB0YWJsZSBPSURzIHNwZWNpZmllZCBpbiB0aGUgcHVibGljYXRpb24ncyBFWENF UFQgY2xhdXNlLgorICogVGhpcyBhcHBsaWVzIG9ubHkgdG8gRk9SIEFMTCBUQUJMRVMgcHVibGlj YXRpb25zLgorICovCitMaXN0ICoKK0dldEFsbFB1YmxpY2F0aW9uRXhjZXB0VGFibGVzKE9pZCBw dWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KQoreworCUxpc3QJICAgKnJlbGlk cyA9IGdldF9wdWJsaWNhdGlvbl9yZWxhdGlvbnMocHViaWQsIHB1Yl9wYXJ0b3B0LCB0cnVlKTsK Kwlib29sCQlpc19wYXJlbnRfaW5fZXhjZXB0ID0gdHJ1ZTsKKworCUFzc2VydChHZXRQdWJsaWNh dGlvbihwdWJpZCktPmFsbHRhYmxlcyk7CisKKwl3aGlsZSAoaXNfcGFyZW50X2luX2V4Y2VwdCkK Kwl7CisJCUxpc3QJICAgKnBhcmVudGlkcyA9IE5JTDsKKwkJTGlzdAkgICAqY3VyciA9IE5JTDsK KworCQlmb3JlYWNoX29pZChyZWxpZCwgcmVsaWRzKQorCQl7CisJCQlPaWQJCQlwYXJlbnRpZDsK KworCQkJaWYgKCFnZXRfcmVsX3JlbGlzcGFydGl0aW9uKHJlbGlkKSkKKwkJCQljb250aW51ZTsK KworCQkJcGFyZW50aWQgPSBnZXRfcGFydGl0aW9uX3BhcmVudChyZWxpZCwgZmFsc2UpOworCisJ CQlpZiAobGlzdF9tZW1iZXJfb2lkKHJlbGlkcywgcGFyZW50aWQpKQorCQkJCWNvbnRpbnVlOwor CisJCQlwYXJlbnRpZHMgPSBsaXN0X2FwcGVuZF91bmlxdWVfb2lkKHBhcmVudGlkcywgcGFyZW50 aWQpOworCQl9CisKKwkJZm9yZWFjaF9vaWQocGFyZW50aWQsIHBhcmVudGlkcykKKwkJeworCQkJ TGlzdAkgICAqcGFydGl0aW9uaWRzOworCQkJYm9vbAkJYWxsX3BhcnRpdGlvbnNfaW5fZXhjZXB0 ID0gdHJ1ZTsKKworCQkJcGFydGl0aW9uaWRzID0gZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihw YXJlbnRpZCwgTm9Mb2NrKTsKKworCQkJZm9yZWFjaF9vaWQocGFydGl0aW9uaWQsIHBhcnRpdGlv bmlkcykKKwkJCXsKKwkJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChyZWxpZHMsIHBhcnRpdGlvbmlk KSkKKwkJCQl7CisJCQkJCWFsbF9wYXJ0aXRpb25zX2luX2V4Y2VwdCA9IGZhbHNlOworCQkJCQli cmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhbGxfcGFydGl0aW9uc19pbl9leGNlcHQpCisJ CQkJY3VyciA9IGxhcHBlbmRfb2lkKGN1cnIsIHBhcmVudGlkKTsKKwkJfQorCisJCWlmIChjdXJy ID09IE5JTCkKKwkJCWlzX3BhcmVudF9pbl9leGNlcHQgPSBmYWxzZTsKKwkJZWxzZQorCQkJcmVs aWRzID0gbGlzdF9jb25jYXQocmVsaWRzLCBjdXJyKTsKKwl9CisKKwlyZXR1cm4gcmVsaWRzOwor fQorCiAvKgogICogR2V0cyBsaXN0IG9mIHB1YmxpY2F0aW9uIG9pZHMgZm9yIHB1YmxpY2F0aW9u cyBtYXJrZWQgYXMgRk9SIEFMTCBUQUJMRVMuCiAgKi8KQEAgLTg2NCwxOCArOTcwLDMwIEBAIEdl dEFsbFRhYmxlc1B1YmxpY2F0aW9ucyh2b2lkKQogICogcGFydGl0aW9uZWQgdGFibGVzLCB3ZSBt dXN0IGV4Y2x1ZGUgcGFydGl0aW9ucyBpbiBmYXZvciBvZiBpbmNsdWRpbmcgdGhlCiAgKiByb290 IHBhcnRpdGlvbmVkIHRhYmxlcy4gVGhpcyBpcyBub3QgYXBwbGljYWJsZSB0byBGT1IgQUxMIFNF UVVFTkNFUwogICogcHVibGljYXRpb24uCisgKgorICogRm9yIGEgRk9SIEFMTCBUQUJMRVMgcHVi bGljYXRpb24sIHRoZSByZXR1cm5lZCBsaXN0IGV4Y2x1ZGVzIHRhYmxlcyBtZW50aW9uZWQKKyAq IGluIEVYQ0VQVCBUQUJMRSBjbGF1c2UuCiAgKi8KIExpc3QgKgotR2V0QWxsUHVibGljYXRpb25S ZWxhdGlvbnMoY2hhciByZWxraW5kLCBib29sIHB1YnZpYXJvb3QpCitHZXRBbGxQdWJsaWNhdGlv blJlbGF0aW9ucyhQdWJsaWNhdGlvbiAqcHViLCBjaGFyIHJlbGtpbmQpCiB7CiAJUmVsYXRpb24J Y2xhc3NSZWw7CiAJU2NhbktleURhdGEga2V5WzFdOwogCVRhYmxlU2NhbkRlc2Mgc2NhbjsKIAlI ZWFwVHVwbGUJdHVwbGU7CiAJTGlzdAkgICAqcmVzdWx0ID0gTklMOworCUxpc3QJICAgKmV4Y2Vw dGxpc3QgPSBOSUw7CisJYm9vbAkJcHVidmlhcm9vdCA9IHB1Yi0+cHVidmlhcm9vdDsKKwlPaWQJ CQlwdWJpZCA9IHB1Yi0+b2lkOwogCiAJQXNzZXJ0KCEocmVsa2luZCA9PSBSRUxLSU5EX1NFUVVF TkNFICYmIHB1YnZpYXJvb3QpKTsKIAorCWlmIChyZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04p CisJCWV4Y2VwdGxpc3QgPSBHZXRBbGxQdWJsaWNhdGlvbkV4Y2VwdFRhYmxlcyhwdWJpZCwgcHVi dmlhcm9vdCA/CisJCQkJCQkJCQkJCQkgICBQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgorCQkJCQkJ CQkJCQkJICAgUFVCTElDQVRJT05fUEFSVF9MRUFGKTsKKworCiAJY2xhc3NSZWwgPSB0YWJsZV9v cGVuKFJlbGF0aW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAogCVNjYW5LZXlJbml0 KCZrZXlbMF0sCkBAIC04OTEsNyArMTAwOSw4IEBAIEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25z KGNoYXIgcmVsa2luZCwgYm9vbCBwdWJ2aWFyb290KQogCQlPaWQJCQlyZWxpZCA9IHJlbEZvcm0t Pm9pZDsKIAogCQlpZiAoaXNfcHVibGlzaGFibGVfY2xhc3MocmVsaWQsIHJlbEZvcm0pICYmCi0J CQkhKHJlbEZvcm0tPnJlbGlzcGFydGl0aW9uICYmIHB1YnZpYXJvb3QpKQorCQkJIShyZWxGb3Jt LT5yZWxpc3BhcnRpdGlvbiAmJiBwdWJ2aWFyb290KSAmJgorCQkJIWxpc3RfbWVtYmVyX29pZChl eGNlcHRsaXN0LCByZWxpZCkpCiAJCQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIHJlbGlk KTsKIAl9CiAKQEAgLTkxMiw3ICsxMDMxLDggQEAgR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMo Y2hhciByZWxraW5kLCBib29sIHB1YnZpYXJvb3QpCiAJCQlPaWQJCQlyZWxpZCA9IHJlbEZvcm0t Pm9pZDsKIAogCQkJaWYgKGlzX3B1Ymxpc2hhYmxlX2NsYXNzKHJlbGlkLCByZWxGb3JtKSAmJgot CQkJCSFyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbikKKwkJCQkhcmVsRm9ybS0+cmVsaXNwYXJ0aXRp b24gJiYKKwkJCQkhbGlzdF9tZW1iZXJfb2lkKGV4Y2VwdGxpc3QsIHJlbGlkKSkKIAkJCQlyZXN1 bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIHJlbGlkKTsKIAkJfQogCkBAIC0xMTE2LDYgKzEyMzYs NDE1IEBAIEdldFB1YmxpY2F0aW9uQnlOYW1lKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wgbWlz c2luZ19vaykKIAlyZXR1cm4gT2lkSXNWYWxpZChvaWQpID8gR2V0UHVibGljYXRpb24ob2lkKSA6 IE5VTEw7CiB9CiAKKy8qIEhlbHBlcjogQ2hlY2sgc3lzY2FjaGUgZm9yIHByZXhjZXB0IGZsYWcg Ki8KK2Jvb2wKK2lzX3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHQoT2lkIHJlbGlkLCBPaWQgcHVi aWQpCit7CisJSGVhcFR1cGxlCXR1cDsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKworCXR1cCA9 IFNlYXJjaFN5c0NhY2hlMihQVUJMSUNBVElPTlJFTE1BUCwgT2JqZWN0SWRHZXREYXR1bShyZWxp ZCksIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKwlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXAp KQorCXsKKwkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgcHJmb3JtID0gKEZvcm1fcGdfcHVibGlj YXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKKworCQlyZXN1bHQgPSBwcmZvcm0tPnByZXhjZXB0 OworCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoK KyAqIHB1YmxpY2F0aW9uX2hhc19hbnlfZXhjZXB0aW9uCisgKgorICogUmV0dXJucyB0cnVlIGlm IHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBPSUQgaGFzIGF0IGxlYXN0IG9uZSBlbnRyeSBpbgorICog cGdfcHVibGljYXRpb25fcmVsIG1hcmtlZCBhcyBhbiBleGNlcHRpb24gKHByZXhjZXB0ID0gdHJ1 ZSkuCisgKi8KK2Jvb2wKK3B1YmxpY2F0aW9uX2hhc19hbnlfZXhjZXB0aW9uKE9pZCBwdWJpZCkK K3sKKwlSZWxhdGlvbglwdWJSZWw7CisJU2NhbktleURhdGEgc2tleTsKKwlTeXNTY2FuRGVzYyBz Y2FuOworCUhlYXBUdXBsZQl0dXA7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCS8qIE9wZW4g cGdfcHVibGljYXRpb25fcmVsIHdpdGggQWNjZXNzU2hhcmVMb2NrICovCisJcHViUmVsID0gdGFi bGVfb3BlbihQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkv KgorCSAqIExvb2sgdXAgYnkgcHVibGljYXRpb24gT0lELiBVc2luZyB0aGUgaW5kZXggb24gKHBy cHViaWQpIGlzIGhpZ2hseQorCSAqIGVmZmljaWVudC4KKwkgKi8KKwlTY2FuS2V5SW5pdCgmc2tl eSwKKwkJCQlBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnB1YmlkLAorCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7CisKKwlz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHB1YlJlbCwKKwkJCQkJCQkgIFB1YmxpY2F0aW9uUmVs UHJyZWxpZFBycHViaWRJbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnNrZXkpOwor CisJLyogV2Ugb25seSBuZWVkIHRvIGZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgcHJleGNl cHQgPSB0cnVlICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwID0gc3lzdGFibGVfZ2V0 bmV4dChzY2FuKSkpCisJeworCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCBwdWJyZWxmb3JtID0g KEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKKworCQlpZiAocHVicmVs Zm9ybS0+cHJleGNlcHQpCisJCXsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJ fQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwdWJSZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qCisgKiBpc19yZWxpZF9wdWJs aXNoZWRfZXhwbGljaXRseQorICoKKyAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gT0lE IGlzIGV4cGxpY2l0bHkgcGFydCBvZiB0aGUgcHVibGljYXRpb24uCisgKiBUaGlzIGNvcnJlc3Bv bmRzIHRvIHRoZSAnRk9SIFRBQkxFJyBzeW50YXguCisgKi8KK3N0YXRpYyBib29sCitpc19yZWxp ZF9wdWJsaXNoZWRfZXhwbGljaXRseShPaWQgcmVsaWQsIE9pZCBwdWJpZCkKK3sKKwkvKgorCSAq IFNlYXJjaCB0aGUgc3lzY2FjaGUgZm9yIHBnX3B1YmxpY2F0aW9uX3JlbCB1c2luZyB0aGUgKHJl bGlkLCBwdWJpZCkKKwkgKiBpbmRleC4KKwkgKi8KKwlyZXR1cm4gU2VhcmNoU3lzQ2FjaGVFeGlz dHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShyZWxpZCks CisJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7Cit9CisKKy8qCisgKiBpc19zY2hl bWFfcHVibGlzaGVkCisgKgorICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lc3BhY2UgT0lEIGlz IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uJ3MKKyAqIHNjaGVtYSBsaXN0LiBUaGlzIGNvcnJlc3Bv bmRzIHRvIHRoZSAnRk9SIFRBQkxFUyBJTiBTQ0hFTUEnIHN5bnRheC4KKyAqLworc3RhdGljIGJv b2wKK2lzX3NjaGVtYV9wdWJsaXNoZWQoT2lkIG5zcGlkLCBPaWQgcHViaWQpCit7CisJLyoKKwkg KiBTZWFyY2ggdGhlIHN5c2NhY2hlIGZvciBwZ19wdWJsaWNhdGlvbl9uYW1lc3BhY2UgdXNpbmcg dGhlIChuc3BpZCwKKwkgKiBwdWJpZCkgaW5kZXguCisJICovCisJcmV0dXJuIFNlYXJjaFN5c0Nh Y2hlRXhpc3RzMihQVUJMSUNBVElPTk5BTUVTUEFDRU1BUCwKKwkJCQkJCQkJIE9iamVjdElkR2V0 RGF0dW0obnNwaWQpLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShwdWJpZCkpOworfQorCisv KgorICogaXNfcmVsaWRfcHVibGlzaGVkX2FzX2V4Y2VwdF93aXRoX2FuY2VzdG9ycworICoKKyAq IENoZWNrIGlmIHRoZSByZWxhdGlvbiAncmVsaWQnIG9yIGFueSBvZiBpdHMgcGFydGl0aW9uIGFu Y2VzdG9ycyBhcmUKKyAqIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHRoZSBFWENFUFQgY2xhdXMg b2YgdGhlIGdpdmVuIHB1YmxpY2F0aW9uLgorICovCitzdGF0aWMgYm9vbAoraXNfcmVsaWRfcHVi bGlzaGVkX2FzX2V4Y2VwdF93aXRoX2FuY2VzdG9ycyhPaWQgcmVsaWQsIE9pZCBwdWJpZCkKK3sK KwlMaXN0CSAgICphbmNlc3RvcnM7CisJTGlzdENlbGwgICAqbGM7CisJYm9vbCAgICAgICAgaW5f ZXhjZXB0ID0gZmFsc2U7CisKKwkvKiBDaGVjayB0aGUgcmVsYXRpb24gaXRzZWxmIGZpcnN0ICov CisJaWYgKGlzX3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHQocmVsaWQsIHB1YmlkKSkKKwkJcmV0 dXJuIHRydWU7CisKKwkvKiBDaGVjayB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gKi8KKwlhbmNlc3Rv cnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCk7CisKKwlmb3JlYWNoKGxjLCBhbmNl c3RvcnMpCisJeworCQlPaWQJCQlhbmNlc3RvciA9IGxmaXJzdF9vaWQobGMpOworCisJCWlmIChp c19yZWxpZF9wdWJsaXNoZWRfYXNfZXhjZXB0KGFuY2VzdG9yLCBwdWJpZCkpCisJCXsKKwkJCWlu X2V4Y2VwdCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWxpc3RfZnJlZShhbmNlc3Rv cnMpOworCisJcmV0dXJuIGluX2V4Y2VwdDsKK30KKworLyoKKyAqIHBnX2dldF9wdWJsaWNhdGlv bl9lZmZlY3RpdmVfdGFibGVzCisgKgorICogR2l2ZW4gYSByb290IHJlbGF0aW9uIGFuZCBhIGxp c3Qgb2YgcHVibGljYXRpb25zLCBjYWxjdWxhdGUgdGhlIHNldCBvZgorICogcmVsYXRpb25zIHRo YXQgYXJlIGVmZmVjdGl2ZWx5IHB1Ymxpc2hlZC4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yCisgKiAi Rk9SIEFMTCBUQUJMRVMiIHB1YmxpY2F0aW9ucyB0aGF0IHVzZSAiRVhDRVBUIFRBQkxFIiBmaWx0 ZXJzLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXNvbHZlcyB0aGUgc21hbGxlc3QgcG9zc2libGUg c2V0IG9mIGFuY2VzdG9ycyB0aGF0IGNvdmVyCisgKiBhbGwgbm9uLWV4Y2x1ZGVkIGxlYWYgcGFy dGl0aW9ucy4KKyAqLworRGF0dW0KK3BnX2dldF9wdWJsaWNhdGlvbl9lZmZlY3RpdmVfdGFibGVz KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRnVuY0NhbGxDb250ZXh0ICpmdW5jY3R4OworCUxpc3QJ ICAgKnJlc3VsdHM7CisKKwlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQorCXsKKwkJT2lkCQkJcm9v dF9yZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJCUFycmF5VHlwZSAgKnB1Yl9uYW1lc19hcnJh eSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OworCQlMaXN0CSAgICpwdWJfb2lkcyA9IE5JTDsKKwkJRGF0dW0JICAgKnB1Yl9kYXR1bXM7CisJ CWJvb2wJICAgKnB1Yl9udWxsczsKKwkJaW50CQkJcHViX2NvdW50OworCQlUdXBsZURlc2MJdHVw ZGVzYzsKKwkJTGlzdAkgICAqZmluYWxfb3V0cHV0ID0gTklMOworCQlib29sCQloYXNfY2xlYW5f YWxsX3RhYmxlc19wdWIgPSBmYWxzZTsKKwkJYm9vbAkJaGFzX2FueV9leGNlcHQgPSBmYWxzZTsK KwkJTGlzdAkgICAqZXhjZXB0X3B1Yl9uYW1lcyA9IE5JTDsKKwkJT2lkCQkJZXhjZXB0X3B1Yl9p ZDsKKworCQlmdW5jY3R4ID0gU1JGX0ZJUlNUQ0FMTF9JTklUKCk7CisKKwkJZGVjb25zdHJ1Y3Rf YXJyYXkocHViX25hbWVzX2FycmF5LCBURVhUT0lELCAtMSwgZmFsc2UsICdpJywKKwkJCQkJCSAg JnB1Yl9kYXR1bXMsICZwdWJfbnVsbHMsICZwdWJfY291bnQpOworCQlmb3IgKGludCBpID0gMDsg aSA8IHB1Yl9jb3VudDsgaSsrKQorCQl7CisJCQlpZiAoIXB1Yl9udWxsc1tpXSkKKwkJCXsKKwkJ CQljaGFyCSAgICpwdWJuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwdWJfZGF0dW1zW2ldKTsK KworCQkJCXB1Yl9vaWRzID0gbGFwcGVuZF9vaWQocHViX29pZHMsIGdldF9wdWJsaWNhdGlvbl9v aWQocHVibmFtZSwgZmFsc2UpKTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIERldGVybWluZSB3 aGV0aGVyIHRoZSBleHBlbnNpdmUgZXhwYW5zaW9uIHN0ZXAgY2FuIGJlIHNraXBwZWQuIElmCisJ CSAqIGFueSBwdWJsaWNhdGlvbiBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uIHdpdGhv dXQgYW4gRVhDRVBUCisJCSAqIGNsYXVzZSwgb3IgaWYgbm9uZSBvZiB0aGUgcHVibGljYXRpb25z IGRlZmluZSBleGNlcHRpb25zLCB0aGUgcm9vdAorCQkgKiByZWxhdGlvbiBhbG9uZSBpcyBzdWZm aWNpZW50IGFzIHRoZSByZXN1bHQuCisJCSAqLworCQlmb3JlYWNoX29pZChwdWJvaWQsIHB1Yl9v aWRzKQorCQl7CisJCQlIZWFwVHVwbGUJcHViVHVwOworCQkJRm9ybV9wZ19wdWJsaWNhdGlvbiBw dWJmb3JtOworCisJCQlwdWJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFVCTElDQVRJT05PSUQsIE9i amVjdElkR2V0RGF0dW0ocHVib2lkKSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHViVHVw KSkKKwkJCQljb250aW51ZTsKKworCQkJcHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBH RVRTVFJVQ1QocHViVHVwKTsKKwkJCWlmIChwdWJmb3JtLT5wdWJhbGx0YWJsZXMpCisJCQl7CisJ CQkJLyogQ2hlY2sgd2hldGhlciB0aGlzIHB1YmxpY2F0aW9uIGRlZmluZXMgYW55IEVYQ0VQVCBl bnRyaWVzICovCisJCQkJaWYgKHB1YmxpY2F0aW9uX2hhc19hbnlfZXhjZXB0aW9uKHB1Ym9pZCkp CisJCQkJeworCQkJCQlleGNlcHRfcHViX25hbWVzID0gbGFwcGVuZChleGNlcHRfcHViX25hbWVz LAorCQkJCQkJCQkJCQkgICBtYWtlU3RyaW5nKHB1YmZvcm0tPnB1Ym5hbWUuZGF0YSkpOworCQkJ CQloYXNfYW55X2V4Y2VwdCA9IHRydWU7CisJCQkJCWV4Y2VwdF9wdWJfaWQgPSBwdWJmb3JtLT5v aWQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMgcHVibGlj YXRpb24gaW5jbHVkZXMgYWxsIHRhYmxlcyB3aXRob3V0IGV4Y2VwdC4KKwkJCQkJICovCisJCQkJ CWhhc19jbGVhbl9hbGxfdGFibGVzX3B1YiA9IHRydWU7CisJCQkJfQorCQkJfQorCisJCQlSZWxl YXNlU3lzQ2FjaGUocHViVHVwKTsKKwkJfQorCisJCWlmIChsaXN0X2xlbmd0aChleGNlcHRfcHVi X25hbWVzKSA+IDEpCisJCXsKKwkJCVN0cmluZ0luZm8JcHViX25hbWVzID0gbWFrZVN0cmluZ0lu Zm8oKTsKKworCQkJR2V0UHVibGljYXRpb25zU3RyKGV4Y2VwdF9wdWJfbmFtZXMsIHB1Yl9uYW1l cywgdHJ1ZSk7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgdXNlIG11bHRpcGxlIHB1Ymxp Y2F0aW9ucyB3aXRoIEVYQ0VQVCBUQUJMRSBsaXN0cyIpLAorCQkJCQllcnJkZXRhaWwoIlRoZSBm b2xsb3dpbmcgcHVibGljYXRpb25zIGhhdmUgZXhjZXB0aW9uczogJXMuIiwKKwkJCQkJCQkgIHB1 Yl9uYW1lcy0+ZGF0YSkpOworCQl9CisKKwkJLyogUmV0dXJuIHJvb3QgaW1tZWRpYXRlbHkgaWYg bm8gZmlsdGVyaW5nIGxvZ2ljIGlzIG5lZWRlZCAqLworCQlpZiAoaGFzX2NsZWFuX2FsbF90YWJs ZXNfcHViIHx8ICFoYXNfYW55X2V4Y2VwdCkKKwkJeworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCQkJZmluYWxf b3V0cHV0ID0gbGlzdF9tYWtlMV9vaWQocm9vdF9yZWxpZCk7CisJCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY29udGV4dCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAgICphbGxfdGFi bGVzOworCQkJTGlzdAkgICAqYWxsX2xlYXZlcyA9IE5JTDsKKwkJCUxpc3QJICAgKmV4Y2VwdF9s ZWF2ZXMgPSBOSUw7CisJCQlMaXN0CSAgICphbGxvd2VkX2xlYXZlcyA9IE5JTDsKKwkJCUxpc3QJ ICAgKmNhbmRpZGF0ZV9saXN0ID0gTklMOworCisJCQkvKiBHZXQgYWxsIHRoZSBsZWFmIHJlbGF0 aW9ucyAqLworCQkJYWxsX2xlYXZlcyA9IEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhh bGxfbGVhdmVzLAorCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX0xFQUYsCisJCQkJCQkJ CQkJCQkJCXJvb3RfcmVsaWQpOworCQkJZm9yZWFjaF9vaWQoY3Vycl9yZWxpZCwgYWxsX2xlYXZl cykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEEgbGVhZiB0YWJsZSBpcyBjb25zaWRlcmVkIGV4Y2x1 ZGVkIGlmIGl0LCBvciBhbnkgb2YgaXRzCisJCQkJICogYW5jZXN0b3JzLCBpcyBsaXN0ZWQgaW4g dGhlIEVYQ0VQVCBjbGF1c2Ugb2YgdGhlCisJCQkJICogcHVibGljYXRpb24uIE90aGVyd2lzZSwg aXQgcmVtYWlucyBwYXJ0IG9mIHRoZSBlZmZlY3RpdmUKKwkJCQkgKiBwdWJsaWNhdGlvbiBzZXQu CisJCQkJICovCisJCQkJaWYgKGlzX3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHRfd2l0aF9hbmNl c3RvcnMoY3Vycl9yZWxpZCwgZXhjZXB0X3B1Yl9pZCkpCisJCQkJCWV4Y2VwdF9sZWF2ZXMgPSBs YXBwZW5kX29pZChleGNlcHRfbGVhdmVzLCBjdXJyX3JlbGlkKTsKKwkJCQllbHNlCisJCQkJCWFs bG93ZWRfbGVhdmVzID0gbGFwcGVuZF9vaWQoYWxsb3dlZF9sZWF2ZXMsIGN1cnJfcmVsaWQpOwor CQkJfQorCisJCQkvKgorCQkJICogQSB0YWJsZSBleGNsdWRlZCBieSB0aGUgRVhDRVBUIGNsYXVz ZSBvZiBvbmUgcHVibGljYXRpb24gbWF5CisJCQkgKiBzdGlsbCBiZSBpbmNsdWRlZCBpZiBpdCBp cyBleHBsaWNpdGx5IHB1Ymxpc2hlZCwgb3IgcHVibGlzaGVkCisJCQkgKiB2aWEgaXRzIHNjaGVt YSBvciBhbnkgb2YgaXRzIGFuY2VzdG9ycywgaW4gYW5vdGhlciBwdWJsaWNhdGlvbi4KKwkJCSAq LworCQkJZm9yZWFjaF9vaWQoY3Vycl9yZWxpZCwgZXhjZXB0X2xlYXZlcykKKwkJCXsKKwkJCQlm b3JlYWNoX29pZChwdWJpZCwgcHViX29pZHMpCisJCQkJeworCQkJCQkvKiBTa2lwIHRoZSBwdWJs aWNhdGlvbiB0aGF0IGV4Y2x1ZGVkIHRoaXMgcmVsYXRpb24uICovCisJCQkJCWlmIChwdWJpZCA9 PSBleGNlcHRfcHViX2lkKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJLyoKKwkJCQkJICogQ2hl Y2sgd2hldGhlciB0aGUgdGFibGUgaXRzZWxmIG9yIGl0cyBzY2hlbWEgaXMKKwkJCQkJICogaW5j bHVkZWQgaW4gdGhpcyBwdWJsaWNhdGlvbi4KKwkJCQkJICovCisJCQkJCWlmIChpc19yZWxpZF9w dWJsaXNoZWRfZXhwbGljaXRseShjdXJyX3JlbGlkLCBwdWJpZCkgfHwKKwkJCQkJCWlzX3NjaGVt YV9wdWJsaXNoZWQoZ2V0X3JlbF9uYW1lc3BhY2UoY3Vycl9yZWxpZCksIHB1YmlkKSkKKwkJCQkJ eworCQkJCQkJYWxsb3dlZF9sZWF2ZXMgPSBsYXBwZW5kX29pZChhbGxvd2VkX2xlYXZlcywgY3Vy cl9yZWxpZCk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICphbmNl c3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhjdXJyX3JlbGlkKTsKKworCQkJCQkJLyoK KwkJCQkJCSAqIENoZWNrIHdoZXRoZXIgYW55IGFuY2VzdG9yLCBvciBpdHMgc2NoZW1hLCBpcwor CQkJCQkJICogaW5jbHVkZWQgaW4gdGhpcyBwdWJsaWNhdGlvbi4KKwkJCQkJCSAqLworCQkJCQkJ Zm9yZWFjaF9vaWQoYW5jX29pZCwgYW5jZXN0b3JzKQorCQkJCQkJeworCQkJCQkJCWlmIChpc19y ZWxpZF9wdWJsaXNoZWRfZXhwbGljaXRseShhbmNfb2lkLCBwdWJpZCkgfHwKKwkJCQkJCQkJaXNf c2NoZW1hX3B1Ymxpc2hlZChnZXRfcmVsX25hbWVzcGFjZShhbmNfb2lkKSwgcHViaWQpKQorCQkJ CQkJCQlhbGxvd2VkX2xlYXZlcyA9IGxhcHBlbmRfb2lkKGFsbG93ZWRfbGVhdmVzLCBjdXJyX3Jl bGlkKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJLyogQm90dG9tLVVwIENv bGxhcHNlLiBDaGVjayBpZiBwYXJlbnRzIGNhbiByZXByZXNlbnQgY2hpbGRyZW4gKi8KKwkJCWFs bF90YWJsZXMgPSBmaW5kX2FsbF9pbmhlcml0b3JzKHJvb3RfcmVsaWQsIEFjY2Vzc1NoYXJlTG9j aywgTlVMTCk7CisJCQljYW5kaWRhdGVfbGlzdCA9IGxpc3RfY29weShhbGxvd2VkX2xlYXZlcyk7 CisJCQlmb3JlYWNoX29pZChjdXJyX3JlbGlkLCBhbGxfdGFibGVzKQorCQkJeworCQkJCUxpc3QJ ICAgKmJyYW5jaF9sZWF2ZXMgPSBOSUw7CisJCQkJYm9vbAkJYWxsX2FsbG93ZWQgPSB0cnVlOwor CisJCQkJLyogT25seSBjb25zaWRlciBwYXJ0aXRpb25lZCB0YWJsZXMgYXMgY29sbGFwc2UgY2Fu ZGlkYXRlcyAqLworCQkJCWlmIChnZXRfcmVsX3JlbGtpbmQoY3Vycl9yZWxpZCkgIT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQkJY29udGludWU7CisKKwkJCQlicmFuY2hfbGVhdmVz ID0gR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKGJyYW5jaF9sZWF2ZXMsCisJCQkJCQkJ CQkJCQkJCQkgICBQVUJMSUNBVElPTl9QQVJUX0xFQUYsCisJCQkJCQkJCQkJCQkJCQkgICBjdXJy X3JlbGlkKTsKKwkJCQlpZiAoYnJhbmNoX2xlYXZlcyA9PSBOSUwpCisJCQkJCWNvbnRpbnVlOwor CisJCQkJZm9yZWFjaF9vaWQobGNiX29pZCwgYnJhbmNoX2xlYXZlcykKKwkJCQl7CisJCQkJCWlm ICghbGlzdF9tZW1iZXJfb2lkKGFsbG93ZWRfbGVhdmVzLCBsY2Jfb2lkKSkKKwkJCQkJeworCQkJ CQkJYWxsX2FsbG93ZWQgPSBmYWxzZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJ CQkJaWYgKGFsbF9hbGxvd2VkKQorCQkJCQljYW5kaWRhdGVfbGlzdCA9IGxpc3RfYXBwZW5kX3Vu aXF1ZV9vaWQoY2FuZGlkYXRlX2xpc3QsCisJCQkJCQkJCQkJCQkJCQljdXJyX3JlbGlkKTsKKwkJ CX0KKworCQkJLyoKKwkJCSAqIERlZHVwbGljYXRlOiBGaWx0ZXIgb3V0IGFueSByZWxhdGlvbiB3 aG9zZSBhbmNlc3RvciBpcyBhbHJlYWR5CisJCQkgKiBwcmVzZW50IGluIHRoZSBjYW5kaWRhdGUg bGlzdC4gVGhpcyBlbnN1cmVzIHdlIG9ubHkgcmV0dXJuIHRoZQorCQkJICogImhpZ2hlc3QiIHJl cHJlc2VudGF0aXZlIGZvciBlYWNoIGJyYW5jaC4KKwkJCSAqLworCQkJb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJ CQlmb3JlYWNoX29pZChjdXJyX3JlbGlkLCBjYW5kaWRhdGVfbGlzdCkKKwkJCXsKKwkJCQlMaXN0 CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhjdXJyX3JlbGlkKTsKKwkJ CQlib29sCQlhbmNlc3Rvcl9hbHJlYWR5X2luY2x1ZGVkID0gZmFsc2U7CisKKwkJCQkvKgorCQkJ CSAqIENoZWNrIGlmIGFueSBhbmNlc3RvciBvZiB0aGUgY3VycmVudCByZWxhdGlvbiBleGlzdHMg aW4gdGhlCisJCQkJICogY2FuZGlkYXRlIGxpc3QuIElmIHNvLCB0aGlzIHJlbGF0aW9uIGlzIHJl ZHVuZGFudC4KKwkJCQkgKi8KKwkJCQlmb3JlYWNoX29pZChhbmNlc3Rvcl9yZWxpZCwgYW5jZXN0 b3JzKQorCQkJCXsKKwkJCQkJaWYgKGxpc3RfbWVtYmVyX29pZChjYW5kaWRhdGVfbGlzdCwgYW5j ZXN0b3JfcmVsaWQpKQorCQkJCQl7CisJCQkJCQlhbmNlc3Rvcl9hbHJlYWR5X2luY2x1ZGVkID0g dHJ1ZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKCFhbmNlc3Rvcl9h bHJlYWR5X2luY2x1ZGVkKQorCQkJCQlmaW5hbF9vdXRwdXQgPSBsYXBwZW5kX29pZChmaW5hbF9v dXRwdXQsIGN1cnJfcmVsaWQpOworCisJCQkJbGlzdF9mcmVlKGFuY2VzdG9ycyk7CisJCQl9CisK KwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQorCisJCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4 KTsKKwkJLyogQ29uc3RydWN0IGEgdHVwbGUgZGVzY3JpcHRvciBmb3IgdGhlIHJlc3VsdCByb3dz LiAqLworCQl0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMik7CisJCVR1cGxlRGVz Y0luaXRFbnRyeSh0dXBkZXNjLCAoQXR0ck51bWJlcikgMSwgInNjaGVtYW5hbWUiLAorCQkJCQkJ ICAgVEVYVE9JRCwgLTEsIDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJO dW1iZXIpIDIsICJyZWxuYW1lIiwKKwkJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKKworCQlmdW5j Y3R4LT50dXBsZV9kZXNjID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CisJCWZ1bmNjdHgtPnVz ZXJfZmN0eCA9IGZpbmFsX291dHB1dDsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29u dGV4dCk7CisJfQorCisJLyogU1JGIFBlci1jYWxsIFJlc3VtZSAqLworCWZ1bmNjdHggPSBTUkZf UEVSQ0FMTF9TRVRVUCgpOworCXJlc3VsdHMgPSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7 CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgbGlzdF9sZW5ndGgocmVzdWx0cykpCisJewor CQlPaWQJCQljdXJyZW50X3JlbGlkID0gbGlzdF9udGhfb2lkKHJlc3VsdHMsIChpbnQpIGZ1bmNj dHgtPmNhbGxfY250cik7CisJCUhlYXBUdXBsZQlyZXR0dXBsZTsKKwkJRGF0dW0JCXZhbHVlc1sy XTsKKwkJYm9vbAkJbnVsbHNbMl0gPSB7ZmFsc2UsIGZhbHNlfTsKKworCQl2YWx1ZXNbMF0gPSBD U3RyaW5nR2V0VGV4dERhdHVtKGdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShj dXJyZW50X3JlbGlkKSkpOworCQl2YWx1ZXNbMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGdldF9y ZWxfbmFtZShjdXJyZW50X3JlbGlkKSk7CisKKwkJcmV0dHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUo ZnVuY2N0eC0+dHVwbGVfZGVzYywgdmFsdWVzLCBudWxscyk7CisJCVNSRl9SRVRVUk5fTkVYVChm dW5jY3R4LCBIZWFwVHVwbGVHZXREYXR1bShyZXR0dXBsZSkpOworCX0KKworCVNSRl9SRVRVUk5f RE9ORShmdW5jY3R4KTsKK30KKwogLyoKICAqIEdldCBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVz IGluIHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBhcnJheS4KICAqCkBAIC0xMTY4LDE3ICsxNjk3LDE3 IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCSAqIHRo b3NlLiBPdGhlcndpc2UsIGdldCB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXRzZWxmLgogCQkJICov CiAJCQlpZiAocHViX2VsZW0tPmFsbHRhYmxlcykKLQkJCQlwdWJfZWxlbV90YWJsZXMgPSBHZXRB bGxQdWJsaWNhdGlvblJlbGF0aW9ucyhSRUxLSU5EX1JFTEFUSU9OLAotCQkJCQkJCQkJCQkJCQkJ IHB1Yl9lbGVtLT5wdWJ2aWFyb290KTsKKwkJCQlwdWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJs aWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbSwKKwkJCQkJCQkJCQkJCQkJCSBSRUxLSU5EX1JFTEFU SU9OKTsKIAkJCWVsc2UKIAkJCXsKIAkJCQlMaXN0CSAgICpyZWxpZHMsCiAJCQkJCQkgICAqc2No ZW1hcmVsaWRzOwogCi0JCQkJcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViX2Vs ZW0tPm9pZCwKLQkJCQkJCQkJCQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCA/Ci0JCQkJCQkJCQkJ CQkgUFVCTElDQVRJT05fUEFSVF9ST09UIDoKLQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJU X0xFQUYpOworCQkJCXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMocHVi X2VsZW0tPm9pZCwKKwkJCQkJCQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2aWFyb290ID8KKwkJCQkJ CQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6CisJCQkJCQkJCQkJCQkJCSBQVUJMSUNB VElPTl9QQVJUX0xFQUYpOwogCQkJCXNjaGVtYXJlbGlkcyA9IEdldEFsbFNjaGVtYVB1YmxpY2F0 aW9uUmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQsCiAJCQkJCQkJCQkJCQkJCQkJcHViX2VsZW0tPnB1 YnZpYXJvb3QgPwogCQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6CkBAIC0x MzY3LDcgKzE4OTYsNyBAQCBwZ19nZXRfcHVibGljYXRpb25fc2VxdWVuY2VzKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCXB1YmxpY2F0aW9uID0gR2V0UHVibGljYXRpb25CeU5hbWUocHVibmFtZSwgZmFs c2UpOwogCiAJCWlmIChwdWJsaWNhdGlvbi0+YWxsc2VxdWVuY2VzKQotCQkJc2VxdWVuY2VzID0g R2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUkVMS0lORF9TRVFVRU5DRSwgZmFsc2UpOworCQkJ c2VxdWVuY2VzID0gR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMocHVibGljYXRpb24sIFJFTEtJ TkRfU0VRVUVOQ0UpOwogCiAJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHNlcXVlbmNlczsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCBmYzNhNGMxOWU2NS4uNmJiODE2 YjIxOWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xOTgsNyAr MTk4LDEyIEBAIE9iamVjdHNJblB1YmxpY2F0aW9uVG9PaWRzKExpc3QgKnB1Ym9ianNwZWNfbGlz dCwgUGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJCXN3aXRjaCAocHVib2JqLT5wdWJvYmp0eXBlKQog CQl7CisJCQljYXNlIFBVQkxJQ0FUSU9OT0JKX0VYQ0VQVF9UQUJMRToKKwkJCQlwdWJvYmotPnB1 YnRhYmxlLT5leGNlcHQgPSB0cnVlOworCQkJCSpyZWxzID0gbGFwcGVuZCgqcmVscywgcHVib2Jq LT5wdWJ0YWJsZSk7CisJCQkJYnJlYWs7CiAJCQljYXNlIFBVQkxJQ0FUSU9OT0JKX1RBQkxFOgor CQkJCXB1Ym9iai0+cHVidGFibGUtPmV4Y2VwdCA9IGZhbHNlOwogCQkJCSpyZWxzID0gbGFwcGVu ZCgqcmVscywgcHVib2JqLT5wdWJ0YWJsZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFBVQkxJQ0FU SU9OT0JKX1RBQkxFU19JTl9TQ0hFTUE6CkBAIC01MTksOCArNTI0LDggQEAgSW52YWxpZGF0ZVB1 YlJlbFN5bmNDYWNoZShPaWQgcHViaWQsIGJvb2wgcHViYWxsdGFibGVzKQogCQkgKiBhIHRhcmdl dC4gSG93ZXZlciwgV0FMIHJlY29yZHMgZm9yIFRSVU5DQVRFIHNwZWNpZnkgYm90aCBhIHJvb3Qg YW5kCiAJCSAqIGl0cyBsZWF2ZXMuCiAJCSAqLwotCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJl bGF0aW9ucyhwdWJpZCwKLQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9BTEwpOworCQlyZWxp ZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1YmlkLAorCQkJCQkJCQkJCQkJ IFBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsKIAkJc2NoZW1hcmVsaWRzID0gR2V0QWxsU2NoZW1hUHVi bGljYXRpb25SZWxhdGlvbnMocHViaWQsCiAJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRf QUxMKTsKIApAQCAtOTI5LDU1ICs5MzQsNjEgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKIAogCS8qIEFzc29jaWF0ZSBvYmplY3RzIHdpdGggdGhlIHB1YmxpY2F0aW9u LiAqLwotCWlmIChzdG10LT5mb3JfYWxsX3RhYmxlcykKKwlPYmplY3RzSW5QdWJsaWNhdGlvblRv T2lkcyhzdG10LT5wdWJvYmplY3RzLCBwc3RhdGUsICZyZWxhdGlvbnMsCisJCQkJCQkJICAgJnNj aGVtYWlkbGlzdCk7CisKKwkvKiBGT1IgVEFCTEVTIElOIFNDSEVNQSByZXF1aXJlcyBzdXBlcnVz ZXIgKi8KKwlpZiAoc2NoZW1haWRsaXN0ICE9IE5JTCAmJiAhc3VwZXJ1c2VyKCkpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAor CQkJCWVycm1zZygibXVzdCBiZSBzdXBlcnVzZXIgdG8gY3JlYXRlIEZPUiBUQUJMRVMgSU4gU0NI RU1BIHB1YmxpY2F0aW9uIikpOworCisJLyogQWRkIHJlbGF0aW9ucyAodGFibGVzKSB0byB0aGUg cHVibGljYXRpb24uICovCisJaWYgKHJlbGF0aW9ucyAhPSBOSUwpCiAJewogCQkvKgotCQkgKiBJ bnZhbGlkYXRlIHJlbGNhY2hlIHNvIHRoYXQgcHVibGljYXRpb24gaW5mbyBpcyByZWJ1aWx0LiBT ZXF1ZW5jZXMKLQkJICogcHVibGljYXRpb24gZG9lc24ndCByZXF1aXJlIGludmFsaWRhdGlvbiwg YXMgcmVwbGljYSBpZGVudGl0eQotCQkgKiBjaGVja3MgZG9uJ3QgYXBwbHkgdG8gdGhlbS4KKwkJ ICogVGhlICdyZWxhdGlvbnMnIGxpc3QgY2FuIGJlIG5vbi1lbXB0eSBpbiBvbmx5IHR3byBjYXNl czoKKwkJICoKKwkJICogMS4gQ1JFQVRFIFBVQkxJQ0FUSU9OIC4uLiBGT1IgVEFCTEUgSW4gdGhp cyBjYXNlLCAncmVsYXRpb25zJworCQkgKiBjb250YWlucyB0aGUgbGlzdCBvZiBzcGVjaWZpZWQg dGFibGVzLgorCQkgKgorCQkgKiAyLiBDUkVBVEUgUFVCTElDQVRJT04gLi4uIEZPUiBBTEwgVEFC TEVTIEluIHRoaXMgY2FzZSwgJ3JlbGF0aW9ucycKKwkJICogY29udGFpbnMgdGhlIGxpc3Qgb2Yg dGFibGVzIHNwZWNpZmllZCBpbiB0aGUgRVhDRVBUIFRBQkxFIGNsYXVzZS4KKwkJICogRHVyaW5n IHBhcnNpbmcsIHRoZSAnZXhjZXB0JyBmbGFnIGlzIHNldCBmb3IgdGhlIGFzc29jaWF0ZWQKKwkJ ICogUHVibGljYXRpb25SZWxJbmZvIG9iamVjdHMuCiAJCSAqLwotCQlDYWNoZUludmFsaWRhdGVS ZWxjYWNoZUFsbCgpOwotCX0KLQllbHNlIGlmICghc3RtdC0+Zm9yX2FsbF9zZXF1ZW5jZXMpCi0J ewotCQlPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhzdG10LT5wdWJvYmplY3RzLCBwc3RhdGUs ICZyZWxhdGlvbnMsCi0JCQkJCQkJCSAgICZzY2hlbWFpZGxpc3QpOworCQlMaXN0CSAgICpyZWxz OwogCi0JCS8qIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHJlcXVpcmVzIHN1cGVydXNlciAqLwotCQlp ZiAoc2NoZW1haWRsaXN0ICE9IE5JTCAmJiAhc3VwZXJ1c2VyKCkpCi0JCQllcmVwb3J0KEVSUk9S LAotCQkJCQllcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCi0JCQkJCWVy cm1zZygibXVzdCBiZSBzdXBlcnVzZXIgdG8gY3JlYXRlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1 YmxpY2F0aW9uIikpOwotCi0JCWlmIChyZWxhdGlvbnMgIT0gTklMKQotCQl7Ci0JCQlMaXN0CSAg ICpyZWxzOworCQlyZWxzID0gT3BlblRhYmxlTGlzdChyZWxhdGlvbnMpOworCQlUcmFuc2Zvcm1Q dWJXaGVyZUNsYXVzZXMocmVscywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCisJCQkJCQkJCSBwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKLQkJCXJlbHMgPSBPcGVuVGFibGVMaXN0KHJlbGF0 aW9ucyk7Ci0JCQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcHN0YXRlLT5wX3NvdXJj ZXRleHQsCi0JCQkJCQkJCQkgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworCQlDaGVja1B1 YlJlbGF0aW9uQ29sdW1uTGlzdChzdG10LT5wdWJuYW1lLCByZWxzLAorCQkJCQkJCQkgICBzY2hl bWFpZGxpc3QgIT0gTklMLAorCQkJCQkJCQkgICBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7 CiAKLQkJCUNoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KHN0bXQtPnB1Ym5hbWUsIHJlbHMsCi0J CQkJCQkJCQkgICBzY2hlbWFpZGxpc3QgIT0gTklMLAotCQkJCQkJCQkJICAgcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QpOwotCi0JCQlQdWJsaWNhdGlvbkFkZFRhYmxlcyhwdWJvaWQsIHJlbHMs IHRydWUsIE5VTEwpOwotCQkJQ2xvc2VUYWJsZUxpc3QocmVscyk7Ci0JCX0KKwkJUHVibGljYXRp b25BZGRUYWJsZXMocHVib2lkLCByZWxzLCB0cnVlLCBOVUxMKTsKKwkJQ2xvc2VUYWJsZUxpc3Qo cmVscyk7CisJfQogCi0JCWlmIChzY2hlbWFpZGxpc3QgIT0gTklMKQotCQl7Ci0JCQkvKgotCQkJ ICogU2NoZW1hIGxvY2sgaXMgaGVsZCB1bnRpbCB0aGUgcHVibGljYXRpb24gaXMgY3JlYXRlZCB0 byBwcmV2ZW50Ci0JCQkgKiBjb25jdXJyZW50IHNjaGVtYSBkZWxldGlvbi4KLQkJCSAqLwotCQkJ TG9ja1NjaGVtYUxpc3Qoc2NoZW1haWRsaXN0KTsKLQkJCVB1YmxpY2F0aW9uQWRkU2NoZW1hcyhw dWJvaWQsIHNjaGVtYWlkbGlzdCwgdHJ1ZSwgTlVMTCk7Ci0JCX0KKwlpZiAoc2NoZW1haWRsaXN0 ICE9IE5JTCkKKwl7CisJCS8qCisJCSAqIFNjaGVtYSBsb2NrIGlzIGhlbGQgdW50aWwgdGhlIHB1 YmxpY2F0aW9uIGlzIGNyZWF0ZWQgdG8gcHJldmVudAorCQkgKiBjb25jdXJyZW50IHNjaGVtYSBk ZWxldGlvbi4KKwkJICovCisJCUxvY2tTY2hlbWFMaXN0KHNjaGVtYWlkbGlzdCk7CisJCVB1Ymxp Y2F0aW9uQWRkU2NoZW1hcyhwdWJvaWQsIHNjaGVtYWlkbGlzdCwgdHJ1ZSwgTlVMTCk7CiAJfQog CiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAorCWlmIChzdG10LT5mb3Jf YWxsX3RhYmxlcykKKwl7CisJCS8qIEludmFsaWRhdGUgcmVsY2FjaGUgc28gdGhhdCBwdWJsaWNh dGlvbiBpbmZvIGlzIHJlYnVpbHQuICovCisJCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQWxsKCk7 CisJfQorCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRpb25SZWxhdGlvbklk LCBwdWJvaWQsIDApOwogCiAJLyoKQEAgLTEwNTAsOCArMTA2MSw4IEBAIEFsdGVyUHVibGljYXRp b25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQs CiAJCUxvY2tEYXRhYmFzZU9iamVjdChQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1YmZvcm0tPm9p ZCwgMCwKIAkJCQkJCSAgIEFjY2Vzc1NoYXJlTG9jayk7CiAKLQkJcm9vdF9yZWxpZHMgPSBHZXRQ dWJsaWNhdGlvblJlbGF0aW9ucyhwdWJmb3JtLT5vaWQsCi0JCQkJCQkJCQkJCSAgUFVCTElDQVRJ T05fUEFSVF9ST09UKTsKKwkJcm9vdF9yZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVs YXRpb25zKHB1YmZvcm0tPm9pZCwKKwkJCQkJCQkJCQkJCQkgIFBVQkxJQ0FUSU9OX1BBUlRfUk9P VCk7CiAKIAkJZm9yZWFjaChsYywgcm9vdF9yZWxpZHMpCiAJCXsKQEAgLTExNzAsOCArMTE4MSw4 IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJs aWNhdGlvblN0bXQgKnN0bXQsCiAJCSAqIHRyZWVzLCBub3QganVzdCB0aG9zZSBleHBsaWNpdGx5 IG1lbnRpb25lZCBpbiB0aGUgcHVibGljYXRpb24uCiAJCSAqLwogCQlpZiAocm9vdF9yZWxpZHMg PT0gTklMKQotCQkJcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViZm9ybS0+b2lk LAotCQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9BTEwpOworCQkJcmVsaWRzID0gR2V0UHVi bGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucyhwdWJmb3JtLT5vaWQsCisJCQkJCQkJCQkJCQkJIFBV QkxJQ0FUSU9OX1BBUlRfQUxMKTsKIAkJZWxzZQogCQl7CiAJCQkvKgpAQCAtMTI1Niw4ICsxMjY3 LDggQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwg SGVhcFR1cGxlIHR1cCwKIAkJUHVibGljYXRpb25Ecm9wVGFibGVzKHB1YmlkLCByZWxzLCBmYWxz ZSk7CiAJZWxzZQkJCQkJCS8qIEFQX1NldE9iamVjdHMgKi8KIAl7Ci0JCUxpc3QJICAgKm9sZHJl bGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmlkLAotCQkJCQkJCQkJCQkJCQlQVUJM SUNBVElPTl9QQVJUX1JPT1QpOworCQlMaXN0CSAgICpvbGRyZWxpZHMgPSBHZXRQdWJsaWNhdGlv bkluY2x1ZGVkUmVsYXRpb25zKHB1YmlkLAorCQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BB UlRfUk9PVCk7CiAJCUxpc3QJICAgKmRlbHJlbHMgPSBOSUw7CiAJCUxpc3RDZWxsICAgKm9sZGxj OwogCkBAIC0xMzU4LDYgKzEzNjksNyBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVi bGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAogCQkJCW9sZHJlbCA9IHBhbGxvY19v YmplY3QoUHVibGljYXRpb25SZWxJbmZvKTsKIAkJCQlvbGRyZWwtPndoZXJlQ2xhdXNlID0gTlVM TDsKIAkJCQlvbGRyZWwtPmNvbHVtbnMgPSBOSUw7CisJCQkJb2xkcmVsLT5leGNlcHQgPSBmYWxz ZTsKIAkJCQlvbGRyZWwtPnJlbGF0aW9uID0gdGFibGVfb3BlbihvbGRyZWxpZCwKIAkJCQkJCQkJ CQkJICBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCQkJCWRlbHJlbHMgPSBsYXBwZW5kKGRl bHJlbHMsIG9sZHJlbCk7CkBAIC0xNDA4LDcgKzE0MjAsOCBAQCBBbHRlclB1YmxpY2F0aW9uU2No ZW1hcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJTGlzdENlbGwgICAqbGM7CiAJCUxp c3QJICAgKnJlbG9pZHM7CiAKLQkJcmVsb2lkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1 YmZvcm0tPm9pZCwgUFVCTElDQVRJT05fUEFSVF9ST09UKTsKKwkJcmVsb2lkcyA9IEdldFB1Ymxp Y2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMocHViZm9ybS0+b2lkLAorCQkJCQkJCQkJCQkJICBQVUJM SUNBVElPTl9QQVJUX1JPT1QpOwogCiAJCWZvcmVhY2gobGMsIHJlbG9pZHMpCiAJCXsKQEAgLTE3 NzEsNiArMTc4NCw3IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQlwdWJfcmVsLT5y ZWxhdGlvbiA9IHJlbDsKIAkJcHViX3JlbC0+d2hlcmVDbGF1c2UgPSB0LT53aGVyZUNsYXVzZTsK IAkJcHViX3JlbC0+Y29sdW1ucyA9IHQtPmNvbHVtbnM7CisJCXB1Yl9yZWwtPmV4Y2VwdCA9IHQt PmV4Y2VwdDsKIAkJcmVscyA9IGxhcHBlbmQocmVscywgcHViX3JlbCk7CiAJCXJlbGlkcyA9IGxh cHBlbmRfb2lkKHJlbGlkcywgbXlyZWxpZCk7CiAKQEAgLTE4NDMsNiArMTg1Nyw3IEBAIE9wZW5U YWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCiAJCQkJLyogY2hpbGQgaW5oZXJpdHMgY29sdW1uIGxp c3QgZnJvbSBwYXJlbnQgKi8KIAkJCQlwdWJfcmVsLT5jb2x1bW5zID0gdC0+Y29sdW1uczsKKwkJ CQlwdWJfcmVsLT5leGNlcHQgPSB0LT5leGNlcHQ7CiAJCQkJcmVscyA9IGxhcHBlbmQocmVscywg cHViX3JlbCk7CiAJCQkJcmVsaWRzID0gbGFwcGVuZF9vaWQocmVsaWRzLCBjaGlsZHJlbGlkKTsK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IDBiM2M4NDk5YjQ5 Li43NDU2ZmU4MzlkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0 aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpA QCAtNTQ5LDYgKzU0OSw3OCBAQCBjaGVja19wdWJsaWNhdGlvbnMoV2FsUmVjZWl2ZXJDb25uICp3 cmNvbm4sIExpc3QgKnB1YmxpY2F0aW9ucykKIAl9CiB9CiAKKy8qCisgKiBUaHJvd3MgYW4gRVJS T1IgaWYgbXVsdGlwbGUgcHVibGljYXRpb25zIHdpdGggZXhjZXB0aW9ucyBhcmUgZm91bmQuCisg KgorICogVGhpcyBjaGVjayBpcyBtYW5kYXRvcnkgYmVjYXVzZSBsb2dpY2FsIHJlcGxpY2F0aW9u IGN1cnJlbnRseSBkb2VzIG5vdAorICogc3VwcG9ydCBzdWJzY3JpYmluZyB0byBtdWx0aXBsZSBw dWJsaWNhdGlvbnMgaWYgbW9yZSB0aGFuIG9uZSBvZiB0aGVtCisgKiB1c2VzIGFuIGV4Y2x1c2lv biBsaXN0LgorICovCitzdGF0aWMgdm9pZAorY2hlY2tfcHVibGljYXRpb25zX2V4Y2VwdF9saXN0 KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCit7CisJTGlzdAkg ICAqZXhjZXB0X3B1YmxpY2F0aW9ucyA9IE5JTDsKKwlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7CisJ U3RyaW5nSW5mb0RhdGEgY21kOworCVN0cmluZ0luZm9EYXRhIHB1Ym5hbWVzOworCVR1cGxlVGFi bGVTbG90ICpzbG90OworCU9pZAkJCXRhYmxlUm93WzFdID0ge1RFWFRPSUR9OworCisJaWYgKGxp c3RfbGVuZ3RoKHB1YmxpY2F0aW9ucykgPD0gMSkKKwkJcmV0dXJuOworCisJaW5pdFN0cmluZ0lu Zm8oJmNtZCk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLAorCQkJCQkJCSJTRUxFQ1Qg cC5wdWJuYW1lXG4iCisJCQkJCQkJIiBGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxu IgorCQkJCQkJCSIgV0hFUkUgcC5wdWJuYW1lIElOICgiKTsKKworCUdldFB1YmxpY2F0aW9uc1N0 cihwdWJsaWNhdGlvbnMsICZjbWQsIHRydWUpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y21kLAorCQkJCQkJCSIpXG4iCisJCQkJCQkJIiAgIEFORCBFWElTVFMgKFNFTEVDVCAxXG4iCisJ CQkJCQkJIiAgICAgICAgICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3Jl bCBwclxuIgorCQkJCQkJCSIgICAgICAgICAgICAgICAgV0hFUkUgcHIucHJwdWJpZCA9IHAub2lk XG4iCisJCQkJCQkJIiAgICAgICAgICAgICAgICAgIEFORCBwci5wcmV4Y2VwdCBJUyBUUlVFKSIp OworCisJcmVzID0gd2FscmN2X2V4ZWMod3Jjb25uLCBjbWQuZGF0YSwgMSwgdGFibGVSb3cpOwor CXBmcmVlKGNtZC5kYXRhKTsKKworCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVT KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycm1zZygiY291bGQgbm90IHJlY2VpdmUgbGlzdCBv ZiBwdWJsaWNhdGlvbnMgZnJvbSB0aGUgcHVibGlzaGVyOiAlcyIsCisJCQkJCQlyZXMtPmVycikp OworCisJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRU U09wc01pbmltYWxUdXBsZSk7CisJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KHJlcy0+ dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQorCXsKKwkJY2hhcgkgICAqcHVibmFtZTsK KwkJYm9vbAkJaXNudWxsOworCisJCXB1Ym5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3Rf Z2V0YXR0cihzbG90LCAxLCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQlleGNl cHRfcHVibGljYXRpb25zID0gbGFwcGVuZChleGNlcHRfcHVibGljYXRpb25zLCBtYWtlU3RyaW5n KHB1Ym5hbWUpKTsKKwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJfQorCisJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKworCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKKwor CWlmIChsaXN0X2xlbmd0aChleGNlcHRfcHVibGljYXRpb25zKSA8PSAxKQorCQlyZXR1cm47CisK Kwlpbml0U3RyaW5nSW5mbygmcHVibmFtZXMpOworCUdldFB1YmxpY2F0aW9uc1N0cihleGNlcHRf cHVibGljYXRpb25zLCAmcHVibmFtZXMsIGZhbHNlKTsKKworCWVyZXBvcnQoRVJST1IsCisJCQll cnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJZXJy bXNnKCJwdWJsaWNhdGlvbnMgJXMgYXJlIGRlZmluZWQgd2l0aCBFWENFUFQgVEFCTEUiLCBwdWJu YW1lcy5kYXRhKSwKKwkJCWVycmhpbnQoIlN1YnNjcmlwdGlvbiBjYW5ub3QgYmUgY3JlYXRlZCB1 c2luZyBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgdGhhdCBzcGVjaWZ5IEVYQ0VQVCBUQUJMRS4iKSk7 Cit9CisKIC8qCiAgKiBBdXhpbGlhcnkgZnVuY3Rpb24gdG8gYnVpbGQgYSB0ZXh0IGFycmF5IG91 dCBvZiBhIGxpc3Qgb2YgU3RyaW5nIG5vZGVzLgogICovCkBAIC03OTUsNiArODY3LDcgQEAgQ3Jl YXRlU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3Rt dCAqc3RtdCwKIAkJCWNoYXIJCXJlbGF0aW9uX3N0YXRlOwogCiAJCQljaGVja19wdWJsaWNhdGlv bnMod3Jjb25uLCBwdWJsaWNhdGlvbnMpOworCQkJY2hlY2tfcHVibGljYXRpb25zX2V4Y2VwdF9s aXN0KHdyY29ubiwgcHVibGljYXRpb25zKTsKIAkJCWNoZWNrX3B1YmxpY2F0aW9uc19vcmlnaW5f dGFibGVzKHdyY29ubiwgcHVibGljYXRpb25zLAogCQkJCQkJCQkJCQkgb3B0cy5jb3B5X2RhdGEs CiAJCQkJCQkJCQkJCSBvcHRzLnJldGFpbmRlYWR0dXBsZXMsIG9wdHMub3JpZ2luLApAQCAtOTU5 LDYgKzEwMzIsOCBAQCBBbHRlclN1YnNjcmlwdGlvbl9yZWZyZXNoKFN1YnNjcmlwdGlvbiAqc3Vi LCBib29sIGNvcHlfZGF0YSwKIAkJaWYgKHZhbGlkYXRlX3B1YmxpY2F0aW9ucykKIAkJCWNoZWNr X3B1YmxpY2F0aW9ucyh3cmNvbm4sIHZhbGlkYXRlX3B1YmxpY2F0aW9ucyk7CiAKKwkJY2hlY2tf cHVibGljYXRpb25zX2V4Y2VwdF9saXN0KHdyY29ubiwgc3ViLT5wdWJsaWNhdGlvbnMpOworCiAJ CS8qIEdldCB0aGUgcmVsYXRpb24gbGlzdCBmcm9tIHB1Ymxpc2hlci4gKi8KIAkJcHVicmVscyA9 IGZldGNoX3JlbGF0aW9uX2xpc3Qod3Jjb25uLCBzdWItPnB1YmxpY2F0aW9ucyk7CiAKQEAgLTI5 NDAsNiArMzAxNSw4IEBAIGZldGNoX3JlbGF0aW9uX2xpc3QoV2FsUmVjZWl2ZXJDb25uICp3cmNv bm4sIExpc3QgKnB1YmxpY2F0aW9ucykKIAkJCQkJCSBwdWJfbmFtZXMuZGF0YSk7CiAJfQogCisJ ZWxvZyhMT0csICJmZXRjaF9yZWxhdGlvbl9saXN0OiBleGVjdXRpbmcgcXVlcnkgdG8gZmV0Y2gg ZWZmZWN0aXZlcmVsYXRpb25zOiBcbiVzIiwKKwkJIGNtZC5kYXRhKTsKIAlwZnJlZShwdWJfbmFt ZXMuZGF0YSk7CiAKIAlyZXMgPSB3YWxyY3ZfZXhlYyh3cmNvbm4sIGNtZC5kYXRhLCBjb2x1bW5f Y291bnQsIHRhYmxlUm93KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggZjk3NmMwZTVj N2UuLmE1MzUxZmM1OWM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtODY4OCw3ICs4 Njg4LDcgQEAgQVRFeGVjU2V0RXhwcmVzc2lvbihBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0 aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKIAkgKiBleHByZXNzaW9ucy4KIAkgKi8KIAlp ZiAoYXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCAmJgotCQlHZXRS ZWxhdGlvblB1YmxpY2F0aW9ucyhSZWxhdGlvbkdldFJlbGlkKHJlbCkpICE9IE5JTCkKKwkJR2V0 UmVsYXRpb25QdWJsaWNhdGlvbnMoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBOVUxMLCBOVUxMKSkK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCiAJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgLyBTRVQgRVhQUkVTU0lPTiBpcyBub3Qg c3VwcG9ydGVkIGZvciB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGluIHRhYmxlcyB0aGF0IGFy ZSBwYXJ0IG9mIGEgcHVibGljYXRpb24iKSwKQEAgLTE4ODg0LDcgKzE4ODg0LDcgQEAgQVRQcmVw Q2hhbmdlUGVyc2lzdGVuY2UoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsIGJv b2wgdG9Mb2dnZWQpCiAJICogVU5MT0dHRUQsIGFzIFVOTE9HR0VEIHRhYmxlcyBjYW4ndCBiZSBw dWJsaXNoZWQuCiAJICovCiAJaWYgKCF0b0xvZ2dlZCAmJgotCQlHZXRSZWxhdGlvblB1YmxpY2F0 aW9ucyhSZWxhdGlvbkdldFJlbGlkKHJlbCkpICE9IE5JTCkKKwkJR2V0UmVsYXRpb25QdWJsaWNh dGlvbnMoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBOVUxMLCBOVUxMKSkKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKIAkJCQkgZXJybXNnKCJjYW5ub3QgY2hhbmdlIHRhYmxlIFwiJXNcIiB0byB1bmxvZ2dlZCBi ZWNhdXNlIGl0IGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiIsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCBjNTY3 MjUyYWNjNC4uYTJlMzY3MTM1ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtMjAzLDYgKzIwMyw3IEBAIHN0 YXRpYyB2b2lkIHByb2Nlc3NDQVNiaXRzKGludCBjYXNfYml0cywgaW50IGxvY2F0aW9uLCBjb25z dCBjaGFyICpjb25zdHJUeXBlLAogc3RhdGljIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnNlUGFydGl0 aW9uU3RyYXRlZ3koY2hhciAqc3RyYXRlZ3ksIGludCBsb2NhdGlvbiwKIAkJCQkJCQkJCQkJCWNv cmVfeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyB2b2lkIHByZXByb2Nlc3NfcHViX2FsbF9v Ymp0eXBlX2xpc3QoTGlzdCAqYWxsX29iamVjdHNfbGlzdCwKKwkJCQkJCQkJCQkJTGlzdCAqKnB1 Ym9iamVjdHMsCiAJCQkJCQkJCQkJCWJvb2wgKmFsbF90YWJsZXMsCiAJCQkJCQkJCQkJCWJvb2wg KmFsbF9zZXF1ZW5jZXMsCiAJCQkJCQkJCQkJCWNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKTsKQEAg LTQ1NSw2ICs0NTYsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hh ciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCQkJCVRyaWdnZXJUcmFu c2l0aW9ucyBUcmlnZ2VyUmVmZXJlbmNpbmcKIAkJCQl2YWN1dW1fcmVsYXRpb25fbGlzdCBvcHRf dmFjdXVtX3JlbGF0aW9uX2xpc3QKIAkJCQlkcm9wX29wdGlvbl9saXN0IHB1Yl9vYmpfbGlzdCBw dWJfYWxsX29ial90eXBlX2xpc3QKKwkJCQlwdWJfZXhjZXB0X29ial9saXN0IG9wdF9wdWJfZXhj ZXB0X2NsYXVzZQogCiAldHlwZSA8cmV0Y2xhdXNlPiByZXR1cm5pbmdfY2xhdXNlCiAldHlwZSA8 bm9kZT4JcmV0dXJuaW5nX29wdGlvbgpAQCAtNTkyLDYgKzU5NCw3IEBAIHN0YXRpYyBOb2RlICpt YWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2Rl ICpxdWVyeSk7CiAldHlwZSA8bm9kZT4JdmFyX3ZhbHVlIHpvbmVfdmFsdWUKICV0eXBlIDxyb2xl c3BlYz4gYXV0aF9pZGVudCBSb2xlU3BlYyBvcHRfZ3JhbnRlZF9ieQogJXR5cGUgPHB1YmxpY2F0 aW9ub2JqZWN0c3BlYz4gUHVibGljYXRpb25PYmpTcGVjCisldHlwZSA8cHVibGljYXRpb25vYmpl Y3RzcGVjPiBQdWJsaWNhdGlvbkV4Y2VwdE9ialNwZWMKICV0eXBlIDxwdWJsaWNhdGlvbmFsbG9i amVjdHNwZWM+IFB1YmxpY2F0aW9uQWxsT2JqU3BlYwogCiAldHlwZSA8a2V5d29yZD4gdW5yZXNl cnZlZF9rZXl3b3JkIHR5cGVfZnVuY19uYW1lX2tleXdvcmQKQEAgLTEwNzkyLDcgKzEwNzk1LDcg QEAgQWx0ZXJPd25lclN0bXQ6IEFMVEVSIEFHR1JFR0FURSBhZ2dyZWdhdGVfd2l0aF9hcmd0eXBl cyBPV05FUiBUTyBSb2xlU3BlYwogICoKICAqIHB1Yl9hbGxfb2JqX3R5cGUgaXMgb25lIG9mOgog ICoKLSAqCQlUQUJMRVMKKyAqCQlUQUJMRVMgW0VYQ0VQVCBbVEFCTEVdICggdGFibGUgWywgLi4u XSApXQogICoJCVNFUVVFTkNFUwogICoKICAqIENSRUFURSBQVUJMSUNBVElPTiBGT1IgcHViX29i aiBbLCAuLi5dIFtXSVRIIG9wdGlvbnNdCkBAIC0xMDgxOCw3ICsxMDgyMSw4IEBAIENyZWF0ZVB1 YmxpY2F0aW9uU3RtdDoKIAkJCQkJQ3JlYXRlUHVibGljYXRpb25TdG10ICpuID0gbWFrZU5vZGUo Q3JlYXRlUHVibGljYXRpb25TdG10KTsKIAogCQkJCQluLT5wdWJuYW1lID0gJDM7Ci0JCQkJCXBy ZXByb2Nlc3NfcHViX2FsbF9vYmp0eXBlX2xpc3QoJDUsICZuLT5mb3JfYWxsX3RhYmxlcywKKwkJ CQkJcHJlcHJvY2Vzc19wdWJfYWxsX29ianR5cGVfbGlzdCgkNSwgJm4tPnB1Ym9iamVjdHMsCisJ CQkJCQkJCQkJCQkJJm4tPmZvcl9hbGxfdGFibGVzLAogCQkJCQkJCQkJCQkJCSZuLT5mb3JfYWxs X3NlcXVlbmNlcywKIAkJCQkJCQkJCQkJCQl5eXNjYW5uZXIpOwogCQkJCQluLT5vcHRpb25zID0g JDY7CkBAIC0xMDg1OCw2ICsxMDg2Miw3IEBAIFB1YmxpY2F0aW9uT2JqU3BlYzoKIAkJCQkJJCQt PnB1YnRhYmxlLT5yZWxhdGlvbiA9ICQyOwogCQkJCQkkJC0+cHVidGFibGUtPmNvbHVtbnMgPSAk MzsKIAkJCQkJJCQtPnB1YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQ0OworCQkJCQkkJC0+bG9jYXRp b24gPSBAMTsKIAkJCQl9CiAJCQl8IFRBQkxFUyBJTl9QIFNDSEVNQSBDb2xJZAogCQkJCXsKQEAg LTEwOTMzLDExICsxMDkzOCwxOSBAQCBwdWJfb2JqX2xpc3Q6CVB1YmxpY2F0aW9uT2JqU3BlYwog CQkJCQl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CiAJOwogCitvcHRfcHViX2V4Y2VwdF9jbGF1 c2U6CisJCQlFWENFUFQgb3B0X3RhYmxlICcoJyBwdWJfZXhjZXB0X29ial9saXN0ICcpJwl7ICQk ID0gJDQ7IH0KKwkJCXwgLypFTVBUWSovCQkJCQkJCQkJCXsgJCQgPSBOSUw7IH0KKwkJOworCiBQ dWJsaWNhdGlvbkFsbE9ialNwZWM6Ci0JCQkJQUxMIFRBQkxFUworCQkJCUFMTCBUQUJMRVMgb3B0 X3B1Yl9leGNlcHRfY2xhdXNlCiAJCQkJCXsKIAkJCQkJCSQkID0gbWFrZU5vZGUoUHVibGljYXRp b25BbGxPYmpTcGVjKTsKIAkJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05fQUxMX1RB QkxFUzsKKwkJCQkJCSQkLT5leGNlcHRfdGFibGVzID0gJDM7CisJCQkJCQlpZigkJC0+ZXhjZXB0 X3RhYmxlcyAhPSBOVUxMKQorCQkJCQkJCXByZXByb2Nlc3NfcHVib2JqX2xpc3QoJCQtPmV4Y2Vw dF90YWJsZXMsIHl5c2Nhbm5lcik7CiAJCQkJCQkkJC0+bG9jYXRpb24gPSBAMTsKIAkJCQkJfQog CQkJCXwgQUxMIFNFUVVFTkNFUwpAQCAtMTA5NTQsNiArMTA5NjcsMjMgQEAgcHViX2FsbF9vYmpf dHlwZV9saXN0OglQdWJsaWNhdGlvbkFsbE9ialNwZWMKIAkJCQkJeyAkJCA9IGxhcHBlbmQoJDEs ICQzKTsgfQogCTsKIAorUHVibGljYXRpb25FeGNlcHRPYmpTcGVjOgorCQkJIHJlbGF0aW9uX2V4 cHIKKwkJCQl7CisJCQkJCSQkID0gbWFrZU5vZGUoUHVibGljYXRpb25PYmpTcGVjKTsKKwkJCQkJ JCQtPnB1Ym9ianR5cGUgPSBQVUJMSUNBVElPTk9CSl9FWENFUFRfVEFCTEU7CisJCQkJCSQkLT5w dWJ0YWJsZSA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uVGFibGUpOworCQkJCQkkJC0+cHVidGFibGUt PmV4Y2VwdCA9IHRydWU7CisJCQkJCSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMTsKKwkJCQkJ JCQtPmxvY2F0aW9uID0gQDE7CisJCQkJfQorCTsKKworcHViX2V4Y2VwdF9vYmpfbGlzdDogUHVi bGljYXRpb25FeGNlcHRPYmpTcGVjCisJCQkJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCQkJ fCBwdWJfZXhjZXB0X29ial9saXN0ICcsJyBQdWJsaWNhdGlvbkV4Y2VwdE9ialNwZWMKKwkJCQkJ eyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQorCTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgpAQCAtMTk4MTIsOCArMTk4NDIsOSBAQCBwYXJzZVBhcnRpdGlvblN0cmF0ZWd5KGNoYXIgKnN0 cmF0ZWd5LCBpbnQgbG9jYXRpb24sIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogICogQWxzbywg Y2hlY2tzIGlmIHRoZSBwdWJfb2JqZWN0X3R5cGUgaGFzIGJlZW4gc3BlY2lmaWVkIG1vcmUgdGhh biBvbmNlLgogICovCiBzdGF0aWMgdm9pZAotcHJlcHJvY2Vzc19wdWJfYWxsX29ianR5cGVfbGlz dChMaXN0ICphbGxfb2JqZWN0c19saXN0LCBib29sICphbGxfdGFibGVzLAotCQkJCQkJCQlib29s ICphbGxfc2VxdWVuY2VzLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKK3ByZXByb2Nlc3NfcHVi X2FsbF9vYmp0eXBlX2xpc3QoTGlzdCAqYWxsX29iamVjdHNfbGlzdCwgTGlzdCAqKnB1Ym9iamVj dHMsCisJCQkJCQkJCWJvb2wgKmFsbF90YWJsZXMsIGJvb2wgKmFsbF9zZXF1ZW5jZXMsCisJCQkJ CQkJCWNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogewogCWlmICghYWxsX29iamVjdHNfbGlzdCkK IAkJcmV0dXJuOwpAQCAtMTk4MzMsNiArMTk4NjQsNyBAQCBwcmVwcm9jZXNzX3B1Yl9hbGxfb2Jq dHlwZV9saXN0KExpc3QgKmFsbF9vYmplY3RzX2xpc3QsIGJvb2wgKmFsbF90YWJsZXMsCiAJCQkJ CQlwYXJzZXJfZXJycG9zaXRpb24ob2JqLT5sb2NhdGlvbikpOwogCiAJCQkqYWxsX3RhYmxlcyA9 IHRydWU7CisJCQkqcHVib2JqZWN0cyA9IGxpc3RfY29uY2F0KCpwdWJvYmplY3RzLCBvYmotPmV4 Y2VwdF90YWJsZXMpOwogCQl9CiAJCWVsc2UgaWYgKG9iai0+cHVib2JqdHlwZSA9PSBQVUJMSUNB VElPTl9BTExfU0VRVUVOQ0VTKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC90YWJsZXN5bmMuYwppbmRleCAxOWEzYzIxYTg2My4uMzViYjQ0NTk0M2MgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAtNzE2LDIxICs3MTYsMjgg QEAgY29weV9yZWFkX2RhdGEodm9pZCAqb3V0YnVmLCBpbnQgbWlucmVhZCwgaW50IG1heHJlYWQp CiAgKiBtZXNzYWdlIHByb3ZpZGVzIGR1cmluZyByZXBsaWNhdGlvbi4KICAqCiAgKiBUaGlzIGZ1 bmN0aW9uIGFsc28gcmV0dXJucyAoYSkgdGhlIHJlbGF0aW9uIHF1YWxpZmljYXRpb25zIHRvIGJl IHVzZWQgaW4KLSAqIHRoZSBDT1BZIGNvbW1hbmQsIGFuZCAoYikgd2hldGhlciB0aGUgcmVtb3Rl IHJlbGF0aW9uIGhhcyBwdWJsaXNoZWQgYW55Ci0gKiBnZW5lcmF0ZWQgY29sdW1uLgorICogdGhl IENPUFkgY29tbWFuZCwgKGIpIHdoZXRoZXIgdGhlIHJlbW90ZSByZWxhdGlvbiBoYXMgcHVibGlz aGVkIGFueQorICogZ2VuZXJhdGVkIGNvbHVtbiwgYW5kIChjKSBjb21wdXRlcyB0aGUgZWZmZWN0 aXZlIHNldCBvZiByZWxhdGlvbnMgdG8gYmUgdXNlZAorICogYXMgQ09QWSBzb3VyY2VzIHdoZW4g ZXhjbHVzaW9ucyBhcmUgcHJlc2VudC4gV2hlbiBubyBleGNsdXNpb25zIGV4aXN0LCB0aGUKKyAq IGxpc3QgcmVtYWlucyBlbXB0eSBhbmQgdGhlIHJvb3QgcmVsYXRpb24gaXMgdXNlZCBhcy1pcy4g V2hlbiBleGNsdXNpb25zCisgKiBleGlzdCwgdGhlIGxpc3QgY29udGFpbnMgbGVhZiByZWxhdGlv bnMgdGhhdCBhcmUgbm90IGV4Y2x1ZGVkIGFuZCBtdXN0IGJlCisgKiBjb21iaW5lZCB1c2luZyBV TklPTiBBTEwuCiAgKi8KIHN0YXRpYyB2b2lkCiBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFy ICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCi0JCQkJ CQlMaXN0ICoqcXVhbCwgYm9vbCAqZ2VuY29sX3B1Ymxpc2hlZCkKKwkJCQkJCUxpc3QgKipxdWFs LCBib29sICpnZW5jb2xfcHVibGlzaGVkLAorCQkJCQkJTGlzdCAqKmVmZmVjdGl2ZV9yZWxhdGlv bnMpCiB7CiAJV2FsUmN2RXhlY1Jlc3VsdCAqcmVzOwogCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlU dXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlPaWQJCQl0YWJsZVJvd1tdID0ge09JRE9JRCwgQ0hBUk9J RCwgQ0hBUk9JRH07CisJT2lkCQkJdGFibGVSb3dbXSA9IHtPSURPSUQsIENIQVJPSUQsIENIQVJP SUQsIEJPT0xPSUR9OwogCU9pZAkJCWF0dHJSb3dbXSA9IHtJTlQyT0lELCBURVhUT0lELCBPSURP SUQsIEJPT0xPSUQsIEJPT0xPSUR9OwogCU9pZAkJCXF1YWxSb3dbXSA9IHtURVhUT0lEfTsKKwlP aWQJCQlmaWx0ZXJ0YWJsZVJvd1tdID0ge1RFWFRPSUQsIFRFWFRPSUR9OwogCWJvb2wJCWlzbnVs bDsKIAlpbnQJCQluYXR0OworCWJvb2wJCWlzX3BhcnRpdGlvbjsKIAlTdHJpbmdJbmZvCXB1Yl9u YW1lcyA9IE5VTEw7CiAJQml0bWFwc2V0ICAqaW5jbHVkZWRfY29scyA9IE5VTEw7CiAJaW50CQkJ c2VydmVyX3ZlcnNpb24gPSB3YWxyY3Zfc2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2 Q29ubik7CkBAIC03NDAsNyArNzQ3LDcgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAq bnNwbmFtZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLAogCiAJLyog Rmlyc3QgZmV0Y2ggT2lkIGFuZCByZXBsaWNhIGlkZW50aXR5LiAqLwogCWluaXRTdHJpbmdJbmZv KCZjbWQpOwotCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIlNFTEVDVCBjLm9pZCwgYy5yZWxyZXBs aWRlbnQsIGMucmVsa2luZCIKKwlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRUxFQ1QgYy5vaWQs IGMucmVscmVwbGlkZW50LCBjLnJlbGtpbmQsIGMucmVsaXNwYXJ0aXRpb24iCiAJCQkJCSAiICBG Uk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgYyIKIAkJCQkJICIgIElOTkVSIEpPSU4gcGdfY2F0YWxv Zy5wZ19uYW1lc3BhY2UgbiIKIAkJCQkJICIgICAgICAgIE9OIChjLnJlbG5hbWVzcGFjZSA9IG4u b2lkKSIKQEAgLTc3MCw2ICs3NzcsOCBAQCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpu c3BuYW1lLCBjaGFyICpyZWxuYW1lLCBMb2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCiAJQXNzZXJ0 KCFpc251bGwpOwogCWxyZWwtPnJlbGtpbmQgPSBEYXR1bUdldENoYXIoc2xvdF9nZXRhdHRyKHNs b3QsIDMsICZpc251bGwpKTsKIAlBc3NlcnQoIWlzbnVsbCk7CisJaXNfcGFydGl0aW9uID0gRGF0 dW1HZXRCb29sKHNsb3RfZ2V0YXR0cihzbG90LCA0LCAmaXNudWxsKSk7CisJQXNzZXJ0KCFpc251 bGwpOwogCiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKIAl3YWxyY3ZfY2xl YXJfcmVzdWx0KHJlcyk7CkBAIC05NTQsNiArOTYzLDc1IEBAIGZldGNoX3JlbW90ZV90YWJsZV9p bmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsIExvZ2ljYWxSZXBSZWxhdGlvbiAqbHJl bCwKIAogCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKIAorCWlmIChzZXJ2ZXJfdmVyc2lvbiA+ PSAxOTAwMDAgJiYgIWlzX3BhcnRpdGlvbiAmJgorCQlscmVsLT5yZWxraW5kID09IFJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7CisKKwkJLyoK KwkJICogVGhpcyBxdWVyeSByZWN1cnNpdmVseSB0cmF2ZXJzZXMgdGhlIGluaGVyaXRhbmNlIChw YXJ0aXRpb24pIHRyZWUKKwkJICogc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gdGFibGUgT0lEIGFu ZCBkZXRlcm1pbmVzIHdoaWNoIGxlYWYKKwkJICogcmVsYXRpb25zIHNob3VsZCBiZSBpbmNsdWRl ZCBmb3IgcmVwbGljYXRpb24uIEV4Y2x1c2lvbiBwcm9wYWdhdGVzCisJCSAqIGZyb20gcGFyZW50 IHRvIGNoaWxkLCBhbmQgYSByZWxhdGlvbiBpcyBhbHNvIHRyZWF0ZWQgYXMgZXhjbHVkZWQgaWYK KwkJICogaXQgaXMgZXhwbGljaXRseSBtYXJrZWQgd2l0aCBwcmV4Y2VwdCA9IHRydWUgaW4gcGdf cHVibGljYXRpb25fcmVsCisJCSAqIGZvciB0aGUgc3BlY2lmaWVkIHB1YmxpY2F0aW9ucy4gVGhl IGZpbmFsIHJlc3VsdCByZXR1cm5zIG9ubHkKKwkJICogbm9uIGV4Y2x1ZGVkIGxlYWYgcmVsYXRp b25zLgorCQkgKi8KKwkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiU0VMRUNUIHNjaGVtYW5hbWUs IHJlbG5hbWUgRlJPTSBwZ19nZXRfcHVibGljYXRpb25fZWZmZWN0aXZlX3RhYmxlcygldSwgQVJS QVlbJXNdKTsiLAorCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0 YSk7CisKKwkJZWxvZyhMT0csICJFeGVjdXRpbmcgcXVlcnkgdG8gZ2V0IHRoZSB0YWJsZXM6XG4l cyIsIGNtZC5kYXRhKTsKKwkJcmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29u biwgY21kLmRhdGEsCisJCQkJCQkgIGxlbmd0aG9mKGZpbHRlcnRhYmxlUm93KSwgZmlsdGVydGFi bGVSb3cpOworCisJCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJ CQkJCWVycm1zZygiY291bGQgbm90IGdldCBlZmZlY3RpdmUgaW5jbHVkZWQgdGFibGUgbGlzdCBm b3IgdGFibGUgXCIlcy4lc1wiIGZyb20gcHVibGlzaGVyOiAlcyIsCisJCQkJCQkJbnNwbmFtZSwg cmVsbmFtZSwgcmVzLT5lcnIpKTsKKworCQkvKgorCQkgKiBTdG9yZSB0aGUgdGFibGVzIGFzIGEg bGlzdCBvZiBzY2hlbWFuYW1lIGFuZCB0YWJsZW5hbWUuCisJCSAqLworCQlzbG90ID0gTWFrZVNp bmdsZVR1cGxlVGFibGVTbG90KHJlcy0+dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsK KwkJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KHJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwg ZmFsc2UsIHNsb3QpKQorCQl7CisJCQlRdWFsaWZpZWRSZWxhdGlvbk5hbWUgKnJlbGluZm8gPSBw YWxsb2Nfb2JqZWN0KFF1YWxpZmllZFJlbGF0aW9uTmFtZSk7CisKKwkJCXJlbGluZm8tPnNjaGVt YW5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihzbG90LCAxLCAmaXNudWxs KSk7CisJCQlBc3NlcnQoIWlzbnVsbCk7CisJCQlyZWxpbmZvLT5yZWxuYW1lID0gVGV4dERhdHVt R2V0Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMiwgJmlzbnVsbCkpOworCQkJQXNzZXJ0KCFp c251bGwpOworCisJCQkqZWZmZWN0aXZlX3JlbGF0aW9ucyA9IGxhcHBlbmQoKmVmZmVjdGl2ZV9y ZWxhdGlvbnMsIHJlbGluZm8pOworCisJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJfQorCisJ CUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisKKwkJLyoKKwkJICogSWYgdGhl cmUgaXMgZXhhY3RseSBvbmUgaXRlbSBpbiB0aGUgZWZmZWN0aXZlX3JlbGF0aW9ucyBsaXN0IGFu ZCBpdAorCQkgKiBlcXVhbHMgdGhlIHRhYmxlIGJlaW5nIHByb2Nlc3NlZCwgdGhhdCBtZWFucyBu byBhY3R1YWwgZXhjbHVzaW9uCisJCSAqIG9jY3VycmVkLgorCQkgKi8KKwkJaWYgKGxpc3RfbGVu Z3RoKCplZmZlY3RpdmVfcmVsYXRpb25zKSA9PSAxKQorCQl7CisJCQlRdWFsaWZpZWRSZWxhdGlv bk5hbWUgKnJlbGluZm87CisKKwkJCXJlbGluZm8gPSBsaW5pdGlhbCgqZWZmZWN0aXZlX3JlbGF0 aW9ucyk7CisJCQlpZiAoc3RyY21wKG5zcG5hbWUsIHJlbGluZm8tPnNjaGVtYW5hbWUpID09IDAg JiYKKwkJCQlzdHJjbXAocmVsbmFtZSwgcmVsaW5mby0+cmVsbmFtZSkgPT0gMCkKKwkJCXsKKwkJ CQlwZnJlZShyZWxpbmZvLT5zY2hlbWFuYW1lKTsKKwkJCQlwZnJlZShyZWxpbmZvLT5yZWxuYW1l KTsKKwkJCQlsaXN0X2ZyZWVfZGVlcCgqZWZmZWN0aXZlX3JlbGF0aW9ucyk7CisJCQkJKmVmZmVj dGl2ZV9yZWxhdGlvbnMgPSBOSUw7CisJCQl9CisJCX0KKwl9CisKIAkvKgogCSAqIEdldCByZWxh dGlvbidzIHJvdyBmaWx0ZXIgZXhwcmVzc2lvbnMuIERJU1RJTkNUIGF2b2lkcyB0aGUgc2FtZQog CSAqIGV4cHJlc3Npb24gb2YgYSB0YWJsZSBpbiBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgZnJvbSBi ZWluZyBpbmNsdWRlZApAQCAtMTA0Myw2ICsxMTIxLDcgQEAgY29weV90YWJsZShSZWxhdGlvbiBy ZWwpCiAJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWxtYXBlbnRyeTsKIAlMb2dpY2FsUmVwUmVs YXRpb24gbHJlbDsKIAlMaXN0CSAgICpxdWFsID0gTklMOworCUxpc3QJICAgKmVmZmVjdGl2ZV9y ZWxhdGlvbnMgPSBOSUw7CiAJV2FsUmN2RXhlY1Jlc3VsdCAqcmVzOwogCVN0cmluZ0luZm9EYXRh IGNtZDsKIAlDb3B5RnJvbVN0YXRlIGNzdGF0ZTsKQEAgLTEwNTQsNyArMTEzMyw3IEBAIGNvcHlf dGFibGUoUmVsYXRpb24gcmVsKQogCS8qIEdldCB0aGUgcHVibGlzaGVyIHJlbGF0aW9uIGluZm8u ICovCiAJZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9u R2V0TmFtZXNwYWNlKHJlbCkpLAogCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCks ICZscmVsLCAmcXVhbCwKLQkJCQkJCQkmZ2VuY29sX3B1Ymxpc2hlZCk7CisJCQkJCQkJJmdlbmNv bF9wdWJsaXNoZWQsICZlZmZlY3RpdmVfcmVsYXRpb25zKTsKIAogCS8qIFB1dCB0aGUgcmVsYXRp b24gaW50byByZWxtYXAuICovCiAJbG9naWNhbHJlcF9yZWxtYXBfdXBkYXRlKCZscmVsKTsKQEAg LTEwNjYsMTIgKzExNDUsNjQgQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwpCiAJLyogU3RhcnQg Y29weSBvbiB0aGUgcHVibGlzaGVyLiAqLwogCWluaXRTdHJpbmdJbmZvKCZjbWQpOwogCisKKwlp ZiAoZWZmZWN0aXZlX3JlbGF0aW9ucyAmJiBsaXN0X2xlbmd0aChlZmZlY3RpdmVfcmVsYXRpb25z KSkKKwl7CisJCWJvb2wgZmlyc3QgPSB0cnVlOworCisJCS8qCisJCSAqIEJ1aWxkIGEgc2luZ2xl IENPUFkgY29tbWFuZCB0byBzeW5jaHJvbml6ZSBhbGwgcmVzb2x2ZWQgcmVsYXRpb25zCisJCSAq IGludG8gdGhlIHJvb3QgdGFibGUuCisJCSAqCisJCSAqIFRoZSBhcnJheSAnZWZmZWN0aXZlX3Jl bGF0aW9ucycgY29udGFpbnMgdGhlIGxlYWYgdGFibGVzIG9mCisJCSAqIHBhcnRpdGlvbiBoaWVy YXJjaGllcywgd2l0aCBleGNsdWRlZCBzdWJ0cmVlcyByZW1vdmVkIGFjY29yZGluZyB0bworCQkg KiB0aGUgRVhDRVBUIGNsYXVzZXMuIFRoaXMgYXBwbGllcyBvbmx5IHdoZW4KKwkJICogJ3B1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290JyBpcyBlbmFibGVkLCBzaW5jZSB0aGUgaW5pdGlhbCBzeW5j IG11c3QKKwkJICogcm91dGUgYWxsIGNoYW5nZXMgdG8gdGhlIHJvb3QgdGFibGUuCisJCSAqCisJ CSAqIFdlIGNvbnN0cnVjdCBhIFVOSU9OIEFMTCBxdWVyeSB0aGF0IGNvbWJpbmVzIGRhdGEgZnJv bSBtdWx0aXBsZSBsZWFmCisJCSAqIHJlbGF0aW9ucyBpbnRvIG9uZSBzdWItQ09QWSBzdGF0ZW1l bnQsIGVuc3VyaW5nIGFsbCByb3dzIGFyZSBjb3BpZWQKKwkJICogY29uc2lzdGVudGx5IGludG8g dGhlIHJvb3QgdGFibGUuCisJCSAqLworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICJD T1BZIChcbiIpOworCQlmb3JlYWNoX3B0cihRdWFsaWZpZWRSZWxhdGlvbk5hbWUsIHJlbGluZm8s IGVmZmVjdGl2ZV9yZWxhdGlvbnMpCisJCXsKKwkJCWlmICghZmlyc3QpCisJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmY21kLCAiVU5JT04gQUxMXG4iKTsKKworCQkJZmlyc3QgPSBmYWxzZTsK KworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiU0VMRUNUICIpOworCisJCQkvKiBJ ZiB0aGUgdGFibGUgaGFzIGNvbHVtbnMsIHRoZW4gc3BlY2lmeSB0aGUgY29sdW1ucyAqLworCQkJ aWYgKGxyZWwubmF0dHMpCisJCQl7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBscmVsLm5hdHRz OyBpKyspCisJCQkJeworCQkJCQlpZiAoaSA+IDApCisJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjbWQsICIsICIpOworCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVv dGVfaWRlbnRpZmllcihscmVsLmF0dG5hbWVzW2ldKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQor CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiAqICIpOworCisJCQlhcHBlbmRTdHJp bmdJbmZvKCZjbWQsICIgRlJPTSAgJXNcbiIsCisJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVu dGlmaWVyKHJlbGluZm8tPnNjaGVtYW5hbWUsCisJCQkJCQkJCQkJCQkJCXJlbGluZm8tPnJlbG5h bWUpKTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIilcbiIpOworCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICJUTyBTVERPVVQiKTsKKwl9CiAJLyogUmVndWxh ciBvciBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIG5vIHJvdyBmaWx0ZXIgb3IgZ2VuZXJhdGVkIGNv bHVtbnMgKi8KLQlpZiAoKGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8IGxyZWwu cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQkmJiBxdWFsID09IE5JTCAm JiAhZ2VuY29sX3B1Ymxpc2hlZCkKKwllbHNlIGlmICgobHJlbC5yZWxraW5kID09IFJFTEtJTkRf UkVMQVRJT04gfHwKKwkJCSAgbHJlbC5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpICYmCisJCQkgcXVhbCA9PSBOSUwgJiYgIWdlbmNvbF9wdWJsaXNoZWQpCiAJewogCQlhcHBl bmRTdHJpbmdJbmZvKCZjbWQsICJDT1BZICVzIiwKLQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRl bnRpZmllcihscmVsLm5zcG5hbWUsIGxyZWwucmVsbmFtZSkpOworCQkJCQkJcXVvdGVfcXVhbGlm aWVkX2lkZW50aWZpZXIobHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUpKTsKIAogCQkvKiBJZiB0 aGUgdGFibGUgaGFzIGNvbHVtbnMsIHRoZW4gc3BlY2lmeSB0aGUgY29sdW1ucyAqLwogCQlpZiAo bHJlbC5uYXR0cykKQEAgLTExNTcsNiArMTI4OCw3IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVs KQogCX0KIAogCXJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5k YXRhLCAwLCBOVUxMKTsKKwllbG9nKExPRywgIlRhYmxlc3luYyB3b3JrZXI6IEV4ZWN1dGluZyBx dWVyeSB0byBnZXQgdGhlIGluaXRpYWwgc3luYyBkYXRhOlxuJXMiLCBjbWQuZGF0YSk7CiAJcGZy ZWUoY21kLmRhdGEpOwogCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfQ09QWV9PVVQpCiAJ CWVyZXBvcnQoRVJST1IsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRw dXQuYwppbmRleCBlMDE2ZjY0ZTBiMy4uN2QxNDgwM2QyZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMTc5NywxMiArMTc5NywxNyBAQCBwZ291 dHB1dF9zaHV0ZG93bihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgpCiAgKiB0byBzaWxlbnRs eSBjb250aW51ZSB0aGUgcmVwbGljYXRpb24gaW4gdGhlIGFic2VuY2Ugb2YgYSBtaXNzaW5nIHB1 YmxpY2F0aW9uLgogICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIHdlIGFsbG93IHRoZSB1c2Vy cyB0byBjcmVhdGUgcHVibGljYXRpb25zIGFmdGVyIHRoZXkKICAqIGhhdmUgc3BlY2lmaWVkIHRo ZSByZXF1aXJlZCBwdWJsaWNhdGlvbnMgYXQgdGhlIHRpbWUgb2YgcmVwbGljYXRpb24gc3RhcnQu CisgKiBXZSBhbHNvIGVuZm9yY2UgdGhhdCBubyBtb3JlIHRoYW4gb25lIHB1YmxpY2F0aW9uIGlu IHRoZSBsaXN0IG1heSBjb250YWluCisgKiBhbiBFWENFUFQgVEFCTEUgY2xhdXNlLiBVc2luZyBt dWx0aXBsZSBwdWJsaWNhdGlvbnMgd2l0aCBleGNlcHRpb25zIGlzCisgKiBjdXJyZW50bHkgdW5z dXBwb3J0ZWQgdG8gcHJldmVudCBub24tZGV0ZXJtaW5pc3RpYyBmaWx0ZXJpbmcgYmVoYXZpb3IK KyAqIGFjcm9zcyBvdmVybGFwcGluZyBwdWJsaWNhdGlvbiBzZXRzLgogICovCiBzdGF0aWMgTGlz dCAqCiBMb2FkUHVibGljYXRpb25zKExpc3QgKnB1Ym5hbWVzKQogewogCUxpc3QJICAgKnJlc3Vs dCA9IE5JTDsKIAlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpleGNlcHRfcHViX25hbWVzID0g TklMOwogCiAJZm9yZWFjaChsYywgcHVibmFtZXMpCiAJewpAQCAtMTgxMCw3ICsxODE1LDEzIEBA IExvYWRQdWJsaWNhdGlvbnMoTGlzdCAqcHVibmFtZXMpCiAJCVB1YmxpY2F0aW9uICpwdWIgPSBH ZXRQdWJsaWNhdGlvbkJ5TmFtZShwdWJuYW1lLCB0cnVlKTsKIAogCQlpZiAocHViKQorCQl7CiAJ CQlyZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwgcHViKTsKKworCQkJLyogQ2hlY2sgaWYgdGhpcyBw dWJsaWNhdGlvbiBoYXMgYW4gRVhDRVBUIFRBQkxFIGxpc3QuICovCisJCQlpZiAocHVibGljYXRp b25faGFzX2FueV9leGNlcHRpb24ocHViLT5vaWQpKQorCQkJCWV4Y2VwdF9wdWJfbmFtZXMgPSBs YXBwZW5kKGV4Y2VwdF9wdWJfbmFtZXMsIHBzdHJkdXAocHVibmFtZSkpOworCQl9CiAJCWVsc2UK IAkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5f UFJFUkVRVUlTSVRFX1NUQVRFKSwKQEAgLTE4MTksNiArMTgzMCwzNCBAQCBMb2FkUHVibGljYXRp b25zKExpc3QgKnB1Ym5hbWVzKQogCQkJCQllcnJoaW50KCJDcmVhdGUgdGhlIHB1YmxpY2F0aW9u IGlmIGl0IGRvZXMgbm90IGV4aXN0LiIpKTsKIAl9CiAKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBv bmUgcHVibGljYXRpb24gaGFzIGFuIEVYQ0VQVCBsaXN0LCB0aHJvdyBhbiBlcnJvciBsaXN0aW5n CisJICogYWxsIHRoZSBwcm9ibGVtYXRpYyBwdWJsaWNhdGlvbnMuCisJICovCisJaWYgKGxpc3Rf bGVuZ3RoKGV4Y2VwdF9wdWJfbmFtZXMpID4gMSkKKwl7CisJCVN0cmluZ0luZm9EYXRhIHB1Yl9u YW1lc19zdHI7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQlpbml0U3RyaW5nSW5mbygmcHVi X25hbWVzX3N0cik7CisKKwkJZm9yZWFjaF9wdHIoY2hhciwgbmFtZSwgZXhjZXB0X3B1Yl9uYW1l cykKKwkJeworCQkJaWYgKCFmaXJzdCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZwdWJf bmFtZXNfc3RyLCAiLCAiKTsKKworCQkJYXBwZW5kU3RyaW5nSW5mbygmcHViX25hbWVzX3N0ciwg IlwiJXNcIiIsIG5hbWUpOworCQkJZmlyc3QgPSBmYWxzZTsKKwkJfQorCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJy bXNnKCJjYW5ub3QgdXNlIG11bHRpcGxlIHB1YmxpY2F0aW9ucyB3aXRoIEVYQ0VQVCBUQUJMRSBs aXN0cyIpLAorCQkJCWVycmRldGFpbCgiVGhlIGZvbGxvd2luZyBwdWJsaWNhdGlvbnMgaGF2ZSBl eGNlcHRpb25zOiAlcy4iLAorCQkJCQkJICBwdWJfbmFtZXNfc3RyLmRhdGEpKTsKKwl9CisKKwls aXN0X2ZyZWVfZGVlcChleGNlcHRfcHViX25hbWVzKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBA IC0yMDQxLDYgKzIwODAsNjUgQEAgc2V0X3NjaGVtYV9zZW50X2luX3N0cmVhbWVkX3R4bihSZWxh dGlvblN5bmNFbnRyeSAqZW50cnksIFRyYW5zYWN0aW9uSWQgeGlkKQogCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjdHgpOwogfQogCisvKgorICogcHVibGljYXRpb25faGFzX2VmZmVjdGl2ZV90 YWJsZXMKKyAqCisgKiBDaGVja3MgaWYgdGhlIHB1YmxpY2F0aW9uIGhhcyBhbnkgZWZmZWN0aXZl IGRhdGEgaW4gYSBwYXJ0aXRpb24gdHJlZS4KKyAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBv bmUgbGVhZiBpcyBOT1QgZXhjbHVkZWQuCisgKi8KK3N0YXRpYyBib29sCitwdWJsaWNhdGlvbl9o YXNfZWZmZWN0aXZlX3RhYmxlcyhPaWQgcm9vdF9yZWxpZCwgT2lkIHB1YmlkKQoreworCUxpc3QJ ICAgKmFsbF9sZWF2ZXMgPSBOSUw7CisJYm9vbAkJYXRfbGVhc3Rfb25lX2FsbG93ZWQgPSBmYWxz ZTsKKworCS8qIEdldCBhbGwgbGVhZiByZWxhdGlvbnMgaW4gdGhlIGhpZXJhcmNoeSAqLworCWFs bF9sZWF2ZXMgPSBHZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxhdGlvbnMoTklMLAorCQkJCQkJCQkJ CQkJUFVCTElDQVRJT05fUEFSVF9MRUFGLAorCQkJCQkJCQkJCQkJcm9vdF9yZWxpZCk7CisKKwkv KgorCSAqIFRyYXZlcnNlIGxlYXZlcy4gSWYgd2UgZmluZCBldmVuIE9ORSBsZWFmIHRoYXQgaXMg bm90IGV4Y2x1ZGVkIGJ5IHRoZQorCSAqIHB1YmxpY2F0aW9uJ3MgRVhDRVBUIGxpc3QsIHRoZSB0 cmVlIGlzIGVmZmVjdGl2ZS4KKwkgKi8KKwlmb3JlYWNoX29pZChjdXJyX3JlbGlkLCBhbGxfbGVh dmVzKQorCXsKKwkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMo Y3Vycl9yZWxpZCk7CisJCWJvb2wJCXJlbGF0aW9uX2luX2V4Y2VwdCA9IGZhbHNlOworCisJCS8q IDEuIENoZWNrIGlmIHRoZSBsZWFmIGl0c2VsZiBpcyBhbiBleGNlcHRpb24gKi8KKwkJaWYgKGlz X3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHQoY3Vycl9yZWxpZCwgcHViaWQpKQorCQkJcmVsYXRp b25faW5fZXhjZXB0ID0gdHJ1ZTsKKwkJZWxzZQorCQl7CisJCQkvKiBDaGVjayBpZiBhbnkgYW5j ZXN0b3IgaXMgYW4gZXhjZXB0aW9uICovCisJCQlmb3JlYWNoX29pZChhbmNlc3RvciwgYW5jZXN0 b3JzKQorCQkJeworCQkJCWlmIChpc19yZWxpZF9wdWJsaXNoZWRfYXNfZXhjZXB0KGFuY2VzdG9y LCBwdWJpZCkpCisJCQkJeworCQkJCQlyZWxhdGlvbl9pbl9leGNlcHQgPSB0cnVlOworCQkJCQli cmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKworCQkv KgorCQkgKiBJZiB0aGlzIGxlYWYgaXMgbm90IGxpc3RlZCBpbiB0aGUgRVhDRVBUIGNsYXVzZSwg dGhlIHB1YmxpY2F0aW9uCisJCSAqIGVmZmVjdGl2ZWx5IGluY2x1ZGVzIGRhdGEgZnJvbSB0aGlz IHBhcnRpdGlvbiB0cmVlLgorCQkgKi8KKwkJaWYgKCFyZWxhdGlvbl9pbl9leGNlcHQpCisJCXsK KwkJCWF0X2xlYXN0X29uZV9hbGxvd2VkID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ bGlzdF9mcmVlKGFsbF9sZWF2ZXMpOworCXJldHVybiBhdF9sZWFzdF9vbmVfYWxsb3dlZDsKK30K KwogLyoKICAqIEZpbmQgb3IgY3JlYXRlIGVudHJ5IGluIHRoZSByZWxhdGlvbiBzY2hlbWEgY2Fj aGUuCiAgKgpAQCAtMjA4OCw3ICsyMTg2LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0 RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJaWYgKCFlbnRyeS0+cmVwbGljYXRlX3Zh bGlkKQogCXsKIAkJT2lkCQkJc2NoZW1hSWQgPSBnZXRfcmVsX25hbWVzcGFjZShyZWxpZCk7Ci0J CUxpc3QJICAgKnB1YmlkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlkKTsKKwkJTGlz dAkgICAqcHViaWRzID0gTklMOwogCiAJCS8qCiAJCSAqIFdlIGRvbid0IGFjcXVpcmUgYSBsb2Nr IG9uIHRoZSBuYW1lc3BhY2Ugc3lzdGVtIHRhYmxlIGFzIHdlIGJ1aWxkCkBAIC0yMTAyLDYgKzIy MDAsMTEgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24g cmVsYXRpb24pCiAJCWJvb2wJCWFtX3BhcnRpdGlvbiA9IGdldF9yZWxfcmVsaXNwYXJ0aXRpb24o cmVsaWQpOwogCQljaGFyCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHJlbGlkKTsKIAkJTGlz dAkgICAqcmVsX3B1YmxpY2F0aW9ucyA9IE5JTDsKKwkJYm9vbAkJcm9vdF9wdWJsaXNoZWRfdmlh X2V4Y2VwdHB1YiA9IGZhbHNlOworCQlPaWQJCQlyb290X2FuY2VzdG9yID0gSW52YWxpZE9pZDsK KwkJTGlzdAkgICAqYW5jZXN0b3JzID0gTklMOworCisJCUdldFJlbGF0aW9uUHVibGljYXRpb25z KHJlbGlkLCAmcHViaWRzLCBOVUxMKTsKIAogCQkvKiBSZWxvYWQgcHVibGljYXRpb25zIGlmIG5l ZWRlZCBiZWZvcmUgdXNlLiAqLwogCQlpZiAoIXB1YmxpY2F0aW9uc192YWxpZCkKQEAgLTIxODAs NiArMjI4MywzNCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxh dGlvbiByZWxhdGlvbikKIAkJZW50cnktPmVzdGF0ZSA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwogCisJCS8qCisJCSAqIEZv ciBwYXJ0aXRpb25zLCBwcmUtZGV0ZXJtaW5lIGlmIHRoZSB0b3AtbW9zdCBhbmNlc3RvciBpcyBj b3ZlcmVkCisJCSAqIGJ5IGFueSAnRk9SIEFMTCBUQUJMRVMnIHB1YmxpY2F0aW9uIHRoYXQgdXNl cworCQkgKiAncHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QnIGFuZCBhbiAnRVhDRVBUJyBjbGF1 c2UuCisJCSAqCisJCSAqIFRoaXMgcHJlLWNhbGN1bGF0aW9uIGlzIHZpdGFsIGZvciByZXNvbHZp bmcgb3ZlcmxhcCBjb25mbGljdHM6IGlmIGEKKwkJICogcGFydGl0aW9uIGlzIGV4Y2x1ZGVkIGds b2JhbGx5IHZpYSBhbiBFWENFUFQgY2xhdXNlIGJ1dCBpbmNsdWRlZAorCQkgKiBleHBsaWNpdGx5 IGVsc2V3aGVyZSAodGFibGUvc2NoZW1hIGxldmVsKSwgaXQgbXVzdCBzdGlsbCBiZSByb3V0ZWQK KwkJICogdmlhIHRoZSByb290IGlkZW50aXR5IGlmIHRoYXQgcm9vdCBpcyBwdWJsaXNoZWQuCisJ CSAqLworCQlpZiAoYW1fcGFydGl0aW9uKQorCQl7CisJCQlhbmNlc3RvcnMgPSBnZXRfcGFydGl0 aW9uX2FuY2VzdG9ycyhyZWxpZCk7CisJCQlyb290X2FuY2VzdG9yID0gbGxhc3Rfb2lkKGFuY2Vz dG9ycyk7CisKKwkJCWZvcmVhY2hfcHRyKFB1YmxpY2F0aW9uLCBwdWJpbmZvLCBkYXRhLT5wdWJs aWNhdGlvbnMpCisJCQl7CisJCQkJaWYgKHB1YmluZm8tPmFsbHRhYmxlcyAmJiBwdWJpbmZvLT5w dWJ2aWFyb290ICYmCisJCQkJCXB1YmxpY2F0aW9uX2hhc19hbnlfZXhjZXB0aW9uKHB1YmluZm8t Pm9pZCkgJiYKKwkJCQkJcHVibGljYXRpb25faGFzX2VmZmVjdGl2ZV90YWJsZXMocm9vdF9hbmNl c3RvciwKKwkJCQkJCQkJCQkJCQkgcHViaW5mby0+b2lkKSkKKwkJCQl7CisJCQkJCXJvb3RfcHVi bGlzaGVkX3ZpYV9leGNlcHRwdWIgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJ CX0KKwogCQkvKgogCQkgKiBCdWlsZCBwdWJsaWNhdGlvbiBjYWNoZS4gV2UgY2FuJ3QgdXNlIG9u ZSBwcm92aWRlZCBieSByZWxjYWNoZSBhcwogCQkgKiByZWxjYWNoZSBjb25zaWRlcnMgYWxsIHB1 YmxpY2F0aW9ucyB0aGF0IHRoZSBnaXZlbiByZWxhdGlvbiBpcyBpbiwKQEAgLTIyMDIsMjAgKzIz MzMsNDMgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24g cmVsYXRpb24pCiAJCQkvKgogCQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwgVEFCTEVTIHB1Ymxp Y2F0aW9uLCBwaWNrIHRoZSBwYXJ0aXRpb24KIAkJCSAqIHJvb3QgYW5kIHNldCB0aGUgYW5jZXN0 b3IgbGV2ZWwgYWNjb3JkaW5nbHkuCisJCQkgKgorCQkJICogSWYgdGhpcyBpcyBhIEZPUiBBTEwg VEFCTEVTIHB1YmxpY2F0aW9uIGFuZCBpdCBoYXMgYW4gRVhDRVBUCisJCQkgKiBUQUJMRSBsaXN0 OgorCQkJICoKKwkJCSAqIElmIHRoZSByZWxhdGlvbiBpcyBhIHBhcnRpdGlvbiwgY2hlY2sgd2hl dGhlciB0aGUgY3VycmVudAorCQkJICogcmVsYXRpb24gb3IgYW55IG9mIHRoZSBhbmNlc3RvcnMg aXMgaW5jbHVkZWQgaW4gdGhlIEVYQ0VQVAorCQkJICogVEFCTEUgbGlzdC4gSWYgc28sIGRvIG5v dCBwdWJsaXNoIHRoZSBjaGFuZ2UuIFRoaXMgaXMgZG9uZQorCQkJICogaXJyZXNwZWN0aXZlIG9m IHB1YnZpYXJvb3Qgc2V0dGluZy4KKwkJCSAqCisJCQkgKiAiRG8gbm90IHB1Ymxpc2ggdGhlIGNo YW5nZSIgaXMgYWNoaWV2ZWQgYnkga2VlcGluZyB0aGUgdmFyaWFibGUKKwkJCSAqICJwdWJsaXNo IiBzZXQgdG8gZmFsc2UuIEFuZCBldmVudHVhbGx5LCBlbnRyeS0+cHViYWN0aW9ucyB3aWxsCisJ CQkgKiByZW1haW4gYWxsIGZhbHNlIGZvciB0aGlzIHB1YmxpY2F0aW9uLgogCQkJICovCiAJCQlp ZiAocHViLT5hbGx0YWJsZXMpCiAJCQl7Ci0JCQkJcHVibGlzaCA9IHRydWU7Ci0JCQkJaWYgKHB1 Yi0+cHVidmlhcm9vdCAmJiBhbV9wYXJ0aXRpb24pCisJCQkJTGlzdAkgICAqZXhjZXB0cHViaWRz ID0gTklMOworCisJCQkJaWYgKGFtX3BhcnRpdGlvbikKIAkJCQl7Ci0JCQkJCUxpc3QJICAgKmFu Y2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKTsKKwkJCQkJZm9yZWFjaF9v aWQoYW5jZXN0b3IsIGFuY2VzdG9ycykKKwkJCQkJCUdldFJlbGF0aW9uUHVibGljYXRpb25zKGFu Y2VzdG9yLCBOVUxMLCAmZXhjZXB0cHViaWRzKTsKIAotCQkJCQlwdWJfcmVsaWQgPSBsbGFzdF9v aWQoYW5jZXN0b3JzKTsKLQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0X2xlbmd0aChhbmNlc3Rv cnMpOworCQkJCQlpZiAocHViLT5wdWJ2aWFyb290KQorCQkJCQl7CisJCQkJCQlwdWJfcmVsaWQg PSByb290X2FuY2VzdG9yOworCQkJCQkJYW5jZXN0b3JfbGV2ZWwgPSBsaXN0X2xlbmd0aChhbmNl c3RvcnMpOworCQkJCQl9CiAJCQkJfQotCQkJfQogCi0JCQlpZiAoIXB1Ymxpc2gpCisJCQkJR2V0 UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsaWQsIE5VTEwsICZleGNlcHRwdWJpZHMpOworCisJCQkJ aWYgKCFsaXN0X21lbWJlcl9vaWQoZXhjZXB0cHViaWRzLCBwdWItPm9pZCkpCisJCQkJCXB1Ymxp c2ggPSB0cnVlOworCisJCQkJbGlzdF9mcmVlKGV4Y2VwdHB1Ymlkcyk7CisJCQl9CisJCQllbHNl IGlmICghcHVibGlzaCkKIAkJCXsKIAkJCQlib29sCQlhbmNlc3Rvcl9wdWJsaXNoZWQgPSBmYWxz ZTsKIApAQCAtMjIyOSwxMiArMjM4MywxMCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXRE YXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQl7CiAJCQkJCU9pZAkJCWFuY2VzdG9y OwogCQkJCQlpbnQJCQlsZXZlbDsKLQkJCQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRp dGlvbl9hbmNlc3RvcnMocmVsaWQpOwogCiAJCQkJCWFuY2VzdG9yID0gR2V0VG9wTW9zdEFuY2Vz dG9ySW5QdWJsaWNhdGlvbihwdWItPm9pZCwKIAkJCQkJCQkJCQkJCQkJCSAgIGFuY2VzdG9ycywK IAkJCQkJCQkJCQkJCQkJCSAgICZsZXZlbCk7Ci0KIAkJCQkJaWYgKGFuY2VzdG9yICE9IEludmFs aWRPaWQpCiAJCQkJCXsKIAkJCQkJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IHRydWU7CkBAIC0yMjQ5 LDcgKzI0MDEsMjEgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVs YXRpb24gcmVsYXRpb24pCiAJCQkJaWYgKGxpc3RfbWVtYmVyX29pZChwdWJpZHMsIHB1Yi0+b2lk KSB8fAogCQkJCQlsaXN0X21lbWJlcl9vaWQoc2NoZW1hUHViaWRzLCBwdWItPm9pZCkgfHwKIAkJ CQkJYW5jZXN0b3JfcHVibGlzaGVkKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogSWYgdGhlIHJv b3QgYW5jZXN0b3IgaXMgY292ZXJlZCBieSBhIEZPUiBBTEwgVEFCTEVTCisJCQkJCSAqIEVYQ0VQ VCBwdWJsaWNhdGlvbiB0aGF0IHVzZXMKKwkJCQkJICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QsIHdlIG11c3QgcHVibGlzaCBjaGFuZ2VzIHZpYQorCQkJCQkgKiB0aGUgcm9vdCBpZGVudGl0 eS4KKwkJCQkJICovCisJCQkJCWlmIChyb290X3B1Ymxpc2hlZF92aWFfZXhjZXB0cHViKQorCQkJ CQl7CisJCQkJCQlwdWJfcmVsaWQgPSByb290X2FuY2VzdG9yOworCQkJCQkJYW5jZXN0b3JfbGV2 ZWwgPSBsaXN0X2xlbmd0aChhbmNlc3RvcnMpOworCQkJCQl9CisKIAkJCQkJcHVibGlzaCA9IHRy dWU7CisJCQkJfQogCQkJfQogCiAJCQkvKgpAQCAtMjI1OSw2ICsyNDI1LDkgQEAgZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkgKiBE b24ndCBwdWJsaXNoIGNoYW5nZXMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgYmVjYXVzZQogCQkJ ICogcHVibGlzaGluZyB0aG9zZSBvZiBpdHMgcGFydGl0aW9ucyBzdWZmaWNlcywgdW5sZXNzIHBh cnRpdGlvbgogCQkJICogY2hhbmdlcyB3b24ndCBiZSBwdWJsaXNoZWQgZHVlIHRvIHB1YnZpYXJv b3QgYmVpbmcgc2V0LgorCQkJICoKKwkJCSAqIElmIHRoZSByZWxhdGlvbiBpcyBwYXJ0IG9mIEVY Q0VQVCBUQUJMRSBsaXN0IG9mIGEgcHVibGljYXRpb24sCisJCQkgKiB0aGUgJ3B1Ymxpc2gnIHZh cmlhYmxlIGlzIGFscmVhZHkgc2V0IHRvIGZhbHNlLgogCQkJICovCiAJCQlpZiAocHVibGlzaCAm JgogCQkJCShyZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgfHwgcHViLT5wdWJ2 aWFyb290KSkKQEAgLTIyOTcsOCArMjQ2NiwxOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRw dXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQkJQXNzZXJ0KHB1Ymxpc2hfYXNf cmVsaWQgPT0gcHViX3JlbGlkKTsKIAkJCQl9CiAKLQkJCQkvKiBUcmFjayBwdWJsaWNhdGlvbnMg Zm9yIHRoaXMgYW5jZXN0b3IuICovCi0JCQkJcmVsX3B1YmxpY2F0aW9ucyA9IGxhcHBlbmQocmVs X3B1YmxpY2F0aW9ucywgcHViKTsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSB0b3AtbW9zdCBhbmNl c3RvciBpcyBjb3ZlcmVkIGJ5IGEgJ0ZPUiBBTEwgVEFCTEVTCisJCQkJICogRVhDRVBUJyBwdWJs aWNhdGlvbiwgd2UgZG9uJ3QgbmVlZCB0byB0cmFjayBwZXItcmVsYXRpb24KKwkJCQkgKiBtZXRh ZGF0YSBoZXJlLiBUaGVzZSBwdWJsaWNhdGlvbnMgYXBwbHkgZ2xvYmFsbHkgYW5kIGRvIG5vdAor CQkJCSAqIHN1cHBvcnQgcm93IGZpbHRlcnMgb3IgY29sdW1uIGxpc3RzIHRoYXQgd291bGQgcmVx dWlyZQorCQkJCSAqIHNwZWNpZmljIHRyYWNraW5nIGZvciB0aGlzIHBhcnRpdGlvbi4KKwkJCQkg Ki8KKwkJCQlpZiAoIXJvb3RfcHVibGlzaGVkX3ZpYV9leGNlcHRwdWIpCisJCQkJeworCQkJCQkv KiBUcmFjayBwdWJsaWNhdGlvbnMgZm9yIHRoaXMgYW5jZXN0b3IuICovCisJCQkJCXJlbF9wdWJs aWNhdGlvbnMgPSBsYXBwZW5kKHJlbF9wdWJsaWNhdGlvbnMsIHB1Yik7CisJCQkJfQogCQkJfQog CQl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDZiNjM0YzlmZmYxLi5kYzAy MWRiYjZjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCkBAIC01Nzg4LDcgKzU3ODgs OSBAQCBSZWxhdGlvbkdldEV4Y2x1c2lvbkluZm8oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIHZv aWQKIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1Ymxp Y2F0aW9uRGVzYyAqcHViZGVzYykKIHsKLQlMaXN0CSAgICpwdWJvaWRzOworCUxpc3QJICAgKnB1 Ym9pZHMgPSBOSUw7CisJTGlzdAkgICAqZXhjZXB0cHVib2lkcyA9IE5JTDsKKwlMaXN0CSAgICph bGx0YWJsZXNwdWJvaWRzOwogCUxpc3RDZWxsICAgKmxjOwogCU1lbW9yeUNvbnRleHQgb2xkY3h0 OwogCU9pZAkJCXNjaGVtYWlkOwpAQCAtNTgyNiw3ICs1ODI4LDcgQEAgUmVsYXRpb25CdWlsZFB1 YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNj KQogCXB1YmRlc2MtPmdlbmNvbHNfdmFsaWRfZm9yX2RlbGV0ZSA9IHRydWU7CiAKIAkvKiBGZXRj aCB0aGUgcHVibGljYXRpb24gbWVtYmVyc2hpcCBpbmZvLiAqLwotCXB1Ym9pZHMgPSBHZXRSZWxh dGlvblB1YmxpY2F0aW9ucyhyZWxpZCk7CisJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsaWQs ICZwdWJvaWRzLCAmZXhjZXB0cHVib2lkcyk7CiAJc2NoZW1haWQgPSBSZWxhdGlvbkdldE5hbWVz cGFjZShyZWxhdGlvbik7CiAJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lk cywgR2V0U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYWlkKSk7CiAKQEAgLTU4MzgsMTYgKzU4NDAs MjUgQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVi bGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlmb3JlYWNoKGxjLCBhbmNlc3RvcnMpCiAJCXsKIAkJ CU9pZAkJCWFuY2VzdG9yID0gbGZpcnN0X29pZChsYyk7CisJCQlMaXN0CSAgICphbmNlc3Rvcl9w dWJvaWRzID0gTklMOworCQkJTGlzdAkgICAqYW5jZXN0b3JfZXhjZXB0cHVib2lkcyA9IE5JTDsK IAotCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKLQkJCQkJCQkJ CQkJIEdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKSk7CisJCQlHZXRSZWxhdGlvblB1 YmxpY2F0aW9ucyhhbmNlc3RvciwgJmFuY2VzdG9yX3B1Ym9pZHMsCisJCQkJCQkJCQkmYW5jZXN0 b3JfZXhjZXB0cHVib2lkcyk7CisKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lk KHB1Ym9pZHMsIGFuY2VzdG9yX3B1Ym9pZHMpOwogCQkJc2NoZW1haWQgPSBnZXRfcmVsX25hbWVz cGFjZShhbmNlc3Rvcik7CiAJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJv aWRzLAogCQkJCQkJCQkJCQkgR2V0U2NoZW1hUHVibGljYXRpb25zKHNjaGVtYWlkKSk7CisJCQll eGNlcHRwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChleGNlcHRwdWJvaWRzLAorCQkJ CQkJCQkJCQkJICAgYW5jZXN0b3JfZXhjZXB0cHVib2lkcyk7CiAJCX0KIAl9Ci0JcHVib2lkcyA9 IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywgR2V0QWxsVGFibGVzUHVibGljYXRpb25z KCkpOwogCisJYWxsdGFibGVzcHVib2lkcyA9IEdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucygpOwor CXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCisJCQkJCQkJCQkgbGlz dF9kaWZmZXJlbmNlX29pZChhbGx0YWJsZXNwdWJvaWRzLAorCQkJCQkJCQkJCQkJCQkgZXhjZXB0 cHVib2lkcykpOwogCWZvcmVhY2gobGMsIHB1Ym9pZHMpCiAJewogCQlPaWQJCQlwdWJpZCA9IGxm aXJzdF9vaWQobGMpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggYjRiN2MyMzRlMjAuLmI0NmFjYmM5NmU1IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMKQEAgLTQ2MzUsOSArNDYzNSw1NSBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2 ZSAqZm91dCkKIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0 IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHViZ2VuY29sc190eXBlID0KIAkJCSooUFFnZXR2YWx1 ZShyZXMsIGksIGlfcHViZ2VuY29scykpOworCQlwdWJpbmZvW2ldLmV4Y2VwdF90YWJsZXMgPSAo U2ltcGxlUHRyTGlzdCkKKwkJeworCQkJTlVMTCwgTlVMTAorCQl9OwogCiAJCS8qIERlY2lkZSB3 aGV0aGVyIHdlIHdhbnQgdG8gZHVtcCBpdCAqLwogCQlzZWxlY3REdW1wYWJsZU9iamVjdCgmKHB1 YmluZm9baV0uZG9iaiksIGZvdXQpOworCisJCS8qCisJCSAqIEdldCB0aGUgbGlzdCBvZiB0YWJs ZXMgZm9yIHB1YmxpY2F0aW9ucyBzcGVjaWZpZWQgd2l0aCB0aGUgRVhDRVBUCisJCSAqIFRBQkxF IGNsYXVzZS4gVGhpcyBpcyBpbnRyb2R1Y2VkIGluIFBvc3RncmVTUUwgMTkuCisJCSAqCisJCSAq IEVYQ0VQVCBUQUJMRVMgaXMgcHJvY2Vzc2VkIGhlcmUgYW5kIG91dHB1dCBkaXJlY3RseSBieQor CQkgKiBkdW1wUHVibGljYXRpb24oKS4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIGFwcHJvYWNoIHVz ZWQgaW4KKwkJICogZHVtcFB1YmxpY2F0aW9uVGFibGUoKSBhbmQgZHVtcFB1YmxpY2F0aW9uTmFt ZXNwYWNlKCksIHNpbmNlIHRoYXQKKwkJICogYXBwcm9hY2ggd291bGQgcmVxdWlyZSBFWENFUFQg VEFCTEUgc3VwcG9ydCBmb3IgQUxURVIgUFVCTElDQVRJT04sCisJCSAqIHdoaWNoIGlzIG5vdCBj dXJyZW50bHkgc3VwcG9ydGVkLgorCQkgKi8KKwkJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0g MTkwMDAwKQorCQl7CisJCQlpbnQJCQludGJsczsKKwkJCVBHcmVzdWx0ICAgKnJlc190YmxzOwor CisJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5 LAorCQkJCQkJCSAgIlNFTEVDVCBwcnJlbGlkXG4iCisJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9n LnBnX3B1YmxpY2F0aW9uX3JlbFxuIgorCQkJCQkJCSAgIldIRVJFIHBycHViaWQgPSAldSBhbmQg cHJleGNlcHQiLAorCQkJCQkJCSAgcHViaW5mb1tpXS5kb2JqLmNhdElkLm9pZCk7CisKKwkJCXJl c190YmxzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBMRVNf T0spOworCisJCQludGJscyA9IFBRbnR1cGxlcyhyZXNfdGJscyk7CisKKwkJCWZvciAoaW50IGog PSAwOyBqIDwgbnRibHM7IGorKykKKwkJCXsKKwkJCQlPaWQJCQlwcnJlbGlkOworCQkJCVRhYmxl SW5mbyAgKnRiaW5mbzsKKworCQkJCXBycmVsaWQgPSBhdG9vaWQoUFFnZXR2YWx1ZShyZXNfdGJs cywgaiwgMCkpOworCisJCQkJdGJpbmZvID0gZmluZFRhYmxlQnlPaWQocHJyZWxpZCk7CisKKwkJ CQlpZiAodGJpbmZvICE9IE5VTEwpCisJCQkJCXNpbXBsZV9wdHJfbGlzdF9hcHBlbmQoJnB1Ymlu Zm9baV0uZXhjZXB0X3RhYmxlcywgdGJpbmZvKTsKKwkJCX0KKworCQkJUFFjbGVhcihyZXNfdGJs cyk7CisJCX0KIAl9CiAKIGNsZWFudXA6CkBAIC00Njc3LDcgKzQ3MjMsMjUgQEAgZHVtcFB1Ymxp Y2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9uSW5mbyAqcHViaW5mbykKIAlp ZiAocHViaW5mby0+cHViYWxsdGFibGVzICYmIHB1YmluZm8tPnB1YmFsbHNlcXVlbmNlcykKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBUQUJMRVMsIEFMTCBTRVFVRU5D RVMiKTsKIAllbHNlIGlmIChwdWJpbmZvLT5wdWJhbGx0YWJsZXMpCisJeworCQlpbnQJCQluX2V4 Y2VwdCA9IDA7CisKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBUQUJM RVMiKTsKKworCQkvKiBJbmNsdWRlIEVYQ0VQVCBUQUJMRSBjbGF1c2UgaWYgdGhlcmUgYXJlIGV4 Y2VwdF90YWJsZXMuICovCisJCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmNlbGwgPSBwdWJpbmZv LT5leGNlcHRfdGFibGVzLmhlYWQ7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0KQorCQl7CisJCQlU YWJsZUluZm8gICp0YmluZm8gPSAoVGFibGVJbmZvICopIGNlbGwtPnB0cjsKKworCQkJaWYgKCsr bl9leGNlcHQgPT0gMSkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBFWENFUFQg VEFCTEUgKCIpOworCQkJZWxzZQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCAi KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiT05MWSAlcyIsIGZtdFF1YWxpZmllZER1 bXBhYmxlKHRiaW5mbykpOworCQl9CisJCWlmIChuX2V4Y2VwdCA+IDApCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihxdWVyeSwgIikiKTsKKwl9CiAJZWxzZSBpZiAocHViaW5mby0+cHViYWxsc2Vx dWVuY2VzKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBGT1IgQUxMIFNFUVVFTkNF UyIpOwogCkBAIC00ODU3LDYgKzQ5MjEsNyBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZl ICpmb3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCiAJLyogQ29sbGVj dCBhbGwgcHVibGljYXRpb24gbWVtYmVyc2hpcCBpbmZvLiAqLwogCWlmIChmb3V0LT5yZW1vdGVW ZXJzaW9uID49IDE1MDAwMCkKKwl7CiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJ CQkJCSAiU0VMRUNUIHRhYmxlb2lkLCBvaWQsIHBycHViaWQsIHBycmVsaWQsICIKIAkJCQkJCQkg InBnX2NhdGFsb2cucGdfZ2V0X2V4cHIocHJxdWFsLCBwcnJlbGlkKSBBUyBwcnJlbHF1YWwsICIK QEAgLTQ4NjksNiArNDkzNCw5IEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQs IFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJCQkJCQkJICIgICAgICBXSEVS RSBhdHRyZWxpZCA9IHByLnBycmVsaWQgQU5EIGF0dG51bSA9IHByYXR0cnNbc10pXG4iCiAJCQkJ CQkJICIgIEVMU0UgTlVMTCBFTkQpIHByYXR0cnMgIgogCQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9n LnBnX3B1YmxpY2F0aW9uX3JlbCBwciIpOworCQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAx OTAwMDApCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBXSEVSRSBOT1QgcHIucHJl eGNlcHQiKTsKKwl9CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJ CQkgIlNFTEVDVCB0YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBwcnJlbGlkLCAiCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApp bmRleCA0YzRiMTRlNWZjNy4uZDE0MWViNjZkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjc2LDYgKzY3 Niw3IEBAIHR5cGVkZWYgc3RydWN0IF9QdWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJ0cnVuY2F0 ZTsKIAlib29sCQlwdWJ2aWFyb290OwogCVB1Ymxpc2hHZW5jb2xzVHlwZSBwdWJnZW5jb2xzX3R5 cGU7CisJU2ltcGxlUHRyTGlzdCBleGNlcHRfdGFibGVzOwogfSBQdWJsaWNhdGlvbkluZm87CiAK IC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGE4ZGNjMmI1Yzc1Li41NGVhZTU3N2M5 MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3Jj L2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTMxNzAsNiArMzE3MCwzNiBAQCBteSAl dGVzdHMgPSAoCiAJCWxpa2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAx LCB9LAogCX0sCiAKKwknQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjgnID0+IHsKKwkJY3JlYXRlX29y ZGVyID0+IDUwLAorCQljcmVhdGVfc3FsID0+CisJCSAgJ0NSRUFURSBQVUJMSUNBVElPTiBwdWI4 IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAoZHVtcF90ZXN0LnRlc3RfdGFibGUpOycsCisJCXJlZ2V4 cCA9PiBxci9eCisJCQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWI4IEZPUiBBTEwgVEFCTEVTIEVY Q0VQVCBUQUJMRSAoT05MWSBkdW1wX3Rlc3QudGVzdF90YWJsZSkgV0lUSCAocHVibGlzaCA9ICdp bnNlcnQsIHVwZGF0ZSwgZGVsZXRlLCB0cnVuY2F0ZScpO1xFCisJCQkveG0sCisJCWxpa2UgPT4g eyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAorCX0sCisKKwknQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1YjknID0+IHsKKwkJY3JlYXRlX29yZGVyID0+IDUwLAorCQljcmVhdGVf c3FsID0+CisJCSAgJ0NSRUFURSBQVUJMSUNBVElPTiBwdWI5IEZPUiBBTEwgVEFCTEVTIEVYQ0VQ VCBUQUJMRSAoZHVtcF90ZXN0LnRlc3RfdGFibGUsIGR1bXBfdGVzdC50ZXN0X3NlY29uZF90YWJs ZSk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjkgRk9S IEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChPTkxZIGR1bXBfdGVzdC50ZXN0X3RhYmxlLCBPTkxZ IGR1bXBfdGVzdC50ZXN0X3NlY29uZF90YWJsZSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHVw ZGF0ZSwgZGVsZXRlLCB0cnVuY2F0ZScpO1xFCisJCQkveG0sCisJCWxpa2UgPT4geyAlZnVsbF9y dW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAorCX0sCisKKwknQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1YjEwJyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA5MiwKKwkJY3JlYXRlX3NxbCA9Pgor CQkgICdDUkVBVEUgUFVCTElDQVRJT04gcHViMTAgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxF IChkdW1wX3Rlc3QudGVzdF9pbmhlcml0YW5jZV9wYXJlbnQpOycsCisJCXJlZ2V4cCA9PiBxci9e CisJCQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWIxMCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFC TEUgKE9OTFkgZHVtcF90ZXN0LnRlc3RfaW5oZXJpdGFuY2VfcGFyZW50LCBPTkxZIGR1bXBfdGVz dC50ZXN0X2luaGVyaXRhbmNlX2NoaWxkKSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRl LCBkZWxldGUsIHRydW5jYXRlJyk7XEUKKwkJCS94bSwKKwkJbGlrZSA9PiB7ICVmdWxsX3J1bnMs IHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCisJfSwKKwogCSdDUkVBVEUgU1VCU0NSSVBUSU9O IHN1YjEnID0+IHsKIAkJY3JlYXRlX29yZGVyID0+IDUwLAogCQljcmVhdGVfc3FsID0+ICdDUkVB VEUgU1VCU0NSSVBUSU9OIHN1YjEKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5j IGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggMzU4NGM0ZTE0MjguLjY0YjFiNmVmZWJl IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysgYi9zcmMvYmluL3BzcWwv ZGVzY3JpYmUuYwpAQCAtMzA3MywxNyArMzA3MywzNCBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWls cyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJCQkgICIgICAgICAgICAgV0hFUkUgYXR0 cmVsaWQgPSBwci5wcnJlbGlkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKVxuIgogCQkJCQkJCQkg ICIgICAgICAgIEVMU0UgTlVMTCBFTkQpICIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBn X3B1YmxpY2F0aW9uIHBcbiIKLQkJCQkJCQkJICAiICAgICBKT0lOIHBnX2NhdGFsb2cucGdfcHVi bGljYXRpb25fcmVsIHByIE9OIHAub2lkID0gcHIucHJwdWJpZFxuIgotCQkJCQkJCQkgICIgICAg IEpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMub2lkID0gcHIucHJyZWxpZFxuIgotCQkJ CQkJCQkgICJXSEVSRSBwci5wcnJlbGlkID0gJyVzJ1xuIgorCQkJCQkJCQkgICIJCUpPSU4gcGdf Y2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCisJ CQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgT04gYy5vaWQgPSBwci5wcnJl bGlkXG4iCisJCQkJCQkJCSAgIldIRVJFIHByLnBycmVsaWQgPSAnJXMnXG4iLAorCQkJCQkJCQkg IG9pZCwgb2lkLCBvaWQpOworCisJCQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTkwMDAwKQorCQkJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiIEFORCBOT1QgcHIucHJleGNlcHRcbiIpOwor CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkJICAiVU5JT05cbiIKIAkJCQkJ CQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKLQkJCQkJCQkJICAiICAgICAsIE5VTExcbiIKLQkJCQkJ CQkJICAiICAgICAsIE5VTExcbiIKKwkJCQkJCQkJICAiCQksIE5VTExcbiIKKwkJCQkJCQkJICAi CQksIE5VTExcbiIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uIHBc biIKLQkJCQkJCQkJICAiV0hFUkUgcC5wdWJhbGx0YWJsZXMgQU5EIHBnX2NhdGFsb2cucGdfcmVs YXRpb25faXNfcHVibGlzaGFibGUoJyVzJylcbiIKLQkJCQkJCQkJICAiT1JERVIgQlkgMTsiLAot CQkJCQkJCQkgIG9pZCwgb2lkLCBvaWQsIG9pZCk7CisJCQkJCQkJCSAgIldIRVJFIHAucHViYWxs dGFibGVzIEFORCBwZ19jYXRhbG9nLnBnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlKCclcycpXG4i LAorCQkJCQkJCQkgIG9pZCk7CisKKwkJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJ CQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkJCQkgICIgICAgIEFORCBOT1QgRVhJ U1RTIChcbiIKKwkJCQkJCQkJCSAgIgkJU0VMRUNUIDFcbiIKKwkJCQkJCQkJCSAgIgkJRlJPTSBw Z19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwclxuIgorCQkJCQkJCQkJICAiCQlKT0lOIHBn X2NhdGFsb2cucGdfY2xhc3MgcGNcbiIKKwkJCQkJCQkJCSAgIgkJT04gcHIucHJyZWxpZCA9IHBj Lm9pZFxuIgorCQkJCQkJCQkJICAiCQlXSEVSRSBwci5wcnJlbGlkID0gJyVzJyBBTkQgcHIucHJw dWJpZCA9IHAub2lkKVxuIiwKKwkJCQkJCQkJCSAgb2lkKTsKKworCQkJCWFwcGVuZFBRRXhwQnVm ZmVyU3RyKCZidWYsICJPUkRFUiBCWSAxOyIpOwogCQkJfQogCQkJZWxzZQogCQkJewpAQCAtMzEz NCw2ICszMTUxLDM1IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVt YW5hbWUsCiAJCQlQUWNsZWFyKHJlc3VsdCk7CiAJCX0KIAorCQkvKiBQcmludCBwdWJsaWNhdGlv bnMgd2hlcmUgdGhlIHRhYmxlIGlzIGluIHRoZSBFWENFUFQgY2xhdXNlICovCisJCWlmIChwc2V0 LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJeworCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJ CQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgorCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19w dWJsaWNhdGlvbiBwXG4iCisJCQkJCQkJICAiSk9JTiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9u X3JlbCBwciBPTiBwLm9pZCA9IHByLnBycHViaWRcbiIKKwkJCQkJCQkgICJXSEVSRSBwci5wcnJl bGlkID0gJyVzJ1xuIEFORCBwci5wcmV4Y2VwdFxuIgorCQkJCQkJCSAgIk9SREVSIEJZIDE7Iiwg b2lkKTsKKworCQkJcmVzdWx0ID0gUFNRTGV4ZWMoYnVmLmRhdGEpOworCQkJaWYgKCFyZXN1bHQp CisJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQllbHNlCisJCQkJdHVwbGVzID0gUFFudHVwbGVz KHJlc3VsdCk7CisKKwkJCWlmICh0dXBsZXMgPiAwKQorCQkJCXByaW50VGFibGVBZGRGb290ZXIo JmNvbnQsIF8oIkV4Y2VwdCBQdWJsaWNhdGlvbnM6IikpOworCisJCQkvKiBNaWdodCBiZSBhbiBl bXB0eSBzZXQgLSB0aGF0J3Mgb2sgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZXM7IGkrKykK KwkJCXsKKwkJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLCAiICAgIFwiJXNcIiIsIFBRZ2V0dmFs dWUocmVzdWx0LCBpLCAwKSk7CisKKwkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZjb250LCBidWYu ZGF0YSk7CisJCQl9CisJCQlQUWNsZWFyKHJlc3VsdCk7CisJCX0KKwogCQkvKgogCQkgKiBJZiB2 ZXJib3NlLCBwcmludCBOT1QgTlVMTCBjb25zdHJhaW50cy4KIAkJICovCkBAIC02NzUzLDggKzY3 OTksMTIgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCQkJ CQkgICIgICAgIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIHByXG4iCiAJCQkJCQkJICAi V0hFUkUgYy5yZWxuYW1lc3BhY2UgPSBuLm9pZFxuIgogCQkJCQkJCSAgIiAgQU5EIGMub2lkID0g cHIucHJyZWxpZFxuIgotCQkJCQkJCSAgIiAgQU5EIHByLnBycHViaWQgPSAnJXMnXG4iCi0JCQkJ CQkJICAiT1JERVIgQlkgMSwyIiwgcHViaWQpOworCQkJCQkJCSAgIiAgQU5EIHByLnBycHViaWQg PSAnJXMnXG4iLCBwdWJpZCk7CisKKwkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiICBBTkQgTk9UIHByLnByZXhjZXB0XG4iKTsKKwor CQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIk9SREVSIEJZIDEsMiIpOwogCQkJaWYgKCFhZGRG b290ZXJUb1B1YmxpY2F0aW9uRGVzYygmYnVmLCBfKCJUYWJsZXM6IiksIGZhbHNlLCAmY29udCkp CiAJCQkJZ290byBlcnJvcl9yZXR1cm47CiAKQEAgLTY3NzIsNiArNjgyMiwyMyBAQCBkZXNjcmli ZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJCQlnb3RvIGVycm9yX3JldHVy bjsKIAkJCX0KIAkJfQorCQllbHNlCisJCXsKKwkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAw MCkKKwkJCXsKKwkJCQkvKiBHZXQgdGFibGVzIGluIHRoZSBFWENFUFQgY2xhdXNlIGZvciB0aGlz IHB1YmxpY2F0aW9uICovCisJCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkJICAi U0VMRUNUIGNvbmNhdChjLnJlbG5hbWVzcGFjZTo6cmVnbmFtZXNwYWNlLCAnLicsIGMucmVsbmFt ZSlcbiIKKwkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiIKKwkJCQkJCQkJ ICAiICAgICBKT0lOIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIHByIE9OIGMub2lkID0g cHIucHJyZWxpZFxuIgorCQkJCQkJCQkgICJXSEVSRSBwci5wcnB1YmlkID0gJyVzJ1xuIgorCQkJ CQkJCQkgICIgIEFORCBwci5wcmV4Y2VwdFxuIgorCQkJCQkJCQkgICJPUkRFUiBCWSAxIiwgcHVi aWQpOworCQkJCWlmICghYWRkRm9vdGVyVG9QdWJsaWNhdGlvbkRlc2MoJmJ1ZiwgXygiRXhjZXB0 IHRhYmxlczoiKSwKKwkJCQkJCQkJCQkJCXRydWUsICZjb250KSkKKwkJCQkJZ290byBlcnJvcl9y ZXR1cm47CisJCQl9CisJCX0KIAogCQlwcmludFRhYmxlKCZjb250LCBwc2V0LnF1ZXJ5Rm91dCwg ZmFsc2UsIHBzZXQubG9nZmlsZSk7CiAJCXByaW50VGFibGVDbGVhbnVwKCZjb250KTsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWIt Y29tcGxldGUuaW4uYwppbmRleCA4YjkxYmMwMDA2Mi4uMzk0MDRlYTBmNjkgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNv bXBsZXRlLmluLmMKQEAgLTM2NjksNyArMzY2OSwxNyBAQCBtYXRjaF9wcmV2aW91c193b3Jkcyhp bnQgcGF0dGVybl9pZCwKIAllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04i LCBNYXRjaEFueSwgIkZPUiIsICJBTEwiKSkKIAkJQ09NUExFVEVfV0lUSCgiVEFCTEVTIiwgIlNF UVVFTkNFUyIpOwogCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1h dGNoQW55LCAiRk9SIiwgIkFMTCIsICJUQUJMRVMiKSkKLQkJQ09NUExFVEVfV0lUSCgiV0lUSCAo Iik7CisJCUNPTVBMRVRFX1dJVEgoIkVYQ0VQVCBUQUJMRSAoIiwgIldJVEggKCIpOworCWVsc2Ug aWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFM TCIsICJUQUJMRVMiLCAiRVhDRVBUIikpCisJCUNPTVBMRVRFX1dJVEgoIlRBQkxFICgiKTsKKwll bHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwgIkZPUiIs ICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIsICJUQUJMRSIpKQorCQlDT01QTEVURV9XSVRIKCIo Iik7CisJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnks ICJGT1IiLCAiQUxMIiwgIlRBQkxFUyIsICJFWENFUFQiLCAiVEFCTEUiLCAiKCIpKQorCQlDT01Q TEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9mb3JfbGlzdF9vZl90YWJsZXMpOworCWVsc2Ug aWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFM TCIsICJUQUJMRVMiLCAiRVhDRVBUIiwgIlRBQkxFIiwgIigiLCBNYXRjaEFueU4pICYmIGVuZHNf d2l0aChwcmV2X3dkLCAnLCcpKQorCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVSWShRdWVyeV9m b3JfbGlzdF9vZl90YWJsZXMpOworCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNB VElPTiIsIE1hdGNoQW55LCAiRk9SIiwgIkFMTCIsICJUQUJMRVMiLCAiRVhDRVBUIiwgIlRBQkxF IiwgIigiLCBNYXRjaEFueU4pICYmICFlbmRzX3dpdGgocHJldl93ZCwgJywnKSkKKwkJQ09NUExF VEVfV0lUSCgiKSIpOwogCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIs IE1hdGNoQW55LCAiRk9SIiwgIlRBQkxFUyIpKQogCQlDT01QTEVURV9XSVRIKCJJTiBTQ0hFTUEi KTsKIAllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwg IkZPUiIsICJUQUJMRSIsIE1hdGNoQW55KSAmJiAhZW5kc193aXRoKHByZXZfd2QsICcsJykpCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA4M2Y2NTAxZGYzOC4uYjZkYTIwMGZmZWUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTIzMzYsNiArMTIzMzYsMTMgQEAKICAgcHJvbmFtZSA9 PiAncGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUnLCBwcm92b2xhdGlsZSA9PiAncycsCiAgIHBy b3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MnLAogICBwcm9zcmMg PT4gJ3BnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlJyB9LAoreyBvaWQgPT4gJzkwMDInLCBkZXNj ciA9PiAnZ2V0IGVmZmVjdGl2ZSB0YWJsZXMgZm9yIHB1YmxpY2F0aW9uJywKKyAgcHJvbmFtZSA9 PiAncGdfZ2V0X3B1YmxpY2F0aW9uX2VmZmVjdGl2ZV90YWJsZXMnLCAgcHJvcm93cyA9PiAnMTAw MCcsCisgIHByb3JldHNldCA9PiAndCcsIHByb3ZvbGF0aWxlID0+ICdzJywKKyAgcHJvcmV0dHlw ZSA9PiAncmVjb3JkJywgcHJvYXJndHlwZXMgPT4gJ29pZCBfdGV4dCcsCisgIHByb2FsbGFyZ3R5 cGVzID0+ICd7b2lkLF90ZXh0LHRleHQsdGV4dH0nLCBwcm9hcmdtb2RlcyA9PiAne2ksaSxvLG99 JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tyb290X3JlbGlkLHB1Yl9uYW1lcyxzY2hlbWFuYW1lLHJl bG5hbWV9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfcHVibGljYXRpb25fZWZmZWN0aXZlX3RhYmxl cycgfSwKIAogIyBybHMKIHsgb2lkID0+ICczMjk4JywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uaAppbmRleCAzNjhiZWNjYTg5OS4uMTliNWI5NDIxZDMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmgKQEAgLTE0NiwxNCArMTQ2LDE2IEBAIHR5cGVkZWYgc3RydWN0IFB1 YmxpY2F0aW9uUmVsSW5mbwogCVJlbGF0aW9uCXJlbGF0aW9uOwogCU5vZGUJICAgKndoZXJlQ2xh dXNlOwogCUxpc3QJICAgKmNvbHVtbnM7CisJYm9vbAkJZXhjZXB0OwogfSBQdWJsaWNhdGlvblJl bEluZm87CiAKIGV4dGVybiBQdWJsaWNhdGlvbiAqR2V0UHVibGljYXRpb24oT2lkIHB1YmlkKTsK IGV4dGVybiBQdWJsaWNhdGlvbiAqR2V0UHVibGljYXRpb25CeU5hbWUoY29uc3QgY2hhciAqcHVi bmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKLWV4dGVybiBMaXN0ICpHZXRSZWxhdGlvblB1YmxpY2F0 aW9ucyhPaWQgcmVsaWQpOworZXh0ZXJuIGJvb2wgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lk IHJlbGlkLCBMaXN0ICoqcHViaWRzLCBMaXN0ICoqZXhjZXB0X3B1Ymlkcyk7CiAKIC8qLS0tLS0t LS0tCi0gKiBFeHBlY3RlZCB2YWx1ZXMgZm9yIHB1Yl9wYXJ0b3B0IHBhcmFtZXRlciBvZiBHZXRQ dWJsaWNhdGlvblJlbGF0aW9ucygpLAorICogRXhwZWN0ZWQgdmFsdWVzIGZvciBwdWJfcGFydG9w dCBwYXJhbWV0ZXIgb2YKKyAqIEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMoKSwgYW5k IEdldEFsbFB1YmxpY2F0aW9uRXhjZXB0VGFibGVzKCksCiAgKiB3aGljaCBhbGxvd3MgY2FsbGVy cyB0byBzcGVjaWZ5IHdoaWNoIHBhcnRpdGlvbnMgb2YgcGFydGl0aW9uZWQgdGFibGVzCiAgKiBt ZW50aW9uZWQgaW4gdGhlIHB1YmxpY2F0aW9uIHRoZXkgZXhwZWN0IHRvIHNlZS4KICAqCkBAIC0x NjgsOSArMTcwLDEyIEBAIHR5cGVkZWYgZW51bSBQdWJsaWNhdGlvblBhcnRPcHQKIAlQVUJMSUNB VElPTl9QQVJUX0FMTCwKIH0gUHVibGljYXRpb25QYXJ0T3B0OwogCi1leHRlcm4gTGlzdCAqR2V0 UHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHB1YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3Bh cnRvcHQpOworZXh0ZXJuIExpc3QgKkdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMoT2lk IHB1YmlkLAorCQkJCQkJCQkJCQkgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KTsKK2V4 dGVybiBMaXN0ICpHZXRBbGxQdWJsaWNhdGlvbkV4Y2VwdFRhYmxlcyhPaWQgcHViaWQsCisJCQkJ CQkJCQkJICAgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KTsKIGV4dGVybiBMaXN0ICpH ZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnModm9pZCk7Ci1leHRlcm4gTGlzdCAqR2V0QWxsUHVibGlj YXRpb25SZWxhdGlvbnMoY2hhciByZWxraW5kLCBib29sIHB1YnZpYXJvb3QpOworZXh0ZXJuIExp c3QgKkdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKFB1YmxpY2F0aW9uICpwdWIsIGNoYXIgcmVs a2luZCk7CiBleHRlcm4gTGlzdCAqR2V0UHVibGljYXRpb25TY2hlbWFzKE9pZCBwdWJpZCk7CiBl eHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVibGljYXRpb25zKE9pZCBzY2hlbWFpZCk7CiBleHRlcm4g TGlzdCAqR2V0U2NoZW1hUHVibGljYXRpb25SZWxhdGlvbnMoT2lkIHNjaGVtYWlkLApAQCAtMTg1 LDYgKzE5MCw4IEBAIGV4dGVybiBPaWQJR2V0VG9wTW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbihP aWQgcHVib2lkLCBMaXN0ICphbmNlc3RvcnMsCiAKIGV4dGVybiBib29sIGlzX3B1Ymxpc2hhYmxl X3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gYm9vbCBpc19zY2hlbWFfcHVibGljYXRp b24oT2lkIHB1YmlkKTsKK2V4dGVybiBib29sIGlzX3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHQo T2lkIHJlbGlkLCBPaWQgcHViaWQpOworZXh0ZXJuIGJvb2wgcHVibGljYXRpb25faGFzX2FueV9l eGNlcHRpb24oT2lkIHB1YmlkKTsKIGV4dGVybiBib29sIGNoZWNrX2FuZF9mZXRjaF9jb2x1bW5f bGlzdChQdWJsaWNhdGlvbiAqcHViLCBPaWQgcmVsaWQsCiAJCQkJCQkJCQkJTWVtb3J5Q29udGV4 dCBtY3h0LCBCaXRtYXBzZXQgKipjb2xzKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0 aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCBiL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgKaW5kZXggM2E4NzkwZTg0ODIuLjgw MmE4ZjU3NmMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u X3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgKQEAg LTMxLDYgKzMxLDcgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbl9yZWwsNjEwNixQdWJsaWNhdGlv blJlbFJlbGF0aW9uSWQpCiAJT2lkCQkJb2lkOwkJCS8qIG9pZCAqLwogCU9pZAkJCXBycHViaWQg QktJX0xPT0tVUChwZ19wdWJsaWNhdGlvbik7IC8qIE9pZCBvZiB0aGUgcHVibGljYXRpb24gKi8K IAlPaWQJCQlwcnJlbGlkIEJLSV9MT09LVVAocGdfY2xhc3MpOwkvKiBPaWQgb2YgdGhlIHJlbGF0 aW9uICovCisJYm9vbAkJcHJleGNlcHQgQktJX0RFRkFVTFQoZik7CS8qIHJlbGF0aW9uIGlzIG5v dCBwdWJsaXNoZWQgKi8KIAogI2lmZGVmCUNBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVu Z3RoIGZpZWxkcyBzdGFydCBoZXJlICovCiAJcGdfbm9kZV90cmVlIHBycXVhbDsJCS8qIHF1YWxp ZmljYXRpb25zICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggMGFlYzQ5YmRkMjIuLmIxZGUz NWRjM2UxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC00Mjk5LDkgKzQyOTksMTAgQEAgdHlw ZWRlZiBzdHJ1Y3QgQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10CiB0eXBlZGVmIHN0cnVjdCBQdWJs aWNhdGlvblRhYmxlCiB7CiAJTm9kZVRhZwkJdHlwZTsKLQlSYW5nZVZhciAgICpyZWxhdGlvbjsJ CS8qIHJlbGF0aW9uIHRvIGJlIHB1Ymxpc2hlZCAqLworCVJhbmdlVmFyICAgKnJlbGF0aW9uOwkJ LyogcHVibGljYXRpb24gcmVsYXRpb24gKi8KIAlOb2RlCSAgICp3aGVyZUNsYXVzZTsJLyogcXVh bGlmaWNhdGlvbnMgKi8KIAlMaXN0CSAgICpjb2x1bW5zOwkJLyogTGlzdCBvZiBjb2x1bW5zIGlu IGEgcHVibGljYXRpb24gdGFibGUgKi8KKwlib29sCQlleGNlcHQ7CQkJLyogVHJ1ZSBpZiBsaXN0 ZWQgaW4gdGhlIEVYQ0VQVCBjbGF1c2UgKi8KIH0gUHVibGljYXRpb25UYWJsZTsKIAogLyoKQEAg LTQzMTAsNiArNDMxMSw3IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uVGFibGUKIHR5cGVk ZWYgZW51bSBQdWJsaWNhdGlvbk9ialNwZWNUeXBlCiB7CiAJUFVCTElDQVRJT05PQkpfVEFCTEUs CQkvKiBBIHRhYmxlICovCisJUFVCTElDQVRJT05PQkpfRVhDRVBUX1RBQkxFLAkvKiBBIHRhYmxl IGluIHRoZSBFWENFUFQgY2xhdXNlICovCiAJUFVCTElDQVRJT05PQkpfVEFCTEVTX0lOX1NDSEVN QSwJLyogQWxsIHRhYmxlcyBpbiBzY2hlbWEgKi8KIAlQVUJMSUNBVElPTk9CSl9UQUJMRVNfSU5f Q1VSX1NDSEVNQSwJLyogQWxsIHRhYmxlcyBpbiBmaXJzdCBlbGVtZW50IG9mCiAJCQkJCQkJCQkJ CSAqIHNlYXJjaF9wYXRoICovCkBAIC00MzM4LDYgKzQzNDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBQ dWJsaWNhdGlvbkFsbE9ialNwZWMKIHsKIAlOb2RlVGFnCQl0eXBlOwogCVB1YmxpY2F0aW9uQWxs T2JqVHlwZSBwdWJvYmp0eXBlOwkvKiB0eXBlIG9mIHRoaXMgcHVibGljYXRpb24gb2JqZWN0ICov CisJTGlzdAkgICAqZXhjZXB0X3RhYmxlczsJLyogdGFibGVzIHNwZWNpZmllZCBpbiB0aGUgRVhD RVBUIGNsYXVzZSAqLwogCVBhcnNlTG9jCWxvY2F0aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9y IC0xIGlmIHVua25vd24gKi8KIH0gUHVibGljYXRpb25BbGxPYmpTcGVjOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IGMxMjg1ZmRkMWJjLi5jYWI5NzUz MTI3NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFs LmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgKQEAgLTIz NCw2ICsyMzQsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlckluZm8KIAlQ YXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICpzaGFyZWQ7CiB9IFBhcmFsbGVsQXBwbHlXb3JrZXJJ bmZvOwogCit0eXBlZGVmIHN0cnVjdCBRdWFsaWZpZWRSZWxhdGlvbk5hbWUKK3sKKwljaGFyCSAg ICpzY2hlbWFuYW1lOworCWNoYXIJICAgKnJlbG5hbWU7Cit9IFF1YWxpZmllZFJlbGF0aW9uTmFt ZTsKKwogLyogTWFpbiBtZW1vcnkgY29udGV4dCBmb3IgYXBwbHkgd29ya2VyLiBQZXJtYW5lbnQg ZHVyaW5nIHdvcmtlciBsaWZldGltZS4gKi8KIGV4dGVybiBQR0RMTElNUE9SVCBNZW1vcnlDb250 ZXh0IEFwcGx5Q29udGV4dDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9u Lm91dAppbmRleCA3ZmI0OWFhZjI5Yi4uNzcxMTIyYzE5Y2MgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0yMTMsMzMgKzIxMywxMDQgQEAgTm90LW51bGwg Y29uc3RyYWludHM6CiAgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYg ICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBu b25lICAgICAgICAgICAgICB8IGYKICgxIHJvdykKIAotRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7 Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRhYmxl LCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYTsKLUNSRUFURSBUQUJM RSB0ZXN0cHViX3RibDMgKGEgaW50KTsKLUNSRUFURSBUQUJMRSB0ZXN0cHViX3RibDNhIChiIHRl eHQpIElOSEVSSVRTICh0ZXN0cHViX3RibDMpOwogU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOwotQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3Ri bDM7Ci1DUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90 YmwzOworLS0gU3BlY2lmeSB0YWJsZWxpc3QgaW4gdGhlIEVYQ0VQVCBjbGF1c2Ugb2YgYSBGT1Ig QUxMIFRBQkxFUyBwdWJsaWNhdGlvbgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxs dGFibGVzX2V4Y2VwdHRhYmxlIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90 YmwxLCB0ZXN0cHViX3RibDIpOworXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFi bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUg ICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRhYmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJs MSIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsMiIKKworLS0gU3BlY2lmeSB0YWJsZSBpbiB0aGUg RVhDRVBUIGNsYXVzZSBvZiBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uCitDUkVBVEUgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxIEZPUiBBTEwgVEFCTEVT IEVYQ0VQVCAodGVzdHB1Yl90YmwxKTsKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2Vw dHRhYmxlMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJvb3QgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCBm ICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg bm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1 Yl90YmwxIgorCistLSBDaGVjayB0aGF0IHRoZSB0YWJsZSBkZXNjcmlwdGlvbiBzaG93cyB0aGUg cHVibGljYXRpb25zIHdoZXJlIGl0IGlzIGxpc3RlZAorLS0gaW4gdGhlIEVYQ0VQVCBjbGF1c2UK K1xkIHRlc3RwdWJfdGJsMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlICJwdWJs aWMudGVzdHB1Yl90YmwxIgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJs ZSB8ICAgICAgICAgICAgICAgICBEZWZhdWx0ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBpZCAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51 bGwgfCBuZXh0dmFsKCd0ZXN0cHViX3RibDFfaWRfc2VxJzo6cmVnY2xhc3MpCisgZGF0YSAgIHwg dGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHVi X3RibDFfcGtleSIgUFJJTUFSWSBLRVksIGJ0cmVlIChpZCkKK1B1YmxpY2F0aW9uczoKKyAgICAi dGVzdHB1Yl9mb3JhbGx0YWJsZXMiCitFeGNlcHQgUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHVi X2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZSIKKyAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhj ZXB0dGFibGUxIgorCiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworRFJPUCBUQUJMRSB0ZXN0 cHViX3RibDI7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHVi X2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSwgdGVz dHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUsIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2Vw dHRhYmxlMTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9wYXJlbnQgKGEgaW50KTsKK0NSRUFU RSBUQUJMRSB0ZXN0cHViX3RibF9jaGlsZCAoYiB0ZXh0KSBJTkhFUklUUyAodGVzdHB1Yl90Ymxf cGFyZW50KTsKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50OwogXGRScCsgdGVz dHB1YjMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCiAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K ICByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAg ICAgIHwgZgogVGFibGVzOgotICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgotICAgICJwdWJsaWMu dGVzdHB1Yl90YmwzYSIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAgICJwdWJs aWMudGVzdHB1Yl90YmxfcGFyZW50IgogCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjQgRk9S IFRBQkxFIE9OTFkgdGVzdHB1Yl90YmxfcGFyZW50OwogXGRScCsgdGVzdHB1YjQKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI0CiAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBz ZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5l cmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KICByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgogVGFibGVz OgotICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgorICAgICJwdWJsaWMudGVzdHB1Yl90YmxfcGFy ZW50IgogCi1EUk9QIFRBQkxFIHRlc3RwdWJfdGJsMywgdGVzdHB1Yl90YmwzYTsKLURST1AgUFVC TElDQVRJT04gdGVzdHB1YjMsIHRlc3RwdWI0OworLS0gTGlzdCB0aGUgcGFyZW50IHRhYmxlIGlu IHRoZSBFWENFUFQgY2xhdXNlICh3aXRob3V0IE9OTFkgb3IgJyonKQorQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWI1IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmxfcGFy ZW50KTsKK1xkUnArIHRlc3RwdWI1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8 IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBub25lICAgICAgICAgICAgICB8IGYKK0V4Y2VwdCB0YWJsZXM6CisgICAgInB1YmxpYy50ZXN0 cHViX3RibF9jaGlsZCIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKKworLS0gRVhD RVBUIHdpdGggJyonOiBsaXN0IHRoZSB0YWJsZSBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cyBpbiB0 aGUgRVhDRVBUIGNsYXVzZQorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBBTEwgVEFC TEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmxfcGFyZW50ICopOworXGRScCsgdGVzdHB1YjYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwg ZgorRXhjZXB0IHRhYmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAgICJw dWJsaWMudGVzdHB1Yl90YmxfcGFyZW50IgorCistLSBFWENFUFQgd2l0aCBPTkxZOiBsaXN0IHRo ZSB0YWJsZSBpbiB0aGUgRVhDRVBUIGNsYXVzZSwgYnV0IG5vdCBpdHMgZGVzY2VuZGFudHMKK0NS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNyBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKE9O TFkgdGVzdHB1Yl90YmxfcGFyZW50KTsKK1xkUnArIHRlc3RwdWI3CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2Vz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNv bHVtbnMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYKK0V4Y2VwdCB0YWJsZXM6 CisgICAgInB1YmxpYy50ZXN0cHViX3RibF9wYXJlbnQiCisKK1JFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsX3BhcmVudCwgdGVzdHB1Yl90YmxfY2hpbGQ7 CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWIzLCB0ZXN0cHViNCwgdGVzdHB1YjUsIHRlc3RwdWI2 LCB0ZXN0cHViNzsKIC0tLSBUZXN0cyBmb3IgcHVibGljYXRpb25zIHdpdGggU0VRVUVOQ0VTCiBD UkVBVEUgU0VRVUVOQ0UgcmVncmVzc19wdWJfc2VxMDsKIENSRUFURSBTRVFVRU5DRSBwdWJfdGVz dC5yZWdyZXNzX3B1Yl9zZXExOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVi bGljYXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4 IDg1YjAwYmQ2N2M4Li42MmJjODllZjUyMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwvcHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9u LnNxbApAQCAtMTA1LDIwICsxMDUsNDEgQEAgU0VMRUNUIHB1Ym5hbWUsIHB1YmFsbHRhYmxlcyBG Uk9NIHBnX3B1YmxpY2F0aW9uIFdIRVJFIHB1Ym5hbWUgPSAndGVzdHB1Yl9mb3JhbGwKIFxkKyB0 ZXN0cHViX3RibDIKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCiAKK1NFVCBjbGllbnRfbWlu X21lc3NhZ2VzID0gJ0VSUk9SJzsKKy0tIFNwZWNpZnkgdGFibGVsaXN0IGluIHRoZSBFWENFUFQg Y2xhdXNlIG9mIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24KK0NSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZSBGT1IgQUxMIFRBQkxFUyBFWENFUFQg VEFCTEUgKHRlc3RwdWJfdGJsMSwgdGVzdHB1Yl90YmwyKTsKK1xkUnArIHRlc3RwdWJfZm9yYWxs dGFibGVzX2V4Y2VwdHRhYmxlCistLSBTcGVjaWZ5IHRhYmxlIGluIHRoZSBFWENFUFQgY2xhdXNl IG9mIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24KK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEgRk9SIEFMTCBUQUJMRVMgRVhDRVBUICh0ZXN0 cHViX3RibDEpOworXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxCistLSBD aGVjayB0aGF0IHRoZSB0YWJsZSBkZXNjcmlwdGlvbiBzaG93cyB0aGUgcHVibGljYXRpb25zIHdo ZXJlIGl0IGlzIGxpc3RlZAorLS0gaW4gdGhlIEVYQ0VQVCBjbGF1c2UKK1xkIHRlc3RwdWJfdGJs MQorCitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7 Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRhYmxl LCB0ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYTsKK0RST1AgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9y c2NoZW1hLCB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hLCB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNl cHR0YWJsZSwgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxOwogCi1DUkVBVEUgVEFC TEUgdGVzdHB1Yl90YmwzIChhIGludCk7Ci1DUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmwzYSAoYiB0 ZXh0KSBJTkhFUklUUyAodGVzdHB1Yl90YmwzKTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9w YXJlbnQgKGEgaW50KTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9jaGlsZCAoYiB0ZXh0KSBJ TkhFUklUUyAodGVzdHB1Yl90YmxfcGFyZW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0g J0VSUk9SJzsKLUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90 YmwzOwotQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJf dGJsMzsKLVJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsX3BhcmVudDsKIFxkUnArIHRlc3RwdWIzCitDUkVB VEUgUFVCTElDQVRJT04gdGVzdHB1YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmxfcGFyZW50 OwogXGRScCsgdGVzdHB1YjQKKy0tIExpc3QgdGhlIHBhcmVudCB0YWJsZSBpbiB0aGUgRVhDRVBU IGNsYXVzZSAod2l0aG91dCBPTkxZIG9yICcqJykKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi NSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHRlc3RwdWJfdGJsX3BhcmVudCk7CitcZFJw KyB0ZXN0cHViNQorLS0gRVhDRVBUIHdpdGggJyonOiBsaXN0IHRoZSB0YWJsZSBhbmQgYWxsIGl0 cyBkZXNjZW5kYW50cyBpbiB0aGUgRVhDRVBUIGNsYXVzZQorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmxfcGFyZW50ICop OworXGRScCsgdGVzdHB1YjYKKy0tIEVYQ0VQVCB3aXRoIE9OTFk6IGxpc3QgdGhlIHRhYmxlIGlu IHRoZSBFWENFUFQgY2xhdXNlLCBidXQgbm90IGl0cyBkZXNjZW5kYW50cworQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWI3IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoT05MWSB0ZXN0cHVi X3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1YjcKIAotRFJPUCBUQUJMRSB0ZXN0cHViX3RibDMs IHRlc3RwdWJfdGJsM2E7Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWIzLCB0ZXN0cHViNDsKK1JF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsX3BhcmVudCwg dGVzdHB1Yl90YmxfY2hpbGQ7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWIzLCB0ZXN0cHViNCwg dGVzdHB1YjUsIHRlc3RwdWI2LCB0ZXN0cHViNzsKIAogLS0tIFRlc3RzIGZvciBwdWJsaWNhdGlv bnMgd2l0aCBTRVFVRU5DRVMKIENSRUFURSBTRVFVRU5DRSByZWdyZXNzX3B1Yl9zZXEwOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL21lc29uLmJ1aWxkCmluZGV4IGE0YzdkYmFmZjU5Li4wNzI4MmFhM2MxOCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0 L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZApAQCAtNDYsNiArNDYsNyBAQCB0ZXN0cyArPSB7CiAg ICAgICAndC8wMzRfdGVtcG9yYWwucGwnLAogICAgICAgJ3QvMDM1X2NvbmZsaWN0cy5wbCcsCiAg ICAgICAndC8wMzZfc2VxdWVuY2VzLnBsJywKKyAgICAgICd0LzAzN19yZXBfY2hhbmdlc19leGNl cHRfdGFibGUucGwnLAogICAgICAgJ3QvMTAwX2J1Z3MucGwnLAogICAgIF0sCiAgIH0sCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3Rh YmxlLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90 YWJsZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzYyNTYxMGMz ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzdfcmVwX2No YW5nZXNfZXhjZXB0X3RhYmxlLnBsCkBAIC0wLDAgKzEsMzU5IEBACisKKyMgQ29weXJpZ2h0IChj KSAyMDIxLTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgTG9n aWNhbCByZXBsaWNhdGlvbiB0ZXN0cyBmb3IgRVhDRVBUIFRBQkxFIHB1YmxpY2F0aW9ucwordXNl IHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwor dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlh bGl6ZSBwdWJsaXNoZXIgbm9kZQorbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxv d3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCisj IEluaXRpYWxpemUgc3Vic2NyaWJlciBub2RlCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXIt PnN0YXJ0OworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisjIEVYQ0VQVCBUQUJMRSB0ZXN0IGNhc2VzIGZvciBub3JtYWwgdGFibGVzCisjID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENyZWF0ZSBzY2hlbWFzIGFu ZCB0YWJsZXMgb24gcHVibGlzaGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgU0NIRU1BIHNjaDE7CisJQ1JFQVRFIFRBQkxFIHNjaDEudGFi MSBBUyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsMTApIEFTIGE7CispKTsKKworIyBDcmVhdGUg c2NoZW1hcyBhbmQgdGFibGVzIG9uIHN1YnNjcmliZXIKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgU0NIRU1BIHNjaDE7CisJQ1JFQVRFIFRB QkxFIHNjaDEudGFiMSAoYSBpbnQpOworKSk7CisKKyMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlv biwgYW5kIGNyZWF0ZSBhIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdCB0byBoZWxwIHdpdGgKKyMg bGF0ZXIgdGVzdHMuCitteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNv bm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9zY2hlbWEgRk9SIEFMTCBU QUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnRhYjEpIgorKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBnX2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0 aW9uX3Nsb3QoJ3Rlc3Rfc2xvdCcsICdwZ291dHB1dCcpIik7CisKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJfc2No ZW1hIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9z Y2hlbWEiCispOworCisjIFdhaXQgZm9yIGluaXRpYWwgdGFibGUgc3luYyB0byBmaW5pc2gKKyRu b2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1Ymxpc2hl ciwKKwkndGFwX3N1Yl9zY2hlbWEnKTsKKworIyBDaGVjayB0aGUgdGFibGUgZGF0YSBkb2VzIG5v dCBzeW5jIGZvciB0aGUgdGFibGVzIHNwZWNpZmllZCBpbiBFWENFUFQgY2xhdXNlCitteSAkcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBj b3VudCgqKSwgbWluKGEpLCBtYXgoYSkgRlJPTSBzY2gxLnRhYjEiKTsKK2lzKCRyZXN1bHQsIHFx KDB8fCksCisJJ2NoZWNrIHRoZXJlIGlzIG5vIGluaXRpYWwgZGF0YSBjb3BpZWQgZm9yIHRoZSB0 YWJsZXMgc3BlY2lmaWVkIGluIHRoZSBleGNlcHQgY2xhdXNlJyk7CisKKyMgSW5zZXJ0IHNvbWUg ZGF0YSBpbnRvIHRoZSB0YWJsZSBsaXN0ZWQgaW4gdGhlIEVYQ0VQVCBjbGF1c2UKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHNjaDEudGFiMSBW QUxVRVMoZ2VuZXJhdGVfc2VyaWVzKDExLDIwKSkiKTsKKworIyBWZXJpZnkgdGhhdCBkYXRhIGlu c2VydGVkIGludG8gYSB0YWJsZSBsaXN0ZWQgaW4gdGhlIEVYQ0VQVCBjbGF1c2UgaXMgbm90Cisj IHB1Ymxpc2hlZC4KKyRyZXN1bHQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJTRUxFQ1QgY291bnQoKikgPSAwIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9iaW5h cnlfY2hhbmdlcygndGVzdF9zbG90JywgTlVMTCwgTlVMTCwgJ3Byb3RvX3ZlcnNpb24nLCAnMScs ICdwdWJsaWNhdGlvbl9uYW1lcycsICd0YXBfc3ViX3NjaGVtYScpIgorKTsKK2lzKCRyZXN1bHQs IHFxKHQpLCAndmVyaWZ5IG5vIGNoYW5nZXMgZm9yIHRhYmxlIGxpc3RlZCBpbiB0aGUgRVhDRVBU IGNsYXVzZSBhcmUgcHJlc2VudCBpbiB0aGUgcmVwbGljYXRpb24gc2xvdCcpOworCisjIFZlcmlm eSB0aGF0IGRhdGEgaW5zZXJ0ZWQgaW50byBhIHRhYmxlIGxpc3RlZCBpbiB0aGUgRVhDRVBUIGNs YXVzZSBpcyBub3QKKyMgcmVwbGljYXRlZC4KKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgndGFwX3N1Yl9zY2hlbWEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKiksIG1pbihhKSwgbWF4KGEpIEZS T00gc2NoMS50YWIxIik7CitpcygkcmVzdWx0LCBxcSgwfHwpLCAnY2hlY2sgcmVwbGljYXRlZCBp bnNlcnRzIG9uIHN1YnNjcmliZXInKTsKKworIyBjbGVhbnVwCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJfc2NoZW1hIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlEUk9QIFBV QkxJQ0FUSU9OIHRhcF9wdWJfc2NoZW1hOworCVRSVU5DQVRFIFRBQkxFIHNjaDEudGFiMTsKKykp OworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJUUlVOQ0FURSBUQUJM RSBzY2gxLnRhYjEiKTsKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorIyBFWENFUFQgVEFCTEUgdGVzdCBjYXNlcyBmb3IgcGFydGl0aW9uZWQgdGFibGVz CisjIENoZWNrIGJlaGF2aW9yIG9mIEVYQ0VQVCBUQUJMRSB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290IG9uIGEKKyMgcGFydGl0aW9uZWQgdGFibGUgYW5kIGl0cyBwYXJ0aXRpb25zLgor IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBTZXR1cCBw YXJ0aXRpb25lZCB0YWJsZSBhbmQgcGFydGl0aW9ucyBvbiB0aGUgcHVibGlzaGVyIHRoYXQgbWFw IHRvIG5vcm1hbAorIyB0YWJsZXMgb24gdGhlIHN1YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSBzY2gxLnQxKGEgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoYSk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDEgUEFSVElU SU9OIE9GIHNjaDEudDEgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKwlDUkVBVEUgVEFC TEUgc2NoMS5wYXJ0MihhIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGEpOworCUNSRUFURSBUQUJM RSBzY2gxLnBhcnQyXzEgUEFSVElUSU9OIE9GIHNjaDEucGFydDIgRk9SIFZBTFVFUyBGUk9NICgx MDEpIFRPICgxNTApOworCUNSRUFURSBUQUJMRSBzY2gxLnBhcnQyXzIgUEFSVElUSU9OIE9GIHNj aDEucGFydDIgRk9SIFZBTFVFUyBGUk9NICgxNTEpIFRPICgyMDApOworCUFMVEVSIFRBQkxFIHNj aDEudDEgQVRUQUNIIFBBUlRJVElPTiBzY2gxLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoMTAxKSBU TyAoMjAwKTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVz JywgcXEoCisJQ1JFQVRFIFRBQkxFIHNjaDEudDEoYSBpbnQpOworCUNSRUFURSBUQUJMRSBzY2gx LnBhcnQxKGEgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2NoMS5wYXJ0MihhIGludCk7CisJQ1JFQVRF IFRBQkxFIHNjaDEucGFydDJfMShhIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDJfMihh IGludCk7CispKTsKKworIyBXaGVuIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlIGlzIGxpc3Rl ZCBpbiB0aGUgRVhDRVBUIGNsYXVzZSwKKyMgYWxsIGl0cyBwYXJ0aXRpb25zIGFyZSBub3QgcHVi bGlzaGVkIHdoZW4gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZS4KKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElP TiB0YXBfcHViX3BhcnQgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnQxKSBXSVRI IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKKwlJTlNFUlQgSU5UTyBzY2gx LnQxIFZBTFVFUyAoMSksICgxMDEpLCAoMTUxKTsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENP Tk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0Igor KTsKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1 Ymxpc2hlciwgJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2 YW5jZSgndGVzdF9zbG90JywgcGdfY3VycmVudF93YWxfbHNuKCkpOyIKKyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVF UyAoMiksICgxMDIpLCAoMTUyKSIpOworCisjIFZlcmlmeSB0aGF0IGRhdGEgaW5zZXJ0ZWQgaW50 byB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXMgbm90IHB1Ymxpc2hlZCB3aGVuIGl0CisjIGlzIGlu IHRoZSBFWENFUFQgY2xhdXNlIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVl LgorJHJlc3VsdCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBjb3VudCgqKSA9IDAgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2JpbmFyeV9jaGFuZ2Vz KCd0ZXN0X3Nsb3QnLCBOVUxMLCBOVUxMLCAncHJvdG9fdmVyc2lvbicsICcxJywgJ3B1YmxpY2F0 aW9uX25hbWVzJywgJ3RhcF9wdWJfcGFydCcpIgorKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7CisKKyMgQ2hlY2sgdGhhdCBubyByb3dzIGFyZSBy ZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS50MSIpOworaXMoJHJlc3VsdCwg cXEoKSwgJ2NoZWNrIHJvd3Mgb24gcm9vdCB0YWJsZScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDEi KTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDEnKTsK KworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUICogRlJPTSBzY2gxLnBhcnQyIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBv biB0YWJsZSBzY2gxLnBhcnQyJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0Ml8xIik7Citpcygk cmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQyXzEnKTsKKworJHJl c3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU ICogRlJPTSBzY2gxLnBhcnQyXzIiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9u IHRhYmxlIHNjaDEucGFydDJfMicpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0 OyIpOworCisjIFdoZW4gdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgaXMgbGlzdGVkIGluIHRo ZSBFWENFUFQgY2xhdXNlLAorIyBhbGwgaXRzIHBhcnRpdGlvbnMgYXJlIG5vdCBwdWJsaXNoZWQg d2hlbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUuCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1 Yl9wYXJ0IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoc2NoMS50MSkgV0lUSCAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0IENP Tk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0Igor KTsKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3B1 Ymxpc2hlciwgJ3RhcF9zdWJfcGFydCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2 YW5jZSgndGVzdF9zbG90JywgcGdfY3VycmVudF93YWxfbHNuKCkpOyIKKyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVF UyAoMyksICgxMDMpLCAoMTUzKTsiKTsKKworIyBWZXJpZnkgdGhhdCBkYXRhIGluc2VydGVkIGlu dG8gdGhlIHBhcnRpdGlvbmVkIHRhYmxlIGlzIG5vdCBwdWJsaXNoZWQgd2hlbiBpdAorIyBpcyBp biB0aGUgRVhDRVBUIGNsYXVzZSB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1 ZS4KKyRyZXN1bHQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJT RUxFQ1QgY291bnQoKikgPSAwIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9iaW5hcnlfY2hhbmdl cygndGVzdF9zbG90JywgTlVMTCwgTlVMTCwgJ3Byb3RvX3ZlcnNpb24nLCAnMScsICdwdWJsaWNh dGlvbl9uYW1lcycsICd0YXBfcHViX3BhcnQnKSIKKyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworCisjIENoZWNrIHRoYXQgbm8gcm93cyBhcmUg cmVwbGljYXRlZCB0byBzdWJzY3JpYmVyCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEudDEiKTsKK2lzKCRyZXN1bHQs IHFxKCksICdjaGVjayByb3dzIG9uIHJvb3QgdGFibGUnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQx Iik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQxJyk7 CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCAqIEZST00gc2NoMS5wYXJ0MiIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mg b24gdGFibGUgc2NoMS5wYXJ0MicpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDJfMSIpOworaXMo JHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFibGUgc2NoMS5wYXJ0Ml8xJyk7CisKKyRy ZXN1bHQgPQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIEZST00gc2NoMS5wYXJ0Ml8yIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBv biB0YWJsZSBzY2gxLnBhcnQyXzInKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFNVQlNDUklQVElPTiB0YXBfc3ViX3BhcnQiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFy dDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBz bG90X25hbWUgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJ3Rlc3Rfc2xvdCcsIHBn X2N1cnJlbnRfd2FsX2xzbigpKTsiCispOworCisjIFdoZW4gYSBjaGlsZCBwYXJ0aXRpb24gaXMg bGlzdGVkIGluIHRoZSBFWENFUFQgY2xhdXNlIHdpdGgKKyMgcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgPSB0cnVlLCB0aGUgcmVtYWluaW5nIHBhcnRpdGlvbnMgc2hvdWxkIHN0aWxsIGJlCisj IHJlcGxpY2F0ZWQuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBx cSgKKwlUUlVOQ0FURSBzY2gxLnQxOworCUlOU0VSVCBJTlRPIHNjaDEudDEgVkFMVUVTICgzKSwg KDEwMyksICgxNTMpOworCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9SIEFMTCBU QUJMRVMgRVhDRVBUIFRBQkxFIChzY2gxLnBhcnQyKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCA9IHRydWUpOworKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bv c3RncmVzJywgcXEoCisJVFJVTkNBVEUgc2NoMS50MTsKKwlDUkVBVEUgU1VCU0NSSVBUSU9OIHRh cF9zdWJfcGFydCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHRh cF9wdWJfcGFydDsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9u X3N5bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2xvdF9uYW1lIEZST00gcGdfcmVwbGlj YXRpb25fc2xvdF9hZHZhbmNlKCd0ZXN0X3Nsb3QnLCBwZ19jdXJyZW50X3dhbF9sc24oKSk7Igor KTsKKworIyBWZXJpZnkgdGhhdCBkYXRhIGluc2VydGVkIGludG8gdGhlIHBhcnRpdGlvbmVkIHRh YmxlIGlzIG5vdCBwdWJsaXNoZWQgd2hlbiBpdAorIyBpcyBpbiB0aGUgRVhDRVBUIGNsYXVzZSB3 aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZS4KKyRyZXN1bHQgPSAkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgY291bnQoKikgPSAwIEZS T00gcGdfbG9naWNhbF9zbG90X2dldF9iaW5hcnlfY2hhbmdlcygndGVzdF9zbG90JywgTlVMTCwg TlVMTCwgJ3Byb3RvX3ZlcnNpb24nLCAnMScsICdwdWJsaWNhdGlvbl9uYW1lcycsICd0YXBfcHVi X3BhcnQnKSIKKyk7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJf cGFydCcpOworCisjIENoZWNrIHRoYXQgdGFibGUgZGF0YSAxMDMgYW5kIDE1MyB3aGljaCBpcyBw cmVzZW50IGluIHNjaDEuc2NoMS5wYXJ0MiBzaG91bGQKKyMgbm90IGJlIHJlcGxpY2F0ZWQuCisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg KiBGUk9NIHNjaDEudDEiKTsKK2lzKCRyZXN1bHQsIHFxKDMpLCAnY2hlY2sgcm93cyBvbiByb290 IHRhYmxlJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0MSIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2No ZWNrIHJvd3Mgb24gdGFibGUgc2NoMS5wYXJ0MScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDIiKTsK K2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDInKTsKKwor JHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUICogRlJPTSBzY2gxLnBhcnQyXzEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dz IG9uIHRhYmxlIHNjaDEucGFydDJfMScpOworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDJfMiIpOwor aXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFibGUgc2NoMS5wYXJ0Ml8yJyk7CisK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJ T04gdGFwX3N1Yl9wYXJ0Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQ7Iik7CisKKyMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdCB3aGVuIGEgc3Vic2NyaXB0aW9u IGlzIHN1YnNjcmliaW5nIHRvIG11bHRpcGxlIHB1YmxpY2F0aW9ucworIyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBNdWx0aXBsZSBwdWJsaWNhdGlvbnMg d2l0aCBFWENFUFQgbGlzdHMgc2hvdWxkIHRocm93IGFuIGVycm9yCitteSAoJHN0ZG91dCwgJHN0 ZGVycik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAor CUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViMSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKHNjaDEu dGFiMSk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIyIEZPUiBBTEwgVEFCTEVTIEVYQ0VQ VCAoc2NoMS50MSk7CispKTsKKworKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9z dWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiB0YXBfcHViMSwg dGFwX3B1YjIiCispOworbGlrZSgKKwkkc3RkZXJyLAorCXFyL0VSUk9SOiAgcHVibGljYXRpb25z ICJ0YXBfcHViMSIsICJ0YXBfcHViMiIgYXJlIGRlZmluZWQgd2l0aCBFWENFUFQgVEFCTEUvLAor CSdzdWJzY3JpcHRpb24gd2l0aCBtdWx0aXBsZSBFWENFUFQgVEFCTEUgcHVibGljYXRpb24nKTsK KworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0RST1AgUFVCTElDQVRJ T04gdGFwX3B1YjInKTsKKworIyBBIHRhYmxlIGlzIGluIHRoZSBFWENFUFQgY2xhdXNlIG9mIGEg Rk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24sIGJ1dCBpcworIyBpbmNsdWRlZCBieSBhIEZPUiBU QUJMRSBwdWJsaWNhdGlvbi4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3Jl cycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViMiBGT1IgVEFCTEUgc2NoMS50YWIx OworCUlOU0VSVCBJTlRPIHNjaDEudGFiMSBWQUxVRVMoMSk7CispKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5F Q1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1YjEsIHRhcF9wdWIy IgorKTsKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2Rl X3B1Ymxpc2hlciwgJ3RhcF9zdWInKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoSU5TRVJUIElOVE8gc2NoMS50YWIxIFZBTFVFUygyKSkpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHNjaDEudGFi MSBPUkRFUiBCWSBhIik7CitpcyggJHJlc3VsdCwgcXEoMQorMiksCisJImNoZWNrIHJlcGxpY2F0 aW9uIG9mIGEgdGFibGUgaW4gdGhlIEVYQ0VQVCBjbGF1c2Ugb2Ygb25lIHB1YmxpY2F0aW9uIGJ1 dCBpbmNsdWRlZCBieSBhbm90aGVyIgorKTsKKworIyBBbHRlciBzdWJzY3JpcHRpb24gcmVmcmVz aCB0aHJvd3MgZXJyb3Igd2hlbiBzdWJzY3JpcHRpb24gaGFzIG11bHRpcGxlCisjIHB1YmxpY2F0 aW9ucyB3aXRoIEVYQ0VQVCBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bv c3RncmVzJywgcXEoCisJRFJPUCBQVUJMSUNBVElPTiB0YXBfcHViMjsKKwlDUkVBVEUgUFVCTElD QVRJT04gdGFwX3B1YjIgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIChzY2gxLnQxKTsKKykpOworCiso JHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0 Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFJFRlJFU0ggUFVCTElDQVRJT04i KTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9FUlJPUjogIHB1YmxpY2F0aW9ucyAidGFwX3B1YjEi LCAidGFwX3B1YjIiIGFyZSBkZWZpbmVkIHdpdGggRVhDRVBUIFRBQkxFLywKKwknc3Vic2NyaXB0 aW9uIHdpdGggbXVsdGlwbGUgRVhDRVBUIFRBQkxFIHB1YmxpY2F0aW9uJyk7CisKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1 YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0RST1AgUFVCTElD QVRJT04gdGFwX3B1YjEnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWIyJyk7CisKKyMgPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVzdCBtdWx0aS1wdWJsaWNhdGlvbiBzdWJzY3Jp cHRpb24gd2hlcmUgYSB0YWJsZSBsaXN0ZWQgaW4gdGhlCisjIEVYQ0VQVCBjbGF1c2Ugb2Ygb25l IHB1YmxpY2F0aW9uIGlzIGluY2x1ZGVkIGJ5IGFub3RoZXIgcHVibGljYXRpb24KKyMgPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCVRSVU5DQVRFIFRBQkxFIHNjaDEudDE7CisJ Q1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydDEgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRB QkxFIChzY2gxLnBhcnQyXzEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1 ZSk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydDIgRk9SIFRBQkxFIHNjaDEucGFy dDJfMSBXSEVSRSAoYSA+IDExMCkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0 cnVlKTsKKwlJTlNFUlQgSU5UTyBzY2gxLnQxIFZBTFVFUyAoMTEpLCAoMTExKSwgKDE2MSk7Cisp KTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlUUlVO Q0FURSBUQUJMRSBzY2gxLnQxLCBzY2gxLnBhcnQxLCBzY2gxLnBhcnQyLCBzY2gxLnBhcnQyXzEs IHNjaDEucGFydDJfMjsKKwlDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCBDT05ORUNU SU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydDEsIHRhcF9w dWJfcGFydDI7CispKTsKKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX3N1YnNjcmlwdGlvbl9z eW5jKCRub2RlX3B1Ymxpc2hlciwgJ3RhcF9zdWJfcGFydCcpOworCisjIFZlcmlmeSB0aGF0IHJv d3MgZm9yIHNjaDEucGFydDJfMSBhcmUgcmVwbGljYXRlZCBiZWNhdXNlIHRoZSB0YWJsZSwgYWx0 aG91Z2gKKyMgbGlzdGVkIGluIHRoZSBFWENFUFQgY2xhdXNlIG9mIHRhcF9wdWJfcGFydDEsIGlz IGluY2x1ZGVkIGJ5IHRhcF9wdWJfcGFydDIuCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjaDEudDEgT1JERVIgQlkgMSIp OworaXMoJHJlc3VsdCwgcXEoMTEKKzExMQorMTYxKSwgJ2luaXRpYWwgcm93cyByZXBsaWNhdGVk IHRvIHJvb3QgdGFibGUnKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDEyKSwgKDExMiksICgxNjIpOyIpOwor Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWJfcGFydCcpOworCisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg KiBGUk9NIHNjaDEudDEgT1JERVIgQlkgMSIpOworaXMoJHJlc3VsdCwgcXEoMTEKKzEyCisxMTEK KzExMgorMTYxCisxNjIpLCAnc3Vic2VxdWVudCByb3dzIHJlcGxpY2F0ZWQgdG8gcm9vdCB0YWJs ZScpOworCiskbm9kZV9wdWJsaXNoZXItPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7 CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDI0MTk0NTczNGVjLi45YzU3NmUzYzI2NyAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI0MjEsNiArMjQyMSw3IEBAIFFUTm9kZQog UVVFUllUWVBFCiBRdWFsQ29zdAogUXVhbEl0ZW0KK1F1YWxpZmllZFJlbGF0aW9uTmFtZQogUXVl cnkKIFF1ZXJ5Q29tcGxldGlvbgogUXVlcnlEZXNjCi0tIAoyLjQzLjAKCg== --000000000000fc2fb5064ae87070 Content-Type: application/octet-stream; name="v44-0002-Extended-tests-for-EXCEPT-TABLE-patch.patch" Content-Disposition: attachment; filename="v44-0002-Extended-tests-for-EXCEPT-TABLE-patch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlolwuyk1 RnJvbSAxNzJmMGE4MmMzMTM4MDM0ZGQyZmQ2MDFjNDE0ZmZjYWQwMTRkNTZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNCBGZWIgMjAyNiAxMjoyNzo1NyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjQ0 IDIvMl0gRXh0ZW5kZWQgdGVzdHMgZm9yIEVYQ0VQVCBUQUJMRSBwYXRjaAoKVGhpcyBwYXRjaCBj b250YWlucyBleHRyYSB0ZXN0cyBmb3IgRVhDRVBUIFRBQkxFIHBhdGNoLiBQdXJwb3NlIG9mIHRo aXMKdGVzdHMgdG8ga2VlcCB0cmFjayBvZiB0ZXN0cyB3aGljaCBvbmNlIGJyb2tlIHRoZSBwYXRj aC4KCkJhc2VkIG9uIGRpc2N1c3Npb24gaW4gZnV0dXJlIHdlIG1heSBwaWNrIHVwIHNvbWUgdGVz dCB0byBpbmNsdWRlIGluCnRoZSBtYWluIHBhdGNoLgotLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzEwMV90ZXN0LnBsIHwgMTM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmls ZSBjaGFuZ2VkLCAxMzYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzEwMV90ZXN0LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMTAxX3Rlc3QucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8xMDFfdGVzdC5w bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmU0ZGZjM2E3MTMKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8xMDFfdGVzdC5wbApAQCAt MCwwICsxLDEzNiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisjCisjIEV4dGVuZGVkIHRlc3QgZm9yIEVYQ0VQVCBUQUJMRQorCit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0 OjpNb3JlOworCisjIC0tLS0tLS0tCisjIFB1Ymxpc2hlcgorIyAtLS0tLS0tLQorbXkgJHB1Ymxp c2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiskcHVi bGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRwdWJsaXNoZXIt PmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxKAord2FsX2xldmVsID0gbG9naWNh bAorbG9nX21pbl9tZXNzYWdlcyA9IElORk8KK2xvZ19zdGF0ZW1lbnQgPSBhbGwKK3dhbF9yZWNl aXZlcl90aW1lb3V0ID0gMAord2FsX3NlbmRlcl90aW1lb3V0ID0gMAorKSk7CiskcHVibGlzaGVy LT5zdGFydDsKKworIyBDcmVhdGUgYSBwYXJ0aXRpb24gc3RydWN0dXJlOgorIyBzYzEudDEKKyMg ICAtIHNjMS5jaGlsZDEKKyMgICAgICAgLSBzYzEuY2hpbGQxXzEKKyMgICAgICAgLSBzYzEuY2hp bGQxXzIKKyMgICAtIHNjMS5jaGlsZDIKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxKAorCUNSRUFURSBTQ0hFTUEgc2MxOworCUNSRUFURSBUQUJMRSBzYzEudDEoaWQgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworCUNSRUFURSBUQUJMRSBzYzEuY2hpbGQxKGlkIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKwlDUkVBVEUgVEFCTEUgc2MxLmNoaWxkMiBQQVJU SVRJT04gT0Ygc2MxLnQxIEZPUiBWQUxVRVMgRlJPTSAoMTAxKSBUTyAoMjAwKTsKKwlDUkVBVEUg VEFCTEUgc2MxLmNoaWxkMV8xIFBBUlRJVElPTiBPRiBzYzEuY2hpbGQxIEZPUiBWQUxVRVMgRlJP TSAoMCkgVE8gKDUwKTsKKwlDUkVBVEUgVEFCTEUgc2MxLmNoaWxkMV8yIFBBUlRJVElPTiBPRiBz YzEuY2hpbGQxIEZPUiBWQUxVRVMgRlJPTSAoNTEpIFRPICgxMDApOworCUFMVEVSIFRBQkxFIHNj MS50MSBBVFRBQ0ggUEFSVElUSU9OIHNjMS5jaGlsZDEgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MTAwKTsKKykpOworCisjIC0tLS0tLS0tLS0KKyMgU3Vic2NyaWJlcgorIyAtLS0tLS0tLS0tCitt eSAkY29ubnN0ciA9ICRwdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Citt eSAkc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJl cicpOworJHN1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwor JHN1YnNjcmliZXItPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxKAord2FsX2xl dmVsID0gbG9naWNhbAorbG9nX21pbl9tZXNzYWdlcyA9IElORk8KK2xvZ19zdGF0ZW1lbnQgPSBh bGwKK3dhbF9yZWNlaXZlcl90aW1lb3V0ID0gMAord2FsX3NlbmRlcl90aW1lb3V0ID0gMAorKSk7 Ciskc3Vic2NyaWJlci0+c3RhcnQ7CisKKyRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3Rn cmVzJywgcSgKKwlDUkVBVEUgU0NIRU1BIHNjMTsKKwlDUkVBVEUgVEFCTEUgc2MxLnQxKGlkIGlu dCk7CisJQ1JFQVRFIFRBQkxFIHNjMS5jaGlsZDEoaWQgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2Mx LmNoaWxkMV8xKGlkIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjMS5jaGlsZDFfMihpZCBpbnQpOwor CUNSRUFURSBUQUJMRSBzYzEuY2hpbGQyKGlkIGludCk7CispKTsKKworIyBUZXN0IDE6CisjIENy ZWF0ZSB0d28gcHVibGljYXRpb25zLCBvbmUgd2l0aCAiQUxMIFRBQkxFUyBFWENFUFQiLCBvdGhl ciB3aXRoICJGT1IgVEFCTEUiCisjIFRhYmxlcyBzcGVjaWZpZWQgaW4gIkVYQ0VQVCIgYW5kICJG T1IgVEFCTEUiIGFyZSBwYXJ0IG9mIHNhbWUgcGFydGl0aW9uIHRyZWUKKyRwdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCUlOU0VSVCBJTlRPIHNjMS50MSBWQUxVRVMgKDEp LCAoNTEpLCAoMTAxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUyBF WENFUFQgVEFCTEUgKHNjMS5jaGlsZDIpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZSk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFIHNjMS5jaGlsZDFf MSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7Ciskc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBD T05ORUNUSU9OICckY29ubnN0cicgUFVCTElDQVRJT04gcHViMSwgcHViMjsiKTsKKworIyBDaGVj ayBmb3IgdGFibGVzeW5jCiskc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMo JHB1Ymxpc2hlciwgJ3N1YjEnKTsKK215ICRyZXN1bHQgPQorICAkc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjMS50MSBPUkRFUiBCWSBpZCIpOworaXMo ICRyZXN1bHQsIHFxKDEKKzUxKSwgJ2NoZWNrIGRhdGEgYWZ0ZXIgdGFibGVzeW5jJyk7CisKKyMg Q2hlY2sgZm9yIGluY3JlbWVudGFsIHN5bmMKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyBzYzEudDEgVkFMVUVTICgxKSwgKDUxKSwgKDEwMSkiKTsKKyRz dWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVyLCAnc3ViMScp OworJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIEZST00gc2MxLnQxIE9SREVSIEJZIGlkIik7CitpcyggJHJlc3VsdCwgcXEoMQorMQorNTEK KzUxKSwgJ2NoZWNrIGRhdGEgYWZ0ZXIgaW5jcmVtZW50YWwgc3luYycpOworCisjIGNsZWFudXAK KyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCURST1AgUFVCTElDQVRJ T04gcHViMSwgcHViMjsKKwlUUlVOQ0FURSBzYzEudDE7CispKTsKKyRzdWJzY3JpYmVyLT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywgcSgKKwlEUk9QIFNVQlNDUklQVElPTiBzdWIxOworCVRSVU5D QVRFIHNjMS50MTsKKykpOworCisjIFRlc3QgMjogQ3JlYXRlIHB1YmxpY2F0aW9uIHdpdGggRVhD RVBUIFRBQkxFIGxpc3QgaGF2aW5nIGFsbCBwYXJ0aXRpb25zIG9mCisjIHBhcnRpY3VsYXIgbGV2 ZWwKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCUlOU0VSVCBJTlRP IHNjMS50MSBWQUxVRVMgKDEpLCAoNTEpLCAoMTAxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHVi MSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjMS5jaGlsZDIsIHNjMS5jaGlsZDEpIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CispKTsKKyRzdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIxIENPTk5F Q1RJT04gJyRjb25uc3RyJyBQVUJMSUNBVElPTiBwdWIxOyIpOworCisjIENoZWNrIGZvciB0YWJs ZXN5bmMKKyRzdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVy LCAnc3ViMScpOworJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCAqIEZST00gc2MxLnQxIE9SREVSIEJZIGlkIik7CitpcygkcmVzdWx0LCBxcSgp LCAnY2hlY2sgZGF0YSBhZnRlciB0YWJsZXN5bmMnKTsKKworIyBDaGVjayBmb3IgaW5jcmVtZW50 YWwgc3luYworJHB1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRP IHNjMS50MSBWQUxVRVMgKDEpLCAoNTEpLCAoMTAxKSIpOworJHN1YnNjcmliZXItPndhaXRfZm9y X3N1YnNjcmlwdGlvbl9zeW5jKCRwdWJsaXNoZXIsICdzdWIxJyk7CiskcmVzdWx0ID0KKyAgJHN1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzYzEudDEgT1JE RVIgQlkgaWQiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayBkYXRhIGFmdGVyIGluY3JlbWVu dGFsIHN5bmMnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --000000000000fc2fb5064ae87070--