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 1nRF7w-0007Pp-FY for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Mar 2022 15:18:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nRF7v-0002e2-DV for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Mar 2022 15:18:23 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRF7u-0002dX-Hy for pgsql-hackers@lists.postgresql.org; Mon, 07 Mar 2022 15:18:23 +0000 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nRF7i-00027U-Kj for pgsql-hackers@postgresql.org; Mon, 07 Mar 2022 15:18:22 +0000 Received: by mail-wm1-x334.google.com with SMTP id k8-20020a05600c1c8800b003899c7ac55dso67156wms.1 for ; Mon, 07 Mar 2022 07:18:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to; bh=VIt1wzcclIdC56XpRmXEfEdeAUEkFa9wpQdaqN7FeRA=; b=EC5UuTSf834lSc228x6zAGGE+SHoik4bP2qExq/hg+jQICGYeHc06vWt43WfD1WXgc jknNpiP//1/ZmLABCNLF4Nl9Rt5u+0T7ZMRKPWWjNlulP1b8/oTBt0QWftDfRCr831l1 glEjYQj6/E97+hel4pQthksK802r3VPX4kF6Y7vE7iwVMEeI4WD+AamZv8aWX4eRxA0j vOSX7iOOY6okVo+0lltNgzV18X7GbO4KBUzL4QYPeuhpnZTjO+O9a167wPC0a5Eq9Nvx op/3syqFv0DChficc7wQfXHtBh/ruYqP5pRF4XXviOgCh0sdaXjpxIcmUIRz/+DLsc0N YeJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=VIt1wzcclIdC56XpRmXEfEdeAUEkFa9wpQdaqN7FeRA=; b=b13T0Zsk9RI/NP5WkRM2BrT1bFw+PAiqEwuAWIv0Db3sdZEszuQcyn7TJOrsJGTuAy gKDGBBmBOf0nh0QivmRBZ9PZj32zXQMLfbG890zt7yIIWsKj1PY8Bm9mXFqhVmmkFhGW 5nYyejZeO2tYf3lhC8aso/bQbS8eKRpwHOFKYE4I+nUm2oHsS/mHeTAXnHP+1pZ1YHZe DBQ+dewgYfDHjszptZQUzQSAqV94/C/djTIvhoUp/djkaMgxeIiGMCXzmdAATw5N+Xpe h5f27n9Zon/d8VAN53x973O2Y5R2qE5t/pOio//WFtcoE+6jptejC/bvnosv4E0vfaCD +/zw== X-Gm-Message-State: AOAM532BZQt6drEA5UKzbF3eWvGtKbmZtACeLxZ8SB7A+x5GerS4c1SA 9fEpRhV5CoSXZnP0KrmnHDPlRhC3JHXGbKL9RBqopvhMmnjJ8LAzvN7Gwg6falYQ0iKCve5ruaw RyJzpgSIDecafIl0fFMUcwL6Wlj8B6wLMXbvL+sfulGsmxHf1jT5lHrIPFcplhbs1+tTnCNdYYU 9X7W+1LYeypDtGWI+gQG2acODqFdT1D8MrdyFa X-Google-Smtp-Source: ABdhPJyiGVGegpCyz9OXI+n+GHSOoecMJp9jAl4npDFVio0VgmKLvNfjVr6lN6+iHPxI4kv71ljdhA== X-Received: by 2002:a7b:c253:0:b0:389:bbf4:f431 with SMTP id b19-20020a7bc253000000b00389bbf4f431mr2105534wmj.65.1646666287599; Mon, 07 Mar 2022 07:18:07 -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 p26-20020a1c741a000000b00389ab9a53c8sm2346387wmc.36.2022.03.07.07.18.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 07 Mar 2022 07:18:06 -0800 (PST) Content-Type: multipart/mixed; boundary="------------cw9CLCexZFz310YMWl40JM5p" Message-ID: Date: Mon, 7 Mar 2022 16:18:04 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: Column Filtering in Logical Replication Content-Language: en-US To: Amit Kapila Cc: Peter Eisentraut , Alvaro Herrera , Justin Pryzby , "houzj.fnst@fujitsu.com" , Rahila Syed , Peter Smith , pgsql-hackers , shiy.fnst@fujitsu.com References: <202201120041.p24wvsfcsope@alvherre.pgsql> From: Tomas Vondra In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------cw9CLCexZFz310YMWl40JM5p Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 3/4/22 11:42, Amit Kapila wrote: > On Wed, Mar 2, 2022 at 5:43 PM Tomas Vondra > wrote: >> >> Attached is an updated patch, addressing most of the issues reported so >> far. There are various minor tweaks, but the main changes are: > ... >> >> 3) checks of column filter vs. publish_via_partition_root and replica >> identity, following the same logic as the row-filter patch (hopefully, >> it touches the same places, using the same logic, ...) >> >> That means - with "publish_via_partition_root=false" it's not allowed to >> specify column filters on partitioned tables, only for leaf partitions. >> >> And we check column filter vs. replica identity when adding tables to >> publications, or whenever we change the replica identity. >> > > This handling is different from row filter work and I see problems > with it. By different, I assume you mean I tried to enfoce the rules in ALTER PUBLICATION and other ALTER commands, instead of when modifying the data? OK, I reworked this to do the same thing as the row filtering patch. > The column list validation w.r.t primary key (default replica > identity) is missing. The handling of column list vs. partitions has > multiple problems: (a) In attach partition, the patch is just checking > ancestors for RI validation but what if the table being attached has > further subpartitions; (b) I think the current locking also seems to > have problems because it is quite possible that while it validates the > ancestors here, concurrently someone changes the column list. I think > it won't be enough to just change the locking mode because with the > current patch strategy during attach, we will be first taking locks > for child tables of current partition and then parent tables which can > pose deadlock hazards. > > The columns list validation also needs to be done when we change > publication action. > I believe those issues should be solved by adopting the same approach as the row-filtering patch, right? > There could be more similar problems which I might have missed. For > some of these (except for concurrency issues), my colleague Shi-San > has done testing and the results are below [1]. I feel we should do RI > vs. column list handling similar to row filter work (at one place) to > avoid all such hazards and possibly similar handling at various > places, there is a good chance that we will miss some places or make > mistakes that are not easy to catch. I agree if both patches use the same approach, that would reduce the risk of missing the handling in one place, etc. > Do let me know if you think it makes sense for me or one of the > people who work on row filter patch to try this (make the handling of > RI checks similar to row filter work) and then we can see if that > turns out to be a simple way to deal with all these problems? > If someone who is more familiar with the design conclusions from the row filtering patch, that would be immensely useful. Especially now, when I reworked it to the same approach as the row filtering patch. > Some other miscellaneous comments: > ============================= > * > In get_rel_sync_entry(), the handling for partitioned tables doesn't > seem to be correct. It can publish a different set of columns based on > the order of publications specified in the subscription. > > For example: > ---- > create table parent (a int, b int, c int) partition by range (a); > create table test_part1 (like parent); > alter table parent attach partition test_part1 for values from (1) to (10); > > create publication pub for table parent(a) with (PUBLISH_VIA_PARTITION_ROOT); > create publication pub2 for table test_part1(b); > --- > > Now, depending on the order of publications in the list while defining > subscription, the column list will change > ---- > create subscription sub connection 'port=10000 dbname=postgres' > publication pub, pub2; > > For the above, column list will be: (a) > > create subscription sub connection 'port=10000 dbname=postgres' > publication pub2, pub; > > For this one, the column list will be: (a, b) > ---- > > To avoid this, the column list should be computed based on the final > publish_as_relid as we are doing for the row filter. > Hmm, yeah. That seems like a genuine problem - it should not depend on the order of publications in the subscription, I guess. But is it an issue in the patch? Isn't that a pre-existing issue? AFAICS the problem is that we initialize publish_as_relid=relid before the loop over publications, and then just update it. So the first iteration starts with relid, but the second iteration ends with whatever value is set by the first iteration (e.g. the root). So with the example you posted, we start with publish_as_relid = relid = test_part1 but then if the first publication is pubviaroot=true, we update it to parent. And in the second iteration, we fail to find the column filter, because "parent" (publish_as_relid) is not part of the pub2. If we do it in the other order, we leave the publish_as_relid value as is (and find the filter), and then update it in the second iteration (and find the column filter too). Now, this can be resolved by re-calculating the publish_as_relid from scratch in each iteration (start with relid, then maybe update it). But that's just half the story - the issue is there even without column filters. Consider this example: 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 pub1 for table t(a) with (PUBLISH_VIA_PARTITION_ROOT); create publication pub2 for table t_1(a) with (PUBLISH_VIA_PARTITION_ROOT); Now, is you change subscribe to "pub1, pub2" and "pub2, pub1", we'll end up with different publish_as_relid values (t or t_1). Which seems like the same ambiguity issue. > * > Fetching column filter info in tablesync.c is quite expensive. It > seems to be using four round-trips to get the complete info whereas > for row-filter we use just one round trip. I think we should try to > get both row filter and column filter info in just one round trip. > Maybe, but I really don't think this is an issue. The sync happens only very rarely, and the rest of the sync (starting workers, copying data) is likely way more expensive than this. > [1] - > Test-1: > The patch doesn't check when the primary key changes. > > e.g. > -- publisher -- > create table tbl(a int primary key, b int); > create publication pub for table tbl(a); > alter table tbl drop CONSTRAINT tbl_pkey; > alter table tbl add primary key (b); > insert into tbl values (1,1); > > -- subscriber -- > create table tbl(a int, b int); > create subscription sub connection 'port=5432 dbname=postgres' publication pub; > update tbl set b=1 where a=1; > alter table tbl add primary key (b); > > -- publisher -- > delete from tbl; > > Column "b" is part of replica identity, but it is filtered, which > caused an error on the subscriber side. > > ERROR: publisher did not send replica identity column expected by the > logical replication target relation "public.tbl" > CONTEXT: processing remote data during "DELETE" for replication > target relation "public.tbl" in transaction 724 at 2022-03-04 > 11:46:16.330892+08 > > Test-2: Partitioned table RI w.r.t column list. > 2.1 > Using "create table ... partition of". > > e.g. > -- publisher -- > create table parent (a int, b int) partition by range (a); > create publication pub for table parent(a) > with(publish_via_partition_root=true); > create table child partition of parent (primary key (a,b)) default; > insert into parent values (1,1); > > -- subscriber -- > create table parent (a int, b int) partition by range (a); > create table child partition of parent default; > create subscription sub connection 'port=5432 dbname=postgres' > publication pub; update child set b=1 where a=1; > alter table parent add primary key (a,b); > > -- publisher -- > delete from parent; > > Column "b" is part of replica identity in the child table, but it is > filtered, which caused an error on the subscriber side. > > ERROR: publisher did not send replica identity column expected by the > logical replication target relation "public.parent" > CONTEXT: processing remote data during "DELETE" for replication > target relation "public.parent" in transaction 723 at 2022-03-04 > 15:15:39.776949+08 > > 2.2 > It is likely that a table to be attached also has a partition. > > e.g. > -- publisher -- > create table t1 (a int, b int) partition by range (a); > create publication pub for table t1(b) with(publish_via_partition_root=true); > create table t2 (a int, b int) partition by range (a); > create table t3 (a int primary key, b int); > alter table t2 attach partition t3 default; > alter table t1 attach partition t2 default; > insert into t1 values (1,1); > > -- subscriber -- > create table t1 (a int, b int) partition by range (a); > create table t2 (a int, b int) partition by range (a); > create table t3 (a int, b int); > alter table t2 attach partition t3 default; > alter table t1 attach partition t2 default; > create subscription sub connection 'port=5432 dbname=postgres' publication pub; > update t1 set a=1 where b=1; > alter table t1 add primary key (a); > > -- publisher -- > delete from t1; > > Column "a" is part of replica identity in table t3, but t3's ancestor > t1 is published with column "a" filtered, which caused an error on the > subscriber side. > > ERROR: publisher did not send replica identity column expected by the > logical replication target relation "public.t1" > CONTEXT: processing remote data during "DELETE" for replication > target relation "public.t1" in transaction 726 at 2022-03-04 > 14:40:29.297392+08 > > 3. > Using "alter publication pub set(publish='...'); " > > e.g. > -- publisher -- > create table tbl(a int primary key, b int); create publication pub for > table tbl(b) with(publish='insert'); insert into tbl values (1,1); > > -- subscriber -- > create table tbl(a int, b int); > create subscription sub connection 'port=5432 dbname=postgres' publication pub; > > -- publisher -- > alter publication pub set(publish='insert,update'); > > -- subscriber -- > update tbl set a=1 where b=1; > alter table tbl add primary key (b); > > -- publisher -- > update tbl set a=2 where a=1; > > Updates are replicated, and the column "a" is part of replica > identity, but it is filtered, which caused an error on the subscriber > side. > > ERROR: publisher did not send replica identity column expected by the > logical replication target relation "public.tbl" > CONTEXT: processing remote data during "UPDATE" for replication > target relation "public.tbl" in transaction 723 at 2022-03-04 > 11:56:33.905843+08 > AFAICS these issues should be resolved by the adoption of the row-filter approach (i.e. it should fail the same way as for row filter). regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------cw9CLCexZFz310YMWl40JM5p Content-Type: text/x-patch; charset=UTF-8; name="0001-Verify-changing-WHERE-condition-for-a-publi-20220307.patch" Content-Disposition: attachment; filename*0="0001-Verify-changing-WHERE-condition-for-a-publi-20220307.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzNjI3MjMxODhhMzZiN2UwMTQ3ZGY3NDA0ZmU2NGFhMmU0ZjQ4YmZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogU2F0LCAyNiBGZWIgMjAyMiAxNzozMzowOSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggMS8zXSBWZXJpZnkgY2hhbmdpbmcgV0hFUkUgY29uZGl0aW9uIGZvciBhIHB1Ymxp Y2F0aW9uCgpDb21taXQgNTJlNGYwY2Q0NyBhZGRlZCBzdXBwb3J0IGZvciByb3cgZmlsdGVy cyBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uLAppbmNsdWRpbmcgcmVncmVzc2lvbiB0ZXN0cyB3 aXRoIG11bHRpcGxlIEFMVEVSIFBVQkxJQ0FUSU9OIGNvbW1hbmRzLAptb2RpZnlpbmcgdGhl IHJvdyBmaWx0ZXIuIEJ1dCB0aGUgdGVzdHMgbmV2ZXIgdmVyaWZpZWQgdGhhdCB0aGUgcm93 CmZpbHRlciB3YXMgYWN0dWFsbHkgdXBkYXRlZCBpbiB0aGUgY2F0YWxvZy4gVGhpcyBhZGRz IGEgY291cGxlIFxkIGFuZApcZFJwIGNvbW1hbmRzLCB0byB2ZXJpZnkgdGhlIGNhdGFsb2cg d2FzIHVwZGF0ZWQuCi0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9z cWwvcHVibGljYXRpb24uc3FsICAgICAgfCAgOCArKysKIDIgZmlsZXMgY2hhbmdlZCwgNzQg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQKaW5kZXggNGUxOTFjMTIwYWMuLjZkMTY2MDBhYWVhIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtNDE3LDE1ICs0MTcsODEgQEAg TElORSAxOiAuLi5JQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDEg V0hFUkUgKGIgPCAnMicgQ08uLi4KIERFVEFJTDogIFVzZXItZGVmaW5lZCBjb2xsYXRpb25z IGFyZSBub3QgYWxsb3dlZC4KIC0tIG9rIC0gTlVMTElGIGlzIGFsbG93ZWQKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKE5V TExJRigxLDIpID0gYSk7CitcZCsgdGVzdHB1Yl9yZl90YmwxCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKKyBDb2x1bW4g fCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAg fCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAg ICAgfCAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAKKyBiICAgICAgfCB0 ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAg ICAgICAgICAgICAgfCAKK1B1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1YjUiIFdIRVJFIChO VUxMSUYoMSwgMikgPSBhKQorCitcZFJwKyB0ZXN0cHViNQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCitUYWJsZXM6Cisg ICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiIFdIRVJFIChOVUxMSUYoMSwgMikgPSBhKQor CiAtLSBvayAtIGJ1aWx0LWluIG9wZXJhdG9ycyBhcmUgYWxsb3dlZAogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoYSBJUyBO VUxMKTsKK1xkKyB0ZXN0cHViX3JmX3RibDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRhYmxlICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgorIENvbHVtbiB8ICBUeXBlICAg fCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgfCBTdG9yYWdlICB8IFN0YXRzIHRh cmdldCB8IERlc2NyaXB0aW9uIAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLQorIGEgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAg ICAgfCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAorIGIgICAgICB8IHRleHQgICAgfCAg ICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8ICAgICAgICAgICAg ICB8IAorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViNSIgV0hFUkUgKGEgSVMgTlVMTCkK KworXGRScCsgdGVzdHB1YjUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorVGFibGVzOgorICAgICJwdWJsaWMudGVzdHB1 Yl9yZl90YmwxIiBXSEVSRSAoYSBJUyBOVUxMKQorCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFICgoYSA+IDUpIElTIEZBTFNF KTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3Ri bDEgV0hFUkUgKGEgSVMgRElTVElOQ1QgRlJPTSA1KTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKChhLCBhICsgMSkgPCAo MiwgMykpOwogLS0gb2sgLSBidWlsdC1pbiB0eXBlIGNvZXJjaW9ucyBiZXR3ZWVuIHR3byBi aW5hcnkgY29tcGF0aWJsZSBkYXRhdHlwZXMgYXJlIGFsbG93ZWQKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGI6OnZhcmNo YXIgPCAnMicpOworXGQrIHRlc3RwdWJfcmZfdGJsMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCisgQ29sdW1uIHwgIFR5 cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgU3Rh dHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwg ICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwgCisgYiAgICAgIHwgdGV4dCAg ICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAg ICAgICAgIHwgCitQdWJsaWNhdGlvbnM6CisgICAgInRlc3RwdWI1IiBXSEVSRSAoKChiKTo6 Y2hhcmFjdGVyIHZhcnlpbmcpOjp0ZXh0IDwgJzInOjp0ZXh0KQorCitcZFJwKyB0ZXN0cHVi NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCitUYWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiIFdIRVJF ICgoKGIpOjpjaGFyYWN0ZXIgdmFyeWluZyk6OnRleHQgPCAnMic6OnRleHQpCisKIC0tIG9r IC0gaW1tdXRhYmxlIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZAogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsNCBXSEVSRSAobGVu Z3RoKGcpIDwgNik7CitcZCsgdGVzdHB1Yl9yZl90YmwxCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKKyBDb2x1bW4gfCAg VHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBT dGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAg fCAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAKKyBiICAgICAgfCB0ZXh0 ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAg ICAgICAgICAgfCAKKworXGRScCsgdGVzdHB1YjUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorVGFibGVzOgorICAgICJw dWJsaWMudGVzdHB1Yl9yZl90Ymw0IiBXSEVSRSAobGVuZ3RoKGcpIDwgNikKKwogLS0gZmFp bCAtIHVzZXItZGVmaW5lZCB0eXBlcyBhcmUgbm90IGFsbG93ZWQKIENSRUFURSBUWVBFIHJm X2J1Z19zdGF0dXMgQVMgRU5VTSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOwogQ1JFQVRF IFRBQkxFIHJmX2J1ZyAoaWQgc2VyaWFsLCBkZXNjcmlwdGlvbiB0ZXh0LCBzdGF0dXMgcmZf YnVnX3N0YXR1cyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNh dGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXgg NTQ1N2M1NmIzM2YuLmMxMzVhNjAxYTMwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGlj YXRpb24uc3FsCkBAIC0yMDYsMTUgKzIwNiwyMyBAQCBDUkVBVEUgQ09MTEFUSU9OIHVzZXJf Y29sbGF0aW9uIEZST00gIkMiOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgQUREIFRB QkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoYiA8ICcyJyBDT0xMQVRFIHVzZXJfY29sbGF0 aW9uKTsKIC0tIG9rIC0gTlVMTElGIGlzIGFsbG93ZWQKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKE5VTExJRigxLDIpID0g YSk7CitcZCsgdGVzdHB1Yl9yZl90YmwxCitcZFJwKyB0ZXN0cHViNQogLS0gb2sgLSBidWls dC1pbiBvcGVyYXRvcnMgYXJlIGFsbG93ZWQKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1 IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDEgV0hFUkUgKGEgSVMgTlVMTCk7CitcZCsgdGVz dHB1Yl9yZl90YmwxCitcZFJwKyB0ZXN0cHViNQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSBXSEVSRSAoKGEgPiA1KSBJUyBGQUxTRSk7 CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90Ymwx IFdIRVJFIChhIElTIERJU1RJTkNUIEZST00gNSk7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFICgoYSwgYSArIDEpIDwgKDIs IDMpKTsKIC0tIG9rIC0gYnVpbHQtaW4gdHlwZSBjb2VyY2lvbnMgYmV0d2VlbiB0d28gYmlu YXJ5IGNvbXBhdGlibGUgZGF0YXR5cGVzIGFyZSBhbGxvd2VkCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwxIFdIRVJFIChiOjp2YXJjaGFy IDwgJzInKTsKK1xkKyB0ZXN0cHViX3JmX3RibDEKK1xkUnArIHRlc3RwdWI1CiAtLSBvayAt IGltbXV0YWJsZSBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGFsbG93ZWQKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDQgV0hFUkUgKGxlbmd0 aChnKSA8IDYpOworXGQrIHRlc3RwdWJfcmZfdGJsMQorXGRScCsgdGVzdHB1YjUKIC0tIGZh aWwgLSB1c2VyLWRlZmluZWQgdHlwZXMgYXJlIG5vdCBhbGxvd2VkCiBDUkVBVEUgVFlQRSBy Zl9idWdfc3RhdHVzIEFTIEVOVU0gKCduZXcnLCAnb3BlbicsICdjbG9zZWQnKTsKIENSRUFU RSBUQUJMRSByZl9idWcgKGlkIHNlcmlhbCwgZGVzY3JpcHRpb24gdGV4dCwgc3RhdHVzIHJm X2J1Z19zdGF0dXMpOwotLSAKMi4zNC4xCgo= --------------cw9CLCexZFz310YMWl40JM5p Content-Type: text/x-patch; charset=UTF-8; name="0002-Test-publication-row-filters-in-pg_dump-tes-20220307.patch" Content-Disposition: attachment; filename*0="0002-Test-publication-row-filters-in-pg_dump-tes-20220307.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmZDk1Y2U5ZmZkZjQyMWViYzllY2QwMmM1NDFjNWQyZjBjNDNjZDk3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAxIE1hciAyMDIyIDE1OjI1OjU2ICswMTAwClN1Ympl Y3Q6IFtQQVRDSCAyLzNdIFRlc3QgcHVibGljYXRpb24gcm93IGZpbHRlcnMgaW4gcGdfZHVt cCB0ZXN0cwoKQ29tbWl0IDUyZTRmMGNkNDcgYWRkZWQgc3VwcG9ydCBmb3Igcm93IGZpbHRl cnMgd2hlbiByZXBsaWNhdGluZyB0YWJsZXMsCmJ1dCB0aGUgY29tbWl0IGFkZGVkIG5vIHBn X2R1bXAgdGVzdHMgZm9yIHRoaXMgZmVhdHVyZS4gU28gYWRkIGF0IGxlYXN0CmEgc2ltcGxl IHRlc3QuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgfCA2ICsrKy0t LQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9iaW4v cGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IDNlNTVmZjI2ZjgyLi5hZThjODZhNmU4 OCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTI0MTcsMTIgKzI0MTcsMTIg QEAgbXkgJXRlc3RzID0gKAogCQl9LAogCX0sCiAKLQknQUxURVIgUFVCTElDQVRJT04gcHVi MSBBREQgVEFCTEUgdGVzdF9zZWNvbmRfdGFibGUnID0+IHsKKwknQUxURVIgUFVCTElDQVRJ T04gcHViMSBBREQgVEFCTEUgdGVzdF9zZWNvbmRfdGFibGUgV0hFUkUgKGNvbDEgPSAxKScg PT4gewogCQljcmVhdGVfb3JkZXIgPT4gNTIsCiAJCWNyZWF0ZV9zcWwgPT4KLQkJICAnQUxU RVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2Vjb25kX3Rh YmxlOycsCisJCSAgJ0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIGR1bXBfdGVz dC50ZXN0X3NlY29uZF90YWJsZSBXSEVSRSAoY29sMSA9IDEpOycsCiAJCXJlZ2V4cCA9PiBx ci9eCi0JCQlcUUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIE9OTFkgZHVtcF90 ZXN0LnRlc3Rfc2Vjb25kX3RhYmxlO1xFCisJCQlcUUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjEg QUREIFRBQkxFIE9OTFkgZHVtcF90ZXN0LnRlc3Rfc2Vjb25kX3RhYmxlIFdIRVJFICgoY29s MSA9IDEpKTtcRQogCQkJL3htLAogCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9w b3N0X2RhdGEgPT4gMSwgfSwKIAkJdW5saWtlID0+IHsgZXhjbHVkZV9kdW1wX3Rlc3Rfc2No ZW1hID0+IDEsIH0sCi0tIAoyLjM0LjEKCg== --------------cw9CLCexZFz310YMWl40JM5p Content-Type: text/x-patch; charset=UTF-8; name="0003-Allow-specifying-column-filters-for-logical-20220307.patch" Content-Disposition: attachment; filename*0="0003-Allow-specifying-column-filters-for-logical-20220307.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5YzlkOTA0YzcyMWQ0ZDg5ZWE0NzVlYTk1OWYzZGM5NmYxNmZhNDhlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogV2VkLCAyMyBGZWIgMjAyMiAyMToxNToxOCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggMy8zXSBBbGxvdyBzcGVjaWZ5aW5nIGNvbHVtbiBmaWx0ZXJzIGZvciBsb2dpY2Fs IHJlcGxpY2F0aW9uCgpUaGlzIGFsbG93cyBzcGVjaWZ5aW5nIGFuIG9wdGlvbmFsIGNvbHVt biBsaXN0IHdoZW4gYWRkaW5nIGEgdGFibGUgdG8KbG9naWNhbCByZXBsaWNhdGlvbi4gQ29s dW1ucyBub3QgaW5jbHVkZWQgb24gdGhpcyBsaXN0IGFyZSBub3Qgc2VudCB0bwp0aGUgc3Vi c2NyaWJlci4gVGhlIGZpbHRlciBpcyBzcGVjaWZpZWQgYXMgYSBsaXN0IG9mIGNvbHVtbnMg YWZ0ZXIgdGhlCnRhYmxlIG5hbWUsIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLgoKRm9yIFVQ REFURS9ERUxFVEUgcHVibGljYXRpb25zLCB0aGUgY29sdW1uIGZpbHRlciBuZWVkcyB0byBj b3ZlciBhbGwKUkVQTElDQSBJREVOVElUWSBjb2x1bW5zLiBGb3IgSU5TRVJUIHB1YmxpY2F0 aW9ucywgdGhlIGNvbHVtbiBsaXN0IGlzCmFyYml0cmFyeSBhbmQgbWF5IG9taXQgc29tZSBS RVBMSUNBIElERU5USVRZIGNvbHVtbnMuIEZ1cnRoZXJtb3JlLCBpZgp0aGUgdGFibGUgdXNl cyBSRVBMSUNBIElERU5USVRZIEZVTEwsIGNvbHVtbiBmaWx0ZXIgaXMgbm90IGFsbG93ZWQu CgpUaGUgY29sdW1uIGZpbHRlciBjYW4gY29udGFpbiBvbmx5IHNpbXBsZSBjb2x1bW4gcmVm ZXJlbmNlcy4gQ29tcGxleApleHByZXNzaW9ucywgZnVuY3Rpb24gY2FsbHMgZXRjLiBhcmUg bm90IGFsbG93ZWQuIFRoaXMgcmVzdHJpY3Rpb24gY291bGQKYmUgcmVsYXhlZCBpbiB0aGUg ZnV0dXJlLgoKRHVyaW5nIHRoZSBpbml0aWFsIHRhYmxlIHN5bmNocm9uaXphdGlvbiwgb25s eSBjb2x1bW5zIHNwZWNpZmllZCBpbiB0aGUKY29sdW1uIGZpbHRlciBhcmUgY29waWVkIHRv IHRoZSBzdWJzY3JpYmVyLiBJZiB0aGUgc3Vic2NyaXB0aW9uIGhhcwpzZXZlcmFsIHB1Ymxp Y2F0aW9ucywgY29udGFpbmluZyB0aGUgc2FtZSB0YWJsZSB3aXRoIGRpZmZlcmVudCBjb2x1 bW4KZmlsdGVycywgY29sdW1ucyBzcGVjaWZpZWQgaW4gYW55IG9mIHRoZSBmaWx0ZXJzIHdp bGwgYmUgY29waWVkLiBUaGlzCm1lYW5zIGFsbCBjb2x1bW5zIGFyZSByZXBsaWNhdGVkIGlm IHRoZSB0YWJsZSBoYXMgbm8gY29sdW1uIGZpbHRlciBhdAphbGwgKHdoaWNoIGlzIHRyZWF0 ZWQgYXMgY29sdW1uIGZpbHRlciB3aXRoIGFsbCBjb2x1bW5zKSwgb2Ygd2hlbiBvZiB0aGUK cHVibGljYXRpb25zIGlzIGRlZmluZWQgYXMgRk9SIEFMTCBUQUJMRVMgKHBvc3NpYmx5IElO IFNDSEVNQSBmb3IgdGhlCnNjaGVtYSBvZiB0aGUgdGFibGUpLgoKRm9yIHBhcnRpdGlvbmVk IHRhYmxlcywgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgZGV0ZXJtaW5lcyB3aGV0aGVy CnRoZSByb3cgZmlsdGVyIGZvciB0aGUgcm9vdCBvciBsZWFmIHJlbGF0aW9uIHdpbGwgYmUg dXNlZC4gSWYgdGhlCnBhcmFtZXRlciBpcyAnZmFsc2UnICh0aGUgZGVmYXVsdCksIHRoZSBm aWx0ZXIgZGVmaW5lZCBmb3IgdGhlIGxlYWYKcmVsYXRpb24gaXMgdXNlZC4gT3RoZXJ3aXNl LCB0aGUgY29sdW1uIGZpbHRlciBmb3IgdGhlIHJvb3QgcGFydGl0aW9uCndpbGwgYmUgdXNl ZC4KClBzcWwgY29tbWFuZHMgXGRScCsgYW5kIFxkIDx0YWJsZS1uYW1lPiBub3cgZGlzcGxh eSBhbnkgY29sdW1uIGZpbHRlcnMuCgpBdXRob3I6IFJhaGlsYSBTeWVkIDxyYWhpbGFzeWVk OTBAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDJMMjh2 ZGRCX05GZFJWcHV5UkJKRUJXano0QlN5VEI9X2VrdE5SSDhOSjFqZjk1Z0BtYWlsLmdtYWls LmNvbQotLS0KIGRvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sICAgICAgICAgICAgICAgICAg fCAgMTMgKwogZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwgICAgICAgICAgICAgICAgICB8 ICAgNCArLQogZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sICAgICB8 ICAyMyArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbCAgICB8 ICAxNyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICB8 IDI2MCArKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jICAg ICAgfCAzNjIgKysrKysrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAg ICAgICAgICAgIHwgIDM2ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYyAgICAgIHwgIDE5ICstCiBzcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYyAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYyAgICAg ICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICAgICAg ICAgICAgICB8ICA2MCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90 by5jICAgICB8ICA1NSArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJs ZXN5bmMuYyB8IDI3MSArKysrKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1 dC9wZ291dHB1dC5jIHwgMTIzICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2Fj aGUuYyAgICAgICAgICB8ICAzMiArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAg ICAgICAgICAgICAgIHwgIDQ3ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs ICAgICAgICAgICAgfCAgNjAgKysKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAg ICAgICAgICAgICAgfCAgNDAgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRp b24uaCAgICAgICAgfCAgMTQgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bl9yZWwuaCAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuaCAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAg ICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90 by5oICAgICAgfCAgIDYgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRp b24ub3V0ICAgfCAzNzUgKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNh dGlvbi5zcWwgICAgICAgIHwgMjkwICsrKysrKysKIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAyOV9jb2x1bW5fbGlzdC5wbCAgfCA4MzYgKysrKysrKysrKysrKysrKysrKysKIDI3IGZp bGVzIGNoYW5nZWQsIDI4NzIgaW5zZXJ0aW9ucygrKSwgODEgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI5X2NvbHVtbl9saXN0 LnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgYi9kb2Mvc3Jj L3NnbWwvY2F0YWxvZ3Muc2dtbAppbmRleCA4Mzk4N2E5OTA0NS4uMmI2MWY0MmI3MWQgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9jYXRhbG9ncy5zZ21sCkBAIC02MjYzLDYgKzYyNjMsMTkgQEAgU0NSQU0tU0hBLTI1NiQ8 cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVw bGFjZWFibGU+JmwKICAgICAgICBSZWZlcmVuY2UgdG8gc2NoZW1hCiAgICAgICA8L3BhcmE+ PC9lbnRyeT4KICAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xl PSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+ CisgICAgICAgPHN0cnVjdGZpZWxkPnByYXR0cnM8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQy dmVjdG9yPC90eXBlPgorICAgICAgIChyZWZlcmVuY2VzIDxsaW5rIGxpbmtlbmQ9ImNhdGFs b2ctcGctYXR0cmlidXRlIj48c3RydWN0bmFtZT5wZ19hdHRyaWJ1dGU8L3N0cnVjdG5hbWU+ PC9saW5rPi48c3RydWN0ZmllbGQ+YXR0bnVtPC9zdHJ1Y3RmaWVsZD4pCisgICAgICA8L3Bh cmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGlzIGFuIGFycmF5IG9mIHZhbHVlcyB0 aGF0IGluZGljYXRlcyB3aGljaCB0YWJsZSBjb2x1bW5zIGFyZQorICAgICAgIHBhcnQgb2Yg dGhlIHB1YmxpY2F0aW9uLiAgRm9yIGV4YW1wbGUgYSB2YWx1ZSBvZiA8bGl0ZXJhbD4xIDM8 L2xpdGVyYWw+CisgICAgICAgd291bGQgbWVhbiB0aGF0IHRoZSBmaXJzdCBhbmQgdGhlIHRo aXJkIHRhYmxlIGNvbHVtbnMgYXJlIHB1Ymxpc2hlZC4KKyAgICAgICBBIG51bGwgdmFsdWUg aW5kaWNhdGVzIHRoYXQgYWxsIGNvbHVtbnMgYXJlIHB1Ymxpc2hlZC4KKyAgICAgIDwvcGFy YT48L2VudHJ5PgorICAgICA8L3Jvdz4KICAgICA8L3Rib2R5PgogICAgPC90Z3JvdXA+CiAg IDwvdGFibGU+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCmluZGV4IGM1MWM0MjU0YTcwLi40OTY1OTMyMDFi OSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKKysrIGIvZG9jL3Ny Yy9zZ21sL3Byb3RvY29sLnNnbWwKQEAgLTcwMDUsNyArNzAwNSw5IEBAIFJlbGF0aW9uCiA8 L2xpc3RpdGVtPgogPC92YXJsaXN0ZW50cnk+CiA8L3ZhcmlhYmxlbGlzdD4KLSAgICAgICAg TmV4dCwgdGhlIGZvbGxvd2luZyBtZXNzYWdlIHBhcnQgYXBwZWFycyBmb3IgZWFjaCBjb2x1 bW4gKGV4Y2VwdCBnZW5lcmF0ZWQgY29sdW1ucyk6CisgICAgICAgIE5leHQsIHRoZSBmb2xs b3dpbmcgbWVzc2FnZSBwYXJ0IGFwcGVhcnMgZm9yIGVhY2ggY29sdW1uIChleGNlcHQKKyAg ICAgICAgZ2VuZXJhdGVkIGNvbHVtbnMgYW5kIG90aGVyIGNvbHVtbnMgdGhhdCBkb24ndCBh cHBlYXIgaW4gdGhlIGNvbHVtbgorICAgICAgICBmaWx0ZXIgbGlzdCwgZm9yIHRhYmxlcyB0 aGF0IGhhdmUgb25lKToKIDx2YXJpYWJsZWxpc3Q+CiA8dmFybGlzdGVudHJ5PgogPHRlcm0+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwKaW5kZXggMzJiNzVm NmM3OGUuLmFhNjgyN2M5NzdiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVy X3B1YmxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNh dGlvbi5zZ21sCkBAIC0yNSwxMiArMjUsMTMgQEAgQUxURVIgUFVCTElDQVRJT04gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBBREQgPHJlcGxh Y2UKIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u YW1lPC9yZXBsYWNlYWJsZT4gU0VUIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5w dWJsaWNhdGlvbl9vYmplY3Q8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCiBBTFRFUiBQVUJMSUNB VElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+ IERST1AgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX29iamVj dDwvcmVwbGFjZWFibGU+IFssIC4uLl0KIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gU0VUICggPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX3BhcmFtZXRlcjwvcmVwbGFjZWFi bGU+IFs9IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj52YWx1ZTwvcmVwbGFjZWFi bGU+XSBbLCAuLi4gXSApCitBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IEFMVEVSIFRBQkxFIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gU0VUIENPTFVN TlMgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJs ZT4gWywgLi4uXSApIHwgQUxMIH0KIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gT1dORVIgVE8geyA8cmVwbGFj ZWFibGU+bmV3X293bmVyPC9yZXBsYWNlYWJsZT4gfCBDVVJSRU5UX1JPTEUgfCBDVVJSRU5U X1VTRVIgfCBTRVNTSU9OX1VTRVIgfQogQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHJlcGxh Y2VhYmxlPm5ld19uYW1lPC9yZXBsYWNlYWJsZT4KIAogPHBocmFzZT53aGVyZSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJs ZT4gaXMgb25lIG9mOjwvcGhyYXNlPgogCi0gICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBb IFdIRVJFICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3Jl cGxhY2VhYmxlPiApIF0gWywgLi4uIF0KKyAgICBUQUJMRSBbIE9OTFkgXSA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFsg KCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2Vh YmxlPiBbLCAuLi4gXSApIF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdIFssIC4uLiBdCiAgICAgQUxMIFRB QkxFUyBJTiBTQ0hFTUEgeyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2NoZW1h X25hbWU8L3JlcGxhY2VhYmxlPiB8IENVUlJFTlRfU0NIRU1BIH0gWywgLi4uIF0KIDwvc3lu b3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KQEAgLTY0LDYgKzY1LDEyIEBAIEFMVEVSIFBV QkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNl YWJsZT4gUkVOQU1FIFRPIDxyCiAgICBjb21tYW5kIHJldGFpbiB0aGVpciBwcmV2aW91cyBz ZXR0aW5ncy4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgVGhlIDxsaXRlcmFsPkFMVEVS IFRBQkxFIC4uLiBTRVQgQ09MVU1OUzwvbGl0ZXJhbD4gdmFyaWFudCBhbGxvd3MgY2hhbmdp bmcKKyAgIHRoZSBzZXQgb2YgY29sdW1ucyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgcHVi bGljYXRpb24uICBJZiBhIGNvbHVtbiBsaXN0CisgICBpcyBzcGVjaWZpZWQsIGl0IG11c3Qg aW5jbHVkZSB0aGUgcmVwbGljYSBpZGVudGl0eSBjb2x1bW5zLgorICA8L3BhcmE+CisKICAg PHBhcmE+CiAgICBUaGUgcmVtYWluaW5nIHZhcmlhbnRzIGNoYW5nZSB0aGUgb3duZXIgYW5k IHRoZSBuYW1lIG9mIHRoZSBwdWJsaWNhdGlvbi4KICAgPC9wYXJhPgpAQCAtMTEyLDYgKzEx OSwxMCBAQCBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFNRSBUTyA8cgogICAgICAgc3BlY2lmaWVkLCB0 aGUgdGFibGUgYW5kIGFsbCBpdHMgZGVzY2VuZGFudCB0YWJsZXMgKGlmIGFueSkgYXJlCiAg ICAgICBhZmZlY3RlZC4gIE9wdGlvbmFsbHksIDxsaXRlcmFsPio8L2xpdGVyYWw+IGNhbiBi ZSBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHRhYmxlCiAgICAgICBuYW1lIHRvIGV4cGxpY2l0bHkg aW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50IHRhYmxlcyBhcmUgaW5jbHVkZWQuCisKKyAgICAg IE9wdGlvbmFsbHksIGEgY29sdW1uIGxpc3QgY2FuIGJlIHNwZWNpZmllZC4gIFNlZSA8eHJl ZgorICAgICAgbGlua2VuZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9uIi8+IGZvciBkZXRhaWxz LgorCiAgICAgICBJZiB0aGUgb3B0aW9uYWwgPGxpdGVyYWw+V0hFUkU8L2xpdGVyYWw+IGNs YXVzZSBpcyBzcGVjaWZpZWQsIHJvd3MgZm9yCiAgICAgICB3aGljaCB0aGUgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPgogICAgICAg ZXZhbHVhdGVzIHRvIGZhbHNlIG9yIG51bGwgd2lsbCBub3QgYmUgcHVibGlzaGVkLiBOb3Rl IHRoYXQgcGFyZW50aGVzZXMKQEAgLTE3Miw5ICsxODMsMTUgQEAgQUxURVIgUFVCTElDQVRJ T04gbm9pbnNlcnQgU0VUIChwdWJsaXNoID0gJ3VwZGF0ZSwgZGVsZXRlJyk7CiAgIDwvcGFy YT4KIAogICA8cGFyYT4KLSAgIEFkZCBzb21lIHRhYmxlcyB0byB0aGUgcHVibGljYXRpb246 CisgICBBZGQgdGFibGVzIHRvIHRoZSBwdWJsaWNhdGlvbjoKKzxwcm9ncmFtbGlzdGluZz4K K0FMVEVSIFBVQkxJQ0FUSU9OIG15cHVibGljYXRpb24gQUREIFRBQkxFIHVzZXJzICh1c2Vy X2lkLCBmaXJzdG5hbWUpLCBkZXBhcnRtZW50czsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJh PgorCisgIDxwYXJhPgorICAgQ2hhbmdlIHRoZSBzZXQgb2YgY29sdW1ucyBwdWJsaXNoZWQg Zm9yIGEgdGFibGU6CiA8cHJvZ3JhbWxpc3Rpbmc+Ci1BTFRFUiBQVUJMSUNBVElPTiBteXB1 YmxpY2F0aW9uIEFERCBUQUJMRSB1c2VycywgZGVwYXJ0bWVudHM7CitBTFRFUiBQVUJMSUNB VElPTiBteXB1YmxpY2F0aW9uIEFMVEVSIFRBQkxFIHVzZXJzIFNFVCBDT0xVTU5TICh1c2Vy X2lkLCBmaXJzdG5hbWUsIGxhc3RuYW1lKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgog CiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGlj YXRpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwK aW5kZXggNDk3OWI5YjY0NmQuLmZiMmQwMTMzOTNiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYv Y3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKQEAgLTI4LDcgKzI4LDcgQEAgQ1JFQVRFIFBVQkxJ Q0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJs ZT4KIAogPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVi bGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwvcGhyYXNlPgogCi0g ICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxl X25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbIFdIRVJFICggPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiApIF0gWywgLi4uIF0KKyAg ICBUQUJMRSBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVf bmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApIF0gWyBXSEVSRSAo IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJs ZT4gKSBdIFssIC4uLiBdCiAgICAgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgeyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+c2NoZW1hX25hbWU8L3JlcGxhY2VhYmxlPiB8IENVUlJF TlRfU0NIRU1BIH0gWywgLi4uIF0KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4K QEAgLTg2LDYgKzg2LDEzIEBAIENSRUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+CiAgICAgICA8bGl0ZXJhbD5UUlVO Q0FURTwvbGl0ZXJhbD4gY29tbWFuZHMuCiAgICAgIDwvcGFyYT4KIAorICAgICA8cGFyYT4K KyAgICAgIFdoZW4gYSBjb2x1bW4gbGlzdCBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIG5hbWVk IGNvbHVtbnMgYXJlIHJlcGxpY2F0ZWQuCisgICAgICBJZiBubyBjb2x1bW4gbGlzdCBpcyBz cGVjaWZpZWQsIGFsbCBjb2x1bW5zIG9mIHRoZSB0YWJsZSBhcmUgcmVwbGljYXRlZAorICAg ICAgdGhyb3VnaCB0aGlzIHB1YmxpY2F0aW9uLCBpbmNsdWRpbmcgYW55IGNvbHVtbnMgYWRk ZWQgbGF0ZXIuICBJZiBhIGNvbHVtbgorICAgICAgbGlzdCBpcyBzcGVjaWZpZWQsIGl0IG11 c3QgaW5jbHVkZSB0aGUgcmVwbGljYSBpZGVudGl0eSBjb2x1bW5zLgorICAgICA8L3BhcmE+ CisKICAgICAgPHBhcmE+CiAgICAgICBPbmx5IHBlcnNpc3RlbnQgYmFzZSB0YWJsZXMgYW5k IHBhcnRpdGlvbmVkIHRhYmxlcyBjYW4gYmUgcGFydCBvZiBhCiAgICAgICBwdWJsaWNhdGlv bi4gIFRlbXBvcmFyeSB0YWJsZXMsIHVubG9nZ2VkIHRhYmxlcywgZm9yZWlnbiB0YWJsZXMs CkBAIC0zMjcsNiArMzM0LDE0IEBAIENSRUFURSBQVUJMSUNBVElPTiBwcm9kdWN0aW9uX3B1 YmxpY2F0aW9uIEZPUiBUQUJMRSB1c2VycywgZGVwYXJ0bWVudHMsIEFMTCBUQUJMCiAgICA8 c3RydWN0bmFtZT5zYWxlczwvc3RydWN0bmFtZT46CiA8cHJvZ3JhbWxpc3Rpbmc+CiBDUkVB VEUgUFVCTElDQVRJT04gc2FsZXNfcHVibGljYXRpb24gRk9SIEFMTCBUQUJMRVMgSU4gU0NI RU1BIG1hcmtldGluZywgc2FsZXM7Cis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICA8 cGFyYT4KKyAgIENyZWF0ZSBhIHB1YmxpY2F0aW9uIHRoYXQgcHVibGlzaGVzIGFsbCBjaGFu Z2VzIGZvciB0YWJsZSA8c3RydWN0bmFtZT51c2Vyczwvc3RydWN0bmFtZT4sCisgICBidXQg cmVwbGljYXRlcyBvbmx5IGNvbHVtbnMgPHN0cnVjdG5hbWU+dXNlcl9pZDwvc3RydWN0bmFt ZT4gYW5kCisgICA8c3RydWN0bmFtZT5maXJzdG5hbWU8L3N0cnVjdG5hbWU+OgorPHByb2dy YW1saXN0aW5nPgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHVzZXJzX2ZpbHRlcmVkIEZPUiBUQUJM RSB1c2VycyAodXNlcl9pZCwgZmlyc3RuYW1lKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJh PgogIDwvcmVmc2VjdDE+CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdf cHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpp bmRleCAyNTk5OGZiYjM5Yi4uNGRhYjk2MjY1ZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmMKQEAgLTQ1LDYgKzQ1LDkgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwu aCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCitzdGF0aWMgdm9pZCBwdWJsaWNh dGlvbl90cmFuc2xhdGVfY29sdW1ucyhSZWxhdGlvbiB0YXJnZXRyZWwsIExpc3QgKmNvbHVt bnMsCisJCQkJCQkJCQkJICBpbnQgKm5hdHRzLCBBdHRyTnVtYmVyICoqYXR0cnMpOworCiAv KgogICogQ2hlY2sgaWYgcmVsYXRpb24gY2FuIGJlIGluIGdpdmVuIHB1YmxpY2F0aW9uIGFu ZCB0aHJvd3MgYXBwcm9wcmlhdGUKICAqIGVycm9yIGlmIG5vdC4KQEAgLTMyOCw2ICszMzEs OSBAQCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJl bEluZm8gKnByaSwKIAlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQodGFyZ2V0cmVs KTsKIAlPaWQJCQlwdWJyZWxvaWQ7CiAJUHVibGljYXRpb24gKnB1YiA9IEdldFB1YmxpY2F0 aW9uKHB1YmlkKTsKKwlBdHRyTnVtYmVyICphdHRhcnJheTsKKwlpbnQJCQluYXR0cyA9IDA7 CisJaW50CQkJaTsKIAlPYmplY3RBZGRyZXNzIG15c2VsZiwKIAkJCQlyZWZlcmVuY2VkOwog CUxpc3QJICAgKnJlbGlkcyA9IE5JTDsKQEAgLTM1NSw2ICszNjEsMTQgQEAgcHVibGljYXRp b25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmksCiAK IAljaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24odGFyZ2V0cmVsKTsKIAorCS8qCisJ ICogVHJhbnNsYXRlIGNvbHVtbiBuYW1lcyB0byBhdHRudW1zIGFuZCBjaGVjayB0aGUgY29s dW1uIGxpc3QgaXMgdmFsaWQuCisJICogV2UgYWxzbyBkZWNvbnN0cnVjdCB0aGUgYml0bWFw IGludG8gYW4gYXJyYXkgb2YgYXR0bnVtcywgZm9yIHN0b3JpbmcKKwkgKiBpbiB0aGUgY2F0 YWxvZy4KKwkgKi8KKwlwdWJsaWNhdGlvbl90cmFuc2xhdGVfY29sdW1ucyhwcmktPnJlbGF0 aW9uLCBwcmktPmNvbHVtbnMsCisJCQkJCQkJCSAgJm5hdHRzLCAmYXR0YXJyYXkpOworCiAJ LyogRm9ybSBhIHR1cGxlLiAqLwogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMp KTsKIAltZW1zZXQobnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKQEAgLTM2Nyw2ICsz ODEsMTcgQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRp b25SZWxJbmZvICpwcmksCiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3BycmVs aWQgLSAxXSA9CiAJCU9iamVjdElkR2V0RGF0dW0ocmVsaWQpOwogCisJLyogQWRkIGNvbHVt biBmaWx0ZXIsIGlmIGF2YWlsYWJsZSAqLworCWlmIChwcmktPmNvbHVtbnMpCisJeworCQlp bnQydmVjdG9yICpwcmF0dHJzOworCisJCXByYXR0cnMgPSBidWlsZGludDJ2ZWN0b3IoYXR0 YXJyYXksIG5hdHRzKTsKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0 cnMgLSAxXSA9IFBvaW50ZXJHZXREYXR1bShwcmF0dHJzKTsKKwl9CisJZWxzZQorCQludWxs c1tBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzIC0gMV0gPSB0cnVlOworCiAJLyog QWRkIHF1YWxpZmljYXRpb25zLCBpZiBhdmFpbGFibGUgKi8KIAlpZiAocHJpLT53aGVyZUNs YXVzZSAhPSBOVUxMKQogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFs IC0gMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKG5vZGVUb1N0cmluZyhwcmktPndoZXJlQ2xh dXNlKSk7CkBAIC0zODIsNiArNDA3LDE0IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihP aWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCS8qIFJlZ2lzdGVyIGRlcGVu ZGVuY2llcyBhcyBuZWVkZWQgKi8KIAlPYmplY3RBZGRyZXNzU2V0KG15c2VsZiwgUHVibGlj YXRpb25SZWxSZWxhdGlvbklkLCBwdWJyZWxvaWQpOwogCisJLyogQWRkIGRlcGVuZGVuY3kg b24gdGhlIGNvbHVtbnMsIGlmIGFueSBhcmUgbGlzdGVkICovCisJZm9yIChpID0gMDsgaSA8 IG5hdHRzOyBpKyspCisJeworCQlPYmplY3RBZGRyZXNzU3ViU2V0KHJlZmVyZW5jZWQsIFJl bGF0aW9uUmVsYXRpb25JZCwgcmVsaWQsIGF0dGFycmF5W2ldKTsKKwkJcmVjb3JkRGVwZW5k ZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCX0KKwlw ZnJlZShhdHRhcnJheSk7CisKIAkvKiBBZGQgZGVwZW5kZW5jeSBvbiB0aGUgcHVibGljYXRp b24gKi8KIAlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQsIFB1YmxpY2F0aW9uUmVsYXRp b25JZCwgcHViaWQpOwogCXJlY29yZERlcGVuZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNl ZCwgREVQRU5ERU5DWV9BVVRPKTsKQEAgLTQxNSw2ICs0NDgsMTU1IEBAIHB1YmxpY2F0aW9u X2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCXJl dHVybiBteXNlbGY7CiB9CiAKKy8qCisgKiBVcGRhdGUgdGhlIGNvbHVtbiBsaXN0IGZvciBh IHJlbGF0aW9uIGluIGEgcHVibGljYXRpb24uCisgKi8KK3ZvaWQKK3B1YmxpY2F0aW9uX3Nl dF90YWJsZV9jb2x1bW5zKFJlbGF0aW9uIHB1YnJlbCwgSGVhcFR1cGxlIHB1YnJlbHR1cCwK KwkJCQkJCQkgIFJlbGF0aW9uIHRhcmdldHJlbCwgTGlzdCAqY29sdW1ucykKK3sKKwlBdHRy TnVtYmVyICphdHRhcnJheTsKKwlIZWFwVHVwbGUJY29weXR1cDsKKwlpbnQJCQluYXR0czsK Kwlib29sCQludWxsc1tOYXR0c19wZ19wdWJsaWNhdGlvbl9yZWxdOworCWJvb2wJCXJlcGxh Y2VzW05hdHRzX3BnX3B1YmxpY2F0aW9uX3JlbF07CisJRGF0dW0JCXZhbHVlc1tOYXR0c19w Z19wdWJsaWNhdGlvbl9yZWxdOworCWludAkJCWk7CisKKwltZW1zZXQodmFsdWVzLCAwLCBz aXplb2YodmFsdWVzKSk7CisJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51bGxzKSk7 CisJbWVtc2V0KHJlcGxhY2VzLCBmYWxzZSwgc2l6ZW9mKHJlcGxhY2VzKSk7CisKKwlyZXBs YWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzIC0gMV0gPSB0cnVlOworCisJ ZGVsZXRlRGVwZW5kZW5jeVJlY29yZHNGb3JDbGFzcyhQdWJsaWNhdGlvblJlbGF0aW9uSWQs CisJCQkJCQkJCQkoKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QocHVicmVs dHVwKSktPm9pZCwKKwkJCQkJCQkJCVJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCURF UEVOREVOQ1lfQVVUTyk7CisKKwlpZiAoY29sdW1ucyA9PSBOVUxMKQorCXsKKwkJbnVsbHNb QW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycyAtIDFdID0gdHJ1ZTsKKwl9CisJZWxz ZQorCXsKKwkJT2JqZWN0QWRkcmVzcyAJbXlzZWxmLAorCQkJCQkJcmVmZXJlbmNlZDsKKwkJ aW50MnZlY3RvcgkgICAqcHJhdHRyczsKKwkJRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwJcHVi cmVsOworCisJCXB1YmxpY2F0aW9uX3RyYW5zbGF0ZV9jb2x1bW5zKHRhcmdldHJlbCwgY29s dW1ucywgJm5hdHRzLCAmYXR0YXJyYXkpOworCisJCS8qIFhYWCAicHViIiBpcyBsZWFrZWQg aGVyZSAqLworCisJCXByYXR0cnMgPSBidWlsZGludDJ2ZWN0b3IoYXR0YXJyYXksIG5hdHRz KTsKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMgLSAxXSA9IFBv aW50ZXJHZXREYXR1bShwcmF0dHJzKTsKKworCQkvKiBBZGQgZGVwZW5kZW5jaWVzIG9uIHRo ZSBuZXcgbGlzdCBvZiBjb2x1bW5zICovCisJCXB1YnJlbCA9IChGb3JtX3BnX3B1YmxpY2F0 aW9uX3JlbCkgR0VUU1RSVUNUKHB1YnJlbHR1cCk7CisJCU9iamVjdEFkZHJlc3NTZXQobXlz ZWxmLCBQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQsIHB1YnJlbC0+b2lkKTsKKworCQlmb3Ig KGkgPSAwOyBpIDwgbmF0dHM7IGkrKykKKwkJeworCQkJT2JqZWN0QWRkcmVzc1N1YlNldChy ZWZlcmVuY2VkLCBSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCVJlbGF0aW9uR2V0UmVs aWQodGFyZ2V0cmVsKSwgYXR0YXJyYXlbaV0pOworCQkJcmVjb3JkRGVwZW5kZW5jeU9uKCZt eXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCQl9CisJfQorCisJY29w eXR1cCA9IGhlYXBfbW9kaWZ5X3R1cGxlKHB1YnJlbHR1cCwgUmVsYXRpb25HZXREZXNjcihw dWJyZWwpLAorCQkJCQkJCQl2YWx1ZXMsIG51bGxzLCByZXBsYWNlcyk7CisKKwlDYXRhbG9n VHVwbGVVcGRhdGUocHVicmVsLCAmcHVicmVsdHVwLT50X3NlbGYsIGNvcHl0dXApOworCisJ aGVhcF9mcmVldHVwbGUoY29weXR1cCk7Cit9CisKKy8qCisgKiBxc29ydCBjb21wYXJhdG9y IGZvciBhdHRudW1zCisgKgorICogWFhYIFdlIGFscmVhZHkgaGF2ZSBjb21wYXJlX2ludDE2 LCBzbyBtYXliZSBsZXQncyBzaGFyZSB0aGF0LCBzb21laG93PworICovCitzdGF0aWMgaW50 Citjb21wYXJlX2ludDE2KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJaW50 CQkJYXYgPSAqKGNvbnN0IGludDE2ICopIGE7CisJaW50CQkJYnYgPSAqKGNvbnN0IGludDE2 ICopIGI7CisKKwkvKiB0aGlzIGNhbid0IG92ZXJmbG93IGlmIGludCBpcyB3aWRlciB0aGFu IGludDE2ICovCisJcmV0dXJuIChhdiAtIGJ2KTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBh IGxpc3Qgb2YgY29sdW1uIG5hbWVzIHRvIGFuIGFycmF5IG9mIGF0dHJpYnV0ZSBudW1iZXJz CisgKiBhbmQgYSBCaXRtYXBzZXQgd2l0aCB0aGVtOyB2ZXJpZnkgdGhhdCBlYWNoIGF0dHJp YnV0ZSBpcyBhcHByb3ByaWF0ZQorICogdG8gaGF2ZSBpbiBhIHB1YmxpY2F0aW9uIGNvbHVt biBsaXN0IChubyBzeXN0ZW0gb3IgZ2VuZXJhdGVkIGF0dHJpYnV0ZXMsCisgKiBubyBkdXBs aWNhdGVzKS4gIEFkZGl0aW9uYWwgY2hlY2tzIHdpdGggcmVwbGljYSBpZGVudGl0eSBhcmUg ZG9uZSBsYXRlcjsKKyAqIHNlZSBjaGVja19wdWJsaWNhdGlvbl9jb2x1bW5zLgorICoKKyAq IE5vdGUgdGhhdCB0aGUgYXR0cmlidXRlIG51bWJlcnMgYXJlICpub3QqIG9mZnNldCBieQor ICogRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsgc3lzdGVtIGNvbHVtbnMg YXJlIGZvcmJpZGRlbiBzbyB0aGlzCisgKiBpcyBva2F5LgorICoKKyAqIFhYWCBTaG91bGQg dGhpcyBkZXRlY3QgZHVwbGljYXRlIGNvbHVtbnM/CisgKi8KK3N0YXRpYyB2b2lkCitwdWJs aWNhdGlvbl90cmFuc2xhdGVfY29sdW1ucyhSZWxhdGlvbiB0YXJnZXRyZWwsIExpc3QgKmNv bHVtbnMsCisJCQkJCQkJICBpbnQgKm5hdHRzLCBBdHRyTnVtYmVyICoqYXR0cnMpCit7CisJ QXR0ck51bWJlciAqYXR0YXJyYXk7CisJQml0bWFwc2V0ICAqc2V0ID0gTlVMTDsKKwlMaXN0 Q2VsbCAgICpsYzsKKwlpbnQJCQluID0gMDsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0 aW9uR2V0RGVzY3IodGFyZ2V0cmVsKTsKKworCS8qCisJICogVHJhbnNsYXRlIGxpc3Qgb2Yg Y29sdW1ucyB0byBhdHRudW1zLiBXZSBwcm9oaWJpdCBzeXN0ZW0gYXR0cmlidXRlcyBhbmQK KwkgKiBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSBjb2x1bW5zLgorCSAqLwor CWF0dGFycmF5ID0gcGFsbG9jKHNpemVvZihBdHRyTnVtYmVyKSAqIGxpc3RfbGVuZ3RoKGNv bHVtbnMpKTsKKwlmb3JlYWNoKGxjLCBjb2x1bW5zKQorCXsKKwkJY2hhcgkgICAqY29sbmFt ZSA9IHN0clZhbChsZmlyc3QobGMpKTsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBnZXRfYXR0 bnVtKFJlbGF0aW9uR2V0UmVsaWQodGFyZ2V0cmVsKSwgY29sbmFtZSk7CisKKwkJaWYgKGF0 dG51bSA9PSBJbnZhbGlkQXR0ck51bWJlcikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVy cmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQkJZXJybXNnKCJjb2x1bW4g XCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkgICBj b2xuYW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpKSk7CisKKwkJaWYg KCFBdHRyTnVtYmVySXNGb3JVc2VyRGVmaW5lZEF0dHIoYXR0bnVtKSkKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0Up LAorCQkJCQllcnJtc2coImNhbm5vdCByZWZlcmVuY2Ugc3lzdGVtIGNvbHVtbiBcIiVzXCIg aW4gcHVibGljYXRpb24gY29sdW1uIGxpc3QiLAorCQkJCQkJICAgY29sbmFtZSkpOworCisJ CWlmIChUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpLT5hdHRnZW5lcmF0ZWQp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xV TU5fUkVGRVJFTkNFKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgcmVmZXJlbmNlIGdlbmVyYXRl ZCBjb2x1bW4gXCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0IiwKKwkJCQkJCSAg IGNvbG5hbWUpKTsKKworCQlpZiAoYm1zX2lzX21lbWJlcihhdHRudW0sIHNldCkpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX09CSkVDVCks CisJCQkJCWVycm1zZygiZHVwbGljYXRlIGNvbHVtbiBcIiVzXCIgaW4gcHVibGljYXRpb24g Y29sdW1uIGxpc3QiLAorCQkJCQkJICAgY29sbmFtZSkpOworCisJCXNldCA9IGJtc19hZGRf bWVtYmVyKHNldCwgYXR0bnVtKTsKKwkJYXR0YXJyYXlbbisrXSA9IGF0dG51bTsKKwl9CisK KwkvKiBCZSB0aWR5LCBzbyB0aGF0IHRoZSBjYXRhbG9nIHJlcHJlc2VudGF0aW9uIGlzIGFs d2F5cyBzb3J0ZWQgKi8KKwlxc29ydChhdHRhcnJheSwgbiwgc2l6ZW9mKEF0dHJOdW1iZXIp LCBjb21wYXJlX2ludDE2KTsKKworCSpuYXR0cyA9IG47CisJKmF0dHJzID0gYXR0YXJyYXk7 CisKKwlibXNfZnJlZShzZXQpOworfQorCiAvKgogICogSW5zZXJ0IG5ldyBwdWJsaWNhdGlv biAvIHNjaGVtYSBtYXBwaW5nLgogICovCkBAIC01MjIsNiArNzA0LDg0IEBAIEdldFJlbGF0 aW9uUHVibGljYXRpb25zKE9pZCByZWxpZCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgor ICogR2V0cyBhIGxpc3Qgb2YgT0lEcyBvZiBhbGwgcGFydGlhbC1jb2x1bW4gcHVibGljYXRp b25zIG9mIHRoZSBnaXZlbgorICogcmVsYXRpb24sIHRoYXQgaXMsIHRob3NlIHRoYXQgc3Bl Y2lmeSBhIGNvbHVtbiBsaXN0LgorICovCitMaXN0ICoKK0dldFJlbGF0aW9uQ29sdW1uUGFy dGlhbFB1YmxpY2F0aW9ucyhPaWQgcmVsaWQpCit7CisJQ2F0Q0xpc3QgICAqcHVicmVsbGlz dDsKKwlMaXN0CSAgICpwdWJzID0gTklMOworCWludAkJCWk7CisKKwlwdWJyZWxsaXN0ID0g U2VhcmNoU3lzQ2FjaGVMaXN0MShQVUJMSUNBVElPTlJFTE1BUCwKKwkJCQkJCQkJCSBPYmpl Y3RJZEdldERhdHVtKHJlbGlkKSk7CisJZm9yIChpID0gMDsgaSA8IHB1YnJlbGxpc3QtPm5f bWVtYmVyczsgaSsrKQorCXsKKwkJSGVhcFR1cGxlCXR1cCA9ICZwdWJyZWxsaXN0LT5tZW1i ZXJzW2ldLT50dXBsZTsKKwkJYm9vbAkJaXNudWxsOworCQlGb3JtX3BnX3B1YmxpY2F0aW9u X3JlbAlwdWJyZWw7CisKKwkJKHZvaWQpIFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJF TE1BUCwgdHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMs CisJCQkJCQkJICAgJmlzbnVsbCk7CisKKwkJLyogbm8gY29sdW1uIGZpbHRlciBmb3IgdGhp cyBwdWJsaWNhdGlvbnMvcmVsYXRpb24gKi8KKwkJaWYgKGlzbnVsbCkKKwkJCWNvbnRpbnVl OworCisJCXB1YnJlbCA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1 cCk7CisKKwkJcHVicyA9IGxhcHBlbmRfb2lkKHB1YnMsIHB1YnJlbC0+cHJwdWJpZCk7CisJ fQorCisJUmVsZWFzZVN5c0NhY2hlTGlzdChwdWJyZWxsaXN0KTsKKworCXJldHVybiBwdWJz OworfQorCisKKy8qCisgKiBGb3IgYSByZWxhdGlvbiBpbiBhIHB1YmxpY2F0aW9uIHRoYXQg aXMga25vd24gdG8gaGF2ZSBhIG5vbi1udWxsIGNvbHVtbgorICogbGlzdCwgcmV0dXJuIHRo ZSBsaXN0IG9mIGF0dHJpYnV0ZSBudW1iZXJzIHRoYXQgYXJlIGluIGl0LgorICovCitMaXN0 ICoKK0dldFJlbGF0aW9uQ29sdW1uTGlzdEluUHVibGljYXRpb24oT2lkIHJlbGlkLCBPaWQg cHViaWQpCit7CisJSGVhcFR1cGxlCXR1cDsKKwlEYXR1bQkJYWRhdHVtOworCWJvb2wJCWlz bnVsbDsKKwlBcnJheVR5cGUgICphcnI7CisJaW50CQkJbmVsZW1zOworCWludDE2CSAgICpl bGVtczsKKwlMaXN0CSAgICphdHRub3MgPSBOSUw7CisJaW50CQkJaTsKKworCXR1cCA9IFNl YXJjaFN5c0NhY2hlMihQVUJMSUNBVElPTlJFTE1BUCwKKwkJCQkJCSAgT2JqZWN0SWRHZXRE YXR1bShyZWxpZCksCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcmVsICV1IG9mIHB1YmxpY2F0aW9uICV1IiwgcmVsaWQsIHB1YmlkKTsK KworCWFkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgdHVwLAor CQkJCQkJCSBBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzLCAmaXNudWxsKTsKKwlp ZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAiZm91bmQgdW5leHBlY3RlZCBudWxsIGluIHBn X3B1YmxpY2F0aW9uX3JlbC5wcmF0dHJzIik7CisKKwlhcnIgPSBEYXR1bUdldEFycmF5VHlw ZVAoYWRhdHVtKTsKKwluZWxlbXMgPSBBUlJfRElNUyhhcnIpWzBdOworCWVsZW1zID0gKGlu dDE2ICopIEFSUl9EQVRBX1BUUihhcnIpOworCisJZm9yIChpID0gMDsgaSA8IG5lbGVtczsg aSsrKQorCQlhdHRub3MgPSBsYXBwZW5kX29pZChhdHRub3MsIGVsZW1zW2ldKTsKKworCVJl bGVhc2VTeXNDYWNoZSh0dXApOworCisJcmV0dXJuIGF0dG5vczsKK30KKwogLyoKICAqIEdl dHMgbGlzdCBvZiByZWxhdGlvbiBvaWRzIGZvciBhIHB1YmxpY2F0aW9uLgogICoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggMTZiODY2MWExYjcuLmZh MTQ2MmFlNTQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpA QCAtMzY3LDYgKzM2NywxMjMgQEAgY29udGFpbl9pbnZhbGlkX3JmY29sdW1uKE9pZCBwdWJp ZCwgUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywKIAlyZXR1cm4gcmVzdWx0 OwogfQogCisvKgorICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUg Y29sdW1uIGZpbHRlciBhcmUgcGFydCBvZiB0aGUKKyAqIFJFUExJQ0EgSURFTlRJVFkgaW5k ZXggb3Igbm90LgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgaW52YWxpZCBjb2x1bW4g aXMgZm91bmQuCisgKi8KK2Jvb2wKK2NvbnRhaW5faW52YWxpZF9jZmNvbHVtbihPaWQgcHVi aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICphbmNlc3RvcnMsCisJCQkJCQkgYm9vbCBw dWJ2aWFyb290KQoreworCUhlYXBUdXBsZQljZnR1cGxlOworCU9pZAkJCXJlbGlkID0gUmVs YXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJT2lkCQkJcHVibGlzaF9hc19yZWxpZCA9IFJl bGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCURh dHVtCQljZmRhdHVtOworCWJvb2wJCWNmaXNudWxsOworCisJLyoKKwkgKiBGb3IgYSBwYXJ0 aXRpb24sIGlmIHB1YnZpYXJvb3QgaXMgdHJ1ZSwgZmluZCB0aGUgdG9wbW9zdCBhbmNlc3Rv ciB0aGF0CisJICogaXMgcHVibGlzaGVkIHZpYSB0aGlzIHB1YmxpY2F0aW9uIGFzIHdlIG5l ZWQgdG8gdXNlIGl0cyBjb2x1bW4gZmlsdGVyCisJICogZm9yIHRoZSBjaGFuZ2VzLgorCSAq CisJICogTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBjb2x1bW4gZmlsdGVyIHVzZWQgaXMg Zm9yIGFuIGFuY2VzdG9yLCB0aGUKKwkgKiBSRVBMSUNBIElERU5USVRZIHVzZWQgd2lsbCBi ZSBmb3IgdGhlIGFjdHVhbCBjaGlsZCB0YWJsZS4KKwkgKi8KKwlpZiAocHVidmlhcm9vdCAm JiByZWxhdGlvbi0+cmRfcmVsLT5yZWxpc3BhcnRpdGlvbikKKwl7CisJCXB1Ymxpc2hfYXNf cmVsaWQgPSBHZXRUb3BNb3N0QW5jZXN0b3JJblB1YmxpY2F0aW9uKHB1YmlkLCBhbmNlc3Rv cnMpOworCisJCWlmICghT2lkSXNWYWxpZChwdWJsaXNoX2FzX3JlbGlkKSkKKwkJCXB1Ymxp c2hfYXNfcmVsaWQgPSByZWxpZDsKKwl9CisKKwljZnR1cGxlID0gU2VhcmNoU3lzQ2FjaGUy KFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShwdWJsaXNo X2FzX3JlbGlkKSwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKKworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChjZnR1cGxlKSkKKwkJcmV0dXJuIGZhbHNlOworCisJY2Zk YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgY2Z0dXBsZSwKKwkJ CQkJCQkgIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMsCisJCQkJCQkJICAmY2Zp c251bGwpOworCisJaWYgKCFjZmlzbnVsbCkKKwl7CisJCWludAl4OworCQlCaXRtYXBzZXQg ICppZGF0dHJzOworCQlCaXRtYXBzZXQgICpjb2x1bW5zID0gTlVMTDsKKworCQkvKiBXaXRo IFJFUExJQ0EgSURFTlRJVFkgRlVMTCwgbm8gY29sdW1uIGZpbHRlciBpcyBhbGxvd2VkLiAq LworCQlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURF TlRJVFlfRlVMTCkKKwkJCXJlc3VsdCA9IHRydWU7CisKKwkJeworCQkJQXJyYXlUeXBlICAq YXJyOworCQkJaW50CQkJbmVsZW1zOworCQkJaW50MTYJICAgKmVsZW1zOworCisJCQlhcnIg PSBEYXR1bUdldEFycmF5VHlwZVAoY2ZkYXR1bSk7CisJCQluZWxlbXMgPSBBUlJfRElNUyhh cnIpWzBdOworCQkJZWxlbXMgPSAoaW50MTYgKikgQVJSX0RBVEFfUFRSKGFycik7CisKKwkJ CS8qIFhYWCBpcyB0aGVyZSBhIGRhbmdlciBvZiBtZW1vcnkgbGVhayBoZXJlPyBiZXdhcmUg Ki8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCQkJY29sdW1ucyA9 IGJtc19hZGRfbWVtYmVyKGNvbHVtbnMsIGVsZW1zW2ldKTsKKwkJfQorCisJCS8qIFJlbWVt YmVyIGNvbHVtbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgUkVQTElDQSBJREVOVElUWSAqLwor CQlpZGF0dHJzID0gUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAocmVsYXRpb24sCisJCQkJ CQkJCQkJCSBJTkRFWF9BVFRSX0JJVE1BUF9JREVOVElUWV9LRVkpOworCisJCS8qCisJCSAq IEF0dG51bXMgaW4gdGhlIGJpdG1hcCByZXR1cm5lZCBieSBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcCBhcmUKKwkJICogb2Zmc2V0ICh0byBoYW5kbGUgc3lzdGVtIGNvbHVtbnMgdGhl IHVzdWFsIHdheSksIHdoaWxlIGNvbHVtbiBmaWx0ZXIKKwkJICogZG9lcyBub3QgdXNlIG9m ZnNldCwgc28gd2UgY2FuJ3QgZG8gYm1zX2lzX3N1YnNldCgpLiBJbnN0ZWFkLCB3ZSBoYXZl CisJCSAqIHRvIGxvb3Agb3ZlciB0aGUgaWRhdHRycyBhbmQgY2hlY2sgYWxsIG9mIHRoZW0g YXJlIGluIHRoZSBmaWx0ZXIuCisJCSAqLworCQl4ID0gLTE7CisJCXdoaWxlICgoeCA9IGJt c19uZXh0X21lbWJlcihpZGF0dHJzLCB4KSkgPj0gMCkKKwkJeworCQkJQXR0ck51bWJlcglh dHRudW0gPSAoeCArIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCisJ CQkvKgorCQkJICogSWYgcHVidmlhcm9vdCBpcyB0cnVlLCB3ZSBhcmUgdmFsaWRhdGluZyB0 aGUgcm93IGZpbHRlciBvZiB0aGUKKwkJCSAqIHBhcmVudCB0YWJsZSwgYnV0IHRoZSBiaXRt YXAgY29udGFpbnMgdGhlIHJlcGxpY2EgaWRlbnRpdHkKKwkJCSAqIGluZm9ybWF0aW9uIG9m IHRoZSBjaGlsZCB0YWJsZS4gU28sIGdldCB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUKKwkJ CSAqIGNoaWxkIHRhYmxlIGFzIHBhcmVudCBhbmQgY2hpbGQgY29sdW1uIG9yZGVyIGNvdWxk IGJlIGRpZmZlcmVudC4KKwkJCSAqLworCQkJaWYgKHB1YnZpYXJvb3QpCisJCQl7CisJCQkJ LyogYXR0bnVtIGlzIGZvciBjaGlsZCB0YWJsZSAqLworCQkJCWNoYXIgICAqY29sbmFtZSA9 IGdldF9hdHRuYW1lKHJlbGlkLCBhdHRudW0sIGZhbHNlKTsKKworCQkJCS8qCisJCQkJICog RGV0ZXJtaW5lIHRoZSBtYXRjaGluZyBhdHRudW0gaW4gcGFyZW50IChiZWNhdXNlIHRoZSBj b2x1bW4KKwkJCQkgKiBmaWx0ZXIgaXMgZGVmaW5lZCBvbiB0aGUgcGFyZW50KS4KKwkJCQkg Ki8KKwkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKHB1Ymxpc2hfYXNfcmVsaWQsIGNvbG5hbWUp OworCQkJfQorCisJCQlpZiAoIWJtc19pc19tZW1iZXIoYXR0bnVtLCBjb2x1bW5zKSkKKwkJ CXsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJYm1z X2ZyZWUoaWRhdHRycyk7CisJCWJtc19mcmVlKGNvbHVtbnMpOworCX0KKworCVJlbGVhc2VT eXNDYWNoZShjZnR1cGxlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qIGNoZWNrX2Z1 bmN0aW9uc19pbl9ub2RlIGNhbGxiYWNrICovCiBzdGF0aWMgYm9vbAogY29udGFpbl9tdXRh YmxlX29yX3VzZXJfZnVuY3Rpb25zX2NoZWNrZXIoT2lkIGZ1bmNfaWQsIHZvaWQgKmNvbnRl eHQpCkBAIC02MDgsNiArNzI1LDQ1IEBAIFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0 ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCX0KIH0KIAorCisvKgorICog VHJhbnNmb3JtIHRoZSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdHMgZXhwcmVzc2lvbiBmb3Ig YWxsIHRoZSByZWxhdGlvbnMKKyAqIGluIHRoZSBsaXN0LgorICoKKyAqIFhYWCBUaGUgbmFt ZSBpcyBhIGJpdCBtaXNsZWFkaW5nLCBiZWNhdXNlIHdlIGRvbid0IHJlYWxseSB0cmFuc2Zv cm0KKyAqIGFueXRoaW5nIGhlcmUgLSB3ZSBtZXJlbHkgY2hlY2sgdGhlIGNvbHVtbiBsaXN0 IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAqIGRlZmluaXRpb24gb2YgdGhlIHB1YmxpY2F0 aW9uICh3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PWZhbHNlKQorICogd2Ugb25s eSBhbGxvdyBmaWx0ZXJzIG9uIHRoZSBsZWFmIHJlbGF0aW9ucy4gU28gbWF5YmUgcmVuYW1l IGl0PworICovCitzdGF0aWMgdm9pZAorVHJhbnNmb3JtUHViQ29sdW1uTGlzdChMaXN0ICp0 YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJCQkgICBib29sIHB1YnZpYXJv b3QpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCB0YWJsZXMpCisJewor CQlQdWJsaWNhdGlvblJlbEluZm8gKnByaSA9IChQdWJsaWNhdGlvblJlbEluZm8gKikgbGZp cnN0KGxjKTsKKworCQlpZiAocHJpLT5jb2x1bW5zID09IE5JTCkKKwkJCWNvbnRpbnVlOwor CisJCS8qCisJCSAqIElmIHRoZSBwdWJsaWNhdGlvbiBkb2Vzbid0IHB1Ymxpc2ggY2hhbmdl cyB2aWEgdGhlIHJvb3QgcGFydGl0aW9uZWQKKwkJICogdGFibGUsIHRoZSBwYXJ0aXRpb24n cyBjb2x1bW4gZmlsdGVyIHdpbGwgYmUgdXNlZC4gU28gZGlzYWxsb3cgdXNpbmcKKwkJICog dGhlIGNvbHVtbiBsaXN0IG9uIHBhcnRpdGlvbmVkIHRhYmxlIGluIHRoaXMgY2FzZS4KKwkJ ICovCisJCWlmICghcHVidmlhcm9vdCAmJgorCQkJcHJpLT5yZWxhdGlvbi0+cmRfcmVsLT5y ZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJIGVycm1zZygiY2Fubm90IHVzZSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdCBmb3IgcmVs YXRpb24gXCIlc1wiIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwcmktPnJl bGF0aW9uKSksCisJCQkJCSBlcnJkZXRhaWwoImNvbHVtbiBsaXN0IGNhbm5vdCBiZSB1c2Vk IGZvciBhIHBhcnRpdGlvbmVkIHRhYmxlIHdoZW4gJXMgaXMgZmFsc2UuIiwKKwkJCQkJCQkg ICAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiKSkpOworCX0KK30KKwogLyoKICAqIENy ZWF0ZSBuZXcgcHVibGljYXRpb24uCiAgKi8KQEAgLTcyNCw2ICs4ODAsOSBAQCBDcmVhdGVQ dWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAq c3RtdCkKIAkJCVRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhyZWxzLCBwc3RhdGUtPnBfc291 cmNldGV4dCwKIAkJCQkJCQkJCSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKKwkJ CVRyYW5zZm9ybVB1YkNvbHVtbkxpc3QocmVscywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCisJ CQkJCQkJCSAgIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwogCQkJUHVibGljYXRp b25BZGRUYWJsZXMocHVib2lkLCByZWxzLCB0cnVlLCBOVUxMKTsKIAkJCUNsb3NlVGFibGVM aXN0KHJlbHMpOwogCQl9CkBAIC03NTQsNiArOTEzLDUyIEBAIENyZWF0ZVB1YmxpY2F0aW9u KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCXJl dHVybiBteXNlbGY7CiB9CiAKKy8qCisgKiBDaGFuZ2UgdGhlIGNvbHVtbiBsaXN0IG9mIGEg cmVsYXRpb24gaW4gYSBwdWJsaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorUHVibGljYXRp b25TZXRDb2x1bW5zKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAorCQkJCQkgIEZvcm1f cGdfcHVibGljYXRpb24gcHViZm9ybSwgUHVibGljYXRpb25UYWJsZSAqdGFibGUpCit7CisJ UmVsYXRpb24JcmVsLAorCQkJCXVyZWw7CisJSGVhcFR1cGxlCXR1cDsKKwlPYmplY3RBZGRy ZXNzIG9iaiwKKwkJCQlzZWNvbmRhcnk7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFB1YmxpY2F0 aW9uUmVsUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJdXJlbCA9IHRhYmxlX29w ZW5ydih0YWJsZS0+cmVsYXRpb24sIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisKKwl0 dXAgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkgIE9iamVj dElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxpZCh1cmVsKSksCisJCQkJCQkgIE9iamVjdElk R2V0RGF0dW0ocHViZm9ybS0+b2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJybXNnKCJyZWxhdGlvbiBcIiVzXCIgaXMgbm90 IGFscmVhZHkgaW4gcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJICAgdGFibGUtPnJlbGF0 aW9uLT5yZWxuYW1lLAorCQkJCQkgICBOYW1lU3RyKHB1YmZvcm0tPnB1Ym5hbWUpKSk7CisK KwlwdWJsaWNhdGlvbl9zZXRfdGFibGVfY29sdW1ucyhyZWwsIHR1cCwgdXJlbCwgdGFibGUt PmNvbHVtbnMpOworCisJT2JqZWN0QWRkcmVzc1NldChvYmosIFB1YmxpY2F0aW9uUmVsYXRp b25JZCwKKwkJCQkJICgoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXAp KS0+b2lkKTsKKwlPYmplY3RBZGRyZXNzU2V0KHNlY29uZGFyeSwgUmVsYXRpb25SZWxhdGlv bklkLCBSZWxhdGlvbkdldFJlbGlkKHVyZWwpKTsKKwlFdmVudFRyaWdnZXJDb2xsZWN0U2lt cGxlQ29tbWFuZChvYmosIHNlY29uZGFyeSwgKE5vZGUgKikgc3RtdCk7CisKKwlSZWxlYXNl U3lzQ2FjaGUodHVwKTsKKworCS8qCisJICogSW52YWxpZGF0ZSByZWxjYWNoZSBmb3IgdGhp cyByZWxhdGlvbiwgdG8gZm9yY2UgcmVidWlsZGluZyB0aGUKKwkgKiBwdWJsaWNhdGlvbiBk ZXNjcmlwdGlvbi4KKwkgKi8KKwlDYWNoZUludmFsaWRhdGVSZWxjYWNoZSh1cmVsKTsKKwor CXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJdGFibGVfY2xvc2UodXJl bCwgTm9Mb2NrKTsKKworCUludm9rZU9iamVjdFBvc3RBbHRlckhvb2soUHVibGljYXRpb25S ZWxhdGlvbklkLCBwdWJmb3JtLT5vaWQsIDApOworfQorCiAvKgogICogQ2hhbmdlIG9wdGlv bnMgb2YgYSBwdWJsaWNhdGlvbi4KICAqLwpAQCAtNzgzLDggKzk4OCw4IEBAIEFsdGVyUHVi bGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0 bXQgKnN0bXQsCiAKIAkvKgogCSAqIElmIHRoZSBwdWJsaWNhdGlvbiBkb2Vzbid0IHB1Ymxp c2ggY2hhbmdlcyB2aWEgdGhlIHJvb3QgcGFydGl0aW9uZWQKLQkgKiB0YWJsZSwgdGhlIHBh cnRpdGlvbidzIHJvdyBmaWx0ZXIgd2lsbCBiZSB1c2VkLiBTbyBkaXNhbGxvdyB1c2luZyBX SEVSRQotCSAqIGNsYXVzZSBvbiBwYXJ0aXRpb25lZCB0YWJsZSBpbiB0aGlzIGNhc2UuCisJ ICogdGFibGUsIHRoZSBwYXJ0aXRpb24ncyByb3cgYW5kIGNvbHVtbiBmaWx0ZXIgd2lsbCBi ZSB1c2VkLiBTbyBkaXNhbGxvdworCSAqIHVzaW5nIFdIRVJFIGNsYXVzZSBhbmQgY29sdW1u IGZpbHRlcnMgb24gcGFydGl0aW9uZWQgdGFibGUgaW4gdGhpcyBjYXNlLgogCSAqLwogCWlm ICghcHViZm9ybS0+cHViYWxsdGFibGVzICYmIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 X2dpdmVuICYmCiAJCSFwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKQEAgLTc5Miw3ICs5 OTcsOCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFs dGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCQkvKgogCQkgKiBMb2NrIHRoZSBwdWJsaWNh dGlvbiBzbyBub2JvZHkgZWxzZSBjYW4gZG8gYW55dGhpbmcgd2l0aCBpdC4gVGhpcwogCQkg KiBwcmV2ZW50cyBjb25jdXJyZW50IGFsdGVyIHRvIGFkZCBwYXJ0aXRpb25lZCB0YWJsZShz KSB3aXRoIFdIRVJFCi0JCSAqIGNsYXVzZShzKSB3aGljaCB3ZSBkb24ndCBhbGxvdyB3aGVu IG5vdCBwdWJsaXNoaW5nIHZpYSByb290LgorCQkgKiBjbGF1c2UocykgYW5kL29yIGNvbHVt biBmaWx0ZXJzIHdoaWNoIHdlIGRvbid0IGFsbG93IHdoZW4gbm90CisJCSAqIHB1Ymxpc2hp bmcgdmlhIHJvb3QuCiAJCSAqLwogCQlMb2NrRGF0YWJhc2VPYmplY3QoUHVibGljYXRpb25S ZWxhdGlvbklkLCBwdWJmb3JtLT5vaWQsIDAsCiAJCQkJCQkgICBBY2Nlc3NTaGFyZUxvY2sp OwpAQCAtODA0LDEzICsxMDEwLDIxIEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCXsKIAkJCUhl YXBUdXBsZQlyZnR1cGxlOwogCQkJT2lkCQkJcmVsaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJ CWJvb2wJCWhhc19jb2x1bW5fZmlsdGVyOworCQkJYm9vbAkJaGFzX3Jvd19maWx0ZXI7CiAK IAkJCXJmdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCiAJCQkJ CQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpLAogCQkJCQkJCQkJICBPYmplY3RJZEdl dERhdHVtKHB1YmZvcm0tPm9pZCkpOwogCisJCQloYXNfcm93X2ZpbHRlcgorCQkJCT0gIWhl YXBfYXR0aXNudWxsKHJmdHVwbGUsIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3BycXVhbCwg TlVMTCk7CisKKwkJCWhhc19jb2x1bW5fZmlsdGVyCisJCQkJPSAhaGVhcF9hdHRpc251bGwo cmZ0dXBsZSwgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycywgTlVMTCk7CisKIAkJ CWlmIChIZWFwVHVwbGVJc1ZhbGlkKHJmdHVwbGUpICYmCi0JCQkJIWhlYXBfYXR0aXNudWxs KHJmdHVwbGUsIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3BycXVhbCwgTlVMTCkpCisJCQkJ KGhhc19yb3dfZmlsdGVyIHx8IGhhc19jb2x1bW5fZmlsdGVyKSkKIAkJCXsKIAkJCQlIZWFw VHVwbGUJdHVwbGU7CiAKQEAgLTgxOSw3ICsxMDMzLDggQEAgQWx0ZXJQdWJsaWNhdGlvbk9w dGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwK IAkJCQl7CiAJCQkJCUZvcm1fcGdfY2xhc3MgcmVsZm9ybSA9IChGb3JtX3BnX2NsYXNzKSBH RVRTVFJVQ1QodHVwbGUpOwogCi0JCQkJCWlmIChyZWxmb3JtLT5yZWxraW5kID09IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCWlmICgocmVsZm9ybS0+cmVsa2luZCA9PSBS RUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKSAmJgorCQkJCQkJaGFzX3Jvd19maWx0ZXIpCiAJ CQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkJCQkJIGVycm1zZygiY2Fubm90IHNldCAlcyBmb3Ig cHVibGljYXRpb24gXCIlc1wiIiwKQEAgLTgzMCw2ICsxMDQ1LDE4IEBAIEFsdGVyUHVibGlj YXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQg KnN0bXQsCiAJCQkJCQkJCQkJICAgTmFtZVN0cihyZWxmb3JtLT5yZWxuYW1lKSwKIAkJCQkJ CQkJCQkgICAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiKSkpOwogCisJCQkJCWlmICgo cmVsZm9ybS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKSAmJgorCQkJ CQkJaGFzX2NvbHVtbl9maWx0ZXIpCisJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCQkJIGVy cm1zZygiY2Fubm90IHNldCAlcyBmb3IgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkJ CQkicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSIsCisJCQkJCQkJCQkJc3Rt dC0+cHVibmFtZSksCisJCQkJCQkJCSBlcnJkZXRhaWwoIlRoZSBwdWJsaWNhdGlvbiBjb250 YWlucyBhIGNvbHVtbiBmaWx0ZXIgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgXCIlc1wiICIK KwkJCQkJCQkJCQkgICAid2hpY2ggaXMgbm90IGFsbG93ZWQgd2hlbiAlcyBpcyBmYWxzZS4i LAorCQkJCQkJCQkJCSAgIE5hbWVTdHIocmVsZm9ybS0+cmVsbmFtZSksCisJCQkJCQkJCQkJ ICAgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IikpKTsKKwogCQkJCQlSZWxlYXNlU3lz Q2FjaGUodHVwbGUpOwogCQkJCX0KIApAQCAtODM4LDYgKzEwNjUsMTYgQEAgQWx0ZXJQdWJs aWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3Rt dCAqc3RtdCwKIAkJfQogCX0KIAorCS8qCisJICogRklYTUUgY2hlY2sgcHViYWN0aW9ucyB2 cy4gcmVwbGljYSBpZGVudGl0eSwgdG8gZW5zdXJlIHRoZSByZXBsaWNhCisJICogaWRlbnRp dHkgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBmaWx0ZXIuIE9ubHkgZG8gdGhpcyBmb3Ig dXBkYXRlCisJICogYW5kIGRlbGV0ZSBwdWJsaWNhdGlvbnMuIFNlZSBjaGVja19wdWJsaWNh dGlvbl9jb2x1bW5zLgorCSAqCisJICogWFhYIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgbWF5IGNoYW5nZSwKKwkgKiBpbiB3aGljaCBjYXNl IHRoZSByb3cgZmlsdGVycyBtYXkgYmUgaW52YWxpZCAoZS5nLiB3aXRoIHB2cHI9ZmFsc2UK KwkgKiB0aGVyZSBtdXN0IGJlIG5vIGZpbHRlciBvbiBwYXJ0aXRpb25lZCB0YWJsZXMpLgor CSAqLworCiAJLyogRXZlcnl0aGluZyBvaywgZm9ybSBhIG5ldyB0dXBsZS4gKi8KIAltZW1z ZXQodmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CiAJbWVtc2V0KG51bGxzLCBmYWxzZSwg c2l6ZW9mKG51bGxzKSk7CkBAIC05NzUsMTAgKzEyMTIsMjAgQEAgQWx0ZXJQdWJsaWNhdGlv blRhYmxlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAog CQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcXVlcnlTdHJpbmcsIHB1YmZvcm0t PnB1YnZpYXJvb3QpOwogCisJCVRyYW5zZm9ybVB1YkNvbHVtbkxpc3QocmVscywgcXVlcnlT dHJpbmcsIHB1YmZvcm0tPnB1YnZpYXJvb3QpOworCiAJCVB1YmxpY2F0aW9uQWRkVGFibGVz KHB1YmlkLCByZWxzLCBmYWxzZSwgc3RtdCk7CiAJfQogCWVsc2UgaWYgKHN0bXQtPmFjdGlv biA9PSBBUF9Ecm9wT2JqZWN0cykKIAkJUHVibGljYXRpb25Ecm9wVGFibGVzKHB1YmlkLCBy ZWxzLCBmYWxzZSk7CisJZWxzZSBpZiAoc3RtdC0+YWN0aW9uID09IEFQX1NldENvbHVtbnMp CisJeworCQlBc3NlcnQoc2NoZW1haWRsaXN0ID09IE5JTCk7CisJCUFzc2VydChsaXN0X2xl bmd0aCh0YWJsZXMpID09IDEpOworCisJCVB1YmxpY2F0aW9uU2V0Q29sdW1ucyhzdG10LCBw dWJmb3JtLAorCQkJCQkJCSAgbGluaXRpYWxfbm9kZShQdWJsaWNhdGlvblRhYmxlLCB0YWJs ZXMpKTsKKwl9CiAJZWxzZQkJCQkJCS8qIEFQX1NldE9iamVjdHMgKi8KIAl7CiAJCUxpc3QJ ICAgKm9sZHJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmlkLApAQCAtOTkx LDYgKzEyMzgsOCBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25T dG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAogCiAJCVRyYW5zZm9ybVB1YldoZXJlQ2xhdXNl cyhyZWxzLCBxdWVyeVN0cmluZywgcHViZm9ybS0+cHVidmlhcm9vdCk7CiAKKwkJVHJhbnNm b3JtUHViQ29sdW1uTGlzdChyZWxzLCBxdWVyeVN0cmluZywgcHViZm9ybS0+cHVidmlhcm9v dCk7CisKIAkJLyoKIAkJICogVG8gcmVjcmVhdGUgdGhlIHJlbGF0aW9uIGxpc3QgZm9yIHRo ZSBwdWJsaWNhdGlvbiwgbG9vayBmb3IKIAkJICogZXhpc3RpbmcgcmVsYXRpb25zIHRoYXQg ZG8gbm90IG5lZWQgdG8gYmUgZHJvcHBlZC4KQEAgLTEwMDIsMzIgKzEyNTEsODUgQEAgQWx0 ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1 cGxlIHR1cCwKIAkJCVB1YmxpY2F0aW9uUmVsSW5mbyAqb2xkcmVsOwogCQkJYm9vbAkJZm91 bmQgPSBmYWxzZTsKIAkJCUhlYXBUdXBsZQlyZnR1cGxlOwotCQkJYm9vbAkJcmZpc251bGwg PSB0cnVlOwogCQkJTm9kZQkgICAqb2xkcmVsd2hlcmVjbGF1c2UgPSBOVUxMOworCQkJQml0 bWFwc2V0ICAqb2xkY29sdW1ucyA9IE5VTEw7CiAKIAkJCS8qIGxvb2sgdXAgdGhlIGNhY2hl IGZvciB0aGUgb2xkIHJlbG1hcCAqLwogCQkJcmZ0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMihQ VUJMSUNBVElPTlJFTE1BUCwKIAkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShvbGRyZWxp ZCksCiAJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsKIAorCQkJLyoKKwkJ CSAqIFNlZSBpZiB0aGUgZXhpc3RpbmcgcmVsYXRpb24gY3VycmVudGx5IGhhcyBhIFdIRVJF IGNsYXVzZSBvciBhCisJCQkgKiBjb2x1bW4gZmlsdGVyLiBXZSBuZWVkIHRvIGNvbXBhcmUg dGhvc2UgdG9vLgorCQkJICovCiAJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChyZnR1cGxlKSkK IAkJCXsKKwkJCQlib29sCQlpc251bGwgPSB0cnVlOwogCQkJCURhdHVtCQl3aGVyZUNsYXVz ZURhdHVtOworCQkJCURhdHVtCQljb2x1bW5MaXN0RGF0dW07CiAKKwkJCQkvKiBMb2FkIHRo ZSBXSEVSRSBjbGF1c2UgZm9yIHRoaXMgdGFibGUuICovCiAJCQkJd2hlcmVDbGF1c2VEYXR1 bSA9IFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgcmZ0dXBsZSwKIAkJCQkJ CQkJCQkJCSAgIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3BycXVhbCwKLQkJCQkJCQkJCQkJ CSAgICZyZmlzbnVsbCk7Ci0JCQkJaWYgKCFyZmlzbnVsbCkKKwkJCQkJCQkJCQkJCSAgICZp c251bGwpOworCQkJCWlmICghaXNudWxsKQogCQkJCQlvbGRyZWx3aGVyZWNsYXVzZSA9IHN0 cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHdoZXJlQ2xhdXNlRGF0dW0pKTsKIAor CQkJCS8qIFRyYW5zZm9ybSB0aGUgaW50MnZlY3RvciBjb2x1bW4gbGlzdCB0byBhIGJpdG1h cC4gKi8KKwkJCQljb2x1bW5MaXN0RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFVCTElDQVRJ T05SRUxNQVAsIHJmdHVwbGUsCisJCQkJCQkJCQkJCQkgICBBbnVtX3BnX3B1YmxpY2F0aW9u X3JlbF9wcmF0dHJzLAorCQkJCQkJCQkJCQkJICAgJmlzbnVsbCk7CisKKwkJCQkvKgorCQkJ CSAqIFhYWCBNYXliZSBtYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbi4gV2UgZG8gdGhp cyBvbgorCQkJCSAqIG11bHRpcGxlIHBsYWNlcy4KKwkJCQkgKi8KKwkJCQlpZiAoIWlzbnVs bCkKKwkJCQl7CisJCQkJCUFycmF5VHlwZSAgKmFycjsKKwkJCQkJaW50CQkJbmVsZW1zOwor CQkJCQlpbnQxNgkgICAqZWxlbXM7CisKKwkJCQkJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQ KGNvbHVtbkxpc3REYXR1bSk7CisJCQkJCW5lbGVtcyA9IEFSUl9ESU1TKGFycilbMF07CisJ CQkJCWVsZW1zID0gKGludDE2ICopIEFSUl9EQVRBX1BUUihhcnIpOworCisJCQkJCS8qIFhY WCBpcyB0aGVyZSBhIGRhbmdlciBvZiBtZW1vcnkgbGVhayBoZXJlPyBiZXdhcmUgKi8KKwkJ CQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuZWxlbXM7IGkrKykKKwkJCQkJCW9sZGNvbHVtbnMg PSBibXNfYWRkX21lbWJlcihvbGRjb2x1bW5zLCBlbGVtc1tpXSk7CisJCQkJfQorCiAJCQkJ UmVsZWFzZVN5c0NhY2hlKHJmdHVwbGUpOwogCQkJfQogCiAJCQlmb3JlYWNoKG5ld2xjLCBy ZWxzKQogCQkJewogCQkJCVB1YmxpY2F0aW9uUmVsSW5mbyAqbmV3cHVicmVsOworCQkJCU9p ZAkJCQkJbmV3cmVsaWQ7CisJCQkJQml0bWFwc2V0CQkgICAqbmV3Y29sdW1ucyA9IE5VTEw7 CiAKIAkJCQluZXdwdWJyZWwgPSAoUHVibGljYXRpb25SZWxJbmZvICopIGxmaXJzdChuZXds Yyk7CisJCQkJbmV3cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKG5ld3B1YnJlbC0+cmVsYXRp b24pOworCisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgbmV3IHB1YmxpY2F0aW9uIGhhcyBjb2x1 bW4gZmlsdGVyLCB0cmFuc2Zvcm0gaXQgdG8KKwkJCQkgKiBhIGJpdG1hcCB0b28uCisJCQkJ ICovCisJCQkJaWYgKG5ld3B1YnJlbC0+Y29sdW1ucykKKwkJCQl7CisJCQkJCUxpc3RDZWxs ICAgKmxjOworCisJCQkJCWZvcmVhY2gobGMsIG5ld3B1YnJlbC0+Y29sdW1ucykKKwkJCQkJ eworCQkJCQkJY2hhcgkgICAqY29sbmFtZSA9IHN0clZhbChsZmlyc3QobGMpKTsKKwkJCQkJ CUF0dHJOdW1iZXIJYXR0bnVtID0gZ2V0X2F0dG51bShuZXdyZWxpZCwgY29sbmFtZSk7CisK KwkJCQkJCS8qIG5vIGNoZWNrcyBuZWVkZWQgaGVyZSwgdGhhdCBoYXBwZW5zIGVsc2V3aGVy ZSAqLworCisJCQkJCQluZXdjb2x1bW5zID0gYm1zX2FkZF9tZW1iZXIobmV3Y29sdW1ucywg YXR0bnVtKTsKKwkJCQkJfQorCQkJCX0KIAogCQkJCS8qCiAJCQkJICogQ2hlY2sgaWYgYW55 IG9mIHRoZSBuZXcgc2V0IG9mIHJlbGF0aW9ucyBtYXRjaGVzIHdpdGggdGhlCkBAIC0xMDM3 LDcgKzEzMzksOCBAQCBBbHRlclB1YmxpY2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25T dG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAogCQkJCSAqLwogCQkJCWlmIChSZWxhdGlvbkdl dFJlbGlkKG5ld3B1YnJlbC0+cmVsYXRpb24pID09IG9sZHJlbGlkKQogCQkJCXsKLQkJCQkJ aWYgKGVxdWFsKG9sZHJlbHdoZXJlY2xhdXNlLCBuZXdwdWJyZWwtPndoZXJlQ2xhdXNlKSkK KwkJCQkJaWYgKGVxdWFsKG9sZHJlbHdoZXJlY2xhdXNlLCBuZXdwdWJyZWwtPndoZXJlQ2xh dXNlKSAmJgorCQkJCQkJYm1zX2VxdWFsKG9sZGNvbHVtbnMsIG5ld2NvbHVtbnMpKQogCQkJ CQl7CiAJCQkJCQlmb3VuZCA9IHRydWU7CiAJCQkJCQlicmVhazsKQEAgLTEwNTYsNiArMTM1 OSw3IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0 bXQsIEhlYXBUdXBsZSB0dXAsCiAJCQl7CiAJCQkJb2xkcmVsID0gcGFsbG9jKHNpemVvZihQ dWJsaWNhdGlvblJlbEluZm8pKTsKIAkJCQlvbGRyZWwtPndoZXJlQ2xhdXNlID0gTlVMTDsK KwkJCQlvbGRyZWwtPmNvbHVtbnMgPSBOSUw7CiAJCQkJb2xkcmVsLT5yZWxhdGlvbiA9IHRh YmxlX29wZW4ob2xkcmVsaWQsCiAJCQkJCQkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVM b2NrKTsKIAkJCQlkZWxyZWxzID0gbGFwcGVuZChkZWxyZWxzLCBvbGRyZWwpOwpAQCAtMTEx Nyw3ICsxNDIxLDcgQEAgQWx0ZXJQdWJsaWNhdGlvblNjaGVtYXMoQWx0ZXJQdWJsaWNhdGlv blN0bXQgKnN0bXQsCiAJfQogCWVsc2UgaWYgKHN0bXQtPmFjdGlvbiA9PSBBUF9Ecm9wT2Jq ZWN0cykKIAkJUHVibGljYXRpb25Ecm9wU2NoZW1hcyhwdWJmb3JtLT5vaWQsIHNjaGVtYWlk bGlzdCwgZmFsc2UpOwotCWVsc2UJCQkJCQkvKiBBUF9TZXRPYmplY3RzICovCisJZWxzZSBp ZiAoc3RtdC0+YWN0aW9uID09IEFQX1NldE9iamVjdHMpCiAJewogCQlMaXN0CSAgICpvbGRz Y2hlbWFpZHMgPSBHZXRQdWJsaWNhdGlvblNjaGVtYXMocHViZm9ybS0+b2lkKTsKIAkJTGlz dAkgICAqZGVsc2NoZW1hcyA9IE5JTDsKQEAgLTExNDAsNiArMTQ0NCwxMCBAQCBBbHRlclB1 YmxpY2F0aW9uU2NoZW1hcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJICovCiAJ CVB1YmxpY2F0aW9uQWRkU2NoZW1hcyhwdWJmb3JtLT5vaWQsIHNjaGVtYWlkbGlzdCwgdHJ1 ZSwgc3RtdCk7CiAJfQorCWVsc2UKKwl7CisJCS8qIE5vdGhpbmcgdG8gZG8gZm9yIEFQX1Nl dENvbHVtbnMgKi8KKwl9CiB9CiAKIC8qCkBAIC0xNDAyLDYgKzE3MTAsNyBAQCBPcGVuVGFi bGVMaXN0KExpc3QgKnRhYmxlcykKIAlMaXN0CSAgICpyZWxzID0gTklMOwogCUxpc3RDZWxs ICAgKmxjOwogCUxpc3QJICAgKnJlbGlkc193aXRoX3JmID0gTklMOworCUxpc3QJICAgKnJl bGlkc193aXRoX2NmID0gTklMOwogCiAJLyoKIAkgKiBPcGVuLCBzaGFyZS1sb2NrLCBhbmQg Y2hlY2sgYWxsIHRoZSBleHBsaWNpdGx5LXNwZWNpZmllZCByZWxhdGlvbnMKQEAgLTE0MzYs NiArMTc0NSwxMyBAQCBPcGVuVGFibGVMaXN0KExpc3QgKnRhYmxlcykKIAkJCQkJCSBlcnJt c2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBXSEVSRSBjbGF1c2VzIGZvciB0YWJsZSBc IiVzXCIiLAogCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwogCisJ CQkvKiBEaXNhbGxvdyBkdXBsaWNhdGUgdGFibGVzIGlmIHRoZXJlIGFyZSBhbnkgd2l0aCBj b2x1bW4gZmlsdGVycy4gKi8KKwkJCWlmICh0LT5jb2x1bW5zIHx8IGxpc3RfbWVtYmVyX29p ZChyZWxpZHNfd2l0aF9jZiwgbXlyZWxpZCkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX09CSkVDVCksCisJCQkJCQkgZXJybXNnKCJj b25mbGljdGluZyBvciByZWR1bmRhbnQgY29sdW1uIGZpbHRlcnMgZm9yIHRhYmxlIFwiJXNc IiIsCisJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CisKIAkJCXRh YmxlX2Nsb3NlKHJlbCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAkJCWNvbnRpbnVl OwogCQl9CkBAIC0xNDQzLDEyICsxNzU5LDE2IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFi bGVzKQogCQlwdWJfcmVsID0gcGFsbG9jKHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsK IAkJcHViX3JlbC0+cmVsYXRpb24gPSByZWw7CiAJCXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0g dC0+d2hlcmVDbGF1c2U7CisJCXB1Yl9yZWwtPmNvbHVtbnMgPSB0LT5jb2x1bW5zOwogCQly ZWxzID0gbGFwcGVuZChyZWxzLCBwdWJfcmVsKTsKIAkJcmVsaWRzID0gbGFwcGVuZF9vaWQo cmVsaWRzLCBteXJlbGlkKTsKIAogCQlpZiAodC0+d2hlcmVDbGF1c2UpCiAJCQlyZWxpZHNf d2l0aF9yZiA9IGxhcHBlbmRfb2lkKHJlbGlkc193aXRoX3JmLCBteXJlbGlkKTsKIAorCQlp ZiAodC0+Y29sdW1ucykKKwkJCXJlbGlkc193aXRoX2NmID0gbGFwcGVuZF9vaWQocmVsaWRz X3dpdGhfY2YsIG15cmVsaWQpOworCiAJCS8qCiAJCSAqIEFkZCBjaGlsZHJlbiBvZiB0aGlz IHJlbCwgaWYgcmVxdWVzdGVkLCBzbyB0aGF0IHRoZXkgdG9vIGFyZSBhZGRlZAogCQkgKiB0 byB0aGUgcHVibGljYXRpb24uICBBIHBhcnRpdGlvbmVkIHRhYmxlIGNhbid0IGhhdmUgYW55 IGluaGVyaXRhbmNlCkBAIC0xNDg4LDYgKzE4MDgsMTggQEAgT3BlblRhYmxlTGlzdChMaXN0 ICp0YWJsZXMpCiAJCQkJCQkJCSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBX SEVSRSBjbGF1c2VzIGZvciB0YWJsZSBcIiVzXCIiLAogCQkJCQkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpKSk7CiAKKwkJCQkJLyoKKwkJCQkJICogV2UgZG9uJ3QgYWxs b3cgdG8gc3BlY2lmeSBjb2x1bW4gZmlsdGVyIGZvciBib3RoIHBhcmVudAorCQkJCQkgKiBh bmQgY2hpbGQgdGFibGUgYXQgdGhlIHNhbWUgdGltZSBhcyBpdCBpcyBub3QgdmVyeQorCQkJ CQkgKiBjbGVhciB3aGljaCBvbmUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuCisJCQkJ CSAqLworCQkJCQlpZiAoY2hpbGRyZWxpZCAhPSBteXJlbGlkICYmCisJCQkJCQkodC0+Y29s dW1ucyB8fCBsaXN0X21lbWJlcl9vaWQocmVsaWRzX3dpdGhfY2YsIGNoaWxkcmVsaWQpKSkK KwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRFVQTElD QVRFX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFu dCBjb2x1bW4gZml0ZXJzIGZvciB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJCVJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CisKIAkJCQkJY29udGludWU7CiAJCQkJfQogCkBA IC0xNDk3LDExICsxODI5LDE2IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQkJ CXB1Yl9yZWwtPnJlbGF0aW9uID0gcmVsOwogCQkJCS8qIGNoaWxkIGluaGVyaXRzIFdIRVJF IGNsYXVzZSBmcm9tIHBhcmVudCAqLwogCQkJCXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+ d2hlcmVDbGF1c2U7CisJCQkJLyogY2hpbGQgaW5oZXJpdHMgY29sdW1uIGxpc3QgZnJvbSBw YXJlbnQgKi8KKwkJCQlwdWJfcmVsLT5jb2x1bW5zID0gdC0+Y29sdW1uczsKIAkJCQlyZWxz ID0gbGFwcGVuZChyZWxzLCBwdWJfcmVsKTsKIAkJCQlyZWxpZHMgPSBsYXBwZW5kX29pZChy ZWxpZHMsIGNoaWxkcmVsaWQpOwogCiAJCQkJaWYgKHQtPndoZXJlQ2xhdXNlKQogCQkJCQly ZWxpZHNfd2l0aF9yZiA9IGxhcHBlbmRfb2lkKHJlbGlkc193aXRoX3JmLCBjaGlsZHJlbGlk KTsKKworCQkJCWlmICh0LT53aGVyZUNsYXVzZSkKKwkJCQkJcmVsaWRzX3dpdGhfY2YgPSBs YXBwZW5kX29pZChyZWxpZHNfd2l0aF9jZiwgY2hpbGRyZWxpZCk7CiAJCQl9CiAJCX0KIAl9 CkBAIC0xNjEwLDYgKzE5NDcsMTEgQEAgUHVibGljYXRpb25Ecm9wVGFibGVzKE9pZCBwdWJp ZCwgTGlzdCAqcmVscywgYm9vbCBtaXNzaW5nX29rKQogCQlSZWxhdGlvbglyZWwgPSBwdWJy ZWwtPnJlbGF0aW9uOwogCQlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsK IAorCQlpZiAocHVicmVsLT5jb2x1bW5zKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiY29sdW1uIGxpc3Qg bXVzdCBub3QgYmUgc3BlY2lmaWVkIGluIEFMVEVSIFBVQkxJQ0FUSU9OIC4uLiBEUk9QIikp OworCiAJCXByaWQgPSBHZXRTeXNDYWNoZU9pZDIoUFVCTElDQVRJT05SRUxNQVAsIEFudW1f cGdfcHVibGljYXRpb25fcmVsX29pZCwKIAkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHJl bGlkKSwKIAkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCmluZGV4IGRjNTg3MmY5ODhjLi5hOWZkMGYwYzg5NSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTgzNjUsNiArODM2NSw3IEBAIEFURXhlY0Ry b3BDb2x1bW4oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xO YW1lLAogCQkJCSBib29sIG1pc3Npbmdfb2ssIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJCSBP YmplY3RBZGRyZXNzZXMgKmFkZHJzKQogeworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRS ZWxpZChyZWwpOwogCUhlYXBUdXBsZQl0dXBsZTsKIAlGb3JtX3BnX2F0dHJpYnV0ZSB0YXJn ZXRhdHQ7CiAJQXR0ck51bWJlcglhdHRudW07CkBAIC04Mzg0LDcgKzgzODUsNyBAQCBBVEV4 ZWNEcm9wQ29sdW1uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAq Y29sTmFtZSwKIAkvKgogCSAqIGdldCB0aGUgbnVtYmVyIG9mIHRoZSBhdHRyaWJ1dGUKIAkg Ki8KLQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJl bCksIGNvbE5hbWUpOworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBj b2xOYW1lKTsKIAlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQogCXsKIAkJaWYgKCFt aXNzaW5nX29rKQpAQCAtODQzOCwxMyArODQzOSw0MiBAQCBBVEV4ZWNEcm9wQ29sdW1uKExp c3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKIAogCVJl bGVhc2VTeXNDYWNoZSh0dXBsZSk7CiAKKwkvKgorCSAqIEFsc28sIGlmIHRoZSBjb2x1bW4g aXMgdXNlZCBpbiB0aGUgY29sdW1uIGxpc3Qgb2YgYSBwdWJsaWNhdGlvbiwKKwkgKiBkaXNh bGxvdyB0aGUgZHJvcCBpZiB0aGUgRFJPUCBpcyBSRVNUUklDVC4gIFdlIGRvbid0IGRvIGFu eXRoaW5nIGlmIHRoZQorCSAqIERST1AgaXMgQ0FTQ0FERSwgd2hpY2ggbWVhbnMgdGhhdCB0 aGUgZGVwZW5kZW5jeSBtZWNoYW5pc20gd2lsbCByZW1vdmUKKwkgKiB0aGUgcmVsYXRpb24g ZnJvbSB0aGUgcHVibGljYXRpb24uCisJICovCisJaWYgKGJlaGF2aW9yID09IERST1BfUkVT VFJJQ1QpCisJeworCQlMaXN0CSAgICpwdWJzOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlw dWJzID0gR2V0UmVsYXRpb25Db2x1bW5QYXJ0aWFsUHVibGljYXRpb25zKHJlbGlkKTsKKwkJ Zm9yZWFjaChsYywgcHVicykKKwkJeworCQkJT2lkCQkJcHViaWQgPSBsZmlyc3Rfb2lkKGxj KTsKKwkJCUxpc3QJICAgKnB1Ymxpc2hlZF9jb2xzOworCisJCQlwdWJsaXNoZWRfY29scyA9 CisJCQkJR2V0UmVsYXRpb25Db2x1bW5MaXN0SW5QdWJsaWNhdGlvbihyZWxpZCwgcHViaWQp OworCisJCQlpZiAobGlzdF9tZW1iZXJfb2lkKHB1Ymxpc2hlZF9jb2xzLCBhdHRudW0pKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UQUJM RV9ERUZJTklUSU9OKSwKKwkJCQkJCWVycm1zZygiY2Fubm90IGRyb3AgY29sdW1uIFwiJXNc IiBiZWNhdXNlIGl0IGlzIHBhcnQgb2YgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkg ICBjb2xOYW1lLCBnZXRfcHVibGljYXRpb25fbmFtZShwdWJpZCwgZmFsc2UpKSwKKwkJCQkJ CWVycmhpbnQoIlNwZWNpZnkgQ0FTQ0FERSBvciB1c2UgQUxURVIgUFVCTElDQVRJT04gdG8g cmVtb3ZlIHRoZSBjb2x1bW4gZnJvbSB0aGUgcHVibGljYXRpb24uIikpOworCQl9CisJfQor CiAJLyoKIAkgKiBQcm9wYWdhdGUgdG8gY2hpbGRyZW4gYXMgYXBwcm9wcmlhdGUuICBVbmxp a2UgbW9zdCBvdGhlciBBTFRFUgogCSAqIHJvdXRpbmVzLCB3ZSBoYXZlIHRvIGRvIHRoaXMg b25lIGxldmVsIG9mIHJlY3Vyc2lvbiBhdCBhIHRpbWU7IHdlIGNhbid0CiAJICogdXNlIGZp bmRfYWxsX2luaGVyaXRvcnMgdG8gZG8gaXQgaW4gb25lIHBhc3MuCiAJICovCiAJY2hpbGRy ZW4gPQotCQlmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKFJlbGF0aW9uR2V0UmVsaWQocmVs KSwgbG9ja21vZGUpOworCQlmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKHJlbGlkLCBsb2Nr bW9kZSk7CiAKIAlpZiAoY2hpbGRyZW4pCiAJewpAQCAtODUzMiw3ICs4NTYyLDcgQEAgQVRF eGVjRHJvcENvbHVtbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIg KmNvbE5hbWUsCiAKIAkvKiBBZGQgb2JqZWN0IHRvIGRlbGV0ZSAqLwogCW9iamVjdC5jbGFz c0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwotCW9iamVjdC5vYmplY3RJZCA9IFJlbGF0aW9u R2V0UmVsaWQocmVsKTsKKwlvYmplY3Qub2JqZWN0SWQgPSByZWxpZDsKIAlvYmplY3Qub2Jq ZWN0U3ViSWQgPSBhdHRudW07CiAJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNzKCZvYmplY3Qs IGFkZHJzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRl eCBkZTEwNmQ3NjdkMS4uZDg3YmUyZDQ3NzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSZXBsaWNhdGlvbi5jCkBAIC01NzMsOSArNTczLDYgQEAgQ2hlY2tDbWRSZXBsaWNhSWRl bnRpdHkoUmVsYXRpb24gcmVsLCBDbWRUeXBlIGNtZCkKIAlpZiAoY21kICE9IENNRF9VUERB VEUgJiYgY21kICE9IENNRF9ERUxFVEUpCiAJCXJldHVybjsKIAotCWlmIChyZWwtPnJkX3Jl bC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCkKLQkJcmV0dXJuOwot CiAJLyoKIAkgKiBJdCBpcyBvbmx5IHNhZmUgdG8gZXhlY3V0ZSBVUERBVEUvREVMRVRFIHdo ZW4gYWxsIGNvbHVtbnMsIHJlZmVyZW5jZWQKIAkgKiBpbiB0aGUgcm93IGZpbHRlcnMgZnJv bSBwdWJsaWNhdGlvbnMgd2hpY2ggdGhlIHJlbGF0aW9uIGlzIGluLCBhcmUKQEAgLTU5NSwx NyArNTkyLDMzIEBAIENoZWNrQ21kUmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbCwgQ21k VHlwZSBjbWQpCiAJCQkJIGVycm1zZygiY2Fubm90IHVwZGF0ZSB0YWJsZSBcIiVzXCIiLAog CQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCiAJCQkJIGVycmRldGFpbCgi Q29sdW1uIHVzZWQgaW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90 IHBhcnQgb2YgdGhlIHJlcGxpY2EgaWRlbnRpdHkuIikpKTsKKwllbHNlIGlmIChjbWQgPT0g Q01EX1VQREFURSAmJiAhcHViZGVzYy5jZl92YWxpZF9mb3JfdXBkYXRlKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNF KSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRlIHRhYmxlIFwiJXNcIiIsCisJCQkJCQlS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKKwkJCQkgZXJyZGV0YWlsKCJDb2x1bW4g ZmlsdGVyIHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBs aWNhIGlkZW50aXR5LiIpKSk7CiAJZWxzZSBpZiAoY21kID09IENNRF9ERUxFVEUgJiYgIXB1 YmRlc2MucmZfdmFsaWRfZm9yX2RlbGV0ZSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCiAJCQkJIGVycm1zZygi Y2Fubm90IGRlbGV0ZSBmcm9tIHRhYmxlIFwiJXNcIiIsCiAJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKSwKIAkJCQkgZXJyZGV0YWlsKCJDb2x1bW4gdXNlZCBpbiB0aGUg cHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBpcyBub3QgcGFydCBvZiB0aGUgcmVwbGlj YSBpZGVudGl0eS4iKSkpOworCWVsc2UgaWYgKGNtZCA9PSBDTURfREVMRVRFICYmICFwdWJk ZXNjLmNmX3ZhbGlkX2Zvcl9kZWxldGUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAorCQkJCSBlcnJtc2coImNh bm5vdCBkZWxldGUgZnJvbSB0YWJsZSBcIiVzXCIiLAorCQkJCQkJUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocmVsKSksCisJCQkJIGVycmRldGFpbCgiQ29sdW1uIGZpbHRlciB1c2VkIGJ5 IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4i KSkpOwogCiAJLyogSWYgcmVsYXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgd2UgYXJlIGFs d2F5cyBnb29kLiAqLwogCWlmIChPaWRJc1ZhbGlkKFJlbGF0aW9uR2V0UmVwbGljYUluZGV4 KHJlbCkpKQogCQlyZXR1cm47CiAKKwkvKiBSRVBMSUNBIElERU5USVRZIEZVTEwgaXMgYWxz byBnb29kIGZvciBVUERBVEUvREVMRVRFLiAqLworCWlmIChyZWwtPnJkX3JlbC0+cmVscmVw bGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCkKKwkJcmV0dXJuOworCiAJLyoKIAkg KiBUaGlzIGlzIGVpdGhlciBVUERBVEUgT1IgREVMRVRFIGFuZCB0aGVyZSBpcyBubyByZXBs aWNhIGlkZW50aXR5LgogCSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5 ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCmluZGV4IGQ0Zjg0NTVh MmJkLi5hNTA0NDM3ODczZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTQ4NTAsNiAr NDg1MCw3IEBAIF9jb3B5UHVibGljYXRpb25UYWJsZShjb25zdCBQdWJsaWNhdGlvblRhYmxl ICpmcm9tKQogCiAJQ09QWV9OT0RFX0ZJRUxEKHJlbGF0aW9uKTsKIAlDT1BZX05PREVfRklF TEQod2hlcmVDbGF1c2UpOworCUNPUFlfTk9ERV9GSUVMRChjb2x1bW5zKTsKIAogCXJldHVy biBuZXdub2RlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5j cy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCmluZGV4IGYxMDAyYWZlN2Ew Li40ZmMxNmNlMDRlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMjMyMiw2ICsy MzIyLDcgQEAgX2VxdWFsUHVibGljYXRpb25UYWJsZShjb25zdCBQdWJsaWNhdGlvblRhYmxl ICphLCBjb25zdCBQdWJsaWNhdGlvblRhYmxlICpiKQogewogCUNPTVBBUkVfTk9ERV9GSUVM RChyZWxhdGlvbik7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKHdoZXJlQ2xhdXNlKTsKKwlDT01Q QVJFX05PREVfRklFTEQoY29sdW1ucyk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3Jh bS55CmluZGV4IGEwM2IzM2I1M2JkLi4yNWM5YjI5YWZkZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBA IC05NzUxLDEzICs5NzUxLDE0IEBAIENyZWF0ZVB1YmxpY2F0aW9uU3RtdDoKICAqIHJlbGF0 aW9uX2V4cHIgaGVyZS4KICAqLwogUHVibGljYXRpb25PYmpTcGVjOgotCQkJVEFCTEUgcmVs YXRpb25fZXhwciBPcHRXaGVyZUNsYXVzZQorCQkJVEFCTEUgcmVsYXRpb25fZXhwciBvcHRf Y29sdW1uX2xpc3QgT3B0V2hlcmVDbGF1c2UKIAkJCQl7CiAJCQkJCSQkID0gbWFrZU5vZGUo UHVibGljYXRpb25PYmpTcGVjKTsKIAkJCQkJJCQtPnB1Ym9ianR5cGUgPSBQVUJMSUNBVElP Tk9CSl9UQUJMRTsKIAkJCQkJJCQtPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25U YWJsZSk7CiAJCQkJCSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMjsKLQkJCQkJJCQtPnB1 YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQzOworCQkJCQkkJC0+cHVidGFibGUtPmNvbHVtbnMg PSAkMzsKKwkJCQkJJCQtPnB1YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQ0OwogCQkJCX0KIAkJ CXwgQUxMIFRBQkxFUyBJTl9QIFNDSEVNQSBDb2xJZAogCQkJCXsKQEAgLTk3NzIsMTEgKzk3 NzMsMTIgQEAgUHVibGljYXRpb25PYmpTcGVjOgogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBV QkxJQ0FUSU9OT0JKX1RBQkxFU19JTl9DVVJfU0NIRU1BOwogCQkJCQkkJC0+bG9jYXRpb24g PSBANTsKIAkJCQl9Ci0JCQl8IENvbElkIE9wdFdoZXJlQ2xhdXNlCisJCQl8IENvbElkIG9w dF9jb2x1bW5fbGlzdCBPcHRXaGVyZUNsYXVzZQogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9k ZShQdWJsaWNhdGlvbk9ialNwZWMpOwogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FU SU9OT0JKX0NPTlRJTlVBVElPTjsKLQkJCQkJaWYgKCQyKQorCQkJCQkvKiBGSVhNRSB0aGlz IGlzIGEgYml0IGN1bWJlcnNvbWUgKi8KKwkJCQkJaWYgKCQyIHx8ICQzKQogCQkJCQl7CiAJ CQkJCQkvKgogCQkJCQkJICogVGhlIE9wdFdoZXJlQ2xhdXNlIG11c3QgYmUgc3RvcmVkIGhl cmUgYnV0IGl0IGlzCkBAIC05Nzg2LDcgKzk3ODgsOCBAQCBQdWJsaWNhdGlvbk9ialNwZWM6 CiAJCQkJCQkgKi8KIAkJCQkJCSQkLT5wdWJ0YWJsZSA9IG1ha2VOb2RlKFB1YmxpY2F0aW9u VGFibGUpOwogCQkJCQkJJCQtPnB1YnRhYmxlLT5yZWxhdGlvbiA9IG1ha2VSYW5nZVZhcihO VUxMLCAkMSwgQDEpOwotCQkJCQkJJCQtPnB1YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQyOwor CQkJCQkJJCQtPnB1YnRhYmxlLT5jb2x1bW5zID0gJDI7CisJCQkJCQkkJC0+cHVidGFibGUt PndoZXJlQ2xhdXNlID0gJDM7CiAJCQkJCX0KIAkJCQkJZWxzZQogCQkJCQl7CkBAIC05Nzk0 LDIzICs5Nzk3LDI1IEBAIFB1YmxpY2F0aW9uT2JqU3BlYzoKIAkJCQkJfQogCQkJCQkkJC0+ bG9jYXRpb24gPSBAMTsKIAkJCQl9Ci0JCQl8IENvbElkIGluZGlyZWN0aW9uIE9wdFdoZXJl Q2xhdXNlCisJCQl8IENvbElkIGluZGlyZWN0aW9uIG9wdF9jb2x1bW5fbGlzdCBPcHRXaGVy ZUNsYXVzZQogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMp OwogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX0NPTlRJTlVBVElPTjsK IAkJCQkJJCQtPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CiAJCQkJ CSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSBtYWtlUmFuZ2VWYXJGcm9tUXVhbGlmaWVkTmFt ZSgkMSwgJDIsIEAxLCB5eXNjYW5uZXIpOwotCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xh dXNlID0gJDM7CisJCQkJCSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQzOworCQkJCQkkJC0+ cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDQ7CiAJCQkJCSQkLT5sb2NhdGlvbiA9IEAxOwog CQkJCX0KIAkJCS8qIGdyYW1tYXIgbGlrZSB0YWJsZW5hbWUgKiAsIE9OTFkgdGFibGVuYW1l LCBPTkxZICggdGFibGVuYW1lICkgKi8KLQkJCXwgZXh0ZW5kZWRfcmVsYXRpb25fZXhwciBP cHRXaGVyZUNsYXVzZQorCQkJfCBleHRlbmRlZF9yZWxhdGlvbl9leHByIG9wdF9jb2x1bW5f bGlzdCBPcHRXaGVyZUNsYXVzZQogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShQdWJsaWNh dGlvbk9ialNwZWMpOwogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX0NP TlRJTlVBVElPTjsKIAkJCQkJJCQtPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25U YWJsZSk7CiAJCQkJCSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMTsKLQkJCQkJJCQtPnB1 YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQyOworCQkJCQkkJC0+cHVidGFibGUtPmNvbHVtbnMg PSAkMjsKKwkJCQkJJCQtPnB1YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQzOwogCQkJCX0KIAkJ CXwgQ1VSUkVOVF9TQ0hFTUEKIAkJCQl7CkBAIC05ODM2LDYgKzk4NDEsMTAgQEAgcHViX29i al9saXN0OiAJUHVibGljYXRpb25PYmpTcGVjCiAgKgogICogQUxURVIgUFVCTElDQVRJT04g bmFtZSBTRVQgcHViX29iaiBbLCAuLi5dCiAgKgorICogQUxURVIgUFVCTElDQVRJT04gbmFt ZSBTRVQgQ09MVU1OUyB0YWJsZV9uYW1lIChjb2x1bW5bLCAuLi5dKQorICoKKyAqIEFMVEVS IFBVQkxJQ0FUSU9OIG5hbWUgU0VUIENPTFVNTlMgdGFibGVfbmFtZSBBTEwKKyAqCiAgKiBw dWJfb2JqIGlzIG9uZSBvZjoKICAqCiAgKgkJVEFCTEUgdGFibGVfbmFtZSBbLCAuLi5dCkBA IC05ODY5LDYgKzk4NzgsMzIgQEAgQWx0ZXJQdWJsaWNhdGlvblN0bXQ6CiAJCQkJCW4tPmFj dGlvbiA9IEFQX1NldE9iamVjdHM7CiAJCQkJCSQkID0gKE5vZGUgKiluOwogCQkJCX0KKwkJ CXwgQUxURVIgUFVCTElDQVRJT04gbmFtZSBBTFRFUiBUQUJMRSByZWxhdGlvbl9leHByIFNF VCBDT0xVTU5TICcoJyBjb2x1bW5MaXN0ICcpJworCQkJCXsKKwkJCQkJQWx0ZXJQdWJsaWNh dGlvblN0bXQgKm4gPSBtYWtlTm9kZShBbHRlclB1YmxpY2F0aW9uU3RtdCk7CisJCQkJCVB1 YmxpY2F0aW9uT2JqU3BlYyAqb2JqID0gbWFrZU5vZGUoUHVibGljYXRpb25PYmpTcGVjKTsK KwkJCQkJb2JqLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfVEFCTEU7CisJCQkJCW9i ai0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKKwkJCQkJb2JqLT5w dWJ0YWJsZS0+cmVsYXRpb24gPSAkNjsKKwkJCQkJb2JqLT5wdWJ0YWJsZS0+Y29sdW1ucyA9 ICQxMDsKKwkJCQkJbi0+cHVibmFtZSA9ICQzOworCQkJCQluLT5wdWJvYmplY3RzID0gbGlz dF9tYWtlMShvYmopOworCQkJCQluLT5hY3Rpb24gPSBBUF9TZXRDb2x1bW5zOworCQkJCQkk JCA9IChOb2RlICopIG47CisJCQkJfQorCQkJfCBBTFRFUiBQVUJMSUNBVElPTiBuYW1lIEFM VEVSIFRBQkxFIHJlbGF0aW9uX2V4cHIgU0VUIENPTFVNTlMgQUxMCisJCQkJeworCQkJCQlB bHRlclB1YmxpY2F0aW9uU3RtdCAqbiA9IG1ha2VOb2RlKEFsdGVyUHVibGljYXRpb25TdG10 KTsKKwkJCQkJUHVibGljYXRpb25PYmpTcGVjICpvYmogPSBtYWtlTm9kZShQdWJsaWNhdGlv bk9ialNwZWMpOworCQkJCQlvYmotPnB1Ym9ianR5cGUgPSBQVUJMSUNBVElPTk9CSl9UQUJM RTsKKwkJCQkJb2JqLT5wdWJ0YWJsZSA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uVGFibGUpOwor CQkJCQlvYmotPnB1YnRhYmxlLT5yZWxhdGlvbiA9ICQ2OworCQkJCQlvYmotPnB1YnRhYmxl LT5jb2x1bW5zID0gTklMOworCQkJCQluLT5wdWJuYW1lID0gJDM7CisJCQkJCW4tPnB1Ym9i amVjdHMgPSBsaXN0X21ha2UxKG9iaik7CisJCQkJCW4tPmFjdGlvbiA9IEFQX1NldENvbHVt bnM7CisJCQkJCSQkID0gKE5vZGUgKikgbjsKKwkJCQl9CiAJCQl8IEFMVEVSIFBVQkxJQ0FU SU9OIG5hbWUgRFJPUCBwdWJfb2JqX2xpc3QKIAkJCQl7CiAJCQkJCUFsdGVyUHVibGljYXRp b25TdG10ICpuID0gbWFrZU5vZGUoQWx0ZXJQdWJsaWNhdGlvblN0bXQpOwpAQCAtMTc0ODgs NiArMTc1MjMsMTMgQEAgcHJlcHJvY2Vzc19wdWJvYmpfbGlzdChMaXN0ICpwdWJvYmpzcGVj X2xpc3QsIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKQogCQkJCQkJZXJybXNnKCJXSEVSRSBj bGF1c2Ugbm90IGFsbG93ZWQgZm9yIHNjaGVtYSIpLAogCQkJCQkJcGFyc2VyX2VycnBvc2l0 aW9uKHB1Ym9iai0+bG9jYXRpb24pKTsKIAorCQkJLyogQ29sdW1uIGZpbHRlciBpcyBub3Qg YWxsb3dlZCBvbiBhIHNjaGVtYSBvYmplY3QgKi8KKwkJCWlmIChwdWJvYmotPnB1YnRhYmxl ICYmIHB1Ym9iai0+cHVidGFibGUtPmNvbHVtbnMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJZXJybXNnKCJjb2x1 bW4gc3BlY2lmaWNhdGlvbiBub3QgYWxsb3dlZCBmb3Igc2NoZW1hIiksCisJCQkJCQlwYXJz ZXJfZXJycG9zaXRpb24ocHVib2JqLT5sb2NhdGlvbikpOworCiAJCQkvKgogCQkJICogV2Ug Y2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGRpZmZlcmVudCB0eXBlIG9mIHNjaGVtYQog CQkJICogb2JqZWN0cyBiYXNlZCBvbiB3aGV0aGVyIG5hbWUgYW5kIHB1YnRhYmxlIGlzIHNl dC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8u YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBjOWIw ZWVlZmQ3ZS4uMWU4Nzg1ZmY5YTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Byb3RvLmMKQEAgLTI5LDE2ICsyOSwyMSBAQAogI2RlZmluZSBUUlVOQ0FURV9DQVND QURFCQkoMTw8MCkKICNkZWZpbmUgVFJVTkNBVEVfUkVTVEFSVF9TRVFTCSgxPDwxKQogCi1z dGF0aWMgdm9pZCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0luZm8gb3V0LCBSZWxh dGlvbiByZWwpOworc3RhdGljIHZvaWQgbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJ bmZvIG91dCwgUmVsYXRpb24gcmVsLAorCQkJCQkJCQkgICBCaXRtYXBzZXQgKmNvbHVtbnMp Owogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93cml0ZV90dXBsZShTdHJpbmdJbmZvIG91dCwg UmVsYXRpb24gcmVsLAogCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJ CQkJICAgYm9vbCBiaW5hcnkpOworCQkJCQkJCQkgICBib29sIGJpbmFyeSwgQml0bWFwc2V0 ICpjb2x1bW5zKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9hdHRycyhTdHJpbmdJ bmZvIGluLCBMb2dpY2FsUmVwUmVsYXRpb24gKnJlbCk7CiBzdGF0aWMgdm9pZCBsb2dpY2Fs cmVwX3JlYWRfdHVwbGUoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFR1cGxlRGF0YSAqdHVw bGUpOwogCiBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dyaXRlX25hbWVzcGFjZShTdHJpbmdJ bmZvIG91dCwgT2lkIG5zcGlkKTsKIHN0YXRpYyBjb25zdCBjaGFyICpsb2dpY2FscmVwX3Jl YWRfbmFtZXNwYWNlKFN0cmluZ0luZm8gaW4pOwogCisjZGVmaW5lCUNvbHVtbkluRmlsdGVy KGNvbHVtbnMsIGF0dG51bSkgXAorCQkoKChjb2x1bW5zKSA9PSBOVUxMKSB8fCAoYm1zX2lz X21lbWJlcigoYXR0bnVtKSwgKGNvbHVtbnMpKSkpCisKKwogLyoKICAqIFdyaXRlIEJFR0lO IHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0zOTgsNyArNDAzLDcgQEAgbG9naWNh bHJlcF9yZWFkX29yaWdpbihTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpvcmlnaW5fbHNu KQogICovCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwg VHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKLQkJCQkJCVR1cGxlVGFibGVTbG90 ICpuZXdzbG90LCBib29sIGJpbmFyeSkKKwkJCQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90 LCBib29sIGJpbmFyeSwgQml0bWFwc2V0ICpjb2x1bW5zKQogewogCXBxX3NlbmRieXRlKG91 dCwgTE9HSUNBTF9SRVBfTVNHX0lOU0VSVCk7CiAKQEAgLTQxMCw3ICs0MTUsNyBAQCBsb2dp Y2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs IFJlbGF0aW9uIHJlbCwKIAlwcV9zZW5kaW50MzIob3V0LCBSZWxhdGlvbkdldFJlbGlkKHJl bCkpOwogCiAJcHFfc2VuZGJ5dGUob3V0LCAnTicpOwkJLyogbmV3IHR1cGxlIGZvbGxvd3Mg Ki8KLQlsb2dpY2FscmVwX3dyaXRlX3R1cGxlKG91dCwgcmVsLCBuZXdzbG90LCBiaW5hcnkp OworCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG5ld3Nsb3QsIGJpbmFyeSwg Y29sdW1ucyk7CiB9CiAKIC8qCkBAIC00NDMsNyArNDQ4LDcgQEAgbG9naWNhbHJlcF9yZWFk X2luc2VydChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICpuZXd0dXApCiB2 b2lkCiBsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rp b25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAkJCQkJCVR1cGxlVGFibGVTbG90ICpvbGRzbG90 LCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCwKLQkJCQkJCWJvb2wgYmluYXJ5KQorCQkJCQkJ Ym9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAlwcV9zZW5kYnl0ZShvdXQs IExPR0lDQUxfUkVQX01TR19VUERBVEUpOwogCkBAIC00NjQsMTEgKzQ2OSwxMSBAQCBsb2dp Y2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs IFJlbGF0aW9uIHJlbCwKIAkJCXBxX3NlbmRieXRlKG91dCwgJ08nKTsJLyogb2xkIHR1cGxl IGZvbGxvd3MgKi8KIAkJZWxzZQogCQkJcHFfc2VuZGJ5dGUob3V0LCAnSycpOwkvKiBvbGQg a2V5IGZvbGxvd3MgKi8KLQkJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xk c2xvdCwgYmluYXJ5KTsKKwkJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xk c2xvdCwgYmluYXJ5LCBjb2x1bW5zKTsKIAl9CiAKIAlwcV9zZW5kYnl0ZShvdXQsICdOJyk7 CQkvKiBuZXcgdHVwbGUgZm9sbG93cyAqLwotCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0 LCByZWwsIG5ld3Nsb3QsIGJpbmFyeSk7CisJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQs IHJlbCwgbmV3c2xvdCwgYmluYXJ5LCBjb2x1bW5zKTsKIH0KIAogLyoKQEAgLTUzNyw3ICs1 NDIsNyBAQCBsb2dpY2FscmVwX3dyaXRlX2RlbGV0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAllbHNlCiAJCXBxX3NlbmRieXRlKG91dCwg J0snKTsJLyogb2xkIGtleSBmb2xsb3dzICovCiAKLQlsb2dpY2FscmVwX3dyaXRlX3R1cGxl KG91dCwgcmVsLCBvbGRzbG90LCBiaW5hcnkpOworCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUo b3V0LCByZWwsIG9sZHNsb3QsIGJpbmFyeSwgTlVMTCk7CiB9CiAKIC8qCkBAIC02NTIsNyAr NjU3LDggQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNj cmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVhbS4KICAqLwogdm9pZAotbG9naWNhbHJlcF93 cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBSZWxhdGlvbiBy ZWwpCitsb2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25J ZCB4aWQsIFJlbGF0aW9uIHJlbCwKKwkJCQkJIEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAlj aGFyCSAgICpyZWxuYW1lOwogCkBAIC02NzQsNyArNjgwLDcgQEAgbG9naWNhbHJlcF93cml0 ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBSZWxhdGlvbiByZWwp CiAJcHFfc2VuZGJ5dGUob3V0LCByZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50KTsKIAogCS8q IHNlbmQgdGhlIGF0dHJpYnV0ZSBpbmZvICovCi0JbG9naWNhbHJlcF93cml0ZV9hdHRycyhv dXQsIHJlbCk7CisJbG9naWNhbHJlcF93cml0ZV9hdHRycyhvdXQsIHJlbCwgY29sdW1ucyk7 CiB9CiAKIC8qCkBAIC03NTEsNyArNzU3LDcgQEAgbG9naWNhbHJlcF9yZWFkX3R5cChTdHJp bmdJbmZvIGluLCBMb2dpY2FsUmVwVHlwICpsdHlwKQogICovCiBzdGF0aWMgdm9pZAogbG9n aWNhbHJlcF93cml0ZV90dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBUdXBs ZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJICAgYm9vbCBiaW5hcnkpCisJCQkJCSAgIGJvb2wg YmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNjCWRlc2M7CiAJRGF0 dW0JICAgKnZhbHVlczsKQEAgLTc2Myw3ICs3NjksMTMgQEAgbG9naWNhbHJlcF93cml0ZV90 dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKIAogCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5uYXR0czsgaSsrKQogCXsKLQkJaWYgKFR1 cGxlRGVzY0F0dHIoZGVzYywgaSktPmF0dGlzZHJvcHBlZCB8fCBUdXBsZURlc2NBdHRyKGRl c2MsIGkpLT5hdHRnZW5lcmF0ZWQpCisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxl RGVzY0F0dHIoZGVzYywgaSk7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+ YXR0Z2VuZXJhdGVkKQorCQkJY29udGludWU7CisKKwkJLyogc2tpcCBjb2x1bW5zIG5vdCBp bmNsdWRlZCBpbiB0aGUgY29sdW1uIGZpbHRlciAqLworCQlpZiAoIUNvbHVtbkluRmlsdGVy KGNvbHVtbnMsIGF0dC0+YXR0bnVtKSkKIAkJCWNvbnRpbnVlOwogCQlubGl2ZWF0dHMrKzsK IAl9CkBAIC03ODMsNiArNzk1LDEwIEBAIGxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUoU3RyaW5n SW5mbyBvdXQsIFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCWlmIChh dHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQtPmF0dGdlbmVyYXRlZCkKIAkJCWNvbnRpbnVlOwog CisJCS8qIHNraXAgY29sdW1ucyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBmaWx0ZXIg Ki8KKwkJaWYgKCFDb2x1bW5JbkZpbHRlcihjb2x1bW5zLCBhdHQtPmF0dG51bSkpCisJCQlj b250aW51ZTsKKwogCQlpZiAoaXNudWxsW2ldKQogCQl7CiAJCQlwcV9zZW5kYnl0ZShvdXQs IExPR0lDQUxSRVBfQ09MVU1OX05VTEwpOwpAQCAtOTA0LDcgKzkyMCw3IEBAIGxvZ2ljYWxy ZXBfcmVhZF90dXBsZShTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBs ZSkKICAqIFdyaXRlIHJlbGF0aW9uIGF0dHJpYnV0ZSBtZXRhZGF0YSB0byB0aGUgc3RyZWFt LgogICovCiBzdGF0aWMgdm9pZAotbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZv IG91dCwgUmVsYXRpb24gcmVsKQorbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZv IG91dCwgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNj CWRlc2M7CiAJaW50CQkJaTsKQEAgLTkxNyw4ICs5MzMsMTUgQEAgbG9naWNhbHJlcF93cml0 ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsKQogCS8qIHNlbmQgbnVtYmVy IG9mIGxpdmUgYXR0cmlidXRlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5uYXR0czsg aSsrKQogCXsKLQkJaWYgKFR1cGxlRGVzY0F0dHIoZGVzYywgaSktPmF0dGlzZHJvcHBlZCB8 fCBUdXBsZURlc2NBdHRyKGRlc2MsIGkpLT5hdHRnZW5lcmF0ZWQpCisJCUZvcm1fcGdfYXR0 cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIoZGVzYywgaSk7CisKKwkJaWYgKGF0dC0+YXR0 aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQorCQkJY29udGludWU7CisKKwkJLyog c2tpcCBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29sdW1uIGZpbHRlciAqLworCQlp ZiAoIUNvbHVtbkluRmlsdGVyKGNvbHVtbnMsIGF0dC0+YXR0bnVtKSkKIAkJCWNvbnRpbnVl OworCiAJCW5saXZlYXR0cysrOwogCX0KIAlwcV9zZW5kaW50MTYob3V0LCBubGl2ZWF0dHMp OwpAQCAtOTM3LDYgKzk2MCwxMCBAQCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0lu Zm8gb3V0LCBSZWxhdGlvbiByZWwpCiAJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQt PmF0dGdlbmVyYXRlZCkKIAkJCWNvbnRpbnVlOwogCisJCS8qIHNraXAgY29sdW1ucyBub3Qg aW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBmaWx0ZXIgKi8KKwkJaWYgKCFDb2x1bW5JbkZpbHRl cihjb2x1bW5zLCBhdHQtPmF0dG51bSkpCisJCQljb250aW51ZTsKKwogCQkvKiBSRVBMSUNB IElERU5USVRZIEZVTEwgbWVhbnMgYWxsIGNvbHVtbnMgYXJlIHNlbnQgYXMgcGFydCBvZiBr ZXkuICovCiAJCWlmIChyZXBsaWRlbnRmdWxsIHx8CiAJCQlibXNfaXNfbWVtYmVyKGF0dC0+ YXR0bnVtIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCmluZGV4IDE2NTk5NjQ1 NzFjLi40MjcwOGRjZjgyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC90YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3RhYmxlc3luYy5jCkBAIC0xMTIsNiArMTEyLDcgQEAKICNpbmNsdWRlICJzdG9yYWdl L2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2Fj bC5oIgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRp bnMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9t ZW11dGlscy5oIgpAQCAtNzAwLDIwICs3MDEsMjIgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2lu Zm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAlXYWxSY3ZFeGVjUmVzdWx0ICpy ZXM7CiAJU3RyaW5nSW5mb0RhdGEgY21kOwogCVR1cGxlVGFibGVTbG90ICpzbG90OwotCU9p ZAkJCXRhYmxlUm93W10gPSB7T0lET0lELCBDSEFST0lELCBDSEFST0lEfTsKLQlPaWQJCQlh dHRyUm93W10gPSB7VEVYVE9JRCwgT0lET0lELCBCT09MT0lEfTsKKwlPaWQJCQl0YWJsZVJv d1tdID0ge09JRE9JRCwgQ0hBUk9JRCwgQ0hBUk9JRCwgQk9PTE9JRH07CisJT2lkCQkJYXR0 clJvd1tdID0ge0lOVDJPSUQsIFRFWFRPSUQsIE9JRE9JRCwgQk9PTE9JRH07CiAJT2lkCQkJ cXVhbFJvd1tdID0ge1RFWFRPSUR9OwogCWJvb2wJCWlzbnVsbDsKIAlpbnQJCQluYXR0Owog CUxpc3RDZWxsICAgKmxjOwogCWJvb2wJCWZpcnN0OworCWJvb2wJCWFtX3BhcnRpdGlvbjsK KwlCaXRtYXBzZXQgICppbmNsdWRlZF9jb2xzID0gTlVMTDsKIAogCWxyZWwtPm5zcG5hbWUg PSBuc3BuYW1lOwogCWxyZWwtPnJlbG5hbWUgPSByZWxuYW1lOwogCiAJLyogRmlyc3QgZmV0 Y2ggT2lkIGFuZCByZXBsaWNhIGlkZW50aXR5LiAqLwogCWluaXRTdHJpbmdJbmZvKCZjbWQp OwotCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIlNFTEVDVCBjLm9pZCwgYy5yZWxyZXBsaWRl bnQsIGMucmVsa2luZCIKKwlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJTRUxFQ1QgYy5vaWQs IGMucmVscmVwbGlkZW50LCBjLnJlbGtpbmQsIGMucmVsaXNwYXJ0aXRpb24iCiAJCQkJCSAi ICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgYyIKIAkJCQkJICIgIElOTkVSIEpPSU4gcGdf Y2F0YWxvZy5wZ19uYW1lc3BhY2UgbiIKIAkJCQkJICIgICAgICAgIE9OIChjLnJlbG5hbWVz cGFjZSA9IG4ub2lkKSIKQEAgLTc0MywxNCArNzQ2LDIyNSBAQCBmZXRjaF9yZW1vdGVfdGFi bGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAogCUFzc2VydCghaXNudWxs KTsKIAlscmVsLT5yZWxraW5kID0gRGF0dW1HZXRDaGFyKHNsb3RfZ2V0YXR0cihzbG90LCAz LCAmaXNudWxsKSk7CiAJQXNzZXJ0KCFpc251bGwpOworCWFtX3BhcnRpdGlvbiA9IERhdHVt R2V0Qm9vbChzbG90X2dldGF0dHIoc2xvdCwgNCwgJmlzbnVsbCkpOworCUFzc2VydCghaXNu dWxsKTsKIAogCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CiAJd2FscmN2 X2NsZWFyX3Jlc3VsdChyZXMpOwogCi0JLyogTm93IGZldGNoIGNvbHVtbnMuICovCisKKwkv KgorCSAqIEdldCByZWxhdGlvbidzIGNvbHVtbiBmaWx0ZXIgZXhwcmVzc2lvbnMuCisJICoK KwkgKiBGb3IgaW5pdGlhbCBzeW5jaHJvbml6YXRpb24sIGNvbHVtbiBmaWx0ZXIgY2FuIGJl IGlnbm9yZWQgaW4gZm9sbG93aW5nCisJICogY2FzZXM6CisJICoKKwkgKiAxKSBvbmUgb2Yg dGhlIHN1YnNjcmliZWQgcHVibGljYXRpb25zIGZvciB0aGUgdGFibGUgaGFzbid0IHNwZWNp ZmllZAorCSAqIGFueSBjb2x1bW4gZmlsdGVyCisJICoKKwkgKiAyKSBvbmUgb2YgdGhlIHN1 YnNjcmliZWQgcHVibGljYXRpb25zIGhhcyBwdWJhbGx0YWJsZXMgc2V0IHRvIHRydWUKKwkg KgorCSAqIDMpIG9uZSBvZiB0aGUgc3Vic2NyaWJlZCBwdWJsaWNhdGlvbnMgaXMgZGVjbGFy ZWQgYXMgQUxMIFRBQkxFUyBJTgorCSAqIFNDSEVNQSB0aGF0IGluY2x1ZGVzIHRoaXMgcmVs YXRpb24KKwkgKi8KKwlpZiAod2FscmN2X3NlcnZlcl92ZXJzaW9uKExvZ1JlcFdvcmtlcldh bFJjdkNvbm4pID49IDE1MDAwMCkKKwl7CisJCVdhbFJjdkV4ZWNSZXN1bHQgKnB1YnJlczsK KwkJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJCU9pZAkJCWF0dHJzUm93W10gPSB7SU5UMk9J RH07CisJCU9pZAkJCXRtcFJvd1tdID0ge0lOVDRPSUR9OworCQlTdHJpbmdJbmZvRGF0YSBw dWJsaWNhdGlvbnM7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwkJYm9vbAkJYWxsX2NvbHVt bnMgPSBmYWxzZTsKKworCQlpbml0U3RyaW5nSW5mbygmcHVibGljYXRpb25zKTsKKwkJZm9y ZWFjaChsYywgTXlTdWJzY3JpcHRpb24tPnB1YmxpY2F0aW9ucykKKwkJeworCQkJaWYgKCFm aXJzdCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZwdWJsaWNhdGlvbnMsICIsICIpOworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcHVibGljYXRpb25zLCBxdW90ZV9saXRlcmFsX2Nz dHIoc3RyVmFsKGxmaXJzdChsYykpKSk7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisKKwkJ LyoKKwkJICogRmlyc3QsIGNoZWNrIGlmIGFueSBvZiB0aGUgcHVibGljYXRpb25zIEZPUiBB TEwgVEFCTEVTPyBJZiB5ZXMsIHdlCisJCSAqIHNob3VsZCBub3QgdXNlIGFueSBjb2x1bW4g ZmlsdGVyLiBJdCdzIGVub3VnaCB0byBmaW5kIGEgc2luZ2xlIHN1Y2gKKwkJICogcHVibGlj YXRpb24uCisJCSAqCisJCSAqIFhYWCBNYXliZSB3ZSBjb3VsZCBjb21iaW5lIGFsbCB0aHJl ZSBzdGVwcyBpbnRvIGEgc2luZ2xlIHF1ZXJ5LCBidXQKKwkJICogdGhpcyBzZWVtcyBjbGVh bmVyIC8gZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisJCSAqCisJCSAqIFhYWCBEb2VzIHRoaXMg bmVlZCBhbnkgaGFuZGxpbmcgb2YgcGFydGl0aW9ucyAvIHB1Ymxpc2hfdmlhX3BhcnRfcm9v dD8KKwkJICovCisJCXJlc2V0U3RyaW5nSW5mbygmY21kKTsKKwkJYXBwZW5kU3RyaW5nSW5m bygmY21kLAorCQkJCQkJICJTRUxFQ1QgMVxuIgorCQkJCQkJICIgIEZST00gcGdfcHVibGlj YXRpb24gcFxuIgorCQkJCQkJICIgV0hFUkUgcC5wdWJuYW1lIElOICggJXMgKSBBTkQgcC5w dWJhbGx0YWJsZXMgTElNSVQgMVxuIiwKKwkJCQkJCSBwdWJsaWNhdGlvbnMuZGF0YSk7CisK KwkJcHVicmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgY21kLmRh dGEsCisJCQkJCQkJIGxlbmd0aG9mKHRtcFJvdyksIHRtcFJvdyk7CisKKwkJaWYgKHB1YnJl cy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJCSBlcnJtc2co ImNvdWxkIG5vdCBmZXRjaCBwdWJsaWNhdGlvbiBpbmZvIGZvciB0YWJsZSBcIiVzLiVzXCIg ZnJvbSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJCQluc3BuYW1lLCByZWxuYW1lLCBwdWJyZXMt PmVycikpKTsKKworCQlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHB1YnJlcy0+ dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKworCQlpZiAodHVwbGVzdG9yZV9n ZXR0dXBsZXNsb3QocHVicmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCisJ CQlhbGxfY29sdW1ucyA9IHRydWU7CisKKwkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xv dChzbG90KTsKKwkJd2FscmN2X2NsZWFyX3Jlc3VsdChwdWJyZXMpOworCisJCS8qCisJCSAq IElmIHRoZXJlJ3Mgbm8gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24sIGxvb2sgZm9yIGEg Rk9SIEFMTCBUQUJMRVMKKwkJICogSU4gU0NIRU1BIHB1YmxpY2F0aW9uLCB3aXRoIHNjaGVt YSBvZiB0aGUgcmVtb3RlIHJlbGF0aW9uLiBUaGUgbG9naWMKKwkJICogaXMgdGhlIHNhbWUg LSBzdWNoIHB1YmxpY2F0aW9ucyBoYXZlIG5vIGNvbHVtbiBmaWx0ZXJzLgorCQkgKgorCQkg KiBYWFggRG9lcyB0aGlzIG5lZWQgYW55IGhhbmRsaW5nIG9mIHBhcnRpdGlvbnMgLyBwdWJs aXNoX3ZpYV9wYXJ0X3Jvb3Q/CisJCSAqLworCQlpZiAoIWFsbF9jb2x1bW5zKQorCQl7CisJ CQlyZXNldFN0cmluZ0luZm8oJmNtZCk7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJ CQkJCQkJICJTRUxFQ1QgMVxuIgorCQkJCQkJCSAiICBGUk9NIHBnX3B1YmxpY2F0aW9uIHBc biIKKwkJCQkJCQkgIiAgICAgICBKT0lOIHBnX3B1YmxpY2F0aW9uX25hbWVzcGFjZSBwbiBP TiAocG4ucG5wdWJpZCA9IHAub2lkKVxuIgorCQkJCQkJCSAiICAgICAgIEpPSU4gcGdfY2xh c3MgYyBPTiAocG4ucG5uc3BpZCA9IGMucmVsbmFtZXNwYWNlKVxuIgorCQkJCQkJCSAiIFdI RVJFIGMub2lkID0gJXUgQU5EIHAucHVibmFtZSBJTiAoICVzICkgTElNSVQgMSIsCisJCQkJ CQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJCSBwdWJsaWNhdGlvbnMuZGF0YSk7CisKKwkJ CXB1YnJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRh LAorCQkJCQkJCQkgbGVuZ3Rob2YodG1wUm93KSwgdG1wUm93KTsKKworCQkJaWYgKHB1YnJl cy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkJCSBlcnJt c2coImNvdWxkIG5vdCBmZXRjaCBwdWJsaWNhdGlvbiBpbmZvIGZvciB0YWJsZSBcIiVzLiVz XCIgZnJvbSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJCQkJbnNwbmFtZSwgcmVsbmFtZSwgcHVi cmVzLT5lcnIpKSk7CisKKwkJCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocHVi cmVzLT50dXBsZWRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCisJCQlpZiAodHVwbGVz dG9yZV9nZXR0dXBsZXNsb3QocHVicmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xv dCkpCisJCQkJYWxsX2NvbHVtbnMgPSB0cnVlOworCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxl VGFibGVTbG90KHNsb3QpOworCQkJd2FscmN2X2NsZWFyX3Jlc3VsdChwdWJyZXMpOworCQl9 CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZW4ndCBmb3VuZCBhbnkgRk9SIEFMTCBUQUJMRVMg W0lOIFNDSEVNQV0gcHVibGljYXRpb25zIGZvcgorCQkgKiB0aGUgdGFibGUsIHdlIGhhdmUg dG8gbG9vayBmb3IgdGhlIGNvbHVtbiBmaWx0ZXJzIHNldCBmb3IgcmVsYXRpb25zLgorCQkg KiBGaXJzdCwgd2UgY2hlY2sgaWYgdGhlcmUncyBhIHB1YmxpY2F0aW9uIHdpdGggbm8gY29s dW1uIGZpbHRlciBmb3IKKwkJICogdGhlIHJlbGF0aW9uIC0gd2hpY2ggbWVhbnMgYWxsIGNv bHVtbnMgbmVlZCB0byBiZSByZXBsaWNhdGVkLgorCQkgKi8KKwkJaWYgKCFhbGxfY29sdW1u cykKKwkJeworCQkJcmVzZXRTdHJpbmdJbmZvKCZjbWQpOworCQkJYXBwZW5kU3RyaW5nSW5m bygmY21kLAorCQkJCQkJCSAiU0VMRUNUIDFcbiIKKwkJCQkJCQkgIiAgRlJPTSBwZ19jYXRh bG9nLnBnX3B1YmxpY2F0aW9uIHAgSk9JTlxuIgorCQkJCQkJCSAiICAgICAgIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb25fcmVsIHByIE9OIChwLm9pZCA9IHByLnBycHViaWQpXG4iCisJ CQkJCQkJICIgV0hFUkUgcC5wdWJuYW1lIElOICglcykgQU5EIHByLnByYXR0cnMgSVMgTlVM TCBBTkQgIiwKKwkJCQkJCQkgcHVibGljYXRpb25zLmRhdGEpOworCisJCQkvKgorCQkJICog Rm9yIG5vbi1wYXJ0aXRpb25zLCB3ZSBzaW1wbHkgam9pbiBkaXJlY3RseSB0byB0aGUgY2F0 YWxvZy4gRm9yCisJCQkgKiBwYXJ0aXRpb25zLCB3ZSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUg YW5jZXN0b3JzLCBiZWNhdXNlIG1heWJlIHRoZQorCQkJICogcm9vdCB3YXMgbm90IGFkZGVk IHRvIGEgcHVibGljYXRpb24gYnV0IG9uZSBvZiB0aGUgaW50ZXJtZWRpYXRlCisJCQkgKiBw YXJ0aXRpb25zIHdhcy4KKwkJCSAqLworCQkJaWYgKCFhbV9wYXJ0aXRpb24pCisJCQkJYXBw ZW5kU3RyaW5nSW5mbygmY21kLCAicHJyZWxpZCA9ICV1IiwgbHJlbC0+cmVtb3RlaWQpOwor CQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwKKwkJCQkJCQkJICJwcnJlbGlk IElOIChTRUxFQ1QgcmVsaWRcbiIKKwkJCQkJCQkJICIgICAgRlJPTSBwZ19jYXRhbG9nLnBn X3BhcnRpdGlvbl90cmVlKHBnX2NhdGFsb2cucGdfcGFydGl0aW9uX3Jvb3QoJXUpKSkiLAor CQkJCQkJCQkgbHJlbC0+cmVtb3RlaWQpOworCisJCQlwdWJyZXMgPSB3YWxyY3ZfZXhlYyhM b2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwKKwkJCQkJCQkJIGxlbmd0aG9mKHRt cFJvdyksIHRtcFJvdyk7CisKKwkJCWlmIChwdWJyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tf VFVQTEVTKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NP Tk5FQ1RJT05fRkFJTFVSRSksCisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZmV0Y2ggYXR0 cmlidXRlIGluZm8gZm9yIHRhYmxlIFwiJXMuJXNcIiBmcm9tIHB1Ymxpc2hlcjogJXMiLAor CQkJCQkJCQluc3BuYW1lLCByZWxuYW1lLCBwdWJyZXMtPmVycikpKTsKKworCQkJc2xvdCA9 IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChwdWJyZXMtPnR1cGxlZGVzYywgJlRUU09wc01p bmltYWxUdXBsZSk7CisKKwkJCWlmICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChwdWJyZXMt PnR1cGxlc3RvcmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwkJCQlhbGxfY29sdW1ucyA9IHRy dWU7CisKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCQl3YWxy Y3ZfY2xlYXJfcmVzdWx0KHB1YnJlcyk7CisJCX0KKworCQkvKgorCQkgKiBBbGwgdGhhdCAK KwkJICovCisJCWlmICghYWxsX2NvbHVtbnMpCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygm Y21kKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwKKwkJCQkJCQkgIlNFTEVDVCB1bm5l c3QocHIucHJhdHRycylcbiIKKwkJCQkJCQkgIiAgRlJPTSBwZ19jYXRhbG9nLnBnX3B1Ymxp Y2F0aW9uIHAgSk9JTlxuIgorCQkJCQkJCSAiICAgICAgIHBnX2NhdGFsb2cucGdfcHVibGlj YXRpb25fcmVsIHByIE9OIChwLm9pZCA9IHByLnBycHViaWQpXG4iCisJCQkJCQkJICIgV0hF UkUgcC5wdWJuYW1lIElOICglcykgQU5EIHByLnByYXR0cnMgSVMgTk9UIE5VTEwgQU5EICIs CisJCQkJCQkJIHB1YmxpY2F0aW9ucy5kYXRhKTsKKworCQkJLyoKKwkJCSAqIEZvciBub24t cGFydGl0aW9ucywgd2Ugc2ltcGx5IGpvaW4gZGlyZWN0bHkgdG8gdGhlIGNhdGFsb2cuIEZv cgorCQkJICogcGFydGl0aW9ucywgd2UgbmVlZCB0byBjaGVjayBhbGwgdGhlIGFuY2VzdG9y cywgYmVjYXVzZSBtYXliZSB0aGUKKwkJCSAqIHJvb3Qgd2FzIG5vdCBhZGRlZCB0byBhIHB1 YmxpY2F0aW9uIGJ1dCBvbmUgb2YgdGhlIGludGVybWVkaWF0ZQorCQkJICogcGFydGl0aW9u cyB3YXMuCisJCQkgKi8KKwkJCWlmICghYW1fcGFydGl0aW9uKQorCQkJCWFwcGVuZFN0cmlu Z0luZm8oJmNtZCwgInBycmVsaWQgPSAldSIsIGxyZWwtPnJlbW90ZWlkKTsKKwkJCWVsc2UK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkJCSAicHJyZWxpZCBJTiAoU0VM RUNUIHJlbGlkXG4iCisJCQkJCQkJCSAiICAgIEZST00gcGdfY2F0YWxvZy5wZ19wYXJ0aXRp b25fdHJlZShwZ19jYXRhbG9nLnBnX3BhcnRpdGlvbl9yb290KCV1KSkpIiwKKwkJCQkJCQkJ IGxyZWwtPnJlbW90ZWlkKTsKKworCQkJcHVicmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29y a2VyV2FsUmN2Q29ubiwgY21kLmRhdGEsCisJCQkJCQkJCSBsZW5ndGhvZihhdHRyc1Jvdyks IGF0dHJzUm93KTsKKworCQkJaWYgKHB1YnJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBM RVMpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ09OTkVD VElPTl9GQUlMVVJFKSwKKwkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBmZXRjaCBhdHRyaWJ1 dGUgaW5mbyBmb3IgdGFibGUgXCIlcy4lc1wiIGZyb20gcHVibGlzaGVyOiAlcyIsCisJCQkJ CQkJCW5zcG5hbWUsIHJlbG5hbWUsIHB1YnJlcy0+ZXJyKSkpOworCisJCQlzbG90ID0gTWFr ZVNpbmdsZVR1cGxlVGFibGVTbG90KHB1YnJlcy0+dHVwbGVkZXNjLCAmVFRTT3BzTWluaW1h bFR1cGxlKTsKKwkJCXdoaWxlICh0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChwdWJyZXMtPnR1 cGxlc3RvcmUsIHRydWUsIGZhbHNlLCBzbG90KSkKKwkJCXsKKwkJCQlBdHRyTnVtYmVyCWF0 dG51bTsKKworCQkJCWF0dG51bSA9IERhdHVtR2V0SW50MTYoc2xvdF9nZXRhdHRyKHNsb3Qs IDEsICZpc251bGwpKTsKKwkJCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJCQlpbmNsdWRlZF9j b2xzID0gYm1zX2FkZF9tZW1iZXIoaW5jbHVkZWRfY29scywgYXR0bnVtKTsKKwkJCX0KKwkJ CUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCQl3YWxyY3ZfY2xlYXJf cmVzdWx0KHB1YnJlcyk7CisJCX0KKworCQlwZnJlZShwdWJsaWNhdGlvbnMuZGF0YSk7CisJ fQorCisJLyoKKwkgKiBOb3cgZmV0Y2ggY29sdW1uIG5hbWVzIGFuZCB0eXBlcy4KKwkgKi8K IAlyZXNldFN0cmluZ0luZm8oJmNtZCk7CiAJYXBwZW5kU3RyaW5nSW5mbygmY21kLAotCQkJ CQkgIlNFTEVDVCBhLmF0dG5hbWUsIgorCQkJCQkgIlNFTEVDVCBhLmF0dG51bSwiCisJCQkJ CSAiICAgICAgIGEuYXR0bmFtZSwiCiAJCQkJCSAiICAgICAgIGEuYXR0dHlwaWQsIgogCQkJ CQkgIiAgICAgICBhLmF0dG51bSA9IEFOWShpLmluZGtleSkiCiAJCQkJCSAiICBGUk9NIHBn X2NhdGFsb2cucGdfYXR0cmlidXRlIGEiCkBAIC03NzgsMTYgKzk5MiwzNCBAQCBmZXRjaF9y ZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAogCWxyZWwt PmF0dHR5cHMgPSBwYWxsb2MwKE1heFR1cGxlQXR0cmlidXRlTnVtYmVyICogc2l6ZW9mKE9p ZCkpOwogCWxyZWwtPmF0dGtleXMgPSBOVUxMOwogCisJLyoKKwkgKiBTdG9yZSB0aGUgY29s dW1ucyBhcyBhIGxpc3Qgb2YgbmFtZXMuICBJZ25vcmUgdGhvc2UgdGhhdCBhcmUgbm90CisJ ICogcHJlc2VudCBpbiB0aGUgY29sdW1uIGxpc3QsIGlmIHRoZXJlIGlzIG9uZS4KKwkgKi8K IAluYXR0ID0gMDsKIAlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHJlcy0+dHVw bGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKIAl3aGlsZSAodHVwbGVzdG9yZV9nZXR0 dXBsZXNsb3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCiAJewotCQls cmVsLT5hdHRuYW1lc1tuYXR0XSA9Ci0JCQlUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0 YXR0cihzbG90LCAxLCAmaXNudWxsKSk7CisJCWNoYXIJICAgKnJlbF9jb2xuYW1lOworCQlB dHRyTnVtYmVyCWF0dG51bTsKKworCQlhdHRudW0gPSBEYXR1bUdldEludDE2KHNsb3RfZ2V0 YXR0cihzbG90LCAxLCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQlpZiAo aW5jbHVkZWRfY29scyAhPSBOVUxMICYmICFibXNfaXNfbWVtYmVyKGF0dG51bSwgaW5jbHVk ZWRfY29scykpCisJCXsKKwkJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCQkJY29udGludWU7 CisJCX0KKworCQlyZWxfY29sbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoc2xvdF9nZXRh dHRyKHNsb3QsIDIsICZpc251bGwpKTsKIAkJQXNzZXJ0KCFpc251bGwpOwotCQlscmVsLT5h dHR0eXBzW25hdHRdID0gRGF0dW1HZXRPYmplY3RJZChzbG90X2dldGF0dHIoc2xvdCwgMiwg JmlzbnVsbCkpOworCisJCWxyZWwtPmF0dG5hbWVzW25hdHRdID0gcmVsX2NvbG5hbWU7CisJ CWxyZWwtPmF0dHR5cHNbbmF0dF0gPSBEYXR1bUdldE9iamVjdElkKHNsb3RfZ2V0YXR0cihz bG90LCAzLCAmaXNudWxsKSk7CiAJCUFzc2VydCghaXNudWxsKTsKLQkJaWYgKERhdHVtR2V0 Qm9vbChzbG90X2dldGF0dHIoc2xvdCwgMywgJmlzbnVsbCkpKQorCisJCWlmIChEYXR1bUdl dEJvb2woc2xvdF9nZXRhdHRyKHNsb3QsIDQsICZpc251bGwpKSkKIAkJCWxyZWwtPmF0dGtl eXMgPSBibXNfYWRkX21lbWJlcihscmVsLT5hdHRrZXlzLCBuYXR0KTsKIAogCQkvKiBTaG91 bGQgbmV2ZXIgaGFwcGVuLiAqLwpAQCAtODIxLDYgKzEwNTMsOSBAQCBmZXRjaF9yZW1vdGVf dGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAogCSAqCiAJICogMykg b25lIG9mIHRoZSBzdWJzY3JpYmVkIHB1YmxpY2F0aW9ucyBpcyBkZWNsYXJlZCBhcyBBTEwg VEFCTEVTIElOCiAJICogU0NIRU1BIHRoYXQgaW5jbHVkZXMgdGhpcyByZWxhdGlvbgorCSAq CisJICogWFhYIERvZXMgdGhpcyBhY3R1YWxseSBoYW5kbGUgcHViYWxsdGFibGVzIGFuZCBz Y2hlbWEgcHVibGljYXRpb25zCisJICogY29ycmVjdGx5PwogCSAqLwogCWlmICh3YWxyY3Zf c2VydmVyX3ZlcnNpb24oTG9nUmVwV29ya2VyV2FsUmN2Q29ubikgPj0gMTUwMDAwKQogCXsK QEAgLTkzMCw4ICsxMTY1LDI0IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCiAJLyog UmVndWxhciB0YWJsZSB3aXRoIG5vIHJvdyBmaWx0ZXIgKi8KIAlpZiAobHJlbC5yZWxraW5k ID09IFJFTEtJTkRfUkVMQVRJT04gJiYgcXVhbCA9PSBOSUwpCi0JCWFwcGVuZFN0cmluZ0lu Zm8oJmNtZCwgIkNPUFkgJXMgVE8gU1RET1VUIiwKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8o JmNtZCwgIkNPUFkgJXMgKCIsCiAJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIo bHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUpKTsKKworCQkvKgorCQkgKiBYWFggRG8gd2Ug bmVlZCB0byBsaXN0IHRoZSBjb2x1bW5zIGluIGFsbCBjYXNlcz8gTWF5YmUgd2UncmUgcmVw bGljYXRpbmcKKwkJICogYWxsIGNvbHVtbnM/CisJCSAqLworCQlmb3IgKGludCBpID0gMDsg aSA8IGxyZWwubmF0dHM7IGkrKykKKwkJeworCQkJaWYgKGkgPiAwKQorCQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgIik7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmNtZCwgcXVvdGVfaWRlbnRpZmllcihscmVsLmF0dG5hbWVzW2ldKSk7CisJCX0KKwor CQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICIpIFRPIFNURE9VVCIpOworCX0KIAllbHNlCiAJ ewogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQv cGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMKaW5kZXggZWE1N2EwNDc3ZjAuLjA3Y2RmYzFkOGMwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNp bmNsdWRlICJ1dGlscy9pbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAj aW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy92YXJsZW5hLmgi CiAKQEAgLTg1LDcgKzg2LDggQEAgc3RhdGljIExpc3QgKkxvYWRQdWJsaWNhdGlvbnMoTGlz dCAqcHVibmFtZXMpOwogc3RhdGljIHZvaWQgcHVibGljYXRpb25faW52YWxpZGF0aW9uX2Ni KERhdHVtIGFyZywgaW50IGNhY2hlaWQsCiAJCQkJCQkJCQkJdWludDMyIGhhc2h2YWx1ZSk7 CiBzdGF0aWMgdm9pZCBzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhSZWxhdGlvbiByZWxhdGlv biwgVHJhbnNhY3Rpb25JZCB4aWQsCi0JCQkJCQkJCQlMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgpOworCQkJCQkJCQkJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJ CQkJQml0bWFwc2V0ICpjb2x1bW5zKTsKIHN0YXRpYyB2b2lkIHNlbmRfcmVwbF9vcmlnaW4o TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCSBSZXBPcmlnaW5JZCBvcmln aW5faWQsIFhMb2dSZWNQdHIgb3JpZ2luX2xzbiwKIAkJCQkJCQkgYm9vbCBzZW5kX29yaWdp bik7CkBAIC05Myw2ICs5NSw4IEBAIHN0YXRpYyB2b2lkIHNlbmRfcmVwbF9vcmlnaW4oTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogLyoKICAqIE9ubHkgMyBwdWJsaWNhdGlvbiBh Y3Rpb25zIGFyZSB1c2VkIGZvciByb3cgZmlsdGVyaW5nICgiaW5zZXJ0IiwgInVwZGF0ZSIs CiAgKiAiZGVsZXRlIikuIFNlZSBSZWxhdGlvblN5bmNFbnRyeS5leHByc3RhdGVbXS4KKyAq CisgKiBGSVhNRSBEbyB3ZSBuZWVkIHNvbWV0aGluZyBzaW1pbGFyIGZvciBjb2x1bW4gZmls dGVycz8KICAqLwogZW51bSBSb3dGaWx0ZXJQdWJBY3Rpb24KIHsKQEAgLTE2NCw2ICsxNjgs MTMgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25TeW5jRW50cnkKIAkgKiBoYXZpbmcgaWRl bnRpY2FsIFR1cGxlRGVzYy4KIAkgKi8KIAlBdHRyTWFwICAgICphdHRybWFwOworCisJLyoK KwkgKiBDb2x1bW5zIGluY2x1ZGVkIGluIHRoZSBwdWJsaWNhdGlvbiwgb3IgTlVMTCBpZiBh bGwgY29sdW1ucyBhcmUKKwkgKiBpbmNsdWRlZCBpbXBsaWNpdGx5LiAgTm90ZSB0aGF0IHRo ZSBhdHRudW1zIGluIHRoaXMgYml0bWFwIGFyZSBub3QKKwkgKiBzaGlmdGVkIGJ5IEZpcnN0 TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIuCisJICovCisJQml0bWFwc2V0ICAqY29s dW1uczsKIH0gUmVsYXRpb25TeW5jRW50cnk7CiAKIC8qIE1hcCB1c2VkIHRvIHJlbWVtYmVy IHdoaWNoIHJlbGF0aW9uIHNjaGVtYXMgd2Ugc2VudC4gKi8KQEAgLTYwMywxMSArNjE0LDEx IEBAIG1heWJlX3NlbmRfc2NoZW1hKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAl7 CiAJCVJlbGF0aW9uCWFuY2VzdG9yID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGVudHJ5 LT5wdWJsaXNoX2FzX3JlbGlkKTsKIAotCQlzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhhbmNl c3RvciwgeGlkLCBjdHgpOworCQlzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhhbmNlc3Rvciwg eGlkLCBjdHgsIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJUmVsYXRpb25DbG9zZShhbmNlc3Rv cik7CiAJfQogCi0Jc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMocmVsYXRpb24sIHhpZCwgY3R4 KTsKKwlzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhyZWxhdGlvbiwgeGlkLCBjdHgsIHJlbGVu dHJ5LT5jb2x1bW5zKTsKIAogCWlmIChpbl9zdHJlYW1pbmcpCiAJCXNldF9zY2hlbWFfc2Vu dF9pbl9zdHJlYW1lZF90eG4ocmVsZW50cnksIHRvcHhpZCk7CkBAIC02MjAsNyArNjMxLDgg QEAgbWF5YmVfc2VuZF9zY2hlbWEoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogICov CiBzdGF0aWMgdm9pZAogc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMoUmVsYXRpb24gcmVsYXRp b24sIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4KQorCQkJCQkJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJQml0bWFw c2V0ICpjb2x1bW5zKQogewogCVR1cGxlRGVzYwlkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWxhdGlvbik7CiAJaW50CQkJaTsKQEAgLTY0MywxMyArNjU1LDE3IEBAIHNlbmRfcmVsYXRp b25fYW5kX2F0dHJzKFJlbGF0aW9uIHJlbGF0aW9uLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJ aWYgKGF0dC0+YXR0dHlwaWQgPCBGaXJzdEdlbmJraU9iamVjdElkKQogCQkJY29udGludWU7 CiAKKwkJLyogU2tpcCB0aGlzIGF0dHJpYnV0ZSBpZiBpdCdzIG5vdCBwcmVzZW50IGluIHRo ZSBjb2x1bW4gbGlzdCAqLworCQlpZiAoY29sdW1ucyAhPSBOVUxMICYmICFibXNfaXNfbWVt YmVyKGF0dC0+YXR0bnVtLCBjb2x1bW5zKSkKKwkJCWNvbnRpbnVlOworCiAJCU91dHB1dFBs dWdpblByZXBhcmVXcml0ZShjdHgsIGZhbHNlKTsKIAkJbG9naWNhbHJlcF93cml0ZV90eXAo Y3R4LT5vdXQsIHhpZCwgYXR0LT5hdHR0eXBpZCk7CiAJCU91dHB1dFBsdWdpbldyaXRlKGN0 eCwgZmFsc2UpOwogCX0KIAogCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIGZhbHNl KTsKLQlsb2dpY2FscmVwX3dyaXRlX3JlbChjdHgtPm91dCwgeGlkLCByZWxhdGlvbik7CisJ bG9naWNhbHJlcF93cml0ZV9yZWwoY3R4LT5vdXQsIHhpZCwgcmVsYXRpb24sIGNvbHVtbnMp OwogCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgZmFsc2UpOwogfQogCkBAIC0xMjI0LDcgKzEy NDAsNyBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIAkJCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShj dHgsIHRydWUpOwogCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwg dGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJpbmFyeSk7CisJCQkJCQkJ CQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldy aXRlKGN0eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfVVBEQVRFOgpAQCAtMTI3OCwxMSArMTI5NCwxMyBAQCBwZ291dHB1dF9jaGFuZ2UoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQl7 CiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5TRVJUOgogCQkJCQlsb2dpY2Fs cmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsCi0JCQkJCQkJCQkJ CW5ld19zbG90LCBkYXRhLT5iaW5hcnkpOworCQkJCQkJCQkJCQluZXdfc2xvdCwgZGF0YS0+ YmluYXJ5LAorCQkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQkJCWJyZWFrOwog CQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURToKIAkJCQkJbG9naWNhbHJl cF93cml0ZV91cGRhdGUoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAotCQkJCQkJCQkJCQlv bGRfc2xvdCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSk7CisJCQkJCQkJCQkJCW9sZF9zbG90 LCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1u cyk7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RFTEVU RToKIAkJCQkJbG9naWNhbHJlcF93cml0ZV9kZWxldGUoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0 cmVsLApAQCAtMTczMSw2ICsxNzQ5LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0 RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0 YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwogCQllbnRyeS0+Y2FjaGVfZXhw cl9jeHQgPSBOVUxMOwogCQllbnRyeS0+cHVibGlzaF9hc19yZWxpZCA9IEludmFsaWRPaWQ7 CisJCWVudHJ5LT5jb2x1bW5zID0gTlVMTDsKIAkJZW50cnktPmF0dHJtYXAgPSBOVUxMOwog CX0KIApAQCAtMTc3NSw2ICsxNzk0LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0 RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9 IGZhbHNlOwogCQlsaXN0X2ZyZWUoZW50cnktPnN0cmVhbWVkX3R4bnMpOwogCQllbnRyeS0+ c3RyZWFtZWRfdHhucyA9IE5JTDsKKwkJYm1zX2ZyZWUoZW50cnktPmNvbHVtbnMpOworCQll bnRyeS0+Y29sdW1ucyA9IE5VTEw7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9 IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50 cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZmFsc2U7CkBAIC0xODA3LDEzICsxODI4LDE2 IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJl bGF0aW9uKQogCiAJCS8qCiAJCSAqIEJ1aWxkIHB1YmxpY2F0aW9uIGNhY2hlLiBXZSBjYW4n dCB1c2Ugb25lIHByb3ZpZGVkIGJ5IHJlbGNhY2hlIGFzCi0JCSAqIHJlbGNhY2hlIGNvbnNp ZGVycyBhbGwgcHVibGljYXRpb25zIGdpdmVuIHJlbGF0aW9uIGlzIGluLCBidXQgaGVyZQot CQkgKiB3ZSBvbmx5IG5lZWQgdG8gY29uc2lkZXIgb25lcyB0aGF0IHRoZSBzdWJzY3JpYmVy IHJlcXVlc3RlZC4KKwkJICogcmVsY2FjaGUgY29uc2lkZXJzIGFsbCBwdWJsaWNhdGlvbnMg dGhhdCB0aGUgZ2l2ZW4gcmVsYXRpb24gaXMgaW4sCisJCSAqIGJ1dCBoZXJlIHdlIG9ubHkg bmVlZCB0byBjb25zaWRlciBvbmVzIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJICogcmVxdWVz dGVkLgogCQkgKi8KIAkJZm9yZWFjaChsYywgZGF0YS0+cHVibGljYXRpb25zKQogCQl7CiAJ CQlQdWJsaWNhdGlvbiAqcHViID0gbGZpcnN0KGxjKTsKIAkJCWJvb2wJCXB1Ymxpc2ggPSBm YWxzZTsKKwkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZhbHNlOworCQkJYm9vbAkJ YWxsX2NvbHVtbnMgPSBmYWxzZTsKIAogCQkJaWYgKHB1Yi0+YWxsdGFibGVzKQogCQkJewpA QCAtMTgyNCw4ICsxODQ4LDYgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAq ZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAKIAkJCWlmICghcHVibGlzaCkKIAkJCXsKLQkJ CQlib29sCQlhbmNlc3Rvcl9wdWJsaXNoZWQgPSBmYWxzZTsKLQogCQkJCS8qCiAJCQkJICog Rm9yIGEgcGFydGl0aW9uLCBjaGVjayBpZiBhbnkgb2YgdGhlIGFuY2VzdG9ycyBhcmUKIAkJ CQkgKiBwdWJsaXNoZWQuICBJZiBzbywgbm90ZSBkb3duIHRoZSB0b3Btb3N0IGFuY2VzdG9y IHRoYXQgaXMKQEAgLTE4NTUsNiArMTg3Nyw5IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091 dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJfQogCiAJCQkvKgorCQkJ ICogSWYgdGhlIHJlbGF0aW9uIGlzIHRvIGJlIHB1Ymxpc2hlZCwgZGV0ZXJtaW5lIGFjdGlv bnMgdG8KKwkJCSAqIHB1Ymxpc2gsIGFuZCBsaXN0IG9mIGNvbHVtbnMsIGlmIGFwcHJvcHJp YXRlLgorCQkJICoKIAkJCSAqIERvbid0IHB1Ymxpc2ggY2hhbmdlcyBmb3IgcGFydGl0aW9u ZWQgdGFibGVzLCBiZWNhdXNlCiAJCQkgKiBwdWJsaXNoaW5nIHRob3NlIG9mIGl0cyBwYXJ0 aXRpb25zIHN1ZmZpY2VzLCB1bmxlc3MgcGFydGl0aW9uCiAJCQkgKiBjaGFuZ2VzIHdvbid0 IGJlIHB1Ymxpc2hlZCBkdWUgdG8gcHVidmlhcm9vdCBiZWluZyBzZXQuCkBAIC0xODY3LDYg KzE4OTIsODAgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVs YXRpb24gcmVsYXRpb24pCiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1 Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1 bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlOwogCisJCQkJLyoKKwkJCQkg KiBUaGlzIG1pZ2h0IGJlIEZPUiBBTEwgVEFCTEVTIG9yIEZPUiBBTEwgVEFCTEVTIElOIFND SEVNQQorCQkJCSAqIHB1YmxpY2F0aW9uLCBpbiB3aGljaCBjYXNlIHRoZXJlIGFyZSBubyBj b2x1bW4gbGlzdHMsIGFuZAorCQkJCSAqIHdlIHRyZWF0IHRoYXQgYXMgYWxsX2NvbHVtbnM9 dHJ1ZS4KKwkJCQkgKi8KKwkJCQlpZiAocHViLT5hbGx0YWJsZXMgfHwKKwkJCQkJbGlzdF9t ZW1iZXJfb2lkKHNjaGVtYVB1YmlkcywgcHViLT5vaWQpKQorCQkJCXsKKwkJCQkJYWxsX2Nv bHVtbnMgPSB0cnVlOworCQkJCQlibXNfZnJlZShlbnRyeS0+Y29sdW1ucyk7CisJCQkJCWVu dHJ5LT5jb2x1bW5zID0gTlVMTDsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIE9idGFpbiBj b2x1bW5zIHB1Ymxpc2hlZCBieSB0aGlzIHB1YmxpY2F0aW9uLCBhbmQgYWRkIHRoZW0KKwkJ CQkgKiB0byB0aGUgbGlzdCBmb3IgdGhpcyByZWwuICBOb3RlIHRoYXQgaWYgYXQgbGVhc3Qg b25lCisJCQkJICogcHVibGljYXRpb24gaGFzIGFuIGVtcHR5IGNvbHVtbiBsaXN0LCB0aGF0 IG1lYW5zIHRvIHB1Ymxpc2gKKwkJCQkgKiBldmVyeXRoaW5nOyBzbyBpZiB3ZSBzYXcgYSBw dWJsaWNhdGlvbiB0aGF0IGluY2x1ZGVzIGFsbAorCQkJCSAqIGNvbHVtbnMsIHNraXAgdGhp cy4KKwkJCQkgKgorCQkJCSAqIEZJWE1FIFRoaXMgZmFpbHMgdG8gY29uc2lkZXIgY29sdW1u IGZpbHRlcnMgZGVmaW5lZCBpbgorCQkJCSAqIEZPUiBBTEwgVEFCTEVTIGFuZCBGT1IgQUxM IFRBQkxFUyBJTiBTQ0hFTUEgcHVibGljYXRpb25zLgorCQkJCSAqIFdlIG5lZWQgdG8gY2hl Y2sgdGhvc2UgdG9vLgorCQkJCSAqLworCQkJCWlmICghYWxsX2NvbHVtbnMpCisJCQkJewor CQkJCQlIZWFwVHVwbGUJcHViX3JlbF90dXBsZTsKKworCQkJCQlwdWJfcmVsX3R1cGxlID0g U2VhcmNoU3lzQ2FjaGUyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkJCQkJCU9iamVj dElkR2V0RGF0dW0ocHVibGlzaF9hc19yZWxpZCksCisJCQkJCQkJCQkJCQkJT2JqZWN0SWRH ZXREYXR1bShwdWItPm9pZCkpOworCisJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHB1Yl9y ZWxfdHVwbGUpKQorCQkJCQl7CisJCQkJCQlEYXR1bQkJcHViX3JlbF9jb2xzOworCQkJCQkJ Ym9vbAkJaXNudWxsOworCisJCQkJCQlwdWJfcmVsX2NvbHMgPSBTeXNDYWNoZUdldEF0dHIo UFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkJCQkJCQkJICAgcHViX3JlbF90dXBsZSwKKwkJ CQkJCQkJCQkJCQkgICBBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzLAorCQkJCQkJ CQkJCQkJCSAgICZpc251bGwpOworCQkJCQkJaWYgKGlzbnVsbCkKKwkJCQkJCXsKKwkJCQkJ CQkvKgorCQkJCQkJCSAqIElmIHdlIHNlZSBhIHB1YmxpY2F0aW9uIHdpdGggbm8gY29sdW1u IGZpbHRlciwgaXQKKwkJCQkJCQkgKiBtZWFucyB3ZSBuZWVkIHRvIHB1Ymxpc2ggYWxsIGNv bHVtbnMsIHNvIHJlc2V0IHRoZQorCQkJCQkJCSAqIGxpc3QgYW5kIGlnbm9yZSBmdXJ0aGVy IG9uZXMuCisJCQkJCQkJICovCisJCQkJCQkJYWxsX2NvbHVtbnMgPSB0cnVlOworCQkJCQkJ CWJtc19mcmVlKGVudHJ5LT5jb2x1bW5zKTsKKwkJCQkJCQllbnRyeS0+Y29sdW1ucyA9IE5V TEw7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJQXJyYXlUeXBlICAq YXJyOworCQkJCQkJCWludAkJCW5lbGVtczsKKwkJCQkJCQlpbnQxNgkgICAqZWxlbXM7CisK KwkJCQkJCQlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAocHViX3JlbF9jb2xzKTsKKwkJCQkJ CQluZWxlbXMgPSBBUlJfRElNUyhhcnIpWzBdOworCQkJCQkJCWVsZW1zID0gKGludDE2ICop IEFSUl9EQVRBX1BUUihhcnIpOworCisJCQkJCQkJLyogWFhYIGlzIHRoZXJlIGEgZGFuZ2Vy IG9mIG1lbW9yeSBsZWFrIGhlcmU/IGJld2FyZSAqLworCQkJCQkJCW9sZGN0eCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhDYWNoZU1lbW9yeUNvbnRleHQpOworCQkJCQkJCWZvciAoaW50 IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCQkJCQkJCWVudHJ5LT5jb2x1bW5zID0gYm1z X2FkZF9tZW1iZXIoZW50cnktPmNvbHVtbnMsCisJCQkJCQkJCQkJCQkJCQkJZWxlbXNbaV0p OworCQkJCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQkJCQkJfQorCisJ CQkJCQlSZWxlYXNlU3lzQ2FjaGUocHViX3JlbF90dXBsZSk7CisJCQkJCX0KKwkJCQl9CisK IAkJCQlyZWxfcHVibGljYXRpb25zID0gbGFwcGVuZChyZWxfcHVibGljYXRpb25zLCBwdWIp OwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCBmY2Nm ZmNlNTcyOS4uODJlNTk1Mzk2ZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Nh Y2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUu YwpAQCAtNTU1Myw2ICs1NTUzLDggQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhS ZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQltZW1zZXQo cHViZGVzYywgMCwgc2l6ZW9mKFB1YmxpY2F0aW9uRGVzYykpOwogCQlwdWJkZXNjLT5yZl92 YWxpZF9mb3JfdXBkYXRlID0gdHJ1ZTsKIAkJcHViZGVzYy0+cmZfdmFsaWRfZm9yX2RlbGV0 ZSA9IHRydWU7CisJCXB1YmRlc2MtPmNmX3ZhbGlkX2Zvcl91cGRhdGUgPSB0cnVlOworCQlw dWJkZXNjLT5jZl92YWxpZF9mb3JfZGVsZXRlID0gdHJ1ZTsKIAkJcmV0dXJuOwogCX0KIApA QCAtNTU2NSw2ICs1NTY3LDggQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxh dGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCW1lbXNldChwdWJk ZXNjLCAwLCBzaXplb2YoUHVibGljYXRpb25EZXNjKSk7CiAJcHViZGVzYy0+cmZfdmFsaWRf Zm9yX3VwZGF0ZSA9IHRydWU7CiAJcHViZGVzYy0+cmZfdmFsaWRfZm9yX2RlbGV0ZSA9IHRy dWU7CisJcHViZGVzYy0+Y2ZfdmFsaWRfZm9yX3VwZGF0ZSA9IHRydWU7CisJcHViZGVzYy0+ Y2ZfdmFsaWRfZm9yX2RlbGV0ZSA9IHRydWU7CiAKIAkvKiBGZXRjaCB0aGUgcHVibGljYXRp b24gbWVtYmVyc2hpcCBpbmZvLiAqLwogCXB1Ym9pZHMgPSBHZXRSZWxhdGlvblB1YmxpY2F0 aW9ucyhyZWxpZCk7CkBAIC01NjI1LDYgKzU2MjksMjQgQEAgUmVsYXRpb25CdWlsZFB1Ymxp Y2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNj KQogCQkJCXB1YmRlc2MtPnJmX3ZhbGlkX2Zvcl9kZWxldGUgPSBmYWxzZTsKIAkJfQogCisJ CS8qCisJCSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGNvbHVt biBmaWx0ZXIgYXJlIHBhcnQgb2YKKwkJICogdGhlIFJFUExJQ0EgSURFTlRJVFkgaW5kZXgg b3Igbm90LgorCQkgKgorCQkgKiBJZiB0aGUgcHVibGljYXRpb24gaXMgRk9SIEFMTCBUQUJM RVMgdGhlbiBpdCBtZWFucyB0aGUgdGFibGUgaGFzIG5vCisJCSAqIGNvbHVtbiBmaWx0ZXJz IGFuZCB3ZSBjYW4gc2tpcCB0aGUgdmFsaWRhdGlvbi4KKwkJICovCisJCWlmICghcHViZm9y bS0+cHViYWxsdGFibGVzICYmCisJCQkocHViZm9ybS0+cHVidXBkYXRlIHx8IHB1YmZvcm0t PnB1YmRlbGV0ZSkgJiYKKwkJCWNvbnRhaW5faW52YWxpZF9jZmNvbHVtbihwdWJpZCwgcmVs YXRpb24sIGFuY2VzdG9ycywKKwkJCQkJCQkJCSBwdWJmb3JtLT5wdWJ2aWFyb290KSkKKwkJ eworCQkJaWYgKHB1YmZvcm0tPnB1YnVwZGF0ZSkKKwkJCQlwdWJkZXNjLT5jZl92YWxpZF9m b3JfdXBkYXRlID0gZmFsc2U7CisJCQlpZiAocHViZm9ybS0+cHViZGVsZXRlKQorCQkJCXB1 YmRlc2MtPmNmX3ZhbGlkX2Zvcl9kZWxldGUgPSBmYWxzZTsKKwkJfQorCiAJCVJlbGVhc2VT eXNDYWNoZSh0dXApOwogCiAJCS8qCkBAIC01NjM2LDYgKzU2NTgsMTYgQEAgUmVsYXRpb25C dWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNj ICpwdWJkZXNjKQogCQkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxldGUgJiYgcHViZGVz Yy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSAmJgogCQkJIXB1YmRlc2MtPnJmX3ZhbGlkX2Zv cl91cGRhdGUgJiYgIXB1YmRlc2MtPnJmX3ZhbGlkX2Zvcl9kZWxldGUpCiAJCQlicmVhazsK KworCQkvKgorCQkgKiBJZiB3ZSBrbm93IGV2ZXJ5dGhpbmcgaXMgcmVwbGljYXRlZCBhbmQg dGhlIGNvbHVtbiBmaWx0ZXIgaXMgaW52YWxpZAorCQkgKiBmb3IgdXBkYXRlIGFuZCBkZWxl dGUsIHRoZXJlIGlzIG5vIHBvaW50IHRvIGNoZWNrIGZvciBvdGhlcgorCQkgKiBwdWJsaWNh dGlvbnMuCisJCSAqLworCQlpZiAocHViZGVzYy0+cHViYWN0aW9ucy5wdWJpbnNlcnQgJiYg cHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgJiYKKwkJCXB1YmRlc2MtPnB1YmFjdGlv bnMucHViZGVsZXRlICYmIHB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgJiYKKwkJ CSFwdWJkZXNjLT5jZl92YWxpZF9mb3JfdXBkYXRlICYmICFwdWJkZXNjLT5jZl92YWxpZF9m b3JfZGVsZXRlKQorCQkJYnJlYWs7CiAJfQogCiAJaWYgKHJlbGF0aW9uLT5yZF9wdWJkZXNj KQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKaW5kZXggZTY5ZGNmOGE0ODQuLmYyMDhjN2E2YzU5IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmMKQEAgLTQwNzUsNiArNDA3NSw3IEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFy Y2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAJaW50 CQkJaV9wcnB1YmlkOwogCWludAkJCWlfcHJyZWxpZDsKIAlpbnQJCQlpX3BycmVscXVhbDsK KwlpbnQJCQlpX3ByYXR0cnM7CiAJaW50CQkJaSwKIAkJCQlqLAogCQkJCW50dXBzOwpAQCAt NDA4OCwxMiArNDA4OSwyMCBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0 LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCWlmIChmb3V0LT5yZW1v dGVWZXJzaW9uID49IDE1MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJ CQkJCQkJICJTRUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJyZWxpZCwgIgotCQkJ CQkJCSAicGdfY2F0YWxvZy5wZ19nZXRfZXhwcihwcnF1YWwsIHBycmVsaWQpIEFTIHBycmVs cXVhbCAiCi0JCQkJCQkJICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIik7 CisJCQkJCQkJICJwZ19jYXRhbG9nLnBnX2dldF9leHByKHBycXVhbCwgcHJyZWxpZCkgQVMg cHJyZWxxdWFsLCAiCisJCQkJCQkJICIoQ0FTRVxuIgorCQkJCQkJCSAiICBXSEVOIHByLnBy YXR0cnMgSVMgTk9UIE5VTEwgVEhFTlxuIgorCQkJCQkJCSAiICAgIChTRUxFQ1QgYXJyYXlf YWdnKGF0dG5hbWUpXG4iCisJCQkJCQkJICIgICAgICAgRlJPTVxuIgorCQkJCQkJCSAiICAg ICAgICAgcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91 cHBlcihwci5wcmF0dHJzOjpwZ19jYXRhbG9nLmludDJbXSwgMSkpIHMsXG4iCisJCQkJCQkJ ICIgICAgICAgICBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZVxuIgorCQkJCQkJCSAiICAgICAg V0hFUkUgYXR0cmVsaWQgPSBwci5wcnJlbGlkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKVxu IgorCQkJCQkJCSAiICBFTFNFIE5VTEwgRU5EKSBwcmF0dHJzICIKKwkJCQkJCQkgIkZST00g cGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIiKTsKIAllbHNlCiAJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHRhYmxlb2lkLCBvaWQsIHBy cHViaWQsIHBycmVsaWQsICIKLQkJCQkJCQkgIk5VTEwgQVMgcHJyZWxxdWFsICIKKwkJCQkJ CQkgIk5VTEwgQVMgcHJyZWxxdWFsLCBOVUxMIEFTIHByYXR0cnMgIgogCQkJCQkJCSAiRlJP TSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCIpOwogCXJlcyA9IEV4ZWN1dGVTcWxR dWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVTX09LKTsKIApAQCAtNDEwNCw2 ICs0MTEzLDcgQEAgZ2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJ bmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAlpX3BycHViaWQgPSBQUWZudW1iZXIo cmVzLCAicHJwdWJpZCIpOwogCWlfcHJyZWxpZCA9IFBRZm51bWJlcihyZXMsICJwcnJlbGlk Iik7CiAJaV9wcnJlbHF1YWwgPSBQUWZudW1iZXIocmVzLCAicHJyZWxxdWFsIik7CisJaV9w cmF0dHJzID0gUFFmbnVtYmVyKHJlcywgInByYXR0cnMiKTsKIAogCS8qIHRoaXMgYWxsb2Nh dGlvbiBtYXkgYmUgbW9yZSB0aGFuIHdlIG5lZWQgKi8KIAlwdWJyaW5mbyA9IHBnX21hbGxv YyhudHVwcyAqIHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKQEAgLTQxNDksNiArNDE1 OSwyOCBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8g dGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCQllbHNlCiAJCQlwdWJyaW5mb1tqXS5wdWJy ZWxxdWFsID0gcGdfc3RyZHVwKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3BycmVscXVhbCkpOwog CisJCWlmICghUFFnZXRpc251bGwocmVzLCBpLCBpX3ByYXR0cnMpKQorCQl7CisJCQljaGFy CSAgKiphdHRuYW1lczsKKwkJCWludAkJCW5hdHRuYW1lczsKKwkJCVBRRXhwQnVmZmVyIGF0 dHJpYnM7CisKKwkJCWlmICghcGFyc2VQR0FycmF5KFBRZ2V0dmFsdWUocmVzLCBpLCBpX3By YXR0cnMpLAorCQkJCQkJCSAgJmF0dG5hbWVzLCAmbmF0dG5hbWVzKSkKKwkJCQlmYXRhbCgi Y291bGQgbm90IHBhcnNlICVzIGFycmF5IiwgInByYXR0cnMiKTsKKwkJCWF0dHJpYnMgPSBj cmVhdGVQUUV4cEJ1ZmZlcigpOworCQkJZm9yIChpbnQgayA9IDA7IGsgPCBuYXR0bmFtZXM7 IGsrKykKKwkJCXsKKwkJCQlpZiAoayA+IDApCisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KGF0dHJpYnMsICIsICIpOworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYXR0cmlicywg Zm10SWQoYXR0bmFtZXNba10pKTsKKwkJCX0KKwkJCXB1YnJpbmZvW2pdLnB1YnJhdHRycyA9 IGF0dHJpYnMtPmRhdGE7CisJCX0KKwkJZWxzZQorCQkJcHVicmluZm9bal0ucHVicmF0dHJz ID0gTlVMTDsKKwogCQkvKiBEZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGR1bXAgaXQgKi8K IAkJc2VsZWN0RHVtcGFibGVQdWJsaWNhdGlvbk9iamVjdCgmKHB1YnJpbmZvW2pdLmRvYmop LCBmb3V0KTsKIApAQCAtNDIyMywxMCArNDI1NSwxMyBAQCBkdW1wUHVibGljYXRpb25UYWJs ZShBcmNoaXZlICpmb3V0LCBjb25zdCBQdWJsaWNhdGlvblJlbEluZm8gKnB1YnJpbmZvKQog CiAJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0JYXBwZW5kUFFFeHBCdWZmZXIo cXVlcnksICJBTFRFUiBQVUJMSUNBVElPTiAlcyBBREQgVEFCTEUgT05MWSIsCisJYXBwZW5k UFFFeHBCdWZmZXIocXVlcnksICJBTFRFUiBQVUJMSUNBVElPTiAlcyBBREQgVEFCTEUgT05M WSAiLAogCQkJCQkgIGZtdElkKHB1YmluZm8tPmRvYmoubmFtZSkpOwotCWFwcGVuZFBRRXhw QnVmZmVyKHF1ZXJ5LCAiICVzIiwKLQkJCQkJICBmbXRRdWFsaWZpZWREdW1wYWJsZSh0Ymlu Zm8pKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgZm10UXVhbGlmaWVkRHVtcGFi bGUodGJpbmZvKSk7CisKKwlpZiAocHVicmluZm8tPnB1YnJhdHRycykKKwkJYXBwZW5kUFFF eHBCdWZmZXIocXVlcnksICIgKCVzKSIsIHB1YnJpbmZvLT5wdWJyYXR0cnMpOworCiAJaWYg KHB1YnJpbmZvLT5wdWJyZWxxdWFsKQogCXsKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDk5 N2EzYjYwNzE5Li42ODBiMDdkY2Q1MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MzIsNiArNjMy LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1YmxpY2F0aW9uUmVsSW5mbwogCVB1YmxpY2F0aW9u SW5mbyAqcHVibGljYXRpb247CiAJVGFibGVJbmZvICAqcHVidGFibGU7CiAJY2hhcgkgICAq cHVicmVscXVhbDsKKwljaGFyCSAgICpwdWJyYXR0cnM7CiB9IFB1YmxpY2F0aW9uUmVsSW5m bzsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBs IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggYWU4Yzg2YTZlODgu LmQ0ZDkyNDY1YzQ5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVt cC5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtMjQyOCw2 ICsyNDI4LDI4IEBAIG15ICV0ZXN0cyA9ICgKIAkJdW5saWtlID0+IHsgZXhjbHVkZV9kdW1w X3Rlc3Rfc2NoZW1hID0+IDEsIH0sCiAJfSwKIAorCSdBTFRFUiBQVUJMSUNBVElPTiBwdWIx IEFERCBUQUJMRSB0ZXN0X3NpeHRoX3RhYmxlIChjb2wzLCBjb2wyKScgPT4geworCQljcmVh dGVfb3JkZXIgPT4gNTIsCisJCWNyZWF0ZV9zcWwgPT4KKwkJICAnQUxURVIgUFVCTElDQVRJ T04gcHViMSBBREQgVEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2l4dGhfdGFibGUgKGNvbDMsIGNv bDIpOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjEg QUREIFRBQkxFIE9OTFkgZHVtcF90ZXN0LnRlc3Rfc2l4dGhfdGFibGUgKGNvbDIsIGNvbDMp O1xFCisJCQkveG0sCisJCWxpa2UgPT4geyAlZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0 YSA9PiAxLCB9LAorCQl1bmxpa2UgPT4geyBleGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4g MSwgfSwKKwl9LAorCisJJ0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIHRlc3Rf c2V2ZW50aF90YWJsZSAoY29sMywgY29sMikgV0hFUkUgKGNvbDEgPSAxKScgPT4geworCQlj cmVhdGVfb3JkZXIgPT4gNTIsCisJCWNyZWF0ZV9zcWwgPT4KKwkJICAnQUxURVIgUFVCTElD QVRJT04gcHViMSBBREQgVEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2V2ZW50aF90YWJsZSAoY29s MywgY29sMikgV0hFUkUgKGNvbDEgPSAxKTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJXFFB TFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBUQUJMRSBPTkxZIGR1bXBfdGVzdC50ZXN0X3Nl dmVudGhfdGFibGUgKGNvbDIsIGNvbDMpIFdIRVJFICgoY29sMSA9IDEpKTtcRQorCQkJL3ht LAorCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwgfSwK KwkJdW5saWtlID0+IHsgZXhjbHVkZV9kdW1wX3Rlc3Rfc2NoZW1hID0+IDEsIH0sCisJfSwK KwogCSdBTFRFUiBQVUJMSUNBVElPTiBwdWIzIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBk dW1wX3Rlc3QnID0+IHsKIAkJY3JlYXRlX29yZGVyID0+IDUxLAogCQljcmVhdGVfc3FsID0+ CkBAIC0yNzc4LDYgKzI4MDAsNDQgQEAgbXkgJXRlc3RzID0gKAogCQl1bmxpa2UgPT4geyBl eGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4gMSwgfSwKIAl9LAogCisJJ0NSRUFURSBUQUJM RSB0ZXN0X3NpeHRoX3RhYmxlJyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA2LAorCQljcmVh dGVfc3FsICAgPT4gJ0NSRUFURSBUQUJMRSBkdW1wX3Rlc3QudGVzdF9zaXh0aF90YWJsZSAo CisJCQkJCQkgICBjb2wxIGludCwKKwkJCQkJCSAgIGNvbDIgdGV4dCwKKwkJCQkJCSAgIGNv bDMgYnl0ZWEKKwkJCQkJICAgKTsnLAorCQlyZWdleHAgPT4gcXIvXgorCQkJXFFDUkVBVEUg VEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2l4dGhfdGFibGUgKFxFCisJCQlcblxzK1xRY29sMSBp bnRlZ2VyLFxFCisJCQlcblxzK1xRY29sMiB0ZXh0LFxFCisJCQlcblxzK1xRY29sMyBieXRl YVxFCisJCQlcblwpOworCQkJL3htLAorCQlsaWtlID0+CisJCSAgeyAlZnVsbF9ydW5zLCAl ZHVtcF90ZXN0X3NjaGVtYV9ydW5zLCBzZWN0aW9uX3ByZV9kYXRhID0+IDEsIH0sCisJCXVu bGlrZSA9PiB7IGV4Y2x1ZGVfZHVtcF90ZXN0X3NjaGVtYSA9PiAxLCB9LAorCX0sCisKKwkn Q1JFQVRFIFRBQkxFIHRlc3Rfc2V2ZW50aF90YWJsZScgPT4geworCQljcmVhdGVfb3JkZXIg PT4gNiwKKwkJY3JlYXRlX3NxbCAgID0+ICdDUkVBVEUgVEFCTEUgZHVtcF90ZXN0LnRlc3Rf c2V2ZW50aF90YWJsZSAoCisJCQkJCQkgICBjb2wxIGludCwKKwkJCQkJCSAgIGNvbDIgdGV4 dCwKKwkJCQkJCSAgIGNvbDMgYnl0ZWEKKwkJCQkJICAgKTsnLAorCQlyZWdleHAgPT4gcXIv XgorCQkJXFFDUkVBVEUgVEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2V2ZW50aF90YWJsZSAoXEUK KwkJCVxuXHMrXFFjb2wxIGludGVnZXIsXEUKKwkJCVxuXHMrXFFjb2wyIHRleHQsXEUKKwkJ CVxuXHMrXFFjb2wzIGJ5dGVhXEUKKwkJCVxuXCk7CisJCQkveG0sCisJCWxpa2UgPT4KKwkJ ICB7ICVmdWxsX3J1bnMsICVkdW1wX3Rlc3Rfc2NoZW1hX3J1bnMsIHNlY3Rpb25fcHJlX2Rh dGEgPT4gMSwgfSwKKwkJdW5saWtlID0+IHsgZXhjbHVkZV9kdW1wX3Rlc3Rfc2NoZW1hID0+ IDEsIH0sCisJfSwKKwogCSdDUkVBVEUgVEFCTEUgdGVzdF90YWJsZV9pZGVudGl0eScgPT4g ewogCQljcmVhdGVfb3JkZXIgPT4gMywKIAkJY3JlYXRlX3NxbCAgID0+ICdDUkVBVEUgVEFC TEUgZHVtcF90ZXN0LnRlc3RfdGFibGVfaWRlbnRpdHkgKApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCBlMzM4 MjkzM2Q5OC4uZmIxOGNiODJkOWYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC0yODgwLDYgKzI4ODAsNyBA QCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJ CXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJCSAgIlNFTEVDVCBwdWJuYW1lXG4i CiAJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCisJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCiAJCQkJ CQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCiAJCQkJCQkJCSAg IgkJSk9JTiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX25hbWVzcGFjZSBwbiBPTiBwLm9p ZCA9IHBuLnBucHViaWRcbiIKIAkJCQkJCQkJICAiCQlKT0lOIHBnX2NhdGFsb2cucGdfY2xh c3MgcGMgT04gcGMucmVsbmFtZXNwYWNlID0gcG4ucG5uc3BpZFxuIgpAQCAtMjg4Nyw2ICsy ODg4LDEyIEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5h bWUsCiAJCQkJCQkJCSAgIlVOSU9OXG4iCiAJCQkJCQkJCSAgIlNFTEVDVCBwdWJuYW1lXG4i CiAJCQkJCQkJCSAgIgkJLCBwZ19nZXRfZXhwcihwci5wcnF1YWwsIGMub2lkKVxuIgorCQkJ CQkJCQkgICIJCSwgKENBU0UgV0hFTiBwci5wcmF0dHJzIElTIE5PVCBOVUxMIFRIRU5cbiIK KwkJCQkJCQkJICAiCQkJKFNFTEVDVCBzdHJpbmdfYWdnKGF0dG5hbWUsICcsICcpXG4iCisJ CQkJCQkJCSAgIgkJCSAgRlJPTSBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcygwLCBwZ19j YXRhbG9nLmFycmF5X3VwcGVyKHByLnByYXR0cnM6OnBnX2NhdGFsb2cuaW50MltdLCAxKSkg cyxcbiIKKwkJCQkJCQkJICAiCQkJCSAgIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlXG4iCisJ CQkJCQkJCSAgIgkJCSBXSEVSRSBhdHRyZWxpZCA9IHByLnBycmVsaWQgQU5EIGF0dG51bSA9 IHByYXR0cnNbc10pXG4iCisJCQkJCQkJCSAgIgkJICAgRUxTRSBOVUxMIEVORCkgIgogCQkJ CQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxuIgogCQkJCQkJCQkg ICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIgT04gcC5vaWQgPSBw ci5wcnB1YmlkXG4iCiAJCQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIGMg T04gYy5vaWQgPSBwci5wcnJlbGlkXG4iCkBAIC0yODk0LDYgKzI5MDEsNyBAQCBkZXNjcmli ZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJCQkgICJV TklPTlxuIgogCQkJCQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgogCQkJCQkJCQkgICIJCSwg TlVMTFxuIgorCQkJCQkJCQkgICIJCSwgTlVMTFxuIgogCQkJCQkJCQkgICJGUk9NIHBnX2Nh dGFsb2cucGdfcHVibGljYXRpb24gcFxuIgogCQkJCQkJCQkgICJXSEVSRSBwLnB1YmFsbHRh YmxlcyBBTkQgcGdfY2F0YWxvZy5wZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZSgnJXMnKVxu IgogCQkJCQkJCQkgICJPUkRFUiBCWSAxOyIsCkBAIC0yOTA0LDEyICsyOTEyLDE0IEBAIGRl c2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQkJcHJp bnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKIAkJ CQkJCQkJICAiCQksIE5VTExcbiIKKwkJCQkJCQkJICAiCQksIE5VTExcbiIKIAkJCQkJCQkJ ICAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uIHBcbiIKIAkJCQkJCQkJICAiSk9J TiBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwciBPTiBwLm9pZCA9IHByLnBycHVi aWRcbiIKIAkJCQkJCQkJICAiV0hFUkUgcHIucHJyZWxpZCA9ICclcydcbiIKIAkJCQkJCQkJ ICAiVU5JT04gQUxMXG4iCiAJCQkJCQkJCSAgIlNFTEVDVCBwdWJuYW1lXG4iCiAJCQkJCQkJ CSAgIgkJLCBOVUxMXG4iCisJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCiAJCQkJCQkJCSAgIkZS T00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCiAJCQkJCQkJCSAgIldIRVJFIHAu cHViYWxsdGFibGVzIEFORCBwZ19jYXRhbG9nLnBnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxl KCclcycpXG4iCiAJCQkJCQkJCSAgIk9SREVSIEJZIDE7IiwKQEAgLTI5MzEsNiArMjk0MSwx MSBAQCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAog CQkJCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsICIgICAgXCIlc1wiIiwKIAkJCQkJCQkJICBQ UWdldHZhbHVlKHJlc3VsdCwgaSwgMCkpOwogCisJCQkJLyogY29sdW1uIGZpbHRlciAoaWYg YW55KSAqLworCQkJCWlmICghUFFnZXRpc251bGwocmVzdWx0LCBpLCAyKSkKKwkJCQkJYXBw ZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIiAoJXMpIiwKKwkJCQkJCQkJCSAgUFFnZXR2YWx1ZShy ZXN1bHQsIGksIDIpKTsKKwogCQkJCS8qIHJvdyBmaWx0ZXIgKGlmIGFueSkgKi8KIAkJCQlp ZiAoIVBRZ2V0aXNudWxsKHJlc3VsdCwgaSwgMSkpCiAJCQkJCWFwcGVuZFBRRXhwQnVmZmVy KCZidWYsICIgV0hFUkUgJXMiLApAQCAtNTg2Nyw3ICs1ODgyLDcgQEAgbGlzdFB1YmxpY2F0 aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogICovCiBzdGF0aWMgYm9vbAogYWRkRm9vdGVy VG9QdWJsaWNhdGlvbkRlc2MoUFFFeHBCdWZmZXIgYnVmLCBjaGFyICpmb290ZXJtc2csCi0J CQkJCQkgICBib29sIHNpbmdsZWNvbCwgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQpCisJCQkJ CQkgICBib29sIGFzX3NjaGVtYSwgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQpCiB7CiAJUEdy ZXN1bHQgICAqcmVzOwogCWludAkJCWNvdW50ID0gMDsKQEAgLTU4ODQsMTUgKzU4OTksMTkg QEAgYWRkRm9vdGVyVG9QdWJsaWNhdGlvbkRlc2MoUFFFeHBCdWZmZXIgYnVmLCBjaGFyICpm b290ZXJtc2csCiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKIAl7Ci0JCWlmICgh c2luZ2xlY29sKQorCQlpZiAoYXNfc2NoZW1hKQorCQkJcHJpbnRmUFFFeHBCdWZmZXIoYnVm LCAiICAgIFwiJXNcIiIsIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSk7CisJCWVsc2UKIAkJewog CQkJcHJpbnRmUFFFeHBCdWZmZXIoYnVmLCAiICAgIFwiJXMuJXNcIiIsIFBRZ2V0dmFsdWUo cmVzLCBpLCAwKSwKIAkJCQkJCQkgIFBRZ2V0dmFsdWUocmVzLCBpLCAxKSk7CisKKwkJCWlm ICghUFFnZXRpc251bGwocmVzLCBpLCAzKSkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYs ICIgKCVzKSIsIFBRZ2V0dmFsdWUocmVzLCBpLCAzKSk7CisKIAkJCWlmICghUFFnZXRpc251 bGwocmVzLCBpLCAyKSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIgV0hFUkUgJXMi LCBQUWdldHZhbHVlKHJlcywgaSwgMikpOwogCQl9Ci0JCWVsc2UKLQkJCXByaW50ZlBRRXhw QnVmZmVyKGJ1ZiwgIiAgICBcIiVzXCIiLCBQUWdldHZhbHVlKHJlcywgaSwgMCkpOwogCiAJ CXByaW50VGFibGVBZGRGb290ZXIoY29udCwgYnVmLT5kYXRhKTsKIAl9CkBAIC02MDIxLDEx ICs2MDQwLDIyIEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4p CiAJCQlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCBuLm5zcG5h bWUsIGMucmVsbmFtZSIpOwogCQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTUwMDAwKQorCQkJ ewogCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkJCQkgIiwgcGdfZ2V0 X2V4cHIocHIucHJxdWFsLCBjLm9pZCkiKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm YnVmLAorCQkJCQkJCQkJICIsIChDQVNFIFdIRU4gcHIucHJhdHRycyBJUyBOT1QgTlVMTCBU SEVOXG4iCisJCQkJCQkJCQkgIiAgICAgcGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmcoIgor CQkJCQkJCQkJICIgICAgICBBUlJBWShTRUxFQ1QgYXR0bmFtZVxuIgorCQkJCQkJCQkJICIg ICAgICAgICAgICAgIEZST01cbiIKKwkJCQkJCQkJCSAiICAgICAgICAgICAgICAgIHBnX2Nh dGFsb2cuZ2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHIucHJh dHRyczo6cGdfY2F0YWxvZy5pbnQyW10sIDEpKSBzLFxuIgorCQkJCQkJCQkJICIgICAgICAg ICAgICAgICAgcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGVcbiIKKwkJCQkJCQkJCSAiICAgICAg ICBXSEVSRSBhdHRyZWxpZCA9IGMub2lkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKSwgJywg JylcbiIKKwkJCQkJCQkJCSAiICAgICAgIEVMU0UgTlVMTCBFTkQpIik7CisJCQl9CiAJCQll bHNlCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKLQkJCQkJCQkJCSAiLCBOVUxM Iik7CisJCQkJCQkJCQkgIiwgTlVMTCwgTlVMTCIpOwogCQkJYXBwZW5kUFFFeHBCdWZmZXIo JmJ1ZiwKIAkJCQkJCQkgICJcbkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjLFxuIgogCQkJ CQkJCSAgIiAgICAgcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbixcbiIKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCBiYTcyZTYyZTYxNC4uYjU4Zjg1ZWRlMjcg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTg1LDYgKzg1LDE0 IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwogCSAqLwogCWJvb2wJCXJmX3Zh bGlkX2Zvcl91cGRhdGU7CiAJYm9vbAkJcmZfdmFsaWRfZm9yX2RlbGV0ZTsKKworCS8qCisJ ICogdHJ1ZSBpZiB0aGUgY29sdW1ucyByZWZlcmVuY2VkIGluIGNvbHVtbiBmaWx0ZXJzIHdo aWNoIGFyZSB1c2VkIGZvciBVUERBVEUKKwkgKiBvciBERUxFVEUgYXJlIHBhcnQgb2YgdGhl IHJlcGxpY2EgaWRlbnRpdHkgb3IgdGhlIHB1YmxpY2F0aW9uIGFjdGlvbnMKKwkgKiBkbyBu b3QgaW5jbHVkZSBVUERBVEUgb3IgREVMRVRFLgorCSAqLworCWJvb2wJCWNmX3ZhbGlkX2Zv cl91cGRhdGU7CisJYm9vbAkJY2ZfdmFsaWRfZm9yX2RlbGV0ZTsKIH0gUHVibGljYXRpb25E ZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbgpAQCAtMTAwLDYgKzEwOCw3IEBA IHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uUmVsSW5mbwogewogCVJlbGF0aW9uCXJlbGF0 aW9uOwogCU5vZGUJICAgKndoZXJlQ2xhdXNlOworCUxpc3QJICAgKmNvbHVtbnM7CiB9IFB1 YmxpY2F0aW9uUmVsSW5mbzsKIAogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlv bihPaWQgcHViaWQpOwpAQCAtMTIzLDggKzEzMiwxMSBAQCB0eXBlZGVmIGVudW0gUHVibGlj YXRpb25QYXJ0T3B0CiB9IFB1YmxpY2F0aW9uUGFydE9wdDsKIAogZXh0ZXJuIExpc3QgKkdl dFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJpZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1 Yl9wYXJ0b3B0KTsKK2V4dGVybiBMaXN0ICpHZXRSZWxhdGlvbkNvbHVtblBhcnRpYWxQdWJs aWNhdGlvbnMoT2lkIHJlbGlkKTsKK2V4dGVybiBMaXN0ICpHZXRSZWxhdGlvbkNvbHVtbkxp c3RJblB1YmxpY2F0aW9uKE9pZCByZWxpZCwgT2lkIHB1YmlkKTsKIGV4dGVybiBMaXN0ICpH ZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnModm9pZCk7CiBleHRlcm4gTGlzdCAqR2V0QWxsVGFi bGVzUHVibGljYXRpb25SZWxhdGlvbnMoYm9vbCBwdWJ2aWFyb290KTsKK2V4dGVybiB2b2lk IEdldEFjdGlvbnNJblB1YmxpY2F0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25BY3Rpb25z ICphY3Rpb25zKTsKIGV4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvblNjaGVtYXMoT2lkIHB1 YmlkKTsKIGV4dGVybiBMaXN0ICpHZXRTY2hlbWFQdWJsaWNhdGlvbnMoT2lkIHNjaGVtYWlk KTsKIGV4dGVybiBMaXN0ICpHZXRTY2hlbWFQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgc2No ZW1haWQsCkBAIC0xNDIsNiArMTU0LDggQEAgZXh0ZXJuIE9iamVjdEFkZHJlc3MgcHVibGlj YXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpwcmkK IAkJCQkJCQkJCQkJICBib29sIGlmX25vdF9leGlzdHMpOwogZXh0ZXJuIE9iamVjdEFkZHJl c3MgcHVibGljYXRpb25fYWRkX3NjaGVtYShPaWQgcHViaWQsIE9pZCBzY2hlbWFpZCwKIAkJ CQkJCQkJCQkJYm9vbCBpZl9ub3RfZXhpc3RzKTsKK2V4dGVybiB2b2lkIHB1YmxpY2F0aW9u X3NldF90YWJsZV9jb2x1bW5zKFJlbGF0aW9uIHB1YnJlbCwgSGVhcFR1cGxlIHB1YnJlbHR1 cCwKKwkJCQkJCQkJCQkgIFJlbGF0aW9uIHRhcmdldHJlbCwgTGlzdCAqY29sdW1ucyk7CiAK IGV4dGVybiBPaWQJZ2V0X3B1YmxpY2F0aW9uX29pZChjb25zdCBjaGFyICpwdWJuYW1lLCBi b29sIG1pc3Npbmdfb2spOwogZXh0ZXJuIGNoYXIgKmdldF9wdWJsaWNhdGlvbl9uYW1lKE9p ZCBwdWJpZCwgYm9vbCBtaXNzaW5nX29rKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uX3JlbC5oCmluZGV4IDBkZDBmNDI1ZGI5Li40ZmViNTgxODk5ZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oCkBAIC0zNCw2ICszNCw3 IEBAIENBVEFMT0cocGdfcHVibGljYXRpb25fcmVsLDYxMDYsUHVibGljYXRpb25SZWxSZWxh dGlvbklkKQogCiAjaWZkZWYJQ0FUQUxPR19WQVJMRU4JCQkvKiB2YXJpYWJsZS1sZW5ndGgg ZmllbGRzIHN0YXJ0IGhlcmUgKi8KIAlwZ19ub2RlX3RyZWUgcHJxdWFsOwkJLyogcXVhbGlm aWNhdGlvbnMgKi8KKwlpbnQydmVjdG9yCXByYXR0cnM7CQkvKiBjb2x1bW5zIHRvIHJlcGxp Y2F0ZSAqLwogI2VuZGlmCiB9IEZvcm1EYXRhX3BnX3B1YmxpY2F0aW9uX3JlbDsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaAppbmRleCA3ODEzY2JjYjZiYi4u MDhkMTRjYTcyNDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5o CkBAIC0zMyw1ICszMyw3IEBAIGV4dGVybiB2b2lkIEFsdGVyUHVibGljYXRpb25Pd25lcl9v aWQoT2lkIHB1YmlkLCBPaWQgbmV3T3duZXJJZCk7CiBleHRlcm4gdm9pZCBJbnZhbGlkYXRl UHVibGljYXRpb25SZWxzKExpc3QgKnJlbGlkcyk7CiBleHRlcm4gYm9vbCBjb250YWluX2lu dmFsaWRfcmZjb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJ CSBMaXN0ICphbmNlc3RvcnMsIGJvb2wgcHVidmlhcm9vdCk7CitleHRlcm4gYm9vbCBjb250 YWluX2ludmFsaWRfY2Zjb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwKKwkJ CQkJCQkJCSBMaXN0ICphbmNlc3RvcnMsIGJvb2wgcHVidmlhcm9vdCk7CiAKICNlbmRpZgkJ CQkJCQkvKiBQVUJMSUNBVElPTkNNRFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmlu ZGV4IDE2MTc3MDJkOWQ2Li4xMzc1YTE3M2UzYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMu aApAQCAtMzY1Miw2ICszNjUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25UYWJs ZQogCU5vZGVUYWcJCXR5cGU7CiAJUmFuZ2VWYXIgICAqcmVsYXRpb247CQkvKiByZWxhdGlv biB0byBiZSBwdWJsaXNoZWQgKi8KIAlOb2RlCSAgICp3aGVyZUNsYXVzZTsJLyogcXVhbGlm aWNhdGlvbnMgKi8KKwlMaXN0CSAgICpjb2x1bW5zOwkJLyogTGlzdCBvZiBjb2x1bW5zIGlu IGEgcHVibGljYXRpb24gdGFibGUgKi8KIH0gUHVibGljYXRpb25UYWJsZTsKIAogLyoKQEAg LTM2ODgsNyArMzY4OSw4IEBAIHR5cGVkZWYgZW51bSBBbHRlclB1YmxpY2F0aW9uQWN0aW9u CiB7CiAJQVBfQWRkT2JqZWN0cywJCQkJLyogYWRkIG9iamVjdHMgdG8gcHVibGljYXRpb24g Ki8KIAlBUF9Ecm9wT2JqZWN0cywJCQkJLyogcmVtb3ZlIG9iamVjdHMgZnJvbSBwdWJsaWNh dGlvbiAqLwotCUFQX1NldE9iamVjdHMJCQkJLyogc2V0IGxpc3Qgb2Ygb2JqZWN0cyAqLwor CUFQX1NldE9iamVjdHMsCQkJCS8qIHNldCBsaXN0IG9mIG9iamVjdHMgKi8KKwlBUF9TZXRD b2x1bW5zCQkJCS8qIGNoYW5nZSBsaXN0IG9mIGNvbHVtbnMgZm9yIGEgdGFibGUgKi8KIH0g QWx0ZXJQdWJsaWNhdGlvbkFjdGlvbjsKIAogdHlwZWRlZiBzdHJ1Y3QgQWx0ZXJQdWJsaWNh dGlvblN0bXQKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxw cm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXgg NGQyYzg4MTY0NGEuLmE3NzFhYjhmZjMzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaApAQCAtMjA5LDEyICsyMDksMTIgQEAgZXh0ZXJuIGNoYXIgKmxvZ2lj YWxyZXBfcmVhZF9vcmlnaW4oU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqb3JpZ2luX2xz bik7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91 dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQlSZWxhdGlvbiByZWwsCiAJCQkJCQkJ CQlUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCwKLQkJCQkJCQkJCWJvb2wgYmluYXJ5KTsKKwkJ CQkJCQkJCWJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJuIExvZ2lj YWxSZXBSZWxJZCBsb2dpY2FscmVwX3JlYWRfaW5zZXJ0KFN0cmluZ0luZm8gaW4sIExvZ2lj YWxSZXBUdXBsZURhdGEgKm5ld3R1cCk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRl X3VwZGF0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQlS ZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdCwKLQkJCQkJ CQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90LCBib29sIGJpbmFyeSk7CisJCQkJCQkJCQlU dXBsZVRhYmxlU2xvdCAqbmV3c2xvdCwgYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1u cyk7CiBleHRlcm4gTG9naWNhbFJlcFJlbElkIGxvZ2ljYWxyZXBfcmVhZF91cGRhdGUoU3Ry aW5nSW5mbyBpbiwKIAkJCQkJCQkJCQkJICBib29sICpoYXNfb2xkdHVwbGUsIExvZ2ljYWxS ZXBUdXBsZURhdGEgKm9sZHR1cCwKIAkJCQkJCQkJCQkJICBMb2dpY2FsUmVwVHVwbGVEYXRh ICpuZXd0dXApOwpAQCAtMjMxLDcgKzIzMSw3IEBAIGV4dGVybiBMaXN0ICpsb2dpY2FscmVw X3JlYWRfdHJ1bmNhdGUoU3RyaW5nSW5mbyBpbiwKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBf d3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dS ZWNQdHIgbHNuLAogCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAq cHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIGV4dGVybiB2b2lkIGxv Z2ljYWxyZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwK LQkJCQkJCQkJIFJlbGF0aW9uIHJlbCk7CisJCQkJCQkJCSBSZWxhdGlvbiByZWwsIEJpdG1h cHNldCAqY29sdW1ucyk7CiBleHRlcm4gTG9naWNhbFJlcFJlbGF0aW9uICpsb2dpY2FscmVw X3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0 ZV90eXAoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgT2lk IHR5cG9pZCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0 CmluZGV4IDZkMTY2MDBhYWVhLi4xNTJmMTlmYjQyYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTY3OSw2ICs2NzksMzcyIEBAIERST1Ag VEFCTEUgcmZfdGJsX2FiY2RfcGs7CiBEUk9QIFRBQkxFIHJmX3RibF9hYmNkX25vcGs7CiBE Uk9QIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGs7CiAtLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIGZhaWwgLSBkdXBsaWNh dGUgdGFibGVzIGFyZSBub3QgYWxsb3dlZCBpZiB0aGF0IHRhYmxlIGhhcyBhbnkgY29sdW1u IGZpbHRlcnMKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViX2R1cHMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMSAoYSksIHRl c3RwdWJfdGJsMSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOworRVJST1I6ICBjb25mbGlj dGluZyBvciByZWR1bmRhbnQgY29sdW1uIGZpbHRlcnMgZm9yIHRhYmxlICJ0ZXN0cHViX3Ri bDEiCitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9kdXBzIEZPUiBUQUJMRSB0ZXN0cHVi X3RibDEsIHRlc3RwdWJfdGJsMSAoYSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKK0VS Uk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IGNvbHVtbiBmaWx0ZXJzIGZvciB0YWJs ZSAidGVzdHB1Yl90YmwxIgorUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKy0tIHRlc3Qg Zm9yIGNvbHVtbiBmaWx0ZXJzCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7 CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBGT1IgVEFCTEUgdGVzdHB1 Yl90YmwxOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfaW5zZXJ0IFdJ VEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwor Q1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgdGV4dCwg YyB0ZXh0LAorCWQgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKGEgKyBsZW5ndGgoYikpIHN0 b3JlZCk7CistLSBlcnJvcjogY29sdW1uICJ4IiBkb2VzIG5vdCBleGlzdAorQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhLCB4 KTsKK0VSUk9SOiAgY29sdW1uICJ4IiBvZiByZWxhdGlvbiAidGVzdHB1Yl90Ymw1IiBkb2Vz IG5vdCBleGlzdAorLS0gZXJyb3I6IHJlcGxpY2EgaWRlbnRpdHkgImEiIG5vdCBpbmNsdWRl ZCBpbiB0aGUgY29sdW1uIGZpbHRlcgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChiLCBjKTsKK1VQREFURSB0ZXN0cHViX3Ri bDUgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHViX3Ri bDUiCitERVRBSUw6ICBDb2x1bW4gZmlsdGVyIHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRv ZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNTsKKy0tIGVycm9yOiBn ZW5lcmF0ZWQgY29sdW1uICJkIiBjYW4ndCBiZSBpbiBsaXN0CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGQpOworRVJS T1I6ICBjYW5ub3QgcmVmZXJlbmNlIGdlbmVyYXRlZCBjb2x1bW4gImQiIGluIHB1YmxpY2F0 aW9uIGNvbHVtbiBsaXN0CistLSBlcnJvcjogc3lzdGVtIGF0dHJpYnV0ZXMgImN0aWQiIG5v dCBhbGxvd2VkIGluIGNvbHVtbiBmaWx0ZXIKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgY3RpZCk7CitFUlJPUjogIGNh bm5vdCByZWZlcmVuY2Ugc3lzdGVtIGNvbHVtbiAiY3RpZCIgaW4gcHVibGljYXRpb24gY29s dW1uIGxpc3QKKy0tIG9rCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFE RCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1 IERST1AgQ09MVU1OIGM7CQktLSBubyBkaWNlCitFUlJPUjogIGNhbm5vdCBkcm9wIGNvbHVt biAiYyIgYmVjYXVzZSBpdCBpcyBwYXJ0IG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRh YmxlIgorSElOVDogIFNwZWNpZnkgQ0FTQ0FERSBvciB1c2UgQUxURVIgUFVCTElDQVRJT04g dG8gcmVtb3ZlIHRoZSBjb2x1bW4gZnJvbSB0aGUgcHVibGljYXRpb24uCistLSBvazogZm9y IGluc2VydC1vbmx5IHB1YmxpY2F0aW9uLCB0aGUgZmlsdGVyIGlzIGFyYml0cmFyeQorQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZV9pbnNlcnQgQUREIFRBQkxFIHRlc3Rw dWJfdGJsNSAoYiwgYyk7CisvKiBub3QgYWxsIHJlcGxpY2EgaWRlbnRpdGllcyBhcmUgZ29v ZCBlbm91Z2ggKi8KK0NSRUFURSBVTklRVUUgSU5ERVggdGVzdHB1Yl90Ymw1X2Jfa2V5IE9O IHRlc3RwdWJfdGJsNSAoYiwgYyk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDUgQUxURVIg YiBTRVQgTk9UIE5VTEwsIEFMVEVSIGMgU0VUIE5PVCBOVUxMOworQUxURVIgVEFCTEUgdGVz dHB1Yl90Ymw1IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw1X2Jf a2V5OworLS0gZXJyb3I6IHJlcGxpY2EgaWRlbnRpdHkgKGIsYykgaXMgY292ZXJlZCBieSBj b2x1bW4gZmlsdGVyIChhLCBjKQorVVBEQVRFIHRlc3RwdWJfdGJsNSBTRVQgYSA9IDE7CitF UlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsNSIKK0RFVEFJTDogIENv bHVtbiBmaWx0ZXIgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhl IHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxl IERST1AgVEFCTEUgdGVzdHB1Yl90Ymw1OworLS0gZXJyb3I6IGNoYW5nZSB0aGUgcmVwbGlj YSBpZGVudGl0eSB0byAiYiIsIGFuZCB0aGVuIGZpbHRlciAoYSwgYykgZmFpbHMKK0FMVEVS IFRBQkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3Rw dWJfdGJsNV9iX2tleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQURE IFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgYyk7CistLSBlcnJvcjogcmVwbGljYSBpZGVudGl0 eSAoYixjKSBpcyBub3QgY292ZXJlZCBieSBjb2x1bW4gZmlsdGVyIChhLGMpCitVUERBVEUg dGVzdHB1Yl90Ymw1IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAi dGVzdHB1Yl90Ymw1IgorREVUQUlMOiAgQ29sdW1uIGZpbHRlciB1c2VkIGJ5IHRoZSBwdWJs aWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KKy8qIEJ1dCBp ZiB1cGQvZGVsIGFyZSBub3QgcHVibGlzaGVkLCBpdCB3b3JrcyBPSyAqLworU0VUIGNsaWVu dF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJf dGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOworUkVTRVQg Y2xpZW50X21pbl9tZXNzYWdlczsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVf aW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKK1xkUnArIHRlc3RwdWJf dGFibGVfaW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCB0ICAgICAgICAgfCBmCitUYWJsZXM6CisgICAgInB1YmxpYy50ZXN0cHViX3Ri bDUiIChhKQorCistLSB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTCwgY29sdW1uIGZpbHRl cnMgYXJlIG5vdCBhbGxvd2VkCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw2IChhIGludCwg YiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFJFUExJQ0EgSURF TlRJVFkgRlVMTDsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRB QkxFIHRlc3RwdWJfdGJsNiAoYSwgYiwgYyk7CitVUERBVEUgdGVzdHB1Yl90Ymw2IFNFVCBh ID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw2IgorREVU QUlMOiAgQ29sdW1uIGZpbHRlciB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBj b3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9ydGFibGUgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDY7CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDY7IC0tIG9rCitVUERBVEUg dGVzdHB1Yl90Ymw2IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGUgQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFNFVCBDT0xVTU5TIChhLCBiLCBjKTsK K1VQREFURSB0ZXN0cHViX3RibDYgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRl IHRhYmxlICJ0ZXN0cHViX3RibDYiCitERVRBSUw6ICBDb2x1bW4gZmlsdGVyIHVzZWQgYnkg dGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5Lgor LS0gbWFrZSBzdXJlIGNoYW5naW5nIHRoZSBjb2x1bW4gZmlsdGVyIGlzIHVwZGF0ZWQgaW4g U0VUIFRBQkxFCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw3IChhIGludCBwcmltYXJ5IGtl eSwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJs ZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBiKTsKK1xkKyB0ZXN0cHViX3RibDcKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0cHViX3Ri bDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVs dCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAg ICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwg CisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8 IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAgICAg ICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwg CitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdfcGtleSIgUFJJTUFSWSBLRVksIGJ0cmVl IChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViX2ZvcnRhYmxlIiAoYSwgYikKKwor LS0gb2s6IHdlJ2xsIHNraXAgdGhpcyB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YWJsZSBTRVQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBiKTsKK1xkKyB0ZXN0cHVi X3RibDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgInB1YmxpYy50 ZXN0cHViX3RibDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxl IHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCist LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdl ciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBsYWluICAgIHwgICAgICAg ICAgICAgIHwgCisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwg ICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAg ICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAg ICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdfcGtleSIgUFJJTUFSWSBL RVksIGJ0cmVlIChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViX2ZvcnRhYmxlIiAo YSwgYikKKworLS0gb2s6IHVwZGF0ZSB0aGUgY29sdW1uIGZpbHRlcgorQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBjKTsK K1xkKyB0ZXN0cHViX3RibDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFi bGUgInB1YmxpYy50ZXN0cHViX3RibDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlv biB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVz Y3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYSAg ICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBsYWlu ICAgIHwgICAgICAgICAgICAgIHwgCisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8 ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisgYyAg ICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVu ZGVkIHwgICAgICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdfcGtl eSIgUFJJTUFSWSBLRVksIGJ0cmVlIChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHVi X2ZvcnRhYmxlIiAoYSwgYykKKworLS0gY29sdW1uIGZpbHRlciBmb3IgcGFydGl0aW9uZWQg dGFibGVzIGhhcyB0byBjb3ZlciByZXBsaWNhIGlkZW50aXRpZXMgZm9yCistLSBhbGwgY2hp bGQgcmVsYXRpb25zCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4IChhIGludCwgYiB0ZXh0 LCBjIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChhKTsKKy0tIGZpcnN0IHBhcnRpdGlvbiBo YXMgcmVwbGljYSBpZGVudGl0eSAiYSIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhfMCBQ QVJUSVRJT04gT0YgdGVzdHB1Yl90Ymw4IEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCBy ZW1haW5kZXIgMCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBBREQgUFJJTUFSWSBL RVkgKGEpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMF9wa2V5OworLS0gc2Vjb25kIHBhcnRpdGlvbiBo YXMgcmVwbGljYSBpZGVudGl0eSAiYiIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhfMSBQ QVJUSVRJT04gT0YgdGVzdHB1Yl90Ymw4IEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCBy ZW1haW5kZXIgMSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBBREQgUFJJTUFSWSBL RVkgKGIpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMV9wa2V5OworLS0gb2s6IGNvbHVtbiBmaWx0ZXIg Y292ZXJzIGJvdGggImEiIGFuZCAiYiIKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VS Uk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgRk9SIFRBQkxF IHRlc3RwdWJfdGJsOCAoYSwgYikgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSAndHJ1ZScpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKy0tIG9rOiB0aGUgc2Ft ZSB0aGluZywgYnV0IHRyeSBwbGFpbiBBREQgVEFCTEUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfY29sX2ZpbHRlciBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfY29sX2ZpbHRlciBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBi KTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOworLS0gZmFpbHVyZTogY29sdW1u IGZpbHRlciBkb2VzIG5vdCBjb3ZlciByZXBsaWNhIGlkZW50aXR5IGZvciB0aGUgc2Vjb25k IHBhcnRpdGlvbgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfZmlsdGVyIERST1Ag VEFCTEUgdGVzdHB1Yl90Ymw4OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfZmls dGVyIEFERCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGMpOworVVBEQVRFIHRlc3RwdWJfdGJs OCBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJs OF8xIgorREVUQUlMOiAgQ29sdW1uIGZpbHRlciB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBk b2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfY29sX2ZpbHRlciBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKKy0tIGZhaWx1 cmU6IG9uZSBvZiB0aGUgcGFydGl0aW9ucyBoYXMgUkVQTElDQSBJREVOVElUWSBGVUxMCitB TFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIEZVTEw7CitBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgQUREIFRBQkxFIHRlc3RwdWJfdGJs OCAoYSwgYyk7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fu bm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw4XzEiCitERVRBSUw6ICBDb2x1bW4gZmls dGVyIHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNh IGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfZmlsdGVyIERST1Ag VEFCTEUgdGVzdHB1Yl90Ymw4OworLS0gYWRkIHRhYmxlIGFuZCB0aGVuIHRyeSBjaGFuZ2lu ZyByZXBsaWNhIGlkZW50aXR5CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNB IElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgQUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwg Yik7CistLSBmYWlsdXJlOiByZXBsaWNhIGlkZW50aXR5IGZ1bGwgY2FuJ3QgYmUgdXNlZCB3 aXRoIGEgY29sdW1uIGZpbHRlcgorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElD QSBJREVOVElUWSBGVUxMOworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CitFUlJP UjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsOF8xIgorREVUQUlMOiAgQ29s dW1uIGZpbHRlciB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUg cmVwbGljYSBpZGVudGl0eS4KKy0tIGZhaWx1cmU6IHJlcGxpY2EgaWRlbnRpdHkgaGFzIHRv IGJlIGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBmaWx0ZXIKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOF8xIERST1AgQ09OU1RSQUlOVCB0ZXN0cHViX3RibDhfMV9wa2V5OworQUxURVIgVEFC TEUgdGVzdHB1Yl90Ymw4XzEgQUREIFBSSU1BUlkgS0VZIChjKTsKK0FMVEVSIFRBQkxFIHRl c3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4 XzFfcGtleTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOworRVJST1I6ICBjYW5u b3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHViX3RibDhfMSIKK0RFVEFJTDogIENvbHVtbiBmaWx0 ZXIgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2Eg aWRlbnRpdHkuCitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKKy0tIGNvbHVtbiBmaWx0ZXIg Zm9yIHBhcnRpdGlvbmVkIHRhYmxlcyBoYXMgdG8gY292ZXIgcmVwbGljYSBpZGVudGl0aWVz IGZvcgorLS0gYWxsIGNoaWxkIHJlbGF0aW9ucworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJs OCAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoYSk7CitBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgQUREIFRBQkxFIHRlc3RwdWJfdGJs OCAoYSwgYik7CistLSBmaXJzdCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgImEi CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgKGEgaW50LCBiIHRleHQsIGMgdGV4dCk7 CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBBREQgUFJJTUFSWSBLRVkgKGEpOworQUxU RVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0 ZXN0cHViX3RibDhfMF9wa2V5OworLS0gc2Vjb25kIHBhcnRpdGlvbiBoYXMgcmVwbGljYSBp ZGVudGl0eSAiYiIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhfMSAoYSBpbnQsIGIgdGV4 dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIEFERCBQUklNQVJZIEtF WSAoYyk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CistLSBvazogYXR0YWNoaW5nIGZpcnN0 IHBhcnRpdGlvbiB3b3JrcywgYmVjYXVzZSAoYSkgaXMgaW4gY29sdW1uIGZpbHRlcgorQUxU RVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4XzAg Rk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKKy0tIGZhaWx1cmU6 IHNlY29uZCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgKGMpLCB3aGljaCBzaSBu b3QgaW4gY29sdW1uIGZpbHRlcgorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQ QVJUSVRJT04gdGVzdHB1Yl90Ymw4XzEgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJl bWFpbmRlciAxKTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOworRVJST1I6ICBj YW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHViX3RibDhfMSIKK0RFVEFJTDogIENvbHVtbiBm aWx0ZXIgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxp Y2EgaWRlbnRpdHkuCistLSBmYWlsdXJlOiBjaGFuZ2luZyByZXBsaWNhIGlkZW50aXR5IHRv IEZVTEwgZm9yIHBhcnRpdGlvbiBmYWlscywgYmVjYXVzZQorLS0gb2YgdGhlIGNvbHVtbiBm aWx0ZXIgb24gdGhlIHBhcmVudAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElD QSBJREVOVElUWSBGVUxMOworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CitFUlJP UjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsOF8wIgorREVUQUlMOiAgQ29s dW1uIGZpbHRlciB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUg cmVwbGljYSBpZGVudGl0eS4KK0RST1AgVEFCTEUgdGVzdHB1Yl90Ymw1LCB0ZXN0cHViX3Ri bDYsIHRlc3RwdWJfdGJsNywgdGVzdHB1Yl90Ymw4LCB0ZXN0cHViX3RibDhfMTsKK0RST1Ag UFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMsIHRlc3RwdWJfZm9ydGFibGUsIHRlc3Rw dWJfZm9ydGFibGVfaW5zZXJ0LCB0ZXN0cHViX2NvbF9maWx0ZXI7CistLSA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3Qg Y29tYmluYXRpb24gb2YgY29sdW1uIGFuZCByb3cgZmlsdGVyCitTRVQgY2xpZW50X21pbl9t ZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2Zp bHRlcnM7CitSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRlc3Rw dWJfdGJsX2JvdGhfZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkg KGEsYykpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0Eg SURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1 Yl90YmxfYm90aF9maWx0ZXJzIChhLGMpIFdIRVJFIChjICE9IDEpOworXGRScCsgdGVzdHB1 Yl9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorVGFibGVzOgorICAgICJwdWJsaWMudGVz dHB1Yl90YmxfYm90aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKKworXGQrIHRl c3RwdWJfdGJsX2JvdGhfZmlsdGVycworICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxl ICJwdWJsaWMudGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIgorIENvbHVtbiB8ICBUeXBlICAg fCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgfCBTdG9yYWdlIHwgU3RhdHMgdGFy Z2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAgICAgICAg IHwgcGxhaW4gICB8ICAgICAgICAgICAgICB8IAorIGIgICAgICB8IGludGVnZXIgfCAgICAg ICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBwbGFpbiAgIHwgICAgICAgICAgICAgIHwg CisgYyAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8 IHBsYWluICAgfCAgICAgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgInRlc3RwdWJfdGJs X2JvdGhfZmlsdGVyc19wa2V5IiBQUklNQVJZIEtFWSwgYnRyZWUgKGEsIGMpIFJFUExJQ0Eg SURFTlRJVFkKK1B1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1Yl9ib3RoX2ZpbHRlcnMiIChh LCBjKSBXSEVSRSAoYyA8PiAxKQorCitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmls dGVyczsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnM7CistLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t IE1vcmUgY29sdW1uIGZpbHRlciB0ZXN0cyBmb3IgdmFsaWRhdGluZyBjb2x1bW4gcmVmZXJl bmNlcworQ1JFQVRFIFRBQkxFIHJmX3RibF9hYmNkX25vcGsoYSBpbnQsIGIgaW50LCBjIGlu dCwgZCBpbnQpOworQ1JFQVRFIFRBQkxFIHJmX3RibF9hYmNkX3BrKGEgaW50LCBiIGludCwg YyBpbnQsIGQgaW50LCBQUklNQVJZIEtFWShhLGIpKTsKK0NSRUFURSBUQUJMRSByZl90Ymxf YWJjZF9wYXJ0X3BrIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQpIFBBUlRJVElPTiBieSBS QU5HRSAoYSk7CitDUkVBVEUgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wa18xIChiIGludCwg YSBpbnQgUFJJTUFSWSBLRVkpOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayBB VFRBQ0ggUEFSVElUSU9OIHJmX3RibF9hYmNkX3BhcnRfcGtfMSBGT1IgVkFMVUVTIEZST00g KDEpIFRPICgxMCk7CistLSBDYXNlIDEuIFJFUExJQ0EgSURFTlRJVFkgREVGQVVMVCAobWVh bnMgdXNlIHByaW1hcnkga2V5IG9yIG5vdGhpbmcpCistLSAxYS4gUkVQTElDQSBJREVOVElU WSBpcyBERUZBVUxUIGFuZCB0YWJsZSBoYXMgYSBQSy4KK1NFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEUg cmZfdGJsX2FiY2RfcGsgKGEsIGIpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKy0t IG9rIC0gKGEsYikgY292ZXJ0cyBhbGwgUEsgY29scworVVBEQVRFIHJmX3RibF9hYmNkX3Br IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90 YmxfYWJjZF9wayAoYSwgYiwgYyk7CistLSBvayAtIChhLGIsYykgY292ZXJ0cyBhbGwgUEsg Y29scworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7CistLSBmYWlsIC0g ImIiIGlzIG1pc3NpbmcgZnJvbSB0aGUgY29sdW1uIGZpbHRlcgorVVBEQVRFIHJmX3RibF9h YmNkX3BrIFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJs X2FiY2RfcGsiCitERVRBSUw6ICBDb2x1bW4gZmlsdGVyIHVzZWQgYnkgdGhlIHB1YmxpY2F0 aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChiKTsKKy0tIGZhaWwg LSAiYSIgaXMgbWlzc2luZyBmcm9tIHRoZSBjb2x1bW4gZmlsdGVyCitVUERBVEUgcmZfdGJs X2FiY2RfcGsgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90 YmxfYWJjZF9wayIKK0RFVEFJTDogIENvbHVtbiBmaWx0ZXIgdXNlZCBieSB0aGUgcHVibGlj YXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCistLSAxYi4gUkVQ TElDQSBJREVOVElUWSBpcyBERUZBVUxUIGFuZCB0YWJsZSBoYXMgbm8gUEsKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChhKTsKKy0t IG9rIC0gdGhlcmUncyBubyByZXBsaWNhIGlkZW50aXR5LCBzbyBhbnkgY29sdW1uIGZpbHRl ciB3b3JrcworLS0gbm90ZTogaXQgZmFpbHMgYW55d2F5LCBqdXN0IGEgYml0IGxhdGVyIGJl Y2F1c2UgVVBEQVRFIHJlcXVpcmVzIFJJCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQg YSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX25vcGsi IGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhIHJlcGxpY2EgaWRlbnRpdHkgYW5kIHB1Ymxp c2hlcyB1cGRhdGVzCitISU5UOiAgVG8gZW5hYmxlIHVwZGF0aW5nIHRoZSB0YWJsZSwgc2V0 IFJFUExJQ0EgSURFTlRJVFkgdXNpbmcgQUxURVIgVEFCTEUuCistLSBDYXNlIDIuIFJFUExJ Q0EgSURFTlRJVFkgRlVMTAorQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGsgUkVQTElDQSBJ REVOVElUWSBGVUxMOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElE RU5USVRZIEZVTEw7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZf dGJsX2FiY2RfcGsgKGMpOworLS0gZmFpbCAtIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxM IG5vIGNvbHVtbiBmaWx0ZXIgaXMgYWxsb3dlZAorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNF VCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGsi CitERVRBSUw6ICBDb2x1bW4gZmlsdGVyIHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMg bm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgKGEsIGIsIGMsIGQpOworLS0gZmFp bCAtIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMIG5vIGNvbHVtbiBmaWx0ZXIgaXMgYWxs b3dlZAorVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEgPSAxOworRVJST1I6ICBjYW5u b3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9ub3BrIgorREVUQUlMOiAgQ29sdW1uIGZp bHRlciB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGlj YSBpZGVudGl0eS4KKy0tIENhc2UgMy4gUkVQTElDQSBJREVOVElUWSBOT1RISU5HCitBTFRF UiBUQUJMRSByZl90YmxfYWJjZF9wayBSRVBMSUNBIElERU5USVRZIE5PVEhJTkc7CitBTFRF UiBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsKK0FM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7 CistLSBvayAtIFJFUExJQ0EgSURFTlRJVFkgTk9USElORyBtZWFucyBhbGwgY29sdW1uIGZp bHRlcnMgYXJlIHZhbGlkCistLSBpdCBzdGlsbCBmYWlscyBsYXRlciBiZWNhdXNlIHdpdGhv dXQgUkkgd2UgY2FuJ3QgcmVwbGljYXRlIHVwZGF0ZXMKK1VQREFURSByZl90YmxfYWJjZF9w ayBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNk X3BrIiBiZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYSByZXBsaWNhIGlkZW50aXR5IGFuZCBw dWJsaXNoZXMgdXBkYXRlcworSElOVDogIFRvIGVuYWJsZSB1cGRhdGluZyB0aGUgdGFibGUs IHNldCBSRVBMSUNBIElERU5USVRZIHVzaW5nIEFMVEVSIFRBQkxFLgorQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChhLCBiLCBjLCBkKTsK Ky0tIG9rIC0gUkVQTElDQSBJREVOVElUWSBOT1RISU5HIG1lYW5zIGFsbCBjb2x1bW4gZmls dGVycyBhcmUgdmFsaWQKKy0tIGl0IHN0aWxsIGZhaWxzIGxhdGVyIGJlY2F1c2Ugd2l0aG91 dCBSSSB3ZSBjYW4ndCByZXBsaWNhdGUgdXBkYXRlcworVVBEQVRFIHJmX3RibF9hYmNkX3Br IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2Rf cGsiIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhIHJlcGxpY2EgaWRlbnRpdHkgYW5kIHB1 Ymxpc2hlcyB1cGRhdGVzCitISU5UOiAgVG8gZW5hYmxlIHVwZGF0aW5nIHRoZSB0YWJsZSwg c2V0IFJFUExJQ0EgSURFTlRJVFkgdXNpbmcgQUxURVIgVEFCTEUuCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoZCk7CistLSBvayAt IFJFUExJQ0EgSURFTlRJVFkgTk9USElORyBtZWFucyBhbGwgY29sdW1uIGZpbHRlcnMgYXJl IHZhbGlkCistLSBpdCBzdGlsbCBmYWlscyBsYXRlciBiZWNhdXNlIHdpdGhvdXQgUkkgd2Ug Y2FuJ3QgcmVwbGljYXRlIHVwZGF0ZXMKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBh ID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2Rfbm9wayIg YmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgcmVwbGljYSBpZGVudGl0eSBhbmQgcHVibGlz aGVzIHVwZGF0ZXMKK0hJTlQ6ICBUbyBlbmFibGUgdXBkYXRpbmcgdGhlIHRhYmxlLCBzZXQg UkVQTElDQSBJREVOVElUWSB1c2luZyBBTFRFUiBUQUJMRS4KKy0tIENhc2UgNC4gUkVQTElD QSBJREVOVElUWSBJTkRFWAorQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGsgQUxURVIgQ09M VU1OIGMgU0VUIE5PVCBOVUxMOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfYWJjZF9wa19j IE9OIHJmX3RibF9hYmNkX3BrKGMpOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGsgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBpZHhfYWJjZF9wa19jOworQUxURVIgVEFCTEUg cmZfdGJsX2FiY2Rfbm9wayBBTFRFUiBDT0xVTU4gYyBTRVQgTk9UIE5VTEw7CitDUkVBVEUg VU5JUVVFIElOREVYIGlkeF9hYmNkX25vcGtfYyBPTiByZl90YmxfYWJjZF9ub3BrKGMpOwor QUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElERU5USVRZIFVTSU5HIElO REVYIGlkeF9hYmNkX25vcGtfYzsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBU QUJMRSByZl90YmxfYWJjZF9wayAoYSk7CistLSBmYWlsIC0gY29sdW1uIGZpbHRlciAiYSIg ZG9lcyBub3QgY292ZXIgdGhlIFJFUExJQ0EgSURFTlRJVFkgSU5ERVggb24gImMiCitVUERB VEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRh YmxlICJyZl90YmxfYWJjZF9wayIKK0RFVEFJTDogIENvbHVtbiBmaWx0ZXIgdXNlZCBieSB0 aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGMp OworLS0gb2sgLSBjb2x1bW4gZmlsdGVyICJjIiBkb2VzIGNvdmVyIHRoZSBSRVBMSUNBIElE RU5USVRZIElOREVYIG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsK K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3Br IChhKTsKKy0tIGZhaWwgLSBjb2x1bW4gZmlsdGVyICJhIiBkb2VzIG5vdCBjb3ZlciB0aGUg UkVQTElDQSBJREVOVElUWSBJTkRFWCBvbiAiYyIKK1VQREFURSByZl90YmxfYWJjZF9ub3Br IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2Rf bm9wayIKK0RFVEFJTDogIENvbHVtbiBmaWx0ZXIgdXNlZCBieSB0aGUgcHVibGljYXRpb24g ZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoYyk7CistLSBvayAtIGNv bHVtbiBmaWx0ZXIgImMiIGRvZXMgY292ZXIgdGhlIFJFUExJQ0EgSURFTlRJVFkgSU5ERVgg b24gImMiCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CistLSBUZXN0cyBm b3IgcGFydGl0aW9uZWQgdGFibGUKKy0tIHNldCBQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9P VCB0byBmYWxzZSBhbmQgdGVzdCByb3cgZmlsdGVyIGZvciBwYXJ0aXRpb25lZAorLS0gdGFi bGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElU SU9OX1JPT1Q9MCk7CistLSBmYWlsIC0gY2Fubm90IHVzZSByb3cgZmlsdGVyIGZvciBwYXJ0 aXRpb25lZCB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJm X3RibF9hYmNkX3BhcnRfcGsgKGEpOworRVJST1I6ICBjYW5ub3QgdXNlIHB1YmxpY2F0aW9u IGNvbHVtbiBsaXN0IGZvciByZWxhdGlvbiAicmZfdGJsX2FiY2RfcGFydF9wayIKK0RFVEFJ TDogIGNvbHVtbiBsaXN0IGNhbm5vdCBiZSB1c2VkIGZvciBhIHBhcnRpdGlvbmVkIHRhYmxl IHdoZW4gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgZmFsc2UuCistLSBvayAtIGNh biB1c2Ugcm93IGZpbHRlciBmb3IgcGFydGl0aW9uCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wa18xIChhKTsKKy0tIG9rIC0gImEi IGlzIGEgUEsgY29sCitVUERBVEUgcmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7Cist LSBzZXQgUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1QgdG8gdHJ1ZSBhbmQgdGVzdCByb3cg ZmlsdGVyIGZvciBwYXJ0aXRpb25lZAorLS0gdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MSk7CistLSBvayAtIGNh biB1c2Ugcm93IGZpbHRlciBmb3IgcGFydGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrIChhKTsKKy0tIG9r IC0gImEiIGlzIGEgUEsgY29sCitVUERBVEUgcmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9 IDE7CistLSBmYWlsIC0gY2Fubm90IHNldCBQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVCB0 byBmYWxzZSBpZiBhbnkgcm93IGZpbHRlciBpcworLS0gdXNlZCBmb3IgcGFydGl0aW9uZWQg dGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFS VElUSU9OX1JPT1Q9MCk7CitFUlJPUjogIGNhbm5vdCBzZXQgcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSBmYWxzZSBmb3IgcHVibGljYXRpb24gInRlc3RwdWI2IgorREVUQUlMOiAg VGhlIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgY29sdW1uIGZpbHRlciBmb3IgYSBwYXJ0aXRp b25lZCB0YWJsZSAicmZfdGJsX2FiY2RfcGFydF9wayIgd2hpY2ggaXMgbm90IGFsbG93ZWQg d2hlbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyBmYWxzZS4KKy0tIE5vdyBjaGFu Z2UgdGhlIHJvb3QgZmlsdGVyIHRvIHVzZSBhIGNvbHVtbiAiYiIKKy0tICh3aGljaCBpcyBu b3QgaW4gdGhlIHJlcGxpY2EgaWRlbnRpdHkpCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wa18xIChiKTsKKy0tIG9rIC0gd2UgZG9u J3QgaGF2ZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRpb25lZCB0YWJsZS4KK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MCk7Cist LSBmYWlsIC0gImIiIGlzIG5vdCBpbiBSRVBMSUNBIElERU5USVRZIElOREVYCitVUERBVEUg cmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUg dGFibGUgInJmX3RibF9hYmNkX3BhcnRfcGtfMSIKK0RFVEFJTDogIENvbHVtbiBmaWx0ZXIg dXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRl bnRpdHkuCistLSBzZXQgUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1QgdG8gdHJ1ZQorLS0g Y2FuIHVzZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRpb25lZCB0YWJsZQorQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjYgU0VUIChQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVD0xKTsKKy0t IG9rIC0gY2FuIHVzZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRpb25lZCB0YWJsZQorQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGsgKGIp OworLS0gZmFpbCAtICJiIiBpcyBub3QgaW4gUkVQTElDQSBJREVOVElUWSBJTkRFWAorVVBE QVRFIHJmX3RibF9hYmNkX3BhcnRfcGsgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBk YXRlIHRhYmxlICJyZl90YmxfYWJjZF9wYXJ0X3BrXzEiCitERVRBSUw6ICBDb2x1bW4gZmls dGVyIHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNh IGlkZW50aXR5LgorRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViNjsKK0RST1AgVEFCTEUgcmZf dGJsX2FiY2RfcGs7CitEUk9QIFRBQkxFIHJmX3RibF9hYmNkX25vcGs7CitEUk9QIFRBQkxF IHJmX3RibF9hYmNkX3BhcnRfcGs7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIFRlc3QgY2FjaGUgaW52YWxpZGF0aW9u IEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uCiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdFUlJPUic7CiBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw0KGEgaW50KTsKQEAgLTExMjQs NiArMTQ5MCwxNSBAQCBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VU IEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3RlcwogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCistLSBWZXJpZnkgdGhhdCBpdCBmYWlscyB0 byBhZGQgYSBzY2hlbWEgd2l0aCBhIGNvbHVtbiBzcGVjaWZpY2F0aW9uCitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGZv byAoYSwgYik7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIoIgorTElORSAx OiAuLi5USU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg Zm9vIChhLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9m b3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGZvbywgYmFyIChhLCBiKTsKK0VS Uk9SOiAgY29sdW1uIHNwZWNpZmljYXRpb24gbm90IGFsbG93ZWQgZm9yIHNjaGVtYQorTElO RSAxOiAuLi4gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBm b28sIGJhciAoYSwgYikuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAtLSBjbGVhbnVwIHB1Yl90ZXN0MSBzY2hl bWEgZm9yIGludmFsaWRhdGlvbiB0ZXN0cwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjJf Zm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogRFJPUCBQ VUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEsIHRlc3RwdWI0X2ZvcnNjaGVtYSwgdGVz dHB1YjVfZm9yc2NoZW1hLCB0ZXN0cHViNl9mb3JzY2hlbWEsIHRlc3RwdWJfZm9ydGFibGU7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXggYzEzNWE2MDFhMzAu LjIyMDNkYzIzOGQyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNh dGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBA IC0zODEsNiArMzgxLDI5MiBAQCBEUk9QIFRBQkxFIHJmX3RibF9hYmNkX25vcGs7CiBEUk9Q IFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGs7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorLS0gZmFpbCAtIGR1cGxpY2F0 ZSB0YWJsZXMgYXJlIG5vdCBhbGxvd2VkIGlmIHRoYXQgdGFibGUgaGFzIGFueSBjb2x1bW4g ZmlsdGVycworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZHVwcyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxIChhKSwgdGVz dHB1Yl90YmwxIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitDUkVBVEUgUFVCTElDQVRJ T04gdGVzdHB1Yl9kdXBzIEZPUiBUQUJMRSB0ZXN0cHViX3RibDEsIHRlc3RwdWJfdGJsMSAo YSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXM7CisKKy0tIHRlc3QgZm9yIGNvbHVtbiBmaWx0ZXJzCitTRVQgY2xpZW50X21pbl9tZXNz YWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBG T1IgVEFCTEUgdGVzdHB1Yl90YmwxOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGVfaW5zZXJ0IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSBpbnQgUFJJTUFS WSBLRVksIGIgdGV4dCwgYyB0ZXh0LAorCWQgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKGEg KyBsZW5ndGgoYikpIHN0b3JlZCk7CistLSBlcnJvcjogY29sdW1uICJ4IiBkb2VzIG5vdCBl eGlzdAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVz dHB1Yl90Ymw1IChhLCB4KTsKKy0tIGVycm9yOiByZXBsaWNhIGlkZW50aXR5ICJhIiBub3Qg aW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBmaWx0ZXIKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYiwgYyk7CitVUERBVEUgdGVz dHB1Yl90Ymw1IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFi bGUgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDU7CistLSBlcnJvcjogZ2VuZXJhdGVkIGNvbHVt biAiZCIgY2FuJ3QgYmUgaW4gbGlzdAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhLCBkKTsKKy0tIGVycm9yOiBzeXN0ZW0g YXR0cmlidXRlcyAiY3RpZCIgbm90IGFsbG93ZWQgaW4gY29sdW1uIGZpbHRlcgorQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChh LCBjdGlkKTsKKy0tIG9rCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFE RCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1 IERST1AgQ09MVU1OIGM7CQktLSBubyBkaWNlCistLSBvazogZm9yIGluc2VydC1vbmx5IHB1 YmxpY2F0aW9uLCB0aGUgZmlsdGVyIGlzIGFyYml0cmFyeQorQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZV9pbnNlcnQgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYiwgYyk7 CisKKy8qIG5vdCBhbGwgcmVwbGljYSBpZGVudGl0aWVzIGFyZSBnb29kIGVub3VnaCAqLwor Q1JFQVRFIFVOSVFVRSBJTkRFWCB0ZXN0cHViX3RibDVfYl9rZXkgT04gdGVzdHB1Yl90Ymw1 IChiLCBjKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBBTFRFUiBiIFNFVCBOT1QgTlVM TCwgQUxURVIgYyBTRVQgTk9UIE5VTEw7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDUgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDVfYl9rZXk7CistLSBlcnJv cjogcmVwbGljYSBpZGVudGl0eSAoYixjKSBpcyBjb3ZlcmVkIGJ5IGNvbHVtbiBmaWx0ZXIg KGEsIGMpCitVUERBVEUgdGVzdHB1Yl90Ymw1IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDU7CisKKy0tIGVy cm9yOiBjaGFuZ2UgdGhlIHJlcGxpY2EgaWRlbnRpdHkgdG8gImIiLCBhbmQgdGhlbiBmaWx0 ZXIgKGEsIGMpIGZhaWxzCitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDUgUkVQTElDQSBJREVO VElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDVfYl9rZXk7CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGMpOworLS0g ZXJyb3I6IHJlcGxpY2EgaWRlbnRpdHkgKGIsYykgaXMgbm90IGNvdmVyZWQgYnkgY29sdW1u IGZpbHRlciAoYSxjKQorVVBEQVRFIHRlc3RwdWJfdGJsNSBTRVQgYSA9IDE7CisKKy8qIEJ1 dCBpZiB1cGQvZGVsIGFyZSBub3QgcHVibGlzaGVkLCBpdCB3b3JrcyBPSyAqLworU0VUIGNs aWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOworUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFi bGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKK1xkUnArIHRlc3Rw dWJfdGFibGVfaW5zCisKKy0tIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMLCBjb2x1bW4g ZmlsdGVycyBhcmUgbm90IGFsbG93ZWQKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDYgKGEg aW50LCBiIHRleHQsIGMgdGV4dCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDYgUkVQTElD QSBJREVOVElUWSBGVUxMOworCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxl IEFERCBUQUJMRSB0ZXN0cHViX3RibDYgKGEsIGIsIGMpOworVVBEQVRFIHRlc3RwdWJfdGJs NiBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1Ag VEFCTEUgdGVzdHB1Yl90Ymw2OworCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRh YmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDY7IC0tIG9rCitVUERBVEUgdGVzdHB1Yl90Ymw2 IFNFVCBhID0gMTsKKworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBTFRF UiBUQUJMRSB0ZXN0cHViX3RibDYgU0VUIENPTFVNTlMgKGEsIGIsIGMpOworVVBEQVRFIHRl c3RwdWJfdGJsNiBTRVQgYSA9IDE7CisKKy0tIG1ha2Ugc3VyZSBjaGFuZ2luZyB0aGUgY29s dW1uIGZpbHRlciBpcyB1cGRhdGVkIGluIFNFVCBUQUJMRQorQ1JFQVRFIFRBQkxFIHRlc3Rw dWJfdGJsNyAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNyAoYSwg Yik7CitcZCsgdGVzdHB1Yl90Ymw3CistLSBvazogd2UnbGwgc2tpcCB0aGlzIHRhYmxlCitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRSB0ZXN0cHViX3Ri bDcgKGEsIGIpOworXGQrIHRlc3RwdWJfdGJsNworLS0gb2s6IHVwZGF0ZSB0aGUgY29sdW1u IGZpbHRlcgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgVEFCTEUg dGVzdHB1Yl90Ymw3IChhLCBjKTsKK1xkKyB0ZXN0cHViX3RibDcKKworLS0gY29sdW1uIGZp bHRlciBmb3IgcGFydGl0aW9uZWQgdGFibGVzIGhhcyB0byBjb3ZlciByZXBsaWNhIGlkZW50 aXRpZXMgZm9yCistLSBhbGwgY2hpbGQgcmVsYXRpb25zCitDUkVBVEUgVEFCTEUgdGVzdHB1 Yl90Ymw4IChhIGludCwgYiB0ZXh0LCBjIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChhKTsK Ky0tIGZpcnN0IHBhcnRpdGlvbiBoYXMgcmVwbGljYSBpZGVudGl0eSAiYSIKK0NSRUFURSBU QUJMRSB0ZXN0cHViX3RibDhfMCBQQVJUSVRJT04gT0YgdGVzdHB1Yl90Ymw4IEZPUiBWQUxV RVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitBTFRFUiBUQUJMRSB0ZXN0cHVi X3RibDhfMCBBREQgUFJJTUFSWSBLRVkgKGEpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4 XzAgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMF9wa2V5Owor LS0gc2Vjb25kIHBhcnRpdGlvbiBoYXMgcmVwbGljYSBpZGVudGl0eSAiYiIKK0NSRUFURSBU QUJMRSB0ZXN0cHViX3RibDhfMSBQQVJUSVRJT04gT0YgdGVzdHB1Yl90Ymw4IEZPUiBWQUxV RVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMSk7CitBTFRFUiBUQUJMRSB0ZXN0cHVi X3RibDhfMSBBREQgUFJJTUFSWSBLRVkgKGIpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4 XzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMV9wa2V5Owor CistLSBvazogY29sdW1uIGZpbHRlciBjb3ZlcnMgYm90aCAiYSIgYW5kICJiIgorU0VUIGNs aWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfY29sX2ZpbHRlciBGT1IgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKSBXSVRIIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJyk7CitSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOworCistLSBvazogdGhlIHNhbWUgdGhpbmcsIGJ1dCB0cnkgcGxhaW4gQUREIFRB QkxFCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgRFJPUCBUQUJMRSB0 ZXN0cHViX3RibDg7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgQURE IFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBh ID0gMTsKKworLS0gZmFpbHVyZTogY29sdW1uIGZpbHRlciBkb2VzIG5vdCBjb3ZlciByZXBs aWNhIGlkZW50aXR5IGZvciB0aGUgc2Vjb25kIHBhcnRpdGlvbgorQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9jb2xfZmlsdGVyIERST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfZmlsdGVyIEFERCBUQUJMRSB0ZXN0cHViX3RibDgg KGEsIGMpOworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDg7CisKKy0t IGZhaWx1cmU6IG9uZSBvZiB0aGUgcGFydGl0aW9ucyBoYXMgUkVQTElDQSBJREVOVElUWSBG VUxMCitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIEZVTEw7 CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9maWx0ZXIgQUREIFRBQkxFIHRlc3Rw dWJfdGJsOCAoYSwgYyk7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKK0FMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2ZpbHRlciBEUk9QIFRBQkxFIHRlc3RwdWJfdGJs ODsKKworLS0gYWRkIHRhYmxlIGFuZCB0aGVuIHRyeSBjaGFuZ2luZyByZXBsaWNhIGlkZW50 aXR5CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2NvbF9maWx0ZXIgQUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CisKKy0tIGZhaWx1 cmU6IHJlcGxpY2EgaWRlbnRpdHkgZnVsbCBjYW4ndCBiZSB1c2VkIHdpdGggYSBjb2x1bW4g ZmlsdGVyCitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIEZV TEw7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKKworLS0gZmFpbHVyZTogcmVw bGljYSBpZGVudGl0eSBoYXMgdG8gYmUgY292ZXJlZCBieSB0aGUgY29sdW1uIGZpbHRlcgor QUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgRFJPUCBDT05TVFJBSU5UIHRlc3RwdWJfdGJs OF8xX3BrZXk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBBREQgUFJJTUFSWSBLRVkg KGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBVU0lO RyBJTkRFWCB0ZXN0cHViX3RibDhfMV9wa2V5OworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQg YSA9IDE7CisKK0RST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworCistLSBjb2x1bW4gZmlsdGVy IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMgaGFzIHRvIGNvdmVyIHJlcGxpY2EgaWRlbnRpdGll cyBmb3IKKy0tIGFsbCBjaGlsZCByZWxhdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3Ri bDggKGEgaW50LCBiIHRleHQsIGMgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGEpOworQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfZmlsdGVyIEFERCBUQUJMRSB0ZXN0cHViX3Ri bDggKGEsIGIpOworLS0gZmlyc3QgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJh IgorQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsOF8wIChhIGludCwgYiB0ZXh0LCBjIHRleHQp OworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgQUREIFBSSU1BUlkgS0VZIChhKTsKK0FM VEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8wIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg dGVzdHB1Yl90Ymw4XzBfcGtleTsKKy0tIHNlY29uZCBwYXJ0aXRpb24gaGFzIHJlcGxpY2Eg aWRlbnRpdHkgImIiCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgKGEgaW50LCBiIHRl eHQsIGMgdGV4dCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBBREQgUFJJTUFSWSBL RVkgKGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMV9wa2V5OworCistLSBvazogYXR0YWNoaW5nIGZp cnN0IHBhcnRpdGlvbiB3b3JrcywgYmVjYXVzZSAoYSkgaXMgaW4gY29sdW1uIGZpbHRlcgor QUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4 XzAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKKy0tIGZhaWx1 cmU6IHNlY29uZCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgKGMpLCB3aGljaCBz aSBub3QgaW4gY29sdW1uIGZpbHRlcgorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFD SCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4XzEgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIs IHJlbWFpbmRlciAxKTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOworCistLSBm YWlsdXJlOiBjaGFuZ2luZyByZXBsaWNhIGlkZW50aXR5IHRvIEZVTEwgZm9yIHBhcnRpdGlv biBmYWlscywgYmVjYXVzZQorLS0gb2YgdGhlIGNvbHVtbiBmaWx0ZXIgb24gdGhlIHBhcmVu dAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElDQSBJREVOVElUWSBGVUxMOwor VVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CisKK0RST1AgVEFCTEUgdGVzdHB1Yl90 Ymw1LCB0ZXN0cHViX3RibDYsIHRlc3RwdWJfdGJsNywgdGVzdHB1Yl90Ymw4LCB0ZXN0cHVi X3RibDhfMTsKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMsIHRlc3RwdWJf Zm9ydGFibGUsIHRlc3RwdWJfZm9ydGFibGVfaW5zZXJ0LCB0ZXN0cHViX2NvbF9maWx0ZXI7 CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKworLS0gVGVzdCBjb21iaW5hdGlvbiBvZiBjb2x1bW4gYW5kIHJvdyBmaWx0ZXIK K1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViX2JvdGhfZmlsdGVyczsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitD UkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMg aW50LCBQUklNQVJZIEtFWSAoYSxjKSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3Ro X2ZpbHRlcnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibF9ib3Ro X2ZpbHRlcnNfcGtleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJz IEFERCBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0g MSk7CitcZFJwKyB0ZXN0cHViX2JvdGhfZmlsdGVycworXGQrIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVycworCitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyczsKK0RST1Ag UFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnM7CistLSA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0gTW9yZSBjb2x1 bW4gZmlsdGVyIHRlc3RzIGZvciB2YWxpZGF0aW5nIGNvbHVtbiByZWZlcmVuY2VzCitDUkVB VEUgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayhhIGludCwgYiBpbnQsIGMgaW50LCBkIGludCk7 CitDUkVBVEUgVEFCTEUgcmZfdGJsX2FiY2RfcGsoYSBpbnQsIGIgaW50LCBjIGludCwgZCBp bnQsIFBSSU1BUlkgS0VZKGEsYikpOworQ1JFQVRFIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRf cGsgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCkgUEFSVElUSU9OIGJ5IFJBTkdFIChhKTsK K0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrXzEgKGIgaW50LCBhIGludCBQUklN QVJZIEtFWSk7CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrIEFUVEFDSCBQQVJU SVRJT04gcmZfdGJsX2FiY2RfcGFydF9wa18xIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEw KTsKKworLS0gQ2FzZSAxLiBSRVBMSUNBIElERU5USVRZIERFRkFVTFQgKG1lYW5zIHVzZSBw cmltYXJ5IGtleSBvciBub3RoaW5nKQorCistLSAxYS4gUkVQTElDQSBJREVOVElUWSBpcyBE RUZBVUxUIGFuZCB0YWJsZSBoYXMgYSBQSy4KK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0g J0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEUgcmZfdGJs X2FiY2RfcGsgKGEsIGIpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKy0tIG9rIC0g KGEsYikgY292ZXJ0cyBhbGwgUEsgY29scworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBh ID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJj ZF9wayAoYSwgYiwgYyk7CistLSBvayAtIChhLGIsYykgY292ZXJ0cyBhbGwgUEsgY29scwor VVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7CistLSBmYWlsIC0gImIiIGlz IG1pc3NpbmcgZnJvbSB0aGUgY29sdW1uIGZpbHRlcgorVVBEQVRFIHJmX3RibF9hYmNkX3Br IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90 YmxfYWJjZF9wayAoYik7CistLSBmYWlsIC0gImEiIGlzIG1pc3NpbmcgZnJvbSB0aGUgY29s dW1uIGZpbHRlcgorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKKworLS0gMWIu IFJFUExJQ0EgSURFTlRJVFkgaXMgREVGQVVMVCBhbmQgdGFibGUgaGFzIG5vIFBLCitBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoYSk7 CistLSBvayAtIHRoZXJlJ3Mgbm8gcmVwbGljYSBpZGVudGl0eSwgc28gYW55IGNvbHVtbiBm aWx0ZXIgd29ya3MKKy0tIG5vdGU6IGl0IGZhaWxzIGFueXdheSwganVzdCBhIGJpdCBsYXRl ciBiZWNhdXNlIFVQREFURSByZXF1aXJlcyBSSQorVVBEQVRFIHJmX3RibF9hYmNkX25vcGsg U0VUIGEgPSAxOworCistLSBDYXNlIDIuIFJFUExJQ0EgSURFTlRJVFkgRlVMTAorQUxURVIg VEFCTEUgcmZfdGJsX2FiY2RfcGsgUkVQTElDQSBJREVOVElUWSBGVUxMOworQUxURVIgVEFC TEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElERU5USVRZIEZVTEw7CitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGMpOworLS0gZmFp bCAtIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMIG5vIGNvbHVtbiBmaWx0ZXIgaXMgYWxs b3dlZAorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChhLCBiLCBjLCBkKTsK Ky0tIGZhaWwgLSB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBubyBjb2x1bW4gZmlsdGVy IGlzIGFsbG93ZWQKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsKKworLS0g Q2FzZSAzLiBSRVBMSUNBIElERU5USVRZIE5PVEhJTkcKK0FMVEVSIFRBQkxFIHJmX3RibF9h YmNkX3BrIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsKK0FMVEVSIFRBQkxFIHJmX3RibF9h YmNkX25vcGsgUkVQTElDQSBJREVOVElUWSBOT1RISU5HOworQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChhKTsKKy0tIG9rIC0gUkVQTElD QSBJREVOVElUWSBOT1RISU5HIG1lYW5zIGFsbCBjb2x1bW4gZmlsdGVycyBhcmUgdmFsaWQK Ky0tIGl0IHN0aWxsIGZhaWxzIGxhdGVyIGJlY2F1c2Ugd2l0aG91dCBSSSB3ZSBjYW4ndCBy ZXBsaWNhdGUgdXBkYXRlcworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSwg YiwgYywgZCk7CistLSBvayAtIFJFUExJQ0EgSURFTlRJVFkgTk9USElORyBtZWFucyBhbGwg Y29sdW1uIGZpbHRlcnMgYXJlIHZhbGlkCistLSBpdCBzdGlsbCBmYWlscyBsYXRlciBiZWNh dXNlIHdpdGhvdXQgUkkgd2UgY2FuJ3QgcmVwbGljYXRlIHVwZGF0ZXMKK1VQREFURSByZl90 YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQg VEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoZCk7CistLSBvayAtIFJFUExJQ0EgSURFTlRJVFkg Tk9USElORyBtZWFucyBhbGwgY29sdW1uIGZpbHRlcnMgYXJlIHZhbGlkCistLSBpdCBzdGls bCBmYWlscyBsYXRlciBiZWNhdXNlIHdpdGhvdXQgUkkgd2UgY2FuJ3QgcmVwbGljYXRlIHVw ZGF0ZXMKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsKKworLS0gQ2FzZSA0 LiBSRVBMSUNBIElERU5USVRZIElOREVYCitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9wayBB TFRFUiBDT0xVTU4gYyBTRVQgTk9UIE5VTEw7CitDUkVBVEUgVU5JUVVFIElOREVYIGlkeF9h YmNkX3BrX2MgT04gcmZfdGJsX2FiY2RfcGsoYyk7CitBTFRFUiBUQUJMRSByZl90YmxfYWJj ZF9wayBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIGlkeF9hYmNkX3BrX2M7CitBTFRF UiBUQUJMRSByZl90YmxfYWJjZF9ub3BrIEFMVEVSIENPTFVNTiBjIFNFVCBOT1QgTlVMTDsK K0NSRUFURSBVTklRVUUgSU5ERVggaWR4X2FiY2Rfbm9wa19jIE9OIHJmX3RibF9hYmNkX25v cGsoYyk7CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggaWR4X2FiY2Rfbm9wa19jOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChhKTsKKy0tIGZhaWwgLSBjb2x1bW4gZmls dGVyICJhIiBkb2VzIG5vdCBjb3ZlciB0aGUgUkVQTElDQSBJREVOVElUWSBJTkRFWCBvbiAi YyIKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGMpOworLS0gb2sgLSBjb2x1 bW4gZmlsdGVyICJjIiBkb2VzIGNvdmVyIHRoZSBSRVBMSUNBIElERU5USVRZIElOREVYIG9u ICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChhKTsKKy0tIGZhaWwg LSBjb2x1bW4gZmlsdGVyICJhIiBkb2VzIG5vdCBjb3ZlciB0aGUgUkVQTElDQSBJREVOVElU WSBJTkRFWCBvbiAiYyIKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsKK0FM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChj KTsKKy0tIG9rIC0gY29sdW1uIGZpbHRlciAiYyIgZG9lcyBjb3ZlciB0aGUgUkVQTElDQSBJ REVOVElUWSBJTkRFWCBvbiAiYyIKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0g MTsKKworLS0gVGVzdHMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCisKKy0tIHNldCBQVUJMSVNI X1ZJQV9QQVJUSVRJT05fUk9PVCB0byBmYWxzZSBhbmQgdGVzdCByb3cgZmlsdGVyIGZvciBw YXJ0aXRpb25lZAorLS0gdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAo UFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MCk7CistLSBmYWlsIC0gY2Fubm90IHVzZSBy b3cgZmlsdGVyIGZvciBwYXJ0aXRpb25lZCB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGsgKGEpOworLS0gb2sgLSBjYW4g dXNlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGtfMSAoYSk7CistLSBvayAtICJhIiBp cyBhIFBLIGNvbAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRfcGsgU0VUIGEgPSAxOworLS0g c2V0IFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UIHRvIHRydWUgYW5kIHRlc3Qgcm93IGZp bHRlciBmb3IgcGFydGl0aW9uZWQKKy0tIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTEpOworLS0gb2sgLSBjYW4g dXNlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYSk7CistLSBvayAt ICJhIiBpcyBhIFBLIGNvbAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRfcGsgU0VUIGEgPSAx OworLS0gZmFpbCAtIGNhbm5vdCBzZXQgUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1QgdG8g ZmFsc2UgaWYgYW55IHJvdyBmaWx0ZXIgaXMKKy0tIHVzZWQgZm9yIHBhcnRpdGlvbmVkIHRh YmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJ VElPTl9ST09UPTApOworLS0gTm93IGNoYW5nZSB0aGUgcm9vdCBmaWx0ZXIgdG8gdXNlIGEg Y29sdW1uICJiIgorLS0gKHdoaWNoIGlzIG5vdCBpbiB0aGUgcmVwbGljYSBpZGVudGl0eSkK K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0 X3BrXzEgKGIpOworLS0gb2sgLSB3ZSBkb24ndCBoYXZlIHJvdyBmaWx0ZXIgZm9yIHBhcnRp dGlvbmVkIHRhYmxlLgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIChQVUJMSVNI X1ZJQV9QQVJUSVRJT05fUk9PVD0wKTsKKy0tIGZhaWwgLSAiYiIgaXMgbm90IGluIFJFUExJ Q0EgSURFTlRJVFkgSU5ERVgKK1VQREFURSByZl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBhID0g MTsKKy0tIHNldCBQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVCB0byB0cnVlCistLSBjYW4g dXNlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViNiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTEpOworLS0gb2sg LSBjYW4gdXNlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYik7Cist LSBmYWlsIC0gImIiIGlzIG5vdCBpbiBSRVBMSUNBIElERU5USVRZIElOREVYCitVUERBVEUg cmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7CisKK0RST1AgUFVCTElDQVRJT04gdGVz dHB1YjY7CitEUk9QIFRBQkxFIHJmX3RibF9hYmNkX3BrOworRFJPUCBUQUJMRSByZl90Ymxf YWJjZF9ub3BrOworRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrOworLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIC0t IFRlc3QgY2FjaGUgaW52YWxpZGF0aW9uIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uCiBT RVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgVEFCTEUgdGVzdHB1 Yl90Ymw0KGEgaW50KTsKQEAgLTYyMiw2ICs5MDgsMTAgQEAgQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3Rl bnRfc2NoZW0KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxM IFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHVi MV9mb3JzY2hlbWEKIAorLS0gVmVyaWZ5IHRoYXQgaXQgZmFpbHMgdG8gYWRkIGEgc2NoZW1h IHdpdGggYSBjb2x1bW4gc3BlY2lmaWNhdGlvbgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBmb28gKGEsIGIpOworQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFND SEVNQSBmb28sIGJhciAoYSwgYik7CisKIC0tIGNsZWFudXAgcHViX3Rlc3QxIHNjaGVtYSBm b3IgaW52YWxpZGF0aW9uIHRlc3RzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3Jz Y2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBEUk9QIFBVQkxJ Q0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSwgdGVzdHB1YjRfZm9yc2NoZW1hLCB0ZXN0cHVi NV9mb3JzY2hlbWEsIHRlc3RwdWI2X2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3J0YWJsZTsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOV9jb2x1bW5fbGlzdC5wbCBi L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOV9jb2x1bW5fbGlzdC5wbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWMyYzhhNzg5YWQKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjlfY29sdW1uX2xpc3QucGwKQEAg LTAsMCArMSw4MzYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgcGFydGlhbC1jb2x1bW4gcHVibGljYXRp b24gb2YgdGFibGVzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2Ug VGVzdDo6TW9yZSB0ZXN0cyA9PiAyNjsKKworIyBzZXR1cAorCitteSAkbm9kZV9wdWJsaXNo ZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5v ZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRu b2RlX3B1Ymxpc2hlci0+c3RhcnQ7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmli ZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2Ny aWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJcXEobWF4X2xvZ2ljYWxf cmVwbGljYXRpb25fd29ya2VycyA9IDYpKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0Owor CitteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAn IGRibmFtZT1wb3N0Z3Jlcyc7CisKK3N1YiB3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYwor eworCW15ICgkbm9kZSkgPSBAXzsKKworCSMgQWxzbyB3YWl0IGZvciBpbml0aWFsIHRhYmxl IHN5bmMgdG8gZmluaXNoCisJbXkgJHN5bmNlZF9xdWVyeSA9ICJTRUxFQ1QgY291bnQoMSkg PSAwIEZST00gcGdfc3Vic2NyaXB0aW9uX3JlbCBXSEVSRSBzcnN1YnN0YXRlIE5PVCBJTiAo J3InLCAncycpOyI7CisKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAk c3luY2VkX3F1ZXJ5KQorCQlvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBz dWJzY3JpYmVyIHRvIHN5bmNocm9uaXplIGRhdGEiOworfQorCisjIHNldHVwIHRhYmxlcyBv biBib3RoIG5vZGVzCisKKyMgdGFiMTogc2ltcGxlIDE6MSByZXBsaWNhdGlvbgorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRh YjEgKGEgaW50IFBSSU1BUlkgS0VZLCAiQiIgaW50LCBjIGludCkKKykpOworCiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRh YjEgKGEgaW50IFBSSU1BUlkgS0VZLCAiQiIgaW50LCBjIGludCkKKykpOworCisjIHRhYjI6 IHJlcGxpY2F0aW9uIGZyb20gcmVndWxhciB0byB0YWJsZSB3aXRoIGZld2VyIGNvbHVtbnMK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBU QUJMRSB0YWIyIChhIGludCBQUklNQVJZIEtFWSwgYiB2YXJjaGFyLCBjIGludCk7CispKTsK KworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFU RSBUQUJMRSB0YWIyIChhIGludCBQUklNQVJZIEtFWSwgYiB2YXJjaGFyKQorKSk7CisKKyMg dGFiMzogc2ltcGxlIDE6MSByZXBsaWNhdGlvbiB3aXRoIHdlaXJkIGNvbHVtbiBuYW1lcwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRB QkxFIHRhYjMgKCJhJyIgaW50IFBSSU1BUlkgS0VZLCAiQiIgdmFyY2hhciwgImMnIiBpbnQp CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAor CUNSRUFURSBUQUJMRSB0YWIzICgiYSciIGludCBQUklNQVJZIEtFWSwgImMnIiBpbnQpCisp KTsKKworIyB0ZXN0X3BhcnQ6IHBhcnRpdGlvbmVkIHRhYmxlcywgd2l0aCBwYXJ0aXRpb25p bmcgKGluY2x1ZGluZyBtdWx0aS1sZXZlbAorIyBwYXJ0aXRpb25pbmcsIGFuZCBmZXdlciBj b2x1bW5zIG9uIHRoZSBzdWJzY3JpYmVyKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydCAoYSBpbnQgUFJJTUFS WSBLRVksIGIgdGV4dCwgYyB0aW1lc3RhbXB0eikgUEFSVElUSU9OIEJZIExJU1QgKGEpOwor CUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnQgRk9S IFZBTFVFUyBJTiAoMSwyLDMpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8xIFBBUlRJ VElPTiBPRiB0ZXN0X3BhcnQgRk9SIFZBTFVFUyBJTiAoNCw1LDYpIFBBUlRJVElPTiBCWSBM SVNUIChhKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzJfMiBQQVJUSVRJT04gT0YgdGVz dF9wYXJ0XzJfMSBGT1IgVkFMVUVTIElOICg0LDUpOworKSk7CisKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0 IChhIGludCBQUklNQVJZIEtFWSwgYiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisJ Q1JFQVRFIFRBQkxFIHRlc3RfcGFydF8xXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydCBGT1Ig VkFMVUVTIElOICgxLDIsMyk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzEgUEFSVElU SU9OIE9GIHRlc3RfcGFydCBGT1IgVkFMVUVTIElOICg0LDUsNikgUEFSVElUSU9OIEJZIExJ U1QgKGEpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8yIFBBUlRJVElPTiBPRiB0ZXN0 X3BhcnRfMl8xIEZPUiBWQUxVRVMgSU4gKDQsNSk7CispKTsKKworIyB0YWI0OiB0YWJsZSB3 aXRoIHVzZXItZGVmaW5lZCBlbnVtIHR5cGVzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVFlQRSB0ZXN0X3R5cCBBUyBFTlVNICgnYmx1 ZScsICdyZWQnKTsKKwlDUkVBVEUgVEFCTEUgdGFiNCAoYSBJTlQgUFJJTUFSWSBLRVksIGIg dGVzdF90eXAsIGMgaW50LCBkIHRleHQpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVFlQRSB0ZXN0X3R5cCBBUyBFTlVN ICgnYmx1ZScsICdyZWQnKTsKKwlDUkVBVEUgVEFCTEUgdGFiNCAoYSBJTlQgUFJJTUFSWSBL RVksIGIgdGVzdF90eXAsIGQgdGV4dCk7CispKTsKKworCisjIFRFU1Q6IGNyZWF0ZSBwdWJs aWNhdGlvbiBhbmQgc3Vic2NyaXB0aW9uIGZvciBzb21lIG9mIHRoZSB0YWJsZXMgd2l0aAor IyBjb2x1bW4gbGlzdHMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWIxCisJICAgRk9SIFRBQkxFIHRhYjEgKGEs ICJCIiksIHRhYjMgKCJhJyIsICJjJyIpLCB0ZXN0X3BhcnQgKGEsIGIpLCB0YWI0IChhLCBi LCBkKQorCSAgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1ZScpOwor KSk7CisKKyMgY2hlY2sgdGhhdCB3ZSBnb3QgdGhlIHJpZ2h0IHByYXR0cnMgdmFsdWVzIGZv ciB0aGUgcHVibGljYXRpb24gaW4gdGhlCisjIHBnX3B1YmxpY2F0aW9uX3JlbCBjYXRhbG9n IChvcmRlciBieSByZWxuYW1lLCB0byBnZXQgc3RhYmxlIG9yZGVyaW5nKQorbXkgJHJlc3Vs dCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCVNFTEVD VCByZWxuYW1lLCBwcmF0dHJzCisJRlJPTSBwZ19wdWJsaWNhdGlvbl9yZWwgcGIgSk9JTiBw Z19jbGFzcyBwYyBPTihwYi5wcnJlbGlkID0gcGMub2lkKQorCU9SREVSIEJZIHJlbG5hbWUK KykpOworCitpcygkcmVzdWx0LCBxcSh0YWIxfDEgMgordGFiM3wxIDMKK3RhYjR8MSAyIDQK K3Rlc3RfcGFydHwxIDIpLCAncHVibGljYXRpb24gcmVsYXRpb24gdXBkYXRlZCcpOworCisj IGNyZWF0ZSBzdWJzY3JpcHRpb24gZm9yIHRoZSBwdWJsaWNhdGlvbiwgd2FpdCBmb3Igc3lu YyB0byBjb21wbGV0ZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBDT05ORUNUSU9OICckcHVibGlzaGVy X2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1YjEKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworIyBURVNUOiBpbnNlcnQgZGF0YSBpbnRvIHRo ZSB0YWJsZXMsIGFuZCBzZWUgd2UgZ290IHJlcGxpY2F0aW9uIG9mIGp1c3QKKyMgdGhlIGZp bHRlcmVkIGNvbHVtbnMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUlOU0VSVCBJTlRPIHRhYjEgVkFMVUVTICgxLCAyLCAzKTsKKwlJTlNFUlQgSU5U TyB0YWIxIFZBTFVFUyAoNCwgNSwgNik7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiMyBWQUxVRVMgKDEsIDIs IDMpOworCUlOU0VSVCBJTlRPIHRhYjMgVkFMVUVTICg0LCA1LCA2KTsKKykpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0 YWI0IFZBTFVFUyAoMSwgJ3JlZCcsIDMsICdvaCBteScpOworCUlOU0VSVCBJTlRPIHRhYjQg VkFMVUVTICgyLCAnYmx1ZScsIDQsICdoZWxsbycpOworKSk7CisKKyMgcmVwbGljYXRpb24g b2YgcGFydGl0aW9uZWQgdGFibGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydCBWQUxVRVMgKDEsICdhYmMnLCAn MjAyMS0wNy0wNCAxMjowMDowMCcpOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydCBWQUxVRVMg KDIsICdiY2QnLCAnMjAyMS0wNy0wMyAxMToxMjoxMycpOworCUlOU0VSVCBJTlRPIHRlc3Rf cGFydCBWQUxVRVMgKDQsICdhYmMnLCAnMjAyMS0wNy0wNCAxMjowMDowMCcpOworCUlOU0VS VCBJTlRPIHRlc3RfcGFydCBWQUxVRVMgKDUsICdiY2QnLCAnMjAyMS0wNy0wMyAxMToxMjox MycpOworKSk7CisKKyMgd2FpdCBmb3IgY2F0Y2h1cCBiZWZvcmUgY2hlY2tpbmcgdGhlIHN1 YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOwor CisjIHRhYjE6IG9ubHkgKGEsYikgaXMgcmVwbGljYXRlZAorJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRhYjEi KTsKK2lzKCRyZXN1bHQsIHFxKDF8MnwKKzR8NXwpLCAnaW5zZXJ0IG9uIGNvbHVtbiB0YWIx LmMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworIyB0YWIzOiBvbmx5IChhLGMpIGlzIHJlcGxp Y2F0ZWQKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUICogRlJPTSB0YWIzIik7CitpcygkcmVzdWx0LCBxcSgxfDMKKzR8Niks ICdpbnNlcnQgb24gY29sdW1uIHRhYjMuYiBpcyBub3QgcmVwbGljYXRlZCcpOworCisjIHRh YjQ6IG9ubHkgKGEsYixkKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGFiNCIpOwor aXMoJHJlc3VsdCwgcXEoMXxyZWR8b2ggbXkKKzJ8Ymx1ZXxoZWxsbyksICdpbnNlcnQgb24g Y29sdW1uIHRhYjQuYyBpcyBub3QgcmVwbGljYXRlZCcpOworCisjIHRlc3RfcGFydDogKGEs YikgaXMgcmVwbGljYXRlZAorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydCIpOworaXMoJHJlc3Vs dCwgcXEoMXxhYmMKKzJ8YmNkCis0fGFiYworNXxiY2QpLCAnaW5zZXJ0IG9uIGNvbHVtbiB0 ZXN0X3BhcnQuYyBjb2x1bW5zIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKyMgVEVTVDogZG8g c29tZSB1cGRhdGVkIG9uIHNvbWUgb2YgdGhlIHRhYmxlcywgYm90aCBvbiBjb2x1bW5zIGlu Y2x1ZGVkCisjIGluIHRoZSBjb2x1bW4gbGlzdCBhbmQgb3RoZXIKKworIyB0YWIxOiB1cGRh dGUgb2YgcmVwbGljYXRlZCBjb2x1bW4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJcXEoVVBEQVRFIHRhYjEgU0VUICJCIiA9IDIgKiAiQiIgd2hlcmUgYSA9 IDEpKTsKKworIyB0YWIxOiB1cGRhdGUgb2Ygbm9uLXJlcGxpY2F0ZWQgY29sdW1uCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0YWIxIFNF VCBjID0gMipjIHdoZXJlIGEgPSA0KSk7CisKKyMgdGFiMzogdXBkYXRlIG9mIG5vbi1yZXBs aWNhdGVkCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFVQ REFURSB0YWIzIFNFVCAiQiIgPSAiQiIgfHwgJyB1cGRhdGVkJyB3aGVyZSAiYSciID0gNCkp OworCisjIHRhYjM6IHVwZGF0ZSBvZiByZXBsaWNhdGVkIGNvbHVtbgorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShVUERBVEUgdGFiMyBTRVQgImMnIiA9 IDIgKiAiYyciIHdoZXJlICJhJyIgPSAxKSk7CisKKyMgdGFiNAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShVUERBVEUgdGFiNCBTRVQgYiA9ICdibHVl JywgYyA9IGMgKiAyLCBkID0gZCB8fCAnIHVwZGF0ZWQnIHdoZXJlIGEgPSAxKSk7CisKKyMg dGFiNAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShVUERB VEUgdGFiNCBTRVQgYiA9ICdyZWQnLCBjID0gYyAqIDIsIGQgPSBkIHx8ICcgdXBkYXRlZCcg d2hlcmUgYSA9IDIpKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdz dWIxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwlxcShTRUxFQ1QgKiBGUk9NIHRhYjEgT1JERVIgQlkgYSkpOworaXMoJHJlc3Vs dCwKK3FxKDF8NHwKKzR8NXwpLCAnb25seSB1cGRhdGUgb24gY29sdW1uIHRhYjEuYiBpcyBy ZXBsaWNhdGVkJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwlxcShTRUxFQ1QgKiBGUk9NIHRhYjMgT1JERVIgQlkgImEnIikpOwor aXMoJHJlc3VsdCwKK3FxKDF8NgorNHw2KSwgJ29ubHkgdXBkYXRlIG9uIGNvbHVtbiB0YWIz LmMgaXMgcmVwbGljYXRlZCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoU0VMRUNUICogRlJPTSB0YWI0IE9SREVSIEJZIGEp KTsKKworaXMoJHJlc3VsdCwgcXEoMXxibHVlfG9oIG15IHVwZGF0ZWQKKzJ8cmVkfGhlbGxv IHVwZGF0ZWQpLCAndXBkYXRlIG9uIGNvbHVtbiB0YWI0LmMgaXMgbm90IHJlcGxpY2F0ZWQn KTsKKworCisjIFRFU1Q6IGFkZCB0YWJsZSB3aXRoIGEgY29sdW1uIGxpc3QsIGluc2VydCBk YXRhLCByZXBsaWNhdGUKKworIyBpbnNlcnQgc29tZSBkYXRhIGJlZm9yZSBhZGRpbmcgaXQg dG8gdGhlIHB1YmxpY2F0aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWIyIFZBTFVFUyAoMSwgJ2FiYycsIDMpOworKSk7 CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFBV QkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIHRhYjIgKGEsIGIpIik7CisKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gc3Vi MSBSRUZSRVNIIFBVQkxJQ0FUSU9OIik7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5j KCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWIyIFZBTFVFUyAoMiwgJ2RlZicsIDYpOwor KSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNF TEVDVCAqIEZST00gdGFiMiBPUkRFUiBCWSBhIik7CitpcygkcmVzdWx0LCBxcSgxfGFiYwor MnxkZWYpLCAnaW5zZXJ0IG9uIGNvbHVtbiB0YWIyLmMgaXMgbm90IHJlcGxpY2F0ZWQnKTsK KworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJVVBEQVRF IHRhYjIgU0VUIGMgPSA1IHdoZXJlIGEgPSAxOworCVVQREFURSB0YWIyIFNFVCBiID0gJ3h5 eicgd2hlcmUgYSA9IDI7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdzdWIxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0YWIyIE9SREVSIEJZIGEiKTsKK2lzKCRy ZXN1bHQsIHFxKDF8YWJjCisyfHh5eiksICd1cGRhdGUgb24gY29sdW1uIHRhYjIuYyBpcyBu b3QgcmVwbGljYXRlZCcpOworCisKKyMgVEVTVDogYWRkIGEgdGFibGUgdG8gdHdvIHB1Ymxp Y2F0aW9ucyB3aXRoIGRpZmZlcmVudCBjb2x1bW4gbGlzdHMsIGFuZAorIyBjcmVhdGUgYSBz aW5nbGUgc3Vic2NyaXB0aW9uIHJlcGxpY2F0aW5nIGJvdGggcHVibGljYXRpb25zCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUg dGFiNSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCwgZCBpbnQpOworCUNSRUFU RSBQVUJMSUNBVElPTiBwdWIyIEZPUiBUQUJMRSB0YWI1IChhLCBiKTsKKwlDUkVBVEUgUFVC TElDQVRJT04gcHViMyBGT1IgVEFCTEUgdGFiNSAoYSwgZCk7CispKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWI1 IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGQgaW50KTsKKykpOworCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9O IHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjIsIHB1YjMKKykpOworCit3YWl0X2Zvcl9zdWJz Y3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKKyMgVEVTVDogaW5zZXJ0IGRhdGEgYW5kIG1h a2Ugc3VyZSBhbGwgdGhlIGNvbHVtbnMgKHVuaW9uIG9mIHRoZSBjb2x1bW5zIGxpc3RzKQor IyB3ZXJlIHJlcGxpY2F0ZWQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0YWI1IFZBTFVFUyAoMSwgMTEsIDExMSwgMTExMSkiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0YWI1 IFZBTFVFUyAoMiwgMjIsIDIyMiwgMjIyMikiKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjUgT1JERVIgQlkgYSIpLAorICAgcXEo MXwxMXwxMTExCisyfDIyfDIyMjIpLAorICAgJ292ZXJsYXBwaW5nIHB1YmxpY2F0aW9ucyB3 aXRoIG92ZXJsYXBwaW5nIGNvbHVtbiBsaXN0cycpOworCisjIGFuZCBmaW5hbGx5LCBzZXQg dGhlIGNvbHVtbiBmaWx0ZXIgdG8gQUxMIGZvciBvbmUgb2YgdGhlIHB1YmxpY2F0aW9ucywK KyMgd2hpY2ggbWVhbnMgcmVwbGljYXRpbmcgYWxsIGNvbHVtbnMgKHJlbW92aW5nIHRoZSBj b2x1bW4gZmlsdGVyKSwgYnV0CisjIGZpcnN0IGFkZCB0aGUgbWlzc2luZyBjb2x1bW4gdG8g dGhlIHRhYmxlIG9uIHN1YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjMgQUxURVIgVEFCTEUgdGFi NSBTRVQgQ09MVU1OUyBBTEw7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFJFRlJFU0ggUFVC TElDQVRJT047CisJQUxURVIgVEFCTEUgdGFiNSBBREQgQ09MVU1OIGMgSU5UOworKSk7CisK K3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGFiNSBW QUxVRVMgKDMsIDMzLCAzMzMsIDMzMzMpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI1IE9SREVSIEJZIGEiKSwKKyAgIHFxKDF8 MTF8MTExMXwKKzJ8MjJ8MjIyMnwKKzN8MzN8MzMzM3wzMzMpLAorICAgJ292ZXJsYXBwaW5n IHB1YmxpY2F0aW9ucyB3aXRoIG92ZXJsYXBwaW5nIGNvbHVtbiBsaXN0cycpOworCisjIFRF U1Q6IGNyZWF0ZSBhIHRhYmxlIHdpdGggYSBjb2x1bW4gZmlsdGVyLCB0aGVuIGNoYW5nZSB0 aGUgcmVwbGljYQorIyBpZGVudGl0eSBieSByZXBsYWNpbmcgYSBwcmltYXJ5IGtleSAoYnV0 IHVzZSBhIGRpZmZlcmVudCBjb2x1bW4gaW4KKyMgdGhlIGNvbHVtbiBmaWx0ZXIpCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUg dGFiNiAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCwgZCBpbnQpOworCUNSRUFU RSBQVUJMSUNBVElPTiBwdWI0IEZPUiBUQUJMRSB0YWI2IChhLCBiKTsKKykpOworCiskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxF IHRhYjYgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQsIGQgaW50KTsKKykpOwor Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIg U1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjQKKykpOworCit3YWl0X2Zv cl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiNiBWQUxV RVMgKDEsIDIyLCAzMzMsIDQ0NDQpOworCVVQREFURSB0YWI2IFNFVCBiID0gYiAqIDIsIGMg PSBjICogMywgZCA9IGQgKiA0IFdIRVJFIGEgPSAxOworKSk7CisKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI2IE9SREVSIEJZIGEiKSwK KyAgICIxfDQ0fHwiLCAncmVwbGljYXRpb24gd2l0aCB0aGUgb3JpZ2luYWwgcHJpbWFyeSBr ZXknKTsKKworIyBub3cgcmVkZWZpbmUgdGhlIGNvbnN0cmFpbnQgLSBtb3ZlIHRoZSBwcmlt YXJ5IGtleSB0byBhIGRpZmZlcmVudCBjb2x1bW4KKyMgKHdoaWNoIGlzIHN0aWxsIGNvdmVy ZWQgYnkgdGhlIGNvbHVtbiBsaXN0LCB0aG91Z2gpCisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFRBQkxFIHRhYjYgRFJPUCBDT05TVFJB SU5UIHRhYjZfcGtleTsKKwlBTFRFUiBUQUJMRSB0YWI2IEFERCBQUklNQVJZIEtFWSAoYik7 CispKTsKKworIyB3ZSBuZWVkIHRvIGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3Jp YmVyCisjIFhYWCBXaGF0IHdvdWxkIGhhcHBlbiBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIHRo ZSBwdWJsaXNoZXIgQUxURVI/IE9yCisjIGludGVybGVhdmVkLCBzb21laG93PyBCdXQgdGhh dCBzZWVtcyB1bnJlbGF0ZWQgdG8gY29sdW1uIGxpc3RzLgorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFRBQkxFIHRhYjYgRFJPUCBDT05T VFJBSU5UIHRhYjZfcGtleTsKKwlBTFRFUiBUQUJMRSB0YWI2IEFERCBQUklNQVJZIEtFWSAo Yik7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFJFRlJFU0ggUFVCTElDQVRJT04KKykpOwor Cit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8g dGFiNiBWQUxVRVMgKDIsIDU1LCA2NjYsIDg4ODgpOworCVVQREFURSB0YWI2IFNFVCBiID0g YiAqIDIsIGMgPSBjICogMywgZCA9IGQgKiA0IFdIRVJFIGEgPSAyOworKSk7CisKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI2IE9SREVS IEJZIGEiKSwKKyAgIHFxKDF8NDR8fAorMnwxMTB8fCksCisgICAncmVwbGljYXRpb24gd2l0 aCB0aGUgbW9kaWZpZWQgcHJpbWFyeSBrZXknKTsKKworCisjIFRFU1Q6IGNyZWF0ZSBhIHRh YmxlIHdpdGggYSBjb2x1bW4gZmlsdGVyLCB0aGVuIGNoYW5nZSB0aGUgcmVwbGljYQorIyBp ZGVudGl0eSBieSByZXBsYWNpbmcgYSBwcmltYXJ5IGtleSB3aXRoIGEga2V5IG9uIG11bHRp cGxlIGNvbHVtbnMKKyMgKGFsbCBvZiB0aGVtIGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBmaWx0 ZXIpCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVB VEUgVEFCTEUgdGFiNyAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCwgZCBpbnQp OworCUNSRUFURSBQVUJMSUNBVElPTiBwdWI1IEZPUiBUQUJMRSB0YWI3IChhLCBiKTsKKykp OworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JF QVRFIFRBQkxFIHRhYjcgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQsIGQgaW50 KTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjUKKykpOwor Cit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8g dGFiNyBWQUxVRVMgKDEsIDIyLCAzMzMsIDQ0NDQpOworCVVQREFURSB0YWI3IFNFVCBiID0g YiAqIDIsIGMgPSBjICogMywgZCA9IGQgKiA0IFdIRVJFIGEgPSAxOworKSk7CisKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI3IE9SREVS IEJZIGEiKSwKKyAgICIxfDQ0fHwiLCAncmVwbGljYXRpb24gd2l0aCB0aGUgb3JpZ2luYWwg cHJpbWFyeSBrZXknKTsKKworIyBub3cgcmVkZWZpbmUgdGhlIGNvbnN0cmFpbnQgLSBtb3Zl IHRoZSBwcmltYXJ5IGtleSB0byBhIGRpZmZlcmVudCBjb2x1bW4KKyMgKHdoaWNoIGlzIG5v dCBjb3ZlcmVkIGJ5IHRoZSBjb2x1bW4gbGlzdCkKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFRBQkxFIHRhYjcgRFJPUCBDT05TVFJBSU5U IHRhYjdfcGtleTsKKwlBTFRFUiBUQUJMRSB0YWI3IEFERCBQUklNQVJZIEtFWSAoYSwgYik7 CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ SU5TRVJUIElOVE8gdGFiNyBWQUxVRVMgKDIsIDU1LCA2NjYsIDg4ODgpOworCVVQREFURSB0 YWI3IFNFVCBiID0gYiAqIDIsIGMgPSBjICogMywgZCA9IGQgKiA0IFdIRVJFIGEgPSAyOwor KSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitp cygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJP TSB0YWI3IE9SREVSIEJZIGEiKSwKKyAgIHFxKDF8NDR8fAorMnwxMTB8fCksCisgICAncmVw bGljYXRpb24gd2l0aCB0aGUgbW9kaWZpZWQgcHJpbWFyeSBrZXknKTsKKworIyBub3cgc3dp dGNoIHRoZSBwcmltYXJ5IGtleSBhZ2FpbiB0byBhbm90aGVyIGNvbHVtbnMgbm90IGNvdmVy ZWQgYnkgdGhlCisjIGNvbHVtbiBmaWx0ZXIsIGJ1dCBhbHNvIGdlbmVyYXRlIHdyaXRlcyBi ZXR3ZWVuIHRoZSBkcm9wIGFuZCBjcmVhdGlvbgorIyBvZiB0aGUgbmV3IGNvbnN0cmFpbnQK KworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIg VEFCTEUgdGFiNyBEUk9QIENPTlNUUkFJTlQgdGFiN19wa2V5OworCUlOU0VSVCBJTlRPIHRh YjcgVkFMVUVTICgzLCAzMywgOTk5LCA3Nzc3KTsKKwktLSB1cGRhdGUvZGVsZXRlIGlzIG5v dCBhbGxvd2VkIGZvciB0YWJsZXMgd2l0aG91dCBSSQorCUFMVEVSIFRBQkxFIHRhYjcgQURE IFBSSU1BUlkgS0VZIChiLCBhKTsKKwlVUERBVEUgdGFiNyBTRVQgYiA9IGIgKiAyLCBjID0g YyAqIDMsIGQgPSBkICogNCBXSEVSRSBhID0gMzsKKwlERUxFVEUgRlJPTSB0YWI3IFdIRVJF IGEgPSAxOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScp OworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNU ICogRlJPTSB0YWI3IE9SREVSIEJZIGEiKSwKKyAgIHFxKDJ8MTEwfHwKKzN8NjZ8fCksCisg ICAncmVwbGljYXRpb24gd2l0aCB0aGUgbW9kaWZpZWQgcHJpbWFyeSBrZXknKTsKKworCisj IFRFU1Q6IHBhcnRpdGlvbmVkIHRhYmxlcyAod2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCA9IGZhbHNlKQorIyBhbmQgcmVwbGljYSBpZGVudGl0eS4gVGhlIChsZWFmKSBwYXJ0 aXRpb25zIG1heSBoYXZlIGRpZmZlcmVudCBSSSwgc28KKyMgd2UgbmVlZCB0byBjaGVjayB0 aGUgcGFydGl0aW9uIFJJICh3aXRoIHJlc3BlY3QgdG8gdGhlIGNvbHVtbiBmaWx0ZXIpCisj IHdoaWxlIGF0dGFjaGluZyB0aGUgcGFydGl0aW9uLgorCisjIEZpcnN0LCBsZXQncyBjcmVh dGUgYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIHR3byBwYXJ0aXRpb25zLCBlYWNoIHdpdGgK KyMgYSBkaWZmZXJlbnQgUkksIGJ1dCBhIGNvbHVtbiBmaWx0ZXIgbm90IGNvdmVyaW5nIGFs bCB0aG9zZSBSSS4KKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9hIChhIGludCwgYiBpbnQsIGMgaW50KSBQ QVJUSVRJT04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMSBQ QVJUSVRJT04gT0YgdGVzdF9wYXJ0X2EgRk9SIFZBTFVFUyBJTiAoMSk7CisJQUxURVIgVEFC TEUgdGVzdF9wYXJ0X2FfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRl c3RfcGFydF9hXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYV8x X3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMiBQQVJUSVRJT04gT0YgdGVz dF9wYXJ0X2EgRk9SIFZBTFVFUyBJTiAoMik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2Ff MiBBREQgUFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzIgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYV8yX3BrZXk7CispKTsKKwor IyBkbyB0aGUgc2FtZSB0aGluZyBvbiB0aGUgc3Vic2NyaWJlciAod2l0aCB0aGUgb3Bwb3Np dGUgY29sdW1uIG9yZGVyKQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYSAoYiBpbnQsIGEgaW50KSBQQVJU SVRJT04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMSBQQVJU SVRJT04gT0YgdGVzdF9wYXJ0X2EgRk9SIFZBTFVFUyBJTiAoMSk7CisJQUxURVIgVEFCTEUg dGVzdF9wYXJ0X2FfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3Rf cGFydF9hXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYV8xX3Br ZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMiBQQVJUSVRJT04gT0YgdGVzdF9w YXJ0X2EgRk9SIFZBTFVFUyBJTiAoMik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMiBB REQgUFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzIgUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYV8yX3BrZXk7CispKTsKKworIyBj cmVhdGUgYSBwdWJsaWNhdGlvbiByZXBsaWNhdGluZyBqdXN0IHRoZSBjb2x1bW4gImEiLCB3 aGljaCBpcyBub3QgZW5vdWdoCisjIGZvciB0aGUgc2Vjb25kIHBhcnRpdGlvbgorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1YjYgRk9SIFRBQkxFIHRlc3RfcGFydF9hIChiLCBhKSBXSVRIIChwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjYgQURE IFRBQkxFIHRlc3RfcGFydF9hXzEgKGEpOworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjYgQURE IFRBQkxFIHRlc3RfcGFydF9hXzIgKGIpOworKSk7CisKKyMgYWRkIHRoZSBwdWJsaWNhdGlv biB0byBvdXIgc3Vic2NyaXB0aW9uLCB3YWl0IGZvciBzeW5jIHRvIGNvbXBsZXRlCiskbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NS SVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjYKKykpOworCit3YWl0X2Zvcl9zdWJz Y3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2EgVkFM VUVTICgxLCAzKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYSBWQUxVRVMgKDIsIDQpOwor KSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitp cygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUIGEsIGIg RlJPTSB0ZXN0X3BhcnRfYSBPUkRFUiBCWSBhLCBiIiksCisgICBxcSgxfDMKKzJ8NCksCisg ICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCByZXBsaWNhIGlkZW50aXRpZXMgbm90IHJl cGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKyMgVGhpcyB0aW1lIHN0YXJ0IHdpdGggYSBjb2x1 bW4gZmlsdGVyIGNvdmVyaW5nIFJJIGZvciBhbGwgcGFydGl0aW9ucywgYnV0CisjIHRoZW4g dXBkYXRlIHRoZSBjb2x1bW4gZmlsdGVyIHRvIG5vdCBjb3ZlciBjb2x1bW4gImIiIChuZWVk ZWQgYnkgdGhlCisjIHNlY29uZCBwYXJ0aXRpb24pCisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYiAoYSBp bnQsIGIgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVz dF9wYXJ0X2JfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoMSwz KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJ QUxURVIgVEFCTEUgdGVzdF9wYXJ0X2JfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY IHRlc3RfcGFydF9iXzFfcGtleTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYl8yIFBB UlRJVElPTiBPRiB0ZXN0X3BhcnRfYiBGT1IgVkFMVUVTIElOICgyLDQpOworCUFMVEVSIFRB QkxFIHRlc3RfcGFydF9iXzIgQUREIFBSSU1BUlkgS0VZIChiKTsKKwlBTFRFUiBUQUJMRSB0 ZXN0X3BhcnRfYl8yIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2Jf Ml9wa2V5OworKSk7CisKKyMgZG8gdGhlIHNhbWUgdGhpbmcgb24gdGhlIHN1YnNjcmliZXIK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUg VEFCTEUgdGVzdF9wYXJ0X2IgKGEgaW50LCBiIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEp OworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9iXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFy dF9iIEZPUiBWQUxVRVMgSU4gKDEsMyk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2JfMSBB REQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9iXzEgUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYl8xX3BrZXk7CisKKwlDUkVBVEUg VEFCTEUgdGVzdF9wYXJ0X2JfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVF UyBJTiAoMiw0KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8yIEFERCBQUklNQVJZIEtF WSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2JfMiBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHRlc3RfcGFydF9iXzJfcGtleTsKKykpOworCisjIGNyZWF0ZSBhIHB1Ymxp Y2F0aW9uIHJlcGxpY2F0aW5nIGJvdGggY29sdW1ucywgd2hpY2ggaXMgc3VmZmljaWVudCBm b3IKKyMgYm90aCBwYXJ0aXRpb25zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViNyBGT1IgVEFCTEUgdGVzdF9w YXJ0X2IgKGEsIGIpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7 CispKTsKKworIyBhZGQgdGhlIHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdh aXQgZm9yIHN5bmMgdG8gY29tcGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJ T04gcHViNworKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNj cmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYiBWQUxVRVMgKDEsIDEpOworCUlOU0VSVCBJTlRP IHRlc3RfcGFydF9iIFZBTFVFUyAoMiwgMik7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydF9iIE9SREVSIEJZIGEs IGIiKSwKKyAgIHFxKDF8MQorMnwyKSwKKyAgICdwYXJ0aXRpb25zIHdpdGggZGlmZmVyZW50 IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKworCisj IFRFU1Q6IFRoaXMgdGltZSBzdGFydCB3aXRoIGEgY29sdW1uIGZpbHRlciBjb3ZlcmluZyBS SSBmb3IgYWxsIHBhcnRpdGlvbnMsCisjIGJ1dCB0aGVuIHVwZGF0ZSBSSSBmb3Igb25lIG9m IHRoZSBwYXJ0aXRpb25zIHRvIG5vdCBiZSBjb3ZlcmVkIGJ5IHRoZQorIyBjb2x1bW4gZmls dGVyIGFueW1vcmUuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYyAoYSBpbnQsIGIgaW50LCBjIGludCkg UEFSVElUSU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jXzEg UEFSVElUSU9OIE9GIHRlc3RfcGFydF9jIEZPUiBWQUxVRVMgSU4gKDEsMyk7CisJQUxURVIg VEFCTEUgdGVzdF9wYXJ0X2NfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxF IHRlc3RfcGFydF9jXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRf Y18xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2NfMiBQQVJUSVRJT04gT0Yg dGVzdF9wYXJ0X2MgRk9SIFZBTFVFUyBJTiAoMiw0KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3Bh cnRfY18yIEFERCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2Nf MiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9jXzJfcGtleTsKKykp OworCisjIGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3Rf cGFydF9jIChhIGludCwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisK KwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2NfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2Mg Rk9SIFZBTFVFUyBJTiAoMSwzKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18xIEFERCBQ UklNQVJZIEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMSBSRVBMSUNBIElE RU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9jXzFfcGtleTsKKworCUNSRUFURSBUQUJM RSB0ZXN0X3BhcnRfY18yIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYyBGT1IgVkFMVUVTIElO ICgyLDQpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9jXzIgQUREIFBSSU1BUlkgS0VZIChi KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18yIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcg SU5ERVggdGVzdF9wYXJ0X2NfMl9wa2V5OworKSk7CisKKyMgY3JlYXRlIGEgcHVibGljYXRp b24gcmVwbGljYXRpbmcgZGF0YSB0aHJvdWdoIHBhcnRpdGlvbiByb290LCB3aXRoIGEgY29s dW1uCisjIGZpbHRlciBvbiB0aGUgcm9vdCwgYW5kIHRoZW4gYWRkIHRoZSBwYXJ0aXRpb25z IG9uZSBieSBvbmUgd2l0aCBzZXBhcmF0ZQorIyBjb2x1bW4gZmlsdGVycyAoYnV0IHRob3Nl IGFyZSBub3QgYXBwbGllZCkKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWI4IEZPUiBUQUJMRSB0ZXN0X3BhcnRf YyBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKKwlBTFRFUiBQ VUJMSUNBVElPTiBwdWI4IEFERCBUQUJMRSB0ZXN0X3BhcnRfY18xIChhLGMpOworCUFMVEVS IFBVQkxJQ0FUSU9OIHB1YjggQUREIFRBQkxFIHRlc3RfcGFydF9jXzIgKGEsYik7CispKTsK KworIyBhZGQgdGhlIHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdhaXQgZm9y IHN5bmMgdG8gY29tcGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlEUk9QIFNVQlNDUklQVElPTiBzdWIxOworCUNSRUFURSBTVUJTQ1JJUFRJ T04gc3ViMSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1 Yjg7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7 CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VS VCBJTlRPIHRlc3RfcGFydF9jIFZBTFVFUyAoMSwgMywgNSk7CisJSU5TRVJUIElOVE8gdGVz dF9wYXJ0X2MgVkFMVUVTICgyLCA0LCA2KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9wYXJ0X2MgT1JERVIgQlkgYSwg YiIpLAorICAgcXEoMXx8NQorMnw0fCksCisgICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVu dCByZXBsaWNhIGlkZW50aXRpZXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKwor IyBjcmVhdGUgYSBwdWJsaWNhdGlvbiBub3QgcmVwbGljYXRpbmcgZGF0YSB0aHJvdWdoIHBh cnRpdGlvbiByb290LCB3aXRob3V0CisjIGEgY29sdW1uIGZpbHRlciBvbiB0aGUgcm9vdCwg YW5kIHRoZW4gYWRkIHRoZSBwYXJ0aXRpb25zIG9uZSBieSBvbmUgd2l0aAorIyBzZXBhcmF0 ZSBjb2x1bW4gZmlsdGVycworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXEoCisJRFJPUCBQVUJMSUNBVElPTiBwdWI4OworCUNSRUFURSBQVUJMSUNBVElPTiBw dWI4IEZPUiBUQUJMRSB0ZXN0X3BhcnRfYyBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCA9IGZhbHNlKTsKKwlBTFRFUiBQVUJMSUNBVElPTiBwdWI4IEFERCBUQUJMRSB0ZXN0 X3BhcnRfY18xIChhKTsKKwlBTFRFUiBQVUJMSUNBVElPTiBwdWI4IEFERCBUQUJMRSB0ZXN0 X3BhcnRfY18yIChhLGIpOworKSk7CisKKyMgYWRkIHRoZSBwdWJsaWNhdGlvbiB0byBvdXIg c3Vic2NyaXB0aW9uLCB3YWl0IGZvciBzeW5jIHRvIGNvbXBsZXRlCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1 YjEgUkVGUkVTSCBQVUJMSUNBVElPTjsKKwlUUlVOQ0FURSB0ZXN0X3BhcnRfYzsKKykpOwor Cit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJVFJVTkNBVEUgdGVz dF9wYXJ0X2M7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2MgVkFMVUVTICgxLCAzLCA1KTsK KwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxVRVMgKDIsIDQsIDYpOworKSk7CisKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3Bh cnRfYyBPUkRFUiBCWSBhLCBiIiksCisgICBxcSgxfHwKKzJ8NHwpLAorICAgJ3BhcnRpdGlv bnMgd2l0aCBkaWZmZXJlbnQgcmVwbGljYSBpZGVudGl0aWVzIG5vdCByZXBsaWNhdGVkIGNv cnJlY3RseScpOworCisKKyMgVEVTVDogU3RhcnQgd2l0aCBhIHNpbmdsZSBwYXJ0aXRpb24s IHdpdGggUkkgY29tcGF0aWJsZSB3aXRoIHRoZSBjb2x1bW4KKyMgZmlsdGVyLCBhbmQgdGhl biBhdHRhY2ggYSBwYXJ0aXRpb24gd2l0aCBpbmNvbXBhdGlibGUgUkkuCisKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0 X3BhcnRfZCAoYSBpbnQsIGIgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisKKwlDUkVB VEUgVEFCTEUgdGVzdF9wYXJ0X2RfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2QgRk9SIFZB TFVFUyBJTiAoMSwzKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8xIEFERCBQUklNQVJZ IEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2RfMSBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHRlc3RfcGFydF9kXzFfcGtleTsKKykpOworCisjIGRvIHRoZSBzYW1l IHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyIChpbiBmYWN0LCBjcmVhdGUgYm90aCBwYXJ0aXRp b25zIHJpZ2h0CisjIGF3YXksIG5vIG5lZWQgdG8gZGVsYXkgdGhhdCkKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9w YXJ0X2QgKGEgaW50LCBiIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRF IFRBQkxFIHRlc3RfcGFydF9kXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9kIEZPUiBWQUxV RVMgSU4gKDEsMyk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2RfMSBBREQgUFJJTUFSWSBL RVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9kXzEgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCB0ZXN0X3BhcnRfZF8xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9w YXJ0X2RfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2QgRk9SIFZBTFVFUyBJTiAoMiw0KTsK KwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8yIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxU RVIgVEFCTEUgdGVzdF9wYXJ0X2RfMiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRl c3RfcGFydF9kXzJfcGtleTsKKykpOworCisjIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIHJlcGxp Y2F0aW5nIGJvdGggY29sdW1ucywgd2hpY2ggaXMgc3VmZmljaWVudCBmb3IKKyMgYm90aCBw YXJ0aXRpb25zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlDUkVBVEUgUFVCTElDQVRJT04gcHViOSBGT1IgVEFCTEUgdGVzdF9wYXJ0X2QgKGEpIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CispKTsKKworIyBhZGQg dGhlIHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdhaXQgZm9yIHN5bmMgdG8g Y29tcGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViOQorKSk7CisK K3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0 ZXN0X3BhcnRfZCBWQUxVRVMgKDEsIDEpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnRfZCBPUkRFUiBCWSBhLCBi IiksCisgICBxcSgxfCksCisgICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCByZXBsaWNh IGlkZW50aXRpZXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKyMgVEVTVDogV2l0 aCBhIHRhYmxlIGluY2x1ZGVkIGluIG11bHRpcGxlIHB1YmxpY2F0aW9ucywgd2Ugc2hvdWxk IHVzZSBhCisjIHVuaW9uIG9mIHRoZSBjb2x1bW4gZmlsdGVycy4gU28gd2l0aCBjb2x1bW4g ZmlsdGVycyAoYSxiKSBhbmQgKGEsYykgd2UKKyMgc2hvdWxkIHJlcGxpY2F0ZSAoYSxiLGMp LgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVB VEUgVEFCTEUgdGVzdF9taXhfMSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCk7 CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfMSBGT1IgVEFCTEUgdGVzdF9taXhfMSAo YSwgYik7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfMiBGT1IgVEFCTEUgdGVzdF9t aXhfMSAoYSwgYyk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X21peF8xIChhIGludCBQUklNQVJZIEtF WSwgYiBpbnQsIGMgaW50KTsKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElD QVRJT04gcHViX21peF8xLCBwdWJfbWl4XzI7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0 aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzEgVkFMVUVTICgx LCAyLCAzKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1 YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNF TEVDVCAqIEZST00gdGVzdF9taXhfMSIpLAorICAgcXEoMXwyfDMpLAorICAgJ2EgbWl4IG9m IHB1YmxpY2F0aW9ucyBzaG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1uIGZpbHRlcicpOwor CisKKyMgVEVTVDogV2l0aCBhIHRhYmxlIGluY2x1ZGVkIGluIG11bHRpcGxlIHB1YmxpY2F0 aW9ucywgd2Ugc2hvdWxkIHVzZSBhCisjIHVuaW9uIG9mIHRoZSBjb2x1bW4gZmlsdGVycy4g SWYgYW55IG9mIHRoZSBwdWJsaWNhdGlvbnMgaXMgRk9SIEFMTAorIyBUQUJMRVMsIHdlIHNo b3VsZCByZXBsaWNhdGUgYWxsIGNvbHVtbnMuCisKKyMgZHJvcCB1bm5lY2Vzc2FyeSB0YWJs ZXMsIHNvIGFzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCB0aGUgRk9SIEFMTCBUQUJMRVMKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCURST1AgVEFCTEUg dGFiMSwgdGFiMiwgdGFiMywgdGFiNCwgdGFiNSwgdGFiNiwgdGFiNywgdGVzdF9taXhfMSwK KwkJCSAgIHRlc3RfcGFydCwgdGVzdF9wYXJ0X2EsIHRlc3RfcGFydF9iLCB0ZXN0X3BhcnRf YywgdGVzdF9wYXJ0X2Q7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzIgKGEgaW50IFBSSU1BUlkg S0VZLCBiIGludCwgYyBpbnQpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4XzMgRk9S IFRBQkxFIHRlc3RfbWl4XzIgKGEsIGIpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4 XzQgRk9SIEFMTCBUQUJMRVM7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X21peF8yIChhIGludCBQUklN QVJZIEtFWSwgYiBpbnQsIGMgaW50KTsKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQg UFVCTElDQVRJT04gcHViX21peF8zLCBwdWJfbWl4XzQ7CisJQUxURVIgU1VCU0NSSVBUSU9O IHN1YjEgUkVGUkVTSCBQVUJMSUNBVElPTjsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRp b25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9taXhfMiBWQUxVRVMgKDEs IDIsIDMpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3Vi MScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VM RUNUICogRlJPTSB0ZXN0X21peF8yIiksCisgICBxcSgxfDJ8MyksCisgICAnYSBtaXggb2Yg cHVibGljYXRpb25zIHNob3VsZCB1c2UgYSB1bmlvbiBvZiBjb2x1bW4gZmlsdGVyJyk7CisK KworIyBURVNUOiBXaXRoIGEgdGFibGUgaW5jbHVkZWQgaW4gbXVsdGlwbGUgcHVibGljYXRp b25zLCB3ZSBzaG91bGQgdXNlIGEKKyMgdW5pb24gb2YgdGhlIGNvbHVtbiBmaWx0ZXJzLiBJ ZiBhbnkgb2YgdGhlIHB1YmxpY2F0aW9ucyBpcyBGT1IgQUxMCisjIFRBQkxFUyBJTiBTQ0hF TUEsIHdlIHNob3VsZCByZXBsaWNhdGUgYWxsIGNvbHVtbnMuCisKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X21peF8z IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50KTsKKwlDUkVBVEUgUFVCTElDQVRJ T04gcHViX21peF81IEZPUiBUQUJMRSB0ZXN0X21peF8zIChhLCBiKTsKKwlDUkVBVEUgUFVC TElDQVRJT04gcHViX21peF82IEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJsaWM7Cisp KTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNS RUFURSBUQUJMRSB0ZXN0X21peF8zIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50 KTsKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViX21peF81 LCBwdWJfbWl4XzY7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVf c3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzMgVkFMVUVTICgxLCAyLCAzKTsKKykpOwor Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVz dF9taXhfMyIpLAorICAgcXEoMXwyfDMpLAorICAgJ2EgbWl4IG9mIHB1YmxpY2F0aW9ucyBz aG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1uIGZpbHRlcicpOworCisKKyMgVEVTVDogQ2hl Y2sgaGFuZGxpbmcgb2YgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgLSBpZiBhIHBhcnRp dGlvbiBpcworIyBwdWJsaXNoZWQgdGhyb3VnaCBwYXJ0aXRpb24gcm9vdCwgd2Ugc2hvdWxk IG9ubHkgYXBwbHkgdGhlIGNvbHVtbiBmaWx0ZXIKKyMgZGVmaW5lZCBmb3IgdGhlIHdob2xl IHRhYmxlIChub3QgdGhlIHBhcnRpdGlvbnMpIC0gYm90aCBkdXJpbmcgdGhlIGluaXRpYWwK KyMgc3luYyBhbmQgd2hlbiByZXBsaWNhdGluZyBjaGFuZ2VzLiBUaGlzIGlzIHdoYXQgd2Ug ZG8gZm9yIHJvdyBmaWx0ZXJzLgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9yb290IChhIGludCBQUklNQVJZIEtF WSwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEpOworCUNSRUFURSBUQUJM RSB0ZXN0X3Jvb3RfMSBQQVJUSVRJT04gT0YgdGVzdF9yb290IEZPUiBWQUxVRVMgRlJPTSAo MSkgVE8gKDEwKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9yb290XzIgUEFSVElUSU9OIE9GIHRl c3Rfcm9vdCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOworCisJQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1Yl9yb290X3RydWUgRk9SIFRBQkxFIHRlc3Rfcm9vdCAoYSkgV0lUSCAocHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKKykpOworCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3Rfcm9v dCAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCkgUEFSVElUSU9OIEJZIFJBTkdF IChhKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9yb290XzEgUEFSVElUSU9OIE9GIHRlc3Rfcm9v dCBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCk7CisJQ1JFQVRFIFRBQkxFIHRlc3Rfcm9v dF8yIFBBUlRJVElPTiBPRiB0ZXN0X3Jvb3QgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIw KTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1Yl9yb290X3Ry dWU7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJl cik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlO U0VSVCBJTlRPIHRlc3Rfcm9vdCBWQUxVRVMgKDEsIDIsIDMpOworCUlOU0VSVCBJTlRPIHRl c3Rfcm9vdCBWQUxVRVMgKDEwLCAyMCwgMzApOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3Jvb3QgT1JERVIgQlkgYSwg YiwgYyIpLAorICAgcXEoMXx8CisxMHx8KSwKKyAgICdwdWJsaWNhdGlvbiB2aWEgcGFydGl0 aW9uIHJvb3QgYXBwbGllcyBjb2x1bW4gZmlsdGVyJyk7CisKKyRub2RlX3N1YnNjcmliZXIt PnN0b3AoJ2Zhc3QnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcpOworCitkb25l X3Rlc3RpbmcoKTsKLS0gCjIuMzQuMQoK --------------cw9CLCexZFz310YMWl40JM5p--