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 1nSUWm-0000wJ-2A for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Mar 2022 01:57:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nSUWk-0003VN-Tz for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Mar 2022 01:57:10 +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 1nSUWj-0003VD-GD for pgsql-hackers@lists.postgresql.org; Fri, 11 Mar 2022 01:57:10 +0000 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nSUWO-0006YN-9L for pgsql-hackers@postgresql.org; Fri, 11 Mar 2022 01:57:08 +0000 Received: by mail-ej1-x636.google.com with SMTP id qt6so16041127ejb.11 for ; Thu, 10 Mar 2022 17:56:47 -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 :from:to:cc:references:in-reply-to; bh=Hsir0dWvqEhnxIIDwR7rcGv5zQkrTK6YfgY6fekQdeg=; b=J2p2VmZYm442dYToqYQeV89o2e/XtiQmCDXPRypGe7PpoIqi8HTqTNv76iucu61UQY 8PlNh4vAWzPayGDE0oe958uMvxD0CBvJlvMTAajntBqYq4Osx9gTPSaHFqAlRsG3N3LB YkECV6LnUOkZLiQ9wKi4Q8xaP2CJAD+2MO9rJsnEqCvhOUr7dDeYHCeBqd9SPJfXz5Kb OvvKKVmHDeBnhxRd+7rJ9Bj3sDkzwb7MR9GWpnpGgpbJg/5NIvlJb8oWtC+0GYgbBicu y7CsbBlD417vS2IrOeX/QQ7Xne5w1N4buDJpe9o/ld1v16nyUX55U41dCXYMSoWt1MxN ZVBQ== 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:from:to:cc:references:in-reply-to; bh=Hsir0dWvqEhnxIIDwR7rcGv5zQkrTK6YfgY6fekQdeg=; b=V0GTpyf9WH10LngddmNDASyfyo2UzrdIqnMcSsh79TEwoMNY5Fr7mVMYhwoc95QjgN qQzbzg5LQqTf5mkpTbxXtzEL9nmw/tdO/ydgqAn7TUoTReArL66G+qnMMvax+JMjyyLS 4sW0ickSYC+cc6j5tX97t9DXi46ws+0TS9rjA1pAA4xO2mzqTgNb/A5STazdAU2wIfkK xP9L146/9P5k/1Emw4Ti1e/zT6IdOu3VOmXpMvtyhZUEYjSDLfaQxyUwMw+YarxCsWED zcM2f4qRmmJeqsZFQKCc6eq/gbY+aY/SMu6ByqA7/B3Gbjsz2tpsLEB5ayNw54tWiarq 2yyg== X-Gm-Message-State: AOAM5303E2QpJHuGUTb8KqjxlsvxeSoKBLV7XNgjQGqZY/Z88EcwzJJN G1blhROv1tYd7/qARGUYejF1SAXhDUI1pXboLvpQyRuzRC4UGiU+IPE4NqTxK+yNzQZ8hxMFQRz 4NbHAKn5vnRxZ6z1BStSadYKcazoF6E7IxAsq4lX+saFY552yjPXvNgDq/K4MgpltKN05+EeWyU 2C92CbQPpiCSDK5DonwDP2UCBtFP4O+OojS2KU X-Google-Smtp-Source: ABdhPJzISKauAVD5ohwoCJ80tNbBK6YUUFjrXs7hYDDwpwLCmNHhJFaEzxPxg5vTYbEBP1TeLM3lQw== X-Received: by 2002:a17:907:7e96:b0:6da:f7ee:4a25 with SMTP id qb22-20020a1709077e9600b006daf7ee4a25mr6750753ejc.436.1646963806114; Thu, 10 Mar 2022 17:56:46 -0800 (PST) Received: from [10.137.0.18] (ip-86-49-251-241.net.upcbroadband.cz. [86.49.251.241]) by smtp.gmail.com with ESMTPSA id z24-20020a170906815800b006dab4bd985dsm2322002ejw.107.2022.03.10.17.56.45 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 10 Mar 2022 17:56:45 -0800 (PST) Content-Type: multipart/mixed; boundary="------------0WXRq0m0p8phPFZqJANF4C10" Message-ID: <822a8e40-287c-59ff-0ea9-35eb759f4fe6@enterprisedb.com> Date: Fri, 11 Mar 2022 02:56:41 +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 From: Tomas Vondra 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> <78b8d385-57cb-9a3f-cfe5-9f300f15eced@enterprisedb.com> In-Reply-To: <78b8d385-57cb-9a3f-cfe5-9f300f15eced@enterprisedb.com> 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. --------------0WXRq0m0p8phPFZqJANF4C10 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 3/10/22 20:10, Tomas Vondra wrote: > > > On 3/10/22 19:17, Tomas Vondra wrote: >> 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 think the reason is pretty simple - pgoutput_row_filter_init is > broken. It assumes you can just do this > > rftuple = SearchSysCache2(PUBLICATIONRELMAP, > ObjectIdGetDatum(entry->publish_as_relid), > ObjectIdGetDatum(pub->oid)); > > if (HeapTupleIsValid(rftuple)) > { > /* Null indicates no filter. */ > rfdatum = SysCacheGetAttr(PUBLICATIONRELMAP, rftuple, > Anum_pg_publication_rel_prqual, > &pub_no_filter); > } > else > { > pub_no_filter = true; > } > > > and pub_no_filter=true means there's no filter at all. Which is > nonsense, because we're using publish_as_relid here - the publication > may not include this particular ancestor, in which case we need to just > ignore this publication. > > So yeah, this needs to be reworked. > I spent a bit of time looking at this, and I think a minor change in get_rel_sync_entry() fixes this - it's enough to ensure rel_publications only includes publications that actually include publish_as_relid. But this does not address tablesync.c :-( That still copies everything, because it decides to sync both rels (test_pub_part_1, test_pub_part_2), with it's row filter. On older releases this would fail, because we'd start two workers: 1) COPY public.test_part_rf_2 TO STDOUT 2) COPY (SELECT a, b, c FROM public.test_part_rf_1) TO STDOUT And that ends up inserting date from test_part_rf_2 twice. But now we end up doing this instead: 1) COPY (SELECT a, b, c FROM public.test_part_rf_1 WHERE (b < 10)) TO STDOUT 2) COPY (SELECT a, b, c FROM ONLY public.test_part_rf_2 WHERE (b > 10)) TO STDOUT Which no longer conflicts, because those subsets are mutually exclusive (due to how the filter is defined), so the sync succeeds. But I find this really weird - I think it's reasonable to expect the sync to produce the same result as if the data was inserted and replicated, and this just violates that. Shouldn't tablesync calculate a list of relations in a way that prevents such duplicate / overlapping syncs? In any case, this sync issue looks entirely unrelated to the column filtering patch. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------0WXRq0m0p8phPFZqJANF4C10 Content-Type: text/x-patch; charset=UTF-8; name="0001-fixup-publish_as_relid-20220311.patch" Content-Disposition: attachment; filename="0001-fixup-publish_as_relid-20220311.patch" Content-Transfer-Encoding: base64 RnJvbSAwNzI2YTQ2ZjA1MDk4MGRmMmViYmNhNDgwNzhiNGZkM2IwZDM3NGY4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogV2VkLCA5IE1hciAyMDIyIDE4OjEwOjU2ICswMTAwClN1YmplY3Q6IFtQ QVRDSCAxLzNdIGZpeHVwOiBwdWJsaXNoX2FzX3JlbGlkCgpNYWtlIHN1cmUgdG8gZGV0ZXJt aW5lIHRoZSB0b3AtbW9zdCBhbmNlc3RvciBsaXN0ZWQgaW4gYW55IHB1YmxpY2F0aW9uLgpP dGhlcndpc2Ugd2UgbWlnaHQgZW5kIHVwIHdpdGggZGlmZmVyZW50IHZhbHVlcyBkZXBlbmRp bmcgb24gdGhlIG9yZGVyCm9mIHB1YmxpY2F0aW9ucyAoYXMgbGlzdGVkIGluIHN1YnNjcmlw dGlvbikuCi0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQu YyB8IDMyICsrKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDMwIGluc2Vy dGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggZWE1N2EwNDc3ZjAuLmRiYWMyNjkwYjdmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAg LTE4MTUsMTEgKzE4MTUsMTcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAq ZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQlQdWJsaWNhdGlvbiAqcHViID0gbGZpcnN0 KGxjKTsKIAkJCWJvb2wJCXB1Ymxpc2ggPSBmYWxzZTsKIAorCQkJLyoKKwkJCSAqIFVuZGVy IHdoYXQgcmVsaWQgc2hvdWxkIHdlIHB1Ymxpc2ggY2hhbmdlcyBpbiB0aGlzIHB1YmxpY2F0 aW9uPworCQkJICogV2UnbGwgdXNlIHRoZSB0b3AtbW9zdCByZWxpZCBhY3Jvc3MgYWxsIHB1 YmxpY2F0aW9ucy4KKwkJCSAqLworCQkJT2lkCQkJcHViX3JlbGlkID0gcmVsaWQ7CisKIAkJ CWlmIChwdWItPmFsbHRhYmxlcykKIAkJCXsKIAkJCQlwdWJsaXNoID0gdHJ1ZTsKIAkJCQlp ZiAocHViLT5wdWJ2aWFyb290ICYmIGFtX3BhcnRpdGlvbikKLQkJCQkJcHVibGlzaF9hc19y ZWxpZCA9IGxsYXN0X29pZChnZXRfcGFydGl0aW9uX2FuY2VzdG9ycyhyZWxpZCkpOworCQkJ CQlwdWJfcmVsaWQgPSBsbGFzdF9vaWQoZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsaWQp KTsKIAkJCX0KIAogCQkJaWYgKCFwdWJsaXNoKQpAQCAtMTg0NCw3ICsxODUwLDcgQEAgZ2V0 X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24p CiAJCQkJCXsKIAkJCQkJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IHRydWU7CiAJCQkJCQlpZiAo cHViLT5wdWJ2aWFyb290KQotCQkJCQkJCXB1Ymxpc2hfYXNfcmVsaWQgPSBhbmNlc3RvcjsK KwkJCQkJCQlwdWJfcmVsaWQgPSBhbmNlc3RvcjsKIAkJCQkJfQogCQkJCX0KIApAQCAtMTg2 MiwxMiArMTg2OCwzNCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRh LCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCWlmIChwdWJsaXNoICYmCiAJCQkJKHJlbGtpbmQg IT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSB8fCBwdWItPnB1YnZpYXJvb3QpKQogCQkJ eworCQkJCUxpc3QgKmFuY2VzdG9yczsKKwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymlu c2VydCB8PSBwdWItPnB1YmFjdGlvbnMucHViaW5zZXJ0OwogCQkJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOwogCQkJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlOwog CQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5w dWJ0cnVuY2F0ZTsKIAogCQkJCXJlbF9wdWJsaWNhdGlvbnMgPSBsYXBwZW5kKHJlbF9wdWJs aWNhdGlvbnMsIHB1Yik7CisKKwkJCQkvKgorCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0 aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKKwkJCQkgKiBhY3Jvc3MgYWxs IHB1YmxpY2F0aW9ucy4gU28gd2UgZmV0Y2ggYWxsIGFuY2VzdG9ycyBvZiB0aGUKKwkJCQkg KiByZWxpZCBjYWxjdWxhdGVkIGZvciB0aGlzIHB1YmxpY2F0aW9uLCBhbmQgY2hlY2sgaWYg dGhlCisJCQkJICogYWxyZWFkeSBjYWxjdWxhdGVkIHZhbHVlIGlzIGluIHRoZSBsaXN0LiBJ ZiB5ZXMsIHdlIGNhbgorCQkJCSAqIGlnbm9yZSB0aGUgbmV3IHZhbHVlIChhcyBpdCdzIGEg Y2hpbGQpLiBPdGhlcndpc2UgdGhlIG5ldworCQkJCSAqIHZhbHVlIGlzIGFuIGFuY2VzdG9y LCBzbyB3ZSBrZWVwIGl0LgorCQkJCSAqLworCQkJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRp b25fYW5jZXN0b3JzKHB1Yl9yZWxpZCk7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBuZXcgcHVi X3JlbGlkIGlzIGEgY2hpbGQgb2YgdGhlIGN1cnJlbnQgcHVibGlzaF9hc19yZWxpZAorCQkJ CSAqIHZhbHVlLCBzbyB3ZSBjYW4gaWdub3JlIGl0LgorCQkJCSAqLworCQkJCWlmIChsaXN0 X21lbWJlcl9vaWQoYW5jZXN0b3JzLCBwdWJsaXNoX2FzX3JlbGlkKSkKKwkJCQkJY29udGlu dWU7CisKKwkJCQkvKiBUaGUgbmV3IHZhbHVlIGlzIGFuIGFuY2VzdG9yLCBzbyBsZXQncyBr ZWVwIGl0LiAqLworCQkJCXB1Ymxpc2hfYXNfcmVsaWQgPSBwdWJfcmVsaWQ7CiAJCQl9CiAJ CX0KIAotLSAKMi4zNC4xCgo= --------------0WXRq0m0p8phPFZqJANF4C10 Content-Type: text/x-patch; charset=UTF-8; name="0002-fixup-row-filter-publications-20220311.patch" Content-Disposition: attachment; filename="0002-fixup-row-filter-publications-20220311.patch" Content-Transfer-Encoding: base64 RnJvbSAwOWIzY2I1MzY4YjJmZDM0NDgzODRjOGNmODg2MDgwMWQ3MzI4NDc5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAxMSBNYXIgMjAyMiAwMjoyMzoyNSArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMi8zXSBmaXh1cDogcm93LWZpbHRlciBwdWJsaWNhdGlvbnMKCldoZW4g aW5pdGlhbGl6aW5nIHRoZSByb3cgZmlsdGVyLCBjb25zaWRlciBvbmx5IHB1YmxpY2F0aW9u cyB0aGF0CmFjdHVhbGx5IGluY2x1ZGUgdGhlIHJlbGF0aW9uIChwdWJsaXNoX2FzX3JlbGlk KS4gVGhlIHB1YmxpY2F0aW9ucyBtYXkKaW5jbHVkZSBkaWZmZXJlbnQgYW5jZXN0b3JzLCBp biB3aGljaCBjYXNlIHRoZSBmdW5jdGlvbiB3b3VsZCBnZXQKY29uZnVzZWQgYW5kIGNvbmNs dWRlIHRoZXJlJ3Mgbm8gcm93IGZpbHRlci4KLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jIHwgMTYgKysrKysrKysrKysrLS0tLQogMSBmaWxlIGNo YW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggZGJhYzI2OTBiN2Yu LmZhZjc1NTVmOTEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291 dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 L3Bnb3V0cHV0LmMKQEAgLTE4NzUsOCArMTg3NSw2IEBAIGdldF9yZWxfc3luY19lbnRyeShQ R091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlOwogCQkJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVu Y2F0ZTsKIAotCQkJCXJlbF9wdWJsaWNhdGlvbnMgPSBsYXBwZW5kKHJlbF9wdWJsaWNhdGlv bnMsIHB1Yik7Ci0KIAkJCQkvKgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hh bmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKIAkJCQkgKiBhY3Jvc3MgYWxsIHB1Ymxp Y2F0aW9ucy4gU28gd2UgZmV0Y2ggYWxsIGFuY2VzdG9ycyBvZiB0aGUKQEAgLTE4OTQsOCAr MTg5MiwxOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxh dGlvbiByZWxhdGlvbikKIAkJCQlpZiAobGlzdF9tZW1iZXJfb2lkKGFuY2VzdG9ycywgcHVi bGlzaF9hc19yZWxpZCkpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJLyogVGhlIG5ldyB2YWx1 ZSBpcyBhbiBhbmNlc3Rvciwgc28gbGV0J3Mga2VlcCBpdC4gKi8KLQkJCQlwdWJsaXNoX2Fz X3JlbGlkID0gcHViX3JlbGlkOworCQkJCS8qCisJCQkJICogSWYgdGhlIG5ldyB2YWx1ZSBp cyBhbiBhbmNlc3RvciwgZGlzY2FyZCB0aGUgbGlzdCBvZgorCQkJCSAqIHB1YmxpY2F0aW9u cyB0aHJvdWdoIHdoaWNoIHdlIHJlcGxpY2F0ZSBpdC4KKwkJCQkgKi8KKwkJCQlpZiAocHVi bGlzaF9hc19yZWxpZCAhPSBwdWJfcmVsaWQpCisJCQkJeworCQkJCQlyZWxfcHVibGljYXRp b25zID0gTklMOworCQkJCQlwdWJsaXNoX2FzX3JlbGlkID0gcHViX3JlbGlkOworCQkJCX0K KworCQkJCS8qIFRyYWNrIHRoZSBwdWJsaWNhdGlvbnMuICovCisJCQkJcmVsX3B1YmxpY2F0 aW9ucyA9IGxhcHBlbmQocmVsX3B1YmxpY2F0aW9ucywgcHViKTsKIAkJCX0KIAkJfQogCi0t IAoyLjM0LjEKCg== --------------0WXRq0m0p8phPFZqJANF4C10 Content-Type: text/x-patch; charset=UTF-8; name="0003-Allow-specifying-column-filters-for-logical-20220311.patch" Content-Disposition: attachment; filename*0="0003-Allow-specifying-column-filters-for-logical-20220311.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2NmQ0NWY2YTU4NjVjNjdkMjM3N2UyZGIyYWZkMjQ3Y2Y2ODQyZmRlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxMCBNYXIgMjAyMiAxNzozMTo1NyArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMy8zXSBBbGxvdyBzcGVjaWZ5aW5nIGNvbHVtbiBmaWx0ZXJzIGZvciBs 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 eCBmYWY3NTU1ZjkxMy4uZTUwYWY1MDE3ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl 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 cHVidmlhcm9vdCBiZWluZyBzZXQuCkBAIC0xOTIxLDYgKzIwNTQsOSBAQCBnZXRfcmVsX3N5 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 --------------0WXRq0m0p8phPFZqJANF4C10--