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.94.2) (envelope-from ) id 1qLPBJ-0031nv-Q3 for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Jul 2023 14:26:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qLPBI-00AJss-Ao for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Jul 2023 14:26:32 +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.94.2) (envelope-from ) id 1qLPBH-00AJsk-L1 for pgsql-hackers@lists.postgresql.org; Mon, 17 Jul 2023 14:26:32 +0000 Received: from mail-il1-x132.google.com ([2607:f8b0:4864:20::132]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qLPBC-000unu-CM for pgsql-hackers@lists.postgresql.org; Mon, 17 Jul 2023 14:26:30 +0000 Received: by mail-il1-x132.google.com with SMTP id e9e14a558f8ab-3466725f0beso28890995ab.1 for ; Mon, 17 Jul 2023 07:26:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689603985; x=1692195985; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=W5jeIb2Cgs0meEV1uS7NC6g5RDty9S7UBfW+6k+KwnA=; b=V7gTIQOoyUVZz3dfe+U7S8eKROD8P6t1iOOS3YLZtvECM9oIffDnA+vB7iMtSlJmvk vIlVYN7BPiuLjcteDr5BAPK4yHJVf68WCq92kWzGGczGDNEEVXogxBc1N2/0boTclDJp sf8FXe0bWcGjU3StHYg2gKnjBXTcnw7PZ2S3RMtL45x++rhO4x3rbLT/8rNakMqSSMnE CO/yUCM3kjaWYYGuo0VN5Da7RTzxOiv4MNXgO8CoraJDxfcxvvZw43u1QtSLD0Ox7SEZ MnngkOkn2eYG2ZiK+peRIvRZNkO8hBQeHDgq6CwJHgf28hzES+J/lj1FEG+JJ9zc7/20 pLnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689603985; x=1692195985; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=W5jeIb2Cgs0meEV1uS7NC6g5RDty9S7UBfW+6k+KwnA=; b=kJnOAP78LC0BSU4F/sDsRwgnu05ST9hTK2izK54wyg7JaLrNLBFEQA9XS4zY0OLgLz oZ46qKmgj3TvkuqKEXdTzL987/Lrohg/BIpukbKxSoJj4g44ZxE01iofhXp2IAWnHzE+ d9ISVf5cTlzwBc+RWbMNJ3WFewcc+jDOrvUH+gdUJ9AWFbxLT8LssT1+9WCzIUJVIS3H kuRnbZARp/3Xcz3z5OcE8VzGssuZx7RPJ6O4VwXc2zllLzuammDM6Yz6qg95i1oJWzfi DqKm6YlbSci0zdHsfvWbexHj+MHTzqAw2qLHFAzdY4uaVXY327rYmiHqkCP8fPBP44p9 6luA== X-Gm-Message-State: ABy/qLYHFuNNElObhjQEPAxjSIYizj3ZLtgnlBiiPyqKjVtvaWnCVrVP sMYq2gRWgBZsySPe08TP9BB+/08bk85nPOcNXxI= X-Google-Smtp-Source: APBJJlGAzfI1gPtiD98714a37Jxf0fEX0/XMD/jPTLmAqrqQvUDj5J1iVqLs6ahdMwpXUOORmYJ4P0dxi02fDjUL7ZA= X-Received: by 2002:a05:6e02:809:b0:346:6550:d30 with SMTP id u9-20020a056e02080900b0034665500d30mr12193697ilm.20.1689603985542; Mon, 17 Jul 2023 07:26:25 -0700 (PDT) MIME-Version: 1.0 References: <6ad2294a-cedc-2f3c-13bd-1ceceb56e4f7@postgrespro.ru> <20210302202617.GD29832@telsasoft.com> <20210720191334.GH19498@telsasoft.com> <23343B02-3008-474B-8392-76CEE0A4B9E8@yesql.se> In-Reply-To: <23343B02-3008-474B-8392-76CEE0A4B9E8@yesql.se> From: =?UTF-8?Q?St=C3=A9phane_Tachoires?= Date: Mon, 17 Jul 2023 16:26:14 +0200 Message-ID: Subject: Re: [PATCH] Automatic HASH and LIST partition creation To: Daniel Gustafsson Cc: Anastasia Lubennikova , Robert Haas , Justin Pryzby , Pavel Borisov , Thomas Munro , Rahila Syed , Michael Paquier , PostgreSQL Hackers , Fabien COELHO , Amul Sul Content-Type: multipart/mixed; boundary="0000000000005eb4c60600af9570" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005eb4c60600af9570 Content-Type: multipart/alternative; boundary="0000000000005eb4c40600af956e" --0000000000005eb4c40600af956e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, I found that thread (and the patch), but it seems to be pretty dead. Patch didn't apply, due to gen_node_support.pl Can I hope for a rebirth ? I've made a rebased patch,in case of no response... It's just the patch from https://www.postgresql.org/message-id/CALT9ZEG9oKz9-dv9YYZaeeXNpZp0+teLFSz7= QST28AcmERVpiw@mail.gmail.com rebased on 17dev Perhaps it's too early for a commit ; automatic range partitioning is still missing and, according to https://wiki.postgresql.org/wiki/Declarative_partitioning_improvements, syntax is arguable. If 'USING' it out of option (already a keyword for CREATE TABLE) and 'CONFIGURATION()' is not what we want, we should reach for a final decision first. I suggest OVER that is a keyword but unused in CREATE TABLE (nor ALTER TABLE). Whatever... For RANGE partitioning I think of four syntaxes (inspired by pg_partman) PARTITION BY RANGE(stamp) CONFIGURATION (SPAN interval CENTER datetime BACK integer AHEAD integer [DEFAULT [PARTITION] [defname]]) PARTITION BY RANGE(stamp) CONFIGURATION (SPAN interval START firstfrombound END lasttobound [DEFAULT [PARTITION] [defname]]) PARTITION BY RANGE(region_id) CONFIGURATION (STEP integer START integer END integer [DEFAULT [PARTITION] [defname]]) PARTITION BY RANGE(name) CONFIGURATION (BOUNDS (boundlist) [START firstfrombound] [END lasttobound] [DEFAULT [PARTITION] [defname]]) Last one should solve the addition operator problem with non numeric non timedate range. Plus, it allows non uniform range (thinking about an "encyclopedia volume" partitioning, you know 'A', 'B-CL', 'CL-D'...) CREATE table (LIKE other INCLUDING PARTITIONS) should create 'table' partitioned the same as 'other' and CREATE table (LIKE other INCLUDING PARTITIONS) PARTITION BY partspec CONFIGURATION(), should create 'table' partitioned by partspec and sub partitioned as 'other'. Then CREATE could accept multiple PARTITION BY CONFIGURATION(). For ALTER TABLE (and automatic maintenance) to be usable, we will need SPLIT and MERGE CONCURRENTLY (pg_pathman ?) enhanced by CREATE TABLE LIKE to handle subpartitioning. But that's another story. St=C3=A9phane. Le jeu. 2 d=C3=A9c. 2021 =C3=A0 12:20, Daniel Gustafsson = a =C3=A9crit : > This thread has stalled since July with review comments unanswered, I'm > marking > the patch Returned with Feedback. Please feel free to resubmit when/if a > new > patch is available. > > -- > Daniel Gustafsson https://vmware.com/ > > > > --=20 "O=C3=B9 se posaient les hirondelles avant l'invention du t=C3=A9l=C3=A9pho= ne ?" -- Gr=C3=A9goire Lacroix --0000000000005eb4c40600af956e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,
I found that thread (and the patch), but it seems = to be pretty dead.
Patch didn't apply, due to=C2=A0gen_node_support.pl
Can I hope f= or a rebirth ?

I've made a rebased patch,in ca= se of no response...

Perhaps it's too early for a commit=C2= =A0; automatic range partitioning is still missing and, according to=C2=A0<= a href=3D"https://wiki.postgresql.org/wiki/Declarative_partitioning_improve= ments">https://wiki.postgresql.org/wiki/Declarative_partitioning_improvemen= ts, syntax is arguable.

If 'USING' it = out of option (already a keyword for CREATE TABLE) and 'CONFIGURATION()= ' is not what we=C2=A0want, we should reach for a final decision first.=
I suggest OVER that is a keyword but unused in CREATE TABLE (nor= ALTER TABLE). Whatever...

For RANGE partitioning = I think of four syntaxes (inspired by pg_partman)
PARTITION BY RA= NGE(stamp) CONFIGURATION (SPAN interval CENTER datetime BACK integer AHEAD = integer [DEFAULT [PARTITION] [defname]])
PARTITION BY RANGE(stamp= ) CONFIGURATION (SPAN interval START=C2=A0firstfrombound=C2=A0END=C2=A0last= tobound [DEFAULT [PARTITION]=C2=A0[defname]])
PARTITION BY RANGE(= region_id) CONFIGURATION (STEP integer START integer END integer [DEFAULT [= PARTITION]=C2=A0[defname]])
PARTITION BY RANGE(name) CONFIGURATIO= N (BOUNDS (boundlist) [START firstfrombound] [END=C2=A0lasttobound] [DEFAUL= T [PARTITION]=C2=A0[defname]])

Last one should sol= ve the addition operator problem with non numeric non timedate range.
=
Plus, it allows non uniform range (thinking about an "encyclopedi= a volume" partitioning, you know 'A', 'B-CL', 'CL-= D'...)

CREATE table (LIKE other INCLUDING PART= ITIONS) should create 'table' partitioned the same as 'other= 9;
and
CREATE table (LIKE other INCLUDING PARTITIONS) P= ARTITION BY partspec CONFIGURATION(), should create 'table' partiti= oned by partspec and sub partitioned as 'other'.

Then CREATE could accept multiple PARTITION BY CONFIGURATION().

For ALTER TABLE (and automatic maintenance) to=C2=A0be= usable, we will need SPLIT and MERGE CONCURRENTLY (pg_pathman ?) enhanced = by CREATE TABLE LIKE to handle subpartitioning. But that's another stor= y.

St=C3=A9phane.


Le=C2=A0jeu.= 2 d=C3=A9c. 2021 =C3=A0=C2=A012:20, Daniel Gustafsson <daniel@yesql.se> a =C3=A9crit=C2=A0:
This thread has stalled sinc= e July with review comments unanswered, I'm marking
the patch Returned with Feedback.=C2=A0 Please feel free to resubmit when/i= f a new
patch is available.

--
Daniel Gustafsson=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0https://v= mware.com/





--
"O=C3=B9 se posaient les hirondelles = avant l'invention du t=C3=A9l=C3=A9phone ?"
=C2=A0 -- Gr= =C3=A9goire Lacroix
--0000000000005eb4c40600af956e-- --0000000000005eb4c60600af9570 Content-Type: text/x-patch; charset="US-ASCII"; name="v7-0001-This-is-a-simple-rebase-on-most-recent-17dev.patch" Content-Disposition: attachment; filename="v7-0001-This-is-a-simple-rebase-on-most-recent-17dev.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lk6x2ud20 RnJvbSBmZjg3NTY3MjU1NmEyZGEwOWNmY2M2Yzk3NjE3OGFiZDkxYzc0NjIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yMFRhY2hvaXJlcz89 IDxzdHRhY2hvaXJlc0BhaXJmcmFuY2UuZnI+CkRhdGU6IE1vbiwgMTcgSnVsIDIwMjMgMTM6MjU6 MjkgKzAyMDAKU3ViamVjdDogW1BBVENIIHY3XSBUaGlzIGlzIGEgc2ltcGxlIHJlYmFzZSBvbiBt b3N0IHJlY2VudCAxN2Rldi4gRHVlIHRvIGxhY2sKIG9mIGFuc3dlciBmcm9tIGF1dGhvciBQYXZl bCBCb3Jpc292IDxwYXNoa2luLmVsZmVAZ21haWwuY29tPgoKUHJldmlvdXMgbWVhbmluZ2Z1bGwg Y29tbWl0IGZyb20gYXV0aG9yIHdhczoKRnJvbSBlZjBmY2JhNjA3NjQxYWVmOTRhOWNlOWIwMzkz ZTYwN2JhNDc2YmE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXZlbCBCb3Jpc292 IDxwYXNoa2luLmVsZmVAZ21haWwuY29tPgpEYXRlOiBGcmksIDkgSnVsIDIwMjEgMDA6MzQ6MjEg KzA0MDAKU3ViamVjdDogW1BBVENIIHY1XSBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHBhcnRpdGlv bnMgYnkgTElTVCBhbmQgSEFTSAoKQSBwYXRjaCBhZGRzIENSRUFURSBUQUJMRSBzdGF0ZW1lbnQg c3ludGF4IGFuZCBmdW5jdGlvbnMgdG8gY3JlYXRlIGJvdGgKYSBwYXJlbnQgcGFydGl0aW9uZWQg dGFibGUgYW5kIGNoaWxkIHBhcnRpdGlvbnMgYXQgb25jZSBiYXNlZCBvbiBhCnBhcnRpdGlvbmlu ZyBydWxlcy4gVGhlIGNyZWF0ZWQgcGFydGl0aW9ucyBzZXQgY2FuIGJlIG1hbmlwdWxhdGVkIHVz aW5nCmV4aXN0aW5nIGV4cHJlc3Npb25zIGxpa2UgREVUQUNILCBDUkVBVEUgVEFCTEUuLiBQQVJU SVRJT04gT0YgZXRjLgoKSXQgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBtb3JlIGNvbXBsaWNh dGVkOgooMSkgcGFydGl0aW9uaW5nIEJZIFJBTkdFLAooMikgYXV0b21hdGljIGRlZmVycmVkIGNo aWxkIHBhcnRpdGlvbiBjcmVhdGlvbiBvbiBhIGZpcnN0IHRyeSB0bwppbnNlcnQgYSByb3cgd2l0 aCB3aGljaCBmdWxsZmlsbHMgYSBjb25kaXRpb24gZm9yIHRoZSBwYXJ0aXRpb24gZXRjLgotLS0K IGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgICAgICAgICB8ICA0OSArKysKIHNy Yy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAgICAgICB8ICA4MSArKystCiBzcmMv YmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgfCAxNDIgKysrKysrKwogc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgIHwgIDIzICsKIHNyYy9pbmNs dWRlL3BhcnRpdGlvbmluZy9wYXJ0ZGVmcy5oICAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgfCA0NjQgKysrKysrKysrKysrKysrKysrKysr CiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsICAgICAgfCAyNjUgKysrKysr KysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDEwMjQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbAppbmRleCAxMGVmNjk5ZmFiLi41YTg3ZmEx YTdlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKQEAgLTI5LDYgKzI5LDcgQEAgQ1JF QVRFIFsgWyBHTE9CQUwgfCBMT0NBTCBdIHsgVEVNUE9SQVJZIHwgVEVNUCB9IHwgVU5MT0dHRUQg XSBUQUJMRSBbIElGIE5PVCBFWEkKIF0gKQogWyBJTkhFUklUUyAoIDxyZXBsYWNlYWJsZT5wYXJl bnRfdGFibGU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApIF0KIFsgUEFSVElUSU9OIEJZIHsgUkFO R0UgfCBMSVNUIHwgSEFTSCB9ICggeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29s dW1uX25hbWU8L3JlcGxhY2VhYmxlPiB8ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiApIH0gWyBDT0xMQVRFIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5jb2xsYXRpb248L3JlcGxhY2VhYmxlPiBdIFsgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm9wY2xhc3M8L3JlcGxhY2VhYmxlPiBdIFssIC4uLiBdICkgXQorWyBD T05GSUdVUkFUSU9OICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9i b3VuZF9hdXRvX3NwZWM8L3JlcGxhY2VhYmxlPiApIF0KIFsgVVNJTkcgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm1ldGhvZDwvcmVwbGFjZWFibGU+IF0KIFsgV0lUSCAoIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zdG9yYWdlX3BhcmFtZXRlcjwvcmVwbGFjZWFibGU+IFs9 IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj52YWx1ZTwvcmVwbGFjZWFibGU+XSBbLCAu Li4gXSApIHwgV0lUSE9VVCBPSURTIF0KIFsgT04gQ09NTUlUIHsgUFJFU0VSVkUgUk9XUyB8IERF TEVURSBST1dTIHwgRFJPUCB9IF0KQEAgLTQxLDYgKzQyLDcgQEAgQ1JFQVRFIFsgWyBHTE9CQUwg fCBMT0NBTCBdIHsgVEVNUE9SQVJZIHwgVEVNUCB9IHwgVU5MT0dHRUQgXSBUQUJMRSBbIElGIE5P VCBFWEkKICAgICBbLCAuLi4gXQogKSBdCiBbIFBBUlRJVElPTiBCWSB7IFJBTkdFIHwgTElTVCB8 IEhBU0ggfSAoIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9y ZXBsYWNlYWJsZT4gfCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9u PC9yZXBsYWNlYWJsZT4gKSB9IFsgQ09MTEFURSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+Y29sbGF0aW9uPC9yZXBsYWNlYWJsZT4gXSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5vcGNsYXNzPC9yZXBsYWNlYWJsZT4gXSBbLCAuLi4gXSApIF0KK1sgQ09ORklHVVJBVElP TiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXJ0aXRpb25fYm91bmRfYXV0b19z cGVjPC9yZXBsYWNlYWJsZT4gKSBdCiBbIFVTSU5HIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5tZXRob2Q8L3JlcGxhY2VhYmxlPiBdCiBbIFdJVEggKCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+c3RvcmFnZV9wYXJhbWV0ZXI8L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKSB8IFdJ VEhPVVQgT0lEUyBdCiBbIE9OIENPTU1JVCB7IFBSRVNFUlZFIFJPV1MgfCBERUxFVEUgUk9XUyB8 IERST1AgfSBdCkBAIC01Myw2ICs1NSw3IEBAIENSRUFURSBbIFsgR0xPQkFMIHwgTE9DQUwgXSB7 IFRFTVBPUkFSWSB8IFRFTVAgfSB8IFVOTE9HR0VEIF0gVEFCTEUgWyBJRiBOT1QgRVhJCiAgICAg WywgLi4uIF0KICkgXSB7IEZPUiBWQUxVRVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnBhcnRpdGlvbl9ib3VuZF9zcGVjPC9yZXBsYWNlYWJsZT4gfCBERUZBVUxUIH0KIFsgUEFSVElU SU9OIEJZIHsgUkFOR0UgfCBMSVNUIHwgSEFTSCB9ICggeyA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiB8ICggPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiApIH0gWyBDT0xMQVRFIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2xsYXRpb248L3JlcGxhY2VhYmxlPiBdIFsgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wY2xhc3M8L3JlcGxhY2VhYmxlPiBdIFssIC4u LiBdICkgXQorWyBDT05GSUdVUkFUSU9OICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnBhcnRpdGlvbl9ib3VuZF9hdXRvX3NwZWM8L3JlcGxhY2VhYmxlPiApIF0KIFsgVVNJTkcgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm1ldGhvZDwvcmVwbGFjZWFibGU+IF0KIFsgV0lU SCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zdG9yYWdlX3BhcmFtZXRlcjwvcmVw bGFjZWFibGU+IFs9IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj52YWx1ZTwvcmVwbGFj ZWFibGU+XSBbLCAuLi4gXSApIHwgV0lUSE9VVCBPSURTIF0KIFsgT04gQ09NTUlUIHsgUFJFU0VS VkUgUk9XUyB8IERFTEVURSBST1dTIHwgRFJPUCB9IF0KQEAgLTk2LDYgKzk5LDExIEBAIEZST00g KCB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXJ0aXRpb25fYm91bmRfZXhwcjwv cmVwbGFjZWFibGU+IHwgTUlOCiAgIFRPICggeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+cGFydGl0aW9uX2JvdW5kX2V4cHI8L3JlcGxhY2VhYmxlPiB8IE1JTlZBTFVFIHwgTUFYVkFM VUUgfSBbLCAuLi5dICkgfAogV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU1BSU5ERVIgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+ICkKIAor PHBocmFzZT5hbmQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9ib3Vu ZF9hdXRvX3NwZWM8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKworVkFMVUVTIElOICggPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9ib3VuZF9leHByPC9yZXBsYWNl YWJsZT4gWywgLi4uXSApLCBbKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGFydGl0 aW9uX2JvdW5kX2V4cHI8L3JlcGxhY2VhYmxlPiBbLCAuLi5dICldIFssIC4uLl0gW0RFRkFVTFQg UEFSVElUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5kZWZhdWx0X3BhcnRfbmFt ZTwvcmVwbGFjZWFibGU+XQorTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4KKwogPHBocmFzZT48cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+aW5kZXhfcGFyYW1ldGVyczwvcmVwbGFjZWFibGU+IGluIDxsaXRlcmFs PlVOSVFVRTwvbGl0ZXJhbD4sIDxsaXRlcmFsPlBSSU1BUlkgS0VZPC9saXRlcmFsPiwgYW5kIDxs aXRlcmFsPkVYQ0xVREU8L2xpdGVyYWw+IGNvbnN0cmFpbnRzIGFyZTo8L3BocmFzZT4KIAogWyBJ TkNMVURFICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBs YWNlYWJsZT4gWywgLi4uIF0gKSBdCkBAIC00NDcsNiArNDU1LDExIEBAIFdJVEggKCBNT0RVTFVT IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2Vh YmxlPiwgUkVNCiAgICAgICBob3dldmVyLCB5b3UgY2FuIGRlZmluZSB0aGVzZSBjb25zdHJhaW50 cyBvbiBpbmRpdmlkdWFsIHBhcnRpdGlvbnMuCiAgICAgIDwvcGFyYT4KIAorICAgICA8cGFyYT4K KyAgICAgIEhhc2ggYW5kIGxpc3QgcGFydGl0aW9uaW5nIGFsc28gc3VwcG9ydCBhdXRvbWF0aWMg Y3JlYXRpb24gb2YgcGFydGl0aW9ucworICAgICAgd2l0aCBhbiBvcHRpb25hbCA8bGl0ZXJhbD5D T05GSUdVUkFUSU9OPC9saXRlcmFsPiBjbGF1c2UuCisgICAgPC9wYXJhPgorCiAgICAgIDxwYXJh PgogICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImRkbC1wYXJ0aXRpb25pbmciLz4gZm9yIG1vcmUg ZGlzY3Vzc2lvbiBvbiB0YWJsZQogICAgICAgcGFydGl0aW9uaW5nLgpAQCAtNDU1LDYgKzQ2OCw0 MiBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJp Y19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxp c3RlbnRyeT4KIAorICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT48bGl0ZXJhbD5DT05GSUdV UkFUSU9OICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9ib3VuZF9h dXRvX3NwZWM8L3JlcGxhY2VhYmxlPiApIF0gPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgVGhlIG9wdGlvbmFsIDxsaXRlcmFsPkNPTkZJR1VSQVRJ T048L2xpdGVyYWw+IGNsYXVzZSB1c2VkIHRvZ2V0aGVyCisgICAgICB3aXRoIDxsaXRlcmFsPlBB UlRJVElPTiBCWTwvbGl0ZXJhbD4gc3BlY2lmaWVzIGEgcnVsZSBvZiBnZW5lcmF0aW5nIGJvdW5k cworICAgICAgZm9yIHBhcnRpdGlvbnMgb2YgdGhlIHBhcnRpdGlvbmVkIHRhYmxlLiBBbGwgcGFy dGl0aW9ucyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5CisgICAgICBhbG9uZyB3aXRoIHRoZSBw YXJlbnQgdGFibGUuCisKKyAgICAgIEFueSBpbmRleGVzLCBjb25zdHJhaW50cyBhbmQgdXNlci1k ZWZpbmVkIHJvdy1sZXZlbCB0cmlnZ2VycyB0aGF0IGV4aXN0CisgICAgICBpbiB0aGUgcGFyZW50 IHRhYmxlIGFyZSBjbG9uZWQgb24gdGhlIG5ldyBwYXJ0aXRpb25zLiBXaGVuIHVzaW5nIHRoaXMg Y2xhdXNlLAorICAgICAgPGxpdGVyYWw+IENSRUFURSBUQUJMRSA8L2xpdGVyYWw+IHN0YXRlbWVu dCBjYW4gb25seSBjb250YWluIGNsYXVzZXMsIHRoYXQgYXJlCisgICAgICBhcHBsaWNhYmxlIHRv IGJvdGggcmVsYXRpb24ga2luZHM6IHBhcnRpdGlvbmVkIHRhYmxlIGFuZCByZWd1bGFyIHBhcnRp dGlvbiB0YWJsZXMuCisgICAgICBBbGwgdGFibGVzIGNyZWF0ZWQgYnkgdGhlIHN0YXRlbWVudCB3 aWxsIHVzZSBzYW1lIHBhcmFtZXRlcnMsIHN1Y2ggYXMKKyAgICAgIHJlbGF0aW9uIHBlcnNpc3Rl bmNlLgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICBUaGUgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnBhcnRpdGlvbl9ib3VuZF9hdXRvX3NwZWM8L3JlcGxhY2VhYmxl PgorICAgICAgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBwYXJ0aXRpb25pbmcgbWV0aG9kIGFuZCBw YXJ0aXRpb24ga2V5IG9mIHRoZQorICAgICAgcGFyZW50IHRhYmxlLCBhbmQgbXVzdCBub3Qgb3Zl cmxhcCB3aXRoIGFueSBleGlzdGluZyBwYXJ0aXRpb24gb2YgdGhhdAorICAgICAgcGFyZW50LiAg VGhlIGZvcm0gd2l0aCA8bGl0ZXJhbD5WQUxVRVMgSU48L2xpdGVyYWw+IGlzIHVzZWQgZm9yIGxp c3QgcGFydGl0aW9uaW5nCisgICAgICBhbmQgdGhlIGZvcm0gd2l0aCA8bGl0ZXJhbD5NT0RVTFVT PC9saXRlcmFsPiBpcyB1c2VkIGZvciBoYXNoIHBhcnRpdGlvbmluZy4KKyAgICAgIExpc3QgcGFy dGl0aW9uaW5nIGNhbiBhbHNvIHByb3ZpZGUgYSBkZWZhdWx0IHBhcnRpdGlvbiB1c2luZworICAg ICAgPGxpdGVyYWw+REVGQVVMVCBQQVJUSVRJT048L2xpdGVyYWw+LgorICAgICA8L3BhcmE+CisK KyAgICAgPHBhcmE+CisgICAgIEF1dG9tYXRpYyByYW5nZSBwYXJ0aXRpb25pbmcgaXMgbm90IHN1 cHBvcnRlZCB5ZXQuCisgICAgIDwvcGFyYT4KKworCisKKyAgICA8L2xpc3RpdGVtPgorICAgPC92 YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnkgaWQ9InNxbC1jcmVhdGV0YWJsZS1wYXJ0 aXRpb24iPgogICAgIDx0ZXJtPjxsaXRlcmFsPlBBUlRJVElPTiBPRiA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+cGFyZW50X3RhYmxlPC9yZXBsYWNlYWJsZT4geyBGT1IgVkFMVUVTIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXJ0aXRpb25fYm91bmRfc3BlYzwvcmVwbGFj ZWFibGU+IHwgREVGQVVMVCB9PC9saXRlcmFsPjwvdGVybT4KICAgICA8bGlzdGl0ZW0+CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQppbmRleCBlZGI2YzAwZWNlLi5hZjY1MGQ2MjM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTI3MCw2 ICsyNzAsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVs bmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVBhcnRpdGlvbkVsZW0gKnBhcnRl bGVtOwogCVBhcnRpdGlvblNwZWMgKnBhcnRzcGVjOwogCVBhcnRpdGlvbkJvdW5kU3BlYyAqcGFy dGJvdW5kc3BlYzsKKwlQYXJ0aXRpb25Cb3VuZEF1dG9TcGVjCSpwYXJ0Ym91bmRhdXRvc3BlYzsK IAlSb2xlU3BlYyAgICpyb2xlc3BlYzsKIAlQdWJsaWNhdGlvbk9ialNwZWMgKnB1YmxpY2F0aW9u b2JqZWN0c3BlYzsKIAlzdHJ1Y3QgU2VsZWN0TGltaXQgKnNlbGVjdGxpbWl0OwpAQCAtNjU5LDYg KzY2MCw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxu YW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJCQkJanNvbl9vYmplY3RfY29uc3Ry dWN0b3JfbnVsbF9jbGF1c2Vfb3B0CiAJCQkJanNvbl9hcnJheV9jb25zdHJ1Y3Rvcl9udWxsX2Ns YXVzZV9vcHQKIAorJXR5cGUgPHBhcnRib3VuZGF1dG9zcGVjPiBPcHRQYXJ0aXRpb25Cb3VuZEF1 dG9TcGVjIHZhbHVlc19pbl9jbGF1c2UgcF9kZXNjCisldHlwZSA8cmFuZ2U+CQlvcHRfZGVmYXVs dF9wYXJ0aXRpb25fY2xhdXNlCiAKIC8qCiAgKiBOb24ta2V5d29yZCB0b2tlbiB0eXBlcy4gIFRo ZXNlIGFyZSBoYXJkLXdpcmVkIGludG8gdGhlICJmbGV4IiBsZXhlci4KQEAgLTQzNzcsMTQgKzQz ODAsMTQgQEAgT3B0UGFydGl0aW9uU3BlYzogUGFydGl0aW9uU3BlYwl7ICQkID0gJDE7IH0KIAkJ CXwgLypFTVBUWSovCQkJeyAkJCA9IE5VTEw7IH0KIAkJOwogCi1QYXJ0aXRpb25TcGVjOiBQQVJU SVRJT04gQlkgQ29sSWQgJygnIHBhcnRfcGFyYW1zICcpJworUGFydGl0aW9uU3BlYzogUEFSVElU SU9OIEJZIENvbElkICcoJyBwYXJ0X3BhcmFtcyAnKScgT3B0UGFydGl0aW9uQm91bmRBdXRvU3Bl YwogCQkJCXsKIAkJCQkJUGFydGl0aW9uU3BlYyAqbiA9IG1ha2VOb2RlKFBhcnRpdGlvblNwZWMp OwogCiAJCQkJCW4tPnN0cmF0ZWd5ID0gcGFyc2VQYXJ0aXRpb25TdHJhdGVneSgkMyk7CiAJCQkJ CW4tPnBhcnRQYXJhbXMgPSAkNTsKIAkJCQkJbi0+bG9jYXRpb24gPSBAMTsKLQorCQkJCQluLT5h dXRvcGFydCA9IChOb2RlICopICQ3OwogCQkJCQkkJCA9IG47CiAJCQkJfQogCQk7CkBAIC00NDI4 LDYgKzQ0MzEsODAgQEAgcGFydF9lbGVtOiBDb2xJZCBvcHRfY29sbGF0ZSBvcHRfcXVhbGlmaWVk X25hbWUKIAkJCQl9CiAJCTsKIAorT3B0UGFydGl0aW9uQm91bmRBdXRvU3BlYzoKKwlDT05GSUdV UkFUSU9OICcoJyBwX2Rlc2MgJyknCisJeworCQkkJCA9ICQzOworCX0KKwl8IC8qRU1QVFkqLwkJ CXsgJCQgPSBOVUxMOyB9CisJOworCitwX2Rlc2M6CisJaGFzaF9wYXJ0Ym91bmQKKwl7CisJCUxp c3RDZWxsICAgKmxjOworCQlQYXJ0aXRpb25Cb3VuZEF1dG9TcGVjICpuID0gbWFrZU5vZGUoUGFy dGl0aW9uQm91bmRBdXRvU3BlYyk7CisKKwkJbi0+bW9kdWx1cyA9IC0xOworCisJCWZvcmVhY2gg KGxjLCAkMSkKKwkJeworCQkJRGVmRWxlbSAgICAqb3B0ID0gbGZpcnN0X25vZGUoRGVmRWxlbSwg bGMpOworCisJCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm1vZHVsdXMiKSA9PSAwKQorCQkJ eworCQkJCW4tPnN0cmF0ZWd5ID0gUEFSVElUSU9OX1NUUkFURUdZX0hBU0g7CisJCQkJaWYgKG4t Pm1vZHVsdXMgIT0gLTEpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9EVVBMSUNBVEVfT0JKRUNUKSwKKwkJCQkJCQkJZXJybXNnKCJtb2R1bHVzIGZvciBoYXNo IHBhcnRpdGlvbiBwcm92aWRlZCBtb3JlIHRoYW4gb25jZSIpLAorCQkJCQkJCQlwYXJzZXJfZXJy cG9zaXRpb24ob3B0LT5sb2NhdGlvbikpKTsKKwkJCQluLT5tb2R1bHVzID0gZGVmR2V0SW50MzIo b3B0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJCWVycm1zZygidW5yZWNvZ25pemVkIGF1dG8g cGFydGl0aW9uIGJvdW5kIHNwZWNpZmljYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkJb3B0LT5kZWZu YW1lKSwKKwkJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ob3B0LT5sb2NhdGlvbikpKTsKKwkJfQor CisJCSQkID0gKFBhcnRpdGlvbkJvdW5kQXV0b1NwZWMgKikgbjsKKwl9CisJfCB2YWx1ZXNfaW5f Y2xhdXNlIG9wdF9kZWZhdWx0X3BhcnRpdGlvbl9jbGF1c2UKKwl7CisJCVBhcnRpdGlvbkJvdW5k QXV0b1NwZWMgKm4gPSAkMTsKKwkJbi0+ZGVmYXVsdF9wYXJ0aXRpb25fcnYgPSAkMjsKKwkJJCQg PSAoUGFydGl0aW9uQm91bmRBdXRvU3BlYyAqKSBuOworCX0KKwk7CisKK3ZhbHVlc19pbl9jbGF1 c2U6CisJVkFMVUVTIElOX1AgJygnIGV4cHJfbGlzdCAnKScKKwl7CisJCVBhcnRpdGlvbkJvdW5k QXV0b1NwZWMgKm4gPSBtYWtlTm9kZShQYXJ0aXRpb25Cb3VuZEF1dG9TcGVjKTsKKwkJbi0+c3Ry YXRlZ3kgPSBQQVJUSVRJT05fU1RSQVRFR1lfTElTVDsKKwkJbi0+bGlzdGRhdHVtc0xpc3QgPSBs aXN0X21ha2UxKCQ0KTsKKwkJJCQgPSAoUGFydGl0aW9uQm91bmRBdXRvU3BlYyAqKSBuOworCX0K Kwl8IHZhbHVlc19pbl9jbGF1c2UgJywnICcoJyBleHByX2xpc3QgJyknCisJeworCQkJUGFydGl0 aW9uQm91bmRBdXRvU3BlYyAqbiA9IChQYXJ0aXRpb25Cb3VuZEF1dG9TcGVjICopICQxOworCQkJ bi0+c3RyYXRlZ3kgPSBQQVJUSVRJT05fU1RSQVRFR1lfTElTVDsKKwkJCW4tPmxpc3RkYXR1bXNM aXN0ID0gbGFwcGVuZChuLT5saXN0ZGF0dW1zTGlzdCwgJDQpOworCQkJJCQgPSAoUGFydGl0aW9u Qm91bmRBdXRvU3BlYyAqKSBuOworCX0KKwk7CisKK29wdF9kZWZhdWx0X3BhcnRpdGlvbl9jbGF1 c2U6CisJREVGQVVMVCBQQVJUSVRJT04gcXVhbGlmaWVkX25hbWUKKwl7CisJCSQkID0gJDM7CisJ fQorCXwgLyogRU1QVFkgKi8KKwkJeyAkJCA9IE5VTEw7IH0KKwk7CisKIHRhYmxlX2FjY2Vzc19t ZXRob2RfY2xhdXNlOgogCQkJVVNJTkcgbmFtZQkJCQkJCQl7ICQkID0gJDI7IH0KIAkJCXwgLypF TVBUWSovCQkJCQkJCXsgJCQgPSBOVUxMOyB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfdXRpbGNtZC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwpp bmRleCBlNDhlOWU5OWQzLi4zOWM5MzgzY2FhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfdXRpbGNtZC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21k LmMKQEAgLTcyLDYgKzcyLDcgQEAKIC8qIFN0YXRlIHNoYXJlZCBieSB0cmFuc2Zvcm1DcmVhdGVT dG10IGFuZCBpdHMgc3Vicm91dGluZXMgKi8KIHR5cGVkZWYgc3RydWN0CiB7CisJQ3JlYXRlU3Rt dCAqc3RtdDsJCQkvKiBpbml0aWFsIHN0YXRlbWVudCAqLwogCVBhcnNlU3RhdGUgKnBzdGF0ZTsJ CQkvKiBvdmVyYWxsIHBhcnNlciBzdGF0ZSAqLwogCWNvbnN0IGNoYXIgKnN0bXRUeXBlOwkJLyog IkNSRUFURSBbRk9SRUlHTl0gVEFCTEUiIG9yICJBTFRFUiBUQUJMRSIgKi8KIAlSYW5nZVZhciAg ICpyZWxhdGlvbjsJCS8qIHJlbGF0aW9uIHRvIGNyZWF0ZSAqLwpAQCAtMTQxLDYgKzE0Miw4IEBA IHN0YXRpYyBDb25zdCAqdHJhbnNmb3JtUGFydGl0aW9uQm91bmRWYWx1ZShQYXJzZVN0YXRlICpw c3RhdGUsIE5vZGUgKnZhbCwKIAkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpjb2xOYW1lLCBPaWQg Y29sVHlwZSwgaW50MzIgY29sVHlwbW9kLAogCQkJCQkJCQkJCSAgIE9pZCBwYXJ0Q29sbGF0aW9u KTsKIAorc3RhdGljIENyZWF0ZVN0bXQqIGluaXRBdXRvUGFydGl0aW9uQ3JlYXRlU3RtdChDcmVh dGVTdG10Q29udGV4dCAqY3h0LCBjaGFyICpwYXJ0X3JlbG5hbWUpOworc3RhdGljIHZvaWQgdHJh bnNmb3JtUGFydGl0aW9uQXV0b0NyZWF0ZShDcmVhdGVTdG10Q29udGV4dCAqY3h0LCBQYXJ0aXRp b25TcGVjKiBwYXJ0c3BlYyk7CiAKIC8qCiAgKiB0cmFuc2Zvcm1DcmVhdGVTdG10IC0KQEAgLTIz NCw2ICsyMzcsNyBAQCB0cmFuc2Zvcm1DcmVhdGVTdG10KENyZWF0ZVN0bXQgKnN0bXQsIGNvbnN0 IGNoYXIgKnF1ZXJ5U3RyaW5nKQogCQljeHQuc3RtdFR5cGUgPSAiQ1JFQVRFIFRBQkxFIjsKIAkJ Y3h0LmlzZm9yZWlnbiA9IGZhbHNlOwogCX0KKwljeHQuc3RtdCA9IHN0bXQ7CiAJY3h0LnJlbGF0 aW9uID0gc3RtdC0+cmVsYXRpb247CiAJY3h0LnJlbCA9IE5VTEw7CiAJY3h0LmluaFJlbGF0aW9u cyA9IHN0bXQtPmluaFJlbGF0aW9uczsKQEAgLTM0MSw2ICszNDUsMTAgQEAgdHJhbnNmb3JtQ3Jl YXRlU3RtdChDcmVhdGVTdG10ICpzdG10LCBjb25zdCBjaGFyICpxdWVyeVN0cmluZykKIAkgKi8K IAl0cmFuc2Zvcm1FeHRlbmRlZFN0YXRpc3RpY3MoJmN4dCk7CiAKKwkvKiBQcm9jZXNzIHBhcnRp dGlvbiBkZWZpbml0aW9ucyAqLworCWlmIChzdG10LT5wYXJ0c3BlYyAmJiBzdG10LT5wYXJ0c3Bl Yy0+YXV0b3BhcnQpCisJCXRyYW5zZm9ybVBhcnRpdGlvbkF1dG9DcmVhdGUoJmN4dCwgc3RtdC0+ cGFydHNwZWMpOworCiAJLyoKIAkgKiBPdXRwdXQgcmVzdWx0cy4KIAkgKi8KQEAgLTQzNTgsMyAr NDM2NiwxMzcgQEAgdHJhbnNmb3JtUGFydGl0aW9uQm91bmRWYWx1ZShQYXJzZVN0YXRlICpwc3Rh dGUsIE5vZGUgKnZhbCwKIAogCXJldHVybiAoQ29uc3QgKikgdmFsdWU7CiB9CisKKworLyogaW5p dCBiYXNpYyBmaWVsZHMgb2YgYXV0byBnZW5lcmF0ZWQgcGFydGl0aW9uICovCitzdGF0aWMgQ3Jl YXRlU3RtdCoKK2luaXRBdXRvUGFydGl0aW9uQ3JlYXRlU3RtdChDcmVhdGVTdG10Q29udGV4dCAq Y3h0LCBjaGFyICpwYXJ0X3JlbG5hbWUpCit7CisJQ3JlYXRlU3RtdCAgKnBhcnQ7CisKKwlwYXJ0 ID0gY29weU9iamVjdChjeHQtPnN0bXQpOworCisJcGFydC0+cmVsYXRpb24gPSBtYWtlUmFuZ2VW YXIoY3h0LT5yZWxhdGlvbi0+c2NoZW1hbmFtZSwKKwkJCQkJCXBhcnRfcmVsbmFtZSwgY3h0LT5y ZWxhdGlvbi0+bG9jYXRpb24pOworCisJLyogaW5oZXJpdCBwZXJzaXN0ZW5jZSBmcm9tIHBhcmVu dCByZWxhdGlvbiAqLworCXBhcnQtPnJlbGF0aW9uLT5yZWxwZXJzaXN0ZW5jZSA9IGN4dC0+cmVs YXRpb24tPnJlbHBlcnNpc3RlbmNlOworCS8qIHNldCBwYXJlbnQgdGFibGUgYXMgYSBwYXJlbnQg Ki8KKwlwYXJ0LT5pbmhSZWxhdGlvbnMgPSBsYXBwZW5kKHBhcnQtPmluaFJlbGF0aW9ucywgY3h0 LT5yZWxhdGlvbik7CisKKwkvKgorCSAqIGNoaWxkIHRhYmxlIGlzIG5vdCBwYXJ0aXRpb25lZCBp dHNlbGYsIGF0IGxlYXN0IG5vdworCSAqIHdoaWxlIHdlIGRvIG5vdCBzdXBwb3J0IG11bHRpbGV2 ZWwgYXV0byBwYXJ0aXRpb25pbmcKKwkgKi8KKwlwYXJ0LT5wYXJ0c3BlYyA9IE5VTEw7CisKKwkv KgorCSAqIFBhcnRpdGlvbiBkb2Vzbid0IG5lZWQgYSBsaXN0IG9mIGNvbHVtbiBkZWZpbml0aW9u cyBhbmQgY29uc3RyYWludHMuCisJICogVGhleSB3aWxsIGJlIGluaGVyaXRlZCBmcm9tIHBhcmVu dC4KKwkgKi8KKwlwYXJ0LT50YWJsZUVsdHMgPSBOSUw7CisJcGFydC0+Y29uc3RyYWludHMgPSBO SUw7CisKKwlyZXR1cm4gcGFydDsKK30KKworLyoKKyAqIFRyYW5zZm9ybSBjb25maWd1cmF0aW9u IGludG8gYSBzZXQgb2YgcGFydGl0aW9uIGJvdW5kcy4KKyAqIEdlbmVyYXRlIGV4dHJhIHN0YXRl bWVudHMgdG8gY3JlYXRlIHBhcnRpdGlvbiB0YWJsZXMuCisgKi8KK3N0YXRpYyB2b2lkCit0cmFu c2Zvcm1QYXJ0aXRpb25BdXRvQ3JlYXRlKENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIFBhcnRpdGlv blNwZWMqIHBhcnRzcGVjKQoreworCUNyZWF0ZVN0bXQgICpwYXJ0OworCUxpc3QJICAgICpwYXJ0 bGlzdCA9IE5JTDsKKwlpbnQJCQlpID0gMDsKKwlQYXJ0aXRpb25Cb3VuZEF1dG9TcGVjICpib3Vu ZCA9IChQYXJ0aXRpb25Cb3VuZEF1dG9TcGVjICopIHBhcnRzcGVjLT5hdXRvcGFydDsKKworCWVs b2coREVCVUcxLCAidHJhbnNmb3JtUGFydGl0aW9uQXV0b0NyZWF0ZSBcbiAlcyBcbiAiLCAgbm9k ZVRvU3RyaW5nKGJvdW5kKSk7CisKKwkvKgorCSAqIEdlbmVyYXRlIHJlZ3VsYXIgcGFydGJvdW5k cyBiYXNlZCBvbiBhdXRvcGFydCBydWxlLgorCSAqIGFuZCBmb3JtIGNyZWF0ZSB0YWJsZSBzdGF0 ZW1lbnRzIGZyb20gdGhlc2UgcGFydGJvdW5kcworCSAqLworCWlmIChwYXJ0c3BlYy0+c3RyYXRl Z3kgPT0gUEFSVElUSU9OX1NUUkFURUdZX0hBU0gpCisJeworCQlpZiAoYm91bmQtPnN0cmF0ZWd5 ICE9IFBBUlRJVElPTl9TVFJBVEVHWV9IQVNIKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9UQUJMRV9ERUZJTklUSU9OKSwKKwkJCQllcnJtc2coImludmFs aWQgYm91bmQgc3BlY2lmaWNhdGlvbiBmb3IgYSBoYXNoIHBhcnRpdGlvbiIpLAorCQkJCXBhcnNl cl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwgZXhwckxvY2F0aW9uKChOb2RlICopIHBhcnRzcGVj KSkpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYm91bmQtPm1vZHVsdXM7IGkrKykKKwkJeworCQkJ LyoKKwkJCSAqIEdlbmVyYXRlIHBhcnRpdGlvbiBuYW1lIGluIHRoZSBmb3JtYXQ6CisJCQkgKiAk cmVsbmFtZV8kcGFydG51bQorCQkJICogQWxsIGNoZWNrcyBvZiBuYW1lIHZhbGlkaXR5IHdpbGwg YmUgbWFkZSBhZnRlcndhcmRzIGluIERlZmluZVJlbGF0aW9uKCkKKwkJCSAqLworCQkJcGFydCA9 IGluaXRBdXRvUGFydGl0aW9uQ3JlYXRlU3RtdChjeHQsIHBzcHJpbnRmKCIlc18lZCIsIGN4dC0+ cmVsYXRpb24tPnJlbG5hbWUsIGkpKTsKKworCQkJLyogQWN0dWFsIHBhcnRib3VuZCBnZW5lcmF0 aW9uIGhhcHBlbnMgaGVyZSAqLworCQkJcGFydC0+cGFydGJvdW5kID0gbWFrZU5vZGUoUGFydGl0 aW9uQm91bmRTcGVjKTsKKwkJCXBhcnQtPnBhcnRib3VuZC0+c3RyYXRlZ3kgPSBQQVJUSVRJT05f U1RSQVRFR1lfSEFTSDsKKwkJCXBhcnQtPnBhcnRib3VuZC0+bW9kdWx1cyA9IGJvdW5kLT5tb2R1 bHVzOworCQkJcGFydC0+cGFydGJvdW5kLT5yZW1haW5kZXIgPSBpOworCQkJcGFydC0+cGFydGJv dW5kLT5pc19kZWZhdWx0ID0gZmFsc2U7CisKKwkJCWVsb2coREVCVUcxLCJzdHJhbnNmb3JtUGFy dGl0aW9uQXV0b0NyZWF0ZSBIQVNIIGkgJWQgTU9EVUxVUyAlZCBcbiAlc1xuIiwKKwkJCQkJCSBp LCBib3VuZC0+bW9kdWx1cywgbm9kZVRvU3RyaW5nKHBhcnQpKTsKKworCQkJcGFydGxpc3QgPSBs YXBwZW5kKHBhcnRsaXN0LCBwYXJ0KTsKKwkJfQorCX0KKwllbHNlIGlmIChwYXJ0c3BlYy0+c3Ry YXRlZ3kgPT0gUEFSVElUSU9OX1NUUkFURUdZX0xJU1QpCisJeworCisJCWludCBuX2xpc3RfcGFy dHMgPSBsaXN0X2xlbmd0aChib3VuZC0+bGlzdGRhdHVtc0xpc3QpOworCisJCWlmIChib3VuZC0+ c3RyYXRlZ3kgIT0gUEFSVElUSU9OX1NUUkFURUdZX0xJU1QpCisJCQllcmVwb3J0KEVSUk9SLAor CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RBQkxFX0RFRklOSVRJT04pLAorCQkJCWVycm1z ZygiaW52YWxpZCBib3VuZCBzcGVjaWZpY2F0aW9uIGZvciBhIGxpc3QgcGFydGl0aW9uIiksCisJ CQkJcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLCBleHByTG9jYXRpb24oKE5vZGUgKikg cGFydHNwZWMpKSkpOworCisJCWZvciAoaSA9IDA7IGkgPCBuX2xpc3RfcGFydHM7IGkrKykKKwkJ eworCQkJTGlzdCAqbGlzdGRhdHVtcyA9IChMaXN0ICopCisJCQkJCWxpc3RfbnRoKGJvdW5kLT5s aXN0ZGF0dW1zTGlzdCwgaSk7CisKKwkJCXBhcnQgPSBpbml0QXV0b1BhcnRpdGlvbkNyZWF0ZVN0 bXQoY3h0LCBwc3ByaW50ZigiJXNfJWQiLCBjeHQtPnJlbGF0aW9uLT5yZWxuYW1lLCBpKSk7CisK KwkJCS8qIEFjdHVhbCBwYXJ0Ym91bmQgZ2VuZXJhdGlvbiBoYXBwZW5zIGhlcmUgKi8KKwkJCXBh cnQtPnBhcnRib3VuZCA9IG1ha2VOb2RlKFBhcnRpdGlvbkJvdW5kU3BlYyk7CisJCQlwYXJ0LT5w YXJ0Ym91bmQtPnN0cmF0ZWd5ID0gUEFSVElUSU9OX1NUUkFURUdZX0xJU1Q7CisJCQlwYXJ0LT5w YXJ0Ym91bmQtPmxpc3RkYXR1bXMgPSBsaXN0X2NvcHkobGlzdGRhdHVtcyk7CisJCQlwYXJ0LT5w YXJ0Ym91bmQtPmlzX2RlZmF1bHQgPSBmYWxzZTsKKworCQkJZWxvZyhERUJVRzEsIkRlYnVnIHRy YW5zZm9ybVBhcnRpdGlvbkF1dG9DcmVhdGUgTElTVCBpICVkIFxuICVzXG4iLAorCQkJCQkJIGks IG5vZGVUb1N0cmluZyhwYXJ0KSk7CisKKwkJCXBhcnRsaXN0ID0gbGFwcGVuZChwYXJ0bGlzdCwg cGFydCk7CisJCX0KKworCQlpZiAoYm91bmQtPmRlZmF1bHRfcGFydGl0aW9uX3J2KQorCQl7CisJ CQlwYXJ0ID0gaW5pdEF1dG9QYXJ0aXRpb25DcmVhdGVTdG10KGN4dCwgYm91bmQtPmRlZmF1bHRf cGFydGl0aW9uX3J2LT5yZWxuYW1lKTsKKworCQkJLyogVE9ETzogU2hvdWxkIHdlIHVzZSBmaWVs ZHMgZnJvbSBkZWZhdWx0X3BhcnRpdGlvbl9ydiwgb3RoZXIgdGhhbiByZWxuYW1lPyAqLworCisJ CQkvKiBBY3R1YWwgcGFydGJvdW5kIGdlbmVyYXRpb24gaGFwcGVucyBoZXJlICovCisJCQlwYXJ0 LT5wYXJ0Ym91bmQgPSBtYWtlTm9kZShQYXJ0aXRpb25Cb3VuZFNwZWMpOworCQkJcGFydC0+cGFy dGJvdW5kLT5zdHJhdGVneSA9IFBBUlRJVElPTl9TVFJBVEVHWV9MSVNUOworCQkJcGFydC0+cGFy dGJvdW5kLT5saXN0ZGF0dW1zID0gTlVMTDsKKwkJCXBhcnQtPnBhcnRib3VuZC0+aXNfZGVmYXVs dCA9IHRydWU7CisKKwkJCWVsb2coREVCVUcxLCJEZWJ1ZyB0cmFuc2Zvcm1QYXJ0aXRpb25BdXRv Q3JlYXRlIExJU1QgZGVmYXVsdCBwYXJ0aXRpb24gXG4gJXNcbiIsCisJCQkJCQkgbm9kZVRvU3Ry aW5nKHBhcnQpKTsKKworCQkJcGFydGxpc3QgPSBsYXBwZW5kKHBhcnRsaXN0LCBwYXJ0KTsKKwkJ fQorCX0KKworCS8qIEFkZCBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBlYWNoIHBhcnRpdGlvbiBhZnRl ciB3ZSBjcmVhdGUgcGFyZW50IHRhYmxlICovCisJY3h0LT5hbGlzdCA9IGxpc3RfY29uY2F0KGN4 dC0+YWxpc3QsIHBhcnRsaXN0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCBlZmI1YzNl MDk4Li5hNDg2YTNjNGQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC04NzksNiArODc5LDkg QEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uU3BlYwogCVBhcnRpdGlvblN0cmF0ZWd5IHN0cmF0 ZWd5OwogCUxpc3QJICAgKnBhcnRQYXJhbXM7CQkvKiBMaXN0IG9mIFBhcnRpdGlvbkVsZW1zICov CiAJaW50CQkJbG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAq LworCisJTm9kZQkJKmF1dG9wYXJ0OwkvKiBQYXJ0aXRpb25Cb3VuZEF1dG9TcGVjIC0KKwkJCQkJ CQkgKiBzcGVjIHRvIGdlbmVyYXRlIGJvdW5kcyBhdXRvbWF0aWNhbGx5ICovCiB9IFBhcnRpdGlv blNwZWM7CiAKIC8qCkBAIC05MDgsNiArOTExLDI2IEBAIHN0cnVjdCBQYXJ0aXRpb25Cb3VuZFNw ZWMKIAlpbnQJCQlsb2NhdGlvbjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3du ICovCiB9OwogCisvKgorICogUGFydGl0aW9uQm91bmRBdXRvU3BlYyAtIGEgcGFydGl0aW9uIGJv dW5kIHNwZWNpZmljYXRpb24KKyAqIAkJCQkJCQlmb3IgYXV0byBnZW5lcmF0ZWQgcGFydGl0aW9u cy4KKyAqCisgKiBUaGlzIHJlcHJlc2VudHMgdGhlIHJ1bGUgb2YgZ2VuZXJhdGluZyBwYXJ0aXRp b24gYm91bmRzCisgKi8KK3N0cnVjdCBQYXJ0aXRpb25Cb3VuZEF1dG9TcGVjCit7CisJTm9kZVRh ZwkJdHlwZTsKKworCWNoYXIJCXN0cmF0ZWd5OwkJLyogc2VlIFBBUlRJVElPTl9TVFJBVEVHWSBj b2RlcyBhYm92ZSAqLworCisJLyogUGFydGl0aW9uaW5nIGluZm8gZm9yIEhBU0ggc3RyYXRlZ3k6 ICovCisJaW50CQkJbW9kdWx1czsKKworCS8qIFBhcnRpdGlvbmluZyBpbmZvIGZvciBMSVNUIHN0 cmF0ZWd5OiAqLworCUxpc3QJICAgKmxpc3RkYXR1bXNMaXN0OwkJLyogTGlzdCBvZiBsaXN0cyBv ZiBDb25zdHMgKG9yIEFfQ29uc3RzIGluIHJhdyB0cmVlKSAqLworCVJhbmdlVmFyICAgKmRlZmF1 bHRfcGFydGl0aW9uX3J2OyAvKiBOYW1lIG9mIGRlZmF1bHQgbGlzdCBwYXJ0aXRpb24gKi8KK307 CisKIC8qCiAgKiBQYXJ0aXRpb25SYW5nZURhdHVtIC0gb25lIG9mIHRoZSB2YWx1ZXMgaW4gYSBy YW5nZSBwYXJ0aXRpb24gYm91bmQKICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJ0aXRp b25pbmcvcGFydGRlZnMuaCBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0ZGVmcy5oCmlu ZGV4IDU1YmI0OWM4MTYuLmNmYmJjYWI5ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnRp dGlvbmluZy9wYXJ0ZGVmcy5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0ZGVm cy5oCkBAIC0xOSw2ICsxOSw4IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvbktleURhdGEgKlBh cnRpdGlvbktleTsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uQm91bmRTcGVjIFBhcnRpdGlv bkJvdW5kU3BlYzsKIAordHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uQm91bmRBdXRvU3BlYyBQYXJ0 aXRpb25Cb3VuZEF1dG9TcGVjOworCiB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25EZXNjRGF0YSAq UGFydGl0aW9uRGVzYzsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uRGlyZWN0b3J5RGF0YSAq UGFydGl0aW9uRGlyZWN0b3J5OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jcmVhdGVfdGFibGUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFi bGUub3V0CmluZGV4IDJhMDkwMmVjZTIuLjBkMWExZDNiMGUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKQEAgLTExMTAsMyArMTExMCw0NjcgQEAgSW5kZXhl czoKICAgICAicGFydF9jb2x1bW5fZHJvcF8xXzEwX2V4cHJfaWR4MSIgYnRyZWUgKChkID0gMikp CiAKIGRyb3AgdGFibGUgcGFydF9jb2x1bW5fZHJvcDsKKy0tIEF1dG8gZ2VuZXJhdGVkIHBhcnRp dGlvbnMKKy0tIHBhcnRpdGlvbmluZyB0eXBlIG5vdCBzcGVjaWZpZWQKK0NSRUFURSBUQUJMRSBm YWlsX3BhcnQgKGEgaW50KSBDT05GSUdVUkFUSU9OIChNT0RVTFVTIDEwKTsKK0VSUk9SOiAgc3lu dGF4IGVycm9yIGF0IG9yIG5lYXIgIkNPTkZJR1VSQVRJT04iCitMSU5FIDE6IENSRUFURSBUQUJM RSBmYWlsX3BhcnQgKGEgaW50KSBDT05GSUdVUkFUSU9OIChNT0RVTFVTIDEwKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIG11c3QgZmFpbCBiZWNhdXNlIG9m IHdyb25nIGNvbmZpZ3VyYXRpb24KK0NSRUFURSBUQUJMRSBmYWlsX3BhcnQgKGEgaW50KSBQQVJU SVRJT04gQlkgSEFTSCAoYSkgQ09ORklHVVJBVElPTgorKHZhbHVlcyBpbiAoMSwgMiksICgzLCA0 KSBERUZBVUxUIFBBUlRJVElPTiBwYXJ0X2RlZmF1bHQpOworRVJST1I6ICBpbnZhbGlkIGJvdW5k IHNwZWNpZmljYXRpb24gZm9yIGEgaGFzaCBwYXJ0aXRpb24KK0xJTkUgMTogQ1JFQVRFIFRBQkxF IGZhaWxfcGFydCAoYSBpbnQpIFBBUlRJVElPTiBCWSBIQVNIIChhKSBDT05GSUdVLi4uCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSBmb3JiaWRkZW4gZXhwcmVz c2lvbnMgZm9yIHBhcnRpdGlvbiBib3VuZCB3aXRoIGxpc3QgcGFydGl0aW9uZWQgdGFibGUKK0NS RUFURSBUQUJMRSBmYWlsX3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKSBDT05G SUdVUkFUSU9OCisoVkFMVUVTIElOIChzb21lbmFtZSkpOworRVJST1I6ICBjYW5ub3QgdXNlIGNv bHVtbiByZWZlcmVuY2UgaW4gcGFydGl0aW9uIGJvdW5kIGV4cHJlc3Npb24KK0xJTkUgMjogKFZB TFVFUyBJTiAoc29tZW5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgXgorQ1JFQVRFIFRBQkxF IGZhaWxfcGFydGVkIChhIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04K KyhWQUxVRVMgSU4gKHNvbWVuYW1lLnNvbWVuYW1lKSk7CitFUlJPUjogIGNhbm5vdCB1c2UgY29s dW1uIHJlZmVyZW5jZSBpbiBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbgorTElORSAyOiAoVkFM VUVTIElOIChzb21lbmFtZS5zb21lbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBeCitDUkVB VEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklH VVJBVElPTgorKFZBTFVFUyBJTiAoYSkpOworRVJST1I6ICBjYW5ub3QgdXNlIGNvbHVtbiByZWZl cmVuY2UgaW4gcGFydGl0aW9uIGJvdW5kIGV4cHJlc3Npb24KK0xJTkUgMjogKFZBTFVFUyBJTiAo YSkpOworICAgICAgICAgICAgICAgICAgICBeCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEg aW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAoc3Vt KGEpKSk7CitFUlJPUjogIGNhbm5vdCB1c2UgY29sdW1uIHJlZmVyZW5jZSBpbiBwYXJ0aXRpb24g Ym91bmQgZXhwcmVzc2lvbgorTElORSAyOiAoVkFMVUVTIElOIChzdW0oYSkpKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIF4KK0NSRUFURSBUQUJMRSBmYWlsX3BhcnRlZCAoYSBpbnQpIFBBUlRJ VElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIElOIChzdW0oc29tZW5hbWUp KSk7CitFUlJPUjogIGNhbm5vdCB1c2UgY29sdW1uIHJlZmVyZW5jZSBpbiBwYXJ0aXRpb24gYm91 bmQgZXhwcmVzc2lvbgorTElORSAyOiAoVkFMVUVTIElOIChzdW0oc29tZW5hbWUpKSk7CisgICAg ICAgICAgICAgICAgICAgICAgICBeCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50KSBQ QVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAoc3VtKDEpKSk7 CitFUlJPUjogIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHBhcnRpdGlv biBib3VuZAorTElORSAyOiAoVkFMVUVTIElOIChzdW0oMSkpKTsKKyAgICAgICAgICAgICAgICAg ICAgXgorQ1JFQVRFIFRBQkxFIGZhaWxfcGFydGVkIChhIGludCkgUEFSVElUSU9OIEJZIExJU1Qg KGEpIENPTkZJR1VSQVRJT04KKyhWQUxVRVMgSU4gKChzZWxlY3QgMSkpKTsKK0VSUk9SOiAgY2Fu bm90IHVzZSBzdWJxdWVyeSBpbiBwYXJ0aXRpb24gYm91bmQKK0xJTkUgMjogKFZBTFVFUyBJTiAo KHNlbGVjdCAxKSkpOworICAgICAgICAgICAgICAgICAgICBeCitDUkVBVEUgVEFCTEUgZmFpbF9w YXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVF UyBJTiAoZ2VuZXJhdGVfc2VyaWVzKDQsIDYpKSk7CitFUlJPUjogIHNldC1yZXR1cm5pbmcgZnVu Y3Rpb25zIGFyZSBub3QgYWxsb3dlZCBpbiBwYXJ0aXRpb24gYm91bmQKK0xJTkUgMjogKFZBTFVF UyBJTiAoZ2VuZXJhdGVfc2VyaWVzKDQsIDYpKSk7CisgICAgICAgICAgICAgICAgICAgIF4KK0NS RUFURSBUQUJMRSBmYWlsX3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKSBDT05G SUdVUkFUSU9OCisoVkFMVUVTIElOICgoMSsxKSBjb2xsYXRlICJQT1NJWCIpKTsKK0VSUk9SOiAg Y29sbGF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBieSB0eXBlIGludGVnZXIKK0xJTkUgMjogKFZB TFVFUyBJTiAoKDErMSkgY29sbGF0ZSAiUE9TSVgiKSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIF4KKy0tIHN5bnRheCBkb2VzIG5vdCBhbGxvdyBlbXB0eSBsaXN0IG9mIHZhbHVlcyBmb3Ig bGlzdCBwYXJ0aXRpb25zCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJ T04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAoKSk7CitFUlJPUjogIHN5 bnRheCBlcnJvciBhdCBvciBuZWFyICIpIgorTElORSAyOiAoVkFMVUVTIElOICgpKTsKKyAgICAg ICAgICAgICAgICAgICAgXgorLS0gdHJ5aW5nIHRvIHNwZWNpZnkgcmFuZ2UgZm9yIGxpc3QgcGFy dGl0aW9uZWQgdGFibGUKK0NSRUFURSBUQUJMRSBmYWlsX3BhcnRlZCAoYSBpbnQpIFBBUlRJVElP TiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIEZST00gKDEpIFRPICgyKSk7CitF UlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICJGUk9NIgorTElORSAyOiAoVkFMVUVTIEZS T00gKDEpIFRPICgyKSk7CisgICAgICAgICAgICAgICAgXgorLS0gdHJ5aW5nIHRvIHNwZWNpZnkg bW9kdWx1cyBhbmQgcmVtYWluZGVyIGZvciBsaXN0IHBhcnRpdGlvbmVkIHRhYmxlCitDUkVBVEUg VEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJB VElPTgorKE1PRFVMVVMgMTApOworRVJST1I6ICBpbnZhbGlkIGJvdW5kIHNwZWNpZmljYXRpb24g Zm9yIGEgbGlzdCBwYXJ0aXRpb24KK0xJTkUgMTogQ1JFQVRFIFRBQkxFIGZhaWxfcGFydGVkIChh IGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJLi4uCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIHNwZWNpZmllZCBsaXRlcmFsIGNhbid0IGJlIGNh c3QgdG8gdGhlIHBhcnRpdGlvbiBjb2x1bW4gZGF0YSB0eXBlCitDUkVBVEUgVEFCTEUgZmFpbF9w YXJ0ZWQgKGEgYm9vbCkgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyhWQUxV RVMgSU4gKDEpKTsKK0VSUk9SOiAgc3BlY2lmaWVkIHZhbHVlIGNhbm5vdCBiZSBjYXN0IHRvIHR5 cGUgYm9vbGVhbiBmb3IgY29sdW1uICJhIgorTElORSAyOiAoVkFMVUVTIElOICgxKSk7CisgICAg ICAgICAgICAgICAgICAgIF4KKy0tIGNoZWNrIGZvciBwYXJ0aXRpb24gYm91bmQgb3ZlcmxhcCBh bmQgb3RoZXIgaW52YWxpZCBzcGVjaWZpY2F0aW9ucworQ1JFQVRFIFRBQkxFIGZhaWxfcGFydGVk IChhIHZhcmNoYXIpIFBBUlRJVElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVT IElOIChudWxsLCAneicpLCgnYScsICdiJyksKG51bGwpIERFRkFVTFQgUEFSVElUSU9OIHBhcnRf ZGVmYXVsdCk7CitFUlJPUjogIHBhcnRpdGlvbiAiZmFpbF9wYXJ0ZWRfMiIgd291bGQgb3Zlcmxh cCBwYXJ0aXRpb24gImZhaWxfcGFydGVkXzAiCitMSU5FIDI6IChWQUxVRVMgSU4gKG51bGwsICd6 JyksKCdhJywgJ2InKSwobnVsbCkgREVGQVVMVCBQQVJUSVRJT04gcC4uLgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0NSRUFURSBUQUJMRSBmYWlsX3BhcnRl ZCAoYSB2YXJjaGFyKSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVF UyBJTiAobnVsbCwgJ3onKSwoJ2EnLCAnYicpLCgnYicsICdjJykgREVGQVVMVCBQQVJUSVRJT04g cGFydF9kZWZhdWx0KTsKK0VSUk9SOiAgcGFydGl0aW9uICJmYWlsX3BhcnRlZF8yIiB3b3VsZCBv dmVybGFwIHBhcnRpdGlvbiAiZmFpbF9wYXJ0ZWRfMSIKK0xJTkUgMjogKFZBTFVFUyBJTiAobnVs bCwgJ3onKSwoJ2EnLCAnYicpLCgnYicsICdjJykgREVGQVVMVCBQQVJUSVRJLi4uCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorQ1JFQVRFIFRBQkxFIGZhaWxf cGFydGVkIChhIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyh2YWx1 ZXMgaW4gKDEsIDIpLCAoMSwgMykpOworRVJST1I6ICBwYXJ0aXRpb24gImZhaWxfcGFydGVkXzEi IHdvdWxkIG92ZXJsYXAgcGFydGl0aW9uICJmYWlsX3BhcnRlZF8wIgorTElORSAyOiAodmFsdWVz IGluICgxLCAyKSwgKDEsIDMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCistLSB0 cnlpbmcgdG8gY3JlYXRlIGRlZmF1bHQgcGFydGl0aW9uIGZvciB0aGUgaGFzaCBwYXJ0aXRpb25l ZCB0YWJsZQorUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgSEFT SCAoYSkgQ09ORklHVVJBVElPTgorKE1PRFVMVVMgMTAgREVGQVVMVCBQQVJUSVRJT04gaGFzaF9k ZWZhdWx0KTsKK0VSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIlJFQVRFIgorTElORSAx OiBSRUFURSBUQUJMRSBmYWlsX3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBIQVNIIChhKSBD T05GSUcuLi4KKyAgICAgICAgXgorQ1JFQVRFIFRBQkxFIGxpc3RfcGFydGVkIChhIGludCkgUEFS VElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyh2YWx1ZXMgaW4gKDEsIDIpLCAoMywg NCkgREVGQVVMVCBQQVJUSVRJT04gcGFydF9kZWZhdWx0KTsKK1xkKyBsaXN0X3BhcnRlZAorICAg ICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aXRpb25lZCB0YWJsZSAicHVibGljLmxpc3RfcGFy dGVkIgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQg fCBTdG9yYWdlIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAg ICAgfCAgICAgICAgIHwgcGxhaW4gICB8ICAgICAgICAgICAgICB8IAorUGFydGl0aW9uIGtleTog TElTVCAoYSkKK1BhcnRpdGlvbnM6IGxpc3RfcGFydGVkXzAgRk9SIFZBTFVFUyBJTiAoMSwgMiks CisgICAgICAgICAgICBsaXN0X3BhcnRlZF8xIEZPUiBWQUxVRVMgSU4gKDMsIDQpLAorICAgICAg ICAgICAgcGFydF9kZWZhdWx0IERFRkFVTFQKKworRFJPUCBUQUJMRSBsaXN0X3BhcnRlZDsKK0NS RUFURSBUQUJMRSBoYXNoX3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBIQVNIIChhKSBDT05G SUdVUkFUSU9OCisobW9kdWx1cyAzKTsKK1xkKyBoYXNoX3BhcnRlZAorICAgICAgICAgICAgICAg ICAgICAgICAgICBQYXJ0aXRpb25lZCB0YWJsZSAicHVibGljLmhhc2hfcGFydGVkIgorIENvbHVt biB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgfCBTdG9yYWdlIHwg U3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAg IHwgcGxhaW4gICB8ICAgICAgICAgICAgICB8IAorUGFydGl0aW9uIGtleTogSEFTSCAoYSkKK1Bh cnRpdGlvbnM6IGhhc2hfcGFydGVkXzAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDMsIHJlbWFp bmRlciAwKSwKKyAgICAgICAgICAgIGhhc2hfcGFydGVkXzEgRk9SIFZBTFVFUyBXSVRIIChtb2R1 bHVzIDMsIHJlbWFpbmRlciAxKSwKKyAgICAgICAgICAgIGhhc2hfcGFydGVkXzIgRk9SIFZBTFVF UyBXSVRIIChtb2R1bHVzIDMsIHJlbWFpbmRlciAyKQorCitEUk9QIFRBQkxFIGhhc2hfcGFydGVk OworQ1JFQVRFIFRBQkxFIGxpc3RfcGFydGVkIChhIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEp IENPTkZJR1VSQVRJT04KKyh2YWx1ZXMgaW4gKCcxJyksICgyKSwgKDIrMSksIChudWxsKSBERUZB VUxUIFBBUlRJVElPTiBwYXJ0X2RlZmF1bHQpOworXGQrIGxpc3RfcGFydGVkCisgICAgICAgICAg ICAgICAgICAgICAgICAgIFBhcnRpdGlvbmVkIHRhYmxlICJwdWJsaWMubGlzdF9wYXJ0ZWQiCisg Q29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3Jh Z2UgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLQorIGEgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAg ICAgICAgfCBwbGFpbiAgIHwgICAgICAgICAgICAgIHwgCitQYXJ0aXRpb24ga2V5OiBMSVNUIChh KQorUGFydGl0aW9uczogbGlzdF9wYXJ0ZWRfMCBGT1IgVkFMVUVTIElOICgxKSwKKyAgICAgICAg ICAgIGxpc3RfcGFydGVkXzEgRk9SIFZBTFVFUyBJTiAoMiksCisgICAgICAgICAgICBsaXN0X3Bh cnRlZF8yIEZPUiBWQUxVRVMgSU4gKDMpLAorICAgICAgICAgICAgbGlzdF9wYXJ0ZWRfMyBGT1Ig VkFMVUVTIElOIChOVUxMKSwKKyAgICAgICAgICAgIHBhcnRfZGVmYXVsdCBERUZBVUxUCisKK0RS T1AgVEFCTEUgbGlzdF9wYXJ0ZWQ7CistLSBzcGVjaWZpZWQgbGl0ZXJhbCBjYW4gYmUgY2FzdCwg YW5kIHRoZSBjYXN0IG1pZ2h0IG5vdCBiZSBpbW11dGFibGUKK0NSRUFURSBUQUJMRSBtb25leXAg KGEgbW9uZXkpIFBBUlRJVElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIElO ICgxMCksICgnMTEnKSwgKHRvX2NoYXIoMTIsICc5OScpOjppbnQpKTsKK0RST1AgVEFCTEUgbW9u ZXlwOworLS0gcGFydGl0aW9uIHRhYmxlIGluaGVyaXRzIHJlbGF0aW9uIHBlcnNpc3RlbmNlIHNl dHRpbmcgZnJvbSBwYXJlbnQKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfcGFydGVkIChhIGNoYXIp IFBBUlRJVElPTiBCWSBMSVNUIChhKQorQ09ORklHVVJBVElPTiAoVkFMVUVTIElOICgnYScpIERF RkFVTFQgUEFSVElUSU9OIHRlbXBfcGFydGVkX2RlZmF1bHQpOworLS0gQmVjYXVzZSBcZCsgd2ls bCBpc3N1ZSBhIHBnX3RlbXBfbm4gdGhhdCAub3Ugd2lsbCBuZXZlciBtYXRjaAorU0VMRUNUICog RlJPTSAoCisgICAgV0lUSCBSRUNVUlNJVkUgYW5jZXN0b3IobmFtZSkgQVMgKFNFTEVDVCBjLnJl bG5hbWUgQVMgIm5hbWUiIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIFdIRVJFIGMucmVsa2lu ZCA9ICdwJykKKyAgICBTRUxFQ1QgIGEucmVsbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVMgInBhcmVudCIsCisgICAgICAgICAgICAnUEFSRU5UJyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFTICJ0eXBlIiwKKyAgICAgICAgICAgIGFuY2VzdC5uYW1l ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVMgIm5hbWUiLAorICAgICAgICAgICAg cGdfZ2V0X3BhcnRrZXlkZWYocC5vaWQpICAgICAgICAgICAgICAgICAgICBBUyAicmFuZ2UiCisg ICAgICAgIEZST00gYW5jZXN0b3IgYW5jZXN0CisgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19j bGFzcyBwIE9OIHAucmVsbmFtZSA9IGFuY2VzdC5uYW1lCisgICAgICAgIExFRlQgSk9JTiBwZ19j YXRhbG9nLnBnX2luaGVyaXRzIGkgT04gaS5pbmhyZWxpZCA9IHAub2lkCisgICAgICAgIExFRlQg Sk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGEgT04gYS5vaWQgPSBpLmluaHBhcmVudAorICAgICAg ICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSBwLnJlbG5hbWVzcGFj ZQorICAgICAgICBXSEVSRSBwLnJlbGtpbmQgSU4gKCdwJywgJ3InKQorICAgIFVOSU9OIEFMTAor ICAgIFNFTEVDVCAgcGFyZW50LnJlbG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB UyAicGFyZW50IiwKKyAgICAgICAgICAgICdDSElMRCcgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVMgInR5cGUiLAorICAgICAgICAgICAgY2hpbGQucmVsbmFtZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBUyAibmFtZSIsCisgICAgICAgICAgICBwZ19nZXRfZXhw cihjaGlsZC5yZWxwYXJ0Ym91bmQsIGNoaWxkLm9pZCkgIEFTICJyYW5nZSIKKyAgICAgICAgRlJP TSBhbmNlc3RvciBhbmNlc3QKKyAgICAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIHBhcmVu dCBPTiBwYXJlbnQucmVsbmFtZSA9IGFuY2VzdC5uYW1lCisgICAgICAgIEpPSU4gcGdfY2F0YWxv Zy5wZ19pbmhlcml0cyBpbmggT04gaW5oLmluaHBhcmVudCA9IHBhcmVudC5vaWQKKyAgICAgICAg Sk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGNoaWxkIE9OIGNoaWxkLm9pZCA9IGluaC5pbmhyZWxp ZAorICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG5hbWVzcGFjZSBPTiBuYW1l c3BhY2Uub2lkID0gY2hpbGQucmVsbmFtZXNwYWNlCisgICAgICAgIFdIRVJFIHBhcmVudC5yZWxr aW5kIElOICgncCcsICdyJykKKyAgICApIEFTIGRwCitXSEVSRQorICAgICJwYXJlbnQiID0gJ3Rl bXBfcGFydGVkJworT1JERVIgQlkgInBhcmVudCIgTlVMTFMgRklSU1QsICJ0eXBlIiBERVNDLCAi bmFtZSI7CisgICBwYXJlbnQgICAgfCB0eXBlICB8ICAgICAgICBuYW1lICAgICAgICAgfCAgICAg ICAgcmFuZ2UgICAgICAgIAorLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0ZW1wX3BhcnRlZCB8IENISUxEIHwgdGVtcF9w YXJ0ZWRfMCAgICAgICB8IEZPUiBWQUxVRVMgSU4gKCdhJykKKyB0ZW1wX3BhcnRlZCB8IENISUxE IHwgdGVtcF9wYXJ0ZWRfZGVmYXVsdCB8IERFRkFVTFQKKygyIHJvd3MpCisKK0RST1AgVEFCTEUg dGVtcF9wYXJ0ZWQ7CistLSBwYXJ0aXRpb24gdGFibGUgaW5oZXJpdHMgcmVsYXRpb24gcGVyc2lz dGVuY2Ugc2V0dGluZyBmcm9tIHBhcmVudAorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubG9nZ2Vk X3BhcnRlZCAoYSBjaGFyKSBQQVJUSVRJT04gQlkgTElTVCAoYSkKK0NPTkZJR1VSQVRJT04gKFZB TFVFUyBJTiAoJ2EnKSBERUZBVUxUIFBBUlRJVElPTiB1bmxvZ2dlZF9wYXJ0ZWRfZGVmYXVsdCk7 CitcZCsgdW5sb2dnZWRfcGFydGVkCisgICAgICAgICAgICAgICAgICAgICAgVW5sb2dnZWQgcGFy dGl0aW9uZWQgdGFibGUgInB1YmxpYy51bmxvZ2dlZF9wYXJ0ZWQiCisgQ29sdW1uIHwgICAgIFR5 cGUgICAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBTdGF0 cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLQorIGEgICAgICB8IGNoYXJhY3RlcigxKSB8ICAgICAgICAgICB8ICAgICAgICAgIHwg ICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCitQYXJ0aXRpb24ga2V5OiBMSVNU IChhKQorUGFydGl0aW9uczogdW5sb2dnZWRfcGFydGVkXzAgRk9SIFZBTFVFUyBJTiAoJ2EnKSwK KyAgICAgICAgICAgIHVubG9nZ2VkX3BhcnRlZF9kZWZhdWx0IERFRkFVTFQKKworRFJPUCBUQUJM RSB1bmxvZ2dlZF9wYXJ0ZWQ7CistLSB0ZXN0aW5nIFBBUlRJVElPTiBPRiBvbiBhdXRvbWF0aWNh bGx5IGdlbmVyYXRlZCBwYXJ0aXRpb25lZCB0YWJsZQorQ1JFQVRFIFRBQkxFIGhhc2hfcGFydGVk IChhIGludCkgUEFSVElUSU9OIEJZIEhBU0ggKGEpIENPTkZJR1VSQVRJT04gKE1PRFVMVVMgMTAp OworLS0gYWxsIHJlbWFpbmRlciB2YWx1ZXMgYXJlIGFscmVhZHkgYmVsb25nIHRvIHBhcnRpdGlv bnMKK0NSRUFURSBUQUJMRSBmYWlsX3BhcnQgUEFSVElUSU9OIE9GIGhhc2hfcGFydGVkIEZPUiBW QUxVRVMgV0lUSCAoTU9EVUxVUyAzMCwgUkVNQUlOREVSIDMpOworRVJST1I6ICBwYXJ0aXRpb24g ImZhaWxfcGFydCIgd291bGQgb3ZlcmxhcCBwYXJ0aXRpb24gImhhc2hfcGFydGVkXzMiCitMSU5F IDE6IC4uLkJMRSBmYWlsX3BhcnQgUEFSVElUSU9OIE9GIGhhc2hfcGFydGVkIEZPUiBWQUxVRVMg V0lUSCAoTU9EVS4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KKy0tIHRyeWluZyB0byBzcGVjaWZ5IHJhbmdlIGZvciB0aGUg aGFzaCBwYXJ0aXRpb25lZCB0YWJsZQorQ1JFQVRFIFRBQkxFIGZhaWxfcGFydCBQQVJUSVRJT04g T0YgaGFzaF9wYXJ0ZWQgRk9SIFZBTFVFUyBGUk9NICgnYScsIDEpIFRPICgneicpOworRVJST1I6 ICBpbnZhbGlkIGJvdW5kIHNwZWNpZmljYXRpb24gZm9yIGEgaGFzaCBwYXJ0aXRpb24KK0xJTkUg MTogLi4uQkxFIGZhaWxfcGFydCBQQVJUSVRJT04gT0YgaGFzaF9wYXJ0ZWQgRk9SIFZBTFVFUyBG Uk9NICgnYScsLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXgorLS0gdHJ5aW5nIHRvIHNwZWNpZnkgbGlzdCB2YWx1ZSBmb3Ig dGhlIGhhc2ggcGFydGl0aW9uZWQgdGFibGUKK0NSRUFURSBUQUJMRSBmYWlsX3BhcnQgUEFSVElU SU9OIE9GIGhhc2hfcGFydGVkIEZPUiBWQUxVRVMgSU4gKDEwMDApOworRVJST1I6ICBpbnZhbGlk IGJvdW5kIHNwZWNpZmljYXRpb24gZm9yIGEgaGFzaCBwYXJ0aXRpb24KK0xJTkUgMTogLi4uQkxF IGZhaWxfcGFydCBQQVJUSVRJT04gT0YgaGFzaF9wYXJ0ZWQgRk9SIFZBTFVFUyBJTiAoMTAwMCk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXgorLS0gdHJ5aW5nIHRvIGFkZCBkZWZhdWx0IHBhcnRpdGlvbiB0byBoYXNoIHBhcnRp dGlvbmVkIHRhYmxlCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0IFBBUlRJVElPTiBPRiBoYXNoX3Bh cnRlZCBERUZBVUxUOworRVJST1I6ICBhIGhhc2gtcGFydGl0aW9uZWQgdGFibGUgbWF5IG5vdCBo YXZlIGEgZGVmYXVsdCBwYXJ0aXRpb24KK1xkIGhhc2hfcGFydGVkCisgICAgICBQYXJ0aXRpb25l ZCB0YWJsZSAicHVibGljLmhhc2hfcGFydGVkIgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRp b24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAg ICAgICAgfCAKK1BhcnRpdGlvbiBrZXk6IEhBU0ggKGEpCitOdW1iZXIgb2YgcGFydGl0aW9uczog MTAgKFVzZSBcZCsgdG8gbGlzdCB0aGVtLikKKworRFJPUCBUQUJMRSBoYXNoX3BhcnRlZDsKKy0t IGNhc3QgaXMgaW1tdXRhYmxlCitDUkVBVEUgVEFCTEUgYmlnaW50cCAoYSBiaWdpbnQpIFBBUlRJ VElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIElOICgxMCkpOworLS0gZmFp bHMgZHVlIHRvIG92ZXJsYXA6CitDUkVBVEUgVEFCTEUgYmlnaW50cF9vdmVybGFwIFBBUlRJVElP TiBPRiBiaWdpbnRwIEZPUiBWQUxVRVMgSU4gKCcxMCcpOworRVJST1I6ICBwYXJ0aXRpb24gImJp Z2ludHBfb3ZlcmxhcCIgd291bGQgb3ZlcmxhcCBwYXJ0aXRpb24gImJpZ2ludHBfMCIKK0xJTkUg MTogLi4uRSBiaWdpbnRwX292ZXJsYXAgUEFSVElUSU9OIE9GIGJpZ2ludHAgRk9SIFZBTFVFUyBJ TiAoJzEwJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KK0RST1AgVEFCTEUgYmlnaW50cDsKKy0tIGNoZWNrIGRlZmF1 bHQgcGFydGl0aW9uIG92ZXJsYXAKK0NSRUFURSBUQUJMRSBsaXN0X3BhcnRlZCAoYSB2YXJjaGFy KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAobnVsbCwg J3onKSwoJ2EnLCAnYicpIERFRkFVTFQgcGFydGl0aW9uIHRibF9kZWZhdWx0KTsKK0lOU0VSVCBJ TlRPIGxpc3RfcGFydGVkIFZBTFVFUygnWCcpOworQ1JFQVRFIFRBQkxFIGZhaWxfcGFydCBQQVJU SVRJT04gT0YgbGlzdF9wYXJ0ZWQgRk9SIFZBTFVFUyBJTiAoJ1cnLCAnWCcsICdZJyk7CitFUlJP UjogIHVwZGF0ZWQgcGFydGl0aW9uIGNvbnN0cmFpbnQgZm9yIGRlZmF1bHQgcGFydGl0aW9uICJ0 YmxfZGVmYXVsdCIgd291bGQgYmUgdmlvbGF0ZWQgYnkgc29tZSByb3cKKy0tIHRyeWluZyB0byBj cmVhdGUgYWxyZWFkeSBleGlzdGluZyBkZWZhdWx0IHBhcnRpdGlvbgorQ1JFQVRFIFRBQkxFIGZh aWxfcGFydCBQQVJUSVRJT04gT0YgbGlzdF9wYXJ0ZWQgREVGQVVMVDsKK0VSUk9SOiAgcGFydGl0 aW9uICJmYWlsX3BhcnQiIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGRlZmF1bHQgcGFydGl0aW9u ICJ0YmxfZGVmYXVsdCIKK0xJTkUgMTogQ1JFQVRFIFRBQkxFIGZhaWxfcGFydCBQQVJUSVRJT04g T0YgbGlzdF9wYXJ0ZWQgREVGQVVMVDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXgorRFJPUCBUQUJMRSBsaXN0X3BhcnRlZDsKKy0tIGNo ZWNrIHNjaGVtYSBwcm9wYWdhdGlvbiBmcm9tIHBhcmVudAorQ1JFQVRFIFRBQkxFIHBhcnRlZCAo YSB0ZXh0LCBiIGludCBOT1QgTlVMTCBERUZBVUxUIDAsCisJQ09OU1RSQUlOVCBjaGVja19hIENI RUNLIChsZW5ndGgoYSkgPiAwKSkKK1BBUlRJVElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9O ICggVkFMVUVTIElOICgnYScsJ2InKSwoJ2QnKSApOworLS0gb25seSBpbmhlcml0ZWQgYXR0cmli dXRlcyAobmV2ZXIgbG9jYWwgb25lcykKK1NFTEVDVCBhdHRuYW1lLCBhdHRpc2xvY2FsLCBhdHRp bmhjb3VudCBGUk9NIHBnX2F0dHJpYnV0ZQorICBXSEVSRSBhdHRyZWxpZCA9ICdwYXJ0ZWRfMSc6 OnJlZ2NsYXNzIGFuZCBhdHRudW0gPiAwCisgIE9SREVSIEJZIGF0dG51bTsKKyBhdHRuYW1lIHwg YXR0aXNsb2NhbCB8IGF0dGluaGNvdW50IAorLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tCisgYSAgICAgICB8IGYgICAgICAgICAgfCAgICAgICAgICAgMQorIGIgICAgICAgfCBm ICAgICAgICAgIHwgICAgICAgICAgIDEKKygyIHJvd3MpCisKKy0tIGFibGUgdG8gc3BlY2lmeSBj b2x1bW4gZGVmYXVsdCwgY29sdW1uIGNvbnN0cmFpbnQsIGFuZCB0YWJsZSBjb25zdHJhaW50Cist LSBmaXJzdCBjaGVjayB0aGUgImNvbHVtbiBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiIGVycm9y CitDUkVBVEUgVEFCTEUgcGFydF9lX2ZhaWwgUEFSVElUSU9OIE9GIHBhcnRlZCAoCisJYiBOT1Qg TlVMTCwKKwliIERFRkFVTFQgMSwKKwliIENIRUNLIChiID49IDApLAorCUNPTlNUUkFJTlQgY2hl Y2tfYSBDSEVDSyAobGVuZ3RoKGEpID4gMCkKKykgRk9SIFZBTFVFUyBJTiAoJ2UnKTsKK0VSUk9S OiAgY29sdW1uICJiIiBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UKK0NSRUFURSBUQUJMRSBwYXJ0 X2UgUEFSVElUSU9OIE9GIHBhcnRlZCAoCisJYiBOT1QgTlVMTCBERUZBVUxUIDEsCisJQ09OU1RS QUlOVCBjaGVja19hIENIRUNLIChsZW5ndGgoYSkgPiAwKSwKKwlDT05TVFJBSU5UIGNoZWNrX2Ig Q0hFQ0sgKGIgPj0gMCkKKykgRk9SIFZBTFVFUyBJTiAoJ2UnKTsKK05PVElDRTogIG1lcmdpbmcg Y29uc3RyYWludCAiY2hlY2tfYSIgd2l0aCBpbmhlcml0ZWQgZGVmaW5pdGlvbgorLS0gY29uaXNs b2NhbCBzaG91bGQgYmUgZmFsc2UgZm9yIGFueSBtZXJnZWQgY29uc3RyYWludHMsIHRydWUgb3Ro ZXJ3aXNlCitTRUxFQ1QgY29ubmFtZSwgY29uaXNsb2NhbCwgY29uaW5oY291bnQgRlJPTSBwZ19j b25zdHJhaW50CitXSEVSRSBjb25yZWxpZCA9ICdwYXJ0X2UnOjpyZWdjbGFzcyBPUkRFUiBCWSBj b25pc2xvY2FsLCBjb25pbmhjb3VudDsKKyBjb25uYW1lIHwgY29uaXNsb2NhbCB8IGNvbmluaGNv dW50IAorLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgY2hlY2tfYSB8IGYg ICAgICAgICAgfCAgICAgICAgICAgMQorIGNoZWNrX2IgfCB0ICAgICAgICAgIHwgICAgICAgICAg IDAKKygyIHJvd3MpCisKKy0tIGNoZWNrX2EgY2FuIG5vdCBiZSBkcm9wcGVkIGFzIGl0IGlzIGlu aGVyaXRlZAorQUxURVIgVEFCTEUgcGFydF9lIERST1AgQ09OU1RSQUlOVCBjaGVja19hOworRVJS T1I6ICBjYW5ub3QgZHJvcCBpbmhlcml0ZWQgY29uc3RyYWludCAiY2hlY2tfYSIgb2YgcmVsYXRp b24gInBhcnRfZSIKKy0tIGNoZWNrX2IgY2FuIGJlIGRyb3BwZWQgYXMgaXQgaXMgbG9jYWwKK0FM VEVSIFRBQkxFIHBhcnRfZSBEUk9QIENPTlNUUkFJTlQgY2hlY2tfYjsKKy0tIE9uY2UgY2hlY2tf YiBpcyBhZGRlZCB0byB0aGUgcGFyZW50LCBpdCBzaG91bGQgYmUgbWFkZSBub24tbG9jYWwgZm9y IHBhcnRfYgorQUxURVIgVEFCTEUgcGFydF9lIEFERCBDT05TVFJBSU5UIGNoZWNrX2IgQ0hFQ0sg KGIgPj0gMCk7CitBTFRFUiBUQUJMRSBwYXJ0ZWQgQUREIENPTlNUUkFJTlQgY2hlY2tfYiBDSEVD SyAoYiA+PSAwKTsKK05PVElDRTogIG1lcmdpbmcgY29uc3RyYWludCAiY2hlY2tfYiIgd2l0aCBp bmhlcml0ZWQgZGVmaW5pdGlvbgorU0VMRUNUIGNvbm5hbWUsIGNvbmlzbG9jYWwsIGNvbmluaGNv dW50IEZST00gcGdfY29uc3RyYWludCBXSEVSRSBjb25yZWxpZCA9ICdwYXJ0X2UnOjpyZWdjbGFz czsKKyBjb25uYW1lIHwgY29uaXNsb2NhbCB8IGNvbmluaGNvdW50IAorLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tCisgY2hlY2tfYSB8IGYgICAgICAgICAgfCAgICAgICAgICAg MQorIGNoZWNrX2IgfCBmICAgICAgICAgIHwgICAgICAgICAgIDEKKygyIHJvd3MpCisKKy0tIE5l aXRoZXIgY2hlY2tfYSBub3IgY2hlY2tfYiBhcmUgZHJvcHBhYmxlIGZyb20gcGFydF9iCitBTFRF UiBUQUJMRSBwYXJ0X2UgRFJPUCBDT05TVFJBSU5UIGNoZWNrX2E7CitFUlJPUjogIGNhbm5vdCBk cm9wIGluaGVyaXRlZCBjb25zdHJhaW50ICJjaGVja19hIiBvZiByZWxhdGlvbiAicGFydF9lIgor QUxURVIgVEFCTEUgcGFydF9lIERST1AgQ09OU1RSQUlOVCBjaGVja19iOworRVJST1I6ICBjYW5u b3QgZHJvcCBpbmhlcml0ZWQgY29uc3RyYWludCAiY2hlY2tfYiIgb2YgcmVsYXRpb24gInBhcnRf ZSIKKy0tIEFuZCBkcm9wcGluZyBpdCBmcm9tIHBhcnRlZCBzaG91bGQgbGVhdmUgbm8gdHJhY2Ug b2YgdGhlbSBvbiBwYXJ0X2UsIHVubGlrZQorLS0gdHJhZGl0aW9uYWwgaW5oZXJpdGFuY2Ugd2hl cmUgdGhleSB3aWxsIGJlIGxlZnQgYmVoaW5kLCBiZWNhdXNlIHRoZXkgd291bGQKKy0tIGJlIGxv Y2FsIGNvbnN0cmFpbnRzLgorQUxURVIgVEFCTEUgcGFydGVkIERST1AgQ09OU1RSQUlOVCBjaGVj a19hLCBEUk9QIENPTlNUUkFJTlQgY2hlY2tfYjsKK1NFTEVDVCBjb25pc2xvY2FsLCBjb25pbmhj b3VudCBGUk9NIHBnX2NvbnN0cmFpbnQgV0hFUkUgY29ucmVsaWQgPSAncGFydF9lJzo6cmVnY2xh c3M7CisgY29uaXNsb2NhbCB8IGNvbmluaGNvdW50IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0KKygwIHJvd3MpCisKKy0tIHNwZWNpZnkgUEFSVElUSU9OIEJZIGZvciBhIHBhcnRpdGlvbgor Q1JFQVRFIFRBQkxFIGZhaWxfcGFydF9jb2xfbm90X2ZvdW5kIFBBUlRJVElPTiBPRiBwYXJ0ZWQg Rk9SIFZBTFVFUyBJTiAoJ2MnKSBQQVJUSVRJT04gQlkgSEFTSCAoYyk7CitFUlJPUjogIGNvbHVt biAiYyIgbmFtZWQgaW4gcGFydGl0aW9uIGtleSBkb2VzIG5vdCBleGlzdAorTElORSAxOiAuLi5S VElUSU9OIE9GIHBhcnRlZCBGT1IgVkFMVUVTIElOICgnYycpIFBBUlRJVElPTiBCWSBIQVNIIChj KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXgorQ1JFQVRFIFRBQkxFIHBhcnRfYyBQQVJUSVRJT04gT0YgcGFydGVk IChiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCBERUZBVUxUIDApCitGT1IgVkFMVUVTIElOICgnYycp IFBBUlRJVElPTiBCWSBSQU5HRSAoKGIpKTsKKy0tIGNyZWF0ZSBhIGxldmVsLTIgcGFydGl0aW9u CitDUkVBVEUgVEFCTEUgcGFydF9jXzFfMTAgUEFSVElUSU9OIE9GIHBhcnRfYyBGT1IgVkFMVUVT IEZST00gKDEpIFRPICgxMCk7CistLSBjaGVjayB0aGF0IE5PVCBOVUxMIGFuZCBkZWZhdWx0IHZh bHVlIGFyZSBpbmhlcml0ZWQgY29ycmVjdGx5CitDUkVBVEUgVEFCTEUgcGFydGVkX25vdG51bGxf aW5oX3Rlc3QgKGEgaW50IERFRkFVTFQgMSwgYiBpbnQgTk9UIE5VTEwgREVGQVVMVCAwKQorCVBB UlRJVElPTiBCWSBMSVNUKGEpIENPTkZJR1VSQVRJT04gKFZBTFVFUyBJTiAoMSkpOworSU5TRVJU IElOVE8gcGFydGVkX25vdG51bGxfaW5oX3Rlc3QgKGIpIFZBTFVFUyAoTlVMTCk7CitFUlJPUjog IG51bGwgdmFsdWUgaW4gY29sdW1uICJiIiBvZiByZWxhdGlvbiAicGFydGVkX25vdG51bGxfaW5o X3Rlc3RfMCIgdmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludAorREVUQUlMOiAgRmFpbGluZyBy b3cgY29udGFpbnMgKDEsIG51bGwpLgorLS0gbm90ZSB0aGF0IGEncyBkZWZhdWx0IGlzIHByZXNl cnZlZAorXGQgcGFydGVkX25vdG51bGxfaW5oX3Rlc3QxCitEUk9QIFRBQkxFIHBhcnRlZF9ub3Ru dWxsX2luaF90ZXN0OworLS0gUGFydGl0aW9uIGJvdW5kIGluIGRlc2NyaWJlIG91dHB1dAorXGQr IHBhcnRfZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAicHVibGlj LnBhcnRfZSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZh dWx0IHwgU3RvcmFnZSAgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwg ICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAgICAgICAgICAgfCAKKyBiICAgICAg fCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAxICAgICAgIHwgcGxhaW4gICAgfCAg ICAgICAgICAgICAgfCAKK1BhcnRpdGlvbiBvZjogcGFydGVkIEZPUiBWQUxVRVMgSU4gKCdlJykK K1BhcnRpdGlvbiBjb25zdHJhaW50OiAoKGEgSVMgTk9UIE5VTEwpIEFORCAoYSA9ICdlJzo6dGV4 dCkpCisKKy0tIEJvdGggcGFydGl0aW9uIGJvdW5kIGFuZCBwYXJ0aXRpb24ga2V5IGluIGRlc2Ny aWJlIG91dHB1dAorXGQrIHBhcnRfYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0 aXRpb25lZCB0YWJsZSAicHVibGljLnBhcnRfYyIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0 aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBTdGF0cyB0YXJnZXQgfCBEZXNj cmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCB0 ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAg ICAgICAgICAgfCAKKyBiICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAw ICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAKK1BhcnRpdGlvbiBvZjogcGFydGVk IEZPUiBWQUxVRVMgSU4gKCdjJykKK1BhcnRpdGlvbiBjb25zdHJhaW50OiAoKGEgSVMgTk9UIE5V TEwpIEFORCAoYSA9ICdjJzo6dGV4dCkpCitQYXJ0aXRpb24ga2V5OiBSQU5HRSAoYikKK1BhcnRp dGlvbnM6IHBhcnRfY18xXzEwIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKQorCistLSBhIGxl dmVsLTIgcGFydGl0aW9uJ3MgY29uc3RyYWludCB3aWxsIGluY2x1ZGUgdGhlIHBhcmVudCdzIGV4 cHJlc3Npb25zCitcZCsgcGFydF9jXzFfMTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVGFibGUgInB1YmxpYy5wYXJ0X2NfMV8xMCIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0 aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBTdGF0cyB0YXJnZXQgfCBEZXNj cmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCB0 ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAg ICAgICAgICAgfCAKKyBiICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAw ICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAKK1BhcnRpdGlvbiBvZjogcGFydF9j IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKQorUGFydGl0aW9uIGNvbnN0cmFpbnQ6ICgoYSBJ UyBOT1QgTlVMTCkgQU5EIChhID0gJ2MnOjp0ZXh0KSBBTkQgKGIgSVMgTk9UIE5VTEwpIEFORCAo YiA+PSAxKSBBTkQgKGIgPCAxMCkpCisKKy0tIFNob3cgcGFydGl0aW9uIGNvdW50IGluIHRoZSBw YXJlbnQncyBkZXNjcmliZSBvdXRwdXQKKy0tIFRlbXB0ZWQgdG8gaW5jbHVkZSBcZCsgb3V0cHV0 IGxpc3RpbmcgcGFydGl0aW9ucyB3aXRoIGJvdW5kIGluZm8gYnV0CistLSBvdXRwdXQgY291bGQg dmFyeSBkZXBlbmRpbmcgb24gdGhlIG9yZGVyIGluIHdoaWNoIHBhcnRpdGlvbiBvaWRzIGFyZQor LS0gcmV0dXJuZWQuCitcZCBwYXJ0ZWQKKyAgICAgICAgIFBhcnRpdGlvbmVkIHRhYmxlICJwdWJs aWMucGFydGVkIgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERl ZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0t LS0KKyBhICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBiICAgICAg fCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAwCitQYXJ0aXRpb24ga2V5OiBMSVNU IChhKQorTnVtYmVyIG9mIHBhcnRpdGlvbnM6IDQgKFVzZSBcZCsgdG8gbGlzdCB0aGVtLikKKwor RFJPUCBUQUJMRSBwYXJ0ZWQ7CistLSBsaXN0IHBhcnRpdGlvbmluZyBvbiBhcnJheSB0eXBlIGNv bHVtbgorQ1JFQVRFIFRBQkxFIGFycmxwIChhIGludFtdKSBQQVJUSVRJT04gQlkgTElTVCAoYSkg Q09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAoJ3sxfScsICd7Mn0nKSk7CitcZCsgYXJybHBfMQor RFJPUCBUQUJMRSBhcnJscDsKKy0tIHBhcnRpdGlvbiBvbiBib29sZWFuIGNvbHVtbgorQ1JFQVRF IFRBQkxFIGJvb2xzcGFydCAoYSBib29sKSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJB VElPTgorKFZBTFVFUyBJTiAodHJ1ZSksIChmYWxzZSkpOworXGQrIGJvb2xzcGFydAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgUGFydGl0aW9uZWQgdGFibGUgInB1YmxpYy5ib29sc3BhcnQi CisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0 b3JhZ2UgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLQorIGEgICAgICB8IGJvb2xlYW4gfCAgICAgICAgICAgfCAgICAgICAgICB8 ICAgICAgICAgfCBwbGFpbiAgIHwgICAgICAgICAgICAgIHwgCitQYXJ0aXRpb24ga2V5OiBMSVNU IChhKQorUGFydGl0aW9uczogYm9vbHNwYXJ0XzAgRk9SIFZBTFVFUyBJTiAodHJ1ZSksCisgICAg ICAgICAgICBib29sc3BhcnRfMSBGT1IgVkFMVUVTIElOIChmYWxzZSkKKworRFJPUCBUQUJMRSBi b29sc3BhcnQ7CistLSB0ZXN0IHVzaW5nIGEgdm9sYXRpbGUgZXhwcmVzc2lvbiBhcyBwYXJ0aXRp b24gYm91bmQKK0NSRUFURSBUQUJMRSB2b2xhdGlsZV9wYXJ0Ym91bmRfdGVzdCAocGFydGtleSB0 aW1lc3RhbXApIFBBUlRJVElPTiBCWSBMSVNUIChwYXJ0a2V5KSBDT05GSUdVUkFUSU9OCisoVkFM VUVTIElOICgnMTk3MC0wMS0wMSAwMDowMDowMCswMCc6OnRpbWVzdGFtcCwgY3VycmVudF90aW1l c3RhbXApLCgnMTk4Mi0wMS0yNSAwMDowMDowMCswMCc6OnRpbWVzdGFtcCkpOworRFJPUCBUQUJM RSB2b2xhdGlsZV9wYXJ0Ym91bmRfdGVzdDsKKy0tIHRlc3RzIG9mIGNvbHVtbiBkcm9wIHdpdGgg cGFydGl0aW9uIHRhYmxlcyBhbmQgaW5kZXhlcyB1c2luZworLS0gcHJlZGljYXRlcyBhbmQgZXhw cmVzc2lvbnMuCitDUkVBVEUgVEFCTEUgcGFydF9jb2x1bW5fZHJvcCAodXNlbGVzc18xIGludCwg aWQgaW50LCB1c2VsZXNzXzIgaW50LCBkIGludCwKKyAgYiBpbnQsIHVzZWxlc3NfMyBpbnQpIFBB UlRJVElPTiBCWSBIQVNIIChpZCkgQ09ORklHVVJBVElPTiAoTU9EVUxVUyAzKTsKK0FMVEVSIFRB QkxFIHBhcnRfY29sdW1uX2Ryb3AgRFJPUCBDT0xVTU4gdXNlbGVzc18xOworQUxURVIgVEFCTEUg cGFydF9jb2x1bW5fZHJvcCBEUk9QIENPTFVNTiB1c2VsZXNzXzI7CitBTFRFUiBUQUJMRSBwYXJ0 X2NvbHVtbl9kcm9wIERST1AgQ09MVU1OIHVzZWxlc3NfMzsKK0NSRUFURSBJTkRFWCBwYXJ0X2Nv bHVtbl9kcm9wX2JfcHJlZCBPTiBwYXJ0X2NvbHVtbl9kcm9wKGIpIFdIRVJFIGIgPSAxOworQ1JF QVRFIElOREVYIHBhcnRfY29sdW1uX2Ryb3BfYl9leHByIE9OIHBhcnRfY29sdW1uX2Ryb3AoKGIg PSAxKSk7CitDUkVBVEUgSU5ERVggcGFydF9jb2x1bW5fZHJvcF9kX3ByZWQgT04gcGFydF9jb2x1 bW5fZHJvcChkKSBXSEVSRSBkID0gMjsKK0NSRUFURSBJTkRFWCBwYXJ0X2NvbHVtbl9kcm9wX2Rf ZXhwciBPTiBwYXJ0X2NvbHVtbl9kcm9wKChkID0gMikpOworQ1JFQVRFIElOREVYIHBhcnRfY29s dW1uX2Ryb3BfZF8xX3ByZWQgT04gcGFydF9jb2x1bW5fZHJvcF8xKGQpIFdIRVJFIGQgPSAyOwor Q1JFQVRFIElOREVYIHBhcnRfY29sdW1uX2Ryb3BfZF8xX2V4cHIgT04gcGFydF9jb2x1bW5fZHJv cF8xKChkID0gMikpOworXGQgcGFydF9jb2x1bW5fZHJvcAorICAgIFBhcnRpdGlvbmVkIHRhYmxl ICJwdWJsaWMucGFydF9jb2x1bW5fZHJvcCIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9u IHwgTnVsbGFibGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tCisgaWQgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAg ICAgIHwgCisgZCAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgYiAg ICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitQYXJ0aXRpb24ga2V5OiBI QVNIIChpZCkKK0luZGV4ZXM6CisgICAgInBhcnRfY29sdW1uX2Ryb3BfYl9leHByIiBidHJlZSAo KGIgPSAxKSkKKyAgICAicGFydF9jb2x1bW5fZHJvcF9iX3ByZWQiIGJ0cmVlIChiKSBXSEVSRSBi ID0gMQorICAgICJwYXJ0X2NvbHVtbl9kcm9wX2RfZXhwciIgYnRyZWUgKChkID0gMikpCisgICAg InBhcnRfY29sdW1uX2Ryb3BfZF9wcmVkIiBidHJlZSAoZCkgV0hFUkUgZCA9IDIKK051bWJlciBv ZiBwYXJ0aXRpb25zOiAzIChVc2UgXGQrIHRvIGxpc3QgdGhlbS4pCisKK1xkIHBhcnRfY29sdW1u X2Ryb3BfMQorICAgICAgICAgVGFibGUgInB1YmxpYy5wYXJ0X2NvbHVtbl9kcm9wXzEiCisgQ29s dW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLQorIGlkICAgICB8IGlu dGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIGQgICAgICB8IGludGVnZXIgfCAgICAg ICAgICAgfCAgICAgICAgICB8IAorIGIgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAg ICAgICB8IAorUGFydGl0aW9uIG9mOiBwYXJ0X2NvbHVtbl9kcm9wIEZPUiBWQUxVRVMgV0lUSCAo bW9kdWx1cyAzLCByZW1haW5kZXIgMSkKK0luZGV4ZXM6CisgICAgInBhcnRfY29sdW1uX2Ryb3Bf MV9iX2lkeCIgYnRyZWUgKGIpIFdIRVJFIGIgPSAxCisgICAgInBhcnRfY29sdW1uX2Ryb3BfMV9k X2lkeCIgYnRyZWUgKGQpIFdIRVJFIGQgPSAyCisgICAgInBhcnRfY29sdW1uX2Ryb3BfMV9leHBy X2lkeCIgYnRyZWUgKChiID0gMSkpCisgICAgInBhcnRfY29sdW1uX2Ryb3BfMV9leHByX2lkeDEi IGJ0cmVlICgoZCA9IDIpKQorICAgICJwYXJ0X2NvbHVtbl9kcm9wX2RfMV9leHByIiBidHJlZSAo KGQgPSAyKSkKKyAgICAicGFydF9jb2x1bW5fZHJvcF9kXzFfcHJlZCIgYnRyZWUgKGQpIFdIRVJF IGQgPSAyCisKK1xkIHBhcnRfY29sdW1uX2Ryb3BfMgorICAgICAgICAgVGFibGUgInB1YmxpYy5w YXJ0X2NvbHVtbl9kcm9wXzIiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxh YmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLQorIGlkICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAor IGQgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIGIgICAgICB8IGlu dGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorUGFydGl0aW9uIG9mOiBwYXJ0X2NvbHVt bl9kcm9wIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAzLCByZW1haW5kZXIgMikKK0luZGV4ZXM6 CisgICAgInBhcnRfY29sdW1uX2Ryb3BfMl9iX2lkeCIgYnRyZWUgKGIpIFdIRVJFIGIgPSAxCisg ICAgInBhcnRfY29sdW1uX2Ryb3BfMl9kX2lkeCIgYnRyZWUgKGQpIFdIRVJFIGQgPSAyCisgICAg InBhcnRfY29sdW1uX2Ryb3BfMl9leHByX2lkeCIgYnRyZWUgKChiID0gMSkpCisgICAgInBhcnRf Y29sdW1uX2Ryb3BfMl9leHByX2lkeDEiIGJ0cmVlICgoZCA9IDIpKQorCitcZCBwYXJ0X2NvbHVt bl9kcm9wXzMKK0RST1AgVEFCTEUgcGFydF9jb2x1bW5fZHJvcDsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9j cmVhdGVfdGFibGUuc3FsCmluZGV4IDgyYWRhNDc2NjEuLjQ4ZDc2ODZjOTAgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbApAQCAtNzMwLDMgKzczMCwyNjggQEAgY3JlYXRlIHRh YmxlIHBhcnRfY29sdW1uX2Ryb3BfMV8xMCBwYXJ0aXRpb24gb2YKIFxkIHBhcnRfY29sdW1uX2Ry b3AKIFxkIHBhcnRfY29sdW1uX2Ryb3BfMV8xMAogZHJvcCB0YWJsZSBwYXJ0X2NvbHVtbl9kcm9w OworCistLSBBdXRvIGdlbmVyYXRlZCBwYXJ0aXRpb25zCistLSBwYXJ0aXRpb25pbmcgdHlwZSBu b3Qgc3BlY2lmaWVkCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0IChhIGludCkgQ09ORklHVVJBVElP TiAoTU9EVUxVUyAxMCk7CisKKy0tIG11c3QgZmFpbCBiZWNhdXNlIG9mIHdyb25nIGNvbmZpZ3Vy YXRpb24KK0NSRUFURSBUQUJMRSBmYWlsX3BhcnQgKGEgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAo YSkgQ09ORklHVVJBVElPTgorKHZhbHVlcyBpbiAoMSwgMiksICgzLCA0KSBERUZBVUxUIFBBUlRJ VElPTiBwYXJ0X2RlZmF1bHQpOworCistLSBmb3JiaWRkZW4gZXhwcmVzc2lvbnMgZm9yIHBhcnRp dGlvbiBib3VuZCB3aXRoIGxpc3QgcGFydGl0aW9uZWQgdGFibGUKK0NSRUFURSBUQUJMRSBmYWls X3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFM VUVTIElOIChzb21lbmFtZSkpOworQ1JFQVRFIFRBQkxFIGZhaWxfcGFydGVkIChhIGludCkgUEFS VElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyhWQUxVRVMgSU4gKHNvbWVuYW1lLnNv bWVuYW1lKSk7CitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkg TElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAoYSkpOworQ1JFQVRFIFRBQkxFIGZh aWxfcGFydGVkIChhIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyhW QUxVRVMgSU4gKHN1bShhKSkpOworQ1JFQVRFIFRBQkxFIGZhaWxfcGFydGVkIChhIGludCkgUEFS VElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyhWQUxVRVMgSU4gKHN1bShzb21lbmFt ZSkpKTsKK0NSRUFURSBUQUJMRSBmYWlsX3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBMSVNU IChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIElOIChzdW0oMSkpKTsKK0NSRUFURSBUQUJMRSBm YWlsX3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCiso VkFMVUVTIElOICgoc2VsZWN0IDEpKSk7CitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50 KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAoZ2VuZXJh dGVfc2VyaWVzKDQsIDYpKSk7CitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50KSBQQVJU SVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAoKDErMSkgY29sbGF0 ZSAiUE9TSVgiKSk7CisKKy0tIHN5bnRheCBkb2VzIG5vdCBhbGxvdyBlbXB0eSBsaXN0IG9mIHZh bHVlcyBmb3IgbGlzdCBwYXJ0aXRpb25zCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgaW50 KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJTiAoKSk7Cist LSB0cnlpbmcgdG8gc3BlY2lmeSByYW5nZSBmb3IgbGlzdCBwYXJ0aXRpb25lZCB0YWJsZQorQ1JF QVRFIFRBQkxFIGZhaWxfcGFydGVkIChhIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJ R1VSQVRJT04KKyhWQUxVRVMgRlJPTSAoMSkgVE8gKDIpKTsKKy0tIHRyeWluZyB0byBzcGVjaWZ5 IG1vZHVsdXMgYW5kIHJlbWFpbmRlciBmb3IgbGlzdCBwYXJ0aXRpb25lZCB0YWJsZQorQ1JFQVRF IFRBQkxFIGZhaWxfcGFydGVkIChhIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VS QVRJT04KKyhNT0RVTFVTIDEwKTsKKy0tIHNwZWNpZmllZCBsaXRlcmFsIGNhbid0IGJlIGNhc3Qg dG8gdGhlIHBhcnRpdGlvbiBjb2x1bW4gZGF0YSB0eXBlCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0 ZWQgKGEgYm9vbCkgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyhWQUxVRVMg SU4gKDEpKTsKKworLS0gY2hlY2sgZm9yIHBhcnRpdGlvbiBib3VuZCBvdmVybGFwIGFuZCBvdGhl ciBpbnZhbGlkIHNwZWNpZmljYXRpb25zCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0ZWQgKGEgdmFy Y2hhcikgUEFSVElUSU9OIEJZIExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyhWQUxVRVMgSU4gKG51 bGwsICd6JyksKCdhJywgJ2InKSwobnVsbCkgREVGQVVMVCBQQVJUSVRJT04gcGFydF9kZWZhdWx0 KTsKKworQ1JFQVRFIFRBQkxFIGZhaWxfcGFydGVkIChhIHZhcmNoYXIpIFBBUlRJVElPTiBCWSBM SVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIElOIChudWxsLCAneicpLCgnYScsICdiJyks KCdiJywgJ2MnKSBERUZBVUxUIFBBUlRJVElPTiBwYXJ0X2RlZmF1bHQpOworCitDUkVBVEUgVEFC TEUgZmFpbF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElP TgorKHZhbHVlcyBpbiAoMSwgMiksICgxLCAzKSk7CisKKy0tIHRyeWluZyB0byBjcmVhdGUgZGVm YXVsdCBwYXJ0aXRpb24gZm9yIHRoZSBoYXNoIHBhcnRpdGlvbmVkIHRhYmxlCitSRUFURSBUQUJM RSBmYWlsX3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBIQVNIIChhKSBDT05GSUdVUkFUSU9O CisoTU9EVUxVUyAxMCBERUZBVUxUIFBBUlRJVElPTiBoYXNoX2RlZmF1bHQpOworCitDUkVBVEUg VEFCTEUgbGlzdF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJB VElPTgorKHZhbHVlcyBpbiAoMSwgMiksICgzLCA0KSBERUZBVUxUIFBBUlRJVElPTiBwYXJ0X2Rl ZmF1bHQpOworXGQrIGxpc3RfcGFydGVkCitEUk9QIFRBQkxFIGxpc3RfcGFydGVkOworCitDUkVB VEUgVEFCTEUgaGFzaF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAoYSkgQ09ORklH VVJBVElPTgorKG1vZHVsdXMgMyk7CitcZCsgaGFzaF9wYXJ0ZWQKK0RST1AgVEFCTEUgaGFzaF9w YXJ0ZWQ7CisKK0NSRUFURSBUQUJMRSBsaXN0X3BhcnRlZCAoYSBpbnQpIFBBUlRJVElPTiBCWSBM SVNUIChhKSBDT05GSUdVUkFUSU9OCisodmFsdWVzIGluICgnMScpLCAoMiksICgyKzEpLCAobnVs bCkgREVGQVVMVCBQQVJUSVRJT04gcGFydF9kZWZhdWx0KTsKK1xkKyBsaXN0X3BhcnRlZAorRFJP UCBUQUJMRSBsaXN0X3BhcnRlZDsKKworLS0gc3BlY2lmaWVkIGxpdGVyYWwgY2FuIGJlIGNhc3Qs IGFuZCB0aGUgY2FzdCBtaWdodCBub3QgYmUgaW1tdXRhYmxlCitDUkVBVEUgVEFCTEUgbW9uZXlw IChhIG1vbmV5KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09ORklHVVJBVElPTgorKFZBTFVFUyBJ TiAoMTApLCAoJzExJyksICh0b19jaGFyKDEyLCAnOTknKTo6aW50KSk7CitEUk9QIFRBQkxFIG1v bmV5cDsKKworLS0gcGFydGl0aW9uIHRhYmxlIGluaGVyaXRzIHJlbGF0aW9uIHBlcnNpc3RlbmNl IHNldHRpbmcgZnJvbSBwYXJlbnQKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfcGFydGVkIChhIGNo YXIpIFBBUlRJVElPTiBCWSBMSVNUIChhKQorQ09ORklHVVJBVElPTiAoVkFMVUVTIElOICgnYScp IERFRkFVTFQgUEFSVElUSU9OIHRlbXBfcGFydGVkX2RlZmF1bHQpOworCistLSBCZWNhdXNlIFxk KyB3aWxsIGlzc3VlIGEgcGdfdGVtcF9ubiB0aGF0IC5vdSB3aWxsIG5ldmVyIG1hdGNoCitTRUxF Q1QgKiBGUk9NICgKKyAgICBXSVRIIFJFQ1VSU0lWRSBhbmNlc3RvcihuYW1lKSBBUyAoU0VMRUNU IGMucmVsbmFtZSBBUyAibmFtZSIgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgV0hFUkUgYy5y ZWxraW5kID0gJ3AnKQorICAgIFNFTEVDVCAgYS5yZWxuYW1lICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBBUyAicGFyZW50IiwKKyAgICAgICAgICAgICdQQVJFTlQnICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVMgInR5cGUiLAorICAgICAgICAgICAgYW5jZXN0 Lm5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUyAibmFtZSIsCisgICAgICAg ICAgICBwZ19nZXRfcGFydGtleWRlZihwLm9pZCkgICAgICAgICAgICAgICAgICAgIEFTICJyYW5n ZSIKKyAgICAgICAgRlJPTSBhbmNlc3RvciBhbmNlc3QKKyAgICAgICAgSk9JTiBwZ19jYXRhbG9n LnBnX2NsYXNzIHAgT04gcC5yZWxuYW1lID0gYW5jZXN0Lm5hbWUKKyAgICAgICAgTEVGVCBKT0lO IHBnX2NhdGFsb2cucGdfaW5oZXJpdHMgaSBPTiBpLmluaHJlbGlkID0gcC5vaWQKKyAgICAgICAg TEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgYSBPTiBhLm9pZCA9IGkuaW5ocGFyZW50Cisg ICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IHAucmVsbmFt ZXNwYWNlCisgICAgICAgIFdIRVJFIHAucmVsa2luZCBJTiAoJ3AnLCAncicpCisgICAgVU5JT04g QUxMCisgICAgU0VMRUNUICBwYXJlbnQucmVsbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFTICJwYXJlbnQiLAorICAgICAgICAgICAgJ0NISUxEJyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBUyAidHlwZSIsCisgICAgICAgICAgICBjaGlsZC5yZWxuYW1lICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTICJuYW1lIiwKKyAgICAgICAgICAgIHBnX2dl dF9leHByKGNoaWxkLnJlbHBhcnRib3VuZCwgY2hpbGQub2lkKSAgQVMgInJhbmdlIgorICAgICAg ICBGUk9NIGFuY2VzdG9yIGFuY2VzdAorICAgICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3Mg cGFyZW50IE9OIHBhcmVudC5yZWxuYW1lID0gYW5jZXN0Lm5hbWUKKyAgICAgICAgSk9JTiBwZ19j YXRhbG9nLnBnX2luaGVyaXRzIGluaCBPTiBpbmguaW5ocGFyZW50ID0gcGFyZW50Lm9pZAorICAg ICAgICBKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgY2hpbGQgT04gY2hpbGQub2lkID0gaW5oLmlu aHJlbGlkCisgICAgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbmFtZXNwYWNlIE9O IG5hbWVzcGFjZS5vaWQgPSBjaGlsZC5yZWxuYW1lc3BhY2UKKyAgICAgICAgV0hFUkUgcGFyZW50 LnJlbGtpbmQgSU4gKCdwJywgJ3InKQorICAgICkgQVMgZHAKK1dIRVJFCisgICAgInBhcmVudCIg PSAndGVtcF9wYXJ0ZWQnCitPUkRFUiBCWSAicGFyZW50IiBOVUxMUyBGSVJTVCwgInR5cGUiIERF U0MsICJuYW1lIjsKKworCisKK0RST1AgVEFCTEUgdGVtcF9wYXJ0ZWQ7CisKKy0tIHBhcnRpdGlv biB0YWJsZSBpbmhlcml0cyByZWxhdGlvbiBwZXJzaXN0ZW5jZSBzZXR0aW5nIGZyb20gcGFyZW50 CitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdW5sb2dnZWRfcGFydGVkIChhIGNoYXIpIFBBUlRJVElP TiBCWSBMSVNUIChhKQorQ09ORklHVVJBVElPTiAoVkFMVUVTIElOICgnYScpIERFRkFVTFQgUEFS VElUSU9OIHVubG9nZ2VkX3BhcnRlZF9kZWZhdWx0KTsKK1xkKyB1bmxvZ2dlZF9wYXJ0ZWQKK0RS T1AgVEFCTEUgdW5sb2dnZWRfcGFydGVkOworCistLSB0ZXN0aW5nIFBBUlRJVElPTiBPRiBvbiBh dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBwYXJ0aXRpb25lZCB0YWJsZQorCitDUkVBVEUgVEFCTEUg aGFzaF9wYXJ0ZWQgKGEgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAoYSkgQ09ORklHVVJBVElPTiAo TU9EVUxVUyAxMCk7CistLSBhbGwgcmVtYWluZGVyIHZhbHVlcyBhcmUgYWxyZWFkeSBiZWxvbmcg dG8gcGFydGl0aW9ucworQ1JFQVRFIFRBQkxFIGZhaWxfcGFydCBQQVJUSVRJT04gT0YgaGFzaF9w YXJ0ZWQgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDMwLCBSRU1BSU5ERVIgMyk7CistLSB0cnlp bmcgdG8gc3BlY2lmeSByYW5nZSBmb3IgdGhlIGhhc2ggcGFydGl0aW9uZWQgdGFibGUKK0NSRUFU RSBUQUJMRSBmYWlsX3BhcnQgUEFSVElUSU9OIE9GIGhhc2hfcGFydGVkIEZPUiBWQUxVRVMgRlJP TSAoJ2EnLCAxKSBUTyAoJ3onKTsKKy0tIHRyeWluZyB0byBzcGVjaWZ5IGxpc3QgdmFsdWUgZm9y IHRoZSBoYXNoIHBhcnRpdGlvbmVkIHRhYmxlCitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0IFBBUlRJ VElPTiBPRiBoYXNoX3BhcnRlZCBGT1IgVkFMVUVTIElOICgxMDAwKTsKKy0tIHRyeWluZyB0byBh ZGQgZGVmYXVsdCBwYXJ0aXRpb24gdG8gaGFzaCBwYXJ0aXRpb25lZCB0YWJsZQorQ1JFQVRFIFRB QkxFIGZhaWxfcGFydCBQQVJUSVRJT04gT0YgaGFzaF9wYXJ0ZWQgREVGQVVMVDsKK1xkIGhhc2hf cGFydGVkCitEUk9QIFRBQkxFIGhhc2hfcGFydGVkOworCistLSBjYXN0IGlzIGltbXV0YWJsZQor Q1JFQVRFIFRBQkxFIGJpZ2ludHAgKGEgYmlnaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSkgQ09O RklHVVJBVElPTgorKFZBTFVFUyBJTiAoMTApKTsKKy0tIGZhaWxzIGR1ZSB0byBvdmVybGFwOgor Q1JFQVRFIFRBQkxFIGJpZ2ludHBfb3ZlcmxhcCBQQVJUSVRJT04gT0YgYmlnaW50cCBGT1IgVkFM VUVTIElOICgnMTAnKTsKK0RST1AgVEFCTEUgYmlnaW50cDsKKworLS0gY2hlY2sgZGVmYXVsdCBw YXJ0aXRpb24gb3ZlcmxhcAorQ1JFQVRFIFRBQkxFIGxpc3RfcGFydGVkIChhIHZhcmNoYXIpIFBB UlRJVElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIElOIChudWxsLCAneicp LCgnYScsICdiJykgREVGQVVMVCBwYXJ0aXRpb24gdGJsX2RlZmF1bHQpOworSU5TRVJUIElOVE8g bGlzdF9wYXJ0ZWQgVkFMVUVTKCdYJyk7CitDUkVBVEUgVEFCTEUgZmFpbF9wYXJ0IFBBUlRJVElP TiBPRiBsaXN0X3BhcnRlZCBGT1IgVkFMVUVTIElOICgnVycsICdYJywgJ1knKTsKKy0tIHRyeWlu ZyB0byBjcmVhdGUgYWxyZWFkeSBleGlzdGluZyBkZWZhdWx0IHBhcnRpdGlvbgorQ1JFQVRFIFRB QkxFIGZhaWxfcGFydCBQQVJUSVRJT04gT0YgbGlzdF9wYXJ0ZWQgREVGQVVMVDsKK0RST1AgVEFC TEUgbGlzdF9wYXJ0ZWQ7CisKKy0tIGNoZWNrIHNjaGVtYSBwcm9wYWdhdGlvbiBmcm9tIHBhcmVu dAorQ1JFQVRFIFRBQkxFIHBhcnRlZCAoYSB0ZXh0LCBiIGludCBOT1QgTlVMTCBERUZBVUxUIDAs CisJQ09OU1RSQUlOVCBjaGVja19hIENIRUNLIChsZW5ndGgoYSkgPiAwKSkKK1BBUlRJVElPTiBC WSBMSVNUIChhKSBDT05GSUdVUkFUSU9OICggVkFMVUVTIElOICgnYScsJ2InKSwoJ2QnKSApOwor CistLSBvbmx5IGluaGVyaXRlZCBhdHRyaWJ1dGVzIChuZXZlciBsb2NhbCBvbmVzKQorU0VMRUNU IGF0dG5hbWUsIGF0dGlzbG9jYWwsIGF0dGluaGNvdW50IEZST00gcGdfYXR0cmlidXRlCisgIFdI RVJFIGF0dHJlbGlkID0gJ3BhcnRlZF8xJzo6cmVnY2xhc3MgYW5kIGF0dG51bSA+IDAKKyAgT1JE RVIgQlkgYXR0bnVtOworCistLSBhYmxlIHRvIHNwZWNpZnkgY29sdW1uIGRlZmF1bHQsIGNvbHVt biBjb25zdHJhaW50LCBhbmQgdGFibGUgY29uc3RyYWludAorLS0gZmlyc3QgY2hlY2sgdGhlICJj b2x1bW4gc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIiBlcnJvcgorQ1JFQVRFIFRBQkxFIHBhcnRf ZV9mYWlsIFBBUlRJVElPTiBPRiBwYXJ0ZWQgKAorCWIgTk9UIE5VTEwsCisJYiBERUZBVUxUIDEs CisJYiBDSEVDSyAoYiA+PSAwKSwKKwlDT05TVFJBSU5UIGNoZWNrX2EgQ0hFQ0sgKGxlbmd0aChh KSA+IDApCispIEZPUiBWQUxVRVMgSU4gKCdlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0X2UgUEFS VElUSU9OIE9GIHBhcnRlZCAoCisJYiBOT1QgTlVMTCBERUZBVUxUIDEsCisJQ09OU1RSQUlOVCBj aGVja19hIENIRUNLIChsZW5ndGgoYSkgPiAwKSwKKwlDT05TVFJBSU5UIGNoZWNrX2IgQ0hFQ0sg KGIgPj0gMCkKKykgRk9SIFZBTFVFUyBJTiAoJ2UnKTsKKy0tIGNvbmlzbG9jYWwgc2hvdWxkIGJl IGZhbHNlIGZvciBhbnkgbWVyZ2VkIGNvbnN0cmFpbnRzLCB0cnVlIG90aGVyd2lzZQorU0VMRUNU IGNvbm5hbWUsIGNvbmlzbG9jYWwsIGNvbmluaGNvdW50IEZST00gcGdfY29uc3RyYWludAorV0hF UkUgY29ucmVsaWQgPSAncGFydF9lJzo6cmVnY2xhc3MgT1JERVIgQlkgY29uaXNsb2NhbCwgY29u aW5oY291bnQ7CisKKy0tIGNoZWNrX2EgY2FuIG5vdCBiZSBkcm9wcGVkIGFzIGl0IGlzIGluaGVy aXRlZAorQUxURVIgVEFCTEUgcGFydF9lIERST1AgQ09OU1RSQUlOVCBjaGVja19hOworLS0gY2hl Y2tfYiBjYW4gYmUgZHJvcHBlZCBhcyBpdCBpcyBsb2NhbAorQUxURVIgVEFCTEUgcGFydF9lIERS T1AgQ09OU1RSQUlOVCBjaGVja19iOworCistLSBPbmNlIGNoZWNrX2IgaXMgYWRkZWQgdG8gdGhl IHBhcmVudCwgaXQgc2hvdWxkIGJlIG1hZGUgbm9uLWxvY2FsIGZvciBwYXJ0X2IKK0FMVEVSIFRB QkxFIHBhcnRfZSBBREQgQ09OU1RSQUlOVCBjaGVja19iIENIRUNLIChiID49IDApOworQUxURVIg VEFCTEUgcGFydGVkIEFERCBDT05TVFJBSU5UIGNoZWNrX2IgQ0hFQ0sgKGIgPj0gMCk7CitTRUxF Q1QgY29ubmFtZSwgY29uaXNsb2NhbCwgY29uaW5oY291bnQgRlJPTSBwZ19jb25zdHJhaW50IFdI RVJFIGNvbnJlbGlkID0gJ3BhcnRfZSc6OnJlZ2NsYXNzOworCistLSBOZWl0aGVyIGNoZWNrX2Eg bm9yIGNoZWNrX2IgYXJlIGRyb3BwYWJsZSBmcm9tIHBhcnRfYgorQUxURVIgVEFCTEUgcGFydF9l IERST1AgQ09OU1RSQUlOVCBjaGVja19hOworQUxURVIgVEFCTEUgcGFydF9lIERST1AgQ09OU1RS QUlOVCBjaGVja19iOworCistLSBBbmQgZHJvcHBpbmcgaXQgZnJvbSBwYXJ0ZWQgc2hvdWxkIGxl YXZlIG5vIHRyYWNlIG9mIHRoZW0gb24gcGFydF9lLCB1bmxpa2UKKy0tIHRyYWRpdGlvbmFsIGlu aGVyaXRhbmNlIHdoZXJlIHRoZXkgd2lsbCBiZSBsZWZ0IGJlaGluZCwgYmVjYXVzZSB0aGV5IHdv dWxkCistLSBiZSBsb2NhbCBjb25zdHJhaW50cy4KK0FMVEVSIFRBQkxFIHBhcnRlZCBEUk9QIENP TlNUUkFJTlQgY2hlY2tfYSwgRFJPUCBDT05TVFJBSU5UIGNoZWNrX2I7CitTRUxFQ1QgY29uaXNs b2NhbCwgY29uaW5oY291bnQgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbnJlbGlkID0gJ3Bh cnRfZSc6OnJlZ2NsYXNzOworCistLSBzcGVjaWZ5IFBBUlRJVElPTiBCWSBmb3IgYSBwYXJ0aXRp b24KK0NSRUFURSBUQUJMRSBmYWlsX3BhcnRfY29sX25vdF9mb3VuZCBQQVJUSVRJT04gT0YgcGFy dGVkIEZPUiBWQUxVRVMgSU4gKCdjJykgUEFSVElUSU9OIEJZIEhBU0ggKGMpOworQ1JFQVRFIFRB QkxFIHBhcnRfYyBQQVJUSVRJT04gT0YgcGFydGVkIChiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCBE RUZBVUxUIDApCitGT1IgVkFMVUVTIElOICgnYycpIFBBUlRJVElPTiBCWSBSQU5HRSAoKGIpKTsK KworLS0gY3JlYXRlIGEgbGV2ZWwtMiBwYXJ0aXRpb24KK0NSRUFURSBUQUJMRSBwYXJ0X2NfMV8x MCBQQVJUSVRJT04gT0YgcGFydF9jIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKKworLS0g Y2hlY2sgdGhhdCBOT1QgTlVMTCBhbmQgZGVmYXVsdCB2YWx1ZSBhcmUgaW5oZXJpdGVkIGNvcnJl Y3RseQorQ1JFQVRFIFRBQkxFIHBhcnRlZF9ub3RudWxsX2luaF90ZXN0IChhIGludCBERUZBVUxU IDEsIGIgaW50IE5PVCBOVUxMIERFRkFVTFQgMCkKKwlQQVJUSVRJT04gQlkgTElTVChhKSBDT05G SUdVUkFUSU9OIChWQUxVRVMgSU4gKDEpKTsKK0lOU0VSVCBJTlRPIHBhcnRlZF9ub3RudWxsX2lu aF90ZXN0IChiKSBWQUxVRVMgKE5VTEwpOworLS0gbm90ZSB0aGF0IGEncyBkZWZhdWx0IGlzIHBy ZXNlcnZlZAorXGQgcGFydGVkX25vdG51bGxfaW5oX3Rlc3QxCitEUk9QIFRBQkxFIHBhcnRlZF9u b3RudWxsX2luaF90ZXN0OworCistLSBQYXJ0aXRpb24gYm91bmQgaW4gZGVzY3JpYmUgb3V0cHV0 CitcZCsgcGFydF9lCisKKy0tIEJvdGggcGFydGl0aW9uIGJvdW5kIGFuZCBwYXJ0aXRpb24ga2V5 IGluIGRlc2NyaWJlIG91dHB1dAorXGQrIHBhcnRfYworCistLSBhIGxldmVsLTIgcGFydGl0aW9u J3MgY29uc3RyYWludCB3aWxsIGluY2x1ZGUgdGhlIHBhcmVudCdzIGV4cHJlc3Npb25zCitcZCsg cGFydF9jXzFfMTAKKworLS0gU2hvdyBwYXJ0aXRpb24gY291bnQgaW4gdGhlIHBhcmVudCdzIGRl c2NyaWJlIG91dHB1dAorLS0gVGVtcHRlZCB0byBpbmNsdWRlIFxkKyBvdXRwdXQgbGlzdGluZyBw YXJ0aXRpb25zIHdpdGggYm91bmQgaW5mbyBidXQKKy0tIG91dHB1dCBjb3VsZCB2YXJ5IGRlcGVu ZGluZyBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggcGFydGl0aW9uIG9pZHMgYXJlCistLSByZXR1cm5l ZC4KK1xkIHBhcnRlZAorRFJPUCBUQUJMRSBwYXJ0ZWQ7CisKKy0tIGxpc3QgcGFydGl0aW9uaW5n IG9uIGFycmF5IHR5cGUgY29sdW1uCitDUkVBVEUgVEFCTEUgYXJybHAgKGEgaW50W10pIFBBUlRJ VElPTiBCWSBMSVNUIChhKSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIElOICgnezF9JywgJ3syfScp KTsKK1xkKyBhcnJscF8xCitEUk9QIFRBQkxFIGFycmxwOworCistLSBwYXJ0aXRpb24gb24gYm9v bGVhbiBjb2x1bW4KK0NSRUFURSBUQUJMRSBib29sc3BhcnQgKGEgYm9vbCkgUEFSVElUSU9OIEJZ IExJU1QgKGEpIENPTkZJR1VSQVRJT04KKyhWQUxVRVMgSU4gKHRydWUpLCAoZmFsc2UpKTsKK1xk KyBib29sc3BhcnQKK0RST1AgVEFCTEUgYm9vbHNwYXJ0OworCistLSB0ZXN0IHVzaW5nIGEgdm9s YXRpbGUgZXhwcmVzc2lvbiBhcyBwYXJ0aXRpb24gYm91bmQKK0NSRUFURSBUQUJMRSB2b2xhdGls ZV9wYXJ0Ym91bmRfdGVzdCAocGFydGtleSB0aW1lc3RhbXApIFBBUlRJVElPTiBCWSBMSVNUIChw YXJ0a2V5KSBDT05GSUdVUkFUSU9OCisoVkFMVUVTIElOICgnMTk3MC0wMS0wMSAwMDowMDowMCsw MCc6OnRpbWVzdGFtcCwgY3VycmVudF90aW1lc3RhbXApLCgnMTk4Mi0wMS0yNSAwMDowMDowMCsw MCc6OnRpbWVzdGFtcCkpOworRFJPUCBUQUJMRSB2b2xhdGlsZV9wYXJ0Ym91bmRfdGVzdDsKKwor LS0gdGVzdHMgb2YgY29sdW1uIGRyb3Agd2l0aCBwYXJ0aXRpb24gdGFibGVzIGFuZCBpbmRleGVz IHVzaW5nCistLSBwcmVkaWNhdGVzIGFuZCBleHByZXNzaW9ucy4KK0NSRUFURSBUQUJMRSBwYXJ0 X2NvbHVtbl9kcm9wICh1c2VsZXNzXzEgaW50LCBpZCBpbnQsIHVzZWxlc3NfMiBpbnQsIGQgaW50 LAorICBiIGludCwgdXNlbGVzc18zIGludCkgUEFSVElUSU9OIEJZIEhBU0ggKGlkKSBDT05GSUdV UkFUSU9OIChNT0RVTFVTIDMpOworQUxURVIgVEFCTEUgcGFydF9jb2x1bW5fZHJvcCBEUk9QIENP TFVNTiB1c2VsZXNzXzE7CitBTFRFUiBUQUJMRSBwYXJ0X2NvbHVtbl9kcm9wIERST1AgQ09MVU1O IHVzZWxlc3NfMjsKK0FMVEVSIFRBQkxFIHBhcnRfY29sdW1uX2Ryb3AgRFJPUCBDT0xVTU4gdXNl bGVzc18zOworQ1JFQVRFIElOREVYIHBhcnRfY29sdW1uX2Ryb3BfYl9wcmVkIE9OIHBhcnRfY29s dW1uX2Ryb3AoYikgV0hFUkUgYiA9IDE7CitDUkVBVEUgSU5ERVggcGFydF9jb2x1bW5fZHJvcF9i X2V4cHIgT04gcGFydF9jb2x1bW5fZHJvcCgoYiA9IDEpKTsKK0NSRUFURSBJTkRFWCBwYXJ0X2Nv bHVtbl9kcm9wX2RfcHJlZCBPTiBwYXJ0X2NvbHVtbl9kcm9wKGQpIFdIRVJFIGQgPSAyOworQ1JF QVRFIElOREVYIHBhcnRfY29sdW1uX2Ryb3BfZF9leHByIE9OIHBhcnRfY29sdW1uX2Ryb3AoKGQg PSAyKSk7CitDUkVBVEUgSU5ERVggcGFydF9jb2x1bW5fZHJvcF9kXzFfcHJlZCBPTiBwYXJ0X2Nv bHVtbl9kcm9wXzEoZCkgV0hFUkUgZCA9IDI7CitDUkVBVEUgSU5ERVggcGFydF9jb2x1bW5fZHJv cF9kXzFfZXhwciBPTiBwYXJ0X2NvbHVtbl9kcm9wXzEoKGQgPSAyKSk7CisKK1xkIHBhcnRfY29s dW1uX2Ryb3AKK1xkIHBhcnRfY29sdW1uX2Ryb3BfMQorXGQgcGFydF9jb2x1bW5fZHJvcF8yCitc ZCBwYXJ0X2NvbHVtbl9kcm9wXzMKK0RST1AgVEFCTEUgcGFydF9jb2x1bW5fZHJvcDsKLS0gCjIu MzQuMQoK --0000000000005eb4c60600af9570--