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 1wcJiZ-003Fy4-1A for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Jun 2026 09:16:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wcJiY-0003c8-0p for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Jun 2026 09:16:22 +0000 Received: from makus.postgresql.org ([72.32.157.229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wcJiX-0003bm-0X for pgsql-hackers@lists.postgresql.org; Wed, 24 Jun 2026 09:16:21 +0000 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wcJiU-00000001tYU-1oaJ for pgsql-hackers@lists.postgresql.org; Wed, 24 Jun 2026 09:16:19 +0000 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-c074142cf6dso271178566b.0 for ; Wed, 24 Jun 2026 02:16:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782292576; cv=none; d=google.com; s=arc-20260327; b=qSYeDJfFEyKBMyuRCflEvCMAsSkvLytcbPr+oF+y7/CmdvcseZrOAg/KVIhMG/Lr14 R6r6OYjrlBWRUE9ZPEcnWmFkW6oh4RSVhkYXXLmzjNR798PPVjfimBmyL5vF9GHV2nfU 0lGqsmASm/knDuXDQ69PonvWnFeZp1zwBsjbfVcpfcyIccV1DSq+USruVkWLLFqgINrF WH53rUIssFvt31f2KoLh6Cyl7YO8gWeAd85y2WbqggYRZ8/aw8K+2aWV3ARqjb6s5K+/ 1pBqdYF/FZqYV6Au3/lDuyzUUiPSbynmyucRS13Sa8xRKv9dPVKRtXTROXhuQhoy3VB9 TcRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Qu6Q1LVekBL/bmlaKfdJjOsVkJlHfZD2C0OtGpQJPm8=; fh=jA1y0o48KsEr1ncbKeaqgkONBUmAh+4Dc8UAqTSPpFs=; b=VEmWV28SUlAMPXtxHxkCtJfG0tmO1vbLVwW1Bzp/4XD7mpGDykOi7lNBoK1ThSkAfM AYyNB0L1abGD/B+0XyBqv3HjyvUWg2InDiUugQjMM2833jXNTitCnVuRjzpwbaBKMAOX 0is6qsC3Q102dERxu11MmaOPTsz+JRMa2KLTYEJBm1QTzH5DGJsaDJ40cH2jHcaYBjAf 0mIqiutENR9Nk6RQrzc2Wx0+8cAGnWPsV+o/jP3pNcUnRuxF+fUCpyaSWTcvLVwS8qlq Ow+1/uOXvS89gdhdMsPF9FwqMI81XAxjD+sGT2N/CEOSYQTJpL6GBT9exhywwVwedEVS xYgQ==; 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=1782292576; x=1782897376; 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=Qu6Q1LVekBL/bmlaKfdJjOsVkJlHfZD2C0OtGpQJPm8=; b=Ouv1ODkIVM9Mo/jtOP02/djqI0VQjxs9rpXsMSiQSxQazP4yCjjy14NHj7uQnjwJTO gJUhRr38FRMsw05eENGMOay6I/UFOH6TwybhhnSZhfrwIHZ1QgFN6dmFmlv4o9fpvbYW sOYtLdpuiiqe2/5U4nHymvQ4w7RwwH/nhsB4KMYkOFlj6vQXmPCSqBmFtRdsDeT1mOCA zdJ/vmgRpPXehi+oqsRqtMPFvvzCCEkZUyj0QsXEx6M2tgYkPDgVSDsvx/hizeN0oVtN 9XHMyACHV0/UKJSuPuKi0VjcDUTGGpr5t/ENJCuffvU7DEM0f/UbXDBv/U0ubopivUjH yEEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782292576; x=1782897376; 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=Qu6Q1LVekBL/bmlaKfdJjOsVkJlHfZD2C0OtGpQJPm8=; b=UYuaKg3df6P4nM6Dzeda322Y60SKfYa0IO1ID30rIcpQsXtsiH/KyrNKFt7lH9Rm3r SEHgmgAI7kPsjQn/u/4W/kapML3c86LNArNXfB7X7XGGD5X1rbUlpOCfngv3xxBB2GqM yzvnVHgKFKfaOJ07/awFIKyBFGlRP0DJiH1kdRvEgFNOBLbz9KCwKNQPPe7yP9jBmv1J PETYEZkz+HKqB7crPBXg7oMxz9RbMqMi9NXPuIV6JsV9+FQ0JnFzTYkUYG7673adHeRx V3FQMScIsJhcnRuUA3kx2rXGd4OEg3h8fUok9T3iMHvWu7lCOkdd/DnDFi17aL8Echf2 rQ8w== X-Gm-Message-State: AOJu0YxnO58C+k7XAXumFaoVlibLH/gTeCXAvz78/C5z6Vlj3l+8azH1 jT9wkTf7dj41DH2SW/DBrm0TipC7p+dC4NBJu2dPsZDYINYX9tYgMNF6pHFjFft3Kfafiuo4kaG sgzEV+8EDFGiiiYA15/aHJWyBAThWYLyteg1HXVNf X-Gm-Gg: AfdE7ckdj5yy32wkoyTZkVrTCKi10n1q4sNxii3Zo/QfICURVENc8TwaXt90AbbnQnM xrnEnLecCCS1cZf6SLYwCnmq9cAM9QG0pj8MFDXYbL/NAEitzVRL7My7RhrOXA0P3rPiWssBg0Q uvmN3mnav6YP95hNn1vh3g90WYopSKFjF+mo5GMTy/Ij68vPaJL0wUzfWwef2TaAMsPqpNer5Wz T+aDUYcqq/D/wkHoBvBecMAp9w44XYi0Mu/r8vh5X9dybGp+3EX2hlGNv6VQ25lbqPojo1944o= X-Received: by 2002:a17:907:b805:b0:c10:10c9:6d8c with SMTP id a640c23a62f3a-c103139a5a7mr379885766b.28.1782292576294; Wed, 24 Jun 2026 02:16:16 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Wed, 24 Jun 2026 14:46:03 +0530 X-Gm-Features: AVVi8CcQef8BlWHD_Fa92Rbw2NrQtGZeF89T0EC3hew4wQ3gs57rx9EDpyKd86Q 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="000000000000e604ae0654fc5315" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e604ae0654fc5315 Content-Type: multipart/alternative; boundary="000000000000e604ac0654fc5313" --000000000000e604ac0654fc5313 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jun 24, 2026 at 1:35=E2=80=AFAM Zsolt Parragi wrote: > The new design is definitely an improvement as a more generic > interface. I'm unsure about the "include" wording, to me that suggest > "also includes", while the actual behavior is "only includes". To me > it would be a bit surprising pg_get_table_ddl including something not > including the basic create table statement. > > I also found a few issues with include in v10. > > Include check doesn't seem to work: > > CREATE TABLE t ( > id int PRIMARY KEY, > qty int CHECK (qty > 0), > CONSTRAINT t_id_pos CHECK (id > 0) > ); > > SELECT * FROM pg_get_table_ddl('t', 'include', 'check'); -- empty? > > The include partitions clause also doesn't work: > > CREATE TABLE p (id int, val text) PARTITION BY RANGE (id); > CREATE TABLE p_a PARTITION OF p FOR VALUES FROM (0) TO (100); > CREATE TABLE p_b PARTITION OF p FOR VALUES FROM (100) TO (200); > > SELECT * FROM pg_get_table_ddl('p','include','partitions'); -- empty > > There's also an issue with replica identity non primary key unique indexe= s: > > CREATE TABLE t2 (a int NOT NULL UNIQUE, b int); > ALTER TABLE t2 REPLICA IDENTITY USING INDEX t2_a_key; > SELECT * FROM pg_get_table_ddl('t2','exclude','unique'); > -- ALTER TABLE public.t2 REPLICA IDENTITY USING INDEX t2_a_key; > -- but there's no such index > > Thanks for the review. In the attached patch, I=E2=80=99ve renamed *include/exclude* to *only* and *except*. If you have any other suggestions or a better name, please let me know. Fixed all the above issues as well. The semantics remain unchanged: 1) only =3D> 'kind1,kind2,...' =E2=80=94 emits only the listed kinds. 2) except =3D> 'kind1,kind2,...' =E2=80=94 emits everything except the li= sted kinds. 3) Setting both raises an error; setting neither emits all kinds (the default). I also dropped the trailing "s" from the multi-item kind names so the vocabulary reads naturally with only/except (e.g., index, foreign_key, rule, trigger, policy, partition). statistics and rls retain their existing spellings. The documentation, regression tests, and func-info.sgml have all been updated accordingly. The v11 patch is now ready for review and testing. --000000000000e604ac0654fc5313 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Wed, Jun 24,= 2026 at 1:35=E2=80=AFAM Zsolt Parragi <zsolt.parragi@percona.com> wrote:
The new design is definitely an impro= vement as a more generic
interface. I'm unsure about the "include" wording, to me that= suggest
"also includes", while the actual behavior is "only includes= ". To me
it would be a bit surprising pg_get_table_ddl including something not
including the basic create table statement.

I also found a few issues with include in v10.

Include check doesn't seem to work:

CREATE TABLE t (
=C2=A0 =C2=A0 id int PRIMARY KEY,
=C2=A0 =C2=A0 qty int CHECK (qty > 0),
=C2=A0 =C2=A0 CONSTRAINT t_id_pos CHECK (id > 0)
);

SELECT * FROM pg_get_table_ddl('t', 'include', 'check&#= 39;); -- empty?

The include partitions clause also doesn't work:

CREATE TABLE p (id int, val text) PARTITION BY RANGE (id);
CREATE TABLE p_a PARTITION OF p FOR VALUES FROM (0) TO (100);
CREATE TABLE p_b PARTITION OF p FOR VALUES FROM (100) TO (200);

SELECT * FROM pg_get_table_ddl('p','include','partition= s'); -- empty

There's also an issue with replica identity non primary key unique inde= xes:

CREATE TABLE t2 (a int NOT NULL UNIQUE, b int);
ALTER TABLE t2 REPLICA IDENTITY USING INDEX t2_a_key;
SELECT * FROM pg_get_table_ddl('t2','exclude','unique&#= 39;);
-- ALTER TABLE public.t2 REPLICA IDENTITY USING INDEX t2_a_key;
-- but there's no such index

Thanks f= or the review. In the attached patch, I=E2=80=99ve renamed include/exclu= de to only and except. If you have any other suggestions = or a better name, please let me know.=C2=A0
Fixed all the above issues as well.

The semantic= s remain unchanged:
=C2=A0 1) only =3D> 'kind1,kind2,...' =E2= =80=94 emits only the listed kinds.
=C2=A0 2) except =3D> 'kind1,= kind2,...' =E2=80=94 emits everything except the listed kinds.
=C2= =A0 3) Setting both raises an error; setting neither emits all kinds (the d= efault).

I also dropped the trailing "s" from the multi-it= em kind names so the vocabulary reads naturally with only/except (e.g., ind= ex, foreign_key, rule, trigger, policy, partition). statistics and rls reta= in their existing spellings. The documentation, regression tests, and func-= info.sgml have all been updated accordingly.

The v11 patch is now re= ady for review and testing.
--000000000000e604ac0654fc5313-- --000000000000e604ae0654fc5315 Content-Type: application/octet-stream; name="v11-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v11-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqrutceq0 RnJvbSBiMjkxYmEwMTMxMWYzNWI4OWMwZjJiODYwMzE1NjEyZDdiNzRlNzdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxMV0gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM LCBhbmQgcGVyLWNvbHVtbiBhdHRvcHRpb25zIGVtaXR0ZWQgYXMKQUxURVIgQ09MVU1OIFNFVCAo Li4uKS4KClN1cHBvcnRlZCB0YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRT LCBQQVJUSVRJT04gQlkgKFJBTkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBP RiBwYXJlbnQgRk9SIFZBTFVFUyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVG QVVMVCksIFVTSU5HIHRhYmxlIGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJM RVNQQUNFLCBhbmQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZQpDUkVBVEUgVEFCTEUg Ym9keS4KClN1cHBvcnRlZCBzdWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBo ZWxwZXJzIGZyb20KcnVsZXV0aWxzLmMpOiBpbmRleGVzIHZpYSBwZ19nZXRfaW5kZXhkZWZfc3Ry aW5nLCBjb25zdHJhaW50cwooUFJJTUFSWSBLRVksIFVOSVFVRSwgRk9SRUlHTiBLRVksIEVYQ0xV REUsIG5hbWVkIE5PVCBOVUxMKSB2aWEKcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZCwgcnVs ZXMgdmlhIHBnX2dldF9ydWxlZGVmLCBleHRlbmRlZApzdGF0aXN0aWNzIHZpYSBwZ19nZXRfc3Rh dGlzdGljc29iamRlZl9zdHJpbmcsIFJFUExJQ0EgSURFTlRJVFkKTk9USElORy9GVUxML1VTSU5H IElOREVYLCBBTFRFUiBUQUJMRSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLAphbmQg Y2hpbGQtbG9jYWwgREVGQVVMVCBvdmVycmlkZXMgb24gaW5oZXJpdGFuY2UvcGFydGl0aW9uIGNo aWxkcmVuLgpEREwgZm9yIHBhcnRpdGlvbiBjaGlsZHJlbiBvZiBhIHBhcnRpdGlvbmVkLXRhYmxl IHBhcmVudCBpcyBhcHBlbmRlZAphZnRlciB0aGUgcGFyZW50IGJ5IGRlZmF1bHQuCgpPcHRpb25z IGFyZSBwYXNzZWQgYXMgdmFyaWFkaWMgbmFtZS92YWx1ZSBwYWlycy4gIEZvcm1hdHRpbmcgb3B0 aW9ucwphcmUgcHJldHR5IChib29sZWFuKSwgb3duZXIgKGJvb2xlYW4sIGNvbnRyb2xzIHRoZQpB TFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gbGluZSksIHRhYmxlc3BhY2UgKGJvb2xlYW4sIGNvbnRy b2xzIHRoZQpUQUJMRVNQQUNFIGNsYXVzZSksIGFuZCBzY2hlbWFfcXVhbGlmaWVkIChib29sZWFu LCBjb250cm9scyB3aGV0aGVyCnRoZSB0YXJnZXQgdGFibGUgYW5kIHNhbWUtc2NoZW1hIHNpYmxp bmcgcmVmZXJlbmNlcyBhcmUgZW1pdHRlZCB3aXRoCnRoZWlyIHNjaGVtYSBwcmVmaXgpLiAgT2Jq ZWN0LWNsYXNzIGZpbHRlcmluZyBpcyBleHByZXNzZWQgdGhyb3VnaCB0d28KbXV0dWFsbHktZXhj bHVzaXZlIG9wdGlvbnMsIGluY2x1ZGUgYW5kIGV4Y2x1ZGUsIGVhY2ggdGFraW5nIGEKY29tbWEt c2VwYXJhdGVkIGxpc3QgZHJhd24gZnJvbSB0aGUga2luZCB2b2NhYnVsYXJ5Cnt0YWJsZSwgaW5k ZXhlcywgcHJpbWFyeV9rZXksIHVuaXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5cywgZXhjbHVzaW9u LApydWxlcywgc3RhdGlzdGljcywgdHJpZ2dlcnMsIHBvbGljaWVzLCBybHMsIHJlcGxpY2FfaWRl bnRpdHksCnBhcnRpdGlvbnN9LiAgV2hlbiBpbmNsdWRlIGlzIHNldCwgb25seSB0aGUgbGlzdGVk IGtpbmRzIGFyZSBlbWl0dGVkOwp3aGVuIGV4Y2x1ZGUgaXMgc2V0LCBldmVyeSBraW5kIGV4Y2Vw dCB0aGUgbGlzdGVkIG9uZXMgaXMgZW1pdHRlZDsKd2hlbiBuZWl0aGVyIGlzIHNldCwgZXZlcnkg a2luZCBpcyBlbWl0dGVkLiAgVW5rbm93biBraW5kIG5hbWVzIHJhaXNlCmFuIGVycm9yIGF0IHBh cnNlIHRpbWUuICBOT1QgTlVMTCBpcyBkZWxpYmVyYXRlbHkgbm90IHBhcnQgb2YgdGhlCnZvY2Fi dWxhcnkgLSBpdCBpcyBhbHdheXMgZW1pdHRlZCB0byBwcmV2ZW50IHByb2R1Y2luZyBzY2hlbWFz IHRoYXQKc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQgaGF2ZSByZWplY3Rl ZC4gIEV4Y2x1ZGluZwpwcmltYXJ5X2tleSBvbiBhIHRhYmxlIHdob3NlIFJFUExJQ0EgSURFTlRJ VFkgaXMgVVNJTkcgSU5ERVggb2YgdGhlCnByaW1hcnkga2V5IGlzIHJlamVjdGVkIHVubGVzcyBy ZXBsaWNhX2lkZW50aXR5IGlzIGFsc28gZXhjbHVkZWQsIHNvCnRoZSBlbWl0dGVkIERETCBuZXZl ciByZWZlcmVuY2VzIGFuIGluZGV4IGl0IGp1c3QgZHJvcHBlZC4KCkRlZmF1bHQgb21pc3Npb24g Y29udmVudGlvbjogZXZlcnkgb3B0aW9uYWwgY2xhdXNlIGlzIGRyb3BwZWQgd2hlbiBpdHMKdmFs dWUgZXF1YWxzIHdoYXQgdGhlIHN5c3RlbSB3b3VsZCByZWFwcGx5IG9uIHJvdW5kLXRyaXAsIGlu Y2x1ZGluZwp0eXBlLWRlZmF1bHQgQ09MTEFURSwgcGVyLXR5cGUgU1RPUkFHRSwgdGhlIGF1dG8t Z2VuZXJhdGVkIGlkZW50aXR5CnNlcXVlbmNlIG5hbWUgYW5kIHBhcmFtZXRlciBkZWZhdWx0cywg aGVhcCBhY2Nlc3MgbWV0aG9kLCBkZWZhdWx0ClJFUExJQ0EgSURFTlRJVFksIGRpc2FibGVkIFJM UyB0b2dnbGVzLCBlbXB0eSByZWxvcHRpb25zLCBhbmQgdGhlCmRlZmF1bHQgdGFibGVzcGFjZS4K CkF1dGhvcjogQWtzaGF5IEpvc2hpIDxha3NoYXkuam9zaGlAZW50ZXJwcmlzZWRiLmNvbT4KUmV2 aWV3ZWQtYnk6IE1hcmNvcyBQZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5 OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpSZXZpZXdlZC1ieTog S3lvdGFybyBIb3JpZ3VjaGkgPGhvcmlreW90YS5udHRAZ21haWwuY29tPgpSZXZpZXdlZC1ieTog Q2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNvbT4KLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy9m dW5jLWluZm8uc2dtbCAgICAgICAgICAgICAgfCAgMTI0ICsKIHNyYy9iYWNrZW5kL2NhdGFsb2cv cGdfaW5oZXJpdHMuYyAgICAgICAgICAgICB8ICAgOTMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICAzMCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2RkbHV0aWxzLmMgICAgICAgICAgICAgIHwgMjA3MSArKysrKysrKysrKysrKysrKwogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgICA3ICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oICAgICAgICAgICAgICB8ICAgIDMgKwogLi4uL3JlZ3Jl c3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQgICAgIHwgMTIyMiArKysrKysrKysrCiBz cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbCAgICAgfCAgNzE3ICsrKysr KwogMTAgZmlsZXMgY2hhbmdlZCwgNDI2NyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxl X2RkbC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRf dGFibGVfZGRsLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5z Z21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggMzRmNDAxOTY5MGYu LjRlZGFjZjRiZDg3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzk0Nyw2ICszOTQ3 LDEzMCBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0 Z3Jlc30KICAgICAgICAgPGxpdGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4uCiAgICAgICAgPC9w YXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJv bGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAg ICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF90YWJsZV9kZGw8L3ByaW1h cnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfZ2V0X3RhYmxl X2RkbDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj50YWJsZTwvcGFyYW1ldGVyPiA8 dHlwZT5yZWdjbGFzczwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPGxpdGVyYWw+VkFSSUFE SUM8L2xpdGVyYWw+IDxwYXJhbWV0ZXI+b3B0aW9uczwvcGFyYW1ldGVyPgorICAgICAgICA8dHlw ZT50ZXh0W108L3R5cGU+IDwvb3B0aW9uYWw+ICkKKyAgICAgICAgPHJldHVybnZhbHVlPnNldG9m IHRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IHN0YXRl bWVudCBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0 YWJsZSwgZm9sbG93ZWQgYnkgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFPC9jb21t YW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAgICAgPGNvbW1hbmQ+ Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQgPGNvbW1hbmQ+Q1JFQVRFIFNUQVRJU1RJQ1M8L2Nv bW1hbmQ+CisgICAgICAgIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlY3JlYXRlIHRoZSB0YWJsZSdz IGNvbHVtbnMsIGNvbnN0cmFpbnRzLAorICAgICAgICBpbmRleGVzLCBydWxlcywgZXh0ZW5kZWQg c3RhdGlzdGljcywgYW5kIHJvdy1sZXZlbCBzZWN1cml0eSBmbGFncy4KKyAgICAgICAgSW5oZXJp dGVkIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkIGJ5IHRoZSBwYXJlbnQgdGFi bGUncworICAgICAgICBEREwgYW5kIGFyZSBub3QgZHVwbGljYXRlZCBvbiBpbmhlcml0YW5jZSBj aGlsZHJlbiBvciBwYXJ0aXRpb25zLgorICAgICAgICBFYWNoIHN0YXRlbWVudCBpcyByZXR1cm5l ZCBhcyBhIHNlcGFyYXRlIHJvdy4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBz dXBwb3J0ZWQ6CisgICAgICAgIDxsaXRlcmFsPnByZXR0eTwvbGl0ZXJhbD4gKGJvb2xlYW4pIGZv ciBmb3JtYXR0ZWQgb3V0cHV0LAorICAgICAgICA8bGl0ZXJhbD5vd25lcjwvbGl0ZXJhbD4gKGJv b2xlYW4pIHRvIGluY2x1ZGUgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFIC4uLiBP V05FUiBUTzwvY29tbWFuZD4gc3RhdGVtZW50LAorICAgICAgICA8bGl0ZXJhbD50YWJsZXNwYWNl PC9saXRlcmFsPiAoYm9vbGVhbikgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgPGxpdGVyYWw+VEFC TEVTUEFDRTwvbGl0ZXJhbD4gY2xhdXNlIG9uIHRoZQorICAgICAgICA8Y29tbWFuZD5DUkVBVEUg VEFCTEU8L2NvbW1hbmQ+IHN0YXRlbWVudCwgYW5kIHRoZQorICAgICAgICA8bGl0ZXJhbD5vbmx5 PC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ZXhjZXB0PC9saXRlcmFsPgorICAgICAgICBvcHRpb25z IGRlc2NyaWJlZCBiZWxvdyBmb3IgZmlsdGVyaW5nIHdoaWNoIG9iamVjdCBjbGFzc2VzIGFyZQor ICAgICAgICBlbWl0dGVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAg VGhlIDxsaXRlcmFsPm9ubHk8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5leGNlcHQ8L2xpdGVyYWw+ CisgICAgICAgIG9wdGlvbnMgZWFjaCB0YWtlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb2Jq ZWN0LWNsYXNzIGtpbmQKKyAgICAgICAgbmFtZXMgYW5kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUg KHNwZWNpZnlpbmcgYm90aCByYWlzZXMgYW4KKyAgICAgICAgZXJyb3IpLiAgV2hlbiA8bGl0ZXJh bD5vbmx5PC9saXRlcmFsPiBpcyBzZXQsIG9ubHkgdGhlCisgICAgICAgIGxpc3RlZCBraW5kcyBh cmUgZW1pdHRlZDsgd2hlbiA8bGl0ZXJhbD5leGNlcHQ8L2xpdGVyYWw+IGlzCisgICAgICAgIHNl dCwgZXZlcnkga2luZCA8ZW1waGFzaXM+ZXhjZXB0PC9lbXBoYXNpcz4gdGhlIGxpc3RlZCBvbmVz IGlzCisgICAgICAgIGVtaXR0ZWQuICBXaGVuIG5laXRoZXIgaXMgc2V0ICh0aGUgZGVmYXVsdCks IGV2ZXJ5IGtpbmQgaXMKKyAgICAgICAgZW1pdHRlZC4gIFdoaXRlc3BhY2UgYXJvdW5kIGVhY2gg ZW50cnkgaXMgaWdub3JlZCBhbmQgbWF0Y2hpbmcKKyAgICAgICAgaXMgY2FzZS1pbnNlbnNpdGl2 ZTsgYW4gdW5yZWNvZ25pemVkIGtpbmQgbmFtZSByYWlzZXMgYW4gZXJyb3IuCisgICAgICAgIFRo ZSBraW5kIHZvY2FidWxhcnkgaXMKKyAgICAgICAgPGxpdGVyYWw+dGFibGU8L2xpdGVyYWw+LAor ICAgICAgICA8bGl0ZXJhbD5pbmRleDwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnByaW1h cnlfa2V5PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dW5pcXVlPC9saXRlcmFsPiwKKyAg ICAgICAgPGxpdGVyYWw+Y2hlY2s8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5mb3JlaWdu X2tleTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmV4Y2x1c2lvbjwvbGl0ZXJhbD4sCisg ICAgICAgIDxsaXRlcmFsPnJ1bGU8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5zdGF0aXN0 aWNzPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dHJpZ2dlcjwvbGl0ZXJhbD4sCisgICAg ICAgIDxsaXRlcmFsPnBvbGljeTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnJsczwvbGl0 ZXJhbD4gKHRoZQorICAgICAgICA8Y29tbWFuZD5FTkFCTEU8L2NvbW1hbmQ+Lzxjb21tYW5kPkZP UkNFIFJPVyBMRVZFTCBTRUNVUklUWTwvY29tbWFuZD4KKyAgICAgICAgdG9nZ2xlcyksCisgICAg ICAgIDxsaXRlcmFsPnJlcGxpY2FfaWRlbnRpdHk8L2xpdGVyYWw+LCBhbmQKKyAgICAgICAgPGxp dGVyYWw+cGFydGl0aW9uPC9saXRlcmFsPiAodGhlIERETCBmb3IgZWFjaCBkaXJlY3QKKyAgICAg ICAgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50KS4gIFRoZQor ICAgICAgICA8bGl0ZXJhbD50YWJsZTwvbGl0ZXJhbD4ga2luZCBncm91cHMgdGhlCisgICAgICAg IDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gc3RhdGVtZW50IHRvZ2V0aGVyIHdpdGgg dGhlCisgICAgICAgIHJlbGF0ZWQgcGVyLXRhYmxlIDxjb21tYW5kPkFMVEVSIFRBQkxFPC9jb21t YW5kPiBwYXNzZXM6CisgICAgICAgIDxjb21tYW5kPk9XTkVSIFRPPC9jb21tYW5kPiwgY2hpbGQt ZGVmYXVsdAorICAgICAgICA8Y29tbWFuZD5TRVQgREVGQVVMVDwvY29tbWFuZD4sIGFuZCBwZXIt Y29sdW1uCisgICAgICAgIDxjb21tYW5kPlNFVCAoPHJlcGxhY2VhYmxlPmF0dG9wdGlvbnM8L3Jl cGxhY2VhYmxlPik8L2NvbW1hbmQ+LgorICAgICAgICA8bGl0ZXJhbD5OT1QgTlVMTDwvbGl0ZXJh bD4gY29uc3RyYWludHMgYXJlIG5vdCBwYXJ0IG9mIHRoZQorICAgICAgICB2b2NhYnVsYXJ5OyB0 aGV5IGFyZSBhbHdheXMgZW1pdHRlZCBhcyBwYXJ0IG9mIHRoZSB0YWJsZSB0bworICAgICAgICBh dm9pZCBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdAorICAgICAgICA8bGl0 ZXJhbD5OVUxMPC9saXRlcmFsPiB2YWx1ZXMgdGhlIHNvdXJjZSB3b3VsZCBoYXZlIHJlamVjdGVk LgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNlY29uZCBwYXNzIG9mIGEgdHdvLXBhc3Mgc2No ZW1hIGNsb25lIHRoYXQKKyAgICAgICAgYWRkcyBjcm9zcy10YWJsZSBmb3JlaWduIGtleXMgYWZ0 ZXIgZGF0YSBoYXMgbG9hZGVkIGNhbiBiZQorICAgICAgICB3cml0dGVuIGFzCisgICAgICAgIDxs aXRlcmFsPm9ubHkgPT4gJ2ZvcmVpZ25fa2V5JzwvbGl0ZXJhbD4sIGFuZCB0aGUKKyAgICAgICAg cHViL3N1Yi1zdHlsZSBjbG9uZSB0aGF0IGtlZXBzIGEgcHJpbWFyeSBrZXkgYnV0IGRyb3BzIGV2 ZXJ5CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnQgY2FuIGJlIHdyaXR0ZW4gYXMKKyAgICAgICAg PGxpdGVyYWw+ZXhjZXB0ID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uJzwv bGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHRo ZSB0YWJsZSBoYXMKKyAgICAgICAgPGxpdGVyYWw+UkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRF WDwvbGl0ZXJhbD4gYW5kIHRoZQorICAgICAgICA8bGl0ZXJhbD5yZXBsaWNhX2lkZW50aXR5PC9s aXRlcmFsPiBraW5kIGlzIGluIHRoZSBhY3RpdmUKKyAgICAgICAgZmlsdGVyLCB0aGUga2luZCB0 aGF0IGVtaXRzIHRoZSByZWZlcmVuY2VkIGluZGV4CisgICAgICAgICg8bGl0ZXJhbD5wcmltYXJ5 X2tleTwvbGl0ZXJhbD4sIDxsaXRlcmFsPnVuaXF1ZTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRl cmFsPmV4Y2x1c2lvbjwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPmluZGV4PC9saXRlcmFsPikgbXVz dAorICAgICAgICBhbHNvIGJlIGluIHRoZSBmaWx0ZXIuICBPdGhlcndpc2UgdGhlIGVtaXR0ZWQK KyAgICAgICAgPGNvbW1hbmQ+QUxURVIgVEFCTEUgLi4uIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcg SU5ERVg8L2NvbW1hbmQ+CisgICAgICAgIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleCB0aGUgc2Ft ZSBEREwgbmV2ZXIgcHJvZHVjZWQsIGFuZCB0aGUKKyAgICAgICAgZnVuY3Rpb24gcmVwb3J0cyBh biBlcnJvciBiZWZvcmUgZW1pdHRpbmcgYW55IHN0YXRlbWVudHMuCisgICAgICAgPC9wYXJhPgor ICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGxpdGVyYWw+c2NoZW1hX3F1YWxpZmllZDwvbGl0 ZXJhbD4gb3B0aW9uIChib29sZWFuLCBkZWZhdWx0CisgICAgICAgIDxsaXRlcmFsPnRydWU8L2xp dGVyYWw+KSBjb250cm9scyB3aGV0aGVyIHRoZSB0YXJnZXQgdGFibGUncyBvd24KKyAgICAgICAg c2NoZW1hIGlzIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgRERMLiAgV2hlbiBzZXQgdG8KKyAg ICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGUgdGFibGUgbmFtZSBpcyBlbWl0dGVk IHVucXVhbGlmaWVkCisgICAgICAgIGluIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1h bmQ+IGFuZCBldmVyeSBzdWJzZXF1ZW50CisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRBQkxFPC9j b21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAgICAgPGNvbW1h bmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQKKyAgICAgICAgPGNvbW1hbmQ+Q1JFQVRFIFNU QVRJU1RJQ1M8L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFJlZmVyZW5jZXMgdG8KKyAgICAgICAgb2Jq ZWN0cyBpbiB0aGUgc2FtZSBzY2hlbWEgYXMgdGhlIHRhcmdldCB0YWJsZSAoaW5oZXJpdGFuY2UK KyAgICAgICAgcGFyZW50cywgcGFydGl0aW9uIHBhcmVudHMsIGlkZW50aXR5IHNlcXVlbmNlcywg YW5kIGFueQorICAgICAgICBzYW1lLXNjaGVtYSBvYmplY3QgdGhlIGRlcGFyc2UgaGVscGVycyBo YXBwZW4gdG8gbWVudGlvbikgYXJlCisgICAgICAgIGFsc28gZW1pdHRlZCB1bnF1YWxpZmllZCwg c28gdGhlIHNjcmlwdCBjYW4gYmUgcmVwbGF5ZWQgdW5kZXIgYQorICAgICAgICBkaWZmZXJlbnQg PHZhcm5hbWU+c2VhcmNoX3BhdGg8L3Zhcm5hbWU+IHRvIHJlY3JlYXRlIHRoZSB0YWJsZQorICAg ICAgICBpbiBhbm90aGVyIHNjaGVtYS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2VzIChmb3IgZXhh bXBsZSBhCisgICAgICAgIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEp IHJlbWFpbiBxdWFsaWZpZWQgZm9yCisgICAgICAgIGNvcnJlY3RuZXNzLgorICAgICAgIDwvcGFy YT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQWxsIHRocmVlIGZvcm1zIG9mIDxjb21tYW5kPkNS RUFURSBUQUJMRTwvY29tbWFuZD4gYXJlIHN1cHBvcnRlZDoKKyAgICAgICAgdGhlIG9yZGluYXJ5 IGNvbHVtbi1saXN0IGZvcm0sIHRoZSB0eXBlZC10YWJsZSBmb3JtCisgICAgICAgICg8bGl0ZXJh bD5PRiA8cmVwbGFjZWFibGU+dHlwZV9uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVyYWw+LCB3aXRo CisgICAgICAgIHBlci1jb2x1bW4gPGxpdGVyYWw+V0lUSCBPUFRJT05TPC9saXRlcmFsPiBvdmVy cmlkZXMgZm9yIGxvY2FsCisgICAgICAgIGRlZmF1bHRzLCA8bGl0ZXJhbD5OT1QgTlVMTDwvbGl0 ZXJhbD4sIGFuZCA8bGl0ZXJhbD5DSEVDSzwvbGl0ZXJhbD4KKyAgICAgICAgY29uc3RyYWludHMp LCBhbmQgdGhlIDxsaXRlcmFsPlBBUlRJVElPTiBPRjwvbGl0ZXJhbD4gZm9ybS4KKyAgICAgICAg PGxpdGVyYWw+VEVNUE9SQVJZPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+VU5MT0dHRUQ8L2xpdGVy YWw+CisgICAgICAgIHBlcnNpc3RlbmNlIG1vZGVzIGFyZSBlbWl0dGVkIGZyb20KKyAgICAgICAg PHN0cnVjdGZpZWxkPnJlbHBlcnNpc3RlbmNlPC9zdHJ1Y3RmaWVsZD4uICBGb3IgdGVtcG9yYXJ5 IHRhYmxlcworICAgICAgICByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IHNlc3Npb24sIHRoZQor ICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgREVMRVRFIFJPV1M8L2xpdGVyYWw+IGFuZAorICAg ICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgRFJPUDwvbGl0ZXJhbD4gY2xhdXNlcyBhcmUgZW1pdHRl ZDsgdGhlIGRlZmF1bHQKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIFBSRVNFUlZFIFJPV1M8 L2xpdGVyYWw+IGlzIG9taXR0ZWQuCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jv dz4KICAgICAgPC90Ym9keT4KICAgICA8L3Rncm91cD4KICAgIDwvdGFibGU+CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3BnX2luaGVyaXRzLmMKaW5kZXggNGI5ODAyYWFmY2MuLjg5NzE1MWJkNmQxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19pbmhlcml0cy5jCkBAIC0yMzYsNiArMjM2LDk5IEBAIGZpbmRfaW5oZXJpdGFuY2Vf Y2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNoZWQsCiB9 CiAKIAorLyoKKyAqIGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cworICoKKyAqIFJldHVybnMgYSBs aXN0IGNvbnRhaW5pbmcgdGhlIE9JRHMgb2YgYWxsIHJlbGF0aW9ucyB0aGF0IHRoZSByZWxhdGlv biB3aXRoCisgKiBPSUQgJ3JlbGlkJyBpbmhlcml0cyAqZGlyZWN0bHkqIGZyb20sIGluIGluaHNl cW5vIG9yZGVyICh0aGUgb3JkZXIgaW4gd2hpY2gKKyAqIHRoZXkgc2hvdWxkIGFwcGVhciBpbiBh biBJTkhFUklUUyBjbGF1c2UpLgorICoKKyAqIFRoZSBzcGVjaWZpZWQgbG9jayB0eXBlIGlzIGFj cXVpcmVkIG9uIGVhY2ggcGFyZW50IHJlbGF0aW9uIChidXQgbm90IG9uIHRoZQorICogZ2l2ZW4g cmVsOyBjYWxsZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBsb2NrZWQgaXQpLiAgSWYgbG9ja21vZGUg aXMgTm9Mb2NrCisgKiB0aGVuIG5vIGxvY2tzIGFyZSBhY3F1aXJlZCwgYnV0IGNhbGxlciBtdXN0 IGJld2FyZSBvZiByYWNlIGNvbmRpdGlvbnMKKyAqIGFnYWluc3QgcG9zc2libGUgRFJPUHMgb2Yg cGFyZW50IHJlbGF0aW9ucy4KKyAqCisgKiBQYXJ0aXRpb24gY2hpbGRyZW4gYWxzbyBoYXZlIGEg cGdfaW5oZXJpdHMgZW50cnkgcG9pbnRpbmcgdG8gdGhlCisgKiBwYXJ0aXRpb25lZCBwYXJlbnQ7 IGNhbGxlcnMgdGhhdCBkaXN0aW5ndWlzaCBJTkhFUklUUyBmcm9tIFBBUlRJVElPTiBPRgorICog bXVzdCBjaGVjayByZWxpc3BhcnRpdGlvbiB0aGVtc2VsdmVzLgorICovCitMaXN0ICoKK2ZpbmRf aW5oZXJpdGFuY2VfcGFyZW50cyhPaWQgcmVsaWQsIExPQ0tNT0RFIGxvY2ttb2RlKQoreworCUxp c3QJICAgKmxpc3QgPSBOSUw7CisJUmVsYXRpb24JcmVsYXRpb247CisJU3lzU2NhbkRlc2Mgc2Nh bjsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJSGVhcFR1cGxlCWluaGVyaXRzVHVwbGU7CisJT2lk CQkJaW5ocGFyZW50OworCU9pZAkJICAgKm9pZGFycjsKKwlpbnQJCQltYXhvaWRzLAorCQkJCW51 bW9pZHMsCisJCQkJaTsKKworCS8qCisJICogU2NhbiBwZ19pbmhlcml0cyB2aWEgdGhlIChpbmhy ZWxpZCwgaW5oc2Vxbm8pIGluZGV4IHNvIHRoYXQgdGhlIHJvd3MKKwkgKiBjb21lIG91dCBpbiBp bmhzZXFubyBvcmRlciwgd2hpY2ggaXMgdGhlIG9yZGVyIHJlcXVpcmVkIGZvciB0aGUKKwkgKiBJ TkhFUklUUyBjbGF1c2UuCisJICovCisJbWF4b2lkcyA9IDg7CisJb2lkYXJyID0gKE9pZCAqKSBw YWxsb2MobWF4b2lkcyAqIHNpemVvZihPaWQpKTsKKwludW1vaWRzID0gMDsKKworCXJlbGF0aW9u ID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlT Y2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVsaWQsCisJCQkJ QlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ocmVs aWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocmVsYXRpb24sIEluaGVyaXRzUmVs aWRTZXFub0luZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOworCisJd2hpbGUg KChpbmhlcml0c1R1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkgIT0gTlVMTCkKKwl7CisJ CWluaHBhcmVudCA9ICgoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKGluaGVyaXRzVHVwbGUp KS0+aW5ocGFyZW50OworCQlpZiAobnVtb2lkcyA+PSBtYXhvaWRzKQorCQl7CisJCQltYXhvaWRz ICo9IDI7CisJCQlvaWRhcnIgPSAoT2lkICopIHJlcGFsbG9jKG9pZGFyciwgbWF4b2lkcyAqIHNp emVvZihPaWQpKTsKKwkJfQorCQlvaWRhcnJbbnVtb2lkcysrXSA9IGluaHBhcmVudDsKKwl9CisK KwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCisJdGFibGVfY2xvc2UocmVsYXRpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwkvKgorCSAqIEFjcXVpcmUgbG9ja3MgYW5kIGJ1aWxkIHRoZSByZXN1 bHQgbGlzdC4gIFVubGlrZQorCSAqIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4gd2UgZG8gKm5v dCogc29ydCBieSBPSUQ6IGNhbGxlcnMgbmVlZCB0aGUKKwkgKiBzZXFuby1vcmRlcmVkIHRyYXZl cnNhbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtb2lkczsgaSsrKQorCXsKKwkJaW5ocGFy ZW50ID0gb2lkYXJyW2ldOworCisJCWlmIChsb2NrbW9kZSAhPSBOb0xvY2spCisJCXsKKwkJCUxv Y2tSZWxhdGlvbk9pZChpbmhwYXJlbnQsIGxvY2ttb2RlKTsKKworCQkJaWYgKCFTZWFyY2hTeXND YWNoZUV4aXN0czEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKGluaHBhcmVudCkpKQorCQkJewor CQkJCVVubG9ja1JlbGF0aW9uT2lkKGluaHBhcmVudCwgbG9ja21vZGUpOworCQkJCWNvbnRpbnVl OworCQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmRfb2lkKGxpc3QsIGluaHBhcmVudCk7CisJ fQorCisJcGZyZWUob2lkYXJyKTsKKworCXJldHVybiBsaXN0OworfQorCisKIC8qCiAgKiBmaW5k X2FsbF9pbmhlcml0b3JzIC0KICAqCQlSZXR1cm5zIGEgbGlzdCBvZiByZWxhdGlvbiBPSURzIGlu Y2x1ZGluZyB0aGUgZ2l2ZW4gcmVsIHBsdXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXgg MjY1ZGNmZTdmZGEuLmE1ZjQ2NTIyYzMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAt NzM5LDcgKzczOSw2IEBAIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFURXhlY1NldENvbXByZXNzaW9u KFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmNvbHVtbiwgTm9kZSAqbmV3 VmFsdWUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIAogc3RhdGljIHZvaWQgaW5kZXhfY29weV9kYXRh KFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpOwotc3RhdGljIGNvbnN0 IGNoYXIgKnN0b3JhZ2VfbmFtZShjaGFyIGMpOwogCiBzdGF0aWMgdm9pZCBSYW5nZVZhckNhbGxi YWNrRm9yRHJvcFJlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWwsIE9pZCByZWxPaWQsCiAJCQkJ CQkJCQkJCU9pZCBvbGRSZWxPaWQsIHZvaWQgKmFyZyk7CkBAIC0yNTE1LDcgKzI1MTQsNyBAQCB0 cnVuY2F0ZV9jaGVja19hY3Rpdml0eShSZWxhdGlvbiByZWwpCiAgKiBzdG9yYWdlX25hbWUKICAq CSAgcmV0dXJucyB0aGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGEgdHlwc3RvcmFnZS9hdHRzdG9y YWdlIGVudW0gdmFsdWUKICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBz dG9yYWdlX25hbWUoY2hhciBjKQogewogCXN3aXRjaCAoYykKQEAgLTE5NTU4LDYgKzE5NTU3LDMz IEBAIHJlbW92ZV9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKIAl9CiB9CiAKKy8qCisgKiBM b29rIHVwIHRoZSByZWdpc3RlcmVkIE9OIENPTU1JVCBhY3Rpb24gZm9yIGEgcmVsYXRpb24uCisg KgorICogUmV0dXJucyBPTkNPTU1JVF9OT09QIHdoZW4gbm90aGluZyB3YXMgcmVnaXN0ZXJlZCwg d2hpY2ggYWxzbyBjb3ZlcnMKKyAqIHRlbXBvcmFyeSB0YWJsZXMgY3JlYXRlZCB3aXRoIHRoZSBk ZWZhdWx0IE9OIENPTU1JVCBQUkVTRVJWRSBST1dTCisgKiBiZWhhdmlvciAocmVnaXN0ZXJfb25f Y29tbWl0X2FjdGlvbigpIHNraXBzIHRob3NlLCBzaW5jZSBubyBhY3Rpb24gaXMKKyAqIG5lZWRl ZCBhdCBjb21taXQpLiAgRW50cmllcyBtYXJrZWQgZm9yIGRlbGV0aW9uIGluIHRoZSBjdXJyZW50 CisgKiB0cmFuc2FjdGlvbiBhcmUgaWdub3JlZC4KKyAqLworT25Db21taXRBY3Rpb24KK2dldF9v bl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKK3sKKwlMaXN0Q2VsbCAgICpsOworCisJZm9yZWFj aChsLCBvbl9jb21taXRzKQorCXsKKwkJT25Db21taXRJdGVtICpvYyA9IChPbkNvbW1pdEl0ZW0g KikgbGZpcnN0KGwpOworCisJCWlmIChvYy0+cmVsaWQgIT0gcmVsaWQpCisJCQljb250aW51ZTsK KwkJaWYgKG9jLT5kZWxldGluZ19zdWJpZCAhPSBJbnZhbGlkU3ViVHJhbnNhY3Rpb25JZCkKKwkJ CWNvbnRpbnVlOworCQlyZXR1cm4gb2MtPm9uY29tbWl0OworCX0KKwlyZXR1cm4gT05DT01NSVRf Tk9PUDsKK30KKwogLyoKICAqIFBlcmZvcm0gT04gQ09NTUlUIGFjdGlvbnMuCiAgKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvZGRsdXRpbHMuYwppbmRleCBmMzJmY2Q0NTNlZi4uNzQyYzhmMTQyM2EgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9kZGx1dGlscy5jCkBAIC0yMSwxMiArMjEsMjUgQEAKICNpbmNsdWRlICJhY2Nlc3Mv Z2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9uLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19hdXRoX21lbWJlcnMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1 dGhpZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfZGF0YWJhc2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2RiX3Jv bGVfc2V0dGluZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0 aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ190cmlnZ2VyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIKKyNp bmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMu aCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3Bh Y2UuaCIKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIK QEAgLTczLDggKzg2LDU1IEBAIHR5cGVkZWYgc3RydWN0IERkbE9wdGlvbgogfSBEZGxPcHRpb247 CiAKIAorLyoKKyAqIE9iamVjdC1jbGFzcyBraW5kcyB0aGF0IHRoZSBvbmx5IC8gZXhjZXB0IG9w dGlvbnMgb24KKyAqIHBnX2dldF90YWJsZV9kZGwgY2FuIGZpbHRlciBvbi4gIE1lbWJlcnMgYXJl IHN0b3JlZCBhcyBpbnRlZ2VycyBpbiBhCisgKiBCaXRtYXBzZXQgb24gVGFibGVEZGxDb250ZXh0 LiAgS2VlcCB0YWJsZV9kZGxfa2luZF9uYW1lc1tdIGluIHN5bmMKKyAqIHdpdGggdGhlIG9yZGVy IG9mIGFkZGl0aW9ucyBoZXJlLgorICovCit0eXBlZGVmIGVudW0gVGFibGVEZGxLaW5kCit7CisJ VEFCTEVfRERMX0tJTkRfVEFCTEUsCisJVEFCTEVfRERMX0tJTkRfSU5ERVgsCisJVEFCTEVfRERM X0tJTkRfUFJJTUFSWV9LRVksCisJVEFCTEVfRERMX0tJTkRfVU5JUVVFLAorCVRBQkxFX0RETF9L SU5EX0NIRUNLLAorCVRBQkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZLAorCVRBQkxFX0RETF9LSU5E X0VYQ0xVU0lPTiwKKwlUQUJMRV9ERExfS0lORF9SVUxFLAorCVRBQkxFX0RETF9LSU5EX1NUQVRJ U1RJQ1MsCisJVEFCTEVfRERMX0tJTkRfVFJJR0dFUiwKKwlUQUJMRV9ERExfS0lORF9QT0xJQ1ks CisJVEFCTEVfRERMX0tJTkRfUkxTLAorCVRBQkxFX0RETF9LSU5EX1JFUExJQ0FfSURFTlRJVFks CisJVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OLAorfQkJCVRhYmxlRGRsS2luZDsKKworc3RhdGlj IGNvbnN0IHN0cnVjdAoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJVGFibGVEZGxLaW5kIGtpbmQ7 Cit9CQkJdGFibGVfZGRsX2tpbmRfbmFtZXNbXSA9Cit7CisJeyJ0YWJsZSIsIFRBQkxFX0RETF9L SU5EX1RBQkxFfSwKKwl7ImluZGV4IiwgVEFCTEVfRERMX0tJTkRfSU5ERVh9LAorCXsicHJpbWFy eV9rZXkiLCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWX0sCisJeyJ1bmlxdWUiLCBUQUJMRV9E RExfS0lORF9VTklRVUV9LAorCXsiY2hlY2siLCBUQUJMRV9ERExfS0lORF9DSEVDS30sCisJeyJm b3JlaWduX2tleSIsIFRBQkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZfSwKKwl7ImV4Y2x1c2lvbiIs IFRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTn0sCisJeyJydWxlIiwgVEFCTEVfRERMX0tJTkRfUlVM RX0sCisJeyJzdGF0aXN0aWNzIiwgVEFCTEVfRERMX0tJTkRfU1RBVElTVElDU30sCisJeyJ0cmln Z2VyIiwgVEFCTEVfRERMX0tJTkRfVFJJR0dFUn0sCisJeyJwb2xpY3kiLCBUQUJMRV9ERExfS0lO RF9QT0xJQ1l9LAorCXsicmxzIiwgVEFCTEVfRERMX0tJTkRfUkxTfSwKKwl7InJlcGxpY2FfaWRl bnRpdHkiLCBUQUJMRV9ERExfS0lORF9SRVBMSUNBX0lERU5USVRZfSwKKwl7InBhcnRpdGlvbiIs IFRBQkxFX0RETF9LSU5EX1BBUlRJVElPTn0sCit9OworCiBzdGF0aWMgdm9pZCBwYXJzZV9kZGxf b3B0aW9ucyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgaW50IHZhcmlhZGljX3N0YXJ0LAogCQkJ CQkJCSAgRGRsT3B0aW9uICpvcHRzLCBpbnQgbm9wdHMpOworc3RhdGljIEJpdG1hcHNldCAqcGFy c2Vfa2luZF9saXN0KGNvbnN0IGNoYXIgKm9wdG5hbWUsIGNvbnN0IGNoYXIgKmxpc3QpOwogc3Rh dGljIHZvaWQgYXBwZW5kX2RkbF9vcHRpb24oU3RyaW5nSW5mbyBidWYsIGJvb2wgcHJldHR5LCBp bnQgaW5kZW50LAogCQkJCQkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJCQlwZ19hdHRyaWJ1 dGVfcHJpbnRmKDQsIDUpOwpAQCAtODcsNiArMTQ3LDk1IEBAIHN0YXRpYyBEYXR1bSBwZ19nZXRf dGFibGVzcGFjZV9kZGxfc3JmKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBPaWQgdHNpZCwgYm9v bCBpCiBzdGF0aWMgTGlzdCAqcGdfZ2V0X2RhdGFiYXNlX2RkbF9pbnRlcm5hbChPaWQgZGJpZCwg Ym9vbCBwcmV0dHksCiAJCQkJCQkJCQkJICBib29sIG5vX293bmVyLCBib29sIG5vX3RhYmxlc3Bh Y2UpOwogCisvKgorICogUGVyLWNvbHVtbiBjYWNoZSBvZiBsb2NhbGx5LWRlY2xhcmVkIE5PVCBO VUxMIGNvbnN0cmFpbnRzLiAgQnVpbHQgb25jZQorICogYnkgY29sbGVjdF9sb2NhbF9ub3RfbnVs bCgpIGFuZCBjb25zdWx0ZWQgYnkgdGhlIGNvbHVtbi1lbWl0IGhlbHBlcnMKKyAqIGFuZCB0aGUg cG9zdC1DUkVBVEUgY29uc3RyYWludCBsb29wLiAgRW50cmllcyB3aXRoIGNvbm9pZCA9PSBJbnZh bGlkT2lkCisgKiBtZWFuIHRoZSBjb2x1bW4gaGFzIG5vIGxvY2FsIE5PVCBOVUxMIGNvbnN0cmFp bnQgcm93IGluIHBnX2NvbnN0cmFpbnQKKyAqICh0aGUgY29sdW1uIG1heSBzdGlsbCBoYXZlIGF0 dG5vdG51bGw9dHJ1ZSBvbiBhIHByZS1QRy0xOC11cGdyYWRlZAorICogY2F0YWxvZywgaW4gd2hp Y2ggY2FzZSBlbWl0IHBsYWluIGlubGluZSBOT1QgTlVMTCkuCisgKi8KK3R5cGVkZWYgc3RydWN0 IExvY2FsTm90TnVsbEVudHJ5Cit7CisJT2lkCQkJY29ub2lkOworCWNoYXIJICAgKm5hbWU7CisJ Ym9vbAkJaXNfYXV0bzsJCS8qIG1hdGNoZXMgIjx0YWJsZT5fPGNvbD5fbm90X251bGwiICovCisJ Ym9vbAkJbm9faW5oZXJpdDsKK30JCQlMb2NhbE5vdE51bGxFbnRyeTsKKworLyoKKyAqIFdvcmtp bmcgY29udGV4dCB0aHJlYWRlZCB0aHJvdWdoIHRoZSBwZXItcGFzcyBoZWxwZXJzIGJlbG93LiAg SW5wdXRzCisgKiAoY2FsbGVyLXByb3ZpZGVkIG9wdGlvbiBmbGFncykgYXJlIGZpbGxlZCBpbiBv bmNlIGF0IHRoZSB0b3Agb2YKKyAqIHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwgYW5kIHRyZWF0 ZWQgYXMgcmVhZC1vbmx5IHRoZXJlYWZ0ZXIuICBEZXJpdmVkCisgKiBmaWVsZHMgKHF1YWxuYW1l LCBzY2hlbWFfcHJlZml4LCBubl9lbnRyaWVzLCBza2lwX25vdG51bGxfb2lkcykgYXJlCisgKiBj b21wdXRlZCBvbmNlIGR1cmluZyBzZXR1cC4gIEVhY2ggcGFzcyBhcHBlbmRzIHRvIGN0eC0+YnVm IGFuZCBwdXNoZXMKKyAqIHRoZSBmaW5pc2hlZCBzdGF0ZW1lbnQgb250byBjdHgtPnN0YXRlbWVu dHMgdmlhIGFwcGVuZF9zdG10KCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFRhYmxlRGRsQ29udGV4 dAoreworCVJlbGF0aW9uCXJlbDsKKwlPaWQJCQlyZWxpZDsKKwlib29sCQlwcmV0dHk7CisJYm9v bAkJbm9fb3duZXI7CisJYm9vbAkJbm9fdGFibGVzcGFjZTsKKwlib29sCQlzY2hlbWFfcXVhbGlm aWVkOworCisJLyoKKwkgKiBPYmplY3QtY2xhc3MgZmlsdGVyaW5nLiAgSWYgb25seV9raW5kcyBp cyBub24tTlVMTCwgb25seSB0aGUKKwkgKiBraW5kcyBpbiB0aGF0IHNldCBhcmUgZW1pdHRlZDsg aWYgZXhjZXB0X2tpbmRzIGlzIG5vbi1OVUxMLCBhbGwKKwkgKiBraW5kcyAqZXhjZXB0KiB0aG9z ZSBpbiB0aGF0IHNldCBhcmUgZW1pdHRlZDsgaWYgYm90aCBhcmUgTlVMTCwKKwkgKiBldmVyeSBr aW5kIGlzIGVtaXR0ZWQgKHRoZSBkZWZhdWx0KS4gIFRoZSB0d28gYXJlIG11dHVhbGx5CisJICog ZXhjbHVzaXZlIGF0IHRoZSB1c2VyLWZhY2luZyBsYXllciAodGhlIFNSRiBlbnRyeSByZWplY3Rz CisJICogc3BlY2lmeWluZyBib3RoKS4KKwkgKi8KKwlCaXRtYXBzZXQgICpvbmx5X2tpbmRzOwor CUJpdG1hcHNldCAgKmV4Y2VwdF9raW5kczsKKworCS8qIERlcml2ZWQgZHVyaW5nIHNldHVwICov CisJT2lkCQkJYmFzZV9uYW1lc3BhY2U7CisJY2hhcgkgICAqcXVhbG5hbWU7CisJY2hhcgkgICAq c2NoZW1hX3ByZWZpeDsJLyogTlVMTCB3aGVuIHNjaGVtYV9xdWFsaWZpZWQgKi8KKwlpbnQJCQlz YXZlX25lc3RsZXZlbDsgLyogPj0gMCBpZiB3ZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCAqLworCUxv Y2FsTm90TnVsbEVudHJ5ICpubl9lbnRyaWVzOworCUxpc3QJICAgKnNraXBfbm90bnVsbF9vaWRz OworCisJLyogTXV0YWJsZSB3b3JraW5nIHN0YXRlICovCisJU3RyaW5nSW5mb0RhdGEgYnVmOwor CUxpc3QJICAgKnN0YXRlbWVudHM7Cit9CQkJVGFibGVEZGxDb250ZXh0OworCitzdGF0aWMgTGlz dCAqcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbChUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0 aWMgYm9vbCBpc19raW5kX2luY2x1ZGVkKGNvbnN0IFRhYmxlRGRsQ29udGV4dCAqY3R4LCBUYWJs ZURkbEtpbmQga2luZCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfY29sdW1uX2RlZnMoU3RyaW5nSW5m byBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJICAgYm9vbCBpbmNsdWRl X2NoZWNrLAorCQkJCQkJCSAgIGJvb2wgc2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkgICBMb2Nh bE5vdE51bGxFbnRyeSAqIG5uX2VudHJpZXMpOworc3RhdGljIHZvaWQgYXBwZW5kX3R5cGVkX2Nv bHVtbl9vdmVycmlkZXMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkg IGJvb2wgcHJldHR5LCBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJCQkJCQkJICBMb2NhbE5vdE51 bGxFbnRyeSAqIG5uX2VudHJpZXMpOworc3RhdGljIHZvaWQgYXBwZW5kX2lubGluZV9jaGVja19j b25zdHJhaW50cyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQlib29s IHByZXR0eSwgYm9vbCAqZmlyc3QpOworc3RhdGljIGNoYXIgKmZpbmRfYXR0cmRlZl90ZXh0KFJl bGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0sCisJCQkJCQkJICAgTGlzdCAqKmRwY29udGV4 dCk7CitzdGF0aWMgY2hhciAqbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoT2lkIHJlbGlkLCBib29s IHNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkgT2lkIGJhc2VfbmFtZXNwYWNlKTsKK3N0YXRp YyBjaGFyICpzdHJpcF9zY2hlbWFfcHJlZml4KGNvbnN0IGNoYXIgKnN0bXQsIGNvbnN0IGNoYXIg KnByZWZpeCk7CitzdGF0aWMgTG9jYWxOb3ROdWxsRW50cnkgKiBjb2xsZWN0X2xvY2FsX25vdF9u dWxsKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJCSAgTGlzdCAqKnNraXBfb2lkcyk7CisKK3N0 YXRpYyB2b2lkIGFwcGVuZF9zdG10KFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9p ZCBlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMg dm9pZCBlbWl0X293bmVyX3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lk IGVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMoVGFibGVEZGxDb250ZXh0ICogY3R4KTsKK3N0 YXRpYyB2b2lkIGVtaXRfYXR0b3B0aW9ucyhUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGlj IHZvaWQgZW1pdF9pbmRleGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBl bWl0X2xvY2FsX2NvbnN0cmFpbnRzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9p ZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3N0 YXRpc3RpY3MoVGFibGVEZGxDb250ZXh0ICogY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRfcmVwbGlj YV9pZGVudGl0eShUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGljIHZvaWQgZW1pdF9ybHNf dG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKiBjdHgpOworc3RhdGljIHZvaWQgZW1pdF9wYXJ0aXRp b25fY2hpbGRyZW4oVGFibGVEZGxDb250ZXh0ICogY3R4KTsKKwogCiAvKgogICogcGFyc2VfZGRs X29wdGlvbnMKQEAgLTIyNyw2ICszNzYsMTE1IEBAIHBhcnNlX2RkbF9vcHRpb25zKEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLCBpbnQgdmFyaWFkaWNfc3RhcnQsCiAJfQogfQogCisvKgorICogcGFy c2Vfa2luZF9saXN0CisgKgkJUGFyc2UgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvYmplY3Qt Y2xhc3Mga2luZCBuYW1lcyBpbnRvIGEKKyAqCQlCaXRtYXBzZXQgb2YgVGFibGVEZGxLaW5kIHZh bHVlcy4KKyAqCisgKiBXaGl0ZXNwYWNlIGFyb3VuZCBlYWNoIGVudHJ5IGlzIHRyaW1tZWQuICBF bXB0eSBlbnRyaWVzIChlLmcuICJhLCxiIiBvciBhCisgKiB0cmFpbGluZyBjb21tYSkgYXJlIHJl amVjdGVkLiAgVW5rbm93biBraW5kIG5hbWVzIHJhaXNlIGFuIGVycm9yIGNpdGluZworICogdGhl IHN1cHBsaWVkIG9wdGlvbiBuYW1lIHNvIHRoZSBtZXNzYWdlIHBvaW50cyBhdCB0aGUgb2ZmZW5k aW5nIG9wdGlvbi4KKyAqIFJldHVybnMgTlVMTCBvbmx5IHdoZW4gdGhlIGxpc3QgaXMgc3RydWN0 dXJhbGx5IGVtcHR5OyBjYWxsZXJzIHNob3VsZAorICogdHJlYXQgYW4gYWxsLXdoaXRlc3BhY2Ug bGlzdCBhcyBhbiBlcnJvciByYXRoZXIgdGhhbiBlcXVpdmFsZW50IHRvIE5VTEwuCisgKi8KK3N0 YXRpYyBCaXRtYXBzZXQgKgorcGFyc2Vfa2luZF9saXN0KGNvbnN0IGNoYXIgKm9wdG5hbWUsIGNv bnN0IGNoYXIgKmxpc3QpCit7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVMTDsKKwljb25zdCBj aGFyICpwID0gbGlzdDsKKworCXdoaWxlICgqcCkKKwl7CisJCWNvbnN0IGNoYXIgKnN0YXJ0Owor CQljb25zdCBjaGFyICplbmQ7CisJCWNoYXIJICAgKnRva2VuOworCQlib29sCQlmb3VuZCA9IGZh bHNlOworCisJCS8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlLiAqLworCQl3aGlsZSAoKnAgPT0g JyAnIHx8ICpwID09ICdcdCcpCisJCQlwKys7CisKKwkJaWYgKCpwID09ICcsJyB8fCAqcCA9PSAn XDAnKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coImVtcHR5IGVudHJ5IGluIG9wdGlvbiBcIiVz XCIiLCBvcHRuYW1lKSkpOworCisJCXN0YXJ0ID0gcDsKKwkJd2hpbGUgKCpwICYmICpwICE9ICcs JyAmJiAqcCAhPSAnICcgJiYgKnAgIT0gJ1x0JykKKwkJCXArKzsKKwkJZW5kID0gcDsKKworCQkv KiBTa2lwIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovCisJCXdoaWxlICgqcCA9PSAnICcgfHwgKnAg PT0gJ1x0JykKKwkJCXArKzsKKworCQlpZiAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnLCcpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBjaGFyYWN0ZXIgaW4gb3B0aW9uIFwiJXNcIiIs IG9wdG5hbWUpKSk7CisKKwkJaWYgKCpwID09ICcsJykKKwkJeworCQkJcCsrOworCQkJLyoKKwkJ CSAqIEEgY29tbWEgbXVzdCBiZSBmb2xsb3dlZCBieSBhbm90aGVyIGVudHJ5LiAgV2l0aG91dCB0 aGlzCisJCQkgKiBjaGVjayBhIHRyYWlsaW5nIGNvbW1hIGxpa2UgImluZGV4LCIgd291bGQgYmUg c2lsZW50bHkKKwkJCSAqIGFjY2VwdGVkIGFzICJpbmRleCIsIHdoaWxlICIsaW5kZXgiIGFuZCAi aW5kZXgsLHJ1bGUiIGFyZQorCQkJICogYWxyZWFkeSByZWplY3RlZCBhcyAiZW1wdHkgZW50cnki IC0gdGhpcyBndWFyZCBtYWtlcyB0aGUKKwkJCSAqIHRocmVlIGZvcm1zIGNvbnNpc3RlbnQuCisJ CQkgKi8KKwkJCWlmICgqcCA9PSAnXDAnKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImVt cHR5IGVudHJ5IGluIG9wdGlvbiBcIiVzXCIiLCBvcHRuYW1lKSkpOworCQl9CisKKwkJdG9rZW4g PSBwbnN0cmR1cChzdGFydCwgZW5kIC0gc3RhcnQpOworCisJCWZvciAoc2l6ZV90IGkgPSAwOyBp IDwgbGVuZ3Rob2YodGFibGVfZGRsX2tpbmRfbmFtZXMpOyBpKyspCisJCXsKKwkJCWlmIChwZ19z dHJjYXNlY21wKHRva2VuLCB0YWJsZV9kZGxfa2luZF9uYW1lc1tpXS5uYW1lKSA9PSAwKQorCQkJ eworCQkJCXJlc3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwKKwkJCQkJCQkJCQkoaW50KSB0 YWJsZV9kZGxfa2luZF9uYW1lc1tpXS5raW5kKTsKKwkJCQlmb3VuZCA9IHRydWU7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKworCQlpZiAoIWZvdW5kKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2co InVucmVjb2duaXplZCBraW5kIFwiJXNcIiBpbiBvcHRpb24gXCIlc1wiIiwKKwkJCQkJCQl0b2tl biwgb3B0bmFtZSkpKTsKKworCQlwZnJlZSh0b2tlbik7CisJfQorCisJaWYgKHJlc3VsdCA9PSBO VUxMKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm9wdGlvbiBcIiVzXCIgbXVzdCBzcGVjaWZ5IGF0 IGxlYXN0IG9uZSBraW5kIiwKKwkJCQkJCW9wdG5hbWUpKSk7CisKKwlyZXR1cm4gcmVzdWx0Owor fQorCisvKgorICogaXNfa2luZF9pbmNsdWRlZAorICoJCURldGVybWluZSB3aGV0aGVyIERETCBm b3IgdGhlIGdpdmVuIG9iamVjdC1jbGFzcyBraW5kIHNob3VsZCBiZQorICoJCWVtaXR0ZWQgdW5k ZXIgdGhlIGN1cnJlbnQgb3B0aW9ucy4KKyAqLworc3RhdGljIGJvb2wKK2lzX2tpbmRfaW5jbHVk ZWQoY29uc3QgVGFibGVEZGxDb250ZXh0ICpjdHgsIFRhYmxlRGRsS2luZCBraW5kKQoreworCWlm IChjdHgtPm9ubHlfa2luZHMgIT0gTlVMTCkKKwkJcmV0dXJuIGJtc19pc19tZW1iZXIoKGludCkg a2luZCwgY3R4LT5vbmx5X2tpbmRzKTsKKwlpZiAoY3R4LT5leGNlcHRfa2luZHMgIT0gTlVMTCkK KwkJcmV0dXJuICFibXNfaXNfbWVtYmVyKChpbnQpIGtpbmQsIGN0eC0+ZXhjZXB0X2tpbmRzKTsK KwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIEhlbHBlciB0byBhcHBlbmQgYSBmb3JtYXR0ZWQg c3RyaW5nIHdpdGggb3B0aW9uYWwgcHJldHR5LXByaW50aW5nLgogICovCkBAIC0xMTg1LDMgKzE0 NDMsMTgxNiBAQCBwZ19nZXRfZGF0YWJhc2VfZGRsKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCVNSRl9S RVRVUk5fRE9ORShmdW5jY3R4KTsKIAl9CiB9CisKKy8qCisgKiBsb29rdXBfcmVsbmFtZV9mb3Jf ZW1pdAorICoJCVJldHVybiBlaXRoZXIgdGhlIHNjaGVtYS1xdWFsaWZpZWQgb3IgdGhlIGJhcmUg cXVvdGVkIG5hbWUgb2YgYQorICoJCXJlbGF0aW9uLCBkZXBlbmRpbmcgb24gdGhlIHNjaGVtYV9x dWFsaWZpZWQgZmxhZy4KKyAqCisgKiBXaGVuIHNjaGVtYV9xdWFsaWZpZWQgaXMgdHJ1ZSB0aGUg c2NoZW1hLXF1YWxpZmllZCBuYW1lIGlzIGFsd2F5cworICogcmV0dXJuZWQuICBXaGVuIGZhbHNl LCB0aGUgYmFyZSByZWxuYW1lIGlzIHJldHVybmVkIG9ubHkgaWYgdGhlIHRhcmdldAorICogcmVs YXRpb24gbGl2ZXMgaW4gYmFzZV9uYW1lc3BhY2UgKHRoZSBuYW1lc3BhY2Ugb2YgdGhlIHRhYmxl IHdob3NlIERETCBpcworICogYmVpbmcgZ2VuZXJhdGVkKTsgb3RoZXJ3aXNlIHRoZSBzY2hlbWEt cXVhbGlmaWVkIGZvcm0gaXMgcmV0dXJuZWQsCisgKiBiZWNhdXNlIGNyb3NzLXNjaGVtYSByZWZl cmVuY2VzIChmb3IgZXhhbXBsZSBhbiBpbmhlcml0YW5jZSBwYXJlbnQgb3IKKyAqIGZvcmVpZ24g a2V5IHRhcmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEpIGFyZSBub3Qgc2FmZSB0byBzdHJpcC4K KyAqCisgKiBUaGlzIHJlcGxhY2VzIHRoZSB1bnNhZmUgcGF0dGVybgorICoJICBxdW90ZV9xdWFs aWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2Uob2lk KSksCisgKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9yZWxfbmFtZShvaWQpKQor ICogd2hpY2ggZGVyZWZlcmVuY2VzIE5VTEwgd2hlbiBhIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24g aGFzIGRyb3BwZWQgdGhlCisgKiByZWZlcmVuY2VkIHJlbGF0aW9uIChvciBpdHMgc2NoZW1hKSBi ZXR3ZWVuIHdoZW4gd2UgY2FjaGVkIGl0cyBPSUQgYW5kCisgKiB3aGVuIHdlIGFzayB0aGUgc3lz Y2FjaGUgZm9yIGl0cyBuYW1lLiAgSG9sZGluZyBBY2Nlc3NTaGFyZUxvY2sgb24gYQorICogZGVw ZW5kZW50IHJlbGF0aW9uIG1ha2VzIHRoaXMgcmFjZSB2YW5pc2hpbmdseSB1bmxpa2VseSBpbiBw cmFjdGljZSwgYnV0CisgKiB3ZSBzdGlsbCBkZWZlbmQgYWdhaW5zdCBpdCBiZWNhdXNlIHRoZSBh bHRlcm5hdGl2ZSBpcyBhIFNJR1NFR1YuCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZv ciBwZnJlZSgpaW5nIHRoZSByZXN1bHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2xvb2t1cF9yZWxu YW1lX2Zvcl9lbWl0KE9pZCByZWxpZCwgYm9vbCBzY2hlbWFfcXVhbGlmaWVkLCBPaWQgYmFzZV9u YW1lc3BhY2UpCit7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfY2xhc3MgcmVsdHVwOworCWNo YXIJICAgKm5zcG5hbWU7CisJY2hhcgkgICAqcmVzdWx0OworCisJdHAgPSBTZWFyY2hTeXNDYWNo ZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHRwKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5F RF9PQkpFQ1QpLAorCQkJCSBlcnJtc2coInJlbGF0aW9uIHdpdGggT0lEICV1IGRvZXMgbm90IGV4 aXN0IiwgcmVsaWQpLAorCQkJCSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3VycmVu dGx5IGRyb3BwZWQuIikpKTsKKworCXJlbHR1cCA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1Qo dHApOworCisJLyogQmFyZSBuYW1lIG9ubHkgd2hlbiBjYWxsZXIgYXNrZWQgYW5kIHRhcmdldCBp cyBpbiB0aGUgYmFzZSBuYW1lc3BhY2UuICovCisJaWYgKCFzY2hlbWFfcXVhbGlmaWVkICYmIHJl bHR1cC0+cmVsbmFtZXNwYWNlID09IGJhc2VfbmFtZXNwYWNlKQorCXsKKwkJcmVzdWx0ID0gcHN0 cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIocmVsdHVwLT5yZWxuYW1lKSkpOworCQlSZWxl YXNlU3lzQ2FjaGUodHApOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCW5zcG5hbWUgPSBnZXRf bmFtZXNwYWNlX25hbWUocmVsdHVwLT5yZWxuYW1lc3BhY2UpOworCWlmIChuc3BuYW1lID09IE5V TEwpCisJeworCQlPaWQJCQluc3BvaWQgPSByZWx0dXAtPnJlbG5hbWVzcGFjZTsKKworCQlSZWxl YXNlU3lzQ2FjaGUodHApOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf VU5ERUZJTkVEX09CSkVDVCksCisJCQkJIGVycm1zZygic2NoZW1hIHdpdGggT0lEICV1IGRvZXMg bm90IGV4aXN0IiwgbnNwb2lkKSwKKwkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNv bmN1cnJlbnRseSBkcm9wcGVkLiIpKSk7CisJfQorCisJcmVzdWx0ID0gcXVvdGVfcXVhbGlmaWVk X2lkZW50aWZpZXIobnNwbmFtZSwgTmFtZVN0cihyZWx0dXAtPnJlbG5hbWUpKTsKKworCXBmcmVl KG5zcG5hbWUpOworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogc3RyaXBfc2NoZW1hX3ByZWZpeAorICoJCVJldHVybiBhIHBhbGxvYydkIGNvcHkg b2Ygc3RtdCB3aXRoIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgcHJlZml4CisgKgkJcmVtb3ZlZCwgZXhj ZXB0IG9jY3VycmVuY2VzIHRoYXQgZmFsbCBpbnNpZGUgYSBzaW5nbGUtcXVvdGVkIFNRTAorICoJ CXN0cmluZyBsaXRlcmFsIG9yIGEgZG91YmxlLXF1b3RlZCBTUUwgaWRlbnRpZmllci4KKyAqCisg KiBVc2VkIHRvIHN0cmlwIHRoZSBxdWFsaWZpZWQtc2NoZW1hIHByZWZpeCAoZm9yIGV4YW1wbGUg Im9sZF9zY2hlbWEuIikKKyAqIGZyb20gRERMIGVtaXR0ZWQgYnkgdGhlIGFsd2F5cy1xdWFsaWZp ZWQgcnVsZXV0aWxzIGhlbHBlcnMKKyAqIChwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kLCBw Z19nZXRfaW5kZXhkZWZfc3RyaW5nLAorICogcGdfZ2V0X3J1bGVkZWYsIHBnX2dldF9zdGF0aXN0 aWNzb2JqZGVmX3N0cmluZykgd2hlbiB0aGUgY2FsbGVyIGhhcworICogcmVxdWVzdGVkIHVucXVh bGlmaWVkIG91dHB1dCB2aWEgc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4gIEEgcGxhaW4KKyAqIHN1 YnN0cmluZyBzdHJpcCB3b3VsZCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3aG9zZSBjb250ZW50 cyBoYXBwZW4KKyAqIHRvIGNvbnRhaW4gIjxzY2hlbWE+LiIgKGZvciBleGFtcGxlIGEgQ0hFQ0sg Y29tcGFyaW5nIGFnYWluc3QKKyAqICdteXNjaGVtYS5zZWNyZXQnKSBvciBkb3VibGUtcXVvdGVk IGNvbHVtbi9pZGVudGlmaWVyIG5hbWVzIHdob3NlCisgKiBjb250ZW50cyBoYXBwZW4gdG8gY29u dGFpbiAiPHNjaGVtYT4uIiAoZm9yIGV4YW1wbGUgYSBjb2x1bW4gbmFtZWQKKyAqICJzLndlaXJk IiB3aGVuIHN0cmlwcGluZyB0aGUgcHJlZml4ICJzLiIpLCBzbyB3ZSB0cmFjayBxdW90aW5nIHN0 YXRlCisgKiBhbmQgc2tpcCBtYXRjaGVzIHRoYXQgb2NjdXIgd2hpbGUgd2UgYXJlIGluc2lkZSBl aXRoZXIga2luZCBvZgorICogcXVvdGVkIHRva2VuLiAgRXNjYXBlZCBxdW90ZXMgKCcnIGluc2lk ZSBhIHN0cmluZywgIiIgaW5zaWRlIGFuCisgKiBpZGVudGlmaWVyKSBhcmUgaGFuZGxlZCBieSBr ZWVwaW5nIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgc2V0IGFjcm9zcworICogdGhlbS4KKyAqLwor c3RhdGljIGNoYXIgKgorc3RyaXBfc2NoZW1hX3ByZWZpeChjb25zdCBjaGFyICpzdG10LCBjb25z dCBjaGFyICpwcmVmaXgpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCXNpemVfdAkJcGxlbiA9 IHN0cmxlbihwcmVmaXgpOworCWNvbnN0IGNoYXIgKnAgPSBzdG10OworCWJvb2wJCWluX3N0cmlu ZyA9IGZhbHNlOworCWJvb2wJCWluX2lkZW50ID0gZmFsc2U7CisKKwlpbml0U3RyaW5nSW5mbygm YnVmKTsKKwl3aGlsZSAoKnApCisJeworCQkvKgorCQkgKiBUcnkgdGhlIHByZWZpeCBtYXRjaCBC RUZPUkUgdGhlIHF1b3RlLXN0YXRlIHRvZ2dsZXMuICBUaGUgcHJlZml4CisJCSAqIGl0c2VsZiBt YXkgYmVnaW4gd2l0aCBhIGRvdWJsZSBxdW90ZSB3aGVuIHRoZSBiYXNlIHNjaGVtYSBuYW1lCisJ CSAqIHJlcXVpcmVzIHF1b3RpbmcgKGUuZy4gIk15LVNjaGVtYSIuKSwgYW5kIGF0IHRoYXQgbGVh ZGluZyAiIHdlIG11c3QKKwkJICogc3RyaXAgdGhlIHdob2xlIHByZWZpeCByYXRoZXIgdGhhbiB0 cmVhdCBpdCBhcyB0aGUgb3BlbmluZyBvZiBhCisJCSAqIHJlZ3VsYXIgcXVvdGVkIGlkZW50aWZp ZXIuICBUaGUgY2hlY2sgaXMgZ2F0ZWQgb24gIWluX2lkZW50ICYmCisJCSAqICFpbl9zdHJpbmcs IHNvIG9uY2Ugd2UgaGF2ZSB0b2dnbGVkIGludG8gYSBxdW90ZWQgdG9rZW4gd2UgbmV2ZXIKKwkJ ICogc3RyaXAgYSBjb2luY2lkZW50YWwgc3Vic3RyaW5nIGluc2lkZSBpdC4KKwkJICovCisJCWlm ICghaW5fc3RyaW5nICYmICFpbl9pZGVudCAmJiBzdHJuY21wKHAsIHByZWZpeCwgcGxlbikgPT0g MCkKKwkJeworCQkJcCArPSBwbGVuOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCpwID09ICdc JycgJiYgIWluX2lkZW50KQorCQl7CisJCQkvKiBTUUwgJycgZXNjYXBlOiBlbWl0IGJvdGggcXVv dGVzIGFuZCBzdGF5IGluc2lkZSB0aGUgc3RyaW5nLiAqLworCQkJaWYgKGluX3N0cmluZyAmJiBw WzFdID09ICdcJycpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJ1wnJyk7 CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJ1wnJyk7CisJCQkJcCArPSAyOworCQkJ CWNvbnRpbnVlOworCQkJfQorCQkJaW5fc3RyaW5nID0gIWluX3N0cmluZzsKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKCZidWYsICpwKTsKKwkJCXArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlm ICgqcCA9PSAnIicgJiYgIWluX3N0cmluZykKKwkJeworCQkJLyogU1FMICIiIGVzY2FwZTogZW1p dCBib3RoIHF1b3RlcyBhbmQgc3RheSBpbnNpZGUgdGhlIGlkZW50LiAqLworCQkJaWYgKGluX2lk ZW50ICYmIHBbMV0gPT0gJyInKQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYs ICciJyk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyInKTsKKwkJCQlwICs9IDI7 CisJCQkJY29udGludWU7CisJCQl9CisJCQlpbl9pZGVudCA9ICFpbl9pZGVudDsKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZidWYsICpwKTsKKwkJCXArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICpwKTsKKwkJcCsrOworCX0KKwlyZXR1cm4gYnVm LmRhdGE7Cit9CisKKy8qCisgKiBjb2xsZWN0X2xvY2FsX25vdF9udWxsCisgKgkJU2NhbiBwZ19j b25zdHJhaW50IG9uY2UgZm9yIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgY29uc3RyYWludHMK KyAqCQlvbiByZWwsIHJldHVybmluZyBhIHBhbGxvYydkIGFycmF5IGluZGV4ZWQgYnkgYXR0bnVt ICgxLi5uYXR0cykuCisgKgorICogRW50cmllcyB3aXRoIGNvbm9pZD09SW52YWxpZE9pZCBtZWFu ICJubyBsb2NhbCBOT1QgTlVMTCByb3cgZm9yIHRoaXMKKyAqIGNvbHVtbiIuICBXaGVuIHRoZSBj b25zdHJhaW50IG5hbWUgZG9lcyBub3QgbWF0Y2ggdGhlIGF1dG8tZ2VuZXJhdGVkCisgKiBwYXR0 ZXJuICI8dGFibGVuYW1lPl88Y29sdW1ubmFtZT5fbm90X251bGwiLCB0aGUgY29uc3RyYWludCBP SUQgaXMKKyAqIGFwcGVuZGVkIHRvICpza2lwX29pZHMgc28gdGhlIHBvc3QtQ1JFQVRFIGNvbnN0 cmFpbnQgbG9vcCBjYW4gYXZvaWQKKyAqIHJlLWVtaXR0aW5nIGl0IGFzIEFMVEVSIFRBQkxFIC4u LiBBREQgQ09OU1RSQUlOVCAtIHRoZSBjb2x1bW4tZW1pdAorICogcGFzcyB3aWxsIHByb2R1Y2Ug aXQgaW5saW5lIGFzICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIGluc3RlYWQuCisgKi8KK3N0 YXRpYyBMb2NhbE5vdE51bGxFbnRyeSAqCitjb2xsZWN0X2xvY2FsX25vdF9udWxsKFJlbGF0aW9u IHJlbCwgTGlzdCAqKnNraXBfb2lkcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IocmVsKTsKKwlpbnQJCQluYXR0cyA9IHR1cGRlc2MtPm5hdHRzOworCUxvY2FsTm90 TnVsbEVudHJ5ICplbnRyaWVzOworCWNvbnN0IGNoYXIgKnJlbG5hbWUgPSBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpOworCVJlbGF0aW9uCWNvblJlbDsKKwlTeXNTY2FuRGVzYyBjb25TY2Fu OworCVNjYW5LZXlEYXRhIGNvbktleTsKKwlIZWFwVHVwbGUJY29uVHVwOworCisJZW50cmllcyA9 IChMb2NhbE5vdE51bGxFbnRyeSAqKSBwYWxsb2MwKHNpemVvZihMb2NhbE5vdE51bGxFbnRyeSkg KgorCQkJCQkJCQkJCQkobmF0dHMgKyAxKSk7CisKKwljb25SZWwgPSB0YWJsZV9vcGVuKENvbnN0 cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZjb25LZXks CisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51 bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVs KSkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVs aWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1ZSwgTlVMTCwgMSwgJmNvbktleSk7CisK Kwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAgPSBzeXN0YWJsZV9nZXRuZXh0KGNvblNj YW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb24gPSAoRm9ybV9wZ19jb25zdHJhaW50 KSBHRVRTVFJVQ1QoY29uVHVwKTsKKwkJRGF0dW0JCWNvbmtleURhdDsKKwkJYm9vbAkJY29ua2V5 TnVsbDsKKwkJQXJyYXlUeXBlICAqY29ua2V5QXJyOworCQlpbnQxNgkgICAqY29ua2V5VmFsczsK KwkJaW50CQkJYXR0bnVtOworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7CisJCWNoYXIJCWF1dG9u YW1lW05BTUVEQVRBTEVOXTsKKworCQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJTlRfTk9U TlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJCWNvbnRpbnVl OworCisJCWNvbmtleURhdCA9IGhlYXBfZ2V0YXR0cihjb25UdXAsIEFudW1fcGdfY29uc3RyYWlu dF9jb25rZXksCisJCQkJCQkJCSBSZWxhdGlvbkdldERlc2NyKGNvblJlbCksICZjb25rZXlOdWxs KTsKKwkJaWYgKGNvbmtleU51bGwpCisJCQljb250aW51ZTsKKwkJY29ua2V5QXJyID0gRGF0dW1H ZXRBcnJheVR5cGVQKGNvbmtleURhdCk7CisKKwkJLyoKKwkJICogRGVmZW5kIGFnYWluc3QgYSBt YWxmb3JtZWQgY29ua2V5OiBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgaXMgYWx3YXlzCisJCSAqIGEg c2luZ2xlLWNvbHVtbiAxLUQgaW50MiBhcnJheSwgYnV0IGEgY29ycnVwdGVkIGNhdGFsb2cgb3Ig YSBmdXR1cmUKKwkJICogcGF0Y2ggdGhhdCBzdG9yZXMgd2lkZXIgY29ua2V5cyBtdXN0bid0IHRy aXAgdXMgaW50byByZWFkaW5nIHBhc3QKKwkJICogdGhlIGFycmF5IGhlYWRlci4KKwkJICovCisJ CWlmIChBUlJfTkRJTShjb25rZXlBcnIpICE9IDEgfHwKKwkJCUFSUl9ESU1TKGNvbmtleUFycilb MF0gPCAxIHx8CisJCQlBUlJfSEFTTlVMTChjb25rZXlBcnIpIHx8CisJCQlBUlJfRUxFTVRZUEUo Y29ua2V5QXJyKSAhPSBJTlQyT0lEKQorCQkJY29udGludWU7CisKKwkJY29ua2V5VmFscyA9IChp bnQxNiAqKSBBUlJfREFUQV9QVFIoY29ua2V5QXJyKTsKKwkJYXR0bnVtID0gY29ua2V5VmFsc1sw XTsKKwkJaWYgKGF0dG51bSA8IDEgfHwgYXR0bnVtID4gbmF0dHMpCisJCQljb250aW51ZTsKKwor CQlhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpOworCQlzbnByaW50Zihh dXRvbmFtZSwgc2l6ZW9mKGF1dG9uYW1lKSwgIiVzXyVzX25vdF9udWxsIiwKKwkJCQkgcmVsbmFt ZSwgTmFtZVN0cihhdHQtPmF0dG5hbWUpKTsKKworCQllbnRyaWVzW2F0dG51bV0uY29ub2lkID0g Y29uLT5vaWQ7CisJCWVudHJpZXNbYXR0bnVtXS5uYW1lID0gcHN0cmR1cChOYW1lU3RyKGNvbi0+ Y29ubmFtZSkpOworCQllbnRyaWVzW2F0dG51bV0uaXNfYXV0byA9IChzdHJjbXAoTmFtZVN0cihj b24tPmNvbm5hbWUpLCBhdXRvbmFtZSkgPT0gMCk7CisJCWVudHJpZXNbYXR0bnVtXS5ub19pbmhl cml0ID0gY29uLT5jb25ub2luaGVyaXQ7CisKKwkJLyoKKwkJICogSW5saW5lIGVtaXNzaW9uIG9m IE5PVCBOVUxMIG9ubHkgaGFwcGVucyBmb3IgY29sdW1ucyB0aGF0IHRoZQorCQkgKiBjb2x1bW4g bGlzdCBhY3R1YWxseSBlbWl0cywgaS5lLiBhdHRpc2xvY2FsIGNvbHVtbnMuICBGb3IgdGhvc2UK KwkJICogdGhlIGlubGluZSBwYXNzIGFscmVhZHkgbWF0ZXJpYWxpemVzIHRoZSBjb25zdHJhaW50 IChlaXRoZXIgYXMKKwkJICogIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgZm9yIHVzZXItbmFt ZWQsIG9yIGFzIGEgYmFyZQorCQkgKiAiTk9UIE5VTEwiIHRoYXQgUEcgcmUtY3JlYXRlcyB1bmRl ciB0aGUgYXV0by1uYW1lIHBhdHRlcm4pLCBzbworCQkgKiB0aGUgcG9zdC1DUkVBVEUgY29uc3Ry YWludCBsb29wIG11c3Qgbm90IGVtaXQgYSBzZWNvbmQKKwkJICogQUxURVIgVEFCTEUgLi4uIEFE RCBDT05TVFJBSU5UIGZvciB0aGUgc2FtZSBjb2x1bW4gLSBQRyBvbmx5CisJCSAqIGFsbG93cyBv bmUgTk9UIE5VTEwgY29uc3RyYWludCBwZXIgY29sdW1uIGFuZCByZWplY3RzIHRoZQorCQkgKiBz ZWNvbmQgd2l0aCBhIG5hbWUgbWlzbWF0Y2ggd2hlbmV2ZXIgdGhlIHNhdmVkIGF1dG8tbmFtZSBu bworCQkgKiBsb25nZXIgbWF0Y2hlcyB0aGUgY3VycmVudCB0YWJsZSBuYW1lIChlLmcuIGFmdGVy IGEgcmVuYW1lLCBvcgorCQkgKiB3aGVuIENSRUFURSBUQUJMRSB1bmlxdWlmaWVzIHRoZSBhdXRv LW5hbWUgdG8gZG9kZ2UgYSBzZXF1ZW5jZQorCQkgKiBjb2xsaXNpb24pLiAgRm9yIGEgbG9jYWxs eS1kZWNsYXJlZCBOT1QgTlVMTCBzaXR0aW5nIG9uIGFuCisJCSAqIGluaGVyaXRlZCAobm9uLWxv Y2FsKSBjb2x1bW4gdGhlIGlubGluZSBwYXRoIG5ldmVyIGZpcmVzLCBzbworCQkgKiBsZWF2ZSB0 aGUgT0lEIG91dCBvZiBza2lwX29pZHMgYW5kIGxldCB0aGUgcG9zdC1DUkVBVEUgbG9vcAorCQkg KiBlbWl0IEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVC4KKwkJICovCisJCWlmIChhdHQt PmF0dGlzbG9jYWwgJiYgc2tpcF9vaWRzICE9IE5VTEwpCisJCQkqc2tpcF9vaWRzID0gbGFwcGVu ZF9vaWQoKnNraXBfb2lkcywgY29uLT5vaWQpOworCX0KKwlzeXN0YWJsZV9lbmRzY2FuKGNvblNj YW4pOworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBl bnRyaWVzOworfQorCisvKgorICogZmluZF9hdHRyZGVmX3RleHQKKyAqCQlSZXR1cm4gdGhlIGRl cGFyc2VkIERFRkFVTFQvR0VORVJBVEVEIGV4cHJlc3Npb24gZm9yIGF0dG51bSBvbiByZWwsCisg KgkJb3IgTlVMTCBpZiBubyBlbnRyeSBleGlzdHMgaW4gVHVwbGVDb25zdHItPmRlZnZhbC4KKyAq CisgKiBUaGUgY2FsbGVyIHBhc3NlcyBhIExpc3QgKiogc28gdGhhdCB0aGUgZGVwYXJzZSBjb250 ZXh0IGlzIGJ1aWx0IGxhemlseQorICogYW5kIHJldXNlZCBhY3Jvc3MgY2FsbHMgKGRlcGFyc2Vf Y29udGV4dF9mb3IgaXMgbm90IGNoZWFwKS4gIFJldHVybmVkCisgKiBzdHJpbmcgaXMgcGFsbG9j J2QgaW4gdGhlIGN1cnJlbnQgbWVtb3J5IGNvbnRleHQ7IGNhbGxlciBwZnJlZSdzIGl0LgorICov CitzdGF0aWMgY2hhciAqCitmaW5kX2F0dHJkZWZfdGV4dChSZWxhdGlvbiByZWwsIEF0dHJOdW1i ZXIgYXR0bnVtLCBMaXN0ICoqZHBjb250ZXh0KQoreworCVR1cGxlQ29uc3RyICpjb25zdHIgPSBS ZWxhdGlvbkdldERlc2NyKHJlbCktPmNvbnN0cjsKKworCWlmIChjb25zdHIgPT0gTlVMTCkKKwkJ cmV0dXJuIE5VTEw7CisKKwlmb3IgKGludCBqID0gMDsgaiA8IGNvbnN0ci0+bnVtX2RlZnZhbDsg aisrKQorCXsKKwkJaWYgKGNvbnN0ci0+ZGVmdmFsW2pdLmFkbnVtICE9IGF0dG51bSkKKwkJCWNv bnRpbnVlOworCisJCWlmICgqZHBjb250ZXh0ID09IE5JTCkKKwkJCSpkcGNvbnRleHQgPSBkZXBh cnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJ CSBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCisJCXJldHVybiBkZXBhcnNlX2V4cHJlc3Npb24o c3RyaW5nVG9Ob2RlKGNvbnN0ci0+ZGVmdmFsW2pdLmFkYmluKSwKKwkJCQkJCQkJICAqZHBjb250 ZXh0LCBmYWxzZSwgZmFsc2UpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGFwcGVu ZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMKKyAqCQlFbWl0IGVhY2ggbG9jYWxseS1kZWNsYXJl ZCBDSEVDSyBjb25zdHJhaW50IG9uIHJlbCBhcworICoJCSJDT05TVFJBSU5UIG5hbWUgPHBnX2dl dF9jb25zdHJhaW50ZGVmPiIsIHNlcGFyYXRlZCBieSAnLCcgZnJvbSBhbnkKKyAqCQlwcmV2aW91 c2x5LWVtaXR0ZWQgY29sdW1uIG9yIGNvbnN0cmFpbnQuCisgKgorICogKmZpcnN0IHRyYWNrcyB3 aGV0aGVyIGFueXRoaW5nIGhhcyBiZWVuIGVtaXR0ZWQgb24gdGhpcyBsaXN0IHlldCwgc28gdGhl CisgKiBjYWxsZXIgY2FuIGNoYWluIGNvbHVtbiBlbWlzc2lvbiBhbmQgY29uc3RyYWludCBlbWlz c2lvbiB0aHJvdWdoIHRoZSBzYW1lCisgKiBidWZmZXIuICBJbmhlcml0ZWQgQ0hFQ0sgY29uc3Ry YWludHMgKCFjb25pc2xvY2FsKSBjb21lIGZyb20gdGhlIHBhcmVudCdzCisgKiBEREwgYW5kIGFy ZW4ndCByZXBlYXRlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2lubGluZV9jaGVj a19jb25zdHJhaW50cyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHByZXR0eSwK KwkJCQkJCQkJYm9vbCAqZmlyc3QpCit7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNj IGNvblNjYW47CisJU2NhbktleURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisKKwlj b25SZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCVNjYW5LZXlJbml0KCZjb25LZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlk LAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERh dHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSkpOworCWNvblNjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgdHJ1 ZSwgTlVMTCwgMSwgJmNvbktleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25UdXAg PSBzeXN0YWJsZV9nZXRuZXh0KGNvblNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBj b24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uVHVwKTsKKwkJRGF0dW0JCWRl ZkRhdHVtOworCQljaGFyCSAgICpkZWZib2R5OworCisJCWlmIChjb24tPmNvbnR5cGUgIT0gQ09O U1RSQUlOVF9DSEVDSykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJ CWNvbnRpbnVlOworCisJCWlmICghKmZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVm LCAnLCcpOworCQlpZiAocHJldHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJc biAgICAiKTsKKwkJZWxzZSBpZiAoISpmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1 ZiwgJyAnKTsKKwkJKmZpcnN0ID0gZmFsc2U7CisKKwkJZGVmRGF0dW0gPSBPaWRGdW5jdGlvbkNh bGwxKEZfUEdfR0VUX0NPTlNUUkFJTlRERUZfT0lELAorCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1 bShjb24tPm9pZCkpOworCQlkZWZib2R5ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhkZWZEYXR1bSk7 CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiQ09OU1RSQUlOVCAlcyAlcyIsCisJCQkJCQkgcXVv dGVfaWRlbnRpZmllcihOYW1lU3RyKGNvbi0+Y29ubmFtZSkpLAorCQkJCQkJIGRlZmJvZHkpOwor CQlwZnJlZShkZWZib2R5KTsKKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJs ZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBhcHBlbmRfY29s dW1uX2RlZnMKKyAqCQlBcHBlbmQgdGhlIGNvbW1hLXNlcGFyYXRlZCBjb2x1bW4gZGVmaW5pdGlv biBsaXN0IGZvciBhIHRhYmxlLgorICoKKyAqIEVtaXRzIGVhY2ggbm9uLWRyb3BwZWQsIGxvY2Fs bHktZGVjbGFyZWQgY29sdW1uIGFzCisgKgkJbmFtZSB0eXBlIFtDT0xMQVRFIHhdIFtTVE9SQUdF IHNdIFtDT01QUkVTU0lPTiBjXQorICoJCVtHRU5FUkFURUQgLi4uIHwgREVGQVVMVCBlXSBbTk9U IE5VTExdCisgKiBmb2xsb3dlZCBieSBhbnkgbG9jYWxseS1kZWNsYXJlZCBpbmxpbmUgQ0hFQ0sg Y29uc3RyYWludHMuICBPcHRpb25hbAorICogY2xhdXNlcyBhcmUgb21pdHRlZCB3aGVuIHRoZWly IHZhbHVlIG1hdGNoZXMgd2hhdCB0aGUgc3lzdGVtIHdvdWxkCisgKiByZWFwcGx5IG9uIHJvdW5k LXRyaXAgKGUuZy4gdHlwZS1kZWZhdWx0IENPTExBVEUsIHR5cGUtZGVmYXVsdCBTVE9SQUdFKS4K KyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9jb2x1bW5fZGVmcyhTdHJpbmdJbmZvIGJ1ZiwgUmVs YXRpb24gcmVsLCBib29sIHByZXR0eSwKKwkJCQkgICBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJ ICAgYm9vbCBzY2hlbWFfcXVhbGlmaWVkLAorCQkJCSAgIExvY2FsTm90TnVsbEVudHJ5ICogbm5f ZW50cmllcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwlPaWQJCQliYXNlX25hbWVzcGFjZSA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCk7CisJTGlz dAkgICAqZHBjb250ZXh0ID0gTklMOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWZvciAoaW50 IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRl IGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJICAgKnR5cHN0cjsKKwor CQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDb2x1 bW5zIGluaGVyaXRlZCBmcm9tIGEgcGFyZW50IGFyZSBlbWl0dGVkIGJ5IHRoZSBJTkhFUklUUyBj bGF1c2UKKwkJICogKG9uY2UgaW1wbGVtZW50ZWQpLCBub3QgdGhlIGNvbHVtbiBsaXN0LCB1bmxl c3MgdGhlIGNoaWxkCisJCSAqIHJlZGVjbGFyZWQgdGhlbSBsb2NhbGx5IChhdHRpc2xvY2FsPXRy dWUpLgorCQkgKi8KKwkJaWYgKCFhdHQtPmF0dGlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQlp ZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCQlpZiAocHJl dHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcbiAgICAiKTsKKwkJZWxzZSBp ZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCQlmaXJzdCA9 IGZhbHNlOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVy KE5hbWVTdHIoYXR0LT5hdHRuYW1lKSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcg Jyk7CisKKwkJdHlwc3RyID0gZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKGF0dC0+YXR0dHlwaWQs IGF0dC0+YXR0dHlwbW9kKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHR5cHN0cik7 CisJCXBmcmVlKHR5cHN0cik7CisKKwkJLyogQ09MTEFURSBjbGF1c2UsIG9ubHkgaWYgaXQgZGlm ZmVycyBmcm9tIHRoZSB0eXBlJ3MgZGVmYXVsdC4gKi8KKwkJaWYgKE9pZElzVmFsaWQoYXR0LT5h dHRjb2xsYXRpb24pICYmCisJCQlhdHQtPmF0dGNvbGxhdGlvbiAhPSBnZXRfdHlwY29sbGF0aW9u KGF0dC0+YXR0dHlwaWQpKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgQ09MTEFURSAlcyIs CisJCQkJCQkJIGdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKGF0dC0+YXR0Y29sbGF0aW9uKSk7CisK KwkJLyogU1RPUkFHRSBjbGF1c2UsIG9ubHkgaWYgaXQgZGlmZmVycyBmcm9tIHRoZSB0eXBlJ3Mg ZGVmYXVsdC4gKi8KKwkJaWYgKGF0dC0+YXR0c3RvcmFnZSAhPSBnZXRfdHlwc3RvcmFnZShhdHQt PmF0dHR5cGlkKSkKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFNUT1JBR0UgJXMiLCBzdG9y YWdlX25hbWUoYXR0LT5hdHRzdG9yYWdlKSk7CisKKwkJLyogQ09NUFJFU1NJT04gY2xhdXNlLCBv bmx5IGlmIGV4cGxpY2l0bHkgc2V0IG9uIHRoZSBjb2x1bW4uICovCisJCWlmIChDb21wcmVzc2lv bk1ldGhvZElzVmFsaWQoYXR0LT5hdHRjb21wcmVzc2lvbikpCisJCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiBDT01QUkVTU0lPTiAlcyIsCisJCQkJCQkJIEdldENvbXByZXNzaW9uTWV0aG9kTmFt ZShhdHQtPmF0dGNvbXByZXNzaW9uKSk7CisKKwkJLyoKKwkJICogTG9vayB1cCB0aGUgZGVmYXVs dC9nZW5lcmF0ZWQgZXhwcmVzc2lvbiB0ZXh0IHVwIGZyb250OyBnZW5lcmF0ZWQKKwkJICogY29s dW1ucyBoYXZlIGF0dGhhc2RlZj10cnVlIHdpdGggYW4gZW50cnkgaW4gcGdfYXR0cmRlZiBqdXN0 IGxpa2UKKwkJICogcmVndWxhciBkZWZhdWx0cy4KKwkJICovCisJCXsKKwkJCWNoYXIJICAgKmRl ZmV4cHIgPSBOVUxMOworCisJCQlpZiAoYXR0LT5hdHRoYXNkZWYpCisJCQkJZGVmZXhwciA9IGZp bmRfYXR0cmRlZl90ZXh0KHJlbCwgYXR0LT5hdHRudW0sICZkcGNvbnRleHQpOworCisJCQkvKiBH RU5FUkFURUQgLyBJREVOVElUWSAvIERFRkFVTFQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gKi8K KwkJCWlmIChhdHQtPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1NUT1JFRCAm JiBkZWZleHByKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCBBTFdBWVMg QVMgKCVzKSBTVE9SRUQiLCBkZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0Z2VuZXJhdGVk ID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCAmJiBkZWZleHByKQorCQkJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCBBTFdBWVMgQVMgKCVzKSBWSVJUVUFMIiwgZGVmZXhw cik7CisJCQllbHNlIGlmIChhdHQtPmF0dGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9B TFdBWVMgfHwKKwkJCQkJIGF0dC0+YXR0aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0JZ X0RFRkFVTFQpCisJCQl7CisJCQkJY29uc3QgY2hhciAqaWRraW5kID0KKwkJCQkJKGF0dC0+YXR0 aWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUykKKwkJCQkJPyAiQUxXQVlTIiA6 ICJCWSBERUZBVUxUIjsKKwkJCQlPaWQJCQlzZXFpZCA9IGdldElkZW50aXR5U2VxdWVuY2UocmVs LCBhdHQtPmF0dG51bSwgdHJ1ZSk7CisKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBHRU5F UkFURUQgJXMgQVMgSURFTlRJVFkiLCBpZGtpbmQpOworCisJCQkJLyoKKwkJCQkgKiBFbWl0IG9u bHkgdGhlIHNlcXVlbmNlIG9wdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aGVpcgorCQkJCSAqIGRl ZmF1bHRzIC0gbWlycm9yaW5nIHBnX2dldF9kYXRhYmFzZV9kZGwncyBwYXR0ZXJuIG9mCisJCQkJ ICogb21pdHRpbmcgdmFsdWVzIHRoYXQgdGhlIHN5c3RlbSB3b3VsZCByZWFwcGx5IG9uIGl0cyBv d24uCisJCQkJICovCisJCQkJaWYgKE9pZElzVmFsaWQoc2VxaWQpKQorCQkJCXsKKwkJCQkJSGVh cFR1cGxlCXNlcVR1cCA9IFNlYXJjaFN5c0NhY2hlMShTRVFSRUxJRCwKKwkJCQkJCQkJCQkJCQkJ IE9iamVjdElkR2V0RGF0dW0oc2VxaWQpKTsKKworCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChz ZXFUdXApKQorCQkJCQl7CisJCQkJCQlGb3JtX3BnX3NlcXVlbmNlIHNlcSA9IChGb3JtX3BnX3Nl cXVlbmNlKSBHRVRTVFJVQ1Qoc2VxVHVwKTsKKwkJCQkJCVN0cmluZ0luZm9EYXRhIG9wdHM7CisJ CQkJCQlib29sCQlmaXJzdF9vcHQgPSB0cnVlOworCQkJCQkJaW50NjQJCWRlZl9taW4sCisJCQkJ CQkJCQlkZWZfbWF4LAorCQkJCQkJCQkJZGVmX3N0YXJ0OworCQkJCQkJaW50NjQJCXR5cF9taW4s CisJCQkJCQkJCQl0eXBfbWF4OworCisJCQkJCQkvKgorCQkJCQkJICogUGVyLXR5cGUgYm91bmRz IGZvciB0aGUgc2VxdWVuY2UncyB1bmRlcmx5aW5nCisJCQkJCQkgKiBpbnRlZ2VyIHR5cGUuICBE ZWZhdWx0cyB0byBpbnQ4IGlmIHRoZSBjb2x1bW4gdHlwZQorCQkJCQkJICogaXMgc29tZXRoaW5n IGVsc2UgKHNob3VsZG4ndCBoYXBwZW4gZm9yIElERU5USVRZLAorCQkJCQkJICogYnV0IGJlIGRl ZmVuc2l2ZSkuCisJCQkJCQkgKi8KKwkJCQkJCXN3aXRjaCAoYXR0LT5hdHR0eXBpZCkKKwkJCQkJ CXsKKwkJCQkJCQljYXNlIElOVDJPSUQ6CisJCQkJCQkJCXR5cF9taW4gPSBQR19JTlQxNl9NSU47 CisJCQkJCQkJCXR5cF9tYXggPSBQR19JTlQxNl9NQVg7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJ CWNhc2UgSU5UNE9JRDoKKwkJCQkJCQkJdHlwX21pbiA9IFBHX0lOVDMyX01JTjsKKwkJCQkJCQkJ dHlwX21heCA9IFBHX0lOVDMyX01BWDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJZGVmYXVsdDoK KwkJCQkJCQkJdHlwX21pbiA9IFBHX0lOVDY0X01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lO VDY0X01BWDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcWlu Y3JlbWVudCA+IDApCisJCQkJCQl7CisJCQkJCQkJZGVmX21pbiA9IDE7CisJCQkJCQkJZGVmX21h eCA9IHR5cF9tYXg7CisJCQkJCQkJZGVmX3N0YXJ0ID0gZGVmX21pbjsKKwkJCQkJCX0KKwkJCQkJ CWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlkZWZfbWluID0gdHlwX21pbjsKKwkJCQkJCQlkZWZfbWF4 ID0gLTE7CisJCQkJCQkJZGVmX3N0YXJ0ID0gZGVmX21heDsKKwkJCQkJCX0KKworCQkJCQkJaW5p dFN0cmluZ0luZm8oJm9wdHMpOworCisJCQkJCQkvKgorCQkJCQkJICogU0VRVUVOQ0UgTkFNRSAt IG9taXQgd2hlbiBpdCBtYXRjaGVzIHRoZSBpbXBsaWNpdAorCQkJCQkJICogIjx0YWJsZW5hbWU+ Xzxjb2x1bW5uYW1lPl9zZXEiIHBhdHRlcm4gaW4gdGhlIHNhbWUKKwkJCQkJCSAqIHNjaGVtYSwg c2luY2UgQ1JFQVRFIFRBQkxFIHdpbGwgcmVnZW5lcmF0ZSB0aGF0CisJCQkJCQkgKiBleGFjdCBu YW1lLiAgVGhlIHNlcXVlbmNlIGlzIGFuIElOVEVSTkFMIGRlcGVuZGVuY3kKKwkJCQkJCSAqIG9m IHRoZSBjb2x1bW4sIHNvIHRoZSBsb2NrIHdlIGhvbGQgb24gdGhlIHRhYmxlCisJCQkJCQkgKiBh bHNvIHBpbnMgaXQsIGJ1dCB0aGUgbG9va3VwIGhlbHBlciBzdGlsbCBkZWZlbmRzCisJCQkJCQkg KiBhZ2FpbnN0IGEgbWlzc2luZyBwZ19jbGFzcyByb3cuCisJCQkJCQkgKi8KKwkJCQkJCXsKKwkJ CQkJCQlIZWFwVHVwbGUJc2VxQ2xhc3NUdXA7CisJCQkJCQkJRm9ybV9wZ19jbGFzcyBzZXFDbGFz czsKKwkJCQkJCQljaGFyCQlhdXRvbmFtZVtOQU1FREFUQUxFTl07CisKKwkJCQkJCQlzZXFDbGFz c1R1cCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsCisJCQkJCQkJCQkJCQkJCSAgT2JqZWN0SWRH ZXREYXR1bShzZXFpZCkpOworCQkJCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXFDbGFzc1R1 cCkpCisJCQkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9V TkRFRklORURfT0JKRUNUKSwKKwkJCQkJCQkJCQkgZXJybXNnKCJpZGVudGl0eSBzZXF1ZW5jZSB3 aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJCQkJCQlzZXFpZCksCisJCQkJCQkJ CQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkp OworCQkJCQkJCXNlcUNsYXNzID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChzZXFDbGFzc1R1 cCk7CisKKwkJCQkJCQlzbnByaW50ZihhdXRvbmFtZSwgc2l6ZW9mKGF1dG9uYW1lKSwgIiVzXyVz X3NlcSIsCisJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJ CSBOYW1lU3RyKGF0dC0+YXR0bmFtZSkpOworCQkJCQkJCWlmIChzZXFDbGFzcy0+cmVsbmFtZXNw YWNlICE9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCkgfHwKKwkJCQkJCQkJc3RyY21wKE5hbWVT dHIoc2VxQ2xhc3MtPnJlbG5hbWUpLCBhdXRvbmFtZSkgIT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJ CWNoYXIJICAgKnNlcVF1YWwgPQorCQkJCQkJCQkJbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoc2Vx aWQsCisJCQkJCQkJCQkJCQkJCQlzY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQkJCQkJYmFz ZV9uYW1lc3BhY2UpOworCisJCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc1NFUVVF TkNFIE5BTUUgJXMiLAorCQkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXFRdWFs KTsKKwkJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQkJCXBmcmVlKHNlcVF1YWwpOwor CQkJCQkJCX0KKwkJCQkJCQlSZWxlYXNlU3lzQ2FjaGUoc2VxQ2xhc3NUdXApOworCQkJCQkJfQor CisJCQkJCQlpZiAoc2VxLT5zZXFzdGFydCAhPSBkZWZfc3RhcnQpCisJCQkJCQl7CisJCQkJCQkJ YXBwZW5kU3RyaW5nSW5mbygmb3B0cywgIiVzU1RBUlQgV0lUSCAiIElOVDY0X0ZPUk1BVCwKKwkJ CQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcXN0YXJ0KTsKKwkJCQkJCQlm aXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcWluY3JlbWVudCAh PSAxKQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0lOQ1JFTUVO VCBCWSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBz ZXEtPnNlcWluY3JlbWVudCk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJ CQkJCQlpZiAoc2VxLT5zZXFtaW4gIT0gZGVmX21pbikKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRT dHJpbmdJbmZvKCZvcHRzLCAiJXNNSU5WQUxVRSAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCQkJCQkJ IGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcW1pbik7CisJCQkJCQkJZmlyc3Rfb3B0ID0g ZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFtYXggIT0gZGVmX21heCkKKwkJCQkJ CXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNNQVhWQUxVRSAiIElOVDY0X0ZP Uk1BVCwKKwkJCQkJCQkJCQkJIGZpcnN0X29wdCA/ICIiIDogIiAiLCBzZXEtPnNlcW1heCk7CisJ CQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFjYWNo ZSAhPSAxKQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc0NBQ0hF ICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+ c2VxY2FjaGUpOworCQkJCQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYg KHNlcS0+c2VxY3ljbGUpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmb3B0cywg IiVzQ1lDTEUiLCBmaXJzdF9vcHQgPyAiIiA6ICIgIik7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFs c2U7CisJCQkJCQl9CisKKwkJCQkJCWlmICghZmlyc3Rfb3B0KQorCQkJCQkJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiICglcykiLCBvcHRzLmRhdGEpOworCisJCQkJCQlwZnJlZShvcHRzLmRhdGEp OworCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHNlcVR1cCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJ CQllbHNlIGlmIChkZWZleHByKQorCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIERFRkFVTFQg JXMiLCBkZWZleHByKTsKKworCQkJaWYgKGRlZmV4cHIpCisJCQkJcGZyZWUoZGVmZXhwcik7CisJ CX0KKworCQlpZiAoYXR0LT5hdHRub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRyeSAq bm4gPSAmbm5fZW50cmllc1thdHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBOVUxM ICYmICFubi0+aXNfYXV0bykKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT05TVFJBSU5U ICVzIE5PVCBOVUxMIiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUpKTsKKwkJ CWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBOT1QgTlVMTCIpOworCQkJ aWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICIgTk8gSU5IRVJJVCIpOworCQl9CisJfQorCisJLyoKKwkgKiBUYWJs ZS1sZXZlbCBDSEVDSyBjb25zdHJhaW50cyAtIGVtaXR0ZWQgaW5saW5lIGluIHRoZSBDUkVBVEUg VEFCTEUgYm9keQorCSAqIHNvIHRoZXkgYXBwZWFyIGFsb25nc2lkZSB0aGUgY29sdW1ucyAodGhl IHBnX2R1bXAgc2hhcGUpLiAgVGhlCisJICogY29uc3RyYWludCBsb29wIGxhdGVyIGluIHBnX2dl dF90YWJsZV9kZGxfaW50ZXJuYWwgc2tpcHMgQ0hFQ0sKKwkgKiBjb25zdHJhaW50cyB0byBhdm9p ZCBkb3VibGUtZW1pc3Npb24uCisJICovCisJaWYgKGluY2x1ZGVfY2hlY2spCisJCWFwcGVuZF9p bmxpbmVfY2hlY2tfY29uc3RyYWludHMoYnVmLCByZWwsIHByZXR0eSwgJmZpcnN0KTsKK30KKwor LyoKKyAqIGFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzCisgKgkJRm9yIGEgdHlwZWQgdGFi bGUgKENSRUFURSBUQUJMRSAuLi4gT0YgdHlwZV9uYW1lKSwgYXBwZW5kIHRoZQorICoJCW9wdGlv bmFsICIoY29sIFdJVEggT1BUSU9OUyAuLi4sIC4uLikiIGxpc3QgY2FycnlpbmcgbG9jYWxseQor ICoJCWFwcGxpZWQgcGVyLWNvbHVtbiBvdmVycmlkZXMgLSBERUZBVUxULCBOT1QgTlVMTCwgYW5k IGFueSBsb2NhbGx5CisgKgkJZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMuCisgKgorICogQ29s dW1ucyB3aG9zZSB0eXBlIGlzIGZ1bGx5IGRpY3RhdGVkIGJ5IHJlbG9mdHlwZSBlbWl0IG5vdGhp bmcuICBUaGUKKyAqIHBhcmVudGhlc2lzZWQgbGlzdCBpcyBzdXBwcmVzc2VkIGVudGlyZWx5IHdo ZW4gbm8gY29sdW1uIG5lZWRzIGFuCisgKiBvdmVycmlkZSBhbmQgdGhlcmUgYXJlIG5vIGxvY2Fs bHktZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWludHMsIG1hdGNoaW5nCisgKiB0aGUgY2Fub25pY2Fs ICJDUkVBVEUgVEFCTEUgeCBPRiB0OyIgc2hhcGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRf dHlwZWRfY29sdW1uX292ZXJyaWRlcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29s IHByZXR0eSwKKwkJCQkJCQkgIGJvb2wgaW5jbHVkZV9jaGVjaywKKwkJCQkJCQkgIExvY2FsTm90 TnVsbEVudHJ5ICogbm5fZW50cmllcykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IocmVsKTsKKwlMaXN0CSAgICpkcGNvbnRleHQgPSBOSUw7CisJU3RyaW5nSW5mb0Rh dGEgaW5uZXI7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaW5pdFN0cmluZ0luZm8oJmlubmVy KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZv cm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJ ICAgKmRlZmV4cHIgPSBOVUxMOworCQlib29sCQloYXNfZGVmYXVsdDsKKwkJYm9vbAkJaGFzX25v dG51bGw7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJaWYg KGF0dC0+YXR0aGFzZGVmKQorCQkJZGVmZXhwciA9IGZpbmRfYXR0cmRlZl90ZXh0KHJlbCwgYXR0 LT5hdHRudW0sICZkcGNvbnRleHQpOworCisJCWhhc19kZWZhdWx0ID0gKGRlZmV4cHIgIT0gTlVM TCk7CisJCWhhc19ub3RudWxsID0gYXR0LT5hdHRub3RudWxsOworCisJCWlmICghaGFzX2RlZmF1 bHQgJiYgIWhhc19ub3RudWxsKQorCQl7CisJCQlpZiAoZGVmZXhwcikKKwkJCQlwZnJlZShkZWZl eHByKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKCZpbm5lciwgJywnKTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmlubmVyLCAiXG4gICAgIik7CisJCWVsc2UgaWYgKCFmaXJzdCkKKwkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyKCZpbm5lciwgJyAnKTsKKwkJZmlyc3QgPSBmYWxzZTsKKworCQlhcHBl bmRTdHJpbmdJbmZvKCZpbm5lciwgIiVzIFdJVEggT1BUSU9OUyIsCisJCQkJCQkgcXVvdGVfaWRl bnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJaWYgKGhhc19kZWZhdWx0KQorCQkJ YXBwZW5kU3RyaW5nSW5mbygmaW5uZXIsICIgREVGQVVMVCAlcyIsIGRlZmV4cHIpOworCQlpZiAo aGFzX25vdG51bGwpCisJCXsKKwkJCUxvY2FsTm90TnVsbEVudHJ5ICpubiA9ICZubl9lbnRyaWVz W2F0dC0+YXR0bnVtXTsKKworCQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgIW5uLT5pc19hdXRv KQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiIENPTlNUUkFJTlQgJXMgTk9UIE5VTEwi LAorCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihubi0+bmFtZSkpOworCQkJZWxzZQorCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmlubmVyLCAiIE5PVCBOVUxMIik7CisJCQlpZiAobm4tPm5h bWUgIT0gTlVMTCAmJiBubi0+bm9faW5oZXJpdCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZpbm5lciwgIiBOTyBJTkhFUklUIik7CisJCX0KKworCQlpZiAoZGVmZXhwcikKKwkJCXBmcmVl KGRlZmV4cHIpOworCX0KKworCS8qCisJICogTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJh aW50cyBvbiBhIHR5cGVkIHRhYmxlIGJlbG9uZyBpbiB0aGUKKwkgKiBjb2x1bW4tbGlzdCBwYXJl bnRoZXNlcywgc2FtZSBhcyBmb3IgYW4gdW50eXBlZCB0YWJsZS4gIFRoZSBvdXQtb2YtbGluZQor CSAqIGNvbnN0cmFpbnQgbG9vcCBsYXRlciBzdGlsbCBza2lwcyBDSEVDS3MuCisJICovCisJaWYg KGluY2x1ZGVfY2hlY2spCisJCWFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMoJmlubmVy LCByZWwsIHByZXR0eSwgJmZpcnN0KTsKKworCWlmICghZmlyc3QpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgIiAoIik7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBp bm5lci5kYXRhKTsKKwkJaWYgKHByZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCAiXG4pIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKKwl9 CisJcGZyZWUoaW5uZXIuZGF0YSk7Cit9CisKKy8qCisgKiBhcHBlbmRfc3RtdCAvIGFwcGVuZF9z dHJpcHBlZF9zdG10CisgKgkJUHVzaCBjdHgtPmJ1ZiBvbnRvIGN0eC0+c3RhdGVtZW50cy4KKyAq CisgKiBhcHBlbmRfc3RtdCBpcyB1c2VkIGZvciBlbWlzc2lvbnMgd2hlcmUgdGhlIHRhYmxlIHJl ZmVyZW5jZSBpcyBidWlsdAorICogZnJvbSBjdHgtPnF1YWxuYW1lIChhbHJlYWR5IHBhcnRpYWwt cXVhbGlmaWVkIHBlciBzY2hlbWFfcXVhbGlmaWVkKS4KKyAqIGFwcGVuZF9zdHJpcHBlZF9zdG10 IGlzIHVzZWQgYWZ0ZXIgaW52b2tpbmcgYWx3YXlzLXF1YWxpZmllZCBydWxldXRpbHMKKyAqIGhl bHBlcnMgKHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQsIHBnX2dldF9pbmRleGRlZl9zdHJp bmcsCisgKiBwZ19nZXRfcnVsZWRlZiwgcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKSAt IHdoZW4KKyAqIHNjaGVtYV9xdWFsaWZpZWQgaXMgZmFsc2UsIHRoZSBiYXNlLXNjaGVtYSBwcmVm aXggaXMgc3RyaXBwZWQgZnJvbQorICogdGhlaXIgb3V0cHV0IHNvIHRoZSBlbWl0dGVkIERETCBp cyByZXBsYXktcmVsb2NhdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RtdChUYWJs ZURkbENvbnRleHQgKiBjdHgpCit7CisJY3R4LT5zdGF0ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0 YXRlbWVudHMsIHBzdHJkdXAoY3R4LT5idWYuZGF0YSkpOworfQorCitzdGF0aWMgdm9pZAorYXBw ZW5kX3N0cmlwcGVkX3N0bXQoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWlmIChjdHgtPnNj aGVtYV9wcmVmaXggIT0gTlVMTCkKKwkJY3R4LT5zdGF0ZW1lbnRzID0gbGFwcGVuZChjdHgtPnN0 YXRlbWVudHMsCisJCQkJCQkJCSAgc3RyaXBfc2NoZW1hX3ByZWZpeChjdHgtPmJ1Zi5kYXRhLAor CQkJCQkJCQkJCQkJCSAgY3R4LT5zY2hlbWFfcHJlZml4KSk7CisJZWxzZQorCQljdHgtPnN0YXRl bWVudHMgPSBsYXBwZW5kKGN0eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7 Cit9CisKKy8qCisgKiBlbWl0X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRp bmcgQ1JFQVRFIFRBQkxFIHN0YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRF TVBPUkFSWSAvIFVOTE9HR0VEKSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLwor ICoJCVBBUlRJVElPTiBPRiBwYXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBt ZXRob2QsCisgKgkJV0lUSCAocmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQu CisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4 dCAqIGN0eCkKK3sKKwlSZWxhdGlvbglyZWwgPSBjdHgtPnJlbDsKKwljaGFyCQlyZWxwZXJzaXN0 ZW5jZSA9IHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZTsKKwljaGFyCQlyZWxraW5kID0gcmVs LT5yZF9yZWwtPnJlbGtpbmQ7CisJYm9vbAkJaXNfdHlwZWQgPSBPaWRJc1ZhbGlkKHJlbC0+cmRf cmVsLT5yZWxvZnR5cGUpOworCUhlYXBUdXBsZQljbGFzc3R1cDsKKwlEYXR1bQkJcmVsb3B0RGF0 dW07CisJYm9vbAkJcmVsb3B0SXNudWxsOworCisJY2xhc3N0dXAgPSBTZWFyY2hTeXNDYWNoZTEo UkVMT0lELCBPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoY2xhc3N0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig cmVsYXRpb24gJXUiLCBjdHgtPnJlbGlkKTsKKworCXJlbG9wdERhdHVtID0gU3lzQ2FjaGVHZXRB dHRyKFJFTE9JRCwgY2xhc3N0dXAsCisJCQkJCQkJCSAgQW51bV9wZ19jbGFzc19yZWxvcHRpb25z LCAmcmVsb3B0SXNudWxsKTsKKworCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiQ1JFQVRFICIpOworCWlmIChyZWxwZXJzaXN0 ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZj dHgtPmJ1ZiwgIlRFTVBPUkFSWSAiKTsKKwllbHNlIGlmIChyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9VTkxPR0dFRCkKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYs ICJVTkxPR0dFRCAiKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIlRBQkxFICVzIiwg Y3R4LT5xdWFsbmFtZSk7CisKKwlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCXsK KwkJT2lkCQkJcGFyZW50T2lkID0gZ2V0X3BhcnRpdGlvbl9wYXJlbnQoY3R4LT5yZWxpZCwgdHJ1 ZSk7CisJCWNoYXIJICAgKnBhcmVudFF1YWwgPSBsb29rdXBfcmVsbmFtZV9mb3JfZW1pdChwYXJl bnRPaWQsCisJCQkJCQkJCQkJCQkJCSBjdHgtPnNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkJ CQkJCSBjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKwkJY2hhcgkgICAqcGFyZW50UmVsbmFtZSA9IGdl dF9yZWxfbmFtZShwYXJlbnRPaWQpOworCQlEYXR1bQkJYm91bmREYXR1bTsKKwkJYm9vbAkJYm91 bmRJc251bGw7CisJCWNoYXIJICAgKmZvclZhbHVlcyA9IE5VTEw7CisJCWNoYXIJICAgKmJvdW5k U3RyID0gTlVMTDsKKworCQlpZiAocGFyZW50UmVsbmFtZSA9PSBOVUxMKQorCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVy cm1zZygicGFydGl0aW9uIHBhcmVudCB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJ CQkJcGFyZW50T2lkKSwKKwkJCQkJIGVycmRldGFpbCgiSXQgbWF5IGhhdmUgYmVlbiBjb25jdXJy ZW50bHkgZHJvcHBlZC4iKSkpOworCisJCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVM T0lELCBjbGFzc3R1cCwKKwkJCQkJCQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwgJmJv dW5kSXNudWxsKTsKKwkJaWYgKCFib3VuZElzbnVsbCkKKwkJeworCQkJTm9kZQkgICAqYm91bmRO b2RlOworCQkJTGlzdAkgICAqZHBjb250ZXh0OworCisJCQlib3VuZFN0ciA9IFRleHREYXR1bUdl dENTdHJpbmcoYm91bmREYXR1bSk7CisJCQlib3VuZE5vZGUgPSBzdHJpbmdUb05vZGUoYm91bmRT dHIpOworCQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihwYXJlbnRSZWxuYW1lLCBw YXJlbnRPaWQpOworCQkJZm9yVmFsdWVzID0gZGVwYXJzZV9leHByZXNzaW9uKGJvdW5kTm9kZSwg ZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4 LT5idWYsICIgUEFSVElUSU9OIE9GICVzICVzIiwKKwkJCQkJCSBwYXJlbnRRdWFsLCBmb3JWYWx1 ZXMgPyBmb3JWYWx1ZXMgOiAiREVGQVVMVCIpOworCQlpZiAoZm9yVmFsdWVzKQorCQkJcGZyZWUo Zm9yVmFsdWVzKTsKKwkJaWYgKGJvdW5kU3RyKQorCQkJcGZyZWUoYm91bmRTdHIpOworCQlwZnJl ZShwYXJlbnRRdWFsKTsKKwkJcGZyZWUocGFyZW50UmVsbmFtZSk7CisJfQorCWVsc2UgaWYgKGlz X3R5cGVkKQorCXsKKwkJY2hhcgkgICAqdHlwbmFtZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmll ZChyZWwtPnJkX3JlbC0+cmVsb2Z0eXBlKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1 ZiwgIiBPRiAlcyIsIHR5cG5hbWUpOworCQlwZnJlZSh0eXBuYW1lKTsKKworCQlhcHBlbmRfdHlw ZWRfY29sdW1uX292ZXJyaWRlcygmY3R4LT5idWYsIHJlbCwgY3R4LT5wcmV0dHksCisJCQkJCQkJ CQkgIGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSyksCisJCQkJCQkJ CQkgIGN0eC0+bm5fZW50cmllcyk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnBhcmVudHM7 CisJCUxpc3RDZWxsICAgKmxjOworCQlib29sCQlmaXJzdDsKKworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZjdHgtPmJ1ZiwgIiAoIik7CisKKwkJYXBwZW5kX2NvbHVtbl9kZWZzKCZjdHgtPmJ1 ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCSAgIGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJM RV9ERExfS0lORF9DSEVDSyksCisJCQkJCQkgICBjdHgtPnNjaGVtYV9xdWFsaWZpZWQsIGN0eC0+ bm5fZW50cmllcyk7CisKKwkJaWYgKGN0eC0+cHJldHR5KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmY3R4LT5idWYsICJcbikiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo JmN0eC0+YnVmLCAnKScpOworCisJCXBhcmVudHMgPSBmaW5kX2luaGVyaXRhbmNlX3BhcmVudHMo Y3R4LT5yZWxpZCwgTm9Mb2NrKTsKKwkJaWYgKHBhcmVudHMgIT0gTklMKQorCQl7CisJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBJTkhFUklUUyAoIik7CisJCQlmaXJzdCA9 IHRydWU7CisJCQlmb3JlYWNoKGxjLCBwYXJlbnRzKQorCQkJeworCQkJCU9pZAkJCXBvaWQgPSBs Zmlyc3Rfb2lkKGxjKTsKKwkJCQljaGFyCSAgICpwbmFtZSA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9l bWl0KHBvaWQsCisJCQkJCQkJCQkJCQkJCQljdHgtPnNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJ CQkJCQkJCQljdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCQkJCWlmICghZmlyc3QpCisJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiLCAiKTsKKwkJCQlmaXJzdCA9IGZhbHNl OworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCBwbmFtZSk7CisJCQkJcGZy ZWUocG5hbWUpOworCQkJfQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmN0eC0+YnVmLCAnKScp OworCQkJbGlzdF9mcmVlKHBhcmVudHMpOworCQl9CisJfQorCisJaWYgKHJlbGtpbmQgPT0gUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwl7CisJCURhdHVtCQlwYXJ0a2V5RGF0dW07CisJCWNo YXIJICAgKnBhcnRrZXk7CisKKwkJcGFydGtleURhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShGX1BH X0dFVF9QQVJUS0VZREVGLAorCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkp OworCQlwYXJ0a2V5ID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwYXJ0a2V5RGF0dW0pOworCQlhcHBl bmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBQQVJUSVRJT04gQlkgJXMiLCBwYXJ0a2V5KTsKKwkJ cGZyZWUocGFydGtleSk7CisJfQorCisJaWYgKE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbGFt KSAmJgorCQlyZWwtPnJkX3JlbC0+cmVsYW0gIT0gSEVBUF9UQUJMRV9BTV9PSUQpCisJeworCQlj aGFyCSAgICphbW5hbWUgPSBnZXRfYW1fbmFtZShyZWwtPnJkX3JlbC0+cmVsYW0pOworCisJCWlm IChhbW5hbWUgIT0gTlVMTCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIg VVNJTkcgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGFtbmFtZSkpOworCQkJcGZyZWUo YW1uYW1lKTsKKwkJfQorCX0KKworCWlmICghcmVsb3B0SXNudWxsKQorCXsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIgV0lUSCAoIik7CisJCWdldF9yZWxvcHRpb25zKCZj dHgtPmJ1ZiwgcmVsb3B0RGF0dW0pOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYs ICcpJyk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGNsYXNzdHVwKTsKKworCWlmICghY3R4LT5u b190YWJsZXNwYWNlICYmIE9pZElzVmFsaWQocmVsLT5yZF9yZWwtPnJlbHRhYmxlc3BhY2UpKQor CXsKKwkJY2hhcgkgICAqdHNuYW1lID0gZ2V0X3RhYmxlc3BhY2VfbmFtZShyZWwtPnJkX3JlbC0+ cmVsdGFibGVzcGFjZSk7CisKKwkJaWYgKHRzbmFtZSAhPSBOVUxMKQorCQl7CisJCQlhcHBlbmRT dHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBUQUJMRVNQQUNFICVzIiwKKwkJCQkJCQkgcXVvdGVfaWRl bnRpZmllcih0c25hbWUpKTsKKwkJCXBmcmVlKHRzbmFtZSk7CisJCX0KKwl9CisKKwlpZiAocmVs cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwl7CisJCU9uQ29tbWl0QWN0aW9u IG9jID0gZ2V0X29uX2NvbW1pdF9hY3Rpb24oY3R4LT5yZWxpZCk7CisKKwkJaWYgKG9jID09IE9O Q09NTUlUX0RFTEVURV9ST1dTKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYs ICIgT04gQ09NTUlUIERFTEVURSBST1dTIik7CisJCWVsc2UgaWYgKG9jID09IE9OQ09NTUlUX0RS T1ApCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBPTiBDT01NSVQgRFJP UCIpOworCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1ZiwgJzsnKTsKKwlhcHBl bmRfc3RtdChjdHgpOworfQorCisvKgorICogZW1pdF9vd25lcl9zdG10CisgKgkJQUxURVIgVEFC TEUgcXVhbG5hbWUgT1dORVIgVE8gcm9sZS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfb3duZXJf c3RtdChUYWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJY2hhcgkgICAqb3duZXI7CisKKwlpZiAo Y3R4LT5ub19vd25lcikKKwkJcmV0dXJuOworCisJb3duZXIgPSBHZXRVc2VyTmFtZUZyb21JZChj dHgtPnJlbC0+cmRfcmVsLT5yZWxvd25lciwgZmFsc2UpOworCXJlc2V0U3RyaW5nSW5mbygmY3R4 LT5idWYpOworCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiQUxURVIgVEFCTEUgJXMgT1dO RVIgVE8gJXM7IiwKKwkJCQkJIGN0eC0+cXVhbG5hbWUsIHF1b3RlX2lkZW50aWZpZXIob3duZXIp KTsKKwlhcHBlbmRfc3RtdChjdHgpOworCXBmcmVlKG93bmVyKTsKK30KKworLyoKKyAqIGVtaXRf Y2hpbGRfZGVmYXVsdF9vdmVycmlkZXMKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBD T0xVTU4gY29sIFNFVCBERUZBVUxUIGV4cHIgLSBvbmUgcGVyCisgKgkJaW5oZXJpdGVkIChhdHRp c2xvY2FsPWZhbHNlKSBub24tZ2VuZXJhdGVkIGNvbHVtbiBjYXJyeWluZyBhCisgKgkJbG9jYWxs eS1zZXQgZGVmYXVsdC4gIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBza2lwcGVkOiB0aGVpcgorICoJ CWV4cHJlc3Npb24gaXMgaW5oZXJpdGVkIGF1dG9tYXRpY2FsbHkgYW5kIFNFVCBERUZBVUxUIHdv dWxkCisgKgkJZmFpbCBhdCByZXBsYXkuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2NoaWxkX2Rl ZmF1bHRfb3ZlcnJpZGVzKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkKK3sKKwlUdXBsZURlc2MJdHVw ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoY3R4LT5yZWwpOworCUxpc3QJICAgKmRwY29udGV4dCA9 IE5JTDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJ CUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNo YXIJICAgKmRlZnN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5hdHRpc2xv Y2FsIHx8ICFhdHQtPmF0dGhhc2RlZikKKwkJCWNvbnRpbnVlOworCQlpZiAoYXR0LT5hdHRnZW5l cmF0ZWQgIT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCisJCWRlZnN0ciA9IGZpbmRfYXR0cmRlZl90 ZXh0KGN0eC0+cmVsLCBhdHQtPmF0dG51bSwgJmRwY29udGV4dCk7CisJCWlmIChkZWZzdHIgPT0g TlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlh cHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIg Q09MVU1OICVzIFNFVCBERUZBVUxUICVzOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJ CSBxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSksCisJCQkJCQkgZGVmc3Ry KTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUoZGVmc3RyKTsKKwl9Cit9CisKKy8qCisg KiBlbWl0X2F0dG9wdGlvbnMKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBDT0xVTU4g Y29sIFNFVCAoLi4uKSAtIG9uZSBwZXIgY29sdW1uCisgKgkJd2l0aCBub24tbnVsbCBwZ19hdHRy aWJ1dGUuYXR0b3B0aW9ucy4gIFRoZSBpbmxpbmUgZm9ybSBvZiB0aGVzZQorICoJCW9wdGlvbnMg aXNuJ3QgYXZhaWxhYmxlIGluIENSRUFURSBUQUJMRSwgc28gdGhleSBjb21lIG91dCBoZXJlLgor ICovCitzdGF0aWMgdm9pZAorZW1pdF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkK K3sKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IoY3R4LT5yZWwpOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19h dHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBpKTsKKwkJSGVhcFR1cGxlCWF0 dFR1cDsKKwkJRGF0dW0JCW9wdERhdHVtOworCQlib29sCQlvcHRJc251bGw7CisKKwkJaWYgKGF0 dC0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJYXR0VHVwID0gU2VhcmNoU3lzQ2Fj aGUyKEFUVE5VTSwKKwkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCksCisJCQkJ CQkJCSBJbnQxNkdldERhdHVtKGF0dC0+YXR0bnVtKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxp ZChhdHRUdXApKQorCQkJY29udGludWU7CisKKwkJb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo QVRUTlVNLCBhdHRUdXAsCisJCQkJCQkJCSAgIEFudW1fcGdfYXR0cmlidXRlX2F0dG9wdGlvbnMs ICZvcHRJc251bGwpOworCQlpZiAoIW9wdElzbnVsbCkKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZv KCZjdHgtPmJ1Zik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkgIkFM VEVSIFRBQkxFICVzIEFMVEVSIENPTFVNTiAlcyBTRVQgKCIsCisJCQkJCQkJIGN0eC0+cXVhbG5h bWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJ CQlnZXRfcmVsb3B0aW9ucygmY3R4LT5idWYsIG9wdERhdHVtKTsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmN0eC0+YnVmLCAiKTsiKTsKKwkJCWFwcGVuZF9zdG10KGN0eCk7CisJCX0KKwkJ UmVsZWFzZVN5c0NhY2hlKGF0dFR1cCk7CisJfQorfQorCisvKgorICogZW1pdF9pbmRleGVzCisg KgkJQ1JFQVRFIElOREVYIHBlciBub24tY29uc3RyYWludC1iYWNrZWQgaW5kZXggb24gdGhlIHJl bGF0aW9uLgorICoJCUluZGV4ZXMgdGhhdCBiYWNrIFBLIC8gVU5JUVVFIC8gRVhDTFVERSBjb25z dHJhaW50cyBhcmUgZW1pdHRlZAorICoJCW91dC1vZi1saW5lIGJ5IGVtaXRfbG9jYWxfY29uc3Ry YWludHMgKHRoZSBBTFRFUiBUQUJMRSAuLi4gQURECisgKgkJQ09OU1RSQUlOVCBzdGF0ZW1lbnQg Y3JlYXRlcyB0aGUgaW5kZXggaW1wbGljaXRseSkuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2lu ZGV4ZXMoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCUxpc3QJICAgKmluZGV4b2lkczsKKwlM aXN0Q2VsbCAgICpsYzsKKworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9L SU5EX0lOREVYKSkKKwkJcmV0dXJuOworCisJaW5kZXhvaWRzID0gUmVsYXRpb25HZXRJbmRleExp c3QoY3R4LT5yZWwpOworCWZvcmVhY2gobGMsIGluZGV4b2lkcykKKwl7CisJCU9pZAkJCWlkeG9p ZCA9IGxmaXJzdF9vaWQobGMpOworCQljaGFyCSAgICppZHhkZWY7CisKKwkJaWYgKE9pZElzVmFs aWQoZ2V0X2luZGV4X2NvbnN0cmFpbnQoaWR4b2lkKSkpCisJCQljb250aW51ZTsKKworCQlpZHhk ZWYgPSBwZ19nZXRfaW5kZXhkZWZfc3RyaW5nKGlkeG9pZCk7CisJCXJlc2V0U3RyaW5nSW5mbygm Y3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiVzOyIsIGlkeGRlZik7 CisJCWFwcGVuZF9zdHJpcHBlZF9zdG10KGN0eCk7CisJCXBmcmVlKGlkeGRlZik7CisJfQorCWxp c3RfZnJlZShpbmRleG9pZHMpOworfQorCisvKgorICogZW1pdF9sb2NhbF9jb25zdHJhaW50cwor ICoJCUFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBmb3IgZWFjaCBsb2NhbGx5LWRlZmlu ZWQgY29uc3RyYWludAorICoJCW9uIHRoZSByZWxhdGlvbi4gIEluaGVyaXRlZCBjb25zdHJhaW50 cyAoY29uaXNsb2NhbD1mYWxzZSkgY29tZQorICoJCWZyb20gdGhlIHBhcmVudCdzIERETC4gIENI RUNLIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkIGlubGluZSBmb3IKKyAqCQlyZWd1bGFyL3R5cGVk IHRhYmxlcyAoc2tpcCBoZXJlKSBidXQgb3V0LW9mLWxpbmUgZm9yIHBhcnRpdGlvbgorICoJCWNo aWxkcmVuIChubyBjb2x1bW4gbGlzdCB0byBsaXZlIGluKS4gIExvY2FsIE5PVCBOVUxMCisgKgkJ Y29uc3RyYWludHMgb24gYXR0aXNsb2NhbCBjb2x1bW5zIC0gd2hldGhlciB1c2VyLW5hbWVkIG9y CisgKgkJbWF0Y2hpbmcgdGhlIGF1dG8tbmFtZSBwYXR0ZXJuIC0gYXJlIGVtaXR0ZWQgaW5saW5l IGJ5IHRoZQorICoJCWNvbHVtbi1lbWl0IGhlbHBlcnMgYW5kIGFyZSBza2lwcGVkIHZpYSBza2lw X25vdG51bGxfb2lkcywKKyAqCQliZWNhdXNlIFBHIG9ubHkgYWxsb3dzIG9uZSBOT1QgTlVMTCBw ZXIgY29sdW1uIGFuZCB3b3VsZCByZWplY3QKKyAqCQlhIHNlY29uZCBBTFRFUiBUQUJMRSAuLi4g QUREIENPTlNUUkFJTlQuICBQYXJ0aXRpb24gY2hpbGRyZW4KKyAqCQloYXZlIG5vIGNvbHVtbiBs aXN0LCBzbyB0aGVpciBOT1QgTlVMTHMgZmFsbCB0aHJvdWdoIGhlcmUuCisgKgorICoJCUVhY2gg Y29udHlwZSBpcyBnYXRlZCBvbiB0aGUgbWF0Y2hpbmcga2luZCBpbiB0aGUgb25seSAvIGV4Y2Vw dAorICoJCXZvY2FidWxhcnksIHNvIGNhbGxlcnMgY2FuIHByb2R1Y2UgZS5nLiBhbiBGSy1vbmx5 IHBhc3MKKyAqCQkob25seSA9PiAnZm9yZWlnbl9rZXknKSBvciBhIHB1Yi9zdWIgY2xvbmUgdGhh dCBrZWVwcyBvbmx5CisgKgkJdGhlIHByaW1hcnkga2V5IChleGNlcHQgPT4gJ3VuaXF1ZSxjaGVj ayxmb3JlaWduX2tleSxleGNsdXNpb24nKS4KKyAqCQlOT1QgTlVMTCBpcyBpbnRlbnRpb25hbGx5 IG5vdCBpbiB0aGUgdm9jYWJ1bGFyeSAtIGFsd2F5cyBlbWl0dGVkCisgKgkJc28gY2xvbmVkIHNj aGVtYXMgZG9uJ3Qgc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQKKyAqCQlo YXZlIHJlamVjdGVkLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9sb2NhbF9jb25zdHJhaW50cyhU YWJsZURkbENvbnRleHQgKiBjdHgpCit7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNj IGNvblNjYW47CisJU2NhbktleURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisJYm9v bAkJaXNfcGFydGl0aW9uID0gY3R4LT5yZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb247CisKKwlj b25SZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCVNjYW5LZXlJbml0KCZjb25LZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlk LAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERh dHVtKGN0eC0+cmVsaWQpKTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwg Q29uc3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEs ICZjb25LZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVf Z2V0bmV4dChjb25TY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1f cGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisJCWNoYXIJICAgKmNvbmRlZjsKKwor CQlpZiAoIWNvbi0+Y29uaXNsb2NhbCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEVhY2gg Y29udHlwZSBpcyBnYXRlZCBvbiBpdHMga2luZCBpbiB0aGUgb25seSAvIGV4Y2VwdAorCQkgKiB2 b2NhYnVsYXJ5LiAgQ0hFQ0sgaXMgYWxzbyBza2lwcGVkIGZvciBub24tcGFydGl0aW9uIHJlbGF0 aW9ucworCQkgKiBiZWNhdXNlIGFwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMgZW1pdHMg dGhvc2UgaW5saW5lIGluCisJCSAqIHRoZSBDUkVBVEUgVEFCTEUgYm9keTsgcGFydGl0aW9uIGNo aWxkcmVuIGhhdmUgbm8gY29sdW1uIGxpc3QKKwkJICogdG8gbGl2ZSBpbiwgc28gdGhleSBjb21l IHRocm91Z2ggdGhpcyBsb29wLiAgTk9UIE5VTEwgaXMgbm90IGEKKwkJICogZmlsdGVyYWJsZSBr aW5kIC0gZW1pdHRlZCB1bmNvbmRpdGlvbmFsbHkgdG8gYXZvaWQgcHJvZHVjaW5nCisJCSAqIHNj aGVtYXMgdGhhdCBzaWxlbnRseSBhY2NlcHQgTlVMTHMgdGhlIHNvdXJjZSB3b3VsZCBoYXZlCisJ CSAqIHJlamVjdGVkLgorCQkgKi8KKwkJc3dpdGNoIChjb24tPmNvbnR5cGUpCisJCXsKKwkJCWNh c2UgQ09OU1RSQUlOVF9QUklNQVJZOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRB QkxFX0RETF9LSU5EX1BSSU1BUllfS0VZKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJ CQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgs IFRBQkxFX0RETF9LSU5EX1VOSVFVRSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJ Y2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRB QkxFX0RETF9LSU5EX0NIRUNLKSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKgorCQkJCSAqIEZv ciBub24tcGFydGl0aW9uIHJlbGF0aW9ucywgQ0hFQ0sgaXMgbm9ybWFsbHkgZW1pdHRlZAorCQkJ CSAqIGlubGluZSBpbiB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkgYnkKKwkJCQkgKiBhcHBlbmRfaW5s aW5lX2NoZWNrX2NvbnN0cmFpbnRzLCBzbyB3ZSBza2lwIGl0IGhlcmUgdG8KKwkJCQkgKiBhdm9p ZCBkb3VibGUgZW1pc3Npb24uICBCdXQgd2hlbiBLSU5EX1RBQkxFIGlzIG5vdCBpbgorCQkJCSAq IHRoZSBhY3RpdmUgZmlsdGVyIChlLmcuIG9ubHk9PidjaGVjaycgb3IgYSBjbG9uZSB0aGF0CisJ CQkJICogdGFyZ2V0cyBvbmx5IHN1Yi1vYmplY3RzKSwgdGhlIGlubGluZSBwYXNzIG5ldmVyIHJ1 bnM7CisJCQkJICogZmFsbCB0aHJvdWdoIGFuZCBlbWl0IGVhY2ggQ0hFQ0sgdmlhIEFMVEVSIFRB QkxFIHNvIHRoZQorCQkJCSAqIHVzZXIgYWN0dWFsbHkgZ2V0cyB0aGUgY29uc3RyYWludCB0aGV5 IGFza2VkIGZvci4KKwkJCQkgKi8KKwkJCQlpZiAoIWlzX3BhcnRpdGlvbiAmJgorCQkJCQlpc19r aW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCQkJCQljb250aW51ZTsK KwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9GT1JFSUdOOgorCQkJCWlmICghaXNfa2lu ZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZKSkKKwkJCQkJY29udGlu dWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWlmICgh aXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTikpCisJCQkJCWNv bnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX05PVE5VTEw6CisJCQkJLyoK KwkJCQkgKiBPdXQtb2YtbGluZSBOT1QgTlVMTCBpcyBjb25jZXB0dWFsbHkgcGFydCBvZiB0aGUK KwkJCQkgKiB0YWJsZSBkZWZpbml0aW9uOiBnYXRpbmcgaXQgb24gS0lORF9UQUJMRSBtZWFucyBh bgorCQkJCSAqIG9ubHk9Zm9yZWlnbl9rZXkgc2Vjb25kIHBhc3MgZG9lcyBub3QgcmUtZW1pdAor CQkJCSAqIE5PVCBOVUxMcyB0aGF0IHRoZSBmaXJzdCBwYXNzIGFscmVhZHkgY3JlYXRlZCwKKwkJ CQkgKiB3aGlsZSB0aGUgbm8tb3B0aW9ucyBkZWZhdWx0IHN0aWxsIGVtaXRzIHRoZW0uCisJCQkJ ICovCisJCQkJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfVEFCTEUp KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoIWlzX3BhcnRpdGlvbiAmJgorCQkJCQlsaXN0X21l bWJlcl9vaWQoY3R4LT5za2lwX25vdG51bGxfb2lkcywgY29uLT5vaWQpKQorCQkJCQljb250aW51 ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyoKKwkJCQkgKiBBbnkgZnV0dXJlIGNv bnR5cGUgdGhlIHZvY2FidWxhcnkgZG9lcyBub3QgeWV0IGNvdmVyOgorCQkJCSAqIGZhbGwgdGhy b3VnaCBhbmQgZW1pdCBpdCB2aWEgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZCwKKwkJCQkg KiBtYXRjaGluZyB0aGUgb3JpZ2luYWwgbG9vcCdzICJlbWl0IHVubGVzcyBmaWx0ZXJlZCIKKwkJ CQkgKiBiZWhhdmlvci4gIFRoaXMgaXMgdW5yZWFjaGFibGUgaW4gY3VycmVudCBQRyAoZXZlcnkK KwkJCQkgKiBjb250eXBlIGFib3ZlIGlzIGVudW1lcmF0ZWQpIGJ1dCBrZXB0IGRlZmVuc2l2ZSBh Z2FpbnN0CisJCQkJICogYSBuZXcgY29udHlwZSBiZWluZyBpbnRyb2R1Y2VkLgorCQkJCSAqLwor CQkJCWJyZWFrOworCQl9CisKKwkJY29uZGVmID0gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFu ZChjb24tPm9pZCk7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJp bmdJbmZvKCZjdHgtPmJ1ZiwgIiVzOyIsIGNvbmRlZik7CisJCWFwcGVuZF9zdHJpcHBlZF9zdG10 KGN0eCk7CisJCXBmcmVlKGNvbmRlZik7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7 CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogZW1p dF9ydWxlcworICoJCUNSRUFURSBSVUxFIHBlciBjYWNoZWQgcmV3cml0ZSBydWxlIG9uIHRoZSBy ZWxhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfcnVsZXMoVGFibGVEZGxDb250ZXh0ICog Y3R4KQoreworCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1JVTEUp IHx8CisJCWN0eC0+cmVsLT5yZF9ydWxlcyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IGN0eC0+cmVsLT5yZF9ydWxlcy0+bnVtTG9ja3M7IGkrKykKKwl7CisJCU9p ZAkJCXJ1bGVpZCA9IGN0eC0+cmVsLT5yZF9ydWxlcy0+cnVsZXNbaV0tPnJ1bGVJZDsKKwkJRGF0 dW0JCXJ1bGVkZWY7CisJCWNoYXIJICAgKnJ1bGVkZWZfc3RyOworCisJCXJ1bGVkZWYgPSBPaWRG dW5jdGlvbkNhbGwxKEZfUEdfR0VUX1JVTEVERUZfT0lELAorCQkJCQkJCQkgICBPYmplY3RJZEdl dERhdHVtKHJ1bGVpZCkpOworCQlydWxlZGVmX3N0ciA9IFRleHREYXR1bUdldENTdHJpbmcocnVs ZWRlZik7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZjdHgtPmJ1ZiwgcnVsZWRlZl9zdHIpOworCQlhcHBlbmRfc3RyaXBwZWRfc3RtdChj dHgpOworCQlwZnJlZShydWxlZGVmX3N0cik7CisJfQorfQorCisvKgorICogZW1pdF9zdGF0aXN0 aWNzCisgKgkJQ1JFQVRFIFNUQVRJU1RJQ1MgcGVyIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0 IG9uIHRoZSByZWxhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfc3RhdGlzdGljcyhUYWJs ZURkbENvbnRleHQgKiBjdHgpCit7CisJUmVsYXRpb24Jc3RhdFJlbDsKKwlTeXNTY2FuRGVzYyBz dGF0U2NhbjsKKwlTY2FuS2V5RGF0YSBzdGF0S2V5OworCUhlYXBUdXBsZQlzdGF0VHVwOworCisJ aWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfU1RBVElTVElDUykpCisJ CXJldHVybjsKKworCXN0YXRSZWwgPSB0YWJsZV9vcGVuKFN0YXRpc3RpY0V4dFJlbGF0aW9uSWQs IEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJnN0YXRLZXksCisJCQkJQW51bV9wZ19z dGF0aXN0aWNfZXh0X3N0eHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURF USwKKwkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwlzdGF0U2NhbiA9IHN5c3Rh YmxlX2JlZ2luc2NhbihzdGF0UmVsLCBTdGF0aXN0aWNFeHRSZWxpZEluZGV4SWQsCisJCQkJCQkJ CSAgdHJ1ZSwgTlVMTCwgMSwgJnN0YXRLZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQo c3RhdFR1cCA9IHN5c3RhYmxlX2dldG5leHQoc3RhdFNjYW4pKSkKKwl7CisJCUZvcm1fcGdfc3Rh dGlzdGljX2V4dCBzdGF0ID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHN0YXRU dXApOworCQljaGFyCSAgICpzdGF0ZGVmID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5n KHN0YXQtPm9pZCk7CisKKwkJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCWFwcGVuZFN0 cmluZ0luZm8oJmN0eC0+YnVmLCAiJXM7Iiwgc3RhdGRlZik7CisJCWFwcGVuZF9zdHJpcHBlZF9z dG10KGN0eCk7CisJCXBmcmVlKHN0YXRkZWYpOworCX0KKwlzeXN0YWJsZV9lbmRzY2FuKHN0YXRT Y2FuKTsKKwl0YWJsZV9jbG9zZShzdGF0UmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgor ICogZW1pdF9yZXBsaWNhX2lkZW50aXR5CisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgUkVQTElD QSBJREVOVElUWSAuLi4gLSBlbWl0dGVkIG9ubHkgd2hlbiB0aGUKKyAqCQlyZWxyZXBsaWRlbnQg ZGlmZmVycyBmcm9tIHRoZSBkZWZhdWx0ICgnZCcgPSB1c2UgcHJpbWFyeSBrZXkpLgorICovCitz dGF0aWMgdm9pZAorZW1pdF9yZXBsaWNhX2lkZW50aXR5KFRhYmxlRGRsQ29udGV4dCAqIGN0eCkK K3sKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9SRVBMSUNBX0lE RU5USVRZKSkKKwkJcmV0dXJuOworCWlmIChjdHgtPnJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQg PT0gUkVQTElDQV9JREVOVElUWV9ERUZBVUxUKQorCQlyZXR1cm47CisKKwlyZXNldFN0cmluZ0lu Zm8oJmN0eC0+YnVmKTsKKwlzd2l0Y2ggKGN0eC0+cmVsLT5yZF9yZWwtPnJlbHJlcGxpZGVudCkK Kwl7CisJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5HOgorCQkJYXBwZW5kU3RyaW5nSW5m bygmY3R4LT5idWYsCisJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBSRVBMSUNBIElERU5USVRZIE5P VEhJTkc7IiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCQlhcHBlbmRfc3RtdChjdHgpOwor CQkJYnJlYWs7CisJCWNhc2UgUkVQTElDQV9JREVOVElUWV9GVUxMOgorCQkJYXBwZW5kU3RyaW5n SW5mbygmY3R4LT5idWYsCisJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBSRVBMSUNBIElERU5USVRZ IEZVTEw7IiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCQlhcHBlbmRfc3RtdChjdHgpOwor CQkJYnJlYWs7CisJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRFWDoKKwkJCXsKKwkJCQlPaWQJ CQlyZXBsaWR4ID0gUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgoY3R4LT5yZWwpOworCisJCQkJaWYg KE9pZElzVmFsaWQocmVwbGlkeCkpCisJCQkJeworCQkJCQljaGFyCSAgICppZHhuYW1lID0gZ2V0 X3JlbF9uYW1lKHJlcGxpZHgpOworCisJCQkJCWlmIChpZHhuYW1lID09IE5VTEwpCisJCQkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1Qp LAorCQkJCQkJCQkgZXJybXNnKCJyZXBsaWNhIGlkZW50aXR5IGluZGV4IHdpdGggT0lEICV1IGRv ZXMgbm90IGV4aXN0IiwKKwkJCQkJCQkJCQlyZXBsaWR4KSwKKwkJCQkJCQkJIGVycmRldGFpbCgi SXQgbWF5IGhhdmUgYmVlbiBjb25jdXJyZW50bHkgZHJvcHBlZC4iKSkpOworCisJCQkJCWFwcGVu ZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCQkJICJBTFRFUiBUQUJMRSAlcyBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYICVzOyIsCisJCQkJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJ CQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGlkeG5hbWUpKTsKKwkJCQkJYXBwZW5kX3N0bXQoY3R4 KTsKKwkJCQkJcGZyZWUoaWR4bmFtZSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJfQorfQor CisvKgorICogZW1pdF9ybHNfdG9nZ2xlcworICoJCUFMVEVSIFRBQkxFIHF1YWxuYW1lIEVOQUJM RSAvIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfcmxz X3RvZ2dsZXMoVGFibGVEZGxDb250ZXh0ICogY3R4KQoreworCWlmICghaXNfa2luZF9pbmNsdWRl ZChjdHgsIFRBQkxFX0RETF9LSU5EX1JMUykpCisJCXJldHVybjsKKworCWlmIChjdHgtPnJlbC0+ cmRfcmVsLT5yZWxyb3dzZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYp OworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMg RU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQlh cHBlbmRfc3RtdChjdHgpOworCX0KKwlpZiAoY3R4LT5yZWwtPnJkX3JlbC0+cmVsZm9yY2Vyb3dz ZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJp bmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMgRk9SQ0UgUk9XIExFVkVM IFNFQ1VSSVRZOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCWFwcGVuZF9zdG10KGN0eCk7 CisJfQorfQorCisvKgorICogZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4KKyAqCQlGb3IgZWFjaCBk aXJlY3QgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50LAorICoJ CXJlY3Vyc2l2ZWx5IGNhbGwgcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCBhbmQgYXBwZW5kIHRo ZSBjaGlsZCdzCisgKgkJc3RhdGVtZW50cy4gIEVhY2ggY2hpbGQncyBvd24gRERMIGhhbmRsZXMg ZnVydGhlciBsZXZlbHMgdGhyb3VnaAorICoJCXRoZSBzYW1lIHJlY3Vyc2lvbi4KKyAqLworc3Rh dGljIHZvaWQKK2VtaXRfcGFydGl0aW9uX2NoaWxkcmVuKFRhYmxlRGRsQ29udGV4dCAqIGN0eCkK K3sKKwlMaXN0CSAgICpjaGlsZHJlbjsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWlmICghaXNfa2lu ZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BBUlRJVElPTikgfHwKKwkJY3R4LT5yZWwt PnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQlyZXR1cm47 CisKKwljaGlsZHJlbiA9IGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oY3R4LT5yZWxpZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwlmb3JlYWNoKGxjLCBjaGlsZHJlbikKKwl7CisJCU9pZAkJCWNoaWxk b2lkID0gbGZpcnN0X29pZChsYyk7CisJCVRhYmxlRGRsQ29udGV4dCBjaGlsZGN0eCA9IHswfTsK KwkJTGlzdAkgICAqY2hpbGRzdG10czsKKworCQkvKgorCQkgKiBFYWNoIHJlY3Vyc2l2ZSBpbnZv Y2F0aW9uIHJlLWRlcml2ZXMgaXRzIG93biByZWwsIG5hbWVzcGFjZSwKKwkJICogcXVhbG5hbWUs IE5PVCBOVUxMIGNhY2hlLCBidWZmZXIsIGFuZCBzdGF0ZW1lbnQgbGlzdCBpbnNpZGUKKwkJICog cGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbC4gIFRoZSB1c2VyLXN1cHBsaWVkIG9wdGlvbiBmaWVs ZHMKKwkJICogY2Fycnkgb3ZlciB2ZXJiYXRpbSB3aXRoIG9uZSBleGNlcHRpb246IEtJTkRfUEFS VElUSU9OIGlzIGEKKwkJICogImdhdGUiIGtpbmQgdGhhdCBjb250cm9scyB3aGV0aGVyIHdlIHJl Y3Vyc2UgYXQgYWxsLCBub3QgYQorCQkgKiBraW5kIHRoYXQgdGhlIGNoaWxkcmVuIHRoZW1zZWx2 ZXMgZXZlciBlbWl0LiAgSWYgd2UgcHJvcGFnYXRlZAorCQkgKiBhbiBvbmx5LXNldCB0aGF0IGNv bnRhaW5lZCBQQVJUSVRJT04gaW50byBhIGNoaWxkLCB0aGUgY2hpbGQKKwkJICogd291bGQgbm90 IGVtaXQgaXRzIG93biBDUkVBVEUgVEFCTEUgKEtJTkRfVEFCTEUgYWJzZW50KSBub3IKKwkJICog YW55IHN1Yi1vYmplY3RzLCBhbmQgdGhlIHJlY3Vyc2lvbiB3b3VsZCBwcm9kdWNlIG5vdGhpbmcu ICBTbworCQkgKiBzdHJpcCBQQVJUSVRJT04gb3V0IG9mIG9ubHlfa2luZHMgd2hlbiByZWN1cnNp bmc7IGlmIHRoYXQKKwkJICogZW1wdGllcyB0aGUgc2V0LCBkcm9wIHRoZSBmaWx0ZXIgZW50aXJl bHkgc28gdGhlIGNoaWxkIGVtaXRzCisJCSAqIGl0cyBmdWxsIERETC4gIGV4Y2VwdF9raW5kcyBw YXNzZXMgdGhyb3VnaCB1bmNoYW5nZWQgYmVjYXVzZQorCQkgKiBQQVJUSVRJT04gaW4gdGhlIGV4 Y2VwdC1zZXQgYWxyZWFkeSBzdG9wcGVkIHVzIGZyb20gZ2V0dGluZworCQkgKiBoZXJlLgorCQkg Ki8KKwkJY2hpbGRjdHgucmVsaWQgPSBjaGlsZG9pZDsKKwkJY2hpbGRjdHgucHJldHR5ID0gY3R4 LT5wcmV0dHk7CisJCWNoaWxkY3R4Lm5vX293bmVyID0gY3R4LT5ub19vd25lcjsKKwkJY2hpbGRj dHgubm9fdGFibGVzcGFjZSA9IGN0eC0+bm9fdGFibGVzcGFjZTsKKwkJY2hpbGRjdHguc2NoZW1h X3F1YWxpZmllZCA9IGN0eC0+c2NoZW1hX3F1YWxpZmllZDsKKwkJY2hpbGRjdHgub25seV9raW5k cyA9IGN0eC0+b25seV9raW5kczsKKwkJY2hpbGRjdHguZXhjZXB0X2tpbmRzID0gY3R4LT5leGNl cHRfa2luZHM7CisKKwkJaWYgKGNoaWxkY3R4Lm9ubHlfa2luZHMgIT0gTlVMTCAmJgorCQkJYm1z X2lzX21lbWJlcigoaW50KSBUQUJMRV9ERExfS0lORF9QQVJUSVRJT04sCisJCQkJCQkgIGNoaWxk Y3R4Lm9ubHlfa2luZHMpKQorCQl7CisJCQlCaXRtYXBzZXQgICpjaGlsZF9vbmx5ID0gYm1zX2Nv cHkoY2hpbGRjdHgub25seV9raW5kcyk7CisKKwkJCWNoaWxkX29ubHkgPSBibXNfZGVsX21lbWJl cihjaGlsZF9vbmx5LAorCQkJCQkJCQkJCShpbnQpIFRBQkxFX0RETF9LSU5EX1BBUlRJVElPTik7 CisJCQlpZiAoYm1zX2lzX2VtcHR5KGNoaWxkX29ubHkpKQorCQkJeworCQkJCWJtc19mcmVlKGNo aWxkX29ubHkpOworCQkJCWNoaWxkY3R4Lm9ubHlfa2luZHMgPSBOVUxMOworCQkJfQorCQkJZWxz ZQorCQkJCWNoaWxkY3R4Lm9ubHlfa2luZHMgPSBjaGlsZF9vbmx5OworCQl9CisKKwkJY2hpbGRz dG10cyA9IHBnX2dldF90YWJsZV9kZGxfaW50ZXJuYWwoJmNoaWxkY3R4KTsKKwkJY3R4LT5zdGF0 ZW1lbnRzID0gbGlzdF9jb25jYXQoY3R4LT5zdGF0ZW1lbnRzLCBjaGlsZHN0bXRzKTsKKwl9CisJ bGlzdF9mcmVlKGNoaWxkcmVuKTsKK30KKworLyoKKyAqIHBnX2dldF90YWJsZV9kZGxfaW50ZXJu YWwKKyAqCQlHZW5lcmF0ZSBEREwgc3RhdGVtZW50cyB0byByZWNyZWF0ZSBhIHJlZ3VsYXIgb3Ig cGFydGl0aW9uZWQgdGFibGUuCisgKgorICogVGhlIGNhbGxlciBpbml0aWFsaXplcyAqY3R4IHdp dGggdGhlIHVzZXItc3VwcGxpZWQgb3B0aW9uIGZpZWxkcworICogKHJlbGlkLCBwcmV0dHksIG5v X293bmVyLCBub190YWJsZXNwYWNlLCBzY2hlbWFfcXVhbGlmaWVkLAorICogb25seV9raW5kcywg ZXhjZXB0X2tpbmRzKS4gIFRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIHJlbGF0aW9uLAorICogdmFs aWRhdGVzIGFjY2VzcywgcG9wdWxhdGVzIHRoZSBkZXJpdmVkIGZpZWxkcyAocmVsLCBxdWFsbmFt ZSwKKyAqIHNjaGVtYV9wcmVmaXgsIG5uX2VudHJpZXMsIC4uLiksIHJ1bnMgdGhlIGVtaXNzaW9u IHBhc3NlcywgYW5kCisgKiByZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCBzdGF0ZW1lbnQgbGlzdC4K KyAqCisgKiBFYWNoIGVtaXNzaW9uIGhlbHBlciBjb25zdWx0cyBpc19raW5kX2luY2x1ZGVkKCkg dG8gZGVjaWRlIHdoZXRoZXIKKyAqIGl0IHNob3VsZCBydW4uICBUaGUgdGFibGUtcHJvcGVyIHBh c3NlcyAoQ1JFQVRFIFRBQkxFIC8gT1dORVIgLworICogQUxURVIgQ09MVU1OIC4uLiBTRVQgREVG QVVMVCAvIEFMVEVSIENPTFVNTiAuLi4gU0VUICguLi4pKSBhcmUKKyAqIGdyb3VwZWQgdW5kZXIg S0lORF9UQUJMRSBzbyB0aGUgRkstb25seSAvIHN1Yi1vYmplY3Qtb25seSB3b3JrZmxvdworICog aXMgZXhwcmVzc2libGUgYXMgYSBzaW5nbGUgb25seSBvciBleGNlcHQgbGlzdC4KKyAqCisgKiBU cmlnZ2VyIGFuZCBwb2xpY3kgZW1pc3Npb24gYXJlIHNjYWZmb2xkZWQgYnV0IGN1cnJlbnRseSBk aXNhYmxlZAorICogKCNpZiAwKSAtIHRoZXkgd2lsbCBiZWNvbWUgYSBzaW5nbGUgaGVscGVyIGNh bGwgb25jZSB0aGUgc3RhbmRhbG9uZQorICogcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3Bv bGljeV9kZGwgaGVscGVycyBsYW5kLgorICovCitzdGF0aWMgTGlzdCAqCitwZ19nZXRfdGFibGVf ZGRsX2ludGVybmFsKFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCVJlbGF0aW9uCXJlbDsKKwlj aGFyCQlyZWxraW5kOworCUFjbFJlc3VsdAlhY2xyZXN1bHQ7CisKKwlyZWwgPSB0YWJsZV9vcGVu KGN0eC0+cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZWxraW5kID0gcmVsLT5yZF9yZWwt PnJlbGtpbmQ7CisKKwkvKgorCSAqIFRoZSBpbml0aWFsIGN1dCBvbmx5IHN1cHBvcnRzIG9yZGlu YXJ5IGFuZCBwYXJ0aXRpb25lZCB0YWJsZXMuICBWaWV3cywKKwkgKiBtYXR2aWV3cywgZm9yZWln biB0YWJsZXMsIHNlcXVlbmNlcywgaW5kZXhlcywgY29tcG9zaXRlIHR5cGVzLCBhbmQKKwkgKiBU T0FTVCB0YWJsZXMgYXJlIG91dCBvZiBzY29wZSBmb3Igbm93LgorCSAqLworCWlmIChyZWxraW5k ICE9IFJFTEtJTkRfUkVMQVRJT04gJiYgcmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCXsKKwkJY2hhcgkgICAqcmVsbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSk7CisKKwkJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAor CQkJCSBlcnJtc2coIlwiJXNcIiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFi bGUiLAorCQkJCQkJcmVsbmFtZSkpKTsKKwl9CisKKwkvKiBDYWxsZXIgbmVlZHMgU0VMRUNUIG9u IHRoZSB0YWJsZSB0byByZWFkIGl0cyBkZWZpbml0aW9uLiAqLworCWFjbHJlc3VsdCA9IHBnX2Ns YXNzX2FjbGNoZWNrKGN0eC0+cmVsaWQsIEdldFVzZXJJZCgpLCBBQ0xfU0VMRUNUKTsKKwlpZiAo YWNscmVzdWx0ICE9IEFDTENIRUNLX09LKQorCQlhY2xjaGVja19lcnJvcihhY2xyZXN1bHQsIE9C SkVDVF9UQUJMRSwKKwkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisKKwkv KgorCSAqIFZhbGlkYXRpb246IGlmIHRoZSB0YWJsZSBoYXMgUkVQTElDQSBJREVOVElUWSBVU0lO RyBJTkRFWCBhbmQgdGhlCisJICogcmVmZXJlbmNlZCBpbmRleCB3b3VsZCBub3QgYmUgZW1pdHRl ZCB1bmRlciB0aGUgYWN0aXZlIGZpbHRlciwgdGhlCisJICogZW1pdHRlZCBSRVBMSUNBIElERU5U SVRZIGNsYXVzZSB3b3VsZCByZWZlcmVuY2UgYW4gaW5kZXggdGhlIHNhbWUgRERMCisJICogbmV2 ZXIgcHJvZHVjZWQuICBEZXRlcm1pbmUgd2hpY2gga2luZCB3b3VsZCBlbWl0IHRoZSBpbmRleCAo b25lIG9mCisJICogcHJpbWFyeV9rZXkgLyB1bmlxdWUgLyBleGNsdXNpb24gZm9yIGNvbnN0cmFp bnQtYmFja2VkIGluZGV4ZXMsCisJICogb3RoZXJ3aXNlIHRoZSBnZW5lcmljICJpbmRleCIga2lu ZCkgYW5kIHJlcXVpcmUgaXQgdG8gYmUgaW4gc2NvcGUKKwkgKiB3aGVuZXZlciAicmVwbGljYV9p ZGVudGl0eSIgaXMuICBUaGUgY2hlY2sgdXNlcyBpc19raW5kX2luY2x1ZGVkIHNvCisJICogaXQg Y292ZXJzIGJvdGggZm9ybXMgbmF0dXJhbGx5OiBhbiAiZXhjZXB0IiBsaXN0IHRoYXQgb21pdHMg dGhlCisJICogc291cmNlIGtpbmQsIGFuZCBhbiAib25seSIgbGlzdCB0aGF0IG9taXRzIGl0Lgor CSAqLworCWlmIChyZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlf SU5ERVggJiYKKwkJaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1JFUExJQ0Ff SURFTlRJVFkpKQorCXsKKwkJT2lkCQkJcmVwbGlkeCA9IFJlbGF0aW9uR2V0UmVwbGljYUluZGV4 KHJlbCk7CisKKwkJaWYgKE9pZElzVmFsaWQocmVwbGlkeCkpCisJCXsKKwkJCVRhYmxlRGRsS2lu ZCBpZHhfa2luZCA9IFRBQkxFX0RETF9LSU5EX0lOREVYOworCQkJT2lkCQkJY29ub2lkID0gZ2V0 X2luZGV4X2NvbnN0cmFpbnQocmVwbGlkeCk7CisKKwkJCWlmIChPaWRJc1ZhbGlkKGNvbm9pZCkp CisJCQl7CisJCQkJSGVhcFR1cGxlCWNvblR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQs CisJCQkJCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0oY29ub2lkKSk7CisKKwkJCQlpZiAoSGVh cFR1cGxlSXNWYWxpZChjb25UdXApKQorCQkJCXsKKwkJCQkJRm9ybV9wZ19jb25zdHJhaW50IGNv biA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb25UdXApOworCisJCQkJCXN3aXRj aCAoY29uLT5jb250eXBlKQorCQkJCQl7CisJCQkJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToK KwkJCQkJCQlpZHhfa2luZCA9IFRBQkxFX0RETF9LSU5EX1BSSU1BUllfS0VZOworCQkJCQkJCWJy ZWFrOworCQkJCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQkJCQlpZHhfa2luZCA9IFRB QkxFX0RETF9LSU5EX1VOSVFVRTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgQ09OU1RSQUlO VF9FWENMVVNJT046CisJCQkJCQkJaWR4X2tpbmQgPSBUQUJMRV9ERExfS0lORF9FWENMVVNJT047 CisJCQkJCQkJYnJlYWs7CisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJ CQkJCVJlbGVhc2VTeXNDYWNoZShjb25UdXApOworCQkJCX0KKwkJCX0KKworCQkJaWYgKCFpc19r aW5kX2luY2x1ZGVkKGN0eCwgaWR4X2tpbmQpKQorCQkJeworCQkJCWNoYXIJICAgKnJlbG5hbWUg PSBwc3RyZHVwKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpOworCQkJCWNvbnN0IGNoYXIg KmlkeF9uYW1lID0gdGFibGVfZGRsX2tpbmRfbmFtZXNbKGludCkgaWR4X2tpbmRdLm5hbWU7CisK KwkJCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJIGVycm1zZygiUkVQTElDQSBJREVOVElUWSBmb3IgdGFibGUgXCIlc1wiIHJlcXVpcmVzIGtp bmQgXCIlc1wiIHRvIGJlIGVtaXR0ZWQiLAorCQkJCQkJCQlyZWxuYW1lLCBpZHhfbmFtZSksCisJ CQkJCQkgZXJyZGV0YWlsKCJUaGUgdGFibGUncyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY IHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhlIFwiJXNcIiBraW5kLCB3aGljaCBp cyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIuIiwKKwkJCQkJCQkJICAgaWR4X25hbWUpLAorCQkJ CQkJIGVycmhpbnQoIkVpdGhlciBhZGQgXCIlc1wiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlIFwi cmVwbGljYV9pZGVudGl0eVwiIGZyb20gaXQuIiwKKwkJCQkJCQkJIGlkeF9uYW1lKSkpOworCQkJ fQorCQl9CisJfQorCisJLyoKKwkgKiBQb3B1bGF0ZSBkZXJpdmVkIGZpZWxkcyBub3cgdGhhdCB0 aGUgcmVsYXRpb24gaXMgb3BlbiBhbmQgdmFsaWRhdGVkLgorCSAqIFRoZSByZW1haW5pbmcgZGVy aXZlZCBmaWVsZHMgKHNjaGVtYV9wcmVmaXgsIG5uX2VudHJpZXMsCisJICogc2tpcF9ub3RudWxs X29pZHMsIGJ1Ziwgc3RhdGVtZW50cykgc3RhcnQgemVyb2VkIHZpYSB0aGUgY2FsbGVyJ3MKKwkg KiBgVGFibGVEZGxDb250ZXh0IGN0eCA9IHswfWAgaW5pdGlhbGl6ZXI7IHNjaGVtYV9wcmVmaXgg aXMgc2V0CisJICogY29uZGl0aW9uYWxseSBiZWxvdywgdGhlIE5PVCBOVUxMIGNhY2hlIGlzIHBv cHVsYXRlZCBieQorCSAqIGNvbGxlY3RfbG9jYWxfbm90X251bGwsIHRoZSBidWZmZXIgaXMgaW5p dFN0cmluZ0luZm8nZCwgYW5kIGVhY2gKKwkgKiBlbWl0IHBhc3MgYXBwZW5kcyB0byBzdGF0ZW1l bnRzIHZpYSBsYXBwZW5kLgorCSAqLworCWN0eC0+cmVsID0gcmVsOworCWN0eC0+YmFzZV9uYW1l c3BhY2UgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCWN0eC0+c2F2ZV9uZXN0bGV2ZWwg PSAtMTsKKwljdHgtPnF1YWxuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoY3R4LT5yZWxp ZCwgY3R4LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQljdHgtPmJhc2VfbmFtZXNwYWNl KTsKKworCS8qCisJICogV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCBuYXJyb3cgdGhl IGFjdGl2ZSBzZWFyY2hfcGF0aCB0byB0aGUKKwkgKiB0YXJnZXQgdGFibGUncyBvd24gbmFtZXNw YWNlIGZvciB0aGUgZHVyYXRpb24gb2YgRERMIGVtaXNzaW9uLiAgVGhlCisJICogZGVwYXJzZSBj b2RlIGluIHJ1bGV1dGlscyAoYW5kIHRoZSByZWdjbGFzcy9yZWdwcm9jIG91dHB1dCBmdW5jdGlv bnMgd2UKKwkgKiB0cmFuc2l0aXZlbHkgY2FsbCkgZGVjaWRlcyB3aGV0aGVyIHRvIHNjaGVtYS1x dWFsaWZ5IGEgbmFtZSBiYXNlZCBvbgorCSAqIHdoZXRoZXIgdGhlIHJlZmVyZW5jZWQgb2JqZWN0 IGlzIHJlYWNoYWJsZSB0aHJvdWdoIHNlYXJjaF9wYXRoLCBzbyB0aGlzCisJICogbWFrZXMgc2Ft ZS1zY2hlbWEgcmVmZXJlbmNlcyBpbiBERUZBVUxUIGFuZCBDSEVDSyBleHByZXNzaW9ucywgcmVn Y2xhc3MKKwkgKiBsaXRlcmFscywgRksgdGFyZ2V0cywgZXRjLiBjb21lIG91dCB1bnF1YWxpZmll ZC4gIENyb3NzLXNjaGVtYQorCSAqIHJlZmVyZW5jZXMgc3RheSBxdWFsaWZpZWQsIHdoaWNoIGlz IHRoZSBjb3JyZWN0bmVzcyByZXF1aXJlbWVudC4KKwkgKiBBdEVPWGFjdF9HVUMgY2xlYW5zIHVw IGF0IHhhY3QgZW5kIGlmIGFueXRoaW5nIHRocm93cyBiZXR3ZWVuIGhlcmUgYW5kCisJICogdGhl IGV4cGxpY2l0IHJlc3RvcmUgYmVsb3c7IG9uIHRoZSBub3JtYWwgcGF0aCB3ZSByZXN0b3JlIHJp Z2h0IGJlZm9yZQorCSAqIHJldHVybmluZy4KKwkgKgorCSAqIFByZS1jb21wdXRlICI8c2NoZW1h Pi4iIHRvbyAtIHRoZSBhbHdheXMtcXVhbGlmaWVkIGhlbHBlcnMKKwkgKiAoY29uc3RyYWludGRl Zl9jb21tYW5kLCBpbmRleGRlZl9zdHJpbmcsIHJ1bGVkZWYsCisJICogc3RhdGlzdGljc29iamRl Zl9zdHJpbmcpIGlnbm9yZSBzZWFyY2hfcGF0aCBmb3IgdGhlIHRhcmdldCdzIG93biAiQUxURVIK KwkgKiBUQUJMRSBzY2hlbWEudGJsIi8iT04gc2NoZW1hLnRibCIvIlRPIHNjaGVtYS50YmwiIHBy ZWZpeCBhbmQgZm9yIHRoZQorCSAqIHF1YWxpZmllZCBzdGF0aXN0aWNzIG5hbWU7IHdlIHN0cmlw IHRoYXQgc3RyaW5nIG91cnNlbHZlcyB2aWEKKwkgKiBzdHJpcF9zY2hlbWFfcHJlZml4LgorCSAq LworCWlmICghY3R4LT5zY2hlbWFfcXVhbGlmaWVkKQorCXsKKwkJY2hhcgkgICAqbnNwbmFtZSA9 IGdldF9uYW1lc3BhY2VfbmFtZShjdHgtPmJhc2VfbmFtZXNwYWNlKTsKKworCQlpZiAobnNwbmFt ZSAhPSBOVUxMKQorCQl7CisJCQljb25zdCBjaGFyICpxbnNwID0gcXVvdGVfaWRlbnRpZmllcihu c3BuYW1lKTsKKworCQkJY3R4LT5zY2hlbWFfcHJlZml4ID0gcHNwcmludGYoIiVzLiIsIHFuc3Ap OworCQkJY3R4LT5zYXZlX25lc3RsZXZlbCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQkJKHZvaWQp IHNldF9jb25maWdfb3B0aW9uKCJzZWFyY2hfcGF0aCIsIHFuc3AsCisJCQkJCQkJCQkgUEdDX1VT RVJTRVQsIFBHQ19TX1NFU1NJT04sCisJCQkJCQkJCQkgR1VDX0FDVElPTl9TQVZFLCB0cnVlLCAw LCBmYWxzZSk7CisJCQlwZnJlZShuc3BuYW1lKTsKKwkJfQorCX0KKworCS8qCisJICogQ2FjaGUg bG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJhaW50IG1ldGFkYXRhIHNvIHRoZSBjb2x1 bW4tIGVtaXQKKwkgKiBoZWxwZXJzIGNhbiBwcm9kdWNlICJDT05TVFJBSU5UIG5hbWUgTk9UIE5V TEwiIGlubGluZSBmb3IgdXNlci1uYW1lZAorCSAqIGNvbnN0cmFpbnRzLCBhbmQgc28gdGhlIGNv bnN0cmFpbnQgbG9vcCBjYW4gYXZvaWQgZG91YmxlLWVtaXR0aW5nIHRoZW0uCisJICovCisJY3R4 LT5ubl9lbnRyaWVzID0gY29sbGVjdF9sb2NhbF9ub3RfbnVsbChyZWwsICZjdHgtPnNraXBfbm90 bnVsbF9vaWRzKTsKKworCWluaXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisKKwkvKgorCSAqIEVt aXNzaW9uIHBhc3Nlcy4gIE9yZGVyIGlzIHNpZ25pZmljYW50OiBDUkVBVEUgVEFCTEUgZmlyc3Q7 IE9XTkVSIGFuZAorCSAqIHRoZSBwZXItY29sdW1uIEFMVEVSIENPTFVNTiBwYXNzZXMgYmVmb3Jl IHN1Yi1vYmplY3QgZW1pc3Npb247CisJICogc3ViLW9iamVjdHMgaW4gZGVwZW5kZW5jeS1mcmll bmRseSBvcmRlciAoaW5kZXhlcyBiZWZvcmUgY29uc3RyYWludHMsCisJICogc2luY2UgY29uc3Ry YWludC1iYWNrZWQgaW5kZXhlcyBhcmUgZW1pdHRlZCBvdXQtb2YtbGluZSBieSB0aGUKKwkgKiBj b25zdHJhaW50IGxvb3ApOyBwYXJ0aXRpb24gY2hpbGRyZW4gbGFzdCBzbyB0aGUgcGFyZW50IGFs cmVhZHkgZXhpc3RzCisJICogYXQgcmVwbGF5IHRpbWUuICBFYWNoIGhlbHBlciBnYXRlcyBpdHNl bGYgb24gaXNfa2luZF9pbmNsdWRlZCBmb3IgdGhlCisJICogcmVsZXZhbnQgVEFCTEVfRERMX0tJ TkRfKjsgdGhlIGZvdXIgInRhYmxlIGl0c2VsZiIgcGFzc2VzIGFyZSBncm91cGVkCisJICogaGVy ZSB1bmRlciBLSU5EX1RBQkxFIHNvIGFsbCBvZiBDUkVBVEUgVEFCTEUgLyBPV05FUiAvIFNFVCBE RUZBVUxUIC8KKwkgKiBTRVQgKC4uLikgZHJvcCBvdXQgdG9nZXRoZXIgd2hlbiB0aGUgdXNlciBh c2tzIGZvciBvbmx5IHN1Yi1vYmplY3RzCisJICogKGUuZy4gb25seSA9PiAnZm9yZWlnbl9rZXkn IGZvciB0aGUgc2Vjb25kIHBhc3Mgb2YgYSB0d28tcGFzcyBGSworCSAqIGNsb25lKS4KKwkgKi8K KwlpZiAoaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1RBQkxFKSkKKwl7CisJ CWVtaXRfY3JlYXRlX3RhYmxlX3N0bXQoY3R4KTsKKwkJZW1pdF9vd25lcl9zdG10KGN0eCk7CisJ CWVtaXRfY2hpbGRfZGVmYXVsdF9vdmVycmlkZXMoY3R4KTsKKwkJZW1pdF9hdHRvcHRpb25zKGN0 eCk7CisJfQorCWVtaXRfaW5kZXhlcyhjdHgpOworCWVtaXRfbG9jYWxfY29uc3RyYWludHMoY3R4 KTsKKwllbWl0X3J1bGVzKGN0eCk7CisJZW1pdF9zdGF0aXN0aWNzKGN0eCk7CisJZW1pdF9yZXBs aWNhX2lkZW50aXR5KGN0eCk7CisJZW1pdF9ybHNfdG9nZ2xlcyhjdHgpOworCisJLyoKKwkgKiBU cmlnZ2VycyBhbmQgcm93LWxldmVsIHNlY3VyaXR5IHBvbGljaWVzIC0gZGlzYWJsZWQgdW50aWwg dGhlCisJICogc3RhbmRhbG9uZSBwZ19nZXRfdHJpZ2dlcl9kZGwoKSBhbmQgcGdfZ2V0X3BvbGlj eV9kZGwoKSBoZWxwZXJzIGxhbmQuCisJICogVGhlIHNjYW4gKyBsb2NrICsgZmlsdGVyIHNjYWZm b2xkaW5nIGJlbG93IGlzIHByZXNlcnZlZCAoaW5zaWRlICNpZiAwKQorCSAqIHNvIHdpcmluZyB1 cCBlYWNoIGVtaXNzaW9uIGJlY29tZXMgYSBvbmUtbGluZXIgaW4gdGhlIGxvb3AgYm9keSBvbmNl CisJICogdGhvc2UgaGVscGVycyBhcmUgYXZhaWxhYmxlLgorCSAqLworI2lmIDAKKwlpZiAoaXNf a2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1RSSUdHRVIpKQorCXsKKwkJUmVsYXRp b24JdHJpZ1JlbDsKKwkJU3lzU2NhbkRlc2MgdHJpZ1NjYW47CisJCVNjYW5LZXlEYXRhIHRyaWdL ZXk7CisJCUhlYXBUdXBsZQl0cmlnVHVwOworCisJCXRyaWdSZWwgPSB0YWJsZV9vcGVuKFRyaWdn ZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQlTY2FuS2V5SW5pdCgmdHJpZ0tleSwK KwkJCQkJQW51bV9wZ190cmlnZ2VyX3RncmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJl ciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7CisJCXRyaWdT Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHRyaWdSZWwsIFRyaWdnZXJSZWxpZE5hbWVJbmRleElk LAorCQkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAmdHJpZ0tleSk7CisJCXdoaWxlIChIZWFwVHVw bGVJc1ZhbGlkKHRyaWdUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHRyaWdTY2FuKSkpCisJCXsKKwkJ CUZvcm1fcGdfdHJpZ2dlciB0cmcgPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1 cCk7CisKKwkJCWlmICh0cmctPnRnaXNpbnRlcm5hbCkKKwkJCQljb250aW51ZTsKKworCQkJLyog VE9ETzogYXBwZW5kIHBnX2dldF90cmlnZ2VyX2RkbCh0cmctPm9pZCkgb3V0cHV0IGhlcmUuICov CisJCX0KKwkJc3lzdGFibGVfZW5kc2Nhbih0cmlnU2Nhbik7CisJCXRhYmxlX2Nsb3NlKHRyaWdS ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCisJaWYgKGlzX2tpbmRfaW5jbHVkZWQoY3R4LCBU QUJMRV9ERExfS0lORF9QT0xJQ1kpKQorCXsKKwkJUmVsYXRpb24JcG9sUmVsOworCQlTeXNTY2Fu RGVzYyBwb2xTY2FuOworCQlTY2FuS2V5RGF0YSBwb2xLZXk7CisJCUhlYXBUdXBsZQlwb2xUdXA7 CisKKwkJcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCQlTY2FuS2V5SW5pdCgmcG9sS2V5LAorCQkJCQlBbnVtX3BnX3BvbGljeV9wb2xyZWxp ZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdl dERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJcG9sU2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihwb2xS ZWwsIFBvbGljeVBvbHJlbGlkUG9sbmFtZUluZGV4SWQsCisJCQkJCQkJCQkgdHJ1ZSwgTlVMTCwg MSwgJnBvbEtleSk7CisJCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCA9IHN5c3RhYmxl X2dldG5leHQocG9sU2NhbikpKQorCQl7CisJCQkvKiBUT0RPOiBhcHBlbmQgcGdfZ2V0X3BvbGlj eV9kZGwocmVsaWQsIHBvbG5hbWUpIG91dHB1dCBoZXJlLiAqLworCQl9CisJCXN5c3RhYmxlX2Vu ZHNjYW4ocG9sU2Nhbik7CisJCXRhYmxlX2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK Kwl9CisjZW5kaWYKKworCWVtaXRfcGFydGl0aW9uX2NoaWxkcmVuKGN0eCk7CisKKwl7CisJCWlu dAkJCW5hdHRzID0gUmVsYXRpb25HZXREZXNjcihyZWwpLT5uYXR0czsKKworCQlmb3IgKGludCBp ID0gMTsgaSA8PSBuYXR0czsgaSsrKQorCQkJaWYgKGN0eC0+bm5fZW50cmllc1tpXS5uYW1lICE9 IE5VTEwpCisJCQkJcGZyZWUoY3R4LT5ubl9lbnRyaWVzW2ldLm5hbWUpOworCX0KKwlwZnJlZShj dHgtPm5uX2VudHJpZXMpOworCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOwor CXBmcmVlKGN0eC0+YnVmLmRhdGEpOworCXBmcmVlKGN0eC0+cXVhbG5hbWUpOworCWlmIChjdHgt PnNjaGVtYV9wcmVmaXggIT0gTlVMTCkKKwkJcGZyZWUoY3R4LT5zY2hlbWFfcHJlZml4KTsKKwls aXN0X2ZyZWUoY3R4LT5za2lwX25vdG51bGxfb2lkcyk7CisKKwkvKgorCSAqIFBvcCB0aGUgbmFy cm93ZWQgc2VhcmNoX3BhdGggbm93IHRoYXQgYWxsIGhlbHBlcnMgaGF2ZSBydW4uICBFcnJvcnMK KwkgKiB0aHJvd24gZWFybGllciBhcmUgY2xlYW5lZCB1cCBieSBBdEVPWGFjdF9HVUMgYXQgeGFj dCBlbmQuCisJICovCisJaWYgKGN0eC0+c2F2ZV9uZXN0bGV2ZWwgPj0gMCkKKwkJQXRFT1hhY3Rf R1VDKHRydWUsIGN0eC0+c2F2ZV9uZXN0bGV2ZWwpOworCisJcmV0dXJuIGN0eC0+c3RhdGVtZW50 czsKK30KKworLyoKKyAqIHBnX2dldF90YWJsZV9kZGwKKyAqCQlSZXR1cm4gRERMIHRvIHJlY3Jl YXRlIGEgdGFibGUgYXMgYSBzZXQgb2YgdGV4dCByb3dzLgorICovCitEYXR1bQorcGdfZ2V0X3Rh YmxlX2RkbChQR19GVU5DVElPTl9BUkdTKQoreworCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsK KwlMaXN0CSAgICpzdGF0ZW1lbnRzOworCisJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJ CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwkJVGFibGVEZGxDb250ZXh0IGN0eCA9IHswfTsK KwkJRGRsT3B0aW9uCW9wdHNbXSA9IHsKKwkJCXsicHJldHR5IiwgRERMX09QVF9CT09MfSwKKwkJ CXsib3duZXIiLCBERExfT1BUX0JPT0x9LAorCQkJeyJ0YWJsZXNwYWNlIiwgRERMX09QVF9CT09M fSwKKwkJCXsic2NoZW1hX3F1YWxpZmllZCIsIERETF9PUFRfQk9PTH0sCisJCQl7Im9ubHkiLCBE RExfT1BUX1RFWFR9LAorCQkJeyJleGNlcHQiLCBERExfT1BUX1RFWFR9LAorCQl9OworCQllbnVt CisJCXsKKwkJCU9QVF9QUkVUVFksCisJCQlPUFRfT1dORVIsCisJCQlPUFRfVEFCTEVTUEFDRSwK KwkJCU9QVF9TQ0hFTUFfUVVBTElGSUVELAorCQkJT1BUX09OTFksCisJCQlPUFRfRVhDRVBULAor CQl9OworCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsKKwkJb2xkY29udGV4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOwor CisJCWlmIChQR19BUkdJU05VTEwoMCkpCisJCXsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKwkJCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKKwkJfQorCisJCXBhcnNl X2RkbF9vcHRpb25zKGZjaW5mbywgMSwgb3B0cywgbGVuZ3Rob2Yob3B0cykpOworCisJCWlmIChv cHRzW09QVF9PTkxZXS5pc3NldCAmJiBvcHRzW09QVF9FWENFUFRdLmlzc2V0KQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCSBlcnJtc2coIlwib25seVwiIGFuZCBcImV4Y2VwdFwiIG9wdGlvbnMgYXJlIG11dHVh bGx5IGV4Y2x1c2l2ZSIpKSk7CisKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSB0aGUgb3B0aW9uIGZp ZWxkcyBvZiB0aGUgY29udGV4dCB0byB0aGVpciBkZWZhdWx0cworCQkgKiBmaXJzdCwgdGhlbiBv dmVycmlkZSBvbmx5IHRob3NlIHRoYXQgdGhlIGNhbGxlciBleHBsaWNpdGx5CisJCSAqIHNwZWNp ZmllZC4gIEtlZXBpbmcgdGhlIGRlZmF1bHQgdmFsdWVzIGxpdGVyYWwgaGVyZSAocmF0aGVyIHRo YW4KKwkJICogZm9sZGVkIGludG8gZWFjaCBvcHRzW10gbG9va3VwKSBtYWtlcyB0aGUgZGVmYXVs dHMgb2J2aW91cyBpbiBvbmUKKwkJICogcGxhY2UgYW5kIGF2b2lkcyB0aGUgdGVybmFyeS1zb3Vw IHRoYXQgbWFkZSB0aGUgcHJldmlvdXMKKwkJICogcG9zaXRpb25hbC1ib29sIGNhbGwgc2l0ZSBl cnJvci1wcm9uZS4KKwkJICovCisJCWN0eC5yZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJCWN0 eC5wcmV0dHkgPSBmYWxzZTsKKwkJY3R4Lm5vX293bmVyID0gZmFsc2U7CisJCWN0eC5ub190YWJs ZXNwYWNlID0gZmFsc2U7CisJCWN0eC5zY2hlbWFfcXVhbGlmaWVkID0gdHJ1ZTsKKwkJY3R4Lm9u bHlfa2luZHMgPSBOVUxMOworCQljdHguZXhjZXB0X2tpbmRzID0gTlVMTDsKKworCQlpZiAob3B0 c1tPUFRfUFJFVFRZXS5pc3NldCkKKwkJCWN0eC5wcmV0dHkgPSBvcHRzW09QVF9QUkVUVFldLmJv b2x2YWw7CisJCWlmIChvcHRzW09QVF9PV05FUl0uaXNzZXQpCisJCQljdHgubm9fb3duZXIgPSAh b3B0c1tPUFRfT1dORVJdLmJvb2x2YWw7CisJCWlmIChvcHRzW09QVF9UQUJMRVNQQUNFXS5pc3Nl dCkKKwkJCWN0eC5ub190YWJsZXNwYWNlID0gIW9wdHNbT1BUX1RBQkxFU1BBQ0VdLmJvb2x2YWw7 CisJCWlmIChvcHRzW09QVF9TQ0hFTUFfUVVBTElGSUVEXS5pc3NldCkKKwkJCWN0eC5zY2hlbWFf cXVhbGlmaWVkID0gb3B0c1tPUFRfU0NIRU1BX1FVQUxJRklFRF0uYm9vbHZhbDsKKwkJaWYgKG9w dHNbT1BUX09OTFldLmlzc2V0KQorCQkJY3R4Lm9ubHlfa2luZHMgPSBwYXJzZV9raW5kX2xpc3Qo Im9ubHkiLAorCQkJCQkJCQkJCQkgb3B0c1tPUFRfT05MWV0udGV4dHZhbCk7CisJCWlmIChvcHRz W09QVF9FWENFUFRdLmlzc2V0KQorCQkJY3R4LmV4Y2VwdF9raW5kcyA9IHBhcnNlX2tpbmRfbGlz dCgiZXhjZXB0IiwKKwkJCQkJCQkJCQkJICAgb3B0c1tPUFRfRVhDRVBUXS50ZXh0dmFsKTsKKwor CQlzdGF0ZW1lbnRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCgmY3R4KTsKKwkJZnVuY2N0 eC0+dXNlcl9mY3R4ID0gc3RhdGVtZW50czsKKwkJZnVuY2N0eC0+bWF4X2NhbGxzID0gbGlzdF9s ZW5ndGgoc3RhdGVtZW50cyk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCX0KKworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgpOworCXN0YXRlbWVudHMgPSAo TGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwg ZnVuY2N0eC0+bWF4X2NhbGxzKQorCXsKKwkJY2hhcgkgICAqc3RtdDsKKworCQlzdG10ID0gbGlz dF9udGgoc3RhdGVtZW50cywgZnVuY2N0eC0+Y2FsbF9jbnRyKTsKKworCQlTUkZfUkVUVVJOX05F WFQoZnVuY2N0eCwgQ1N0cmluZ0dldFRleHREYXR1bShzdG10KSk7CisJfQorCWVsc2UKKwl7CisJ CWxpc3RfZnJlZV9kZWVwKHN0YXRlbWVudHMpOworCQlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7 CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCmluZGV4IGNjODc0YWJhYWJiLi4xZTQ2 M2IwMTA2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19pbmhlcml0cy5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJpdHMuaApAQCAtNTUsNiArNTUsNyBAQCBE RUNMQVJFX0lOREVYKHBnX2luaGVyaXRzX3BhcmVudF9pbmRleCwgMjE4NywgSW5oZXJpdHNQYXJl bnRJbmRleElkLCBwZ19pbmhlcml0cwogZXh0ZXJuIExpc3QgKmZpbmRfaW5oZXJpdGFuY2VfY2hp bGRyZW4oT2lkIHBhcmVudHJlbElkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiBleHRlcm4gTGlzdCAq ZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wg b21pdF9kZXRhY2hlZCwKIAkJCQkJCQkJCQkJCUxPQ0tNT0RFIGxvY2ttb2RlLCBib29sICpkZXRh Y2hlZF9leGlzdCwgVHJhbnNhY3Rpb25JZCAqZGV0YWNoZWRfeG1pbik7CitleHRlcm4gTGlzdCAq ZmluZF9pbmhlcml0YW5jZV9wYXJlbnRzKE9pZCByZWxpZCwgTE9DS01PREUgbG9ja21vZGUpOwog CiBleHRlcm4gTGlzdCAqZmluZF9hbGxfaW5oZXJpdG9ycyhPaWQgcGFyZW50cmVsSWQsIExPQ0tN T0RFIGxvY2ttb2RlLAogCQkJCQkJCQkgTGlzdCAqKm51bXBhcmVudHMpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKaW5kZXggZmE3NmM3OTIzZjAuLmQxYjg3YTc2NGQ0IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKQEAgLTg2MTUsNiArODYxNSwxMyBAQAogICBwcm9hcmd0eXBlcyA9PiAncmVnZGF0 YWJhc2UgX3RleHQnLCBwcm9hbGxhcmd0eXBlcyA9PiAne3JlZ2RhdGFiYXNlLF90ZXh0fScsCiAg IHByb2FyZ21vZGVzID0+ICd7aSx2fScsIHByb2FyZ2RlZmF1bHRzID0+ICd7TlVMTH0nLAogICBw cm9zcmMgPT4gJ3BnX2dldF9kYXRhYmFzZV9kZGwnIH0sCit7IG9pZCA9PiAnODIxNScsIGRlc2Ny ID0+ICdnZXQgRERMIHRvIHJlY3JlYXRlIGEgdGFibGUnLAorICBwcm9uYW1lID0+ICdwZ19nZXRf dGFibGVfZGRsJywgcHJvcm93cyA9PiAnNTAnLCBwcm92YXJpYWRpYyA9PiAndGV4dCcsCisgIHBy b2lzc3RyaWN0ID0+ICdmJywgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBw cm9wYXJhbGxlbCA9PiAncicsCisgIHByb25hcmdkZWZhdWx0cyA9PiAnMScsIHByb3JldHR5cGUg PT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MgX3RleHQnLCBwcm9hbGxhcmd0 eXBlcyA9PiAne3JlZ2NsYXNzLF90ZXh0fScsCisgIHByb2FyZ21vZGVzID0+ICd7aSx2fScsIHBy b2FyZ2RlZmF1bHRzID0+ICd7TlVMTH0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF90YWJsZV9kZGwn IH0sCiB7IG9pZCA9PiAnMjUwOScsCiAgIGRlc2NyID0+ICdkZXBhcnNlIGFuIGVuY29kZWQgZXhw cmVzc2lvbiB3aXRoIHByZXR0eS1wcmludCBvcHRpb24nLAogICBwcm9uYW1lID0+ICdwZ19nZXRf ZXhwcicsIHByb3ZvbGF0aWxlID0+ICdzJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3RhYmxlY21kcy5oCmluZGV4IGMzZDg1MThjYjYyLi5kMzM1NjNmZGVhZCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVjbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvdGFibGVjbWRzLmgKQEAgLTkyLDYgKzkyLDcgQEAgZXh0ZXJuIHZvaWQgY2hlY2tfb2Zf dHlwZShIZWFwVHVwbGUgdHlwZXR1cGxlKTsKIAogZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfb25fY29t bWl0X2FjdGlvbihPaWQgcmVsaWQsIE9uQ29tbWl0QWN0aW9uIGFjdGlvbik7CiBleHRlcm4gdm9p ZCByZW1vdmVfb25fY29tbWl0X2FjdGlvbihPaWQgcmVsaWQpOworZXh0ZXJuIE9uQ29tbWl0QWN0 aW9uIGdldF9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCk7CiAKIGV4dGVybiB2b2lkIFByZUNv bW1pdF9vbl9jb21taXRfYWN0aW9ucyh2b2lkKTsKIGV4dGVybiB2b2lkIEF0RU9YYWN0X29uX2Nv bW1pdF9hY3Rpb25zKGJvb2wgaXNDb21taXQpOwpAQCAtMTA4LDQgKzEwOSw2IEBAIGV4dGVybiB2 b2lkIFJhbmdlVmFyQ2FsbGJhY2tPd25zUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9u LAogZXh0ZXJuIGJvb2wgUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KFJlbGF0 aW9uIHNjYW5yZWwsCiAJCQkJCQkJCQkJCQkgTGlzdCAqcGFydENvbnN0cmFpbnQpOwogCitleHRl cm4gY29uc3QgY2hhciAqc3RvcmFnZV9uYW1lKGNoYXIgYyk7CisKICNlbmRpZgkJCQkJCQkvKiBU QUJMRUNNRFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19n ZXRfdGFibGVfZGRsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxl X2RkbC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIyYjY0NTA5 NGE1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wZ19nZXRf dGFibGVfZGRsLm91dApAQCAtMCwwICsxLDEyMjIgQEAKKy0tCistLSBwZ19nZXRfdGFibGVfZGRs CistLQorLS0gQWxsIHRlc3RzIHBhc3Mgb3duZXI9PmZhbHNlIHNvIHRoZSBBTFRFUiBUQUJMRSBP V05FUiBUTyBsaW5lIGlzIG5vdAorLS0gZW1pdHRlZCwga2VlcGluZyBvdXRwdXQgc3RhYmxlIGFj cm9zcyB0ZXN0IHJ1bm5lcnMgKHdoaWNoIG1heSBydW4gdW5kZXIKKy0tIGRpZmZlcmVudCByb2xl IG5hbWVzKS4KKy0tCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworU0VUIHNlYXJjaF9w YXRoID0gcGd0YmxfZGRsX3Rlc3Q7CistLSBCYXNpYyB0YWJsZSB3aXRoIFBSSU1BUlkgS0VZLCBO T1QgTlVMTCwgREVGQVVMVCwgQ09MTEFURS4KK0NSRUFURSBUQUJMRSBiYXNpYyAoCisgICAgaWQg aW50IFBSSU1BUlkgS0VZLAorICAgIG5hbWUgdGV4dCBOT1QgTlVMTCBERUZBVUxUICdhbm9uJyBD T0xMQVRFICJDIgorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5i YXNpYyAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQg J2Fub24nOjp0ZXh0IE5PVCBOVUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNp YyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQor CistLSBJZGVudGl0eSBjb2x1bW5zICh3aXRoIGRlZmF1bHQgYW5kIGN1c3RvbSBzZXF1ZW5jZSBv cHRpb25zKS4KK0NSRUFURSBUQUJMRSBpZF9jb2xzICgKKyAgICBpZF9hbHdheXMgaW50IEdFTkVS QVRFRCBBTFdBWVMgQVMgSURFTlRJVFksCisgICAgaWRfZGVmYXVsdCBpbnQgR0VORVJBVEVEIEJZ IERFRkFVTFQgQVMgSURFTlRJVFkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2lkX2NvbHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWRfY29scyAo aWRfYWx3YXlzIGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSBOT1QgTlVMTCwg aWRfZGVmYXVsdCBpbnRlZ2VyIEdFTkVSQVRFRCBCWSBERUZBVUxUIEFTIElERU5USVRZIE5PVCBO VUxMKTsKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAoCisgICAgdiBpbnQgR0VO RVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSAoCisgICAgICAgIFNFUVVFTkNFIE5BTUUgaWRfY3Vz dG9tX3Zfc2VxCisgICAgICAgIFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1CisgICAgICAg IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAKKyAgICAgICAgQ0FDSEUgMTAgQ1lDTEUKKyAgICAp CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkX2N1c3RvbSAodiBpbnRl Z2VyIEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKFNUQVJUIFdJVEggMTAwIElOQ1JFTUVO VCBCWSA1IE1JTlZBTFVFIDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUgMTAgQ1lDTEUpIE5PVCBOVUxM KTsKKygxIHJvdykKKworLS0gR2VuZXJhdGVkIHN0b3JlZCBjb2x1bW4uCitDUkVBVEUgVEFCTEUg Z2VuX2NvbHMgKAorICAgIGNlbnRzIGludCwKKyAgICBkb2xsYXJzIG51bWVyaWMgR0VORVJBVEVE IEFMV0FZUyBBUyAoY2VudHMgLyAxMDAuMCkgU1RPUkVECispOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdnZW5fY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5nZW5fY29scyAoY2VudHMgaW50ZWdlciwgZG9sbGFycyBudW1lcmljIEdFTkVSQVRFRCBBTFdB WVMgQVMgKCgoY2VudHMpOjpudW1lcmljIC8gMTAwLjApKSBTVE9SRUQpOworKDEgcm93KQorCist LSBTVE9SQUdFIGFuZCBDT01QUkVTU0lPTiAob25seSBlbWl0dGVkIHdoZW4gbm9uLWRlZmF1bHQg Zm9yIHRoZSB0eXBlKS4KK0NSRUFURSBUQUJMRSBzdG9yYWdlX2NvbHMgKAorICAgIGEgdGV4dCBT VE9SQUdFIEVYVEVSTkFMLAorICAgIGIgdGV4dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0ZXh0IENP TVBSRVNTSU9OIHBnbHoKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0b3Jh Z2VfY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3Quc3RvcmFnZV9jb2xzIChhIHRleHQgU1RPUkFHRSBFWFRFUk5BTCwg YiB0ZXh0IFNUT1JBR0UgTUFJTiwgYyB0ZXh0IENPTVBSRVNTSU9OIHBnbHopOworKDEgcm93KQor CistLSBDb25zdHJhaW50czogQ0hFQ0ssIFVOSVFVRSwgRk9SRUlHTiBLRVkgKERFRkVSUkFCTEUp LgorQ1JFQVRFIFRBQkxFIHJlZmQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUg Y29ucyAoCisgICAgYSBpbnQgQ0hFQ0sgKGEgPiAwKSwKKyAgICBiIGludCBVTklRVUUsCisgICAg YyBpbnQgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRAor KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMgaW50ZWdlciwg Q09OU1RSQUlOVCBjb25zX2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRFUiBUQUJMRSBw Z3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19m a2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElB TExZIERFRkVSUkVEOworKDMgcm93cykKKworLS0gSW5kZXhlczogZnVuY3Rpb25hbCBhbmQgcGFy dGlhbC4gIENvbnN0cmFpbnQtYmFja2luZyBpbmRleGVzIGFyZQorLS0gc3VwcHJlc3NlZCAodGhl eSBhcmUgZW1pdHRlZCBieSB0aGUgY29uc3RyYWludCBsb29wKS4KK0NSRUFURSBUQUJMRSBpZHhk IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUgSU5ERVggaWR4ZF9sb3dl ciBPTiBpZHhkIChsb3dlcihuYW1lKSk7CitDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIGlk eGQgKGlkKSBXSEVSRSBpZCA+IDEwMDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn aWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBDUkVB VEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChs b3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9kZGxfdGVz dC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKyBBTFRFUiBUQUJMRSBw Z3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZIEtFWSAo aWQpOworKDQgcm93cykKKworLS0gSW5oZXJpdGFuY2UsIGluY2x1ZGluZyBhIGNoaWxkIERFRkFV TFQgb3ZlcnJpZGUgb24gYW4gaW5oZXJpdGVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwYXIgKGEg aW50IERFRkFVTFQgMSwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSBjaCAoYyBpbnQpIElOSEVSSVRT IChwYXIpOworQUxURVIgVEFCTEUgY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFVTFQgOTk5Owor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoIChjIGludGVnZXIpIElOSEVSSVRTIChwZ3RibF9kZGxf dGVzdC5wYXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoIEFMVEVSIENPTFVNTiBh IFNFVCBERUZBVUxUIDk5OTsKKygyIHJvd3MpCisKKy0tIFBlci1jb2x1bW4gYXR0b3B0aW9uczog ZW1pdHRlZCBhcyBBTFRFUiBDT0xVTU4gU0VUICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0dG9wdCAo YSBpbnQsIGIgdGV4dCk7CitBTFRFUiBUQUJMRSBhdHRvcHQgQUxURVIgQ09MVU1OIGEgU0VUIChu X2Rpc3RpbmN0ID0gMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYXR0b3B0 Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCAoYSBpbnRl Z2VyLCBiIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmF0dG9wdCBBTFRFUiBD T0xVTU4gYSBTRVQgKG5fZGlzdGluY3Q9JzEwMCcpOworKDIgcm93cykKKworLS0gUGFydGl0aW9u ZWQgdGFibGUgcGFyZW50IChSQU5HRSBhbmQgSEFTSCkuCitDUkVBVEUgVEFCTEUgcGFydGVkX3Jh bmdlIChpZCBpbnQsIGsgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfcmFuZ2UgKGlkIGludGVnZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7 CisoMSByb3cpCisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJT04g QlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFz aCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9oYXNoIChpZCBpbnRlZ2VyKSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworKDEgcm93KQorCist LSBQYXJ0aXRpb24gY2hpbGRyZW46IEZST00vVE8sIFdJVEggKG1vZHVsdXMsIHJlbWFpbmRlciks IERFRkFVTFQuCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBhcnRl ZF9yYW5nZQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitBTFRFUiBUQUJMRSBw YXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3Jhbmdl XzEgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZS T00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5n ZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CisoMiByb3dzKQorCitDUkVBVEUgVEFC TEUgcGFydGVkX2hhc2hfMCBQQVJUSVRJT04gT0YgcGFydGVkX2hhc2gKKyAgICBGT1IgVkFMVUVT IFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdwYXJ0ZWRfaGFzaF8wJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRl ZF9oYXNoXzAgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9oYXNoIEZPUiBWQUxV RVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CisoMSByb3cpCisKK0NSRUFURSBUQUJM RSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVMVDsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlX2RlZic6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV9kZWYgUEFSVElUSU9OIE9GIHBndGJsX2Rk bF90ZXN0LnBhcnRlZF9yYW5nZSBERUZBVUxUOworKDEgcm93KQorCistLSBSdWxlcy4KK0NSRUFU RSBUQUJMRSBydCAoaWQgaW50KTsKK0NSRUFURSBUQUJMRSBydF9sb2cgKGlkIGludCk7CitDUkVB VEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTIE9OIElOU0VSVCBUTyBydAorICAgIERPIEFMU08gSU5T RVJUIElOVE8gcnRfbG9nIFZBTFVFUyAoTkVXLmlkKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncnQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChpZCBpbnRlZ2VyKTsKKyBDUkVB VEUgUlVMRSBydF9sb2dfaW5zZXJ0IEFTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgT04gSU5TRVJUIFRPIHBndGJsX2RkbF90ZXN0LnJ0IERPICBJTlNFUlQgSU5UTyBy dF9sb2cgKGlkKSsKKyAgIFZBTFVFUyAobmV3LmlkKTsKKygyIHJvd3MpCisKKy0tIEV4dGVuZGVk IHN0YXRpc3RpY3MuCitDUkVBVEUgVEFCTEUgc3R4IChhIGludCwgYiBpbnQsIGMgaW50KTsKK0NS RUFURSBTVEFUSVNUSUNTIHN0eF9uZHYgKG5kaXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUg cGd0YmxfZGRsX3Rlc3Quc3R4IChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKyBD UkVBVEUgU1RBVElTVElDUyBwZ3RibF9kZGxfdGVzdC5zdHhfbmR2IChuZGlzdGluY3QpIE9OIGEs IGIgRlJPTSBzdHg7CisoMiByb3dzKQorCistLSBSb3ctbGV2ZWwgc2VjdXJpdHkgdG9nZ2xlcy4K K0NSRUFURSBUQUJMRSBybHMgKGlkIGludCk7CitBTFRFUiBUQUJMRSBybHMgRU5BQkxFIFJPVyBM RVZFTCBTRUNVUklUWTsKK0FMVEVSIFRBQkxFIHJscyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgKGlk IGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBFTkFCTEUgUk9XIExF VkVMIFNFQ1VSSVRZOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyBGT1JDRSBST1cg TEVWRUwgU0VDVVJJVFk7CisoMyByb3dzKQorCistLSBSRVBMSUNBIElERU5USVRZOiBlbWl0dGVk IG9ubHkgd2hlbiBub3QgdGhlIGRlZmF1bHQuCitDUkVBVEUgVEFCTEUgcmlfZnVsbCAoYSBpbnQp OworQUxURVIgVEFCTEUgcmlfZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAoYSBpbnRl Z2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9mdWxsIFJFUExJQ0EgSURFTlRJ VFkgRlVMTDsKKygyIHJvd3MpCisKK0NSRUFURSBUQUJMRSByaV9pZHggKGEgaW50IE5PVCBOVUxM KTsKK0NSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4X2EgT04gcmlfaWR4IChhKTsKK0FMVEVSIFRB QkxFIHJpX2lkeCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lkeF9hOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHgnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmlfaWR4IChhIGludGVnZXIgTk9UIE5VTEwpOworIENSRUFURSBV TklRVUUgSU5ERVggcmlfaWR4X2EgT04gcGd0YmxfZGRsX3Rlc3QucmlfaWR4IFVTSU5HIGJ0cmVl IChhKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9pZHggUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCByaV9pZHhfYTsKKygzIHJvd3MpCisKKy0tIFVOTE9HR0VEICsgcmVsb3B0 aW9ucy4KK0NSRUFURSBVTkxPR0dFRCBUQUJMRSB1bm8gKGlkIGludCkgV0lUSCAoZmlsbGZhY3Rv ciA9IDcwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndW5vJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBVTkxPR0dFRCBUQUJMRSBwZ3RibF9kZGxfdGVzdC51bm8gKGlk IGludGVnZXIpIFdJVEggKGZpbGxmYWN0b3I9JzcwJyk7CisoMSByb3cpCisKKy0tIFR5cGVkIHRh YmxlIChDUkVBVEUgVEFCTEUgT0YgdHlwZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJpdGVkIGZyb20g dGhlCistLSB0eXBlIGVtaXQgbm90aGluZzsgbG9jYWxseS1hcHBsaWVkIERFRkFVTFQsIE5PVCBO VUxMIGFuZCBDSEVDSyBjb21lCistLSBvdXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNvbCBXSVRIIE9Q VElPTlMgLi4uKSIgbGlzdC4KK0NSRUFURSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50LCBiIHRleHQp OworQ1JFQVRFIFRBQkxFIHR5cGVkX3BsYWluIE9GIHR5cGVkX3Q7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3R5cGVkX3BsYWluJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LnR5cGVkX3BsYWluIE9GIHBndGJsX2RkbF90ZXN0LnR5cGVkX3Q7CisoMSByb3cpCisKK0NSRUFU RSBUQUJMRSB0eXBlZF9vdmVyIE9GIHR5cGVkX3QgKAorICAgIGEgV0lUSCBPUFRJT05TIERFRkFV TFQgNyBOT1QgTlVMTCwKKyAgICBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwKKyAgICBDT05TVFJB SU5UIGJfbm9uZW1wdHkgQ0hFQ0sgKGxlbmd0aChiKSA+IDApCispOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCd0eXBlZF9vdmVyJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC50eXBlZF9vdmVyIE9G IHBndGJsX2RkbF90ZXN0LnR5cGVkX3QgKGEgV0lUSCBPUFRJT05TIERFRkFVTFQgNyBOT1QgTlVM TCwgYiBXSVRIIE9QVElPTlMgTk9UIE5VTEwsIENPTlNUUkFJTlQgYl9ub25lbXB0eSBDSEVDSyAo KGxlbmd0aChiKSA+IDApKSk7CisoMSByb3cpCisKKy0tIFRlbXBvcmFyeSB0YWJsZXMgKyBPTiBD T01NSVQuICBUZW1wIHRhYmxlcyBsaXZlIGluIGEgc2Vzc2lvbi1sb2NhbAorLS0gbmFtZXNwYWNl IHdob3NlIG5hbWUgdmFyaWVzIGJldHdlZW4gcnVucywgc28gd2Ugc3RyaXAgdGhlIHNjaGVtYQor LS0gcHJlZml4LiAgT04gQ09NTUlUIERST1Agb25seSBmaXJlcyBhdCBjb21taXQsIHNvIHRoZSBx dWVyaWVzIHRoYXQKKy0tIG5lZWQgdG8gc2VlIHRoZSBjYXRhbG9nIGVudHJ5IG11c3QgcnVuIGlu IHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzCistLSB0aGUgQ1JFQVRFLgorQkVHSU47CitDUkVBVEUg VEVNUCBUQUJMRSB0ZW1wX2RlZmF1bHQgKGlkIGludCk7CitDUkVBVEUgVEVNUCBUQUJMRSB0ZW1w X2RlbGV0ZSAoaWQgaW50KSBPTiBDT01NSVQgREVMRVRFIFJPV1M7CitDUkVBVEUgVEVNUCBUQUJM RSB0ZW1wX2Ryb3AgKGlkIGludCkgT04gQ09NTUlUIERST1A7CitTRUxFQ1QgcmVnZXhwX3JlcGxh Y2UobGluZSwgJyI/cGdfdGVtcF8/WzAtOV0rIj9cLicsICdwZ190ZW1wLicpIEFTIGxpbmUKK0ZS T00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWZhdWx0Jzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRFTVBPUkFSWSBUQUJMRSBwZ190ZW1wLnRlbXBfZGVmYXVsdCAoaWQgaW50ZWdlcik7Ciso MSByb3cpCisKK1NFTEVDVCByZWdleHBfcmVwbGFjZShsaW5lLCAnIj9wZ190ZW1wXz9bMC05XSsi P1wuJywgJ3BnX3RlbXAuJykgQVMgbGluZQorRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2Rl bGV0ZSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJ S0UgJ0NSRUFURSAlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBURU1QT1JBUlkgVEFCTEUgcGdfdGVtcC50ZW1wX2RlbGV0ZSAoaWQg aW50ZWdlcikgT04gQ09NTUlUIERFTEVURSBST1dTOworKDEgcm93KQorCitTRUxFQ1QgcmVnZXhw X3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/WzAtOV0rIj9cLicsICdwZ190ZW1wLicpIEFTIGxp bmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kcm9wJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSBwZ190ZW1wLnRl bXBfZHJvcCAoaWQgaW50ZWdlcikgT04gQ09NTUlUIERST1A7CisoMSByb3cpCisKK1JPTExCQUNL OworLS0gUHJldHR5IG1vZGUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsICdwcmV0dHknLCAndHJ1ZScpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QuYmFzaWMgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICBpZCBpbnRlZ2VyIE5PVCBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBE RUZBVUxUICdhbm9uJzo6dGV4dCBOT1QgTlVMTCAgICAgICAgICAgICAgICAgICAgICsKKyApOwor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3Br ZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIFZBUklBRElDIEFSUkFZWy4uLl0g Y2FsbCBmb3JtOiBvcHRpb24gcGFpcnMgY2FuIGJlIHBhc3NlZCBhcyBhIHNpbmdsZQorLS0gdGV4 dFtdIHRhZ2dlZCB3aXRoIFZBUklBRElDLCBpbiBhZGRpdGlvbiB0byB0aGUgcG9zaXRpb25hbCBz cGVsbGluZworLS0gZXhlcmNpc2VkIGFib3ZlLiAgVGhpcyByZXF1aXJlcyBwcm9hcmd0eXBlcyB0 byBkZWNsYXJlIHRoZSB2YXJpYWRpYworLS0gYXJndW1lbnQgYXMgdGhlIGFycmF5IHR5cGUgKF90 ZXh0KS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJJQURJQyBBUlJBWVsnb3duZXInLCAn ZmFsc2UnXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyAoaWQgaW50ZWdlciBO T1QgTlVMTCwgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0ZXh0IE5PVCBO VUxMKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09OU1RSQUlOVCBi YXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVkFSSUFESUMgQVJSQVlbJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJldHR5JywgJ3RydWUnXTo6dGV4dFtd KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljICggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsKKyAgICAgaWQgaW50ZWdlciBOT1QgTlVMTCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBuYW1lIHRleHQgQ09M TEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQgTk9UIE5VTEwgICAgICAgICAgICAgICAgICAg ICArCisgKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyBBREQgQ09OU1RSQUlO VCBiYXNpY19wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQorCistLSBWQVJJQURJQyBO VUxMOjp0ZXh0W10gaXMgZXF1aXZhbGVudCB0byBvbWl0dGluZyB0aGUgdmFyaWFkaWMgYXJndW1l bnRzOworLS0gY2hlY2sgdGhlIHJvdyBjb3VudCByYXRoZXIgdGhhbiB0aGUgcm93cyB0aGVtc2Vs dmVzLCBiZWNhdXNlIHdpdGhvdXQKKy0tICdvd25lcicsICdmYWxzZScgdGhlIG91dHB1dCBjb250 YWlucyBhbiBBTFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gbGluZQorLS0gdGhhdCB2YXJpZXMgYWNy b3NzIHRlc3QgcnVubmVycy4KK1NFTEVDVCBjb3VudCgqKSA+IDAgQVMgb2sKKyAgRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBWQVJJQURJQyBOVUxMOjp0ZXh0W10pOwor IG9rIAorLS0tLQorIHQKKygxIHJvdykKKworLS0gb25seSAvIGV4Y2VwdCBnYXRpbmc6IGVhY2gg ZW1pdHMgZWl0aGVyIG9ubHkgdGhlIGxpc3RlZCBraW5kcworLS0gKG9ubHkpIG9yIGV2ZXJ5IGtp bmQgZXhjZXB0IHRoZSBsaXN0ZWQgb25lcyAoZXhjZXB0KS4gIFRoZSB0d28KKy0tIGFyZSBtdXR1 YWxseSBleGNsdXNpdmUuICBLaW5kIHZvY2FidWxhcnk6IHRhYmxlLCBpbmRleCwKKy0tIHByaW1h cnlfa2V5LCB1bmlxdWUsIGNoZWNrLCBmb3JlaWduX2tleSwgZXhjbHVzaW9uLCBydWxlLAorLS0g c3RhdGlzdGljcywgdHJpZ2dlciwgcG9saWN5LCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBhcnRp dGlvbi4KKy0tIE5PVCBOVUxMIGlzIG5vdCBpbiB0aGUgdm9jYWJ1bGFyeSAtIGFsd2F5cyBlbWl0 dGVkIHRvIHByZXZlbnQKKy0tIHByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0 IE5VTExzIHRoZSBzb3VyY2Ugd291bGQKKy0tIGhhdmUgcmVqZWN0ZWQuCistLQorLS0gZXhjZXB0 PWluZGV4IGhpZGVzIHRoZSBDUkVBVEUgSU5ERVggc3RhdGVtZW50cy4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnaW5kZXgnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBBTFRFUiBUQUJM RSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZIEtF WSAoaWQpOworKDIgcm93cykKKworLS0gZXhjZXB0PXByaW1hcnlfa2V5LHVuaXF1ZSxjaGVjayxm b3JlaWduX2tleSxleGNsdXNpb24gaGlkZXMgZXZlcnkKKy0tIHRhYmxlLWxldmVsIGNvbnN0cmFp bnQuICBJbmxpbmUgQ0hFQ0sgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5IGlzCistLSBzdXBwcmVz c2VkIHRvby4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNl cHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmltYXJ5X2tleSx1bmlxdWUs Y2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdl ciwgYyBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gZXhjZXB0PWZvcmVpZ25fa2V5IHN1cHByZXNz ZXMgb25seSBGT1JFSUdOIEtFWSBjb25zdHJhaW50czsKKy0tIFBSSU1BUlkgS0VZLCBVTklRVUUs IENIRUNLLCBhbmQgbmFtZWQgTk9UIE5VTEwgc3RheS4gIFRoaXMgaXMgdGhlCistLSBmaXJzdCBw YXNzIG9mIHRoZSB0d28tcGFzcyBGSy1jbG9uZSB3b3JrZmxvdzogZW1pdCB0YWJsZXMgd2l0aG91 dAorLS0gY3Jvc3MtdGFibGUgRktzLCBsb2FkIGRhdGEsIHRoZW4gcmUtcnVuIHdpdGggb25seT1m b3JlaWduX2tleQorLS0gdG8gYWRkIHRoZW0gb25jZSBhbGwgdGFyZ2V0cyBleGlzdC4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnZm9yZWlnbl9r ZXknKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdl ciwgYyBpbnRlZ2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAoKGEgPiAwKSkpOwor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tl eSBVTklRVUUgKGIpOworKDIgcm93cykKKworLS0gb25seT1mb3JlaWduX2tleSBpcyB0aGUgc2Vj b25kIHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZLLWNsb25lCistLSB3b3JrZmxvdzogZW1pdCBvbmx5 IHRoZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLi4uIEZPUkVJR04KKy0tIEtFWSBy b3dzOyB0aGUgQ1JFQVRFIFRBQkxFIGFuZCBldmVyeSBub24tRksgc3ViLW9iamVjdCBhcmUKKy0t IHN1cHByZXNzZWQgKHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cyBmcm9tIHRoZSBmaXJzdCBwYXNz KS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2Zv cmVpZ25fa2V5Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUg cGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2NfZmtleSBGT1JFSUdOIEtF WSAoYykgUkVGRVJFTkNFUyByZWZkKGlkKSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRDsK KygxIHJvdykKKworLS0gQSB0YWJsZSB3aXRoIG5vIGZvcmVpZ24ga2V5cyBwcm9kdWNlcyBubyBy b3dzIHVuZGVyCistLSBvbmx5PWZvcmVpZ25fa2V5LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdyZWZkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ29ubHknLCAnZm9yZWlnbl9rZXknKTsKKyBwZ19nZXRfdGFibGVf ZGRsIAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBvbmx5PXRhYmxlIGVtaXRz IG9ubHkgdGhlIGJhcmUgQ1JFQVRFIFRBQkxFICh3aXRoIGFueSBpbmxpbmUKKy0tIGNvbHVtbi1s ZXZlbCBOT1QgTlVMTCBhbmQgQ0hFQ0spIC0gbm8gaW5kZXhlcywgbm8gUFJJTUFSWSBLRVkgQUxU RVIsCistLSBubyBvdGhlciBzdWItb2JqZWN0cy4gIFVzZWZ1bCBmb3IgY2FwdHVyaW5nIGEgdGFi bGUncyBzaGFwZSB3aXRob3V0CistLSBwdWxsaW5nIGluIGV2ZXJ5dGhpbmcgYXR0YWNoZWQgdG8g aXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICd0 YWJsZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisoMSByb3cpCisK Ky0tIG9ubHk9Y2hlY2sgb24gYSBub24tcGFydGl0aW9uIHRhYmxlLiAgVGhlIGNvbnN0cmFpbnQg bG9vcCBtdXN0IGVtaXQKKy0tIGNvbHVtbi1sZXZlbCBhbmQgdGFibGUtbGV2ZWwgQ0hFQ0sgY29u c3RyYWludHMgdmlhIEFMVEVSIFRBQkxFIGhlcmUsCistLSBiZWNhdXNlIHRoZSBpbmxpbmUgcGF0 aCBpbiBDUkVBVEUgVEFCTEUgbmV2ZXIgcnVucyAoS0lORF9UQUJMRSBpcworLS0gbm90IGluIHRo ZSBmaWx0ZXIpLgorQ1JFQVRFIFRBQkxFIGNoa19vbmx5ICgKKyAgICBpZCAgaW50IFBSSU1BUlkg S0VZLAorICAgIHF0eSBpbnQgQ0hFQ0sgKHF0eSA+IDApLAorICAgIENPTlNUUkFJTlQgY2hrX29u bHlfaWRfcG9zIENIRUNLIChpZCA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdjaGtfb25seSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2NoZWNrJyk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVS IFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoa19vbmx5IEFERCBDT05TVFJBSU5UIGNoa19vbmx5X2lk X3BvcyBDSEVDSyAoKGlkID4gMCkpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNoa19v bmx5IEFERCBDT05TVFJBSU5UIGNoa19vbmx5X3F0eV9jaGVjayBDSEVDSyAoKHF0eSA+IDApKTsK KygyIHJvd3MpCisKK0RST1AgVEFCTEUgY2hrX29ubHk7CistLSBvbmx5PXBhcnRpdGlvbiBvbiBh IHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudDogZWFjaCBjaGlsZCdzIGZ1bGwgRERMCistLSBpcyBl bWl0dGVkIChDUkVBVEUgVEFCTEUgLi4uIFBBUlRJVElPTiBPRiAuLi4pLiAgVGhlICJwYXJ0aXRp b24iCistLSBrZXl3b3JkIGlzIGEgZ2F0ZSBhdCB0aGUgcGFyZW50IGxldmVsOyBpdCBpcyBzdHJp cHBlZCBmcm9tIHRoZQorLS0gcHJvcGFnYXRlZCBmaWx0ZXIgc28gdGhlIGNoaWxkIGRvZXMgbm90 IGV4Y2x1ZGUgaXRzIG93bgorLS0gQ1JFQVRFIFRBQkxFLgorQ1JFQVRFIFRBQkxFIHBfb25seSAo aWQgaW50LCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUg cF9vbmx5X2EgUEFSVElUSU9OIE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworQ1JFQVRFIFRBQkxFIHBfb25seV9iIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBG Uk9NICgxMDApIFRPICgyMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwX29u bHknOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb25seScsICdwYXJ0aXRpb24nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBfb25seV9hIFBB UlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wX29ubHkgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MTAwKTsKKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucF9vbmx5X2IgUEFSVElUSU9OIE9G IHBndGJsX2RkbF90ZXN0LnBfb25seSBGT1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDIwMCk7Ciso MiByb3dzKQorCitEUk9QIFRBQkxFIHBfb25seTsKKy0tIG9ubHkgYW5kIGV4Y2VwdCBhcmUgbXV0 dWFsbHkgZXhjbHVzaXZlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ29ubHknLCAnZm9yZWlnbl9rZXknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdleGNlcHQnLCAnZm9yZWlnbl9rZXknKTsKK0VSUk9SOiAgIm9ubHkiIGFuZCAiZXhjZXB0IiBv cHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUKKy0tIFB1Yi9zdWIgc2NoZW1hIGNsb25lOiBr ZWVwIHRoZSB0YWJsZSBhbmQgaXRzIHByaW1hcnkga2V5LCBkcm9wIHRoZQorLS0gcmVzdCBvZiB0 aGUgY29uc3RyYWludHMgc28gdGhlIHN1YnNjcmliZXIgY2FuIHJlcGxpY2F0ZSB3aXRob3V0Cist LSBwdWxsaW5nIGNyb3NzLXRhYmxlIGRlcGVuZGVuY2llcyBhbG9uZy4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVzaW9uJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25z IChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gZXhjZXB0 PXJ1bGUgaGlkZXMgdGhlIENSRUFURSBSVUxFLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdydCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdleGNlcHQnLCAncnVsZScpOworICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ydCAoaWQgaW50ZWdl cik7CisoMSByb3cpCisKKy0tIGV4Y2VwdD1zdGF0aXN0aWNzIGhpZGVzIHRoZSBDUkVBVEUgU1RB VElTVElDUy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2Vw dCcsICdzdGF0aXN0aWNzJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJs ZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3Quc3R4IChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyKTsK KygxIHJvdykKKworLS0gZXhjZXB0PXJscyBoaWRlcyB0aGUgRU5BQkxFL0ZPUkNFIFJPVyBMRVZF TCBTRUNVUklUWSB0b2dnbGVzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZXhjZXB0JywgJ3JscycpOworICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJscyAoaWQgaW50ZWdlcik7Ciso MSByb3cpCisKKy0tIGV4Y2VwdD1yZXBsaWNhX2lkZW50aXR5IGhpZGVzIHRoZSBSRVBMSUNBIElE RU5USVRZIGNsYXVzZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdleGNlcHQnLCAncmVwbGljYV9pZGVudGl0eScpOworICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJp X2Z1bGwgKGEgaW50ZWdlcik7CisoMSByb3cpCisKKy0tIFBhcnRpdGlvbiBjaGlsZHJlbiBhcmUg ZW1pdHRlZCBieSBkZWZhdWx0OyBleGNlcHQ9cGFydGl0aW9uCistLSBzdXBwcmVzc2VzIHRoZW0g c28gb25seSB0aGUgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50IGNvbWVzIG91dC4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdwYXJ0 aXRpb24nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFy dGVkX3JhbmdlIChpZCBpbnRlZ2VyLCBrIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQp OworKDEgcm93KQorCistLSBVbmtub3duIGtpbmQgbmFtZSBpcyByZWplY3RlZCBhdCBvcHRpb24t cGFyc2UgdGltZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn ZXhjZXB0JywgJ25vX3N1Y2hfa2luZCcpOworRVJST1I6ICB1bnJlY29nbml6ZWQga2luZCAibm9f c3VjaF9raW5kIiBpbiBvcHRpb24gImV4Y2VwdCIKKy0tIFdoaXRlc3BhY2UgYXJvdW5kIGtpbmQg bmFtZXMgaXMgYWxsb3dlZDsgY2FzZSBpcyBmb2xkZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJyAgSU5ERVggICwgICBSVUxFICAnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QuaWR4ZCAoaWQgaW50ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKyBBTFRF UiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklN QVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBzdHJp cHMgdGhlIHNjaGVtYSBmcm9tIHRoZSB0YXJnZXQgdGFibGUgaXRzZWxmCistLSBhbmQgZnJvbSBz YW1lLXNjaGVtYSBzaWJsaW5nIHJlZmVyZW5jZXMgKGluaGVyaXRhbmNlL3BhcnRpdGlvbgorLS0g cGFyZW50cywgaWRlbnRpdHkgc2VxdWVuY2VzIGluIHRoZSBzYW1lIHNjaGVtYSksIHdoaWxlIGNy b3NzLXNjaGVtYQorLS0gcmVmZXJlbmNlcyBhcmUga2VwdCBxdWFsaWZpZWQgZm9yIGNvcnJlY3Ru ZXNzLgorLS0KKy0tIEJhcmUgQ1JFQVRFIFRBQkxFIGZvciBhbiBvcmRpbmFyeSB0YWJsZS4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmll ZCcsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgYmFz aWMgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdh bm9uJzo6dGV4dCBOT1QgTlVMTCk7CisgQUxURVIgVEFCTEUgYmFzaWMgQUREIENPTlNUUkFJTlQg YmFzaWNfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDIgcm93cykKKworLS0gSU5IRVJJVFMgcGFy ZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBjaCAoYyBpbnRlZ2VyKSBJTkhFUklUUyAocGFyKTsKKyBBTFRFUiBUQUJMRSBjaCBBTFRF UiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CisoMiByb3dzKQorCistLSBQYXJ0aXRpb24gcGFy ZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlm aWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElP TiBPRiBwYXJ0ZWRfcmFuZ2UgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBU QUJMRSBwYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4gayBTRVQgREVGQVVMVCA3OworKDIgcm93 cykKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0aW9uLiAgVGhl ICdyZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFuIEZLIHRhcmdl dCBpbiBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlmeSBpdAorLS0gc3RheXMgcXVhbGlmaWVk IGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9k ZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX290aGVyLnBhcmVudCAoaWQgaW50IFBS SU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICgKKyAgICBpZCAgaW50IFBSSU1B UlkgS0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFyZW50Cisp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVt YV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSB4c2NoZW1hX2Zr IChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBwaWQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgeHNjaGVt YV9mayBBREQgQ09OU1RSQUlOVCB4c2NoZW1hX2ZrX3BpZF9ma2V5IEZPUkVJR04gS0VZIChwaWQp IFJFRkVSRU5DRVMgcGd0YmxfZGRsX290aGVyLnBhcmVudChpZCk7CisgQUxURVIgVEFCTEUgeHNj aGVtYV9mayBBREQgQ09OU1RSQUlOVCB4c2NoZW1hX2ZrX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsK KygzIHJvd3MpCisKKy0tIElkZW50aXR5IGNvbHVtbiB3aXRoIGEgY3VzdG9tIHNlcXVlbmNlIG5h bWUgaW4gdGhlIHNhbWUgc2NoZW1hIGlzCistLSBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmll ZCcsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBpZF9jdXN0b20gKHYg aW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIChTVEFSVCBXSVRIIDEwMCBJTkNS RU1FTlQgQlkgNSBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwIENBQ0hFIDEwIENZQ0xFKSBOT1Qg TlVMTCk7CisoMSByb3cpCisKKy0tIFJvdW5kLXRyaXA6IHdpdGggc2NoZW1hX3F1YWxpZmllZD1m YWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0gRERMIGNhbiBiZSByZXBsYXllZCBp bnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9y ZXBsYXk7CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAgU0VUIExP Q0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsKKyAgICBGT1Igc3RtdCBJTgorICAg ICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF90ZXN0LmJh c2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKSBBUyBsaW5lCisgICAgTE9PUAorICAg ICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7CitTRUxFQ1QgcmVsbmFt ZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5hbWUKK0ZST00gcGdfY2xhc3MgV0hFUkUg b2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpyZWdjbGFzczsKKyAgIHJlbG5hbWVzcGFj ZSAgIHwgcmVsbmFtZSAKKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBwZ3RibF9kZGxf cmVwbGF5IHwgYmFzaWMKKygxIHJvdykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheSBD QVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfcmVwbGF5 LmJhc2ljCitEUk9QIFRBQkxFIHhzY2hlbWFfZms7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfb3Ro ZXIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX290 aGVyLnBhcmVudAorLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRpdGlvbiBjaGls ZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJUSVRJT04gT0Yg Zm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxURVIgVEFCTEUg Li4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfY2hrIChp ZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBh cnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09OU1RSQUlOVCBj aGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgx MDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hrX2NoaWxkJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9k ZGxfdGVzdC5wYXJ0ZWRfY2hrX2NoaWxkIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0 ZWRfY2hrIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CisgQUxURVIgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QucGFydGVkX2Noa19jaGlsZCBBREQgQ09OU1RSQUlOVCBjaGtfaW5saW5lIENIRUNL ICgodmFsID4gMCkpOworKDIgcm93cykKKworRFJPUCBUQUJMRSBwYXJ0ZWRfY2hrOworLS0gSW5o ZXJpdGFuY2UgY2hpbGRyZW4gb2YgYSBwYXJlbnQgd2l0aCBhIGdlbmVyYXRlZCBjb2x1bW4gc2hv dWxkIG5vdAorLS0gZW1pdCBhbiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZBVUxUIGZvciB0aGUg aW5oZXJpdGVkIGdlbmVyYXRlZAorLS0gY29sdW1uOiB0aGUgR0VORVJBVEVEIGV4cHJlc3Npb24g Y2FycmllcyBkb3duIHRocm91Z2ggaW5oZXJpdGFuY2UsCistLSBhbmQgU0VUIERFRkFVTFQgd291 bGQgZmFpbCBhdCByZXBsYXkgYWdhaW5zdCBhIGdlbmVyYXRlZCBjb2x1bW4uCitDUkVBVEUgVEFC TEUgcGFyX2dlbiAoCisgICAgaWQgaW50LAorICAgIGcgIGludCBHRU5FUkFURUQgQUxXQVlTIEFT IChpZCAqIDIpIFNUT1JFRAorKTsKK0NSRUFURSBUQUJMRSBjaF9nZW4gKCkgSU5IRVJJVFMgKHBh cl9nZW4pOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaF9nZW4nOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2hfZ2VuICgpIElOSEVSSVRTIChwZ3Ri bF9kZGxfdGVzdC5wYXJfZ2VuKTsKKygxIHJvdykKKworRFJPUCBUQUJMRSBwYXJfZ2VuIENBU0NB REU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoX2dlbgorLS0gQSB1c2VyLW5h bWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgaW5saW5lIGFzCistLSAi Q09OU1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBzbyB0aGUgb3JpZ2luYWwgbmFtZSBpcyBwcmVzZXJ2 ZWQuICBBbgorLS0gYXV0by1uYW1lZCBOT1QgTlVMTCBvbiBhIGxvY2FsIGNvbHVtbiBpcyBlbWl0 dGVkIGFzIGEgcGxhaW4gaW5saW5lCistLSAiTk9UIE5VTEwiIC0gUEcgcmUtY3JlYXRlcyB0aGUg YXV0by1uYW1lZCBjb25zdHJhaW50IHdoZW4gQ1JFQVRFCistLSBUQUJMRSBydW5zLCBzbyB0aGUg Y29uc3RyYWludCBsb29wIHNraXBzIGJvdGggZm9ybXMgdG8gYXZvaWQgdGhlCistLSByZWR1bmRh bnQgKGFuZCBvbiB0YWJsZS1yZW5hbWUgb3Igc2VxdWVuY2UtY29sbGlzaW9uLCBicm9rZW4pCist LSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLi4uIE5PVCBOVUxMIHN0YXRlbWVudC4K K0NSRUFURSBUQUJMRSBubl9uYW1lZCAoCisgICAgYSBpbnQgQ09OU1RSQUlOVCBteV9ubiBOT1Qg TlVMTCwKKyAgICBiIGludCBOT1QgTlVMTAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnbm5fbmFtZWQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX25hbWVkIChh IGludGVnZXIgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCwgYiBpbnRlZ2VyIE5PVCBOVUxMKTsK KygxIHJvdykKKworRFJPUCBUQUJMRSBubl9uYW1lZDsKKy0tIFJlbmFtaW5nIHRoZSB0YWJsZSBh ZnRlciBhbiBJREVOVElUWSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRlY2xhcmVkCistLSBsZWF2ZXMg dGhlIGF1dG8tbmFtZWQgY29uc3RyYWludCBmcm96ZW4gYXQgdGhlIG9yaWdpbmFsIG5hbWUsIHdo aWNoCistLSBubyBsb25nZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5hbWUgIjx0YWJsZT5fPGNvbD5f bm90X251bGwiIHBhdHRlcm4uCistLSBUaGUgZW1pdHRlZCBEREwgbXVzdCBzdGlsbCByb3VuZC10 cmlwOiB0aGUgY29uc3RyYWludCBsb29wIG11c3Qgbm90CistLSBBTFRFUiBUQUJMRSAuLi4gQURE IENPTlNUUkFJTlQgYSBzZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENSRUFURSBUQUJMRQorLS0gd2l0 aCB0aGUgaW5saW5lIElERU5USVRZIGFscmVhZHkgY3JlYXRlcyBhbiBhdXRvLU5PVC1OVUxMIHVu ZGVyIHRoZQorLS0gbmV3IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkgcGVybWl0cyBvbmUgTk9UIE5V TEwgcGVyIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBubl9yZW5hbWVkICgKKyAgICBhIGludCBHRU5F UkFURUQgQUxXQVlTIEFTIElERU5USVRZIE5PVCBOVUxMCispOworQUxURVIgVEFCTEUgbm5fcmVu YW1lZCBSRU5BTUUgVE8gbm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ25uX3JlbmFtZWQyJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX3JlbmFtZWQyIChhIGludGVnZXIgR0VORVJB VEVEIEFMV0FZUyBBUyBJREVOVElUWSAoU0VRVUVOQ0UgTkFNRSBwZ3RibF9kZGxfdGVzdC5ubl9y ZW5hbWVkX2Ffc2VxKSBDT05TVFJBSU5UIG5uX3JlbmFtZWRfYV9ub3RfbnVsbCBOT1QgTlVMTCk7 CisoMSByb3cpCisKK0RST1AgVEFCTEUgbm5fcmVuYW1lZDI7CistLSBMb2NhbGx5LWRlY2xhcmVk IE5PVCBOVUxMIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uICBUaGUgY29sdW1uIGl0c2VsZgorLS0g aXMgb21pdHRlZCBmcm9tIHRoZSBjaGlsZCdzIGNvbHVtbiBsaXN0IChhdHRpc2xvY2FsPWZhbHNl KSwgc28gdGhlCistLSB1c2VyLW5hbWVkIE5PVCBOVUxMIG11c3QgY29tZSBvdXQgdmlhIHRoZSBw b3N0LUNSRUFURSBjb25zdHJhaW50CistLSBsb29wIHJhdGhlciB0aGFuIGlubGluZS4KK0NSRUFU RSBUQUJMRSBubl9wYXIgKGEgaW50KTsKK0NSRUFURSBUQUJMRSBubl9jaCAoYiBpbnQpIElOSEVS SVRTIChubl9wYXIpOworQUxURVIgVEFCTEUgbm5fY2ggQUREIENPTlNUUkFJTlQgbXlfbm4gTk9U IE5VTEwgYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fY2gnOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ubl9jaCAoYiBp bnRlZ2VyKSBJTkhFUklUUyAocGd0YmxfZGRsX3Rlc3Qubm5fcGFyKTsKKyBBTFRFUiBUQUJMRSBw Z3RibF9kZGxfdGVzdC5ubl9jaCBBREQgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBhOworKDIg cm93cykKKworRFJPUCBUQUJMRSBubl9wYXIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2Fk ZXMgdG8gdGFibGUgbm5fY2gKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVzdCBkcm9wIHRo ZSBzY2hlbWEgcHJlZml4IGZyb20gREVGQVVMVAorLS0gZXhwcmVzc2lvbnMgYW5kIGlubGluZSBD SEVDSyBib2RpZXMgdGhhdCByZWZlcmVuY2Ugc2FtZS1zY2hlbWEKKy0tIG9iamVjdHMgKHNlcXVl bmNlIHZpYSBuZXh0dmFsLCBmdW5jdGlvbiB2aWEgZGlyZWN0IGNhbGwpLiAgVGhpcworLS0gcmVs aWVzIG9uIHRoZSBkZXBhcnNlciByZXNwZWN0aW5nIHRoZSBuYXJyb3dlZCBzZWFyY2hfcGF0aCBy YXRoZXIKKy0tIHRoYW4gb24gc3Vic3RyaW5nIHN0cmlwcGluZy4KK0NSRUFURSBTQ0hFTUEgcGd0 YmxfZGRsX3hyZWY7CitDUkVBVEUgU0VRVUVOQ0UgcGd0YmxfZGRsX3hyZWYubXlzZXE7CitDUkVB VEUgRlVOQ1RJT04gcGd0YmxfZGRsX3hyZWYuZihpbnQpIFJFVFVSTlMgaW50IExBTkdVQUdFIHNx bCBJTU1VVEFCTEUKKyAgICBBUyAnU0VMRUNUICQxJzsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxf eHJlZi50ICgKKyAgICBpZCAgaW50IERFRkFVTFQgbmV4dHZhbCgncGd0YmxfZGRsX3hyZWYubXlz ZXEnKSwKKyAgICB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLIChwZ3RibF9kZGxf eHJlZi5mKHZhbCkgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0 YmxfZGRsX3hyZWYudCc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVt YV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgdCAoaWQgaW50ZWdl ciBERUZBVUxUIG5leHR2YWwoJ215c2VxJzo6cmVnY2xhc3MpLCB2YWwgaW50ZWdlciwgQ09OU1RS QUlOVCBjaGsgQ0hFQ0sgKChmKHZhbCkgPiAwKSkpOworKDEgcm93KQorCitEUk9QIFNDSEVNQSBw Z3RibF9kZGxfeHJlZiBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byAzIG90aGVy IG9iamVjdHMKK0RFVEFJTDogIGRyb3AgY2FzY2FkZXMgdG8gc2VxdWVuY2UgcGd0YmxfZGRsX3hy ZWYubXlzZXEKK2Ryb3AgY2FzY2FkZXMgdG8gZnVuY3Rpb24gcGd0YmxfZGRsX3hyZWYuZihpbnRl Z2VyKQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfeHJlZi50CistLSBzY2hlbWFf cXVhbGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3NlCist LSBjb250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQgYnkg YSBkb3QuICBUaGUKKy0tIGluLXN0cmluZyBzdGF0ZSBvZiB0aGUgcHJlZml4IHN0cmlwcGVyIHBy ZXNlcnZlcyB0aGVtIHZlcmJhdGltLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfc3RyOworQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucCAoaWQgaW50LCBub3RlIHRleHQpIFBBUlRJVElPTiBC WSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucGMgUEFSVElUSU9OIE9G IHBndGJsX2RkbF9zdHIucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAobm90ZSA8PiAncGd0 YmxfZGRsX3N0ci5zZWNyZXQnKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfc3RyLnBjJzo6cmVnY2xh c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBjIFBBUlRJVElPTiBPRiBwIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8g KDEwMCk7CisgQUxURVIgVEFCTEUgcGMgQUREIENPTlNUUkFJTlQgY2hrIENIRUNLICgobm90ZSA8 PiAncGd0YmxfZGRsX3N0ci5zZWNyZXQnOjp0ZXh0KSk7CisoMiByb3dzKQorCitEUk9QIFNDSEVN QSBwZ3RibF9kZGxfc3RyIENBU0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IHBndGJsX2RkbF9zdHIucAorLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3Jy dXB0IGRvdWJsZS1xdW90ZWQgaWRlbnRpZmllcnMKKy0tIHdob3NlIGNvbnRlbnRzIGhhcHBlbiB0 byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdAorLS0gKGZvciBleGFt cGxlIGEgY29sdW1uIGxpdGVyYWxseSBuYW1lZCAiPHNjaGVtYT4ud2VpcmQiIGluc2lkZSB0aGF0 CistLSBzY2hlbWEpLiAgVGhlIGluLWlkZW50IHN0YXRlIG9mIHRoZSBwcmVmaXggc3RyaXBwZXIg cHJlc2VydmVzIHRoZW0KKy0tIHZlcmJhdGltLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcWlk OworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQucCAoaWQgaW50LCAicGd0YmxfZGRsX3FpZC53 ZWlyZCIgaW50KQorICAgIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF9xaWQucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9xaWQucAorICAgIChDT05TVFJB SU5UIGNoayBDSEVDSyAoInBndGJsX2RkbF9xaWQud2VpcmQiID4gMCkpCisgICAgRk9SIFZBTFVF UyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0 YmxfZGRsX3FpZC5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVt YV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFRBQkxFIHBjIFBBUlRJVElPTiBPRiBwIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8g KDEwMCk7CisgQUxURVIgVEFCTEUgcGMgQUREIENPTlNUUkFJTlQgY2hrIENIRUNLICgoInBndGJs X2RkbF9xaWQud2VpcmQiID4gMCkpOworKDIgcm93cykKKworRFJPUCBTQ0hFTUEgcGd0YmxfZGRs X3FpZCBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxf cWlkLnAKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugd2hlbiB0aGUgYmFzZSBzY2hlbWEgbmFt ZSBpdHNlbGYgcmVxdWlyZXMKKy0tIHF1b3RpbmcgKGl0cyBwcmVmaXggc3RhcnRzIHdpdGggIiku ICBCb3RoIGZvcm1zIG9mIHRoZSBwcmVmaXggLQorLS0gYmFyZS1sb3dlcmNhc2UgYW5kIHF1b3Rl ZCAtIG11c3QgYmUgc3RyaXBwZWQgZnJvbSBvdXRlcgorLS0gQUxURVIgVEFCTEUgLyBPTiAvIENS RUFURSBJTkRFWCBwcmVmaXhlcywgd2hpbGUgaW5uZXIgcXVvdGVkCistLSBpZGVudGlmaWVycyB0 aGF0IGhhcHBlbiB0byBiZWdpbiB0aGUgc2FtZSB3YXkgbXVzdCBiZSBwcmVzZXJ2ZWQuCitDUkVB VEUgU0NIRU1BICJQZ1RibC1EZGwtUSI7CitDUkVBVEUgVEFCTEUgIlBnVGJsLURkbC1RIi4iVCIg KGlkIGludCwgdmFsIGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAodmFsID4gMCkpOwor Q1JFQVRFIElOREVYICJUX3ZhbF9pZHgiIE9OICJQZ1RibC1EZGwtUSIuIlQiICh2YWwpOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCciUGdUYmwtRGRsLVEiLiJUIic6OnJlZ2NsYXNz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgIlQiIChpZCBpbnRlZ2VyLCB2YWwgaW50ZWdlciwgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sg KCh2YWwgPiAwKSkpOworIENSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBPTiAiVCIgVVNJTkcgYnRy ZWUgKHZhbCk7CisoMiByb3dzKQorCitEUk9QIFNDSEVNQSAiUGdUYmwtRGRsLVEiIENBU0NBREU7 CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlICJQZ1RibC1EZGwtUSIuIlQiCistLSBF cnJvcjogbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlLgorQ1JFQVRFIFZJRVcg diBBUyBTRUxFQ1QgMSBBUyB4OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd2Jzo6 cmVnY2xhc3MpOworRVJST1I6ICAidiIgaXMgbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVk IHRhYmxlCitDUkVBVEUgU0VRVUVOQ0UgczsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncyc6OnJlZ2NsYXNzKTsKK0VSUk9SOiAgInMiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0 aXRpb25lZCB0YWJsZQorLS0gTlVMTCBhcmd1bWVudCByZXR1cm5zIG5vIHJvd3MuCitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoTlVMTCk7CisgcGdfZ2V0X3RhYmxlX2RkbCAKKy0tLS0t LS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0gVW5yZWNvZ25pemVkIG9wdGlvbi4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ2JvZ3VzJywgJ3Ry dWUnKTsKK0VSUk9SOiAgdW5yZWNvZ25pemVkIG9wdGlvbjogImJvZ3VzIgorLS0gT2RkIG51bWJl ciBvZiB2YXJpYWRpYyBhcmdzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNp Yyc6OnJlZ2NsYXNzLCAncHJldHR5Jyk7CitFUlJPUjogIHZhcmlhZGljIGFyZ3VtZW50cyBtdXN0 IGJlIG5hbWUvdmFsdWUgcGFpcnMKK0hJTlQ6ICBQcm92aWRlIGFuIGV2ZW4gbnVtYmVyIG9mIHZh cmlhZGljIGFyZ3VtZW50cyB0aGF0IGNhbiBiZSBkaXZpZGVkIGludG8gcGFpcnMuCistLSBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIHZhbGlkYXRpb246IGlmIHRoZSByZWZlcmVuY2VkIGlu ZGV4CistLSB3b3VsZCBub3QgYmUgZW1pdHRlZCAoYmVjYXVzZSBpdHMgc291cmNlIGtpbmQgaXMg c3VwcHJlc3NlZCkgYnV0CistLSByZXBsaWNhX2lkZW50aXR5IGl0c2VsZiB3b3VsZCBiZSwgdGhl IGZ1bmN0aW9uIHJhaXNlcyBhbiBlcnJvciBzbworLS0gdGhlIGVtaXR0ZWQgRERMIG5ldmVyIGRh bmdsZXMuICBFeGVyY2lzZSBhbGwgdGhyZWUgY29uc3RyYWludC1iYWNrZWQKKy0tIGZvcm1zIChQ SywgVU5JUVVFLCBFWENMVVNJT04pIGFuZCBhIGJhcmUgQ1JFQVRFIFVOSVFVRSBJTkRFWCwgaW4K Ky0tIGJvdGggdGhlIGV4Y2VwdC1saXN0IGFuZCBvbmx5LWxpc3Qgc2hhcGVzLgorLS0KKy0tIFBL LWJhY2tlZDogZXhjZXB0PXByaW1hcnlfa2V5IHdpdGhvdXQgZXhjZXB0PXJlcGxpY2FfaWRlbnRp dHkuCitDUkVBVEUgVEFCTEUgcmlfcGtfZXhjbCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQUxURVIg VEFCTEUgcmlfcGtfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX3BrX2V4Y2xf cGtleTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfcGtfZXhjbCc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdl eGNlcHQnLCAncHJpbWFyeV9rZXknKTsKK0VSUk9SOiAgUkVQTElDQSBJREVOVElUWSBmb3IgdGFi bGUgInJpX3BrX2V4Y2wiIHJlcXVpcmVzIGtpbmQgInByaW1hcnlfa2V5IiB0byBiZSBlbWl0dGVk CitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJlZmVy ZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhlICJwcmltYXJ5X2tleSIga2luZCwgd2hpY2gg aXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBhZGQgInByaW1hcnlf a2V5IiB0byB0aGUgZmlsdGVyIG9yIHJlbW92ZSAicmVwbGljYV9pZGVudGl0eSIgZnJvbSBpdC4K Ky0tIFNhbWUgY2FsbCBidXQgYWxzbyBleGNsdWRpbmcgcmVwbGljYV9pZGVudGl0eSBzdWNjZWVk cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfcGtfZXhjbCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNl cHQnLCAncHJpbWFyeV9rZXkscmVwbGljYV9pZGVudGl0eScpOworICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX3BrX2V4Y2wgKGEgaW50ZWdlciBOT1QgTlVMTCk7 CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfcGtfZXhjbDsKKy0tIFVOSVFVRS1jb25zdHJhaW50 LWJhY2tlZCByZXBsaWNhIGlkZW50aXR5IGluZGV4LgorQ1JFQVRFIFRBQkxFIHJpX3VuaXFfZXhj bCAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7CitBTFRFUiBUQUJMRSByaV91bmlxX2V4 Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV91bmlxX2V4Y2xfYV9rZXk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAn dW5pcXVlJyk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9yIHRhYmxlICJyaV91bmlxX2V4 Y2wiIHJlcXVpcmVzIGtpbmQgInVuaXF1ZSIgdG8gYmUgZW1pdHRlZAorREVUQUlMOiAgVGhlIHRh YmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHBy b2R1Y2VkIGJ5IHRoZSAidW5pcXVlIiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBm aWx0ZXIuCitISU5UOiAgRWl0aGVyIGFkZCAidW5pcXVlIiB0byB0aGUgZmlsdGVyIG9yIHJlbW92 ZSAicmVwbGljYV9pZGVudGl0eSIgZnJvbSBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmlfdW5pcV9leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICd1bmlxdWUscmVwbGljYV9pZGVudGl0 eScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmlfdW5pcV9leGNsIChhIGludGVnZXIgTk9UIE5VTEwsIGIgaW50 ZWdlcik7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfdW5pcV9leGNsOworLS0gQmFyZSBDUkVB VEUgVU5JUVVFIElOREVYIChubyBiYWNraW5nIGNvbnN0cmFpbnQpIHVzZWQgYXMgUkVQTElDQQor LS0gSURFTlRJVFk6IHRoZSBpbmRleCBpcyBlbWl0dGVkIGJ5IHRoZSAiaW5kZXgiIGtpbmQsIHNv IGV4Y2x1ZGluZworLS0gImluZGV4IiB3aXRob3V0IGFsc28gZXhjbHVkaW5nICJyZXBsaWNhX2lk ZW50aXR5IiBtdXN0IGVycm9yLgorQ1JFQVRFIFRBQkxFIHJpX2lkeF9leGNsIChhIGludCBOT1Qg TlVMTCwgYiBpbnQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfZXhjbF9hX3VuaXEgT04g cmlfaWR4X2V4Y2wgKGEpOworQUxURVIgVEFCTEUgcmlfaWR4X2V4Y2wgUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCByaV9pZHhfZXhjbF9hX3VuaXE7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdpbmRleCcpOworRVJST1I6ICBS RVBMSUNBIElERU5USVRZIGZvciB0YWJsZSAicmlfaWR4X2V4Y2wiIHJlcXVpcmVzIGtpbmQgImlu ZGV4IiB0byBiZSBlbWl0dGVkCitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhlICJpbmRleCIg a2luZCwgd2hpY2ggaXMgbm90IGluIHRoZSBhY3RpdmUgZmlsdGVyLgorSElOVDogIEVpdGhlciBh ZGQgImluZGV4IiB0byB0aGUgZmlsdGVyIG9yIHJlbW92ZSAicmVwbGljYV9pZGVudGl0eSIgZnJv bSBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4Y2wnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn ZXhjZXB0JywgJ2luZGV4LHJlcGxpY2FfaWRlbnRpdHknKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9pZHhfZXhj bCAoYSBpbnRlZ2VyIE5PVCBOVUxMLCBiIGludGVnZXIpOworKDEgcm93KQorCitEUk9QIFRBQkxF IHJpX2lkeF9leGNsOworLS0gSW5jbHVkZS1zaWRlIGFuYWxvZzogb25seT1yZXBsaWNhX2lkZW50 aXR5IG11c3QgaW5jbHVkZSB0aGUga2luZAorLS0gdGhhdCBlbWl0cyB0aGUgaW5kZXgsIG9yIHRo ZSBmdW5jdGlvbiBlcnJvcnMuCitDUkVBVEUgVEFCTEUgcmlfb25seSAoYSBpbnQgTk9UIE5VTEwg VU5JUVVFLCBiIGludCk7CitBTFRFUiBUQUJMRSByaV9vbmx5IFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggcmlfb25seV9hX2tleTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfb25seSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvbmx5JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKK0VSUk9SOiAgUkVQTElD QSBJREVOVElUWSBmb3IgdGFibGUgInJpX29ubHkiIHJlcXVpcmVzIGtpbmQgInVuaXF1ZSIgdG8g YmUgZW1pdHRlZAorREVUQUlMOiAgVGhlIHRhYmxlJ3MgUkVQTElDQSBJREVOVElUWSBVU0lORyBJ TkRFWCByZWZlcmVuY2VzIGFuIGluZGV4IHByb2R1Y2VkIGJ5IHRoZSAidW5pcXVlIiBraW5kLCB3 aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2ZSBmaWx0ZXIuCitISU5UOiAgRWl0aGVyIGFkZCAidW5p cXVlIiB0byB0aGUgZmlsdGVyIG9yIHJlbW92ZSAicmVwbGljYV9pZGVudGl0eSIgZnJvbSBpdC4K Ky0tIEluY2x1ZGluZyBib3RoIGtpbmRzIHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAndW5pcXVlLHJlcGxpY2FfaWRlbnRpdHkn KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX29ubHkgQUREIENPTlNUUkFJTlQgcmlfb25seV9h X2tleSBVTklRVUUgKGEpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX29ubHkgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ffa2V5OworKDIgcm93cykKKworRFJP UCBUQUJMRSByaV9vbmx5OworLS0gUGVyLWtpbmQgb25seSAvIGV4Y2VwdCBjb3ZlcmFnZS4gIEZv ciBlYWNoIGtpbmQgaW4gdGhlIHZvY2FidWxhcnksCistLSB2ZXJpZnkgdGhhdCBvbmx5PUsgZW1p dHMganVzdCB0aGF0IGtpbmQncyBvdXRwdXQgYW5kIHRoYXQgZXhjZXB0PUsKKy0tIG9taXRzIGp1 c3QgdGhhdCBraW5kJ3Mgb3V0cHV0LiAgS2luZHMgd2l0aCBubyBmaXh0dXJlIGFib3ZlICh0cmln Z2VyLAorLS0gcG9saWN5KSBhcmUgc3RpbGwgcmVjb2duaXplZCBidXQgY3VycmVudGx5IGVtaXQg bm90aGluZzsgb25seT1LCistLSByZXR1cm5zIHplcm8gcm93cyBmb3IgdGhlbS4gIEZpeHR1cmVz IHVzZWQ6CistLSAgIGlkeGQ6IFBLICsgdHdvIHNlY29uZGFyeSBDUkVBVEUgSU5ERVgKKy0tICAg Y29uczogUEsgKyBVTklRVUUgKyBDSEVDSyArIEZLIChjb25zdHJhaW50LWJhY2tlZCkKKy0tICAg cnQ6ICAgQ1JFQVRFIFJVTEUKKy0tICAgc3R4OiAgQ1JFQVRFIFNUQVRJU1RJQ1MKKy0tICAgcmxz OiAgRU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWQorLS0gICByaV9mdWxsOiBSRVBMSUNB IElERU5USVRZIEZVTEwgKG5vIHNvdXJjZS1raW5kIGRlcGVuZGVuY3kpCitDUkVBVEUgVEFCTEUg ZXhjbF9maXggKHJuZyBpbnQ0cmFuZ2UsCisgICAgRVhDTFVERSBVU0lORyBnaXN0IChybmcgV0lU SCAmJikpOworLS0gb25seT1LOiBlbWl0IG9ubHkga2luZCBLJ3Mgc3RhdGVtZW50cy4KK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2luZGV4Jyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBi dHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gcGd0Ymxf ZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMiByb3dz KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdw cmltYXJ5X2tleScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5 IFBSSU1BUlkgS0VZIChpZCk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdvbmx5JywgJ3VuaXF1ZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlO VCBjb25zX2Jfa2V5IFVOSVFVRSAoYik7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnZXhjbF9maXgnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdleGNsdXNpb24nKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmV4Y2xfZml4IEFERCBDT05TVFJBSU5UIGV4Y2xfZml4X3JuZ19leGNsIEVYQ0xVREUgVVNJ TkcgZ2lzdCAocm5nIFdJVEggJiYpOworKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ29ubHknLCAncnVsZScpOworICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENS RUFURSBSVUxFIHJ0X2xvZ19pbnNlcnQgQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICBPTiBJTlNFUlQgVE8gcGd0YmxfZGRsX3Rlc3QucnQgRE8gIElOU0VSVCBJTlRP IHJ0X2xvZyAoaWQpKworICAgVkFMVUVTIChuZXcuaWQpOworKDEgcm93KQorCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3N0YXRpc3RpY3MnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFNUQVRJU1RJQ1MgcGd0Ymxf ZGRsX3Rlc3Quc3R4X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZST00gc3R4OworKDEgcm93KQor CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3Jscycp OworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIEVOQUJMRSBST1cgTEVW RUwgU0VDVVJJVFk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmxzIEZPUkNFIFJPVyBM RVZFTCBTRUNVUklUWTsKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncmlfZnVsbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdvbmx5JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKKyAgICAgICAgICAg ICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwgUkVQTElDQSBJREVOVElUWSBGVUxMOwor KDEgcm93KQorCistLSB0cmlnZ2VyIC8gcG9saWN5IGFyZSBzY2FmZm9sZGVkIGJ1dCBub3QgeWV0 IGVtaXR0aW5nOyBvbmx5PUsgaXMgYQorLS0gdmFsaWQgZmlsdGVyIHRoYXQgcHJvZHVjZXMgemVy byByb3dzLiAgV2hlbiB0aGUgc3RhbmRhbG9uZQorLS0gcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdf Z2V0X3BvbGljeV9kZGwgaGVscGVycyBsYW5kLCB0aGVzZSBxdWVyaWVzCistLSBzdGFydCByZXR1 cm5pbmcgcm93cyB3aXRob3V0IGFuIEFQSSBjaGFuZ2UuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAndHJpZ2dlcicpOworIHBnX2dldF90YWJsZV9k ZGwgCistLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdwb2xpY3knKTsKKyBwZ19nZXRfdGFibGVf ZGRsIAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBleGNlcHQ9SzogZW1pdCBl dmVyeXRoaW5nIGV4Y2VwdCBraW5kIEsncyBzdGF0ZW1lbnRzLiAgUEsvVU5JUVVFLworLS0gSU5E RVggYXJlIGV4ZXJjaXNlZCBvbiB0YWJsZXMgd2l0aG91dCBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYCistLSBzbyB0aGUgdmFsaWRhdGlvbiBkb2VzIG5vdCB0cmlwLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdwcmltYXJ5X2tleScpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxM LCBuYW1lIHRleHQpOworIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIHBndGJsX2RkbF90ZXN0 LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0 aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAx MDApOworKDMgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2V4Y2VwdCcsICd1bmlxdWUnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY29ucyAoYSBpbnRlZ2VyLCBiIGludGVnZXIsIGMg aW50ZWdlciwgQ09OU1RSQUlOVCBjb25zX2FfY2hlY2sgQ0hFQ0sgKChhID4gMCkpKTsKKyBBTFRF UiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZP UkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERF RkVSUkVEOworKDIgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25z Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2V4Y2VwdCcsICdjaGVjaycpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdlciwg YyBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJB SU5UIGNvbnNfYl9rZXkgVU5JUVVFIChiKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5j b25zIEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VT IHJlZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOworKDMgcm93cykKKworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2ZpeCc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnZXhj bHVzaW9uJyk7CisgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmV4Y2xfZml4IChybmcgaW50 NHJhbmdlKTsKKygxIHJvdykKKworLS0gZXhjZXB0PXRhYmxlIHN1cHByZXNzZXMgdGhlIENSRUFU RSBUQUJMRSArIE9XTkVSICsgY2hpbGQtZGVmYXVsdAorLS0gU0VUIERFRkFVTFQgKyBhdHRvcHRp b25zIHBhc3NlcywgbGVhdmluZyBvbmx5IHRoZSBzdWItb2JqZWN0IHBhc3Nlcy4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAndGFibGUnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBwZ3RibF9kZGxfdGVzdC5pZHhkIFVTSU5HIGJ0 cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBwZ3RibF9k ZGxfdGVzdC5pZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKyBBTFRFUiBU QUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIEFERCBDT05TVFJBSU5UIGlkeGRfcGtleSBQUklNQVJZ IEtFWSAoaWQpOworKDMgcm93cykKKworLS0gTXVsdGkta2luZCBjb21wb3NpdGlvbnMuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICd0YWJsZSxpbmRl eCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5P VCBOVUxMLCBuYW1lIHRleHQpOworIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIHBndGJsX2Rk bF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4 ZF9wYXJ0aWFsIE9OIHBndGJsX2RkbF90ZXN0LmlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAo aWQgPiAxMDApOworKDMgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdj b25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ29ubHknLCAncHJpbWFyeV9rZXksZm9yZWlnbl9rZXknKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVf ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBD T05TVFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHJlZmQoaWQp IERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOworKDEgcm93KQorCistLSBEdXBsaWNhdGUg ZW50cmllcyBpbiB0aGUgbGlzdCBhcmUgc2lsZW50bHkgZGUtZHVwbGljYXRlZCBieSB0aGUKKy0t IEJpdG1hcHNldC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdv bmx5JywgJ2luZGV4LGluZGV4Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04gcGd0 YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRF WCBpZHhkX3BhcnRpYWwgT04gcGd0YmxfZGRsX3Rlc3QuaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdI RVJFIChpZCA+IDEwMCk7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIGV4Y2xfZml4OworLS0gb25s eT1LIG9uIGEgdGFibGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBLIG9mIHRoYXQga2luZCBpcyBh IHZhbGlkCistLSBmaWx0ZXIgYW5kIHJldHVybnMgemVybyByb3dzLiAgVGVzdGVkIHByZXZpb3Vz bHkgd2l0aCBmb3JlaWduX2tleQorLS0gb24gJ3JlZmQnOyBoZXJlIGFsc28gcnVsZSwgc3RhdGlz dGljcywgcmxzLCByZXBsaWNhX2lkZW50aXR5LCBhbmQKKy0tIGV4Y2x1c2lvbiBvbiAnYmFzaWMn ICh3aGljaCBoYXMgb25seSBQSyArIGNvbHVtbnMpLgorU0VMRUNUIGNvdW50KCopIEFTIHJ1bGVf cm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdydWxlJyk7CisgcnVs ZV9yb3dzIAorLS0tLS0tLS0tLS0KKyAgICAgICAgIDAKKygxIHJvdykKKworU0VMRUNUIGNvdW50 KCopIEFTIHN0YXRzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAn c3RhdGlzdGljcycpOworIHN0YXRzX3Jvd3MgCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAwCiso MSByb3cpCisKK1NFTEVDVCBjb3VudCgqKSBBUyBybHNfcm93cworICBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAnb25seScsICdybHMnKTsKKyBybHNfcm93cyAKKy0tLS0tLS0tLS0KKyAgICAg ICAgMAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgcmlfcm93cworICBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAg ICAgICAgICAgICAgICAgICAnb25seScsICdyZXBsaWNhX2lkZW50aXR5Jyk7Cisgcmlfcm93cyAK Ky0tLS0tLS0tLQorICAgICAgIDAKKygxIHJvdykKKworU0VMRUNUIGNvdW50KCopIEFTIGV4Y2xf cm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdleGNsdXNpb24nKTsK KyBleGNsX3Jvd3MgCistLS0tLS0tLS0tLQorICAgICAgICAgMAorKDEgcm93KQorCistLSBJbnB1 dC12YWxpZGF0aW9uIGVkZ2UgY2FzZXMgZm9yIHRoZSBjb21tYS1zZXBhcmF0ZWQga2luZCBsaXN0 LiAgQWxsCistLSBvZiB0aGVzZSByYWlzZSBhbiBlcnJvciBhdCB0aGUgdmFyaWFkaWMtcGFyc2Ug c3RlcDsgdGhlIGZ1bmN0aW9uCistLSBuZXZlciByZWFjaGVzIHJlbGF0aW9uIG9wZW4uCistLSBF bXB0eSBsaXN0OgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2Ns YXNzLCAnb25seScsICcnKTsKK0VSUk9SOiAgb3B0aW9uICJvbmx5IiBtdXN0IHNwZWNpZnkgYXQg bGVhc3Qgb25lIGtpbmQKKy0tIFdoaXRlc3BhY2Utb25seSBsaXN0OgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb25seScsICcgICAnKTsKK0VSUk9S OiAgZW1wdHkgZW50cnkgaW4gb3B0aW9uICJvbmx5IgorLS0gVHJhaWxpbmcgY29tbWE6CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJ2lu ZGV4LCcpOworRVJST1I6ICBlbXB0eSBlbnRyeSBpbiBvcHRpb24gIm9ubHkiCistLSBMZWFkaW5n IGNvbW1hOgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNz LCAnb25seScsICcsaW5kZXgnKTsKK0VSUk9SOiAgZW1wdHkgZW50cnkgaW4gb3B0aW9uICJvbmx5 IgorLS0gQ29uc2VjdXRpdmUgY29tbWFzOgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdiYXNpYyc6OnJlZ2NsYXNzLCAnb25seScsICdpbmRleCwscnVsZScpOworRVJST1I6ICBlbXB0 eSBlbnRyeSBpbiBvcHRpb24gIm9ubHkiCistLSBUb2tlbiBjb250YWluaW5nIGlubmVyIHdoaXRl c3BhY2U6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3Ms ICdvbmx5JywgJ2ZvcmVpZ24ga2V5Jyk7CitFUlJPUjogIGludmFsaWQgY2hhcmFjdGVyIGluIG9w dGlvbiAib25seSIKKy0tIE5VTEwgdmFsdWUgZm9yIGEgbm9uLU5VTEwgb3B0aW9uOgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb25seScsIE5VTEwp OworRVJST1I6ICB2YWx1ZSBmb3Igb3B0aW9uICJvbmx5IiBtdXN0IG5vdCBiZSBudWxsCistLSBP cHRpb24gc3BlY2lmaWVkIHR3aWNlIGFzIHNlcGFyYXRlIG5hbWUvdmFsdWUgcGFpcnM6CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAnaW5kZXgnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvbmx5JywgJ3J1bGUnKTsKK0VSUk9SOiAgb3B0aW9uICJvbmx5IiBpcyBz cGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UKKy0tIFNhbWUga2luZCBzcGVjaWZpZWQgdGhyb3VnaCBi b3RoIG9wdGlvbnMgaXMgc3RpbGwgbXV0ZXgtcmVqZWN0ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ29ubHknLCAnaW5kZXgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdl eGNlcHQnLCAncnVsZScpOworRVJST1I6ICAib25seSIgYW5kICJleGNlcHQiIG9wdGlvbnMgYXJl IG11dHVhbGx5IGV4Y2x1c2l2ZQorLS0gUm91bmQtdHJpcCB2ZXJpZmljYXRpb24uICBGb3IgZXZl cnkgdGVzdCB0YWJsZSwgY2FwdHVyZSB0aGUgRERMIHRoZQorLS0gZnVuY3Rpb24gZW1pdHMsIGRy b3AgdGhlIHNjaGVtYSwgcmVwbGF5IGVhY2ggdGFibGUncyBEREwgaW4KKy0tIGRlcGVuZGVuY3kg b3JkZXIsIGFuZCBjb25maXJtIHRoYXQgcGdfZ2V0X3RhYmxlX2RkbCBvbiB0aGUgcmVjcmVhdGVk CistLSByZWxhdGlvbiBtYXRjaGVzIHRoZSBvcmlnaW5hbCBsaW5lLWZvci1saW5lLiAgVGhlIGZp bmFsIFNFTEVDVCBtdXN0CistLSByZXR1cm4gemVybyByb3dzLgorQ1JFQVRFIFRFTVAgVEFCTEUg cGd0YmxfZGRsX3J0X29yaWcgKG5hbWUgdGV4dCwgb3JkIGludCwgbGluZSB0ZXh0KTsKK0lOU0VS VCBJTlRPIHBndGJsX2RkbF9ydF9vcmlnCitTRUxFQ1QgdC5uYW1lLCBvLm9yZCwgby5saW5lCitG Uk9NIChWQUxVRVMKKyAgICAgICAgKCdiYXNpYycpLCAoJ2lkX2NvbHMnKSwgKCdpZF9jdXN0b20n KSwgKCdnZW5fY29scycpLCAoJ3N0b3JhZ2VfY29scycpLAorICAgICAgICAoJ3JlZmQnKSwgKCdj b25zJyksICgnaWR4ZCcpLAorICAgICAgICAoJ3BhcicpLCAoJ2NoJyksICgnYXR0b3B0JyksCisg ICAgICAgICgncGFydGVkX3JhbmdlJyksICgncGFydGVkX3JhbmdlXzEnKSwgKCdwYXJ0ZWRfcmFu Z2VfZGVmJyksCisgICAgICAgICgncGFydGVkX2hhc2gnKSwgKCdwYXJ0ZWRfaGFzaF8wJyksCisg ICAgICAgICgncnRfbG9nJyksICgncnQnKSwKKyAgICAgICAgKCdzdHgnKSwgKCdybHMnKSwgKCdy aV9mdWxsJyksICgncmlfaWR4JyksICgndW5vJykKKyAgICAgKSBBUyB0KG5hbWUpLAorICAgICBM QVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJl Z2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJykg V0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3JkKTsKK0RPICQkCitERUNMQVJFCisgICAgdGFibGVz IENPTlNUQU5UIHRleHRbXSA6PSBBUlJBWVsKKyAgICAgICAgJ2Jhc2ljJywgJ2lkX2NvbHMnLCAn aWRfY3VzdG9tJywgJ2dlbl9jb2xzJywgJ3N0b3JhZ2VfY29scycsCisgICAgICAgICdyZWZkJywg J2NvbnMnLCAnaWR4ZCcsCisgICAgICAgICdwYXInLCAnY2gnLCAnYXR0b3B0JywKKyAgICAgICAg J3BhcnRlZF9yYW5nZScsICdwYXJ0ZWRfcmFuZ2VfMScsICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAg ICAgICAgJ3BhcnRlZF9oYXNoJywgJ3BhcnRlZF9oYXNoXzAnLAorICAgICAgICAncnRfbG9nJywg J3J0JywKKyAgICAgICAgJ3N0eCcsICdybHMnLCAncmlfZnVsbCcsICdyaV9pZHgnLCAndW5vJwor ICAgIF07CisgICAgdCB0ZXh0OworICAgIHN0bXQgdGV4dDsKK0JFR0lOCisgICAgRFJPUCBTQ0hF TUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKKyAgICBDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF90 ZXN0OworICAgIEZPUkVBQ0ggdCBJTiBBUlJBWSB0YWJsZXMgTE9PUAorICAgICAgICBGT1Igc3Rt dCBJTgorICAgICAgICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ3RibF9kZGxfcnRfb3JpZyBXSEVS RSBuYW1lID0gdCBPUkRFUiBCWSBvcmQKKyAgICAgICAgTE9PUAorICAgICAgICAgICAgRVhFQ1VU RSBzdG10OworICAgICAgICBFTkQgTE9PUDsKKyAgICBFTkQgTE9PUDsKK0VORCAkJDsKK05PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gMjUgb3RoZXIgb2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNj YWRlcyB0byB0YWJsZSBiYXNpYworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZF9jb2xzCitkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5f Y29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMg dG8gdGFibGUgcmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGlkeGQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGNoCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBwYXJ0ZWRfcmFuZ2UKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hh c2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnRf bG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0eAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBy bHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfZnVsbAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5 cGUgdHlwZWRfdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNj YWRlcyB0byB0YWJsZSB0eXBlZF9vdmVyCitkcm9wIGNhc2NhZGVzIHRvIHZpZXcgdgorZHJvcCBj YXNjYWRlcyB0byBzZXF1ZW5jZSBzCitFUlJPUjogIHJlbGF0aW9uICJwYXJ0ZWRfcmFuZ2VfMSIg YWxyZWFkeSBleGlzdHMKK0NPTlRFWFQ6ICBTUUwgc3RhdGVtZW50ICJDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBh cnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOyIKK1BML3BnU1FMIGZ1bmN0 aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgMjEgYXQgRVhFQ1VURQorV0lUSCBhZnRlcl9kZGwg QVMgKAorICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKKyAgICBGUk9NIChTRUxFQ1Qg RElTVElOQ1QgbmFtZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKSBBUyB0LAorICAgICAgICAgTEFU RVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdj bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2Un KSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQpCispCisoU0VMRUNUICdtaXNzaW5nLWluLWNv cHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnCisgRVhD RVBUCisgU0VMRUNUICdtaXNzaW5nLWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRl cl9kZGwpCitVTklPTiBBTEwKKyhTRUxFQ1QgJ2V4dHJhLWluLWNvcHknIEFTIGtpbmQsIG5hbWUs IG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbAorIEVYQ0VQVAorIFNFTEVDVCAnZXh0cmEtaW4tY29w eScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnKQorT1JERVIgQlkga2lu ZCwgbmFtZSwgb3JkOworIGtpbmQgfCBuYW1lIHwgb3JkIHwgbGluZSAKKy0tLS0tLSstLS0tLS0r LS0tLS0rLS0tLS0tCisoMCByb3dzKQorCistLSBDbGVhbnVwLgorRFJPUCBTQ0hFTUEgcGd0Ymxf ZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMjUgb3RoZXIgb2Jq ZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBzdG9y YWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmVmZAorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBjb25zCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeGQKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoCitkcm9wIGNhc2NhZGVzIHRvIHRh YmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfcmFuZ2UKK2Ryb3AgY2Fz Y2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0eAor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfZnVs bAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg dW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5cGUgdHlwZWRfdAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9vdmVyCitkcm9wIGNh c2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBzCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9w YXJhbGxlbF9zY2hlZHVsZQppbmRleCA4ZmEwYTZjNDdmYi4uOWVjYTY0Y2NhM2IgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtODEsNyArODEsNyBAQCB0ZXN0OiBjcmVhdGVfdGFi bGVfbGlrZSBhbHRlcl9nZW5lcmljIGFsdGVyX29wZXJhdG9yIG1pc2MgYXN5bmMgZGJzaXplIG1l cmdlIG1pcwogIyBjb2xsYXRlLmxpbnV4LnV0ZjggYW5kIGNvbGxhdGUuaWN1LnV0ZjggdGVzdHMg Y2Fubm90IGJlIHJ1biBpbiBwYXJhbGxlbCB3aXRoIGVhY2ggb3RoZXIKICMgcHNxbCBkZXBlbmRz IG9uIGNyZWF0ZV9hbQogIyBhbXV0aWxzIGRlcGVuZHMgb24gZ2VvbWV0cnksIGNyZWF0ZV9pbmRl eF9zcGdpc3QsIGhhc2hfaW5kZXgsIGJyaW4KLXRlc3Q6IHJ1bGVzIHBzcWwgcHNxbF9jcm9zc3Rh YiBwc3FsX3BpcGVsaW5lIGFtdXRpbHMgc3RhdHNfZXh0IGNvbGxhdGUubGludXgudXRmOCBjb2xs YXRlLndpbmRvd3Mud2luMTI1MgordGVzdDogcnVsZXMgcHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxf cGlwZWxpbmUgYW11dGlscyBzdGF0c19leHQgY29sbGF0ZS5saW51eC51dGY4IGNvbGxhdGUud2lu ZG93cy53aW4xMjUyIHBnX2dldF90YWJsZV9kZGwKIAogIyAtLS0tLS0tLS0tCiAjIFJ1biB0aGVz ZSBhbG9uZSBzbyB0aGV5IGRvbid0IHJ1biBvdXQgb2YgcGFyYWxsZWwgd29ya2VycwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZjZiNzNmZjcxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbApAQCAtMCwwICsxLDcxNyBAQAorLS0K Ky0tIHBnX2dldF90YWJsZV9kZGwKKy0tCistLSBBbGwgdGVzdHMgcGFzcyBvd25lcj0+ZmFsc2Ug c28gdGhlIEFMVEVSIFRBQkxFIE9XTkVSIFRPIGxpbmUgaXMgbm90CistLSBlbWl0dGVkLCBrZWVw aW5nIG91dHB1dCBzdGFibGUgYWNyb3NzIHRlc3QgcnVubmVycyAod2hpY2ggbWF5IHJ1biB1bmRl cgorLS0gZGlmZmVyZW50IHJvbGUgbmFtZXMpLgorLS0KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRs X3Rlc3Q7CitTRVQgc2VhcmNoX3BhdGggPSBwZ3RibF9kZGxfdGVzdDsKKworLS0gQmFzaWMgdGFi bGUgd2l0aCBQUklNQVJZIEtFWSwgTk9UIE5VTEwsIERFRkFVTFQsIENPTExBVEUuCitDUkVBVEUg VEFCTEUgYmFzaWMgKAorICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQgTk9U IE5VTEwgREVGQVVMVCAnYW5vbicgQ09MTEFURSAiQyIKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBJ ZGVudGl0eSBjb2x1bW5zICh3aXRoIGRlZmF1bHQgYW5kIGN1c3RvbSBzZXF1ZW5jZSBvcHRpb25z KS4KK0NSRUFURSBUQUJMRSBpZF9jb2xzICgKKyAgICBpZF9hbHdheXMgaW50IEdFTkVSQVRFRCBB TFdBWVMgQVMgSURFTlRJVFksCisgICAgaWRfZGVmYXVsdCBpbnQgR0VORVJBVEVEIEJZIERFRkFV TFQgQVMgSURFTlRJVFkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2Nv bHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBpZF9jdXN0 b20gKAorICAgIHYgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKAorICAgICAgICBT RVFVRU5DRSBOQU1FIGlkX2N1c3RvbV92X3NlcQorICAgICAgICBTVEFSVCBXSVRIIDEwMCBJTkNS RU1FTlQgQlkgNQorICAgICAgICBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwCisgICAgICAgIENB Q0hFIDEwIENZQ0xFCisgICAgKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn aWRfY3VzdG9tJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBHZW5lcmF0ZWQg c3RvcmVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fY29scyAoCisgICAgY2VudHMgaW50LAor ICAgIGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxXQVlTIEFTIChjZW50cyAvIDEwMC4wKSBT VE9SRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl9jb2xzJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBTVE9SQUdFIGFuZCBDT01QUkVTU0lPTiAo b25seSBlbWl0dGVkIHdoZW4gbm9uLWRlZmF1bHQgZm9yIHRoZSB0eXBlKS4KK0NSRUFURSBUQUJM RSBzdG9yYWdlX2NvbHMgKAorICAgIGEgdGV4dCBTVE9SQUdFIEVYVEVSTkFMLAorICAgIGIgdGV4 dCBTVE9SQUdFIE1BSU4sCisgICAgYyB0ZXh0IENPTVBSRVNTSU9OIHBnbHoKKyk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0b3JhZ2VfY29scyc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnKTsKKworLS0gQ29uc3RyYWludHM6IENIRUNLLCBVTklRVUUsIEZPUkVJR04gS0VZ IChERUZFUlJBQkxFKS4KK0NSRUFURSBUQUJMRSByZWZkIChpZCBpbnQgUFJJTUFSWSBLRVkpOwor Q1JFQVRFIFRBQkxFIGNvbnMgKAorICAgIGEgaW50IENIRUNLIChhID4gMCksCisgICAgYiBpbnQg VU5JUVVFLAorICAgIGMgaW50IFJFRkVSRU5DRVMgcmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFM TFkgREVGRVJSRUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIEluZGV4ZXM6IGZ1bmN0aW9uYWwgYW5k IHBhcnRpYWwuICBDb25zdHJhaW50LWJhY2tpbmcgaW5kZXhlcyBhcmUKKy0tIHN1cHByZXNzZWQg KHRoZXkgYXJlIGVtaXR0ZWQgYnkgdGhlIGNvbnN0cmFpbnQgbG9vcCkuCitDUkVBVEUgVEFCTEUg aWR4ZCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOworQ1JFQVRFIElOREVYIGlkeGRf bG93ZXIgT04gaWR4ZCAobG93ZXIobmFtZSkpOworQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBP TiBpZHhkIChpZCkgV0hFUkUgaWQgPiAxMDA7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIEluaGVyaXRhbmNl LCBpbmNsdWRpbmcgYSBjaGlsZCBERUZBVUxUIG92ZXJyaWRlIG9uIGFuIGluaGVyaXRlZCBjb2x1 bW4uCitDUkVBVEUgVEFCTEUgcGFyIChhIGludCBERUZBVUxUIDEsIGIgdGV4dCk7CitDUkVBVEUg VEFCTEUgY2ggKGMgaW50KSBJTkhFUklUUyAocGFyKTsKK0FMVEVSIFRBQkxFIGNoIEFMVEVSIENP TFVNTiBhIFNFVCBERUZBVUxUIDk5OTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn Y2gnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFBlci1jb2x1bW4gYXR0b3B0 aW9uczogZW1pdHRlZCBhcyBBTFRFUiBDT0xVTU4gU0VUICguLi4pLgorQ1JFQVRFIFRBQkxFIGF0 dG9wdCAoYSBpbnQsIGIgdGV4dCk7CitBTFRFUiBUQUJMRSBhdHRvcHQgQUxURVIgQ09MVU1OIGEg U0VUIChuX2Rpc3RpbmN0ID0gMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YXR0b3B0Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBQYXJ0aXRpb25lZCB0 YWJsZSBwYXJlbnQgKFJBTkdFIGFuZCBIQVNIKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2Ug KGlkIGludCwgayBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJT04gQlkgSEFT SCAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gUGFydGl0aW9uIGNoaWxkcmVuOiBGUk9N L1RPLCBXSVRIIChtb2R1bHVzLCByZW1haW5kZXIpLCBERUZBVUxULgorQ1JFQVRFIFRBQkxFIHBh cnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UKKyAgICBGT1IgVkFMVUVTIEZS T00gKDApIFRPICgxMDApOworQUxURVIgVEFCTEUgcGFydGVkX3JhbmdlXzEgQUxURVIgQ09MVU1O IGsgU0VUIERFRkFVTFQgNzsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVk X3JhbmdlXzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBw YXJ0ZWRfaGFzaF8wIFBBUlRJVElPTiBPRiBwYXJ0ZWRfaGFzaAorICAgIEZPUiBWQUxVRVMgV0lU SCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BhcnRlZF9oYXNoXzAnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFU RSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UgREVGQVVM VDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX3JhbmdlX2RlZic6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gUnVsZXMuCitDUkVBVEUgVEFCTEUgcnQg KGlkIGludCk7CitDUkVBVEUgVEFCTEUgcnRfbG9nIChpZCBpbnQpOworQ1JFQVRFIFJVTEUgcnRf bG9nX2luc2VydCBBUyBPTiBJTlNFUlQgVE8gcnQKKyAgICBETyBBTFNPIElOU0VSVCBJTlRPIHJ0 X2xvZyBWQUxVRVMgKE5FVy5pZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0 Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBFeHRlbmRlZCBzdGF0aXN0aWNz LgorQ1JFQVRFIFRBQkxFIHN0eCAoYSBpbnQsIGIgaW50LCBjIGludCk7CitDUkVBVEUgU1RBVElT VElDUyBzdHhfbmR2IChuZGlzdGluY3QpIE9OIGEsIGIgRlJPTSBzdHg7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKwor LS0gUm93LWxldmVsIHNlY3VyaXR5IHRvZ2dsZXMuCitDUkVBVEUgVEFCTEUgcmxzIChpZCBpbnQp OworQUxURVIgVEFCTEUgcmxzIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitBTFRFUiBUQUJM RSBybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdybHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFJFUExJQ0Eg SURFTlRJVFk6IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0aGUgZGVmYXVsdC4KK0NSRUFURSBUQUJM RSByaV9mdWxsIChhIGludCk7CitBTFRFUiBUQUJMRSByaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkg RlVMTDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRBQkxFIHJpX2lkeCAoYSBpbnQgTk9UIE5V TEwpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfYSBPTiByaV9pZHggKGEpOworQUxURVIg VEFCTEUgcmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfaWR4X2E7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeCc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKworLS0gVU5MT0dHRUQgKyByZWxvcHRpb25zLgorQ1JFQVRFIFVOTE9HR0VEIFRB QkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gNzApOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0t IFR5cGVkIHRhYmxlIChDUkVBVEUgVEFCTEUgT0YgdHlwZV9uYW1lKS4gIENvbHVtbnMgaW5oZXJp dGVkIGZyb20gdGhlCistLSB0eXBlIGVtaXQgbm90aGluZzsgbG9jYWxseS1hcHBsaWVkIERFRkFV TFQsIE5PVCBOVUxMIGFuZCBDSEVDSyBjb21lCistLSBvdXQgdGhyb3VnaCBhIHNpbmdsZSAiKGNv bCBXSVRIIE9QVElPTlMgLi4uKSIgbGlzdC4KK0NSRUFURSBUWVBFIHR5cGVkX3QgQVMgKGEgaW50 LCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIHR5cGVkX3BsYWluIE9GIHR5cGVkX3Q7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5cGVkX3BsYWluJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpOworCitDUkVBVEUgVEFCTEUgdHlwZWRfb3ZlciBPRiB0eXBlZF90ICgKKyAgICBh IFdJVEggT1BUSU9OUyBERUZBVUxUIDcgTk9UIE5VTEwsCisgICAgYiBXSVRIIE9QVElPTlMgTk9U IE5VTEwsCisgICAgQ09OU1RSQUlOVCBiX25vbmVtcHR5IENIRUNLIChsZW5ndGgoYikgPiAwKQor KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndHlwZWRfb3Zlcic6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gVGVtcG9yYXJ5IHRhYmxlcyArIE9OIENPTU1JVC4g IFRlbXAgdGFibGVzIGxpdmUgaW4gYSBzZXNzaW9uLWxvY2FsCistLSBuYW1lc3BhY2Ugd2hvc2Ug bmFtZSB2YXJpZXMgYmV0d2VlbiBydW5zLCBzbyB3ZSBzdHJpcCB0aGUgc2NoZW1hCistLSBwcmVm aXguICBPTiBDT01NSVQgRFJPUCBvbmx5IGZpcmVzIGF0IGNvbW1pdCwgc28gdGhlIHF1ZXJpZXMg dGhhdAorLS0gbmVlZCB0byBzZWUgdGhlIGNhdGFsb2cgZW50cnkgbXVzdCBydW4gaW4gdGhlIHNh bWUgdHJhbnNhY3Rpb24gYXMKKy0tIHRoZSBDUkVBVEUuCitCRUdJTjsKK0NSRUFURSBURU1QIFRB QkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVsZXRl IChpZCBpbnQpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBf ZHJvcCAoaWQgaW50KSBPTiBDT01NSVQgRFJPUDsKKworU0VMRUNUIHJlZ2V4cF9yZXBsYWNlKGxp bmUsICciP3BnX3RlbXBfP1swLTldKyI/XC4nLCAncGdfdGVtcC4nKSBBUyBsaW5lCitGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3RlbXBfZGVmYXVsdCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un KSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NSRUFURSAlJzsKKworU0VMRUNUIHJlZ2V4cF9y ZXBsYWNlKGxpbmUsICciP3BnX3RlbXBfP1swLTldKyI/XC4nLCAncGdfdGVtcC4nKSBBUyBsaW5l CitGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVsZXRlJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworCitTRUxFQ1Qg cmVnZXhwX3JlcGxhY2UobGluZSwgJyI/cGdfdGVtcF8/WzAtOV0rIj9cLicsICdwZ190ZW1wLicp IEFTIGxpbmUKK0ZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kcm9wJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworUk9M TEJBQ0s7CisKKy0tIFByZXR0eSBtb2RlLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLCAncHJldHR5JywgJ3RydWUnKTsK KworLS0gVkFSSUFESUMgQVJSQVlbLi4uXSBjYWxsIGZvcm06IG9wdGlvbiBwYWlycyBjYW4gYmUg cGFzc2VkIGFzIGEgc2luZ2xlCistLSB0ZXh0W10gdGFnZ2VkIHdpdGggVkFSSUFESUMsIGluIGFk ZGl0aW9uIHRvIHRoZSBwb3NpdGlvbmFsIHNwZWxsaW5nCistLSBleGVyY2lzZWQgYWJvdmUuICBU aGlzIHJlcXVpcmVzIHByb2FyZ3R5cGVzIHRvIGRlY2xhcmUgdGhlIHZhcmlhZGljCistLSBhcmd1 bWVudCBhcyB0aGUgYXJyYXkgdHlwZSAoX3RleHQpLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZBUklBRElDIEFSUkFZWydvd25lcicsICdmYWxzZSddKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0 X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWQVJJQURJQyBBUlJBWVsnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmV0dHknLCAndHJ1ZSddOjp0ZXh0W10pOwor CistLSBWQVJJQURJQyBOVUxMOjp0ZXh0W10gaXMgZXF1aXZhbGVudCB0byBvbWl0dGluZyB0aGUg dmFyaWFkaWMgYXJndW1lbnRzOworLS0gY2hlY2sgdGhlIHJvdyBjb3VudCByYXRoZXIgdGhhbiB0 aGUgcm93cyB0aGVtc2VsdmVzLCBiZWNhdXNlIHdpdGhvdXQKKy0tICdvd25lcicsICdmYWxzZScg dGhlIG91dHB1dCBjb250YWlucyBhbiBBTFRFUiBUQUJMRSAuLi4gT1dORVIgVE8gbGluZQorLS0g dGhhdCB2YXJpZXMgYWNyb3NzIHRlc3QgcnVubmVycy4KK1NFTEVDVCBjb3VudCgqKSA+IDAgQVMg b2sKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCBWQVJJQURJQyBO VUxMOjp0ZXh0W10pOworCistLSBvbmx5IC8gZXhjZXB0IGdhdGluZzogZWFjaCBlbWl0cyBlaXRo ZXIgb25seSB0aGUgbGlzdGVkIGtpbmRzCistLSAob25seSkgb3IgZXZlcnkga2luZCBleGNlcHQg dGhlIGxpc3RlZCBvbmVzIChleGNlcHQpLiAgVGhlIHR3bworLS0gYXJlIG11dHVhbGx5IGV4Y2x1 c2l2ZS4gIEtpbmQgdm9jYWJ1bGFyeTogdGFibGUsIGluZGV4LAorLS0gcHJpbWFyeV9rZXksIHVu aXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5LCBleGNsdXNpb24sIHJ1bGUsCistLSBzdGF0aXN0aWNz LCB0cmlnZ2VyLCBwb2xpY3ksIHJscywgcmVwbGljYV9pZGVudGl0eSwgcGFydGl0aW9uLgorLS0g Tk9UIE5VTEwgaXMgbm90IGluIHRoZSB2b2NhYnVsYXJ5IC0gYWx3YXlzIGVtaXR0ZWQgdG8gcHJl dmVudAorLS0gcHJvZHVjaW5nIHNjaGVtYXMgdGhhdCBzaWxlbnRseSBhY2NlcHQgTlVMTHMgdGhl IHNvdXJjZSB3b3VsZAorLS0gaGF2ZSByZWplY3RlZC4KKy0tCistLSBleGNlcHQ9aW5kZXggaGlk ZXMgdGhlIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdpbmRleCcpOworCistLSBleGNlcHQ9cHJpbWFy eV9rZXksdW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5LGV4Y2x1c2lvbiBoaWRlcyBldmVyeQorLS0g dGFibGUtbGV2ZWwgY29uc3RyYWludC4gIElubGluZSBDSEVDSyBpbiB0aGUgQ1JFQVRFIFRBQkxF IGJvZHkgaXMKKy0tIHN1cHByZXNzZWQgdG9vLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2V4Y2VwdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J3ByaW1hcnlfa2V5LHVuaXF1ZSxjaGVjayxmb3JlaWduX2tleSxleGNsdXNpb24nKTsKKworLS0g ZXhjZXB0PWZvcmVpZ25fa2V5IHN1cHByZXNzZXMgb25seSBGT1JFSUdOIEtFWSBjb25zdHJhaW50 czsKKy0tIFBSSU1BUlkgS0VZLCBVTklRVUUsIENIRUNLLCBhbmQgbmFtZWQgTk9UIE5VTEwgc3Rh eS4gIFRoaXMgaXMgdGhlCistLSBmaXJzdCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1jbG9uZSB3 b3JrZmxvdzogZW1pdCB0YWJsZXMgd2l0aG91dAorLS0gY3Jvc3MtdGFibGUgRktzLCBsb2FkIGRh dGEsIHRoZW4gcmUtcnVuIHdpdGggb25seT1mb3JlaWduX2tleQorLS0gdG8gYWRkIHRoZW0gb25j ZSBhbGwgdGFyZ2V0cyBleGlzdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29u cyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdleGNlcHQnLCAnZm9yZWlnbl9rZXknKTsKKworLS0gb25seT1mb3JlaWduX2tleSBp cyB0aGUgc2Vjb25kIHBhc3Mgb2YgdGhlIHR3by1wYXNzIEZLLWNsb25lCistLSB3b3JrZmxvdzog ZW1pdCBvbmx5IHRoZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgLi4uIEZPUkVJR04K Ky0tIEtFWSByb3dzOyB0aGUgQ1JFQVRFIFRBQkxFIGFuZCBldmVyeSBub24tRksgc3ViLW9iamVj dCBhcmUKKy0tIHN1cHByZXNzZWQgKHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cyBmcm9tIHRoZSBm aXJzdCBwYXNzKS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdv bmx5JywgJ2ZvcmVpZ25fa2V5Jyk7CisKKy0tIEEgdGFibGUgd2l0aCBubyBmb3JlaWduIGtleXMg cHJvZHVjZXMgbm8gcm93cyB1bmRlcgorLS0gb25seT1mb3JlaWduX2tleS4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncmVmZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2ZvcmVpZ25fa2V5Jyk7CisK Ky0tIG9ubHk9dGFibGUgZW1pdHMgb25seSB0aGUgYmFyZSBDUkVBVEUgVEFCTEUgKHdpdGggYW55 IGlubGluZQorLS0gY29sdW1uLWxldmVsIE5PVCBOVUxMIGFuZCBDSEVDSykgLSBubyBpbmRleGVz LCBubyBQUklNQVJZIEtFWSBBTFRFUiwKKy0tIG5vIG90aGVyIHN1Yi1vYmplY3RzLiAgVXNlZnVs IGZvciBjYXB0dXJpbmcgYSB0YWJsZSdzIHNoYXBlIHdpdGhvdXQKKy0tIHB1bGxpbmcgaW4gZXZl cnl0aGluZyBhdHRhY2hlZCB0byBpdC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn aWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdvbmx5JywgJ3RhYmxlJyk7CisKKy0tIG9ubHk9Y2hlY2sgb24gYSBub24tcGFy dGl0aW9uIHRhYmxlLiAgVGhlIGNvbnN0cmFpbnQgbG9vcCBtdXN0IGVtaXQKKy0tIGNvbHVtbi1s ZXZlbCBhbmQgdGFibGUtbGV2ZWwgQ0hFQ0sgY29uc3RyYWludHMgdmlhIEFMVEVSIFRBQkxFIGhl cmUsCistLSBiZWNhdXNlIHRoZSBpbmxpbmUgcGF0aCBpbiBDUkVBVEUgVEFCTEUgbmV2ZXIgcnVu cyAoS0lORF9UQUJMRSBpcworLS0gbm90IGluIHRoZSBmaWx0ZXIpLgorQ1JFQVRFIFRBQkxFIGNo a19vbmx5ICgKKyAgICBpZCAgaW50IFBSSU1BUlkgS0VZLAorICAgIHF0eSBpbnQgQ0hFQ0sgKHF0 eSA+IDApLAorICAgIENPTlNUUkFJTlQgY2hrX29ubHlfaWRfcG9zIENIRUNLIChpZCA+IDApCisp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaGtfb25seSc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5Jywg J2NoZWNrJyk7CitEUk9QIFRBQkxFIGNoa19vbmx5OworCistLSBvbmx5PXBhcnRpdGlvbiBvbiBh IHBhcnRpdGlvbmVkLXRhYmxlIHBhcmVudDogZWFjaCBjaGlsZCdzIGZ1bGwgRERMCistLSBpcyBl bWl0dGVkIChDUkVBVEUgVEFCTEUgLi4uIFBBUlRJVElPTiBPRiAuLi4pLiAgVGhlICJwYXJ0aXRp b24iCistLSBrZXl3b3JkIGlzIGEgZ2F0ZSBhdCB0aGUgcGFyZW50IGxldmVsOyBpdCBpcyBzdHJp cHBlZCBmcm9tIHRoZQorLS0gcHJvcGFnYXRlZCBmaWx0ZXIgc28gdGhlIGNoaWxkIGRvZXMgbm90 IGV4Y2x1ZGUgaXRzIG93bgorLS0gQ1JFQVRFIFRBQkxFLgorQ1JFQVRFIFRBQkxFIHBfb25seSAo aWQgaW50LCB2YWwgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUg cF9vbmx5X2EgUEFSVElUSU9OIE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworQ1JFQVRFIFRBQkxFIHBfb25seV9iIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBG Uk9NICgxMDApIFRPICgyMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwX29u bHknOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb25seScsICdwYXJ0aXRpb24nKTsKK0RST1AgVEFCTEUgcF9vbmx5OworCistLSBv bmx5IGFuZCBleGNlcHQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2ZvcmVpZ25fa2V5JywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ2ZvcmVpZ25fa2V5Jyk7CisKKy0tIFB1 Yi9zdWIgc2NoZW1hIGNsb25lOiBrZWVwIHRoZSB0YWJsZSBhbmQgaXRzIHByaW1hcnkga2V5LCBk cm9wIHRoZQorLS0gcmVzdCBvZiB0aGUgY29uc3RyYWludHMgc28gdGhlIHN1YnNjcmliZXIgY2Fu IHJlcGxpY2F0ZSB3aXRob3V0CistLSBwdWxsaW5nIGNyb3NzLXRhYmxlIGRlcGVuZGVuY2llcyBh bG9uZy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQn LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9r ZXksZXhjbHVzaW9uJyk7CisKKy0tIGV4Y2VwdD1ydWxlIGhpZGVzIHRoZSBDUkVBVEUgUlVMRS4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3J1bGUn KTsKKworLS0gZXhjZXB0PXN0YXRpc3RpY3MgaGlkZXMgdGhlIENSRUFURSBTVEFUSVNUSUNTLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3N0YXRp c3RpY3MnKTsKKworLS0gZXhjZXB0PXJscyBoaWRlcyB0aGUgRU5BQkxFL0ZPUkNFIFJPVyBMRVZF TCBTRUNVUklUWSB0b2dnbGVzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZXhjZXB0JywgJ3JscycpOworCistLSBleGNlcHQ9cmVwbGljYV9pZGVudGl0eSBoaWRl cyB0aGUgUkVQTElDQSBJREVOVElUWSBjbGF1c2UuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKKworLS0g UGFydGl0aW9uIGNoaWxkcmVuIGFyZSBlbWl0dGVkIGJ5IGRlZmF1bHQ7IGV4Y2VwdD1wYXJ0aXRp b24KKy0tIHN1cHByZXNzZXMgdGhlbSBzbyBvbmx5IHRoZSBwYXJ0aXRpb25lZC10YWJsZSBwYXJl bnQgY29tZXMgb3V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFu Z2UnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnZXhjZXB0JywgJ3BhcnRpdGlvbicpOworCistLSBVbmtub3duIGtpbmQgbmFtZSBp cyByZWplY3RlZCBhdCBvcHRpb24tcGFyc2UgdGltZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ25vX3N1Y2hfa2luZCcpOworCistLSBXaGl0 ZXNwYWNlIGFyb3VuZCBraW5kIG5hbWVzIGlzIGFsbG93ZWQ7IGNhc2UgaXMgZm9sZGVkLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICcgIElOREVY ICAsICAgUlVMRSAgJyk7CisKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2Ugc3RyaXBzIHRoZSBz Y2hlbWEgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlIGl0c2VsZgorLS0gYW5kIGZyb20gc2FtZS1zY2hl bWEgc2libGluZyByZWZlcmVuY2VzIChpbmhlcml0YW5jZS9wYXJ0aXRpb24KKy0tIHBhcmVudHMs IGlkZW50aXR5IHNlcXVlbmNlcyBpbiB0aGUgc2FtZSBzY2hlbWEpLCB3aGlsZSBjcm9zcy1zY2hl bWEKKy0tIHJlZmVyZW5jZXMgYXJlIGtlcHQgcXVhbGlmaWVkIGZvciBjb3JyZWN0bmVzcy4KKy0t CistLSBCYXJlIENSRUFURSBUQUJMRSBmb3IgYW4gb3JkaW5hcnkgdGFibGUuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFs c2UnKTsKKworLS0gSU5IRVJJVFMgcGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVk IHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjaCc6OnJlZ2Ns YXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdz Y2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIFBhcnRpdGlvbiBwYXJlbnQgaW4gdGhl IHNhbWUgc2NoZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFs c2UnKTsKKworLS0gQ3Jvc3Mtc2NoZW1hIEZLIHRhcmdldCBrZWVwcyBxdWFsaWZpY2F0aW9uLiAg VGhlICdyZWZkJyB0YWJsZSBpcyBpbgorLS0gcGd0YmxfZGRsX3Rlc3Q7IHBsYWNlIGFuIEZLIHRh cmdldCBpbiBhIGRpZmZlcmVudCBzY2hlbWEgYW5kIHZlcmlmeSBpdAorLS0gc3RheXMgcXVhbGlm aWVkIGV2ZW4gd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorQ1JFQVRFIFNDSEVNQSBwZ3Ri bF9kZGxfb3RoZXI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX290aGVyLnBhcmVudCAoaWQgaW50 IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSB4c2NoZW1hX2ZrICgKKyAgICBpZCAgaW50IFBS SU1BUlkgS0VZLAorICAgIHBpZCBpbnQgUkVGRVJFTkNFUyBwZ3RibF9kZGxfb3RoZXIucGFyZW50 CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd4c2NoZW1hX2ZrJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nj aGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKworLS0gSWRlbnRpdHkgY29sdW1uIHdpdGggYSBj dXN0b20gc2VxdWVuY2UgbmFtZSBpbiB0aGUgc2FtZSBzY2hlbWEgaXMKKy0tIGVtaXR0ZWQgdW5x dWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2N1c3RvbSc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIFJvdW5kLXRyaXA6IHdpdGggc2No ZW1hX3F1YWxpZmllZD1mYWxzZSwgYWZ0ZXIgU0VUIHNlYXJjaF9wYXRoIHRoZQorLS0gRERMIGNh biBiZSByZXBsYXllZCBpbnRvIGEgZGlmZmVyZW50IHRhcmdldCBzY2hlbWEuCitDUkVBVEUgU0NI RU1BIHBndGJsX2RkbF9yZXBsYXk7CitETyAkJAorREVDTEFSRQorICAgIHN0bXQgdGV4dDsKK0JF R0lOCisgICAgU0VUIExPQ0FMIHNlYXJjaF9wYXRoID0gcGd0YmxfZGRsX3JlcGxheTsKKyAgICBG T1Igc3RtdCBJTgorICAgICAgICBTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Bn dGJsX2RkbF90ZXN0LmJhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKSBBUyBsaW5l CisgICAgTE9PUAorICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgRU5EIExPT1A7CitFTkQgJCQ7 CitTRUxFQ1QgcmVsbmFtZXNwYWNlOjpyZWduYW1lc3BhY2U6OnRleHQsIHJlbG5hbWUKK0ZST00g cGdfY2xhc3MgV0hFUkUgb2lkID0gJ3BndGJsX2RkbF9yZXBsYXkuYmFzaWMnOjpyZWdjbGFzczsK K0RST1AgU0NIRU1BIHBndGJsX2RkbF9yZXBsYXkgQ0FTQ0FERTsKK0RST1AgVEFCTEUgeHNjaGVt YV9mazsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworCistLSBMb2NhbGx5 LWRlY2xhcmVkIENIRUNLIG9uIGEgcGFydGl0aW9uIGNoaWxkIGhhcyBubyBpbmxpbmUgY29sdW1u CistLSBsaXN0IHRvIGxpdmUgaW4gKFBBUlRJVElPTiBPRiBmb3JtKSwgc28gaXQgbXVzdCBjb21l IG91dCBhcyBhCistLSBzZXBhcmF0ZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgc3Rh dGVtZW50LgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGsgKGlkIGludCwgdmFsIGludCkgUEFSVElU SU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX2Noa19jaGlsZCBQQVJUSVRJ T04gT0YgcGFydGVkX2NoaworICAgIChDT05TVFJBSU5UIGNoa19pbmxpbmUgQ0hFQ0sgKHZhbCA+ IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3BhcnRlZF9jaGtfY2hpbGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJyk7CitEUk9QIFRBQkxFIHBhcnRlZF9jaGs7CisKKy0tIEluaGVyaXRhbmNlIGNoaWxkcmVu IG9mIGEgcGFyZW50IHdpdGggYSBnZW5lcmF0ZWQgY29sdW1uIHNob3VsZCBub3QKKy0tIGVtaXQg YW4gQUxURVIgQ09MVU1OIC4uLiBTRVQgREVGQVVMVCBmb3IgdGhlIGluaGVyaXRlZCBnZW5lcmF0 ZWQKKy0tIGNvbHVtbjogdGhlIEdFTkVSQVRFRCBleHByZXNzaW9uIGNhcnJpZXMgZG93biB0aHJv dWdoIGluaGVyaXRhbmNlLAorLS0gYW5kIFNFVCBERUZBVUxUIHdvdWxkIGZhaWwgYXQgcmVwbGF5 IGFnYWluc3QgYSBnZW5lcmF0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhcl9nZW4gKAorICAg IGlkIGludCwKKyAgICBnICBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaWQgKiAyKSBTVE9SRUQK Kyk7CitDUkVBVEUgVEFCTEUgY2hfZ2VuICgpIElOSEVSSVRTIChwYXJfZ2VuKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hfZ2VuJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScpOworRFJPUCBUQUJMRSBwYXJfZ2VuIENBU0NBREU7CisKKy0tIEEgdXNlci1uYW1lZCBOT1Qg TlVMTCBvbiBhIGxvY2FsIGNvbHVtbiBpcyBlbWl0dGVkIGlubGluZSBhcworLS0gIkNPTlNUUkFJ TlQgbmFtZSBOT1QgTlVMTCIgc28gdGhlIG9yaWdpbmFsIG5hbWUgaXMgcHJlc2VydmVkLiAgQW4K Ky0tIGF1dG8tbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBhcyBh IHBsYWluIGlubGluZQorLS0gIk5PVCBOVUxMIiAtIFBHIHJlLWNyZWF0ZXMgdGhlIGF1dG8tbmFt ZWQgY29uc3RyYWludCB3aGVuIENSRUFURQorLS0gVEFCTEUgcnVucywgc28gdGhlIGNvbnN0cmFp bnQgbG9vcCBza2lwcyBib3RoIGZvcm1zIHRvIGF2b2lkIHRoZQorLS0gcmVkdW5kYW50IChhbmQg b24gdGFibGUtcmVuYW1lIG9yIHNlcXVlbmNlLWNvbGxpc2lvbiwgYnJva2VuKQorLS0gQUxURVIg VEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIC4uLiBOT1QgTlVMTCBzdGF0ZW1lbnQuCitDUkVBVEUg VEFCTEUgbm5fbmFtZWQgKAorICAgIGEgaW50IENPTlNUUkFJTlQgbXlfbm4gTk9UIE5VTEwsCisg ICAgYiBpbnQgTk9UIE5VTEwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25u X25hbWVkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworRFJPUCBUQUJMRSBubl9uYW1l ZDsKKworLS0gUmVuYW1pbmcgdGhlIHRhYmxlIGFmdGVyIGFuIElERU5USVRZIE5PVCBOVUxMIGNv bHVtbiB3YXMgZGVjbGFyZWQKKy0tIGxlYXZlcyB0aGUgYXV0by1uYW1lZCBjb25zdHJhaW50IGZy b3plbiBhdCB0aGUgb3JpZ2luYWwgbmFtZSwgd2hpY2gKKy0tIG5vIGxvbmdlciBtYXRjaGVzIHRo ZSBwb3N0LXJlbmFtZSAiPHRhYmxlPl88Y29sPl9ub3RfbnVsbCIgcGF0dGVybi4KKy0tIFRoZSBl bWl0dGVkIERETCBtdXN0IHN0aWxsIHJvdW5kLXRyaXA6IHRoZSBjb25zdHJhaW50IGxvb3AgbXVz dCBub3QKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBhIHNlY29uZCBOT1QgTlVM TCwgc2luY2UgQ1JFQVRFIFRBQkxFCistLSB3aXRoIHRoZSBpbmxpbmUgSURFTlRJVFkgYWxyZWFk eSBjcmVhdGVzIGFuIGF1dG8tTk9ULU5VTEwgdW5kZXIgdGhlCistLSBuZXcgdGFibGUgbmFtZSBh bmQgUEcgb25seSBwZXJtaXRzIG9uZSBOT1QgTlVMTCBwZXIgY29sdW1uLgorQ1JFQVRFIFRBQkxF IG5uX3JlbmFtZWQgKAorICAgIGEgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgTk9U IE5VTEwKKyk7CitBTFRFUiBUQUJMRSBubl9yZW5hbWVkIFJFTkFNRSBUTyBubl9yZW5hbWVkMjsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fcmVuYW1lZDInOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CitEUk9QIFRBQkxFIG5uX3JlbmFtZWQyOworCistLSBMb2NhbGx5 LWRlY2xhcmVkIE5PVCBOVUxMIG9uIGFuIGluaGVyaXRlZCBjb2x1bW4uICBUaGUgY29sdW1uIGl0 c2VsZgorLS0gaXMgb21pdHRlZCBmcm9tIHRoZSBjaGlsZCdzIGNvbHVtbiBsaXN0IChhdHRpc2xv Y2FsPWZhbHNlKSwgc28gdGhlCistLSB1c2VyLW5hbWVkIE5PVCBOVUxMIG11c3QgY29tZSBvdXQg dmlhIHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50CistLSBsb29wIHJhdGhlciB0aGFuIGlubGlu ZS4KK0NSRUFURSBUQUJMRSBubl9wYXIgKGEgaW50KTsKK0NSRUFURSBUQUJMRSBubl9jaCAoYiBp bnQpIElOSEVSSVRTIChubl9wYXIpOworQUxURVIgVEFCTEUgbm5fY2ggQUREIENPTlNUUkFJTlQg bXlfbm4gTk9UIE5VTEwgYTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fY2gn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CitEUk9QIFRBQkxFIG5uX3BhciBDQVNDQURF OworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgZHJvcCB0aGUgc2NoZW1hIHByZWZp eCBmcm9tIERFRkFVTFQKKy0tIGV4cHJlc3Npb25zIGFuZCBpbmxpbmUgQ0hFQ0sgYm9kaWVzIHRo YXQgcmVmZXJlbmNlIHNhbWUtc2NoZW1hCistLSBvYmplY3RzIChzZXF1ZW5jZSB2aWEgbmV4dHZh bCwgZnVuY3Rpb24gdmlhIGRpcmVjdCBjYWxsKS4gIFRoaXMKKy0tIHJlbGllcyBvbiB0aGUgZGVw YXJzZXIgcmVzcGVjdGluZyB0aGUgbmFycm93ZWQgc2VhcmNoX3BhdGggcmF0aGVyCistLSB0aGFu IG9uIHN1YnN0cmluZyBzdHJpcHBpbmcuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF94cmVmOwor Q1JFQVRFIFNFUVVFTkNFIHBndGJsX2RkbF94cmVmLm15c2VxOworQ1JFQVRFIEZVTkNUSU9OIHBn dGJsX2RkbF94cmVmLmYoaW50KSBSRVRVUk5TIGludCBMQU5HVUFHRSBzcWwgSU1NVVRBQkxFCisg ICAgQVMgJ1NFTEVDVCAkMSc7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3hyZWYudCAoCisgICAg aWQgIGludCBERUZBVUxUIG5leHR2YWwoJ3BndGJsX2RkbF94cmVmLm15c2VxJyksCisgICAgdmFs IGludCwKKyAgICBDT05TVFJBSU5UIGNoayBDSEVDSyAocGd0YmxfZGRsX3hyZWYuZih2YWwpID4g MCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BndGJsX2RkbF94cmVmLnQn OjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywg J2ZhbHNlJyk7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfeHJlZiBDQVNDQURFOworCistLSBzY2hl bWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgc3RyaW5nIGxpdGVyYWxzIHdob3Nl CistLSBjb250ZW50cyBoYXBwZW4gdG8gY29udGFpbiB0aGUgc2NoZW1hIG5hbWUgZm9sbG93ZWQg YnkgYSBkb3QuICBUaGUKKy0tIGluLXN0cmluZyBzdGF0ZSBvZiB0aGUgcHJlZml4IHN0cmlwcGVy IHByZXNlcnZlcyB0aGVtIHZlcmJhdGltLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfc3RyOwor Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucCAoaWQgaW50LCBub3RlIHRleHQpIFBBUlRJVElP TiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9zdHIucGMgUEFSVElUSU9O IE9GIHBndGJsX2RkbF9zdHIucAorICAgIChDT05TVFJBSU5UIGNoayBDSEVDSyAobm90ZSA8PiAn cGd0YmxfZGRsX3N0ci5zZWNyZXQnKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfc3RyLnBjJzo6cmVn Y2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxz ZScpOworRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3N0ciBDQVNDQURFOworCistLSBzY2hlbWFfcXVh bGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycwor LS0gd2hvc2UgY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxv d2VkIGJ5IGEgZG90CistLSAoZm9yIGV4YW1wbGUgYSBjb2x1bW4gbGl0ZXJhbGx5IG5hbWVkICI8 c2NoZW1hPi53ZWlyZCIgaW5zaWRlIHRoYXQKKy0tIHNjaGVtYSkuICBUaGUgaW4taWRlbnQgc3Rh dGUgb2YgdGhlIHByZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMgdGhlbQorLS0gdmVyYmF0aW0uCitD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xaWQ7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5w IChpZCBpbnQsICJwZ3RibF9kZGxfcWlkLndlaXJkIiBpbnQpCisgICAgUEFSVElUSU9OIEJZIFJB TkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wYyBQQVJUSVRJT04gT0YgcGd0 YmxfZGRsX3FpZC5wCisgICAgKENPTlNUUkFJTlQgY2hrIENIRUNLICgicGd0YmxfZGRsX3FpZC53 ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcWlkLnBjJzo6cmVnY2xhc3MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBT Q0hFTUEgcGd0YmxfZGRsX3FpZCBDQVNDQURFOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl IHdoZW4gdGhlIGJhc2Ugc2NoZW1hIG5hbWUgaXRzZWxmIHJlcXVpcmVzCistLSBxdW90aW5nIChp dHMgcHJlZml4IHN0YXJ0cyB3aXRoICIpLiAgQm90aCBmb3JtcyBvZiB0aGUgcHJlZml4IC0KKy0t IGJhcmUtbG93ZXJjYXNlIGFuZCBxdW90ZWQgLSBtdXN0IGJlIHN0cmlwcGVkIGZyb20gb3V0ZXIK Ky0tIEFMVEVSIFRBQkxFIC8gT04gLyBDUkVBVEUgSU5ERVggcHJlZml4ZXMsIHdoaWxlIGlubmVy IHF1b3RlZAorLS0gaWRlbnRpZmllcnMgdGhhdCBoYXBwZW4gdG8gYmVnaW4gdGhlIHNhbWUgd2F5 IG11c3QgYmUgcHJlc2VydmVkLgorQ1JFQVRFIFNDSEVNQSAiUGdUYmwtRGRsLVEiOworQ1JFQVRF IFRBQkxFICJQZ1RibC1EZGwtUSIuIlQiIChpZCBpbnQsIHZhbCBpbnQsCisgICAgQ09OU1RSQUlO VCBjaGsgQ0hFQ0sgKHZhbCA+IDApKTsKK0NSRUFURSBJTkRFWCAiVF92YWxfaWR4IiBPTiAiUGdU YmwtRGRsLVEiLiJUIiAodmFsKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnIlBn VGJsLURkbC1RIi4iVCInOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hl bWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CitEUk9QIFNDSEVNQSAiUGdUYmwtRGRsLVEiIENBU0NB REU7CisKKy0tIEVycm9yOiBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUuCitD UkVBVEUgVklFVyB2IEFTIFNFTEVDVCAxIEFTIHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3YnOjpyZWdjbGFzcyk7CisKK0NSRUFURSBTRVFVRU5DRSBzOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdzJzo6cmVnY2xhc3MpOworCistLSBOVUxMIGFyZ3VtZW50IHJl dHVybnMgbm8gcm93cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbChOVUxMKTsKKwor LS0gVW5yZWNvZ25pemVkIG9wdGlvbi4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywgJ2JvZ3VzJywgJ3RydWUnKTsKKworLS0gT2RkIG51bWJlciBvZiB2 YXJpYWRpYyBhcmdzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJl Z2NsYXNzLCAncHJldHR5Jyk7CisKKy0tIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdmFs aWRhdGlvbjogaWYgdGhlIHJlZmVyZW5jZWQgaW5kZXgKKy0tIHdvdWxkIG5vdCBiZSBlbWl0dGVk IChiZWNhdXNlIGl0cyBzb3VyY2Uga2luZCBpcyBzdXBwcmVzc2VkKSBidXQKKy0tIHJlcGxpY2Ff aWRlbnRpdHkgaXRzZWxmIHdvdWxkIGJlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGFuIGVycm9yIHNv CistLSB0aGUgZW1pdHRlZCBEREwgbmV2ZXIgZGFuZ2xlcy4gIEV4ZXJjaXNlIGFsbCB0aHJlZSBj b25zdHJhaW50LWJhY2tlZAorLS0gZm9ybXMgKFBLLCBVTklRVUUsIEVYQ0xVU0lPTikgYW5kIGEg YmFyZSBDUkVBVEUgVU5JUVVFIElOREVYLCBpbgorLS0gYm90aCB0aGUgZXhjZXB0LWxpc3QgYW5k IG9ubHktbGlzdCBzaGFwZXMuCistLQorLS0gUEstYmFja2VkOiBleGNlcHQ9cHJpbWFyeV9rZXkg d2l0aG91dCBleGNlcHQ9cmVwbGljYV9pZGVudGl0eS4KK0NSRUFURSBUQUJMRSByaV9wa19leGNs IChhIGludCBQUklNQVJZIEtFWSk7CitBTFRFUiBUQUJMRSByaV9wa19leGNsIFJFUExJQ0EgSURF TlRJVFkgVVNJTkcgSU5ERVggcmlfcGtfZXhjbF9wa2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdwcmltYXJ5X2tleScpOworLS0g U2FtZSBjYWxsIGJ1dCBhbHNvIGV4Y2x1ZGluZyByZXBsaWNhX2lkZW50aXR5IHN1Y2NlZWRzLgor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsICdv d25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcs ICdwcmltYXJ5X2tleSxyZXBsaWNhX2lkZW50aXR5Jyk7CitEUk9QIFRBQkxFIHJpX3BrX2V4Y2w7 CisKKy0tIFVOSVFVRS1jb25zdHJhaW50LWJhY2tlZCByZXBsaWNhIGlkZW50aXR5IGluZGV4Lgor Q1JFQVRFIFRBQkxFIHJpX3VuaXFfZXhjbCAoYSBpbnQgTk9UIE5VTEwgVU5JUVVFLCBiIGludCk7 CitBTFRFUiBUQUJMRSByaV91bmlxX2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBy aV91bmlxX2V4Y2xfYV9rZXk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX3Vu aXFfZXhjbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdleGNlcHQnLCAndW5pcXVlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3JpX3VuaXFfZXhjbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAndW5pcXVlLHJlcGxpY2FfaWRl bnRpdHknKTsKK0RST1AgVEFCTEUgcmlfdW5pcV9leGNsOworCistLSBCYXJlIENSRUFURSBVTklR VUUgSU5ERVggKG5vIGJhY2tpbmcgY29uc3RyYWludCkgdXNlZCBhcyBSRVBMSUNBCistLSBJREVO VElUWTogdGhlIGluZGV4IGlzIGVtaXR0ZWQgYnkgdGhlICJpbmRleCIga2luZCwgc28gZXhjbHVk aW5nCistLSAiaW5kZXgiIHdpdGhvdXQgYWxzbyBleGNsdWRpbmcgInJlcGxpY2FfaWRlbnRpdHki IG11c3QgZXJyb3IuCitDUkVBVEUgVEFCTEUgcmlfaWR4X2V4Y2wgKGEgaW50IE5PVCBOVUxMLCBi IGludCk7CitDUkVBVEUgVU5JUVVFIElOREVYIHJpX2lkeF9leGNsX2FfdW5pcSBPTiByaV9pZHhf ZXhjbCAoYSk7CitBTFRFUiBUQUJMRSByaV9pZHhfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHJpX2lkeF9leGNsX2FfdW5pcTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncmlfaWR4X2V4Y2wnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ2luZGV4Jyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdpbmRleCxyZXBsaWNh X2lkZW50aXR5Jyk7CitEUk9QIFRBQkxFIHJpX2lkeF9leGNsOworCistLSBJbmNsdWRlLXNpZGUg YW5hbG9nOiBvbmx5PXJlcGxpY2FfaWRlbnRpdHkgbXVzdCBpbmNsdWRlIHRoZSBraW5kCistLSB0 aGF0IGVtaXRzIHRoZSBpbmRleCwgb3IgdGhlIGZ1bmN0aW9uIGVycm9ycy4KK0NSRUFURSBUQUJM RSByaV9vbmx5IChhIGludCBOT1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FMVEVSIFRBQkxFIHJp X29ubHkgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ffa2V5OworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncmVwbGljYV9p ZGVudGl0eScpOworLS0gSW5jbHVkaW5nIGJvdGgga2luZHMgc3VjY2VlZHMuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX29ubHknOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICd1bmlxdWUscmVwbGlj YV9pZGVudGl0eScpOworRFJPUCBUQUJMRSByaV9vbmx5OworCistLSBQZXIta2luZCBvbmx5IC8g ZXhjZXB0IGNvdmVyYWdlLiAgRm9yIGVhY2gga2luZCBpbiB0aGUgdm9jYWJ1bGFyeSwKKy0tIHZl cmlmeSB0aGF0IG9ubHk9SyBlbWl0cyBqdXN0IHRoYXQga2luZCdzIG91dHB1dCBhbmQgdGhhdCBl eGNlcHQ9SworLS0gb21pdHMganVzdCB0aGF0IGtpbmQncyBvdXRwdXQuICBLaW5kcyB3aXRoIG5v IGZpeHR1cmUgYWJvdmUgKHRyaWdnZXIsCistLSBwb2xpY3kpIGFyZSBzdGlsbCByZWNvZ25pemVk IGJ1dCBjdXJyZW50bHkgZW1pdCBub3RoaW5nOyBvbmx5PUsKKy0tIHJldHVybnMgemVybyByb3dz IGZvciB0aGVtLiAgRml4dHVyZXMgdXNlZDoKKy0tICAgaWR4ZDogUEsgKyB0d28gc2Vjb25kYXJ5 IENSRUFURSBJTkRFWAorLS0gICBjb25zOiBQSyArIFVOSVFVRSArIENIRUNLICsgRksgKGNvbnN0 cmFpbnQtYmFja2VkKQorLS0gICBydDogICBDUkVBVEUgUlVMRQorLS0gICBzdHg6ICBDUkVBVEUg U1RBVElTVElDUworLS0gICBybHM6ICBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZCist LSAgIHJpX2Z1bGw6IFJFUExJQ0EgSURFTlRJVFkgRlVMTCAobm8gc291cmNlLWtpbmQgZGVwZW5k ZW5jeSkKK0NSRUFURSBUQUJMRSBleGNsX2ZpeCAocm5nIGludDRyYW5nZSwKKyAgICBFWENMVURF IFVTSU5HIGdpc3QgKHJuZyBXSVRIICYmKSk7CisKKy0tIG9ubHk9SzogZW1pdCBvbmx5IGtpbmQg SydzIHN0YXRlbWVudHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnb25seScsICdpbmRleCcpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhk Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ29ubHknLCAncHJpbWFyeV9rZXknKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdvbmx5JywgJ3VuaXF1ZScpOworU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdleGNsX2ZpeCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2V4Y2x1c2lvbicpOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3J1bGUnKTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAnc3RhdGlzdGljcycpOwor U0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdybHMnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdybHMnKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3Jl cGxpY2FfaWRlbnRpdHknKTsKKy0tIHRyaWdnZXIgLyBwb2xpY3kgYXJlIHNjYWZmb2xkZWQgYnV0 IG5vdCB5ZXQgZW1pdHRpbmc7IG9ubHk9SyBpcyBhCistLSB2YWxpZCBmaWx0ZXIgdGhhdCBwcm9k dWNlcyB6ZXJvIHJvd3MuICBXaGVuIHRoZSBzdGFuZGFsb25lCistLSBwZ19nZXRfdHJpZ2dlcl9k ZGwgLyBwZ19nZXRfcG9saWN5X2RkbCBoZWxwZXJzIGxhbmQsIHRoZXNlIHF1ZXJpZXMKKy0tIHN0 YXJ0IHJldHVybmluZyByb3dzIHdpdGhvdXQgYW4gQVBJIGNoYW5nZS4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICd0cmlnZ2VyJyk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncG9saWN5Jyk7CisK Ky0tIGV4Y2VwdD1LOiBlbWl0IGV2ZXJ5dGhpbmcgZXhjZXB0IGtpbmQgSydzIHN0YXRlbWVudHMu ICBQSy9VTklRVUUvCistLSBJTkRFWCBhcmUgZXhlcmNpc2VkIG9uIHRhYmxlcyB3aXRob3V0IFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgKKy0tIHNvIHRoZSB2YWxpZGF0aW9uIGRvZXMgbm90 IHRyaXAuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0 JywgJ3ByaW1hcnlfa2V5Jyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZXhjZXB0JywgJ3VuaXF1ZScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRs KCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ2V4Y2VwdCcsICdjaGVjaycpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdleGNsX2ZpeCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnZXhjbHVzaW9uJyk7CistLSBleGNlcHQ9 dGFibGUgc3VwcHJlc3NlcyB0aGUgQ1JFQVRFIFRBQkxFICsgT1dORVIgKyBjaGlsZC1kZWZhdWx0 CistLSBTRVQgREVGQVVMVCArIGF0dG9wdGlvbnMgcGFzc2VzLCBsZWF2aW5nIG9ubHkgdGhlIHN1 Yi1vYmplY3QgcGFzc2VzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2V4Y2VwdCcsICd0YWJsZScpOworCistLSBNdWx0aS1raW5kIGNvbXBvc2l0aW9ucy4KK1NF TEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3RhYmxlLGlu ZGV4Jyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScs ICdwcmltYXJ5X2tleSxmb3JlaWduX2tleScpOworLS0gRHVwbGljYXRlIGVudHJpZXMgaW4gdGhl IGxpc3QgYXJlIHNpbGVudGx5IGRlLWR1cGxpY2F0ZWQgYnkgdGhlCistLSBCaXRtYXBzZXQuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdpbmRleCxp bmRleCcpOworCitEUk9QIFRBQkxFIGV4Y2xfZml4OworCistLSBvbmx5PUsgb24gYSB0YWJsZSB0 aGF0IGRvZXMgbm90IGhhdmUgYW55IEsgb2YgdGhhdCBraW5kIGlzIGEgdmFsaWQKKy0tIGZpbHRl ciBhbmQgcmV0dXJucyB6ZXJvIHJvd3MuICBUZXN0ZWQgcHJldmlvdXNseSB3aXRoIGZvcmVpZ25f a2V5CistLSBvbiAncmVmZCc7IGhlcmUgYWxzbyBydWxlLCBzdGF0aXN0aWNzLCBybHMsIHJlcGxp Y2FfaWRlbnRpdHksIGFuZAorLS0gZXhjbHVzaW9uIG9uICdiYXNpYycgKHdoaWNoIGhhcyBvbmx5 IFBLICsgY29sdW1ucykuCitTRUxFQ1QgY291bnQoKikgQVMgcnVsZV9yb3dzCisgIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3J1bGUnKTsKK1NFTEVDVCBjb3VudCgqKSBBUyBz dGF0c19yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3N0YXRpc3Rp Y3MnKTsKK1NFTEVDVCBjb3VudCgqKSBBUyBybHNfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAnb25seScsICdybHMnKTsKK1NFTEVDVCBjb3VudCgqKSBBUyByaV9yb3dzCisgIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKK1NF TEVDVCBjb3VudCgqKSBBUyBleGNsX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNp Yyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg J29ubHknLCAnZXhjbHVzaW9uJyk7CisKKy0tIElucHV0LXZhbGlkYXRpb24gZWRnZSBjYXNlcyBm b3IgdGhlIGNvbW1hLXNlcGFyYXRlZCBraW5kIGxpc3QuICBBbGwKKy0tIG9mIHRoZXNlIHJhaXNl IGFuIGVycm9yIGF0IHRoZSB2YXJpYWRpYy1wYXJzZSBzdGVwOyB0aGUgZnVuY3Rpb24KKy0tIG5l dmVyIHJlYWNoZXMgcmVsYXRpb24gb3Blbi4KKy0tIEVtcHR5IGxpc3Q6CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJycpOworLS0gV2hp dGVzcGFjZS1vbmx5IGxpc3Q6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsICdvbmx5JywgJyAgICcpOworLS0gVHJhaWxpbmcgY29tbWE6CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJ2luZGV4 LCcpOworLS0gTGVhZGluZyBjb21tYToKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywgJ29ubHknLCAnLGluZGV4Jyk7CistLSBDb25zZWN1dGl2ZSBjb21t YXM6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdv bmx5JywgJ2luZGV4LCxydWxlJyk7CistLSBUb2tlbiBjb250YWluaW5nIGlubmVyIHdoaXRlc3Bh Y2U6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdv bmx5JywgJ2ZvcmVpZ24ga2V5Jyk7CistLSBOVUxMIHZhbHVlIGZvciBhIG5vbi1OVUxMIG9wdGlv bjoKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ29u bHknLCBOVUxMKTsKKy0tIE9wdGlvbiBzcGVjaWZpZWQgdHdpY2UgYXMgc2VwYXJhdGUgbmFtZS92 YWx1ZSBwYWlyczoKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdj bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdpbmRleCcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncnVsZScpOworLS0gU2FtZSBr aW5kIHNwZWNpZmllZCB0aHJvdWdoIGJvdGggb3B0aW9ucyBpcyBzdGlsbCBtdXRleC1yZWplY3Rl ZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdpbmRleCcsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdydWxlJyk7CisKKy0tIFJvdW5kLXRyaXAg dmVyaWZpY2F0aW9uLiAgRm9yIGV2ZXJ5IHRlc3QgdGFibGUsIGNhcHR1cmUgdGhlIERETCB0aGUK Ky0tIGZ1bmN0aW9uIGVtaXRzLCBkcm9wIHRoZSBzY2hlbWEsIHJlcGxheSBlYWNoIHRhYmxlJ3Mg RERMIGluCistLSBkZXBlbmRlbmN5IG9yZGVyLCBhbmQgY29uZmlybSB0aGF0IHBnX2dldF90YWJs ZV9kZGwgb24gdGhlIHJlY3JlYXRlZAorLS0gcmVsYXRpb24gbWF0Y2hlcyB0aGUgb3JpZ2luYWwg bGluZS1mb3ItbGluZS4gIFRoZSBmaW5hbCBTRUxFQ1QgbXVzdAorLS0gcmV0dXJuIHplcm8gcm93 cy4KK0NSRUFURSBURU1QIFRBQkxFIHBndGJsX2RkbF9ydF9vcmlnIChuYW1lIHRleHQsIG9yZCBp bnQsIGxpbmUgdGV4dCk7CitJTlNFUlQgSU5UTyBwZ3RibF9kZGxfcnRfb3JpZworU0VMRUNUIHQu bmFtZSwgby5vcmQsIG8ubGluZQorRlJPTSAoVkFMVUVTCisgICAgICAgICgnYmFzaWMnKSwgKCdp ZF9jb2xzJyksICgnaWRfY3VzdG9tJyksICgnZ2VuX2NvbHMnKSwgKCdzdG9yYWdlX2NvbHMnKSwK KyAgICAgICAgKCdyZWZkJyksICgnY29ucycpLCAoJ2lkeGQnKSwKKyAgICAgICAgKCdwYXInKSwg KCdjaCcpLCAoJ2F0dG9wdCcpLAorICAgICAgICAoJ3BhcnRlZF9yYW5nZScpLCAoJ3BhcnRlZF9y YW5nZV8xJyksICgncGFydGVkX3JhbmdlX2RlZicpLAorICAgICAgICAoJ3BhcnRlZF9oYXNoJyks ICgncGFydGVkX2hhc2hfMCcpLAorICAgICAgICAoJ3J0X2xvZycpLCAoJ3J0JyksCisgICAgICAg ICgnc3R4JyksICgncmxzJyksICgncmlfZnVsbCcpLCAoJ3JpX2lkeCcpLCAoJ3VubycpCisgICAg ICkgQVMgdChuYW1lKSwKKyAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0YmxfZGRs X3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdvd25lcicsICdmYWxzZScpIFdJVEggT1JESU5BTElUWSBvKGxpbmUsIG9yZCk7CisKK0RP ICQkCitERUNMQVJFCisgICAgdGFibGVzIENPTlNUQU5UIHRleHRbXSA6PSBBUlJBWVsKKyAgICAg ICAgJ2Jhc2ljJywgJ2lkX2NvbHMnLCAnaWRfY3VzdG9tJywgJ2dlbl9jb2xzJywgJ3N0b3JhZ2Vf Y29scycsCisgICAgICAgICdyZWZkJywgJ2NvbnMnLCAnaWR4ZCcsCisgICAgICAgICdwYXInLCAn Y2gnLCAnYXR0b3B0JywKKyAgICAgICAgJ3BhcnRlZF9yYW5nZScsICdwYXJ0ZWRfcmFuZ2VfMScs ICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAgJ3BhcnRlZF9oYXNoJywgJ3BhcnRlZF9oYXNo XzAnLAorICAgICAgICAncnRfbG9nJywgJ3J0JywKKyAgICAgICAgJ3N0eCcsICdybHMnLCAncmlf ZnVsbCcsICdyaV9pZHgnLCAndW5vJworICAgIF07CisgICAgdCB0ZXh0OworICAgIHN0bXQgdGV4 dDsKK0JFR0lOCisgICAgRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKKyAgICBD UkVBVEUgU0NIRU1BIHBndGJsX2RkbF90ZXN0OworICAgIEZPUkVBQ0ggdCBJTiBBUlJBWSB0YWJs ZXMgTE9PUAorICAgICAgICBGT1Igc3RtdCBJTgorICAgICAgICAgICAgU0VMRUNUIGxpbmUgRlJP TSBwZ3RibF9kZGxfcnRfb3JpZyBXSEVSRSBuYW1lID0gdCBPUkRFUiBCWSBvcmQKKyAgICAgICAg TE9PUAorICAgICAgICAgICAgRVhFQ1VURSBzdG10OworICAgICAgICBFTkQgTE9PUDsKKyAgICBF TkQgTE9PUDsKK0VORCAkJDsKKworV0lUSCBhZnRlcl9kZGwgQVMgKAorICAgIFNFTEVDVCB0Lm5h bWUsIG8ub3JkLCBvLmxpbmUKKyAgICBGUk9NIChTRUxFQ1QgRElTVElOQ1QgbmFtZSBGUk9NIHBn dGJsX2RkbF9ydF9vcmlnKSBBUyB0LAorICAgICAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRs KCgncGd0YmxfZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnKSBXSVRIIE9SRElOQUxJVFkgbyhs aW5lLCBvcmQpCispCisoU0VMRUNUICdtaXNzaW5nLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9y ZCwgbGluZSBGUk9NIHBndGJsX2RkbF9ydF9vcmlnCisgRVhDRVBUCisgU0VMRUNUICdtaXNzaW5n LWluLWNvcHknLCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwpCitVTklPTiBBTEwKKyhT RUxFQ1QgJ2V4dHJhLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVy X2RkbAorIEVYQ0VQVAorIFNFTEVDVCAnZXh0cmEtaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBG Uk9NIHBndGJsX2RkbF9ydF9vcmlnKQorT1JERVIgQlkga2luZCwgbmFtZSwgb3JkOworCistLSBD bGVhbnVwLgorRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKLS0gCjIuNTEuMAoK --000000000000e604ae0654fc5315--