Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w590u-002wS2-0W for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 21:10:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w590r-008zmI-2b for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 21:10:10 +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.96) (envelope-from ) id 1w590q-008zmA-31 for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 21:10:09 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w590o-00000000r2h-0xMc for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 21:10:08 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b9793fa5371so800801766b.2 for ; Tue, 24 Mar 2026 14:10:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774386605; cv=none; d=google.com; s=arc-20240605; b=Tb/CEOgNAnS1NUKjUq81HmJ62Jx2Cp6IScAHSQ4obB9Y3MkcRmCKUfrC/on3PvvY5N TOblgRh6lr/KeD4IMJ4pAmaHaD9bLmKv/QPKN/zMO3T5f0J6GuJAaiXWC+Uxva98p4Yg o/GSH8J/v87iUC+htxBMPuNDVFZzF3rI1Xv5MAy7qTzyO5z/XaS7Lq8mKPuqgaLYguv8 Cmkct15/9pa7mrjDfCb/AduQSRjPcoCRU9F52JdbgiR4bB2Zg1oYPk2DkfzS+/SHtUKm JpUU822Q2ebj4MeqbYjD8o2mgnN6CFWldcyppV/HQDuVSZeb8R+/diLtSrXaQuvE3sH2 DgsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=0i9cL+tFhm6UHk4c9ZPC2r2xwK9M6z4xmojXcyWqAKk=; fh=YhmxPC0NYagsxVMppzYMgO0XMWsRSWzMegLjmIklu8U=; b=bF5TXkmoavY+ouOM2mVzvpZlCcO2KSbG7/A1pd45pzPo0PUhhB0G5Z1h6gH4eI2RvJ baUucyzOXDZvVh4QF4AZhgjdVRjXvkqKdeKysYvIdPHEvsCL0feLg+ULoCraoxNapcBt YXjy7TT95N7C+aHqjhvb3vdRA8lqjLX/Um9AT86ItCY3OWnM/cFkfZluz4lCcok7pWAR 9ER6Ldx/9qzAlfO3gXBs5biNSCd9wKZQ7ZYhhLalDgfmmpW2S21PfJuMFdRpYdUvHUrc /0NQcBI9nFBQfedKre3BGZArqkrRiJNeMI9OFe30bM3O1ncDXP+9rMclaYmF1qNC2I72 ioAQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774386605; x=1774991405; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=0i9cL+tFhm6UHk4c9ZPC2r2xwK9M6z4xmojXcyWqAKk=; b=QaUHXmtMZTgpZfYMYzr9z6O+TtHyB5hGrcEjb0onod9uAkvP/dtvt3qpRT4IYbPhNz RC65nLBhTYAW1u8PoW8qPmzBzDOGtSFqqGBUwB2B+lxUheb84NMUWDre6Ah/dg2e6Stn QgkggN0ivqB4Ij16lUPWG27dGIy0RhjY4UeKtknAbSKzCBZxh8+eJBHyAdnPNxF/sezH QXsCFTBeBx/YaSIClfPRAGWKxqU15pBX1f9BX6uN8W3oIBTWWEEC+kLIZxGjQ5FKLvx/ ffUz+UPiXqxwQimlUgUdU1Jf7EtE8ViDylPmd6BboSGJIq86OCHsAOvdUQ0Vl38jsmev uYXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774386605; x=1774991405; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0i9cL+tFhm6UHk4c9ZPC2r2xwK9M6z4xmojXcyWqAKk=; b=i7lzf0CdfSPuoG0wAoQK9o5YzdBAgm0OJHAhIeigrD/nRaDG1ZctWeA50Qwe2ASDej Ljc2zLZKJ8dFF82ajtmWKJzkYLZBncrsGhptgPolSr6k6IokTYTihyLc0nDwmYwIEnBU Ni9+7rInhCiPnVLrlM90mYGrDcOOfzogeHqOzam8IKH8lOM+DqNcmNU80UrbeYtnpnrA XXYt5QfAohhVtTM90JLdmV1g3QS3QrBI0VEoDYQBGuh3axmnWBvGdmRSjxLxEjXQC1iY NKYeMHoaL+J532w1anZnwFx+SrnlSsc1jrJZ9Oq8+EXTCXau7EvW23GEavW1ZD2l6huc YRXA== X-Gm-Message-State: AOJu0YxSoV5qm1adSuXb9lx4NJn+I0nrKEyW7dhmC0+cIShJCJGwQj+H Fx0qSWrngji+TNRud1SoEW0PXYZYxTahEas7Ea1XjsoIKwiniVM2dTfGLZtbr1uAaJWISCAi5Kp SQ6KV0j32OlFP4ojr1CYQmvqrqyuedCM= X-Gm-Gg: ATEYQzz9Ab3dI45QK1mdYE+vtzVgXPBZeWhSE4OQe3zW3hEv2qUk/uz0CPw+wsa5VDh Xwi0Hb5+kG49+IUTFIPRXBYN9etXr5g8uUfnMih9vJcD7ldrqJ4YYOchSANQWBFRhl4IYx41pwR beudsM5VfRZsQ3uJsandM6UcnSJDDRwE0gMxPI1WKRO6Kw+OqSLhzxQNBQnCcu1YrAmfNwDsjrs JxJRKmCFJ6lpfl/Ofkd/EbtJqF7rz0jzgSS5Kr6+JejuAxxBSWPFlBH01BKmcS+gq+4298NjnBR TKqEbOmZNAlKo0BVgJ5gdkyqJRjlXKGABdbsGGE= X-Received: by 2002:a17:906:175a:b0:b73:4d06:bc8 with SMTP id a640c23a62f3a-b9a653a22c3mr47692966b.53.1774386604330; Tue, 24 Mar 2026 14:10:04 -0700 (PDT) MIME-Version: 1.0 References: <1136161.1769654478@sss.pgh.pa.us> <1299934.1773938807@sss.pgh.pa.us> In-Reply-To: From: Robert Haas Date: Tue, 24 Mar 2026 17:09:51 -0400 X-Gm-Features: AaiRm52_5JMWYbUQGc9keeG60MEBoZ2Whe6HdTBIKlHm8JAs05DeToKofY2Ved4 Message-ID: Subject: Re: pg_plan_advice To: Tom Lane Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000003fa51c064dcb9379" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003fa51c064dcb9379 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Mar 21, 2026 at 9:13=E2=80=AFAM Robert Haas = wrote: > So I'm left with the idea that to get test_plan_advice to be fully > stable on these slower machines, it will probably be necessary to make > it control which AlternativeSubPlan is chosen and whether a > MinMaxAggPath is chosen or not. I have some ideas about how to > accomplish that in a reasonably elegant fashion without adding too > much new machinery, but I need to spend some more time validating > those ideas before committing to a precise course of action. More > soon. Here is v22. There are four new patches. 0001 adds a disabled_nodes fields to SubPlan, to fix the bug that I identified in the email to which this is a reply. 0002-0004 are an attempt to fix the remaining buildfarm failures not already addressed (or attempted to be addressed, anyway) by other commits. The basic idea, implemented by 0004, is to add a DO_NOT_SCAN() advice tag. This advice is generated when we consider a MinMaxAggPath or a hashed SubPlan. In either case, all relations which are part of the non-selected alternative are marked DO_NOT_SCAN(), which works like scan type advice but disables every possible scan type rather than still allowing exactly one of them. Unless I've missed something, this should be sufficient to make pg_plan_advice stabilize which of two alternative SubPlans we pick and whether or not a min/max aggregate is chosen. 0002 does some preliminary refactoring to provide a more centralized way of tracking per-PlannerInfo details within pg_plan_advice. 0003 makes the necessary change to src/backend/optimizer, which consists of adding an alternative_root field to each PlannerInfo and setting it appropriately. 0004 then updates pg_plan_advice to implement DO_NOT_SCAN(). 0005 is the pg_collect_advice module from previous versions of the patch set. The main change here is that I completely rewrote the TAP test, which previously was running the entire regression test suite yet another time. That's been replaced with something that is much faster and much better targeted at properly testing the shared advice collector. Aside from that, I added one more check for InvalidDsaPointer where the code was previously lacking one. 0006 is the pg_stash_advice module from previous versions of the patch set. I have adjusted this to be much safer against permanent DSA leaks. It now uses dshash_find_or_insert_extended instead of relying on the ability to dshash_find a just-inserted entry without error. It now also holds an LWLock while inserting or updating an entry in the dshash table, for reasons explained in the comments. On the other hand, it no longer unnecessarily holds the LWLock in exclusive mode when looking up advice strings for automatic application, which was a rather silly mistake in the previous version. A few additional tests have been added. Alphabetization in contrib/Makefile has been fixed. --=20 Robert Haas EDB: http://www.enterprisedb.com --0000000000003fa51c064dcb9379 Content-Type: application/octet-stream; name="v22-0003-Add-an-alternative_root-field-to-PlannerInfo.patch" Content-Disposition: attachment; filename="v22-0003-Add-an-alternative_root-field-to-PlannerInfo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn52y4yl2 RnJvbSA5YmM0MmY0ZGJiNGFmYmU2ZjY5NDM5YjkyOWY5ZWMwYzc1MDEyNzdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjMgTWFyIDIwMjYgMDg6NDk6NDQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAz LzZdIEFkZCBhbiBhbHRlcm5hdGl2ZV9yb290IGZpZWxkIHRvIFBsYW5uZXJJbmZvLgoKVHlwaWNh bGx5LCB3ZSBoYXZlIG9ubHkgb25lIFBsYW5uZXJJbmZvIGZvciBhbnkgZ2l2ZW4gc3VicXVlcnks IGJ1dAp3aGVuIHdlIGFyZSBjb25zaWRlcmluZyBhIE1pbk1heEFnZ1BhdGggb3IgYSBoYXNoZWQg c3VicGxhbiwgd2UgZW5kCnVwIGNyZWF0aW5nIGEgc2Vjb25kIFBsYW5uZXJJbmZvIGZvciB0aGUg c2FtZSBwb3J0aW9uIG9mIHRoZSBxdWVyeSwKd2l0aCBhIGNsb25lIG9mIHRoZSBvcmlnaW5hbCBy YW5nZSB0YWJsZS4gSW4gZmFjdCwgaW4gdGhlIE1pbk1heEFnZ1BhdGgKY2FzZSwgd2UgbWlnaHQg ZW5kIHVwIGNyZWF0aW5nIHNldmVyYWwgY2xvbmVzLCBvbmUgcGVyIGFnZ3JlZ2F0ZS4KCkF0IHBy ZXNlbnQsIHRoZXJlJ3Mgbm8gZWFzeSB3YXkgZm9yIGEgcGx1Z2luLCBzdWNoIGFzIHBnX3BsYW5f YWR2aWNlLAp0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIG9yaWdp bmFsIHJhbmdlIHRhYmxlIGFuZAp0aGUgY29waWVzIG9mIGl0IHRoYXQgYXJlIGNyZWF0ZWQgaW4g dGhlc2UgY2FzZXMuICBUbyBmaXgsIGFkZCBhbgphbHRlcm5hdGl2ZV9yb290IGZpZWxkIHRvIFBs YW5uZXJJbmZvLiBGb3IgYSBoYXNoZWQgc3VicGxhbiwgdGhpcwpwb2ludHMgYmFjayB0byB0aGUg UGxhbm5lckluZm8gZm9yIHRoZSBub24taGFzaGVkIGFsdGVybmF0aXZlOyBmb3IKbWlubWF4IGFn Z3JlZ2F0ZXMsIHRoaXMgcG9pbnRzIGJhY2sgdG8gdGhlIHBhcmVudCBQbGFubmVySW5mbzsgaW4K b3RoZXIgY2FzZXMsIGl0J3MganVzdCBOVUxMLgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2FsbHBhdGhzLmMgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5hZ2cuYyAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j ICAgICAgfCAxMiArKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3N1YnNl bGVjdC5jICAgIHwgIDYgKysrLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9p bnRyZWUuYyB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jICAg IHwgIDIgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgIHwgMTEg KysrKysrKysrKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFubmVyLmggICAgICAgICAgIHwg IDEgKwogOCBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IGMyNmY0OGVkZmEwLi42MTA5 M2YyMjJhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0yODMzLDcg KzI4MzMsNyBAQCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkvKiBHZW5lcmF0ZSBhIHN1YnJvb3QgYW5kIFBhdGhzIGZvciB0aGUgc3Vi cXVlcnkgKi8KIAlwbGFuX25hbWUgPSBjaG9vc2VfcGxhbl9uYW1lKHJvb3QtPmdsb2IsIHJ0ZS0+ ZXJlZi0+YWxpYXNuYW1lLCBmYWxzZSk7CiAJcmVsLT5zdWJyb290ID0gc3VicXVlcnlfcGxhbm5l cihyb290LT5nbG9iLCBzdWJxdWVyeSwgcGxhbl9uYW1lLAotCQkJCQkJCQkJcm9vdCwgZmFsc2Us IHR1cGxlX2ZyYWN0aW9uLCBOVUxMKTsKKwkJCQkJCQkJCXJvb3QsIE5VTEwsIGZhbHNlLCB0dXBs ZV9mcmFjdGlvbiwgTlVMTCk7CiAKIAkvKiBJc29sYXRlIHRoZSBwYXJhbXMgbmVlZGVkIGJ5IHRo aXMgc3BlY2lmaWMgc3VicGxhbiAqLwogCXJlbC0+c3VicGxhbl9wYXJhbXMgPSByb290LT5wbGFu X3BhcmFtczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5hZ2cu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5hZ2cuYwppbmRleCAwOWIzOGIyYzM3 OC4uNTU5YThjMTRlODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5hZ2cuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFuYWdnLmMKQEAgLTM0 MCw2ICszNDAsNyBAQCBidWlsZF9taW5tYXhfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgTWluTWF4 QWdnSW5mbyAqbW1pbmZvLAogCW1lbWNweShzdWJyb290LCByb290LCBzaXplb2YoUGxhbm5lcklu Zm8pKTsKIAlzdWJyb290LT5xdWVyeV9sZXZlbCsrOwogCXN1YnJvb3QtPnBhcmVudF9yb290ID0g cm9vdDsKKwlzdWJyb290LT5hbHRlcm5hdGl2ZV9yb290ID0gcm9vdDsKIAlzdWJyb290LT5wbGFu X25hbWUgPSBjaG9vc2VfcGxhbl9uYW1lKHJvb3QtPmdsb2IsICJtaW5tYXgiLCB0cnVlKTsKIAog CS8qIHJlc2V0IHN1YnBsYW4tcmVsYXRlZCBzdHVmZiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCmluZGV4IDQyNjA0YTBmNzVjLi45ZGNmNDljMDA1NSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNTE1LDggKzUxNSw4IEBAIHN0YW5kYXJkX3BsYW5uZXIo UXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25z LAogCQkJCQkJCSAgICZ0dXBsZV9mcmFjdGlvbiwgZXMpOwogCiAJLyogcHJpbWFyeSBwbGFubmlu ZyBlbnRyeSBwb2ludCAobWF5IHJlY3Vyc2UgZm9yIHN1YnF1ZXJpZXMpICovCi0Jcm9vdCA9IHN1 YnF1ZXJ5X3BsYW5uZXIoZ2xvYiwgcGFyc2UsIE5VTEwsIE5VTEwsIGZhbHNlLCB0dXBsZV9mcmFj dGlvbiwKLQkJCQkJCQlOVUxMKTsKKwlyb290ID0gc3VicXVlcnlfcGxhbm5lcihnbG9iLCBwYXJz ZSwgTlVMTCwgTlVMTCwgTlVMTCwgZmFsc2UsCisJCQkJCQkJdHVwbGVfZnJhY3Rpb24sIE5VTEwp OwogCiAJLyogU2VsZWN0IGJlc3QgUGF0aCBhbmQgdHVybiBpdCBpbnRvIGEgUGxhbiAqLwogCWZp bmFsX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LCBVUFBFUlJFTF9GSU5BTCwgTlVMTCk7CkBA IC03MTUsNiArNzE1LDggQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAgKiBwYXJzZSBpcyB0aGUgcXVl cnl0cmVlIHByb2R1Y2VkIGJ5IHRoZSBwYXJzZXIgJiByZXdyaXRlci4KICAqIHBsYW5fbmFtZSBp cyB0aGUgbmFtZSB0byBhc3NpZ24gdG8gdGhpcyBzdWJwbGFuIChOVUxMIGF0IHRoZSB0b3AgbGV2 ZWwpLgogICogcGFyZW50X3Jvb3QgaXMgdGhlIGltbWVkaWF0ZSBwYXJlbnQgUXVlcnkncyBpbmZv IChOVUxMIGF0IHRoZSB0b3AgbGV2ZWwpLgorICogYWx0ZXJuYXRpdmVfcm9vdCBpcyBhIHByZXZp b3VzbHkgY3JlYXRlZCBQbGFubmVySW5mbyBmb3Igd2hpY2ggdGhpcyBxdWVyeQorICogbGV2ZWwg aXMgYW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24sIG9yIGVsc2UgTlVMTC4KICAqIGhhc1Jl Y3Vyc2lvbiBpcyB0cnVlIGlmIHRoaXMgaXMgYSByZWN1cnNpdmUgV0lUSCBxdWVyeS4KICAqIHR1 cGxlX2ZyYWN0aW9uIGlzIHRoZSBmcmFjdGlvbiBvZiB0dXBsZXMgd2UgZXhwZWN0IHdpbGwgYmUg cmV0cmlldmVkLgogICogdHVwbGVfZnJhY3Rpb24gaXMgaW50ZXJwcmV0ZWQgYXMgZXhwbGFpbmVk IGZvciBncm91cGluZ19wbGFubmVyLCBiZWxvdy4KQEAgLTc0MSw4ICs3NDMsOSBAQCBzdGFuZGFy ZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vy c29yT3B0aW9ucywKICAqLwogUGxhbm5lckluZm8gKgogc3VicXVlcnlfcGxhbm5lcihQbGFubmVy R2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsIGNoYXIgKnBsYW5fbmFtZSwKLQkJCQkgUGxhbm5l ckluZm8gKnBhcmVudF9yb290LCBib29sIGhhc1JlY3Vyc2lvbiwKLQkJCQkgZG91YmxlIHR1cGxl X2ZyYWN0aW9uLCBTZXRPcGVyYXRpb25TdG10ICpzZXRvcHMpCisJCQkJIFBsYW5uZXJJbmZvICpw YXJlbnRfcm9vdCwgUGxhbm5lckluZm8gKmFsdGVybmF0aXZlX3Jvb3QsCisJCQkJIGJvb2wgaGFz UmVjdXJzaW9uLCBkb3VibGUgdHVwbGVfZnJhY3Rpb24sCisJCQkJIFNldE9wZXJhdGlvblN0bXQg KnNldG9wcykKIHsKIAlQbGFubmVySW5mbyAqcm9vdDsKIAlMaXN0CSAgICpuZXdXaXRoQ2hlY2tP cHRpb25zOwpAQCAtNzU5LDYgKzc2Miw3IEBAIHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2Jh bCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBjaGFyICpwbGFuX25hbWUsCiAJcm9vdC0+cXVlcnlfbGV2 ZWwgPSBwYXJlbnRfcm9vdCA/IHBhcmVudF9yb290LT5xdWVyeV9sZXZlbCArIDEgOiAxOwogCXJv b3QtPnBsYW5fbmFtZSA9IHBsYW5fbmFtZTsKIAlyb290LT5wYXJlbnRfcm9vdCA9IHBhcmVudF9y b290OworCXJvb3QtPmFsdGVybmF0aXZlX3Jvb3QgPSBhbHRlcm5hdGl2ZV9yb290OwogCXJvb3Qt PnBsYW5fcGFyYW1zID0gTklMOwogCXJvb3QtPm91dGVyX3BhcmFtcyA9IE5VTEw7CiAJcm9vdC0+ cGxhbm5lcl9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3N1YnNlbGVjdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vc3Vic2VsZWN0LmMKaW5kZXggMGQzMTg2MWRhN2YuLmNjZWMxZWFhN2ZlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zdWJzZWxlY3QuYwpAQCAtMjI0LDcgKzIyNCw3IEBAIG1ha2Vfc3Vi cGxhbihQbGFubmVySW5mbyAqcm9vdCwgUXVlcnkgKm9yaWdfc3VicXVlcnksCiAJLyogR2VuZXJh dGUgUGF0aHMgZm9yIHRoZSBzdWJxdWVyeSAqLwogCXN1YnJvb3QgPSBzdWJxdWVyeV9wbGFubmVy KHJvb3QtPmdsb2IsIHN1YnF1ZXJ5LAogCQkJCQkJCSAgIGNob29zZV9wbGFuX25hbWUocm9vdC0+ Z2xvYiwgc3VibGlua3N0ciwgdHJ1ZSksCi0JCQkJCQkJICAgcm9vdCwgZmFsc2UsIHR1cGxlX2Zy YWN0aW9uLCBOVUxMKTsKKwkJCQkJCQkgICByb290LCBOVUxMLCBmYWxzZSwgdHVwbGVfZnJhY3Rp b24sIE5VTEwpOwogCiAJLyogSXNvbGF0ZSB0aGUgcGFyYW1zIG5lZWRlZCBieSB0aGlzIHNwZWNp ZmljIHN1YnBsYW4gKi8KIAlwbGFuX3BhcmFtcyA9IHJvb3QtPnBsYW5fcGFyYW1zOwpAQCAtMjc0 LDcgKzI3NCw3IEBAIG1ha2Vfc3VicGxhbihQbGFubmVySW5mbyAqcm9vdCwgUXVlcnkgKm9yaWdf c3VicXVlcnksCiAJCQkvKiBHZW5lcmF0ZSBQYXRocyBmb3IgdGhlIEFOWSBzdWJxdWVyeTsgd2Un bGwgbmVlZCBhbGwgcm93cyAqLwogCQkJcGxhbl9uYW1lID0gY2hvb3NlX3BsYW5fbmFtZShyb290 LT5nbG9iLCBzdWJsaW5rc3RyLCB0cnVlKTsKIAkJCXN1YnJvb3QgPSBzdWJxdWVyeV9wbGFubmVy KHJvb3QtPmdsb2IsIHN1YnF1ZXJ5LCBwbGFuX25hbWUsCi0JCQkJCQkJCQkgICByb290LCBmYWxz ZSwgMC4wLCBOVUxMKTsKKwkJCQkJCQkJCSAgIHJvb3QsIHN1YnJvb3QsIGZhbHNlLCAwLjAsIE5V TEwpOwogCiAJCQkvKiBJc29sYXRlIHRoZSBwYXJhbXMgbmVlZGVkIGJ5IHRoaXMgc3BlY2lmaWMg c3VicGxhbiAqLwogCQkJcGxhbl9wYXJhbXMgPSByb290LT5wbGFuX3BhcmFtczsKQEAgLTk3MSw3 ICs5NzEsNyBAQCBTU19wcm9jZXNzX2N0ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJCSAqLwogCQlz dWJyb290ID0gc3VicXVlcnlfcGxhbm5lcihyb290LT5nbG9iLCBzdWJxdWVyeSwKIAkJCQkJCQkJ ICAgY2hvb3NlX3BsYW5fbmFtZShyb290LT5nbG9iLCBjdGUtPmN0ZW5hbWUsIGZhbHNlKSwKLQkJ CQkJCQkJICAgcm9vdCwgY3RlLT5jdGVyZWN1cnNpdmUsIDAuMCwgTlVMTCk7CisJCQkJCQkJCSAg IHJvb3QsIE5VTEwsIGN0ZS0+Y3RlcmVjdXJzaXZlLCAwLjAsIE5VTEwpOwogCiAJCS8qCiAJCSAq IFNpbmNlIHRoZSBjdXJyZW50IHF1ZXJ5IGxldmVsIGRvZXNuJ3QgeWV0IGNvbnRhaW4gYW55IFJU RXMsIGl0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRy ZWUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCmluZGV4IGQ1 ZTEwNDFmZmEzLi44YzBlNmE2MWM5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3ByZXAvcHJlcGpvaW50cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJl cGpvaW50cmVlLmMKQEAgLTE0MTksNiArMTQxOSw3IEBAIHB1bGxfdXBfc2ltcGxlX3N1YnF1ZXJ5 KFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpqdG5vZGUsIFJhbmdlVGJsRW50cnkgKnJ0ZSwKIAlz dWJyb290LT5xdWVyeV9sZXZlbCA9IHJvb3QtPnF1ZXJ5X2xldmVsOwogCXN1YnJvb3QtPnBsYW5f bmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKIAlzdWJyb290LT5wYXJlbnRfcm9vdCA9IHJvb3QtPnBh cmVudF9yb290OworCXN1YnJvb3QtPmFsdGVybmF0aXZlX3Jvb3QgPSByb290LT5hbHRlcm5hdGl2 ZV9yb290OwogCXN1YnJvb3QtPnBsYW5fcGFyYW1zID0gTklMOwogCXN1YnJvb3QtPm91dGVyX3Bh cmFtcyA9IE5VTEw7CiAJc3Vicm9vdC0+cGxhbm5lcl9jeHQgPSBDdXJyZW50TWVtb3J5Q29udGV4 dDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKaW5kZXggNTgzY2IwYjdhMjUu LmQxZjAyMmM1YmZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVw dW5pb24uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwpAQCAt MjUwLDcgKzI1MCw3IEBAIHJlY3Vyc2Vfc2V0X29wZXJhdGlvbnMoTm9kZSAqc2V0T3AsIFBsYW5u ZXJJbmZvICpyb290LAogCQkgKi8KIAkJcGxhbl9uYW1lID0gY2hvb3NlX3BsYW5fbmFtZShyb290 LT5nbG9iLCAic2V0b3AiLCB0cnVlKTsKIAkJc3Vicm9vdCA9IHJlbC0+c3Vicm9vdCA9IHN1YnF1 ZXJ5X3BsYW5uZXIocm9vdC0+Z2xvYiwgc3VicXVlcnksCi0JCQkJCQkJCQkJCQkgIHBsYW5fbmFt ZSwgcm9vdCwKKwkJCQkJCQkJCQkJCSAgcGxhbl9uYW1lLCByb290LCBOVUxMLAogCQkJCQkJCQkJ CQkJICBmYWxzZSwgcm9vdC0+dHVwbGVfZnJhY3Rpb24sCiAJCQkJCQkJCQkJCQkgIHBhcmVudE9w KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAyNzc1OGVjMTZmZS4uNThjZTE5ZDFkMjEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oCkBAIC0zMTcsNiArMzE3LDE3IEBAIHN0cnVjdCBQbGFubmVySW5m bwogCS8qIE5VTEwgYXQgb3V0ZXJtb3N0IFF1ZXJ5ICovCiAJUGxhbm5lckluZm8gKnBhcmVudF9y b290IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKKwkvKgorCSAqIElmIHRoaXMg UGxhbm5lckluZm8gZXhpc3RzIHRvIGNvbnNpZGVyIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0 aW9uCisJICogc3RyYXRlZ3kgZm9yIGEgcG9ydGlvbiBvZiB0aGUgcXVlcnkgdGhhdCBjb3VsZCBh bHNvIGJlIGltcGxlbWVudGVkIGJ5CisJICogc29tZSBvdGhlciBQbGFubmVySW5mbywgdGhpcyBw b2ludHMgdG8gdGhhdCBvdGhlciBQbGFubmVySW5mby4gV2hlbgorCSAqIHdlIGFyZSBjb25zaWRl cmluZyB0aGUgZmlyc3Qgb3Igb25seSBhbHRlcm5hdGl2ZSwgaXQgaXMgTlVMTC4KKwkgKgorCSAq IEN1cnJlbnRseSwgd2UgdXNlIHRoaXMgd2hlbiBjb25zaWRlcmluZyBhIE1pbk1heEFnZ1BhdGgg b3IgYSBoYXNoZWQKKwkgKiBTdWJQbGFuLgorCSAqLworCVBsYW5uZXJJbmZvICphbHRlcm5hdGl2 ZV9yb290IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CisKIAkvKiBTdWJwbGFuIG5h bWUgZm9yIEVYUExBSU4gYW5kIGRlYnVnZ2luZyBwdXJwb3NlcyAoTlVMTCBhdCB0b3AgbGV2ZWwp ICovCiAJY2hhcgkgICAqcGxhbl9uYW1lOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGxhbm5lci5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5uZXIuaAppbmRleCA4 MDUwOTc3M2MwMS4uOWM0OTUwYjM0MGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXpl ci9wbGFubmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5uZXIuaApAQCAtNjMs NiArNjMsNyBAQCBleHRlcm4gUGxhbm5lZFN0bXQgKnN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBh cnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCiBleHRlcm4gUGxhbm5lckluZm8gKnN1YnF1 ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAogCQkJCQkJCQkJ IGNoYXIgKnBsYW5fbmFtZSwKIAkJCQkJCQkJCSBQbGFubmVySW5mbyAqcGFyZW50X3Jvb3QsCisJ CQkJCQkJCQkgUGxhbm5lckluZm8gKmFsdGVybmF0aXZlX3Jvb3QsCiAJCQkJCQkJCQkgYm9vbCBo YXNSZWN1cnNpb24sIGRvdWJsZSB0dXBsZV9mcmFjdGlvbiwKIAkJCQkJCQkJCSBTZXRPcGVyYXRp b25TdG10ICpzZXRvcHMpOwogCi0tIAoyLjUxLjAKCg== --0000000000003fa51c064dcb9379 Content-Type: application/octet-stream; name="v22-0002-pg_plan_advice-Refactor-to-invent-pgpa_planner_i.patch" Content-Disposition: attachment; filename="v22-0002-pg_plan_advice-Refactor-to-invent-pgpa_planner_i.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn52y4yg1 RnJvbSA5NDM2ZTljOTQ4OTFlMDBjN2RiMDZiZjk5MThmYjY4YTRjNDUxYjY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMjQgTWFyIDIwMjYgMDc6MTk6MDQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAy LzZdIHBnX3BsYW5fYWR2aWNlOiBSZWZhY3RvciB0byBpbnZlbnQgcGdwYV9wbGFubmVyX2luZm8K CnBnX3BsYW5fYWR2aWNlIHRyYWNrcyB0d28gcGllY2VzIG9mIHBlci1QbGFubmVySW5mbyBkYXRh OiAoMSkgZm9yIGVhY2gKUlRJLCB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbiBpZGVudGlmaWVy LCBmb3IgcHVycG9zZXMgb2YKY3Jvc3MtY2hlY2tpbmcgdGhvc2UgY2FsY3VsYXRpb25zIGFnYWlu c3QgdGhlIGZpbmFsIHBsYW47IGFuZCAoMikgdGhlCnNldCBvZiBzZW1pam9pbnMgc2VlbiBkdXJp bmcgcGxhbm5pbmcgZm9yIHdoaWNoIHRoZSBzdHJhdGVneSBvZiBtYWtpbmcKb25lIHNpZGUgdW5p cXVlIHdhcyBjb25zaWRlcmVkLiBUaGUgZm9ybWVyIGlzIHRyYWNrZWQgdXNpbmcgYSBoYXNoCnRh YmxlIHRoYXQgdXNlcyA8cGxhbl9uYW1lLCBSVEk+IGFzIHRoZSBrZXksIGFuZCB0aGUgbGF0dGVy IGlzCnRyYWNrZWQgdXNpbmcgYSBMaXN0IG9mIDxwbGFuX25hbWUsIHJlbGlkcz4uCgpJdCBzZWVt cyBiZXR0ZXIgdG8gdHJhY2sgYm90aCBvZiB0aGVzZSB0aGluZ3MgaW4gdGhlIHNhbWUgd2F5IGFu ZAp0byB0cnkgdG8gcmV1c2Ugc29tZSBjb2RlIGluc3RlYWQgb2YgaGF2aW5nIGV2ZXJ5dGhpbmcg YmUgY29tcGxldGVseQpzZXBhcmF0ZSwgc28gaW52ZW50IHBncGFfcGxhbm5lcl9pbmZvOyB3ZSds bCBjcmVhdGUgb25lIGV2ZXJ5IHRpbWUgd2UKc2VlIGEgbmV3IFBsYW5uZXJJbmZvIGFuZCBuZWVk IHRvIGFzc29jaWF0ZSBzb21lIGRhdGEgd2l0aCBpdCwgYW5kCndlJ2xsIHVzZSB0aGUgcGxhbl9u YW1lIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gUGxhbm5lckluZm8Kb2JqZWN0cywgYXMg aXQgc2hvdWxkIGFsd2F5cyBiZSB1bmlxdWUuIFRoZW4sIHJlZmFjdG9yIHRoZSB0d28Kc3lzdGVt cyBtZW50aW9uZWQgYWJvdmUgdG8gdXNlIHRoaXMgbmV3IGluZnJhc3RydWN0dXJlLgoKKE5vdGUg dGhhdCB0aGUgYWRqdXN0bWVudCBpbiBwZ3BhX3BsYW5fd2Fsa2VyIGlzIG5lY2Vzc2FyeSBpbiBv cmRlcgp0byBhdm9pZCBzcHVyaW91c2x5IHRyaWdnZXJpbmcgdGhlIHNhbml0eSBjaGVjayBpbiB0 aGF0IGZ1bmN0aW9uLAppbiB0aGUgY2FzZSB3aGVyZSBhIHBncGFfcGxhbm5lcl9pbmZvIGlzIGNy ZWF0ZWQgZm9yIGEgcHVycG9zZSBub3QKcmVsYXRlZCB0byBzal91bmlxdWVfcmVscy4pCi0tLQog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYyB8IDI1MiArKysrKysrKysrKyst LS0tLS0tLS0tLS0tLQogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCB8ICAz OCArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMgIHwgIDM2ICsrLS0K IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCAgfCAgMjAgKy0KIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgfCAgIDQgKy0KIDUgZmlsZXMgY2hhbmdlZCwg MTczIGluc2VydGlvbnMoKyksIDE3NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BsYW5uZXIuYwppbmRleCBmZWU4ODkwNDc2MC4uNzAxMzlmZjQyYmUgMTAwNjQ0Ci0tLSBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwpAQCAtMzQsNTMgKzM0LDYgQEAKICNpbmNsdWRlICJw YXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAKLSNpZmRl ZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi0KLS8qCi0gKiBXaGVuIGFzc2VydGlvbnMgYXJlIGVuYWJs ZWQsIHdlIHRyeSBnZW5lcmF0aW5nIHJlbGF0aW9uIGlkZW50aWZpZXJzIGR1cmluZwotICogcGxh bm5pbmcsIHNhdmluZyB0aGVtIGluIGEgaGFzaCB0YWJsZSwgYW5kIHRoZW4gY3Jvc3MtY2hlY2tp bmcgdGhlbSBhZ2FpbnN0Ci0gKiB0aGUgb25lcyBnZW5lcmF0ZWQgYWZ0ZXIgcGxhbm5pbmcgaXMg Y29tcGxldGUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hlY2tlcl9rZXkKLXsKLQlj aGFyCSAgICpwbGFuX25hbWU7Ci0JSW5kZXgJCXJ0aTsKLX0gcGdwYV9yaV9jaGVja2VyX2tleTsK LQotdHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVja2VyCi17Ci0JcGdwYV9yaV9jaGVja2VyX2tl eSBrZXk7Ci0JdWludDMyCQlzdGF0dXM7Ci0JY29uc3QgY2hhciAqcmlkX3N0cmluZzsKLX0gcGdw YV9yaV9jaGVja2VyOwotCi1zdGF0aWMgdWludDMyIHBncGFfcmlfY2hlY2tlcl9oYXNoX2tleShw Z3BhX3JpX2NoZWNrZXJfa2V5IGtleSk7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotcGdwYV9yaV9j aGVja2VyX2NvbXBhcmVfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkgYSwgcGdwYV9yaV9jaGVja2Vy X2tleSBiKQotewotCWlmIChhLnJ0aSAhPSBiLnJ0aSkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChh LnBsYW5fbmFtZSA9PSBOVUxMKQotCQlyZXR1cm4gKGIucGxhbl9uYW1lID09IE5VTEwpOwotCWlm IChiLnBsYW5fbmFtZSA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHN0cmNtcChh LnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpID09IDA7Ci19Ci0KLSNkZWZpbmUgU0hfUFJFRklYCQkJ cGdwYV9yaV9jaGVjawotI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJCXBncGFfcmlfY2hlY2tlcgot I2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFfcmlfY2hlY2tlcl9rZXkKLSNkZWZpbmUgU0hfS0VZ CQkJCWtleQotI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KQlwZ3BhX3JpX2NoZWNrZXJfaGFz aF9rZXkoa2V5KQotI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV9yaV9jaGVja2VyX2Nv bXBhcmVfa2V5KGEsIGIpCi0jZGVmaW5lIFNIX1NDT1BFCQkJc3RhdGljIGlubGluZQotI2RlZmlu ZSBTSF9ERUNMQVJFCi0jZGVmaW5lIFNIX0RFRklORQotI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNo LmgiCi0KLSNlbmRpZgotCiB0eXBlZGVmIGVudW0gcGdwYV9qb19vdXRjb21lCiB7CiAJUEdQQV9K T19QRVJNSVRURUQsCQkJLyogcGVybWl0IHRoaXMgam9pbiBvcmRlciAqLwpAQCAtOTQsMTEgKzQ3 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFubmVyX3N0YXRlCiAJYm9vbAkJZ2VuZXJhdGVf YWR2aWNlX2ZlZWRiYWNrOwogCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CiAJcGdwYV90 cm92ZSAqdHJvdmU7Ci0JTGlzdAkgICAqc2pfdW5pcXVlX3JlbHM7Ci0KLSNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCi0JcGdwYV9yaV9jaGVja19oYXNoICpyaV9jaGVja19oYXNoOwotI2VuZGlm CisJTGlzdAkgICAqcHJvb3RzOworCXBncGFfcGxhbm5lcl9pbmZvICpsYXN0X3Byb290OwogfSBw Z3BhX3BsYW5uZXJfc3RhdGU7CiAKIHR5cGVkZWYgc3RydWN0IHBncGFfam9pbl9zdGF0ZQpAQCAt MjExLDYgKzE2MSw5IEBAIHN0YXRpYyBMaXN0ICpwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNr KExpc3QgKmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAogCQkJCQkJCQkJCSAgcGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0ICp3YWxrZXIpOwogc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2ZlZWRiYWNr X3dhcm5pbmcoTGlzdCAqZmVlZGJhY2spOwogCitzdGF0aWMgcGdwYV9wbGFubmVyX2luZm8gKnBn cGFfcGxhbm5lcl9nZXRfcHJvb3QocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJCQkJCQkJCQkJ CQkgUGxhbm5lckluZm8gKnJvb3QpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgcGdwYV9yaV9jaGVj a2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCiAJCQkJCQkJCQkJUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsKQEAgLTM0MCwxMCArMjkzLDYgQEAg cGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwgY29u c3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQlwcHMtPmdlbmVyYXRlX2FkdmljZV9mZWVkYmFjayA9 IGdlbmVyYXRlX2FkdmljZV9mZWVkYmFjazsKIAkJcHBzLT5nZW5lcmF0ZV9hZHZpY2Vfc3RyaW5n ID0gZ2VuZXJhdGVfYWR2aWNlX3N0cmluZzsKIAkJcHBzLT50cm92ZSA9IHRyb3ZlOwotI2lmZGVm IFVTRV9BU1NFUlRfQ0hFQ0tJTkcKLQkJcHBzLT5yaV9jaGVja19oYXNoID0KLQkJCXBncGFfcmlf Y2hlY2tfY3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LCAxMDI0LCBOVUxMKTsKLSNlbmRpZgog CQlTZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUoZ2xvYiwgcGxhbm5lcl9leHRlbnNpb25f aWQsIHBwcyk7CiAJfQogCkBAIC0zODQsNyArMzMzLDcgQEAgcGdwYV9wbGFubmVyX3NodXRkb3du KFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKIAkgKi8KIAlpZiAoZ2VuZXJhdGVf YWR2aWNlX3N0cmluZyB8fCBnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2spCiAJewotCQlwZ3BhX3Bs YW5fd2Fsa2VyKCZ3YWxrZXIsIHBzdG10LCBwcHMtPnNqX3VuaXF1ZV9yZWxzKTsKKwkJcGdwYV9w bGFuX3dhbGtlcigmd2Fsa2VyLCBwc3RtdCwgcHBzLT5wcm9vdHMpOwogCQlydF9pZGVudGlmaWVy cyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQpOwogCX0K IApAQCAtNTkyLDggKzU0MSw3IEBAIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpqb2lucmVsLAogCiAJLyoKIAkgKiBJZiB3ZSdyZSBjb25zaWRlcmlu ZyBpbXBsZW1lbnRpbmcgYSBzZW1pam9pbiBieSBtYWtpbmcgb25lIHNpZGUgdW5pcXVlLAotCSAq IG1ha2UgYSBub3RlIG9mIGl0IGluIHRoZSBwZ3BhX3BsYW5uZXJfc3RhdGUuIFNlZSBjb21tZW50 cyBmb3IKLQkgKiBwZ3BhX3NqX3VuaXF1ZV9yZWwgZm9yIHdoeSB3ZSBkbyB0aGlzLgorCSAqIG1h a2UgYSBub3RlIG9mIGl0IGluIHRoZSBwZ3BhX3BsYW5uZXJfc3RhdGUuCiAJICovCiAJaWYgKGpv aW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lO TkVSKQogCXsKQEAgLTYwNSwzNCArNTUzLDE4IEBAIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAogCQlpZiAocHBzICE9IE5VTEwgJiYK IAkJCShwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmcgfHwgcHBzLT5nZW5lcmF0ZV9hZHZpY2Vf ZmVlZGJhY2spKQogCQl7Ci0JCQlib29sCQlmb3VuZCA9IGZhbHNlOworCQkJcGdwYV9wbGFubmVy X2luZm8gKnByb290OwogCiAJCQkvKiBBdm9pZCBhZGRpbmcgZHVwbGljYXRlcy4gKi8KLQkJCWZv cmVhY2hfcHRyKHBncGFfc2pfdW5pcXVlX3JlbCwgdXIsIHBwcy0+c2pfdW5pcXVlX3JlbHMpCisJ CQlwcm9vdCA9IHBncGFfcGxhbm5lcl9nZXRfcHJvb3QocHBzLCByb290KTsKKwkJCWlmICghbGlz dF9tZW1iZXIocHJvb3QtPnNqX3VuaXF1ZV9yZWxzLCB1bmlxdWVyZWwtPnJlbGlkcykpCiAJCQl7 Ci0JCQkJLyoKLQkJCQkgKiBXZSBzaG91bGQgYWx3YXlzIHVzZSB0aGUgc2FtZSBwb2ludGVyIGZv ciB0aGUgc2FtZSBwbGFuCi0JCQkJICogbmFtZSwgc28gd2UgbmVlZCBub3QgdXNlIHN0cmNtcCgp IGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKHJvb3QtPnBsYW5fbmFtZSA9PSB1ci0+cGxhbl9uYW1l ICYmCi0JCQkJCWJtc19lcXVhbCh1bmlxdWVyZWwtPnJlbGlkcywgdXItPnJlbGlkcykpCi0JCQkJ ewotCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJLyog SWYgbm90IGEgZHVwbGljYXRlLCBhcHBlbmQgdG8gdGhlIGxpc3QuICovCi0JCQlpZiAoIWZvdW5k KQotCQkJewotCQkJCXBncGFfc2pfdW5pcXVlX3JlbCAqdXI7CiAJCQkJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OwogCisJCQkJLyogTWFrZSBzdXJlIHRvIHVzZSBhIHN1ZmZpY2llbnRseSBsb25n LWxpdmVkIGNvbnRleHQuICovCiAJCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhwcHMtPm1jeHQpOwotCQkJCXVyID0gcGFsbG9jX29iamVjdChwZ3BhX3NqX3VuaXF1ZV9yZWwp OwotCQkJCXVyLT5wbGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7Ci0JCQkJdXItPnJlbGlkcyA9 IGJtc19jb3B5KHVuaXF1ZXJlbC0+cmVsaWRzKTsKLQkJCQlwcHMtPnNqX3VuaXF1ZV9yZWxzID0g bGFwcGVuZChwcHMtPnNqX3VuaXF1ZV9yZWxzLCB1cik7CisJCQkJcHJvb3QtPnNqX3VuaXF1ZV9y ZWxzID0gbGFwcGVuZChwcm9vdC0+c2pfdW5pcXVlX3JlbHMsCisJCQkJCQkJCQkJCQlibXNfY29w eSh1bmlxdWVyZWwtPnJlbGlkcykpOwogCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250 ZXh0KTsKIAkJCX0KIAkJfQpAQCAtMjAxNywzNCArMTk0OSw2NCBAQCBwZ3BhX3BsYW5uZXJfZmVl ZGJhY2tfd2FybmluZyhMaXN0ICpmZWVkYmFjaykKIAkJCQllcnJkZXRhaWwoIiVzIiwgZGV0YWls YnVmLmRhdGEpKTsKIH0KIAotI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKLQogLyoKLSAqIEZh c3QgaGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGluZyBvZiBhbiBSVEkgYW5kIHBsYW4g bmFtZS4KKyAqIEdldCBvciBjcmVhdGUgdGhlIHBncGFfcGxhbm5lcl9pbmZvIGZvciB0aGUgc3Vi cm9vdCB3aXRoIHRoZSBnaXZlbgorICogcGxhbl9uYW1lLgogICovCi1zdGF0aWMgdWludDMyCi1w Z3BhX3JpX2NoZWNrZXJfaGFzaF9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpCitzdGF0aWMg cGdwYV9wbGFubmVyX2luZm8gKgorcGdwYV9wbGFubmVyX2dldF9wcm9vdChwZ3BhX3BsYW5uZXJf c3RhdGUgKnBwcywgUGxhbm5lckluZm8gKnJvb3QpCiB7Ci0JZmFzdGhhc2hfc3RhdGUgaHM7Ci0J aW50CQkJc3BfbGVuOworCXBncGFfcGxhbm5lcl9pbmZvICpuZXdfcHJvb3Q7CisKKwkvKgorCSAq IElmIHBwcy0+bGFzdF9wcm9vdCBpc24ndCBwb3B1bGF0ZWQsIHRoZXJlIGFyZSBubyBwZ3BhX3Bs YW5uZXJfaW5mbworCSAqIG9iamVjdHMgeWV0LCBzbyB3ZSBjYW4gZHJvcCB0aHJvdWdoIGFuZCBj cmVhdGUgYSBuZXcgb25lLiBPdGhlcndpc2UsCisJICogc2VhcmNoIGZvciBhbiBvYmplY3Qgd2l0 aCBhIG1hdGNoaW5nIG5hbWUsIGFuZCBkcm9wIHRocm91Z2ggb25seSBpZgorCSAqIG5vbmUgaXMg Zm91bmQuCisJICovCisJaWYgKHBwcy0+bGFzdF9wcm9vdCAhPSBOVUxMKQorCXsKKwkJaWYgKHJv b3QtPnBsYW5fbmFtZSA9PSBOVUxMKQorCQl7CisJCQlpZiAocHBzLT5sYXN0X3Byb290LT5wbGFu X25hbWUgPT0gTlVMTCkKKwkJCQlyZXR1cm4gcHBzLT5sYXN0X3Byb290OwogCi0JZmFzdGhhc2hf aW5pdCgmaHMsIDApOworCQkJZm9yZWFjaF9wdHIocGdwYV9wbGFubmVyX2luZm8sIHByb290LCBw cHMtPnByb290cykKKwkJCXsKKwkJCQlpZiAocHJvb3QtPnBsYW5fbmFtZSA9PSBOVUxMKQorCQkJ CXsKKwkJCQkJcHBzLT5sYXN0X3Byb290ID0gcHJvb3Q7CisJCQkJCXJldHVybiBwcm9vdDsKKwkJ CQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocHBzLT5sYXN0X3Byb290LT5wbGFu X25hbWUgIT0gTlVMTCAmJgorCQkJCXN0cmNtcChwcHMtPmxhc3RfcHJvb3QtPnBsYW5fbmFtZSwg cm9vdC0+cGxhbl9uYW1lKSA9PSAwKQorCQkJCXJldHVybiBwcHMtPmxhc3RfcHJvb3Q7CiAKLQlo cy5hY2N1bSA9IGtleS5ydGk7Ci0JZmFzdGhhc2hfY29tYmluZSgmaHMpOworCQkJZm9yZWFjaF9w dHIocGdwYV9wbGFubmVyX2luZm8sIHByb290LCBwcHMtPnByb290cykKKwkJCXsKKwkJCQlpZiAo cHJvb3QtPnBsYW5fbmFtZSAhPSBOVUxMICYmCisJCQkJCXN0cmNtcChwcm9vdC0+cGxhbl9uYW1l LCByb290LT5wbGFuX25hbWUpID09IDApCisJCQkJeworCQkJCQlwcHMtPmxhc3RfcHJvb3QgPSBw cm9vdDsKKwkJCQkJcmV0dXJuIHByb290OworCQkJCX0KKwkJCX0KKwkJfQorCX0KIAotCS8qIHBs YW5fbmFtZSBjYW4gYmUgTlVMTCAqLwotCWlmIChrZXkucGxhbl9uYW1lID09IE5VTEwpCi0JCXNw X2xlbiA9IDA7Ci0JZWxzZQotCQlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywg a2V5LnBsYW5fbmFtZSk7CisJLyogQ3JlYXRlIG5ldyBvYmplY3QsIGFkZCB0byBsaXN0LCBhbmQg bWFrZSBpdCBtb3N0IHJlY2VudGx5IHVzZWQuICovCisJbmV3X3Byb290ID0gcGFsbG9jMF9vYmpl Y3QocGdwYV9wbGFubmVyX2luZm8pOworCW5ld19wcm9vdC0+cGxhbl9uYW1lID0gcm9vdC0+cGxh bl9uYW1lOworCXBwcy0+cHJvb3RzID0gbGFwcGVuZChwcHMtPnByb290cywgbmV3X3Byb290KTsK KwlwcHMtPmxhc3RfcHJvb3QgPSBuZXdfcHJvb3Q7CiAKLQkvKiBoYXNoZm5fdW5zdGFibGUuaCBy ZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdlYWsgKi8KLQlyZXR1cm4gZmFzdGhh c2hfZmluYWwzMigmaHMsIHNwX2xlbik7CisJcmV0dXJuIG5ld19wcm9vdDsKIH0KIAotI2VuZGlm Ci0KIC8qCiAgKiBTYXZlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBvbmUgcmVsYXRp b24gZm9yIGZ1dHVyZSBjcm9zcy1jaGVja2luZy4KICAqLwpAQCAtMjA1MywxOSArMjAxNSwzNCBA QCBwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCSBSZWxPcHRJbmZvICpyZWwpCiB7CiAjaWZkZWYgVVNFX0FTU0VSVF9D SEVDS0lORwotCXBncGFfcmlfY2hlY2tlcl9rZXkga2V5OwotCXBncGFfcmlfY2hlY2tlciAqY2hl Y2s7Ci0JcGdwYV9pZGVudGlmaWVyIHJpZDsKLQljb25zdCBjaGFyICpyaWRfc3RyaW5nOwotCWJv b2wJCWZvdW5kOwotCi0Ja2V5LnJ0aSA9IGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbC0+cmVsaWRz KTsKLQlrZXkucGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOwotCXBncGFfY29tcHV0ZV9pZGVu dGlmaWVyX2J5X3J0aShyb290LCBrZXkucnRpLCAmcmlkKTsKLQlyaWRfc3RyaW5nID0gcGdwYV9p ZGVudGlmaWVyX3N0cmluZygmcmlkKTsKLQljaGVjayA9IHBncGFfcmlfY2hlY2tfaW5zZXJ0KHBw cy0+cmlfY2hlY2tfaGFzaCwga2V5LCAmZm91bmQpOwotCUFzc2VydCghZm91bmQgfHwgc3RyY21w KGNoZWNrLT5yaWRfc3RyaW5nLCByaWRfc3RyaW5nKSA9PSAwKTsKLQljaGVjay0+cmlkX3N0cmlu ZyA9IHJpZF9zdHJpbmc7CisJcGdwYV9wbGFubmVyX2luZm8gKnByb290OworCXBncGFfaWRlbnRp ZmllciAqcmlkOworCisJLyogR2V0IHRoZSBwZ3BhX3BsYW5uZXJfaW5mbyBmb3IgdGhpcyBQbGFu bmVySW5mby4gKi8KKwlwcm9vdCA9IHBncGFfcGxhbm5lcl9nZXRfcHJvb3QocHBzLCByb290KTsK KworCS8qIEFsbG9jYXRlIG9yIGV4dGVuZCB0aGUgcHJvb3QncyByaWRfYXJyYXkgYXMgbmVjZXNz YXJ5LiAqLworCWlmIChwcm9vdC0+cmlkX2FycmF5X3NpemUgPD0gcmVsLT5yZWxpZCkKKwl7CisJ CWludAkJCW5ld19zaXplID0gTWF4KHByb290LT5yaWRfYXJyYXlfc2l6ZSwgOCk7CisKKwkJd2hp bGUgKG5ld19zaXplIDwgcmVsLT5yZWxpZCkKKwkJCW5ld19zaXplICo9IDI7CisKKwkJaWYgKHBy b290LT5yaWRfYXJyYXlfc2l6ZSA9PSAwKQorCQkJcHJvb3QtPnJpZF9hcnJheSA9IHBhbGxvYzBf YXJyYXkocGdwYV9pZGVudGlmaWVyLCBuZXdfc2l6ZSk7CisJCWVsc2UKKwkJCXByb290LT5yaWRf YXJyYXkgPSByZXBhbGxvYzBfYXJyYXkocHJvb3QtPnJpZF9hcnJheSwKKwkJCQkJCQkJCQkJICAg cGdwYV9pZGVudGlmaWVyLAorCQkJCQkJCQkJCQkgICBwcm9vdC0+cmlkX2FycmF5X3NpemUsCisJ CQkJCQkJCQkJCSAgIG5ld19zaXplKTsKKwkJcHJvb3QtPnJpZF9hcnJheV9zaXplID0gbmV3X3Np emU7CisJfQorCisJLyogU2F2ZSByZWxhdGlvbiBpZGVudGlmaWVyIGRldGFpbHMgZm9yIHRoaXMg UlRJIGlmIG5vdCBhbHJlYWR5IGRvbmUuICovCisJcmlkID0gJnByb290LT5yaWRfYXJyYXlbcmVs LT5yZWxpZCAtIDFdOworCWlmIChyaWQtPmFsaWFzX25hbWUgPT0gTlVMTCkKKwkJcGdwYV9jb21w dXRlX2lkZW50aWZpZXJfYnlfcnRpKHJvb3QsIHJlbC0+cmVsaWQsIHJpZCk7CiAjZW5kaWYKIH0K IApAQCAtMjA3OCwyNiArMjA1NSwyMiBAQCBwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9w bGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZWRTdG10ICpwc3RtdCkKIHsKICNpZmRlZiBVU0VfQVNT RVJUX0NIRUNLSU5HCiAJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVyczsKLQlwZ3BhX3Jp X2NoZWNrX2l0ZXJhdG9yIGl0OwotCXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisJSW5kZXgJCXJ0 YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aChwc3RtdC0+cnRhYmxlKTsKIAogCS8qIENyZWF0ZSBp ZGVudGlmaWVycyBmcm9tIHRoZSBwbGFubmVkIHN0YXRlbWVudC4gKi8KIAlydF9pZGVudGlmaWVy cyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQocHN0bXQpOwogCiAJ LyogSXRlcmF0ZSBvdmVyIGlkZW50aWZpZXJzIGNyZWF0ZWQgZHVyaW5nIHBsYW5uaW5nLCBzbyB3 ZSBjYW4gY29tcGFyZS4gKi8KLQlwZ3BhX3JpX2NoZWNrX3N0YXJ0X2l0ZXJhdGUocHBzLT5yaV9j aGVja19oYXNoLCAmaXQpOwotCXdoaWxlICgoY2hlY2sgPSBwZ3BhX3JpX2NoZWNrX2l0ZXJhdGUo cHBzLT5yaV9jaGVja19oYXNoLCAmaXQpKSAhPSBOVUxMKQorCWZvcmVhY2hfcHRyKHBncGFfcGxh bm5lcl9pbmZvLCBwcm9vdCwgcHBzLT5wcm9vdHMpCiAJewogCQlpbnQJCQlydG9mZnNldCA9IDA7 Ci0JCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7Ci0JCUluZGV4CQlmbGF0X3J0aTsKIAogCQkvKgog CQkgKiBJZiB0aGVyZSdzIG5vIHBsYW4gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlbnRyeSwg dGhlbiB0aGUKIAkJICogcnRvZmZzZXQgaXMgMC4gT3RoZXJ3aXNlLCB3ZSBjYW4gc2VhcmNoIHRo ZSBTdWJQbGFuUlRJbmZvIGxpc3QgdG8KIAkJICogZmluZCB0aGUgcnRvZmZzZXQuCiAJCSAqLwot CQlpZiAoY2hlY2stPmtleS5wbGFuX25hbWUgIT0gTlVMTCkKKwkJaWYgKHByb290LT5wbGFuX25h bWUgIT0gTlVMTCkKIAkJewogCQkJZm9yZWFjaF9ub2RlKFN1YlBsYW5SVEluZm8sIHJ0aW5mbywg cHN0bXQtPnN1YnJ0aW5mb3MpCiAJCQl7CkBAIC0yMTA5LDE4ICsyMDgyLDggQEAgcGdwYV9yaV9j aGVja2VyX3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVkU3RtdCAqcHN0 bXQpCiAJCQkJICogd2lsbCBiZSBjb3BpZWQsIGFzIHBlciBhZGRfcnRlc190b19mbGF0X3J0YWJs ZS4gVGhlcmVmb3JlLAogCQkJCSAqIHRoZXJlJ3Mgbm8gZml4ZWQgcnRvZmZzZXQgdGhhdCB3ZSBj YW4gYXBwbHkgdG8gdGhlIFJUSXMKIAkJCQkgKiB1c2VkIGR1cmluZyBwbGFubmluZyB0byBsb2Nh dGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb25zCi0JCQkJICogaW4gdGhlIGZpbmFsIHJ0YWJs ZS4KLQkJCQkgKgotCQkJCSAqIFdpdGggbW9yZSBjb21wbGV4IGxvZ2ljLCB3ZSBjb3VsZCB3b3Jr IGFyb3VuZCB0aGF0IHByb2JsZW0KLQkJCQkgKiBieSByZW1lbWJlcmluZyB0aGUgd2hvbGUgY29u dGVudHMgb2YgdGhlIHN1YnF1ZXJ5J3MgcnRhYmxlCi0JCQkJICogZHVyaW5nIHBsYW5uaW5nLCBk ZXRlcm1pbmluZyB3aGljaCBvZiB0aG9zZSB3b3VsZCBoYXZlIGJlZW4KLQkJCQkgKiBjb3BpZWQg dG8gdGhlIGZpbmFsIHJ0YWJsZSwgYW5kIG1hdGNoaW5nIHRoZW0gdXAuIEJ1dCBpdAotCQkJCSAq IGRvZXNuJ3Qgc2VlbSBsaWtlIGEgd29ydGh3aGlsZSBlbmRlYXZvciBmb3IgcmlnaHQgbm93LAot CQkJCSAqIGJlY2F1c2UgUlRJcyBmcm9tIHN1Y2ggc3VicXVlcmllcyB3b24ndCBhcHBlYXIgaW4g dGhlIHBsYW4KLQkJCQkgKiB0cmVlIGl0c2VsZiwganVzdCBpbiB0aGUgcmFuZ2UgdGFibGUuIEhl bmNlLCB3ZSBjYW4gbmVpdGhlcgotCQkJCSAqIGdlbmVyYXRlIG5vciBhY2NlcHQgYWR2aWNlIGZv ciB0aGVtLgogCQkJCSAqLwotCQkJCWlmIChzdHJjbXAoY2hlY2stPmtleS5wbGFuX25hbWUsIHJ0 aW5mby0+cGxhbl9uYW1lKSA9PSAwCisJCQkJaWYgKHN0cmNtcChwcm9vdC0+cGxhbl9uYW1lLCBy dGluZm8tPnBsYW5fbmFtZSkgPT0gMAogCQkJCQkmJiAhcnRpbmZvLT5kdW1teSkKIAkJCQl7CiAJ CQkJCXJ0b2Zmc2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKQEAgLTIxMzksMTcgKzIxMDIsMjQgQEAg cGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVk U3RtdCAqcHN0bXQpCiAJCQkJY29udGludWU7CiAJCX0KIAotCQkvKgotCQkgKiBjaGVjay0+a2V5 LnJ0aSBpcyB0aGUgUlRJIHRoYXQgd2Ugc2F3IHByaW9yIHRvIHJhbmdlLXRhYmxlCi0JCSAqIGZs YXR0ZW5pbmcsIHNvIHdlIG11c3QgYWRkIHRoZSBhcHByb3ByaWF0ZSBSVCBvZmZzZXQgdG8gZ2V0 IHRoZQotCQkgKiBmaW5hbCBSVEkuCi0JCSAqLwotCQlmbGF0X3J0aSA9IGNoZWNrLT5rZXkucnRp ICsgcnRvZmZzZXQ7Ci0JCUFzc2VydChmbGF0X3J0aSA8PSBsaXN0X2xlbmd0aChwc3RtdC0+cnRh YmxlKSk7CisJCWZvciAoaW50IHJ0aSA9IDE7IHJ0aSA8PSBwcm9vdC0+cmlkX2FycmF5X3NpemU7 ICsrcnRpKQorCQl7CisJCQlJbmRleAkJZmxhdF9ydGkgPSBydG9mZnNldCArIHJ0aTsKKwkJCXBn cGFfaWRlbnRpZmllciAqcmlkMSA9ICZwcm9vdC0+cmlkX2FycmF5W3J0aSAtIDFdOworCQkJcGdw YV9pZGVudGlmaWVyICpyaWQyOworCisJCQlpZiAocmlkMS0+YWxpYXNfbmFtZSA9PSBOVUxMKQor CQkJCWNvbnRpbnVlOwogCi0JCS8qIEFzc2VydCB0aGF0IHRoZSBzdHJpbmcgd2UgY29tcHV0ZSBu b3cgbWF0Y2hlcyB0aGUgcHJldmlvdXMgb25lLiAqLwotCQlyaWRfc3RyaW5nID0gcGdwYV9pZGVu dGlmaWVyX3N0cmluZygmcnRfaWRlbnRpZmllcnNbZmxhdF9ydGkgLSAxXSk7Ci0JCUFzc2VydChz dHJjbXAocmlkX3N0cmluZywgY2hlY2stPnJpZF9zdHJpbmcpID09IDApOworCQkJQXNzZXJ0KGZs YXRfcnRpIDw9IHJ0YWJsZV9sZW5ndGgpOworCQkJcmlkMiA9ICZydF9pZGVudGlmaWVyc1tmbGF0 X3J0aSAtIDFdOworCQkJQXNzZXJ0KHN0cmNtcChyaWQxLT5hbGlhc19uYW1lLCByaWQyLT5hbGlh c19uYW1lKSA9PSAwKTsKKwkJCUFzc2VydChyaWQxLT5vY2N1cnJlbmNlID09IHJpZDItPm9jY3Vy cmVuY2UpOworCQkJQXNzZXJ0KHN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZDEtPnBhcnRu c3AsIHJpZDItPnBhcnRuc3ApKTsKKwkJCUFzc2VydChzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVs bChyaWQxLT5wYXJ0cmVsLCByaWQyLT5wYXJ0cmVsKSk7CisJCQlBc3NlcnQoc3RyaW5nc19lcXVh bF9vcl9ib3RoX251bGwocmlkMS0+cGxhbl9uYW1lLAorCQkJCQkJCQkJCQkgIHJpZDItPnBsYW5f bmFtZSkpOworCQl9CiAJfQogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfcGxhbm5lci5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5u ZXIuaAppbmRleCBjNzBlNDg2YTdmMy4uZTkwNDVmNjliY2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmgKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX3BsYW5uZXIuaApAQCAtMTIsOCArMTIsNDYgQEAKICNpZm5kZWYgUEdQQV9QTEFOTkVS X0gKICNkZWZpbmUgUEdQQV9QTEFOTkVSX0gKIAorI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5o IgorCiBleHRlcm4gdm9pZCBwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2b2lkKTsKIAorLyoK KyAqIFBlci1QbGFubmVySW5mbyBpbmZvcm1hdGlvbiB0aGF0IHdlIGdhdGhlciBkdXJpbmcgcXVl cnkgcGxhbm5pbmcuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbm5lcl9pbmZvCit7CisJ LyogUGxhbiBuYW1lIHRha2VuIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgUGxhbm5lckluZm87IE5V TEwgYXQgdG9wIGxldmVsLiAqLworCWNoYXIJICAgKnBsYW5fbmFtZTsKKworI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKKwkvKiBSZWxhdGlvbiBpZGVudGlmaWVycyBjb21wdXRlZCBmb3IgYmFz ZXJlbHMgYXQgdGhpcyBxdWVyeSBsZXZlbC4gKi8KKwlwZ3BhX2lkZW50aWZpZXIgKnJpZF9hcnJh eTsKKwlpbnQJCQlyaWRfYXJyYXlfc2l6ZTsKKyNlbmRpZgorCisJLyoKKwkgKiBMaXN0IG9mIEJp dG1hcHNldCBvYmplY3RzLiBFYWNoIHJlcHJlc2VudHMgdGhlIHJlbGlkIHNldCBvZiBhIHJlbGF0 aW9uCisJICogdGhhdCB0aGUgcGxhbm5lciBjb25zaWRlcnMgbWFraW5nIHVuaXF1ZSBkdXJpbmcg c2VtaWpvaW4gcGxhbm5pbmcuCisJICoKKwkgKiBXaGVuIGdlbmVyYXRpbmcgYWR2aWNlLCB3ZSBz aG91bGQgZW1pdCBlaXRoZXIgU0VNSUpPSU5fVU5JUVVFIGFkdmljZSBvcgorCSAqIFNFTUlKT0lO X05PTl9VTklRVUUgYWR2aWNlIGZvciBlYWNoIHNlbWlqb2luIGRlcGVuZGluZyBvbiB3aGV0aGVy IHdlCisJICogY2hvc2UgdG8gaW1wbGVtZW50IGl0IGFzIGEgc2VtaWpvaW4gb3Igd2hldGhlciB3 ZSBpbnN0ZWFkIGNob3NlIHRvIG1ha2UKKwkgKiB0aGUgbnVsbGFibGUgc2lkZSB1bmlxdWUgYW5k IHRoZW4gcGVyZm9ybSBhbiBpbm5lciBqb2luLiBXaGVuIHRoZQorCSAqIG1ha2UtdW5pcXVlIHN0 cmF0ZWd5IGlzIG5vdCBjaG9zZW4sIGl0J3Mgbm90IGVhc3kgdG8gdGVsbCBmcm9tIHRoZQorCSAq IGZpbmFsIHBsYW4gdHJlZSB3aGV0aGVyIGl0IHdhcyBjb25zaWRlcmVkLiBUaGF0J3MgYXdrd2Fy ZCwgYmVjYXVzZSB3ZQorCSAqIGRvbid0IHdhbnQgdG8gZW1pdCB1c2VsZXNzIFNFTUlKT0lOX05P Tl9VTklRVUUgYWR2aWNlIHdoZW4gdGhlcmUgd2FzIG5vCisJICogZGVjaXNpb24gdG8gYmUgbWFk ZS4gVGhpcyBsaXN0IGxldHMgdGhlIHBsYW4gdHJlZSB3YWxrZXIga25vdyBpbiB3aGljaAorCSAq IGNhc2VzIHRoYXQgYXBwcm9hY2ggd2FzIGNvbnNpZGVyZWQsIHNvIHRoYXQgaXQgZG9lc24ndCBo YXZlIHRvIGd1ZXNzLgorCSAqLworCUxpc3QJICAgKnNqX3VuaXF1ZV9yZWxzOworfSBwZ3BhX3Bs YW5uZXJfaW5mbzsKKworLyoKKyAqIFdoZW4gc2V0IHRvIGEgdmFsdWUgZ3JlYXRlciB0aGFuIHpl cm8sIGluZGljYXRlcyB0aGF0IGFkdmljZSBzaG91bGQgYmUKKyAqIGdlbmVyYXRlZCBkdXJpbmcg cXVlcnkgcGxhbm5pbmcgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBvYnZpb3VzIHJlYXNvbnMgdG8K KyAqIGRvIHNvLiBTZWUgcGdfcGxhbl9hZHZpY2VfcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbigp LgorICovCiBleHRlcm4gaW50CXBncGFfcGxhbm5lcl9nZW5lcmF0ZV9hZHZpY2U7CiAKICNlbmRp ZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jCmluZGV4IDdiODZjYzVlNmY5Li42ZmJj Nzg0YmY1NCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5j CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpAQCAtMTIsNiArMTIs NyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNp bmNsdWRlICJwZ3BhX3BsYW5uZXIuaCIKICNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKICNpbmNsdWRl ICJwZ3BhX3dhbGtlci5oIgogCkBAIC02NCwxMiArNjUsMTIgQEAgc3RhdGljIGJvb2wgcGdwYV93 YWxrZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LAogICoKICAqIFBvcHVsYXRlcyB3YWxrZXIgYmFzZWQgb24gYSB0cmF2ZXJzYWwgb2YgdGhlIFBs YW4gdHJlZXMgaW4gcHN0bXQuCiAgKgotICogc2pfdW5pcXVlX3JlbHMgaXMgYSBsaXN0IG9mIHBn cGFfc2pfdW5pcXVlX3JlbCBvYmplY3RzLCBvbmUgZm9yIGVhY2gKLSAqIHJlbGF0aW9uIHdlIGNv bnNpZGVyZWQgbWFraW5nIHVuaXF1ZSBhcyBwYXJ0IG9mIHNlbWlqb2luIHBsYW5uaW5nLgorICog cHJvb3RzIGlzIHRoZSBsaXN0IG9mIHBncGFfcGxhbm5lcl9pbmZvIG9iamVjdHMgdGhhdCB3ZXJl IGdlbmVyYXRlZAorICogZHVyaW5nIHBsYW5uaW5nLgogICovCiB2b2lkCiBwZ3BhX3BsYW5fd2Fs a2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3RtdCAqcHN0bXQs Ci0JCQkJIExpc3QgKnNqX3VuaXF1ZV9yZWxzKQorCQkJCSBMaXN0ICpwcm9vdHMpCiB7CiAJTGlz dENlbGwgICAqbGM7CiAJTGlzdAkgICAqc2pfdW5pcXVlX3J0aXMgPSBOVUxMOwpAQCAtOTIsMTkg KzkzLDIxIEBAIHBncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxr ZXIsIFBsYW5uZWRTdG10ICpwc3RtdCwKIAl9CiAKIAkvKiBBZGp1c3QgUlRJcyBmcm9tIHNqX3Vu aXF1ZV9yZWxzIGZvciB0aGUgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLiAqLwotCWZvcmVhY2hfcHRy KHBncGFfc2pfdW5pcXVlX3JlbCwgdXIsIHNqX3VuaXF1ZV9yZWxzKQorCWZvcmVhY2hfcHRyKHBn cGFfcGxhbm5lcl9pbmZvLCBwcm9vdCwgcHJvb3RzKQogCXsKLQkJaW50CQkJcnRpbmRleCA9IC0x OwogCQlpbnQJCQlydG9mZnNldCA9IDA7CiAJCWJvb2wJCWR1bW15ID0gZmFsc2U7Ci0JCUJpdG1h cHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwkJLyogSWYgdGhlcmUgYXJlIG5vIHNqX3VuaXF1ZV9y ZWxzIGZvciB0aGlzIHByb290LCB3ZSBjYW4gc2tpcCBpdC4gKi8KKwkJaWYgKHByb290LT5zal91 bmlxdWVfcmVscyA9PSBOSUwpCisJCQljb250aW51ZTsKIAogCQkvKiBJZiB0aGlzIGlzIGEgc3Vi cGxhbiwgZmluZCB0aGUgcmFuZ2UgdGFibGUgb2Zmc2V0LiAqLwotCQlpZiAodXItPnBsYW5fbmFt ZSAhPSBOVUxMKQorCQlpZiAocHJvb3QtPnBsYW5fbmFtZSAhPSBOVUxMKQogCQl7CiAJCQlmb3Jl YWNoX25vZGUoU3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKIAkJCXsK LQkJCQlpZiAoc3RyY21wKHVyLT5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9uYW1lKSA9PSAwKQor CQkJCWlmIChzdHJjbXAocHJvb3QtPnBsYW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAp CiAJCQkJewogCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CiAJCQkJCWR1bW15ID0g cnRpbmZvLT5kdW1teTsKQEAgLTExMywxOSArMTE2LDI0IEBAIHBncGFfcGxhbl93YWxrZXIocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW5uZWRTdG10ICpwc3RtdCwKIAkJCX0K IAogCQkJaWYgKHJ0b2Zmc2V0ID09IDApCi0JCQkJZWxvZyhFUlJPUiwgIm5vIHJ0b2Zmc2V0IGZv ciBwbGFuICVzIiwgdXItPnBsYW5fbmFtZSk7CisJCQkJZWxvZyhFUlJPUiwgIm5vIHJ0b2Zmc2V0 IGZvciBwbGFuICVzIiwgcHJvb3QtPnBsYW5fbmFtZSk7CiAJCX0KIAogCQkvKiBJZiB0aGlzIGVu dHJ5IHBlcnRhaW5zIHRvIGEgZHVtbXkgc3VicXVlcnksIGlnbm9yZSBpdC4gKi8KIAkJaWYgKGR1 bW15KQogCQkJY29udGludWU7CiAKLQkJLyogT2Zmc2V0IGVhY2ggZW50cnkgZnJvbSB0aGUgb3Jp Z2luYWwgc2V0LiAqLwotCQl3aGlsZSAoKHJ0aW5kZXggPSBibXNfbmV4dF9tZW1iZXIodXItPnJl bGlkcywgcnRpbmRleCkpID49IDApCi0JCQlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMs IHJ0aW5kZXggKyBydG9mZnNldCk7CisJCS8qIE9mZnNldCBlYWNoIHJlbGlkIHNldCBieSB0aGUg cnRvZmZzZXQgd2UganVzdCBjb21wdXRlZC4gKi8KKwkJZm9yZWFjaF9ub2RlKEJpdG1hcHNldCwg cmVsaWRzLCBwcm9vdC0+c2pfdW5pcXVlX3JlbHMpCisJCXsKKwkJCWludAkJCXJ0aW5kZXggPSAt MTsKKwkJCUJpdG1hcHNldCAgKmZsYXRfcmVsaWRzID0gTlVMTDsKIAotCQkvKiBTdG9yZSB0aGUg cmVzdWx0aW5nIHNldC4gKi8KLQkJc2pfdW5pcXVlX3J0aXMgPSBsYXBwZW5kKHNqX3VuaXF1ZV9y dGlzLCByZWxpZHMpOworCQkJd2hpbGUgKChydGluZGV4ID0gYm1zX25leHRfbWVtYmVyKHJlbGlk cywgcnRpbmRleCkpID49IDApCisJCQkJZmxhdF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcihmbGF0 X3JlbGlkcywgcnRpbmRleCArIHJ0b2Zmc2V0KTsKKworCQkJc2pfdW5pcXVlX3J0aXMgPSBsYXBw ZW5kKHNqX3VuaXF1ZV9ydGlzLCBmbGF0X3JlbGlkcyk7CisJCX0KIAl9CiAKIAkvKgpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCmluZGV4IDQ4OTBkNTU0ZGQzLi45Yjc0Y2QzYmE1NSAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaApAQCAtMTYsMjQgKzE2LDYgQEAKICNp bmNsdWRlICJwZ3BhX2pvaW4uaCIKICNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKIAotLyoKLSAqIFdo ZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdlIHNob3VsZCBlbWl0IGVpdGhlciBTRU1JSk9JTl9VTklR VUUgYWR2aWNlIG9yCi0gKiBTRU1JSk9JTl9OT05fVU5JUVVFIGFkdmljZSBmb3IgZWFjaCBzZW1p am9pbiBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBjaG9zZQotICogdG8gaW1wbGVtZW50IGl0IGFz IGEgc2VtaWpvaW4gb3Igd2hldGhlciB3ZSBpbnN0ZWFkIGNob3NlIHRvIG1ha2UgdGhlCi0gKiBu dWxsYWJsZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBwZXJmb3JtIGFuIGlubmVyIGpvaW4uIFdoZW4g dGhlIG1ha2UtdW5pcXVlCi0gKiBzdHJhdGVneSBpcyBub3QgY2hvc2VuLCBpdCdzIG5vdCBlYXN5 IHRvIHRlbGwgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlCi0gKiB3aGV0aGVyIGl0IHdhcyBjb25z aWRlcmVkLiBUaGF0J3MgYXdrd2FyZCwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGVtaXQKLSAq IHVzZWxlc3MgU0VNSUpPSU5fTk9OX1VOSVFVRSBhZHZpY2Ugd2hlbiB0aGVyZSB3YXMgbm8gZGVj aXNpb24gdG8gYmUgbWFkZS4KLSAqCi0gKiBUbyBhdm9pZCB0aGF0LCBkdXJpbmcgcGxhbm5pbmcs IHdlIGNyZWF0ZSBhIHBncGFfc2pfdW5pcXVlX3JlbCBmb3IgZWFjaAotICogcmVsYXRpb24gdGhh dCB3ZSBjb25zaWRlcmVkIG1ha2luZyB1bmlxdWUgZm9yIHB1cnBvc2VzIG9mIHNlbWlqb2luIHBs YW5uaW5nLgotICovCi10eXBlZGVmIHN0cnVjdCBwZ3BhX3NqX3VuaXF1ZV9yZWwKLXsKLQljaGFy CSAgICpwbGFuX25hbWU7Ci0JQml0bWFwc2V0ICAqcmVsaWRzOwotfSBwZ3BhX3NqX3VuaXF1ZV9y ZWw7Ci0KIC8qCiAgKiBXZSB1c2UgdGhlIHRlcm0gInF1ZXJ5IGZlYXR1cmUiIHRvIHJlZmVyIHRv IHBsYW4gbm9kZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcKICAqIGluIHRoZSBmb2xsb3dpbmcgd2F5 OiB0byBnZW5lcmF0ZSBhZHZpY2UsIHdlJ2xsIG5lZWQgdG8ga25vdyB0aGUgc2V0IG9mCkBAIC0x MjIsNyArMTA0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0CiAK IGV4dGVybiB2b2lkIHBncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3 YWxrZXIsCiAJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCwKLQkJCQkJCQkgTGlzdCAqc2pfdW5p cXVlX3JlbHMpOworCQkJCQkJCSBMaXN0ICpwcm9vdHMpOwogCiBleHRlcm4gdm9pZCBwZ3BhX2Fk ZF9mdXR1cmVfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKIAkJCQkJ CQkJCXBncGFfcWZfdHlwZSB0eXBlLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA4ZGYy Mzg0MGU1Ny4uMTJmNGI4YTdiZjggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MDM0 LDE0ICs0MDM0LDEyIEBAIHBncGFfam9pbl9zdHJhdGVneQogcGdwYV9qb2luX3Vucm9sbGVyCiBw Z3BhX291dHB1dF9jb250ZXh0CiBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQKK3BncGFfcGxhbm5l cl9pbmZvCiBwZ3BhX3BsYW5uZXJfc3RhdGUKIHBncGFfcWZfdHlwZQogcGdwYV9xdWVyeV9mZWF0 dXJlCi1wZ3BhX3JpX2NoZWNrZXIKLXBncGFfcmlfY2hlY2tlcl9rZXkKIHBncGFfc2NhbgogcGdw YV9zY2FuX3N0cmF0ZWd5Ci1wZ3BhX3NqX3VuaXF1ZV9yZWwKIHBncGFfdGFyZ2V0X3R5cGUKIHBn cGFfdHJvdmUKIHBncGFfdHJvdmVfZW50cnkKLS0gCjIuNTEuMAoK --0000000000003fa51c064dcb9379 Content-Type: application/octet-stream; name="v22-0004-pg_plan_advice-Invent-DO_NOT_SCAN-relation_ident.patch" Content-Disposition: attachment; filename="v22-0004-pg_plan_advice-Invent-DO_NOT_SCAN-relation_ident.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn52y4yo3 RnJvbSAwZTU4ODYwY2Y1MGZkZDA4NzEyYmZkOTkzMjY2ODZjODlhNmYzMzEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMjQgTWFyIDIwMjYgMDg6NDA6NTQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiA0 LzZdIHBnX3BsYW5fYWR2aWNlOiBJbnZlbnQKIERPX05PVF9TQ0FOKHJlbGF0aW9uX2lkZW50aWZp ZXIpLgoKVGhlIHByZW1pc2Ugb2Ygc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3BsYW5fYWR2aWNlIGlz IHRoYXQgaWYgd2UgcGxhbgphIHF1ZXJ5IG9uY2UsIGdlbmVyYXRlIHBsYW4gYWR2aWNlLCBhbmQg dGhlbiByZXBsYW4gaXQgdXNpbmcgdGhhdApzYW1lIGFkdmljZSwgYWxsIG9mIHRoYXQgYWR2aWNl IHNob3VsZCBhcHBseSBjbGVhbmx5LCBzaW5jZSB0aGUKc2V0dGluZ3MgYW5kIGV2ZXJ5dGhpbmcg ZWxzZSBhcmUgdGhlIHNhbWUuIFVuZm9ydHVuYXRlbHksIHRoYXQncwpub3QgdGhlIGNhc2U6IHRo ZSB0ZXN0IHN1aXRlIGlzIHRoZSBtYWluIHJlZ3Jlc3Npb24gdGVzdHMsIGFuZApjb25jdXJyZW50 IGFjdGl2aXR5IGNhbiBjaGFuZ2UgdGhlIHN0YXRpc3RpY3Mgb24gdGFibGVzIGludm9sdmVkCmlu IHRoZSBxdWVyeSwgZXNwZWNpYWxseSBzeXN0ZW0gY2F0YWxvZ3MuIFRoYXQncyBPSyBhcyBsb25n IGFzIGl0Cm9ubHkgYWZmZWN0cyBjb3N0aW5nLCBidXQgaW4gYSBmZXcgY2FzZXMsIGl0IGFmZmVj dHMgd2hpY2ggcmVsYXRpb25zCmFwcGVhciBpbiB0aGUgZmluYWwgcGxhbiBhdCBhbGwuCgpJbiB0 aGUgYnVpbGRmYXJtIGZhaWx1cmVzIG9ic2VydmVkIHRvIGRhdGUsIHRoaXMgaGFwcGVucyBiZWNh dXNlCndlIGNvbnNpZGVyIGFsdGVybmF0aXZlIHN1YnBsYW5zIGZvciB0aGUgc2FtZSBwb3J0aW9u IG9mIHRoZSBxdWVyeTsKaW4gdGhlb3J5LCBNaW5NYXhBZ2dQYXRoIGlzIHZ1bG5lcmFibGUgdG8g YSBzaW1pbGFyIGhhemFyZC4gSW4gYm90aApjYXNlcywgdGhlIHBsYW5uZXIgY2xvbmVzIGFuIGVu dGlyZSBzdWJxdWVyeSwgYW5kIHRoZSBjbG9uZSBoYXMgYQpkaWZmZXJlbnQgcGxhbiBuYW1lLCBh bmQgdGhlcmVmb3JlIGRpZmZlcmVudCByYW5nZSB0YWJsZSBpZGVudGlmaWVycywKdGhhbiB0aGUg b3JpZ2luYWwuIElmIGEgY29zdCBjaGFuZ2UgcmVzdWx0cyBpbiBmbGlwcGluZyBiZXR3ZWVuIG9u ZQpvZiB0aGVzZSBwbGFucyBhbmQgdGhlIG90aGVyLCB0aGUgdGVzdF9wbGFuX2FkdmljZSB0ZXN0 cyB3aWxsIGZhaWwsCmJlY2F1c2UgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIHRvIHdoaWNo IGFkdmljZSB3YXMgYXBwbGllZCB3b24ndApldmVuIGJlIHByZXNlbnQgaW4gdGhlIG91dHB1dCBv ZiB0aGUgc2Vjb25kIHBsYW5uaW5nIGN5Y2xlLgoKVG8gZml4LCBpbnZlbnQgYSBuZXcgRE9fTk9U X1NDQU4gYWR2aWNlIHRhZy4gV2hlbiBnZW5lcmF0aW5nIGFkdmljZSwKZW1pdCBpdCBmb3IgcmVs YXRpb25zIHRoYXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIGZpbmFsIHBsYW4gYXQKYWxsLCBi ZWNhdXNlIHNvbWUgYWx0ZXJuYXRpdmUgdmVyc2lvbiBvZiB0aGF0IHJlbGF0aW9uIHdhcyB1c2Vk Cmluc3RlYWQuIFdoZW4gRE9fTk9UX1NDQU4gaXMgc3VwcGxpZWQsIGRpc2FibGUgYWxsIHNjYW4g bWV0aG9kcyBmb3IKdGhhdCByZWxhdGlvbi4KClRvIG1ha2UgdGhpcyB3b3JrLCB3ZSByZXVzZSBh IGJ1bmNoIG9mIHRoZSBtYWNoaW5lcnkgdGhhdCBwcmV2aW91c2x5CmV4aXN0ZWQgZm9yIHRoZSBw dXJwb3NlIG9mIGVuc3VyaW5nIHRoYXQgd2UgYnVpbGQgdGhlIHNhbWUgc2V0IG9mCnJlbGF0aW9u IGlkZW50aWZpZXJzIGR1cmluZyBwbGFubmluZyBhcyB3ZSBkbyBmcm9tIHRoZSBmaW5hbApQbGFu bmVkU3RtdC4gSW4gdGhlIHByb2Nlc3MsIHRoaXMgY29tbWl0IHNsaWdodGx5IHdlYWtlbnMgdGhl CmNyb3NzLWNoZWNrIG1lY2hhbmlzbTogYmVmb3JlIHRoaXMgY29tbWl0LCBpdCB3b3VsZCBmaXJl IHdoZW5ldmVyCnRoZSBwZ19wbGFuX2FkdmljZSBtb2R1bGUgd2FzIGxvYWRlZCwgZXZlbiBpZiBw Z19wbGFuX2FkdmljZSB3YXNuJ3QKYWN0dWFsbHkgZG9pbmcgYW55dGhpbmc7IG5vdywgaXQgd2ls bCBvbmx5IGVuZ2FnZSB3aGVuIHdlIGhhdmUgc29tZQpvdGhlciByZWFzb24gdG8gY3JlYXRlIGEg cGdwYV9wbGFubmVyX3N0YXRlLiBUaGUgb2xkIHdheSB3YXMgY29tcGxleAphbmQgZGlkbid0IGFk ZCBtdWNoIHVzZWZ1bCB0ZXN0IGNvdmVyYWdlLCBzbyB0aGlzIHNlZW1zIGxpa2UgYW4KYWNjZXB0 YWJsZSBzYWNyaWZpY2UuCi0tLQogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAg ICAgICAgICAgIHwgICA3ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9hbHRlcm5hdGl2 ZXMub3V0ICB8IDE1OCArKysrKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3NjYW4ub3V0ICAgICAgfCAgMTcgKy0KIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24u YnVpbGQgICAgICAgICAgICB8ICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0 LmMgICAgICAgICAgICAgfCAgIDYgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5o ICAgICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQu YyAgICAgICAgICB8ICAzNSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVy LmMgICAgICAgICB8IDIxNiArKysrKysrKysrLS0tLS0tLS0KIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9wbGFubmVyLmggICAgICAgICB8ICAyNiArKy0KIGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5jICAgICAgICAgICB8ICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfd2Fsa2VyLmMgICAgICAgICAgfCAxNTYgKysrKysrKysrKystLQogY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2FsdGVybmF0aXZlcy5zcWwgICB8ICA1OCArKysrKwogY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwgICAgICAgICAgIHwgICA1ICstCiBkb2Mvc3JjL3NnbWwv cGdwbGFuYWR2aWNlLnNnbWwgICAgICAgICAgICAgICAgfCAgMTQgKy0KIDE1IGZpbGVzIGNoYW5n ZWQsIDU4NCBpbnNlcnRpb25zKCspLCAxMTggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9hbHRlcm5hdGl2ZXMub3V0CiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvYWx0ZXJuYXRpdmVzLnNx bAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9SRUFETUUKaW5kZXggYjBlNGZkMWQ2ZTEuLjJlYTYxZTliYzQxIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL1JFQURNRQpAQCAtMTA5LDYgKzEwOSwxMyBAQCBCaXRtYXAgaGVhcCBzY2FucyBj dXJyZW50bHkgZG8gbm90IGFsbG93IGZvciBhbiBpbmRleCBzcGVjaWZpY2F0aW9uOgogQklUTUFQ X0hFQVBfU0NBTihmb28gYmFyKSBzaW1wbHkgbWVhbnMgdGhhdCBlYWNoIG9mIGZvbyBhbmQgYmFy IHNob3VsZCB1c2UKIHNvbWUgc29ydCBvZiBiaXRtYXAgaGVhcCBzY2FuLgogCitUaGVyZSBpcyBh IHNwZWNpYWwgRE9fTk9UX1NDQU4oKSBhZHZpY2UgdGFnIHdoaWNoIHNheXMgdGhhdCBhIGNlcnRh aW4KK3JlbGF0aW9uIHNob3VsZG4ndCBiZSBzY2FubmVkIGF0IGFsbC4gVGhpcyBpcyB1c2VkIHRv IGNvbnRyb2wgd2hpY2ggb2YKK3R3byBjaG9pY2VzIGlzIHNlbGVjdGVkIHdoZW4gYW4gQWx0ZXJu YXRpdmVTdWJQbGFuIGlzIHJlc29sdmVkLCBhbmQKK3doZXRoZXIgb3Igbm90IGEgTWluTWF4QWdn UGF0aCBpcyBjaG9zZW4uIENvbnRyb2wgb3ZlciB1cHBlciBwbGFubmVyCitiZWhhdmlvciBpcyBn ZW5lcmFsbHkgb3V0LW9mLXNjb3BlIGF0IHRoZSBtb21lbnQsIGJ1dCB0aGVzZSBjYXNlcyBoYWQK K3RvIGJlIGhhbmRsZWQgdG8gcHJldmVudCB0ZXN0X3BsYW5fYWR2aWNlIGZhaWx1cmVzIGluIHRo ZSBidWlsZGZhcm0uCisKIEpvaW4gT3JkZXIgQWR2aWNlCiA9PT09PT09PT09PT09PT09PQogCmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2FsdGVybmF0aXZlcy5v dXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2FsdGVybmF0aXZlcy5vdXQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2ZmIyOTZkNGI0Ci0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9hbHRlcm5hdGl2ZXMu b3V0CkBAIC0wLDAgKzEsMTU4IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3Bh cmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgYWx0X3QxIChhIGlu dCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIGFsdF90 MiAoYSBpbnQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBJTkRF WCBPTiBhbHRfdDIoYSk7CitJTlNFUlQgSU5UTyBhbHRfdDEgU0VMRUNUIGdlbmVyYXRlX3Nlcmll cygxLCAxMDAwKTsKK0lOU0VSVCBJTlRPIGFsdF90MiBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDAwMCk7CitWQUNVVU0gQU5BTFlaRSBhbHRfdDE7CitWQUNVVU0gQU5BTFlaRSBhbHRfdDI7 CistLSBUaGlzIHF1ZXJ5IHVzZXMgYW4gT1IgdG8gcHJldmVudCB0aGUgRVhJU1RTIGZyb20gYmVp bmcgY29udmVydGVkIHRvIGEKKy0tIHNlbWktam9pbiwgZm9yY2luZyB0aGUgcGxhbm5lciB0aHJv dWdoIHRoZSBBbHRlcm5hdGl2ZVN1YlBsYW4gcGF0aC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGFsdF90MQorV0hFUkUgRVhJU1RTIChTRUxFQ1QgMSBG Uk9NIGFsdF90MiBXSEVSRSBhbHRfdDIuYSA9IGFsdF90MS5hKSBPUiBhbHRfdDEuYSA8IDA7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gYWx0X3QxCisgICBGaWx0ZXI6ICgo QU5ZIChhID0gKGhhc2hlZCBTdWJQbGFuIGV4aXN0c18yKS5jb2wxKSkgT1IgKGEgPCAwKSkKKyAg IFN1YlBsYW4gZXhpc3RzXzIKKyAgICAgLT4gIFNlcSBTY2FuIG9uIGFsdF90MgorIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKGFsdF90MSBhbHRfdDJAZXhpc3RzXzIpCisgICBO T19HQVRIRVIoYWx0X3QxIGFsdF90MkBleGlzdHNfMikKKyAgIERPX05PVF9TQ0FOKGFsdF90MkBl eGlzdHNfMSkKKyg4IHJvd3MpCisKKy0tIFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIGVpdGhl ciBBbHRlcm5hdGl2ZVN1YlBsYW4gYnkgYWR2aXNpbmcgYWdhaW5zdAorLS0gc2Nhbm5pbmcgdGhl IG90aGVyIHJlbGF0aW9uLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0RPX05PVF9TQ0FOKGFsdF90MkBleGlzdHNfMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gYWx0X3QxCitXSEVSRSBFWElTVFMgKFNFTEVDVCAx IEZST00gYWx0X3QyIFdIRVJFIGFsdF90Mi5hID0gYWx0X3QxLmEpIE9SIGFsdF90MS5hIDwgMDsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBhbHRfdDEKKyAgIEZpbHRlcjog KChBTlkgKGEgPSAoaGFzaGVkIFN1YlBsYW4gZXhpc3RzXzIpLmNvbDEpKSBPUiAoYSA8IDApKQor ICAgU3ViUGxhbiBleGlzdHNfMgorICAgICAtPiAgU2VxIFNjYW4gb24gYWx0X3QyCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBET19OT1RfU0NBTihhbHRfdDJAZXhpc3RzXzEpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihhbHRfdDEgYWx0X3Qy QGV4aXN0c18yKQorICAgTk9fR0FUSEVSKGFsdF90MSBhbHRfdDJAZXhpc3RzXzIpCisgICBET19O T1RfU0NBTihhbHRfdDJAZXhpc3RzXzEpCisoMTAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdET19OT1RfU0NBTihhbHRfdDJAZXhpc3RzXzIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGFsdF90MQorV0hFUkUgRVhJ U1RTIChTRUxFQ1QgMSBGUk9NIGFsdF90MiBXSEVSRSBhbHRfdDIuYSA9IGFsdF90MS5hKSBPUiBh bHRfdDEuYSA8IDA7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBhbHRfdDEKKyAgIEZpbHRlcjogKEVYSVNUUyhT dWJQbGFuIGV4aXN0c18xKSBPUiAoYSA8IDApKQorICAgU3ViUGxhbiBleGlzdHNfMQorICAgICAt PiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFsdF90Ml9hX2lkeCBvbiBhbHRfdDIKKyAgICAgICAg ICAgSW5kZXggQ29uZDogKGEgPSBhbHRfdDEuYSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IERPX05PVF9TQ0FOKGFsdF90MkBleGlzdHNfMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKGFsdF90MSkKKyAgIElOREVYX09OTFlfU0NBTihhbHRf dDJAZXhpc3RzXzEgcHVibGljLmFsdF90Ml9hX2lkeCkKKyAgIE5PX0dBVEhFUihhbHRfdDEgYWx0 X3QyQGV4aXN0c18xKQorICAgRE9fTk9UX1NDQU4oYWx0X3QyQGV4aXN0c18yKQorKDEyIHJvd3Mp CisKK0NPTU1JVDsKKy0tIE5vdyBsZXQncyB0ZXN0IGEgY2FzZSBpbnZvbHZpbmcgTWluTWF4QWdn UGF0aCwgd2hpY2ggd2UgdHJlYXQgc2ltaWxhcmx5CistLSB0byB0aGUgQWx0ZXJuYXRpdmVTdWJQ bGFuIGNhc2UuCitDUkVBVEUgVEFCTEUgYWx0X21pbm1heCAoYSBpbnQpIFdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBJTkRFWCBPTiBhbHRfbWlubWF4KGEpOworSU5T RVJUIElOVE8gYWx0X21pbm1heCBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKTsKK1ZB Q1VVTSBBTkFMWVpFIGFsdF9taW5tYXg7CistLSBVc2luZyBhbiBJbmRleCBTY2FuIGluc2lkZSBv ZiBhbiBJbml0UGxhbiBzaG91bGQgd2luIG92ZXIgYSBmdWxsIHRhYmxlCistLSBzY2FuLgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCBtaW4oYSksIG1heChhKSBGUk9N IGFsdF9taW5tYXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgUmVwbGFjZXM6IE1pbk1heEFn Z3JlZ2F0ZQorICAgSW5pdFBsYW4gbWlubWF4XzEKKyAgICAgLT4gIExpbWl0CisgICAgICAgICAg IC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYWx0X21pbm1heF9hX2lkeCBvbiBhbHRfbWlubWF4 CisgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhIElTIE5PVCBOVUxMKQorICAgSW5pdFBs YW4gbWlubWF4XzIKKyAgICAgLT4gIExpbWl0CisgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNj YW4gQmFja3dhcmQgdXNpbmcgYWx0X21pbm1heF9hX2lkeCBvbiBhbHRfbWlubWF4IGFsdF9taW5t YXhfMQorICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSBJUyBOT1QgTlVMTCkKKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oYWx0X21pbm1heEBtaW5tYXhf MSBwdWJsaWMuYWx0X21pbm1heF9hX2lkeAorICAgIGFsdF9taW5tYXhAbWlubWF4XzIgcHVibGlj LmFsdF9taW5tYXhfYV9pZHgpCisgICBOT19HQVRIRVIoYWx0X21pbm1heEBtaW5tYXhfMSBhbHRf bWlubWF4QG1pbm1heF8yKQorICAgRE9fTk9UX1NDQU4oYWx0X21pbm1heCkKKygxNSByb3dzKQor CistLSBBZHZpc2luZyBhZ2FpbnN0IHRoZSBzY2FuIG9mIGFsdF9taW5tYXggYXQgdGhlIHJvb3Qg cXVlcnkgbGV2ZWwgc2hvdWxkCistLSBjaGFuZ2Ugbm90aGluZywgYnV0IGlmIHdlIHNheSB3ZSBk b24ndCB3YW50IGVpdGhlciBvZiBvciBib3RoIG9mIHRoZQorLS0gbWlubWF4LXZhcmlhbnQgc2Nh bnMsIHRoZSBwbGFuIHNob3VsZCBzd2l0Y2ggdG8gYSBmdWxsIHRhYmxlIHNjYW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRE9fTk9UX1NDQU4oYWx0X21pbm1h eCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCBtaW4oYSksIG1h eChhKSBGUk9NIGFsdF9taW5tYXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorICAgUmVwbGFjZXM6 IE1pbk1heEFnZ3JlZ2F0ZQorICAgSW5pdFBsYW4gbWlubWF4XzEKKyAgICAgLT4gIExpbWl0Cisg ICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYWx0X21pbm1heF9hX2lkeCBvbiBh bHRfbWlubWF4CisgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhIElTIE5PVCBOVUxMKQor ICAgSW5pdFBsYW4gbWlubWF4XzIKKyAgICAgLT4gIExpbWl0CisgICAgICAgICAgIC0+ICBJbmRl eCBPbmx5IFNjYW4gQmFja3dhcmQgdXNpbmcgYWx0X21pbm1heF9hX2lkeCBvbiBhbHRfbWlubWF4 IGFsdF9taW5tYXhfMQorICAgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSBJUyBOT1QgTlVM TCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIERPX05PVF9TQ0FOKGFsdF9taW5tYXgpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4o YWx0X21pbm1heEBtaW5tYXhfMSBwdWJsaWMuYWx0X21pbm1heF9hX2lkeAorICAgIGFsdF9taW5t YXhAbWlubWF4XzIgcHVibGljLmFsdF9taW5tYXhfYV9pZHgpCisgICBOT19HQVRIRVIoYWx0X21p bm1heEBtaW5tYXhfMSBhbHRfbWlubWF4QG1pbm1heF8yKQorICAgRE9fTk9UX1NDQU4oYWx0X21p bm1heCkKKygxNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0RP X05PVF9TQ0FOKGFsdF9taW5tYXhAbWlubWF4XzEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgbWluKGEpLCBtYXgoYSkgRlJPTSBhbHRfbWlubWF4OworICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdn cmVnYXRlCisgICAtPiAgU2VxIFNjYW4gb24gYWx0X21pbm1heAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgRE9fTk9UX1NDQU4oYWx0X21pbm1heEBtaW5tYXhfMSkgLyogbWF0Y2hlZCAqLwor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKGFsdF9taW5tYXgpCisgICBOT19H QVRIRVIoYWx0X21pbm1heCkKKyAgIERPX05PVF9TQ0FOKGFsdF9taW5tYXhAbWlubWF4XzEgYWx0 X21pbm1heEBtaW5tYXhfMikKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnRE9fTk9UX1NDQU4oYWx0X21pbm1heEBtaW5tYXhfMSkgRE9fTk9UX1NDQU4oYWx0 X21pbm1heEBtaW5tYXhfMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCBtaW4oYSksIG1heChhKSBGUk9NIGFsdF9taW5tYXg7CisgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ ICBTZXEgU2NhbiBvbiBhbHRfbWlubWF4CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBET19O T1RfU0NBTihhbHRfbWlubWF4QG1pbm1heF8xKSAvKiBtYXRjaGVkICovCisgICBET19OT1RfU0NB TihhbHRfbWlubWF4QG1pbm1heF8yKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4oYWx0X21pbm1heCkKKyAgIE5PX0dBVEhFUihhbHRfbWlubWF4KQor ICAgRE9fTk9UX1NDQU4oYWx0X21pbm1heEBtaW5tYXhfMSBhbHRfbWlubWF4QG1pbm1heF8yKQor KDkgcm93cykKKworQ09NTUlUOworRFJPUCBUQUJMRSBhbHRfdDEsIGFsdF90MiwgYWx0X21pbm1h eDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0CmluZGV4IDNmOWUxM2I2 ZDQxLi40NGNlNDBmMzNhNiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBl Y3RlZC9zY2FuLm91dAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4u b3V0CkBAIC0yNzAsNyArMjcwLDggQEAgRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOwogQ09NTUlUOwogLS0gV2UgY2Fu IGZvcmNlIGEgcHJpbWFyeSBrZXkgbG9va3VwIHRvIHVzZSBhIHNlcXVlbnRpYWwgc2NhbiwgYnV0 IHdlCiAtLSBjYW4ndCBmb3JjZSBpdCB0byB1c2UgYW4gaW5kZXgtb25seSBzY2FuIChkdWUgdG8g dGhlIGNvbHVtbiBsaXN0KQotLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9m IGEgVElEIHF1YWwpLgorLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9mIGEg VElEIHF1YWwpLiBJZiB3ZSBhcHBseSBET19OT1RfU0NBTgorLS0gaGVyZSwgd2Ugc2hvdWxkIGdl dCBhIHZhbGlkIHBsYW4gYW55d2F5LCBidXQgd2l0aCB0aGUgc2NhbiBkaXNhYmxlZC4KIEJFR0lO OwogU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxl KSc7CiBFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CkBAIC0zMTMsNiArMzE0LDIwIEBAIEVYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKICAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQogKDggcm93cykKIAorU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdET19OT1RfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAg IEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIERPX05PVF9T Q0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQor ICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCiBDT01NSVQ7CiAtLSBXZSBjYW4g Zm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBzY2FuLCBi dXQgd2UgY2FuJ3QKIC0tIGZvcmNlIHRoZSB1c2Ugb2YgYW4gaW5kZXggdGhhdCB0aGUgcGxhbm5l ciB0aGlua3MgaXMgaW5hcHBsaWNhYmxlLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKaW5k ZXggMzZiYmM0ZTk4MjYuLmYyMDk4OTQ3YjY0IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVp bGQKQEAgLTUzLDYgKzUzLDcgQEAgdGVzdHMgKz0gewogICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1 aWxkX2RpcigpLAogICAncmVncmVzcyc6IHsKICAgICAnc3FsJzogWworICAgICAgJ2FsdGVybmF0 aXZlcycsCiAgICAgICAnZ2F0aGVyJywKICAgICAgICdqb2luX29yZGVyJywKICAgICAgICdqb2lu X3N0cmF0ZWd5JywKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwppbmRleCBmNGZhNmE2MjZkNC4u M2MzNDBjNmFlN2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YworKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMKQEAgLTMyLDYgKzMyLDgg QEAgcGdwYV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3Rh ZykKIAl7CiAJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKIAkJCXJldHVybiAiQklU TUFQX0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfRE9fTk9UX1NDQU46CisJCQlyZXR1cm4g IkRPX05PVF9TQ0FOIjsKIAkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CiAJCQlyZXR1cm4g IkZPUkVJR05fSk9JTiI7CiAJCWNhc2UgUEdQQV9UQUdfR0FUSEVSOgpAQCAtOTIsNiArOTQsMTAg QEAgcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCkKIAkJ CWlmIChzdHJjbXAodGFnLCAiYml0bWFwX2hlYXBfc2NhbiIpID09IDApCiAJCQkJcmV0dXJuIFBH UEFfVEFHX0JJVE1BUF9IRUFQX1NDQU47CiAJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlpZiAo c3RyY21wKHRhZywgImRvX25vdF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfRE9f Tk9UX1NDQU47CisJCQlicmVhazsKIAkJY2FzZSAnZic6CiAJCQlpZiAoc3RyY21wKHRhZywgImZv cmVpZ25fam9pbiIpID09IDApCiAJCQkJcmV0dXJuIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaCBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9hc3QuaAppbmRleCAzYzNkYjgwMTkyNi4uYTg5ZjEyNTE5MjkgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKQEAgLTgwLDYgKzgwLDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgcGdwYV9hZHZpY2VfdGFyZ2V0CiB0eXBlZGVmIGVudW0gcGdwYV9hZHZpY2VfdGFnX3R5cGUK IHsKIAlQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOLAorCVBHUEFfVEFHX0RPX05PVF9TQ0FOLAog CVBHUEFfVEFHX0ZPUkVJR05fSk9JTiwKIAlQR1BBX1RBR19HQVRIRVIsCiAJUEdQQV9UQUdfR0FU SEVSX01FUkdFLApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1 dC5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCmluZGV4IDI4ZDI4Mzlj ZTFhLi5jZDQ0MTFmMzUwYyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X291dHB1dC5jCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpAQCAt NTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3kocGdw YV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJCQlMaXN0ICpyZWxpZF9zZXRzKTsK IHN0YXRpYyB2b2lkIHBncGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpj b250ZXh0LAogCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyB2b2lkIHBncGFf b3V0cHV0X2RvX25vdF9zY2FuKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJ CQlMaXN0ICppZGVudGlmaWVycyk7CiBzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9yZWxhdGlvbnMo cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgU3RyaW5nSW5mbyBidWYsCiAJCQkJCQkJCSAg Qml0bWFwc2V0ICpyZWxpZHMpOwogCkBAIC0xNTYsNiArMTU4LDkgQEAgcGdwYV9vdXRwdXRfYWR2 aWNlKFN0cmluZ0luZm8gYnVmLCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKIAog CS8qIEVtaXQgTk9fR0FUSEVSIGFkdmljZS4gKi8KIAlwZ3BhX291dHB1dF9ub19nYXRoZXIoJmNv bnRleHQsIHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zKTsKKworCS8qIEVtaXQgRE9fTk9UX1NDQU4g YWR2aWNlLiAqLworCXBncGFfb3V0cHV0X2RvX25vdF9zY2FuKCZjb250ZXh0LCB3YWxrZXItPmRv X25vdF9zY2FuX2lkZW50aWZpZXJzKTsKIH0KIAogLyoKQEAgLTM5NSw2ICs0MDAsMzYgQEAgcGdw YV9vdXRwdXRfbm9fZ2F0aGVyKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIEJpdG1hcHNl dCAqcmVsaWRzKQogCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKIH0K IAorLyoKKyAqIE91dHB1dCBET19OT1RfU0NBTiBhZHZpY2UgZm9yIGFsbCByZWxhdGlvbnMgaW4g dGhlIHByb3ZpZGVkIGxpc3Qgb2YKKyAqIGlkZW50aWZpZXJzLgorICovCitzdGF0aWMgdm9pZAor cGdwYV9vdXRwdXRfZG9fbm90X3NjYW4ocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgTGlz dCAqaWRlbnRpZmllcnMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKGlkZW50aWZp ZXJzID09IE5JTCkKKwkJcmV0dXJuOworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhjb250ZXh0LT5idWYsICJET19OT1RfU0NBTigiKTsKKworCWZvcmVhY2hfcHRyKHBn cGFfaWRlbnRpZmllciwgcmlkLCBpZGVudGlmaWVycykKKwl7CisJCWlmIChmaXJzdCkKKwkJCWZp cnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4 dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihj b250ZXh0LT5idWYsICcgJyk7CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhjb250ZXh0 LT5idWYsIHBncGFfaWRlbnRpZmllcl9zdHJpbmcocmlkKSk7CisJfQorCisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCiAvKgogICogT3V0cHV0IHRoZSBpZGVu dGlmaWVycyBmb3IgZWFjaCBSVEkgaW4gdGhlIHByb3ZpZGVkIHNldC4KICAqCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BsYW5uZXIuYwppbmRleCA3MDEzOWZmNDJiZS4uNzUxYTI1NTYxNWEgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYwpAQCAtMTY0LDExICsxNjQsMTMgQEAg c3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2ZlZWRiYWNrX3dhcm5pbmcoTGlzdCAqZmVlZGJhY2sp Owogc3RhdGljIHBncGFfcGxhbm5lcl9pbmZvICpwZ3BhX3BsYW5uZXJfZ2V0X3Byb290KHBncGFf cGxhbm5lcl9zdGF0ZSAqcHBzLAogCQkJCQkJCQkJCQkJIFBsYW5uZXJJbmZvICpyb290KTsKIAot c3RhdGljIGlubGluZSB2b2lkIHBncGFfcmlfY2hlY2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0 ZSAqcHBzLAotCQkJCQkJCQkJCVBsYW5uZXJJbmZvICpyb290LAotCQkJCQkJCQkJCVJlbE9wdElu Zm8gKnJlbCk7Ci1zdGF0aWMgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFu bmVyX3N0YXRlICpwcHMsCi0JCQkJCQkJCQkgUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRpYyBp bmxpbmUgdm9pZCBwZ3BhX2NvbXB1dGVfcnRfaWRlbnRpZmllcihwZ3BhX3BsYW5uZXJfaW5mbyAq cHJvb3QsCisJCQkJCQkJCQkJCSAgUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgUmVs T3B0SW5mbyAqcmVsKTsKK3N0YXRpYyB2b2lkIHBncGFfY29tcHV0ZV9ydF9vZmZzZXRzKHBncGFf cGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJUGxhbm5lZFN0bXQgKnBzdG10KTsKK3N0YXRp YyB2b2lkIHBncGFfdmFsaWRhdGVfcnRfaWRlbnRpZmllcnMocGdwYV9wbGFubmVyX3N0YXRlICpw cHMsCisJCQkJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCk7CiAKIHN0YXRpYyBjaGFyICpwZ3Bh X2Jtc190b19jc3RyaW5nKEJpdG1hcHNldCAqYm1zKTsKIHN0YXRpYyBjb25zdCBjaGFyICpwZ3Bh X2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5cGUpOwpAQCAtMjY0LDIwICsyNjYs MTAgQEAgcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJz ZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAogCQl9CiAJfQogCi0jaWZkZWYgVVNFX0FTU0VS VF9DSEVDS0lORwotCi0JLyoKLQkgKiBJZiBhc3NlcnRzIGFyZSBlbmFibGVkLCBhbHdheXMgYnVp bGQgYSBwcml2YXRlIHN0YXRlIG9iamVjdCBmb3IKLQkgKiBjcm9zcy1jaGVja3MuCi0JICovCi0J bmVlZHNfcHBzID0gdHJ1ZTsKLSNlbmRpZgotCiAJLyoKIAkgKiBXZSBvbmx5IGNyZWF0ZSBhbmQg aW5pdGlhbGl6ZSBhIHByaXZhdGUgc3RhdGUgb2JqZWN0IGlmIGl0J3MgbmVlZGVkIGZvcgogCSAq IHNvbWUgcHVycG9zZS4gVGhhdCBjb3VsZCBiZSAoMSkgcmVjb3JkaW5nIHRoYXQgd2Ugd2lsbCBu ZWVkIHRvIGdlbmVyYXRlCi0JICogYW4gYWR2aWNlIHN0cmluZywgKDIpIHN0b3JpbmcgYSB0cm92 ZSBvZiBzdXBwbGllZCBhZHZpY2UsIG9yICgzKQotCSAqIGZhY2lsaXRhdGluZyBkZWJ1Z2dpbmcg Y3Jvc3MtY2hlY2tzIHdoZW4gYXNzZXJ0cyBhcmUgZW5hYmxlZC4KKwkgKiBhbiBhZHZpY2Ugc3Ry aW5nIG9yICgyKSBzdG9yaW5nIGEgdHJvdmUgb2Ygc3VwcGxpZWQgYWR2aWNlLgogCSAqCiAJICog Q3VycmVudGx5LCB0aGUgYWN0aXZlIG1lbW9yeSBjb250ZXh0IHNob3VsZCBiZSBvbmUgdGhhdCB3 aWxsIGxhc3QgZm9yCiAJICogdGhlIGVudGlyZSBkdXJhdGlvbiBvZiBxdWVyeSBwbGFubmluZywg YnV0IGlmIEdFUU8gaXMgaW4gdXNlLCBpdCdzCkBAIC0zMjEsOSArMzEzLDE2IEBAIHBncGFfcGxh bm5lcl9zaHV0ZG93bihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCiAJcHBzID0g R2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lk KTsKIAlpZiAocHBzICE9IE5VTEwpCiAJeworCQkvKiBTZXQgdXAgc29tZSBsb2NhbCB2YXJpYWJs ZXMuICovCiAJCXRyb3ZlID0gcHBzLT50cm92ZTsKIAkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNr ID0gcHBzLT5nZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7CiAJCWdlbmVyYXRlX2FkdmljZV9zdHJp bmcgPSBwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisKKwkJLyogQ29tcHV0ZSByYW5nZSB0 YWJsZSBvZmZzZXRzLiAqLworCQlwZ3BhX2NvbXB1dGVfcnRfb2Zmc2V0cyhwcHMsIHBzdG10KTsK KworCQkvKiBDcm9zcy1jaGVjayByYW5nZSB0YWJsZSBpZGVudGlmaWVycy4gKi8KKwkJcGdwYV92 YWxpZGF0ZV9ydF9pZGVudGlmaWVycyhwcHMsIHBzdG10KTsKIAl9CiAKIAkvKgpAQCAtMzk0LDEz ICszOTMsNiBAQCBwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVl cnkgKnBhcnNlLAogCQkJbGFwcGVuZChwc3RtdC0+ZXh0ZW5zaW9uX3N0YXRlLAogCQkJCQltYWtl RGVmRWxlbSgicGdfcGxhbl9hZHZpY2UiLCAoTm9kZSAqKSBwZ3BhX2l0ZW1zLCAtMSkpOwogCi0J LyoKLQkgKiBJZiBhc3NlcnRpb25zIGFyZSBlbmFibGVkLCBjcm9zcy1jaGVjayB0aGUgZ2VuZXJh dGVkIHJhbmdlIHRhYmxlCi0JICogaWRlbnRpZmllcnMuCi0JICovCi0JaWYgKHBwcyAhPSBOVUxM KQotCQlwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocHBzLCBwc3RtdCk7Ci0KIAkvKiBQYXNzIGNh bGwgdG8gcHJldmlvdXMgaG9vay4gKi8KIAlpZiAocHJldl9wbGFubmVyX3NodXRkb3duKQogCQko KnByZXZfcGxhbm5lcl9zaHV0ZG93bikgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJpbmcsIHBzdG10 KTsKQEAgLTQwOCwzNSArNDAwLDM4IEBAIHBncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFubmVyR2xv YmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCiAKIC8qCiAgKiBIb29rIGZ1bmN0aW9uIGZvciBidWls ZF9zaW1wbGVfcmVsKCkuCi0gKgotICogV2UgY2FuIGFwcGx5IHNjYW4gYWR2aWNlIGF0IHRoaXMg cG9pbnQsIGFuZCB3ZSBhbHNvIHVzZSB0aGlzIGFzIGFuCi0gKiBvcHBvcnR1bml0eSB0byBkbyBy YW5nZS10YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNoZWNraW5nIGluIGFzc2VydC1lbmFibGVkCi0g KiBidWlsZHMuCiAgKi8KIHN0YXRpYyB2b2lkCiBwZ3BhX2J1aWxkX3NpbXBsZV9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmFuZ2VUYmxFbnRyeSAqcnRlKQogewogCXBn cGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBncGFfcGxhbm5lcl9pbmZvICpwcm9vdCA9IE5VTEw7 CiAKIAkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9z ZXR1cCgpLiAqLwogCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShyb290LT5n bG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CiAKLQkvKiBTYXZlIGRldGFpbHMgbmVlZGVkIGZv ciByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNoZWNraW5nLiAqLworCS8qCisJICogTG9v ayB1cCB0aGUgcGdwYV9wbGFubmVyX2luZm8gZm9yIHRoaXMgc3VicXVlcnksIGFuZCBtYWtlIHN1 cmUgd2UndmUKKwkgKiBzYXZlZCBhIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIuCisJICovCiAJaWYg KHBwcyAhPSBOVUxMKQotCQlwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwcHMsIHJvb3QsIHJlbCk7CisJ eworCQlwcm9vdCA9IHBncGFfcGxhbm5lcl9nZXRfcHJvb3QocHBzLCByb290KTsKKwkJcGdwYV9j b21wdXRlX3J0X2lkZW50aWZpZXIocHJvb3QsIHJvb3QsIHJlbCk7CisJfQogCiAJLyogSWYgcXVl cnkgYWR2aWNlIHdhcyBwcm92aWRlZCwgc2VhcmNoIGZvciByZWxldmFudCBlbnRyaWVzLiAqLwog CWlmIChwcHMgIT0gTlVMTCAmJiBwcHMtPnRyb3ZlICE9IE5VTEwpCiAJewotCQlwZ3BhX2lkZW50 aWZpZXIgcmlkOworCQlwZ3BhX2lkZW50aWZpZXIgKnJpZDsKIAkJcGdwYV90cm92ZV9yZXN1bHQg dHJlc3VsdF9zY2FuOwogCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0X3JlbDsKIAogCQkvKiBT ZWFyY2ggZm9yIHNjYW4gYWR2aWNlIGFuZCBnZW5lcmFsIHJlbCBhZHZpY2UuICovCi0JCXBncGFf Y29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCByZWwtPnJlbGlkLCAmcmlkKTsKLQkJcGdw YV90cm92ZV9sb29rdXAocHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwgMSwgJnJp ZCwKKwkJcmlkID0gJnByb290LT5yaWRfYXJyYXlbcmVsLT5yZWxpZCAtIDFdOworCQlwZ3BhX3Ry b3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOLCAxLCByaWQsCiAJ CQkJCQkgICZ0cmVzdWx0X3NjYW4pOwotCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQ R1BBX1RST1ZFX0xPT0tVUF9SRUwsIDEsICZyaWQsCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+ dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1JFTCwgMSwgcmlkLAogCQkJCQkJICAmdHJlc3VsdF9y ZWwpOwogCiAJCS8qIElmIHJlbGV2YW50IGVudHJpZXMgd2VyZSBmb3VuZCwgYXBwbHkgdGhlbS4g Ki8KQEAgLTE2MjIsNiArMTYxNyw4IEBAIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShS ZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJpZXMs CiAJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKIHsKKwljb25zdCB1aW50NjQgYWxs X3NjYW5fbWFzayA9IFBHU19TQ0FOX0FOWSB8IFBHU19BUFBFTkQgfAorCQlQR1NfTUVSR0VfQVBQ RU5EIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsKIAlib29sCQlnYXRoZXJfY29uZmxpY3QgPSBm YWxzZTsKIAlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CiAJQml0bWFw c2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOwpAQCAtMTYzMiwxNiArMTYyOSwxOCBAQCBw Z3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAogCUJpdG1hcHNl dCAgKnNjYW5fdHlwZV9pbmRleGVzID0gTlVMTDsKIAlCaXRtYXBzZXQgICpzY2FuX3R5cGVfcmVs X2luZGV4ZXMgPSBOVUxMOwogCXVpbnQ2NAkJZ2F0aGVyX21hc2sgPSAwOwotCXVpbnQ2NAkJc2Nh bl90eXBlID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9IGFsbF9zY2FuX21hc2s7CS8qIHNlbnRp bmVsOiBubyBhZHZpY2UgeWV0ICovCiAKIAkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFk dmljZS4gKi8KIAl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkg Pj0gMCkKIAl7CiAJCXBncGFfdHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tp XTsKLQkJdWludDY0CQlteV9zY2FuX3R5cGUgPSAwOworCQl1aW50NjQJCW15X3NjYW5fdHlwZSA9 IGFsbF9zY2FuX21hc2s7CiAKIAkJLyogVHJhbnNsYXRlIG91ciBhZHZpY2UgdGFncyB0byBhIHNj YW4gc3RyYXRlZ3kgYWR2aWNlIHZhbHVlLiAqLwotCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BB X1RBR19CSVRNQVBfSEVBUF9TQ0FOKQorCQlpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19E T19OT1RfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IDA7CisJCWVsc2UgaWYgKG15X2VudHJ5LT50 YWcgPT0gUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTikKIAkJewogCQkJLyoKIAkJCSAqIEN1cnJl bnRseSwgUEdTX0NPTlNJREVSX0lOREVYT05MWSBjYW4gc3VwcHJlc3MgQml0bWFwIEhlYXAKQEAg LTE2NzUsOSArMTY3NCw5IEBAIHBncGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJ bmZvICpyZWwsCiAJCSAqIElOREVYX1NDQU4oYSBiLmMpIGFzIG5vbi1jb25mbGljdGluZyBpZiBp dCBoYXBwZW5zIHRoYXQgdGhlIG9ubHkKIAkJICogaW5kZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEg YiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUgY29kZS4KIAkJICovCi0JCWlmIChteV9z Y2FuX3R5cGUgIT0gMCkKKwkJaWYgKG15X3NjYW5fdHlwZSAhPSBhbGxfc2Nhbl9tYXNrKQogCQl7 Ci0JCQlpZiAoc2Nhbl90eXBlICE9IDAgJiYgc2Nhbl90eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJ CWlmIChzY2FuX3R5cGUgIT0gYWxsX3NjYW5fbWFzayAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90 eXBlKQogCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CiAJCQlpZiAoIXNjYW5fdHlwZV9j b25mbGljdCAmJiBzY2FuX2VudHJ5ICE9IE5VTEwgJiYKIAkJCQlteV9lbnRyeS0+dGFyZ2V0LT5p dGFyZ2V0ICE9IE5VTEwgJiYKQEAgLTE3MTIsNyArMTcxMSw3IEBAIHBncGFfcGxhbm5lcl9hcHBs eV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCiAJCQl7CiAJCQkJY29uc3QgdWludDY0IG15 X3NjYW5fdHlwZSA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EOwogCi0JCQkJaWYgKHNj YW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJaWYgKHNjYW5f dHlwZSAhPSBhbGxfc2Nhbl9tYXNrICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCiAJCQkJ CXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CiAJCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5Owog CQkJCXNjYW5fdHlwZSA9IG15X3NjYW5fdHlwZTsKQEAgLTE3OTEsNyArMTc5MCw3IEBAIHBncGFf cGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCiAJCWlmIChtYXRjaGVk X2luZGV4ID09IE5VTEwpCiAJCXsKIAkJCS8qIERvbid0IGZvcmNlIHRoZSBzY2FuIHR5cGUgaWYg dGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QuICovCi0JCQlzY2FuX3R5cGUgPSAwOworCQkJc2Nhbl90 eXBlID0gYWxsX3NjYW5fbWFzazsKIAogCQkJLyogTWFyayBhZHZpY2UgYXMgaW5hcHBsaWNhYmxl LiAqLwogCQkJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5k ZXhlcywKQEAgLTE4MzUsMTQgKzE4MzQsOCBAQCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZp Y2UoUmVsT3B0SW5mbyAqcmVsLAogCSAqIE9ubHkgY2xlYXIgYml0cyBoZXJlLCBzbyB0aGF0IHdl IHN0aWxsIHJlc3BlY3QgdGhlIGVuYWJsZV8qIEdVQ3MuIERvCiAJICogbm90aGluZyBpbiBjYXNl cyB3aGVyZSB0aGUgYWR2aWNlIG9uIGEgc2luZ2xlIHRvcGljIGNvbmZsaWN0cy4KIAkgKi8KLQlp ZiAoc2Nhbl90eXBlICE9IDAgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKLQl7Ci0JCXVpbnQ2NAkJ YWxsX3NjYW5fbWFzazsKLQotCQlhbGxfc2Nhbl9tYXNrID0gUEdTX1NDQU5fQU5ZIHwgUEdTX0FQ UEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAotCQkJUEdTX0NPTlNJREVSX0lOREVYT05MWTsKKwlp ZiAoc2Nhbl90eXBlICE9IGFsbF9zY2FuX21hc2sgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKIAkJ cmVsLT5wZ3NfbWFzayAmPSB+KGFsbF9zY2FuX21hc2sgJiB+c2Nhbl90eXBlKTsKLQl9CiAJaWYg KGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKIAl7CiAJCXVpbnQ2NAkJYWxs X2dhdGhlcl9tYXNrOwpAQCAtMTk5OCw5ICsxOTkxLDQxIEBAIHBncGFfcGxhbm5lcl9nZXRfcHJv b3QocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZXJJbmZvICpyb290KQogCQl9CiAJfQog Ci0JLyogQ3JlYXRlIG5ldyBvYmplY3QsIGFkZCB0byBsaXN0LCBhbmQgbWFrZSBpdCBtb3N0IHJl Y2VudGx5IHVzZWQuICovCisJLyogQ3JlYXRlIG5ldyBvYmplY3QuICovCiAJbmV3X3Byb290ID0g cGFsbG9jMF9vYmplY3QocGdwYV9wbGFubmVyX2luZm8pOworCisJLyogU2V0IHBsYW4gbmFtZSBh bmQgYWx0ZXJuYXRpdmUgcGxhbiBuYW1lLiAqLwogCW5ld19wcm9vdC0+cGxhbl9uYW1lID0gcm9v dC0+cGxhbl9uYW1lOworCWlmIChyb290LT5hbHRlcm5hdGl2ZV9yb290ID09IE5VTEwpCisJCW5l d19wcm9vdC0+YWx0ZXJuYXRpdmVfcGxhbl9uYW1lID0gcm9vdC0+cGxhbl9uYW1lOworCWVsc2UK KwkJbmV3X3Byb290LT5hbHRlcm5hdGl2ZV9wbGFuX25hbWUgPSByb290LT5hbHRlcm5hdGl2ZV9y b290LT5wbGFuX25hbWU7CisKKwkvKgorCSAqIElmIHRoZSBuZXdseS1jcmVhdGVkIHByb290IHNo YXJlcyBhbiBhbHRlcm5hdGl2ZV9wbGFuX25hbWUgd2l0aCBvbmUgb3IKKwkgKiBtb3JlIG90aGVy cywgYWxsIHNob3VsZCBoYXZlIHRoZSBpc19hbHRlcm5hdGl2ZV9wbGFuIGZsYWcgc2V0LgorCSAq LworCWZvcmVhY2hfcHRyKHBncGFfcGxhbm5lcl9pbmZvLCBvdGhlcl9wcm9vdCwgcHBzLT5wcm9v dHMpCisJeworCQlpZiAoc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwobmV3X3Byb290LT5hbHRl cm5hdGl2ZV9wbGFuX25hbWUsCisJCQkJCQkJCQkgICBvdGhlcl9wcm9vdC0+YWx0ZXJuYXRpdmVf cGxhbl9uYW1lKSkKKwkJeworCQkJbmV3X3Byb290LT5pc19hbHRlcm5hdGl2ZV9wbGFuID0gdHJ1 ZTsKKwkJCW90aGVyX3Byb290LT5pc19hbHRlcm5hdGl2ZV9wbGFuID0gdHJ1ZTsKKwkJfQorCX0K KworCS8qCisJICogT3V0ZXJtb3N0IHF1ZXJ5IGxldmVsIGFsd2F5cyBoYXMgcnRvZmZzZXQgMDsg b3RoZXIgcnRvZmZzZXQgdmFsdWVzIGFyZQorCSAqIGNvbXB1dGVkIGxhdGVyLgorCSAqLworCWlm IChyb290LT5wbGFuX25hbWUgPT0gTlVMTCkKKwl7CisJCW5ld19wcm9vdC0+aGFzX3J0b2Zmc2V0 ID0gdHJ1ZTsKKwkJbmV3X3Byb290LT5ydG9mZnNldCA9IDA7CisJfQorCisJLyogQWRkIHRvIGxp c3QgYW5kIG1ha2UgaXQgbW9zdCByZWNlbnRseSB1c2VkLiAqLwogCXBwcy0+cHJvb3RzID0gbGFw cGVuZChwcHMtPnByb290cywgbmV3X3Byb290KTsKIAlwcHMtPmxhc3RfcHJvb3QgPSBuZXdfcHJv b3Q7CiAKQEAgLTIwMDgsMTkgKzIwMzMsMTUgQEAgcGdwYV9wbGFubmVyX2dldF9wcm9vdChwZ3Bh X3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lckluZm8gKnJvb3QpCiB9CiAKIC8qCi0gKiBTYXZl IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBvbmUgcmVsYXRpb24gZm9yIGZ1dHVyZSBj cm9zcy1jaGVja2luZy4KKyAqIENvbXB1dGUgdGhlIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgZm9y IG9uZSByZWxhdGlvbiBhbmQgc2F2ZSBpdCBmb3IgZnV0dXJlCisgKiB1c2UuCiAgKi8KIHN0YXRp YyB2b2lkCi1wZ3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxh bm5lckluZm8gKnJvb3QsCi0JCQkJCSBSZWxPcHRJbmZvICpyZWwpCitwZ3BhX2NvbXB1dGVfcnRf aWRlbnRpZmllcihwZ3BhX3BsYW5uZXJfaW5mbyAqcHJvb3QsIFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJICAgUmVsT3B0SW5mbyAqcmVsKQogewotI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcK LQlwZ3BhX3BsYW5uZXJfaW5mbyAqcHJvb3Q7CiAJcGdwYV9pZGVudGlmaWVyICpyaWQ7CiAKLQkv KiBHZXQgdGhlIHBncGFfcGxhbm5lcl9pbmZvIGZvciB0aGlzIFBsYW5uZXJJbmZvLiAqLwotCXBy b290ID0gcGdwYV9wbGFubmVyX2dldF9wcm9vdChwcHMsIHJvb3QpOwotCiAJLyogQWxsb2NhdGUg b3IgZXh0ZW5kIHRoZSBwcm9vdCdzIHJpZF9hcnJheSBhcyBuZWNlc3NhcnkuICovCiAJaWYgKHBy b290LT5yaWRfYXJyYXlfc2l6ZSA8PSByZWwtPnJlbGlkKQogCXsKQEAgLTIwNDMsMzYgKzIwNjQs MzIgQEAgcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5u ZXJJbmZvICpyb290LAogCXJpZCA9ICZwcm9vdC0+cmlkX2FycmF5W3JlbC0+cmVsaWQgLSAxXTsK IAlpZiAocmlkLT5hbGlhc19uYW1lID09IE5VTEwpCiAJCXBncGFfY29tcHV0ZV9pZGVudGlmaWVy X2J5X3J0aShyb290LCByZWwtPnJlbGlkLCByaWQpOwotI2VuZGlmCiB9CiAKIC8qCi0gKiBWYWxp ZGF0ZSB0aGF0IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVycyB3ZSB3ZXJlIGFibGUgdG8gZ2Vu ZXJhdGUgZHVyaW5nCi0gKiBwbGFubmluZyBtYXRjaCB0aGUgb25lcyB3ZSBnZW5lcmF0ZWQgZnJv bSB0aGUgZmluYWwgcGxhbi4KKyAqIENvbXB1dGUgdGhlIHJhbmdlIHRhYmxlIG9mZnNldCBmb3Ig ZWFjaCBwZ3BhX3BsYW5uZXJfc3RhdGUgZm9yIHdoaWNoIGl0CisgKiBpcyBwb3NzaWJsZSB0byBt ZWFuaW5nZnVsbHkgZG8gc28uCiAgKi8KIHN0YXRpYyB2b2lkCi1wZ3BhX3JpX2NoZWNrZXJfdmFs aWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3BncGFf Y29tcHV0ZV9ydF9vZmZzZXRzKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVkU3RtdCAq cHN0bXQpCiB7Ci0jaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORwotCXBncGFfaWRlbnRpZmllciAq cnRfaWRlbnRpZmllcnM7Ci0JSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aChwc3Rt dC0+cnRhYmxlKTsKLQotCS8qIENyZWF0ZSBpZGVudGlmaWVycyBmcm9tIHRoZSBwbGFubmVkIHN0 YXRlbWVudC4gKi8KLQlydF9pZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zv cl9wbGFubmVkX3N0bXQocHN0bXQpOwotCi0JLyogSXRlcmF0ZSBvdmVyIGlkZW50aWZpZXJzIGNy ZWF0ZWQgZHVyaW5nIHBsYW5uaW5nLCBzbyB3ZSBjYW4gY29tcGFyZS4gKi8KIAlmb3JlYWNoX3B0 cihwZ3BhX3BsYW5uZXJfaW5mbywgcHJvb3QsIHBwcy0+cHJvb3RzKQogCXsKLQkJaW50CQkJcnRv ZmZzZXQgPSAwOworCQkvKiBGb3IgdGhlIHRvcCBxdWVyeSBsZXZlbCwgd2UndmUgcHJldmlvdXNs eSBzZXQgcnRvZmZzZXQgMC4gKi8KKwkJaWYgKHByb290LT5wbGFuX25hbWUgPT0gTlVMTCkKKwkJ eworCQkJQXNzZXJ0KHByb290LT5oYXNfcnRvZmZzZXQpOworCQkJY29udGludWU7CisJCX0KIAog CQkvKgotCQkgKiBJZiB0aGVyZSdzIG5vIHBsYW4gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBl bnRyeSwgdGhlbiB0aGUKLQkJICogcnRvZmZzZXQgaXMgMC4gT3RoZXJ3aXNlLCB3ZSBjYW4gc2Vh cmNoIHRoZSBTdWJQbGFuUlRJbmZvIGxpc3QgdG8KLQkJICogZmluZCB0aGUgcnRvZmZzZXQuCisJ CSAqIEl0J3Mgbm90IGd1YXJhbnRlZWQgdGhhdCBldmVyeSBwbGFuIG5hbWUgd2Ugc2F3IGR1cmlu ZyBwbGFubmluZyBoYXMKKwkJICogYSBTdWJQbGFuSW5mbywgYnV0IGFueSB0aGF0IGRvIG5vdCBj ZXJ0YWlubHkgZG9uJ3QgYXBwZWFyIGluIHRoZQorCQkgKiBmaW5hbCByYW5nZSB0YWJsZS4KIAkJ ICovCi0JCWlmIChwcm9vdC0+cGxhbl9uYW1lICE9IE5VTEwpCisJCWZvcmVhY2hfbm9kZShTdWJQ bGFuUlRJbmZvLCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQogCQl7Ci0JCQlmb3JlYWNoX25v ZGUoU3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCWlmIChzdHJj bXAocHJvb3QtPnBsYW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDApCiAJCQl7CiAJCQkJ LyoKIAkJCQkgKiBJZiBydGluZm8tPmR1bW15IGlzIHNldCwgdGhlbiB0aGUgc3VicXVlcnkncyBy YW5nZSB0YWJsZQpAQCAtMjA4MSwzMCArMjA5OCw1MSBAQCBwZ3BhX3JpX2NoZWNrZXJfdmFsaWRh dGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsIFBsYW5uZWRTdG10ICpwc3RtdCkKIAkJCQkgKiBS VEVfU1VCUVVFUlkgZW50cmllcyB0aGF0IHdlcmUgb25jZSBSVEVfUkVMQVRJT04gZW50cmllcwog CQkJCSAqIHdpbGwgYmUgY29waWVkLCBhcyBwZXIgYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUuIFRo ZXJlZm9yZSwKIAkJCQkgKiB0aGVyZSdzIG5vIGZpeGVkIHJ0b2Zmc2V0IHRoYXQgd2UgY2FuIGFw cGx5IHRvIHRoZSBSVElzCi0JCQkJICogdXNlZCBkdXJpbmcgcGxhbm5pbmcgdG8gbG9jYXRlIHRo ZSBjb3JyZXNwb25kaW5nIHJlbGF0aW9ucworCQkJCSAqIHVzZWQgZHVyaW5nIHBsYW5uaW5nIHRv IGxvY2F0ZSB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbnMuCiAJCQkJICovCi0JCQkJaWYgKHN0 cmNtcChwcm9vdC0+cGxhbl9uYW1lLCBydGluZm8tPnBsYW5fbmFtZSkgPT0gMAotCQkJCQkmJiAh cnRpbmZvLT5kdW1teSkKKwkJCQlpZiAocnRpbmZvLT5kdW1teSkKIAkJCQl7Ci0JCQkJCXJ0b2Zm c2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKLQkJCQkJQXNzZXJ0KHJ0b2Zmc2V0ID4gMCk7CisJCQkJ CS8qCisJCQkJCSAqIEl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIG1ha2UgYW55IGVmZmVjdGl2 ZSB1c2Ugb2YgdGhlCisJCQkJCSAqIHNqX3VuaXF1ZV9yZWxzIGxpc3QgaW4gdGhpcyBjYXNlLCBh bmQgaXQgYWxzbyB3b24ndCBiZQorCQkJCQkgKiBpbXBvcnRhbnQgdG8gZG8gc28uIFNvIGp1c3Qg dGhyb3cgdGhlIGxpc3QgYXdheSB0byBhdm9pZAorCQkJCQkgKiBjb25mdXNpbmcgcGdwYV9wbGFu X3dhbGtlci4KKwkJCQkJICovCisJCQkJCXByb290LT5zal91bmlxdWVfcmVscyA9IE5JTDsKIAkJ CQkJYnJlYWs7CiAJCQkJfQorCQkJCUFzc2VydCghcHJvb3QtPmhhc19ydG9mZnNldCk7CisJCQkJ cHJvb3QtPmhhc19ydG9mZnNldCA9IHRydWU7CisJCQkJcHJvb3QtPnJ0b2Zmc2V0ID0gcnRpbmZv LT5ydG9mZnNldDsKKwkJCQlicmVhazsKIAkJCX0KLQotCQkJLyoKLQkJCSAqIEl0J3Mgbm90IGFu IGVycm9yIGlmIHdlIGRvbid0IGZpbmQgdGhlIHBsYW4gbmFtZTogdGhhdCBqdXN0Ci0JCQkgKiBt ZWFucyB0aGF0IHdlIHBsYW5uZWQgYSBzdWJwbGFuIGJ5IHRoaXMgbmFtZSBidXQgaXQgZW5kZWQg dXAKLQkJCSAqIGJlaW5nIGEgZHVtbXkgc3VicGxhbiBhbmQgc28gd2Fzbid0IGluY2x1ZGVkIGlu IHRoZSBmaW5hbCBwbGFuCi0JCQkgKiB0cmVlLgotCQkJICovCi0JCQlpZiAocnRvZmZzZXQgPT0g MCkKLQkJCQljb250aW51ZTsKIAkJfQorCX0KK30KKworLyoKKyAqIFZhbGlkYXRlIHRoYXQgdGhl IHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzIHdlIHdlcmUgYWJsZSB0byBnZW5lcmF0ZSBkdXJpbmcK KyAqIHBsYW5uaW5nIG1hdGNoIHRoZSBvbmVzIHdlIGdlbmVyYXRlZCBmcm9tIHRoZSBmaW5hbCBw bGFuLgorICovCitzdGF0aWMgdm9pZAorcGdwYV92YWxpZGF0ZV9ydF9pZGVudGlmaWVycyhwZ3Bh X3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lZFN0bXQgKnBzdG10KQoreworI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzOworCUluZGV4 CQlydGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSk7CisKKwkvKiBDcmVh dGUgaWRlbnRpZmllcnMgZnJvbSB0aGUgcGxhbm5lZCBzdGF0ZW1lbnQuICovCisJcnRfaWRlbnRp ZmllcnMgPSBwZ3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsK KworCS8qIEl0ZXJhdGUgb3ZlciBpZGVudGlmaWVycyBjcmVhdGVkIGR1cmluZyBwbGFubmluZywg c28gd2UgY2FuIGNvbXBhcmUuICovCisJZm9yZWFjaF9wdHIocGdwYV9wbGFubmVyX2luZm8sIHBy b290LCBwcHMtPnByb290cykKKwl7CisJCWlmICghcHJvb3QtPmhhc19ydG9mZnNldCkKKwkJCWNv bnRpbnVlOwogCiAJCWZvciAoaW50IHJ0aSA9IDE7IHJ0aSA8PSBwcm9vdC0+cmlkX2FycmF5X3Np emU7ICsrcnRpKQogCQl7Ci0JCQlJbmRleAkJZmxhdF9ydGkgPSBydG9mZnNldCArIHJ0aTsKKwkJ CUluZGV4CQlmbGF0X3J0aSA9IHByb290LT5ydG9mZnNldCArIHJ0aTsKIAkJCXBncGFfaWRlbnRp ZmllciAqcmlkMSA9ICZwcm9vdC0+cmlkX2FycmF5W3J0aSAtIDFdOwogCQkJcGdwYV9pZGVudGlm aWVyICpyaWQyOwogCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxh bm5lci5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAppbmRleCBlOTA0 NWY2OWJjYS4uOTNmZGEyMDU1YjIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9wbGFubmVyLmgKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIu aApAQCAtMjQsMTEgKzI0LDMzIEBAIHR5cGVkZWYgc3RydWN0IHBncGFfcGxhbm5lcl9pbmZvCiAJ LyogUGxhbiBuYW1lIHRha2VuIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgUGxhbm5lckluZm87IE5V TEwgYXQgdG9wIGxldmVsLiAqLwogCWNoYXIJICAgKnBsYW5fbmFtZTsKIAotI2lmZGVmIFVTRV9B U1NFUlRfQ0hFQ0tJTkcKKwkvKgorCSAqIElmIHRoZSBjb3JyZXNwb25kaW5nIFBsYW5uZXJJbmZv IGhhcyBhbiBhbHRlcm5hdGl2ZV9yb290LCB0aGVuIHRoaXMgaXMKKwkgKiB0aGUgcGxhbiBuYW1l IGZyb20gdGhhdCBQbGFubmVySW5mbzsgb3RoZXJ3aXNlLCBpdCBpcyB0aGUgc2FtZSBhcworCSAq IHBsYW5fbmFtZS4KKwkgKgorCSAqIGlzX2FsdGVybmF0aXZlX3BsYW4gaXMgc2V0IHRvIHRydWUg Zm9yIGV2ZXJ5IHBncGFfcGxhbm5lcl9pbmZvIHRoYXQKKwkgKiBzaGFyZXMgYW4gYWx0ZXJuYXRp dmVfcGxhbl9uYW1lIHdpdGggYXQgbGVhc3Qgb25lIG90aGVyLCBhbmQgdG8gZmFsc2UKKwkgKiBv dGhlcndpc2UuCisJICovCisJY2hhcgkgICAqYWx0ZXJuYXRpdmVfcGxhbl9uYW1lOworCWJvb2wJ CWlzX2FsdGVybmF0aXZlX3BsYW47CisKIAkvKiBSZWxhdGlvbiBpZGVudGlmaWVycyBjb21wdXRl ZCBmb3IgYmFzZXJlbHMgYXQgdGhpcyBxdWVyeSBsZXZlbC4gKi8KIAlwZ3BhX2lkZW50aWZpZXIg KnJpZF9hcnJheTsKIAlpbnQJCQlyaWRfYXJyYXlfc2l6ZTsKLSNlbmRpZgorCisJLyoKKwkgKiBJ ZiBoYXNfcnRvZmZzZXQgaXMgdHJ1ZSwgdGhlbiBydG9mZnNldCBpcyB0aGUgb2Zmc2V0IHJlcXVp cmVkIHRvIGFsaWduCisJICogUlRJcyBmb3IgdGhpcyBxdWVyeSBsZXZlbCB3aXRoIFJUSXMgZnJv bSB0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgorCSAqIElmIGhhc19ydG9mZnNldCBp cyBmYWxzZSwgdGhlbiB0aGlzIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgd2Fzbid0IGNvcGllZCwK KwkgKiBvciB3YXMgb25seSBwYXJ0aWFsbHkgY29waWVkLCBpbnRvIHRoZSBmaW5hbCByYW5nZSB0 YWJsZS4gKE5vdGUgdGhhdAorCSAqIHdlIGNhbid0IGRldGVybWluZSB0aGUgcnRvZmZzZXQgdmFs dWVzIHVudGlsIHRoZSBmaW5hbCByYW5nZSB0YWJsZQorCSAqIGFjdHVhbGx5IGV4aXN0czsgYmVm b3JlIHRoYXQgdGltZSwgaGFzX3J0b2Zmc2V0IHdpbGwgYmUgZmFsc2UgZXZlcnl3aGVyZQorCSAq IGV4Y2VwdCBhdCB0aGUgdG9wIGxldmVsLikKKwkgKi8KKwlib29sCQloYXNfcnRvZmZzZXQ7CisJ SW5kZXgJCXJ0b2Zmc2V0OwogCiAJLyoKIAkgKiBMaXN0IG9mIEJpdG1hcHNldCBvYmplY3RzLiBF YWNoIHJlcHJlc2VudHMgdGhlIHJlbGlkIHNldCBvZiBhIHJlbGF0aW9uCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5jCmluZGV4IDYzNGVjNWM0YzZlLi43YWRlMGI1Y2E5YyAxMDA2NDQKLS0t IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKQEAgLTE2Miw2ICsxNjIsNyBAQCBwZ3BhX2J1aWxkX3Ry b3ZlKExpc3QgKmFkdmljZV9pdGVtcykKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQR1BBX1RBR19C SVRNQVBfSEVBUF9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19ET19OT1RfU0NBTjoKIAkJCWNhc2Ug UEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOgogCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgog CQkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV93YWxrZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIu YwppbmRleCA2ZmJjNzg0YmY1NC4uMGE0NTEyZDQ5MjEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYworKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfd2Fsa2VyLmMKQEAgLTU5LDYgKzU5LDEwIEBAIHN0YXRpYyBib29sIHBncGFfd2Fsa2VyX2Nv bnRhaW5zX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCiAJCQkJCQkJCQkg IEJpdG1hcHNldCAqcmVsaWRzKTsKIHN0YXRpYyBib29sIHBncGFfd2Fsa2VyX2NvbnRhaW5zX25v X2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKIAkJCQkJCQkJCQkgICBC aXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9pZCBwZ3BhX2NsYXNzaWZ5X2FsdGVybmF0aXZl X3N1YnBsYW5zKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkg ICBMaXN0ICpwcm9vdHMsCisJCQkJCQkJCQkJCSAgIExpc3QgKipjaG9zZW5fcHJvb3RzLAorCQkJ CQkJCQkJCQkgICBMaXN0ICoqZGlzY2FyZGVkX3Byb290cyk7CiAKIC8qCiAgKiBUb3AtbGV2ZWwg ZW50cnlwb2ludCBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgpAQCAtNzUsNiArNzksOCBAQCBwZ3Bh X3BsYW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3Rt dCAqcHN0bXQsCiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdAkgICAqc2pfdW5pcXVlX3J0aXMgPSBO VUxMOwogCUxpc3QJICAgKnNqX25vbnVuaXF1ZV9xZnMgPSBOVUxMOworCUxpc3QJICAgKmNob3Nl bl9wcm9vdHM7CisJTGlzdAkgICAqZGlzY2FyZGVkX3Byb290czsKIAogCS8qIEluaXRpYWxpemF0 aW9uLiAqLwogCW1lbXNldCh3YWxrZXIsIDAsIHNpemVvZihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQpKTsKQEAgLTk1LDQyICsxMDEsMjMgQEAgcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwgUGxhbm5lZFN0bXQgKnBzdG10LAogCS8qIEFkanVzdCBSVElz IGZyb20gc2pfdW5pcXVlX3JlbHMgZm9yIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuICovCiAJ Zm9yZWFjaF9wdHIocGdwYV9wbGFubmVyX2luZm8sIHByb290LCBwcm9vdHMpCiAJewotCQlpbnQJ CQlydG9mZnNldCA9IDA7Ci0JCWJvb2wJCWR1bW15ID0gZmFsc2U7Ci0KIAkJLyogSWYgdGhlcmUg YXJlIG5vIHNqX3VuaXF1ZV9yZWxzIGZvciB0aGlzIHByb290LCB3ZSBjYW4gc2tpcCBpdC4gKi8K IAkJaWYgKHByb290LT5zal91bmlxdWVfcmVscyA9PSBOSUwpCiAJCQljb250aW51ZTsKIAogCQkv KiBJZiB0aGlzIGlzIGEgc3VicGxhbiwgZmluZCB0aGUgcmFuZ2UgdGFibGUgb2Zmc2V0LiAqLwot CQlpZiAocHJvb3QtPnBsYW5fbmFtZSAhPSBOVUxMKQotCQl7Ci0JCQlmb3JlYWNoX25vZGUoU3Vi UGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKLQkJCXsKLQkJCQlpZiAoc3Ry Y21wKHByb290LT5wbGFuX25hbWUsIHJ0aW5mby0+cGxhbl9uYW1lKSA9PSAwKQotCQkJCXsKLQkJ CQkJcnRvZmZzZXQgPSBydGluZm8tPnJ0b2Zmc2V0OwotCQkJCQlkdW1teSA9IHJ0aW5mby0+ZHVt bXk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKHJ0b2Zmc2V0ID09IDApCi0J CQkJZWxvZyhFUlJPUiwgIm5vIHJ0b2Zmc2V0IGZvciBwbGFuICVzIiwgcHJvb3QtPnBsYW5fbmFt ZSk7Ci0JCX0KKwkJaWYgKCFwcm9vdC0+aGFzX3J0b2Zmc2V0KQorCQkJZWxvZyhFUlJPUiwgIm5v IHJ0b2Zmc2V0IGZvciBwbGFuICVzIiwgcHJvb3QtPnBsYW5fbmFtZSk7CiAKLQkJLyogSWYgdGhp cyBlbnRyeSBwZXJ0YWlucyB0byBhIGR1bW15IHN1YnF1ZXJ5LCBpZ25vcmUgaXQuICovCi0JCWlm IChkdW1teSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIE9mZnNldCBlYWNoIHJlbGlkIHNldCBieSB0 aGUgcnRvZmZzZXQgd2UganVzdCBjb21wdXRlZC4gKi8KKwkJLyogT2Zmc2V0IGVhY2ggcmVsaWQg c2V0IGJ5IHRoZSBwcm9vdCdzIHJ0b2Zmc2V0LiAqLwogCQlmb3JlYWNoX25vZGUoQml0bWFwc2V0 LCByZWxpZHMsIHByb290LT5zal91bmlxdWVfcmVscykKIAkJewogCQkJaW50CQkJcnRpbmRleCA9 IC0xOwogCQkJQml0bWFwc2V0ICAqZmxhdF9yZWxpZHMgPSBOVUxMOwogCiAJCQl3aGlsZSAoKHJ0 aW5kZXggPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGluZGV4KSkgPj0gMCkKLQkJCQlmbGF0 X3JlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGZsYXRfcmVsaWRzLCBydGluZGV4ICsgcnRvZmZzZXQp OworCQkJCWZsYXRfcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIoZmxhdF9yZWxpZHMsCisJCQkJCQkJ CQkJCSBydGluZGV4ICsgcHJvb3QtPnJ0b2Zmc2V0KTsKIAogCQkJc2pfdW5pcXVlX3J0aXMgPSBs YXBwZW5kKHNqX3VuaXF1ZV9ydGlzLCBmbGF0X3JlbGlkcyk7CiAJCX0KQEAgLTE5Myw2ICsxODAs NDIgQEAgcGdwYV9wbGFuX3dhbGtlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwg UGxhbm5lZFN0bXQgKnBzdG10LAogCiAJCXdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdF0gPSBxdWVy eV9mZWF0dXJlczsKIAl9CisKKwkvKiBDbGFzc2lmeSBhbHRlcm5hdGl2ZSBzdWJwbGFucy4gKi8K KwlwZ3BhX2NsYXNzaWZ5X2FsdGVybmF0aXZlX3N1YnBsYW5zKHdhbGtlciwgcHJvb3RzLAorCQkJ CQkJCQkJICAgJmNob3Nlbl9wcm9vdHMsICZkaXNjYXJkZWRfcHJvb3RzKTsKKworCS8qCisJICog RmlndXJlIG91dCB3aGljaCBvZiB0aGUgZGlzY2FyZGVkIGFsdGVybmF0aXZlcyBoYXZlIGEgbm9u LWRpc2NhcmRlZAorCSAqIGFsdGVybmF0aXZlLiBUaG9zZSBhcmUgdGhlIG9uZXMgZm9yIHdoaWNo IHdlIHdhbnQgdG8gZW1pdCBET19OT1RfU0NBTgorCSAqIGFkdmljZS4gKElmIGV2ZXJ5IGFsdGVy bmF0aXZlIHdhcyBkaXNjYXJkZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludC4pCisJICovCisJZm9y ZWFjaF9wdHIocGdwYV9wbGFubmVyX2luZm8sIGRpc2NhcmRlZF9wcm9vdCwgZGlzY2FyZGVkX3By b290cykKKwl7CisJCWJvb2wJCXNvbWVfYWx0ZXJuYXRpdmVfY2hvc2VuID0gZmFsc2U7CisKKwkJ Zm9yZWFjaF9wdHIocGdwYV9wbGFubmVyX2luZm8sIGNob3Nlbl9wcm9vdCwgY2hvc2VuX3Byb290 cykKKwkJeworCQkJaWYgKHN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGRpc2NhcmRlZF9wcm9v dC0+YWx0ZXJuYXRpdmVfcGxhbl9uYW1lLAorCQkJCQkJCQkJCSAgIGNob3Nlbl9wcm9vdC0+YWx0 ZXJuYXRpdmVfcGxhbl9uYW1lKSkKKwkJCXsKKwkJCQlzb21lX2FsdGVybmF0aXZlX2Nob3NlbiA9 IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoc29tZV9hbHRlcm5hdGl2ZV9j aG9zZW4pCisJCXsKKwkJCWZvciAoaW50IHJ0aSA9IDE7IHJ0aSA8PSBkaXNjYXJkZWRfcHJvb3Qt PnJpZF9hcnJheV9zaXplOyBydGkrKykKKwkJCXsKKwkJCQlwZ3BhX2lkZW50aWZpZXIgKnJpZCA9 ICZkaXNjYXJkZWRfcHJvb3QtPnJpZF9hcnJheVtydGkgLSAxXTsKKworCQkJCWlmIChyaWQtPmFs aWFzX25hbWUgIT0gTlVMTCkKKwkJCQkJd2Fsa2VyLT5kb19ub3Rfc2Nhbl9pZGVudGlmaWVycyA9 CisJCQkJCQlsYXBwZW5kKHdhbGtlci0+ZG9fbm90X3NjYW5faWRlbnRpZmllcnMsIHJpZCk7CisJ CQl9CisJCX0KKwl9CiB9CiAKIC8qCkBAIC02OTcsNiArNzIwLDMwIEBAIHBncGFfd2Fsa2VyX3dv dWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKIAkJcmV0dXJuIGZh bHNlOwogCX0KIAorCS8qCisJICogRE9fTk9UX1NDQU4gYWR2aWNlIHRhcmdldHMgcmVscyB0aGF0 IG1heSBub3QgYmUgaW4gdGhlIGZsYXQgcmFuZ2UgdGFibGUKKwkgKiAoZS5nLiBNaW5NYXhBZ2cg bG9zZXJzKSwgc28gd2UgY2FuJ3QgdXNlIHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVy LgorCSAqIEluc3RlYWQsIGNoZWNrIGRpcmVjdGx5IGFnYWluc3QgdGhlIGRvX25vdF9zY2FuX2lk ZW50aWZpZXJzIGxpc3QuCisJICovCisJaWYgKHRhZyA9PSBQR1BBX1RBR19ET19OT1RfU0NBTikK Kwl7CisJCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJCQly ZXR1cm4gZmFsc2U7CisJCWZvcmVhY2hfcHRyKHBncGFfaWRlbnRpZmllciwgcmlkLCB3YWxrZXIt PmRvX25vdF9zY2FuX2lkZW50aWZpZXJzKQorCQl7CisJCQlpZiAoc3RyY21wKHJpZC0+YWxpYXNf bmFtZSwgdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZSkgPT0gMCAmJgorCQkJCXJpZC0+b2NjdXJyZW5j ZSA9PSB0YXJnZXQtPnJpZC5vY2N1cnJlbmNlICYmCisJCQkJc3RyaW5nc19lcXVhbF9vcl9ib3Ro X251bGwocmlkLT5wYXJ0bnNwLAorCQkJCQkJCQkJCSAgIHRhcmdldC0+cmlkLnBhcnRuc3ApICYm CisJCQkJc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkLT5wYXJ0cmVsLAorCQkJCQkJCQkJ CSAgIHRhcmdldC0+cmlkLnBhcnRyZWwpICYmCisJCQkJc3RyaW5nc19lcXVhbF9vcl9ib3RoX251 bGwocmlkLT5wbGFuX25hbWUsCisJCQkJCQkJCQkJICAgdGFyZ2V0LT5yaWQucGxhbl9uYW1lKSkK KwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCiAJaWYgKHRhcmdl dC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKIAl7CiAJCUluZGV4CQlydGk7CkBA IC03MzAsNiArNzc3LDEwIEBAIHBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZShwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKIAkJCS8qIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBhYm92 ZSAqLwogCQkJcGdfdW5yZWFjaGFibGUoKTsKIAkJCWJyZWFrOworCQljYXNlIFBHUEFfVEFHX0RP X05PVF9TQ0FOOgorCQkJLyogc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGFib3ZlICovCisJCQlw Z191bnJlYWNoYWJsZSgpOworCQkJYnJlYWs7CiAJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBf U0NBTjoKIAkJCXJldHVybiBwZ3BhX3dhbGtlcl9maW5kX3NjYW4od2Fsa2VyLAogCQkJCQkJCQkJ CSBQR1BBX1NDQU5fQklUTUFQX0hFQVAsCkBAIC0xMDM1LDMgKzEwODYsNjAgQEAgcGdwYV93YWxr ZXJfY29udGFpbnNfbm9fZ2F0aGVyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAog ewogCXJldHVybiBibXNfaXNfc3Vic2V0KHJlbGlkcywgd2Fsa2VyLT5ub19nYXRoZXJfc2NhbnMp OwogfQorCisvKgorICogQ2xhc3NpZnkgYWx0ZXJuYXRpdmUgc3VicGxhbnMgYXMgY2hvc2VuIG9y IGRpc2NhcmRlZC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfY2xhc3NpZnlfYWx0ZXJuYXRpdmVf c3VicGxhbnMocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCSAgIExp c3QgKnByb290cywKKwkJCQkJCQkJICAgTGlzdCAqKmNob3Nlbl9wcm9vdHMsCisJCQkJCQkJCSAg IExpc3QgKipkaXNjYXJkZWRfcHJvb3RzKQoreworCUJpdG1hcHNldCAgKmFsbF9zY2FuX3J0aXMg PSBOVUxMOworCisJLyogSW5pdGlhbGl6ZSBib3RoIG91dHB1dCBsaXN0cyB0byBlbXB0eS4gKi8K KwkqY2hvc2VuX3Byb290cyA9IE5JTDsKKwkqZGlzY2FyZGVkX3Byb290cyA9IE5JTDsKKworCS8q IENvbGxlY3QgYWxsIHNjYW4gUlRJcy4gKi8KKwlmb3IgKGludCBzID0gMDsgcyA8IE5VTV9QR1BB X1NDQU5fU1RSQVRFR1k7IHMrKykKKwkJZm9yZWFjaF9wdHIocGdwYV9zY2FuLCBzY2FuLCB3YWxr ZXItPnNjYW5zW3NdKQorCQkJYWxsX3NjYW5fcnRpcyA9IGJtc19hZGRfbWVtYmVycyhhbGxfc2Nh bl9ydGlzLCBzY2FuLT5yZWxpZHMpOworCisJLyogTm93IGNsYXNzaWZ5IGVhY2ggc3VicGxhbi4g Ki8KKwlmb3JlYWNoX3B0cihwZ3BhX3BsYW5uZXJfaW5mbywgcHJvb3QsIHByb290cykKKwl7CisJ CWJvb2wJCWNob3NlbiA9IGZhbHNlOworCisJCS8qCisJCSAqIFdlJ3JlIG9ubHkgaW50ZXJlc3Rl ZCBpbiBjbGFzc2lmeWluZyBzdWJwbGFucyBmb3Igd2hpY2ggdGhlcmUgYXJlCisJCSAqIGFsdGVy bmF0aXZlcy4KKwkJICovCisJCWlmICghcHJvb3QtPmlzX2FsdGVybmF0aXZlX3BsYW4pCisJCQlj b250aW51ZTsKKworCQkvKgorCQkgKiBBIHN1YnBsYW4gaGFzIGJlZW4gY2hvc2VuIGlmIGFueSBv ZiBpdHMgc2NhbiBSVElzIGFwcGVhciBpbiB0aGUKKwkJICogZmluYWwgcGxhbi4gVGhpcyBjYW5u b3QgYmUgdGhlIGNhc2UgaWYgaXQgaGFzIG5vIFJUIG9mZnNldC4KKwkJICovCisJCWlmIChwcm9v dC0+aGFzX3J0b2Zmc2V0KQorCQl7CisJCQlmb3IgKGludCBydGkgPSAxOyBydGkgPD0gcHJvb3Qt PnJpZF9hcnJheV9zaXplOyBydGkrKykKKwkJCXsKKwkJCQlpZiAocHJvb3QtPnJpZF9hcnJheVty dGkgLSAxXS5hbGlhc19uYW1lICE9IE5VTEwgJiYKKwkJCQkJYm1zX2lzX21lbWJlcihwcm9vdC0+ cnRvZmZzZXQgKyBydGksIGFsbF9zY2FuX3J0aXMpKQorCQkJCXsKKwkJCQkJY2hvc2VuID0gdHJ1 ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogQWRkIGl0IHRvIHRoZSBj b3JyZWN0IGxpc3QuICovCisJCWlmIChjaG9zZW4pCisJCQkqY2hvc2VuX3Byb290cyA9IGxhcHBl bmQoKmNob3Nlbl9wcm9vdHMsIHByb290KTsKKwkJZWxzZQorCQkJKmRpc2NhcmRlZF9wcm9vdHMg PSBsYXBwZW5kKCpkaXNjYXJkZWRfcHJvb3RzLCBwcm9vdCk7CisJfQorfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3dhbGtlci5oCmluZGV4IDliNzRjZDNiYTU1Li40NzY2N2MwMzM3NCAxMDA2NDQK LS0tIGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaApAQCAtMTAwLDYgKzEwMCw3IEBAIHR5cGVkZWYg c3RydWN0IHBncGFfcGxhbl93YWxrZXJfY29udGV4dAogCUxpc3QJICAgKmpvaW5fc3RyYXRlZ2ll c1tOVU1fUEdQQV9KT0lOX1NUUkFURUdZXTsKIAlMaXN0CSAgICpxdWVyeV9mZWF0dXJlc1tOVU1f UEdQQV9RRl9UWVBFU107CiAJTGlzdAkgICAqZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzOworCUxpc3QJ ICAgKmRvX25vdF9zY2FuX2lkZW50aWZpZXJzOwogfSBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7 CiAKIGV4dGVybiB2b2lkIHBncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0 ICp3YWxrZXIsCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9hbHRlcm5h dGl2ZXMuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvYWx0ZXJuYXRpdmVzLnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTYyOTllZGQxOTYKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9hbHRlcm5hdGl2ZXMuc3Fs CkBAIC0wLDAgKzEsNTggQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGFsdF90MSAoYSBpbnQp IFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBhbHRfdDIg KGEgaW50KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgSU5ERVgg T04gYWx0X3QyKGEpOworSU5TRVJUIElOVE8gYWx0X3QxIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMo MSwgMTAwMCk7CitJTlNFUlQgSU5UTyBhbHRfdDIgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAx MDAwMDApOworVkFDVVVNIEFOQUxZWkUgYWx0X3QxOworVkFDVVVNIEFOQUxZWkUgYWx0X3QyOwor CistLSBUaGlzIHF1ZXJ5IHVzZXMgYW4gT1IgdG8gcHJldmVudCB0aGUgRVhJU1RTIGZyb20gYmVp bmcgY29udmVydGVkIHRvIGEKKy0tIHNlbWktam9pbiwgZm9yY2luZyB0aGUgcGxhbm5lciB0aHJv dWdoIHRoZSBBbHRlcm5hdGl2ZVN1YlBsYW4gcGF0aC4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGFsdF90MQorV0hFUkUgRVhJU1RTIChTRUxFQ1QgMSBG Uk9NIGFsdF90MiBXSEVSRSBhbHRfdDIuYSA9IGFsdF90MS5hKSBPUiBhbHRfdDEuYSA8IDA7CisK Ky0tIFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIGVpdGhlciBBbHRlcm5hdGl2ZVN1YlBsYW4g YnkgYWR2aXNpbmcgYWdhaW5zdAorLS0gc2Nhbm5pbmcgdGhlIG90aGVyIHJlbGF0aW9uLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0RPX05PVF9TQ0FOKGFsdF90 MkBleGlzdHNfMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gYWx0X3QxCitXSEVSRSBFWElTVFMgKFNFTEVDVCAxIEZST00gYWx0X3QyIFdIRVJFIGFs dF90Mi5hID0gYWx0X3QxLmEpIE9SIGFsdF90MS5hIDwgMDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnRE9fTk9UX1NDQU4oYWx0X3QyQGV4aXN0c18yKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBhbHRfdDEKK1dIRVJFIEVYSVNU UyAoU0VMRUNUIDEgRlJPTSBhbHRfdDIgV0hFUkUgYWx0X3QyLmEgPSBhbHRfdDEuYSkgT1IgYWx0 X3QxLmEgPCAwOworQ09NTUlUOworCistLSBOb3cgbGV0J3MgdGVzdCBhIGNhc2UgaW52b2x2aW5n IE1pbk1heEFnZ1BhdGgsIHdoaWNoIHdlIHRyZWF0IHNpbWlsYXJseQorLS0gdG8gdGhlIEFsdGVy bmF0aXZlU3ViUGxhbiBjYXNlLgorQ1JFQVRFIFRBQkxFIGFsdF9taW5tYXggKGEgaW50KSBXSVRI IChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgSU5ERVggT04gYWx0X21pbm1h eChhKTsKK0lOU0VSVCBJTlRPIGFsdF9taW5tYXggU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAx MDAwMCk7CitWQUNVVU0gQU5BTFlaRSBhbHRfbWlubWF4OworCistLSBVc2luZyBhbiBJbmRleCBT Y2FuIGluc2lkZSBvZiBhbiBJbml0UGxhbiBzaG91bGQgd2luIG92ZXIgYSBmdWxsIHRhYmxlCist LSBzY2FuLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCBtaW4oYSks IG1heChhKSBGUk9NIGFsdF9taW5tYXg7CisKKy0tIEFkdmlzaW5nIGFnYWluc3QgdGhlIHNjYW4g b2YgYWx0X21pbm1heCBhdCB0aGUgcm9vdCBxdWVyeSBsZXZlbCBzaG91bGQKKy0tIGNoYW5nZSBu b3RoaW5nLCBidXQgaWYgd2Ugc2F5IHdlIGRvbid0IHdhbnQgZWl0aGVyIG9mIG9yIGJvdGggb2Yg dGhlCistLSBtaW5tYXgtdmFyaWFudCBzY2FucywgdGhlIHBsYW4gc2hvdWxkIHN3aXRjaCB0byBh IGZ1bGwgdGFibGUgc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdET19OT1RfU0NBTihhbHRfbWlubWF4KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUIG1pbihhKSwgbWF4KGEpIEZST00gYWx0X21pbm1heDsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnRE9fTk9UX1NDQU4oYWx0X21pbm1heEBtaW5tYXhf MSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCBtaW4oYSksIG1h eChhKSBGUk9NIGFsdF9taW5tYXg7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0RPX05PVF9TQ0FOKGFsdF9taW5tYXhAbWlubWF4XzEpIERPX05PVF9TQ0FOKGFsdF9taW5tYXhA bWlubWF4XzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgbWlu KGEpLCBtYXgoYSkgRlJPTSBhbHRfbWlubWF4OworQ09NTUlUOworCitEUk9QIFRBQkxFIGFsdF90 MSwgYWx0X3QyLCBhbHRfbWlubWF4OwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc2Nhbi5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbAppbmRl eCA0ZmM0OTRjN2Q4ZS4uODAwZmY3YTQ2MjIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3NjYW4uc3FsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4u c3FsCkBAIC03OSw3ICs3OSw4IEBAIENPTU1JVDsKIAogLS0gV2UgY2FuIGZvcmNlIGEgcHJpbWFy eSBrZXkgbG9va3VwIHRvIHVzZSBhIHNlcXVlbnRpYWwgc2NhbiwgYnV0IHdlCiAtLSBjYW4ndCBm b3JjZSBpdCB0byB1c2UgYW4gaW5kZXgtb25seSBzY2FuIChkdWUgdG8gdGhlIGNvbHVtbiBsaXN0 KQotLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9mIGEgVElEIHF1YWwpLgor LS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNlIG9mIGEgVElEIHF1YWwpLiBJZiB3 ZSBhcHBseSBET19OT1RfU0NBTgorLS0gaGVyZSwgd2Ugc2hvdWxkIGdldCBhIHZhbGlkIHBsYW4g YW55d2F5LCBidXQgd2l0aCB0aGUgc2NhbiBkaXNhYmxlZC4KIEJFR0lOOwogU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CiBFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CkBAIC04Nyw2ICs4OCw4IEBAIFNFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CiBFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CiBTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFi bGUpJzsKIEVYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn RE9fTk9UX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwogQ09NTUlUOwogCiAtLSBX ZSBjYW4gZm9yY2libHkgZG93bmdyYWRlIGFuIGluZGV4LW9ubHkgc2NhbiB0byBhbiBpbmRleCBz Y2FuLCBidXQgd2UgY2FuJ3QKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uu c2dtbCBiL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbAppbmRleCA4ZGY4YTk3OGVjZi4u YzNlMWNjYjYwYTIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwKQEAgLTI2Nyw3ICsyNjcsOCBAQCBU SURfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKIElOREVY X1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5pbmRl eF9uYW1lPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKIElOREVYX09OTFlfU0NBTig8cmVwbGFjZWFi bGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmluZGV4X25hbWU8L3JlcGxhY2Vh YmxlPiBbIC4uLiBdKQogRk9SRUlHTl9TQ0FOKCg8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNl YWJsZT4gWyAuLi4gXSkgWyAuLi4gXSkKLUJJVE1BUF9IRUFQX1NDQU4oPHJlcGxhY2VhYmxlPnRh cmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pPC9zeW5vcHNpcz4KK0JJVE1BUF9IRUFQX1NDQU4o PHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCitET19OT1RfU0NBTig8 cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSk8L3N5bm9wc2lzPgogCiAg ICA8cGFyYT4KICAgICA8bGl0ZXJhbD5TRVFfU0NBTjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQg ZWFjaCB0YXJnZXQgc2hvdWxkIGJlCkBAIC0yOTcsNiArMjk4LDE3IEBAIEJJVE1BUF9IRUFQX1ND QU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0pPC9zeW5vcHNpcz4K ICAgICB0aGF0IHB1cnBvc2UuCiAgICA8L3BhcmE+CiAKKyAgIDxwYXJhPgorICAgIDxsaXRlcmFs PkRPX05PVF9TQ0FOPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgdGFyZ2V0 CisgICAgc2hvdWxkIG5vdCBhcHBlYXIgaW4gdGhlIGZpbmFsIHBsYW4gYXQgYWxsLiBJbiBtb3N0 IGNhc2VzLCB0aGlzIGlzCisgICAgaW1wb3NzaWJsZSwgYW5kIHdpbGwgc2ltcGx5IGNhdXNlIHRo ZSBzY2FuIG9mIHRoZSB0YXJnZXQgcmVsYXRpb24gdG8KKyAgICBiZSBtYXJrZWQgZGlzYWJsZWQu IEhvd2V2ZXIsIGluIGNlcnRhaW4gY2FzZXMsIHRoZSBwbGFubmVyIGNvbnNpZGVycworICAgIG9w dGltaXphdGlvbnMgd2hlcmUgYSBwb3J0aW9uIG9mIHRoZSBwbGFuIHRyZWUgaXMgY29waWVkIGFu ZCBtdXRhdGVkLAorICAgIGFuZCB0aGVuIGNvbnNpZGVyZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8g dGhlIG9yaWdpbmFsLiBJbiB0aG9zZSBjYXNlcywKKyAgICA8bGl0ZXJhbD5ET19OT1RfU0NBTjwv bGl0ZXJhbD4gY2FuIGJlIHVzZWQgdG8gZXhjbHVkZSB0aGUgbm9uLXByZWZlcnJlZAorICAgIGFs dGVybmF0aXZlLgorICAgPC9wYXJhPgorCiAgICA8cGFyYT4KICAgICBUaGUgcGxhbm5lciBzdXBw b3J0cyBtYW55IHR5cGVzIG9mIHNjYW5zIG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGhlcmU7CiAg ICAgaG93ZXZlciwgaW4gbW9zdCBvZiB0aG9zZSBjYXNlcywgdGhlcmUgaXMgbm8gbWVhbmluZ2Z1 bCBkZWNpc2lvbiB0byBiZQotLSAKMi41MS4wCgo= --0000000000003fa51c064dcb9379 Content-Type: application/octet-stream; name="v22-0001-Respect-disabled_nodes-in-fix_alternative_subpla.patch" Content-Disposition: attachment; filename="v22-0001-Respect-disabled_nodes-in-fix_alternative_subpla.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn52y4y60 RnJvbSBlODkyNDg0ODI4YTA5Y2U2Y2E2Zjg5NDNjN2IzZTY1MGE1MzA1MGNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjAgTWFyIDIwMjYgMTQ6MDQ6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyMiAx LzZdIFJlc3BlY3QgZGlzYWJsZWRfbm9kZXMgaW4gZml4X2FsdGVybmF0aXZlX3N1YnBsYW4uCgpX aGVuIG15IGNvbW1pdCAxMjQ0NDE4M2U0MDE4N2E5ZmI2MDAyYTM5MTIwNTNmMzAyNzI1ZjBhIGFk ZGVkIHRoZQpjb25jZXB0IG9mIGRpc2FibGVkX25vZGVzLCBpdCBmYWlsZWQgdG8gYWRkIGEgZGlz YWJsZWRfbm9kZXMgZmllbGQKdG8gU3ViUGxhbi4gVGhpcyBpcyBhIHJlZ3Jlc3Npb246IGJlZm9y ZSB0aGF0IGNvbW1pdCwgd2hlbgpmaXhfYWx0ZXJuYXRpdmVfc3VicGxhbiBjb21wYXJlZCB0aGUg Y29zdHMgb2YgdHdvIHBsYW5zLCB0aGUgbnVtYmVyCm9mIGRpc2FibGVkIG5vZGVzIGFmZmVjdGVk IHRoZSByZXN1bHQsIGJlY2F1c2UgaXQgd2FzIGp1c3QgYQpjb21wb25lbnQgb2YgdGhlIHRvdGFs IGNvc3QuIEFmdGVyIHRoYXQgY29tbWl0LCBpdCBubyBsb25nZXIgZGlkLAptYWtpbmcgaXQgcG9z c2libGUgZm9yIGEgZGlzYWJsZWQgcGF0aCB0byB3aW4gb24gY29zdCBvdmVyIG9uZSB0aGF0Cmlz IG5vdCBkaXNhYmxlZC4gRml4IHRoYXQuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYyB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyAg fCAxNCArKysrKysrKysrLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmggICAgICAg ICB8ICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCA1NmQ0NTI4N2M4OS4u MWM1NzVlNTZmZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtNDc2 MSw2ICs0NzYxLDcgQEAgY29zdF9zdWJwbGFuKFBsYW5uZXJJbmZvICpyb290LCBTdWJQbGFuICpz dWJwbGFuLCBQbGFuICpwbGFuKQogCQkJc3BfY29zdC5wZXJfdHVwbGUgKz0gcGxhbi0+c3RhcnR1 cF9jb3N0OwogCX0KIAorCXN1YnBsYW4tPmRpc2FibGVkX25vZGVzID0gcGxhbi0+ZGlzYWJsZWRf bm9kZXM7CiAJc3VicGxhbi0+c3RhcnR1cF9jb3N0ID0gc3BfY29zdC5zdGFydHVwOwogCXN1YnBs YW4tPnBlcl9jYWxsX2Nvc3QgPSBzcF9jb3N0LnBlcl90dXBsZTsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3NldHJlZnMuYwppbmRleCAxYjViOWI1ZWQ5Yy4uZmYwZTg3NWYyYTIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIyMzQsOSArMjIzNCwxMiBAQCBmaXhfYWx0 ZXJuYXRpdmVfc3VicGxhbihQbGFubmVySW5mbyAqcm9vdCwgQWx0ZXJuYXRpdmVTdWJQbGFuICph c3BsYW4sCiAKIAkvKgogCSAqIENvbXB1dGUgdGhlIGVzdGltYXRlZCBjb3N0IG9mIGVhY2ggc3Vi cGxhbiBhc3N1bWluZyBudW1fZXhlYwotCSAqIGV4ZWN1dGlvbnMsIGFuZCBrZWVwIHRoZSBjaGVh cGVzdCBvbmUuICBJbiBldmVudCBvZiBleGFjdCBlcXVhbGl0eSBvZgotCSAqIGVzdGltYXRlcywg d2UgcHJlZmVyIHRoZSBsYXRlciBwbGFuOyB0aGlzIGlzIGEgYml0IGFyYml0cmFyeSwgYnV0IGlu Ci0JICogY3VycmVudCB1c2FnZSBpdCBiaWFzZXMgdXMgdG8gYnJlYWsgdGllcyBhZ2FpbnN0IGZh c3Qtc3RhcnQgc3VicGxhbnMuCisJICogZXhlY3V0aW9ucywgYW5kIGtlZXAgdGhlIGNoZWFwZXN0 IG9uZS4gIElmIG9uZSBzdWJwbGFuIGhhcyBtb3JlCisJICogZGlzYWJsZWQgbm9kZXMgdGhhbiBh bm90aGVyLCBjaG9vc2UgdGhlIG9uZSB3aXRoIGZld2VyIGRpc2FibGVkIG5vZGVzCisJICogcmVn YXJkbGVzcyBvZiBjb3N0OyB0aGlzIHBhcmFsbGVscyBjb21wYXJlX3BhdGhfY29zdHMuICBJbiBl dmVudCBvZgorCSAqIGV4YWN0IGVxdWFsaXR5IG9mIGVzdGltYXRlcywgd2UgcHJlZmVyIHRoZSBs YXRlciBwbGFuOyB0aGlzIGlzIGEgYml0CisJICogYXJiaXRyYXJ5LCBidXQgaW4gY3VycmVudCB1 c2FnZSBpdCBiaWFzZXMgdXMgdG8gYnJlYWsgdGllcyBhZ2FpbnN0CisJICogZmFzdC1zdGFydCBz dWJwbGFucy4KIAkgKi8KIAlBc3NlcnQoYXNwbGFuLT5zdWJwbGFucyAhPSBOSUwpOwogCkBAIC0y MjQ2LDcgKzIyNDksMTAgQEAgZml4X2FsdGVybmF0aXZlX3N1YnBsYW4oUGxhbm5lckluZm8gKnJv b3QsIEFsdGVybmF0aXZlU3ViUGxhbiAqYXNwbGFuLAogCQlDb3N0CQljdXJjb3N0OwogCiAJCWN1 cmNvc3QgPSBjdXJwbGFuLT5zdGFydHVwX2Nvc3QgKyBudW1fZXhlYyAqIGN1cnBsYW4tPnBlcl9j YWxsX2Nvc3Q7Ci0JCWlmIChiZXN0cGxhbiA9PSBOVUxMIHx8IGN1cmNvc3QgPD0gYmVzdGNvc3Qp CisJCWlmIChiZXN0cGxhbiA9PSBOVUxMIHx8CisJCQljdXJwbGFuLT5kaXNhYmxlZF9ub2RlcyA8 IGJlc3RwbGFuLT5kaXNhYmxlZF9ub2RlcyB8fAorCQkJKGN1cnBsYW4tPmRpc2FibGVkX25vZGVz ID09IGJlc3RwbGFuLT5kaXNhYmxlZF9ub2RlcyAmJgorCQkJIGN1cmNvc3QgPD0gYmVzdGNvc3Qp KQogCQl7CiAJCQliZXN0cGxhbiA9IGN1cnBsYW47CiAJCQliZXN0Y29zdCA9IGN1cmNvc3Q7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3ByaW1ub2Rlcy5oCmluZGV4IGI2N2U1NmU2YzVhLi5mNWI2YjQ1NjY0YSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv cHJpbW5vZGVzLmgKQEAgLTExMjQsNiArMTEyNCw3IEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW4K IAlMaXN0CSAgICpwYXJQYXJhbTsJCS8qIGluZGljZXMgb2YgaW5wdXQgUGFyYW1zIGZyb20gcGFy ZW50IHBsYW4gKi8KIAlMaXN0CSAgICphcmdzOwkJCS8qIGV4cHJzIHRvIHBhc3MgYXMgcGFyUGFy YW0gdmFsdWVzICovCiAJLyogRXN0aW1hdGVkIGV4ZWN1dGlvbiBjb3N0czogKi8KKwlpbnQJCQlk aXNhYmxlZF9ub2RlczsgLyogY291bnQgb2YgZGlzYWJsZWQgbm9kZXMgaW4gdGhlIHBsYW4gKi8K IAlDb3N0CQlzdGFydHVwX2Nvc3Q7CS8qIG9uZS10aW1lIHNldHVwIGNvc3QgKi8KIAlDb3N0CQlw ZXJfY2FsbF9jb3N0OwkvKiBjb3N0IGZvciBlYWNoIHN1YnBsYW4gZXZhbHVhdGlvbiAqLwogfSBT dWJQbGFuOwotLSAKMi41MS4wCgo= --0000000000003fa51c064dcb9379 Content-Type: application/octet-stream; name="v22-0005-Add-pg_collect_advice-contrib-module.patch" Content-Disposition: attachment; filename="v22-0005-Add-pg_collect_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn52y4yr4 RnJvbSBiZGVlMjI3MTNjNzk1NmZjMDlhZjMwODNiMDVjMjY5NTRhZTZhOTdmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMjYgRmViIDIwMjYgMTY6NTE6MTYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMiA1 LzZdIEFkZCBwZ19jb2xsZWN0X2FkdmljZSBjb250cmliIG1vZHVsZS4KClRoaXMgbW9kdWxlIGFs bG93cyBmb3IgYnVsayBjb2xsZWN0aW9uIG9mIHF1ZXJpZXMgYW5kIHRoZSBhc3NvY2lhdGVkCnBs YW4gYWR2aWNlIHN0cmluZ3MgdXNpbmcgZWl0aGVyIGJhY2tlbmQtbG9jYWwgbWVtb3J5IG9yIGR5 bmFtaWMKc2hhcmVkIG1lbW9yeS4gSW4gZWl0aGVyIGNhc2UsIG1lbW9yeSB1c2FnZSBjYW4gYmUg bGltaXRlZCBieQpyZXN0cmljdGlvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVlcmllcyBhbmQg YWR2aWNlIHN0cmluZ3Mgc3RvcmVkLgpDYXJlIHNob3VsZCBiZSB0YWtlbiB3aXRoIHRoZXNlIHZh bHVlcywgYW5kIHdpdGggdGhlIHVzZSBvZiB0aGlzCm1vZHVsZSBpbiBnZW5lcmFsLCBiZWNhdXNl IGl0J3MgZWFzeSB0byBjaGV3IHVwIGFuIHVucmVhc29uYWJseSBsYXJnZQphbW91bnQgb2YgbWVt b3J5LiBVbmxpa2UgcGdfc3RhdF9zdGF0ZW1lbnRzLCB0aGlzIG1vZHVsZSBkb2VzIG5vdApwcm92 aWRlIGZvciBxdWVyeSBub3JtYWxpemF0aW9uIG9yIGV2ZW4gZGVkdXBsaWNhdGlvbjsgaXQgc2lt cGx5IG1ha2VzCmEgcmVjb3JkIGZvciBldmVyeSBxdWVyeSBwbGFubmVkLgoKSXQgY2FuIGJlIHVz ZWZ1bCB0byBlbmFibGUgcXVlcnkgSUQgY29tcHV0YXRvbiBiZWZvcmUgdXNpbmcgdGhlCm1vZHVs ZSwgYnV0IGl0J3Mgbm90IHJlcXVpcmVkLiBJZiBub3QgZG9uZSwgYWxsIHF1ZXJpZXMgd2lsbCBz aW1wbHkKc2hvdyBhIHF1ZXJ5IElEIG9mIHplcm8uCgpSZXZpZXdlZC1ieTogQWxleGFuZHJhIFdh bmcgPGFsZXhhbmRyYS53YW5nLm9zc0BnbWFpbC5jb20+Ci0tLQogY29udHJpYi9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvbWVzb24uYnVpbGQg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBjb250cmliL3BnX2NvbGxlY3RfYWR2 aWNlL01ha2VmaWxlICAgICAgICAgICAgfCAgMjYgKwogY29udHJpYi9wZ19jb2xsZWN0X2Fkdmlj ZS9jb2xsZWN0b3IuYyAgICAgICAgIHwgNjQ5ICsrKysrKysrKysrKysrKysrKwogLi4uL2V4cGVj dGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgICAgICAgICAgICAgIHwgIDY5ICsrCiBjb250cmliL3Bn X2NvbGxlY3RfYWR2aWNlL2ludGVyZmFjZS5jICAgICAgICAgfCAzMDMgKysrKysrKysKIGNvbnRy aWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQgICAgICAgICB8ICA0MSArKwogLi4uL3Bn X2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsICAgICAgICAgICAgICAgIHwgIDQzICsrCiAuLi4vcGdf Y29sbGVjdF9hZHZpY2UuY29udHJvbCAgICAgICAgICAgICAgICAgfCAgIDUgKwogY29udHJpYi9w Z19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oIHwgIDM5ICsrCiAuLi4vcGdfY29s bGVjdF9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwgfCAgNDYgKysKIC4uLi90LzAwMV9z aGFyZWRfY29sbGVjdG9yLnBsICAgICAgICAgICAgICAgICB8IDE1NCArKysrKwogZG9jL3NyYy9z Z21sL2NvbnRyaWIuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRvYy9zcmMvc2dt bC9maWxlbGlzdC5zZ21sICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwv cGdjb2xsZWN0YWR2aWNlLnNnbWwgICAgICAgICAgICAgfCAyNDQgKysrKysrKwogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICA2ICsKIDE2IGZpbGVzIGNo YW5nZWQsIDE2MjkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf Y29sbGVjdF9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX2Nv bGxlY3RfYWR2aWNlL2NvbGxlY3Rvci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19j b2xsZWN0X2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0CiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9pbnRlcmZhY2UuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAu c3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xs ZWN0X2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9w Z19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvdC8wMDFfc2hhcmVkX2NvbGxlY3Rvci5wbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9wZ2NvbGxlY3RhZHZpY2Uuc2dtbAoKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IGRkMDRj MjBhY2QyLi4yMjA3MTAzNGU1MSAxMDA2NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9j b250cmliL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBAIFNVQkRJUlMgPSBcCiAJCXBhZ2VpbnNw ZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCiAJCXBnX2J1ZmZlcmNhY2hlCVwKKwkJcGdfY29sbGVj dF9hZHZpY2UgXAogCQlwZ19mcmVlc3BhY2VtYXAgXAogCQlwZ19sb2dpY2FsaW5zcGVjdCBcCiAJ CXBnX292ZXJleHBsYWluIFwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250 cmliL21lc29uLmJ1aWxkCmluZGV4IDVhNzUyZWFjMzQ3Li5mZjQyMmQ5YjdmYyAxMDA2NDQKLS0t IGEvY29udHJpYi9tZXNvbi5idWlsZAorKysgYi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00NSw2 ICs0NSw3IEBAIHN1YmRpcigncGFnZWluc3BlY3QnKQogc3ViZGlyKCdwYXNzd29yZGNoZWNrJykK IHN1YmRpcigncGdfYnVmZmVyY2FjaGUnKQogc3ViZGlyKCdwZ2NyeXB0bycpCitzdWJkaXIoJ3Bn X2NvbGxlY3RfYWR2aWNlJykKIHN1YmRpcigncGdfZnJlZXNwYWNlbWFwJykKIHN1YmRpcigncGdf bG9naWNhbGluc3BlY3QnKQogc3ViZGlyKCdwZ19vdmVyZXhwbGFpbicpCmRpZmYgLS1naXQgYS9j b250cmliL3BnX2NvbGxlY3RfYWR2aWNlL01ha2VmaWxlIGIvY29udHJpYi9wZ19jb2xsZWN0X2Fk dmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTk0 YzFiZjgyYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL01h a2VmaWxlCkBAIC0wLDAgKzEsMjYgQEAKKyMgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9NYWtl ZmlsZQorCitNT0RVTEVfYmlnID0gcGdfY29sbGVjdF9hZHZpY2UKK09CSlMgPSBcCisJJChXSU4z MlJFUykgXAorCWNvbGxlY3Rvci5vIFwKKwlpbnRlcmZhY2UubworCitFWFRFTlNJT04gPSBwZ19j b2xsZWN0X2FkdmljZQorREFUQSA9IHBnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsCitQR0ZJTEVE RVNDID0gInBnX2NvbGxlY3RfYWR2aWNlIC0gY29sbGVjdCBxdWVyaWVzIGFuZCB0aGVpciBwbGFu IGFkdmljZSBzdHJpbmdzIgorCitSRUdSRVNTID0gbG9jYWxfY29sbGVjdG9yCitFWFRSQV9JTlNU QUxMID0gY29udHJpYi9wZ19wbGFuX2FkdmljZQorVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0Vf UEdYUworUEdfQ09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcp IC0tcGd4cykKK2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gY29udHJpYi9wZ19jb2xs ZWN0X2FkdmljZQordG9wX2J1aWxkZGlyID0gLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIp L3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRy aWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2Fkdmlj ZS9jb2xsZWN0b3IuYyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvY29sbGVjdG9yLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ5ZmMzMjM4ZmJkCi0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9jb2xsZWN0b3IuYwpAQCAtMCww ICsxLDY0OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29sbGVjdG9yLmMKKyAqCSAg d29ya2hvcnNlIGZvciBzYXZpbmcgcGxhbiBhZHZpY2UgaW4gYmFja2VuZC1sb2NhbCBvciBzaGFy ZWQgbWVtb3J5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX2NvbGxlY3RfYWR2aWNl L2NvbGxlY3Rvci5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19jb2xsZWN0X2FkdmljZS5oIgorCisjaW5jbHVkZSAi ZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1p c2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJ1dGlscy9h Y2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVz dGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKworUEdfRlVOQ1RJT05fSU5G T19WMShwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9f VjEocGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19W MShwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBn X2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSk7CisKKyNkZWZpbmUgQURWSUNFX0NIVU5LX1NJ WkUJCTEwMjQKKyNkZWZpbmUgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkUJNjQKKworI2RlZmluZQlQ R19HRVRfQURWSUNFX0NPTFVNTlMJNworCisvKgorICogQWR2aWNlIGV4dHJhY3RlZCBmcm9tIG9u ZSBxdWVyeSBwbGFuLCB0b2dldGhlciB3aXRoIHRoZSBxdWVyeSBzdHJpbmcKKyAqIGFuZCB2YXJp b3VzIG90aGVyIGlkZW50aWZ5aW5nIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBnY2Ff Y29sbGVjdGVkX2FkdmljZQoreworCU9pZAkJCXVzZXJpZDsJCQkvKiB1c2VyIE9JRCAqLworCU9p ZAkJCWRiaWQ7CQkJLyogZGF0YWJhc2UgT0lEICovCisJdWludDY0CQlxdWVyeWlkOwkJLyogcXVl cnkgaWRlbnRpZmllciAqLworCVRpbWVzdGFtcFR6IHRpbWVzdGFtcDsJCS8qIHF1ZXJ5IHRpbWVz dGFtcCAqLworCWludAkJCWFkdmljZV9vZmZzZXQ7CS8qIHN0YXJ0IG9mIGFkdmljZSBpbiB0ZXh0 dWFsIGRhdGEgKi8KKwljaGFyCQl0ZXh0dWFsX2RhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsK K30gcGdjYV9jb2xsZWN0ZWRfYWR2aWNlOworCisvKgorICogQSBidW5jaCBvZiBwb2ludGVycyB0 byBwZ2NhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0cywgc3RvcmVkIGluCisgKiBiYWNrZW5kLWxv Y2FsIG1lbW9yeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsK K3sKKwlwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmVudHJpZXNbQURWSUNFX0NIVU5LX1NJWkVdOwor fSBwZ2NhX2xvY2FsX2FkdmljZV9jaHVuazsKKworLyoKKyAqIEluZm9ybWF0aW9uIGFib3V0IGFs bCBvZiB0aGUgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdHMgdGhhdCB3ZSdyZQorICogc3Rv cmluZyBpbiBsb2NhbCBtZW1vcnkuCisgKgorICogV2UgYXNzaWduIGNvbnNlY3V0aXZlIElEcywg c3RhcnRpbmcgZnJvbSAwLCB0byBlYWNoIHBnY2FfY29sbGVjdGVkX2FkdmljZQorICogb2JqZWN0 IHRoYXQgd2Ugc3RvcmUuIFRoZSBhY3R1YWwgc3RvcmFnZSBpcyBhbiBhcnJheSBvZiBjaHVua3Ms IHdoaWNoCisgKiBoZWxwcyBrZWVwIG1lbWNweSgpIG92ZXJoZWFkIGxvdyB3aGVuIHdlIHN0YXJ0 IGRpc2NhcmRpbmcgb2xkZXIgZGF0YS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdjYV9sb2NhbF9h ZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0 CQliYXNlX2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOworCXBnY2FfbG9j YWxfYWR2aWNlX2NodW5rICoqY2h1bmtzOworfSBwZ2NhX2xvY2FsX2FkdmljZTsKKworLyoKKyAq IEp1c3QgbGlrZSBwZ2NhX2xvY2FsX2FkdmljZV9jaHVuaywgYnV0IHN0b3JlZCBpbiBhIGR5bmFt aWMgc2hhcmVkIGFyZWEsCisgKiBzbyB3ZSBtdXN0IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9m IG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdjYV9zaGFyZWRfYWR2aWNl X2NodW5rCit7CisJZHNhX3BvaW50ZXIgZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBn Y2Ffc2hhcmVkX2FkdmljZV9jaHVuazsKKworLyoKKyAqIEp1c3QgbGlrZSBwZ2NhX2xvY2FsX2Fk dmljZSwgYnV0IHN0b3JlZCBpbiBhIGR5bmFtaWMgc2hhcmVkIGFyZWEsIHNvCisgKiB3ZSBtdXN0 IHVzZSBkc2FfcG9pbnRlciBpbnN0ZWFkIG9mIG5hdGl2ZSBwb2ludGVycy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgcGdjYV9zaGFyZWRfYWR2aWNlCit7CisJdWludDY0CQluZXh0X2lkOworCXVpbnQ2 NAkJb2xkZXN0X2lkOworCXVpbnQ2NAkJYmFzZV9pZDsKKwlpbnQJCQljaHVua19hcnJheV9hbGxv Y2F0ZWRfc2l6ZTsKKwlkc2FfcG9pbnRlciBjaHVua3M7Cit9IHBnY2Ffc2hhcmVkX2FkdmljZTsK KworLyogUG9pbnRlcnMgdG8gbG9jYWwgYW5kIHNoYXJlZCBjb2xsZWN0b3JzICovCitzdGF0aWMg cGdjYV9sb2NhbF9hZHZpY2UgKmxvY2FsX2NvbGxlY3RvciA9IE5VTEw7CitzdGF0aWMgcGdjYV9z aGFyZWRfYWR2aWNlICpzaGFyZWRfY29sbGVjdG9yID0gTlVMTDsKKworLyogU3RhdGljIGZ1bmN0 aW9ucyAqLworc3RhdGljIHBnY2FfY29sbGVjdGVkX2FkdmljZSAqbWFrZV9jb2xsZWN0ZWRfYWR2 aWNlKE9pZCB1c2VyaWQsCisJCQkJCQkJCQkJCQkJT2lkIGRiaWQsCisJCQkJCQkJCQkJCQkJdWlu dDY0IHF1ZXJ5SWQsCisJCQkJCQkJCQkJCQkJVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJ CQkJCQkJCWNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQljb25zdCBjaGFy ICphZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJCQkJCWRzYV9hcmVhICphcmVhLAorCQkJCQkJCQkJ CQkJCWRzYV9wb2ludGVyICpyZXN1bHQpOworc3RhdGljIHZvaWQgc3RvcmVfbG9jYWxfYWR2aWNl KHBnY2FfY29sbGVjdGVkX2FkdmljZSAqY2EpOworc3RhdGljIHZvaWQgdHJpbV9sb2NhbF9hZHZp Y2UoaW50IGxpbWl0KTsKK3N0YXRpYyB2b2lkIHN0b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50 ZXIgY2FfcG9pbnRlcik7CitzdGF0aWMgdm9pZCB0cmltX3NoYXJlZF9hZHZpY2UoZHNhX2FyZWEg KmFyZWEsIGludCBsaW1pdCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBx dWVyeSBzdHJpbmcgZnJvbSBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0YXRpYyBpbmxpbmUg Y29uc3QgY2hhciAqCitxdWVyeV9zdHJpbmcocGdjYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sK KwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4 dHJhY3QgdGhlIGFkdmljZSBzdHJpbmcgZnJvbSBwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKi8KK3N0 YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCithZHZpY2Vfc3RyaW5nKHBnY2FfY29sbGVjdGVkX2Fk dmljZSAqY2EpCit7CisJcmV0dXJuIGNhLT50ZXh0dWFsX2RhdGEgKyBjYS0+YWR2aWNlX29mZnNl dDsKK30KKworLyoKKyAqIFN0b3JlIGNvbGxlY3RlZCBxdWVyeSBhZHZpY2UgaW50byB0aGUgbG9j YWwgb3Igc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IsCisgKiBhcyBhcHByb3ByaWF0ZS4KKyAqLwor dm9pZAorcGdfY29sbGVjdF9hZHZpY2Vfc2F2ZSh1aW50NjQgcXVlcnlJZCwgY29uc3QgY2hhciAq cXVlcnlfc3RyaW5nLAorCQkJCQkgICBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nKQoreworCU9p ZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCU9pZAkJCWRiaWQgPSBNeURhdGFiYXNlSWQ7CisJ VGltZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJaWYgKHBnX2NvbGxl Y3RfYWR2aWNlX2xvY2FsX2NvbGxlY3RvciAmJgorCQlwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9j b2xsZWN0aW9uX2xpbWl0ID4gMCkKKwl7CisJCXBnY2FfY29sbGVjdGVkX2FkdmljZSAqY2E7CisJ CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHBnX2NvbGxlY3RfYWR2aWNlX2dldF9tY3h0KCkpOworCQljYSA9IG1ha2VfY29s bGVjdGVkX2FkdmljZSh1c2VyaWQsIGRiaWQsIHF1ZXJ5SWQsIG5vdywKKwkJCQkJCQkJICAgcXVl cnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkgICBOVUxMLCBOVUxMKTsKKwkJc3Rv cmVfbG9jYWxfYWR2aWNlKGNhKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCX0KKworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yICYmCisJCXBn X2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID4gMCkKKwl7CisJCWRzYV9h cmVhICAgKmFyZWEgPSBwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSgpOworCQlkc2FfcG9pbnRl ciBjYV9wb2ludGVyID0gSW52YWxpZERzYVBvaW50ZXI7IC8qIHBsYWNhdGUgY29tcGlsZXIgKi8K KworCQltYWtlX2NvbGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJ CQkJCQkJICBxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJpbmcsIGFyZWEsCisJCQkJCQkJICAmY2Ff cG9pbnRlcik7CisJCXN0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJfQorfQorCisv KgorICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdjYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVj dC4KKyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIG5l dyBvYmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyByZXR1cm5lZCB2 aWEgKnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2JqZWN0IGlzIGFs bG9jYXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCByZXN1bHQgaXMg bm90IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdjYV9jb2xsZWN0ZWRfYWR2 aWNlICoKK21ha2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLCBPaWQgZGJpZCwgdWludDY0 IHF1ZXJ5SWQsCisJCQkJCSAgVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkgIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJICBjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLAorCQkJ CQkgIGRzYV9hcmVhICphcmVhLCBkc2FfcG9pbnRlciAqcmVzdWx0KQoreworCXNpemVfdAkJcXVl cnlfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihxdWVyeV9zdHJpbmcpICsgMTsKKwlzaXplX3QJCWFk dmljZV9zdHJpbmdfbGVuZ3RoID0gc3RybGVuKGFkdmljZV9zdHJpbmcpICsgMTsKKwlzaXplX3QJ CXRvdGFsX2xlbmd0aDsKKwlwZ2NhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCisJdG90YWxfbGVu Z3RoID0gb2Zmc2V0b2YocGdjYV9jb2xsZWN0ZWRfYWR2aWNlLCB0ZXh0dWFsX2RhdGEpCisJCSsg cXVlcnlfc3RyaW5nX2xlbmd0aCArIGFkdmljZV9zdHJpbmdfbGVuZ3RoOworCisJaWYgKGFyZWEg PT0gTlVMTCkKKwkJY2EgPSBwYWxsb2ModG90YWxfbGVuZ3RoKTsKKwllbHNlCisJeworCQkqcmVz dWx0ID0gZHNhX2FsbG9jYXRlKGFyZWEsIHRvdGFsX2xlbmd0aCk7CisJCWNhID0gZHNhX2dldF9h ZGRyZXNzKGFyZWEsICpyZXN1bHQpOworCX0KKworCWNhLT51c2VyaWQgPSB1c2VyaWQ7CisJY2Et PmRiaWQgPSBkYmlkOworCWNhLT5xdWVyeWlkID0gcXVlcnlJZDsKKwljYS0+dGltZXN0YW1wID0g dGltZXN0YW1wOworCWNhLT5hZHZpY2Vfb2Zmc2V0ID0gcXVlcnlfc3RyaW5nX2xlbmd0aDsKKwor CW1lbWNweShjYS0+dGV4dHVhbF9kYXRhLCBxdWVyeV9zdHJpbmcsIHF1ZXJ5X3N0cmluZ19sZW5n dGgpOworCW1lbWNweSgmY2EtPnRleHR1YWxfZGF0YVtjYS0+YWR2aWNlX29mZnNldF0sCisJCSAg IGFkdmljZV9zdHJpbmcsIGFkdmljZV9zdHJpbmdfbGVuZ3RoKTsKKworCXJldHVybiBjYTsKK30K KworLyoKKyAqIEFkZCBhIHBnY2FfY29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gb3VyIGJhY2tl bmQtbG9jYWwgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxl IGZvciBzd2l0Y2hpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIG1lbW9yeSBjb250ZXh0OworICogdGhl IHByb3ZpZGVkIG9iamVjdCBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiB0aGF0IHNhbWUg Y29udGV4dC4KKyAqLworc3RhdGljIHZvaWQKK3N0b3JlX2xvY2FsX2FkdmljZShwZ2NhX2NvbGxl Y3RlZF9hZHZpY2UgKmNhKQoreworCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCXVpbnQ2NAkJY2h1 bmtfb2Zmc2V0OworCXBnY2FfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwor CS8qIElmIHRoZSBsb2NhbCBhZHZpY2UgY29sbGVjdG9yIGlzbid0IGluaXRpYWxpemVkIHlldCwg ZG8gdGhhdCBub3cuICovCisJaWYgKGxhID09IE5VTEwpCisJeworCQlsYSA9IHBhbGxvYzAoc2l6 ZW9mKHBnY2FfbG9jYWxfYWR2aWNlKSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6 ZSA9IEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQlsYS0+Y2h1bmtzID0gcGFsbG9jMF9hcnJh eShwZ2NhX2xvY2FsX2FkdmljZV9jaHVuayAqLAorCQkJCQkJCQkgICBsYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUpOworCQlsb2NhbF9jb2xsZWN0b3IgPSBsYTsKKwl9CisKKwkvKiBDb21w dXRlIGNodW5rIGFuZCBvZmZzZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJ Y2h1bmtfbnVtYmVyID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5L X1NJWkU7CisJY2h1bmtfb2Zmc2V0ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJhc2VfaWQpICUgQURW SUNFX0NIVU5LX1NJWkU7CisKKwkvKiBFeHRlbmQgY2h1bmsgYXJyYXksIGlmIG5lZWRlZC4gKi8K KwlpZiAoY2h1bmtfbnVtYmVyID49IGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSkKKwl7 CisJCWludAkJCW5ld19zaXplOworCisJCW5ld19zaXplID0gbGEtPmNodW5rX2FycmF5X2FsbG9j YXRlZF9zaXplICsgQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJCWxhLT5jaHVua3MgPSByZXBh bGxvYzBfYXJyYXkobGEtPmNodW5rcywKKwkJCQkJCQkJCSBwZ2NhX2xvY2FsX2FkdmljZV9jaHVu ayAqLAorCQkJCQkJCQkJIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSwKKwkJCQkJCQkJ CSBuZXdfc2l6ZSk7CisJCWxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSA9IG5ld19zaXpl OworCX0KKworCS8qIEFsbG9jYXRlIG5ldyBjaHVuaywgaWYgbmVlZGVkLiAqLworCWlmIChsYS0+ Y2h1bmtzW2NodW5rX251bWJlcl0gPT0gTlVMTCkKKwkJbGEtPmNodW5rc1tjaHVua19udW1iZXJd ID0gcGFsbG9jMF9vYmplY3QocGdjYV9sb2NhbF9hZHZpY2VfY2h1bmspOworCisJLyogU2F2ZSBw b2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQobGEtPmNodW5rc1tj aHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPT0gTlVMTCk7CisJbGEtPmNodW5r c1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBjYTsKKwkrK2xhLT5uZXh0 X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQg b2xkIGRhdGEuICovCisJdHJpbV9sb2NhbF9hZHZpY2UocGdfY29sbGVjdF9hZHZpY2VfbG9jYWxf Y29sbGVjdGlvbl9saW1pdCk7Cit9CisKKy8qCisgKiBBZGQgYSBwZ2NhX2NvbGxlY3RlZF9hZHZp Y2Ugb2JqZWN0IHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICogJ2NhX3Bv aW50ZXInIHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlIHBnX2NvbGxlY3RfYWR2 aWNlIERTQSBhcmVhCisgKiBhbmQgc2hvdWxkIHBvaW50IHRvIGFuIG9iamVjdCBvZiB0eXBlIHBn Y2FfY29sbGVjdGVkX2FkdmljZS4KKyAqLworc3RhdGljIHZvaWQKK3N0b3JlX3NoYXJlZF9hZHZp Y2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcikKK3sKKwl1aW50NjQJCWNodW5rX251bWJlcjsKKwl1 aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ2NhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19jb2xs ZWN0X2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfY29sbGVjdF9hZHZp Y2VfZHNhX2FyZWEoKTsKKwlwZ2NhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxlY3Rv cjsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdjYV9zaGFyZWRfYWR2aWNlX2NodW5r ICpjaHVuazsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJl KCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0 dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdy4K KwkgKiBJZiB3ZSdyZSB0aGUgZmlyc3Qgb25lcyB0byBhdHRhY2gsIHdlIG1heSBuZWVkIHRvIGNy ZWF0ZSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRl LT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQkJc3RhdGUtPnNoYXJl ZF9jb2xsZWN0b3IgPQorCQkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBnY2Ffc2hhcmVk X2FkdmljZSkpOworCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2FkZHJlc3MoYXJl YSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qCisJICogSXQncyBwb3NzaWJs ZSB0aGF0IHNvbWUgb3RoZXIgYmFja2VuZCBtYXkgaGF2ZSBzdWNjZWVkZWQgaW4gY3JlYXRpbmcK KwkgKiB0aGUgbWFpbiBjb2xsZWN0b3Igb2JqZWN0IGJ1dCBmYWlsZWQgdG8gYWxsb2NhdGUgYW4g aW5pdGlhbCBjaHVuaworCSAqIGFycmF5LCBzbyB3ZSBtdXN0IGJlIHByZXBhcmVkIHRvIGFsbG9j YXRlIHRoZSBjaHVuayBhcnJheSBoZXJlIHdoZXRoZXIKKwkgKiBvciBub3Qgd2UgY3JlYXRlZCB0 aGUgY29sbGVjdG9yIG9iamVjdC4KKwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3Rvci0+Y2h1bmtf YXJyYXlfYWxsb2NhdGVkX3NpemUgPT0gMCkKKwl7CisJCXNhLT5jaHVua3MgPQorCQkJZHNhX2Fs bG9jYXRlMChhcmVhLAorCQkJCQkJICBzaXplb2YoZHNhX3BvaW50ZXIpICogQURWSUNFX0NIVU5L X0FSUkFZX1NJWkUpOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPSBBRFZJQ0Vf Q0hVTktfQVJSQVlfU0laRTsKKwl9CisKKwkvKiBDb21wdXRlIGNodW5rIGFuZCBvZmZzZXQgYXQg d2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJY2h1bmtfbnVtYmVyID0gKHNhLT5uZXh0 X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJY2h1bmtfb2Zmc2V0ID0g KHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkvKiBH ZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGNodW5rIGFycmF5IGFuZCwgaWYgbmVlZGVkLCBleHRlbmQg aXQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3Np emUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKwkJZHNhX3BvaW50ZXIgbmV3X2NodW5rczsKKwor CQkvKgorCQkgKiBEU0EgY2FuJ3QgZW5sYXJnZSBhbiBleGlzdGluZyBhbGxvY2F0aW9uLCBzbyB3 ZSBtdXN0IG1ha2UgYSBuZXcKKwkJICogYWxsb2NhdGlvbiBhbmQgY29weSBkYXRhIG92ZXIuCisJ CSAqLworCQluZXdfc2l6ZSA9IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklD RV9DSFVOS19BUlJBWV9TSVpFOworCQluZXdfY2h1bmtzID0gZHNhX2FsbG9jYXRlMChhcmVhLCBz aXplb2YoZHNhX3BvaW50ZXIpICogbmV3X3NpemUpOworCQljaHVua19hcnJheSA9IGRzYV9nZXRf YWRkcmVzcyhhcmVhLCBuZXdfY2h1bmtzKTsKKwkJbWVtY3B5KGNodW5rX2FycmF5LCBkc2FfZ2V0 X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyksCisJCQkgICBzaXplb2YoZHNhX3BvaW50ZXIpICog c2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJZHNhX2ZyZWUoYXJlYSwgc2EtPmNo dW5rcyk7CisJCXNhLT5jaHVua3MgPSBuZXdfY2h1bmtzOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisJZWxzZQorCQljaHVua19hcnJheSA9IGRzYV9n ZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0 aGUgZGVzaXJlZCBjaHVuaywgYWxsb2NhdGluZyBpdCBpZiBuZWVkZWQuICovCisJaWYgKGNodW5r X2FycmF5W2NodW5rX251bWJlcl0gPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCWNodW5rX2FycmF5 W2NodW5rX251bWJlcl0gPQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2YocGdjYV9zaGFy ZWRfYWR2aWNlX2NodW5rKSk7CisJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtf YXJyYXlbY2h1bmtfbnVtYmVyXSk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4dC1p ZCBjb3VudGVyLiAqLworCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID09IElu dmFsaWREc2FQb2ludGVyKTsKKwljaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2FfcG9p bnRlcjsKKwkrK3NhLT5uZXh0X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIHN0b3Jh Z2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEs IHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0KTsKKworCS8qIFJlbGVh c2UgbG9jayBvbiBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2sp OworfQorCisvKgorICogRGlzY2FyZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBiYWNrZW5k LWxvY2FsIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisgKi8K K3N0YXRpYyB2b2lkCit0cmltX2xvY2FsX2FkdmljZShpbnQgbGltaXQpCit7CisJcGdjYV9sb2Nh bF9hZHZpY2UgKmxhID0gbG9jYWxfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9jb3VudDsK Kwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsKKwl1aW50 NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7CisK KwkvKiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZSBsaW1pdCwgdGhlcmUncyBub3RoaW5n IHRvIGRvLiAqLworCWN1cnJlbnRfY291bnQgPSBsYS0+bmV4dF9pZCAtIGxhLT5vbGRlc3RfaWQ7 CisJaWYgKGN1cnJlbnRfY291bnQgPD0gbGltaXQpCisJCXJldHVybjsKKworCS8qIEZyZWUgZW5v dWdoIGVudHJpZXMgdG8gZ2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9j b3VudCA9IGN1cnJlbnRfY291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJ eworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisKKwkJ Y2h1bmtfbnVtYmVyID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hV TktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGxhLT5vbGRlc3RfaWQgLSBsYS0+YmFzZV9pZCkg JSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQlBc3NlcnQobGEtPmNodW5rc1tjaHVua19udW1iZXJd LT5lbnRyaWVzW2NodW5rX29mZnNldF0gIT0gTlVMTCk7CisJCXBmcmVlKGxhLT5jaHVua3NbY2h1 bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJbGEtPmNodW5rc1tjaHVua19u dW1iZXJdLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBOVUxMOworCQkrK2xhLT5vbGRlc3RfaWQ7 CisJCS0tdHJpbV9jb3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93 IGVudGlyZWx5IHVudXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKGxhLT5vbGRlc3RfaWQg LSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsg biA8IHRyaW1fY2h1bmtfY291bnQ7ICsrbikKKwkJcGZyZWUobGEtPmNodW5rc1tuXSk7CisKKwkv KiBTbGlkZSByZW1haW5pbmcgY2h1bmsgcG9pbnRlcnMgYmFjayB0b3dhcmQgdGhlIGJhc2Ugb2Yg dGhlIGFycmF5LiAqLworCXRvdGFsX2NodW5rX2NvdW50ID0gKGxhLT5uZXh0X2lkIC0gbGEtPmJh c2VfaWQgKworCQkJCQkJIEFEVklDRV9DSFVOS19TSVpFIC0gMSkgLyBBRFZJQ0VfQ0hVTktfU0la RTsKKwlyZW1haW5pbmdfY2h1bmtfY291bnQgPSB0b3RhbF9jaHVua19jb3VudCAtIHRyaW1fY2h1 bmtfY291bnQ7CisJaWYgKHJlbWFpbmluZ19jaHVua19jb3VudCA+IDApCisJCW1lbW1vdmUoJmxh LT5jaHVua3NbMF0sICZsYS0+Y2h1bmtzW3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVvZihw Z2NhX2xvY2FsX2FkdmljZV9jaHVuayAqKSAqIHJlbWFpbmluZ19jaHVua19jb3VudCk7CisKKwkv KiBEb24ndCBsZWF2ZSBzdGFsZSBwb2ludGVycyBhcm91bmQuICovCisJbWVtc2V0KCZsYS0+Y2h1 bmtzW3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihwZ2NhX2xvY2FsX2Fk dmljZV9jaHVuayAqKQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19jaHVu a19jb3VudCkpOworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJ bGEtPmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOworfQor CisvKgorICogRGlzY2FyZCBjb2xsZWN0ZWQgYWR2aWNlIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5 IGluIGV4Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmllZCBsaW1pdC4KKyAqLworc3RhdGljIHZvaWQK K3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0KQoreworCXBnY2Ff c2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9yOworCXVpbnQ2NAkJY3VycmVudF9j b3VudDsKKwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0CQl0b3RhbF9jaHVua19jb3VudDsK Kwl1aW50NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0CQlyZW1haW5pbmdfY2h1bmtfY291 bnQ7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQg cmVhY2hlZCB0aGUgbGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2Nv dW50ID0gc2EtPm5leHRfaWQgLSBzYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9 IGxpbWl0KQorCQlyZXR1cm47CisKKwkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVuayBhcnJh eS4gKi8KKwljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsK KworCS8qIEZyZWUgZW5vdWdoIGVudHJpZXMgdG8gZ2V0IHVzIGJhY2sgZG93biB0byB0aGUgbGlt aXQuICovCisJdHJpbV9jb3VudCA9IGN1cnJlbnRfY291bnQgLSBsaW1pdDsKKwl3aGlsZSAodHJp bV9jb3VudCA+IDApCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVu a19vZmZzZXQ7CisJCXBnY2Ffc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkJY2h1bmtf bnVtYmVyID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0la RTsKKwkJY2h1bmtfb2Zmc2V0ID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJ Q0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVua19h cnJheVtjaHVua19udW1iZXJdKTsKKwkJQXNzZXJ0KGNodW5rLT5lbnRyaWVzW2NodW5rX29mZnNl dF0gIT0gSW52YWxpZERzYVBvaW50ZXIpOworCQlkc2FfZnJlZShhcmVhLCBjaHVuay0+ZW50cmll c1tjaHVua19vZmZzZXRdKTsKKwkJY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSA9IEludmFs aWREc2FQb2ludGVyOworCQkrK3NhLT5vbGRlc3RfaWQ7CisJCS0tdHJpbV9jb3VudDsKKwl9CisK KwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93IGVudGlyZWx5IHVudXNlZC4gKi8KKwl0 cmltX2NodW5rX2NvdW50ID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0Vf Q0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsgbiA8IHRyaW1fY2h1bmtfY291bnQ7ICsr bikKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmtfYXJyYXlbbl0pOworCisJLyogU2xpZGUgcmVtYWlu aW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8K Kwl0b3RhbF9jaHVua19jb3VudCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkICsKKwkJCQkJ CSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5n X2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlm IChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQltZW1tb3ZlKCZjaHVua19hcnJheVswXSwg JmNodW5rX2FycmF5W3RyaW1fY2h1bmtfY291bnRdLAorCQkJCXNpemVvZihkc2FfcG9pbnRlcikg KiByZW1haW5pbmdfY2h1bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRl cnMgYXJvdW5kLiAqLworCW1lbXNldCgmY2h1bmtfYXJyYXlbcmVtYWluaW5nX2NodW5rX2NvdW50 XSwgMCwKKwkJICAgc2l6ZW9mKGRzYV9wb2ludGVyKSAqICh0b3RhbF9jaHVua19jb3VudCAtIHJl bWFpbmluZ19jaHVua19jb3VudCkpOworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3Jk aW5nbHkuICovCisJc2EtPmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVO S19TSVpFOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYWR2 aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfY2xl YXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChsb2Nh bF9jb2xsZWN0b3IgIT0gTlVMTCkKKwkJdHJpbV9sb2NhbF9hZHZpY2UoMCk7CisKKwlQR19SRVRV Uk5fVk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQg YWR2aWNlIGNvbGxlY3RlZCBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9j b2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCXBnY2Ffc2hhcmVk X3N0YXRlICpzdGF0ZSA9IHBnX2NvbGxlY3RfYWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAg KmFyZWEgPSBwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSgpOworCisJTFdMb2NrQWNxdWlyZSgm c3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRh Y2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJ ICogYnV0IGlmIHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJu IHdpdGhvdXQgZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzaGFyZWRfY29s bGVjdG9yID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0gSW52 YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJ CXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IGRzYV9nZXRfYWRk cmVzcyhhcmVhLCBzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogRG8gdGhlIHJl YWwgd29yayAqLworCXRyaW1fc2hhcmVkX2FkdmljZShhcmVhLCAwKTsKKworCUxXTG9ja1JlbGVh c2UoJnN0YXRlLT5sb2NrKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBTUUwt Y2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tlbmQtbG9jYWwg bWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZShQR19GVU5D VElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICop IGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ2NhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9jb2xs ZWN0b3I7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisKKwlJbml0TWF0ZXJpYWxpemVk U1JGKGZjaW5mbywgMCk7CisKKwlpZiAobGEgPT0gTlVMTCkKKwkJcmV0dXJuIChEYXR1bSkgMDsK KworCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9IGxhLT5v bGRlc3RfaWQ7IGlkIDwgbGEtPm5leHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJCWNodW5rX251 bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBnY2FfY29sbGVjdGVkX2FkdmljZSAq Y2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXTsKKwkJYm9vbAkJbnVs bHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKworCQljaHVua19udW1iZXIgPSAoaWQg LSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGlk IC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJY2EgPSBsYS0+Y2h1bmtz W2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XTsKKworCQlpZiAoIW1lbWJlcl9j YW5fc2V0X3JvbGUodXNlcmlkLCBjYS0+dXNlcmlkKSkKKwkJCWNvbnRpbnVlOworCisJCXZhbHVl c1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0SWRHZXREYXR1 bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7 CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNhLT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRd ID0gVGltZXN0YW1wVHpHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0 cmluZ0dldFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmlu Z0dldFRleHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1 ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBu dWxscyk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJs ZSBTUkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQorICovCitE YXR1bQorcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1 bHRpbmZvOworCXBnY2Ffc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX2NvbGxlY3RfYWR2aWNlX2F0 dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEgPSBwZ19jb2xsZWN0X2FkdmljZV9kc2FfYXJlYSgp OworCWRzYV9wb2ludGVyICpjaHVua19hcnJheTsKKwlwZ2NhX3NoYXJlZF9hZHZpY2UgKnNhID0g c2hhcmVkX2NvbGxlY3RvcjsKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKworCUluaXRN YXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4g Ki8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfU0hBUkVEKTsKKworCS8qCisJICog SWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQs IGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3RvciBkb2Vzbid0IGV2ZW4gZXhp c3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFueXRoaW5nIGVsc2UuCisJICov CisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0g SW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsK KwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IHNhID0gZHNh X2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9CisKKwkvKiBJ ZiB0aGVyZSdzIG5vIGNodW5rIGFycmF5IHlldCwgdGhlcmUncyBub3RoaW5nIHRvIGRvLiAqLwor CWlmIChzYS0+Y2h1bmtzID09IEludmFsaWREc2FQb2ludGVyKQorCXsKKwkJTFdMb2NrUmVsZWFz ZSgmc3RhdGUtPmxvY2spOworCQlyZXR1cm4gKERhdHVtKSAwOworCX0KKworCS8qIEdldCBhIHBv aW50ZXIgdG8gdGhlIGNodW5rIGFycmF5LiAqLworCWNodW5rX2FycmF5ID0gZHNhX2dldF9hZGRy ZXNzKGFyZWEsIHNhLT5jaHVua3MpOworCisJLyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLwor CWZvciAodWludDY0IGlkID0gc2EtPm9sZGVzdF9pZDsgaWQgPCBzYS0+bmV4dF9pZDsgKytpZCkK Kwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJ cGdjYV9zaGFyZWRfYWR2aWNlX2NodW5rICpjaHVuazsKKwkJcGdjYV9jb2xsZWN0ZWRfYWR2aWNl ICpjYTsKKwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQlu dWxsc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChp ZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAo aWQgLSBzYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9n ZXRfYWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJY2EgPSBkc2Ff Z2V0X2FkZHJlc3MoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisKKwkJaWYg KCFtZW1iZXJfY2FuX3NldF9yb2xlKHVzZXJpZCwgY2EtPnVzZXJpZCkpCisJCQljb250aW51ZTsK KworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVj dElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZhbHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0o Y2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJ CXZhbHVlc1s0XSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJCXZhbHVl c1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJCXZhbHVlc1s2 XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJCXR1cGxlc3Rv cmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJCQkJ IHZhbHVlcywgbnVsbHMpOworCX0KKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3RhdGUu ICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJcmV0dXJuIChEYXR1bSkgMDsK K30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxf Y29sbGVjdG9yLm91dCBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvZXhwZWN0ZWQvbG9jYWxf Y29sbGVjdG9yLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjU3 Yjk2ZWU4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2V4 cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKQEAgLTAsMCArMSw2OSBAQAorQ1JFQVRFIEVYVEVO U0lPTiBwZ19jb2xsZWN0X2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsK Ky0tIFRyeSBjbGVhcmluZyBhZHZpY2UgYmVmb3JlIHdlJ3ZlIGNvbGxlY3RlZCBhbnkuCitTRUxF Q1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworIHBnX2NsZWFyX2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygx IHJvdykKKworLS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3 ZSdsbCBleGNlZWQgaXQuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9s aW1pdCA9IDI7CistLSBFbmFibGUgdGhlIGNvbGxlY3Rvci4KK1NFVCBwZ19jb2xsZWN0X2Fkdmlj ZS5sb2NhbF9jb2xsZWN0b3IgPSBvbjsKKy0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRF IFRBQkxFIGR1bW15X3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CistLSBUZXN0 IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7Cisg YSB8IGIgfCBhIHwgYiAKKy0tLSstLS0rLS0tKy0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJP TSBkdW1teV90YWJsZTsKKyBhIHwgYiAKKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIFNob3VsZCBy ZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFVCBwZ19jb2xs ZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvZmY7CitTRUxFQ1QgYWR2aWNlIEZST00gcGdf Z2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7Cisg ICAgICAgICBhZHZpY2UgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNFUV9T Q0FOKGR1bW15X3RhYmxlKSArCisgTk9fR0FUSEVSKGR1bW15X3RhYmxlKQorKDEgcm93KQorCist LSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0 ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBSYWlzZSB0 aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBsZSBj aHVua3MuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIw MDA7CitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CistLSBQdXNo IGEgYnVuY2ggb2YgcXVlcmllcyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4K KwlGT1IgeCBJTiAxLi4yMDAwIExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90 YWJsZSc7CisJRU5EIExPT1A7CitFTkQKKyQkOworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9y IHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCk7CisgY291bnQgCistLS0tLS0tCisgIDIwMDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFy IG9uZSBtb3JlIHRpbWUsIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2Js ZW0KKy0tIGV2ZW4gd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19j bGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2Fs X2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL2ludGVyZmFjZS5jIGIvY29u dHJpYi9wZ19jb2xsZWN0X2FkdmljZS9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZmViMTE5NzQxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX2NvbGxlY3RfYWR2aWNlL2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMzAzIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBpbnRlcmZhY2UuYworICoJICBpbnRlcmZhY2Ugcm91dGluZXMg Zm9yIHRoZSBwbGFuIGFkdmljZSBjb2xsZWN0b3IKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfY29sbGVjdF9hZHZpY2UvaW50ZXJmYWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19jb2xsZWN0X2Fkdmlj ZS5oIgorCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVy LmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJ1dGlscy9n dWMuaCIKKworUEdfTU9EVUxFX01BR0lDOworCisvKiBTaGFyZWQgbWVtb3J5IHBvaW50ZXJzICov CitzdGF0aWMgcGdjYV9zaGFyZWRfc3RhdGUgKnBnY2Ffc3RhdGUgPSBOVUxMOworc3RhdGljIGRz YV9hcmVhICpwZ2NhX2RzYV9hcmVhID0gTlVMTDsKKworLyogR1VDIHZhcmlhYmxlcyAqLworYm9v bAkJcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yID0gZmFsc2U7CitpbnQJCQlwZ19j b2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKK2Jvb2wJCXBnX2NvbGxl Y3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3IgPSBmYWxzZTsKK2ludAkJCXBnX2NvbGxlY3RfYWR2 aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0ID0gMDsKKworLyogU2hhZG93IHZhcmlhYmxlcyBm b3IgR1VDIGFzc2lnbiBob29rcyAqLworc3RhdGljIGJvb2wgcGdfY29sbGVjdF9hZHZpY2VfbG9j YWxfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBwZ19jb2xsZWN0 X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0gZmFsc2U7CisKKy8qIE90aGVy IGZpbGUtbGV2ZWwgZ2xvYmFscyAqLworc3RhdGljIHZvaWQgKCpyZXF1ZXN0X2FkdmljZV9nZW5l cmF0aW9uX2ZuKSAoYm9vbCBhY3RpdmF0ZSkgPSBOVUxMOworc3RhdGljIHBsYW5uZXJfc2h1dGRv d25faG9va190eXBlIHByZXZfcGxhbm5lcl9zaHV0ZG93biA9IE5VTEw7CitzdGF0aWMgTWVtb3J5 Q29udGV4dCBwZ2NhX21lbW9yeV9jb250ZXh0ID0gTlVMTDsKKworLyogRnVuY3Rpb24gcHJvdG90 eXBlcyAqLworc3RhdGljIHZvaWQgcGdjYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpwdHIsIHZv aWQgKmFyZyk7CitzdGF0aWMgdm9pZCBwZ2NhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2Jh bCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmlu ZywKKwkJCQkJCQkJICBQbGFubmVkU3RtdCAqcHN0bXQpOworc3RhdGljIHZvaWQgcGdfY29sbGVj dF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2Fzc2lnbl9ob29rKGJvb2wgbmV3dmFsLAorCQkJCQkJ CQkJCQkJCQkgIHZvaWQgKmV4dHJhKTsKK3N0YXRpYyB2b2lkIHBnX2NvbGxlY3RfYWR2aWNlX3No YXJlZF9jb2xsZWN0b3JfYXNzaWduX2hvb2soYm9vbCBuZXd2YWwsCisJCQkJCQkJCQkJCQkJCSAg IHZvaWQgKmV4dHJhKTsKK3N0YXRpYyBEZWZFbGVtICpmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShM aXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBt b2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBHZXQgYSBwb2lu dGVyIHNvIHdlIGNhbiBjYWxsIHBnX3BsYW5fYWR2aWNlX3JlcXVlc3RfYWR2aWNlX2dlbmVyYXRp b24uCisJICoKKwkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGRlZmluaW5nIGN1c3RvbSBH VUNzOyBvdGhlcndpc2UsIG91ciBhc3NpZ24KKwkgKiBob29rIHdpbGwgdHJ5IHRvIHVzZSB0aGlz IGZ1bmN0aW9uIHBvaW50ZXIgYmVmb3JlIGl0J3MgaW5pdGlhbGl6ZWQuCisJICoKKwkgKiBXZSBh bHNvIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgaW5zdGFsbGluZyBvdXIgb3duIGhvb2tzLCBzbyB0 aGF0IGlmCisJICogcGdfcGxhbl9hZHZpY2UgaXMgbm90IHlldCBsb2FkZWQsIGl0IHdpbGwgaW5z dGFsbCBpdHMgaG9va3MgYmVmb3JlIHdlCisJICogaW5zdGFsbCBvdXJzLiAoU2VlIGNvbW1lbnRz IGluIHBnY2FfcGxhbm5lcl9zaHV0ZG93bi4pCisJICovCisJcmVxdWVzdF9hZHZpY2VfZ2VuZXJh dGlvbl9mbiA9CisJCWxvYWRfZXh0ZXJuYWxfZnVuY3Rpb24oInBnX3BsYW5fYWR2aWNlIiwKKwkJ CQkJCQkgICAicGdfcGxhbl9hZHZpY2VfcmVxdWVzdF9hZHZpY2VfZ2VuZXJhdGlvbiIsCisJCQkJ CQkJICAgdHJ1ZSwgTlVMTCk7CisKKwkvKiBEZWZpbmUgb3VyIEdVQ3MuICovCisJRGVmaW5lQ3Vz dG9tQm9vbFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IiLAorCQkJ CQkJCSAiRW5hYmxlIHRoZSBsb2NhbCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEws CisJCQkJCQkJICZwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3IsCisJCQkJCQkJIGZh bHNlLAorCQkJCQkJCSBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJ CQkJCQkgcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2Fzc2lnbl9ob29rLAorCQkJ CQkJCSBOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19jb2xsZWN0X2Fkdmlj ZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0 byByZXRhaW4gaW4gcGVyLWJhY2tlbmQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCSZw Z19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJ CQkJMCwgSU5UX01BWCwKKwkJCQkJCQlQR0NfVVNFUlNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5V TEwsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJp YWJsZSgicGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvciIsCisJCQkJCQkJICJFbmFi bGUgdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJ ICZwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yLAorCQkJCQkJCSBmYWxzZSwKKwkJ CQkJCQkgUEdDX1NVU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBwZ19j b2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2Fzc2lnbl9ob29rLAorCQkJCQkJCSBOVUxM KTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRf Y29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0YWlu IGluIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX2NvbGxlY3RfYWR2 aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01B WCwKKwkJCQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5V TEwsCisJCQkJCQkJTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX2NvbGxlY3Rf YWR2aWNlIik7CisKKwkvKiBJbnN0YWxsIGhvb2tzICovCisJcHJldl9wbGFubmVyX3NodXRkb3du ID0gcGxhbm5lcl9zaHV0ZG93bl9ob29rOworCXBsYW5uZXJfc2h1dGRvd25faG9vayA9IHBnY2Ff cGxhbm5lcl9zaHV0ZG93bjsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0YXRlIHdo ZW4gZmlyc3QgY3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQKK3BnY2FfaW5pdF9zaGFyZWRfc3Rh dGUodm9pZCAqcHRyLCB2b2lkICphcmcpCit7CisJcGdjYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0g KHBnY2Ffc2hhcmVkX3N0YXRlICopIHB0cjsKKworCUxXTG9ja0luaXRpYWxpemUoJnN0YXRlLT5s b2NrLAorCQkJCQkgTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19jb2xsZWN0X2FkdmljZV9sb2NrIikp OworCXN0YXRlLT5kc2FfdHJhbmNoZSA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfY29sbGVjdF9h ZHZpY2VfZHNhIik7CisJc3RhdGUtPmFyZWEgPSBEU0FfSEFORExFX0lOVkFMSUQ7CisJc3RhdGUt PnNoYXJlZF9jb2xsZWN0b3IgPSBJbnZhbGlkRHNhUG9pbnRlcjsKK30KKworLyoKKyAqIFJldHVy biBhIHBvaW50ZXIgdG8gYSBtZW1vcnkgY29udGV4dCB3aGVyZSBsb25nLWxpdmVkIGRhdGEgbWFu YWdlZCBieSB0aGlzCisgKiBtb2R1bGUgY2FuIGJlIHN0b3JlZC4KKyAqLworTWVtb3J5Q29udGV4 dAorcGdfY29sbGVjdF9hZHZpY2VfZ2V0X21jeHQodm9pZCkKK3sKKwlpZiAocGdjYV9tZW1vcnlf Y29udGV4dCA9PSBOVUxMKQorCQlwZ2NhX21lbW9yeV9jb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0 Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJCQkJInBnX2NvbGxlY3RfYWR2aWNl IiwKKwkJCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCXJldHVybiBwZ2Nh X21lbW9yeV9jb250ZXh0OworfQorCisvKgorICogR2V0IGEgcG9pbnRlciB0byBvdXIgc2hhcmVk IHN0YXRlLgorICoKKyAqIElmIG5vIHNoYXJlZCBzdGF0ZSBleGlzdHMsIGNyZWF0ZSBhbmQgaW5p dGlhbGl6ZSBpdC4gSWYgaXQgZG9lcyBleGlzdCBidXQKKyAqIHRoaXMgYmFja2VuZCBoYXMgbm90 IHlldCBhY2Nlc3NlZCBpdCwgYXR0YWNoIHRvIGl0LiBPdGhlcndpc2UsIGp1c3QgcmV0dXJuCisg KiBvdXIgY2FjaGVkIHBvaW50ZXIuCisgKi8KK3BnY2Ffc2hhcmVkX3N0YXRlICoKK3BnX2NvbGxl Y3RfYWR2aWNlX2F0dGFjaCh2b2lkKQoreworCWlmIChwZ2NhX3N0YXRlID09IE5VTEwpCisJewor CQlib29sCQlmb3VuZDsKKworCQlwZ2NhX3N0YXRlID0KKwkJCUdldE5hbWVkRFNNU2VnbWVudCgi cGdfY29sbGVjdF9hZHZpY2UiLCBzaXplb2YocGdjYV9zaGFyZWRfc3RhdGUpLAorCQkJCQkJCSAg IHBnY2FfaW5pdF9zaGFyZWRfc3RhdGUsICZmb3VuZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHBn Y2Ffc3RhdGU7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHBnX2NvbGxlY3RfYWR2 aWNlJ3MgRFNBIGFyZWEsIGNyZWF0aW5nIGl0IGlmIG5lZWRlZC4KKyAqLworZHNhX2FyZWEgKgor cGdfY29sbGVjdF9hZHZpY2VfZHNhX2FyZWEodm9pZCkKK3sKKwlpZiAocGdjYV9kc2FfYXJlYSA9 PSBOVUxMKQorCXsKKwkJcGdjYV9zaGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfY29sbGVjdF9hZHZp Y2VfYXR0YWNoKCk7CisJCWRzYV9oYW5kbGUJYXJlYV9oYW5kbGU7CisJCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKKworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHBnX2Nv bGxlY3RfYWR2aWNlX2dldF9tY3h0KCkpOworCisJCUxXTG9ja0FjcXVpcmUoJnN0YXRlLT5sb2Nr LCBMV19FWENMVVNJVkUpOworCQlhcmVhX2hhbmRsZSA9IHN0YXRlLT5hcmVhOworCQlpZiAoYXJl YV9oYW5kbGUgPT0gRFNBX0hBTkRMRV9JTlZBTElEKQorCQl7CisJCQlwZ2NhX2RzYV9hcmVhID0g ZHNhX2NyZWF0ZShzdGF0ZS0+ZHNhX3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ2NhX2RzYV9hcmVh KTsKKwkJCXN0YXRlLT5hcmVhID0gZHNhX2dldF9oYW5kbGUocGdjYV9kc2FfYXJlYSk7CisJCQlM V0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMV0xvY2tS ZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlwZ2NhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVh X2hhbmRsZSk7CisJCX0KKworCQlkc2FfcGluX21hcHBpbmcocGdjYV9kc2FfYXJlYSk7CisKKwkJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCXJldHVybiBwZ2NhX2Rz YV9hcmVhOworfQorCisvKgorICogQWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUsIHJldHJpZXZl IHRoZSBhZHZpY2Ugc3RyaW5nLCBpZiBwcmVzZW50LCBhbmQKKyAqIHBhc3MgaXQgdGhyb3VnaCB0 byB0aGUgY29sbGVjdG9yLgorICovCitzdGF0aWMgdm9pZAorcGdjYV9wbGFubmVyX3NodXRkb3du KFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJICBjb25zdCBjaGFyICpx dWVyeV9zdHJpbmcsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlEZWZFbGVtICAgICpwZ3BhX2l0 ZW07CisJRGVmRWxlbSAgICAqYWR2aWNlX3N0cmluZ19pdGVtOworCWNoYXIJICAgKmFkdmljZV9z dHJpbmc7CisKKwkvKgorCSAqIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLgorCSAqCisJICog V2Ugd2FudCB0byBiZSBjYWxsZWQgYWZ0ZXIgcGdfcGxhbl9hZHZpY2UncyBzaHV0ZG93biBob29r IGhhcyBhbHJlYWR5CisJICogZXhlY3V0ZWQuIE91ciBfUEdfaW5pdCgpIG1ha2VzIHN1cmUgdGhh dCBwZ19wbGFuX2FkdmljZSdzIGhvb2tzIGFyZQorCSAqIGFsd2F5cyBsb2FkZWQgYmVmb3JlIG91 cnMsIGFuZCBoZXJlIHdlIHBhc3MgdGhlIGhvb2sgY2FsbCBkb3duIGZpcnN0LAorCSAqIGJlZm9y ZSBkb2luZyBvdXIgb3duIHdvcmsuIFRoZSBjb21iaW5hdGlvbiBvZiB0aG9zZSB0d28gdGhpbmdz IHNob3VsZAorCSAqIGJlIGdvb2QgZW5vdWdoIHRvIGVuc3VyZSB0aGF0IHRoZSBhZHZpY2Ugc3Ry aW5nIGlzIGFscmVhZHkgcHJlc2VudCB3aGVuCisJICogd2UgZ28gbG9va2luZyBmb3IgaXQuCisJ ICovCisJaWYgKHByZXZfcGxhbm5lcl9zaHV0ZG93bikKKwkJKCpwcmV2X3BsYW5uZXJfc2h1dGRv d24pIChnbG9iLCBwYXJzZSwgcXVlcnlfc3RyaW5nLCBwc3RtdCk7CisKKwkvKiBGaXNoIG91dCB0 aGUgYWR2aWNlIHN0cmluZy4gSWYgbm90IGZvdW5kLCBkbyBub3RoaW5nLiAqLworCXBncGFfaXRl bSA9IGZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJ CQkJCQkJInBnX3BsYW5fYWR2aWNlIik7CisJaWYgKHBncGFfaXRlbSA9PSBOVUxMKQorCQlyZXR1 cm47CisJYWR2aWNlX3N0cmluZ19pdGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoKExpc3Qg KikgcGdwYV9pdGVtLT5hcmcsCisJCQkJCQkJCQkJCQkgImFkdmljZV9zdHJpbmciKTsKKwlpZiAo YWR2aWNlX3N0cmluZ19pdGVtID09IE5VTEwpCisJCXJldHVybjsKKwlhZHZpY2Vfc3RyaW5nID0g c3RyVmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJnKTsKKworCS8qCisJICogUGFzcyBpdCB0aHJv dWdoIHRvIHRoZSBhY3R1YWwgY29sbGVjdG9yLiBCdXQsIGlmIGl0J3MgdGhlIGVtcHR5IHN0cmlu ZywKKwkgKiB3ZSBhc3N1bWUgdGhhdCBjb2xsZWN0aW5nIGl0IGlzIHVuaW50ZXJlc3RpbmcuCisJ ICovCisJaWYgKGFkdmljZV9zdHJpbmdbMF0gIT0gJ1wwJykKKwkJcGdfY29sbGVjdF9hZHZpY2Vf c2F2ZShwc3RtdC0+cXVlcnlJZCwgcXVlcnlfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nKTsKK30KKwor LyoKKyAqIHBnY2FfcGxhbm5lcl9zaHV0ZG93biB3b24ndCBmaW5kIGFueSBhZHZpY2UgdG8gY29s bGVjdCB1bmxlc3Mgd2UndmUKKyAqIHJlcXVlc3RlZCB0aGF0IGl0IGJlIGdlbmVyYXRlZC4gU28s IHdoZW5ldmVyIHRoZSBlZmZlY3RpdmUgdmFsdWUgb2YKKyAqIHBnX2NvbGxlY3RfYWR2aWNlLmxv Y2FsX2NvbGxlY3RvciBjaGFuZ2VzLCBlaXRoZXIgbWFrZSBvcgorICogcmV2b2tlIGEgcmVxdWVz dCBmb3IgYWR2aWNlIGdlbmVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitwZ19jb2xsZWN0X2Fk dmljZV9sb2NhbF9jb2xsZWN0b3JfYXNzaWduX2hvb2soYm9vbCBuZXd2YWwsIHZvaWQgKmV4dHJh KQoreworCWlmIChwZ19jb2xsZWN0X2FkdmljZV9sb2NhbF9jb2xsZWN0b3JfYXNfYXNzaWduZWQg JiYgIW5ld3ZhbCkKKwkJKCpyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAoZmFsc2UpOwor CWlmICghcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2FzX2Fzc2lnbmVkICYmIG5l d3ZhbCkKKwkJKCpyZXF1ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAodHJ1ZSk7CisJcGdfY29s bGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdG9yX2FzX2Fzc2lnbmVkID0gbmV3dmFsOworfQorCisv KgorICogU2FtZSBhcyBhYm92ZSwgYnV0IGZvciBwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29s bGVjdG9yCisgKi8KK3N0YXRpYyB2b2lkCitwZ19jb2xsZWN0X2FkdmljZV9zaGFyZWRfY29sbGVj dG9yX2Fzc2lnbl9ob29rKGJvb2wgbmV3dmFsLCB2b2lkICpleHRyYSkKK3sKKwlpZiAocGdfY29s bGVjdF9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rvcl9hc19hc3NpZ25lZCAmJiAhbmV3dmFsKQorCQko KnJlcXVlc3RfYWR2aWNlX2dlbmVyYXRpb25fZm4pIChmYWxzZSk7CisJaWYgKCFwZ19jb2xsZWN0 X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yX2FzX2Fzc2lnbmVkICYmIG5ld3ZhbCkKKwkJKCpyZXF1 ZXN0X2FkdmljZV9nZW5lcmF0aW9uX2ZuKSAodHJ1ZSk7CisJcGdfY29sbGVjdF9hZHZpY2Vfc2hh cmVkX2NvbGxlY3Rvcl9hc19hc3NpZ25lZCA9IG5ld3ZhbDsKK30KKworLyoKKyAqIFNlYXJjaCBh IGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRlZm5hbWUuCisgKi8KK3N0YXRp YyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExpc3QgKmRlZmxpc3QsIGNoYXIg KmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0ZW0sIGRlZmxpc3QpCisJewor CQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09IDApCisJCQlyZXR1cm4gaXRl bTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVj dF9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2aWNlL21lc29uLmJ1 aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xMDJkYzY1ZDI2MAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZpY2UvbWVzb24uYnVpbGQK QEAgLTAsMCArMSw0MSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjItMjAyNiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfY29sbGVjdF9hZHZpY2Vfc291cmNlcyA9IGZp bGVzKAorICAnY29sbGVjdG9yLmMnLAorICAnaW50ZXJmYWNlLmMnLAorKQorCitpZiBob3N0X3N5 c3RlbSA9PSAnd2luZG93cycKKyAgcGdfY29sbGVjdF9hZHZpY2Vfc291cmNlcyArPSByY19saWJf Z2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Bn X2NvbGxlY3RfYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19jb2xsZWN0X2FkdmljZSAt IGNvbGxlY3QgcXVlcmllcyBhbmQgdGhlaXIgcGxhbiBhZHZpY2Ugc3RyaW5ncycsXSkKK2VuZGlm CisKK3BnX2NvbGxlY3RfYWR2aWNlID0gc2hhcmVkX21vZHVsZSgncGdfY29sbGVjdF9hZHZpY2Un LAorICBwZ19jb2xsZWN0X2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBp bmNsdWRlX2RpcmVjdG9yaWVzKCcuJyksCisgIGt3YXJnczogY29udHJpYl9tb2RfYXJncywKKykK K2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19jb2xsZWN0X2FkdmljZQorCitpbnN0YWxsX2RhdGEoCisg ICdwZ19jb2xsZWN0X2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19jb2xsZWN0X2FkdmljZS5jb250 cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKwordGVzdHMgKz0geworICAn bmFtZSc6ICdwZ19jb2xsZWN0X2FkdmljZScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNl X2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6 IHsKKyAgICAnc3FsJzogWworICAgICAgJ2xvY2FsX2NvbGxlY3RvcicsCisgICAgXSwKKyAgfSwK KyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfc2hhcmVkX2NvbGxlY3Rv ci5wbCcsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfY29sbGVjdF9h ZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX2NvbGxlY3RfYWR2 aWNlL3BnX2NvbGxlY3RfYWR2aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4wYmU4NmM1NGZjMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf Y29sbGVjdF9hZHZpY2UvcGdfY29sbGVjdF9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw0MyBA QAorLyogY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS0tMS4wLnNx bCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIg dGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBn X2NvbGxlY3RfYWR2aWNlIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNU SU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAn TU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UnCitMQU5H VUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFy ZWRfYWR2aWNlKCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVh cl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUg RlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwK KwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAor CU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VU IGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFN RScsICdwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOwor CitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBp ZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBvaWQsCisJT1VUIGRiaWQgb2lkLAorCU9VVCBxdWVyeWlk IGJpZ2ludCwKKwlPVVQgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0 ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAorKQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RV TEVfUEFUSE5BTUUnLCAncGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0Ug QyBTVFJJQ1Q7CisKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVjdGVkX3No YXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfZ2V0 X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wgYi9jb250cmli L3BnX2NvbGxlY3RfYWR2aWNlL3BnX2NvbGxlY3RfYWR2aWNlLmNvbnRyb2wKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYwMWU1ZTI0ZWExCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5jb250cm9sCkBA IC0wLDAgKzEsNSBAQAorIyBwZ19jb2xsZWN0X2FkdmljZSBleHRlbnNpb24KK2NvbW1lbnQgPSAn Y29sbGVjdCBxdWVyaWVzIGFuZCB0aGUgYXNzb2NpYXRlZCBwbGFuIGFkdmljZScKK2RlZmF1bHRf dmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19jb2xsZWN0X2Fk dmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0 X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9w Z19jb2xsZWN0X2FkdmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li40ODBjMmM2MzNjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVjdF9hZHZp Y2UvcGdfY29sbGVjdF9hZHZpY2UuaApAQCAtMCwwICsxLDM5IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBwZ19jb2xsZWN0X2FkdmljZS5oCisgKgkgIGRlZmluaXRpb25zIGFuZCBkZWNs YXJhdGlvbnMgZm9yIHBnX2NvbGxlY3RfYWR2aWNlIG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAo YykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq CSAgY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS9wZ19jb2xsZWN0X2FkdmljZS5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfQ09MTEVDVF9BRFZJQ0VfSAorI2RlZmlu ZSBQR19DT0xMRUNUX0FEVklDRV9ICisKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2lu Y2x1ZGUgInV0aWxzL2RzYS5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ2NhX3NoYXJlZF9zdGF0ZQor eworCUxXTG9jawkJbG9jazsKKwlpbnQJCQlkc2FfdHJhbmNoZTsKKwlkc2FfaGFuZGxlCWFyZWE7 CisJZHNhX3BvaW50ZXIgc2hhcmVkX2NvbGxlY3RvcjsKK30gcGdjYV9zaGFyZWRfc3RhdGU7CisK Ky8qIEdVQyB2YXJpYWJsZXMgKi8KK2V4dGVybiBib29sIHBnX2NvbGxlY3RfYWR2aWNlX2xvY2Fs X2NvbGxlY3RvcjsKK2V4dGVybiBpbnQJcGdfY29sbGVjdF9hZHZpY2VfbG9jYWxfY29sbGVjdGlv bl9saW1pdDsKK2V4dGVybiBib29sIHBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0b3I7 CitleHRlcm4gaW50CXBnX2NvbGxlY3RfYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0Owor CisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCitleHRlcm4gTWVtb3J5Q29udGV4dCBwZ19jb2xs ZWN0X2FkdmljZV9nZXRfbWN4dCh2b2lkKTsKK2V4dGVybiBwZ2NhX3NoYXJlZF9zdGF0ZSAqcGdf Y29sbGVjdF9hZHZpY2VfYXR0YWNoKHZvaWQpOworZXh0ZXJuIGRzYV9hcmVhICpwZ19jb2xsZWN0 X2FkdmljZV9kc2FfYXJlYSh2b2lkKTsKK2V4dGVybiB2b2lkIHBnX2NvbGxlY3RfYWR2aWNlX3Nh dmUodWludDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJICAg Y29uc3QgY2hhciAqYWR2aWNlX3N0cmluZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCBiL2NvbnRyaWIvcGdf Y29sbGVjdF9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQxYjE4N2M1Mzc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19jb2xsZWN0X2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCwwICsx LDQ2IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX2NvbGxlY3RfYWR2aWNlOworU0VUIGRlYnVnX3Bh cmFsbGVsX3F1ZXJ5ID0gb2ZmOworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2 ZSBjb2xsZWN0ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKworLS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSds bCBleGNlZWQgaXQuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1p dCA9IDI7CisKKy0tIEVuYWJsZSB0aGUgY29sbGVjdG9yLgorU0VUIHBnX2NvbGxlY3RfYWR2aWNl LmxvY2FsX2NvbGxlY3RvciA9IG9uOworCistLSBTZXQgdXAgYSBkdW1teSB0YWJsZS4KK0NSRUFU RSBUQUJMRSBkdW1teV90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSwgcGFyYWxsZWxfd29ya2VycyA9IDApOworCistLSBU ZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7 CitTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlOworCistLSBTaG91bGQgcmV0dXJuIHRoZSBhZHZp Y2UgZnJvbSB0aGUgc2Vjb25kIHRlc3QgcXVlcnkuCitTRVQgcGdfY29sbGVjdF9hZHZpY2UubG9j YWxfY29sbGVjdG9yID0gb2ZmOworU0VMRUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRf bG9jYWxfYWR2aWNlKCkgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAxOworCistLSBOb3cgdHJ5IGNs ZWFyaW5nIGFkdmljZSBhZ2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlKCk7CisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgdGhlIGNvbGxl Y3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9j b2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKK1NFVCBwZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xs ZWN0b3IgPSBvbjsKKworLS0gUHVzaCBhIGJ1bmNoIG9mIHF1ZXJpZXMgdGhyb3VnaCB0aGUgY29s bGVjdG9yLgorRE8gJCQKK0JFR0lOCisJRk9SIHggSU4gMS4uMjAwMCBMT09QCisJCUVYRUNVVEUg J1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGUnOworCUVORCBMT09QOworRU5ECiskJDsKKworLS0g Q2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBn X2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIEFuZCBjbGVhciBvbmUgbW9yZSB0 aW1lLCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2UgYSBwcm9ibGVtCistLSBldmVu IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIGVudHJpZXMuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVj dGVkX2xvY2FsX2FkdmljZSgpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19jb2xsZWN0X2Fkdmlj ZS90LzAwMV9zaGFyZWRfY29sbGVjdG9yLnBsIGIvY29udHJpYi9wZ19jb2xsZWN0X2FkdmljZS90 LzAwMV9zaGFyZWRfY29sbGVjdG9yLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5iYmEwYzg4M2U1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfY29sbGVj dF9hZHZpY2UvdC8wMDFfc2hhcmVkX2NvbGxlY3Rvci5wbApAQCAtMCwwICsxLDE1NCBAQAorIyBD b3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKworIyBUZXN0IHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3Rvci4KK3VzZSBzdHJpY3Q7Cit1 c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMg SGVscGVyIGZ1bmN0aW9uLCB0byBhdm9pZCBkZXBlbmRpbmcgb24gZXhhY3QgbGluZS1icmVhayBi ZWhhdmlvci4KK3N1YiBzbWFzaF93aGl0ZXNwYWNlCit7CisJbXkgJHMgPSBzaGlmdDsKKwkkcyA9 fiBzL15ccysvLzsKKwkkcyA9fiBzL1xzKyQvLzsKKwkkcyA9fiBzL1xzKy8gL2c7CisJcmV0dXJu ICRzOworfQorCisjIFJldHJpZXZlIGFsbCBjb2xsZWN0ZWQgc2hhcmVkIGFkdmljZSBhcyBhbiBh cnJheSBvZiB3aGl0ZXNwYWNlLW5vcm1hbGl6ZWQKKyMgc3RyaW5ncywgb3JkZXJlZCBieSBpZC4K K3N1YiBnZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UKK3sKKwlteSAkcHNxbCA9IHNoaWZ0Owor CW15ICRvdXRwdXQgPSAkcHNxbC0+cXVlcnlfc2FmZSgKKwkJIlNFTEVDVCBzdHJpbmdfYWdnKGFk dmljZSwgJyFTRVBBUkFUT1IhJyBPUkRFUiBCWSBpZCkgIgorCQkuICJGUk9NIHBnX2dldF9jb2xs ZWN0ZWRfc2hhcmVkX2FkdmljZSgpIik7CisJcmV0dXJuICgpIGlmICRvdXRwdXQgZXEgJyc7CisJ cmV0dXJuIG1hcCB7IHNtYXNoX3doaXRlc3BhY2UoJF8pIH0gc3BsaXQoLyFTRVBBUkFUT1IhLywg JG91dHB1dCk7Cit9CisKKyMgSW5pdGlhbGl6ZSB0aGUgcHJpbWFyeSBub2RlCitteSAkbm9kZSA9 IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmluaXQoKTsK KworIyBMb2FkIHBnX2NvbGxlY3RfYWR2aWNlIGFuZCBjb25maWd1cmUgYSBzaGFyZWQgY29sbGVj dGlvbiBsaW1pdCBvZiA1LgorJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCA8 PEVPTSk7CitzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9cGdfY29sbGVjdF9hZHZpY2UKK3BnX2Nv bGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTUKK0VPTQorJG5vZGUtPnN0YXJ0 OworCisjIENyZWF0ZSB0aGUgZXh0ZW5zaW9uIHNvIHdlIGNhbiBhY2Nlc3MgdGhlIGNvbGxlY3Rv cgorbXkgJHRlc3RfZGIgPSAnY29sbGVjdGlvbl90ZXN0JzsKK215ICR0ZXN0X3JvbGUgPSAnY29s bGVjdGlvbl9yb2xlJzsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworQ1JF QVRFIERBVEFCQVNFICR0ZXN0X2RiOworQ1JFQVRFIFVTRVIgJHRlc3Rfcm9sZTsKK0FMVEVSIFJP TEUgJHRlc3Rfcm9sZSBTRVQgcGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxlY3RvciA9IG9u OworRU9NCiskbm9kZS0+c2FmZV9wc3FsKCR0ZXN0X2RiLCAnQ1JFQVRFIEVYVEVOU0lPTiBwZ19j b2xsZWN0X2FkdmljZScpOworCisjIFNldCB1cCB0d28gY29ubmVjdGlvbnMsIG9uZSB0byBjb250 cm9sIHRoZSB0ZXN0aW5nIHByb2Nlc3MsIGFuZCB0aGUgb3RoZXIKKyMgdG8gZXhlY3V0ZSB0aGUg cXVlcmllcyB1bmRlciB0ZXN0LgorbXkgJHBzcWxfY29udHJvbCA9ICRub2RlLT5iYWNrZ3JvdW5k X3BzcWwoJHRlc3RfZGIsIG9uX2Vycm9yX3N0b3AgPT4gMSk7CitteSAkcHNxbF90ZXN0ID0KKwkk bm9kZS0+YmFja2dyb3VuZF9wc3FsKCR0ZXN0X2RiLCBvbl9lcnJvcl9zdG9wID0+IDEsCisJCQkJ CQkgICBleHRyYV9wYXJhbXMgPT4gWyAnLS11c2VybmFtZScgPT4gJHRlc3Rfcm9sZSBdKTsKKwor IyBJbml0aWFsIHNldHVwLgorJHBzcWxfY29udHJvbC0+cXVlcnlfc2FmZSg8PEVPTSk7CitHUkFO VCBDUkVBVEUgT04gU0NIRU1BIHB1YmxpYyBUTyAkdGVzdF9yb2xlOworR1JBTlQgU0VUIE9OIFBB UkFNRVRFUiBwZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCBUTyAkdGVz dF9yb2xlOworU0VUIFJPTEUgJHRlc3Rfcm9sZTsKK0NSRUFURSBUQUJMRSBzYWNfZGltIChpZCBz ZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNhY19kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgc2FjX2RpbTsK KworQ1JFQVRFIFRBQkxFIHNhY19mYWN0ICgKKwlpZCBpbnQgcHJpbWFyeSBrZXksCisJZGltX2lk IGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBzYWNfZGltIChpZCkKKykgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2FjX2ZhY3QKK1NFTEVDVCBnLCAo ZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworQ1JFQVRFIElOREVYIHNh Y19mYWN0X2RpbV9pZCBPTiBzYWNfZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFMWVpFIHNhY19m YWN0OworUkVTRVQgUk9MRTsKK0VPTQorCisjIFJ1biBhIGZldyB0ZXN0IHF1ZXJpZXMuCiskcHNx bF90ZXN0LT5xdWVyeV9zYWZlKDw8J0VPTScpOworU0VMRUNUICogRlJPTSBzYWNfZmFjdCBXSEVS RSBpZCA9IDQyOworU0VMRUNUICogRlJPTSBzYWNfZGltIGQgSk9JTiBzYWNfZmFjdCBmIE9OIGQu aWQgPSBmLmRpbV9pZDsKK1NFTEVDVCAqIEZST00gc2FjX2RpbSBkCisgICAgV0hFUkUgZC5pZCBJ TiAoU0VMRUNUIGYuZGltX2lkIEZST00gc2FjX2ZhY3QgZik7CitFT00KKworIyBDaGVjayB0aGF0 IHdlIGdvdCB0aHJlZSBhZHZpY2UgY29sbGVjdGlvbnMsIGFuZCB0aGUgcmlnaHQgdmFsdWVzIGZv ciBlYWNoLgorbXkgQGFkdmljZSA9IGdldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgkcHNxbF9j b250cm9sKTsKK2lzKHNjYWxhciBAYWR2aWNlLCAzLCAidGhyZWUgYWR2aWNlIGVudHJpZXMgY29s bGVjdGVkIik7CitpcygkYWR2aWNlWzBdLCAnSU5ERVhfU0NBTihzYWNfZmFjdCBwdWJsaWMuc2Fj X2ZhY3RfcGtleSkgTk9fR0FUSEVSKHNhY19mYWN0KScsCisJImNvcnJlY3QgYWR2aWNlIGZvciBx dWVyeSAxIik7CitpcygkYWR2aWNlWzFdLCAnSk9JTl9PUkRFUihmIGQpIEhBU0hfSk9JTihkKSBT RVFfU0NBTihmIGQpIE5PX0dBVEhFUihkIGYpJywKKwkiY29ycmVjdCBhZHZpY2UgZm9yIHF1ZXJ5 IDIiKTsKK2lzKCRhZHZpY2VbMl0sICdKT0lOX09SREVSKGQgZikgTkVTVEVEX0xPT1BfUExBSU4o ZikgU0VRX1NDQU4oZCkgSU5ERVhfT05MWV9TQ0FOKGYgcHVibGljLnNhY19mYWN0X2RpbV9pZCkg U0VNSUpPSU5fTk9OX1VOSVFVRShmKSBOT19HQVRIRVIoZCBmKScsCisJImNvcnJlY3QgYWR2aWNl IGZvciBxdWVyeSAzIik7CisKKyMgUnVuIGEgZmV3IG1vcmUgdGVzdCBxdWVyaWVzLCBvdmVycnVu bmluZyB0aGUgbGltaXQuIChTRVQgYW5kIFBSRVBBUkUgZG9uJ3QKKyMgdHJpZ2dlciBwbGFubmlu ZywgYnV0IEVYRUNVVEUgZG9lcy4pCiskcHNxbF90ZXN0LT5xdWVyeV9zYWZlKDw8J0VPTScpOwor QkVHSU47CitTRVQgTE9DQUwgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQg TE9DQUwgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgTE9DQUwgcGFyYWxsZWxfdHVwbGVf Y29zdCA9IDA7CitTRUxFQ1QgY291bnQoKikgRlJPTSBzYWNfZmFjdDsKK0NPTU1JVDsKK0VYUExB SU4gU0VMRUNUICogRlJPTSBzYWNfZGltOworUFJFUEFSRSB0ZXN0X3N0bXQgQVMgU0VMRUNUICog RlJPTSBzYWNfZmFjdCBXSEVSRSBpZCA9ICQxOworRVhFQ1VURSB0ZXN0X3N0bXQoNDIpOworRU9N CisKKyMgQ2hlY2sgdGhhdCBhZHZpY2UgY29sbGVjdGlvbiB3YXMgdHJpbW1lZCB0byB0aGUgY29u ZmlndXJlZCBsaW1pdC4KK0BhZHZpY2UgPSBnZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoJHBz cWxfY29udHJvbCk7CitpcyhzY2FsYXIgQGFkdmljZSwgNSwgImFkdmljZSB0cmltbWVkIHRvIGNv bGxlY3Rpb24gbGltaXQiKTsKKworIyBDaGVjayB0aGUgYWR2aWNlIGZvciBxdWVyaWVzIDQsIDUs IGFuZCA2LgoraXMoJGFkdmljZVsyXSwgJ1NFUV9TQ0FOKHNhY19mYWN0KSBHQVRIRVIoc2FjX2Zh Y3QpJywKKwkiY29ycmVjdCBhZHZpY2UgZm9yIHF1ZXJ5IDQiKTsKK2lzKCRhZHZpY2VbM10sICdT RVFfU0NBTihzYWNfZGltKSBOT19HQVRIRVIoc2FjX2RpbSknLAorCSJjb3JyZWN0IGFkdmljZSBm b3IgcXVlcnkgNSIpOworaXMoJGFkdmljZVs0XSwKKwknSU5ERVhfU0NBTihzYWNfZmFjdCBwdWJs aWMuc2FjX2ZhY3RfcGtleSkgTk9fR0FUSEVSKHNhY19mYWN0KScsCisJImNvcnJlY3QgYWR2aWNl IGZvciBxdWVyeSA2Iik7CisKKyMgUmFpc2UgdGhlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3 ZSBjYW4gY29sbGVjdCBlbm91Z2ggYWR2aWNlIHRvIG5lZWQKKyMgbXVsdGlwbGUgY2h1bmtzLCBh bmQgdGhlbiByZXZlcnQgYmFjayB0byB0aGUgb2xkIHZhbHVlLCBzbyB0aGF0IHdlIHRyeQorIyB0 byBmcmVlIGFuIGVudGlyZSBjaHVuay4KKyRwc3FsX3Rlc3QtPnF1ZXJ5X3NhZmUoIlNFVCBwZ19j b2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA9IDE1MDAiKTsKKyRwc3FsX3Rl c3QtPnF1ZXJ5X3NhZmUoPDwnRU9NJyk7CitETyAkJAorQkVHSU4KKwlGT1IgaSBJTiAxLi4xNTAw IExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUIDEnOworCUVORCBMT09QOworRU5EICQkOworRU9NCitA YWR2aWNlID0gZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCRwc3FsX2NvbnRyb2wpOworaXMo c2NhbGFyIEBhZHZpY2UsIDE1MDAsICJpbmNyZWFzZWQgY29sbGVjdGlvbiBsaW1pdCByZWFjaGVk Iik7CiskcHNxbF90ZXN0LT5xdWVyeV9zYWZlKCJSRVNFVCBwZ19jb2xsZWN0X2FkdmljZS5zaGFy ZWRfY29sbGVjdGlvbl9saW1pdCIpOworJHBzcWxfdGVzdC0+cXVlcnlfc2FmZSgiU0VMRUNUICog RlJPTSBzYWNfZGltIik7CitAYWR2aWNlID0gZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCRw c3FsX2NvbnRyb2wpOworaXMoc2NhbGFyIEBhZHZpY2UsIDUsICJhZHZpY2UgdHJpbW1lZCBhY3Jv c3MgY2h1bmsgYm91bmRhcnkiKTsKKworIyBUcnkgY2xlYXJpbmcgYWxsIHRoZSBhZHZpY2UuCisk cHNxbF9jb250cm9sLT5xdWVyeV9zYWZlKCJTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX3NoYXJl ZF9hZHZpY2UoKSIpOworQGFkdmljZSA9IGdldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgkcHNx bF9jb250cm9sKTsKK2lzKHNjYWxhciBAYWR2aWNlLCAwLCAiYWxsIHNoYXJlZCBhZHZpY2UgY2xl YXJlZCIpOworCisjIENsZWFuIHVwLgorJHBzcWxfdGVzdC0+cXVpdDsKKyRwc3FsX2NvbnRyb2wt PnF1aXQ7Citkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmli LnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCmluZGV4IGJkZDQ4NjVmNTNmLi4yYWI2 ZmFmYmFiMSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvY29udHJpYi5zZ21sCkBAIC0xNTIsNiArMTUyLDcgQEAgQ1JFQVRFIEVYVEVOU0lP TiA8cmVwbGFjZWFibGU+ZXh0ZW5zaW9uX25hbWU8L3JlcGxhY2VhYmxlPjsKICAmcGFnZWluc3Bl Y3Q7CiAgJnBhc3N3b3JkY2hlY2s7CiAgJnBnYnVmZmVyY2FjaGU7CisgJnBnY29sbGVjdGFkdmlj ZTsKICAmcGdjcnlwdG87CiAgJnBnZnJlZXNwYWNlbWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0Owpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmls ZWxpc3Quc2dtbAppbmRleCBkOTBiNDMzOGQyYS4uNDA3ZmYzYWJmZmUgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21s CkBAIC0xNDUsNiArMTQ1LDcgQEAKIDwhRU5USVRZIHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBh Z2VpbnNwZWN0LnNnbWwiPgogPCFFTlRJVFkgcGFzc3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dv cmRjaGVjay5zZ21sIj4KIDwhRU5USVRZIHBnYnVmZmVyY2FjaGUgICBTWVNURU0gInBnYnVmZmVy Y2FjaGUuc2dtbCI+Cis8IUVOVElUWSBwZ2NvbGxlY3RhZHZpY2UgU1lTVEVNICJwZ2NvbGxlY3Rh ZHZpY2Uuc2dtbCI+CiA8IUVOVElUWSBwZ2NyeXB0byAgICAgICAgU1lTVEVNICJwZ2NyeXB0by5z Z21sIj4KIDwhRU5USVRZIHBnZnJlZXNwYWNlbWFwICBTWVNURU0gInBnZnJlZXNwYWNlbWFwLnNn bWwiPgogPCFFTlRJVFkgcGdsb2dpY2FsaW5zcGVjdCAgU1lTVEVNICJwZ2xvZ2ljYWxpbnNwZWN0 LnNnbWwiPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3BnY29sbGVjdGFkdmljZS5zZ21sIGIv ZG9jL3NyYy9zZ21sL3BnY29sbGVjdGFkdmljZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4yMjBhYWJlNzhjNgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9zcmMv c2dtbC9wZ2NvbGxlY3RhZHZpY2Uuc2dtbApAQCAtMCwwICsxLDI0NCBAQAorPCEtLSBkb2Mvc3Jj L3NnbWwvcGdjb2xsZWN0YWR2aWNlLnNnbWwgLS0+CisKKzxzZWN0MSBpZD0icGdjb2xsZWN0YWR2 aWNlIiB4cmVmbGFiZWw9InBnX2NvbGxlY3RfYWR2aWNlIj4KKyA8dGl0bGU+cGdfY29sbGVjdF9h ZHZpY2UgJm1kYXNoOyBjb2xsZWN0IHF1ZXJpZXMgYW5kIHRoZWlyIHBsYW4gYWR2aWNlIHN0cmlu Z3M8L3RpdGxlPgorCisgPGluZGV4dGVybSB6b25lPSJwZ2NvbGxlY3RhZHZpY2UiPgorICA8cHJp bWFyeT5wZ19jb2xsZWN0X2FkdmljZTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJh PgorICBUaGUgPGZpbGVuYW1lPnBnX2NvbGxlY3RfYWR2aWNlPC9maWxlbmFtZT4gZXh0ZW5zaW9u IGFsbG93cyB5b3UgdG8KKyAgYXV0b21hdGljYWxseSBnZW5lcmF0ZSBwbGFuIGFkdmljZSBlYWNo IHRpbWUgYSBxdWVyeSBpcyBwbGFubmVkIGFuZCBzdG9yZQorICB0aGUgcXVlcnkgYW5kIHRoZSBn ZW5lcmF0ZWQgYWR2aWNlIHN0cmluZyBlaXRoZXIgaW4gbG9jYWwgb3Igc2hhcmVkIG1lbW9yeS4K KyAgTm90ZSB0aGF0IHRoaXMgZXh0ZW5zaW9uIHJlcXVpcmVzIHRoZSA8eHJlZiBsaW5rZW5kPSJw Z3BsYW5hZHZpY2UiIC8+IG1vZHVsZSwKKyAgd2hpY2ggcGVyZm9ybXMgdGhlIGFjdHVhbCBwbGFu IGFkdmljZSBnZW5lcmF0aW9uOyB0aGlzIG1vZHVsZSBvbmx5IGtub3dzCisgIGhvdyB0byBzdG9y ZSB0aGUgZ2VuZXJhdGVkIGFkdmljZSBmb3IgbGF0ZXIgZXhhbWluYXRpb24uIFdoZW5ldmVyCisg IDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlPC9saXRlcmFsPiBpcyBsb2FkZWQsIGl0IHdpbGwg YXV0b21hdGljYWxseSBsb2FkCisgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPi4K KyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgSW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9kdWxlLCB5b3Ug d2lsbCBuZWVkIHRvIGV4ZWN1dGUKKyAgPGxpdGVyYWw+Q1JFQVRFIEVYVEVOU0lPTiBwZ19jb2xs ZWN0X2FkdmljZTwvbGl0ZXJhbD4gaW4gYXQgbGVhc3QKKyAgb25lIGRhdGFiYXNlLCBzbyB0aGF0 IHlvdSBoYXZlIGEgd2F5IHRvIGV4YW1pbmUgdGhlIGNvbGxlY3RlZCBhZHZpY2UuCisgIFlvdSB3 aWxsIGFsc28gbmVlZCB0aGUgPGxpdGVyYWw+cGdfY29sbGVjdF9hZHZpY2U8L2xpdGVyYWw+IG1v ZHVsZQorICB0byBiZSBsb2FkZWQgaW4gYWxsIHNlc3Npb25zIHdoZXJlIGFkdmljZSBpcyB0byBi ZSBjb2xsZWN0ZWQuIEl0IHdpbGwKKyAgdXN1YWxseSBiZSBiZXN0IHRvIGRvIHRoaXMgYnkgYWRk aW5nIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2aWNlPC9saXRlcmFsPgorICB0byA8eHJlZiBsaW5r ZW5kPSJndWMtc2hhcmVkLXByZWxvYWQtbGlicmFyaWVzIi8+IGFuZCByZXN0YXJ0aW5nIHRoZQor ICBzZXJ2ZXIuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIDxsaXRlcmFsPnBnX2NvbGxlY3RfYWR2 aWNlPC9saXRlcmFsPiBpbmNsdWRlcyBib3RoIGEgc2hhcmVkIGFkdmljZQorICBjb2xsZWN0b3Ig YW5kIGEgbG9jYWwgYWR2aWNlIGNvbGxlY3Rvci4gVGhlIGxvY2FsIGFkdmljZSBjb2xsZWN0b3Ig bWFrZXMKKyAgcXVlcmllcyBhbmQgdGhlaXIgYWR2aWNlIHN0cmluZ3MgdmlzaWJsZSBvbmx5IHRv IHRoZSBzZXNzaW9uIHdoZXJlIHRob3NlCisgIHF1ZXJpZXMgd2VyZSBwbGFubmVkLCB3aGlsZSB0 aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgY29sbGVjdHMgZGF0YQorICBvbiBhIHN5c3RlbS13 aWRlIGJhc2lzLCBhbmQgYXV0aG9yaXplZCB1c2VycyBjYW4gZXhhbWluZSBkYXRhIGZyb20gYWxs CisgIHNlc3Npb25zLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBUbyBlbmFibGUgYSBjb2xsZWN0 b3IsIHlvdSBtdXN0IGZpcnN0IHNldCBhIGNvbGxlY3Rpb24gbGltaXQuIFdoZW4gdGhlCisgIG51 bWJlciBvZiBxdWVyaWVzIGZvciB3aGljaCBhZHZpY2UgaGFzIGJlZW4gc3RvcmVkIGV4Y2VlZHMg dGhlIGNvbGxlY3Rpb24KKyAgbGltaXQsIHRoZSBvbGRlc3QgcXVlcmllcyBhbmQgdGhlIGNvcnJl c3BvbmRpbmcgYWR2aWNlIHdpbGwgYmUgZGlzY2FyZGVkLgorICBUaGVuLCB5b3UgbXVzdCBhZGp1 c3QgYSBzZXBhcmF0ZSBzZXR0aW5nIHRvIGFjdHVhbGx5IGVuYWJsZSBhZHZpY2UKKyAgY29sbGVj dGlvbi4gRm9yIHRoZSBsb2NhbCBjb2xsZWN0b3IsIHNldCB0aGUgY29sbGVjdGlvbiBsaW1pdCBi eSBjb25maWd1cmluZworICA8bGl0ZXJhbD5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0 aW9uX2xpbWl0PC9saXRlcmFsPiB0byBhIHZhbHVlCisgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQg dGhlbiBlbmFibGUgYWR2aWNlIGNvbGxlY3Rpb24gYnkgc2V0dGluZworICA8bGl0ZXJhbD5wZ19j b2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSB0cnVlPC9saXRlcmFsPi4gRm9yIHRoZSBz aGFyZWQKKyAgY29sbGVjdG9yLCB0aGUgcHJvY2VkdXJlIGlzIHRoZSBzYW1lLCBleGNlcHQgdGhh dCB0aGUgbmFtZXMgb2YgdGhlIHNldHRpbmdzCisgIGFyZSA8bGl0ZXJhbD5wZ19jb2xsZWN0X2Fk dmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwvbGl0ZXJhbD4gYW5kCisgIDxsaXRlcmFsPnBn X2NvbGxlY3RfYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3I8L2xpdGVyYWw+LiBOb3RlIHRoYXQgaW4g Ym90aAorICBjYXNlcywgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGFyZSBzdG9yZWQg aW4gbWVtb3J5LCBzbworICBjb25maWd1cmluZyBsYXJnZSBsaW1pdHMgbWF5IHJlc3VsdCBpbiBj b25zaWRlcmFibGUgbWVtb3J5IGNvbnN1bXB0aW9uLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBP bmNlIHRoZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCwgeW91IGNhbiBydW4gYW55IHF1ZXJpZXMgZm9y IHdoaWNoIHlvdSB3aXNoCisgIHRvIHNlZSB0aGUgZ2VuZXJhdGVkIHBsYW4gYWR2aWNlLiBUaGVu LCB5b3UgY2FuIGV4YW1pbmUgd2hhdCBoYXMgYmVlbgorICBjb2xsZWN0ZWQgdXNpbmcgd2hpY2hl dmVyIG9mCisgIDxsaXRlcmFsPlNFTEVDVCAqIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9h ZHZpY2UoKTwvbGl0ZXJhbD4gb3IKKyAgPGxpdGVyYWw+U0VMRUNUICogRlJPTSBwZ19nZXRfY29s bGVjdGVkX3NoYXJlZF9hZHZpY2UoKTwvbGl0ZXJhbD4KKyAgY29ycmVzcG9uZHMgdG8gdGhlIGNv bGxlY3RvciB5b3UgZW5hYmxlZC4gVG8gZGlzY2FyZCB0aGUgY29sbGVjdGVkIGFkdmljZQorICBh bmQgcmVsZWFzZSBtZW1vcnksIHlvdSBjYW4gY2FsbAorICA8bGl0ZXJhbD5wZ19jbGVhcl9jb2xs ZWN0ZWRfbG9jYWxfYWR2aWNlKCk8L2xpdGVyYWw+CisgIG9yIDxsaXRlcmFsPnBnX2NsZWFyX2Nv bGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk8L2xpdGVyYWw+LgorIDwvcGFyYT4KKworIDxwYXJhPgor ICBJbiBhZGRpdGlvbiB0byB0aGUgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzLCB0aGUg YWR2aWNlIGNvbGxlY3RvcnMKKyAgd2lsbCBhbHNvIHN0b3JlIHRoZSBPSUQgb2YgdGhlIHJvbGUg dGhhdCBjYXVzZWQgdGhlIHF1ZXJ5IHRvIGJlIHBsYW5uZWQsCisgIHRoZSBPSUQgb2YgdGhlIGRh dGFiYXNlIGluIHdoaWNoIHRoZSBxdWVyeSB3YXMgcGxhbm5lZCwgdGhlIHF1ZXJ5IElELAorICBh bmQgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGNvbGxlY3Rpb24gb2NjdXJyZWQuIFRoaXMgbW9kdWxl IGRvZXMgbm90CisgIGF1dG9tYXRpY2FsbHkgZW5hYmxlIHF1ZXJ5IElEIGNvbXB1dGF0aW9uOyB0 aGVyZWZvcmUsIGlmIHlvdSB3YW50IHRoZQorICBxdWVyeSBJRCB2YWx1ZSB0byBiZSBwb3B1bGF0 ZWQgaW4gY29sbGVjdGVkIGFkdmljZSwgYmUgc3VyZSB0byBjb25maWd1cmUKKyAgPGxpdGVyYWw+ Y29tcHV0ZV9xdWVyeV9pZCA9IG9uPC9saXRlcmFsPi4gT3RoZXJ3aXNlLCB0aGUgcXVlcnkgSUQg bWF5CisgIGFsd2F5cyBzaG93IGFzIDxsaXRlcmFsPjA8L2xpdGVyYWw+LgorIDwvcGFyYT4KKwor IDxzZWN0MiBpZD0icGdjb2xsZWN0YWR2aWNlLWZ1bmN0aW9ucyI+CisgIDx0aXRsZT5GdW5jdGlv bnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAg PHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkg cmV0dXJucyB2b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5 PnBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0 ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBS ZW1vdmVzIGFsbCBjb2xsZWN0ZWQgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZyb20g YmFja2VuZC1sb2NhbAorICAgICAgbWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgor ICAgICA8ZnVuY3Rpb24+cGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKSByZXR1cm5zIHNl dG9mIChpZCBiaWdpbnQsCisgICAgICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlkIGJp Z2ludCwgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVyeSB0ZXh0LCBh ZHZpY2UgdGV4dCk8L2Z1bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ cGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJt PgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZXR1 cm5zIGFsbCBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3Mgc3RvcmVkIGluIHRoZSBsb2Nh bAorICAgICAgYWR2aWNlIGNvbGxlY3Rvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+ CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAg ICAgPGZ1bmN0aW9uPnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgcmV0dXJucyB2 b2lkPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2NsZWFy X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmVtb3ZlcyBh bGwgY29sbGVjdGVkIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBmcm9tIHNoYXJlZAor ICAgICAgbWVtb3J5LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+ cGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgcmV0dXJucyBzZXRvZiAoaWQgYmlnaW50 LAorICAgICAgICB1c2VyaWQgb2lkLCBkYmlkIG9pZCwgcXVlcnlpZCBiaWdpbnQsIGNvbGxlY3Rp b25fdGltZSB0aW1lc3RhbXB0eiwKKyAgICAgICAgcXVlcnkgdGV4dCwgYWR2aWNlIHRleHQpPC9m dW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZTwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJt PgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgYWxsIHF1ZXJ5 IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBzdG9yZWQgaW4gdGhlIHNoYXJlZAorICAgICAgYWR2 aWNlIGNvbGxlY3Rvci4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxp c3RlbnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9 InBnY29sbGVjdGFkdmljZS1jb25maWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24g UGFyYW1ldGVyczwvdGl0bGU+CisKKyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29s bGVjdG9yPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+ CisgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0 b3I8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2lu ZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2UubG9jYWxfY29sbGVjdG9yPC92YXJuYW1lPiBl bmFibGVzIHRoZQorICAgICAgbG9jYWwgYWR2aWNlIGNvbGxlY3Rvci4gVGhlIGRlZmF1bHQgdmFs dWUgaXMgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PgorICAgICA8dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 PC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAg ICA8cHJpbWFyeT48dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xp bWl0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9p bmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAg ICAgIDx2YXJuYW1lPnBnX2NvbGxlY3RfYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQ8L3Zh cm5hbWU+IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQg YWR2aWNlIHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBsb2NhbCBhZHZpY2UgY29sbGVj dG9yLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVk X2NvbGxlY3RvcjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0 ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2Nv bGxlY3RvcjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAg IDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICA8dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC92YXJu YW1lPiBlbmFibGVzIHRoZQorICAgICAgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IuIFRoZSBkZWZh dWx0IHZhbHVlIGlzIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgIE9ubHkgc3VwZXJ1 c2VycyBhbmQgdXNlcnMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgPGxpdGVyYWw+U0VUPC9saXRlcmFs PgorICAgICAgcHJpdmlsZWdlIGNhbiBjaGFuZ2UgdGhpcyBzZXR0aW5nLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5 PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19jb2xsZWN0X2FkdmljZS5zaGFyZWRfY29s bGVjdGlvbl9saW1pdDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5k ZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVk X2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmlt YXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+Cisg ICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfY29sbGVjdF9hZHZpY2Uuc2hhcmVkX2NvbGxl Y3Rpb25fbGltaXQ8L3Zhcm5hbWU+IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBx dWVyeSB0ZXh0cyBhbmQgYWR2aWNlIHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBzaGFy ZWQgYWR2aWNlIGNvbGxlY3Rvci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+MDwvbGl0 ZXJhbD4uCisgICAgICBPbmx5IHN1cGVydXNlcnMgYW5kIHVzZXJzIHdpdGggdGhlIGFwcHJvcHJp YXRlIDxsaXRlcmFsPlNFVDwvbGl0ZXJhbD4KKyAgICAgIHByaXZpbGVnZSBjYW4gY2hhbmdlIHRo aXMgc2V0dGluZy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3Rl bnRyeT4KKworICA8L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBn Y29sbGVjdGFkdmljZS1hdXRob3IiPgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8cGFy YT4KKyAgIFJvYmVydCBIYWFzIDxlbWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+Cisg IDwvcGFyYT4KKyA8L3NlY3QyPgorCis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApp bmRleCAxMmY0YjhhN2JmOC4uNzM0OWMwNmEwNjcgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC00MDE5LDYgKzQwMTksMTIgQEAgcGdfdXVpZF90CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJs CiBwZ3BfYXJtb3JfaGVhZGVyc19zdGF0ZQorcGdjYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ2NhX2xv Y2FsX2FkdmljZQorcGdjYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3BnY2Ffc2hhcmVkX2FkdmljZQor cGdjYV9zaGFyZWRfYWR2aWNlX2NodW5rCitwZ2NhX3NoYXJlZF9zdGF0ZQogcGdwYV9hZHZpY2Vf aXRlbQogcGdwYV9hZHZpY2VfdGFnX3R5cGUKIHBncGFfYWR2aWNlX3RhcmdldAotLSAKMi41MS4w Cgo= --0000000000003fa51c064dcb9379 Content-Type: application/octet-stream; name="v22-0006-Add-pg_stash_advice-contrib-module.patch" Content-Disposition: attachment; filename="v22-0006-Add-pg_stash_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn52y4yu5 RnJvbSA4MjMwYzFiMDhkZWRiNTE5ZTY3ZDYyNmQ3NGNiYWI2MGYzMTRiZGM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjcgRmViIDIwMjYgMTY6NTg6MTQgLTA1MDAKU3ViamVjdDogW1BBVENIIHYyMiA2 LzZdIEFkZCBwZ19zdGFzaF9hZHZpY2UgY29udHJpYiBtb2R1bGUuCgpUaGlzIG1vZHVsZSBhbGxv d3MgcGxhbiBhZHZpY2Ugc3RyaW5ncyB0byBiZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5CmZyb20g YW4gaW4tbWVtb3J5IGFkdmljZSBzdGFzaC4gQWR2aWNlIHN0YXNoZXMgYXJlIHN0b3JlZCBpbiBk eW5hbWljCnNoYXJlZCBtZW1vcnkgYW5kIG11c3QgYmUgcmVjcmVhdGVkIGFuZCByZXBvcHVsYXRl ZCBhZnRlciBhIHNlcnZlcgpyZXN0YXJ0LiBJZiBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSBp cyBzZXQgdG8gdGhlIG5hbWUgb2YgYW4gYWR2aWNlCnN0YXNoLCBhbmQgaWYgcXVlcnkgaWRlbnRp ZmllcnMgYXJlIGVuYWJsZWQsIHRoZSBxdWVyeSBpZGVudGlmaWVyCmZvciBlYWNoIHF1ZXJ5IHdp bGwgYmUgbG9va2VkIHVwIGluIHRoZSBhZHZpY2Ugc3Rhc2ggYW5kIHRoZQphc3NvY2lhdGVkIGFk dmljZSBzdHJpbmcsIGlmIGFueSwgd2lsbCBiZSB1c2VkIGVhY2ggdGltZSB0aGF0IHF1ZXJ5Cmlz IHBsYW5uZWQuCi0tLQogY29udHJpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIGNvbnRyaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMSArCiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZSAgICAgICAgICAgICAg fCAgMjYgKwogLi4uL2V4cGVjdGVkL3BnX3N0YXNoX2FkdmljZS5vdXQgICAgICAgICAgICAgIHwg MzI4ICsrKysrKysKIGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkICAgICAgICAg ICB8ICAzNSArCiAuLi4vcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCAg fCAgNDMgKwogY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmMgICAgIHwg OTAwICsrKysrKysrKysrKysrKysrKwogLi4uL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZp Y2UuY29udHJvbCAgIHwgICA1ICsKIC4uLi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2Fk dmljZS5zcWwgICB8IDE0NyArKysKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbCAgICAgICAg ICAgICAgIHwgMjE4ICsrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAg ICAgICAgICAgfCAgIDYgKwogMTMgZmlsZXMgY2hhbmdlZCwgMTcxMiBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9h ZHZpY2Uub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvbWVz b24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19z dGFzaF9hZHZpY2UtLTEuMC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXNo X2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jb250cm9sCiBjcmVhdGUgbW9kZSAxMDA2NDQg Y29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5zcWwKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCgpkaWZmIC0tZ2l0IGEv Y29udHJpYi9NYWtlZmlsZSBiL2NvbnRyaWIvTWFrZWZpbGUKaW5kZXggMjIwNzEwMzRlNTEuLjA2 NjE1ZTEyM2YwIDEwMDY0NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFr ZWZpbGUKQEAgLTM3LDYgKzM3LDcgQEAgU1VCRElSUyA9IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAog CQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3ByZXdhcm0JXAorCQlwZ19zdGFzaF9hZHZpY2UJXAog CQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKIAkJcGdfdHJnbQkJXApkaWZm IC0tZ2l0IGEvY29udHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXgg ZmY0MjJkOWI3ZmMuLjQ4NjJiYTk3ZWQxIDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1aWxk CisrKyBiL2NvbnRyaWIvbWVzb24uYnVpbGQKQEAgLTUyLDYgKzUyLDcgQEAgc3ViZGlyKCdwZ19v dmVyZXhwbGFpbicpCiBzdWJkaXIoJ3BnX3BsYW5fYWR2aWNlJykKIHN1YmRpcigncGdfcHJld2Fy bScpCiBzdWJkaXIoJ3Bncm93bG9ja3MnKQorc3ViZGlyKCdwZ19zdGFzaF9hZHZpY2UnKQogc3Vi ZGlyKCdwZ19zdGF0X3N0YXRlbWVudHMnKQogc3ViZGlyKCdwZ3N0YXR0dXBsZScpCiBzdWJkaXIo J3BnX3N1cmdlcnknKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvTWFrZWZp bGUgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uY2Q5YjdmMzAxMTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3N0YXNoX2FkdmljZS9NYWtlZmlsZQpAQCAtMCwwICsxLDI2IEBACisjIGNvbnRyaWIv cGdfc3Rhc2hfYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBwZ19zdGFzaF9hZHZpY2UK K09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCXBnX3N0YXNoX2FkdmljZS5vCisKK0VYVEVOU0lP TiA9IHBnX3N0YXNoX2FkdmljZQorREFUQSA9IHBnX3N0YXNoX2FkdmljZS0tMS4wLnNxbAorUEdG SUxFREVTQyA9ICJwZ19zdGFzaF9hZHZpY2UgLSBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBs eSBwbGFuIGFkdmljZSIKKworUkVHUkVTUyA9IHBnX3N0YXNoX2FkdmljZQorRVhUUkFfSU5TVEFM TCA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NQUEZMQUdT ID0gLUkkKGluY2x1ZGVkaXJfc2VydmVyKS9leHRlbnNpb24KK1BHX0NPTkZJRyA9IHBnX2NvbmZp ZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykK K2Vsc2UKK1BHX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlCit0b3BfYnVpbGRkaXIgPSAuLi8u LgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAk KHRvcF9zcmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZpY2Uub3V0IGIv Y29udHJpYi9wZ19zdGFzaF9hZHZpY2UvZXhwZWN0ZWQvcGdfc3Rhc2hfYWR2aWNlLm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDFlOTM1NzlkOGEKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9leHBlY3RlZC9wZ19zdGFzaF9hZHZp Y2Uub3V0CkBAIC0wLDAgKzEsMzI4IEBACitDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXNoX2Fkdmlj ZTsKK1NFVCBjb21wdXRlX3F1ZXJ5X2lkID0gb247CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDA7CistLSBIZWxwZXI6IGV4dHJhY3QgcXVlcnkgaWRlbnRpZmllciBmcm9t IEVYUExBSU4gVkVSQk9TRSBvdXRwdXQuCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBnZXRf cXVlcnlfaWQocXVlcnlfdGV4dCB0ZXh0KSBSRVRVUk5TIGJpZ2ludAorTEFOR1VBR0UgcGxwZ3Nx bCBBUyAkJAorREVDTEFSRQorICAgIGxpbmUgdGV4dDsKKyAgICBxaWQgYmlnaW50OworQkVHSU4K KyAgICBGT1IgbGluZSBJTiBFWEVDVVRFICdFWFBMQUlOIChWRVJCT1NFLCBGT1JNQVQgVEVYVCkg JyB8fCBxdWVyeV90ZXh0CisgICAgTE9PUAorICAgICAgICBJRiBsaW5lIH4gJ1F1ZXJ5IElkZW50 aWZpZXI6JyBUSEVOCisgICAgICAgICAgICBxaWQgOj0gcmVnZXhwX3JlcGxhY2UobGluZSwgJy4q UXVlcnkgSWRlbnRpZmllcjpccyooLT9cZCspLionLCAnXDEnKTo6YmlnaW50OworICAgICAgICAg ICAgUkVUVVJOIHFpZDsKKyAgICAgICAgRU5EIElGOworICAgIEVORCBMT09QOworICAgIFJBSVNF IEVYQ0VQVElPTiAnUXVlcnkgSWRlbnRpZmllciBub3QgZm91bmQgaW4gRVhQTEFJTiBvdXRwdXQn OworRU5EOworJCQ7CitDUkVBVEUgVEFCTEUgYWFfZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBhYV9kaW0xIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3Nv bWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9kaW0xOworQ1JFQVRFIFRBQkxFIGFhX2Rp bTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZGltMiAoaWQsIGRp bTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSAr IDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGFh X2RpbTI7CitDUkVBVEUgVEFCTEUgYWFfZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRp bTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGFhX2RpbTEgKGlkKSwKKwlkaW0yX2lk IGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBhYV9kaW0yIChpZCkKKykgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gYWFfZmFjdAorCVNFTEVDVCBnLCAo ZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIGFhX2ZhY3Q7CistLSBHZXQgdGhlIHF1ZXJ5IGlkZW50aWZpZXIuCitTRUxF Q1QgZ2V0X3F1ZXJ5X2lkKCQkCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4gYWFf ZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYu ZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworJCQpIEFTIHFp ZCBcZ3NldAorLS0gQ3JlYXRlIGFuIGFkdmljZSBzdGFzaCBhbmQgcG9pbnQgcGdfc3Rhc2hfYWR2 aWNlIGF0IGl0LgorU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gn KTsKKyBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg CisoMSByb3cpCisKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0 YXNoJzsKKy0tIFJ1biBvdXIgdGVzdCBxdWVyeSBmb3IgdGhlIGZpcnN0IHRpbWUgd2l0aCBubyBz dGFzaGVkIGFkdmljZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYWFfZmFj dCBmIExFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lO IGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFs MiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFz aCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBI YXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBh YV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTEgZDEKKyAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorKDExIHJvd3MpCisKKy0tIEZvcmNlIGFuIGluZGV4 IHNjYW4gb24gZGltMQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFz aCcsIDoncWlkJywKKwknSU5ERVhfU0NBTihkMSBhYV9kaW0xX3BrZXkpJyk7CisgcGdfc2V0X3N0 YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2gg Sm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gYWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWFf ZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihkMSBhYV9kaW0xX3BrZXkp IC8qIG1hdGNoZWQgKi8KKygxMyByb3dzKQorCistLSBGb3JjZSBhbiBhbHRlcm5hdGl2ZSBqb2lu IG9yZGVyCitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidx aWQnLAorCSdqb2luX29yZGVyKGYgZDEgZDIpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZG KSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGlt MV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQK KwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAt PiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9mYWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQxIGQyKSAvKiBtYXRjaGVkICovCiso MTMgcm93cykKKworLS0gRm9yY2UgYW4gYWx0ZXJuYXRpdmUgam9pbiBzdHJhdGVneQorU0VMRUNU IHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDoncWlkJywKKwknTkVTVEVE X0xPT1BfUExBSU4oZDEpJyk7CisgcGdfc2V0X3N0YXNoZWRfYWR2aWNlIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBG Uk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNo IENvbmQ6IChmLmRpbTJfaWQgPSBkMi5pZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9m YWN0IGYKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g YWFfZGltMiBkMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBhYV9kaW0xX3BrZXkgb24gYWFfZGltMSBkMQorICAgICAgICAg SW5kZXggQ29uZDogKGlkID0gZi5kaW0xX2lkKQorICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihkMSkgLyogbWF0 Y2hlZCAqLworKDEyIHJvd3MpCisKKy0tIEFkZCBhIHVzZWxlc3MgZXh0cmEgZW50cnkgdG8gb3Vy IHRlc3Qgc3Rhc2guIFNob3VsZG4ndCBjaGFuZ2UgdGhlIHJlc3VsdAorLS0gZnJvbSB0aGUgcHJl dmlvdXMgdGVzdC4KKy0tIChJZiB3ZSdyZSB1bmx1Y2t5IGVub3VnaCB0aGF0IHRoaXMgZXZlciBm YWlscyBkdWUgdG8gcXVlcnkgSUQgYWN0dWFsbHkKKy0tIGJlaW5nIDEsIHRoZW4ganVzdCBwdXQg c29tZSBvdGhlciBjb25zdGFudCBoZXJlLiBTZWVtcyB1bmxpa2VseS4pCitTRUxFQ1QgcGdfc2V0 X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgMSwgJ1NFUV9TQ0FOKGQxKScpOworIHBn X3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cp CisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpP SU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQy IE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIu aWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgYWFf ZGltMV9wa2V5IG9uIGFhX2RpbTEgZDEKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGlt MV9pZCkKKyAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgTkVTVEVEX0xPT1BfUExBSU4oZDEpIC8qIG1hdGNoZWQgKi8KKygxMiByb3dzKQorCist LSBUcnkgYW4gZW1wdHkgc3Rhc2ggdG8gYmUgc3VyZSBpdCBkb2VzIG5vdGhpbmcKK1NFTEVDVCBw Z19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CisgcGdfY3JlYXRl X2FkdmljZV9zdGFzaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitT RVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19lbXB0eV9zdGFzaCc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFh X2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBm LmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbTFf aWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGlt Ml9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGFhX2ZhY3QgZgorICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0yIGQyCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gYWFfZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMSA9IDEpCisoMTEgcm93cykKKworLS0gVGVzdCB0aGF0IHdlIGNhbiBsaXN0IGVhY2ggc3Rh c2ggaW5kaXZpZHVhbGx5IGFuZCBhbGwgb2YgdGhlbSB0b2dldGhlciwKKy0tIGJ1dCBub3QgYSBu b25leGlzdGVudCBzdGFzaC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkg T1JERVIgQlkgc3Rhc2hfbmFtZTsKKyAgICAgc3Rhc2hfbmFtZSAgICAgIHwgbnVtX2VudHJpZXMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIHJlZ3Jlc3NfZW1wdHlfc3Rh c2ggfCAgICAgICAgICAgMAorIHJlZ3Jlc3Nfc3Rhc2ggICAgICAgfCAgICAgICAgICAgMgorKDIg cm93cykKKworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dldF9h ZHZpY2Vfc3Rhc2hfY29udGVudHMoJ3JlZ3Jlc3Nfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsK KyAgc3Rhc2hfbmFtZSAgIHwgICAgIGFkdmljZV9zdHJpbmcgICAgIAorLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FOKGQxKQor IHJlZ3Jlc3Nfc3Rhc2ggfCBORVNURURfTE9PUF9QTEFJTihkMSkKKygyIHJvd3MpCisKK1NFTEVD VCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9j b250ZW50cygncmVncmVzc19lbXB0eV9zdGFzaCcpIE9SREVSIEJZIHF1ZXJ5X2lkOworIHN0YXNo X25hbWUgfCBhZHZpY2Vfc3RyaW5nIAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorKDAg cm93cykKKworU0VMRUNUIHN0YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRf YWR2aWNlX3N0YXNoX2NvbnRlbnRzKE5VTEwpIE9SREVSIEJZIHF1ZXJ5X2lkOworICBzdGFzaF9u YW1lICAgfCAgICAgYWR2aWNlX3N0cmluZyAgICAgCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyByZWdyZXNzX3N0YXNoIHwgU0VRX1NDQU4oZDEpCisgcmVncmVzc19z dGFzaCB8IE5FU1RFRF9MT09QX1BMQUlOKGQxKQorKDIgcm93cykKKworU0VMRUNUIHN0YXNoX25h bWUsIGFkdmljZV9zdHJpbmcKKwkgRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdu b19zdWNoX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitFUlJPUjogIGFkdmljZSBzdGFzaCAi bm9fc3VjaF9zdGFzaCIgZG9lcyBub3QgZXhpc3QKKy0tIFRlc3QgdGhhdCB3ZSBjYW4gcmVtb3Zl IGFkdmljZS4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCA6 J3FpZCcsIG51bGwpOworIHBnX3NldF9zdGFzaGVkX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgCisoMSByb3cpCisKK1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdy ZWdyZXNzX3N0YXNoJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0 IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9J TiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZh bDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhh c2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg SGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g YWFfZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGFhX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQor ICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhYV9kaW0xIGQxCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKygxMSByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBn X2dldF9hZHZpY2Vfc3Rhc2hlcygpIE9SREVSIEJZIHN0YXNoX25hbWU7CisgICAgIHN0YXNoX25h bWUgICAgICB8IG51bV9lbnRyaWVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0KKyByZWdyZXNzX2VtcHR5X3N0YXNoIHwgICAgICAgICAgIDAKKyByZWdyZXNzX3N0YXNoICAg ICAgIHwgICAgICAgICAgIDEKKygyIHJvd3MpCisKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vf c3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKCdyZWdyZXNzX3N0YXNo JykgT1JERVIgQlkgcXVlcnlfaWQ7CisgIHN0YXNoX25hbWUgICB8IGFkdmljZV9zdHJpbmcgCist LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgcmVncmVzc19zdGFzaCB8IFNFUV9TQ0FO KGQxKQorKDEgcm93KQorCistLSBDYW4ndCBjcmVhdGUgYSBzdGFzaCB0aGF0IGFscmVhZHkgZXhp c3RzLCBvciBkcm9wIG9uZSB0aGF0IGRvZXNuJ3QuCitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9z dGFzaCgncmVncmVzc19zdGFzaCcpOworRVJST1I6ICBhZHZpY2Ugc3Rhc2ggInJlZ3Jlc3Nfc3Rh c2giIGFscmVhZHkgZXhpc3RzCitTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ25vX3N1Y2hf c3Rhc2gnKTsKK0VSUk9SOiAgYWR2aWNlIHN0YXNoICJub19zdWNoX3N0YXNoIiBkb2VzIG5vdCBl eGlzdAorLS0gQ2FuJ3QgYWRkIHRvIG9yIHJlbW92ZSBmcm9tIGEgc3Rhc2ggdGhhdCBkb2VzIG5v dCBleGlzdC4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ25vX3N1Y2hfc3Rhc2gnLCAx LCAnU0VRX1NDQU4odCknKTsKK0VSUk9SOiAgYWR2aWNlIHN0YXNoICJub19zdWNoX3N0YXNoIiBk b2VzIG5vdCBleGlzdAorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgnbm9fc3VjaF9zdGFz aCcsIDEsIG51bGwpOworRVJST1I6ICBhZHZpY2Ugc3Rhc2ggIm5vX3N1Y2hfc3Rhc2giIGRvZXMg bm90IGV4aXN0CistLSBDYW4ndCB1c2UgcXVlcnkgSUQgMC4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hl ZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCAwLCAnU0VRX1NDQU4odCknKTsKK0VSUk9SOiAgY2Fu bm90IHNldCBhZHZpY2Ugc3RyaW5nIGZvciBxdWVyeSBJRCAwCistLSBTdGFzaCBuYW1lcyBtdXN0 IGJlIG5vbi1lbXB0eSwgQVNDSUksIGFuZCBub3QgdG9vIGxvbmcuCitTRUxFQ1QgcGdfY3JlYXRl X2FkdmljZV9zdGFzaCgnJyk7CitFUlJPUjogIGFkdmljZSBzdGFzaCBuYW1lIG1heSBub3QgYmUg emVybyBsZW5ndGgKK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdhYWFhYWFhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyk7CitF UlJPUjogIGFkdmljZSBzdGFzaCBuYW1lcyBtYXkgbm90IGJlIGxvbmdlciB0aGFuIDYzIGJ5dGVz CitTRUxFQ1QgcGdfY3JlYXRlX2FkdmljZV9zdGFzaChFJ2NhZlx1MDBlOScpOworRVJST1I6ICBh ZHZpY2Ugc3Rhc2ggbmFtZSBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCitT RVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAnY2Fmw6knOworRVJST1I6ICBpbnZhbGlk IHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lIjogImNhZsOp IgorREVUQUlMOiAgYWR2aWNlIHN0YXNoIG5hbWUgbXVzdCBub3QgY29udGFpbiBub24tQVNDSUkg Y2hhcmFjdGVycworLS0gQ2xlYW4gdXAgc3RhdGUgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5Lgor U0VMRUNUIHBnX2Ryb3BfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX3N0YXNoJyk7CisgcGdfZHJvcF9h ZHZpY2Vfc3Rhc2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKK1NFTEVD VCBwZ19kcm9wX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0eV9zdGFzaCcpOworIHBnX2Ryb3Bf YWR2aWNlX3N0YXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9tZXNvbi5idWlsZCBiL2NvbnRyaWIvcGdf c3Rhc2hfYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5iNjY2YmNkMGYxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hf YWR2aWNlL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIy LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX3N0YXNoX2Fk dmljZV9zb3VyY2VzID0gZmlsZXMoCisgICdwZ19zdGFzaF9hZHZpY2UuYycKKykKKworaWYgaG9z dF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3N0YXNoX2FkdmljZV9zb3VyY2VzICs9IHJjX2xp Yl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUnLCAn cGdfc3Rhc2hfYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19zdGFzaF9hZHZpY2UgLSBz dG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZScsXSkKK2VuZGlmCisKK3Bn X3N0YXNoX2FkdmljZSA9IHNoYXJlZF9tb2R1bGUoJ3BnX3N0YXNoX2FkdmljZScsCisgIHBnX3N0 YXNoX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbcGdfcGxhbl9hZHZp Y2VfaW5jLCBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJyldLAorICBrd2FyZ3M6IGNvbnRyaWJfbW9k X2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gcGdfc3Rhc2hfYWR2aWNlCisKK2luc3RhbGxf ZGF0YSgKKyAgJ3BnX3N0YXNoX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19zdGFzaF9hZHZpY2Uu Y29udHJvbCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisKK3Rlc3RzICs9IHsK KyAgJ25hbWUnOiAncGdfc3Rhc2hfYWR2aWNlJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3Vy Y2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdyZXNz JzogeworICAgICdzcWwnOiBbCisgICAgICAncGdfc3Rhc2hfYWR2aWNlJywKKyAgICBdLAorICB9 LAorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNl LS0xLjAuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLS0xLjAu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44OGRlZGQ4ZWYxYgot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2Fkdmlj ZS0tMS4wLnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL3BnX3N0YXNoX2FkdmljZS9w Z19zdGFzaF9hZHZpY2UtLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNv dXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04KK1xlY2hvIFVz ZSAiQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGFzaF9hZHZpY2UiIHRvIGxvYWQgdGhpcyBmaWxlLiBc cXVpdAorCitDUkVBVEUgRlVOQ1RJT04gcGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9uYW1l IHRleHQpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfY3JlYXRlX2Fk dmljZV9zdGFzaCcKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZHJv cF9hZHZpY2Vfc3Rhc2goc3Rhc2hfbmFtZSB0ZXh0KQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3BnX2Ryb3BfYWR2aWNlX3N0YXNoJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisK K0NSRUFURSBGVU5DVElPTiBwZ19zZXRfc3Rhc2hlZF9hZHZpY2Uoc3Rhc2hfbmFtZSB0ZXh0LCBx dWVyeV9pZCBiaWdpbnQsCisJCQkJCQkJCQkgIGFkdmljZV9zdHJpbmcgdGV4dCkKK1JFVFVSTlMg dm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19zZXRfc3Rhc2hlZF9hZHZpY2UnCitMQU5H VUFHRSBDOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKAorCU9VVCBz dGFzaF9uYW1lIHRleHQsCisJT1VUIG51bV9lbnRyaWVzIGJpZ2ludAorKQorUkVUVVJOUyBTRVRP RiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2FkdmljZV9zdGFzaGVzJwor TEFOR1VBR0UgQyBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBwZ19nZXRfYWR2aWNlX3N0YXNo X2NvbnRlbnRzKAorCUlOT1VUIHN0YXNoX25hbWUgdGV4dCwKKwlPVVQgcXVlcnlfaWQgYmlnaW50 LAorCU9VVCBhZHZpY2Vfc3RyaW5nIHRleHQKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAn TU9EVUxFX1BBVEhOQU1FJywgJ3BnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMnCitMQU5HVUFH RSBDOworCitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2godGV4 dCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIHBnX2Ryb3BfYWR2aWNlX3N0 YXNoKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5DVElPTiBwZ19nZXRfYWR2 aWNlX3N0YXNoX2NvbnRlbnRzKHRleHQpIEZST00gUFVCTElDOworUkVWT0tFIEFMTCBPTiBGVU5D VElPTiBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04g RlVOQ1RJT04gcGdfc2V0X3N0YXNoZWRfYWR2aWNlKHRleHQsIGJpZ2ludCwgdGV4dCkgRlJPTSBQ VUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZp Y2UuYyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMjEyMjIzNjY5NAotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfc3Rhc2hfYWR2aWNlL3BnX3N0YXNoX2FkdmljZS5jCkBAIC0wLDAg KzEsOTAwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19zdGFzaF9hZHZpY2UuYwor ICoJICBBcHBseSBwbGFuIGFkdmljZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IFNRTCBtb2RpZmlj YXRpb25zLgorICoKKyAqIFRoaXMgbW9kdWxlIGFsbG93cyBwbGFuIGFkdmljZSBzdHJpbmdzIChh cyB1c2VkIGFuZCBnZW5lcmF0ZWQgYnkKKyAqIHBnX3BsYW5fYWR2aWNlKSB0byBiZSAic3Rhc2hl ZCIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IGFuZCwgZnJvbQorICogdGhlcmUsIGF1dG9tYXRp Y2FsbHkgYmUgYXBwbGllZCB0byBxdWVyaWVzIGFzIHRoZXkgYXJlIHBsYW5uZWQuCisgKiBZb3Ug Y2FuIGNyZWF0ZSBhbnkgbnVtYmVyIG9mIGFkdmljZSBzdGFzaGVzLCBlYWNoIG9mIHdoaWNoIGlz CisgKiBpZGVudGlmaWVkIGJ5IGEgaHVtYW4tcmVhZGFibGUsIEFTQ0lJIG5hbWUsIGFuZCBlYWNo IG9mIHRoZW0gaXMKKyAqIGVzc2VudGlhbGx5IGEgcXVlcnkgSUQgLT4gYWR2aWNlX3N0cmluZyBt YXBwaW5nLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI2LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdf c3Rhc2hfYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCisjaW5jbHVkZSAiY29tbW9u L3N0cmluZy5oIgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5j bHVkZSAibGliL2RzaGFzaC5oIgorI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisjaW5j bHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5o IgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMu aCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgor I2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19G VU5DVElPTl9JTkZPX1YxKHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2gpOworUEdfRlVOQ1RJT05fSU5G T19WMShwZ19kcm9wX2FkdmljZV9zdGFzaCk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9h ZHZpY2Vfc3Rhc2hfY29udGVudHMpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19nZXRfYWR2aWNl X3N0YXNoZXMpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zZXRfc3Rhc2hlZF9hZHZpY2UpOwor Cit0eXBlZGVmIHN0cnVjdCBwZ3NhX3NoYXJlZF9zdGF0ZQoreworCUxXTG9jawkJbG9jazsKKwlp bnQJCQlkc2FfdHJhbmNoZTsKKwlpbnQJCQlzdGFzaF90cmFuY2hlOworCWludAkJCWVudHJ5X3Ry YW5jaGU7CisJdWludDY0CQluZXh0X3N0YXNoX2lkOworCWRzYV9oYW5kbGUJYXJlYTsKKwlkc2hh c2hfdGFibGVfaGFuZGxlIHN0YXNoX2hhc2g7CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBlbnRyeV9o YXNoOworfSBwZ3NhX3NoYXJlZF9zdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaAor eworCWNoYXIJCW5hbWVbTkFNRURBVEFMRU5dOworCXVpbnQ2NAkJcGdzYV9zdGFzaF9pZDsKK30g cGdzYV9zdGFzaDsKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9lbnRyeV9rZXkKK3sKKwl1aW50NjQJ CXBnc2Ffc3Rhc2hfaWQ7CisJaW50NjQJCXF1ZXJ5SWQ7Cit9IHBnc2FfZW50cnlfa2V5OworCit0 eXBlZGVmIHN0cnVjdCBwZ3NhX2VudHJ5Cit7CisJcGdzYV9lbnRyeV9rZXkga2V5OworCWRzYV9w b2ludGVyIGFkdmljZV9zdHJpbmc7Cit9IHBnc2FfZW50cnk7CisKK3R5cGVkZWYgc3RydWN0IHBn c2Ffc3Rhc2hfY291bnQKK3sKKwl1aW50MzIJCXN0YXR1czsKKwl1aW50NjQJCXBnc2Ffc3Rhc2hf aWQ7CisJaW50NjQJCW51bV9lbnRyaWVzOworfSBwZ3NhX3N0YXNoX2NvdW50OworCisjZGVmaW5l IFNIX1BSRUZJWCBwZ3NhX3N0YXNoX2NvdW50X3RhYmxlCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQ RSBwZ3NhX3N0YXNoX2NvdW50CisjZGVmaW5lIFNIX0tFWV9UWVBFIHVpbnQ2NAorI2RlZmluZSBT SF9LRVkgcGdzYV9zdGFzaF9pZAorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KSBoYXNoX2J5 dGVzKChjb25zdCB1bnNpZ25lZCBjaGFyICopICYoa2V5KSwgc2l6ZW9mKHVpbnQ2NCkpCisjZGVm aW5lIFNIX0VRVUFMKHRiLCBhLCBiKSAoYSA9PSBiKQorI2RlZmluZSBTSF9TQ09QRSBzdGF0aWMg aW5saW5lCisjZGVmaW5lIFNIX0RFRklORQorI2RlZmluZSBTSF9ERUNMQVJFCisjaW5jbHVkZSAi bGliL3NpbXBsZWhhc2guaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdzYV9zdGFzaF9uYW1lCit7CisJ dWludDMyCQlzdGF0dXM7CisJdWludDY0CQlwZ3NhX3N0YXNoX2lkOworCWNoYXIJICAgKm5hbWU7 Cit9IHBnc2Ffc3Rhc2hfbmFtZTsKKworI2RlZmluZSBTSF9QUkVGSVggcGdzYV9zdGFzaF9uYW1l X3RhYmxlCisjZGVmaW5lIFNIX0VMRU1FTlRfVFlQRSBwZ3NhX3N0YXNoX25hbWUKKyNkZWZpbmUg U0hfS0VZX1RZUEUgdWludDY0CisjZGVmaW5lIFNIX0tFWSBwZ3NhX3N0YXNoX2lkCisjZGVmaW5l IFNIX0hBU0hfS0VZKHRiLCBrZXkpIGhhc2hfYnl0ZXMoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg JihrZXkpLCBzaXplb2YodWludDY0KSkKKyNkZWZpbmUgU0hfRVFVQUwodGIsIGEsIGIpIChhID09 IGIpCisjZGVmaW5lIFNIX1NDT1BFIHN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVGSU5FCisj ZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCisvKiBTaGFy ZWQgbWVtb3J5IHBvaW50ZXJzICovCitzdGF0aWMgcGdzYV9zaGFyZWRfc3RhdGUgKnBnc2Ffc3Rh dGU7CitzdGF0aWMgZHNhX2FyZWEgKnBnc2FfZHNhX2FyZWE7CitzdGF0aWMgZHNoYXNoX3RhYmxl ICpwZ3NhX3N0YXNoX2RzaGFzaDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKnBnc2FfZW50cnlfZHNo YXNoOworCisvKiBTaGFyZWQgbWVtb3J5IGhhc2ggdGFibGUgcGFyYW1ldGVycyAqLworc3RhdGlj IGRzaGFzaF9wYXJhbWV0ZXJzIHBnc2Ffc3Rhc2hfZHNoYXNoX3BhcmFtZXRlcnMgPSB7CisJTkFN RURBVEFMRU4sCisJc2l6ZW9mKHBnc2Ffc3Rhc2gpLAorCWRzaGFzaF9zdHJjbXAsCisJZHNoYXNo X3N0cmhhc2gsCisJZHNoYXNoX3N0cmNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8qIGdldHMg c2V0IGF0IHJ1bnRpbWUgKi8KK307CisKK3N0YXRpYyBkc2hhc2hfcGFyYW1ldGVycyBwZ3NhX2Vu dHJ5X2RzaGFzaF9wYXJhbWV0ZXJzID0geworCXNpemVvZihwZ3NhX2VudHJ5X2tleSksCisJc2l6 ZW9mKHBnc2FfZW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJZHNoYXNoX21lbWhhc2gsCisJZHNo YXNoX21lbWNweSwKKwlMV1RSQU5DSEVfSU5WQUxJRAkJCS8qIGdldHMgc2V0IGF0IHJ1bnRpbWUg Ki8KK307CisKKy8qIEdVQyB2YXJpYWJsZSAqLworc3RhdGljIGNoYXIgKnBnX3N0YXNoX2Fkdmlj ZV9zdGFzaF9uYW1lID0gIiI7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJsZXMgKi8KK3N0YXRp YyBNZW1vcnlDb250ZXh0IHBnX3N0YXNoX2FkdmljZV9tY3h0OworCisvKiBGdW5jdGlvbiBwcm90 b3R5cGVzICovCitzdGF0aWMgY2hhciAqcGdzYV9hZHZpc29yKFBsYW5uZXJHbG9iYWwgKmdsb2Is CisJCQkJCQkgIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5n LAorCQkJCQkJICBpbnQgY3Vyc29yT3B0aW9ucywKKwkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7 CitzdGF0aWMgdm9pZCBwZ3NhX2F0dGFjaCh2b2lkKTsKK3N0YXRpYyB2b2lkIHBnc2FfY2hlY2tf c3Rhc2hfbmFtZShjaGFyICpzdGFzaF9uYW1lKTsKK3N0YXRpYyBib29sIHBnc2FfY2hlY2tfc3Rh c2hfbmFtZV9ndWMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLAorCQkJCQkJCQkJICBHdWNT b3VyY2Ugc291cmNlKTsKK3N0YXRpYyB2b2lkIHBnc2FfY2xlYXJfYWR2aWNlX3N0cmluZyhjaGFy ICpzdGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkKTsKK3N0YXRpYyB2b2lkIHBnc2FfY3JlYXRlX3N0 YXNoKGNoYXIgKnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9kcm9wX3N0YXNoKGNoYXIg KnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9pbml0X3NoYXJlZF9zdGF0ZSh2b2lkICpw dHIsIHZvaWQgKmFyZyk7CitzdGF0aWMgdWludDY0IHBnc2FfbG9va3VwX3N0YXNoX2lkKGNoYXIg KnN0YXNoX25hbWUpOworc3RhdGljIHZvaWQgcGdzYV9zZXRfYWR2aWNlX3N0cmluZyhjaGFyICpz dGFzaF9uYW1lLCBpbnQ2NCBxdWVyeUlkLAorCQkJCQkJCQkgICBjaGFyICphZHZpY2Vfc3RyaW5n KTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuCisgKi8KK3ZvaWQKK19QR19pbml0 KHZvaWQpCit7CisJdm9pZAkJKCphZGRfYWR2aXNvcl9mbikgKHBnX3BsYW5fYWR2aWNlX2Fkdmlz b3JfaG9vayBob29rKTsKKworCS8qIElmIGNvbXB1dGVfcXVlcnlfaWQgPSAnYXV0bycsIHdlIHdv dWxkIGxpa2UgcXVlcnkgSURzLiAqLworCUVuYWJsZVF1ZXJ5SWQoKTsKKworCS8qIERlZmluZSBv dXIgR1VDcy4gKi8KKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgicGdfc3Rhc2hfYWR2aWNl LnN0YXNoX25hbWUiLAorCQkJCQkJCSAgICJOYW1lIG9mIHRoZSBhZHZpY2Ugc3Rhc2ggdG8gYmUg dXNlZCBpbiB0aGlzIHNlc3Npb24uIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZwZ19z dGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSwKKwkJCQkJCQkgICAiIiwKKwkJCQkJCQkgICBQR0NfVVNF UlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBnc2FfY2hlY2tfc3Rhc2hfbmFtZV9ndWMs CisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhSZXNl cnZlZCgicGdfc3Rhc2hfYWR2aWNlIik7CisKKwkvKiBUZWxsIHBnX3BsYW5fYWR2aWNlIHRoYXQg d2Ugd2FudCB0byBwcm92aWRlIGFkdmljZSBzdHJpbmdzLiAqLworCWFkZF9hZHZpc29yX2ZuID0K KwkJbG9hZF9leHRlcm5hbF9mdW5jdGlvbigicGdfcGxhbl9hZHZpY2UiLCAicGdfcGxhbl9hZHZp Y2VfYWRkX2Fkdmlzb3IiLAorCQkJCQkJCSAgIHRydWUsIE5VTEwpOworCSgqYWRkX2Fkdmlzb3Jf Zm4pIChwZ3NhX2Fkdmlzb3IpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRv IGNyZWF0ZSBhbiBhZHZpY2Ugc3Rhc2gKKyAqLworRGF0dW0KK3BnX2NyZWF0ZV9hZHZpY2Vfc3Rh c2goUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lID0gdGV4dF90b19j c3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShz dGFzaF9uYW1lKTsKKwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJ CXBnc2FfYXR0YWNoKCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfRVhD TFVTSVZFKTsKKwlwZ3NhX2NyZWF0ZV9zdGFzaChzdGFzaF9uYW1lKTsKKwlMV0xvY2tSZWxlYXNl KCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FM LWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRyb3AgYW4gYWR2aWNlIHN0YXNoCisgKi8KK0RhdHVtCitw Z19kcm9wX2FkdmljZV9zdGFzaChQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0YXNo X25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCisJcGdzYV9j aGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2Rz aGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3NhX3N0 YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCXBnc2FfZHJvcF9zdGFzaChzdGFzaF9uYW1lKTsK KwlMV0xvY2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwlQR19SRVRVUk5fVk9JRCgpOwor fQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYSBsaXN0IG9mIGFk dmljZSBzdGFzaGVzCisgKi8KK0RhdHVtCitwZ19nZXRfYWR2aWNlX3N0YXNoZXMoUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBm Y2luZm8tPnJlc3VsdGluZm87CisJZHNoYXNoX3NlcV9zdGF0dXMgaXRlcmF0b3I7CisJcGdzYV9l bnRyeSAqZW50cnk7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJcGdzYV9zdGFzaF9jb3VudF90YWJs ZV9oYXNoICpjaGFzaDsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8q IEF0dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8K KwlpZiAodW5saWtlbHkocGdzYV9lbnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNo KCk7CisKKwkvKiBUYWxseSB1cCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgcGVyIHN0YXNoLiAqLwor CWNoYXNoID0gcGdzYV9zdGFzaF9jb3VudF90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRl eHQsIDY0LCBOVUxMKTsKKwlkc2hhc2hfc2VxX2luaXQoJml0ZXJhdG9yLCBwZ3NhX2VudHJ5X2Rz aGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmaXRlcmF0b3Ip KSAhPSBOVUxMKQorCXsKKwkJcGdzYV9zdGFzaF9jb3VudCAqYzsKKwkJYm9vbAkJZm91bmQ7CisK KwkJYyA9IHBnc2Ffc3Rhc2hfY291bnRfdGFibGVfaW5zZXJ0KGNoYXNoLAorCQkJCQkJCQkJCSAg ZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwkJaWYgKCFm b3VuZCkKKwkJCWMtPm51bV9lbnRyaWVzID0gMTsKKwkJZWxzZQorCQkJYy0+bnVtX2VudHJpZXMr KzsKKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwkvKiBFbWl0IHJlc3VsdHMu ICovCisJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9zdGFzaF9kc2hhc2gsIHRydWUp OworCXdoaWxlICgoc3Rhc2ggPSBkc2hhc2hfc2VxX25leHQoJml0ZXJhdG9yKSkgIT0gTlVMTCkK Kwl7CisJCURhdHVtCQl2YWx1ZXNbMl07CisJCWJvb2wJCW51bGxzWzJdOworCQlwZ3NhX3N0YXNo X2NvdW50ICpjOworCisJCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oc3Rhc2gtPm5h bWUpOworCQludWxsc1swXSA9IGZhbHNlOworCisJCWMgPSBwZ3NhX3N0YXNoX2NvdW50X3RhYmxl X2xvb2t1cChjaGFzaCwgc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQpOworCQl2YWx1ZXNbMV0gPSBJbnQ2 NEdldERhdHVtKGMgPT0gTlVMTCA/IDAgOiBjLT5udW1fZW50cmllcyk7CisJCW51bGxzWzFdID0g ZmFsc2U7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5m by0+c2V0RGVzYywgdmFsdWVzLAorCQkJCQkJCSBudWxscyk7CisJfQorCWRzaGFzaF9zZXFfdGVy bSgmaXRlcmF0b3IpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxs YWJsZSBmdW5jdGlvbiB0byBwcm92aWRlIGFkdmljZSBzdGFzaCBjb250ZW50cworICovCitEYXR1 bQorcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhQR19GVU5DVElPTl9BUkdTKQoreworCVJl dHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5m bzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBpdGVyYXRvcjsKKwljaGFyCSAgICpzdGFzaF9uYW1lID0g TlVMTDsKKwlwZ3NhX3N0YXNoX25hbWVfdGFibGVfaGFzaCAqbmhhc2ggPSBOVUxMOworCXVpbnQ2 NAkJc3Rhc2hfaWQgPSAwOworCXBnc2FfZW50cnkgKmVudHJ5OworCisJSW5pdE1hdGVyaWFsaXpl ZFNSRihmY2luZm8sIDApOworCisJLyogQXR0YWNoIHRvIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBp ZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxpa2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9 PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8qIFVzZXIgY2FuIHBhc3MgTlVMTCBmb3Ig YWxsIHN0YXNoZXMsIG9yIHRoZSBuYW1lIG9mIGEgc3BlY2lmaWMgc3Rhc2guICovCisJaWYgKCFQ R19BUkdJU05VTEwoMCkpCisJeworCQlzdGFzaF9uYW1lID0gdGV4dF90b19jc3RyaW5nKFBHX0dF VEFSR19URVhUX1BQKDApKTsKKwkJcGdzYV9jaGVja19zdGFzaF9uYW1lKHN0YXNoX25hbWUpOwor CQlzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHN0YXNoX25hbWUpOworCisJCS8qIElm IHRoZSB1c2VyIHNwZWNpZmllZCBhIHN0YXNoIG5hbWUsIGl0IHNob3VsZCBleGlzdC4gKi8KKwkJ aWYgKHN0YXNoX2lkID09IDApCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQllcnJtc2coImFkdmljZSBzdGFzaCBc IiVzXCIgZG9lcyBub3QgZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisJfQorCWVsc2UKKwl7CisJCXBn c2Ffc3Rhc2ggKnN0YXNoOworCisJCS8qCisJCSAqIElmIHdlJ3JlIGR1bXBpbmcgZGF0YSBhYm91 dCBhbGwgc3Rhc2hlcywgd2UgbmVlZCBhbiBJRC0+bmFtZSBsb29rdXAKKwkJICogdGFibGUuCisJ CSAqLworCQluaGFzaCA9IHBnc2Ffc3Rhc2hfbmFtZV90YWJsZV9jcmVhdGUoQ3VycmVudE1lbW9y eUNvbnRleHQsIDY0LCBOVUxMKTsKKwkJZHNoYXNoX3NlcV9pbml0KCZpdGVyYXRvciwgcGdzYV9z dGFzaF9kc2hhc2gsIHRydWUpOworCQl3aGlsZSAoKHN0YXNoID0gZHNoYXNoX3NlcV9uZXh0KCZp dGVyYXRvcikpICE9IE5VTEwpCisJCXsKKwkJCXBnc2Ffc3Rhc2hfbmFtZSAqbjsKKwkJCWJvb2wJ CWZvdW5kOworCisJCQluID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2luc2VydChuaGFzaCwKKwkJ CQkJCQkJCQkJIHN0YXNoLT5wZ3NhX3N0YXNoX2lkLAorCQkJCQkJCQkJCQkgJmZvdW5kKTsKKwkJ CUFzc2VydCghZm91bmQpOworCQkJbi0+bmFtZSA9IHBzdHJkdXAoc3Rhc2gtPm5hbWUpOworCQl9 CisJCWRzaGFzaF9zZXFfdGVybSgmaXRlcmF0b3IpOworCX0KKworCS8qIE5vdyBpdGVyYXRlIG92 ZXIgYWxsIHRoZSBlbnRyaWVzLiAqLworCWRzaGFzaF9zZXFfaW5pdCgmaXRlcmF0b3IsIHBnc2Ff ZW50cnlfZHNoYXNoLCBmYWxzZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgm aXRlcmF0b3IpKSAhPSBOVUxMKQorCXsKKwkJRGF0dW0JCXZhbHVlc1szXTsKKwkJYm9vbAkJbnVs bHNbM107CisJCWNoYXIJICAgKnRoaXNfc3Rhc2hfbmFtZTsKKwkJY2hhcgkgICAqYWR2aWNlX3N0 cmluZzsKKworCQkvKiBTa2lwIGluY29tcGxldGUgZW50cmllcyB3aGVyZSB0aGUgYWR2aWNlIHN0 cmluZyB3YXMgbmV2ZXIgc2V0LiAqLworCQlpZiAoZW50cnktPmFkdmljZV9zdHJpbmcgPT0gSW52 YWxpZERzYVBvaW50ZXIpCisJCQljb250aW51ZTsKKworCQlpZiAoc3Rhc2hfaWQgIT0gMCkKKwkJ eworCQkJLyoKKwkJCSAqIFdlJ3JlIG9ubHkgZHVtcGluZyBkYXRhIGZvciBvbmUgcGFydGljdWxh ciBzdGFzaCwgc28gc2tpcAorCQkJICogZW50cmllcyBmb3IgYW55IG90aGVyIHN0YXNoIGFuZCB1 c2UgdGhlIHN0YXNoIG5hbWUgc3BlY2lmaWVkIGJ5CisJCQkgKiB0aGUgdXNlci4KKwkJCSAqLwor CQkJaWYgKHN0YXNoX2lkICE9IGVudHJ5LT5rZXkucGdzYV9zdGFzaF9pZCkKKwkJCQljb250aW51 ZTsKKwkJCXRoaXNfc3Rhc2hfbmFtZSA9IHN0YXNoX25hbWU7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlwZ3NhX3N0YXNoX25hbWUgKm47CisKKwkJCS8qCisJCQkgKiBXZSdyZSBkdW1waW5nIGRhdGEg Zm9yIGFsbCBzdGFzaGVzLCBzbyBsb29rIHVwIHRoZSBjb3JyZWN0IG5hbWUKKwkJCSAqIHRvIHVz ZSBpbiB0aGUgaGFzaCB0YWJsZS4gSWYgbm90aGluZyBpcyBmb3VuZCwgd2hpY2ggaXMKKwkJCSAq IHBvc3NpYmxlIGR1ZSB0byByYWNlIGNvbmRpdGlvbnMsIG1ha2UgdXAgYSBzdHJpbmcgdG8gdXNl LgorCQkJICovCisJCQluID0gcGdzYV9zdGFzaF9uYW1lX3RhYmxlX2xvb2t1cChuaGFzaCwgZW50 cnktPmtleS5wZ3NhX3N0YXNoX2lkKTsKKwkJCWlmIChuICE9IE5VTEwpCisJCQkJdGhpc19zdGFz aF9uYW1lID0gbi0+bmFtZTsKKwkJCWVsc2UKKwkJCQl0aGlzX3N0YXNoX25hbWUgPSBwc3ByaW50 ZigiPHN0YXNoICUiIFBSSXU2NCAiPiIsCisJCQkJCQkJCQkJICAgZW50cnktPmtleS5wZ3NhX3N0 YXNoX2lkKTsKKwkJfQorCisJCS8qIFdvcmsgb3V0IHR1cGxlIHZhbHVlcy4gKi8KKwkJdmFsdWVz WzBdID0gQ1N0cmluZ0dldFRleHREYXR1bSh0aGlzX3N0YXNoX25hbWUpOworCQludWxsc1swXSA9 IGZhbHNlOworCQl2YWx1ZXNbMV0gPSBJbnQ2NEdldERhdHVtKGVudHJ5LT5rZXkucXVlcnlJZCk7 CisJCW51bGxzWzFdID0gZmFsc2U7CisJCWFkdmljZV9zdHJpbmcgPSBkc2FfZ2V0X2FkZHJlc3Mo cGdzYV9kc2FfYXJlYSwgZW50cnktPmFkdmljZV9zdHJpbmcpOworCQl2YWx1ZXNbMl0gPSBDU3Ry aW5nR2V0VGV4dERhdHVtKGFkdmljZV9zdHJpbmcpOworCQludWxsc1syXSA9IGZhbHNlOworCisJ CS8qIEVtaXQgdGhlIHR1cGxlLiAqLworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNl dFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsCisJCQkJCQkJIG51bGxzKTsKKwl9CisJ ZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQorCisv KgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIHVwZGF0ZSBhbiBhZHZpY2Ugc3Rhc2ggZW50 cnkgZm9yIGEgcGFydGljdWxhcgorICogcXVlcnkgSUQKKyAqCisgKiBJZiB0aGUgc2Vjb25kIGFy Z3VtZW50IGlzIE5VTEwsIHdlIGRlbGV0ZSBhbnkgZXhpc3RpbmcgYWR2aWNlIHN0YXNoCisgKiBl bnRyeTsgb3RoZXJ3aXNlLCB3ZSBlaXRoZXIgY3JlYXRlIGFuIGVudHJ5IG9yIHVwZGF0ZSBpdCB3 aXRoIHRoZSBuZXcKKyAqIGFkdmljZSBzdHJpbmcuCisgKi8KK0RhdHVtCitwZ19zZXRfc3Rhc2hl ZF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdGFzaF9uYW1lOworCWlu dDY0CQlxdWVyeUlkOworCisJaWYgKFBHX0FSR0lTTlVMTCgwKSB8fCBQR19BUkdJU05VTEwoMSkp CisJCVBHX1JFVFVSTl9OVUxMKCk7CisKKwkvKiBHZXQgYW5kIGNoZWNrIGFkdmljZSBzdGFzaCBu YW1lLiAqLworCXN0YXNoX25hbWUgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAo MCkpOworCXBnc2FfY2hlY2tfc3Rhc2hfbmFtZShzdGFzaF9uYW1lKTsKKworCS8qCisJICogR2V0 IGFuZCBjaGVjayBxdWVyeSBJRC4KKwkgKgorCSAqIHF1ZXJ5SUQgMCBtZWFucyBubyBxdWVyeSBJ RCB3YXMgY29tcHV0ZWQsIHNvIHJlamVjdCB0aGF0LgorCSAqLworCXF1ZXJ5SWQgPSBQR19HRVRB UkdfSU5UNjQoMSk7CisJaWYgKHF1ZXJ5SWQgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiY2Fu bm90IHNldCBhZHZpY2Ugc3RyaW5nIGZvciBxdWVyeSBJRCAwIikpOworCisJLyogQXR0YWNoIHRv IGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmICh1bmxp a2VseShwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKSkKKwkJcGdzYV9hdHRhY2goKTsKKworCS8q IE5vdyBjYWxsIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byBkbyB0aGUgcmVhbCB3b3JrLiAq LworCWlmIChQR19BUkdJU05VTEwoMikpCisJCXBnc2FfY2xlYXJfYWR2aWNlX3N0cmluZyhzdGFz aF9uYW1lLCBxdWVyeUlkKTsKKwllbHNlCisJeworCQljaGFyCSAgICphZHZpY2Vfc3RyaW5nID0g dGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDIpKTsKKworCQlwZ3NhX3NldF9hZHZp Y2Vfc3RyaW5nKHN0YXNoX25hbWUsIHF1ZXJ5SWQsIGFkdmljZV9zdHJpbmcpOworCX0KKworCVBH X1JFVFVSTl9WT0lEKCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIGFkdmljZSBzdHJpbmcgdGhhdCBo YXMgYmVlbiBjb25maWd1cmVkIGZvciB0aGlzIHF1ZXJ5LCBpZiBhbnksCisgKiBhbmQgcmV0dXJu IGl0LiBPdGhlcndpc2UsIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgY2hhciAqCitwZ3NhX2Fk dmlzb3IoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJIGNvbnN0IGNoYXIg KnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCisJCQkgRXhwbGFpblN0YXRlICplcykK K3sKKwlwZ3NhX2VudHJ5X2tleSBrZXk7CisJcGdzYV9lbnRyeSAqZW50cnk7CisJY2hhcgkgICAq YWR2aWNlX3N0cmluZzsKKwl1aW50NjQJCXN0YXNoX2lkOworCisJLyoKKwkgKiBFeGl0IHF1aWNr bHkgaWYgdGhlIHN0YXNoIG5hbWUgaXMgZW1wdHkgb3IgdGhlcmUncyBubyBxdWVyeSBJRC4KKwkg Ki8KKwlpZiAocGdfc3Rhc2hfYWR2aWNlX3N0YXNoX25hbWVbMF0gPT0gJ1wwJyB8fCBwYXJzZS0+ cXVlcnlJZCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEF0dGFjaCB0byBkeW5hbWljIHNo YXJlZCBtZW1vcnkgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAodW5saWtlbHkocGdzYV9l bnRyeV9kc2hhc2ggPT0gTlVMTCkpCisJCXBnc2FfYXR0YWNoKCk7CisKKwkvKgorCSAqIFRyYW5z bGF0ZSBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSB0byBhbiBpbnRlZ2VyIElELgorCSAqCisJ ICogcGdzYV9jaGVja19zdGFzaF9uYW1lX2d1YygpIGhhcyBhbHJlYWR5IHZhbGlkYXRlZCB0aGUg YWR2aWNlIHN0YXNoCisJICogbmFtZSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjYWxsIHBnc2FfY2hl Y2tfc3Rhc2hfbmFtZSgpIGhlcmUuCisJICovCisJc3Rhc2hfaWQgPSBwZ3NhX2xvb2t1cF9zdGFz aF9pZChwZ19zdGFzaF9hZHZpY2Vfc3Rhc2hfbmFtZSk7CisJaWYgKHN0YXNoX2lkID09IDApCisJ CXJldHVybiBOVUxMOworCisJLyoKKwkgKiBMb29rIHVwIHRoZSBhZHZpY2Ugc3RyaW5nIGZvciB0 aGUgZ2l2ZW4gc3Rhc2ggSUQgKyBxdWVyeSBJRC4KKwkgKgorCSAqIElmIHdlIGZpbmQgYW4gYWR2 aWNlIHN0cmluZywgd2UgY29weSBpdCBpbnRvIHRoZSBjdXJyZW50IG1lbW9yeQorCSAqIGNvbnRl eHQsIHByZXN1bWFibHkgc2hvcnQtbGl2ZWQsIHNvIHRoYXQgd2UgY2FuIHJlbGVhc2UgdGhlIGxv Y2sgb24gdGhlCisJICogZHNoYXNoIGVudHJ5LiBwZ19wbGFuX2FkdmljZSBvbmx5IG5lZWRzIHRo ZSB2YWx1ZSB0byByZW1haW4gYWxsb2NhdGVkCisJICogbG9uZyBlbm91Z2ggZm9yIGl0IHRvIGJl IHBhcnNlZCwgc28gdGhpcyBzaG91bGQgYmUgZ29vZCBlbm91Z2guCisJICovCisJbWVtc2V0KCZr ZXksIDAsIHNpemVvZihwZ3NhX2VudHJ5X2tleSkpOworCWtleS5wZ3NhX3N0YXNoX2lkID0gc3Rh c2hfaWQ7CisJa2V5LnF1ZXJ5SWQgPSBwYXJzZS0+cXVlcnlJZDsKKwllbnRyeSA9IGRzaGFzaF9m aW5kKHBnc2FfZW50cnlfZHNoYXNoLCAma2V5LCBmYWxzZSk7CisJaWYgKGVudHJ5ID09IE5VTEwp CisJCXJldHVybiBOVUxMOworCWlmIChlbnRyeS0+YWR2aWNlX3N0cmluZyA9PSBJbnZhbGlkRHNh UG9pbnRlcikKKwkJYWR2aWNlX3N0cmluZyA9IE5VTEw7CisJZWxzZQorCQlhZHZpY2Vfc3RyaW5n ID0gcHN0cmR1cChkc2FfZ2V0X2FkZHJlc3MocGdzYV9kc2FfYXJlYSwKKwkJCQkJCQkJCQkJCWVu dHJ5LT5hZHZpY2Vfc3RyaW5nKSk7CisJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NhX2VudHJ5X2Rz aGFzaCwgZW50cnkpOworCisJLyogSWYgd2UgZm91bmQgYW4gYWR2aWNlIHN0cmluZywgZW1pdCBh IGRlYnVnIG1lc3NhZ2UuICovCisJaWYgKGFkdmljZV9zdHJpbmcgIT0gTlVMTCkKKwkJZWxvZyhE RUJVRzIsICJzdXBwbHlpbmcgYXV0b21hdGljIGFkdmljZSBmb3Igc3Rhc2ggXCIlc1wiLCBxdWVy eSBJRCAlIiBQUklkNjQgIjogJXMiLAorCQkJIHBnX3N0YXNoX2FkdmljZV9zdGFzaF9uYW1lLCBr ZXkucXVlcnlJZCwgYWR2aWNlX3N0cmluZyk7CisKKwlyZXR1cm4gYWR2aWNlX3N0cmluZzsKK30K KworLyoKKyAqIEF0dGFjaCB0byB2YXJpb3VzIHN0cnVjdHVyZXMgaW4gZHluYW1pYyBzaGFyZWQg bWVtb3J5LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgcmVzaWxpZW50 IGFnYWluc3QgZXJyb3JzLiBUaGF0IGlzLCBpZiBpdAorICogZmFpbHMgcGFydHdheSB0aHJvdWdo LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY2FsbCBpdCBhZ2FpbiwgcmVwZWF0IG5vCisgKiB3 b3JrIGFscmVhZHkgY29tcGxldGVkLCBhbmQgcG90ZW50aWFsbHkgc3VjY2VlZCBvciBhdCBsZWFz dCBnZXQgZnVydGhlciBpZgorICogd2hhdGV2ZXIgY2F1c2VkIHRoZSBwcmV2aW91cyBmYWlsdXJl IGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfYXR0YWNoKHZvaWQp Cit7CisJYm9vbAkJZm91bmQ7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyoKKwkg KiBDcmVhdGUgYSBtZW1vcnkgY29udGV4dCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgY29udHJvbCBz dHJ1Y3R1cmVzCisJICogYWxsb2NhdGVkIGluIGxvY2FsIG1lbW9yeSBhcmUgc3VmZmljaWVudGx5 IHBlcnNpc3RlbnQuCisJICovCisJaWYgKHBnX3N0YXNoX2FkdmljZV9tY3h0ID09IE5VTEwpCisJ CXBnX3N0YXNoX2FkdmljZV9tY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1lbW9yeUNv bnRleHQsCisJCQkJCQkJCQkJCQkJICJwZ19zdGFzaF9hZHZpY2UiLAorCQkJCQkJCQkJCQkJCSBB TExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKHBnX3N0YXNoX2FkdmljZV9tY3h0KTsKKworCS8qIEF0dGFjaCB0byB0aGUgZml4ZWQtc2l6 ZSBzdGF0ZSBvYmplY3QgaWYgbm90IGFscmVhZHkgZG9uZS4gKi8KKwlpZiAocGdzYV9zdGF0ZSA9 PSBOVUxMKQorCQlwZ3NhX3N0YXRlID0gR2V0TmFtZWREU01TZWdtZW50KCJwZ19zdGFzaF9hZHZp Y2UiLAorCQkJCQkJCQkJCXNpemVvZihwZ3NhX3NoYXJlZF9zdGF0ZSksCisJCQkJCQkJCQkJcGdz YV9pbml0X3NoYXJlZF9zdGF0ZSwKKwkJCQkJCQkJCQkmZm91bmQsIE5VTEwpOworCisJLyogQXR0 YWNoIHRvIHRoZSBEU0EgYXJlYSBpZiBub3QgYWxyZWFkeSBkb25lLiAqLworCWlmIChwZ3NhX2Rz YV9hcmVhID09IE5VTEwpCisJeworCQlkc2FfaGFuZGxlCWFyZWFfaGFuZGxlOworCisJCUxXTG9j a0FjcXVpcmUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCWFyZWFfaGFuZGxl ID0gcGdzYV9zdGF0ZS0+YXJlYTsKKwkJaWYgKGFyZWFfaGFuZGxlID09IERTQV9IQU5ETEVfSU5W QUxJRCkKKwkJeworCQkJcGdzYV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUocGdzYV9zdGF0ZS0+ZHNh X3RyYW5jaGUpOworCQkJZHNhX3BpbihwZ3NhX2RzYV9hcmVhKTsKKwkJCXBnc2Ffc3RhdGUtPmFy ZWEgPSBkc2FfZ2V0X2hhbmRsZShwZ3NhX2RzYV9hcmVhKTsKKwkJCUxXTG9ja1JlbGVhc2UoJnBn c2Ffc3RhdGUtPmxvY2spOworCQl9CisJCWVsc2UKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmcGdz YV9zdGF0ZS0+bG9jayk7CisJCQlwZ3NhX2RzYV9hcmVhID0gZHNhX2F0dGFjaChhcmVhX2hhbmRs ZSk7CisJCX0KKwkJZHNhX3Bpbl9tYXBwaW5nKHBnc2FfZHNhX2FyZWEpOworCX0KKworCS8qIEF0 dGFjaCB0byB0aGUgc3Rhc2hfbmFtZS0+c3Rhc2hfaWQgaGFzaCB0YWJsZSBpZiBub3QgYWxyZWFk eSBkb25lLiAqLworCWlmIChwZ3NhX3N0YXNoX2RzaGFzaCA9PSBOVUxMKQorCXsKKwkJZHNoYXNo X3RhYmxlX2hhbmRsZSBzdGFzaF9oYW5kbGU7CisKKwkJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0 ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJcGdzYV9zdGFzaF9kc2hhc2hfcGFyYW1ldGVycy50 cmFuY2hlX2lkID0gcGdzYV9zdGF0ZS0+c3Rhc2hfdHJhbmNoZTsKKwkJc3Rhc2hfaGFuZGxlID0g cGdzYV9zdGF0ZS0+c3Rhc2hfaGFzaDsKKwkJaWYgKHN0YXNoX2hhbmRsZSA9PSBEU0hBU0hfSEFO RExFX0lOVkFMSUQpCisJCXsKKwkJCXBnc2Ffc3Rhc2hfZHNoYXNoID0gZHNoYXNoX2NyZWF0ZShw Z3NhX2RzYV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX3N0YXNoX2RzaGFzaF9wYXJhbWV0ZXJz LAorCQkJCQkJCQkJCQkgIE5VTEwpOworCQkJcGdzYV9zdGF0ZS0+c3Rhc2hfaGFzaCA9CisJCQkJ ZHNoYXNoX2dldF9oYXNoX3RhYmxlX2hhbmRsZShwZ3NhX3N0YXNoX2RzaGFzaCk7CisJCQlMV0xv Y2tSZWxlYXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9j a1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCQkJcGdzYV9zdGFzaF9kc2hhc2ggPSBkc2hh c2hfYXR0YWNoKHBnc2FfZHNhX2FyZWEsCisJCQkJCQkJCQkJCSAgJnBnc2Ffc3Rhc2hfZHNoYXNo X3BhcmFtZXRlcnMsCisJCQkJCQkJCQkJCSAgc3Rhc2hfaGFuZGxlLCBOVUxMKTsKKwkJfQorCX0K KworCS8qIEF0dGFjaCB0byB0aGUgZW50cnkgaGFzaCB0YWJsZSBpZiBub3QgYWxyZWFkeSBkb25l LiAqLworCWlmIChwZ3NhX2VudHJ5X2RzaGFzaCA9PSBOVUxMKQorCXsKKwkJZHNoYXNoX3RhYmxl X2hhbmRsZSBlbnRyeV9oYW5kbGU7CisKKwkJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9j aywgTFdfRVhDTFVTSVZFKTsKKwkJcGdzYV9lbnRyeV9kc2hhc2hfcGFyYW1ldGVycy50cmFuY2hl X2lkID0gcGdzYV9zdGF0ZS0+ZW50cnlfdHJhbmNoZTsKKwkJZW50cnlfaGFuZGxlID0gcGdzYV9z dGF0ZS0+ZW50cnlfaGFzaDsKKwkJaWYgKGVudHJ5X2hhbmRsZSA9PSBEU0hBU0hfSEFORExFX0lO VkFMSUQpCisJCXsKKwkJCXBnc2FfZW50cnlfZHNoYXNoID0gZHNoYXNoX2NyZWF0ZShwZ3NhX2Rz YV9hcmVhLAorCQkJCQkJCQkJCQkgICZwZ3NhX2VudHJ5X2RzaGFzaF9wYXJhbWV0ZXJzLAorCQkJ CQkJCQkJCQkgIE5VTEwpOworCQkJcGdzYV9zdGF0ZS0+ZW50cnlfaGFzaCA9CisJCQkJZHNoYXNo X2dldF9oYXNoX3RhYmxlX2hhbmRsZShwZ3NhX2VudHJ5X2RzaGFzaCk7CisJCQlMV0xvY2tSZWxl YXNlKCZwZ3NhX3N0YXRlLT5sb2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVh c2UoJnBnc2Ffc3RhdGUtPmxvY2spOworCQkJcGdzYV9lbnRyeV9kc2hhc2ggPSBkc2hhc2hfYXR0 YWNoKHBnc2FfZHNhX2FyZWEsCisJCQkJCQkJCQkJCSAgJnBnc2FfZW50cnlfZHNoYXNoX3BhcmFt ZXRlcnMsCisJCQkJCQkJCQkJCSAgZW50cnlfaGFuZGxlLCBOVUxMKTsKKwkJfQorCX0KKworCS8q IFJlc3RvcmUgcHJldmlvdXMgbWVtb3J5IGNvbnRleHQuICovCisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciBhbiBhZHZpY2Ugc3Rh c2ggbmFtZSBpcyBsZWdhbCwgYW5kIHNpZ25hbCBhbiBlcnJvciBpZiBub3QuCisgKgorICogS2Vl cCB0aGlzIGluIHN5bmMgd2l0aCBwZ3NhX2NoZWNrX3N0YXNoX25hbWVfZ3VjLCBiZWxvdy4KKyAq Lworc3RhdGljIHZvaWQKK3Bnc2FfY2hlY2tfc3Rhc2hfbmFtZShjaGFyICpzdGFzaF9uYW1lKQor eworCS8qIFJlamVjdCBlbXB0eSBhZHZpY2Ugc3Rhc2ggbmFtZS4gKi8KKwlpZiAoc3Rhc2hfbmFt ZVswXSA9PSAnXDAnKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZSBtYXkg bm90IGJlIHplcm8gbGVuZ3RoIikpOworCisJLyogUmVqZWN0IG92ZXJsb25nIGFkdmljZSBzdGFz aCBuYW1lcy4gKi8KKwlpZiAoc3RybGVuKHN0YXNoX25hbWUpICsgMSA+IE5BTUVEQVRBTEVOKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggbmFtZXMgbWF5IG5vdCBiZSBsb25nZXIg dGhhbiAlZCBieXRlcyIsCisJCQkJCSAgIE5BTUVEQVRBTEVOIC0gMSkpOworCisJLyoKKwkgKiBS ZWplY3Qgbm9uLUFTQ0lJIGFkdmljZSBzdGFzaCBuYW1lcywgc2luY2UgYWR2aWNlIHN0YXNoZXMg YXJlIHZpc2libGUKKwkgKiBhY3Jvc3MgYWxsIGRhdGFiYXNlcyBhbmQgdGhlIGVuY29kaW5ncyBv ZiB0aG9zZSBkYXRhYmFzZXMgbWlnaHQgZGlmZmVyLgorCSAqLworCWlmICghcGdfaXNfYXNjaWko c3Rhc2hfbmFtZSkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBuYW1lIG11c3Qg bm90IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKSk7Cit9CisKKy8qCisgKiBBcyBhYm92 ZSwgYnV0IGZvciB0aGUgR1VDIGNoZWNrX2hvb2suIFdlIGFsbG93IHRoZSBlbXB0eSBzdHJpbmcg aGVyZSwKKyAqIHRob3VnaCwgYXMgZXF1aXZhbGVudCB0byBkaXNhYmxpbmcgdGhlIGZlYXR1cmUu CisgKi8KK3N0YXRpYyBib29sCitwZ3NhX2NoZWNrX3N0YXNoX25hbWVfZ3VjKGNoYXIgKipuZXd2 YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNvdXJjZSkKK3sKKwljaGFyCSAgICpzdGFzaF9u YW1lID0gKm5ld3ZhbDsKKworCS8qIFJlamVjdCBvdmVybG9uZyBhZHZpY2Ugc3Rhc2ggbmFtZXMu ICovCisJaWYgKHN0cmxlbihzdGFzaF9uYW1lKSArIDEgPiBOQU1FREFUQUxFTikKKwl7CisJCUdV Q19jaGVja19lcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpOworCQlHVUNf Y2hlY2tfZXJyZGV0YWlsKCJhZHZpY2Ugc3Rhc2ggbmFtZXMgbWF5IG5vdCBiZSBsb25nZXIgdGhh biAlZCBieXRlcyIsCisJCQkJCQkJTkFNRURBVEFMRU4gLSAxKTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKworCS8qCisJICogUmVqZWN0IG5vbi1BU0NJSSBhZHZpY2Ugc3Rhc2ggbmFtZXMsIHNpbmNl IGFkdmljZSBzdGFzaGVzIGFyZSB2aXNpYmxlCisJICogYWNyb3NzIGFsbCBkYXRhYmFzZXMgYW5k IHRoZSBlbmNvZGluZ3Mgb2YgdGhvc2UgZGF0YWJhc2VzIG1pZ2h0IGRpZmZlci4KKwkgKi8KKwlp ZiAoIXBnX2lzX2FzY2lpKHN0YXNoX25hbWUpKQorCXsKKwkJR1VDX2NoZWNrX2VycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSk7CisJCUdVQ19jaGVja19lcnJkZXRhaWwoImFk dmljZSBzdGFzaCBuYW1lIG11c3Qgbm90IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQ3JlYXRl IGFuIGFkdmljZSBzdGFzaC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfY3JlYXRlX3N0YXNoKGNo YXIgKnN0YXNoX25hbWUpCit7CisJcGdzYV9zdGFzaCAqc3Rhc2g7CisJYm9vbAkJZm91bmQ7CisK KwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSkpOworCisJLyogQ3JlYXRlIGEgc3Rhc2ggd2l0aCB0aGlzIG5hbWUsIHVubGVzcyBvbmUg YWxyZWFkeSBleGlzdHMuICovCisJc3Rhc2ggPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQocGdzYV9z dGFzaF9kc2hhc2gsIHN0YXNoX25hbWUsICZmb3VuZCk7CisJaWYgKGZvdW5kKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggXCIlc1wiIGFscmVhZHkgZXhpc3RzIiwgc3Rhc2hfbmFt ZSkpOworCXN0YXNoLT5wZ3NhX3N0YXNoX2lkID0gcGdzYV9zdGF0ZS0+bmV4dF9zdGFzaF9pZCsr OworCWRzaGFzaF9yZWxlYXNlX2xvY2socGdzYV9zdGFzaF9kc2hhc2gsIHN0YXNoKTsKK30KKwor LyoKKyAqIFJlbW92ZSBhbnkgc3RvcmVkIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBnaXZlbiBhZHZp Y2Ugc3Rhc2ggYW5kIHF1ZXJ5IElELgorICovCitzdGF0aWMgdm9pZAorcGdzYV9jbGVhcl9hZHZp Y2Vfc3RyaW5nKGNoYXIgKnN0YXNoX25hbWUsIGludDY0IHF1ZXJ5SWQpCit7CisJcGdzYV9lbnRy eSAqZW50cnk7CisJcGdzYV9lbnRyeV9rZXkga2V5OworCXVpbnQ2NAkJc3Rhc2hfaWQ7CisJZHNh X3BvaW50ZXIgb2xkX2RwOworCisJLyogVHJhbnNsYXRlIHRoZSBzdGFzaCBuYW1lIHRvIGFuIGlu dGVnZXIgSUQuICovCisJaWYgKChzdGFzaF9pZCA9IHBnc2FfbG9va3VwX3N0YXNoX2lkKHN0YXNo X25hbWUpKSA9PSAwKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJZXJybXNnKCJhZHZpY2Ugc3Rhc2ggXCIlc1wiIGRv ZXMgbm90IGV4aXN0Iiwgc3Rhc2hfbmFtZSkpOworCisJLyoKKwkgKiBMb29rIGZvciBhbiBleGlz dGluZyBlbnRyeSwgYW5kIGZyZWUgaXQuIEJ1dCwgYmUgc3VyZSB0byBzYXZlIHRoZQorCSAqIHBv aW50ZXIgdG8gdGhlIGFzc29jaWF0ZWQgYWR2aWNlIHN0cmluZywgaWYgYW55LgorCSAqLworCW1l bXNldCgma2V5LCAwLCBzaXplb2YocGdzYV9lbnRyeV9rZXkpKTsKKwlrZXkucGdzYV9zdGFzaF9p ZCA9IHN0YXNoX2lkOworCWtleS5xdWVyeUlkID0gcXVlcnlJZDsKKwllbnRyeSA9IGRzaGFzaF9m aW5kKHBnc2FfZW50cnlfZHNoYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkK KwkJb2xkX2RwID0gSW52YWxpZERzYVBvaW50ZXI7CisJZWxzZQorCXsKKwkJb2xkX2RwID0gZW50 cnktPmFkdmljZV9zdHJpbmc7CisJCWRzaGFzaF9kZWxldGVfZW50cnkocGdzYV9lbnRyeV9kc2hh c2gsIGVudHJ5KTsKKwl9CisKKwkvKiBOb3cgd2UgZnJlZSB0aGUgYWR2aWNlIHN0cmluZyBhcyB3 ZWxsLCBpZiB0aGVyZSB3YXMgb25lLiAqLworCWlmIChvbGRfZHAgIT0gSW52YWxpZERzYVBvaW50 ZXIpCisJCWRzYV9mcmVlKHBnc2FfZHNhX2FyZWEsIG9sZF9kcCk7Cit9CisKKy8qCisgKiBEcm9w IGFuIGFkdmljZSBzdGFzaC4KKyAqLworc3RhdGljIHZvaWQKK3Bnc2FfZHJvcF9zdGFzaChjaGFy ICpzdGFzaF9uYW1lKQoreworCXBnc2FfZW50cnkgKmVudHJ5OworCXBnc2Ffc3Rhc2ggKnN0YXNo OworCWRzaGFzaF9zZXFfc3RhdHVzIGl0ZXJhdG9yOworCXVpbnQ2NAkJc3Rhc2hfaWQ7CisKKwlB c3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoJnBnc2Ffc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lW RSkpOworCisJLyogUmVtb3ZlIHRoZSBlbnRyeSBmb3IgdGhpcyBhZHZpY2Ugc3Rhc2guICovCisJ c3Rhc2ggPSBkc2hhc2hfZmluZChwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2hfbmFtZSwgdHJ1ZSk7 CisJaWYgKHN0YXNoID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coImFkdmljZSBzdGFzaCBc IiVzXCIgZG9lcyBub3QgZXhpc3QiLCBzdGFzaF9uYW1lKSk7CisJc3Rhc2hfaWQgPSBzdGFzaC0+ cGdzYV9zdGFzaF9pZDsKKwlkc2hhc2hfZGVsZXRlX2VudHJ5KHBnc2Ffc3Rhc2hfZHNoYXNoLCBz dGFzaCk7CisKKwkvKgorCSAqIE5vdyByZW1vdmUgYWxsIHRoZSBlbnRyaWVzLiBTaW5jZSBwZ3Nh X3N0YXRlLT5sb2NrIG11c3QgYmUgaGVsZCBhdAorCSAqIGxlYXN0IGluIHNoYXJlZCBtb2RlIHRv IGluc2VydCBlbnRyaWVzIGludG8gcGdzYV9lbnRyeV9kc2hhc2gsIGl0CisJICogZG9lc24ndCBt YXR0ZXIgd2hldGhlciB3ZSBkbyB0aGlzIGJlZm9yZSBvciBhZnRlciBkZWxldGluZyB0aGUgZW50 cnkKKwkgKiBmcm9tIHBnc2Ffc3Rhc2hfZHNoYXNoLgorCSAqLworCWRzaGFzaF9zZXFfaW5pdCgm aXRlcmF0b3IsIHBnc2FfZW50cnlfZHNoYXNoLCB0cnVlKTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNo YXNoX3NlcV9uZXh0KCZpdGVyYXRvcikpICE9IE5VTEwpCisJeworCQlpZiAoc3Rhc2hfaWQgPT0g ZW50cnktPmtleS5wZ3NhX3N0YXNoX2lkKQorCQl7CisJCQlpZiAoZW50cnktPmFkdmljZV9zdHJp bmcgIT0gSW52YWxpZERzYVBvaW50ZXIpCisJCQkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgZW50 cnktPmFkdmljZV9zdHJpbmcpOworCQkJZHNoYXNoX2RlbGV0ZV9jdXJyZW50KCZpdGVyYXRvcik7 CisJCX0KKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZpdGVyYXRvcik7Cit9CisKKy8qCisgKiBJbml0 aWFsaXplIHNoYXJlZCBzdGF0ZSB3aGVuIGZpcnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3NhX2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKQoreworCXBnc2Ff c2hhcmVkX3N0YXRlICpzdGF0ZSA9IChwZ3NhX3NoYXJlZF9zdGF0ZSAqKSBwdHI7CisKKwlMV0xv Y2tJbml0aWFsaXplKCZzdGF0ZS0+bG9jaywKKwkJCQkJIExXTG9ja05ld1RyYW5jaGVJZCgicGdf c3Rhc2hfYWR2aWNlX2xvY2siKSk7CisJc3RhdGUtPmRzYV90cmFuY2hlID0gTFdMb2NrTmV3VHJh bmNoZUlkKCJwZ19zdGFzaF9hZHZpY2VfZHNhIik7CisJc3RhdGUtPnN0YXNoX3RyYW5jaGUgPSBM V0xvY2tOZXdUcmFuY2hlSWQoInBnX3N0YXNoX2FkdmljZV9zdGFzaCIpOworCXN0YXRlLT5lbnRy eV90cmFuY2hlID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19zdGFzaF9hZHZpY2VfZW50cnkiKTsK KwlzdGF0ZS0+bmV4dF9zdGFzaF9pZCA9IFVJTlQ2NENPTlNUKDEpOworCXN0YXRlLT5hcmVhID0g RFNBX0hBTkRMRV9JTlZBTElEOworCXN0YXRlLT5zdGFzaF9oYXNoID0gRFNIQVNIX0hBTkRMRV9J TlZBTElEOworCXN0YXRlLT5lbnRyeV9oYXNoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOworfQor CisvKgorICogTG9vayB1cCB0aGUgaW50ZWdlciBJRCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBn aXZlbiBzdGFzaCBuYW1lLgorICoKKyAqIFJldHVybnMgMCBpZiBubyBzdWNoIHN0YXNoIGV4aXN0 cy4KKyAqLworc3RhdGljIHVpbnQ2NAorcGdzYV9sb29rdXBfc3Rhc2hfaWQoY2hhciAqc3Rhc2hf bmFtZSkKK3sKKwlwZ3NhX3N0YXNoICpzdGFzaDsKKwl1aW50NjQJCXN0YXNoX2lkOworCisJLyog U2VhcmNoIHRoZSBzaGFyZWQgaGFzaCB0YWJsZS4gKi8KKwlzdGFzaCA9IGRzaGFzaF9maW5kKHBn c2Ffc3Rhc2hfZHNoYXNoLCBzdGFzaF9uYW1lLCBmYWxzZSk7CisJaWYgKHN0YXNoID09IE5VTEwp CisJCXJldHVybiAwOworCXN0YXNoX2lkID0gc3Rhc2gtPnBnc2Ffc3Rhc2hfaWQ7CisJZHNoYXNo X3JlbGVhc2VfbG9jayhwZ3NhX3N0YXNoX2RzaGFzaCwgc3Rhc2gpOworCisJcmV0dXJuIHN0YXNo X2lkOworfQorCisvKgorICogU3RvcmUgYSBuZXcgb3IgdXBkYXRlZCBhZHZpY2Ugc3RyaW5nIGZv ciB0aGUgZ2l2ZW4gYWR2aWNlIHN0YXNoIGFuZCBxdWVyeSBJRC4KKyAqLworc3RhdGljIHZvaWQK K3Bnc2Ffc2V0X2FkdmljZV9zdHJpbmcoY2hhciAqc3Rhc2hfbmFtZSwgaW50NjQgcXVlcnlJZCwg Y2hhciAqYWR2aWNlX3N0cmluZykKK3sKKwlwZ3NhX2VudHJ5ICplbnRyeTsKKwlib29sCQlmb3Vu ZDsKKwlwZ3NhX2VudHJ5X2tleSBrZXk7CisJdWludDY0CQlzdGFzaF9pZDsKKwlkc2FfcG9pbnRl ciBuZXdfZHA7CisJZHNhX3BvaW50ZXIgb2xkX2RwOworCisJLyoKKwkgKiBUaGUgd29yayB3ZSBu ZWVkIHRvIGRvIGluIHRoaXMgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IHNpbXBsZSwgYnV0IHRoZQor CSAqIGRhbmdlciBvZiBhIHNlcnZlci1saWZlc3BhbiBEU0EgbWVtb3J5IGxlYWsgaXMgdmVyeSBy ZWFsLiBBY3F1aXJpbmcgYQorCSAqIGxvY2sgaGVyZSBoZWxwcyBmb3IgdHdvIHJlYXNvbnMuCisJ ICoKKwkgKiBGaXJzdCwgaXQgaG9sZHMgb2ZmIGludGVycnVwdHMsIHNvIHRoYXQgd2UgY2FuJ3Qg YmFpbCBvdXQgb2YgdGhpcyBjb2RlCisJICogYWZ0ZXIgYWxsb2NhdGluZyBEU0EgbWVtb3J5IGZv ciB0aGUgYWR2aWNlIHN0cmluZyBhbmQgYmVmb3JlIHN0b3JpbmcKKwkgKiB0aGUgcmVzdWx0aW5n IHBvaW50ZXIgc29tZXdoZXJlIHRoYXQgb3RoZXJzIGNhbiBmaW5kIGl0LgorCSAqCisJICogU2Vj b25kLCB3ZSBuZWVkIHRvIGF2b2lkIGEgcmFjZSBhZ2FpbnN0IHBnc2FfZHJvcF9zdGFzaCgpLiBU aGF0CisJICogZnVuY3Rpb24gcmVtb3ZlcyBhIHN0YXNoX25hbWUtPnN0YXNoX2lkIG1hcHBpbmcg YW5kIGFsbCB0aGUgZW50cmllcyBmb3IKKwkgKiB0aGF0IHN0YXNoX2lkLiBXaXRob3V0IHRoZSBs b2NrLCB0aGVyZSdzIGEgcmFjZSBjb25kaXRpb24gbm8gbWF0dGVyCisJICogd2hpY2ggb2YgdGhv c2UgdGhpbmdzIGl0IGRvZXMgZmlyc3QsIGJlY2F1c2UgYXMgc29vbiBhcyB3ZSd2ZSBsb29rZWQg dXAKKwkgKiB0aGUgc3Rhc2ggSUQsIHRoYXQgd2hvbGUgZnVuY3Rpb24gY2FuIGV4ZWN1dGUgYmVm b3JlIHdlIGRvIHRoZSByZXN0IG9mCisJICogb3VyIHdvcmssIHdoaWNoIHdvdWxkIHJlc3VsdCBp biB1cyBhZGRpbmcgYW4gZW50cnkgZm9yIGEgc3Rhc2ggdGhhdCBubworCSAqIGxvbmdlciBleGlz dHMuCisJICovCisJTFdMb2NrQWNxdWlyZSgmcGdzYV9zdGF0ZS0+bG9jaywgTFdfU0hBUkVEKTsK KworCS8qIExvb2sgdXAgdGhlIHN0YXNoIElELiAqLworCWlmICgoc3Rhc2hfaWQgPSBwZ3NhX2xv b2t1cF9zdGFzaF9pZChzdGFzaF9uYW1lKSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQll cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiYWR2 aWNlIHN0YXNoIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsIHN0YXNoX25hbWUpKTsKKworCS8qIEFs bG9jYXRlIHNwYWNlIGZvciB0aGUgYWR2aWNlIHN0cmluZy4gKi8KKwluZXdfZHAgPSBkc2FfYWxs b2NhdGUocGdzYV9kc2FfYXJlYSwgc3RybGVuKGFkdmljZV9zdHJpbmcpICsgMSk7CisJc3RyY3B5 KGRzYV9nZXRfYWRkcmVzcyhwZ3NhX2RzYV9hcmVhLCBuZXdfZHApLCBhZHZpY2Vfc3RyaW5nKTsK KworCS8qIEF0dGVtcHQgdG8gaW5zZXJ0IGFuIGVudHJ5IGludG8gdGhlIGhhc2ggdGFibGUuICov CisJbWVtc2V0KCZrZXksIDAsIHNpemVvZihwZ3NhX2VudHJ5X2tleSkpOworCWtleS5wZ3NhX3N0 YXNoX2lkID0gc3Rhc2hfaWQ7CisJa2V5LnF1ZXJ5SWQgPSBxdWVyeUlkOworCWVudHJ5ID0gZHNo YXNoX2ZpbmRfb3JfaW5zZXJ0X2V4dGVuZGVkKHBnc2FfZW50cnlfZHNoYXNoLCAma2V5LCAmZm91 bmQsCisJCQkJCQkJCQkJICAgRFNIQVNIX0lOU0VSVF9OT19PT00pOworCisJLyoKKwkgKiBJZiBp dCBkaWRuJ3Qgd29yaywgYmFpbCBvdXQsIGJlaW5nIGNhcmVmdWwgdG8gZnJlZSB0aGUgc2hhcmVk IG1lbW9yeQorCSAqIHdlJ3ZlIGFscmVhZHkgYWxsb2NhdGVkIGJlZm9yZSB0aHJvd2luZyBhbiBl cnJvciwgc2luY2UgZXJyb3IgY2xlYW51cAorCSAqIHdpbGwgbm90IGRvIHNvLgorCSAqLworCWlm IChlbnRyeSA9PSBOVUxMKQorCXsKKwkJZHNhX2ZyZWUocGdzYV9kc2FfYXJlYSwgbmV3X2RwKTsK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJ CQkJZXJybXNnKCJvdXQgb2YgbWVtb3J5IiksCisJCQkJZXJyZGV0YWlsKCJjb3VsZCBub3QgaW5z ZXJ0IGFkdmljZSBzdHJpbmcgaW50byBzaGFyZWQgaGFzaCB0YWJsZSIpKTsKKwl9CisKKwkvKiBV cGRhdGUgdGhlIGVudHJ5IGFuZCByZWxlYXNlIHRoZSBsb2NrLiAqLworCW9sZF9kcCA9IGZvdW5k ID8gZW50cnktPmFkdmljZV9zdHJpbmcgOiBJbnZhbGlkRHNhUG9pbnRlcjsKKwllbnRyeS0+YWR2 aWNlX3N0cmluZyA9IG5ld19kcDsKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc2FfZW50cnlfZHNo YXNoLCBlbnRyeSk7CisKKwkvKgorCSAqIFdlJ3JlIG5vdCBzYWZlIGZyb20gbGVha3MgeWV0IQor CSAqCisJICogVGhlcmUncyBub3cgYSBwb2ludGVyIHRvIG5ld19kcCBpbiB0aGUgZW50cnkgdGhh dCB3ZSBqdXN0IHVwZGF0ZWQsIGJ1dAorCSAqIHRoYXQgbWVhbnMgdGhhdCB0aGVyZSdzIG5vIGxv bmdlciBhbnl0aGluZyBwb2ludGluZyB0byBvbGRfZHAuIEZyZWUgaXQKKwkgKiBmaXJzdCwgYW5k IHRoZW4gd2UgY2FuIHJlbGVhc2Ugb3VyIGxhc3QgTFdMb2NrLCBhbGxvd2luZyBpbnRlcnJ1cHRz LgorCSAqLworCWlmIChEc2FQb2ludGVySXNWYWxpZChvbGRfZHApKQorCQlkc2FfZnJlZShwZ3Nh X2RzYV9hcmVhLCBvbGRfZHApOworCUxXTG9ja1JlbGVhc2UoJnBnc2Ffc3RhdGUtPmxvY2spOwor fQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGFzaF9hZHZpY2UvcGdfc3Rhc2hfYWR2aWNlLmNv bnRyb2wgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29udHJvbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGEwZmZmNWM4NjYKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXNoX2FkdmljZS9wZ19zdGFzaF9hZHZpY2UuY29u dHJvbApAQCAtMCwwICsxLDUgQEAKKyMgcGdfc3Rhc2hfYWR2aWNlIGV4dGVuc2lvbgorY29tbWVu dCA9ICdzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFuIGFkdmljZScKK2RlZmF1bHRf dmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9wZ19zdGFzaF9hZHZp Y2UnCityZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rhc2hfYWR2 aWNlL3NxbC9wZ19zdGFzaF9hZHZpY2Uuc3FsIGIvY29udHJpYi9wZ19zdGFzaF9hZHZpY2Uvc3Fs L3BnX3N0YXNoX2FkdmljZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjNmNmJmYjgzMTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGFzaF9hZHZp Y2Uvc3FsL3BnX3N0YXNoX2FkdmljZS5zcWwKQEAgLTAsMCArMSwxNDcgQEAKK0NSRUFURSBFWFRF TlNJT04gcGdfc3Rhc2hfYWR2aWNlOworU0VUIGNvbXB1dGVfcXVlcnlfaWQgPSBvbjsKK1NFVCBt YXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworLS0gSGVscGVyOiBleHRyYWN0 IHF1ZXJ5IGlkZW50aWZpZXIgZnJvbSBFWFBMQUlOIFZFUkJPU0Ugb3V0cHV0LgorQ1JFQVRFIE9S IFJFUExBQ0UgRlVOQ1RJT04gZ2V0X3F1ZXJ5X2lkKHF1ZXJ5X3RleHQgdGV4dCkgUkVUVVJOUyBi aWdpbnQKK0xBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0RFQ0xBUkUKKyAgICBsaW5lIHRleHQ7Cisg ICAgcWlkIGJpZ2ludDsKK0JFR0lOCisgICAgRk9SIGxpbmUgSU4gRVhFQ1VURSAnRVhQTEFJTiAo VkVSQk9TRSwgRk9STUFUIFRFWFQpICcgfHwgcXVlcnlfdGV4dAorICAgIExPT1AKKyAgICAgICAg SUYgbGluZSB+ICdRdWVyeSBJZGVudGlmaWVyOicgVEhFTgorICAgICAgICAgICAgcWlkIDo9IHJl Z2V4cF9yZXBsYWNlKGxpbmUsICcuKlF1ZXJ5IElkZW50aWZpZXI6XHMqKC0/XGQrKS4qJywgJ1wx Jyk6OmJpZ2ludDsKKyAgICAgICAgICAgIFJFVFVSTiBxaWQ7CisgICAgICAgIEVORCBJRjsKKyAg ICBFTkQgTE9PUDsKKyAgICBSQUlTRSBFWENFUFRJT04gJ1F1ZXJ5IElkZW50aWZpZXIgbm90IGZv dW5kIGluIEVYUExBSU4gb3V0cHV0JzsKK0VORDsKKyQkOworCitDUkVBVEUgVEFCTEUgYWFfZGlt MSAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBhYV9kaW0xIChpZCwgZGlt MSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9k aW0xOworCitDUkVBVEUgVEFCTEUgYWFfZGltMiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGlt MiB0ZXh0LCB2YWwyIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBhYV9kaW0yIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmls bGVyIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwKSBnOworVkFDVVVNIEFOQUxZWkUgYWFfZGltMjsKKworQ1JFQVRFIFRBQkxFIGFhX2ZhY3Qg KAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJl bmNlcyBhYV9kaW0xIChpZCksCisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMg YWFfZGltMiAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VS VCBJTlRPIGFhX2ZhY3QKKwlTRUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBhYV9mYWN0OworCistLSBH ZXQgdGhlIHF1ZXJ5IGlkZW50aWZpZXIuCitTRUxFQ1QgZ2V0X3F1ZXJ5X2lkKCQkCitTRUxFQ1Qg KiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworJCQpIEFTIHFpZCBcZ3NldAorCistLSBDcmVhdGUgYW4gYWR2 aWNlIHN0YXNoIGFuZCBwb2ludCBwZ19zdGFzaF9hZHZpY2UgYXQgaXQuCitTRUxFQ1QgcGdfY3Jl YXRlX2FkdmljZV9zdGFzaCgncmVncmVzc19zdGFzaCcpOworU0VUIHBnX3N0YXNoX2FkdmljZS5z dGFzaF9uYW1lID0gJ3JlZ3Jlc3Nfc3Rhc2gnOworCistLSBSdW4gb3VyIHRlc3QgcXVlcnkgZm9y IHRoZSBmaXJzdCB0aW1lIHdpdGggbm8gc3Rhc2hlZCBhZHZpY2UuCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZiBMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRp bTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlk CisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhbiBpbmRleCBzY2Fu IG9uIGRpbTEKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rhc2gnLCA6 J3FpZCcsCisJJ0lOREVYX1NDQU4oZDEgYWFfZGltMV9wa2V5KScpOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIGFhX2ZhY3QgZgorCUxFRlQgSk9JTiBhYV9kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGFhX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGFuIGFsdGVybmF0 aXZlIGpvaW4gb3JkZXIKK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3JlZ3Jlc3Nfc3Rh c2gnLCA6J3FpZCcsCisJJ2pvaW5fb3JkZXIoZiBkMSBkMiknKTsKK0VYUExBSU4gKENPU1RTIE9G RikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRp bTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlk CisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhbiBhbHRlcm5hdGl2 ZSBqb2luIHN0cmF0ZWd5CitTRUxFQ1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0 YXNoJywgOidxaWQnLAorCSdORVNURURfTE9PUF9QTEFJTihkMSknKTsKK0VYUExBSU4gKENPU1RT IE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBm LmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQy LmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBBZGQgYSB1c2VsZXNzIGV4 dHJhIGVudHJ5IHRvIG91ciB0ZXN0IHN0YXNoLiBTaG91bGRuJ3QgY2hhbmdlIHRoZSByZXN1bHQK Ky0tIGZyb20gdGhlIHByZXZpb3VzIHRlc3QuCistLSAoSWYgd2UncmUgdW5sdWNreSBlbm91Z2gg dGhhdCB0aGlzIGV2ZXIgZmFpbHMgZHVlIHRvIHF1ZXJ5IElEIGFjdHVhbGx5CistLSBiZWluZyAx LCB0aGVuIGp1c3QgcHV0IHNvbWUgb3RoZXIgY29uc3RhbnQgaGVyZS4gU2VlbXMgdW5saWtlbHku KQorU0VMRUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgncmVncmVzc19zdGFzaCcsIDEsICdTRVFf U0NBTihkMSknKTsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYK KwlMRUZUIEpPSU4gYWFfZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBh YV9kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIg PSAxOworCistLSBUcnkgYW4gZW1wdHkgc3Rhc2ggdG8gYmUgc3VyZSBpdCBkb2VzIG5vdGhpbmcK K1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKCdyZWdyZXNzX2VtcHR5X3N0YXNoJyk7CitT RVQgcGdfc3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAncmVncmVzc19lbXB0eV9zdGFzaCc7CitF WFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gYWFfZmFjdCBmCisJTEVGVCBKT0lOIGFh X2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gYWFfZGltMiBkMiBPTiBm LmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKworLS0gVGVz dCB0aGF0IHdlIGNhbiBsaXN0IGVhY2ggc3Rhc2ggaW5kaXZpZHVhbGx5IGFuZCBhbGwgb2YgdGhl bSB0b2dldGhlciwKKy0tIGJ1dCBub3QgYSBub25leGlzdGVudCBzdGFzaC4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X2FkdmljZV9zdGFzaGVzKCkgT1JERVIgQlkgc3Rhc2hfbmFtZTsKK1NFTEVDVCBz dGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJRlJPTSBwZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRl bnRzKCdyZWdyZXNzX3N0YXNoJykgT1JERVIgQlkgcXVlcnlfaWQ7CitTRUxFQ1Qgc3Rhc2hfbmFt ZSwgYWR2aWNlX3N0cmluZworCSBGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVudHMoJ3Jl Z3Jlc3NfZW1wdHlfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKK1NFTEVDVCBzdGFzaF9uYW1l LCBhZHZpY2Vfc3RyaW5nCisJIEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cyhOVUxM KSBPUkRFUiBCWSBxdWVyeV9pZDsKK1NFTEVDVCBzdGFzaF9uYW1lLCBhZHZpY2Vfc3RyaW5nCisJ IEZST00gcGdfZ2V0X2FkdmljZV9zdGFzaF9jb250ZW50cygnbm9fc3VjaF9zdGFzaCcpIE9SREVS IEJZIHF1ZXJ5X2lkOworCistLSBUZXN0IHRoYXQgd2UgY2FuIHJlbW92ZSBhZHZpY2UuCitTRUxF Q1QgcGdfc2V0X3N0YXNoZWRfYWR2aWNlKCdyZWdyZXNzX3N0YXNoJywgOidxaWQnLCBudWxsKTsK K1NFVCBwZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZSA9ICdyZWdyZXNzX3N0YXNoJzsKK0VYUExB SU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBhYV9mYWN0IGYKKwlMRUZUIEpPSU4gYWFfZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBhYV9kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworU0VMRUNUICogRlJP TSBwZ19nZXRfYWR2aWNlX3N0YXNoZXMoKSBPUkRFUiBCWSBzdGFzaF9uYW1lOworU0VMRUNUIHN0 YXNoX25hbWUsIGFkdmljZV9zdHJpbmcKKwlGUk9NIHBnX2dldF9hZHZpY2Vfc3Rhc2hfY29udGVu dHMoJ3JlZ3Jlc3Nfc3Rhc2gnKSBPUkRFUiBCWSBxdWVyeV9pZDsKKworLS0gQ2FuJ3QgY3JlYXRl IGEgc3Rhc2ggdGhhdCBhbHJlYWR5IGV4aXN0cywgb3IgZHJvcCBvbmUgdGhhdCBkb2Vzbid0Lgor U0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ3JlZ3Jlc3Nfc3Rhc2gnKTsKK1NFTEVDVCBw Z19kcm9wX2FkdmljZV9zdGFzaCgnbm9fc3VjaF9zdGFzaCcpOworCistLSBDYW4ndCBhZGQgdG8g b3IgcmVtb3ZlIGZyb20gYSBzdGFzaCB0aGF0IGRvZXMgbm90IGV4aXN0LgorU0VMRUNUIHBnX3Nl dF9zdGFzaGVkX2FkdmljZSgnbm9fc3VjaF9zdGFzaCcsIDEsICdTRVFfU0NBTih0KScpOworU0VM RUNUIHBnX3NldF9zdGFzaGVkX2FkdmljZSgnbm9fc3VjaF9zdGFzaCcsIDEsIG51bGwpOworCist LSBDYW4ndCB1c2UgcXVlcnkgSUQgMC4KK1NFTEVDVCBwZ19zZXRfc3Rhc2hlZF9hZHZpY2UoJ3Jl Z3Jlc3Nfc3Rhc2gnLCAwLCAnU0VRX1NDQU4odCknKTsKKworLS0gU3Rhc2ggbmFtZXMgbXVzdCBi ZSBub24tZW1wdHksIEFTQ0lJLCBhbmQgbm90IHRvbyBsb25nLgorU0VMRUNUIHBnX2NyZWF0ZV9h ZHZpY2Vfc3Rhc2goJycpOworU0VMRUNUIHBnX2NyZWF0ZV9hZHZpY2Vfc3Rhc2goJ2FhYWFhYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEn KTsKK1NFTEVDVCBwZ19jcmVhdGVfYWR2aWNlX3N0YXNoKEUnY2FmXHUwMGU5Jyk7CitTRVQgcGdf c3Rhc2hfYWR2aWNlLnN0YXNoX25hbWUgPSAnY2Fmw6knOworCistLSBDbGVhbiB1cCBzdGF0ZSBp biBkeW5hbWljIHNoYXJlZCBtZW1vcnkuCitTRUxFQ1QgcGdfZHJvcF9hZHZpY2Vfc3Rhc2goJ3Jl Z3Jlc3Nfc3Rhc2gnKTsKK1NFTEVDVCBwZ19kcm9wX2FkdmljZV9zdGFzaCgncmVncmVzc19lbXB0 eV9zdGFzaCcpOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCBiL2RvYy9z cmMvc2dtbC9jb250cmliLnNnbWwKaW5kZXggMmFiNmZhZmJhYjEuLjhmMDlkNzI4Njk4IDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb250 cmliLnNnbWwKQEAgLTE2MCw2ICsxNjAsNyBAQCBDUkVBVEUgRVhURU5TSU9OIDxyZXBsYWNlYWJs ZT5leHRlbnNpb25fbmFtZTwvcmVwbGFjZWFibGU+OwogICZwZ3BsYW5hZHZpY2U7CiAgJnBncHJl d2FybTsKICAmcGdyb3dsb2NrczsKKyAmcGdzdGFzaGFkdmljZTsKICAmcGdzdGF0c3RhdGVtZW50 czsKICAmcGdzdGF0dHVwbGU7CiAgJnBnc3VyZ2VyeTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9maWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKaW5kZXggNDA3ZmYz YWJmZmUuLjhjMTRiYWI4NGU5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMTQ0LDYgKzE0NCw3IEBACiA8 IUVOVElUWSBvaWQybmFtZSAgICAgICAgU1lTVEVNICJvaWQybmFtZS5zZ21sIj4KIDwhRU5USVRZ IHBhZ2VpbnNwZWN0ICAgICBTWVNURU0gInBhZ2VpbnNwZWN0LnNnbWwiPgogPCFFTlRJVFkgcGFz c3dvcmRjaGVjayAgIFNZU1RFTSAicGFzc3dvcmRjaGVjay5zZ21sIj4KKzwhRU5USVRZIHBnc3Rh c2hhZHZpY2UgICBTWVNURU0gInBnc3Rhc2hhZHZpY2Uuc2dtbCI+CiA8IUVOVElUWSBwZ2J1ZmZl cmNhY2hlICAgU1lTVEVNICJwZ2J1ZmZlcmNhY2hlLnNnbWwiPgogPCFFTlRJVFkgcGdjb2xsZWN0 YWR2aWNlIFNZU1RFTSAicGdjb2xsZWN0YWR2aWNlLnNnbWwiPgogPCFFTlRJVFkgcGdjcnlwdG8g ICAgICAgIFNZU1RFTSAicGdjcnlwdG8uc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cGdzdGFzaGFkdmljZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bnc3Rhc2hhZHZpY2Uuc2dtbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDg5ZmM2NjQ0NmYKLS0tIC9kZXYv bnVsbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGFzaGFkdmljZS5zZ21sCkBAIC0wLDAgKzEsMjE4 IEBACis8IS0tIGRvYy9zcmMvc2dtbC9wZ3N0YXNoYWR2aWNlLnNnbWwgLS0+CisKKzxzZWN0MSBp ZD0icGdzdGFzaGFkdmljZSIgeHJlZmxhYmVsPSJwZ19zdGFzaF9hZHZpY2UiPgorIDx0aXRsZT5w Z19zdGFzaF9hZHZpY2UgJm1kYXNoOyBzdG9yZSBhbmQgYXV0b21hdGljYWxseSBhcHBseSBwbGFu IGFkdmljZTwvdGl0bGU+CisKKyA8aW5kZXh0ZXJtIHpvbmU9InBnc3Rhc2hhZHZpY2UiPgorICA8 cHJpbWFyeT5wZ19zdGFzaF9hZHZpY2U8L3ByaW1hcnk+CisgPC9pbmRleHRlcm0+CisKKyA8cGFy YT4KKyAgVGhlIDxmaWxlbmFtZT5wZ19zdGFzaF9hZHZpY2U8L2ZpbGVuYW1lPiBleHRlbnNpb24g YWxsb3dzIHlvdSB0byBzdGFzaAorICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UiPnBsYW4g YWR2aWNlPC9saW5rPiBzdHJpbmdzIGluIGR5bmFtaWMKKyAgc2hhcmVkIG1lbW9yeSB3aGVyZSB0 aGV5IGNhbiBiZSBhdXRvbWF0aWNhbGx5IGFwcGxpZWQuIEFuCisgIDxsaXRlcmFsPmFkdmljZSBz dGFzaDwvbGl0ZXJhbD4gaXMgYSBtYXBwaW5nIGZyb20KKyAgPGxpbmsgbGlua2VuZD0iZ3VjLWNv bXB1dGUtcXVlcnktaWQiPnF1ZXJ5IGlkZW50aWZpZXJzPC9saW5rPiB0byBwbGFuIGFkdmljZQor ICBzdHJpbmdzLiBXaGVuZXZlciBhIHNlc3Npb24gaXMgYXNrZWQgdG8gcGxhbiBhIHF1ZXJ5IHdo b3NlIHF1ZXJ5IElEIGFwcGVhcnMKKyAgaW4gdGhlIHJlbGV2YW50IGFkdmljZSBzdGFzaCwgdGhl IHBsYW4gYWR2aWNlIHN0cmluZyBpcyBhdXRvbWF0aWNhbGx5IGFwcGxpZWQKKyAgdG8gZ3VpZGUg cGxhbm5pbmcuIE5vdGUgdGhhdCBhZHZpY2Ugc3Rhc2hlcyBleGlzdCBwdXJlbHkgaW4gbWVtb3J5 LiBUaGlzCisgIG1lYW5zIGJvdGggdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gYmUgbWluZGZ1bCBv ZiBtZW1vcnkgY29uc3VtcHRpb24gd2hlbgorICBkZWNpZGluZyBob3cgbXVjaCBwbGFuIGFkdmlj ZSB0byBzdGFzaCwgYW5kIGFsc28gdGhhdCBhZHZpY2Ugc3Rhc2hlcyBtdXN0CisgIGJlIHJlY3Jl YXRlZCBhbmQgcmVwb3B1bGF0ZWQgd2hlbmV2ZXIgdGhlIHNlcnZlciBpcyByZXN0YXJ0ZWQuCisg PC9wYXJhPgorCisgPHBhcmE+CisgIEluIG9yZGVyIHRvIHVzZSB0aGlzIG1vZHVsZSwgeW91IHdp bGwgbmVlZCB0byBleGVjdXRlCisgIDxsaXRlcmFsPkNSRUFURSBFWFRFTlNJT04gcGdfc3Rhc2hf YWR2aWNlPC9saXRlcmFsPiBpbiBhdCBsZWFzdAorICBvbmUgZGF0YWJhc2UsIHNvIHRoYXQgeW91 IGhhdmUgYWNjZXNzIHRvIHRoZSBTUUwgZnVuY3Rpb25zIHRvIG1hbmFnZQorICBhZHZpY2Ugc3Rh c2hlcy4gWW91IHdpbGwgYWxzbyBuZWVkIHRoZSA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2U8L2xp dGVyYWw+CisgIG1vZHVsZSB0byBiZSBsb2FkZWQgaW4gYWxsIHNlc3Npb25zIHdoZXJlIHlvdSB3 YW50IHRoaXMgbW9kdWxlIHRvCisgIGF1dG9tYXRpY2FsbHkgYXBwbHkgYWR2aWNlLiBJdCB3aWxs IHVzdWFsbHkgYmUgYmVzdCB0byBkbyB0aGlzIGJ5IGFkZGluZworICA8bGl0ZXJhbD5wZ19zdGFz aF9hZHZpY2U8L2xpdGVyYWw+IHRvCisgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQtcHJlbG9h ZC1saWJyYXJpZXMiLz4gYW5kIHJlc3RhcnRpbmcgdGhlIHNlcnZlci4KKyA8L3BhcmE+CisKKyA8 cGFyYT4KKyAgT25jZSB5b3UgaGF2ZSBtZXQgdGhlIGFib3ZlIGNyaXRlcmlhLCB5b3UgY2FuIGNy ZWF0ZSBhZHZpY2Ugc3Rhc2hlcworICB1c2luZyB0aGUgPGxpdGVyYWw+cGdfY3JlYXRlX2Fkdmlj ZV9zdGFzaDwvbGl0ZXJhbD4gZnVuY3Rpb24gZGVzY3JpYmVkCisgIGJlbG93IGFuZCBzZXQgdGhl IHBsYW4gYWR2aWNlIGZvciBhIGdpdmVuIHF1ZXJ5IElEIGluIGEgZ2l2ZW4gc3Rhc2ggdXNpbmcK KyAgdGhlIDxsaXRlcmFsPnBnX3NldF9zdGFzaGVkX2FkdmljZTwvbGl0ZXJhbD4gZnVuY3Rpb24u IFRoZW4sIHlvdSBuZWVkCisgIG9ubHkgY29uZmlndXJlIDxsaXRlcmFsPnBnX3N0YXNoX2Fkdmlj ZS5zdGFzaF9uYW1lPC9saXRlcmFsPiB0byBwb2ludAorICB0byB0aGUgY2hvc2VuIGFkdmljZSBz dGFzaCBuYW1lLiBGb3Igc29tZSB1c2UgY2FzZXMsIHJhdGhlciB0aGFuIHNldHRpbmcKKyAgdGhp cyBvbiBhIHN5c3RlbS13aWRlIGJhc2lzLCB5b3UgbWF5IGZpbmQgaXQgaGVscGZ1bCB0byB1c2UK KyAgPGxpdGVyYWw+QUxURVIgREFUQUJBU0UgLi4uIFNFVDwvbGl0ZXJhbD4gb3IKKyAgPGxpdGVy YWw+QUxURVIgUk9MRSAuLi4gU0VUPC9saXRlcmFsPiB0byBjb25maWd1cmUgdmFsdWVzIHRoYXQg d2lsbCBhcHBseQorICBvbmx5IHRvIGEgZGF0YWJhc2Ugb3Igb25seSB0byBhIGNlcnRhaW4gcm9s ZS4gTGlrZXdpc2UsIGl0IG1heSBzb21ldGltZXMKKyAgYmUgYmV0dGVyIHRvIHNldCB0aGUgc3Rh c2ggbmFtZSBpbiBhIHBhcnRpY3VsYXIgc2Vzc2lvbiB1c2luZworICA8bGl0ZXJhbD5TRVQ8L2xp dGVyYWw+LgorIDwvcGFyYT4KKworIDxwYXJhPgorICBCZWNhdXNlIDxsaXRlcmFsPnBnX3N0YXNo X2FkdmljZTwvbGl0ZXJhbD4gd29ya3Mgb24gdGhlIGJhc2lzIG9mIHF1ZXJ5CisgIGlkZW50aWZp ZXJzLCB5b3Ugd2lsbCBuZWVkIHRvIGRldGVybWluZSB0aGUgcXVlcnkgaWRlbnRpZmllciBmb3Ig ZWFjaCBxdWVyeQorICB3aG9zZSBwbGFuIHlvdSB3aXNoIHRvIGNvbnRyb2wuIFlvdSB3aWxsIGFs c28gbmVlZCB0byBkZXRlcm1pbmUgdGhlIGFkdmljZQorICBzdHJpbmcgdGhhdCB5b3Ugd2lzaCB0 byBzdG9yZSBmb3IgZWFjaCBxdWVyeS4gT25lIHdheSB0byBkbyB0aGlzIGlzIHRvIHVzZQorICA8 bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPjogdGhlIDxsaXRlcmFsPlZFUkJPU0U8L2xpdGVyYWw+ IG9wdGlvbiB3aWxsCisgIHNob3cgdGhlIHF1ZXJ5IElELCBhbmQgdGhlIDxsaXRlcmFsPlBMQU5f QURWSUNFPC9saXRlcmFsPiBvcHRpb24gd2lsbAorICBzaG93IHBsYW4gYWR2aWNlLiA8eHJlZiBs aW5rZW5kPSJwZ2NvbGxlY3RhZHZpY2UiIC8+IGNhbiBiZSB1c2VkIHRvCisgIG9idGFpbiB0aGlz IGluZm9ybWF0aW9uIGZvciBhbiBlbnRpcmUgd29ya2xvYWQsIGFsdGhvdWdoIGNhcmUgbXVzdCBi ZQorICB0YWtlbiBzaW5jZSBpdCBjYW4gdXNlIHVwIGEgbG90IG9mIG1lbW9yeSB2ZXJ5IHF1aWNr bHkuIFF1ZXJ5IGlkZW50aWZpZXJzIGNhbgorICBhbHNvIGJlIG9idGFpbmVkIHRocm91Z2ggdG9v bHMgc3VjaCBhcyA8eHJlZiBsaW5rZW5kPSJwZ3N0YXRzdGF0ZW1lbnRzIiAvPgorICBvciA8eHJl ZiBsaW5rZW5kPSJtb25pdG9yaW5nLXBnLXN0YXQtYWN0aXZpdHktdmlldyIgLz4sIGJ1dCB0aGVz ZSB0b29scworICB3aWxsIG5vdCBwcm92aWRlIHBsYW4gYWR2aWNlIHN0cmluZ3MuIE5vdGUgdGhh dAorICA8eHJlZiBsaW5rZW5kPSJndWMtY29tcHV0ZS1xdWVyeS1pZCIgLz4gbXVzdCBiZSBlbmFi bGVkIGZvciBxdWVyeQorICBpZGVudGlmaWVycyB0byBiZSBjb21wdXRlZDsgaWYgc2V0IHRvIDxs aXRlcmFsPmF1dG88L2xpdGVyYWw+LCBsb2FkaW5nCisgIDxsaXRlcmFsPnBnX3N0YXNoX2Fkdmlj ZTwvbGl0ZXJhbD4gd2lsbCBlbmFibGUgaXQgYXV0b21hdGljYWxseS4KKyA8L3BhcmE+CisKKyA8 cGFyYT4KKyAgR2VuZXJhbGx5LCB0aGUgZmFjdCB0aGF0IHRoZSBwbGFubmVyIGlzIGFibGUgdG8g Y2hhbmdlIHF1ZXJ5IHBsYW5zIGFzCisgIHRoZSB1bmRlcmx5aW5nIGRpc3RyaWJ1dGlvbiBvZiBk YXRhIGNoYW5nZXMgaXMgYSBmZWF0dXJlLCBub3QgYSBidWcuCisgIE1vcmVvdmVyLCBhcHBseWlu ZyBwbGFuIGFkdmljZSBjYW4gaGF2ZSBhIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgY29zdCBldmVu CisgIHdoZW4gaXQgZG9lcyBub3QgcmVzdWx0IGluIGEgY2hhbmdlIHRvIHRoZSBxdWVyeSBwbGFu LiBUaGVyZWZvcmUsIGl0IGlzCisgIGEgZ29vZCBpZGVhIHRvIHVzZSB0aGlzIGZlYXR1cmUgb25s eSB3aGVuIGFuZCB0byB0aGUgZXh0ZW50IG5lZWRlZC4KKyAgUGxhbiBhZHZpY2Ugc3RyaW5ncyBj YW4gYmUgdHJpbW1lZCBkb3duIHRvIG1lbnRpb24gb25seSB0aG9zZSBhc3BlY3RzCisgIG9mIHRo ZSBwbGFuIHRoYXQgbmVlZCB0byBiZSBjb250cm9sbGVkLCBhbmQgdXNlZCBvbmx5IGZvciBxdWVy aWVzIHdoZXJlCisgIHRoZXJlIGlzIGJlbGlldmVkIHRvIGJlIGEgc2lnbmlmaWNhbnQgcmlzayBv ZiBwbGFubmVyIGVycm9yLgorIDwvcGFyYT4KKworIDxwYXJhPgorICBOb3RlIHRoYXQgPGxpdGVy YWw+cGdfc3Rhc2hfYWR2aWNlPC9saXRlcmFsPiBjdXJyZW50bHkgbGFja3MgYSBzb3BoaXN0aWNh dGVkCisgIHNlY3VyaXR5IG1vZGVsLiBPbmx5IHRoZSBzdXBlcnVzZXIsIG9yIGEgdXNlciB0byB3 aG9tIHRoZSBzdXBlcnVzZXIgaGFzCisgIGdyYW50ZWQgPGxpdGVyYWw+RVhFQ1VURTwvbGl0ZXJh bD4gcGVybWlzc2lvbiBvbiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLAorICBtYXkgY3JlYXRlIGFk dmljZSBzdGFzaGVzIG9yIGFsdGVyIHRoZWlyIGNvbnRlbnRzLCBidXQgYW55IHVzZXIgbWF5IHNl dAorICA8bGl0ZXJhbD5wZ19zdGFzaF9hZHZpY2Uuc3Rhc2hfbmFtZTwvbGl0ZXJhbD4gZm9yIHRo ZWlyIHNlc3Npb24sIGFuZCB0aGlzCisgIG1heSByZXZlYWwgdGhlIGNvbnRlbnRzIG9mIGFueSBh ZHZpY2Ugc3Rhc2ggd2l0aCB0aGF0IG5hbWUuIFVzZXJzIHNob3VsZAorICBhc3N1bWUgdGhhdCBp bmZvcm1hdGlvbiBlbWJlZGRlZCBpbiBzdGFzaGVkIGFkdmljZSBzdHJpbmdzIG1heSBiZWNvbWUg dmlzaWJsZQorICB0byBub25wcml2aWxlZ2VkIHVzZXJzLgorIDwvcGFyYT4KKworIDxzZWN0MiBp ZD0icGdzdGFzaGFkdmljZS1mdW5jdGlvbnMiPgorICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4K KworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAg ICA8ZnVuY3Rpb24+cGdfY3JlYXRlX2FkdmljZV9zdGFzaChzdGFzaF9uYW1lIHRleHQpIHJldHVy bnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJpbWFyeT5wZ19j cmVhdGVfYWR2aWNlX3N0YXNoPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgQ3JlYXRlcyBhIG5ldywg ZW1wdHkgYWR2aWNlIHN0YXNoIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19kcm9wX2FkdmljZV9zdGFzaChzdGFzaF9uYW1l IHRleHQpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8 cHJpbWFyeT5wZ19kcm9wX2FkdmljZV9zdGFzaDwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorCisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIERyb3Bz IHRoZSBuYW1lZCBhZHZpY2Ugc3Rhc2ggYW5kIGFsbCBvZiBpdHMgZW50cmllcy4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX3NldF9zdGFzaGVkX2FkdmljZShz dGFzaF9uYW1lIHRleHQsIHF1ZXJ5X2lkIGJpZ2ludCwKKyAgICAgICBhZHZpY2Vfc3RyaW5nIHRl eHQpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJp bWFyeT5wZ19zZXRfc3Rhc2hlZF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgor ICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBTdG9yZXMg YW4gYWR2aWNlIHN0cmluZyBpbiB0aGUgbmFtZWQgYWR2aWNlIHN0YXNoLCBhc3NvY2lhdGVkIHdp dGgKKyAgICAgIHRoZSBnaXZlbiBxdWVyeSBpZGVudGlmaWVyLiBJZiBhbiBlbnRyeSBmb3IgdGhh dCBxdWVyeSBpZGVudGlmaWVyCisgICAgICBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc3Rhc2gsIGl0 IGlzIHJlcGxhY2VkLiBJZgorICAgICAgPHBhcmFtZXRlcj5hZHZpY2Vfc3RyaW5nPC9wYXJhbWV0 ZXI+IGlzIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LAorICAgICAgYW55IGV4aXN0aW5nIGVudHJ5 IGZvciB0aGF0IHF1ZXJ5IGlkZW50aWZpZXIgaXMgcmVtb3ZlZC4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAg ICA8dGVybT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9hZHZpY2Vfc3Rhc2hlcygpIHJldHVybnMg c2V0b2YgKHN0YXNoX25hbWUgdGV4dCwKKyAgICAgICBudW1fZW50cmllcyBiaWdpbnQpPC9mdW5j dGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5PnBnX2dldF9hZHZpY2Vfc3Rh c2hlczwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFJldHVybnMgb25lIHJvdyBmb3IgZWFjaCBhZHZp Y2Ugc3Rhc2gsIHNob3dpbmcgdGhlIHN0YXNoIG5hbWUgYW5kCisgICAgICB0aGUgbnVtYmVyIG9m IGVudHJpZXMgaXQgY29udGFpbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAg PC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxm dW5jdGlvbj5wZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzKHN0YXNoX25hbWUgdGV4dCkgcmV0 dXJucyBzZXRvZgorICAgICAgIChzdGFzaF9uYW1lIHRleHQsIHF1ZXJ5X2lkIGJpZ2ludCwgYWR2 aWNlX3N0cmluZyB0ZXh0KTwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJp bWFyeT5wZ19nZXRfYWR2aWNlX3N0YXNoX2NvbnRlbnRzPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg UmV0dXJucyBvbmUgcm93IGZvciBlYWNoIGVudHJ5IGluIHRoZSBuYW1lZCBhZHZpY2Ugc3Rhc2gu IElmCisgICAgICA8cGFyYW1ldGVyPnN0YXNoX25hbWU8L3BhcmFtZXRlcj4gaXMgPGxpdGVyYWw+ TlVMTDwvbGl0ZXJhbD4sIHJldHVybnMKKyAgICAgIGVudHJpZXMgZnJvbSBhbGwgc3Rhc2hlcy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8 L3ZhcmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBnc3Rhc2hhZHZpY2Ut Y29uZmlnLXBhcmFtcyI+CisgIDx0aXRsZT5Db25maWd1cmF0aW9uIFBhcmFtZXRlcnM8L3RpdGxl PgorCisgIDx2YXJpYWJsZWxpc3Q+CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+Cisg ICAgIDx2YXJuYW1lPnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC92YXJuYW1lPiAoPHR5cGU+ c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1l PnBnX3N0YXNoX2FkdmljZS5zdGFzaF9uYW1lPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFt ZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+CisgICAgPC90ZXJtPgorCisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgYWR2 aWNlIHN0YXNoIHRvIGNvbnN1bHQgZHVyaW5nIHF1ZXJ5CisgICAgICBwbGFubmluZy4gVGhlIGRl ZmF1bHQgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgd2hpY2ggZGlzYWJsZXMKKyAgICAgIHRo aXMgbW9kdWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVu dHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0icGdz dGFzaGFkdmljZS1hdXRob3IiPgorICA8dGl0bGU+QXV0aG9yPC90aXRsZT4KKworICA8cGFyYT4K KyAgIFJvYmVydCBIYWFzIDxlbWFpbD5yaGFhc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+CisgIDwv cGFyYT4KKyA8L3NlY3QyPgorCis8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRl eCA3MzQ5YzA2YTA2Ny4uMDAwMGU1NmQ1NWMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBA IC00MDU2LDYgKzQwNTYsMTIgQEAgcGdwYV90cm92ZV9sb29rdXBfdHlwZQogcGdwYV90cm92ZV9y ZXN1bHQKIHBncGFfdHJvdmVfc2xpY2UKIHBncGFfdW5yb2xsZWRfam9pbgorcGdzYV9lbnRyeQor cGdzYV9lbnRyeV9rZXkKK3Bnc2Ffc2hhcmVkX3N0YXRlCitwZ3NhX3N0YXNoCitwZ3NhX3N0YXNo X2NvdW50CitwZ3NhX3N0YXNoX25hbWUKIHBnc29ja2V0CiBwZ3NxbF90aGluZ190CiBwZ3NzRW50 cnkKLS0gCjIuNTEuMAoK --0000000000003fa51c064dcb9379--