Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rh3fj-009Mic-LN for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Mar 2024 08:27:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rh3fi-005w4A-9I for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Mar 2024 08:27:42 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rh3fh-005w3z-6e for pgsql-hackers@lists.postgresql.org; Mon, 04 Mar 2024 08:27:42 +0000 Received: from mail-yb1-xb30.google.com ([2607:f8b0:4864:20::b30]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rh3fc-002lhQ-I7 for pgsql-hackers@postgresql.org; Mon, 04 Mar 2024 08:27:40 +0000 Received: by mail-yb1-xb30.google.com with SMTP id 3f1490d57ef6-dcc84ae94c1so3901640276.1 for ; Mon, 04 Mar 2024 00:27:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709540857; x=1710145657; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ZUdqicUrdQrH18JK9sj8Jbzo8DJGZl4l6Nx3862y6CM=; b=N6mQAE6cFBiMSGHRPFkMiLiD30mpOkDnw6gImPiO60QMlfKmFHeT+Tyz2Z53hts9xz 5X9oAHl2b2Hf60RxJiBUjgEDTNInUJT1+8cYMleRGTtJghhU8aDgqJM1qaJp+UBIXaDl 12vhM0DOa/W4bqtS6VmUObM9FaN0cH0QYx9TuXIJBRFu/hWacEZ2CwF6dml1CjpgQ5cL clxZci1rL9kQOSmCWC6F4sTLqHFsufP0ps1wAI8RhOLXtkZdT1eeW3GJZIjGbxUyJ3ht vLLY/pp3KlJPzN9LiOK7cSHSjTBcSK5aieVTDgZIIKvrJzNIp93lsDZxoDBi+OXlDSe8 LMag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709540857; x=1710145657; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ZUdqicUrdQrH18JK9sj8Jbzo8DJGZl4l6Nx3862y6CM=; b=uue64MvFT1AwGVPq2Pwz7u8H6W4lT6oigF+Bkt2KdUYpeaZQVe98inuD7v/3jmNxLO 9W9IZlvkPefDlnR2yCBx+ZxjgZtvL9iqMSBiWK6Mv2KNYlkfMzej+kcTkBGffDtg1xta 6JWWrdMsoOAgJzHI8CS7Zn+eDeDtIdWzDUx3q66Piwu55Km2M3FCFx6z9wQmLI8kf1JK S954h4n+S5QX3y51jQa4FXu9Bi0652M+6hserotQd+9OUq8dgJH2V+8GhuNTeUxow8LJ HUNrJAB90XK5/5JOvDm3NGBgrirrh5c4yJz+LfLU4lm7Eg9Rm4S7l4QQV3xsfDvTy1KF LPyA== X-Gm-Message-State: AOJu0Yyqom2UleeQfbj4pD0sVgodB1ah83srnqVzT5X33Ia5DixhJJob bQ9pu1vwcZTU9wBzwPkAtezpJHuQDlj/UIUGsavm+FUOpu2vu9zlsNdq+hPpF96mxEu9eValGXb hwhGkQFeoXvzDGFcfiesRY8u5aeTom2s2T88= X-Google-Smtp-Source: AGHT+IHp+N+4PcLxvxOhWLrdA5pXUyoJKxSGtgsl027lf4PVGyLKR1DAbqx4AaaA3CCmIHI7/NJK1wBM1dUqPbnKUtw= X-Received: by 2002:a5b:48d:0:b0:dc6:ebca:c2e8 with SMTP id n13-20020a5b048d000000b00dc6ebcac2e8mr5690269ybp.5.1709540856755; Mon, 04 Mar 2024 00:27:36 -0800 (PST) MIME-Version: 1.0 From: Richard Guo Date: Mon, 4 Mar 2024 16:27:24 +0800 Message-ID: Subject: Eager aggregation, take 3 To: PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000007fb9c90612d17f7a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007fb9c90612d17f7a Content-Type: multipart/alternative; boundary="0000000000007fb9c70612d17f78" --0000000000007fb9c70612d17f78 Content-Type: text/plain; charset="UTF-8" Hi All, Eager aggregation is a query optimization technique that partially pushes a group-by past a join, and finalizes it once all the relations are joined. Eager aggregation reduces the number of input rows to the join and thus may result in a better overall plan. This technique is thoroughly described in the 'Eager Aggregation and Lazy Aggregation' paper [1]. Back in 2017, a patch set has been proposed by Antonin Houska to implement eager aggregation in thread [2]. However, it was at last withdrawn after entering the pattern of "please rebase thx" followed by rebasing and getting no feedback until "please rebase again thx". A second attempt in 2022 unfortunately fell into the same pattern about one year ago and was eventually closed again [3]. That patch set has included most of the necessary concepts to implement eager aggregation. However, as far as I can see, it has several weak points that we need to address. It introduces invasive changes to some core planner functions, such as make_join_rel(). And with such changes join_is_legal() would be performed three times for the same proposed join, which is not great. Another weak point is that the complexity of join searching dramatically increases with the growing number of relations to be joined. This occurs because when we generate partially aggregated paths, each path of the input relation is considered as an input path for the grouped paths. As a result, the number of grouped paths we generate increases exponentially, leading to a significant explosion in computational complexity. Other weak points include the lack of support for outer joins and partitionwise joins. And during my review of the code, I came across several bugs (planning error or crash) that need to be addressed. I'd like to give it another take to implement eager aggregation, while borrowing lots of concepts and many chunks of codes from the previous patch set. Please see attached. I have chosen to use the term 'Eager Aggregation' from the paper [1] instead of 'Aggregation push-down', to differentiate the aggregation push-down technique in FDW. The patch has been split into small pieces to make the review easier. 0001 introduces the RelInfoList structure, which encapsulates both a list and a hash table, so that we can leverage the hash table for faster lookups not only for join relations but also for upper relations. With eager aggregation, it is possible that we generate so many upper rels of type UPPERREL_PARTIAL_GROUP_AGG that a hash table can help a lot with lookups. 0002 introduces the RelAggInfo structure to store information needed to create grouped paths for base and join rels. It also revises the RelInfoList related structures and functions so that they can be used with RelAggInfos. 0003 checks if eager aggregation is applicable, and if so, collects suitable aggregate expressions and grouping expressions in the query, and records them in root->agg_clause_list and root->group_expr_list respectively. 0004 implements the functions that check if eager aggregation is applicable for a given relation, and if so, create RelAggInfo structure for the relation, using the infos about aggregate expressions and grouping expressions we collected earlier. In this patch, when we check if a target expression can act as grouping expression, we need to check if this expression can be known equal to other expressions due to ECs that can act as grouping expressions. This patch leverages function exprs_known_equal() to achieve that, after enhancing this function to consider opfamily if provided. 0005 implements the functions that generate paths for grouped relations by adding sorted and hashed partial aggregation paths on top of paths of the plain base or join relations. For sorted partial aggregation paths, we only consider any suitably-sorted input paths as well as sorting the cheapest-total path. For hashed partial aggregation paths, we only consider the cheapest-total path as input. By not considering other paths we can reduce the number of grouping paths as much as possible while still achieving reasonable results. 0006 builds grouped relations for each base relation if possible, and generates aggregation paths for the grouped base relations. 0007 builds grouped relations for each just-processed join relation if possible, and generates aggregation paths for the grouped join relations. The changes made to make_join_rel() are relatively minor, with the addition of a new function make_grouped_join_rel(), which finds or creates a grouped relation for the just-processed joinrel, and generates grouped paths by joining a grouped input relation with a non-grouped input relation. The other way to generate grouped paths is by adding sorted and hashed partial aggregation paths on top of paths of the joinrel. This occurs in standard_join_search(), after we've run set_cheapest() for the joinrel. The reason for performing this step after set_cheapest() is that we need to know the joinrel's cheapest paths (see 0005). This patch also makes the grouped relation for the topmost join rel act as the upper rel representing the result of partial aggregation, so that we can add the final aggregation on top of that. Additionally, this patch extends the functionality of eager aggregation to work with partitionwise join and geqo. This patch also makes eager aggregation work with outer joins. With outer join, the aggregate cannot be pushed down if any column referenced by grouping expressions or aggregate functions is nullable by an outer join above the relation to which we want to apply the partiall aggregation. Thanks to Tom's outer-join-aware-Var infrastructure, we can easily identify such situations and subsequently refrain from pushing down the aggregates. Starting from this patch, you should be able to see plans with eager aggregation. 0008 adds test cases for eager aggregation. 0009 adds a section in README that describes this feature (copied from previous patch set, with minor tweaks). Thoughts and comments are welcome. [1] https://www.vldb.org/conf/1995/P345.PDF [2] https://www.postgresql.org/message-id/flat/9666.1491295317%40localhost [3] https://www.postgresql.org/message-id/flat/OS3PR01MB66609589B896FBDE190209F495EE9%40OS3PR01MB6660.jpnprd01.prod.outlook.com Thanks Richard --0000000000007fb9c70612d17f78 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi All,

Eager aggregation is a query optimization t= echnique that partially
pushes a group-by past a join, and finalizes it = once all the relations
are joined.=C2=A0 Eager aggregation reduces the n= umber of input rows to the
join and thus may result in a better overall = plan.=C2=A0 This technique is
thoroughly described in the 'Eager Agg= regation and Lazy Aggregation'
paper [1].

Back in 2017, a pat= ch set has been proposed by Antonin Houska to
implement eager aggregatio= n in thread [2].=C2=A0 However, it was at last
withdrawn after entering = the pattern of "please rebase thx" followed by
rebasing and ge= tting no feedback until "please rebase again thx". =C2=A0A
sec= ond attempt in 2022 unfortunately fell into the same pattern about
one y= ear ago and was eventually closed again [3].

That patch set has incl= uded most of the necessary concepts to implement
eager aggregation.=C2= =A0 However, as far as I can see, it has several weak
points that we nee= d to address.=C2=A0 It introduces invasive changes to some
core planner = functions, such as make_join_rel().=C2=A0 And with such changes
join_is_= legal() would be performed three times for the same proposed
join, which= is not great.=C2=A0 Another weak point is that the complexity of
join s= earching dramatically increases with the growing number of
relations to = be joined.=C2=A0 This occurs because when we generate partially
aggregat= ed paths, each path of the input relation is considered as an
input path= for the grouped paths.=C2=A0 As a result, the number of grouped
paths w= e generate increases exponentially, leading to a significant
explosion i= n computational complexity.=C2=A0 Other weak points include the
lack of = support for outer joins and partitionwise joins.=C2=A0 And during my
rev= iew of the code, I came across several bugs (planning error or crash)
th= at need to be addressed.

I'd like to give it another take to imp= lement eager aggregation, while
borrowing lots of concepts and many chun= ks of codes from the previous
patch set.=C2=A0 Please see attached.=C2= =A0 I have chosen to use the term 'Eager
Aggregation' from the p= aper [1] instead of 'Aggregation push-down', to
differentiate th= e aggregation push-down technique in FDW.

The patch has been split i= nto small pieces to make the review easier.

0001 int= roduces the RelInfoList structure, which encapsulates both a
list and a = hash table, so that we can leverage the hash table for faster
lookups no= t only for join relations but also for upper relations.=C2=A0 With
eager= aggregation, it is possible that we generate so many upper rels of
type= UPPERREL_PARTIAL_GROUP_AGG that a hash table can help a lot with
lookup= s.

0002 introduces the RelAggInfo structure to store information nee= ded to
create grouped paths for base and join rels.=C2=A0 It also revise= s the
RelInfoList related structures and functions so that they can be u= sed
with RelAggInfos.

0003 checks if eager aggregation is applica= ble, and if so, collects
suitable aggregate expressions and grouping exp= ressions in the query,
and records them in root->agg_clause_list and = root->group_expr_list
respectively.

0004 implements the functi= ons that check if eager aggregation is
applicable for a given relation, = and if so, create RelAggInfo structure
for the relation, using the infos= about aggregate expressions and
grouping expressions we collected earli= er.=C2=A0 In this patch, when we check
if a target expression can act as= grouping expression, we need to check
if this expression can be known e= qual to other expressions due to ECs
that can act as grouping expression= s.=C2=A0 This patch leverages function
exprs_known_equal() to achieve th= at, after enhancing this function to
consider opfamily if provided.
<= br>0005 implements the functions that generate paths for grouped relations<= br>by adding sorted and hashed partial aggregation paths on top of paths of=
the plain base or join relations.=C2=A0 For sorted partial aggregation = paths,
we only consider any suitably-sorted input paths as well as sorti= ng the
cheapest-total path.=C2=A0 For hashed partial aggregation paths, = we only
consider the cheapest-total path as input.=C2=A0 By not consider= ing other
paths we can reduce the number of grouping paths as much as po= ssible
while still achieving reasonable results.

0006 builds grou= ped relations for each base relation if possible, and
generates aggregat= ion paths for the grouped base relations.

0007= builds grouped relations for each just-processed join relation if
possi= ble, and generates aggregation paths for the grouped join
relations.=C2= =A0 The changes made to make_join_rel() are relatively minor,
with the a= ddition of a new function make_grouped_join_rel(), which finds
or create= s a grouped relation for the just-processed joinrel, and
generates group= ed paths by joining a grouped input relation with a
non-grouped input re= lation.

The other way to generate grouped paths is by adding sorted = and hashed
partial aggregation paths on top of paths of the joinrel.=C2= =A0 This occurs
in standard_join_search(), after we've run set_cheap= est() for the
joinrel.=C2=A0 The reason for performing this step after s= et_cheapest() is
that we need to know the joinrel's cheapest paths (= see 0005).

This patch also makes the grouped relation for the topmos= t join rel act
as the upper rel representing the result of partial aggre= gation, so that
we can add the final aggregation on top of that.=C2=A0 A= dditionally, this
patch extends the functionality of eager aggregation t= o work with
partitionwise join and geqo.

This patch also makes ea= ger aggregation work with outer joins.=C2=A0 With
outer join, the aggreg= ate cannot be pushed down if any column referenced
by grouping expressio= ns or aggregate functions is nullable by an outer
join above the relatio= n to which we want to apply the partiall
aggregation.=C2=A0 Thanks to To= m's outer-join-aware-Var infrastructure, we
can easily identify such= situations and subsequently refrain from
pushing down the aggregates.
Starting from this patch, you should be able to see plans with eager<= br>aggregation.

0008 adds test cases for eager aggregation.

0= 009 adds a section in README that describes this feature (copied from
pr= evious patch set, with minor tweaks).

Thoughts and comments are welc= ome.

--0000000000007fb9c70612d17f78-- --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0001-Introduce-RelInfoList-structure.patch" Content-Disposition: attachment; filename="v1-0001-Introduce-RelInfoList-structure.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7r60 RnJvbSA1NDJmMDJlYjk4Yjg0ZGFkOTk5MGMwM2JlZjc5MmJiM2U4MTZmZDIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAxOSBGZWIgMjAyNCAxNToxNjo1MSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg MS85XSBJbnRyb2R1Y2UgUmVsSW5mb0xpc3Qgc3RydWN0dXJlCgpUaGlzIGNvbW1pdCBpbnRyb2R1 Y2VzIHRoZSBSZWxJbmZvTGlzdCBzdHJ1Y3R1cmUsIHdoaWNoIGVuY2Fwc3VsYXRlcwpib3RoIGEg bGlzdCBhbmQgYSBoYXNoIHRhYmxlLCBzbyB0aGF0IHdlIGNhbiBsZXZlcmFnZSB0aGUgaGFzaCB0 YWJsZSBmb3IKZmFzdGVyIGxvb2t1cHMgbm90IG9ubHkgZm9yIGpvaW4gcmVsYXRpb25zIGJ1dCBh bHNvIGZvciB1cHBlciByZWxhdGlvbnMuCi0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdy ZXNfZmR3LmMgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZh bC5jIHwgIDIwICstLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgfCAg IDcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgIHwgICA1ICstCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgICB8IDE2NCArKysrKysrKysrKysr Ky0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICB8ICAz MSArKystLQogNiBmaWxlcyBjaGFuZ2VkLCAxMzMgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCAxNDJkY2ZjOTk1Li5mNDZm YzYwNGI0IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAtNjA2OSw3ICs2MDY5 LDggQEAgZm9yZWlnbl9qb2luX29rKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lu cmVsLCBKb2luVHlwZSBqb2ludHlwZSwKIAkgKi8KIAlBc3NlcnQoZnBpbmZvLT5yZWxhdGlvbl9p bmRleCA9PSAwKTsJLyogc2hvdWxkbid0IGJlIHNldCB5ZXQgKi8KIAlmcGluZm8tPnJlbGF0aW9u X2luZGV4ID0KLQkJbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJsZSkgKyBsaXN0X2xlbmd0 aChyb290LT5qb2luX3JlbF9saXN0KTsKKwkJbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJs ZSkgKworCQlsaXN0X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyk7CiAKIAlyZXR1 cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9f ZXZhbC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMKaW5kZXggZDJm N2Y0ZTVmMy4uMTE0MTE1Njg5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dl cW8vZ2Vxb19ldmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFs LmMKQEAgLTg1LDE4ICs4NSwxOCBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUg KnRvdXIsIGludCBudW1fZ2VuZSkKIAkgKiB0cnVuY2F0aW5nIHRoZSBsaXN0IHRvIGl0cyBvcmln aW5hbCBsZW5ndGguICBOT1RFIHRoaXMgYXNzdW1lcyB0aGF0IGFueQogCSAqIGFkZGVkIGVudHJp ZXMgYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQhCiAJICoKLQkgKiBXZSBhbHNvIG11c3QgdGFrZSBj YXJlIG5vdCB0byBtZXNzIHVwIHRoZSBvdXRlciBqb2luX3JlbF9oYXNoLCBpZiB0aGVyZQotCSAq IGlzIG9uZS4gIFdlIGNhbiBkbyB0aGlzIGJ5IGp1c3QgdGVtcG9yYXJpbHkgc2V0dGluZyB0aGUg bGluayB0byBOVUxMLgotCSAqIChJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2luIHJl bHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5IGFyZSwgYQotCSAqIG5ldyBoYXNoIHRhYmxlIHdpbGwg Z2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHkuKQorCSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUg bm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGpvaW5fcmVsX2xpc3QtPmhhc2gsIGlmCisJICogdGhl cmUgaXMgb25lLiAgV2UgY2FuIGRvIHRoaXMgYnkganVzdCB0ZW1wb3JhcmlseSBzZXR0aW5nIHRo ZSBsaW5rIHRvCisJICogTlVMTC4gIChJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2lu IHJlbHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5CisJICogYXJlLCBhIG5ldyBoYXNoIHRhYmxlIHdp bGwgZ2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHkuKQogCSAqCiAJICogam9pbl9yZWxfbGV2ZWxb XSBzaG91bGRuJ3QgYmUgaW4gdXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24ndC4KIAkgKi8KLQlz YXZlbGVuZ3RoID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7Ci0Jc2F2ZWhhc2gg PSByb290LT5qb2luX3JlbF9oYXNoOworCXNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyb290LT5q b2luX3JlbF9saXN0LT5pdGVtcyk7CisJc2F2ZWhhc2ggPSByb290LT5qb2luX3JlbF9saXN0LT5o YXNoOwogCUFzc2VydChyb290LT5qb2luX3JlbF9sZXZlbCA9PSBOVUxMKTsKIAotCXJvb3QtPmpv aW5fcmVsX2hhc2ggPSBOVUxMOworCXJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2ggPSBOVUxMOwog CiAJLyogY29uc3RydWN0IHRoZSBiZXN0IHBhdGggZm9yIHRoZSBnaXZlbiBjb21iaW5hdGlvbiBv ZiByZWxhdGlvbnMgKi8KIAlqb2lucmVsID0gZ2ltbWVfdHJlZShyb290LCB0b3VyLCBudW1fZ2Vu ZSk7CkBAIC0xMjEsOSArMTIxLDkgQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5l ICp0b3VyLCBpbnQgbnVtX2dlbmUpCiAJICogUmVzdG9yZSBqb2luX3JlbF9saXN0IHRvIGl0cyBm b3JtZXIgc3RhdGUsIGFuZCBwdXQgYmFjayBvcmlnaW5hbAogCSAqIGhhc2h0YWJsZSBpZiBhbnku CiAJICovCi0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+am9pbl9y ZWxfbGlzdCwKLQkJCQkJCQkJCQlzYXZlbGVuZ3RoKTsKLQlyb290LT5qb2luX3JlbF9oYXNoID0g c2F2ZWhhc2g7CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBsaXN0X3RydW5jYXRlKHJv b3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zLAorCQkJCQkJCQkJCQkgICBzYXZlbGVuZ3RoKTsKKwly b290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gc2F2ZWhhc2g7CiAKIAkvKiByZWxlYXNlIGFsbCB0 aGUgbWVtb3J5IGFjcXVpcmVkIHdpdGhpbiBnaW1tZV90cmVlICovCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCBk NDA0ZmJmMjYyLi4zNTFiZjJlOWU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKQEAgLTM0MTMsOSArMzQxMywxMCBAQCBtYWtlX3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKICAqIG5lZWRlZCBmb3IgdGhlc2UgcGF0aHMgbmVl ZCBoYXZlIGJlZW4gaW5zdGFudGlhdGVkLgogICoKICAqIE5vdGUgdG8gcGx1Z2luIGF1dGhvcnM6 IHRoZSBmdW5jdGlvbnMgaW52b2tlZCBkdXJpbmcgc3RhbmRhcmRfam9pbl9zZWFyY2goKQotICog bW9kaWZ5IHJvb3QtPmpvaW5fcmVsX2xpc3QgYW5kIHJvb3QtPmpvaW5fcmVsX2hhc2guICBJZiB5 b3Ugd2FudCB0byBkbyBtb3JlCi0gKiB0aGFuIG9uZSBqb2luLW9yZGVyIHNlYXJjaCwgeW91J2xs IHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUKLSAqIG9yaWdpbmFsIHN0YXRl cyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBTZWUgZ2Vxb19ldmFsKCkgZm9yIGFuIGV4YW1w bGUuCisgKiBtb2RpZnkgcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgYW5kIHJvb3QtPmpvaW5f cmVsX2xpc3QtPmhhc2guICBJZiB5b3UKKyAqIHdhbnQgdG8gZG8gbW9yZSB0aGFuIG9uZSBqb2lu LW9yZGVyIHNlYXJjaCwgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gc2F2ZSBhbmQKKyAqIHJlc3Rv cmUgdGhlIG9yaWdpbmFsIHN0YXRlcyBvZiB0aG9zZSBkYXRhIHN0cnVjdHVyZXMuICBTZWUgZ2Vx b19ldmFsKCkgZm9yCisgKiBhbiBleGFtcGxlLgogICovCiBSZWxPcHRJbmZvICoKIHN0YW5kYXJk X2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZvICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAq aW5pdGlhbF9yZWxzKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm1haW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggY2E0 N2M3ZDMxMC4uMzM0MWU2NGQyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5j CkBAIC02NSw4ICs2NSw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJICog Tk9URTogYXBwZW5kX3JlbF9saXN0IHdhcyBzZXQgdXAgYnkgc3VicXVlcnlfcGxhbm5lciwgc28g ZG8gbm90IHRvdWNoCiAJICogaGVyZS4KIAkgKi8KLQlyb290LT5qb2luX3JlbF9saXN0ID0gTklM OwotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBOVUxMOworCXJvb3QtPmpvaW5fcmVsX2xpc3QgPSBt YWtlTm9kZShSZWxJbmZvTGlzdCk7CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBOSUw7 CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaCA9IE5VTEw7CiAJcm9vdC0+am9pbl9yZWxfbGV2 ZWwgPSBOVUxMOwogCXJvb3QtPmpvaW5fY3VyX2xldmVsID0gMDsKIAlyb290LT5jYW5vbl9wYXRo a2V5cyA9IE5JTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5v ZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCBlNWY0MDYy YmZiLi45ZTI1NzUwYWNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9y ZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0z NSwxMSArMzUsMTUgQEAKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKIAogCi10eXBlZGVm IHN0cnVjdCBKb2luSGFzaEVudHJ5CisvKgorICogQW4gZW50cnkgb2YgYSBoYXNoIHRhYmxlIHRo YXQgd2UgdXNlIHRvIG1ha2UgbG9va3VwIGZvciBSZWxPcHRJbmZvCisgKiBzdHJ1Y3R1cmVzIG1v cmUgZWZmaWNpZW50LgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxJbmZvRW50cnkKIHsKLQlSZWxp ZHMJCWpvaW5fcmVsaWRzOwkvKiBoYXNoIGtleSAtLS0gTVVTVCBCRSBGSVJTVCAqLwotCVJlbE9w dEluZm8gKmpvaW5fcmVsOwotfSBKb2luSGFzaEVudHJ5OworCVJlbGlkcwkJcmVsaWRzOwkJCS8q IGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCisJUmVsT3B0SW5mbyAqcmVsOworfSBSZWxJ bmZvRW50cnk7CiAKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCVJlbE9wdEluZm8gKmlucHV0X3Jl bCwKQEAgLTQ3MiwxMSArNDc2LDExIEBAIGZpbmRfYmFzZV9yZWxfaWdub3JlX2pvaW4oUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCkKIH0KIAogLyoKLSAqIGJ1aWxkX2pvaW5fcmVsX2hhc2gK LSAqCSAgQ29uc3RydWN0IHRoZSBhdXhpbGlhcnkgaGFzaCB0YWJsZSBmb3Igam9pbiByZWxhdGlv bnMuCisgKiBidWlsZF9yZWxfaGFzaAorICoJICBDb25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNo IHRhYmxlIGZvciByZWxhdGlvbnMuCiAgKi8KIHN0YXRpYyB2b2lkCi1idWlsZF9qb2luX3JlbF9o YXNoKFBsYW5uZXJJbmZvICpyb290KQorYnVpbGRfcmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3Qp CiB7CiAJSFRBQgkgICAqaGFzaHRhYjsKIAlIQVNIQ1RMCQloYXNoX2N0bDsKQEAgLTQ4NCw0NyAr NDg4LDQ5IEBAIGJ1aWxkX2pvaW5fcmVsX2hhc2goUGxhbm5lckluZm8gKnJvb3QpCiAKIAkvKiBD cmVhdGUgdGhlIGhhc2ggdGFibGUgKi8KIAloYXNoX2N0bC5rZXlzaXplID0gc2l6ZW9mKFJlbGlk cyk7Ci0JaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKEpvaW5IYXNoRW50cnkpOworCWhhc2hf Y3RsLmVudHJ5c2l6ZSA9IHNpemVvZihSZWxJbmZvRW50cnkpOwogCWhhc2hfY3RsLmhhc2ggPSBi aXRtYXBfaGFzaDsKIAloYXNoX2N0bC5tYXRjaCA9IGJpdG1hcF9tYXRjaDsKIAloYXNoX2N0bC5o Y3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7Ci0JaGFzaHRhYiA9IGhhc2hfY3JlYXRlKCJKb2lu UmVsSGFzaFRhYmxlIiwKKwloYXNodGFiID0gaGFzaF9jcmVhdGUoIlJlbEhhc2hUYWJsZSIsCiAJ CQkJCQkgIDI1NkwsCiAJCQkJCQkgICZoYXNoX2N0bCwKIAkJCQkJCSAgSEFTSF9FTEVNIHwgSEFT SF9GVU5DVElPTiB8IEhBU0hfQ09NUEFSRSB8IEhBU0hfQ09OVEVYVCk7CiAKLQkvKiBJbnNlcnQg YWxsIHRoZSBhbHJlYWR5LWV4aXN0aW5nIGpvaW5yZWxzICovCi0JZm9yZWFjaChsLCByb290LT5q b2luX3JlbF9saXN0KQorCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgcmVsYXRp b25zICovCisJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAl7CiAJCVJlbE9wdEluZm8gKnJlbCA9 IChSZWxPcHRJbmZvICopIGxmaXJzdChsKTsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5OworCQlS ZWxJbmZvRW50cnkgKmhlbnRyeTsKIAkJYm9vbAkJZm91bmQ7CiAKLQkJaGVudHJ5ID0gKEpvaW5I YXNoRW50cnkgKikgaGFzaF9zZWFyY2goaGFzaHRhYiwKLQkJCQkJCQkJCQkJICAgJihyZWwtPnJl bGlkcyksCi0JCQkJCQkJCQkJCSAgIEhBU0hfRU5URVIsCi0JCQkJCQkJCQkJCSAgICZmb3VuZCk7 CisJCWhlbnRyeSA9IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFyY2goaGFzaHRhYiwKKwkJCQkJ CQkJCQkJICAmKHJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJCQkJICBIQVNIX0VOVEVSLAorCQkJCQkJ CQkJCQkgICZmb3VuZCk7CiAJCUFzc2VydCghZm91bmQpOwotCQloZW50cnktPmpvaW5fcmVsID0g cmVsOworCQloZW50cnktPnJlbCA9IHJlbDsKIAl9CiAKLQlyb290LT5qb2luX3JlbF9oYXNoID0g aGFzaHRhYjsKKwlsaXN0LT5oYXNoID0gaGFzaHRhYjsKIH0KIAogLyoKLSAqIGZpbmRfam9pbl9y ZWwKLSAqCSAgUmV0dXJucyByZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMn IChhIHNldCBvZiBSVCBpbmRleGVzKSwKLSAqCSAgb3IgTlVMTCBpZiBub25lIGV4aXN0cy4gIFRo aXMgaXMgZm9yIGpvaW4gcmVsYXRpb25zLgorICogZmluZF9yZWxfaW5mbworICoJICBGaW5kIGFu IFJlbE9wdEluZm8gZW50cnkuCiAgKi8KLVJlbE9wdEluZm8gKgotZmluZF9qb2luX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykKK3N0YXRpYyBSZWxPcHRJbmZvICoKK2ZpbmRf cmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMpCiB7CisJaWYgKGxpc3Qg PT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKgogCSAqIFN3aXRjaCB0byB1c2luZyBoYXNo IGxvb2t1cCB3aGVuIGxpc3QgZ3Jvd3MgInRvbyBsb25nIi4gIFRoZSB0aHJlc2hvbGQKIAkgKiBp cyBhcmJpdHJhcnkgYW5kIGlzIGtub3duIG9ubHkgaGVyZS4KIAkgKi8KLQlpZiAoIXJvb3QtPmpv aW5fcmVsX2hhc2ggJiYgbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCkgPiAzMikKLQkJ YnVpbGRfam9pbl9yZWxfaGFzaChyb290KTsKKwlpZiAoIWxpc3QtPmhhc2ggJiYgbGlzdF9sZW5n dGgobGlzdC0+aXRlbXMpID4gMzIpCisJCWJ1aWxkX3JlbF9oYXNoKGxpc3QpOwogCiAJLyoKIAkg KiBVc2UgZWl0aGVyIGhhc2h0YWJsZSBsb29rdXAgb3IgbGluZWFyIHNlYXJjaCwgYXMgYXBwcm9w cmlhdGUuCkBAIC01MzQsMjMgKzU0MCwyMyBAQCBmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LCBSZWxpZHMgcmVsaWRzKQogCSAqIHNvIHdvdWxkIGZvcmNlIHJlbGlkcyBvdXQgb2YgYSBy ZWdpc3RlciBhbmQgdGh1cyBwcm9iYWJseSBzbG93IGRvd24gdGhlCiAJICogbGlzdC1zZWFyY2gg Y2FzZS4KIAkgKi8KLQlpZiAocm9vdC0+am9pbl9yZWxfaGFzaCkKKwlpZiAobGlzdC0+aGFzaCkK IAl7CiAJCVJlbGlkcwkJaGFzaGtleSA9IHJlbGlkczsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5 OworCQlSZWxJbmZvRW50cnkgKmhlbnRyeTsKIAotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAq KSBoYXNoX3NlYXJjaChyb290LT5qb2luX3JlbF9oYXNoLAotCQkJCQkJCQkJCQkgICAmaGFzaGtl eSwKLQkJCQkJCQkJCQkJICAgSEFTSF9GSU5ELAotCQkJCQkJCQkJCQkgICBOVUxMKTsKKwkJaGVu dHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0LT5oYXNoLAorCQkJCQkJCQkJ CQkgICZoYXNoa2V5LAorCQkJCQkJCQkJCQkgIEhBU0hfRklORCwKKwkJCQkJCQkJCQkJICBOVUxM KTsKIAkJaWYgKGhlbnRyeSkKLQkJCXJldHVybiBoZW50cnktPmpvaW5fcmVsOworCQkJcmV0dXJu IGhlbnRyeS0+cmVsOwogCX0KIAllbHNlCiAJewogCQlMaXN0Q2VsbCAgICpsOwogCi0JCWZvcmVh Y2gobCwgcm9vdC0+am9pbl9yZWxfbGlzdCkKKwkJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAkJ ewogCQkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOwogCkBAIC01 NjIsNiArNTY4LDU0IEBAIGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyBy ZWxpZHMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBmaW5kX2pvaW5fcmVsCisgKgkgIFJl dHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVzcG9uZGluZyB0byAncmVsaWRzJyAoYSBzZXQgb2Yg UlQgaW5kZXhlcyksCisgKgkgIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuICBUaGlzIGlzIGZvciBq b2luIHJlbGF0aW9ucy4KKyAqLworUmVsT3B0SW5mbyAqCitmaW5kX2pvaW5fcmVsKFBsYW5uZXJJ bmZvICpyb290LCBSZWxpZHMgcmVsaWRzKQoreworCXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3Qt PmpvaW5fcmVsX2xpc3QsIHJlbGlkcyk7Cit9CisKKy8qCisgKiBhZGRfcmVsX2luZm8KKyAqCQlB ZGQgZ2l2ZW4gcmVsYXRpb24gdG8gdGhlIGdpdmVuIGxpc3QuIEFsc28gYWRkIGl0IHRvIHRoZSBh dXhpbGlhcnkKKyAqCQloYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLgorICovCitzdGF0aWMgdm9p ZAorYWRkX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxPcHRJbmZvICpyZWwpCit7CisJ LyogR0VRTyByZXF1aXJlcyB1cyB0byBhcHBlbmQgdGhlIG5ldyByZWxhdGlvbiB0byB0aGUgZW5k IG9mIHRoZSBsaXN0ISAqLworCWxpc3QtPml0ZW1zID0gbGFwcGVuZChsaXN0LT5pdGVtcywgcmVs KTsKKworCS8qIHN0b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUg aXMgb25lLiAqLworCWlmIChsaXN0LT5oYXNoKQorCXsKKwkJUmVsSW5mb0VudHJ5ICpoZW50cnk7 CisJCWJvb2wJCWZvdW5kOworCisJCWhlbnRyeSA9IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFy Y2gobGlzdC0+aGFzaCwKKwkJCQkJCQkJCQkJICAmKHJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJCQkJ ICBIQVNIX0VOVEVSLAorCQkJCQkJCQkJCQkgICZmb3VuZCk7CisJCUFzc2VydCghZm91bmQpOwor CQloZW50cnktPnJlbCA9IHJlbDsKKwl9Cit9CisKKy8qCisgKiBhZGRfam9pbl9yZWwKKyAqCQlB ZGQgZ2l2ZW4gam9pbiByZWxhdGlvbiB0byB0aGUgbGlzdCBvZiBqb2luIHJlbGF0aW9ucyBpbiB0 aGUgZ2l2ZW4KKyAqCQlQbGFubmVySW5mby4KKyAqLworc3RhdGljIHZvaWQKK2FkZF9qb2luX3Jl bChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKK3sKKwlhZGRfcmVsX2lu Zm8ocm9vdC0+am9pbl9yZWxfbGlzdCwgam9pbnJlbCk7Cit9CisKIC8qCiAgKiBzZXRfZm9yZWln bl9yZWxfcHJvcGVydGllcwogICoJCVNldCB1cCBmb3JlaWduLWpvaW4gZmllbGRzIGlmIG91dGVy IGFuZCBpbm5lciByZWxhdGlvbiBhcmUgZm9yZWlnbgpAQCAtNjExLDMyICs2NjUsNiBAQCBzZXRf Zm9yZWlnbl9yZWxfcHJvcGVydGllcyhSZWxPcHRJbmZvICpqb2lucmVsLCBSZWxPcHRJbmZvICpv dXRlcl9yZWwsCiAJfQogfQogCi0vKgotICogYWRkX2pvaW5fcmVsCi0gKgkJQWRkIGdpdmVuIGpv aW4gcmVsYXRpb24gdG8gdGhlIGxpc3Qgb2Ygam9pbiByZWxhdGlvbnMgaW4gdGhlIGdpdmVuCi0g KgkJUGxhbm5lckluZm8uIEFsc28gYWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkgaGFzaHRhYmxlIGlm IHRoZXJlIGlzIG9uZS4KLSAqLwotc3RhdGljIHZvaWQKLWFkZF9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCkKLXsKLQkvKiBHRVFPIHJlcXVpcmVzIHVzIHRv IGFwcGVuZCB0aGUgbmV3IGpvaW5yZWwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEgKi8KLQlyb290 LT5qb2luX3JlbF9saXN0ID0gbGFwcGVuZChyb290LT5qb2luX3JlbF9saXN0LCBqb2lucmVsKTsK LQotCS8qIHN0b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUgaXMg b25lLiAqLwotCWlmIChyb290LT5qb2luX3JlbF9oYXNoKQotCXsKLQkJSm9pbkhhc2hFbnRyeSAq aGVudHJ5OwotCQlib29sCQlmb3VuZDsKLQotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAqKSBo YXNoX3NlYXJjaChyb290LT5qb2luX3JlbF9oYXNoLAotCQkJCQkJCQkJCQkgICAmKGpvaW5yZWwt PnJlbGlkcyksCi0JCQkJCQkJCQkJCSAgIEhBU0hfRU5URVIsCi0JCQkJCQkJCQkJCSAgICZmb3Vu ZCk7Ci0JCUFzc2VydCghZm91bmQpOwotCQloZW50cnktPmpvaW5fcmVsID0gam9pbnJlbDsKLQl9 Ci19Ci0KIC8qCiAgKiBidWlsZF9qb2luX3JlbAogICoJICBSZXR1cm5zIHJlbGF0aW9uIGVudHJ5 IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVuaW9uIG9mIHR3byBnaXZlbiByZWxzLApAQCAtMTQ2Miwy MiArMTQ5MCwxNCBAQCBzdWJidWlsZF9qb2lucmVsX2pvaW5saXN0KFJlbE9wdEluZm8gKmpvaW5y ZWwsCiBSZWxPcHRJbmZvICoKIGZldGNoX3VwcGVyX3JlbChQbGFubmVySW5mbyAqcm9vdCwgVXBw ZXJSZWxhdGlvbktpbmQga2luZCwgUmVsaWRzIHJlbGlkcykKIHsKKwlSZWxJbmZvTGlzdCAqbGlz dCA9ICZyb290LT51cHBlcl9yZWxzW2tpbmRdOwogCVJlbE9wdEluZm8gKnVwcGVycmVsOwotCUxp c3RDZWxsICAgKmxjOwotCi0JLyoKLQkgKiBGb3IgdGhlIG1vbWVudCwgb3VyIGluZGV4aW5nIGRh dGEgc3RydWN0dXJlIGlzIGp1c3QgYSBMaXN0IGZvciBlYWNoCi0JICogcmVsYXRpb24ga2luZC4g IElmIHdlIGV2ZXIgZ2V0IHNvIG1hbnkgb2Ygb25lIGtpbmQgdGhhdCB0aGlzIHN0b3BzCi0JICog d29ya2luZyB3ZWxsLCB3ZSBjYW4gaW1wcm92ZSBpdC4gIE5vIGNvZGUgb3V0c2lkZSB0aGlzIGZ1 bmN0aW9uIHNob3VsZAotCSAqIGFzc3VtZSBhbnl0aGluZyBhYm91dCBob3cgdG8gZmluZCBhIHBh cnRpY3VsYXIgdXBwZXJyZWwuCi0JICovCiAKIAkvKiBJZiB3ZSBhbHJlYWR5IG1hZGUgdGhpcyB1 cHBlcnJlbCBmb3IgdGhlIHF1ZXJ5LCByZXR1cm4gaXQgKi8KLQlmb3JlYWNoKGxjLCByb290LT51 cHBlcl9yZWxzW2tpbmRdKQorCWlmIChsaXN0KQogCXsKLQkJdXBwZXJyZWwgPSAoUmVsT3B0SW5m byAqKSBsZmlyc3QobGMpOwotCi0JCWlmIChibXNfZXF1YWwodXBwZXJyZWwtPnJlbGlkcywgcmVs aWRzKSkKKwkJdXBwZXJyZWwgPSBmaW5kX3JlbF9pbmZvKGxpc3QsIHJlbGlkcyk7CisJCWlmICh1 cHBlcnJlbCkKIAkJCXJldHVybiB1cHBlcnJlbDsKIAl9CiAKQEAgLTE0OTYsNyArMTUxNiw3IEBA IGZldGNoX3VwcGVyX3JlbChQbGFubmVySW5mbyAqcm9vdCwgVXBwZXJSZWxhdGlvbktpbmQga2lu ZCwgUmVsaWRzIHJlbGlkcykKIAl1cHBlcnJlbC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGggPSBOVUxM OwogCXVwcGVycmVsLT5jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzID0gTklMOwogCi0Jcm9v dC0+dXBwZXJfcmVsc1traW5kXSA9IGxhcHBlbmQocm9vdC0+dXBwZXJfcmVsc1traW5kXSwgdXBw ZXJyZWwpOworCWFkZF9yZWxfaW5mbygmcm9vdC0+dXBwZXJfcmVsc1traW5kXSwgdXBwZXJyZWwp OwogCiAJcmV0dXJuIHVwcGVycmVsOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA1MzQ2OTJi ZWUxLi5iZTUxZTJjNjUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtODAsNiArODAsMjUgQEAg dHlwZWRlZiBlbnVtIFVwcGVyUmVsYXRpb25LaW5kCiAJLyogTkI6IFVQUEVSUkVMX0ZJTkFMIG11 c3QgYmUgbGFzdCBlbnVtIGVudHJ5OyBpdCdzIHVzZWQgdG8gc2l6ZSBhcnJheXMgKi8KIH0gVXBw ZXJSZWxhdGlvbktpbmQ7CiAKKy8qCisgKiBIYXNoZWQgbGlzdCB0byBzdG9yZSByZWxhdGlvbiBz cGVjaWZpYyBpbmZvIGFuZCB0byByZXRyaWV2ZSBpdCBieSByZWxpZHMuCisgKgorICogRm9yIHNt YWxsIHByb2JsZW1zIHdlIGp1c3Qgc2NhbiB0aGUgbGlzdCB0byBkbyBsb29rdXBzLCBidXQgd2hl biB0aGVyZSBhcmUKKyAqIG1hbnkgcmVsYXRpb25zIHdlIGJ1aWxkIGEgaGFzaCB0YWJsZSBmb3Ig ZmFzdGVyIGxvb2t1cHMuICBUaGUgaGFzaCB0YWJsZSBpcworICogcHJlc2VudCBhbmQgdmFsaWQg d2hlbiAnaGFzaCcgaXMgbm90IE5VTEwuICBOb3RlIHRoYXQgd2Ugc3RpbGwgbWFpbnRhaW4gdGhl CisgKiBsaXN0IGV2ZW4gd2hlbiB1c2luZyB0aGUgaGFzaCB0YWJsZSBmb3IgbG9va3VwczsgdGhp cyBzaW1wbGlmaWVzIGxpZmUgZm9yCisgKiBHRVFPLgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxJ bmZvTGlzdAoreworCXBnX25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKQorCisJTm9k ZVRhZwkJdHlwZTsKKworCUxpc3QJICAgKml0ZW1zOworCXN0cnVjdCBIVEFCICpoYXNoIHBnX25v ZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7Cit9IFJlbEluZm9MaXN0OworCiAvKi0tLS0tLS0t LS0KICAqIFBsYW5uZXJHbG9iYWwKICAqCQlHbG9iYWwgaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5n L29wdGltaXphdGlvbgpAQCAtMjY3LDE1ICsyODYsOSBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAog CS8qCiAJICogam9pbl9yZWxfbGlzdCBpcyBhIGxpc3Qgb2YgYWxsIGpvaW4tcmVsYXRpb24gUmVs T3B0SW5mb3Mgd2UgaGF2ZQotCSAqIGNvbnNpZGVyZWQgaW4gdGhpcyBwbGFubmluZyBydW4uICBG b3Igc21hbGwgcHJvYmxlbXMgd2UganVzdCBzY2FuIHRoZQotCSAqIGxpc3QgdG8gZG8gbG9va3Vw cywgYnV0IHdoZW4gdGhlcmUgYXJlIG1hbnkgam9pbiByZWxhdGlvbnMgd2UgYnVpbGQgYQotCSAq IGhhc2ggdGFibGUgZm9yIGZhc3RlciBsb29rdXBzLiAgVGhlIGhhc2ggdGFibGUgaXMgcHJlc2Vu dCBhbmQgdmFsaWQKLQkgKiB3aGVuIGpvaW5fcmVsX2hhc2ggaXMgbm90IE5VTEwuICBOb3RlIHRo YXQgd2Ugc3RpbGwgbWFpbnRhaW4gdGhlIGxpc3QKLQkgKiBldmVuIHdoZW4gdXNpbmcgdGhlIGhh c2ggdGFibGUgZm9yIGxvb2t1cHM7IHRoaXMgc2ltcGxpZmllcyBsaWZlIGZvcgotCSAqIEdFUU8u CisJICogY29uc2lkZXJlZCBpbiB0aGlzIHBsYW5uaW5nIHJ1bi4KIAkgKi8KLQlMaXN0CSAgICpq b2luX3JlbF9saXN0OwotCXN0cnVjdCBIVEFCICpqb2luX3JlbF9oYXNoIHBnX25vZGVfYXR0cihy ZWFkX3dyaXRlX2lnbm9yZSk7CisJUmVsSW5mb0xpc3QgKmpvaW5fcmVsX2xpc3Q7CS8qIGxpc3Qg b2Ygam9pbi1yZWxhdGlvbiBSZWxPcHRJbmZvcyAqLwogCiAJLyoKIAkgKiBXaGVuIGRvaW5nIGEg ZHluYW1pYy1wcm9ncmFtbWluZy1zdHlsZSBqb2luIHNlYXJjaCwgam9pbl9yZWxfbGV2ZWxba10K QEAgLTQwOCw3ICs0MjEsNyBAQCBzdHJ1Y3QgUGxhbm5lckluZm8KIAkgKiBVcHBlci1yZWwgUmVs T3B0SW5mb3MuIFVzZSBmZXRjaF91cHBlcl9yZWwoKSB0byBnZXQgYW55IHBhcnRpY3VsYXIKIAkg KiB1cHBlciByZWwuCiAJICovCi0JTGlzdAkgICAqdXBwZXJfcmVsc1tVUFBFUlJFTF9GSU5BTCAr IDFdIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CisJUmVsSW5mb0xpc3QJCXVwcGVy X3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUp OzsKIAogCS8qIFJlc3VsdCB0bGlzdHMgY2hvc2VuIGJ5IGdyb3VwaW5nX3BsYW5uZXIgZm9yIHVw cGVyLXN0YWdlIHByb2Nlc3NpbmcgKi8KIAlzdHJ1Y3QgUGF0aFRhcmdldCAqdXBwZXJfdGFyZ2V0 c1tVUFBFUlJFTF9GSU5BTCArIDFdIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7Ci0t IAoyLjMxLjAKCg== --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0005-Implement-functions-that-generate-paths-for-grouped-relations.patch" Content-Disposition: attachment; filename="v1-0005-Implement-functions-that-generate-paths-for-grouped-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7rz4 RnJvbSA2YjNiN2E5NDRiYmIwMThlNzdkZDhlNGI3ODdiOWM2NjBhOWVkNjliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxNDoxOTozOSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg NS85XSBJbXBsZW1lbnQgZnVuY3Rpb25zIHRoYXQgZ2VuZXJhdGUgcGF0aHMgZm9yIGdyb3VwZWQK IHJlbGF0aW9ucwoKVGhpcyBjb21taXQgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25zIHRoYXQgZ2Vu ZXJhdGUgcGF0aHMgZm9yIGdyb3VwZWQKcmVsYXRpb25zIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhh c2hlZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcApvZiBwYXRocyBvZiB0aGUgcGxh aW4gYmFzZSBvciBqb2luIHJlbGF0aW9ucy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jIHwgMzA3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIHwgIDEyICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aHMuaCAgICAgICAgIHwgICA0ICsKIDMgZmlsZXMgY2hhbmdlZCwgMzE1IGluc2VydGlv bnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMK aW5kZXggOTM4NGM1NGVkOS4uZjQ3YWQwNDg0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgi CiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh bm5lci5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3Jlc3RyaWN0aW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9jbGF1c2UuaCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlICJwb3J0 L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgogCiAK IC8qIEJpdG1hc2sgZmxhZ3MgZm9yIHB1c2hkb3duX3NhZmV0eV9pbmZvLnVuc2FmZUZsYWdzICov CkBAIC0zMzA2LDYgKzMzMDgsMzExIEBAIGdlbmVyYXRlX3VzZWZ1bF9nYXRoZXJfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgYm9vbCBvdmVycmlkZV9yCiAJfQogfQog CisvKgorICogZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocworICoJCUdlbmVyYXRlIHBhdGhzIGZvciBh IGdyb3VwZWQgcmVsYXRpb24gYnkgYWRkaW5nIHNvcnRlZCBhbmQgaGFzaGVkCisgKgkJcGFydGlh bCBhZ2dyZWdhdGlvbiBwYXRocyBvbiB0b3Agb2YgcGF0aHMgb2YgdGhlIHBsYWluIGJhc2Ugb3Ig am9pbgorICoJCXJlbGF0aW9uLgorICoKKyAqIFRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYXJlIHBy b3ZpZGVkIGJ5IHRoZSBSZWxBZ2dJbmZvIHN0cnVjdHVyZS4KKyAqLwordm9pZAorZ2VuZXJhdGVf Z3JvdXBlZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQs CisJCQkJCSAgIFJlbE9wdEluZm8gKnJlbF9wbGFpbiwgUmVsQWdnSW5mbyAqYWdnX2luZm8pCit7 CisJQWdnQ2xhdXNlQ29zdHMgYWdnX2Nvc3RzOworCWJvb2wJCWNhbl9oYXNoOworCWJvb2wJCWNh bl9zb3J0OworCVBhdGgJICAgKmNoZWFwZXN0X3RvdGFsX3BhdGggPSBOVUxMOworCVBhdGgJICAg KmNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IE5VTEw7CisJZG91YmxlCQlkTnVtR3JvdXBzID0gMDsK Kwlkb3VibGUJCWROdW1QYXJ0aWFsR3JvdXBzID0gMDsKKworCWlmIChJU19EVU1NWV9SRUwocmVs X3BsYWluKSkKKwl7CisJCW1hcmtfZHVtbXlfcmVsKHJlbF9ncm91cGVkKTsKKwkJcmV0dXJuOwor CX0KKworCU1lbVNldCgmYWdnX2Nvc3RzLCAwLCBzaXplb2YoQWdnQ2xhdXNlQ29zdHMpKTsKKwln ZXRfYWdnX2NsYXVzZV9jb3N0cyhyb290LCBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwgJmFnZ19j b3N0cyk7CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gcGVy Zm9ybSBzb3J0LWJhc2VkIGltcGxlbWVudGF0aW9ucyBvZgorCSAqIGdyb3VwaW5nLgorCSAqLwor CWNhbl9zb3J0ID0gZ3JvdXBpbmdfaXNfc29ydGFibGUoYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMp OworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgY29uc2lkZXIgaGFzaC1i YXNlZCBpbXBsZW1lbnRhdGlvbnMgb2YKKwkgKiBncm91cGluZy4KKwkgKi8KKwlBc3NlcnQocm9v dC0+bnVtT3JkZXJlZEFnZ3MgPT0gMCk7CisJY2FuX2hhc2ggPSAoYWdnX2luZm8tPmdyb3VwX2Ns YXVzZXMgIT0gTklMICYmCisJCQkJZ3JvdXBpbmdfaXNfaGFzaGFibGUoYWdnX2luZm8tPmdyb3Vw X2NsYXVzZXMpKTsKKworCS8qCisJICogQ29uc2lkZXIgd2hldGhlciB3ZSBzaG91bGQgZ2VuZXJh dGUgcGFydGlhbGx5IGFnZ3JlZ2F0ZWQgbm9uLXBhcnRpYWwKKwkgKiBwYXRocy4gIFdlIGNhbiBv bmx5IGRvIHRoaXMgaWYgd2UgaGF2ZSBhIG5vbi1wYXJ0aWFsIHBhdGguCisJICovCisJaWYgKHJl bF9wbGFpbi0+cGF0aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3RfdG90YWxfcGF0aCA9IHJl bF9wbGFpbi0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKKwkJQXNzZXJ0KGNoZWFwZXN0X3RvdGFsX3Bh dGggIT0gTlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiBwYXJhbGxlbGlzbSBpcyBwb3NzaWJsZSBm b3IgcmVsX2dyb3VwZWQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyCisJICogZ2VuZXJhdGluZyBw YXJ0aWFsbHktZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAgSG93ZXZlciwgaWYgdGhlIHBsYWluIHJl bAorCSAqIGhhcyBubyBwYXJ0aWFsIHBhdGhzLCB0aGVuIHdlIGNhbid0LgorCSAqLworCWlmIChy ZWxfZ3JvdXBlZC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgcmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhs aXN0ICE9IE5JTCkKKwl7CisJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKHJlbF9w bGFpbi0+cGFydGlhbF9wYXRobGlzdCk7CisJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGgg IT0gTlVMTCk7CisJfQorCisJLyogRXN0aW1hdGUgbnVtYmVyIG9mIHBhcnRpYWwgZ3JvdXBzLiAq LworCWlmIChjaGVhcGVzdF90b3RhbF9wYXRoICE9IE5VTEwpCisJCWROdW1Hcm91cHMgPSBlc3Rp bWF0ZV9udW1fZ3JvdXBzKHJvb3QsCisJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9leHBycywK KwkJCQkJCQkJCQkgY2hlYXBlc3RfdG90YWxfcGF0aC0+cm93cywKKwkJCQkJCQkJCQkgTlVMTCwg TlVMTCk7CisJaWYgKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKQorCQlkTnVtUGFydGlh bEdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJCQkJCQkJCWFnZ19pbmZv LT5ncm91cF9leHBycywKKwkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aC0+cm93cywK KwkJCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCisJaWYgKGNhbl9zb3J0ICYmIGNoZWFwZXN0X3Rv dGFsX3BhdGggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qCisJCSAqIFVz ZSBhbnkgYXZhaWxhYmxlIHN1aXRhYmx5LXNvcnRlZCBwYXRoIGFzIGlucHV0LCBhbmQgYWxzbyBj b25zaWRlcgorCQkgKiBzb3J0aW5nIHRoZSBjaGVhcGVzdC10b3RhbCBwYXRoLgorCQkgKi8KKwkJ Zm9yZWFjaChsYywgcmVsX3BsYWluLT5wYXRobGlzdCkKKwkJeworCQkJUGF0aAkgICAqaW5wdXRf cGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAgICpwYXRoOworCQkJYm9vbAkJ aXNfc29ydGVkOworCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CisKKwkJCS8qCisJCQkgKiBTaW5j ZSB0aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20gdGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNo IGlzCisJCQkgKiBub3QgYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJl IHRoYXQgaXQgcHJvdmlkZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGlucHV0IGZvciB0aGUgcGFydGlh bCBhZ2dyZWdhdGlvbi4KKwkJCSAqLworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9qZWN0 aW9uX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCSAgIHJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQkJ ICAgaW5wdXRfcGF0aCwKKwkJCQkJCQkJCQkJCSAgIGFnZ19pbmZvLT5hZ2dfaW5wdXQpOworCisJ CQlpc19zb3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4oYWdnX2luZm8tPmdyb3Vw X3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCSZw cmVzb3J0ZWRfa2V5cyk7CisJCQlpZiAoIWlzX3NvcnRlZCkKKwkJCXsKKwkJCQkvKgorCQkJCSAq IFRyeSBhdCBsZWFzdCBzb3J0aW5nIHRoZSBjaGVhcGVzdCBwYXRoIGFuZCBhbHNvIHRyeQorCQkJ CSAqIGluY3JlbWVudGFsbHkgc29ydGluZyBhbnkgcGF0aCB3aGljaCBpcyBwYXJ0aWFsbHkgc29y dGVkCisJCQkJICogYWxyZWFkeSAobm8gbmVlZCB0byBkZWFsIHdpdGggcGF0aHMgd2hpY2ggaGF2 ZSBwcmVzb3J0ZWQKKwkJCQkgKiBrZXlzIHdoZW4gaW5jcmVtZW50YWwgc29ydCBpcyBkaXNhYmxl ZCB1bmxlc3MgaXQncyB0aGUKKwkJCQkgKiBjaGVhcGVzdCBpbnB1dCBwYXRoKS4KKwkJCQkgKi8K KwkJCQlpZiAoaW5wdXRfcGF0aCAhPSBjaGVhcGVzdF90b3RhbF9wYXRoICYmCisJCQkJCShwcmVz b3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkpCisJCQkJCWNvbnRp bnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBubyBuZWVkIHRvIGNvbnNpZGVyIGJvdGggYSBz b3J0IGFuZCBpbmNyZW1lbnRhbCBzb3J0LgorCQkJCSAqIFdlJ2xsIGp1c3QgZG8gYSBzb3J0IGlm IHRoZXJlIGFyZSBubyBwcmVzb3J0ZWQga2V5cyBhbmQgYW4KKwkJCQkgKiBpbmNyZW1lbnRhbCBz b3J0IHdoZW4gdGhlcmUgYXJlIHByZXNvcnRlZCBrZXlzLgorCQkJCSAqLworCQkJCWlmIChwcmVz b3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKKwkJCQkJcGF0aCA9 IChQYXRoICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkgcmVsX2dyb3Vw ZWQsCisJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9w YXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJZWxzZQorCQkJCQlwYXRoID0gKFBh dGggKikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkJ CSByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJCQkg YWdnX2luZm8tPmdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCSBwcmVzb3J0ZWRfa2V5 cywKKwkJCQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBxdWFsIGlz IE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwg dGhlCisJCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkJICov CisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJCXJl bF9ncm91cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0 LAorCQkJCQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dTUExJVF9JTklUSUFMX1NF UklBTCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJCU5J TCwKKwkJCQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51bUdyb3Vwcyk7CisKKwkJ CWFkZF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwkJfQorCX0KKworCWlmIChjYW5fc29ydCAm JiBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOwor CisJCS8qIFNpbWlsYXIgdG8gYWJvdmUgbG9naWMsIGJ1dCBmb3IgcGFydGlhbCBwYXRocy4gKi8K KwkJZm9yZWFjaChsYywgcmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0KQorCQl7CisJCQlQYXRo CSAgICppbnB1dF9wYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwkJCVBhdGgJICAgKnBhdGg7 CisJCQlib29sCQlpc19zb3J0ZWQ7CisJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5czsKKworCQkJLyoK KwkJCSAqIFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSB0aGUgbm9uLWdyb3VwZWQgcmVs YXRpb24gd2hpY2ggaXMKKwkJCSAqIG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2Ug bXVzdCBlbnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkJICogdGhlIGNvcnJlY3QgaW5wdXQgZm9y IHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3Jl YXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJ CQkJCQkJCQkJCQkgICBpbnB1dF9wYXRoLAorCQkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19p bnB1dCk7CisKKwkJCWlzX3NvcnRlZCA9IHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihhZ2df aW5mby0+Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCisJCQkJ CQkJCQkJCQkJJnByZXNvcnRlZF9rZXlzKTsKKworCQkJaWYgKCFpc19zb3J0ZWQpCisJCQl7CisJ CQkJLyoKKwkJCQkgKiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3QgcGF0aCBhbmQg YWxzbyB0cnkKKwkJCQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGggd2hpY2ggaXMg cGFydGlhbGx5IHNvcnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVhbCB3aXRoIHBh dGhzIHdoaWNoIGhhdmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3JlbWVudGFsIHNv cnQgaXMgZGlzYWJsZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3QgaW5wdXQgcGF0 aCkuCisJCQkJICovCisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfcGFydGlhbF9wYXRo ICYmCisJCQkJCShwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29y dCkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBubyBuZWVkIHRvIGNv bnNpZGVyIGJvdGggYSBzb3J0IGFuZCBpbmNyZW1lbnRhbCBzb3J0LgorCQkJCSAqIFdlJ2xsIGp1 c3QgZG8gYSBzb3J0IGlmIHRoZXJlIGFyZSBubyBwcmVzb3J0ZWQga2V5cyBhbmQgYW4KKwkJCQkg KiBpbmNyZW1lbnRhbCBzb3J0IHdoZW4gdGhlcmUgYXJlIHByZXNvcnRlZCBrZXlzLgorCQkJCSAq LworCQkJCWlmIChwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29y dCkKKwkJCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJ CQkJCQkgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJIGFn Z19pbmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJZWxzZQor CQkJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAor CQkJCQkJCQkJCQkJCQkJCSByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJ CQkJCQkJCQkJCQkJCQkgYWdnX2luZm8tPmdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJ CSBwcmVzb3J0ZWRfa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQl9CisKKwkJCS8q CisJCQkgKiBxdWFsIGlzIE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBl dmFsdWF0ZWQgdW50aWwgdGhlCisJCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlz IGtub3duLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3Qs CisJCQkJCQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlh Z2dfaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dT UExJVF9JTklUSUFMX1NFUklBTCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMs CisJCQkJCQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51 bVBhcnRpYWxHcm91cHMpOworCisJCQlhZGRfcGFydGlhbF9wYXRoKHJlbF9ncm91cGVkLCBwYXRo KTsKKwkJfQorCX0KKworCS8qCisJICogQWRkIGEgcGFydGlhbGx5LWdyb3VwZWQgSGFzaEFnZyBQ YXRoIHdoZXJlIHBvc3NpYmxlCisJICovCisJaWYgKGNhbl9oYXNoICYmIGNoZWFwZXN0X3RvdGFs X3BhdGggIT0gTlVMTCkKKwl7CisJCVBhdGggICAqcGF0aDsKKworCQkvKgorCQkgKiBTaW5jZSB0 aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20gdGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNoIGlz CisJCSAqIG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBlbnN1cmUgdGhh dCBpdCBwcm92aWRlcworCQkgKiB0aGUgY29ycmVjdCBpbnB1dCBmb3IgdGhlIHBhcnRpYWwgYWdn cmVnYXRpb24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0 aChyb290LAorCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBl c3RfdG90YWxfcGF0aCwKKwkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJ LyoKKwkJICogcXVhbCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUg ZXZhbHVhdGVkIHVudGlsCisJCSAqIHRoZSBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlz IGtub3duLgorCQkgKi8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAor CQkJCQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJCQkJYWdnX2lu Zm8tPnRhcmdldCwKKwkJCQkJCQkJCQlBR0dfSEFTSEVELAorCQkJCQkJCQkJCUFHR1NQTElUX0lO SVRJQUxfU0VSSUFMLAorCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJ CQkJCU5JTCwKKwkJCQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCWROdW1Hcm91cHMpOwor CisJCWFkZF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhZGQg YSBwYXJ0aWFsbHktZ3JvdXBlZCBIYXNoQWdnIHBhcnRpYWwgUGF0aCB3aGVyZSBwb3NzaWJsZQor CSAqLworCWlmIChjYW5faGFzaCAmJiBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7 CisJCVBhdGggICAqcGF0aDsKKworCQkvKgorCQkgKiBTaW5jZSB0aGUgcGF0aCBvcmlnaW5hdGVz IGZyb20gdGhlIG5vbi1ncm91cGVkIHJlbGF0aW9uIHdoaWNoIGlzCisJCSAqIG5vdCBhd2FyZSBv ZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBlbnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkg KiB0aGUgY29ycmVjdCBpbnB1dCBmb3IgdGhlIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCSAqLwor CQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJ CQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfcGFydGlhbF9wYXRoLAor CQkJCQkJCQkJCQkgICBhZ2dfaW5mby0+YWdnX2lucHV0KTsKKworCQkvKgorCQkgKiBxdWFsIGlz IE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwK KwkJICogdGhlIGZpbmFsIHZhbHVlIG9mIHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCSAqLwor CQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJcmVsX2dy b3VwZWQsCisJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJ CQkJCQkJCUFHR19IQVNIRUQsCisJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCisJ CQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJTklMLAorCQkJCQkJ CQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJCQkJZE51bVBhcnRpYWxHcm91cHMpOworCisJCWFkZF9w YXJ0aWFsX3BhdGgocmVsX2dyb3VwZWQsIHBhdGgpOworCX0KK30KKwogLyoKICAqIG1ha2VfcmVs X2Zyb21fam9pbmxpc3QKICAqCSAgQnVpbGQgYWNjZXNzIHBhdGhzIHVzaW5nIGEgImpvaW5saXN0 IiB0byBndWlkZSB0aGUgam9pbiBwYXRoIHNlYXJjaC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCmluZGV4IDZmNzliMmUzZmUuLmVlNDU1ZjdlYzIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtMjY5OSw4ICsyNjk5LDcgQEAgY3JlYXRlX3Byb2plY3Rp b25fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRf UmVzdWx0OwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5w YXRodGFyZ2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55 IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1f aW5mbyA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFt X2luZm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9k ZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJw YXRoLT5wYXJhbGxlbF9zYWZlICYmCkBAIC0yOTUyLDggKzI5NTEsNyBAQCBjcmVhdGVfaW5jcmVt ZW50YWxfc29ydF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5wYXRoLnBhcmVu dCA9IHJlbDsKIAkvKiBTb3J0IGRvZXNuJ3QgcHJvamVjdCwgc28gdXNlIHNvdXJjZSBwYXRoJ3Mg cGF0aHRhcmdldCAqLwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSBzdWJwYXRoLT5wYXRo dGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5zLCBzbyBu byBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IE5VTEw7 CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2luZm87CiAJcGF0 aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0aC5wYXJh bGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRoLT5wYXJhbGxl bF9zYWZlOwpAQCAtMjk5OSw4ICsyOTk3LDcgQEAgY3JlYXRlX3NvcnRfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJLyogU29ydCBkb2Vzbid0 IHByb2plY3QsIHNvIHVzZSBzb3VyY2UgcGF0aCdzIHBhdGh0YXJnZXQgKi8KIAlwYXRobm9kZS0+ cGF0aC5wYXRodGFyZ2V0ID0gc3VicGF0aC0+cGF0aHRhcmdldDsKLQkvKiBGb3Igbm93LCBhc3N1 bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8gcGFyYW1ldGVyaXphdGlvbiAqLwotCXBh dGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOworCXBhdGhub2RlLT5wYXRoLnBhcmFtX2lu Zm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhub2RlLT5wYXRoLnBhcmFsbGVsX2F3YXJl ID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfc2FmZSA9IHJlbC0+Y29uc2lkZXJf cGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxfc2FmZTsKQEAgLTMxNTgsOCArMzE1NSw3 IEBAIGNyZWF0ZV9hZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5w YXRodHlwZSA9IFRfQWdnOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9k ZS0+cGF0aC5wYXRodGFyZ2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUg YWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBh dGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBh dGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsK IAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAm JgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZlOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCBkY2Vh MTA4ODhiLi42OGZjMDU0MzJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtNTgsNiArNTgsMTAg QEAgZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfZ2F0aGVyX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCSAgYm9vbCBvdmVycmlkZV9yb3dzKTsKIGV4dGVybiB2 b2lkIGdlbmVyYXRlX3VzZWZ1bF9nYXRoZXJfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCQkJCQkJCQkgYm9vbCBvdmVycmlkZV9yb3dzKTsKK2V4dGVybiB2b2lk IGdlbmVyYXRlX2dyb3VwZWRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgIFJl bE9wdEluZm8gKnJlbF9ncm91cGVkLAorCQkJCQkJCQkgICBSZWxPcHRJbmZvICpyZWxfcGxhaW4s CisJCQkJCQkJCSAgIFJlbEFnZ0luZm8gKmFnZ19pbmZvKTsKIGV4dGVybiBpbnQJY29tcHV0ZV9w YXJhbGxlbF93b3JrZXIoUmVsT3B0SW5mbyAqcmVsLCBkb3VibGUgaGVhcF9wYWdlcywKIAkJCQkJ CQkJCWRvdWJsZSBpbmRleF9wYWdlcywgaW50IG1heF93b3JrZXJzKTsKIGV4dGVybiB2b2lkIGNy ZWF0ZV9wYXJ0aWFsX2JpdG1hcF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAotLSAKMi4zMS4wCgo= --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0004-Implement-functions-that-create-RelAggInfos-if-applicable.patch" Content-Disposition: attachment; filename="v1-0004-Implement-functions-that-create-RelAggInfos-if-applicable.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7rw3 RnJvbSBhNzY1ODM3NmViMTQ2MTEzMjYyNzgyNWY0ZGVhYmI3M2E0ZTUzZDFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMToyNzo0OSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg NC85XSBJbXBsZW1lbnQgZnVuY3Rpb25zIHRoYXQgY3JlYXRlIFJlbEFnZ0luZm9zIGlmCiBhcHBs aWNhYmxlCgpUaGlzIGNvbW1pdCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgdGhhdCBjaGVjayBp ZiBlYWdlciBhZ2dyZWdhdGlvbiBpcwphcHBsaWNhYmxlIGZvciBhIGdpdmVuIHJlbGF0aW9uLCBh bmQgaWYgc28sIGNyZWF0ZSBSZWxBZ2dJbmZvIHN0cnVjdHVyZQpmb3IgdGhlIHJlbGF0aW9uLCB1 c2luZyB0aGUgaW5mb3MgYWJvdXQgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZApncm91cGluZyBl eHByZXNzaW9ucyB3ZSBjb2xsZWN0ZWQgZWFybGllci4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9lcXVpdmNsYXNzLmMgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5tYWluLmMgICB8ICAgMyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMgICAgfCA2MjQgKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYyAgICAgICAgfCAgIDUgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAg ICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgIHwg ICAzICstCiA3IGZpbGVzIGNoYW5nZWQsIDY2MiBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMKaW5kZXggNGJkNjBhMDlj Ni4uMTg5MGRiYjg1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1 aXZjbGFzcy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwpA QCAtMjQzOSwxNSArMjQzOSwxNyBAQCBmaW5kX2pvaW5fZG9tYWluKFBsYW5uZXJJbmZvICpyb290 LCBSZWxpZHMgcmVsaWRzKQogICoJICBEZXRlY3Qgd2hldGhlciB0d28gZXhwcmVzc2lvbnMgYXJl IGtub3duIGVxdWFsIGR1ZSB0byBlcXVpdmFsZW5jZQogICoJICByZWxhdGlvbnNoaXBzLgogICoK LSAqIEFjdHVhbGx5LCB0aGlzIG9ubHkgc2hvd3MgdGhhdCB0aGUgZXhwcmVzc2lvbnMgYXJlIGVx dWFsIGFjY29yZGluZwotICogdG8gc29tZSBvcGZhbWlseSdzIG5vdGlvbiBvZiBlcXVhbGl0eSAt LS0gYnV0IHdlIG9ubHkgdXNlIGl0IGZvcgotICogc2VsZWN0aXZpdHkgZXN0aW1hdGlvbiwgc28g YSBmdXp6eSBpZGVhIG9mIGVxdWFsaXR5IGlzIE9LLgorICogSWYgb3BmYW1pbHkgaXMgZ2l2ZW4s IHRoZSBleHByZXNzaW9ucyBtdXN0IGJlIGtub3duIGVxdWFsIHBlciB0aGUgc2VtYW50aWNzCisg KiBvZiB0aGF0IG9wZmFtaWx5IChub3RlIGl0IGhhcyB0byBiZSBhIGJ0cmVlIG9wZmFtaWx5LCBz aW5jZSB0aG9zZSBhcmUgdGhlCisgKiBvbmx5IG9wZmFtaWxpZXMgZXF1aXZjbGFzcy5jIGRlYWxz IHdpdGgpLiAgSWYgb3BmYW1pbHkgaXMgSW52YWxpZE9pZCwgd2UnbGwKKyAqIHJldHVybiB0cnVl IGlmIHRoZXkncmUgZXF1YWwgYWNjb3JkaW5nIHRvIGFueSBvcGZhbWlseSwgd2hpY2ggaXMgZnV6 enkgYnV0CisgKiBPSyBmb3IgZXN0aW1hdGlvbiBwdXJwb3Nlcy4KICAqCiAgKiBOb3RlOiBkb2Vz IG5vdCBib3RoZXIgdG8gY2hlY2sgZm9yICJlcXVhbChpdGVtMSwgaXRlbTIpIjsgY2FsbGVyIG11 c3QKICAqIGNoZWNrIHRoYXQgY2FzZSBpZiBpdCdzIHBvc3NpYmxlIHRvIHBhc3MgaWRlbnRpY2Fs IGl0ZW1zLgogICovCiBib29sCi1leHByc19rbm93bl9lcXVhbChQbGFubmVySW5mbyAqcm9vdCwg Tm9kZSAqaXRlbTEsIE5vZGUgKml0ZW0yKQorZXhwcnNfa25vd25fZXF1YWwoUGxhbm5lckluZm8g KnJvb3QsIE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMiwgT2lkIG9wZmFtaWx5KQogewogCUxpc3RD ZWxsICAgKmxjMTsKIApAQCAtMjQ2Miw2ICsyNDY0LDE3IEBAIGV4cHJzX2tub3duX2VxdWFsKFBs YW5uZXJJbmZvICpyb290LCBOb2RlICppdGVtMSwgTm9kZSAqaXRlbTIpCiAJCWlmIChlYy0+ZWNf aGFzX3ZvbGF0aWxlKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogSXQncyBva2F5IHRvIGNv bnNpZGVyIGVjX2Jyb2tlbiBFQ3MgaGVyZS4gIEJyb2tlbm5lc3MganVzdCBtZWFucyB3ZQorCQkg KiBjb3VsZG4ndCBkZXJpdmUgYWxsIHRoZSBpbXBsaWVkIGNsYXVzZXMgd2UnZCBoYXZlIGxpa2Vk IHRvOyBpdCBkb2VzCisJCSAqIG5vdCBpbnZhbGlkYXRlIG91ciBrbm93bGVkZ2UgdGhhdCB0aGUg bWVtYmVycyBhcmUgZXF1YWwuCisJCSAqLworCisJCS8qIElnbm9yZSBpZiB0aGlzIEVDIGRvZXNu J3QgdXNlIHNwZWNpZmllZCBvcGZhbWlseSAqLworCQlpZiAoT2lkSXNWYWxpZChvcGZhbWlseSkg JiYKKwkJCSFsaXN0X21lbWJlcl9vaWQoZWMtPmVjX29wZmFtaWxpZXMsIG9wZmFtaWx5KSkKKwkJ CWNvbnRpbnVlOworCiAJCWZvcmVhY2gobGMyLCBlYy0+ZWNfbWVtYmVycykKIAkJewogCQkJRXF1 aXZhbGVuY2VNZW1iZXIgKmVtID0gKEVxdWl2YWxlbmNlTWVtYmVyICopIGxmaXJzdChsYzIpOwpA QCAtMjQ5MCw4ICsyNTAzLDcgQEAgZXhwcnNfa25vd25fZXF1YWwoUGxhbm5lckluZm8gKnJvb3Qs IE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMikKICAqIChJbiBwcmluY2lwbGUgdGhlcmUgbWlnaHQg YmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyBlY2xhc3MgaWYgbXVsdGlwbGUKICAqIGNvbGxhdGlv bnMgYXJlIGludm9sdmVkLCBidXQgc2luY2UgY29sbGF0aW9uIGRvZXNuJ3QgbWF0dGVyIGZvciBl cXVhbGl0eSwKICAqIHdlIGlnbm9yZSB0aGF0IGZpbmUgcG9pbnQgaGVyZS4pICBUaGlzIGlzIG11 Y2ggbGlrZSBleHByc19rbm93bl9lcXVhbCwKLSAqIGV4Y2VwdCB0aGF0IHdlIGluc2lzdCBvbiB0 aGUgY29tcGFyaXNvbiBvcGVyYXRvciBtYXRjaGluZyB0aGUgZWNsYXNzLCBzbwotICogdGhhdCB0 aGUgcmVzdWx0IGlzIGRlZmluaXRlIG5vdCBhcHByb3hpbWF0ZS4KKyAqIGV4Y2VwdCBmb3IgdGhl IGZvcm1hdCBvZiB0aGUgaW5wdXQuCiAgKgogICogT24gc3VjY2Vzcywgd2UgYWxzbyBzZXQgZmtp bmZvLT5lY2xhc3NbY29sbm9dIHRvIHRoZSBtYXRjaGluZyBlY2xhc3MsCiAgKiBhbmQgc2V0IGZr aW5mby0+ZmtfZWNsYXNzX21lbWJlcltjb2xub10gdG8gdGhlIGVjbGFzcyBtZW1iZXIgZm9yIHRo ZQpAQCAtMjUzMiw3ICsyNTQ0LDcgQEAgbWF0Y2hfZWNsYXNzZXNfdG9fZm9yZWlnbl9rZXlfY29s KFBsYW5uZXJJbmZvICpyb290LAogCQkvKiBOZXZlciBtYXRjaCB0byBhIHZvbGF0aWxlIEVDICov CiAJCWlmIChlYy0+ZWNfaGFzX3ZvbGF0aWxlKQogCQkJY29udGludWU7Ci0JCS8qIE5vdGU6IGl0 IHNlZW1zIG9rYXkgdG8gbWF0Y2ggdG8gImJyb2tlbiIgZWNsYXNzZXMgaGVyZSAqLworCQkvKiBJ dCdzIG9rYXkgdG8gY29uc2lkZXIgImJyb2tlbiIgRUNzIGhlcmUsIHNlZSBleHByc19rbm93bl9l cXVhbCAqLwogCiAJCWZvcmVhY2gobGMyLCBlYy0+ZWNfbWVtYmVycykKIAkJewpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggOGI4ZGVmMjFjYS4uZGI2NmEzZTE4OSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC02OCw2ICs2OCw5IEBAIHF1ZXJ5 X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJcm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VO b2RlKFJlbEluZm9MaXN0KTsKIAlyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKIAly b290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gTlVMTDsKKwlyb290LT5hZ2dfaW5mb19saXN0ID0g bWFrZU5vZGUoUmVsSW5mb0xpc3QpOworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPml0ZW1zID0gTklM OworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPmhhc2ggPSBOVUxMOwogCXJvb3QtPmpvaW5fcmVsX2xl dmVsID0gTlVMTDsKIAlyb290LT5qb2luX2N1cl9sZXZlbCA9IDA7CiAJcm9vdC0+Y2Fub25fcGF0 aGtleXMgPSBOSUw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxu b2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggYzg4ZGE5 NjNkYi4uZTdmNDY1ZWY3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAt ODcsNiArODcsMTQgQEAgc3RhdGljIHZvaWQgYnVpbGRfY2hpbGRfam9pbl9yZWx0YXJnZXQoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpjaGlsZHJlbCwKIAkJCQkJ CQkJCSAgIGludCBuYXBwaW5mb3MsCiAJCQkJCQkJCQkgICBBcHBlbmRSZWxJbmZvICoqYXBwaW5m b3MpOworc3RhdGljIGJvb2wgZWFnZXJfYWdncmVnYXRpb25fcG9zc2libGVfZm9yX3JlbGF0aW9u KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCk7CitzdGF0 aWMgYm9vbCBpbml0X2dyb3VwaW5nX3RhcmdldHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKKwkJCQkJCQkJICBQYXRoVGFyZ2V0ICp0YXJnZXQsIFBhdGhUYXJnZXQgKmFnZ19p bnB1dCwKKwkJCQkJCQkJICBMaXN0ICoqZ3JvdXBfZXhwcnNfZXh0cmFfcCk7CitzdGF0aWMgYm9v bCBpc192YXJfaW5fYWdncmVmX29ubHkoUGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFyKTsKK3N0 YXRpYyBib29sIGlzX3Zhcl9uZWVkZWRfYnlfam9pbihQbGFubmVySW5mbyAqcm9vdCwgVmFyICp2 YXIsIFJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgSW5kZXggZ2V0X2V4cHJlc3Npb25fc29ydGdy b3VwcmVmKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKTsKIAogCiAvKgpAQCAtNjQwLDYg KzY0OCw1OCBAQCBhZGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpv aW5yZWwpCiAJYWRkX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3QsIGpvaW5yZWwpOwogfQog CisvKgorICogYWRkX2dyb3VwZWRfcmVsCisgKgkJQWRkIGdyb3VwZWQgYmFzZSBvciBqb2luIHJl bGF0aW9uIHRvIHRoZSBsaXN0IG9mIGdyb3VwZWQgcmVsYXRpb25zIGluCisgKgkJdGhlIGdpdmVu IFBsYW5uZXJJbmZvLiAgQWxzbyBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgUmVsQWdnSW5mbyB0bwor ICoJCXJvb3QtPmFnZ19pbmZvX2xpc3QuCisgKi8KK3ZvaWQKK2FkZF9ncm91cGVkX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBSZWxBZ2dJbmZvICphZ2dfaW5mbykKK3sK KwlhZGRfcmVsX2luZm8oJnJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9B R0ddLCByZWwpOworCWFkZF9yZWxfaW5mbyhyb290LT5hZ2dfaW5mb19saXN0LCBhZ2dfaW5mbyk7 Cit9CisKKy8qCisgKiBmaW5kX2dyb3VwZWRfcmVsCisgKgkgIFJldHVybnMgZ3JvdXBlZCByZWxh dGlvbiBlbnRyeSAoYmFzZSBvciBqb2luIHJlbGF0aW9uKSBjb3JyZXNwb25kaW5nIHRvCisgKgkg ICdyZWxpZHMnIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuCisgKgorICogSWYgYWdnX2luZm9fcCBp cyBub3QgTlVMTCwgdGhlbiBhbHNvIHRoZSBjb3JyZXNwb25kaW5nIFJlbEFnZ0luZm8gKGlmIG9u ZQorICogZXhpc3RzKSB3aWxsIGJlIHJldHVybmVkIGluICphZ2dfaW5mb19wLgorICovCitSZWxP cHRJbmZvICoKK2ZpbmRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxp ZHMsIFJlbEFnZ0luZm8gKiphZ2dfaW5mb19wKQoreworCVJlbE9wdEluZm8gKnJlbDsKKworCXJl bCA9IChSZWxPcHRJbmZvICopIGZpbmRfcmVsX2luZm8oJnJvb3QtPnVwcGVyX3JlbHNbVVBQRVJS RUxfUEFSVElBTF9HUk9VUF9BR0ddLAorCQkJCQkJCQkJICAgcmVsaWRzKTsKKwlpZiAocmVsID09 IE5VTEwpCisJeworCQlpZiAoYWdnX2luZm9fcCkKKwkJCSphZ2dfaW5mb19wID0gTlVMTDsKKwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBhbHNvIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBS ZWxBZ2dJbmZvLCBpZiBhc2tlZCAqLworCWlmIChhZ2dfaW5mb19wKQorCXsKKwkJUmVsQWdnSW5m byAqYWdnX2luZm87CisKKwkJYWdnX2luZm8gPSAoUmVsQWdnSW5mbyAqKSBmaW5kX3JlbF9pbmZv KHJvb3QtPmFnZ19pbmZvX2xpc3QsIHJlbGlkcyk7CisKKwkJLyogVGhlIHJlbGF0aW9uIGV4aXN0 cywgc28gdGhlIGFnZ19pbmZvIHNob3VsZCBiZSB0aGVyZSB0b28uICovCisJCUFzc2VydChhZ2df aW5mbyAhPSBOVUxMKTsKKworCQkqYWdnX2luZm9fcCA9IGFnZ19pbmZvOworCX0KKworCXJldHVy biByZWw7Cit9CisKIC8qCiAgKiBzZXRfZm9yZWlnbl9yZWxfcHJvcGVydGllcwogICoJCVNldCB1 cCBmb3JlaWduLWpvaW4gZmllbGRzIGlmIG91dGVyIGFuZCBpbm5lciByZWxhdGlvbiBhcmUgZm9y ZWlnbgpAQCAtMjQ2NCwzICsyNTI0LDU2NyBAQCBidWlsZF9jaGlsZF9qb2luX3JlbHRhcmdldChQ bGFubmVySW5mbyAqcm9vdCwKIAljaGlsZHJlbC0+cmVsdGFyZ2V0LT5jb3N0LnBlcl90dXBsZSA9 IHBhcmVudHJlbC0+cmVsdGFyZ2V0LT5jb3N0LnBlcl90dXBsZTsKIAljaGlsZHJlbC0+cmVsdGFy Z2V0LT53aWR0aCA9IHBhcmVudHJlbC0+cmVsdGFyZ2V0LT53aWR0aDsKIH0KKworLyoKKyAqIGNy ZWF0ZV9yZWxfYWdnX2luZm8KKyAqCSAgQ2hlY2sgaWYgdGhlIGdpdmVuIHJlbGF0aW9uIGNhbiBw cm9kdWNlIGdyb3VwZWQgcGF0aHMgYW5kIHJldHVybiB0aGUKKyAqCSAgaW5mb3JtYXRpb24gaXQn bGwgbmVlZCBmb3IgaXQuICBUaGUgZ2l2ZW4gcmVsYXRpb24gaXMgdGhlIG5vbi1ncm91cGVkIG9u ZQorICoJICB3aGljaCBoYXMgdGhlIHJlbHRhcmdldCBhbHJlYWR5IGNvbnN0cnVjdGVkLgorICov CitSZWxBZ2dJbmZvICoKK2NyZWF0ZV9yZWxfYWdnX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlSZWxBZ2dJbmZvICpyZXN1bHQ7 CisJUGF0aFRhcmdldCAqYWdnX2lucHV0OworCVBhdGhUYXJnZXQgKnRhcmdldDsKKwlMaXN0CSAg ICpncnBfZXhwcnNfZXh0cmEgPSBOSUw7CisJTGlzdAkgICAqZ3JvdXBfY2xhdXNlc19maW5hbDsK KwlpbnQJCQlpOworCisJLyoKKwkgKiBUaGUgbGlzdHMgb2YgYWdncmVnYXRlIGV4cHJlc3Npb25z IGFuZCBncm91cGluZyBleHByZXNzaW9ucyBzaG91bGQgaGF2ZQorCSAqIGJlZW4gY29uc3RydWN0 ZWQuCisJICovCisJQXNzZXJ0KHJvb3QtPmFnZ19jbGF1c2VfbGlzdCAhPSBOSUwpOworCUFzc2Vy dChyb290LT5ncm91cF9leHByX2xpc3QgIT0gTklMKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBh IGNoaWxkIHJlbCwgdGhlIGdyb3VwZWQgcmVsIGZvciBpdHMgcGFyZW50IHJlbCBtdXN0IGhhdmUK KwkgKiBiZWVuIGNyZWF0ZWQgaWYgaXQgY2FuLiAgU28gd2UgY2FuIGp1c3QgdXNlIHBhcmVudCdz IFJlbEFnZ0luZm8gaWYgdGhlcmUKKwkgKiBpcyBvbmUsIHdpdGggYXBwcm9wcmlhdGUgdmFyaWFi bGUgc3Vic3RpdHV0aW9ucy4KKwkgKi8KKwlpZiAoSVNfT1RIRVJfUkVMKHJlbCkpCisJeworCQlS ZWxPcHRJbmZvCSAgICpyZWxfZ3JvdXBlZDsKKwkJUmVsQWdnSW5mbwkgICAqYWdnX2luZm87CisJ CVJlbGlkcwkJCXBhcmVudF9yZWxpZHMgPSBOVUxMOworCQlBcHBlbmRSZWxJbmZvICoqYXBwaW5m b3M7CisJCWludAkJCQluYXBwaW5mb3M7CisJCWludAkJCQljbnQ7CisKKwkJYXBwaW5mb3MgPSBm aW5kX2FwcGluZm9zX2J5X3JlbGlkcyhyb290LCByZWwtPnJlbGlkcywgJm5hcHBpbmZvcyk7CisK KwkJZm9yIChjbnQgPSAwOyBjbnQgPCBuYXBwaW5mb3M7IGNudCsrKQorCQkJcGFyZW50X3JlbGlk cyA9IGJtc19hZGRfbWVtYmVyKHBhcmVudF9yZWxpZHMsCisJCQkJCQkJCQkJICAgYXBwaW5mb3Nb Y250XS0+cGFyZW50X3JlbGlkKTsKKworCQlBc3NlcnQoIWJtc19pc19lbXB0eShwYXJlbnRfcmVs aWRzKSk7CisJCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCBwYXJlbnRfcmVs aWRzLCAmYWdnX2luZm8pOworCisJCWlmIChyZWxfZ3JvdXBlZCA9PSBOVUxMKQorCQkJcmV0dXJu IE5VTEw7CisKKwkJQXNzZXJ0KGFnZ19pbmZvICE9IE5VTEwpOworCisJCWFnZ19pbmZvID0gKFJl bEFnZ0luZm8gKikgYWRqdXN0X2FwcGVuZHJlbF9hdHRycyhyb290LAorCQkJCQkJCQkJCQkJCQkg KE5vZGUgKikgYWdnX2luZm8sCisJCQkJCQkJCQkJCQkJCSBuYXBwaW5mb3MsCisJCQkJCQkJCQkJ CQkJCSBhcHBpbmZvcyk7CisKKwkJcGZyZWUoYXBwaW5mb3MpOworCisJCWFnZ19pbmZvLT5pbnB1 dF9yb3dzID0gcmVsLT5yb3dzOworCQlhZ2dfaW5mby0+Z3JvdXBlZF9yb3dzID0KKwkJCWVzdGlt YXRlX251bV9ncm91cHMocm9vdCwgYWdnX2luZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQlhZ2df aW5mby0+aW5wdXRfcm93cywgTlVMTCwgTlVMTCk7CisKKwkJcmV0dXJuIGFnZ19pbmZvOworCX0K KworCS8qIENoZWNrIGlmIGl0J3MgcG9zc2libGUgdG8gcHJvZHVjZSBncm91cGVkIHBhdGhzIGZv ciB0aGlzIHJlbGF0aW9uLiAqLworCWlmICghZWFnZXJfYWdncmVnYXRpb25fcG9zc2libGVfZm9y X3JlbGF0aW9uKHJvb3QsIHJlbCkpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBDcmVhdGUg dGFyZ2V0cyBmb3IgdGhlIGdyb3VwZWQgcGF0aHMgYW5kIGZvciB0aGUgaW5wdXQgcGF0aHMgb2Yg dGhlCisJICogZ3JvdXBlZCBwYXRocy4KKwkgKi8KKwl0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0 aHRhcmdldCgpOworCWFnZ19pbnB1dCA9IGNyZWF0ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CisKKwkv KiBpbml0aWFsaXplICd0YXJnZXQnIGFuZCAnYWdnX2lucHV0JyAqLworCWlmICghaW5pdF9ncm91 cGluZ190YXJnZXRzKHJvb3QsIHJlbCwgdGFyZ2V0LCBhZ2dfaW5wdXQsICZncnBfZXhwcnNfZXh0 cmEpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEVhZ2VyIGFnZ3JlZ2F0aW9uIG1ha2VzIG5vIHNl bnNlIHcvbyBncm91cGluZyBleHByZXNzaW9ucyAqLworCWlmICgobGlzdF9sZW5ndGgodGFyZ2V0 LT5leHBycykgKyBsaXN0X2xlbmd0aChncnBfZXhwcnNfZXh0cmEpKSA9PSAwKQorCQlyZXR1cm4g TlVMTDsKKworCWdyb3VwX2NsYXVzZXNfZmluYWwgPSByb290LT5wYXJzZS0+Z3JvdXBDbGF1c2U7 CisKKwkvKgorCSAqIElmIHRoZSBhZ2dyZWdhdGlvbiB0YXJnZXQgc2hvdWxkIGhhdmUgZXh0cmEg Z3JvdXBpbmcgZXhwcmVzc2lvbnMgKGluCisJICogb3JkZXIgdG8gZW1pdCBpbnB1dCB2YXJzIGZv ciBqb2luIGNvbmRpdGlvbnMpLCBhZGQgdGhlbSBub3cuIFRoaXMgc3RlcAorCSAqIGluY2x1ZGVz IGFzc2lnbm1lbnQgb2YgdGxlU29ydEdyb3VwUmVmJ3Mgd2hpY2ggd2UgY2FuIGdlbmVyYXRlIG5v dy4KKwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoZ3JwX2V4cHJzX2V4dHJhKSA+IDApCisJeworCQlJ bmRleAkJc29ydGdyb3VwcmVmOworCisJCS8qCisJCSAqIE1ha2UgYSBjb3B5IG9mIHRoZSBncm91 cCBjbGF1c2VzIGFzIHdlJ2xsIG5lZWQgdG8gYWRkIHNvbWUgbW9yZQorCQkgKiBjbGF1c2VzLgor CQkgKi8KKwkJZ3JvdXBfY2xhdXNlc19maW5hbCA9IGxpc3RfY29weShncm91cF9jbGF1c2VzX2Zp bmFsKTsKKworCQkvKiBmaW5kIG91dCB0aGUgY3VycmVudCBtYXggc29ydGdyb3VwcmVmICovCisJ CXNvcnRncm91cHJlZiA9IDA7CisJCWZvcmVhY2gobGMsIHJvb3QtPnByb2Nlc3NlZF90bGlzdCkK KwkJeworCQkJSW5kZXgJCXJlZiA9ICgoVGFyZ2V0RW50cnkgKikgbGZpcnN0KGxjKSktPnJlc3Nv cnRncm91cHJlZjsKKworCQkJaWYgKHJlZiA+IHNvcnRncm91cHJlZikKKwkJCQlzb3J0Z3JvdXBy ZWYgPSByZWY7CisJCX0KKworCQkvKgorCQkgKiBHZW5lcmF0ZSB0aGUgU29ydEdyb3VwQ2xhdXNl J3MgYW5kIGFkZCB0aGUgZXhwcmVzc2lvbnMgdG8gdGhlCisJCSAqIHRhcmdldC4KKwkJICovCisJ CWZvcmVhY2gobGMsIGdycF9leHByc19leHRyYSkKKwkJeworCQkJVmFyCQkgICAqdmFyID0gbGZp cnN0X25vZGUoVmFyLCBsYyk7CisJCQlTb3J0R3JvdXBDbGF1c2UgKmNsID0gbWFrZU5vZGUoU29y dEdyb3VwQ2xhdXNlKTsKKworCQkJLyoKKwkJCSAqIEluaXRpYWxpemUgdGhlIFNvcnRHcm91cENs YXVzZS4KKwkJCSAqCisJCQkgKiBBcyB0aGUgZmluYWwgYWdncmVnYXRpb24gd2lsbCBub3QgdXNl IHRoaXMgZ3JvdXBpbmcgZXhwcmVzc2lvbiwKKwkJCSAqIHdlIGRvbid0IGNhcmUgd2hldGhlciBz b3J0b3AgaXMgPCBvciA+LiBUaGUgdmFsdWUgb2YgbnVsbHNfZmlyc3QKKwkJCSAqIHNob3VsZCBu b3QgbWF0dGVyIGZvciB0aGUgc2FtZSByZWFzb24uCisJCQkgKi8KKwkJCWNsLT50bGVTb3J0R3Jv dXBSZWYgPSArK3NvcnRncm91cHJlZjsKKwkJCWdldF9zb3J0X2dyb3VwX29wZXJhdG9ycyh2YXIt PnZhcnR5cGUsCisJCQkJCQkJCQkgZmFsc2UsIHRydWUsIGZhbHNlLAorCQkJCQkJCQkJICZjbC0+ c29ydG9wLCAmY2wtPmVxb3AsIE5VTEwsCisJCQkJCQkJCQkgJmNsLT5oYXNoYWJsZSk7CisJCQln cm91cF9jbGF1c2VzX2ZpbmFsID0gbGFwcGVuZChncm91cF9jbGF1c2VzX2ZpbmFsLCBjbCk7CisJ CQlhZGRfY29sdW1uX3RvX3BhdGh0YXJnZXQodGFyZ2V0LCAoRXhwciAqKSB2YXIsCisJCQkJCQkJ CQkgY2wtPnRsZVNvcnRHcm91cFJlZik7CisKKwkJCS8qCisJCQkgKiBUaGUgYWdncmVnYXRpb24g aW5wdXQgdGFyZ2V0IG11c3QgZW1pdCB0aGlzIHZhciB0b28uCisJCQkgKi8KKwkJCWFkZF9jb2x1 bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIChFeHByICopIHZhciwKKwkJCQkJCQkJCSBjbC0+ dGxlU29ydEdyb3VwUmVmKTsKKwkJfQorCX0KKworCS8qCisJICogQnVpbGQgYSBsaXN0IG9mIGdy b3VwaW5nIGV4cHJlc3Npb25zIGFuZCBhIGxpc3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKwkgKiBT b3J0R3JvdXBDbGF1c2VzLgorCSAqLworCWkgPSAwOworCXJlc3VsdCA9IG1ha2VOb2RlKFJlbEFn Z0luZm8pOworCWZvcmVhY2gobGMsIHRhcmdldC0+ZXhwcnMpCisJeworCQlJbmRleAkJc29ydGdy b3VwcmVmID0gMDsKKwkJU29ydEdyb3VwQ2xhdXNlICpjbDsKKwkJRXhwcgkgICAqdGV4cHI7CisK KwkJdGV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOworCisJCUFzc2VydChJc0EodGV4cHIsIFZh cikpOworCisJCXNvcnRncm91cHJlZiA9IHRhcmdldC0+c29ydGdyb3VwcmVmc1tpKytdOworCQlp ZiAoc29ydGdyb3VwcmVmID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBmaW5kIHRoZSBTb3J0 R3JvdXBDbGF1c2UgaW4gZ3JvdXBfY2xhdXNlc19maW5hbCAqLworCQljbCA9IGdldF9zb3J0Z3Jv dXByZWZfY2xhdXNlKHNvcnRncm91cHJlZiwgZ3JvdXBfY2xhdXNlc19maW5hbCk7CisKKwkJLyog ZG8gbm90IGFkZCB0aGlzIFNvcnRHcm91cENsYXVzZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFk ZGVkICovCisJCWlmIChsaXN0X21lbWJlcihyZXN1bHQtPmdyb3VwX2NsYXVzZXMsIGNsKSkKKwkJ CWNvbnRpbnVlOworCisJCXJlc3VsdC0+Z3JvdXBfY2xhdXNlcyA9IGxhcHBlbmQocmVzdWx0LT5n cm91cF9jbGF1c2VzLCBjbCk7CisJCXJlc3VsdC0+Z3JvdXBfZXhwcnMgPSBsaXN0X2FwcGVuZF91 bmlxdWUocmVzdWx0LT5ncm91cF9leHBycywKKwkJCQkJCQkJCQkJCSB0ZXhwcik7CisJfQorCisJ LyoKKwkgKiBDYWxjdWxhdGUgcGF0aGtleXMgdGhhdCByZXByZXNlbnQgdGhpcyBncm91cGluZyBy ZXF1aXJlbWVudHMuCisJICovCisJcmVzdWx0LT5ncm91cF9wYXRoa2V5cyA9CisJCW1ha2VfcGF0 aGtleXNfZm9yX3NvcnRjbGF1c2VzKHJvb3QsIHJlc3VsdC0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJ CQkJCSAgbWFrZV90bGlzdF9mcm9tX3BhdGh0YXJnZXQodGFyZ2V0KSk7CisKKwkvKgorCSAqIEFk ZCBhZ2dyZWdhdGVzIHRvIHRoZSBncm91cGluZyB0YXJnZXQuCisJICovCisJZm9yZWFjaChsYywg cm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJQWdnQ2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxm aXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsKKwkJQWdncmVmICAgKmFnZ3JlZjsKKworCQlB c3NlcnQoSXNBKGFjX2luZm8tPmFnZ3JlZiwgQWdncmVmKSk7CisKKwkJYWdncmVmID0gKEFnZ3Jl ZiAqKSBjb3B5T2JqZWN0KGFjX2luZm8tPmFnZ3JlZik7CisJCW1hcmtfcGFydGlhbF9hZ2dyZWYo YWdncmVmLCBBR0dTUExJVF9JTklUSUFMX1NFUklBTCk7CisKKwkJYWRkX2NvbHVtbl90b19wYXRo dGFyZ2V0KHRhcmdldCwgKEV4cHIgKikgYWdncmVmLCAwKTsKKworCQlyZXN1bHQtPmFnZ19leHBy cyA9IGxhcHBlbmQocmVzdWx0LT5hZ2dfZXhwcnMsIGFnZ3JlZik7CisJfQorCisJLyoKKwkgKiBT aW5jZSBuZWl0aGVyIHRhcmdldCBub3IgYWdnX2lucHV0IGlzIHN1cHBvc2VkIHRvIGJlIGlkZW50 aWNhbCB0byB0aGUKKwkgKiBzb3VyY2UgcmVsdGFyZ2V0LCBjb21wdXRlIHRoZSB3aWR0aCBhbmQg Y29zdCBhZ2Fpbi4KKwkgKi8KKwlzZXRfcGF0aHRhcmdldF9jb3N0X3dpZHRoKHJvb3QsIHRhcmdl dCk7CisJc2V0X3BhdGh0YXJnZXRfY29zdF93aWR0aChyb290LCBhZ2dfaW5wdXQpOworCisJcmVz dWx0LT5yZWxpZHMgPSBibXNfY29weShyZWwtPnJlbGlkcyk7CisJcmVzdWx0LT50YXJnZXQgPSB0 YXJnZXQ7CisJcmVzdWx0LT5hZ2dfaW5wdXQgPSBhZ2dfaW5wdXQ7CisKKwkvKgorCSAqIFRoZSBu dW1iZXIgb2YgYWdncmVnYXRpb24gaW5wdXQgcm93cyBpcyBzaW1wbHkgdGhlIG51bWJlciBvZiBy b3dzIG9mIHRoZQorCSAqIG5vbi1ncm91cGVkIHJlbGF0aW9uLCB3aGljaCBzaG91bGQgaGF2ZSBi ZWVuIGVzdGltYXRlZCBieSBub3cuCisJICovCisJcmVzdWx0LT5pbnB1dF9yb3dzID0gcmVsLT5y b3dzOworCisJLyogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBncm91cHMgd2l0aCBlcXVhbCBncm91 cGVkIGV4cHJzLiAqLworCXJlc3VsdC0+Z3JvdXBlZF9yb3dzID0gZXN0aW1hdGVfbnVtX2dyb3Vw cyhyb290LCByZXN1bHQtPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCQkgICByZXN1bHQtPmlucHV0 X3Jvd3MsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIGVhZ2Vy X2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxhdGlvbgorICogCSAgQ2hlY2sgaWYgaXQncyBw b3NzaWJsZSB0byBwcm9kdWNlIGdyb3VwZWQgcGF0aHMgZm9yIHRoZSBnaXZlbiByZWxhdGlvbi4K KyAqLworc3RhdGljIGJvb2wKK2VhZ2VyX2FnZ3JlZ2F0aW9uX3Bvc3NpYmxlX2Zvcl9yZWxhdGlv bihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQoreworCUxpc3RDZWxsICAgKmxj OworCisJLyoKKwkgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBlYWdlciBhZ2dyZWdh dGlvbiBjYW5ub3QgaGFuZGxlCisJICogUGxhY2VIb2xkZXJWYXIgKFBIVikuCisJICoKKwkgKiBJ ZiB3ZSBrbmV3IHRoYXQgdGhlIFBIViBzaG91bGQgYmUgZXZhbHVhdGVkIGluIHRoaXMgdGFyZ2V0 IChhbmQgb2YKKwkgKiBjb3Vyc2UsIGlmIGl0cyBleHByZXNzaW9uIG1hdGNoZWQgc29tZSBBZ2dy ZWYgYXJndW1lbnQpLCB3ZSdkIGp1c3QgbGV0CisJICogaW5pdF9ncm91cGluZ190YXJnZXRzIGFk ZCB0aGF0IEFnZ3JlZi4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGtuZXcKKwkgKiB0aGF0IHRo ZSBQSFYgaXMgZXZhbHVhdGVkIGJlbG93IHRoZSBjdXJyZW50IHJlbCwgd2UgY291bGQgaWdub3Jl IGl0CisJICogYmVjYXVzZSB0aGUgcmVmZXJlbmNpbmcgQWdncmVmIHdvdWxkIHRha2UgY2FyZSBv ZiBwcm9wYWdhdGlvbiBvZiB0aGUKKwkgKiB2YWx1ZSB0byB1cHBlciBqb2lucy4KKwkgKgorCSAq IFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIHNhbWUgUEhWIGNhbiBiZSBldmFsdWF0ZWQgaW4gdGhl IHRhcmdldCBvZiB0aGUKKwkgKiBjdXJyZW50IHJlbCBvciBpbiB0aGF0IG9mIGxvd2VyIHJlbCAt LS0gZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBwYXRocy4KKwkgKiBGb3IgZXhhbXBsZSwgY29uc2lk ZXIgcmVsLT5yZWxpZHMgPSB7QSwgQiwgQ30gYW5kIGlmIHBoX2V2YWxfYXQgPSB7QiwKKwkgKiBD fS4gUGF0aCAiQSBKT0lOIChCIEpPSU4gQykiIGltcGxpZXMgdGhhdCB0aGUgUEhWIGlzIGV2YWx1 YXRlZCBieSB0aGUKKwkgKiAiKEIgSk9JTiBDKSIsIHdoaWxlIHBhdGggIihBIEpPSU4gQikgSk9J TiBDIiBldmFsdWF0ZXMgdGhlIFBIViBpdHNlbGYuCisJICovCisJZm9yZWFjaChsYywgcmVsLT5y ZWx0YXJnZXQtPmV4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9IGxmaXJzdChsYyk7CisKKwkJ aWYgKElzQShleHByLCBQbGFjZUhvbGRlclZhcikpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ aWYgKElTX1NJTVBMRV9SRUwocmVsKSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJvb3Qt PnNpbXBsZV9ydGVfYXJyYXlbcmVsLT5yZWxpZF07OworCisJCS8qCisJCSAqIHJ0ZWtpbmQgIT0g UlRFX1JFTEFUSU9OIGNhc2UgaXMgbm90IHN1cHBvcnRlZCB5ZXQuCisJCSAqLworCQlpZiAocnRl LT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBD YWxsZXIgc2hvdWxkIG9ubHkgcGFzcyBiYXNlIHJlbGF0aW9ucyBvciBqb2lucy4gKi8KKwlBc3Nl cnQocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMIHx8CisJCSAgIHJlbC0+cmVsb3B0 a2luZCA9PSBSRUxPUFRfSk9JTlJFTCk7CisKKwkvKgorCSAqIENoZWNrIGlmIGFsbCBhZ2dyZWdh dGUgZXhwcmVzc2lvbnMgY2FuIGJlIGV2YWx1YXRlZCBvbiB0aGlzIHJlbGF0aW9uCisJICogbGV2 ZWwuCisJICovCisJZm9yZWFjaChsYywgcm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJQWdn Q2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxmaXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsKKwor CQlBc3NlcnQoSXNBKGFjX2luZm8tPmFnZ3JlZiwgQWdncmVmKSk7CisKKwkJLyoKKwkJICogR2l2 ZSB1cCBpZiBhbnkgYWdncmVnYXRlIG5lZWRzIHJlbGF0aW9ucyBvdGhlciB0aGFuIHRoZSBjdXJy ZW50IG9uZS4KKwkJICoKKwkJICogSWYgdGhlIGFnZ3JlZ2F0ZSBuZWVkcyB0aGUgY3VycmVudCBy ZWwgcGx1cyBhbnl0aGluZyBlbHNlLCB0aGVuIHRoZQorCQkgKiBwcm9ibGVtIGlzIHRoYXQgZ3Jv dXBpbmcgb2YgdGhlIGN1cnJlbnQgcmVsYXRpb24gY291bGQgbWFrZSBzb21lCisJCSAqIGlucHV0 IHZhcmlhYmxlcyB1bmF2YWlsYWJsZSBmb3IgdGhlICJoaWdoZXIgYWdncmVnYXRlIiwgYW5kIGl0 J2QKKwkJICogYWxzbyBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGlucHV0IHJvd3MgdGhlICJoaWdo ZXIgYWdncmVnYXRlIgorCQkgKiByZWNlaXZlcy4KKwkJICoKKwkJICogSWYgdGhlIGFnZ3JlZ2F0 ZSBkb2VzIG5vdCBldmVuIG5lZWQgdGhlIGN1cnJlbnQgcmVsLCB0aGVuIHRoZQorCQkgKiBjdXJy ZW50IHJlbCBzaG91bGQgYmUgZ3JvdXBlZCBiZWNhdXNlIHdlIGRvIG5vdCBzdXBwb3J0IGpvaW4g b2YgdHdvCisJCSAqIGdyb3VwZWQgcmVsYXRpb25zLgorCQkgKi8KKwkJaWYgKCFibXNfaXNfc3Vi c2V0KGFjX2luZm8tPmFnZ19ldmFsX2F0LCByZWwtPnJlbGlkcykpCisJCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBpbml0X2dyb3VwaW5nX3RhcmdldHMK KyAqCSAgSW5pdGlhbGl6ZSB0YXJnZXQgZm9yIGdyb3VwZWQgcGF0aHMgKHRhcmdldCkgYXMgd2Vs bCBhcyBhIHRhcmdldCBmb3IKKyAqCSAgcGF0aHMgdGhhdCBnZW5lcmF0ZSBpbnB1dCBmb3IgdGhl IGdyb3VwZWQgcGF0aHMgKGFnZ19pbnB1dCkuCisgKgorICogZ3JvdXBfZXhwcnNfZXh0cmFfcCBy ZWNlaXZlcyBhIGxpc3Qgb2YgVmFyIG5vZGVzIGZvciB3aGljaCB3ZSBuZWVkIHRvCisgKiBjb25z dHJ1Y3QgU29ydEdyb3VwQ2xhdXNlLiBUaG9zZSB2YXJzIHdpbGwgdGhlbiBiZSB1c2VkIGFzIGFk ZGl0aW9uYWwKKyAqIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBmb3IgdGhlIHNha2Ugb2Ygam9pbiBj bGF1c2VzLgorICoKKyAqIFJldHVybiB0cnVlIGlmZiB0aGUgdGFyZ2V0cyBjb3VsZCBiZSBpbml0 aWFsaXplZC4KKyAqLworc3RhdGljIGJvb2wKK2luaXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwg UGF0aFRhcmdldCAqYWdnX2lucHV0LAorCQkJCQkgIExpc3QgKipncm91cF9leHByc19leHRyYV9w KQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnBvc3NpYmx5X2RlcGVuZGVudCA9IE5J TDsKKworCWZvcmVhY2gobGMsIHJlbC0+cmVsdGFyZ2V0LT5leHBycykKKwl7CisJCUV4cHIJICAg KmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOworCQlJbmRleAkJc29ydGdyb3VwcmVmOworCisJ CS8qCisJCSAqIEdpdmVuIHRoYXQgUGxhY2VIb2xkZXJWYXIgY3VycmVudGx5IHByZXZlbnRzIHVz IGZyb20gZG9pbmcgZWFnZXIKKwkJICogYWdncmVnYXRpb24sIHRoZSBzb3VyY2UgdGFyZ2V0IGNh bm5vdCBjb250YWluIGFueXRoaW5nIG1vcmUgY29tcGxleAorCQkgKiB0aGFuIGEgVmFyLgorCQkg Ki8KKwkJQXNzZXJ0KElzQShleHByLCBWYXIpKTsKKworCQkvKiBHZXQgdGhlIHNvcnRncm91cHJl ZiBpZiB0aGUgZXhwciBjYW4gYWN0IGFzIGdyb3VwaW5nIGV4cHJlc3Npb24uICovCisJCXNvcnRn cm91cHJlZiA9IGdldF9leHByZXNzaW9uX3NvcnRncm91cHJlZihyb290LCBleHByKTsKKwkJaWYg KHNvcnRncm91cHJlZiA+IDApCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGUgdGFyZ2V0IGV4cHJl c3Npb24gY2FuIGJlIHVzZWQgYXMgdGhlIGdyb3VwaW5nIGtleSwgaXQKKwkJCSAqIHNob3VsZCBi ZSBlbWl0dGVkIGJ5IHRoZSBncm91cGVkIHBhdGhzIHRoYXQgaGF2ZSBiZWVuIHB1c2hlZAorCQkJ ICogZG93biB0byB0aGlzIHJlbGF0aW9uIGxldmVsLgorCQkJICovCisJCQlhZGRfY29sdW1uX3Rv X3BhdGh0YXJnZXQodGFyZ2V0LCBleHByLCBzb3J0Z3JvdXByZWYpOworCisJCQkvKgorCQkJICog Li4uIGFuZCBpdCBhbHNvIHNob3VsZCBiZSBlbWl0dGVkIGJ5IHRoZSBpbnB1dCBwYXRocworCQkJ ICovCisJCQlhZGRfY29sdW1uX3RvX3BhdGh0YXJnZXQoYWdnX2lucHV0LCBleHByLCBzb3J0Z3Jv dXByZWYpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGlzX3Zhcl9uZWVkZWRfYnlfam9pbihy b290LCAoVmFyICopIGV4cHIsIHJlbCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBUaGUgdmFyaWFi bGUgaXMgbmVlZGVkIGZvciBhIGpvaW4sIGhvd2V2ZXIgaXQncyBuZWl0aGVyIGluCisJCQkJICog dGhlIEdST1VQIEJZIGNsYXVzZSBub3IgY2FuIGl0IGJlIGRlcml2ZWQgZnJvbSBpdCB1c2luZyBF Qy4KKwkJCQkgKiAoT3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUgdG8gYmUgYWRkZWQgdG8gdGhlIHRh cmdldHMgYWJvdmUuKQorCQkJCSAqIFdlIG5lZWQgdG8gY29uc3RydWN0IHNwZWNpYWwgU29ydEdy b3VwQ2xhdXNlIGZvciB0aGlzCisJCQkJICogdmFyaWFibGUuCisJCQkJICoKKwkJCQkgKiBOb3Rl IHRoYXQgaXRzIHRsZVNvcnRHcm91cFJlZiBuZWVkcyB0byBiZSB1bmlxdWUgd2l0aGluCisJCQkJ ICogYWdnX2lucHV0LCBzbyB3ZSBuZWVkIHRvIHBvc3Rwb25lIGNyZWF0aW9uIG9mIHRoZQorCQkJ CSAqIFNvcnRHcm91cENsYXVzZSdzIHVudGlsIHdlJ3JlIGRvbmUgd2l0aCB0aGUgaXRlcmF0aW9u IG9mCisJCQkJICogcmVsLT5yZWx0YXJnZXQtPmV4cHJzLiBBbHNvIGl0IG1ha2VzIHNlbnNlIGZv ciB0aGUgY2FsbGVyIHRvCisJCQkJICogZG8gc29tZSBtb3JlIGNoZWNrIGJlZm9yZSBpdCBzdGFy dHMgdG8gY3JlYXRlIHRob3NlCisJCQkJICogU29ydEdyb3VwQ2xhdXNlJ3MuCisJCQkJICovCisJ CQkJKmdyb3VwX2V4cHJzX2V4dHJhX3AgPSBsYXBwZW5kKCpncm91cF9leHByc19leHRyYV9wLCBl eHByKTsKKwkJCX0KKwkJCWVsc2UgaWYgKGlzX3Zhcl9pbl9hZ2dyZWZfb25seShyb290LCAoVmFy ICopIGV4cHIpKQorCQkJeworCQkJCS8qCisJCQkJICogQW5vdGhlciByZWFzb24gd2UgbWlnaHQg bmVlZCB0aGlzIHZhcmlhYmxlIGlzIHRoYXQgc29tZQorCQkJCSAqIGFnZ3JlZ2F0ZSBwdXNoZWQg ZG93biB0byB0aGlzIHJlbGF0aW9uIHJlZmVyZW5jZXMgaXQuIEluCisJCQkJICogc3VjaCBhIGNh c2UsIGFkZCBpdCB0byAiYWdnX2lucHV0IiwgYnV0IG5vdCB0byAidGFyZ2V0Ii4KKwkJCQkgKiBI b3dldmVyLCBpZiB0aGUgYWdncmVnYXRlIGlzIG5vdCB0aGUgb25seSByZWFzb24gZm9yIHRoZSB2 YXIKKwkJCQkgKiB0byBiZSBpbiB0aGUgdGFyZ2V0LCBzb21lIG1vcmUgY2hlY2tzIG5lZWQgdG8g YmUgcGVyZm9ybWVkCisJCQkJICogYmVsb3cuCisJCQkJICovCisJCQkJYWRkX25ld19jb2x1bW5f dG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJ CS8qCisJCQkJICogVGhlIFZhciBjYW4gYmUgZnVuY3Rpb25hbGx5IGRlcGVuZGVudCBvbiBhbm90 aGVyIGV4cHJlc3Npb24KKwkJCQkgKiBvZiB0aGUgdGFyZ2V0LCBidXQgd2UgY2Fubm90IGNoZWNr IHRoYXQgdW50aWwgd2UndmUgYnVpbHQKKwkJCQkgKiBhbGwgdGhlIGV4cHJlc3Npb25zIGZvciB0 aGUgdGFyZ2V0LgorCQkJCSAqLworCQkJCXBvc3NpYmx5X2RlcGVuZGVudCA9IGxhcHBlbmQocG9z c2libHlfZGVwZW5kZW50LCBleHByKTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogTm93IHdl IGNhbiBjaGVjayB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGlzIGZ1bmN0aW9uYWxseSBkZXBlbmRl bnQgb24KKwkgKiBhbm90aGVyIG9uZS4KKwkgKi8KKwlmb3JlYWNoKGxjLCBwb3NzaWJseV9kZXBl bmRlbnQpCisJeworCQlWYXIJCSAgICp0dmFyOworCQlMaXN0CSAgICpkZXBzID0gTklMOworCQlS YW5nZVRibEVudHJ5ICpydGU7CisKKwkJdHZhciA9IGxmaXJzdF9ub2RlKFZhciwgbGMpOworCQly dGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3R2YXItPnZhcm5vXTsKKworCQkvKgorCQkgKiBD aGVjayBpZiB0aGUgVmFyIGNhbiBiZSBpbiB0aGUgZ3JvdXBpbmcga2V5IGV2ZW4gdGhvdWdoIGl0 J3Mgbm90CisJCSAqIG1lbnRpb25lZCBieSB0aGUgR1JPVVAgQlkgY2xhdXNlIChhbmQgY291bGQg bm90IGJlIGRlcml2ZWQgdXNpbmcKKwkJICogRUNzKS4KKwkJICovCisJCWlmIChjaGVja19mdW5j dGlvbmFsX2dyb3VwaW5nKHJ0ZS0+cmVsaWQsIHR2YXItPnZhcm5vLAorCQkJCQkJCQkJICB0dmFy LT52YXJsZXZlbHN1cCwKKwkJCQkJCQkJCSAgdGFyZ2V0LT5leHBycywgJmRlcHMpKQorCQl7CisJ CQkvKgorCQkJICogVGhlIHZhciBzaG91bGRuJ3QgYmUgYWN0dWFsbHkgdXNlZCBmb3IgZ3JvdXBp bmcga2V5IGV2YWx1YXRpb24KKwkJCSAqIChpbnN0ZWFkLCB0aGUgb25lIHRoaXMgZGVwZW5kcyBv biB3aWxsIGJlKSwgc28gc29ydGdyb3VwcmVmCisJCQkgKiBzaG91bGQgbm90IGJlIGltcG9ydGFu dC4KKwkJCSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChFeHBy ICopIHR2YXIpOworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIChF eHByICopIHR2YXIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEFzIGxvbmcgYXMg dGhlIHF1ZXJ5IGlzIHNlbWFudGljYWxseSBjb3JyZWN0LCBhcnJpdmluZyBoZXJlCisJCQkgKiBt ZWFucyB0aGF0IHRoZSB2YXIgaXMgcmVmZXJlbmNlZCBieSBhIGdlbmVyaWMgZ3JvdXBpbmcKKwkJ CSAqIGV4cHJlc3Npb24gYnV0IG5vdCByZWZlcmVuY2VkIGJ5IGFueSBqb2luLgorCQkJICoKKwkJ CSAqIElmIHRoZSBlYWdlciBhZ2dyZWdhdGlvbiB3aWxsIHN1cHBvcnQgZ2VuZXJpYyBncm91cGlu ZworCQkJICogZXhwcmVzc2lvbiBpbiB0aGUgZnV0dXJlLCBjcmVhdGVfcmVsX2FnZ19pbmZvKCkg d2lsbCBoYXZlIHRvIGFkZAorCQkJICogdGhpcyB2YXJpYWJsZSB0byAiYWdnX2lucHV0IiB0YXJn ZXQgYW5kIGFsc28gYWRkIHRoZSB3aG9sZQorCQkJICogZ2VuZXJpYyBleHByZXNzaW9uIHRvICJ0 YXJnZXQiLgorCQkJICovCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIGlzX3Zhcl9pbl9hZ2dyZWZfb25seQorICoJICBDaGVjayB3aGV0aGVy IGdpdmVuIFZhciBhcHBlYXJzIGluIEFnZ3JlZihzKSB3aGljaCB3ZSBjb25zaWRlciB1c2FibGUg YXQKKyAqCSAgcmVsYXRpb24gLyBqb2luIGxldmVsLCBhbmQgb25seSBpbiB0aGUgQWdncmVmKHMp LgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBsYW5uZXJJbmZvICpy b290LCBWYXIgKnZhcikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHJvb3Qt PmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm8gPSBsZmlyc3Rf bm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYs IEFnZ3JlZikpOworCisJCWlmIChibXNfaXNfbWVtYmVyKHZhci0+dmFybm8sIGFjX2luZm8tPmFn Z19ldmFsX2F0KSkKKwkJCWJyZWFrOzsKKwl9CisKKwkvKiBObyBhZ2dyZWdhdGUgcmVmZXJlbmNl cyB0aGUgVmFyPyAqLworCWlmIChsYyA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBE b2VzIHRoZSBWYXIgYXBwZWFyIGluIHRoZSB0YXJnZXQgb3V0c2lkZSBhZ2dyZWdhdGVzPyAqLwor CWZvcmVhY2gobGMsIHJvb3QtPnByb2Nlc3NlZF90bGlzdCkKKwl7CisJCVRhcmdldEVudHJ5ICp0 bGUgPSBsZmlyc3Rfbm9kZShUYXJnZXRFbnRyeSwgbGMpOworCQlMaXN0CSAgICp2YXJzOworCisJ CWlmIChJc0EodGxlLT5leHByLCBBZ2dyZWYpKQorCQkJY29udGludWU7CisKKwkJdmFycyA9IHB1 bGxfdmFyX2NsYXVzZSgoTm9kZSAqKSB0bGUtPmV4cHIsCisJCQkJCQkJICAgUFZDX1JFQ1VSU0Vf V0lORE9XRlVOQ1MgfAorCQkJCQkJCSAgIFBWQ19SRUNVUlNFX1BMQUNFSE9MREVSUyk7CisJCWlm IChsaXN0X21lbWJlcih2YXJzLCB2YXIpKQorCQl7CisJCQlsaXN0X2ZyZWUodmFycyk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQlsaXN0X2ZyZWUodmFycyk7CisJfQorCisJLyogVGhlIFZh ciBpcyBpbiBhZ2dyZWdhdGUocykgYW5kIG9ubHkgdGhlcmUuICovCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBpc192YXJfbmVlZGVkX2J5X2pvaW4KKyAqCSAgQ2hlY2sgaWYgdGhlIGdpdmVu IFZhciBpcyBuZWVkZWQgYnkgam9pbnMgYWJvdmUgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAqIENv bnNpZGVyIHB1c2hpbmcgdGhlIGFnZ3JlZ2F0ZSBhdmcoYi55KSBkb3duIHRvIHJlbGF0aW9uIGIg Zm9yIHRoZSBmb2xsb3dpbmcKKyAqIHF1ZXJ5OgorICoKKyAqICAgIFNFTEVDVCBhLmksIGF2Zyhi LnkpCisgKiAgICBGUk9NIGEgSk9JTiBiIE9OIGEuaiA9IGIuagorICogICAgR1JPVVAgQlkgYS5p OworICoKKyAqIENvbHVtbiBiLmogbmVlZHMgdG8gYmUgdXNlZCBhcyB0aGUgZ3JvdXBpbmcga2V5 IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGNhbm5vdAorICogZmluZCBpdHMgd2F5IHRvIHRoZSBpbnB1 dCBvZiB0aGUgam9pbiBleHByZXNzaW9uLgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX25lZWRl ZF9ieV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgUmVsT3B0SW5mbyAqcmVsKQor eworCVJlbGlkcwkJcmVsaWRzOworCWludAkJCWF0dG5vOworCVJlbE9wdEluZm8gKmJhc2VyZWw7 CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3aGVuIHdlIGFyZSBjaGVja2luZyBpZiB0aGUgVmFyIGlz IG5lZWRlZCBieSBqb2lucyBhYm92ZSwgd2UKKwkgKiB3YW50IHRvIGV4Y2x1ZGUgdGhlIHNpdHVh dGlvbiB3aGVyZSB0aGUgVmFyIGlzIG9ubHkgbmVlZGVkIGluIGZpbmFsCisJICogb3V0cHV0LiAg U28gaW5jbHVkZSAicmVsYXRpb24gMCIgaGVyZS4KKwkgKi8KKwlyZWxpZHMgPSBibXNfY29weShy ZWwtPnJlbGlkcyk7CisJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCAwKTsKKworCWJh c2VyZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIHZhci0+dmFybm8pOworCWF0dG5vID0gdmFyLT52 YXJhdHRubyAtIGJhc2VyZWwtPm1pbl9hdHRyOworCisKKwlyZXR1cm4gYm1zX25vbmVtcHR5X2Rp ZmZlcmVuY2UoYmFzZXJlbC0+YXR0cl9uZWVkZWRbYXR0bm9dLCByZWxpZHMpOworfQorCisvKgor ICogZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmCisgKgkgIFJldHVybiBzb3J0Z3JvdXByZWYg aWYgdGhlIGdpdmVuICdleHByJyBjYW4gYmUgdXNlZCBhcyBhIGdyb3VwaW5nCisgKgkgIGV4cHJl c3Npb24gaW4gZ3JvdXBlZCBwYXRocyBmb3IgYmFzZSBvciBqb2luIHJlbGF0aW9ucywgb3IgMCBv dGhlcndpc2UuCisgKgorICogTm90ZSB0aGF0IHdlIGFsc28gbmVlZCB0byBjaGVjayBpZiB0aGUg J2V4cHInIGlzIGtub3duIGVxdWFsIHRvIG90aGVyIGV4cHJzCisgKiBkdWUgdG8gZXF1aXZhbGVu Y2UgcmVsYXRpb25zaGlwcyB0aGF0IGNhbiBhY3QgYXMgZ3JvdXBpbmcgZXhwcmVzc2lvbnMuCisg Ki8KK3N0YXRpYyBJbmRleAorZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmKFBsYW5uZXJJbmZv ICpyb290LCBFeHByICpleHByKQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywg cm9vdC0+Z3JvdXBfZXhwcl9saXN0KQorCXsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbyA9IGxm aXJzdF9ub2RlKEdyb3VwRXhwckluZm8sIGxjKTsKKworCQlBc3NlcnQoSXNBKGdlX2luZm8tPmV4 cHIsIFZhcikpOworCisJCWlmIChlcXVhbChnZV9pbmZvLT5leHByLCBleHByKSB8fAorCQkJZXhw cnNfa25vd25fZXF1YWwocm9vdCwgKE5vZGUgKikgZXhwciwgKE5vZGUgKikgZ2VfaW5mby0+ZXhw ciwKKwkJCQkJCQkgIGdlX2luZm8tPmJ0cmVlX29wZmFtaWx5KSkKKwkJeworCQkJQXNzZXJ0KGdl X2luZm8tPnNvcnRncm91cHJlZiA+IDApOworCisJCQlyZXR1cm4gZ2VfaW5mby0+c29ydGdyb3Vw cmVmOworCQl9CisJfQorCisJLyogVGhlIGV4cHJlc3Npb24gY2Fubm90IGJlIHVzZWQgYXMgZ3Jv dXBpbmcga2V5LiAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRl eCBjZWE3NzdlOWQ0Li5kMTM2NTIyOWY3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAt MzMxMywxMCArMzMxMywxMSBAQCBhZGRfdW5pcXVlX2dyb3VwX3ZhcihQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqdmFyaW5mb3MsCiAKIAkJLyoKIAkJICogRHJvcCBrbm93bi1lcXVhbCB2YXJzLCBi dXQgb25seSBpZiB0aGV5IGJlbG9uZyB0byBkaWZmZXJlbnQKLQkJICogcmVsYXRpb25zIChzZWUg Y29tbWVudHMgZm9yIGVzdGltYXRlX251bV9ncm91cHMpCisJCSAqIHJlbGF0aW9ucyAoc2VlIGNv bW1lbnRzIGZvciBlc3RpbWF0ZV9udW1fZ3JvdXBzKS4gIFdlIGFyZW4ndCB0b28KKwkJICogZnVz c3kgYWJvdXQgdGhlIHNlbWFudGljcyBvZiAiZXF1YWwiIGhlcmUuCiAJCSAqLwogCQlpZiAodmFy ZGF0YS0+cmVsICE9IHZhcmluZm8tPnJlbCAmJgotCQkJZXhwcnNfa25vd25fZXF1YWwocm9vdCwg dmFyLCB2YXJpbmZvLT52YXIpKQorCQkJZXhwcnNfa25vd25fZXF1YWwocm9vdCwgdmFyLCB2YXJp bmZvLT52YXIsIEludmFsaWRPaWQpKQogCQl7CiAJCQlpZiAodmFyaW5mby0+bmRpc3RpbmN0IDw9 IG5kaXN0aW5jdCkKIAkJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNjllZDllYjFmNi4uM2Vm NTE5NTMyMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTQyOSw2ICs0MjksMTIgQEAgc3RydWN0 IFBsYW5uZXJJbmZvCiAJICovCiAJUmVsSW5mb0xpc3QJCXVwcGVyX3JlbHNbVVBQRVJSRUxfRklO QUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOzsKIAorCS8qCisJICogbGlz dCBvZiBncm91cGVkIHJlbGF0aW9uIFJlbEFnZ0luZm9zLiBPbmUgaW5zdGFuY2Ugb2YgUmVsQWdn SW5mbyBwZXIKKwkgKiBpdGVtIG9mIHRoZSB1cHBlcl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JP VVBfQUdHXSBsaXN0LgorCSAqLworCVJlbEluZm9MaXN0ICphZ2dfaW5mb19saXN0OworCiAJLyog UmVzdWx0IHRsaXN0cyBjaG9zZW4gYnkgZ3JvdXBpbmdfcGxhbm5lciBmb3IgdXBwZXItc3RhZ2Ug cHJvY2Vzc2luZyAqLwogCXN0cnVjdCBQYXRoVGFyZ2V0ICp1cHBlcl90YXJnZXRzW1VQUEVSUkVM X0ZJTkFMICsgMV0gcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVfaWdub3JlKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaAppbmRleCBjNDNkOTdiNDhhLi44ZDAzY2UyYzU3IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aG5vZGUuaApAQCAtMzEwLDYgKzMxMCwxMCBAQCBleHRlcm4gUmVsT3B0SW5mbyAqZmlu ZF9iYXNlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJ bmZvICpmaW5kX2Jhc2VfcmVsX25vZXJyKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwog ZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWxfaWdub3JlX2pvaW4oUGxhbm5lckluZm8g KnJvb3QsIGludCByZWxpZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9qb2luX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcyk7CitleHRlcm4gdm9pZCBhZGRfZ3JvdXBlZF9y ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQlSZWxBZ2dJbmZv ICphZ2dfaW5mbyk7CitleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9ncm91cGVkX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcywKKwkJCQkJCQkJCVJlbEFnZ0luZm8gKiphZ2dfaW5m b19wKTsKIGV4dGVybiBSZWxPcHRJbmZvICpidWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJICBSZWxpZHMgam9pbnJlbGlkcywKIAkJCQkJCQkJICBSZWxPcHRJbmZvICpv dXRlcl9yZWwsCkBAIC0zNDQsNCArMzQ4LDUgQEAgZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxkX2No aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnBh cmVudF9qb2lucmVsLCBMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJCQkJU3BlY2lhbEpvaW5J bmZvICpzamluZm8pOwogCitleHRlcm4gUmVsQWdnSW5mbyAqY3JlYXRlX3JlbF9hZ2dfaW5mbyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKICNlbmRpZgkJCQkJCQkvKiBQQVRI Tk9ERV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IDA0MGEwNDdiODEuLmRjZWExMDg4OGIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRocy5oCkBAIC0xNjAsNyArMTYwLDggQEAgZXh0ZXJuIExpc3QgKmdl bmVyYXRlX2pvaW5faW1wbGllZF9lcXVhbGl0aWVzX2Zvcl9lY3MoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkJICBSZWxpZHMgam9pbl9yZWxpZHMsCiAJCQkJCQkJCQkJCQkJICBSZWxp ZHMgb3V0ZXJfcmVsaWRzLAogCQkJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqaW5uZXJfcmVsKTsK LWV4dGVybiBib29sIGV4cHJzX2tub3duX2VxdWFsKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpp dGVtMSwgTm9kZSAqaXRlbTIpOworZXh0ZXJuIGJvb2wgZXhwcnNfa25vd25fZXF1YWwoUGxhbm5l ckluZm8gKnJvb3QsIE5vZGUgKml0ZW0xLCBOb2RlICppdGVtMiwKKwkJCQkJCQkgIE9pZCBvcGZh bWlseSk7CiBleHRlcm4gRXF1aXZhbGVuY2VDbGFzcyAqbWF0Y2hfZWNsYXNzZXNfdG9fZm9yZWln bl9rZXlfY29sKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJCQkgICBGb3JlaWduS2V5 T3B0SW5mbyAqZmtpbmZvLAogCQkJCQkJCQkJCQkJCQkgICBpbnQgY29sbm8pOwotLSAKMi4zMS4w Cgo= --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0002-Introduce-RelAggInfo-structure-to-store-info-for-grouped-paths.patch" Content-Disposition: attachment; filename="v1-0002-Introduce-RelAggInfo-structure-to-store-info-for-grouped-paths.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7rp1 RnJvbSBlZmFkNmMzOWUyNDcwNzhjNmQzY2RmM2NmODU2MWJkNWQzNTAwNGU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMToxMjoxOCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg Mi85XSBJbnRyb2R1Y2UgUmVsQWdnSW5mbyBzdHJ1Y3R1cmUgdG8gc3RvcmUgaW5mbyBmb3IKIGdy b3VwZWQgcGF0aHMuCgpUaGlzIGNvbW1pdCBpbnRyb2R1Y2VzIFJlbEFnZ0luZm8gc3RydWN0dXJl IHRvIHN0b3JlIGluZm9ybWF0aW9uIG5lZWRlZAp0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyBmb3Ig YmFzZSBhbmQgam9pbiByZWxzLiAgSXQgYWxzbyByZXZpc2VzIHRoZQpSZWxJbmZvTGlzdCByZWxh dGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQKd2l0 aCBSZWxBZ2dJbmZvcy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMg fCA2NiArKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgfCA3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNo YW5nZWQsIDExOCBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggOWUyNTc1MGFjZC4uYzg4ZGE5NjNkYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtMzYsMTMgKzM2LDEzIEBACiAKIAogLyoKLSAq IEFuIGVudHJ5IG9mIGEgaGFzaCB0YWJsZSB0aGF0IHdlIHVzZSB0byBtYWtlIGxvb2t1cCBmb3Ig UmVsT3B0SW5mbwotICogc3RydWN0dXJlcyBtb3JlIGVmZmljaWVudC4KKyAqIEFuIGVudHJ5IG9m IGEgaGFzaCB0YWJsZSB0aGF0IHdlIHVzZSB0byBtYWtlIGxvb2t1cCBmb3IgUmVsT3B0SW5mbyBv cgorICogUmVsQWdnSW5mbyBzdHJ1Y3R1cmVzIG1vcmUgZWZmaWNpZW50LgogICovCiB0eXBlZGVm IHN0cnVjdCBSZWxJbmZvRW50cnkKIHsKIAlSZWxpZHMJCXJlbGlkczsJCQkvKiBoYXNoIGtleSAt LS0gTVVTVCBCRSBGSVJTVCAqLwotCVJlbE9wdEluZm8gKnJlbDsKKwl2b2lkCSAgICpkYXRhOwog fSBSZWxJbmZvRW50cnk7CiAKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3QoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCkBAIC00NzcsNyArNDc3LDcgQEAgZmlu ZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKQogCiAv KgogICogYnVpbGRfcmVsX2hhc2gKLSAqCSAgQ29uc3RydWN0IHRoZSBhdXhpbGlhcnkgaGFzaCB0 YWJsZSBmb3IgcmVsYXRpb25zLgorICoJICBDb25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNoIHRh YmxlIGZvciByZWxhdGlvbiBzcGVjaWZpYyBkYXRhLgogICovCiBzdGF0aWMgdm9pZAogYnVpbGRf cmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3QpCkBAIC00OTcsMTkgKzQ5NywyNyBAQCBidWlsZF9y ZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkKIAkJCQkJCSAgJmhhc2hfY3RsLAogCQkJCQkJICBI QVNIX0VMRU0gfCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9DT01QQVJFIHwgSEFTSF9DT05URVhUKTsK IAotCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgcmVsYXRpb25zICovCisJLyog SW5zZXJ0IGFsbCB0aGUgYWxyZWFkeS1leGlzdGluZyByZWxhdGlvbiBzcGVjaWZpYyBpbmZvcyAq LwogCWZvcmVhY2gobCwgbGlzdC0+aXRlbXMpCiAJewotCQlSZWxPcHRJbmZvICpyZWwgPSAoUmVs T3B0SW5mbyAqKSBsZmlyc3QobCk7CisJCXZvaWQJICAgKml0ZW0gPSBsZmlyc3QobCk7CiAJCVJl bEluZm9FbnRyeSAqaGVudHJ5OwogCQlib29sCQlmb3VuZDsKKwkJUmVsaWRzCQlyZWxpZHM7CisK KwkJQXNzZXJ0KElzQShpdGVtLCBSZWxPcHRJbmZvKSB8fCBJc0EoaXRlbSwgUmVsQWdnSW5mbykp OworCisJCWlmIChJc0EoaXRlbSwgUmVsT3B0SW5mbykpCisJCQlyZWxpZHMgPSAoKFJlbE9wdElu Zm8gKikgaXRlbSktPnJlbGlkczsKKwkJZWxzZQorCQkJcmVsaWRzID0gKChSZWxBZ2dJbmZvICop IGl0ZW0pLT5yZWxpZHM7CiAKIAkJaGVudHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJj aChoYXNodGFiLAotCQkJCQkJCQkJCQkgICYocmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgICZy ZWxpZHMsCiAJCQkJCQkJCQkJCSAgSEFTSF9FTlRFUiwKIAkJCQkJCQkJCQkJICAmZm91bmQpOwog CQlBc3NlcnQoIWZvdW5kKTsKLQkJaGVudHJ5LT5yZWwgPSByZWw7CisJCWhlbnRyeS0+ZGF0YSA9 IGl0ZW07CiAJfQogCiAJbGlzdC0+aGFzaCA9IGhhc2h0YWI7CkBAIC01MTcsOSArNTI1LDkgQEAg YnVpbGRfcmVsX2hhc2goUmVsSW5mb0xpc3QgKmxpc3QpCiAKIC8qCiAgKiBmaW5kX3JlbF9pbmZv Ci0gKgkgIEZpbmQgYW4gUmVsT3B0SW5mbyBlbnRyeS4KKyAqCSAgRmluZCBhbiBSZWxPcHRJbmZv IG9yIGEgUmVsQWdnSW5mbyBlbnRyeS4KICAqLwotc3RhdGljIFJlbE9wdEluZm8gKgorc3RhdGlj IHZvaWQgKgogZmluZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykK IHsKIAlpZiAobGlzdCA9PSBOVUxMKQpAQCAtNTUwLDcgKzU1OCw3IEBAIGZpbmRfcmVsX2luZm8o UmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMpCiAJCQkJCQkJCQkJCSAgSEFTSF9GSU5E LAogCQkJCQkJCQkJCQkgIE5VTEwpOwogCQlpZiAoaGVudHJ5KQotCQkJcmV0dXJuIGhlbnRyeS0+ cmVsOworCQkJcmV0dXJuIGhlbnRyeS0+ZGF0YTsKIAl9CiAJZWxzZQogCXsKQEAgLTU1OCwxMCAr NTY2LDE4IEBAIGZpbmRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMp CiAKIAkJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAkJewotCQkJUmVsT3B0SW5mbyAqcmVsID0g KFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOworCQkJdm9pZAkgICAqaXRlbSA9IGxmaXJzdChsKTsK KwkJCVJlbGlkcwkJaXRlbV9yZWxpZHMgPSBOVUxMOworCisJCQlBc3NlcnQoSXNBKGl0ZW0sIFJl bE9wdEluZm8pIHx8IElzQShpdGVtLCBSZWxBZ2dJbmZvKSk7CiAKLQkJCWlmIChibXNfZXF1YWwo cmVsLT5yZWxpZHMsIHJlbGlkcykpCi0JCQkJcmV0dXJuIHJlbDsKKwkJCWlmIChJc0EoaXRlbSwg UmVsT3B0SW5mbykpCisJCQkJaXRlbV9yZWxpZHMgPSAoKFJlbE9wdEluZm8gKikgaXRlbSktPnJl bGlkczsKKwkJCWVsc2UgaWYgKElzQShpdGVtLCBSZWxBZ2dJbmZvKSkKKwkJCQlpdGVtX3JlbGlk cyA9ICgoUmVsQWdnSW5mbyAqKSBpdGVtKS0+cmVsaWRzOworCisJCQlpZiAoYm1zX2VxdWFsKGl0 ZW1fcmVsaWRzLCByZWxpZHMpKQorCQkJCXJldHVybiBpdGVtOwogCQl9CiAJfQogCkBAIC01NzYs MzIgKzU5Miw0MCBAQCBmaW5kX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxpZHMgcmVs aWRzKQogUmVsT3B0SW5mbyAqCiBmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxp ZHMgcmVsaWRzKQogewotCXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3Qs IHJlbGlkcyk7CisJcmV0dXJuIChSZWxPcHRJbmZvICopIGZpbmRfcmVsX2luZm8ocm9vdC0+am9p bl9yZWxfbGlzdCwgcmVsaWRzKTsKIH0KIAogLyoKICAqIGFkZF9yZWxfaW5mbwotICoJCUFkZCBn aXZlbiByZWxhdGlvbiB0byB0aGUgZ2l2ZW4gbGlzdC4gQWxzbyBhZGQgaXQgdG8gdGhlIGF1eGls aWFyeQorICoJCUFkZCByZWxhdGlvbiBzcGVjaWZpYyBpbmZvIHRvIGEgbGlzdCwgYW5kIGFsc28g YWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkKICAqCQloYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLgog ICovCiBzdGF0aWMgdm9pZAotYWRkX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxPcHRJ bmZvICpyZWwpCithZGRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIHZvaWQgKmRhdGEpCiB7 CisJQXNzZXJ0KElzQShkYXRhLCBSZWxPcHRJbmZvKSB8fCBJc0EoZGF0YSwgUmVsQWdnSW5mbykp OworCiAJLyogR0VRTyByZXF1aXJlcyB1cyB0byBhcHBlbmQgdGhlIG5ldyByZWxhdGlvbiB0byB0 aGUgZW5kIG9mIHRoZSBsaXN0ISAqLwotCWxpc3QtPml0ZW1zID0gbGFwcGVuZChsaXN0LT5pdGVt cywgcmVsKTsKKwlsaXN0LT5pdGVtcyA9IGxhcHBlbmQobGlzdC0+aXRlbXMsIGRhdGEpOwogCiAJ Lyogc3RvcmUgaXQgaW50byB0aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUu ICovCiAJaWYgKGxpc3QtPmhhc2gpCiAJeworCQlSZWxpZHMJCXJlbGlkczsKIAkJUmVsSW5mb0Vu dHJ5ICpoZW50cnk7CiAJCWJvb2wJCWZvdW5kOwogCisJCWlmIChJc0EoZGF0YSwgUmVsT3B0SW5m bykpCisJCQlyZWxpZHMgPSAoKFJlbE9wdEluZm8gKikgZGF0YSktPnJlbGlkczsKKwkJZWxzZQor CQkJcmVsaWRzID0gKChSZWxBZ2dJbmZvICopIGRhdGEpLT5yZWxpZHM7CisKIAkJaGVudHJ5ID0g KFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0LT5oYXNoLAotCQkJCQkJCQkJCQkgICYo cmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgICZyZWxpZHMsCiAJCQkJCQkJCQkJCSAgSEFTSF9F TlRFUiwKIAkJCQkJCQkJCQkJICAmZm91bmQpOwogCQlBc3NlcnQoIWZvdW5kKTsKLQkJaGVudHJ5 LT5yZWwgPSByZWw7CisJCWhlbnRyeS0+ZGF0YSA9IGRhdGE7CiAJfQogfQogCkBAIC0xNDk2LDcg KzE1MjAsNyBAQCBmZXRjaF91cHBlcl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFVwcGVyUmVsYXRp b25LaW5kIGtpbmQsIFJlbGlkcyByZWxpZHMpCiAJLyogSWYgd2UgYWxyZWFkeSBtYWRlIHRoaXMg dXBwZXJyZWwgZm9yIHRoZSBxdWVyeSwgcmV0dXJuIGl0ICovCiAJaWYgKGxpc3QpCiAJewotCQl1 cHBlcnJlbCA9IGZpbmRfcmVsX2luZm8obGlzdCwgcmVsaWRzKTsKKwkJdXBwZXJyZWwgPSAoUmVs T3B0SW5mbyAqKSBmaW5kX3JlbF9pbmZvKGxpc3QsIHJlbGlkcyk7CiAJCWlmICh1cHBlcnJlbCkK IAkJCXJldHVybiB1cHBlcnJlbDsKIAl9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9w YXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGJlNTFlMmM2 NTIuLmQ2N2Y3MjVhZDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xMDY1LDYgKzEwNjUsNzkg QEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCSgocmVsKS0+cGFydF9zY2hlbWUgJiYgKHJl bCktPmJvdW5kaW5mbyAmJiAocmVsKS0+bnBhcnRzID4gMCAmJiBcCiAJIChyZWwpLT5wYXJ0X3Jl bHMgJiYgKHJlbCktPnBhcnRleHBycyAmJiAocmVsKS0+bnVsbGFibGVfcGFydGV4cHJzKQogCisv KgorICogUmVsQWdnSW5mbworICoJCUluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBl ZCBwYXRocyBmb3IgYmFzZSBhbmQgam9pbiByZWxzLgorICoKKyAqICJyZWxpZHMiIGlzIHRoZSBz ZXQgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgKFJUIGluZGV4ZXMpLCBqdXN0IGxpa2Ugd2l0aAor ICogUmVsT3B0SW5mby4KKyAqCisgKiAidGFyZ2V0IiB3aWxsIGJlIHVzZWQgYXMgcGF0aHRhcmdl dCBpZiBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpZWQgdG8KKyAqIGJhc2UgcmVsYXRpb24g b3Igam9pbi4gVGhlIHNhbWUgdGFyZ2V0IHdpbGwgYWxzbyAtLS0gaWYgdGhlIHJlbGF0aW9uIGlz IGEKKyAqIGpvaW4gLS0tIGJlIHVzZWQgdG8gam9pbiBncm91cGVkIHBhdGggdG8gYSBub24tZ3Jv dXBlZCBvbmUuICBUaGlzIHRhcmdldCBjYW4KKyAqIGNvbnRhaW4gcGxhaW4tVmFyIGdyb3VwaW5n IGV4cHJlc3Npb25zIGFuZCBBZ2dyZWYgbm9kZXMuCisgKgorICogTm90ZTogVGhlcmUncyBhIGNv bnZlbnRpb24gdGhhdCBBZ2dyZWYgZXhwcmVzc2lvbnMgYXJlIHN1cHBvc2VkIHRvIGZvbGxvdwor ICogdGhlIG90aGVyIGV4cHJlc3Npb25zIG9mIHRoZSB0YXJnZXQuIEl0ZXJhdGlvbnMgb2YgLT5l eHBycyBtYXkgcmVseSBvbiB0aGlzCisgKiBhcnJhbmdlbWVudC4KKyAqCisgKiAiYWdnX2lucHV0 IiBjb250YWlucyBWYXJzIHVzZWQgZWl0aGVyIGFzIGdyb3VwaW5nIGV4cHJlc3Npb25zIG9yIGFn Z3JlZ2F0ZQorICogYXJndW1lbnRzLiBQYXRocyBwcm92aWRpbmcgdGhlIGFnZ3JlZ2F0aW9uIHBs YW4gd2l0aCBpbnB1dCBkYXRhIHNob3VsZCB1c2UKKyAqIHRoaXMgdGFyZ2V0LiBUaGUgb25seSBk aWZmZXJlbmNlIGZyb20gcmVsdGFyZ2V0IG9mIHRoZSBub24tZ3JvdXBlZCByZWxhdGlvbgorICog aXMgdGhhdCBzb21lIGl0ZW1zIGNhbiBoYXZlIHNvcnRncm91cHJlZiBpbml0aWFsaXplZC4KKyAq CisgKiAiaW5wdXRfcm93cyIgaXMgdGhlIGVzdGltYXRlZCBudW1iZXIgb2YgaW5wdXQgcm93cyBm b3IgQWdnUGF0aC4gSXQncworICogYWN0dWFsbHkganVzdCBhIHdvcmtzcGFjZSBmb3IgdXNlcnMg b2YgdGhlIHN0cnVjdHVyZSwgaS5lLiBub3QgaW5pdGlhbGl6ZWQKKyAqIHdoZW4gaW5zdGFuY2Ug b2YgdGhlIHN0cnVjdHVyZSBpcyBjcmVhdGVkLgorICoKKyAqICJncm91cGVkX3Jvd3MiIGlzIHRo ZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIHJlc3VsdCByb3dzIG9mIHRoZSBBZ2dQYXRoLgorICoKKyAq ICJncm91cF9jbGF1c2VzIiwgImdyb3VwX2V4cHJzIiBhbmQgImdyb3VwX3BhdGhrZXlzIiBhcmUg bGlzdHMgb2YKKyAqIFNvcnRHcm91cENsYXVzZSwgdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXBpbmcg ZXhwcmVzc2lvbnMgYW5kIFBhdGhLZXkKKyAqIHJlc3BlY3RpdmVseS4KKyAqCisgKiAiYWdnX2V4 cHJzIiBpcyBhIGxpc3Qgb2YgQWdncmVmIG5vZGVzIGZvciB0aGUgYWdncmVnYXRpb24gb2YgdGhl IHJlbGF0aW9uJ3MKKyAqIHBhdGhzLgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxBZ2dJbmZvCit7 CisJcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwsIG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkK KworCU5vZGVUYWcJCXR5cGU7CisKKwkvKgorCSAqIHRoZSBzYW1lIGFzIGluIFJlbE9wdEluZm87 IHNldCBvZiBiYXNlICsgT0ogcmVsaWRzIChyYW5nZXRhYmxlIGluZGV4ZXMpCisJICovCisJUmVs aWRzCQlyZWxpZHM7CisKKwkvKgorCSAqIHRoZSB0YXJnZXRsaXN0IGZvciBQYXRocyBzY2Fubmlu ZyB0aGlzIGdyb3VwZWQgcmVsOyBsaXN0IG9mIFZhcnMvRXhwcnMsCisJICogY29zdCwgd2lkdGgK KwkgKi8KKwlzdHJ1Y3QgUGF0aFRhcmdldCAqdGFyZ2V0OworCisJLyoKKwkgKiB0aGUgdGFyZ2V0 bGlzdCBmb3IgUGF0aHMgdGhhdCBnZW5lcmF0ZSBpbnB1dCBmb3IgdGhlIGdyb3VwZWQgcGF0aHMg CisJICovCisJc3RydWN0IFBhdGhUYXJnZXQgKmFnZ19pbnB1dDsKKworCS8qIGVzdGltYXRlZCBu dW1iZXIgb2YgaW5wdXQgdHVwbGVzIGZvciB0aGUgZ3JvdXBlZCBwYXRocyAqLworCUNhcmRpbmFs aXR5CQlpbnB1dF9yb3dzOworCisJLyogZXN0aW1hdGVkIG51bWJlciBvZiByZXN1bHQgdHVwbGVz IG9mIHRoZSBncm91cGVkIHJlbGF0aW9uKi8KKwlDYXJkaW5hbGl0eQkJZ3JvdXBlZF9yb3dzOwor CisJLyogYSBsaXN0IG9mIFNvcnRHcm91cENsYXVzZSdzICovCisJTGlzdAkgICAqZ3JvdXBfY2xh dXNlczsKKwkvKiBhIGxpc3Qgb2YgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgKi8KKwlMaXN0CSAgICpn cm91cF9leHByczsKKwkvKiBhIGxpc3Qgb2YgUGF0aEtleXMgKi8KKwlMaXN0CSAgICpncm91cF9w YXRoa2V5czsKKworCS8qIGEgbGlzdCBvZiBBZ2dyZWYgbm9kZXMgKi8KKwlMaXN0CSAgICphZ2df ZXhwcnM7Cit9IFJlbEFnZ0luZm87CisKIC8qCiAgKiBJbmRleE9wdEluZm8KICAqCQlQZXItaW5k ZXggaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgotLSAKMi4zMS4wCgo= --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0003-Set-up-for-eager-aggregation-by-collecting-needed-infos.patch" Content-Disposition: attachment; filename="v1-0003-Set-up-for-eager-aggregation-by-collecting-needed-infos.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7rt2 RnJvbSA5Nzk4ZjFmNGU0ZDFlNmFlZjZiNzEyZGY0NTJmYzVmMTRlNzM2MjkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxODo0MDo0NiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg My85XSBTZXQgdXAgZm9yIGVhZ2VyIGFnZ3JlZ2F0aW9uIGJ5IGNvbGxlY3RpbmcgbmVlZGVkCiBp bmZvcwoKVGhpcyBjb21taXQgY2hlY2tzIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpY2Fi bGUsIGFuZCBpZiBzbywgc2V0cwp1cCByb290LT5hZ2dfY2xhdXNlX2xpc3QgYW5kIHJvb3QtPmdy b3VwX2V4cHJfbGlzdCBieSBjb2xsZWN0aW5nCnN1aXRhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9u cyBhbmQgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgaW4gdGhlIHF1ZXJ5LgotLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyAgICAgICAgfCAyNTAgKysrKysrKysrKysrKysrKysr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jICAgICAgICAgfCAgIDggKwog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEwICsKIHNy Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgNDEgKysrCiBzcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogOSBmaWxlcyBj aGFuZ2VkLCAzMTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDM1MWJmMmU5ZTQuLjkzODRjNTRlZDkgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtODAsNiArODAsNyBAQCB0eXBlZGVmIGVu dW0gcHVzaGRvd25fc2FmZV90eXBlCiAKIC8qIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHNldCBieSBH VUMgKi8KIGJvb2wJCWVuYWJsZV9nZXFvID0gZmFsc2U7CS8qIGp1c3QgaW4gY2FzZSBHVUMgZG9l c24ndCBzZXQgaXQgKi8KK2Jvb2wJCWVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgPSBmYWxzZTsKIGlu dAkJCWdlcW9fdGhyZXNob2xkOwogaW50CQkJbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsK IGludAkJCW1pbl9wYXJhbGxlbF9pbmRleF9zY2FuX3NpemU7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2luaXRzcGxhbi5jCmluZGV4IGQ0YTlkNzdkN2YuLjM2YzgyYmQ2OTYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KICNpbmNs dWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNs dWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKQEAgLTgxLDYgKzgyLDggQEAgdHlwZWRlZiBzdHJ1Y3Qg Sm9pblRyZWVJdGVtCiB9IEpvaW5UcmVlSXRlbTsKIAogCitzdGF0aWMgdm9pZCBjcmVhdGVfYWdn X2NsYXVzZV9pbmZvcyhQbGFubmVySW5mbyAqcm9vdCk7CitzdGF0aWMgdm9pZCBjcmVhdGVfZ3Jv dXBpbmdfZXhwcl9pbmZvcyhQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBleHRyYWN0 X2xhdGVyYWxfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYnJlbCwK IAkJCQkJCQkJCSAgIEluZGV4IHJ0aW5kZXgpOwogc3RhdGljIExpc3QgKmRlY29uc3RydWN0X3Jl Y3Vyc2UoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmp0bm9kZSwKQEAgLTMyOCw2ICszMzEsMjUz IEBAIGFkZF92YXJzX3RvX3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnZhcnMs CiAJfQogfQogCisvKgorICogc2V0dXBfZWFnZXJfYWdncmVnYXRpb24KKyAqCSAgQ2hlY2sgaWYg ZWFnZXIgYWdncmVnYXRpb24gaXMgYXBwbGljYWJsZSwgYW5kIGlmIHNvIGNvbGxlY3Qgc3VpdGFi bGUKKyAqCSAgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBncm91cGluZyBleHByZXNzaW9ucyBp biB0aGUgcXVlcnkuCisgKi8KK3ZvaWQKK3NldHVwX2VhZ2VyX2FnZ3JlZ2F0aW9uKFBsYW5uZXJJ bmZvICpyb290KQoreworCS8qCisJICogRG9uJ3QgYXBwbHkgZWFnZXIgYWdncmVnYXRpb24gaWYg ZGlzYWJsZWQgYnkgdXNlci4KKwkgKi8KKwlpZiAoIWVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUpCisJ CXJldHVybjsKKworCS8qCisJICogRG9uJ3QgYXBwbHkgZWFnZXIgYWdncmVnYXRpb24gaWYgdGhl cmUgYXJlIG5vIEdST1VQIEJZIGNsYXVzZXMuCisJICovCisJaWYgKCFyb290LT5wYXJzZS0+Z3Jv dXBDbGF1c2UpCisJCXJldHVybjsKKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8g c3VwcG9ydCBncm91cGluZyBzZXRzLgorCSAqLworCWlmIChyb290LT5wYXJzZS0+Z3JvdXBpbmdT ZXRzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEZvciBub3cgd2UgZG9uJ3QgdHJ5IHRvIHN1cHBv cnQgRElTVElOQ1Qgb3IgT1JERVIgQlkgYWdncmVnYXRlcy4KKwkgKi8KKwlpZiAocm9vdC0+bnVt T3JkZXJlZEFnZ3MgPiAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkg YWdncmVnYXRlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHBhcnRpYWwgbW9kZSwgb3IgYW55CisJICog cGFydGlhbCBhZ2dyZWdhdGVzIHRoYXQgYXJlIG5vbi1zZXJpYWxpemFibGUsIGRvIG5vdCBhcHBs eSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uLgorCSAqLworCWlmIChyb290LT5oYXNOb25QYXJ0aWFs QWdncyB8fCByb290LT5oYXNOb25TZXJpYWxBZ2dzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNS RiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgYWdncmVnYXRlIGFyZ3VtZW50IGFuZCB3ZSBkb24ndCBl dmVuIHdhbnQgaXQKKwkgKiBpbiB0aGUgR1JPVVAgQlkgY2xhdXNlLCBzbyBmb3JiaWQgaXQgaW4g Z2VuZXJhbC4gSXQgbmVlZHMgdG8gYmUKKwkgKiBhbmFseXplZCBpZiBldmFsdWF0aW9uIG9mIGEg R1JPVVAgQlkgY2xhdXNlIGNvbnRhaW5pbmcgU1JGIGJlbG93IHRoZQorCSAqIHF1ZXJ5IHRhcmdl dGxpc3Qgd291bGQgYmUgY29ycmVjdC4gQ3VycmVudGx5IGl0IGRvZXMgbm90IHNlZW0gdG8gYmUg YW4KKwkgKiBpbXBvcnRhbnQgdXNlIGNhc2UuCisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5oYXNU YXJnZXRTUkZzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENvbGxlY3QgYWdncmVnYXRlIGV4cHJl c3Npb25zIHRoYXQgYXBwZWFyIGluIHRhcmdldGxpc3QgYW5kIGhhdmluZworCSAqIGNsYXVzZXMu CisJICovCisJY3JlYXRlX2FnZ19jbGF1c2VfaW5mb3Mocm9vdCk7CisKKwkvKgorCSAqIElmIHRo ZXJlIGFyZSBubyBzdWl0YWJsZSBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMsIHdlIGNhbm5vdCBhcHBs eSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uLgorCSAqLworCWlmIChyb290LT5hZ2dfY2xhdXNlX2xp c3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENvbGxlY3QgZ3JvdXBpbmcgZXhwcmVz c2lvbnMgdGhhdCBhcHBlYXIgaW4gZ3JvdXBpbmcgY2xhdXNlcy4KKwkgKi8KKwljcmVhdGVfZ3Jv dXBpbmdfZXhwcl9pbmZvcyhyb290KTsKK30KKworLyoKKyAqIENyZWF0ZSBBZ2dDbGF1c2VJbmZv IGZvciBlYWNoIGFnZ3JlZ2F0ZS4KKyAqCisgKiBJZiBhbnkgYWdncmVnYXRlIGlzIG5vdCBzdWl0 YWJsZSwgc2V0IHJvb3QtPmFnZ19jbGF1c2VfbGlzdCB0byBOSUwgYW5kCisgKiByZXR1cm4uCisg Ki8KK3N0YXRpYyB2b2lkCitjcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhQbGFubmVySW5mbyAqcm9v dCkKK3sKKwlMaXN0CSAgICp0bGlzdF9leHByczsKKwlMaXN0Q2VsbCAgICpsYzsKKworCUFzc2Vy dChyb290LT5hZ2dfY2xhdXNlX2xpc3QgPT0gTklMKTsKKworCXRsaXN0X2V4cHJzID0gcHVsbF92 YXJfY2xhdXNlKChOb2RlICopIHJvb3QtPnByb2Nlc3NlZF90bGlzdCwKKwkJCQkJCQkJICBQVkNf SU5DTFVERV9BR0dSRUdBVEVTIHwKKwkJCQkJCQkJICBQVkNfUkVDVVJTRV9XSU5ET1dGVU5DUyB8 CisJCQkJCQkJCSAgUFZDX1JFQ1VSU0VfUExBQ0VIT0xERVJTKTsKKworCS8qCisJICogRm9yIG5v dyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9ydCBHUk9VUElORygpIGV4cHJlc3Npb25zLgorCSAqLwor CWZvcmVhY2gobGMsIHRsaXN0X2V4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9IChFeHByICop IGxmaXJzdChsYyk7CisKKwkJaWYgKElzQShleHByLCBHcm91cGluZ0Z1bmMpKQorCQkJcmV0dXJu OworCX0KKworCS8qCisJICogQWdncmVnYXRlcyB3aXRoaW4gdGhlIEhBVklORyBjbGF1c2UgbmVl ZCB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIHNhbWUgd2F5CisJICogYXMgdGhvc2UgaW4gdGhlIHRh cmdldGxpc3QuICBOb3RlIHRoYXQgSEFWSU5HIGNhbiBjb250YWluIEFnZ3JlZnMgYnV0CisJICog bm90IFdpbmRvd0Z1bmNzLgorCSAqLworCWlmIChyb290LT5wYXJzZS0+aGF2aW5nUXVhbCAhPSBO VUxMKQorCXsKKwkJTGlzdAkgICAqaGF2aW5nX2V4cHJzOworCisJCWhhdmluZ19leHBycyA9IHB1 bGxfdmFyX2NsYXVzZSgoTm9kZSAqKSByb290LT5wYXJzZS0+aGF2aW5nUXVhbCwKKwkJCQkJCQkJ CSAgIFBWQ19JTkNMVURFX0FHR1JFR0FURVMgfAorCQkJCQkJCQkJICAgUFZDX1JFQ1VSU0VfUExB Q0VIT0xERVJTKTsKKwkJaWYgKGhhdmluZ19leHBycyAhPSBOSUwpCisJCXsKKwkJCXRsaXN0X2V4 cHJzID0gbGlzdF9jb25jYXQodGxpc3RfZXhwcnMsIGhhdmluZ19leHBycyk7CisJCQlsaXN0X2Zy ZWUoaGF2aW5nX2V4cHJzKTsKKwkJfQorCX0KKworCWZvcmVhY2gobGMsIHRsaXN0X2V4cHJzKQor CXsKKwkJRXhwcgkgICAqZXhwciA9IChFeHByICopIGxmaXJzdChsYyk7CisJCUFnZ3JlZgkgICAq YWdncmVmOworCQlBZ2dDbGF1c2VJbmZvICphY19pbmZvOworCisJCS8qCisJCSAqIHRsaXN0X2V4 cHJzIG1heSBhbHNvIGNvbnRhaW4gVmFycywgYnV0IHdlIG9ubHkgbmVlZCBBZ2dyZWZzLgorCQkg Ki8KKwkJaWYgKElzQShleHByLCBWYXIpKQorCQkJY29udGludWU7CisKKwkJYWdncmVmID0gY2Fz dE5vZGUoQWdncmVmLCBleHByKTsKKworCQlBc3NlcnQoYWdncmVmLT5hZ2dvcmRlciA9PSBOSUwp OworCQlBc3NlcnQoYWdncmVmLT5hZ2dkaXN0aW5jdCA9PSBOSUwpOworCisJCWFjX2luZm8gPSBt YWtlTm9kZShBZ2dDbGF1c2VJbmZvKTsKKwkJYWNfaW5mby0+YWdncmVmID0gYWdncmVmOworCQlh Y19pbmZvLT5hZ2dfZXZhbF9hdCA9IHB1bGxfdmFybm9zKHJvb3QsIChOb2RlICopIGFnZ3JlZik7 CisKKwkJcm9vdC0+YWdnX2NsYXVzZV9saXN0ID0KKwkJCWxpc3RfYXBwZW5kX3VuaXF1ZShyb290 LT5hZ2dfY2xhdXNlX2xpc3QsIGFjX2luZm8pOworCX0KKworCWxpc3RfZnJlZSh0bGlzdF9leHBy cyk7Cit9CisKKy8qCisgKiBDcmVhdGUgR3JvdXBFeHBySW5mbyBmb3IgZWFjaCBleHByZXNzaW9u IHVzYWJsZSBhcyBncm91cGluZyBrZXkuCisgKgorICogSWYgYW55IGdyb3VwaW5nIGV4cHJlc3Np b24gaXMgbm90IHN1aXRhYmxlLCBzZXQgcm9vdC0+Z3JvdXBfZXhwcl9saXN0IHRvIE5JTAorICog YW5kIHJldHVybi4KKyAqLworc3RhdGljIHZvaWQKK2NyZWF0ZV9ncm91cGluZ19leHByX2luZm9z KFBsYW5uZXJJbmZvICpyb290KQoreworCUxpc3QJICAgKmV4cHJzID0gTklMOworCUxpc3QJICAg KnNvcnRncm91cHJlZnMgPSBOSUw7CisJTGlzdAkgICAqYnRyZWVfb3BmYW1pbGllcyA9IE5JTDsK KwlMaXN0Q2VsbCAgICpsYywKKwkJCSAgICpsYzEsCisJCQkgICAqbGMyLAorCQkJICAgKmxjMzsK KworCUFzc2VydChyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKTsKKworCWZvcmVhY2gobGMs IHJvb3QtPnBhcnNlLT5ncm91cENsYXVzZSkKKwl7CisJCVNvcnRHcm91cENsYXVzZSAqc2djID0g bGZpcnN0X25vZGUoU29ydEdyb3VwQ2xhdXNlLCBsYyk7CisJCVRhcmdldEVudHJ5ICp0bGUgPSBn ZXRfc29ydGdyb3VwY2xhdXNlX3RsZShzZ2MsIHJvb3QtPnByb2Nlc3NlZF90bGlzdCk7CisJCVR5 cGVDYWNoZUVudHJ5ICp0Y2U7CisJCU9pZAkJCQllcXVhbGltYWdlcHJvYzsKKwkJT2lkCQkJCWVx X29wOworCQlMaXN0CQkgICAqZXFfb3BmYW1pbGllczsKKwkJT2lkCQkJCWJ0cmVlX29wZmFtaWx5 OworCisJCUFzc2VydCh0bGUtPnJlc3NvcnRncm91cHJlZiA+IDApOworCisJCS8qCisJCSAqIEZv ciBub3cgd2Ugb25seSBzdXBwb3J0IHBsYWluIFZhcnMgYXMgZ3JvdXBpbmcgZXhwcmVzc2lvbnMu CisJCSAqLworCQlpZiAoIUlzQSh0bGUtPmV4cHIsIFZhcikpCisJCQlyZXR1cm47CisKKwkJLyoK KwkJICogRWFnZXIgYWdncmVnYXRpb24gaXMgb25seSBwb3NzaWJsZSBpZiBlcXVhbGl0eSBvZiBn cm91cGluZyBrZXlzCisJCSAqIHBlciB0aGUgZXF1YWxpdHkgb3BlcmF0b3IgaW1wbGllcyBiaXR3 aXNlIGVxdWFsaXR5LiBPdGhlcndpc2UsIGlmCisJCSAqIHdlIHB1dCBrZXlzIG9mIGRpZmZlcmVu dCBieXRlIGltYWdlcyBpbnRvIHRoZSBzYW1lIGdyb3VwLCB3ZSBsb3NlCisJCSAqIHNvbWUgaW5m b3JtYXRpb24gdGhhdCBtYXkgYmUgbmVlZGVkIHRvIGV2YWx1YXRlIGpvaW4gY2xhdXNlcyBhYm92 ZQorCQkgKiB0aGUgcHVzaGVkLWRvd24gYWdncmVnYXRlIG5vZGUsIG9yIHRoZSBXSEVSRSBjbGF1 c2UuCisJCSAqCisJCSAqIEZvciBleGFtcGxlLCB0aGUgTlVNRVJJQyBkYXRhIHR5cGUgaXMgbm90 IHN1cHBvcnRlZCBiZWNhdXNlIHZhbHVlcworCQkgKiB0aGF0IGZhbGwgaW50byB0aGUgc2FtZSBn cm91cCBhY2NvcmRpbmcgdG8gdGhlIGVxdWFsaXR5IG9wZXJhdG9yCisJCSAqIChlLmcuIDAgYW5k IDAuMCkgY2FuIGhhdmUgZGlmZmVyZW50IHNjYWxlLgorCQkgKi8KKwkJdGNlID0gbG9va3VwX3R5 cGVfY2FjaGUoZXhwclR5cGUoKE5vZGUgKikgdGxlLT5leHByKSwKKwkJCQkJCQkJVFlQRUNBQ0hF X0JUUkVFX09QRkFNSUxZKTsKKwkJaWYgKCFPaWRJc1ZhbGlkKHRjZS0+YnRyZWVfb3BmKSB8fAor CQkJIU9pZElzVmFsaWQodGNlLT5idHJlZV9vcGludHlwZSkpCisJCQlyZXR1cm47CisKKwkJZXF1 YWxpbWFnZXByb2MgPSBnZXRfb3BmYW1pbHlfcHJvYyh0Y2UtPmJ0cmVlX29wZiwKKwkJCQkJCQkJ CQkgICB0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5 cGUsCisJCQkJCQkJCQkJICAgQlRFUVVBTElNQUdFX1BST0MpOworCQlpZiAoIU9pZElzVmFsaWQo ZXF1YWxpbWFnZXByb2MpIHx8CisJCQkhRGF0dW1HZXRCb29sKE9pZEZ1bmN0aW9uQ2FsbDFDb2xs KGVxdWFsaW1hZ2Vwcm9jLAorCQkJCQkJCQkJCQkgICB0Y2UtPnR5cGNvbGxhdGlvbiwKKwkJCQkJ CQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bSh0Y2UtPmJ0cmVlX29waW50eXBlKSkpKQorCQkJcmV0 dXJuOworCisJCS8qCisJCSAqIEdldCB0aGUgb3BlcmF0b3IgaW4gdGhlIGJ0cmVlJ3Mgb3BmYW1p bHkuCisJCSAqLworCQllcV9vcCA9IGdldF9vcGZhbWlseV9tZW1iZXIodGNlLT5idHJlZV9vcGYs CisJCQkJCQkJCQl0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJdGNlLT5idHJlZV9vcGlu dHlwZSwKKwkJCQkJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlcik7CisJCWlmICghT2lkSXNWYWxp ZChlcV9vcCkpCisJCQlyZXR1cm47CisJCWVxX29wZmFtaWxpZXMgPSBnZXRfbWVyZ2Vqb2luX29w ZmFtaWxpZXMoZXFfb3ApOworCQlpZiAoIWVxX29wZmFtaWxpZXMpCisJCQlyZXR1cm47CisJCWJ0 cmVlX29wZmFtaWx5ID0gbGluaXRpYWxfb2lkKGVxX29wZmFtaWxpZXMpOworCisJCWV4cHJzID0g bGFwcGVuZChleHBycywgdGxlLT5leHByKTsKKwkJc29ydGdyb3VwcmVmcyA9IGxhcHBlbmRfaW50 KHNvcnRncm91cHJlZnMsIHRsZS0+cmVzc29ydGdyb3VwcmVmKTsKKwkJYnRyZWVfb3BmYW1pbGll cyA9IGxhcHBlbmRfb2lkKGJ0cmVlX29wZmFtaWxpZXMsIGJ0cmVlX29wZmFtaWx5KTsKKwl9CisK KwkvKgorCSAqIENvbnN0cnVjdCBHcm91cEV4cHJJbmZvIGZvciBlYWNoIGV4cHJlc3Npb24uCisJ ICovCisJZm9ydGhyZWUobGMxLCBleHBycywgbGMyLCBzb3J0Z3JvdXByZWZzLCBsYzMsIGJ0cmVl X29wZmFtaWxpZXMpCisJeworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikgbGZpcnN0KGxjMSk7 CisJCWludAkJCXNvcnRncm91cHJlZiA9IGxmaXJzdF9pbnQobGMyKTsKKwkJT2lkCQkJYnRyZWVf b3BmYW1pbHkgPSBsZmlyc3Rfb2lkKGxjMyk7CisJCUdyb3VwRXhwckluZm8gKmdlX2luZm87CisK KwkJZ2VfaW5mbyA9IG1ha2VOb2RlKEdyb3VwRXhwckluZm8pOworCQlnZV9pbmZvLT5leHByID0g KEV4cHIgKikgY29weU9iamVjdChleHByKTsKKwkJZ2VfaW5mby0+c29ydGdyb3VwcmVmID0gc29y dGdyb3VwcmVmOworCQlnZV9pbmZvLT5idHJlZV9vcGZhbWlseSA9IGJ0cmVlX29wZmFtaWx5Owor CisJCXJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9IGxhcHBlbmQocm9vdC0+Z3JvdXBfZXhwcl9saXN0 LCBnZV9pbmZvKTsKKwl9Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCmluZGV4IDMzNDFlNjRkMmIuLjhiOGRlZjIxY2EgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwpAQCAtNzgsNiArNzgsOCBAQCBxdWVy eV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LAogCXJvb3QtPnBsYWNlaG9sZGVyX2xpc3QgPSBO SUw7CiAJcm9vdC0+cGxhY2Vob2xkZXJfYXJyYXkgPSBOVUxMOwogCXJvb3QtPnBsYWNlaG9sZGVy X2FycmF5X3NpemUgPSAwOworCXJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9IE5JTDsKKwlyb290LT5n cm91cF9leHByX2xpc3QgPSBOSUw7CiAJcm9vdC0+ZmtleV9saXN0ID0gTklMOwogCXJvb3QtPmlu aXRpYWxfcmVscyA9IE5JTDsKIApAQCAtMjY0LDYgKzI2NiwxMiBAQCBxdWVyeV9wbGFubmVyKFBs YW5uZXJJbmZvICpyb290LAogCSAqLwogCWV4dHJhY3RfcmVzdHJpY3Rpb25fb3JfY2xhdXNlcyhy b290KTsKIAorCS8qCisJICogQ2hlY2sgaWYgZWFnZXIgYWdncmVnYXRpb24gaXMgYXBwbGljYWJs ZSwgYW5kIGlmIHNvLCBzZXQgdXAKKwkgKiByb290LT5hZ2dfY2xhdXNlX2xpc3QgYW5kIHJvb3Qt Pmdyb3VwX2V4cHJfbGlzdC4KKwkgKi8KKwlzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbihyb290KTsK KwogCS8qCiAJICogTm93IGV4cGFuZCBhcHBlbmRyZWxzIGJ5IGFkZGluZyAib3RoZXJyZWxzIiBm b3IgdGhlaXIgY2hpbGRyZW4uICBXZQogCSAqIGRlbGF5IHRoaXMgdG8gdGhlIGVuZCBzbyB0aGF0 IHdlIGhhdmUgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYwppbmRleCA1MjdhMmIyNzM0Li41MTVlNmQ3NzM3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9taXNjL2d1Y190YWJsZXMuYwpAQCAtOTg0LDYgKzk4NCwxNiBAQCBzdHJ1Y3QgY29uZmlnX2Jv b2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlmYWxzZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAog CX0sCisJeworCQl7ImVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUiLCBQR0NfVVNFUlNFVCwgUVVFUllf VFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyBlYWdlciBhZ2dyZWdhdGlv bi4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9LAorCQkmZW5hYmxlX2VhZ2VyX2Fn Z3JlZ2F0ZSwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAogCXsKIAkJeyJlbmFi bGVfcGFyYWxsZWxfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCiAJ CQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgcGFyYWxsZWwgYXBw ZW5kIHBsYW5zLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jl c3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlCmluZGV4IGM5N2Y5YTI1ZjAuLmY4NDE5MTU0ODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQwMSw2ICs0MDEsNyBAQAogI2Vu YWJsZV9zb3J0ID0gb24KICNlbmFibGVfdGlkc2NhbiA9IG9uCiAjZW5hYmxlX2dyb3VwX2J5X3Jl b3JkZXJpbmcgPSBvbgorI2VuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgPSBvZmYKIAogIyAtIFBsYW5u ZXIgQ29zdCBDb25zdGFudHMgLQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGQ2N2Y3MjVhZDYu LjY5ZWQ5ZWIxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0zODMsNiArMzgzLDEyIEBAIHN0 cnVjdCBQbGFubmVySW5mbwogCS8qIGxpc3Qgb2YgUGxhY2VIb2xkZXJJbmZvcyAqLwogCUxpc3QJ ICAgKnBsYWNlaG9sZGVyX2xpc3Q7CiAKKwkvKiBsaXN0IG9mIEFnZ0NsYXVzZUluZm9zICovCisJ TGlzdAkgICAqYWdnX2NsYXVzZV9saXN0OworCisJLyogTGlzdCBvZiBHcm91cEV4cHJJbmZvcyAq LworCUxpc3QJICAgKmdyb3VwX2V4cHJfbGlzdDsKKwogCS8qIGFycmF5IG9mIFBsYWNlSG9sZGVy SW5mb3MgaW5kZXhlZCBieSBwaGlkICovCiAJc3RydWN0IFBsYWNlSG9sZGVySW5mbyAqKnBsYWNl aG9sZGVyX2FycmF5IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSwgYXJyYXlfc2l6ZShw bGFjZWhvbGRlcl9hcnJheV9zaXplKSk7CiAJLyogYWxsb2NhdGVkIHNpemUgb2YgYXJyYXkgKi8K QEAgLTMxOTMsNiArMzE5OSw0MSBAQCB0eXBlZGVmIHN0cnVjdCBNaW5NYXhBZ2dJbmZvCiAJUGFy YW0JICAgKnBhcmFtOwogfSBNaW5NYXhBZ2dJbmZvOwogCisvKgorICogVGhlIGFnZ3JlZ2F0ZSBl eHByZXNzaW9ucyB0aGF0IGFwcGVhciBpbiB0YXJnZXRsaXN0IGFuZCBoYXZpbmcgY2xhdXNlcwor ICovCit0eXBlZGVmIHN0cnVjdCBBZ2dDbGF1c2VJbmZvCit7CisJcGdfbm9kZV9hdHRyKG5vX3Jl YWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5cGU7CisKKwkvKiB0aGUgQWdncmVm IGV4cHIgKi8KKwlBZ2dyZWYJICAgKmFnZ3JlZjsKKworCS8qIGxvd2VzdCBsZXZlbCB3ZSBjYW4g ZXZhbHVhdGUgdGhpcyBhZ2dyZWdhdGUgYXQgKi8KKwlSZWxpZHMJCWFnZ19ldmFsX2F0OworfSBB Z2dDbGF1c2VJbmZvOworCisvKgorICogVGhlIGdyb3VwaW5nIGV4cHJlc3Npb25zIHRoYXQgYXBw ZWFyIGluIGdyb3VwaW5nIGNsYXVzZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgR3JvdXBFeHBySW5m bworeworCXBnX25vZGVfYXR0cihub19yZWFkLCBub19xdWVyeV9qdW1ibGUpCisKKwlOb2RlVGFn CQl0eXBlOworCisJLyogdGhlIHJlcHJlc2VudGVkIGV4cHJlc3Npb24gKi8KKwlFeHByCSAgICpl eHByOworCisJLyogdGhlIHRsZVNvcnRHcm91cFJlZiBvZiB0aGUgY29ycmVzcG9uZGluZyBTb3J0 R3JvdXBDbGF1c2UgKi8KKwlJbmRleAkJc29ydGdyb3VwcmVmOworCisJLyogYnRyZWUgb3BmYW1p bHkgZGVmaW5pbmcgdGhlIG9yZGVyaW5nICovCisJT2lkCQkJYnRyZWVfb3BmYW1pbHk7Cit9IEdy b3VwRXhwckluZm87CisKIC8qCiAgKiBBdCBydW50aW1lLCBQQVJBTV9FWEVDIHNsb3RzIGFyZSB1 c2VkIHRvIHBhc3MgdmFsdWVzIGFyb3VuZCBmcm9tIG9uZSBwbGFuCiAgKiBub2RlIHRvIGFub3Ro ZXIuICBUaGV5IGNhbiBiZSB1c2VkIHRvIHBhc3MgdmFsdWVzIGRvd24gaW50byBzdWJxdWVyaWVz IChmb3IKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggMGU4YTljOTRiYS4uMDQwYTA0N2I4MSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BhdGhzLmgKQEAgLTIxLDYgKzIxLDcgQEAKICAqIGFsbHBhdGhzLmMKICAqLwog ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2dlcW87CitleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfZWFnZXJfYWdncmVnYXRlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBnZXFv X3RocmVzaG9sZDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWluX3BhcmFsbGVsX3RhYmxlX3Nj YW5fc2l6ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWluX3BhcmFsbGVsX2luZGV4X3NjYW5f c2l6ZTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKaW5kZXggZjJlM2ZhNGMyZS4uNDJlMGYzNzg1 OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKKysrIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKQEAgLTczLDYgKzczLDcgQEAgZXh0ZXJuIHZv aWQgYWRkX290aGVyX3JlbHNfdG9fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZv aWQgYnVpbGRfYmFzZV9yZWxfdGxpc3RzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpmaW5hbF90 bGlzdCk7CiBleHRlcm4gdm9pZCBhZGRfdmFyc190b190YXJnZXRsaXN0KFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICp2YXJzLAogCQkJCQkJCQkgICBSZWxpZHMgd2hlcmVfbmVlZGVkKTsKK2V4dGVy biB2b2lkIHNldHVwX2VhZ2VyX2FnZ3JlZ2F0aW9uKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVy biB2b2lkIGZpbmRfbGF0ZXJhbF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVy biB2b2lkIGNyZWF0ZV9sYXRlcmFsX2pvaW5faW5mbyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRl cm4gTGlzdCAqZGVjb25zdHJ1Y3Rfam9pbnRyZWUoUGxhbm5lckluZm8gKnJvb3QpOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCA5YmU3YWNhMmI4Li5hODNhNDFiMGY4 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTEzLDYgKzExMyw3 IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtl ICdlbmFibGUlJzsKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQog IGVuYWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2JpdG1hcHNjYW4g ICAgICAgICAgICAgIHwgb24KKyBlbmFibGVfZWFnZXJfYWdncmVnYXRlICAgICAgICAgfCBvZmYK ICBlbmFibGVfZ2F0aGVybWVyZ2UgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9ncm91cF9ieV9y ZW9yZGVyaW5nICAgICB8IG9uCiAgZW5hYmxlX2hhc2hhZ2cgICAgICAgICAgICAgICAgIHwgb24K QEAgLTEzNCw3ICsxMzUsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdz IHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAg ICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90 aWRzY2FuICAgICAgICAgICAgICAgICB8IG9uCi0oMjMgcm93cykKKygyNCByb3dzKQogCiAtLSBU aGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVz Lgogc2VsZWN0IHR5cGUsIGNvdW50KCopID4gMCBhcyBvayBGUk9NIHBnX3dhaXRfZXZlbnRzCi0t IAoyLjMxLjAKCg== --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0006-Build-grouped-relations-out-of-base-relations.patch" Content-Disposition: attachment; filename="v1-0006-Build-grouped-relations-out-of-base-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7s15 RnJvbSA0ZDU2Mzk1NTVjYjE0ZmE3NGYyMGU2MWJhNzljMTU1ZWM5YmU4YjIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAyOCBGZWIgMjAyNCAxMDowMzo0MSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg Ni85XSBCdWlsZCBncm91cGVkIHJlbGF0aW9ucyBvdXQgb2YgYmFzZSByZWxhdGlvbnMKClRoaXMg Y29tbWl0IGJ1aWxkcyBncm91cGVkIHJlbGF0aW9ucyBmb3IgZWFjaCBiYXNlIHJlbGF0aW9uIGlm IHBvc3NpYmxlLAphbmQgZ2VuZXJhdGVzIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBl ZCBiYXNlIHJlbGF0aW9ucy4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRo cy5jIHwgIDkxICsrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgIHwgMTAxICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCAgICAgIHwgICA0ICsKIDMgZmlsZXMgY2hhbmdlZCwg MTk2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRl eCBmNDdhZDA0ODQ2Li5lYTIzNDFkMTEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBh dGhzLmMKQEAgLTk2LDYgKzk2LDcgQEAgam9pbl9zZWFyY2hfaG9va190eXBlIGpvaW5fc2VhcmNo X2hvb2sgPSBOVUxMOwogCiBzdGF0aWMgdm9pZCBzZXRfYmFzZV9yZWxfY29uc2lkZXJfc3RhcnR1 cChQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRfYmFzZV9yZWxfc2l6ZXMoUGxh bm5lckluZm8gKnJvb3QpOworc3RhdGljIHZvaWQgc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMoUGxh bm5lckluZm8gKnJvb3QpOwogc3RhdGljIHZvaWQgc2V0X2Jhc2VfcmVsX3BhdGhsaXN0cyhQbGFu bmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRfcmVsX3NpemUoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCSBJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0 ZSk7CkBAIC0xMjAsNiArMTIxLDcgQEAgc3RhdGljIHZvaWQgc2V0X2FwcGVuZF9yZWxfc2l6ZShQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQlJbmRleCBydGksIFJh bmdlVGJsRW50cnkgKnJ0ZSk7CiBzdGF0aWMgdm9pZCBzZXRfYXBwZW5kX3JlbF9wYXRobGlzdChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJSW5kZXggcnRpLCBS YW5nZVRibEVudHJ5ICpydGUpOworc3RhdGljIHZvaWQgc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0 KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpOwogc3RhdGljIHZvaWQgZ2VuZXJh dGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkJCQkJCQkJCSBMaXN0ICpsaXZlX2NoaWxkcmVscywKIAkJCQkJCQkJCQkgTGlzdCAqYWxs X2NoaWxkX3BhdGhrZXlzKTsKQEAgLTE4OCw2ICsxOTAsMTEgQEAgbWFrZV9vbmVfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKIAkgKi8KIAlzZXRfYmFzZV9yZWxfc2l6ZXMo cm9vdCk7CiAKKwkvKgorCSAqIEJ1aWxkIGdyb3VwZWQgYmFzZSByZWxhdGlvbnMgZm9yIGVhY2gg YmFzZSByZWwgaWYgcG9zc2libGUuCisJICovCisJc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMocm9v dCk7CisKIAkvKgogCSAqIFdlIHNob3VsZCBub3cgaGF2ZSBzaXplIGVzdGltYXRlcyBmb3IgZXZl cnkgYWN0dWFsIHRhYmxlIGludm9sdmVkIGluCiAJICogdGhlIHF1ZXJ5LCBhbmQgd2UgYWxzbyBr bm93IHdoaWNoIGlmIGFueSBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZQpAQCAtMzI5LDYgKzMz Niw1OSBAQCBzZXRfYmFzZV9yZWxfc2l6ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJfQogfQogCisv KgorICogc2V0dXBfYmFzZV9ncm91cGVkX3JlbHMKKyAqCSAgRm9yIGVhY2ggInBsYWluIiBiYXNl IHJlbGF0aW9uIGJ1aWxkIGEgZ3JvdXBlZCBiYXNlIHJlbGF0aW9uIGlmIGVhZ2VyCisgKgkgIGFn Z3JlZ2F0aW9uIGlzIHBvc3NpYmxlIGFuZCBpZiB0aGlzIHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdy b3VwZWQgcGF0aHMuCisgKi8KK3N0YXRpYyB2b2lkCitzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQ bGFubmVySW5mbyAqcm9vdCkKK3sKKwlJbmRleAkJcnRpOworCisJLyoKKwkgKiBJZiB0aGVyZSBh cmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdl cgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdn X2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQor CQlyZXR1cm47CisKKwkvKgorCSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIG9ubHkgbWFrZXMgc2Vuc2Ug aWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgcmVscyBpbgorCSAqIHRoZSBxdWVyeS4KKwkgKi8K KwlpZiAoYm1zX21lbWJlcnNoaXAocm9vdC0+YWxsX2Jhc2VyZWxzKSAhPSBCTVNfTVVMVElQTEUp CisJCXJldHVybjsKKworCWZvciAocnRpID0gMTsgcnRpIDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJh eV9zaXplOyBydGkrKykKKwl7CisJCVJlbE9wdEluZm8JICAgKnJlbCA9IHJvb3QtPnNpbXBsZV9y ZWxfYXJyYXlbcnRpXTsKKwkJUmVsT3B0SW5mbwkgICAqcmVsX2dyb3VwZWQ7CisJCVJlbEFnZ0lu Zm8JICAgKmFnZ19pbmZvOworCisJCS8qIHRoZXJlIG1heSBiZSBlbXB0eSBzbG90cyBjb3JyZXNw b25kaW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKHJlbCA9PSBOVUxMKQorCQkJY29u dGludWU7CisKKwkJQXNzZXJ0KHJlbC0+cmVsaWQgPT0gcnRpKTsgLyogc2FuaXR5IGNoZWNrIG9u IGFycmF5ICovCisKKwkJLyoKKwkJICogSWdub3JlIFJURXMgdGhhdCBhcmUgbm90IHNpbXBsZSBy ZWxzLiAgTm90ZSB0aGF0IHdlIG5lZWQgdG8gY29uc2lkZXIKKwkJICogIm90aGVyIHJlbHMiIGhl cmUuCisJCSAqLworCQlpZiAoIUlTX1NJTVBMRV9SRUwocmVsKSkKKwkJCWNvbnRpbnVlOworCisJ CXJlbF9ncm91cGVkID0gYnVpbGRfc2ltcGxlX2dyb3VwZWRfcmVsKHJvb3QsIHJlbC0+cmVsaWQs ICZhZ2dfaW5mbyk7CisJCWlmIChyZWxfZ3JvdXBlZCkKKwkJeworCQkJLyogTWFrZSB0aGUgZ3Jv dXBlZCByZWxhdGlvbiBhdmFpbGFibGUgZm9yIGpvaW5pbmcuICovCisJCQlhZGRfZ3JvdXBlZF9y ZWwocm9vdCwgcmVsX2dyb3VwZWQsIGFnZ19pbmZvKTsKKwkJfQorCX0KK30KKwogLyoKICAqIHNl dF9iYXNlX3JlbF9wYXRobGlzdHMKICAqCSAgRmluZHMgYWxsIHBhdGhzIGF2YWlsYWJsZSBmb3Ig c2Nhbm5pbmcgZWFjaCBiYXNlLXJlbGF0aW9uIGVudHJ5LgpAQCAtNTY1LDYgKzYyNSwxNSBAQCBz ZXRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJLyog Tm93IGZpbmQgdGhlIGNoZWFwZXN0IG9mIHRoZSBwYXRocyBmb3IgdGhpcyByZWwgKi8KIAlzZXRf Y2hlYXBlc3QocmVsKTsKIAorCS8qCisJICogSWYgYSBncm91cGVkIHJlbGF0aW9uIGZvciB0aGlz IHJlbCBleGlzdHMsIGJ1aWxkIHBhcnRpYWwgYWdncmVnYXRpb24KKwkgKiBwYXRocyBmb3IgaXQu CisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBoYXBwZW4gYWZ0ZXIgd2UndmUgY2Fs bGVkIHNldF9jaGVhcGVzdCgpIGZvcgorCSAqIHRoaXMgYmFzZSByZWwsIGJlY2F1c2Ugd2UgbmVl ZCBpdHMgY2hlYXBlc3QgcGF0aHMuCisJICovCisJc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0KHJv b3QsIHJlbCk7CisKICNpZmRlZiBPUFRJTUlaRVJfREVCVUcKIAlwcHJpbnQocmVsKTsKICNlbmRp ZgpAQCAtMTI5Miw2ICsxMzYxLDI4IEBAIHNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwocm9v dCwgcmVsLCBsaXZlX2NoaWxkcmVscyk7CiB9CiAKKy8qCisgKiBzZXRfZ3JvdXBlZF9yZWxfcGF0 aGxpc3QKKyAqCSAgSWYgYSBncm91cGVkIHJlbGF0aW9uIGZvciB0aGUgZ2l2ZW4gJ3JlbCcgZXhp c3RzLCBidWlsZCBwYXJ0aWFsCisgKgkgIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciBpdC4KKyAqLwor c3RhdGljIHZvaWQKK3NldF9ncm91cGVkX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqcmVsKQoreworCVJlbE9wdEluZm8gICAqcmVsX2dyb3VwZWQ7CisJUmVsQWdn SW5mbyAgICphZ2dfaW5mbzsKKworCS8qIEFkZCBwYXRocyB0byB0aGUgZ3JvdXBlZCBiYXNlIHJl bGF0aW9uIGlmIG9uZSBleGlzdHMuICovCisJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVs KHJvb3QsIHJlbC0+cmVsaWRzLAorCQkJCQkJCQkgICAmYWdnX2luZm8pOworCWlmIChyZWxfZ3Jv dXBlZCkKKwl7CisJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIHJl bCwKKwkJCQkJCQkgICBhZ2dfaW5mbyk7CisJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJ fQorfQorCiAKIC8qCiAgKiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcmVsbm9kZS5jCmluZGV4IGU3ZjQ2NWVmN2IuLjgzY2RiYjM4YmMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxp bWl0cy5oPgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL2FwcGVuZGluZm8uaCIKQEAgLTI3LDEyICsyOCwxNSBAQAogI2luY2x1ZGUgIm9wdGlt aXplci9wYXRocy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFjZWhvbGRlci5oIgogI2luY2x1 ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIK ICNpbmNsdWRlICJvcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3RsaXN0LmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKKyNpbmNsdWRlICJw YXJzZXIvcGFyc2Vfb3Blci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgog I2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK KyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5oIgogCiAKIC8qCkBAIC00MTEsNiArNDE1LDEwMyBA QCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdElu Zm8gKnBhcmVudCkKIAlyZXR1cm4gcmVsOwogfQogCisvKgorICogYnVpbGRfc2ltcGxlX2dyb3Vw ZWRfcmVsCisgKgkgIENvbnN0cnVjdCBhIG5ldyBSZWxPcHRJbmZvIGZvciBhIGdyb3VwZWQgYmFz ZSByZWxhdGlvbiBvdXQgb2YgYW4gZXhpc3RpbmcKKyAqCSAgbm9uLWdyb3VwZWQgYmFzZSByZWxh dGlvbi4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgbmV3IFJlbE9wdEluZm8gaXMgcmV0dXJuZWQg YW5kIHRoZSBjb3JyZXNwb25kaW5nIFJlbEFnZ0luZm8KKyAqIGlzIHN0b3JlZCBpbiAqYWdnX2lu Zm9fcC4KKyAqLworUmVsT3B0SW5mbyAqCitidWlsZF9zaW1wbGVfZ3JvdXBlZF9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCwKKwkJCQkJCSBSZWxBZ2dJbmZvICoqYWdnX2luZm9fcCkK K3sKKwlSZWxPcHRJbmZvCSAgICpyZWxfcGxhaW47CisJUmVsT3B0SW5mbwkgICAqcmVsX2dyb3Vw ZWQ7CisJUmVsQWdnSW5mbwkgICAqYWdnX2luZm87CisKKwkvKgorCSAqIFdlIHNob3VsZCBoYXZl IGF2YWlsYWJsZSBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25z LAorCSAqIG90aGVyd2lzZSB3ZSBjYW5ub3QgcmVhY2ggaGVyZS4KKwkgKi8KKwlBc3NlcnQocm9v dC0+YWdnX2NsYXVzZV9saXN0ICE9IE5JTCk7CisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlz dCAhPSBOSUwpOworCisJcmVsX3BsYWluID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyZWxpZF07 CisJQXNzZXJ0KHJlbF9wbGFpbiAhPSBOVUxMKTsKKwlBc3NlcnQoSVNfU0lNUExFX1JFTChyZWxf cGxhaW4pKTsKKworCS8qIG5vdGhpbmcgdG8gZG8gZm9yIGR1bW15IHJlbCAqLworCWlmIChJU19E VU1NWV9SRUwocmVsX3BsYWluKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFByZXBhcmUg dGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gY3JlYXRlIGdyb3VwZWQgcGF0aHMgZm9yIHRoaXMg YmFzZQorCSAqIHJlbGF0aW9uLgorCSAqLworCWFnZ19pbmZvID0gY3JlYXRlX3JlbF9hZ2dfaW5m byhyb290LCByZWxfcGxhaW4pOworCWlmIChhZ2dfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gTlVM TDsKKworCS8qIGJ1aWxkIGEgZ3JvdXBlZCByZWxhdGlvbiBvdXQgb2YgdGhlIHBsYWluIHJlbGF0 aW9uICovCisJcmVsX2dyb3VwZWQgPSBidWlsZF9ncm91cGVkX3JlbChyb290LCByZWxfcGxhaW4p OworCXJlbF9ncm91cGVkLT5yZWx0YXJnZXQgPSBhZ2dfaW5mby0+dGFyZ2V0OworCXJlbF9ncm91 cGVkLT5yb3dzID0gYWdnX2luZm8tPmdyb3VwZWRfcm93czsKKworCS8qIHJldHVybiB0aGUgUmVs QWdnSW5mbyBzdHJ1Y3R1cmUgKi8KKwkqYWdnX2luZm9fcCA9IGFnZ19pbmZvOworCisJcmV0dXJu IHJlbF9ncm91cGVkOworfQorCisvKgorICogYnVpbGRfZ3JvdXBlZF9yZWwKKyAqCSAgQnVpbGQg YSBncm91cGVkIHJlbGF0aW9uIGJ5IGZsYXQgY29weWluZyBhIHBsYWluIHJlbGF0aW9uIGFuZCBy ZXNldHRpbmcKKyAqCSAgdGhlIG5lY2Vzc2FyeSBmaWVsZHMuCisgKi8KK1JlbE9wdEluZm8gKgor YnVpbGRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbF9wbGFp bikKK3sKKwlSZWxPcHRJbmZvICAgKnJlbF9ncm91cGVkOworCisJcmVsX2dyb3VwZWQgPSBtYWtl Tm9kZShSZWxPcHRJbmZvKTsKKwltZW1jcHkocmVsX2dyb3VwZWQsIHJlbF9wbGFpbiwgc2l6ZW9m KFJlbE9wdEluZm8pKTsKKworCS8qCisJICogY2xlYXIgcGF0aCBpbmZvCisJICovCisJcmVsX2dy b3VwZWQtPnBhdGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5wcGlsaXN0ID0gTklMOworCXJl bF9ncm91cGVkLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5jaGVhcGVz dF9zdGFydHVwX3BhdGggPSBOVUxMOworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF90b3RhbF9wYXRo ID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGggPSBOVUxMOworCXJl bF9ncm91cGVkLT5jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzID0gTklMOworCisJLyoKKwkg KiBjbGVhciBwYXJ0aXRpb24gaW5mbworCSAqLworCXJlbF9ncm91cGVkLT5wYXJ0X3NjaGVtZSA9 IE5VTEw7CisJcmVsX2dyb3VwZWQtPm5wYXJ0cyA9IC0xOworCXJlbF9ncm91cGVkLT5ib3VuZGlu Zm8gPSBOVUxMOworCXJlbF9ncm91cGVkLT5wYXJ0Ym91bmRzX21lcmdlZCA9IGZhbHNlOworCXJl bF9ncm91cGVkLT5wYXJ0aXRpb25fcXVhbCA9IE5JTDsKKwlyZWxfZ3JvdXBlZC0+cGFydF9yZWxz ID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+bGl2ZV9wYXJ0cyA9IE5VTEw7CisJcmVsX2dyb3VwZWQt PmFsbF9wYXJ0cmVscyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPnBhcnRleHBycyA9IE5VTEw7CisJ cmVsX2dyb3VwZWQtPm51bGxhYmxlX3BhcnRleHBycyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPmNv bnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbiA9IGZhbHNlOworCisJLyoKKwkgKiBjbGVhciBzaXpl IGVzdGltYXRlcworCSAqLworCXJlbF9ncm91cGVkLT5yb3dzID0gMDsKKworCXJldHVybiByZWxf Z3JvdXBlZDsKK30KKwogLyoKICAqIGZpbmRfYmFzZV9yZWwKICAqCSAgRmluZCBhIGJhc2Ugb3Ig b3RoZXJyZWwgcmVsYXRpb24gZW50cnksIHdoaWNoIG11c3QgYWxyZWFkeSBleGlzdC4KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmgKaW5kZXggOGQwM2NlMmM1Ny4uNmI4NTZhNWU3NyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BhdGhub2RlLmgKQEAgLTMwNiw2ICszMDYsMTAgQEAgZXh0ZXJuIHZvaWQgc2V0dXBf c2ltcGxlX3JlbF9hcnJheXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgZXhwYW5k X3BsYW5uZXJfYXJyYXlzKFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpOwogZXh0ZXJu IFJlbE9wdEluZm8gKmJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxp ZCwKIAkJCQkJCQkJCVJlbE9wdEluZm8gKnBhcmVudCk7CitleHRlcm4gUmVsT3B0SW5mbyAqYnVp bGRfc2ltcGxlX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJ CQkJCQkJCVJlbEFnZ0luZm8gKiphZ2dfaW5mb19wKTsKK2V4dGVybiBSZWxPcHRJbmZvICpidWls ZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBSZWxPcHRJbmZvICpy ZWxfcGxhaW4pOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWwoUGxhbm5lckluZm8g KnJvb3QsIGludCByZWxpZCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbF9ub2Vy cihQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5k X2Jhc2VfcmVsX2lnbm9yZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwotLSAK Mi4zMS4wCgo= --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0007-Build-grouped-relations-out-of-join-relations.patch" Content-Disposition: attachment; filename="v1-0007-Build-grouped-relations-out-of-join-relations.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7s46 RnJvbSA0MjljYWI0MmVlOTRhODhlZWY3OWRmYjM1NzVkZWQzNWI4MDU2YTFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMzozMzowOSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg Ny85XSBCdWlsZCBncm91cGVkIHJlbGF0aW9ucyBvdXQgb2Ygam9pbiByZWxhdGlvbnMKClRoaXMg Y29tbWl0IGJ1aWxkcyBncm91cGVkIHJlbGF0aW9ucyBmb3IgZWFjaCBqdXN0LXByb2Nlc3NlZCBq b2luCnJlbGF0aW9uIGlmIHBvc3NpYmxlLCBhbmQgZ2VuZXJhdGVzIGFnZ3JlZ2F0aW9uIHBhdGhz IGZvciB0aGUgZ3JvdXBlZApqb2luIHJlbGF0aW9ucy4KCklmIHdlIGFyZSBqb2luaW5nIHJlbDEg YW5kIHJlbDIsIHRoZSBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQKam9pbiByZWxh dGlvbiBhcmUgZ2VuZXJhdGVkIGJ5IDEpIGpvaW5pbmcgdGhlIGdyb3VwZWQgcGF0aHMgb2YgcmVs MSB0bwp0aGUgcGxhaW4gcGF0aHMgb2YgcmVsMiwgb3Igam9pbmluZyB0aGUgZ3JvdXBlZCBwYXRo cyBvZiByZWwyIHRvIHRoZQpwbGFpbiBwYXRocyBvZiByZWwxLCBhbmQgMikgYWRkaW5nIHNvcnRl ZCBhbmQgaGFzaGVkIHBhcnRpYWwgYWdncmVnYXRpb24KcGF0aHMgb24gdG9wIG9mIHBhdGhzIG9m IHRoZSBwbGFpbiBqb2luIHJlbCBleGNlcHQgZm9yIHRoZSB0b3Btb3N0IGpvaW4KcmVsLgoKVGhp cyBjb21taXQgYWxzbyBtYWtlcyB0aGUgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhlIHRvcG1vc3Qg am9pbiByZWwgYWN0CmFzIHRoZSB1cHBlciByZWwgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2Yg cGFydGlhbCBhZ2dyZWdhdGlvbiwgc28gdGhhdAp3ZSBjYW4gYWRkIHRoZSBmaW5hbCBhZ2dyZWdh dGlvbiBvbiB0b3Agb2YgdGhhdC4KClRoaXMgY29tbWl0IGFsc28gbWFrZXMgZWFnZXIgYWdncmVn YXRpb24gd29yayBmb3IgcGFydGl0aW9ud2lzZSBqb2luIGFuZApmb3IgZ2Vxby4KClN0YXJ0aW5n IGZyb20gdGhpcyBjb21taXQsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBzZWUgcGxhbnMgd2l0aCBl YWdlcgphZ2dyZWdhdGlvbi4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2 YWwuYyAgfCAgODQgKysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2FsbHBhdGhzLmMgICB8ICA0OCArKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9qb2lucmVscy5jICAgfCAxMTUgKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgMzUgKysrKysrLS0KIHNyYy9iYWNrZW5k L29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYyB8ICA2NCArKysrKysrKysrKysrCiA1IGZpbGVz IGNoYW5nZWQsIDMyMCBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9nZXFvL2dlcW9fZXZhbC5jCmluZGV4IDExNDExNTY4OTkuLjI3ODg1N2Q3NjcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jCkBAIC02MCw4ICs2MCwxMiBAQCBn ZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUgKnRvdXIsIGludCBudW1fZ2VuZSkKIAlN ZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlSZWxPcHRJbmZvICpqb2lucmVsOwogCUNvc3QJCWZpdG5l c3M7Ci0JaW50CQkJc2F2ZWxlbmd0aDsKLQlzdHJ1Y3QgSFRBQiAqc2F2ZWhhc2g7CisJaW50CQkJ c2F2ZWxlbmd0aF9qb2luX3JlbDsKKwlzdHJ1Y3QgSFRBQiAqc2F2ZWhhc2hfam9pbl9yZWw7CisJ aW50CQkJc2F2ZWxlbmd0aF9ncm91cGVkX3JlbDsKKwlzdHJ1Y3QgSFRBQiAqc2F2ZWhhc2hfZ3Jv dXBlZF9yZWw7CisJaW50CQkJc2F2ZWxlbmd0aF9ncm91cGVkX2luZm87CisJc3RydWN0IEhUQUIg KnNhdmVoYXNoX2dyb3VwZWRfaW5mbzsKIAogCS8qCiAJICogQ3JlYXRlIGEgcHJpdmF0ZSBtZW1v cnkgY29udGV4dCB0aGF0IHdpbGwgaG9sZCBhbGwgdGVtcCBzdG9yYWdlCkBAIC03OCwyNSArODIs MzggQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5lICp0b3VyLCBpbnQgbnVtX2dl bmUpCiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG15Y29udGV4dCk7CiAKIAkvKgot CSAqIGdpbW1lX3RyZWUgd2lsbCBhZGQgZW50cmllcyB0byByb290LT5qb2luX3JlbF9saXN0LCB3 aGljaCBtYXkgb3IgbWF5Ci0JICogbm90IGFscmVhZHkgY29udGFpbiBzb21lIGVudHJpZXMuICBU aGUgbmV3bHkgYWRkZWQgZW50cmllcyB3aWxsIGJlCi0JICogcmVjeWNsZWQgYnkgdGhlIE1lbW9y eUNvbnRleHREZWxldGUgYmVsb3csIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlCi0JICogbGlz dCBpcyByZXN0b3JlZCB0byBpdHMgZm9ybWVyIHN0YXRlIGJlZm9yZSBleGl0aW5nLiAgV2UgY2Fu IGRvIHRoaXMgYnkKLQkgKiB0cnVuY2F0aW5nIHRoZSBsaXN0IHRvIGl0cyBvcmlnaW5hbCBsZW5n dGguICBOT1RFIHRoaXMgYXNzdW1lcyB0aGF0IGFueQotCSAqIGFkZGVkIGVudHJpZXMgYXJlIGFw cGVuZGVkIGF0IHRoZSBlbmQhCisJICogZ2ltbWVfdHJlZSB3aWxsIGFkZCBlbnRyaWVzIHRvIHJv b3QtPmpvaW5fcmVsX2xpc3QsIHJvb3QtPmFnZ19pbmZvX2xpc3QKKwkgKiBhbmQgcm9vdC0+dXBw ZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10sIHdoaWNoIG1heSBvciBtYXkgbm90 CisJICogYWxyZWFkeSBjb250YWluIHNvbWUgZW50cmllcy4gIFRoZSBuZXdseSBhZGRlZCBlbnRy aWVzIHdpbGwgYmUgcmVjeWNsZWQKKwkgKiBieSB0aGUgTWVtb3J5Q29udGV4dERlbGV0ZSBiZWxv dywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCBlYWNoIGxpc3Qgb2YKKwkgKiB0aGUgUmVsSW5mb0xp c3Qgc3RydWN0dXJlcyBpcyByZXN0b3JlZCB0byBpdHMgZm9ybWVyIHN0YXRlIGJlZm9yZQorCSAq IGV4aXRpbmcuICBXZSBjYW4gZG8gdGhpcyBieSB0cnVuY2F0aW5nIGVhY2ggbGlzdCB0byBpdHMg b3JpZ2luYWwgbGVuZ3RoLgorCSAqIE5PVEUgdGhpcyBhc3N1bWVzIHRoYXQgYW55IGFkZGVkIGVu dHJpZXMgYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQhCiAJICoKLQkgKiBXZSBhbHNvIG11c3QgdGFr ZSBjYXJlIG5vdCB0byBtZXNzIHVwIHRoZSBvdXRlciBqb2luX3JlbF9saXN0LT5oYXNoLCBpZgot CSAqIHRoZXJlIGlzIG9uZS4gIFdlIGNhbiBkbyB0aGlzIGJ5IGp1c3QgdGVtcG9yYXJpbHkgc2V0 dGluZyB0aGUgbGluayB0bwotCSAqIE5VTEwuICAoSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBlbm91 Z2ggam9pbiByZWxzLCB3aGljaCB3ZSB2ZXJ5IGxpa2VseQotCSAqIGFyZSwgYSBuZXcgaGFzaCB0 YWJsZSB3aWxsIGdldCBidWlsdCBhbmQgdXNlZCBsb2NhbGx5LikKKwkgKiBXZSBhbHNvIG11c3Qg dGFrZSBjYXJlIG5vdCB0byBtZXNzIHVwIHRoZSBvdXRlciBoYXNoIHRhYmxlcyBvZiB0aGUKKwkg KiBSZWxJbmZvTGlzdCBzdHJ1Y3R1cmVzLCBpZiBhbnkuICBXZSBjYW4gZG8gdGhpcyBieSBqdXN0 IHRlbXBvcmFyaWx5CisJICogc2V0dGluZyBlYWNoIGxpbmsgdG8gTlVMTC4gIChJZiB3ZSBhcmUg ZGVhbGluZyB3aXRoIGVub3VnaCBqb2luIHJlbHMsCisJICogd2hpY2ggd2UgdmVyeSBsaWtlbHkg YXJlLCBuZXcgaGFzaCB0YWJsZXMgd2lsbCBnZXQgYnVpbHQgYW5kIHVzZWQKKwkgKiBsb2NhbGx5 LikKIAkgKgogCSAqIGpvaW5fcmVsX2xldmVsW10gc2hvdWxkbid0IGJlIGluIHVzZSwgc28ganVz dCBBc3NlcnQgaXQgaXNuJ3QuCiAJICovCi0Jc2F2ZWxlbmd0aCA9IGxpc3RfbGVuZ3RoKHJvb3Qt PmpvaW5fcmVsX2xpc3QtPml0ZW1zKTsKLQlzYXZlaGFzaCA9IHJvb3QtPmpvaW5fcmVsX2xpc3Qt Pmhhc2g7CisJc2F2ZWxlbmd0aF9qb2luX3JlbCA9IGxpc3RfbGVuZ3RoKHJvb3QtPmpvaW5fcmVs X2xpc3QtPml0ZW1zKTsKKwlzYXZlaGFzaF9qb2luX3JlbCA9IHJvb3QtPmpvaW5fcmVsX2xpc3Qt Pmhhc2g7CisKKwlzYXZlbGVuZ3RoX2dyb3VwZWRfcmVsID0KKwkJbGlzdF9sZW5ndGgocm9vdC0+ dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10uaXRlbXMpOworCXNhdmVoYXNo X2dyb3VwZWRfcmVsID0KKwkJcm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQ X0FHR10uaGFzaDsKKworCXNhdmVsZW5ndGhfZ3JvdXBlZF9pbmZvID0gbGlzdF9sZW5ndGgocm9v dC0+YWdnX2luZm9fbGlzdC0+aXRlbXMpOworCXNhdmVoYXNoX2dyb3VwZWRfaW5mbyA9IHJvb3Qt PmFnZ19pbmZvX2xpc3QtPmhhc2g7CisKIAlBc3NlcnQocm9vdC0+am9pbl9yZWxfbGV2ZWwgPT0g TlVMTCk7CiAKIAlyb290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gTlVMTDsKKwlyb290LT51cHBl cl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHXS5oYXNoID0gTlVMTDsKKwlyb290LT5h Z2dfaW5mb19saXN0LT5oYXNoID0gTlVMTDsKIAogCS8qIGNvbnN0cnVjdCB0aGUgYmVzdCBwYXRo IGZvciB0aGUgZ2l2ZW4gY29tYmluYXRpb24gb2YgcmVsYXRpb25zICovCiAJam9pbnJlbCA9IGdp bW1lX3RyZWUocm9vdCwgdG91ciwgbnVtX2dlbmUpOwpAQCAtMTE4LDEyICsxMzUsMjIgQEAgZ2Vx b19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5lICp0b3VyLCBpbnQgbnVtX2dlbmUpCiAJCWZp dG5lc3MgPSBEQkxfTUFYOwogCiAJLyoKLQkgKiBSZXN0b3JlIGpvaW5fcmVsX2xpc3QgdG8gaXRz IGZvcm1lciBzdGF0ZSwgYW5kIHB1dCBiYWNrIG9yaWdpbmFsCi0JICogaGFzaHRhYmxlIGlmIGFu eS4KKwkgKiBSZXN0b3JlIGVhY2ggb2YgdGhlIGxpc3QgaW4gam9pbl9yZWxfbGlzdCwgYWdnX2lu Zm9fbGlzdCBhbmQKKwkgKiB1cHBlcl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JPVVBfQUdHXSB0 byBpdHMgZm9ybWVyIHN0YXRlLCBhbmQgcHV0IGJhY2sKKwkgKiBvcmlnaW5hbCBoYXNodGFibGUg aWYgYW55LgogCSAqLwogCXJvb3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zID0gbGlzdF90cnVuY2F0 ZShyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcywKLQkJCQkJCQkJCQkJICAgc2F2ZWxlbmd0aCk7 Ci0Jcm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaCA9IHNhdmVoYXNoOworCQkJCQkJCQkJCQkgICBz YXZlbGVuZ3RoX2pvaW5fcmVsKTsKKwlyb290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gc2F2ZWhh c2hfam9pbl9yZWw7CisKKwlyb290LT51cHBlcl9yZWxzW1VQUEVSUkVMX1BBUlRJQUxfR1JPVVBf QUdHXS5pdGVtcyA9CisJCWxpc3RfdHJ1bmNhdGUocm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9Q QVJUSUFMX0dST1VQX0FHR10uaXRlbXMsCisJCQkJCSAgc2F2ZWxlbmd0aF9ncm91cGVkX3JlbCk7 CisJcm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10uaGFzaCA9IHNh dmVoYXNoX2dyb3VwZWRfcmVsOworCisJcm9vdC0+YWdnX2luZm9fbGlzdC0+aXRlbXMgPSBsaXN0 X3RydW5jYXRlKHJvb3QtPmFnZ19pbmZvX2xpc3QtPml0ZW1zLAorCQkJCQkJCQkJCQkgICBzYXZl bGVuZ3RoX2dyb3VwZWRfaW5mbyk7CisJcm9vdC0+YWdnX2luZm9fbGlzdC0+aGFzaCA9IHNhdmVo YXNoX2dyb3VwZWRfaW5mbzsKIAogCS8qIHJlbGVhc2UgYWxsIHRoZSBtZW1vcnkgYWNxdWlyZWQg d2l0aGluIGdpbW1lX3RyZWUgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKQEAg LTI3OSw2ICszMDYsMjcgQEAgbWVyZ2VfY2x1bXAoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNs dW1wcywgQ2x1bXAgKm5ld19jbHVtcCwgaW50IG51bV9nZW5lLAogCQkJCS8qIEZpbmQgYW5kIHNh dmUgdGhlIGNoZWFwZXN0IHBhdGhzIGZvciB0aGlzIGpvaW5yZWwgKi8KIAkJCQlzZXRfY2hlYXBl c3Qoam9pbnJlbCk7CiAKKwkJCQkvKgorCQkJCSAqIEV4Y2VwdCBmb3IgdGhlIHRvcG1vc3Qgc2Nh bi9qb2luIHJlbCwgY29uc2lkZXIgZ2VuZXJhdGluZworCQkJCSAqIHBhcnRpYWwgYWdncmVnYXRp b24gcGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uIG9uIHRvcCBvZiB0aGUKKwkJCQkgKiBw YXRocyBvZiB0aGlzIHJlbC4gIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUgY3JlYXRpbmcgcGF0aHMg Zm9yCisJCQkJICogdGhlIGdyb3VwZWQgcmVsYXRpb24sIHNvIHJ1biBzZXRfY2hlYXBlc3QoKS4K KwkJCQkgKi8KKwkJCQlpZiAoIWJtc19lcXVhbChqb2lucmVsLT5yZWxpZHMsIHJvb3QtPmFsbF9x dWVyeV9yZWxzKSkKKwkJCQl7CisJCQkJCVJlbE9wdEluZm8gICAqcmVsX2dyb3VwZWQ7CisJCQkJ CVJlbEFnZ0luZm8gICAqYWdnX2luZm87CisKKwkJCQkJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3Vw ZWRfcmVsKHJvb3QsIGpvaW5yZWwtPnJlbGlkcywKKwkJCQkJCQkJCQkJCSAgICZhZ2dfaW5mbyk7 CisJCQkJCWlmIChyZWxfZ3JvdXBlZCkKKwkJCQkJeworCQkJCQkJZ2VuZXJhdGVfZ3JvdXBlZF9w YXRocyhyb290LCByZWxfZ3JvdXBlZCwgam9pbnJlbCwKKwkJCQkJCQkJCQkJICAgYWdnX2luZm8p OworCQkJCQkJc2V0X2NoZWFwZXN0KHJlbF9ncm91cGVkKTsKKwkJCQkJfQorCQkJCX0KKwogCQkJ CS8qIEFic29yYiBuZXcgY2x1bXAgaW50byBvbGQgKi8KIAkJCQlvbGRfY2x1bXAtPmpvaW5yZWwg PSBqb2lucmVsOwogCQkJCW9sZF9jbHVtcC0+c2l6ZSArPSBuZXdfY2x1bXAtPnNpemU7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCBlYTIzNDFkMTEwLi40NDBhNWRhZWM3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTM4NjQsNiArMzg2NCwx MCBAQCBzdGFuZGFyZF9qb2luX3NlYXJjaChQbGFubmVySW5mbyAqcm9vdCwgaW50IGxldmVsc19u ZWVkZWQsIExpc3QgKmluaXRpYWxfcmVscykKIAkJICoKIAkJICogQWZ0ZXIgdGhhdCwgd2UncmUg ZG9uZSBjcmVhdGluZyBwYXRocyBmb3IgdGhlIGpvaW5yZWwsIHNvIHJ1bgogCQkgKiBzZXRfY2hl YXBlc3QoKS4KKwkJICoKKwkJICogSW4gYWRkaXRpb24sIHdlIGFsc28gcnVuIGdlbmVyYXRlX2dy b3VwZWRfcGF0aHMoKSBmb3IgdGhlIGdyb3VwZWQKKwkJICogcmVsYXRpb24gb2YgZWFjaCBqdXN0 LXByb2Nlc3NlZCBqb2lucmVsLCBhbmQgcnVuIHNldF9jaGVhcGVzdCgpIGZvcgorCQkgKiB0aGUg Z3JvdXBlZCByZWxhdGlvbiBhZnRlcndhcmRzLgogCQkgKi8KIAkJZm9yZWFjaChsYywgcm9vdC0+ am9pbl9yZWxfbGV2ZWxbbGV2XSkKIAkJewpAQCAtMzg4NCw2ICszODg4LDI3IEBAIHN0YW5kYXJk X2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZvICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAq aW5pdGlhbF9yZWxzKQogCQkJLyogRmluZCBhbmQgc2F2ZSB0aGUgY2hlYXBlc3QgcGF0aHMgZm9y IHRoaXMgcmVsICovCiAJCQlzZXRfY2hlYXBlc3QocmVsKTsKIAorCQkJLyoKKwkJCSAqIEV4Y2Vw dCBmb3IgdGhlIHRvcG1vc3Qgc2Nhbi9qb2luIHJlbCwgY29uc2lkZXIgZ2VuZXJhdGluZworCQkJ ICogcGFydGlhbCBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24g dG9wIG9mIHRoZQorCQkJICogcGF0aHMgb2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdyZSBk b25lIGNyZWF0aW5nIHBhdGhzIGZvcgorCQkJICogdGhlIGdyb3VwZWQgcmVsYXRpb24sIHNvIHJ1 biBzZXRfY2hlYXBlc3QoKS4KKwkJCSAqLworCQkJaWYgKCFibXNfZXF1YWwocmVsLT5yZWxpZHMs IHJvb3QtPmFsbF9xdWVyeV9yZWxzKSkKKwkJCXsKKwkJCQlSZWxPcHRJbmZvICAgKnJlbF9ncm91 cGVkOworCQkJCVJlbEFnZ0luZm8gICAqYWdnX2luZm87CisKKwkJCQlyZWxfZ3JvdXBlZCA9IGZp bmRfZ3JvdXBlZF9yZWwocm9vdCwgcmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJCSAgICZhZ2dfaW5m byk7CisJCQkJaWYgKHJlbF9ncm91cGVkKQorCQkJCXsKKwkJCQkJZ2VuZXJhdGVfZ3JvdXBlZF9w YXRocyhyb290LCByZWxfZ3JvdXBlZCwgcmVsLAorCQkJCQkJCQkJCSAgIGFnZ19pbmZvKTsKKwkJ CQkJc2V0X2NoZWFwZXN0KHJlbF9ncm91cGVkKTsKKwkJCQl9CisJCQl9CisKICNpZmRlZiBPUFRJ TUlaRVJfREVCVUcKIAkJCXBwcmludChyZWwpOwogI2VuZGlmCkBAIC00NzUyLDYgKzQ3NzcsMjkg QEAgZ2VuZXJhdGVfcGFydGl0aW9ud2lzZV9qb2luX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwpCiAJCWlmIChJU19EVU1NWV9SRUwoY2hpbGRfcmVsKSkKIAkJCWNvbnRp bnVlOwogCisJCS8qCisJCSAqIEV4Y2VwdCBmb3IgdGhlIHRvcG1vc3Qgc2Nhbi9qb2luIHJlbCwg Y29uc2lkZXIgZ2VuZXJhdGluZyBwYXJ0aWFsCisJCSAqIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0 aGUgZ3JvdXBlZCByZWxhdGlvbiBvbiB0b3Agb2YgdGhlIHBhdGhzIG9mCisJCSAqIHRoaXMgcGFy dGl0aW9uZWQgY2hpbGQtam9pbi4gIEFmdGVyIHRoYXQsIHdlJ3JlIGRvbmUgY3JlYXRpbmcgcGF0 aHMKKwkJICogZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uLCBzbyBydW4gc2V0X2NoZWFwZXN0KCku CisJCSAqLworCQlpZiAoIWJtc19lcXVhbChJU19PVEhFUl9SRUwocmVsKSA/CisJCQkJCSAgIHJl bC0+dG9wX3BhcmVudF9yZWxpZHMgOiByZWwtPnJlbGlkcywKKwkJCQkJICAgcm9vdC0+YWxsX3F1 ZXJ5X3JlbHMpKQorCQl7CisJCQlSZWxPcHRJbmZvICAgKnJlbF9ncm91cGVkOworCQkJUmVsQWdn SW5mbyAgICphZ2dfaW5mbzsKKworCQkJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJv b3QsIGNoaWxkX3JlbC0+cmVsaWRzLAorCQkJCQkJCQkJCSAgICZhZ2dfaW5mbyk7CisJCQlpZiAo cmVsX2dyb3VwZWQpCisJCQl7CisJCQkJZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocyhyb290LCByZWxf Z3JvdXBlZCwgY2hpbGRfcmVsLAorCQkJCQkJCQkJICAgYWdnX2luZm8pOworCQkJCXNldF9jaGVh cGVzdChyZWxfZ3JvdXBlZCk7CisJCQl9CisJCX0KKwogI2lmZGVmIE9QVElNSVpFUl9ERUJVRwog CQlwcHJpbnQoY2hpbGRfcmVsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5y ZWxzLmMKaW5kZXggNDc1MDU3OWIwYS4uYTllZjA4MTU5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9qb2lucmVscy5jCkBAIC0xNiwxMSArMTYsMTMgQEAKIAogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgIm9wdGltaXplci9hcHBlbmRpbmZvLmgiCisjaW5jbHVkZSAib3B0aW1p emVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvam9pbmluZm8uaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvcGF0aG5vZGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNs dWRlICJwYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCisjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIKIAogCiBzdGF0aWMgdm9pZCBtYWtlX3Jl bHNfYnlfY2xhdXNlX2pvaW5zKFBsYW5uZXJJbmZvICpyb290LApAQCAtMzUsNiArMzcsOSBAQCBz dGF0aWMgYm9vbCBoYXNfbGVnYWxfam9pbmNsYXVzZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsKTsKIHN0YXRpYyBib29sIHJlc3RyaWN0aW9uX2lzX2NvbnN0YW50X2ZhbHNlKExp c3QgKnJlc3RyaWN0bGlzdCwKIAkJCQkJCQkJCQkgIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJ CQkJCQkJICBib29sIG9ubHlfcHVzaGVkX2Rvd24pOworc3RhdGljIHZvaWQgbWFrZV9ncm91cGVk X2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLAorCQkJCQkJCQkg IFJlbE9wdEluZm8gKnJlbDIsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCSAgU3BlY2lh bEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJlc3RyaWN0bGlzdCk7CiBzdGF0aWMgdm9pZCBwb3B1 bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bDEsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsMiwgUmVsT3B0SW5mbyAqam9pbnJlbCwKIAkJ CQkJCQkJCQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0KTsKQEAg LTc1Myw2ICs3NTgsMTAgQEAgbWFrZV9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMikKIAkJcmV0dXJuIGpvaW5yZWw7CiAJfQogCisJ LyogQnVpbGQgYSBncm91cGVkIGpvaW4gcmVsYXRpb24gZm9yICdqb2lucmVsJyBpZiBwb3NzaWJs ZS4gKi8KKwltYWtlX2dyb3VwZWRfam9pbl9yZWwocm9vdCwgcmVsMSwgcmVsMiwgam9pbnJlbCwg c2ppbmZvLAorCQkJCQkJICByZXN0cmljdGxpc3QpOworCiAJLyogQWRkIHBhdGhzIHRvIHRoZSBq b2luIHJlbGF0aW9uLiAqLwogCXBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyhyb290LCByZWwx LCByZWwyLCBqb2lucmVsLCBzamluZm8sCiAJCQkJCQkJCXJlc3RyaWN0bGlzdCk7CkBAIC04NjQs NiArODczLDEwNyBAQCBhZGRfb3V0ZXJfam9pbnNfdG9fcmVsaWRzKFBsYW5uZXJJbmZvICpyb290 LCBSZWxpZHMgaW5wdXRfcmVsaWRzLAogCXJldHVybiBpbnB1dF9yZWxpZHM7CiB9CiAKKy8qCisg KiBtYWtlX2dyb3VwZWRfam9pbl9yZWwKKyAqCSAgQnVpbGQgYSBncm91cGVkIGpvaW4gcmVsYXRp b24gb3V0IG9mICdqb2lucmVsJyBpZiBlYWdlciBhZ2dyZWdhdGlvbiBpcworICoJICBwb3NzaWJs ZSBhbmQgdGhlICdqb2lucmVsJyBjYW4gcHJvZHVjZSBncm91cGVkIHBhdGhzLgorICoKKyAqIFdl IGFsc28gZ2VuZXJhdGUgcGFydGlhbCBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQg cmVsYXRpb24gYnkKKyAqIGpvaW5pbmcgdGhlIGdyb3VwZWQgcGF0aHMgb2YgJ3JlbDEnIHRvIHRo ZSBwbGFpbiBwYXRocyBvZiAncmVsMicsIG9yIGJ5CisgKiBqb2luaW5nIHRoZSBncm91cGVkIHBh dGhzIG9mICdyZWwyJyB0byB0aGUgcGxhaW4gcGF0aHMgb2YgJ3JlbDEnLgorICovCitzdGF0aWMg dm9pZAorbWFrZV9ncm91cGVkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwxLAorCQkJCQkgIFJlbE9wdEluZm8gKnJlbDIsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJ CQkJCSAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJlc3RyaWN0bGlzdCkKK3sKKwlS ZWxpZHMJCQlqb2lucmVsaWRzOworCVJlbE9wdEluZm8JICAgKnJlbF9ncm91cGVkOworCVJlbEFn Z0luZm8JICAgKmFnZ19pbmZvID0gTlVMTDsKKwlSZWxPcHRJbmZvCSAgICpyZWwxX2dyb3VwZWQ7 CisJUmVsT3B0SW5mbwkgICAqcmVsMl9ncm91cGVkOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUg bm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgor CSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2Ns YXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQly ZXR1cm47CisKKwlqb2lucmVsaWRzID0gYm1zX3VuaW9uKHJlbDEtPnJlbGlkcywgcmVsMi0+cmVs aWRzKTsKKwlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbGlkcywg JmFnZ19pbmZvKTsKKworCS8qCisJICogQ29uc3RydWN0IGEgbmV3IFJlbE9wdEluZm8gZm9yIHRo ZSBncm91cGVkIGpvaW4gcmVsYXRpb24gaWYgdGhlcmUgaXMgbm8KKwkgKiBleGlzdGluZyBvbmUu CisJICovCisJaWYgKHJlbF9ncm91cGVkID09IE5VTEwpCisJeworCQkvKgorCQkgKiBQcmVwYXJl IHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIHRvIGNyZWF0ZSBncm91cGVkIHBhdGhzIGZvciB0aGlz CisJCSAqIGpvaW4gcmVsYXRpb24uCisJCSAqLworCQlhZ2dfaW5mbyA9IGNyZWF0ZV9yZWxfYWdn X2luZm8ocm9vdCwgam9pbnJlbCk7CisJCWlmIChhZ2dfaW5mbyA9PSBOVUxMKQorCQkJcmV0dXJu OworCisJCS8qIGJ1aWxkIGEgZ3JvdXBlZCByZWxhdGlvbiBvdXQgb2YgdGhlIHBsYWluIHJlbGF0 aW9uICovCisJCXJlbF9ncm91cGVkID0gYnVpbGRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbCk7 CisJCXJlbF9ncm91cGVkLT5yZWx0YXJnZXQgPSBhZ2dfaW5mby0+dGFyZ2V0OworCQlyZWxfZ3Jv dXBlZC0+cm93cyA9IGFnZ19pbmZvLT5ncm91cGVkX3Jvd3M7CisKKwkJLyoKKwkJICogTWFrZSB0 aGUgZ3JvdXBlZCByZWxhdGlvbiBhdmFpbGFibGUgZm9yIGZ1cnRoZXIgam9pbmluZyBvciBmb3IK KwkJICogYWN0aW5nIGFzIHRoZSB1cHBlciByZWwgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2Yg cGFydGlhbAorCQkgKiBhZ2dyZWdhdGlvbi4KKwkJICovCisJCWFkZF9ncm91cGVkX3JlbChyb290 LCByZWxfZ3JvdXBlZCwgYWdnX2luZm8pOworCX0KKworCUFzc2VydChhZ2dfaW5mbyAhPSBOVUxM KTsKKworCS8qIHJldHJpZXZlIHRoZSBncm91cGVkIHJlbGF0aW9ucyBmb3IgdGhlIHR3byBpbnB1 dCByZWxzICovCisJcmVsMV9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwxLT5y ZWxpZHMsIE5VTEwpOworCXJlbDJfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgcmVs Mi0+cmVsaWRzLCBOVUxMKTsKKworCS8qIHdlIHNob3VsZCBub3Qgc2VlIGR1bW15IGdyb3VwZWQg cmVsYXRpb24gKi8KKwlBc3NlcnQocmVsMV9ncm91cGVkID09IE5VTEwgfHwgIUlTX0RVTU1ZX1JF TChyZWwxX2dyb3VwZWQpKTsKKwlBc3NlcnQocmVsMl9ncm91cGVkID09IE5VTEwgfHwgIUlTX0RV TU1ZX1JFTChyZWwyX2dyb3VwZWQpKTsKKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUncyBu byBncm91cGVkIHJlbGF0aW9uLiAqLworCWlmIChyZWwxX2dyb3VwZWQgPT0gTlVMTCAmJgorCQly ZWwyX2dyb3VwZWQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBKb2luIG9mIHR3byBn cm91cGVkIHJlbGF0aW9ucyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gIEluIHN1Y2ggYQor CSAqIGNhc2UsIGdyb3VwaW5nIG9mIG9uZSBzaWRlIHdvdWxkIGNoYW5nZSB0aGUgb2NjdXJyZW5j ZSBvZiB0aGUgb3RoZXIKKwkgKiBzaWRlJ3MgYWdncmVnYXRlIHRyYW5zaWVudCBzdGF0ZXMgb24g dGhlIGlucHV0IG9mIHRoZSBmaW5hbCBhZ2dyZWdhdGlvbi4KKwkgKiBUaGlzIGNhbiBiZSBoYW5k bGVkIGJ5IGFkanVzdGluZyB0aGUgdHJhbnNpZW50IHN0YXRlcywgYnV0IGl0J3Mgbm90CisJICog d29ydGggdGhlIGVmZm9ydCBmb3Igbm93LgorCSAqLworCWlmIChyZWwxX2dyb3VwZWQgIT0gTlVM TCAmJgorCQlyZWwyX2dyb3VwZWQgIT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogZ2VuZXJhdGUg cGFydGlhbCBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gKi8KKwlp ZiAocmVsMV9ncm91cGVkICE9IE5VTEwpCisJeworCQlzZXRfam9pbnJlbF9zaXplX2VzdGltYXRl cyhyb290LCByZWxfZ3JvdXBlZCwgcmVsMV9ncm91cGVkLCByZWwyLAorCQkJCQkJCQkgICBzamlu Zm8sIHJlc3RyaWN0bGlzdCk7CisJCXBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyhyb290LCBy ZWwxX2dyb3VwZWQsIHJlbDIsIHJlbF9ncm91cGVkLAorCQkJCQkJCQkJc2ppbmZvLCByZXN0cmlj dGxpc3QpOworCX0KKwllbHNlIGlmIChyZWwyX2dyb3VwZWQgIT0gTlVMTCkKKwl7CisJCXNldF9q b2lucmVsX3NpemVfZXN0aW1hdGVzKHJvb3QsIHJlbF9ncm91cGVkLCByZWwxLCByZWwyX2dyb3Vw ZWQsCisJCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKwkJcG9wdWxhdGVfam9pbnJl bF93aXRoX3BhdGhzKHJvb3QsIHJlbDEsIHJlbDJfZ3JvdXBlZCwgcmVsX2dyb3VwZWQsCisJCQkJ CQkJCQlzamluZm8sIHJlc3RyaWN0bGlzdCk7CisJfQorfQorCiAvKgogICogcG9wdWxhdGVfam9p bnJlbF93aXRoX3BhdGhzCiAgKgkgIEFkZCBwYXRocyB0byB0aGUgZ2l2ZW4gam9pbnJlbCBmb3Ig Z2l2ZW4gcGFpciBvZiBqb2luaW5nIHJlbGF0aW9ucy4gVGhlCkBAIC0xNjUzLDYgKzE3NjMsMTEg QEAgdHJ5X3BhcnRpdGlvbndpc2Vfam9pbihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAkJCQkJCSBhZGp1c3RfY2hpbGRfcmVsaWRzKGpvaW5y ZWwtPnJlbGlkcywKIAkJCQkJCQkJCQkJIG5hcHBpbmZvcywgYXBwaW5mb3MpKSk7CiAKKwkJLyog QnVpbGQgYSBncm91cGVkIGpvaW4gcmVsYXRpb24gZm9yICdjaGlsZF9qb2lucmVsJyBpZiBwb3Nz aWJsZSAqLworCQltYWtlX2dyb3VwZWRfam9pbl9yZWwocm9vdCwgY2hpbGRfcmVsMSwgY2hpbGRf cmVsMiwKKwkJCQkJCQkgIGNoaWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywKKwkJCQkJCQkgIGNo aWxkX3Jlc3RyaWN0bGlzdCk7CisKIAkJLyogQW5kIG1ha2UgcGF0aHMgZm9yIHRoZSBjaGlsZCBq b2luICovCiAJCXBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyhyb290LCBjaGlsZF9yZWwxLCBj aGlsZF9yZWwyLAogCQkJCQkJCQkJY2hpbGRfam9pbnJlbCwgY2hpbGRfc2ppbmZvLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGJlNGUxODI4NjkuLmY4ZjJhMDlmMWIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTM5NDYsMTAgKzM5NDYsMTYgQEAg Y3JlYXRlX29yZGluYXJ5X2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICppbnB1dF9yZWwsCiAKIAkvKiBHYXRoZXIgYW55IHBhcnRpYWxseSBncm91cGVkIHBhcnRp YWwgcGF0aHMuICovCiAJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPnBhcnRpYWxfcGF0aGxpc3QpCi0JewogCQlnYXRoZXJfZ3JvdXBpbmdfcGF0aHMo cm9vdCwgcGFydGlhbGx5X2dyb3VwZWRfcmVsKTsKKworCS8qCisJICogTm93IGNob29zZSB0aGUg YmVzdCBwYXRoKHMpIGZvciBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwuCisJICoKKwkgKiBOb3RlIHRo YXQgdGhlIG5vbi1wYXJ0aWFsIHBhdGhzIGNhbiBjb21lIGVpdGhlciBmcm9tIHRoZSBHYXRoZXIg YWJvdmUgb3IKKwkgKiBmcm9tIGVhZ2VyIGFnZ3JlZ2F0aW9uLgorCSAqLworCWlmIChwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXRobGlzdCkKIAkJc2V0 X2NoZWFwZXN0KHBhcnRpYWxseV9ncm91cGVkX3JlbCk7Ci0JfQogCiAJLyoKIAkgKiBFc3RpbWF0 ZSBudW1iZXIgb2YgZ3JvdXBzLgpAQCAtNzA0Myw2ICs3MDQ5LDEzIEBAIGNyZWF0ZV9wYXJ0aWFs X2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCWJvb2wJCWNhbl9oYXNoID0gKGV4 dHJhLT5mbGFncyAmIEdST1VQSU5HX0NBTl9VU0VfSEFTSCkgIT0gMDsKIAlib29sCQljYW5fc29y dCA9IChleHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX1NPUlQpICE9IDA7CiAKKwkvKgor CSAqIFRoZSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgY291bGQgaGF2ZSBiZWVuIGFscmVhZHkgY3Jl YXRlZCBkdWUgdG8gZWFnZXIKKwkgKiBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIGlucHV0X3JlbC0+cmVsaWRzLCBOVUxM KTsKKwlBc3NlcnQoZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSB8fCBwYXJ0aWFsbHlfZ3JvdXBlZF9y ZWwgPT0gTlVMTCk7CisKIAkvKgogCSAqIENvbnNpZGVyIHdoZXRoZXIgd2Ugc2hvdWxkIGdlbmVy YXRlIHBhcnRpYWxseSBhZ2dyZWdhdGVkIG5vbi1wYXJ0aWFsCiAJICogcGF0aHMuICBXZSBjYW4g b25seSBkbyB0aGlzIGlmIHdlIGhhdmUgYSBub24tcGFydGlhbCBwYXRoLCBhbmQgb25seSBpZgpA QCAtNzA2NiwxOSArNzA3OSwyNSBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwKIAkgKiBJZiB3ZSBjYW4ndCBwYXJ0aWFsbHkgYWdncmVnYXRlIHBhcnRp YWwgcGF0aHMsIGFuZCB3ZSBjYW4ndCBwYXJ0aWFsbHkKIAkgKiBhZ2dyZWdhdGUgbm9uLXBhcnRp YWwgcGF0aHMsIHRoZW4gZG9uJ3QgYm90aGVyIGNyZWF0aW5nIHRoZSBuZXcKIAkgKiBSZWxPcHRJ bmZvIGF0IGFsbCwgdW5sZXNzIHRoZSBjYWxsZXIgc3BlY2lmaWVkIGZvcmNlX3JlbF9jcmVhdGlv bi4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgcGFydGlhbGx5X2dyb3VwZWRfcmVsIGNvdWxkIGhh dmUgYmVlbiBhbHJlYWR5IGNyZWF0ZWQgYW5kCisJICogcG9wdWxhdGVkIHdpdGggYXBwcm9wcmlh dGUgcGF0aHMgYnkgZWFnZXIgYWdncmVnYXRpb24uCiAJICovCiAJaWYgKGNoZWFwZXN0X3RvdGFs X3BhdGggPT0gTlVMTCAmJgogCQljaGVhcGVzdF9wYXJ0aWFsX3BhdGggPT0gTlVMTCAmJgogCQkh Zm9yY2VfcmVsX2NyZWF0aW9uKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIHBhcnRpYWxseV9n cm91cGVkX3JlbDsKIAogCS8qCiAJICogQnVpbGQgYSBuZXcgdXBwZXIgcmVsYXRpb24gdG8gcmVw cmVzZW50IHRoZSByZXN1bHQgb2YgcGFydGlhbGx5Ci0JICogYWdncmVnYXRpbmcgdGhlIHJvd3Mg ZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uCi0JICovCi0JcGFydGlhbGx5X2dyb3VwZWRfcmVsID0g ZmV0Y2hfdXBwZXJfcmVsKHJvb3QsCi0JCQkJCQkJCQkJCVVQUEVSUkVMX1BBUlRJQUxfR1JPVVBf QUdHLAotCQkJCQkJCQkJCQlncm91cGVkX3JlbC0+cmVsaWRzKTsKKwkgKiBhZ2dyZWdhdGluZyB0 aGUgcm93cyBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gIFRoZSByZWxhdGlvbiBtYXkgYWxyZWFk eQorCSAqIGV4aXN0IGR1ZSB0byBlYWdlciBhZ2dyZWdhdGlvbiwgaW4gd2hpY2ggY2FzZSB3ZSBk b24ndCBuZWVkIHRvIGNyZWF0ZQorCSAqIGl0LgorCSAqLworCWlmIChwYXJ0aWFsbHlfZ3JvdXBl ZF9yZWwgPT0gTlVMTCkKKwkJcGFydGlhbGx5X2dyb3VwZWRfcmVsID0gZmV0Y2hfdXBwZXJfcmVs KHJvb3QsCisJCQkJCQkJCQkJCQlVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHRywKKwkJCQkJCQkJ CQkJCWdyb3VwZWRfcmVsLT5yZWxpZHMpOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+Y29uc2lk ZXJfcGFyYWxsZWwgPQogCQlncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWw7CiAJcGFydGlh bGx5X2dyb3VwZWRfcmVsLT5yZWxvcHRraW5kID0gZ3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQ7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMKaW5kZXggNTFmZGVhY2U3ZC4uNzAx NjQ3MzA0NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5m by5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYwpAQCAtNDk1 LDYgKzQ5NSw3MCBAQCBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoTm9kZSAqbm9kZSwK IAkJcmV0dXJuIChOb2RlICopIG5ld2luZm87CiAJfQogCisJLyoKKwkgKiBXZSBoYXZlIHRvIHBy b2Nlc3MgUmVsQWdnSW5mbyBub2RlcyBzcGVjaWFsbHkuCisJICovCisJaWYgKElzQShub2RlLCBS ZWxBZ2dJbmZvKSkKKwl7CisJCVJlbEFnZ0luZm8gKm9sZGluZm8gPSAoUmVsQWdnSW5mbyAqKSBu b2RlOworCQlSZWxBZ2dJbmZvICpuZXdpbmZvID0gbWFrZU5vZGUoUmVsQWdnSW5mbyk7CisKKwkJ LyogQ29weSBhbGwgZmxhdC1jb3BpYWJsZSBmaWVsZHMgKi8KKwkJbWVtY3B5KG5ld2luZm8sIG9s ZGluZm8sIHNpemVvZihSZWxBZ2dJbmZvKSk7CisKKwkJbmV3aW5mby0+cmVsaWRzID0gYWRqdXN0 X2NoaWxkX3JlbGlkcyhvbGRpbmZvLT5yZWxpZHMsCisJCQkJCQkJCQkJCSAgY29udGV4dC0+bmFw cGluZm9zLAorCQkJCQkJCQkJCQkgIGNvbnRleHQtPmFwcGluZm9zKTsKKworCQluZXdpbmZvLT50 YXJnZXQgPSAoUGF0aFRhcmdldCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9y KChOb2RlICopIG9sZGluZm8tPnRhcmdldCwKKwkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQlu ZXdpbmZvLT5hZ2dfaW5wdXQgPSAoUGF0aFRhcmdldCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9h dHRyc19tdXRhdG9yKChOb2RlICopIG9sZGluZm8tPmFnZ19pbnB1dCwKKwkJCQkJCQkJCQkgICBj b250ZXh0KTsKKworCQluZXdpbmZvLT5ncm91cF9jbGF1c2VzID0gKExpc3QgKikKKwkJCWFkanVz dF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZvLT5ncm91cF9jbGF1c2Vz LAorCQkJCQkJCQkJCSAgIGNvbnRleHQpOworCisJCW5ld2luZm8tPmdyb3VwX2V4cHJzID0gKExp c3QgKikKKwkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZv LT5ncm91cF9leHBycywKKwkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQluZXdpbmZvLT5hZ2df ZXhwcnMgPSAoTGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChOb2Rl ICopIG9sZGluZm8tPmFnZ19leHBycywKKwkJCQkJCQkJCQkgICBjb250ZXh0KTsKKworCQlyZXR1 cm4gKE5vZGUgKikgbmV3aW5mbzsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gcHJvY2VzcyBQ YXRoVGFyZ2V0IG5vZGVzIHNwZWNpYWxseS4KKwkgKi8KKwlpZiAoSXNBKG5vZGUsIFBhdGhUYXJn ZXQpKQorCXsKKwkJUGF0aFRhcmdldCAqb2xkdGFyZ2V0ID0gKFBhdGhUYXJnZXQgKikgbm9kZTsK KwkJUGF0aFRhcmdldCAqbmV3dGFyZ2V0ID0gbWFrZU5vZGUoUGF0aFRhcmdldCk7CisKKwkJLyog Q29weSBhbGwgZmxhdC1jb3BpYWJsZSBmaWVsZHMgKi8KKwkJbWVtY3B5KG5ld3RhcmdldCwgb2xk dGFyZ2V0LCBzaXplb2YoUGF0aFRhcmdldCkpOworCisJCWlmIChvbGR0YXJnZXQtPnNvcnRncm91 cHJlZnMpCisJCXsKKwkJCVNpemUJbmJ5dGVzID0gbGlzdF9sZW5ndGgob2xkdGFyZ2V0LT5leHBy cykgKiBzaXplb2YoSW5kZXgpOworCisJCQluZXd0YXJnZXQtPmV4cHJzID0gKExpc3QgKikKKwkJ CQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkdGFyZ2V0LT5leHBy cywKKwkJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJCW5ld3RhcmdldC0+c29ydGdyb3VwcmVm cyA9IChJbmRleCAqKSBwYWxsb2MobmJ5dGVzKTsKKwkJCW1lbWNweShuZXd0YXJnZXQtPnNvcnRn cm91cHJlZnMsIG9sZHRhcmdldC0+c29ydGdyb3VwcmVmcywgbmJ5dGVzKTsKKwkJfQorCisJCXJl dHVybiAoTm9kZSAqKSBuZXd0YXJnZXQ7CisJfQorCiAJLyoKIAkgKiBOT1RFOiB3ZSBkbyBub3Qg bmVlZCB0byByZWN1cnNlIGludG8gc3VibGlua3MsIGJlY2F1c2UgdGhleSBzaG91bGQKIAkgKiBh bHJlYWR5IGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gc3VicGxhbnMgYmVmb3JlIHdlIHNlZSB0aGVt LgotLSAKMi4zMS4wCgo= --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0009-Add-README.patch" Content-Disposition: attachment; filename="v1-0009-Add-README.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7s98 RnJvbSAyMDM3ZmZiM2EyNjM2MjAzZDQxMDVjMmVlMGU0N2I5YWE2NzA0MWQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMzo0MTozNiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg OS85XSBBZGQgUkVBRE1FCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUgfCA4OCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA4OCBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRSBi L3NyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUKaW5kZXggMmFiNGYzZGJmMy4uZmE1Y2RjMTM1 ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRQorKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvUkVBRE1FCkBAIC0xNDk3LDMgKzE0OTcsOTEgQEAgYnJlYWtpbmcgZG93 biBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBvdmVyIGEgcGFydGl0aW9uZWQgcmVsYXRpb24gaW50 bwogYWdncmVnYXRpb24gb3IgZ3JvdXBpbmcgb3ZlciBpdHMgcGFydGl0aW9ucyBpcyBjYWxsZWQg cGFydGl0aW9ud2lzZQogYWdncmVnYXRpb24uICBFc3BlY2lhbGx5IHdoZW4gdGhlIHBhcnRpdGlv biBrZXlzIG1hdGNoIHRoZSBHUk9VUCBCWSBjbGF1c2UsCiB0aGlzIGNhbiBiZSBzaWduaWZpY2Fu dGx5IGZhc3RlciB0aGFuIHRoZSByZWd1bGFyIG1ldGhvZC4KKworRWFnZXIgYWdncmVnYXRpb24K Ky0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG9idmlvdXMgd2F5IHRvIGV2YWx1YXRlIGFnZ3Jl Z2F0ZXMgaXMgdG8gZXZhbHVhdGUgdGhlIEZST00gY2xhdXNlIG9mIHRoZQorU1FMIHF1ZXJ5ICh0 aGlzIGlzIHdoYXQgcXVlcnlfcGxhbm5lciBkb2VzKSBhbmQgdXNlIHRoZSByZXN1bHRpbmcgcGF0 aHMgYXMgdGhlCitpbnB1dCBvZiBBZ2cgbm9kZS4gSG93ZXZlciwgaWYgdGhlIGdyb3VwcyBhcmUg bGFyZ2UgZW5vdWdoLCBpdCBtYXkgYmUgbW9yZQorZWZmaWNpZW50IHRvIGFwcGx5IHRoZSBwYXJ0 aWFsIGFnZ3JlZ2F0aW9uIHRvIHRoZSBvdXRwdXQgb2YgYmFzZSByZWxhdGlvbgorc2NhbiwgYW5k IGZpbmFsaXplIGl0IHdoZW4gd2UgaGF2ZSBhbGwgcmVsYXRpb25zIG9mIHRoZSBxdWVyeSBqb2lu ZWQ6CisKKyBFWFBMQUlOIChDT1NUUyBPRkYpCisgU0VMRUNUIGEuaSwgYXZnKGIueSkKKyBGUk9N IGEgSk9JTiBiIE9OIGEuaSA9IGIuagorIEdST1VQIEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hB Z2dyZWdhdGUKKyAgIEdyb3VwIEtleTogYS5pCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogYi5q CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgLT4gIEluZGV4IE9u bHkgU2NhbiB1c2luZyBhX3BrZXkgb24gYQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGkg PSBiLmopCisKK1RodXMgdGhlIGpvaW4gYWJvdmUgdGhlIHBhcnRpYWwgYWdncmVnYXRlIG5vZGUg cmVjZWl2ZXMgZmV3ZXIgaW5wdXQgcm93cywgYW5kCitzbyB0aGUgbnVtYmVyIG9mIG91dGVyLXRv LWlubmVyIHBhaXJzIG9mIHR1cGxlcyB0byBiZSBjaGVja2VkIGNhbiBiZQorc2lnbmlmaWNhbnRs eSBsb3dlciwgd2hpY2ggY2FuIGluIHR1cm4gbGVhZCB0byBjb25zaWRlcmFibHkgbG93ZXIgam9p biBjb3N0LgorCitOb3RlIHRoYXQgdGhlIEdST1VQIEJZIGV4cHJlc3Npb24gbWlnaHQgbm90IGJl IHVzZWZ1bCBmb3IgdGhlIHBhcnRpYWwKK2FnZ3JlZ2F0ZS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUs IHRoZSBhZ2dyZWdhdGUgYXZnKGIueSkgcmVmZXJlbmNlcyB0YWJsZSAiYiIsCitidXQgdGhlIEdS T1VQIEJZIGV4cHJlc3Npb24gbWVudGlvbnMgImEiLiBIb3dldmVyLCB0aGUgZXF1aXZhbGVuY2Ug Y2xhc3Mge2EuaSwKK2Iuan0gYWxsb3dzIHVzIHRvIHVzZSB0aGUgYi5qIGNvbHVtbiBhcyBhIGdy b3VwaW5nIGtleSBmb3IgdGhlIHBhcnRpYWwKK2FnZ3JlZ2F0aW9uIG9mIHRoZSAiYiIgdGFibGUu IFRoZSBlcXVpdmFsZW5jZSBjbGFzcyBtZWNoYW5pc20gaXMgc3VpdGFibGUKK2JlY2F1c2UgaXQn cyBkZXNpZ25lZCB0byBkZXJpdmUgam9pbiBjbGF1c2VzLCBhbmQgYXQgdGhlIHNhbWUgdGltZSB0 aGUgam9pbgorY2xhdXNlcyBkZXRlcm1pbmUgdGhlIGNob2ljZSBvZiBncm91cGluZyBjb2x1bW5z IG9mIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZTogdGhlCitvbmx5IHdheSBmb3IgdGhlIHBhcnRpYWwg YWdncmVnYXRlIHRvIHByb3ZpZGUgdXBwZXIgam9pbihzKSB3aXRoIGlucHV0IHZhbHVlcworaXMg dG8gaGF2ZSB0aGUgam9pbiBpbnB1dCBleHByZXNzaW9uKHMpIGluIHRoZSBncm91cGluZyBrZXk7 IGJlc2lkZXMgZ3JvdXBpbmcKK2NvbHVtbnMsIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZSBjYW4gb25s eSBwcm9kdWNlIHRoZSB0cmFuc2llbnQgc3RhdGVzIG9mIHRoZQorYWdncmVnYXRlIGZ1bmN0aW9u cywgYnV0IGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgY2Fubm90IGJlIHJlZmVyZW5jZWQgYnkgdGhlIEpP SU4KK2NsYXVzZXMuCisKK1JlZ2FyZGluZyBjb3JyZWN0bmVzcywgam9pbiBub2RlIGNvbnNpZGVy cyB0aGUgb3V0cHV0IG9mIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0ZQordG8gYmUgZXF1aXZhbGVudCB0 byB0aGUgb3V0cHV0IG9mIGEgcGxhaW4gKG5vbi1hZ2dyZWdhdGVkKSByZWxhdGlvbiBzY2FuLiBU aGF0CitpcywgYSBncm91cCAoaS5lLiBhIHJvdyBvZiB0aGUgcGFydGlhbCBhZ2dyZWdhdGUgb3V0 cHV0KSBtYXRjaGVzIHRoZSBvdGhlcgorc2lkZSBvZiB0aGUgam9pbiBpZiBhbmQgb25seSBpZiBl YWNoIHJvdyBvZiB0aGUgbm9uLWFnZ3JlZ2F0ZSByZWxhdGlvbgorZG9lcy4gSW4gb3RoZXIgd29y ZHMsIGFsbCByb3dzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBncm91cCBoYXZlIHRoZSBzYW1lIHZh bHVlCitvZiB0aGUgam9pbiBjb2x1bW5zIChBcyBtZW50aW9uZWQgYWJvdmUsIGEgam9pbiBjYW5u b3QgcmVmZXJlbmNlIG90aGVyIG91dHB1dAorZXhwcmVzc2lvbnMgb2YgdGhlIHBhcnRpYWwgYWdn cmVnYXRlIHRoYW4gdGhlIGdyb3VwaW5nIGV4cHJlc3Npb25zLikuCisKK0hvd2V2ZXIsIHRoZXJl J3MgYSByZXN0cmljdGlvbiBmcm9tIHRoZSBhZ2dyZWdhdGUncyBwZXJzcGVjdGl2ZTogdGhlIGFn Z3JlZ2F0ZQorY2Fubm90IGJlIHB1c2hlZCBkb3duIGlmIGFueSBjb2x1bW4gcmVmZXJlbmNlZCBi eSBlaXRoZXIgZ3JvdXBpbmcgZXhwcmVzc2lvbgorb3IgYWdncmVnYXRlIGZ1bmN0aW9uIGNhbiBi ZSBzZXQgdG8gTlVMTCBieSBhbiBvdXRlciBqb2luIGFib3ZlIHRoZSByZWxhdGlvbgordG8gd2hp Y2ggd2Ugd2FudCB0byBhcHBseSB0aGUgcGFydGlhbGwgYWdncmVnYXRpb24uIFRoZSBwb2ludCBp cyB0aGF0IHRob3NlCitOVUxMIHZhbHVlcyB3b3VsZCBub3QgYXBwZWFyIG9uIHRoZSBpbnB1dCBv ZiB0aGUgcHVzaGVkLWRvd24sIHNvIGl0IGNvdWxkCitlaXRoZXIgcHV0IHRoZSByb3dzIGludG8g Z3JvdXBzIGluIGEgZGlmZmVyZW50IHdheSB0aGFuIHRoZSBhZ2dyZWdhdGUgYXQgdGhlCit0b3Ag b2YgdGhlIHBsYW4sIG9yIGl0IGNvdWxkIGNvbXB1dGUgd3JvbmcgdmFsdWVzIG9mIHRoZSBhZ2dy ZWdhdGUgZnVuY3Rpb25zLgorCitCZXNpZGVzIGJhc2UgcmVsYXRpb24sIHRoZSBhZ2dyZWdhdGlv biBjYW4gYWxzbyBiZSBwdXNoZWQgZG93biB0byBqb2luOgorCisgRVhQTEFJTiAoQ09TVFMgT0ZG KQorIFNFTEVDVCBhLmksIGF2ZyhiLnkgKyBjLnopCisgRlJPTSBhIEpPSU4gYiBPTiBhLmkgPSBi LmoKKyAgICAgICAgSk9JTiBjIE9OIGIuaiA9IGMuaQorIEdST1VQIEJZIGEuaTsKKworIEZpbmFs aXplIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogYS5pCisgICAtPiAgTmVzdGVkIExvb3AK KyAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3Vw IEtleTogYi5qCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6IChiLmogPSBjLmkpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gYgorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBjCisgICAgICAgICAtPiAgSW5kZXggT25seSBT Y2FuIHVzaW5nIGFfcGtleSBvbiBhCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaSA9IGIu aikKKworV2hldGhlciB0aGUgQWdnIG5vZGUgaXMgY3JlYXRlZCBvdXQgb2YgYmFzZSByZWxhdGlv biBvciBvdXQgb2Ygam9pbiwgaXQncworYWRkZWQgdG8gYSBzZXBhcmF0ZSBSZWxPcHRJbmZvIHRo YXQgd2UgY2FsbCAiZ3JvdXBlZCByZWxhdGlvbiIuIEdyb3VwZWQKK3JlbGF0aW9uIGNhbiBiZSBq b2luZWQgdG8gYSBub24tZ3JvdXBlZCByZWxhdGlvbiwgd2hpY2ggcmVzdWx0cyBpbiBhIGdyb3Vw ZWQKK3JlbGF0aW9uIHRvby4gSm9pbiBvZiB0d28gZ3JvdXBlZCByZWxhdGlvbnMgZG9lcyBub3Qg c2VlbSB0byBiZSB2ZXJ5IHVzZWZ1bAorYW5kIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgor CitJZiBxdWVyeV9wbGFubmVyIHByb2R1Y2VzIGEgZ3JvdXBlZCByZWxhdGlvbiB0aGF0IGNvbnRh aW5zIHZhbGlkIHBhdGhzLCB0aGVzZQorYXJlIHNpbXBseSBhZGRlZCB0byB0aGUgVVBQRVJSRUxf UEFSVElBTF9HUk9VUF9BR0cgcmVsYXRpb24uIEZ1cnRoZXIKK3Byb2Nlc3Npbmcgb2YgdGhlc2Ug cGF0aHMgdGhlbiBkb2VzIG5vdCBkaWZmZXIgZnJvbSBwcm9jZXNzaW5nIG9mIG90aGVyCitwYXJ0 aWFsbHkgZ3JvdXBlZCBwYXRocy4KLS0gCjIuMzEuMAoK --0000000000007fb9c90612d17f7a Content-Type: application/octet-stream; name="v1-0008-Add-test-cases.patch" Content-Disposition: attachment; filename="v1-0008-Add-test-cases.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltcod7s67 RnJvbSAwOWZlZDgxMzFkNmIyZGVmNWU1ZDc2YzdiNzNlODZhOWFlOTk3YzdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMyBGZWIgMjAyNCAxMzo0MToyMiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEg OC85XSBBZGQgdGVzdCBjYXNlcwoKLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2Vy X2FnZ3JlZ2F0ZS5vdXQgfCAxMjcwICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsICAgICAgfCAgMjA1ICsrKwogMyBmaWxlcyBjaGFuZ2Vk LCAxNDc2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsCgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjJkN2RlYzhhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQKQEAgLTAsMCArMSwx MjcwIEBACistLQorLS0gRUFHRVIgQUdHUkVHQVRJT04KKy0tIFRlc3Qgd2UgY2FuIHB1c2ggYWdn cmVnYXRpb24gZG93biBiZWxvdyBqb2luCistLQorLS0gRW5hYmxlIGVhZ2VyIGFnZ3JlZ2F0aW9u LCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9lYWdlcl9hZ2dyZWdh dGUgVE8gb247CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QxIChhIGludCwgYiBpbnQsIGMgZG91 YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QyIChhIGludCwgYiBpbnQs IGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QzIChhIGludCwg YiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDEgU0VM RUNUIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8g ZWFnZXJfYWdnX3QyIFNFTEVDVCBpLCBpJTEwLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MyBTRUxFQ1QgaSUxMCwgaSUxMCwgaSBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitBTkFMWVpFIGVhZ2VyX2FnZ190MTsKK0FOQUxZ WkUgZWFnZXJfYWdnX3QyOworQU5BTFlaRSBlYWdlcl9hZ2dfdDM7CistLQorLS0gVGVzdCBlYWdl ciBhZ2dyZWdhdGlvbiBvdmVyIGJhc2UgcmVsCistLQorLS0gUGVyZm9ybSBzY2FuIG9mIGEgdGFi bGUsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0g YW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhh c2ggYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvbjsKK1NFVCBlbmFibGVfc29y dCBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZn KHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIg PSB0Mi5iIEdST1VQIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUK KyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBHcm91cCBLZXk6IHQxLmEKKyAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAg ICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5i LCB0MS5jCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCAo UEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMp CisgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMKKygxNSByb3dzKQorCitTRUxF Q1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3Qy IHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQor IDEgfCA0OTYKKyAyIHwgNDk3CisgNiB8IDUwMQorIDcgfCA1MDIKKyAzIHwgNDk4CisgNCB8IDQ5 OQorIDkgfCA1MDQKKyA1IHwgNTAwCisgOCB8IDUwMworKDkgcm93cykKKworLS0gUHJvZHVjZSBy ZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9m ZjsKK1NFVCBlbmFibGVfc29ydCBUTyBvbjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9h Z2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEu YSwgYXZnKHQyLmMpCisgICBHcm91cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBP dXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5h CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQ QVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5i KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJ QUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgR3JvdXBBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBh dmcodDIuYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU29ydCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIKKygyMSByb3dzKQorCitTRUxF Q1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3Qy IHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQor IDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0OTkKKyA1IHwgNTAwCisgNiB8IDUw MQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorKDkgcm93cykKKworU0VUIGVuYWJsZV9o YXNoYWdnIFRPIGRlZmF1bHQ7CitTRVQgZW5hYmxlX3NvcnQgVE8gZGVmYXVsdDsKKy0tCistLSBU ZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tCistLSBQZXJmb3JtIGpvaW4g b2YgdGFibGVzLCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFi bGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRpb24uCistLSBQcm9kdWNlIHJlc3VsdHMg d2l0aCBoYXNoIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb247CitTRVQgZW5h YmxlX3NvcnQgVE8gb2ZmOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQx LmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2df dDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEg R1JPVVAgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxp emUgSGFzaEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcoKHQyLmMgKyB0My5jKSkKKyAg IEdyb3VwIEtleTogdDEuYQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgT3V0cHV0OiB0MS5h LCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICBIYXNoIENvbmQ6ICh0MS5i ID0gdDIuYikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQx CisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2ZygodDIuYyArIHQz LmMpKSkKKyAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkKKyAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0 My5jLCB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0My5hID0g dDIuYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygyMiByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQy LmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0 MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0 MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk3CisgMiB8IDQ5OQorIDYgfCA1MDcK KyA3IHwgNTA5CisgMyB8IDUwMQorIDQgfCA1MDMKKyA5IHwgNTEzCisgNSB8IDUwNQorIDggfCA1 MTEKKyg5IHJvd3MpCisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRp b24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CitTRVQgZW5hYmxlX3NvcnQgVE8gb247CitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5j KSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIu YiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBG aW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcoKHQyLmMgKyB0My5j KSkKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1dDogdDEu YSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgU29ydCBLZXk6IHQxLmEK KyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBB UlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEu YiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5i LCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0My5jLCB0 Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuYgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0My5jLCB0Mi5iCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0My5hID0gdDIu YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygyOCByb3dzKQorCitTRUxFQ1Qg dDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2Fn Z190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMu YSBHUk9VUCBCWSB0MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk3CisgMiB8IDQ5 OQorIDMgfCA1MDEKKyA0IHwgNTAzCisgNSB8IDUwNQorIDYgfCA1MDcKKyA3IHwgNTA5CisgOCB8 IDUxMQorIDkgfCA1MTMKKyg5IHJvd3MpCisKK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBkZWZhdWx0 OworU0VUIGVuYWJsZV9zb3J0IFRPIGRlZmF1bHQ7CistLQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFn Z3JlZ2F0aW9uIHdvcmtzIGZvciBvdXRlciBqb2luCistLQorLS0gRW5zdXJlIGFnZ3JlZ2F0aW9u IGNhbiBiZSBwdXNoZWQgZG93biB0byB0aGUgbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My5hLCBhdmcodDMuYykgRlJPTSBlYWdlcl9hZ2df dDEgdDEgUklHSFQgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDEuYiA9IHQzLmIgR1JPVVAgQlkg dDMuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDMu YSwgYXZnKHQzLmMpCisgICBHcm91cCBLZXk6IHQzLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBP dXRwdXQ6IHQzLmEsIChQQVJUSUFMIGF2Zyh0My5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0My5h CisgICAgICAgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDMu YSwgKFBBUlRJQUwgYXZnKHQzLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDMuYiA9 IHQxLmIpCisgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIFBBUlRJQUwgYXZnKHQzLmMpCisgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQzLmEsIHQzLmIKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKygxOCByb3dzKQorCitTRUxFQ1QgdDMuYSwg YXZnKHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QzIHQz IE9OIHQxLmIgPSB0My5iIEdST1VQIEJZIHQzLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQorIDAg fCA1MDUKKyAxIHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAor IDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQKKygxMCByb3dzKQorCistLSBF bnN1cmUgYWdncmVnYXRpb24gY2Fubm90IGJlIHB1c2hlZCBkb3duIHRvIHRoZSBudWxsYWJsZSBz aWRlCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDMuYSwgYXZnKHQzLmMp IEZST00gZWFnZXJfYWdnX3QxIHQxIExFRlQgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDEuYiA9 IHQzLmIgR1JPVVAgQlkgdDMuYTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0My5hLCBhdmco dDMuYykKKyAgIEdyb3VwIEtleTogdDMuYQorICAgLT4gIEhhc2ggUmlnaHQgSm9pbgorICAgICAg ICAgT3V0cHV0OiB0My5hLCB0My5jCisgICAgICAgICBIYXNoIENvbmQ6ICh0My5iID0gdDEuYikK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIK KygxMiByb3dzKQorCitTRUxFQ1QgdDMuYSwgYXZnKHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQx IExFRlQgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDEuYiA9IHQzLmIgR1JPVVAgQlkgdDMuYTsK KyBhIHwgYXZnIAorLS0tKy0tLS0tCisgOCB8IDUwMworICAgfCAgICAKKyA5IHwgNTA0CisgNyB8 IDUwMgorIDEgfCA0OTYKKyA1IHwgNTAwCisgNCB8IDQ5OQorIDIgfCA0OTcKKyA2IHwgNTAxCisg MyB8IDQ5OAorKDEwIHJvd3MpCisKKy0tCistLSBUZXN0IHRoYXQgZWFnZXIgYWdncmVnYXRpb24g d29ya3MgZm9yIHBhcmFsbGVsIHBsYW5zCistLQorU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3Q9MDsK K1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0PTA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5f c2l6ZT0wOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI9NDsKK0VYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9h Z2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEu YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg RmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBH cm91cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJU SUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgR2F0 aGVyCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAg ICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElB TCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIu YikKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEs IHQxLmIsIHQxLmMKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2Zyh0Mi5jKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmco dDIuYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYworKDIxIHJvd3MpCisKK1NFTEVDVCB0MS5h LCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04g dDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5 NgorIDIgfCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8 IDUwMgorIDggfCA1MDMKKyA5IHwgNTA0CisoOSByb3dzKQorCitSRVNFVCBwYXJhbGxlbF9zZXR1 cF9jb3N0OworUkVTRVQgcGFyYWxsZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1pbl9wYXJhbGxlbF90 YWJsZV9zY2FuX3NpemU7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwor RFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1Ag VEFCTEUgZWFnZXJfYWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gZm9yIHBh cnRpdGlvbndpc2Ugam9pbgorLS0KKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwg d2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9h Z2dyZWdhdGUgVE8gdHJ1ZTsKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5 IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0 cnVlOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxKHggaW50LCB5IGludCkgUEFSVElUSU9O IEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AxIFBBUlRJVElPTiBP RiBlYWdlcl9hZ2dfdGFiMSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYjFfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxV RVMgRlJPTSAoMTApIFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDMgUEFS VElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgzMCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjIoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFO R0UoeSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJfcDEgUEFSVElUSU9OIE9GIGVhZ2Vy X2FnZ190YWIyIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdl cl9hZ2dfdGFiMl9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9N ICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMyBQQVJUSVRJT04g T0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0lOU0VSVCBJ TlRPIGVhZ2VyX2FnZ190YWIxIFNFTEVDVCBpICUgMzAsIGkgJSAyMCBGUk9NIGdlbmVyYXRlX3Nl cmllcygwLCAyOTksIDIpIGk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMiBTRUxFQ1QgaSAl IDIwLCBpICUgMzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwgMjk5LCAzKSBpOworQU5BTFlaRSBl YWdlcl9hZ2dfdGFiMTsKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjI7CistLSBXaGVuIEdST1VQIEJZ IGNsYXVzZSBtYXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBw YXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3Vt KHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0 MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54OworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBGaW5hbGl6ZSBI YXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxLngsIHN1bSh0MS55KSwgY291bnQoKikK KyAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDEueSkpLCAoUEFSVElBTCBjb3Vu dCgqKSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyLnkgPSB0MS54KQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMSB0MgorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDEueSkpLCAoUEFS VElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgUEFSVElBTCBz dW0odDEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy b3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MS54LCB0MS55CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHN1bSh0MV8xLnkpLCBjb3VudCgqKQorICAgICAgICAg R3JvdXAgS2V5OiB0MV8xLngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IE91dHB1dDogdDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0gdDFfMS54KQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMiB0Ml8xCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueQorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS55 KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngs IFBBUlRJQUwgc3VtKHQxXzEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQxXzEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCB0MV8xLnkKKyAgIC0+ICBGaW5h bGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKHQxXzIueSks IGNvdW50KCopCisgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSh0MV8yLnkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnkg PSB0MV8yLngpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWIyX3AzIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55CisgICAg ICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngs IChQQVJUSUFMIHN1bSh0MV8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzIueCwgUEFSVElBTCBzdW0odDFfMi55KSwgUEFSVElBTCBjb3VudCgq KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFf cDMgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngs IHQxXzIueQorKDQ2IHJvd3MpCisKK1NFTEVDVCB0MS54LCBzdW0odDEueSksIGNvdW50KCopIEZS T00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55 IEdST1VQIEJZIHQxLng7CisgeCAgfCBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0t CisgIDYgfCAxMTAwIHwgICAxMDAKKyAgMCB8ICA1MDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8ICAg MTAwCisgMTggfCAxMzAwIHwgICAxMDAKKyAyNCB8ICA5MDAgfCAgIDEwMAorKDUgcm93cykKKwor LS0gR1JPVVAgQlkgaGF2aW5nIG90aGVyIG1hdGNoaW5nIGtleQorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQyLnksIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkg dDIueTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQXBwZW5kCisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0 OiB0Mi55LCBzdW0odDEueSksIGNvdW50KCopCisgICAgICAgICBHcm91cCBLZXk6IHQyLnkKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgKFBBUlRJ QUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Mi55ID0gdDEueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjJfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueQor ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEu eCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxLngsIFBBUlRJQUwgc3VtKHQxLnkpLCBQQVJUSUFMIGNvdW50KCopCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueSwgdDEueAorICAg LT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIE91dHB1dDogdDJfMS55LCBzdW0o dDFfMS55KSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDJfMS55CisgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgKFBBUlRJQUwgc3Vt KHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjJfcDIgdDJfMQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8x LnkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzEueCwgKFBBUlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLnkpLCBQQVJUSUFM IGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzEueSwgdDFfMS54CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg T3V0cHV0OiB0Ml8yLnksIHN1bSh0MV8yLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8yLnkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDog dDJfMi55LCAoUEFSVElBTCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDJfMi55ID0gdDFfMi54KQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8yCisgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzIueQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi55KSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIFBBUlRJQUwg c3VtKHQxXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMi55LCB0MV8yLngKKyg0NiByb3dzKQorCitTRUxFQ1Qg dDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9h Z2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55OworIHkgIHwgc3VtICB8 IGNvdW50IAorLS0tLSstLS0tLS0rLS0tLS0tLQorICA2IHwgMTEwMCB8ICAgMTAwCisgIDAgfCAg NTAwIHwgICAxMDAKKyAxOCB8IDEzMDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8ICAgMTAwCisgMjQg fCAgOTAwIHwgICAxMDAKKyg1IHJvd3MpCisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMg bm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0 aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueCwgc3VtKHQx LngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBX SEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAxMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgSGFzaEFnZ3JlZ2F0 ZQorICAgT3V0cHV0OiB0Mi54LCBzdW0odDEueCksIGNvdW50KCopCisgICBHcm91cCBLZXk6IHQy LngKKyAgIEZpbHRlcjogKGF2Zyh0MS54KSA+ICcxMCc6Om51bWVyaWMpCisgICAtPiAgQXBwZW5k CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwg KFBBUlRJQUwgc3VtKHQxXzEueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0 MV8xLngpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0gdDFfMS54KQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMSB0Ml8x CisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDJfMS55CisgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJU SUFMIHN1bSh0MV8xLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMS54 KSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLngp LCBQQVJUSUFMIGNvdW50KCopLCBQQVJUSUFMIGF2Zyh0MV8xLngpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MV8xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIChQQVJUSUFMIHN1bSh0MV8yLngp KSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMi54KSkKKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDIgdDJfMgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8yLngsIHQyXzIueQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi54KSksIChQ QVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzIueCkpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzIueCwgUEFSVElBTCBzdW0odDFfMi54KSwgUEFSVElBTCBjb3VudCgqKSwg UEFSVElBTCBhdmcodDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IE91dHB1dDogdDJfMy54LCAoUEFSVElBTCBzdW0odDFfMy54KSksIChQQVJUSUFMIGNvdW50KCop KSwgKFBBUlRJQUwgYXZnKHQxXzMueCkpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8z LnkgPSB0MV8zLngpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWIyX3AzIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCB0 Ml8zLnkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzMueCwgKFBBUlRJQUwgc3VtKHQxXzMueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQ QVJUSUFMIGF2Zyh0MV8zLngpKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIFBB UlRJQUwgc3VtKHQxXzMueCksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwgYXZnKHQxXzMueCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMy54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3Az IHQxXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54Ciso NDEgcm93cykKKworU0VMRUNUIHQyLngsIHN1bSh0MS54KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkg dDIueCBIQVZJTkcgYXZnKHQxLngpID4gMTA7CisgeCAgfCBzdW0gIHwgY291bnQgCistLS0tKy0t LS0tLSstLS0tLS0tCisgIDQgfCAxMjAwIHwgICAgNTAKKyAxNCB8IDEyMDAgfCAgICA1MAorIDE4 IHwgIDkwMCB8ICAgIDUwCisgIDIgfCAgNjAwIHwgICAgNTAKKyAxMiB8ICA2MDAgfCAgICA1MAor ICA4IHwgIDkwMCB8ICAgIDUwCisoNiByb3dzKQorCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3Jl Z2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJf YWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVh Z2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQxLng7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5k CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MS54LCBz dW0oKHQyLnkgKyB0My55KSkKKyAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0oKHQy LnkgKyB0My55KSkpCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDEK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueAorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueCwgdDMueCwgKFBBUlRJQUwgc3Vt KCh0Mi55ICsgdDMueSkpKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCB0My54LCBQ QVJUSUFMIHN1bSgodDIueSArIHQzLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiB0Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngsIHQzLnks IHQzLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyLngg PSB0My54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAg IC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3Vt KCh0Ml8xLnkgKyB0M18xLnkpKQorICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCAoUEFSVElBTCBz dW0oKHQyXzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMS54 ID0gdDJfMS54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54 LCB0M18xLngsIChQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0M18xLnksIHQzXzEueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS54ID0gdDNfMS54KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMiB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0M18xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNf MS54CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV8y LngsIHN1bSgodDJfMi55ICsgdDNfMi55KSkKKyAgICAgICAgIEdyb3VwIEtleTogdDFfMi54Cisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBB UlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSkKKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzIueCA9IHQyXzIueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDMgdDFfMgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8y LngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzIueCwgdDNfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwgUEFSVElBTCBzdW0oKHQyXzIueSAr IHQzXzIueSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQz XzIueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDNfMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18y LnksIHQzXzIueAorKDY3IHJvd3MpCisKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZS T00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIu eCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQxLng7Cisg eCAgfCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICA0IHwgMTgwMDAKKyAgMiB8IDE0MDAwCisgIDgg fCAyNjAwMAorICA2IHwgMjIwMDAKKyAgMCB8IDEwMDAwCisgMTYgfCAyMjAwMAorIDEwIHwgMTAw MDAKKyAxNCB8IDE4MDAwCisgMTIgfCAxNDAwMAorIDE4IHwgMjYwMDAKKyAyNiB8IDIyMDAwCisg MjggfCAyNjAwMAorIDIyIHwgMTQwMDAKKyAyMCB8IDEwMDAwCisgMjQgfCAxODAwMAorKDE1IHJv d3MpCisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7 CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0 My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEu eCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0 My55OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRwdXQ6 IHQzLnksIHN1bSgodDIueSArIHQzLnkpKQorICAgR3JvdXAgS2V5OiB0My55CisgICAtPiAgU29y dAorICAgICAgICAgT3V0cHV0OiB0My55LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkpCisg ICAgICAgICBTb3J0IEtleTogdDMueQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIChQ QVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0Ml8xLnggPSB0MV8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18x LnksIHQyXzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDNfMS55LCB0Ml8xLngsIHQzXzEueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0M18xLnksIHQyXzEueCwgdDNfMS54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNfMS55LCB0Ml8xLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0M18xLnksIHQyXzEu eCwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQyXzEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0 Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEu eSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQzXzEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0 M18xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MV8xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIChQQVJUSUFMIHN1bSgo dDJfMi55ICsgdDNfMi55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8y LnggPSB0MV8yLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQyXzIueCwg dDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDNfMi55LCB0Ml8yLngsIHQzXzIueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMi55LCB0M18yLnksIHQyXzIueCwgdDNfMi54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0M18yLnksIHQyXzIueCwgdDNfMi54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLngg PSB0M18yLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQyXzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNf My55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0MV8zLngp CisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQyXzMueCwgdDNfMy54LCBQQVJU SUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy b3VwIEtleTogdDNfMy55LCB0Ml8zLngsIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf My55LCB0M18zLnksIHQyXzMueCwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTb3J0IEtleTogdDNfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy55LCB0M18zLnksIHQyXzMueCwgdDNfMy54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0M18zLngpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWIxX3AzIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWIxX3AzIHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMyB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzMueAorKDczIHJvd3MpCisKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00g ZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBK T0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnk7CisgeSAg fCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICAwIHwgIDc1MDAKKyAgMiB8IDEzNTAwCisgIDQgfCAx OTUwMAorICA2IHwgMjU1MDAKKyAgOCB8IDMxNTAwCisgMTAgfCAyMjUwMAorIDEyIHwgMjg1MDAK KyAxNCB8IDM0NTAwCisgMTYgfCA0MDUwMAorIDE4IHwgNDY1MDAKKygxMCByb3dzKQorCitSRVNF VCBlbmFibGVfaGFzaGFnZzsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYjE7CitEUk9QIFRBQkxF IGVhZ2VyX2FnZ190YWIyOworLS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1sZXZlbCBwYXJ0aXRpb25p bmcgc2NoZW1lCistLQorQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWwoeCBpbnQsIHkgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9w MSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgx MCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJUSVRJT04gT0YgZWFnZXJf YWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApIFBBUlRJVElPTiBCWSBSQU5H RSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MxIFBBUlRJVElPTiBPRiBl YWdlcl9hZ2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7CitDUkVBVEUg VEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9t bF9wMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2Fn Z190YWJfbWxfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9N ICgyMCkgVE8gKDMwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJf YWdnX3RhYl9tbF9wM19zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFM VUVTIEZST00gKDIwKSBUTyAoMjUpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDNf czIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9NICgyNSkg VE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VMRUNUIGkgJSAzMCwgaSAl IDMwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitBTkFMWVpFIGVhZ2VyX2FnZ190 YWJfbWw7CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9u IGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190 YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZ IHQxLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEFwcGVuZAorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgIE91dHB1 dDogdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MS54Cisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJU SUFMIHN1bSh0Mi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDEueCA9IHQyLngpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWJfbWxfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEu eAorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDIueCwgKFBBUlRJQUwgc3VtKHQyLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyLngsIFBBUlRJQUwgc3VtKHQyLnkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9w MSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54 CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV8xLngs IHN1bSh0Ml8xLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCAoUEFSVElB TCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzEKKyAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8xLngsIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgUEFSVElBTCBzdW0odDJfMS55 KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHN1bSh0Ml8yLnkpLCBjb3VudCgqKQorICAg ICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMi54ID0gdDJfMi54KQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3My IHQxXzIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIChQQVJUSUFM IHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzIueCwgUEFSVElBTCBzdW0odDJfMi55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0 Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJf Mi54CisgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV8z LngsIHN1bSh0Ml8zLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MV8zLngKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCAoUEFS VElBTCBzdW0odDJfMy55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFz aCBDb25kOiAodDFfMy54ID0gdDJfMy54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQxXzMKKyAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8zLngsIChQQVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291 bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgUEFSVElBTCBzdW0odDJf My55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAtPiAgRmluYWxpemUgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0MV80LngsIHN1bSh0Ml80LnkpLCBjb3VudCgqKQor ICAgICAgICAgR3JvdXAgS2V5OiB0MV80LngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgIE91dHB1dDogdDFfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54KQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Az X3MyIHQxXzQKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54CisgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIChQQVJU SUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzQueCwgUEFSVElBTCBzdW0odDJfNC55KSwgUEFSVElBTCBjb3VudCgqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml80LngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19z MiB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwg dDJfNC54CisoNzYgcm93cykKKworU0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJP TSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0g dDIueCBHUk9VUCBCWSB0MS54OworIHggIHwgIHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tLSst LS0tLS0tCisgIDggfCAgOTI0OCB8ICAxMTU2CisgIDkgfCAxMDQwNCB8ICAxMTU2CisgIDcgfCAg ODA5MiB8ICAxMTU2CisgIDEgfCAgMTE1NiB8ICAxMTU2CisgIDUgfCAgNTc4MCB8ICAxMTU2Cisg IDQgfCAgNDYyNCB8ICAxMTU2CisgIDIgfCAgMjMxMiB8ICAxMTU2CisgIDAgfCAgICAgMCB8ICAx MDg5CisgIDYgfCAgNjkzNiB8ICAxMTU2CisgIDMgfCAgMzQ2OCB8ICAxMTU2CisgMTEgfCAxMTk3 OSB8ICAxMDg5CisgMTMgfCAxNDE1NyB8ICAxMDg5CisgMTAgfCAxMTU2MCB8ICAxMTU2CisgMTQg fCAxNTI0NiB8ICAxMDg5CisgMTIgfCAxMzA2OCB8ICAxMDg5CisgMTcgfCAxODUxMyB8ICAxMDg5 CisgMTggfCAxOTYwMiB8ICAxMDg5CisgMTYgfCAxNzQyNCB8ICAxMDg5CisgMTUgfCAxNjMzNSB8 ICAxMDg5CisgMTkgfCAyMDY5MSB8ICAxMDg5CisgMjQgfCAyNjEzNiB8ICAxMDg5CisgMjEgfCAy Mjg2OSB8ICAxMDg5CisgMjMgfCAyNTA0NyB8ICAxMDg5CisgMjIgfCAyMzk1OCB8ICAxMDg5Cisg MjAgfCAyMTc4MCB8ICAxMDg5CisgMjYgfCAyODMxNCB8ICAxMDg5CisgMjcgfCAyOTQwMyB8ICAx MDg5CisgMjUgfCAyNzIyNSB8ICAxMDg5CisgMjkgfCAzMTU4MSB8ICAxMDg5CisgMjggfCAzMDQ5 MiB8ICAxMDg5CisoMzAgcm93cykKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3Qg bWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlv bi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS55LCBzdW0odDIueSks IGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwg dDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAg T3V0cHV0OiB0MS55LCBzdW0odDIueSksIGNvdW50KCopCisgICBHcm91cCBLZXk6IHQxLnkKKyAg IC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1 dDogdDFfMS55LCAoUEFSVElBTCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQxXzEKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMS55LCB0MV8xLngKKyAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBBUlRJQUwgc3VtKHQy XzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0 aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf MS54LCBQQVJUSUFMIHN1bSh0Ml8xLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQyXzEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi55LCAoUEFSVElB TCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDFfMi54ID0gdDJfMi54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMi55LCB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgKFBBUlRJQUwgc3VtKHQyXzIueSkpLCAoUEFSVElB TCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCBQQVJUSUFMIHN1 bSh0Ml8yLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQyXzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy55LCAoUEFSVElBTCBzdW0odDJfMy55 KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMy54 ID0gdDJfMy54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AyX3MyIHQxXzMKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy55 LCB0MV8zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwgc3VtKHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCBQQVJUSUFMIHN1bSh0Ml8zLnkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQy XzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgIE91dHB1dDogdDFfNC55LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54KQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Az X3MxIHQxXzQKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC55LCB0MV80LngKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQu eCwgKFBBUlRJQUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfNC54LCBQQVJUSUFMIHN1bSh0Ml80LnkpLCBQQVJUSUFMIGNvdW50 KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi X21sX3AzX3MxIHQyXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfNC55LCB0Ml80LngKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91 dHB1dDogdDFfNS55LCAoUEFSVElBTCBzdW0odDJfNS55KSksIChQQVJUSUFMIGNvdW50KCopKQor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfNS54ID0gdDJfNS54KQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzUKKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNS55LCB0MV81LngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueCwgKFBBUlRJQUwg c3VtKHQyXzUueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfNS54LCBQQVJUSUFMIHN1bSh0Ml81LnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzUueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQy XzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNS55LCB0Ml81 LngKKyg2NCByb3dzKQorCitTRUxFQ1QgdDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVh Z2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54 IEdST1VQIEJZIHQxLnk7CisgeSAgfCAgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0tKy0tLS0t LS0KKyAyOSB8IDMxNTgxIHwgIDEwODkKKyAgNCB8ICA0NjI0IHwgIDExNTYKKyAgMCB8ICAgICAw IHwgIDEwODkKKyAxMCB8IDExNTYwIHwgIDExNTYKKyAgOSB8IDEwNDA0IHwgIDExNTYKKyAgNyB8 ICA4MDkyIHwgIDExNTYKKyAxNSB8IDE2MzM1IHwgIDEwODkKKyAgNiB8ICA2OTM2IHwgIDExNTYK KyAyNiB8IDI4MzE0IHwgIDEwODkKKyAxMiB8IDEzMDY4IHwgIDEwODkKKyAyNCB8IDI2MTM2IHwg IDEwODkKKyAxOSB8IDIwNjkxIHwgIDEwODkKKyAyNSB8IDI3MjI1IHwgIDEwODkKKyAyMSB8IDIy ODY5IHwgIDEwODkKKyAxNCB8IDE1MjQ2IHwgIDEwODkKKyAgMyB8ICAzNDY4IHwgIDExNTYKKyAx NyB8IDE4NTEzIHwgIDEwODkKKyAyOCB8IDMwNDkyIHwgIDEwODkKKyAyMiB8IDIzOTU4IHwgIDEw ODkKKyAyMCB8IDIxNzgwIHwgIDEwODkKKyAxMyB8IDE0MTU3IHwgIDEwODkKKyAgMSB8ICAxMTU2 IHwgIDExNTYKKyAgNSB8ICA1NzgwIHwgIDExNTYKKyAxOCB8IDE5NjAyIHwgIDEwODkKKyAgMiB8 ICAyMzEyIHwgIDExNTYKKyAxNiB8IDE3NDI0IHwgIDEwODkKKyAyNyB8IDI5NDAzIHwgIDEwODkK KyAyMyB8IDI1MDQ3IHwgIDEwODkKKyAxMSB8IDExOTc5IHwgIDEwODkKKyAgOCB8ICA5MjQ4IHwg IDExNTYKKygzMCByb3dzKQorCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIg am9pbiByZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2Fn Z190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4g ZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54OworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIEZpbmFsaXplIEhhc2hB Z2dyZWdhdGUKKyAgICAgICAgIE91dHB1dDogdDEueCwgc3VtKCh0Mi55ICsgdDMueSkpLCBjb3Vu dCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSks IChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEueCA9IHQy LngpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueAorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueCwgdDMueCwgKFBB UlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngsIFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQy LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgdDIueCwgdDMueSwgdDMueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDIueCA9IHQzLngpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWJfbWxfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDIueSwgdDIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDMueSwgdDMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAgIC0+ICBG aW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3VtKCh0Ml8x LnkgKyB0M18xLnkpKSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJ QUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzEKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQzXzEueCwgKFBBUlRJQUwgc3VtKCh0Ml8x LnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAg LT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8xLngsIHQzXzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpLCBQQVJU SUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18x LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9 IHQzXzEueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0Ml8xCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AyX3MxIHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisg ICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSwgY291bnQoKikK KyAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkp KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMi54 ID0gdDJfMi54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AyX3MyIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54 CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8yLngsIHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwgUEFS VElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wMl9zMiB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18y LnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQzXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngK KyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzMueCwg c3VtKCh0Ml8zLnkgKyB0M18zLnkpKSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDFf My54CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMu eCwgKFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMy54ID0gdDJfMy54KQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQxXzMKKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueCwgKFBBUlRJQUwg c3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueCwgUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMu eSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueCwgdDNf My55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0Ml8zCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiX21sX3AzX3MxIHQzXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdn cmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSwg Y291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDFfNC54CisgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgKFBBUlRJQUwgc3VtKCh0Ml80Lnkg KyB0M180LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDFfNC54ID0gdDJfNC54KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzQKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDFfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml80LngsIHQzXzQueCwgKFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSks IChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIHQz XzQueCwgUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBQQVJUSUFMIGNvdW50KCopCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml80LnksIHQyXzQueCwgdDNfNC55LCB0M180LngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzQueCA9IHQzXzQueCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYl9tbF9wM19zMiB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0M180LnksIHQzXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQzXzQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNC55 LCB0M180LngKKygxMTEgcm93cykKKworU0VMRUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSksIGNv dW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIg T04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdS T1VQIEJZIHQxLng7CisgeCAgfCAgIHN1bSAgIHwgY291bnQgCistLS0tKy0tLS0tLS0tLSstLS0t LS0tCisgIDggfCAgNjI4ODY0IHwgMzkzMDQKKyAgOSB8ICA3MDc0NzIgfCAzOTMwNAorICA3IHwg IDU1MDI1NiB8IDM5MzA0CisgIDEgfCAgIDc4NjA4IHwgMzkzMDQKKyAgNSB8ICAzOTMwNDAgfCAz OTMwNAorICA0IHwgIDMxNDQzMiB8IDM5MzA0CisgIDIgfCAgMTU3MjE2IHwgMzkzMDQKKyAgMCB8 ICAgICAgIDAgfCAzNTkzNworICA2IHwgIDQ3MTY0OCB8IDM5MzA0CisgIDMgfCAgMjM1ODI0IHwg MzkzMDQKKyAxMSB8ICA3OTA2MTQgfCAzNTkzNworIDEzIHwgIDkzNDM2MiB8IDM1OTM3CisgMTAg fCAgNzg2MDgwIHwgMzkzMDQKKyAxNCB8IDEwMDYyMzYgfCAzNTkzNworIDEyIHwgIDg2MjQ4OCB8 IDM1OTM3CisgMTcgfCAxMjIxODU4IHwgMzU5MzcKKyAxOCB8IDEyOTM3MzIgfCAzNTkzNworIDE2 IHwgMTE0OTk4NCB8IDM1OTM3CisgMTUgfCAxMDc4MTEwIHwgMzU5MzcKKyAxOSB8IDEzNjU2MDYg fCAzNTkzNworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMjEgfCAxNTA5MzU0IHwgMzU5MzcKKyAy MyB8IDE2NTMxMDIgfCAzNTkzNworIDIyIHwgMTU4MTIyOCB8IDM1OTM3CisgMjAgfCAxNDM3NDgw IHwgMzU5MzcKKyAyNiB8IDE4Njg3MjQgfCAzNTkzNworIDI3IHwgMTk0MDU5OCB8IDM1OTM3Cisg MjUgfCAxNzk2ODUwIHwgMzU5MzcKKyAyOSB8IDIwODQzNDYgfCAzNTkzNworIDI4IHwgMjAxMjQ3 MiB8IDM1OTM3CisoMzAgcm93cykKKworLS0gcGFydGlhbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNvdW50 KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04g dDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQ IEJZIHQzLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDMueSwgc3VtKCh0Mi55ICsg dDMueSkpLCBjb3VudCgqKQorICAgR3JvdXAgS2V5OiB0My55CisgICAtPiAgQXBwZW5kCisgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgKFBBUlRJ QUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQxXzEKKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0o KHQyXzEueSArIHQzXzEueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzEueSwgdDJfMS54LCB0M18xLngsIFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0 M18xLnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiB0M18xLnksIHQyXzEueCwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzEueSwgdDNfMS55LCB0Ml8xLngsIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Ax IHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf MS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNf MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDNfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIChQQVJUSUFMIHN1 bSgodDJfMi55ICsgdDNfMi55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKHQxXzIueCA9IHQyXzIueCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0MV8yCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0Ml8yLngsIHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0 Ml8yLnkgKyB0M18yLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAg ICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0M18yLnksIHQyXzIueCwgdDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNf Mi55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDNfMi55LCB0Ml8yLngsIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8yLnksIHQzXzIueSwgdDJfMi54LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9z MSB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQz XzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQzXzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCAoUEFSVElB TCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFfMworICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDJfMy54LCB0M18zLngsIChQQVJUSUFMIHN1 bSgodDJfMy55ICsgdDNfMy55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDNfMy55LCB0Ml8zLngsIHQzXzMueCwgUEFSVElBTCBzdW0oKHQyXzMueSAr IHQzXzMueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQzXzMueSwgdDJfMy54LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMy55LCB0M18zLnksIHQyXzMueCwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0M18zLngpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDJfczIgdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55 LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0M18zCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54Cisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzQueSwgKFBB UlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDFfNC54ID0gdDJfNC54KQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQxXzQKKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQyXzQueCwgdDNfNC54LCAoUEFSVElB TCBzdW0oKHQyXzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzQueSwgdDJfNC54LCB0M180LngsIFBBUlRJQUwgc3VtKCh0Ml80 LnkgKyB0M180LnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgR3JvdXAgS2V5OiB0M180LnksIHQyXzQueCwgdDNfNC54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzQueSwgdDNfNC55LCB0Ml80LngsIHQzXzQueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfNC54ID0gdDNfNC54KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi X21sX3AzX3MxIHQyXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfNC55LCB0Ml80LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQz XzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDNfNAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQzXzQu eAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0M181Lnks IChQQVJUSUFMIHN1bSgodDJfNS55ICsgdDNfNS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzUueCA9IHQyXzUueCkKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0MV81CisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzUueAorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCB0Ml81LngsIHQzXzUueCwgKFBB UlRJQUwgc3VtKCh0Ml81LnkgKyB0M181LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M181LnksIHQyXzUueCwgdDNfNS54LCBQQVJUSUFMIHN1bSgo dDJfNS55ICsgdDNfNS55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDNfNS55LCB0Ml81LngsIHQzXzUueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml81LnksIHQzXzUueSwgdDJfNS54LCB0M181LngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzUueCA9IHQzXzUueCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wM19zMiB0Ml81CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzUueSwgdDJfNS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0M181LnksIHQzXzUueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQzXzUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCB0 M181LngKKyg5OSByb3dzKQorCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQo KikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0 MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAg QlkgdDMueTsKKyB5ICB8ICAgc3VtICAgfCBjb3VudCAKKy0tLS0rLS0tLS0tLS0tKy0tLS0tLS0K KyAyOSB8IDIwODQzNDYgfCAzNTkzNworICA0IHwgIDMxNDQzMiB8IDM5MzA0CisgIDAgfCAgICAg ICAwIHwgMzU5MzcKKyAxMCB8ICA3ODYwODAgfCAzOTMwNAorICA5IHwgIDcwNzQ3MiB8IDM5MzA0 CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQKKyAxNSB8IDEwNzgxMTAgfCAzNTkzNworICA2IHwgIDQ3 MTY0OCB8IDM5MzA0CisgMjYgfCAxODY4NzI0IHwgMzU5MzcKKyAxMiB8ICA4NjI0ODggfCAzNTkz NworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMTkgfCAxMzY1NjA2IHwgMzU5MzcKKyAyNSB8IDE3 OTY4NTAgfCAzNTkzNworIDIxIHwgMTUwOTM1NCB8IDM1OTM3CisgMTQgfCAxMDA2MjM2IHwgMzU5 MzcKKyAgMyB8ICAyMzU4MjQgfCAzOTMwNAorIDE3IHwgMTIyMTg1OCB8IDM1OTM3CisgMjggfCAy MDEyNDcyIHwgMzU5MzcKKyAyMiB8IDE1ODEyMjggfCAzNTkzNworIDIwIHwgMTQzNzQ4MCB8IDM1 OTM3CisgMTMgfCAgOTM0MzYyIHwgMzU5MzcKKyAgMSB8ICAgNzg2MDggfCAzOTMwNAorICA1IHwg IDM5MzA0MCB8IDM5MzA0CisgMTggfCAxMjkzNzMyIHwgMzU5MzcKKyAgMiB8ICAxNTcyMTYgfCAz OTMwNAorIDE2IHwgMTE0OTk4NCB8IDM1OTM3CisgMjcgfCAxOTQwNTk4IHwgMzU5MzcKKyAyMyB8 IDE2NTMxMDIgfCAzNTkzNworIDExIHwgIDc5MDYxNCB8IDM1OTM3CisgIDggfCAgNjI4ODY0IHwg MzkzMDQKKygzMCByb3dzKQorCitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWw7CmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVz cy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCAxZDhhNDE0ZWVhLi4yNTBhOWRiYTIxIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKQEAgLTExOSw3ICsxMTksNyBAQCB0ZXN0OiBwbGFuY2Fj aGUgbGltaXQgcGxwZ3NxbCBjb3B5MiB0ZW1wIGRvbWFpbiByYW5nZWZ1bmNzIHByZXBhcmUgY29u dmVyc2lvbiB0cgogIyBUaGUgc3RhdHMgdGVzdCByZXNldHMgc3RhdHMsIHNvIG5vdGhpbmcgZWxz ZSBuZWVkaW5nIHN0YXRzIGFjY2VzcyBjYW4gYmUgaW4KICMgdGhpcyBncm91cC4KICMgLS0tLS0t LS0tLQotdGVzdDogcGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFz aF9wYXJ0IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVz b3J0IGV4cGxhaW4gY29tcHJlc3Npb24gbWVtb2l6ZSBzdGF0cyBwcmVkaWNhdGUKK3Rlc3Q6IHBh cnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGlu ZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNv bXByZXNzaW9uIG1lbW9pemUgc3RhdHMgcHJlZGljYXRlIGVhZ2VyX2FnZ3JlZ2F0ZQogCiAjIGV2 ZW50X3RyaWdnZXIgZGVwZW5kcyBvbiBjcmVhdGVfYW0gYW5kIGNhbm5vdCBydW4gY29uY3VycmVu dGx5IHdpdGgKICMgYW55IHRlc3QgdGhhdCBydW5zIERETApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Vh Z2VyX2FnZ3JlZ2F0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u YWJhMmM0MTU1NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2Vy X2FnZ3JlZ2F0ZS5zcWwKQEAgLTAsMCArMSwyMDUgQEAKKy0tCistLSBFQUdFUiBBR0dSRUdBVElP TgorLS0gVGVzdCB3ZSBjYW4gcHVzaCBhZ2dyZWdhdGlvbiBkb3duIGJlbG93IGpvaW4KKy0tCisK Ky0tIEVuYWJsZSBlYWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxl ZC4KK1NFVCBlbmFibGVfZWFnZXJfYWdncmVnYXRlIFRPIG9uOworCitDUkVBVEUgVEFCTEUgZWFn ZXJfYWdnX3QxIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3QyIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVB VEUgVEFCTEUgZWFnZXJfYWdnX3QzIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7 CisKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDIgU0VMRUNUIGksIGkl MTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8gZWFnZXJf YWdnX3QzIFNFTEVDVCBpJTEwLCBpJTEwLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAp aTsKKworQU5BTFlaRSBlYWdlcl9hZ2dfdDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FOQUxZ WkUgZWFnZXJfYWdnX3QzOworCisKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIg YmFzZSByZWwKKy0tCisKKy0tIFBlcmZvcm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhl IHJlc3VsdCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUg YWdncmVnYXRpb24uCisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24K K1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvbjsKK1NFVCBlbmFibGVfc29ydCBUTyBvZmY7CisKK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBl YWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAg QlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9J TiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYTsKKworLS0gUHJv ZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdn IFRPIG9mZjsKK1NFVCBlbmFibGVfc29ydCBUTyBvbjsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09T VFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lO IGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hOworU0VMRUNUIHQx LmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBP TiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hOworCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gZGVm YXVsdDsKK1NFVCBlbmFibGVfc29ydCBUTyBkZWZhdWx0OworCisKKy0tCistLSBUZXN0IGVhZ2Vy IGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tCisKKy0tIFBlcmZvcm0gam9pbiBvZiB0YWJs ZXMsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0g YW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGgg aGFzaCBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9uOworU0VUIGVuYWJsZV9z b3J0IFRPIG9mZjsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEs IGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIg dDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JP VVAgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdn X3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdn X3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmE7CisKKy0tIFByb2R1Y2UgcmVzdWx0 cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CitT RVQgZW5hYmxlX3NvcnQgVE8gb247CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFn ZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEg PSB0My5hIEdST1VQIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9N IGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lO IGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hOworCitTRVQgZW5h YmxlX2hhc2hhZ2cgVE8gZGVmYXVsdDsKK1NFVCBlbmFibGVfc29ydCBUTyBkZWZhdWx0OworCisK Ky0tCistLSBUZXN0IHRoYXQgZWFnZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIG91dGVyIGpvaW4K Ky0tCisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW4gYmUgcHVzaGVkIGRvd24gdG8gdGhlIG5v bi1udWxsYWJsZSBzaWRlCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDMu YSwgYXZnKHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3Qz IHQzIE9OIHQxLmIgPSB0My5iIEdST1VQIEJZIHQzLmE7CitTRUxFQ1QgdDMuYSwgYXZnKHQzLmMp IEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQxLmIg PSB0My5iIEdST1VQIEJZIHQzLmE7CisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUg cHVzaGVkIGRvd24gdG8gdGhlIG51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikKK1NFTEVDVCB0My5hLCBhdmcodDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBK T0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0MS5iID0gdDMuYiBHUk9VUCBCWSB0My5hOworU0VMRUNU IHQzLmEsIGF2Zyh0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBMRUZUIEpPSU4gZWFnZXJfYWdn X3QzIHQzIE9OIHQxLmIgPSB0My5iIEdST1VQIEJZIHQzLmE7CisKKworLS0KKy0tIFRlc3QgdGhh dCBlYWdlciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3IgcGFyYWxsZWwgcGxhbnMKKy0tCitTRVQgcGFy YWxsZWxfc2V0dXBfY29zdD0wOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9MDsKK1NFVCBtaW5f cGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlcj00OworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwg YXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQx LmIgPSB0Mi5iIEdST1VQIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFn ZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZ IHQxLmE7CisKK1JFU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3Q7CitSRVNFVCBwYXJhbGxlbF90dXBs ZV9jb3N0OworUkVTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsKK1JFU0VUIG1heF9w YXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CisKKworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDE7 CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QzOworCisK Ky0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIGZvciBwYXJ0aXRpb253aXNlIGpvaW4KKy0t CisKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwgd2hpY2ggYnkgZGVmYXVsdCBp cyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgVE8gdHJ1ZTsK Ky0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJs ZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOworCitDUkVBVEUgVEFC TEUgZWFnZXJfYWdnX3RhYjEoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIx IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFi MV9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8g KDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMyBQQVJUSVRJT04gT0YgZWFnZXJf YWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0NSRUFURSBUQUJMRSBlYWdl cl9hZ2dfdGFiMih4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSh5KTsKK0NSRUFURSBU QUJMRSBlYWdlcl9hZ2dfdGFiMl9wMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZB TFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AyIFBB UlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOwor Q1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFi MiBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzApOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3Rh YjEgU0VMRUNUIGkgJSAzMCwgaSAlIDIwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsIDI5OSwgMikg aTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIyIFNFTEVDVCBpICUgMjAsIGkgJSAzMCBGUk9N IGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDMpIGk7CisKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjE7 CitBTkFMWVpFIGVhZ2VyX2FnZ190YWIyOworCistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRj aGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3Vu dCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54 ID0gdDIueSBHUk9VUCBCWSB0MS54OworU0VMRUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikg RlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQy LnkgR1JPVVAgQlkgdDEueDsKKworLS0gR1JPVVAgQlkgaGF2aW5nIG90aGVyIG1hdGNoaW5nIGtl eQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLnksIHN1bSh0MS55KSwg Y291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUg dDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueTsKK1NFTEVDVCB0Mi55LCBzdW0odDEueSksIGNvdW50 KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLngg PSB0Mi55IEdST1VQIEJZIHQyLnk7CisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90 IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRp b24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueCwgc3VtKHQxLngp LCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVS RSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAxMDsKK1NFTEVD VCB0Mi54LCBzdW0odDEueCksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2Vy X2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnggSEFWSU5HIGF2Zyh0 MS54KSA+IDEwOworCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiBy ZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBl YWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9O IHQyLnggPSB0My54IEdST1VQIEJZIHQxLng7CitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55 KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9 IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54 OworCistLSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMu eSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBKT0lOIGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLngg PSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDMgT04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMu eTsKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEg Sk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIx IHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnk7CitSRVNFVCBlbmFibGVfaGFzaGFnZzsK KworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiMTsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYjI7 CisKKworLS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1sZXZlbCBwYXJ0aXRpb25pbmcgc2NoZW1lCist LQorQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWwoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04g QlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMSBQQVJUSVRJT04g T0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUg VEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBG T1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFU RSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFi X21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7CitDUkVBVEUgVEFCTEUgZWFnZXJf YWdnX3RhYl9tbF9wMl9zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMiBGT1IgVkFM VUVTIEZST00gKDE1KSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDMg UEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMw KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9w M19zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFMVUVTIEZST00gKDIw KSBUTyAoMjUpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDNfczIgUEFSVElUSU9O IE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9NICgyNSkgVE8gKDMwKTsKK0lO U0VSVCBJTlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VMRUNUIGkgJSAzMCwgaSAlIDMwIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYl9tbDsKKwor LS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlvbiBpcyBwZXJm b3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQx IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS54Owor U0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQx IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS54Owor CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBkb2VzIG5vdCBtYXRjaDsgcGFydGlhbCBhZ2dyZWdh dGlvbiBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQxLnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9V UCBCWSB0MS55OworU0VMRUNUIHQxLnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9V UCBCWSB0MS55OworCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiBy ZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJf bWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJf YWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54OworU0VMRUNUIHQxLngs IHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lO IGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21s IHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQxLng7CisKKy0tIHBhcnRpYWwgYWdncmVnYXRp b24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSAr IHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2df dGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54 ID0gdDMueCBHUk9VUCBCWSB0My55OworU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNv dW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIg T04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdS T1VQIEJZIHQzLnk7CisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbDsKLS0gCjIuMzEuMAoK --0000000000007fb9c90612d17f7a--