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 1vprjl-000Ji9-1Q for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Feb 2026 17:41: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 1vprjk-000Nc8-2Q for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Feb 2026 17:41:21 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vprjk-000Nbw-0t for pgsql-hackers@lists.postgresql.org; Tue, 10 Feb 2026 17:41:21 +0000 Received: from mail-yx1-xb136.google.com ([2607:f8b0:4864:20::b136]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vprji-0000000015R-22Iz for pgsql-hackers@lists.postgresql.org; Tue, 10 Feb 2026 17:41:20 +0000 Received: by mail-yx1-xb136.google.com with SMTP id 956f58d0204a3-64aefa98fe6so1206507d50.1 for ; Tue, 10 Feb 2026 09:41:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770745276; cv=none; d=google.com; s=arc-20240605; b=hFChMTVzNM7GBFXRS9olQIg2W9Pa8SIX0lnbe8EpmOSrMtwf8lCT6izz+nI49JmIm2 LxqJWsjCKsfWiZfSrvshQBCscSvZllu+ckaeUk+uWx4K9qJQICaDNUGU9oAY8NnzxRWC aj+MNJtYtbnwkRNWwFLLO3DWbhnYHXhkYfVBbCZGSd3cuV935m7iHHc5v1oZ7kuWh2Jc aaH/rGEbJ1HXzYnr6weYPhVyXFnuRQw6aGSptnj9Zs/KTOlSYr1qZFdpH6yBUnQfEXA3 OfT5iVzmxKn05DVnWSEP7rheOEXwOA1wn1ETvqLR17ezXV9Sq4x5DwQwZRpm0ONT0DH3 9xGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=dCJ7lAPsfkZzrp8aASliMzQSN7tzYr4ii1frqgx+QKs=; fh=gLNR72ruU3ZA/wwUlP1xVzmNM7LTA9xJJSj5dHGSgTs=; b=etjcFv7xBePIpIX1Dajvc+oUsKHH1hs0TEy83kkkEH0Ef79p4slCnqWxgmnF+CV6Jj 7chz1Qkz7qni8Mfwf16hFOxGO8TBdZhcboCIu/6+Fhe9qbJGG2EXoXSncPK+Bfn5kbgr mETjiUwx29ecUM4DBy+L20th2suqES/6XTsbs1gSe6fJlky2Eu7Z4+X/brdIXySMkMUx L3h4v4xGvLS2dMZDC/uHPJcUk5O7yeHRBRO4PcvnsomlX50SHRiKMKVgm2TTVNR4FZnX ylg85816k9eMxbWJoB5uMo3qRqkSBFskqkGP1lnf9YsB9kYLIBKLEvy8oE9RCvgq7Eqk qYsA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770745276; x=1771350076; 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=dCJ7lAPsfkZzrp8aASliMzQSN7tzYr4ii1frqgx+QKs=; b=IS5rfr2TwMAZC75+Jc6DXY13volArENM5anSJxqP5n+VJ06pjoZppdj5uZ35gpe39T TLBt6Uv0FFqLvdwaaYnfoZBJE2Fkitto4UiWMM2RDmo08WfAyDBb7EyWg36JKdBIIR9+ qQgawVfjs+73mOh5kWVzlS1yl2KBAbk5lic0YMlGK5VVLH4acuO0V3sTqjSRArvmnHnu 59e5azcdSeZSOUPzgusCk8lDFuJk4N423clOaY4ejCDkyv/ekkjpfHc0cBkdChkrxOo3 6AjfX2u9v2mXzImlc6JSvkKtzK2Xc5XtcH/wJ34c+kZdXDOx2EQW8x0H/hYDZeEX3FNp hHoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770745276; x=1771350076; 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=dCJ7lAPsfkZzrp8aASliMzQSN7tzYr4ii1frqgx+QKs=; b=E2xEms/r/tYbsq7NW/rGNTXQP9EHofSesYr39MTd90szp4lkB6dfVISeRjtVFhO+NL WY8PCgWIXNb3Z3p2wPhxXVnuTDF+zFcxCL3IVIIdNfs7IrPxERJ//SiimOuQASz8D7PF xufgNzKVhqTdkCGPRy+JtjvblMANP/LHorI7MU+ytuE1aYHpix/qoxH3HIEZfBIMLiYE +/p8B7CnztJo4j0xeHdmrfJsmz6fYatpR8vm5wjp/yonf6TenQhQEWoQKA7LwuRx40kH X9QClIAuC2dxp3QhW1rvksj1twOSHqjncFjf6PJ3P2k1gUwY+WViAfI/htzmr8QcBjn5 GxmA== X-Forwarded-Encrypted: i=1; AJvYcCXI0OmSNHlpc2puzJR5BOLNBTSpYaTFEoNNz4nGVANBDlKHlYrbjS/TYxlkZHp8I8vPgXMRwMzYXSOPjZBJ@lists.postgresql.org X-Gm-Message-State: AOJu0YyTjyG7aKnH1Ri8mTArNOgglZqnfJmZIPqL9eTC0EblMSs6dHyG nSG3U5AvJw4w370Ny2LZY85IM2XC3E9FUD6vjFF26Qz5vqO+fcy2HH7Tm0kuGlv0WQs4a9wRpxj 0Zu6cTsJAsLgV7kBureqD8uvZf0bh4/c= X-Gm-Gg: AZuq6aIlN8Us2HwB3G1NlsSISrFUhAh2cMyvS1KBmCY3njCJihKkeJc3y+zn/sSSsgj mTMwThOQzrcckgF6ARRfJxnUuEDT9kl6a2dRIvGxH2efPU+dns4RjQ8hrYuS15k8f5iXqQr4dfY 6JsaOkSBfQNgv2gOZTXKGp4zTawyOK6xdvO62QlRxjIyLL5CCSlRwhlsGHoo4h11us7eKWvD93R +i8LgL7ycjt4Rl+lmToB2BXtpRb4QiA2iY2Z4IcV6C/yHz2NBEGWgj0qItSNLiuguiJQGDrsXr9 eKRn8avMjnCEAGHnfpEP0wwENjLpRFYH5dERZLgwJQ== X-Received: by 2002:a05:690c:f87:b0:796:3dce:d095 with SMTP id 00721157ae682-7963dced5b6mr159024037b3.7.1770745276069; Tue, 10 Feb 2026 09:41:16 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: vignesh C Date: Tue, 10 Feb 2026 23:11:03 +0530 X-Gm-Features: AZwV_Qga3kdPKsUqtoOa_lZLLbpwkouiKxq2biyAfQ2LdgXVLs51B7e9-qcfE0A Message-ID: Subject: Re: Skipping schema changes in publication To: shveta malik Cc: "David G. Johnston" , Amit Kapila , Peter Smith , Shlok Kyal , Dilip Kumar , "Zhijie Hou (Fujitsu)" , YeXiu <1518981153@qq.com>, Ian Lawrence Barwick , Bharath Rupireddy , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000002ba9a2064a7bc36c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002ba9a2064a7bc36c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 10 Feb 2026 at 11:35, shveta malik wrote: > > On Mon, Feb 9, 2026 at 11:52=E2=80=AFAM David G. Johnston > wrote: > > > > On Sunday, February 8, 2026, Amit Kapila wrot= e: > >> > >> On Mon, Feb 9, 2026 at 6:41=E2=80=AFAM Peter Smith wrote: > >> > >> > Hi Amit. > >> > > >> > I understand there can be some tricky scenarios where partitions are > >> > involved, but I was not sure why "pub1: FOR ALL Tables EXCEPT (tab1) > >> > and pub2: FOR TABLE tab1" is an example of contradictory behaviour. > >> > > >> > Consider if the publisher has 3 tables tab1,tab2,tab3: > >> > Here, "pub1: FOR ALL Tables EXCEPT (tab1)" is like a shorthand for > >> > saying "pub1: FOR TABLE tab2,tab3" > >> > So what's wrong for the subscriber to combine pub1 and pub2 in this = case? > >> > > >> > >> It is because one of the publications (pub2) indicates to include a > >> particular table tab1 and the other one (pub1) to exclude the same > >> table. And things become much more complex when the Except list > >> contains partitions as shown in Shveta's example. So, I think it makes > >> sense to keep things simple at least for the first version, we can > >> consider to uplift this restriction if we see some use cases from the > >> field. > >> > >> > > > > I=E2=80=99m with Peter here - I do not think it is wise to expose the e= xception listing outside the publication. Publication combinations should = be purely additive in much the same way grants are in the system. Except l= ists are internal shorthand for describing the positive list of tables a pu= blication makes available - all tables except. > > > > The earlier case - > pub1: FOR ALL TABLES EXCEPT (tab1) > pub2: FOR TABLE tab1 WHERE (c =3D 99) > > seems a valid scenario, and we are currently evaluating its > implementation feasibility under Approach 1. > > OTOH, subscribing to two different publications that are both defined > as 'FOR ALL TABLES' but have different EXCEPT lists introduces > unnecessary implementation complexity without a clear business use > case. This becomes especially complex when the publications exclude > different partitions of the same partitioned table. For example: > > pub1: FOR ALL TABLES EXCEPT (part1, part2) WITH > (publish_via_partition_root=3Dtrue) > pub2: FOR ALL TABLES EXCEPT (part7) WITH > (publish_via_partition_root=3Dfalse) > > IMO, there is no clear need for a user to create multiple 'ALL TABLES' > publications with different EXCEPT lists and then combine them at the > subscriber level. Given this, to keep the patch simpler, we plan to > emit an error for this scenario (multi-pub EXCEPTs case) for now. If a > valid requirement emerges in the future, we can revisit and consider > supporting it. I agree with this. This has been handled. Additionally it also resolves conflicts between overlapping publications with differing publish_via_partition_root settings. When a partition is excluded from a "via root" publication but included in another table publication with "via root" as false, then it is published through its root ancestor by default to give priority to the root table. Ex: -- Publisher tables CREATE TABLE tab_root (id int, range_col int) PARTITION BY RANGE (range_col= ); CREATE TABLE tab_part_1 PARTITION OF tab_root FOR VALUES FROM (1) TO (1000) PARTITION BY RANGE (range_col); CREATE TABLE tab_part_2 PARTITION OF tab_root FOR VALUES FROM (1000) TO (2000) PARTITION BY RANGE (range_col); CREATE TABLE tab_part_1_p1 PARTITION OF tab_part_1 FOR VALUES FROM (1) TO (= 500); CREATE TABLE tab_part_1_p2 PARTITION OF tab_part_1 FOR VALUES FROM (500) TO (1000); CREATE TABLE tab_part_2_p1 PARTITION OF tab_part_2 FOR VALUES FROM (1000) TO (1500); CREATE TABLE tab_part_2_p2 PARTITION OF tab_part_2 FOR VALUES FROM (1500) TO (2000); -- Publication CREATE PUBLICATION pub1 for ALL TABLES EXCEPT table (tab_part_1_p1, tab_part_1_p2) WITH (PUBLISH_VIA_PARTITION_ROOT=3Dtrue); CREATE PUBLICATION pub2 for table tab_part_1_p2 WITH (PUBLISH_VIA_PARTITION_ROOT=3Dfalse); -- Subscriber tables CREATE TABLE tab_root (id int, range_col int); CREATE TABLE tab_part_1 (id int, range_col int); CREATE TABLE tab_part_2 (id int, range_col int); CREATE TABLE tab_part_1_p1 (id int, range_col int); CREATE TABLE tab_part_1_p2 (id int, range_col int); CREATE TABLE tab_part_2_p1 (id int, range_col int); CREATE TABLE tab_part_2_p2 (id int, range_col int); Subscription with both pub1 and pub2 publications.: create subscription sub1 connection 'dbname=3Dpostgres host=3Dlocalhost port=3D5432' publication pub1,pub2; Consider the insert statements: insert into tab_part_1_p1 values(1,100); insert into tab_part_1_p2 values(2,600); insert into tab_part_2_p1 values(3,1100); insert into tab_part_2_p2 values(4,1600); The tab_part_2_p2 table's row is replicated to the subscriber=E2=80=99s tab_root table, since root table publications take precedence. postgres=3D# select * from tab_root ; id | range_col ----+----------- 2 | 600 3 | 1100 4 | 1600 (3 rows) The attached v42 version patch has the changes for the same. Regards, Vignesh --0000000000002ba9a2064a7bc36c Content-Type: application/octet-stream; name="v42-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Disposition: attachment; filename="v42-0001-Skip-publishing-the-tables-specified-in-EXCEPT-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlgvs3ex0 RnJvbSBiYjViZGFhNDc0MWY1NzQyYjJiMmExNmI1NjUyZDIxNTg0ZWEwMWM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjggSmFuIDIwMjYgMTA6NDc6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIHY0MiAxLzJd IFNraXAgcHVibGlzaGluZyB0aGUgdGFibGVzIHNwZWNpZmllZCBpbiBFWENFUFQgVEFCTEUuCgpB IG5ldyAiRVhDRVBUIFRBQkxFIiBjbGF1c2UgZm9yIENSRUFURSBQVUJMSUNBVElPTiBhbGxvd3Mg b25lIG9yIG1vcmUKdGFibGVzIHRvIGJlIGV4Y2x1ZGVkLiBUaGUgcHVibGlzaGVyIHdpbGwgbm90 IHNlbmQgdGhlIGRhdGEgb2YgZXhjbHVkZWQKdGFibGVzIHRvIHRoZSBzdWJzY3JpYmVyLgoKVGhl IG5ldyBzeW50YXggYWxsb3dzIHNwZWNpZnlpbmcgZXhjbHVkZWQgcmVsYXRpb25zIHdoZW4gY3Jl YXRpbmcgYQpwdWJsaWNhdGlvbi4gRm9yIGV4YW1wbGU6CkNSRUFURSBQVUJMSUNBVElPTiBwdWIx IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodDEsdDIpOwoKQSBuZXcgY29sdW1uICJwcmV4 Y2VwdCIgaXMgYWRkZWQgdG8gdGFibGUgInBnX3B1YmxpY2F0aW9uX3JlbCIsIHRvIGZsYWcKdGhl IHJlbGF0aW9ucyB0aGF0IHRoZSB1c2VyIHdhbnRzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcHVibGlj YXRpb25zLgoKRm9yIEVYQ0VQVCBUQUJMRSBvbiBwYXJ0aXRpb24gdGFibGVzLCBleHRlbmRlZCBm ZXRjaF9yZW1vdGVfdGFibGVfaW5mbygpIHRvCmNvbXB1dGUgdGhlIGVmZmVjdGl2ZSBzZXQgb2Yg cmVsYXRpb25zIHVzZWQgZm9yIHRoZSBpbml0aWFsIENPUFkuIFdoZW4KZXhjbHVzaW9ucyBhcmUg cHJlc2VudCwgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgY2FuIG5vIGxvbmdlciBiZSB1c2Vk CmRpcmVjdGx5OyBpbnN0ZWFkLCBkZXJpdmUgdGhlIGxpc3Qgb2Ygbm9uLWV4Y2x1ZGVkIGxlYWYg cGFydGl0aW9ucyBhbmQKY29tYmluZSB0aGVtIHdpdGggVU5JT04gQUxMLiBXaGVuIG5vIGV4Y2x1 c2lvbnMgZXhpc3QsIHJldGFpbiB0aGUgZXhpc3RpbmcKYmVoYXZpb3IgYW5kIGNvcHkgZnJvbSB0 aGUgcm9vdCByZWxhdGlvbiBhcyBiZWZvcmUuCkFsc28gdXBkYXRlZCB0aGUgYmVoYXZpb3VyIG9m IGluY3JlbWVudGFsIHN5bmMgZm9yIHBhcnRpdGlvbiB0YWJsZXMgYXMKcGVyIGFwcHJvYWNoIDEu CkFwcHJvYWNoIDEgaXMgZGlzY3Vzc2VkIGF0OgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkL0NBSnB5MHVEODFIUnJNWXI3Uy02QVY0VzJQdGJHS00tbmYyRDg5enNvTUhKOWpa c3NVZ0BtYWlsLmdtYWlsLmNvbQoKcGdfZHVtcCBpcyB1cGRhdGVkIGZvciB0aGUgbmV3IEVYQ0VQ VCBUQUJMRSBzeW50YXguCgpUaGUgcHNxbCBcZCBmYW1pbHkgb2YgY29tbWFuZHMgY2FuIG5vdyBk aXNwbGF5IGV4Y2x1ZGVkIHRhYmxlcy4KCkJ1bXAgY2F0YWxvZyB2ZXJzaW9uLgotLS0KIGRvYy9z cmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAxMCArCiBkb2Mvc3Jj L3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sICAgICAgICAgfCAgIDYgKy0KIGRvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgICAgICB8ICA1NSArLQogZG9jL3NyYy9z Z21sL3JlZi9wc3FsLXJlZi5zZ21sICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgICAgfCA1OTcgKysrKysrKysrKysrKysr KystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgfCAxMDkg KystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgICAgIHwgIDc1 ICsrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgICA0 ICstCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgICAgfCAgNDIg Ky0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgICB8IDE1MCAr KysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgIHwgMjA0 ICsrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwg IDIxICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgfCAg NjggKysKIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggICAgICAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgICAgICAgICAgfCAgMzAg Kwogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDg3ICsr LQogc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jICAgICAgICAgICAgICAgIHwgIDEyICst CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDcgKwog c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgIDE1ICstCiBz cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oICAgICB8ICAgNiArCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgICAgfCAgOTIgKystCiBzcmMvdGVz dC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgICAgICAgICAgfCAgMzYgKy0KIHNyYy90ZXN0 L3N1YnNjcmlwdGlvbi9tZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgMSArCiAuLi4vdC8wMzdf cmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsICAgICAgICAgfCAzMTQgKysrKysrKysrCiBzcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogMjcgZmls ZXMgY2hhbmdlZCwgMTgwMCBpbnNlcnRpb25zKCspLCAxNTIgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2Vw dF90YWJsZS5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXggMzMyMTkzNTY1ZTIuLmQ0MGU1Y2MxMDkwIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv Y2F0YWxvZ3Muc2dtbApAQCAtNjU4MSw2ICs2NTgxLDE2IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxh Y2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxl PiZsCiAgICAgICBpZiB0aGVyZSBpcyBubyBwdWJsaWNhdGlvbiBxdWFsaWZ5aW5nIGNvbmRpdGlv bi48L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRy eSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlv biI+CisgICAgICA8c3RydWN0ZmllbGQ+cHJleGNlcHQ8L3N0cnVjdGZpZWxkPiA8dHlwZT5ib29s PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVHJ1ZSBpZiB0aGUg cmVsYXRpb24gaXMgZXhjbHVkZWQgZnJvbSB0aGUgcHVibGljYXRpb24uIFNlZQorICAgICAgIDxs aW5rIGxpbmtlbmQ9InNxbC1jcmVhdGVwdWJsaWNhdGlvbi1wYXJhbXMtZm9yLWV4Y2VwdC10YWJs ZSI+PGxpdGVyYWw+RVhDRVBUIFRBQkxFPC9saXRlcmFsPjwvbGluaz4uCisgICAgICA8L3BhcmE+ PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJj YXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CiAgICAg ICAgPHN0cnVjdGZpZWxkPnByYXR0cnM8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQydmVjdG9yPC90 eXBlPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbCBi L2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKaW5kZXggNTAyOGZlOWFmMDku LmYwMTI4MWZkNGY5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlv bi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTEx Niw3ICsxMTYsMTEgQEAKICAgIDxsaXRlcmFsPkZPUiBUQUJMRVMgSU4gU0NIRU1BPC9saXRlcmFs PiwgPGxpdGVyYWw+Rk9SIEFMTCBUQUJMRVM8L2xpdGVyYWw+LAogICAgb3IgPGxpdGVyYWw+Rk9S IEFMTCBTRVFVRU5DRVM8L2xpdGVyYWw+LiBVbmxpa2UgdGFibGVzLCBzZXF1ZW5jZXMgY2FuIGJl CiAgICBzeW5jaHJvbml6ZWQgYXQgYW55IHRpbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUK LSAgIDx4cmVmIGxpbmtlbmQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tc2VxdWVuY2VzIi8+LgorICAg PHhyZWYgbGlua2VuZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1zZXF1ZW5jZXMiLz4uIFdoZW4gYSBw dWJsaWNhdGlvbiBpcworICAgY3JlYXRlZCB3aXRoIDxsaXRlcmFsPkZPUiBBTEwgVEFCTEVTPC9s aXRlcmFsPiwgdGFibGVzIGNhbiBiZSBleHBsaWNpdGx5CisgICBleGNsdWRlZCBmcm9tIHB1Ymxp Y2F0aW9uIHVzaW5nIHRoZQorICAgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9u LXBhcmFtcy1mb3ItZXhjZXB0LXRhYmxlIj48bGl0ZXJhbD5FWENFUFQgVEFCTEU8L2xpdGVyYWw+ PC9saW5rPgorICAgY2xhdXNlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3Jl Zi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAppbmRleCA2ZWZiYjkxNWNlYy4uNzMwYjljNGJjZWQg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbApAQCAtMzIsMTIgKzMy LDE2IEBAIENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ bmFtZTwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wdWJsaWNhdGlvbl9hbGxfb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwv cGhyYXNlPgogCi0gICAgQUxMIFRBQkxFUworICAgIEFMTCBUQUJMRVMgWyBFWENFUFQgWyBUQUJM RSBdICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4Y2VwdF90YWJsZV9vYmplY3Q8 L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApIF0KICAgICBBTEwgU0VRVUVOQ0VTCiAKIDxwaHJhc2U+ YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9hbmRfY29sdW1uczwvcmVw bGFjZWFibGU+IGlzOjwvcGhyYXNlPgogCiAgICAgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbICggPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0g KSBdIFsgV0hFUkUgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwv cmVwbGFjZWFibGU+ICkgXQorCis8cGhyYXNlPmFuZCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+ZXhjZXB0X3RhYmxlX29iamVjdDwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorCisg ICAgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3Jl cGxhY2VhYmxlPiBbICogXQogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgogCkBAIC0x NjQsNyArMTY4LDggQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4KICAgICA8bGlzdGl0ZW0+CiAgICAgIDxwYXJhPgog ICAgICAgTWFya3MgdGhlIHB1YmxpY2F0aW9uIGFzIG9uZSB0aGF0IHJlcGxpY2F0ZXMgY2hhbmdl cyBmb3IgYWxsIHRhYmxlcyBpbgotICAgICAgdGhlIGRhdGFiYXNlLCBpbmNsdWRpbmcgdGFibGVz IGNyZWF0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgIHRoZSBkYXRhYmFzZSwgaW5jbHVkaW5nIHRh YmxlcyBjcmVhdGVkIGluIHRoZSBmdXR1cmUuIFRhYmxlcyBsaXN0ZWQgaW4KKyAgICAgIEVYQ0VQ VCBUQUJMRSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgcHVibGljYXRpb24uCiAgICAgIDwvcGFyYT4K ICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CkBAIC0xODQsNiArMTg5LDM1IEBA IENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwv cmVwbGFjZWFibGU+CiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5PgogCisgICA8 dmFybGlzdGVudHJ5IGlkPSJzcWwtY3JlYXRlcHVibGljYXRpb24tcGFyYW1zLWZvci1leGNlcHQt dGFibGUiPgorICAgIDx0ZXJtPjxsaXRlcmFsPkVYQ0VQVCBUQUJMRTwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoaXMgY2xhdXNlIHNwZWNpZmll cyBhIGxpc3Qgb2YgdGFibGVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCisgICAgICBwdWJsaWNh dGlvbi4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIEZvciBpbmhlcml0ZWQgdGFi bGVzLCBpZiA8bGl0ZXJhbD5PTkxZPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQgYmVmb3JlIHRoZQor ICAgICAgdGFibGUgbmFtZSwgb25seSB0aGF0IHRhYmxlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIHB1 YmxpY2F0aW9uLiBJZgorICAgICAgPGxpdGVyYWw+T05MWTwvbGl0ZXJhbD4gaXMgbm90IHNwZWNp ZmllZCwgdGhlIHRhYmxlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnQKKyAgICAgIHRhYmxlcyAoaWYg YW55KSBhcmUgZXhjbHVkZWQuIE9wdGlvbmFsbHksIDxsaXRlcmFsPio8L2xpdGVyYWw+IGNhbiBi ZQorICAgICAgc3BlY2lmaWVkIGFmdGVyIHRoZSB0YWJsZSBuYW1lIHRvIGV4cGxpY2l0bHkgaW5k aWNhdGUgdGhhdCBkZXNjZW5kYW50CisgICAgICB0YWJsZXMgYXJlIGV4Y2x1ZGVkLgorICAgICA8 L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgRm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgd2hlbiBh IHRhYmxlIGlzIHNwZWNpZmllZCBpbiBFWENFUFQgVEFCTEUsIHRoZW4KKyAgICAgIGNoYW5nZXMg dG8gdGhhdCB0YWJsZSBhbmQgYWxsIG9mIGl0cyBwYXJ0aXRpb25zICh0aGF0IGlzLCB0aGUgZW50 aXJlCisgICAgICBwYXJ0aXRpb24gc3VidHJlZSByb290ZWQgYXQgdGhhdCB0YWJsZSkgYXJlIG5v dCByZXBsaWNhdGVkLiBUaGlzIGJlaGF2aW9yCisgICAgICBpcyB0aGUgc2FtZSByZWdhcmRsZXNz IG9mIHdoZXRoZXIKKyAgICAgIDxsaXRlcmFsPnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PC9s aXRlcmFsPiBpcyBzZXQgdG8KKyAgICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+IG9yIDxsaXRl cmFsPmZhbHNlPC9saXRlcmFsPi4gVGhlCisgICAgICA8bGl0ZXJhbD5wdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdDwvbGl0ZXJhbD4gc2V0dGluZyBvbmx5IGRldGVybWluZXMKKyAgICAgIHdoaWNo IHJlbGF0aW9uIGlzIHVzZWQgYXMgdGhlIHB1Ymxpc2hpbmcgcmVsYXRpb24gZm9yIHJlcGxpY2F0 ZWQgY2hhbmdlcywKKyAgICAgIGFuZCBkb2VzIG5vdCBhZmZlY3QgZXhjbHVzaW9uIHNlbWFudGlj cy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKwog ICAgPHZhcmxpc3RlbnRyeSBpZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9uLXBhcmFtcy13aXRoIj4K ICAgICA8dGVybT48bGl0ZXJhbD5XSVRIICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnB1YmxpY2F0aW9uX3BhcmFtZXRlcjwvcmVwbGFjZWFibGU+IFs9IDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj52YWx1ZTwvcmVwbGFjZWFibGU+XSBbLCAuLi4gXSApPC9saXRlcmFsPjwv dGVybT4KICAgICA8bGlzdGl0ZW0+CkBAIC00ODksNiArNTIzLDIzIEBAIENSRUFURSBQVUJMSUNB VElPTiBhbGxfc2VxdWVuY2VzIEZPUiBBTEwgU0VRVUVOQ0VTOwogICAgYWxsIHNlcXVlbmNlcyBm b3Igc3luY2hyb25pemF0aW9uOgogPHByb2dyYW1saXN0aW5nPgogQ1JFQVRFIFBVQkxJQ0FUSU9O IGFsbF90YWJsZXNfc2VxdWVuY2VzIEZPUiBBTEwgVEFCTEVTLCBBTEwgU0VRVUVOQ0VTOworPC9w cm9ncmFtbGlzdGluZz4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQ3JlYXRlIGEgcHVibGlj YXRpb24gdGhhdCBwdWJsaXNoZXMgYWxsIGNoYW5nZXMgaW4gYWxsIHRhYmxlcyBleGNlcHQKKyAg IDxzdHJ1Y3RuYW1lPnVzZXJzPC9zdHJ1Y3RuYW1lPiBhbmQgPHN0cnVjdG5hbWU+ZGVwYXJ0bWVu dHM8L3N0cnVjdG5hbWU+OgorPHByb2dyYW1saXN0aW5nPgorQ1JFQVRFIFBVQkxJQ0FUSU9OIGFs bF90YWJsZXNfZXhjZXB0IEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAodXNlcnMsIGRlcGFydG1lbnRz KTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIENyZWF0ZSBh IHB1YmxpY2F0aW9uIHRoYXQgcHVibGlzaGVzIGFsbCBzZXF1ZW5jZXMgZm9yIHN5bmNocm9uaXph dGlvbiwgYW5kCisgICBhbGwgY2hhbmdlcyBpbiBhbGwgdGFibGVzIGV4Y2VwdCA8c3RydWN0bmFt ZT51c2Vyczwvc3RydWN0bmFtZT4gYW5kCisgICA8c3RydWN0bmFtZT5kZXBhcnRtZW50czwvc3Ry dWN0bmFtZT46Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVBVEUgUFVCTElDQVRJT04gYWxsX3NlcXVl bmNlc190YWJsZXNfZXhjZXB0IEZPUiBBTEwgU0VRVUVOQ0VTLCBBTEwgVEFCTEVTIEVYQ0VQVCAo dXNlcnMsIGRlcGFydG1lbnRzKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAgIDwvcGFyYT4KICA8L3Jl ZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCmluZGV4IDhiMWQ5NDhiYTA1Li4xMDQ1YmM2YTAy YyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbApAQCAtMjEwMyw4ICsyMTAzLDkgQEAgU0VMRUNUICQx IFxwYXJzZSBzdG10MQogICAgICAgICBsaXN0ZWQuCiAgICAgICAgIElmIDxsaXRlcmFsPng8L2xp dGVyYWw+IGlzIGFwcGVuZGVkIHRvIHRoZSBjb21tYW5kIG5hbWUsIHRoZSByZXN1bHRzCiAgICAg ICAgIGFyZSBkaXNwbGF5ZWQgaW4gZXhwYW5kZWQgbW9kZS4KLSAgICAgICAgSWYgPGxpdGVyYWw+ KzwvbGl0ZXJhbD4gaXMgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFtZSwgdGhlIHRhYmxlcyBh bmQKLSAgICAgICAgc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBwdWJsaWNhdGlvbiBhcmUg c2hvd24gYXMgd2VsbC4KKyAgICAgICAgSWYgPGxpdGVyYWw+KzwvbGl0ZXJhbD4gaXMgYXBwZW5k ZWQgdG8gdGhlIGNvbW1hbmQgbmFtZSwgdGhlIHRhYmxlcywKKyAgICAgICAgZXhjbHVkZWQgdGFi bGVzLCBhbmQgc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBwdWJsaWNhdGlvbiBhcmUgc2hv d24KKyAgICAgICAgYXMgd2VsbC4KICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xpc3RpdGVt PgogICAgICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMK aW5kZXggOWE0NzkxYzU3M2UuLjg4MjlkMTk0ZmUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5jCkBAIC0zNjYsOSArMzY2LDExIEBAIEdldFRvcE1vc3RBbmNlc3RvckluUHVibGlj YXRpb24oT2lkIHB1Ym9pZCwgTGlzdCAqYW5jZXN0b3JzLCBpbnQgKmFuY2VzdG9yX2xldmVsCiAJ Zm9yZWFjaChsYywgYW5jZXN0b3JzKQogCXsKIAkJT2lkCQkJYW5jZXN0b3IgPSBsZmlyc3Rfb2lk KGxjKTsKLQkJTGlzdAkgICAqYXB1YmlkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2Vz dG9yKTsKKwkJTGlzdAkgICAqYXB1YmlkcyA9IE5JTDsKIAkJTGlzdAkgICAqYXNjaGVtYVB1Ymlk cyA9IE5JTDsKIAorCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3RvciwgJmFwdWJpZHMs IE5VTEwpOworCiAJCWxldmVsKys7CiAKIAkJaWYgKGxpc3RfbWVtYmVyX29pZChhcHViaWRzLCBw dWJvaWQpKQpAQCAtNDgyLDYgKzQ4NCw4IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQg cHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCQlPYmplY3RJZEdldERhdHVtKHB1Ymlk KTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJyZWxpZCAtIDFdID0KIAkJT2Jq ZWN0SWRHZXREYXR1bShyZWxpZCk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3By ZXhjZXB0IC0gMV0gPQorCQlCb29sR2V0RGF0dW0ocHJpLT5leGNlcHQpOwogCiAJLyogQWRkIHF1 YWxpZmljYXRpb25zLCBpZiBhdmFpbGFibGUgKi8KIAlpZiAocHJpLT53aGVyZUNsYXVzZSAhPSBO VUxMKQpAQCAtNzQ5LDM4ICs3NTMsNTggQEAgcHVibGljYXRpb25fYWRkX3NjaGVtYShPaWQgcHVi aWQsIE9pZCBzY2hlbWFpZCwgYm9vbCBpZl9ub3RfZXhpc3RzKQogCXJldHVybiBteXNlbGY7CiB9 CiAKLS8qIEdldHMgbGlzdCBvZiBwdWJsaWNhdGlvbiBvaWRzIGZvciBhIHJlbGF0aW9uICovCi1M aXN0ICoKLUdldFJlbGF0aW9uUHVibGljYXRpb25zKE9pZCByZWxpZCkKKy8qCisgKiBHZXQgdGhl IGxpc3Qgb2YgcHVibGljYXRpb24gb2lkcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpZWQgcmVs YXRpb24uCisgKgorICogUGFyYW1ldGVyICdwdWJpZHMnIHJldHVybnMgdGhlIE9pZHMgb2YgdGhl IHB1YmxpY2F0aW9ucyB0aGUgcmVsYXRpb24gaXMgcGFydAorICogb2YuIFBhcmFtZXRlciAnZXhj ZXB0X3B1YmlkcycgcmV0dXJucyB0aGUgT2lkcyBvZiBwdWJsaWNhdGlvbnMgdGhlIHJlbGF0aW9u CisgKiBpcyBleGNsdWRlZCBmcm9tLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVl IGlmIHRoZSByZWxhdGlvbiBpcyBwYXJ0IG9mIGFueSBwdWJsaWNhdGlvbi4KKyAqLworYm9vbAor R2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lkIHJlbGlkLCBMaXN0ICoqcHViaWRzLCBMaXN0ICoq ZXhjZXB0X3B1YmlkcykKIHsKLQlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CiAJQ2F0Q0xpc3QgICAq cHVicmVsbGlzdDsKLQlpbnQJCQlpOworCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAKIAkvKiBGaW5k IGFsbCBwdWJsaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWxhdGlvbi4gKi8KIAlwdWJy ZWxsaXN0ID0gU2VhcmNoU3lzQ2FjaGVMaXN0MShQVUJMSUNBVElPTlJFTE1BUCwKIAkJCQkJCQkJ CSBPYmplY3RJZEdldERhdHVtKHJlbGlkKSk7Ci0JZm9yIChpID0gMDsgaSA8IHB1YnJlbGxpc3Qt Pm5fbWVtYmVyczsgaSsrKQorCWZvciAoaW50IGkgPSAwOyBpIDwgcHVicmVsbGlzdC0+bl9tZW1i ZXJzOyBpKyspCiAJewogCQlIZWFwVHVwbGUJdHVwID0gJnB1YnJlbGxpc3QtPm1lbWJlcnNbaV0t PnR1cGxlOwotCQlPaWQJCQlwdWJpZCA9ICgoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNU UlVDVCh0dXApKS0+cHJwdWJpZDsKKwkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwgcHVicmVsID0g KEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKKwkJT2lkCQkJcHViaWQg PSBwdWJyZWwtPnBycHViaWQ7CiAKLQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCBwdWJp ZCk7CisJCWlmIChwdWJyZWwtPnByZXhjZXB0KQorCQl7CisJCQlpZiAoZXhjZXB0X3B1YmlkcykK KwkJCQkqZXhjZXB0X3B1YmlkcyA9IGxhcHBlbmRfb2lkKCpleGNlcHRfcHViaWRzLCBwdWJpZCk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocHViaWRzKQorCQkJCSpwdWJpZHMgPSBsYXBwZW5k X29pZCgqcHViaWRzLCBwdWJpZCk7CisJCQlmb3VuZCA9IHRydWU7CisJCX0KIAl9CiAKIAlSZWxl YXNlU3lzQ2FjaGVMaXN0KHB1YnJlbGxpc3QpOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4g Zm91bmQ7CiB9CiAKIC8qCi0gKiBHZXRzIGxpc3Qgb2YgcmVsYXRpb24gb2lkcyBmb3IgYSBwdWJs aWNhdGlvbi4KKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGdldCB0aGUgbGlzdCBvZiByZWxhdGlv biBPaWRzIGZvciBhIHB1YmxpY2F0aW9uLgogICoKLSAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNl ZCBGT1IgVEFCTEUgcHVibGljYXRpb25zLCB0aGUgRk9SIEFMTCBUQUJMRVMvU0VRVUVOQ0VTCi0g KiBzaG91bGQgdXNlIEdldEFsbFB1YmxpY2F0aW9uUmVsYXRpb25zKCkuCisgKiBJZiBleGNlcHRf ZmxhZyBpcyB0cnVlLCByZXR1cm5zIHRoZSBsaXN0IG9mIHJlbGF0aW9ucyBleGNsdWRlZCBmcm9t IHRoZQorICogcHVibGljYXRpb247IG90aGVyd2lzZSwgcmV0dXJucyB0aGUgbGlzdCBvZiByZWxh dGlvbnMgaW5jbHVkZWQgaW4gdGhlCisgKiBwdWJsaWNhdGlvbi4KICAqLwotTGlzdCAqCi1HZXRQ dWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFy dG9wdCkKK3N0YXRpYyBMaXN0ICoKK2dldF9wdWJsaWNhdGlvbl9yZWxhdGlvbnMoT2lkIHB1Ymlk LCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQsCisJCQkJCQkgIGJvb2wgZXhjZXB0X2Zs YWcpCiB7CiAJTGlzdAkgICAqcmVzdWx0OwogCVJlbGF0aW9uCXB1YnJlbHNyZWw7CkBAIC04MDUs OCArODI5LDEwIEBAIEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRp b25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KQogCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCBwdWJyZWw7 CiAKIAkJcHVicmVsID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsK LQkJcmVzdWx0ID0gR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKHJlc3VsdCwgcHViX3Bh cnRvcHQsCi0JCQkJCQkJCQkJCQlwdWJyZWwtPnBycmVsaWQpOworCisJCWlmIChleGNlcHRfZmxh ZyA9PSBwdWJyZWwtPnByZXhjZXB0KQorCQkJcmVzdWx0ID0gR2V0UHViUGFydGl0aW9uT3B0aW9u UmVsYXRpb25zKHJlc3VsdCwgcHViX3BhcnRvcHQsCisJCQkJCQkJCQkJCQkJcHVicmVsLT5wcnJl bGlkKTsKIAl9CiAKIAlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOwpAQCAtODE5LDYgKzg0NSw4NSBA QCBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBw dWJfcGFydG9wdCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogUmV0dXJuIHRoZSBsaXN0 IG9mIHJlbGF0aW9uIE9pZHMgZm9yIGEgcHVibGljYXRpb24uCisgKgorICogRm9yIGEgRk9SIFRB QkxFIHB1YmxpY2F0aW9uLCB0aGlzIHJldHVybnMgdGhlIGxpc3Qgb2YgcmVsYXRpb25zIGV4cGxp Y2l0bHkKKyAqIGluY2x1ZGVkIGluIHRoZSBwdWJsaWNhdGlvbi4KKyAqCisgKiBQdWJsaWNhdGlv bnMgZGVjbGFyZWQgd2l0aCBGT1IgQUxMIFRBQkxFUyBzaG91bGQgdXNlCisgKiBHZXRBbGxQdWJs aWNhdGlvblJlbGF0aW9ucygpIHRvIG9idGFpbiB0aGUgY29tcGxldGUgc2V0IG9mIHRhYmxlcyBj b3ZlcmVkIGJ5CisgKiB0aGUgcHVibGljYXRpb24uCisgKi8KK0xpc3QgKgorR2V0UHVibGljYXRp b25JbmNsdWRlZFJlbGF0aW9ucyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFy dG9wdCkKK3sKKwlBc3NlcnQoIUdldFB1YmxpY2F0aW9uKHB1YmlkKS0+YWxsdGFibGVzKTsKKwor CXJldHVybiBnZXRfcHVibGljYXRpb25fcmVsYXRpb25zKHB1YmlkLCBwdWJfcGFydG9wdCwgZmFs c2UpOworfQorCisvKgorICogUmV0dXJuIHRoZSBsaXN0IG9mIHRhYmxlcyBPaWRzIGV4Y2x1ZGVk IGZyb20gYSBwdWJsaWNhdGlvbi4KKyAqIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGZvciBGT1Ig QUxMIFRBQkxFUyBwdWJsaWNhdGlvbnMuCisgKi8KK0xpc3QgKgorR2V0QWxsUHVibGljYXRpb25F eGNsdWRlZFRhYmxlcyhPaWQgcHViaWQsIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCkK K3sKKwlMaXN0CSAgICpyZWxpZHMgPSBnZXRfcHVibGljYXRpb25fcmVsYXRpb25zKHB1YmlkLCBw dWJfcGFydG9wdCwgdHJ1ZSk7CisJYm9vbAkJaXNfcGFyZW50X2V4Y2x1ZGVkID0gdHJ1ZTsKKwor CUFzc2VydChHZXRQdWJsaWNhdGlvbihwdWJpZCktPmFsbHRhYmxlcyk7CisKKwl3aGlsZSAoaXNf cGFyZW50X2V4Y2x1ZGVkKQorCXsKKwkJTGlzdAkgICAqcGFyZW50aWRzID0gTklMOworCQlMaXN0 CSAgICpjdXJyID0gTklMOworCisJCWZvcmVhY2hfb2lkKHJlbGlkLCByZWxpZHMpCisJCXsKKwkJ CU9pZAkJCXBhcmVudGlkOworCisJCQlpZiAoIWdldF9yZWxfcmVsaXNwYXJ0aXRpb24ocmVsaWQp KQorCQkJCWNvbnRpbnVlOworCisJCQlwYXJlbnRpZCA9IGdldF9wYXJ0aXRpb25fcGFyZW50KHJl bGlkLCBmYWxzZSk7CisKKwkJCWlmIChsaXN0X21lbWJlcl9vaWQocmVsaWRzLCBwYXJlbnRpZCkp CisJCQkJY29udGludWU7CisKKwkJCXBhcmVudGlkcyA9IGxpc3RfYXBwZW5kX3VuaXF1ZV9vaWQo cGFyZW50aWRzLCBwYXJlbnRpZCk7CisJCX0KKworCQlmb3JlYWNoX29pZChwYXJlbnRpZCwgcGFy ZW50aWRzKQorCQl7CisJCQlMaXN0CSAgICpwYXJ0aXRpb25pZHM7CisJCQlib29sCQlhbGxfcGFy dGl0aW9uc19leGNsdWRlZCA9IHRydWU7CisKKwkJCXBhcnRpdGlvbmlkcyA9IGZpbmRfaW5oZXJp dGFuY2VfY2hpbGRyZW4ocGFyZW50aWQsIE5vTG9jayk7CisKKwkJCWZvcmVhY2hfb2lkKHBhcnRp dGlvbmlkLCBwYXJ0aXRpb25pZHMpCisJCQl7CisJCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQocmVs aWRzLCBwYXJ0aXRpb25pZCkpCisJCQkJeworCQkJCQlhbGxfcGFydGl0aW9uc19leGNsdWRlZCA9 IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhbGxfcGFydGl0aW9u c19leGNsdWRlZCkKKwkJCQljdXJyID0gbGFwcGVuZF9vaWQoY3VyciwgcGFyZW50aWQpOworCQl9 CisKKwkJaWYgKGN1cnIgPT0gTklMKQorCQkJaXNfcGFyZW50X2V4Y2x1ZGVkID0gZmFsc2U7CisJ CWVsc2UKKwkJCXJlbGlkcyA9IGxpc3RfY29uY2F0KHJlbGlkcywgY3Vycik7CisJfQorCisJcmV0 dXJuIHJlbGlkczsKK30KKwogLyoKICAqIEdldHMgbGlzdCBvZiBwdWJsaWNhdGlvbiBvaWRzIGZv ciBwdWJsaWNhdGlvbnMgbWFya2VkIGFzIEZPUiBBTEwgVEFCTEVTLgogICovCkBAIC04NjQsMTgg Kzk2OSwzMCBAQCBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnModm9pZCkKICAqIHBhcnRpdGlvbmVk IHRhYmxlcywgd2UgbXVzdCBleGNsdWRlIHBhcnRpdGlvbnMgaW4gZmF2b3Igb2YgaW5jbHVkaW5n IHRoZQogICogcm9vdCBwYXJ0aXRpb25lZCB0YWJsZXMuIFRoaXMgaXMgbm90IGFwcGxpY2FibGUg dG8gRk9SIEFMTCBTRVFVRU5DRVMKICAqIHB1YmxpY2F0aW9uLgorICoKKyAqIEZvciBhIEZPUiBB TEwgVEFCTEVTIHB1YmxpY2F0aW9uLCB0aGUgcmV0dXJuZWQgbGlzdCBleGNsdWRlcyB0YWJsZXMg bWVudGlvbmVkCisgKiBpbiBFWENFUFQgVEFCTEUgY2xhdXNlLgogICovCiBMaXN0ICoKLUdldEFs bFB1YmxpY2F0aW9uUmVsYXRpb25zKGNoYXIgcmVsa2luZCwgYm9vbCBwdWJ2aWFyb290KQorR2V0 QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUHVibGljYXRpb24gKnB1YiwgY2hhciByZWxraW5kKQog ewogCVJlbGF0aW9uCWNsYXNzUmVsOwogCVNjYW5LZXlEYXRhIGtleVsxXTsKIAlUYWJsZVNjYW5E ZXNjIHNjYW47CiAJSGVhcFR1cGxlCXR1cGxlOwogCUxpc3QJICAgKnJlc3VsdCA9IE5JTDsKKwlM aXN0CSAgICpleGNlcHRsaXN0ID0gTklMOworCWJvb2wJCXB1YnZpYXJvb3QgPSBwdWItPnB1YnZp YXJvb3Q7CisJT2lkCQkJcHViaWQgPSBwdWItPm9pZDsKIAogCUFzc2VydCghKHJlbGtpbmQgPT0g UkVMS0lORF9TRVFVRU5DRSAmJiBwdWJ2aWFyb290KSk7CiAKKwlpZiAocmVsa2luZCA9PSBSRUxL SU5EX1JFTEFUSU9OKQorCQlleGNlcHRsaXN0ID0gR2V0QWxsUHVibGljYXRpb25FeGNsdWRlZFRh YmxlcyhwdWJpZCwgcHVidmlhcm9vdCA/CisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRf Uk9PVCA6CisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfTEVBRik7CisKKwogCWNsYXNz UmVsID0gdGFibGVfb3BlbihSZWxhdGlvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CiAK IAlTY2FuS2V5SW5pdCgma2V5WzBdLApAQCAtODkxLDcgKzEwMDgsOCBAQCBHZXRBbGxQdWJsaWNh dGlvblJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9vdCkKIAkJT2lkCQkJcmVs aWQgPSByZWxGb3JtLT5vaWQ7CiAKIAkJaWYgKGlzX3B1Ymxpc2hhYmxlX2NsYXNzKHJlbGlkLCBy ZWxGb3JtKSAmJgotCQkJIShyZWxGb3JtLT5yZWxpc3BhcnRpdGlvbiAmJiBwdWJ2aWFyb290KSkK KwkJCSEocmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24gJiYgcHVidmlhcm9vdCkgJiYKKwkJCSFsaXN0 X21lbWJlcl9vaWQoZXhjZXB0bGlzdCwgcmVsaWQpKQogCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQo cmVzdWx0LCByZWxpZCk7CiAJfQogCkBAIC05MTIsNyArMTAzMCw4IEBAIEdldEFsbFB1YmxpY2F0 aW9uUmVsYXRpb25zKGNoYXIgcmVsa2luZCwgYm9vbCBwdWJ2aWFyb290KQogCQkJT2lkCQkJcmVs aWQgPSByZWxGb3JtLT5vaWQ7CiAKIAkJCWlmIChpc19wdWJsaXNoYWJsZV9jbGFzcyhyZWxpZCwg cmVsRm9ybSkgJiYKLQkJCQkhcmVsRm9ybS0+cmVsaXNwYXJ0aXRpb24pCisJCQkJIXJlbEZvcm0t PnJlbGlzcGFydGl0aW9uICYmCisJCQkJIWxpc3RfbWVtYmVyX29pZChleGNlcHRsaXN0LCByZWxp ZCkpCiAJCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCByZWxpZCk7CiAJCX0KIApAQCAt MTExNiw2ICsxMjM1LDQzMCBAQCBHZXRQdWJsaWNhdGlvbkJ5TmFtZShjb25zdCBjaGFyICpwdWJu YW1lLCBib29sIG1pc3Npbmdfb2spCiAJcmV0dXJuIE9pZElzVmFsaWQob2lkKSA/IEdldFB1Ymxp Y2F0aW9uKG9pZCkgOiBOVUxMOwogfQogCisKKy8qIEhlbHBlcjogUmVzb2x2ZSB0aGUgaW1tZWRp YXRlIHBhcmVudCBvZiBhIHBhcnRpdGlvbiAqLworc3RhdGljIE9pZAorZ2V0X3BhcmVudF9vaWQo T2lkIHJlbGlkKQoreworCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5jZXN0 b3JzKHJlbGlkKTsKKworCWlmIChhbmNlc3RvcnMgPT0gTklMKQorCQlyZXR1cm4gSW52YWxpZE9p ZDsKKwlyZXR1cm4gbGluaXRpYWxfb2lkKGFuY2VzdG9ycyk7Cit9CisKKy8qIEhlbHBlcjogQ2hl Y2sgc3lzY2FjaGUgZm9yIHByZXhjZXB0IGZsYWcgKi8KK2Jvb2wKK2lzX3JlbGlkX3B1Ymxpc2hl ZF9hc19leGNlcHQoT2lkIHJlbGlkLCBPaWQgcHViaWQpCit7CisJSGVhcFR1cGxlCXR1cDsKKwli b29sCQlyZXN1bHQgPSBmYWxzZTsKKworCXR1cCA9IFNlYXJjaFN5c0NhY2hlMihQVUJMSUNBVElP TlJFTE1BUCwgT2JqZWN0SWRHZXREYXR1bShyZWxpZCksIE9iamVjdElkR2V0RGF0dW0ocHViaWQp KTsKKwlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCXsKKwkJRm9ybV9wZ19wdWJsaWNhdGlv bl9yZWwgcHJmb3JtID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsK KworCQlyZXN1bHQgPSBwcmZvcm0tPnByZXhjZXB0OworCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsK Kwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2hhc19hbnlfZXhj ZXB0aW9uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwdWJsaWNhdGlvbiBPSUQg aGFzIGF0IGxlYXN0IG9uZSBlbnRyeSBpbgorICogcGdfcHVibGljYXRpb25fcmVsIG1hcmtlZCBh cyBhbiBleGNlcHRpb24gKHByZXhjZXB0ID0gdHJ1ZSkuCisgKi8KK2Jvb2wKK3B1YmxpY2F0aW9u X2hhc19hbnlfZXhjZXB0aW9uKE9pZCBwdWJpZCkKK3sKKwlSZWxhdGlvbglwdWJSZWw7CisJU2Nh bktleURhdGEgc2tleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBsZQl0dXA7CisJYm9v bAkJZm91bmQgPSBmYWxzZTsKKworCS8qIE9wZW4gcGdfcHVibGljYXRpb25fcmVsIHdpdGggQWNj ZXNzU2hhcmVMb2NrICovCisJcHViUmVsID0gdGFibGVfb3BlbihQdWJsaWNhdGlvblJlbFJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqICogTG9vayB1cCBieSBwdWJsaWNh dGlvbiBPSUQuIFVzaW5nIHRoZSBpbmRleCBvbiAocHJwdWJpZCkgaXMgaGlnaGx5CisJICogZWZm aWNpZW50LgorCSAqLworCVNjYW5LZXlJbml0KCZza2V5LAorCQkJCUFudW1fcGdfcHVibGljYXRp b25fcmVsX3BycHViaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJ CU9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4o cHViUmVsLAorCQkJCQkJCSAgUHVibGljYXRpb25SZWxQcnJlbGlkUHJwdWJpZEluZGV4SWQsCisJ CQkJCQkJICB0cnVlLCBOVUxMLCAxLCAmc2tleSk7CisKKwkvKiBXZSBvbmx5IG5lZWQgdG8gZmlu ZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBwcmV4Y2VwdCA9IHRydWUgKi8KKwl3aGlsZSAoSGVh cFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1f cGdfcHVibGljYXRpb25fcmVsIHB1YnJlbGZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwp IEdFVFNUUlVDVCh0dXApOworCisJCWlmIChwdWJyZWxmb3JtLT5wcmV4Y2VwdCkKKwkJeworCQkJ Zm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNj YW4pOworCXRhYmxlX2Nsb3NlKHB1YlJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBm b3VuZDsKK30KKworLyoKKyAqIGlzX3JlbGlkX3B1Ymxpc2hlZF9leHBsaWNpdGx5CisgKgorICog Q2hlY2tzIGlmIHRoZSBnaXZlbiByZWxhdGlvbiBPSUQgaXMgZXhwbGljaXRseSBwYXJ0IG9mIHRo ZSBwdWJsaWNhdGlvbi4KKyAqIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICdGT1IgVEFCTEUnIHN5 bnRheC4KKyAqLworc3RhdGljIGJvb2wKK2lzX3JlbGlkX3B1Ymxpc2hlZF9leHBsaWNpdGx5KE9p ZCByZWxpZCwgT2lkIHB1YmlkKQoreworCS8qCisJICogU2VhcmNoIHRoZSBzeXNjYWNoZSBmb3Ig cGdfcHVibGljYXRpb25fcmVsIHVzaW5nIHRoZSAocmVsaWQsIHB1YmlkKQorCSAqIGluZGV4Lgor CSAqLworCXJldHVybiBTZWFyY2hTeXNDYWNoZUV4aXN0czIoUFVCTElDQVRJT05SRUxNQVAsCisJ CQkJCQkJCSBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJCQkJCQkJIE9iamVjdElkR2V0RGF0 dW0ocHViaWQpKTsKK30KKworLyoKKyAqIGlzX3NjaGVtYV9wdWJsaXNoZWQKKyAqCisgKiBDaGVj a3MgaWYgdGhlIGdpdmVuIG5hbWVzcGFjZSBPSUQgaXMgcGFydCBvZiB0aGUgcHVibGljYXRpb24n cworICogc2NoZW1hIGxpc3QuIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlICdGT1IgVEFCTEVTIElO IFNDSEVNQScgc3ludGF4LgorICovCitzdGF0aWMgYm9vbAoraXNfc2NoZW1hX3B1Ymxpc2hlZChP aWQgbnNwaWQsIE9pZCBwdWJpZCkKK3sKKwkvKgorCSAqIFNlYXJjaCB0aGUgc3lzY2FjaGUgZm9y IHBnX3B1YmxpY2F0aW9uX25hbWVzcGFjZSB1c2luZyB0aGUgKG5zcGlkLAorCSAqIHB1YmlkKSBp bmRleC4KKwkgKi8KKwlyZXR1cm4gU2VhcmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OTkFN RVNQQUNFTUFQLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShuc3BpZCksCisJCQkJCQkJCSBP YmplY3RJZEdldERhdHVtKHB1YmlkKSk7Cit9CisKKy8qCisgKiBwZ19nZXRfcHVibGljYXRpb25f ZWZmZWN0aXZlX3RhYmxlcworICoKKyAqIEdpdmVuIGEgcm9vdCByZWxhdGlvbiBhbmQgYSBsaXN0 IG9mIHB1YmxpY2F0aW9ucywgY2FsY3VsYXRlIHRoZSBzZXQgb2YKKyAqIHJlbGF0aW9ucyB0aGF0 IGFyZSBlZmZlY3RpdmVseSBwdWJsaXNoZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvcgorICogIkZP UiBBTEwgVEFCTEVTIiBwdWJsaWNhdGlvbnMgdGhhdCB1c2UgIkVYQ0VQVCBUQUJMRSIgZmlsdGVy cy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmVzb2x2ZXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHNl dCBvZiBhbmNlc3RvcnMgdGhhdCBjb3ZlcgorICogYWxsIG5vbi1leGNsdWRlZCBsZWFmIHBhcnRp dGlvbnMuCisgKi8KK0RhdHVtCitwZ19nZXRfcHVibGljYXRpb25fZWZmZWN0aXZlX3RhYmxlcyhQ R19GVU5DVElPTl9BUkdTKQoreworCUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKKwlMaXN0CSAg ICpyZXN1bHRzOworCisJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKKwl7CisJCU9pZAkJCXJvb3Rf cmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOworCQlBcnJheVR5cGUgICpwdWJfbmFtZXNfYXJyYXkg PSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMSk7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK KwkJTGlzdAkgICAqcHViX29pZHMgPSBOSUw7CisJCURhdHVtCSAgICpwdWJfZGF0dW1zOworCQli b29sCSAgICpwdWJfbnVsbHM7CisJCWludAkJCXB1Yl9jb3VudDsKKwkJVHVwbGVEZXNjCXR1cGRl c2M7CisJCUxpc3QJICAgKmZpbmFsX291dHB1dCA9IE5JTDsKKwkJYm9vbAkJaGFzX2NsZWFuX2Fs bF90YWJsZXNfcHViID0gZmFsc2U7CisJCWJvb2wJCWhhc19hbnlfZXhjbHVzaW9uID0gZmFsc2U7 CisJCUxpc3RDZWxsICAgKmxjOworCisJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsK KworCQlkZWNvbnN0cnVjdF9hcnJheShwdWJfbmFtZXNfYXJyYXksIFRFWFRPSUQsIC0xLCBmYWxz ZSwgJ2knLAorCQkJCQkJICAmcHViX2RhdHVtcywgJnB1Yl9udWxscywgJnB1Yl9jb3VudCk7CisJ CWZvciAoaW50IGkgPSAwOyBpIDwgcHViX2NvdW50OyBpKyspCisJCXsKKwkJCWlmICghcHViX251 bGxzW2ldKQorCQkJeworCQkJCWNoYXIJICAgKnB1Ym5hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KHB1Yl9kYXR1bXNbaV0pOworCisJCQkJcHViX29pZHMgPSBsYXBwZW5kX29pZChwdWJfb2lkcywg Z2V0X3B1YmxpY2F0aW9uX29pZChwdWJuYW1lLCBmYWxzZSkpOworCQkJfQorCQl9CisKKwkJLyoK KwkJICogRGV0ZXJtaW5lIGlmIHdlIGNhbiBhdm9pZCB0aGUgZXhwZW5zaXZlIGV4cGFuc2lvbi4g SWYgYW55CisJCSAqIHB1YmxpY2F0aW9uIGlzICdGT1IgQUxMIFRBQkxFUycgd2l0aCBubyBleGNl cHRpb25zLCBvciBpZgorCQkgKiBhYnNvbHV0ZWx5IG5vIGV4Y2VwdGlvbnMgZXhpc3QgYWNyb3Nz IGFsbCBwdWJzLCB0aGUgcm9vdCBpcyB0aGUKKwkJICogcmVzdWx0LgorCQkgKi8KKwkJZm9yZWFj aChsYywgcHViX29pZHMpCisJCXsKKwkJCU9pZAkJCXB1Ym9pZCA9IGxmaXJzdF9vaWQobGMpOwor CQkJSGVhcFR1cGxlCXB1YlR1cDsKKwkJCUZvcm1fcGdfcHVibGljYXRpb24gcHViZm9ybTsKKwor CQkJcHViVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBVQkxJQ0FUSU9OT0lELCBPYmplY3RJZEdldERh dHVtKHB1Ym9pZCkpOworCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHB1YlR1cCkpCisJCQkJY29u dGludWU7CisKKwkJCXB1YmZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHB1 YlR1cCk7CisKKwkJCS8qIENoZWNrIGZvciBhbnkgZXhjbHVzaW9uIGVudHJpZXMgaW4gdGhpcyBw dWJsaWNhdGlvbiAqLworCQkJaWYgKHB1YmxpY2F0aW9uX2hhc19hbnlfZXhjZXB0aW9uKHB1Ym9p ZCkpCisJCQkJaGFzX2FueV9leGNsdXNpb24gPSB0cnVlOworCQkJZWxzZSBpZiAocHViZm9ybS0+ cHViYWxsdGFibGVzKQorCQkJeworCQkJCS8qCisJCQkJICogRm91bmQgYSBwdWJsaWNhdGlvbiB0 aGF0IGluY2x1ZGVzIGV2ZXJ5dGhpbmcgd2l0aG91dAorCQkJCSAqIGV4Y2VwdGlvbgorCQkJCSAq LworCQkJCWhhc19jbGVhbl9hbGxfdGFibGVzX3B1YiA9IHRydWU7CisJCQkJUmVsZWFzZVN5c0Nh Y2hlKHB1YlR1cCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlSZWxlYXNlU3lzQ2FjaGUocHViVHVw KTsKKwkJfQorCisJCS8qIFJldHVybiByb290IGltbWVkaWF0ZWx5IGlmIG5vIGZpbHRlcmluZyBs b2dpYyBpcyBuZWVkZWQgKi8KKwkJaWYgKGhhc19jbGVhbl9hbGxfdGFibGVzX3B1YiB8fCAhaGFz X2FueV9leGNsdXNpb24pCisJCXsKKwkJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNo VG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKwkJCWZpbmFsX291dHB1dCA9IGxp c3RfbWFrZTFfb2lkKHJvb3RfcmVsaWQpOworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNv bnRleHQpOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdAkgICAqYWxsX3RhYmxlczsKKwkJCUxp c3QJICAgKmFsbF9sZWF2ZXMgPSBOSUw7CisJCQlMaXN0CSAgICpleGNsdWRlZF9sZWF2ZXMgPSBO SUw7CisJCQlMaXN0CSAgICphbGxvd2VkX2xlYXZlcyA9IE5JTDsKKwkJCUxpc3QJICAgKmNhbmRp ZGF0ZV9saXN0ID0gTklMOworCisJCQkvKiBHZXQgYWxsIHRoZSBsZWFmIHJlbGF0aW9ucyAqLwor CQkJYWxsX2xlYXZlcyA9IEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhhbGxfbGVhdmVz LAorCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX0xFQUYsCisJCQkJCQkJCQkJCQkJCXJv b3RfcmVsaWQpOworCisJCQkvKgorCQkJICogSWRlbnRpZnkgY29tbW9uIGV4Y2x1ZGVkIHJlbGF0 aW9ucyAoSW5oZXJpdGFuY2UtYXdhcmUpLiBBIHRhYmxlCisJCQkgKiBpcyBleGNsdWRlZCBvbmx5 IGlmIGV2ZXJ5IHB1YmxpY2F0aW9uIGV4Y2x1ZGVzIGl0LCBlaXRoZXIKKwkJCSAqIGV4cGxpY2l0 bHkgb3IgYnkgZXhjbHVkaW5nIG9uZSBvZiBpdHMgYW5jZXN0b3JzLgorCQkJICovCisJCQlmb3Jl YWNoKGxjLCBhbGxfbGVhdmVzKQorCQkJeworCQkJCU9pZAkJCWN1cnJfcmVsaWQgPSBsZmlyc3Rf b2lkKGxjKTsKKwkJCQlMaXN0Q2VsbCAgICpscDsKKwkJCQlib29sCQlpc19jb3ZlcmVkX2J5X2Fu eV9wdWIgPSBmYWxzZTsKKworCQkJCS8qIEdldCB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gZm9yIHRo ZSBjdXJyZW50IHRhYmxlIG9uY2UgKi8KKwkJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRfcGFy dGl0aW9uX2FuY2VzdG9ycyhjdXJyX3JlbGlkKTsKKworCQkJCWZvcmVhY2gobHAsIHB1Yl9vaWRz KQorCQkJCXsKKwkJCQkJT2lkCQkJcHViaWQgPSBsZmlyc3Rfb2lkKGxwKTsKKwkJCQkJSGVhcFR1 cGxlCXB1YlR1cDsKKwkJCQkJRm9ybV9wZ19wdWJsaWNhdGlvbiBwdWJmb3JtOworCQkJCQlib29s CQlpc19hbGxfdGFibGVzOworCisJCQkJCXB1YlR1cCA9IFNlYXJjaFN5c0NhY2hlMShQVUJMSUNB VElPTk9JRCwgT2JqZWN0SWRHZXREYXR1bShwdWJpZCkpOworCQkJCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocHViVHVwKSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXB1YmZvcm0gPSAoRm9ybV9w Z19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHB1YlR1cCk7CisJCQkJCWlzX2FsbF90YWJsZXMgPSBw dWJmb3JtLT5wdWJhbGx0YWJsZXM7CisJCQkJCVJlbGVhc2VTeXNDYWNoZShwdWJUdXApOworCisJ CQkJCWlmIChpc19hbGxfdGFibGVzKQorCQkJCQl7CisJCQkJCQkvKiBGT1IgQUxMIFRBQkxFUzog Q2hlY2sgdGhhdCBpdCBpc24ndCBleGNsdWRlZCAqLworCQkJCQkJYm9vbAkJaXNfZXhjbHVkZWQg PSBmYWxzZTsKKworCQkJCQkJaWYgKGlzX3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHQoY3Vycl9y ZWxpZCwgcHViaWQpKQorCQkJCQkJCWlzX2V4Y2x1ZGVkID0gdHJ1ZTsKKwkJCQkJCWVsc2UKKwkJ CQkJCXsKKwkJCQkJCQlMaXN0Q2VsbCAgICpsYTsKKworCQkJCQkJCWZvcmVhY2gobGEsIGFuY2Vz dG9ycykKKwkJCQkJCQl7CisJCQkJCQkJCWlmIChpc19yZWxpZF9wdWJsaXNoZWRfYXNfZXhjZXB0 KGxmaXJzdF9vaWQobGEpLCBwdWJpZCkpCisJCQkJCQkJCXsKKwkJCQkJCQkJCWlzX2V4Y2x1ZGVk ID0gdHJ1ZTsKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQor CisJCQkJCQlpZiAoIWlzX2V4Y2x1ZGVkKQorCQkJCQkJeworCQkJCQkJCWlzX2NvdmVyZWRfYnlf YW55X3B1YiA9IHRydWU7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxz ZQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogQ2hlY2sgaWYgdGhlIHRhYmxlIGl0c2VsZiBv ciBpdHMgc2NoZW1hIGlzIGluIHRoZQorCQkJCQkJICogcHViLgorCQkJCQkJICovCisJCQkJCQlp ZiAoaXNfcmVsaWRfcHVibGlzaGVkX2V4cGxpY2l0bHkoY3Vycl9yZWxpZCwgcHViaWQpIHx8CisJ CQkJCQkJaXNfc2NoZW1hX3B1Ymxpc2hlZChnZXRfcmVsX25hbWVzcGFjZShjdXJyX3JlbGlkKSwg cHViaWQpKQorCQkJCQkJeworCQkJCQkJCWlzX2NvdmVyZWRfYnlfYW55X3B1YiA9IHRydWU7CisJ CQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJLyoKKwkJCQkJCQkgKiBDaGVjayBp ZiBhbnkgYW5jZXN0b3Igb3IgYW4gYW5jZXN0b3IncyBzY2hlbWEKKwkJCQkJCQkgKiBpcyBpbiB0 aGUgcHViLgorCQkJCQkJCSAqLworCQkJCQkJCUxpc3RDZWxsICAgKmxhOworCisJCQkJCQkJZm9y ZWFjaChsYSwgYW5jZXN0b3JzKQorCQkJCQkJCXsKKwkJCQkJCQkJT2lkCQkJYW5jX29pZCA9IGxm aXJzdF9vaWQobGEpOworCisJCQkJCQkJCWlmIChpc19yZWxpZF9wdWJsaXNoZWRfZXhwbGljaXRs eShhbmNfb2lkLCBwdWJpZCkgfHwKKwkJCQkJCQkJCWlzX3NjaGVtYV9wdWJsaXNoZWQoZ2V0X3Jl bF9uYW1lc3BhY2UoYW5jX29pZCksIHB1YmlkKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJaXNfY292 ZXJlZF9ieV9hbnlfcHViID0gdHJ1ZTsKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJ CQkJfQorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJLyoKKwkJCQkJICogSWYgYW55IHB1YmxpY2F0 aW9uIGNvdmVycyB0aGlzIHRhYmxlLCB3ZSBjYW4gc3RvcAorCQkJCQkgKiBjaGVja2luZyBvdGhl cnMKKwkJCQkJICovCisJCQkJCWlmIChpc19jb3ZlcmVkX2J5X2FueV9wdWIpCisJCQkJCQlicmVh azsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIEluc3RlYWQgb2YgaWRlbnRpZnlpbmcgJ2V4Y2x1 ZGVkJywgd2UgaWRlbnRpZnkgJ2FsbG93ZWQnLgorCQkJCSAqIElmIG5vIHB1YmxpY2F0aW9uIGNv dmVycyB0aGlzIHRhYmxlLCBpdCdzIGVmZmVjdGl2ZWx5CisJCQkJICogZXhjbHVkZWQuCisJCQkJ ICovCisJCQkJaWYgKCFpc19jb3ZlcmVkX2J5X2FueV9wdWIpCisJCQkJCWV4Y2x1ZGVkX2xlYXZl cyA9IGxhcHBlbmRfb2lkKGV4Y2x1ZGVkX2xlYXZlcywgY3Vycl9yZWxpZCk7CisKKwkJCQlsaXN0 X2ZyZWUoYW5jZXN0b3JzKTsKKwkJCX0KKworCQkJLyogQ2FsY3VsYXRlIGFsbG93ZWQgbGVhdmVz IChUb3RhbCAtIEV4Y2x1ZGVkKSAqLworCQkJZm9yZWFjaChsYywgYWxsX2xlYXZlcykKKwkJCXsK KwkJCQlPaWQJCQljdXJyX3JlbGlkID0gbGZpcnN0X29pZChsYyk7CisKKwkJCQlpZiAoIWxpc3Rf bWVtYmVyX29pZChleGNsdWRlZF9sZWF2ZXMsIGN1cnJfcmVsaWQpKQorCQkJCQlhbGxvd2VkX2xl YXZlcyA9IGxhcHBlbmRfb2lkKGFsbG93ZWRfbGVhdmVzLCBjdXJyX3JlbGlkKTsKKwkJCX0KKwor CQkJLyogQm90dG9tLVVwIENvbGxhcHNlLiBDaGVjayBpZiBwYXJlbnRzIGNhbiByZXByZXNlbnQg Y2hpbGRyZW4gKi8KKwkJCWFsbF90YWJsZXMgPSBmaW5kX2FsbF9pbmhlcml0b3JzKHJvb3RfcmVs aWQsIEFjY2Vzc1NoYXJlTG9jaywgTlVMTCk7CisJCQljYW5kaWRhdGVfbGlzdCA9IGxpc3RfY29w eShhbGxvd2VkX2xlYXZlcyk7CisJCQlmb3JlYWNoKGxjLCBhbGxfdGFibGVzKQorCQkJeworCQkJ CU9pZAkJCWN1cnJfcmVsaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKworCQkJCWlmIChnZXRfcmVsX3Jl bGtpbmQoY3Vycl9yZWxpZCkgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQl7CisJ CQkJCUxpc3QJICAgKmJyYW5jaF90cmVlID0gZmluZF9hbGxfaW5oZXJpdG9ycyhjdXJyX3JlbGlk LCBBY2Nlc3NTaGFyZUxvY2ssIE5VTEwpOworCQkJCQlMaXN0CSAgICpicmFuY2hfbGVhdmVzID0g TklMOworCQkJCQlMaXN0Q2VsbCAgICpsY2I7CisJCQkJCWJvb2wJCWFsbF9hbGxvd2VkID0gdHJ1 ZTsKKworCQkJCQlmb3JlYWNoKGxjYiwgYnJhbmNoX3RyZWUpCisJCQkJCXsKKwkJCQkJCU9pZAkJ CWJfb2lkID0gbGZpcnN0X29pZChsY2IpOworCisJCQkJCQlpZiAoZ2V0X3JlbF9yZWxraW5kKGJf b2lkKSAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQkJCWJyYW5jaF9sZWF2ZXMg PSBsYXBwZW5kX29pZChicmFuY2hfbGVhdmVzLCBiX29pZCk7CisJCQkJCX0KKworCQkJCQlpZiAo bGlzdF9sZW5ndGgoYnJhbmNoX2xlYXZlcykgPT0gMCkKKwkJCQkJCWFsbF9hbGxvd2VkID0gZmFs c2U7CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJZm9yZWFjaChsY2IsIGJyYW5jaF9sZWF2ZXMp CisJCQkJCQl7CisJCQkJCQkJaWYgKCFsaXN0X21lbWJlcl9vaWQoYWxsb3dlZF9sZWF2ZXMsIGxm aXJzdF9vaWQobGNiKSkpCisJCQkJCQkJeworCQkJCQkJCQlhbGxfYWxsb3dlZCA9IGZhbHNlOwor CQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoYWxs X2FsbG93ZWQpCisJCQkJCQljYW5kaWRhdGVfbGlzdCA9IGxpc3RfYXBwZW5kX3VuaXF1ZV9vaWQo Y2FuZGlkYXRlX2xpc3QsIGN1cnJfcmVsaWQpOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAq IERlZHVwbGljYXRlOiBPbmx5IGtlZXAgdGhlIGhpZ2hlc3QgbGV2ZWwgcmVwcmVzZW50YXRpdmUg b2YgYW55CisJCQkgKiBicmFuY2gKKwkJCSAqLworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9jYWxsX21lbW9yeV9jdHgpOworCQkJZm9yZWFjaChs YywgY2FuZGlkYXRlX2xpc3QpCisJCQl7CisJCQkJT2lkCQkJY3Vycl9yZWxpZCA9IGxmaXJzdF9v aWQobGMpOworCQkJCU9pZAkJCXBhcmVudF9vaWQgPSBnZXRfcGFyZW50X29pZChjdXJyX3JlbGlk KTsKKworCQkJCWlmIChwYXJlbnRfb2lkID09IEludmFsaWRPaWQgfHwgIWxpc3RfbWVtYmVyX29p ZChjYW5kaWRhdGVfbGlzdCwgcGFyZW50X29pZCkpCisJCQkJCWZpbmFsX291dHB1dCA9IGxhcHBl bmRfb2lkKGZpbmFsX291dHB1dCwgY3Vycl9yZWxpZCk7CisJCQl9CisKKwkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQorCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKwkJLyogQ29uc3Ry dWN0IGEgdHVwbGUgZGVzY3JpcHRvciBmb3IgdGhlIHJlc3VsdCByb3dzLiAqLworCQl0dXBkZXNj ID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2MoMik7CisJCVR1cGxlRGVzY0luaXRFbnRyeSh0dXBk ZXNjLCAoQXR0ck51bWJlcikgMSwgInNjaGVtYW5hbWUiLAorCQkJCQkJICAgVEVYVE9JRCwgLTEs IDApOworCQlUdXBsZURlc2NJbml0RW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDIsICJyZWxu YW1lIiwKKwkJCQkJCSAgIFRFWFRPSUQsIC0xLCAwKTsKKworCQlmdW5jY3R4LT50dXBsZV9kZXNj ID0gQmxlc3NUdXBsZURlc2ModHVwZGVzYyk7CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IGZpbmFs X291dHB1dDsKKworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJ LyogU1JGIFBlci1jYWxsIFJlc3VtZSAqLworCWZ1bmNjdHggPSBTUkZfUEVSQ0FMTF9TRVRVUCgp OworCXJlc3VsdHMgPSAoTGlzdCAqKSBmdW5jY3R4LT51c2VyX2ZjdHg7CisKKwlpZiAoZnVuY2N0 eC0+Y2FsbF9jbnRyIDwgbGlzdF9sZW5ndGgocmVzdWx0cykpCisJeworCQlPaWQJCQljdXJyZW50 X3JlbGlkID0gbGlzdF9udGhfb2lkKHJlc3VsdHMsIChpbnQpIGZ1bmNjdHgtPmNhbGxfY250cik7 CisJCUhlYXBUdXBsZQlyZXR0dXBsZTsKKwkJRGF0dW0JCXZhbHVlc1syXTsKKwkJYm9vbAkJbnVs bHNbMl0gPSB7ZmFsc2UsIGZhbHNlfTsKKworCQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERh dHVtKGdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShjdXJyZW50X3JlbGlkKSkp OworCQl2YWx1ZXNbMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGdldF9yZWxfbmFtZShjdXJyZW50 X3JlbGlkKSk7CisKKwkJcmV0dHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUoZnVuY2N0eC0+dHVwbGVf ZGVzYywgdmFsdWVzLCBudWxscyk7CisJCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBIZWFwVHVw bGVHZXREYXR1bShyZXR0dXBsZSkpOworCX0KKworCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsK K30KKwogLyoKICAqIEdldCBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVzIGluIHRoZSBnaXZlbiBw dWJsaWNhdGlvbiBhcnJheS4KICAqCkBAIC0xMTY4LDE3ICsxNzExLDE3IEBAIHBnX2dldF9wdWJs aWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCSAqIHRob3NlLiBPdGhlcndpc2Us IGdldCB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXRzZWxmLgogCQkJICovCiAJCQlpZiAocHViX2Vs ZW0tPmFsbHRhYmxlcykKLQkJCQlwdWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJl bGF0aW9ucyhSRUxLSU5EX1JFTEFUSU9OLAotCQkJCQkJCQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2 aWFyb290KTsKKwkJCQlwdWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9u cyhwdWJfZWxlbSwKKwkJCQkJCQkJCQkJCQkJCSBSRUxLSU5EX1JFTEFUSU9OKTsKIAkJCWVsc2UK IAkJCXsKIAkJCQlMaXN0CSAgICpyZWxpZHMsCiAJCQkJCQkgICAqc2NoZW1hcmVsaWRzOwogCi0J CQkJcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKLQkJCQkJ CQkJCQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCA/Ci0JCQkJCQkJCQkJCQkgUFVCTElDQVRJT05f UEFSVF9ST09UIDoKLQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYpOworCQkJCXJl bGlkcyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRSZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKKwkJ CQkJCQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2aWFyb290ID8KKwkJCQkJCQkJCQkJCQkJIFBVQkxJ Q0FUSU9OX1BBUlRfUk9PVCA6CisJCQkJCQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYp OwogCQkJCXNjaGVtYXJlbGlkcyA9IEdldEFsbFNjaGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1 Yl9lbGVtLT5vaWQsCiAJCQkJCQkJCQkJCQkJCQkJcHViX2VsZW0tPnB1YnZpYXJvb3QgPwogCQkJ CQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6CkBAIC0xMzY3LDcgKzE5MTAsNyBA QCBwZ19nZXRfcHVibGljYXRpb25fc2VxdWVuY2VzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXB1Ymxp Y2F0aW9uID0gR2V0UHVibGljYXRpb25CeU5hbWUocHVibmFtZSwgZmFsc2UpOwogCiAJCWlmIChw dWJsaWNhdGlvbi0+YWxsc2VxdWVuY2VzKQotCQkJc2VxdWVuY2VzID0gR2V0QWxsUHVibGljYXRp b25SZWxhdGlvbnMoUkVMS0lORF9TRVFVRU5DRSwgZmFsc2UpOworCQkJc2VxdWVuY2VzID0gR2V0 QWxsUHVibGljYXRpb25SZWxhdGlvbnMocHVibGljYXRpb24sIFJFTEtJTkRfU0VRVUVOQ0UpOwog CiAJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHNlcXVlbmNlczsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuYwppbmRleCBmYzNhNGMxOWU2NS4uNmJiODE2YjIxOWMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xOTgsNyArMTk4LDEyIEBAIE9iamVj dHNJblB1YmxpY2F0aW9uVG9PaWRzKExpc3QgKnB1Ym9ianNwZWNfbGlzdCwgUGFyc2VTdGF0ZSAq cHN0YXRlLAogCiAJCXN3aXRjaCAocHVib2JqLT5wdWJvYmp0eXBlKQogCQl7CisJCQljYXNlIFBV QkxJQ0FUSU9OT0JKX0VYQ0VQVF9UQUJMRToKKwkJCQlwdWJvYmotPnB1YnRhYmxlLT5leGNlcHQg PSB0cnVlOworCQkJCSpyZWxzID0gbGFwcGVuZCgqcmVscywgcHVib2JqLT5wdWJ0YWJsZSk7CisJ CQkJYnJlYWs7CiAJCQljYXNlIFBVQkxJQ0FUSU9OT0JKX1RBQkxFOgorCQkJCXB1Ym9iai0+cHVi dGFibGUtPmV4Y2VwdCA9IGZhbHNlOwogCQkJCSpyZWxzID0gbGFwcGVuZCgqcmVscywgcHVib2Jq LT5wdWJ0YWJsZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFBVQkxJQ0FUSU9OT0JKX1RBQkxFU19J Tl9TQ0hFTUE6CkBAIC01MTksOCArNTI0LDggQEAgSW52YWxpZGF0ZVB1YlJlbFN5bmNDYWNoZShP aWQgcHViaWQsIGJvb2wgcHViYWxsdGFibGVzKQogCQkgKiBhIHRhcmdldC4gSG93ZXZlciwgV0FM IHJlY29yZHMgZm9yIFRSVU5DQVRFIHNwZWNpZnkgYm90aCBhIHJvb3QgYW5kCiAJCSAqIGl0cyBs ZWF2ZXMuCiAJCSAqLwotCQlyZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJpZCwK LQkJCQkJCQkJCQkgUFVCTElDQVRJT05fUEFSVF9BTEwpOworCQlyZWxpZHMgPSBHZXRQdWJsaWNh dGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1YmlkLAorCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BB UlRfQUxMKTsKIAkJc2NoZW1hcmVsaWRzID0gR2V0QWxsU2NoZW1hUHVibGljYXRpb25SZWxhdGlv bnMocHViaWQsCiAJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfQUxMKTsKIApAQCAtOTI5 LDU1ICs5MzQsNjEgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVh dGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIAog CS8qIEFzc29jaWF0ZSBvYmplY3RzIHdpdGggdGhlIHB1YmxpY2F0aW9uLiAqLwotCWlmIChzdG10 LT5mb3JfYWxsX3RhYmxlcykKKwlPYmplY3RzSW5QdWJsaWNhdGlvblRvT2lkcyhzdG10LT5wdWJv YmplY3RzLCBwc3RhdGUsICZyZWxhdGlvbnMsCisJCQkJCQkJICAgJnNjaGVtYWlkbGlzdCk7CisK KwkvKiBGT1IgVEFCTEVTIElOIFNDSEVNQSByZXF1aXJlcyBzdXBlcnVzZXIgKi8KKwlpZiAoc2No ZW1haWRsaXN0ICE9IE5JTCAmJiAhc3VwZXJ1c2VyKCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ ZXJyY29kZShFUlJDT0RFX0lOU1VGRklDSUVOVF9QUklWSUxFR0UpLAorCQkJCWVycm1zZygibXVz dCBiZSBzdXBlcnVzZXIgdG8gY3JlYXRlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1YmxpY2F0aW9u IikpOworCisJLyogQWRkIHJlbGF0aW9ucyAodGFibGVzKSB0byB0aGUgcHVibGljYXRpb24uICov CisJaWYgKHJlbGF0aW9ucyAhPSBOSUwpCiAJewogCQkvKgotCQkgKiBJbnZhbGlkYXRlIHJlbGNh Y2hlIHNvIHRoYXQgcHVibGljYXRpb24gaW5mbyBpcyByZWJ1aWx0LiBTZXF1ZW5jZXMKLQkJICog cHVibGljYXRpb24gZG9lc24ndCByZXF1aXJlIGludmFsaWRhdGlvbiwgYXMgcmVwbGljYSBpZGVu dGl0eQotCQkgKiBjaGVja3MgZG9uJ3QgYXBwbHkgdG8gdGhlbS4KKwkJICogVGhlICdyZWxhdGlv bnMnIGxpc3QgY2FuIGJlIG5vbi1lbXB0eSBpbiBvbmx5IHR3byBjYXNlczoKKwkJICoKKwkJICog MS4gQ1JFQVRFIFBVQkxJQ0FUSU9OIC4uLiBGT1IgVEFCTEUgSW4gdGhpcyBjYXNlLCAncmVsYXRp b25zJworCQkgKiBjb250YWlucyB0aGUgbGlzdCBvZiBzcGVjaWZpZWQgdGFibGVzLgorCQkgKgor CQkgKiAyLiBDUkVBVEUgUFVCTElDQVRJT04gLi4uIEZPUiBBTEwgVEFCTEVTIEluIHRoaXMgY2Fz ZSwgJ3JlbGF0aW9ucycKKwkJICogY29udGFpbnMgdGhlIGxpc3Qgb2YgdGFibGVzIHNwZWNpZmll ZCBpbiB0aGUgRVhDRVBUIFRBQkxFIGNsYXVzZS4KKwkJICogRHVyaW5nIHBhcnNpbmcsIHRoZSAn ZXhjZXB0JyBmbGFnIGlzIHNldCBmb3IgdGhlIGFzc29jaWF0ZWQKKwkJICogUHVibGljYXRpb25S ZWxJbmZvIG9iamVjdHMuCiAJCSAqLwotCQlDYWNoZUludmFsaWRhdGVSZWxjYWNoZUFsbCgpOwot CX0KLQllbHNlIGlmICghc3RtdC0+Zm9yX2FsbF9zZXF1ZW5jZXMpCi0JewotCQlPYmplY3RzSW5Q dWJsaWNhdGlvblRvT2lkcyhzdG10LT5wdWJvYmplY3RzLCBwc3RhdGUsICZyZWxhdGlvbnMsCi0J CQkJCQkJCSAgICZzY2hlbWFpZGxpc3QpOworCQlMaXN0CSAgICpyZWxzOwogCi0JCS8qIEZPUiBU QUJMRVMgSU4gU0NIRU1BIHJlcXVpcmVzIHN1cGVydXNlciAqLwotCQlpZiAoc2NoZW1haWRsaXN0 ICE9IE5JTCAmJiAhc3VwZXJ1c2VyKCkpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQllcnJjb2Rl KEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCi0JCQkJCWVycm1zZygibXVzdCBiZSBz dXBlcnVzZXIgdG8gY3JlYXRlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1YmxpY2F0aW9uIikpOwot Ci0JCWlmIChyZWxhdGlvbnMgIT0gTklMKQotCQl7Ci0JCQlMaXN0CSAgICpyZWxzOworCQlyZWxz ID0gT3BlblRhYmxlTGlzdChyZWxhdGlvbnMpOworCQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMo cmVscywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCisJCQkJCQkJCSBwdWJsaXNoX3ZpYV9wYXJ0aXRp b25fcm9vdCk7CiAKLQkJCXJlbHMgPSBPcGVuVGFibGVMaXN0KHJlbGF0aW9ucyk7Ci0JCQlUcmFu c2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCi0JCQkJCQkJ CQkgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworCQlDaGVja1B1YlJlbGF0aW9uQ29sdW1u TGlzdChzdG10LT5wdWJuYW1lLCByZWxzLAorCQkJCQkJCQkgICBzY2hlbWFpZGxpc3QgIT0gTklM LAorCQkJCQkJCQkgICBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKLQkJCUNoZWNrUHVi UmVsYXRpb25Db2x1bW5MaXN0KHN0bXQtPnB1Ym5hbWUsIHJlbHMsCi0JCQkJCQkJCQkgICBzY2hl bWFpZGxpc3QgIT0gTklMLAotCQkJCQkJCQkJICAgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qp OwotCi0JCQlQdWJsaWNhdGlvbkFkZFRhYmxlcyhwdWJvaWQsIHJlbHMsIHRydWUsIE5VTEwpOwot CQkJQ2xvc2VUYWJsZUxpc3QocmVscyk7Ci0JCX0KKwkJUHVibGljYXRpb25BZGRUYWJsZXMocHVi b2lkLCByZWxzLCB0cnVlLCBOVUxMKTsKKwkJQ2xvc2VUYWJsZUxpc3QocmVscyk7CisJfQogCi0J CWlmIChzY2hlbWFpZGxpc3QgIT0gTklMKQotCQl7Ci0JCQkvKgotCQkJICogU2NoZW1hIGxvY2sg aXMgaGVsZCB1bnRpbCB0aGUgcHVibGljYXRpb24gaXMgY3JlYXRlZCB0byBwcmV2ZW50Ci0JCQkg KiBjb25jdXJyZW50IHNjaGVtYSBkZWxldGlvbi4KLQkJCSAqLwotCQkJTG9ja1NjaGVtYUxpc3Qo c2NoZW1haWRsaXN0KTsKLQkJCVB1YmxpY2F0aW9uQWRkU2NoZW1hcyhwdWJvaWQsIHNjaGVtYWlk bGlzdCwgdHJ1ZSwgTlVMTCk7Ci0JCX0KKwlpZiAoc2NoZW1haWRsaXN0ICE9IE5JTCkKKwl7CisJ CS8qCisJCSAqIFNjaGVtYSBsb2NrIGlzIGhlbGQgdW50aWwgdGhlIHB1YmxpY2F0aW9uIGlzIGNy ZWF0ZWQgdG8gcHJldmVudAorCQkgKiBjb25jdXJyZW50IHNjaGVtYSBkZWxldGlvbi4KKwkJICov CisJCUxvY2tTY2hlbWFMaXN0KHNjaGVtYWlkbGlzdCk7CisJCVB1YmxpY2F0aW9uQWRkU2NoZW1h cyhwdWJvaWQsIHNjaGVtYWlkbGlzdCwgdHJ1ZSwgTlVMTCk7CiAJfQogCiAJdGFibGVfY2xvc2Uo cmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAorCWlmIChzdG10LT5mb3JfYWxsX3RhYmxlcykKKwl7 CisJCS8qIEludmFsaWRhdGUgcmVsY2FjaGUgc28gdGhhdCBwdWJsaWNhdGlvbiBpbmZvIGlzIHJl YnVpbHQuICovCisJCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQWxsKCk7CisJfQorCiAJSW52b2tl T2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJvaWQsIDApOwog CiAJLyoKQEAgLTEwNTAsOCArMTA2MSw4IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCUxvY2tEYXRhYmFz ZU9iamVjdChQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1YmZvcm0tPm9pZCwgMCwKIAkJCQkJCSAg IEFjY2Vzc1NoYXJlTG9jayk7CiAKLQkJcm9vdF9yZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJlbGF0 aW9ucyhwdWJmb3JtLT5vaWQsCi0JCQkJCQkJCQkJCSAgUFVCTElDQVRJT05fUEFSVF9ST09UKTsK KwkJcm9vdF9yZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKHB1YmZvcm0t Pm9pZCwKKwkJCQkJCQkJCQkJCQkgIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CiAKIAkJZm9yZWFj aChsYywgcm9vdF9yZWxpZHMpCiAJCXsKQEAgLTExNzAsOCArMTE4MSw4IEBAIEFsdGVyUHVibGlj YXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0 bXQsCiAJCSAqIHRyZWVzLCBub3QganVzdCB0aG9zZSBleHBsaWNpdGx5IG1lbnRpb25lZCBpbiB0 aGUgcHVibGljYXRpb24uCiAJCSAqLwogCQlpZiAocm9vdF9yZWxpZHMgPT0gTklMKQotCQkJcmVs aWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViZm9ybS0+b2lkLAotCQkJCQkJCQkJCQkg UFVCTElDQVRJT05fUEFSVF9BTEwpOworCQkJcmVsaWRzID0gR2V0UHVibGljYXRpb25JbmNsdWRl ZFJlbGF0aW9ucyhwdWJmb3JtLT5vaWQsCisJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRf QUxMKTsKIAkJZWxzZQogCQl7CiAJCQkvKgpAQCAtMTI1Niw4ICsxMjY3LDggQEAgQWx0ZXJQdWJs aWNhdGlvblRhYmxlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwK IAkJUHVibGljYXRpb25Ecm9wVGFibGVzKHB1YmlkLCByZWxzLCBmYWxzZSk7CiAJZWxzZQkJCQkJ CS8qIEFQX1NldE9iamVjdHMgKi8KIAl7Ci0JCUxpc3QJICAgKm9sZHJlbGlkcyA9IEdldFB1Ymxp Y2F0aW9uUmVsYXRpb25zKHB1YmlkLAotCQkJCQkJCQkJCQkJCQlQVUJMSUNBVElPTl9QQVJUX1JP T1QpOworCQlMaXN0CSAgICpvbGRyZWxpZHMgPSBHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRp b25zKHB1YmlkLAorCQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfUk9PVCk7CiAJCUxp c3QJICAgKmRlbHJlbHMgPSBOSUw7CiAJCUxpc3RDZWxsICAgKm9sZGxjOwogCkBAIC0xMzU4LDYg KzEzNjksNyBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpz dG10LCBIZWFwVHVwbGUgdHVwLAogCQkJCW9sZHJlbCA9IHBhbGxvY19vYmplY3QoUHVibGljYXRp b25SZWxJbmZvKTsKIAkJCQlvbGRyZWwtPndoZXJlQ2xhdXNlID0gTlVMTDsKIAkJCQlvbGRyZWwt PmNvbHVtbnMgPSBOSUw7CisJCQkJb2xkcmVsLT5leGNlcHQgPSBmYWxzZTsKIAkJCQlvbGRyZWwt PnJlbGF0aW9uID0gdGFibGVfb3BlbihvbGRyZWxpZCwKIAkJCQkJCQkJCQkJICBTaGFyZVVwZGF0 ZUV4Y2x1c2l2ZUxvY2spOwogCQkJCWRlbHJlbHMgPSBsYXBwZW5kKGRlbHJlbHMsIG9sZHJlbCk7 CkBAIC0xNDA4LDcgKzE0MjAsOCBAQCBBbHRlclB1YmxpY2F0aW9uU2NoZW1hcyhBbHRlclB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCwKIAkJTGlzdENlbGwgICAqbGM7CiAJCUxpc3QJICAgKnJlbG9pZHM7 CiAKLQkJcmVsb2lkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwgUFVC TElDQVRJT05fUEFSVF9ST09UKTsKKwkJcmVsb2lkcyA9IEdldFB1YmxpY2F0aW9uSW5jbHVkZWRS ZWxhdGlvbnMocHViZm9ybS0+b2lkLAorCQkJCQkJCQkJCQkJICBQVUJMSUNBVElPTl9QQVJUX1JP T1QpOwogCiAJCWZvcmVhY2gobGMsIHJlbG9pZHMpCiAJCXsKQEAgLTE3NzEsNiArMTc4NCw3IEBA IE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQlwdWJfcmVsLT5yZWxhdGlvbiA9IHJlbDsK IAkJcHViX3JlbC0+d2hlcmVDbGF1c2UgPSB0LT53aGVyZUNsYXVzZTsKIAkJcHViX3JlbC0+Y29s dW1ucyA9IHQtPmNvbHVtbnM7CisJCXB1Yl9yZWwtPmV4Y2VwdCA9IHQtPmV4Y2VwdDsKIAkJcmVs cyA9IGxhcHBlbmQocmVscywgcHViX3JlbCk7CiAJCXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlk cywgbXlyZWxpZCk7CiAKQEAgLTE4NDMsNiArMTg1Nyw3IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAq dGFibGVzKQogCiAJCQkJLyogY2hpbGQgaW5oZXJpdHMgY29sdW1uIGxpc3QgZnJvbSBwYXJlbnQg Ki8KIAkJCQlwdWJfcmVsLT5jb2x1bW5zID0gdC0+Y29sdW1uczsKKwkJCQlwdWJfcmVsLT5leGNl cHQgPSB0LT5leGNlcHQ7CiAJCQkJcmVscyA9IGxhcHBlbmQocmVscywgcHViX3JlbCk7CiAJCQkJ cmVsaWRzID0gbGFwcGVuZF9vaWQocmVsaWRzLCBjaGlsZHJlbGlkKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IDBiM2M4NDk5YjQ5Li5hOWM3NzdiMzc4MCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtNTQ5LDYgKzU0OSw3 NiBAQCBjaGVja19wdWJsaWNhdGlvbnMoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIExpc3QgKnB1 YmxpY2F0aW9ucykKIAl9CiB9CiAKKy8qCisgKiBUaHJvd3MgYW4gRVJST1IgaWYgbXVsdGlwbGUg cHVibGljYXRpb25zIHdpdGggZXhjZXB0aW9ucyBhcmUgZm91bmQuCisgKgorICogVGhpcyBjaGVj ayBpcyBtYW5kYXRvcnkgYmVjYXVzZSBsb2dpY2FsIHJlcGxpY2F0aW9uIGN1cnJlbnRseSBkb2Vz IG5vdAorICogc3VwcG9ydCBzdWJzY3JpYmluZyB0byBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgaWYg bW9yZSB0aGFuIG9uZSBvZiB0aGVtCisgKiB1c2VzIGFuIGV4Y2x1c2lvbiBsaXN0LgorICovCitz dGF0aWMgdm9pZAorY2hlY2tfcHVibGljYXRpb25zX2V4Y2VwdF9saXN0KFdhbFJlY2VpdmVyQ29u biAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCit7CisJV2FsUmN2RXhlY1Jlc3VsdCAqcmVz OworCVN0cmluZ0luZm9EYXRhIGNtZDsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKwlPaWQJCQl0 YWJsZVJvd1sxXSA9IHtURVhUT0lEfTsKKwlMaXN0CSAgICpleGNlcHRfcHVibGljYXRpb25zID0g TklMOworCisJaW5pdFN0cmluZ0luZm8oJmNtZCk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm Y21kLAorCQkJCQkJICAgIlNFTEVDVCBESVNUSU5DVCBwLnB1Ym5hbWVcbiIKKwkJCQkJCSAgICIg IEZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCisJCQkJCQkgICAiIFdIRVJFIHAu cHVibmFtZSBJTiAoIik7CisKKwlHZXRQdWJsaWNhdGlvbnNTdHIocHVibGljYXRpb25zLCAmY21k LCB0cnVlKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwKKwkJCQkJCSAgICIpXG4i CisJCQkJCQkgICAiICAgQU5EIEVYSVNUUyAoU0VMRUNUIDFcbiIKKwkJCQkJCSAgICIgICAgICAg ICAgICAgICAgIEZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHJcbiIKKwkJCQkJ CSAgICIgICAgICAgICAgICAgICAgV0hFUkUgcHIucHJwdWJpZCA9IHAub2lkXG4iCisJCQkJCQkg ICAiICAgICAgICAgICAgICAgICAgQU5EIHByLnByZXhjZXB0IElTIFRSVUUpIik7CisKKwlyZXMg PSB3YWxyY3ZfZXhlYyh3cmNvbm4sIGNtZC5kYXRhLCAxLCB0YWJsZVJvdyk7CisJcGZyZWUoY21k LmRhdGEpOworCisJaWYgKHJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJZXJybXNnKCJjb3VsZCBub3QgcmVjZWl2ZSBsaXN0IG9mIHB1YmxpY2F0 aW9ucyBmcm9tIHRoZSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJICAgcmVzLT5lcnIpKTsKKworCXNs b3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocmVzLT50dXBsZWRlc2MsICZUVFNPcHNNaW5p bWFsVHVwbGUpOworCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChyZXMtPnR1cGxlc3Rv cmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwl7CisJCWNoYXIJICAgKnB1Ym5hbWU7CisJCWJvb2wJ CWlzbnVsbDsKKworCQlwdWJuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIo c2xvdCwgMSwgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJZXhjZXB0X3B1Ymxp Y2F0aW9ucyA9IGxhcHBlbmQoZXhjZXB0X3B1YmxpY2F0aW9ucywgbWFrZVN0cmluZyhwdWJuYW1l KSk7CisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCX0KKworCUV4ZWNEcm9wU2luZ2xlVHVwbGVU YWJsZVNsb3Qoc2xvdCk7CisKKwl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CisKKwlpZiAobGlz dF9sZW5ndGgoZXhjZXB0X3B1YmxpY2F0aW9ucykgPiAxKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEg cHVibmFtZXM7CisKKwkJaW5pdFN0cmluZ0luZm8oJnB1Ym5hbWVzKTsKKwkJR2V0UHVibGljYXRp b25zU3RyKGV4Y2VwdF9wdWJsaWNhdGlvbnMsICZwdWJuYW1lcywgZmFsc2UpOworCisJCWVyZXBv cnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRF X1NUQVRFKSwKKwkJCQllcnJtc2coInB1YmxpY2F0aW9ucyAlcyBhcmUgZGVmaW5lZCB3aXRoIEVY Q0VQVCBUQUJMRSIsIHB1Ym5hbWVzLmRhdGEpLAorCQkJCWVycmhpbnQoIlN1YnNjcmlwdGlvbiBj YW5ub3QgYmUgY3JlYXRlZCB1c2luZyBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgdGhhdCBzcGVjaWZ5 IEVYQ0VQVCBUQUJMRS4iKSk7CisJfQorfQorCiAvKgogICogQXV4aWxpYXJ5IGZ1bmN0aW9uIHRv IGJ1aWxkIGEgdGV4dCBhcnJheSBvdXQgb2YgYSBsaXN0IG9mIFN0cmluZyBub2Rlcy4KICAqLwpA QCAtNzk1LDYgKzg2NSw3IEBAIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCQljaGFyCQlyZWxhdGlvbl9zdGF0ZTsK IAogCQkJY2hlY2tfcHVibGljYXRpb25zKHdyY29ubiwgcHVibGljYXRpb25zKTsKKwkJCWNoZWNr X3B1YmxpY2F0aW9uc19leGNlcHRfbGlzdCh3cmNvbm4sIHB1YmxpY2F0aW9ucyk7CiAJCQljaGVj a19wdWJsaWNhdGlvbnNfb3JpZ2luX3RhYmxlcyh3cmNvbm4sIHB1YmxpY2F0aW9ucywKIAkJCQkJ CQkJCQkJIG9wdHMuY29weV9kYXRhLAogCQkJCQkJCQkJCQkgb3B0cy5yZXRhaW5kZWFkdHVwbGVz LCBvcHRzLm9yaWdpbiwKQEAgLTk1OSw2ICsxMDMwLDggQEAgQWx0ZXJTdWJzY3JpcHRpb25fcmVm cmVzaChTdWJzY3JpcHRpb24gKnN1YiwgYm9vbCBjb3B5X2RhdGEsCiAJCWlmICh2YWxpZGF0ZV9w dWJsaWNhdGlvbnMpCiAJCQljaGVja19wdWJsaWNhdGlvbnMod3Jjb25uLCB2YWxpZGF0ZV9wdWJs aWNhdGlvbnMpOwogCisJCWNoZWNrX3B1YmxpY2F0aW9uc19leGNlcHRfbGlzdCh3cmNvbm4sIHN1 Yi0+cHVibGljYXRpb25zKTsKKwogCQkvKiBHZXQgdGhlIHJlbGF0aW9uIGxpc3QgZnJvbSBwdWJs aXNoZXIuICovCiAJCXB1YnJlbHMgPSBmZXRjaF9yZWxhdGlvbl9saXN0KHdyY29ubiwgc3ViLT5w dWJsaWNhdGlvbnMpOwogCkBAIC0yOTQwLDYgKzMwMTMsOCBAQCBmZXRjaF9yZWxhdGlvbl9saXN0 KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCiAJCQkJCQkgcHVi X25hbWVzLmRhdGEpOwogCX0KIAorCWVsb2coTE9HLCAiZmV0Y2hfcmVsYXRpb25fbGlzdDogZXhl Y3V0aW5nIHF1ZXJ5IHRvIGZldGNoIGVmZmVjdGl2ZXJlbGF0aW9uczogXG4lcyIsCisJCSBjbWQu ZGF0YSk7CiAJcGZyZWUocHViX25hbWVzLmRhdGEpOwogCiAJcmVzID0gd2FscmN2X2V4ZWMod3Jj b25uLCBjbWQuZGF0YSwgY29sdW1uX2NvdW50LCB0YWJsZVJvdyk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCmluZGV4IGY5NzZjMGU1YzdlLi5hNTM1MWZjNTljNiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMKQEAgLTg2ODgsNyArODY4OCw3IEBAIEFURXhlY1NldEV4cHJlc3Npb24oQWx0ZXJl ZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAJICog ZXhwcmVzc2lvbnMuCiAJICovCiAJaWYgKGF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJB VEVEX1ZJUlRVQUwgJiYKLQkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoUmVsYXRpb25HZXRSZWxp ZChyZWwpKSAhPSBOSUwpCisJCUdldFJlbGF0aW9uUHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVs aWQocmVsKSwgTlVMTCwgTlVMTCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coIkFMVEVSIFRBQkxFIC8g U0VUIEVYUFJFU1NJT04gaXMgbm90IHN1cHBvcnRlZCBmb3IgdmlydHVhbCBnZW5lcmF0ZWQgY29s dW1ucyBpbiB0YWJsZXMgdGhhdCBhcmUgcGFydCBvZiBhIHB1YmxpY2F0aW9uIiksCkBAIC0xODg4 NCw3ICsxODg4NCw3IEBAIEFUUHJlcENoYW5nZVBlcnNpc3RlbmNlKEFsdGVyZWRUYWJsZUluZm8g KnRhYiwgUmVsYXRpb24gcmVsLCBib29sIHRvTG9nZ2VkKQogCSAqIFVOTE9HR0VELCBhcyBVTkxP R0dFRCB0YWJsZXMgY2FuJ3QgYmUgcHVibGlzaGVkLgogCSAqLwogCWlmICghdG9Mb2dnZWQgJiYK LQkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoUmVsYXRpb25HZXRSZWxpZChyZWwpKSAhPSBOSUwp CisJCUdldFJlbGF0aW9uUHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTlVMTCwg TlVMTCkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCiAJCQkJIGVycm1zZygiY2Fubm90IGNoYW5nZSB0YWJs ZSBcIiVzXCIgdG8gdW5sb2dnZWQgYmVjYXVzZSBpdCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24i LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3Bh cnNlci9ncmFtLnkKaW5kZXggNzEzZWU1YzEwYTIuLmQzYzNlOWY1OWM2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkK QEAgLTIwMyw2ICsyMDMsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzQ0FTYml0cyhpbnQgY2FzX2Jp dHMsIGludCBsb2NhdGlvbiwgY29uc3QgY2hhciAqY29uc3RyVHlwZSwKIHN0YXRpYyBQYXJ0aXRp b25TdHJhdGVneSBwYXJzZVBhcnRpdGlvblN0cmF0ZWd5KGNoYXIgKnN0cmF0ZWd5LCBpbnQgbG9j YXRpb24sCiAJCQkJCQkJCQkJCQljb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgdm9p ZCBwcmVwcm9jZXNzX3B1Yl9hbGxfb2JqdHlwZV9saXN0KExpc3QgKmFsbF9vYmplY3RzX2xpc3Qs CisJCQkJCQkJCQkJCUxpc3QgKipwdWJvYmplY3RzLAogCQkJCQkJCQkJCQlib29sICphbGxfdGFi bGVzLAogCQkJCQkJCQkJCQlib29sICphbGxfc2VxdWVuY2VzLAogCQkJCQkJCQkJCQljb3JlX3l5 c2Nhbl90IHl5c2Nhbm5lcik7CkBAIC00NTUsNiArNDU2LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VS ZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1 ZXJ5KTsKIAkJCQlUcmlnZ2VyVHJhbnNpdGlvbnMgVHJpZ2dlclJlZmVyZW5jaW5nCiAJCQkJdmFj dXVtX3JlbGF0aW9uX2xpc3Qgb3B0X3ZhY3V1bV9yZWxhdGlvbl9saXN0CiAJCQkJZHJvcF9vcHRp b25fbGlzdCBwdWJfb2JqX2xpc3QgcHViX2FsbF9vYmpfdHlwZV9saXN0CisJCQkJcHViX2V4Y2Vw dF9vYmpfbGlzdCBvcHRfcHViX2V4Y2VwdF9jbGF1c2UKIAogJXR5cGUgPHJldGNsYXVzZT4gcmV0 dXJuaW5nX2NsYXVzZQogJXR5cGUgPG5vZGU+CXJldHVybmluZ19vcHRpb24KQEAgLTU5Miw2ICs1 OTQsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogJXR5cGUgPG5vZGU+CXZhcl92YWx1ZSB6 b25lX3ZhbHVlCiAldHlwZSA8cm9sZXNwZWM+IGF1dGhfaWRlbnQgUm9sZVNwZWMgb3B0X2dyYW50 ZWRfYnkKICV0eXBlIDxwdWJsaWNhdGlvbm9iamVjdHNwZWM+IFB1YmxpY2F0aW9uT2JqU3BlYwor JXR5cGUgPHB1YmxpY2F0aW9ub2JqZWN0c3BlYz4gUHVibGljYXRpb25FeGNlcHRPYmpTcGVjCiAl dHlwZSA8cHVibGljYXRpb25hbGxvYmplY3RzcGVjPiBQdWJsaWNhdGlvbkFsbE9ialNwZWMKIAog JXR5cGUgPGtleXdvcmQ+IHVucmVzZXJ2ZWRfa2V5d29yZCB0eXBlX2Z1bmNfbmFtZV9rZXl3b3Jk CkBAIC0xMDc5Miw3ICsxMDc5NSw3IEBAIEFsdGVyT3duZXJTdG10OiBBTFRFUiBBR0dSRUdBVEUg YWdncmVnYXRlX3dpdGhfYXJndHlwZXMgT1dORVIgVE8gUm9sZVNwZWMKICAqCiAgKiBwdWJfYWxs X29ial90eXBlIGlzIG9uZSBvZjoKICAqCi0gKgkJVEFCTEVTCisgKgkJVEFCTEVTIFtFWENFUFQg W1RBQkxFXSAoIHRhYmxlIFssIC4uLl0gKV0KICAqCQlTRVFVRU5DRVMKICAqCiAgKiBDUkVBVEUg UFVCTElDQVRJT04gRk9SIHB1Yl9vYmogWywgLi4uXSBbV0lUSCBvcHRpb25zXQpAQCAtMTA4MTgs NyArMTA4MjEsOCBAQCBDcmVhdGVQdWJsaWNhdGlvblN0bXQ6CiAJCQkJCUNyZWF0ZVB1YmxpY2F0 aW9uU3RtdCAqbiA9IG1ha2VOb2RlKENyZWF0ZVB1YmxpY2F0aW9uU3RtdCk7CiAKIAkJCQkJbi0+ cHVibmFtZSA9ICQzOwotCQkJCQlwcmVwcm9jZXNzX3B1Yl9hbGxfb2JqdHlwZV9saXN0KCQ1LCAm bi0+Zm9yX2FsbF90YWJsZXMsCisJCQkJCXByZXByb2Nlc3NfcHViX2FsbF9vYmp0eXBlX2xpc3Qo JDUsICZuLT5wdWJvYmplY3RzLAorCQkJCQkJCQkJCQkJCSZuLT5mb3JfYWxsX3RhYmxlcywKIAkJ CQkJCQkJCQkJCQkmbi0+Zm9yX2FsbF9zZXF1ZW5jZXMsCiAJCQkJCQkJCQkJCQkJeXlzY2FubmVy KTsKIAkJCQkJbi0+b3B0aW9ucyA9ICQ2OwpAQCAtMTA4NTgsNiArMTA4NjIsNyBAQCBQdWJsaWNh dGlvbk9ialNwZWM6CiAJCQkJCSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMjsKIAkJCQkJJCQt PnB1YnRhYmxlLT5jb2x1bW5zID0gJDM7CiAJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2Ug PSAkNDsKKwkJCQkJJCQtPmxvY2F0aW9uID0gQDE7CiAJCQkJfQogCQkJfCBUQUJMRVMgSU5fUCBT Q0hFTUEgQ29sSWQKIAkJCQl7CkBAIC0xMDkzMywxMSArMTA5MzgsMTkgQEAgcHViX29ial9saXN0 OglQdWJsaWNhdGlvbk9ialNwZWMKIAkJCQkJeyAkJCA9IGxhcHBlbmQoJDEsICQzKTsgfQogCTsK IAorb3B0X3B1Yl9leGNlcHRfY2xhdXNlOgorCQkJRVhDRVBUIG9wdF90YWJsZSAnKCcgcHViX2V4 Y2VwdF9vYmpfbGlzdCAnKScJeyAkJCA9ICQ0OyB9CisJCQl8IC8qRU1QVFkqLwkJCQkJCQkJCQl7 ICQkID0gTklMOyB9CisJCTsKKwogUHVibGljYXRpb25BbGxPYmpTcGVjOgotCQkJCUFMTCBUQUJM RVMKKwkJCQlBTEwgVEFCTEVTIG9wdF9wdWJfZXhjZXB0X2NsYXVzZQogCQkJCQl7CiAJCQkJCQkk JCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uQWxsT2JqU3BlYyk7CiAJCQkJCQkkJC0+cHVib2JqdHlw ZSA9IFBVQkxJQ0FUSU9OX0FMTF9UQUJMRVM7CisJCQkJCQkkJC0+ZXhjZXB0X3RhYmxlcyA9ICQz OworCQkJCQkJaWYoJCQtPmV4Y2VwdF90YWJsZXMgIT0gTlVMTCkKKwkJCQkJCQlwcmVwcm9jZXNz X3B1Ym9ial9saXN0KCQkLT5leGNlcHRfdGFibGVzLCB5eXNjYW5uZXIpOwogCQkJCQkJJCQtPmxv Y2F0aW9uID0gQDE7CiAJCQkJCX0KIAkJCQl8IEFMTCBTRVFVRU5DRVMKQEAgLTEwOTU0LDYgKzEw OTY3LDIzIEBAIHB1Yl9hbGxfb2JqX3R5cGVfbGlzdDoJUHVibGljYXRpb25BbGxPYmpTcGVjCiAJ CQkJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KIAk7CiAKK1B1YmxpY2F0aW9uRXhjZXB0T2Jq U3BlYzoKKwkJCSByZWxhdGlvbl9leHByCisJCQkJeworCQkJCQkkJCA9IG1ha2VOb2RlKFB1Ymxp Y2F0aW9uT2JqU3BlYyk7CisJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfRVhD RVBUX1RBQkxFOworCQkJCQkkJC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxl KTsKKwkJCQkJJCQtPnB1YnRhYmxlLT5leGNlcHQgPSB0cnVlOworCQkJCQkkJC0+cHVidGFibGUt PnJlbGF0aW9uID0gJDE7CisJCQkJCSQkLT5sb2NhdGlvbiA9IEAxOworCQkJCX0KKwk7CisKK3B1 Yl9leGNlcHRfb2JqX2xpc3Q6IFB1YmxpY2F0aW9uRXhjZXB0T2JqU3BlYworCQkJCQl7ICQkID0g bGlzdF9tYWtlMSgkMSk7IH0KKwkJCXwgcHViX2V4Y2VwdF9vYmpfbGlzdCAnLCcgUHVibGljYXRp b25FeGNlcHRPYmpTcGVjCisJCQkJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMyk7IH0KKwk7CiAKIC8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE5Nzk0LDggKzE5ODI0LDkgQEAgcGFyc2VQYXJ0 aXRpb25TdHJhdGVneShjaGFyICpzdHJhdGVneSwgaW50IGxvY2F0aW9uLCBjb3JlX3l5c2Nhbl90 IHl5c2Nhbm5lcikKICAqIEFsc28sIGNoZWNrcyBpZiB0aGUgcHViX29iamVjdF90eXBlIGhhcyBi ZWVuIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZS4KICAqLwogc3RhdGljIHZvaWQKLXByZXByb2Nl c3NfcHViX2FsbF9vYmp0eXBlX2xpc3QoTGlzdCAqYWxsX29iamVjdHNfbGlzdCwgYm9vbCAqYWxs X3RhYmxlcywKLQkJCQkJCQkJYm9vbCAqYWxsX3NlcXVlbmNlcywgY29yZV95eXNjYW5fdCB5eXNj YW5uZXIpCitwcmVwcm9jZXNzX3B1Yl9hbGxfb2JqdHlwZV9saXN0KExpc3QgKmFsbF9vYmplY3Rz X2xpc3QsIExpc3QgKipwdWJvYmplY3RzLAorCQkJCQkJCQlib29sICphbGxfdGFibGVzLCBib29s ICphbGxfc2VxdWVuY2VzLAorCQkJCQkJCQljb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlp ZiAoIWFsbF9vYmplY3RzX2xpc3QpCiAJCXJldHVybjsKQEAgLTE5ODE1LDYgKzE5ODQ2LDcgQEAg cHJlcHJvY2Vzc19wdWJfYWxsX29ianR5cGVfbGlzdChMaXN0ICphbGxfb2JqZWN0c19saXN0LCBi b29sICphbGxfdGFibGVzLAogCQkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKG9iai0+bG9jYXRpb24p KTsKIAogCQkJKmFsbF90YWJsZXMgPSB0cnVlOworCQkJKnB1Ym9iamVjdHMgPSBsaXN0X2NvbmNh dCgqcHVib2JqZWN0cywgb2JqLT5leGNlcHRfdGFibGVzKTsKIAkJfQogCQllbHNlIGlmIChvYmot PnB1Ym9ianR5cGUgPT0gUFVCTElDQVRJT05fQUxMX1NFUVVFTkNFUykKIAkJewpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXggMTlhM2MyMWE4NjMuLmM0 MWZlNDFlYTdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Rh Ymxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5j LmMKQEAgLTcxNiwyMSArNzE2LDI4IEBAIGNvcHlfcmVhZF9kYXRhKHZvaWQgKm91dGJ1ZiwgaW50 IG1pbnJlYWQsIGludCBtYXhyZWFkKQogICogbWVzc2FnZSBwcm92aWRlcyBkdXJpbmcgcmVwbGlj YXRpb24uCiAgKgogICogVGhpcyBmdW5jdGlvbiBhbHNvIHJldHVybnMgKGEpIHRoZSByZWxhdGlv biBxdWFsaWZpY2F0aW9ucyB0byBiZSB1c2VkIGluCi0gKiB0aGUgQ09QWSBjb21tYW5kLCBhbmQg KGIpIHdoZXRoZXIgdGhlIHJlbW90ZSByZWxhdGlvbiBoYXMgcHVibGlzaGVkIGFueQotICogZ2Vu ZXJhdGVkIGNvbHVtbi4KKyAqIHRoZSBDT1BZIGNvbW1hbmQsIChiKSB3aGV0aGVyIHRoZSByZW1v dGUgcmVsYXRpb24gaGFzIHB1Ymxpc2hlZCBhbnkKKyAqIGdlbmVyYXRlZCBjb2x1bW4sIGFuZCAo YykgY29tcHV0ZXMgdGhlIGVmZmVjdGl2ZSBzZXQgb2YgcmVsYXRpb25zIHRvIGJlIHVzZWQKKyAq IGFzIENPUFkgc291cmNlcyB3aGVuIGV4Y2x1c2lvbnMgYXJlIHByZXNlbnQuIFdoZW4gbm8gZXhj bHVzaW9ucyBleGlzdCwgdGhlCisgKiBsaXN0IHJlbWFpbnMgZW1wdHkgYW5kIHRoZSByb290IHJl bGF0aW9uIGlzIHVzZWQgYXMtaXMuIFdoZW4gZXhjbHVzaW9ucworICogZXhpc3QsIHRoZSBsaXN0 IGNvbnRhaW5zIGxlYWYgcmVsYXRpb25zIHRoYXQgYXJlIG5vdCBleGNsdWRlZCBhbmQgbXVzdCBi ZQorICogY29tYmluZWQgdXNpbmcgVU5JT04gQUxMLgogICovCiBzdGF0aWMgdm9pZAogZmV0Y2hf cmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJl cFJlbGF0aW9uICpscmVsLAotCQkJCQkJTGlzdCAqKnF1YWwsIGJvb2wgKmdlbmNvbF9wdWJsaXNo ZWQpCisJCQkJCQlMaXN0ICoqcXVhbCwgYm9vbCAqZ2VuY29sX3B1Ymxpc2hlZCwKKwkJCQkJCUxp c3QgKiplZmZlY3RpdmVfcmVsYXRpb25zKQogewogCVdhbFJjdkV4ZWNSZXN1bHQgKnJlczsKIAlT dHJpbmdJbmZvRGF0YSBjbWQ7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7Ci0JT2lkCQkJdGFibGVS b3dbXSA9IHtPSURPSUQsIENIQVJPSUQsIENIQVJPSUR9OworCU9pZAkJCXRhYmxlUm93W10gPSB7 T0lET0lELCBDSEFST0lELCBDSEFST0lELCBCT09MT0lEfTsKIAlPaWQJCQlhdHRyUm93W10gPSB7 SU5UMk9JRCwgVEVYVE9JRCwgT0lET0lELCBCT09MT0lELCBCT09MT0lEfTsKIAlPaWQJCQlxdWFs Um93W10gPSB7VEVYVE9JRH07CisJT2lkCQkJZmlsdGVydGFibGVSb3dbXSA9IHtURVhUT0lELCBU RVhUT0lEfTsKIAlib29sCQlpc251bGw7CiAJaW50CQkJbmF0dDsKKwlib29sCQlpc19wYXJ0aXRp b247CiAJU3RyaW5nSW5mbwlwdWJfbmFtZXMgPSBOVUxMOwogCUJpdG1hcHNldCAgKmluY2x1ZGVk X2NvbHMgPSBOVUxMOwogCWludAkJCXNlcnZlcl92ZXJzaW9uID0gd2FscmN2X3NlcnZlcl92ZXJz aW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pOwpAQCAtNzQwLDcgKzc0Nyw3IEBAIGZldGNoX3Jl bW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsIExvZ2ljYWxSZXBS ZWxhdGlvbiAqbHJlbCwKIAogCS8qIEZpcnN0IGZldGNoIE9pZCBhbmQgcmVwbGljYSBpZGVudGl0 eS4gKi8KIAlpbml0U3RyaW5nSW5mbygmY21kKTsKLQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJT RUxFQ1QgYy5vaWQsIGMucmVscmVwbGlkZW50LCBjLnJlbGtpbmQiCisJYXBwZW5kU3RyaW5nSW5m bygmY21kLCAiU0VMRUNUIGMub2lkLCBjLnJlbHJlcGxpZGVudCwgYy5yZWxraW5kLCBjLnJlbGlz cGFydGl0aW9uIgogCQkJCQkgIiAgRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGMiCiAJCQkJCSAi ICBJTk5FUiBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4iCiAJCQkJCSAiICAgICAgICBP TiAoYy5yZWxuYW1lc3BhY2UgPSBuLm9pZCkiCkBAIC03NzAsNiArNzc3LDggQEAgZmV0Y2hfcmVt b3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJl bGF0aW9uICpscmVsLAogCUFzc2VydCghaXNudWxsKTsKIAlscmVsLT5yZWxraW5kID0gRGF0dW1H ZXRDaGFyKHNsb3RfZ2V0YXR0cihzbG90LCAzLCAmaXNudWxsKSk7CiAJQXNzZXJ0KCFpc251bGwp OworCWlzX3BhcnRpdGlvbiA9IERhdHVtR2V0Qm9vbChzbG90X2dldGF0dHIoc2xvdCwgNCwgJmlz bnVsbCkpOworCUFzc2VydCghaXNudWxsKTsKIAogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNs b3Qoc2xvdCk7CiAJd2FscmN2X2NsZWFyX3Jlc3VsdChyZXMpOwpAQCAtOTU0LDYgKzk2Myw3NSBA QCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLCBM b2dpY2FsUmVwUmVsYXRpb24gKmxyZWwsCiAKIAl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CiAK KwlpZiAoc2VydmVyX3ZlcnNpb24gPj0gMTkwMDAwICYmICFpc19wYXJ0aXRpb24gJiYKKwkJbHJl bC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJcmVzZXRTdHJp bmdJbmZvKCZjbWQpOworCisJCS8qCisJCSAqIFRoaXMgcXVlcnkgcmVjdXJzaXZlbHkgdHJhdmVy c2VzIHRoZSBpbmhlcml0YW5jZSAocGFydGl0aW9uKSB0cmVlCisJCSAqIHN0YXJ0aW5nIGZyb20g dGhlIGdpdmVuIHRhYmxlIE9JRCBhbmQgZGV0ZXJtaW5lcyB3aGljaCBsZWFmCisJCSAqIHJlbGF0 aW9ucyBzaG91bGQgYmUgaW5jbHVkZWQgZm9yIHJlcGxpY2F0aW9uLiBFeGNsdXNpb24gcHJvcGFn YXRlcworCQkgKiBmcm9tIHBhcmVudCB0byBjaGlsZCwgYW5kIGEgcmVsYXRpb24gaXMgYWxzbyB0 cmVhdGVkIGFzIGV4Y2x1ZGVkIGlmCisJCSAqIGl0IGlzIGV4cGxpY2l0bHkgbWFya2VkIHdpdGgg cHJleGNlcHQgPSB0cnVlIGluIHBnX3B1YmxpY2F0aW9uX3JlbAorCQkgKiBmb3IgdGhlIHNwZWNp ZmllZCBwdWJsaWNhdGlvbnMuIFRoZSBmaW5hbCByZXN1bHQgcmV0dXJucyBvbmx5CisJCSAqIG5v biBleGNsdWRlZCBsZWFmIHJlbGF0aW9ucy4KKwkJICovCisJCWFwcGVuZFN0cmluZ0luZm8oJmNt ZCwgIlNFTEVDVCBzY2hlbWFuYW1lLCByZWxuYW1lIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX2Vm ZmVjdGl2ZV90YWJsZXMoJXUsIEFSUkFZWyVzXSk7IiwKKwkJCQkJCSBscmVsLT5yZW1vdGVpZCwK KwkJCQkJCSBwdWJfbmFtZXMtPmRhdGEpOworCisJCWVsb2coTE9HLCAiRXhlY3V0aW5nIHF1ZXJ5 IHRvIGdldCB0aGUgdGFibGVzOlxuJXMiLCBjbWQuZGF0YSk7CisJCXJlcyA9IHdhbHJjdl9leGVj KExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLAorCQkJCQkJICBsZW5ndGhvZihmaWx0 ZXJ0YWJsZVJvdyksIGZpbHRlcnRhYmxlUm93KTsKKworCQlpZiAocmVzLT5zdGF0dXMgIT0gV0FM UkNWX09LX1RVUExFUykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9D T05ORUNUSU9OX0ZBSUxVUkUpLAorCQkJCQllcnJtc2coImNvdWxkIG5vdCBnZXQgbm9uIGV4Y2x1 ZGVkIHRhYmxlIGxpc3QgZm9yIHRhYmxlIFwiJXMuJXNcIiBmcm9tIHB1Ymxpc2hlcjogJXMiLAor CQkJCQkJCW5zcG5hbWUsIHJlbG5hbWUsIHJlcy0+ZXJyKSk7CisKKwkJLyoKKwkJICogU3RvcmUg dGhlIHRhYmxlcyBhcyBhIGxpc3Qgb2Ygc2NoZW1hbmFtZSBhbmQgdGFibGVuYW1lLgorCQkgKi8K KwkJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRUU09w c01pbmltYWxUdXBsZSk7CisJCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChyZXMtPnR1 cGxlc3RvcmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwkJeworCQkJUXVhbGlmaWVkUmVsYXRpb25O YW1lICpyZWxpbmZvID0gcGFsbG9jX29iamVjdChRdWFsaWZpZWRSZWxhdGlvbk5hbWUpOworCisJ CQlyZWxpbmZvLT5zY2hlbWFuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIo c2xvdCwgMSwgJmlzbnVsbCkpOworCQkJQXNzZXJ0KCFpc251bGwpOworCQkJcmVsaW5mby0+cmVs bmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251bGwp KTsKKwkJCUFzc2VydCghaXNudWxsKTsKKworCQkJKmVmZmVjdGl2ZV9yZWxhdGlvbnMgPSBsYXBw ZW5kKCplZmZlY3RpdmVfcmVsYXRpb25zLCByZWxpbmZvKTsKKworCQkJRXhlY0NsZWFyVHVwbGUo c2xvdCk7CisJCX0KKworCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCisJ CS8qCisJCSAqIElmIHRoZXJlIGlzIGV4YWN0bHkgb25lIGl0ZW0gaW4gdGhlIGVmZmVjdGl2ZV9y ZWxhdGlvbnMgbGlzdCBhbmQgaXQKKwkJICogZXF1YWxzIHRoZSB0YWJsZSBiZWluZyBwcm9jZXNz ZWQsIHRoYXQgbWVhbnMgbm8gYWN0dWFsIGV4Y2x1c2lvbgorCQkgKiBvY2N1cnJlZC4KKwkJICov CisJCWlmIChsaXN0X2xlbmd0aCgqZWZmZWN0aXZlX3JlbGF0aW9ucykgPT0gMSkKKwkJeworCQkJ UXVhbGlmaWVkUmVsYXRpb25OYW1lICpyZWxpbmZvOworCisJCQlyZWxpbmZvID0gbGluaXRpYWwo KmVmZmVjdGl2ZV9yZWxhdGlvbnMpOworCQkJaWYgKHN0cmNtcChuc3BuYW1lLCByZWxpbmZvLT5z Y2hlbWFuYW1lKSA9PSAwICYmCisJCQkJc3RyY21wKHJlbG5hbWUsIHJlbGluZm8tPnJlbG5hbWUp ID09IDApCisJCQl7CisJCQkJcGZyZWUocmVsaW5mby0+c2NoZW1hbmFtZSk7CisJCQkJcGZyZWUo cmVsaW5mby0+cmVsbmFtZSk7CisJCQkJbGlzdF9mcmVlX2RlZXAoKmVmZmVjdGl2ZV9yZWxhdGlv bnMpOworCQkJCSplZmZlY3RpdmVfcmVsYXRpb25zID0gTklMOworCQkJfQorCQl9CisJfQorCiAJ LyoKIAkgKiBHZXQgcmVsYXRpb24ncyByb3cgZmlsdGVyIGV4cHJlc3Npb25zLiBESVNUSU5DVCBh dm9pZHMgdGhlIHNhbWUKIAkgKiBleHByZXNzaW9uIG9mIGEgdGFibGUgaW4gbXVsdGlwbGUgcHVi bGljYXRpb25zIGZyb20gYmVpbmcgaW5jbHVkZWQKQEAgLTEwNDMsNiArMTEyMSw3IEBAIGNvcHlf dGFibGUoUmVsYXRpb24gcmVsKQogCUxvZ2ljYWxSZXBSZWxNYXBFbnRyeSAqcmVsbWFwZW50cnk7 CiAJTG9naWNhbFJlcFJlbGF0aW9uIGxyZWw7CiAJTGlzdAkgICAqcXVhbCA9IE5JTDsKKwlMaXN0 CSAgICplZmZlY3RpdmVfcmVsYXRpb25zID0gTklMOwogCVdhbFJjdkV4ZWNSZXN1bHQgKnJlczsK IAlTdHJpbmdJbmZvRGF0YSBjbWQ7CiAJQ29weUZyb21TdGF0ZSBjc3RhdGU7CkBAIC0xMDU0LDcg KzExMzMsNyBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkKIAkvKiBHZXQgdGhlIHB1Ymxpc2hl ciByZWxhdGlvbiBpbmZvLiAqLwogCWZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGdldF9uYW1lc3Bh Y2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpKSwKIAkJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpLCAmbHJlbCwgJnF1YWwsCi0JCQkJCQkJJmdlbmNvbF9wdWJsaXNoZWQp OworCQkJCQkJCSZnZW5jb2xfcHVibGlzaGVkLCAmZWZmZWN0aXZlX3JlbGF0aW9ucyk7CiAKIAkv KiBQdXQgdGhlIHJlbGF0aW9uIGludG8gcmVsbWFwLiAqLwogCWxvZ2ljYWxyZXBfcmVsbWFwX3Vw ZGF0ZSgmbHJlbCk7CkBAIC0xMDY2LDEyICsxMTQ1LDY0IEBAIGNvcHlfdGFibGUoUmVsYXRpb24g cmVsKQogCS8qIFN0YXJ0IGNvcHkgb24gdGhlIHB1Ymxpc2hlci4gKi8KIAlpbml0U3RyaW5nSW5m bygmY21kKTsKIAorCisJaWYgKGVmZmVjdGl2ZV9yZWxhdGlvbnMgJiYgbGlzdF9sZW5ndGgoZWZm ZWN0aXZlX3JlbGF0aW9ucykpCisJeworCQlib29sIGZpcnN0ID0gdHJ1ZTsKKworCQkvKgorCQkg KiBCdWlsZCBhIHNpbmdsZSBDT1BZIGNvbW1hbmQgdG8gc3luY2hyb25pemUgYWxsIHJlc29sdmVk IHJlbGF0aW9ucworCQkgKiBpbnRvIHRoZSByb290IHRhYmxlLgorCQkgKgorCQkgKiBUaGUgYXJy YXkgJ2VmZmVjdGl2ZV9yZWxhdGlvbnMnIGNvbnRhaW5zIHRoZSBsZWFmIHRhYmxlcyBvZgorCQkg KiBwYXJ0aXRpb24gaGllcmFyY2hpZXMsIHdpdGggZXhjbHVkZWQgc3VidHJlZXMgcmVtb3ZlZCBh Y2NvcmRpbmcgdG8KKwkJICogdGhlIEVYQ0VQVCBjbGF1c2VzLiBUaGlzIGFwcGxpZXMgb25seSB3 aGVuCisJCSAqICdwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCcgaXMgZW5hYmxlZCwgc2luY2Ug dGhlIGluaXRpYWwgc3luYyBtdXN0CisJCSAqIHJvdXRlIGFsbCBjaGFuZ2VzIHRvIHRoZSByb290 IHRhYmxlLgorCQkgKgorCQkgKiBXZSBjb25zdHJ1Y3QgYSBVTklPTiBBTEwgcXVlcnkgdGhhdCBj b21iaW5lcyBkYXRhIGZyb20gbXVsdGlwbGUgbGVhZgorCQkgKiByZWxhdGlvbnMgaW50byBvbmUg c3ViLUNPUFkgc3RhdGVtZW50LCBlbnN1cmluZyBhbGwgcm93cyBhcmUgY29waWVkCisJCSAqIGNv bnNpc3RlbnRseSBpbnRvIHRoZSByb290IHRhYmxlLgorCQkgKi8KKwkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmY21kLCAiQ09QWSAoXG4iKTsKKwkJZm9yZWFjaF9wdHIoUXVhbGlmaWVkUmVsYXRp b25OYW1lLCByZWxpbmZvLCBlZmZlY3RpdmVfcmVsYXRpb25zKQorCQl7CisJCQlpZiAoIWZpcnN0 KQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIlVOSU9OIEFMTFxuIik7CisKKwkJ CWZpcnN0ID0gZmFsc2U7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIlNFTEVD VCAiKTsKKworCQkJLyogSWYgdGhlIHRhYmxlIGhhcyBjb2x1bW5zLCB0aGVuIHNwZWNpZnkgdGhl IGNvbHVtbnMgKi8KKwkJCWlmIChscmVsLm5hdHRzKQorCQkJeworCQkJCWZvciAoaW50IGkgPSAw OyBpIDwgbHJlbC5uYXR0czsgaSsrKQorCQkJCXsKKwkJCQkJaWYgKGkgPiAwKQorCQkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiLCAiKTsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZjbWQsIHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOworCQkJCX0K KwkJCX0KKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsICIgKiAiKTsK KworCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiIEZST00gICVzXG4iLAorCQkJCQkJCSBxdW90 ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihyZWxpbmZvLT5zY2hlbWFuYW1lLAorCQkJCQkJCQkJCQkJ CQlyZWxpbmZvLT5yZWxuYW1lKSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZj bWQsICIpXG4iKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21kLCAiVE8gU1RET1VUIik7 CisJfQogCS8qIFJlZ3VsYXIgb3IgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBubyByb3cgZmlsdGVy IG9yIGdlbmVyYXRlZCBjb2x1bW5zICovCi0JaWYgKChscmVsLnJlbGtpbmQgPT0gUkVMS0lORF9S RUxBVElPTiB8fCBscmVsLnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJ JiYgcXVhbCA9PSBOSUwgJiYgIWdlbmNvbF9wdWJsaXNoZWQpCisJZWxzZSBpZiAoKGxyZWwucmVs a2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8CisJCQkgIGxyZWwucmVsa2luZCA9PSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFKSAmJgorCQkJIHF1YWwgPT0gTklMICYmICFnZW5jb2xfcHVibGlz aGVkKQogCXsKIAkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiQ09QWSAlcyIsCi0JCQkJCQkgcXVv dGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUpKTsKKwkJ CQkJCXF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGxyZWwubnNwbmFtZSwgbHJlbC5yZWxuYW1l KSk7CiAKIAkJLyogSWYgdGhlIHRhYmxlIGhhcyBjb2x1bW5zLCB0aGVuIHNwZWNpZnkgdGhlIGNv bHVtbnMgKi8KIAkJaWYgKGxyZWwubmF0dHMpCkBAIC0xMTU3LDYgKzEyODgsNyBAQCBjb3B5X3Rh YmxlKFJlbGF0aW9uIHJlbCkKIAl9CiAKIAlyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJX YWxSY3ZDb25uLCBjbWQuZGF0YSwgMCwgTlVMTCk7CisJZWxvZyhMT0csICJUYWJsZXN5bmMgd29y a2VyOiBFeGVjdXRpbmcgcXVlcnkgdG8gZ2V0IHRoZSBpbml0aWFsIHN5bmMgZGF0YTpcbiVzIiwg Y21kLmRhdGEpOwogCXBmcmVlKGNtZC5kYXRhKTsKIAlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNW X09LX0NPUFlfT1VUKQogCQllcmVwb3J0KEVSUk9SLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggZTAxNmY2NGUwYjMuLjgwZGYwMjFmM2Q1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTE3OTcsMTIg KzE3OTcsMTcgQEAgcGdvdXRwdXRfc2h1dGRvd24oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 KQogICogdG8gc2lsZW50bHkgY29udGludWUgdGhlIHJlcGxpY2F0aW9uIGluIHRoZSBhYnNlbmNl IG9mIGEgbWlzc2luZyBwdWJsaWNhdGlvbi4KICAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSB3 ZSBhbGxvdyB0aGUgdXNlcnMgdG8gY3JlYXRlIHB1YmxpY2F0aW9ucyBhZnRlciB0aGV5CiAgKiBo YXZlIHNwZWNpZmllZCB0aGUgcmVxdWlyZWQgcHVibGljYXRpb25zIGF0IHRoZSB0aW1lIG9mIHJl cGxpY2F0aW9uIHN0YXJ0LgorICogV2UgYWxzbyBlbmZvcmNlIHRoYXQgbm8gbW9yZSB0aGFuIG9u ZSBwdWJsaWNhdGlvbiBpbiB0aGUgbGlzdCBtYXkgY29udGFpbgorICogYW4gRVhDRVBUIFRBQkxF IGNsYXVzZS4gVXNpbmcgbXVsdGlwbGUgcHVibGljYXRpb25zIHdpdGggZXhjZXB0aW9ucyBpcwor ICogY3VycmVudGx5IHVuc3VwcG9ydGVkIHRvIHByZXZlbnQgbm9uLWRldGVybWluaXN0aWMgZmls dGVyaW5nIGJlaGF2aW9yCisgKiBhY3Jvc3Mgb3ZlcmxhcHBpbmcgcHVibGljYXRpb24gc2V0cy4K ICAqLwogc3RhdGljIExpc3QgKgogTG9hZFB1YmxpY2F0aW9ucyhMaXN0ICpwdWJuYW1lcykKIHsK IAlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CiAJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqZXhj ZXB0X3B1Yl9uYW1lcyA9IE5JTDsKIAogCWZvcmVhY2gobGMsIHB1Ym5hbWVzKQogCXsKQEAgLTE4 MTAsNyArMTgxNSwxMyBAQCBMb2FkUHVibGljYXRpb25zKExpc3QgKnB1Ym5hbWVzKQogCQlQdWJs aWNhdGlvbiAqcHViID0gR2V0UHVibGljYXRpb25CeU5hbWUocHVibmFtZSwgdHJ1ZSk7CiAKIAkJ aWYgKHB1YikKKwkJewogCQkJcmVzdWx0ID0gbGFwcGVuZChyZXN1bHQsIHB1Yik7CisKKwkJCS8q IENoZWNrIGlmIHRoaXMgcHVibGljYXRpb24gaGFzIGFuIEVYQ0VQVCBUQUJMRSBsaXN0LiAqLwor CQkJaWYgKHB1YmxpY2F0aW9uX2hhc19hbnlfZXhjZXB0aW9uKHB1Yi0+b2lkKSkKKwkJCQlleGNl cHRfcHViX25hbWVzID0gbGFwcGVuZChleGNlcHRfcHViX25hbWVzLCBwc3RyZHVwKHB1Ym5hbWUp KTsKKwkJfQogCQllbHNlCiAJCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJCWVycmNvZGUoRVJSQ09E RV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCkBAIC0xODE5LDYgKzE4MzAsMzQg QEAgTG9hZFB1YmxpY2F0aW9ucyhMaXN0ICpwdWJuYW1lcykKIAkJCQkJZXJyaGludCgiQ3JlYXRl IHRoZSBwdWJsaWNhdGlvbiBpZiBpdCBkb2VzIG5vdCBleGlzdC4iKSk7CiAJfQogCisJLyoKKwkg KiBJZiBtb3JlIHRoYW4gb25lIHB1YmxpY2F0aW9uIGhhcyBhbiBFWENFUFQgbGlzdCwgdGhyb3cg YW4gZXJyb3IgbGlzdGluZworCSAqIGFsbCB0aGUgcHJvYmxlbWF0aWMgcHVibGljYXRpb25zLgor CSAqLworCWlmIChsaXN0X2xlbmd0aChleGNlcHRfcHViX25hbWVzKSA+IDEpCisJeworCQlTdHJp bmdJbmZvRGF0YSBwdWJfbmFtZXNfc3RyOworCQlib29sCQlmaXJzdCA9IHRydWU7CisKKwkJaW5p dFN0cmluZ0luZm8oJnB1Yl9uYW1lc19zdHIpOworCisJCWZvcmVhY2hfcHRyKGNoYXIsIG5hbWUs IGV4Y2VwdF9wdWJfbmFtZXMpCisJCXsKKwkJCWlmICghZmlyc3QpCisJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmcHViX25hbWVzX3N0ciwgIiwgIik7CisKKwkJCWFwcGVuZFN0cmluZ0luZm8o JnB1Yl9uYW1lc19zdHIsICJcIiVzXCIiLCBuYW1lKTsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0K KworCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJCWVycm1zZygiY2Fubm90IHVzZSBtdWx0aXBsZSBwdWJsaWNhdGlvbnMgd2l0 aCBFWENFUFQgVEFCTEUgbGlzdHMiKSwKKwkJCQllcnJkZXRhaWwoIlRoZSBmb2xsb3dpbmcgcHVi bGljYXRpb25zIGhhdmUgZXhjZXB0aW9uczogJXMuIiwKKwkJCQkJCSAgcHViX25hbWVzX3N0ci5k YXRhKSk7CisJfQorCisJbGlzdF9mcmVlX2RlZXAoZXhjZXB0X3B1Yl9uYW1lcyk7CiAJcmV0dXJu IHJlc3VsdDsKIH0KIApAQCAtMjA0MSw2ICsyMDgwLDY1IEBAIHNldF9zY2hlbWFfc2VudF9pbl9z dHJlYW1lZF90eG4oUmVsYXRpb25TeW5jRW50cnkgKmVudHJ5LCBUcmFuc2FjdGlvbklkIHhpZCkK IAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKIH0KIAorLyoKKyAqIHB1YmxpY2F0aW9u X2hhc19lZmZlY3RpdmVfdGFibGVzCisgKgorICogQ2hlY2tzIGlmIHRoZSBwdWJsaWNhdGlvbiBo YXMgYW55IGVmZmVjdGl2ZSBkYXRhIGluIGEgcGFydGl0aW9uIHRyZWUuCisgKiBSZXR1cm5zIHRy dWUgaWYgYXQgbGVhc3Qgb25lIGxlYWYgaXMgTk9UIGV4Y2x1ZGVkLgorICovCitzdGF0aWMgYm9v bAorcHVibGljYXRpb25faGFzX2VmZmVjdGl2ZV90YWJsZXMoT2lkIHJvb3RfcmVsaWQsIE9pZCBw dWJpZCkKK3sKKwlMaXN0CSAgICphbGxfbGVhdmVzID0gTklMOworCWJvb2wJCWF0X2xlYXN0X29u ZV9hbGxvd2VkID0gZmFsc2U7CisKKwkvKiBHZXQgYWxsIGxlYWYgcmVsYXRpb25zIGluIHRoZSBo aWVyYXJjaHkgKi8KKwlhbGxfbGVhdmVzID0gR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25z KE5JTCwKKwkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRfTEVBRiwKKwkJCQkJCQkJCQkJCXJv b3RfcmVsaWQpOworCisJLyoKKwkgKiBUcmF2ZXJzZSBsZWF2ZXMuIElmIHdlIGZpbmQgZXZlbiBP TkUgbGVhZiB0aGF0IGlzIG5vdCBleGNsdWRlZCBieSB0aGUKKwkgKiBwdWJsaWNhdGlvbidzIEVY Q0VQVCBsaXN0LCB0aGUgdHJlZSBpcyBlZmZlY3RpdmUuCisJICovCisJZm9yZWFjaF9vaWQoY3Vy cl9yZWxpZCwgYWxsX2xlYXZlcykKKwl7CisJCUxpc3QJICAgKmFuY2VzdG9ycyA9IGdldF9wYXJ0 aXRpb25fYW5jZXN0b3JzKGN1cnJfcmVsaWQpOworCQlib29sCQlpc19leGNsdWRlZCA9IGZhbHNl OworCisJCS8qIDEuIENoZWNrIGlmIHRoZSBsZWFmIGl0c2VsZiBpcyBhbiBleGNlcHRpb24gKi8K KwkJaWYgKGlzX3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHQoY3Vycl9yZWxpZCwgcHViaWQpKQor CQkJaXNfZXhjbHVkZWQgPSB0cnVlOworCQllbHNlCisJCXsKKwkJCS8qIENoZWNrIGlmIGFueSBh bmNlc3RvciBpcyBhbiBleGNlcHRpb24gKi8KKwkJCWZvcmVhY2hfb2lkKGFuY2VzdG9yLCBhbmNl c3RvcnMpCisJCQl7CisJCQkJaWYgKGlzX3JlbGlkX3B1Ymxpc2hlZF9hc19leGNlcHQoYW5jZXN0 b3IsIHB1YmlkKSkKKwkJCQl7CisJCQkJCWlzX2V4Y2x1ZGVkID0gdHJ1ZTsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCQkJfQorCQl9CisKKwkJbGlzdF9mcmVlKGFuY2VzdG9ycyk7CisKKwkJLyoKKwkJ ICogSWYgdGhpcyBsZWFmIGlzIG5vdCBleGNsdWRlZCwgaXQgbWVhbnMgdGhlIHB1YmxpY2F0aW9u IGVmZmVjdGl2ZWx5CisJCSAqIGluY2x1ZGVzIGRhdGEgZnJvbSB0aGlzIHRyZWUuCisJCSAqLwor CQlpZiAoIWlzX2V4Y2x1ZGVkKQorCQl7CisJCQlhdF9sZWFzdF9vbmVfYWxsb3dlZCA9IHRydWU7 CisJCQlicmVhazsKKwkJfQorCX0KKworCWxpc3RfZnJlZShhbGxfbGVhdmVzKTsKKwlyZXR1cm4g YXRfbGVhc3Rfb25lX2FsbG93ZWQ7Cit9CisKIC8qCiAgKiBGaW5kIG9yIGNyZWF0ZSBlbnRyeSBp biB0aGUgcmVsYXRpb24gc2NoZW1hIGNhY2hlLgogICoKQEAgLTIwODgsNyArMjE4Niw3IEBAIGdl dF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQog CWlmICghZW50cnktPnJlcGxpY2F0ZV92YWxpZCkKIAl7CiAJCU9pZAkJCXNjaGVtYUlkID0gZ2V0 X3JlbF9uYW1lc3BhY2UocmVsaWQpOwotCQlMaXN0CSAgICpwdWJpZHMgPSBHZXRSZWxhdGlvblB1 YmxpY2F0aW9ucyhyZWxpZCk7CisJCUxpc3QJICAgKnB1YmlkcyA9IE5JTDsKIAogCQkvKgogCQkg KiBXZSBkb24ndCBhY3F1aXJlIGEgbG9jayBvbiB0aGUgbmFtZXNwYWNlIHN5c3RlbSB0YWJsZSBh cyB3ZSBidWlsZApAQCAtMjEwMiw2ICsyMjAwLDExIEBAIGdldF9yZWxfc3luY19lbnRyeShQR091 dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQlib29sCQlhbV9wYXJ0aXRpb24g PSBnZXRfcmVsX3JlbGlzcGFydGl0aW9uKHJlbGlkKTsKIAkJY2hhcgkJcmVsa2luZCA9IGdldF9y ZWxfcmVsa2luZChyZWxpZCk7CiAJCUxpc3QJICAgKnJlbF9wdWJsaWNhdGlvbnMgPSBOSUw7CisJ CWJvb2wJCXJvb3RfYW5jZXN0b3JfcHVibGlzaGVkX3ZpYV9hbnkgPSBmYWxzZTsKKwkJT2lkCQkJ cm9vdF9hbmNlc3RvciA9IEludmFsaWRPaWQ7CisJCUxpc3QJICAgKmFuY2VzdG9ycyA9IE5JTDsK KworCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhyZWxpZCwgJnB1YmlkcywgTlVMTCk7CiAKIAkJ LyogUmVsb2FkIHB1YmxpY2F0aW9ucyBpZiBuZWVkZWQgYmVmb3JlIHVzZS4gKi8KIAkJaWYgKCFw dWJsaWNhdGlvbnNfdmFsaWQpCkBAIC0yMTgwLDYgKzIyODMsMzIgQEAgZ2V0X3JlbF9zeW5jX2Vu dHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5lc3Rh dGUgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0ZSwgMCwgc2l6ZW9mKGVudHJ5LT5l eHByc3RhdGUpKTsKIAorCQkvKgorCQkgKiBQcmUtY2FsY3VsYXRlIGlmIHRoZSByb290IGFuY2Vz dG9yIGlzIHB1Ymxpc2hlZCB2aWEgYW55IHB1YnZpYXJvb3QKKwkJICogcHVibGljYXRpb24uIFRo aXMgYXZvaWRzIG5lc3RpbmcgbG9vcHMgaW5zaWRlIHRoZSBtYWluIHB1YmxpY2F0aW9uCisJCSAq IGNoZWNrLgorCQkgKi8KKwkJaWYgKGFtX3BhcnRpdGlvbikKKwkJeworCQkJYW5jZXN0b3JzID0g Z2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQpOworCQkJcm9vdF9hbmNlc3RvciA9IGxsYXN0 X29pZChhbmNlc3RvcnMpOworCisJCQlmb3JlYWNoKGxjLCBkYXRhLT5wdWJsaWNhdGlvbnMpCisJ CQl7CisJCQkJUHVibGljYXRpb24gKnB1YmluZm8gPSBsZmlyc3QobGMpOworCisJCQkJaWYgKHB1 YmluZm8tPmFsbHRhYmxlcyAmJiBwdWJpbmZvLT5wdWJ2aWFyb290ICYmCisJCQkJCXB1YmxpY2F0 aW9uX2hhc19hbnlfZXhjZXB0aW9uKHB1YmluZm8tPm9pZCkpCisJCQkJeworCQkJCQlpZiAocHVi bGljYXRpb25faGFzX2VmZmVjdGl2ZV90YWJsZXMocm9vdF9hbmNlc3RvciwgcHViaW5mby0+b2lk KSkKKwkJCQkJeworCQkJCQkJcm9vdF9hbmNlc3Rvcl9wdWJsaXNoZWRfdmlhX2FueSA9IHRydWU7 CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCiAJCS8qCiAJCSAqIEJ1 aWxkIHB1YmxpY2F0aW9uIGNhY2hlLiBXZSBjYW4ndCB1c2Ugb25lIHByb3ZpZGVkIGJ5IHJlbGNh Y2hlIGFzCiAJCSAqIHJlbGNhY2hlIGNvbnNpZGVycyBhbGwgcHVibGljYXRpb25zIHRoYXQgdGhl IGdpdmVuIHJlbGF0aW9uIGlzIGluLApAQCAtMjIwMiwyMCArMjMzMSw0MyBAQCBnZXRfcmVsX3N5 bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCS8qCiAJ CQkgKiBJZiB0aGlzIGlzIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24sIHBpY2sgdGhlIHBh cnRpdGlvbgogCQkJICogcm9vdCBhbmQgc2V0IHRoZSBhbmNlc3RvciBsZXZlbCBhY2NvcmRpbmds eS4KKwkJCSAqCisJCQkgKiBJZiB0aGlzIGlzIGEgRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24g YW5kIGl0IGhhcyBhbiBFWENFUFQKKwkJCSAqIFRBQkxFIGxpc3Q6CisJCQkgKgorCQkJICogSWYg dGhlIHJlbGF0aW9uIGlzIGEgcGFydGl0aW9uLCBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50CisJ CQkgKiByZWxhdGlvbiBvciBhbnkgb2YgdGhlIGFuY2VzdG9ycyBpcyBpbmNsdWRlZCBpbiB0aGUg RVhDRVBUCisJCQkgKiBUQUJMRSBsaXN0LiBJZiBzbywgZG8gbm90IHB1Ymxpc2ggdGhlIGNoYW5n ZS4gVGhpcyBpcyBkb25lCisJCQkgKiBpcnJlc3BlY3RpdmUgb2YgcHVidmlhcm9vdCBzZXR0aW5n LgorCQkJICoKKwkJCSAqICJEbyBub3QgcHVibGlzaCB0aGUgY2hhbmdlIiBpcyBhY2hpZXZlZCBi eSBrZWVwaW5nIHRoZSB2YXJpYWJsZQorCQkJICogInB1Ymxpc2giIHNldCB0byBmYWxzZS4gQW5k IGV2ZW50dWFsbHksIGVudHJ5LT5wdWJhY3Rpb25zIHdpbGwKKwkJCSAqIHJlbWFpbiBhbGwgZmFs c2UgZm9yIHRoaXMgcHVibGljYXRpb24uCiAJCQkgKi8KIAkJCWlmIChwdWItPmFsbHRhYmxlcykK IAkJCXsKLQkJCQlwdWJsaXNoID0gdHJ1ZTsKLQkJCQlpZiAocHViLT5wdWJ2aWFyb290ICYmIGFt X3BhcnRpdGlvbikKKwkJCQlMaXN0CSAgICpleGNlcHRwdWJpZHMgPSBOSUw7CisKKwkJCQlpZiAo YW1fcGFydGl0aW9uKQogCQkJCXsKLQkJCQkJTGlzdAkgICAqYW5jZXN0b3JzID0gZ2V0X3BhcnRp dGlvbl9hbmNlc3RvcnMocmVsaWQpOworCQkJCQlmb3JlYWNoX29pZChhbmNlc3RvciwgYW5jZXN0 b3JzKQorCQkJCQkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoYW5jZXN0b3IsIE5VTEwsICZleGNl cHRwdWJpZHMpOwogCi0JCQkJCXB1Yl9yZWxpZCA9IGxsYXN0X29pZChhbmNlc3RvcnMpOwotCQkJ CQlhbmNlc3Rvcl9sZXZlbCA9IGxpc3RfbGVuZ3RoKGFuY2VzdG9ycyk7CisJCQkJCWlmIChwdWIt PnB1YnZpYXJvb3QpCisJCQkJCXsKKwkJCQkJCXB1Yl9yZWxpZCA9IHJvb3RfYW5jZXN0b3I7CisJ CQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxpc3RfbGVuZ3RoKGFuY2VzdG9ycyk7CisJCQkJCX0KIAkJ CQl9Ci0JCQl9CiAKLQkJCWlmICghcHVibGlzaCkKKwkJCQlHZXRSZWxhdGlvblB1YmxpY2F0aW9u cyhyZWxpZCwgTlVMTCwgJmV4Y2VwdHB1Ymlkcyk7CisKKwkJCQlpZiAoIWxpc3RfbWVtYmVyX29p ZChleGNlcHRwdWJpZHMsIHB1Yi0+b2lkKSkKKwkJCQkJcHVibGlzaCA9IHRydWU7CisKKwkJCQls aXN0X2ZyZWUoZXhjZXB0cHViaWRzKTsKKwkJCX0KKwkJCWVsc2UgaWYgKCFwdWJsaXNoKQogCQkJ ewogCQkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZhbHNlOwogCkBAIC0yMjI5LDE5ICsy MzgxLDMyIEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9u IHJlbGF0aW9uKQogCQkJCXsKIAkJCQkJT2lkCQkJYW5jZXN0b3I7CiAJCQkJCWludAkJCWxldmVs OwotCQkJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxp ZCk7Ci0KLQkJCQkJYW5jZXN0b3IgPSBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKHB1 Yi0+b2lkLAotCQkJCQkJCQkJCQkJCQkJICAgYW5jZXN0b3JzLAotCQkJCQkJCQkJCQkJCQkJICAg JmxldmVsKTsKIAotCQkJCQlpZiAoYW5jZXN0b3IgIT0gSW52YWxpZE9pZCkKKwkJCQkJaWYgKHJv b3RfYW5jZXN0b3JfcHVibGlzaGVkX3ZpYV9hbnkpCiAJCQkJCXsKLQkJCQkJCWFuY2VzdG9yX3B1 Ymxpc2hlZCA9IHRydWU7Ci0JCQkJCQlpZiAocHViLT5wdWJ2aWFyb290KQorCQkJCQkJLyoKKwkJ CQkJCSAqIFRoZSByb290IGFuY2VzdG9yIGlzIGFscmVhZHkga25vd24gdG8gYmUgcHVibGlzaGVk CisJCQkJCQkgKiB2aWEgYSAiRk9SIEFMTCBUQUJMRVMgRVhDRVBUIiBwdWJsaWNhdGlvbi4gUHVi bGlzaAorCQkJCQkJICogdmlhIHRoZSByb290IHRhYmxlIGlmIGl0IGlzIGV4cGxpY2l0bHkgaW5j bHVkZWQsIG9yCisJCQkJCQkgKiBpZiBpdHMgc2NoZW1hIGlzIHBhcnQgb2YgdGhlIHB1YmxpY2F0 aW9uLgorCQkJCQkJICovCisJCQkJCQlwdWJfcmVsaWQgPSByb290X2FuY2VzdG9yOworCQkJCQkJ YW5jZXN0b3JfbGV2ZWwgPSBsaXN0X2xlbmd0aChhbmNlc3RvcnMpOworCQkJCQl9CisJCQkJCWVs c2UKKwkJCQkJeworCQkJCQkJYW5jZXN0b3IgPSBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0 aW9uKHB1Yi0+b2lkLAorCQkJCQkJCQkJCQkJCQkJCSAgIGFuY2VzdG9ycywKKwkJCQkJCQkJCQkJ CQkJCQkgICAmbGV2ZWwpOworCisJCQkJCQlpZiAoYW5jZXN0b3IgIT0gSW52YWxpZE9pZCkKIAkJ CQkJCXsKLQkJCQkJCQlwdWJfcmVsaWQgPSBhbmNlc3RvcjsKLQkJCQkJCQlhbmNlc3Rvcl9sZXZl bCA9IGxldmVsOworCQkJCQkJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IHRydWU7CisJCQkJCQkJaWYg KHB1Yi0+cHVidmlhcm9vdCkKKwkJCQkJCQl7CisJCQkJCQkJCXB1Yl9yZWxpZCA9IGFuY2VzdG9y OworCQkJCQkJCQlhbmNlc3Rvcl9sZXZlbCA9IGxldmVsOworCQkJCQkJCX0KIAkJCQkJCX0KIAkJ CQkJfQogCQkJCX0KQEAgLTIyNTksNiArMjQyNCw5IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091 dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJICogRG9uJ3QgcHVibGlzaCBj aGFuZ2VzIGZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIGJlY2F1c2UKIAkJCSAqIHB1Ymxpc2hpbmcg dGhvc2Ugb2YgaXRzIHBhcnRpdGlvbnMgc3VmZmljZXMsIHVubGVzcyBwYXJ0aXRpb24KIAkJCSAq IGNoYW5nZXMgd29uJ3QgYmUgcHVibGlzaGVkIGR1ZSB0byBwdWJ2aWFyb290IGJlaW5nIHNldC4K KwkJCSAqCisJCQkgKiBJZiB0aGUgcmVsYXRpb24gaXMgcGFydCBvZiBFWENFUFQgVEFCTEUgbGlz dCBvZiBhIHB1YmxpY2F0aW9uLAorCQkJICogdGhlICdwdWJsaXNoJyB2YXJpYWJsZSBpcyBhbHJl YWR5IHNldCB0byBmYWxzZS4KIAkJCSAqLwogCQkJaWYgKHB1Ymxpc2ggJiYKIAkJCQkocmVsa2lu ZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFIHx8IHB1Yi0+cHVidmlhcm9vdCkpCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCA2YjYzNGM5ZmZmMS4uZGMwMjFkYmI2Y2QgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTc4OCw3ICs1Nzg4LDkgQEAgUmVsYXRp b25HZXRFeGNsdXNpb25JbmZvKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiB2b2lkCiBSZWxhdGlv bkJ1aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2Mg KnB1YmRlc2MpCiB7Ci0JTGlzdAkgICAqcHVib2lkczsKKwlMaXN0CSAgICpwdWJvaWRzID0gTklM OworCUxpc3QJICAgKmV4Y2VwdHB1Ym9pZHMgPSBOSUw7CisJTGlzdAkgICAqYWxsdGFibGVzcHVi b2lkczsKIAlMaXN0Q2VsbCAgICpsYzsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlPaWQJCQlz Y2hlbWFpZDsKQEAgLTU4MjYsNyArNTgyOCw3IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRl c2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAlwdWJkZXNj LT5nZW5jb2xzX3ZhbGlkX2Zvcl9kZWxldGUgPSB0cnVlOwogCiAJLyogRmV0Y2ggdGhlIHB1Ymxp Y2F0aW9uIG1lbWJlcnNoaXAgaW5mby4gKi8KLQlwdWJvaWRzID0gR2V0UmVsYXRpb25QdWJsaWNh dGlvbnMocmVsaWQpOworCUdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbGlkLCAmcHVib2lkcywg JmV4Y2VwdHB1Ym9pZHMpOwogCXNjaGVtYWlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRp b24pOwogCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldFNjaGVt YVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOwogCkBAIC01ODM4LDE2ICs1ODQwLDI1IEBAIFJlbGF0 aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVz YyAqcHViZGVzYykKIAkJZm9yZWFjaChsYywgYW5jZXN0b3JzKQogCQl7CiAJCQlPaWQJCQlhbmNl c3RvciA9IGxmaXJzdF9vaWQobGMpOworCQkJTGlzdAkgICAqYW5jZXN0b3JfcHVib2lkcyA9IE5J TDsKKwkJCUxpc3QJICAgKmFuY2VzdG9yX2V4Y2VwdHB1Ym9pZHMgPSBOSUw7CiAKLQkJCXB1Ym9p ZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCi0JCQkJCQkJCQkJCSBHZXRSZWxh dGlvblB1YmxpY2F0aW9ucyhhbmNlc3RvcikpOworCQkJR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMo YW5jZXN0b3IsICZhbmNlc3Rvcl9wdWJvaWRzLAorCQkJCQkJCQkJJmFuY2VzdG9yX2V4Y2VwdHB1 Ym9pZHMpOworCisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBh bmNlc3Rvcl9wdWJvaWRzKTsKIAkJCXNjaGVtYWlkID0gZ2V0X3JlbF9uYW1lc3BhY2UoYW5jZXN0 b3IpOwogCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKIAkJCQkJ CQkJCQkJIEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOworCQkJZXhjZXB0cHVib2lk cyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQoZXhjZXB0cHVib2lkcywKKwkJCQkJCQkJCQkJCSAg IGFuY2VzdG9yX2V4Y2VwdHB1Ym9pZHMpOwogCQl9CiAJfQotCXB1Ym9pZHMgPSBsaXN0X2NvbmNh dF91bmlxdWVfb2lkKHB1Ym9pZHMsIEdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucygpKTsKIAorCWFs bHRhYmxlc3B1Ym9pZHMgPSBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnMoKTsKKwlwdWJvaWRzID0g bGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLAorCQkJCQkJCQkJIGxpc3RfZGlmZmVyZW5j ZV9vaWQoYWxsdGFibGVzcHVib2lkcywKKwkJCQkJCQkJCQkJCQkJIGV4Y2VwdHB1Ym9pZHMpKTsK IAlmb3JlYWNoKGxjLCBwdWJvaWRzKQogCXsKIAkJT2lkCQkJcHViaWQgPSBsZmlyc3Rfb2lkKGxj KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCmluZGV4IDJjMzc1NGQwMjBmLi5iOGY5Nzg4NjMyYSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j CkBAIC00NjM1LDkgKzQ2MzUsNTUgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQpCiAJ CQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwog CQlwdWJpbmZvW2ldLnB1YmdlbmNvbHNfdHlwZSA9CiAJCQkqKFBRZ2V0dmFsdWUocmVzLCBpLCBp X3B1YmdlbmNvbHMpKTsKKwkJcHViaW5mb1tpXS5leGNlcHRfdGFibGVzID0gKFNpbXBsZVB0ckxp c3QpCisJCXsKKwkJCU5VTEwsIE5VTEwKKwkJfTsKIAogCQkvKiBEZWNpZGUgd2hldGhlciB3ZSB3 YW50IHRvIGR1bXAgaXQgKi8KIAkJc2VsZWN0RHVtcGFibGVPYmplY3QoJihwdWJpbmZvW2ldLmRv YmopLCBmb3V0KTsKKworCQkvKgorCQkgKiBHZXQgdGhlIGxpc3Qgb2YgdGFibGVzIGZvciBwdWJs aWNhdGlvbnMgc3BlY2lmaWVkIHdpdGggdGhlIEVYQ0VQVAorCQkgKiBUQUJMRSBjbGF1c2UuIFRo aXMgaXMgaW50cm9kdWNlZCBpbiBQb3N0Z3JlU1FMIDE5LgorCQkgKgorCQkgKiBFWENFUFQgVEFC TEVTIGlzIHByb2Nlc3NlZCBoZXJlIGFuZCBvdXRwdXQgZGlyZWN0bHkgYnkKKwkJICogZHVtcFB1 YmxpY2F0aW9uKCkuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBhcHByb2FjaCB1c2VkIGluCisJCSAq IGR1bXBQdWJsaWNhdGlvblRhYmxlKCkgYW5kIGR1bXBQdWJsaWNhdGlvbk5hbWVzcGFjZSgpLCBz aW5jZSB0aGF0CisJCSAqIGFwcHJvYWNoIHdvdWxkIHJlcXVpcmUgRVhDRVBUIFRBQkxFIHN1cHBv cnQgZm9yIEFMVEVSIFBVQkxJQ0FUSU9OLAorCQkgKiB3aGljaCBpcyBub3QgY3VycmVudGx5IHN1 cHBvcnRlZC4KKwkJICovCisJCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE5MDAwMCkKKwkJ eworCQkJaW50CQkJbnRibHM7CisJCQlQR3Jlc3VsdCAgICpyZXNfdGJsczsKKworCQkJcmVzZXRQ UUV4cEJ1ZmZlcihxdWVyeSk7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKKwkJCQkJCQkg ICJTRUxFQ1QgcHJyZWxpZFxuIgorCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNh dGlvbl9yZWxcbiIKKwkJCQkJCQkgICJXSEVSRSBwcnB1YmlkID0gJXUgYW5kIHByZXhjZXB0IiwK KwkJCQkJCQkgIHB1YmluZm9baV0uZG9iai5jYXRJZC5vaWQpOworCisJCQlyZXNfdGJscyA9IEV4 ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVTX09LKTsKKworCQkJ bnRibHMgPSBQUW50dXBsZXMocmVzX3RibHMpOworCisJCQlmb3IgKGludCBqID0gMDsgaiA8IG50 YmxzOyBqKyspCisJCQl7CisJCQkJT2lkCQkJcHJyZWxpZDsKKwkJCQlUYWJsZUluZm8gICp0Ymlu Zm87CisKKwkJCQlwcnJlbGlkID0gYXRvb2lkKFBRZ2V0dmFsdWUocmVzX3RibHMsIGosIDApKTsK KworCQkJCXRiaW5mbyA9IGZpbmRUYWJsZUJ5T2lkKHBycmVsaWQpOworCisJCQkJaWYgKHRiaW5m byAhPSBOVUxMKQorCQkJCQlzaW1wbGVfcHRyX2xpc3RfYXBwZW5kKCZwdWJpbmZvW2ldLmV4Y2Vw dF90YWJsZXMsIHRiaW5mbyk7CisJCQl9CisKKwkJCVBRY2xlYXIocmVzX3RibHMpOworCQl9CiAJ fQogCiBjbGVhbnVwOgpAQCAtNDY3Nyw3ICs0NzIzLDI1IEBAIGR1bXBQdWJsaWNhdGlvbihBcmNo aXZlICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJaWYgKHB1YmluZm8t PnB1YmFsbHRhYmxlcyAmJiBwdWJpbmZvLT5wdWJhbGxzZXF1ZW5jZXMpCiAJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LCAiIEZPUiBBTEwgVEFCTEVTLCBBTEwgU0VRVUVOQ0VTIik7CiAJZWxz ZSBpZiAocHViaW5mby0+cHViYWxsdGFibGVzKQorCXsKKwkJaW50CQkJbl9leGNsdWRlZCA9IDA7 CisKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBUQUJMRVMiKTsKKwor CQkvKiBJbmNsdWRlIEVYQ0VQVCBUQUJMRSBjbGF1c2UgaWYgdGhlcmUgYXJlIGV4Y2VwdF90YWJs ZXMuICovCisJCWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmNlbGwgPSBwdWJpbmZvLT5leGNlcHRf dGFibGVzLmhlYWQ7IGNlbGw7IGNlbGwgPSBjZWxsLT5uZXh0KQorCQl7CisJCQlUYWJsZUluZm8g ICp0YmluZm8gPSAoVGFibGVJbmZvICopIGNlbGwtPnB0cjsKKworCQkJaWYgKCsrbl9leGNsdWRl ZCA9PSAxKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIEVYQ0VQVCBUQUJMRSAo Iik7CisJCQllbHNlCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCQkJ YXBwZW5kUFFFeHBCdWZmZXIocXVlcnksICJPTkxZICVzIiwgZm10UXVhbGlmaWVkRHVtcGFibGUo dGJpbmZvKSk7CisJCX0KKwkJaWYgKG5fZXhjbHVkZWQgPiAwKQorCQkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocXVlcnksICIpIik7CisJfQogCWVsc2UgaWYgKHB1YmluZm8tPnB1YmFsbHNlcXVlbmNl cykKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgRk9SIEFMTCBTRVFVRU5DRVMiKTsK IApAQCAtNDg1Nyw2ICs0OTIxLDcgQEAgZ2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91 dCwgVGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAogCS8qIENvbGxlY3QgYWxs IHB1YmxpY2F0aW9uIG1lbWJlcnNoaXAgaW5mby4gKi8KIAlpZiAoZm91dC0+cmVtb3RlVmVyc2lv biA+PSAxNTAwMDApCisJewogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkg IlNFTEVDVCB0YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBwcnJlbGlkLCAiCiAJCQkJCQkJICJwZ19j YXRhbG9nLnBnX2dldF9leHByKHBycXVhbCwgcHJyZWxpZCkgQVMgcHJyZWxxdWFsLCAiCkBAIC00 ODY5LDYgKzQ5MzQsOSBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJs ZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCQkJCQkJCSAiICAgICAgV0hFUkUgYXR0 cmVsaWQgPSBwci5wcnJlbGlkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKVxuIgogCQkJCQkJCSAi ICBFTFNFIE5VTEwgRU5EKSBwcmF0dHJzICIKIAkJCQkJCQkgIkZST00gcGdfY2F0YWxvZy5wZ19w dWJsaWNhdGlvbl9yZWwgcHIiKTsKKwkJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTkwMDAw KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIgV0hFUkUgTk9UIHByLnByZXhjZXB0 Iik7CisJfQogCWVsc2UKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJT RUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJyZWxpZCwgIgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXgg NGM0YjE0ZTVmYzcuLmQxNDFlYjY2ZDE3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTY3Niw2ICs2NzYsNyBA QCB0eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHVidHJ1bmNhdGU7CiAJ Ym9vbAkJcHVidmlhcm9vdDsKIAlQdWJsaXNoR2VuY29sc1R5cGUgcHViZ2VuY29sc190eXBlOwor CVNpbXBsZVB0ckxpc3QgZXhjZXB0X3RhYmxlczsKIH0gUHVibGljYXRpb25JbmZvOwogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmluL3Bn X2R1bXAvdC8wMDJfcGdfZHVtcC5wbAppbmRleCBhOGRjYzJiNWM3NS4uNTRlYWU1NzdjOTEgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC0zMTcwLDYgKzMxNzAsMzYgQEAgbXkgJXRlc3Rz ID0gKAogCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwK IAl9LAogCisJJ0NSRUFURSBQVUJMSUNBVElPTiBwdWI4JyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9 PiA1MCwKKwkJY3JlYXRlX3NxbCA9PgorCQkgICdDUkVBVEUgUFVCTElDQVRJT04gcHViOCBGT1Ig QUxMIFRBQkxFUyBFWENFUFQgKGR1bXBfdGVzdC50ZXN0X3RhYmxlKTsnLAorCQlyZWdleHAgPT4g cXIvXgorCQkJXFFDUkVBVEUgUFVCTElDQVRJT04gcHViOCBGT1IgQUxMIFRBQkxFUyBFWENFUFQg VEFCTEUgKE9OTFkgZHVtcF90ZXN0LnRlc3RfdGFibGUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0 LCB1cGRhdGUsIGRlbGV0ZSwgdHJ1bmNhdGUnKTtcRQorCQkJL3htLAorCQlsaWtlID0+IHsgJWZ1 bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKKwl9LAorCisJJ0NSRUFURSBQVUJM SUNBVElPTiBwdWI5JyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA1MCwKKwkJY3JlYXRlX3NxbCA9 PgorCQkgICdDUkVBVEUgUFVCTElDQVRJT04gcHViOSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFC TEUgKGR1bXBfdGVzdC50ZXN0X3RhYmxlLCBkdW1wX3Rlc3QudGVzdF9zZWNvbmRfdGFibGUpOycs CisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUNSRUFURSBQVUJMSUNBVElPTiBwdWI5IEZPUiBBTEwg VEFCTEVTIEVYQ0VQVCBUQUJMRSAoT05MWSBkdW1wX3Rlc3QudGVzdF90YWJsZSwgT05MWSBkdW1w X3Rlc3QudGVzdF9zZWNvbmRfdGFibGUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUs IGRlbGV0ZSwgdHJ1bmNhdGUnKTtcRQorCQkJL3htLAorCQlsaWtlID0+IHsgJWZ1bGxfcnVucywg c2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKKwl9LAorCisJJ0NSRUFURSBQVUJMSUNBVElPTiBw dWIxMCcgPT4geworCQljcmVhdGVfb3JkZXIgPT4gOTIsCisJCWNyZWF0ZV9zcWwgPT4KKwkJICAn Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEwIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAoZHVt cF90ZXN0LnRlc3RfaW5oZXJpdGFuY2VfcGFyZW50KTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJ XFFDUkVBVEUgUFVCTElDQVRJT04gcHViMTAgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFIChP TkxZIGR1bXBfdGVzdC50ZXN0X2luaGVyaXRhbmNlX3BhcmVudCwgT05MWSBkdW1wX3Rlc3QudGVz dF9pbmhlcml0YW5jZV9jaGlsZCkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVs ZXRlLCB0cnVuY2F0ZScpO1xFCisJCQkveG0sCisJCWxpa2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0 aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAorCX0sCisKIAknQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIx JyA9PiB7CiAJCWNyZWF0ZV9vcmRlciA9PiA1MCwKIAkJY3JlYXRlX3NxbCA9PiAnQ1JFQVRFIFNV QlNDUklQVElPTiBzdWIxCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3Ny Yy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDM1ODRjNGUxNDI4Li4xYmZlYzBiZDNlZiAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMKQEAgLTMwNzMsMTcgKzMwNzMsMzQgQEAgZGVzY3JpYmVPbmVUYWJsZURldGFpbHMoY29u c3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkJCQkJICAiICAgICAgICAgIFdIRVJFIGF0dHJlbGlk ID0gcHIucHJyZWxpZCBBTkQgYXR0bnVtID0gcHJhdHRyc1tzXSlcbiIKIAkJCQkJCQkJICAiICAg ICAgICBFTFNFIE5VTEwgRU5EKSAiCiAJCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJs aWNhdGlvbiBwXG4iCi0JCQkJCQkJCSAgIiAgICAgSk9JTiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0 aW9uX3JlbCBwciBPTiBwLm9pZCA9IHByLnBycHViaWRcbiIKLQkJCQkJCQkJICAiICAgICBKT0lO IHBnX2NhdGFsb2cucGdfY2xhc3MgYyBPTiBjLm9pZCA9IHByLnBycmVsaWRcbiIKLQkJCQkJCQkJ ICAiV0hFUkUgcHIucHJyZWxpZCA9ICclcydcbiIKKwkJCQkJCQkJICAiCQlKT0lOIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb25fcmVsIHByIE9OIHAub2lkID0gcHIucHJwdWJpZFxuIgorCQkJCQkJ CQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMub2lkID0gcHIucHJyZWxpZFxu IgorCQkJCQkJCQkgICJXSEVSRSBwci5wcnJlbGlkID0gJyVzJ1xuIiwKKwkJCQkJCQkJICBvaWQs IG9pZCwgb2lkKTsKKworCQkJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE5MDAwMCkKKwkJCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwgIiBBTkQgTk9UIHByLnByZXhjZXB0XG4iKTsKKworCQkJ CWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJCSAgIlVOSU9OXG4iCiAJCQkJCQkJCSAg IlNFTEVDVCBwdWJuYW1lXG4iCi0JCQkJCQkJCSAgIiAgICAgLCBOVUxMXG4iCi0JCQkJCQkJCSAg IiAgICAgLCBOVUxMXG4iCisJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCisJCQkJCQkJCSAgIgkJLCBO VUxMXG4iCiAJCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCi0J CQkJCQkJCSAgIldIRVJFIHAucHViYWxsdGFibGVzIEFORCBwZ19jYXRhbG9nLnBnX3JlbGF0aW9u X2lzX3B1Ymxpc2hhYmxlKCclcycpXG4iCi0JCQkJCQkJCSAgIk9SREVSIEJZIDE7IiwKLQkJCQkJ CQkJICBvaWQsIG9pZCwgb2lkLCBvaWQpOworCQkJCQkJCQkgICJXSEVSRSBwLnB1YmFsbHRhYmxl cyBBTkQgcGdfY2F0YWxvZy5wZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZSgnJXMnKVxuIiwKKwkJ CQkJCQkJICBvaWQpOworCisJCQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTkwMDAwKQorCQkJCQlh cHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJCQkJICAiICAgICBBTkQgTk9UIEVYSVNUUyAo XG4iCisJCQkJCQkJCQkgICIJCVNFTEVDVCAxXG4iCisJCQkJCQkJCQkgICIJCUZST00gcGdfY2F0 YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHJcbiIKKwkJCQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRh bG9nLnBnX2NsYXNzIHBjXG4iCisJCQkJCQkJCQkgICIJCU9OIHByLnBycmVsaWQgPSBwYy5vaWRc biIKKwkJCQkJCQkJCSAgIgkJV0hFUkUgcHIucHJyZWxpZCA9ICclcycgQU5EIHByLnBycHViaWQg PSBwLm9pZClcbiIsCisJCQkJCQkJCQkgIG9pZCk7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmYnVmLCAiT1JERVIgQlkgMTsiKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTMxMzQsNiAr MzE1MSwzNSBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1l LAogCQkJUFFjbGVhcihyZXN1bHQpOwogCQl9CiAKKwkJLyogUHJpbnQgcHVibGljYXRpb25zIHRo YXQgdGhlIHRhYmxlIGlzIGV4cGxpY2l0bHkgZXhjbHVkZWQgZnJvbSAqLworCQlpZiAocHNldC5z dmVyc2lvbiA+PSAxOTAwMDApCisJCXsKKwkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJ CQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKKwkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVi bGljYXRpb24gcFxuIgorCQkJCQkJCSAgIkpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9y ZWwgcHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCisJCQkJCQkJICAiV0hFUkUgcHIucHJyZWxp ZCA9ICclcydcbiBBTkQgcHIucHJleGNlcHRcbiIKKwkJCQkJCQkgICJPUkRFUiBCWSAxOyIsIG9p ZCk7CisKKwkJCXJlc3VsdCA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwkJCWlmICghcmVzdWx0KQor CQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJZWxzZQorCQkJCXR1cGxlcyA9IFBRbnR1cGxlcyhy ZXN1bHQpOworCisJCQlpZiAodHVwbGVzID4gMCkKKwkJCQlwcmludFRhYmxlQWRkRm9vdGVyKCZj b250LCBfKCJFeGNlcHQgUHVibGljYXRpb25zOiIpKTsKKworCQkJLyogTWlnaHQgYmUgYW4gZW1w dHkgc2V0IC0gdGhhdCdzIG9rICovCisJCQlmb3IgKGkgPSAwOyBpIDwgdHVwbGVzOyBpKyspCisJ CQl7CisJCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwgIiAgICBcIiVzXCIiLCBQUWdldHZhbHVl KHJlc3VsdCwgaSwgMCkpOworCisJCQkJcHJpbnRUYWJsZUFkZEZvb3RlcigmY29udCwgYnVmLmRh dGEpOworCQkJfQorCQkJUFFjbGVhcihyZXN1bHQpOworCQl9CisKIAkJLyoKIAkJICogSWYgdmVy Ym9zZSwgcHJpbnQgTk9UIE5VTEwgY29uc3RyYWludHMuCiAJCSAqLwpAQCAtNjc1Myw4ICs2Nzk5 LDEyIEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQkJCQkJ ICAiICAgICBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwclxuIgogCQkJCQkJCSAgIldI RVJFIGMucmVsbmFtZXNwYWNlID0gbi5vaWRcbiIKIAkJCQkJCQkgICIgIEFORCBjLm9pZCA9IHBy LnBycmVsaWRcbiIKLQkJCQkJCQkgICIgIEFORCBwci5wcnB1YmlkID0gJyVzJ1xuIgotCQkJCQkJ CSAgIk9SREVSIEJZIDEsMiIsIHB1YmlkKTsKKwkJCQkJCQkgICIgIEFORCBwci5wcnB1YmlkID0g JyVzJ1xuIiwgcHViaWQpOworCisJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDApCisJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIiAgQU5EIE5PVCBwci5wcmV4Y2VwdFxuIik7CisKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICJPUkRFUiBCWSAxLDIiKTsKIAkJCWlmICghYWRkRm9v dGVyVG9QdWJsaWNhdGlvbkRlc2MoJmJ1ZiwgXygiVGFibGVzOiIpLCBmYWxzZSwgJmNvbnQpKQog CQkJCWdvdG8gZXJyb3JfcmV0dXJuOwogCkBAIC02NzcyLDYgKzY4MjIsMjMgQEAgZGVzY3JpYmVQ dWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCQkJZ290byBlcnJvcl9yZXR1cm47 CiAJCQl9CiAJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxOTAwMDAp CisJCQl7CisJCQkJLyogR2V0IHRoZSBleGNsdWRlZCB0YWJsZXMgZm9yIHRoZSBzcGVjaWZpZWQg cHVibGljYXRpb24gKi8KKwkJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJCQkgICJT RUxFQ1QgY29uY2F0KGMucmVsbmFtZXNwYWNlOjpyZWduYW1lc3BhY2UsICcuJywgYy5yZWxuYW1l KVxuIgorCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuIgorCQkJCQkJCQkg ICIgICAgIEpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIgT04gYy5vaWQgPSBw ci5wcnJlbGlkXG4iCisJCQkJCQkJCSAgIldIRVJFIHByLnBycHViaWQgPSAnJXMnXG4iCisJCQkJ CQkJCSAgIiAgQU5EIHByLnByZXhjZXB0XG4iCisJCQkJCQkJCSAgIk9SREVSIEJZIDEiLCBwdWJp ZCk7CisJCQkJaWYgKCFhZGRGb290ZXJUb1B1YmxpY2F0aW9uRGVzYygmYnVmLCBfKCJFeGNlcHQg dGFibGVzOiIpLAorCQkJCQkJCQkJCQkJdHJ1ZSwgJmNvbnQpKQorCQkJCQlnb3RvIGVycm9yX3Jl dHVybjsKKwkJCX0KKwkJfQogCiAJCXByaW50VGFibGUoJmNvbnQsIHBzZXQucXVlcnlGb3V0LCBm YWxzZSwgcHNldC5sb2dmaWxlKTsKIAkJcHJpbnRUYWJsZUNsZWFudXAoJmNvbnQpOwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1j b21wbGV0ZS5pbi5jCmluZGV4IDhiOTFiYzAwMDYyLi4zOTQwNGVhMGY2OSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisrKyBiL3NyYy9iaW4vcHNxbC90YWItY29t cGxldGUuaW4uYwpAQCAtMzY2OSw3ICszNjY5LDE3IEBAIG1hdGNoX3ByZXZpb3VzX3dvcmRzKGlu dCBwYXR0ZXJuX2lkLAogCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIs IE1hdGNoQW55LCAiRk9SIiwgIkFMTCIpKQogCQlDT01QTEVURV9XSVRIKCJUQUJMRVMiLCAiU0VR VUVOQ0VTIik7CiAJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0 Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRBQkxFUyIpKQotCQlDT01QTEVURV9XSVRIKCJXSVRIICgi KTsKKwkJQ09NUExFVEVfV0lUSCgiRVhDRVBUIFRBQkxFICgiLCAiV0lUSCAoIik7CisJZWxzZSBp ZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxM IiwgIlRBQkxFUyIsICJFWENFUFQiKSkKKwkJQ09NUExFVEVfV0lUSCgiVEFCTEUgKCIpOworCWVs c2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAiRk9SIiwg IkFMTCIsICJUQUJMRVMiLCAiRVhDRVBUIiwgIlRBQkxFIikpCisJCUNPTVBMRVRFX1dJVEgoIigi KTsKKwllbHNlIGlmIChNYXRjaGVzKCJDUkVBVEUiLCAiUFVCTElDQVRJT04iLCBNYXRjaEFueSwg IkZPUiIsICJBTEwiLCAiVEFCTEVTIiwgIkVYQ0VQVCIsICJUQUJMRSIsICIoIikpCisJCUNPTVBM RVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX3RhYmxlcyk7CisJZWxzZSBp ZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxM IiwgIlRBQkxFUyIsICJFWENFUFQiLCAiVEFCTEUiLCAiKCIsIE1hdGNoQW55TikgJiYgZW5kc193 aXRoKHByZXZfd2QsICcsJykpCisJCUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zv cl9saXN0X29mX3RhYmxlcyk7CisJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FU SU9OIiwgTWF0Y2hBbnksICJGT1IiLCAiQUxMIiwgIlRBQkxFUyIsICJFWENFUFQiLCAiVEFCTEUi LCAiKCIsIE1hdGNoQW55TikgJiYgIWVuZHNfd2l0aChwcmV2X3dkLCAnLCcpKQorCQlDT01QTEVU RV9XSVRIKCIpIik7CiAJZWxzZSBpZiAoTWF0Y2hlcygiQ1JFQVRFIiwgIlBVQkxJQ0FUSU9OIiwg TWF0Y2hBbnksICJGT1IiLCAiVEFCTEVTIikpCiAJCUNPTVBMRVRFX1dJVEgoIklOIFNDSEVNQSIp OwogCWVsc2UgaWYgKE1hdGNoZXMoIkNSRUFURSIsICJQVUJMSUNBVElPTiIsIE1hdGNoQW55LCAi Rk9SIiwgIlRBQkxFIiwgTWF0Y2hBbnkpICYmICFlbmRzX3dpdGgocHJldl93ZCwgJywnKSkKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDgzZjY1MDFkZjM4Li5iNmRhMjAwZmZlZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMjMzNiw2ICsxMjMzNiwxMyBAQAogICBwcm9uYW1lID0+ ICdwZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZScsIHByb3ZvbGF0aWxlID0+ICdzJywKICAgcHJv cmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdyZWdjbGFzcycsCiAgIHByb3NyYyA9 PiAncGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUnIH0sCit7IG9pZCA9PiAnOTAwMicsIGRlc2Ny ID0+ICdnZXQgZWZmZWN0aXZlIHRhYmxlcyBmb3IgcHVibGljYXRpb24nLAorICBwcm9uYW1lID0+ ICdwZ19nZXRfcHVibGljYXRpb25fZWZmZWN0aXZlX3RhYmxlcycsICBwcm9yb3dzID0+ICcxMDAw JywKKyAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3MnLAorICBwcm9yZXR0eXBl ID0+ICdyZWNvcmQnLCBwcm9hcmd0eXBlcyA9PiAnb2lkIF90ZXh0JywKKyAgcHJvYWxsYXJndHlw ZXMgPT4gJ3tvaWQsX3RleHQsdGV4dCx0ZXh0fScsIHByb2FyZ21vZGVzID0+ICd7aSxpLG8sb30n LAorICBwcm9hcmduYW1lcyA9PiAne3Jvb3RfcmVsaWQscHViX25hbWVzLHNjaGVtYW5hbWUscmVs bmFtZX0nLAorICBwcm9zcmMgPT4gJ3BnX2dldF9wdWJsaWNhdGlvbl9lZmZlY3RpdmVfdGFibGVz JyB9LAogCiAjIHJscwogeyBvaWQgPT4gJzMyOTgnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oCmluZGV4IDM2OGJlY2NhODk5Li5kOTg4MWE5YjYxMiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHVibGljYXRpb24uaApAQCAtMTQ2LDE0ICsxNDYsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVi bGljYXRpb25SZWxJbmZvCiAJUmVsYXRpb24JcmVsYXRpb247CiAJTm9kZQkgICAqd2hlcmVDbGF1 c2U7CiAJTGlzdAkgICAqY29sdW1uczsKKwlib29sCQlleGNlcHQ7CiB9IFB1YmxpY2F0aW9uUmVs SW5mbzsKIAogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpOwog ZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbkJ5TmFtZShjb25zdCBjaGFyICpwdWJu YW1lLCBib29sIG1pc3Npbmdfb2spOwotZXh0ZXJuIExpc3QgKkdldFJlbGF0aW9uUHVibGljYXRp b25zKE9pZCByZWxpZCk7CitleHRlcm4gYm9vbCBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQg cmVsaWQsIExpc3QgKipwdWJpZHMsIExpc3QgKipleGNlcHRfcHViaWRzKTsKIAogLyotLS0tLS0t LS0KLSAqIEV4cGVjdGVkIHZhbHVlcyBmb3IgcHViX3BhcnRvcHQgcGFyYW1ldGVyIG9mIEdldFB1 YmxpY2F0aW9uUmVsYXRpb25zKCksCisgKiBFeHBlY3RlZCB2YWx1ZXMgZm9yIHB1Yl9wYXJ0b3B0 IHBhcmFtZXRlciBvZgorICogR2V0UHVibGljYXRpb25JbmNsdWRlZFJlbGF0aW9ucygpLCBhbmQg R2V0QWxsUHVibGljYXRpb25FeGNsdWRlZFRhYmxlcygpLAogICogd2hpY2ggYWxsb3dzIGNhbGxl cnMgdG8gc3BlY2lmeSB3aGljaCBwYXJ0aXRpb25zIG9mIHBhcnRpdGlvbmVkIHRhYmxlcwogICog bWVudGlvbmVkIGluIHRoZSBwdWJsaWNhdGlvbiB0aGV5IGV4cGVjdCB0byBzZWUuCiAgKgpAQCAt MTY4LDkgKzE3MCwxMiBAQCB0eXBlZGVmIGVudW0gUHVibGljYXRpb25QYXJ0T3B0CiAJUFVCTElD QVRJT05fUEFSVF9BTEwsCiB9IFB1YmxpY2F0aW9uUGFydE9wdDsKIAotZXh0ZXJuIExpc3QgKkdl dFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9w YXJ0b3B0KTsKK2V4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvbkluY2x1ZGVkUmVsYXRpb25zKE9p ZCBwdWJpZCwKKwkJCQkJCQkJCQkJIFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCk7Citl eHRlcm4gTGlzdCAqR2V0QWxsUHVibGljYXRpb25FeGNsdWRlZFRhYmxlcyhPaWQgcHViaWQsCisJ CQkJCQkJCQkJCSBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpOwogZXh0ZXJuIExpc3Qg KkdldEFsbFRhYmxlc1B1YmxpY2F0aW9ucyh2b2lkKTsKLWV4dGVybiBMaXN0ICpHZXRBbGxQdWJs aWNhdGlvblJlbGF0aW9ucyhjaGFyIHJlbGtpbmQsIGJvb2wgcHVidmlhcm9vdCk7CitleHRlcm4g TGlzdCAqR2V0QWxsUHVibGljYXRpb25SZWxhdGlvbnMoUHVibGljYXRpb24gKnB1YiwgY2hhciBy ZWxraW5kKTsKIGV4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvblNjaGVtYXMoT2lkIHB1YmlkKTsK IGV4dGVybiBMaXN0ICpHZXRTY2hlbWFQdWJsaWNhdGlvbnMoT2lkIHNjaGVtYWlkKTsKIGV4dGVy biBMaXN0ICpHZXRTY2hlbWFQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgc2NoZW1haWQsCkBAIC0x ODUsNiArMTkwLDggQEAgZXh0ZXJuIE9pZAlHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9u KE9pZCBwdWJvaWQsIExpc3QgKmFuY2VzdG9ycywKIAogZXh0ZXJuIGJvb2wgaXNfcHVibGlzaGFi bGVfcmVsYXRpb24oUmVsYXRpb24gcmVsKTsKIGV4dGVybiBib29sIGlzX3NjaGVtYV9wdWJsaWNh dGlvbihPaWQgcHViaWQpOworZXh0ZXJuIGJvb2wgaXNfcmVsaWRfcHVibGlzaGVkX2FzX2V4Y2Vw dChPaWQgcmVsaWQsIE9pZCBwdWJpZCk7CitleHRlcm4gYm9vbCBwdWJsaWNhdGlvbl9oYXNfYW55 X2V4Y2VwdGlvbihPaWQgcHViaWQpOwogZXh0ZXJuIGJvb2wgY2hlY2tfYW5kX2ZldGNoX2NvbHVt bl9saXN0KFB1YmxpY2F0aW9uICpwdWIsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQlNZW1vcnlDb250 ZXh0IG1jeHQsIEJpdG1hcHNldCAqKmNvbHMpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgcHVibGlj YXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaAppbmRleCAzYTg3OTBlODQ4Mi4u ZTNjY2JhNWVjNzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRp b25fcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaApA QCAtMzEsNiArMzEsNyBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uX3JlbCw2MTA2LFB1YmxpY2F0 aW9uUmVsUmVsYXRpb25JZCkKIAlPaWQJCQlvaWQ7CQkJLyogb2lkICovCiAJT2lkCQkJcHJwdWJp ZCBCS0lfTE9PS1VQKHBnX3B1YmxpY2F0aW9uKTsgLyogT2lkIG9mIHRoZSBwdWJsaWNhdGlvbiAq LwogCU9pZAkJCXBycmVsaWQgQktJX0xPT0tVUChwZ19jbGFzcyk7CS8qIE9pZCBvZiB0aGUgcmVs YXRpb24gKi8KKwlib29sCQlwcmV4Y2VwdCBCS0lfREVGQVVMVChmKTsJLyogZXhjbHVkZSB0aGUg cmVsYXRpb24gKi8KIAogI2lmZGVmCUNBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVuZ3Ro IGZpZWxkcyBzdGFydCBoZXJlICovCiAJcGdfbm9kZV90cmVlIHBycXVhbDsJCS8qIHF1YWxpZmlj YXRpb25zICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggNjQ2ZDZjZWQ3NjMuLjUyODI0MjVi NGRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC00MzAwLDYgKzQzMDAsNyBAQCB0eXBlZGVm IHN0cnVjdCBQdWJsaWNhdGlvblRhYmxlCiAJUmFuZ2VWYXIgICAqcmVsYXRpb247CQkvKiByZWxh dGlvbiB0byBiZSBwdWJsaXNoZWQgKi8KIAlOb2RlCSAgICp3aGVyZUNsYXVzZTsJLyogcXVhbGlm aWNhdGlvbnMgKi8KIAlMaXN0CSAgICpjb2x1bW5zOwkJLyogTGlzdCBvZiBjb2x1bW5zIGluIGEg cHVibGljYXRpb24gdGFibGUgKi8KKwlib29sCQlleGNlcHQ7CQkJLyogZXhjbHVkZSB0aGUgcmVs YXRpb24gKi8KIH0gUHVibGljYXRpb25UYWJsZTsKIAogLyoKQEAgLTQzMDgsNiArNDMwOSw3IEBA IHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uVGFibGUKIHR5cGVkZWYgZW51bSBQdWJsaWNhdGlv bk9ialNwZWNUeXBlCiB7CiAJUFVCTElDQVRJT05PQkpfVEFCTEUsCQkvKiBBIHRhYmxlICovCisJ UFVCTElDQVRJT05PQkpfRVhDRVBUX1RBQkxFLAkvKiBBIHRhYmxlIHRvIGJlIGV4Y2x1ZGVkICov CiAJUFVCTElDQVRJT05PQkpfVEFCTEVTX0lOX1NDSEVNQSwJLyogQWxsIHRhYmxlcyBpbiBzY2hl bWEgKi8KIAlQVUJMSUNBVElPTk9CSl9UQUJMRVNfSU5fQ1VSX1NDSEVNQSwJLyogQWxsIHRhYmxl cyBpbiBmaXJzdCBlbGVtZW50IG9mCiAJCQkJCQkJCQkJCSAqIHNlYXJjaF9wYXRoICovCkBAIC00 MzM2LDYgKzQzMzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkFsbE9ialNwZWMKIHsK IAlOb2RlVGFnCQl0eXBlOwogCVB1YmxpY2F0aW9uQWxsT2JqVHlwZSBwdWJvYmp0eXBlOwkvKiB0 eXBlIG9mIHRoaXMgcHVibGljYXRpb24gb2JqZWN0ICovCisJTGlzdAkgICAqZXhjZXB0X3RhYmxl czsJLyogTGlzdCBvZiB0YWJsZXMgdG8gYmUgZXhjbHVkZWQgKi8KIAlQYXJzZUxvYwlsb2NhdGlv bjsJCS8qIHRva2VuIGxvY2F0aW9uLCBvciAtMSBpZiB1bmtub3duICovCiB9IFB1YmxpY2F0aW9u QWxsT2JqU3BlYzsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2Vy X2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApp bmRleCBjMTI4NWZkZDFiYy4uY2FiOTc1MzEyNzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0yMzQsNiArMjM0LDEyIEBAIHR5cGVkZWYgc3RydWN0IFBh cmFsbGVsQXBwbHlXb3JrZXJJbmZvCiAJUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqc2hhcmVk OwogfSBQYXJhbGxlbEFwcGx5V29ya2VySW5mbzsKIAordHlwZWRlZiBzdHJ1Y3QgUXVhbGlmaWVk UmVsYXRpb25OYW1lCit7CisJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwljaGFyCSAgICpyZWxuYW1l OworfSBRdWFsaWZpZWRSZWxhdGlvbk5hbWU7CisKIC8qIE1haW4gbWVtb3J5IGNvbnRleHQgZm9y IGFwcGx5IHdvcmtlci4gUGVybWFuZW50IGR1cmluZyB3b3JrZXIgbGlmZXRpbWUuICovCiBleHRl cm4gUEdETExJTVBPUlQgTWVtb3J5Q29udGV4dCBBcHBseUNvbnRleHQ7CiAKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggN2ZiNDlhYWYyOWIuLmE4ZTIxZThl OWIxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMjEz LDMzICsyMTMsMTAzIEBAIE5vdC1udWxsIGNvbnN0cmFpbnRzOgogIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IHQgICAgICAgICAgfCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgbm9uZSAgICAgICAgICAgICAgfCBmCiAoMSByb3cpCiAK LURST1AgVEFCTEUgdGVzdHB1Yl90YmwyOwotRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFs bHRhYmxlcywgdGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1Yl9mb3JzY2hlbWEsIHRlc3RwdWJfZm9y X3RibF9zY2hlbWE7Ci1DUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmwzIChhIGludCk7Ci1DUkVBVEUg VEFCTEUgdGVzdHB1Yl90YmwzYSAoYiB0ZXh0KSBJTkhFUklUUyAodGVzdHB1Yl90YmwzKTsKIFNF VCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKLUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwotQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0 IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKKy0tIEV4Y2x1ZGUgdGFibGVzIHVzaW5nIEZP UiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGFibGVsaXN0KQorQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBU QUJMRSAodGVzdHB1Yl90YmwxLCB0ZXN0cHViX3RibDIpOworXGRScCsgdGVzdHB1Yl9mb3JhbGx0 YWJsZXNfZXhjZXB0dGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZp YSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAg ICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRhYmxlczoKKyAgICAicHVi bGljLnRlc3RwdWJfdGJsMSIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsMiIKKworLS0gRXhjbHVk ZSB0YWJsZXMgdXNpbmcgRk9SIEFMTCBUQUJMRVMgRVhDRVBUICh0YWJsZWxpc3QpCitDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUxIEZPUiBBTEwgVEFC TEVTIEVYQ0VQVCAodGVzdHB1Yl90YmwxKTsKK1xkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4 Y2VwdHRhYmxlMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIHNlcXVlbmNlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IEdlbmVyYXRlZCBjb2x1bW5zIHwgVmlhIHJvb3Qg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAg fCBmICAgICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgbm9uZSAgICAgICAgICAgICAgfCBmCitFeGNlcHQgdGFibGVzOgorICAgICJwdWJsaWMudGVz dHB1Yl90YmwxIgorCistLSBDaGVjayB0aGF0IHRoZSB0YWJsZSBkZXNjcmlwdGlvbiBsaXN0cyB3 aGF0IHB1YmxpY2F0aW9ucyBhcmUgZXhjbHVkaW5nIGl0CitcZCB0ZXN0cHViX3RibDEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3RwdWJfdGJsMSIKKyBDb2x1 bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCAgICAgICAgICAgICAgICAgRGVm YXVsdCAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgaWQg ICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgbmV4dHZhbCgndGVzdHB1Yl90 YmwxX2lkX3NlcSc6OnJlZ2NsYXNzKQorIGRhdGEgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAg ICAgICAgICB8IAorSW5kZXhlczoKKyAgICAidGVzdHB1Yl90YmwxX3BrZXkiIFBSSU1BUlkgS0VZ LCBidHJlZSAoaWQpCitQdWJsaWNhdGlvbnM6CisgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzIgor RXhjZXB0IFB1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFi bGUiCisgICAgInRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMSIKKwogUkVTRVQgY2xp ZW50X21pbl9tZXNzYWdlczsKK0RST1AgVEFCTEUgdGVzdHB1Yl90YmwyOworRFJPUCBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlcywgdGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1Yl9mb3Jz Y2hlbWEsIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEsIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2Vw dHRhYmxlLCB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTE7CitDUkVBVEUgVEFCTEUg dGVzdHB1Yl90YmxfcGFyZW50IChhIGludCk7CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfY2hp bGQgKGIgdGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJfdGJsX3BhcmVudCk7CitTRVQgY2xpZW50X21p bl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRB QkxFIHRlc3RwdWJfdGJsX3BhcmVudDsKIFxkUnArIHRlc3RwdWIzCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MwogICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2Vz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNv bHVtbnMgfCBWaWEgcm9vdCAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCiAgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAgICAgICAgICB8IGYKIFRhYmxlczoKLSAgICAi cHVibGljLnRlc3RwdWJfdGJsMyIKLSAgICAicHVibGljLnRlc3RwdWJfdGJsM2EiCisgICAgInB1 YmxpYy50ZXN0cHViX3RibF9jaGlsZCIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIK IAorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJs X3BhcmVudDsKIFxkUnArIHRlc3RwdWI0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAogICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9v dCAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tCiAgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICAgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBub25lICAgICAgICAgICAgICB8IGYKIFRhYmxlczoKLSAgICAicHVibGljLnRlc3RwdWJf dGJsMyIKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX3BhcmVudCIKIAotRFJPUCBUQUJMRSB0ZXN0 cHViX3RibDMsIHRlc3RwdWJfdGJsM2E7Ci1EUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWIzLCB0ZXN0 cHViNDsKKy0tIEV4Y2x1ZGUgcGFyZW50IHRhYmxlLCBvbWl0dGluZyBib3RoIG9mICdPTkxZJyBh bmQgJyonCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIEFMTCBUQUJMRVMgRVhDRVBU IFRBQkxFICh0ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1YjUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBzZXF1 ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBHZW5lcmF0 ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgorRXhjZXB0IHRh YmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAgICJwdWJsaWMudGVzdHB1 Yl90YmxfcGFyZW50IgorCistLSBFWENFUFQgd2l0aCAnKic6IGV4Y2x1ZGUgdGFibGUgYW5kIGFs bCBkZXNjZW5kYW50cworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBBTEwgVEFCTEVT IEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmxfcGFyZW50ICopOworXGRScCsgdGVzdHB1YjYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBzZXF1ZW5jZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBHZW5lcmF0ZWQgY29sdW1ucyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgZiAgICAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IG5vbmUgICAgICAgICAgICAgIHwgZgor RXhjZXB0IHRhYmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsX2NoaWxkIgorICAgICJwdWJs aWMudGVzdHB1Yl90YmxfcGFyZW50IgorCistLSBFWENFUFQgd2l0aCBPTkxZOiBleGNsdWRlIHRh YmxlIGJ1dCBub3QgZGVzY2VuZGFudHMKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNyBGT1Ig QUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKE9OTFkgdGVzdHB1Yl90YmxfcGFyZW50KTsKK1xkUnAr IHRlc3RwdWI3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNworICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgc2VxdWVuY2VzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgR2VuZXJhdGVkIGNvbHVtbnMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IGYgICAgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBub25lICAgICAg ICAgICAgICB8IGYKK0V4Y2VwdCB0YWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3RibF9wYXJl bnQiCisKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitEUk9QIFRBQkxFIHRlc3RwdWJfdGJs X3BhcmVudCwgdGVzdHB1Yl90YmxfY2hpbGQ7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWIzLCB0 ZXN0cHViNCwgdGVzdHB1YjUsIHRlc3RwdWI2LCB0ZXN0cHViNzsKIC0tLSBUZXN0cyBmb3IgcHVi bGljYXRpb25zIHdpdGggU0VRVUVOQ0VTCiBDUkVBVEUgU0VRVUVOQ0UgcmVncmVzc19wdWJfc2Vx MDsKIENSRUFURSBTRVFVRU5DRSBwdWJfdGVzdC5yZWdyZXNzX3B1Yl9zZXExOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4IDg1YjAwYmQ2N2M4Li5mNzkwZmU0OTUxOCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbApAQCAtMTA1LDIwICsxMDUsNDAgQEAgU0VM RUNUIHB1Ym5hbWUsIHB1YmFsbHRhYmxlcyBGUk9NIHBnX3B1YmxpY2F0aW9uIFdIRVJFIHB1Ym5h bWUgPSAndGVzdHB1Yl9mb3JhbGwKIFxkKyB0ZXN0cHViX3RibDIKIFxkUnArIHRlc3RwdWJfZm9y YWxsdGFibGVzCiAKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKKy0tIEV4Y2x1 ZGUgdGFibGVzIHVzaW5nIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGFibGVsaXN0KQor Q1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlIEZPUiBB TEwgVEFCTEVTIEVYQ0VQVCBUQUJMRSAodGVzdHB1Yl90YmwxLCB0ZXN0cHViX3RibDIpOworXGRS cCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXNfZXhjZXB0dGFibGUKKy0tIEV4Y2x1ZGUgdGFibGVzIHVz aW5nIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAodGFibGVsaXN0KQorQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZm9yYWxsdGFibGVzX2V4Y2VwdHRhYmxlMSBGT1IgQUxMIFRBQkxFUyBFWENFUFQg KHRlc3RwdWJfdGJsMSk7CitcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZTEK Ky0tIENoZWNrIHRoYXQgdGhlIHRhYmxlIGRlc2NyaXB0aW9uIGxpc3RzIHdoYXQgcHVibGljYXRp b25zIGFyZSBleGNsdWRpbmcgaXQKK1xkIHRlc3RwdWJfdGJsMQorCitSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7Ci1EUk9QIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVtYSwg dGVzdHB1Yl9mb3JfdGJsX3NjaGVtYTsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0 YWJsZXMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3RwdWJfZm9yc2NoZW1hLCB0ZXN0cHViX2Zvcl90 Ymxfc2NoZW1hLCB0ZXN0cHViX2ZvcmFsbHRhYmxlc19leGNlcHR0YWJsZSwgdGVzdHB1Yl9mb3Jh bGx0YWJsZXNfZXhjZXB0dGFibGUxOwogCi1DUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmwzIChhIGlu dCk7Ci1DUkVBVEUgVEFCTEUgdGVzdHB1Yl90YmwzYSAoYiB0ZXh0KSBJTkhFUklUUyAodGVzdHB1 Yl90YmwzKTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9wYXJlbnQgKGEgaW50KTsKK0NSRUFU RSBUQUJMRSB0ZXN0cHViX3RibF9jaGlsZCAoYiB0ZXh0KSBJTkhFUklUUyAodGVzdHB1Yl90Ymxf cGFyZW50KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKLUNSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwotQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKLVJFU0VUIGNsaWVudF9t aW5fbWVzc2FnZXM7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3Rw dWJfdGJsX3BhcmVudDsKIFxkUnArIHRlc3RwdWIzCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmxfcGFyZW50OwogXGRScCsgdGVzdHB1YjQKKy0t IEV4Y2x1ZGUgcGFyZW50IHRhYmxlLCBvbWl0dGluZyBib3RoIG9mICdPTkxZJyBhbmQgJyonCitD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0 ZXN0cHViX3RibF9wYXJlbnQpOworXGRScCsgdGVzdHB1YjUKKy0tIEVYQ0VQVCB3aXRoICcqJzog ZXhjbHVkZSB0YWJsZSBhbmQgYWxsIGRlc2NlbmRhbnRzCitDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1YjYgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIFRBQkxFICh0ZXN0cHViX3RibF9wYXJlbnQgKik7 CitcZFJwKyB0ZXN0cHViNgorLS0gRVhDRVBUIHdpdGggT05MWTogZXhjbHVkZSB0YWJsZSBidXQg bm90IGRlc2NlbmRhbnRzCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjcgRk9SIEFMTCBUQUJM RVMgRVhDRVBUIFRBQkxFIChPTkxZIHRlc3RwdWJfdGJsX3BhcmVudCk7CitcZFJwKyB0ZXN0cHVi NwogCi1EUk9QIFRBQkxFIHRlc3RwdWJfdGJsMywgdGVzdHB1Yl90YmwzYTsKLURST1AgUFVCTElD QVRJT04gdGVzdHB1YjMsIHRlc3RwdWI0OworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0RS T1AgVEFCTEUgdGVzdHB1Yl90YmxfcGFyZW50LCB0ZXN0cHViX3RibF9jaGlsZDsKK0RST1AgUFVC TElDQVRJT04gdGVzdHB1YjMsIHRlc3RwdWI0LCB0ZXN0cHViNSwgdGVzdHB1YjYsIHRlc3RwdWI3 OwogCiAtLS0gVGVzdHMgZm9yIHB1YmxpY2F0aW9ucyB3aXRoIFNFUVVFTkNFUwogQ1JFQVRFIFNF UVVFTkNFIHJlZ3Jlc3NfcHViX3NlcTA7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKaW5kZXgg YTRjN2RiYWZmNTkuLjA3MjgyYWEzYzE4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkCkBA IC00Niw2ICs0Niw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAzNF90ZW1wb3JhbC5wbCcsCiAg ICAgICAndC8wMzVfY29uZmxpY3RzLnBsJywKICAgICAgICd0LzAzNl9zZXF1ZW5jZXMucGwnLAor ICAgICAgJ3QvMDM3X3JlcF9jaGFuZ2VzX2V4Y2VwdF90YWJsZS5wbCcsCiAgICAgICAndC8xMDBf YnVncy5wbCcsCiAgICAgXSwKICAgfSwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAzN19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMzdfcmVwX2NoYW5nZXNfZXhjZXB0X3RhYmxlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5mOTQzNmM5ZTUwZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAzN19yZXBfY2hhbmdlc19leGNlcHRfdGFibGUucGwKQEAgLTAs MCArMSwzMTQgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBMb2dpY2FsIHJlcGxpY2F0aW9uIHRlc3RzIGZvciBF WENFUFQgVEFCTEUgcHVibGljYXRpb25zCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNl IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7 Cit1c2UgVGVzdDo6TW9yZTsKKworIyBJbml0aWFsaXplIHB1Ymxpc2hlciBub2RlCitteSAkbm9k ZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicp OworJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsK KyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7CisKKyMgSW5pdGlhbGl6ZSBzdWJzY3JpYmVyIG5vZGUK K215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1 YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAn bG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKKyMgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgRVhDRVBUIFRBQkxFIHRlc3QgY2FzZXMg Zm9yIG5vcm1hbCB0YWJsZXMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKyMgQ3JlYXRlIHNjaGVtYXMgYW5kIHRhYmxlcyBvbiBwdWJsaXNoZXIKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBTQ0hFTUEg c2NoMTsKKwlDUkVBVEUgVEFCTEUgc2NoMS50YWIxIEFTIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMo MSwxMCkgQVMgYTsKKykpOworCisjIENyZWF0ZSBzY2hlbWFzIGFuZCB0YWJsZXMgb24gc3Vic2Ny aWJlcgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCUNS RUFURSBTQ0hFTUEgc2NoMTsKKwlDUkVBVEUgVEFCTEUgc2NoMS50YWIxIChhIGludCk7CispKTsK KworIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uLCBhbmQgY3JlYXRlIGEgbG9naWNhbCByZXBs aWNhdGlvbiBzbG90IHRvIGhlbHAgd2l0aAorIyBsYXRlciB0ZXN0cy4KK215ICRwdWJsaXNoZXJf Y29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNB VElPTiB0YXBfcHViX3NjaGVtYSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjaDEudGFi MSkiCispOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxF Q1QgcGdfY3JlYXRlX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdCgndGVzdF9zbG90JywgJ3Bnb3V0 cHV0JykiKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNS RUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9zY2hlbWEgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9j b25uc3RyJyBQVUJMSUNBVElPTiB0YXBfcHViX3NjaGVtYSIKKyk7CisKKyMgV2FpdCBmb3IgaW5p dGlhbCB0YWJsZSBzeW5jIHRvIGZpbmlzaAorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vi c2NyaXB0aW9uX3N5bmMoJG5vZGVfcHVibGlzaGVyLAorCSd0YXBfc3ViX3NjaGVtYScpOworCisj IENoZWNrIHRoZSB0YWJsZSBkYXRhIGRvZXMgbm90IHN5bmMgZm9yIGV4Y2x1ZGVkIHRhYmxlCitt eSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCBjb3VudCgqKSwgbWluKGEpLCBtYXgoYSkgRlJPTSBzY2gxLnRhYjEiKTsKK2lzKCRyZXN1 bHQsIHFxKDB8fCksCisJJ2NoZWNrIHRoZXJlIGlzIG5vIGluaXRpYWwgZGF0YSBjb3BpZWQgZm9y IHRoZSBleGNsdWRlZCB0YWJsZScpOworCisjIEluc2VydCBzb21lIGRhdGEgdG8gdGhlIGV4Y2x1 ZGVkIHRhYmxlLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5T RVJUIElOVE8gc2NoMS50YWIxIFZBTFVFUyhnZW5lcmF0ZV9zZXJpZXMoMTEsMjApKSIpOworCisj IFZlcmlmeSB0aGF0IGRhdGEgaW5zZXJ0ZWQgdG8gZXhjbHVkZWQgdGFibGUgaXMgbm90IHB1Ymxp c2hlZC4KKyRyZXN1bHQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJTRUxFQ1QgY291bnQoKikgPSAwIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9iaW5hcnlfY2hh bmdlcygndGVzdF9zbG90JywgTlVMTCwgTlVMTCwgJ3Byb3RvX3ZlcnNpb24nLCAnMScsICdwdWJs aWNhdGlvbl9uYW1lcycsICd0YXBfc3ViX3NjaGVtYScpIgorKTsKK2lzKCRyZXN1bHQsIHFxKHQp LCAnY2hlY2sgbm8gY2hhbmdlcyBmb3IgZXhjbHVkZWQgdGFibGUgaW4gcmVwbGljYXRpb24gc2xv dCcpOworCisjIFZlcmlmeSB0aGF0IGRhdGEgaW5zZXJ0ZWQgdG8gdGhlIGV4Y2x1ZGVkIHRhYmxl IGlzIG5vdCByZXBsaWNhdGVkLgorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0 YXBfc3ViX3NjaGVtYScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudCgqKSwgbWluKGEpLCBtYXgoYSkgRlJPTSBzY2gx LnRhYjEiKTsKK2lzKCRyZXN1bHQsIHFxKDB8fCksICdjaGVjayByZXBsaWNhdGVkIGluc2VydHMg b24gc3Vic2NyaWJlcicpOworCisjIGNsZWFudXAKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9zY2hlbWEiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxKAorCURST1AgUFVCTElDQVRJ T04gdGFwX3B1Yl9zY2hlbWE7CisJVFJVTkNBVEUgVEFCTEUgc2NoMS50YWIxOworKSk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRBQkxFIHNjaDEu dGFiMSIpOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisjIEVYQ0VQVCBUQUJMRSB0ZXN0IGNhc2VzIGZvciBwYXJ0aXRpb25lZCB0YWJsZXMKKyMgQ2hl Y2sgYmVoYXZpb3Igb2YgRVhDRVBUIFRBQkxFIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3Qgb24gYQorIyBwYXJ0aXRpb25lZCB0YWJsZSBhbmQgaXRzIHBhcnRpdGlvbnMuCisjID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFNldHVwIHBhcnRpdGlv bmVkIHRhYmxlIGFuZCBwYXJ0aXRpb25zIG9uIHRoZSBwdWJsaXNoZXIgdGhhdCBtYXAgdG8gbm9y bWFsCisjIHRhYmxlcyBvbiB0aGUgc3Vic2NyaWJlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoCisJJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHNjaDEudDEoYSBpbnQpIFBBUlRJ VElPTiBCWSBSQU5HRShhKTsKKwlDUkVBVEUgVEFCTEUgc2NoMS5wYXJ0MSBQQVJUSVRJT04gT0Yg c2NoMS50MSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworCUNSRUFURSBUQUJMRSBzY2gx LnBhcnQyKGEgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoYSk7CisJQ1JFQVRFIFRBQkxFIHNjaDEu cGFydDJfMSBQQVJUSVRJT04gT0Ygc2NoMS5wYXJ0MiBGT1IgVkFMVUVTIEZST00gKDEwMSkgVE8g KDE1MCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDJfMiBQQVJUSVRJT04gT0Ygc2NoMS5wYXJ0 MiBGT1IgVkFMVUVTIEZST00gKDE1MSkgVE8gKDIwMCk7CisJQUxURVIgVEFCTEUgc2NoMS50MSBB VFRBQ0ggUEFSVElUSU9OIHNjaDEucGFydDIgRk9SIFZBTFVFUyBGUk9NICgxMDEpIFRPICgyMDAp OworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgK KwlDUkVBVEUgVEFCTEUgc2NoMS50MShhIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjaDEucGFydDEo YSBpbnQpOworCUNSRUFURSBUQUJMRSBzY2gxLnBhcnQyKGEgaW50KTsKKwlDUkVBVEUgVEFCTEUg c2NoMS5wYXJ0Ml8xKGEgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2NoMS5wYXJ0Ml8yKGEgaW50KTsK KykpOworCisjIEV4Y2x1ZGluZyB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0YWJsZSBleGNsdWRlcyBh bGwgaXRzIHBhcnRpdGlvbnMgYXMgd2VsbCB3aGVuCisjIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290ID0gZmFsc2UuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBx cSgKKwlDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0IEZPUiBBTEwgVEFCTEVTIEVYQ0VQ VCBUQUJMRSAoc2NoMS50MSkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxz ZSk7CisJSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDEpLCAoMTAxKSwgKDE1MSk7CispKTsK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NS SVBUSU9OIHRhcF9zdWJfcGFydCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIHRhcF9wdWJfcGFydCIKKyk7Ciskbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJz Y3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsICd0YXBfc3ViX3BhcnQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBzbG90X25hbWUgRlJPTSBw Z19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJ3Rlc3Rfc2xvdCcsIHBnX2N1cnJlbnRfd2FsX2xz bigpKTsiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5T RVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDIpLCAoMTAyKSwgKDE1MikiKTsKKworIyBWZXJpZnkg dGhhdCBkYXRhIGluc2VydGVkIHRvIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBpcyBub3QgcHVibGlz aGVkIHdoZW4gaXQgaXMKKyMgZXhjbHVkZWQgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IHRydWUuCiskcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfYmluYXJ5 X2NoYW5nZXMoJ3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEwsICdwcm90b192ZXJzaW9uJywgJzEnLCAn cHVibGljYXRpb25fbmFtZXMnLCAndGFwX3B1Yl9wYXJ0JykiCispOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKworIyBDaGVjayB0aGF0IG5vIHJv d3MgYXJlIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlcgorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnQxIik7Citpcygk cmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiByb290IHRhYmxlJyk7CisKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2No MS5wYXJ0MSIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gdGFibGUgc2NoMS5w YXJ0MScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDIiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVj ayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDInKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyXzEi KTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDJfMScp OworCiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgKiBGUk9NIHNjaDEucGFydDJfMiIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNr IHJvd3Mgb24gdGFibGUgc2NoMS5wYXJ0Ml8yJyk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9wYXJ0Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBQVUJMSUNBVElPTiB0YXBf cHViX3BhcnQ7Iik7CisKKyMgRXhjbHVkaW5nIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlIGV4 Y2x1ZGVzIGFsbCBpdHMgcGFydGl0aW9ucyBhcyB3ZWxsIHdoZW4KKyMgcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSB0cnVlLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3Rn cmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydCBGT1IgQUxMIFRBQkxF UyBFWENFUFQgVEFCTEUgKHNjaDEudDEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZSk7CispKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCBDT05ORUNUSU9OICckcHVibGlzaGVy X2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHRhcF9wdWJfcGFydCIKKyk7Ciskbm9kZV9zdWJzY3JpYmVy LT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9wdWJsaXNoZXIsICd0YXBfc3ViX3Bh cnQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBz bG90X25hbWUgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoJ3Rlc3Rfc2xvdCcsIHBn X2N1cnJlbnRfd2FsX2xzbigpKTsiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiSU5TRVJUIElOVE8gc2NoMS50MSBWQUxVRVMgKDMpLCAoMTAzKSwgKDE1Myk7 Iik7CisKKyMgVmVyaWZ5IHRoYXQgZGF0YSBpbnNlcnRlZCB0byB0aGUgcGFydGl0aW9uZWQgdGFi bGUgaXMgbm90IHB1Ymxpc2hlZCB3aGVuIGl0IGlzCisjIGV4Y2x1ZGVkIHdpdGggcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLgorJHJlc3VsdCA9ICRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBjb3VudCgqKSA9IDAgRlJPTSBwZ19sb2dpY2Fs X3Nsb3RfZ2V0X2JpbmFyeV9jaGFuZ2VzKCd0ZXN0X3Nsb3QnLCBOVUxMLCBOVUxMLCAncHJvdG9f dmVyc2lvbicsICcxJywgJ3B1YmxpY2F0aW9uX25hbWVzJywgJ3RhcF9wdWJfcGFydCcpIgorKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgndGFwX3N1Yl9wYXJ0Jyk7CisKKyMg Q2hlY2sgdGhhdCBubyByb3dzIGFyZSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00g c2NoMS50MSIpOworaXMoJHJlc3VsdCwgcXEoKSwgJ2NoZWNrIHJvd3Mgb24gcm9vdCB0YWJsZScp OworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgKiBGUk9NIHNjaDEucGFydDEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dz IG9uIHRhYmxlIHNjaDEucGFydDEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyIik7CitpcygkcmVz dWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQyJyk7CisKKyRyZXN1bHQg PQorICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZS T00gc2NoMS5wYXJ0Ml8xIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJs ZSBzY2gxLnBhcnQyXzEnKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyXzIiKTsKK2lzKCRyZXN1 bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDJfMicpOworCiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9z dWJfcGFydCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag UFVCTElDQVRJT04gdGFwX3B1Yl9wYXJ0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIHNsb3RfbmFtZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3Rf YWR2YW5jZSgndGVzdF9zbG90JywgcGdfY3VycmVudF93YWxfbHNuKCkpOyIKKyk7CisKKyMgRXhj bHVkaW5nIG9uZSBvZiB0aGUgY2hpbGQgcGFydGl0aW9uIHRhYmxlIHdpdGgKKyMgcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlIHNob3VsZCByZXBsaWNhdGUgdGhlIG90aGVyIHBhcnRp dGlvbnMuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlU UlVOQ0FURSBzY2gxLnQxOworCUlOU0VSVCBJTlRPIHNjaDEudDEgVkFMVUVTICgzKSwgKDEwMyks ICgxNTMpOworCUNSRUFURSBQVUJMSUNBVElPTiB0YXBfcHViX3BhcnQgRk9SIEFMTCBUQUJMRVMg RVhDRVBUIFRBQkxFIChzY2gxLnBhcnQyKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IHRydWUpOworKSk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVz JywgcXEoCisJVFJVTkNBVEUgc2NoMS50MTsKKwlDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9zdWJf cGFydCBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHRhcF9wdWJf cGFydDsKKykpOworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMo JG5vZGVfcHVibGlzaGVyLCAndGFwX3N1Yl9wYXJ0Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1Qgc2xvdF9uYW1lIEZST00gcGdfcmVwbGljYXRpb25f c2xvdF9hZHZhbmNlKCd0ZXN0X3Nsb3QnLCBwZ19jdXJyZW50X3dhbF9sc24oKSk7IgorKTsKKwor IyBWZXJpZnkgdGhhdCBkYXRhIGluc2VydGVkIHRvIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBpcyBu b3QgcHVibGlzaGVkIHdoZW4gaXQgaXMKKyMgZXhjbHVkZWQgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCA9IHRydWUuCiskcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9n ZXRfYmluYXJ5X2NoYW5nZXMoJ3Rlc3Rfc2xvdCcsIE5VTEwsIE5VTEwsICdwcm90b192ZXJzaW9u JywgJzEnLCAncHVibGljYXRpb25fbmFtZXMnLCAndGFwX3B1Yl9wYXJ0JykiCispOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCd0YXBfc3ViX3BhcnQnKTsKKworIyBDaGVjayB0 aGF0IHRhYmxlIGRhdGEgMTAzIGFuZCAxNTMgd2hpY2ggaXMgcHJlc2VudCBpbiBzY2gxLnNjaDEu cGFydDIgc2hvdWxkCisjIG5vdCBiZSByZXBsaWNhdGVkLgorJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnQxIik7Citp cygkcmVzdWx0LCBxcSgzKSwgJ2NoZWNrIHJvd3Mgb24gcm9vdCB0YWJsZScpOworCiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9N IHNjaDEucGFydDEiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayByb3dzIG9uIHRhYmxlIHNj aDEucGFydDEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyIik7CitpcygkcmVzdWx0LCBxcSgpLCAn Y2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQyJyk7CisKKyRyZXN1bHQgPQorICAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIEZST00gc2NoMS5wYXJ0 Ml8xIik7CitpcygkcmVzdWx0LCBxcSgpLCAnY2hlY2sgcm93cyBvbiB0YWJsZSBzY2gxLnBhcnQy XzEnKTsKKworJHJlc3VsdCA9CisgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUICogRlJPTSBzY2gxLnBhcnQyXzIiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdj aGVjayByb3dzIG9uIHRhYmxlIHNjaDEucGFydDJfMicpOworCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgU1VCU0NSSVBUSU9OIHRhcF9zdWJfcGFydCIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgUFVCTElDQVRJT04g dGFwX3B1Yl9wYXJ0OyIpOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisjIFRlc3Qgd2hlbiBhIHN1YnNjcmlwdGlvbiBpcyBzdWJzY3JpYmluZyB0byBt dWx0aXBsZSBwdWJsaWNhdGlvbnMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKyMgTXVsdGlwbGUgcHVibGljYXRpb25zIHdpdGggRVhDRVBUIGxpc3RzIHNo b3VsZCB0aHJvdyBhbiBlcnJvcgorbXkgKCRzdGRvdXQsICRzdGRlcnIpOworCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04g dGFwX3B1YjEgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIChzY2gxLnRhYjEpOworCUNSRUFURSBQVUJM SUNBVElPTiB0YXBfcHViMiBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKHNjaDEudDEpOworKSk7CisK KygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bv c3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRwdWJs aXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGFwX3B1YjEsIHRhcF9wdWIyIgorKTsKK2xpa2Uo CisJJHN0ZGVyciwKKwlxci9FUlJPUjogIHB1YmxpY2F0aW9ucyAidGFwX3B1YjEiLCAidGFwX3B1 YjIiIGFyZSBkZWZpbmVkIHdpdGggRVhDRVBUIFRBQkxFLywKKwknc3Vic2NyaXB0aW9uIHdpdGgg bXVsdGlwbGUgRVhDRVBUIFRBQkxFIHB1YmxpY2F0aW9uJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdEUk9QIFBVQkxJQ0FUSU9OIHRhcF9wdWIyJyk7CisKKyMg QSB0YWJsZSBpcyBleGNsdWRlIHVzaW5nIEFMTCBUQUJMRSAuLiBFWENFUFQgVEFCTEUgYnV0IGlu Y2x1ZGVkIHVzaW5nIEZPUgorIyBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJ J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIyIEZPUiBUQUJMRSBz Y2gxLnRhYjE7CisJSU5TRVJUIElOVE8gc2NoMS50YWIxIFZBTFVFUygxKTsKKykpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHRhcF9z dWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiB0YXBfcHViMSwg dGFwX3B1YjIiCispOworJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5 bmMoJG5vZGVfcHVibGlzaGVyLCAndGFwX3N1YicpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxcShJTlNFUlQgSU5UTyBzY2gxLnRhYjEgVkFMVUVTKDIpKSk7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3RhcF9zdWInKTsKKworJHJlc3VsdCA9 ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00g c2NoMS50YWIxIE9SREVSIEJZIGEiKTsKK2lzKCAkcmVzdWx0LCBxcSgxCisyKSwKKwkiY2hlY2sg cmVwbGljYXRpb24gb2YgdGFibGUgZXhjbHVkZWQgYSBwdWJsaWNhdGlvbiBhbmQgaW5jbHVkZWQg YnkgYW5vdGhlciIKKyk7CisKKyMgQWx0ZXIgc3Vic2NyaXB0aW9uIHJlZnJlc2ggdGhyb3dzIGVy cm9yIHdoZW4gc3Vic2NyaXB0aW9uIGhhcyBtdWx0aXBsZQorIyBwdWJsaWNhdGlvbnMgd2l0aCBF WENFUFQgVEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFx KAorCURST1AgUFVCTElDQVRJT04gdGFwX3B1YjI7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9w dWIyIEZPUiBBTEwgVEFCTEVTIEVYQ0VQVCAoc2NoMS50MSk7CispKTsKKworKCRyZXN1bHQsICRz dGRvdXQsICRzdGRlcnIpID0gJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLAorCSJB TFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBSRUZSRVNIIFBVQkxJQ0FUSU9OIik7CitsaWtlKAor CSRzdGRlcnIsCisJcXIvRVJST1I6ICBwdWJsaWNhdGlvbnMgInRhcF9wdWIxIiwgInRhcF9wdWIy IiBhcmUgZGVmaW5lZCB3aXRoIEVYQ0VQVCBUQUJMRS8sCisJJ3N1YnNjcmlwdGlvbiB3aXRoIG11 bHRpcGxlIEVYQ0VQVCBUQUJMRSBwdWJsaWNhdGlvbicpOworCiskbm9kZV9wdWJsaXNoZXItPnN0 b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cmlu ZGV4IDc2MTk4NDVmYmE5Li41N2FhYmFlMjRhNyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK QEAgLTI0MTksNiArMjQxOSw3IEBAIFFUTm9kZQogUVVFUllUWVBFCiBRdWFsQ29zdAogUXVhbEl0 ZW0KK1F1YWxpZmllZFJlbGF0aW9uTmFtZQogUXVlcnkKIFF1ZXJ5Q29tcGxldGlvbgogUXVlcnlE ZXNjCi0tIAoyLjQzLjAKCg== --0000000000002ba9a2064a7bc36c Content-Type: application/octet-stream; name="v42-0002-Extended-tests-for-EXCEPT-TABLE-patch.patch" Content-Disposition: attachment; filename="v42-0002-Extended-tests-for-EXCEPT-TABLE-patch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlgvs3fb1 RnJvbSA2Y2VmMGE1NjRkODk3ZDFhOWNkN2RmZmE2OGRhN2NiZjczMTI0MjEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNCBGZWIgMjAyNiAxMjoyNzo1NyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjQy IDIvMl0gRXh0ZW5kZWQgdGVzdHMgZm9yIEVYQ0VQVCBUQUJMRSBwYXRjaAoKVGhpcyBwYXRjaCBj b250YWlucyBleHRyYSB0ZXN0cyBmb3IgRVhDRVBUIFRBQkxFIHBhdGNoLiBQdXJwb3NlIG9mIHRo aXMKdGVzdHMgdG8ga2VlcCB0cmFjayBvZiB0ZXN0cyB3aGljaCBvbmNlIGJyb2tlIHRoZSBwYXRj aC4KCkJhc2VkIG9uIGRpc2N1c3Npb24gaW4gZnV0dXJlIHdlIG1heSBwaWNrIHVwIHNvbWUgdGVz dCB0byBpbmNsdWRlIGluCnRoZSBtYWluIHBhdGNoLgotLS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzEwMV90ZXN0LnBsIHwgMTM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmls ZSBjaGFuZ2VkLCAxMzYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzEwMV90ZXN0LnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMTAxX3Rlc3QucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8xMDFfdGVzdC5w bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmU0ZGZjM2E3MTMKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8xMDFfdGVzdC5wbApAQCAt MCwwICsxLDEzNiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisjCisjIEV4dGVuZGVkIHRlc3QgZm9yIEVYQ0VQVCBUQUJMRQorCit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0 OjpNb3JlOworCisjIC0tLS0tLS0tCisjIFB1Ymxpc2hlcgorIyAtLS0tLS0tLQorbXkgJHB1Ymxp c2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiskcHVi bGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRwdWJsaXNoZXIt PmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxKAord2FsX2xldmVsID0gbG9naWNh bAorbG9nX21pbl9tZXNzYWdlcyA9IElORk8KK2xvZ19zdGF0ZW1lbnQgPSBhbGwKK3dhbF9yZWNl aXZlcl90aW1lb3V0ID0gMAord2FsX3NlbmRlcl90aW1lb3V0ID0gMAorKSk7CiskcHVibGlzaGVy LT5zdGFydDsKKworIyBDcmVhdGUgYSBwYXJ0aXRpb24gc3RydWN0dXJlOgorIyBzYzEudDEKKyMg ICAtIHNjMS5jaGlsZDEKKyMgICAgICAgLSBzYzEuY2hpbGQxXzEKKyMgICAgICAgLSBzYzEuY2hp bGQxXzIKKyMgICAtIHNjMS5jaGlsZDIKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdy ZXMnLCBxKAorCUNSRUFURSBTQ0hFTUEgc2MxOworCUNSRUFURSBUQUJMRSBzYzEudDEoaWQgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworCUNSRUFURSBUQUJMRSBzYzEuY2hpbGQxKGlkIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKwlDUkVBVEUgVEFCTEUgc2MxLmNoaWxkMiBQQVJU SVRJT04gT0Ygc2MxLnQxIEZPUiBWQUxVRVMgRlJPTSAoMTAxKSBUTyAoMjAwKTsKKwlDUkVBVEUg VEFCTEUgc2MxLmNoaWxkMV8xIFBBUlRJVElPTiBPRiBzYzEuY2hpbGQxIEZPUiBWQUxVRVMgRlJP TSAoMCkgVE8gKDUwKTsKKwlDUkVBVEUgVEFCTEUgc2MxLmNoaWxkMV8yIFBBUlRJVElPTiBPRiBz YzEuY2hpbGQxIEZPUiBWQUxVRVMgRlJPTSAoNTEpIFRPICgxMDApOworCUFMVEVSIFRBQkxFIHNj MS50MSBBVFRBQ0ggUEFSVElUSU9OIHNjMS5jaGlsZDEgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAo MTAwKTsKKykpOworCisjIC0tLS0tLS0tLS0KKyMgU3Vic2NyaWJlcgorIyAtLS0tLS0tLS0tCitt eSAkY29ubnN0ciA9ICRwdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Citt eSAkc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJl cicpOworJHN1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwor JHN1YnNjcmliZXItPmFwcGVuZF9jb25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxKAord2FsX2xl dmVsID0gbG9naWNhbAorbG9nX21pbl9tZXNzYWdlcyA9IElORk8KK2xvZ19zdGF0ZW1lbnQgPSBh bGwKK3dhbF9yZWNlaXZlcl90aW1lb3V0ID0gMAord2FsX3NlbmRlcl90aW1lb3V0ID0gMAorKSk7 Ciskc3Vic2NyaWJlci0+c3RhcnQ7CisKKyRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoCisJJ3Bvc3Rn cmVzJywgcSgKKwlDUkVBVEUgU0NIRU1BIHNjMTsKKwlDUkVBVEUgVEFCTEUgc2MxLnQxKGlkIGlu dCk7CisJQ1JFQVRFIFRBQkxFIHNjMS5jaGlsZDEoaWQgaW50KTsKKwlDUkVBVEUgVEFCTEUgc2Mx LmNoaWxkMV8xKGlkIGludCk7CisJQ1JFQVRFIFRBQkxFIHNjMS5jaGlsZDFfMihpZCBpbnQpOwor CUNSRUFURSBUQUJMRSBzYzEuY2hpbGQyKGlkIGludCk7CispKTsKKworIyBUZXN0IDE6CisjIENy ZWF0ZSB0d28gcHVibGljYXRpb25zLCBvbmUgd2l0aCAiQUxMIFRBQkxFUyBFWENFUFQiLCBvdGhl ciB3aXRoICJGT1IgVEFCTEUiCisjIFRhYmxlcyBzcGVjaWZpZWQgaW4gIkVYQ0VQVCIgYW5kICJG T1IgVEFCTEUiIGFyZSBwYXJ0IG9mIHNhbWUgcGFydGl0aW9uIHRyZWUKKyRwdWJsaXNoZXItPnNh ZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCUlOU0VSVCBJTlRPIHNjMS50MSBWQUxVRVMgKDEp LCAoNTEpLCAoMTAxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgQUxMIFRBQkxFUyBF WENFUFQgVEFCTEUgKHNjMS5jaGlsZDIpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZSk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFIHNjMS5jaGlsZDFf MSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7Ciskc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBD T05ORUNUSU9OICckY29ubnN0cicgUFVCTElDQVRJT04gcHViMSwgcHViMjsiKTsKKworIyBDaGVj ayBmb3IgdGFibGVzeW5jCiskc3Vic2NyaWJlci0+d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMo JHB1Ymxpc2hlciwgJ3N1YjEnKTsKK215ICRyZXN1bHQgPQorICAkc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBGUk9NIHNjMS50MSBPUkRFUiBCWSBpZCIpOworaXMo ICRyZXN1bHQsIHFxKDEKKzUxKSwgJ2NoZWNrIGRhdGEgYWZ0ZXIgdGFibGVzeW5jJyk7CisKKyMg Q2hlY2sgZm9yIGluY3JlbWVudGFsIHN5bmMKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyBzYzEudDEgVkFMVUVTICgxKSwgKDUxKSwgKDEwMSkiKTsKKyRz dWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVyLCAnc3ViMScp OworJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCAqIEZST00gc2MxLnQxIE9SREVSIEJZIGlkIik7CitpcyggJHJlc3VsdCwgcXEoMQorMQorNTEK KzUxKSwgJ2NoZWNrIGRhdGEgYWZ0ZXIgaW5jcmVtZW50YWwgc3luYycpOworCisjIGNsZWFudXAK KyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCURST1AgUFVCTElDQVRJ T04gcHViMSwgcHViMjsKKwlUUlVOQ0FURSBzYzEudDE7CispKTsKKyRzdWJzY3JpYmVyLT5zYWZl X3BzcWwoCisJJ3Bvc3RncmVzJywgcSgKKwlEUk9QIFNVQlNDUklQVElPTiBzdWIxOworCVRSVU5D QVRFIHNjMS50MTsKKykpOworCisjIFRlc3QgMjogQ3JlYXRlIHB1YmxpY2F0aW9uIHdpdGggRVhD RVBUIFRBQkxFIGxpc3QgaGF2aW5nIGFsbCBwYXJ0aXRpb25zIG9mCisjIHBhcnRpY3VsYXIgbGV2 ZWwKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxKAorCUlOU0VSVCBJTlRP IHNjMS50MSBWQUxVRVMgKDEpLCAoNTEpLCAoMTAxKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHVi MSBGT1IgQUxMIFRBQkxFUyBFWENFUFQgVEFCTEUgKHNjMS5jaGlsZDIsIHNjMS5jaGlsZDEpIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CispKTsKKyRzdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIxIENPTk5F Q1RJT04gJyRjb25uc3RyJyBQVUJMSUNBVElPTiBwdWIxOyIpOworCisjIENoZWNrIGZvciB0YWJs ZXN5bmMKKyRzdWJzY3JpYmVyLT53YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVy LCAnc3ViMScpOworJHJlc3VsdCA9CisgICRzdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCAqIEZST00gc2MxLnQxIE9SREVSIEJZIGlkIik7CitpcygkcmVzdWx0LCBxcSgp LCAnY2hlY2sgZGF0YSBhZnRlciB0YWJsZXN5bmMnKTsKKworIyBDaGVjayBmb3IgaW5jcmVtZW50 YWwgc3luYworJHB1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRP IHNjMS50MSBWQUxVRVMgKDEpLCAoNTEpLCAoMTAxKSIpOworJHN1YnNjcmliZXItPndhaXRfZm9y X3N1YnNjcmlwdGlvbl9zeW5jKCRwdWJsaXNoZXIsICdzdWIxJyk7CiskcmVzdWx0ID0KKyAgJHN1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogRlJPTSBzYzEudDEgT1JE RVIgQlkgaWQiKTsKK2lzKCRyZXN1bHQsIHFxKCksICdjaGVjayBkYXRhIGFmdGVyIGluY3JlbWVu dGFsIHN5bmMnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjQzLjAKCg== --0000000000002ba9a2064a7bc36c--