Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nSNLw-0003u7-Vq for pgsql-hackers@arkaria.postgresql.org; Thu, 10 Mar 2022 18:17:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nSNLv-00071A-Mk for pgsql-hackers@arkaria.postgresql.org; Thu, 10 Mar 2022 18:17:31 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nSNLu-000710-B4 for pgsql-hackers@lists.postgresql.org; Thu, 10 Mar 2022 18:17:31 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nSNLj-0002w3-VP for pgsql-hackers@postgresql.org; Thu, 10 Mar 2022 18:17:28 +0000 Received: by mail-ej1-x62d.google.com with SMTP id kt27so14077763ejb.0 for ; Thu, 10 Mar 2022 10:17:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to; bh=TjREV89O3cCqUN/kpAo/UbRNdkDPLFx6hqxikgnGWew=; b=NUfkANyTssZ0SANvqo3/9XWe9PPc25zfStNpNBiHErpJKfeEQO3b9jZFE6lXY2AKjh 2S8tL5bvYbDnA5xqKFSJyDaz+WyvW4fnI0DUl8Lgs/UH9149f4/pYMvo1r/gShCu6khU Wi9o/jqTkit7KmU0P30YZGUu0zVzKpo75phAnLGRMIOyG7e6ptpgbtXHPvLs2LCpxDGg /TOUS4LgkFqdCaH0+iNswr2a34nWlOOiIXdipVQrQlU3EV7PfnHs4MCX7fqT3mze6P4X xORpnbs3BJRzRtQ5/ashsHHJzHvg7Pd1ATnEgeCEOCxKp3+YRBXRBTQbw3JnnsrKvk4Q P29Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=TjREV89O3cCqUN/kpAo/UbRNdkDPLFx6hqxikgnGWew=; b=v0LB4YQEJka+mvJqx1wL530Gz/eFTmJ14CFNQoKi2UEPElLjUn0X/hfHYcys46j7SF uIXe26t7UwSzfaIAot7+GRle6qj4sOtUFt+4EietmPTpj77Te+J5NXeHIXHcYsLvDk1G j1d4csOxxNVCxd/K0xcenrQGQhXuTbJ3/ErOiqZ5VHuIeS1HMeKunqaS5EH+dtlVgbaV r2FOlQxFbR9SCVwnmxqzj6QUGA4U26IjoOQIBKhNK4QFnxnZ5U6s9IaePctM0aDf9LGP 8gOhiMd7h78mkmyDrzo1KCZ0XRhb66QJY9CieUAiXVmtfg2SDJCp6B2fSRhjBkIpI9bf kW5Q== X-Gm-Message-State: AOAM533VVYAegqx2R5DaexbVgqQjFICtkXTKahzjqHwFAuPTCbO5nT3i 3mlgQbs03j5R+ZwcDu03IK7Dj4Wnks+QnP/hsYqRBOqoa18cXUs7xCYhG0rVMtmHV58eKlA5xFK waB0RC3hsNtclW3tonkIm55YL19YJiQ78R8QZ58B3Cj2rb8Z2CSmbpQ1Yzzjgdj6obr36nHGfu6 N5O1pWZutsHA2lvU40Sxs/nwYG5dtroKrA2vIh X-Google-Smtp-Source: ABdhPJxafVkalSPgEgpO9vY6pYGy+ixEVeJiLGOuiyaNj/lC+oK01FpDrp2hkxiwurJcBB6+GsFlFw== X-Received: by 2002:a17:907:971b:b0:6db:32b4:f262 with SMTP id jg27-20020a170907971b00b006db32b4f262mr5672520ejc.522.1646936237341; Thu, 10 Mar 2022 10:17:17 -0800 (PST) Received: from [10.137.0.18] (static-84-42-175-93.net.upcbroadband.cz. [84.42.175.93]) by smtp.gmail.com with ESMTPSA id f1-20020a056402194100b00416b174987asm1033799edz.35.2022.03.10.10.17.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Mar 2022 10:17:16 -0800 (PST) Content-Type: multipart/mixed; boundary="------------5QuaS66ciNQwhkcuczqU8nQ3" Message-ID: Date: Thu, 10 Mar 2022 19:17:15 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: Column Filtering in Logical Replication Content-Language: en-US To: "houzj.fnst@fujitsu.com" , Amit Kapila Cc: Peter Eisentraut , Alvaro Herrera , Justin Pryzby , Rahila Syed , Peter Smith , pgsql-hackers , "shiy.fnst@fujitsu.com" References: <202201120041.p24wvsfcsope@alvherre.pgsql> From: Tomas Vondra In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------5QuaS66ciNQwhkcuczqU8nQ3 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 3/9/22 11:12, houzj.fnst@fujitsu.com wrote: > Hi, > > Here are some tests and results about the table sync query of > column filter patch and row filter. > > 1) multiple publications which publish schema of parent table and partition. > ----pub > create schema s1; > create table s1.t (a int, b int, c int) partition by range (a); > create table t_1 partition of s1.t for values from (1) to (10); > create publication pub1 for all tables in schema s1; > create publication pub2 for table t_1(b); > > ----sub > - prepare tables > CREATE SUBSCRIPTION sub CONNECTION 'port=10000 dbname=postgres' PUBLICATION pub1, pub2; > > When doing table sync for 't_1', the column list will be (b). I think it should > be no filter because table t_1 is also published via ALL TABLES IN SCHMEA > publication. > > For Row Filter, it will use no filter for this case. > > > 2) one publication publishes both parent and child > ----pub > create table t (a int, b int, c int) partition by range (a); > create table t_1 partition of t for values from (1) to (10) > partition by range (a); > create table t_2 partition of t_1 for values from (1) to (10); > > create publication pub2 for table t_1(a), t_2 > with (PUBLISH_VIA_PARTITION_ROOT); > > ----sub > - prepare tables > CREATE SUBSCRIPTION sub CONNECTION 'port=10000 dbname=postgres' PUBLICATION pub2; > > When doing table sync for table 't_1', it has no column list. I think the > expected column list is (a). > > For Row Filter, it will use the row filter of the top most parent table(t_1) in > this case. > > > 3) one publication publishes both parent and child > ----pub > create table t (a int, b int, c int) partition by range (a); > create table t_1 partition of t for values from (1) to (10) > partition by range (a); > create table t_2 partition of t_1 for values from (1) to (10); > > create publication pub2 for table t_1(a), t_2(b) > with (PUBLISH_VIA_PARTITION_ROOT); > > ----sub > - prepare tables > CREATE SUBSCRIPTION sub CONNECTION 'port=10000 dbname=postgres' PUBLICATION pub2; > > When doing table sync for table 't_1', the column list would be (a, b). I think > the expected column list is (a). > > For Row Filter, it will use the row filter of the top most parent table(t_1) in > this case. > Attached is an updated patch version, addressing all of those issues. 0001 is a bugfix, reworking how we calculate publish_as_relid. The old approach was unstable with multiple publications, giving different results depending on order of the publications. This should be backpatched into PG13 where publish_via_partition_root was introduced, I think. 0002 is the main patch, merging the changes proposed by Peter and fixing the issues reported here. In most cases this means adopting the code used for row filters, and perhaps simplifying it a bit. But I also tried to implement a row-filter test for 0001, and I'm not sure I understand the behavior I observe. Consider this: -- a chain of 3 partitions (on both publisher and subscriber) CREATE TABLE test_part_rf (a int primary key, b int, c int) PARTITION BY LIST (a); CREATE TABLE test_part_rf_1 PARTITION OF test_part_rf FOR VALUES IN (1,2,3,4,5) PARTITION BY LIST (a); CREATE TABLE test_part_rf_2 PARTITION OF test_part_rf_1 FOR VALUES IN (1,2,3,4,5); -- initial data INSERT INTO test_part_rf VALUES (1, 5, 100); INSERT INTO test_part_rf VALUES (2, 15, 200); -- two publications, each adding a different partition CREATE PUBLICATION test_pub_part_1 FOR TABLE test_part_rf_1 WHERE (b < 10) WITH (publish_via_partition_root); CREATE PUBLICATION test_pub_part_2 FOR TABLE test_part_rf_2 WHERE (b > 10) WITH (publish_via_partition_root); -- now create the subscription (also try opposite ordering) CREATE SUBSCRIPTION test_part_sub CONNECTION '...' PUBLICATION test_pub_part_1, test_pub_part_2; -- wait for sync -- inert some more data INSERT INTO test_part_rf VALUES (3, 6, 300); INSERT INTO test_part_rf VALUES (4, 16, 400); -- wait for catchup Now, based on the discussion here, my expectation is that we'll use the row filter from the top-most ancestor in any publication, which in this case is test_part_rf_1. Hence the filter should be (b < 10). So I'd expect these rows to be replicated: 1,5,100 3,6,300 But that's not what I get, unfortunately. I get different results, depending on the order of publications: 1) test_pub_part_1, test_pub_part_2 1|5|100 2|15|200 3|6|300 4|16|400 2) test_pub_part_2, test_pub_part_1 3|6|300 4|16|400 That seems pretty bizarre, because it either means we're not enforcing any filter or some strange combination of filters (notice that for (2) we skip/replicate rows matching either filter). I have to be missing something important, but this seems confusing. There's a patch adding a simple test case to 028_row_filter.sql (named .txt, so as not to confuse cfbot). FWIW I'm not convinced applying just the filters (both row and column) is the right approach. It might be OK for a single publication, but with multiple publications not so much. If you list multiple publications for a subscription, it seems natural to expect a union of all the data, a bit as if there were multiple subscriptions. But what you actually get is some subset, depending on what other relations the other publications include. Of course, this only happens if the publications include different ancestors. If all include the same ancestor, everything works fine and you get the "union" of data. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------5QuaS66ciNQwhkcuczqU8nQ3 Content-Type: text/plain; charset=UTF-8; name="row-filter-test.txt" Content-Disposition: attachment; filename="row-filter-test.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOF9yb3dfZmlsdGVyLnBs IGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI4X3Jvd19maWx0ZXIucGwKaW5kZXggODli YjM2NGU5ZGEuLjMzMzg5NWUwODFiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMjhfcm93X2ZpbHRlci5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w Mjhfcm93X2ZpbHRlci5wbApAQCAtNjkxLDYgKzY5MSw3NSBAQCBpcygkcmVzdWx0LCBxcSh0 fDEpLCAnY2hlY2sgcmVwbGljYXRlZCByb3dzIHRvIHRhYl9yb3dmaWx0ZXJfdG9hc3QnKTsK ICMgVGVzdGNhc2UgZW5kOiBGT1IgVEFCTEUgd2l0aCByb3cgZmlsdGVyIHB1YmxpY2F0aW9u cwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KIAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ Q1JFQVRFIFRBQkxFIHRlc3RfcGFydF9yZiAoYSBpbnQgcHJpbWFyeSBrZXksIGIgaW50LCBj IGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRf cmZfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X3JmIEZPUiBWQUxVRVMgSU4gKDEsMiwzLDQs NSkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfcmZf MiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X3JmXzEgRk9SIFZBTFVFUyBJTiAoMSwyLDMsNCw1 KTsKKworCUNSRUFURSBQVUJMSUNBVElPTiB0ZXN0X3B1Yl9wYXJ0XzEgRk9SIFRBQkxFIHRl c3RfcGFydF9yZl8xIFdIRVJFIChiIDwgMTApIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gdGVzdF9wdWJfcGFydF8yIEZPUiBUQUJM RSB0ZXN0X3BhcnRfcmZfMiBXSEVSRSAoYiA+IDEwKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCk7CisKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfcmYgVkFMVUVTICgxLCA1 LCAxMDApOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9yZiBWQUxVRVMgKDIsIDE1LCAyMDAp OworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X3JmIChhIGludCBwcmltYXJ5IGtleSwgYiBpbnQs IGMgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFy dF9yZl8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfcmYgRk9SIFZBTFVFUyBJTiAoMSwyLDMs NCw1KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9y Zl8yIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfcmZfMSBGT1IgVkFMVUVTIElOICgxLDIsMyw0 LDUpOworCisJQ1JFQVRFIFNVQlNDUklQVElPTiB0ZXN0X3BhcnRfc3ViIENPTk5FQ1RJT04g JyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gdGVzdF9wdWJfcGFydF8xLCB0ZXN0 X3B1Yl9wYXJ0XzI7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRp bCgncG9zdGdyZXMnLCAkc3luY2VkX3F1ZXJ5KQorICBvciBkaWUgIlRpbWVkIG91dCB3aGls ZSB3YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRvIHN5bmNocm9uaXplIGRhdGEiOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0 ZXN0X3BhcnRfcmYgVkFMVUVTICgzLCA2LCAzMDApOworCUlOU0VSVCBJTlRPIHRlc3RfcGFy dF9yZiBWQUxVRVMgKDQsIDE2LCA0MDApOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgndGVzdF9wYXJ0X3N1YicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKFNFTEVDVCAqIEZST00gdGVzdF9w YXJ0X3JmIE9SREVSIEJZIGEpKTsKK2lzKCRyZXN1bHQsCisgIHFxKDF8NXwxMDAKKzN8Nnwz MDApLCAnY2hlY2sgcmVwbGljYXRlZCByb3dzIHdpdGggbXVsdGlwbGUgcm93IGZpbHRlcnMn KTsKKworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFRS VU5DQVRFIHRlc3RfcGFydF9yZikpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ3Rlc3RfcGFydF9zdWInKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCURST1AgU1VCU0NSSVBUSU9OIHRlc3RfcGFydF9zdWIpKTsK KworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJU IElOVE8gdGVzdF9wYXJ0X3JmIFZBTFVFUyAoMSwgNSwgMTAwKTsKKwlJTlNFUlQgSU5UTyB0 ZXN0X3BhcnRfcmYgVkFMVUVTICgyLCAxNSwgMjAwKTsKKykpOworCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFNVQlNDUklQVElPTiB0 ZXN0X3BhcnRfc3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJ T04gdGVzdF9wdWJfcGFydF8yLCB0ZXN0X3B1Yl9wYXJ0XzE7CispKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAkc3luY2VkX3F1ZXJ5KQor ICBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRvIHN5 bmNocm9uaXplIGRhdGEiOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlUUlVOQ0FURSB0ZXN0X3BhcnRfcmY7CisJSU5TRVJUIElOVE8gdGVzdF9w YXJ0X3JmIFZBTFVFUyAoMywgNiwgMzAwKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfcmYg VkFMVUVTICg0LCAxNiwgNDAwKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3Rlc3RfcGFydF9zdWInKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcShTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydF9y ZiBPUkRFUiBCWSBhKSk7CitpcygkcmVzdWx0LAorICBxcSgxfDV8MTAwCiszfDZ8MzAwKSwg J2NoZWNrIHJlcGxpY2F0ZWQgcm93cyB3aXRoIG11bHRpcGxlIHJvdyBmaWx0ZXJzJyk7CisK ICRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2Zhc3QnKTsKICRub2RlX3B1Ymxpc2hlci0+c3Rv cCgnZmFzdCcpOwogCg== --------------5QuaS66ciNQwhkcuczqU8nQ3 Content-Type: text/x-patch; charset=UTF-8; name="0001-fixup-publish_as_relid-20220310.patch" Content-Disposition: attachment; filename="0001-fixup-publish_as_relid-20220310.patch" Content-Transfer-Encoding: base64 RnJvbSA1MDcwYTI2ZmI1NGI5NTY1NTdmNGJhM2E0NGI3OTZhYjRjMjMyYzkzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogV2VkLCA5IE1hciAyMDIyIDE4OjEwOjU2ICswMTAwClN1YmplY3Q6IFtQ QVRDSCAxLzJdIGZpeHVwOiBwdWJsaXNoX2FzX3JlbGlkCgotLS0KIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgfCAzMiArKysrKysrKysrKysrKysrKysr LS0KIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4 IGVhNTdhMDQ3N2YwLi5kYmFjMjY5MGI3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xODE1LDExICsxODE1LDE3IEBAIGdldF9y ZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQog CQkJUHVibGljYXRpb24gKnB1YiA9IGxmaXJzdChsYyk7CiAJCQlib29sCQlwdWJsaXNoID0g ZmFsc2U7CiAKKwkJCS8qCisJCQkgKiBVbmRlciB3aGF0IHJlbGlkIHNob3VsZCB3ZSBwdWJs aXNoIGNoYW5nZXMgaW4gdGhpcyBwdWJsaWNhdGlvbj8KKwkJCSAqIFdlJ2xsIHVzZSB0aGUg dG9wLW1vc3QgcmVsaWQgYWNyb3NzIGFsbCBwdWJsaWNhdGlvbnMuCisJCQkgKi8KKwkJCU9p ZAkJCXB1Yl9yZWxpZCA9IHJlbGlkOworCiAJCQlpZiAocHViLT5hbGx0YWJsZXMpCiAJCQl7 CiAJCQkJcHVibGlzaCA9IHRydWU7CiAJCQkJaWYgKHB1Yi0+cHVidmlhcm9vdCAmJiBhbV9w YXJ0aXRpb24pCi0JCQkJCXB1Ymxpc2hfYXNfcmVsaWQgPSBsbGFzdF9vaWQoZ2V0X3BhcnRp dGlvbl9hbmNlc3RvcnMocmVsaWQpKTsKKwkJCQkJcHViX3JlbGlkID0gbGxhc3Rfb2lkKGdl dF9wYXJ0aXRpb25fYW5jZXN0b3JzKHJlbGlkKSk7CiAJCQl9CiAKIAkJCWlmICghcHVibGlz aCkKQEAgLTE4NDQsNyArMTg1MCw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERh dGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCQl7CiAJCQkJCQlhbmNlc3Rvcl9w dWJsaXNoZWQgPSB0cnVlOwogCQkJCQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkKLQkJCQkJCQlw dWJsaXNoX2FzX3JlbGlkID0gYW5jZXN0b3I7CisJCQkJCQkJcHViX3JlbGlkID0gYW5jZXN0 b3I7CiAJCQkJCX0KIAkJCQl9CiAKQEAgLTE4NjIsMTIgKzE4NjgsMzQgQEAgZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQlp ZiAocHVibGlzaCAmJgogCQkJCShyZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUgfHwgcHViLT5wdWJ2aWFyb290KSkKIAkJCXsKKwkJCQlMaXN0ICphbmNlc3RvcnM7CisK IAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgfD0gcHViLT5wdWJhY3Rpb25zLnB1 Ymluc2VydDsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgfD0gcHViLT5wdWJh Y3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0g cHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0 cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CiAKIAkJCQlyZWxfcHVi bGljYXRpb25zID0gbGFwcGVuZChyZWxfcHVibGljYXRpb25zLCBwdWIpOworCisJCQkJLyoK KwkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5nZXMgYXMgdGhlIHRvcC1tb3N0 IGFuY2VzdG9yCisJCQkJICogYWNyb3NzIGFsbCBwdWJsaWNhdGlvbnMuIFNvIHdlIGZldGNo IGFsbCBhbmNlc3RvcnMgb2YgdGhlCisJCQkJICogcmVsaWQgY2FsY3VsYXRlZCBmb3IgdGhp cyBwdWJsaWNhdGlvbiwgYW5kIGNoZWNrIGlmIHRoZQorCQkJCSAqIGFscmVhZHkgY2FsY3Vs YXRlZCB2YWx1ZSBpcyBpbiB0aGUgbGlzdC4gSWYgeWVzLCB3ZSBjYW4KKwkJCQkgKiBpZ25v cmUgdGhlIG5ldyB2YWx1ZSAoYXMgaXQncyBhIGNoaWxkKS4gT3RoZXJ3aXNlIHRoZSBuZXcK KwkJCQkgKiB2YWx1ZSBpcyBhbiBhbmNlc3Rvciwgc28gd2Uga2VlcCBpdC4KKwkJCQkgKi8K KwkJCQlhbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhwdWJfcmVsaWQpOwor CisJCQkJLyoKKwkJCQkgKiBUaGUgbmV3IHB1Yl9yZWxpZCBpcyBhIGNoaWxkIG9mIHRoZSBj dXJyZW50IHB1Ymxpc2hfYXNfcmVsaWQKKwkJCQkgKiB2YWx1ZSwgc28gd2UgY2FuIGlnbm9y ZSBpdC4KKwkJCQkgKi8KKwkJCQlpZiAobGlzdF9tZW1iZXJfb2lkKGFuY2VzdG9ycywgcHVi bGlzaF9hc19yZWxpZCkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogVGhlIG5ldyB2YWx1 ZSBpcyBhbiBhbmNlc3Rvciwgc28gbGV0J3Mga2VlcCBpdC4gKi8KKwkJCQlwdWJsaXNoX2Fz X3JlbGlkID0gcHViX3JlbGlkOwogCQkJfQogCQl9CiAKLS0gCjIuMzQuMQoK --------------5QuaS66ciNQwhkcuczqU8nQ3 Content-Type: text/x-patch; charset=UTF-8; name="0002-Allow-specifying-column-filters-for-logical-20220310.patch" Content-Disposition: attachment; filename*0="0002-Allow-specifying-column-filters-for-logical-20220310.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxOWE1ODBlMWQ4ZTU3NzJjZDE4YjkzM2NjNTAwYmJhMzZkNTRmZmZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxMCBNYXIgMjAyMiAxNzozMTo1NyArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMi8yXSBBbGxvdyBzcGVjaWZ5aW5nIGNvbHVtbiBmaWx0ZXJzIGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uCgpUaGlzIGFsbG93cyBzcGVjaWZ5aW5nIGFuIG9wdGlvbmFs IGNvbHVtbiBsaXN0IHdoZW4gYWRkaW5nIGEgdGFibGUgdG8KbG9naWNhbCByZXBsaWNhdGlv bi4gQ29sdW1ucyBub3QgaW5jbHVkZWQgb24gdGhpcyBsaXN0IGFyZSBub3Qgc2VudCB0bwp0 aGUgc3Vic2NyaWJlci4gVGhlIGZpbHRlciBpcyBzcGVjaWZpZWQgYXMgYSBsaXN0IG9mIGNv bHVtbnMgYWZ0ZXIgdGhlCnRhYmxlIG5hbWUsIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLgoK Rm9yIFVQREFURS9ERUxFVEUgcHVibGljYXRpb25zLCB0aGUgY29sdW1uIGZpbHRlciBuZWVk cyB0byBjb3ZlciBhbGwKUkVQTElDQSBJREVOVElUWSBjb2x1bW5zLiBGb3IgSU5TRVJUIHB1 YmxpY2F0aW9ucywgdGhlIGNvbHVtbiBsaXN0IGlzCmFyYml0cmFyeSBhbmQgbWF5IG9taXQg c29tZSBSRVBMSUNBIElERU5USVRZIGNvbHVtbnMuIEZ1cnRoZXJtb3JlLCBpZgp0aGUgdGFi bGUgdXNlcyBSRVBMSUNBIElERU5USVRZIEZVTEwsIGNvbHVtbiBmaWx0ZXIgaXMgbm90IGFs bG93ZWQuCgpUaGUgY29sdW1uIGZpbHRlciBjYW4gY29udGFpbiBvbmx5IHNpbXBsZSBjb2x1 bW4gcmVmZXJlbmNlcy4gQ29tcGxleApleHByZXNzaW9ucywgZnVuY3Rpb24gY2FsbHMgZXRj LiBhcmUgbm90IGFsbG93ZWQuIFRoaXMgcmVzdHJpY3Rpb24gY291bGQKYmUgcmVsYXhlZCBp biB0aGUgZnV0dXJlLgoKRHVyaW5nIHRoZSBpbml0aWFsIHRhYmxlIHN5bmNocm9uaXphdGlv biwgb25seSBjb2x1bW5zIHNwZWNpZmllZCBpbiB0aGUKY29sdW1uIGZpbHRlciBhcmUgY29w aWVkIHRvIHRoZSBzdWJzY3JpYmVyLiBJZiB0aGUgc3Vic2NyaXB0aW9uIGhhcwpzZXZlcmFs IHB1YmxpY2F0aW9ucywgY29udGFpbmluZyB0aGUgc2FtZSB0YWJsZSB3aXRoIGRpZmZlcmVu dCBjb2x1bW4KZmlsdGVycywgY29sdW1ucyBzcGVjaWZpZWQgaW4gYW55IG9mIHRoZSBmaWx0 ZXJzIHdpbGwgYmUgY29waWVkLiBUaGlzCm1lYW5zIGFsbCBjb2x1bW5zIGFyZSByZXBsaWNh dGVkIGlmIHRoZSB0YWJsZSBoYXMgbm8gY29sdW1uIGZpbHRlciBhdAphbGwgKHdoaWNoIGlz IHRyZWF0ZWQgYXMgY29sdW1uIGZpbHRlciB3aXRoIGFsbCBjb2x1bW5zKSwgb2Ygd2hlbiBv ZiB0aGUKcHVibGljYXRpb25zIGlzIGRlZmluZWQgYXMgRk9SIEFMTCBUQUJMRVMgKHBvc3Np Ymx5IElOIFNDSEVNQSBmb3IgdGhlCnNjaGVtYSBvZiB0aGUgdGFibGUpLgoKRm9yIHBhcnRp dGlvbmVkIHRhYmxlcywgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgZGV0ZXJtaW5lcyB3 aGV0aGVyCnRoZSByb3cgZmlsdGVyIGZvciB0aGUgcm9vdCBvciBsZWFmIHJlbGF0aW9uIHdp bGwgYmUgdXNlZC4gSWYgdGhlCnBhcmFtZXRlciBpcyAnZmFsc2UnICh0aGUgZGVmYXVsdCks IHRoZSBmaWx0ZXIgZGVmaW5lZCBmb3IgdGhlIGxlYWYKcmVsYXRpb24gaXMgdXNlZC4gT3Ro ZXJ3aXNlLCB0aGUgY29sdW1uIGZpbHRlciBmb3IgdGhlIHJvb3QgcGFydGl0aW9uCndpbGwg YmUgdXNlZC4KClBzcWwgY29tbWFuZHMgXGRScCsgYW5kIFxkIDx0YWJsZS1uYW1lPiBub3cg ZGlzcGxheSBhbnkgY29sdW1uIGZpbHRlcnMuCgpBdXRob3I6IFJhaGlsYSBTeWVkIDxyYWhp bGFzeWVkOTBAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NB SDJMMjh2ZGRCX05GZFJWcHV5UkJKRUJXano0QlN5VEI9X2VrdE5SSDhOSjFqZjk1Z0BtYWls LmdtYWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAg ICAgICAgfCAgIDE1ICstCiBkb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCAgICAgICAgICAg ICAgICAgIHwgICAgMyArLQogZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5z Z21sICAgICB8ICAgMjcgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9u LnNnbWwgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMgICAgICAgIHwgIDI1NiArKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmMgICAgICB8ICAzNjQgKysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyAgICAgICAgICAgIHwgICAzNiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1JlcGxpY2F0aW9uLmMgICAgICB8ICAgMTkgKy0KIHNyYy9iYWNrZW5kL25vZGVzL2NvcHlm dW5jcy5jICAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL25vZGVzL2VxdWFs ZnVuY3MuYyAgICAgICAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFt LnkgICAgICAgICAgICAgICAgICAgfCAgIDYwICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Byb3RvLmMgICAgIHwgICA1NiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC90YWJsZXN5bmMuYyB8ICAxODQgKystCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIHwgIDE1NiArKy0KIHNyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgfCAgIDMzICstCiBzcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jICAgICAgICAgICAgICAgICAgIHwgICA0NyArLQogc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2Jpbi9wZ19kdW1w L3QvMDAyX3BnX2R1bXAucGwgICAgICAgICAgICB8ICAgNjAgKwogc3JjL2Jpbi9wc3FsL2Rl c2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICB8ICAgNDAgKy0KIHNyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgfCAgIDEzICsKIHNyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmggICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgIHwgICAgNCArLQogc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICAgICB8ICAgIDYgKy0KIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgfCAgMzc1ICsrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgICAgfCAgMjkwICsrKysrCiBz cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjlfY29sdW1uX2xpc3QucGwgIHwgMTEyNCArKysr KysrKysrKysrKysrKysrCiAyNyBmaWxlcyBjaGFuZ2VkLCAzMTEyIGluc2VydGlvbnMoKyks IDgxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAyOV9jb2x1bW5fbGlzdC5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXggODM5ODdh OTkwNDUuLmMwNDNkYTM3YWVlIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Mu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbApAQCAtNDM5Miw3ICs0Mzky LDcgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZn dDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgIDwvcGFyYT4KICAgICAg IDxwYXJhPgogICAgICAgIFRoaXMgaXMgYW4gYXJyYXkgb2YgPHN0cnVjdGZpZWxkPmluZG5h dHRzPC9zdHJ1Y3RmaWVsZD4gdmFsdWVzIHRoYXQKLSAgICAgICBpbmRpY2F0ZSB3aGljaCB0 YWJsZSBjb2x1bW5zIHRoaXMgaW5kZXggaW5kZXhlcy4gIEZvciBleGFtcGxlIGEgdmFsdWUK KyAgICAgICBpbmRpY2F0ZSB3aGljaCB0YWJsZSBjb2x1bW5zIHRoaXMgaW5kZXggaW5kZXhl cy4gIEZvciBleGFtcGxlLCBhIHZhbHVlCiAgICAgICAgb2YgPGxpdGVyYWw+MSAzPC9saXRl cmFsPiB3b3VsZCBtZWFuIHRoYXQgdGhlIGZpcnN0IGFuZCB0aGUgdGhpcmQgdGFibGUKICAg ICAgICBjb2x1bW5zIG1ha2UgdXAgdGhlIGluZGV4IGVudHJpZXMuICBLZXkgY29sdW1ucyBj b21lIGJlZm9yZSBub24ta2V5CiAgICAgICAgKGluY2x1ZGVkKSBjb2x1bW5zLiAgQSB6ZXJv IGluIHRoaXMgYXJyYXkgaW5kaWNhdGVzIHRoYXQgdGhlCkBAIC02MjYzLDYgKzYyNjMsMTkg QEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8 L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgICBSZWZlcmVuY2UgdG8gc2No ZW1hCiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4K KyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJj b2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnByYXR0cnM8L3N0cnVj dGZpZWxkPiA8dHlwZT5pbnQydmVjdG9yPC90eXBlPgorICAgICAgIChyZWZlcmVuY2VzIDxs aW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctYXR0cmlidXRlIj48c3RydWN0bmFtZT5wZ19hdHRy aWJ1dGU8L3N0cnVjdG5hbWU+PC9saW5rPi48c3RydWN0ZmllbGQ+YXR0bnVtPC9zdHJ1Y3Rm aWVsZD4pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGlzIGFu IGFycmF5IG9mIHZhbHVlcyB0aGF0IGluZGljYXRlcyB3aGljaCB0YWJsZSBjb2x1bW5zIGFy ZQorICAgICAgIHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uLiAgRm9yIGV4YW1wbGUsIGEgdmFs dWUgb2YgPGxpdGVyYWw+MSAzPC9saXRlcmFsPgorICAgICAgIHdvdWxkIG1lYW4gdGhhdCB0 aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCB0YWJsZSBjb2x1bW5zIGFyZSBwdWJsaXNoZWQuCisg ICAgICAgQSBudWxsIHZhbHVlIGluZGljYXRlcyB0aGF0IGFsbCBjb2x1bW5zIGFyZSBwdWJs aXNoZWQuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAgPC90Ym9k eT4KICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3Byb3RvY29sLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRleCAwNjk1 YmNkNDIzZS4uOTJjZDBmOWM5ZjcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wcm90b2Nv bC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC03MDA2LDcgKzcw MDYsOCBAQCBSZWxhdGlvbgogPC9saXN0aXRlbT4KIDwvdmFybGlzdGVudHJ5PgogPC92YXJp YWJsZWxpc3Q+Ci0gICAgICAgIE5leHQsIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBwYXJ0IGFw cGVhcnMgZm9yIGVhY2ggY29sdW1uIChleGNlcHQgZ2VuZXJhdGVkIGNvbHVtbnMpOgorICAg ICAgICBOZXh0LCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgcGFydCBhcHBlYXJzIGZvciBlYWNo IGNvbHVtbiBpbmNsdWRlZCBpbgorICAgICAgICB0aGUgcHVibGljYXRpb24gKGV4Y2VwdCBn ZW5lcmF0ZWQgY29sdW1ucyk6CiA8dmFyaWFibGVsaXN0PgogPHZhcmxpc3RlbnRyeT4KIDx0 ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5z Z21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sCmluZGV4IDMy Yjc1ZjZjNzhlLi40NzBkNTBhMjQ0NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9h bHRlcl9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHVi bGljYXRpb24uc2dtbApAQCAtMjUsMTIgKzI1LDEzIEBAIEFMVEVSIFBVQkxJQ0FUSU9OIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gQUREIDxy ZXBsYWNlCiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+bmFtZTwvcmVwbGFjZWFibGU+IFNFVCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gWywgLi4uXQogQUxURVIgUFVC TElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2Vh YmxlPiBEUk9QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9v YmplY3Q8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFNFVCAoIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9wYXJhbWV0ZXI8L3JlcGxh Y2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dmFsdWU8L3JlcGxh Y2VhYmxlPl0gWywgLi4uIF0gKQorQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBBTFRFUiBUQUJMRSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFNFVCBD T0xVTU5TIHsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFj ZWFibGU+IFssIC4uLl0gKSB8IEFMTCB9CiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IE9XTkVSIFRPIHsgPHJl cGxhY2VhYmxlPm5ld19vd25lcjwvcmVwbGFjZWFibGU+IHwgQ1VSUkVOVF9ST0xFIHwgQ1VS UkVOVF9VU0VSIHwgU0VTU0lPTl9VU0VSIH0KIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gUkVOQU1FIFRPIDxy ZXBsYWNlYWJsZT5uZXdfbmFtZTwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+d2hlcmUgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX29iamVjdDwvcmVwbGFj ZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KIAotICAgIFRBQkxFIFsgT05MWSBdIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAq IF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9u PC9yZXBsYWNlYWJsZT4gKSBdIFssIC4uLiBdCisgICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICog XSBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBs YWNlYWJsZT4gWywgLi4uIF0gKSBdIFsgV0hFUkUgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgXSBbLCAuLi4gXQogICAgIEFM TCBUQUJMRVMgSU4gU0NIRU1BIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNj aGVtYV9uYW1lPC9yZXBsYWNlYWJsZT4gfCBDVVJSRU5UX1NDSEVNQSB9IFssIC4uLiBdCiA8 L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CkBAIC02NCw2ICs2NSwxMiBAQCBBTFRF UiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVw bGFjZWFibGU+IFJFTkFNRSBUTyA8cgogICAgY29tbWFuZCByZXRhaW4gdGhlaXIgcHJldmlv dXMgc2V0dGluZ3MuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFRoZSA8bGl0ZXJhbD5B TFRFUiBUQUJMRSAuLi4gU0VUIENPTFVNTlM8L2xpdGVyYWw+IHZhcmlhbnQgYWxsb3dzIGNo YW5naW5nCisgICB0aGUgc2V0IG9mIGNvbHVtbnMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhl IHB1YmxpY2F0aW9uLiAgSWYgYSBjb2x1bW4gbGlzdAorICAgaXMgc3BlY2lmaWVkLCBpdCBt dXN0IGluY2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucy4KKyAgPC9wYXJhPgor CiAgIDxwYXJhPgogICAgVGhlIHJlbWFpbmluZyB2YXJpYW50cyBjaGFuZ2UgdGhlIG93bmVy IGFuZCB0aGUgbmFtZSBvZiB0aGUgcHVibGljYXRpb24uCiAgIDwvcGFyYT4KQEAgLTExMiw2 ICsxMTksMTQgQEAgQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHIKICAgICAgIHNwZWNpZmll ZCwgdGhlIHRhYmxlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnQgdGFibGVzIChpZiBhbnkpIGFy ZQogICAgICAgYWZmZWN0ZWQuICBPcHRpb25hbGx5LCA8bGl0ZXJhbD4qPC9saXRlcmFsPiBj YW4gYmUgc3BlY2lmaWVkIGFmdGVyIHRoZSB0YWJsZQogICAgICAgbmFtZSB0byBleHBsaWNp dGx5IGluZGljYXRlIHRoYXQgZGVzY2VuZGFudCB0YWJsZXMgYXJlIGluY2x1ZGVkLgorICAg ICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICBPcHRpb25hbGx5LCBhIGNvbHVtbiBs aXN0IGNhbiBiZSBzcGVjaWZpZWQuICBTZWUgPHhyZWYKKyAgICAgIGxpbmtlbmQ9InNxbC1j cmVhdGVwdWJsaWNhdGlvbiIvPiBmb3IgZGV0YWlscy4KKyAgICAgPC9wYXJhPgorCisgICAg IDxwYXJhPgogICAgICAgSWYgdGhlIG9wdGlvbmFsIDxsaXRlcmFsPldIRVJFPC9saXRlcmFs PiBjbGF1c2UgaXMgc3BlY2lmaWVkLCByb3dzIGZvcgogICAgICAgd2hpY2ggdGhlIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4KICAg ICAgIGV2YWx1YXRlcyB0byBmYWxzZSBvciBudWxsIHdpbGwgbm90IGJlIHB1Ymxpc2hlZC4g Tm90ZSB0aGF0IHBhcmVudGhlc2VzCkBAIC0xNzIsOSArMTg3LDE1IEBAIEFMVEVSIFBVQkxJ Q0FUSU9OIG5vaW5zZXJ0IFNFVCAocHVibGlzaCA9ICd1cGRhdGUsIGRlbGV0ZScpOwogICA8 L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBZGQgc29tZSB0YWJsZXMgdG8gdGhlIHB1YmxpY2F0 aW9uOgorICAgQWRkIHRhYmxlcyB0byB0aGUgcHVibGljYXRpb246Cis8cHJvZ3JhbWxpc3Rp bmc+CitBTFRFUiBQVUJMSUNBVElPTiBteXB1YmxpY2F0aW9uIEFERCBUQUJMRSB1c2VycyAo dXNlcl9pZCwgZmlyc3RuYW1lKSwgZGVwYXJ0bWVudHM7Cis8L3Byb2dyYW1saXN0aW5nPjwv cGFyYT4KKworICA8cGFyYT4KKyAgIENoYW5nZSB0aGUgc2V0IG9mIGNvbHVtbnMgcHVibGlz aGVkIGZvciBhIHRhYmxlOgogPHByb2dyYW1saXN0aW5nPgotQUxURVIgUFVCTElDQVRJT04g bXlwdWJsaWNhdGlvbiBBREQgVEFCTEUgdXNlcnMsIGRlcGFydG1lbnRzOworQUxURVIgUFVC TElDQVRJT04gbXlwdWJsaWNhdGlvbiBBTFRFUiBUQUJMRSB1c2VycyBTRVQgQ09MVU1OUyAo dXNlcl9pZCwgZmlyc3RuYW1lLCBsYXN0bmFtZSk7CiA8L3Byb2dyYW1saXN0aW5nPjwvcGFy YT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1 YmxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5z Z21sCmluZGV4IDQ5NzliOWI2NDZkLi5mYjJkMDEzMzkzYiAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCkBAIC0yOCw3ICsyOCw3IEBAIENSRUFURSBQ VUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFj ZWFibGU+CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnB1YmxpY2F0aW9uX29iamVjdDwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4K IAotICAgIFRBQkxFIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50 YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAqIF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdIFssIC4uLiBd CisgICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRh YmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBdIFsgV0hF UkUgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFj ZWFibGU+ICkgXSBbLCAuLi4gXQogICAgIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHsgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVtYV9uYW1lPC9yZXBsYWNlYWJsZT4gfCBD VVJSRU5UX1NDSEVNQSB9IFssIC4uLiBdCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNk aXY+CkBAIC04Niw2ICs4NiwxMyBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogICAgICAgPGxpdGVyYWw+ VFJVTkNBVEU8L2xpdGVyYWw+IGNvbW1hbmRzLgogICAgICA8L3BhcmE+CiAKKyAgICAgPHBh cmE+CisgICAgICBXaGVuIGEgY29sdW1uIGxpc3QgaXMgc3BlY2lmaWVkLCBvbmx5IHRoZSBu YW1lZCBjb2x1bW5zIGFyZSByZXBsaWNhdGVkLgorICAgICAgSWYgbm8gY29sdW1uIGxpc3Qg aXMgc3BlY2lmaWVkLCBhbGwgY29sdW1ucyBvZiB0aGUgdGFibGUgYXJlIHJlcGxpY2F0ZWQK KyAgICAgIHRocm91Z2ggdGhpcyBwdWJsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBjb2x1bW5z IGFkZGVkIGxhdGVyLiAgSWYgYSBjb2x1bW4KKyAgICAgIGxpc3QgaXMgc3BlY2lmaWVkLCBp dCBtdXN0IGluY2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucy4KKyAgICAgPC9w YXJhPgorCiAgICAgIDxwYXJhPgogICAgICAgT25seSBwZXJzaXN0ZW50IGJhc2UgdGFibGVz IGFuZCBwYXJ0aXRpb25lZCB0YWJsZXMgY2FuIGJlIHBhcnQgb2YgYQogICAgICAgcHVibGlj YXRpb24uICBUZW1wb3JhcnkgdGFibGVzLCB1bmxvZ2dlZCB0YWJsZXMsIGZvcmVpZ24gdGFi bGVzLApAQCAtMzI3LDYgKzMzNCwxNCBAQCBDUkVBVEUgUFVCTElDQVRJT04gcHJvZHVjdGlv bl9wdWJsaWNhdGlvbiBGT1IgVEFCTEUgdXNlcnMsIGRlcGFydG1lbnRzLCBBTEwgVEFCTAog ICAgPHN0cnVjdG5hbWU+c2FsZXM8L3N0cnVjdG5hbWU+OgogPHByb2dyYW1saXN0aW5nPgog Q1JFQVRFIFBVQkxJQ0FUSU9OIHNhbGVzX3B1YmxpY2F0aW9uIEZPUiBBTEwgVEFCTEVTIElO IFNDSEVNQSBtYXJrZXRpbmcsIHNhbGVzOworPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CisK KyAgPHBhcmE+CisgICBDcmVhdGUgYSBwdWJsaWNhdGlvbiB0aGF0IHB1Ymxpc2hlcyBhbGwg Y2hhbmdlcyBmb3IgdGFibGUgPHN0cnVjdG5hbWU+dXNlcnM8L3N0cnVjdG5hbWU+LAorICAg YnV0IHJlcGxpY2F0ZXMgb25seSBjb2x1bW5zIDxzdHJ1Y3RuYW1lPnVzZXJfaWQ8L3N0cnVj dG5hbWU+IGFuZAorICAgPHN0cnVjdG5hbWU+Zmlyc3RuYW1lPC9zdHJ1Y3RuYW1lPjoKKzxw cm9ncmFtbGlzdGluZz4KK0NSRUFURSBQVUJMSUNBVElPTiB1c2Vyc19maWx0ZXJlZCBGT1Ig VEFCTEUgdXNlcnMgKHVzZXJfaWQsIGZpcnN0bmFtZSk7CiA8L3Byb2dyYW1saXN0aW5nPjwv cGFyYT4KICA8L3JlZnNlY3QxPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMKaW5kZXggMjU5OThmYmIzOWIuLjMyNzVhN2M4YjljIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbi5jCkBAIC00NSw2ICs0NSw5IEBACiAjaW5jbHVkZSAidXRpbHMv cmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAorc3RhdGljIHZvaWQgcHVi bGljYXRpb25fdHJhbnNsYXRlX2NvbHVtbnMoUmVsYXRpb24gdGFyZ2V0cmVsLCBMaXN0ICpj b2x1bW5zLAorCQkJCQkJCQkJCSAgaW50ICpuYXR0cywgQXR0ck51bWJlciAqKmF0dHJzKTsK KwogLyoKICAqIENoZWNrIGlmIHJlbGF0aW9uIGNhbiBiZSBpbiBnaXZlbiBwdWJsaWNhdGlv biBhbmQgdGhyb3dzIGFwcHJvcHJpYXRlCiAgKiBlcnJvciBpZiBub3QuCkBAIC0zMjgsNiAr MzMxLDggQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRp b25SZWxJbmZvICpwcmksCiAJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHRhcmdl dHJlbCk7CiAJT2lkCQkJcHVicmVsb2lkOwogCVB1YmxpY2F0aW9uICpwdWIgPSBHZXRQdWJs aWNhdGlvbihwdWJpZCk7CisJQXR0ck51bWJlciAqYXR0YXJyYXk7CisJaW50CQkJbmF0dHMg PSAwOwogCU9iamVjdEFkZHJlc3MgbXlzZWxmLAogCQkJCXJlZmVyZW5jZWQ7CiAJTGlzdAkg ICAqcmVsaWRzID0gTklMOwpAQCAtMzU1LDYgKzM2MCwxNCBAQCBwdWJsaWNhdGlvbl9hZGRf cmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAogCWNoZWNr X3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbih0YXJnZXRyZWwpOwogCisJLyoKKwkgKiBUcmFu c2xhdGUgY29sdW1uIG5hbWVzIHRvIGF0dG51bXMgYW5kIGNoZWNrIHRoZSBjb2x1bW4gbGlz dCBpcyB2YWxpZC4KKwkgKiBXZSBhbHNvIGRlY29uc3RydWN0IHRoZSBiaXRtYXAgaW50byBh biBhcnJheSBvZiBhdHRudW1zLCBmb3Igc3RvcmluZworCSAqIGluIHRoZSBjYXRhbG9nLgor CSAqLworCXB1YmxpY2F0aW9uX3RyYW5zbGF0ZV9jb2x1bW5zKHByaS0+cmVsYXRpb24sIHBy aS0+Y29sdW1ucywKKwkJCQkJCQkJICAmbmF0dHMsICZhdHRhcnJheSk7CisKIAkvKiBGb3Jt IGEgdHVwbGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOwogCW1l bXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpAQCAtMzY3LDYgKzM4MCwxNyBA QCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbElu Zm8gKnByaSwKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJyZWxpZCAtIDFd ID0KIAkJT2JqZWN0SWRHZXREYXR1bShyZWxpZCk7CiAKKwkvKiBBZGQgY29sdW1uIGxpc3Qs IGlmIGF2YWlsYWJsZSAqLworCWlmIChwcmktPmNvbHVtbnMpCisJeworCQlpbnQydmVjdG9y ICpwcmF0dHJzOworCisJCXByYXR0cnMgPSBidWlsZGludDJ2ZWN0b3IoYXR0YXJyYXksIG5h dHRzKTsKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMgLSAxXSA9 IFBvaW50ZXJHZXREYXR1bShwcmF0dHJzKTsKKwl9CisJZWxzZQorCQludWxsc1tBbnVtX3Bn X3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzIC0gMV0gPSB0cnVlOworCiAJLyogQWRkIHF1YWxp ZmljYXRpb25zLCBpZiBhdmFpbGFibGUgKi8KIAlpZiAocHJpLT53aGVyZUNsYXVzZSAhPSBO VUxMKQogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsIC0gMV0gPSBD U3RyaW5nR2V0VGV4dERhdHVtKG5vZGVUb1N0cmluZyhwcmktPndoZXJlQ2xhdXNlKSk7CkBA IC0zODIsNiArNDA2LDE0IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQs IFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCS8qIFJlZ2lzdGVyIGRlcGVuZGVuY2llcyBh cyBuZWVkZWQgKi8KIAlPYmplY3RBZGRyZXNzU2V0KG15c2VsZiwgUHVibGljYXRpb25SZWxS ZWxhdGlvbklkLCBwdWJyZWxvaWQpOwogCisJLyogQWRkIGRlcGVuZGVuY3kgb24gdGhlIGNv bHVtbnMsIGlmIGFueSBhcmUgbGlzdGVkICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuYXR0 czsgaSsrKQorCXsKKwkJT2JqZWN0QWRkcmVzc1N1YlNldChyZWZlcmVuY2VkLCBSZWxhdGlv blJlbGF0aW9uSWQsIHJlbGlkLCBhdHRhcnJheVtpXSk7CisJCXJlY29yZERlcGVuZGVuY3lP bigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5DWV9BVVRPKTsKKwl9CisJcGZyZWUo YXR0YXJyYXkpOworCiAJLyogQWRkIGRlcGVuZGVuY3kgb24gdGhlIHB1YmxpY2F0aW9uICov CiAJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBQdWJsaWNhdGlvblJlbGF0aW9uSWQs IHB1YmlkKTsKIAlyZWNvcmREZXBlbmRlbmN5T24oJm15c2VsZiwgJnJlZmVyZW5jZWQsIERF UEVOREVOQ1lfQVVUTyk7CkBAIC00MTUsNiArNDQ3LDE1NCBAQCBwdWJsaWNhdGlvbl9hZGRf cmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAlyZXR1cm4g bXlzZWxmOwogfQogCisvKgorICogVXBkYXRlIHRoZSBjb2x1bW4gbGlzdCBmb3IgYSByZWxh dGlvbiBpbiBhIHB1YmxpY2F0aW9uLgorICovCit2b2lkCitwdWJsaWNhdGlvbl9zZXRfdGFi bGVfY29sdW1ucyhSZWxhdGlvbiBwdWJyZWwsIEhlYXBUdXBsZSBwdWJyZWx0dXAsCisJCQkJ CQkJICBSZWxhdGlvbiB0YXJnZXRyZWwsIExpc3QgKmNvbHVtbnMpCit7CisJQXR0ck51bWJl ciAqYXR0YXJyYXk7CisJSGVhcFR1cGxlCWNvcHl0dXA7CisJaW50CQkJbmF0dHM7CisJYm9v bAkJbnVsbHNbTmF0dHNfcGdfcHVibGljYXRpb25fcmVsXTsKKwlib29sCQlyZXBsYWNlc1tO YXR0c19wZ19wdWJsaWNhdGlvbl9yZWxdOworCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfcHVi bGljYXRpb25fcmVsXTsKKworCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsK KwltZW1zZXQobnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKKwltZW1zZXQocmVwbGFj ZXMsIGZhbHNlLCBzaXplb2YocmVwbGFjZXMpKTsKKworCXJlcGxhY2VzW0FudW1fcGdfcHVi bGljYXRpb25fcmVsX3ByYXR0cnMgLSAxXSA9IHRydWU7CisKKwlkZWxldGVEZXBlbmRlbmN5 UmVjb3Jkc0ZvckNsYXNzKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCSgoRm9y bV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVChwdWJyZWx0dXApKS0+b2lkLAorCQkJ CQkJCQkJUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJREVQRU5ERU5DWV9BVVRPKTsK KworCWlmIChjb2x1bW5zID09IE5VTEwpCisJeworCQludWxsc1tBbnVtX3BnX3B1YmxpY2F0 aW9uX3JlbF9wcmF0dHJzIC0gMV0gPSB0cnVlOworCX0KKwllbHNlCisJeworCQlPYmplY3RB ZGRyZXNzCW15c2VsZiwKKwkJCQkJCXJlZmVyZW5jZWQ7CisJCWludDJ2ZWN0b3IJICAgKnBy YXR0cnM7CisJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsCXB1YnJlbDsKKworCQlwdWJsaWNh dGlvbl90cmFuc2xhdGVfY29sdW1ucyh0YXJnZXRyZWwsIGNvbHVtbnMsICZuYXR0cywgJmF0 dGFycmF5KTsKKworCQkvKiBYWFggInB1YiIgaXMgbGVha2VkIGhlcmUgPz8/ICovCisKKwkJ cHJhdHRycyA9IGJ1aWxkaW50MnZlY3RvcihhdHRhcnJheSwgbmF0dHMpOworCQl2YWx1ZXNb QW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycyAtIDFdID0gUG9pbnRlckdldERhdHVt KHByYXR0cnMpOworCisJCS8qIEFkZCBkZXBlbmRlbmNpZXMgb24gdGhlIG5ldyBsaXN0IG9m IGNvbHVtbnMgKi8KKwkJcHVicmVsID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRT VFJVQ1QocHVicmVsdHVwKTsKKwkJT2JqZWN0QWRkcmVzc1NldChteXNlbGYsIFB1YmxpY2F0 aW9uUmVsUmVsYXRpb25JZCwgcHVicmVsLT5vaWQpOworCisJCWZvciAoaW50IGkgPSAwOyBp IDwgbmF0dHM7IGkrKykKKwkJeworCQkJT2JqZWN0QWRkcmVzc1N1YlNldChyZWZlcmVuY2Vk LCBSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodGFyZ2V0 cmVsKSwgYXR0YXJyYXlbaV0pOworCQkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZy ZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCQl9CisJfQorCisJY29weXR1cCA9IGhl YXBfbW9kaWZ5X3R1cGxlKHB1YnJlbHR1cCwgUmVsYXRpb25HZXREZXNjcihwdWJyZWwpLAor CQkJCQkJCQl2YWx1ZXMsIG51bGxzLCByZXBsYWNlcyk7CisKKwlDYXRhbG9nVHVwbGVVcGRh dGUocHVicmVsLCAmcHVicmVsdHVwLT50X3NlbGYsIGNvcHl0dXApOworCisJaGVhcF9mcmVl dHVwbGUoY29weXR1cCk7Cit9CisKKy8qCisgKiBxc29ydCBjb21wYXJhdG9yIGZvciBhdHRu dW1zCisgKgorICogWFhYIFdlIGFscmVhZHkgaGF2ZSBjb21wYXJlX2ludDE2LCBzbyBtYXli ZSBsZXQncyBzaGFyZSB0aGF0LCBzb21laG93PworICovCitzdGF0aWMgaW50Citjb21wYXJl X2ludDE2KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJaW50CQkJYXYgPSAq KGNvbnN0IGludDE2ICopIGE7CisJaW50CQkJYnYgPSAqKGNvbnN0IGludDE2ICopIGI7CisK KwkvKiB0aGlzIGNhbid0IG92ZXJmbG93IGlmIGludCBpcyB3aWRlciB0aGFuIGludDE2ICov CisJcmV0dXJuIChhdiAtIGJ2KTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhIGxpc3Qgb2Yg Y29sdW1uIG5hbWVzIHRvIGFuIGFycmF5IG9mIGF0dHJpYnV0ZSBudW1iZXJzCisgKiBhbmQg YSBCaXRtYXBzZXQgd2l0aCB0aGVtOyB2ZXJpZnkgdGhhdCBlYWNoIGF0dHJpYnV0ZSBpcyBh cHByb3ByaWF0ZQorICogdG8gaGF2ZSBpbiBhIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0IChu byBzeXN0ZW0gb3IgZ2VuZXJhdGVkIGF0dHJpYnV0ZXMsCisgKiBubyBkdXBsaWNhdGVzKS4g IEFkZGl0aW9uYWwgY2hlY2tzIHdpdGggcmVwbGljYSBpZGVudGl0eSBhcmUgZG9uZSBsYXRl cjsKKyAqIHNlZSBjaGVja19wdWJsaWNhdGlvbl9jb2x1bW5zLgorICoKKyAqIE5vdGUgdGhh dCB0aGUgYXR0cmlidXRlIG51bWJlcnMgYXJlICpub3QqIG9mZnNldCBieQorICogRmlyc3RM b3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsgc3lzdGVtIGNvbHVtbnMgYXJlIGZvcmJp ZGRlbiBzbyB0aGlzCisgKiBpcyBva2F5LgorICoKKyAqIFhYWCBTaG91bGQgdGhpcyBkZXRl Y3QgZHVwbGljYXRlIGNvbHVtbnM/CisgKi8KK3N0YXRpYyB2b2lkCitwdWJsaWNhdGlvbl90 cmFuc2xhdGVfY29sdW1ucyhSZWxhdGlvbiB0YXJnZXRyZWwsIExpc3QgKmNvbHVtbnMsCisJ CQkJCQkJICBpbnQgKm5hdHRzLCBBdHRyTnVtYmVyICoqYXR0cnMpCit7CisJQXR0ck51bWJl ciAqYXR0YXJyYXk7CisJQml0bWFwc2V0ICAqc2V0ID0gTlVMTDsKKwlMaXN0Q2VsbCAgICps YzsKKwlpbnQJCQluID0gMDsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IodGFyZ2V0cmVsKTsKKworCS8qCisJICogVHJhbnNsYXRlIGxpc3Qgb2YgY29sdW1ucyB0 byBhdHRudW1zLiBXZSBwcm9oaWJpdCBzeXN0ZW0gYXR0cmlidXRlcyBhbmQKKwkgKiBtYWtl IHN1cmUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSBjb2x1bW5zLgorCSAqLworCWF0dGFycmF5 ID0gcGFsbG9jKHNpemVvZihBdHRyTnVtYmVyKSAqIGxpc3RfbGVuZ3RoKGNvbHVtbnMpKTsK Kwlmb3JlYWNoKGxjLCBjb2x1bW5zKQorCXsKKwkJY2hhcgkgICAqY29sbmFtZSA9IHN0clZh bChsZmlyc3QobGMpKTsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0 aW9uR2V0UmVsaWQodGFyZ2V0cmVsKSwgY29sbmFtZSk7CisKKwkJaWYgKGF0dG51bSA9PSBJ bnZhbGlkQXR0ck51bWJlcikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJS Q09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQkJZXJybXNnKCJjb2x1bW4gXCIlc1wiIG9m IHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkgICBjb2xuYW1lLCBS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpKSk7CisKKwkJaWYgKCFBdHRyTnVt YmVySXNGb3JVc2VyRGVmaW5lZEF0dHIoYXR0bnVtKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAorCQkJCQll cnJtc2coImNhbm5vdCByZWZlcmVuY2Ugc3lzdGVtIGNvbHVtbiBcIiVzXCIgaW4gcHVibGlj YXRpb24gY29sdW1uIGxpc3QiLAorCQkJCQkJICAgY29sbmFtZSkpOworCisJCWlmIChUdXBs ZURlc2NBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpLT5hdHRnZW5lcmF0ZWQpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJF TkNFKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgcmVmZXJlbmNlIGdlbmVyYXRlZCBjb2x1bW4g XCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0IiwKKwkJCQkJCSAgIGNvbG5hbWUp KTsKKworCQlpZiAoYm1zX2lzX21lbWJlcihhdHRudW0sIHNldCkpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX09CSkVDVCksCisJCQkJCWVy cm1zZygiZHVwbGljYXRlIGNvbHVtbiBcIiVzXCIgaW4gcHVibGljYXRpb24gY29sdW1uIGxp c3QiLAorCQkJCQkJICAgY29sbmFtZSkpOworCisJCXNldCA9IGJtc19hZGRfbWVtYmVyKHNl dCwgYXR0bnVtKTsKKwkJYXR0YXJyYXlbbisrXSA9IGF0dG51bTsKKwl9CisKKwkvKiBCZSB0 aWR5LCBzbyB0aGF0IHRoZSBjYXRhbG9nIHJlcHJlc2VudGF0aW9uIGlzIGFsd2F5cyBzb3J0 ZWQgKi8KKwlxc29ydChhdHRhcnJheSwgbiwgc2l6ZW9mKEF0dHJOdW1iZXIpLCBjb21wYXJl X2ludDE2KTsKKworCSpuYXR0cyA9IG47CisJKmF0dHJzID0gYXR0YXJyYXk7CisKKwlibXNf ZnJlZShzZXQpOworfQorCiAvKgogICogSW5zZXJ0IG5ldyBwdWJsaWNhdGlvbiAvIHNjaGVt YSBtYXBwaW5nLgogICovCkBAIC01MjIsNiArNzAyLDgyIEBAIEdldFJlbGF0aW9uUHVibGlj YXRpb25zKE9pZCByZWxpZCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICogR2V0cyBh IGxpc3Qgb2YgT0lEcyBvZiBhbGwgcGFydGlhbC1jb2x1bW4gcHVibGljYXRpb25zIG9mIHRo ZSBnaXZlbgorICogcmVsYXRpb24sIHRoYXQgaXMsIHRob3NlIHRoYXQgc3BlY2lmeSBhIGNv bHVtbiBsaXN0LgorICovCitMaXN0ICoKK0dldFJlbGF0aW9uQ29sdW1uUGFydGlhbFB1Ymxp Y2F0aW9ucyhPaWQgcmVsaWQpCit7CisJQ2F0Q0xpc3QgICAqcHVicmVsbGlzdDsKKwlMaXN0 CSAgICpwdWJzID0gTklMOworCisJcHVicmVsbGlzdCA9IFNlYXJjaFN5c0NhY2hlTGlzdDEo UFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShyZWxpZCkp OworCWZvciAoaW50IGkgPSAwOyBpIDwgcHVicmVsbGlzdC0+bl9tZW1iZXJzOyBpKyspCisJ eworCQlIZWFwVHVwbGUJdHVwID0gJnB1YnJlbGxpc3QtPm1lbWJlcnNbaV0tPnR1cGxlOwor CQlib29sCQlpc251bGw7CisJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsCXB1YnJlbDsKKwor CQkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCB0dXAsCisJCQkJ CQkJICAgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycywKKwkJCQkJCQkgICAmaXNu dWxsKTsKKworCQkvKiBubyBjb2x1bW4gbGlzdCBmb3IgdGhpcyBwdWJsaWNhdGlvbnMvcmVs YXRpb24gKi8KKwkJaWYgKGlzbnVsbCkKKwkJCWNvbnRpbnVlOworCisJCXB1YnJlbCA9IChG b3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1cCk7CisKKwkJcHVicyA9IGxh cHBlbmRfb2lkKHB1YnMsIHB1YnJlbC0+cHJwdWJpZCk7CisJfQorCisJUmVsZWFzZVN5c0Nh Y2hlTGlzdChwdWJyZWxsaXN0KTsKKworCXJldHVybiBwdWJzOworfQorCisKKy8qCisgKiBG b3IgYSByZWxhdGlvbiBpbiBhIHB1YmxpY2F0aW9uIHRoYXQgaXMga25vd24gdG8gaGF2ZSBh IG5vbi1udWxsIGNvbHVtbgorICogbGlzdCwgcmV0dXJuIHRoZSBsaXN0IG9mIGF0dHJpYnV0 ZSBudW1iZXJzIHRoYXQgYXJlIGluIGl0LgorICovCitMaXN0ICoKK0dldFJlbGF0aW9uQ29s dW1uTGlzdEluUHVibGljYXRpb24oT2lkIHJlbGlkLCBPaWQgcHViaWQpCit7CisJSGVhcFR1 cGxlCXR1cDsKKwlEYXR1bQkJYWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlBcnJheVR5cGUg ICphcnI7CisJaW50CQkJbmVsZW1zOworCWludDE2CSAgICplbGVtczsKKwlMaXN0CSAgICph dHRub3MgPSBOSUw7CisKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxN QVAsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpLAorCQkJCQkJICBPYmplY3RJ ZEdldERhdHVtKHB1YmlkKSk7CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbCAldSBvZiBwdWJsaWNh dGlvbiAldSIsIHJlbGlkLCBwdWJpZCk7CisKKwlhZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIo UFVCTElDQVRJT05SRUxNQVAsIHR1cCwKKwkJCQkJCQkgQW51bV9wZ19wdWJsaWNhdGlvbl9y ZWxfcHJhdHRycywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgImZv dW5kIHVuZXhwZWN0ZWQgbnVsbCBpbiBwZ19wdWJsaWNhdGlvbl9yZWwucHJhdHRycyIpOwor CisJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGFkYXR1bSk7CisJbmVsZW1zID0gQVJSX0RJ TVMoYXJyKVswXTsKKwllbGVtcyA9IChpbnQxNiAqKSBBUlJfREFUQV9QVFIoYXJyKTsKKwor CWZvciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCWF0dG5vcyA9IGxhcHBlbmRf b2lkKGF0dG5vcywgZWxlbXNbaV0pOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisKKwly ZXR1cm4gYXR0bm9zOworfQorCiAvKgogICogR2V0cyBsaXN0IG9mIHJlbGF0aW9uIG9pZHMg Zm9yIGEgcHVibGljYXRpb24uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuYwppbmRleCAxNmI4NjYxYTFiNy4uYjMyZWMyNzU1NTcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0yOTYsNyArMjk2LDcgQEAgY29udGFp bl9pbnZhbGlkX3JmY29sdW1uX3dhbGtlcihOb2RlICpub2RlLCByZl9jb250ZXh0ICpjb250 ZXh0KQogICogUmV0dXJucyB0cnVlIGlmIGFueSBpbnZhbGlkIGNvbHVtbiBpcyBmb3VuZC4K ICAqLwogYm9vbAotY29udGFpbl9pbnZhbGlkX3JmY29sdW1uKE9pZCBwdWJpZCwgUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywKK3B1Yl9yZl9jb250YWluc19pbnZhbGlk X2NvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICphbmNlc3RvcnMs CiAJCQkJCQkgYm9vbCBwdWJ2aWFyb290KQogewogCUhlYXBUdXBsZQlyZnR1cGxlOwpAQCAt MzY3LDYgKzM2NywxMjMgQEAgY29udGFpbl9pbnZhbGlkX3JmY29sdW1uKE9pZCBwdWJpZCwg UmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywKIAlyZXR1cm4gcmVzdWx0Owog fQogCisvKgorICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgY29s dW1uIGxpc3QgYXJlIHBhcnQgb2YgdGhlCisgKiBSRVBMSUNBIElERU5USVRZIGluZGV4IG9y IG5vdC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYW55IGludmFsaWQgY29sdW1uIGlzIGZv dW5kLgorICovCitib29sCitwdWJfY29sbGlzdF9jb250YWluc19pbnZhbGlkX2NvbHVtbihP aWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICphbmNlc3RvcnMsCisJCQkJCQkg Ym9vbCBwdWJ2aWFyb290KQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlPaWQJCQlyZWxpZCA9 IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCU9pZAkJCXB1Ymxpc2hfYXNfcmVsaWQg PSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsK KwlEYXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCisJLyoKKwkgKiBGb3IgYSBwYXJ0 aXRpb24sIGlmIHB1YnZpYXJvb3QgaXMgdHJ1ZSwgZmluZCB0aGUgdG9wbW9zdCBhbmNlc3Rv ciB0aGF0CisJICogaXMgcHVibGlzaGVkIHZpYSB0aGlzIHB1YmxpY2F0aW9uIGFzIHdlIG5l ZWQgdG8gdXNlIGl0cyBjb2x1bW4gbGlzdAorCSAqIGZvciB0aGUgY2hhbmdlcy4KKwkgKgor CSAqIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUgY29sdW1uIGxpc3QgdXNlZCBpcyBmb3Ig YW4gYW5jZXN0b3IsIHRoZQorCSAqIFJFUExJQ0EgSURFTlRJVFkgdXNlZCB3aWxsIGJlIGZv ciB0aGUgYWN0dWFsIGNoaWxkIHRhYmxlLgorCSAqLworCWlmIChwdWJ2aWFyb290ICYmIHJl bGF0aW9uLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCXsKKwkJcHVibGlzaF9hc19yZWxp ZCA9IEdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24ocHViaWQsIGFuY2VzdG9ycyk7 CisKKwkJaWYgKCFPaWRJc1ZhbGlkKHB1Ymxpc2hfYXNfcmVsaWQpKQorCQkJcHVibGlzaF9h c19yZWxpZCA9IHJlbGlkOworCX0KKworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUyKFBVQkxJ Q0FUSU9OUkVMTUFQLAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShwdWJsaXNoX2FzX3Jl bGlkKSwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKworCWlmICghSGVh cFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCXJldHVybiBmYWxzZTsKKworCWRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCB0dXBsZSwKKwkJCQkJCQkgIEFudW1f cGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMsCisJCQkJCQkJICAmaXNudWxsKTsKKworCWlm ICghaXNudWxsKQorCXsKKwkJaW50CXg7CisJCUJpdG1hcHNldCAgKmlkYXR0cnM7CisJCUJp dG1hcHNldCAgKmNvbHVtbnMgPSBOVUxMOworCisJCS8qIFdpdGggUkVQTElDQSBJREVOVElU WSBGVUxMLCBubyBjb2x1bW4gbGlzdCBpcyBhbGxvd2VkLiAqLworCQlpZiAocmVsYXRpb24t PnJkX3JlbC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCkKKwkJCXJl c3VsdCA9IHRydWU7CisKKwkJeworCQkJQXJyYXlUeXBlICAqYXJyOworCQkJaW50CQkJbmVs ZW1zOworCQkJaW50MTYJICAgKmVsZW1zOworCisJCQlhcnIgPSBEYXR1bUdldEFycmF5VHlw ZVAoZGF0dW0pOworCQkJbmVsZW1zID0gQVJSX0RJTVMoYXJyKVswXTsKKwkJCWVsZW1zID0g KGludDE2ICopIEFSUl9EQVRBX1BUUihhcnIpOworCisJCQkvKiBYWFggaXMgdGhlcmUgYSBk YW5nZXIgb2YgbWVtb3J5IGxlYWsgaGVyZT8gYmV3YXJlICovCisJCQlmb3IgKGludCBpID0g MDsgaSA8IG5lbGVtczsgaSsrKQorCQkJCWNvbHVtbnMgPSBibXNfYWRkX21lbWJlcihjb2x1 bW5zLCBlbGVtc1tpXSk7CisJCX0KKworCQkvKiBSZW1lbWJlciBjb2x1bW5zIHRoYXQgYXJl IHBhcnQgb2YgdGhlIFJFUExJQ0EgSURFTlRJVFkgKi8KKwkJaWRhdHRycyA9IFJlbGF0aW9u R2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9C SVRNQVBfSURFTlRJVFlfS0VZKTsKKworCQkvKgorCQkgKiBBdHRudW1zIGluIHRoZSBiaXRt YXAgcmV0dXJuZWQgYnkgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAgYXJlCisJCSAqIG9m ZnNldCAodG8gaGFuZGxlIHN5c3RlbSBjb2x1bW5zIHRoZSB1c3VhbCB3YXkpLCB3aGlsZSBj b2x1bW4gbGlzdAorCQkgKiBkb2VzIG5vdCB1c2Ugb2Zmc2V0LCBzbyB3ZSBjYW4ndCBkbyBi bXNfaXNfc3Vic2V0KCkuIEluc3RlYWQsIHdlIGhhdmUKKwkJICogdG8gbG9vcCBvdmVyIHRo ZSBpZGF0dHJzIGFuZCBjaGVjayBhbGwgb2YgdGhlbSBhcmUgaW4gdGhlIGZpbHRlci4KKwkJ ICovCisJCXggPSAtMTsKKwkJd2hpbGUgKCh4ID0gYm1zX25leHRfbWVtYmVyKGlkYXR0cnMs IHgpKSA+PSAwKQorCQl7CisJCQlBdHRyTnVtYmVyCWF0dG51bSA9ICh4ICsgRmlyc3RMb3dJ bnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisKKwkJCS8qCisJCQkgKiBJZiBwdWJ2aWFy b290IGlzIHRydWUsIHdlIGFyZSB2YWxpZGF0aW5nIHRoZSByb3cgZmlsdGVyIG9mIHRoZQor CQkJICogcGFyZW50IHRhYmxlLCBidXQgdGhlIGJpdG1hcCBjb250YWlucyB0aGUgcmVwbGlj YSBpZGVudGl0eQorCQkJICogaW5mb3JtYXRpb24gb2YgdGhlIGNoaWxkIHRhYmxlLiBTbywg Z2V0IHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZQorCQkJICogY2hpbGQgdGFibGUgYXMgcGFy ZW50IGFuZCBjaGlsZCBjb2x1bW4gb3JkZXIgY291bGQgYmUgZGlmZmVyZW50LgorCQkJICov CisJCQlpZiAocHVidmlhcm9vdCkKKwkJCXsKKwkJCQkvKiBhdHRudW0gaXMgZm9yIGNoaWxk IHRhYmxlICovCisJCQkJY2hhciAgICpjb2xuYW1lID0gZ2V0X2F0dG5hbWUocmVsaWQsIGF0 dG51bSwgZmFsc2UpOworCisJCQkJLyoKKwkJCQkgKiBEZXRlcm1pbmUgdGhlIG1hdGNoaW5n IGF0dG51bSBpbiBwYXJlbnQgKGJlY2F1c2UgdGhlIGNvbHVtbgorCQkJCSAqIGZpbHRlciBp cyBkZWZpbmVkIG9uIHRoZSBwYXJlbnQpLgorCQkJCSAqLworCQkJCWF0dG51bSA9IGdldF9h dHRudW0ocHVibGlzaF9hc19yZWxpZCwgY29sbmFtZSk7CisJCQl9CisKKwkJCWlmICghYm1z X2lzX21lbWJlcihhdHRudW0sIGNvbHVtbnMpKQorCQkJeworCQkJCXJlc3VsdCA9IHRydWU7 CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlibXNfZnJlZShpZGF0dHJzKTsKKwkJYm1z X2ZyZWUoY29sdW1ucyk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJl dHVybiByZXN1bHQ7Cit9CisKIC8qIGNoZWNrX2Z1bmN0aW9uc19pbl9ub2RlIGNhbGxiYWNr ICovCiBzdGF0aWMgYm9vbAogY29udGFpbl9tdXRhYmxlX29yX3VzZXJfZnVuY3Rpb25zX2No ZWNrZXIoT2lkIGZ1bmNfaWQsIHZvaWQgKmNvbnRleHQpCkBAIC02MDgsNiArNzI1LDQ1IEBA IFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1 ZXJ5U3RyaW5nLAogCX0KIH0KIAorCisvKgorICogVHJhbnNmb3JtIHRoZSBwdWJsaWNhdGlv biBjb2x1bW4gbGlzdHMgZXhwcmVzc2lvbiBmb3IgYWxsIHRoZSByZWxhdGlvbnMKKyAqIGlu IHRoZSBsaXN0LgorICoKKyAqIFhYWCBUaGUgbmFtZSBpcyBhIGJpdCBtaXNsZWFkaW5nLCBi ZWNhdXNlIHdlIGRvbid0IHJlYWxseSB0cmFuc2Zvcm0KKyAqIGFueXRoaW5nIGhlcmUgLSB3 ZSBtZXJlbHkgY2hlY2sgdGhlIGNvbHVtbiBsaXN0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUK KyAqIGRlZmluaXRpb24gb2YgdGhlIHB1YmxpY2F0aW9uICh3aXRoIHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290PWZhbHNlKQorICogd2Ugb25seSBhbGxvdyBjb2x1bW4gbGlzdHMgb24g dGhlIGxlYWYgcmVsYXRpb25zLiBTbyBtYXliZSByZW5hbWUgaXQ/CisgKi8KK3N0YXRpYyB2 b2lkCitUcmFuc2Zvcm1QdWJDb2x1bW5MaXN0KExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAq cXVlcnlTdHJpbmcsCisJCQkJCSAgIGJvb2wgcHVidmlhcm9vdCkKK3sKKwlMaXN0Q2VsbCAg ICpsYzsKKworCWZvcmVhY2gobGMsIHRhYmxlcykKKwl7CisJCVB1YmxpY2F0aW9uUmVsSW5m byAqcHJpID0gKFB1YmxpY2F0aW9uUmVsSW5mbyAqKSBsZmlyc3QobGMpOworCisJCWlmIChw cmktPmNvbHVtbnMgPT0gTklMKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgdGhl IHB1YmxpY2F0aW9uIGRvZXNuJ3QgcHVibGlzaCBjaGFuZ2VzIHZpYSB0aGUgcm9vdCBwYXJ0 aXRpb25lZAorCQkgKiB0YWJsZSwgdGhlIHBhcnRpdGlvbidzIGNvbHVtbiBsaXN0IHdpbGwg YmUgdXNlZC4gU28gZGlzYWxsb3cgdXNpbmcKKwkJICogdGhlIGNvbHVtbiBsaXN0IG9uIHBh cnRpdGlvbmVkIHRhYmxlIGluIHRoaXMgY2FzZS4KKwkJICovCisJCWlmICghcHVidmlhcm9v dCAmJgorCQkJcHJpLT5yZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFS VElUSU9ORURfVEFCTEUpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiY2Fubm90IHVz ZSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdCBmb3IgcmVsYXRpb24gXCIlc1wiIiwKKwkJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwcmktPnJlbGF0aW9uKSksCisJCQkJCSBlcnJk ZXRhaWwoImNvbHVtbiBsaXN0IGNhbm5vdCBiZSB1c2VkIGZvciBhIHBhcnRpdGlvbmVkIHRh YmxlIHdoZW4gJXMgaXMgZmFsc2UuIiwKKwkJCQkJCQkgICAicHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QiKSkpOworCX0KK30KKwogLyoKICAqIENyZWF0ZSBuZXcgcHVibGljYXRpb24u CiAgKi8KQEAgLTcyNCw2ICs4ODAsOSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJCVRyYW5zZm9ybVB1 YldoZXJlQ2xhdXNlcyhyZWxzLCBwc3RhdGUtPnBfc291cmNldGV4dCwKIAkJCQkJCQkJCSBw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKKwkJCVRyYW5zZm9ybVB1YkNvbHVtbkxp c3QocmVscywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCisJCQkJCQkJCSAgIHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290KTsKKwogCQkJUHVibGljYXRpb25BZGRUYWJsZXMocHVib2lkLCBy ZWxzLCB0cnVlLCBOVUxMKTsKIAkJCUNsb3NlVGFibGVMaXN0KHJlbHMpOwogCQl9CkBAIC03 NTQsNiArOTEzLDUyIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwg Q3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCXJldHVybiBteXNlbGY7CiB9CiAKKy8q CisgKiBDaGFuZ2UgdGhlIGNvbHVtbiBsaXN0IG9mIGEgcmVsYXRpb24gaW4gYSBwdWJsaWNh dGlvbgorICovCitzdGF0aWMgdm9pZAorUHVibGljYXRpb25TZXRDb2x1bW5zKEFsdGVyUHVi bGljYXRpb25TdG10ICpzdG10LAorCQkJCQkgIEZvcm1fcGdfcHVibGljYXRpb24gcHViZm9y bSwgUHVibGljYXRpb25UYWJsZSAqdGFibGUpCit7CisJUmVsYXRpb24JcmVsLAorCQkJCXVy ZWw7CisJSGVhcFR1cGxlCXR1cDsKKwlPYmplY3RBZGRyZXNzIG9iaiwKKwkJCQlzZWNvbmRh cnk7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZCwgUm93 RXhjbHVzaXZlTG9jayk7CisJdXJlbCA9IHRhYmxlX29wZW5ydih0YWJsZS0+cmVsYXRpb24s IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZTIo UFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25H ZXRSZWxpZCh1cmVsKSksCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViZm9ybS0+b2lk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJZXJybXNnKCJyZWxhdGlvbiBcIiVzXCIgaXMgbm90IGFscmVhZHkgaW4gcHVibGljYXRp b24gXCIlc1wiIiwKKwkJCQkJICAgdGFibGUtPnJlbGF0aW9uLT5yZWxuYW1lLAorCQkJCQkg ICBOYW1lU3RyKHB1YmZvcm0tPnB1Ym5hbWUpKSk7CisKKwlwdWJsaWNhdGlvbl9zZXRfdGFi bGVfY29sdW1ucyhyZWwsIHR1cCwgdXJlbCwgdGFibGUtPmNvbHVtbnMpOworCisJT2JqZWN0 QWRkcmVzc1NldChvYmosIFB1YmxpY2F0aW9uUmVsYXRpb25JZCwKKwkJCQkJICgoRm9ybV9w Z19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApKS0+b2lkKTsKKwlPYmplY3RBZGRy ZXNzU2V0KHNlY29uZGFyeSwgUmVsYXRpb25SZWxhdGlvbklkLCBSZWxhdGlvbkdldFJlbGlk KHVyZWwpKTsKKwlFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChvYmosIHNlY29u ZGFyeSwgKE5vZGUgKikgc3RtdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKworCS8q CisJICogSW52YWxpZGF0ZSByZWxjYWNoZSBmb3IgdGhpcyByZWxhdGlvbiwgdG8gZm9yY2Ug cmVidWlsZGluZyB0aGUKKwkgKiBwdWJsaWNhdGlvbiBkZXNjcmlwdGlvbi4KKwkgKi8KKwlD YWNoZUludmFsaWRhdGVSZWxjYWNoZSh1cmVsKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93 RXhjbHVzaXZlTG9jayk7CisJdGFibGVfY2xvc2UodXJlbCwgTm9Mb2NrKTsKKworCUludm9r ZU9iamVjdFBvc3RBbHRlckhvb2soUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJmb3JtLT5v aWQsIDApOworfQorCiAvKgogICogQ2hhbmdlIG9wdGlvbnMgb2YgYSBwdWJsaWNhdGlvbi4K ICAqLwpAQCAtNzgzLDggKzk4OCw4IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkvKgogCSAq IElmIHRoZSBwdWJsaWNhdGlvbiBkb2Vzbid0IHB1Ymxpc2ggY2hhbmdlcyB2aWEgdGhlIHJv b3QgcGFydGl0aW9uZWQKLQkgKiB0YWJsZSwgdGhlIHBhcnRpdGlvbidzIHJvdyBmaWx0ZXIg d2lsbCBiZSB1c2VkLiBTbyBkaXNhbGxvdyB1c2luZyBXSEVSRQotCSAqIGNsYXVzZSBvbiBw YXJ0aXRpb25lZCB0YWJsZSBpbiB0aGlzIGNhc2UuCisJICogdGFibGUsIHRoZSBwYXJ0aXRp b24ncyByb3cgZmlsdGVyIGFuZCBjb2x1bW4gbGlzdCB3aWxsIGJlIHVzZWQuIFNvIGRpc2Fs bG93CisJICogdXNpbmcgV0hFUkUgY2xhdXNlIGFuZCBjb2x1bW4gbGlzdHMgb24gcGFydGl0 aW9uZWQgdGFibGUgaW4gdGhpcyBjYXNlLgogCSAqLwogCWlmICghcHViZm9ybS0+cHViYWxs dGFibGVzICYmIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuICYmCiAJCSFwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKQEAgLTc5Miw3ICs5OTcsOCBAQCBBbHRlclB1Ymxp Y2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10 ICpzdG10LAogCQkvKgogCQkgKiBMb2NrIHRoZSBwdWJsaWNhdGlvbiBzbyBub2JvZHkgZWxz ZSBjYW4gZG8gYW55dGhpbmcgd2l0aCBpdC4gVGhpcwogCQkgKiBwcmV2ZW50cyBjb25jdXJy ZW50IGFsdGVyIHRvIGFkZCBwYXJ0aXRpb25lZCB0YWJsZShzKSB3aXRoIFdIRVJFCi0JCSAq IGNsYXVzZShzKSB3aGljaCB3ZSBkb24ndCBhbGxvdyB3aGVuIG5vdCBwdWJsaXNoaW5nIHZp YSByb290LgorCQkgKiBjbGF1c2UocykgYW5kL29yIGNvbHVtbiBsaXN0cyB3aGljaCB3ZSBk b24ndCBhbGxvdyB3aGVuIG5vdAorCQkgKiBwdWJsaXNoaW5nIHZpYSByb290LgogCQkgKi8K IAkJTG9ja0RhdGFiYXNlT2JqZWN0KFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgcHViZm9ybS0+ b2lkLCAwLAogCQkJCQkJICAgQWNjZXNzU2hhcmVMb2NrKTsKQEAgLTgwNCwxMyArMTAxMCwy MSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVy UHVibGljYXRpb25TdG10ICpzdG10LAogCQl7CiAJCQlIZWFwVHVwbGUJcmZ0dXBsZTsKIAkJ CU9pZAkJCXJlbGlkID0gbGZpcnN0X29pZChsYyk7CisJCQlib29sCQloYXNfY29sdW1uX2xp c3Q7CisJCQlib29sCQloYXNfcm93X2ZpbHRlcjsKIAogCQkJcmZ0dXBsZSA9IFNlYXJjaFN5 c0NhY2hlMihQVUJMSUNBVElPTlJFTE1BUCwKIAkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1 bShyZWxpZCksCiAJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViZm9ybS0+b2lkKSk7 CiAKKwkJCWhhc19yb3dfZmlsdGVyCisJCQkJPSAhaGVhcF9hdHRpc251bGwocmZ0dXBsZSwg QW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsLCBOVUxMKTsKKworCQkJaGFzX2NvbHVt bl9saXN0CisJCQkJPSAhaGVhcF9hdHRpc251bGwocmZ0dXBsZSwgQW51bV9wZ19wdWJsaWNh dGlvbl9yZWxfcHJhdHRycywgTlVMTCk7CisKIAkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHJm dHVwbGUpICYmCi0JCQkJIWhlYXBfYXR0aXNudWxsKHJmdHVwbGUsIEFudW1fcGdfcHVibGlj YXRpb25fcmVsX3BycXVhbCwgTlVMTCkpCisJCQkJKGhhc19yb3dfZmlsdGVyIHx8IGhhc19j b2x1bW5fbGlzdCkpCiAJCQl7CiAJCQkJSGVhcFR1cGxlCXR1cGxlOwogCkBAIC04MTksNyAr MTAzMyw4IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwg QWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCQkJewogCQkJCQlGb3JtX3BnX2NsYXNz IHJlbGZvcm0gPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHR1cGxlKTsKIAotCQkJCQlp ZiAocmVsZm9ybS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJ CQlpZiAoKHJlbGZvcm0tPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkg JiYKKwkJCQkJCWhhc19yb3dfZmlsdGVyKQogCQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJCQkJ CSBlcnJtc2coImNhbm5vdCBzZXQgJXMgZm9yIHB1YmxpY2F0aW9uIFwiJXNcIiIsCkBAIC04 MzAsNiArMTA0NSwxOCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpw c3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCQkJCQkJCQkJCSAgIE5hbWVT dHIocmVsZm9ybS0+cmVsbmFtZSksCiAJCQkJCQkJCQkJICAgInB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290IikpKTsKIAorCQkJCQlpZiAoKHJlbGZvcm0tPnJlbGtpbmQgPT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSkgJiYKKwkJCQkJCWhhc19jb2x1bW5fbGlzdCkKKwkJCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0ICVzIGZvciBwdWJs aWNhdGlvbiBcIiVzXCIiLAorCQkJCQkJCQkJCSJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IGZhbHNlIiwKKwkJCQkJCQkJCQlzdG10LT5wdWJuYW1lKSwKKwkJCQkJCQkJIGVycmRl dGFpbCgiVGhlIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgY29sdW1uIGxpc3QgZm9yIGEgcGFy dGl0aW9uZWQgdGFibGUgXCIlc1wiICIKKwkJCQkJCQkJCQkgICAid2hpY2ggaXMgbm90IGFs bG93ZWQgd2hlbiAlcyBpcyBmYWxzZS4iLAorCQkJCQkJCQkJCSAgIE5hbWVTdHIocmVsZm9y bS0+cmVsbmFtZSksCisJCQkJCQkJCQkJICAgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IikpKTsKKwogCQkJCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwogCQkJCX0KIApAQCAtODM4 LDYgKzEwNjUsMTYgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJfQogCX0KIAorCS8qCisJICog RklYTUUgY2hlY2sgcHViYWN0aW9ucyB2cy4gcmVwbGljYSBpZGVudGl0eSwgdG8gZW5zdXJl IHRoZSByZXBsaWNhCisJICogaWRlbnRpdHkgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBs aXN0LiBPbmx5IGRvIHRoaXMgZm9yIHVwZGF0ZQorCSAqIGFuZCBkZWxldGUgcHVibGljYXRp b25zLiBTZWUgY2hlY2tfcHVibGljYXRpb25fY29sdW1ucy4KKwkgKgorCSAqIFhYWCBUaGlz IGlzIG5lZWRlZCBiZWNhdXNlIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IG1heSBjaGFu Z2UsCisJICogaW4gd2hpY2ggY2FzZSB0aGUgcm93IGZpbHRlcnMgbWF5IGJlIGludmFsaWQg KGUuZy4gd2l0aCBwdnByPWZhbHNlCisJICogdGhlcmUgbXVzdCBiZSBubyBmaWx0ZXIgb24g cGFydGl0aW9uZWQgdGFibGVzKS4KKwkgKi8KKwogCS8qIEV2ZXJ5dGhpbmcgb2ssIGZvcm0g YSBuZXcgdHVwbGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOwog CW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpAQCAtOTc1LDEwICsxMjEy LDIwIEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0 bXQsIEhlYXBUdXBsZSB0dXAsCiAKIAkJVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKHJlbHMs IHF1ZXJ5U3RyaW5nLCBwdWJmb3JtLT5wdWJ2aWFyb290KTsKIAorCQlUcmFuc2Zvcm1QdWJD b2x1bW5MaXN0KHJlbHMsIHF1ZXJ5U3RyaW5nLCBwdWJmb3JtLT5wdWJ2aWFyb290KTsKKwog CQlQdWJsaWNhdGlvbkFkZFRhYmxlcyhwdWJpZCwgcmVscywgZmFsc2UsIHN0bXQpOwogCX0K IAllbHNlIGlmIChzdG10LT5hY3Rpb24gPT0gQVBfRHJvcE9iamVjdHMpCiAJCVB1YmxpY2F0 aW9uRHJvcFRhYmxlcyhwdWJpZCwgcmVscywgZmFsc2UpOworCWVsc2UgaWYgKHN0bXQtPmFj dGlvbiA9PSBBUF9TZXRDb2x1bW5zKQorCXsKKwkJQXNzZXJ0KHNjaGVtYWlkbGlzdCA9PSBO SUwpOworCQlBc3NlcnQobGlzdF9sZW5ndGgodGFibGVzKSA9PSAxKTsKKworCQlQdWJsaWNh dGlvblNldENvbHVtbnMoc3RtdCwgcHViZm9ybSwKKwkJCQkJCQkgIGxpbml0aWFsX25vZGUo UHVibGljYXRpb25UYWJsZSwgdGFibGVzKSk7CisJfQogCWVsc2UJCQkJCQkvKiBBUF9TZXRP YmplY3RzICovCiAJewogCQlMaXN0CSAgICpvbGRyZWxpZHMgPSBHZXRQdWJsaWNhdGlvblJl bGF0aW9ucyhwdWJpZCwKQEAgLTk5MSw2ICsxMjM4LDggQEAgQWx0ZXJQdWJsaWNhdGlvblRh YmxlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAogCQlU cmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcXVlcnlTdHJpbmcsIHB1YmZvcm0tPnB1 YnZpYXJvb3QpOwogCisJCVRyYW5zZm9ybVB1YkNvbHVtbkxpc3QocmVscywgcXVlcnlTdHJp bmcsIHB1YmZvcm0tPnB1YnZpYXJvb3QpOworCiAJCS8qCiAJCSAqIFRvIHJlY3JlYXRlIHRo ZSByZWxhdGlvbiBsaXN0IGZvciB0aGUgcHVibGljYXRpb24sIGxvb2sgZm9yCiAJCSAqIGV4 aXN0aW5nIHJlbGF0aW9ucyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJlIGRyb3BwZWQuCkBAIC0x MDAyLDMyICsxMjUxLDg1IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNh dGlvblN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCQlQdWJsaWNhdGlvblJlbEluZm8g Km9sZHJlbDsKIAkJCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAJCQlIZWFwVHVwbGUJcmZ0dXBs ZTsKLQkJCWJvb2wJCXJmaXNudWxsID0gdHJ1ZTsKIAkJCU5vZGUJICAgKm9sZHJlbHdoZXJl Y2xhdXNlID0gTlVMTDsKKwkJCUJpdG1hcHNldCAgKm9sZGNvbHVtbnMgPSBOVUxMOwogCiAJ CQkvKiBsb29rIHVwIHRoZSBjYWNoZSBmb3IgdGhlIG9sZCByZWxtYXAgKi8KIAkJCXJmdHVw bGUgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCiAJCQkJCQkJCQkgIE9i amVjdElkR2V0RGF0dW0ob2xkcmVsaWQpLAogCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVt KHB1YmlkKSk7CiAKKwkJCS8qCisJCQkgKiBTZWUgaWYgdGhlIGV4aXN0aW5nIHJlbGF0aW9u IGN1cnJlbnRseSBoYXMgYSBXSEVSRSBjbGF1c2Ugb3IgYQorCQkJICogY29sdW1uIGxpc3Qu IFdlIG5lZWQgdG8gY29tcGFyZSB0aG9zZSB0b28uCisJCQkgKi8KIAkJCWlmIChIZWFwVHVw bGVJc1ZhbGlkKHJmdHVwbGUpKQogCQkJeworCQkJCWJvb2wJCWlzbnVsbCA9IHRydWU7CiAJ CQkJRGF0dW0JCXdoZXJlQ2xhdXNlRGF0dW07CisJCQkJRGF0dW0JCWNvbHVtbkxpc3REYXR1 bTsKIAorCQkJCS8qIExvYWQgdGhlIFdIRVJFIGNsYXVzZSBmb3IgdGhpcyB0YWJsZS4gKi8K IAkJCQl3aGVyZUNsYXVzZURhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVM TUFQLCByZnR1cGxlLAogCQkJCQkJCQkJCQkJICAgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxf cHJxdWFsLAotCQkJCQkJCQkJCQkJICAgJnJmaXNudWxsKTsKLQkJCQlpZiAoIXJmaXNudWxs KQorCQkJCQkJCQkJCQkJICAgJmlzbnVsbCk7CisJCQkJaWYgKCFpc251bGwpCiAJCQkJCW9s ZHJlbHdoZXJlY2xhdXNlID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcod2hl cmVDbGF1c2VEYXR1bSkpOwogCisJCQkJLyogVHJhbnNmb3JtIHRoZSBpbnQydmVjdG9yIGNv bHVtbiBsaXN0IHRvIGEgYml0bWFwLiAqLworCQkJCWNvbHVtbkxpc3REYXR1bSA9IFN5c0Nh Y2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgcmZ0dXBsZSwKKwkJCQkJCQkJCQkJCSAg IEFudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMsCisJCQkJCQkJCQkJCQkgICAmaXNu dWxsKTsKKworCQkJCS8qCisJCQkJICogWFhYIE1heWJlIG1ha2UgdGhpcyBhIHNlcGFyYXRl IGZ1bmN0aW9uLiBXZSBkbyB0aGlzIG9uCisJCQkJICogbXVsdGlwbGUgcGxhY2VzLgorCQkJ CSAqLworCQkJCWlmICghaXNudWxsKQorCQkJCXsKKwkJCQkJQXJyYXlUeXBlICAqYXJyOwor CQkJCQlpbnQJCQluZWxlbXM7CisJCQkJCWludDE2CSAgICplbGVtczsKKworCQkJCQlhcnIg PSBEYXR1bUdldEFycmF5VHlwZVAoY29sdW1uTGlzdERhdHVtKTsKKwkJCQkJbmVsZW1zID0g QVJSX0RJTVMoYXJyKVswXTsKKwkJCQkJZWxlbXMgPSAoaW50MTYgKikgQVJSX0RBVEFfUFRS KGFycik7CisKKwkJCQkJLyogWFhYIGlzIHRoZXJlIGEgZGFuZ2VyIG9mIG1lbW9yeSBsZWFr IGhlcmU/IGJld2FyZSAqLworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IG5lbGVtczsgaSsr KQorCQkJCQkJb2xkY29sdW1ucyA9IGJtc19hZGRfbWVtYmVyKG9sZGNvbHVtbnMsIGVsZW1z W2ldKTsKKwkJCQl9CisKIAkJCQlSZWxlYXNlU3lzQ2FjaGUocmZ0dXBsZSk7CiAJCQl9CiAK IAkJCWZvcmVhY2gobmV3bGMsIHJlbHMpCiAJCQl7CiAJCQkJUHVibGljYXRpb25SZWxJbmZv ICpuZXdwdWJyZWw7CisJCQkJT2lkCQkJCQluZXdyZWxpZDsKKwkJCQlCaXRtYXBzZXQJCSAg ICpuZXdjb2x1bW5zID0gTlVMTDsKIAogCQkJCW5ld3B1YnJlbCA9IChQdWJsaWNhdGlvblJl bEluZm8gKikgbGZpcnN0KG5ld2xjKTsKKwkJCQluZXdyZWxpZCA9IFJlbGF0aW9uR2V0UmVs aWQobmV3cHVicmVsLT5yZWxhdGlvbik7CisKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBuZXcg cHVibGljYXRpb24gaGFzIGNvbHVtbiBsaXN0LCB0cmFuc2Zvcm0gaXQgdG8KKwkJCQkgKiBh IGJpdG1hcCB0b28uCisJCQkJICovCisJCQkJaWYgKG5ld3B1YnJlbC0+Y29sdW1ucykKKwkJ CQl7CisJCQkJCUxpc3RDZWxsICAgKmxjOworCisJCQkJCWZvcmVhY2gobGMsIG5ld3B1YnJl bC0+Y29sdW1ucykKKwkJCQkJeworCQkJCQkJY2hhcgkgICAqY29sbmFtZSA9IHN0clZhbChs Zmlyc3QobGMpKTsKKwkJCQkJCUF0dHJOdW1iZXIJYXR0bnVtID0gZ2V0X2F0dG51bShuZXdy ZWxpZCwgY29sbmFtZSk7CisKKwkJCQkJCS8qIG5vIGNoZWNrcyBuZWVkZWQgaGVyZSwgdGhh dCBoYXBwZW5zIGVsc2V3aGVyZSAqLworCisJCQkJCQluZXdjb2x1bW5zID0gYm1zX2FkZF9t ZW1iZXIobmV3Y29sdW1ucywgYXR0bnVtKTsKKwkJCQkJfQorCQkJCX0KIAogCQkJCS8qCiAJ CQkJICogQ2hlY2sgaWYgYW55IG9mIHRoZSBuZXcgc2V0IG9mIHJlbGF0aW9ucyBtYXRjaGVz IHdpdGggdGhlCkBAIC0xMDM3LDcgKzEzMzksOCBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVz KEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAogCQkJCSAqLwog CQkJCWlmIChSZWxhdGlvbkdldFJlbGlkKG5ld3B1YnJlbC0+cmVsYXRpb24pID09IG9sZHJl bGlkKQogCQkJCXsKLQkJCQkJaWYgKGVxdWFsKG9sZHJlbHdoZXJlY2xhdXNlLCBuZXdwdWJy ZWwtPndoZXJlQ2xhdXNlKSkKKwkJCQkJaWYgKGVxdWFsKG9sZHJlbHdoZXJlY2xhdXNlLCBu ZXdwdWJyZWwtPndoZXJlQ2xhdXNlKSAmJgorCQkJCQkJYm1zX2VxdWFsKG9sZGNvbHVtbnMs IG5ld2NvbHVtbnMpKQogCQkJCQl7CiAJCQkJCQlmb3VuZCA9IHRydWU7CiAJCQkJCQlicmVh azsKQEAgLTEwNTYsNiArMTM1OSw3IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQ dWJsaWNhdGlvblN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCQl7CiAJCQkJb2xkcmVs ID0gcGFsbG9jKHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKIAkJCQlvbGRyZWwtPndo ZXJlQ2xhdXNlID0gTlVMTDsKKwkJCQlvbGRyZWwtPmNvbHVtbnMgPSBOSUw7CiAJCQkJb2xk cmVsLT5yZWxhdGlvbiA9IHRhYmxlX29wZW4ob2xkcmVsaWQsCiAJCQkJCQkJCQkJCSAgU2hh cmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAkJCQlkZWxyZWxzID0gbGFwcGVuZChkZWxyZWxz LCBvbGRyZWwpOwpAQCAtMTExNyw3ICsxNDIxLDcgQEAgQWx0ZXJQdWJsaWNhdGlvblNjaGVt YXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJfQogCWVsc2UgaWYgKHN0bXQtPmFj dGlvbiA9PSBBUF9Ecm9wT2JqZWN0cykKIAkJUHVibGljYXRpb25Ecm9wU2NoZW1hcyhwdWJm b3JtLT5vaWQsIHNjaGVtYWlkbGlzdCwgZmFsc2UpOwotCWVsc2UJCQkJCQkvKiBBUF9TZXRP YmplY3RzICovCisJZWxzZSBpZiAoc3RtdC0+YWN0aW9uID09IEFQX1NldE9iamVjdHMpCiAJ ewogCQlMaXN0CSAgICpvbGRzY2hlbWFpZHMgPSBHZXRQdWJsaWNhdGlvblNjaGVtYXMocHVi Zm9ybS0+b2lkKTsKIAkJTGlzdAkgICAqZGVsc2NoZW1hcyA9IE5JTDsKQEAgLTExNDAsNiAr MTQ0NCwxMCBAQCBBbHRlclB1YmxpY2F0aW9uU2NoZW1hcyhBbHRlclB1YmxpY2F0aW9uU3Rt dCAqc3RtdCwKIAkJICovCiAJCVB1YmxpY2F0aW9uQWRkU2NoZW1hcyhwdWJmb3JtLT5vaWQs IHNjaGVtYWlkbGlzdCwgdHJ1ZSwgc3RtdCk7CiAJfQorCWVsc2UKKwl7CisJCS8qIE5vdGhp bmcgdG8gZG8gZm9yIEFQX1NldENvbHVtbnMgKi8KKwl9CiB9CiAKIC8qCkBAIC0xNDAyLDYg KzE3MTAsNyBAQCBPcGVuVGFibGVMaXN0KExpc3QgKnRhYmxlcykKIAlMaXN0CSAgICpyZWxz ID0gTklMOwogCUxpc3RDZWxsICAgKmxjOwogCUxpc3QJICAgKnJlbGlkc193aXRoX3JmID0g TklMOworCUxpc3QJICAgKnJlbGlkc193aXRoX2NvbGxpc3QgPSBOSUw7CiAKIAkvKgogCSAq IE9wZW4sIHNoYXJlLWxvY2ssIGFuZCBjaGVjayBhbGwgdGhlIGV4cGxpY2l0bHktc3BlY2lm aWVkIHJlbGF0aW9ucwpAQCAtMTQzNiw2ICsxNzQ1LDEzIEBAIE9wZW5UYWJsZUxpc3QoTGlz dCAqdGFibGVzKQogCQkJCQkJIGVycm1zZygiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IFdI RVJFIGNsYXVzZXMgZm9yIHRhYmxlIFwiJXNcIiIsCiAJCQkJCQkJCVJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCkpKSk7CiAKKwkJCS8qIERpc2FsbG93IGR1cGxpY2F0ZSB0YWJsZXMg aWYgdGhlcmUgYXJlIGFueSB3aXRoIGNvbHVtbiBsaXN0cy4gKi8KKwkJCWlmICh0LT5jb2x1 bW5zIHx8IGxpc3RfbWVtYmVyX29pZChyZWxpZHNfd2l0aF9jb2xsaXN0LCBteXJlbGlkKSkK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVf T0JKRUNUKSwKKwkJCQkJCSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBjb2x1 bW4gbGlzdHMgZm9yIHRhYmxlIFwiJXNcIiIsCisJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbCkpKSk7CisKIAkJCXRhYmxlX2Nsb3NlKHJlbCwgU2hhcmVVcGRhdGVFeGNs dXNpdmVMb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xNDQzLDEyICsxNzU5LDE2IEBA IE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQlwdWJfcmVsID0gcGFsbG9jKHNpemVv ZihQdWJsaWNhdGlvblJlbEluZm8pKTsKIAkJcHViX3JlbC0+cmVsYXRpb24gPSByZWw7CiAJ CXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+d2hlcmVDbGF1c2U7CisJCXB1Yl9yZWwtPmNv bHVtbnMgPSB0LT5jb2x1bW5zOwogCQlyZWxzID0gbGFwcGVuZChyZWxzLCBwdWJfcmVsKTsK IAkJcmVsaWRzID0gbGFwcGVuZF9vaWQocmVsaWRzLCBteXJlbGlkKTsKIAogCQlpZiAodC0+ d2hlcmVDbGF1c2UpCiAJCQlyZWxpZHNfd2l0aF9yZiA9IGxhcHBlbmRfb2lkKHJlbGlkc193 aXRoX3JmLCBteXJlbGlkKTsKIAorCQlpZiAodC0+Y29sdW1ucykKKwkJCXJlbGlkc193aXRo X2NvbGxpc3QgPSBsYXBwZW5kX29pZChyZWxpZHNfd2l0aF9jb2xsaXN0LCBteXJlbGlkKTsK KwogCQkvKgogCQkgKiBBZGQgY2hpbGRyZW4gb2YgdGhpcyByZWwsIGlmIHJlcXVlc3RlZCwg c28gdGhhdCB0aGV5IHRvbyBhcmUgYWRkZWQKIAkJICogdG8gdGhlIHB1YmxpY2F0aW9uLiAg QSBwYXJ0aXRpb25lZCB0YWJsZSBjYW4ndCBoYXZlIGFueSBpbmhlcml0YW5jZQpAQCAtMTQ4 OCw2ICsxODA4LDE4IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQkJCQkJCQkg ZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRhbnQgV0hFUkUgY2xhdXNlcyBmb3IgdGFi bGUgXCIlc1wiIiwKIAkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkp OwogCisJCQkJCS8qCisJCQkJCSAqIFdlIGRvbid0IGFsbG93IHRvIHNwZWNpZnkgY29sdW1u IGxpc3QgZm9yIGJvdGggcGFyZW50CisJCQkJCSAqIGFuZCBjaGlsZCB0YWJsZSBhdCB0aGUg c2FtZSB0aW1lIGFzIGl0IGlzIG5vdCB2ZXJ5CisJCQkJCSAqIGNsZWFyIHdoaWNoIG9uZSBz aG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZS4KKwkJCQkJICovCisJCQkJCWlmIChjaGlsZHJl bGlkICE9IG15cmVsaWQgJiYKKwkJCQkJCSh0LT5jb2x1bW5zIHx8IGxpc3RfbWVtYmVyX29p ZChyZWxpZHNfd2l0aF9jb2xsaXN0LCBjaGlsZHJlbGlkKSkpCisJCQkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9PQkpFQ1QpLAorCQkJ CQkJCQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRhbnQgY29sdW1uIGxpc3RzIGZv ciB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJl bCkpKSk7CisKIAkJCQkJY29udGludWU7CiAJCQkJfQogCkBAIC0xNDk3LDExICsxODI5LDE2 IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQkJCXB1Yl9yZWwtPnJlbGF0aW9u ID0gcmVsOwogCQkJCS8qIGNoaWxkIGluaGVyaXRzIFdIRVJFIGNsYXVzZSBmcm9tIHBhcmVu dCAqLwogCQkJCXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+d2hlcmVDbGF1c2U7CisJCQkJ LyogY2hpbGQgaW5oZXJpdHMgY29sdW1uIGxpc3QgZnJvbSBwYXJlbnQgKi8KKwkJCQlwdWJf cmVsLT5jb2x1bW5zID0gdC0+Y29sdW1uczsKIAkJCQlyZWxzID0gbGFwcGVuZChyZWxzLCBw dWJfcmVsKTsKIAkJCQlyZWxpZHMgPSBsYXBwZW5kX29pZChyZWxpZHMsIGNoaWxkcmVsaWQp OwogCiAJCQkJaWYgKHQtPndoZXJlQ2xhdXNlKQogCQkJCQlyZWxpZHNfd2l0aF9yZiA9IGxh cHBlbmRfb2lkKHJlbGlkc193aXRoX3JmLCBjaGlsZHJlbGlkKTsKKworCQkJCWlmICh0LT5j b2x1bW5zKQorCQkJCQlyZWxpZHNfd2l0aF9jb2xsaXN0ID0gbGFwcGVuZF9vaWQocmVsaWRz X3dpdGhfY29sbGlzdCwgY2hpbGRyZWxpZCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNjEwLDYg KzE5NDcsMTEgQEAgUHVibGljYXRpb25Ecm9wVGFibGVzKE9pZCBwdWJpZCwgTGlzdCAqcmVs cywgYm9vbCBtaXNzaW5nX29rKQogCQlSZWxhdGlvbglyZWwgPSBwdWJyZWwtPnJlbGF0aW9u OwogCQlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKIAorCQlpZiAocHVi cmVsLT5jb2x1bW5zKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiY29sdW1uIGxpc3QgbXVzdCBub3QgYmUg c3BlY2lmaWVkIGluIEFMVEVSIFBVQkxJQ0FUSU9OIC4uLiBEUk9QIikpOworCiAJCXByaWQg PSBHZXRTeXNDYWNoZU9pZDIoUFVCTElDQVRJT05SRUxNQVAsIEFudW1fcGdfcHVibGljYXRp b25fcmVsX29pZCwKIAkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKIAkJCQkJ CQkgICBPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jCmluZGV4IGRjNTg3MmY5ODhjLi5hOWZkMGYwYzg5NSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv dGFibGVjbWRzLmMKQEAgLTgzNjUsNiArODM2NSw3IEBAIEFURXhlY0Ryb3BDb2x1bW4oTGlz dCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLAogCQkJCSBi b29sIG1pc3Npbmdfb2ssIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJCSBPYmplY3RBZGRyZXNz ZXMgKmFkZHJzKQogeworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwog CUhlYXBUdXBsZQl0dXBsZTsKIAlGb3JtX3BnX2F0dHJpYnV0ZSB0YXJnZXRhdHQ7CiAJQXR0 ck51bWJlcglhdHRudW07CkBAIC04Mzg0LDcgKzgzODUsNyBAQCBBVEV4ZWNEcm9wQ29sdW1u KExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKIAkv KgogCSAqIGdldCB0aGUgbnVtYmVyIG9mIHRoZSBhdHRyaWJ1dGUKIAkgKi8KLQl0dXBsZSA9 IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGNvbE5hbWUp OworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xOYW1lKTsKIAlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQogCXsKIAkJaWYgKCFtaXNzaW5nX29rKQpA QCAtODQzOCwxMyArODQzOSw0MiBAQCBBVEV4ZWNEcm9wQ29sdW1uKExpc3QgKip3cXVldWUs IFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKIAogCVJlbGVhc2VTeXNDYWNo ZSh0dXBsZSk7CiAKKwkvKgorCSAqIEFsc28sIGlmIHRoZSBjb2x1bW4gaXMgdXNlZCBpbiB0 aGUgY29sdW1uIGxpc3Qgb2YgYSBwdWJsaWNhdGlvbiwKKwkgKiBkaXNhbGxvdyB0aGUgZHJv cCBpZiB0aGUgRFJPUCBpcyBSRVNUUklDVC4gIFdlIGRvbid0IGRvIGFueXRoaW5nIGlmIHRo ZQorCSAqIERST1AgaXMgQ0FTQ0FERSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGVwZW5kZW5j eSBtZWNoYW5pc20gd2lsbCByZW1vdmUKKwkgKiB0aGUgcmVsYXRpb24gZnJvbSB0aGUgcHVi bGljYXRpb24uCisJICovCisJaWYgKGJlaGF2aW9yID09IERST1BfUkVTVFJJQ1QpCisJewor CQlMaXN0CSAgICpwdWJzOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlwdWJzID0gR2V0UmVs YXRpb25Db2x1bW5QYXJ0aWFsUHVibGljYXRpb25zKHJlbGlkKTsKKwkJZm9yZWFjaChsYywg cHVicykKKwkJeworCQkJT2lkCQkJcHViaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJCUxpc3QJ ICAgKnB1Ymxpc2hlZF9jb2xzOworCisJCQlwdWJsaXNoZWRfY29scyA9CisJCQkJR2V0UmVs YXRpb25Db2x1bW5MaXN0SW5QdWJsaWNhdGlvbihyZWxpZCwgcHViaWQpOworCisJCQlpZiAo bGlzdF9tZW1iZXJfb2lkKHB1Ymxpc2hlZF9jb2xzLCBhdHRudW0pKQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UQUJMRV9ERUZJTklUSU9O KSwKKwkJCQkJCWVycm1zZygiY2Fubm90IGRyb3AgY29sdW1uIFwiJXNcIiBiZWNhdXNlIGl0 IGlzIHBhcnQgb2YgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkgICBjb2xOYW1lLCBn ZXRfcHVibGljYXRpb25fbmFtZShwdWJpZCwgZmFsc2UpKSwKKwkJCQkJCWVycmhpbnQoIlNw ZWNpZnkgQ0FTQ0FERSBvciB1c2UgQUxURVIgUFVCTElDQVRJT04gdG8gcmVtb3ZlIHRoZSBj b2x1bW4gZnJvbSB0aGUgcHVibGljYXRpb24uIikpOworCQl9CisJfQorCiAJLyoKIAkgKiBQ cm9wYWdhdGUgdG8gY2hpbGRyZW4gYXMgYXBwcm9wcmlhdGUuICBVbmxpa2UgbW9zdCBvdGhl ciBBTFRFUgogCSAqIHJvdXRpbmVzLCB3ZSBoYXZlIHRvIGRvIHRoaXMgb25lIGxldmVsIG9m IHJlY3Vyc2lvbiBhdCBhIHRpbWU7IHdlIGNhbid0CiAJICogdXNlIGZpbmRfYWxsX2luaGVy aXRvcnMgdG8gZG8gaXQgaW4gb25lIHBhc3MuCiAJICovCiAJY2hpbGRyZW4gPQotCQlmaW5k X2luaGVyaXRhbmNlX2NoaWxkcmVuKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgbG9ja21vZGUp OworCQlmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKHJlbGlkLCBsb2NrbW9kZSk7CiAKIAlp ZiAoY2hpbGRyZW4pCiAJewpAQCAtODUzMiw3ICs4NTYyLDcgQEAgQVRFeGVjRHJvcENvbHVt bihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAK IAkvKiBBZGQgb2JqZWN0IHRvIGRlbGV0ZSAqLwogCW9iamVjdC5jbGFzc0lkID0gUmVsYXRp b25SZWxhdGlvbklkOwotCW9iamVjdC5vYmplY3RJZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVs KTsKKwlvYmplY3Qub2JqZWN0SWQgPSByZWxpZDsKIAlvYmplY3Qub2JqZWN0U3ViSWQgPSBh dHRudW07CiAJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNzKCZvYmplY3QsIGFkZHJzKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRleCAwOWY3OGYyMjQ0 MS4uM2UyODJlZDk5YWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlv bi5jCkBAIC01NzMsOSArNTczLDYgQEAgQ2hlY2tDbWRSZXBsaWNhSWRlbnRpdHkoUmVsYXRp b24gcmVsLCBDbWRUeXBlIGNtZCkKIAlpZiAoY21kICE9IENNRF9VUERBVEUgJiYgY21kICE9 IENNRF9ERUxFVEUpCiAJCXJldHVybjsKIAotCWlmIChyZWwtPnJkX3JlbC0+cmVscmVwbGlk ZW50ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCkKLQkJcmV0dXJuOwotCiAJLyoKIAkgKiBJ dCBpcyBvbmx5IHNhZmUgdG8gZXhlY3V0ZSBVUERBVEUvREVMRVRFIHdoZW4gYWxsIGNvbHVt bnMsIHJlZmVyZW5jZWQKIAkgKiBpbiB0aGUgcm93IGZpbHRlcnMgZnJvbSBwdWJsaWNhdGlv bnMgd2hpY2ggdGhlIHJlbGF0aW9uIGlzIGluLCBhcmUKQEAgLTU5NSwxNyArNTkyLDMzIEBA IENoZWNrQ21kUmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbCwgQ21kVHlwZSBjbWQpCiAJ CQkJIGVycm1zZygiY2Fubm90IHVwZGF0ZSB0YWJsZSBcIiVzXCIiLAogCQkJCQkJUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSksCiAJCQkJIGVycmRldGFpbCgiQ29sdW1uIHVzZWQg aW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90IHBhcnQgb2YgdGhl IHJlcGxpY2EgaWRlbnRpdHkuIikpKTsKKwllbHNlIGlmIChjbWQgPT0gQ01EX1VQREFURSAm JiAhcHViZGVzYy5jb2xzX3ZhbGlkX2Zvcl91cGRhdGUpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAorCQkJCSBl cnJtc2coImNhbm5vdCB1cGRhdGUgdGFibGUgXCIlc1wiIiwKKwkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpLAorCQkJCSBlcnJkZXRhaWwoIkNvbHVtbiBsaXN0IHVzZWQg YnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5 LiIpKSk7CiAJZWxzZSBpZiAoY21kID09IENNRF9ERUxFVEUgJiYgIXB1YmRlc2MucmZfdmFs aWRfZm9yX2RlbGV0ZSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCiAJCQkJIGVycm1zZygiY2Fubm90IGRlbGV0 ZSBmcm9tIHRhYmxlIFwiJXNcIiIsCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKSwKIAkJCQkgZXJyZGV0YWlsKCJDb2x1bW4gdXNlZCBpbiB0aGUgcHVibGljYXRpb24g V0hFUkUgZXhwcmVzc2lvbiBpcyBub3QgcGFydCBvZiB0aGUgcmVwbGljYSBpZGVudGl0eS4i KSkpOworCWVsc2UgaWYgKGNtZCA9PSBDTURfREVMRVRFICYmICFwdWJkZXNjLmNvbHNfdmFs aWRfZm9yX2RlbGV0ZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCisJCQkJIGVycm1zZygiY2Fubm90IGRlbGV0 ZSBmcm9tIHRhYmxlIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpKSwKKwkJCQkgZXJyZGV0YWlsKCJDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNh dGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4iKSkpOwogCiAJLyog SWYgcmVsYXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgd2UgYXJlIGFsd2F5cyBnb29kLiAq LwogCWlmIChPaWRJc1ZhbGlkKFJlbGF0aW9uR2V0UmVwbGljYUluZGV4KHJlbCkpKQogCQly ZXR1cm47CiAKKwkvKiBSRVBMSUNBIElERU5USVRZIEZVTEwgaXMgYWxzbyBnb29kIGZvciBV UERBVEUvREVMRVRFLiAqLworCWlmIChyZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50ID09IFJF UExJQ0FfSURFTlRJVFlfRlVMTCkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBUaGlzIGlzIFVQ REFURS9ERUxFVEUgYW5kIHRoZXJlIGlzIG5vIHJlcGxpY2EgaWRlbnRpdHkuCiAJICoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIvc3JjL2JhY2tlbmQv bm9kZXMvY29weWZ1bmNzLmMKaW5kZXggZDRmODQ1NWEyYmQuLmE1MDQ0Mzc4NzNmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysgYi9zcmMvYmFja2Vu ZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtNDg1MCw2ICs0ODUwLDcgQEAgX2NvcHlQdWJsaWNh dGlvblRhYmxlKGNvbnN0IFB1YmxpY2F0aW9uVGFibGUgKmZyb20pCiAKIAlDT1BZX05PREVf RklFTEQocmVsYXRpb24pOwogCUNPUFlfTk9ERV9GSUVMRCh3aGVyZUNsYXVzZSk7CisJQ09Q WV9OT0RFX0ZJRUxEKGNvbHVtbnMpOwogCiAJcmV0dXJuIG5ld25vZGU7CiB9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rl cy9lcXVhbGZ1bmNzLmMKaW5kZXggZjEwMDJhZmU3YTAuLjRmYzE2Y2UwNGUzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv bm9kZXMvZXF1YWxmdW5jcy5jCkBAIC0yMzIyLDYgKzIzMjIsNyBAQCBfZXF1YWxQdWJsaWNh dGlvblRhYmxlKGNvbnN0IFB1YmxpY2F0aW9uVGFibGUgKmEsIGNvbnN0IFB1YmxpY2F0aW9u VGFibGUgKmIpCiB7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKHJlbGF0aW9uKTsKIAlDT01QQVJF X05PREVfRklFTEQod2hlcmVDbGF1c2UpOworCUNPTVBBUkVfTk9ERV9GSUVMRChjb2x1bW5z KTsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggYTAzYjMzYjUzYmQu LjI1YzliMjlhZmRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55Cisr KyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTk3NTEsMTMgKzk3NTEsMTQgQEAg Q3JlYXRlUHVibGljYXRpb25TdG10OgogICogcmVsYXRpb25fZXhwciBoZXJlLgogICovCiBQ dWJsaWNhdGlvbk9ialNwZWM6Ci0JCQlUQUJMRSByZWxhdGlvbl9leHByIE9wdFdoZXJlQ2xh dXNlCisJCQlUQUJMRSByZWxhdGlvbl9leHByIG9wdF9jb2x1bW5fbGlzdCBPcHRXaGVyZUNs YXVzZQogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOwog CQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX1RBQkxFOwogCQkJCQkkJC0+ cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRh YmxlLT5yZWxhdGlvbiA9ICQyOwotCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0g JDM7CisJCQkJCSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQzOworCQkJCQkkJC0+cHVidGFi bGUtPndoZXJlQ2xhdXNlID0gJDQ7CiAJCQkJfQogCQkJfCBBTEwgVEFCTEVTIElOX1AgU0NI RU1BIENvbElkCiAJCQkJewpAQCAtOTc3MiwxMSArOTc3MywxMiBAQCBQdWJsaWNhdGlvbk9i alNwZWM6CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfVEFCTEVTX0lO X0NVUl9TQ0hFTUE7CiAJCQkJCSQkLT5sb2NhdGlvbiA9IEA1OwogCQkJCX0KLQkJCXwgQ29s SWQgT3B0V2hlcmVDbGF1c2UKKwkJCXwgQ29sSWQgb3B0X2NvbHVtbl9saXN0IE9wdFdoZXJl Q2xhdXNlCiAJCQkJewogCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7 CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9OOwot CQkJCQlpZiAoJDIpCisJCQkJCS8qIEZJWE1FIHRoaXMgaXMgYSBiaXQgY3VtYmVyc29tZSAq LworCQkJCQlpZiAoJDIgfHwgJDMpCiAJCQkJCXsKIAkJCQkJCS8qCiAJCQkJCQkgKiBUaGUg T3B0V2hlcmVDbGF1c2UgbXVzdCBiZSBzdG9yZWQgaGVyZSBidXQgaXQgaXMKQEAgLTk3ODYs NyArOTc4OCw4IEBAIFB1YmxpY2F0aW9uT2JqU3BlYzoKIAkJCQkJCSAqLwogCQkJCQkJJCQt PnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CiAJCQkJCQkkJC0+cHVi dGFibGUtPnJlbGF0aW9uID0gbWFrZVJhbmdlVmFyKE5VTEwsICQxLCBAMSk7Ci0JCQkJCQkk JC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDI7CisJCQkJCQkkJC0+cHVidGFibGUtPmNv bHVtbnMgPSAkMjsKKwkJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkMzsKIAkJ CQkJfQogCQkJCQllbHNlCiAJCQkJCXsKQEAgLTk3OTQsMjMgKzk3OTcsMjUgQEAgUHVibGlj YXRpb25PYmpTcGVjOgogCQkJCQl9CiAJCQkJCSQkLT5sb2NhdGlvbiA9IEAxOwogCQkJCX0K LQkJCXwgQ29sSWQgaW5kaXJlY3Rpb24gT3B0V2hlcmVDbGF1c2UKKwkJCXwgQ29sSWQgaW5k aXJlY3Rpb24gb3B0X2NvbHVtbl9saXN0IE9wdFdoZXJlQ2xhdXNlCiAJCQkJewogCQkJCQkk JCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CiAJCQkJCSQkLT5wdWJvYmp0eXBl ID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9OOwogCQkJCQkkJC0+cHVidGFibGUgPSBt YWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRhYmxlLT5yZWxhdGlv biA9IG1ha2VSYW5nZVZhckZyb21RdWFsaWZpZWROYW1lKCQxLCAkMiwgQDEsIHl5c2Nhbm5l cik7Ci0JCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkMzsKKwkJCQkJJCQtPnB1 YnRhYmxlLT5jb2x1bW5zID0gJDM7CisJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2Ug PSAkNDsKIAkJCQkJJCQtPmxvY2F0aW9uID0gQDE7CiAJCQkJfQogCQkJLyogZ3JhbW1hciBs aWtlIHRhYmxlbmFtZSAqICwgT05MWSB0YWJsZW5hbWUsIE9OTFkgKCB0YWJsZW5hbWUgKSAq LwotCQkJfCBleHRlbmRlZF9yZWxhdGlvbl9leHByIE9wdFdoZXJlQ2xhdXNlCisJCQl8IGV4 dGVuZGVkX3JlbGF0aW9uX2V4cHIgb3B0X2NvbHVtbl9saXN0IE9wdFdoZXJlQ2xhdXNlCiAJ CQkJewogCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CiAJCQkJCSQk LT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9OOwogCQkJCQkkJC0+ cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRh YmxlLT5yZWxhdGlvbiA9ICQxOwotCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0g JDI7CisJCQkJCSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQyOworCQkJCQkkJC0+cHVidGFi bGUtPndoZXJlQ2xhdXNlID0gJDM7CiAJCQkJfQogCQkJfCBDVVJSRU5UX1NDSEVNQQogCQkJ CXsKQEAgLTk4MzYsNiArOTg0MSwxMCBAQCBwdWJfb2JqX2xpc3Q6IAlQdWJsaWNhdGlvbk9i alNwZWMKICAqCiAgKiBBTFRFUiBQVUJMSUNBVElPTiBuYW1lIFNFVCBwdWJfb2JqIFssIC4u Ll0KICAqCisgKiBBTFRFUiBQVUJMSUNBVElPTiBuYW1lIFNFVCBDT0xVTU5TIHRhYmxlX25h bWUgKGNvbHVtblssIC4uLl0pCisgKgorICogQUxURVIgUFVCTElDQVRJT04gbmFtZSBTRVQg Q09MVU1OUyB0YWJsZV9uYW1lIEFMTAorICoKICAqIHB1Yl9vYmogaXMgb25lIG9mOgogICoK ICAqCQlUQUJMRSB0YWJsZV9uYW1lIFssIC4uLl0KQEAgLTk4NjksNiArOTg3OCwzMiBAQCBB bHRlclB1YmxpY2F0aW9uU3RtdDoKIAkJCQkJbi0+YWN0aW9uID0gQVBfU2V0T2JqZWN0czsK IAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQorCQkJfCBBTFRFUiBQVUJMSUNBVElPTiBu YW1lIEFMVEVSIFRBQkxFIHJlbGF0aW9uX2V4cHIgU0VUIENPTFVNTlMgJygnIGNvbHVtbkxp c3QgJyknCisJCQkJeworCQkJCQlBbHRlclB1YmxpY2F0aW9uU3RtdCAqbiA9IG1ha2VOb2Rl KEFsdGVyUHVibGljYXRpb25TdG10KTsKKwkJCQkJUHVibGljYXRpb25PYmpTcGVjICpvYmog PSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOworCQkJCQlvYmotPnB1Ym9ianR5cGUg PSBQVUJMSUNBVElPTk9CSl9UQUJMRTsKKwkJCQkJb2JqLT5wdWJ0YWJsZSA9IG1ha2VOb2Rl KFB1YmxpY2F0aW9uVGFibGUpOworCQkJCQlvYmotPnB1YnRhYmxlLT5yZWxhdGlvbiA9ICQ2 OworCQkJCQlvYmotPnB1YnRhYmxlLT5jb2x1bW5zID0gJDEwOworCQkJCQluLT5wdWJuYW1l ID0gJDM7CisJCQkJCW4tPnB1Ym9iamVjdHMgPSBsaXN0X21ha2UxKG9iaik7CisJCQkJCW4t PmFjdGlvbiA9IEFQX1NldENvbHVtbnM7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9 CisJCQl8IEFMVEVSIFBVQkxJQ0FUSU9OIG5hbWUgQUxURVIgVEFCTEUgcmVsYXRpb25fZXhw ciBTRVQgQ09MVU1OUyBBTEwKKwkJCQl7CisJCQkJCUFsdGVyUHVibGljYXRpb25TdG10ICpu ID0gbWFrZU5vZGUoQWx0ZXJQdWJsaWNhdGlvblN0bXQpOworCQkJCQlQdWJsaWNhdGlvbk9i alNwZWMgKm9iaiA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CisJCQkJCW9iai0+ cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX1RBQkxFOworCQkJCQlvYmotPnB1YnRhYmxl ID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CisJCQkJCW9iai0+cHVidGFibGUtPnJl bGF0aW9uID0gJDY7CisJCQkJCW9iai0+cHVidGFibGUtPmNvbHVtbnMgPSBOSUw7CisJCQkJ CW4tPnB1Ym5hbWUgPSAkMzsKKwkJCQkJbi0+cHVib2JqZWN0cyA9IGxpc3RfbWFrZTEob2Jq KTsKKwkJCQkJbi0+YWN0aW9uID0gQVBfU2V0Q29sdW1uczsKKwkJCQkJJCQgPSAoTm9kZSAq KSBuOworCQkJCX0KIAkJCXwgQUxURVIgUFVCTElDQVRJT04gbmFtZSBEUk9QIHB1Yl9vYmpf bGlzdAogCQkJCXsKIAkJCQkJQWx0ZXJQdWJsaWNhdGlvblN0bXQgKm4gPSBtYWtlTm9kZShB bHRlclB1YmxpY2F0aW9uU3RtdCk7CkBAIC0xNzQ4OCw2ICsxNzUyMywxMyBAQCBwcmVwcm9j ZXNzX3B1Ym9ial9saXN0KExpc3QgKnB1Ym9ianNwZWNfbGlzdCwgY29yZV95eXNjYW5fdCB5 eXNjYW5uZXIpCiAJCQkJCQllcnJtc2coIldIRVJFIGNsYXVzZSBub3QgYWxsb3dlZCBmb3Ig c2NoZW1hIiksCiAJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHVib2JqLT5sb2NhdGlvbikp OwogCisJCQkvKiBDb2x1bW4gZmlsdGVyIGlzIG5vdCBhbGxvd2VkIG9uIGEgc2NoZW1hIG9i amVjdCAqLworCQkJaWYgKHB1Ym9iai0+cHVidGFibGUgJiYgcHVib2JqLT5wdWJ0YWJsZS0+ Y29sdW1ucykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJDT0RFX1NZ TlRBWF9FUlJPUiksCisJCQkJCQllcnJtc2coImNvbHVtbiBzcGVjaWZpY2F0aW9uIG5vdCBh bGxvd2VkIGZvciBzY2hlbWEiKSwKKwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwdWJvYmot PmxvY2F0aW9uKSk7CisKIAkJCS8qCiAJCQkgKiBXZSBjYW4gZGlzdGluZ3Vpc2ggYmV0d2Vl biB0aGUgZGlmZmVyZW50IHR5cGUgb2Ygc2NoZW1hCiAJCQkgKiBvYmplY3RzIGJhc2VkIG9u IHdoZXRoZXIgbmFtZSBhbmQgcHVidGFibGUgaXMgc2V0LgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGM5YjBlZWVmZDdlLi44MTZkNDYxYWNkMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtMjksMTYg KzI5LDI1IEBACiAjZGVmaW5lIFRSVU5DQVRFX0NBU0NBREUJCSgxPDwwKQogI2RlZmluZSBU UlVOQ0FURV9SRVNUQVJUX1NFUVMJKDE8PDEpCiAKLXN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBf d3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCk7CitzdGF0aWMgdm9p ZCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0luZm8gb3V0LCBSZWxhdGlvbiByZWws CisJCQkJCQkJCSAgIEJpdG1hcHNldCAqY29sdW1ucyk7CiBzdGF0aWMgdm9pZCBsb2dpY2Fs cmVwX3dyaXRlX3R1cGxlKFN0cmluZ0luZm8gb3V0LCBSZWxhdGlvbiByZWwsCiAJCQkJCQkJ CSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCQkgICBib29sIGJpbmFyeSk7CisJ CQkJCQkJCSAgIGJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogc3RhdGljIHZv aWQgbG9naWNhbHJlcF9yZWFkX2F0dHJzKFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBSZWxh dGlvbiAqcmVsKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfcmVhZF90dXBsZShTdHJpbmdJ bmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBsZSk7CiAKIHN0YXRpYyB2b2lkIGxv Z2ljYWxyZXBfd3JpdGVfbmFtZXNwYWNlKFN0cmluZ0luZm8gb3V0LCBPaWQgbnNwaWQpOwog c3RhdGljIGNvbnN0IGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9uYW1lc3BhY2UoU3RyaW5nSW5m byBpbik7CiAKKworc3RhdGljIGJvb2wKK2NvbHVtbl9pbl9zZXQoaW50IGF0dG51bSwgQml0 bWFwc2V0ICpjb2x1bW5zKQoreworCXJldHVybiAoY29sdW1ucyA9PSBOVUxMIHx8IGJtc19p c19tZW1iZXIoYXR0bnVtLCBjb2x1bW5zKSk7Cit9CisKKwogLyoKICAqIFdyaXRlIEJFR0lO IHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0zOTgsNyArNDA3LDcgQEAgbG9naWNh bHJlcF9yZWFkX29yaWdpbihTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpvcmlnaW5fbHNu KQogICovCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwg VHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKLQkJCQkJCVR1cGxlVGFibGVTbG90 ICpuZXdzbG90LCBib29sIGJpbmFyeSkKKwkJCQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90 LCBib29sIGJpbmFyeSwgQml0bWFwc2V0ICpjb2x1bW5zKQogewogCXBxX3NlbmRieXRlKG91 dCwgTE9HSUNBTF9SRVBfTVNHX0lOU0VSVCk7CiAKQEAgLTQxMCw3ICs0MTksNyBAQCBsb2dp Y2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs IFJlbGF0aW9uIHJlbCwKIAlwcV9zZW5kaW50MzIob3V0LCBSZWxhdGlvbkdldFJlbGlkKHJl bCkpOwogCiAJcHFfc2VuZGJ5dGUob3V0LCAnTicpOwkJLyogbmV3IHR1cGxlIGZvbGxvd3Mg Ki8KLQlsb2dpY2FscmVwX3dyaXRlX3R1cGxlKG91dCwgcmVsLCBuZXdzbG90LCBiaW5hcnkp OworCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG5ld3Nsb3QsIGJpbmFyeSwg Y29sdW1ucyk7CiB9CiAKIC8qCkBAIC00NDMsNyArNDUyLDcgQEAgbG9naWNhbHJlcF9yZWFk X2luc2VydChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICpuZXd0dXApCiB2 b2lkCiBsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rp b25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAkJCQkJCVR1cGxlVGFibGVTbG90ICpvbGRzbG90 LCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCwKLQkJCQkJCWJvb2wgYmluYXJ5KQorCQkJCQkJ Ym9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAlwcV9zZW5kYnl0ZShvdXQs IExPR0lDQUxfUkVQX01TR19VUERBVEUpOwogCkBAIC00NjQsMTEgKzQ3MywxMSBAQCBsb2dp Y2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs IFJlbGF0aW9uIHJlbCwKIAkJCXBxX3NlbmRieXRlKG91dCwgJ08nKTsJLyogb2xkIHR1cGxl IGZvbGxvd3MgKi8KIAkJZWxzZQogCQkJcHFfc2VuZGJ5dGUob3V0LCAnSycpOwkvKiBvbGQg a2V5IGZvbGxvd3MgKi8KLQkJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xk c2xvdCwgYmluYXJ5KTsKKwkJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xk c2xvdCwgYmluYXJ5LCBjb2x1bW5zKTsKIAl9CiAKIAlwcV9zZW5kYnl0ZShvdXQsICdOJyk7 CQkvKiBuZXcgdHVwbGUgZm9sbG93cyAqLwotCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0 LCByZWwsIG5ld3Nsb3QsIGJpbmFyeSk7CisJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQs IHJlbCwgbmV3c2xvdCwgYmluYXJ5LCBjb2x1bW5zKTsKIH0KIAogLyoKQEAgLTUzNyw3ICs1 NDYsNyBAQCBsb2dpY2FscmVwX3dyaXRlX2RlbGV0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAllbHNlCiAJCXBxX3NlbmRieXRlKG91dCwg J0snKTsJLyogb2xkIGtleSBmb2xsb3dzICovCiAKLQlsb2dpY2FscmVwX3dyaXRlX3R1cGxl KG91dCwgcmVsLCBvbGRzbG90LCBiaW5hcnkpOworCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUo b3V0LCByZWwsIG9sZHNsb3QsIGJpbmFyeSwgTlVMTCk7CiB9CiAKIC8qCkBAIC02NTIsNyAr NjYxLDggQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNj cmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVhbS4KICAqLwogdm9pZAotbG9naWNhbHJlcF93 cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBSZWxhdGlvbiBy ZWwpCitsb2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25J ZCB4aWQsIFJlbGF0aW9uIHJlbCwKKwkJCQkJIEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAlj aGFyCSAgICpyZWxuYW1lOwogCkBAIC02NzQsNyArNjg0LDcgQEAgbG9naWNhbHJlcF93cml0 ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBSZWxhdGlvbiByZWwp CiAJcHFfc2VuZGJ5dGUob3V0LCByZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50KTsKIAogCS8q IHNlbmQgdGhlIGF0dHJpYnV0ZSBpbmZvICovCi0JbG9naWNhbHJlcF93cml0ZV9hdHRycyhv dXQsIHJlbCk7CisJbG9naWNhbHJlcF93cml0ZV9hdHRycyhvdXQsIHJlbCwgY29sdW1ucyk7 CiB9CiAKIC8qCkBAIC03NTEsNyArNzYxLDcgQEAgbG9naWNhbHJlcF9yZWFkX3R5cChTdHJp bmdJbmZvIGluLCBMb2dpY2FsUmVwVHlwICpsdHlwKQogICovCiBzdGF0aWMgdm9pZAogbG9n aWNhbHJlcF93cml0ZV90dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJICAgYm9vbCBiaW5hcnkpCisJCQkJCSAgIGJvb2wg YmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNjCWRlc2M7CiAJRGF0 dW0JICAgKnZhbHVlczsKQEAgLTc2Myw4ICs3NzMsMTQgQEAgbG9naWNhbHJlcF93cml0ZV90 dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKIAogCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5uYXR0czsgaSsrKQogCXsKLQkJaWYgKFR1 cGxlRGVzY0F0dHIoZGVzYywgaSktPmF0dGlzZHJvcHBlZCB8fCBUdXBsZURlc2NBdHRyKGRl c2MsIGkpLT5hdHRnZW5lcmF0ZWQpCisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxl RGVzY0F0dHIoZGVzYywgaSk7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+ YXR0Z2VuZXJhdGVkKQogCQkJY29udGludWU7CisKKwkJaWYgKCFjb2x1bW5faW5fc2V0KGF0 dC0+YXR0bnVtLCBjb2x1bW5zKSkKKwkJCWNvbnRpbnVlOworCiAJCW5saXZlYXR0cysrOwog CX0KIAlwcV9zZW5kaW50MTYob3V0LCBubGl2ZWF0dHMpOwpAQCAtNzgzLDYgKzc5OSw5IEBA IGxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCwg VHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQt PmF0dGdlbmVyYXRlZCkKIAkJCWNvbnRpbnVlOwogCisJCWlmICghY29sdW1uX2luX3NldChh dHQtPmF0dG51bSwgY29sdW1ucykpCisJCQljb250aW51ZTsKKwogCQlpZiAoaXNudWxsW2ld KQogCQl7CiAJCQlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxSRVBfQ09MVU1OX05VTEwpOwpA QCAtOTA0LDcgKzkyMyw3IEBAIGxvZ2ljYWxyZXBfcmVhZF90dXBsZShTdHJpbmdJbmZvIGlu LCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBsZSkKICAqIFdyaXRlIHJlbGF0aW9uIGF0dHJp YnV0ZSBtZXRhZGF0YSB0byB0aGUgc3RyZWFtLgogICovCiBzdGF0aWMgdm9pZAotbG9naWNh bHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsKQorbG9naWNh bHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBCaXRtYXBz ZXQgKmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNjCWRlc2M7CiAJaW50CQkJaTsKQEAgLTkxNyw4 ICs5MzYsMTQgQEAgbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVs YXRpb24gcmVsKQogCS8qIHNlbmQgbnVtYmVyIG9mIGxpdmUgYXR0cmlidXRlcyAqLwogCWZv ciAoaSA9IDA7IGkgPCBkZXNjLT5uYXR0czsgaSsrKQogCXsKLQkJaWYgKFR1cGxlRGVzY0F0 dHIoZGVzYywgaSktPmF0dGlzZHJvcHBlZCB8fCBUdXBsZURlc2NBdHRyKGRlc2MsIGkpLT5h dHRnZW5lcmF0ZWQpCisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIo ZGVzYywgaSk7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJh dGVkKQogCQkJY29udGludWU7CisKKwkJaWYgKCFjb2x1bW5faW5fc2V0KGF0dC0+YXR0bnVt LCBjb2x1bW5zKSkKKwkJCWNvbnRpbnVlOworCiAJCW5saXZlYXR0cysrOwogCX0KIAlwcV9z ZW5kaW50MTYob3V0LCBubGl2ZWF0dHMpOwpAQCAtOTM3LDYgKzk2Miw5IEBAIGxvZ2ljYWxy ZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCkKIAkJaWYgKGF0 dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQogCQkJY29udGludWU7CiAK KwkJaWYgKCFjb2x1bW5faW5fc2V0KGF0dC0+YXR0bnVtLCBjb2x1bW5zKSkKKwkJCWNvbnRp bnVlOworCiAJCS8qIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBtZWFucyBhbGwgY29sdW1ucyBh cmUgc2VudCBhcyBwYXJ0IG9mIGtleS4gKi8KIAkJaWYgKHJlcGxpZGVudGZ1bGwgfHwKIAkJ CWJtc19pc19tZW1iZXIoYXR0LT5hdHRudW0gLSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmli dXRlTnVtYmVyLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVz eW5jLmMKaW5kZXggMTY1OTk2NDU3MWMuLjZlYjlmYzkwMmI3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTExMiw2ICsxMTIsNyBA QAogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgi CiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC03MDEsMTIgKzcwMiwxMyBAQCBm ZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAog CVN0cmluZ0luZm9EYXRhIGNtZDsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIAlPaWQJCQl0 YWJsZVJvd1tdID0ge09JRE9JRCwgQ0hBUk9JRCwgQ0hBUk9JRH07Ci0JT2lkCQkJYXR0clJv d1tdID0ge1RFWFRPSUQsIE9JRE9JRCwgQk9PTE9JRH07CisJT2lkCQkJYXR0clJvd1tdID0g e0lOVDJPSUQsIFRFWFRPSUQsIE9JRE9JRCwgQk9PTE9JRH07CiAJT2lkCQkJcXVhbFJvd1td ID0ge1RFWFRPSUR9OwogCWJvb2wJCWlzbnVsbDsKIAlpbnQJCQluYXR0OwogCUxpc3RDZWxs ICAgKmxjOwogCWJvb2wJCWZpcnN0OworCUJpdG1hcHNldCAgKmluY2x1ZGVkX2NvbHMgPSBO VUxMOwogCiAJbHJlbC0+bnNwbmFtZSA9IG5zcG5hbWU7CiAJbHJlbC0+cmVsbmFtZSA9IHJl bG5hbWU7CkBAIC03NDcsMTAgKzc0OSwxMzkgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8o Y2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFi bGVTbG90KHNsb3QpOwogCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKIAotCS8qIE5vdyBm ZXRjaCBjb2x1bW5zLiAqLworCisJLyoKKwkgKiBHZXQgY29sdW1uIGxpc3RzIGZvciBlYWNo IHJlbGF0aW9uLgorCSAqCisJICogRm9yIGluaXRpYWwgc3luY2hyb25pemF0aW9uLCBjb2x1 bW4gbGlzdHMgY2FuIGJlIGlnbm9yZWQgaW4gZm9sbG93aW5nCisJICogY2FzZXM6CisJICoK KwkgKiAxKSBvbmUgb2YgdGhlIHN1YnNjcmliZWQgcHVibGljYXRpb25zIGZvciB0aGUgdGFi bGUgaGFzbid0IHNwZWNpZmllZAorCSAqIGFueSBjb2x1bW4gbGlzdAorCSAqCisJICogMikg b25lIG9mIHRoZSBzdWJzY3JpYmVkIHB1YmxpY2F0aW9ucyBoYXMgcHViYWxsdGFibGVzIHNl dCB0byB0cnVlCisJICoKKwkgKiAzKSBvbmUgb2YgdGhlIHN1YnNjcmliZWQgcHVibGljYXRp b25zIGlzIGRlY2xhcmVkIGFzIEFMTCBUQUJMRVMgSU4KKwkgKiBTQ0hFTUEgdGhhdCBpbmNs dWRlcyB0aGlzIHJlbGF0aW9uCisJICovCisJaWYgKHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihM b2dSZXBXb3JrZXJXYWxSY3ZDb25uKSA+PSAxNTAwMDApCisJeworCQlXYWxSY3ZFeGVjUmVz dWx0ICpwdWJyZXM7CisJCVR1cGxlVGFibGVTbG90ICpzbG90OworCQlPaWQJCQlhdHRyc1Jv d1tdID0ge0lOVDJPSUR9OworCQlTdHJpbmdJbmZvRGF0YSBwdWJfbmFtZXM7CisJCWJvb2wJ CWZpcnN0ID0gdHJ1ZTsKKwkJYm9vbAkJYWxsX2NvbHVtbnMgPSBmYWxzZTsKKworCQlpbml0 U3RyaW5nSW5mbygmcHViX25hbWVzKTsKKwkJZm9yZWFjaChsYywgTXlTdWJzY3JpcHRpb24t PnB1YmxpY2F0aW9ucykKKwkJeworCQkJaWYgKCFmaXJzdCkKKwkJCQlhcHBlbmRTdHJpbmdJ bmZvKCZwdWJfbmFtZXMsICIsICIpOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcHVi X25hbWVzLCBxdW90ZV9saXRlcmFsX2NzdHIoc3RyVmFsKGxmaXJzdChsYykpKSk7CisJCQlm aXJzdCA9IGZhbHNlOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIGNvbHVtbiBmaWx0 ZXJzIC0gd2UgZmlyc3QgY2hlY2sgaWYgdGhlcmUncyBhbnkgcHVibGljYXRpb24KKwkJICog dGhhdCBoYXMgbm8gY29sdW1uIGxpc3QgZm9yIHRoZSBnaXZlbiByZWxhdGlvbiwgd2hpY2gg bWVhbnMgd2Ugc2hhbGwKKwkJICogcmVwbGljYXRlIGFsbCBjb2x1bW5zLgorCQkgKgorCQkg KiBJdCdzIGVhc2llciB0aGFuIGhhdmluZyB0byBkbyB0aGlzIHNlcGFyYXRlbHksIGFuZCBv bmx5IHRoZW4gZG8gdGhlCisJCSAqIHNlY29uZCBxdWVyeSAKKwkJICovCisJCXJlc2V0U3Ry aW5nSW5mbygmY21kKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJICJTRUxF Q1QgMSIKKwkJCQkJCSAiICBGUk9NIHBnX3B1YmxpY2F0aW9uIHAiCisJCQkJCQkgIiAgTEVG VCBPVVRFUiBKT0lOIHBnX3B1YmxpY2F0aW9uX3JlbCBwciIKKwkJCQkJCSAiICAgICAgIE9O IChwLm9pZCA9IHByLnBycHViaWQgQU5EIHByLnBycmVsaWQgPSAldSksIgorCQkJCQkJICIg IExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCIKKwkJ CQkJCSAiIFdIRVJFIGdwdC5yZWxpZCA9ICV1IgorCQkJCQkJICIgICBBTkQgcC5wdWJuYW1l IElOICggJXMgKSBBTkQgcHIucHJhdHRycyBJUyBOVUxMIExJTUlUIDEiLAorCQkJCQkJIGxy ZWwtPnJlbW90ZWlkLAorCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJIHB1Yl9uYW1l cy5kYXRhKTsKKworCQlwdWJyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZD b25uLCBjbWQuZGF0YSwKKwkJCQkJCQkgbGVuZ3Rob2YoYXR0cnNSb3cpLCBhdHRyc1Jvdyk7 CisKKwkJaWYgKHB1YnJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSks CisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBmZXRjaCBjb2x1bW4gbGlzdCBpbmZvIGZvciB0 YWJsZSBcIiVzLiVzXCIgZnJvbSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJCQluc3BuYW1lLCBy ZWxuYW1lLCBwdWJyZXMtPmVycikpKTsKKworCQlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFi bGVTbG90KHB1YnJlcy0+dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwkJaWYg KHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KHB1YnJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFs c2UsIHNsb3QpKQorCQkJYWxsX2NvbHVtbnMgPSB0cnVlOworCisJCUV4ZWNEcm9wU2luZ2xl VHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCXdhbHJjdl9jbGVhcl9yZXN1bHQocHVicmVzKTsK KworCQlpZiAoIWFsbF9jb2x1bW5zKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7 CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkJICJTRUxFQ1QgdW5uZXN0KHBy LnByYXR0cnMpIgorCQkJCQkJCSAiICBGUk9NIHBnX3B1YmxpY2F0aW9uIHAiCisJCQkJCQkJ ICIgIExFRlQgT1VURVIgSk9JTiBwZ19wdWJsaWNhdGlvbl9yZWwgcHIiCisJCQkJCQkJICIg ICAgICAgT04gKHAub2lkID0gcHIucHJwdWJpZCBBTkQgcHIucHJyZWxpZCA9ICV1KSwiCisJ CQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUp IGdwdCIKKwkJCQkJCQkgIiBXSEVSRSBncHQucmVsaWQgPSAldSIKKwkJCQkJCQkgIiAgIEFO RCBwLnB1Ym5hbWUgSU4gKCAlcyApIEFORCBwci5wcmF0dHJzIElTIE5PVCBOVUxMIiwKKwkJ CQkJCQkgbHJlbC0+cmVtb3RlaWQsCisJCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJ CSBwdWJfbmFtZXMuZGF0YSk7CisKKwkJCXB1YnJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdv cmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLAorCQkJCQkJCQkgbGVuZ3Rob2YoYXR0cnNSb3cp LCBhdHRyc1Jvdyk7CisKKwkJCWlmIChwdWJyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQ TEVTKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5F Q1RJT05fRkFJTFVSRSksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZmV0Y2ggY29sdW1u IGxpc3QgaW5mbyBmb3IgdGFibGUgXCIlcy4lc1wiIGZyb20gcHVibGlzaGVyOiAlcyIsCisJ CQkJCQkJCW5zcG5hbWUsIHJlbG5hbWUsIHB1YnJlcy0+ZXJyKSkpOworCisJCQkvKgorCQkJ ICogTXVsdGlwbGUgY29sdW1uIGxpc3QgZXhwcmVzc2lvbnMgZm9yIHRoZSBzYW1lIHRhYmxl IHdpbGwgYmUgY29tYmluZWQKKwkJCSAqIGJ5IG1lcmdpbmcgdGhlbS4gSWYgYW55IG9mIHRo ZSBsaXN0cyBmb3IgdGhpcyB0YWJsZSBhcmUgbnVsbCwgaXQKKwkJCSAqIG1lYW5zIHRoZSB3 aG9sZSB0YWJsZSB3aWxsIGJlIGNvcGllZC4gSW4gdGhpcyBjYXNlIGl0IGlzIG5vdCBuZWNl c3NhcnkKKwkJCSAqIHRvIGNvbnN0cnVjdCBhIHVuaWZpZWQgY29sdW1uIGxpc3QgZXhwcmVz c2lvbiBhdCBhbGwuCisJCQkgKi8KKwkJCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNs b3QocHVicmVzLT50dXBsZWRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCQkJd2hpbGUg KHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KHB1YnJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFs c2UsIHNsb3QpKQorCQkJeworCQkJCURhdHVtCWNmdmFsID0gc2xvdF9nZXRhdHRyKHNsb3Qs IDEsICZpc251bGwpOworCisJCQkJLyogaWYgdGhlcmUncyBubyBjb2x1bW4gbGlzdCwgd2Ug bmVlZCB0byByZXBsaWNhdGUgYWxsIGNvbHVtbnMgKi8KKwkJCQlpZiAoaXNudWxsKQorCQkJ CXsKKwkJCQkJYm1zX2ZyZWUoaW5jbHVkZWRfY29scyk7CisJCQkJCWluY2x1ZGVkX2NvbHMg PSBOVUxMOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpbmNsdWRlZF9jb2xzID0gYm1z X2FkZF9tZW1iZXIoaW5jbHVkZWRfY29scywKKwkJCQkJCQkJCQkJICAgRGF0dW1HZXRJbnQx NihjZnZhbCkpOworCisJCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCQl9CisJCQlFeGVj RHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCisJCQl3YWxyY3ZfY2xlYXJfcmVz dWx0KHB1YnJlcyk7CisJCX0KKworCQlwZnJlZShwdWJfbmFtZXMuZGF0YSk7CisJfQorCisJ LyoKKwkgKiBOb3cgZmV0Y2ggY29sdW1uIG5hbWVzIGFuZCB0eXBlcy4KKwkgKi8KIAlyZXNl dFN0cmluZ0luZm8oJmNtZCk7CiAJYXBwZW5kU3RyaW5nSW5mbygmY21kLAotCQkJCQkgIlNF TEVDVCBhLmF0dG5hbWUsIgorCQkJCQkgIlNFTEVDVCBhLmF0dG51bSwiCisJCQkJCSAiICAg ICAgIGEuYXR0bmFtZSwiCiAJCQkJCSAiICAgICAgIGEuYXR0dHlwaWQsIgogCQkJCQkgIiAg ICAgICBhLmF0dG51bSA9IEFOWShpLmluZGtleSkiCiAJCQkJCSAiICBGUk9NIHBnX2NhdGFs b2cucGdfYXR0cmlidXRlIGEiCkBAIC03NzgsMTYgKzkwOSwzNCBAQCBmZXRjaF9yZW1vdGVf dGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAogCWxyZWwtPmF0dHR5 cHMgPSBwYWxsb2MwKE1heFR1cGxlQXR0cmlidXRlTnVtYmVyICogc2l6ZW9mKE9pZCkpOwog CWxyZWwtPmF0dGtleXMgPSBOVUxMOwogCisJLyoKKwkgKiBTdG9yZSB0aGUgY29sdW1ucyBh cyBhIGxpc3Qgb2YgbmFtZXMuICBJZ25vcmUgdGhvc2UgdGhhdCBhcmUgbm90CisJICogcHJl c2VudCBpbiB0aGUgY29sdW1uIGxpc3QsIGlmIHRoZXJlIGlzIG9uZS4KKwkgKi8KIAluYXR0 ID0gMDsKIAlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHJlcy0+dHVwbGVkZXNj LCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKIAl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNs b3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCiAJewotCQlscmVsLT5h dHRuYW1lc1tuYXR0XSA9Ci0JCQlUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihz bG90LCAxLCAmaXNudWxsKSk7CisJCWNoYXIJICAgKnJlbF9jb2xuYW1lOworCQlBdHRyTnVt YmVyCWF0dG51bTsKKworCQlhdHRudW0gPSBEYXR1bUdldEludDE2KHNsb3RfZ2V0YXR0cihz bG90LCAxLCAmaXNudWxsKSk7CiAJCUFzc2VydCghaXNudWxsKTsKLQkJbHJlbC0+YXR0dHlw c1tuYXR0XSA9IERhdHVtR2V0T2JqZWN0SWQoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251 bGwpKTsKKworCQlpZiAoaW5jbHVkZWRfY29scyAhPSBOVUxMICYmICFibXNfaXNfbWVtYmVy KGF0dG51bSwgaW5jbHVkZWRfY29scykpCisJCXsKKwkJCUV4ZWNDbGVhclR1cGxlKHNsb3Qp OworCQkJY29udGludWU7CisJCX0KKworCQlyZWxfY29sbmFtZSA9IFRleHREYXR1bUdldENT dHJpbmcoc2xvdF9nZXRhdHRyKHNsb3QsIDIsICZpc251bGwpKTsKKwkJQXNzZXJ0KCFpc251 bGwpOworCisJCWxyZWwtPmF0dG5hbWVzW25hdHRdID0gcmVsX2NvbG5hbWU7CisJCWxyZWwt PmF0dHR5cHNbbmF0dF0gPSBEYXR1bUdldE9iamVjdElkKHNsb3RfZ2V0YXR0cihzbG90LCAz LCAmaXNudWxsKSk7CiAJCUFzc2VydCghaXNudWxsKTsKLQkJaWYgKERhdHVtR2V0Qm9vbChz bG90X2dldGF0dHIoc2xvdCwgMywgJmlzbnVsbCkpKQorCisJCWlmIChEYXR1bUdldEJvb2wo c2xvdF9nZXRhdHRyKHNsb3QsIDQsICZpc251bGwpKSkKIAkJCWxyZWwtPmF0dGtleXMgPSBi bXNfYWRkX21lbWJlcihscmVsLT5hdHRrZXlzLCBuYXR0KTsKIAogCQkvKiBTaG91bGQgbmV2 ZXIgaGFwcGVuLiAqLwpAQCAtODIxLDYgKzk3MCw5IEBAIGZldGNoX3JlbW90ZV90YWJsZV9p bmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCiAJICoKIAkgKiAzKSBvbmUgb2Yg dGhlIHN1YnNjcmliZWQgcHVibGljYXRpb25zIGlzIGRlY2xhcmVkIGFzIEFMTCBUQUJMRVMg SU4KIAkgKiBTQ0hFTUEgdGhhdCBpbmNsdWRlcyB0aGlzIHJlbGF0aW9uCisJICoKKwkgKiBY WFggRG9lcyB0aGlzIGFjdHVhbGx5IGhhbmRsZSBwdWJhbGx0YWJsZXMgYW5kIHNjaGVtYSBw dWJsaWNhdGlvbnMKKwkgKiBjb3JyZWN0bHk/CiAJICovCiAJaWYgKHdhbHJjdl9zZXJ2ZXJf dmVyc2lvbihMb2dSZXBXb3JrZXJXYWxSY3ZDb25uKSA+PSAxNTAwMDApCiAJewpAQCAtOTMw LDggKzEwODIsMjQgQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwpCiAKIAkvKiBSZWd1bGFy IHRhYmxlIHdpdGggbm8gcm93IGZpbHRlciAqLwogCWlmIChscmVsLnJlbGtpbmQgPT0gUkVM S0lORF9SRUxBVElPTiAmJiBxdWFsID09IE5JTCkKLQkJYXBwZW5kU3RyaW5nSW5mbygmY21k LCAiQ09QWSAlcyBUTyBTVERPVVQiLAorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAi Q09QWSAlcyAoIiwKIAkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihscmVsLm5z cG5hbWUsIGxyZWwucmVsbmFtZSkpOworCisJCS8qCisJCSAqIFhYWCBEbyB3ZSBuZWVkIHRv IGxpc3QgdGhlIGNvbHVtbnMgaW4gYWxsIGNhc2VzPyBNYXliZSB3ZSdyZSByZXBsaWNhdGlu ZworCQkgKiBhbGwgY29sdW1ucz8KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbHJl bC5uYXR0czsgaSsrKQorCQl7CisJCQlpZiAoaSA+IDApCisJCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmY21kLCAiLCAiKTsKKworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY21k LCBxdW90ZV9pZGVudGlmaWVyKGxyZWwuYXR0bmFtZXNbaV0pKTsKKwkJfQorCisJCWFwcGVu ZFN0cmluZ0luZm8oJmNtZCwgIikgVE8gU1RET1VUIik7CisJfQogCWVsc2UKIAl7CiAJCS8q CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1 dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRl eCBkYmFjMjY5MGI3Zi4uZmNkZDc3ODVhNzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg InV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRl ICJ1dGlscy9zeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIApAQCAt ODUsNyArODYsOCBAQCBzdGF0aWMgTGlzdCAqTG9hZFB1YmxpY2F0aW9ucyhMaXN0ICpwdWJu YW1lcyk7CiBzdGF0aWMgdm9pZCBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2IoRGF0dW0g YXJnLCBpbnQgY2FjaGVpZCwKIAkJCQkJCQkJCQl1aW50MzIgaGFzaHZhbHVlKTsKIHN0YXRp YyB2b2lkIHNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKFJlbGF0aW9uIHJlbGF0aW9uLCBUcmFu c2FjdGlvbklkIHhpZCwKLQkJCQkJCQkJCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCk7 CisJCQkJCQkJCQlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQlCaXRt YXBzZXQgKmNvbHVtbnMpOwogc3RhdGljIHZvaWQgc2VuZF9yZXBsX29yaWdpbihMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwg WExvZ1JlY1B0ciBvcmlnaW5fbHNuLAogCQkJCQkJCSBib29sIHNlbmRfb3JpZ2luKTsKQEAg LTkzLDYgKzk1LDggQEAgc3RhdGljIHZvaWQgc2VuZF9yZXBsX29yaWdpbihMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCiAvKgogICogT25seSAzIHB1YmxpY2F0aW9uIGFjdGlvbnMg YXJlIHVzZWQgZm9yIHJvdyBmaWx0ZXJpbmcgKCJpbnNlcnQiLCAidXBkYXRlIiwKICAqICJk ZWxldGUiKS4gU2VlIFJlbGF0aW9uU3luY0VudHJ5LmV4cHJzdGF0ZVtdLgorICoKKyAqIEZJ WE1FIERvIHdlIG5lZWQgc29tZXRoaW5nIHNpbWlsYXIgZm9yIGNvbHVtbiBmaWx0ZXJzPwog ICovCiBlbnVtIFJvd0ZpbHRlclB1YkFjdGlvbgogewpAQCAtMTY0LDYgKzE2OCwxMyBAQCB0 eXBlZGVmIHN0cnVjdCBSZWxhdGlvblN5bmNFbnRyeQogCSAqIGhhdmluZyBpZGVudGljYWwg VHVwbGVEZXNjLgogCSAqLwogCUF0dHJNYXAgICAgKmF0dHJtYXA7CisKKwkvKgorCSAqIENv bHVtbnMgaW5jbHVkZWQgaW4gdGhlIHB1YmxpY2F0aW9uLCBvciBOVUxMIGlmIGFsbCBjb2x1 bW5zIGFyZQorCSAqIGluY2x1ZGVkIGltcGxpY2l0bHkuICBOb3RlIHRoYXQgdGhlIGF0dG51 bXMgaW4gdGhpcyBiaXRtYXAgYXJlIG5vdAorCSAqIHNoaWZ0ZWQgYnkgRmlyc3RMb3dJbnZh bGlkSGVhcEF0dHJpYnV0ZU51bWJlci4KKwkgKi8KKwlCaXRtYXBzZXQgICpjb2x1bW5zOwog fSBSZWxhdGlvblN5bmNFbnRyeTsKIAogLyogTWFwIHVzZWQgdG8gcmVtZW1iZXIgd2hpY2gg cmVsYXRpb24gc2NoZW1hcyB3ZSBzZW50LiAqLwpAQCAtMTg4LDYgKzE5OSw3IEBAIHN0YXRp YyBFU3RhdGUgKmNyZWF0ZV9lc3RhdGVfZm9yX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7CiBz dGF0aWMgdm9pZCBwZ291dHB1dF9yb3dfZmlsdGVyX2luaXQoUEdPdXRwdXREYXRhICpkYXRh LAogCQkJCQkJCQkJIExpc3QgKnB1YmxpY2F0aW9ucywKIAkJCQkJCQkJCSBSZWxhdGlvblN5 bmNFbnRyeSAqZW50cnkpOworCiBzdGF0aWMgYm9vbCBwZ291dHB1dF9yb3dfZmlsdGVyX2V4 ZWNfZXhwcihFeHByU3RhdGUgKnN0YXRlLAogCQkJCQkJCQkJCSAgRXhwckNvbnRleHQgKmVj b250ZXh0KTsKIHN0YXRpYyBib29sIHBnb3V0cHV0X3Jvd19maWx0ZXIoUmVsYXRpb24gcmVs YXRpb24sIFR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCwKQEAgLTE5NSw2ICsyMDcsMTEgQEAg c3RhdGljIGJvb2wgcGdvdXRwdXRfcm93X2ZpbHRlcihSZWxhdGlvbiByZWxhdGlvbiwgVHVw bGVUYWJsZVNsb3QgKm9sZF9zbG90LAogCQkJCQkJCQlSZWxhdGlvblN5bmNFbnRyeSAqZW50 cnksCiAJCQkJCQkJCVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlICphY3Rpb24pOwogCisvKiBj b2x1bW4gZmlsdGVyIHJvdXRpbmVzICovCitzdGF0aWMgdm9pZCBwZ291dHB1dF9jb2x1bW5f ZmlsdGVyX2luaXQoUEdPdXRwdXREYXRhICpkYXRhLAorCQkJCQkJCQkJCUxpc3QgKnB1Ymxp Y2F0aW9ucywKKwkJCQkJCQkJCQlSZWxhdGlvblN5bmNFbnRyeSAqZW50cnkpOworCiAvKgog ICogU3BlY2lmeSBvdXRwdXQgcGx1Z2luIGNhbGxiYWNrcwogICovCkBAIC02MDMsMTEgKzYy MCwxMSBAQCBtYXliZV9zZW5kX3NjaGVtYShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs CiAJewogCQlSZWxhdGlvbglhbmNlc3RvciA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxl bnRyeS0+cHVibGlzaF9hc19yZWxpZCk7CiAKLQkJc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMo YW5jZXN0b3IsIHhpZCwgY3R4KTsKKwkJc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMoYW5jZXN0 b3IsIHhpZCwgY3R4LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCVJlbGF0aW9uQ2xvc2UoYW5j ZXN0b3IpOwogCX0KIAotCXNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKHJlbGF0aW9uLCB4aWQs IGN0eCk7CisJc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMocmVsYXRpb24sIHhpZCwgY3R4LCBy ZWxlbnRyeS0+Y29sdW1ucyk7CiAKIAlpZiAoaW5fc3RyZWFtaW5nKQogCQlzZXRfc2NoZW1h X3NlbnRfaW5fc3RyZWFtZWRfdHhuKHJlbGVudHJ5LCB0b3B4aWQpOwpAQCAtNjIwLDcgKzYz Nyw4IEBAIG1heWJlX3NlbmRfc2NoZW1hKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK ICAqLwogc3RhdGljIHZvaWQKIHNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKFJlbGF0aW9uIHJl bGF0aW9uLCBUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCUxvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCkKKwkJCQkJCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCUJp dG1hcHNldCAqY29sdW1ucykKIHsKIAlUdXBsZURlc2MJZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IocmVsYXRpb24pOwogCWludAkJCWk7CkBAIC02NDMsMTMgKzY2MSwxNyBAQCBzZW5kX3Jl bGF0aW9uX2FuZF9hdHRycyhSZWxhdGlvbiByZWxhdGlvbiwgVHJhbnNhY3Rpb25JZCB4aWQs CiAJCWlmIChhdHQtPmF0dHR5cGlkIDwgRmlyc3RHZW5ia2lPYmplY3RJZCkKIAkJCWNvbnRp bnVlOwogCisJCS8qIFNraXAgdGhpcyBhdHRyaWJ1dGUgaWYgaXQncyBub3QgcHJlc2VudCBp biB0aGUgY29sdW1uIGxpc3QgKi8KKwkJaWYgKGNvbHVtbnMgIT0gTlVMTCAmJiAhYm1zX2lz X21lbWJlcihhdHQtPmF0dG51bSwgY29sdW1ucykpCisJCQljb250aW51ZTsKKwogCQlPdXRw dXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCBmYWxzZSk7CiAJCWxvZ2ljYWxyZXBfd3JpdGVf dHlwKGN0eC0+b3V0LCB4aWQsIGF0dC0+YXR0dHlwaWQpOwogCQlPdXRwdXRQbHVnaW5Xcml0 ZShjdHgsIGZhbHNlKTsKIAl9CiAKIAlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCBm YWxzZSk7Ci0JbG9naWNhbHJlcF93cml0ZV9yZWwoY3R4LT5vdXQsIHhpZCwgcmVsYXRpb24p OworCWxvZ2ljYWxyZXBfd3JpdGVfcmVsKGN0eC0+b3V0LCB4aWQsIHJlbGF0aW9uLCBjb2x1 bW5zKTsKIAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIGZhbHNlKTsKIH0KIApAQCAtODYwLDYg Kzg4MiwxMDggQEAgcGdvdXRwdXRfcm93X2ZpbHRlcl9pbml0KFBHT3V0cHV0RGF0YSAqZGF0 YSwgTGlzdCAqcHVibGljYXRpb25zLAogCX0KIH0KIAorLyoKKyAqIEluaXRpYWxpemUgdGhl IGNvbHVtbiBmaWx0ZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwZ291dHB1dF9jb2x1bW5fZmls dGVyX2luaXQoUEdPdXRwdXREYXRhICpkYXRhLCBMaXN0ICpwdWJsaWNhdGlvbnMsCisJCQkJ CQkJUmVsYXRpb25TeW5jRW50cnkgKmVudHJ5KQoreworCUxpc3RDZWxsICAgKmxjOworCU1l bW9yeUNvbnRleHQgb2xkY3R4OworCisJLyoKKwkgKiBGaW5kIGlmIHRoZXJlIGFyZSBhbnkg cm93IGZpbHRlcnMgZm9yIHRoaXMgcmVsYXRpb24uIElmIHRoZXJlIGFyZSwgdGhlbgorCSAq IHByZXBhcmUgdGhlIG5lY2Vzc2FyeSBFeHByU3RhdGUgYW5kIGNhY2hlIGl0IGluIGVudHJ5 LT5leHByc3RhdGUuIFRvCisJICogYnVpbGQgYW4gZXhwcmVzc2lvbiBzdGF0ZSwgd2UgbmVl ZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZzoKKwkgKgorCSAqIEFsbCB0aGUgZ2l2ZW4gcHVi bGljYXRpb24tdGFibGUgbWFwcGluZ3MgbXVzdCBiZSBjaGVja2VkLgorCSAqCisJICogTXVs dGlwbGUgcHVibGljYXRpb25zIG1pZ2h0IGhhdmUgbXVsdGlwbGUgcm93IGZpbHRlcnMgZm9y IHRoaXMKKwkgKiByZWxhdGlvbi4gU2luY2Ugcm93IGZpbHRlciB1c2FnZSBkZXBlbmRzIG9u IHRoZSBETUwgb3BlcmF0aW9uLCB0aGVyZQorCSAqIGFyZSBtdWx0aXBsZSBsaXN0cyAob25l IGZvciBlYWNoIG9wZXJhdGlvbikgdG8gd2hpY2ggcm93IGZpbHRlcnMgd2lsbAorCSAqIGJl IGFwcGVuZGVkLgorCSAqCisJICogRk9SIEFMTCBUQUJMRVMgaW1wbGllcyAiZG9uJ3QgdXNl IHJvdyBmaWx0ZXIgZXhwcmVzc2lvbiIgc28gaXQgdGFrZXMKKwkgKiBwcmVjZWRlbmNlLgor CSAqLworCWZvcmVhY2gobGMsIHB1YmxpY2F0aW9ucykKKwl7CisJCVB1YmxpY2F0aW9uICpw dWIgPSBsZmlyc3QobGMpOworCQlIZWFwVHVwbGUJY2Z0dXBsZSA9IE5VTEw7CisJCURhdHVt CQljZmRhdHVtID0gMDsKKwkJYm9vbAkJcHViX25vX2ZpbHRlciA9IGZhbHNlOworCisJCWlm IChwdWItPmFsbHRhYmxlcykKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZSBwdWJsaWNhdGlv biBpcyBGT1IgQUxMIFRBQkxFUyB0aGVuIGl0IGlzIHRyZWF0ZWQgdGhlCisJCQkgKiBzYW1l IGFzIGlmIHRoaXMgdGFibGUgaGFzIG5vIHJvdyBmaWx0ZXJzIChldmVuIGlmIGZvciBvdGhl cgorCQkJICogcHVibGljYXRpb25zIGl0IGRvZXMpLgorCQkJICovCisJCQlwdWJfbm9fZmls dGVyID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBDaGVjayBmb3Ig dGhlIHByZXNlbmNlIG9mIGEgcm93IGZpbHRlciBpbiB0aGlzIHB1YmxpY2F0aW9uLgorCQkJ ICovCisJCQljZnR1cGxlID0gU2VhcmNoU3lzQ2FjaGUyKFBVQkxJQ0FUSU9OUkVMTUFQLAor CQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkKSwK KwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShwdWItPm9pZCkpOworCisJCQlpZiAoSGVh cFR1cGxlSXNWYWxpZChjZnR1cGxlKSkKKwkJCXsKKwkJCQkvKiBOdWxsIGluZGljYXRlcyBu byBmaWx0ZXIuICovCisJCQkJY2ZkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElP TlJFTE1BUCwgY2Z0dXBsZSwKKwkJCQkJCQkJCQkgIEFudW1fcGdfcHVibGljYXRpb25fcmVs X3ByYXR0cnMsCisJCQkJCQkJCQkJICAmcHViX25vX2ZpbHRlcik7CisKKwkJCQkvKgorCQkJ CSAqIFdoZW4gbm8gY29sdW1uIGxpc3QgaXMgZGVmaW5lZCwgc28gcHVibGlzaCBhbGwgY29s dW1ucy4KKwkJCQkgKiBPdGhlcndpc2UgbWVyZ2UgdGhlIGNvbHVtbnMgdG8gdGhlIGNvbHVt biBsaXN0LgorCQkJCSAqLworCQkJCWlmICghcHViX25vX2ZpbHRlcikJLyogd2hlbiBub3Qg bnVsbCAqLworCQkJCXsKKwkJCQkJQXJyYXlUeXBlICAqYXJyOworCQkJCQlpbnQJCQluZWxl bXM7CisJCQkJCWludDE2CSAgICplbGVtczsKKworCQkJCQlhcnIgPSBEYXR1bUdldEFycmF5 VHlwZVAoY2ZkYXR1bSk7CisJCQkJCW5lbGVtcyA9IEFSUl9ESU1TKGFycilbMF07CisJCQkJ CWVsZW1zID0gKGludDE2ICopIEFSUl9EQVRBX1BUUihhcnIpOworCisJCQkJCS8qIFhYWCBp cyB0aGVyZSBhIGRhbmdlciBvZiBtZW1vcnkgbGVhayBoZXJlPyBiZXdhcmUgKi8KKwkJCQkJ b2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKENhY2hlTWVtb3J5Q29udGV4dCk7CisJ CQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCQkJCQllbnRyeS0+Y29s dW1ucyA9IGJtc19hZGRfbWVtYmVyKGVudHJ5LT5jb2x1bW5zLAorCQkJCQkJCQkJCQkJCQll bGVtc1tpXSk7CisJCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQkJCX0K KwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwdWJfbm9fZmlsdGVyID0gdHJ1ZTsKKwkJCX0K KwkJfQorCisJCS8qIGZvdW5kIHB1YmxpY2F0aW9uIHdpdGggbm8gZmlsdGVyLCBzbyB3ZSdy ZSBkb25lICovCisJCWlmIChwdWJfbm9fZmlsdGVyKQorCQl7CisJCQlpZiAoY2Z0dXBsZSkK KwkJCQlSZWxlYXNlU3lzQ2FjaGUoY2Z0dXBsZSk7CisKKwkJCWJtc19mcmVlKGVudHJ5LT5j b2x1bW5zKTsKKwkJCWVudHJ5LT5jb2x1bW5zID0gTlVMTDsKKworCQkJYnJlYWs7CisJCX0K KworCQlSZWxlYXNlU3lzQ2FjaGUoY2Z0dXBsZSk7CisJfQkJCQkJCQkvKiBsb29wIGFsbCBz dWJzY3JpYmVkIHB1YmxpY2F0aW9ucyAqLworCit9CisKIC8qCiAgKiBJbml0aWFsaXplIHRo ZSBzbG90IGZvciBzdG9yaW5nIG5ldyBhbmQgb2xkIHR1cGxlcywgYW5kIGJ1aWxkIHRoZSBt YXAgdGhhdAogICogd2lsbCBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIHJlbGF0aW9uJ3MgdHVw bGVzIGludG8gdGhlIGFuY2VzdG9yJ3MgZm9ybWF0LgpAQCAtMTIyNCw3ICsxMzQ4LDcgQEAg cGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAogCiAJCQlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVl KTsKIAkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJl bCwgbmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRhLT5iaW5hcnkpOworCQkJCQkJCQkJZGF0YS0+ YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVnaW5Xcml0ZShjdHgs IHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFU RToKQEAgLTEyNzgsMTEgKzE0MDIsMTMgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJewogCQkJCWNh c2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVDoKIAkJCQkJbG9naWNhbHJlcF93cml0 ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAotCQkJCQkJCQkJCQluZXdfc2xv dCwgZGF0YS0+YmluYXJ5KTsKKwkJCQkJCQkJCQkJbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSwK KwkJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOwogCQkJCQlicmVhazsKIAkJCQljYXNl IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CiAJCQkJCWxvZ2ljYWxyZXBfd3JpdGVf dXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKLQkJCQkJCQkJCQkJb2xkX3Nsb3Qs IG5ld19zbG90LCBkYXRhLT5iaW5hcnkpOworCQkJCQkJCQkJCQlvbGRfc2xvdCwgbmV3X3Ns b3QsIGRhdGEtPmJpbmFyeSwKKwkJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOwogCQkJ CQlicmVhazsKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEU6CiAJCQkJ CWxvZ2ljYWxyZXBfd3JpdGVfZGVsZXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKQEAg LTE3MzEsNiArMTg1Nyw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRh dGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0ZSwgMCwg c2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKIAkJZW50cnktPmNhY2hlX2V4cHJfY3h0ID0g TlVMTDsKIAkJZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgPSBJbnZhbGlkT2lkOworCQllbnRy eS0+Y29sdW1ucyA9IE5VTEw7CiAJCWVudHJ5LT5hdHRybWFwID0gTlVMTDsKIAl9CiAKQEAg LTE3NzUsNiArMTkwMiw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRh dGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2NoZW1hX3NlbnQgPSBmYWxzZTsK IAkJbGlzdF9mcmVlKGVudHJ5LT5zdHJlYW1lZF90eG5zKTsKIAkJZW50cnktPnN0cmVhbWVk X3R4bnMgPSBOSUw7CisJCWJtc19mcmVlKGVudHJ5LT5jb2x1bW5zKTsKKwkJZW50cnktPmNv bHVtbnMgPSBOVUxMOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgPSBmYWxzZTsK IAkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwpAQCAtMTgwNyw4ICsxOTM2LDkgQEAgZ2V0X3Jl bF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAK IAkJLyoKIAkJICogQnVpbGQgcHVibGljYXRpb24gY2FjaGUuIFdlIGNhbid0IHVzZSBvbmUg cHJvdmlkZWQgYnkgcmVsY2FjaGUgYXMKLQkJICogcmVsY2FjaGUgY29uc2lkZXJzIGFsbCBw dWJsaWNhdGlvbnMgZ2l2ZW4gcmVsYXRpb24gaXMgaW4sIGJ1dCBoZXJlCi0JCSAqIHdlIG9u bHkgbmVlZCB0byBjb25zaWRlciBvbmVzIHRoYXQgdGhlIHN1YnNjcmliZXIgcmVxdWVzdGVk LgorCQkgKiByZWxjYWNoZSBjb25zaWRlcnMgYWxsIHB1YmxpY2F0aW9ucyB0aGF0IHRoZSBn aXZlbiByZWxhdGlvbiBpcyBpbiwKKwkJICogYnV0IGhlcmUgd2Ugb25seSBuZWVkIHRvIGNv bnNpZGVyIG9uZXMgdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkgKiByZXF1ZXN0ZWQuCiAJCSAq LwogCQlmb3JlYWNoKGxjLCBkYXRhLT5wdWJsaWNhdGlvbnMpCiAJCXsKQEAgLTE4NjEsNiAr MTk5MSw5IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0 aW9uIHJlbGF0aW9uKQogCQkJfQogCiAJCQkvKgorCQkJICogSWYgdGhlIHJlbGF0aW9uIGlz IHRvIGJlIHB1Ymxpc2hlZCwgZGV0ZXJtaW5lIGFjdGlvbnMgdG8KKwkJCSAqIHB1Ymxpc2gs IGFuZCBsaXN0IG9mIGNvbHVtbnMsIGlmIGFwcHJvcHJpYXRlLgorCQkJICoKIAkJCSAqIERv bid0IHB1Ymxpc2ggY2hhbmdlcyBmb3IgcGFydGl0aW9uZWQgdGFibGVzLCBiZWNhdXNlCiAJ CQkgKiBwdWJsaXNoaW5nIHRob3NlIG9mIGl0cyBwYXJ0aXRpb25zIHN1ZmZpY2VzLCB1bmxl c3MgcGFydGl0aW9uCiAJCQkgKiBjaGFuZ2VzIHdvbid0IGJlIHB1Ymxpc2hlZCBkdWUgdG8g cHVidmlhcm9vdCBiZWluZyBzZXQuCkBAIC0xOTEzLDYgKzIwNDYsOSBAQCBnZXRfcmVsX3N5 bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAogCQkJ LyogSW5pdGlhbGl6ZSB0aGUgcm93IGZpbHRlciAqLwogCQkJcGdvdXRwdXRfcm93X2ZpbHRl cl9pbml0KGRhdGEsIHJlbF9wdWJsaWNhdGlvbnMsIGVudHJ5KTsKKworCQkJLyogSW5pdGlh bGl6ZSB0aGUgY29sdW1uIGZpbHRlciAqLworCQkJcGdvdXRwdXRfY29sdW1uX2ZpbHRlcl9p bml0KGRhdGEsIHJlbF9wdWJsaWNhdGlvbnMsIGVudHJ5KTsKIAkJfQogCiAJCWxpc3RfZnJl ZShwdWJpZHMpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggZmNjZmZj ZTU3MjkuLmEyZGE3MmYwZDQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMK QEAgLTU1NTMsNiArNTU1Myw4IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVs YXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAkJbWVtc2V0KHB1 YmRlc2MsIDAsIHNpemVvZihQdWJsaWNhdGlvbkRlc2MpKTsKIAkJcHViZGVzYy0+cmZfdmFs aWRfZm9yX3VwZGF0ZSA9IHRydWU7CiAJCXB1YmRlc2MtPnJmX3ZhbGlkX2Zvcl9kZWxldGUg PSB0cnVlOworCQlwdWJkZXNjLT5jb2xzX3ZhbGlkX2Zvcl91cGRhdGUgPSB0cnVlOworCQlw dWJkZXNjLT5jb2xzX3ZhbGlkX2Zvcl9kZWxldGUgPSB0cnVlOwogCQlyZXR1cm47CiAJfQog CkBAIC01NTY1LDYgKzU1NjcsOCBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNjKFJl bGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJbWVtc2V0KHB1 YmRlc2MsIDAsIHNpemVvZihQdWJsaWNhdGlvbkRlc2MpKTsKIAlwdWJkZXNjLT5yZl92YWxp ZF9mb3JfdXBkYXRlID0gdHJ1ZTsKIAlwdWJkZXNjLT5yZl92YWxpZF9mb3JfZGVsZXRlID0g dHJ1ZTsKKwlwdWJkZXNjLT5jb2xzX3ZhbGlkX2Zvcl91cGRhdGUgPSB0cnVlOworCXB1YmRl c2MtPmNvbHNfdmFsaWRfZm9yX2RlbGV0ZSA9IHRydWU7CiAKIAkvKiBGZXRjaCB0aGUgcHVi bGljYXRpb24gbWVtYmVyc2hpcCBpbmZvLiAqLwogCXB1Ym9pZHMgPSBHZXRSZWxhdGlvblB1 YmxpY2F0aW9ucyhyZWxpZCk7CkBAIC01NjE2LDcgKzU2MjAsNyBAQCBSZWxhdGlvbkJ1aWxk UHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1 YmRlc2MpCiAJCSAqLwogCQlpZiAoIXB1YmZvcm0tPnB1YmFsbHRhYmxlcyAmJgogCQkJKHB1 YmZvcm0tPnB1YnVwZGF0ZSB8fCBwdWJmb3JtLT5wdWJkZWxldGUpICYmCi0JCQljb250YWlu X2ludmFsaWRfcmZjb2x1bW4ocHViaWQsIHJlbGF0aW9uLCBhbmNlc3RvcnMsCisJCQlwdWJf cmZfY29udGFpbnNfaW52YWxpZF9jb2x1bW4ocHViaWQsIHJlbGF0aW9uLCBhbmNlc3RvcnMs CiAJCQkJCQkJCQkgcHViZm9ybS0+cHVidmlhcm9vdCkpCiAJCXsKIAkJCWlmIChwdWJmb3Jt LT5wdWJ1cGRhdGUpCkBAIC01NjI1LDYgKzU2MjksMjMgQEAgUmVsYXRpb25CdWlsZFB1Ymxp Y2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNj KQogCQkJCXB1YmRlc2MtPnJmX3ZhbGlkX2Zvcl9kZWxldGUgPSBmYWxzZTsKIAkJfQogCisJ CS8qCisJCSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIGFyZSBwYXJ0IG9mIHRoZSBSRVBMSUNB IElERU5USVRZIGluZGV4IG9yIG5vdC4KKwkJICoKKwkJICogSWYgdGhlIHB1YmxpY2F0aW9u IGlzIEZPUiBBTEwgVEFCTEVTIHRoZW4gaXQgbWVhbnMgdGhlIHRhYmxlIGhhcyBubworCQkg KiBjb2x1bW4gbGlzdCBhbmQgd2UgY2FuIHNraXAgdGhlIHZhbGlkYXRpb24uCisJCSAqLwor CQlpZiAoIXB1YmZvcm0tPnB1YmFsbHRhYmxlcyAmJgorCQkJKHB1YmZvcm0tPnB1YnVwZGF0 ZSB8fCBwdWJmb3JtLT5wdWJkZWxldGUpICYmCisJCQlwdWJfY29sbGlzdF9jb250YWluc19p bnZhbGlkX2NvbHVtbihwdWJpZCwgcmVsYXRpb24sIGFuY2VzdG9ycywKKwkJCQkJCQkJCSBw dWJmb3JtLT5wdWJ2aWFyb290KSkKKwkJeworCQkJaWYgKHB1YmZvcm0tPnB1YnVwZGF0ZSkK KwkJCQlwdWJkZXNjLT5jb2xzX3ZhbGlkX2Zvcl91cGRhdGUgPSBmYWxzZTsKKwkJCWlmIChw dWJmb3JtLT5wdWJkZWxldGUpCisJCQkJcHViZGVzYy0+Y29sc192YWxpZF9mb3JfZGVsZXRl ID0gZmFsc2U7CisJCX0KKwogCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKIAogCQkvKgpAQCAt NTYzNiw2ICs1NjU3LDE2IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRp b24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAkJCXB1YmRlc2MtPnB1 YmFjdGlvbnMucHViZGVsZXRlICYmIHB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUg JiYKIAkJCSFwdWJkZXNjLT5yZl92YWxpZF9mb3JfdXBkYXRlICYmICFwdWJkZXNjLT5yZl92 YWxpZF9mb3JfZGVsZXRlKQogCQkJYnJlYWs7CisKKwkJLyoKKwkJICogSWYgd2Uga25vdyBl dmVyeXRoaW5nIGlzIHJlcGxpY2F0ZWQgYW5kIHRoZSBjb2x1bW4gbGlzdCBpcyBpbnZhbGlk CisJCSAqIGZvciB1cGRhdGUgYW5kIGRlbGV0ZSwgdGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hl Y2sgZm9yIG90aGVyCisJCSAqIHB1YmxpY2F0aW9ucy4KKwkJICovCisJCWlmIChwdWJkZXNj LT5wdWJhY3Rpb25zLnB1Ymluc2VydCAmJiBwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0 ZSAmJgorCQkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxldGUgJiYgcHViZGVzYy0+cHVi YWN0aW9ucy5wdWJ0cnVuY2F0ZSAmJgorCQkJIXB1YmRlc2MtPmNvbHNfdmFsaWRfZm9yX3Vw ZGF0ZSAmJiAhcHViZGVzYy0+Y29sc192YWxpZF9mb3JfZGVsZXRlKQorCQkJYnJlYWs7CiAJ fQogCiAJaWYgKHJlbGF0aW9uLT5yZF9wdWJkZXNjKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggZTY5 ZGNmOGE0ODQuLmYyMDhjN2E2YzU5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQwNzUsNiArNDA3 NSw3IEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0 YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJaW50CQkJaV9wcnB1YmlkOwogCWludAkJCWlf cHJyZWxpZDsKIAlpbnQJCQlpX3BycmVscXVhbDsKKwlpbnQJCQlpX3ByYXR0cnM7CiAJaW50 CQkJaSwKIAkJCQlqLAogCQkJCW50dXBzOwpAQCAtNDA4OCwxMiArNDA4OSwyMCBAQCBnZXRQ dWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBp bnQgbnVtVGFibGVzKQogCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgdGFibGVvaWQs IG9pZCwgcHJwdWJpZCwgcHJyZWxpZCwgIgotCQkJCQkJCSAicGdfY2F0YWxvZy5wZ19nZXRf ZXhwcihwcnF1YWwsIHBycmVsaWQpIEFTIHBycmVscXVhbCAiCi0JCQkJCQkJICJGUk9NIHBn X2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIik7CisJCQkJCQkJICJwZ19jYXRhbG9nLnBn X2dldF9leHByKHBycXVhbCwgcHJyZWxpZCkgQVMgcHJyZWxxdWFsLCAiCisJCQkJCQkJICIo Q0FTRVxuIgorCQkJCQkJCSAiICBXSEVOIHByLnByYXR0cnMgSVMgTk9UIE5VTEwgVEhFTlxu IgorCQkJCQkJCSAiICAgIChTRUxFQ1QgYXJyYXlfYWdnKGF0dG5hbWUpXG4iCisJCQkJCQkJ ICIgICAgICAgRlJPTVxuIgorCQkJCQkJCSAiICAgICAgICAgcGdfY2F0YWxvZy5nZW5lcmF0 ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91cHBlcihwci5wcmF0dHJzOjpwZ19jYXRh bG9nLmludDJbXSwgMSkpIHMsXG4iCisJCQkJCQkJICIgICAgICAgICBwZ19jYXRhbG9nLnBn X2F0dHJpYnV0ZVxuIgorCQkJCQkJCSAiICAgICAgV0hFUkUgYXR0cmVsaWQgPSBwci5wcnJl bGlkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKVxuIgorCQkJCQkJCSAiICBFTFNFIE5VTEwg RU5EKSBwcmF0dHJzICIKKwkJCQkJCQkgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlv bl9yZWwgcHIiKTsKIAllbHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJ CQkJCSAiU0VMRUNUIHRhYmxlb2lkLCBvaWQsIHBycHViaWQsIHBycmVsaWQsICIKLQkJCQkJ CQkgIk5VTEwgQVMgcHJyZWxxdWFsICIKKwkJCQkJCQkgIk5VTEwgQVMgcHJyZWxxdWFsLCBO VUxMIEFTIHByYXR0cnMgIgogCQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0 aW9uX3JlbCIpOwogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwg UEdSRVNfVFVQTEVTX09LKTsKIApAQCAtNDEwNCw2ICs0MTEzLDcgQEAgZ2V0UHVibGljYXRp b25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRh YmxlcykKIAlpX3BycHViaWQgPSBQUWZudW1iZXIocmVzLCAicHJwdWJpZCIpOwogCWlfcHJy ZWxpZCA9IFBRZm51bWJlcihyZXMsICJwcnJlbGlkIik7CiAJaV9wcnJlbHF1YWwgPSBQUWZu dW1iZXIocmVzLCAicHJyZWxxdWFsIik7CisJaV9wcmF0dHJzID0gUFFmbnVtYmVyKHJlcywg InByYXR0cnMiKTsKIAogCS8qIHRoaXMgYWxsb2NhdGlvbiBtYXkgYmUgbW9yZSB0aGFuIHdl IG5lZWQgKi8KIAlwdWJyaW5mbyA9IHBnX21hbGxvYyhudHVwcyAqIHNpemVvZihQdWJsaWNh dGlvblJlbEluZm8pKTsKQEAgLTQxNDksNiArNDE1OSwyOCBAQCBnZXRQdWJsaWNhdGlvblRh YmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVz KQogCQllbHNlCiAJCQlwdWJyaW5mb1tqXS5wdWJyZWxxdWFsID0gcGdfc3RyZHVwKFBRZ2V0 dmFsdWUocmVzLCBpLCBpX3BycmVscXVhbCkpOwogCisJCWlmICghUFFnZXRpc251bGwocmVz LCBpLCBpX3ByYXR0cnMpKQorCQl7CisJCQljaGFyCSAgKiphdHRuYW1lczsKKwkJCWludAkJ CW5hdHRuYW1lczsKKwkJCVBRRXhwQnVmZmVyIGF0dHJpYnM7CisKKwkJCWlmICghcGFyc2VQ R0FycmF5KFBRZ2V0dmFsdWUocmVzLCBpLCBpX3ByYXR0cnMpLAorCQkJCQkJCSAgJmF0dG5h bWVzLCAmbmF0dG5hbWVzKSkKKwkJCQlmYXRhbCgiY291bGQgbm90IHBhcnNlICVzIGFycmF5 IiwgInByYXR0cnMiKTsKKwkJCWF0dHJpYnMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCQkJ Zm9yIChpbnQgayA9IDA7IGsgPCBuYXR0bmFtZXM7IGsrKykKKwkJCXsKKwkJCQlpZiAoayA+ IDApCisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGF0dHJpYnMsICIsICIpOworCisJCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoYXR0cmlicywgZm10SWQoYXR0bmFtZXNba10pKTsKKwkJ CX0KKwkJCXB1YnJpbmZvW2pdLnB1YnJhdHRycyA9IGF0dHJpYnMtPmRhdGE7CisJCX0KKwkJ ZWxzZQorCQkJcHVicmluZm9bal0ucHVicmF0dHJzID0gTlVMTDsKKwogCQkvKiBEZWNpZGUg d2hldGhlciB3ZSB3YW50IHRvIGR1bXAgaXQgKi8KIAkJc2VsZWN0RHVtcGFibGVQdWJsaWNh dGlvbk9iamVjdCgmKHB1YnJpbmZvW2pdLmRvYmopLCBmb3V0KTsKIApAQCAtNDIyMywxMCAr NDI1NSwxMyBAQCBkdW1wUHVibGljYXRpb25UYWJsZShBcmNoaXZlICpmb3V0LCBjb25zdCBQ dWJsaWNhdGlvblJlbEluZm8gKnB1YnJpbmZvKQogCiAJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOwogCi0JYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksICJBTFRFUiBQVUJMSUNBVElP TiAlcyBBREQgVEFCTEUgT05MWSIsCisJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksICJBTFRF UiBQVUJMSUNBVElPTiAlcyBBREQgVEFCTEUgT05MWSAiLAogCQkJCQkgIGZtdElkKHB1Ymlu Zm8tPmRvYmoubmFtZSkpOwotCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiICVzIiwKLQkJ CQkJICBmbXRRdWFsaWZpZWREdW1wYWJsZSh0YmluZm8pKTsKKwlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwgZm10UXVhbGlmaWVkRHVtcGFibGUodGJpbmZvKSk7CisKKwlpZiAocHVi cmluZm8tPnB1YnJhdHRycykKKwkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksICIgKCVzKSIs IHB1YnJpbmZvLT5wdWJyYXR0cnMpOworCiAJaWYgKHB1YnJpbmZvLT5wdWJyZWxxdWFsKQog CXsKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDk5N2EzYjYwNzE5Li42ODBiMDdkY2Q1MiAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oCkBAIC02MzIsNiArNjMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1 YmxpY2F0aW9uUmVsSW5mbwogCVB1YmxpY2F0aW9uSW5mbyAqcHVibGljYXRpb247CiAJVGFi bGVJbmZvICAqcHVidGFibGU7CiAJY2hhcgkgICAqcHVicmVscXVhbDsKKwljaGFyCSAgICpw dWJyYXR0cnM7CiB9IFB1YmxpY2F0aW9uUmVsSW5mbzsKIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAy X3BnX2R1bXAucGwKaW5kZXggM2U1NWZmMjZmODIuLmVkNTdjNTNiY2I1IDEwMDY0NAotLS0g YS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAorKysgYi9zcmMvYmluL3BnX2R1 bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtMjQyOCw2ICsyNDI4LDI4IEBAIG15ICV0ZXN0cyA9 ICgKIAkJdW5saWtlID0+IHsgZXhjbHVkZV9kdW1wX3Rlc3Rfc2NoZW1hID0+IDEsIH0sCiAJ fSwKIAorCSdBTFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBUQUJMRSB0ZXN0X3NpeHRoX3Rh YmxlIChjb2wzLCBjb2wyKScgPT4geworCQljcmVhdGVfb3JkZXIgPT4gNTIsCisJCWNyZWF0 ZV9zcWwgPT4KKwkJICAnQUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgZHVtcF90 ZXN0LnRlc3Rfc2l4dGhfdGFibGUgKGNvbDMsIGNvbDIpOycsCisJCXJlZ2V4cCA9PiBxci9e CisJCQlcUUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIE9OTFkgZHVtcF90ZXN0 LnRlc3Rfc2l4dGhfdGFibGUgKGNvbDIsIGNvbDMpO1xFCisJCQkveG0sCisJCWxpa2UgPT4g eyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAorCQl1bmxpa2UgPT4g eyBleGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4gMSwgfSwKKwl9LAorCisJJ0FMVEVSIFBV QkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIHRlc3Rfc2V2ZW50aF90YWJsZSAoY29sMywgY29s MikgV0hFUkUgKGNvbDEgPSAxKScgPT4geworCQljcmVhdGVfb3JkZXIgPT4gNTIsCisJCWNy ZWF0ZV9zcWwgPT4KKwkJICAnQUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgZHVt cF90ZXN0LnRlc3Rfc2V2ZW50aF90YWJsZSAoY29sMywgY29sMikgV0hFUkUgKGNvbDEgPSAx KTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJXFFBTFRFUiBQVUJMSUNBVElPTiBwdWIxIEFE RCBUQUJMRSBPTkxZIGR1bXBfdGVzdC50ZXN0X3NldmVudGhfdGFibGUgKGNvbDIsIGNvbDMp IFdIRVJFICgoY29sMSA9IDEpKTtcRQorCQkJL3htLAorCQlsaWtlID0+IHsgJWZ1bGxfcnVu cywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwKKwkJdW5saWtlID0+IHsgZXhjbHVkZV9k dW1wX3Rlc3Rfc2NoZW1hID0+IDEsIH0sCisJfSwKKwogCSdBTFRFUiBQVUJMSUNBVElPTiBw dWIzIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBkdW1wX3Rlc3QnID0+IHsKIAkJY3JlYXRl X29yZGVyID0+IDUxLAogCQljcmVhdGVfc3FsID0+CkBAIC0yNzc4LDYgKzI4MDAsNDQgQEAg bXkgJXRlc3RzID0gKAogCQl1bmxpa2UgPT4geyBleGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEg PT4gMSwgfSwKIAl9LAogCisJJ0NSRUFURSBUQUJMRSB0ZXN0X3NpeHRoX3RhYmxlJyA9PiB7 CisJCWNyZWF0ZV9vcmRlciA9PiA2LAorCQljcmVhdGVfc3FsICAgPT4gJ0NSRUFURSBUQUJM RSBkdW1wX3Rlc3QudGVzdF9zaXh0aF90YWJsZSAoCisJCQkJCQkgICBjb2wxIGludCwKKwkJ CQkJCSAgIGNvbDIgdGV4dCwKKwkJCQkJCSAgIGNvbDMgYnl0ZWEKKwkJCQkJICAgKTsnLAor CQlyZWdleHAgPT4gcXIvXgorCQkJXFFDUkVBVEUgVEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2l4 dGhfdGFibGUgKFxFCisJCQlcblxzK1xRY29sMSBpbnRlZ2VyLFxFCisJCQlcblxzK1xRY29s MiB0ZXh0LFxFCisJCQlcblxzK1xRY29sMyBieXRlYVxFCisJCQlcblwpOworCQkJL3htLAor CQlsaWtlID0+CisJCSAgeyAlZnVsbF9ydW5zLCAlZHVtcF90ZXN0X3NjaGVtYV9ydW5zLCBz ZWN0aW9uX3ByZV9kYXRhID0+IDEsIH0sCisJCXVubGlrZSA9PiB7IGV4Y2x1ZGVfZHVtcF90 ZXN0X3NjaGVtYSA9PiAxLCB9LAorCX0sCisKKwknQ1JFQVRFIFRBQkxFIHRlc3Rfc2V2ZW50 aF90YWJsZScgPT4geworCQljcmVhdGVfb3JkZXIgPT4gNiwKKwkJY3JlYXRlX3NxbCAgID0+ ICdDUkVBVEUgVEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2V2ZW50aF90YWJsZSAoCisJCQkJCQkg ICBjb2wxIGludCwKKwkJCQkJCSAgIGNvbDIgdGV4dCwKKwkJCQkJCSAgIGNvbDMgYnl0ZWEK KwkJCQkJICAgKTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJXFFDUkVBVEUgVEFCTEUgZHVt cF90ZXN0LnRlc3Rfc2V2ZW50aF90YWJsZSAoXEUKKwkJCVxuXHMrXFFjb2wxIGludGVnZXIs XEUKKwkJCVxuXHMrXFFjb2wyIHRleHQsXEUKKwkJCVxuXHMrXFFjb2wzIGJ5dGVhXEUKKwkJ CVxuXCk7CisJCQkveG0sCisJCWxpa2UgPT4KKwkJICB7ICVmdWxsX3J1bnMsICVkdW1wX3Rl c3Rfc2NoZW1hX3J1bnMsIHNlY3Rpb25fcHJlX2RhdGEgPT4gMSwgfSwKKwkJdW5saWtlID0+ IHsgZXhjbHVkZV9kdW1wX3Rlc3Rfc2NoZW1hID0+IDEsIH0sCisJfSwKKwogCSdDUkVBVEUg VEFCTEUgdGVzdF90YWJsZV9pZGVudGl0eScgPT4gewogCQljcmVhdGVfb3JkZXIgPT4gMywK IAkJY3JlYXRlX3NxbCAgID0+ICdDUkVBVEUgVEFCTEUgZHVtcF90ZXN0LnRlc3RfdGFibGVf aWRlbnRpdHkgKApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMv YmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCBlMzM4MjkzM2Q5OC4uZTQ2MmNjZmI3NDggMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9k ZXNjcmliZS5jCkBAIC0yODgwLDYgKzI4ODAsNyBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWls cyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYs CiAJCQkJCQkJCSAgIlNFTEVDVCBwdWJuYW1lXG4iCiAJCQkJCQkJCSAgIgkJLCBOVUxMXG4i CisJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCiAJCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5w Z19wdWJsaWNhdGlvbiBwXG4iCiAJCQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uX25hbWVzcGFjZSBwbiBPTiBwLm9pZCA9IHBuLnBucHViaWRcbiIKIAkJCQkJ CQkJICAiCQlKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgcGMgT04gcGMucmVsbmFtZXNwYWNl ID0gcG4ucG5uc3BpZFxuIgpAQCAtMjg4Nyw2ICsyODg4LDEyIEBAIGRlc2NyaWJlT25lVGFi bGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQkJCQkJCSAgIlVOSU9OXG4i CiAJCQkJCQkJCSAgIlNFTEVDVCBwdWJuYW1lXG4iCiAJCQkJCQkJCSAgIgkJLCBwZ19nZXRf ZXhwcihwci5wcnF1YWwsIGMub2lkKVxuIgorCQkJCQkJCQkgICIJCSwgKENBU0UgV0hFTiBw ci5wcmF0dHJzIElTIE5PVCBOVUxMIFRIRU5cbiIKKwkJCQkJCQkJICAiCQkJKFNFTEVDVCBz dHJpbmdfYWdnKGF0dG5hbWUsICcsICcpXG4iCisJCQkJCQkJCSAgIgkJCSAgRlJPTSBwZ19j YXRhbG9nLmdlbmVyYXRlX3NlcmllcygwLCBwZ19jYXRhbG9nLmFycmF5X3VwcGVyKHByLnBy YXR0cnM6OnBnX2NhdGFsb2cuaW50MltdLCAxKSkgcyxcbiIKKwkJCQkJCQkJICAiCQkJCSAg IHBnX2NhdGFsb2cucGdfYXR0cmlidXRlXG4iCisJCQkJCQkJCSAgIgkJCSBXSEVSRSBhdHRy ZWxpZCA9IHByLnBycmVsaWQgQU5EIGF0dG51bSA9IHByYXR0cnNbc10pXG4iCisJCQkJCQkJ CSAgIgkJICAgRUxTRSBOVUxMIEVORCkgIgogCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cu cGdfcHVibGljYXRpb24gcFxuIgogCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19w dWJsaWNhdGlvbl9yZWwgcHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCiAJCQkJCQkJCSAg IgkJSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMgT04gYy5vaWQgPSBwci5wcnJlbGlkXG4i CkBAIC0yODk0LDYgKzI5MDEsNyBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBj aGFyICpzY2hlbWFuYW1lLAogCQkJCQkJCQkgICJVTklPTlxuIgogCQkJCQkJCQkgICJTRUxF Q1QgcHVibmFtZVxuIgogCQkJCQkJCQkgICIJCSwgTlVMTFxuIgorCQkJCQkJCQkgICIJCSwg TlVMTFxuIgogCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxu IgogCQkJCQkJCQkgICJXSEVSRSBwLnB1YmFsbHRhYmxlcyBBTkQgcGdfY2F0YWxvZy5wZ19y ZWxhdGlvbl9pc19wdWJsaXNoYWJsZSgnJXMnKVxuIgogCQkJCQkJCQkgICJPUkRFUiBCWSAx OyIsCkBAIC0yOTA0LDEyICsyOTEyLDE0IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNv bnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJ CQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKIAkJCQkJCQkJICAiCQksIE5VTExcbiIKKwkJ CQkJCQkJICAiCQksIE5VTExcbiIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uIHBcbiIKIAkJCQkJCQkJICAiSk9JTiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0 aW9uX3JlbCBwciBPTiBwLm9pZCA9IHByLnBycHViaWRcbiIKIAkJCQkJCQkJICAiV0hFUkUg cHIucHJyZWxpZCA9ICclcydcbiIKIAkJCQkJCQkJICAiVU5JT04gQUxMXG4iCiAJCQkJCQkJ CSAgIlNFTEVDVCBwdWJuYW1lXG4iCiAJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCisJCQkJCQkJ CSAgIgkJLCBOVUxMXG4iCiAJCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNh dGlvbiBwXG4iCiAJCQkJCQkJCSAgIldIRVJFIHAucHViYWxsdGFibGVzIEFORCBwZ19jYXRh bG9nLnBnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlKCclcycpXG4iCiAJCQkJCQkJCSAgIk9S REVSIEJZIDE7IiwKQEAgLTI5MzEsNiArMjk0MSwxMSBAQCBkZXNjcmliZU9uZVRhYmxlRGV0 YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCXByaW50ZlBRRXhwQnVmZmVyKCZi dWYsICIgICAgXCIlc1wiIiwKIAkJCQkJCQkJICBQUWdldHZhbHVlKHJlc3VsdCwgaSwgMCkp OwogCisJCQkJLyogY29sdW1uIGxpc3QgKGlmIGFueSkgKi8KKwkJCQlpZiAoIVBRZ2V0aXNu dWxsKHJlc3VsdCwgaSwgMikpCisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIgKCVz KSIsCisJCQkJCQkJCQkgIFBRZ2V0dmFsdWUocmVzdWx0LCBpLCAyKSk7CisKIAkJCQkvKiBy b3cgZmlsdGVyIChpZiBhbnkpICovCiAJCQkJaWYgKCFQUWdldGlzbnVsbChyZXN1bHQsIGks IDEpKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiIFdIRVJFICVzIiwKQEAgLTU4 NjcsNyArNTg4Miw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikK ICAqLwogc3RhdGljIGJvb2wKIGFkZEZvb3RlclRvUHVibGljYXRpb25EZXNjKFBRRXhwQnVm ZmVyIGJ1ZiwgY2hhciAqZm9vdGVybXNnLAotCQkJCQkJICAgYm9vbCBzaW5nbGVjb2wsIHBy aW50VGFibGVDb250ZW50ICpjb250KQorCQkJCQkJICAgYm9vbCBhc19zY2hlbWEsIHByaW50 VGFibGVDb250ZW50ICpjb250KQogewogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQljb3Vu dCA9IDA7CkBAIC01ODg0LDE1ICs1ODk5LDE5IEBAIGFkZEZvb3RlclRvUHVibGljYXRpb25E ZXNjKFBRRXhwQnVmZmVyIGJ1ZiwgY2hhciAqZm9vdGVybXNnLAogCiAJZm9yIChpID0gMDsg aSA8IGNvdW50OyBpKyspCiAJewotCQlpZiAoIXNpbmdsZWNvbCkKKwkJaWYgKGFzX3NjaGVt YSkKKwkJCXByaW50ZlBRRXhwQnVmZmVyKGJ1ZiwgIiAgICBcIiVzXCIiLCBQUWdldHZhbHVl KHJlcywgaSwgMCkpOworCQllbHNlCiAJCXsKIAkJCXByaW50ZlBRRXhwQnVmZmVyKGJ1Ziwg IiAgICBcIiVzLiVzXCIiLCBQUWdldHZhbHVlKHJlcywgaSwgMCksCiAJCQkJCQkJICBQUWdl dHZhbHVlKHJlcywgaSwgMSkpOworCisJCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgMykp CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiICglcykiLCBQUWdldHZhbHVlKHJlcywg aSwgMykpOworCiAJCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgMikpCiAJCQkJYXBwZW5k UFFFeHBCdWZmZXIoYnVmLCAiIFdIRVJFICVzIiwgUFFnZXR2YWx1ZShyZXMsIGksIDIpKTsK IAkJfQotCQllbHNlCi0JCQlwcmludGZQUUV4cEJ1ZmZlcihidWYsICIgICAgXCIlc1wiIiwg UFFnZXR2YWx1ZShyZXMsIGksIDApKTsKIAogCQlwcmludFRhYmxlQWRkRm9vdGVyKGNvbnQs IGJ1Zi0+ZGF0YSk7CiAJfQpAQCAtNjAyMSwxMSArNjA0MCwyMiBAQCBkZXNjcmliZVB1Ymxp Y2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1 ZiwKIAkJCQkJCQkgICJTRUxFQ1Qgbi5uc3BuYW1lLCBjLnJlbG5hbWUiKTsKIAkJCWlmIChw c2V0LnN2ZXJzaW9uID49IDE1MDAwMCkKKwkJCXsKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmYnVmLAogCQkJCQkJCQkJICIsIHBnX2dldF9leHByKHByLnBycXVhbCwgYy5vaWQpIik7 CisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkJCSAiLCAoQ0FTRSBX SEVOIHByLnByYXR0cnMgSVMgTk9UIE5VTEwgVEhFTlxuIgorCQkJCQkJCQkJICIgICAgIHBn X2NhdGFsb2cuYXJyYXlfdG9fc3RyaW5nKCIKKwkJCQkJCQkJCSAiICAgICAgQVJSQVkoU0VM RUNUIGF0dG5hbWVcbiIKKwkJCQkJCQkJCSAiICAgICAgICAgICAgICBGUk9NXG4iCisJCQkJ CQkJCQkgIiAgICAgICAgICAgICAgICBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcygwLCBw Z19jYXRhbG9nLmFycmF5X3VwcGVyKHByLnByYXR0cnM6OnBnX2NhdGFsb2cuaW50MltdLCAx KSkgcyxcbiIKKwkJCQkJCQkJCSAiICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cucGdfYXR0 cmlidXRlXG4iCisJCQkJCQkJCQkgIiAgICAgICAgV0hFUkUgYXR0cmVsaWQgPSBjLm9pZCBB TkQgYXR0bnVtID0gcHJhdHRyc1tzXSksICcsICcpXG4iCisJCQkJCQkJCQkgIiAgICAgICBF TFNFIE5VTEwgRU5EKSIpOworCQkJfQogCQkJZWxzZQogCQkJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZidWYsCi0JCQkJCQkJCQkgIiwgTlVMTCIpOworCQkJCQkJCQkJICIsIE5VTEwsIE5V TEwiKTsKIAkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJICAiXG5GUk9NIHBn X2NhdGFsb2cucGdfY2xhc3MgYyxcbiIKIAkJCQkJCQkgICIgICAgIHBnX2NhdGFsb2cucGdf bmFtZXNwYWNlIG4sXG4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5k ZXggYmE3MmU2MmU2MTQuLmEwNjc0MmE2MjAwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCkBAIC04NSw2ICs4NSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNh dGlvbkRlc2MKIAkgKi8KIAlib29sCQlyZl92YWxpZF9mb3JfdXBkYXRlOwogCWJvb2wJCXJm X3ZhbGlkX2Zvcl9kZWxldGU7CisKKwkvKgorCSAqIHRydWUgaWYgdGhlIGNvbHVtbnMgYXJl IHBhcnQgb2YgdGhlIHJlcGxpY2EgaWRlbnRpdHkgb3IgdGhlIHB1YmxpY2F0aW9uIGFjdGlv bnMKKwkgKiBkbyBub3QgaW5jbHVkZSBVUERBVEUgb3IgREVMRVRFLgorCSAqLworCWJvb2wJ CWNvbHNfdmFsaWRfZm9yX3VwZGF0ZTsKKwlib29sCQljb2xzX3ZhbGlkX2Zvcl9kZWxldGU7 CiB9IFB1YmxpY2F0aW9uRGVzYzsKIAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb24KQEAg LTEwMCw2ICsxMDcsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvblJlbEluZm8KIHsK IAlSZWxhdGlvbglyZWxhdGlvbjsKIAlOb2RlCSAgICp3aGVyZUNsYXVzZTsKKwlMaXN0CSAg ICpjb2x1bW5zOwogfSBQdWJsaWNhdGlvblJlbEluZm87CiAKIGV4dGVybiBQdWJsaWNhdGlv biAqR2V0UHVibGljYXRpb24oT2lkIHB1YmlkKTsKQEAgLTEyMyw4ICsxMzEsMTEgQEAgdHlw ZWRlZiBlbnVtIFB1YmxpY2F0aW9uUGFydE9wdAogfSBQdWJsaWNhdGlvblBhcnRPcHQ7CiAK IGV4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgcHViaWQsIFB1Ymxp Y2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCk7CitleHRlcm4gTGlzdCAqR2V0UmVsYXRpb25D b2x1bW5QYXJ0aWFsUHVibGljYXRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gTGlzdCAqR2V0 UmVsYXRpb25Db2x1bW5MaXN0SW5QdWJsaWNhdGlvbihPaWQgcmVsaWQsIE9pZCBwdWJpZCk7 CiBleHRlcm4gTGlzdCAqR2V0QWxsVGFibGVzUHVibGljYXRpb25zKHZvaWQpOwogZXh0ZXJu IExpc3QgKkdldEFsbFRhYmxlc1B1YmxpY2F0aW9uUmVsYXRpb25zKGJvb2wgcHVidmlhcm9v dCk7CitleHRlcm4gdm9pZCBHZXRBY3Rpb25zSW5QdWJsaWNhdGlvbihPaWQgcHViaWQsIFB1 YmxpY2F0aW9uQWN0aW9ucyAqYWN0aW9ucyk7CiBleHRlcm4gTGlzdCAqR2V0UHVibGljYXRp b25TY2hlbWFzKE9pZCBwdWJpZCk7CiBleHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVibGljYXRp b25zKE9pZCBzY2hlbWFpZCk7CiBleHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVibGljYXRpb25S ZWxhdGlvbnMoT2lkIHNjaGVtYWlkLApAQCAtMTQyLDYgKzE1Myw4IEBAIGV4dGVybiBPYmpl Y3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0 aW9uUmVsSW5mbyAqcHJpCiAJCQkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhpc3RzKTsKIGV4 dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBP aWQgc2NoZW1haWQsCiAJCQkJCQkJCQkJCWJvb2wgaWZfbm90X2V4aXN0cyk7CitleHRlcm4g dm9pZCBwdWJsaWNhdGlvbl9zZXRfdGFibGVfY29sdW1ucyhSZWxhdGlvbiBwdWJyZWwsIEhl YXBUdXBsZSBwdWJyZWx0dXAsCisJCQkJCQkJCQkJICBSZWxhdGlvbiB0YXJnZXRyZWwsIExp c3QgKmNvbHVtbnMpOwogCiBleHRlcm4gT2lkCWdldF9wdWJsaWNhdGlvbl9vaWQoY29uc3Qg Y2hhciAqcHVibmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKIGV4dGVybiBjaGFyICpnZXRfcHVi bGljYXRpb25fbmFtZShPaWQgcHViaWQsIGJvb2wgbWlzc2luZ19vayk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaAppbmRleCAwZGQwZjQyNWRiOS4uNGZl YjU4MTg5OWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRp b25fcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwu aApAQCAtMzQsNiArMzQsNyBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uX3JlbCw2MTA2LFB1 YmxpY2F0aW9uUmVsUmVsYXRpb25JZCkKIAogI2lmZGVmCUNBVEFMT0dfVkFSTEVOCQkJLyog dmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBzdGFydCBoZXJlICovCiAJcGdfbm9kZV90cmVlIHBy cXVhbDsJCS8qIHF1YWxpZmljYXRpb25zICovCisJaW50MnZlY3RvcglwcmF0dHJzOwkJLyog Y29sdW1ucyB0byByZXBsaWNhdGUgKi8KICNlbmRpZgogfSBGb3JtRGF0YV9wZ19wdWJsaWNh dGlvbl9yZWw7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgKaW5k ZXggNzgxM2NiY2I2YmIuLmFlODdjYWYwODlkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuaApAQCAtMzEsNyArMzEsOSBAQCBleHRlcm4gdm9pZCBSZW1vdmVQ dWJsaWNhdGlvblNjaGVtYUJ5SWQoT2lkIHBzb2lkKTsKIGV4dGVybiBPYmplY3RBZGRyZXNz IEFsdGVyUHVibGljYXRpb25Pd25lcihjb25zdCBjaGFyICpuYW1lLCBPaWQgbmV3T3duZXJJ ZCk7CiBleHRlcm4gdm9pZCBBbHRlclB1YmxpY2F0aW9uT3duZXJfb2lkKE9pZCBwdWJpZCwg T2lkIG5ld093bmVySWQpOwogZXh0ZXJuIHZvaWQgSW52YWxpZGF0ZVB1YmxpY2F0aW9uUmVs cyhMaXN0ICpyZWxpZHMpOwotZXh0ZXJuIGJvb2wgY29udGFpbl9pbnZhbGlkX3JmY29sdW1u KE9pZCBwdWJpZCwgUmVsYXRpb24gcmVsYXRpb24sCitleHRlcm4gYm9vbCBwdWJfcmZfY29u dGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwKKwkJ CQkJCQkJCSBMaXN0ICphbmNlc3RvcnMsIGJvb2wgcHVidmlhcm9vdCk7CitleHRlcm4gYm9v bCBwdWJfY29sbGlzdF9jb250YWluc19pbnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0 aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkJIExpc3QgKmFuY2VzdG9ycywgYm9vbCBwdWJ2aWFy b290KTsKIAogI2VuZGlmCQkJCQkJCS8qIFBVQkxJQ0FUSU9OQ01EU19IICovCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmgKaW5kZXggMTYxNzcwMmQ5ZDYuLjEzNzVhMTczZTNiIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0zNjUyLDYgKzM2NTIsNyBAQCB0eXBlZGVmIHN0cnVj dCBQdWJsaWNhdGlvblRhYmxlCiAJTm9kZVRhZwkJdHlwZTsKIAlSYW5nZVZhciAgICpyZWxh dGlvbjsJCS8qIHJlbGF0aW9uIHRvIGJlIHB1Ymxpc2hlZCAqLwogCU5vZGUJICAgKndoZXJl Q2xhdXNlOwkvKiBxdWFsaWZpY2F0aW9ucyAqLworCUxpc3QJICAgKmNvbHVtbnM7CQkvKiBM aXN0IG9mIGNvbHVtbnMgaW4gYSBwdWJsaWNhdGlvbiB0YWJsZSAqLwogfSBQdWJsaWNhdGlv blRhYmxlOwogCiAvKgpAQCAtMzY4OCw3ICszNjg5LDggQEAgdHlwZWRlZiBlbnVtIEFsdGVy UHVibGljYXRpb25BY3Rpb24KIHsKIAlBUF9BZGRPYmplY3RzLAkJCQkvKiBhZGQgb2JqZWN0 cyB0byBwdWJsaWNhdGlvbiAqLwogCUFQX0Ryb3BPYmplY3RzLAkJCQkvKiByZW1vdmUgb2Jq ZWN0cyBmcm9tIHB1YmxpY2F0aW9uICovCi0JQVBfU2V0T2JqZWN0cwkJCQkvKiBzZXQgbGlz dCBvZiBvYmplY3RzICovCisJQVBfU2V0T2JqZWN0cywJCQkJLyogc2V0IGxpc3Qgb2Ygb2Jq ZWN0cyAqLworCUFQX1NldENvbHVtbnMJCQkJLyogY2hhbmdlIGxpc3Qgb2YgY29sdW1ucyBm b3IgYSB0YWJsZSAqLwogfSBBbHRlclB1YmxpY2F0aW9uQWN0aW9uOwogCiB0eXBlZGVmIHN0 cnVjdCBBbHRlclB1YmxpY2F0aW9uU3RtdApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2FscHJvdG8uaAppbmRleCA0ZDJjODgxNjQ0YS4uYTc3MWFiOGZmMzMgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC0yMDksMTIgKzIwOSwxMiBAQCBl eHRlcm4gY2hhciAqbG9naWNhbHJlcF9yZWFkX29yaWdpbihTdHJpbmdJbmZvIGluLCBYTG9n UmVjUHRyICpvcmlnaW5fbHNuKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfaW5z ZXJ0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJlbGF0 aW9uIHJlbCwKIAkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90LAotCQkJCQkJCQkJ Ym9vbCBiaW5hcnkpOworCQkJCQkJCQkJYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1u cyk7CiBleHRlcm4gTG9naWNhbFJlcFJlbElkIGxvZ2ljYWxyZXBfcmVhZF9pbnNlcnQoU3Ry aW5nSW5mbyBpbiwgTG9naWNhbFJlcFR1cGxlRGF0YSAqbmV3dHVwKTsKIGV4dGVybiB2b2lk IGxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklk IHhpZCwKIAkJCQkJCQkJCVJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCVR1cGxlVGFibGVTbG90 ICpvbGRzbG90LAotCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QsIGJvb2wgYmlu YXJ5KTsKKwkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90LCBib29sIGJpbmFyeSwg Qml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsSWQgbG9naWNhbHJl cF9yZWFkX3VwZGF0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJCQkgIGJvb2wgKmhhc19v bGR0dXBsZSwgTG9naWNhbFJlcFR1cGxlRGF0YSAqb2xkdHVwLAogCQkJCQkJCQkJCQkgIExv Z2ljYWxSZXBUdXBsZURhdGEgKm5ld3R1cCk7CkBAIC0yMzEsNyArMjMxLDcgQEAgZXh0ZXJu IExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogZXh0ZXJu IHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2Fj dGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlv bmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCQkgUmVsYXRpb24gcmVsKTsKKwkJCQkJCQkJIFJl bGF0aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVs YXRpb24gKmxvZ2ljYWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CiBleHRlcm4gdm9p ZCBsb2dpY2FscmVwX3dyaXRlX3R5cChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4 aWQsCiAJCQkJCQkJCSBPaWQgdHlwb2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNGUxOTFjMTIwYWMuLjc5Y2VkMjkyMWI2IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtNjEzLDYg KzYxMywzNzIgQEAgRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wazsKIERST1AgVEFCTEUgcmZf dGJsX2FiY2Rfbm9wazsKIERST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wazsKIC0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor LS0gZmFpbCAtIGR1cGxpY2F0ZSB0YWJsZXMgYXJlIG5vdCBhbGxvd2VkIGlmIHRoYXQgdGFi bGUgaGFzIGFueSBjb2x1bW4gbGlzdHMKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VS Uk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2R1cHMgRk9SIFRBQkxFIHRlc3Rw dWJfdGJsMSAoYSksIHRlc3RwdWJfdGJsMSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwor RVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgY29sdW1uIGxpc3RzIGZvciB0YWJs ZSAidGVzdHB1Yl90YmwxIgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZHVwcyBGT1Ig VEFCTEUgdGVzdHB1Yl90YmwxLCB0ZXN0cHViX3RibDEgKGEpIFdJVEggKHB1Ymxpc2ggPSAn aW5zZXJ0Jyk7CitFUlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBjb2x1bW4gbGlz dHMgZm9yIHRhYmxlICJ0ZXN0cHViX3RibDEiCitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OworLS0gdGVzdCBmb3IgY29sdW1uIGxpc3RzCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBGT1IgVEFC TEUgdGVzdHB1Yl90YmwxOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVf aW5zZXJ0IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSBpbnQgUFJJTUFSWSBLRVks IGIgdGV4dCwgYyB0ZXh0LAorCWQgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKGEgKyBsZW5n dGgoYikpIHN0b3JlZCk7CistLSBlcnJvcjogY29sdW1uICJ4IiBkb2VzIG5vdCBleGlzdAor QUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90 Ymw1IChhLCB4KTsKK0VSUk9SOiAgY29sdW1uICJ4IiBvZiByZWxhdGlvbiAidGVzdHB1Yl90 Ymw1IiBkb2VzIG5vdCBleGlzdAorLS0gZXJyb3I6IHJlcGxpY2EgaWRlbnRpdHkgImEiIG5v dCBpbmNsdWRlZCBpbiB0aGUgY29sdW1uIGxpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYiwgYyk7CitVUERBVEUgdGVz dHB1Yl90Ymw1IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVz dHB1Yl90Ymw1IgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRp b24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgVEFCTEUgdGVzdHB1Yl90Ymw1OworLS0gZXJy b3I6IGdlbmVyYXRlZCBjb2x1bW4gImQiIGNhbid0IGJlIGluIGxpc3QKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgZCk7 CitFUlJPUjogIGNhbm5vdCByZWZlcmVuY2UgZ2VuZXJhdGVkIGNvbHVtbiAiZCIgaW4gcHVi bGljYXRpb24gY29sdW1uIGxpc3QKKy0tIGVycm9yOiBzeXN0ZW0gYXR0cmlidXRlcyAiY3Rp ZCIgbm90IGFsbG93ZWQgaW4gY29sdW1uIGxpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgY3RpZCk7CitFUlJPUjog IGNhbm5vdCByZWZlcmVuY2Ugc3lzdGVtIGNvbHVtbiAiY3RpZCIgaW4gcHVibGljYXRpb24g Y29sdW1uIGxpc3QKKy0tIG9rCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxl IEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90 Ymw1IERST1AgQ09MVU1OIGM7CQktLSBubyBkaWNlCitFUlJPUjogIGNhbm5vdCBkcm9wIGNv bHVtbiAiYyIgYmVjYXVzZSBpdCBpcyBwYXJ0IG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2Zv cnRhYmxlIgorSElOVDogIFNwZWNpZnkgQ0FTQ0FERSBvciB1c2UgQUxURVIgUFVCTElDQVRJ T04gdG8gcmVtb3ZlIHRoZSBjb2x1bW4gZnJvbSB0aGUgcHVibGljYXRpb24uCistLSBvazog Zm9yIGluc2VydC1vbmx5IHB1YmxpY2F0aW9uLCB0aGUgY29sdW1uIGxpc3QgaXMgYXJiaXRy YXJ5CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2luc2VydCBBREQgVEFC TEUgdGVzdHB1Yl90Ymw1IChiLCBjKTsKKy8qIG5vdCBhbGwgcmVwbGljYSBpZGVudGl0aWVz IGFyZSBnb29kIGVub3VnaCAqLworQ1JFQVRFIFVOSVFVRSBJTkRFWCB0ZXN0cHViX3RibDVf Yl9rZXkgT04gdGVzdHB1Yl90Ymw1IChiLCBjKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJs NSBBTFRFUiBiIFNFVCBOT1QgTlVMTCwgQUxURVIgYyBTRVQgTk9UIE5VTEw7CitBTFRFUiBU QUJMRSB0ZXN0cHViX3RibDUgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHVi X3RibDVfYl9rZXk7CistLSBlcnJvcjogcmVwbGljYSBpZGVudGl0eSAoYixjKSBpcyBjb3Zl cmVkIGJ5IGNvbHVtbiBsaXN0IChhLCBjKQorVVBEQVRFIHRlc3RwdWJfdGJsNSBTRVQgYSA9 IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsNSIKK0RFVEFJ TDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVy IHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNTsKKy0tIGVycm9yOiBjaGFuZ2UgdGhlIHJl cGxpY2EgaWRlbnRpdHkgdG8gImIiLCBhbmQgdGhlbiBjb2x1bW4gbGlzdCAoYSwgYykgZmFp bHMKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElO REVYIHRlc3RwdWJfdGJsNV9iX2tleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgYyk7CistLSBlcnJvcjogcmVwbGlj YSBpZGVudGl0eSAoYixjKSBpcyBub3QgY292ZXJlZCBieSBjb2x1bW4gbGlzdCAoYSwgYykK K1VQREFURSB0ZXN0cHViX3RibDUgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRl IHRhYmxlICJ0ZXN0cHViX3RibDUiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRo ZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KKy8q IEJ1dCBpZiB1cGQvZGVsIGFyZSBub3QgcHVibGlzaGVkLCBpdCB3b3JrcyBPSyAqLworU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwor UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf dGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKK1xkUnArIHRl c3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCitUYWJsZXM6CisgICAgInB1YmxpYy50ZXN0 cHViX3RibDUiIChhKQorCistLSB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTCwgY29sdW1u IGxpc3RzIGFyZSBub3QgYWxsb3dlZAorQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNiAoYSBp bnQsIGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNiBSRVBMSUNB IElERU5USVRZIEZVTEw7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFE RCBUQUJMRSB0ZXN0cHViX3RibDYgKGEsIGIsIGMpOworVVBEQVRFIHRlc3RwdWJfdGJsNiBT RVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsNiIK K0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90 IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNjsKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNjsgLS0gb2sKK1VQREFU RSB0ZXN0cHViX3RibDYgU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3J0YWJsZSBBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDYgU0VUIENPTFVNTlMgKGEsIGIsIGMp OworVVBEQVRFIHRlc3RwdWJfdGJsNiBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRh dGUgdGFibGUgInRlc3RwdWJfdGJsNiIKK0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkg dGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5Lgor LS0gbWFrZSBzdXJlIGNoYW5naW5nIHRoZSBjb2x1bW4gbGlzdCBpcyB1cGRhdGVkIGluIFNF VCBUQUJMRQorQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNyAoYSBpbnQgcHJpbWFyeSBrZXks IGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUg QUREIFRBQkxFIHRlc3RwdWJfdGJsNyAoYSwgYik7CitcZCsgdGVzdHB1Yl90Ymw3CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlICJwdWJsaWMudGVzdHB1Yl90Ymw3 IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQg fCBTdG9yYWdlICB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAorLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGEgICAgICB8IGludGVnZXIgfCAgICAgICAg ICAgfCBub3QgbnVsbCB8ICAgICAgICAgfCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAor IGIgICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBl eHRlbmRlZCB8ICAgICAgICAgICAgICB8IAorIGMgICAgICB8IHRleHQgICAgfCAgICAgICAg ICAgfCAgICAgICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8ICAgICAgICAgICAgICB8IAor SW5kZXhlczoKKyAgICAidGVzdHB1Yl90Ymw3X3BrZXkiIFBSSU1BUlkgS0VZLCBidHJlZSAo YSkKK1B1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1Yl9mb3J0YWJsZSIgKGEsIGIpCisKKy0t IG9rOiB3ZSdsbCBza2lwIHRoaXMgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9ydGFibGUgU0VUIFRBQkxFIHRlc3RwdWJfdGJsNyAoYSwgYik7CitcZCsgdGVzdHB1Yl90 Ymw3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlICJwdWJsaWMudGVz dHB1Yl90Ymw3IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8 IERlZmF1bHQgfCBTdG9yYWdlICB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAorLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGEgICAgICB8IGludGVnZXIg fCAgICAgICAgICAgfCBub3QgbnVsbCB8ICAgICAgICAgfCBwbGFpbiAgICB8ICAgICAgICAg ICAgICB8IAorIGIgICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAg ICAgICAgfCBleHRlbmRlZCB8ICAgICAgICAgICAgICB8IAorIGMgICAgICB8IHRleHQgICAg fCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8ICAgICAgICAg ICAgICB8IAorSW5kZXhlczoKKyAgICAidGVzdHB1Yl90Ymw3X3BrZXkiIFBSSU1BUlkgS0VZ LCBidHJlZSAoYSkKK1B1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1Yl9mb3J0YWJsZSIgKGEs IGIpCisKKy0tIG9rOiB1cGRhdGUgdGhlIGNvbHVtbiBsaXN0CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRSB0ZXN0cHViX3RibDcgKGEsIGMpOworXGQr IHRlc3RwdWJfdGJsNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAi cHVibGljLnRlc3RwdWJfdGJsNyIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwg TnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlw dGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAg fCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAgICAgICAgIHwgcGxhaW4gICAg fCAgICAgICAgICAgICAgfCAKKyBiICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAg ICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAgICAgICAgICAgfCAKKyBjICAgICAg fCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQg fCAgICAgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgInRlc3RwdWJfdGJsN19wa2V5IiBQ UklNQVJZIEtFWSwgYnRyZWUgKGEpCitQdWJsaWNhdGlvbnM6CisgICAgInRlc3RwdWJfZm9y dGFibGUiIChhLCBjKQorCistLSBjb2x1bW4gbGlzdCBmb3IgcGFydGl0aW9uZWQgdGFibGVz IGhhcyB0byBjb3ZlciByZXBsaWNhIGlkZW50aXRpZXMgZm9yCistLSBhbGwgY2hpbGQgcmVs YXRpb25zCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4IChhIGludCwgYiB0ZXh0LCBjIHRl eHQpIFBBUlRJVElPTiBCWSBIQVNIIChhKTsKKy0tIGZpcnN0IHBhcnRpdGlvbiBoYXMgcmVw bGljYSBpZGVudGl0eSAiYSIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhfMCBQQVJUSVRJ T04gT0YgdGVzdHB1Yl90Ymw4IEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5k ZXIgMCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBBREQgUFJJTUFSWSBLRVkgKGEp OworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElDQSBJREVOVElUWSBVU0lORyBJ TkRFWCB0ZXN0cHViX3RibDhfMF9wa2V5OworLS0gc2Vjb25kIHBhcnRpdGlvbiBoYXMgcmVw bGljYSBpZGVudGl0eSAiYiIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhfMSBQQVJUSVRJ T04gT0YgdGVzdHB1Yl90Ymw4IEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5k ZXIgMSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBBREQgUFJJTUFSWSBLRVkgKGIp OworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJ TkRFWCB0ZXN0cHViX3RibDhfMV9wa2V5OworLS0gb2s6IGNvbHVtbiBsaXN0IGNvdmVycyBi b3RoICJhIiBhbmQgImIiCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBGT1IgVEFCTEUgdGVzdHB1Yl90 Ymw4IChhLCBiKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJyk7 CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworLS0gb2s6IHRoZSBzYW1lIHRoaW5nLCBi dXQgdHJ5IHBsYWluIEFERCBUQUJMRQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xf bGlzdCBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfY29sX2xpc3QgQUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CitVUERBVEUgdGVz dHB1Yl90Ymw4IFNFVCBhID0gMTsKKy0tIGZhaWx1cmU6IGNvbHVtbiBsaXN0IGRvZXMgbm90 IGNvdmVyIHJlcGxpY2EgaWRlbnRpdHkgZm9yIHRoZSBzZWNvbmQgcGFydGl0aW9uCitBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IERST1AgVEFCTEUgdGVzdHB1Yl90Ymw4 OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBBREQgVEFCTEUgdGVzdHB1 Yl90Ymw4IChhLCBjKTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOworRVJST1I6 ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHViX3RibDhfMSIKK0RFVEFJTDogIENvbHVt biBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBs aWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBEUk9Q IFRBQkxFIHRlc3RwdWJfdGJsODsKKy0tIGZhaWx1cmU6IG9uZSBvZiB0aGUgcGFydGl0aW9u cyBoYXMgUkVQTElDQSBJREVOVElUWSBGVUxMCitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhf MSBSRVBMSUNBIElERU5USVRZIEZVTEw7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Nv bF9saXN0IEFERCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGMpOworVVBEQVRFIHRlc3RwdWJf dGJsOCBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJf dGJsOF8xIgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24g ZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2NvbF9saXN0IERST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworLS0gYWRkIHRh YmxlIGFuZCB0aGVuIHRyeSBjaGFuZ2luZyByZXBsaWNhIGlkZW50aXR5CitBTFRFUiBUQUJM RSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJf dGJsOF8xX3BrZXk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IEFERCBU QUJMRSB0ZXN0cHViX3RibDggKGEsIGIpOworLS0gZmFpbHVyZTogcmVwbGljYSBpZGVudGl0 eSBmdWxsIGNhbid0IGJlIHVzZWQgd2l0aCBhIGNvbHVtbiBsaXN0CitBTFRFUiBUQUJMRSB0 ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIEZVTEw7CitVUERBVEUgdGVzdHB1Yl90 Ymw4IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90 Ymw4XzEiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBk b2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KKy0tIGZhaWx1cmU6IHJlcGxp Y2EgaWRlbnRpdHkgaGFzIHRvIGJlIGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBsaXN0CitBTFRF UiBUQUJMRSB0ZXN0cHViX3RibDhfMSBEUk9QIENPTlNUUkFJTlQgdGVzdHB1Yl90Ymw4XzFf cGtleTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIEFERCBQUklNQVJZIEtFWSAoYyk7 CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElO REVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0g MTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw4XzEiCitERVRB SUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3Zl ciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0RST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworLS0g Y29sdW1uIGxpc3QgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcyBoYXMgdG8gY292ZXIgcmVwbGlj YSBpZGVudGl0aWVzIGZvcgorLS0gYWxsIGNoaWxkIHJlbGF0aW9ucworQ1JFQVRFIFRBQkxF IHRlc3RwdWJfdGJsOCAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KSBQQVJUSVRJT04gQlkgSEFT SCAoYSk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IEFERCBUQUJMRSB0 ZXN0cHViX3RibDggKGEsIGIpOworLS0gZmlyc3QgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlk ZW50aXR5ICJhIgorQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsOF8wIChhIGludCwgYiB0ZXh0 LCBjIHRleHQpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgQUREIFBSSU1BUlkgS0VZ IChhKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8wIFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggdGVzdHB1Yl90Ymw4XzBfcGtleTsKKy0tIHNlY29uZCBwYXJ0aXRpb24gaGFz IHJlcGxpY2EgaWRlbnRpdHkgImIiCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgKGEg aW50LCBiIHRleHQsIGMgdGV4dCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBBREQg UFJJTUFSWSBLRVkgKGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMV9wa2V5OworLS0gb2s6IGF0dGFj aGluZyBmaXJzdCBwYXJ0aXRpb24gd29ya3MsIGJlY2F1c2UgKGEpIGlzIGluIGNvbHVtbiBs aXN0CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDggQVRUQUNIIFBBUlRJVElPTiB0ZXN0cHVi X3RibDhfMCBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworLS0g ZmFpbHVyZTogc2Vjb25kIHBhcnRpdGlvbiBoYXMgcmVwbGljYSBpZGVudGl0eSAoYyksIHdo aWNoIHNpIG5vdCBpbiBjb2x1bW4gbGlzdAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFU VEFDSCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4XzEgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVz IDIsIHJlbWFpbmRlciAxKTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOworRVJS T1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHViX3RibDhfMSIKK0RFVEFJTDogIENv bHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSBy ZXBsaWNhIGlkZW50aXR5LgorLS0gZmFpbHVyZTogY2hhbmdpbmcgcmVwbGljYSBpZGVudGl0 eSB0byBGVUxMIGZvciBwYXJ0aXRpb24gZmFpbHMsIGJlY2F1c2UKKy0tIG9mIHRoZSBjb2x1 bW4gbGlzdCBvbiB0aGUgcGFyZW50CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBSRVBM SUNBIElERU5USVRZIEZVTEw7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKK0VS Uk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw4XzAiCitERVRBSUw6ICBD b2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUg cmVwbGljYSBpZGVudGl0eS4KK0RST1AgVEFCTEUgdGVzdHB1Yl90Ymw1LCB0ZXN0cHViX3Ri bDYsIHRlc3RwdWJfdGJsNywgdGVzdHB1Yl90Ymw4LCB0ZXN0cHViX3RibDhfMTsKK0RST1Ag UFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3Rw dWJfZm9ydGFibGVfaW5zZXJ0LCB0ZXN0cHViX2NvbF9saXN0OworLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSBUZXN0IGNv bWJpbmF0aW9uIG9mIGNvbHVtbiBsaXN0IGFuZCByb3cgZmlsdGVyCitTRVQgY2xpZW50X21p bl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3Ro X2ZpbHRlcnM7CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRl c3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBL RVkgKGEsYykpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7 CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVz dHB1Yl90YmxfYm90aF9maWx0ZXJzIChhLGMpIFdIRVJFIChjICE9IDEpOworXGRScCsgdGVz dHB1Yl9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorVGFibGVzOgorICAgICJwdWJsaWMu dGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKKworXGQr IHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycworICAgICAgICAgICAgICAgICAgICAgICAgIFRh YmxlICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIgorIENvbHVtbiB8ICBUeXBl ICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgfCBTdG9yYWdlIHwgU3RhdHMg dGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAgICAg ICAgIHwgcGxhaW4gICB8ICAgICAgICAgICAgICB8IAorIGIgICAgICB8IGludGVnZXIgfCAg ICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBwbGFpbiAgIHwgICAgICAgICAgICAg IHwgCisgYyAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAg ICB8IHBsYWluICAgfCAgICAgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgInRlc3RwdWJf dGJsX2JvdGhfZmlsdGVyc19wa2V5IiBQUklNQVJZIEtFWSwgYnRyZWUgKGEsIGMpIFJFUExJ Q0EgSURFTlRJVFkKK1B1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1Yl9ib3RoX2ZpbHRlcnMi IChhLCBjKSBXSEVSRSAoYyA8PiAxKQorCitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVyczsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnM7CistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tIE1vcmUgY29sdW1uIGxpc3QgdGVzdHMgZm9yIHZhbGlkYXRpbmcgY29sdW1uIHJlZmVy ZW5jZXMKK0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9ub3BrKGEgaW50LCBiIGludCwgYyBp bnQsIGQgaW50KTsKK0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9wayhhIGludCwgYiBpbnQs IGMgaW50LCBkIGludCwgUFJJTUFSWSBLRVkoYSxiKSk7CitDUkVBVEUgVEFCTEUgcmZfdGJs X2FiY2RfcGFydF9wayAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50KSBQQVJUSVRJT04gYnkg UkFOR0UgKGEpOworQ1JFQVRFIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGtfMSAoYiBpbnQs IGEgaW50IFBSSU1BUlkgS0VZKTsKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGsg QVRUQUNIIFBBUlRJVElPTiByZl90YmxfYWJjZF9wYXJ0X3BrXzEgRk9SIFZBTFVFUyBGUk9N ICgxKSBUTyAoMTApOworLS0gQ2FzZSAxLiBSRVBMSUNBIElERU5USVRZIERFRkFVTFQgKG1l YW5zIHVzZSBwcmltYXJ5IGtleSBvciBub3RoaW5nKQorLS0gMWEuIFJFUExJQ0EgSURFTlRJ VFkgaXMgREVGQVVMVCBhbmQgdGFibGUgaGFzIGEgUEsuCitTRVQgY2xpZW50X21pbl9tZXNz YWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYgRk9SIFRBQkxF IHJmX3RibF9hYmNkX3BrIChhLCBiKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7Cist LSBvayAtIChhLGIpIGNvdmVydHMgYWxsIFBLIGNvbHMKK1VQREFURSByZl90YmxfYWJjZF9w ayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZf dGJsX2FiY2RfcGsgKGEsIGIsIGMpOworLS0gb2sgLSAoYSxiLGMpIGNvdmVydHMgYWxsIFBL IGNvbHMKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGEpOworLS0gZmFpbCAt ICJiIiBpcyBtaXNzaW5nIGZyb20gdGhlIGNvbHVtbiBsaXN0CitVUERBVEUgcmZfdGJsX2Fi Y2RfcGsgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90Ymxf YWJjZF9wayIKK0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9u IGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChiKTsKKy0tIGZhaWwgLSAi YSIgaXMgbWlzc2luZyBmcm9tIHRoZSBjb2x1bW4gbGlzdAorVVBEQVRFIHJmX3RibF9hYmNk X3BrIFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2Fi Y2RfcGsiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBk b2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KKy0tIDFiLiBSRVBMSUNBIElE RU5USVRZIGlzIERFRkFVTFQgYW5kIHRhYmxlIGhhcyBubyBQSworQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgKGEpOworLS0gb2sgLSB0 aGVyZSdzIG5vIHJlcGxpY2EgaWRlbnRpdHksIHNvIGFueSBjb2x1bW4gbGlzdCB3b3Jrcwor LS0gbm90ZTogaXQgZmFpbHMgYW55d2F5LCBqdXN0IGEgYml0IGxhdGVyIGJlY2F1c2UgVVBE QVRFIHJlcXVpcmVzIFJJCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CitF UlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX25vcGsiIGJlY2F1c2Ug aXQgZG9lcyBub3QgaGF2ZSBhIHJlcGxpY2EgaWRlbnRpdHkgYW5kIHB1Ymxpc2hlcyB1cGRh dGVzCitISU5UOiAgVG8gZW5hYmxlIHVwZGF0aW5nIHRoZSB0YWJsZSwgc2V0IFJFUExJQ0Eg SURFTlRJVFkgdXNpbmcgQUxURVIgVEFCTEUuCistLSBDYXNlIDIuIFJFUExJQ0EgSURFTlRJ VFkgRlVMTAorQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGsgUkVQTElDQSBJREVOVElUWSBG VUxMOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElERU5USVRZIEZV TEw7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rf cGsgKGMpOworLS0gZmFpbCAtIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMIG5vIGNvbHVt biBsaXN0IGlzIGFsbG93ZWQKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitF UlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX3BrIgorREVUQUlMOiAg Q29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhl IHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFC TEUgcmZfdGJsX2FiY2Rfbm9wayAoYSwgYiwgYywgZCk7CistLSBmYWlsIC0gd2l0aCBSRVBM SUNBIElERU5USVRZIEZVTEwgbm8gY29sdW1uIGxpc3QgaXMgYWxsb3dlZAorVVBEQVRFIHJm X3RibF9hYmNkX25vcGsgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxl ICJyZl90YmxfYWJjZF9ub3BrIgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUg cHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCistLSBD YXNlIDMuIFJFUExJQ0EgSURFTlRJVFkgTk9USElORworQUxURVIgVEFCTEUgcmZfdGJsX2Fi Y2RfcGsgUkVQTElDQSBJREVOVElUWSBOT1RISU5HOworQUxURVIgVEFCTEUgcmZfdGJsX2Fi Y2Rfbm9wayBSRVBMSUNBIElERU5USVRZIE5PVEhJTkc7CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGEpOworLS0gb2sgLSBSRVBMSUNB IElERU5USVRZIE5PVEhJTkcgbWVhbnMgYWxsIGNvbHVtbiBsaXN0cyBhcmUgdmFsaWQKKy0t IGl0IHN0aWxsIGZhaWxzIGxhdGVyIGJlY2F1c2Ugd2l0aG91dCBSSSB3ZSBjYW4ndCByZXBs aWNhdGUgdXBkYXRlcworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0VSUk9S OiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGsiIGJlY2F1c2UgaXQgZG9l cyBub3QgaGF2ZSBhIHJlcGxpY2EgaWRlbnRpdHkgYW5kIHB1Ymxpc2hlcyB1cGRhdGVzCitI SU5UOiAgVG8gZW5hYmxlIHVwZGF0aW5nIHRoZSB0YWJsZSwgc2V0IFJFUExJQ0EgSURFTlRJ VFkgdXNpbmcgQUxURVIgVEFCTEUuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQg VEFCTEUgcmZfdGJsX2FiY2RfcGsgKGEsIGIsIGMsIGQpOworLS0gb2sgLSBSRVBMSUNBIElE RU5USVRZIE5PVEhJTkcgbWVhbnMgYWxsIGNvbHVtbiBsaXN0cyBhcmUgdmFsaWQKKy0tIGl0 IHN0aWxsIGZhaWxzIGxhdGVyIGJlY2F1c2Ugd2l0aG91dCBSSSB3ZSBjYW4ndCByZXBsaWNh dGUgdXBkYXRlcworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0VSUk9SOiAg Y2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGsiIGJlY2F1c2UgaXQgZG9lcyBu b3QgaGF2ZSBhIHJlcGxpY2EgaWRlbnRpdHkgYW5kIHB1Ymxpc2hlcyB1cGRhdGVzCitISU5U OiAgVG8gZW5hYmxlIHVwZGF0aW5nIHRoZSB0YWJsZSwgc2V0IFJFUExJQ0EgSURFTlRJVFkg dXNpbmcgQUxURVIgVEFCTEUuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFC TEUgcmZfdGJsX2FiY2Rfbm9wayAoZCk7CistLSBvayAtIFJFUExJQ0EgSURFTlRJVFkgTk9U SElORyBtZWFucyBhbGwgY29sdW1uIGxpc3RzIGFyZSB2YWxpZAorLS0gaXQgc3RpbGwgZmFp bHMgbGF0ZXIgYmVjYXVzZSB3aXRob3V0IFJJIHdlIGNhbid0IHJlcGxpY2F0ZSB1cGRhdGVz CitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1 cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX25vcGsiIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2 ZSBhIHJlcGxpY2EgaWRlbnRpdHkgYW5kIHB1Ymxpc2hlcyB1cGRhdGVzCitISU5UOiAgVG8g ZW5hYmxlIHVwZGF0aW5nIHRoZSB0YWJsZSwgc2V0IFJFUExJQ0EgSURFTlRJVFkgdXNpbmcg QUxURVIgVEFCTEUuCistLSBDYXNlIDQuIFJFUExJQ0EgSURFTlRJVFkgSU5ERVgKK0FMVEVS IFRBQkxFIHJmX3RibF9hYmNkX3BrIEFMVEVSIENPTFVNTiBjIFNFVCBOT1QgTlVMTDsKK0NS RUFURSBVTklRVUUgSU5ERVggaWR4X2FiY2RfcGtfYyBPTiByZl90YmxfYWJjZF9wayhjKTsK K0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX3BrIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5E RVggaWR4X2FiY2RfcGtfYzsKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgQUxURVIg Q09MVU1OIGMgU0VUIE5PVCBOVUxMOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfYWJjZF9u b3BrX2MgT04gcmZfdGJsX2FiY2Rfbm9wayhjKTsKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNk X25vcGsgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBpZHhfYWJjZF9ub3BrX2M7CitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGEp OworLS0gZmFpbCAtIGNvbHVtbiBsaXN0ICJhIiBkb2VzIG5vdCBjb3ZlciB0aGUgUkVQTElD QSBJREVOVElUWSBJTkRFWCBvbiAiYyIKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9 IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX3BrIgorREVU QUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292 ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBT RVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGMpOworLS0gb2sgLSBjb2x1bW4gbGlzdCAiYyIg ZG9lcyBjb3ZlciB0aGUgUkVQTElDQSBJREVOVElUWSBJTkRFWCBvbiAiYyIKK1VQREFURSBy Zl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBT RVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoYSk7CistLSBmYWlsIC0gY29sdW1uIGxpc3Qg ImEiIGRvZXMgbm90IGNvdmVyIHRoZSBSRVBMSUNBIElERU5USVRZIElOREVYIG9uICJjIgor VVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBk YXRlIHRhYmxlICJyZl90YmxfYWJjZF9ub3BrIgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNl ZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRp dHkuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rf bm9wayAoYyk7CistLSBvayAtIGNvbHVtbiBsaXN0ICJjIiBkb2VzIGNvdmVyIHRoZSBSRVBM SUNBIElERU5USVRZIElOREVYIG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VU IGEgPSAxOworLS0gVGVzdHMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCistLSBzZXQgUFVCTElT SF9WSUFfUEFSVElUSU9OX1JPT1QgdG8gZmFsc2UgYW5kIHRlc3Qgcm93IGZpbHRlciBmb3Ig cGFydGl0aW9uZWQKKy0tIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQg KFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTApOworLS0gZmFpbCAtIGNhbm5vdCB1c2Ug cm93IGZpbHRlciBmb3IgcGFydGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrIChhKTsKK0VSUk9SOiAgY2Fu bm90IHVzZSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdCBmb3IgcmVsYXRpb24gInJmX3RibF9h YmNkX3BhcnRfcGsiCitERVRBSUw6ICBjb2x1bW4gbGlzdCBjYW5ub3QgYmUgdXNlZCBmb3Ig YSBwYXJ0aXRpb25lZCB0YWJsZSB3aGVuIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlz IGZhbHNlLgorLS0gb2sgLSBjYW4gdXNlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbgorQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGtf MSAoYSk7CistLSBvayAtICJhIiBpcyBhIFBLIGNvbAorVVBEQVRFIHJmX3RibF9hYmNkX3Bh cnRfcGsgU0VUIGEgPSAxOworLS0gc2V0IFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UIHRv IHRydWUgYW5kIHRlc3Qgcm93IGZpbHRlciBmb3IgcGFydGl0aW9uZWQKKy0tIHRhYmxlCitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9S T09UPTEpOworLS0gb2sgLSBjYW4gdXNlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRh YmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rf cGFydF9wayAoYSk7CistLSBvayAtICJhIiBpcyBhIFBLIGNvbAorVVBEQVRFIHJmX3RibF9h YmNkX3BhcnRfcGsgU0VUIGEgPSAxOworLS0gZmFpbCAtIGNhbm5vdCBzZXQgUFVCTElTSF9W SUFfUEFSVElUSU9OX1JPT1QgdG8gZmFsc2UgaWYgYW55IHJvdyBmaWx0ZXIgaXMKKy0tIHVz ZWQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBT RVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTApOworRVJST1I6ICBjYW5ub3Qgc2V0 IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UgZm9yIHB1YmxpY2F0aW9uICJ0 ZXN0cHViNiIKK0RFVEFJTDogIFRoZSBwdWJsaWNhdGlvbiBjb250YWlucyBhIGNvbHVtbiBs aXN0IGZvciBhIHBhcnRpdGlvbmVkIHRhYmxlICJyZl90YmxfYWJjZF9wYXJ0X3BrIiB3aGlj aCBpcyBub3QgYWxsb3dlZCB3aGVuIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGlzIGZh bHNlLgorLS0gTm93IGNoYW5nZSB0aGUgcm9vdCBmaWx0ZXIgdG8gdXNlIGEgY29sdW1uICJi IgorLS0gKHdoaWNoIGlzIG5vdCBpbiB0aGUgcmVwbGljYSBpZGVudGl0eSkKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrXzEgKGIp OworLS0gb2sgLSB3ZSBkb24ndCBoYXZlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRh YmxlLgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIChQVUJMSVNIX1ZJQV9QQVJU SVRJT05fUk9PVD0wKTsKKy0tIGZhaWwgLSAiYiIgaXMgbm90IGluIFJFUExJQ0EgSURFTlRJ VFkgSU5ERVgKK1VQREFURSByZl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBhID0gMTsKK0VSUk9S OiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGFydF9wa18xIgorREVUQUlM OiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIg dGhlIHJlcGxpY2EgaWRlbnRpdHkuCistLSBzZXQgUFVCTElTSF9WSUFfUEFSVElUSU9OX1JP T1QgdG8gdHJ1ZQorLS0gY2FuIHVzZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRpb25lZCB0YWJs ZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIChQVUJMSVNIX1ZJQV9QQVJUSVRJ T05fUk9PVD0xKTsKKy0tIG9rIC0gY2FuIHVzZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRpb25l ZCB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9h YmNkX3BhcnRfcGsgKGIpOworLS0gZmFpbCAtICJiIiBpcyBub3QgaW4gUkVQTElDQSBJREVO VElUWSBJTkRFWAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRfcGsgU0VUIGEgPSAxOworRVJS T1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9wYXJ0X3BrXzEiCitERVRB SUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3Zl ciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0RST1AgUFVCTElDQVRJT04gdGVzdHB1YjY7CitE Uk9QIFRBQkxFIHJmX3RibF9hYmNkX3BrOworRFJPUCBUQUJMRSByZl90YmxfYWJjZF9ub3Br OworRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrOworLS0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSBUZXN0IGNhY2hl IGludmFsaWRhdGlvbiBGT1IgQUxMIFRBQkxFUyBwdWJsaWNhdGlvbgogU0VUIGNsaWVudF9t aW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNChhIGlu dCk7CkBAIC0xMDU4LDYgKzE0MjQsMTUgQEAgQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXMK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAorLS0gVmVyaWZ5IHRo YXQgaXQgZmFpbHMgdG8gYWRkIGEgc2NoZW1hIHdpdGggYSBjb2x1bW4gc3BlY2lmaWNhdGlv bgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVT IElOIFNDSEVNQSBmb28gKGEsIGIpOworRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVh ciAiKCIKK0xJTkUgMTogLi4uVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJM RVMgSU4gU0NIRU1BIGZvbyAoYSwgYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBmb28sIGJh ciAoYSwgYik7CitFUlJPUjogIGNvbHVtbiBzcGVjaWZpY2F0aW9uIG5vdCBhbGxvd2VkIGZv ciBzY2hlbWEKK0xJTkUgMTogLi4uIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxF UyBJTiBTQ0hFTUEgZm9vLCBiYXIgKGEsIGIpLi4uCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogLS0gY2xlYW51cCBw dWJfdGVzdDEgc2NoZW1hIGZvciBpbnZhbGlkYXRpb24gdGVzdHMKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIyX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MTsKIERST1AgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hLCB0ZXN0cHViNF9m b3JzY2hlbWEsIHRlc3RwdWI1X2ZvcnNjaGVtYSwgdGVzdHB1YjZfZm9yc2NoZW1hLCB0ZXN0 cHViX2ZvcnRhYmxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGlj YXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCmluZGV4 IDU0NTdjNTZiMzNmLi5iZTA1YWM5Zjc2MyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1Ymxp Y2F0aW9uLnNxbApAQCAtMzczLDYgKzM3MywyOTIgQEAgRFJPUCBUQUJMRSByZl90YmxfYWJj ZF9ub3BrOwogRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrOwogLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKy0tIGZh aWwgLSBkdXBsaWNhdGUgdGFibGVzIGFyZSBub3QgYWxsb3dlZCBpZiB0aGF0IHRhYmxlIGhh cyBhbnkgY29sdW1uIGxpc3RzCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7 CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9kdXBzIEZPUiBUQUJMRSB0ZXN0cHViX3Ri bDEgKGEpLCB0ZXN0cHViX3RibDEgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKK0NSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViX2R1cHMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMSwgdGVz dHB1Yl90YmwxIChhKSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOworUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKKworLS0gdGVzdCBmb3IgY29sdW1uIGxpc3RzCitTRVQgY2xpZW50 X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3J0YWJsZSBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGVfaW5zZXJ0IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSBp bnQgUFJJTUFSWSBLRVksIGIgdGV4dCwgYyB0ZXh0LAorCWQgaW50IGdlbmVyYXRlZCBhbHdh eXMgYXMgKGEgKyBsZW5ndGgoYikpIHN0b3JlZCk7CistLSBlcnJvcjogY29sdW1uICJ4IiBk b2VzIG5vdCBleGlzdAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQg VEFCTEUgdGVzdHB1Yl90Ymw1IChhLCB4KTsKKy0tIGVycm9yOiByZXBsaWNhIGlkZW50aXR5 ICJhIiBub3QgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBsaXN0CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGIsIGMpOworVVBE QVRFIHRlc3RwdWJfdGJsNSBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnRhYmxlIERST1AgVEFCTEUgdGVzdHB1Yl90Ymw1OworLS0gZXJyb3I6IGdlbmVyYXRl ZCBjb2x1bW4gImQiIGNhbid0IGJlIGluIGxpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgZCk7CistLSBlcnJvcjog c3lzdGVtIGF0dHJpYnV0ZXMgImN0aWQiIG5vdCBhbGxvd2VkIGluIGNvbHVtbiBsaXN0CitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3Ri bDUgKGEsIGN0aWQpOworLS0gb2sKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFi bGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgYyk7CitBTFRFUiBUQUJMRSB0ZXN0cHVi X3RibDUgRFJPUCBDT0xVTU4gYzsJCS0tIG5vIGRpY2UKKy0tIG9rOiBmb3IgaW5zZXJ0LW9u bHkgcHVibGljYXRpb24sIHRoZSBjb2x1bW4gbGlzdCBpcyBhcmJpdHJhcnkKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfaW5zZXJ0IEFERCBUQUJMRSB0ZXN0cHViX3Ri bDUgKGIsIGMpOworCisvKiBub3QgYWxsIHJlcGxpY2EgaWRlbnRpdGllcyBhcmUgZ29vZCBl bm91Z2ggKi8KK0NSRUFURSBVTklRVUUgSU5ERVggdGVzdHB1Yl90Ymw1X2Jfa2V5IE9OIHRl c3RwdWJfdGJsNSAoYiwgYyk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDUgQUxURVIgYiBT RVQgTk9UIE5VTEwsIEFMVEVSIGMgU0VUIE5PVCBOVUxMOworQUxURVIgVEFCTEUgdGVzdHB1 Yl90Ymw1IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw1X2Jfa2V5 OworLS0gZXJyb3I6IHJlcGxpY2EgaWRlbnRpdHkgKGIsYykgaXMgY292ZXJlZCBieSBjb2x1 bW4gbGlzdCAoYSwgYykKK1VQREFURSB0ZXN0cHViX3RibDUgU0VUIGEgPSAxOworQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNTsK KworLS0gZXJyb3I6IGNoYW5nZSB0aGUgcmVwbGljYSBpZGVudGl0eSB0byAiYiIsIGFuZCB0 aGVuIGNvbHVtbiBsaXN0IChhLCBjKSBmYWlscworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1 IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw1X2Jfa2V5OworQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1 IChhLCBjKTsKKy0tIGVycm9yOiByZXBsaWNhIGlkZW50aXR5IChiLGMpIGlzIG5vdCBjb3Zl cmVkIGJ5IGNvbHVtbiBsaXN0IChhLCBjKQorVVBEQVRFIHRlc3RwdWJfdGJsNSBTRVQgYSA9 IDE7CisKKy8qIEJ1dCBpZiB1cGQvZGVsIGFyZSBub3QgcHVibGlzaGVkLCBpdCB3b3JrcyBP SyAqLworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVu Y2F0ZScpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sK K1xkUnArIHRlc3RwdWJfdGFibGVfaW5zCisKKy0tIHdpdGggUkVQTElDQSBJREVOVElUWSBG VUxMLCBjb2x1bW4gbGlzdHMgYXJlIG5vdCBhbGxvd2VkCitDUkVBVEUgVEFCTEUgdGVzdHB1 Yl90Ymw2IChhIGludCwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90 Ymw2IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKKworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw2IChhLCBiLCBjKTsKK1VQREFURSB0 ZXN0cHViX3RibDYgU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNjsKKworQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw2OyAtLSBvaworVVBEQVRFIHRl c3RwdWJfdGJsNiBTRVQgYSA9IDE7CisKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGUgQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFNFVCBDT0xVTU5TIChhLCBiLCBjKTsK K1VQREFURSB0ZXN0cHViX3RibDYgU0VUIGEgPSAxOworCistLSBtYWtlIHN1cmUgY2hhbmdp bmcgdGhlIGNvbHVtbiBsaXN0IGlzIHVwZGF0ZWQgaW4gU0VUIFRBQkxFCitDUkVBVEUgVEFC TEUgdGVzdHB1Yl90Ymw3IChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0LCBjIHRleHQpOwor QUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90 Ymw3IChhLCBiKTsKK1xkKyB0ZXN0cHViX3RibDcKKy0tIG9rOiB3ZSdsbCBza2lwIHRoaXMg dGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIFRBQkxFIHRl c3RwdWJfdGJsNyAoYSwgYik7CitcZCsgdGVzdHB1Yl90Ymw3CistLSBvazogdXBkYXRlIHRo ZSBjb2x1bW4gbGlzdAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQg VEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBjKTsKK1xkKyB0ZXN0cHViX3RibDcKKworLS0gY29s dW1uIGxpc3QgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcyBoYXMgdG8gY292ZXIgcmVwbGljYSBp ZGVudGl0aWVzIGZvcgorLS0gYWxsIGNoaWxkIHJlbGF0aW9ucworQ1JFQVRFIFRBQkxFIHRl c3RwdWJfdGJsOCAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAo YSk7CistLSBmaXJzdCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgImEiCitDUkVB VEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUEFSVElUSU9OIE9GIHRlc3RwdWJfdGJsOCBGT1Ig VkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworQUxURVIgVEFCTEUgdGVz dHB1Yl90Ymw4XzAgQUREIFBSSU1BUlkgS0VZIChhKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOF8wIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzBfcGtl eTsKKy0tIHNlY29uZCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgImIiCitDUkVB VEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUEFSVElUSU9OIE9GIHRlc3RwdWJfdGJsOCBGT1Ig VkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDEpOworQUxURVIgVEFCTEUgdGVz dHB1Yl90Ymw4XzEgQUREIFBSSU1BUlkgS0VZIChiKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzFfcGtl eTsKKworLS0gb2s6IGNvbHVtbiBsaXN0IGNvdmVycyBib3RoICJhIiBhbmQgImIiCitTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1Yl9jb2xfbGlzdCBGT1IgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKSBXSVRIIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJyk7CitSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOworCistLSBvazogdGhlIHNhbWUgdGhpbmcsIGJ1dCB0cnkgcGxhaW4gQUREIFRB QkxFCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IERST1AgVEFCTEUgdGVz dHB1Yl90Ymw4OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBBREQgVEFC TEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAx OworCistLSBmYWlsdXJlOiBjb2x1bW4gbGlzdCBkb2VzIG5vdCBjb3ZlciByZXBsaWNhIGlk ZW50aXR5IGZvciB0aGUgc2Vjb25kIHBhcnRpdGlvbgorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9jb2xfbGlzdCBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfY29sX2xpc3QgQUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYyk7CitV UERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfY29sX2xpc3QgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDg7CisKKy0tIGZhaWx1cmU6IG9u ZSBvZiB0aGUgcGFydGl0aW9ucyBoYXMgUkVQTElDQSBJREVOVElUWSBGVUxMCitBTFRFUiBU QUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIEZVTEw7CitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IEFERCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGMp OworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2NvbF9saXN0IERST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworCistLSBhZGQgdGFi bGUgYW5kIHRoZW4gdHJ5IGNoYW5naW5nIHJlcGxpY2EgaWRlbnRpdHkKK0FMVEVSIFRBQkxF IHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90 Ymw4XzFfcGtleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xpc3QgQUREIFRB QkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CisKKy0tIGZhaWx1cmU6IHJlcGxpY2EgaWRlbnRp dHkgZnVsbCBjYW4ndCBiZSB1c2VkIHdpdGggYSBjb2x1bW4gbGlzdAorQUxURVIgVEFCTEUg dGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBGVUxMOworVVBEQVRFIHRlc3RwdWJf dGJsOCBTRVQgYSA9IDE7CisKKy0tIGZhaWx1cmU6IHJlcGxpY2EgaWRlbnRpdHkgaGFzIHRv IGJlIGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBsaXN0CitBTFRFUiBUQUJMRSB0ZXN0cHViX3Ri bDhfMSBEUk9QIENPTlNUUkFJTlQgdGVzdHB1Yl90Ymw4XzFfcGtleTsKK0FMVEVSIFRBQkxF IHRlc3RwdWJfdGJsOF8xIEFERCBQUklNQVJZIEtFWSAoYyk7CitBTFRFUiBUQUJMRSB0ZXN0 cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8x X3BrZXk7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKKworRFJPUCBUQUJMRSB0 ZXN0cHViX3RibDg7CisKKy0tIGNvbHVtbiBsaXN0IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMg aGFzIHRvIGNvdmVyIHJlcGxpY2EgaWRlbnRpdGllcyBmb3IKKy0tIGFsbCBjaGlsZCByZWxh dGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDggKGEgaW50LCBiIHRleHQsIGMgdGV4 dCkgUEFSVElUSU9OIEJZIEhBU0ggKGEpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9j b2xfbGlzdCBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKKy0tIGZpcnN0IHBhcnRp dGlvbiBoYXMgcmVwbGljYSBpZGVudGl0eSAiYSIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3Ri bDhfMCAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJs OF8wIEFERCBQUklNQVJZIEtFWSAoYSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8wX3BrZXk7CistLSBz ZWNvbmQgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJiIgorQ1JFQVRFIFRBQkxF IHRlc3RwdWJfdGJsOF8xIChhIGludCwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUg dGVzdHB1Yl90Ymw4XzEgQUREIFBSSU1BUlkgS0VZIChjKTsKK0FMVEVSIFRBQkxFIHRlc3Rw dWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzFf cGtleTsKKworLS0gb2s6IGF0dGFjaGluZyBmaXJzdCBwYXJ0aXRpb24gd29ya3MsIGJlY2F1 c2UgKGEpIGlzIGluIGNvbHVtbiBsaXN0CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDggQVRU QUNIIFBBUlRJVElPTiB0ZXN0cHViX3RibDhfMCBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMg MiwgcmVtYWluZGVyIDApOworLS0gZmFpbHVyZTogc2Vjb25kIHBhcnRpdGlvbiBoYXMgcmVw bGljYSBpZGVudGl0eSAoYyksIHdoaWNoIHNpIG5vdCBpbiBjb2x1bW4gbGlzdAorQUxURVIg VEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4XzEgRk9S IFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAxKTsKK1VQREFURSB0ZXN0cHVi X3RibDggU0VUIGEgPSAxOworCistLSBmYWlsdXJlOiBjaGFuZ2luZyByZXBsaWNhIGlkZW50 aXR5IHRvIEZVTEwgZm9yIHBhcnRpdGlvbiBmYWlscywgYmVjYXVzZQorLS0gb2YgdGhlIGNv bHVtbiBsaXN0IG9uIHRoZSBwYXJlbnQKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8wIFJF UExJQ0EgSURFTlRJVFkgRlVMTDsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOwor CitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNSwgdGVzdHB1Yl90Ymw2LCB0ZXN0cHViX3RibDcs IHRlc3RwdWJfdGJsOCwgdGVzdHB1Yl90Ymw4XzE7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfdGFibGVfaW5zLCB0ZXN0cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnRhYmxlX2luc2Vy dCwgdGVzdHB1Yl9jb2xfbGlzdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLSBUZXN0IGNvbWJpbmF0aW9uIG9mIGNv bHVtbiBsaXN0IGFuZCByb3cgZmlsdGVyCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdF UlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnM7CitSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOworQUxU RVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9m aWx0ZXJzIChhLGMpIFdIRVJFIChjICE9IDEpOworXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRl cnMKK1xkKyB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMKKworRFJPUCBUQUJMRSB0ZXN0cHVi X3RibF9ib3RoX2ZpbHRlcnM7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0 ZXJzOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisKKy0tIE1vcmUgY29sdW1uIGxpc3QgdGVzdHMgZm9yIHZhbGlkYXRpbmcg Y29sdW1uIHJlZmVyZW5jZXMKK0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9ub3BrKGEgaW50 LCBiIGludCwgYyBpbnQsIGQgaW50KTsKK0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9wayhh IGludCwgYiBpbnQsIGMgaW50LCBkIGludCwgUFJJTUFSWSBLRVkoYSxiKSk7CitDUkVBVEUg VEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50KSBQ QVJUSVRJT04gYnkgUkFOR0UgKGEpOworQ1JFQVRFIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRf cGtfMSAoYiBpbnQsIGEgaW50IFBSSU1BUlkgS0VZKTsKK0FMVEVSIFRBQkxFIHJmX3RibF9h YmNkX3BhcnRfcGsgQVRUQUNIIFBBUlRJVElPTiByZl90YmxfYWJjZF9wYXJ0X3BrXzEgRk9S IFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCistLSBDYXNlIDEuIFJFUExJQ0EgSURFTlRJ VFkgREVGQVVMVCAobWVhbnMgdXNlIHByaW1hcnkga2V5IG9yIG5vdGhpbmcpCisKKy0tIDFh LiBSRVBMSUNBIElERU5USVRZIGlzIERFRkFVTFQgYW5kIHRhYmxlIGhhcyBhIFBLLgorU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IEZPUiBUQUJMRSByZl90YmxfYWJjZF9wayAoYSwgYik7CitSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOworLS0gb2sgLSAoYSxiKSBjb3ZlcnRzIGFsbCBQSyBjb2xzCitVUERB VEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChhLCBiLCBjKTsKKy0tIG9rIC0gKGEsYixj KSBjb3ZlcnRzIGFsbCBQSyBjb2xzCitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAx OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3Br IChhKTsKKy0tIGZhaWwgLSAiYiIgaXMgbWlzc2luZyBmcm9tIHRoZSBjb2x1bW4gbGlzdAor VVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYik7CistLSBmYWlsIC0gImEiIGlz IG1pc3NpbmcgZnJvbSB0aGUgY29sdW1uIGxpc3QKK1VQREFURSByZl90YmxfYWJjZF9wayBT RVQgYSA9IDE7CisKKy0tIDFiLiBSRVBMSUNBIElERU5USVRZIGlzIERFRkFVTFQgYW5kIHRh YmxlIGhhcyBubyBQSworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJm X3RibF9hYmNkX25vcGsgKGEpOworLS0gb2sgLSB0aGVyZSdzIG5vIHJlcGxpY2EgaWRlbnRp dHksIHNvIGFueSBjb2x1bW4gbGlzdCB3b3JrcworLS0gbm90ZTogaXQgZmFpbHMgYW55d2F5 LCBqdXN0IGEgYml0IGxhdGVyIGJlY2F1c2UgVVBEQVRFIHJlcXVpcmVzIFJJCitVUERBVEUg cmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CisKKy0tIENhc2UgMi4gUkVQTElDQSBJREVO VElUWSBGVUxMCitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9wayBSRVBMSUNBIElERU5USVRZ IEZVTEw7CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkg RlVMTDsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJj ZF9wayAoYyk7CistLSBmYWlsIC0gd2l0aCBSRVBMSUNBIElERU5USVRZIEZVTEwgbm8gY29s dW1uIGxpc3QgaXMgYWxsb3dlZAorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsK K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3Br IChhLCBiLCBjLCBkKTsKKy0tIGZhaWwgLSB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBu byBjb2x1bW4gbGlzdCBpcyBhbGxvd2VkCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQg YSA9IDE7CisKKy0tIENhc2UgMy4gUkVQTElDQSBJREVOVElUWSBOT1RISU5HCitBTFRFUiBU QUJMRSByZl90YmxfYWJjZF9wayBSRVBMSUNBIElERU5USVRZIE5PVEhJTkc7CitBTFRFUiBU QUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsKK0FMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7Cist LSBvayAtIFJFUExJQ0EgSURFTlRJVFkgTk9USElORyBtZWFucyBhbGwgY29sdW1uIGxpc3Rz IGFyZSB2YWxpZAorLS0gaXQgc3RpbGwgZmFpbHMgbGF0ZXIgYmVjYXVzZSB3aXRob3V0IFJJ IHdlIGNhbid0IHJlcGxpY2F0ZSB1cGRhdGVzCitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VU IGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9h YmNkX3BrIChhLCBiLCBjLCBkKTsKKy0tIG9rIC0gUkVQTElDQSBJREVOVElUWSBOT1RISU5H IG1lYW5zIGFsbCBjb2x1bW4gbGlzdHMgYXJlIHZhbGlkCistLSBpdCBzdGlsbCBmYWlscyBs YXRlciBiZWNhdXNlIHdpdGhvdXQgUkkgd2UgY2FuJ3QgcmVwbGljYXRlIHVwZGF0ZXMKK1VQ REFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoZCk7CistLSBvayAtIFJFUExJQ0Eg SURFTlRJVFkgTk9USElORyBtZWFucyBhbGwgY29sdW1uIGxpc3RzIGFyZSB2YWxpZAorLS0g aXQgc3RpbGwgZmFpbHMgbGF0ZXIgYmVjYXVzZSB3aXRob3V0IFJJIHdlIGNhbid0IHJlcGxp Y2F0ZSB1cGRhdGVzCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CisKKy0t IENhc2UgNC4gUkVQTElDQSBJREVOVElUWSBJTkRFWAorQUxURVIgVEFCTEUgcmZfdGJsX2Fi Y2RfcGsgQUxURVIgQ09MVU1OIGMgU0VUIE5PVCBOVUxMOworQ1JFQVRFIFVOSVFVRSBJTkRF WCBpZHhfYWJjZF9wa19jIE9OIHJmX3RibF9hYmNkX3BrKGMpOworQUxURVIgVEFCTEUgcmZf dGJsX2FiY2RfcGsgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBpZHhfYWJjZF9wa19j OworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBBTFRFUiBDT0xVTU4gYyBTRVQgTk9U IE5VTEw7CitDUkVBVEUgVU5JUVVFIElOREVYIGlkeF9hYmNkX25vcGtfYyBPTiByZl90Ymxf YWJjZF9ub3BrKGMpOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElE RU5USVRZIFVTSU5HIElOREVYIGlkeF9hYmNkX25vcGtfYzsKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7CistLSBmYWlsIC0gY29s dW1uIGxpc3QgImEiIGRvZXMgbm90IGNvdmVyIHRoZSBSRVBMSUNBIElERU5USVRZIElOREVY IG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYyk7CistLSBvayAt IGNvbHVtbiBsaXN0ICJjIiBkb2VzIGNvdmVyIHRoZSBSRVBMSUNBIElERU5USVRZIElOREVY IG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChhKTsKKy0tIGZh aWwgLSBjb2x1bW4gbGlzdCAiYSIgZG9lcyBub3QgY292ZXIgdGhlIFJFUExJQ0EgSURFTlRJ VFkgSU5ERVggb24gImMiCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAo Yyk7CistLSBvayAtIGNvbHVtbiBsaXN0ICJjIiBkb2VzIGNvdmVyIHRoZSBSRVBMSUNBIElE RU5USVRZIElOREVYIG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEgPSAx OworCistLSBUZXN0cyBmb3IgcGFydGl0aW9uZWQgdGFibGUKKworLS0gc2V0IFBVQkxJU0hf VklBX1BBUlRJVElPTl9ST09UIHRvIGZhbHNlIGFuZCB0ZXN0IHJvdyBmaWx0ZXIgZm9yIHBh cnRpdGlvbmVkCistLSB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIChQ VUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVD0wKTsKKy0tIGZhaWwgLSBjYW5ub3QgdXNlIHJv dyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYSk7CistLSBvayAtIGNhbiB1 c2Ugcm93IGZpbHRlciBmb3IgcGFydGl0aW9uCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wa18xIChhKTsKKy0tIG9rIC0gImEiIGlz IGEgUEsgY29sCitVUERBVEUgcmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7CistLSBz ZXQgUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1QgdG8gdHJ1ZSBhbmQgdGVzdCByb3cgZmls dGVyIGZvciBwYXJ0aXRpb25lZAorLS0gdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MSk7CistLSBvayAtIGNhbiB1 c2Ugcm93IGZpbHRlciBmb3IgcGFydGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrIChhKTsKKy0tIG9rIC0g ImEiIGlzIGEgUEsgY29sCitVUERBVEUgcmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7 CistLSBmYWlsIC0gY2Fubm90IHNldCBQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVCB0byBm YWxzZSBpZiBhbnkgcm93IGZpbHRlciBpcworLS0gdXNlZCBmb3IgcGFydGl0aW9uZWQgdGFi bGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElU SU9OX1JPT1Q9MCk7CistLSBOb3cgY2hhbmdlIHRoZSByb290IGZpbHRlciB0byB1c2UgYSBj b2x1bW4gImIiCistLSAod2hpY2ggaXMgbm90IGluIHRoZSByZXBsaWNhIGlkZW50aXR5KQor QUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRf cGtfMSAoYik7CistLSBvayAtIHdlIGRvbid0IGhhdmUgcm93IGZpbHRlciBmb3IgcGFydGl0 aW9uZWQgdGFibGUuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKFBVQkxJU0hf VklBX1BBUlRJVElPTl9ST09UPTApOworLS0gZmFpbCAtICJiIiBpcyBub3QgaW4gUkVQTElD QSBJREVOVElUWSBJTkRFWAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRfcGsgU0VUIGEgPSAx OworLS0gc2V0IFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UIHRvIHRydWUKKy0tIGNhbiB1 c2Ugcm93IGZpbHRlciBmb3IgcGFydGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MSk7CistLSBvayAt IGNhbiB1c2Ugcm93IGZpbHRlciBmb3IgcGFydGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrIChiKTsKKy0t IGZhaWwgLSAiYiIgaXMgbm90IGluIFJFUExJQ0EgSURFTlRJVFkgSU5ERVgKK1VQREFURSBy Zl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBhID0gMTsKKworRFJPUCBQVUJMSUNBVElPTiB0ZXN0 cHViNjsKK0RST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGs7CitEUk9QIFRBQkxFIHJmX3RibF9h YmNkX25vcGs7CitEUk9QIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGs7CistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogLS0g VGVzdCBjYWNoZSBpbnZhbGlkYXRpb24gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24KIFNF VCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBUQUJMRSB0ZXN0cHVi X3RibDQoYSBpbnQpOwpAQCAtNjE0LDYgKzkwMCwxMCBAQCBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVu dF9zY2hlbQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwg VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIx X2ZvcnNjaGVtYQogCistLSBWZXJpZnkgdGhhdCBpdCBmYWlscyB0byBhZGQgYSBzY2hlbWEg d2l0aCBhIGNvbHVtbiBzcGVjaWZpY2F0aW9uCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGZvbyAoYSwgYik7CitBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NI RU1BIGZvbywgYmFyIChhLCBiKTsKKwogLS0gY2xlYW51cCBwdWJfdGVzdDEgc2NoZW1hIGZv ciBpbnZhbGlkYXRpb24gdGVzdHMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIyX2ZvcnNj aGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIERST1AgUFVCTElD QVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hLCB0ZXN0cHViNF9mb3JzY2hlbWEsIHRlc3RwdWI1 X2ZvcnNjaGVtYSwgdGVzdHB1YjZfZm9yc2NoZW1hLCB0ZXN0cHViX2ZvcnRhYmxlOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI5X2NvbHVtbl9saXN0LnBsIGIv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI5X2NvbHVtbl9saXN0LnBsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41MjY2OTY3YjNmNAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOV9jb2x1bW5fbGlzdC5wbApAQCAt MCwwICsxLDExMjQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgcGFydGlhbC1jb2x1bW4gcHVibGljYXRp b24gb2YgdGFibGVzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2Ug VGVzdDo6TW9yZTsKKworIyBjcmVhdGUgcHVibGlzaGVyIG5vZGUKK215ICRub2RlX3B1Ymxp c2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7Cisk bm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwor JG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKworIyBjcmVhdGUgc3Vic2NyaWJlciBub2RlCitt eSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdz dWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcg PT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jl c3FsLmNvbmYnLAorCXFxKG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSA2KSk7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0g JG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworCitzdWIg d2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMKK3sKKwlteSAoJG5vZGUpID0gQF87CisKKwkj IEFsc28gd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jIHRvIGZpbmlzaAorCW15ICRzeW5j ZWRfcXVlcnkgPSAiU0VMRUNUIGNvdW50KDEpID0gMCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9y ZWwgV0hFUkUgc3JzdWJzdGF0ZSBOT1QgSU4gKCdyJywgJ3MnKTsiOworCisJJG5vZGUtPnBv bGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgJHN5bmNlZF9xdWVyeSkKKwkJb3IgZGllICJU aW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJlciB0byBzeW5jaHJvbml6ZSBk YXRhIjsKK30KKworIyBzZXR1cCB0YWJsZXMgb24gYm90aCBub2RlcworCisjIHRhYjE6IHNp bXBsZSAxOjEgcmVwbGljYXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWIxIChhIGludCBQUklNQVJZIEtFWSwgIkIi IGludCwgYyBpbnQpCispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWIxIChhIGludCBQUklNQVJZIEtFWSwgIkIi IGludCwgYyBpbnQpCispKTsKKworIyB0YWIyOiByZXBsaWNhdGlvbiBmcm9tIHJlZ3VsYXIg dG8gdGFibGUgd2l0aCBmZXdlciBjb2x1bW5zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiMiAoYSBpbnQgUFJJTUFSWSBL RVksIGIgdmFyY2hhciwgYyBpbnQpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiMiAoYSBpbnQgUFJJTUFS WSBLRVksIGIgdmFyY2hhcikKKykpOworCisjIHRhYjM6IHNpbXBsZSAxOjEgcmVwbGljYXRp b24gd2l0aCB3ZWlyZCBjb2x1bW4gbmFtZXMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWIzICgiYSciIGludCBQUklNQVJZ IEtFWSwgIkIiIHZhcmNoYXIsICJjJyIgaW50KQorKSk7CisKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiMyAoImEnIiBp bnQgUFJJTUFSWSBLRVksICJjJyIgaW50KQorKSk7CisKKyMgdGVzdF9wYXJ0OiBwYXJ0aXRp b25lZCB0YWJsZXMsIHdpdGggcGFydGl0aW9uaW5nIChpbmNsdWRpbmcgbXVsdGktbGV2ZWwK KyMgcGFydGl0aW9uaW5nLCBhbmQgZmV3ZXIgY29sdW1ucyBvbiB0aGUgc3Vic2NyaWJlcikK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBU QUJMRSB0ZXN0X3BhcnQgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQsIGMgdGltZXN0YW1w dHopIFBBUlRJVElPTiBCWSBMSVNUIChhKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzFf MSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0IEZPUiBWQUxVRVMgSU4gKDEsMiwzLDQsNSw2KTsK KwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzJfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0IEZP UiBWQUxVRVMgSU4gKDcsOCw5LDEwLDExLDEyKSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisJ Q1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF8yXzEg Rk9SIFZBTFVFUyBJTiAoNyw4LDksMTApOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0IChhIGlu dCBQUklNQVJZIEtFWSwgYiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisJQ1JFQVRF IFRBQkxFIHRlc3RfcGFydF8xXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydCBGT1IgVkFMVUVT IElOICgxLDIsMyw0LDUsNik7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzEgUEFSVElU SU9OIE9GIHRlc3RfcGFydCBGT1IgVkFMVUVTIElOICg3LDgsOSwxMCwxMSwxMikgUEFSVElU SU9OIEJZIExJU1QgKGEpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8yIFBBUlRJVElP TiBPRiB0ZXN0X3BhcnRfMl8xIEZPUiBWQUxVRVMgSU4gKDcsOCw5LDEwKTsKKykpOworCisj IHRhYjQ6IHRhYmxlIHdpdGggdXNlci1kZWZpbmVkIGVudW0gdHlwZXMKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUWVBFIHRlc3RfdHlw IEFTIEVOVU0gKCdibHVlJywgJ3JlZCcpOworCUNSRUFURSBUQUJMRSB0YWI0IChhIElOVCBQ UklNQVJZIEtFWSwgYiB0ZXN0X3R5cCwgYyBpbnQsIGQgdGV4dCk7CispKTsKKworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUWVBFIHRl c3RfdHlwIEFTIEVOVU0gKCdibHVlJywgJ3JlZCcpOworCUNSRUFURSBUQUJMRSB0YWI0IChh IElOVCBQUklNQVJZIEtFWSwgYiB0ZXN0X3R5cCwgZCB0ZXh0KTsKKykpOworCisKKyMgVEVT VDogY3JlYXRlIHB1YmxpY2F0aW9uIGFuZCBzdWJzY3JpcHRpb24gZm9yIHNvbWUgb2YgdGhl IHRhYmxlcyB3aXRoCisjIGNvbHVtbiBsaXN0cworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEKKwkgICBGT1Ig VEFCTEUgdGFiMSAoYSwgIkIiKSwgdGFiMyAoImEnIiwgImMnIiksIHRlc3RfcGFydCAoYSwg YiksIHRhYjQgKGEsIGIsIGQpCisJICBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9ICd0cnVlJyk7CispKTsKKworIyBjaGVjayB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgcHJh dHRycyB2YWx1ZXMgZm9yIHRoZSBwdWJsaWNhdGlvbiBpbiB0aGUKKyMgcGdfcHVibGljYXRp b25fcmVsIGNhdGFsb2cgKG9yZGVyIGJ5IHJlbG5hbWUsIHRvIGdldCBzdGFibGUgb3JkZXJp bmcpCitteSAkcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXEoCisJU0VMRUNUIHJlbG5hbWUsIHByYXR0cnMKKwlGUk9NIHBnX3B1YmxpY2F0aW9u X3JlbCBwYiBKT0lOIHBnX2NsYXNzIHBjIE9OKHBiLnBycmVsaWQgPSBwYy5vaWQpCisJT1JE RVIgQlkgcmVsbmFtZQorKSk7CisKK2lzKCRyZXN1bHQsIHFxKHRhYjF8MSAyCit0YWIzfDEg MwordGFiNHwxIDIgNAordGVzdF9wYXJ0fDEgMiksICdwdWJsaWNhdGlvbiByZWxhdGlvbiB1 cGRhdGVkJyk7CisKKyMgVEVTVDogaW5zZXJ0IGRhdGEgaW50byB0aGUgdGFibGVzLCBjcmVh dGUgc3Vic2NyaXB0aW9uIGFuZCBzZWUgaWYgc3luYworIyByZXBsaWNhdGVzIHRoZSByaWdo dCBjb2x1bW5zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlJTlNFUlQgSU5UTyB0YWIxIFZBTFVFUyAoMSwgMiwgMyk7CisJSU5TRVJUIElOVE8gdGFi MSBWQUxVRVMgKDQsIDUsIDYpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjMgVkFMVUVTICgxLCAyLCAzKTsK KwlJTlNFUlQgSU5UTyB0YWIzIFZBTFVFUyAoNCwgNSwgNik7CispKTsKKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiNCBW QUxVRVMgKDEsICdyZWQnLCAzLCAnb2ggbXknKTsKKwlJTlNFUlQgSU5UTyB0YWI0IFZBTFVF UyAoMiwgJ2JsdWUnLCA0LCAnaGVsbG8nKTsKKykpOworCisjIHJlcGxpY2F0aW9uIG9mIHBh cnRpdGlvbmVkIHRhYmxlCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnQgVkFMVUVTICgxLCAnYWJjJywgJzIwMjEt MDctMDQgMTI6MDA6MDAnKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnQgVkFMVUVTICgyLCAn YmNkJywgJzIwMjEtMDctMDMgMTE6MTI6MTMnKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnQg VkFMVUVTICg3LCAnYWJjJywgJzIwMjEtMDctMDQgMTI6MDA6MDAnKTsKKwlJTlNFUlQgSU5U TyB0ZXN0X3BhcnQgVkFMVUVTICg4LCAnYmNkJywgJzIwMjEtMDctMDMgMTE6MTI6MTMnKTsK KykpOworCisjIGNyZWF0ZSBzdWJzY3JpcHRpb24gZm9yIHRoZSBwdWJsaWNhdGlvbiwgd2Fp dCBmb3Igc3luYyB0byBjb21wbGV0ZSwKKyMgdGhlbiBjaGVjayB0aGUgc3luYyByZXN1bHRz Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRF IFNVQlNDUklQVElPTiBzdWIxIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVC TElDQVRJT04gcHViMQorKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2Rl X3N1YnNjcmliZXIpOworCisjIHRhYjE6IG9ubHkgKGEsYikgaXMgcmVwbGljYXRlZAorJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxF Q1QgKiBGUk9NIHRhYjEgT1JERVIgQlkgYSIpOworaXMoJHJlc3VsdCwgcXEoMXwyfAorNHw1 fCksICdpbnNlcnQgb24gY29sdW1uIHRhYjEuYyBpcyBub3QgcmVwbGljYXRlZCcpOworCisj IHRhYjM6IG9ubHkgKGEsYykgaXMgcmVwbGljYXRlZAorJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFNFTEVDVCAqIEZST00gdGFiMyBP UkRFUiBCWSAiYSciKSk7CitpcygkcmVzdWx0LCBxcSgxfDMKKzR8NiksICdpbnNlcnQgb24g Y29sdW1uIHRhYjMuYiBpcyBub3QgcmVwbGljYXRlZCcpOworCisjIHRhYjQ6IG9ubHkgKGEs YixkKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGFiNCBPUkRFUiBCWSBhIik7Citp cygkcmVzdWx0LCBxcSgxfHJlZHxvaCBteQorMnxibHVlfGhlbGxvKSwgJ2luc2VydCBvbiBj b2x1bW4gdGFiNC5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKyMgdGVzdF9wYXJ0OiAoYSxi KSBpcyByZXBsaWNhdGVkCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGVzdF9wYXJ0IE9SREVSIEJZIGEiKTsK K2lzKCRyZXN1bHQsIHFxKDF8YWJjCisyfGJjZAorN3xhYmMKKzh8YmNkKSwgJ2luc2VydCBv biBjb2x1bW4gdGVzdF9wYXJ0LmMgY29sdW1ucyBpcyBub3QgcmVwbGljYXRlZCcpOworCisK KyMgVEVTVDogbm93IGluc2VydCBtb3JlIGRhdGEgaW50byB0aGUgdGFibGVzLCBhbmQgd2Fp dCB1bnRpbCB3ZSByZXBsaWNhdGUKKyMgdGhlbSAobm90IGJ5IHRhYmxlc3luYywgYnV0IHJl Z3VsYXIgZGVjb2RpbmcgYW5kIHJlcGxpY2F0aW9uKQorCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWIxIFZBTFVFUyAoMiwg MywgNCk7CisJSU5TRVJUIElOVE8gdGFiMSBWQUxVRVMgKDUsIDYsIDcpOworKSk7CisKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRP IHRhYjMgVkFMVUVTICgyLCAzLCA0KTsKKwlJTlNFUlQgSU5UTyB0YWIzIFZBTFVFUyAoNSwg NiwgNyk7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJSU5TRVJUIElOVE8gdGFiNCBWQUxVRVMgKDMsICdyZWQnLCA1LCAnZm9vJyk7CisJ SU5TRVJUIElOVE8gdGFiNCBWQUxVRVMgKDQsICdibHVlJywgNiwgJ2JhcicpOworKSk7CisK KyMgcmVwbGljYXRpb24gb2YgcGFydGl0aW9uZWQgdGFibGUKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydCBWQUxV RVMgKDMsICd4eHgnLCAnMjAyMi0wMi0wMSAxMDowMDowMCcpOworCUlOU0VSVCBJTlRPIHRl c3RfcGFydCBWQUxVRVMgKDQsICd5eXknLCAnMjAyMi0wMy0wMiAxNToxMjoxMycpOworCUlO U0VSVCBJTlRPIHRlc3RfcGFydCBWQUxVRVMgKDksICd6enonLCAnMjAyMi0wNC0wMyAyMTow MDowMCcpOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydCBWQUxVRVMgKDEwLCAncXFxJywgJzIw MjItMDUtMDQgMjI6MTI6MTMnKTsKKykpOworCisjIHdhaXQgZm9yIGNhdGNodXAgYmVmb3Jl IGNoZWNraW5nIHRoZSBzdWJzY3JpYmVyCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ3N1YjEnKTsKKworIyB0YWIxOiBvbmx5IChhLGIpIGlzIHJlcGxpY2F0ZWQKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VM RUNUICogRlJPTSB0YWIxIE9SREVSIEJZIGEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8MnwKKzJ8 M3wKKzR8NXwKKzV8NnwpLCAnaW5zZXJ0IG9uIGNvbHVtbiB0YWIxLmMgaXMgbm90IHJlcGxp Y2F0ZWQnKTsKKworIyB0YWIzOiBvbmx5IChhLGMpIGlzIHJlcGxpY2F0ZWQKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShTRUxFQ1Qg KiBGUk9NIHRhYjMgT1JERVIgQlkgImEnIikpOworaXMoJHJlc3VsdCwgcXEoMXwzCisyfDQK KzR8NgorNXw3KSwgJ2luc2VydCBvbiBjb2x1bW4gdGFiMy5iIGlzIG5vdCByZXBsaWNhdGVk Jyk7CisKKyMgdGFiNDogb25seSAoYSxiLGQpIGlzIHJlcGxpY2F0ZWQKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJP TSB0YWI0IE9SREVSIEJZIGEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8cmVkfG9oIG15CisyfGJs dWV8aGVsbG8KKzN8cmVkfGZvbworNHxibHVlfGJhciksICdpbnNlcnQgb24gY29sdW1uIHRh YjQuYyBpcyBub3QgcmVwbGljYXRlZCcpOworCisjIHRlc3RfcGFydDogKGEsYikgaXMgcmVw bGljYXRlZAorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydCBPUkRFUiBCWSBhIik7CitpcygkcmVz dWx0LCBxcSgxfGFiYworMnxiY2QKKzN8eHh4Cis0fHl5eQorN3xhYmMKKzh8YmNkCis5fHp6 egorMTB8cXFxKSwgJ2luc2VydCBvbiBjb2x1bW4gdGVzdF9wYXJ0LmMgY29sdW1ucyBpcyBu b3QgcmVwbGljYXRlZCcpOworCisKKyMgVEVTVDogZG8gc29tZSB1cGRhdGVzIG9uIHNvbWUg b2YgdGhlIHRhYmxlcywgYm90aCBvbiBjb2x1bW5zIGluY2x1ZGVkCisjIGluIHRoZSBjb2x1 bW4gbGlzdCBhbmQgb3RoZXIKKworIyB0YWIxOiB1cGRhdGUgb2YgcmVwbGljYXRlZCBjb2x1 bW4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoVVBEQVRF IHRhYjEgU0VUICJCIiA9IDIgKiAiQiIgd2hlcmUgYSA9IDEpKTsKKworIyB0YWIxOiB1cGRh dGUgb2Ygbm9uLXJlcGxpY2F0ZWQgY29sdW1uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0YWIxIFNFVCBjID0gMipjIHdoZXJlIGEgPSA0 KSk7CisKKyMgdGFiMzogdXBkYXRlIG9mIG5vbi1yZXBsaWNhdGVkCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0YWIzIFNFVCAiQiIgPSAi QiIgfHwgJyB1cGRhdGVkJyB3aGVyZSAiYSciID0gNCkpOworCisjIHRhYjM6IHVwZGF0ZSBv ZiByZXBsaWNhdGVkIGNvbHVtbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwlxcShVUERBVEUgdGFiMyBTRVQgImMnIiA9IDIgKiAiYyciIHdoZXJlICJhJyIg PSAxKSk7CisKKyMgdGFiNAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwlxcShVUERBVEUgdGFiNCBTRVQgYiA9ICdibHVlJywgYyA9IGMgKiAyLCBkID0gZCB8 fCAnIHVwZGF0ZWQnIHdoZXJlIGEgPSAxKSk7CisKKyMgdGFiNAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShVUERBVEUgdGFiNCBTRVQgYiA9ICdyZWQn LCBjID0gYyAqIDIsIGQgPSBkIHx8ICcgdXBkYXRlZCcgd2hlcmUgYSA9IDIpKTsKKworIyB3 YWl0IGZvciB0aGUgcmVwbGljYXRpb24gdG8gY2F0Y2ggdXAsIGFuZCBjaGVjayB0aGUgVVBE QVRFIHJlc3VsdHMgZ290CisjIHJlcGxpY2F0ZWQgY29ycmVjdGx5LCB3aXRoIHRoZSByaWdo dCBjb2x1bW4gbGlzdAorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIx Jyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwlxcShTRUxFQ1QgKiBGUk9NIHRhYjEgT1JERVIgQlkgYSkpOworaXMoJHJlc3VsdCwK K3FxKDF8NHwKKzJ8M3wKKzR8NXwKKzV8NnwpLCAnb25seSB1cGRhdGUgb24gY29sdW1uIHRh YjEuYiBpcyByZXBsaWNhdGVkJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShTRUxFQ1QgKiBGUk9NIHRhYjMgT1JERVIgQlkg ImEnIikpOworaXMoJHJlc3VsdCwKK3FxKDF8NgorMnw0Cis0fDYKKzV8NyksICdvbmx5IHVw ZGF0ZSBvbiBjb2x1bW4gdGFiMy5jIGlzIHJlcGxpY2F0ZWQnKTsKKworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFNFTEVDVCAqIEZS T00gdGFiNCBPUkRFUiBCWSBhKSk7CisKK2lzKCRyZXN1bHQsIHFxKDF8Ymx1ZXxvaCBteSB1 cGRhdGVkCisyfHJlZHxoZWxsbyB1cGRhdGVkCiszfHJlZHxmb28KKzR8Ymx1ZXxiYXIpLCAn dXBkYXRlIG9uIGNvbHVtbiB0YWI0LmMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworCisjIFRF U1Q6IGFkZCB0YWJsZSB3aXRoIGEgY29sdW1uIGxpc3QsIGluc2VydCBkYXRhLCByZXBsaWNh dGUKKworIyBpbnNlcnQgc29tZSBkYXRhIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHB1Ymxp Y2F0aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJ TlNFUlQgSU5UTyB0YWIyIFZBTFVFUyAoMSwgJ2FiYycsIDMpOworKSk7CisKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFBVQkxJQ0FUSU9OIHB1 YjEgQUREIFRBQkxFIHRhYjIgKGEsIGIpIik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBSRUZSRVNIIFBV QkxJQ0FUSU9OIik7CisKKyMgd2FpdCBmb3IgdGhlIHRhYmxlc3luYyB0byBjb21wbGV0ZSwg YWRkIGEgYml0IG1vcmUgZGF0YSBhbmQgdGhlbiBjaGVjaworIyB0aGUgcmVzdWx0cyBvZiB0 aGUgcmVwbGljYXRpb24KK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNj cmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlJTlNFUlQgSU5UTyB0YWIyIFZBTFVFUyAoMiwgJ2RlZicsIDYpOworKSk7CisKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00g dGFiMiBPUkRFUiBCWSBhIik7CitpcygkcmVzdWx0LCBxcSgxfGFiYworMnxkZWYpLCAnaW5z ZXJ0IG9uIGNvbHVtbiB0YWIyLmMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworIyBkbyBhIGNv dXBsZSB1cGRhdGVzLCBjaGVjayB0aGUgY29ycmVjdCBzdHVmZiBnZXRzIHJlcGxpY2F0ZWQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCVVQREFURSB0 YWIyIFNFVCBjID0gNSB3aGVyZSBhID0gMTsKKwlVUERBVEUgdGFiMiBTRVQgYiA9ICd4eXon IHdoZXJlIGEgPSAyOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnc3ViMScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGFiMiBPUkRFUiBCWSBhIik7CitpcygkcmVz dWx0LCBxcSgxfGFiYworMnx4eXopLCAndXBkYXRlIG9uIGNvbHVtbiB0YWIyLmMgaXMgbm90 IHJlcGxpY2F0ZWQnKTsKKworCisjIFRFU1Q6IGFkZCBhIHRhYmxlIHRvIHR3byBwdWJsaWNh dGlvbnMgd2l0aCBkaWZmZXJlbnQgY29sdW1uIGxpc3RzLCBhbmQKKyMgY3JlYXRlIGEgc2lu Z2xlIHN1YnNjcmlwdGlvbiByZXBsaWNhdGluZyBib3RoIHB1YmxpY2F0aW9ucworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRh YjUgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQsIGQgaW50KTsKKwlDUkVBVEUg UFVCTElDQVRJT04gcHViMiBGT1IgVEFCTEUgdGFiNSAoYSwgYik7CisJQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1YjMgRk9SIFRBQkxFIHRhYjUgKGEsIGQpOworCisJLS0gaW5zZXJ0IGEgY291 cGxlIGluaXRpYWwgcmVjb3JkcworCUlOU0VSVCBJTlRPIHRhYjUgVkFMVUVTICgxLCAxMSwg MTExLCAxMTExKTsKKwlJTlNFUlQgSU5UTyB0YWI1IFZBTFVFUyAoMiwgMjIsIDIyMiwgMjIy Mik7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCUNSRUFURSBUQUJMRSB0YWI1IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGQgaW50 KTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjIsIHB1YjMK KykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsK KworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKKyMgaW5z ZXJ0IGRhdGEgYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGNvbHVtbnMgKHVuaW9uIG9mIHRoZSBj b2x1bW5zIGxpc3RzKQorIyBnZXQgZnVsbHkgcmVwbGljYXRlZAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiNSBWQUxVRVMg KDMsIDMzLCAzMzMsIDMzMzMpOworCUlOU0VSVCBJTlRPIHRhYjUgVkFMVUVTICg0LCA0NCwg NDQ0LCA0NDQ0KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IlNFTEVDVCAqIEZST00gdGFiNSBPUkRFUiBCWSBhIiksCisgICBxcSgxfDExfDExMTEKKzJ8 MjJ8MjIyMgorM3wzM3wzMzMzCis0fDQ0fDQ0NDQpLAorICAgJ292ZXJsYXBwaW5nIHB1Ymxp Y2F0aW9ucyB3aXRoIG92ZXJsYXBwaW5nIGNvbHVtbiBsaXN0cycpOworCisjIGFuZCBmaW5h bGx5LCBzZXQgdGhlIGNvbHVtbiBsaXN0IHRvIEFMTCBmb3Igb25lIG9mIHRoZSBwdWJsaWNh dGlvbnMsCisjIHdoaWNoIG1lYW5zIHJlcGxpY2F0aW5nIGFsbCBjb2x1bW5zIChyZW1vdmlu ZyB0aGUgY29sdW1uIGxpc3QpLCBidXQKKyMgZmlyc3QgYWRkIHRoZSBtaXNzaW5nIGNvbHVt biB0byB0aGUgdGFibGUgb24gc3Vic2NyaWJlcgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgUFVCTElDQVRJT04gcHViMyBBTFRFUiBUQUJM RSB0YWI1IFNFVCBDT0xVTU5TIEFMTDsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgUkVGUkVT SCBQVUJMSUNBVElPTjsKKwlBTFRFUiBUQUJMRSB0YWI1IEFERCBDT0xVTU4gYyBJTlQ7Cisp KTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJ TlRPIHRhYjUgVkFMVUVTICg1LCA1NSwgNTU1LCA1NTU1KTsKKykpOworCiskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNSBPUkRFUiBCWSBh IiksCisgICBxcSgxfDExfDExMTF8CisyfDIyfDIyMjJ8CiszfDMzfDMzMzN8Cis0fDQ0fDQ0 NDR8Cis1fDU1fDU1NTV8NTU1KSwKKyAgICdvdmVybGFwcGluZyBwdWJsaWNhdGlvbnMgd2l0 aCBvdmVybGFwcGluZyBjb2x1bW4gbGlzdHMnKTsKKworIyBURVNUOiBjcmVhdGUgYSB0YWJs ZSB3aXRoIGEgY29sdW1uIGxpc3QsIHRoZW4gY2hhbmdlIHRoZSByZXBsaWNhCisjIGlkZW50 aXR5IGJ5IHJlcGxhY2luZyBhIHByaW1hcnkga2V5IChidXQgdXNlIGEgZGlmZmVyZW50IGNv bHVtbiBpbgorIyB0aGUgY29sdW1uIGxpc3QpCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiNiAoYSBpbnQgUFJJTUFSWSBL RVksIGIgaW50LCBjIGludCwgZCBpbnQpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWI0IEZP UiBUQUJMRSB0YWI2IChhLCBiKTsKKworCS0tIGluaXRpYWwgZGF0YQorCUlOU0VSVCBJTlRP IHRhYjYgVkFMVUVTICgxLCAyMiwgMzMzLCA0NDQ0KTsKKykpOworCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjYgKGEg aW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQsIGQgaW50KTsKKykpOworCiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBU SU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjQKKykpOworCit3YWl0X2Zvcl9zdWJzY3Jp cHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiNiBWQUxVRVMgKDIsIDMz LCA0NDQsIDU1NTUpOworCVVQREFURSB0YWI2IFNFVCBiID0gYiAqIDIsIGMgPSBjICogMywg ZCA9IGQgKiA0OworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn c3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywi U0VMRUNUICogRlJPTSB0YWI2IE9SREVSIEJZIGEiKSwKKwlxcSgxfDQ0fHwKKzJ8NjZ8fCks ICdyZXBsaWNhdGlvbiB3aXRoIHRoZSBvcmlnaW5hbCBwcmltYXJ5IGtleScpOworCisjIG5v dyByZWRlZmluZSB0aGUgY29uc3RyYWludCAtIG1vdmUgdGhlIHByaW1hcnkga2V5IHRvIGEg ZGlmZmVyZW50IGNvbHVtbgorIyAod2hpY2ggaXMgc3RpbGwgY292ZXJlZCBieSB0aGUgY29s dW1uIGxpc3QsIHRob3VnaCkKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJQUxURVIgVEFCTEUgdGFiNiBEUk9QIENPTlNUUkFJTlQgdGFiNl9wa2V5 OworCUFMVEVSIFRBQkxFIHRhYjYgQUREIFBSSU1BUlkgS0VZIChiKTsKKykpOworCisjIHdl IG5lZWQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgb24gdGhlIHN1YnNjcmliZXIKKyMgWFhYIFdo YXQgd291bGQgaGFwcGVuIGlmIHRoaXMgaGFwcGVucyBiZWZvcmUgdGhlIHB1Ymxpc2hlciBB TFRFUj8gT3IKKyMgaW50ZXJsZWF2ZWQsIHNvbWVob3c/IEJ1dCB0aGF0IHNlZW1zIHVucmVs YXRlZCB0byBjb2x1bW4gbGlzdHMuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQUxURVIgVEFCTEUgdGFiNiBEUk9QIENPTlNUUkFJTlQgdGFiNl9w a2V5OworCUFMVEVSIFRBQkxFIHRhYjYgQUREIFBSSU1BUlkgS0VZIChiKTsKKykpOworCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VC U0NSSVBUSU9OIHN1YjEgUkVGUkVTSCBQVUJMSUNBVElPTgorKSk7CisKK3dhaXRfZm9yX3N1 YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWI2IFZBTFVFUyAo MywgNTUsIDY2NiwgODg4OCk7CisJVVBEQVRFIHRhYjYgU0VUIGIgPSBiICogMiwgYyA9IGMg KiAzLCBkID0gZCAqIDQ7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjYgT1JERVIgQlkgYSIpLAorICAgcXEoMXw4OHx8Cisy fDEzMnx8CiszfDExMHx8KSwKKyAgICdyZXBsaWNhdGlvbiB3aXRoIHRoZSBtb2RpZmllZCBw cmltYXJ5IGtleScpOworCisKKyMgVEVTVDogY3JlYXRlIGEgdGFibGUgd2l0aCBhIGNvbHVt biBsaXN0LCB0aGVuIGNoYW5nZSB0aGUgcmVwbGljYQorIyBpZGVudGl0eSBieSByZXBsYWNp bmcgYSBwcmltYXJ5IGtleSB3aXRoIGEga2V5IG9uIG11bHRpcGxlIGNvbHVtbnMKKyMgKGFs bCBvZiB0aGVtIGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBsaXN0KQorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjcgKGEgaW50 IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQsIGQgaW50KTsKKwlDUkVBVEUgUFVCTElDQVRJ T04gcHViNSBGT1IgVEFCTEUgdGFiNyAoYSwgYik7CisKKwktLSBzb21lIGluaXRpYWwgZGF0 YQorCUlOU0VSVCBJTlRPIHRhYjcgVkFMVUVTICgxLCAyMiwgMzMzLCA0NDQ0KTsKKykpOwor Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRF IFRBQkxFIHRhYjcgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQsIGQgaW50KTsK KykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ QUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjUKKykpOworCit3 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFi NyBWQUxVRVMgKDIsIDMzLCA0NDQsIDU1NTUpOworCVVQREFURSB0YWI3IFNFVCBiID0gYiAq IDIsIGMgPSBjICogMywgZCA9IGQgKiA0OworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI3IE9SREVSIEJZIGEiKSwKKyAgIHFx KDF8NDR8fAorMnw2Nnx8KSwgJ3JlcGxpY2F0aW9uIHdpdGggdGhlIG9yaWdpbmFsIHByaW1h cnkga2V5Jyk7CisKKyMgbm93IHJlZGVmaW5lIHRoZSBjb25zdHJhaW50IC0gbW92ZSB0aGUg cHJpbWFyeSBrZXkgdG8gYSBkaWZmZXJlbnQgY29sdW1uCisjICh3aGljaCBpcyBub3QgY292 ZXJlZCBieSB0aGUgY29sdW1uIGxpc3QpCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBUQUJMRSB0YWI3IERST1AgQ09OU1RSQUlOVCB0YWI3 X3BrZXk7CisJQUxURVIgVEFCTEUgdGFiNyBBREQgUFJJTUFSWSBLRVkgKGEsIGIpOworKSk7 CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VS VCBJTlRPIHRhYjcgVkFMVUVTICgzLCA1NSwgNjY2LCA3Nzc3KTsKKwlVUERBVEUgdGFiNyBT RVQgYiA9IGIgKiAyLCBjID0gYyAqIDMsIGQgPSBkICogNDsKKykpOworCiskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNyBPUkRFUiBCWSBh IiksCisgICBxcSgxfDg4fHwKKzJ8MTMyfHwKKzN8MTEwfHwpLAorICAgJ3JlcGxpY2F0aW9u IHdpdGggdGhlIG1vZGlmaWVkIHByaW1hcnkga2V5Jyk7CisKKyMgbm93IHN3aXRjaCB0aGUg cHJpbWFyeSBrZXkgYWdhaW4gdG8gYW5vdGhlciBjb2x1bW5zIG5vdCBjb3ZlcmVkIGJ5IHRo ZQorIyBjb2x1bW4gbGlzdCwgYnV0IGFsc28gZ2VuZXJhdGUgd3JpdGVzIGJldHdlZW4gdGhl IGRyb3AgYW5kIGNyZWF0aW9uCisjIG9mIHRoZSBuZXcgY29uc3RyYWludAorCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBUQUJMRSB0YWI3 IERST1AgQ09OU1RSQUlOVCB0YWI3X3BrZXk7CisJSU5TRVJUIElOVE8gdGFiNyBWQUxVRVMg KDQsIDc3LCA4ODgsIDk5OTkpOworCS0tIHVwZGF0ZS9kZWxldGUgaXMgbm90IGFsbG93ZWQg Zm9yIHRhYmxlcyB3aXRob3V0IFJJCisJQUxURVIgVEFCTEUgdGFiNyBBREQgUFJJTUFSWSBL RVkgKGIsIGEpOworCVVQREFURSB0YWI3IFNFVCBiID0gYiAqIDIsIGMgPSBjICogMywgZCA9 IGQgKiA0OworCURFTEVURSBGUk9NIHRhYjcgV0hFUkUgYSA9IDE7CispKTsKKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCispKTsKKworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjcgT1JERVIgQlkg YSIpLAorICAgcXEoMnwyNjR8fAorM3wyMjB8fAorNHwxNTR8fCksCisgICAncmVwbGljYXRp b24gd2l0aCB0aGUgbW9kaWZpZWQgcHJpbWFyeSBrZXknKTsKKworCisjIFRFU1Q6IHBhcnRp dGlvbmVkIHRhYmxlcyAod2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNl KQorIyBhbmQgcmVwbGljYSBpZGVudGl0eS4gVGhlIChsZWFmKSBwYXJ0aXRpb25zIG1heSBo YXZlIGRpZmZlcmVudCBSSSwgc28KKyMgd2UgbmVlZCB0byBjaGVjayB0aGUgcGFydGl0aW9u IFJJICh3aXRoIHJlc3BlY3QgdG8gdGhlIGNvbHVtbiBsaXN0KQorIyB3aGlsZSBhdHRhY2hp bmcgdGhlIHBhcnRpdGlvbi4KKworIyBGaXJzdCwgbGV0J3MgY3JlYXRlIGEgcGFydGl0aW9u ZWQgdGFibGUgd2l0aCB0d28gcGFydGl0aW9ucywgZWFjaCB3aXRoCisjIGEgZGlmZmVyZW50 IFJJLCBidXQgYSBjb2x1bW4gbGlzdCBub3QgY292ZXJpbmcgYWxsIHRob3NlIFJJLgorCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFC TEUgdGVzdF9wYXJ0X2EgKGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBMSVNU IChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYV8xIFBBUlRJVElPTiBPRiB0ZXN0 X3BhcnRfYSBGT1IgVkFMVUVTIElOICgxLDIsMyw0LDUpOworCUFMVEVSIFRBQkxFIHRlc3Rf cGFydF9hXzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRf YV8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2FfMV9wa2V5Owor CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9hXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9h IEZPUiBWQUxVRVMgSU4gKDYsNyw4LDksMTApOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9h XzIgQUREIFBSSU1BUlkgS0VZIChiKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8yIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2FfMl9wa2V5OworCisJLS0g aW5pdGlhbCBkYXRhLCBvbmUgcm93IGluIGVhY2ggcGFydGl0aW9uCisJSU5TRVJUIElOVE8g dGVzdF9wYXJ0X2EgVkFMVUVTICgxLCAzKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYSBW QUxVRVMgKDYsIDQpOworKSk7CisKKyMgZG8gdGhlIHNhbWUgdGhpbmcgb24gdGhlIHN1YnNj cmliZXIgKHdpdGggdGhlIG9wcG9zaXRlIGNvbHVtbiBvcmRlcikKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0 X2EgKGIgaW50LCBhIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRB QkxFIHRlc3RfcGFydF9hXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9hIEZPUiBWQUxVRVMg SU4gKDEsMiwzLDQsNSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMSBBREQgUFJJTUFS WSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzEgUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYV8xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVz dF9wYXJ0X2FfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2EgRk9SIFZBTFVFUyBJTiAoNiw3 LDgsOSwxMCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMiBBREQgUFJJTUFSWSBLRVkg KGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzIgUkVQTElDQSBJREVOVElUWSBVU0lO RyBJTkRFWCB0ZXN0X3BhcnRfYV8yX3BrZXk7CispKTsKKworIyBjcmVhdGUgYSBwdWJsaWNh dGlvbiByZXBsaWNhdGluZyBqdXN0IHRoZSBjb2x1bW4gImEiLCB3aGljaCBpcyBub3QgZW5v dWdoCisjIGZvciB0aGUgc2Vjb25kIHBhcnRpdGlvbgorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjYgRk9SIFRB QkxFIHRlc3RfcGFydF9hIChiLCBhKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IHRydWUpOworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjYgQUREIFRBQkxFIHRlc3RfcGFy dF9hXzEgKGEpOworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjYgQUREIFRBQkxFIHRlc3RfcGFy dF9hXzIgKGIpOworKSk7CisKKyMgYWRkIHRoZSBwdWJsaWNhdGlvbiB0byBvdXIgc3Vic2Ny aXB0aW9uLCB3YWl0IGZvciBzeW5jIHRvIGNvbXBsZXRlCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VU IFBVQkxJQ0FUSU9OIHB1YjYKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygk bm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2EgVkFMVUVTICgyLCA1KTsKKwlJ TlNFUlQgSU5UTyB0ZXN0X3BhcnRfYSBWQUxVRVMgKDcsIDYpOworKSk7CisKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUIGEsIGIgRlJPTSB0ZXN0X3BhcnRf YSBPUkRFUiBCWSBhLCBiIiksCisgICBxcSgxfDMKKzJ8NQorNnw0Cis3fDYpLAorICAgJ3Bh cnRpdGlvbnMgd2l0aCBkaWZmZXJlbnQgcmVwbGljYSBpZGVudGl0aWVzIG5vdCByZXBsaWNh dGVkIGNvcnJlY3RseScpOworCisjIFRoaXMgdGltZSBzdGFydCB3aXRoIGEgY29sdW1uIGxp c3QgY292ZXJpbmcgUkkgZm9yIGFsbCBwYXJ0aXRpb25zLCBidXQKKyMgdGhlbiB1cGRhdGUg dGhlIGNvbHVtbiBsaXN0IHRvIG5vdCBjb3ZlciBjb2x1bW4gImIiIChuZWVkZWQgYnkgdGhl CisjIHNlY29uZCBwYXJ0aXRpb24pCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYiAoYSBpbnQsIGIgaW50 KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2Jf MSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoMSwyLDMsNCw1KTsK KwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxU RVIgVEFCTEUgdGVzdF9wYXJ0X2JfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRl c3RfcGFydF9iXzFfcGtleTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYl8yIFBBUlRJ VElPTiBPRiB0ZXN0X3BhcnRfYiBGT1IgVkFMVUVTIElOICg2LDcsOCw5LDEwKTsKKwlBTFRF UiBUQUJMRSB0ZXN0X3BhcnRfYl8yIEFERCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFC TEUgdGVzdF9wYXJ0X2JfMiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFy dF9iXzJfcGtleTsKKworCS0tIGluaXRpYWwgZGF0YSwgb25lIHJvdyBpbiBlYWNoIHBhcnRp dGlvbnMKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYiBWQUxVRVMgKDEsIDEpOworCUlOU0VS VCBJTlRPIHRlc3RfcGFydF9iIFZBTFVFUyAoNiwgMik7CispKTsKKworIyBkbyB0aGUgc2Ft ZSB0aGluZyBvbiB0aGUgc3Vic2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYiAoYSBpbnQsIGIg aW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0 X2JfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoMSwyLDMsNCw1 KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJ QUxURVIgVEFCTEUgdGVzdF9wYXJ0X2JfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY IHRlc3RfcGFydF9iXzFfcGtleTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYl8yIFBB UlRJVElPTiBPRiB0ZXN0X3BhcnRfYiBGT1IgVkFMVUVTIElOICg2LDcsOCw5LDEwKTsKKwlB TFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8yIEFERCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIg VEFCTEUgdGVzdF9wYXJ0X2JfMiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3Rf cGFydF9iXzJfcGtleTsKKykpOworCisjIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIHJlcGxpY2F0 aW5nIGJvdGggY29sdW1ucywgd2hpY2ggaXMgc3VmZmljaWVudCBmb3IKKyMgYm90aCBwYXJ0 aXRpb25zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlD UkVBVEUgUFVCTElDQVRJT04gcHViNyBGT1IgVEFCTEUgdGVzdF9wYXJ0X2IgKGEsIGIpIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CispKTsKKworIyBhZGQg dGhlIHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdhaXQgZm9yIHN5bmMgdG8g Y29tcGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViNworKSk7CisK K3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0 ZXN0X3BhcnRfYiBWQUxVRVMgKDIsIDMpOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9iIFZB TFVFUyAoNywgNCk7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydF9iIE9SREVSIEJZIGEsIGIiKSwKKyAgIHFxKDF8 MQorMnwzCis2fDIKKzd8NCksCisgICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCByZXBs aWNhIGlkZW50aXRpZXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKworIyBURVNU OiBUaGlzIHRpbWUgc3RhcnQgd2l0aCBhIGNvbHVtbiBsaXN0IGNvdmVyaW5nIFJJIGZvciBh bGwgcGFydGl0aW9ucywKKyMgYnV0IHRoZW4gdXBkYXRlIFJJIGZvciBvbmUgb2YgdGhlIHBh cnRpdGlvbnMgdG8gbm90IGJlIGNvdmVyZWQgYnkgdGhlCisjIGNvbHVtbiBsaXN0IGFueW1v cmUuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNS RUFURSBUQUJMRSB0ZXN0X3BhcnRfYyAoYSBpbnQsIGIgaW50LCBjIGludCkgUEFSVElUSU9O IEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jXzEgUEFSVElUSU9O IE9GIHRlc3RfcGFydF9jIEZPUiBWQUxVRVMgSU4gKDEsMyk7CisJQUxURVIgVEFCTEUgdGVz dF9wYXJ0X2NfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFy dF9jXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfY18xX3BrZXk7 CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2NfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0 X2MgRk9SIFZBTFVFUyBJTiAoMiw0KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18yIEFE RCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMiBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9jXzJfcGtleTsKKworCS0tIGluaXRp YWwgZGF0YSwgb25lIHJvdyBmb3IgZWFjaCBwYXJ0aXRpb24KKwlJTlNFUlQgSU5UTyB0ZXN0 X3BhcnRfYyBWQUxVRVMgKDEsIDMsIDUpOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9jIFZB TFVFUyAoMiwgNCwgNik7CispKTsKKworIyBkbyB0aGUgc2FtZSB0aGluZyBvbiB0aGUgc3Vi c2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAor CUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYyAoYSBpbnQsIGIgaW50LCBjIGludCkgUEFSVElU SU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jXzEgUEFSVElU SU9OIE9GIHRlc3RfcGFydF9jIEZPUiBWQUxVRVMgSU4gKDEsMyk7CisJQUxURVIgVEFCTEUg dGVzdF9wYXJ0X2NfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3Rf cGFydF9jXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfY18xX3Br ZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2NfMiBQQVJUSVRJT04gT0YgdGVzdF9w YXJ0X2MgRk9SIFZBTFVFUyBJTiAoMiw0KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18y IEFERCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMiBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9jXzJfcGtleTsKKykpOworCisj IGNyZWF0ZSBhIHB1YmxpY2F0aW9uIHJlcGxpY2F0aW5nIGRhdGEgdGhyb3VnaCBwYXJ0aXRp b24gcm9vdCwgd2l0aCBhIGNvbHVtbgorIyBmaWx0ZXIgb24gdGhlIHJvb3QsIGFuZCB0aGVu IGFkZCB0aGUgcGFydGl0aW9ucyBvbmUgYnkgb25lIHdpdGggc2VwYXJhdGUKKyMgY29sdW1u IGxpc3RzIChidXQgdGhvc2UgYXJlIG5vdCBhcHBsaWVkKQorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjggRk9S IFRBQkxFIHRlc3RfcGFydF9jIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g ZmFsc2UpOworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjggQUREIFRBQkxFIHRlc3RfcGFydF9j XzEgKGEsYyk7CisJQUxURVIgUFVCTElDQVRJT04gcHViOCBBREQgVEFCTEUgdGVzdF9wYXJ0 X2NfMiAoYSxiKTsKKykpOworCisjIGFkZCB0aGUgcHVibGljYXRpb24gdG8gb3VyIHN1YnNj cmlwdGlvbiwgd2FpdCBmb3Igc3luYyB0byBjb21wbGV0ZQorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCURST1AgU1VCU0NSSVBUSU9OIHN1YjE7CisJ Q1JFQVRFIFNVQlNDUklQVElPTiBzdWIxIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0 cicgUFVCTElDQVRJT04gcHViODsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3N1YjEnKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2MgVkFMVUVTICgzLCA3LCA4KTsK KwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxVRVMgKDQsIDksIDEwKTsKKykpOworCisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9w YXJ0X2MgT1JERVIgQlkgYSwgYiIpLAorICAgcXEoMXx8NQorMnw0fAorM3x8OAorNHw5fCks CisgICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCByZXBsaWNhIGlkZW50aXRpZXMgbm90 IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKworIyBjcmVhdGUgYSBwdWJsaWNhdGlvbiBu b3QgcmVwbGljYXRpbmcgZGF0YSB0aHJvdWdoIHBhcnRpdGlvbiByb290LCB3aXRob3V0Cisj IGEgY29sdW1uIGxpc3Qgb24gdGhlIHJvb3QsIGFuZCB0aGVuIGFkZCB0aGUgcGFydGl0aW9u cyBvbmUgYnkgb25lIHdpdGgKKyMgc2VwYXJhdGUgY29sdW1uIGxpc3RzCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlEUk9QIFBVQkxJQ0FUSU9OIHB1 Yjg7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjggRk9SIFRBQkxFIHRlc3RfcGFydF9jIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworCUFMVEVSIFBVQkxJ Q0FUSU9OIHB1YjggQUREIFRBQkxFIHRlc3RfcGFydF9jXzEgKGEpOworCUFMVEVSIFBVQkxJ Q0FUSU9OIHB1YjggQUREIFRBQkxFIHRlc3RfcGFydF9jXzIgKGEsYik7CispKTsKKworIyBh ZGQgdGhlIHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdhaXQgZm9yIHN5bmMg dG8gY29tcGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBSRUZSRVNIIFBVQkxJQ0FUSU9OOworCVRS VU5DQVRFIHRlc3RfcGFydF9jOworKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5j KCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlUUlVOQ0FURSB0ZXN0X3BhcnRfYzsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3BhcnRfYyBWQUxVRVMgKDEsIDMsIDUpOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9jIFZB TFVFUyAoMiwgNCwgNik7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydF9jIE9SREVSIEJZIGEsIGIiKSwKKyAgIHFx KDF8fAorMnw0fCksCisgICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCByZXBsaWNhIGlk ZW50aXRpZXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKworIyBURVNUOiBTdGFy dCB3aXRoIGEgc2luZ2xlIHBhcnRpdGlvbiwgd2l0aCBSSSBjb21wYXRpYmxlIHdpdGggdGhl IGNvbHVtbgorIyBmaWx0ZXIsIGFuZCB0aGVuIGF0dGFjaCBhIHBhcnRpdGlvbiB3aXRoIGlu Y29tcGF0aWJsZSBSSS4KKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9kIChhIGludCwgYiBpbnQpIFBBUlRJ VElPTiBCWSBMSVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfZF8xIFBBUlRJ VElPTiBPRiB0ZXN0X3BhcnRfZCBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxF IHRlc3RfcGFydF9kXzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3BhcnRfZF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2RfMV9w a2V5OworCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2QgVkFMVUVTICgxLCAyKTsKKykpOwor CisjIGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyIChpbiBmYWN0LCBjcmVh dGUgYm90aCBwYXJ0aXRpb25zIHJpZ2h0CisjIGF3YXksIG5vIG5lZWQgdG8gZGVsYXkgdGhh dCkKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVB VEUgVEFCTEUgdGVzdF9wYXJ0X2QgKGEgaW50LCBiIGludCkgUEFSVElUSU9OIEJZIExJU1Qg KGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9kXzEgUEFSVElUSU9OIE9GIHRlc3Rf cGFydF9kIEZPUiBWQUxVRVMgSU4gKDEsMyk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2Rf MSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9kXzEgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfZF8xX3BrZXk7CisKKwlDUkVB VEUgVEFCTEUgdGVzdF9wYXJ0X2RfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2QgRk9SIFZB TFVFUyBJTiAoMiw0KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8yIEFERCBQUklNQVJZ IEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2RfMiBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHRlc3RfcGFydF9kXzJfcGtleTsKKykpOworCisjIGNyZWF0ZSBhIHB1 YmxpY2F0aW9uIHJlcGxpY2F0aW5nIGJvdGggY29sdW1ucywgd2hpY2ggaXMgc3VmZmljaWVu dCBmb3IKKyMgYm90aCBwYXJ0aXRpb25zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViOSBGT1IgVEFCTEUgdGVz dF9wYXJ0X2QgKGEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7 CispKTsKKworIyBhZGQgdGhlIHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdh aXQgZm9yIHN5bmMgdG8gY29tcGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJ T04gcHViOQorKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNj cmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfZCBWQUxVRVMgKDMsIDQpOworKSk7CisKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnRf ZCBPUkRFUiBCWSBhLCBiIiksCisgICBxcSgxfAorM3wpLAorICAgJ3BhcnRpdGlvbnMgd2l0 aCBkaWZmZXJlbnQgcmVwbGljYSBpZGVudGl0aWVzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3Rs eScpOworCisjIFRFU1Q6IFdpdGggYSB0YWJsZSBpbmNsdWRlZCBpbiBtdWx0aXBsZSBwdWJs aWNhdGlvbnMsIHdlIHNob3VsZCB1c2UgYQorIyB1bmlvbiBvZiB0aGUgY29sdW1uIGxpc3Rz LiBTbyB3aXRoIGNvbHVtbiBsaXN0cyAoYSxiKSBhbmQgKGEsYykgd2UKKyMgc2hvdWxkIHJl cGxpY2F0ZSAoYSxiLGMpLgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9taXhfMSAoYSBpbnQgUFJJTUFSWSBLRVks IGIgaW50LCBjIGludCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfMSBGT1IgVEFC TEUgdGVzdF9taXhfMSAoYSwgYik7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfMiBG T1IgVEFCTEUgdGVzdF9taXhfMSAoYSwgYyk7CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNF UlQgSU5UTyB0ZXN0X21peF8xIFZBTFVFUyAoMSwgMiwgMyk7CispKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0 X21peF8xIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50KTsKKwlBTFRFUiBTVUJT Q1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViX21peF8xLCBwdWJfbWl4XzI7Cisp KTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJ TlRPIHRlc3RfbWl4XzEgVkFMVUVTICg0LCA1LCA2KTsKKykpOworCiskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9taXhfMSBPUkRFUiBC WSBhIiksCisgICBxcSgxfDJ8MworNHw1fDYpLAorICAgJ2EgbWl4IG9mIHB1YmxpY2F0aW9u cyBzaG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1uIGxpc3QnKTsKKworCisjIFRFU1Q6IFdp dGggYSB0YWJsZSBpbmNsdWRlZCBpbiBtdWx0aXBsZSBwdWJsaWNhdGlvbnMsIHdlIHNob3Vs ZCB1c2UgYQorIyB1bmlvbiBvZiB0aGUgY29sdW1uIGxpc3RzLiBJZiBhbnkgb2YgdGhlIHB1 YmxpY2F0aW9ucyBpcyBGT1IgQUxMCisjIFRBQkxFUywgd2Ugc2hvdWxkIHJlcGxpY2F0ZSBh bGwgY29sdW1ucy4KKworIyBkcm9wIHVubmVjZXNzYXJ5IHRhYmxlcywgc28gYXMgbm90IHRv IGludGVyZmVyZSB3aXRoIHRoZSBGT1IgQUxMIFRBQkxFUworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJRFJPUCBUQUJMRSB0YWIxLCB0YWIyLCB0YWIz LCB0YWI0LCB0YWI1LCB0YWI2LCB0YWI3LCB0ZXN0X21peF8xLAorCQkJICAgdGVzdF9wYXJ0 LCB0ZXN0X3BhcnRfYSwgdGVzdF9wYXJ0X2IsIHRlc3RfcGFydF9jLCB0ZXN0X3BhcnRfZDsK KykpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlD UkVBVEUgVEFCTEUgdGVzdF9taXhfMiAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGlu dCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfMyBGT1IgVEFCTEUgdGVzdF9taXhf MiAoYSwgYik7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfNCBGT1IgQUxMIFRBQkxF UzsKKworCS0tIGluaXRpYWwgZGF0YQorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzIgVkFMVUVT ICgxLCAyLCAzKTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzIgKGEgaW50IFBSSU1BUlkgS0VZ LCBiIGludCwgYyBpbnQpOworCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNB VElPTiBwdWJfbWl4XzMsIHB1Yl9taXhfNDsKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBS RUZSRVNIIFBVQkxJQ0FUSU9OOworKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5j KCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0X21peF8yIFZBTFVFUyAoNCwgNSwgNik7 CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisK K2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBG Uk9NIHRlc3RfbWl4XzIiKSwKKyAgIHFxKDF8MnwzCis0fDV8NiksCisgICAnYSBtaXggb2Yg cHVibGljYXRpb25zIHNob3VsZCB1c2UgYSB1bmlvbiBvZiBjb2x1bW4gbGlzdCcpOworCisK KyMgVEVTVDogV2l0aCBhIHRhYmxlIGluY2x1ZGVkIGluIG11bHRpcGxlIHB1YmxpY2F0aW9u cywgd2Ugc2hvdWxkIHVzZSBhCisjIHVuaW9uIG9mIHRoZSBjb2x1bW4gbGlzdHMuIElmIGFu eSBvZiB0aGUgcHVibGljYXRpb25zIGlzIEZPUiBBTEwKKyMgVEFCTEVTIElOIFNDSEVNQSwg d2Ugc2hvdWxkIHJlcGxpY2F0ZSBhbGwgY29sdW1ucy4KKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzMgKGEg aW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpOworCUNSRUFURSBQVUJMSUNBVElPTiBw dWJfbWl4XzUgRk9SIFRBQkxFIHRlc3RfbWl4XzMgKGEsIGIpOworCUNSRUFURSBQVUJMSUNB VElPTiBwdWJfbWl4XzYgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1YmxpYzsKKworCS0t IGluaXRpYWwgZGF0YQorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzMgVkFMVUVTICgxLCAyLCAz KTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzMgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwg YyBpbnQpOworCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWJf bWl4XzUsIHB1Yl9taXhfNjsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygk bm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9taXhfMyBWQUxVRVMgKDQsIDUsIDYpOwor KSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitp cygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJP TSB0ZXN0X21peF8zIiksCisgICBxcSgxfDJ8MworNHw1fDYpLAorICAgJ2EgbWl4IG9mIHB1 YmxpY2F0aW9ucyBzaG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1uIGxpc3QnKTsKKworCisj IFRFU1Q6IENoZWNrIGhhbmRsaW5nIG9mIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IC0g aWYgYSBwYXJ0aXRpb24gaXMKKyMgcHVibGlzaGVkIHRocm91Z2ggcGFydGl0aW9uIHJvb3Qs IHdlIHNob3VsZCBvbmx5IGFwcGx5IHRoZSBjb2x1bW4gbGlzdAorIyBkZWZpbmVkIGZvciB0 aGUgd2hvbGUgdGFibGUgKG5vdCB0aGUgcGFydGl0aW9ucykgLSBib3RoIGR1cmluZyB0aGUg aW5pdGlhbAorIyBzeW5jIGFuZCB3aGVuIHJlcGxpY2F0aW5nIGNoYW5nZXMuIFRoaXMgaXMg d2hhdCB3ZSBkbyBmb3Igcm93IGZpbHRlcnMuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3QgKGEgaW50IFBS SU1BUlkgS0VZLCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JF QVRFIFRBQkxFIHRlc3Rfcm9vdF8xIFBBUlRJVElPTiBPRiB0ZXN0X3Jvb3QgRk9SIFZBTFVF UyBGUk9NICgxKSBUTyAoMTApOworCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3RfMiBQQVJUSVRJ T04gT0YgdGVzdF9yb290IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7CisKKwlDUkVB VEUgUFVCTElDQVRJT04gcHViX3Jvb3RfdHJ1ZSBGT1IgVEFCTEUgdGVzdF9yb290IChhKSBX SVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworCisJLS0gaW5pdGlh bCBkYXRhCisJSU5TRVJUIElOVE8gdGVzdF9yb290IFZBTFVFUyAoMSwgMiwgMyk7CisJSU5T RVJUIElOVE8gdGVzdF9yb290IFZBTFVFUyAoMTAsIDIwLCAzMCk7CispKTsKKworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0 ZXN0X3Jvb3QgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRSAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3Rfcm9vdF8xIFBBUlRJVElPTiBPRiB0 ZXN0X3Jvb3QgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCUNSRUFURSBUQUJMRSB0 ZXN0X3Jvb3RfMiBQQVJUSVRJT04gT0YgdGVzdF9yb290IEZPUiBWQUxVRVMgRlJPTSAoMTAp IFRPICgyMCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWJf cm9vdF90cnVlOworKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1 YnNjcmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cSgKKwlJTlNFUlQgSU5UTyB0ZXN0X3Jvb3QgVkFMVUVTICgyLCAzLCA0KTsKKwlJTlNFUlQg SU5UTyB0ZXN0X3Jvb3QgVkFMVUVTICgxMSwgMjEsIDMxKTsKKykpOworCiskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9yb290IE9SREVS IEJZIGEsIGIsIGMiKSwKKyAgIHFxKDF8fAorMnx8CisxMHx8CisxMXx8KSwKKyAgICdwdWJs aWNhdGlvbiB2aWEgcGFydGl0aW9uIHJvb3QgYXBwbGllcyBjb2x1bW4gbGlzdCcpOworCisK KyMgVEVTVDogTXVsdGlwbGUgcHVibGljYXRpb25zIHdoaWNoIHB1Ymxpc2ggc2NoZW1hIG9m IHBhcmVudCB0YWJsZSBhbmQKKyMgcGFydGl0aW9uLiBUaGUgcGFydGl0aW9uIGlzIHB1Ymxp c2hlZCB0aHJvdWdoIHR3byBwdWJsaWNhdGlvbnMsIG9uY2UKKyMgdGhyb3VnaCBhIHNjaGVt YSAoc28gbm8gY29sdW1uIGxpc3QpIGNvbnRhaW5pbmcgdGhlIHBhcmVudCwgYW5kIHRoZW4K KyMgYWxzbyBkaXJlY3RseSAod2l0aCBhIGNvbHVtbnMgbGlzdCkuIFRoZSBleHBlY3RlZCBv dXRjb21lIGlzIHRoZXJlIGlzCisjIG5vIGNvbHVtbiBsaXN0LgorCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlEUk9QIFBVQkxJQ0FUSU9OIHB1YjEs IHB1YjIsIHB1YjMsIHB1YjQsIHB1YjUsIHB1YjYsIHB1YjcsIHB1Yjg7CisKKwlDUkVBVEUg U0NIRU1BIHMxOworCUNSRUFURSBUQUJMRSBzMS50IChhIGludCwgYiBpbnQsIGMgaW50KSBQ QVJUSVRJT04gQlkgUkFOR0UgKGEpOworCUNSRUFURSBUQUJMRSB0XzEgUEFSVElUSU9OIE9G IHMxLnQgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCisJQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1YjEgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHMxOworCUNSRUFURSBQVUJMSUNB VElPTiBwdWIyIEZPUiBUQUJMRSB0XzEoYik7CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNF UlQgSU5UTyBzMS50IFZBTFVFUyAoMSwgMiwgMyk7CispKTsKKworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBTQ0hFTUEgczE7CisJQ1JF QVRFIFRBQkxFIHMxLnQgKGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5H RSAoYSk7CisJQ1JFQVRFIFRBQkxFIHRfMSBQQVJUSVRJT04gT0YgczEudCBGT1IgVkFMVUVT IEZST00gKDEpIFRPICgxMCk7CisKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVC TElDQVRJT04gcHViMSwgcHViMjsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3lu Yygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gczEudCBWQUxVRVMgKDQsIDUsIDYpOworKSk7 CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSBz MS50IE9SREVSIEJZIGEiKSwKKyAgIHFxKDF8MnwzCis0fDV8NiksCisgICAndHdvIHB1Ymxp Y2F0aW9ucywgcHVibGlzaGluZyB0aGUgc2FtZSByZWxhdGlvbicpOworCisjIE5vdyByZXN5 bmMgdGhlIHN1YmNyaXB0aW9uLCBidXQgd2l0aCBwdWJsaWNhdGlvbnMgaW4gdGhlIG9wcG9z aXRlIG9yZGVyLgorIyBUaGUgcmVzdWx0IHNob3VsZCBiZSB0aGUgc2FtZS4KKworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCVRSVU5DQVRFIHMxLnQ7 CisKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViMiwgcHVi MTsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVy KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5T RVJUIElOVE8gczEudCBWQUxVRVMgKDcsIDgsIDkpOworKSk7CisKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSBzMS50IE9SREVSIEJZIGEiKSwK KyAgIHFxKDd8OHw5KSwKKyAgICd0d28gcHVibGljYXRpb25zLCBwdWJsaXNoaW5nIHRoZSBz YW1lIHJlbGF0aW9uJyk7CisKKworIyBURVNUOiBPbmUgcHVibGljYXRpb24sIGNvbnRhaW5p bmcgYm90aCB0aGUgcGFyZW50IGFuZCBjaGlsZCByZWxhdGlvbnMuCisjIFRoZSBleHBlY3Rl ZCBvdXRjb21lIGlzIGxpc3QgImEiLCBiZWNhdXNlIHRoYXQncyB0aGUgY29sdW1uIGxpc3Qg ZGVmaW5lZAorIyBmb3IgdGhlIHRvcC1tb3N0IGFuY2VzdG9yIGFkZGVkIHRvIHRoZSBwdWJs aWNhdGlvbi4KKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJRFJPUCBTQ0hFTUEgczEgQ0FTQ0FERTsKKwlDUkVBVEUgVEFCTEUgdCAoYSBpbnQsIGIg aW50LCBjIGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8x IFBBUlRJVElPTiBPRiB0IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKQorCQkgICBQQVJU SVRJT04gQlkgUkFOR0UgKGEpOworCUNSRUFURSBUQUJMRSB0XzIgUEFSVElUSU9OIE9GIHRf MSBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCk7CisKKwlDUkVBVEUgUFVCTElDQVRJT04g cHViMyBGT1IgVEFCTEUgdF8xIChhKSwgdF8yCisJICBXSVRIIChQVUJMSVNIX1ZJQV9QQVJU SVRJT05fUk9PVCk7CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0IFZBTFVF UyAoMSwgMiwgMyk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCURST1AgU0NIRU1BIHMxIENBU0NBREU7CisJQ1JFQVRFIFRBQkxFIHQg KGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JFQVRF IFRBQkxFIHRfMSBQQVJUSVRJT04gT0YgdCBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCkK KwkJICAgUEFSVElUSU9OIEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8yIFBBUlRJ VElPTiBPRiB0XzEgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCisJQUxURVIgU1VC U0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjM7CispKTsKKword2FpdF9mb3Jf c3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHQgVkFMVUVTICg0 LCA1LCA2KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1 YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNF TEVDVCAqIEZST00gdCBPUkRFUiBCWSBhLCBiLCBjIiksCisgICBxcSgxfHwKKzR8fCksCisg ICAncHVibGljYXRpb24gY29udGFpbmluZyBib3RoIHBhcmVudCBhbmQgY2hpbGQgcmVsYXRp b24nKTsKKworCisjIFRFU1Q6IE9uZSBwdWJsaWNhdGlvbiwgY29udGFpbmluZyBib3RoIHRo ZSBwYXJlbnQgYW5kIGNoaWxkIHJlbGF0aW9ucy4KKyMgVGhlIGV4cGVjdGVkIG91dGNvbWUg aXMgbGlzdCAiYSIsIGJlY2F1c2UgdGhhdCdzIHRoZSBjb2x1bW4gbGlzdCBkZWZpbmVkCisj IGZvciB0aGUgdG9wLW1vc3QgYW5jZXN0b3IgYWRkZWQgdG8gdGhlIHB1YmxpY2F0aW9uLgor IyBOb3RlOiBUaGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmVjZWRpbmcgdGVzdCBpcyB0aGF0 IGluIHRoaXMgY2FzZSBib3RoCisjIHJlbGF0aW9ucyBoYXZlIGEgY29sdW1uIGxpc3QgZGVm aW5lZC4KKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ RFJPUCBUQUJMRSB0OworCUNSRUFURSBUQUJMRSB0IChhIGludCwgYiBpbnQsIGMgaW50KSBQ QVJUSVRJT04gQlkgUkFOR0UgKGEpOworCUNSRUFURSBUQUJMRSB0XzEgUEFSVElUSU9OIE9G IHQgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMTApCisJCSAgIFBBUlRJVElPTiBCWSBSQU5H RSAoYSk7CisJQ1JFQVRFIFRBQkxFIHRfMiBQQVJUSVRJT04gT0YgdF8xIEZPUiBWQUxVRVMg RlJPTSAoMSkgVE8gKDEwKTsKKworCUNSRUFURSBQVUJMSUNBVElPTiBwdWI0IEZPUiBUQUJM RSB0XzEgKGEpLCB0XzIgKGIpCisJICBXSVRIIChQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9P VCk7CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgMiwg Myk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCURST1AgVEFCTEUgdDsKKwlDUkVBVEUgVEFCTEUgdCAoYSBpbnQsIGIgaW50LCBjIGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8xIFBBUlRJVElP TiBPRiB0IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKQorCQkgICBQQVJUSVRJT04gQlkg UkFOR0UgKGEpOworCUNSRUFURSBUQUJMRSB0XzIgUEFSVElUSU9OIE9GIHRfMSBGT1IgVkFM VUVTIEZST00gKDEpIFRPICgxMCk7CisKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQg UFVCTElDQVRJT04gcHViNDsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygk bm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJSU5TRVJUIElOVE8gdCBWQUxVRVMgKDQsIDUsIDYpOworKSk7CisKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0IE9SREVS IEJZIGEsIGIsIGMiKSwKKyAgIHFxKDF8fAorNHx8KSwKKyAgICdwdWJsaWNhdGlvbiBjb250 YWluaW5nIGJvdGggcGFyZW50IGFuZCBjaGlsZCByZWxhdGlvbicpOworCisKKyRub2RlX3N1 YnNjcmliZXItPnN0b3AoJ2Zhc3QnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcp OworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzQuMQoK --------------5QuaS66ciNQwhkcuczqU8nQ3--