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 1wXa9L-003LRe-2x for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Jun 2026 07:48:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wXa9K-00EsJG-2H for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Jun 2026 07:48:26 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wXa9J-00EsJ6-2g for pgsql-hackers@lists.postgresql.org; Thu, 11 Jun 2026 07:48:26 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wXa9G-0000000291c-2eeo for pgsql-hackers@lists.postgresql.org; Thu, 11 Jun 2026 07:48:24 +0000 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-bed2195323cso1149894166b.1 for ; Thu, 11 Jun 2026 00:48:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781164099; cv=none; d=google.com; s=arc-20240605; b=LDfBE9McY0WCjoBIQDO2Vppqg+SgRyOvCVqdgDwS/SEWpZguzrxBSJsfFwvYt43J9p JQGctn5TFIBIU0LH794d/FykUDU/W9Yk8FEHpcAdIUQnvHlO7siCQNOu2pXx4tipaC44 rvJY8OBDz4vylUA8IcZMxv9ymbS8z6nhJV4gxyxLuwEEE1w6xeuuZzOqCVN+9W6+OMQT MX7zDMHqHhvMcbWp0QCF+Yx9z7wKxnKMV6xSion/zg3jtvMTjwSSGBZSegYbWw+SOPT7 EpXagxv4BuT11q0yJdgLcChnp5Xk7Z2+jD6Dv3VKIg/BO7zNzPKwFyICdbLycrXOMZFS GstQ== 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=c/coWcTU7FurCKgnz38Wfnr5606WzPsp53mxVGgpmQQ=; fh=jA1y0o48KsEr1ncbKeaqgkONBUmAh+4Dc8UAqTSPpFs=; b=Sfkj1A1Oh8FEYuWll7pTtRvHGX+SgJFNVHYQtf12DGQFTy6MPmPUnsdfSyWNuV3FMT x7hD9pAaNS6ckQxPjfP2rGMTyt1JjkmgY342MgqIivPJ9cDVuokQmee7I6LRiW62k9Og ML/2L89nPLjG5iU7OLsZr1oGVb2PLtSQJAUkz61/SfGGFLszXvwetGstbawX709647qR +9YIULZq68tnsJ/q3z4L0idbb4eQhupl94kauQbczDohHUdJ3cGHYGvPdLkl1eopov5j lFgyj5YdgFWB5mjkGS9mcVYwXyIq/Vg1RBBBDfvM8/ylSuF+GkRt21RRy8OGKqGtbe44 8tJw==; 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=enterprisedb.com; s=google; t=1781164099; x=1781768899; 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=c/coWcTU7FurCKgnz38Wfnr5606WzPsp53mxVGgpmQQ=; b=dxJxsVPrpLh7ZmVzX1lCnhZm2aMVv/jiCSUNgCQvTG5oclDF832ozlYxolDCRZfNwp 3dgqWi8ExLwV3QTPya3cC3YZFJ2c9d+QHr22YT5JfZIOe9vZUxo4BBJHg6g/7aMB0Tkd cc5Ibz0F2OlUyeIaJJwdBQcP64aocn1J6UPMtqbUk+PT4EgTcKdinB9XN8Ld6qVBlp6H P5m8ZTsLzsjkLmYPtmcQYzaLiSOoD4Hx5mcCHis/VSESLpzeXaH6s38OZQZ+M2VViBQG cs2HdyIi4D4E4K3oKK2rIw5JdBgIWHEEKOgaVIoxalgV00XD13SkbCQ58jGznn2PD6XA 9ydQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781164099; x=1781768899; 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=c/coWcTU7FurCKgnz38Wfnr5606WzPsp53mxVGgpmQQ=; b=Zdse4psBH7z8hSpRhWksxWKgxgzQY+GNe8mlWe7gydSiw7Vvexg4SLovnULE3CYFGW 7Ksu+a1FXoofARK6RPQU6QOBTBuG8MhLG1qqugBgbhWNcX2aNeINXy0Vvpi0xtq43Ioy pahwSgskSlMyNJRcnNQM9+cKDxYnlmXc3YBmj0THn/fzCZj7dfUHnTUoY/QRerjIIhus NPXEe8uBi3WQyJ3v5gMyDUhN7Z4MUaPw3/gCa/0PSg8zjkTpDFC2kFNP+QSRCufJPPay 0JoUX1OZbv21hn5InJDQ1HS/7C6AfoOBxctaNJPuIho8f2CBgbqCSvInHDGa/mA9PLzu NWnQ== X-Gm-Message-State: AOJu0YxjEoUFB3VjpxBQMJO+bNmZeLT0t2oEi6+ODPs60hWXVOsyPXcH cGn2U50h4VSZ7G9LN7lrcu7WuUsBIomR9U90ipS0KWtck319aQbabSMnirRvka8ZtjxVEx5GPy1 NaSmlvHhJDuhrjd4mLbahC/xshn/jiKH72PrAuiHF X-Gm-Gg: Acq92OEAhO1+1SUmO/6t5q5kDydVvcJg5dsuIJa5bSOD9FXxnqCFzMX2vqgY2UcDX1d 3caBkW7y9QDYCK7senxftmRAGH7on+OpUP2eW5rieZ4ovEvddDjjY1z+PX/REQn1yNJ04/szF17 ljy+URUsCOfNctX38+nZOns4/r5qSUy8aBFhgOrTXVSVNp+oQJlXFcFoHrn4+rY2KoowTxpyJeF SV+KUgt5aYFVdCyteRDfto7GBJ5o6xwUn4gefm6IoF6OsBtjGhVZuSnuTrktVAS83NV2I1EyZTi gvv0u0XCD5MSwmWvzPw= X-Received: by 2002:a17:907:1c02:b0:bdb:b76c:4dd0 with SMTP id a640c23a62f3a-bfc878115a9mr64620366b.40.1781164099419; Thu, 11 Jun 2026 00:48:19 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Akshay Joshi Date: Thu, 11 Jun 2026 13:18:07 +0530 X-Gm-Features: AVVi8Cc-5CRNZwvtI7aKV3bzB7iDOvcPqHUVkoysLIo_XAqNRMpFeEIMZiHyzOA Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Zsolt Parragi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000006f11340653f59505" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006f11340653f59505 Content-Type: multipart/alternative; boundary="0000000000006f11330653f59503" --0000000000006f11330653f59503 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jun 11, 2026 at 2:13=E2=80=AFAM Zsolt Parragi wrote: > Thanks for the update! The new version looks mostly good, I only found > one corner case that doesn't work, double quoted literals can still > get over-stripped: > > CREATE SCHEMA s; > CREATE TABLE s.p (id int, "s.weird" int) PARTITION BY RANGE (id); > CREATE TABLE s.pc PARTITION OF s.p > (CONSTRAINT chk CHECK ("s.weird" > 0)) FOR VALUES FROM (0) TO (100); > SELECT * FROM pg_get_table_ddl('s.pc', 'owner', 'false', > 'schema_qualified', 'false'); > Fixed the issue above. The v5 patch is ready for review/testing. --0000000000006f11330653f59503 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Thu, Jun 11, 202= 6 at 2:13=E2=80=AFAM Zsolt Parragi <zsolt.parragi@percona.com> wrote:
Thanks for the update! The new version lo= oks mostly good, I only found
one corner case that doesn't work, double quoted literals can still
get over-stripped:

CREATE SCHEMA s;
CREATE TABLE s.p (id int, "s.weird" int) PARTITION BY RANGE (id);=
CREATE TABLE s.pc PARTITION OF s.p
=C2=A0 =C2=A0 (CONSTRAINT chk CHECK ("s.weird" > 0)) FOR VALUE= S FROM (0) TO (100);
SELECT * FROM pg_get_table_ddl('s.pc', 'owner', 'false&= #39;,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0'schema_qualified', 'fals= e');

=C2=A0 Fixed the issue above. = The v5 patch is ready for review/testing.
=C2=A0
--0000000000006f11330653f59503-- --0000000000006f11340653f59505 Content-Type: application/octet-stream; name="v5-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v5-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mq973loc0 RnJvbSBkYzkwYzIyYmE5OWRkNDhjMjdlMDIyMzk1NDIxNWEzMjZlZTdiMzRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHY1XSBBZGQgcGdfZ2V0X3RhYmxlX2RkbCgpIHRvIHJlY29uc3RydWN0IENSRUFURSBUQUJM RQogc3RhdGVtZW50cwoKVGhlIGZ1bmN0aW9uIHJlY29uc3RydWN0cyB0aGUgQ1JFQVRFIFRBQkxF IHN0YXRlbWVudCBmb3IgYW4gb3JkaW5hcnkgb3IKcGFydGl0aW9uZWQgdGFibGUsIGZvbGxvd2Vk IGJ5IHRoZSBBTFRFUiBUQUJMRSAvIENSRUFURSBJTkRFWCAvCkNSRUFURSBSVUxFIC8gQ1JFQVRF IFNUQVRJU1RJQ1Mgc3RhdGVtZW50cyBuZWVkZWQgdG8gcmVzdG9yZSBpdHMgZnVsbApkZWZpbml0 aW9uLiAgRWFjaCBzdGF0ZW1lbnQgaXMgcmV0dXJuZWQgYXMgYSBzZXBhcmF0ZSByb3cuCgpTdXBw b3J0ZWQgcGVyLWNvbHVtbiBmZWF0dXJlczogZGF0YSB0eXBlIHdpdGggdHlwZSBtb2RpZmllcnMs IENPTExBVEUsClNUT1JBR0UsIENPTVBSRVNTSU9OIChwZ2x6IC8gbHo0KSwgR0VORVJBVEVEIEFM V0FZUyBBUyAoZXhwcikKU1RPUkVEL1ZJUlRVQUwsIEdFTkVSQVRFRCBBTFdBWVN8QlkgREVGQVVM VCBBUyBJREVOVElUWSAod2l0aCBzZXF1ZW5jZQpvcHRpb25zKSwgREVGQVVMVCwgTk9UIE5VTEws IGFuZCBwZXItY29sdW1uIGF0dG9wdGlvbnMgZW1pdHRlZCBhcwpBTFRFUiBDT0xVTU4gU0VUICgu Li4pLgoKU3VwcG9ydGVkIHRhYmxlLWxldmVsIGZlYXR1cmVzOiBVTkxPR0dFRCwgSU5IRVJJVFMs IFBBUlRJVElPTiBCWSAoUkFOR0UKLyBMSVNUIC8gSEFTSCBwYXJlbnRzKSwgUEFSVElUSU9OIE9G IHBhcmVudCBGT1IgVkFMVUVTIChGUk9NL1RPLCBXSVRICm1vZHVsdXMvcmVtYWluZGVyLCBERUZB VUxUKSwgVVNJTkcgdGFibGUgYWNjZXNzIG1ldGhvZCwgV0lUSAoocmVsb3B0aW9ucyksIFRBQkxF U1BBQ0UsIGFuZCBpbmxpbmUgQ0hFQ0sgY29uc3RyYWludHMgaW4gdGhlCkNSRUFURSBUQUJMRSBi b2R5LgoKU3VwcG9ydGVkIHN1Yi1vYmplY3RzIChyZS11c2luZyBleGlzdGluZyBkZXBhcnNlIGhl bHBlcnMgZnJvbQpydWxldXRpbHMuYyk6IGluZGV4ZXMgdmlhIHBnX2dldF9pbmRleGRlZl9zdHJp bmcsIGNvbnN0cmFpbnRzCihQUklNQVJZIEtFWSwgVU5JUVVFLCBGT1JFSUdOIEtFWSwgRVhDTFVE RSwgbmFtZWQgTk9UIE5VTEwpIHZpYQpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kLCBydWxl cyB2aWEgcGdfZ2V0X3J1bGVkZWYsIGV4dGVuZGVkCnN0YXRpc3RpY3MgdmlhIHBnX2dldF9zdGF0 aXN0aWNzb2JqZGVmX3N0cmluZywgUkVQTElDQSBJREVOVElUWQpOT1RISU5HL0ZVTEwvVVNJTkcg SU5ERVgsIEFMVEVSIFRBQkxFIEVOQUJMRS9GT1JDRSBST1cgTEVWRUwgU0VDVVJJVFksCmFuZCBj aGlsZC1sb2NhbCBERUZBVUxUIG92ZXJyaWRlcyBvbiBpbmhlcml0YW5jZS9wYXJ0aXRpb24gY2hp bGRyZW4uCgpEZWZhdWx0IG9taXNzaW9uIGNvbnZlbnRpb246IGV2ZXJ5IG9wdGlvbmFsIGNsYXVz ZSBpcyBkcm9wcGVkIHdoZW4gaXRzCnZhbHVlIGVxdWFscyB3aGF0IHRoZSBzeXN0ZW0gd291bGQg cmVhcHBseSBvbiByb3VuZC10cmlwLCBpbmNsdWRpbmcKdHlwZS1kZWZhdWx0IENPTExBVEUsIHBl ci10eXBlIFNUT1JBR0UsIHRoZSBhdXRvLWdlbmVyYXRlZCBpZGVudGl0eQpzZXF1ZW5jZSBuYW1l IGFuZCBwYXJhbWV0ZXIgZGVmYXVsdHMsIGhlYXAgYWNjZXNzIG1ldGhvZCwgZGVmYXVsdApSRVBM SUNBIElERU5USVRZLCBkaXNhYmxlZCBSTFMgdG9nZ2xlcywgZW1wdHkgcmVsb3B0aW9ucywgYW5k IHRoZQpkZWZhdWx0IHRhYmxlc3BhY2UuCgpBIHJlZ3Jlc3Npb24gdGVzdCB1bmRlciBzcmMvdGVz dC9yZWdyZXNzIGNvdmVycyBvcmRpbmFyeSB0YWJsZXMsCmlkZW50aXR5IChkZWZhdWx0IGFuZCBj dXN0b20gc2VxdWVuY2Ugb3B0aW9ucyksIGdlbmVyYXRlZCBjb2x1bW5zLApTVE9SQUdFL0NPTVBS RVNTSU9OLCBjb25zdHJhaW50cyAoQ0hFQ0svVU5JUVVFL0ZLIHdpdGggZGVmZXJyYWJsZSksCmZ1 bmN0aW9uYWwgYW5kIHBhcnRpYWwgaW5kZXhlcywgaW5oZXJpdGFuY2UgYW5kIHBhcnRpdGlvbmlu ZywKcGFydGl0aW9uIGNoaWxkcmVuIHdpdGggRk9SIFZBTFVFUyBGUk9NL1RPLCBXSVRIIG1vZHVs dXMvcmVtYWluZGVyLCBhbmQKREVGQVVMVCwgcnVsZXMsIGV4dGVuZGVkIHN0YXRpc3RpY3MsIFJM UyB0b2dnbGVzLCBSRVBMSUNBIElERU5USVRZLApVTkxPR0dFRCB3aXRoIHJlbG9wdGlvbnMsIHBl ci1jb2x1bW4gYXR0b3B0aW9ucywgY2hpbGQgREVGQVVMVApvdmVycmlkZXMsIHByZXR0eSBtb2Rl LCBvd25lcj1mYWxzZSwgYW5kIHRoZSBlcnJvciBwYXRocyBmb3Igdmlld3MsCnNlcXVlbmNlcywg TlVMTCwgdW5rbm93biBvcHRpb25zLCBhbmQgb2RkLXZhcmlhZGljIGFyZ3VtZW50IGNvdW50cy4K CkF1dGhvcjogQWtzaGF5IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2 aWV3ZWQtYnk6IE1hcmNvcyBQZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5 OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgotLS0KIGRvYy9zcmMv c2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sICAgICAgICAgICAgICB8ICAgNzkgKwogc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICAyNyArCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvZGRsdXRpbHMuYyAgICAgICAgICAgICAgfCAxODMwICsrKysrKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgICA3 ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oICAgICAgICAgICAgICB8ICAgIDEg KwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQgICAgIHwgIDc0MiAr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAg ICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbCAgICAgfCAg NDQwICsrKysKIDggZmlsZXMgY2hhbmdlZCwgMzEyNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9u KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRf dGFibGVfZGRsLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Bn X2dldF90YWJsZV9kZGwuc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1p bmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAppbmRleCAwMGY2NGY1 MGNlYi4uNmEzNGRlZDk2MjggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5m by5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sCkBAIC0zOTYxLDYg KzM5NjEsODUgQEAgYWNsICAgICAgfCB7cG9zdGdyZXM9YXJ3ZER4dG0vcG9zdGdyZXMsZm9vPXIv cG9zdGdyZXN9CiAgICAgICAgIDxsaXRlcmFsPlRBQkxFU1BBQ0U8L2xpdGVyYWw+LgogICAgICAg IDwvcGFyYT48L2VudHJ5PgogICAgICAgPC9yb3c+CisgICAgICA8cm93PgorICAgICAgIDxlbnRy eSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+Cisg ICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19nZXRfdGFibGVfZGRsPC9w cmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF90 YWJsZV9kZGw8L2Z1bmN0aW9uPgorICAgICAgICAoIDxwYXJhbWV0ZXI+dGFibGU8L3BhcmFtZXRl cj4gPHR5cGU+cmVnY2xhc3M8L3R5cGU+CisgICAgICAgIDxvcHRpb25hbD4sIDxsaXRlcmFsPlZB UklBRElDPC9saXRlcmFsPiA8cGFyYW1ldGVyPm9wdGlvbnM8L3BhcmFtZXRlcj4KKyAgICAgICAg PHR5cGU+dGV4dDwvdHlwZT4gPC9vcHRpb25hbD4gKQorICAgICAgICA8cmV0dXJudmFsdWU+c2V0 b2YgdGV4dDwvcmV0dXJudmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAg ICAgICBSZWNvbnN0cnVjdHMgdGhlIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gc3Rh dGVtZW50IGZvciB0aGUKKyAgICAgICAgc3BlY2lmaWVkIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVk IHRhYmxlLCBmb2xsb3dlZCBieSB0aGUKKyAgICAgICAgPGNvbW1hbmQ+QUxURVIgVEFCTEU8L2Nv bW1hbmQ+LCA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+LAorICAgICAgICA8Y29tbWFu ZD5DUkVBVEUgUlVMRTwvY29tbWFuZD4sIGFuZCA8Y29tbWFuZD5DUkVBVEUgU1RBVElTVElDUzwv Y29tbWFuZD4KKyAgICAgICAgc3RhdGVtZW50cyBuZWVkZWQgdG8gcmVjcmVhdGUgdGhlIHRhYmxl J3MgY29sdW1ucywgY29uc3RyYWludHMsCisgICAgICAgIGluZGV4ZXMsIHJ1bGVzLCBleHRlbmRl ZCBzdGF0aXN0aWNzLCBhbmQgcm93LWxldmVsIHNlY3VyaXR5IGZsYWdzLgorICAgICAgICBJbmhl cml0ZWQgY29sdW1ucyBhbmQgY29uc3RyYWludHMgYXJlIGVtaXR0ZWQgYnkgdGhlIHBhcmVudCB0 YWJsZSdzCisgICAgICAgIERETCBhbmQgYXJlIG5vdCBkdXBsaWNhdGVkIG9uIGluaGVyaXRhbmNl IGNoaWxkcmVuIG9yIHBhcnRpdGlvbnMuCisgICAgICAgIEVhY2ggc3RhdGVtZW50IGlzIHJldHVy bmVkIGFzIGEgc2VwYXJhdGUgcm93LgorICAgICAgICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJl IHN1cHBvcnRlZDoKKyAgICAgICAgPGxpdGVyYWw+cHJldHR5PC9saXRlcmFsPiAoYm9vbGVhbikg Zm9yIGZvcm1hdHRlZCBvdXRwdXQsCisgICAgICAgIDxsaXRlcmFsPm93bmVyPC9saXRlcmFsPiAo Ym9vbGVhbikgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgPGNvbW1hbmQ+QUxURVIgVEFCTEUgLi4u IE9XTkVSIFRPPC9jb21tYW5kPiBzdGF0ZW1lbnQsCisgICAgICAgIDxsaXRlcmFsPnRhYmxlc3Bh Y2U8L2xpdGVyYWw+IChib29sZWFuKSB0byBpbmNsdWRlIHRoZQorICAgICAgICA8bGl0ZXJhbD5U QUJMRVNQQUNFPC9saXRlcmFsPiBjbGF1c2Ugb24gdGhlCisgICAgICAgIDxjb21tYW5kPkNSRUFU RSBUQUJMRTwvY29tbWFuZD4gc3RhdGVtZW50LCBhbmQgYSBmYW1pbHkgb2YKKyAgICAgICAgPGxp dGVyYWw+aW5jbHVkZXNfPHJlcGxhY2VhYmxlPmNhdGVnb3J5PC9yZXBsYWNlYWJsZT48L2xpdGVy YWw+CisgICAgICAgIGJvb2xlYW5zIHRoYXQgZ2F0ZSBlbWlzc2lvbiBvZiBvcHRpb25hbCBzdWIt b2JqZWN0czoKKyAgICAgICAgPGxpdGVyYWw+aW5jbHVkZXNfaW5kZXhlczwvbGl0ZXJhbD4sCisg ICAgICAgIDxsaXRlcmFsPmluY2x1ZGVzX2NvbnN0cmFpbnRzPC9saXRlcmFsPiwKKyAgICAgICAg PGxpdGVyYWw+aW5jbHVkZXNfcnVsZXM8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5pbmNs dWRlc19zdGF0aXN0aWNzPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+aW5jbHVkZXNfdHJp Z2dlcnM8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5pbmNsdWRlc19wb2xpY2llczwvbGl0 ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmluY2x1ZGVzX3JsczwvbGl0ZXJhbD4gKHRoZQorICAg ICAgICA8Y29tbWFuZD5FTkFCTEU8L2NvbW1hbmQ+Lzxjb21tYW5kPkZPUkNFIFJPVyBMRVZFTCBT RUNVUklUWTwvY29tbWFuZD4KKyAgICAgICAgdG9nZ2xlcyksIGFuZAorICAgICAgICA8bGl0ZXJh bD5pbmNsdWRlc19yZXBsaWNhX2lkZW50aXR5PC9saXRlcmFsPi4gIEVhY2ggb2YgdGhlc2UKKyAg ICAgICAgZGVmYXVsdHMgdG8gPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4uICBUaGUKKyAgICAgICAg PGxpdGVyYWw+aW5jbHVkZXNfcGFydGl0aW9uPC9saXRlcmFsPiBvcHRpb24sIHdoaWNoIGRlZmF1 bHRzIHRvCisgICAgICAgIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPiwgY29udHJvbHMgd2hldGhl ciB0aGUgRERMIGZvciBwYXJ0aXRpb24KKyAgICAgICAgY2hpbGRyZW4gaXMgYXBwZW5kZWQgYWZ0 ZXIgYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxw YXJhPgorICAgICAgICBUaGUgPGxpdGVyYWw+c2NoZW1hX3F1YWxpZmllZDwvbGl0ZXJhbD4gb3B0 aW9uIChib29sZWFuLCBkZWZhdWx0CisgICAgICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+KSBj b250cm9scyB3aGV0aGVyIHRoZSB0YXJnZXQgdGFibGUncyBvd24KKyAgICAgICAgc2NoZW1hIGlz IGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgRERMLiAgV2hlbiBzZXQgdG8KKyAgICAgICAgPGxp dGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGUgdGFibGUgbmFtZSBpcyBlbWl0dGVkIHVucXVhbGlm aWVkCisgICAgICAgIGluIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IGFuZCBl dmVyeSBzdWJzZXF1ZW50CisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFPC9jb21tYW5kPiwg PGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRF IFJVTEU8L2NvbW1hbmQ+LCBhbmQKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8 L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFJlZmVyZW5jZXMgdG8KKyAgICAgICAgb2JqZWN0cyBpbiB0 aGUgc2FtZSBzY2hlbWEgYXMgdGhlIHRhcmdldCB0YWJsZSAoaW5oZXJpdGFuY2UKKyAgICAgICAg cGFyZW50cywgcGFydGl0aW9uIHBhcmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcywgYW5kIGFueQor ICAgICAgICBzYW1lLXNjaGVtYSBvYmplY3QgdGhlIGRlcGFyc2UgaGVscGVycyBoYXBwZW4gdG8g bWVudGlvbikgYXJlCisgICAgICAgIGFsc28gZW1pdHRlZCB1bnF1YWxpZmllZCwgc28gdGhlIHNj cmlwdCBjYW4gYmUgcmVwbGF5ZWQgdW5kZXIgYQorICAgICAgICBkaWZmZXJlbnQgPHZhcm5hbWU+ c2VhcmNoX3BhdGg8L3Zhcm5hbWU+IHRvIHJlY3JlYXRlIHRoZSB0YWJsZQorICAgICAgICBpbiBh bm90aGVyIHNjaGVtYS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2VzIChmb3IgZXhhbXBsZSBhCisg ICAgICAgIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEpIHJlbWFpbiBx dWFsaWZpZWQgZm9yCisgICAgICAgIGNvcnJlY3RuZXNzLgorICAgICAgIDwvcGFyYT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgQWxsIHRocmVlIGZvcm1zIG9mIDxjb21tYW5kPkNSRUFURSBUQUJM RTwvY29tbWFuZD4gYXJlIHN1cHBvcnRlZDoKKyAgICAgICAgdGhlIG9yZGluYXJ5IGNvbHVtbi1s aXN0IGZvcm0sIHRoZSB0eXBlZC10YWJsZSBmb3JtCisgICAgICAgICg8bGl0ZXJhbD5PRiA8cmVw bGFjZWFibGU+dHlwZV9uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+LCB3aXRoCisgICAgICAg IHBlci1jb2x1bW4gPGxpdGVyYWw+V0lUSCBPUFRJT05TPC9saXRlcmFsPiBvdmVycmlkZXMgZm9y IGxvY2FsCisgICAgICAgIGRlZmF1bHRzLCA8bGl0ZXJhbD5OT1QgTlVMTDwvbGl0ZXJhbD4sIGFu ZCA8bGl0ZXJhbD5DSEVDSzwvbGl0ZXJhbD4KKyAgICAgICAgY29uc3RyYWludHMpLCBhbmQgdGhl IDxsaXRlcmFsPlBBUlRJVElPTiBPRjwvbGl0ZXJhbD4gZm9ybS4KKyAgICAgICAgPGxpdGVyYWw+ VEVNUE9SQVJZPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+VU5MT0dHRUQ8L2xpdGVyYWw+CisgICAg ICAgIHBlcnNpc3RlbmNlIG1vZGVzIGFyZSBlbWl0dGVkIGZyb20KKyAgICAgICAgPHN0cnVjdGZp ZWxkPnJlbHBlcnNpc3RlbmNlPC9zdHJ1Y3RmaWVsZD4uICBGb3IgdGVtcG9yYXJ5IHRhYmxlcwor ICAgICAgICByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IHNlc3Npb24sIHRoZQorICAgICAgICA8 bGl0ZXJhbD5PTiBDT01NSVQgREVMRVRFIFJPV1M8L2xpdGVyYWw+IGFuZAorICAgICAgICA8bGl0 ZXJhbD5PTiBDT01NSVQgRFJPUDwvbGl0ZXJhbD4gY2xhdXNlcyBhcmUgZW1pdHRlZDsgdGhlIGRl ZmF1bHQKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIFBSRVNFUlZFIFJPV1M8L2xpdGVyYWw+ IGlzIG9taXR0ZWQuCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KICAgICAg PC90Ym9keT4KICAgICA8L3Rncm91cD4KICAgIDwvdGFibGU+CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jCmluZGV4IGEzM2UyMmU4ZTYxLi42YWE0MDFkOTQzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMKQEAgLTE5NTU4LDYgKzE5NTU4LDMzIEBAIHJlbW92ZV9vbl9jb21taXRfYWN0aW9uKE9p ZCByZWxpZCkKIAl9CiB9CiAKKy8qCisgKiBMb29rIHVwIHRoZSByZWdpc3RlcmVkIE9OIENPTU1J VCBhY3Rpb24gZm9yIGEgcmVsYXRpb24uCisgKgorICogUmV0dXJucyBPTkNPTU1JVF9OT09QIHdo ZW4gbm90aGluZyB3YXMgcmVnaXN0ZXJlZCwgd2hpY2ggYWxzbyBjb3ZlcnMKKyAqIHRlbXBvcmFy eSB0YWJsZXMgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IE9OIENPTU1JVCBQUkVTRVJWRSBST1dT CisgKiBiZWhhdmlvciAocmVnaXN0ZXJfb25fY29tbWl0X2FjdGlvbigpIHNraXBzIHRob3NlLCBz aW5jZSBubyBhY3Rpb24gaXMKKyAqIG5lZWRlZCBhdCBjb21taXQpLiAgRW50cmllcyBtYXJrZWQg Zm9yIGRlbGV0aW9uIGluIHRoZSBjdXJyZW50CisgKiB0cmFuc2FjdGlvbiBhcmUgaWdub3JlZC4K KyAqLworT25Db21taXRBY3Rpb24KK2dldF9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKK3sK KwlMaXN0Q2VsbCAgICpsOworCisJZm9yZWFjaChsLCBvbl9jb21taXRzKQorCXsKKwkJT25Db21t aXRJdGVtICpvYyA9IChPbkNvbW1pdEl0ZW0gKikgbGZpcnN0KGwpOworCisJCWlmIChvYy0+cmVs aWQgIT0gcmVsaWQpCisJCQljb250aW51ZTsKKwkJaWYgKG9jLT5kZWxldGluZ19zdWJpZCAhPSBJ bnZhbGlkU3ViVHJhbnNhY3Rpb25JZCkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gb2MtPm9uY29t bWl0OworCX0KKwlyZXR1cm4gT05DT01NSVRfTk9PUDsKK30KKwogLyoKICAqIFBlcmZvcm0gT04g Q09NTUlUIGFjdGlvbnMuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Rk bHV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwppbmRleCBmMzJmY2Q0 NTNlZi4uNTRhYmM3MjQ5YzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1 dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCkBAIC0yMSwxMiAr MjEsMjcgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1 cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNz L3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoX21lbWJlcnMu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Ri X3JvbGVfc2V0dGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0 aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIK KyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNt ZHMuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3ByczJsb2NrLmgiCisjaW5jbHVkZSAibm9kZXMvbm9k ZXMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAiY29tbW9u L3JlbHBhdGguaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCkBAIC04Nyw2ICsxMDIsMTA1IEBAIHN0 YXRpYyBEYXR1bSBwZ19nZXRfdGFibGVzcGFjZV9kZGxfc3JmKEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvLCBPaWQgdHNpZCwgYm9vbCBpCiBzdGF0aWMgTGlzdCAqcGdfZ2V0X2RhdGFiYXNlX2RkbF9p bnRlcm5hbChPaWQgZGJpZCwgYm9vbCBwcmV0dHksCiAJCQkJCQkJCQkJICBib29sIG5vX293bmVy LCBib29sIG5vX3RhYmxlc3BhY2UpOwogCisvKgorICogUGVyLWNvbHVtbiBjYWNoZSBvZiBsb2Nh bGx5LWRlY2xhcmVkIE5PVCBOVUxMIGNvbnN0cmFpbnRzLiAgQnVpbHQgb25jZQorICogYnkgY29s bGVjdF9sb2NhbF9ub3RfbnVsbCgpIGFuZCBjb25zdWx0ZWQgYnkgdGhlIGNvbHVtbi1lbWl0IGhl bHBlcnMKKyAqIGFuZCB0aGUgcG9zdC1DUkVBVEUgY29uc3RyYWludCBsb29wLiAgRW50cmllcyB3 aXRoIGNvbm9pZCA9PSBJbnZhbGlkT2lkCisgKiBtZWFuIHRoZSBjb2x1bW4gaGFzIG5vIGxvY2Fs IE5PVCBOVUxMIGNvbnN0cmFpbnQgcm93IGluIHBnX2NvbnN0cmFpbnQKKyAqICh0aGUgY29sdW1u IG1heSBzdGlsbCBoYXZlIGF0dG5vdG51bGw9dHJ1ZSBvbiBhIHByZS1QRy0xOC11cGdyYWRlZAor ICogY2F0YWxvZywgaW4gd2hpY2ggY2FzZSBlbWl0IHBsYWluIGlubGluZSBOT1QgTlVMTCkuCisg Ki8KK3R5cGVkZWYgc3RydWN0IExvY2FsTm90TnVsbEVudHJ5Cit7CisJT2lkCQkJY29ub2lkOwor CWNoYXIJICAgKm5hbWU7CisJYm9vbAkJaXNfYXV0bzsJCS8qIG1hdGNoZXMgIjx0YWJsZT5fPGNv bD5fbm90X251bGwiICovCisJYm9vbAkJbm9faW5oZXJpdDsKK30JCQlMb2NhbE5vdE51bGxFbnRy eTsKKworLyoKKyAqIFdvcmtpbmcgY29udGV4dCB0aHJlYWRlZCB0aHJvdWdoIHRoZSBwZXItcGFz cyBoZWxwZXJzIGJlbG93LiAgSW5wdXRzCisgKiAoY2FsbGVyLXByb3ZpZGVkIG9wdGlvbiBmbGFn cykgYXJlIGZpbGxlZCBpbiBvbmNlIGF0IHRoZSB0b3Agb2YKKyAqIHBnX2dldF90YWJsZV9kZGxf aW50ZXJuYWwgYW5kIHRyZWF0ZWQgYXMgcmVhZC1vbmx5IHRoZXJlYWZ0ZXIuICBEZXJpdmVkCisg KiBmaWVsZHMgKHF1YWxuYW1lLCBzY2hlbWFfcHJlZml4LCBubl9lbnRyaWVzLCBza2lwX25vdG51 bGxfb2lkcykgYXJlCisgKiBjb21wdXRlZCBvbmNlIGR1cmluZyBzZXR1cC4gIEVhY2ggcGFzcyBh cHBlbmRzIHRvIGN0eC0+YnVmIGFuZCBwdXNoZXMKKyAqIHRoZSBmaW5pc2hlZCBzdGF0ZW1lbnQg b250byBjdHgtPnN0YXRlbWVudHMgdmlhIGFwcGVuZF9zdG10KCkuCisgKi8KK3R5cGVkZWYgc3Ry dWN0IFRhYmxlRGRsQ29udGV4dAoreworCVJlbGF0aW9uCXJlbDsKKwlPaWQJCQlyZWxpZDsKKwli b29sCQlwcmV0dHk7CisJYm9vbAkJbm9fb3duZXI7CisJYm9vbAkJbm9fdGFibGVzcGFjZTsKKwli b29sCQlpbmNsdWRlX2luZGV4ZXM7CisJYm9vbAkJaW5jbHVkZV9jb25zdHJhaW50czsKKwlib29s CQlpbmNsdWRlX3J1bGVzOworCWJvb2wJCWluY2x1ZGVfc3RhdGlzdGljczsKKwlib29sCQlpbmNs dWRlX3RyaWdnZXJzOworCWJvb2wJCWluY2x1ZGVfcG9saWNpZXM7CisJYm9vbAkJaW5jbHVkZV9y bHM7CisJYm9vbAkJaW5jbHVkZV9yZXBsaWNhX2lkZW50aXR5OworCWJvb2wJCWluY2x1ZGVfcGFy dGl0aW9uOworCWJvb2wJCXNjaGVtYV9xdWFsaWZpZWQ7CisKKwkvKiBEZXJpdmVkIGR1cmluZyBz ZXR1cCAqLworCU9pZAkJCWJhc2VfbmFtZXNwYWNlOworCWNoYXIJICAgKnF1YWxuYW1lOworCWNo YXIJICAgKnNjaGVtYV9wcmVmaXg7CS8qIE5VTEwgd2hlbiBzY2hlbWFfcXVhbGlmaWVkICovCisJ aW50CQkJc2F2ZV9uZXN0bGV2ZWw7IC8qID49IDAgaWYgd2UgbmFycm93ZWQgc2VhcmNoX3BhdGgg Ki8KKwlMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllczsKKwlMaXN0CSAgICpza2lwX25vdG51 bGxfb2lkczsKKworCS8qIE11dGFibGUgd29ya2luZyBzdGF0ZSAqLworCVN0cmluZ0luZm9EYXRh IGJ1ZjsKKwlMaXN0CSAgICpzdGF0ZW1lbnRzOworfQkJCVRhYmxlRGRsQ29udGV4dDsKKworc3Rh dGljIExpc3QgKnBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoT2lkIHJlbGlkLCBib29sIHByZXR0 eSwKKwkJCQkJCQkJCSAgIGJvb2wgbm9fb3duZXIsIGJvb2wgbm9fdGFibGVzcGFjZSwKKwkJCQkJ CQkJCSAgIGJvb2wgaW5jbHVkZV9pbmRleGVzLAorCQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX2Nv bnN0cmFpbnRzLAorCQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX3J1bGVzLAorCQkJCQkJCQkJICAg Ym9vbCBpbmNsdWRlX3N0YXRpc3RpY3MsCisJCQkJCQkJCQkgICBib29sIGluY2x1ZGVfdHJpZ2dl cnMsCisJCQkJCQkJCQkgICBib29sIGluY2x1ZGVfcG9saWNpZXMsCisJCQkJCQkJCQkgICBib29s IGluY2x1ZGVfcmxzLAorCQkJCQkJCQkJICAgYm9vbCBpbmNsdWRlX3JlcGxpY2FfaWRlbnRpdHks CisJCQkJCQkJCQkgICBib29sIGluY2x1ZGVfcGFydGl0aW9uLAorCQkJCQkJCQkJICAgYm9vbCBz Y2hlbWFfcXVhbGlmaWVkKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9jb2x1bW5fZGVmcyhTdHJpbmdJ bmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHByZXR0eSwKKwkJCQkJCQkgICBib29sIGluY2x1 ZGVfY29uc3RyYWludHMsCisJCQkJCQkJICAgYm9vbCBzY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJ CSAgIExvY2FsTm90TnVsbEVudHJ5ICogbm5fZW50cmllcyk7CitzdGF0aWMgdm9pZCBhcHBlbmRf dHlwZWRfY29sdW1uX292ZXJyaWRlcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLAorCQkJ CQkJCQkJCSAgYm9vbCBwcmV0dHksIGJvb2wgaW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCQkJ CQkgIExvY2FsTm90TnVsbEVudHJ5ICogbm5fZW50cmllcyk7CitzdGF0aWMgdm9pZCBhcHBlbmRf aW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsCisJ CQkJCQkJCQkJCWJvb2wgcHJldHR5LCBib29sICpmaXJzdCk7CitzdGF0aWMgY2hhciAqZmluZF9h dHRyZGVmX3RleHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwKKwkJCQkJCQkgICBM aXN0ICoqZHBjb250ZXh0KTsKK3N0YXRpYyBjaGFyICpsb29rdXBfcXVhbGlmaWVkX3JlbG5hbWUo T2lkIHJlbGlkKTsKK3N0YXRpYyBjaGFyICpsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChPaWQgcmVs aWQsIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCSBPaWQgYmFzZV9uYW1lc3BhY2Up Oworc3RhdGljIGNoYXIgKnN0cmlwX3NjaGVtYV9wcmVmaXgoY29uc3QgY2hhciAqc3RtdCwgY29u c3QgY2hhciAqcHJlZml4KTsKK3N0YXRpYyBMb2NhbE5vdE51bGxFbnRyeSAqIGNvbGxlY3RfbG9j YWxfbm90X251bGwoUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkJICBMaXN0ICoqc2tpcF9vaWRz KTsKK3N0YXRpYyBMaXN0ICpnZXRfaW5oZXJpdGFuY2VfcGFyZW50cyhPaWQgcmVsaWQpOworCitz dGF0aWMgdm9pZCBhcHBlbmRfc3RtdChUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGljIHZv aWQgZW1pdF9jcmVhdGVfdGFibGVfc3RtdChUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGlj IHZvaWQgZW1pdF9vd25lcl9zdG10KFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9p ZCBlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7Citz dGF0aWMgdm9pZCBlbWl0X2F0dG9wdGlvbnMoVGFibGVEZGxDb250ZXh0ICogY3R4KTsKK3N0YXRp YyB2b2lkIGVtaXRfaW5kZXhlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGljIHZvaWQg ZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGljIHZv aWQgZW1pdF9ydWxlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGljIHZvaWQgZW1pdF9z dGF0aXN0aWNzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3JlcGxp Y2FfaWRlbnRpdHkoVGFibGVEZGxDb250ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcmxz X3RvZ2dsZXMoVGFibGVEZGxDb250ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcGFydGl0 aW9uX2NoaWxkcmVuKFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7CisKIAogLyoKICAqIHBhcnNlX2Rk bF9vcHRpb25zCkBAIC0xMTg1LDMgKzEyOTksMTcxOSBAQCBwZ19nZXRfZGF0YWJhc2VfZGRsKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKIAl9CiB9CisKKy8q CisgKiBnZXRfaW5oZXJpdGFuY2VfcGFyZW50cworICoJCVJldHVybiBhIExpc3Qgb2YgcGFyZW50 IE9JRHMgZm9yIHJlbGlkLCBvcmRlcmVkIGJ5IGluaHNlcW5vLgorICoKKyAqIGZpbmRfaW5oZXJp dGFuY2VfY2hpbGRyZW4oKSB3YWxrcyB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIChwYXJlbnQtPmNo aWxkcmVuKSwKKyAqIHNvIHdlIHNjYW4gcGdfaW5oZXJpdHMgZGlyZWN0bHkgaGVyZSB1c2luZyB0 aGUgKGluaHJlbGlkLCBpbmhzZXFubykgaW5kZXgsCisgKiB3aGljaCB5aWVsZHMgcm93cyBpbiB0 aGUgb3JkZXIgdGhleSBuZWVkIHRvIGFwcGVhciBpbiB0aGUgSU5IRVJJVFMgY2xhdXNlLgorICog UGFydGl0aW9uIGNoaWxkcmVuIGFsc28gaGF2ZSBhIHBnX2luaGVyaXRzIGVudHJ5LCBzbyBjYWxs ZXJzIG11c3Qgc2tpcCB0aGUKKyAqIElOSEVSSVRTIGNsYXVzZSB3aGVuIHJlbGlzcGFydGl0aW9u IGlzIHRydWUuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2dldF9pbmhlcml0YW5jZV9wYXJlbnRzKE9p ZCByZWxpZCkKK3sKKwlSZWxhdGlvbglpbmhlcml0c1JlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOwor CVNjYW5LZXlEYXRhIGtleTsKKwlIZWFwVHVwbGUJdHVwOworCUxpc3QJICAgKnBhcmVudHMgPSBO SUw7CisKKwlpbmhlcml0c1JlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19p bmhyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShyZWxpZCkpOworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oZXJpdHNS ZWwsIEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAm a2V5KTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNj YW4pKSkKKwl7CisJCUZvcm1fcGdfaW5oZXJpdHMgaW5oID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdF VFNUUlVDVCh0dXApOworCisJCXBhcmVudHMgPSBsYXBwZW5kX29pZChwYXJlbnRzLCBpbmgtPmlu aHBhcmVudCk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoaW5o ZXJpdHNSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcGFyZW50czsKK30KKworLyoK KyAqIGxvb2t1cF9xdWFsaWZpZWRfcmVsbmFtZQorICoJCVJldHVybiB0aGUgc2NoZW1hLXF1YWxp ZmllZCwgaWRlbnRpZmllci1xdW90ZWQgbmFtZSBvZiBhIHJlbGF0aW9uLAorICoJCW9yIHJhaXNl IEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCBpZiB0aGUgcmVsYXRpb24gaGFzIGRpc2FwcGVhcmVk LgorICoKKyAqIFJlcGxhY2VzIHRoZSB1bnNhZmUgcGF0dGVybgorICoJICBxdW90ZV9xdWFsaWZp ZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2Uob2lkKSks CisgKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9yZWxfbmFtZShvaWQpKQorICog d2hpY2ggZGVyZWZlcmVuY2VzIE5VTEwgd2hlbiBhIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24gaGFz IGRyb3BwZWQgdGhlCisgKiByZWZlcmVuY2VkIHJlbGF0aW9uIChvciBpdHMgc2NoZW1hKSBiZXR3 ZWVuIHdoZW4gd2UgY2FjaGVkIGl0cyBPSUQgYW5kCisgKiB3aGVuIHdlIGFzayB0aGUgc3lzY2Fj aGUgZm9yIGl0cyBuYW1lLiAgSG9sZGluZyBBY2Nlc3NTaGFyZUxvY2sgb24gYQorICogZGVwZW5k ZW50IHJlbGF0aW9uIG1ha2VzIHRoaXMgcmFjZSB2YW5pc2hpbmdseSB1bmxpa2VseSBpbiBwcmFj dGljZSwKKyAqIGJ1dCB3ZSBzdGlsbCBkZWZlbmQgYWdhaW5zdCBpdCBiZWNhdXNlIHRoZSBhbHRl cm5hdGl2ZSBpcyBhIFNJR1NFR1YuCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBw ZnJlZSgpaW5nIHRoZSByZXN1bHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2xvb2t1cF9xdWFsaWZp ZWRfcmVsbmFtZShPaWQgcmVsaWQpCit7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfY2xhc3Mg cmVsdHVwOworCWNoYXIJICAgKm5zcG5hbWU7CisJY2hhcgkgICAqcmVzdWx0OworCisJdHAgPSBT ZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInJlbGF0aW9uIHdpdGggT0lEICV1 IGRvZXMgbm90IGV4aXN0IiwgcmVsaWQpLAorCQkJCSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJl ZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsKKworCXJlbHR1cCA9IChGb3JtX3BnX2NsYXNz KSBHRVRTVFJVQ1QodHApOworCW5zcG5hbWUgPSBnZXRfbmFtZXNwYWNlX25hbWUocmVsdHVwLT5y ZWxuYW1lc3BhY2UpOworCWlmIChuc3BuYW1lID09IE5VTEwpCisJeworCQlPaWQJCQluc3BvaWQg PSByZWx0dXAtPnJlbG5hbWVzcGFjZTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHApOworCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJ IGVycm1zZygic2NoZW1hIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgbnNwb2lkKSwKKwkJ CQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7 CisJfQorCisJcmVzdWx0ID0gcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobnNwbmFtZSwgTmFt ZVN0cihyZWx0dXAtPnJlbG5hbWUpKTsKKworCXBmcmVlKG5zcG5hbWUpOworCVJlbGVhc2VTeXND YWNoZSh0cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogbG9va3VwX3JlbG5hbWVf Zm9yX2VtaXQKKyAqCQlSZXR1cm4gZWl0aGVyIHRoZSBzY2hlbWEtcXVhbGlmaWVkIG9yIHRoZSBi YXJlIHF1b3RlZCBuYW1lIG9mIGEKKyAqCQlyZWxhdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBzY2hl bWFfcXVhbGlmaWVkIGZsYWcuCisgKgorICogV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIHRydWUg dGhpcyBpcyBpZGVudGljYWwgdG8KKyAqIGxvb2t1cF9xdWFsaWZpZWRfcmVsbmFtZS4gIFdoZW4g ZmFsc2UsIHRoZSBiYXJlIHJlbG5hbWUgaXMgcmV0dXJuZWQKKyAqIG9ubHkgaWYgdGhlIHRhcmdl dCByZWxhdGlvbiBsaXZlcyBpbiBiYXNlX25hbWVzcGFjZSAodGhlIG5hbWVzcGFjZQorICogb2Yg dGhlIHRhYmxlIHdob3NlIERETCBpcyBiZWluZyBnZW5lcmF0ZWQpOyBvdGhlcndpc2UgdGhlIHNj aGVtYS0KKyAqIHF1YWxpZmllZCBmb3JtIGlzIHN0aWxsIHJldHVybmVkLCBiZWNhdXNlIGNyb3Nz LXNjaGVtYSByZWZlcmVuY2VzCisgKiAoZm9yIGV4YW1wbGUgYW4gaW5oZXJpdGFuY2UgcGFyZW50 IG9yIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhCisgKiBkaWZmZXJlbnQgc2NoZW1hKSBhcmUgbm90 IHNhZmUgdG8gc3RyaXAuCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwZnJlZSgp aW5nIHRoZSByZXN1bHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2xvb2t1cF9yZWxuYW1lX2Zvcl9l bWl0KE9pZCByZWxpZCwgYm9vbCBzY2hlbWFfcXVhbGlmaWVkLCBPaWQgYmFzZV9uYW1lc3BhY2Up Cit7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfY2xhc3MgcmVsdHVwOworCWNoYXIJICAgKnJl c3VsdDsKKworCWlmIChzY2hlbWFfcXVhbGlmaWVkKQorCQlyZXR1cm4gbG9va3VwX3F1YWxpZmll ZF9yZWxuYW1lKHJlbGlkKTsKKworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0 SWRHZXREYXR1bShyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkg ZXJybXNnKCJyZWxhdGlvbiB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIHJlbGlkKSwKKwkJ CQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7 CisKKwlyZWx0dXAgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHRwKTsKKwlpZiAocmVsdHVw LT5yZWxuYW1lc3BhY2UgIT0gYmFzZV9uYW1lc3BhY2UpCisJeworCQkvKiBDcm9zcy1zY2hlbWEg cmVmZXJlbmNlOiBxdWFsaWZpY2F0aW9uIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcy4gKi8K KwkJUmVsZWFzZVN5c0NhY2hlKHRwKTsKKwkJcmV0dXJuIGxvb2t1cF9xdWFsaWZpZWRfcmVsbmFt ZShyZWxpZCk7CisJfQorCisJcmVzdWx0ID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVT dHIocmVsdHVwLT5yZWxuYW1lKSkpOworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisKKwlyZXR1cm4g cmVzdWx0OworfQorCisvKgorICogc3RyaXBfc2NoZW1hX3ByZWZpeAorICoJCVJldHVybiBhIHBh bGxvYydkIGNvcHkgb2Ygc3RtdCB3aXRoIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgcHJlZml4CisgKgkJ cmVtb3ZlZCwgZXhjZXB0IG9jY3VycmVuY2VzIHRoYXQgZmFsbCBpbnNpZGUgYSBzaW5nbGUtcXVv dGVkIFNRTAorICoJCXN0cmluZyBsaXRlcmFsIG9yIGEgZG91YmxlLXF1b3RlZCBTUUwgaWRlbnRp Zmllci4KKyAqCisgKiBVc2VkIHRvIHN0cmlwIHRoZSBxdWFsaWZpZWQtc2NoZW1hIHByZWZpeCAo Zm9yIGV4YW1wbGUgIm9sZF9zY2hlbWEuIikKKyAqIGZyb20gRERMIGVtaXR0ZWQgYnkgdGhlIGFs d2F5cy1xdWFsaWZpZWQgcnVsZXV0aWxzIGhlbHBlcnMKKyAqIChwZ19nZXRfY29uc3RyYWludGRl Zl9jb21tYW5kLCBwZ19nZXRfaW5kZXhkZWZfc3RyaW5nLAorICogcGdfZ2V0X3J1bGVkZWYsIHBn X2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZykgd2hlbiB0aGUgY2FsbGVyIGhhcworICogcmVx dWVzdGVkIHVucXVhbGlmaWVkIG91dHB1dCB2aWEgc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4gIEEg cGxhaW4KKyAqIHN1YnN0cmluZyBzdHJpcCB3b3VsZCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3 aG9zZSBjb250ZW50cyBoYXBwZW4KKyAqIHRvIGNvbnRhaW4gIjxzY2hlbWE+LiIgKGZvciBleGFt cGxlIGEgQ0hFQ0sgY29tcGFyaW5nIGFnYWluc3QKKyAqICdteXNjaGVtYS5zZWNyZXQnKSBvciBk b3VibGUtcXVvdGVkIGNvbHVtbi9pZGVudGlmaWVyIG5hbWVzIHdob3NlCisgKiBjb250ZW50cyBo YXBwZW4gdG8gY29udGFpbiAiPHNjaGVtYT4uIiAoZm9yIGV4YW1wbGUgYSBjb2x1bW4gbmFtZWQK KyAqICJzLndlaXJkIiB3aGVuIHN0cmlwcGluZyB0aGUgcHJlZml4ICJzLiIpLCBzbyB3ZSB0cmFj ayBxdW90aW5nIHN0YXRlCisgKiBhbmQgc2tpcCBtYXRjaGVzIHRoYXQgb2NjdXIgd2hpbGUgd2Ug YXJlIGluc2lkZSBlaXRoZXIga2luZCBvZgorICogcXVvdGVkIHRva2VuLiAgRXNjYXBlZCBxdW90 ZXMgKCcnIGluc2lkZSBhIHN0cmluZywgIiIgaW5zaWRlIGFuCisgKiBpZGVudGlmaWVyKSBhcmUg aGFuZGxlZCBieSBrZWVwaW5nIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgc2V0IGFjcm9zcworICog dGhlbS4KKyAqLworc3RhdGljIGNoYXIgKgorc3RyaXBfc2NoZW1hX3ByZWZpeChjb25zdCBjaGFy ICpzdG10LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCXNp emVfdAkJcGxlbiA9IHN0cmxlbihwcmVmaXgpOworCWNvbnN0IGNoYXIgKnAgPSBzdG10OworCWJv b2wJCWluX3N0cmluZyA9IGZhbHNlOworCWJvb2wJCWluX2lkZW50ID0gZmFsc2U7CisKKwlpbml0 U3RyaW5nSW5mbygmYnVmKTsKKwl3aGlsZSAoKnApCisJeworCQkvKgorCQkgKiBUcnkgdGhlIHBy ZWZpeCBtYXRjaCBCRUZPUkUgdGhlIHF1b3RlLXN0YXRlIHRvZ2dsZXMuICBUaGUKKwkJICogcHJl Zml4IGl0c2VsZiBtYXkgYmVnaW4gd2l0aCBhIGRvdWJsZSBxdW90ZSB3aGVuIHRoZSBiYXNlCisJ CSAqIHNjaGVtYSBuYW1lIHJlcXVpcmVzIHF1b3RpbmcgKGUuZy4gIk15LVNjaGVtYSIuKSwgYW5k IGF0IHRoYXQKKwkJICogbGVhZGluZyAiIHdlIG11c3Qgc3RyaXAgdGhlIHdob2xlIHByZWZpeCBy YXRoZXIgdGhhbiB0cmVhdCBpdAorCQkgKiBhcyB0aGUgb3BlbmluZyBvZiBhIHJlZ3VsYXIgcXVv dGVkIGlkZW50aWZpZXIuICBUaGUgY2hlY2sgaXMKKwkJICogZ2F0ZWQgb24gIWluX2lkZW50ICYm ICFpbl9zdHJpbmcsIHNvIG9uY2Ugd2UgaGF2ZSB0b2dnbGVkCisJCSAqIGludG8gYSBxdW90ZWQg dG9rZW4gd2UgbmV2ZXIgc3RyaXAgYSBjb2luY2lkZW50YWwgc3Vic3RyaW5nCisJCSAqIGluc2lk ZSBpdC4KKwkJICovCisJCWlmICghaW5fc3RyaW5nICYmICFpbl9pZGVudCAmJiBzdHJuY21wKHAs IHByZWZpeCwgcGxlbikgPT0gMCkKKwkJeworCQkJcCArPSBwbGVuOworCQkJY29udGludWU7CisJ CX0KKwkJaWYgKCpwID09ICdcJycgJiYgIWluX2lkZW50KQorCQl7CisJCQkvKiBTUUwgJycgZXNj YXBlOiBlbWl0IGJvdGggcXVvdGVzIGFuZCBzdGF5IGluc2lkZSB0aGUgc3RyaW5nLiAqLworCQkJ aWYgKGluX3N0cmluZyAmJiBwWzFdID09ICdcJycpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoJmJ1ZiwgJ1wnJyk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJ1wnJyk7 CisJCQkJcCArPSAyOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaW5fc3RyaW5nID0gIWluX3N0 cmluZzsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICpwKTsKKwkJCXArKzsKKwkJCWNv bnRpbnVlOworCQl9CisJCWlmICgqcCA9PSAnIicgJiYgIWluX3N0cmluZykKKwkJeworCQkJLyog U1FMICIiIGVzY2FwZTogZW1pdCBib3RoIHF1b3RlcyBhbmQgc3RheSBpbnNpZGUgdGhlIGlkZW50 LiAqLworCQkJaWYgKGluX2lkZW50ICYmIHBbMV0gPT0gJyInKQorCQkJeworCQkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKCZidWYsICciJyk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyInKTsKKwkJCQlwICs9IDI7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpbl9pZGVudCA9ICFp bl9pZGVudDsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICpwKTsKKwkJCXArKzsKKwkJ CWNvbnRpbnVlOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICpwKTsKKwkJcCsr OworCX0KKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCisgKiBjb2xsZWN0X2xvY2FsX25vdF9u dWxsCisgKgkJU2NhbiBwZ19jb25zdHJhaW50IG9uY2UgZm9yIGxvY2FsbHktZGVjbGFyZWQgTk9U IE5VTEwgY29uc3RyYWludHMKKyAqCQlvbiByZWwsIHJldHVybmluZyBhIHBhbGxvYydkIGFycmF5 IGluZGV4ZWQgYnkgYXR0bnVtICgxLi5uYXR0cykuCisgKgorICogRW50cmllcyB3aXRoIGNvbm9p ZD09SW52YWxpZE9pZCBtZWFuICJubyBsb2NhbCBOT1QgTlVMTCByb3cgZm9yIHRoaXMKKyAqIGNv bHVtbiIuICBXaGVuIHRoZSBjb25zdHJhaW50IG5hbWUgZG9lcyBub3QgbWF0Y2ggdGhlIGF1dG8t Z2VuZXJhdGVkCisgKiBwYXR0ZXJuICI8dGFibGVuYW1lPl88Y29sdW1ubmFtZT5fbm90X251bGwi LCB0aGUgY29uc3RyYWludCBPSUQgaXMKKyAqIGFwcGVuZGVkIHRvICpza2lwX29pZHMgc28gdGhl IHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQgbG9vcCBjYW4gYXZvaWQKKyAqIHJlLWVtaXR0aW5nIGl0 IGFzIEFMVEVSIFRBQkxFIOKApiBBREQgQ09OU1RSQUlOVCDigJQgdGhlIGNvbHVtbi1lbWl0Cisg KiBwYXNzIHdpbGwgcHJvZHVjZSBpdCBpbmxpbmUgYXMgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVM TCIgaW5zdGVhZC4KKyAqLworc3RhdGljIExvY2FsTm90TnVsbEVudHJ5ICoKK2NvbGxlY3RfbG9j YWxfbm90X251bGwoUmVsYXRpb24gcmVsLCBMaXN0ICoqc2tpcF9vaWRzKQoreworCVR1cGxlRGVz Ywl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCWludAkJCW5hdHRzID0gdHVwZGVz Yy0+bmF0dHM7CisJTG9jYWxOb3ROdWxsRW50cnkgKmVudHJpZXM7CisJY29uc3QgY2hhciAqcmVs bmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCk7CisJUmVsYXRpb24JY29uUmVsOwor CVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2NhbktleURhdGEgY29uS2V5OworCUhlYXBUdXBsZQlj b25UdXA7CisKKwllbnRyaWVzID0gKExvY2FsTm90TnVsbEVudHJ5ICopIHBhbGxvYzAoc2l6ZW9m KExvY2FsTm90TnVsbEVudHJ5KSAqCisJCQkJCQkJCQkJCShuYXR0cyArIDEpKTsKKworCWNvblJl bCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ U2NhbktleUluaXQoJmNvbktleSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0o UmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJY29uU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihj b25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBO VUxMLCAxLCAmY29uS2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5 c3RhYmxlX2dldG5leHQoY29uU2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9 IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25UdXApOworCQlEYXR1bQkJY29ua2V5 RGF0OworCQlib29sCQljb25rZXlOdWxsOworCQlBcnJheVR5cGUgICpjb25rZXlBcnI7CisJCWlu dDE2CSAgICpjb25rZXlWYWxzOworCQlpbnQJCQlhdHRudW07CisJCUZvcm1fcGdfYXR0cmlidXRl IGF0dDsKKwkJY2hhcgkJYXV0b25hbWVbTkFNRURBVEFMRU5dOworCisJCWlmIChjb24tPmNvbnR5 cGUgIT0gQ09OU1RSQUlOVF9OT1ROVUxMKQorCQkJY29udGludWU7CisJCWlmICghY29uLT5jb25p c2xvY2FsKQorCQkJY29udGludWU7CisKKwkJY29ua2V5RGF0ID0gaGVhcF9nZXRhdHRyKGNvblR1 cCwgQW51bV9wZ19jb25zdHJhaW50X2NvbmtleSwKKwkJCQkJCQkJIFJlbGF0aW9uR2V0RGVzY3Io Y29uUmVsKSwgJmNvbmtleU51bGwpOworCQlpZiAoY29ua2V5TnVsbCkKKwkJCWNvbnRpbnVlOwor CQljb25rZXlBcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoY29ua2V5RGF0KTsKKworCQkvKgorCQkg KiBEZWZlbmQgYWdhaW5zdCBhIG1hbGZvcm1lZCBjb25rZXk6IGEgTk9UIE5VTEwgY29uc3RyYWlu dCBpcyBhbHdheXMKKwkJICogYSBzaW5nbGUtY29sdW1uIDEtRCBpbnQyIGFycmF5LCBidXQgYSBj b3JydXB0ZWQgY2F0YWxvZyBvciBhIGZ1dHVyZQorCQkgKiBwYXRjaCB0aGF0IHN0b3JlcyB3aWRl ciBjb25rZXlzIG11c3RuJ3QgdHJpcCB1cyBpbnRvIHJlYWRpbmcgcGFzdAorCQkgKiB0aGUgYXJy YXkgaGVhZGVyLgorCQkgKi8KKwkJaWYgKEFSUl9ORElNKGNvbmtleUFycikgIT0gMSB8fAorCQkJ QVJSX0RJTVMoY29ua2V5QXJyKVswXSA8IDEgfHwKKwkJCUFSUl9IQVNOVUxMKGNvbmtleUFycikg fHwKKwkJCUFSUl9FTEVNVFlQRShjb25rZXlBcnIpICE9IElOVDJPSUQpCisJCQljb250aW51ZTsK KworCQljb25rZXlWYWxzID0gKGludDE2ICopIEFSUl9EQVRBX1BUUihjb25rZXlBcnIpOworCQlh dHRudW0gPSBjb25rZXlWYWxzWzBdOworCQlpZiAoYXR0bnVtIDwgMSB8fCBhdHRudW0gPiBuYXR0 cykKKwkJCWNvbnRpbnVlOworCisJCWF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgYXR0bnVt IC0gMSk7CisJCXNucHJpbnRmKGF1dG9uYW1lLCBzaXplb2YoYXV0b25hbWUpLCAiJXNfJXNfbm90 X251bGwiLAorCQkJCSByZWxuYW1lLCBOYW1lU3RyKGF0dC0+YXR0bmFtZSkpOworCisJCWVudHJp ZXNbYXR0bnVtXS5jb25vaWQgPSBjb24tPm9pZDsKKwkJZW50cmllc1thdHRudW1dLm5hbWUgPSBw c3RyZHVwKE5hbWVTdHIoY29uLT5jb25uYW1lKSk7CisJCWVudHJpZXNbYXR0bnVtXS5pc19hdXRv ID0gKHN0cmNtcChOYW1lU3RyKGNvbi0+Y29ubmFtZSksIGF1dG9uYW1lKSA9PSAwKTsKKwkJZW50 cmllc1thdHRudW1dLm5vX2luaGVyaXQgPSBjb24tPmNvbm5vaW5oZXJpdDsKKworCQkvKgorCQkg KiBJbmxpbmUgZW1pc3Npb24gb2YgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgb25seSBoYXBw ZW5zIGZvcgorCQkgKiBjb2x1bW5zIHRoYXQgdGhlIGNvbHVtbiBsaXN0IGFjdHVhbGx5IGVtaXRz LCBpLmUuIGF0dGlzbG9jYWwKKwkJICogY29sdW1ucy4gIEZvciBhIGxvY2FsbHktZGVjbGFyZWQg Tk9UIE5VTEwgc2l0dGluZyBvbiBhbiBpbmhlcml0ZWQKKwkJICogY29sdW1uIHRoZSBpbmxpbmUg cGF0aCBuZXZlciBmaXJlcywgc28gd2UgbXVzdCBsZWF2ZSB0aGUgY29uc3RyYWludAorCQkgKiBP SUQgb3V0IG9mIHNraXBfb2lkcyBhbmQgbGV0IHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxv b3AgZW1pdAorCQkgKiBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQuCisJCSAqLworCQlp ZiAoIWVudHJpZXNbYXR0bnVtXS5pc19hdXRvICYmIGF0dC0+YXR0aXNsb2NhbCAmJiBza2lwX29p ZHMgIT0gTlVMTCkKKwkJCSpza2lwX29pZHMgPSBsYXBwZW5kX29pZCgqc2tpcF9vaWRzLCBjb24t Pm9pZCk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29u UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGVudHJpZXM7Cit9CisKKy8qCisgKiBm aW5kX2F0dHJkZWZfdGV4dAorICoJCVJldHVybiB0aGUgZGVwYXJzZWQgREVGQVVMVC9HRU5FUkFU RUQgZXhwcmVzc2lvbiBmb3IgYXR0bnVtIG9uIHJlbCwKKyAqCQlvciBOVUxMIGlmIG5vIGVudHJ5 IGV4aXN0cyBpbiBUdXBsZUNvbnN0ci0+ZGVmdmFsLgorICoKKyAqIFRoZSBjYWxsZXIgcGFzc2Vz IGEgTGlzdCAqKiBzbyB0aGF0IHRoZSBkZXBhcnNlIGNvbnRleHQgaXMgYnVpbHQgbGF6aWx5Cisg KiBhbmQgcmV1c2VkIGFjcm9zcyBjYWxscyAoZGVwYXJzZV9jb250ZXh0X2ZvciBpcyBub3QgY2hl YXApLiAgUmV0dXJuZWQKKyAqIHN0cmluZyBpcyBwYWxsb2MnZCBpbiB0aGUgY3VycmVudCBtZW1v cnkgY29udGV4dDsgY2FsbGVyIHBmcmVlJ3MgaXQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRf YXR0cmRlZl90ZXh0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0sIExpc3QgKipkcGNv bnRleHQpCit7CisJVHVwbGVDb25zdHIgKmNvbnN0ciA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKS0+ Y29uc3RyOworCisJaWYgKGNvbnN0ciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAo aW50IGogPSAwOyBqIDwgY29uc3RyLT5udW1fZGVmdmFsOyBqKyspCisJeworCQlpZiAoY29uc3Ry LT5kZWZ2YWxbal0uYWRudW0gIT0gYXR0bnVtKQorCQkJY29udGludWU7CisKKwkJaWYgKCpkcGNv bnRleHQgPT0gTklMKQorCQkJKmRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsaWQocmVs KSk7CisKKwkJcmV0dXJuIGRlcGFyc2VfZXhwcmVzc2lvbihzdHJpbmdUb05vZGUoY29uc3RyLT5k ZWZ2YWxbal0uYWRiaW4pLAorCQkJCQkJCQkgICpkcGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJ fQorCXJldHVybiBOVUxMOworfQorCisvKgorICogYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJh aW50cworICoJCUVtaXQgZWFjaCBsb2NhbGx5LWRlY2xhcmVkIENIRUNLIGNvbnN0cmFpbnQgb24g cmVsIGFzCisgKgkJIkNPTlNUUkFJTlQgbmFtZSA8cGdfZ2V0X2NvbnN0cmFpbnRkZWY+Iiwgc2Vw YXJhdGVkIGJ5ICcsJyBmcm9tIGFueQorICoJCXByZXZpb3VzbHktZW1pdHRlZCBjb2x1bW4gb3Ig Y29uc3RyYWludC4KKyAqCisgKiAqZmlyc3QgdHJhY2tzIHdoZXRoZXIgYW55dGhpbmcgaGFzIGJl ZW4gZW1pdHRlZCBvbiB0aGlzIGxpc3QgeWV0LCBzbyB0aGUKKyAqIGNhbGxlciBjYW4gY2hhaW4g Y29sdW1uIGVtaXNzaW9uIGFuZCBjb25zdHJhaW50IGVtaXNzaW9uIHRocm91Z2ggdGhlIHNhbWUK KyAqIGJ1ZmZlci4gIEluaGVyaXRlZCBDSEVDSyBjb25zdHJhaW50cyAoIWNvbmlzbG9jYWwpIGNv bWUgZnJvbSB0aGUgcGFyZW50J3MKKyAqIERETCBhbmQgYXJlbid0IHJlcGVhdGVkIGhlcmUuCisg Ki8KK3N0YXRpYyB2b2lkCithcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKFN0cmluZ0lu Zm8gYnVmLCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJCQlib29sICpmaXJzdCkK K3sKKwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0 YSBjb25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29u c3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktl eSwKKwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZChy ZWwpKSk7CisJY29uU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRS ZWxpZFR5cGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmY29uS2V5KTsK KworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCA9IHN5c3RhYmxlX2dldG5leHQoY29u U2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbiA9IChGb3JtX3BnX2NvbnN0cmFp bnQpIEdFVFNUUlVDVChjb25UdXApOworCQlEYXR1bQkJZGVmRGF0dW07CisJCWNoYXIJICAgKmRl ZmJvZHk7CisKKwkJaWYgKGNvbi0+Y29udHlwZSAhPSBDT05TVFJBSU5UX0NIRUNLKQorCQkJY29u dGludWU7CisJCWlmICghY29uLT5jb25pc2xvY2FsKQorCQkJY29udGludWU7CisKKwkJaWYgKCEq Zmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcsJyk7CisJCSpmaXJzdCA9IGZh bHNlOworCQlpZiAocHJldHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcbiAg ICAiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCisJCWRl ZkRhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShGX1BHX0dFVF9DT05TVFJBSU5UREVGX09JRCwKKwkJ CQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY29uLT5vaWQpKTsKKwkJZGVmYm9keSA9IFRleHREYXR1 bUdldENTdHJpbmcoZGVmRGF0dW0pOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIkNPTlNUUkFJ TlQgJXMgJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUp KSwKKwkJCQkJCSBkZWZib2R5KTsKKwkJcGZyZWUoZGVmYm9keSk7CisJfQorCXN5c3RhYmxlX2Vu ZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor fQorCisvKgorICogYXBwZW5kX2NvbHVtbl9kZWZzCisgKgkJQXBwZW5kIHRoZSBjb21tYS1zZXBh cmF0ZWQgY29sdW1uIGRlZmluaXRpb24gbGlzdCBmb3IgYSB0YWJsZS4KKyAqCisgKiBFbWl0cyBl YWNoIG5vbi1kcm9wcGVkLCBsb2NhbGx5LWRlY2xhcmVkIGNvbHVtbiBhcworICoJCW5hbWUgdHlw ZSBbQ09MTEFURSB4XSBbU1RPUkFHRSBzXSBbQ09NUFJFU1NJT04gY10KKyAqCQlbR0VORVJBVEVE IC4uLiB8IERFRkFVTFQgZV0gW05PVCBOVUxMXQorICogZm9sbG93ZWQgYnkgYW55IGxvY2FsbHkt ZGVjbGFyZWQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzLiAgT3B0aW9uYWwKKyAqIGNsYXVzZXMg YXJlIG9taXR0ZWQgd2hlbiB0aGVpciB2YWx1ZSBtYXRjaGVzIHdoYXQgdGhlIHN5c3RlbSB3b3Vs ZAorICogcmVhcHBseSBvbiByb3VuZC10cmlwIChlLmcuIHR5cGUtZGVmYXVsdCBDT0xMQVRFLCB0 eXBlLWRlZmF1bHQgU1RPUkFHRSkuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfY29sdW1uX2Rl ZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJICAgYm9v bCBpbmNsdWRlX2NvbnN0cmFpbnRzLAorCQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJ CQkgICBMb2NhbE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMpCit7CisJVHVwbGVEZXNjCXR1cGRl c2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJT2lkCQkJYmFzZV9uYW1lc3BhY2UgPSBSZWxh dGlvbkdldE5hbWVzcGFjZShyZWwpOworCUxpc3QJICAgKmRwY29udGV4dCA9IE5JTDsKKwlib29s CQlmaXJzdCA9IHRydWU7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBp KyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2Ms IGkpOworCQljaGFyCSAgICp0eXBzdHI7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkKQorCQkJ Y29udGludWU7CisKKwkJLyoKKwkJICogQ29sdW1ucyBpbmhlcml0ZWQgZnJvbSBhIHBhcmVudCBh cmUgZW1pdHRlZCBieSB0aGUgSU5IRVJJVFMgY2xhdXNlCisJCSAqIChvbmNlIGltcGxlbWVudGVk KSwgbm90IHRoZSBjb2x1bW4gbGlzdCwgdW5sZXNzIHRoZSBjaGlsZAorCQkgKiByZWRlY2xhcmVk IHRoZW0gbG9jYWxseSAoYXR0aXNsb2NhbD10cnVlKS4KKwkJICovCisJCWlmICghYXR0LT5hdHRp c2xvY2FsKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGJ1ZiwgJywnKTsKKwkJZmlyc3QgPSBmYWxzZTsKKworCQlpZiAocHJldHR5KQorCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcbiAgICAiKTsKKwkJZWxzZQorCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSkpOworCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICcgJyk7CisKKwkJdHlwc3RyID0gZm9ybWF0X3R5cGVfd2l0aF90eXBl bW9kKGF0dC0+YXR0dHlwaWQsIGF0dC0+YXR0dHlwbW9kKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsIHR5cHN0cik7CisJCXBmcmVlKHR5cHN0cik7CisKKwkJLyogQ09MTEFURSBjbGF1 c2UsIG9ubHkgaWYgaXQgZGlmZmVycyBmcm9tIHRoZSB0eXBlJ3MgZGVmYXVsdC4gKi8KKwkJaWYg KE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24pICYmCisJCQlhdHQtPmF0dGNvbGxhdGlvbiAh PSBnZXRfdHlwY29sbGF0aW9uKGF0dC0+YXR0dHlwaWQpKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIgQ09MTEFURSAlcyIsCisJCQkJCQkJIGdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKGF0dC0+ YXR0Y29sbGF0aW9uKSk7CisKKwkJLyogU1RPUkFHRSBjbGF1c2UsIG9ubHkgaWYgaXQgZGlmZmVy cyBmcm9tIHRoZSB0eXBlJ3MgZGVmYXVsdC4gKi8KKwkJaWYgKGF0dC0+YXR0c3RvcmFnZSAhPSBn ZXRfdHlwc3RvcmFnZShhdHQtPmF0dHR5cGlkKSkKKwkJeworCQkJY29uc3QgY2hhciAqc3RvcmFn ZSA9IE5VTEw7CisKKwkJCXN3aXRjaCAoYXR0LT5hdHRzdG9yYWdlKQorCQkJeworCQkJCWNhc2Ug VFlQU1RPUkFHRV9QTEFJTjoKKwkJCQkJc3RvcmFnZSA9ICJQTEFJTiI7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgVFlQU1RPUkFHRV9FWFRFUk5BTDoKKwkJCQkJc3RvcmFnZSA9ICJFWFRFUk5BTCI7 CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFlQU1RPUkFHRV9NQUlOOgorCQkJCQlzdG9yYWdlID0g Ik1BSU4iOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRZUFNUT1JBR0VfRVhURU5ERUQ6CisJCQkJ CXN0b3JhZ2UgPSAiRVhURU5ERUQiOworCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzdG9yYWdl KQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFNUT1JBR0UgJXMiLCBzdG9yYWdlKTsKKwkJ fQorCisJCS8qIENPTVBSRVNTSU9OIGNsYXVzZSwgb25seSBpZiBleHBsaWNpdGx5IHNldCBvbiB0 aGUgY29sdW1uLiAqLworCQlpZiAoQ29tcHJlc3Npb25NZXRob2RJc1ZhbGlkKGF0dC0+YXR0Y29t cHJlc3Npb24pKQorCQl7CisJCQljb25zdCBjaGFyICpjbSA9IE5VTEw7CisKKwkJCXN3aXRjaCAo YXR0LT5hdHRjb21wcmVzc2lvbikKKwkJCXsKKwkJCQljYXNlIFRPQVNUX1BHTFpfQ09NUFJFU1NJ T046CisJCQkJCWNtID0gInBnbHoiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRPQVNUX0xaNF9D T01QUkVTU0lPTjoKKwkJCQkJY20gPSAibHo0IjsKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAo Y20pCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQ09NUFJFU1NJT04gJXMiLCBjbSk7CisJ CX0KKworCQkvKgorCQkgKiBMb29rIHVwIHRoZSBkZWZhdWx0L2dlbmVyYXRlZCBleHByZXNzaW9u IHRleHQgdXAgZnJvbnQ7IGdlbmVyYXRlZAorCQkgKiBjb2x1bW5zIGhhdmUgYXR0aGFzZGVmPXRy dWUgd2l0aCBhbiBlbnRyeSBpbiBwZ19hdHRyZGVmIGp1c3QgbGlrZQorCQkgKiByZWd1bGFyIGRl ZmF1bHRzLgorCQkgKi8KKwkJeworCQkJY2hhcgkgICAqZGVmZXhwciA9IE5VTEw7CisKKwkJCWlm IChhdHQtPmF0dGhhc2RlZikKKwkJCQlkZWZleHByID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBh dHQtPmF0dG51bSwgJmRwY29udGV4dCk7CisKKwkJCS8qIEdFTkVSQVRFRCAvIElERU5USVRZIC8g REVGQVVMVCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAqLworCQkJaWYgKGF0dC0+YXR0Z2VuZXJh dGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEICYmIGRlZmV4cHIpCisJCQkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFMV0FZUyBBUyAoJXMpIFNUT1JFRCIsIGRlZmV4 cHIpOworCQkJZWxzZSBpZiAoYXR0LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRF RF9WSVJUVUFMICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJB VEVEIEFMV0FZUyBBUyAoJXMpIFZJUlRVQUwiLCBkZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+ YXR0aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyB8fAorCQkJCQkgYXR0LT5h dHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJCXsKKwkJCQlj b25zdCBjaGFyICppZGtpbmQgPQorCQkJCQkoYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVf SURFTlRJVFlfQUxXQVlTKQorCQkJCQk/ICJBTFdBWVMiIDogIkJZIERFRkFVTFQiOworCQkJCU9p ZAkJCXNlcWlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShyZWwsIGF0dC0+YXR0bnVtLCB0cnVlKTsK KworCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCAlcyBBUyBJREVOVElUWSIs IGlka2luZCk7CisKKwkJCQkvKgorCQkJCSAqIEVtaXQgb25seSB0aGUgc2VxdWVuY2Ugb3B0aW9u cyB0aGF0IGRpZmZlciBmcm9tIHRoZWlyCisJCQkJICogZGVmYXVsdHMg4oCUIG1pcnJvcmluZyBw Z19nZXRfZGF0YWJhc2VfZGRsJ3MgcGF0dGVybiBvZgorCQkJCSAqIG9taXR0aW5nIHZhbHVlcyB0 aGF0IHRoZSBzeXN0ZW0gd291bGQgcmVhcHBseSBvbiBpdHMgb3duLgorCQkJCSAqLworCQkJCWlm IChPaWRJc1ZhbGlkKHNlcWlkKSkKKwkJCQl7CisJCQkJCUhlYXBUdXBsZQlzZXFUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoU0VRUkVMSUQsCisJCQkJCQkJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHNl cWlkKSk7CisKKwkJCQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQoc2VxVHVwKSkKKwkJCQkJeworCQkJ CQkJRm9ybV9wZ19zZXF1ZW5jZSBzZXEgPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNl cVR1cCk7CisJCQkJCQlTdHJpbmdJbmZvRGF0YSBvcHRzOworCQkJCQkJYm9vbAkJZmlyc3Rfb3B0 ID0gdHJ1ZTsKKwkJCQkJCWludDY0CQlkZWZfbWluLAorCQkJCQkJCQkJZGVmX21heCwKKwkJCQkJ CQkJCWRlZl9zdGFydDsKKwkJCQkJCWludDY0CQl0eXBfbWluLAorCQkJCQkJCQkJdHlwX21heDsK KworCQkJCQkJLyoKKwkJCQkJCSAqIFBlci10eXBlIGJvdW5kcyBmb3IgdGhlIHNlcXVlbmNlJ3Mg dW5kZXJseWluZworCQkJCQkJICogaW50ZWdlciB0eXBlLiAgRGVmYXVsdHMgdG8gaW50OCBpZiB0 aGUgY29sdW1uIHR5cGUKKwkJCQkJCSAqIGlzIHNvbWV0aGluZyBlbHNlIChzaG91bGRuJ3QgaGFw cGVuIGZvciBJREVOVElUWSwKKwkJCQkJCSAqIGJ1dCBiZSBkZWZlbnNpdmUpLgorCQkJCQkJICov CisJCQkJCQlzd2l0Y2ggKGF0dC0+YXR0dHlwaWQpCisJCQkJCQl7CisJCQkJCQkJY2FzZSBJTlQy T0lEOgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5UMTZfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0g UEdfSU5UMTZfTUFYOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIElOVDRPSUQ6CisJCQkJ CQkJCXR5cF9taW4gPSBQR19JTlQzMl9NSU47CisJCQkJCQkJCXR5cF9tYXggPSBQR19JTlQzMl9N QVg7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXR5cF9taW4gPSBQ R19JTlQ2NF9NSU47CisJCQkJCQkJCXR5cF9tYXggPSBQR19JTlQ2NF9NQVg7CisJCQkJCQkJCWJy ZWFrOworCQkJCQkJfQorCisJCQkJCQlpZiAoc2VxLT5zZXFpbmNyZW1lbnQgPiAwKQorCQkJCQkJ eworCQkJCQkJCWRlZl9taW4gPSAxOworCQkJCQkJCWRlZl9tYXggPSB0eXBfbWF4OworCQkJCQkJ CWRlZl9zdGFydCA9IGRlZl9taW47CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJ CQkJZGVmX21pbiA9IHR5cF9taW47CisJCQkJCQkJZGVmX21heCA9IC0xOworCQkJCQkJCWRlZl9z dGFydCA9IGRlZl9tYXg7CisJCQkJCQl9CisKKwkJCQkJCWluaXRTdHJpbmdJbmZvKCZvcHRzKTsK KworCQkJCQkJLyoKKwkJCQkJCSAqIFNFUVVFTkNFIE5BTUUg4oCUIG9taXQgd2hlbiBpdCBtYXRj aGVzIHRoZSBpbXBsaWNpdAorCQkJCQkJICogIjx0YWJsZW5hbWU+Xzxjb2x1bW5uYW1lPl9zZXEi IHBhdHRlcm4gaW4gdGhlIHNhbWUKKwkJCQkJCSAqIHNjaGVtYSwgc2luY2UgQ1JFQVRFIFRBQkxF IHdpbGwgcmVnZW5lcmF0ZSB0aGF0CisJCQkJCQkgKiBleGFjdCBuYW1lLiAgVGhlIHNlcXVlbmNl IGlzIGFuIElOVEVSTkFMIGRlcGVuZGVuY3kKKwkJCQkJCSAqIG9mIHRoZSBjb2x1bW4sIHNvIHRo ZSBsb2NrIHdlIGhvbGQgb24gdGhlIHRhYmxlCisJCQkJCQkgKiBhbHNvIHBpbnMgaXQsIGJ1dCB0 aGUgbG9va3VwIGhlbHBlciBzdGlsbCBkZWZlbmRzCisJCQkJCQkgKiBhZ2FpbnN0IGEgbWlzc2lu ZyBwZ19jbGFzcyByb3cuCisJCQkJCQkgKi8KKwkJCQkJCXsKKwkJCQkJCQlIZWFwVHVwbGUJc2Vx Q2xhc3NUdXA7CisJCQkJCQkJRm9ybV9wZ19jbGFzcyBzZXFDbGFzczsKKwkJCQkJCQljaGFyCQlh dXRvbmFtZVtOQU1FREFUQUxFTl07CisKKwkJCQkJCQlzZXFDbGFzc1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShSRUxPSUQsCisJCQkJCQkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShzZXFpZCkpOwor CQkJCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXFDbGFzc1R1cCkpCisJCQkJCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwK KwkJCQkJCQkJCQkgZXJybXNnKCJpZGVudGl0eSBzZXF1ZW5jZSB3aXRoIE9JRCAldSBkb2VzIG5v dCBleGlzdCIsCisJCQkJCQkJCQkJCQlzZXFpZCksCisJCQkJCQkJCQkJIGVycmRldGFpbCgiSXQg bWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkpOworCQkJCQkJCXNlcUNsYXNz ID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChzZXFDbGFzc1R1cCk7CisKKwkJCQkJCQlzbnBy aW50ZihhdXRvbmFtZSwgc2l6ZW9mKGF1dG9uYW1lKSwgIiVzXyVzX3NlcSIsCisJCQkJCQkJCQkg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCSBOYW1lU3RyKGF0dC0+YXR0 bmFtZSkpOworCQkJCQkJCWlmIChzZXFDbGFzcy0+cmVsbmFtZXNwYWNlICE9IFJlbGF0aW9uR2V0 TmFtZXNwYWNlKHJlbCkgfHwKKwkJCQkJCQkJc3RyY21wKE5hbWVTdHIoc2VxQ2xhc3MtPnJlbG5h bWUpLCBhdXRvbmFtZSkgIT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJCWNoYXIJICAgKnNlcVF1YWwg PQorCQkJCQkJCQkJbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoc2VxaWQsCisJCQkJCQkJCQkJCQkJ CQlzY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJYmFzZV9uYW1lc3BhY2UpOworCisJ CQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc1NFUVVFTkNFIE5BTUUgJXMiLAorCQkJ CQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXFRdWFsKTsKKwkJCQkJCQkJZmlyc3Rf b3B0ID0gZmFsc2U7CisJCQkJCQkJCXBmcmVlKHNlcVF1YWwpOworCQkJCQkJCX0KKwkJCQkJCQlS ZWxlYXNlU3lzQ2FjaGUoc2VxQ2xhc3NUdXApOworCQkJCQkJfQorCisJCQkJCQlpZiAoc2VxLT5z ZXFzdGFydCAhPSBkZWZfc3RhcnQpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygm b3B0cywgIiVzU1RBUlQgV0lUSCAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29w dCA/ICIiIDogIiAiLCBzZXEtPnNlcXN0YXJ0KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsK KwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcWluY3JlbWVudCAhPSAxKQorCQkJCQkJeworCQkJ CQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0lOQ1JFTUVOVCBCWSAiIElOVDY0X0ZPUk1B VCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcWluY3JlbWVudCk7 CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFt aW4gIT0gZGVmX21pbikKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAi JXNNSU5WQUxVRSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDog IiAiLCBzZXEtPnNlcW1pbik7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJ CQkJCQlpZiAoc2VxLT5zZXFtYXggIT0gZGVmX21heCkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZvcHRzLCAiJXNNQVhWQUxVRSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJ IGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcW1heCk7CisJCQkJCQkJZmlyc3Rfb3B0ID0g ZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFjYWNoZSAhPSAxKQorCQkJCQkJewor CQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0NBQ0hFICIgSU5UNjRfRk9STUFULAor CQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxY2FjaGUpOworCQkJCQkJ CWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYgKHNlcS0+c2VxY3ljbGUpCisJ CQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzQ1lDTEUiLCBmaXJzdF9v cHQgPyAiIiA6ICIgIik7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisKKwkJ CQkJCWlmICghZmlyc3Rfb3B0KQorCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiICglcyki LCBvcHRzLmRhdGEpOworCisJCQkJCQlwZnJlZShvcHRzLmRhdGEpOworCQkJCQkJUmVsZWFzZVN5 c0NhY2hlKHNlcVR1cCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkZWZleHBy KQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIERFRkFVTFQgJXMiLCBkZWZleHByKTsKKwor CQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUoZGVmZXhwcik7CisJCX0KKworCQlpZiAoYXR0LT5h dHRub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAmbm5fZW50cmllc1th dHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNfYXV0bykK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT05TVFJBSU5UICVzIE5PVCBOVUxMIiwKKwkJ CQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBOT1QgTlVMTCIpOworCQkJaWYgKG5uLT5uYW1lICE9IE5V TEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIg Tk8gSU5IRVJJVCIpOworCQl9CisJfQorCisJLyoKKwkgKiBUYWJsZS1sZXZlbCBDSEVDSyBjb25z dHJhaW50cyDigJQgZW1pdHRlZCBpbmxpbmUgaW4gdGhlIENSRUFURSBUQUJMRQorCSAqIGJvZHkg c28gdGhleSBhcHBlYXIgYWxvbmdzaWRlIHRoZSBjb2x1bW5zICh0aGUgcGdfZHVtcCBzaGFwZSku ICBUaGUKKwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgaW4gcGdfZ2V0X3RhYmxlX2RkbF9pbnRl cm5hbCBza2lwcyBDSEVDSworCSAqIGNvbnN0cmFpbnRzIHRvIGF2b2lkIGRvdWJsZS1lbWlzc2lv bi4KKwkgKi8KKwlpZiAoaW5jbHVkZV9jb25zdHJhaW50cykKKwkJYXBwZW5kX2lubGluZV9jaGVj a19jb25zdHJhaW50cyhidWYsIHJlbCwgcHJldHR5LCAmZmlyc3QpOworfQorCisvKgorICogYXBw ZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMKKyAqCQlGb3IgYSB0eXBlZCB0YWJsZSAoQ1JFQVRF IFRBQkxFIC4uLiBPRiB0eXBlX25hbWUpLCBhcHBlbmQgdGhlCisgKgkJb3B0aW9uYWwgIihjb2wg V0lUSCBPUFRJT05TIC4uLiwgLi4uKSIgbGlzdCBjYXJyeWluZyBsb2NhbGx5CisgKgkJYXBwbGll ZCBwZXItY29sdW1uIG92ZXJyaWRlcyDigJQgREVGQVVMVCwgTk9UIE5VTEwsIGFuZCBhbnkgbG9j YWxseQorICoJCWRlY2xhcmVkIENIRUNLIGNvbnN0cmFpbnRzLgorICoKKyAqIENvbHVtbnMgd2hv c2UgdHlwZSBpcyBmdWxseSBkaWN0YXRlZCBieSByZWxvZnR5cGUgZW1pdCBub3RoaW5nLiAgVGhl CisgKiBwYXJlbnRoZXNpc2VkIGxpc3QgaXMgc3VwcHJlc3NlZCBlbnRpcmVseSB3aGVuIG5vIGNv bHVtbiBuZWVkcyBhbgorICogb3ZlcnJpZGUgYW5kIHRoZXJlIGFyZSBubyBsb2NhbGx5LWRlY2xh cmVkIENIRUNLIGNvbnN0cmFpbnRzLCBtYXRjaGluZworICogdGhlIGNhbm9uaWNhbCAiQ1JFQVRF IFRBQkxFIHggT0YgdDsiIHNoYXBlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3R5cGVkX2Nv bHVtbl9vdmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHks CisJCQkJCQkJICBib29sIGluY2x1ZGVfY29uc3RyYWludHMsCisJCQkJCQkJICBMb2NhbE5vdE51 bGxFbnRyeSAqIG5uX2VudHJpZXMpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdl dERlc2NyKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0gTklMOworCVN0cmluZ0luZm9EYXRh IGlubmVyOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWluaXRTdHJpbmdJbmZvKCZpbm5lcik7 CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3Jt X3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQljaGFyCSAg ICpkZWZleHByID0gTlVMTDsKKwkJYm9vbAkJaGFzX2RlZmF1bHQ7CisJCWJvb2wJCWhhc19ub3Ru dWxsOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChh dHQtPmF0dGhhc2RlZikKKwkJCWRlZmV4cHIgPSBmaW5kX2F0dHJkZWZfdGV4dChyZWwsIGF0dC0+ YXR0bnVtLCAmZHBjb250ZXh0KTsKKworCQloYXNfZGVmYXVsdCA9IChkZWZleHByICE9IE5VTEwp OworCQloYXNfbm90bnVsbCA9IGF0dC0+YXR0bm90bnVsbDsKKworCQlpZiAoIWhhc19kZWZhdWx0 ICYmICFoYXNfbm90bnVsbCkKKwkJeworCQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUoZGVmZXhw cik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcigmaW5uZXIsICcsJyk7CisJCWZpcnN0ID0gZmFsc2U7CisJCWlmIChwcmV0dHkpCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIlxuICAgICIpOworCQllbHNlCisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcgJyk7CisKKwkJYXBwZW5kU3RyaW5nSW5mbygm aW5uZXIsICIlcyBXSVRIIE9QVElPTlMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0 cihhdHQtPmF0dG5hbWUpKSk7CisJCWlmIChoYXNfZGVmYXVsdCkKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oJmlubmVyLCAiIERFRkFVTFQgJXMiLCBkZWZleHByKTsKKwkJaWYgKGhhc19ub3RudWxsKQor CQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAqbm4gPSAmbm5fZW50cmllc1thdHQtPmF0dG51bV07 CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxMICYmICFubi0+aXNfYXV0bykKKwkJCQlhcHBlbmRT dHJpbmdJbmZvKCZpbm5lciwgIiBDT05TVFJBSU5UICVzIE5PVCBOVUxMIiwKKwkJCQkJCQkJIHF1 b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZpbm5lciwgIiBOT1QgTlVMTCIpOworCQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYg bm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmaW5uZXIsICIgTk8g SU5IRVJJVCIpOworCQl9CisKKwkJaWYgKGRlZmV4cHIpCisJCQlwZnJlZShkZWZleHByKTsKKwl9 CisKKwkvKgorCSAqIExvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMgb24gYSB0eXBl ZCB0YWJsZSBiZWxvbmcgaW4gdGhlCisJICogY29sdW1uLWxpc3QgcGFyZW50aGVzZXMsIHNhbWUg YXMgZm9yIGFuIHVudHlwZWQgdGFibGUuICBUaGUgb3V0LW9mLWxpbmUKKwkgKiBjb25zdHJhaW50 IGxvb3AgbGF0ZXIgc3RpbGwgc2tpcHMgQ0hFQ0tzLgorCSAqLworCWlmIChpbmNsdWRlX2NvbnN0 cmFpbnRzKQorCQlhcHBlbmRfaW5saW5lX2NoZWNrX2NvbnN0cmFpbnRzKCZpbm5lciwgcmVsLCBw cmV0dHksICZmaXJzdCk7CisKKwlpZiAoIWZpcnN0KQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsICIgKCIpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgaW5uZXIuZGF0 YSk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxuKSIp OworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CisJfQorCXBmcmVl KGlubmVyLmRhdGEpOworfQorCisvKgorICogYXBwZW5kX3N0bXQgLyBhcHBlbmRfc3RyaXBwZWRf c3RtdAorICoJCVB1c2ggY3R4LT5idWYgb250byBjdHgtPnN0YXRlbWVudHMuCisgKgorICogYXBw ZW5kX3N0bXQgaXMgdXNlZCBmb3IgZW1pc3Npb25zIHdoZXJlIHRoZSB0YWJsZSByZWZlcmVuY2Ug aXMgYnVpbHQKKyAqIGZyb20gY3R4LT5xdWFsbmFtZSAoYWxyZWFkeSBwYXJ0aWFsLXF1YWxpZmll ZCBwZXIgc2NoZW1hX3F1YWxpZmllZCkuCisgKiBhcHBlbmRfc3RyaXBwZWRfc3RtdCBpcyB1c2Vk IGFmdGVyIGludm9raW5nIGFsd2F5cy1xdWFsaWZpZWQgcnVsZXV0aWxzCisgKiBoZWxwZXJzIChw Z19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kLCBwZ19nZXRfaW5kZXhkZWZfc3RyaW5nLAorICog cGdfZ2V0X3J1bGVkZWYsIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZykg4oCUIHdoZW4K KyAqIHNjaGVtYV9xdWFsaWZpZWQgaXMgZmFsc2UsIHRoZSBiYXNlLXNjaGVtYSBwcmVmaXggaXMg c3RyaXBwZWQgZnJvbQorICogdGhlaXIgb3V0cHV0IHNvIHRoZSBlbWl0dGVkIERETCBpcyByZXBs YXktcmVsb2NhdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RtdChUYWJsZURkbENv bnRleHQgKiBjdHgpCit7CisJY3R4LT5zdGF0ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0YXRlbWVu dHMsIHBzdHJkdXAoY3R4LT5idWYuZGF0YSkpOworfQorCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0 cmlwcGVkX3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWlmIChjdHgtPnNjaGVtYV9w cmVmaXggIT0gTlVMTCkKKwkJY3R4LT5zdGF0ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0YXRlbWVu dHMsCisJCQkJCQkJCSAgc3RyaXBfc2NoZW1hX3ByZWZpeChjdHgtPmJ1Zi5kYXRhLAorCQkJCQkJ CQkJCQkJCSAgY3R4LT5zY2hlbWFfcHJlZml4KSk7CisJZWxzZQorCQljdHgtPnN0YXRlbWVudHMg PSBsYXBwZW5kKGN0eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7Cit9CisK Ky8qCisgKiBlbWl0X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRpbmcgQ1JF QVRFIFRBQkxFIHN0YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRFTVBPUkFS WSAvIFVOTE9HR0VEKSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLworICoJCVBB UlRJVElPTiBPRiBwYXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBtZXRob2Qs CisgKgkJV0lUSCAocmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQuCisgKi8K K3N0YXRpYyB2b2lkCitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqIGN0 eCkKK3sKKwlSZWxhdGlvbglyZWwgPSBjdHgtPnJlbDsKKwljaGFyCQlyZWxwZXJzaXN0ZW5jZSA9 IHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwljaGFyCQlyZWxraW5kID0gcmVsLT5yZF9y ZWwtPnJlbGtpbmQ7CisJYm9vbAkJaXNfdHlwZWQgPSBPaWRJc1ZhbGlkKHJlbC0+cmRfcmVsLT5y ZWxvZnR5cGUpOworCUhlYXBUdXBsZQljbGFzc3R1cDsKKwlEYXR1bQkJcmVsb3B0RGF0dW07CisJ Ym9vbAkJcmVsb3B0SXNudWxsOworCisJY2xhc3N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lE LCBPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo Y2xhc3N0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRp b24gJXUiLCBjdHgtPnJlbGlkKTsKKworCXJlbG9wdERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJF TE9JRCwgY2xhc3N0dXAsCisJCQkJCQkJCSAgQW51bV9wZ19jbGFzc19yZWxvcHRpb25zLCAmcmVs b3B0SXNudWxsKTsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiQ1JFQVRFICIpOworCWlmIChyZWxwZXJzaXN0ZW5jZSA9 PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1 ZiwgIlRFTVBPUkFSWSAiKTsKKwllbHNlIGlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9VTkxPR0dFRCkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICJVTkxP R0dFRCAiKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIlRBQkxFICVzIiwgY3R4LT5x dWFsbmFtZSk7CisKKwlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCXsKKwkJT2lk CQkJcGFyZW50T2lkID0gZ2V0X3BhcnRpdGlvbl9wYXJlbnQoY3R4LT5yZWxpZCwgdHJ1ZSk7CisJ CWNoYXIJICAgKnBhcmVudFF1YWwgPSBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChwYXJlbnRPaWQs CisJCQkJCQkJCQkJCQkJCSBjdHgtPnNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJCQkJCSBj dHgtPmJhc2VfbmFtZXNwYWNlKTsKKwkJY2hhcgkgICAqcGFyZW50UmVsbmFtZSA9IGdldF9yZWxf bmFtZShwYXJlbnRPaWQpOworCQlEYXR1bQkJYm91bmREYXR1bTsKKwkJYm9vbAkJYm91bmRJc251 bGw7CisJCWNoYXIJICAgKmZvclZhbHVlcyA9IE5VTEw7CisJCWNoYXIJICAgKmJvdW5kU3RyID0g TlVMTDsKKworCQlpZiAocGFyZW50UmVsbmFtZSA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1zZygi cGFydGl0aW9uIHBhcmVudCB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJcGFy ZW50T2lkKSwKKwkJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkg ZHJvcHBlZC4iKSkpOworCisJCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVMT0lELCBj bGFzc3R1cCwKKwkJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwgJmJvdW5kSXNu dWxsKTsKKwkJaWYgKCFib3VuZElzbnVsbCkKKwkJeworCQkJTm9kZQkgICAqYm91bmROb2RlOwor CQkJTGlzdAkgICAqZHBjb250ZXh0OworCisJCQlib3VuZFN0ciA9IFRleHREYXR1bUdldENTdHJp bmcoYm91bmREYXR1bSk7CisJCQlib3VuZE5vZGUgPSBzdHJpbmdUb05vZGUoYm91bmRTdHIpOwor CQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihwYXJlbnRSZWxuYW1lLCBwYXJlbnRP aWQpOworCQkJZm9yVmFsdWVzID0gZGVwYXJzZV9leHByZXNzaW9uKGJvdW5kTm9kZSwgZHBjb250 ZXh0LCBmYWxzZSwgZmFsc2UpOworCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYs ICIgUEFSVElUSU9OIE9GICVzICVzIiwKKwkJCQkJCSBwYXJlbnRRdWFsLCBmb3JWYWx1ZXMgPyBm b3JWYWx1ZXMgOiAiREVGQVVMVCIpOworCQlpZiAoZm9yVmFsdWVzKQorCQkJcGZyZWUoZm9yVmFs dWVzKTsKKwkJaWYgKGJvdW5kU3RyKQorCQkJcGZyZWUoYm91bmRTdHIpOworCQlwZnJlZShwYXJl bnRRdWFsKTsKKwkJcGZyZWUocGFyZW50UmVsbmFtZSk7CisJfQorCWVsc2UgaWYgKGlzX3R5cGVk KQorCXsKKwkJY2hhcgkgICAqdHlwbmFtZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChyZWwt PnJkX3JlbC0+cmVsb2Z0eXBlKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBP RiAlcyIsIHR5cG5hbWUpOworCQlwZnJlZSh0eXBuYW1lKTsKKworCQlhcHBlbmRfdHlwZWRfY29s dW1uX292ZXJyaWRlcygmY3R4LT5idWYsIHJlbCwgY3R4LT5wcmV0dHksCisJCQkJCQkJCQkgIGN0 eC0+aW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCQkJCSAgY3R4LT5ubl9lbnRyaWVzKTsKKwl9 CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcGFyZW50czsKKwkJTGlzdENlbGwgICAqbGM7CisJCWJv b2wJCWZpcnN0OworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiICgiKTsK KworCQlhcHBlbmRfY29sdW1uX2RlZnMoJmN0eC0+YnVmLCByZWwsIGN0eC0+cHJldHR5LAorCQkJ CQkJICAgY3R4LT5pbmNsdWRlX2NvbnN0cmFpbnRzLAorCQkJCQkJICAgY3R4LT5zY2hlbWFfcXVh bGlmaWVkLCBjdHgtPm5uX2VudHJpZXMpOworCisJCWlmIChjdHgtPnByZXR0eSkKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiXG4pIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJyknKTsKKworCQlwYXJlbnRzID0gZ2V0X2luaGVyaXRh bmNlX3BhcmVudHMoY3R4LT5yZWxpZCk7CisJCWlmIChwYXJlbnRzICE9IE5JTCkKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgSU5IRVJJVFMgKCIpOworCQkJZmly c3QgPSB0cnVlOworCQkJZm9yZWFjaChsYywgcGFyZW50cykKKwkJCXsKKwkJCQlPaWQJCQlwb2lk ID0gbGZpcnN0X29pZChsYyk7CisJCQkJY2hhcgkgICAqcG5hbWUgPSBsb29rdXBfcmVsbmFtZV9m b3JfZW1pdChwb2lkLAorCQkJCQkJCQkJCQkJCQkJY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJ CQkJCQkJCQkJCQkJY3R4LT5iYXNlX25hbWVzcGFjZSk7CisKKwkJCQlpZiAoIWZpcnN0KQorCQkJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiwgIik7CisJCQkJZmlyc3QgPSBm YWxzZTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgcG5hbWUpOworCQkJ CXBmcmVlKHBuYW1lKTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1Ziwg JyknKTsKKwkJCWxpc3RfZnJlZShwYXJlbnRzKTsKKwkJfQorCX0KKworCWlmIChyZWxraW5kID09 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlEYXR1bQkJcGFydGtleURhdHVtOwor CQljaGFyCSAgICpwYXJ0a2V5OworCisJCXBhcnRrZXlEYXR1bSA9IE9pZEZ1bmN0aW9uQ2FsbDEo Rl9QR19HRVRfUEFSVEtFWURFRiwKKwkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVs aWQpKTsKKwkJcGFydGtleSA9IFRleHREYXR1bUdldENTdHJpbmcocGFydGtleURhdHVtKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgUEFSVElUSU9OIEJZICVzIiwgcGFydGtleSk7 CisJCXBmcmVlKHBhcnRrZXkpOworCX0KKworCWlmIChPaWRJc1ZhbGlkKHJlbC0+cmRfcmVsLT5y ZWxhbSkgJiYKKwkJcmVsLT5yZF9yZWwtPnJlbGFtICE9IEhFQVBfVEFCTEVfQU1fT0lEKQorCXsK KwkJY2hhcgkgICAqYW1uYW1lID0gZ2V0X2FtX25hbWUocmVsLT5yZF9yZWwtPnJlbGFtKTsKKwor CQlpZiAoYW1uYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LCAiIFVTSU5HICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihhbW5hbWUpKTsKKwkJCXBm cmVlKGFtbmFtZSk7CisJCX0KKwl9CisKKwlpZiAoIXJlbG9wdElzbnVsbCkKKwl7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIFdJVEggKCIpOworCQlnZXRfcmVsb3B0aW9u cygmY3R4LT5idWYsIHJlbG9wdERhdHVtKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmN0eC0+ YnVmLCAnKScpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShjbGFzc3R1cCk7CisKKwlpZiAoIWN0 eC0+bm9fdGFibGVzcGFjZSAmJiBPaWRJc1ZhbGlkKHJlbC0+cmRfcmVsLT5yZWx0YWJsZXNwYWNl KSkKKwl7CisJCWNoYXIJICAgKnRzbmFtZSA9IGdldF90YWJsZXNwYWNlX25hbWUocmVsLT5yZF9y ZWwtPnJlbHRhYmxlc3BhY2UpOworCisJCWlmICh0c25hbWUgIT0gTlVMTCkKKwkJeworCQkJYXBw ZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIgVEFCTEVTUEFDRSAlcyIsCisJCQkJCQkJIHF1b3Rl X2lkZW50aWZpZXIodHNuYW1lKSk7CisJCQlwZnJlZSh0c25hbWUpOworCQl9CisJfQorCisJaWYg KHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJeworCQlPbkNvbW1pdEFj dGlvbiBvYyA9IGdldF9vbl9jb21taXRfYWN0aW9uKGN0eC0+cmVsaWQpOworCisJCWlmIChvYyA9 PSBPTkNPTU1JVF9ERUxFVEVfUk9XUykKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+ YnVmLCAiIE9OIENPTU1JVCBERUxFVEUgUk9XUyIpOworCQllbHNlIGlmIChvYyA9PSBPTkNPTU1J VF9EUk9QKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgT04gQ09NTUlU IERST1AiKTsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICc7Jyk7CisJ YXBwZW5kX3N0bXQoY3R4KTsKK30KKworLyoKKyAqIGVtaXRfb3duZXJfc3RtdAorICoJCUFMVEVS IFRBQkxFIHF1YWxuYW1lIE9XTkVSIFRPIHJvbGUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X293 bmVyX3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWNoYXIJICAgKm93bmVyOworCisJ aWYgKGN0eC0+bm9fb3duZXIpCisJCXJldHVybjsKKworCW93bmVyID0gR2V0VXNlck5hbWVGcm9t SWQoY3R4LT5yZWwtPnJkX3JlbC0+cmVsb3duZXIsIGZhbHNlKTsKKwlyZXNldFN0cmluZ0luZm8o JmN0eC0+YnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIkFMVEVSIFRBQkxFICVz IE9XTkVSIFRPICVzOyIsCisJCQkJCSBjdHgtPnF1YWxuYW1lLCBxdW90ZV9pZGVudGlmaWVyKG93 bmVyKSk7CisJYXBwZW5kX3N0bXQoY3R4KTsKKwlwZnJlZShvd25lcik7Cit9CisKKy8qCisgKiBl bWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzCisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgQUxU RVIgQ09MVU1OIGNvbCBTRVQgREVGQVVMVCBleHByIOKAlCBvbmUgcGVyCisgKgkJaW5oZXJpdGVk IChhdHRpc2xvY2FsPWZhbHNlKSBub24tZ2VuZXJhdGVkIGNvbHVtbiBjYXJyeWluZyBhCisgKgkJ bG9jYWxseS1zZXQgZGVmYXVsdC4gIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBza2lwcGVkOiB0aGVp cgorICoJCWV4cHJlc3Npb24gaXMgaW5oZXJpdGVkIGF1dG9tYXRpY2FsbHkgYW5kIFNFVCBERUZB VUxUIHdvdWxkCisgKgkJZmFpbCBhdCByZXBsYXkuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2No aWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlUdXBsZURl c2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoY3R4LT5yZWwpOworCUxpc3QJICAgKmRwY29u dGV4dCA9IE5JTDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykK Kwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7 CisJCWNoYXIJICAgKmRlZnN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5h dHRpc2xvY2FsIHx8ICFhdHQtPmF0dGhhc2RlZikKKwkJCWNvbnRpbnVlOworCQlpZiAoYXR0LT5h dHRnZW5lcmF0ZWQgIT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCisJCWRlZnN0ciA9IGZpbmRfYXR0 cmRlZl90ZXh0KGN0eC0+cmVsLCBhdHQtPmF0dG51bSwgJmRwY29udGV4dCk7CisJCWlmIChkZWZz dHIgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYp OworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMg QUxURVIgQ09MVU1OICVzIFNFVCBERUZBVUxUICVzOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSwK KwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSksCisJCQkJCQkg ZGVmc3RyKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUoZGVmc3RyKTsKKwl9Cit9CisK Ky8qCisgKiBlbWl0X2F0dG9wdGlvbnMKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBD T0xVTU4gY29sIFNFVCAoLi4uKSDigJQgb25lIHBlciBjb2x1bW4KKyAqCQl3aXRoIG5vbi1udWxs IHBnX2F0dHJpYnV0ZS5hdHRvcHRpb25zLiAgVGhlIGlubGluZSBmb3JtIG9mIHRoZXNlCisgKgkJ b3B0aW9ucyBpc24ndCBhdmFpbGFibGUgaW4gQ1JFQVRFIFRBQkxFLCBzbyB0aGV5IGNvbWUgb3V0 IGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2F0dG9wdGlvbnMoVGFibGVEZGxDb250ZXh0 ICogY3R4KQoreworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJl bCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQlIZWFw VHVwbGUJYXR0VHVwOworCQlEYXR1bQkJb3B0RGF0dW07CisJCWJvb2wJCW9wdElzbnVsbDsKKwor CQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlhdHRUdXAgPSBTZWFy Y2hTeXNDYWNoZTIoQVRUTlVNLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlk KSwKKwkJCQkJCQkJIEludDE2R2V0RGF0dW0oYXR0LT5hdHRudW0pKTsKKwkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGF0dFR1cCkpCisJCQljb250aW51ZTsKKworCQlvcHREYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihBVFROVU0sIGF0dFR1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19hdHRyaWJ1dGVfYXR0 b3B0aW9ucywgJm9wdElzbnVsbCk7CisJCWlmICghb3B0SXNudWxsKQorCQl7CisJCQlyZXNldFN0 cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJ CQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIgQ09MVU1OICVzIFNFVCAoIiwKKwkJCQkJCQkgY3R4 LT5xdWFsbmFtZSwKKwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFt ZSkpKTsKKwkJCWdldF9yZWxvcHRpb25zKCZjdHgtPmJ1Ziwgb3B0RGF0dW0pOworCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIpOyIpOworCQkJYXBwZW5kX3N0bXQoY3R4KTsK KwkJfQorCQlSZWxlYXNlU3lzQ2FjaGUoYXR0VHVwKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X2lu ZGV4ZXMKKyAqCQlDUkVBVEUgSU5ERVggcGVyIG5vbi1jb25zdHJhaW50LWJhY2tlZCBpbmRleCBv biB0aGUgcmVsYXRpb24uCisgKgkJSW5kZXhlcyB0aGF0IGJhY2sgUEsgLyBVTklRVUUgLyBFWENM VURFIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkCisgKgkJb3V0LW9mLWxpbmUgYnkgZW1pdF9sb2Nh bF9jb25zdHJhaW50cyAodGhlIEFMVEVSIFRBQkxFIOKApiBBREQKKyAqCQlDT05TVFJBSU5UIHN0 YXRlbWVudCBjcmVhdGVzIHRoZSBpbmRleCBpbXBsaWNpdGx5KS4KKyAqLworc3RhdGljIHZvaWQK K2VtaXRfaW5kZXhlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJTGlzdAkgICAqaW5kZXhv aWRzOworCUxpc3RDZWxsICAgKmxjOworCisJaWYgKCFjdHgtPmluY2x1ZGVfaW5kZXhlcykKKwkJ cmV0dXJuOworCisJaW5kZXhvaWRzID0gUmVsYXRpb25HZXRJbmRleExpc3QoY3R4LT5yZWwpOwor CWZvcmVhY2gobGMsIGluZGV4b2lkcykKKwl7CisJCU9pZAkJCWlkeG9pZCA9IGxmaXJzdF9vaWQo bGMpOworCQljaGFyCSAgICppZHhkZWY7CisKKwkJaWYgKE9pZElzVmFsaWQoZ2V0X2luZGV4X2Nv bnN0cmFpbnQoaWR4b2lkKSkpCisJCQljb250aW51ZTsKKworCQlpZHhkZWYgPSBwZ19nZXRfaW5k ZXhkZWZfc3RyaW5nKGlkeG9pZCk7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlh cHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiVzOyIsIGlkeGRlZik7CisJCWFwcGVuZF9zdHJp cHBlZF9zdG10KGN0eCk7CisJCXBmcmVlKGlkeGRlZik7CisJfQorCWxpc3RfZnJlZShpbmRleG9p ZHMpOworfQorCisvKgorICogZW1pdF9sb2NhbF9jb25zdHJhaW50cworICoJCUFMVEVSIFRBQkxF IOKApiBBREQgQ09OU1RSQUlOVCBmb3IgZWFjaCBsb2NhbGx5LWRlZmluZWQgY29uc3RyYWludAor ICoJCW9uIHRoZSByZWxhdGlvbi4gIEluaGVyaXRlZCBjb25zdHJhaW50cyAoY29uaXNsb2NhbD1m YWxzZSkgY29tZQorICoJCWZyb20gdGhlIHBhcmVudCdzIERETC4gIENIRUNLIGNvbnN0cmFpbnRz IGFyZSBlbWl0dGVkIGlubGluZSBmb3IKKyAqCQlyZWd1bGFyL3R5cGVkIHRhYmxlcyAoc2tpcCBo ZXJlKSBidXQgb3V0LW9mLWxpbmUgZm9yIHBhcnRpdGlvbgorICoJCWNoaWxkcmVuIChubyBjb2x1 bW4gbGlzdCB0byBsaXZlIGluKS4gIFVzZXItbmFtZWQgTk9UIE5VTEwKKyAqCQljb25zdHJhaW50 cyBhcmUgZW1pdHRlZCBpbmxpbmUgYnkgdGhlIGNvbHVtbi1lbWl0IGhlbHBlcnMgYW5kCisgKgkJ YXJlIHNraXBwZWQgdmlhIHNraXBfbm90bnVsbF9vaWRzOyBhdXRvLW5hbWVkIE5PVCBOVUxMcyBm YWxsCisgKgkJdGhyb3VnaCBoZXJlIGFuZCBhcmUgZGVkdXAnZCBieSBuYW1lIGF0IHJlcGxheS4K KyAqLworc3RhdGljIHZvaWQKK2VtaXRfbG9jYWxfY29uc3RyYWludHMoVGFibGVEZGxDb250ZXh0 ICogY3R4KQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTeXNTY2FuRGVzYyBjb25TY2FuOworCVNj YW5LZXlEYXRhIGNvbktleTsKKwlIZWFwVHVwbGUJY29uVHVwOworCWJvb2wJCWlzX3BhcnRpdGlv biA9IGN0eC0+cmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uOworCisJaWYgKCFjdHgtPmluY2x1 ZGVfY29uc3RyYWludHMpCisJCXJldHVybjsKKworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3Ry YWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmNvbktleSwK KwkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOworCWNvblNj YW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJ bmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwgMSwgJmNvbktleSk7CisKKwl3aGlsZSAoSGVh cFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNvblNjYW4pKSkKKwl7CisJ CUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1Qo Y29uVHVwKTsKKwkJY2hhcgkgICAqY29uZGVmOworCisJCWlmICghY29uLT5jb25pc2xvY2FsKQor CQkJY29udGludWU7CisJCWlmIChjb24tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9DSEVDSyAmJiAh aXNfcGFydGl0aW9uKQorCQkJY29udGludWU7CisJCWlmIChjb24tPmNvbnR5cGUgPT0gQ09OU1RS QUlOVF9OT1ROVUxMICYmICFpc19wYXJ0aXRpb24gJiYKKwkJCWxpc3RfbWVtYmVyX29pZChjdHgt PnNraXBfbm90bnVsbF9vaWRzLCBjb24tPm9pZCkpCisJCQljb250aW51ZTsKKworCQljb25kZWYg PSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kKGNvbi0+b2lkKTsKKwkJcmVzZXRTdHJpbmdJ bmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7IiwgY29u ZGVmKTsKKwkJYXBwZW5kX3N0cmlwcGVkX3N0bXQoY3R4KTsKKwkJcGZyZWUoY29uZGVmKTsKKwl9 CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vz c1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBlbWl0X3J1bGVzCisgKgkJQ1JFQVRFIFJVTEUgcGVy IGNhY2hlZCByZXdyaXRlIHJ1bGUgb24gdGhlIHJlbGF0aW9uLgorICovCitzdGF0aWMgdm9pZAor ZW1pdF9ydWxlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJaWYgKCFjdHgtPmluY2x1ZGVf cnVsZXMgfHwgY3R4LT5yZWwtPnJkX3J1bGVzID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAo aW50IGkgPSAwOyBpIDwgY3R4LT5yZWwtPnJkX3J1bGVzLT5udW1Mb2NrczsgaSsrKQorCXsKKwkJ T2lkCQkJcnVsZWlkID0gY3R4LT5yZWwtPnJkX3J1bGVzLT5ydWxlc1tpXS0+cnVsZUlkOworCQlE YXR1bQkJcnVsZWRlZjsKKwkJY2hhcgkgICAqcnVsZWRlZl9zdHI7CisKKwkJcnVsZWRlZiA9IE9p ZEZ1bmN0aW9uQ2FsbDEoRl9QR19HRVRfUlVMRURFRl9PSUQsCisJCQkJCQkJCSAgIE9iamVjdElk R2V0RGF0dW0ocnVsZWlkKSk7CisJCXJ1bGVkZWZfc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhy dWxlZGVmKTsKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmN0eC0+YnVmLCBydWxlZGVmX3N0cik7CisJCWFwcGVuZF9zdHJpcHBlZF9zdG10 KGN0eCk7CisJCXBmcmVlKHJ1bGVkZWZfc3RyKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3N0YXRp c3RpY3MKKyAqCQlDUkVBVEUgU1RBVElTVElDUyBwZXIgZXh0ZW5kZWQgc3RhdGlzdGljcyBvYmpl Y3Qgb24gdGhlIHJlbGF0aW9uLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9zdGF0aXN0aWNzKFRh YmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlSZWxhdGlvbglzdGF0UmVsOworCVN5c1NjYW5EZXNj IHN0YXRTY2FuOworCVNjYW5LZXlEYXRhIHN0YXRLZXk7CisJSGVhcFR1cGxlCXN0YXRUdXA7CisK KwlpZiAoIWN0eC0+aW5jbHVkZV9zdGF0aXN0aWNzKQorCQlyZXR1cm47CisKKwlzdGF0UmVsID0g dGFibGVfb3BlbihTdGF0aXN0aWNFeHRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNj YW5LZXlJbml0KCZzdGF0S2V5LAorCQkJCUFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhyZWxpZCwK KwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1 bShjdHgtPnJlbGlkKSk7CisJc3RhdFNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oc3RhdFJlbCwg U3RhdGlzdGljRXh0UmVsaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZzdGF0 S2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHN0YXRUdXAgPSBzeXN0YWJsZV9nZXRu ZXh0KHN0YXRTY2FuKSkpCisJeworCQlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdCA9IChGb3Jt X3BnX3N0YXRpc3RpY19leHQpIEdFVFNUUlVDVChzdGF0VHVwKTsKKwkJY2hhcgkgICAqc3RhdGRl ZiA9IHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyhzdGF0LT5vaWQpOworCisJCXJlc2V0 U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiVz OyIsIHN0YXRkZWYpOworCQlhcHBlbmRfc3RyaXBwZWRfc3RtdChjdHgpOworCQlwZnJlZShzdGF0 ZGVmKTsKKwl9CisJc3lzdGFibGVfZW5kc2NhbihzdGF0U2Nhbik7CisJdGFibGVfY2xvc2Uoc3Rh dFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKworLyoKKyAqIGVtaXRfcmVwbGljYV9pZGVudGl0 eQorICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIFJFUExJQ0EgSURFTlRJVFkg4oCmIOKAlCBlbWl0 dGVkIG9ubHkgd2hlbiB0aGUKKyAqCQlyZWxyZXBsaWRlbnQgZGlmZmVycyBmcm9tIHRoZSBkZWZh dWx0ICgnZCcgPSB1c2UgcHJpbWFyeSBrZXkpLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9yZXBs aWNhX2lkZW50aXR5KFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlpZiAoIWN0eC0+aW5jbHVk ZV9yZXBsaWNhX2lkZW50aXR5KQorCQlyZXR1cm47CisJaWYgKGN0eC0+cmVsLT5yZF9yZWwtPnJl bHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQpCisJCXJldHVybjsKKworCXJl c2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCXN3aXRjaCAoY3R4LT5yZWwtPnJkX3JlbC0+cmVs cmVwbGlkZW50KQorCXsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX05PVEhJTkc6CisJCQlhcHBl bmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxFICVzIFJFUExJQ0Eg SURFTlRJVFkgTk9USElORzsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJCWFwcGVuZF9z dG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQlh cHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFMVEVSIFRBQkxFICVzIFJFUExJ Q0EgSURFTlRJVFkgRlVMTDsiLAorCQkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJCWFwcGVuZF9z dG10KGN0eCk7CisJCQlicmVhazsKKwkJY2FzZSBSRVBMSUNBX0lERU5USVRZX0lOREVYOgorCQkJ eworCQkJCU9pZAkJCXJlcGxpZHggPSBSZWxhdGlvbkdldFJlcGxpY2FJbmRleChjdHgtPnJlbCk7 CisKKwkJCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJCQl7CisJCQkJCWNoYXIJICAgKmlk eG5hbWUgPSBnZXRfcmVsX25hbWUocmVwbGlkeCk7CisKKwkJCQkJaWYgKGlkeG5hbWUgPT0gTlVM TCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJ TkVEX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2coInJlcGxpY2EgaWRlbnRpdHkgaW5kZXggd2l0 aCBPSUQgJXUgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJCQkJCXJlcGxpZHgpLAorCQkJCQkJCQkg ZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7CisK KwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkJCQkgIkFMVEVSIFRBQkxF ICVzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggJXM7IiwKKwkJCQkJCQkJCSBjdHgtPnF1 YWxuYW1lLAorCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaWR4bmFtZSkpOworCQkJCQlhcHBl bmRfc3RtdChjdHgpOworCQkJCQlwZnJlZShpZHhuYW1lKTsKKwkJCQl9CisJCQl9CisJCQlicmVh azsKKwl9Cit9CisKKy8qCisgKiBlbWl0X3Jsc190b2dnbGVzCisgKgkJQUxURVIgVEFCTEUgcXVh bG5hbWUgRU5BQkxFIC8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLgorICovCitzdGF0aWMgdm9p ZAorZW1pdF9ybHNfdG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJaWYgKCFjdHgt PmluY2x1ZGVfcmxzKQorCQlyZXR1cm47CisKKwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+cmVscm93 c2VjdXJpdHkpCisJeworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmY3R4LT5idWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFICVzIEVOQUJMRSBST1cgTEVW RUwgU0VDVVJJVFk7IiwKKwkJCQkJCSBjdHgtPnF1YWxuYW1lKTsKKwkJYXBwZW5kX3N0bXQoY3R4 KTsKKwl9CisJaWYgKGN0eC0+cmVsLT5yZF9yZWwtPnJlbGZvcmNlcm93c2VjdXJpdHkpCisJewor CQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5i dWYsCisJCQkJCQkgIkFMVEVSIFRBQkxFICVzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAor CQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQlhcHBlbmRfc3RtdChjdHgpOworCX0KK30KKworLyoK KyAqIGVtaXRfcGFydGl0aW9uX2NoaWxkcmVuCisgKgkJRm9yIGVhY2ggZGlyZWN0IHBhcnRpdGlv biBjaGlsZCBvZiBhIHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudCwKKyAqCQlyZWN1cnNpdmVseSBj YWxsIHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwgYW5kIGFwcGVuZCB0aGUgY2hpbGQncworICoJ CXN0YXRlbWVudHMuICBFYWNoIGNoaWxkJ3Mgb3duIERETCBoYW5kbGVzIGZ1cnRoZXIgbGV2ZWxz IHRocm91Z2gKKyAqCQl0aGUgc2FtZSByZWN1cnNpb24uCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0 X3BhcnRpdGlvbl9jaGlsZHJlbihUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJTGlzdAkgICAq Y2hpbGRyZW47CisJTGlzdENlbGwgICAqbGM7CisKKwlpZiAoIWN0eC0+aW5jbHVkZV9wYXJ0aXRp b24gfHwKKwkJY3R4LT5yZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCQlyZXR1cm47CisKKwljaGlsZHJlbiA9IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRy ZW4oY3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlmb3JlYWNoKGxjLCBjaGlsZHJlbikK Kwl7CisJCU9pZAkJCWNoaWxkb2lkID0gbGZpcnN0X29pZChsYyk7CisJCUxpc3QJICAgKmNoaWxk c3RtdHM7CisKKwkJY2hpbGRzdG10cyA9IHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoY2hpbGRv aWQsIGN0eC0+cHJldHR5LAorCQkJCQkJCQkJCQkgICBjdHgtPm5vX293bmVyLAorCQkJCQkJCQkJ CQkgICBjdHgtPm5vX3RhYmxlc3BhY2UsCisJCQkJCQkJCQkJCSAgIGN0eC0+aW5jbHVkZV9pbmRl eGVzLAorCQkJCQkJCQkJCQkgICBjdHgtPmluY2x1ZGVfY29uc3RyYWludHMsCisJCQkJCQkJCQkJ CSAgIGN0eC0+aW5jbHVkZV9ydWxlcywKKwkJCQkJCQkJCQkJICAgY3R4LT5pbmNsdWRlX3N0YXRp c3RpY3MsCisJCQkJCQkJCQkJCSAgIGN0eC0+aW5jbHVkZV90cmlnZ2VycywKKwkJCQkJCQkJCQkJ ICAgY3R4LT5pbmNsdWRlX3BvbGljaWVzLAorCQkJCQkJCQkJCQkgICBjdHgtPmluY2x1ZGVfcmxz LAorCQkJCQkJCQkJCQkgICBjdHgtPmluY2x1ZGVfcmVwbGljYV9pZGVudGl0eSwKKwkJCQkJCQkJ CQkJICAgY3R4LT5pbmNsdWRlX3BhcnRpdGlvbiwKKwkJCQkJCQkJCQkJICAgY3R4LT5zY2hlbWFf cXVhbGlmaWVkKTsKKwkJY3R4LT5zdGF0ZW1lbnRzID0gbGlzdF9jb25jYXQoY3R4LT5zdGF0ZW1l bnRzLCBjaGlsZHN0bXRzKTsKKwl9CisJbGlzdF9mcmVlKGNoaWxkcmVuKTsKK30KKworLyoKKyAq IHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwKKyAqCQlHZW5lcmF0ZSBEREwgc3RhdGVtZW50cyB0 byByZWNyZWF0ZSBhIHJlZ3VsYXIgb3IgcGFydGl0aW9uZWQgdGFibGUuCisgKgorICogVGhlIGZp cnN0IGxpc3QgZWxlbWVudCBpcyB0aGUgQ1JFQVRFIFRBQkxFIHN0YXRlbWVudC4gIFN1YnNlcXVl bnQKKyAqIGVsZW1lbnRzIGFyZSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLyBDUkVB VEUgUlVMRSAvCisgKiBDUkVBVEUgU1RBVElTVElDUyBzdGF0ZW1lbnRzIG5lZWRlZCB0byByZXN0 b3JlIHRoZSB0YWJsZSdzIGZ1bGwKKyAqIGRlZmluaXRpb24uCisgKgorICogVHJpZ2dlciBhbmQg cG9saWN5IGVtaXNzaW9uIGFyZSBzY2FmZm9sZGVkIGJ1dCBjdXJyZW50bHkgZGlzYWJsZWQKKyAq ICgjaWYgMCkg4oCUIHRoZXkgd2lsbCBiZWNvbWUgYSBzaW5nbGUgaGVscGVyIGNhbGwgb25jZSB0 aGUgc3RhbmRhbG9uZQorICogcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwg aGVscGVycyBsYW5kLgorICovCitzdGF0aWMgTGlzdCAqCitwZ19nZXRfdGFibGVfZGRsX2ludGVy bmFsKE9pZCByZWxpZCwgYm9vbCBwcmV0dHksCisJCQkJCQkgIGJvb2wgbm9fb3duZXIsIGJvb2wg bm9fdGFibGVzcGFjZSwKKwkJCQkJCSAgYm9vbCBpbmNsdWRlX2luZGV4ZXMsCisJCQkJCQkgIGJv b2wgaW5jbHVkZV9jb25zdHJhaW50cywKKwkJCQkJCSAgYm9vbCBpbmNsdWRlX3J1bGVzLAorCQkJ CQkJICBib29sIGluY2x1ZGVfc3RhdGlzdGljcywKKwkJCQkJCSAgYm9vbCBpbmNsdWRlX3RyaWdn ZXJzLAorCQkJCQkJICBib29sIGluY2x1ZGVfcG9saWNpZXMsCisJCQkJCQkgIGJvb2wgaW5jbHVk ZV9ybHMsCisJCQkJCQkgIGJvb2wgaW5jbHVkZV9yZXBsaWNhX2lkZW50aXR5LAorCQkJCQkJICBi b29sIGluY2x1ZGVfcGFydGl0aW9uLAorCQkJCQkJICBib29sIHNjaGVtYV9xdWFsaWZpZWQpCit7 CisJVGFibGVEZGxDb250ZXh0IGN0eCA9IHswfTsKKwlSZWxhdGlvbglyZWw7CisJY2hhcgkJcmVs a2luZDsKKwlBY2xSZXN1bHQJYWNscmVzdWx0OworCisJcmVsID0gdGFibGVfb3BlbihyZWxpZCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+cmVsa2luZDsKKwor CS8qCisJICogVGhlIGluaXRpYWwgY3V0IG9ubHkgc3VwcG9ydHMgb3JkaW5hcnkgYW5kIHBhcnRp dGlvbmVkIHRhYmxlcy4gIFZpZXdzLAorCSAqIG1hdHZpZXdzLCBmb3JlaWduIHRhYmxlcywgc2Vx dWVuY2VzLCBpbmRleGVzLCBjb21wb3NpdGUgdHlwZXMsIGFuZAorCSAqIFRPQVNUIHRhYmxlcyBh cmUgb3V0IG9mIHNjb3BlIGZvciBub3cuCisJICovCisJaWYgKHJlbGtpbmQgIT0gUkVMS0lORF9S RUxBVElPTiAmJiByZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJeworCQlj aGFyCSAgICpyZWxuYW1lID0gcHN0cmR1cChSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsK KworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJIGVycm1zZygi XCIlc1wiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJsZSIsCisJCQkJCQly ZWxuYW1lKSkpOworCX0KKworCS8qIENhbGxlciBuZWVkcyBTRUxFQ1Qgb24gdGhlIHRhYmxlIHRv IHJlYWQgaXRzIGRlZmluaXRpb24uICovCisJYWNscmVzdWx0ID0gcGdfY2xhc3NfYWNsY2hlY2so cmVsaWQsIEdldFVzZXJJZCgpLCBBQ0xfU0VMRUNUKTsKKwlpZiAoYWNscmVzdWx0ICE9IEFDTENI RUNLX09LKQorCQlhY2xjaGVja19lcnJvcihhY2xyZXN1bHQsIE9CSkVDVF9UQUJMRSwKKwkJCQkJ ICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisKKwljdHgucmVsID0gcmVsOworCWN0 eC5yZWxpZCA9IHJlbGlkOworCWN0eC5wcmV0dHkgPSBwcmV0dHk7CisJY3R4Lm5vX293bmVyID0g bm9fb3duZXI7CisJY3R4Lm5vX3RhYmxlc3BhY2UgPSBub190YWJsZXNwYWNlOworCWN0eC5pbmNs dWRlX2luZGV4ZXMgPSBpbmNsdWRlX2luZGV4ZXM7CisJY3R4LmluY2x1ZGVfY29uc3RyYWludHMg PSBpbmNsdWRlX2NvbnN0cmFpbnRzOworCWN0eC5pbmNsdWRlX3J1bGVzID0gaW5jbHVkZV9ydWxl czsKKwljdHguaW5jbHVkZV9zdGF0aXN0aWNzID0gaW5jbHVkZV9zdGF0aXN0aWNzOworCWN0eC5p bmNsdWRlX3RyaWdnZXJzID0gaW5jbHVkZV90cmlnZ2VyczsKKwljdHguaW5jbHVkZV9wb2xpY2ll cyA9IGluY2x1ZGVfcG9saWNpZXM7CisJY3R4LmluY2x1ZGVfcmxzID0gaW5jbHVkZV9ybHM7CisJ Y3R4LmluY2x1ZGVfcmVwbGljYV9pZGVudGl0eSA9IGluY2x1ZGVfcmVwbGljYV9pZGVudGl0eTsK KwljdHguaW5jbHVkZV9wYXJ0aXRpb24gPSBpbmNsdWRlX3BhcnRpdGlvbjsKKwljdHguc2NoZW1h X3F1YWxpZmllZCA9IHNjaGVtYV9xdWFsaWZpZWQ7CisJY3R4LmJhc2VfbmFtZXNwYWNlID0gUmVs YXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwljdHguc2F2ZV9uZXN0bGV2ZWwgPSAtMTsKKwljdHgu cXVhbG5hbWUgPSBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChyZWxpZCwgc2NoZW1hX3F1YWxpZmll ZCwKKwkJCQkJCQkJCQkgICBjdHguYmFzZV9uYW1lc3BhY2UpOworCisJLyoKKwkgKiBXaGVuIHNj aGVtYV9xdWFsaWZpZWQgaXMgZmFsc2UsIG5hcnJvdyB0aGUgYWN0aXZlIHNlYXJjaF9wYXRoIHRv IHRoZQorCSAqIHRhcmdldCB0YWJsZSdzIG93biBuYW1lc3BhY2UgZm9yIHRoZSBkdXJhdGlvbiBv ZiBEREwgZW1pc3Npb24uICBUaGUKKwkgKiBkZXBhcnNlIGNvZGUgaW4gcnVsZXV0aWxzIChhbmQg dGhlIHJlZ2NsYXNzL3JlZ3Byb2Mgb3V0cHV0IGZ1bmN0aW9ucyB3ZQorCSAqIHRyYW5zaXRpdmVs eSBjYWxsKSBkZWNpZGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgYSBuYW1lIGJhc2VkIG9u CisJICogd2hldGhlciB0aGUgcmVmZXJlbmNlZCBvYmplY3QgaXMgcmVhY2hhYmxlIHRocm91Z2gg c2VhcmNoX3BhdGgsIHNvIHRoaXMKKwkgKiBtYWtlcyBzYW1lLXNjaGVtYSByZWZlcmVuY2VzIGlu IERFRkFVTFQgYW5kIENIRUNLIGV4cHJlc3Npb25zLCByZWdjbGFzcworCSAqIGxpdGVyYWxzLCBG SyB0YXJnZXRzLCBldGMuIGNvbWUgb3V0IHVucXVhbGlmaWVkLiAgQ3Jvc3Mtc2NoZW1hCisJICog cmVmZXJlbmNlcyBzdGF5IHF1YWxpZmllZCwgd2hpY2ggaXMgdGhlIGNvcnJlY3RuZXNzIHJlcXVp cmVtZW50LgorCSAqIEF0RU9YYWN0X0dVQyBjbGVhbnMgdXAgYXQgeGFjdCBlbmQgaWYgYW55dGhp bmcgdGhyb3dzIGJldHdlZW4gaGVyZSBhbmQKKwkgKiB0aGUgZXhwbGljaXQgcmVzdG9yZSBiZWxv dzsgb24gdGhlIG5vcm1hbCBwYXRoIHdlIHJlc3RvcmUgcmlnaHQgYmVmb3JlCisJICogcmV0dXJu aW5nLgorCSAqCisJICogUHJlLWNvbXB1dGUgIjxzY2hlbWE+LiIgdG9vIOKAlCB0aGUgYWx3YXlz LXF1YWxpZmllZCBoZWxwZXJzCisJICogKGNvbnN0cmFpbnRkZWZfY29tbWFuZCwgaW5kZXhkZWZf c3RyaW5nLCBydWxlZGVmLAorCSAqIHN0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKSBpZ25vcmUgc2Vh cmNoX3BhdGggZm9yIHRoZSB0YXJnZXQncyBvd24gIkFMVEVSCisJICogVEFCTEUgc2NoZW1hLnRi bCIvIk9OIHNjaGVtYS50YmwiLyJUTyBzY2hlbWEudGJsIiBwcmVmaXggYW5kIGZvciB0aGUKKwkg KiBxdWFsaWZpZWQgc3RhdGlzdGljcyBuYW1lOyB3ZSBzdHJpcCB0aGF0IHN0cmluZyBvdXJzZWx2 ZXMgdmlhCisJICogc3RyaXBfc2NoZW1hX3ByZWZpeC4KKwkgKi8KKwlpZiAoIXNjaGVtYV9xdWFs aWZpZWQpCisJeworCQljaGFyCSAgICpuc3BuYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKGN0eC5i YXNlX25hbWVzcGFjZSk7CisKKwkJaWYgKG5zcG5hbWUgIT0gTlVMTCkKKwkJeworCQkJY29uc3Qg Y2hhciAqcW5zcCA9IHF1b3RlX2lkZW50aWZpZXIobnNwbmFtZSk7CisKKwkJCWN0eC5zY2hlbWFf cHJlZml4ID0gcHNwcmludGYoIiVzLiIsIHFuc3ApOworCQkJY3R4LnNhdmVfbmVzdGxldmVsID0g TmV3R1VDTmVzdExldmVsKCk7CisJCQkodm9pZCkgc2V0X2NvbmZpZ19vcHRpb24oInNlYXJjaF9w YXRoIiwgcW5zcCwKKwkJCQkJCQkJCSBQR0NfVVNFUlNFVCwgUEdDX1NfU0VTU0lPTiwKKwkJCQkJ CQkJCSBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKwkJCXBmcmVlKG5zcG5hbWUp OworCQl9CisJfQorCisJLyoKKwkgKiBDYWNoZSBsb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxMIGNv bnN0cmFpbnQgbWV0YWRhdGEgc28gdGhlIGNvbHVtbi0gZW1pdAorCSAqIGhlbHBlcnMgY2FuIHBy b2R1Y2UgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5saW5lIGZvciB1c2VyLW5hbWVkCisJ ICogY29uc3RyYWludHMsIGFuZCBzbyB0aGUgY29uc3RyYWludCBsb29wIGNhbiBhdm9pZCBkb3Vi bGUtZW1pdHRpbmcgdGhlbS4KKwkgKi8KKwljdHgubm5fZW50cmllcyA9IGNvbGxlY3RfbG9jYWxf bm90X251bGwocmVsLCAmY3R4LnNraXBfbm90bnVsbF9vaWRzKTsKKworCWluaXRTdHJpbmdJbmZv KCZjdHguYnVmKTsKKworCS8qCisJICogRWFjaCBwYXNzIGJlbG93IGFwcGVuZHMgemVybyBvciBt b3JlIGZpbmlzaGVkIHN0YXRlbWVudHMgdG8KKwkgKiBjdHguc3RhdGVtZW50cyB2aWEgYXBwZW5k X3N0bXQgLyBhcHBlbmRfc3RyaXBwZWRfc3RtdC4gIE9yZGVyIGlzCisJICogc2lnbmlmaWNhbnQ6 IENSRUFURSBUQUJMRSBmaXJzdDsgT1dORVIgYW5kIHRoZSBwZXItY29sdW1uIEFMVEVSIENPTFVN TgorCSAqIHBhc3NlcyBiZWZvcmUgc3ViLW9iamVjdCBlbWlzc2lvbjsgc3ViLW9iamVjdHMgaW4g ZGVwZW5kZW5jeS1mcmllbmRseQorCSAqIG9yZGVyIChpbmRleGVzIGJlZm9yZSBjb25zdHJhaW50 cywgc2luY2UgY29uc3RyYWludC1iYWNrZWQgaW5kZXhlcyBhcmUKKwkgKiBlbWl0dGVkIG91dC1v Zi1saW5lIGJ5IHRoZSBjb25zdHJhaW50IGxvb3ApOyBhbmQgcGFydGl0aW9uIGNoaWxkcmVuCisJ ICogbGFzdCBzbyB0aGUgcGFyZW50IGFscmVhZHkgZXhpc3RzIGF0IHJlcGxheSB0aW1lLgorCSAq LworCWVtaXRfY3JlYXRlX3RhYmxlX3N0bXQoJmN0eCk7CisJZW1pdF9vd25lcl9zdG10KCZjdHgp OworCWVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMoJmN0eCk7CisJZW1pdF9hdHRvcHRpb25z KCZjdHgpOworCWVtaXRfaW5kZXhlcygmY3R4KTsKKwllbWl0X2xvY2FsX2NvbnN0cmFpbnRzKCZj dHgpOworCWVtaXRfcnVsZXMoJmN0eCk7CisJZW1pdF9zdGF0aXN0aWNzKCZjdHgpOworCWVtaXRf cmVwbGljYV9pZGVudGl0eSgmY3R4KTsKKwllbWl0X3Jsc190b2dnbGVzKCZjdHgpOworCisJLyoK KwkgKiBUcmlnZ2VycyBhbmQgcm93LWxldmVsIHNlY3VyaXR5IHBvbGljaWVzIOKAlCBkaXNhYmxl ZCB1bnRpbCB0aGUKKwkgKiBzdGFuZGFsb25lIHBnX2dldF90cmlnZ2VyX2RkbCgpIGFuZCBwZ19n ZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgbGFuZC4KKwkgKiBUaGUgc2NhbiArIGxvY2sgKyBmaWx0 ZXIgc2NhZmZvbGRpbmcgYmVsb3cgaXMgcHJlc2VydmVkIChpbnNpZGUgI2lmIDApCisJICogc28g d2lyaW5nIHVwIGVhY2ggZW1pc3Npb24gYmVjb21lcyBhIG9uZS1saW5lciBpbiB0aGUgbG9vcCBi b2R5IG9uY2UKKwkgKiB0aG9zZSBoZWxwZXJzIGFyZSBhdmFpbGFibGUuCisJICovCisjaWYgMAor CWlmIChpbmNsdWRlX3RyaWdnZXJzKQorCXsKKwkJUmVsYXRpb24JdHJpZ1JlbDsKKwkJU3lzU2Nh bkRlc2MgdHJpZ1NjYW47CisJCVNjYW5LZXlEYXRhIHRyaWdLZXk7CisJCUhlYXBUdXBsZQl0cmln VHVwOworCisJCXRyaWdSZWwgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOworCQlTY2FuS2V5SW5pdCgmdHJpZ0tleSwKKwkJCQkJQW51bV9wZ190cmlnZ2Vy X3RncmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2Jq ZWN0SWRHZXREYXR1bShyZWxpZCkpOworCQl0cmlnU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbih0 cmlnUmVsLCBUcmlnZ2VyUmVsaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwg MSwgJnRyaWdLZXkpOworCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0cmlnVHVwID0gc3lzdGFi bGVfZ2V0bmV4dCh0cmlnU2NhbikpKQorCQl7CisJCQlGb3JtX3BnX3RyaWdnZXIgdHJnID0gKEZv cm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQlpZiAodHJnLT50Z2lzaW50 ZXJuYWwpCisJCQkJY29udGludWU7CisKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19nZXRfdHJpZ2dl cl9kZGwodHJnLT5vaWQpIG91dHB1dCBoZXJlLiAqLworCQl9CisJCXN5c3RhYmxlX2VuZHNjYW4o dHJpZ1NjYW4pOworCQl0YWJsZV9jbG9zZSh0cmlnUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0K KworCWlmIChpbmNsdWRlX3BvbGljaWVzKQorCXsKKwkJUmVsYXRpb24JcG9sUmVsOworCQlTeXNT Y2FuRGVzYyBwb2xTY2FuOworCQlTY2FuS2V5RGF0YSBwb2xLZXk7CisJCUhlYXBUdXBsZQlwb2xU dXA7CisKKwkJcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCQlTY2FuS2V5SW5pdCgmcG9sS2V5LAorCQkJCQlBbnVtX3BnX3BvbGljeV9wb2xy ZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJ ZEdldERhdHVtKHJlbGlkKSk7CisJCXBvbFNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocG9sUmVs LCBQb2xpY3lQb2xyZWxpZFBvbG5hbWVJbmRleElkLAorCQkJCQkJCQkJIHRydWUsIE5VTEwsIDEs ICZwb2xLZXkpOworCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChwb2xUdXAgPSBzeXN0YWJsZV9n ZXRuZXh0KHBvbFNjYW4pKSkKKwkJeworCQkJLyogVE9ETzogYXBwZW5kIHBnX2dldF9wb2xpY3lf ZGRsKHJlbGlkLCBwb2xuYW1lKSBvdXRwdXQgaGVyZS4gKi8KKwkJfQorCQlzeXN0YWJsZV9lbmRz Y2FuKHBvbFNjYW4pOworCQl0YWJsZV9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJ fQorI2Vsc2UKKwkodm9pZCkgaW5jbHVkZV90cmlnZ2VyczsKKwkodm9pZCkgaW5jbHVkZV9wb2xp Y2llczsKKyNlbmRpZgorCisJZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4oJmN0eCk7CisKKwl7CisJ CWludAkJCW5hdHRzID0gUmVsYXRpb25HZXREZXNjcihyZWwpLT5uYXR0czsKKworCQlmb3IgKGlu dCBpID0gMTsgaSA8PSBuYXR0czsgaSsrKQorCQkJaWYgKGN0eC5ubl9lbnRyaWVzW2ldLm5hbWUg IT0gTlVMTCkKKwkJCQlwZnJlZShjdHgubm5fZW50cmllc1tpXS5uYW1lKTsKKwl9CisJcGZyZWUo Y3R4Lm5uX2VudHJpZXMpOworCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CXBmcmVlKGN0eC5idWYuZGF0YSk7CisJcGZyZWUoY3R4LnF1YWxuYW1lKTsKKwlpZiAoY3R4LnNj aGVtYV9wcmVmaXggIT0gTlVMTCkKKwkJcGZyZWUoY3R4LnNjaGVtYV9wcmVmaXgpOworCWxpc3Rf ZnJlZShjdHguc2tpcF9ub3RudWxsX29pZHMpOworCisJLyoKKwkgKiBQb3AgdGhlIG5hcnJvd2Vk IHNlYXJjaF9wYXRoIG5vdyB0aGF0IGFsbCBoZWxwZXJzIGhhdmUgcnVuLiAgRXJyb3JzCisJICog dGhyb3duIGVhcmxpZXIgYXJlIGNsZWFuZWQgdXAgYnkgQXRFT1hhY3RfR1VDIGF0IHhhY3QgZW5k LgorCSAqLworCWlmIChjdHguc2F2ZV9uZXN0bGV2ZWwgPj0gMCkKKwkJQXRFT1hhY3RfR1VDKHRy dWUsIGN0eC5zYXZlX25lc3RsZXZlbCk7CisKKwlyZXR1cm4gY3R4LnN0YXRlbWVudHM7Cit9CisK Ky8qCisgKiBwZ19nZXRfdGFibGVfZGRsCisgKgkJUmV0dXJuIERETCB0byByZWNyZWF0ZSBhIHRh YmxlIGFzIGEgc2V0IG9mIHRleHQgcm93cy4KKyAqLworRGF0dW0KK3BnX2dldF90YWJsZV9kZGwo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkg ICAqc3RhdGVtZW50czsKKworCWlmIChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlD b250ZXh0IG9sZGNvbnRleHQ7CisJCU9pZAkJCXJlbGlkOworCQlEZGxPcHRpb24Jb3B0c1tdID0g eworCQkJeyJwcmV0dHkiLCBERExfT1BUX0JPT0x9LAorCQkJeyJvd25lciIsIERETF9PUFRfQk9P TH0sCisJCQl7InRhYmxlc3BhY2UiLCBERExfT1BUX0JPT0x9LAorCQkJeyJpbmNsdWRlc19pbmRl eGVzIiwgRERMX09QVF9CT09MfSwKKwkJCXsiaW5jbHVkZXNfY29uc3RyYWludHMiLCBERExfT1BU X0JPT0x9LAorCQkJeyJpbmNsdWRlc19ydWxlcyIsIERETF9PUFRfQk9PTH0sCisJCQl7ImluY2x1 ZGVzX3N0YXRpc3RpY3MiLCBERExfT1BUX0JPT0x9LAorCQkJeyJpbmNsdWRlc190cmlnZ2VycyIs IERETF9PUFRfQk9PTH0sCisJCQl7ImluY2x1ZGVzX3BvbGljaWVzIiwgRERMX09QVF9CT09MfSwK KwkJCXsiaW5jbHVkZXNfcmxzIiwgRERMX09QVF9CT09MfSwKKwkJCXsiaW5jbHVkZXNfcmVwbGlj YV9pZGVudGl0eSIsIERETF9PUFRfQk9PTH0sCisJCQl7ImluY2x1ZGVzX3BhcnRpdGlvbiIsIERE TF9PUFRfQk9PTH0sCisJCQl7InNjaGVtYV9xdWFsaWZpZWQiLCBERExfT1BUX0JPT0x9LAorCQl9 OworCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKwkJb2xkY29udGV4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCisJ CWlmIChQR19BUkdJU05VTEwoMCkpCisJCXsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRj b250ZXh0KTsKKwkJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwkJfQorCisJCXJlbGlkID0g UEdfR0VUQVJHX09JRCgwKTsKKwkJcGFyc2VfZGRsX29wdGlvbnMoZmNpbmZvLCAxLCBvcHRzLCBs ZW5ndGhvZihvcHRzKSk7CisKKwkJc3RhdGVtZW50cyA9IHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwocmVsaWQsCisJCQkJCQkJCQkJCSAgIG9wdHNbMF0uaXNzZXQgJiYgb3B0c1swXS5ib29sdmFs LAorCQkJCQkJCQkJCQkgICBvcHRzWzFdLmlzc2V0ICYmICFvcHRzWzFdLmJvb2x2YWwsCisJCQkJ CQkJCQkJCSAgIG9wdHNbMl0uaXNzZXQgJiYgIW9wdHNbMl0uYm9vbHZhbCwKKwkJCQkJCQkJCQkJ ICAgIW9wdHNbM10uaXNzZXQgfHwgb3B0c1szXS5ib29sdmFsLAorCQkJCQkJCQkJCQkgICAhb3B0 c1s0XS5pc3NldCB8fCBvcHRzWzRdLmJvb2x2YWwsCisJCQkJCQkJCQkJCSAgICFvcHRzWzVdLmlz c2V0IHx8IG9wdHNbNV0uYm9vbHZhbCwKKwkJCQkJCQkJCQkJICAgIW9wdHNbNl0uaXNzZXQgfHwg b3B0c1s2XS5ib29sdmFsLAorCQkJCQkJCQkJCQkgICAhb3B0c1s3XS5pc3NldCB8fCBvcHRzWzdd LmJvb2x2YWwsCisJCQkJCQkJCQkJCSAgICFvcHRzWzhdLmlzc2V0IHx8IG9wdHNbOF0uYm9vbHZh bCwKKwkJCQkJCQkJCQkJICAgIW9wdHNbOV0uaXNzZXQgfHwgb3B0c1s5XS5ib29sdmFsLAorCQkJ CQkJCQkJCQkgICAhb3B0c1sxMF0uaXNzZXQgfHwgb3B0c1sxMF0uYm9vbHZhbCwKKwkJCQkJCQkJ CQkJICAgb3B0c1sxMV0uaXNzZXQgJiYgb3B0c1sxMV0uYm9vbHZhbCwKKwkJCQkJCQkJCQkJICAg IW9wdHNbMTJdLmlzc2V0IHx8IG9wdHNbMTJdLmJvb2x2YWwpOworCQlmdW5jY3R4LT51c2VyX2Zj dHggPSBzdGF0ZW1lbnRzOworCQlmdW5jY3R4LT5tYXhfY2FsbHMgPSBsaXN0X2xlbmd0aChzdGF0 ZW1lbnRzKTsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJ ZnVuY2N0eCA9IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJc3RhdGVtZW50cyA9IChMaXN0ICopIGZ1 bmNjdHgtPnVzZXJfZmN0eDsKKworCWlmIChmdW5jY3R4LT5jYWxsX2NudHIgPCBmdW5jY3R4LT5t YXhfY2FsbHMpCisJeworCQljaGFyCSAgICpzdG10OworCisJCXN0bXQgPSBsaXN0X250aChzdGF0 ZW1lbnRzLCBmdW5jY3R4LT5jYWxsX2NudHIpOworCisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4 LCBDU3RyaW5nR2V0VGV4dERhdHVtKHN0bXQpKTsKKwl9CisJZWxzZQorCXsKKwkJbGlzdF9mcmVl X2RlZXAoc3RhdGVtZW50cyk7CisJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwl9Cit9CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBiZTE1N2E1ZmJlOS4uZTQ1NmMyMjZmNTMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtODYxNSw2ICs4NjE1LDEzIEBACiAgIHByb2FyZ3R5cGVz ID0+ICdyZWdkYXRhYmFzZSB0ZXh0JywgcHJvYWxsYXJndHlwZXMgPT4gJ3tyZWdkYXRhYmFzZSx0 ZXh0fScsCiAgIHByb2FyZ21vZGVzID0+ICd7aSx2fScsIHByb2FyZ2RlZmF1bHRzID0+ICd7TlVM TH0nLAogICBwcm9zcmMgPT4gJ3BnX2dldF9kYXRhYmFzZV9kZGwnIH0sCit7IG9pZCA9PiAnODIx NScsIGRlc2NyID0+ICdnZXQgRERMIHRvIHJlY3JlYXRlIGEgdGFibGUnLAorICBwcm9uYW1lID0+ ICdwZ19nZXRfdGFibGVfZGRsJywgcHJvcm93cyA9PiAnNTAnLCBwcm92YXJpYWRpYyA9PiAndGV4 dCcsCisgIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUg PT4gJ3MnLCBwcm9wYXJhbGxlbCA9PiAncicsCisgIHByb25hcmdkZWZhdWx0cyA9PiAnMScsIHBy b3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgdGV4dCcsIHBy b2FsbGFyZ3R5cGVzID0+ICd7cmVnY2xhc3MsdGV4dH0nLAorICBwcm9hcmdtb2RlcyA9PiAne2ks dn0nLCBwcm9hcmdkZWZhdWx0cyA9PiAne05VTEx9JywKKyAgcHJvc3JjID0+ICdwZ19nZXRfdGFi bGVfZGRsJyB9LAogeyBvaWQgPT4gJzI1MDknLAogICBkZXNjciA9PiAnZGVwYXJzZSBhbiBlbmNv ZGVkIGV4cHJlc3Npb24gd2l0aCBwcmV0dHktcHJpbnQgb3B0aW9uJywKICAgcHJvbmFtZSA9PiAn cGdfZ2V0X2V4cHInLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ3RleHQnLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy90YWJsZWNtZHMuaAppbmRleCBjM2Q4NTE4Y2I2Mi4uMjA4NTAyN2M5YjEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCisrKyBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCkBAIC05Miw2ICs5Miw3IEBAIGV4dGVybiB2b2lkIGNo ZWNrX29mX3R5cGUoSGVhcFR1cGxlIHR5cGV0dXBsZSk7CiAKIGV4dGVybiB2b2lkIHJlZ2lzdGVy X29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkLCBPbkNvbW1pdEFjdGlvbiBhY3Rpb24pOwogZXh0 ZXJuIHZvaWQgcmVtb3ZlX29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKTsKK2V4dGVybiBPbkNv bW1pdEFjdGlvbiBnZXRfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpOwogCiBleHRlcm4gdm9p ZCBQcmVDb21taXRfb25fY29tbWl0X2FjdGlvbnModm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFj dF9vbl9jb21taXRfYWN0aW9ucyhib29sIGlzQ29tbWl0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BnX2dldF90YWJsZV9kZGwub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4wMzFjNGQ5ZjEzMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKQEAgLTAsMCArMSw3NDIgQEAKKy0t CistLSBwZ19nZXRfdGFibGVfZGRsCistLQorLS0gQWxsIHRlc3RzIHBhc3Mgb3duZXI9PmZhbHNl IHNvIHRoZSBBTFRFUiBUQUJMRSBPV05FUiBUTyBsaW5lIGlzIG5vdAorLS0gZW1pdHRlZCwga2Vl cGluZyBvdXRwdXQgc3RhYmxlIGFjcm9zcyB0ZXN0IHJ1bm5lcnMgKHdoaWNoIG1heSBydW4gdW5k ZXIKKy0tIGRpZmZlcmVudCByb2xlIG5hbWVzKS4KKy0tCitDUkVBVEUgU0NIRU1BIHBndGJsX2Rk bF90ZXN0OworU0VUIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3Rlc3Q7CistLSBCYXNpYyB0YWJs ZSB3aXRoIFBSSU1BUlkgS0VZLCBOT1QgTlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NSRUFURSBU QUJMRSBiYXNpYyAoCisgICAgaWQgaW50IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCBOT1Qg TlVMTCBERUZBVUxUICdhbm9uJyBDT0xMQVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljICggaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0 ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0ZXh0IE5PVCBOVUxMKTsKKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19pZF9ub3RfbnVs bCBOT1QgTlVMTCBpZDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09O U1RSQUlOVCBiYXNpY19uYW1lX25vdF9udWxsIE5PVCBOVUxMIG5hbWU7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtleSBQUklNQVJZIEtF WSAoaWQpOworKDQgcm93cykKKworLS0gSWRlbnRpdHkgY29sdW1ucyAod2l0aCBkZWZhdWx0IGFu ZCBjdXN0b20gc2VxdWVuY2Ugb3B0aW9ucykuCitDUkVBVEUgVEFCTEUgaWRfY29scyAoCisgICAg aWRfYWx3YXlzIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZLAorICAgIGlkX2RlZmF1 bHQgaW50IEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZCispOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jb2xzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QuaWRfY29scyAoIGlkX2Fsd2F5cyBpbnRlZ2VyIEdFTkVSQVRFRCBBTFdBWVMg QVMgSURFTlRJVFkgTk9UIE5VTEwsIGlkX2RlZmF1bHQgaW50ZWdlciBHRU5FUkFURUQgQlkgREVG QVVMVCBBUyBJREVOVElUWSBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu aWRfY29scyBBREQgQ09OU1RSQUlOVCBpZF9jb2xzX2lkX2Fsd2F5c19ub3RfbnVsbCBOT1QgTlVM TCBpZF9hbHdheXM7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRfY29scyBBREQgQ09O U1RSQUlOVCBpZF9jb2xzX2lkX2RlZmF1bHRfbm90X251bGwgTk9UIE5VTEwgaWRfZGVmYXVsdDsK KygzIHJvd3MpCisKK0NSRUFURSBUQUJMRSBpZF9jdXN0b20gKAorICAgIHYgaW50IEdFTkVSQVRF RCBBTFdBWVMgQVMgSURFTlRJVFkgKAorICAgICAgICBTRVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92 X3NlcQorICAgICAgICBTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNQorICAgICAgICBNSU5W QUxVRSA1MCBNQVhWQUxVRSAxMDAwCisgICAgICAgIENBQ0hFIDEwIENZQ0xFCisgICAgKQorKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkX2N1c3RvbSAoIHYgaW50ZWdl ciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIChTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQg QlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwIENBQ0hFIDEwIENZQ0xFKSBOT1QgTlVMTCk7 CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRfY3VzdG9tIEFERCBDT05TVFJBSU5UIGlk X2N1c3RvbV92X25vdF9udWxsIE5PVCBOVUxMIHY7CisoMiByb3dzKQorCistLSBHZW5lcmF0ZWQg c3RvcmVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fY29scyAoCisgICAgY2VudHMgaW50LAor ICAgIGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxXQVlTIEFTIChjZW50cyAvIDEwMC4wKSBT VE9SRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl9jb2xzJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZ2VuX2NvbHMgKCBjZW50cyBpbnRlZ2Vy LCBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBBUyAoKChjZW50cyk6Om51bWVyaWMg LyAxMDAuMCkpIFNUT1JFRCk7CisoMSByb3cpCisKKy0tIFNUT1JBR0UgYW5kIENPTVBSRVNTSU9O IChvbmx5IGVtaXR0ZWQgd2hlbiBub24tZGVmYXVsdCBmb3IgdGhlIHR5cGUpLgorQ1JFQVRFIFRB QkxFIHN0b3JhZ2VfY29scyAoCisgICAgYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsCisgICAgYiB0 ZXh0IFNUT1JBR0UgTUFJTiwKKyAgICBjIHRleHQgQ09NUFJFU1NJT04gcGdsegorKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3RvcmFnZV9jb2xzJzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0b3Jh Z2VfY29scyAoIGEgdGV4dCBTVE9SQUdFIEVYVEVSTkFMLCBiIHRleHQgU1RPUkFHRSBNQUlOLCBj IHRleHQgQ09NUFJFU1NJT04gcGdseik7CisoMSByb3cpCisKKy0tIENvbnN0cmFpbnRzOiBDSEVD SywgVU5JUVVFLCBGT1JFSUdOIEtFWSAoREVGRVJSQUJMRSkuCitDUkVBVEUgVEFCTEUgcmVmZCAo aWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBjb25zICgKKyAgICBhIGludCBDSEVD SyAoYSA+IDApLAorICAgIGIgaW50IFVOSVFVRSwKKyAgICBjIGludCBSRUZFUkVOQ0VTIHJlZmQo aWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVECispOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25z ICggYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlciwgQ09OU1RSQUlOVCBjb25zX2FfY2hl Y2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFE RCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBS RUZFUkVOQ0VTIHJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOworKDMgcm93 cykKKworLS0gSW5kZXhlczogZnVuY3Rpb25hbCBhbmQgcGFydGlhbC4gIENvbnN0cmFpbnQtYmFj a2luZyBpbmRleGVzIGFyZQorLS0gc3VwcHJlc3NlZCAodGhleSBhcmUgZW1pdHRlZCBieSB0aGUg Y29uc3RyYWludCBsb29wKS4KK0NSRUFURSBUQUJMRSBpZHhkIChpZCBpbnQgUFJJTUFSWSBLRVks IG5hbWUgdGV4dCk7CitDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBpZHhkIChsb3dlcihuYW1l KSk7CitDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIGlkeGQgKGlkKSBXSEVSRSBpZCA+IDEw MDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCAoIGlk IGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIg T04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFU RSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAo aWQpIFdIRVJFIChpZCA+IDEwMCk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCBB REQgQ09OU1RSQUlOVCBpZHhkX2lkX25vdF9udWxsIE5PVCBOVUxMIGlkOworIEFMVEVSIFRBQkxF IHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZ IChpZCk7CisoNSByb3dzKQorCistLSBJbmhlcml0YW5jZSwgaW5jbHVkaW5nIGEgY2hpbGQgREVG QVVMVCBvdmVycmlkZSBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhciAo YSBpbnQgREVGQVVMVCAxLCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIGNoIChjIGludCkgSU5IRVJJ VFMgKHBhcik7CitBTFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jaCAoIGMgaW50ZWdlcikgSU5IRVJJVFMgKHBndGJs X2RkbF90ZXN0LnBhcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2ggQUxURVIgQ09M VU1OIGEgU0VUIERFRkFVTFQgOTk5OworKDIgcm93cykKKworLS0gUGVyLWNvbHVtbiBhdHRvcHRp b25zOiBlbWl0dGVkIGFzIEFMVEVSIENPTFVNTiBTRVQgKC4uLikuCitDUkVBVEUgVEFCTEUgYXR0 b3B0IChhIGludCwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGF0dG9wdCBBTFRFUiBDT0xVTU4gYSBT RVQgKG5fZGlzdGluY3QgPSAxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdh dHRvcHQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuYXR0b3B0ICgg YSBpbnRlZ2VyLCBiIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCBB TFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGluY3Q9JzEwMCcpOworKDIgcm93cykKKworLS0gUGFy dGl0aW9uZWQgdGFibGUgcGFyZW50IChSQU5HRSBhbmQgSEFTSCkuCitDUkVBVEUgVEFCTEUgcGFy dGVkX3JhbmdlIChpZCBpbnQsIGsgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LnBhcnRlZF9yYW5nZSAoIGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQ QVJUSVRJT04gQlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdw YXJ0ZWRfaGFzaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QucGFydGVkX2hhc2ggKCBpZCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOwor KDEgcm93KQorCistLSBQYXJ0aXRpb24gY2hpbGRyZW46IEZST00vVE8sIFdJVEggKG1vZHVsdXMs IHJlbWFpbmRlciksIERFRkFVTFQuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlXzEgUEFSVElU SU9OIE9GIHBhcnRlZF9yYW5nZQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitB TFRFUiBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3Owor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu cGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBG T1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnBhcnRlZF9yYW5nZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CisoMiByb3dzKQor CitDUkVBVEUgVEFCTEUgcGFydGVkX2hhc2hfMCBQQVJUSVRJT04gT0YgcGFydGVkX2hhc2gKKyAg ICBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaF8wJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnBhcnRlZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9o YXNoIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CisoMSByb3cpCisK K0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2Ug REVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlX2Rl Zic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV9kZWYgUEFSVElUSU9O IE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBERUZBVUxUOworKDEgcm93KQorCistLSBS dWxlcy4KK0NSRUFURSBUQUJMRSBydCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSBydF9sb2cgKGlk IGludCk7CitDUkVBVEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBydAorICAg IERPIEFMU08gSU5TRVJUIElOVE8gcnRfbG9nIFZBTFVFUyAoTkVXLmlkKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0ICggaWQgaW50 ZWdlcik7CisgQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBBUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgIE9OIElOU0VSVCBUTyBwZ3RibF9kZGxfdGVzdC5ydCBETyAg SU5TRVJUIElOVE8gcnRfbG9nIChpZCkrCisgICBWQUxVRVMgKG5ldy5pZCk7CisoMiByb3dzKQor CistLSBFeHRlbmRlZCBzdGF0aXN0aWNzLgorQ1JFQVRFIFRBQkxFIHN0eCAoYSBpbnQsIGIgaW50 LCBjIGludCk7CitDUkVBVEUgU1RBVElTVElDUyBzdHhfbmR2IChuZGlzdGluY3QpIE9OIGEsIGIg RlJPTSBzdHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnN0eCAoIGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBj IGludGVnZXIpOworIENSRUFURSBTVEFUSVNUSUNTIHBndGJsX2RkbF90ZXN0LnN0eF9uZHYgKG5k aXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKKygyIHJvd3MpCisKKy0tIFJvdy1sZXZlbCBzZWN1 cml0eSB0b2dnbGVzLgorQ1JFQVRFIFRBQkxFIHJscyAoaWQgaW50KTsKK0FMVEVSIFRBQkxFIHJs cyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworQUxURVIgVEFCTEUgcmxzIEZPUkNFIFJPVyBM RVZFTCBTRUNVUklUWTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnJscyAoIGlkIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJs cyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnJscyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7CisoMyByb3dzKQorCistLSBSRVBMSUNBIElE RU5USVRZOiBlbWl0dGVkIG9ubHkgd2hlbiBub3QgdGhlIGRlZmF1bHQuCitDUkVBVEUgVEFCTEUg cmlfZnVsbCAoYSBpbnQpOworQUxURVIgVEFCTEUgcmlfZnVsbCBSRVBMSUNBIElERU5USVRZIEZV TEw7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu cmlfZnVsbCAoIGEgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVs bCBSRVBMSUNBIElERU5USVRZIEZVTEw7CisoMiByb3dzKQorCitDUkVBVEUgVEFCTEUgcmlfaWR4 IChhIGludCBOT1QgTlVMTCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9hIE9OIHJpX2lk eCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHggUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBy aV9pZHhfYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4Jzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCAoIGEg aW50ZWdlciBOT1QgTlVMTCk7CisgQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfYSBPTiBwZ3Ri bF9kZGxfdGVzdC5yaV9pZHggVVNJTkcgYnRyZWUgKGEpOworIEFMVEVSIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnJpX2lkeCBBREQgQ09OU1RSQUlOVCByaV9pZHhfYV9ub3RfbnVsbCBOT1QgTlVMTCBh OworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHJpX2lkeF9hOworKDQgcm93cykKKworLS0gVU5MT0dHRUQgKyByZWxvcHRpb25z LgorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0g NzApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90 YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVU5MT0dHRUQgVEFCTEUgcGd0YmxfZGRsX3Rlc3QudW5vICggaWQg aW50ZWdlcikgV0lUSCAoZmlsbGZhY3Rvcj0nNzAnKTsKKygxIHJvdykKKworLS0gVHlwZWQgdGFi bGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25hbWUpLiAgQ29sdW1ucyBpbmhlcml0ZWQgZnJvbSB0 aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBsb2NhbGx5LWFwcGxpZWQgREVGQVVMVCwgTk9UIE5V TEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0aHJvdWdoIGEgc2luZ2xlICIoY29sIFdJVEggT1BU SU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZUEUgdHlwZWRfdCBBUyAoYSBpbnQsIGIgdGV4dCk7 CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4gT0YgdHlwZWRfdDsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu dHlwZWRfcGxhaW4gT0YgcGd0YmxfZGRsX3Rlc3QudHlwZWRfdDsKKygxIHJvdykKKworQ1JFQVRF IFRBQkxFIHR5cGVkX292ZXIgT0YgdHlwZWRfdCAoCisgICAgYSBXSVRIIE9QVElPTlMgREVGQVVM VCA3IE5PVCBOVUxMLAorICAgIGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLAorICAgIENPTlNUUkFJ TlQgYl9ub25lbXB0eSBDSEVDSyAobGVuZ3RoKGIpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3R5cGVkX292ZXInOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QudHlwZWRfb3ZlciBP RiBwZ3RibF9kZGxfdGVzdC50eXBlZF90ICggYSBXSVRIIE9QVElPTlMgREVGQVVMVCA3IE5PVCBO VUxMLCBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwgQ09OU1RSQUlOVCBiX25vbmVtcHR5IENIRUNL ICgobGVuZ3RoKGIpID4gMCkpKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC50eXBlZF9v dmVyIEFERCBDT05TVFJBSU5UIHR5cGVkX292ZXJfYV9ub3RfbnVsbCBOT1QgTlVMTCBhOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX292ZXIgQUREIENPTlNUUkFJTlQgdHlwZWRf b3Zlcl9iX25vdF9udWxsIE5PVCBOVUxMIGI7CisoMyByb3dzKQorCistLSBUZW1wb3JhcnkgdGFi bGVzICsgT04gQ09NTUlULiAgVGVtcCB0YWJsZXMgbGl2ZSBpbiBhIHNlc3Npb24tbG9jYWwKKy0t IG5hbWVzcGFjZSB3aG9zZSBuYW1lIHZhcmllcyBiZXR3ZWVuIHJ1bnMsIHNvIHdlIHN0cmlwIHRo ZSBzY2hlbWEKKy0tIHByZWZpeC4gIE9OIENPTU1JVCBEUk9QIG9ubHkgZmlyZXMgYXQgY29tbWl0 LCBzbyB0aGUgcXVlcmllcyB0aGF0CistLSBuZWVkIHRvIHNlZSB0aGUgY2F0YWxvZyBlbnRyeSBt dXN0IHJ1biBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcworLS0gdGhlIENSRUFURS4KK0JFR0lO OworQ1JFQVRFIFRFTVAgVEFCTEUgdGVtcF9kZWZhdWx0IChpZCBpbnQpOworQ1JFQVRFIFRFTVAg VEFCTEUgdGVtcF9kZWxldGUgKGlkIGludCkgT04gQ09NTUlUIERFTEVURSBST1dTOworQ1JFQVRF IFRFTVAgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnQpIE9OIENPTU1JVCBEUk9QOworU0VMRUNUIHJl Z2V4cF9yZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1swLTldKyI/XC4nLCAncGdfdGVtcC4nKSBB UyBsaW5lCitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVmYXVsdCc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSBwZ190ZW1wLnRlbXBfZGVmYXVsdCAoIGlk IGludGVnZXIpOworKDEgcm93KQorCitTRUxFQ1QgcmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdf dGVtcF8/WzAtOV0rIj9cLicsICdwZ190ZW1wLicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxl X2RkbCgndGVtcF9kZWxldGUnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJykgQVMgbGluZQor V0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBURU1QT1JBUlkgVEFCTEUgcGdfdGVtcC50 ZW1wX2RlbGV0ZSAoIGlkIGludGVnZXIpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKKygxIHJvdykK KworU0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1swLTldKyI/XC4nLCAn cGdfdGVtcC4nKSBBUyBsaW5lCitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZHJvcCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFU RSAlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFS WSBUQUJMRSBwZ190ZW1wLnRlbXBfZHJvcCAoIGlkIGludGVnZXIpIE9OIENPTU1JVCBEUk9QOwor KDEgcm93KQorCitST0xMQkFDSzsKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLCAncHJldHR5 JywgJ3RydWUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljICggICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgaWQgaW50ZWdl ciBOT1QgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKworICAgICBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAnYW5vbic6 OnRleHQgTk9UIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgKTsKKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19pZF9ub3RfbnVs bCBOT1QgTlVMTCBpZDsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09O U1RSQUlOVCBiYXNpY19uYW1lX25vdF9udWxsIE5PVCBOVUxMIG5hbWU7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtleSBQUklNQVJZIEtF WSAoaWQpOworKDQgcm93cykKKworLS0gaW5jbHVkZXNfKiBnYXRpbmc6IGVhY2ggc3ViLW9iamVj dCBjYXRlZ29yeSBjYW4gYmUgc3VwcHJlc3NlZCBpbmRpdmlkdWFsbHkuCistLSBpbmNsdWRlc19p bmRleGVzPWZhbHNlIGhpZGVzIHRoZSBDUkVBVEUgSU5ERVggc3RhdGVtZW50cy4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19pbmRleGVzJywgJ2Zh bHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkICggaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFt ZSB0ZXh0KTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5U IGlkeGRfaWRfbm90X251bGwgTk9UIE5VTEwgaWQ7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygzIHJv d3MpCisKKy0tIGluY2x1ZGVzX2NvbnN0cmFpbnRzPWZhbHNlIGhpZGVzIGJvdGggaW5saW5lIENI RUNLIGluIENSRUFURSBUQUJMRSBhbmQKKy0tIHRoZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNU UkFJTlQgbGluZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn aW5jbHVkZXNfY29uc3RyYWludHMnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoIGEgaW50ZWdlciwgYiBp bnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBpbmNsdWRlc19ydWxlcz1mYWxzZSBo aWRlcyB0aGUgQ1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0 Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2luY2x1ZGVzX3J1bGVzJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucnQgKCBpZCBp bnRlZ2VyKTsKKygxIHJvdykKKworLS0gaW5jbHVkZXNfc3RhdGlzdGljcz1mYWxzZSBoaWRlcyB0 aGUgQ1JFQVRFIFNUQVRJU1RJQ1MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0 eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdpbmNsdWRlc19zdGF0aXN0aWNzJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zdHggKCBhIGludGVnZXIs IGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gaW5jbHVkZXNfcmxzPWZhbHNl IGhpZGVzIHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19ybHMnLCAnZmFs c2UnKTsKKyAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyAoIGlkIGludGVnZXIpOworKDEgcm93KQorCistLSBp bmNsdWRlc19yZXBsaWNhX2lkZW50aXR5PWZhbHNlIGhpZGVzIHRoZSBSRVBMSUNBIElERU5USVRZ IGNsYXVzZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdp bmNsdWRlc19yZXBsaWNhX2lkZW50aXR5JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5yaV9mdWxsICggYSBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gaW5jbHVkZXNfcGFydGl0aW9u OiBkZWZhdWx0IGlzIGZhbHNlLCBzbyB0aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50CistLSBE REwgb24gaXRzIG93biBkb2VzIG5vdCBpbmNsdWRlIGl0cyBjaGlsZHJlbi4gIFNldHRpbmcgaXQg dG8gdHJ1ZQorLS0gYXBwZW5kcyB0aGUgY2hpbGRyZW4ncyBEREwgYWZ0ZXIgdGhlIHBhcmVudC4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1 ZGVzX3BhcnRpdGlvbicsICd0cnVlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90 ZXN0LnBhcnRlZF9yYW5nZSAoIGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV8xIFBB UlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgRk9SIFZBTFVFUyBGUk9NICgw KSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfMSBB TFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFu Z2UgREVGQVVMVDsKKyg0IHJvd3MpCisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBz IHRoZSBzY2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2Ft ZS1zY2hlbWEgc2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBh cmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9z cy1zY2hlbWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVz cy4KKy0tCistLSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQn LCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgYmFz aWMgKCBpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAn YW5vbic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxFIGJhc2ljIEFERCBDT05TVFJBSU5U IGJhc2ljX2lkX25vdF9udWxsIE5PVCBOVUxMIGlkOworIEFMVEVSIFRBQkxFIGJhc2ljIEFERCBD T05TVFJBSU5UIGJhc2ljX25hbWVfbm90X251bGwgTk9UIE5VTEwgbmFtZTsKKyBBTFRFUiBUQUJM RSBiYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoNCBy b3dzKQorCistLSBJTkhFUklUUyBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQg dW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nj aGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGNoICggYyBpbnRlZ2VyKSBJTkhFUklUUyAocGFy KTsKKyBBTFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CisoMiBy b3dzKQorCistLSBQYXJ0aXRpb24gcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVk IHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFu Z2VfMSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxF IHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4g ayBTRVQgREVGQVVMVCA3OworKDIgcm93cykKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBr ZWVwcyBxdWFsaWZpY2F0aW9uLiAgVGhlICdyZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRs X3Rlc3Q7IHBsYWNlIGFuIEZLIHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlm eSBpdAorLS0gc3RheXMgcXVhbGlmaWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl LgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X290aGVyLnBhcmVudCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1h X2ZrICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBw Z3RibF9kZGxfb3RoZXIucGFyZW50CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCd4c2NoZW1hX2ZrJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICggaWQgaW50ZWdlciBOT1QgTlVMTCwgcGlkIGludGVn ZXIpOworIEFMVEVSIFRBQkxFIHhzY2hlbWFfZmsgQUREIENPTlNUUkFJTlQgeHNjaGVtYV9ma19p ZF9ub3RfbnVsbCBOT1QgTlVMTCBpZDsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05T VFJBSU5UIHhzY2hlbWFfZmtfcGlkX2ZrZXkgRk9SRUlHTiBLRVkgKHBpZCkgUkVGRVJFTkNFUyBw Z3RibF9kZGxfb3RoZXIucGFyZW50KGlkKTsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBD T05TVFJBSU5UIHhzY2hlbWFfZmtfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDQgcm93cykKKwor LS0gSWRlbnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20gc2VxdWVuY2UgbmFtZSBpbiB0aGUgc2Ft ZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgaWRfY3VzdG9tICggdiBpbnRlZ2VyIEdF TkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1 IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUgMTAgQ1lDTEUpIE5PVCBOVUxMKTsKKyBB TFRFUiBUQUJMRSBpZF9jdXN0b20gQUREIENPTlNUUkFJTlQgaWRfY3VzdG9tX3Zfbm90X251bGwg Tk9UIE5VTEwgdjsKKygyIHJvd3MpCisKKy0tIFJvdW5kLXRyaXA6IHdpdGggc2NoZW1hX3F1YWxp ZmllZD1mYWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0gRERMIGNhbiBiZSByZXBs YXllZCBpbnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVBVEUgU0NIRU1BIHBndGJs X2RkbF9yZXBsYXk7CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAg U0VUIExPQ0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsKKyAgICBGT1Igc3RtdCBJ TgorICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF90 ZXN0LmJhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKSBBUyBsaW5lCisgICAgTE9P UAorICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CitTRUxFQ1Qg cmVsbmFtZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5hbWUKK0ZST00gcGdfY2xhc3Mg V0hFUkUgb2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpyZWdjbGFzczsKKyAgIHJlbG5h bWVzcGFjZSAgIHwgcmVsbmFtZSAKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBwZ3Ri bF9kZGxfcmVwbGF5IHwgYmFzaWMKKygxIHJvdykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Jl cGxheSBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxf cmVwbGF5LmJhc2ljCitEUk9QIFRBQkxFIHhzY2hlbWFfZms7CitEUk9QIFNDSEVNQSBwZ3RibF9k ZGxfb3RoZXIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0Ymxf ZGRsX290aGVyLnBhcmVudAorLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlv biBjaGlsZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJUSVRJ T04gT0YgZm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxURVIg VEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRf Y2hrIChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRB QkxFIHBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09OU1RS QUlOVCBjaGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2No aWxkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hrX2NoaWxkIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVz dC5wYXJ0ZWRfY2hrIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QucGFydGVkX2Noa19jaGlsZCBBREQgQ09OU1RSQUlOVCBjaGtfaW5saW5l IENIRUNLICgodmFsID4gMCkpOworKDIgcm93cykKKworRFJPUCBUQUJMRSBwYXJ0ZWRfY2hrOwor LS0gSW5oZXJpdGFuY2UgY2hpbGRyZW4gb2YgYSBwYXJlbnQgd2l0aCBhIGdlbmVyYXRlZCBjb2x1 bW4gc2hvdWxkIG5vdAorLS0gZW1pdCBhbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIGZv ciB0aGUgaW5oZXJpdGVkIGdlbmVyYXRlZAorLS0gY29sdW1uOiB0aGUgR0VORVJBVEVEIGV4cHJl c3Npb24gY2FycmllcyBkb3duIHRocm91Z2ggaW5oZXJpdGFuY2UsCistLSBhbmQgU0VUIERFRkFV TFQgd291bGQgZmFpbCBhdCByZXBsYXkgYWdhaW5zdCBhIGdlbmVyYXRlZCBjb2x1bW4uCitDUkVB VEUgVEFCTEUgcGFyX2dlbiAoCisgICAgaWQgaW50LAorICAgIGcgIGludCBHRU5FUkFURUQgQUxX QVlTIEFTIChpZCAqIDIpIFNUT1JFRAorKTsKK0NSRUFURSBUQUJMRSBjaF9nZW4gKCkgSU5IRVJJ VFMgKHBhcl9nZW4pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaF9nZW4nOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2hfZ2VuICgpIElOSEVSSVRT IChwZ3RibF9kZGxfdGVzdC5wYXJfZ2VuKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBwYXJfZ2Vu IENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoX2dlbgorLS0gVXNl ci1uYW1lZCBOT1QgTlVMTCBjb25zdHJhaW50IG11c3QgYmUgZW1pdHRlZCBpbmxpbmUgYXMKKy0t ICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIHNvIGEgcmVwbGF5IGRvZXMgbm90IGNvbGxpZGUg d2l0aCB0aGUKKy0tIGF1dG8tbmFtZWQgTk9UIE5VTEwgdGhhdCBQb3N0Z3JlU1FMIHdvdWxkIG90 aGVyd2lzZSBjcmVhdGUgZnJvbSBhCistLSBwbGFpbiBpbmxpbmUgIk5PVCBOVUxMIi4gIFRoZSBj b25zdHJhaW50IGxvb3Agc2tpcHMgdGhlIHVzZXItbmFtZWQKKy0tIGVudHJ5IHRvIGF2b2lkIGRv dWJsZS1lbWlzc2lvbi4KK0NSRUFURSBUQUJMRSBubl9uYW1lZCAoCisgICAgYSBpbnQgQ09OU1RS QUlOVCBteV9ubiBOT1QgTlVMTCwKKyAgICBiIGludCBOT1QgTlVMTAorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fbmFtZWQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3Qubm5fbmFtZWQgKCBhIGludGVnZXIgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwgYiBp bnRlZ2VyIE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9uYW1lZCBB REQgQ09OU1RSQUlOVCBubl9uYW1lZF9iX25vdF9udWxsIE5PVCBOVUxMIGI7CisoMiByb3dzKQor CitEUk9QIFRBQkxFIG5uX25hbWVkOworLS0gTG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBh biBpbmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJv bSB0aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxzZSksIHNvIHRoZQorLS0g dXNlci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNvbWUgb3V0IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29u c3RyYWludAorLS0gbG9vcCByYXRoZXIgdGhhbiBpbmxpbmUuCitDUkVBVEUgVEFCTEUgbm5fcGFy IChhIGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIgaW50KSBJTkhFUklUUyAobm5fcGFyKTsK K0FMVEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMIGE7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9jaCAoIGIgaW50ZWdlcikgSU5I RVJJVFMgKHBndGJsX2RkbF90ZXN0Lm5uX3Bhcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3Qubm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwgYTsKKygyIHJvd3MpCisKK0RS T1AgVEFCTEUgbm5fcGFyIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IG5uX2NoCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgZHJvcCB0aGUgc2NoZW1hIHBy ZWZpeCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Npb25zIGFuZCBpbmxpbmUgQ0hFQ0sgYm9kaWVz IHRoYXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCistLSBvYmplY3RzIChzZXF1ZW5jZSB2aWEgbmV4 dHZhbCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxsKS4gIFRoaXMKKy0tIHJlbGllcyBvbiB0aGUg ZGVwYXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggcmF0aGVyCistLSB0 aGFuIG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF94cmVm OworQ1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94cmVmLm15c2VxOworQ1JFQVRFIEZVTkNUSU9O IHBndGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5TIGludCBMQU5HVUFHRSBzcWwgSU1NVVRBQkxF CisgICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3hyZWYudCAoCisg ICAgaWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3BndGJsX2RkbF94cmVmLm15c2VxJyksCisgICAg dmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAocGd0YmxfZGRsX3hyZWYuZih2YWwp ID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF94cmVm LnQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVk JywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgdCAoIGlkIGludGVnZXIgREVGQVVM VCBuZXh0dmFsKCdteXNlcSc6OnJlZ2NsYXNzKSwgdmFsIGludGVnZXIsIENPTlNUUkFJTlQgY2hr IENIRUNLICgoZih2YWwpID4gMCkpKTsKKygxIHJvdykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRs X3hyZWYgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMyBvdGhlciBvYmplY3Rz CitERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIHNlcXVlbmNlIHBndGJsX2RkbF94cmVmLm15c2Vx Citkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9uIHBndGJsX2RkbF94cmVmLmYoaW50ZWdlcikKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3hyZWYudAorLS0gc2NoZW1hX3F1YWxpZmll ZD1mYWxzZSBtdXN0IE5PVCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3aG9zZQorLS0gY29udGVu dHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90LiAg VGhlCistLSBpbi1zdHJpbmcgc3RhdGUgb2YgdGhlIHByZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMg dGhlbSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJM RSBwZ3RibF9kZGxfc3RyLnAgKGlkIGludCwgbm90ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0Ug KGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9k ZGxfc3RyLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9z dHIuc2VjcmV0JykpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor IEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKG5vdGUgPD4gJ3BndGJs X2RkbF9zdHIuc2VjcmV0Jzo6dGV4dCkpOworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgcGd0Ymxf ZGRsX3N0ciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9k ZGxfc3RyLnAKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBOT1QgY29ycnVwdCBkb3Vi bGUtcXVvdGVkIGlkZW50aWZpZXJzCistLSB3aG9zZSBjb250ZW50cyBoYXBwZW4gdG8gY29udGFp biB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QKKy0tIChmb3IgZXhhbXBsZSBhIGNv bHVtbiBsaXRlcmFsbHkgbmFtZWQgIjxzY2hlbWE+LndlaXJkIiBpbnNpZGUgdGhhdAorLS0gc2No ZW1hKS4gIFRoZSBpbi1pZGVudCBzdGF0ZSBvZiB0aGUgcHJlZml4IHN0cmlwcGVyIHByZXNlcnZl cyB0aGVtCistLSB2ZXJiYXRpbS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3FpZDsKK0NSRUFU RSBUQUJMRSBwZ3RibF9kZGxfcWlkLnAgKGlkIGludCwgInBndGJsX2RkbF9xaWQud2VpcmQiIGlu dCkKKyAgICBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxf cWlkLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfcWlkLnAKKyAgICAoQ09OU1RSQUlOVCBjaGsg Q0hFQ0sgKCJwZ3RibF9kZGxfcWlkLndlaXJkIiA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAo MCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF9x aWQucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXIn LCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlm aWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBUQUJMRSBwYyBQQVJUSVRJT04gT0YgcCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor IEFMVEVSIFRBQkxFIHBjIEFERCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKCJwZ3RibF9kZGxfcWlk LndlaXJkIiA+IDApKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FT Q0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3FpZC5wCist LSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxm IHJlcXVpcmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBm b3JtcyBvZiB0aGUgcHJlZml4IOKAlAorLS0gYmFyZS1sb3dlcmNhc2UgYW5kIHF1b3RlZCDigJQg bXVzdCBiZSBzdHJpcHBlZCBmcm9tIG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8gQ1JFQVRF IElOREVYIHByZWZpeGVzLCB3aGlsZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJzIHRoYXQg aGFwcGVuIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NSRUFURSBT Q0hFTUEgIlBnVGJsLURkbC1RIjsKK0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJUIiAoaWQg aW50LCB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7CitDUkVB VEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xhc3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFICJUIiAoIGlkIGludGVnZXIsIHZhbCBpbnRlZ2VyLCBDT05TVFJBSU5UIGNoayBDSEVDSyAo KHZhbCA+IDApKSk7CisgQ1JFQVRFIElOREVYICJUX3ZhbF9pZHgiIE9OICJUIiBVU0lORyBidHJl ZSAodmFsKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BICJQZ1RibC1EZGwtUSIgQ0FTQ0FERTsK K05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgIlBnVGJsLURkbC1RIi4iVCIKKy0tIEVy cm9yOiBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUuCitDUkVBVEUgVklFVyB2 IEFTIFNFTEVDVCAxIEFTIHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3YnOjpy ZWdjbGFzcyk7CitFUlJPUjogICJ2IiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQg dGFibGUKK0NSRUFURSBTRVFVRU5DRSBzOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdzJzo6cmVnY2xhc3MpOworRVJST1I6ICAicyIgaXMgbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRp dGlvbmVkIHRhYmxlCistLSBOVUxMIGFyZ3VtZW50IHJldHVybnMgbm8gcm93cy4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbChOVUxMKTsKKyBwZ19nZXRfdGFibGVfZGRsIAorLS0tLS0t LS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBVbnJlY29nbml6ZWQgb3B0aW9uLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnYm9ndXMnLCAndHJ1 ZScpOworRVJST1I6ICB1bnJlY29nbml6ZWQgb3B0aW9uOiAiYm9ndXMiCistLSBPZGQgbnVtYmVy IG9mIHZhcmlhZGljIGFyZ3MuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsICdwcmV0dHknKTsKK0VSUk9SOiAgdmFyaWFkaWMgYXJndW1lbnRzIG11c3Qg YmUgbmFtZS92YWx1ZSBwYWlycworSElOVDogIFByb3ZpZGUgYW4gZXZlbiBudW1iZXIgb2YgdmFy aWFkaWMgYXJndW1lbnRzIHRoYXQgY2FuIGJlIGRpdmlkZWQgaW50byBwYWlycy4KKy0tIFJvdW5k LXRyaXAgdmVyaWZpY2F0aW9uLiAgRm9yIGV2ZXJ5IHRlc3QgdGFibGUsIGNhcHR1cmUgdGhlIERE TCB0aGUKKy0tIGZ1bmN0aW9uIGVtaXRzLCBkcm9wIHRoZSBzY2hlbWEsIHJlcGxheSBlYWNoIHRh YmxlJ3MgRERMIGluCistLSBkZXBlbmRlbmN5IG9yZGVyLCBhbmQgY29uZmlybSB0aGF0IHBnX2dl dF90YWJsZV9kZGwgb24gdGhlIHJlY3JlYXRlZAorLS0gcmVsYXRpb24gbWF0Y2hlcyB0aGUgb3Jp Z2luYWwgbGluZS1mb3ItbGluZS4gIFRoZSBmaW5hbCBTRUxFQ1QgbXVzdAorLS0gcmV0dXJuIHpl cm8gcm93cy4KK0NSRUFURSBURU1QIFRBQkxFIHBndGJsX2RkbF9ydF9vcmlnIChuYW1lIHRleHQs IG9yZCBpbnQsIGxpbmUgdGV4dCk7CitJTlNFUlQgSU5UTyBwZ3RibF9kZGxfcnRfb3JpZworU0VM RUNUIHQubmFtZSwgby5vcmQsIG8ubGluZQorRlJPTSAoVkFMVUVTCisgICAgICAgICgnYmFzaWMn KSwgKCdpZF9jb2xzJyksICgnaWRfY3VzdG9tJyksICgnZ2VuX2NvbHMnKSwgKCdzdG9yYWdlX2Nv bHMnKSwKKyAgICAgICAgKCdyZWZkJyksICgnY29ucycpLCAoJ2lkeGQnKSwKKyAgICAgICAgKCdw YXInKSwgKCdjaCcpLCAoJ2F0dG9wdCcpLAorICAgICAgICAoJ3BhcnRlZF9yYW5nZScpLCAoJ3Bh cnRlZF9yYW5nZV8xJyksICgncGFydGVkX3JhbmdlX2RlZicpLAorICAgICAgICAoJ3BhcnRlZF9o YXNoJyksICgncGFydGVkX2hhc2hfMCcpLAorICAgICAgICAoJ3J0X2xvZycpLCAoJ3J0JyksCisg ICAgICAgICgnc3R4JyksICgncmxzJyksICgncmlfZnVsbCcpLCAoJ3JpX2lkeCcpLCAoJ3Vubycp CisgICAgICkgQVMgdChuYW1lKSwKKyAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0 YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdvd25lcicsICdmYWxzZScpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCk7 CitETyAkJAorREVDTEFSRQorICAgIHRhYmxlcyBDT05TVEFOVCB0ZXh0W10gOj0gQVJSQVlbCisg ICAgICAgICdiYXNpYycsICdpZF9jb2xzJywgJ2lkX2N1c3RvbScsICdnZW5fY29scycsICdzdG9y YWdlX2NvbHMnLAorICAgICAgICAncmVmZCcsICdjb25zJywgJ2lkeGQnLAorICAgICAgICAncGFy JywgJ2NoJywgJ2F0dG9wdCcsCisgICAgICAgICdwYXJ0ZWRfcmFuZ2UnLCAncGFydGVkX3Jhbmdl XzEnLCAncGFydGVkX3JhbmdlX2RlZicsCisgICAgICAgICdwYXJ0ZWRfaGFzaCcsICdwYXJ0ZWRf aGFzaF8wJywKKyAgICAgICAgJ3J0X2xvZycsICdydCcsCisgICAgICAgICdzdHgnLCAncmxzJywg J3JpX2Z1bGwnLCAncmlfaWR4JywgJ3VubycKKyAgICBdOworICAgIHQgdGV4dDsKKyAgICBzdG10 IHRleHQ7CitCRUdJTgorICAgIERST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7Cisg ICAgQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKKyAgICBGT1JFQUNIIHQgSU4gQVJSQVkg dGFibGVzIExPT1AKKyAgICAgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgICAgIFNFTEVDVCBsaW5l IEZST00gcGd0YmxfZGRsX3J0X29yaWcgV0hFUkUgbmFtZSA9IHQgT1JERVIgQlkgb3JkCisgICAg ICAgIExPT1AKKyAgICAgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICAgICAgRU5EIExPT1A7Cisg ICAgRU5EIExPT1A7CitFTkQgJCQ7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDI1IG90aGVy IG9iamVjdHMKK0RFVEFJTDogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgYmFzaWMKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgaWRfY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZF9jdXN0b20K K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgZ2VuX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg c3RvcmFnZV9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJlZmQKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgY29ucworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZHhkCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBhcgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjaAorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBhdHRvcHQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX3JhbmdlCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIHBhcnRlZF9oYXNoCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJ0 Citkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJ0X2xvZworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBz dHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmxzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJp X2Z1bGwKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfaWR4Citkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHVubworZHJvcCBjYXNjYWRlcyB0byB0eXBlIHR5cGVkX3QKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgdHlwZWRfcGxhaW4KK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdHlwZWRfb3ZlcgorZHJv cCBjYXNjYWRlcyB0byB2aWV3IHYKK2Ryb3AgY2FzY2FkZXMgdG8gc2VxdWVuY2UgcworV0lUSCBh ZnRlcl9kZGwgQVMgKAorICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKKyAgICBGUk9N IChTRUxFQ1QgRElTVElOQ1QgbmFtZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKSBBUyB0LAorICAg ICAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5h bWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXIn LCAnZmFsc2UnKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpCispCisoU0VMRUNUICdtaXNz aW5nLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9v cmlnCisgRVhDRVBUCisgU0VMRUNUICdtaXNzaW5nLWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUg RlJPTSBhZnRlcl9kZGwpCitVTklPTiBBTEwKKyhTRUxFQ1QgJ2V4dHJhLWluLWNvcHknIEFTIGtp bmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbAorIEVYQ0VQVAorIFNFTEVDVCAnZXh0 cmEtaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKQorT1JE RVIgQlkga2luZCwgbmFtZSwgb3JkOworIGtpbmQgfCBuYW1lIHwgb3JkIHwgbGluZSAKKy0tLS0t LSstLS0tLS0rLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCistLSBDbGVhbnVwLgorRFJPUCBTQ0hF TUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMjAg b3RoZXIgb2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1 c3RvbQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmVmZAorZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeGQKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoCitkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfcmFuZ2UK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHJ0Citkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIHN0eAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgcmlfZnVsbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgdW5vCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCA4ZmEwYTZjNDdm Yi4uOWVjYTY0Y2NhM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtODEsNyAr ODEsNyBAQCB0ZXN0OiBjcmVhdGVfdGFibGVfbGlrZSBhbHRlcl9nZW5lcmljIGFsdGVyX29wZXJh dG9yIG1pc2MgYXN5bmMgZGJzaXplIG1lcmdlIG1pcwogIyBjb2xsYXRlLmxpbnV4LnV0ZjggYW5k IGNvbGxhdGUuaWN1LnV0ZjggdGVzdHMgY2Fubm90IGJlIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGVh Y2ggb3RoZXIKICMgcHNxbCBkZXBlbmRzIG9uIGNyZWF0ZV9hbQogIyBhbXV0aWxzIGRlcGVuZHMg b24gZ2VvbWV0cnksIGNyZWF0ZV9pbmRleF9zcGdpc3QsIGhhc2hfaW5kZXgsIGJyaW4KLXRlc3Q6 IHJ1bGVzIHBzcWwgcHNxbF9jcm9zc3RhYiBwc3FsX3BpcGVsaW5lIGFtdXRpbHMgc3RhdHNfZXh0 IGNvbGxhdGUubGludXgudXRmOCBjb2xsYXRlLndpbmRvd3Mud2luMTI1MgordGVzdDogcnVsZXMg cHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxfcGlwZWxpbmUgYW11dGlscyBzdGF0c19leHQgY29sbGF0 ZS5saW51eC51dGY4IGNvbGxhdGUud2luZG93cy53aW4xMjUyIHBnX2dldF90YWJsZV9kZGwKIAog IyAtLS0tLS0tLS0tCiAjIFJ1biB0aGVzZSBhbG9uZSBzbyB0aGV5IGRvbid0IHJ1biBvdXQgb2Yg cGFyYWxsZWwgd29ya2VycwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0 X3RhYmxlX2RkbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjgxZmY2ZGM0YjEKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNx bApAQCAtMCwwICsxLDQ0MCBAQAorLS0KKy0tIHBnX2dldF90YWJsZV9kZGwKKy0tCistLSBBbGwg dGVzdHMgcGFzcyBvd25lcj0+ZmFsc2Ugc28gdGhlIEFMVEVSIFRBQkxFIE9XTkVSIFRPIGxpbmUg aXMgbm90CistLSBlbWl0dGVkLCBrZWVwaW5nIG91dHB1dCBzdGFibGUgYWNyb3NzIHRlc3QgcnVu bmVycyAod2hpY2ggbWF5IHJ1biB1bmRlcgorLS0gZGlmZmVyZW50IHJvbGUgbmFtZXMpLgorLS0K K0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7CitTRVQgc2VhcmNoX3BhdGggPSBwZ3RibF9k ZGxfdGVzdDsKKworLS0gQmFzaWMgdGFibGUgd2l0aCBQUklNQVJZIEtFWSwgTk9UIE5VTEwsIERF RkFVTFQsIENPTExBVEUuCitDUkVBVEUgVEFCTEUgYmFzaWMgKAorICAgIGlkIGludCBQUklNQVJZ IEtFWSwKKyAgICBuYW1lIHRleHQgTk9UIE5VTEwgREVGQVVMVCAnYW5vbicgQ09MTEFURSAiQyIK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpOworCistLSBJZGVudGl0eSBjb2x1bW5zICh3aXRoIGRlZmF1bHQgYW5k IGN1c3RvbSBzZXF1ZW5jZSBvcHRpb25zKS4KK0NSRUFURSBUQUJMRSBpZF9jb2xzICgKKyAgICBp ZF9hbHdheXMgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFksCisgICAgaWRfZGVmYXVs dCBpbnQgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkKKyk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2lkX2NvbHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisKK0NSRUFURSBUQUJMRSBpZF9jdXN0b20gKAorICAgIHYgaW50IEdFTkVSQVRFRCBBTFdBWVMg QVMgSURFTlRJVFkgKAorICAgICAgICBTRVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92X3NlcQorICAg ICAgICBTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNQorICAgICAgICBNSU5WQUxVRSA1MCBN QVhWQUxVRSAxMDAwCisgICAgICAgIENBQ0hFIDEwIENZQ0xFCisgICAgKQorKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworCistLSBHZW5lcmF0ZWQgc3RvcmVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5f Y29scyAoCisgICAgY2VudHMgaW50LAorICAgIGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxX QVlTIEFTIChjZW50cyAvIDEwMC4wKSBTVE9SRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2dlbl9jb2xzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBT VE9SQUdFIGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdoZW4gbm9uLWRlZmF1bHQgZm9y IHRoZSB0eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMgKAorICAgIGEgdGV4dCBTVE9S QUdFIEVYVEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0ZXh0IENPTVBS RVNTSU9OIHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0b3JhZ2Vf Y29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gQ29uc3RyYWludHM6IENI RUNLLCBVTklRVUUsIEZPUkVJR04gS0VZIChERUZFUlJBQkxFKS4KK0NSRUFURSBUQUJMRSByZWZk IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGNvbnMgKAorICAgIGEgaW50IENI RUNLIChhID4gMCksCisgICAgYiBpbnQgVU5JUVVFLAorICAgIGMgaW50IFJFRkVSRU5DRVMgcmVm ZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0t IEluZGV4ZXM6IGZ1bmN0aW9uYWwgYW5kIHBhcnRpYWwuICBDb25zdHJhaW50LWJhY2tpbmcgaW5k ZXhlcyBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZXkgYXJlIGVtaXR0ZWQgYnkgdGhlIGNvbnN0cmFp bnQgbG9vcCkuCitDUkVBVEUgVEFCTEUgaWR4ZCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRl eHQpOworQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gaWR4ZCAobG93ZXIobmFtZSkpOworQ1JF QVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIChpZCkgV0hFUkUgaWQgPiAxMDA7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJyk7CisKKy0tIEluaGVyaXRhbmNlLCBpbmNsdWRpbmcgYSBjaGlsZCBERUZBVUxUIG92ZXJy aWRlIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgcGFyIChhIGludCBERUZB VUxUIDEsIGIgdGV4dCk7CitDUkVBVEUgVEFCTEUgY2ggKGMgaW50KSBJTkhFUklUUyAocGFyKTsK K0FMVEVSIFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZBVUxUIDk5OTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2gnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczogZW1pdHRlZCBhcyBBTFRFUiBDT0xVTU4gU0VU ICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAoYSBpbnQsIGIgdGV4dCk7CitBTFRFUiBUQUJM RSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChuX2Rpc3RpbmN0ID0gMTAwKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScpOworCistLSBQYXJ0aXRpb25lZCB0YWJsZSBwYXJlbnQgKFJBTkdFIGFuZCBIQVNIKS4KK0NS RUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2UgKGlkIGludCwgayBpbnQpIFBBUlRJVElPTiBCWSBSQU5H RSAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAo aWQgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfaGFzaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0g UGFydGl0aW9uIGNoaWxkcmVuOiBGUk9NL1RPLCBXSVRIIChtb2R1bHVzLCByZW1haW5kZXIpLCBE RUZBVUxULgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRf cmFuZ2UKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworQUxURVIgVEFCTEUgcGFy dGVkX3JhbmdlXzEgQUxURVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRf aGFzaAorICAgIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElP TiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0g UnVsZXMuCitDUkVBVEUgVEFCTEUgcnQgKGlkIGludCk7CitDUkVBVEUgVEFCTEUgcnRfbG9nIChp ZCBpbnQpOworQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBBUyBPTiBJTlNFUlQgVE8gcnQKKyAg ICBETyBBTFNPIElOU0VSVCBJTlRPIHJ0X2xvZyBWQUxVRVMgKE5FVy5pZCk7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOwor CistLSBFeHRlbmRlZCBzdGF0aXN0aWNzLgorQ1JFQVRFIFRBQkxFIHN0eCAoYSBpbnQsIGIgaW50 LCBjIGludCk7CitDUkVBVEUgU1RBVElTVElDUyBzdHhfbmR2IChuZGlzdGluY3QpIE9OIGEsIGIg RlJPTSBzdHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitD UkVBVEUgVEFCTEUgcmxzIChpZCBpbnQpOworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVW RUwgU0VDVVJJVFk7CitBTFRFUiBUQUJMRSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJyk7CisKKy0tIFJFUExJQ0EgSURFTlRJVFk6IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0 aGUgZGVmYXVsdC4KK0NSRUFURSBUQUJMRSByaV9mdWxsIChhIGludCk7CitBTFRFUiBUQUJMRSBy aV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRB QkxFIHJpX2lkeCAoYSBpbnQgTk9UIE5VTEwpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhf YSBPTiByaV9pZHggKGEpOworQUxURVIgVEFCTEUgcmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggcmlfaWR4X2E7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lk eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gVU5MT0dHRUQgKyByZWxvcHRp b25zLgorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9y ID0gNzApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFR5cGVkIHRhYmxlIChDUkVBVEUgVEFCTEUgT0YgdHlw ZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJpdGVkIGZyb20gdGhlCistLSB0eXBlIGVtaXQgbm90aGlu ZzsgbG9jYWxseS1hcHBsaWVkIERFRkFVTFQsIE5PVCBOVUxMIGFuZCBDSEVDSyBjb21lCistLSBv dXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNvbCBXSVRIIE9QVElPTlMgLi4uKSIgbGlzdC4KK0NSRUFU RSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50LCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIHR5cGVkX3Bs YWluIE9GIHR5cGVkX3Q7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5cGVkX3Bs YWluJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCitDUkVBVEUgVEFCTEUgdHlwZWRf b3ZlciBPRiB0eXBlZF90ICgKKyAgICBhIFdJVEggT1BUSU9OUyBERUZBVUxUIDcgTk9UIE5VTEws CisgICAgYiBXSVRIIE9QVElPTlMgTk9UIE5VTEwsCisgICAgQ09OU1RSQUlOVCBiX25vbmVtcHR5 IENIRUNLIChsZW5ndGgoYikgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgndHlwZWRfb3Zlcic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gVGVtcG9y YXJ5IHRhYmxlcyArIE9OIENPTU1JVC4gIFRlbXAgdGFibGVzIGxpdmUgaW4gYSBzZXNzaW9uLWxv Y2FsCistLSBuYW1lc3BhY2Ugd2hvc2UgbmFtZSB2YXJpZXMgYmV0d2VlbiBydW5zLCBzbyB3ZSBz dHJpcCB0aGUgc2NoZW1hCistLSBwcmVmaXguICBPTiBDT01NSVQgRFJPUCBvbmx5IGZpcmVzIGF0 IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMgdGhhdAorLS0gbmVlZCB0byBzZWUgdGhlIGNhdGFsb2cg ZW50cnkgbXVzdCBydW4gaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gYXMKKy0tIHRoZSBDUkVBVEUu CitCRUdJTjsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50KTsKK0NSRUFU RSBURU1QIFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnQpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsK K0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZHJvcCAoaWQgaW50KSBPTiBDT01NSVQgRFJPUDsKKwor U0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1swLTldKyI/XC4nLCAncGdf dGVtcC4nKSBBUyBsaW5lCitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVmYXVsdCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFU RSAlJzsKKworU0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1swLTldKyI/ XC4nLCAncGdfdGVtcC4nKSBBUyBsaW5lCitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVs ZXRlJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElL RSAnQ1JFQVRFICUnOworCitTRUxFQ1QgcmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/ WzAtOV0rIj9cLicsICdwZ190ZW1wLicpIEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgn dGVtcF9kcm9wJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxp bmUgTElLRSAnQ1JFQVRFICUnOworUk9MTEJBQ0s7CisKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLCAncHJldHR5JywgJ3RydWUnKTsKKworLS0gaW5jbHVkZXNfKiBnYXRpbmc6IGVhY2ggc3Vi LW9iamVjdCBjYXRlZ29yeSBjYW4gYmUgc3VwcHJlc3NlZCBpbmRpdmlkdWFsbHkuCistLSBpbmNs dWRlc19pbmRleGVzPWZhbHNlIGhpZGVzIHRoZSBDUkVBVEUgSU5ERVggc3RhdGVtZW50cy4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19pbmRleGVz JywgJ2ZhbHNlJyk7CisKKy0tIGluY2x1ZGVzX2NvbnN0cmFpbnRzPWZhbHNlIGhpZGVzIGJvdGgg aW5saW5lIENIRUNLIGluIENSRUFURSBUQUJMRSBhbmQKKy0tIHRoZSBBTFRFUiBUQUJMRSAuLi4g QUREIENPTlNUUkFJTlQgbGluZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Nv bnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnaW5jbHVkZXNfY29uc3RyYWludHMnLCAnZmFsc2UnKTsKKworLS0gaW5jbHVkZXNf cnVsZXM9ZmFsc2UgaGlkZXMgdGhlIENSRUFURSBSVUxFLgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdpbmNsdWRlc19ydWxlcycsICdmYWxzZScpOworCistLSBpbmNs dWRlc19zdGF0aXN0aWNzPWZhbHNlIGhpZGVzIHRoZSBDUkVBVEUgU1RBVElTVElDUy4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzX3N0YXRpc3RpY3Mn LCAnZmFsc2UnKTsKKworLS0gaW5jbHVkZXNfcmxzPWZhbHNlIGhpZGVzIHRoZSBFTkFCTEUvRk9S Q0UgUk9XIExFVkVMIFNFQ1VSSVRZIHRvZ2dsZXMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdpbmNsdWRlc19ybHMnLCAnZmFsc2UnKTsKKworLS0gaW5jbHVkZXNf cmVwbGljYV9pZGVudGl0eT1mYWxzZSBoaWRlcyB0aGUgUkVQTElDQSBJREVOVElUWSBjbGF1c2Uu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXNf cmVwbGljYV9pZGVudGl0eScsICdmYWxzZScpOworCistLSBpbmNsdWRlc19wYXJ0aXRpb246IGRl ZmF1bHQgaXMgZmFsc2UsIHNvIHRoZSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQKKy0tIERETCBv biBpdHMgb3duIGRvZXMgbm90IGluY2x1ZGUgaXRzIGNoaWxkcmVuLiAgU2V0dGluZyBpdCB0byB0 cnVlCistLSBhcHBlbmRzIHRoZSBjaGlsZHJlbidzIERETCBhZnRlciB0aGUgcGFyZW50LgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXNf cGFydGl0aW9uJywgJ3RydWUnKTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBzdHJpcHMg dGhlIHNjaGVtYSBmcm9tIHRoZSB0YXJnZXQgdGFibGUgaXRzZWxmCistLSBhbmQgZnJvbSBzYW1l LXNjaGVtYSBzaWJsaW5nIHJlZmVyZW5jZXMgKGluaGVyaXRhbmNlL3BhcnRpdGlvbgorLS0gcGFy ZW50cywgaWRlbnRpdHkgc2VxdWVuY2VzIGluIHRoZSBzYW1lIHNjaGVtYSksIHdoaWxlIGNyb3Nz LXNjaGVtYQorLS0gcmVmZXJlbmNlcyBhcmUga2VwdCBxdWFsaWZpZWQgZm9yIGNvcnJlY3RuZXNz LgorLS0KKy0tIEJhcmUgQ1JFQVRFIFRBQkxFIGZvciBhbiBvcmRpbmFyeSB0YWJsZS4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcs ICdmYWxzZScpOworCistLSBJTkhFUklUUyBwYXJlbnQgaW4gdGhlIHNhbWUgc2NoZW1hIGlzIGVt aXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKworLS0gUGFydGl0aW9uIHBhcmVudCBp biB0aGUgc2FtZSBzY2hlbWEgaXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcs ICdmYWxzZScpOworCistLSBDcm9zcy1zY2hlbWEgRksgdGFyZ2V0IGtlZXBzIHF1YWxpZmljYXRp b24uICBUaGUgJ3JlZmQnIHRhYmxlIGlzIGluCistLSBwZ3RibF9kZGxfdGVzdDsgcGxhY2UgYW4g RksgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHNjaGVtYSBhbmQgdmVyaWZ5IGl0CistLSBzdGF5cyBx dWFsaWZpZWQgZXZlbiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UuCitDUkVBVEUgU0NIRU1B IHBndGJsX2RkbF9vdGhlcjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfb3RoZXIucGFyZW50IChp ZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsgKAorICAgIGlkICBp bnQgUFJJTUFSWSBLRVksCisgICAgcGlkIGludCBSRUZFUkVOQ0VTIHBndGJsX2RkbF9vdGhlci5w YXJlbnQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3hzY2hlbWFfZmsnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworCistLSBJZGVudGl0eSBjb2x1bW4gd2l0 aCBhIGN1c3RvbSBzZXF1ZW5jZSBuYW1lIGluIHRoZSBzYW1lIHNjaGVtYSBpcworLS0gZW1pdHRl ZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9t Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKworLS0gUm91bmQtdHJpcDogd2l0 aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLCBhZnRlciBTRVQgc2VhcmNoX3BhdGggdGhlCistLSBE REwgY2FuIGJlIHJlcGxheWVkIGludG8gYSBkaWZmZXJlbnQgdGFyZ2V0IHNjaGVtYS4KK0NSRUFU RSBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheTsKK0RPICQkCitERUNMQVJFCisgICAgc3RtdCB0ZXh0 OworQkVHSU4KKyAgICBTRVQgTE9DQUwgc2VhcmNoX3BhdGggPSBwZ3RibF9kZGxfcmVwbGF5Owor ICAgIEZPUiBzdG10IElOCisgICAgICAgIFNFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGd0YmxfZGRsX3Rlc3QuYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpIEFT IGxpbmUKKyAgICBMT09QCisgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICBFTkQgTE9PUDsKK0VO RCAkJDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJlZ25hbWVzcGFjZTo6dGV4dCwgcmVsbmFtZQor RlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0YmxfZGRsX3JlcGxheS5iYXNpYyc6OnJlZ2Ns YXNzOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheSBDQVNDQURFOworRFJPUCBUQUJMRSB4 c2NoZW1hX2ZrOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX290aGVyIENBU0NBREU7CisKKy0tIExv Y2FsbHktZGVjbGFyZWQgQ0hFQ0sgb24gYSBwYXJ0aXRpb24gY2hpbGQgaGFzIG5vIGlubGluZSBj b2x1bW4KKy0tIGxpc3QgdG8gbGl2ZSBpbiAoUEFSVElUSU9OIE9GIGZvcm0pLCBzbyBpdCBtdXN0 IGNvbWUgb3V0IGFzIGEKKy0tIHNlcGFyYXRlIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlO VCBzdGF0ZW1lbnQuCitDUkVBVEUgVEFCTEUgcGFydGVkX2NoayAoaWQgaW50LCB2YWwgaW50KSBQ QVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrX2NoaWxkIFBB UlRJVElPTiBPRiBwYXJ0ZWRfY2hrCisgICAgKENPTlNUUkFJTlQgY2hrX2lubGluZSBDSEVDSyAo dmFsID4gMCkpCisgICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2Noa19jaGlsZCc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnKTsKK0RST1AgVEFCTEUgcGFydGVkX2NoazsKKworLS0gSW5oZXJpdGFuY2UgY2hp bGRyZW4gb2YgYSBwYXJlbnQgd2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4gc2hvdWxkIG5vdAorLS0g ZW1pdCBhbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIGZvciB0aGUgaW5oZXJpdGVkIGdl bmVyYXRlZAorLS0gY29sdW1uOiB0aGUgR0VORVJBVEVEIGV4cHJlc3Npb24gY2FycmllcyBkb3du IHRocm91Z2ggaW5oZXJpdGFuY2UsCistLSBhbmQgU0VUIERFRkFVTFQgd291bGQgZmFpbCBhdCBy ZXBsYXkgYWdhaW5zdCBhIGdlbmVyYXRlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUgcGFyX2dlbiAo CisgICAgaWQgaW50LAorICAgIGcgIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChpZCAqIDIpIFNU T1JFRAorKTsKK0NSRUFURSBUQUJMRSBjaF9nZW4gKCkgSU5IRVJJVFMgKHBhcl9nZW4pOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaF9nZW4nOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJyk7CitEUk9QIFRBQkxFIHBhcl9nZW4gQ0FTQ0FERTsKKworLS0gVXNlci1uYW1lZCBO T1QgTlVMTCBjb25zdHJhaW50IG11c3QgYmUgZW1pdHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJB SU5UIG5hbWUgTk9UIE5VTEwiIHNvIGEgcmVwbGF5IGRvZXMgbm90IGNvbGxpZGUgd2l0aCB0aGUK Ky0tIGF1dG8tbmFtZWQgTk9UIE5VTEwgdGhhdCBQb3N0Z3JlU1FMIHdvdWxkIG90aGVyd2lzZSBj cmVhdGUgZnJvbSBhCistLSBwbGFpbiBpbmxpbmUgIk5PVCBOVUxMIi4gIFRoZSBjb25zdHJhaW50 IGxvb3Agc2tpcHMgdGhlIHVzZXItbmFtZWQKKy0tIGVudHJ5IHRvIGF2b2lkIGRvdWJsZS1lbWlz c2lvbi4KK0NSRUFURSBUQUJMRSBubl9uYW1lZCAoCisgICAgYSBpbnQgQ09OU1RSQUlOVCBteV9u biBOT1QgTlVMTCwKKyAgICBiIGludCBOT1QgTlVMTAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnbm5fbmFtZWQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CitEUk9Q IFRBQkxFIG5uX25hbWVkOworCistLSBMb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxMIG9uIGFuIGlu aGVyaXRlZCBjb2x1bW4uICBUaGUgY29sdW1uIGl0c2VsZgorLS0gaXMgb21pdHRlZCBmcm9tIHRo ZSBjaGlsZCdzIGNvbHVtbiBsaXN0IChhdHRpc2xvY2FsPWZhbHNlKSwgc28gdGhlCistLSB1c2Vy LW5hbWVkIE5PVCBOVUxMIG11c3QgY29tZSBvdXQgdmlhIHRoZSBwb3N0LUNSRUFURSBjb25zdHJh aW50CistLSBsb29wIHJhdGhlciB0aGFuIGlubGluZS4KK0NSRUFURSBUQUJMRSBubl9wYXIgKGEg aW50KTsKK0NSRUFURSBUQUJMRSBubl9jaCAoYiBpbnQpIElOSEVSSVRTIChubl9wYXIpOworQUxU RVIgVEFCTEUgbm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwgYTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fY2gnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CitEUk9QIFRBQkxFIG5uX3BhciBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZh bHNlIG11c3QgZHJvcCB0aGUgc2NoZW1hIHByZWZpeCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Np b25zIGFuZCBpbmxpbmUgQ0hFQ0sgYm9kaWVzIHRoYXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCist LSBvYmplY3RzIChzZXF1ZW5jZSB2aWEgbmV4dHZhbCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxs KS4gIFRoaXMKKy0tIHJlbGllcyBvbiB0aGUgZGVwYXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93 ZWQgc2VhcmNoX3BhdGggcmF0aGVyCistLSB0aGFuIG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF94cmVmOworQ1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94 cmVmLm15c2VxOworQ1JFQVRFIEZVTkNUSU9OIHBndGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5T IGludCBMQU5HVUFHRSBzcWwgSU1NVVRBQkxFCisgICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3hyZWYudCAoCisgICAgaWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3Bn dGJsX2RkbF94cmVmLm15c2VxJyksCisgICAgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBD SEVDSyAocGd0YmxfZGRsX3hyZWYuZih2YWwpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BndGJsX2RkbF94cmVmLnQnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CitEUk9QIFNDSEVNQSBwZ3Ri bF9kZGxfeHJlZiBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9U IGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlCistLSBjb250ZW50cyBoYXBwZW4gdG8gY29u dGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkgYSBkb3QuICBUaGUKKy0tIGluLXN0cmlu ZyBzdGF0ZSBvZiB0aGUgcHJlZml4IHN0cmlwcGVyIHByZXNlcnZlcyB0aGVtIHZlcmJhdGltLgor Q1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfc3RyOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIu cCAoaWQgaW50LCBub3RlIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF9zdHIucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9zdHIucAorICAgIChD T05TVFJBSU5UIGNoayBDSEVDSyAobm90ZSA8PiAncGd0YmxfZGRsX3N0ci5zZWNyZXQnKSkKKyAg ICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwZ3RibF9kZGxfc3RyLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRs X3N0ciBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1 cHQgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycworLS0gd2hvc2UgY29udGVudHMgaGFwcGVuIHRv IGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90CistLSAoZm9yIGV4YW1w bGUgYSBjb2x1bW4gbGl0ZXJhbGx5IG5hbWVkICI8c2NoZW1hPi53ZWlyZCIgaW5zaWRlIHRoYXQK Ky0tIHNjaGVtYSkuICBUaGUgaW4taWRlbnQgc3RhdGUgb2YgdGhlIHByZWZpeCBzdHJpcHBlciBw cmVzZXJ2ZXMgdGhlbQorLS0gdmVyYmF0aW0uCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xaWQ7 CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wIChpZCBpbnQsICJwZ3RibF9kZGxfcWlkLndl aXJkIiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3FpZC5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3FpZC5wCisgICAgKENPTlNUUkFJ TlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVT IEZST00gKDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3Ri bF9kZGxfcWlkLnBjJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1h X3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3FpZCBDQVNDQURF OworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUg aXRzZWxmIHJlcXVpcmVzCistLSBxdW90aW5nIChpdHMgcHJlZml4IHN0YXJ0cyB3aXRoICIpLiAg Qm90aCBmb3JtcyBvZiB0aGUgcHJlZml4IOKAlAorLS0gYmFyZS1sb3dlcmNhc2UgYW5kIHF1b3Rl ZCDigJQgbXVzdCBiZSBzdHJpcHBlZCBmcm9tIG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8g Q1JFQVRFIElOREVYIHByZWZpeGVzLCB3aGlsZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJz IHRoYXQgaGFwcGVuIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NS RUFURSBTQ0hFTUEgIlBnVGJsLURkbC1RIjsKK0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJU IiAoaWQgaW50LCB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7 CitDUkVBVEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xh c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScp OworRFJPUCBTQ0hFTUEgIlBnVGJsLURkbC1RIiBDQVNDQURFOworCistLSBFcnJvcjogbm90IGFu IG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlLgorQ1JFQVRFIFZJRVcgdiBBUyBTRUxFQ1Qg MSBBUyB4OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd2Jzo6cmVnY2xhc3MpOwor CitDUkVBVEUgU0VRVUVOQ0UgczsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncyc6 OnJlZ2NsYXNzKTsKKworLS0gTlVMTCBhcmd1bWVudCByZXR1cm5zIG5vIHJvd3MuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoTlVMTCk7CisKKy0tIFVucmVjb2duaXplZCBvcHRpb24u CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdib2d1 cycsICd0cnVlJyk7CisKKy0tIE9kZCBudW1iZXIgb2YgdmFyaWFkaWMgYXJncy4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ3ByZXR0eScpOworCist LSBSb3VuZC10cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBldmVyeSB0ZXN0IHRhYmxlLCBjYXB0dXJl IHRoZSBEREwgdGhlCistLSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0aGUgc2NoZW1hLCByZXBsYXkg ZWFjaCB0YWJsZSdzIERETCBpbgorLS0gZGVwZW5kZW5jeSBvcmRlciwgYW5kIGNvbmZpcm0gdGhh dCBwZ19nZXRfdGFibGVfZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0tIHJlbGF0aW9uIG1hdGNoZXMg dGhlIG9yaWdpbmFsIGxpbmUtZm9yLWxpbmUuICBUaGUgZmluYWwgU0VMRUNUIG11c3QKKy0tIHJl dHVybiB6ZXJvIHJvd3MuCitDUkVBVEUgVEVNUCBUQUJMRSBwZ3RibF9kZGxfcnRfb3JpZyAobmFt ZSB0ZXh0LCBvcmQgaW50LCBsaW5lIHRleHQpOworSU5TRVJUIElOVE8gcGd0YmxfZGRsX3J0X29y aWcKK1NFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKK0ZST00gKFZBTFVFUworICAgICAgICAo J2Jhc2ljJyksICgnaWRfY29scycpLCAoJ2lkX2N1c3RvbScpLCAoJ2dlbl9jb2xzJyksICgnc3Rv cmFnZV9jb2xzJyksCisgICAgICAgICgncmVmZCcpLCAoJ2NvbnMnKSwgKCdpZHhkJyksCisgICAg ICAgICgncGFyJyksICgnY2gnKSwgKCdhdHRvcHQnKSwKKyAgICAgICAgKCdwYXJ0ZWRfcmFuZ2Un KSwgKCdwYXJ0ZWRfcmFuZ2VfMScpLCAoJ3BhcnRlZF9yYW5nZV9kZWYnKSwKKyAgICAgICAgKCdw YXJ0ZWRfaGFzaCcpLCAoJ3BhcnRlZF9oYXNoXzAnKSwKKyAgICAgICAgKCdydF9sb2cnKSwgKCdy dCcpLAorICAgICAgICAoJ3N0eCcpLCAoJ3JscycpLCAoJ3JpX2Z1bGwnKSwgKCdyaV9pZHgnKSwg KCd1bm8nKQorICAgICApIEFTIHQobmFtZSksCisgICAgIExBVEVSQUwgcGdfZ2V0X3RhYmxlX2Rk bCgoJ3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5l LCBvcmQpOworCitETyAkJAorREVDTEFSRQorICAgIHRhYmxlcyBDT05TVEFOVCB0ZXh0W10gOj0g QVJSQVlbCisgICAgICAgICdiYXNpYycsICdpZF9jb2xzJywgJ2lkX2N1c3RvbScsICdnZW5fY29s cycsICdzdG9yYWdlX2NvbHMnLAorICAgICAgICAncmVmZCcsICdjb25zJywgJ2lkeGQnLAorICAg ICAgICAncGFyJywgJ2NoJywgJ2F0dG9wdCcsCisgICAgICAgICdwYXJ0ZWRfcmFuZ2UnLCAncGFy dGVkX3JhbmdlXzEnLCAncGFydGVkX3JhbmdlX2RlZicsCisgICAgICAgICdwYXJ0ZWRfaGFzaCcs ICdwYXJ0ZWRfaGFzaF8wJywKKyAgICAgICAgJ3J0X2xvZycsICdydCcsCisgICAgICAgICdzdHgn LCAncmxzJywgJ3JpX2Z1bGwnLCAncmlfaWR4JywgJ3VubycKKyAgICBdOworICAgIHQgdGV4dDsK KyAgICBzdG10IHRleHQ7CitCRUdJTgorICAgIERST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENB U0NBREU7CisgICAgQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfdGVzdDsKKyAgICBGT1JFQUNIIHQg SU4gQVJSQVkgdGFibGVzIExPT1AKKyAgICAgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgICAgIFNF TEVDVCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcgV0hFUkUgbmFtZSA9IHQgT1JERVIgQlkg b3JkCisgICAgICAgIExPT1AKKyAgICAgICAgICAgIEVYRUNVVEUgc3RtdDsKKyAgICAgICAgRU5E IExPT1A7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CisKK1dJVEggYWZ0ZXJfZGRsIEFTICgKKyAg ICBTRUxFQ1QgdC5uYW1lLCBvLm9yZCwgby5saW5lCisgICAgRlJPTSAoU0VMRUNUIERJU1RJTkNU IG5hbWUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykgQVMgdCwKKyAgICAgICAgIExBVEVSQUwgcGdf Z2V0X3RhYmxlX2RkbCgoJ3BndGJsX2RkbF90ZXN0LicgfHwgdC5uYW1lKTo6cmVnY2xhc3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJykgV0lUSCBP UkRJTkFMSVRZIG8obGluZSwgb3JkKQorKQorKFNFTEVDVCAnbWlzc2luZy1pbi1jb3B5JyBBUyBr aW5kLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZworIEVYQ0VQVAorIFNF TEVDVCAnbWlzc2luZy1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJfZGRsKQor VU5JT04gQUxMCisoU0VMRUNUICdleHRyYS1pbi1jb3B5JyBBUyBraW5kLCBuYW1lLCBvcmQsIGxp bmUgRlJPTSBhZnRlcl9kZGwKKyBFWENFUFQKKyBTRUxFQ1QgJ2V4dHJhLWluLWNvcHknLCBuYW1l LCBvcmQsIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZykKK09SREVSIEJZIGtpbmQsIG5hbWUs IG9yZDsKKworLS0gQ2xlYW51cC4KK0RST1AgU0NIRU1BIHBndGJsX2RkbF90ZXN0IENBU0NBREU7 Ci0tIAoyLjUxLjAKCg== --0000000000006f11340653f59505--